From afea00926ea749537040dd651179684dce6082e5 Mon Sep 17 00:00:00 2001 From: liyulin <501351981@qq.com> Date: Tue, 27 Feb 2024 17:59:08 +0800 Subject: [PATCH] =?UTF-8?q?change:=20excel=E5=A2=9E=E5=8A=A0beforeTransfor?= =?UTF-8?q?mData=E9=92=A9=E5=AD=90=E5=87=BD=E6=95=B0=E3=80=81pdf=E6=94=AF?= =?UTF-8?q?=E6=8C=81requestOptions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/packages/js-excel/package.json | 2 +- core/packages/js-excel/src/main.js | 3 + core/packages/js-pdf/package.json | 2 +- core/packages/js-pdf/src/main.js | 2 + core/packages/vue-excel/package.json | 2 +- core/packages/vue-excel/src/main.vue | 3 + core/packages/vue-pdf/package.json | 2 +- core/packages/vue-pdf/src/main.vue | 2 + core/src/components/DocxDemo.vue | 6 + core/src/components/ExcelDemo.vue | 7 +- core/src/components/PdfDemo.vue | 7 + docs/config/index.md | 11 +- examples/dist/assets/DocxDemo-8c364088.js | 1 + examples/dist/assets/DocxDemo-9ea79e80.css | 1 + examples/dist/assets/DocxDemo-dd2985dd.js | 1 + examples/dist/assets/ExcelDemo-291862f2.js | 1 + examples/dist/assets/ExcelDemo-426f8ab1.js | 1 + examples/dist/assets/JsDocxDemo-0aff0a60.js | 1 + examples/dist/assets/JsDocxDemo-28b06ad6.js | 1 + examples/dist/assets/JsExcelDemo-91fa8b62.js | 1 + examples/dist/assets/JsExcelDemo-fa1996af.js | 1 + examples/dist/assets/JsPdfDemo-37829189.js | 1 + examples/dist/assets/JsPdfDemo-d030d3e0.js | 1 + examples/dist/assets/PdfDemo-64ba1228.js | 3 + examples/dist/assets/PdfDemo-d966f1fa.js | 3 + .../dist/assets/PreviewWrapper-1c0384a3.js | 1 + .../dist/assets/PreviewWrapper-a5ea54f2.js | 1 + examples/dist/assets/docx-19f6a6c1.js | 97 ++++++++++++++ examples/dist/assets/docx-d30f8993.js | 97 ++++++++++++++ examples/dist/assets/hack-67811302.js | 96 ++++++++++++++ examples/dist/assets/hack-f62f946f.js | 96 ++++++++++++++ examples/dist/assets/index-58cbfcf0.js | 121 ++++++++++++++++++ examples/dist/assets/index-5d373288.js | 121 ++++++++++++++++++ examples/dist/assets/omit-4f9f5d5d.js | 1 + examples/dist/assets/omit-a65afa34.js | 1 + examples/dist/index.html | 2 +- examples/docs/404.html | 2 +- ...066edee.js => config_index.md.95a7c30b.js} | 10 +- ...an.js => config_index.md.95a7c30b.lean.js} | 2 +- examples/docs/config/event.html | 2 +- examples/docs/config/index.html | 12 +- examples/docs/guide/contact.html | 2 +- examples/docs/guide/faq.html | 2 +- examples/docs/guide/index.html | 2 +- examples/docs/guide/js-preview.html | 2 +- examples/docs/guide/preview-docx.html | 2 +- examples/docs/guide/preview-pdf.html | 2 +- examples/docs/guide/preview-xlsx.html | 2 +- examples/docs/hashmap.json | 2 +- examples/docs/index.html | 2 +- 50 files changed, 719 insertions(+), 27 deletions(-) create mode 100644 examples/dist/assets/DocxDemo-8c364088.js create mode 100644 examples/dist/assets/DocxDemo-9ea79e80.css create mode 100644 examples/dist/assets/DocxDemo-dd2985dd.js create mode 100644 examples/dist/assets/ExcelDemo-291862f2.js create mode 100644 examples/dist/assets/ExcelDemo-426f8ab1.js create mode 100644 examples/dist/assets/JsDocxDemo-0aff0a60.js create mode 100644 examples/dist/assets/JsDocxDemo-28b06ad6.js create mode 100644 examples/dist/assets/JsExcelDemo-91fa8b62.js create mode 100644 examples/dist/assets/JsExcelDemo-fa1996af.js create mode 100644 examples/dist/assets/JsPdfDemo-37829189.js create mode 100644 examples/dist/assets/JsPdfDemo-d030d3e0.js create mode 100644 examples/dist/assets/PdfDemo-64ba1228.js create mode 100644 examples/dist/assets/PdfDemo-d966f1fa.js create mode 100644 examples/dist/assets/PreviewWrapper-1c0384a3.js create mode 100644 examples/dist/assets/PreviewWrapper-a5ea54f2.js create mode 100644 examples/dist/assets/docx-19f6a6c1.js create mode 100644 examples/dist/assets/docx-d30f8993.js create mode 100644 examples/dist/assets/hack-67811302.js create mode 100644 examples/dist/assets/hack-f62f946f.js create mode 100644 examples/dist/assets/index-58cbfcf0.js create mode 100644 examples/dist/assets/index-5d373288.js create mode 100644 examples/dist/assets/omit-4f9f5d5d.js create mode 100644 examples/dist/assets/omit-a65afa34.js rename examples/docs/assets/{config_index.md.a066edee.js => config_index.md.95a7c30b.js} (88%) rename examples/docs/assets/{config_index.md.a066edee.lean.js => config_index.md.95a7c30b.lean.js} (81%) diff --git a/core/packages/js-excel/package.json b/core/packages/js-excel/package.json index 68ca383..5a284b8 100644 --- a/core/packages/js-excel/package.json +++ b/core/packages/js-excel/package.json @@ -1,7 +1,7 @@ { "name": "@js-preview/excel", "type" :"module", - "version": "1.6.2", + "version": "1.6.3", "description": "", "main": "lib/index.js", "files": [ diff --git a/core/packages/js-excel/src/main.js b/core/packages/js-excel/src/main.js index f4ba97b..bb52e95 100644 --- a/core/packages/js-excel/src/main.js +++ b/core/packages/js-excel/src/main.js @@ -96,6 +96,9 @@ class JsExcelPreview { if (!workbook._worksheets || workbook._worksheets.length === 0) { throw new Error('未获取到数据,可能文件格式不正确或文件已损坏'); } + if(this.options.beforeTransformData && typeof this.options.beforeTransformData === 'function' ){ + workbook = this.options.beforeTransformData(workbook); + } let {workbookData, medias, workbookSource} = transferExcelToSpreadSheet(workbook, this.options); if(this.options.transformData && typeof this.options.transformData === 'function' ){ workbookData = this.options.transformData(workbookData); diff --git a/core/packages/js-pdf/package.json b/core/packages/js-pdf/package.json index 64e09e8..9c141b2 100644 --- a/core/packages/js-pdf/package.json +++ b/core/packages/js-pdf/package.json @@ -1,7 +1,7 @@ { "name": "@js-preview/pdf", "type" :"module", - "version": "1.6.2", + "version": "1.6.3", "description": "", "main": "lib/index.js", "files": [ diff --git a/core/packages/js-pdf/src/main.js b/core/packages/js-pdf/src/main.js index eb539f7..feb7292 100644 --- a/core/packages/js-pdf/src/main.js +++ b/core/packages/js-pdf/src/main.js @@ -57,6 +57,8 @@ class JsPdfPreview{ getDocument(src){ const loadingTask = window.pdfjsLib.getDocument({ url: getUrl(src), + httpHeaders: this.requestOptions && this.requestOptions.headers, + withCredentials: this.requestOptions && this.requestOptions.withCredentials, cMapUrl: `${this.options.staticFileUrl.endsWith('/') ? this.options.staticFileUrl : this.options.staticFileUrl + '/'}cmaps/`, cMapPacked: true, enableXfa: true, diff --git a/core/packages/vue-excel/package.json b/core/packages/vue-excel/package.json index fd7bcb6..e56bc40 100644 --- a/core/packages/vue-excel/package.json +++ b/core/packages/vue-excel/package.json @@ -1,6 +1,6 @@ { "name": "@vue-office/excel", - "version": "1.6.1", + "version": "1.6.3", "description": "", "main": "lib/index.js", "files": [ diff --git a/core/packages/vue-excel/src/main.vue b/core/packages/vue-excel/src/main.vue index b6fcef8..c807189 100644 --- a/core/packages/vue-excel/src/main.vue +++ b/core/packages/vue-excel/src/main.vue @@ -45,6 +45,9 @@ export default defineComponent({ if (!workbook._worksheets || workbook._worksheets.length === 0) { throw new Error('未获取到数据,可能文件格式不正确或文件已损坏'); } + if(props.options.beforeTransformData && typeof props.options.beforeTransformData === 'function' ){ + workbook = props.options.beforeTransformData(workbook); + } let {workbookData, medias, workbookSource} = transferExcelToSpreadSheet(workbook, {...defaultOptions, ...props.options}); if(props.options.transformData && typeof props.options.transformData === 'function' ){ workbookData = props.options.transformData(workbookData); diff --git a/core/packages/vue-pdf/package.json b/core/packages/vue-pdf/package.json index 996c91f..ac89b47 100644 --- a/core/packages/vue-pdf/package.json +++ b/core/packages/vue-pdf/package.json @@ -1,6 +1,6 @@ { "name": "@vue-office/pdf", - "version": "1.6.2", + "version": "1.6.3", "description": "", "main": "lib/index.js", "files": [ diff --git a/core/packages/vue-pdf/src/main.vue b/core/packages/vue-pdf/src/main.vue index f8a7fd1..7f9b5f3 100644 --- a/core/packages/vue-pdf/src/main.vue +++ b/core/packages/vue-pdf/src/main.vue @@ -68,6 +68,8 @@ export default defineComponent({ } loadingTask = window.pdfjsLib.getDocument({ url: getUrl(props.src), + httpHeaders: props.requestOptions && props.requestOptions.headers, + withCredentials: props.requestOptions && props.requestOptions.withCredentials, cMapUrl: `${props.staticFileUrl.endsWith('/') ? props.staticFileUrl : props.staticFileUrl + '/'}cmaps/`, cMapPacked: true, enableXfa: true, diff --git a/core/src/components/DocxDemo.vue b/core/src/components/DocxDemo.vue index 11eceec..8f2f8a3 100644 --- a/core/src/components/DocxDemo.vue +++ b/core/src/components/DocxDemo.vue @@ -16,6 +16,11 @@ const defaultSrc = location.origin + + 'static/test-files/test.docx'; const docxRef = ref(); +const requestOptions = { + headers: { + 'component-name': 'VueOfficeDocx' + } +}; // setTimeout(()=>{ // console.log( docxRef.value.download()); @@ -32,6 +37,7 @@ const docxRef = ref(); { // console.log( docxRef.value.download()); // }, 2000); @@ -33,6 +39,7 @@ window.docxRef = docxRef; :src="slotProps.src" style="flex: 1;height: 0" :options="{lazy:true}" + :request-options="requestOptions" @rendered="onRendered" @error="onError" > diff --git a/docs/config/index.md b/docs/config/index.md index 33140d4..6de540a 100644 --- a/docs/config/index.md +++ b/docs/config/index.md @@ -30,7 +30,10 @@ widthOffset:在默认渲染的列表宽度上再加 Npx宽 heightOffset:在默认渲染的列表高度上再加 Npx高 -transformData:在预览之前可以通过transformData对即将渲染数据及样式进行修改 +beforeTransformData: 底层通过exceljs获取excel文件内容,通过该钩子函数,可以对获取的excel文件内容进行修改,比如某个单元格的数据显示不正确,可以在此自行修改每个单元格的value值。 + + +transformData:将获取到的excel数据进行处理之后且渲染到页面之前,可通过transformData对即将渲染的数据及样式进行修改,此时每个单元格的text值就是即将渲染到页面上的内容。 ```javascript { @@ -38,8 +41,12 @@ transformData:在预览之前可以通过transformData对即将渲染数据及 "minRowLength": 100, "widthOffset": 10, //在默认渲染的列表宽度上再加10px宽 "heightOffset": 10, //在默认渲染的列表高度上再加10px高 + "beforeTransformData": function (workbookData){ + //修改workbookData,可以打印出来看看数据格式 + return workbookData; + }, "transformData": function (workbookData){ - //修改workbookData + //修改workbookData,可以打印出来看看数据格式 return workbookData; } } diff --git a/examples/dist/assets/DocxDemo-8c364088.js b/examples/dist/assets/DocxDemo-8c364088.js new file mode 100644 index 0000000..de643b7 --- /dev/null +++ b/examples/dist/assets/DocxDemo-8c364088.js @@ -0,0 +1 @@ +import{d as r}from"./docx-19f6a6c1.js";import{d as p}from"./url-de9b02cf.js";import{d as x,_ as l,r as _,o as h,w as v,a as m,c as g,b as D,e as w,f as y,g as O,u as B}from"./index-5d373288.js";import{P as R,u}from"./PreviewWrapper-a5ea54f2.js";import"./_commonjs-dynamic-modules-302442b1.js";typeof window.setImmediate>"u"&&(window.setImmediate=function(e,...o){setTimeout(()=>e(o))});const $=x({name:"VueOfficeDocx",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},options:{type:Object,default:()=>({})}},emits:["rendered","error"],setup(e,{emit:o}){const n=_(null);let c=null;function a(){let t=n.value;r.getData(e.src,e.requestOptions).then(async i=>{c=await r.getBlob(i),r.render(c,t,e.options).then(()=>{o("rendered")}).catch(f=>{r.render("",t,e.options),o("error",f)})}).catch(i=>{r.render("",t,e.options),o("error",i)})}h(()=>{e.src&&a()}),v(()=>e.src,()=>{e.src?a():r.render("",n.value,e.options).then(()=>{o("rendered")})});function s(t){p(t||`vue-office-docx-${new Date().getTime()}.docx`,c)}return{rootRef:n,save:s}}}),b={class:"vue-office-docx"},V={class:"vue-office-docx-main",ref:"rootRef"};function k(e,o,n,c,a,s){return m(),g("div",b,[D("div",V,null,512)])}const d=l($,[["render",k]]);d.install=function(e){e.component(d.name,d)};const q={__name:"DocxDemo",setup(e){function o(){u.hideLoading()}function n(t){console.log("出差",t),u.hideLoading()}const c=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.docx",a=_(),s={headers:{"component-name":"VueOfficeDocx"}};return(t,i)=>(m(),w(R,{accept:".docx",placeholder:"请输入docx文件地址","default-src":c},{default:y(f=>[O(B(d),{ref_key:"docxRef",ref:a,src:f.src,"request-options":s,style:{flex:"1",height:"0"},onRendered:o,onError:n},null,8,["src"])]),_:1}))}},N=l(q,[["__scopeId","data-v-844ea5ef"]]);export{N as default}; diff --git a/examples/dist/assets/DocxDemo-9ea79e80.css b/examples/dist/assets/DocxDemo-9ea79e80.css new file mode 100644 index 0000000..4bd26e0 --- /dev/null +++ b/examples/dist/assets/DocxDemo-9ea79e80.css @@ -0,0 +1 @@ +.vue-office-docx{height:100%;overflow-y:auto}.vue-office-docx .docx-wrapper>section.docx{margin-bottom:5px}@media screen and (max-width: 800px){.vue-office-docx .docx-wrapper{padding:10px}.vue-office-docx .docx-wrapper>section.docx{padding:10px!important;width:100%!important}}.operate-area[data-v-844ea5ef]{display:flex;margin:10px;align-items:center} diff --git a/examples/dist/assets/DocxDemo-dd2985dd.js b/examples/dist/assets/DocxDemo-dd2985dd.js new file mode 100644 index 0000000..763524f --- /dev/null +++ b/examples/dist/assets/DocxDemo-dd2985dd.js @@ -0,0 +1 @@ +import{d as r}from"./docx-d30f8993.js";import{d as p}from"./url-de9b02cf.js";import{d as x,_ as l,r as _,o as h,w as v,a as m,c as g,b as D,e as w,f as y,g as O,u as B}from"./index-58cbfcf0.js";import{P as R,u}from"./PreviewWrapper-1c0384a3.js";import"./_commonjs-dynamic-modules-302442b1.js";typeof window.setImmediate>"u"&&(window.setImmediate=function(e,...o){setTimeout(()=>e(o))});const $=x({name:"VueOfficeDocx",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},options:{type:Object,default:()=>({})}},emits:["rendered","error"],setup(e,{emit:o}){const n=_(null);let c=null;function a(){let t=n.value;r.getData(e.src,e.requestOptions).then(async i=>{c=await r.getBlob(i),r.render(c,t,e.options).then(()=>{o("rendered")}).catch(f=>{r.render("",t,e.options),o("error",f)})}).catch(i=>{r.render("",t,e.options),o("error",i)})}h(()=>{e.src&&a()}),v(()=>e.src,()=>{e.src?a():r.render("",n.value,e.options).then(()=>{o("rendered")})});function s(t){p(t||`vue-office-docx-${new Date().getTime()}.docx`,c)}return{rootRef:n,save:s}}}),b={class:"vue-office-docx"},V={class:"vue-office-docx-main",ref:"rootRef"};function k(e,o,n,c,a,s){return m(),g("div",b,[D("div",V,null,512)])}const d=l($,[["render",k]]);d.install=function(e){e.component(d.name,d)};const q={__name:"DocxDemo",setup(e){function o(){u.hideLoading()}function n(t){console.log("出差",t),u.hideLoading()}const c=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.docx",a=_(),s={headers:{"component-name":"VueOfficeDocx"}};return(t,i)=>(m(),w(R,{accept:".docx",placeholder:"请输入docx文件地址","default-src":c},{default:y(f=>[O(B(d),{ref_key:"docxRef",ref:a,src:f.src,"request-options":s,style:{flex:"1",height:"0"},onRendered:o,onError:n},null,8,["src"])]),_:1}))}},N=l(q,[["__scopeId","data-v-844ea5ef"]]);export{N as default}; diff --git a/examples/dist/assets/ExcelDemo-291862f2.js b/examples/dist/assets/ExcelDemo-291862f2.js new file mode 100644 index 0000000..cb421cd --- /dev/null +++ b/examples/dist/assets/ExcelDemo-291862f2.js @@ -0,0 +1 @@ +import{l as C,r as R,S as B,a as x,g,b as $,t as L,c as O}from"./hack-f62f946f.js";import{d as q}from"./url-de9b02cf.js";import{d as F,_ as V,r as w,o as W,n as j,h as I,w as M,a as y,c as N,b as P,i as A,e as H,f as U,j as z,g as G,u as J}from"./index-58cbfcf0.js";import{P as K,u as k}from"./PreviewWrapper-1c0384a3.js";import"./_commonjs-dynamic-modules-302442b1.js";const T={minColLength:20},Q=F({name:"VueOfficeExcel",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},options:{type:Object,default:()=>({...T})}},emits:["rendered","error"],setup(e,{emit:d}){const l=w(null),r=w(null);let s={_worksheets:[]},c=[],i=0,o=null,t=null,f=null,m=null;function p(u){m=u,$(u).then(n=>{if(!n._worksheets||n._worksheets.length===0)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");e.options.beforeTransformData&&typeof e.options.beforeTransformData=="function"&&(n=e.options.beforeTransformData(n));let{workbookData:h,medias:b,workbookSource:a}=L(n,{...T,...e.options});e.options.transformData&&typeof e.options.transformData=="function"&&(h=e.options.transformData(h)),c=b,s=a,f=null,i=0,O(),t.loadData(h),x(o,c,s._worksheets[i],f,e.options),d("rendered")}).catch(n=>{console.warn(n),c=[],s={_worksheets:[]},O(),t&&t.loadData({}),d("error",n)})}const v=C.debounce(R,200).bind(this,r.value),D=new MutationObserver(v),E={attributes:!0,childList:!0,subtree:!0};W(()=>{j(()=>{D.observe(r.value,E),v(r),t=new B(r.value,{mode:"read",showToolbar:!1,showContextmenu:e.options.showContextmenu||!1,view:{height:()=>l.value&&l.value.clientHeight||300,width:()=>l.value&&l.value.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let u=t.bottombar.swapFunc;t.bottombar.swapFunc=function(a){u.call(t.bottombar,a),i=a,setTimeout(()=>{t.reRender(),x(o,c,s._worksheets[i],f,e.options)})};let n=t.sheet.editor.clear;t.sheet.editor.clear=function(...a){n.apply(t.sheet.editor,a),setTimeout(()=>{x(o,c,s._worksheets[i],f,e.options)})};let h=t.sheet.editor.setOffset;t.sheet.editor.setOffset=function(...a){h.apply(t.sheet.editor,a),f=a[0],x(o,c,s._worksheets[i],f,e.options)},o=r.value.querySelector("canvas").getContext("2d"),e.src&&g(e.src,e.requestOptions).then(p).catch(a=>{t.loadData({}),d("error",a)})})}),I(()=>{D.disconnect(),t=null}),M(()=>e.src,()=>{e.src?g(e.src,e.requestOptions).then(p).catch(u=>{t.loadData({}),d("error",u)}):t.loadData({})});function S(u){q(u||`vue-office-excel-${new Date().getTime()}.xlsx`,m)}return{wrapperRef:l,rootRef:r,save:S}}}),X={class:"vue-office-excel",ref:"wrapperRef"},Y={class:"vue-office-excel-main",ref:"rootRef"};function Z(e,d,l,r,s,c){return y(),N("div",X,[P("div",Y,null,512)],512)}const _=V(Q,[["render",Z]]);_.install=function(e){e.component(_.name,_)};const re={__name:"ExcelDemo",setup(e){function d(){k.hideLoading()}function l(o){console.log("出差",o),k.hideLoading()}function r(o){return console.log("beforeTransformData",o),o}function s(o){return console.log("transformData",o),o}const c=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.xlsx",i=w();return(o,t)=>{const f=A("loading");return y(),H(K,{accept:".xlsx",placeholder:"请输入xlsx文件地址","default-src":c},{default:U(m=>[z(G(J(_),{ref_key:"docxRef",ref:i,src:m.src,options:{beforeTransformData:r,transformData:s},style:{flex:"1",height:"0"},onRendered:d,onError:l},null,8,["src","options"]),[[f,!0]])]),_:1})}}};export{re as default}; diff --git a/examples/dist/assets/ExcelDemo-426f8ab1.js b/examples/dist/assets/ExcelDemo-426f8ab1.js new file mode 100644 index 0000000..b9cb68c --- /dev/null +++ b/examples/dist/assets/ExcelDemo-426f8ab1.js @@ -0,0 +1 @@ +import{l as C,r as R,S as B,a as x,g,b as $,t as L,c as O}from"./hack-67811302.js";import{d as q}from"./url-de9b02cf.js";import{d as F,_ as V,r as w,o as W,n as j,h as I,w as M,a as y,c as N,b as P,i as A,e as H,f as U,j as z,g as G,u as J}from"./index-5d373288.js";import{P as K,u as k}from"./PreviewWrapper-a5ea54f2.js";import"./_commonjs-dynamic-modules-302442b1.js";const T={minColLength:20},Q=F({name:"VueOfficeExcel",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},options:{type:Object,default:()=>({...T})}},emits:["rendered","error"],setup(e,{emit:d}){const l=w(null),r=w(null);let s={_worksheets:[]},c=[],i=0,o=null,t=null,f=null,m=null;function p(u){m=u,$(u).then(n=>{if(!n._worksheets||n._worksheets.length===0)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");e.options.beforeTransformData&&typeof e.options.beforeTransformData=="function"&&(n=e.options.beforeTransformData(n));let{workbookData:h,medias:b,workbookSource:a}=L(n,{...T,...e.options});e.options.transformData&&typeof e.options.transformData=="function"&&(h=e.options.transformData(h)),c=b,s=a,f=null,i=0,O(),t.loadData(h),x(o,c,s._worksheets[i],f,e.options),d("rendered")}).catch(n=>{console.warn(n),c=[],s={_worksheets:[]},O(),t&&t.loadData({}),d("error",n)})}const v=C.debounce(R,200).bind(this,r.value),D=new MutationObserver(v),E={attributes:!0,childList:!0,subtree:!0};W(()=>{j(()=>{D.observe(r.value,E),v(r),t=new B(r.value,{mode:"read",showToolbar:!1,showContextmenu:e.options.showContextmenu||!1,view:{height:()=>l.value&&l.value.clientHeight||300,width:()=>l.value&&l.value.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let u=t.bottombar.swapFunc;t.bottombar.swapFunc=function(a){u.call(t.bottombar,a),i=a,setTimeout(()=>{t.reRender(),x(o,c,s._worksheets[i],f,e.options)})};let n=t.sheet.editor.clear;t.sheet.editor.clear=function(...a){n.apply(t.sheet.editor,a),setTimeout(()=>{x(o,c,s._worksheets[i],f,e.options)})};let h=t.sheet.editor.setOffset;t.sheet.editor.setOffset=function(...a){h.apply(t.sheet.editor,a),f=a[0],x(o,c,s._worksheets[i],f,e.options)},o=r.value.querySelector("canvas").getContext("2d"),e.src&&g(e.src,e.requestOptions).then(p).catch(a=>{t.loadData({}),d("error",a)})})}),I(()=>{D.disconnect(),t=null}),M(()=>e.src,()=>{e.src?g(e.src,e.requestOptions).then(p).catch(u=>{t.loadData({}),d("error",u)}):t.loadData({})});function S(u){q(u||`vue-office-excel-${new Date().getTime()}.xlsx`,m)}return{wrapperRef:l,rootRef:r,save:S}}}),X={class:"vue-office-excel",ref:"wrapperRef"},Y={class:"vue-office-excel-main",ref:"rootRef"};function Z(e,d,l,r,s,c){return y(),N("div",X,[P("div",Y,null,512)],512)}const _=V(Q,[["render",Z]]);_.install=function(e){e.component(_.name,_)};const re={__name:"ExcelDemo",setup(e){function d(){k.hideLoading()}function l(o){console.log("出差",o),k.hideLoading()}function r(o){return console.log("beforeTransformData",o),o}function s(o){return console.log("transformData",o),o}const c=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.xlsx",i=w();return(o,t)=>{const f=A("loading");return y(),H(K,{accept:".xlsx",placeholder:"请输入xlsx文件地址","default-src":c},{default:U(m=>[z(G(J(_),{ref_key:"docxRef",ref:i,src:m.src,options:{beforeTransformData:r,transformData:s},style:{flex:"1",height:"0"},onRendered:d,onError:l},null,8,["src","options"]),[[f,!0]])]),_:1})}}};export{re as default}; diff --git a/examples/dist/assets/JsDocxDemo-0aff0a60.js b/examples/dist/assets/JsDocxDemo-0aff0a60.js new file mode 100644 index 0000000..640dd3b --- /dev/null +++ b/examples/dist/assets/JsDocxDemo-0aff0a60.js @@ -0,0 +1 @@ +var p=Object.defineProperty;var c=(i,e,t)=>e in i?p(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var n=(i,e,t)=>(c(i,typeof e!="symbol"?e+"":e,t),t);import{d as r}from"./docx-19f6a6c1.js";import{d as l}from"./url-de9b02cf.js";import{r as h,o as d,a as u,c as m}from"./index-5d373288.js";import"./_commonjs-dynamic-modules-302442b1.js";typeof window.setImmediate>"u"&&(window.setImmediate=function(i,...e){setTimeout(()=>i(e))});class w{constructor(e,t={},s={}){n(this,"container",null);n(this,"wrapper",null);n(this,"wrapperMain",null);n(this,"options",{});n(this,"requestOptions",{});n(this,"fileData",null);this.container=e,this.options=t,this.requestOptions=s,this.createWrapper()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-docx",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-docx-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise((t,s)=>{r.getData(e,this.requestOptions).then(async o=>{this.fileData=await r.getBlob(o),r.render(this.fileData,this.wrapperMain,this.options).then(()=>{t()}).catch(a=>{r.render("",this.wrapperMain,this.options),s(a)})}).catch(o=>{r.render("",this.wrapperMain,this.options),s(o)})})}save(e){l(e||`js-preview-docx-${new Date().getTime()}.docx`,this.fileData)}destroy(){this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options=null,this.requestOptions=null}}function f(i,e,t){return new w(i,e,t)}const v={init:f};const q={__name:"JsDocxDemo",setup(i){const e=h(null);return d(()=>{let t=v.init(e.value);t.preview("/vue-office/examples/dist/static/test-files/test.docx").then(s=>{console.log("docx preview done"),setTimeout(()=>{t.preview("/vue-office/examples/dist/static/test-files/test2.docx")},3e3)}).catch(s=>{console.log("err",s)})}),(t,s)=>(u(),m("div",{ref_key:"dom",ref:e},null,512))}};export{q as default}; diff --git a/examples/dist/assets/JsDocxDemo-28b06ad6.js b/examples/dist/assets/JsDocxDemo-28b06ad6.js new file mode 100644 index 0000000..91594c7 --- /dev/null +++ b/examples/dist/assets/JsDocxDemo-28b06ad6.js @@ -0,0 +1 @@ +var p=Object.defineProperty;var c=(i,e,t)=>e in i?p(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var n=(i,e,t)=>(c(i,typeof e!="symbol"?e+"":e,t),t);import{d as r}from"./docx-d30f8993.js";import{d as l}from"./url-de9b02cf.js";import{r as h,o as d,a as u,c as m}from"./index-58cbfcf0.js";import"./_commonjs-dynamic-modules-302442b1.js";typeof window.setImmediate>"u"&&(window.setImmediate=function(i,...e){setTimeout(()=>i(e))});class w{constructor(e,t={},s={}){n(this,"container",null);n(this,"wrapper",null);n(this,"wrapperMain",null);n(this,"options",{});n(this,"requestOptions",{});n(this,"fileData",null);this.container=e,this.options=t,this.requestOptions=s,this.createWrapper()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-docx",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-docx-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise((t,s)=>{r.getData(e,this.requestOptions).then(async o=>{this.fileData=await r.getBlob(o),r.render(this.fileData,this.wrapperMain,this.options).then(()=>{t()}).catch(a=>{r.render("",this.wrapperMain,this.options),s(a)})}).catch(o=>{r.render("",this.wrapperMain,this.options),s(o)})})}save(e){l(e||`js-preview-docx-${new Date().getTime()}.docx`,this.fileData)}destroy(){this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options=null,this.requestOptions=null}}function f(i,e,t){return new w(i,e,t)}const v={init:f};const q={__name:"JsDocxDemo",setup(i){const e=h(null);return d(()=>{let t=v.init(e.value);t.preview("/vue-office/examples/dist/static/test-files/test.docx").then(s=>{console.log("docx preview done"),setTimeout(()=>{t.preview("/vue-office/examples/dist/static/test-files/test2.docx")},3e3)}).catch(s=>{console.log("err",s)})}),(t,s)=>(u(),m("div",{ref_key:"dom",ref:e},null,512))}};export{q as default}; diff --git a/examples/dist/assets/JsExcelDemo-91fa8b62.js b/examples/dist/assets/JsExcelDemo-91fa8b62.js new file mode 100644 index 0000000..4a79a7f --- /dev/null +++ b/examples/dist/assets/JsExcelDemo-91fa8b62.js @@ -0,0 +1 @@ +var c=Object.defineProperty;var p=(o,e,t)=>e in o?c(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var s=(o,e,t)=>(p(o,typeof e!="symbol"?e+"":e,t),t);import{S as u,a as h,b as d,t as w,c as l,l as f,r as m,g as x}from"./hack-67811302.js";import{d as b}from"./url-de9b02cf.js";/* empty css */import{r as v,o as D,a as k,c as S}from"./index-5d373288.js";import"./_commonjs-dynamic-modules-302442b1.js";const _={minColLength:20};class E{constructor(e,t={},r={}){s(this,"container",null);s(this,"wrapper",null);s(this,"wrapperMain",null);s(this,"options",{});s(this,"requestOptions",{});s(this,"mediasSource",[]);s(this,"workbookDataSource",{_worksheets:[]});s(this,"sheetIndex",1);s(this,"ctx",null);s(this,"xs",null);s(this,"offset",null);s(this,"observer",null);s(this,"fileData",null);this.container=e,this.options={..._,...t},this.requestOptions=r,this.createWrapper(),this.initSpreadsheet(),this.hack()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-excel",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-excel-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}initSpreadsheet(){this.xs=new u(this.wrapperMain,{mode:"read",showToolbar:!1,showContextmenu:this.options.showContextmenu||!1,view:{height:()=>this.wrapper&&this.wrapper.clientHeight||300,width:()=>this.wrapper&&this.wrapper.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let e=this,t=this.xs.bottombar.swapFunc;this.xs.bottombar.swapFunc=function(a){t.call(e.xs.bottombar,a),e.sheetIndex=a,setTimeout(()=>{e.xs.reRender(),h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)})};let r=this.xs.sheet.editor.clear;this.xs.sheet.editor.clear=function(...a){r.apply(e.xs.sheet.editor,a),setTimeout(()=>{h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)})};let i=this.xs.sheet.editor.setOffset;this.xs.sheet.editor.setOffset=function(...a){i.apply(e.xs.sheet.editor,a),e.offset=a[0],h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)};const n=this.wrapperMain.querySelector("canvas");this.ctx=n.getContext("2d")}renderExcel(e){return this.fileData=e,d(e).then(t=>{if(!t._worksheets||t._worksheets.length===0)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");this.options.beforeTransformData&&typeof this.options.beforeTransformData=="function"&&(t=this.options.beforeTransformData(t));let{workbookData:r,medias:i,workbookSource:n}=w(t,this.options);this.options.transformData&&typeof this.options.transformData=="function"&&(r=this.options.transformData(r)),this.mediasSource=i,this.workbookDataSource=n,this.offset=null,this.sheetIndex=0,l(),this.xs.loadData(r),h(this.ctx,this.mediasSource,this.workbookDataSource._worksheets[this.sheetIndex],this.offset)}).catch(t=>(this.mediasSource=[],this.workbookDataSource={_worksheets:[]},l(),this.xs.loadData({}),Promise.reject(t)))}hack(){const e=f.debounce(m,200).bind(this,this.wrapperMain);this.observer=new MutationObserver(e);const t={attributes:!0,childList:!0,subtree:!0};this.observer.observe(this.wrapperMain,t),e(this.wrapperMain)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise((t,r)=>{x(e,this.requestOptions).then(i=>{this.renderExcel(i).then(t).catch(n=>{this.xs.loadData({}),r(n)})}).catch(i=>{this.xs.loadData({}),r(i)})})}save(e){b(e||`js-preview-excel-${new Date().getTime()}.xlsx`,this.fileData)}destroy(){this.observer.disconnect(),this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.ctx=null,this.xs=null,this.observer=null,this.options=null,this.requestOptions=null,this.mediasSource=null,this.workbookDataSource=null}}function g(o,e,t){return new E(o,e,t)}const O={init:g},P={__name:"JsExcelDemo",setup(o){const e=v(null);return D(()=>{window.myExcelPreview=O.init(e.value,{transformData:function(t){return console.log("transformData",t),t}}),window.myExcelPreview.preview("/vue-office/examples/dist/static/test-files/test.xlsx").then(t=>{console.log("excel preview done",window.myExcelPreview)}).catch(t=>{console.log("err",t)})}),(t,r)=>(k(),S("div",{ref_key:"dom",ref:e,style:{height:"calc(100vh - 50px)"}},null,512))}};export{P as default}; diff --git a/examples/dist/assets/JsExcelDemo-fa1996af.js b/examples/dist/assets/JsExcelDemo-fa1996af.js new file mode 100644 index 0000000..0c0a9f1 --- /dev/null +++ b/examples/dist/assets/JsExcelDemo-fa1996af.js @@ -0,0 +1 @@ +var c=Object.defineProperty;var p=(o,e,t)=>e in o?c(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var s=(o,e,t)=>(p(o,typeof e!="symbol"?e+"":e,t),t);import{S as u,a as h,b as d,t as w,c as l,l as x,r as f,g as m}from"./hack-f62f946f.js";import{d as v}from"./url-de9b02cf.js";/* empty css */import{r as b,o as k,a as D,c as S}from"./index-58cbfcf0.js";import"./_commonjs-dynamic-modules-302442b1.js";const _={minColLength:20};class E{constructor(e,t={},r={}){s(this,"container",null);s(this,"wrapper",null);s(this,"wrapperMain",null);s(this,"options",{});s(this,"requestOptions",{});s(this,"mediasSource",[]);s(this,"workbookDataSource",{_worksheets:[]});s(this,"sheetIndex",1);s(this,"ctx",null);s(this,"xs",null);s(this,"offset",null);s(this,"observer",null);s(this,"fileData",null);this.container=e,this.options={..._,...t},this.requestOptions=r,this.createWrapper(),this.initSpreadsheet(),this.hack()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-excel",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-excel-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}initSpreadsheet(){this.xs=new u(this.wrapperMain,{mode:"read",showToolbar:!1,showContextmenu:this.options.showContextmenu||!1,view:{height:()=>this.wrapper&&this.wrapper.clientHeight||300,width:()=>this.wrapper&&this.wrapper.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let e=this,t=this.xs.bottombar.swapFunc;this.xs.bottombar.swapFunc=function(a){t.call(e.xs.bottombar,a),e.sheetIndex=a,setTimeout(()=>{e.xs.reRender(),h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)})};let r=this.xs.sheet.editor.clear;this.xs.sheet.editor.clear=function(...a){r.apply(e.xs.sheet.editor,a),setTimeout(()=>{h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)})};let i=this.xs.sheet.editor.setOffset;this.xs.sheet.editor.setOffset=function(...a){i.apply(e.xs.sheet.editor,a),e.offset=a[0],h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)};const n=this.wrapperMain.querySelector("canvas");this.ctx=n.getContext("2d")}renderExcel(e){return this.fileData=e,d(e).then(t=>{if(!t._worksheets||t._worksheets.length===0)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");let{workbookData:r,medias:i,workbookSource:n}=w(t,this.options);this.options.transformData&&typeof this.options.transformData=="function"&&(r=this.options.transformData(r)),this.mediasSource=i,this.workbookDataSource=n,this.offset=null,this.sheetIndex=0,l(),this.xs.loadData(r),h(this.ctx,this.mediasSource,this.workbookDataSource._worksheets[this.sheetIndex],this.offset)}).catch(t=>(this.mediasSource=[],this.workbookDataSource={_worksheets:[]},l(),this.xs.loadData({}),Promise.reject(t)))}hack(){const e=x.debounce(f,200).bind(this,this.wrapperMain);this.observer=new MutationObserver(e);const t={attributes:!0,childList:!0,subtree:!0};this.observer.observe(this.wrapperMain,t),e(this.wrapperMain)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise((t,r)=>{m(e,this.requestOptions).then(i=>{this.renderExcel(i).then(t).catch(n=>{this.xs.loadData({}),r(n)})}).catch(i=>{this.xs.loadData({}),r(i)})})}save(e){v(e||`js-preview-excel-${new Date().getTime()}.xlsx`,this.fileData)}destroy(){this.observer.disconnect(),this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.ctx=null,this.xs=null,this.observer=null,this.options=null,this.requestOptions=null,this.mediasSource=null,this.workbookDataSource=null}}function g(o,e,t){return new E(o,e,t)}const O={init:g},T={__name:"JsExcelDemo",setup(o){const e=b(null);return k(()=>{window.myExcelPreview=O.init(e.value,{transformData:function(t){return console.log("transformData",t),t}}),window.myExcelPreview.preview("/vue-office/examples/dist/static/test-files/test.xlsx").then(t=>{console.log("excel preview done",window.myExcelPreview)}).catch(t=>{console.log("err",t)})}),(t,r)=>(D(),S("div",{ref_key:"dom",ref:e,style:{height:"calc(100vh - 50px)"}},null,512))}};export{T as default}; diff --git a/examples/dist/assets/JsPdfDemo-37829189.js b/examples/dist/assets/JsPdfDemo-37829189.js new file mode 100644 index 0000000..f6a1ccf --- /dev/null +++ b/examples/dist/assets/JsPdfDemo-37829189.js @@ -0,0 +1 @@ +var y=Object.defineProperty;var V=(d,Z,l)=>Z in d?y(d,Z,{enumerable:!0,configurable:!0,writable:!0,value:l}):d[Z]=l;var X=(d,Z,l)=>(V(d,typeof Z!="symbol"?Z+"":Z,l),l);import{l as h,g as u,d as s}from"./url-de9b02cf.js";import{o as p}from"./omit-a65afa34.js";/* empty css */import{r as J,o as S,a as R,c as N}from"./index-5d373288.js";const x="LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgd29ya2VyLmpzLkxJQ0VOU0UudHh0ICovCnZhciBlLHQ7ZT1nbG9iYWxUaGlzLHQ9KCk9PigoKT0+e3ZhciBlPVssKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LldvcmtlclRhc2s9dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTM3KSxzPXIoMjAwKSxjPXIoMTk0KSx1PXIoNCksbD1yKDIzMSksZj1yKDIzMik7ZnVuY3Rpb24gaCgpe2g9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTtjKHYsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoUChbXSkpKTttJiZtIT09dCYmci5jYWxsKG0saSkmJih2PW0pO3ZhciB3PWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YihmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxuKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPWMoZyxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZChlLHQpe3JldHVybiB5KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGcoZSx0KXx8cCgpfWZ1bmN0aW9uIHAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIGcoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHYoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT92KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB2KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24geShlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIG0oZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBiKGUpe3JldHVybiBiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxiKGUpfWZ1bmN0aW9uIHcoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWIoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1iKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gUyhlLHQscil7cmV0dXJuIHQmJmsoZS5wcm90b3R5cGUsdCksciYmayhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3codGhpcyxlKSx0aGlzLm5hbWU9dCx0aGlzLnRlcm1pbmF0ZWQ9ITEsdGhpcy5fY2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpfXJldHVybiBTKGUsW3trZXk6ImZpbmlzaGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmluaXNoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToidGVybWluYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudGVybWluYXRlZD0hMH19LHtrZXk6ImVuc3VyZU5vdFRlcm1pbmF0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19XSksZX0oKTt0LldvcmtlclRhc2s9eDt2YXIgTyxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3codGhpcyxlKX1yZXR1cm4gUyhlLG51bGwsW3trZXk6InNldHVwIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPSExO3Qub24oInRlc3QiLChmdW5jdGlvbihlKXthfHwoYT0hMCx0LnNlbmQoInRlc3QiLGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl9KSksdC5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24oZSl7KDAsbi5zZXRWZXJib3NpdHlMZXZlbCkoZS52ZXJib3NpdHkpfSkpLHQub24oIkdldERvY1JlcXVlc3QiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVEb2N1bWVudEhhbmRsZXIodCxyKX0pKX19LHtrZXk6ImNyZWF0ZURvY3VtZW50SGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcix2PSExLGI9bnVsbCx3PVtdLGs9KDAsbi5nZXRWZXJib3NpdHlMZXZlbCkoKSxTPWUsTz1TLmRvY0lkLEE9Uy5hcGlWZXJzaW9uLEM9IjMuMi4wIjtpZihBIT09Qyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBUEkgdmVyc2lvbiAiJy5jb25jYXQoQSwnIiBkb2VzIG5vdCBtYXRjaCAnKSsndGhlIFdvcmtlciB2ZXJzaW9uICInLmNvbmNhdChDLCciLicpKTt2YXIgRj1bXTtmb3IodmFyIFAgaW5bXSlGLnB1c2goUCk7aWYoRi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgYEFycmF5LnByb3RvdHlwZWAgY29udGFpbnMgdW5leHBlY3RlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXM6ICIrRi5qb2luKCIsICIpKyI7IHRodXMgYnJlYWtpbmcgZS5nLiBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBvZiBgQXJyYXlgcy4iKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlYWRhYmxlU3RyZWFtKXt2YXIgVD0iVGhlIGJyb3dzZXIvZW52aXJvbm1lbnQgbGFja3MgbmF0aXZlIHN1cHBvcnQgZm9yIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgdXNlZCBieSB0aGUgUERGLmpzIGxpYnJhcnkgKGUuZy4gYFJlYWRhYmxlU3RyZWFtYCk7ICI7aWYodS5pc05vZGVKUyl0aHJvdyBuZXcgRXJyb3IoVCsicGxlYXNlIHVzZSBhIGBsZWdhY3lgLWJ1aWxkIGluc3RlYWQuIik7dGhyb3cgbmV3IEVycm9yKFQrInBsZWFzZSB1cGRhdGUgdG8gYSBzdXBwb3J0ZWQgYnJvd3Nlci4iKX12YXIgST1PKyJfd29ya2VyIixFPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKEksTyx0KTtmdW5jdGlvbiBqKCl7aWYodil0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWZ1bmN0aW9uIE0oZSl7dy5wdXNoKGUpfWZ1bmN0aW9uIF8oZSl7ZS5maW5pc2goKTt2YXIgdD13LmluZGV4T2YoZSk7dy5zcGxpY2UodCwxKX1mdW5jdGlvbiBMKGUpe3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBSKCl7dmFyIGU7cmV0dXJuIGU9aCgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIG4sYSxpLG8scyxjLHU7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5lbnN1cmVEb2MoImNoZWNrSGVhZGVyIik7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LHIuZW5zdXJlRG9jKCJwYXJzZSIsW3RdKTtjYXNlIDY6cmV0dXJuIGUubmV4dD04LHIuZW5zdXJlRG9jKCJjaGVja0ZpcnN0UGFnZSIsW3RdKTtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCxyLmVuc3VyZURvYygiY2hlY2tMYXN0UGFnZSIsW3RdKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIsci5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2Nhc2UgMTI6aWYoIShuPWUuc2VudCkpe2UubmV4dD0xODticmVha31yZXR1cm4gTShhPW5ldyB4KCJsb2FkWGZhRm9udHMiKSksZS5uZXh0PTE4LFByb21pc2UuYWxsKFtyLmxvYWRYZmFGb250cyhFLGEpLmNhdGNoKChmdW5jdGlvbihlKXt9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gXyhhKX0pKSxyLmxvYWRYZmFJbWFnZXMoKV0pO2Nhc2UgMTg6cmV0dXJuIGUubmV4dD0yMCxQcm9taXNlLmFsbChbci5lbnN1cmVEb2MoIm51bVBhZ2VzIiksci5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7Y2FzZSAyMDppZihpPWUuc2VudCxvPWQoaSwyKSxzPW9bMF0sYz1vWzFdLCFuKXtlLm5leHQ9MzA7YnJlYWt9cmV0dXJuIGUubmV4dD0yNyxyLmVuc3VyZURvYygiaHRtbEZvclhmYSIpO2Nhc2UgMjc6ZS50MD1lLnNlbnQsZS5uZXh0PTMxO2JyZWFrO2Nhc2UgMzA6ZS50MD1udWxsO2Nhc2UgMzE6cmV0dXJuIHU9ZS50MCxlLmFicnVwdCgicmV0dXJuIix7bnVtUGFnZXM6cyxmaW5nZXJwcmludHM6YyxodG1sRm9yWGZhOnV9KTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSksUj1mdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe20oaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe20oaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gRS5vbigiR2V0UGFnZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbci5lbnN1cmUoZSwicm90YXRlIiksci5lbnN1cmUoZSwicmVmIiksci5lbnN1cmUoZSwidXNlclVuaXQiKSxyLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdD1kKGUsNCk7cmV0dXJue3JvdGF0ZTp0WzBdLHJlZjp0WzFdLHVzZXJVbml0OnRbMl0sdmlldzp0WzNdfX0pKX0pKX0pKSxFLm9uKCJHZXRQYWdlSW5kZXgiLChmdW5jdGlvbihlKXt2YXIgdD1hLlJlZi5nZXQoZS5udW0sZS5nZW4pO3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3RdKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkZXN0aW5hdGlvbnMiKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbiIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldERlc3RpbmF0aW9uIixbZS5pZF0pfSkpLEUub24oIkdldFBhZ2VMYWJlbHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJwYWdlTGFiZWxzIil9KSksRS5vbigiR2V0UGFnZUxheW91dCIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VMYXlvdXQiKX0pKSxFLm9uKCJHZXRQYWdlTW9kZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSksRS5vbigiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJ2aWV3ZXJQcmVmZXJlbmNlcyIpfSkpLEUub24oIkdldE9wZW5BY3Rpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIil9KSksRS5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSkpLEUub24oIkdldEphdmFTY3JpcHQiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSksRS5vbigiR2V0RG9jSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIil9KSksRS5vbigiR2V0UGFnZUpTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4O3JldHVybiByLmdldFBhZ2UodCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlKGUsImpzQWN0aW9ucyIpfSkpfSkpLEUub24oIkdldE91dGxpbmUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkb2N1bWVudE91dGxpbmUiKX0pKSxFLm9uKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcHRpb25hbENvbnRlbnRDb25maWciKX0pKSxFLm9uKCJHZXRQZXJtaXNzaW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBlcm1pc3Npb25zIil9KSksRS5vbigiR2V0TWV0YWRhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxyLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pKSxFLm9uKCJHZXRNYXJrSW5mbyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coIm1hcmtJbmZvIil9KSksRS5vbigiR2V0RGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ieXRlc30pKX0pKSxFLm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4LG49ZS5pbnRlbnQ7cmV0dXJuIHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiR2V0QW5ub3RhdGlvbnM6IHBhZ2UgIi5jb25jYXQodCkpO3JldHVybiBNKHIpLGUuZ2V0QW5ub3RhdGlvbnNEYXRhKEUscixuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gXyhyKSxlfSksKGZ1bmN0aW9uKGUpe18ocil9KSl9KSl9KSksRS5vbigiR2V0RmllbGRPYmplY3RzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKX0pKSxFLm9uKCJIYXNKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImhhc0pTQWN0aW9ucyIpfSkpLEUub24oIkdldENhbGN1bGF0aW9uT3JkZXJJZHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImNhbGN1bGF0aW9uT3JkZXJJZHMiKX0pKSxFLm9uKCJTYXZlRG9jdW1lbnQiLChmdW5jdGlvbihlKXt2YXIgdD1lLmlzUHVyZVhmYSxvPWUubnVtUGFnZXMscz1lLmFubm90YXRpb25TdG9yYWdlLHU9ZS5maWxlbmFtZSxsPVtyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSxyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybVJlZiIpLHIuZW5zdXJlRG9jKCJ4cmVmIiksci5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpXSxmPXQ/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShzKTtpZihmKXt2YXIgaCx2PWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1nKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZik7dHJ5e3ZhciBtPWZ1bmN0aW9uKCl7dmFyIGU9ZChoLnZhbHVlLDIpLHQ9ZVswXSxuPWVbMV07bC5wdXNoKHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiU2F2ZSAoZWRpdG9yKTogcGFnZSAiLmNvbmNhdCh0KSk7cmV0dXJuIGUuc2F2ZU5ld0Fubm90YXRpb25zKEUscixuKS5maW5hbGx5KChmdW5jdGlvbigpe18ocil9KSl9KSkpfTtmb3Iodi5zKCk7IShoPXYubigpKS5kb25lOyltKCl9Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9fWlmKHQpbC5wdXNoKHIuc2VyaWFsaXplWGZhRGF0YShzKSk7ZWxzZSBmb3IodmFyIGI9ZnVuY3Rpb24oZSl7bC5wdXNoKHIuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbih0KXt2YXIgcj1uZXcgeCgiU2F2ZTogcGFnZSAiLmNvbmNhdChlKSk7cmV0dXJuIHQuc2F2ZShFLHIscykuZmluYWxseSgoZnVuY3Rpb24oKXtfKHIpfSkpfSkpKX0sdz0wO3c8bzt3KyspYih3KTtyZXR1cm4gUHJvbWlzZS5hbGwobCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHIsaT15KHI9ZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0ocil8fGcocil8fHAoKSxvPWlbMF0scz1pWzFdLGw9aVsyXSxmPWlbM10saD1pWzRdLGQ9aS5zbGljZSg1KSx2PVtdLG09bnVsbDtpZih0KXtpZighKG09ZFswXSkpcmV0dXJuIG8uYnl0ZXN9ZWxzZSBpZigwPT09KHY9ZC5mbGF0KDIpKS5sZW5ndGgpcmV0dXJuIG8uYnl0ZXM7dmFyIGI9bCYmcyBpbnN0YW5jZW9mIGEuRGljdCYmdi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uZWVkQXBwZWFyYW5jZXN9KSksdz1zIGluc3RhbmNlb2YgYS5EaWN0JiZzLmdldCgiWEZBIil8fG51bGwsaz1udWxsLFM9ITE7aWYoQXJyYXkuaXNBcnJheSh3KSl7Zm9yKHZhciB4PTAsTz13Lmxlbmd0aDt4PE87eCs9MikiZGF0YXNldHMiPT09d1t4XSYmKGs9d1t4KzFdLFM9ITApO251bGw9PT1rJiYoaz1mLmdldE5ld1RlbXBvcmFyeVJlZigpKX1lbHNlIHcmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIFhGQSB0eXBlLiIpO3ZhciBBPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZi50cmFpbGVyKXt2YXIgQz1PYmplY3QuY3JlYXRlKG51bGwpLEY9Zi50cmFpbGVyLmdldCgiSW5mbyIpfHxudWxsO0YgaW5zdGFuY2VvZiBhLkRpY3QmJkYuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIHQmJihDW2VdPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQpKX0pKSxBPXtyb290UmVmOmYudHJhaWxlci5nZXRSYXcoIlJvb3QiKXx8bnVsbCxlbmNyeXB0UmVmOmYudHJhaWxlci5nZXRSYXcoIkVuY3J5cHQiKXx8bnVsbCxuZXdSZWY6Zi5nZXROZXdUZW1wb3JhcnlSZWYoKSxpbmZvUmVmOmYudHJhaWxlci5nZXRSYXcoIkluZm8iKXx8bnVsbCxpbmZvOkMsZmlsZUlkczpmLnRyYWlsZXIuZ2V0KCJJRCIpfHxudWxsLHN0YXJ0WFJlZjpoLGZpbGVuYW1lOnV9fXRyeXtyZXR1cm4oMCxjLmluY3JlbWVudGFsVXBkYXRlKSh7b3JpZ2luYWxEYXRhOm8uYnl0ZXMseHJlZkluZm86QSxuZXdSZWZzOnYseHJlZjpmLGhhc1hmYTohIXcseGZhRGF0YXNldHNSZWY6ayxoYXNYZmFEYXRhc2V0c0VudHJ5OlMsbmVlZEFwcGVhcmFuY2VzOmIsYWNyb0Zvcm1SZWY6bCxhY3JvRm9ybTpzLHhmYURhdGE6bX0pfWZpbmFsbHl7Zi5yZXNldE5ld1RlbXBvcmFyeVJlZigpfX0pKX0pKSxFLm9uKCJHZXRPcGVyYXRvckxpc3QiLChmdW5jdGlvbihlLHQpe3ZhciBhPWUucGFnZUluZGV4O3IuZ2V0UGFnZShhKS50aGVuKChmdW5jdGlvbihyKXt2YXIgaT1uZXcgeCgiR2V0T3BlcmF0b3JMaXN0OiBwYWdlICIuY29uY2F0KGEpKTtNKGkpO3ZhciBvPWs+PW4uVmVyYm9zaXR5TGV2ZWwuSU5GT1M/RGF0ZS5ub3coKTowO3IuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOkUsc2luazp0LHRhc2s6aSxpbnRlbnQ6ZS5pbnRlbnQsY2FjaGVLZXk6ZS5jYWNoZUtleSxhbm5vdGF0aW9uU3RvcmFnZTplLmFubm90YXRpb25TdG9yYWdlfSkudGhlbigoZnVuY3Rpb24oZSl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0T3BlcmF0b3JMaXN0OiB0aW1lPSIpKyIiLmNvbmNhdChEYXRlLm5vdygpLW8sIm1zLCBsZW49IikuY29uY2F0KGUubGVuZ3RoKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFRleHRDb250ZW50IiwoZnVuY3Rpb24oZSx0KXt2YXIgYT1lLnBhZ2VJbmRleDtyLmdldFBhZ2UoYSkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9bmV3IHgoIkdldFRleHRDb250ZW50OiBwYWdlICIrYSk7TShpKTt2YXIgbz1rPj1uLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDtyLmV4dHJhY3RUZXh0Q29udGVudCh7aGFuZGxlcjpFLHRhc2s6aSxzaW5rOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ZS5pbmNsdWRlTWFya2VkQ29udGVudCxjb21iaW5lVGV4dEl0ZW1zOmUuY29tYmluZVRleHRJdGVtc30pLnRoZW4oKGZ1bmN0aW9uKCl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9IikrIiIuY29uY2F0KERhdGUubm93KCktbywibXMiKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmUoZSwiZ2V0U3RydWN0VHJlZSIpfSkpfSkpLEUub24oIkZvbnRGYWxsYmFjayIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmZvbnRGYWxsYmFjayhlLmlkLEUpfSkpLEUub24oIkNsZWFudXAiLChmdW5jdGlvbihlKXtyZXR1cm4gci5jbGVhbnVwKCEwKX0pKSxFLm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXt2PSEwO3ZhciB0PVtdO2lmKHIpe3IudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO3ZhciBhPXIuY2xlYW51cCgpO3QucHVzaChhKSxyPW51bGx9ZWxzZSgwLHMuY2xlYXJHbG9iYWxDYWNoZXMpKCk7YiYmYihuZXcgbi5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtmb3IodmFyIGk9MCxvPXc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07dC5wdXNoKGMuZmluaXNoZWQpLGMudGVybWluYXRlKCl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7RS5kZXN0cm95KCksRT1udWxsfSkpfSkpLEUub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aigpLEUuc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gYShlKXtpZihqKCksZSBpbnN0YW5jZW9mIG4uUGFzc3dvcmRFeGNlcHRpb24pe3ZhciB0PW5ldyB4KCJQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgIi5jb25jYXQoZS5jb2RlKSk7TSh0KSxFLnNlbmRXaXRoUHJvbWlzZSgiUGFzc3dvcmRSZXF1ZXN0IixlKS50aGVuKChmdW5jdGlvbihlKXt2YXIgbj1lLnBhc3N3b3JkO18odCksci51cGRhdGVQYXNzd29yZChuKSxzKCl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7Xyh0KSxFLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSl9KSl9ZWxzZSBlIGluc3RhbmNlb2Ygbi5JbnZhbGlkUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5NaXNzaW5nUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBuLlVua25vd25FcnJvckV4Y2VwdGlvbj9FLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSk6RS5zZW5kKCJEb2NFeGNlcHRpb24iLG5ldyBuLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKSl9ZnVuY3Rpb24gcygpe2ooKSxMKCExKS50aGVuKHQsKGZ1bmN0aW9uKGUpe2ooKSxlIGluc3RhbmNlb2YgaS5YUmVmUGFyc2VFeGNlcHRpb24/ci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oKXtqKCksTCghMCkudGhlbih0LGEpfSkpOmEoZSl9KSl9aigpLGZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5kYXRhLGE9ZS5wYXNzd29yZCxpPWUuZGlzYWJsZUF1dG9GZXRjaCxzPWUucmFuZ2VDaHVua1NpemUsYz1lLmxlbmd0aCx1PWUuZG9jQmFzZVVybCxsPWUuZW5hYmxlWGZhLGg9ZS5ldmFsdWF0b3JPcHRpb25zLGQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtpZihyKXt0cnl7dD1uZXcgby5Mb2NhbFBkZk1hbmFnZXIoTyxyLGEsRSxoLGwsdSksZC5yZXNvbHZlKHQpfWNhdGNoKGUpe2QucmVqZWN0KGUpfXJldHVybiBkLnByb21pc2V9dmFyIHAsZz1bXTt0cnl7cD1uZXcgZi5QREZXb3JrZXJTdHJlYW0oRSl9Y2F0Y2goZSl7cmV0dXJuIGQucmVqZWN0KGUpLGQucHJvbWlzZX12YXIgdj1wLmdldEZ1bGxSZWFkZXIoKTt2LmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe2lmKHYuaXNSYW5nZVN1cHBvcnRlZCl7aT1pfHx2LmlzU3RyZWFtaW5nU3VwcG9ydGVkLHQ9bmV3IG8uTmV0d29ya1BkZk1hbmFnZXIoTyxwLHttc2dIYW5kbGVyOkUscGFzc3dvcmQ6YSxsZW5ndGg6di5jb250ZW50TGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aSxyYW5nZUNodW5rU2l6ZTpzfSxoLGwsdSk7Zm9yKHZhciBlPTAscj1nO2U8ci5sZW5ndGg7ZSsrKXt2YXIgbj1yW2VdO3Quc2VuZFByb2dyZXNzaXZlRGF0YShuKX1nPVtdLGQucmVzb2x2ZSh0KSxiPW51bGx9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtkLnJlamVjdChlKSxiPW51bGx9KSk7dmFyIHk9MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscil7di5yZWFkKCkudGhlbigoZnVuY3Rpb24gZShpKXt2YXIgcz1pLnZhbHVlLGY9aS5kb25lO3RyeXtpZihqKCksZilyZXR1cm4gdHx8ZnVuY3Rpb24oKXt2YXIgZT0oMCxuLmFycmF5c1RvQnl0ZXMpKGcpO2MmJmUubGVuZ3RoIT09YyYmKDAsbi53YXJuKSgicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsIik7dHJ5e3Q9bmV3IG8uTG9jYWxQZGZNYW5hZ2VyKE8sZSxhLEUsaCxsLHUpLGQucmVzb2x2ZSh0KX1jYXRjaChlKXtkLnJlamVjdChlKX1nPVtdfSgpLHZvaWQoYj1udWxsKTt5Kz0oMCxuLmFycmF5Qnl0ZUxlbmd0aCkocyksdi5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8RS5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp5LHRvdGFsOk1hdGgubWF4KHksdi5jb250ZW50TGVuZ3RofHwwKX0pLHQ/dC5zZW5kUHJvZ3Jlc3NpdmVEYXRhKHMpOmcucHVzaChzKSx2LnJlYWQoKS50aGVuKGUscil9Y2F0Y2goZSl7cihlKX19KSxyKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7ZC5yZWplY3QoZSksYj1udWxsfSkpLGI9ZnVuY3Rpb24oZSl7cC5jYW5jZWxBbGxSZXF1ZXN0cyhlKX0sZC5wcm9taXNlfShlKS50aGVuKChmdW5jdGlvbihlKXtpZih2KXRocm93IGUudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpLG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIik7KHI9ZSkucmVxdWVzdExvYWRlZFN0cmVhbSghMCkudGhlbigoZnVuY3Rpb24oZSl7RS5zZW5kKCJEYXRhTG9hZGVkIix7bGVuZ3RoOmUuYnl0ZXMuYnl0ZUxlbmd0aH0pfSkpfSkpLnRoZW4ocyxhKX0oZSksZT1udWxsfSkpLEl9fSx7a2V5OiJpbml0aWFsaXplRnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKCJ3b3JrZXIiLCJtYWluIix0KTtlLnNldHVwKHIsdCksci5zZW5kKCJyZWFkeSIsbnVsbCl9fV0pLGV9KCk7dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1BLCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYhdS5pc05vZGVKUyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYiZnVuY3Rpb24iPT10eXBlb2YoTz1zZWxmKS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBPJiZBLmluaXRpYWxpemVGcm9tUG9ydChzZWxmKX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGkoZSl9KGUpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxhKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGkoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW8oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1vKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09byhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQoZSk7aWYodCl7dmFyIGE9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1vKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlZlcmJvc2l0eUxldmVsPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXQuVGV4dFJlbmRlcmluZ01vZGU9dC5TdHJlYW1UeXBlPXQuUmVuZGVyaW5nSW50ZW50RmxhZz10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10LlBhZ2VBY3Rpb25FdmVudFR5cGU9dC5PUFM9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTElORV9GQUNUT1I9dC5MSU5FX0RFU0NFTlRfRkFDVE9SPXQuSW52YWxpZFBERkV4Y2VwdGlvbj10LkltYWdlS2luZD10LklERU5USVRZX01BVFJJWD10LkZvcm1hdEVycm9yPXQuRm9udFR5cGU9dC5GZWF0dXJlVGVzdD10LkZPTlRfSURFTlRJVFlfTUFUUklYPXQuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuQmFzZUV4Y2VwdGlvbj10LkJBU0VMSU5FX0ZBQ1RPUj10LkFubm90YXRpb25UeXBlPXQuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlPXQuQW5ub3RhdGlvblJldmlld1N0YXRlPXQuQW5ub3RhdGlvblJlcGx5VHlwZT10LkFubm90YXRpb25Nb2RlPXQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXQuQW5ub3RhdGlvbkZsYWc9dC5Bbm5vdGF0aW9uRmllbGRGbGFnPXQuQW5ub3RhdGlvbkVkaXRvclR5cGU9dC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PXQuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXQuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT10LkFib3J0RXhjZXB0aW9uPXZvaWQgMCx0LmFycmF5Qnl0ZUxlbmd0aD1QLHQuYXJyYXlzVG9CeXRlcz1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZigxPT09dCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTtmb3IodmFyIHI9MCxuPTA7bjx0O24rKylyKz1QKGVbbl0pO2Zvcih2YXIgYT0wLGk9bmV3IFVpbnQ4QXJyYXkociksbz0wO288dDtvKyspe3ZhciBzPWVbb107cyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fChzPSJzdHJpbmciPT10eXBlb2Ygcz9GKHMpOm5ldyBVaW50OEFycmF5KHMpKTt2YXIgYz1zLmJ5dGVMZW5ndGg7aS5zZXQocyxhKSxhKz1jfXJldHVybiBpfSx0LmFzc2VydD1mdW5jdGlvbihlLHQpe2V8fHkodCl9LHQuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXsib2JqZWN0Ij09PW8oZSkmJm51bGwhPT1lJiZ2b2lkIDAhPT1lLmxlbmd0aHx8eSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYnl0ZXNUb1N0cmluZyIpO3ZhciB0PWUubGVuZ3RoLHI9ODE5MjtpZih0PHIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IodmFyIG49W10sYT0wO2E8dDthKz1yKXt2YXIgaT1NYXRoLm1pbihhK3IsdCkscz1lLnN1YmFycmF5KGEsaSk7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIG4uam9pbigiIil9LHQuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk9ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9ITE7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzZXR0bGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fSksZS5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UucmVzb2x2ZT1mdW5jdGlvbihlKXt0PSEwLHIoZSl9LGUucmVqZWN0PWZ1bmN0aW9uKGUpe3Q9ITAsbihlKX19KSksZX0sdC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIWUpcmV0dXJuIG51bGw7dHJ5e2lmKHImJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoci5hZGREZWZhdWx0UHJvdG9jb2wmJmUuc3RhcnRzV2l0aCgid3d3LiIpKXt2YXIgbj1lLm1hdGNoKC9cLi9nKTtuJiZuLmxlbmd0aD49MiYmKGU9Imh0dHA6Ly8iLmNvbmNhdChlKSl9aWYoci50cnlDb252ZXJ0RW5jb2RpbmcpdHJ5e2U9TShlKX1jYXRjaChlKXt9fXZhciBhPXQ/bmV3IFVSTChlLHQpOm5ldyBVUkwoZSk7aWYoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7c3dpdGNoKGUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0oYSkpcmV0dXJuIGF9Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmdldE1vZGlmaWNhdGlvbkRhdGU9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmV3IERhdGU7cmV0dXJuW2UuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLChlLmdldFVUQ01vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpXS5qb2luKCIiKX0sdC5nZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBnfSx0LmluZm89ZnVuY3Rpb24oZSl7Zz49cC5JTkZPUyYmY29uc29sZS5sb2coIkluZm86ICIuY29uY2F0KGUpKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09byhlKSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdC5pc0FycmF5RXF1YWw9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH0sdC5vYmplY3RGcm9tTWFwPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWEoZSkpKXtyJiYoZT1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgbyxzPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBzPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsbz1lfSxmOmZ1bmN0aW9uKCl7dHJ5e3N8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBvfX19fShlKTt0cnl7Zm9yKGkucygpOyEodD1pLm4oKSkuZG9uZTspe3ZhciBvPShyPXQudmFsdWUsMixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShyKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHIpfHxhKHIsMil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkscz1vWzBdLGM9b1sxXTtuW3NdPWN9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBufSx0Lm9iamVjdFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aH0sdC5zZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoZz1lKX0sdC5zaGFkb3c9bSx0LnN0cmluZzMyPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmUpfSx0LnN0cmluZ1RvQnl0ZXM9Rix0LnN0cmluZ1RvUERGU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGVbMF0+PSLDryImJigiw74iPT09ZVswXSYmIsO/Ij09PWVbMV0/dD0idXRmLTE2YmUiOiLDvyI9PT1lWzBdJiYiw74iPT09ZVsxXT90PSJ1dGYtMTZsZSI6IsOvIj09PWVbMF0mJiLCuyI9PT1lWzFdJiYiwr8iPT09ZVsyXSYmKHQ9InV0Zi04IiksdCkpdHJ5e3ZhciByPW5ldyBUZXh0RGVjb2Rlcih0LHtmYXRhbDohMH0pLG49RihlKTtyZXR1cm4gci5kZWNvZGUobil9Y2F0Y2goZSl7dignc3RyaW5nVG9QREZTdHJpbmc6ICInLmNvbmNhdChlLCciLicpKX1mb3IodmFyIGE9W10saT0wLG89ZS5sZW5ndGg7aTxvO2krKyl7dmFyIHM9altlLmNoYXJDb2RlQXQoaSldO2EucHVzaChzP1N0cmluZy5mcm9tQ2hhckNvZGUocyk6ZS5jaGFyQXQoaSkpfXJldHVybiBhLmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGOFN0cmluZz1NLHQudW5yZWFjaGFibGU9eSx0LnV0ZjhTdHJpbmdUb1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX0sdC53YXJuPXYsZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZHx8KGdsb2JhbFRoaXMuX3BkZmpzQ29tcGF0aWJpbGl0eUNoZWNrZWQ9ITAscigzKSksdC5JREVOVElUWV9NQVRSSVg9WzEsMCwwLDEsMCwwXSx0LkZPTlRfSURFTlRJVFlfTUFUUklYPVsuMDAxLDAsMCwuMDAxLDAsMF0sdC5MSU5FX0ZBQ1RPUj0xLjM1LHQuTElORV9ERVNDRU5UX0ZBQ1RPUj0uMzUsdC5CQVNFTElORV9GQUNUT1I9LjI1OTI1OTI1OTI1OTI1OTI0LHQuUmVuZGVyaW5nSW50ZW50RmxhZz17QU5ZOjEsRElTUExBWToyLFBSSU5UOjQsU0FWRTo4LEFOTk9UQVRJT05TX0ZPUk1TOjE2LEFOTk9UQVRJT05TX1NUT1JBR0U6MzIsQU5OT1RBVElPTlNfRElTQUJMRTo2NCxPUExJU1Q6MjU2fSx0LkFubm90YXRpb25Nb2RlPXtESVNBQkxFOjAsRU5BQkxFOjEsRU5BQkxFX0ZPUk1TOjIsRU5BQkxFX1NUT1JBR0U6M30sdC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PSJwZGZqc19pbnRlcm5hbF9lZGl0b3JfIix0LkFubm90YXRpb25FZGl0b3JUeXBlPXtESVNBQkxFOi0xLE5PTkU6MCxGUkVFVEVYVDozLElOSzoxNX0sdC5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT17RlJFRVRFWFRfU0laRToxLEZSRUVURVhUX0NPTE9SOjIsRlJFRVRFWFRfT1BBQ0lUWTozLElOS19DT0xPUjoxMSxJTktfVEhJQ0tORVNTOjEyLElOS19PUEFDSVRZOjEzfSx0LlBlcm1pc3Npb25GbGFnPXtQUklOVDo0LE1PRElGWV9DT05URU5UUzo4LENPUFk6MTYsTU9ESUZZX0FOTk9UQVRJT05TOjMyLEZJTExfSU5URVJBQ1RJVkVfRk9STVM6MjU2LENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6NTEyLEFTU0VNQkxFOjEwMjQsUFJJTlRfSElHSF9RVUFMSVRZOjIwNDh9LHQuVGV4dFJlbmRlcmluZ01vZGU9e0ZJTEw6MCxTVFJPS0U6MSxGSUxMX1NUUk9LRToyLElOVklTSUJMRTozLEZJTExfQUREX1RPX1BBVEg6NCxTVFJPS0VfQUREX1RPX1BBVEg6NSxGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDo2LEFERF9UT19QQVRIOjcsRklMTF9TVFJPS0VfTUFTSzozLEFERF9UT19QQVRIX0ZMQUc6NH0sdC5JbWFnZUtpbmQ9e0dSQVlTQ0FMRV8xQlBQOjEsUkdCXzI0QlBQOjIsUkdCQV8zMkJQUDozfSx0LkFubm90YXRpb25UeXBlPXtURVhUOjEsTElOSzoyLEZSRUVURVhUOjMsTElORTo0LFNRVUFSRTo1LENJUkNMRTo2LFBPTFlHT046NyxQT0xZTElORTo4LEhJR0hMSUdIVDo5LFVOREVSTElORToxMCxTUVVJR0dMWToxMSxTVFJJS0VPVVQ6MTIsU1RBTVA6MTMsQ0FSRVQ6MTQsSU5LOjE1LFBPUFVQOjE2LEZJTEVBVFRBQ0hNRU5UOjE3LFNPVU5EOjE4LE1PVklFOjE5LFdJREdFVDoyMCxTQ1JFRU46MjEsUFJJTlRFUk1BUks6MjIsVFJBUE5FVDoyMyxXQVRFUk1BUks6MjQsVEhSRUVEOjI1LFJFREFDVDoyNn0sdC5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9e01BUktFRDoiTWFya2VkIixSRVZJRVc6IlJldmlldyJ9LHQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXtNQVJLRUQ6Ik1hcmtlZCIsVU5NQVJLRUQ6IlVubWFya2VkIn0sdC5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9e0FDQ0VQVEVEOiJBY2NlcHRlZCIsUkVKRUNURUQ6IlJlamVjdGVkIixDQU5DRUxMRUQ6IkNhbmNlbGxlZCIsQ09NUExFVEVEOiJDb21wbGV0ZWQiLE5PTkU6Ik5vbmUifSx0LkFubm90YXRpb25SZXBseVR5cGU9e0dST1VQOiJHcm91cCIsUkVQTFk6IlIifSx0LkFubm90YXRpb25GbGFnPXtJTlZJU0lCTEU6MSxISURERU46MixQUklOVDo0LE5PWk9PTTo4LE5PUk9UQVRFOjE2LE5PVklFVzozMixSRUFET05MWTo2NCxMT0NLRUQ6MTI4LFRPR0dMRU5PVklFVzoyNTYsTE9DS0VEQ09OVEVOVFM6NTEyfSx0LkFubm90YXRpb25GaWVsZEZsYWc9e1JFQURPTkxZOjEsUkVRVUlSRUQ6MixOT0VYUE9SVDo0LE1VTFRJTElORTo0MDk2LFBBU1NXT1JEOjgxOTIsTk9UT0dHTEVUT09GRjoxNjM4NCxSQURJTzozMjc2OCxQVVNIQlVUVE9OOjY1NTM2LENPTUJPOjEzMTA3MixFRElUOjI2MjE0NCxTT1JUOjUyNDI4OCxGSUxFU0VMRUNUOjEwNDg1NzYsTVVMVElTRUxFQ1Q6MjA5NzE1MixET05PVFNQRUxMQ0hFQ0s6NDE5NDMwNCxET05PVFNDUk9MTDo4Mzg4NjA4LENPTUI6MTY3NzcyMTYsUklDSFRFWFQ6MzM1NTQ0MzIsUkFESU9TSU5VTklTT046MzM1NTQ0MzIsQ09NTUlUT05TRUxDSEFOR0U6NjcxMDg4NjR9LHQuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT17U09MSUQ6MSxEQVNIRUQ6MixCRVZFTEVEOjMsSU5TRVQ6NCxVTkRFUkxJTkU6NX0sdC5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPXtFOiJNb3VzZSBFbnRlciIsWDoiTW91c2UgRXhpdCIsRDoiTW91c2UgRG93biIsVToiTW91c2UgVXAiLEZvOiJGb2N1cyIsQmw6IkJsdXIiLFBPOiJQYWdlT3BlbiIsUEM6IlBhZ2VDbG9zZSIsUFY6IlBhZ2VWaXNpYmxlIixQSToiUGFnZUludmlzaWJsZSIsSzoiS2V5c3Ryb2tlIixGOiJGb3JtYXQiLFY6IlZhbGlkYXRlIixDOiJDYWxjdWxhdGUifSx0LkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlPXtXQzoiV2lsbENsb3NlIixXUzoiV2lsbFNhdmUiLERTOiJEaWRTYXZlIixXUDoiV2lsbFByaW50IixEUDoiRGlkUHJpbnQifSx0LlBhZ2VBY3Rpb25FdmVudFR5cGU9e086IlBhZ2VPcGVuIixDOiJQYWdlQ2xvc2UifSx0LlN0cmVhbVR5cGU9e1VOS05PV046IlVOS05PV04iLEZMQVRFOiJGTEFURSIsTFpXOiJMWlciLERDVDoiRENUIixKUFg6IkpQWCIsSkJJRzoiSkJJRyIsQTg1OiJBODUiLEFIWDoiQUhYIixDQ0Y6IkNDRiIsUkxYOiJSTFgifSx0LkZvbnRUeXBlPXtVTktOT1dOOiJVTktOT1dOIixUWVBFMToiVFlQRTEiLFRZUEUxU1RBTkRBUkQ6IlRZUEUxU1RBTkRBUkQiLFRZUEUxQzoiVFlQRTFDIixDSURGT05UVFlQRTA6IkNJREZPTlRUWVBFMCIsQ0lERk9OVFRZUEUwQzoiQ0lERk9OVFRZUEUwQyIsVFJVRVRZUEU6IlRSVUVUWVBFIixDSURGT05UVFlQRTI6IkNJREZPTlRUWVBFMiIsVFlQRTM6IlRZUEUzIixPUEVOVFlQRToiT1BFTlRZUEUiLFRZUEUwOiJUWVBFMCIsTU1UWVBFMToiTU1UWVBFMSJ9O3ZhciBwPXtFUlJPUlM6MCxXQVJOSU5HUzoxLElORk9TOjV9O3QuVmVyYm9zaXR5TGV2ZWw9cCx0LkNNYXBDb21wcmVzc2lvblR5cGU9e05PTkU6MCxCSU5BUlk6MX0sdC5PUFM9e2RlcGVuZGVuY3k6MSxzZXRMaW5lV2lkdGg6MixzZXRMaW5lQ2FwOjMsc2V0TGluZUpvaW46NCxzZXRNaXRlckxpbWl0OjUsc2V0RGFzaDo2LHNldFJlbmRlcmluZ0ludGVudDo3LHNldEZsYXRuZXNzOjgsc2V0R1N0YXRlOjksc2F2ZToxMCxyZXN0b3JlOjExLHRyYW5zZm9ybToxMixtb3ZlVG86MTMsbGluZVRvOjE0LGN1cnZlVG86MTUsY3VydmVUbzI6MTYsY3VydmVUbzM6MTcsY2xvc2VQYXRoOjE4LHJlY3RhbmdsZToxOSxzdHJva2U6MjAsY2xvc2VTdHJva2U6MjEsZmlsbDoyMixlb0ZpbGw6MjMsZmlsbFN0cm9rZToyNCxlb0ZpbGxTdHJva2U6MjUsY2xvc2VGaWxsU3Ryb2tlOjI2LGNsb3NlRU9GaWxsU3Ryb2tlOjI3LGVuZFBhdGg6MjgsY2xpcDoyOSxlb0NsaXA6MzAsYmVnaW5UZXh0OjMxLGVuZFRleHQ6MzIsc2V0Q2hhclNwYWNpbmc6MzMsc2V0V29yZFNwYWNpbmc6MzQsc2V0SFNjYWxlOjM1LHNldExlYWRpbmc6MzYsc2V0Rm9udDozNyxzZXRUZXh0UmVuZGVyaW5nTW9kZTozOCxzZXRUZXh0UmlzZTozOSxtb3ZlVGV4dDo0MCxzZXRMZWFkaW5nTW92ZVRleHQ6NDEsc2V0VGV4dE1hdHJpeDo0MixuZXh0TGluZTo0MyxzaG93VGV4dDo0NCxzaG93U3BhY2VkVGV4dDo0NSxuZXh0TGluZVNob3dUZXh0OjQ2LG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OjQ3LHNldENoYXJXaWR0aDo0OCxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6NDksc2V0U3Ryb2tlQ29sb3JTcGFjZTo1MCxzZXRGaWxsQ29sb3JTcGFjZTo1MSxzZXRTdHJva2VDb2xvcjo1MixzZXRTdHJva2VDb2xvck46NTMsc2V0RmlsbENvbG9yOjU0LHNldEZpbGxDb2xvck46NTUsc2V0U3Ryb2tlR3JheTo1NixzZXRGaWxsR3JheTo1NyxzZXRTdHJva2VSR0JDb2xvcjo1OCxzZXRGaWxsUkdCQ29sb3I6NTksc2V0U3Ryb2tlQ01ZS0NvbG9yOjYwLHNldEZpbGxDTVlLQ29sb3I6NjEsc2hhZGluZ0ZpbGw6NjIsYmVnaW5JbmxpbmVJbWFnZTo2MyxiZWdpbkltYWdlRGF0YTo2NCxlbmRJbmxpbmVJbWFnZTo2NSxwYWludFhPYmplY3Q6NjYsbWFya1BvaW50OjY3LG1hcmtQb2ludFByb3BzOjY4LGJlZ2luTWFya2VkQ29udGVudDo2OSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczo3MCxlbmRNYXJrZWRDb250ZW50OjcxLGJlZ2luQ29tcGF0OjcyLGVuZENvbXBhdDo3MyxwYWludEZvcm1YT2JqZWN0QmVnaW46NzQscGFpbnRGb3JtWE9iamVjdEVuZDo3NSxiZWdpbkdyb3VwOjc2LGVuZEdyb3VwOjc3LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SW1hZ2VNYXNrWE9iamVjdDo4MyxwYWludEltYWdlTWFza1hPYmplY3RHcm91cDo4NCxwYWludEltYWdlWE9iamVjdDo4NSxwYWludElubGluZUltYWdlWE9iamVjdDo4NixwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOjg3LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Ojg4LHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDo4OSxwYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6OTAsY29uc3RydWN0UGF0aDo5MX0sdC5VTlNVUFBPUlRFRF9GRUFUVVJFUz17Zm9ybXM6ImZvcm1zIixqYXZhU2NyaXB0OiJqYXZhU2NyaXB0IixzaWduYXR1cmVzOiJzaWduYXR1cmVzIixzbWFzazoic21hc2siLHNoYWRpbmdQYXR0ZXJuOiJzaGFkaW5nUGF0dGVybiIsZXJyb3JUaWxpbmdQYXR0ZXJuOiJlcnJvclRpbGluZ1BhdHRlcm4iLGVycm9yRXh0R1N0YXRlOiJlcnJvckV4dEdTdGF0ZSIsZXJyb3JYT2JqZWN0OiJlcnJvclhPYmplY3QiLGVycm9yRm9udExvYWRUeXBlMzoiZXJyb3JGb250TG9hZFR5cGUzIixlcnJvckZvbnRTdGF0ZToiZXJyb3JGb250U3RhdGUiLGVycm9yRm9udE1pc3Npbmc6ImVycm9yRm9udE1pc3NpbmciLGVycm9yRm9udFRyYW5zbGF0ZToiZXJyb3JGb250VHJhbnNsYXRlIixlcnJvckNvbG9yU3BhY2U6ImVycm9yQ29sb3JTcGFjZSIsZXJyb3JPcGVyYXRvckxpc3Q6ImVycm9yT3BlcmF0b3JMaXN0IixlcnJvckZvbnRUb1VuaWNvZGU6ImVycm9yRm9udFRvVW5pY29kZSIsZXJyb3JGb250TG9hZE5hdGl2ZToiZXJyb3JGb250TG9hZE5hdGl2ZSIsZXJyb3JGb250QnVpbGRQYXRoOiJlcnJvckZvbnRCdWlsZFBhdGgiLGVycm9yRm9udEdldFBhdGg6ImVycm9yRm9udEdldFBhdGgiLGVycm9yTWFya2VkQ29udGVudDoiZXJyb3JNYXJrZWRDb250ZW50IixlcnJvckNvbnRlbnRTdWJTdHJlYW06ImVycm9yQ29udGVudFN1YlN0cmVhbSJ9LHQuUGFzc3dvcmRSZXNwb25zZXM9e05FRURfUEFTU1dPUkQ6MSxJTkNPUlJFQ1RfUEFTU1dPUkQ6Mn07dmFyIGc9cC5XQVJOSU5HUztmdW5jdGlvbiB2KGUpe2c+PXAuV0FSTklOR1MmJmNvbnNvbGUubG9nKCJXYXJuaW5nOiAiLmNvbmNhdChlKSl9ZnVuY3Rpb24geShlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gbShlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiFuLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5jb25zdHJ1Y3Rvcj09PWUmJnkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VFeGNlcHRpb24uIiksdGhpcy5tZXNzYWdlPXQsdGhpcy5uYW1lPXJ9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LkJhc2VFeGNlcHRpb249Yjt2YXIgdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJQYXNzd29yZEV4Y2VwdGlvbiIpKS5jb2RlPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5QYXNzd29yZEV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpKS5kZXRhaWxzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5Vbmtub3duRXJyb3JFeGNlcHRpb249azt2YXIgUz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiSW52YWxpZFBERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0LkludmFsaWRQREZFeGNlcHRpb249Uzt2YXIgeD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiTWlzc2luZ1BERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0Lk1pc3NpbmdQREZFeGNlcHRpb249eDt2YXIgTz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iKSkuc3RhdHVzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb249Tzt2YXIgQT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRm9ybWF0RXJyb3IiKX1yZXR1cm4gYyhyKX0oYik7dC5Gb3JtYXRFcnJvcj1BO3ZhciBDPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJBYm9ydEV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTtmdW5jdGlvbiBGKGUpeyJzdHJpbmciIT10eXBlb2YgZSYmeSgiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlcyIpO2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBVaW50OEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09MjU1JmUuY2hhckNvZGVBdChuKTtyZXR1cm4gcn1mdW5jdGlvbiBQKGUpe3JldHVybiB2b2lkIDAhPT1lLmxlbmd0aD9lLmxlbmd0aDp2b2lkIDAhPT1lLmJ5dGVMZW5ndGg/ZS5ieXRlTGVuZ3RoOnZvaWQgeSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYXJyYXlCeXRlTGVuZ3RoIil9dC5BYm9ydEV4Y2VwdGlvbj1DO3ZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6ImlzTGl0dGxlRW5kaWFuIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0xpdHRsZUVuZGlhbiIsKChlPW5ldyBVaW50OEFycmF5KDQpKVswXT0xLDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXSkpO3ZhciBlfX0se2tleToiaXNFdmFsU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0V2YWxTdXBwb3J0ZWQiLGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSl9fSx7a2V5OiJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcywiaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQiLCJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzKX19LHtrZXk6InBsYXRmb3JtIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcj9tKHRoaXMsInBsYXRmb3JtIix7aXNXaW46ITEsaXNNYWM6ITF9KTptKHRoaXMsInBsYXRmb3JtIix7aXNXaW46bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJXaW4iKSxpc01hYzpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIk1hYyIpfSl9fV0pLGV9KCk7dC5GZWF0dXJlVGVzdD1UO3ZhciBJPW4oQXJyYXkoMjU2KS5rZXlzKCkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKX0pKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6Im1ha2VIZXhDb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiIjIi5jb25jYXQoSVtlXSkuY29uY2F0KElbdF0pLmNvbmNhdChJW3JdKX19LHtrZXk6InNjYWxlTWluTWF4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByO2VbMF0/KGVbMF08MCYmKHI9dFswXSx0WzBdPXRbMV0sdFsxXT1yKSx0WzBdKj1lWzBdLHRbMV0qPWVbMF0sZVszXTwwJiYocj10WzJdLHRbMl09dFszXSx0WzNdPXIpLHRbMl0qPWVbM10sdFszXSo9ZVszXSk6KHI9dFswXSx0WzBdPXRbMl0sdFsyXT1yLHI9dFsxXSx0WzFdPXRbM10sdFszXT1yLGVbMV08MCYmKHI9dFsyXSx0WzJdPXRbM10sdFszXT1yKSx0WzJdKj1lWzFdLHRbM10qPWVbMV0sZVsyXTwwJiYocj10WzBdLHRbMF09dFsxXSx0WzFdPXIpLHRbMF0qPWVbMl0sdFsxXSo9ZVsyXSksdFswXSs9ZVs0XSx0WzFdKz1lWzRdLHRbMl0rPWVbNV0sdFszXSs9ZVs1XX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX19LHtrZXk6ImFwcGx5VHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX19LHtrZXk6ImFwcGx5SW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9yLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9yXX19LHtrZXk6ImdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPWUuYXBwbHlUcmFuc2Zvcm0odCxyKSxhPWUuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLHIpLGk9ZS5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxyKSxvPWUuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0scik7cmV0dXJuW01hdGgubWluKG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWluKG5bMV0sYVsxXSxpWzFdLG9bMV0pLE1hdGgubWF4KG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWF4KG5bMV0sYVsxXSxpWzFdLG9bMV0pXX19LHtrZXk6ImludmVyc2VUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX19LHtrZXk6InNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0scj1lWzBdKnRbMF0rZVsxXSp0WzJdLG49ZVswXSp0WzFdK2VbMV0qdFszXSxhPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLG89KHIraSkvMixzPU1hdGguc3FydChNYXRoLnBvdyhyK2ksMiktNCoocippLWEqbikpLzIsYz1vK3N8fDEsdT1vLXN8fDE7cmV0dXJuW01hdGguc3FydChjKSxNYXRoLnNxcnQodSldfX0se2tleToibm9ybWFsaXplUmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zbGljZSgwKTtyZXR1cm4gZVswXT5lWzJdJiYodFswXT1lWzJdLHRbMl09ZVswXSksZVsxXT5lWzNdJiYodFsxXT1lWzNdLHRbM109ZVsxXSksdH19LHtrZXk6ImludGVyc2VjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLm1heChNYXRoLm1pbihlWzBdLGVbMl0pLE1hdGgubWluKHRbMF0sdFsyXSkpLG49TWF0aC5taW4oTWF0aC5tYXgoZVswXSxlWzJdKSxNYXRoLm1heCh0WzBdLHRbMl0pKTtpZihyPm4pcmV0dXJuIG51bGw7dmFyIGE9TWF0aC5tYXgoTWF0aC5taW4oZVsxXSxlWzNdKSxNYXRoLm1pbih0WzFdLHRbM10pKSxpPU1hdGgubWluKE1hdGgubWF4KGVbMV0sZVszXSksTWF0aC5tYXgodFsxXSx0WzNdKSk7cmV0dXJuIGE+aT9udWxsOltyLGEsbixpXX19LHtrZXk6ImJlemllckJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzLGMpe2Zvcih2YXIgdSxsLGYsaCxkLHAsZyx2LHk9W10sbT1bW10sW11dLGI9MDtiPDI7KytiKWlmKDA9PT1iPyhsPTYqZS0xMipyKzYqaSx1PS0zKmUrOSpyLTkqaSszKnMsZj0zKnItMyplKToobD02KnQtMTIqYSs2Km8sdT0tMyp0KzkqYS05Km8rMypjLGY9MyphLTMqdCksTWF0aC5hYnModSk8MWUtMTIpe2lmKE1hdGguYWJzKGwpPDFlLTEyKWNvbnRpbnVlOzA8KGg9LWYvbCkmJmg8MSYmeS5wdXNoKGgpfWVsc2UgZz1sKmwtNCpmKnUsdj1NYXRoLnNxcnQoZyksZzwwfHwoMDwoZD0oLWwrdikvKDIqdSkpJiZkPDEmJnkucHVzaChkKSwwPChwPSgtbC12KS8oMip1KSkmJnA8MSYmeS5wdXNoKHApKTtmb3IodmFyIHcsaz15Lmxlbmd0aCxTPWs7ay0tOyl3PTEtKGg9eVtrXSksbVswXVtrXT13KncqdyplKzMqdyp3KmgqciszKncqaCpoKmkraCpoKmgqcyxtWzFdW2tdPXcqdyp3KnQrMyp3KncqaCphKzMqdypoKmgqbytoKmgqaCpjO3JldHVybiBtWzBdW1NdPWUsbVsxXVtTXT10LG1bMF1bUysxXT1zLG1bMV1bUysxXT1jLG1bMF0ubGVuZ3RoPW1bMV0ubGVuZ3RoPVMrMixbTWF0aC5taW4uYXBwbHkoTWF0aCxuKG1bMF0pKSxNYXRoLm1pbi5hcHBseShNYXRoLG4obVsxXSkpLE1hdGgubWF4LmFwcGx5KE1hdGgsbihtWzBdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKG1bMV0pKV19fV0pLGV9KCk7dC5VdGlsPUU7dmFyIGo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcyOCw3MTEsNzEwLDcyOSw3MzMsNzMxLDczMCw3MzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODIyNiw4MjI0LDgyMjUsODIzMCw4MjEyLDgyMTEsNDAyLDgyNjAsODI0OSw4MjUwLDg3MjIsODI0MCw4MjIyLDgyMjAsODIyMSw4MjE2LDgyMTcsODIxOCw4NDgyLDY0MjU3LDY0MjU4LDMyMSwzMzgsMzUyLDM3NiwzODEsMzA1LDMyMiwzMzksMzUzLDM4MiwwLDgzNjRdO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNCk7IWdsb2JhbFRoaXMuYnRvYSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYnRvYT1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmluYXJ5IikudG9TdHJpbmcoImJhc2U2NCIpfSksIWdsb2JhbFRoaXMuYXRvYiYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYXRvYj1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoImJpbmFyeSIpfSksIWdsb2JhbFRoaXMuRE9NTWF0cml4JiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5ET01NYXRyaXg9cmVxdWlyZSgiY2FudmFzIikuRE9NTWF0cml4KSwhZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW09cmVxdWlyZSgid2ViLXN0cmVhbXMtcG9seWZpbGwvZGlzdC9wb255ZmlsbC5qcyIpLlJlYWRhYmxlU3RyZWFtKSxBcnJheS5wcm90b3R5cGUuYXR8fHIoNSksVWludDhBcnJheS5wcm90b3R5cGUuYXR8fHIoNzkpLGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lfHxyKDg5KX0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzTm9kZUpTPXZvaWQgMDt2YXIgbj0hKCJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgcHJvY2Vzcz8idW5kZWZpbmVkIjpyKHByb2Nlc3MpKXx8cHJvY2VzcysiIiE9IltvYmplY3QgcHJvY2Vzc10ifHxwcm9jZXNzLnZlcnNpb25zLm53fHxwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uJiZwcm9jZXNzLnR5cGUmJiJicm93c2VyIiE9PXByb2Nlc3MudHlwZSk7dC5pc05vZGVKUz1ufSwoZSx0LHIpPT57cig2KTt2YXIgbj1yKDc4KTtlLmV4cG9ydHM9bigiQXJyYXkiLCJhdCIpfSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoNDQpLGk9cig2OCksbz1yKDY2KSxzPXIoNzMpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKSxyPWkodCksbj1vKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfX0pLHMoImF0Iil9LChlLHQscik9Pnt2YXIgbj1yKDgpLGE9cig5KS5mLGk9cig0OCksbz1yKDUyKSxzPXIoNDIpLGM9cig2MCksdT1yKDcyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixsLGYsaCxkLHA9ZS50YXJnZXQsZz1lLmdsb2JhbCx2PWUuc3RhdDtpZihyPWc/bjp2P25bcF18fHMocCx7fSk6KG5bcF18fHt9KS5wcm90b3R5cGUpZm9yKGwgaW4gdCl7aWYoaD10W2xdLGY9ZS5kb250Q2FsbEdldFNldD8oZD1hKHIsbCkpJiZkLnZhbHVlOnJbbF0sIXUoZz9sOnArKHY/Ii4iOiIjIikrbCxlLmZvcmNlZCkmJnZvaWQgMCE9PWYpe2lmKHR5cGVvZiBoPT10eXBlb2YgZiljb250aW51ZTtjKGgsZil9KGUuc2hhbXx8ZiYmZi5zaGFtKSYmaShoLCJzaGFtIiwhMCksbyhyLGwsaCxlKX19fSxlPT57dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX07ZS5leHBvcnRzPXQoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8dCgib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8dCgib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHx0KCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDEyKSxpPXIoMTQpLG89cigxNSkscz1yKDE2KSxjPXIoMjIpLHU9cig0MyksbD1yKDQ2KSxmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4/ZjpmdW5jdGlvbihlLHQpe2lmKGU9cyhlKSx0PWModCksbCl0cnl7cmV0dXJuIGYoZSx0KX1jYXRjaChlKXt9aWYodShlLHQpKXJldHVybiBvKCFhKGkuZixlLHQpLGVbdF0pfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9bj9hLmJpbmQoYSk6ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShhLGFyZ3VtZW50cyl9fSwoZSx0LHIpPT57dmFyIG49cigxMSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGV8fGUuaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSkpfSwoZSx0KT0+e3ZhciByPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixhPW4mJiFyLmNhbGwoezE6Mn0sMSk7dC5mPWE/ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpyfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTcpLGE9cigyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuKGEoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigxMSksaT1yKDE5KSxvPU9iamVjdCxzPW4oIiIuc3BsaXQpO2UuZXhwb3J0cz1hKChmdW5jdGlvbigpe3JldHVybiFvKCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PWkoZSk/cyhlLCIiKTpvKGUpfTpvfSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUsaT1hLmNhbGwsbz1uJiZhLmJpbmQuYmluZChpLGkpO2UuZXhwb3J0cz1uP286ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoZSxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPW4oe30udG9TdHJpbmcpLGk9bigiIi5zbGljZSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKGEoZSksOCwtMSl9fSwoZSx0LHIpPT57dmFyIG49cigyMSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpdGhyb3cgYSgiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitlKTtyZXR1cm4gZX19LGU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fSwoZSx0LHIpPT57dmFyIG49cigyMyksYT1yKDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlLCJzdHJpbmciKTtyZXR1cm4gYSh0KT90OnQrIiJ9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDI0KSxpPXIoMjcpLG89cigzNCkscz1yKDM3KSxjPXIoMzgpLHU9VHlwZUVycm9yLGw9YygidG9QcmltaXRpdmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighYShlKXx8aShlKSlyZXR1cm4gZTt2YXIgcixjPW8oZSxsKTtpZihjKXtpZih2b2lkIDA9PT10JiYodD0iZGVmYXVsdCIpLHI9bihjLGUsdCksIWEocil8fGkocikpcmV0dXJuIHI7dGhyb3cgdSgiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PXQmJih0PSJudW1iZXIiKSxzKGUsdCl9fSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1yKDI2KSxpPWEuYWxsO2UuZXhwb3J0cz1hLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOm4oZSl8fGU9PT1pfTpmdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6bihlKX19LChlLHQscik9Pnt2YXIgbj1yKDI2KSxhPW4uYWxsO2UuZXhwb3J0cz1uLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV8fGU9PT1hfTpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX19LGU9Pnt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGwscj12b2lkIDA9PT10JiZ2b2lkIDAhPT10O2UuZXhwb3J0cz17YWxsOnQsSVNfSFRNTEREQTpyfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjgpLGE9cigyNSksaT1yKDI5KSxvPXIoMzApLHM9T2JqZWN0O2UuZXhwb3J0cz1vP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9bigiU3ltYm9sIik7cmV0dXJuIGEodCkmJmkodC5wcm90b3R5cGUscyhlKSl9fSwoZSx0LHIpPT57dmFyIG49cig4KSxhPXIoMjUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/KHI9bltlXSxhKHIpP3I6dm9pZCAwKTpuW2VdJiZuW2VdW3RdO3ZhciByfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpO2UuZXhwb3J0cz1uKHt9LmlzUHJvdG90eXBlT2YpfSwoZSx0LHIpPT57dmFyIG49cigzMSk7ZS5leHBvcnRzPW4mJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LChlLHQscik9Pnt2YXIgbj1yKDMyKSxhPXIoMTEpO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFhKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgpO3JldHVybiFTdHJpbmcoZSl8fCEoT2JqZWN0KGUpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJm4mJm48NDF9KSl9LChlLHQscik9Pnt2YXIgbixhLGk9cig4KSxvPXIoMzMpLHM9aS5wcm9jZXNzLGM9aS5EZW5vLHU9cyYmcy52ZXJzaW9uc3x8YyYmYy52ZXJzaW9uLGw9dSYmdS52ODtsJiYoYT0obj1sLnNwbGl0KCIuIikpWzBdPjAmJm5bMF08ND8xOisoblswXStuWzFdKSksIWEmJm8mJighKG49by5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fG5bMV0+PTc0KSYmKG49by5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKGE9K25bMV0pLGUuZXhwb3J0cz1hfSwoZSx0LHIpPT57dmFyIG49cigyOCk7ZS5leHBvcnRzPW4oIm5hdmlnYXRvciIsInVzZXJBZ2VudCIpfHwiIn0sKGUsdCxyKT0+e3ZhciBuPXIoMzUpLGE9cigyMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4gYShyKT92b2lkIDA6bihyKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMzYpLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSxlPT57dmFyIHQ9U3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2goZSl7cmV0dXJuIk9iamVjdCJ9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigyNSksaT1yKDI0KSxvPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixzO2lmKCJzdHJpbmciPT09dCYmYShyPWUudG9TdHJpbmcpJiYhaShzPW4ocixlKSkpcmV0dXJuIHM7aWYoYShyPWUudmFsdWVPZikmJiFpKHM9bihyLGUpKSlyZXR1cm4gcztpZigic3RyaW5nIiE9PXQmJmEocj1lLnRvU3RyaW5nKSYmIWkocz1uKHIsZSkpKXJldHVybiBzO3Rocm93IG8oIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDM5KSxpPXIoNDMpLG89cig0NSkscz1yKDMxKSxjPXIoMzApLHU9YSgid2tzIiksbD1uLlN5bWJvbCxmPWwmJmwuZm9yLGg9Yz9sOmwmJmwud2l0aG91dFNldHRlcnx8bztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIWkodSxlKXx8IXMmJiJzdHJpbmciIT10eXBlb2YgdVtlXSl7dmFyIHQ9IlN5bWJvbC4iK2U7cyYmaShsLGUpP3VbZV09bFtlXTp1W2VdPWMmJmY/Zih0KTpoKHQpfXJldHVybiB1W2VdfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDApLGE9cig0MSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhW2VdfHwoYVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4yNi4xIixtb2RlOm4/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxNC0yMDIyIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjI2LjEvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sZT0+e2UuZXhwb3J0cz0hMX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDQyKSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLG89bltpXXx8YShpLHt9KTtlLmV4cG9ydHM9b30sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e2EobixlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKHIpe25bZV09dH1yZXR1cm4gdH19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoNDQpLGk9bih7fS5oYXNPd25Qcm9wZXJ0eSk7ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoYShlKSx0KX19LChlLHQscik9Pnt2YXIgbj1yKDIwKSxhPU9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEobihlKSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT0wLGk9TWF0aC5yYW5kb20oKSxvPW4oMS4udG9TdHJpbmcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PWU/IiI6ZSkrIilfIitvKCsrYStpLDM2KX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpLGk9cig0Nyk7ZS5leHBvcnRzPSFuJiYhYSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI0KSxpPW4uZG9jdW1lbnQsbz1hKGkpJiZhKGkuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudChlKTp7fX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDkpLGk9cigxNSk7ZS5leHBvcnRzPW4/ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLmYoZSx0LGkoMSxyKSl9OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yLGV9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDQ2KSxpPXIoNTApLG89cig1MSkscz1yKDIyKSxjPVR5cGVFcnJvcix1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZj0iZW51bWVyYWJsZSIsaD0iY29uZmlndXJhYmxlIixkPSJ3cml0YWJsZSI7dC5mPW4/aT9mdW5jdGlvbihlLHQscil7aWYobyhlKSx0PXModCksbyhyKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmInByb3RvdHlwZSI9PT10JiYidmFsdWUiaW4gciYmZCBpbiByJiYhcltkXSl7dmFyIG49bChlLHQpO24mJm5bZF0mJihlW3RdPXIudmFsdWUscj17Y29uZmlndXJhYmxlOmggaW4gcj9yW2hdOm5baF0sZW51bWVyYWJsZTpmIGluIHI/cltmXTpuW2ZdLHdyaXRhYmxlOiExfSl9cmV0dXJuIHUoZSx0LHIpfTp1OmZ1bmN0aW9uKGUsdCxyKXtpZihvKGUpLHQ9cyh0KSxvKHIpLGEpdHJ5e3JldHVybiB1KGUsdCxyKX1jYXRjaChlKXt9aWYoImdldCJpbiByfHwic2V0ImluIHIpdGhyb3cgYygiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gciYmKGVbdF09ci52YWx1ZSksZX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpO2UuZXhwb3J0cz1uJiZhKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMjQpLGE9U3RyaW5nLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoNDkpLGk9cig1Myksbz1yKDQyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7c3x8KHM9e30pO3ZhciBjPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6dDtpZihuKHIpJiZpKHIsdSxzKSxzLmdsb2JhbCljP2VbdF09cjpvKHQscik7ZWxzZXt0cnl7cy51bnNhZmU/ZVt0XSYmKGM9ITApOmRlbGV0ZSBlW3RdfWNhdGNoKGUpe31jP2VbdF09cjphLmYoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiBlfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigyNSksaT1yKDQzKSxvPXIoMTApLHM9cig1NCkuQ09ORklHVVJBQkxFLGM9cig1NSksdT1yKDU2KSxsPXUuZW5mb3JjZSxmPXUuZ2V0LGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGQ9byYmIW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1oKChmdW5jdGlvbigpe30pLCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLHA9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLGc9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXsiU3ltYm9sKCI9PT1TdHJpbmcodCkuc2xpY2UoMCw3KSYmKHQ9IlsiK1N0cmluZyh0KS5yZXBsYWNlKC9eU3ltYm9sXCgoW14pXSopXCkvLCIkMSIpKyJdIiksciYmci5nZXR0ZXImJih0PSJnZXQgIit0KSxyJiZyLnNldHRlciYmKHQ9InNldCAiK3QpLCghaShlLCJuYW1lIil8fHMmJmUubmFtZSE9PXQpJiYobz9oKGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pOmUubmFtZT10KSxkJiZyJiZpKHIsImFyaXR5IikmJmUubGVuZ3RoIT09ci5hcml0eSYmaChlLCJsZW5ndGgiLHt2YWx1ZTpyLmFyaXR5fSk7dHJ5e3ImJmkociwiY29uc3RydWN0b3IiKSYmci5jb25zdHJ1Y3Rvcj9vJiZoKGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSk6ZS5wcm90b3R5cGUmJihlLnByb3RvdHlwZT12b2lkIDApfWNhdGNoKGUpe312YXIgbj1sKGUpO3JldHVybiBpKG4sInNvdXJjZSIpfHwobi5zb3VyY2U9cC5qb2luKCJzdHJpbmciPT10eXBlb2YgdD90OiIiKSksZX07RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPWcoKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykmJmYodGhpcykuc291cmNlfHxjKHRoaXMpfSksInRvU3RyaW5nIil9LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDMpLGk9RnVuY3Rpb24ucHJvdG90eXBlLG89biYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzPWEoaSwibmFtZSIpLGM9cyYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30ubmFtZSx1PXMmJighbnx8biYmbyhpLCJuYW1lIikuY29uZmlndXJhYmxlKTtlLmV4cG9ydHM9e0VYSVNUUzpzLFBST1BFUjpjLENPTkZJR1VSQUJMRTp1fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigyNSksaT1yKDQxKSxvPW4oRnVuY3Rpb24udG9TdHJpbmcpO2EoaS5pbnNwZWN0U291cmNlKXx8KGkuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0pLGUuZXhwb3J0cz1pLmluc3BlY3RTb3VyY2V9LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDU3KSxzPXIoOCksYz1yKDI0KSx1PXIoNDgpLGw9cig0MyksZj1yKDQxKSxoPXIoNTgpLGQ9cig1OSkscD0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLGc9cy5UeXBlRXJyb3Isdj1zLldlYWtNYXA7aWYob3x8Zi5zdGF0ZSl7dmFyIHk9Zi5zdGF0ZXx8KGYuc3RhdGU9bmV3IHYpO3kuZ2V0PXkuZ2V0LHkuaGFzPXkuaGFzLHkuc2V0PXkuc2V0LG49ZnVuY3Rpb24oZSx0KXtpZih5LmhhcyhlKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHkuc2V0KGUsdCksdH0sYT1mdW5jdGlvbihlKXtyZXR1cm4geS5nZXQoZSl8fHt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiB5LmhhcyhlKX19ZWxzZXt2YXIgbT1oKCJzdGF0ZSIpO2RbbV09ITAsbj1mdW5jdGlvbihlLHQpe2lmKGwoZSxtKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHUoZSxtLHQpLHR9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxtKT9lW21dOnt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsbSl9fWUuZXhwb3J0cz17c2V0Om4sZ2V0OmEsaGFzOmksZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKT9hKGUpOm4oZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI7aWYoIWModCl8fChyPWEodCkpLnR5cGUhPT1lKXRocm93IGcoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitlKyIgcmVxdWlyZWQiKTtyZXR1cm4gcn19fX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI1KSxpPW4uV2Vha01hcDtlLmV4cG9ydHM9YShpKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhpKSl9LChlLHQscik9Pnt2YXIgbj1yKDM5KSxhPXIoNDUpLGk9bigia2V5cyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaVtlXXx8KGlbZV09YShlKSl9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig0MyksYT1yKDYxKSxpPXIoOSksbz1yKDQ5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgcz1hKHQpLGM9by5mLHU9aS5mLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGY9c1tsXTtuKGUsZil8fHImJm4ocixmKXx8YyhlLGYsdSh0LGYpKX19fSwoZSx0LHIpPT57dmFyIG49cigyOCksYT1yKDE4KSxpPXIoNjIpLG89cig3MSkscz1yKDUxKSxjPWEoW10uY29uY2F0KTtlLmV4cG9ydHM9bigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mKHMoZSkpLHI9by5mO3JldHVybiByP2ModCxyKGUpKTp0fX0sKGUsdCxyKT0+e3ZhciBuPXIoNjMpLGE9cig3MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT1yKDQzKSxpPXIoMTYpLG89cig2NCkuaW5kZXhPZixzPXIoNTkpLGM9bihbXS5wdXNoKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWkoZSksdT0wLGw9W107Zm9yKHIgaW4gbikhYShzLHIpJiZhKG4scikmJmMobCxyKTtmb3IoO3QubGVuZ3RoPnU7KWEobixyPXRbdSsrXSkmJih+byhsLHIpfHxjKGwscikpO3JldHVybiBsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTYpLGE9cig2NSksaT1yKDY4KSxvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbyl7dmFyIHMsYz1uKHQpLHU9aShjKSxsPWEobyx1KTtpZihlJiZyIT1yKXtmb3IoO3U+bDspaWYoKHM9Y1tsKytdKSE9cylyZXR1cm4hMH1lbHNlIGZvcig7dT5sO2wrKylpZigoZXx8bCBpbiBjKSYmY1tsXT09PXIpcmV0dXJuIGV8fGx8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczpvKCEwKSxpbmRleE9mOm8oITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5tYXgsaT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpO3JldHVybiByPDA/YShyK3QsMCk6aShyLHQpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDpuKHQpfX0sZT0+e3ZhciB0PU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKGUpe3ZhciBuPStlO3JldHVybihuPjA/cjp0KShuKX19LChlLHQscik9Pnt2YXIgbj1yKDY5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS5sZW5ndGgpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/YShuKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxlPT57ZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LChlLHQpPT57dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LChlLHQscik9Pnt2YXIgbj1yKDExKSxhPXIoMjUpLGk9LyN8XC5wcm90b3R5cGVcLi8sbz1mdW5jdGlvbihlLHQpe3ZhciByPWNbcyhlKV07cmV0dXJuIHI9PWx8fHIhPXUmJihhKHQpP24odCk6ISF0KX0scz1vLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoaSwiLiIpLnRvTG93ZXJDYXNlKCl9LGM9by5kYXRhPXt9LHU9by5OQVRJVkU9Ik4iLGw9by5QT0xZRklMTD0iUCI7ZS5leHBvcnRzPW99LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoNzQpLGk9cig0OSkuZixvPW4oInVuc2NvcGFibGVzIikscz1BcnJheS5wcm90b3R5cGU7bnVsbD09c1tvXSYmaShzLG8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTphKG51bGwpfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3Nbb11bZV09ITB9fSwoZSx0LHIpPT57dmFyIG4sYT1yKDUxKSxpPXIoNzUpLG89cig3MCkscz1yKDU5KSxjPXIoNzcpLHU9cig0NyksbD1yKDU4KSxmPSJwcm90b3R5cGUiLGg9InNjcmlwdCIsZD1sKCJJRV9QUk9UTyIpLHA9ZnVuY3Rpb24oKXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIjwiK2grIj4iK2UrIjwvIitoKyI+In0sdj1mdW5jdGlvbihlKXtlLndyaXRlKGcoIiIpKSxlLmNsb3NlKCk7dmFyIHQ9ZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBlPW51bGwsdH0seT1mdW5jdGlvbigpe3RyeXtuPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoKGUpe312YXIgZSx0LHI7eT0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmbj92KG4pOih0PXUoImlmcmFtZSIpLHI9ImphdmEiK2grIjoiLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsYy5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcociksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShnKCJkb2N1bWVudC5GPU9iamVjdCIpKSxlLmNsb3NlKCksZS5GKTp2KG4pO2Zvcih2YXIgYT1vLmxlbmd0aDthLS07KWRlbGV0ZSB5W2ZdW29bYV1dO3JldHVybiB5KCl9O3NbZF09ITAsZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT1lPyhwW2ZdPWEoZSkscj1uZXcgcCxwW2ZdPW51bGwscltkXT1lKTpyPXkoKSx2b2lkIDA9PT10P3I6aS5mKHIsdCl9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDUwKSxpPXIoNDkpLG89cig1MSkscz1yKDE2KSxjPXIoNzYpO3QuZj1uJiYhYT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciByLG49cyh0KSxhPWModCksdT1hLmxlbmd0aCxsPTA7dT5sOylpLmYoZSxyPWFbbCsrXSxuW3JdKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDYzKSxhPXIoNzApO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxhKX19LChlLHQscik9Pnt2YXIgbj1yKDI4KTtlLmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShuW2VdLnByb3RvdHlwZVt0XSl9fSwoZSx0LHIpPT57cig4MCl9LChlLHQscik9Pnt2YXIgbj1yKDgxKSxhPXIoNjgpLGk9cig2Niksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzKSxyPWEodCksbj1pKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfSkpfSwoZSx0LHIpPT57dmFyIG4sYSxpLG89cig4Mikscz1yKDEwKSxjPXIoOCksdT1yKDI1KSxsPXIoMjQpLGY9cig0MyksaD1yKDgzKSxkPXIoMzYpLHA9cig0OCksZz1yKDUyKSx2PXIoNDkpLmYseT1yKDI5KSxtPXIoODUpLGI9cig4Nyksdz1yKDM4KSxrPXIoNDUpLFM9cig1NikseD1TLmVuZm9yY2UsTz1TLmdldCxBPWMuSW50OEFycmF5LEM9QSYmQS5wcm90b3R5cGUsRj1jLlVpbnQ4Q2xhbXBlZEFycmF5LFA9RiYmRi5wcm90b3R5cGUsVD1BJiZtKEEpLEk9QyYmbShDKSxFPU9iamVjdC5wcm90b3R5cGUsaj1jLlR5cGVFcnJvcixNPXcoInRvU3RyaW5nVGFnIiksXz1rKCJUWVBFRF9BUlJBWV9UQUciKSxMPSJUeXBlZEFycmF5Q29uc3RydWN0b3IiLFI9byYmISFiJiYiT3BlcmEiIT09aChjLm9wZXJhKSxOPSExLEQ9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxCPXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0sVT1mdW5jdGlvbihlKXt2YXIgdD1tKGUpO2lmKGwodCkpe3ZhciByPU8odCk7cmV0dXJuIHImJmYocixMKT9yW0xdOlUodCl9fSwkPWZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIGYoRCx0KXx8ZihCLHQpfTtmb3IobiBpbiBEKShpPShhPWNbbl0pJiZhLnByb3RvdHlwZSk/eChpKVtMXT1hOlI9ITE7Zm9yKG4gaW4gQikoaT0oYT1jW25dKSYmYS5wcm90b3R5cGUpJiYoeChpKVtMXT1hKTtpZigoIVJ8fCF1KFQpfHxUPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKFQ9ZnVuY3Rpb24oKXt0aHJvdyBqKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxSKSlmb3IobiBpbiBEKWNbbl0mJmIoY1tuXSxUKTtpZigoIVJ8fCFJfHxJPT09RSkmJihJPVQucHJvdG90eXBlLFIpKWZvcihuIGluIEQpY1tuXSYmYihjW25dLnByb3RvdHlwZSxJKTtpZihSJiZtKFApIT09SSYmYihQLEkpLHMmJiFmKEksTSkpZm9yKG4gaW4gTj0hMCx2KEksTSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcyk/dGhpc1tfXTp2b2lkIDB9fSksRCljW25dJiZwKGNbbl0sXyxuKTtlLmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6UixUWVBFRF9BUlJBWV9UQUc6TiYmXyxhVHlwZWRBcnJheTpmdW5jdGlvbihlKXtpZigkKGUpKXJldHVybiBlO3Rocm93IGooIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKGUpe2lmKHUoZSkmJighYnx8eShULGUpKSlyZXR1cm4gZTt0aHJvdyBqKGQoZSkrIiBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKHMpe2lmKHIpZm9yKHZhciBhIGluIEQpe3ZhciBpPWNbYV07aWYoaSYmZihpLnByb3RvdHlwZSxlKSl0cnl7ZGVsZXRlIGkucHJvdG90eXBlW2VdfWNhdGNoKHIpe3RyeXtpLnByb3RvdHlwZVtlXT10fWNhdGNoKGUpe319fUlbZV0mJiFyfHxnKEksZSxyP3Q6UiYmQ1tlXXx8dCxuKX19LGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7aWYocyl7aWYoYil7aWYocilmb3IobiBpbiBEKWlmKChhPWNbbl0pJiZmKGEsZSkpdHJ5e2RlbGV0ZSBhW2VdfWNhdGNoKGUpe31pZihUW2VdJiYhcilyZXR1cm47dHJ5e3JldHVybiBnKFQsZSxyP3Q6UiYmVFtlXXx8dCl9Y2F0Y2goZSl7fX1mb3IobiBpbiBEKSEoYT1jW25dKXx8YVtlXSYmIXJ8fGcoYSxlLHQpfX0sZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yOlUsaXNWaWV3OmZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIkRhdGFWaWV3Ij09PXR8fGYoRCx0KXx8ZihCLHQpfSxpc1R5cGVkQXJyYXk6JCxUeXBlZEFycmF5OlQsVHlwZWRBcnJheVByb3RvdHlwZTpJfX0sZT0+e2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYidW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDI1KSxpPXIoMTkpLG89cigzOCkoInRvU3RyaW5nVGFnIikscz1PYmplY3QsYz0iQXJndW1lbnRzIj09aShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1uP2k6ZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKHI9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1zKGUpLG8pKT9yOmM/aSh0KToiT2JqZWN0Ij09KG49aSh0KSkmJmEodC5jYWxsZWUpPyJBcmd1bWVudHMiOm59fSwoZSx0LHIpPT57dmFyIG49e307bltyKDM4KSgidG9TdHJpbmdUYWciKV09InoiLGUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcobil9LChlLHQscik9Pnt2YXIgbj1yKDQzKSxhPXIoMjUpLGk9cig0NCksbz1yKDU4KSxzPXIoODYpLGM9bygiSUVfUFJPVE8iKSx1PU9iamVjdCxsPXUucHJvdG90eXBlO2UuZXhwb3J0cz1zP3UuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtpZihuKHQsYykpcmV0dXJuIHRbY107dmFyIHI9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYShyKSYmdCBpbnN0YW5jZW9mIHI/ci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIHU/bDpudWxsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZSkhPT1lLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cig1MSksaT1yKDg4KTtlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxyPXt9O3RyeXsoZT1uKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0KSkocixbXSksdD1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBhKHIpLGkobiksdD9lKHIsbik6ci5fX3Byb3RvX189bixyfX0oKTp2b2lkIDApfSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1TdHJpbmcsaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXx8bihlKSlyZXR1cm4gZTt0aHJvdyBpKCJDYW4ndCBzZXQgIithKGUpKyIgYXMgYSBwcm90b3R5cGUiKX19LChlLHQscik9PntyKDkwKSxyKDk3KSxyKDk5KSxyKDEyMikscigxMjQpO3ZhciBuPXIoMTMzKTtlLmV4cG9ydHM9bi5zdHJ1Y3R1cmVkQ2xvbmV9LChlLHQscik9Pnt2YXIgbj1yKDE2KSxhPXIoNzMpLGk9cig5MSksbz1yKDU2KSxzPXIoNDkpLmYsYz1yKDkyKSx1PXIoOTYpLGw9cig0MCksZj1yKDEwKSxoPSJBcnJheSBJdGVyYXRvciIsZD1vLnNldCxwPW8uZ2V0dGVyRm9yKGgpO2UuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKGUsdCl7ZCh0aGlzLHt0eXBlOmgsdGFyZ2V0Om4oZSksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciBlPXAodGhpcyksdD1lLnRhcmdldCxyPWUua2luZCxuPWUuaW5kZXgrKztyZXR1cm4hdHx8bj49dC5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCx1KHZvaWQgMCwhMCkpOnUoImtleXMiPT1yP246InZhbHVlcyI9PXI/dFtuXTpbbix0W25dXSwhMSl9KSwidmFsdWVzIik7dmFyIGc9aS5Bcmd1bWVudHM9aS5BcnJheTtpZihhKCJrZXlzIiksYSgidmFsdWVzIiksYSgiZW50cmllcyIpLCFsJiZmJiYidmFsdWVzIiE9PWcubmFtZSl0cnl7cyhnLCJuYW1lIix7dmFsdWU6InZhbHVlcyJ9KX1jYXRjaChlKXt9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTIpLGk9cig0MCksbz1yKDU0KSxzPXIoMjUpLGM9cig5MyksdT1yKDg1KSxsPXIoODcpLGY9cig5NSksaD1yKDQ4KSxkPXIoNTIpLHA9cigzOCksZz1yKDkxKSx2PXIoOTQpLHk9by5QUk9QRVIsbT1vLkNPTkZJR1VSQUJMRSxiPXYuSXRlcmF0b3JQcm90b3R5cGUsdz12LkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsaz1wKCJpdGVyYXRvciIpLFM9ImtleXMiLHg9InZhbHVlcyIsTz0iZW50cmllcyIsQT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyxwLHYsQyl7YyhyLHQsbyk7dmFyIEYsUCxULEk9ZnVuY3Rpb24oZSl7aWYoZT09PXAmJkwpcmV0dXJuIEw7aWYoIXcmJmUgaW4gTSlyZXR1cm4gTVtlXTtzd2l0Y2goZSl7Y2FzZSBTOmNhc2UgeDpjYXNlIE86cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX19LEU9dCsiIEl0ZXJhdG9yIixqPSExLE09ZS5wcm90b3R5cGUsXz1NW2tdfHxNWyJAQGl0ZXJhdG9yIl18fHAmJk1bcF0sTD0hdyYmX3x8SShwKSxSPSJBcnJheSI9PXQmJk0uZW50cmllc3x8XztpZihSJiYoRj11KFIuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJkYubmV4dCYmKGl8fHUoRik9PT1ifHwobD9sKEYsYik6cyhGW2tdKXx8ZChGLGssQSkpLGYoRixFLCEwLCEwKSxpJiYoZ1tFXT1BKSkseSYmcD09eCYmXyYmXy5uYW1lIT09eCYmKCFpJiZtP2goTSwibmFtZSIseCk6KGo9ITAsTD1mdW5jdGlvbigpe3JldHVybiBhKF8sdGhpcyl9KSkscClpZihQPXt2YWx1ZXM6SSh4KSxrZXlzOnY/TDpJKFMpLGVudHJpZXM6SShPKX0sQylmb3IoVCBpbiBQKSh3fHxqfHwhKFQgaW4gTSkpJiZkKE0sVCxQW1RdKTtlbHNlIG4oe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDp3fHxqfSxQKTtyZXR1cm4gaSYmIUN8fE1ba109PT1MfHxkKE0sayxMLHtuYW1lOnB9KSxnW3RdPUwsUH19LChlLHQscik9Pnt2YXIgbj1yKDk0KS5JdGVyYXRvclByb3RvdHlwZSxhPXIoNzQpLGk9cigxNSksbz1yKDk1KSxzPXIoOTEpLGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHUpe3ZhciBsPXQrIiBJdGVyYXRvciI7cmV0dXJuIGUucHJvdG90eXBlPWEobix7bmV4dDppKCshdSxyKX0pLG8oZSxsLCExLCEwKSxzW2xdPWMsZX19LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDExKSxzPXIoMjUpLGM9cigyNCksdT1yKDc0KSxsPXIoODUpLGY9cig1MiksaD1yKDM4KSxkPXIoNDApLHA9aCgiaXRlcmF0b3IiKSxnPSExO1tdLmtleXMmJigibmV4dCJpbihpPVtdLmtleXMoKSk/KGE9bChsKGkpKSkhPT1PYmplY3QucHJvdG90eXBlJiYobj1hKTpnPSEwKSwhYyhuKXx8bygoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gbltwXS5jYWxsKGUpIT09ZX0pKT9uPXt9OmQmJihuPXUobikpLHMobltwXSl8fGYobixwLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6bixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmd9fSwoZSx0LHIpPT57dmFyIG49cig0OSkuZixhPXIoNDMpLGk9cigzOCkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhciYmKGU9ZS5wcm90b3R5cGUpLGUmJiFhKGUsaSkmJm4oZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDUyKSxpPXIoOTgpO258fGEoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGkse3Vuc2FmZTohMH0pfSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDgzKTtlLmV4cG9ydHM9bj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrYSh0aGlzKSsiXSJ9fSwoZSx0LHIpPT57cigxMDApfSwoZSx0LHIpPT57cigxMDEpKCJNYXAiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTkpKX0sKGUsdCxyKT0+e3ZhciBuPXIoNyksYT1yKDgpLGk9cigxOCksbz1yKDcyKSxzPXIoNTIpLGM9cigxMDIpLHU9cigxMDkpLGw9cigxMTYpLGY9cigyNSksaD1yKDIxKSxkPXIoMjQpLHA9cigxMSksZz1yKDExNyksdj1yKDk1KSx5PXIoMTE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBtPS0xIT09ZS5pbmRleE9mKCJNYXAiKSxiPS0xIT09ZS5pbmRleE9mKCJXZWFrIiksdz1tPyJzZXQiOiJhZGQiLGs9YVtlXSxTPWsmJmsucHJvdG90eXBlLHg9ayxPPXt9LEE9ZnVuY3Rpb24oZSl7dmFyIHQ9aShTW2VdKTtzKFMsZSwiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIShiJiYhZChlKSkmJnQodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4gYiYmIWQoZSk/dm9pZCAwOnQodGhpcywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKGImJiFkKGUpKSYmdCh0aGlzLDA9PT1lPzA6ZSl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQodGhpcywwPT09ZT8wOmUsciksdGhpc30pfTtpZihvKGUsIWYoayl8fCEoYnx8Uy5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IGspLmVudHJpZXMoKS5uZXh0KCl9KSkpKSl4PXIuZ2V0Q29uc3RydWN0b3IodCxlLG0sdyksYy5lbmFibGUoKTtlbHNlIGlmKG8oZSwhMCkpe3ZhciBDPW5ldyB4LEY9Q1t3XShiP3t9Oi0wLDEpIT1DLFA9cCgoZnVuY3Rpb24oKXtDLmhhcygxKX0pKSxUPWcoKGZ1bmN0aW9uKGUpe25ldyBrKGUpfSkpLEk9IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBrLHQ9NTt0LS07KWVbd10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSkpO1R8fCgoeD10KChmdW5jdGlvbihlLHQpe2woZSxTKTt2YXIgcj15KG5ldyBrLGUseCk7cmV0dXJuIGgodCl8fHUodCxyW3ddLHt0aGF0OnIsQVNfRU5UUklFUzptfSkscn0pKSkucHJvdG90eXBlPVMsUy5jb25zdHJ1Y3Rvcj14KSwoUHx8SSkmJihBKCJkZWxldGUiKSxBKCJoYXMiKSxtJiZBKCJnZXQiKSksKEl8fEYpJiZBKHcpLGImJlMuY2xlYXImJmRlbGV0ZSBTLmNsZWFyfXJldHVybiBPW2VdPXgsbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDp4IT1rfSxPKSx2KHgsZSksYnx8ci5zZXRTdHJvbmcoeCxlLG0pLHh9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTgpLGk9cig1OSksbz1yKDI0KSxzPXIoNDMpLGM9cig0OSkuZix1PXIoNjIpLGw9cigxMDMpLGY9cigxMDYpLGg9cig0NSksZD1yKDEwOCkscD0hMSxnPWgoIm1ldGEiKSx2PTAseT1mdW5jdGlvbihlKXtjKGUsZyx7dmFsdWU6e29iamVjdElEOiJPIit2Kyssd2Vha0RhdGE6e319fSl9LG09ZS5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXttLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgZT11LmYsdD1hKFtdLnNwbGljZSkscj17fTtyW2ddPTEsZShyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUociksYT0wLGk9bi5sZW5ndGg7YTxpO2ErKylpZihuW2FdPT09Zyl7dChuLGEsMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6bC5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIW8oZSkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6KCJzdHJpbmciPT10eXBlb2YgZT8iUyI6IlAiKStlO2lmKCFzKGUsZykpe2lmKCFmKGUpKXJldHVybiJGIjtpZighdClyZXR1cm4iRSI7eShlKX1yZXR1cm4gZVtnXS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24oZSx0KXtpZighcyhlLGcpKXtpZighZihlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTt5KGUpfXJldHVybiBlW2ddLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZCYmcCYmZihlKSYmIXMoZSxnKSYmeShlKSxlfX07aVtnXT0hMH0sKGUsdCxyKT0+e3ZhciBuPXIoMTkpLGE9cigxNiksaT1yKDYyKS5mLG89cigxMDQpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gcyYmIldpbmRvdyI9PW4oZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBpKGUpfWNhdGNoKGUpe3JldHVybiBvKHMpfX0oZSk6aShhKGUpKX19LChlLHQscik9Pnt2YXIgbj1yKDY1KSxhPXIoNjgpLGk9cigxMDUpLG89QXJyYXkscz1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYz1hKGUpLHU9bih0LGMpLGw9bih2b2lkIDA9PT1yP2M6cixjKSxmPW8ocyhsLXUsMCkpLGg9MDt1PGw7dSsrLGgrKylpKGYsaCxlW3VdKTtyZXR1cm4gZi5sZW5ndGg9aCxmfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjIpLGE9cig0OSksaT1yKDE1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPW4odCk7byBpbiBlP2EuZihlLG8saSgwLHIpKTplW29dPXJ9fSwoZSx0LHIpPT57dmFyIG49cigxMSksYT1yKDI0KSxpPXIoMTkpLG89cigxMDcpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxjPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTtlLmV4cG9ydHM9Y3x8bz9mdW5jdGlvbihlKXtyZXR1cm4hIWEoZSkmJighb3x8IkFycmF5QnVmZmVyIiE9aShlKSkmJighc3x8cyhlKSl9OnN9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciBlPW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiYSIse3ZhbHVlOjh9KX19KSl9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LChlLHQscik9Pnt2YXIgbj1yKDExMCksYT1yKDEyKSxpPXIoNTEpLG89cigzNikscz1yKDExMiksYz1yKDY4KSx1PXIoMjkpLGw9cigxMTMpLGY9cigxMTQpLGg9cigxMTUpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxnPXAucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHYseSxtLGIsdyxrLFMseD1yJiZyLnRoYXQsTz0hKCFyfHwhci5BU19FTlRSSUVTKSxBPSEoIXJ8fCFyLklTX1JFQ09SRCksQz0hKCFyfHwhci5JU19JVEVSQVRPUiksRj0hKCFyfHwhci5JTlRFUlJVUFRFRCksUD1uKHQseCksVD1mdW5jdGlvbihlKXtyZXR1cm4gdiYmaCh2LCJub3JtYWwiLGUpLG5ldyBwKCEwLGUpfSxJPWZ1bmN0aW9uKGUpe3JldHVybiBPPyhpKGUpLEY/UChlWzBdLGVbMV0sVCk6UChlWzBdLGVbMV0pKTpGP1AoZSxUKTpQKGUpfTtpZihBKXY9ZS5pdGVyYXRvcjtlbHNlIGlmKEMpdj1lO2Vsc2V7aWYoISh5PWYoZSkpKXRocm93IGQobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMoeSkpe2ZvcihtPTAsYj1jKGUpO2I+bTttKyspaWYoKHc9SShlW21dKSkmJnUoZyx3KSlyZXR1cm4gdztyZXR1cm4gbmV3IHAoITEpfXY9bChlLHkpfWZvcihrPUE/ZS5uZXh0OnYubmV4dDshKFM9YShrLHYpKS5kb25lOyl7dHJ5e3c9SShTLnZhbHVlKX1jYXRjaChlKXtoKHYsInRocm93IixlKX1pZigib2JqZWN0Ij09dHlwZW9mIHcmJncmJnUoZyx3KSlyZXR1cm4gd31yZXR1cm4gbmV3IHAoITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTExKSxhPXIoMzUpLGk9cigxMyksbz1uKG4uYmluZCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSksdm9pZCAwPT09dD9lOmk/byhlLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiRnVuY3Rpb24iPT09bihlKSlyZXR1cm4gYShlKX19LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoOTEpLGk9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihhLkFycmF5PT09ZXx8b1tpXT09PWUpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigzNSksaT1yKDUxKSxvPXIoMzYpLHM9cigxMTQpLGM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKGUpOnQ7aWYoYShyKSlyZXR1cm4gaShuKHIsZSkpO3Rocm93IGMobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoODMpLGE9cigzNCksaT1yKDIxKSxvPXIoOTEpLHM9cigzOCkoIml0ZXJhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiBhKGUscyl8fGEoZSwiQEBpdGVyYXRvciIpfHxvW24oZSldfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cig1MSksaT1yKDM0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLHM7YShlKTt0cnl7aWYoIShvPWkoZSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyByO3JldHVybiByfW89bihvLGUpfWNhdGNoKGUpe3M9ITAsbz1lfWlmKCJ0aHJvdyI9PT10KXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBhKG8pLHJ9fSwoZSx0LHIpPT57dmFyIG49cigyOSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobih0LGUpKXJldHVybiBlO3Rocm93IGEoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwoZSx0LHIpPT57dmFyIG49cigzOCkoIml0ZXJhdG9yIiksYT0hMTt0cnl7dmFyIGk9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXthPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFhKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgaT17fTtpW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSxlKGkpfWNhdGNoKGUpe31yZXR1cm4gcn19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMjQpLGk9cig4Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbyxzO3JldHVybiBpJiZuKG89dC5jb25zdHJ1Y3RvcikmJm8hPT1yJiZhKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmkoZSxzKSxlfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDkpLmYsYT1yKDc0KSxpPXIoMTIwKSxvPXIoMTEwKSxzPXIoMTE2KSxjPXIoMjEpLHU9cigxMDkpLGw9cig5MiksZj1yKDk2KSxoPXIoMTIxKSxkPXIoMTApLHA9cigxMDIpLmZhc3RLZXksZz1yKDU2KSx2PWcuc2V0LHk9Zy5nZXR0ZXJGb3I7ZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQscixsKXt2YXIgZj1lKChmdW5jdGlvbihlLG4pe3MoZSxoKSx2KGUse3R5cGU6dCxpbmRleDphKG51bGwpLGZpcnN0OnZvaWQgMCxsYXN0OnZvaWQgMCxzaXplOjB9KSxkfHwoZS5zaXplPTApLGMobil8fHUobixlW2xdLHt0aGF0OmUsQVNfRU5UUklFUzpyfSl9KSksaD1mLnByb3RvdHlwZSxnPXkodCksbT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpPWcoZSksbz1iKGUsdCk7cmV0dXJuIG8/by52YWx1ZT1yOihpLmxhc3Q9bz17aW5kZXg6YT1wKHQsITApLGtleTp0LHZhbHVlOnIscHJldmlvdXM6bj1pLmxhc3QsbmV4dDp2b2lkIDAscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9byksbiYmKG4ubmV4dD1vKSxkP2kuc2l6ZSsrOmUuc2l6ZSsrLCJGIiE9PWEmJihpLmluZGV4W2FdPW8pKSxlfSxiPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1nKGUpLGE9cCh0KTtpZigiRiIhPT1hKXJldHVybiBuLmluZGV4W2FdO2ZvcihyPW4uZmlyc3Q7cjtyPXIubmV4dClpZihyLmtleT09dClyZXR1cm4gcn07cmV0dXJuIGkoaCx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9Zyh0aGlzKSx0PWUuaW5kZXgscj1lLmZpcnN0O3I7KXIucmVtb3ZlZD0hMCxyLnByZXZpb3VzJiYoci5wcmV2aW91cz1yLnByZXZpb3VzLm5leHQ9dm9pZCAwKSxkZWxldGUgdFtyLmluZGV4XSxyPXIubmV4dDtlLmZpcnN0PWUubGFzdD12b2lkIDAsZD9lLnNpemU9MDp0aGlzLnNpemU9MH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1nKHQpLG49Yih0LGUpO2lmKG4pe3ZhciBhPW4ubmV4dCxpPW4ucHJldmlvdXM7ZGVsZXRlIHIuaW5kZXhbbi5pbmRleF0sbi5yZW1vdmVkPSEwLGkmJihpLm5leHQ9YSksYSYmKGEucHJldmlvdXM9aSksci5maXJzdD09biYmKHIuZmlyc3Q9YSksci5sYXN0PT1uJiYoci5sYXN0PWkpLGQ/ci5zaXplLS06dC5zaXplLS19cmV0dXJuISFufSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWcodGhpcyksbj1vKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3Q9dD90Lm5leHQ6ci5maXJzdDspZm9yKG4odC52YWx1ZSx0LmtleSx0aGlzKTt0JiZ0LnJlbW92ZWQ7KXQ9dC5wcmV2aW91c30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhYih0aGlzLGUpfX0pLGkoaCxyP3tnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9Yih0aGlzLGUpO3JldHVybiB0JiZ0LnZhbHVlfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbSh0aGlzLDA9PT1lPzA6ZSx0KX19OnthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG0odGhpcyxlPTA9PT1lPzA6ZSxlKX19KSxkJiZuKGgsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzKS5zaXplfX0pLGZ9LHNldFN0cm9uZzpmdW5jdGlvbihlLHQscil7dmFyIG49dCsiIEl0ZXJhdG9yIixhPXkodCksaT15KG4pO2woZSx0LChmdW5jdGlvbihlLHQpe3YodGhpcyx7dHlwZTpuLHRhcmdldDplLHN0YXRlOmEoZSksa2luZDp0LGxhc3Q6dm9pZCAwfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9aSh0aGlzKSx0PWUua2luZCxyPWUubGFzdDtyJiZyLnJlbW92ZWQ7KXI9ci5wcmV2aW91cztyZXR1cm4gZS50YXJnZXQmJihlLmxhc3Q9cj1yP3IubmV4dDplLnN0YXRlLmZpcnN0KT9mKCJrZXlzIj09dD9yLmtleToidmFsdWVzIj09dD9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSwhMSk6KGUudGFyZ2V0PXZvaWQgMCxmKHZvaWQgMCwhMCkpfSkscj8iZW50cmllcyI6InZhbHVlcyIsIXIsITApLGgodCl9fX0sKGUsdCxyKT0+e3ZhciBuPXIoNTIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhIGluIHQpbihlLGEsdFthXSxyKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDI4KSxhPXIoNDkpLGk9cigzOCksbz1yKDEwKSxzPWkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKSxyPWEuZjtvJiZ0JiYhdFtzXSYmcih0LHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LChlLHQscik9PntyKDEyMyl9LChlLHQscik9PntyKDEwMSkoIlNldCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxyKDExOSkpfSwoZSx0LHIpPT57dmFyIG4sYT1yKDQwKSxpPXIoNyksbz1yKDgpLHM9cigyOCksYz1yKDE4KSx1PXIoMTEpLGw9cig0NSksZj1yKDI1KSxoPXIoMTI1KSxkPXIoMjEpLHA9cigyNCksZz1yKDI3KSx2PXIoMTA5KSx5PXIoNTEpLG09cig4MyksYj1yKDQzKSx3PXIoMTA1KSxrPXIoNDgpLFM9cig2OCkseD1yKDEyNiksTz1yKDEyNyksQT1yKDEyOSksQz1yKDMyKSxGPXIoMTMwKSxQPXIoMTMxKSxUPXIoMTMyKSxJPW8uT2JqZWN0LEU9by5EYXRlLGo9by5FcnJvcixNPW8uRXZhbEVycm9yLF89by5SYW5nZUVycm9yLEw9by5SZWZlcmVuY2VFcnJvcixSPW8uU3ludGF4RXJyb3IsTj1vLlR5cGVFcnJvcixEPW8uVVJJRXJyb3IsQj1vLlBlcmZvcm1hbmNlTWFyayxVPW8uV2ViQXNzZW1ibHksJD1VJiZVLkNvbXBpbGVFcnJvcnx8aixYPVUmJlUuTGlua0Vycm9yfHxqLEg9VSYmVS5SdW50aW1lRXJyb3J8fGoscT1zKCJET01FeGNlcHRpb24iKSxHPXMoIlNldCIpLHo9cygiTWFwIiksVz16LnByb3RvdHlwZSxWPWMoVy5oYXMpLFk9YyhXLmdldCksSz1jKFcuc2V0KSxKPWMoRy5wcm90b3R5cGUuYWRkKSxaPXMoIk9iamVjdCIsImtleXMiKSxRPWMoW10ucHVzaCksZWU9YygoITApLnZhbHVlT2YpLHRlPWMoMS4udmFsdWVPZikscmU9YygiIi52YWx1ZU9mKSxuZT1jKEUucHJvdG90eXBlLmdldFRpbWUpLGFlPWwoInN0cnVjdHVyZWRDbG9uZSIpLGllPSJEYXRhQ2xvbmVFcnJvciIsb2U9IlRyYW5zZmVycmluZyIsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8uU2V0KFs3XSkscj1lKHQpLG49ZShJKDcpKTtyZXR1cm4gcj09dHx8IXIuaGFzKDcpfHwib2JqZWN0IiE9dHlwZW9mIG58fDchPW59KSkmJmV9LGNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IHQsbj1lKHthOnIsYjpyfSk7cmV0dXJuIShuJiZuLmE9PT1uLmImJm4uYSBpbnN0YW5jZW9mIHQmJm4uYS5zdGFjaz09PXIuc3RhY2spfSkpfSx1ZT1vLnN0cnVjdHVyZWRDbG9uZSxsZT1hfHwhY2UodWUsail8fCFjZSh1ZSxxKXx8KG49dWUsISF1KChmdW5jdGlvbigpe3ZhciBlPW4obmV3IG8uQWdncmVnYXRlRXJyb3IoWzFdLGFlLHtjYXVzZTozfSkpO3JldHVybiJBZ2dyZWdhdGVFcnJvciIhPWUubmFtZXx8MSE9ZS5lcnJvcnNbMF18fGUubWVzc2FnZSE9YWV8fDMhPWUuY2F1c2V9KSkpLGZlPSF1ZSYmc2UoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihhZSx7ZGV0YWlsOmV9KS5kZXRhaWx9KSksaGU9c2UodWUpfHxmZSxkZT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgcSgiVW5jbG9uZWFibGUgdHlwZTogIitlLGllKX0scGU9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgcSgodHx8IkNsb25pbmciKSsiIG9mICIrZSsiIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIHRoaXMgZW5naW5lIixpZSl9LGdlPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSYmZGUoIlN5bWJvbCIpLCFwKGUpKXJldHVybiBlO2lmKHQpe2lmKFYodCxlKSlyZXR1cm4gWSh0LGUpfWVsc2UgdD1uZXcgejt2YXIgcixuLGEsaSxjLHUsbCxoLGQsdix5PW0oZSkseD0hMTtzd2l0Y2goeSl7Y2FzZSJBcnJheSI6YT1bXSx4PSEwO2JyZWFrO2Nhc2UiT2JqZWN0IjphPXt9LHg9ITA7YnJlYWs7Y2FzZSJNYXAiOmE9bmV3IHoseD0hMDticmVhaztjYXNlIlNldCI6YT1uZXcgRyx4PSEwO2JyZWFrO2Nhc2UiUmVnRXhwIjphPW5ldyBSZWdFeHAoZS5zb3VyY2UsTyhlKSk7YnJlYWs7Y2FzZSJFcnJvciI6c3dpdGNoKG49ZS5uYW1lKXtjYXNlIkFnZ3JlZ2F0ZUVycm9yIjphPXMoIkFnZ3JlZ2F0ZUVycm9yIikoW10pO2JyZWFrO2Nhc2UiRXZhbEVycm9yIjphPU0oKTticmVhaztjYXNlIlJhbmdlRXJyb3IiOmE9XygpO2JyZWFrO2Nhc2UiUmVmZXJlbmNlRXJyb3IiOmE9TCgpO2JyZWFrO2Nhc2UiU3ludGF4RXJyb3IiOmE9UigpO2JyZWFrO2Nhc2UiVHlwZUVycm9yIjphPU4oKTticmVhaztjYXNlIlVSSUVycm9yIjphPUQoKTticmVhaztjYXNlIkNvbXBpbGVFcnJvciI6YT0kKCk7YnJlYWs7Y2FzZSJMaW5rRXJyb3IiOmE9WCgpO2JyZWFrO2Nhc2UiUnVudGltZUVycm9yIjphPUgoKTticmVhaztkZWZhdWx0OmE9aigpfXg9ITA7YnJlYWs7Y2FzZSJET01FeGNlcHRpb24iOmE9bmV3IHEoZS5tZXNzYWdlLGUubmFtZSkseD0hMDticmVhaztjYXNlIkRhdGFWaWV3IjpjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpjYXNlIkJpZ0ludDY0QXJyYXkiOmNhc2UiQmlnVWludDY0QXJyYXkiOnI9b1t5XSxwKHIpfHxwZSh5KSxhPW5ldyByKGdlKGUuYnVmZmVyLHQpLGUuYnl0ZU9mZnNldCwiRGF0YVZpZXciPT09eT9lLmJ5dGVMZW5ndGg6ZS5sZW5ndGgpO2JyZWFrO2Nhc2UiRE9NUXVhZCI6dHJ5e2E9bmV3IERPTVF1YWQoZ2UoZS5wMSx0KSxnZShlLnAyLHQpLGdlKGUucDMsdCksZ2UoZS5wNCx0KSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztjYXNlIkZpbGVMaXN0IjppZihpPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e2U9bmV3IG8uRGF0YVRyYW5zZmVyfWNhdGNoKHQpe3RyeXtlPW5ldyBvLkNsaXBib2FyZEV2ZW50KCIiKS5jbGlwYm9hcmREYXRhfWNhdGNoKGUpe319cmV0dXJuIGUmJmUuaXRlbXMmJmUuZmlsZXM/ZTpudWxsfSgpKXtmb3IoYz0wLHU9UyhlKTtjPHU7YysrKWkuaXRlbXMuYWRkKGdlKGVbY10sdCkpO2E9aS5maWxlc31lbHNlIGhlP2E9aGUoZSk6cGUoeSk7YnJlYWs7Y2FzZSJJbWFnZURhdGEiOnRyeXthPW5ldyBJbWFnZURhdGEoZ2UoZS5kYXRhLHQpLGUud2lkdGgsZS5oZWlnaHQse2NvbG9yU3BhY2U6ZS5jb2xvclNwYWNlfSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztkZWZhdWx0OmlmKGhlKWE9aGUoZSk7ZWxzZSBzd2l0Y2goeSl7Y2FzZSJCaWdJbnQiOmE9SShlLnZhbHVlT2YoKSk7YnJlYWs7Y2FzZSJCb29sZWFuIjphPUkoZWUoZSkpO2JyZWFrO2Nhc2UiTnVtYmVyIjphPUkodGUoZSkpO2JyZWFrO2Nhc2UiU3RyaW5nIjphPUkocmUoZSkpO2JyZWFrO2Nhc2UiRGF0ZSI6YT1uZXcgRShuZShlKSk7YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6KHI9by5EYXRhVmlldyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlfHxwZSh5KTt0cnl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UpYT1lLnNsaWNlKDApO2Vsc2UgZm9yKHU9ZS5ieXRlTGVuZ3RoLGE9bmV3IEFycmF5QnVmZmVyKHUpLGQ9bmV3IHIoZSksdj1uZXcgcihhKSxjPTA7Yzx1O2MrKyl2LnNldFVpbnQ4KGMsZC5nZXRVaW50OChjKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHEoIkFycmF5QnVmZmVyIGlzIGRldGFjaGVkIixpZSl9YnJlYWs7Y2FzZSJTaGFyZWRBcnJheUJ1ZmZlciI6YT1lO2JyZWFrO2Nhc2UiQmxvYiI6dHJ5e2E9ZS5zbGljZSgwLGUuc2l6ZSxlLnR5cGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NUG9pbnQiOmNhc2UiRE9NUG9pbnRSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVBvaW50P3IuZnJvbVBvaW50KGUpOm5ldyByKGUueCxlLnksZS56LGUudyl9Y2F0Y2goZSl7cGUoeSl9YnJlYWs7Y2FzZSJET01SZWN0IjpjYXNlIkRPTVJlY3RSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVJlY3Q/ci5mcm9tUmVjdChlKTpuZXcgcihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NTWF0cml4IjpjYXNlIkRPTU1hdHJpeFJlYWRPbmx5IjpyPW9beV07dHJ5e2E9ci5mcm9tTWF0cml4P3IuZnJvbU1hdHJpeChlKTpuZXcgcihlKX1jYXRjaChlKXtwZSh5KX1icmVhaztjYXNlIkF1ZGlvRGF0YSI6Y2FzZSJWaWRlb0ZyYW1lIjpmKGUuY2xvbmUpfHxwZSh5KTt0cnl7YT1lLmNsb25lKCl9Y2F0Y2goZSl7ZGUoeSl9YnJlYWs7Y2FzZSJGaWxlIjp0cnl7YT1uZXcgRmlsZShbZV0sZS5uYW1lLGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiQ3JvcFRhcmdldCI6Y2FzZSJDcnlwdG9LZXkiOmNhc2UiRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtRmlsZUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtSGFuZGxlIjpjYXNlIkdQVUNvbXBpbGF0aW9uSW5mbyI6Y2FzZSJHUFVDb21waWxhdGlvbk1lc3NhZ2UiOmNhc2UiSW1hZ2VCaXRtYXAiOmNhc2UiUlRDQ2VydGlmaWNhdGUiOmNhc2UiV2ViQXNzZW1ibHkuTW9kdWxlIjpwZSh5KTtkZWZhdWx0OmRlKHkpfX1pZihLKHQsZSxhKSx4KXN3aXRjaCh5KXtjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6Zm9yKGw9WihlKSxjPTAsdT1TKGwpO2M8dTtjKyspaD1sW2NdLHcoYSxoLGdlKGVbaF0sdCkpO2JyZWFrO2Nhc2UiTWFwIjplLmZvckVhY2goKGZ1bmN0aW9uKGUscil7SyhhLGdlKHIsdCksZ2UoZSx0KSl9KSk7YnJlYWs7Y2FzZSJTZXQiOmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7SihhLGdlKGUsdCkpfSkpO2JyZWFrO2Nhc2UiRXJyb3IiOmsoYSwibWVzc2FnZSIsZ2UoZS5tZXNzYWdlLHQpKSxiKGUsImNhdXNlIikmJmsoYSwiY2F1c2UiLGdlKGUuY2F1c2UsdCkpLCJBZ2dyZWdhdGVFcnJvciI9PW4mJihhLmVycm9ycz1nZShlLmVycm9ycyx0KSk7Y2FzZSJET01FeGNlcHRpb24iOkEmJmsoYSwic3RhY2siLGdlKGUuc3RhY2ssdCkpfXJldHVybiBhfSx2ZT11ZSYmIXUoKGZ1bmN0aW9uKCl7aWYoUCYmQz45Mnx8VCYmQz45NHx8RiYmQz45NylyZXR1cm4hMTt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoOCksdD11ZShlLHt0cmFuc2ZlcjpbZV19KTtyZXR1cm4gMCE9ZS5ieXRlTGVuZ3RofHw4IT10LmJ5dGVMZW5ndGh9KSk7aSh7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsc2hhbTohdmUsZm9yY2VkOmxlfSx7c3RydWN0dXJlZENsb25lOmZ1bmN0aW9uKGUpe3ZhciB0LHI9eChhcmd1bWVudHMubGVuZ3RoLDEpPjEmJiFkKGFyZ3VtZW50c1sxXSk/eShhcmd1bWVudHNbMV0pOnZvaWQgMCxuPXI/ci50cmFuc2Zlcjp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PW4mJmZ1bmN0aW9uKGUsdCl7aWYoIXAoZSkpdGhyb3cgTigiVHJhbnNmZXIgb3B0aW9uIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZSIpO3ZhciByPVtdO3YoZSwoZnVuY3Rpb24oZSl7UShyLHkoZSkpfSkpO3ZhciBuLGEsaSxzLGMsdSxsPTAsZD1TKHIpO2lmKHZlKWZvcihzPXVlKHIse3RyYW5zZmVyOnJ9KTtsPGQ7KUsodCxyW2xdLHNbbCsrXSk7ZWxzZSBmb3IoO2w8ZDspe2lmKG49cltsKytdLFYodCxuKSl0aHJvdyBuZXcgcSgiRHVwbGljYXRlIHRyYW5zZmVyYWJsZSIsaWUpO3N3aXRjaChhPW0obikpe2Nhc2UiSW1hZ2VCaXRtYXAiOmk9by5PZmZzY3JlZW5DYW52YXMsaChpKXx8cGUoYSxvZSk7dHJ5eyh1PW5ldyBpKG4ud2lkdGgsbi5oZWlnaHQpKS5nZXRDb250ZXh0KCJiaXRtYXByZW5kZXJlciIpLnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKG4pLGM9dS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6ZihuLmNsb25lKSYmZihuLmNsb3NlKXx8cGUoYSxvZSk7dHJ5e2M9bi5jbG9uZSgpLG4uY2xvc2UoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6Y2FzZSJNZWRpYVNvdXJjZUhhbmRsZSI6Y2FzZSJNZXNzYWdlUG9ydCI6Y2FzZSJPZmZzY3JlZW5DYW52YXMiOmNhc2UiUmVhZGFibGVTdHJlYW0iOmNhc2UiVHJhbnNmb3JtU3RyZWFtIjpjYXNlIldyaXRhYmxlU3RyZWFtIjpwZShhLG9lKX1pZih2b2lkIDA9PT1jKXRocm93IG5ldyBxKCJUaGlzIG9iamVjdCBjYW5ub3QgYmUgdHJhbnNmZXJyZWQ6ICIrYSxpZSk7Syh0LG4sYyl9fShuLHQ9bmV3IHopLGdlKGUsdCl9fSl9LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoMTEpLGk9cigyNSksbz1yKDgzKSxzPXIoMjgpLGM9cig1NSksdT1mdW5jdGlvbigpe30sbD1bXSxmPXMoIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxoPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLGQ9bihoLmV4ZWMpLHA9IWguZXhlYyh1KSxnPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3RyeXtyZXR1cm4gZih1LGwsZSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSx2PWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3N3aXRjaChvKGUpKXtjYXNlIkFzeW5jRnVuY3Rpb24iOmNhc2UiR2VuZXJhdG9yRnVuY3Rpb24iOmNhc2UiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiI6cmV0dXJuITF9dHJ5e3JldHVybiBwfHwhIWQoaCxjKGUpKX1jYXRjaChlKXtyZXR1cm4hMH19O3Yuc2hhbT0hMCxlLmV4cG9ydHM9IWZ8fGEoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGcoZy5jYWxsKXx8IWcoT2JqZWN0KXx8IWcoKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT92Omd9LGU9Pnt2YXIgdD1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7aWYoZTxyKXRocm93IHQoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIGV9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDQzKSxpPXIoMjkpLG89cigxMjgpLHM9UmVnRXhwLnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mbGFncztyZXR1cm4gdm9pZCAwIT09dHx8ImZsYWdzImluIHN8fGEoZSwiZmxhZ3MiKXx8IWkocyxlKT90Om4obyxlKX19LChlLHQscik9Pnt2YXIgbj1yKDUxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHQ9IiI7cmV0dXJuIGUuaGFzSW5kaWNlcyYmKHQrPSJkIiksZS5nbG9iYWwmJih0Kz0iZyIpLGUuaWdub3JlQ2FzZSYmKHQrPSJpIiksZS5tdWx0aWxpbmUmJih0Kz0ibSIpLGUuZG90QWxsJiYodCs9InMiKSxlLnVuaWNvZGUmJih0Kz0idSIpLGUudW5pY29kZVNldHMmJih0Kz0idiIpLGUuc3RpY2t5JiYodCs9InkiKSx0fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigxNSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPUVycm9yKCJhIik7cmV0dXJuISgic3RhY2siaW4gZSl8fChPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RhY2siLGEoMSw3KSksNyE9PWUuc3RhY2spfSkpfSwoZSx0LHIpPT57dmFyIG49cigxMzEpLGE9cigxMzIpO2UuZXhwb3J0cz0hbiYmIWEmJiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50fSxlPT57ZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgRGVubyYmRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb259LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoOCk7ZS5leHBvcnRzPSJwcm9jZXNzIj09bihhLnByb2Nlc3MpfSwoZSx0LHIpPT57dmFyIG49cig4KTtlLmV4cG9ydHM9bn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlZlNldENhY2hlPXQuUmVmU2V0PXQuUmVmPXQuTmFtZT10LkVPRj10LkRpY3Q9dC5DbWQ9dC5DSVJDVUxBUl9SRUY9dm9pZCAwLHQuY2xlYXJQcmltaXRpdmVDYWNoZXM9ZnVuY3Rpb24oKXtiLl9jbGVhckNhY2hlKCkseS5fY2xlYXJDYWNoZSgpLHguX2NsZWFyQ2FjaGUoKX0sdC5pc0NtZD1mdW5jdGlvbihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgYiYmKHZvaWQgMD09PXR8fGUuY21kPT09dCl9LHQuaXNEaWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBrJiYodm9pZCAwPT09dHx8QyhlLmdldCgiVHlwZSIpLHQpKX0sdC5pc05hbWU9Qyx0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGkobixvLHMsYyl7dmFyIHU9aChlW25dLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YShmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodixjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LGMsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gbChlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9U3ltYm9sKCJDSVJDVUxBUl9SRUYiKTt0LkNJUkNVTEFSX1JFRj1wO3ZhciBnPVN5bWJvbCgiRU9GIik7dC5FT0Y9Zzt2YXIgdix5PSh2PU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLm5hbWU9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZbdF18fCh2W3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe3Y9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5OYW1lPXk7dmFyIG0sYj0obT1PYmplY3QuY3JlYXRlKG51bGwpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jbWQ9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG1bdF18fChtW3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe209T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5DbWQ9Yjt2YXIgdz1mdW5jdGlvbigpe3JldHVybiB3fSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2YodGhpcyxlKSx0aGlzLl9tYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnhyZWY9dCx0aGlzLm9iaklkPW51bGwsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb249ITEsdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fPXd9dmFyIHQscjtyZXR1cm4gZChlLFt7a2V5OiJhc3NpZ25YcmVmIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnhyZWY9ZX19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApLmxlbmd0aH19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX21hcFtlXTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmdm9pZCAwPT09KG49dGhpcy5fbWFwW3RdKSYmdm9pZCAwIT09ciYmKG49dGhpcy5fbWFwW3JdKSxuIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmP3RoaXMueHJlZi5mZXRjaChuLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTpufX0se2tleToiZ2V0QXN5bmMiLHZhbHVlOih0PXUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHZvaWQgMD09PShhPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJnZvaWQgMD09PShhPXRoaXMuX21hcFtyXSkmJnZvaWQgMCE9PW4mJihhPXRoaXMuX21hcFtuXSksIShhIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMueHJlZi5mZXRjaEFzeW5jKGEsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKTtjYXNlIDQ6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkscj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKGUpe2woaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2woaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJnZvaWQgMD09PShuPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJihuPXRoaXMuX21hcFtyXSksbiBpbnN0YW5jZW9mIHgmJnRoaXMueHJlZiYmKG49dGhpcy54cmVmLmZldGNoKG4sdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKSxBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgYT0wLGk9KG49bi5zbGljZSgpKS5sZW5ndGg7YTxpO2ErKyluW2FdaW5zdGFuY2VvZiB4JiZ0aGlzLnhyZWYmJihuW2FdPXRoaXMueHJlZi5mZXRjaChuW2FdLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSk7cmV0dXJuIG59fSx7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJnZXRLZXlzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApfX0se2tleToiZ2V0UmF3VmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX21hcCl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9fV0sW3trZXk6ImVtcHR5IixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZShudWxsKTtyZXR1cm4gdC5zZXQ9ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfSwoMCxuLnNoYWRvdykodGhpcywiZW1wdHkiLHQpfX0se2tleToibWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLG49dC54cmVmLGE9dC5kaWN0QXJyYXkscz10Lm1lcmdlU3ViRGljdHMsYz12b2lkIDAhPT1zJiZzLHU9bmV3IGUobiksbD1uZXcgTWFwLGY9byhhKTt0cnl7Zm9yKGYucygpOyEocj1mLm4oKSkuZG9uZTspe3ZhciBoPXIudmFsdWU7aWYoaCBpbnN0YW5jZW9mIGUpZm9yKHZhciBkPTAscD1PYmplY3QuZW50cmllcyhoLl9tYXApO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1pKHBbZF0sMiksdj1nWzBdLHk9Z1sxXSxtPWwuZ2V0KHYpO2lmKHZvaWQgMD09PW0pbT1bXSxsLnNldCh2LG0pO2Vsc2UgaWYoIShjJiZ5IGluc3RhbmNlb2YgZSkpY29udGludWU7bS5wdXNoKHkpfX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9dmFyIGIsdz1vKGwpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIGs9aShiLnZhbHVlLDIpLFM9a1swXSx4PWtbMV07aWYoMSE9PXgubGVuZ3RoJiZ4WzBdaW5zdGFuY2VvZiBlKXt2YXIgTyxBPW5ldyBlKG4pLEM9byh4KTt0cnl7Zm9yKEMucygpOyEoTz1DLm4oKSkuZG9uZTspZm9yKHZhciBGPU8udmFsdWUsUD0wLFQ9T2JqZWN0LmVudHJpZXMoRi5fbWFwKTtQPFQubGVuZ3RoO1ArKyl7dmFyIEk9aShUW1BdLDIpLEU9SVswXSxqPUlbMV07dm9pZCAwPT09QS5fbWFwW0VdJiYoQS5fbWFwW0VdPWopfX1jYXRjaChlKXtDLmUoZSl9ZmluYWxseXtDLmYoKX1BLnNpemU+MCYmKHUuX21hcFtTXT1BKX1lbHNlIHUuX21hcFtTXT14WzBdfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX1yZXR1cm4gbC5jbGVhcigpLHUuc2l6ZT4wP3U6ZS5lbXB0eX19XSksZX0oKTt0LkRpY3Q9azt2YXIgUyx4PShTPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubnVtPXQsdGhpcy5nZW49cn1yZXR1cm4gZChlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZ2VuPyIiLmNvbmNhdCh0aGlzLm51bSwiUiIpOiIiLmNvbmNhdCh0aGlzLm51bSwiUiIpLmNvbmNhdCh0aGlzLmdlbil9fV0sW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj0wPT09cj8iIi5jb25jYXQodCwiUiIpOiIiLmNvbmNhdCh0LCJSIikuY29uY2F0KHIpO3JldHVybiBTW25dfHwoU1tuXT1uZXcgZSh0LHIpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe1M9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5SZWY9eDt2YXIgTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Zih0aGlzLHQpLHRoaXMuX3NldD1uZXcgU2V0KGUmJmUuX3NldCl9cmV0dXJuIGQodCxbe2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2V0LmhhcyhlLnRvU3RyaW5nKCkpfX0se2tleToicHV0Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zZXQuYWRkKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3NldC5kZWxldGUoZS50b1N0cmluZygpKX19LHtrZXk6U3ltYm9sLml0ZXJhdG9yLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldC52YWx1ZXMoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3NldC5jbGVhcigpfX1dKSx0fSgpO3QuUmVmU2V0PU87dmFyIEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KSx0aGlzLl9tYXA9bmV3IE1hcH1yZXR1cm4gZCh0LFt7a2V5OiJzaXplIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUudG9TdHJpbmcoKSl9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJwdXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdCl9fSx7a2V5OiJwdXRBbGlhcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0aGlzLmdldCh0KSl9fSx7a2V5OlN5bWJvbC5pdGVyYXRvcix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAudmFsdWVzKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuY2xlYXIoKX19XSksdH0oKTtmdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiB5JiYodm9pZCAwPT09dHx8ZS5uYW1lPT09dCl9dC5SZWZTZXRDYWNoZT1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj10LkRvY1N0YXRzPXZvaWQgMCx0LmNvbGxlY3RBY3Rpb25zPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLG89Uyh7ZGljdDp0LGtleToiQUEiLHN0b3BXaGVuRm91bmQ6ITF9KTtpZihvKWZvcih2YXIgYz1vLmxlbmd0aC0xO2M+PTA7Yy0tKXt2YXIgdT1vW2NdO2lmKHUgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBsLGY9cyh1LmdldEtleXMoKSk7dHJ5e2ZvcihmLnMoKTshKGw9Zi5uKCkpLmRvbmU7KXt2YXIgaD1sLnZhbHVlLGQ9cltoXTtpZihkKXt2YXIgcD11LmdldFJhdyhoKSxnPW5ldyBpLlJlZlNldCx2PVtdO08ocCxlLHYsZyksdi5sZW5ndGg+MCYmKG5bZF09dil9fX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX19fWlmKHQuaGFzKCJBIikpe3ZhciB5PVtdO08odC5nZXQoIkEiKSxlLHksbmV3IGkuUmVmU2V0KSx5Lmxlbmd0aD4wJiYobi5BY3Rpb249eSl9cmV0dXJuKDAsYS5vYmplY3RTaXplKShuKT4wP246bnVsbH0sdC5lbmNvZGVUb1htbFN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY29kZVBvaW50QXQobik7aWYoMzI8PWkmJmk8PTEyNil7dmFyIG89QVtpXTtvJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKG8pLHI9bisxKX1lbHNlIHI8biYmdC5wdXNoKGUuc3Vic3RyaW5nKHIsbikpLHQucHVzaCgiJiN4Ii5jb25jYXQoaS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwiOyIpKSxpPjU1Mjk1JiYoaTw1NzM0NHx8aT42NTUzMykmJm4rKyxyPW4rMX1yZXR1cm4gMD09PXQubGVuZ3RoP2U6KHI8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhyLGUubGVuZ3RoKSksdC5qb2luKCIiKSl9LHQuZXNjYXBlUERGTmFtZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY2hhckNvZGVBdChuKTsoaTwzM3x8aT4xMjZ8fDM1PT09aXx8NDA9PT1pfHw0MT09PWl8fDYwPT09aXx8NjI9PT1pfHw5MT09PWl8fDkzPT09aXx8MTIzPT09aXx8MTI1PT09aXx8NDc9PT1pfHwzNz09PWkpJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKCIjIi5jb25jYXQoaS50b1N0cmluZygxNikpKSxyPW4rMSl9cmV0dXJuIDA9PT10Lmxlbmd0aD9lOihyPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcocixlLmxlbmd0aCkpLHQuam9pbigiIikpfSx0LmVzY2FwZVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oWygpXFxcblxyXSkvZywoZnVuY3Rpb24oZSl7cmV0dXJuIlxuIj09PWU/IlxcbiI6IlxyIj09PWU/IlxcciI6IlxcIi5jb25jYXQoZSl9KSl9LHQuZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIHI9ZSgpO2U9bnVsbCx0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bis9Mil0W3Jbbl1dPXJbbisxXTtyPW51bGx9cmV0dXJuIHR9fSx0LmdldEluaGVyaXRhYmxlUHJvcGVydHk9Uyx0LmdldExvb2t1cFRhYmxlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSYmKHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxlKHQpLGU9bnVsbCksdH19LHQuZ2V0TmV3QW5ub3RhdGlvbnNNYXA9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHQscixuPW5ldyBNYXAsaT1zKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89KHI9dC52YWx1ZSwyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHIpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dCwwOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0ocil8fGMociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PW9bMF0sbD1vWzFdO2lmKHUuc3RhcnRzV2l0aChhLkFubm90YXRpb25FZGl0b3JQcmVmaXgpKXt2YXIgZj1uLmdldChsLnBhZ2VJbmRleCk7Znx8KGY9W10sbi5zZXQobC5wYWdlSW5kZXgsZikpLGYucHVzaChsKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBuLnNpemU+MD9uOm51bGx9LHQuZ2V0Um90YXRpb25NYXRyaXg9ZnVuY3Rpb24oZSx0LHIpe3N3aXRjaChlKXtjYXNlIDkwOnJldHVyblswLDEsLTEsMCx0LDBdO2Nhc2UgMTgwOnJldHVyblstMSwwLDAsLTEsdCxyXTtjYXNlIDI3MDpyZXR1cm5bMCwtMSwxLDAsMCxyXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3RhdGlvbiIpfX0sdC5pc0FzY2lpPWZ1bmN0aW9uKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX0sdC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDEzPT09ZXx8MTA9PT1lfSx0LmxvZzI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDpNYXRoLmNlaWwoTWF0aC5sb2cyKGUpKX0sdC5udW1iZXJUb1N0cmluZz1mdW5jdGlvbihlKXtpZihOdW1iZXIuaXNJbnRlZ2VyKGUpKXJldHVybiBlLnRvU3RyaW5nKCk7dmFyIHQ9TWF0aC5yb3VuZCgxMDAqZSk7cmV0dXJuIHQlMTAwPT0wPyh0LzEwMCkudG9TdHJpbmcoKTp0JTEwPT0wP2UudG9GaXhlZCgxKTplLnRvRml4ZWQoMil9LHQucGFyc2VYRkFQYXRoPWZ1bmN0aW9uKGUpe3ZhciB0PS8oLispXFsoXGQrKVxdJC87cmV0dXJuIGUuc3BsaXQoIi4iKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPWUubWF0Y2godCk7cmV0dXJuIHI/e25hbWU6clsxXSxwb3M6cGFyc2VJbnQoclsyXSwxMCl9OntuYW1lOmUscG9zOjB9fSkpfSx0LnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH0sdC5yZWFkVWludDE2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfSx0LnJlYWRVaW50MzI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9LHQucmVjb3ZlckpzVVJMPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBSZWdFeHAoIl5cXHMqKCIrWyJhcHAubGF1bmNoVVJMIiwid2luZG93Lm9wZW4iLCJ4ZmEuaG9zdC5nb3RvVVJMIl0uam9pbigifCIpLnNwbGl0KCIuIikuam9pbigiXFwuIikrIilcXCgoPzonfFwiKShbXidcIl0qKSg/Oid8XCIpKD86LFxccyooXFx3KylcXCl8XFwpKSIsImkiKS5leGVjKGUpO2lmKHQmJnRbMl0pe3ZhciByPXRbMl0sbj0hMTtyZXR1cm4idHJ1ZSI9PT10WzNdJiYiYXBwLmxhdW5jaFVSTCI9PT10WzFdJiYobj0hMCkse3VybDpyLG5ld1dpbmRvdzpufX1yZXR1cm4gbnVsbH0sdC5zdHJpbmdUb1VURjE2SGV4U3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKChhPj44JjI1NSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSwoMjU1JmEpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGMTZTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9W107YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSYmdC5wdXNoKCLDvsO/Iik7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYT4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmEpKX1yZXR1cm4gdC5qb2luKCIiKX0sdC50b1JvbWFuTnVtZXJhbHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTsoMCxhLmFzc2VydCkoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wLCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIik7Zm9yKHZhciByLG49W107ZT49MWUzOyllLT0xZTMsbi5wdXNoKCJNIik7cj1lLzEwMHwwLGUlPTEwMCxuLnB1c2goeFtyXSkscj1lLzEwfDAsZSU9MTAsbi5wdXNoKHhbMTArcl0pLG4ucHVzaCh4WzIwK2VdKTt2YXIgaT1uLmpvaW4oIiIpO3JldHVybiB0P2kudG9Mb3dlckNhc2UoKTppfSx0LnZhbGlkYXRlQ1NTRm9udD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgU2V0KFsiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIiwiMTAwMCIsIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIl0pLHI9ZS5mb250RmFtaWx5LG49ZS5mb250V2VpZ2h0LGk9ZS5pdGFsaWNBbmdsZTtpZigvXiIuKiIkLy50ZXN0KHIpKXtpZigvW15cXF0iLy50ZXN0KHIuc2xpY2UoMSxyLmxlbmd0aC0xKSkpcmV0dXJuKDAsYS53YXJuKSgnWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIHVuZXNjYXBlZCAiOiAnLmNvbmNhdChyLCIuIikpLCExfWVsc2UgaWYoL14nLionJC8udGVzdChyKSl7aWYoL1teXFxdJy8udGVzdChyLnNsaWNlKDEsci5sZW5ndGgtMSkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEZvbnRGYW1pbHkgY29udGFpbnMgc29tZSB1bmVzY2FwZWQgJzogIi5jb25jYXQociwiLiIpKSwhMX1lbHNle3ZhciBvLGM9cyhyLnNwbGl0KC9bIFx0XSsvKSk7dHJ5e2ZvcihjLnMoKTshKG89Yy5uKCkpLmRvbmU7KXt2YXIgdT1vLnZhbHVlO2lmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QodSl8fCEvXltcdy1cXF0rJC8udGVzdCh1KSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBGb250RmFtaWx5IGNvbnRhaW5zIHNvbWUgaW52YWxpZCA8Y3VzdG9tLWlkZW50PjogIi5jb25jYXQociwiLiIpKSwhMX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fXZhciBsPW4/bi50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhsKT9sOiI0MDAiO3ZhciBmPXBhcnNlRmxvYXQoaSk7cmV0dXJuIGUuaXRhbGljQW5nbGU9aXNOYU4oZil8fGY8LTkwfHxmPjkwPyIxNCI6aS50b1N0cmluZygpLCEwfTt2YXIgYT1yKDIpLGk9cigxMzQpLG89cigxMzYpO2Z1bmN0aW9uIHMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHUoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT91KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB1KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBkKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnAoZSx0KX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIHA9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxwKGUsdCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT12KGUpO2lmKHQpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdihlKX10LlBERl9WRVJTSU9OX1JFR0VYUD0vXlsxLTldXC5cZCQvO3ZhciB5PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gaCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJNaXNzaW5nIGRhdGEgWyIuY29uY2F0KGUsIiwgIikuY29uY2F0KG4sIikiKSwiTWlzc2luZ0RhdGFFeGNlcHRpb24iKSkuYmVnaW49ZSxhLmVuZD1uLGF9cmV0dXJuIGYocil9KGEuQmFzZUV4Y2VwdGlvbik7dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj15O3ZhciBtPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJQYXJzZXJFT0ZFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlBhcnNlckVPRkV4Y2VwdGlvbj1tO3ZhciBiPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmRW50cnlFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZFbnRyeUV4Y2VwdGlvbj1iO3ZhciB3PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmUGFyc2VFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZQYXJzZUV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtoKHRoaXMsZSksdGhpcy5faGFuZGxlcj10LHRoaXMuX3N0cmVhbVR5cGVzPW5ldyBTZXQsdGhpcy5fZm9udFR5cGVzPW5ldyBTZXR9cmV0dXJuIGYoZSxbe2tleToiX3NlbmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXModGhpcy5fc3RyZWFtVHlwZXMpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl0W2UudmFsdWVdPSEwfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBhLGk9cyh0aGlzLl9mb250VHlwZXMpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOylyW2EudmFsdWVdPSEwfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMuX2hhbmRsZXIuc2VuZCgiRG9jU3RhdHMiLHtzdHJlYW1UeXBlczp0LGZvbnRUeXBlczpyfSl9fSx7a2V5OiJhZGRTdHJlYW1UeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdHJlYW1UeXBlcy5oYXMoZSl8fCh0aGlzLl9zdHJlYW1UeXBlcy5hZGQoZSksdGhpcy5fc2VuZCgpKX19LHtrZXk6ImFkZEZvbnRUeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9mb250VHlwZXMuaGFzKGUpfHwodGhpcy5fZm9udFR5cGVzLmFkZChlKSx0aGlzLl9zZW5kKCkpfX1dKSxlfSgpO2Z1bmN0aW9uIFMoZSl7Zm9yKHZhciB0LHI9ZS5kaWN0LG49ZS5rZXksYT1lLmdldEFycmF5LG89dm9pZCAwIT09YSYmYSxzPWUuc3RvcFdoZW5Gb3VuZCxjPXZvaWQgMD09PXN8fHMsdT1uZXcgaS5SZWZTZXQ7ciBpbnN0YW5jZW9mIGkuRGljdCYmKCFyLm9iaklkfHwhdS5oYXMoci5vYmpJZCkpOyl7ci5vYmpJZCYmdS5wdXQoci5vYmpJZCk7dmFyIGw9bz9yLmdldEFycmF5KG4pOnIuZ2V0KG4pO2lmKHZvaWQgMCE9PWwpe2lmKGMpcmV0dXJuIGw7dHx8KHQ9W10pLHQucHVzaChsKX1yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH10LkRvY1N0YXRzPWs7dmFyIHg9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXTtmdW5jdGlvbiBPKGUsdCxyLG4pe2lmKGUpe3ZhciBjPW51bGw7aWYoZSBpbnN0YW5jZW9mIGkuUmVmKXtpZihuLmhhcyhlKSlyZXR1cm47Yz1lLG4ucHV0KGMpLGU9dC5mZXRjaChlKX1pZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdSxsPXMoZSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KU8odS52YWx1ZSx0LHIsbil9Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9fWVsc2UgaWYoZSBpbnN0YW5jZW9mIGkuRGljdCl7aWYoKDAsaS5pc05hbWUpKGUuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSl7dmFyIGYsaD1lLmdldCgiSlMiKTtoIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2Y9aC5nZXRTdHJpbmcoKToic3RyaW5nIj09dHlwZW9mIGgmJihmPWgpLChmPWYmJigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYpLnJlcGxhY2UoL1x1MDAwMC9nLCIiKSkmJnIucHVzaChmKX1PKGUuZ2V0UmF3KCJOZXh0IiksdCxyLG4pfWMmJm4ucmVtb3ZlKGMpfX12YXIgQT17NjA6IiZsdDsiLDYyOiImZ3Q7IiwzODoiJmFtcDsiLDM0OiImcXVvdDsiLDM5OiImYXBvczsifX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJhc2VTdHJlYW09dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RyZWFtLiIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBsZW5ndGhgIGFjY2Vzc2VkIil9fSx7a2V5OiJpc0VtcHR5IixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBpc0VtcHR5YCBhY2Nlc3NlZCIpfX0se2tleToiaXNEYXRhTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNEYXRhTG9hZGVkIiwhMCl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKX19LHtrZXk6InBlZWtCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xIT09ZSYmdGhpcy5wb3MtLSxlfX0se2tleToicGVla0J5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEJ5dGVzKGUpO3JldHVybiB0aGlzLnBvcy09dC5sZW5ndGgsdH19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fX0se2tleToiZ2V0SW50MzIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX19LHtrZXk6ImdldEJ5dGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZ2V0Qnl0ZXMoZSkpfX0se2tleToic2tpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wb3MrPWV8fDF9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9fSx7a2V5OiJtb3ZlU3RhcnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX19LHtrZXk6Im1ha2VTdWJTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkIil9fSx7a2V5OiJnZXRCYXNlU3RyZWFtcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSkmJmkodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkJhc2VTdHJlYW09b30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5ldHdvcmtQZGZNYW5hZ2VyPXQuTG9jYWxQZGZNYW5hZ2VyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzgpLGk9cigxMzUpLG89cigxNDApLHM9cigxMzkpO2Z1bmN0aW9uIGMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWgoZSk7aWYodCl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmKGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBmKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGQoZSl9ZnVuY3Rpb24gcCgpe3A9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09ZChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZyhlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7ZyhpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7ZyhpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1kKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYihlLHQscil7cmV0dXJuIHQmJm0oZS5wcm90b3R5cGUsdCksciYmbShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdyhlKXtpZihlKXt2YXIgdD0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUpO2lmKHQpcmV0dXJuIHQuaHJlZjsoMCxuLndhcm4pKCdJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gbnVsbH12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt5KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4iKX12YXIgdDtyZXR1cm4gYihlLFt7a2V5OiJkb2NJZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY0lkfX0se2tleToicGFzc3dvcmQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXNzd29yZH19LHtrZXk6ImRvY0Jhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZztyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZG9jQmFzZVVybCIsZS5iYXNlVXJsfHx0aGlzLl9kb2NCYXNlVXJsKX19LHtrZXk6ImVuc3VyZURvYyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudCxlLHQpfX0se2tleToiZW5zdXJlWFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC54cmVmLGUsdCl9fSx7a2V5OiJlbnN1cmVDYXRhbG9nIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LmNhdGFsb2csZSx0KX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UoZSl9fSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZm9udEZhbGxiYWNrKGUsdCl9fSx7a2V5OiJsb2FkWGZhRm9udHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUZvbnRzKGUsdCl9fSx7a2V5OiJsb2FkWGZhSW1hZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmxvYWRYZmFJbWFnZXMoKX19LHtrZXk6InNlcmlhbGl6ZVhmYURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LnNlcmlhbGl6ZVhmYURhdGEoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cChlKX19LHtrZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDooMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfX0se2tleToidXBkYXRlUGFzc3dvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3Bhc3N3b3JkPWV9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fV0pLGV9KCksUz1mdW5jdGlvbihlKXtjKG4sZSk7dmFyIHQscj1sKG4pO2Z1bmN0aW9uIG4oZSx0LGEsaSxjLHUsbCl7dmFyIGg7eSh0aGlzLG4pLChoPXIuY2FsbCh0aGlzKSkuX2RvY0lkPWUsaC5fcGFzc3dvcmQ9YSxoLl9kb2NCYXNlVXJsPXcobCksaC5tc2dIYW5kbGVyPWksaC5ldmFsdWF0b3JPcHRpb25zPWMsaC5lbmFibGVYZmE9dTt2YXIgZD1uZXcgcy5TdHJlYW0odCk7cmV0dXJuIGgucGRmRG9jdW1lbnQ9bmV3IG8uUERGRG9jdW1lbnQoZihoKSxkKSxoLl9sb2FkZWRTdHJlYW1Qcm9taXNlPVByb21pc2UucmVzb2x2ZShkKSxofXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJyZXF1ZXN0UmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX1dKSxufShrKTt0LkxvY2FsUGRmTWFuYWdlcj1TO3ZhciB4PWZ1bmN0aW9uKGUpe2MobixlKTt2YXIgdCxyPWwobik7ZnVuY3Rpb24gbihlLHQsaSxzLGMsdSl7dmFyIGw7cmV0dXJuIHkodGhpcyxuKSwobD1yLmNhbGwodGhpcykpLl9kb2NJZD1lLGwuX3Bhc3N3b3JkPWkucGFzc3dvcmQsbC5fZG9jQmFzZVVybD13KHUpLGwubXNnSGFuZGxlcj1pLm1zZ0hhbmRsZXIsbC5ldmFsdWF0b3JPcHRpb25zPXMsbC5lbmFibGVYZmE9YyxsLnN0cmVhbU1hbmFnZXI9bmV3IGEuQ2h1bmtlZFN0cmVhbU1hbmFnZXIodCx7bXNnSGFuZGxlcjppLm1zZ0hhbmRsZXIsbGVuZ3RoOmkubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmkucmFuZ2VDaHVua1NpemV9KSxsLnBkZkRvY3VtZW50PW5ldyBvLlBERkRvY3VtZW50KGYobCksbC5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKSxsfXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihlLnByZXY9MCwiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDc6aWYoZS5wcmV2PTcsZS50MD1lLmNhdGNoKDApLGUudDAgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXtlLm5leHQ9MTE7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDExOnJldHVybiBlLm5leHQ9MTMsdGhpcy5yZXF1ZXN0UmFuZ2UoZS50MC5iZWdpbixlLnQwLmVuZCk7Y2FzZSAxMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5lbnN1cmUodCxyLG4pKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw3XV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcyhlKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtjaHVuazplfSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChlKX19XSksbn0oayk7dC5OZXR3b3JrUGRmTWFuYWdlcj14fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DaHVua2VkU3RyZWFtTWFuYWdlcj10LkNodW5rZWRTdHJlYW09dm9pZCAwO3ZhciBhPXIoMiksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0LHIpe3JldHVybiB0JiZ1KGUucHJvdG90eXBlLHQpLHImJnUoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfXZhciBkPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9KG8sZSk7dmFyIHQscixhPSh0PW8scj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPWgodCk7aWYocil7dmFyIGk9aCh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gbyhlLHQscil7dmFyIG47cmV0dXJuIGModGhpcyxvKSwobj1hLmNhbGwodGhpcyxuZXcgVWludDhBcnJheShlKSwwLGUsbnVsbCkpLmNodW5rU2l6ZT10LG4uX2xvYWRlZENodW5rcz1uZXcgU2V0LG4ubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpLG4ubWFuYWdlcj1yLG4ucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTAsbi5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMSxufXJldHVybiBsKG8sW3trZXk6ImdldE1pc3NpbmdDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMubnVtQ2h1bmtzO3Q8cjsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfX0se2tleToibnVtQ2h1bmtzTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9fSx7a2V5OiJpc0RhdGFMb2FkZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfX0se2tleToib25SZWNlaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNodW5rU2l6ZTtpZihlJXIhPTApdGhyb3cgbmV3IEVycm9yKCJCYWQgYmVnaW4gb2Zmc2V0OiAiLmNvbmNhdChlKSk7dmFyIG49ZSt0LmJ5dGVMZW5ndGg7aWYobiVyIT0wJiZuIT09dGhpcy5ieXRlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCYWQgZW5kIG9mZnNldDogIi5jb25jYXQobikpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KHQpLGUpO2Zvcih2YXIgYT1NYXRoLmZsb29yKGUvciksaT1NYXRoLmZsb29yKChuLTEpL3IpKzEsbz1hO288aTsrK28pdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChvKX19LHtrZXk6Im9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgscj1NYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KGUpLHQpLHQrPWUuYnl0ZUxlbmd0aCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD10O2Zvcih2YXIgbj10Pj10aGlzLmVuZD90aGlzLm51bUNodW5rczpNYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpLGE9cjthPG47KythKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoYSl9fSx7a2V5OiJlbnN1cmVCeXRlIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGU8dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpKXt2YXIgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX19fSx7a2V5OiJlbnN1cmVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGU+PXR8fHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSl7dmFyIHI9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZighKHI+dGhpcy5udW1DaHVua3MpKWZvcih2YXIgbj1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKSxhPXI7YTxuOysrYSlpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhhKSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLHQpfX19LHtrZXk6Im5leHRFbXB0eUNodW5rIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5udW1DaHVua3Mscj0wO3I8dDsrK3Ipe3ZhciBuPShlK3IpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMobikpcmV0dXJuIG59cmV0dXJuIG51bGx9fSx7a2V5OiJoYXNDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zO3JldHVybiBlPj10aGlzLmVuZD8tMTooZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKSx0aGlzLmJ5dGVzW3RoaXMucG9zKytdKX19LHtrZXk6ImdldEJ5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ5dGVzLHI9dGhpcy5wb3Msbj10aGlzLmVuZDtpZighZSlyZXR1cm4gbj50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLG4pLHQuc3ViYXJyYXkocixuKTt2YXIgYT1yK2U7cmV0dXJuIGE+biYmKGE9biksYT50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLGEpLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsdCksdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtmdW5jdGlvbiBuKCl7fXQ/ZSt0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsZSt0KTplPj10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVCeXRlKGUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGhpcyksbi5wcm90b3R5cGUuZ2V0TWlzc2luZ0NodW5rcz1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNodW5rU2l6ZSx0PU1hdGguZmxvb3IodGhpcy5zdGFydC9lKSxyPU1hdGguZmxvb3IoKHRoaXMuZW5kLTEpL2UpKzEsbj1bXSxhPXQ7YTxyOysrYSl0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGEpfHxuLnB1c2goYSk7cmV0dXJuIG59LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwiaXNEYXRhTG9hZGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkPT09dGhpcy5udW1DaHVua3N8fDA9PT10aGlzLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGh9LGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBhPW5ldyBuO3JldHVybiBhLnBvcz1hLnN0YXJ0PWUsYS5lbmQ9ZSt0fHx0aGlzLmVuZCxhLmRpY3Q9cixhfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXNdfX1dKSxvfShyKDEzOSkuU3RyZWFtKTt0LkNodW5rZWRTdHJlYW09ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtjKHRoaXMsZSksdGhpcy5sZW5ndGg9ci5sZW5ndGgsdGhpcy5jaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLnN0cmVhbT1uZXcgZCh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKSx0aGlzLnBkZk5ldHdvcmtTdHJlYW09dCx0aGlzLmRpc2FibGVBdXRvRmV0Y2g9ci5kaXNhYmxlQXV0b0ZldGNoLHRoaXMubXNnSGFuZGxlcj1yLm1zZ0hhbmRsZXIsdGhpcy5jdXJyUmVxdWVzdElkPTAsdGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXAsdGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXAsdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wLHRoaXMuYWJvcnRlZD0hMSx0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9cmV0dXJuIGwoZSxbe2tleToic2VuZFJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPXRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihlLHQpO24uaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fChuLm9uUHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcykpO3ZhciBpPVtdLG89MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24gcyhjKXt0cnl7aWYoIWMuZG9uZSl7dmFyIHU9Yy52YWx1ZTtyZXR1cm4gaS5wdXNoKHUpLG8rPSgwLGEuYXJyYXlCeXRlTGVuZ3RoKSh1KSxuLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZyLm9uUHJvZ3Jlc3Moe2xvYWRlZDpvfSksdm9pZCBuLnJlYWQoKS50aGVuKHMsdCl9dmFyIGw9KDAsYS5hcnJheXNUb0J5dGVzKShpKTtpPW51bGwsZShsKX1jYXRjaChlKXt0KGUpfX0pLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3IuYWJvcnRlZHx8ci5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pKX19LHtrZXk6InJlcXVlc3RBbGxDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSl7dmFyIGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3RoaXMuX3JlcXVlc3RDaHVua3MoZSl9cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6Il9yZXF1ZXN0Q2h1bmtzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5jdXJyUmVxdWVzdElkKyssbj1uZXcgU2V0O3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQocixuKTt2YXIgaSxzPW8oZSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO3RoaXMuc3RyZWFtLmhhc0NodW5rKGMpfHxuLmFkZChjKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYoMD09PW4uc2l6ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIHU9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5zZXQocix1KTt2YXIgbCxmPVtdLGg9byhuKTt0cnl7Zm9yKGgucygpOyEobD1oLm4oKSkuZG9uZTspe3ZhciBkPWwudmFsdWUscD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGQpO3B8fChwPVtdLHRoaXMuX3JlcXVlc3RzQnlDaHVuay5zZXQoZCxwKSxmLnB1c2goZCkpLHAucHVzaChyKX19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9aWYoZi5sZW5ndGg+MCl7dmFyIGcsdj1vKHRoaXMuZ3JvdXBDaHVua3MoZikpO3RyeXtmb3Iodi5zKCk7IShnPXYubigpKS5kb25lOyl7dmFyIHk9Zy52YWx1ZSxtPXkuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxiPU1hdGgubWluKHkuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QobSxiKS5jYXRjaCh1LnJlamVjdCl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfX1yZXR1cm4gdS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5hYm9ydGVkKXRocm93IGV9KSl9fSx7a2V5OiJnZXRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyZWFtfX0se2tleToicmVxdWVzdFJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXMuZ2V0QmVnaW5DaHVuayhlKSxuPXRoaXMuZ2V0RW5kQ2h1bmsodCksYT1bXSxpPXI7aTxuOysraSlhLnB1c2goaSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoYSl9fSx7a2V5OiJyZXF1ZXN0UmFuZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1vKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWZvcih2YXIgbj1lLnZhbHVlLGE9dGhpcy5nZXRCZWdpbkNodW5rKG4uYmVnaW4pLGk9dGhpcy5nZXRFbmRDaHVuayhuLmVuZCkscz1hO3M8aTsrK3MpdC5pbmNsdWRlcyhzKXx8dC5wdXNoKHMpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiB0LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSx0aGlzLl9yZXF1ZXN0Q2h1bmtzKHQpfX0se2tleToiZ3JvdXBDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPS0xLG49LTEsYT0wLGk9ZS5sZW5ndGg7YTxpOysrYSl7dmFyIG89ZVthXTtyPDAmJihyPW8pLG4+PTAmJm4rMSE9PW8mJih0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpuKzF9KSxyPW8pLGErMT09PWUubGVuZ3RoJiZ0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpvKzF9KSxuPW99cmV0dXJuIHR9fSx7a2V5OiJvblByb2dyZXNzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplK2UubG9hZGVkLHRvdGFsOnRoaXMubGVuZ3RofSl9fSx7a2V5OiJvblJlY2VpdmVEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNodW5rLHI9dm9pZCAwPT09ZS5iZWdpbixuPXI/dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg6ZS5iZWdpbixhPW4rdC5ieXRlTGVuZ3RoLGk9TWF0aC5mbG9vcihuL3RoaXMuY2h1bmtTaXplKSxzPWE8dGhpcy5sZW5ndGg/TWF0aC5mbG9vcihhL3RoaXMuY2h1bmtTaXplKTpNYXRoLmNlaWwoYS90aGlzLmNodW5rU2l6ZSk7cj8odGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKHQpLHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPWEpOnRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEobix0KSx0aGlzLnN0cmVhbS5pc0RhdGFMb2FkZWQmJnRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7Zm9yKHZhciBjPVtdLHU9aTt1PHM7Kyt1KXt2YXIgbD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KHUpO2lmKGwpe3RoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUodSk7dmFyIGYsaD1vKGwpO3RyeXtmb3IoaC5zKCk7IShmPWgubigpKS5kb25lOyl7dmFyIGQ9Zi52YWx1ZSxwPXRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQoZCk7cC5oYXModSkmJnAuZGVsZXRlKHUpLHAuc2l6ZT4wfHxjLnB1c2goZCl9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX19aWYoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCYmMD09PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5zaXplKXt2YXIgZztpZigxPT09dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKXt2YXIgdj10aGlzLnN0cmVhbS5udW1DaHVua3MtMTt0aGlzLnN0cmVhbS5oYXNDaHVuayh2KXx8KGc9dil9ZWxzZSBnPXRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKHMpO051bWJlci5pc0ludGVnZXIoZykmJnRoaXMuX3JlcXVlc3RDaHVua3MoW2ddKX1mb3IodmFyIHk9MCxtPWM7eTxtLmxlbmd0aDt5Kyspe3ZhciBiPW1beV0sdz10aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQoYik7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKGIpLHcucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX19LHtrZXk6Im9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfX0se2tleToiZ2V0QmVnaW5DaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9fSx7a2V5OiJnZXRFbmRDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5hYm9ydGVkPSEwLHRoaXMucGRmTmV0d29ya1N0cmVhbSYmdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKGUpO3ZhciB0LHI9byh0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXQudmFsdWUucmVqZWN0KGUpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19XSksZX0oKTt0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPXB9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cmluZ1N0cmVhbT10LlN0cmVhbT10Lk51bGxTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUsbixhLGkpe3ZhciBzO3JldHVybiBvKHRoaXMsciksKHM9dC5jYWxsKHRoaXMpKS5ieXRlcz1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpLHMuc3RhcnQ9bnx8MCxzLnBvcz1zLnN0YXJ0LHMuZW5kPW4rYXx8cy5ieXRlcy5sZW5ndGgscy5kaWN0PWksc31yZXR1cm4gYyhyLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fX0se2tleToiaXNFbXB0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH19LHtrZXk6ImdldEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnl0ZXMscj10aGlzLnBvcyxuPXRoaXMuZW5kO2lmKCFlKXJldHVybiB0LnN1YmFycmF5KHIsbik7dmFyIGE9citlO3JldHVybiBhPm4mJihhPW4pLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0aGlzLmJ5dGVzLnN1YmFycmF5KGUsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0YXJ0fX0se2tleToibW92ZVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhcnQ9dGhpcy5wb3N9fSx7a2V5OiJtYWtlU3ViU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBuZXcgcih0aGlzLmJ5dGVzLmJ1ZmZlcixlLHQsbil9fV0pLHJ9KGEuQmFzZVN0cmVhbSk7dC5TdHJlYW09ZDt2YXIgcD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsKDAsaS5zdHJpbmdUb0J5dGVzKShlKSl9cmV0dXJuIGMocil9KGQpO3QuU3RyaW5nU3RyZWFtPXA7dmFyIGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcigpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoMCkpfXJldHVybiBjKHIpfShkKTt0Lk51bGxTdHJlYW09Z30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhZ2U9dC5QREZEb2N1bWVudD12b2lkIDA7dmFyIG49cigxNDEpLGE9cigyKSxpPXIoMTM1KSxvPXIoMTM0KSxzPXIoMTgwKSxjPXIoMTM2KSx1PXIoMTk2KSxsPXIoMTk4KSxmPXIoMjAwKSxoPXIoMjI5KSxkPXIoMTQ2KSxwPXIoMTM5KSxnPXIoMjA0KSx2PXIoMTkxKSx5PXIoMTQ0KSxtPXIoMTQ4KSxiPXIoMjAzKSx3PXIoMTk0KSxrPXIoMjA1KSxTPXIoMjMwKTtmdW5jdGlvbiB4KGUpe3JldHVybiB4PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx4KGUpfWZ1bmN0aW9uIE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8UChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gQSgpe0E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09eChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gVChlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fFAoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9UChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gUChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gVChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP1QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIFQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBJKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtJKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtJKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaihlLHQpe3JldHVybiBqPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saihlLHQpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIE09T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LE0oZSl9ZnVuY3Rpb24gXyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXgobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT14KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBSKGUsdCxyKXtyZXR1cm4gdCYmTChlLnByb3RvdHlwZSx0KSxyJiZMKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgTj1bMCwwLDYxMiw3OTJdLEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQucGRmTWFuYWdlcixuPXQueHJlZixhPXQucGFnZUluZGV4LGk9dC5wYWdlRGljdCxvPXQucmVmLHM9dC5nbG9iYWxJZEZhY3RvcnksYz10LmZvbnRDYWNoZSx1PXQuYnVpbHRJbkNNYXBDYWNoZSxsPXQuc3RhbmRhcmRGb250RGF0YUNhY2hlLGY9dC5nbG9iYWxJbWFnZUNhY2hlLGg9dC5ub25CbGVuZE1vZGVzU2V0LGQ9dC54ZmFGYWN0b3J5O18odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9cix0aGlzLnBhZ2VJbmRleD1hLHRoaXMucGFnZURpY3Q9aSx0aGlzLnhyZWY9bix0aGlzLnJlZj1vLHRoaXMuZm9udENhY2hlPWMsdGhpcy5idWlsdEluQ01hcENhY2hlPXUsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9bCx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9Zix0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9aCx0aGlzLmV2YWx1YXRvck9wdGlvbnM9ci5ldmFsdWF0b3JPcHRpb25zLHRoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsLHRoaXMueGZhRmFjdG9yeT1kO3ZhciBwPXtvYmo6MH07dGhpcy5fbG9jYWxJZEZhY3Rvcnk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmooZSx0KX0oaSxlKTt2YXIgdCxyLG49KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLG49TSh0KTtpZihyKXt2YXIgYT1NKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PXgodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKCl7cmV0dXJuIF8odGhpcyxpKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUihpLG51bGwsW3trZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJwIi5jb25jYXQoYSwiXyIpLmNvbmNhdCgrK3Aub2JqKX19LHtrZXk6ImdldFBhZ2VPYmpJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4icGFnZSIuY29uY2F0KG8udG9TdHJpbmcoKSl9fV0pLGl9KHMpfXZhciB0LHIscztyZXR1cm4gUihlLFt7a2V5OiJfZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxyPSgwLGkuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dGhpcy5wYWdlRGljdCxrZXk6ZSxnZXRBcnJheTp0LHN0b3BXaGVuRm91bmQ6ITF9KTtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT8xIT09ci5sZW5ndGgmJnJbMF1pbnN0YW5jZW9mIG8uRGljdD9vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpyfSk6clswXTpyfX0se2tleToiY29udGVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZURpY3QuZ2V0QXJyYXkoIkNvbnRlbnRzIil9fSx7a2V5OiJyZXNvdXJjZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJyZXNvdXJjZXMiLGUgaW5zdGFuY2VvZiBvLkRpY3Q/ZTpvLkRpY3QuZW1wdHkpfX0se2tleToiX2dldEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O3ZhciB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXtpZigodD1hLlV0aWwubm9ybWFsaXplUmVjdCh0KSlbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDsoMCxhLndhcm4pKCJFbXB0eSwgb3IgaW52YWxpZCwgLyIuY29uY2F0KGUsIiBlbnRyeS4iKSl9cmV0dXJuIG51bGx9fSx7a2V5OiJtZWRpYUJveCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1lZGlhQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiTWVkaWFCb3giKXx8Til9fSx7a2V5OiJjcm9wQm94IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9fSx7a2V5OiJ1c2VyVW5pdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7cmV0dXJuKCJudW1iZXIiIT10eXBlb2YgZXx8ZTw9MCkmJihlPTEpLCgwLGEuc2hhZG93KSh0aGlzLCJ1c2VyVW5pdCIsZSl9fSx7a2V5OiJ2aWV3IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyb3BCb3gsdD10aGlzLm1lZGlhQm94O2lmKGUhPT10JiYhKDAsYS5pc0FycmF5RXF1YWwpKGUsdCkpe3ZhciByPWEuVXRpbC5pbnRlcnNlY3QoZSx0KTtpZihyJiZyWzJdLXJbMF0+MCYmclszXS1yWzFdPjApcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZpZXciLHIpOygwLGEud2FybikoIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3Iix0KX19LHtrZXk6InJvdGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiUm90YXRlIil8fDA7cmV0dXJuIGUlOTAhPTA/ZT0wOmU+PTM2MD9lJT0zNjA6ZTwwJiYoZT0oZSUzNjArMzYwKSUzNjApLCgwLGEuc2hhZG93KSh0aGlzLCJyb3RhdGUiLGUpfX0se2tleToiX29uU3ViU3RyZWFtRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBlLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29udGVudFN1YlN0cmVhbX0pLHZvaWQoMCxhLndhcm4pKCJnZXRDb250ZW50U3RyZWFtIC0gaWdub3Jpbmcgc3ViLXN0cmVhbSAoIi5jb25jYXQociwnKTogIicpLmNvbmNhdCh0LCciLicpKTt0aHJvdyB0fX0se2tleToiZ2V0Q29udGVudFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJjb250ZW50IikudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/cjpBcnJheS5pc0FycmF5KHIpP25ldyBtLlN0cmVhbXNTZXF1ZW5jZVN0cmVhbShyLHQuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0LGUpKTpuZXcgcC5OdWxsU3RyZWFtfSkpfX0se2tleToieGZhRGF0YSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGEiLHRoaXMueGZhRmFjdG9yeT97YmJveDp0aGlzLnhmYUZhY3RvcnkuZ2V0Qm91bmRpbmdCb3godGhpcy5wYWdlSW5kZXgpfTpudWxsKX19LHtrZXk6InNhdmVOZXdBbm5vdGF0aW9ucyIsdmFsdWU6KHM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGksbyxzLGMsdSxsLGYsaCxkLHAsZztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhmYUZhY3Rvcnkpe2UubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y2FzZSAyOnJldHVybiBpPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSxvPXRoaXMucGFnZURpY3Qscz10aGlzLmFubm90YXRpb25zLnNsaWNlKCksZS5uZXh0PTcsbi5Bbm5vdGF0aW9uRmFjdG9yeS5zYXZlTmV3QW5ub3RhdGlvbnMoaSxyLGEpO2Nhc2UgNzpjPWUuc2VudCx1PUYoYy5hbm5vdGF0aW9ucyk7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWY9bC52YWx1ZS5yZWYscy5wdXNoKGYpfWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfXJldHVybiBoPW8uZ2V0KCJBbm5vdHMiKSxvLnNldCgiQW5ub3RzIixzKSxkPVtdLHA9bnVsbCx0aGlzLnhyZWYuZW5jcnlwdCYmKHA9dGhpcy54cmVmLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSwoMCx3LndyaXRlT2JqZWN0KSh0aGlzLnJlZixvLGQscCksaCYmby5zZXQoIkFubm90cyIsaCksKGc9Yy5kZXBlbmRlbmNpZXMpLnB1c2guYXBwbHkoZyxbe3JlZjp0aGlzLnJlZixkYXRhOmQuam9pbigiIil9XS5jb25jYXQoQyhjLmFubm90YXRpb25zKSkpLGUuYWJydXB0KCJyZXR1cm4iLGcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSk7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBpLG89W10scz1GKGUpO3RyeXtmb3Iocy5zKCk7IShpPXMubigpKS5kb25lOyl7dmFyIGM9aS52YWx1ZTtjLm11c3RCZVByaW50ZWQocikmJm8ucHVzaChjLnNhdmUobix0LHIpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiKyciJy5jb25jYXQodC5uYW1lLCciIHRhc2s6ICInKS5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXJldHVybiBQcm9taXNlLmFsbChvKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pKX0pKX0pKX19LHtrZXk6ImxvYWRSZXNvdXJjZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZXx8KHRoaXMucmVzb3VyY2VzUHJvbWlzZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsInJlc291cmNlcyIpKSx0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGcuT2JqZWN0TG9hZGVyKHQucmVzb3VyY2VzLGUsdC54cmVmKS5sb2FkKCl9KSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmhhbmRsZXIsbz1lLnNpbmsscz1lLnRhc2ssYz1lLmludGVudCx1PWUuY2FjaGVLZXksbD1lLmFubm90YXRpb25TdG9yYWdlLGY9dm9pZCAwPT09bD9udWxsOmwsaD10aGlzLmdldENvbnRlbnRTdHJlYW0ociksZD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSkscD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnIscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksZz10aGlzLnhmYUZhY3Rvcnk/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShmKSxtPVByb21pc2UucmVzb2x2ZShudWxsKTtpZihnKXt2YXIgYj1nLmdldCh0aGlzLnBhZ2VJbmRleCk7YiYmKG09bi5Bbm5vdGF0aW9uRmFjdG9yeS5wcmludE5ld0Fubm90YXRpb25zKHAscyxiKSl9dmFyIHc9UHJvbWlzZS5hbGwoW2gsZF0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBuPU8oZSwxKVswXSxhPW5ldyB2Lk9wZXJhdG9yTGlzdChjLG8pO3JldHVybiByLnNlbmQoIlN0YXJ0UmVuZGVyUGFnZSIse3RyYW5zcGFyZW5jeTpwLmhhc0JsZW5kTW9kZXModC5yZXNvdXJjZXMsdC5ub25CbGVuZE1vZGVzU2V0KSxwYWdlSW5kZXg6dC5wYWdlSW5kZXgsY2FjaGVLZXk6dX0pLHAuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOnMscmVzb3VyY2VzOnQucmVzb3VyY2VzLG9wZXJhdG9yTGlzdDphfSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoW3csdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMsbV0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PU8oZSwzKSxyPXRbMF0sbj10WzFdLGk9dFsyXTtpZihpJiYobj1uLmNvbmNhdChpKSksMD09PW4ubGVuZ3RofHxjJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFKXJldHVybiByLmZsdXNoKCEwKSx7bGVuZ3RoOnIudG90YWxMZW5ndGh9O3ZhciBvLHU9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVMpLGw9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxoPSEhKGMmYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGQ9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpLGc9W10sdj1GKG4pO3RyeXtmb3Iodi5zKCk7IShvPXYubigpKS5kb25lOyl7dmFyIHk9by52YWx1ZTsobHx8aCYmeS5tdXN0QmVWaWV3ZWQoZil8fGQmJnkubXVzdEJlUHJpbnRlZChmKSkmJmcucHVzaCh5LmdldE9wZXJhdG9yTGlzdChwLHMsYyx1LGYpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIrJyInLmNvbmNhdChzLm5hbWUsJyIgdGFzazogIicpLmNvbmNhdChlLCciLicpKSx7b3BMaXN0Om51bGwsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX0pKSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXJldHVybiBQcm9taXNlLmFsbChnKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdCxuPSExLGE9ITEsaT1GKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89dC52YWx1ZSxzPW8ub3BMaXN0LGM9by5zZXBhcmF0ZUZvcm0sdT1vLnNlcGFyYXRlQ2FudmFzO3IuYWRkT3BMaXN0KHMpLGMmJihuPWMpLHUmJihhPXUpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gci5mbHVzaCghMCx7Zm9ybTpuLGNhbnZhczphfSkse2xlbmd0aDpyLnRvdGFsTGVuZ3RofX0pKX0pKX19LHtrZXk6ImV4dHJhY3RUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFuZGxlcixuPWUudGFzayxhPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT1lLnNpbmssbz1lLmNvbWJpbmVUZXh0SXRlbXMscz10aGlzLmdldENvbnRlbnRTdHJlYW0ociksYz10aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJGb250IiwiUHJvcGVydGllcyIsIlhPYmplY3QiXSk7cmV0dXJuIFByb21pc2UuYWxsKFtzLGNdKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcz1PKGUsMSlbMF07cmV0dXJuIG5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dC54cmVmLGhhbmRsZXI6cixwYWdlSW5kZXg6dC5wYWdlSW5kZXgsaWRGYWN0b3J5OnQuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0Lmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0LmV2YWx1YXRvck9wdGlvbnN9KS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnMsdGFzazpuLHJlc291cmNlczp0LnJlc291cmNlcyxpbmNsdWRlTWFya2VkQ29udGVudDphLGNvbWJpbmVUZXh0SXRlbXM6byxzaW5rOmksdmlld0JveDp0LnZpZXd9KX0pKX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJzdHJ1Y3RUcmVlUm9vdCIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5uZXh0PTcsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbdF0pO2Nhc2UgNzpyZXR1cm4gcj1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsci5zZXJpYWxpemFibGUpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9wYXJzZVN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBiLlN0cnVjdFRyZWVQYWdlKGUsdGhpcy5wYWdlRGljdCk7cmV0dXJuIHQucGFyc2UoKSx0fX0se2tleToiZ2V0QW5ub3RhdGlvbnNEYXRhIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgaSxvLHMsYyx1LGwsZixoLGQscCxnO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3BhcnNlZEFubm90YXRpb25zO2Nhc2UgMjppZigwIT09KGk9ZS5zZW50KS5sZW5ndGgpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbXSk7Y2FzZSA1Om89W10scz1bXSx1PSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWSksbD0hIShuJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSxmPSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKSxoPUYoaSk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSwoKGc9dXx8bCYmcC52aWV3YWJsZSl8fGYmJnAucHJpbnRhYmxlKSYmcy5wdXNoKHAuZGF0YSkscC5oYXNUZXh0Q29udGVudCYmZyYmKGN8fChjPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSksby5wdXNoKHAuZXh0cmFjdFRleHRDb250ZW50KGMscix0aGlzLnZpZXcpLmNhdGNoKChmdW5jdGlvbihlKXsoMCxhLndhcm4pKCdnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIicuY29uY2F0KHIubmFtZSwnIiB0YXNrOiAiJykuY29uY2F0KGUsJyIuJykpfSkpKSl9Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGUubmV4dD0xMixQcm9taXNlLmFsbChvKTtjYXNlIDEyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJhbm5vdGF0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQW5ub3RzIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImFubm90YXRpb25zIixBcnJheS5pc0FycmF5KGUpP2U6W10pfX0se2tleToiX3BhcnNlZEFubm90YXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQscj1bXSxpPUYoZS5hbm5vdGF0aW9ucyk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbz10LnZhbHVlO3IucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZShlLnhyZWYsbyxlLnBkZk1hbmFnZXIsZS5fbG9jYWxJZEZhY3RvcnksITEpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdfcGFyc2VkQW5ub3RhdGlvbnM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIFByb21pc2UuYWxsKHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTt2YXIgdCxyLGE9W10saT1GKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvJiYobyBpbnN0YW5jZW9mIG4uUG9wdXBBbm5vdGF0aW9uPyh0fHwodD1bXSksdC5wdXNoKG8pKTphLnB1c2gobykpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdCYmYS5wdXNoLmFwcGx5KGEsQyh0KSksYX0pKX0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIix0KX19LHtrZXk6ImpzQWN0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9KDAsaS5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMucGFnZURpY3QsYS5QYWdlQWN0aW9uRXZlbnRUeXBlKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywianNBY3Rpb25zIixlKX19XSksZX0oKTt0LlBhZ2U9RDt2YXIgQj1uZXcgVWludDhBcnJheShbMzcsODAsNjgsNzAsNDVdKSxVPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksJD1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTExLDk4LDEwNl0pO2Z1bmN0aW9uIFgoZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTAyNCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sYT10Lmxlbmd0aCxpPWUucGVla0J5dGVzKHIpLG89aS5sZW5ndGgtYTtpZihvPD0wKXJldHVybiExO2lmKG4pZm9yKHZhciBzPWEtMSxjPWkubGVuZ3RoLTE7Yz49czspe2Zvcih2YXIgdT0wO3U8YSYmaVtjLXVdPT09dFtzLXVdOyl1Kys7aWYodT49YSlyZXR1cm4gZS5wb3MrPWMtcywhMDtjLS19ZWxzZSBmb3IodmFyIGw9MDtsPD1vOyl7Zm9yKHZhciBmPTA7ZjxhJiZpW2wrZl09PT10W2ZdOylmKys7aWYoZj49YSlyZXR1cm4gZS5wb3MrPWwsITA7bCsrfXJldHVybiExfXZhciBIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2lmKF8odGhpcyxlKSxyLmxlbmd0aDw9MCl0aHJvdyBuZXcgYS5JbnZhbGlkUERGRXhjZXB0aW9uKCJUaGUgUERGIGZpbGUgaXMgZW1wdHksIGkuZS4gaXRzIHNpemUgaXMgemVybyBieXRlcy4iKTt0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnN0cmVhbT1yLHRoaXMueHJlZj1uZXcgUy5YUmVmKHIsdCksdGhpcy5fcGFnZVByb21pc2VzPW5ldyBNYXAsdGhpcy5fdmVyc2lvbj1udWxsO3ZhciBuPXtmb250OjB9O3RoaXMuX2dsb2JhbElkRmFjdG9yeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfKHRoaXMsZSl9cmV0dXJuIFIoZSxudWxsLFt7a2V5OiJnZXREb2NJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZ18iLmNvbmNhdCh0LmRvY0lkKX19LHtrZXk6ImNyZWF0ZUZvbnRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZiIuY29uY2F0KCsrbi5mb250KX19LHtrZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGNyZWF0ZU9iaklkYCBjYWxsZWQuIil9fSx7a2V5OiJnZXRQYWdlT2JqSWQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsYS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGFnZU9iaklkYCBjYWxsZWQuIil9fV0pLGV9KCl9dmFyIHQscixwLG0sYix3LEMsUDtyZXR1cm4gUihlLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy54cmVmLnBhcnNlKGUpLHRoaXMuY2F0YWxvZz1uZXcgbC5DYXRhbG9nKHRoaXMucGRmTWFuYWdlcix0aGlzLnhyZWYpfX0se2tleToibGluZWFyaXphdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT1kLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoZSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImxpbmVhcml6YXRpb24iLGUpfX0se2tleToic3RhcnRYUmVmIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbSx0PTA7aWYodGhpcy5saW5lYXJpemF0aW9uKWUucmVzZXQoKSxYKGUsJCkmJih0PWUucG9zKzYtZS5zdGFydCk7ZWxzZXtmb3IodmFyIHI9VS5sZW5ndGgsbj0hMSxvPWUuZW5kOyFuJiZvPjA7KShvLT0xMDI0LXIpPDAmJihvPTApLGUucG9zPW8sbj1YKGUsVSwxMDI0LCEwKTtpZihuKXt2YXIgcztlLnNraXAoOSk7ZG97cz1lLmdldEJ5dGUoKX13aGlsZSgoMCxpLmlzV2hpdGVTcGFjZSkocykpO2Zvcih2YXIgYz0iIjtzPj0zMiYmczw9NTc7KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUocykscz1lLmdldEJ5dGUoKTt0PXBhcnNlSW50KGMsMTApLGlzTmFOKHQpJiYodD0wKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInN0YXJ0WFJlZiIsdCl9fSx7a2V5OiJjaGVja0hlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbTtpZihlLnJlc2V0KCksWChlLEIpKXtlLm1vdmVTdGFydCgpLGUuc2tpcChCLmxlbmd0aCk7Zm9yKHZhciB0LHI9IiI7KHQ9ZS5nZXRCeXRlKCkpPjMyJiZyLmxlbmd0aDw3OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2kuUERGX1ZFUlNJT05fUkVHRVhQLnRlc3Qocik/dGhpcy5fdmVyc2lvbj1yOigwLGEud2FybikoIkludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAiLmNvbmNhdChyKSl9fX0se2tleToicGFyc2VTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy54cmVmLnNldFN0YXJ0WFJlZih0aGlzLnN0YXJ0WFJlZil9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXMsKDAsYS5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX19LHtrZXk6Il9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuISFBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChmdW5jdGlvbihlKXtpZighKChlPXQueHJlZi5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLmhhcygiS2lkcyIpKXJldHVybisrcj4xMD8oKDAsYS53YXJuKSgiX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXM6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHJlYWNoZWQiKSwhMSk6dC5faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlLmdldCgiS2lkcyIpLHIpO3ZhciBuPSgwLG8uaXNOYW1lKShlLmdldCgiRlQiKSwiU2lnIiksaT1lLmdldCgiUmVjdCIpLHM9QXJyYXkuaXNBcnJheShpKSYmaS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfSkpO3JldHVybiBuJiZzfSkpfX0se2tleToiX3hmYVN0cmVhbXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiWEZBIikscj17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpcmV0dXJuIHJbInhkcDp4ZHAiXT10LHI7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKz0yKXt2YXIgaTtpZihpPTA9PT1uPyJ4ZHA6eGRwIjpuPT09YS0yPyIveGRwOnhkcCI6dFtuXSxyLmhhc093blByb3BlcnR5KGkpKXt2YXIgbz10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W24rMV0pO28gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHkmJihyW2ldPW8pfX1yZXR1cm4gcn19LHtrZXk6InhmYURhdGFzZXRzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94ZmFTdHJlYW1zO2lmKCFlKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCk7Zm9yKHZhciB0PTAscj1bImRhdGFzZXRzIiwieGRwOnhkcCJdO3Q8ci5sZW5ndGg7dCsrKXt2YXIgbj1yW3RdLGk9ZVtuXTtpZihpKXRyeXt2YXIgbz17W25dOigwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShpLmdldFN0cmluZygpKX07cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixuZXcgaC5EYXRhc2V0UmVhZGVyKG8pKX1jYXRjaChlKXsoMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTticmVha319cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixudWxsKX19LHtrZXk6InhmYURhdGEiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj0wLG49T2JqZWN0LmVudHJpZXMoZSk7cjxuLmxlbmd0aDtyKyspe3ZhciBpPU8obltyXSwyKSxvPWlbMF0scz1pWzFdO2lmKHMpdHJ5e3Rbb109KDAsYS5zdHJpbmdUb1VURjhTdHJpbmcpKHMuZ2V0U3RyaW5nKCkpfWNhdGNoKGUpe3JldHVybigwLGEud2FybikoIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLiIpLG51bGx9fXJldHVybiB0fX0se2tleToieGZhRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbmFibGVYZmEmJnRoaXMuY2F0YWxvZy5uZWVkc1JlbmRlcmluZyYmdGhpcy5mb3JtSW5mby5oYXNYZmEmJiF0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtJiYoZT10aGlzLnhmYURhdGEpLCgwLGEuc2hhZG93KSh0aGlzLCJ4ZmFGYWN0b3J5IixlP25ldyBrLlhGQUZhY3RvcnkoZSk6bnVsbCl9fSx7a2V5OiJpc1B1cmVYZmEiLGdldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy54ZmFGYWN0b3J5JiZ0aGlzLnhmYUZhY3RvcnkuaXNWYWxpZCgpfX0se2tleToiaHRtbEZvclhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3RvcnkuZ2V0UGFnZXMoKTpudWxsfX0se2tleToibG9hZFhmYUltYWdlcyIsdmFsdWU6KFA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixhLGksbyxzLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInhmYUltYWdlcyIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIHI9dC5nZXRLZXlzKCksbj1uZXcgZy5PYmplY3RMb2FkZXIodCxyLHRoaXMueHJlZiksZS5uZXh0PTksbi5sb2FkKCk7Y2FzZSA5OmE9bmV3IE1hcCxpPUYocik7dHJ5e2ZvcihpLnMoKTshKG89aS5uKCkpLmRvbmU7KXM9by52YWx1ZSwodT10LmdldChzKSlpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmYS5zZXQocyx1LmdldEJ5dGVzKCkpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMoYSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRYZmFGb250cyIsdmFsdWU6KEM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBuLGMsdSxsLGYsaCxkLHAsbSxiLHcsayxTLHgsQyxQLFQsSSxFLGosTSxfLEwsUixOLEQsQixVLCQsWCxILHEsRyx6O3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpO2Nhc2UgMjppZihuPWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIGUubmV4dD03LG4uZ2V0QXN5bmMoIkRSIik7Y2FzZSA3OmlmKChjPWUuc2VudClpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpyZXR1cm4gdT1uZXcgZy5PYmplY3RMb2FkZXIoYyxbIkZvbnQiXSx0aGlzLnhyZWYpLGUubmV4dD0xMyx1LmxvYWQoKTtjYXNlIDEzOmlmKChsPWMuZ2V0KCJGb250IikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTY6KGY9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zKSkudXNlU3lzdGVtRm9udHM9ITEsaD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnQscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmZ9KSxkPW5ldyB2Lk9wZXJhdG9yTGlzdCxwPVtdLGUudDA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbT17Z2V0IGZvbnQoKXtyZXR1cm4gcC5hdCgtMSl9LHNldCBmb250KGUpe3AucHVzaChlKX0sY2xvbmU6ZS50MH0sYj1uZXcgTWFwLGwuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtiLnNldChlLHQpfSkpLHc9W10saz1GKGIpLGUucHJldj0yNyxrLnMoKTtjYXNlIDI5OmlmKChTPWsubigpKS5kb25lKXtlLm5leHQ9NDQ7YnJlYWt9aWYoeD1PKFMudmFsdWUsMiksQz14WzBdLFA9eFsxXSwoVD1QLmdldCgiRm9udERlc2NyaXB0b3IiKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTM0O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDQyKTtjYXNlIDM0OmlmKEk9KEk9VC5nZXQoIkZvbnRGYW1pbHkiKSkucmVwbGFjZSgvWyBdKyhcZCkvZywiJDEiKSxFPVQuZ2V0KCJGb250V2VpZ2h0Iiksaj0tVC5nZXQoIkl0YWxpY0FuZ2xlIiksTT17Zm9udEZhbWlseTpJLGZvbnRXZWlnaHQ6RSxpdGFsaWNBbmdsZTpqfSwoMCxpLnZhbGlkYXRlQ1NTRm9udCkoTSkpe2UubmV4dD00MTticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw0Mik7Y2FzZSA0MTp3LnB1c2goaC5oYW5kbGVTZXRGb250KGMsW28uTmFtZS5nZXQoQyksMV0sbnVsbCxkLHIsbSxudWxsLE0pLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkWGZhRm9udHM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKTtjYXNlIDQyOmUubmV4dD0yOTticmVhaztjYXNlIDQ0OmUubmV4dD00OTticmVhaztjYXNlIDQ2OmUucHJldj00NixlLnQxPWUuY2F0Y2goMjcpLGsuZShlLnQxKTtjYXNlIDQ5OnJldHVybiBlLnByZXY9NDksay5mKCksZS5maW5pc2goNDkpO2Nhc2UgNTI6cmV0dXJuIGUubmV4dD01NCxQcm9taXNlLmFsbCh3KTtjYXNlIDU0OmlmKF89dGhpcy54ZmFGYWN0b3J5LnNldEZvbnRzKHApKXtlLm5leHQ9NTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU3OmYuaWdub3JlRXJyb3JzPSEwLHcubGVuZ3RoPTAscC5sZW5ndGg9MCxMPW5ldyBTZXQsUj1GKF8pO3RyeXtmb3IoUi5zKCk7IShOPVIubigpKS5kb25lOylEPU4udmFsdWUsKDAscy5nZXRYZmFGb250TmFtZSkoIiIuY29uY2F0KEQsIi1SZWd1bGFyIikpfHxMLmFkZChEKX1jYXRjaChlKXtSLmUoZSl9ZmluYWxseXtSLmYoKX1MLnNpemUmJl8ucHVzaCgiUGRmSlMtRmFsbGJhY2siKSxCPUYoXyksZS5wcmV2PTY1LEIucygpO2Nhc2UgNjc6aWYoKFU9Qi5uKCkpLmRvbmUpe2UubmV4dD03NDticmVha31pZigkPVUudmFsdWUsIUwuaGFzKCQpKXtlLm5leHQ9NzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJjb250aW51ZSIsNzIpO2Nhc2UgNzE6Zm9yKFg9MCxIPVt7bmFtZToiUmVndWxhciIsZm9udFdlaWdodDo0MDAsaXRhbGljQW5nbGU6MH0se25hbWU6IkJvbGQiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJJdGFsaWMiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjEyfSx7bmFtZToiQm9sZEl0YWxpYyIsZm9udFdlaWdodDo3MDAsaXRhbGljQW5nbGU6MTJ9XTtYPEgubGVuZ3RoO1grKylxPUhbWF0sRz0iIi5jb25jYXQoJCwiLSIpLmNvbmNhdChxLm5hbWUpLHo9KDAscy5nZXRYZmFGb250RGljdCkoRyksdy5wdXNoKGguaGFuZGxlU2V0Rm9udChjLFtvLk5hbWUuZ2V0KEcpLDFdLG51bGwsZCxyLG0seix7Zm9udEZhbWlseTokLGZvbnRXZWlnaHQ6cS5mb250V2VpZ2h0LGl0YWxpY0FuZ2xlOnEuaXRhbGljQW5nbGV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS53YXJuKSgnbG9hZFhmYUZvbnRzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSk7Y2FzZSA3MjplLm5leHQ9Njc7YnJlYWs7Y2FzZSA3NDplLm5leHQ9Nzk7YnJlYWs7Y2FzZSA3NjplLnByZXY9NzYsZS50Mj1lLmNhdGNoKDY1KSxCLmUoZS50Mik7Y2FzZSA3OTpyZXR1cm4gZS5wcmV2PTc5LEIuZigpLGUuZmluaXNoKDc5KTtjYXNlIDgyOnJldHVybiBlLm5leHQ9ODQsUHJvbWlzZS5hbGwodyk7Y2FzZSA4NDp0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMocCxMKTtjYXNlIDg1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMjcsNDYsNDksNTJdLFs2NSw3Niw3OSw4Ml1dKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gQy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplWGZhRGF0YSIsdmFsdWU6KHc9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEodCk6bnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InZlcnNpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbnx8dGhpcy5fdmVyc2lvbn19LHtrZXk6ImZvcm1JbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT17aGFzRmllbGRzOiExLGhhc0Fjcm9Gb3JtOiExLGhhc1hmYTohMSxoYXNTaWduYXR1cmVzOiExfSx0PXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighdClyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZm9ybUluZm8iLGUpO3RyeXt2YXIgcj10LmdldCgiRmllbGRzIiksbj1BcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aD4wO2UuaGFzRmllbGRzPW47dmFyIG89dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkobykmJm8ubGVuZ3RoPjB8fG8gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHk7dmFyIHM9ISEoMSZ0LmdldCgiU2lnRmxhZ3MiKSksdT1zJiZ0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKHIpO2UuaGFzQWNyb0Zvcm09biYmIXUsZS5oYXNTaWduYXR1cmVzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCdDYW5ub3QgZmV0Y2ggZm9ybSBpbmZvcm1hdGlvbjogIicuY29uY2F0KGUsJyIuJykpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSl9fSx7a2V5OiJkb2N1bWVudEluZm8iLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9e1BERkZvcm1hdFZlcnNpb246dGhpcy52ZXJzaW9uLExhbmd1YWdlOnRoaXMuY2F0YWxvZy5sYW5nLEVuY3J5cHRGaWx0ZXJOYW1lOnRoaXMueHJlZi5lbmNyeXB0P3RoaXMueHJlZi5lbmNyeXB0LmZpbHRlck5hbWU6bnVsbCxJc0xpbmVhcml6ZWQ6ISF0aGlzLmxpbmVhcml6YXRpb24sSXNBY3JvRm9ybVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSxJc1hGQVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNYZmEsSXNDb2xsZWN0aW9uUHJlc2VudDohIXRoaXMuY2F0YWxvZy5jb2xsZWN0aW9uLElzU2lnbmF0dXJlc1ByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNTaWduYXR1cmVzfTt0cnl7ZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkluZm8iKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoIlRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZG9jdW1lbnRJbmZvIix0KTt2YXIgcixuPUYoZS5nZXRLZXlzKCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIHM9ci52YWx1ZSxjPWUuZ2V0KHMpO3N3aXRjaChzKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2YgYyl7dFtzXT0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKGMgaW5zdGFuY2VvZiBvLk5hbWUpe3Rbc109Yztjb250aW51ZX1icmVhaztkZWZhdWx0OnZhciB1PXZvaWQgMDtzd2l0Y2goeChjKSl7Y2FzZSJzdHJpbmciOnU9KDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6dT1jO2JyZWFrO2RlZmF1bHQ6YyBpbnN0YW5jZW9mIG8uTmFtZSYmKHU9Yyl9aWYodm9pZCAwPT09dSl7KDAsYS53YXJuKSgnQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSk7Y29udGludWV9dC5DdXN0b218fCh0LkN1c3RvbT1PYmplY3QuY3JlYXRlKG51bGwpKSx0LkN1c3RvbVtzXT11O2NvbnRpbnVlfSgwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLHQpfX0se2tleToiZmluZ2VycHJpbnRzIixnZXQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gdChlKXt2YXIgdCxyPVtdLG49RihlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWUudG9TdHJpbmcoMTYpO3IucHVzaChhLnBhZFN0YXJ0KDIsIjAiKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByLmpvaW4oIiIpfXZhciByLG4saT10aGlzLnhyZWYudHJhaWxlci5nZXQoIklEIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSkmJmUoaVswXSk/KHI9KDAsYS5zdHJpbmdUb0J5dGVzKShpWzBdKSxpWzFdIT09aVswXSYmZShpWzFdKSYmKG49KDAsYS5zdHJpbmdUb0J5dGVzKShpWzFdKSkpOnI9KDAsdS5jYWxjdWxhdGVNRDUpKHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLDEwMjQpLDAsMTAyNCksKDAsYS5zaGFkb3cpKHRoaXMsImZpbmdlcnByaW50cyIsW3Qociksbj90KG4pOm51bGxdKX19LHtrZXk6Il9nZXRMaW5lYXJpemF0aW9uUGFnZSIsdmFsdWU6KGI9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGkscyxjLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gcj10aGlzLmNhdGFsb2csbj10aGlzLmxpbmVhcml6YXRpb24saT10aGlzLnhyZWYscz1vLlJlZi5nZXQobi5vYmplY3ROdW1iZXJGaXJzdCwwKSxlLnByZXY9MixlLm5leHQ9NSxpLmZldGNoQXN5bmMocyk7Y2FzZSA1OmlmKCEoKGM9ZS5zZW50KWluc3RhbmNlb2Ygby5EaWN0KSl7ZS5uZXh0PTE2O2JyZWFrfWlmKCEoKHU9Yy5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTEyO2JyZWFrfXJldHVybiBlLm5leHQ9MTEsaS5mZXRjaEFzeW5jKHUpO2Nhc2UgMTE6dT1lLnNlbnQ7Y2FzZSAxMjppZighKDAsby5pc05hbWUpKHUsIlBhZ2UiKSYmKGMuaGFzKCJUeXBlIil8fGMuaGFzKCJLaWRzIikpKXtlLm5leHQ9MTY7YnJlYWt9cmV0dXJuIHIucGFnZUtpZHNDb3VudENhY2hlLmhhcyhzKXx8ci5wYWdlS2lkc0NvdW50Q2FjaGUucHV0KHMsMSksci5wYWdlSW5kZXhDYWNoZS5oYXMocyl8fHIucGFnZUluZGV4Q2FjaGUucHV0KHMsMCksZS5hYnJ1cHQoInJldHVybiIsW2Msc10pO2Nhc2UgMTY6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlRoZSBMaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lc24ndCBwb2ludCB0byBhIHZhbGlkIFBhZ2UgZGljdGlvbmFyeS4iKTtjYXNlIDE5OnJldHVybiBlLnByZXY9MTksZS50MD1lLmNhdGNoKDIpLCgwLGEud2FybikoJ19nZXRMaW5lYXJpemF0aW9uUGFnZTogIicuY29uY2F0KGUudDAubWVzc2FnZSwnIi4nKSksZS5hYnJ1cHQoInJldHVybiIsci5nZXRQYWdlRGljdCh0KSk7Y2FzZSAyMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIsMTldXSl9KSkpLGZ1bmN0aW9uKGUpe3JldHVybiBiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5fcGFnZVByb21pc2VzLmdldChlKTtpZihyKXJldHVybiByO3ZhciBuLGE9dGhpcy5jYXRhbG9nLGk9dGhpcy5saW5lYXJpemF0aW9uLHM9dGhpcy54ZmFGYWN0b3J5O3JldHVybiBuPShuPXM/UHJvbWlzZS5yZXNvbHZlKFtvLkRpY3QuZW1wdHksbnVsbF0pOmkmJmkucGFnZUZpcnN0PT09ZT90aGlzLl9nZXRMaW5lYXJpemF0aW9uUGFnZShlKTphLmdldFBhZ2VEaWN0KGUpKS50aGVuKChmdW5jdGlvbihyKXt2YXIgbj1PKHIsMiksaT1uWzBdLG89blsxXTtyZXR1cm4gbmV3IEQoe3BkZk1hbmFnZXI6dC5wZGZNYW5hZ2VyLHhyZWY6dC54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OmkscmVmOm8sZ2xvYmFsSWRGYWN0b3J5OnQuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6YS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTphLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmEuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6YS5nbG9iYWxJbWFnZUNhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6YS5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6c30pfSkpLHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxuKSxufX0se2tleToiY2hlY2tGaXJzdFBhZ2UiLHZhbHVlOihtPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHM7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighKHQubGVuZ3RoPjAmJnZvaWQgMCE9PXRbMF0mJnRbMF0pKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpyZXR1cm4gZS5wcmV2PTMsZS5uZXh0PTYsdGhpcy5nZXRQYWdlKDApO2Nhc2UgNjplLm5leHQ9MTU7YnJlYWs7Y2FzZSA4OmlmKGUucHJldj04LGUudDA9ZS5jYXRjaCgzKSwhKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbikpe2UubmV4dD0xNTticmVha31yZXR1cm4gdGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZSgwKSxlLm5leHQ9MTQsdGhpcy5jbGVhbnVwKCk7Y2FzZSAxNDp0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzMsOF1dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2hlY2tMYXN0UGFnZSIsdmFsdWU6KHA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixvLHMsYyx1LGwsZixoLGQscCxnLHY9YXJndW1lbnRzO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9di5sZW5ndGg+MCYmdm9pZCAwIT09dlswXSYmdlswXSxyPXRoaXMuY2F0YWxvZyxuPXRoaXMucGRmTWFuYWdlcixyLnNldEFjdHVhbE51bVBhZ2VzKCksZS5wcmV2PTMsZS5uZXh0PTYsUHJvbWlzZS5hbGwoW24uZW5zdXJlRG9jKCJ4ZmFGYWN0b3J5Iiksbi5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxuLmVuc3VyZUNhdGFsb2coIm51bVBhZ2VzIildKTtjYXNlIDY6aWYoIXRoaXMueGZhRmFjdG9yeSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpvPXRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6ci5udW1QYWdlcztjYXNlIDExOmlmKE51bWJlci5pc0ludGVnZXIobykpe2UubmV4dD0xNTticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpcyBub3QgYW4gaW50ZWdlci4iKTtjYXNlIDE1OmlmKCEobzw9MSkpe2UubmV4dD0xNzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTc6cmV0dXJuIGUubmV4dD0xOSx0aGlzLmdldFBhZ2Uoby0xKTtjYXNlIDE5OmUubmV4dD00NDticmVhaztjYXNlIDIxOnJldHVybiBlLnByZXY9MjEsZS50MD1lLmNhdGNoKDMpLHRoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUoby0xKSxlLm5leHQ9MjYsdGhpcy5jbGVhbnVwKCk7Y2FzZSAyNjppZighKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbil8fHQpe2UubmV4dD0yODticmVha310aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAyODpyZXR1cm4oMCxhLndhcm4pKCJjaGVja0xhc3RQYWdlIC0gaW52YWxpZCAvUGFnZXMgdHJlZSAvQ291bnQ6ICIuY29uY2F0KG8sIi4iKSksZS5wcmV2PTI5LGUubmV4dD0zMixyLmdldEFsbFBhZ2VEaWN0cyh0KTtjYXNlIDMyOnM9ZS5zZW50LGUubmV4dD00MTticmVhaztjYXNlIDM1OmlmKGUucHJldj0zNSxlLnQxPWUuY2F0Y2goMjkpLCEoZS50MSBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uKXx8dCl7ZS5uZXh0PTM5O2JyZWFrfXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbjtjYXNlIDM5OnJldHVybiByLnNldEFjdHVhbE51bVBhZ2VzKDEpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQxOmM9RihzKTt0cnl7Zm9yKGMucygpOyEodT1jLm4oKSkuZG9uZTspbD1PKHUudmFsdWUsMiksZj1sWzBdLGg9TyhsWzFdLDIpLGQ9aFswXSxwPWhbMV0sZz12b2lkIDAsZCBpbnN0YW5jZW9mIEVycm9yPyhnPVByb21pc2UucmVqZWN0KGQpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSk6Zz1Qcm9taXNlLnJlc29sdmUobmV3IEQoe3BkZk1hbmFnZXI6bix4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZixwYWdlRGljdDpkLHJlZjpwLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnIuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6ci5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTpyLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnIuZ2xvYmFsSW1hZ2VDYWNoZSxub25CbGVuZE1vZGVzU2V0OnIubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5Om51bGx9KSksdGhpcy5fcGFnZVByb21pc2VzLnNldChmLGcpfWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXIuc2V0QWN0dWFsTnVtUGFnZXMocy5zaXplKTtjYXNlIDQ0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMywyMV0sWzI5LDM1XV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soZSx0KX19LHtrZXk6ImNsZWFudXAiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyPWFyZ3VtZW50cztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXIubGVuZ3RoPjAmJnZvaWQgMCE9PXJbMF0mJnJbMF0sZS5hYnJ1cHQoInJldHVybiIsdGhpcy5jYXRhbG9nP3RoaXMuY2F0YWxvZy5jbGVhbnVwKHQpOigwLGYuY2xlYXJHbG9iYWxDYWNoZXMpKCkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9jb2xsZWN0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy54cmVmLmZldGNoSWZSZWYodCk7aWYoaS5oYXMoIlQiKSl7dmFyIG89KDAsYS5zdHJpbmdUb1BERlN0cmluZykoaS5nZXQoIlQiKSk7ZT0iIj09PWU/bzoiIi5jb25jYXQoZSwiLiIpLmNvbmNhdChvKX1pZihyLmhhcyhlKXx8ci5zZXQoZSxbXSksci5nZXQoZSkucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsdCx0aGlzLnBkZk1hbmFnZXIsdGhpcy5fbG9jYWxJZEZhY3RvcnksITApLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmdldEZpZWxkT2JqZWN0KCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybigwLGEud2FybikoJ19jb2xsZWN0RmllbGRPYmplY3RzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSksaS5oYXMoIktpZHMiKSl7dmFyIHMsYz1GKGkuZ2V0KCJLaWRzIikpO3RyeXtmb3IoYy5zKCk7IShzPWMubigpKS5kb25lOyl7dmFyIHU9cy52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKGUsdSxyKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19LHtrZXk6ImZpZWxkT2JqZWN0cyIsZ2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmaWVsZE9iamVjdHMiLFByb21pc2UucmVzb2x2ZShudWxsKSk7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9bmV3IE1hcCxuPUYodGhpcy5jYXRhbG9nLmFjcm9Gb3JtLmdldCgiRmllbGRzIikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKCIiLGkscil9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBvLHM9W10sYz1GKHIpO3RyeXt2YXIgdT1mdW5jdGlvbigpe3ZhciBlPU8oby52YWx1ZSwyKSxyPWVbMF0sbj1lWzFdO3MucHVzaChQcm9taXNlLmFsbChuKS50aGVuKChmdW5jdGlvbihlKXsoZT1lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSkpKS5sZW5ndGg+MCYmKHRbcl09ZSl9KSkpfTtmb3IoYy5zKCk7IShvPWMubigpKS5kb25lOyl1KCl9Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5hbGwocykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoIl9wYXJzZUhhc0pTQWN0aW9ucyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJoYXNKU0FjdGlvbnMiLGUpfX0se2tleToiX3BhcnNlSGFzSlNBY3Rpb25zIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuLGE7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKSx0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKV0pO2Nhc2UgMjppZih0PWUuc2VudCxyPU8odCwyKSxuPXJbMF0sYT1yWzFdLCFuKXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsITApO2Nhc2UgODppZighYSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixPYmplY3QudmFsdWVzKGEpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZS5hY3Rpb25zfSkpfSkpKTtjYXNlIDEwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIiwhMSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbGN1bGF0aW9uT3JkZXJJZHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZXx8IWUuaGFzKCJDTyIpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgdD1lLmdldCgiQ08iKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgcixuPVtdLGk9Rih0KTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7cyBpbnN0YW5jZW9mIG8uUmVmJiZuLnB1c2gocy50b1N0cmluZygpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIDA9PT1uLmxlbmd0aD8oMCxhLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk6KDAsYS5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG4pfX1dKSxlfSgpO3QuUERGRG9jdW1lbnQ9SH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvcHVwQW5ub3RhdGlvbj10Lk1hcmt1cEFubm90YXRpb249dC5Bbm5vdGF0aW9uRmFjdG9yeT10LkFubm90YXRpb25Cb3JkZXJTdHlsZT10LkFubm90YXRpb249dm9pZCAwLHQuZ2V0UXVhZFBvaW50cz1EO3ZhciBuPXIoMiksYT1yKDEzNSksaT1yKDE0Miksbz1yKDEzNCkscz1yKDE5NCksYz1yKDEzNiksdT1yKDE4OSksbD1yKDE5OCksZj1yKDE0MyksaD1yKDIwMSksZD1yKDIwNCkscD1yKDE5MSksZz1yKDEzOSksdj1yKDIwNSk7ZnVuY3Rpb24geSgpe3JldHVybiB5PSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9eChlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LHkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG0oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYihlLHQpfWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gYj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGIoZSx0KX1mdW5jdGlvbiB3KGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPXgoZSk7aWYodCl7dmFyIGE9eCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gayh0aGlzLHIpfX1mdW5jdGlvbiBrKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Tyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gUyhlKX1mdW5jdGlvbiBTKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiB4KGUpe3JldHVybiB4PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSx4KGUpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9SShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gQygpe0M9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09TyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIHgoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gRihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7RihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7RihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8SShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gRShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0UoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEUoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBqKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gTShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1PKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09TyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PU8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIF8oZSx0LHIpe3JldHVybiB0JiZNKGUucHJvdG90eXBlLHQpLHImJk0oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2oodGhpcyxlKX12YXIgdCxyLGk7cmV0dXJuIF8oZSxudWxsLFt7a2V5OiJjcmVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9dGhpcztyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxyLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxyLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksci5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksYT90aGlzLl9nZXRQYWdlSW5kZXgoZSx0LHIpOi0xXSkudGhlbigoZnVuY3Rpb24obyl7dmFyIHM9VChvLDUpLGM9c1swXSx1PShzWzFdLHNbMl0pLGw9c1szXSxmPXNbNF07cmV0dXJuIHIuZW5zdXJlKGksIl9jcmVhdGUiLFtlLHQscixuLGMsdSxsLGEsZl0pfSkpfX0se2tleToiX2NyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06bnVsbCx1PWFyZ3VtZW50cy5sZW5ndGg+Nj9hcmd1bWVudHNbNl06dm9pZCAwLGw9YXJndW1lbnRzLmxlbmd0aD43P2FyZ3VtZW50c1s3XTp2b2lkIDAsZj1hcmd1bWVudHMubGVuZ3RoPjgmJnZvaWQgMCE9PWFyZ3VtZW50c1s4XT9hcmd1bWVudHNbOF06LTEsaD1lLmZldGNoSWZSZWYodCk7aWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQ9dCBpbnN0YW5jZW9mIG8uUmVmP3QudG9TdHJpbmcoKToiYW5ub3RfIi5jb25jYXQoaS5jcmVhdGVPYmpJZCgpKSxwPWguZ2V0KCJTdWJ0eXBlIik7cD1wIGluc3RhbmNlb2Ygby5OYW1lP3AubmFtZTpudWxsO3ZhciBnPXMgaW5zdGFuY2VvZiBvLkRpY3Q/czpvLkRpY3QuZW1wdHksdj17eHJlZjplLHJlZjp0LGRpY3Q6aCxzdWJ0eXBlOnAsaWQ6ZCxwZGZNYW5hZ2VyOnIsYWNyb0Zvcm06ZyxhdHRhY2htZW50czpjLHhmYURhdGFzZXRzOnUsY29sbGVjdEZpZWxkczpsLG5lZWRBcHBlYXJhbmNlczohbCYmITA9PT1nLmdldCgiTmVlZEFwcGVhcmFuY2VzIikscGFnZUluZGV4OmYsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6bi5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCYmci5ldmFsdWF0b3JPcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfTtzd2l0Y2gocCl7Y2FzZSJMaW5rIjpyZXR1cm4gbmV3IFkodik7Y2FzZSJUZXh0IjpyZXR1cm4gbmV3IFYodik7Y2FzZSJXaWRnZXQiOnZhciB5PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6aCxrZXk6IkZUIn0pO3N3aXRjaCh5PXkgaW5zdGFuY2VvZiBvLk5hbWU/eS5uYW1lOm51bGwpe2Nhc2UiVHgiOnJldHVybiBuZXcgcSh2KTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBHKHYpO2Nhc2UiQ2giOnJldHVybiBuZXcgeih2KTtjYXNlIlNpZyI6cmV0dXJuIG5ldyBXKHYpfXJldHVybigwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgd2lkZ2V0IGZpZWxkIHR5cGUgIicuY29uY2F0KHksJyIsICcpKyJmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLiIpLG5ldyBIKHYpO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgSyh2KTtjYXNlIkZyZWVUZXh0IjpyZXR1cm4gbmV3IEoodik7Y2FzZSJMaW5lIjpyZXR1cm4gbmV3IFoodik7Y2FzZSJTcXVhcmUiOnJldHVybiBuZXcgUSh2KTtjYXNlIkNpcmNsZSI6cmV0dXJuIG5ldyBlZSh2KTtjYXNlIlBvbHlMaW5lIjpyZXR1cm4gbmV3IHRlKHYpO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG5ldyByZSh2KTtjYXNlIkNhcmV0IjpyZXR1cm4gbmV3IG5lKHYpO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IGFlKHYpO2Nhc2UiSGlnaGxpZ2h0IjpyZXR1cm4gbmV3IGllKHYpO2Nhc2UiVW5kZXJsaW5lIjpyZXR1cm4gbmV3IG9lKHYpO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgc2Uodik7Y2FzZSJTdHJpa2VPdXQiOnJldHVybiBuZXcgY2Uodik7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyB1ZSh2KTtjYXNlIkZpbGVBdHRhY2htZW50IjpyZXR1cm4gbmV3IGxlKHYpO2RlZmF1bHQ6cmV0dXJuIGx8fChwPygwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICInLmNvbmNhdChwLCciLCAnKSsiZmFsbGluZyBiYWNrIHRvIGJhc2UgYW5ub3RhdGlvbi4iKTooMCxuLndhcm4pKCJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLiIpKSxuZXcgVSh2KX19fX0se2tleToiX2dldFBhZ2VJbmRleCIsdmFsdWU6KGk9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGkscyxjO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUubmV4dD0zLHQuZmV0Y2hJZlJlZkFzeW5jKHIpO2Nhc2UgMzppZigoaT1lLnNlbnQpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSA2OmlmKChzPWkuZ2V0UmF3KCJQIikpaW5zdGFuY2VvZiBvLlJlZil7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLC0xKTtjYXNlIDk6cmV0dXJuIGUubmV4dD0xMSxhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3NdKTtjYXNlIDExOnJldHVybiBjPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE1OnJldHVybiBlLnByZXY9MTUsZS50MD1lLmNhdGNoKDApLCgwLG4ud2FybikoJ19nZXRQYWdlSW5kZXg6ICInLmNvbmNhdChlLnQwLCciLicpKSxlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzAsMTVdXSl9KSkpLGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZU5ld0Fubm90YXRpb25zIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhKXt2YXIgaSxjLHUsbCxmLGgsZCxwLGc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppPXQueHJlZix1PVtdLGw9W10sZj1BKGEpLGUucHJldj00LGYucygpO2Nhc2UgNjppZigoaD1mLm4oKSkuZG9uZSl7ZS5uZXh0PTE3O2JyZWFrfWQ9aC52YWx1ZSxlLnQwPWQuYW5ub3RhdGlvblR5cGUsZS5uZXh0PWUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUPzExOmUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8xNDoxNTticmVhaztjYXNlIDExOnJldHVybiBjfHwoKHA9bmV3IG8uRGljdChpKSkuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiSGVsdmV0aWNhIikpLHAuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGb250IikpLHAuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJUeXBlMSIpKSxwLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSxnPVtdLGM9aS5nZXROZXdUZW1wb3JhcnlSZWYoKSwoMCxzLndyaXRlT2JqZWN0KShjLHAsZyxudWxsKSx1LnB1c2goe3JlZjpjLGRhdGE6Zy5qb2luKCIiKX0pKSxsLnB1c2goSi5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1LHtldmFsdWF0b3I6dCx0YXNrOnIsYmFzZUZvbnRSZWY6Y30pKSxlLmFicnVwdCgiYnJlYWsiLDE1KTtjYXNlIDE0OmwucHVzaChhZS5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1KSk7Y2FzZSAxNTplLm5leHQ9NjticmVhaztjYXNlIDE3OmUubmV4dD0yMjticmVhaztjYXNlIDE5OmUucHJldj0xOSxlLnQxPWUuY2F0Y2goNCksZi5lKGUudDEpO2Nhc2UgMjI6cmV0dXJuIGUucHJldj0yMixmLmYoKSxlLmZpbmlzaCgyMik7Y2FzZSAyNTpyZXR1cm4gZS5uZXh0PTI3LFByb21pc2UuYWxsKGwpO2Nhc2UgMjc6cmV0dXJuIGUudDI9ZS5zZW50LGUudDM9dSxlLmFicnVwdCgicmV0dXJuIix7YW5ub3RhdGlvbnM6ZS50MixkZXBlbmRlbmNpZXM6ZS50M30pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDE5LDIyLDI1XV0pfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InByaW50TmV3QW5ub3RhdGlvbnMiLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLG8scyxjLHUsbDtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGEpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDI6aT10LnhyZWYsbz1bXSxzPW4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQmJnQub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCxjPUEoYSksZS5wcmV2PTYsYy5zKCk7Y2FzZSA4OmlmKCh1PWMubigpKS5kb25lKXtlLm5leHQ9MTk7YnJlYWt9bD11LnZhbHVlLGUudDA9bC5hbm5vdGF0aW9uVHlwZSxlLm5leHQ9ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ/MTM6ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LPzE1OjE3O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIG8ucHVzaChKLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihpLGwse2V2YWx1YXRvcjp0LHRhc2s6cixpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTU6cmV0dXJuIG8ucHVzaChhZS5jcmVhdGVOZXdQcmludEFubm90YXRpb24oaSxsLHtpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTc6ZS5uZXh0PTg7YnJlYWs7Y2FzZSAxOTplLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTplLnByZXY9MjEsZS50MT1lLmNhdGNoKDYpLGMuZShlLnQxKTtjYXNlIDI0OnJldHVybiBlLnByZXY9MjQsYy5mKCksZS5maW5pc2goMjQpO2Nhc2UgMjc6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UuYWxsKG8pKTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNiwyMSwyNCwyN11dKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGV9KCk7ZnVuY3Rpb24gUihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O3ZhciByPXR8fG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2Nhc2UgMzpyZXR1cm4gZi5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLHIsMCkscjtjYXNlIDQ6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIEFycmF5LmZyb20oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUvMjU1fSkpfWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmdldEFycmF5KCJRdWFkUG9pbnRzIik7aWYoIUFycmF5LmlzQXJyYXkocil8fDA9PT1yLmxlbmd0aHx8ci5sZW5ndGglOD4wKXJldHVybiBudWxsO2Zvcih2YXIgbj1bXSxhPTAsaT1yLmxlbmd0aC84O2E8aTthKyspe2Zvcih2YXIgbz0xLzAscz0tMS8wLGM9MS8wLHU9LTEvMCxsPTgqYSxmPTgqYSs4O2w8ZjtsKz0yKXt2YXIgaD1yW2xdLGQ9cltsKzFdO289TWF0aC5taW4oaCxvKSxzPU1hdGgubWF4KGgscyksYz1NYXRoLm1pbihkLGMpLHU9TWF0aC5tYXgoZCx1KX1pZihudWxsIT09dCYmKG88dFswXXx8cz50WzJdfHxjPHRbMV18fHU+dFszXSkpcmV0dXJuIG51bGw7bi5wdXNoKFt7eDpvLHk6dX0se3g6cyx5OnV9LHt4Om8seTpjfSx7eDpzLHk6Y31dKX1yZXR1cm4gbn1mdW5jdGlvbiBCKGUsdCxyKXt2YXIgYT1UKG4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LHIpLDQpLGk9YVswXSxvPWFbMV0scz1hWzJdLGM9YVszXTtpZihpPT09c3x8bz09PWMpcmV0dXJuWzEsMCwwLDEsZVswXSxlWzFdXTt2YXIgdT0oZVsyXS1lWzBdKS8ocy1pKSxsPShlWzNdLWVbMV0pLyhjLW8pO3JldHVyblt1LDAsMCxsLGVbMF0taSp1LGVbMV0tbypsXX10LkFubm90YXRpb25GYWN0b3J5PUw7dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2oodGhpcyxlKTt2YXIgcj10LmRpY3QsaT10LnhyZWY7dGhpcy5zZXRUaXRsZShyLmdldCgiVCIpKSx0aGlzLnNldENvbnRlbnRzKHIuZ2V0KCJDb250ZW50cyIpKSx0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoci5nZXQoIk0iKSksdGhpcy5zZXRGbGFncyhyLmdldCgiRiIpKSx0aGlzLnNldFJlY3RhbmdsZShyLmdldEFycmF5KCJSZWN0IikpLHRoaXMuc2V0Q29sb3Ioci5nZXRBcnJheSgiQyIpKSx0aGlzLnNldEJvcmRlclN0eWxlKHIpLHRoaXMuc2V0QXBwZWFyYW5jZShyKSx0aGlzLnNldE9wdGlvbmFsQ29udGVudChyKTt2YXIgcz1yLmdldCgiTUsiKTtpZih0aGlzLnNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMocyksdGhpcy5zZXRSb3RhdGlvbihzKSx0aGlzLl9zdHJlYW1zPVtdLHRoaXMuYXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSksdGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOnQuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOnQuc3VidHlwZSxoYXNPd25DYW52YXM6ITF9LHQuY29sbGVjdEZpZWxkcyl7dmFyIGM9ci5nZXQoIktpZHMiKTtpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgdSxsPVtdLGY9QShjKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aCBpbnN0YW5jZW9mIG8uUmVmJiZsLnB1c2goaC50b1N0cmluZygpKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9MCE9PWwubGVuZ3RoJiYodGhpcy5kYXRhLmtpZElkcz1sKX10aGlzLmRhdGEuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSx0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZShyKSx0aGlzLmRhdGEucGFnZUluZGV4PXQucGFnZUluZGV4fXRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPXQuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsdGhpcy5fZmFsbGJhY2tGb250RGljdD1udWxsLHRoaXMuX25lZWRBcHBlYXJhbmNlcz0hMX12YXIgdCxyLHM7cmV0dXJuIF8oZSxbe2tleToiX2hhc0ZsYWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuISEoZSZ0KX19LHtrZXk6Il9pc1ZpZXdhYmxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSYmIXRoaXMuX2hhc0ZsYWcoZSxuLkFubm90YXRpb25GbGFnLk5PVklFVyl9fSx7a2V5OiJfaXNQcmludGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5QUklOVCkmJiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpfX0se2tleToibXVzdEJlVmlld2VkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LmhpZGRlbj8hdC5oaWRkZW46dGhpcy52aWV3YWJsZSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTil9fSx7a2V5OiJtdXN0QmVQcmludGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LnByaW50P3QucHJpbnQ6dGhpcy5wcmludGFibGV9fSx7a2V5OiJ2aWV3YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmKDA9PT10aGlzLmZsYWdzfHx0aGlzLl9pc1ZpZXdhYmxlKHRoaXMuZmxhZ3MpKX19LHtrZXk6InByaW50YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmMCE9PXRoaXMuZmxhZ3MmJnRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpfX0se2tleToiX3BhcnNlU3RyaW5nSGVscGVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0ic3RyaW5nIj09dHlwZW9mIGU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSk6IiI7cmV0dXJue3N0cjp0LGRpcjp0JiYicnRsIj09PSgwLHUuYmlkaSkodCkuZGlyPyJydGwiOiJsdHIifX19LHtrZXk6InNldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmUuZGljdCxrZXk6IkRBIn0pfHxlLmFjcm9Gb3JtLmdldCgiREEiKTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0ic3RyaW5nIj09dHlwZW9mIHQ/dDoiIix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UpfX0se2tleToic2V0VGl0bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3RpdGxlPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0Q29udGVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2NvbnRlbnRzPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0TW9kaWZpY2F0aW9uRGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5tb2RpZmljYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9fSx7a2V5OiJzZXRGbGFncyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mbGFncz1OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjA/ZTowfX0se2tleToiaGFzRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxlKX19LHtrZXk6InNldFJlY3RhbmdsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7QXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoP3RoaXMucmVjdGFuZ2xlPW4uVXRpbC5ub3JtYWxpemVSZWN0KGUpOnRoaXMucmVjdGFuZ2xlPVswLDAsMCwwXX19LHtrZXk6InNldENvbG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNvbG9yPVIoZSl9fSx7a2V5OiJzZXRMaW5lRW5kaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5saW5lRW5kaW5ncz1bIk5vbmUiLCJOb25lIl0sQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoKWZvcih2YXIgdD0wO3Q8Mjt0Kyspe3ZhciByPWVbdF07aWYociBpbnN0YW5jZW9mIG8uTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPXIubmFtZTtjb250aW51ZX0oMCxuLndhcm4pKCJJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICIuY29uY2F0KHIpKX19fSx7a2V5OiJzZXRSb3RhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5yb3RhdGlvbj0wLGUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB0PWUuZ2V0KCJSIil8fDA7TnVtYmVyLmlzSW50ZWdlcih0KSYmMCE9PXQmJigodCU9MzYwKTwwJiYodCs9MzYwKSx0JTkwPT0wJiYodGhpcy5yb3RhdGlvbj10KSl9fX0se2tleToic2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIG8uRGljdD8odGhpcy5ib3JkZXJDb2xvcj1SKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9UihlLmdldEFycmF5KCJCRyIpLG51bGwpKTp0aGlzLmJvcmRlckNvbG9yPXRoaXMuYmFja2dyb3VuZENvbG9yPW51bGx9fSx7a2V5OiJzZXRCb3JkZXJTdHlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5ib3JkZXJTdHlsZT1uZXcgJCxlIGluc3RhbmNlb2Ygby5EaWN0KWlmKGUuaGFzKCJCUyIpKXt2YXIgdD1lLmdldCgiQlMiKSxyPXQuZ2V0KCJUeXBlIik7ciYmISgwLG8uaXNOYW1lKShyLCJCb3JkZXIiKXx8KHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSx0aGlzLnJlY3RhbmdsZSksdGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKSx0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpKX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7dmFyIG49ZS5nZXRBcnJheSgiQm9yZGVyIik7QXJyYXkuaXNBcnJheShuKSYmbi5sZW5ndGg+PTMmJih0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoblswXSksdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhuWzFdKSx0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKG5bMl0sdGhpcy5yZWN0YW5nbGUpLDQ9PT1uLmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoblszXSwhMCkpfWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX19LHtrZXk6InNldEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO3ZhciB0PWUuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSl0aGlzLmFwcGVhcmFuY2U9cjtlbHNlIGlmKHIgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBuPWUuZ2V0KCJBUyIpO24gaW5zdGFuY2VvZiBvLk5hbWUmJnIuaGFzKG4ubmFtZSkmJih0aGlzLmFwcGVhcmFuY2U9ci5nZXQobi5uYW1lKSl9fX19LHtrZXk6InNldE9wdGlvbmFsQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vYz1udWxsO3ZhciB0PWUuZ2V0KCJPQyIpO3QgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi53YXJuKSgic2V0T3B0aW9uYWxDb250ZW50OiBTdXBwb3J0IGZvciAvTmFtZS1lbnRyeSBpcyBub3QgaW1wbGVtZW50ZWQuIik6dCBpbnN0YW5jZW9mIG8uRGljdCYmKHRoaXMub2M9dCl9fSx7a2V5OiJsb2FkUmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LmRpY3QuZ2V0QXN5bmMoIlJlc291cmNlcyIpLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKHQpcmV0dXJuIG5ldyBkLk9iamVjdExvYWRlcih0LGUsdC54cmVmKS5sb2FkKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKX19LHtrZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KHM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLHMpe3ZhciBjLHUsbCxmLGgsZCx2LHksbSxiO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz10aGlzLmRhdGEsdT10aGlzLmFwcGVhcmFuY2UsbD0hISh0aGlzLmRhdGEuaGFzT3duQ2FudmFzJiZhJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSx1KXtlLm5leHQ9ODticmVha31pZihsKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSA2Oih1PW5ldyBnLlN0cmluZ1N0cmVhbSgiIikpLmRpY3Q9bmV3IG8uRGljdDtjYXNlIDg6cmV0dXJuIGY9dS5kaWN0LGUubmV4dD0xMSx0aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJDb2xvclNwYWNlIiwiUGF0dGVybiIsIlNoYWRpbmciLCJYT2JqZWN0IiwiRm9udCJdLHUpO2Nhc2UgMTE6aWYoaD1lLnNlbnQsZD1mLmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSx2PWYuZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLHk9QihjLnJlY3QsZCx2KSxtPW5ldyBwLk9wZXJhdG9yTGlzdCwhdGhpcy5vYyl7ZS5uZXh0PTIwO2JyZWFrfXJldHVybiBlLm5leHQ9MTksdC5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpO2Nhc2UgMTk6Yj1lLnNlbnQ7Y2FzZSAyMDpyZXR1cm4gdm9pZCAwIT09YiYmbS5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixiXSksbS5hZGRPcChuLk9QUy5iZWdpbkFubm90YXRpb24sW2MuaWQsYy5yZWN0LHksdixsXSksZS5uZXh0PTI0LHQuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dSx0YXNrOnIscmVzb3VyY2VzOmgsb3BlcmF0b3JMaXN0Om0sZmFsbGJhY2tGb250RGljdDp0aGlzLl9mYWxsYmFja0ZvbnREaWN0fSk7Y2FzZSAyNDpyZXR1cm4gbS5hZGRPcChuLk9QUy5lbmRBbm5vdGF0aW9uLFtdKSx2b2lkIDAhPT1iJiZtLmFkZE9wKG4uT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pLHRoaXMucmVzZXQoKSxlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om0sc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOmx9KTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LHIsbixhKXtyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZSIsdmFsdWU6KHI9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFzVGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiExfX0se2tleToiZXh0cmFjdFRleHRDb250ZW50Iix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYSxpLG8scztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdLHRoaXMuYXBwZWFyYW5jZSk7Y2FzZSA0OnJldHVybiBhPWUuc2VudCxpPVtdLG89W10scz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1BKGUuaXRlbXMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTtvLnB1c2goYS5zdHIpLGEuaGFzRU9MJiYoaS5wdXNoKG8uam9pbigiIikpLG8ubGVuZ3RoPTApfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fSxlLm5leHQ9MTAsdC5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnRoaXMuYXBwZWFyYW5jZSx0YXNrOnIscmVzb3VyY2VzOmEsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ITAsY29tYmluZVRleHRJdGVtczohMCxzaW5rOnMsdmlld0JveDpufSk7Y2FzZSAxMDp0aGlzLnJlc2V0KCksby5sZW5ndGgmJmkucHVzaChvLmpvaW4oIiIpKSxpLmxlbmd0aD4wJiYodGhpcy5kYXRhLnRleHRDb250ZW50PWkpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEua2lkSWRzP3tpZDp0aGlzLmRhdGEuaWQsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHR5cGU6IiIsa2lkSWRzOnRoaXMuZGF0YS5raWRJZHMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHJvdGF0aW9uOnRoaXMucm90YXRpb259Om51bGx9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PUEodGhpcy5fc3RyZWFtcyk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWUucmVzZXQoKX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX19fSx7a2V5OiJfY29uc3RydWN0RmllbGROYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxuLndhcm4pKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpLCIiO2lmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSk7dmFyIHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpKTt2YXIgcj1lLGE9bmV3IG8uUmVmU2V0O2ZvcihlLm9iaklkJiZhLnB1dChlLm9iaklkKTtyLmhhcygiUGFyZW50IikmJihyPXIuZ2V0KCJQYXJlbnQiKSlpbnN0YW5jZW9mIG8uRGljdCYmKCFyLm9iaklkfHwhYS5oYXMoci5vYmpJZCkpOylyLm9iaklkJiZhLnB1dChyLm9iaklkKSxyLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsbi5zdHJpbmdUb1BERlN0cmluZykoci5nZXQoIlQiKSkpO3JldHVybiB0LmpvaW4oIi4iKX19XSksZX0oKTt0LkFubm90YXRpb249VTt2YXIgJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtqKHRoaXMsZSksdGhpcy53aWR0aD0xLHRoaXMuc3R5bGU9bi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElELHRoaXMuZGFzaEFycmF5PVszXSx0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9MCx0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzPTB9cmV0dXJuIF8oZSxbe2tleToic2V0V2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbMCwwLDAsMF07aWYoZSBpbnN0YW5jZW9mIG8uTmFtZSl0aGlzLndpZHRoPTA7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKGU+MCl7dmFyIHI9KHRbMl0tdFswXSkvMixhPSh0WzNdLXRbMV0pLzI7cj4wJiZhPjAmJihlPnJ8fGU+YSkmJigoMCxuLndhcm4pKCJBbm5vdGF0aW9uQm9yZGVyU3R5bGUuc2V0V2lkdGggLSBpZ25vcmluZyB3aWR0aDogIi5jb25jYXQoZSkpLGU9MSl9dGhpcy53aWR0aD1lfX19LHtrZXk6InNldFN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygby5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiUyI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7YnJlYWs7Y2FzZSJEIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7YnJlYWs7Y2FzZSJCIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO2JyZWFrO2Nhc2UiSSI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ7YnJlYWs7Y2FzZSJVIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkV9fX0se2tleToic2V0RGFzaEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe3ZhciByLG49ITAsYT0hMCxpPUEoZSk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKCEoK3M+PTApKXtuPSExO2JyZWFrfXM+MCYmKGE9ITEpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1uJiYhYT8odGhpcy5kYXNoQXJyYXk9ZSx0JiZ0aGlzLnNldFN0eWxlKG8uTmFtZS5nZXQoIkQiKSkpOnRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfX0se2tleToic2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX19LHtrZXk6InNldFZlcnRpY2FsQ29ybmVyUmFkaXVzIix2YWx1ZTpmdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19XSksZX0oKTt0LkFubm90YXRpb25Cb3JkZXJTdHlsZT0kO3ZhciBYPWZ1bmN0aW9uKGUpe20oaSxlKTt2YXIgdCxyLGE9dyhpKTtmdW5jdGlvbiBpKGUpe3ZhciB0O2oodGhpcyxpKSx0PWEuY2FsbCh0aGlzLGUpO3ZhciByPWUuZGljdDtpZihyLmhhcygiSVJUIikpe3ZhciBzPXIuZ2V0UmF3KCJJUlQiKTt0LmRhdGEuaW5SZXBseVRvPXMgaW5zdGFuY2VvZiBvLlJlZj9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgYz1yLmdldCgiUlQiKTt0LmRhdGEucmVwbHlUeXBlPWMgaW5zdGFuY2VvZiBvLk5hbWU/Yy5uYW1lOm4uQW5ub3RhdGlvblJlcGx5VHlwZS5SRVBMWX1pZih0LmRhdGEucmVwbHlUeXBlPT09bi5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKXt2YXIgdT1yLmdldCgiSVJUIik7dC5zZXRUaXRsZSh1LmdldCgiVCIpKSx0LmRhdGEudGl0bGVPYmo9dC5fdGl0bGUsdC5zZXRDb250ZW50cyh1LmdldCgiQ29udGVudHMiKSksdC5kYXRhLmNvbnRlbnRzT2JqPXQuX2NvbnRlbnRzLHUuaGFzKCJDcmVhdGlvbkRhdGUiKT8odC5zZXRDcmVhdGlvbkRhdGUodS5nZXQoIkNyZWF0aW9uRGF0ZSIpKSx0LmRhdGEuY3JlYXRpb25EYXRlPXQuY3JlYXRpb25EYXRlKTp0LmRhdGEuY3JlYXRpb25EYXRlPW51bGwsdS5oYXMoIk0iKT8odC5zZXRNb2RpZmljYXRpb25EYXRlKHUuZ2V0KCJNIikpLHQuZGF0YS5tb2RpZmljYXRpb25EYXRlPXQubW9kaWZpY2F0aW9uRGF0ZSk6dC5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCx0LmRhdGEuaGFzUG9wdXA9dS5oYXMoIlBvcHVwIiksdS5oYXMoIkMiKT8odC5zZXRDb2xvcih1LmdldEFycmF5KCJDIikpLHQuZGF0YS5jb2xvcj10LmNvbG9yKTp0LmRhdGEuY29sb3I9bnVsbH1lbHNlIHQuZGF0YS50aXRsZU9iaj10Ll90aXRsZSx0LnNldENyZWF0aW9uRGF0ZShyLmdldCgiQ3JlYXRpb25EYXRlIikpLHQuZGF0YS5jcmVhdGlvbkRhdGU9dC5jcmVhdGlvbkRhdGUsdC5kYXRhLmhhc1BvcHVwPXIuaGFzKCJQb3B1cCIpLHIuaGFzKCJDIil8fCh0LmRhdGEuY29sb3I9bnVsbCk7cmV0dXJuIHIuaGFzKCJSQyIpJiYodC5kYXRhLnJpY2hUZXh0PXYuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChyLmdldCgiUkMiKSkpLHR9cmV0dXJuIF8oaSxbe2tleToic2V0Q3JlYXRpb25EYXRlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNyZWF0aW9uRGF0ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsfX0se2tleToiX3NldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmV4dHJhLG49ZS5zdHJva2VDb2xvcixhPWUuZmlsbENvbG9yLGk9ZS5ibGVuZE1vZGUscz1lLnN0cm9rZUFscGhhLGM9ZS5maWxsQWxwaGEsdT1lLnBvaW50c0NhbGxiYWNrLGw9TnVtYmVyLk1BWF9WQUxVRSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUlOX1ZBTFVFLGQ9TnVtYmVyLk1JTl9WQUxVRSxwPVsicSJdO3ImJnAucHVzaChyKSxuJiZwLnB1c2goIiIuY29uY2F0KG5bMF0sIiAiKS5jb25jYXQoblsxXSwiICIpLmNvbmNhdChuWzJdLCIgUkciKSksYSYmcC5wdXNoKCIiLmNvbmNhdChhWzBdLCIgIikuY29uY2F0KGFbMV0sIiAiKS5jb25jYXQoYVsyXSwiIHJnIikpO3ZhciB2PXRoaXMuZGF0YS5xdWFkUG9pbnRzO3Z8fCh2PVtbe3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVsxXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVsxXX1dXSk7dmFyIHksbT1BKHYpO3RyeXtmb3IobS5zKCk7ISh5PW0ubigpKS5kb25lOyl7dmFyIGI9VCh1KHAseS52YWx1ZSksNCksdz1iWzBdLGs9YlsxXSxTPWJbMl0seD1iWzNdO2w9TWF0aC5taW4obCx3KSxoPU1hdGgubWF4KGgsayksZj1NYXRoLm1pbihmLFMpLGQ9TWF0aC5tYXgoZCx4KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cC5wdXNoKCJRIik7dmFyIE89bmV3IG8uRGljdCh0KSxDPW5ldyBvLkRpY3QodCk7Qy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSk7dmFyIEY9bmV3IGcuU3RyaW5nU3RyZWFtKHAuam9pbigiICIpKTtGLmRpY3Q9QyxPLnNldCgiRm0wIixGKTt2YXIgUD1uZXcgby5EaWN0KHQpO2kmJlAuc2V0KCJCTSIsby5OYW1lLmdldChpKSksIm51bWJlciI9PXR5cGVvZiBzJiZQLnNldCgiQ0EiLHMpLCJudW1iZXIiPT10eXBlb2YgYyYmUC5zZXQoImNhIixjKTt2YXIgST1uZXcgby5EaWN0KHQpO0kuc2V0KCJHUzAiLFApO3ZhciBFPW5ldyBvLkRpY3QodCk7RS5zZXQoIkV4dEdTdGF0ZSIsSSksRS5zZXQoIlhPYmplY3QiLE8pO3ZhciBqPW5ldyBvLkRpY3QodCk7ai5zZXQoIlJlc291cmNlcyIsRSk7dmFyIE09dGhpcy5kYXRhLnJlY3Q9W2wsZixoLGRdO2ouc2V0KCJCQm94IixNKSx0aGlzLmFwcGVhcmFuY2U9bmV3IGcuU3RyaW5nU3RyZWFtKCIvR1MwIGdzIC9GbTAgRG8iKSx0aGlzLmFwcGVhcmFuY2UuZGljdD1qLHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UsRil9fV0sW3trZXk6ImNyZWF0ZU5ld0Fubm90YXRpb24iLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4sYSl7dmFyIGksbyxjLHUsbCxmLGg7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gaT10LmdldE5ld1RlbXBvcmFyeVJlZigpLGUubmV4dD0zLHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShyLHQsYSk7Y2FzZSAzOnJldHVybiBvPWUuc2VudCxjPVtdLG8/KGw9dC5nZXROZXdUZW1wb3JhcnlSZWYoKSx1PXRoaXMuY3JlYXRlTmV3RGljdChyLHQse2FwUmVmOmx9KSxmPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGwubnVtLGwuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGwsbyxjLGYpLG4ucHVzaCh7cmVmOmwsZGF0YTpjLmpvaW4oIiIpfSkpOnU9dGhpcy5jcmVhdGVOZXdEaWN0KHIsdCx7fSksYy5sZW5ndGg9MCxoPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGkubnVtLGkuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGksdSxjLGgpLGUuYWJydXB0KCJyZXR1cm4iLHtyZWY6aSxkYXRhOmMuam9pbigiIil9KTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbiIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGEsaTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0ocix0LG4pO2Nhc2UgMjpyZXR1cm4gYT1lLnNlbnQsaT10aGlzLmNyZWF0ZU5ld0RpY3Qocix0LHthcDphfSksZS5hYnJ1cHQoInJldHVybiIsbmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0OmkseHJlZjp0LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOm4uaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR9KSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGl9KFUpO3QuTWFya3VwQW5ub3RhdGlvbj1YO3ZhciBIPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGMsdSxsPXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtqKHRoaXMsZiksdD1sLmNhbGwodGhpcyxlKTt2YXIgcj1lLmRpY3QsaT1lLnhyZWYscz10LmRhdGE7dC5yZWY9ZS5yZWYsdC5fbmVlZEFwcGVhcmFuY2VzPWUubmVlZEFwcGVhcmFuY2VzLHMuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5XSURHRVQsdm9pZCAwPT09cy5maWVsZE5hbWUmJihzLmZpZWxkTmFtZT10Ll9jb25zdHJ1Y3RGaWVsZE5hbWUocikpLHZvaWQgMD09PXMuYWN0aW9ucyYmKHMuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSk7dmFyIGM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpyLGtleToiViIsZ2V0QXJyYXk6ITB9KTtzLmZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKGMpO3ZhciB1PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRWIixnZXRBcnJheTohMH0pO2lmKHMuZGVmYXVsdEZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKHUpLHZvaWQgMD09PWMmJmUueGZhRGF0YXNldHMpe3ZhciBoPXQuX3RpdGxlLnN0cjtoJiYodC5faGFzVmFsdWVGcm9tWEZBPSEwLHMuZmllbGRWYWx1ZT1jPWUueGZhRGF0YXNldHMuZ2V0VmFsdWUoaCkpfXZvaWQgMD09PWMmJm51bGwhPT1zLmRlZmF1bHRGaWVsZFZhbHVlJiYocy5maWVsZFZhbHVlPXMuZGVmYXVsdEZpZWxkVmFsdWUpLHMuYWx0ZXJuYXRpdmVUZXh0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHIuZ2V0KCJUVSIpfHwiIiksdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSxzLmhhc0FwcGVhcmFuY2U9dC5fbmVlZEFwcGVhcmFuY2VzJiZ2b2lkIDAhPT1zLmZpZWxkVmFsdWUmJm51bGwhPT1zLmZpZWxkVmFsdWV8fHMuaGFzQXBwZWFyYW5jZTt2YXIgZD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGVCJ9KTtzLmZpZWxkVHlwZT1kIGluc3RhbmNlb2Ygby5OYW1lP2QubmFtZTpudWxsO3ZhciBwPSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRSIn0pLGc9ZS5hY3JvRm9ybS5nZXQoIkRSIiksdj10LmFwcGVhcmFuY2UmJnQuYXBwZWFyYW5jZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7cmV0dXJuIHQuX2ZpZWxkUmVzb3VyY2VzPXtsb2NhbFJlc291cmNlczpwLGFjcm9Gb3JtUmVzb3VyY2VzOmcsYXBwZWFyYW5jZVJlc291cmNlczp2LG1lcmdlZFJlc291cmNlczpvLkRpY3QubWVyZ2Uoe3hyZWY6aSxkaWN0QXJyYXk6W3AsdixnXSxtZXJnZVN1YkRpY3RzOiEwfSl9LHMuZmllbGRGbGFncz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGZiJ9KSwoIU51bWJlci5pc0ludGVnZXIocy5maWVsZEZsYWdzKXx8cy5maWVsZEZsYWdzPDApJiYocy5maWVsZEZsYWdzPTApLHMucmVhZE9ubHk9dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFQURPTkxZKSxzLnJlcXVpcmVkPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5SRVFVSVJFRCkscy5oaWRkZW49dC5faGFzRmxhZyhzLmFubm90YXRpb25GbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTiksdH1yZXR1cm4gXyhmLFt7a2V5OiJfZGVjb2RlRm9ybVZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSl9KSk6ZSBpbnN0YW5jZW9mIG8uTmFtZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsfX0se2tleToiaGFzRmllbGRGbGFnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX19LHtrZXk6ImdldFJvdGF0aW9uTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lP2UuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHI9dCYmdC5yb3RhdGlvbjtpZih2b2lkIDA9PT1yJiYocj10aGlzLnJvdGF0aW9uKSwwPT09cilyZXR1cm4gbi5JREVOVElUWV9NQVRSSVg7dmFyIGk9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sbz10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXTtyZXR1cm4oMCxhLmdldFJvdGF0aW9uTWF0cml4KShyLGksbyl9fSx7a2V5OiJnZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU/ZS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDAscj10JiZ0LnJvdGF0aW9uO2lmKHZvaWQgMD09PXImJihyPXRoaXMucm90YXRpb24pLCF0aGlzLmJhY2tncm91bmRDb2xvciYmIXRoaXMuYm9yZGVyQ29sb3IpcmV0dXJuIiI7dmFyIG49dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sYT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxvPTA9PT1yfHwxODA9PT1yPyIwIDAgIi5jb25jYXQobiwiICIpLmNvbmNhdChhLCIgcmUiKToiMCAwICIuY29uY2F0KGEsIiAiKS5jb25jYXQobiwiIHJlIikscz0iIjtpZih0aGlzLmJhY2tncm91bmRDb2xvciYmKHM9IiIuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYmFja2dyb3VuZENvbG9yLCEwKSwiICIpLmNvbmNhdChvLCIgZiAiKSksdGhpcy5ib3JkZXJDb2xvcil7dmFyIGM9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MTtzKz0iIi5jb25jYXQoYywiIHcgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYm9yZGVyQ29sb3IsITEpLCIgIikuY29uY2F0KG8sIiBTICIpfXJldHVybiBzfX0se2tleToiZ2V0T3BlcmF0b3JMaXN0Iix2YWx1ZToodT1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhLGksbyl7dmFyIHMsYyx1LGwsaCxkLHY7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighaXx8dGhpcyBpbnN0YW5jZW9mIFcpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om5ldyBwLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITAsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDI6aWYodGhpcy5faGFzVGV4dCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNDpyZXR1cm4gZS5uZXh0PTYsdGhpcy5fZ2V0QXBwZWFyYW5jZSh0LHIsYSxvKTtjYXNlIDY6aWYocz1lLnNlbnQsIXRoaXMuYXBwZWFyYW5jZXx8bnVsbCE9PXMpe2UubmV4dD05O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pKTtjYXNlIDk6aWYoYz1uZXcgcC5PcGVyYXRvckxpc3QsdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UmJm51bGwhPT1zKXtlLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtvcExpc3Q6YyxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDEyOmlmKHU9WzEsMCwwLDEsMCwwXSxsPVswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dLGg9Qih0aGlzLmRhdGEucmVjdCxsLHUpLCF0aGlzLm9jKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xOCx0LnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCk7Y2FzZSAxODpkPWUuc2VudDtjYXNlIDE5OnJldHVybiB2b2lkIDAhPT1kJiZjLmFkZE9wKG4uT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSxjLmFkZE9wKG4uT1BTLmJlZ2luQW5ub3RhdGlvbixbdGhpcy5kYXRhLmlkLHRoaXMuZGF0YS5yZWN0LGgsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSwhMV0pLHY9bmV3IGcuU3RyaW5nU3RyZWFtKHMpLGUubmV4dD0yNCx0LmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnYsdGFzazpyLHJlc291cmNlczp0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsb3BlcmF0b3JMaXN0OmN9KTtjYXNlIDI0OnJldHVybiBjLmFkZE9wKG4uT1BTLmVuZEFubm90YXRpb24sW10pLHZvaWQgMCE9PWQmJmMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSksZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpjLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX0pO2Nhc2UgMjc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscixuLGEpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfZ2V0TUtEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgby5EaWN0KG51bGwpO3JldHVybiBlJiZ0LnNldCgiUiIsZSksdGhpcy5ib3JkZXJDb2xvciYmdC5zZXQoIkJDIixOKHRoaXMuYm9yZGVyQ29sb3IpKSx0aGlzLmJhY2tncm91bmRDb2xvciYmdC5zZXQoIkJHIixOKHRoaXMuYmFja2dyb3VuZENvbG9yKSksdC5zaXplPjA/dDpudWxsfX0se2tleToic2F2ZSIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsaSl7dmFyIGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4LE8sRixQLFQsSSxFLGosTSxfLEwsUj10aGlzO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz1pP2kuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHU9YyYmYy52YWx1ZSxsPWMmJmMucm90YXRpb24sdSE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiZ2b2lkIDAhPT11KXtlLm5leHQ9NzticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkF8fHZvaWQgMCE9PWwpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6dT11fHx0aGlzLmRhdGEuZmllbGRWYWx1ZTtjYXNlIDc6aWYodm9pZCAwIT09bHx8dGhpcy5faGFzVmFsdWVGcm9tWEZBfHwhQXJyYXkuaXNBcnJheSh1KXx8IUFycmF5LmlzQXJyYXkodGhpcy5kYXRhLmZpZWxkVmFsdWUpfHx1Lmxlbmd0aCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aHx8IXUuZXZlcnkoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1SLmRhdGEuZmllbGRWYWx1ZVt0XX0pKSl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgOTppZih2b2lkIDA9PT1sJiYobD10aGlzLnJvdGF0aW9uKSxmPW51bGwsdGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xNCx0aGlzLl9nZXRBcHBlYXJhbmNlKHQscixuLlJlbmRlcmluZ0ludGVudEZsYWcuU0FWRSxpKTtjYXNlIDE0OmlmKG51bGwhPT0oZj1lLnNlbnQpKXtlLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMTc6ZS5uZXh0PTE5O2JyZWFrO2Nhc2UgMTk6aWYoaD0hMSxmJiZmLm5lZWRBcHBlYXJhbmNlcyYmKGg9ITAsZj1udWxsKSxkPXQueHJlZiwocD1kLmZldGNoSWZSZWYodGhpcy5yZWYpKWluc3RhbmNlb2Ygby5EaWN0KXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6dj1uZXcgby5EaWN0KGQpLHk9QShwLmdldEtleXMoKSk7dHJ5e2Zvcih5LnMoKTshKG09eS5uKCkpLmRvbmU7KSJBUCIhPT0oYj1tLnZhbHVlKSYmdi5zZXQoYixwLmdldFJhdyhiKSl9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIHc9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykodi5nZXQoIlQiKXx8IiIpLHZhbHVlOnV9LGs9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS5pc0FzY2lpKShlKT9lOigwLGEuc3RyaW5nVG9VVEYxNlN0cmluZykoZSwhMCl9LHYuc2V0KCJWIixBcnJheS5pc0FycmF5KHUpP3UubWFwKGspOmsodSkpLChTPXRoaXMuX2dldE1LRGljdChsKSkmJnYuc2V0KCJNSyIsUykseD1kLmVuY3J5cHQsTz14P3guY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pOm51bGwsRj1bXSxQPVt7cmVmOnRoaXMucmVmLGRhdGE6IiIseGZhOncsbmVlZEFwcGVhcmFuY2VzOmh9XSxudWxsIT09ZiYmKFQ9ZC5nZXROZXdUZW1wb3JhcnlSZWYoKSxJPW5ldyBvLkRpY3QoZCksdi5zZXQoIkFQIixJKSxJLnNldCgiTiIsVCksRT1udWxsLHgmJihFPXguY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKFQubnVtLFQuZ2VuKSxmPUUuZW5jcnlwdFN0cmluZyhmKSksaj10aGlzLl9nZXRTYXZlRmllbGRSZXNvdXJjZXMoZCksTT1uZXcgZy5TdHJpbmdTdHJlYW0oZiksKF89TS5kaWN0PW5ldyBvLkRpY3QoZCkpLnNldCgiTGVuZ3RoIixmLmxlbmd0aCksXy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksXy5zZXQoIlJlc291cmNlcyIsaiksXy5zZXQoIkJCb3giLFswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dKSwoTD10aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpKSE9PW4uSURFTlRJVFlfTUFUUklYJiZfLnNldCgiTWF0cml4IixMKSwoMCxzLndyaXRlT2JqZWN0KShULE0sRixFKSxQLnB1c2goe3JlZjpULGRhdGE6Ri5qb2luKCIiKSx4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KSxGLmxlbmd0aD0wKSx2LnNldCgiTSIsIkQ6Ii5jb25jYXQoKDAsbi5nZXRNb2RpZmljYXRpb25EYXRlKSgpKSksKDAscy53cml0ZU9iamVjdCkodGhpcy5yZWYsdixGLE8pLFBbMF0uZGF0YT1GLmpvaW4oIiIpLGUuYWJydXB0KCJyZXR1cm4iLFApO2Nhc2UgNDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXRBcHBlYXJhbmNlIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixvLHMpe3ZhciBjLHUsbCxoLGQscCxnLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLEgscSxHLHosVyxWLFksSyxKLFosUSxlZSx0ZTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAzOmlmKChjPXM/cy5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDApJiYodT1jLmZvcm1hdHRlZFZhbHVlfHxjLnZhbHVlLGw9Yy5yb3RhdGlvbiksdm9pZCAwIT09bHx8dm9pZCAwIT09dXx8dGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9ODticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkEmJiF0aGlzLmFwcGVhcmFuY2Upe2UubmV4dD04O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDg6aWYoaD10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhzKSx2b2lkIDAhPT11KXtlLm5leHQ9MTM7YnJlYWt9aWYodT10aGlzLmRhdGEuZmllbGRWYWx1ZSl7ZS5uZXh0PTEzO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIlEgRU1DIikpO2Nhc2UgMTM6aWYoQXJyYXkuaXNBcnJheSh1KSYmMT09PXUubGVuZ3RoJiYodT11WzBdKSwoMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiB1LCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpLHRoaXMuZGF0YS5jb21ibz8oZD10aGlzLmRhdGEub3B0aW9ucy5maW5kKChmdW5jdGlvbihlKXt2YXIgdD1lLmV4cG9ydFZhbHVlO3JldHVybiB1PT09dH0pKXx8dGhpcy5kYXRhLm9wdGlvbnNbMF0sdT1kJiZkLmRpc3BsYXlWYWx1ZXx8IiIpOnU9dS50cmltKCksIiIhPT11KXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiUSBFTUMiKSk7Y2FzZSAxODpyZXR1cm4gdm9pZCAwPT09bCYmKGw9dGhpcy5yb3RhdGlvbikscD0tMSx0aGlzLmRhdGEubXVsdGlMaW5lPyhnPXUuc3BsaXQoL1xyXG4/fFxuLykubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3JtYWxpemUoIk5GQyIpfSkpLHA9Zy5sZW5ndGgpOmc9W3UucmVwbGFjZSgvXHJcbj98XG4vLCIiKS5ub3JtYWxpemUoIk5GQyIpXSx2PTEseT0yLG09dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sYj10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSw5MCE9PWwmJjI3MCE9PWx8fChiPSh3PVttLGJdKVswXSxtPXdbMV0pLHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpLGUubmV4dD0yOSxmLl9nZXRGb250RGF0YSh0LHIsdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpO2Nhc2UgMjk6az1lLnNlbnQsRj1bXSxQPSExLEk9QShnKTt0cnl7Zm9yKEkucygpOyEoRT1JLm4oKSkuZG9uZTspaj1FLnZhbHVlLChNPWsuZW5jb2RlU3RyaW5nKGopKS5sZW5ndGg+MSYmKFA9ITApLEYucHVzaChNLmpvaW4oIiIpKX1jYXRjaChlKXtJLmUoZSl9ZmluYWxseXtJLmYoKX1pZighKFAmJm8mbi5SZW5kZXJpbmdJbnRlbnRGbGFnLlNBVkUpKXtlLm5leHQ9MzY7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtuZWVkQXBwZWFyYW5jZXM6ITB9KTtjYXNlIDM2OmlmKCFQfHwhdGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe2UubmV4dD01ODticmVha31pZihfPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixMPW5ldyBpLkZha2VVbmljb2RlRm9udCh0LnhyZWYsXyksUj1MLmNyZWF0ZUZvbnRSZXNvdXJjZXMoZy5qb2luKCIiKSksTj1SLmdldFJhdygiRm9udCIpLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5oYXMoIkZvbnQiKSl7RD10aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuZ2V0KCJGb250IiksQj1BKE4uZ2V0S2V5cygpKTt0cnl7Zm9yKEIucygpOyEoVT1CLm4oKSkuZG9uZTspJD1VLnZhbHVlLEQuc2V0KCQsTi5nZXRSYXcoJCkpfWNhdGNoKGUpe0IuZShlKX1maW5hbGx5e0IuZigpfX1lbHNlIHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5zZXQoIkZvbnQiLE4pO3JldHVybiBYPUwuZm9udE5hbWUubmFtZSxlLm5leHQ9NDUsZi5fZ2V0Rm9udERhdGEodCxyLHtmb250TmFtZTpYLGZvbnRTaXplOjB9LFIpO2Nhc2UgNDU6Zm9yKGs9ZS5zZW50LEg9MCxxPUYubGVuZ3RoO0g8cTtIKyspRltIXT0oMCxhLnN0cmluZ1RvVVRGMTZTdHJpbmcpKGdbSF0pO0c9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9MCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lPVgsej10aGlzLl9jb21wdXRlRm9udFNpemUobS0yKnYsYi0yKnksdSxrLHApLFc9VCh6LDMpLFM9V1swXSx4PVdbMV0sTz1XWzJdLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9RyxlLm5leHQ9NjQ7YnJlYWs7Y2FzZSA1ODp0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZHx8KDAsbi53YXJuKSgiX2dldEFwcGVhcmFuY2U6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBhbm5vdGF0aW9uIG1heSBub3QgcmVuZGVyIGNvcnJlY3RseS4iKSxWPXRoaXMuX2NvbXB1dGVGb250U2l6ZShtLTIqdixiLTIqeSx1LGsscCksWT1UKFYsMyksUz1ZWzBdLHg9WVsxXSxPPVlbMl07Y2FzZSA2NDppZihLPWsuZGVzY2VudCxLPWlzTmFOKEspP24uQkFTRUxJTkVfRkFDVE9SKk86TWF0aC5tYXgobi5CQVNFTElORV9GQUNUT1IqTyxNYXRoLmFicyhLKSp4KSxKPU1hdGgubWluKE1hdGguZmxvb3IoKG0teCkvMiksdiksWj10aGlzLmRhdGEudGV4dEFsaWdubWVudCwhdGhpcy5kYXRhLm11bHRpTGluZSl7ZS5uZXh0PTcwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9nZXRNdWx0aWxpbmVBcHBlYXJhbmNlKFMsRixrLHgsYixtLFoseSxKLEssTyxzKSk7Y2FzZSA3MDppZighdGhpcy5kYXRhLmNvbWIpe2UubmV4dD03MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fZ2V0Q29tYkFwcGVhcmFuY2UoUyxrLEZbMF0seCxiLG0seSxKLEssTyxzKSk7Y2FzZSA3MjppZihRPUorSywhKDA9PT1afHxaPjIpKXtlLm5leHQ9NzU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiQlQgIikrUysiIDEgMCAwIDEgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoeSksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUSksIiBUbSAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShGWzBdKSwiKSBUaiIpKyIgRVQgUSBFTUMiKTtjYXNlIDc1OnJldHVybiBlZT17c2hpZnQ6MH0sdGU9dGhpcy5fcmVuZGVyVGV4dChGWzBdLGsseCxiLFosZWUseSxRKSxlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIkJUICIpK1MrIiAxIDAgMCAxIDAgMCBUbSAiLmNvbmNhdCh0ZSkrIiBFVCBRIEVNQyIpO2Nhc2UgNzg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbixhKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2dldFRleHRXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5jaGFyc1RvR2x5cGhzKGUpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LndpZHRofSksMCkvMWUzfX0se2tleToiX2NvbXB1dGVGb250U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxvKXt2YXIgcz10aGlzLGM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZSx1PShjfHwxMikqbi5MSU5FX0ZBQ1RPUixsPU1hdGgucm91bmQoZS91KTtpZighYyl7dmFyIGY9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoMTAwKmUpLzEwMH07aWYoLTE9PT1vKXt2YXIgaD10aGlzLl9nZXRUZXh0V2lkdGgocixhKTtjPWYoTWF0aC5taW4oZS9uLkxJTkVfRkFDVE9SLGg+dD90L2g6MS8wKSksbD0xfWVsc2V7dmFyIGQscD1yLnNwbGl0KC9cclxuP3xcbi8pLGc9W10sdj1BKHApO3RyeXtmb3Iodi5zKCk7IShkPXYubigpKS5kb25lOyl7dmFyIHk9ZC52YWx1ZSxtPWEuZW5jb2RlU3RyaW5nKHkpLmpvaW4oIiIpLGI9YS5jaGFyc1RvR2x5cGhzKG0pLHc9YS5nZXRDaGFyUG9zaXRpb25zKG0pO2cucHVzaCh7bGluZTptLGdseXBoczpiLHBvc2l0aW9uczp3fSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXZhciBrPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wLGk9MCxvPWc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07aWYoKG4rPXMuX3NwbGl0TGluZShudWxsLGEscix0LGMpLmxlbmd0aCpyKT5lKXJldHVybiEwfXJldHVybiExfTtmb3IobD1NYXRoLm1heChsLG8pO2soYz1mKCh1PWUvbCkvbi5MSU5FX0ZBQ1RPUikpOylsKyt9dmFyIFM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx4PVMuZm9udE5hbWUsTz1TLmZvbnRDb2xvcjt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0oMCxpLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7Zm9udFNpemU6Yyxmb250TmFtZTp4LGZvbnRDb2xvcjpPfSl9cmV0dXJuW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLGMsZS9sXX19LHtrZXk6Il9yZW5kZXJUZXh0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMpe3ZhciB1O3U9MT09PWk/KG4tdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqcikvMjoyPT09aT9uLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKnItczpzO3ZhciBsPSgwLGEubnVtYmVyVG9TdHJpbmcpKHUtby5zaGlmdCk7cmV0dXJuIG8uc2hpZnQ9dSxjPSgwLGEubnVtYmVyVG9TdHJpbmcpKGMpLCIiLmNvbmNhdChsLCIgIikuY29uY2F0KGMsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShlKSwiKSBUaiIpfX0se2tleToiX2dldFNhdmVGaWVsZFJlc291cmNlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZmllbGRSZXNvdXJjZXMscj10LmxvY2FsUmVzb3VyY2VzLG49dC5hcHBlYXJhbmNlUmVzb3VyY2VzLGE9dC5hY3JvRm9ybVJlc291cmNlcyxpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEmJnRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udE5hbWU7aWYoIWkpcmV0dXJuIHJ8fG8uRGljdC5lbXB0eTtmb3IodmFyIHM9MCxjPVtyLG5dO3M8Yy5sZW5ndGg7cysrKXt2YXIgdT1jW3NdO2lmKHUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBsPXUuZ2V0KCJGb250Iik7aWYobCBpbnN0YW5jZW9mIG8uRGljdCYmbC5oYXMoaSkpcmV0dXJuIHV9fWlmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBmPWEuZ2V0KCJGb250Iik7aWYoZiBpbnN0YW5jZW9mIG8uRGljdCYmZi5oYXMoaSkpe3ZhciBoPW5ldyBvLkRpY3QoZSk7aC5zZXQoaSxmLmdldFJhdyhpKSk7dmFyIGQ9bmV3IG8uRGljdChlKTtyZXR1cm4gZC5zZXQoIkZvbnQiLGgpLG8uRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbZCxyXSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiByfHxvLkRpY3QuZW1wdHl9fSx7a2V5OiJnZXRGaWVsZE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSxbe2tleToiX2dldEZvbnREYXRhIix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpLHMsYyx1O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGk9bmV3IHAuT3BlcmF0b3JMaXN0LHM9e2ZvbnQ6bnVsbCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sYz1uLmZvbnROYW1lLHU9bi5mb250U2l6ZSxlLm5leHQ9NSx0LmhhbmRsZVNldEZvbnQoYSxbYyYmby5OYW1lLmdldChjKSx1XSxudWxsLGkscixzLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscy5mb250KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksZn0oVSkscT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBpO2oodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlKSkuX2hhc1RleHQ9ITA7dmFyIG89ZS5kaWN0OyJzdHJpbmciIT10eXBlb2YgaS5kYXRhLmZpZWxkVmFsdWUmJihpLmRhdGEuZmllbGRWYWx1ZT0iIik7dmFyIHM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpvLGtleToiUSJ9KTsoIU51bWJlci5pc0ludGVnZXIocyl8fHM8MHx8cz4yKSYmKHM9bnVsbCksaS5kYXRhLnRleHRBbGlnbm1lbnQ9czt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Om8sa2V5OiJNYXhMZW4ifSk7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGMpfHxjPDApJiYoYz0wKSxpLmRhdGEubWF4TGVuPWMsaS5kYXRhLm11bHRpTGluZT1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSxpLmRhdGEuY29tYj1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQikmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSYmIWkuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRklMRVNFTEVDVCkmJjAhPT1pLmRhdGEubWF4TGVuLGkuZGF0YS5kb05vdFNjcm9sbD1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRE9OT1RTQ1JPTEwpLGl9cmV0dXJuIF8ocixbe2tleToiX2dldENvbWJBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMsdSxsLGYpe3ZhciBoLGQ9aS90aGlzLmRhdGEubWF4TGVuLHA9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoZiksZz1bXSx2PUEodC5nZXRDaGFyUG9zaXRpb25zKHIpKTt0cnl7Zm9yKHYucygpOyEoaD12Lm4oKSkuZG9uZTspe3ZhciB5PVQoaC52YWx1ZSwyKSxtPXlbMF0sYj15WzFdO2cucHVzaCgiKCIuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShyLnN1YnN0cmluZyhtLGIpKSwiKSBUaiIpKX19Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9dmFyIHc9Zy5qb2luKCIgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoZCksIiAwIFRkICIpKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KHAsIkJUICIpK2UrIiAxIDAgMCAxICIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKHMpLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKGMrdSksIiBUbSAiKS5jb25jYXQodykrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixpLG8scyxjLHUsbCxmLGgpe2Zvcih2YXIgZD1bXSxwPWktMipjLGc9e3NoaWZ0OjB9LHY9MCx5PXQubGVuZ3RoO3Y8eTt2KyspZm9yKHZhciBtPXRbdl0sYj10aGlzLl9zcGxpdExpbmUobSxyLG4scCksdz0wLGs9Yi5sZW5ndGg7dzxrO3crKyl7dmFyIFM9Ylt3XSx4PTA9PT12JiYwPT09dz8tdS0oZi1sKTotZjtkLnB1c2godGhpcy5fcmVuZGVyVGV4dChTLHIsbixpLHMsZyxjLHgpKX12YXIgTz10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhoKSxBPWQuam9pbigiXG4iKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KE8sIkJUICIpK2UrIiAxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykobyksIiBUbSAiKS5jb25jYXQoQSkrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfc3BsaXRMaW5lIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e307ZT1hLmxpbmV8fGU7dmFyIGk9YS5nbHlwaHN8fHQuY2hhcnNUb0dseXBocyhlKTtpZihpLmxlbmd0aDw9MSlyZXR1cm5bZV07Zm9yKHZhciBvPWEucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSkscz1yLzFlMyxjPVtdLHU9LTEsbD0tMSxmPS0xLGg9MCxkPTAscD0wLGc9aS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9VChvW3BdLDIpLHk9dlswXSxtPXZbMV0sYj1pW3BdLHc9Yi53aWR0aCpzOyIgIj09PWIudW5pY29kZT9kK3c+bj8oYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcsdT0tMSxmPS0xKTooZCs9dyx1PXksbD1tLGY9cCk6ZCt3Pm4/LTEhPT11PyhjLnB1c2goZS5zdWJzdHJpbmcoaCxsKSksaD1sLHA9ZisxLHU9LTEsZD0wKTooYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcpOmQrPXd9cmV0dXJuIGg8ZS5sZW5ndGgmJmMucHVzaChlLnN1YnN0cmluZyhoLGUubGVuZ3RoKSksY319LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWUsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZXx8IiIsbXVsdGlsaW5lOnRoaXMuZGF0YS5tdWx0aUxpbmUscGFzc3dvcmQ6dGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZToidGV4dCJ9fX1dKSxyfShIKSxHPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGksYyx1PXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtyZXR1cm4gaih0aGlzLGYpLCh0PXUuY2FsbCh0aGlzLGUpKS5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQudW5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQuZGF0YS5jaGVja0JveD0hdC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucmFkaW9CdXR0b249dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucHVzaEJ1dHRvbj10Lmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTiksdC5kYXRhLmlzVG9vbHRpcE9ubHk9ITEsdC5kYXRhLmNoZWNrQm94P3QuX3Byb2Nlc3NDaGVja0JveChlKTp0LmRhdGEucmFkaW9CdXR0b24/dC5fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpOnQuZGF0YS5wdXNoQnV0dG9uPyh0LmRhdGEuaGFzT3duQ2FudmFzPSEwLHQuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpKTooMCxuLndhcm4pKCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb24iKSx0fXJldHVybiBfKGYsW3trZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLG8pe3ZhciBzLGMsdSxsLGgsZCxnO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5wdXNoQnV0dG9uKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIseSh4KGYucHJvdG90eXBlKSwiZ2V0T3BlcmF0b3JMaXN0Iix0aGlzKS5jYWxsKHRoaXMsdCxyLGEsITEsbykpO2Nhc2UgMjppZihzPW51bGwsYz1udWxsLG8mJih1PW8uZ2V0KHRoaXMuZGF0YS5pZCkscz11P3UudmFsdWU6bnVsbCxjPXU/dS5yb3RhdGlvbjpudWxsKSxudWxsIT09c3x8IXRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNzppZihudWxsPT1zJiYocz10aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWUpLCEobD1zP3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U6dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSl7ZS5uZXh0PTE4O2JyZWFrfXJldHVybiBoPXRoaXMuYXBwZWFyYW5jZSxkPWwuZGljdC5nZXRBcnJheSgiTWF0cml4Iil8fG4uSURFTlRJVFlfTUFUUklYLGMmJmwuZGljdC5zZXQoIk1hdHJpeCIsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSksdGhpcy5hcHBlYXJhbmNlPWwsZz15KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pLHRoaXMuYXBwZWFyYW5jZT1oLGwuZGljdC5zZXQoIk1hdHJpeCIsZCksZS5hYnJ1cHQoInJldHVybiIsZyk7Y2FzZSAxODpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSl7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOihpPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5jaGVja0JveCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3NhdmVDaGVja2JveCh0LHIsbikpO2Nhc2UgMjppZighdGhpcy5kYXRhLnJhZGlvQnV0dG9uKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fc2F2ZVJhZGlvQnV0dG9uKHQscixuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlQ2hlY2tib3giLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjppZihpPWEuZ2V0KHRoaXMuZGF0YS5pZCksYz1pJiZpLnJvdGF0aW9uLHU9aSYmaS52YWx1ZSx2b2lkIDAhPT1jKXtlLm5leHQ9MTE7YnJlYWt9aWYodm9pZCAwIT09dSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgODppZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZSE9PXUpe2UubmV4dD0xMTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxMTppZigobD10LnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxNDpyZXR1cm4gdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksdm9pZCAwPT09dSYmKHU9dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpLGY9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykobC5nZXQoIlQiKXx8IiIpLHZhbHVlOnU/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiIifSxoPW8uTmFtZS5nZXQodT90aGlzLmRhdGEuZXhwb3J0VmFsdWU6Ik9mZiIpLGwuc2V0KCJWIixoKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoZD10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLGQpLHA9dC54cmVmLmVuY3J5cHQsZz1udWxsLHAmJihnPXAuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSx2PVsiIi5jb25jYXQodGhpcy5yZWYubnVtLCIgIikuY29uY2F0KHRoaXMucmVmLmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShsLHYsZyksdi5wdXNoKCJcbmVuZG9ialxuIiksZS5hYnJ1cHQoInJldHVybiIsW3tyZWY6dGhpcy5yZWYsZGF0YTp2LmpvaW4oIiIpLHhmYTpmfV0pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlUmFkaW9CdXR0b24iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihhKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAyOmlmKGk9YS5nZXQodGhpcy5kYXRhLmlkKSxjPWkmJmkucm90YXRpb24sdT1pJiZpLnZhbHVlLHZvaWQgMCE9PWMpe2UubmV4dD0xMTticmVha31pZih2b2lkIDAhPT11KXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSA4OmlmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlIT09dSl7ZS5uZXh0PTExO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDExOmlmKChsPXQueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTE0O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDE0OnJldHVybiB2b2lkIDA9PT11JiYodT10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSksdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksZj17cGF0aDooMCxuLnN0cmluZ1RvUERGU3RyaW5nKShsLmdldCgiVCIpfHwiIiksdmFsdWU6dT90aGlzLmRhdGEuYnV0dG9uVmFsdWU6IiJ9LGg9by5OYW1lLmdldCh1P3RoaXMuZGF0YS5idXR0b25WYWx1ZToiT2ZmIiksZD1udWxsLHA9dC54cmVmLmVuY3J5cHQsdSYmKHRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5SZWY/KGc9dC54cmVmLmZldGNoKHRoaXMucGFyZW50KSx2PW51bGwscCYmKHY9cC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5wYXJlbnQubnVtLHRoaXMucGFyZW50LmdlbikpLGcuc2V0KCJWIixoKSxkPVsiIi5jb25jYXQodGhpcy5wYXJlbnQubnVtLCIgIikuY29uY2F0KHRoaXMucGFyZW50LmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShnLGQsdiksZC5wdXNoKCJcbmVuZG9ialxuIikpOnRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5EaWN0JiZ0aGlzLnBhcmVudC5zZXQoIlYiLGgpKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoeT10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLHkpLG09bnVsbCxwJiYobT1wLmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKSksYj1bIiIuY29uY2F0KHRoaXMucmVmLm51bSwiICIpLmNvbmNhdCh0aGlzLnJlZi5nZW4sIiBvYmpcbiIpXSwoMCxzLndyaXRlRGljdCkobCxiLG0pLGIucHVzaCgiXG5lbmRvYmpcbiIpLHc9W3tyZWY6dGhpcy5yZWYsZGF0YTpiLmpvaW4oIiIpLHhmYTpmfV0sbnVsbCE9PWQmJncucHVzaCh7cmVmOnRoaXMucGFyZW50LGRhdGE6ZC5qb2luKCIiKSx4ZmE6bnVsbH0pLGUuYWJydXB0KCJyZXR1cm4iLHcpO2Nhc2UgMzM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxzPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLGM9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sdT1bMCwwLHMsY10sbD0uOCpNYXRoLm1pbihzLGMpOyJjaGVjayI9PT10PyhyPXt3aWR0aDouNzU1KmwsaGVpZ2h0Oi43MDUqbH0saT0iMyIpOiJkaXNjIj09PXQ/KHI9e3dpZHRoOi43OTEqbCxoZWlnaHQ6LjcwNSpsfSxpPSJsIik6KDAsbi51bnJlYWNoYWJsZSkoIl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UgLSB1bnN1cHBvcnRlZCB0eXBlOiAiLmNvbmNhdCh0KSk7dmFyIGY9KDAsYS5udW1iZXJUb1N0cmluZykoKHMtci53aWR0aCkvMiksaD0oMCxhLm51bWJlclRvU3RyaW5nKSgoYy1yLmhlaWdodCkvMiksZD0icSBCVCAvUGRmSnNaYURiICIuY29uY2F0KGwsIiBUZiAwIGcgIikuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIFRkICgiKS5jb25jYXQoaSwiKSBUaiBFVCBRIikscD1uZXcgby5EaWN0KGUueHJlZik7cC5zZXQoIkZvcm1UeXBlIiwxKSxwLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiRm9ybSIpKSxwLnNldCgiVHlwZSIsby5OYW1lLmdldCgiWE9iamVjdCIpKSxwLnNldCgiQkJveCIsdSkscC5zZXQoIk1hdHJpeCIsWzEsMCwwLDEsMCwwXSkscC5zZXQoIkxlbmd0aCIsZC5sZW5ndGgpO3ZhciB2PW5ldyBvLkRpY3QoZS54cmVmKSx5PW5ldyBvLkRpY3QoZS54cmVmKTt5LnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpLHYuc2V0KCJGb250Iix5KSxwLnNldCgiUmVzb3VyY2VzIix2KSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBnLlN0cmluZ1N0cmVhbShkKSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3Q9cCx0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSl9fSx7a2V5OiJfcHJvY2Vzc0NoZWNrQm94Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIG49dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgbiYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPW4pO3ZhciBhPW51bGwhPT10aGlzLmRhdGEuZmllbGRWYWx1ZSYmIk9mZiIhPT10aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZToiWWVzIixpPXIuZ2V0S2V5cygpO2lmKDA9PT1pLmxlbmd0aClpLnB1c2goIk9mZiIsYSk7ZWxzZSBpZigxPT09aS5sZW5ndGgpIk9mZiI9PT1pWzBdP2kucHVzaChhKTppLnVuc2hpZnQoIk9mZiIpO2Vsc2UgaWYoaS5pbmNsdWRlcyhhKSlpLmxlbmd0aD0wLGkucHVzaCgiT2ZmIixhKTtlbHNle3ZhciBzPWkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIk9mZiIhPT1lfSkpO2kubGVuZ3RoPTAsaS5wdXNoKCJPZmYiLHMpfWkuaW5jbHVkZXModGhpcy5kYXRhLmZpZWxkVmFsdWUpfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9Ik9mZiIpLHRoaXMuZGF0YS5leHBvcnRWYWx1ZT1pWzFdLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQodGhpcy5kYXRhLmV4cG9ydFZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJjaGVjayIpLHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSksdGhpcy5fZmFsbGJhY2tGb250RGljdD10aGlzLmZhbGxiYWNrRm9udERpY3R9fX19LHtrZXk6Il9wcm9jZXNzUmFkaW9CdXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuZGF0YS5idXR0b25WYWx1ZT1udWxsO3ZhciB0PWUuZGljdC5nZXQoIlBhcmVudCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3RoaXMucGFyZW50PWUuZGljdC5nZXRSYXcoIlBhcmVudCIpO3ZhciByPXQuZ2V0KCJWIik7ciBpbnN0YW5jZW9mIG8uTmFtZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShyKSl9dmFyIG49ZS5kaWN0LmdldCgiQVAiKTtpZihuIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgYT1uLmdldCgiTiIpO2lmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBpLHM9QShhLmdldEtleXMoKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO2lmKCJPZmYiIT09Yyl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShjKTticmVha319fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJkaXNjIiksdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSx0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdH19fX0se2tleToiX3Byb2Nlc3NQdXNoQnV0dG9uIix2YWx1ZTpmdW5jdGlvbihlKXtlLmRpY3QuaGFzKCJBIil8fGUuZGljdC5oYXMoIkFBIil8fHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQ/KHRoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSFlLmRpY3QuaGFzKCJBIikmJiFlLmRpY3QuaGFzKCJBQSIpLGwuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOmUuYXR0YWNobWVudHN9KSk6KDAsbi53YXJuKSgiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfX0se2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0iYnV0dG9uIjtyZXR1cm4gdGhpcy5kYXRhLmNoZWNrQm94Pyh0PSJjaGVja2JveCIsZT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpOnRoaXMuZGF0YS5yYWRpb0J1dHRvbiYmKHQ9InJhZGlvYnV0dG9uIixlPXRoaXMuZGF0YS5idXR0b25WYWx1ZSkse2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZXx8Ik9mZiIsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxleHBvcnRWYWx1ZXM6ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6dH19fSx7a2V5OiJmYWxsYmFja0ZvbnREaWN0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgby5EaWN0O3JldHVybiBlLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIlphcGZEaW5nYmF0cyIpKSxlLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpLGUuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHNFbmNvZGluZyIpKSwoMCxuLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGZ9KEgpLHo9ZnVuY3Rpb24oZSl7bShvLGUpO3ZhciB0LHI9dyhvKTtmdW5jdGlvbiBvKGUpe3ZhciB0O2oodGhpcyxvKSx0PXIuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZjt0LmRhdGEub3B0aW9ucz1bXTt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Omksa2V5OiJPcHQifSk7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIHU9MCxsPWMubGVuZ3RoO3U8bDt1Kyspe3ZhciBmPXMuZmV0Y2hJZlJlZihjW3VdKSxoPUFycmF5LmlzQXJyYXkoZik7dC5kYXRhLm9wdGlvbnNbdV09e2V4cG9ydFZhbHVlOnQuX2RlY29kZUZvcm1WYWx1ZShoP3MuZmV0Y2hJZlJlZihmWzBdKTpmKSxkaXNwbGF5VmFsdWU6dC5fZGVjb2RlRm9ybVZhbHVlKGg/cy5mZXRjaElmUmVmKGZbMV0pOmYpfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQuZGF0YS5maWVsZFZhbHVlP3QuZGF0YS5maWVsZFZhbHVlPVt0LmRhdGEuZmllbGRWYWx1ZV06dC5kYXRhLmZpZWxkVmFsdWV8fCh0LmRhdGEuZmllbGRWYWx1ZT1bXSksdC5kYXRhLmNvbWJvPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CTyksdC5kYXRhLm11bHRpU2VsZWN0PXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSVNFTEVDVCksdC5faGFzVGV4dD0hMCx0fXJldHVybiBfKG8sW3trZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5jb21ibz8iY29tYm9ib3giOiJsaXN0Ym94Iix0PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wP3RoaXMuZGF0YS5maWVsZFZhbHVlWzBdOm51bGw7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0LGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxudW1JdGVtczp0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGgsbXVsdGlwbGVTZWxlY3Rpb246dGhpcy5kYXRhLm11bHRpU2VsZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsaXRlbXM6dGhpcy5kYXRhLm9wdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6ZX19fSx7a2V5OiJfZ2V0QXBwZWFyYW5jZSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxzKXt2YXIgYyx1LGwsZixoLGQscCxnLHYsbSxiLHcsayxTLE8sRixQLEksRSxqLE0sXyxMLFIsTixELEIsVSwkLFgscSxHLHosVyxWLFksSztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmRhdGEuY29tYm8pe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoby5wcm90b3R5cGUpLCJfZ2V0QXBwZWFyYW5jZSIsdGhpcykuY2FsbCh0aGlzLHQscixhLHMpKTtjYXNlIDI6aWYoKGw9cz9zLmdldCh0aGlzLmRhdGEuaWQpOnZvaWQgMCkmJih1PWwucm90YXRpb24sYz1sLnZhbHVlKSx2b2lkIDAhPT11fHx2b2lkIDAhPT1jfHx0aGlzLl9uZWVkQXBwZWFyYW5jZXMpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6Zm9yKHZvaWQgMD09PWM/Yz10aGlzLmRhdGEuZmllbGRWYWx1ZTpBcnJheS5pc0FycmF5KGMpfHwoYz1bY10pLGY9MSxoPTIsZD10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxwPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLDkwIT09dSYmMjcwIT09dXx8KHA9KGc9W2QscF0pWzBdLGQ9Z1sxXSksdj10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsbT1bXSxiPTA7Yjx2O2IrKyl3PXRoaXMuZGF0YS5vcHRpb25zW2JdLmV4cG9ydFZhbHVlLGMuaW5jbHVkZXModykmJm0ucHVzaChiKTtyZXR1cm4gdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSksZS5uZXh0PTE4LEguX2dldEZvbnREYXRhKHQscix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7Y2FzZSAxODppZihrPWUuc2VudCxPPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemUpUz10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtlbHNle0Y9KGQtZikvdixQPS0xLEU9QSh0aGlzLmRhdGEub3B0aW9ucyk7dHJ5e2ZvcihFLnMoKTshKGo9RS5uKCkpLmRvbmU7KU09ai52YWx1ZS5kaXNwbGF5VmFsdWUsKF89dGhpcy5fZ2V0VGV4dFdpZHRoKE0saykpPlAmJihQPV8sST1NKX1jYXRjaChlKXtFLmUoZSl9ZmluYWxseXtFLmYoKX1MPXRoaXMuX2NvbXB1dGVGb250U2l6ZShGLHAtMipoLEksaywtMSksUj1UKEwsMiksUz1SWzBdLE89UlsxXX1pZihOPU8qbi5MSU5FX0ZBQ1RPUixEPShOLU8pLzIsQj1NYXRoLmZsb29yKGQvTiksMT09PW0ubGVuZ3RoPygkPW1bMF0sVT0kLSQlQik6VT1tLmxlbmd0aD9tWzBdOjAsWD1NYXRoLm1pbihVK0IrMSx2KSxxPVsiL1R4IEJNQyBxIiwiMSAxICIuY29uY2F0KHAsIiAiKS5jb25jYXQoZCwiIHJlIFcgbiIpXSxtLmxlbmd0aCl7cS5wdXNoKCIwLjYwMDAwNiAwLjc1Njg2NiAwLjg1NDkwNCByZyIpLEc9QShtKTt0cnl7Zm9yKEcucygpOyEoej1HLm4oKSkuZG9uZTspVz16LnZhbHVlLFU8PVcmJlc8WCYmcS5wdXNoKCIxICIuY29uY2F0KGQtKFctVSsxKSpOLCIgIikuY29uY2F0KHAsIiAiKS5jb25jYXQoTiwiIHJlIGYiKSl9Y2F0Y2goZSl7Ry5lKGUpfWZpbmFsbHl7Ry5mKCl9fWZvcihxLnB1c2goIkJUIixTLCIxIDAgMCAxIDAgIi5jb25jYXQoZCwiIFRtIikpLFY9e3NoaWZ0OjB9LGI9VTtiPFg7YisrKVk9dGhpcy5kYXRhLm9wdGlvbnNbYl0uZGlzcGxheVZhbHVlLEs9Yj09PVU/RDowLHEucHVzaCh0aGlzLl9yZW5kZXJUZXh0KFksayxPLHAsMCxWLGgsLU4rSykpO3JldHVybiBxLnB1c2goIkVUIFEgRU1DIiksZS5hYnJ1cHQoInJldHVybiIscS5qb2luKCJcbiIpKTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksb30oSCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBqKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmRhdGEuZmllbGRWYWx1ZT1udWxsLG59cmV0dXJuIF8ocixbe2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19XSkscn0oSCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdDtyZXR1cm4gYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVEVYVCxhLmRhdGEuaGFzQXBwZWFyYW5jZT9hLmRhdGEubmFtZT0iTm9JY29uIjooYS5kYXRhLnJlY3RbMV09YS5kYXRhLnJlY3RbM10tMjIsYS5kYXRhLnJlY3RbMl09YS5kYXRhLnJlY3RbMF0rMjIsYS5kYXRhLm5hbWU9aS5oYXMoIk5hbWUiKT9pLmdldCgiTmFtZSIpLm5hbWU6Ik5vdGUiKSxpLmhhcygiU3RhdGUiKT8oYS5kYXRhLnN0YXRlPWkuZ2V0KCJTdGF0ZSIpfHxudWxsLGEuZGF0YS5zdGF0ZU1vZGVsPWkuZ2V0KCJTdGF0ZU1vZGVsIil8fG51bGwpOihhLmRhdGEuc3RhdGU9bnVsbCxhLmRhdGEuc3RhdGVNb2RlbD1udWxsKSxhfXJldHVybiBfKHIpfShYKSxZPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuTElOSzt2YXIgaT1EKGUuZGljdCxhLnJlY3RhbmdsZSk7cmV0dXJuIGkmJihhLmRhdGEucXVhZFBvaW50cz1pKSxhLmRhdGEuYm9yZGVyQ29sb3I9YS5kYXRhLmJvcmRlckNvbG9yfHxhLmRhdGEuY29sb3IsbC5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUuZGljdCxyZXN1bHRPYmo6YS5kYXRhLGRvY0Jhc2VVcmw6ZS5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwsZG9jQXR0YWNobWVudHM6ZS5hdHRhY2htZW50c30pLGF9cmV0dXJuIF8ocil9KFUpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Q7YS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuUE9QVVA7dmFyIHM9aS5nZXQoIlBhcmVudCIpO2lmKCFzKXJldHVybigwLG4ud2FybikoIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpLGsoYSk7dmFyIGM9cy5nZXQoIlN1YnR5cGUiKTthLmRhdGEucGFyZW50VHlwZT1jIGluc3RhbmNlb2Ygby5OYW1lP2MubmFtZTpudWxsO3ZhciB1PWkuZ2V0UmF3KCJQYXJlbnQiKTthLmRhdGEucGFyZW50SWQ9dSBpbnN0YW5jZW9mIG8uUmVmP3UudG9TdHJpbmcoKTpudWxsO3ZhciBsPXMuZ2V0QXJyYXkoIlJlY3QiKTtBcnJheS5pc0FycmF5KGwpJiY0PT09bC5sZW5ndGg/YS5kYXRhLnBhcmVudFJlY3Q9bi5VdGlsLm5vcm1hbGl6ZVJlY3QobCk6YS5kYXRhLnBhcmVudFJlY3Q9WzAsMCwwLDBdO3ZhciBmPXMuZ2V0KCJSVCIpO2lmKCgwLG8uaXNOYW1lKShmLG4uQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCkmJihzPXMuZ2V0KCJJUlQiKSkscy5oYXMoIk0iKT8oYS5zZXRNb2RpZmljYXRpb25EYXRlKHMuZ2V0KCJNIikpLGEuZGF0YS5tb2RpZmljYXRpb25EYXRlPWEubW9kaWZpY2F0aW9uRGF0ZSk6YS5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCxzLmhhcygiQyIpPyhhLnNldENvbG9yKHMuZ2V0QXJyYXkoIkMiKSksYS5kYXRhLmNvbG9yPWEuY29sb3IpOmEuZGF0YS5jb2xvcj1udWxsLCFhLnZpZXdhYmxlKXt2YXIgaD1zLmdldCgiRiIpO2EuX2lzVmlld2FibGUoaCkmJmEuc2V0RmxhZ3MoaCl9cmV0dXJuIGEuc2V0VGl0bGUocy5nZXQoIlQiKSksYS5kYXRhLnRpdGxlT2JqPWEuX3RpdGxlLGEuc2V0Q29udGVudHMocy5nZXQoIkNvbnRlbnRzIikpLGEuZGF0YS5jb250ZW50c09iaj1hLl9jb250ZW50cyxzLmhhcygiUkMiKSYmKGEuZGF0YS5yaWNoVGV4dD12LlhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwocy5nZXQoIlJDIikpKSxhfXJldHVybiBfKHIpfShVKTt0LlBvcHVwQW5ub3RhdGlvbj1LO3ZhciBKPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLnhyZWY7aWYodC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQsdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSwhdC5hcHBlYXJhbmNlJiZ0Ll9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7dmFyIG89bmV3IGkuRmFrZVVuaWNvZGVGb250KGEsInNhbnMtc2VyaWYiKSxjPXQuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7dC5hcHBlYXJhbmNlPW8uY3JlYXRlQXBwZWFyYW5jZSh0Ll9jb250ZW50cy5zdHIsdC5yZWN0YW5nbGUsdC5yb3RhdGlvbixjLmZvbnRTaXplfHwxMCxjLmZvbnRDb2xvciksdC5fc3RyZWFtcy5wdXNoKHQuYXBwZWFyYW5jZSxpLkZha2VVbmljb2RlRm9udC50b1VuaWNvZGVTdHJlYW0pfWVsc2UgdC5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR8fCgwLG4ud2FybikoIkZyZWVUZXh0QW5ub3RhdGlvbjogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpO3JldHVybiB0fXJldHVybiBfKHMsW3trZXk6Imhhc1RleHRDb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYXBwZWFyYW5jZX19XSxbe2tleToiY3JlYXRlTmV3RGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXIuYXBSZWYsYz1yLmFwLHU9ZS5jb2xvcixsPWUuZm9udFNpemUsZj1lLnJlY3QsaD1lLnJvdGF0aW9uLGQ9ZS51c2VyLHA9ZS52YWx1ZSxnPW5ldyBvLkRpY3QodCk7Zy5zZXQoIlR5cGUiLG8uTmFtZS5nZXQoIkFubm90IikpLGcuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGcmVlVGV4dCIpKSxnLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxnLnNldCgiUmVjdCIsZik7dmFyIHY9Ii9IZWx2ICIuY29uY2F0KGwsIiBUZiAiKS5jb25jYXQoKDAsaS5nZXRQZGZDb2xvcikodSwhMCkpO2lmKGcuc2V0KCJEQSIsdiksZy5zZXQoIkNvbnRlbnRzIiwoMCxhLmlzQXNjaWkpKHApP3A6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShwLCEwKSksZy5zZXQoIkYiLDQpLGcuc2V0KCJCb3JkZXIiLFswLDAsMF0pLGcuc2V0KCJSb3RhdGUiLGgpLGQmJmcuc2V0KCJUIiwoMCxhLmlzQXNjaWkpKGQpP2Q6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShkLCEwKSksc3x8Yyl7dmFyIHk9bmV3IG8uRGljdCh0KTtnLnNldCgiQVAiLHkpLHM/eS5zZXQoIk4iLHMpOnkuc2V0KCJOIixjKX1yZXR1cm4gZ319LHtrZXk6ImNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLHMpe3ZhciBjLHUsbCxmLGgsZCxwLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLHEsRyx6LFcsVixZLEssSixaLFEsZWUsdGUscmUsbmUsYWUsaWUsb2Usc2U7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gYz1zLmJhc2VGb250UmVmLHU9cy5ldmFsdWF0b3IsbD1zLnRhc2ssZj10LmNvbG9yLGg9dC5mb250U2l6ZSxkPXQucmVjdCxwPXQucm90YXRpb24sdj10LnZhbHVlLHk9bmV3IG8uRGljdChyKSxtPW5ldyBvLkRpY3QociksYz9tLnNldCgiSGVsdiIsYyk6KChiPW5ldyBvLkRpY3QocikpLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIkhlbHZldGljYSIpKSxiLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRm9udCIpKSxiLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiVHlwZTEiKSksYi5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSksbS5zZXQoIkhlbHYiLGIpKSx5LnNldCgiRm9udCIsbSksZS5uZXh0PTgsSC5fZ2V0Rm9udERhdGEodSxsLHtmb250TmFtZToiSGVsdmV0aWNhIixmb250U2l6ZTpofSx5KTtjYXNlIDg6dz1lLnNlbnQsaz1UKGQsNCksUz1rWzBdLHg9a1sxXSxPPWtbMl0sRj1rWzNdLFA9Ty1TLEk9Ri14LHAlMTgwIT0wJiYoUD0oRT1bSSxQXSlbMF0sST1FWzFdKSxqPXYuc3BsaXQoIlxuIiksTT1oLzFlMyxfPS0xLzAsTD1bXSxSPUEoaiksZS5wcmV2PTE4LFIucygpO2Nhc2UgMjA6aWYoKE49Ui5uKCkpLmRvbmUpe2UubmV4dD0zNDticmVha31pZihEPU4udmFsdWUsISgoQj13LmVuY29kZVN0cmluZyhEKSkubGVuZ3RoPjEpKXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6RD1CLmpvaW4oIiIpLEwucHVzaChEKSxVPTAsJD13LmNoYXJzVG9HbHlwaHMoRCksWD1BKCQpO3RyeXtmb3IoWC5zKCk7IShxPVgubigpKS5kb25lOylHPXEudmFsdWUsVSs9Ry53aWR0aCpNfWNhdGNoKGUpe1guZShlKX1maW5hbGx5e1guZigpfV89TWF0aC5tYXgoXyxVKTtjYXNlIDMyOmUubmV4dD0yMDticmVhaztjYXNlIDM0OmUubmV4dD0zOTticmVhaztjYXNlIDM2OmUucHJldj0zNixlLnQwPWUuY2F0Y2goMTgpLFIuZShlLnQwKTtjYXNlIDM5OnJldHVybiBlLnByZXY9MzksUi5mKCksZS5maW5pc2goMzkpO2Nhc2UgNDI6Zm9yKHo9MSxfPlAmJih6PVAvXyksVz0xLFY9bi5MSU5FX0ZBQ1RPUipoLFk9bi5MSU5FX0RFU0NFTlRfRkFDVE9SKmgsKEs9VipqLmxlbmd0aCk+SSYmKFc9SS9LKSxKPU1hdGgubWluKHosVyksWj1oKkosUT1bInEiLCIwIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUCksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSSksIiByZSBXIG4iKSwiQlQiLCIxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSStZKSwiIFRtIDAgVGMgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKGYsITApKSwiL0hlbHYgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoWiksIiBUZiIpXSxlZT0oMCxhLm51bWJlclRvU3RyaW5nKShWKSx0ZT0wLHJlPUw7dGU8cmUubGVuZ3RoO3RlKyspbmU9cmVbdGVdLFEucHVzaCgiMCAtIi5jb25jYXQoZWUsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShuZSksIikgVGoiKSk7cmV0dXJuIFEucHVzaCgiRVQiLCJRIiksYWU9US5qb2luKCJcbiIpLChpZT1uZXcgby5EaWN0KHIpKS5zZXQoIkZvcm1UeXBlIiwxKSxpZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksaWUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLGllLnNldCgiQkJveCIsWzAsMCxQLEldKSxpZS5zZXQoIkxlbmd0aCIsYWUubGVuZ3RoKSxpZS5zZXQoIlJlc291cmNlcyIseSkscCYmKG9lPSgwLGEuZ2V0Um90YXRpb25NYXRyaXgpKHAsUCxJKSxpZS5zZXQoIk1hdHJpeCIsb2UpKSwoc2U9bmV3IGcuU3RyaW5nU3RyZWFtKGFlKSkuZGljdD1pZSxlLmFicnVwdCgicmV0dXJuIixzZSk7Y2FzZSA2NzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzE4LDM2LDM5LDQyXV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksc30oWCksWj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5MSU5FO3ZhciBzPWkuZ2V0QXJyYXkoIkwiKTtpZihhLmRhdGEubGluZUNvb3JkaW5hdGVzPW4uVXRpbC5ub3JtYWxpemVSZWN0KHMpLGEuc2V0TGluZUVuZGluZ3MoaS5nZXRBcnJheSgiTEUiKSksYS5kYXRhLmxpbmVFbmRpbmdzPWEubGluZUVuZGluZ3MsIWEuYXBwZWFyYW5jZSl7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sdT1pLmdldCgiQ0EiKSxsPVIoaS5nZXRBcnJheSgiSUMiKSxudWxsKSxmPWw/TihsKTpudWxsLGg9Zj91Om51bGwsZD1hLmJvcmRlclN0eWxlLndpZHRofHwxLHA9MipkLGc9W2EuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0tcCxhLmRhdGEubGluZUNvb3JkaW5hdGVzWzFdLXAsYS5kYXRhLmxpbmVDb29yZGluYXRlc1syXStwLGEuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10rcF07bi5VdGlsLmludGVyc2VjdChhLnJlY3RhbmdsZSxnKXx8KGEucmVjdGFuZ2xlPWcpLGEuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOm8sZXh0cmE6IiIuY29uY2F0KGQsIiB3Iiksc3Ryb2tlQ29sb3I6YyxmaWxsQ29sb3I6ZixzdHJva2VBbHBoYTp1LGZpbGxBbHBoYTpoLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoc1swXSwiICIpLmNvbmNhdChzWzFdLCIgbSIpLCIiLmNvbmNhdChzWzJdLCIgIikuY29uY2F0KHNbM10sIiBsIiksIlMiKSxbdFswXS54LWQsdFsxXS54K2QsdFszXS55LWQsdFsxXS55K2RdfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSxRPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNRVUFSRSwhYS5hcHBlYXJhbmNlKXt2YXIgcz1hLmNvbG9yP04oYS5jb2xvcik6WzAsMCwwXSxjPWkuZ2V0KCJDQSIpLHU9UihpLmdldEFycmF5KCJJQyIpLG51bGwpLGw9dT9OKHUpOm51bGwsZj1sP2M6bnVsbDtpZigwPT09YS5ib3JkZXJTdHlsZS53aWR0aCYmIWwpcmV0dXJuIGsoYSk7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoYS5ib3JkZXJTdHlsZS53aWR0aCwiIHciKSxzdHJva2VDb2xvcjpzLGZpbGxDb2xvcjpsLHN0cm9rZUFscGhhOmMsZmlsbEFscGhhOmYscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzJdLngrYS5ib3JkZXJTdHlsZS53aWR0aC8yLG49dFsyXS55K2EuYm9yZGVyU3R5bGUud2lkdGgvMixpPXRbM10ueC10WzJdLngtYS5ib3JkZXJTdHlsZS53aWR0aCxvPXRbMV0ueS10WzNdLnktYS5ib3JkZXJTdHlsZS53aWR0aDtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdChyLCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQoaSwiICIpLmNvbmNhdChvLCIgcmUiKSksbD9lLnB1c2goIkIiKTplLnB1c2goIlMiKSxbdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX1yZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFLCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIiksdT1SKGkuZ2V0QXJyYXkoIklDIiksbnVsbCksbD11P04odSk6bnVsbCxmPWw/YzpudWxsO2lmKDA9PT1hLmJvcmRlclN0eWxlLndpZHRoJiYhbClyZXR1cm4gayhhKTt2YXIgaD00LzMqTWF0aC50YW4oTWF0aC5QSS84KTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiIiLmNvbmNhdChhLmJvcmRlclN0eWxlLndpZHRoLCIgdyIpLHN0cm9rZUNvbG9yOnMsZmlsbENvbG9yOmwsc3Ryb2tlQWxwaGE6YyxmaWxsQWxwaGE6Zixwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHQpe3ZhciByPXRbMF0ueCthLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzBdLnktYS5ib3JkZXJTdHlsZS53aWR0aC8yLGk9dFszXS54LWEuYm9yZGVyU3R5bGUud2lkdGgvMixvPXRbM10ueSthLmJvcmRlclN0eWxlLndpZHRoLzIscz1yKyhpLXIpLzIsYz1uKyhvLW4pLzIsdT0oaS1yKS8yKmgsZj0oby1uKS8yKmg7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQocywiICIpLmNvbmNhdChvLCIgbSIpLCIiLmNvbmNhdChzK3UsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMsIiBjIiksIiIuY29uY2F0KGksIiAiKS5jb25jYXQoYy1mLCIgIikuY29uY2F0KHMrdSwiICIpLmNvbmNhdChuLCIgIikuY29uY2F0KHMsIiAiKS5jb25jYXQobiwiIGMiKSwiIi5jb25jYXQocy11LCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLWYsIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLCIgYyIpLCIiLmNvbmNhdChyLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChzLXUsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiBjIiksImgiKSxsP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSx0ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORSxhLmRhdGEudmVydGljZXM9W10sUyhhKWluc3RhbmNlb2YgcmV8fChhLnNldExpbmVFbmRpbmdzKGkuZ2V0QXJyYXkoIkxFIikpLGEuZGF0YS5saW5lRW5kaW5ncz1hLmxpbmVFbmRpbmdzKTt2YXIgcz1pLmdldEFycmF5KCJWZXJ0aWNlcyIpO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBrKGEpO2Zvcih2YXIgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrPTIpYS5kYXRhLnZlcnRpY2VzLnB1c2goe3g6c1tjXSx5OnNbYysxXX0pO2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBsLGY9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0saD1pLmdldCgiQ0EiKSxkPWEuYm9yZGVyU3R5bGUud2lkdGh8fDEscD0yKmQsZz1bMS8wLDEvMCwtMS8wLC0xLzBdLHY9QShhLmRhdGEudmVydGljZXMpO3RyeXtmb3Iodi5zKCk7IShsPXYubigpKS5kb25lOyl7dmFyIHk9bC52YWx1ZTtnWzBdPU1hdGgubWluKGdbMF0seS54LXApLGdbMV09TWF0aC5taW4oZ1sxXSx5LnktcCksZ1syXT1NYXRoLm1heChnWzJdLHkueCtwKSxnWzNdPU1hdGgubWF4KGdbM10seS55K3ApfX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1uLlV0aWwuaW50ZXJzZWN0KGEucmVjdGFuZ2xlLGcpfHwoYS5yZWN0YW5nbGU9ZyksYS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoZCwiIHciKSxzdHJva2VDb2xvcjpmLHN0cm9rZUFscGhhOmgscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9YS5kYXRhLnZlcnRpY2VzLG49MCxpPXIubGVuZ3RoO248aTtuKyspZS5wdXNoKCIiLmNvbmNhdChyW25dLngsIiAiKS5jb25jYXQocltuXS55LCIgIikuY29uY2F0KDA9PT1uPyJtIjoibCIpKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLHJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlBPTFlHT04sYX1yZXR1cm4gXyhyKX0odGUpLG5lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkNBUkVULGF9cmV0dXJuIF8ocil9KFgpLGFlPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLmRpY3QsaT1lLnhyZWY7dC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuSU5LLHQuZGF0YS5pbmtMaXN0cz1bXTt2YXIgbz1hLmdldEFycmF5KCJJbmtMaXN0Iik7aWYoIUFycmF5LmlzQXJyYXkobykpcmV0dXJuIGsodCk7Zm9yKHZhciBjPTAsdT1vLmxlbmd0aDtjPHU7KytjKXt0LmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKHZhciBsPTAsZj1vW2NdLmxlbmd0aDtsPGY7bCs9Mil0LmRhdGEuaW5rTGlzdHNbY10ucHVzaCh7eDppLmZldGNoSWZSZWYob1tjXVtsXSkseTppLmZldGNoSWZSZWYob1tjXVtsKzFdKX0pfWlmKCF0LmFwcGVhcmFuY2Upe3ZhciBoLGQ9dC5jb2xvcj9OKHQuY29sb3IpOlswLDAsMF0scD1hLmdldCgiQ0EiKSxnPXQuYm9yZGVyU3R5bGUud2lkdGh8fDEsdj0yKmcseT1bMS8wLDEvMCwtMS8wLC0xLzBdLG09QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IobS5zKCk7IShoPW0ubigpKS5kb25lOyl7dmFyIGIsdz1BKGgudmFsdWUpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIFM9Yi52YWx1ZTt5WzBdPU1hdGgubWluKHlbMF0sUy54LXYpLHlbMV09TWF0aC5taW4oeVsxXSxTLnktdikseVsyXT1NYXRoLm1heCh5WzJdLFMueCt2KSx5WzNdPU1hdGgubWF4KHlbM10sUy55K3YpfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX19fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfW4uVXRpbC5pbnRlcnNlY3QodC5yZWN0YW5nbGUseSl8fCh0LnJlY3RhbmdsZT15KSx0Ll9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOiIiLmNvbmNhdChnLCIgdyIpLHN0cm9rZUNvbG9yOmQsc3Ryb2tlQWxwaGE6cCxwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHIpe3ZhciBuLGE9QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IoYS5zKCk7IShuPWEubigpKS5kb25lOyl7Zm9yKHZhciBpPW4udmFsdWUsbz0wLHM9aS5sZW5ndGg7bzxzO28rKyllLnB1c2goIiIuY29uY2F0KGlbb10ueCwiICIpLmNvbmNhdChpW29dLnksIiAiKS5jb25jYXQoMD09PW8/Im0iOiJsIikpO2UucHVzaCgiUyIpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm5bclswXS54LHJbMV0ueCxyWzNdLnksclsxXS55XX19KX1yZXR1cm4gdH1yZXR1cm4gXyhzLG51bGwsW3trZXk6ImNyZWF0ZU5ld0RpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1yLmFwUmVmLGk9ci5hcCxzPWUucGF0aHMsYz1lLnJlY3QsdT1lLnJvdGF0aW9uLGw9bmV3IG8uRGljdCh0KTtsLnNldCgiVHlwZSIsby5OYW1lLmdldCgiQW5ub3QiKSksbC5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkluayIpKSxsLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxsLnNldCgiUmVjdCIsYyksbC5zZXQoIklua0xpc3QiLHMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wb2ludHN9KSkpLGwuc2V0KCJGIiw0KSxsLnNldCgiQm9yZGVyIixbMCwwLDBdKSxsLnNldCgiUm90YXRlIix1KTt2YXIgZj1uZXcgby5EaWN0KHQpO3JldHVybiBsLnNldCgiQVAiLGYpLGE/Zi5zZXQoIk4iLGEpOmYuc2V0KCJOIixpKSxsfX0se2tleToiY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIHMsYyx1LGwsZixoLGQscCx2LHksbSxiLHcsayxTLHgsTyxGLFAsSSxFLGosTSxfLEwsUixOLEQsQjtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnM9dC5jb2xvcixjPXQucmVjdCx1PXQucm90YXRpb24sbD10LnBhdGhzLGY9dC50aGlja25lc3MsaD10Lm9wYWNpdHksZD1UKGMsNCkscD1kWzBdLHY9ZFsxXSx5PWRbMl0sbT1kWzNdLGI9eS1wLHc9bS12LHUlMTgwIT0wJiYoYj0oaz1bdyxiXSlbMF0sdz1rWzFdKSxTPVsiIi5jb25jYXQoZiwiIHcgMSBKIDEgaiIpLCIiLmNvbmNhdCgoMCxpLmdldFBkZkNvbG9yKShzLCExKSldLDEhPT1oJiZTLnB1c2goIi9SMCBncyIpLHg9W10sTz1BKGwpO3RyeXtmb3IoTy5zKCk7IShGPU8ubigpKS5kb25lOyl7Zm9yKFA9Ri52YWx1ZS5iZXppZXIseC5sZW5ndGg9MCx4LnB1c2goIiIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMF0pLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMV0pLCIgbSIpKSxJPTIsRT1QLmxlbmd0aDtJPEU7SSs9NilqPVAuc2xpY2UoSSxJKzYpLm1hcChhLm51bWJlclRvU3RyaW5nKS5qb2luKCIgIikseC5wdXNoKCIiLmNvbmNhdChqLCIgYyIpKTt4LnB1c2goIlMiKSxTLnB1c2goeC5qb2luKCJcbiIpKX19Y2F0Y2goZSl7Ty5lKGUpfWZpbmFsbHl7Ty5mKCl9cmV0dXJuIE09Uy5qb2luKCJcbiIpLChfPW5ldyBvLkRpY3QocikpLnNldCgiRm9ybVR5cGUiLDEpLF8uc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGb3JtIikpLF8uc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLF8uc2V0KCJCQm94IixbMCwwLGIsd10pLF8uc2V0KCJMZW5ndGgiLE0ubGVuZ3RoKSx1JiYoTD0oMCxhLmdldFJvdGF0aW9uTWF0cml4KSh1LGIsdyksXy5zZXQoIk1hdHJpeCIsTCkpLDEhPT1oJiYoUj1uZXcgby5EaWN0KHIpLE49bmV3IG8uRGljdChyKSwoRD1uZXcgby5EaWN0KHIpKS5zZXQoIkNBIixoKSxELnNldCgiVHlwZSIsby5OYW1lLmdldCgiRXh0R1N0YXRlIikpLE4uc2V0KCJSMCIsRCksUi5zZXQoIkV4dEdTdGF0ZSIsTiksXy5zZXQoIlJlc291cmNlcyIsUikpLChCPW5ldyBnLlN0cmluZ1N0cmVhbShNKSkuZGljdD1fLGUuYWJydXB0KCJyZXR1cm4iLEIpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHN9KFgpLGllPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe3ZhciBzPWEuYXBwZWFyYW5jZSYmYS5hcHBlYXJhbmNlLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtpZighYS5hcHBlYXJhbmNlfHwhc3x8IXMuaGFzKCJFeHRHU3RhdGUiKSl7YS5hcHBlYXJhbmNlJiYoMCxuLndhcm4pKCJIaWdobGlnaHRBbm5vdGF0aW9uIC0gaWdub3JpbmcgYnVpbHQtaW4gYXBwZWFyYW5jZSBzdHJlYW0uIik7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlsxLDEsMF0sdT1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGZpbGxDb2xvcjpjLGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTp1LHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQodFswXS54LCIgIikuY29uY2F0KHRbMF0ueSwiIG0iKSwiIi5jb25jYXQodFsxXS54LCIgIikuY29uY2F0KHRbMV0ueSwiIGwiKSwiIi5jb25jYXQodFszXS54LCIgIikuY29uY2F0KHRbM10ueSwiIGwiKSwiIi5jb25jYXQodFsyXS54LCIgIikuY29uY2F0KHRbMl0ueSwiIGwiKSwiZiIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX1lbHNlIGEuZGF0YS5oYXNQb3B1cD0hMTtyZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksb2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FLGEuZGF0YS5xdWFkUG9pbnRzPUQoaSxudWxsKSl7aWYoIWEuYXBwZWFyYW5jZSl7dmFyIHM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sYz1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjpzLHN0cm9rZUFscGhhOmMscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdCh0WzJdLngsIiAiKS5jb25jYXQodFsyXS55LCIgbSIpLCIiLmNvbmNhdCh0WzNdLngsIiAiKS5jb25jYXQodFszXS55LCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjtpZihhLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWSxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7dmFyIHI9KHRbMF0ueS10WzJdLnkpLzYsbj1yLGE9dFsyXS54LGk9dFsyXS55LG89dFszXS54O2UucHVzaCgiIi5jb25jYXQoYSwiICIpLmNvbmNhdChpK24sIiBtIikpO2Rve2ErPTIsbj0wPT09bj9yOjAsZS5wdXNoKCIiLmNvbmNhdChhLCIgIikuY29uY2F0KGkrbiwiIGwiKSl9d2hpbGUoYTxvKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMl0ueCxvLGktMipyLGkrMipyXX19KX19ZWxzZSBhLmRhdGEuaGFzUG9wdXA9ITE7cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLGNlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNUUklLRU9VVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoKHRbMF0ueCt0WzJdLngpLzIsIiAiKSsiIi5jb25jYXQoKHRbMF0ueSt0WzJdLnkpLzIsIiBtIiksIiIuY29uY2F0KCh0WzFdLngrdFszXS54KS8yLCIgIikrIiIuY29uY2F0KCh0WzFdLnkrdFszXS55KS8yLCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSx1ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiBqKHRoaXMsciksKGE9dC5jYWxsKHRoaXMsZSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TVEFNUCxhfXJldHVybiBfKHIpfShYKSxsZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZixjPW5ldyBoLkZpbGVTcGVjKGkuZ2V0KCJGUyIpLHMpO2EuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5ULGEuZGF0YS5maWxlPWMuc2VyaWFsaXphYmxlO3ZhciB1PWkuZ2V0KCJOYW1lIik7cmV0dXJuIGEuZGF0YS5uYW1lPXUgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykodS5uYW1lKToiUHVzaFBpbiIsYX1yZXR1cm4gXyhyKX0oWCl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZha2VVbmljb2RlRm9udD12b2lkIDAsdC5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZT1mdW5jdGlvbihlKXt2YXIgdD1lLmZvbnRTaXplLHI9ZS5mb250TmFtZSxuPWUuZm9udENvbG9yO3JldHVybiIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShyKSwiICIpLmNvbmNhdCh0LCIgVGYgIikuY29uY2F0KHcobiwhMCkpfSx0LmdldFBkZkNvbG9yPXcsdC5wYXJzZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYihlKS5wYXJzZSgpfTt2YXIgYT1yKDEzNCksaT1yKDEzNSksbz1yKDIpLHM9cigxNDMpLGM9cigxNDQpLHU9cigxMzkpO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWgoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtyZXR1cm4geT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHkoZSx0KX1mdW5jdGlvbiBtKGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxtKGUpfXZhciBiPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ5KGUsdCl9KGMsZSk7dmFyIHQscixpPSh0PWMscj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPW0odCk7aWYocil7dmFyIGk9bSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gcCh0aGlzLGMpLGkuY2FsbCh0aGlzLG5ldyB1LlN0cmluZ1N0cmVhbShlKSl9cmV0dXJuIHYoYyxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e2ZuOjAsYXJnczpbXX0sdD17Zm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpfTt0cnl7Zm9yKDtlLmFyZ3MubGVuZ3RoPTAsdGhpcy5yZWFkKGUpOylpZigwPT09dGhpcy5zYXZlZFN0YXRlc0RlcHRoKXt2YXIgcj1lLmZuLG49ZS5hcmdzO3N3aXRjaCgwfHIpe2Nhc2Ugby5PUFMuc2V0Rm9udDp2YXIgaT1mKG4sMiksYz1pWzBdLHU9aVsxXTtjIGluc3RhbmNlb2YgYS5OYW1lJiYodC5mb250TmFtZT1jLm5hbWUpLCJudW1iZXIiPT10eXBlb2YgdSYmdT4wJiYodC5mb250U2l6ZT11KTticmVhaztjYXNlIG8uT1BTLnNldEZpbGxSR0JDb2xvcjpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShuLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBvLk9QUy5zZXRGaWxsR3JheTpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0obiwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2Ugby5PUFMuc2V0RmlsbENvbG9yU3BhY2U6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKG4sMCx0LmZvbnRDb2xvciwwKX19fWNhdGNoKGUpeygwLG8ud2FybikoJ3BhcnNlRGVmYXVsdEFwcGVhcmFuY2UgLSBpZ25vcmluZyBlcnJvcnM6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gdH19XSksY30oYy5FdmFsdWF0b3JQcmVwcm9jZXNzb3IpO2Z1bmN0aW9uIHcoZSx0KXtpZihlWzBdPT09ZVsxXSYmZVsxXT09PWVbMl0pe3ZhciByPWVbMF0vMjU1O3JldHVybiIiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShyKSwiICIpLmNvbmNhdCh0PyJnIjoiRyIpfXJldHVybiBBcnJheS5mcm9tKGUsKGZ1bmN0aW9uKGUpe3JldHVybigwLGkubnVtYmVyVG9TdHJpbmcpKGUvMjU1KX0pKS5qb2luKCIgIikrIiAiLmNvbmNhdCh0PyJyZyI6IlJHIil9dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMueHJlZj10LHRoaXMud2lkdGhzPW51bGwsdGhpcy5maXJzdENoYXI9MS8wLHRoaXMubGFzdENoYXI9LTEvMCx0aGlzLmZvbnRGYW1pbHk9cjt2YXIgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSk7dGhpcy5jdHhNZWFzdXJlPW4uZ2V0Q29udGV4dCgiMmQiKSxlLl9mb250TmFtZUlkfHwoZS5fZm9udE5hbWVJZD0xKSx0aGlzLmZvbnROYW1lPWEuTmFtZS5nZXQoIkludmFsaWRQREZqc0ZvbnRfIi5jb25jYXQociwiXyIpLmNvbmNhdChlLl9mb250TmFtZUlkKyspKX1yZXR1cm4gdihlLFt7a2V5OiJ0b1VuaWNvZGVSZWYiLGdldDpmdW5jdGlvbigpe2lmKCFlLl90b1VuaWNvZGVSZWYpe3ZhciB0PWUudG9Vbmljb2RlU3RyZWFtPW5ldyB1LlN0cmluZ1N0cmVhbSgiL0NJREluaXQgL1Byb2NTZXQgZmluZHJlc291cmNlIGJlZ2luXG4xMiBkaWN0IGJlZ2luXG5iZWdpbmNtYXBcbi9DSURTeXN0ZW1JbmZvXG48PCAvUmVnaXN0cnkgKEFkb2JlKVxuL09yZGVyaW5nIChVQ1MpIC9TdXBwbGVtZW50IDAgPj4gZGVmXG4vQ01hcE5hbWUgL0Fkb2JlLUlkZW50aXR5LVVDUyBkZWZcbi9DTWFwVHlwZSAyIGRlZlxuMSBiZWdpbmNvZGVzcGFjZXJhbmdlXG48MDAwMD4gPEZGRkY+XG5lbmRjb2Rlc3BhY2VyYW5nZVxuMSBiZWdpbmJmcmFuZ2VcbjwwMDAwPiA8RkZGRj4gPDAwMDA+XG5lbmRiZnJhbmdlXG5lbmRjbWFwIENNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcCBlbmQgZW5kIikscj1uZXcgYS5EaWN0KHRoaXMueHJlZik7dC5kaWN0PXIsci5zZXQoIkxlbmd0aCIsMzQ2KSxlLl90b1VuaWNvZGVSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX3RvVW5pY29kZVJlZn19LHtrZXk6ImZvbnREZXNjcmlwdG9yUmVmIixnZXQ6ZnVuY3Rpb24oKXtpZighZS5fZm9udERlc2NyaXB0b3JSZWYpe3ZhciB0PW5ldyBhLkRpY3QodGhpcy54cmVmKTt0LnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udERlc2NyaXB0b3IiKSksdC5zZXQoIkZvbnROYW1lIix0aGlzLmZvbnROYW1lKSx0LnNldCgiRm9udEZhbWlseSIsIk15cmlhZFBybyBSZWd1bGFyIiksdC5zZXQoIkZvbnRCQm94IixbMCwwLDAsMF0pLHQuc2V0KCJGb250U3RyZXRjaCIsYS5OYW1lLmdldCgiTm9ybWFsIikpLHQuc2V0KCJGb250V2VpZ2h0Iiw0MDApLHQuc2V0KCJJdGFsaWNBbmdsZSIsMCksZS5fZm9udERlc2NyaXB0b3JSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX2ZvbnREZXNjcmlwdG9yUmVmfX0se2tleToiZGVzY2VuZGFudEZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtlLnNldCgiQmFzZUZvbnQiLHRoaXMuZm9udE5hbWUpLGUuc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJGb250IikpLGUuc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJDSURGb250VHlwZTAiKSksZS5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxlLnNldCgiRmlyc3RDaGFyIix0aGlzLmZpcnN0Q2hhciksZS5zZXQoIkxhc3RDaGFyIix0aGlzLmxhc3RDaGFyKSxlLnNldCgiRm9udERlc2NyaXB0b3IiLHRoaXMuZm9udERlc2NyaXB0b3JSZWYpLGUuc2V0KCJEVyIsMWUzKTt2YXIgdCxyLG49W10saT1udWxsLG89bnVsbCxzPWwoKHI9dGhpcy53aWR0aHMuZW50cmllcygpLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGQoZSl9KHIpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHIpfHxoKHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKS5zb3J0KCkpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9Zih0LnZhbHVlLDIpLHU9Y1swXSxwPWNbMV07aT91PT09aStvLmxlbmd0aD9vLnB1c2gocCk6KG4ucHVzaChpLG8pLGk9dSxvPVtwXSk6KGk9dSxvPVtwXSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfWkmJm4ucHVzaChpLG8pLGUuc2V0KCJXIixuKTt2YXIgZz1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIGcuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksZy5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxnLnNldCgiU3VwcGxlbWVudCIsMCksZS5zZXQoIkNJRFN5c3RlbUluZm8iLGcpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToiYmFzZUZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtyZXR1cm4gZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKSxlLnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udCIpKSxlLnNldCgiU3VidHlwZSIsYS5OYW1lLmdldCgiVHlwZTAiKSksZS5zZXQoIkVuY29kaW5nIixhLk5hbWUuZ2V0KCJJZGVudGl0eS1IIikpLGUuc2V0KCJEZXNjZW5kYW50Rm9udHMiLFt0aGlzLmRlc2NlbmRhbnRGb250UmVmXSksZS5zZXQoIlRvVW5pY29kZSIsdGhpcy50b1VuaWNvZGVSZWYpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToicmVzb3VyY2VzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgYS5EaWN0KHRoaXMueHJlZiksdD1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIHQuc2V0KHRoaXMuZm9udE5hbWUubmFtZSx0aGlzLmJhc2VGb250UmVmKSxlLnNldCgiRm9udCIsdCksZX19LHtrZXk6Il9jcmVhdGVDb250ZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRocz1uZXcgTWFwLHRoaXMuY3R4TWVhc3VyZS5mb250PSIxMDAwcHggIi5jb25jYXQodGhpcy5mb250RmFtaWx5KSx0aGlzLmN0eE1lYXN1cmV9fSx7a2V5OiJjcmVhdGVGb250UmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxuPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYSxpPWwodC52YWx1ZS5zcGxpdCgiIikpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOyl7dmFyIG89YS52YWx1ZSxzPW8uY2hhckNvZGVBdCgwKTtpZighdGhpcy53aWR0aHMuaGFzKHMpKXt2YXIgYz1yLm1lYXN1cmVUZXh0KG8pLHU9TWF0aC5jZWlsKGMud2lkdGgpO3RoaXMud2lkdGhzLnNldChzLHUpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKHMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgocyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHRoaXMucmVzb3VyY2VzfX0se2tleToiY3JlYXRlQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixzKXt2YXIgYyxoPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxkPVtdLHA9LTEvMCxnPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihnLnMoKTshKGM9Zy5uKCkpLmRvbmU7KXt2YXIgdj1jLnZhbHVlO2QucHVzaCh2KTt2YXIgeT1oLm1lYXN1cmVUZXh0KHYpLndpZHRoO3A9TWF0aC5tYXgocCx5KTt2YXIgbSxiPWwodi5zcGxpdCgiIikpO3RyeXtmb3IoYi5zKCk7IShtPWIubigpKS5kb25lOyl7dmFyIGs9bS52YWx1ZSxTPWsuY2hhckNvZGVBdCgwKSx4PXRoaXMud2lkdGhzLmdldChTKTtpZih2b2lkIDA9PT14KXt2YXIgTz1oLm1lYXN1cmVUZXh0KGspO3g9TWF0aC5jZWlsKE8ud2lkdGgpLHRoaXMud2lkdGhzLnNldChTLHgpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKFMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgoUyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9cCo9bi8xZTM7dmFyIEE9Zih0LDQpLEM9QVswXSxGPUFbMV0sUD1BWzJdLUMsVD1BWzNdLUY7aWYociUxODAhPTApe3ZhciBJPVtULFBdO1A9SVswXSxUPUlbMV19dmFyIEU9MTtwPlAmJihFPVAvcCk7dmFyIGo9MSxNPW8uTElORV9GQUNUT1IqbixfPW8uTElORV9ERVNDRU5UX0ZBQ1RPUipuLEw9TSpkLmxlbmd0aDtMPlQmJihqPVQvTCk7Zm9yKHZhciBSPW4qTWF0aC5taW4oRSxqKSxOPVsicSIsIjAgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShQKSwiICIpLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUKSwiIHJlIFcgbiIpLCJCVCIsIjEgMCAwIDEgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUK18pLCIgVG0gMCBUYyAiKS5jb25jYXQodyhzLCEwKSksIi8iLmNvbmNhdCh0aGlzLmZvbnROYW1lLm5hbWUsIiAiKS5jb25jYXQoKDAsaS5udW1iZXJUb1N0cmluZykoUiksIiBUZiIpXSxEPSgwLGkubnVtYmVyVG9TdHJpbmcpKE0pLEI9MCxVPWQ7QjxVLmxlbmd0aDtCKyspe3ZhciAkPVVbQl07Ti5wdXNoKCIwIC0iLmNvbmNhdChELCIgVGQgPCIpLmNvbmNhdCgoMCxpLnN0cmluZ1RvVVRGMTZIZXhTdHJpbmcpKCQpLCI+IFRqIikpfU4ucHVzaCgiRVQiLCJRIik7dmFyIFg9Ti5qb2luKCJcbiIpLEg9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2lmKEguc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJGb3JtIikpLEguc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYT2JqZWN0IikpLEguc2V0KCJCQm94IixbMCwwLFAsVF0pLEguc2V0KCJMZW5ndGgiLFgubGVuZ3RoKSxILnNldCgiUmVzb3VyY2VzIix0aGlzLnJlc291cmNlcykscil7dmFyIHE9KDAsaS5nZXRSb3RhdGlvbk1hdHJpeCkocixQLFQpO0guc2V0KCJNYXRyaXgiLHEpfXZhciBHPW5ldyB1LlN0cmluZ1N0cmVhbShYKTtyZXR1cm4gRy5kaWN0PUgsR319XSksZX0oKTt0LkZha2VVbmljb2RlRm9udD1rfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29sb3JTcGFjZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3AodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbG9yU3BhY2UuIiksdGhpcy5uYW1lPXQsdGhpcy5udW1Db21wcz1yfXZhciB0LHI7cmV0dXJuIHYoZSxbe2tleToiZ2V0UmdiIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtyZXR1cm4gdGhpcy5nZXRSZ2JJdGVtKGUsdCxyLDApLHJ9fSx7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbSIpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyIil9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCIpfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUuaXNEZWZhdWx0RGVjb2RlKHQsdGhpcy5udW1Db21wcyl9fSx7a2V5OiJmaWxsUmdiIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9dCpyLGw9bnVsbCxmPTE8PG8saD1yIT09YXx8dCE9PW47aWYodGhpcy5pc1Bhc3N0aHJvdWdoKG8pKWw9cztlbHNlIGlmKDE9PT10aGlzLm51bUNvbXBzJiZ1PmYmJiJEZXZpY2VHcmF5IiE9PXRoaXMubmFtZSYmIkRldmljZVJHQiIhPT10aGlzLm5hbWUpe2Zvcih2YXIgZD1vPD04P25ldyBVaW50OEFycmF5KGYpOm5ldyBVaW50MTZBcnJheShmKSxwPTA7cDxmO3ArKylkW3BdPXA7dmFyIGc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqZik7aWYodGhpcy5nZXRSZ2JCdWZmZXIoZCwwLGYsZywwLG8sMCksaCl7bD1uZXcgVWludDhBcnJheSgzKnUpO2Zvcih2YXIgdj0wLHk9MDt5PHU7Kyt5KXt2YXIgbT0zKnNbeV07bFt2KytdPWdbbV0sbFt2KytdPWdbbSsxXSxsW3YrK109Z1ttKzJdfX1lbHNlIGZvcih2YXIgYj0wLHc9MDt3PHU7Kyt3KXt2YXIgaz0zKnNbd107ZVtiKytdPWdba10sZVtiKytdPWdbaysxXSxlW2IrK109Z1trKzJdLGIrPWN9fWVsc2UgaD8obD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyp1KSx0aGlzLmdldFJnYkJ1ZmZlcihzLDAsdSxsLDAsbywwKSk6dGhpcy5nZXRSZ2JCdWZmZXIocywwLG4qaSxlLDAsbyxjKTtpZihsKWlmKGgpIWZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe289MSE9PW8/MDpvO2Zvcih2YXIgcyxjPXIvYSx1PW4vaSxsPTAsZj1uZXcgVWludDE2QXJyYXkoYSksaD0zKnIsZD0wO2Q8YTtkKyspZltkXT0zKk1hdGguZmxvb3IoZCpjKTtmb3IodmFyIHA9MDtwPGk7cCsrKWZvcih2YXIgZz1NYXRoLmZsb29yKHAqdSkqaCx2PTA7djxhO3YrKylzPWcrZlt2XSx0W2wrK109ZVtzKytdLHRbbCsrXT1lW3MrK10sdFtsKytdPWVbcysrXSxsKz1vfShsLGUsdCxyLG4sYSxjKTtlbHNlIGZvcih2YXIgUz0wLHg9MCxPPTAsQT1uKmk7TzxBO08rKyllW1MrK109bFt4KytdLGVbUysrXT1sW3grK10sZVtTKytdPWxbeCsrXSxTKz1jfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMCl9fV0sW3trZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJsb2NhbENvbG9yU3BhY2VDYWNoZSIgYXJndW1lbnQuJyk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRDb2xvclNwYWNlIiBhcmd1bWVudC4nKTt2YXIgaSxvO2UgaW5zdGFuY2VvZiBhLlJlZiYmKG89ZSxlPXQuZmV0Y2goZSkpLGUgaW5zdGFuY2VvZiBhLk5hbWUmJihpPWUubmFtZSksKGl8fG8pJiZyLnNldChpLG8sbil9fSx7a2V5OiJnZXRDYWNoZWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZighcil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZihlIGluc3RhbmNlb2YgYS5SZWYpe3ZhciBuPXIuZ2V0QnlSZWYoZSk7aWYobilyZXR1cm4gbjt0cnl7ZT10LmZldGNoKGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBvLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGV9fWlmKGUgaW5zdGFuY2VvZiBhLk5hbWUpe3ZhciBpPXIuZ2V0QnlOYW1lKGUubmFtZSk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH19LHtrZXk6InBhcnNlQXN5bmMiLHZhbHVlOih0PWgoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4sYSxpLG8scyxjO3JldHVybiBoKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHI9dC5jcyxuPXQueHJlZixhPXQucmVzb3VyY2VzLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LnBkZkZ1bmN0aW9uRmFjdG9yeSxzPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsYz10aGlzLl9wYXJzZShyLG4saSxvKSx0aGlzLl9jYWNoZShyLG4scyxjKSxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpLHI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT10LmFwcGx5KGUscik7ZnVuY3Rpb24gbyhlKXtkKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtkKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNzLHI9ZS54cmVmLG49ZS5yZXNvdXJjZXMsYT12b2lkIDA9PT1uP251bGw6bixpPWUucGRmRnVuY3Rpb25GYWN0b3J5LG89ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxzPXRoaXMuZ2V0Q2FjaGVkKHQscixvKTtpZihzKXJldHVybiBzO3ZhciBjPXRoaXMuX3BhcnNlKHQscixhLGkpO3JldHVybiB0aGlzLl9jYWNoZSh0LHIsbyxjKSxjfX0se2tleToiX3BhcnNlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoKGU9dC5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2YgYS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiUGF0dGVybiI6cmV0dXJuIG5ldyBiKG51bGwpO2RlZmF1bHQ6aWYociBpbnN0YW5jZW9mIGEuRGljdCl7dmFyIG89ci5nZXQoIkNvbG9yU3BhY2UiKTtpZihvIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcz1vLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBhLk5hbWUpcmV0dXJuIHRoaXMuX3BhcnNlKHMsdCxyLGkpO2U9czticmVha319fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogIi5jb25jYXQoZS5uYW1lKSl9aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGMsdSxsLGYsaCxkLHA9dC5mZXRjaElmUmVmKGVbMF0pLm5hbWU7c3dpdGNoKHApe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiQ2FsR3JheSI6cmV0dXJuIGY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpLGQ9Yy5nZXQoIkdhbW1hIiksbmV3IE8oZixoLGQpO2Nhc2UiQ2FsUkdCIjpmPShjPXQuZmV0Y2hJZlJlZihlWzFdKSkuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKSxoPWMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKSxkPWMuZ2V0QXJyYXkoIkdhbW1hIik7dmFyIGc9Yy5nZXRBcnJheSgiTWF0cml4Iik7cmV0dXJuIG5ldyBBKGYsaCxkLGcpO2Nhc2UiSUNDQmFzZWQiOnZhciB2PXQuZmV0Y2hJZlJlZihlWzFdKS5kaWN0O3U9di5nZXQoIk4iKTt2YXIgeT12LmdldCgiQWx0ZXJuYXRlIik7aWYoeSl7dmFyIGs9dGhpcy5fcGFyc2UoeSx0LHIsaSk7aWYoay5udW1Db21wcz09PXUpcmV0dXJuIGs7KDAsbi53YXJuKSgiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LiIpfWlmKDE9PT11KXJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtpZigzPT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtpZig0PT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7YnJlYWs7Y2FzZSJQYXR0ZXJuIjpyZXR1cm4obD1lWzFdfHxudWxsKSYmKGw9dGhpcy5fcGFyc2UobCx0LHIsaSkpLG5ldyBiKGwpO2Nhc2UiSSI6Y2FzZSJJbmRleGVkIjpsPXRoaXMuX3BhcnNlKGVbMV0sdCxyLGkpO3ZhciBTPXQuZmV0Y2hJZlJlZihlWzJdKSsxLHg9dC5mZXRjaElmUmVmKGVbM10pO3JldHVybiBuZXcgdyhsLFMseCk7Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOnZhciBGPXQuZmV0Y2hJZlJlZihlWzFdKTt1PUFycmF5LmlzQXJyYXkoRik/Ri5sZW5ndGg6MSxsPXRoaXMuX3BhcnNlKGVbMl0sdCxyLGkpO3ZhciBQPWkuY3JlYXRlKGVbM10pO3JldHVybiBuZXcgbSh1LGwsUCk7Y2FzZSJMYWIiOmY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO3ZhciBUPWMuZ2V0QXJyYXkoIlJhbmdlIik7cmV0dXJuIG5ldyBDKGYsaCxUKTtkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmltcGxlbWVudGVkIENvbG9yU3BhY2Ugb2JqZWN0OiAiLmNvbmNhdChwKSl9fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICIuY29uY2F0KGUpKX19LHtrZXk6ImlzRGVmYXVsdERlY29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyKnQhPT1lLmxlbmd0aClyZXR1cm4oMCxuLndhcm4pKCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoIiksITA7Zm9yKHZhciByPTAsYT1lLmxlbmd0aDtyPGE7cis9MilpZigwIT09ZVtyXXx8MSE9PWVbcisxXSlyZXR1cm4hMTtyZXR1cm4hMH19LHtrZXk6InNpbmdsZXRvbnMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJzaW5nbGV0b25zIix7Z2V0IGdyYXkoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZ3JheSIsbmV3IGspfSxnZXQgcmdiKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJnYiIsbmV3IFMpfSxnZXQgY215aygpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjbXlrIixuZXcgeCl9fSl9fV0pLGV9KCk7dC5Db2xvclNwYWNlPXk7dmFyIG09ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHAodGhpcyxyKSwoaT10LmNhbGwodGhpcywiQWx0ZXJuYXRlIixlKSkuYmFzZT1uLGkudGludEZuPWEsaS50bXBCdWY9bmV3IEZsb2F0MzJBcnJheShuLm51bUNvbXBzKSxpfXJldHVybiB2KHIsW3trZXk6ImdldFJnYkl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPXRoaXMudG1wQnVmO3RoaXMudGludEZuKGUsdCxhLDApLHRoaXMuYmFzZS5nZXRSZ2JJdGVtKGEsMCxyLG4pfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU9dGhpcy50aW50Rm4sbD10aGlzLmJhc2UsZj0xLygoMTw8aSktMSksaD1sLm51bUNvbXBzLGQ9bC51c2VzWmVyb1RvT25lUmFuZ2UscD0obC5pc1Bhc3N0aHJvdWdoKDgpfHwhZCkmJjA9PT1vLGc9cD9hOjAsdj1wP246bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgqcikseT10aGlzLm51bUNvbXBzLG09bmV3IEZsb2F0MzJBcnJheSh5KSxiPW5ldyBGbG9hdDMyQXJyYXkoaCk7Zm9yKHM9MDtzPHI7cysrKXtmb3IoYz0wO2M8eTtjKyspbVtjXT1lW3QrK10qZjtpZih1KG0sMCxiLDApLGQpZm9yKGM9MDtjPGg7YysrKXZbZysrXT0yNTUqYltjXTtlbHNlIGwuZ2V0UmdiSXRlbShiLDAsdixnKSxnKz1ofXB8fGwuZ2V0UmdiQnVmZmVyKHYsMCxyLG4sYSw4LG8pfX0se2tleToiZ2V0T3V0cHV0TGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzL3RoaXMubnVtQ29tcHMsdCl9fV0pLHJ9KHkpLGI9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gcCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLCJQYXR0ZXJuIixudWxsKSkuYmFzZT1lLG59cmV0dXJuIHYocixbe2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZSIpfX1dKSxyfSh5KSx3PWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLG8pe3ZhciBzO3AodGhpcyxyKSwocz10LmNhbGwodGhpcywiSW5kZXhlZCIsMSkpLmJhc2U9ZSxzLmhpZ2hWYWw9YTt2YXIgYz1lLm51bUNvbXBzKmE7aWYocy5sb29rdXA9bmV3IFVpbnQ4QXJyYXkoYyksbyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSl7dmFyIHU9by5nZXRCeXRlcyhjKTtzLmxvb2t1cC5zZXQodSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICIuY29uY2F0KG8pKTtmb3IodmFyIGw9MDtsPGM7KytsKXMubG9va3VwW2xdPTI1NSZvLmNoYXJDb2RlQXQobCl9cmV0dXJuIHN9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5iYXNlLm51bUNvbXBzLGk9ZVt0XSphO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAsaSwxLHIsbiw4LDApfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtmb3IodmFyIHM9dGhpcy5iYXNlLGM9cy5udW1Db21wcyx1PXMuZ2V0T3V0cHV0TGVuZ3RoKGMsbyksbD10aGlzLmxvb2t1cCxmPTA7ZjxyOysrZil7dmFyIGg9ZVt0KytdKmM7cy5nZXRSZ2JCdWZmZXIobCxoLDEsbixhLDgsbyksYSs9dX19fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMsdCl9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fCgyIT09ZS5sZW5ndGg/KCgwLG4ud2FybikoIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0IiksITApOiFOdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDE/KCgwLG4ud2FybikoIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCIpLCEwKTowPT09ZVswXSYmZVsxXT09PSgxPDx0KS0xKX19XSkscn0oeSksaz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlR3JheSIsMSl9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9MjU1KmVbdF07cltuXT1yW24rMV09cltuKzJdPWF9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe2Zvcih2YXIgcz0yNTUvKCgxPDxpKS0xKSxjPXQsdT1hLGw9MDtsPHI7KytsKXt2YXIgZj1zKmVbYysrXTtuW3UrK109ZixuW3UrK109ZixuW3UrK109Zix1Kz1vfX19LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KX19XSkscn0oeSksUz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlUkdCIiwzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtyW25dPTI1NSplW3RdLHJbbisxXT0yNTUqZVt0KzFdLHJbbisyXT0yNTUqZVt0KzJdfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtpZig4IT09aXx8MCE9PW8pZm9yKHZhciBzPTI1NS8oKDE8PGkpLTEpLGM9dCx1PWEsbD0wO2w8cjsrK2wpblt1KytdPXMqZVtjKytdLG5bdSsrXT1zKmVbYysrXSxuW3UrK109cyplW2MrK10sdSs9bztlbHNlIG4uc2V0KGUuc3ViYXJyYXkodCx0KzMqciksYSl9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDg9PT1lfX1dKSxyfSh5KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEpe3ZhciBpPWVbdF0qcixvPWVbdCsxXSpyLHM9ZVt0KzJdKnIsYz1lW3QrM10qcjtuW2FdPTI1NStpKigtNC4zODczMzIzODQ2MDk5ODgqaSs1NC40ODYxNTE5NDE4OTE3NipvKzE4LjgyMjkwNTAyMTY1MzAyKnMrMjEyLjI1NjYyNDUxNjM5NTg1KmMtMjg1LjIzMzEwMjYxMzcwMDQpK28qKDEuNzE0OTc2MzQ3NzM2MjEzNCpvLTUuNjA5NjczNjkwNDA0NzMxNSpzKy0xNy44NzM4NzA4NjE0MTU0NDQqYy01LjQ5NzAwNjQyNzE5NjM2NikrcyooLTIuNTIxNzM0MDEzMTY4MzAzMypzLTIxLjI0ODkyMzMzNzM1MzA3MypjKzE3LjUxMTkyNzA4NDE4MTMpK2MqKC0yMS44NjEyMjE0NzQ2MzYwNSpjLTE4OS40ODE4MDgzNTkyMjc0NyksblthKzFdPTI1NStpKig4Ljg0MTA0MTQyMjAzNjE0OSppKzYwLjExODAyNzA0NTU5NzM2NipvKzYuODcxNDI1NTkyMDQ5MDA3KnMrMzEuMTU5MTAwMTMwMDU1OTIyKmMtNzkuMjk3MDg0NDgxNjU0OCkrbyooLTE1LjMxMDM2MTMwNjk2NzgxNypvKzE3LjU3NTI1MTI2MTEwOTQ4MipzKzEzMS4zNTI1MDkxMjQ5Mzk3NipjLTE5MC45NDUzMzAyNTg4OTUxKStzKig0LjQ0NDMzOTEwMjg1MjczOSpzKzkuODYzMjg2MTQ5MzQwNSpjLTI0Ljg2NzQxNTgyNTU1ODc4KStjKigtMjAuNzM3MzI1NDcxMTgxMDM0KmMtMTg3LjgwNDUzNzA5NzE5NTc4KSxuW2ErMl09MjU1K2kqKC44ODQyNTIyNDMwMDAzMjk2KmkrOC4wNzg2Nzc1MDMxMTI5MjgqbyszMC44OTk3ODMwOTcwMzcyOSpzLS4yMzg4MzIzODY4OTE3ODkzNCpjLTE0LjE4MzU3Njc5OTY3MzI4NikrbyooMTAuNDk1OTMyNzM0MzIwNzIqbys2My4wMjM3ODQ5NDc1NDA1MipzKzUwLjYwNjk1NzY1NjM2MDczNCpjLTExMi4yMzg4NDI1MzcxOTI0OCkrcyooLjAzMjk2MDQxMTE0ODczMjE3KnMrMTE1LjYwMzg0NDQ5NjQ2NjQxKmMtMTkzLjU4MjA5MzU2ODYxNTA1KStjKigtMjIuMzM4MTY4MDczMDk4ODYqYy0xODAuMTI2MTM5NzQ3MDgzNjcpfXJldHVybiBmdW5jdGlvbih0KXtzKG4sdCk7dmFyIHI9dShuKTtmdW5jdGlvbiBuKCl7cmV0dXJuIHAodGhpcyxuKSxyLmNhbGwodGhpcywiRGV2aWNlQ01ZSyIsNCl9cmV0dXJuIHYobixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0LHIsMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbih0LHIsbixhLGksbyxzKXtmb3IodmFyIGM9MS8oKDE8PG8pLTEpLHU9MDt1PG47dSsrKWUodCxyLGMsYSxpKSxyKz00LGkrPTMrc319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fV0pLG59KHkpfSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpKXt2YXIgbz10W3JdKmkscz1NYXRoLnBvdyhvLGUuRyksYz1lLllXKnMsdT1NYXRoLm1heCgyOTUuOCpNYXRoLnBvdyhjLC4zMzMzMzMzMzMzMzMzMzMzKS00MC44LDApO25bYV09dSxuW2ErMV09dSxuW2ErMl09dX1yZXR1cm4gZnVuY3Rpb24odCl7cyhhLHQpO3ZhciByPXUoYSk7ZnVuY3Rpb24gYShlLHQsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89ci5jYWxsKHRoaXMsIkNhbEdyYXkiLDEpLCFlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsR3JheSIpO2lmKHQ9dHx8WzAsMCwwXSxpPWl8fDEsby5YVz1lWzBdLG8uWVc9ZVsxXSxvLlpXPWVbMl0sby5YQj10WzBdLG8uWUI9dFsxXSxvLlpCPXRbMl0sby5HPWksby5YVzwwfHxvLlpXPDB8fDEhPT1vLllXKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgIi5jb25jYXQoby5uYW1lKSsiLCBubyBmYWxsYmFjayBhdmFpbGFibGUiKTtyZXR1cm4oby5YQjwwfHxvLllCPDB8fG8uWkI8MCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICIuY29uY2F0KG8ubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSksby5YQj1vLllCPW8uWkI9MCksMD09PW8uWEImJjA9PT1vLllCJiYwPT09by5aQnx8KDAsbi53YXJuKSgiIi5jb25jYXQoby5uYW1lLCIsIEJsYWNrUG9pbnQ6IFhCOiAiKS5jb25jYXQoby5YQiwiLCBZQjogIikuY29uY2F0KG8uWUIsIiwgIikrIlpCOiAiLmNvbmNhdChvLlpCLCIsIG9ubHkgZGVmYXVsdCB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4iKSksby5HPDEmJigoMCxuLmluZm8pKCJJbnZhbGlkIEdhbW1hOiAiLmNvbmNhdChvLkcsIiBmb3IgIikuY29uY2F0KG8ubmFtZSwiLCAiKSsiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIiksby5HPTEpLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0aGlzLHQscixuLGEsMSl9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKHQscixuLGEsaSxvLHMpe2Zvcih2YXIgYz0xLygoMTw8byktMSksdT0wO3U8bjsrK3UpZSh0aGlzLHQscixhLGksYykscis9MSxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCl9fV0pLGF9KHkpfSgpLEE9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KFsuODk1MSwuMjY2NCwtLjE2MTQsLS43NTAyLDEuNzEzNSwuMDM2NywuMDM4OSwtLjA2ODUsMS4wMjk2XSksdD1uZXcgRmxvYXQzMkFycmF5KFsuOTg2OTkyOSwtLjE0NzA1NDMsLjE1OTk2MjcsLjQzMjMwNTMsLjUxODM2MDMsLjA0OTI5MTIsLS4wMDg1Mjg3LC4wNDAwNDI4LC45Njg0ODY3XSkscj1uZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsLTEuNTM3MTM4NSwtLjQ5ODUzMTQsLS45NjkyNjYsMS44NzYwMTA4LC4wNDE1NTYsLjA1NTY0MzQsLS4yMDQwMjU5LDEuMDU3MjI1Ml0pLGE9bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKSxpPW5ldyBGbG9hdDMyQXJyYXkoMyksbz1uZXcgRmxvYXQzMkFycmF5KDMpLGM9bmV3IEZsb2F0MzJBcnJheSgzKSxsPU1hdGgucG93KDI0LzExNiwzKS84O2Z1bmN0aW9uIGYoZSx0LHIpe3JbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl0sclsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXSxyWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGU8PS4wMDMxMzA4P2QoMCwxLDEyLjkyKmUpOmU+PS45OTU1NDUyNT8xOmQoMCwxLDEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKHQscikpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGU8MD8tZygtZSk6ZT44P01hdGgucG93KChlKzE2KS8xMTYsMyk6ZSpsfWZ1bmN0aW9uIG0obixzLHUsbCxwLHYpe3ZhciB5PWQoMCwxLHNbdV0qdiksbT1kKDAsMSxzW3UrMV0qdiksYj1kKDAsMSxzW3UrMl0qdiksdz0xPT09eT8xOk1hdGgucG93KHksbi5HUiksaz0xPT09bT8xOk1hdGgucG93KG0sbi5HRyksUz0xPT09Yj8xOk1hdGgucG93KGIsbi5HQikseD1uLk1YQSp3K24uTVhCKmsrbi5NWEMqUyxPPW4uTVlBKncrbi5NWUIqaytuLk1ZQypTLEE9bi5NWkEqdytuLk1aQiprK24uTVpDKlMsQz1vO0NbMF09eCxDWzFdPU8sQ1syXT1BO3ZhciBGPWM7IWZ1bmN0aW9uKHIsbixhKXtpZigxPT09clswXSYmMT09PXJbMl0pcmV0dXJuIGFbMF09blswXSxhWzFdPW5bMV0sdm9pZChhWzJdPW5bMl0pO3ZhciBvPWE7ZihlLG4sbyk7dmFyIHM9aTshZnVuY3Rpb24oZSx0LHIpe3JbMF09MSp0WzBdL2VbMF0sclsxXT0xKnRbMV0vZVsxXSxyWzJdPTEqdFsyXS9lWzJdfShyLG8scyksZih0LHMsYSl9KG4ud2hpdGVQb2ludCxDLEYpO3ZhciBQPW87IWZ1bmN0aW9uKGUsdCxyKXtpZigwPT09ZVswXSYmMD09PWVbMV0mJjA9PT1lWzJdKXJldHVybiByWzBdPXRbMF0sclsxXT10WzFdLHZvaWQoclsyXT10WzJdKTt2YXIgbj1nKDApLGE9KDEtbikvKDEtZyhlWzBdKSksaT0xLWEsbz0oMS1uKS8oMS1nKGVbMV0pKSxzPTEtbyxjPSgxLW4pLygxLWcoZVsyXSkpLHU9MS1jO3JbMF09dFswXSphK2ksclsxXT10WzFdKm8rcyxyWzJdPXRbMl0qYyt1fShuLmJsYWNrUG9pbnQsRixQKTt2YXIgVD1jOyFmdW5jdGlvbihyLG4sYSl7dmFyIG89YTtmKGUsbixvKTt2YXIgcz1pOyFmdW5jdGlvbihlLHQscil7clswXT0uOTUwNDcqdFswXS9lWzBdLHJbMV09MSp0WzFdL2VbMV0sclsyXT0xLjA4ODgzKnRbMl0vZVsyXX0ocixvLHMpLGYodCxzLGEpfShhLFAsVCk7dmFyIEk9bztmKHIsVCxJKSxsW3BdPTI1NSpoKElbMF0pLGxbcCsxXT0yNTUqaChJWzFdKSxsW3ArMl09MjU1KmgoSVsyXSl9cmV0dXJuIGZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLGksbyl7dmFyIHM7aWYocCh0aGlzLHIpLHM9dC5jYWxsKHRoaXMsIkNhbFJHQiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTthPWF8fG5ldyBGbG9hdDMyQXJyYXkoMyksaT1pfHxuZXcgRmxvYXQzMkFycmF5KFsxLDEsMV0pLG89b3x8bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwxLDAsMCwwLDFdKTt2YXIgYz1lWzBdLHU9ZVsxXSxsPWVbMl07cy53aGl0ZVBvaW50PWU7dmFyIGY9YVswXSxoPWFbMV0sZD1hWzJdO2lmKHMuYmxhY2tQb2ludD1hLHMuR1I9aVswXSxzLkdHPWlbMV0scy5HQj1pWzJdLHMuTVhBPW9bMF0scy5NWUE9b1sxXSxzLk1aQT1vWzJdLHMuTVhCPW9bM10scy5NWUI9b1s0XSxzLk1aQj1vWzVdLHMuTVhDPW9bNl0scy5NWUM9b1s3XSxzLk1aQz1vWzhdLGM8MHx8bDwwfHwxIT09dSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICIuY29uY2F0KHMubmFtZSkrIiwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7cmV0dXJuKGY8MHx8aDwwfHxkPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50IGZvciAiLmNvbmNhdChzLm5hbWUsIiBbIikuY29uY2F0KGYsIiwgIikuY29uY2F0KGgsIiwgIikuY29uY2F0KGQsIl0sICIpKyJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSxzLmJsYWNrUG9pbnQ9bmV3IEZsb2F0MzJBcnJheSgzKSksKHMuR1I8MHx8cy5HRzwwfHxzLkdCPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBHYW1tYSBbIi5jb25jYXQocy5HUiwiLCAiKS5jb25jYXQocy5HRywiLCAiKS5jb25jYXQocy5HQiwiXSBmb3IgIikrIiIuY29uY2F0KHMubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSkscy5HUj1zLkdHPXMuR0I9MSksc31yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXttKHRoaXMsZSx0LHIsbiwxKX19LHtrZXk6ImdldFJnYkJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7Zm9yKHZhciBzPTEvKCgxPDxpKS0xKSxjPTA7YzxyOysrYyltKHRoaXMsZSx0LG4sYSxzKSx0Kz0zLGErPTMrb319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9fV0pLHJ9KHkpfSgpLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj02LzI5P01hdGgucG93KGUsMyk6MTA4Lzg0MSooZS00LzI5KX1mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiByK2UqKG4tcikvdH1mdW5jdGlvbiByKHIsbixhLGksbyxzKXt2YXIgYz1uW2FdLHU9blthKzFdLGw9blthKzJdOyExIT09aSYmKGM9dChjLGksMCwxMDApLHU9dCh1LGksci5hbWluLHIuYW1heCksbD10KGwsaSxyLmJtaW4sci5ibWF4KSksdT5yLmFtYXg/dT1yLmFtYXg6dTxyLmFtaW4mJih1PXIuYW1pbiksbD5yLmJtYXg/bD1yLmJtYXg6bDxyLmJtaW4mJihsPXIuYm1pbik7dmFyIGYsaCxkLHA9KGMrMTYpLzExNixnPXArdS81MDAsdj1wLWwvMjAwLHk9ci5YVyplKGcpLG09ci5ZVyplKHApLGI9ci5aVyplKHYpO3IuWlc8MT8oZj0zLjEzMzkqeSstMS42MTcqbSstLjQ5MDYqYixoPS0uOTc4NSp5KzEuOTE2Km0rLjAzMzMqYixkPS4wNzIqeSstLjIyOSptKzEuNDA1NypiKTooZj0zLjI0MDYqeSstMS41MzcyKm0rLS40OTg2KmIsaD0tLjk2ODkqeSsxLjg3NTgqbSsuMDQxNSpiLGQ9LjA1NTcqeSstLjIwNCptKzEuMDU3KmIpLG9bc109MjU1Kk1hdGguc3FydChmKSxvW3MrMV09MjU1Kk1hdGguc3FydChoKSxvW3MrMl09MjU1Kk1hdGguc3FydChkKX1yZXR1cm4gZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PXUoYSk7ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89dC5jYWxsKHRoaXMsIkxhYiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWIiKTtpZihyPXJ8fFswLDAsMF0saT1pfHxbLTEwMCwxMDAsLTEwMCwxMDBdLG8uWFc9ZVswXSxvLllXPWVbMV0sby5aVz1lWzJdLG8uYW1pbj1pWzBdLG8uYW1heD1pWzFdLG8uYm1pbj1pWzJdLG8uYm1heD1pWzNdLG8uWEI9clswXSxvLllCPXJbMV0sby5aQj1yWzJdLG8uWFc8MHx8by5aVzwwfHwxIT09by5ZVyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO3JldHVybihvLlhCPDB8fG8uWUI8MHx8by5aQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQiKSxvLlhCPW8uWUI9by5aQj0wKSwoby5hbWluPm8uYW1heHx8by5ibWluPm8uYm1heCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMiKSxvLmFtaW49LTEwMCxvLmFtYXg9MTAwLG8uYm1pbj0tMTAwLG8uYm1heD0xMDApLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSl7cih0aGlzLGUsdCwhMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbixhLGksbyxzKXtmb3IodmFyIGM9KDE8PG8pLTEsdT0wO3U8bjt1Kyspcih0aGlzLGUsdCxjLGEsaSksdCs9MyxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiEwfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fV0pLGF9KHkpfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYXJ0aWFsRXZhbHVhdG9yPXQuRXZhbHVhdG9yUHJlcHJvY2Vzc29yPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxNDUpLG89cigxMzQpLHM9cigxNjMpLGM9cigxNjcpLHU9cigxNjYpLGw9cigxNzApLGY9cigxNzkpLGg9cigxODApLGQ9cigxNzEpLHA9cigxODYpLGc9cigxNDYpLHY9cigxODgpLHk9cigxMzkpLG09cigxMzYpLGI9cigxODkpLHc9cigxNDMpLGs9cigxNDgpLFM9cigxNjgpLHg9cigxMzUpLE89cigxNzQpLEE9cigxNjkpLEM9cigxOTApLEY9cigxOTEpLFA9cigxOTIpO2Z1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8RChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQihlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fEQoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRSgpe0U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXt1KHt9LCIiKX1jYXRjaChlKXt1PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBsKGUsdCxyLG4pe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBDKG58fFtdKTtyZXR1cm4gYShvLCJfaW52b2tlIix7dmFsdWU6UyhlLHIscyl9KSxvfWZ1bmN0aW9uIGYoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9bDt2YXIgaD17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTt1KHYsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoRihbXSkpKTttJiZtIT09dCYmci5jYWxsKG0sbykmJih2PW0pO3ZhciBiPWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gdyhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gayhlLHQpe2Z1bmN0aW9uIGkoYSxvLHMsYyl7dmFyIHU9ZihlW2FdLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsaD1sLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09bihoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT90LnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87YSh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPXgobyxyKTtpZihzKXtpZihzPT09aCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWYoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09aCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24geChlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLHgoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksaDt2YXIgYT1mKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsaDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxoKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGgpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gQyhlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gRihlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpQfX1mdW5jdGlvbiBQKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxhKGIsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxhKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPXUoZyxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsdShlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYiksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sdyhrLnByb3RvdHlwZSksdShrLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1rLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgayhsKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LHcoYiksdShiLGMsIkdlbmVyYXRvciIpLHUoYixvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHUoYiwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1GLEMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsaCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxofSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksaH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6RihlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksaH19LGV9ZnVuY3Rpb24gaihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7aihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7aihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIF8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gUihlLHQscil7cmV0dXJuIHQmJkwoZS5wcm90b3R5cGUsdCksciYmTChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gTihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9RChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gRChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gQihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgVT1PYmplY3QuZnJlZXplKHttYXhJbWFnZVNpemU6LTEsZGlzYWJsZUZvbnRGYWNlOiExLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITAsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITAsZm9udEV4dHJhUHJvcGVydGllczohMSx1c2VTeXN0ZW1Gb250czohMCxjTWFwVXJsOm51bGwsc3RhbmRhcmRGb250RGF0YVVybDpudWxsfSksJD1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBYKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHIsbj1OKGUpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9WChyLnZhbHVlLCEwKTtpZihpKXJldHVybiBpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4oMCxhLndhcm4pKCJVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAiLmNvbmNhdChlKSksInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBvLk5hbWUpKXJldHVybiB0P251bGw6InNvdXJjZS1vdmVyIjtzd2l0Y2goZS5uYW1lKXtjYXNlIk5vcm1hbCI6Y2FzZSJDb21wYXRpYmxlIjpyZXR1cm4ic291cmNlLW92ZXIiO2Nhc2UiTXVsdGlwbHkiOnJldHVybiJtdWx0aXBseSI7Y2FzZSJTY3JlZW4iOnJldHVybiJzY3JlZW4iO2Nhc2UiT3ZlcmxheSI6cmV0dXJuIm92ZXJsYXkiO2Nhc2UiRGFya2VuIjpyZXR1cm4iZGFya2VuIjtjYXNlIkxpZ2h0ZW4iOnJldHVybiJsaWdodGVuIjtjYXNlIkNvbG9yRG9kZ2UiOnJldHVybiJjb2xvci1kb2RnZSI7Y2FzZSJDb2xvckJ1cm4iOnJldHVybiJjb2xvci1idXJuIjtjYXNlIkhhcmRMaWdodCI6cmV0dXJuImhhcmQtbGlnaHQiO2Nhc2UiU29mdExpZ2h0IjpyZXR1cm4ic29mdC1saWdodCI7Y2FzZSJEaWZmZXJlbmNlIjpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSJFeGNsdXNpb24iOnJldHVybiJleGNsdXNpb24iO2Nhc2UiSHVlIjpyZXR1cm4iaHVlIjtjYXNlIlNhdHVyYXRpb24iOnJldHVybiJzYXR1cmF0aW9uIjtjYXNlIkNvbG9yIjpyZXR1cm4iY29sb3IiO2Nhc2UiTHVtaW5vc2l0eSI6cmV0dXJuImx1bWlub3NpdHkifXJldHVybiB0P251bGw6KCgwLGEud2FybikoIlVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICIuY29uY2F0KGUubmFtZSkpLCJzb3VyY2Utb3ZlciIpfWZ1bmN0aW9uIEgoZSl7ZS5mbj09PWEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCYmZS5hcmdzWzBdJiZlLmFyZ3NbMF0uY291bnQ+MCYmZS5hcmdzWzBdLmNvdW50Kyt9dmFyIHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gUihlLFt7a2V5OiJjaGVjayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCsrdGhpcy5jaGVja2VkPGUuQ0hFQ0tfVElNRV9FVkVSWSkmJih0aGlzLmNoZWNrZWQ9MCx0aGlzLmVuZFRpbWU8PURhdGUubm93KCkpfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrZS5USU1FX1NMT1RfRFVSQVRJT05fTVMsdGhpcy5jaGVja2VkPTB9fV0sW3trZXk6IlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsMjApfX0se2tleToiQ0hFQ0tfVElNRV9FVkVSWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIkNIRUNLX1RJTUVfRVZFUlkiLDEwMCl9fV0pLGV9KCksRz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLG49dC5oYW5kbGVyLGE9dC5wYWdlSW5kZXgsaT10LmlkRmFjdG9yeSxvPXQuZm9udENhY2hlLHM9dC5idWlsdEluQ01hcENhY2hlLGM9dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsdT10Lmdsb2JhbEltYWdlQ2FjaGUsbD10Lm9wdGlvbnMsZj12b2lkIDA9PT1sP251bGw6bDtfKHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5oYW5kbGVyPW4sdGhpcy5wYWdlSW5kZXg9YSx0aGlzLmlkRmFjdG9yeT1pLHRoaXMuZm9udENhY2hlPW8sdGhpcy5idWlsdEluQ01hcENhY2hlPXMsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9Yyx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9dSx0aGlzLm9wdGlvbnM9Znx8VSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ9ITEsdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kPXRoaXMuZmV0Y2hCdWlsdEluQ01hcC5iaW5kKHRoaXMpfXZhciB0LHIsbixnLHgsaixMLEQ7cmV0dXJuIFIoZSxbe2tleToiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bmV3IHAuUERGRnVuY3Rpb25GYWN0b3J5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzRXZhbFN1cHBvcnRlZH0pO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfcGRmRnVuY3Rpb25GYWN0b3J5IixlKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9T2JqZWN0LmNyZWF0ZSh0aGlzKTtyZXR1cm4gdC5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnMsZSksdH19LHtrZXk6Imhhc0JsZW5kTW9kZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLm9iaklkJiZ0LmhhcyhlLm9iaklkKSlyZXR1cm4hMTt2YXIgcj1uZXcgby5SZWZTZXQodCk7ZS5vYmpJZCYmci5wdXQoZS5vYmpJZCk7Zm9yKHZhciBuPVtlXSxpPXRoaXMueHJlZjtuLmxlbmd0aDspe3ZhciBzPW4uc2hpZnQoKSxjPXMuZ2V0KCJFeHRHU3RhdGUiKTtpZihjIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgdSxsPU4oYy5nZXRSYXdWYWx1ZXMoKSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO2lmKGYgaW5zdGFuY2VvZiBvLlJlZil7aWYoci5oYXMoZikpY29udGludWU7dHJ5e2Y9aS5mZXRjaChmKX1jYXRjaChlKXtyLnB1dChmKSwoMCxhLmluZm8pKCdoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKGYgaW5zdGFuY2VvZiBvLkRpY3Qpe2Yub2JqSWQmJnIucHV0KGYub2JqSWQpO3ZhciBoPWYuZ2V0KCJCTSIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpe2lmKCJOb3JtYWwiIT09aC5uYW1lKXJldHVybiEwfWVsc2UgaWYodm9pZCAwIT09aCYmQXJyYXkuaXNBcnJheShoKSl7dmFyIGQscD1OKGgpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lJiYiTm9ybWFsIiE9PWcubmFtZSlyZXR1cm4hMH19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfX12YXIgdj1zLmdldCgiWE9iamVjdCIpO2lmKHYgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB5LGI9Tih2LmdldFJhd1ZhbHVlcygpKTt0cnl7Zm9yKGIucygpOyEoeT1iLm4oKSkuZG9uZTspe3ZhciB3PXkudmFsdWU7aWYodyBpbnN0YW5jZW9mIG8uUmVmKXtpZihyLmhhcyh3KSljb250aW51ZTt0cnl7dz1pLmZldGNoKHcpfWNhdGNoKGUpe3IucHV0KHcpLCgwLGEuaW5mbykoJ2hhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKHcgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pe3cuZGljdC5vYmpJZCYmci5wdXQody5kaWN0Lm9iaklkKTt2YXIgaz13LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtrIGluc3RhbmNlb2Ygby5EaWN0JiYoay5vYmpJZCYmci5oYXMoay5vYmpJZCl8fChuLnB1c2goayksay5vYmpJZCYmci5wdXQoay5vYmpJZCkpKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19dmFyIFMseD1OKHIpO3RyeXtmb3IoeC5zKCk7IShTPXgubigpKS5kb25lOyl7dmFyIE89Uy52YWx1ZTt0LnB1dChPKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9cmV0dXJuITF9fSx7a2V5OiJmZXRjaEJ1aWx0SW5DTWFwIix2YWx1ZTooRD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXMuYnVpbHRJbkNNYXBDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscik7Y2FzZSAzOmlmKG51bGw9PT10aGlzLm9wdGlvbnMuY01hcFVybCl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBpPSIiLmNvbmNhdCh0aGlzLm9wdGlvbnMuY01hcFVybCkuY29uY2F0KHQsIi5iY21hcCIpLGUubmV4dD03LGZldGNoKGkpO2Nhc2UgNzppZigobz1lLnNlbnQpLm9rKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdmZXRjaEJ1aWx0SW5DTWFwOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoby5zdGF0dXNUZXh0LCciLicpKTtjYXNlIDEwOnJldHVybiBlLnQwPVVpbnQ4QXJyYXksZS5uZXh0PTEzLG8uYXJyYXlCdWZmZXIoKTtjYXNlIDEzOmUudDE9ZS5zZW50LGUudDI9bmV3IGUudDAoZS50MSksZS50Mz1hLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZLG49e2NNYXBEYXRhOmUudDIsY29tcHJlc3Npb25UeXBlOmUudDN9LGUubmV4dD0yMjticmVhaztjYXNlIDE5OnJldHVybiBlLm5leHQ9MjEsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCdWlsdEluQ01hcCIse25hbWU6dH0pO2Nhc2UgMjE6bj1lLnNlbnQ7Y2FzZSAyMjpyZXR1cm4gbi5jb21wcmVzc2lvblR5cGUhPT1hLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSYmdGhpcy5idWlsdEluQ01hcENhY2hlLnNldCh0LG4pLGUuYWJydXB0KCJyZXR1cm4iLG4pO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gRC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hTdGFuZGFyZEZvbnREYXRhIix2YWx1ZTooTD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvLHMsYztyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEocj10aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IHkuU3RyZWFtKHIpKTtjYXNlIDM6aWYoIXRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250c3x8IlN5bWJvbCI9PT10fHwiWmFwZkRpbmdiYXRzIj09PXQpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6aWYobj0oMCxsLmdldEZvbnROYW1lVG9GaWxlTWFwKSgpLGk9blt0XSxudWxsPT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2UubmV4dD0yMDticmVha31yZXR1cm4gcz0iIi5jb25jYXQodGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpLmNvbmNhdChpKSxlLm5leHQ9MTAsZmV0Y2gocyk7Y2FzZSAxMDppZigoYz1lLnNlbnQpLm9rKXtlLm5leHQ9MTU7YnJlYWt9KDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQocywnIiB3aXRoICInKS5jb25jYXQoYy5zdGF0dXNUZXh0LCciLicpKSxlLm5leHQ9MTg7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZS5uZXh0PTE3LGMuYXJyYXlCdWZmZXIoKTtjYXNlIDE3Om89ZS5zZW50O2Nhc2UgMTg6ZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjA6cmV0dXJuIGUucHJldj0yMCxlLm5leHQ9MjMsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIix7ZmlsZW5hbWU6aX0pO2Nhc2UgMjM6bz1lLnNlbnQsZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjY6ZS5wcmV2PTI2LGUudDA9ZS5jYXRjaCgyMCksKDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoZS50MCwnIi4nKSk7Y2FzZSAyOTppZihvKXtlLm5leHQ9MzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzE6cmV0dXJuIHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLnNldCh0LG8pLGUuYWJydXB0KCJyZXR1cm4iLG5ldyB5LlN0cmVhbShvKSk7Y2FzZSAzMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIwLDI2XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiYnVpbGRGb3JtWE9iamVjdCIsdmFsdWU6KGo9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbixpLHMsYyx1KXt2YXIgbCxmLGgsZCxwLGcsdix5LG0sYixrO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobD1yLmRpY3QsZj1sLmdldEFycmF5KCJNYXRyaXgiKSxoPWwuZ2V0QXJyYXkoIkJCb3giKSxoPUFycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9hLlV0aWwubm9ybWFsaXplUmVjdChoKTpudWxsLCFsLmhhcygiT0MiKSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD03LHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMobC5nZXQoIk9DIiksdCk7Y2FzZSA3OmQ9ZS5zZW50O2Nhc2UgODppZih2b2lkIDAhPT1kJiZpLmFkZE9wKGEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSwhKGc9bC5nZXQoIkdyb3VwIikpKXtlLm5leHQ9Mjk7YnJlYWt9aWYocD17bWF0cml4OmYsYmJveDpoLHNtYXNrOm4saXNvbGF0ZWQ6ITEsa25vY2tvdXQ6ITF9LHY9Zy5nZXQoIlMiKSx5PW51bGwsISgwLG8uaXNOYW1lKSh2LCJUcmFuc3BhcmVuY3kiKSl7ZS5uZXh0PTI3O2JyZWFrfWlmKHAuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITEscC5rbm9ja291dD1nLmdldCgiSyIpfHwhMSwhZy5oYXMoIkNTIikpe2UubmV4dD0yNzticmVha31pZihtPWcuZ2V0UmF3KCJDUyIpLCEoYj13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKG0sdGhpcy54cmVmLHUpKSl7ZS5uZXh0PTI0O2JyZWFrfXk9YixlLm5leHQ9Mjc7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gZS5uZXh0PTI2LHRoaXMucGFyc2VDb2xvclNwYWNlKHtjczptLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KTtjYXNlIDI2Onk9ZS5zZW50O2Nhc2UgMjc6biYmbi5iYWNrZHJvcCYmKHk9eXx8dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLG4uYmFja2Ryb3A9eS5nZXRSZ2Iobi5iYWNrZHJvcCwwKSksaS5hZGRPcChhLk9QUy5iZWdpbkdyb3VwLFtwXSk7Y2FzZSAyOTpyZXR1cm4gaz1nP1tmLG51bGxdOltmLGhdLGkuYWRkT3AoYS5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luLGspLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06cix0YXNrOnMscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8dCxvcGVyYXRvckxpc3Q6aSxpbml0aWFsU3RhdGU6Y30pLnRoZW4oKGZ1bmN0aW9uKCl7aS5hZGRPcChhLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKSxnJiZpLmFkZE9wKGEuT1BTLmVuZEdyb3VwLFtwXSksdm9pZCAwIT09ZCYmaS5hZGRPcChhLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKSk7Y2FzZSAzMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe3JldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfc2VuZEltZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPXQ/W3QuYml0bWFwfHx0LmRhdGEuYnVmZmVyXTpudWxsO3JldHVybiB0aGlzLnBhcnNpbmdUeXBlM0ZvbnR8fHI/dGhpcy5oYW5kbGVyLnNlbmQoImNvbW1vbm9iaiIsW2UsIkltYWdlIix0XSxuKTp0aGlzLmhhbmRsZXIuc2VuZCgib2JqIixbZSx0aGlzLnBhZ2VJbmRleCwiSW1hZ2UiLHRdLG4pfX0se2tleToiYnVpbGRQYWludEltYWdlWE9iamVjdCIsdmFsdWU6KHg9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGksbyxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHcsUyx4LE8sQSxDLEYsVCxJLGosTT10aGlzO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj10LnJlc291cmNlcyxuPXQuaW1hZ2UsaT10LmlzSW5saW5lLG89dm9pZCAwIT09aSYmaSxzPXQub3BlcmF0b3JMaXN0LGM9dC5jYWNoZUtleSx1PXQubG9jYWxJbWFnZUNhY2hlLGw9dC5sb2NhbENvbG9yU3BhY2VDYWNoZSxmPW4uZGljdCxoPWYub2JqSWQsZD1mLmdldCgiVyIsIldpZHRoIikscD1mLmdldCgiSCIsIkhlaWdodCIpLGQmJiJudW1iZXIiPT10eXBlb2YgZCYmcCYmIm51bWJlciI9PXR5cGVvZiBwKXtlLm5leHQ9ODticmVha31yZXR1cm4oMCxhLndhcm4pKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA4OmlmKCEoLTEhPT0oZz10aGlzLm9wdGlvbnMubWF4SW1hZ2VTaXplKSYmZCpwPmcpKXtlLm5leHQ9MTU7YnJlYWt9aWYodj0iSW1hZ2UgZXhjZWVkZWQgbWF4aW11bSBhbGxvd2VkIHNpemUgYW5kIHdhcyByZW1vdmVkLiIsIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpe2UubmV4dD0xNDticmVha31yZXR1cm4oMCxhLndhcm4pKHYpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcih2KTtjYXNlIDE1OmlmKCFmLmhhcygiT0MiKSl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBlLm5leHQ9MTgsdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhmLmdldCgiT0MiKSxyKTtjYXNlIDE4Onk9ZS5zZW50O2Nhc2UgMTk6aWYoIWYuZ2V0KCJJTSIsIkltYWdlTWFzayIpKXtlLm5leHQ9NDQ7YnJlYWt9aWYodz1mLmdldCgiSSIsIkludGVycG9sYXRlIiksUz1kKzc+PjMseD1uLmdldEJ5dGVzKFMqcCksTz1mLmdldEFycmF5KCJEIiwiRGVjb2RlIiksIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7ZS5uZXh0PTMyO2JyZWFrfXJldHVybihtPVAuUERGSW1hZ2UuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6eCx3aWR0aDpkLGhlaWdodDpwLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOm4gaW5zdGFuY2VvZiBrLkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOiEhTyYmT1swXT4wLGludGVycG9sYXRlOnd9KSkuY2FjaGVkPSEhYyxiPVttXSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxiLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6YixvcHRpb25hbENvbnRlbnQ6eX0pLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDMyOmlmKCEobT1QLlBERkltYWdlLmNyZWF0ZU1hc2soe2ltZ0FycmF5Ongsd2lkdGg6ZCxoZWlnaHQ6cCxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpuIGluc3RhbmNlb2Ygay5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTohIU8mJk9bMF0+MCxpbnRlcnBvbGF0ZTp3LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOnRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZH0pKS5pc1NpbmdsZU9wYXF1ZVBpeGVsKXtlLm5leHQ9Mzc7YnJlYWt9cmV0dXJuIHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLFtdLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLGFyZ3M6W10sb3B0aW9uYWxDb250ZW50Onl9KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAzNzpyZXR1cm4gQT0ibWFza18iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxzLmFkZERlcGVuZGVuY3koQSksdGhpcy5fc2VuZEltZ0RhdGEoQSxtKSxiPVt7ZGF0YTpBLHdpZHRoOm0ud2lkdGgsaGVpZ2h0Om0uaGVpZ2h0LGludGVycG9sYXRlOm0uaW50ZXJwb2xhdGUsY291bnQ6MX1dLHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGIseSksYyYmdS5zZXQoYyxoLHtmbjphLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDQ6aWYoQz1mLmdldCgiU00iLCJTTWFzayIpfHwhMSxGPWYuZ2V0KCJNYXNrIil8fCExLCFvfHxDfHxGfHwhKGQrcDwyMDApKXtlLm5leHQ9NTI7YnJlYWt9cmV0dXJuIFQ9bmV3IFAuUERGSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KSxtPVQuY3JlYXRlSW1hZ2VEYXRhKCEwKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LFttXSx5KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA1MjpJPSJpbWdfIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKSksaj0hMSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ/ST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiX3R5cGUzXyIpLmNvbmNhdChJKTpoJiYoaj10aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2hvdWxkQ2FjaGUoaCx0aGlzLnBhZ2VJbmRleCkpJiYoST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiXyIpLmNvbmNhdChJKSkscy5hZGREZXBlbmRlbmN5KEkpLGI9W0ksZCxwXSxQLlBERkltYWdlLmJ1aWxkSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbT1lLmNyZWF0ZUltYWdlRGF0YSghMSksYyYmaCYmaiYmTS5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGgsbS5kYXRhLmxlbmd0aCksTS5fc2VuZEltZ0RhdGEoSSxtLGopfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdVbmFibGUgdG8gZGVjb2RlIGltYWdlICInLmNvbmNhdChJLCciOiAiJykuY29uY2F0KGUsJyIuJykpLE0uX3NlbmRJbWdEYXRhKEksbnVsbCxqKX0pKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGIseSksYyYmKHUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksaCYmKCgwLGEuYXNzZXJ0KSghbywiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkUGFnZUluZGV4KGgsdGhpcy5wYWdlSW5kZXgpLGomJnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGgse29iaklkOkksZm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5LGJ5dGVTaXplOjB9KSkpO2Nhc2UgNTk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4geC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFuZGxlU01hc2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1lLmdldCgiRyIpLHM9e3N1YnR5cGU6ZS5nZXQoIlMiKS5uYW1lLGJhY2tkcm9wOmUuZ2V0KCJCQyIpfSxjPWUuZ2V0KCJUUiIpO2lmKCgwLHAuaXNQREZGdW5jdGlvbikoYykpe2Zvcih2YXIgdT10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGMpLGw9bmV3IFVpbnQ4QXJyYXkoMjU2KSxmPW5ldyBGbG9hdDMyQXJyYXkoMSksaD0wO2g8MjU2O2grKylmWzBdPWgvMjU1LHUoZiwwLGYsMCksbFtoXT0yNTUqZlswXXwwO3MudHJhbnNmZXJNYXA9bH1yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQsbyxzLHIsbixhLnN0YXRlLmNsb25lKCksaSl9fSx7a2V5OiJoYW5kbGVUcmFuc2ZlckZ1bmN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKXQ9ZTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKGUpKXJldHVybiBudWxsO3Q9W2VdfXZhciByLG49W10sYT0wLGk9MCxzPU4odCk7dHJ5e2ZvcihzLnMoKTshKHI9cy5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoYSsrLCgwLG8uaXNOYW1lKSh1LCJJZGVudGl0eSIpKW4ucHVzaChudWxsKTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKHUpKXJldHVybiBudWxsO2Zvcih2YXIgbD10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHUpLGY9bmV3IFVpbnQ4QXJyYXkoMjU2KSxoPW5ldyBGbG9hdDMyQXJyYXkoMSksZD0wO2Q8MjU2O2QrKyloWzBdPWQvMjU1LGwoaCwwLGgsMCksZltkXT0yNTUqaFswXXwwO24ucHVzaChmKSxpKyt9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1yZXR1cm4gMSE9PWEmJjQhPT1hfHwwPT09aT9udWxsOm59fSx7a2V5OiJoYW5kbGVUaWxpbmdUeXBlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGkscyxjLHUpe3ZhciBsPXRoaXMsaD1uZXcgRi5PcGVyYXRvckxpc3QsZD1vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpbaS5nZXQoIlJlc291cmNlcyIpLHJdfSk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOmMscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Omh9KS50aGVuKChmdW5jdGlvbigpe3ZhciByPWguZ2V0SVIoKSxuPSgwLGYuZ2V0VGlsaW5nUGF0dGVybklSKShyLGksdCk7cy5hZGREZXBlbmRlbmNpZXMoaC5kZXBlbmRlbmNpZXMpLHMuYWRkT3AoZSxuKSxpLm9iaklkJiZ1LnNldChudWxsLGkub2JqSWQse29wZXJhdG9yTGlzdElSOnIsZGljdDppfSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihsLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBsLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JUaWxpbmdQYXR0ZXJufSksdm9pZCgwLGEud2FybikoJ2hhbmRsZVRpbGluZ1R5cGUgLSBpZ25vcmluZyBwYXR0ZXJuOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSl9fSx7a2V5OiJoYW5kbGVTZXRGb250Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksYyl7dmFyIHU9dGhpcyxsPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsLGY9YXJndW1lbnRzLmxlbmd0aD43JiZ2b2lkIDAhPT1hcmd1bWVudHNbN10/YXJndW1lbnRzWzddOm51bGwsaD10JiZ0WzBdaW5zdGFuY2VvZiBvLk5hbWU/dFswXS5uYW1lOm51bGw7cmV0dXJuIHRoaXMubG9hZEZvbnQoaCxyLGUsbCxmKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5mb250LmlzVHlwZTNGb250P3QubG9hZFR5cGUzRGF0YSh1LGUsaSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbi5hZGREZXBlbmRlbmNpZXModC50eXBlM0RlcGVuZGVuY2llcyksdH0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRMb2FkVHlwZTN9KSxuZXcgeih7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udCgiVHlwZTMgZm9udCBsb2FkIGVycm9yOiAiLmNvbmNhdChlKSksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp1Lm9wdGlvbnN9KX0pKTp0fSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjLmZvbnQ9ZS5mb250LGUuc2VuZCh1LmhhbmRsZXIpLGUubG9hZGVkTmFtZX0pKX19LHtrZXk6ImhhbmRsZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIG49ci5mb250LGk9bi5jaGFyc1RvR2x5cGhzKHQpO3JldHVybiBuLmRhdGEmJihyLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBR3x8IlBhdHRlcm4iPT09ci5maWxsQ29sb3JTcGFjZS5uYW1lfHxuLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJmUuYnVpbGRGb250UGF0aHMobixpLHRoaXMuaGFuZGxlcix0aGlzLm9wdGlvbnMpLGl9fSx7a2V5OiJlbnN1cmVTdGF0ZUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlLmZvbnQpe3ZhciB0PW5ldyBhLkZvcm1hdEVycm9yKCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuIik7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFN0YXRlfSksdm9pZCgwLGEud2FybikoJ2Vuc3VyZVN0YXRlRm9udDogIicuY29uY2F0KHQsJyIuJykpO3Rocm93IHR9fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTooZz1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPXQucmVzb3VyY2VzLG49dC5nU3RhdGUsaT10Lm9wZXJhdG9yTGlzdCxzPXQuY2FjaGVLZXksYz10LnRhc2ssdT10LnN0YXRlTWFuYWdlcixsPXQubG9jYWxHU3RhdGVDYWNoZSxmPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsaD1uLm9iaklkLGQ9ITAscD1bXSxnPVByb21pc2UucmVzb2x2ZSgpLHY9TihuLmdldEtleXMoKSk7dHJ5e2ZvcihtPWZ1bmN0aW9uKCl7dmFyIGU9eS52YWx1ZSx0PW4uZ2V0KGUpO3N3aXRjaChlKXtjYXNlIlR5cGUiOmJyZWFrO2Nhc2UiTFciOmNhc2UiTEMiOmNhc2UiTEoiOmNhc2UiTUwiOmNhc2UiRCI6Y2FzZSJSSSI6Y2FzZSJGTCI6Y2FzZSJDQSI6Y2FzZSJjYSI6cC5wdXNoKFtlLHRdKTticmVhaztjYXNlIkZvbnQiOmQ9ITEsZz1nLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGIuaGFuZGxlU2V0Rm9udChyLG51bGwsdFswXSxpLGMsdS5zdGF0ZSkudGhlbigoZnVuY3Rpb24ocil7aS5hZGREZXBlbmRlbmN5KHIpLHAucHVzaChbZSxbcix0WzFdXV0pfSkpfSkpO2JyZWFrO2Nhc2UiQk0iOnAucHVzaChbZSxYKHQpXSk7YnJlYWs7Y2FzZSJTTWFzayI6aWYoKDAsby5pc05hbWUpKHQsIk5vbmUiKSl7cC5wdXNoKFtlLCExXSk7YnJlYWt9dCBpbnN0YW5jZW9mIG8uRGljdD8oZD0hMSxnPWcudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYi5oYW5kbGVTTWFzayh0LHIsaSxjLHUsZil9KSkscC5wdXNoKFtlLCEwXSkpOigwLGEud2FybikoIlVuc3VwcG9ydGVkIFNNYXNrIHR5cGUiKTticmVhaztjYXNlIlRSIjp2YXIgcz1iLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odCk7cC5wdXNoKFtlLHNdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsYS5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2UpO2JyZWFrO2RlZmF1bHQ6KDAsYS5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrZSl9fSx2LnMoKTshKHk9di5uKCkpLmRvbmU7KW0oKX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZy50aGVuKChmdW5jdGlvbigpe3AubGVuZ3RoPjAmJmkuYWRkT3AoYS5PUFMuc2V0R1N0YXRlLFtwXSksZCYmbC5zZXQocyxoLHApfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRGb250Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGksdT10aGlzLGw9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGwsZj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06bnVsbCxoPWZ1bmN0aW9uKCl7dmFyIGU9TShFKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyB6KHtsb2FkZWROYW1lOiJnX2ZvbnRfZXJyb3IiLGZvbnQ6bmV3IHMuRXJyb3JGb250KCdGb250ICInLmNvbmNhdCh0LCciIGlzIG5vdCBhdmFpbGFibGUuJykpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPXRoaXMueHJlZjtpZihyKXIgaW5zdGFuY2VvZiBvLlJlZiYmKGk9cik7ZWxzZXt2YXIgcD1uLmdldCgiRm9udCIpO3AmJihpPXAuZ2V0UmF3KHQpKX1pZighaSl7dmFyIGc9J0ZvbnQgIicuY29uY2F0KHR8fHImJnIudG9TdHJpbmcoKSwnIiBpcyBub3QgYXZhaWxhYmxlJyk7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMmJiF0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpcmV0dXJuKDAsYS53YXJuKSgiIi5jb25jYXQoZywiLiIpKSxoKCk7dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udE1pc3Npbmd9KSwoMCxhLndhcm4pKCIiLmNvbmNhdChnLCIgLS0gYXR0ZW1wdGluZyB0byBmYWxsYmFjayB0byBhIGRlZmF1bHQgZm9udC4iKSksaT1sfHxlLmZhbGxiYWNrRm9udERpY3R9aWYodGhpcy5wYXJzaW5nVHlwZTNGb250JiZ0aGlzLnR5cGUzRm9udFJlZnMuaGFzKGkpKXJldHVybiBoKCk7aWYodGhpcy5mb250Q2FjaGUuaGFzKGkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoaSk7aWYoISgocj1kLmZldGNoSWZSZWYoaSkpaW5zdGFuY2VvZiBvLkRpY3QpKXJldHVybiBoKCk7aWYoci5jYWNoZUtleSYmdGhpcy5mb250Q2FjaGUuaGFzKHIuY2FjaGVLZXkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoci5jYWNoZUtleSk7dmFyIHYseT0oMCxhLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RyeXsodj10aGlzLnByZUV2YWx1YXRlRm9udChyKSkuY3NzRm9udEluZm89Zn1jYXRjaChlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkRm9udCAtIHByZUV2YWx1YXRlRm9udCBmYWlsZWQ6ICInLmNvbmNhdChlLCciLicpKSxoKCl9dmFyIG0sYj12LHc9Yi5kZXNjcmlwdG9yLGs9Yi5oYXNoLFM9aSBpbnN0YW5jZW9mIG8uUmVmO2lmKFMmJihtPSJmIi5jb25jYXQoaS50b1N0cmluZygpKSksayYmdyBpbnN0YW5jZW9mIG8uRGljdCl7dy5mb250QWxpYXNlc3x8KHcuZm9udEFsaWFzZXM9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHg9dy5mb250QWxpYXNlcztpZih4W2tdKXt2YXIgTz14W2tdLmFsaWFzUmVmO2lmKFMmJk8mJnRoaXMuZm9udENhY2hlLmhhcyhPKSlyZXR1cm4gdGhpcy5mb250Q2FjaGUucHV0QWxpYXMoaSxPKSx0aGlzLmZvbnRDYWNoZS5nZXQoaSl9ZWxzZSB4W2tdPXtmb250SUQ6dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCl9O1MmJih4W2tdLmFsaWFzUmVmPWkpLG09eFtrXS5mb250SUR9cmV0dXJuIFM/dGhpcy5mb250Q2FjaGUucHV0KGkseS5wcm9taXNlKToobXx8KG09dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCkpLHIuY2FjaGVLZXk9ImNhY2hlS2V5XyIuY29uY2F0KG0pLHRoaXMuZm9udENhY2hlLnB1dChyLmNhY2hlS2V5LHkucHJvbWlzZSkpLCgwLGEuYXNzZXJ0KShtJiZtLnN0YXJ0c1dpdGgoImYiKSwnVGhlICJmb250SUQiIG11c3QgYmUgKGNvcnJlY3RseSkgZGVmaW5lZC4nKSxyLmxvYWRlZE5hbWU9IiIuY29uY2F0KHRoaXMuaWRGYWN0b3J5LmdldERvY0lkKCksIl8iKS5jb25jYXQobSksdGhpcy50cmFuc2xhdGVGb250KHYpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUuZm9udFR5cGUmJmQuc3RhdHMuYWRkRm9udFR5cGUoZS5mb250VHlwZSkseS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250OmUsZGljdDpyLGV2YWx1YXRvck9wdGlvbnM6dS5vcHRpb25zfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt1LmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250VHJhbnNsYXRlfSksKDAsYS53YXJuKSgnbG9hZEZvbnQgLSB0cmFuc2xhdGVGb250IGZhaWxlZDogIicuY29uY2F0KGUsJyIuJykpO3RyeXt2YXIgdD13JiZ3LmdldCgiRm9udEZpbGUzIiksbj10JiZ0LmdldCgiU3VidHlwZSIpLGk9KDAsYy5nZXRGb250VHlwZSkodi50eXBlLG4mJm4ubmFtZSk7dm9pZCAwIT09aSYmZC5zdGF0cy5hZGRGb250VHlwZShpKX1jYXRjaChlKXt9eS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250Om5ldyBzLkVycm9yRm9udChlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKX0pKSx5LnByb21pc2V9fSx7a2V5OiJidWlsZFBhdGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9ZS5sZW5ndGgtMTtpZihyfHwocj1bXSksaTwwfHxlLmZuQXJyYXlbaV0hPT1hLk9QUy5jb25zdHJ1Y3RQYXRoKXt2YXIgbztzd2l0Y2gobiYmKCgwLGEud2FybikoJ0VuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIicuY29uY2F0KHQsJyIgaW5zaWRlIG9mIGEgdGV4dCBvYmplY3QuJykpLGUuYWRkT3AoYS5PUFMuc2F2ZSxudWxsKSksdCl7Y2FzZSBhLk9QUy5yZWN0YW5nbGU6dmFyIHM9clswXStyWzJdLGM9clsxXStyWzNdO289W01hdGgubWluKHJbMF0scyksTWF0aC5tYXgoclswXSxzKSxNYXRoLm1pbihyWzFdLGMpLE1hdGgubWF4KHJbMV0sYyldO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmNhc2UgYS5PUFMubGluZVRvOm89W3JbMF0sclswXSxyWzFdLHJbMV1dO2JyZWFrO2RlZmF1bHQ6bz1bMS8wLC0xLzAsMS8wLC0xLzBdfWUuYWRkT3AoYS5PUFMuY29uc3RydWN0UGF0aCxbW3RdLHIsb10pLG4mJmUuYWRkT3AoYS5PUFMucmVzdG9yZSxudWxsKX1lbHNle3ZhciB1LGw9ZS5hcmdzQXJyYXlbaV07bFswXS5wdXNoKHQpLCh1PWxbMV0pLnB1c2guYXBwbHkodSxJKHIpKTt2YXIgZj1sWzJdO3N3aXRjaCh0KXtjYXNlIGEuT1BTLnJlY3RhbmdsZTp2YXIgaD1yWzBdK3JbMl0sZD1yWzFdK3JbM107ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0saCksZlsxXT1NYXRoLm1heChmWzFdLHJbMF0saCksZlsyXT1NYXRoLm1pbihmWzJdLHJbMV0sZCksZlszXT1NYXRoLm1heChmWzNdLHJbMV0sZCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0pLGZbMV09TWF0aC5tYXgoZlsxXSxyWzBdKSxmWzJdPU1hdGgubWluKGZbMl0sclsxXSksZlszXT1NYXRoLm1heChmWzNdLHJbMV0pfX19fSx7a2V5OiJwYXJzZUNvbG9yU3BhY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmNzLG49ZS5yZXNvdXJjZXMsaT1lLmxvY2FsQ29sb3JTcGFjZUNhY2hlO3JldHVybiB3LkNvbG9yU3BhY2UucGFyc2VBc3luYyh7Y3M6cix4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6bixwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOml9KS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29sb3JTcGFjZX0pLCgwLGEud2FybikoJ3BhcnNlQ29sb3JTcGFjZSAtIGlnbm9yaW5nIENvbG9yU3BhY2U6ICInLmNvbmNhdChlLCciLicpKSxudWxsO3Rocm93IGV9KSl9fSx7a2V5OiJwYXJzZVNoYWRpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc2hhZGluZyxyPWUucmVzb3VyY2VzLG49ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxhPWUubG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlLGk9YS5nZXQodCk7aWYoIWkpe3ZhciBvPWYuUGF0dGVybi5wYXJzZVNoYWRpbmcodCx0aGlzLnhyZWYscix0aGlzLmhhbmRsZXIsdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LG4pLmdldElSKCk7aT0icGF0dGVybl8iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxhLnNldCh0LGkpLHRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtpLHRoaXMucGFnZUluZGV4LCJQYXR0ZXJuIixvXSl9cmV0dXJuIGl9fSx7a2V5OiJoYW5kbGVDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4saSxzLGMsdSxsLGgpe3ZhciBkPXIucG9wKCk7aWYoZCBpbnN0YW5jZW9mIG8uTmFtZSl7dmFyIHA9aS5nZXRSYXcoZC5uYW1lKSxnPXAgaW5zdGFuY2VvZiBvLlJlZiYmbC5nZXRCeVJlZihwKTtpZihnKXRyeXt2YXIgdj1uLmJhc2U/bi5iYXNlLmdldFJnYihyLDApOm51bGwseT0oMCxmLmdldFRpbGluZ1BhdHRlcm5JUikoZy5vcGVyYXRvckxpc3RJUixnLmRpY3Qsdik7cmV0dXJuIHZvaWQgZS5hZGRPcCh0LHkpfWNhdGNoKGUpe312YXIgYj10aGlzLnhyZWYuZmV0Y2hJZlJlZihwKTtpZihiKXt2YXIgdz1iIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2IuZGljdDpiLGs9dy5nZXQoIlBhdHRlcm5UeXBlIik7aWYoMT09PWspe3ZhciBTPW4uYmFzZT9uLmJhc2UuZ2V0UmdiKHIsMCk6bnVsbDtyZXR1cm4gdGhpcy5oYW5kbGVUaWxpbmdUeXBlKHQsUyxzLGIsdyxlLGMsbCl9aWYoMj09PWspe3ZhciB4PXcuZ2V0KCJTaGFkaW5nIiksTz13LmdldEFycmF5KCJNYXRyaXgiKSxBPXRoaXMucGFyc2VTaGFkaW5nKHtzaGFkaW5nOngscmVzb3VyY2VzOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dSxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6aH0pO3JldHVybiB2b2lkIGUuYWRkT3AodCxbIlNoYWRpbmciLEEsT10pfXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5UeXBlOiAiLmNvbmNhdChrKSl9fXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5OYW1lOiAiLmNvbmNhdChkKSl9fSx7a2V5OiJfcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKCsrdD4xMCkoMCxhLndhcm4pKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTtlbHNle3ZhciBuPWUubGVuZ3RoLGk9dGhpcy54cmVmLmZldGNoSWZSZWYoZVswXSk7aWYoIShuPDIpJiZpIGluc3RhbmNlb2Ygby5OYW1lKXtzd2l0Y2goaS5uYW1lKXtjYXNlIkFuZCI6Y2FzZSJPciI6Y2FzZSJOb3QiOnIucHVzaChpLm5hbWUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQoMCxhLndhcm4pKCJJbnZhbGlkIG9wZXJhdG9yICIuY29uY2F0KGkubmFtZSwiIGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbiIpKX1mb3IodmFyIHM9MTtzPG47cysrKXt2YXIgYz1lW3NdLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9W107ci5wdXNoKGwpLHRoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24odSx0LGwpfWVsc2UgYyBpbnN0YW5jZW9mIG8uUmVmJiZyLnB1c2goYy50b1N0cmluZygpKX19ZWxzZSgwLGEud2FybikoIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uIil9fX0se2tleToicGFyc2VNYXJrZWRDb250ZW50UHJvcHMiLHZhbHVlOihuPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXt2YXIgbixpLHMsYyx1LGwsZixoLGQscDtyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEodCBpbnN0YW5jZW9mIG8uTmFtZSkpe2UubmV4dD01O2JyZWFrfWk9ci5nZXQoIlByb3BlcnRpZXMiKSxuPWkuZ2V0KHQubmFtZSksZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNTppZighKHQgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9OTticmVha31uPXQsZS5uZXh0PTEwO2JyZWFrO2Nhc2UgOTp0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiT3B0aW9uYWwgY29udGVudCBwcm9wZXJ0aWVzIG1hbGZvcm1lZC4iKTtjYXNlIDEwOmlmKCJPQ0ciIT09KHM9bi5nZXQoIlR5cGUiKS5uYW1lKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOm4ub2JqSWR9KTtjYXNlIDE1OmlmKCJPQ01EIiE9PXMpe2UubmV4dD0zMTticmVha31pZihjPW4uZ2V0KCJWRSIpLCFBcnJheS5pc0FycmF5KGMpKXtlLm5leHQ9MjI7YnJlYWt9aWYodT1bXSx0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGMsMCx1KSwhKHUubGVuZ3RoPjApKXtlLm5leHQ9MjI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOiJPQ01EIixleHByZXNzaW9uOnV9KTtjYXNlIDIyOmlmKGw9bi5nZXQoIk9DR3MiKSwhKEFycmF5LmlzQXJyYXkobCl8fGwgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9Mjk7YnJlYWt9aWYoZj1bXSxBcnJheS5pc0FycmF5KGwpKXtoPU4obCk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSxmLnB1c2gocC50b1N0cmluZygpKX1jYXRjaChlKXtoLmUoZSl9ZmluYWxseXtoLmYoKX19ZWxzZSBmLnB1c2gobC5vYmpJZCk7cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOnMsaWRzOmYscG9saWN5Om4uZ2V0KCJQIilpbnN0YW5jZW9mIG8uTmFtZT9uLmdldCgiUCIpLm5hbWU6bnVsbCxleHByZXNzaW9uOm51bGx9KTtjYXNlIDI5OmlmKCEobCBpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOmwudG9TdHJpbmcoKX0pO2Nhc2UgMzE6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLnN0cmVhbSxuPWUudGFzayxpPWUucmVzb3VyY2VzLHM9ZS5vcGVyYXRvckxpc3QsYz1lLmluaXRpYWxTdGF0ZSx1PXZvaWQgMD09PWM/bnVsbDpjLGw9ZS5mYWxsYmFja0ZvbnREaWN0LGY9dm9pZCAwPT09bD9udWxsOmw7aWYoaT1pfHxvLkRpY3QuZW1wdHksdT11fHxuZXcgWSwhcyl0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyAib3BlcmF0b3JMaXN0IiBwYXJhbWV0ZXInKTt2YXIgaD10aGlzLGQ9dGhpcy54cmVmLHA9ITEsZz1uZXcgdi5Mb2NhbEltYWdlQ2FjaGUseT1uZXcgdi5Mb2NhbENvbG9yU3BhY2VDYWNoZSxiPW5ldyB2LkxvY2FsR1N0YXRlQ2FjaGUsaz1uZXcgdi5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSxTPW5ldyBNYXAseD1pLmdldCgiWE9iamVjdCIpfHxvLkRpY3QuZW1wdHksTz1pLmdldCgiUGF0dGVybiIpfHxvLkRpY3QuZW1wdHksQT1uZXcgVyh1KSxDPW5ldyBLKHIsZCxBKSxGPW5ldyBxO2Z1bmN0aW9uIFAoZSl7Zm9yKHZhciB0PTAscj1DLnNhdmVkU3RhdGVzRGVwdGg7dDxyO3QrKylzLmFkZE9wKGEuT1BTLnJlc3RvcmUsW10pfXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBjPWZ1bmN0aW9uKG4pe1Byb21pc2UuYWxsKFtuLHMucmVhZHldKS50aGVuKChmdW5jdGlvbigpe3RyeXtlKHQscil9Y2F0Y2goZSl7cihlKX19KSxyKX07bi5lbnN1cmVOb3RUZXJtaW5hdGVkKCksRi5yZXNldCgpO2Zvcih2YXIgdSxsLHYsVCxFLGosTT17fTshKHU9Ri5jaGVjaygpKSYmKE0uYXJncz1udWxsLEMucmVhZChNKSk7KXt2YXIgXz1NLmFyZ3MsTD1NLmZuO3N3aXRjaCgwfEwpe2Nhc2UgYS5PUFMucGFpbnRYT2JqZWN0OmlmKGo9X1swXWluc3RhbmNlb2Ygby5OYW1lLEU9X1swXS5uYW1lLGope3ZhciBSPWcuZ2V0QnlOYW1lKEUpO2lmKFIpe3MuYWRkSW1hZ2VPcHMoUi5mbixSLmFyZ3MsUi5vcHRpb25hbENvbnRlbnQpLEgoUiksXz1udWxsO2NvbnRpbnVlfX1yZXR1cm4gdm9pZCBjKG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFqKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTt2YXIgcj14LmdldFJhdyhFKTtpZihyIGluc3RhbmNlb2Ygby5SZWYpe3ZhciBjPWcuZ2V0QnlSZWYocik7aWYoYylyZXR1cm4gcy5hZGRJbWFnZU9wcyhjLmZuLGMuYXJncyxjLm9wdGlvbmFsQ29udGVudCksSChjKSx2b2lkIGUoKTt2YXIgdT1oLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShyLGgucGFnZUluZGV4KTtpZih1KXJldHVybiBzLmFkZERlcGVuZGVuY3kodS5vYmpJZCkscy5hZGRJbWFnZU9wcyh1LmZuLHUuYXJncyx1Lm9wdGlvbmFsQ29udGVudCksdm9pZCBlKCk7cj1kLmZldGNoKHIpfWlmKCEociBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7dmFyIGw9ci5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEobCBpbnN0YW5jZW9mIG8uTmFtZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSI9PT1sLm5hbWUpcmV0dXJuIEEuc2F2ZSgpLHZvaWQgaC5idWlsZEZvcm1YT2JqZWN0KGkscixudWxsLHMsbixBLnN0YXRlLmNsb25lKCkseSkudGhlbigoZnVuY3Rpb24oKXtBLnJlc3RvcmUoKSxlKCl9KSx0KTtpZigiSW1hZ2UiIT09bC5uYW1lKXtpZigiUFMiIT09bC5uYW1lKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICIuY29uY2F0KGwubmFtZSkpOygwLGEuaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIiksZSgpfWVsc2UgaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpyLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkUsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclhPYmplY3R9KSx2b2lkKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgWE9iamVjdDogIicuY29uY2F0KGUsJyIuJykpO3Rocm93IGV9fSkpKTtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIEQ9X1sxXTtyZXR1cm4gdm9pZCBjKGguaGFuZGxlU2V0Rm9udChpLF8sbnVsbCxzLG4sQS5zdGF0ZSxmKS50aGVuKChmdW5jdGlvbihlKXtzLmFkZERlcGVuZGVuY3koZSkscy5hZGRPcChhLk9QUy5zZXRGb250LFtlLERdKX0pKSk7Y2FzZSBhLk9QUy5iZWdpblRleHQ6cD0hMDticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6cD0hMTticmVhaztjYXNlIGEuT1BTLmVuZElubGluZUltYWdlOnZhciBCPV9bMF0uY2FjaGVLZXk7aWYoQil7dmFyIFU9Zy5nZXRCeU5hbWUoQik7aWYoVSl7cy5hZGRJbWFnZU9wcyhVLmZuLFUuYXJncyxVLm9wdGlvbmFsQ29udGVudCksSChVKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMoaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpfWzBdLGlzSW5saW5lOiEwLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkIsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pKTtjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFBLnN0YXRlLmZvbnQpe2guZW5zdXJlU3RhdGVGb250KEEuc3RhdGUpO2NvbnRpbnVlfV9bMF09aC5oYW5kbGVUZXh0KF9bMF0sQS5zdGF0ZSk7YnJlYWs7Y2FzZSBhLk9QUy5zaG93U3BhY2VkVGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX12YXIgWCxxPVtdLEc9QS5zdGF0ZSx6PU4oX1swXSk7dHJ5e2Zvcih6LnMoKTshKFg9ei5uKCkpLmRvbmU7KXt2YXIgVyxWPVgudmFsdWU7InN0cmluZyI9PXR5cGVvZiBWPyhXPXEpLnB1c2guYXBwbHkoVyxJKGguaGFuZGxlVGV4dChWLEcpKSk6Im51bWJlciI9PXR5cGVvZiBWJiZxLnB1c2goVil9fWNhdGNoKGUpe3ouZShlKX1maW5hbGx5e3ouZigpfV9bMF09cSxMPWEuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmVTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxzLmFkZE9wKGEuT1BTLnNldFdvcmRTcGFjaW5nLFtfLnNoaWZ0KCldKSxzLmFkZE9wKGEuT1BTLnNldENoYXJTcGFjaW5nLFtfLnNoaWZ0KCldKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpBLnN0YXRlLnRleHRSZW5kZXJpbmdNb2RlPV9bMF07YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTp2YXIgWT13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihZKXtBLnN0YXRlLmZpbGxDb2xvclNwYWNlPVk7Y29udGludWV9cmV0dXJuIHZvaWQgYyhoLnBhcnNlQ29sb3JTcGFjZSh7Y3M6X1swXSxyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5fSkudGhlbigoZnVuY3Rpb24oZSl7ZSYmKEEuc3RhdGUuZmlsbENvbG9yU3BhY2U9ZSl9KSkpO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTp2YXIgSz13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihLKXtBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Sztjb250aW51ZX1yZXR1cm4gdm9pZCBjKGgucGFyc2VDb2xvclNwYWNlKHtjczpfWzBdLHJlc291cmNlczppLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnl9KS50aGVuKChmdW5jdGlvbihlKXtlJiYoQS5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPWUpfSkpKTtjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpfPShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3I6Xz0oVD1BLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsR3JheTpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlR3JheTpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6QS5zdGF0ZS5maWxsQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLF89dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ayxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoXywwKTticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZVJHQkNvbG9yOkEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IsXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKF8sMCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLm5hbWUpcmV0dXJuIHZvaWQgYyhoLmhhbmRsZUNvbG9yTihzLGEuT1BTLnNldEZpbGxDb2xvck4sXyxULE8saSxuLHksayxTKSk7Xz1ULmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkubmFtZSlyZXR1cm4gdm9pZCBjKGguaGFuZGxlQ29sb3JOKHMsYS5PUFMuc2V0U3Ryb2tlQ29sb3JOLF8sVCxPLGksbix5LGssUykpO189VC5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2hhZGluZ0ZpbGw6dmFyIEo9aS5nZXQoIlNoYWRpbmciKTtpZighSil0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCIpO3ZhciBaPUouZ2V0KF9bMF0ubmFtZSk7aWYoIVopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgb2JqZWN0IGZvdW5kIik7Xz1baC5wYXJzZVNoYWRpbmcoe3NoYWRpbmc6WixyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5LGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpTfSldLEw9YS5PUFMuc2hhZGluZ0ZpbGw7YnJlYWs7Y2FzZSBhLk9QUy5zZXRHU3RhdGU6aWYoaj1fWzBdaW5zdGFuY2VvZiBvLk5hbWUsRT1fWzBdLm5hbWUsail7dmFyIFE9Yi5nZXRCeU5hbWUoRSk7aWYoUSl7US5sZW5ndGg+MCYmcy5hZGRPcChhLk9QUy5zZXRHU3RhdGUsW1FdKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBjPXIuZ2V0KEUpO2lmKCEoYyBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2guc2V0R1N0YXRlKHtyZXNvdXJjZXM6aSxnU3RhdGU6YyxvcGVyYXRvckxpc3Q6cyxjYWNoZUtleTpFLHRhc2s6bixzdGF0ZU1hbmFnZXI6QSxsb2NhbEdTdGF0ZUNhY2hlOmIsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckV4dEdTdGF0ZX0pLHZvaWQoMCxhLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICInLmNvbmNhdChlLCciLicpKTt0aHJvdyBlfX0pKSk7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86Y2FzZSBhLk9QUy5jdXJ2ZVRvOmNhc2UgYS5PUFMuY3VydmVUbzI6Y2FzZSBhLk9QUy5jdXJ2ZVRvMzpjYXNlIGEuT1BTLmNsb3NlUGF0aDpjYXNlIGEuT1BTLnJlY3RhbmdsZTpoLmJ1aWxkUGF0aChzLEwsXyxwKTtjb250aW51ZTtjYXNlIGEuT1BTLm1hcmtQb2ludDpjYXNlIGEuT1BTLm1hcmtQb2ludFByb3BzOmNhc2UgYS5PUFMuYmVnaW5Db21wYXQ6Y2FzZSBhLk9QUy5lbmRDb21wYXQ6Y29udGludWU7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZighKF9bMF1pbnN0YW5jZW9mIG8uTmFtZSkpeygwLGEud2FybikoIkV4cGVjdGVkIG5hbWUgZm9yIGJlZ2luTWFya2VkQ29udGVudFByb3BzIGFyZzA9Ii5jb25jYXQoX1swXSkpO2NvbnRpbnVlfWlmKCJPQyI9PT1fWzBdLm5hbWUpcmV0dXJuIHZvaWQgYyhoLnBhcnNlTWFya2VkQ29udGVudFByb3BzKF9bMV0saSkudGhlbigoZnVuY3Rpb24oZSl7cy5hZGRPcChhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixlXSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihoLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBoLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JNYXJrZWRDb250ZW50fSksdm9pZCgwLGEud2FybikoJ2dldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSkpO189W19bMF0ubmFtZSxfWzFdaW5zdGFuY2VvZiBvLkRpY3Q/X1sxXS5nZXQoIk1DSUQiKTpudWxsXTticmVhaztjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpjYXNlIGEuT1BTLmVuZE1hcmtlZENvbnRlbnQ6ZGVmYXVsdDppZihudWxsIT09Xyl7Zm9yKGw9MCx2PV8ubGVuZ3RoO2w8diYmIShfW2xdaW5zdGFuY2VvZiBvLkRpY3QpO2wrKyk7aWYobDx2KXsoMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogIitMKTtjb250aW51ZX19fXMuYWRkT3AoTCxfKX11P2MoJCk6KFAoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0fSksKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJy5jb25jYXQobi5uYW1lLCciICcpKyd0YXNrOiAiJy5jb25jYXQoZSwnIi4nKSksdm9pZCBQKCk7dGhyb3cgZX19KSl9fSx7a2V5OiJnZXRUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc3RyZWFtLG49ZS50YXNrLGk9ZS5yZXNvdXJjZXMscz1lLnN0YXRlTWFuYWdlcixjPXZvaWQgMD09PXM/bnVsbDpzLHU9ZS5jb21iaW5lVGV4dEl0ZW1zLGw9dm9pZCAwIT09dSYmdSxmPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaD12b2lkIDAhPT1mJiZmLGQ9ZS5zaW5rLHA9ZS5zZWVuU3R5bGVzLGc9dm9pZCAwPT09cD9uZXcgU2V0OnAseT1lLnZpZXdCb3gsdz1lLm1hcmtlZENvbnRlbnREYXRhLGs9dm9pZCAwPT09dz9udWxsOnc7aT1pfHxvLkRpY3QuZW1wdHksYz1jfHxuZXcgVyhuZXcgViksaCYmKGs9a3x8e2xldmVsOjB9KTt2YXIgUz17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9LHg9e2luaXRpYWxpemVkOiExLHN0cjpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowLHZlcnRpY2FsOiExLHByZXZUcmFuc2Zvcm06bnVsbCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VJbkZsb3dNaW46MCxzcGFjZUluRmxvd01heDowLHRyYWNraW5nU3BhY2VNaW46MS8wLG5lZ2F0aXZlU3BhY2VNYXg6LTEvMCxub3RBU3BhY2U6LTEvMCx0cmFuc2Zvcm06bnVsbCxmb250TmFtZTpudWxsLGhhc0VPTDohMX0sTz1bIiAiLCIgIl0sQT0wO2Z1bmN0aW9uIEMoZSl7dmFyIHQ9KEErMSklMixyPSIgIiE9PU9bQV0mJiIgIj09PU9bdF07cmV0dXJuIE9bQV09ZSxBPXQscn1mdW5jdGlvbiBGKCl7T1swXT1PWzFdPSIgIixBPTB9dmFyIFAsST0uMSxFPS4wMyxqPS0uMixNPS4xLF89LjYsTD10aGlzLFI9dGhpcy54cmVmLE49W10sRD1udWxsLEI9bmV3IHYuTG9jYWxJbWFnZUNhY2hlLFU9bmV3IHYuTG9jYWxHU3RhdGVDYWNoZSxYPW5ldyBLKHIsUixjKTtmdW5jdGlvbiBIKCl7dmFyIGU9UC5mb250LHQ9W1AuZm9udFNpemUqUC50ZXh0SFNjYWxlLDAsMCxQLmZvbnRTaXplLDAsUC50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKFAuZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiEoMCxhLmlzQXJyYXlFcXVhbCkoUC5mb250TWF0cml4LGEuRk9OVF9JREVOVElUWV9NQVRSSVgpKXt2YXIgcj1lLmJib3hbM10tZS5iYm94WzFdO3I+MCYmKHRbM10qPXIqUC5mb250TWF0cml4WzNdKX1yZXR1cm4gYS5VdGlsLnRyYW5zZm9ybShQLmN0bSxhLlV0aWwudHJhbnNmb3JtKFAudGV4dE1hdHJpeCx0KSl9ZnVuY3Rpb24gRygpe2lmKHguaW5pdGlhbGl6ZWQpcmV0dXJuIHg7dmFyIGU9UCx0PWUuZm9udCxyPWUubG9hZGVkTmFtZTtnLmhhcyhyKXx8KGcuYWRkKHIpLFMuc3R5bGVzW3JdPXtmb250RmFtaWx5OnQuZmFsbGJhY2tOYW1lLGFzY2VudDp0LmFzY2VudCxkZXNjZW50OnQuZGVzY2VudCx2ZXJ0aWNhbDp0LnZlcnRpY2FsfSkseC5mb250TmFtZT1yO3ZhciBuPXgudHJhbnNmb3JtPUgoKTt0LnZlcnRpY2FsPyh4LndpZHRoPXgudG90YWxXaWR0aD1NYXRoLmh5cG90KG5bMF0sblsxXSkseC5oZWlnaHQ9eC50b3RhbEhlaWdodD0wLHgudmVydGljYWw9ITApOih4LndpZHRoPXgudG90YWxXaWR0aD0wLHguaGVpZ2h0PXgudG90YWxIZWlnaHQ9TWF0aC5oeXBvdChuWzJdLG5bM10pLHgudmVydGljYWw9ITEpO3ZhciBhPU1hdGguaHlwb3QoUC50ZXh0TGluZU1hdHJpeFswXSxQLnRleHRMaW5lTWF0cml4WzFdKSxpPU1hdGguaHlwb3QoUC5jdG1bMF0sUC5jdG1bMV0pO3JldHVybiB4LnRleHRBZHZhbmNlU2NhbGU9aSphLHgudHJhY2tpbmdTcGFjZU1pbj1QLmZvbnRTaXplKkkseC5ub3RBU3BhY2U9UC5mb250U2l6ZSpFLHgubmVnYXRpdmVTcGFjZU1heD1QLmZvbnRTaXplKmoseC5zcGFjZUluRmxvd01pbj1QLmZvbnRTaXplKk0seC5zcGFjZUluRmxvd01heD1QLmZvbnRTaXplKl8seC5oYXNFT0w9ITEseC5pbml0aWFsaXplZD0hMCx4fWZ1bmN0aW9uIHooKXtpZih4LmluaXRpYWxpemVkKXt2YXIgZT1NYXRoLmh5cG90KFAudGV4dExpbmVNYXRyaXhbMF0sUC50ZXh0TGluZU1hdHJpeFsxXSksdD1NYXRoLmh5cG90KFAuY3RtWzBdLFAuY3RtWzFdKSplO3QhPT14LnRleHRBZHZhbmNlU2NhbGUmJih4LnZlcnRpY2FsPyh4LnRvdGFsSGVpZ2h0Kz14LmhlaWdodCp4LnRleHRBZHZhbmNlU2NhbGUseC5oZWlnaHQ9MCk6KHgudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUseC53aWR0aD0wKSx4LnRleHRBZHZhbmNlU2NhbGU9dCl9fWZ1bmN0aW9uIFkoZSx0KXtyZXR1cm4gTC5sb2FkRm9udChlLHQsaSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9udC5pc1R5cGUzRm9udD9lLmxvYWRUeXBlM0RhdGEoTCxpLG4pLmNhdGNoKChmdW5jdGlvbigpe30pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlfSkpOmV9KSkudGhlbigoZnVuY3Rpb24oZSl7UC5sb2FkZWROYW1lPWUubG9hZGVkTmFtZSxQLmZvbnQ9ZS5mb250LFAuZm9udE1hdHJpeD1lLmZvbnQuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWH0pKX1mdW5jdGlvbiBKKGUsdCxyKXt2YXIgbj1NYXRoLmh5cG90KHJbMF0sclsxXSk7cmV0dXJuWyhyWzBdKmUrclsxXSp0KS9uLChyWzJdKmUrclszXSp0KS9uXX1mdW5jdGlvbiBaKCl7dmFyIGU9SCgpLHQ9ZVs0XSxyPWVbNV0sbj10LXlbMF0sYT1yLXlbMV07aWYobjwwfHxuPnlbMl18fGE8MHx8YT55WzNdKXJldHVybiExO2lmKCFsfHwhUC5mb250fHwheC5wcmV2VHJhbnNmb3JtKXJldHVybiEwO3ZhciBpPXgucHJldlRyYW5zZm9ybVs0XSxvPXgucHJldlRyYW5zZm9ybVs1XTtpZihpPT09dCYmbz09PXIpcmV0dXJuITA7dmFyIHM9LTE7c3dpdGNoKGVbMF0mJjA9PT1lWzFdJiYwPT09ZVsyXT9zPWVbMF0+MD8wOjE4MDplWzFdJiYwPT09ZVswXSYmMD09PWVbM10mJihzPWVbMV0+MD85MDoyNzApLHMpe2Nhc2UgMDpicmVhaztjYXNlIDkwOnZhciBjPVtyLHRdO3Q9Y1swXSxyPWNbMV07dmFyIHU9W28saV07aT11WzBdLG89dVsxXTticmVhaztjYXNlIDE4MDp2YXIgZj1bLXQsLXIsLWksLW9dO3Q9ZlswXSxyPWZbMV0saT1mWzJdLG89ZlszXTticmVhaztjYXNlIDI3MDp2YXIgaD1bLXIsLXRdO3Q9aFswXSxyPWhbMV07dmFyIGQ9Wy1vLC1pXTtpPWRbMF0sbz1kWzFdO2JyZWFrO2RlZmF1bHQ6dmFyIHA9VChKKHQscixlKSwyKTt0PXBbMF0scj1wWzFdO3ZhciBnPVQoSihpLG8seC5wcmV2VHJhbnNmb3JtKSwyKTtpPWdbMF0sbz1nWzFdfWlmKFAuZm9udC52ZXJ0aWNhbCl7dmFyIHY9KG8tcikveC50ZXh0QWR2YW5jZVNjYWxlLG09dC1pLGI9TWF0aC5zaWduKHguaGVpZ2h0KTtyZXR1cm4gdjxiKngubmVnYXRpdmVTcGFjZU1heD9NYXRoLmFicyhtKT4uNSp4LndpZHRoPyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKG0pPngud2lkdGg/KGVlKCksITApOih2PD1iKngubm90QVNwYWNlJiZGKCksdjw9Yip4LnRyYWNraW5nU3BhY2VNaW4/eC5oZWlnaHQrPXY6dGUodix4LnByZXZUcmFuc2Zvcm0sYil8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDpNYXRoLmFicyh2KSx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOnguaGVpZ2h0Kz12KSwhMCl9dmFyIHc9KHQtaSkveC50ZXh0QWR2YW5jZVNjYWxlLGs9ci1vLE89TWF0aC5zaWduKHgud2lkdGgpO3JldHVybiB3PE8qeC5uZWdhdGl2ZVNwYWNlTWF4P01hdGguYWJzKGspPi41KnguaGVpZ2h0PyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKGspPnguaGVpZ2h0PyhlZSgpLCEwKToodzw9Typ4Lm5vdEFTcGFjZSYmRigpLHc8PU8qeC50cmFja2luZ1NwYWNlTWluP3gud2lkdGgrPXc6dGUodyx4LnByZXZUcmFuc2Zvcm0sTyl8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDpNYXRoLmFicyh3KSxoZWlnaHQ6MCx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOngud2lkdGgrPXcpLCEwKX1mdW5jdGlvbiBRKGUpe3ZhciB0PWUuY2hhcnMscj1lLmV4dHJhU3BhY2luZyxuPVAuZm9udDtpZih0KWZvcih2YXIgYT1uLmNoYXJzVG9HbHlwaHModCksaT1QLmZvbnRNYXRyaXhbMF0qUC5mb250U2l6ZSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1hW29dLHU9Yy5jYXRlZ29yeTtpZighdS5pc0ludmlzaWJsZUZvcm1hdE1hcmspe3ZhciBsPVAuY2hhclNwYWNpbmcrKG8rMT09PXM/cjowKSxmPWMud2lkdGg7bi52ZXJ0aWNhbCYmKGY9Yy52bWV0cmljP2Mudm1ldHJpY1swXTotZik7dmFyIGg9ZippO2lmKHUuaXNXaGl0ZXNwYWNlKW4udmVydGljYWw/KGwrPS1oK1Aud29yZFNwYWNpbmcsUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWwpKToobCs9aCtQLndvcmRTcGFjaW5nLFAudHJhbnNsYXRlVGV4dE1hdHJpeChsKlAudGV4dEhTY2FsZSwwKSksQygiICIpO2Vsc2UgaWYoWigpKXt2YXIgZD1HKCk7dS5pc1plcm9XaWR0aERpYWNyaXRpYyYmKGg9MCksbi52ZXJ0aWNhbD8oUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsaCksaD1NYXRoLmFicyhoKSxkLmhlaWdodCs9aCk6KGgqPVAudGV4dEhTY2FsZSxQLnRyYW5zbGF0ZVRleHRNYXRyaXgoaCwwKSxkLndpZHRoKz1oKSxoJiYoZC5wcmV2VHJhbnNmb3JtPUgoKSk7dmFyIHA9Yy5ub3JtYWxpemVkVW5pY29kZTtDKHApJiZkLnN0ci5wdXNoKCIgIiksZC5zdHIucHVzaChwKSxsJiYobi52ZXJ0aWNhbD9QLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtbCk6UC50cmFuc2xhdGVUZXh0TWF0cml4KGwqUC50ZXh0SFNjYWxlLDApKX19fWVsc2V7dmFyIGc9UC5jaGFyU3BhY2luZytyO2cmJihuLnZlcnRpY2FsP1AudHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1nKTpQLnRyYW5zbGF0ZVRleHRNYXRyaXgoZypQLnRleHRIU2NhbGUsMCkpfX1mdW5jdGlvbiBlZSgpe0YoKSx4LmluaXRpYWxpemVkPyh4Lmhhc0VPTD0hMCxyZSgpKTpTLml0ZW1zLnB1c2goe3N0cjoiIixkaXI6Imx0ciIsd2lkdGg6MCxoZWlnaHQ6MCx0cmFuc2Zvcm06SCgpLGZvbnROYW1lOlAubG9hZGVkTmFtZSxoYXNFT0w6ITB9KX1mdW5jdGlvbiB0ZShlLHQscil7aWYocip4LnNwYWNlSW5GbG93TWluPD1lJiZlPD1yKnguc3BhY2VJbkZsb3dNYXgpcmV0dXJuIHguaW5pdGlhbGl6ZWQmJihGKCkseC5zdHIucHVzaCgiICIpKSwhMTt2YXIgbj14LmZvbnROYW1lLGE9MDtyZXR1cm4geC52ZXJ0aWNhbCYmKGE9ZSxlPTApLHJlKCksRigpLFMuaXRlbXMucHVzaCh7c3RyOiIgIixkaXI6Imx0ciIsd2lkdGg6TWF0aC5hYnMoZSksaGVpZ2h0Ok1hdGguYWJzKGEpLHRyYW5zZm9ybTp0fHxIKCksZm9udE5hbWU6bixoYXNFT0w6ITF9KSwhMH1mdW5jdGlvbiByZSgpe3ZhciBlLHQscjt4LmluaXRpYWxpemVkJiZ4LnN0ciYmKHgudmVydGljYWw/eC50b3RhbEhlaWdodCs9eC5oZWlnaHQqeC50ZXh0QWR2YW5jZVNjYWxlOngudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUsUy5pdGVtcy5wdXNoKCh0PShlPXgpLnN0ci5qb2luKCIiKSx7c3RyOihyPSgwLGIuYmlkaSkodCwtMSxlLnZlcnRpY2FsKSkuc3RyLGRpcjpyLmRpcix3aWR0aDpNYXRoLmFicyhlLnRvdGFsV2lkdGgpLGhlaWdodDpNYXRoLmFicyhlLnRvdGFsSGVpZ2h0KSx0cmFuc2Zvcm06ZS50cmFuc2Zvcm0sZm9udE5hbWU6ZS5mb250TmFtZSxoYXNFT0w6ZS5oYXNFT0x9KSkseC5pbml0aWFsaXplZD0hMSx4LnN0ci5sZW5ndGg9MCl9ZnVuY3Rpb24gbmUoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9Uy5pdGVtcy5sZW5ndGg7MCE9PXQmJihlJiZ0PDEwfHwoZC5lbnF1ZXVlKFMsdCksUy5pdGVtcz1bXSxTLnN0eWxlcz1PYmplY3QuY3JlYXRlKG51bGwpKSl9dmFyIGFlPW5ldyBxO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBzPWZ1bmN0aW9uKG4pe25lKCEwKSxQcm9taXNlLmFsbChbbixkLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7ZSh0LHIpfWNhdGNoKGUpe3IoZSl9fSkscil9O24uZW5zdXJlTm90VGVybWluYXRlZCgpLGFlLnJlc2V0KCk7Zm9yKHZhciB1LGY9e30scD1bXTshKHU9YWUuY2hlY2soKSkmJihwLmxlbmd0aD0wLGYuYXJncz1wLFgucmVhZChmKSk7KXtQPWMuc3RhdGU7dmFyIHY9Zi5mbjtzd2l0Y2gocD1mLmFyZ3MsMHx2KXtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIGI9cFswXS5uYW1lLHc9cFsxXTtpZihQLmZvbnQmJmI9PT1QLmZvbnROYW1lJiZ3PT09UC5mb250U2l6ZSlicmVhaztyZXR1cm4gcmUoKSxQLmZvbnROYW1lPWIsUC5mb250U2l6ZT13LHZvaWQgcyhZKGIsbnVsbCkpO2Nhc2UgYS5PUFMuc2V0VGV4dFJpc2U6UC50ZXh0UmlzZT1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0SFNjYWxlOlAudGV4dEhTY2FsZT1wWzBdLzEwMDticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6UC5sZWFkaW5nPXBbMF07YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDpQLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KHBbMF0scFsxXSksUC50ZXh0TWF0cml4PVAudGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpQLmxlYWRpbmc9LXBbMV0sUC50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0pLFAudGV4dE1hdHJpeD1QLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZTpQLmNhcnJpYWdlUmV0dXJuKCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0TWF0cml4OlAuc2V0VGV4dE1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSksUC5zZXRUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSkseigpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0Q2hhclNwYWNpbmc6UC5jaGFyU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6UC53b3JkU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuYmVnaW5UZXh0OlAudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLFAudGV4dExpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNob3dTcGFjZWRUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfWZvcih2YXIgeD0oUC5mb250LnZlcnRpY2FsPzE6LTEpKlAuZm9udFNpemUvMWUzLE89cFswXSxBPTAsQz1PLmxlbmd0aDtBPEMtMTtBKyspe3ZhciBGPU9bQV07aWYoInN0cmluZyI9PXR5cGVvZiBGKU4ucHVzaChGKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgRiYmMCE9PUYpe3ZhciBUPU4uam9pbigiIik7Ti5sZW5ndGg9MCxRKHtjaGFyczpULGV4dHJhU3BhY2luZzpGKnh9KX19dmFyIEk9Ty5hdCgtMSk7aWYoInN0cmluZyI9PXR5cGVvZiBJJiZOLnB1c2goSSksTi5sZW5ndGg+MCl7dmFyIEU9Ti5qb2luKCIiKTtOLmxlbmd0aD0wLFEoe2NoYXJzOkUsZXh0cmFTcGFjaW5nOjB9KX1icmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIWMuc3RhdGUuZm9udCl7TC5lbnN1cmVTdGF0ZUZvbnQoYy5zdGF0ZSk7Y29udGludWV9UC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVAud29yZFNwYWNpbmc9cFswXSxQLmNoYXJTcGFjaW5nPXBbMV0sUC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMl0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLnBhaW50WE9iamVjdDpyZSgpLER8fChEPWkuZ2V0KCJYT2JqZWN0Iil8fG8uRGljdC5lbXB0eSk7dmFyIGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lO2lmKGomJkIuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO3ZhciByPUQuZ2V0UmF3KE0pO2lmKHIgaW5zdGFuY2VvZiBvLlJlZil7aWYoQi5nZXRCeVJlZihyKSlyZXR1cm4gdm9pZCBlKCk7aWYoTC5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEocixMLnBhZ2VJbmRleCkpcmV0dXJuIHZvaWQgZSgpO3I9Ui5mZXRjaChyKX1pZighKHIgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO3ZhciBzPXIuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKHMgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09cy5uYW1lKXJldHVybiBCLnNldChNLHIuZGljdC5vYmpJZCwhMCksdm9pZCBlKCk7dmFyIHU9Yy5zdGF0ZS5jbG9uZSgpLGY9bmV3IFcodSkscD1yLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpO0FycmF5LmlzQXJyYXkocCkmJjY9PT1wLmxlbmd0aCYmZi50cmFuc2Zvcm0ocCksbmUoKTt2YXIgdj17ZW5xdWV1ZUludm9rZWQ6ITEsZW5xdWV1ZTpmdW5jdGlvbihlLHQpe3RoaXMuZW5xdWV1ZUludm9rZWQ9ITAsZC5lbnF1ZXVlKGUsdCl9LGdldCBkZXNpcmVkU2l6ZSgpe3JldHVybiBkLmRlc2lyZWRTaXplfSxnZXQgcmVhZHkoKXtyZXR1cm4gZC5yZWFkeX19O0wuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpyLHRhc2s6bixyZXNvdXJjZXM6ci5kaWN0LmdldCgiUmVzb3VyY2VzIil8fGksc3RhdGVNYW5hZ2VyOmYsY29tYmluZVRleHRJdGVtczpsLGluY2x1ZGVNYXJrZWRDb250ZW50Omgsc2luazp2LHNlZW5TdHlsZXM6Zyx2aWV3Qm94OnksbWFya2VkQ29udGVudERhdGE6a30pLnRoZW4oKGZ1bmN0aW9uKCl7di5lbnF1ZXVlSW52b2tlZHx8Qi5zZXQoTSxyLmRpY3Qub2JqSWQsITApLGUoKX0pLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYoIUwub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIFhPYmplY3Q6ICInLmNvbmNhdChlLCciLicpKX19KSkpO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmlmKGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lLGomJlUuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBuPXIuZ2V0KE0pO2lmKCEobiBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBzPW4uZ2V0KCJGb250Iik7aWYoIXMpcmV0dXJuIFUuc2V0KE0sbi5vYmpJZCwhMCksdm9pZCBlKCk7cmUoKSxQLmZvbnROYW1lPW51bGwsUC5mb250U2l6ZT1zWzFdLFkobnVsbCxzWzBdKS50aGVuKGUsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZighTC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2dldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSl9fSkpKTtjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpyZSgpLGgmJihrLmxldmVsKyssUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzpwWzBdaW5zdGFuY2VvZiBvLk5hbWU/cFswXS5uYW1lOm51bGx9KSk7YnJlYWs7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZihyZSgpLGgpe2subGV2ZWwrKzt2YXIgXz1udWxsO3BbMV1pbnN0YW5jZW9mIG8uRGljdCYmKF89cFsxXS5nZXQoIk1DSUQiKSksUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsaWQ6TnVtYmVyLmlzSW50ZWdlcihfKT8iIi5jb25jYXQoTC5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCksIl9tY2lkIikuY29uY2F0KF8pOm51bGwsdGFnOnBbMF1pbnN0YW5jZW9mIG8uTmFtZT9wWzBdLm5hbWU6bnVsbH0pfWJyZWFrO2Nhc2UgYS5PUFMuZW5kTWFya2VkQ29udGVudDppZihyZSgpLGgpe2lmKDA9PT1rLmxldmVsKWJyZWFrO2subGV2ZWwtLSxTLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9fWlmKFMuaXRlbXMubGVuZ3RoPj1kLmRlc2lyZWRTaXplKXt1PSEwO2JyZWFrfX11P3MoJCk6KHJlKCksbmUoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4oMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIicuY29uY2F0KG4ubmFtZSwnIiAnKSsndGFzazogIicuY29uY2F0KGUsJyIuJykpLHJlKCksdm9pZCBuZSgpO3Rocm93IGV9fSkpfX0se2tleToiZXh0cmFjdERhdGFTdHJ1Y3R1cmVzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG4saT10aGlzLHM9dGhpcy54cmVmLGw9dGhpcy5yZWFkVG9Vbmljb2RlKHIudG9Vbmljb2RlfHxlLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSk7aWYoci5jb21wb3NpdGUpe3ZhciBmPWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7ZiBpbnN0YW5jZW9mIG8uRGljdCYmKHIuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZi5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OmYuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7dmFyIGg9ZS5nZXQoIkNJRFRvR0lETWFwIik7aCBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSYmKG49aC5nZXRCeXRlcygpKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2V4dHJhY3REYXRhU3RydWN0dXJlcyAtIGlnbm9yaW5nIENJRFRvR0lETWFwIGRhdGE6ICInLmNvbmNhdChlLCciLicpKX19dmFyIGQscD1bXSxnPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe2lmKChkPWUuZ2V0KCJFbmNvZGluZyIpKWluc3RhbmNlb2Ygby5EaWN0KXtpZihnPShnPWQuZ2V0KCJCYXNlRW5jb2RpbmciKSlpbnN0YW5jZW9mIG8uTmFtZT9nLm5hbWU6bnVsbCxkLmhhcygiRGlmZmVyZW5jZXMiKSl7dmFyIHYseT0wLGI9TihkLmdldCgiRGlmZmVyZW5jZXMiKSk7dHJ5e2ZvcihiLnMoKTshKHY9Yi5uKCkpLmRvbmU7KXt2YXIgdz12LnZhbHVlLGs9cy5mZXRjaElmUmVmKHcpO2lmKCJudW1iZXIiPT10eXBlb2Ygayl5PWs7ZWxzZXtpZighKGsgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICIuY29uY2F0KGspKTtwW3krK109ay5uYW1lfX19Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9fX1lbHNlIGlmKGQgaW5zdGFuY2VvZiBvLk5hbWUpZz1kLm5hbWU7ZWxzZXt2YXIgUz0iRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0IjtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcihTKTsoMCxhLndhcm4pKFMpfSJNYWNSb21hbkVuY29kaW5nIiE9PWcmJiJNYWNFeHBlcnRFbmNvZGluZyIhPT1nJiYiV2luQW5zaUVuY29kaW5nIiE9PWcmJihnPW51bGwpfWlmKGcpci5kZWZhdWx0RW5jb2Rpbmc9KDAsdS5nZXRFbmNvZGluZykoZyk7ZWxzZXt2YXIgeD0hIShyLmZsYWdzJmMuRm9udEZsYWdzLlN5bWJvbGljKSxPPSEhKHIuZmxhZ3MmYy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO2Q9dS5TdGFuZGFyZEVuY29kaW5nLCJUcnVlVHlwZSIhPT1yLnR5cGV8fE98fChkPXUuV2luQW5zaUVuY29kaW5nKSx4JiYoZD11Lk1hY1JvbWFuRW5jb2Rpbmcsci5maWxlJiYhci5pc0ludGVybmFsRm9udHx8KC9TeW1ib2wvaS50ZXN0KHIubmFtZSk/ZD11LlN5bWJvbFNldEVuY29kaW5nOi9EaW5nYmF0c3xXaW5nZGluZ3MvaS50ZXN0KHIubmFtZSkmJihkPXUuWmFwZkRpbmdiYXRzRW5jb2RpbmcpKSksci5kZWZhdWx0RW5jb2Rpbmc9ZH1yZXR1cm4gci5kaWZmZXJlbmNlcz1wLHIuYmFzZUVuY29kaW5nTmFtZT1nLHIuaGFzRW5jb2Rpbmc9ISFnfHxwLmxlbmd0aD4wLHIuZGljdD1lLGwudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIudG9Vbmljb2RlPWUsaS5idWlsZFRvVW5pY29kZShyKX0pKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci50b1VuaWNvZGU9ZSxuJiYoci5jaWRUb0dpZE1hcD1pLnJlYWRDaWRUb0dpZE1hcChuLGUpKSxyfSkpfX0se2tleToiX3NpbXBsZUZvbnRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07KDAsYS5hc3NlcnQpKCFlLmNvbXBvc2l0ZSwiTXVzdCBiZSBhIHNpbXBsZSBmb250LiIpO3ZhciByPVtdLG49ZS5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKSxpPWUuYmFzZUVuY29kaW5nTmFtZSxvPWUuZGlmZmVyZW5jZXM7Zm9yKHZhciBzIGluIG8pe3ZhciBjPW9bc107Ii5ub3RkZWYiIT09YyYmKG5bc109Yyl9dmFyIGw9KDAsUy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgZiBpbiBuKXt2YXIgaD1uW2ZdO2lmKCIiIT09aCl7dmFyIGQ9bFtoXTtpZih2b2lkIDA9PT1kKXt2YXIgcD0wO3N3aXRjaChoWzBdKXtjYXNlIkciOjM9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlImciOjU9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlIkMiOmNhc2UiYyI6aWYoaC5sZW5ndGg+PTMmJmgubGVuZ3RoPD00KXt2YXIgZz1oLnN1YnN0cmluZygxKTtpZih0KXtwPXBhcnNlSW50KGcsMTYpO2JyZWFrfWlmKHA9K2csTnVtYmVyLmlzTmFOKHApJiZOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlSW50KGcsMTYpKSlyZXR1cm4gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlLCEwKX1icmVhaztjYXNlInUiOi0xIT09KGQ9KDAsQS5nZXRVbmljb2RlRm9yR2x5cGgpKGgsbCkpJiYocD1kKX1pZihwPjAmJnA8PTExMTQxMTEmJk51bWJlci5pc0ludGVnZXIocCkpe2lmKGkmJnA9PT0rZil7dmFyIHY9KDAsdS5nZXRFbmNvZGluZykoaSk7aWYodiYmKGg9dltmXSkpe3JbZl09U3RyaW5nLmZyb21DaGFyQ29kZShsW2hdKTtjb250aW51ZX19cltmXT1TdHJpbmcuZnJvbUNvZGVQb2ludChwKX19ZWxzZSByW2ZdPVN0cmluZy5mcm9tQ2hhckNvZGUoZCl9fXJldHVybiByfX0se2tleToiYnVpbGRUb1VuaWNvZGUiLHZhbHVlOihyPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbixzLGMsdSxsO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcD0hIXQudG9Vbmljb2RlJiZ0LnRvVW5pY29kZS5sZW5ndGg+MCwhdC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIXQuY29tcG9zaXRlJiZ0Lmhhc0VuY29kaW5nJiYodC5mYWxsYmFja1RvVW5pY29kZT10aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHQpKSxlLmFicnVwdCgicmV0dXJuIix0LnRvVW5pY29kZSk7Y2FzZSA0OmlmKHQuY29tcG9zaXRlKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGQuVG9Vbmljb2RlTWFwKHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUodCkpKTtjYXNlIDY6aWYoIXQuY29tcG9zaXRlfHwoIXQuY01hcC5idWlsdEluQ01hcHx8dC5jTWFwIGluc3RhbmNlb2YgaS5JZGVudGl0eUNNYXApJiYoIkFkb2JlIiE9PXQuY2lkU3lzdGVtSW5mby5yZWdpc3RyeXx8IkdCMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJDTlMxIiE9PXQuY2lkU3lzdGVtSW5mby5vcmRlcmluZyYmIkphcGFuMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJLb3JlYTEiIT09dC5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiByPXQuY2lkU3lzdGVtSW5mbyxuPXIucmVnaXN0cnkscz1yLm9yZGVyaW5nLGM9by5OYW1lLmdldCgiIi5jb25jYXQobiwiLSIpLmNvbmNhdChzLCItVUNTMiIpKSxlLm5leHQ9MTEsaS5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmMsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7Y2FzZSAxMTpyZXR1cm4gdT1lLnNlbnQsbD1bXSx0LmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjY1NTM1KXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9dS5sb29rdXAodCk7ciYmKGxbZV09U3RyaW5nLmZyb21DaGFyQ29kZSgoci5jaGFyQ29kZUF0KDApPDw4KStyLmNoYXJDb2RlQXQoMSkpKX0pKSxlLmFicnVwdCgicmV0dXJuIixuZXcgZC5Ub1VuaWNvZGVNYXAobCkpO2Nhc2UgMTU6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKHQuZmlyc3RDaGFyLHQubGFzdENoYXIpKTtjYXNlIDE2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlYWRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIG8uTmFtZT9pLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuSWRlbnRpdHlDTWFwP25ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBkLlRvVW5pY29kZU1hcChlLmdldE1hcCgpKX0pKTplIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2kuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBpLklkZW50aXR5Q01hcClyZXR1cm4gbmV3IGQuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk7dmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCJudW1iZXIiIT10eXBlb2Ygcil7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErPTIpe3ZhciBpPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtpZig1NTI5Nj09KDYzNDg4JmkpKXthKz0yO3ZhciBvPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtuLnB1c2goKCgxMDIzJmkpPDwxMCkrKDEwMjMmbykrNjU1MzYpfWVsc2Ugbi5wdXNoKGkpfXRbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLG4pfWVsc2UgdFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludChyKX0pKSxuZXcgZC5Ub1VuaWNvZGVNYXAodCl9KSwoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRvVW5pY29kZX0pLCgwLGEud2FybikoJ3JlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIicuY29uY2F0KGUsJyIuJykpLG51bGw7dGhyb3cgZX0pKTpQcm9taXNlLnJlc29sdmUobnVsbCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfX0se2tleToicmVhZENpZFRvR2lkTWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXt2YXIgaT1lW24rK108PDh8ZVtuXSxvPW4+PjE7KDAhPT1pfHx0LmhhcyhvKSkmJihyW29dPWkpfXJldHVybiByfX0se2tleToiZXh0cmFjdFdpZHRocyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxzLHUsbCxmLGgsZD10aGlzLnhyZWYscD1bXSxnPTAsdj1bXTtpZihyLmNvbXBvc2l0ZSl7aWYoZz1lLmhhcygiRFciKT9lLmdldCgiRFciKToxZTMsaD1lLmdldCgiVyIpKWZvcihhPTAsaT1oLmxlbmd0aDthPGk7YSsrKWlmKGw9ZC5mZXRjaElmUmVmKGhbYSsrXSksZj1kLmZldGNoSWZSZWYoaFthXSksQXJyYXkuaXNBcnJheShmKSlmb3Iocz0wLHU9Zi5sZW5ndGg7czx1O3MrKylwW2wrK109ZC5mZXRjaElmUmVmKGZbc10pO2Vsc2V7dmFyIHk9ZC5mZXRjaElmUmVmKGhbKythXSk7Zm9yKHM9bDtzPD1mO3MrKylwW3NdPXl9aWYoci52ZXJ0aWNhbCl7dmFyIG09ZS5nZXRBcnJheSgiRFcyIil8fFs4ODAsLTFlM107aWYobj1bbVsxXSwuNSpnLG1bMF1dLG09ZS5nZXQoIlcyIikpZm9yKGE9MCxpPW0ubGVuZ3RoO2E8aTthKyspaWYobD1kLmZldGNoSWZSZWYobVthKytdKSxmPWQuZmV0Y2hJZlJlZihtW2FdKSxBcnJheS5pc0FycmF5KGYpKWZvcihzPTAsdT1mLmxlbmd0aDtzPHU7cysrKXZbbCsrXT1bZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbc10pXTtlbHNle3ZhciBiPVtkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKV07Zm9yKHM9bDtzPD1mO3MrKyl2W3NdPWJ9fX1lbHNle3ZhciB3PXIuZmlyc3RDaGFyO2lmKGg9ZS5nZXQoIldpZHRocyIpKXtmb3Iocz13LGE9MCxpPWgubGVuZ3RoO2E8aTthKyspcFtzKytdPWQuZmV0Y2hJZlJlZihoW2FdKTtnPXBhcnNlRmxvYXQodC5nZXQoIk1pc3NpbmdXaWR0aCIpKXx8MH1lbHNle3ZhciBrPWUuZ2V0KCJCYXNlRm9udCIpO2lmKGsgaW5zdGFuY2VvZiBvLk5hbWUpe3ZhciBTPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGsubmFtZSk7cD10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKFMud2lkdGhzLHIpLGc9Uy5kZWZhdWx0V2lkdGh9fX12YXIgeD0hMCxPPWc7Zm9yKHZhciBBIGluIHApe3ZhciBDPXBbQV07aWYoQylpZihPKXtpZihPIT09Qyl7eD0hMTticmVha319ZWxzZSBPPUN9eCYmKHIuZmxhZ3N8PWMuRm9udEZsYWdzLkZpeGVkUGl0Y2gpLHIuZGVmYXVsdFdpZHRoPWcsci53aWR0aHM9cCxyLmRlZmF1bHRWTWV0cmljcz1uLHIudm1ldHJpY3M9dn19LHtrZXk6ImlzU2VyaWZGb250Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxsLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfX0se2tleToiZ2V0QmFzZUZvbnRNZXRyaWNzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPSExLGE9KDAsbC5nZXRTdGRGb250TWFwKSgpW2VdfHxlLGk9KDAsTy5nZXRNZXRyaWNzKSgpO2EgaW4gaXx8KGE9dGhpcy5pc1NlcmlmRm9udChlKT8iVGltZXMtUm9tYW4iOiJIZWx2ZXRpY2EiKTt2YXIgbz1pW2FdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygbz8odD1vLG49ITApOnI9bygpLHtkZWZhdWx0V2lkdGg6dCxtb25vc3BhY2U6bix3aWR0aHM6cn19fSx7a2V5OiJidWlsZENoYXJDb2RlVG9XaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXQuZGlmZmVyZW5jZXMsYT10LmRlZmF1bHRFbmNvZGluZyxpPTA7aTwyNTY7aSsrKWkgaW4gbiYmZVtuW2ldXT9yW2ldPWVbbltpXV06aSBpbiBhJiZlW2FbaV1dJiYocltpXT1lW2FbaV1dKTtyZXR1cm4gcn19LHtrZXk6InByZUV2YWx1YXRlRm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShyIGluc3RhbmNlb2Ygby5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTt2YXIgbixpLHM9ITE7aWYoIlR5cGUwIj09PXIubmFtZSl7dmFyIGM9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCFjKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KGMpP3RoaXMueHJlZi5mZXRjaElmUmVmKGNbMF0pOmMpaW5zdGFuY2VvZiBvLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTtpZighKChyPWUuZ2V0KCJTdWJ0eXBlIikpaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpO3M9ITB9dmFyIHU9ZS5nZXQoIkZpcnN0Q2hhciIpfHwwLGw9ZS5nZXQoIkxhc3RDaGFyIil8fChzPzY1NTM1OjI1NSksZj1lLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZihmKXtuPW5ldyBDLk11cm11ckhhc2gzXzY0O3ZhciBoPXQuZ2V0UmF3KCJFbmNvZGluZyIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpbi51cGRhdGUoaC5uYW1lKTtlbHNlIGlmKGggaW5zdGFuY2VvZiBvLlJlZiluLnVwZGF0ZShoLnRvU3RyaW5nKCkpO2Vsc2UgaWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQscD1OKGguZ2V0UmF3VmFsdWVzKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lKW4udXBkYXRlKGcubmFtZSk7ZWxzZSBpZihnIGluc3RhbmNlb2Ygby5SZWYpbi51cGRhdGUoZy50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZykpe2Zvcih2YXIgdj1nLmxlbmd0aCx5PW5ldyBBcnJheSh2KSxiPTA7Yjx2O2IrKyl7dmFyIHc9Z1tiXTt3IGluc3RhbmNlb2Ygby5OYW1lP3lbYl09dy5uYW1lOigibnVtYmVyIj09dHlwZW9mIHd8fHcgaW5zdGFuY2VvZiBvLlJlZikmJih5W2JdPXcudG9TdHJpbmcoKSl9bi51cGRhdGUoeS5qb2luKCkpfX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fWlmKG4udXBkYXRlKCIiLmNvbmNhdCh1LCItIikuY29uY2F0KGwpKSwoaT1lLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSlpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSl7dmFyIGs9aS5zdHJ8fGksUz1rLmJ1ZmZlcj9uZXcgVWludDhBcnJheShrLmJ1ZmZlci5idWZmZXIsMCxrLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoay5ieXRlcy5idWZmZXIsay5zdGFydCxrLmVuZC1rLnN0YXJ0KTtuLnVwZGF0ZShTKX1lbHNlIGkgaW5zdGFuY2VvZiBvLk5hbWUmJm4udXBkYXRlKGkubmFtZSk7dmFyIHg9ZS5nZXQoIldpZHRocyIpfHx0LmdldCgiV2lkdGhzIik7aWYoQXJyYXkuaXNBcnJheSh4KSl7dmFyIE8sQT1bXSxGPU4oeCk7dHJ5e2ZvcihGLnMoKTshKE89Ri5uKCkpLmRvbmU7KXt2YXIgUD1PLnZhbHVlOygibnVtYmVyIj09dHlwZW9mIFB8fFAgaW5zdGFuY2VvZiBvLlJlZikmJkEucHVzaChQLnRvU3RyaW5nKCkpfX1jYXRjaChlKXtGLmUoZSl9ZmluYWxseXtGLmYoKX1uLnVwZGF0ZShBLmpvaW4oKSl9aWYocyl7bi51cGRhdGUoImNvbXBvc2l0ZUZvbnQiKTt2YXIgVD1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoVCkpe3ZhciBJLEU9W10saj1OKFQpO3RyeXtmb3Ioai5zKCk7IShJPWoubigpKS5kb25lOyl7dmFyIE09SS52YWx1ZTtpZigibnVtYmVyIj09dHlwZW9mIE18fE0gaW5zdGFuY2VvZiBvLlJlZilFLnB1c2goTS50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoTSkpe3ZhciBfLEw9W10sUj1OKE0pO3RyeXtmb3IoUi5zKCk7IShfPVIubigpKS5kb25lOyl7dmFyIEQ9Xy52YWx1ZTsoIm51bWJlciI9PXR5cGVvZiBEfHxEIGluc3RhbmNlb2Ygby5SZWYpJiZMLnB1c2goRC50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9RS5wdXNoKCJbIi5jb25jYXQoTC5qb2luKCksIl0iKSl9fX1jYXRjaChlKXtqLmUoZSl9ZmluYWxseXtqLmYoKX1uLnVwZGF0ZShFLmpvaW4oKSl9dmFyIEI9ZS5nZXRSYXcoIkNJRFRvR0lETWFwIil8fHQuZ2V0UmF3KCJDSURUb0dJRE1hcCIpO0IgaW5zdGFuY2VvZiBvLk5hbWU/bi51cGRhdGUoQi5uYW1lKTpCIGluc3RhbmNlb2Ygby5SZWY/bi51cGRhdGUoQi50b1N0cmluZygpKTpCIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtJiZuLnVwZGF0ZShCLnBlZWtCeXRlcygpKX19cmV0dXJue2Rlc2NyaXB0b3I6ZixkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6cyx0eXBlOnIubmFtZSxmaXJzdENoYXI6dSxsYXN0Q2hhcjpsLHRvVW5pY29kZTppLGhhc2g6bj9uLmhleGRpZ2VzdCgpOiIifX19LHtrZXk6InRyYW5zbGF0ZUZvbnQiLHZhbHVlOih0PU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbix1LGYsZCxwLGcsdixtLGIsdyxrLFMseCxPLEEsQyxGLFAsVCxJLGosTSxfLEwsUixELEIsVSwkLFgsSCxxLEcseixXPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihyPXQuZGVzY3JpcHRvcixuPXQuZGljdCx1PXQuYmFzZURpY3QsZj10LmNvbXBvc2l0ZSxkPXQudHlwZSxwPXQuZmlyc3RDaGFyLGc9dC5sYXN0Q2hhcix2PXQudG9Vbmljb2RlLG09dC5jc3NGb250SW5mbyxiPSJUeXBlMyI9PT1kLHIpe2UubmV4dD0yNzticmVha31pZighYil7ZS5uZXh0PTk7YnJlYWt9KHI9bmV3IG8uRGljdChudWxsKSkuc2V0KCJGb250TmFtZSIsby5OYW1lLmdldChkKSksci5zZXQoIkZvbnRCQm94IixuLmdldEFycmF5KCJGb250QkJveCIpfHxbMCwwLDAsMF0pLGUubmV4dD0yNzticmVhaztjYXNlIDk6aWYoKGs9bi5nZXQoIkJhc2VGb250IikpaW5zdGFuY2VvZiBvLk5hbWUpe2UubmV4dD0xMjticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWQiKTtjYXNlIDEyOmlmKGs9ay5uYW1lLnJlcGxhY2UoL1ssX10vZywiLSIpLFM9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3MoaykseD1rLnNwbGl0KCItIilbMF0sTz0odGhpcy5pc1NlcmlmRm9udCh4KT9jLkZvbnRGbGFncy5TZXJpZjowKXwoUy5tb25vc3BhY2U/Yy5Gb250RmxhZ3MuRml4ZWRQaXRjaDowKXwoKDAsbC5nZXRTeW1ib2xzRm9udHMpKClbeF0/Yy5Gb250RmxhZ3MuU3ltYm9saWM6Yy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpLHc9e3R5cGU6ZCxuYW1lOmssbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsd2lkdGhzOlMud2lkdGhzLGRlZmF1bHRXaWR0aDpTLmRlZmF1bHRXaWR0aCxpc1NpbXVsYXRlZEZsYWdzOiEwLGZsYWdzOk8sZmlyc3RDaGFyOnAsbGFzdENoYXI6Zyx0b1VuaWNvZGU6dix4SGVpZ2h0OjAsY2FwSGVpZ2h0OjAsaXRhbGljQW5nbGU6MCxpc1R5cGUzRm9udDpifSxBPW4uZ2V0KCJXaWR0aHMiKSxDPSgwLGwuZ2V0U3RhbmRhcmRGb250TmFtZSkoayksRj1udWxsLCFDKXtlLm5leHQ9MjY7YnJlYWt9cmV0dXJuIHcuaXNTdGFuZGFyZEZvbnQ9ITAsZS5uZXh0PTI0LHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEMpO2Nhc2UgMjQ6Rj1lLnNlbnQsdy5pc0ludGVybmFsRm9udD0hIUY7Y2FzZSAyNjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobixuLHcpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKEEpe3ZhciB0LHI9W10sbj1wLGE9TihBKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBpPXQudmFsdWU7cltuKytdPVcueHJlZi5mZXRjaElmUmVmKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLndpZHRocz1yfWVsc2UgZS53aWR0aHM9Vy5idWlsZENoYXJDb2RlVG9XaWR0aChTLndpZHRocyxlKTtyZXR1cm4gbmV3IHMuRm9udChrLEYsZSl9KSkpO2Nhc2UgMjc6aWYoUD1yLmdldCgiRm9udE5hbWUiKSxUPW4uZ2V0KCJCYXNlRm9udCIpLCJzdHJpbmciPT10eXBlb2YgUCYmKFA9by5OYW1lLmdldChQKSksInN0cmluZyI9PXR5cGVvZiBUJiYoVD1vLk5hbWUuZ2V0KFQpKSxifHwoST1QJiZQLm5hbWUsaj1UJiZULm5hbWUsSSE9PWomJigoMCxhLmluZm8pKCJUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyBcIiIuY29uY2F0KEksJyIgYnV0ICcpKyJzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCBcIiIuY29uY2F0KGosJyIuJykpLEkmJmomJmouc3RhcnRzV2l0aChJKSYmKFA9VCkpKSwoUD1QfHxUKWluc3RhbmNlb2Ygby5OYW1lKXtlLm5leHQ9MzU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7Y2FzZSAzNTplLnByZXY9MzUsTT1yLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKSxlLm5leHQ9NDU7YnJlYWs7Y2FzZSAzOTppZihlLnByZXY9MzksZS50MD1lLmNhdGNoKDM1KSx0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXtlLm5leHQ9NDM7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDQzOigwLGEud2FybikoJ3RyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyAiJy5jb25jYXQoUC5uYW1lLCciIGZvbnQgZmlsZTogIicpLmNvbmNhdChlLnQwLCciLicpKSxNPW5ldyB5Lk51bGxTdHJlYW07Y2FzZSA0NTppZihCPSExLFU9ITEsJD1udWxsLCFNKXtlLm5leHQ9NTI7YnJlYWt9TS5kaWN0JiYoKFg9TS5kaWN0LmdldCgiU3VidHlwZSIpKWluc3RhbmNlb2Ygby5OYW1lJiYoXz1YLm5hbWUpLEw9TS5kaWN0LmdldCgiTGVuZ3RoMSIpLFI9TS5kaWN0LmdldCgiTGVuZ3RoMiIpLEQ9TS5kaWN0LmdldCgiTGVuZ3RoMyIpKSxlLm5leHQ9NzQ7YnJlYWs7Y2FzZSA1MjppZighbSl7ZS5uZXh0PTY2O2JyZWFrfWlmKCEoSD0oMCxoLmdldFhmYUZvbnROYW1lKShQLm5hbWUpKSl7ZS5uZXh0PTY0O2JyZWFrfXJldHVybiBtLmZvbnRGYW1pbHk9IiIuY29uY2F0KG0uZm9udEZhbWlseSwiLVBkZkpTLVhGQSIpLG0ubWV0cmljcz1ILm1ldHJpY3N8fG51bGwsJD1ILmZhY3RvcnN8fG51bGwsZS5uZXh0PTYwLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEgubmFtZSk7Y2FzZSA2MDpNPWUuc2VudCxVPSEhTSx1PW49KDAsaC5nZXRYZmFGb250RGljdCkoUC5uYW1lKSxmPSEwO2Nhc2UgNjQ6ZS5uZXh0PTc0O2JyZWFrO2Nhc2UgNjY6aWYoYil7ZS5uZXh0PTc0O2JyZWFrfWlmKCEocT0oMCxsLmdldFN0YW5kYXJkRm9udE5hbWUpKFAubmFtZSkpKXtlLm5leHQ9NzQ7YnJlYWt9cmV0dXJuIEI9ITAsZS5uZXh0PTcyLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKHEpO2Nhc2UgNzI6TT1lLnNlbnQsVT0hIU07Y2FzZSA3NDppZih3PXt0eXBlOmQsbmFtZTpQLm5hbWUsc3VidHlwZTpfLGZpbGU6TSxsZW5ndGgxOkwsbGVuZ3RoMjpSLGxlbmd0aDM6RCxpc1N0YW5kYXJkRm9udDpCLGlzSW50ZXJuYWxGb250OlUsbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsY29tcG9zaXRlOmYsZml4ZWRQaXRjaDohMSxmb250TWF0cml4Om4uZ2V0QXJyYXkoIkZvbnRNYXRyaXgiKXx8YS5GT05UX0lERU5USVRZX01BVFJJWCxmaXJzdENoYXI6cCxsYXN0Q2hhcjpnLHRvVW5pY29kZTp2LGJib3g6ci5nZXRBcnJheSgiRm9udEJCb3giKXx8bi5nZXRBcnJheSgiRm9udEJCb3giKSxhc2NlbnQ6ci5nZXQoIkFzY2VudCIpLGRlc2NlbnQ6ci5nZXQoIkRlc2NlbnQiKSx4SGVpZ2h0OnIuZ2V0KCJYSGVpZ2h0Iil8fDAsY2FwSGVpZ2h0OnIuZ2V0KCJDYXBIZWlnaHQiKXx8MCxmbGFnczpyLmdldCgiRmxhZ3MiKSxpdGFsaWNBbmdsZTpyLmdldCgiSXRhbGljQW5nbGUiKXx8MCxpc1R5cGUzRm9udDpiLGNzc0ZvbnRJbmZvOm0sc2NhbGVGYWN0b3JzOiR9LCFmKXtlLm5leHQ9ODM7YnJlYWt9cmV0dXJuKEc9dS5nZXQoIkVuY29kaW5nIikpaW5zdGFuY2VvZiBvLk5hbWUmJih3LmNpZEVuY29kaW5nPUcubmFtZSksZS5uZXh0PTgwLGkuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzpHLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pO2Nhc2UgODA6ej1lLnNlbnQsdy5jTWFwPXosdy52ZXJ0aWNhbD13LmNNYXAudmVydGljYWw7Y2FzZSA4MzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobix1LHcpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBXLmV4dHJhY3RXaWR0aHMobixyLGUpLG5ldyBzLkZvbnQoUC5uYW1lLE0sZSl9KSkpO2Nhc2UgODQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1szNSwzOV1dKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSxbe2tleToiYnVpbGRGb250UGF0aHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe2Z1bmN0aW9uIGkodCl7dmFyIGk9IiIuY29uY2F0KGUubG9hZGVkTmFtZSwiX3BhdGhfIikuY29uY2F0KHQpO3RyeXtpZihlLnJlbmRlcmVyLmhhc0J1aWx0UGF0aCh0KSlyZXR1cm47ci5zZW5kKCJjb21tb25vYmoiLFtpLCJGb250UGF0aCIsZS5yZW5kZXJlci5nZXRQYXRoSnModCldKX1jYXRjaChlKXtpZihuLmlnbm9yZUVycm9ycylyZXR1cm4gci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRCdWlsZFBhdGh9KSx2b2lkKDAsYS53YXJuKSgiYnVpbGRGb250UGF0aHMgLSBpZ25vcmluZyAiLmNvbmNhdChpLCcgZ2x5cGg6ICInKS5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19dmFyIG8scz1OKHQpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIGM9by52YWx1ZTtpKGMuZm9udENoYXIpO3ZhciB1PWMuYWNjZW50O3UmJnUuZm9udENoYXImJmkodS5mb250Q2hhcil9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX19LHtrZXk6ImZhbGxiYWNrRm9udERpY3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkRpY3Q7cmV0dXJuIGUuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiUERGSlMtRmFsbGJhY2tGb250IikpLGUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKSxlLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSwoMCxhLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGV9KCk7dC5QYXJ0aWFsRXZhbHVhdG9yPUc7dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQubG9hZGVkTmFtZSxuPXQuZm9udCxhPXQuZGljdCxpPXQuZXZhbHVhdG9yT3B0aW9ucztfKHRoaXMsZSksdGhpcy5sb2FkZWROYW1lPXIsdGhpcy5mb250PW4sdGhpcy5kaWN0PWEsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucz1pfHxVLHRoaXMudHlwZTNMb2FkZWQ9bnVsbCx0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPW4uaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsLHRoaXMuc2VudD0hMX1yZXR1cm4gUihlLFt7a2V5OiJzZW5kIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNlbnR8fCh0aGlzLnNlbnQ9ITAsZS5zZW5kKCJjb21tb25vYmoiLFt0aGlzLmxvYWRlZE5hbWUsIkZvbnQiLHRoaXMuZm9udC5leHBvcnREYXRhKHRoaXMuX2V2YWx1YXRvck9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllcyldKSl9fSx7a2V5OiJmYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mb250LmRhdGEmJih0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlPSEwLEcuYnVpbGRGb250UGF0aHModGhpcy5mb250LHRoaXMuZm9udC5nbHlwaENhY2hlVmFsdWVzLGUsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucykpfX0se2tleToibG9hZFR5cGUzRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy50eXBlM0xvYWRlZClyZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtpZighdGhpcy5mb250LmlzVHlwZTNGb250KXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7dmFyIGk9ZS5jbG9uZSh7aWdub3JlRXJyb3JzOiExfSk7aS5wYXJzaW5nVHlwZTNGb250PSEwO3ZhciBzPW5ldyBvLlJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXMuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnMucHV0KHRoaXMuZGljdC5vYmpJZCksaS50eXBlM0ZvbnRSZWZzPXM7dmFyIGMsdT10aGlzLmZvbnQsbD10aGlzLnR5cGUzRGVwZW5kZW5jaWVzLGY9UHJvbWlzZS5yZXNvbHZlKCksaD10aGlzLmRpY3QuZ2V0KCJDaGFyUHJvY3MiKSxkPXRoaXMuZGljdC5nZXQoIlJlc291cmNlcyIpfHx0LHA9T2JqZWN0LmNyZWF0ZShudWxsKSxnPWEuVXRpbC5ub3JtYWxpemVSZWN0KHUuYmJveHx8WzAsMCwwLDBdKSx2PWdbMl0tZ1swXSx5PWdbM10tZ1sxXSxtPU1hdGguaHlwb3Qodix5KSxiPU4oaC5nZXRLZXlzKCkpO3RyeXt2YXIgdz1mdW5jdGlvbigpe3ZhciBlPWMudmFsdWU7Zj1mLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ9aC5nZXQoZSksbz1uZXcgRi5PcGVyYXRvckxpc3Q7cmV0dXJuIGkuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnIscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Om99KS50aGVuKChmdW5jdGlvbigpe28uZm5BcnJheVswXT09PWEuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyYmbi5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhvLG0pLHBbZV09by5nZXRJUigpO3ZhciB0LHI9TihvLmRlcGVuZGVuY2llcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2wuYWRkKGkpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKHQpeygwLGEud2FybikoJ1R5cGUzIGZvbnQgcmVzb3VyY2UgIicuY29uY2F0KGUsJyIgaXMgbm90IGF2YWlsYWJsZS4nKSk7dmFyIHI9bmV3IEYuT3BlcmF0b3JMaXN0O3BbZV09ci5nZXRJUigpfSkpfSkpfTtmb3IoYi5zKCk7IShjPWIubigpKS5kb25lOyl3KCl9Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9cmV0dXJuIHRoaXMudHlwZTNMb2FkZWQ9Zi50aGVuKChmdW5jdGlvbigpe3UuY2hhclByb2NPcGVyYXRvckxpc3Q9cCxuLl9iYm94JiYodS5pc0NoYXJCQm94PSEwLHUuYmJveD1uLl9iYm94KX0pKSx0aGlzLnR5cGUzTG9hZGVkfX0se2tleToiX3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpOYU4scj1hLlV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksbj1yWzJdLXJbMF0saT1yWzNdLXJbMV0sbz1NYXRoLmh5cG90KG4saSk7MD09PW58fDA9PT1pPyhlLmZuQXJyYXkuc3BsaWNlKDAsMSksZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSkpOigwPT09dHx8TWF0aC5yb3VuZChvL3QpPj0xMCkmJih0aGlzLl9iYm94fHwodGhpcy5fYmJveD1bMS8wLDEvMCwtMS8wLC0xLzBdKSx0aGlzLl9iYm94WzBdPU1hdGgubWluKHRoaXMuX2Jib3hbMF0sclswXSksdGhpcy5fYmJveFsxXT1NYXRoLm1pbih0aGlzLl9iYm94WzFdLHJbMV0pLHRoaXMuX2Jib3hbMl09TWF0aC5tYXgodGhpcy5fYmJveFsyXSxyWzJdKSx0aGlzLl9iYm94WzNdPU1hdGgubWF4KHRoaXMuX2Jib3hbM10sclszXSkpO2Zvcih2YXIgcz0wLGM9ZS5sZW5ndGg7czxjOyl7c3dpdGNoKGUuZm5BcnJheVtzXSl7Y2FzZSBhLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHM6YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOmNhc2UgYS5PUFMuc2V0RmlsbENvbG9yU3BhY2U6Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNvbG9yTjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvck46Y2FzZSBhLk9QUy5zZXRTdHJva2VHcmF5OmNhc2UgYS5PUFMuc2V0RmlsbEdyYXk6Y2FzZSBhLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6Y2FzZSBhLk9QUy5zaGFkaW5nRmlsbDpjYXNlIGEuT1BTLnNldFJlbmRlcmluZ0ludGVudDplLmZuQXJyYXkuc3BsaWNlKHMsMSksZS5hcmdzQXJyYXkuc3BsaWNlKHMsMSksYy0tO2NvbnRpbnVlO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmZvcih2YXIgdT1UKGUuYXJnc0FycmF5W3NdLDEpWzBdLGw9MCxmPXUubGVuZ3RoO2w8Zjspe3N3aXRjaChUKHVbbF0sMSlbMF0pe2Nhc2UiVFIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIkJHIjpjYXNlIkJHMiI6Y2FzZSJVQ1IiOmNhc2UiVUNSMiI6dS5zcGxpY2UobCwxKSxmLS07Y29udGludWV9bCsrfX1zKyt9fX1dKSxlfSgpLFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5ldyBZO18odGhpcyxlKSx0aGlzLnN0YXRlPXQsdGhpcy5zdGF0ZVN0YWNrPVtdfXJldHVybiBSKGUsW3trZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKSx0aGlzLnN0YXRlPWUuY2xvbmUoKX19LHtrZXk6InJlc3RvcmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZVN0YWNrLnBvcCgpO2UmJih0aGlzLnN0YXRlPWUpfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnN0YXRlLmN0bT1hLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLGUpfX1dKSxlfSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoYS5JREVOVElUWV9NQVRSSVgpLHRoaXMuZm9udE5hbWU9bnVsbCx0aGlzLmZvbnRTaXplPTAsdGhpcy5sb2FkZWROYW1lPW51bGwsdGhpcy5mb250PW51bGwsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy50ZXh0TWF0cml4PWEuSURFTlRJVFlfTUFUUklYLnNsaWNlKCksdGhpcy50ZXh0TGluZU1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wfXJldHVybiBSKGUsW3trZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz10aGlzLnRleHRNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJzZXRUZXh0TGluZU1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPXRoaXMudGV4dExpbmVNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJ0cmFuc2xhdGVUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dE1hdHJpeDtyWzRdPXJbMF0qZStyWzJdKnQrcls0XSxyWzVdPXJbMV0qZStyWzNdKnQrcls1XX19LHtrZXk6InRyYW5zbGF0ZVRleHRMaW5lTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dExpbmVNYXRyaXg7cls0XT1yWzBdKmUrclsyXSp0K3JbNF0scls1XT1yWzFdKmUrclszXSp0K3JbNV19fSx7a2V5OiJjYXJyaWFnZVJldHVybiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KDAsLXRoaXMubGVhZGluZyksdGhpcy50ZXh0TWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIGUudGV4dE1hdHJpeD10aGlzLnRleHRNYXRyaXguc2xpY2UoKSxlLnRleHRMaW5lTWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKSxlLmZvbnRNYXRyaXg9dGhpcy5mb250TWF0cml4LnNsaWNlKCksZX19XSksZX0oKSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe18odGhpcyxlKSx0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KGEuSURFTlRJVFlfTUFUUklYKSx0aGlzLmZvbnQ9bnVsbCx0aGlzLnRleHRSZW5kZXJpbmdNb2RlPWEuVGV4dFJlbmRlcmluZ01vZGUuRklMTCx0aGlzLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksdGhpcy5zdHJva2VDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXl9cmV0dXJuIFIoZSxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fV0pLGV9KCksSz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bmV3IFc7Xyh0aGlzLGUpLHRoaXMucGFyc2VyPW5ldyBnLlBhcnNlcih7bGV4ZXI6bmV3IGcuTGV4ZXIodCxlLm9wTWFwKSx4cmVmOnJ9KSx0aGlzLnN0YXRlTWFuYWdlcj1uLHRoaXMubm9uUHJvY2Vzc2VkQXJncz1bXSx0aGlzLl9pc1BhdGhPcD0hMSx0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wfXJldHVybiBSKGUsW3trZXk6InNhdmVkU3RhdGVzRGVwdGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aH19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10LmFyZ3M7Oyl7dmFyIG49dGhpcy5wYXJzZXIuZ2V0T2JqKCk7aWYobiBpbnN0YW5jZW9mIG8uQ21kKXt2YXIgaT1uLmNtZCxzPWUub3BNYXBbaV07aWYoIXMpeygwLGEud2FybikoJ1Vua25vd24gY29tbWFuZCAiJy5jb25jYXQoaSwnIi4nKSk7Y29udGludWV9dmFyIGM9cy5pZCx1PXMubnVtQXJncyxsPW51bGwhPT1yP3IubGVuZ3RoOjA7aWYodGhpcy5faXNQYXRoT3B8fCh0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wKSx0aGlzLl9pc1BhdGhPcD1jPj1hLk9QUy5tb3ZlVG8mJmM8PWEuT1BTLmVuZFBhdGgscy52YXJpYWJsZUFyZ3MpbD51JiYoMCxhLmluZm8pKCJDb21tYW5kICIuY29uY2F0KGksIjogZXhwZWN0ZWQgWzAsICIpLmNvbmNhdCh1LCJdIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIikpO2Vsc2V7aWYobCE9PXUpe2Zvcih2YXIgZj10aGlzLm5vblByb2Nlc3NlZEFyZ3M7bD51OylmLnB1c2goci5zaGlmdCgpKSxsLS07Zm9yKDtsPHUmJjAhPT1mLmxlbmd0aDspbnVsbD09PXImJihyPVtdKSxyLnVuc2hpZnQoZi5wb3AoKSksbCsrfWlmKGw8dSl7dmFyIGg9ImNvbW1hbmQgIi5jb25jYXQoaSwiOiBleHBlY3RlZCAiKS5jb25jYXQodSwiIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIik7aWYodGhpcy5faXNQYXRoT3AmJisrdGhpcy5fbnVtSW52YWxpZFBhdGhPUFM+ZS5NQVhfSU5WQUxJRF9QQVRIX09QUyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCAiLmNvbmNhdChoKSk7KDAsYS53YXJuKSgiU2tpcHBpbmcgIi5jb25jYXQoaCkpLG51bGwhPT1yJiYoci5sZW5ndGg9MCk7Y29udGludWV9fXJldHVybiB0aGlzLnByZXByb2Nlc3NDb21tYW5kKGMsciksdC5mbj1jLHQuYXJncz1yLCEwfWlmKG49PT1vLkVPRilyZXR1cm4hMTtpZihudWxsIT09biYmKG51bGw9PT1yJiYocj1bXSksci5wdXNoKG4pLHIubGVuZ3RoPjMzKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX0se2tleToicHJlcHJvY2Vzc0NvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSBhLk9QUy5zYXZlOnRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTticmVhaztjYXNlIGEuT1BTLnJlc3RvcmU6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybSh0KX19fV0sW3trZXk6Im9wTWFwIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT0oMCx4LmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uudz17aWQ6YS5PUFMuc2V0TGluZVdpZHRoLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuSj17aWQ6YS5PUFMuc2V0TGluZUNhcCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmo9e2lkOmEuT1BTLnNldExpbmVKb2luLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuTT17aWQ6YS5PUFMuc2V0TWl0ZXJMaW1pdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmQ9e2lkOmEuT1BTLnNldERhc2gsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5yaT17aWQ6YS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuaT17aWQ6YS5PUFMuc2V0RmxhdG5lc3MsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5ncz17aWQ6YS5PUFMuc2V0R1N0YXRlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUucT17aWQ6YS5PUFMuc2F2ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlE9e2lkOmEuT1BTLnJlc3RvcmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5jbT17aWQ6YS5PUFMudHJhbnNmb3JtLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGUubT17aWQ6YS5PUFMubW92ZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUubD17aWQ6YS5PUFMubGluZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuYz17aWQ6YS5PUFMuY3VydmVUbyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxlLnY9e2lkOmEuT1BTLmN1cnZlVG8yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUueT17aWQ6YS5PUFMuY3VydmVUbzMsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5oPXtpZDphLk9QUy5jbG9zZVBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5yZT17aWQ6YS5PUFMucmVjdGFuZ2xlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUuUz17aWQ6YS5PUFMuc3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUucz17aWQ6YS5PUFMuY2xvc2VTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5mPXtpZDphLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRj17aWQ6YS5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJmKiJdPXtpZDphLk9QUy5lb0ZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5CPXtpZDphLk9QUy5maWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIkIqIl09e2lkOmEuT1BTLmVvRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLmI9e2lkOmEuT1BTLmNsb3NlRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJiKiJdPXtpZDphLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLm49e2lkOmEuT1BTLmVuZFBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5XPXtpZDphLk9QUy5jbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIlcqIl09e2lkOmEuT1BTLmVvQ2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJUPXtpZDphLk9QUy5iZWdpblRleHQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5FVD17aWQ6YS5PUFMuZW5kVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlRjPXtpZDphLk9QUy5zZXRDaGFyU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR3PXtpZDphLk9QUy5zZXRXb3JkU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR6PXtpZDphLk9QUy5zZXRIU2NhbGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5UTD17aWQ6YS5PUFMuc2V0TGVhZGluZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlRmPXtpZDphLk9QUy5zZXRGb250LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVHI9e2lkOmEuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVHM9e2lkOmEuT1BTLnNldFRleHRSaXNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVGQ9e2lkOmEuT1BTLm1vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVEQ9e2lkOmEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLlRtPXtpZDphLk9QUy5zZXRUZXh0TWF0cml4LG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGVbIlQqIl09e2lkOmEuT1BTLm5leHRMaW5lLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuVGo9e2lkOmEuT1BTLnNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVEo9e2lkOmEuT1BTLnNob3dTcGFjZWRUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGVbIiciXT17aWQ6YS5PUFMubmV4dExpbmVTaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlWyciJ109e2lkOmEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUuZDA9e2lkOmEuT1BTLnNldENoYXJXaWR0aCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLmQxPXtpZDphLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sZS5DUz17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmNzPXtpZDphLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlNDPXtpZDphLk9QUy5zZXRTdHJva2VDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfSxlLlNDTj17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxlLnNjPXtpZDphLk9QUy5zZXRGaWxsQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sZS5zY249e2lkOmEuT1BTLnNldEZpbGxDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LGUuRz17aWQ6YS5PUFMuc2V0U3Ryb2tlR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmc9e2lkOmEuT1BTLnNldEZpbGxHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuUkc9e2lkOmEuT1BTLnNldFN0cm9rZVJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUucmc9e2lkOmEuT1BTLnNldEZpbGxSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxlLks9e2lkOmEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxlLms9e2lkOmEuT1BTLnNldEZpbGxDTVlLQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5zaD17aWQ6YS5PUFMuc2hhZGluZ0ZpbGwsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CST17aWQ6YS5PUFMuYmVnaW5JbmxpbmVJbWFnZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLklEPXtpZDphLk9QUy5iZWdpbkltYWdlRGF0YSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkVJPXtpZDphLk9QUy5lbmRJbmxpbmVJbWFnZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLkRvPXtpZDphLk9QUy5wYWludFhPYmplY3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5NUD17aWQ6YS5PUFMubWFya1BvaW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuRFA9e2lkOmEuT1BTLm1hcmtQb2ludFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuQk1DPXtpZDphLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CREM9e2lkOmEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuRU1DPXtpZDphLk9QUy5lbmRNYXJrZWRDb250ZW50LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuQlg9e2lkOmEuT1BTLmJlZ2luQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRVg9e2lkOmEuT1BTLmVuZENvbXBhdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJNPW51bGwsZS5CRD1udWxsLGUudHJ1ZT1udWxsLGUuZmE9bnVsbCxlLmZhbD1udWxsLGUuZmFscz1udWxsLGUuZmFsc2U9bnVsbCxlLm51PW51bGwsZS5udWw9bnVsbCxlLm51bGw9bnVsbH0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3BNYXAiLGUoKSl9fSx7a2V5OiJNQVhfSU5WQUxJRF9QQVRIX09QUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIk1BWF9JTlZBTElEX1BBVEhfT1BTIiwxMCl9fV0pLGV9KCk7dC5FdmFsdWF0b3JQcmVwcm9jZXNzb3I9S30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklkZW50aXR5Q01hcD10LkNNYXBGYWN0b3J5PXQuQ01hcD12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTQ2KSxzPXIoMTM1KSxjPXIoMTM5KTtmdW5jdGlvbiB1KCl7dT1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGwoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gZihlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1sO3ZhciBoPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1mKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxsPXUudmFsdWU7cmV0dXJuIGwmJiJvYmplY3QiPT1wKGwpJiZyLmNhbGwobCwiX19hd2FpdCIpP3QucmVzb2x2ZShsLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShsKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9ZihlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWYobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGwodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBsKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtsKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtsKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaChlLHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saChlLHQpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scChlKX1mdW5jdGlvbiBnKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1wKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXAoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHkoZSx0LHIpe3JldHVybiB0JiZ2KGUucHJvdG90eXBlLHQpLHImJnYoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBtPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sYj1NYXRoLnBvdygyLDI0KS0xLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtnKHRoaXMsZSksdGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wLHRoaXMuX21hcD1bXSx0aGlzLm5hbWU9IiIsdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLnVzZUNNYXA9bnVsbCx0aGlzLmJ1aWx0SW5DTWFwPXR9cmV0dXJuIHkoZSxbe2tleToiYWRkQ29kZXNwYWNlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLmNvZGVzcGFjZVJhbmdlc1tlLTFdLnB1c2godCxyKSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrfX0se2tleToibWFwQ2lkUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0LWU+Yil0aHJvdyBuZXcgRXJyb3IoIm1hcENpZFJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2Zvcig7ZTw9dDspdGhpcy5fbWFwW2UrK109cisrfX0se2tleToibWFwQmZSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHQtZT5iKXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgtMTtlPD10Oyl7dGhpcy5fbWFwW2UrK109cjt2YXIgYT1yLmNoYXJDb2RlQXQobikrMTtyPWE+MjU1P3Iuc3Vic3RyaW5nKDAsbi0xKStTdHJpbmcuZnJvbUNoYXJDb2RlKHIuY2hhckNvZGVBdChuLTEpKzEpKyJcMCI6ci5zdWJzdHJpbmcoMCxuKStTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYodC1lPmIpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlVG9BcnJheSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgsYT0wO2U8PXQmJmE8bjspdGhpcy5fbWFwW2VdPXJbYSsrXSwrK2V9fSx7a2V5OiJtYXBPbmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJjb250YWlucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcCxyPXQubGVuZ3RoO2lmKHI8PTY1NTM2KWZvcih2YXIgbj0wO248cjtuKyspdm9pZCAwIT09dFtuXSYmZShuLHRbbl0pO2Vsc2UgZm9yKHZhciBhIGluIHQpZShhLHRbYV0pfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgciBpbiB0KWlmKHRbcl09PT1lKXJldHVybiAwfHI7cmV0dXJuLTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcH19LHtrZXk6InJlYWRDaGFyQ29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wLGE9dGhpcy5jb2Rlc3BhY2VSYW5nZXMsaT0wLG89YS5sZW5ndGg7aTxvO2krKyl7bj0objw8OHxlLmNoYXJDb2RlQXQodCtpKSk+Pj4wO2Zvcih2YXIgcz1hW2ldLGM9MCx1PXMubGVuZ3RoO2M8dTspe3ZhciBsPXNbYysrXSxmPXNbYysrXTtpZihuPj1sJiZuPD1mKXJldHVybiByLmNoYXJjb2RlPW4sdm9pZChyLmxlbmd0aD1pKzEpfX1yLmNoYXJjb2RlPTAsci5sZW5ndGg9MX19LHtrZXk6ImdldENoYXJDb2RlTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb2Rlc3BhY2VSYW5nZXMscj0wLG49dC5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGE9dFtyXSxpPTAsbz1hLmxlbmd0aDtpPG87KXt2YXIgcz1hW2krK10sYz1hW2krK107aWYoZT49cyYmZTw9YylyZXR1cm4gcisxfXJldHVybiAxfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19XSksZX0oKTt0LkNNYXA9dzt2YXIgaz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaChlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1kKHQpO2lmKHIpe3ZhciBhPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSx0KXt2YXIgcjtyZXR1cm4gZyh0aGlzLGkpLChyPWEuY2FsbCh0aGlzKSkudmVydGljYWw9ZSxyLmFkZENvZGVzcGFjZVJhbmdlKHQsMCw2NTUzNSkscn1yZXR1cm4geShpLFt7a2V5OiJtYXBDaWRSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlVG9BcnJheSIpfX0se2tleToibWFwT25lIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkT25lIil9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOnZvaWQgMH19LHtrZXk6ImNvbnRhaW5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzV9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PD02NTUzNTt0KyspZSh0LHQpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6LTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBBcnJheSg2NTUzNiksdD0wO3Q8PTY1NTM1O3QrKyllW3RdPXQ7cmV0dXJuIGV9fSx7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiA2NTUzNn19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwIil9fV0pLGl9KHcpO3QuSWRlbnRpdHlDTWFwPWs7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTAsbj0wO248PXQ7bisrKXI9cjw8OHxlW25dO3JldHVybiByPj4+MH1mdW5jdGlvbiB0KGUsdCl7cmV0dXJuIDE9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdKTozPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSxlWzJdLGVbM10pOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KDAsdCsxKSl9ZnVuY3Rpb24gcihlLHQscil7Zm9yKHZhciBuPTAsYT1yO2E+PTA7YS0tKW4rPWVbYV0rdFthXSxlW2FdPTI1NSZuLG4+Pj04fWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MSxuPXQ7bj49MCYmcj4wO24tLSlyKz1lW25dLGVbbl09MjU1JnIscj4+PTh9dmFyIGk9MTYsbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7Zyh0aGlzLGUpLHRoaXMuYnVmZmVyPXQsdGhpcy5wb3M9MCx0aGlzLmVuZD10Lmxlbmd0aCx0aGlzLnRtcEJ1Zj1uZXcgVWludDhBcnJheSgxOSl9cmV0dXJuIHkoZSxbe2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXX19LHtrZXk6InJlYWROdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Rve3ZhciByPXRoaXMucmVhZEJ5dGUoKTtpZihyPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7ZT0hKDEyOCZyKSx0PXQ8PDd8MTI3JnJ9d2hpbGUoIWUpO3JldHVybiB0fX0se2tleToicmVhZFNpZ25lZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gMSZlP34oZT4+PjEpOmU+Pj4xfX0se2tleToicmVhZEhleCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyx0aGlzLnBvcyt0KzEpKSx0aGlzLnBvcys9dCsxfX0se2tleToicmVhZEhleE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixhPXRoaXMudG1wQnVmLGk9MDtkb3t2YXIgbz10aGlzLnJlYWRCeXRlKCk7aWYobzwwKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO3I9ISgxMjgmbyksYVtpKytdPTEyNyZvfXdoaWxlKCFyKTtmb3IodmFyIHM9dCxjPTAsdT0wO3M+PTA7KXtmb3IoO3U8OCYmYS5sZW5ndGg+MDspY3w9YVstLWldPDx1LHUrPTc7ZVtzXT0yNTUmYyxzLS0sYz4+PTgsdS09OH19fSx7a2V5OiJyZWFkSGV4U2lnbmVkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucmVhZEhleE51bWJlcihlLHQpO2Zvcih2YXIgcj0xJmVbdF0/MjU1OjAsbj0wLGE9MDthPD10O2ErKyluPSgxJm4pPDw4fGVbYV0sZVthXT1uPj4xXnJ9fSx7a2V5OiJyZWFkU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJlYWROdW1iZXIoKSx0PSIiLHI9MDtyPGU7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO3JldHVybiB0fX1dKSxlfSgpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7Zyh0aGlzLG4pfXZhciBzO3JldHVybiB5KG4sW3trZXk6InByb2Nlc3MiLHZhbHVlOihzPWYodSgpLm1hcmsoKGZ1bmN0aW9uIG4ocyxjLGwpe3ZhciBmLGgsZCxwLGcsdix5LG0sYix3LGssUyx4LE8sQSxDLEYsUCxULEksRTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOmY9bmV3IG8ocyksaD1mLnJlYWRCeXRlKCksYy52ZXJ0aWNhbD0hISgxJmgpLGQ9bnVsbCxwPW5ldyBVaW50OEFycmF5KGkpLGc9bmV3IFVpbnQ4QXJyYXkoaSksdj1uZXcgVWludDhBcnJheShpKSx5PW5ldyBVaW50OEFycmF5KGkpLG09bmV3IFVpbnQ4QXJyYXkoaSk7Y2FzZSA5OmlmKCEoKHc9Zi5yZWFkQnl0ZSgpKT49MCkpe24ubmV4dD02ODticmVha31pZig3IT0oaz13Pj41KSl7bi5uZXh0PTIwO2JyZWFrfW4udDA9MzEmdyxuLm5leHQ9MD09PW4udDA/MTU6MT09PW4udDA/MTc6MTk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZi5yZWFkU3RyaW5nKCksbi5hYnJ1cHQoImJyZWFrIiwxOSk7Y2FzZSAxNzpyZXR1cm4gZD1mLnJlYWRTdHJpbmcoKSxuLmFicnVwdCgiYnJlYWsiLDE5KTtjYXNlIDE5OnJldHVybiBuLmFicnVwdCgiY29udGludWUiLDkpO2Nhc2UgMjA6aWYoUz0hISgxNiZ3KSwhKDErKHg9MTUmdyk+aSkpe24ubmV4dD0yNDticmVha310aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjYXNlIDI0Ok89MSxBPWYucmVhZE51bWJlcigpLG4udDE9ayxuLm5leHQ9MD09PW4udDE/Mjk6MT09PW4udDE/MzU6Mj09PW4udDE/NDE6Mz09PW4udDE/NDY6ND09PW4udDE/NTM6NT09PW4udDE/NTg6NjU7YnJlYWs7Y2FzZSAyOTpmb3IoZi5yZWFkSGV4KHAseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksYy5hZGRDb2Rlc3BhY2VSYW5nZSh4KzEsZShwLHgpLGUoZyx4KSksQz0xO0M8QTtDKyspYShnLHgpLGYucmVhZEhleE51bWJlcihwLHgpLHIocCxnLHgpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGMuYWRkQ29kZXNwYWNlUmFuZ2UoeCsxLGUocCx4KSxlKGcseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDM1OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxmLnJlYWROdW1iZXIoKSxGPTE7RjxBO0YrKylhKGcseCksZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksZi5yZWFkTnVtYmVyKCk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNDE6Zm9yKGYucmVhZEhleCh2LHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBPbmUoZSh2LHgpLGIpLFA9MTtQPEE7UCsrKWEodix4KSxTfHwoZi5yZWFkSGV4TnVtYmVyKG0seCkscih2LG0seCkpLGI9Zi5yZWFkU2lnbmVkKCkrKGIrMSksYy5tYXBPbmUoZSh2LHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDQ2OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxiPWYucmVhZE51bWJlcigpLGMubWFwQ2lkUmFuZ2UoZShwLHgpLGUoZyx4KSxiKSxUPTE7VDxBO1QrKylhKGcseCksUz9wLnNldChnKTooZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCkpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBDaWRSYW5nZShlKHAseCksZShnLHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDUzOmZvcihmLnJlYWRIZXgodixPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcE9uZShlKHYsTyksdCh5LHgpKSxJPTE7STxBO0krKylhKHYsTyksU3x8KGYucmVhZEhleE51bWJlcihtLE8pLHIodixtLE8pKSxhKHkseCksZi5yZWFkSGV4U2lnbmVkKG0seCkscih5LG0seCksYy5tYXBPbmUoZSh2LE8pLHQoeSx4KSk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNTg6Zm9yKGYucmVhZEhleChwLE8pLGYucmVhZEhleE51bWJlcihnLE8pLHIoZyxwLE8pLGYucmVhZEhleCh5LHgpLGMubWFwQmZSYW5nZShlKHAsTyksZShnLE8pLHQoeSx4KSksRT0xO0U8QTtFKyspYShnLE8pLFM/cC5zZXQoZyk6KGYucmVhZEhleE51bWJlcihwLE8pLHIocCxnLE8pKSxmLnJlYWRIZXhOdW1iZXIoZyxPKSxyKGcscCxPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcEJmUmFuZ2UoZShwLE8pLGUoZyxPKSx0KHkseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDY1OnRocm93IG5ldyBFcnJvcigiQmluYXJ5Q01hcFJlYWRlci5wcm9jZXNzIC0gdW5rbm93biB0eXBlOiAiLmNvbmNhdChrKSk7Y2FzZSA2NjpuLm5leHQ9OTticmVhaztjYXNlIDY4OmlmKCFkKXtuLm5leHQ9NzA7YnJlYWt9cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGwoZCkpO2Nhc2UgNzA6cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSksZnVuY3Rpb24oZSx0LHIpe3JldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLG59KCk7cmV0dXJuIHN9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7cisrKXQ9dDw8OHxlLmNoYXJDb2RlQXQocik7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIHIoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuIil9ZnVuY3Rpb24gbChyLG4pe2Zvcig7Oyl7dmFyIGk9bi5nZXRPYmooKTtpZihpPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkoaSwiZW5kYmZjaGFyIikpcmV0dXJuO3QoaSk7dmFyIG89ZShpKTt0KGk9bi5nZXRPYmooKSk7dmFyIHM9aTtyLm1hcE9uZShvLHMpfX1mdW5jdGlvbiBoKHIsaSl7Zm9yKDs7KXt2YXIgbz1pLmdldE9iaigpO2lmKG89PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShvLCJlbmRiZnJhbmdlIikpcmV0dXJuO3Qobyk7dmFyIHM9ZShvKTt0KG89aS5nZXRPYmooKSk7dmFyIGM9ZShvKTtpZihvPWkuZ2V0T2JqKCksTnVtYmVyLmlzSW50ZWdlcihvKXx8InN0cmluZyI9PXR5cGVvZiBvKXt2YXIgdT1OdW1iZXIuaXNJbnRlZ2VyKG8pP1N0cmluZy5mcm9tQ2hhckNvZGUobyk6bztyLm1hcEJmUmFuZ2UocyxjLHUpfWVsc2V7aWYoISgwLGEuaXNDbWQpKG8sIlsiKSlicmVhaztvPWkuZ2V0T2JqKCk7Zm9yKHZhciBsPVtdOyEoMCxhLmlzQ21kKShvLCJdIikmJm8hPT1hLkVPRjspbC5wdXNoKG8pLG89aS5nZXRPYmooKTtyLm1hcEJmUmFuZ2VUb0FycmF5KHMsYyxsKX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gZChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkY2hhciIpKXJldHVybjt0KG8pO3ZhciBzPWUobyk7cihvPWkuZ2V0T2JqKCkpO3ZhciBjPW87bi5tYXBPbmUocyxjKX19ZnVuY3Rpb24gcChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkcmFuZ2UiKSlyZXR1cm47dChvKTt2YXIgcz1lKG8pO3Qobz1pLmdldE9iaigpKTt2YXIgYz1lKG8pO3Iobz1pLmdldE9iaigpKTt2YXIgdT1vO24ubWFwQ2lkUmFuZ2UocyxjLHUpfX1mdW5jdGlvbiBnKHQscil7Zm9yKDs7KXt2YXIgaT1yLmdldE9iaigpO2lmKGk9PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShpLCJlbmRjb2Rlc3BhY2VyYW5nZSIpKXJldHVybjtpZigic3RyaW5nIiE9dHlwZW9mIGkpYnJlYWs7dmFyIG89ZShpKTtpZigic3RyaW5nIiE9dHlwZW9mKGk9ci5nZXRPYmooKSkpYnJlYWs7dmFyIHM9ZShpKTt0LmFkZENvZGVzcGFjZVJhbmdlKGkubGVuZ3RoLG8scyl9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgY29kZXNwYWNlIHJhbmdlLiIpfWZ1bmN0aW9uIHYoZSx0KXt2YXIgcj10LmdldE9iaigpO051bWJlci5pc0ludGVnZXIocikmJihlLnZlcnRpY2FsPSEhcil9ZnVuY3Rpb24geShlLHQpe3ZhciByPXQuZ2V0T2JqKCk7ciBpbnN0YW5jZW9mIGEuTmFtZSYmKGUubmFtZT1yLm5hbWUpfWZ1bmN0aW9uIGIoZSx0LHIsbil7cmV0dXJuIHguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHgoKXtyZXR1cm4oeD1mKHUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixpLG8pe3ZhciBjLGYsbTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGUucHJldj0xLChtPXIuZ2V0T2JqKCkpIT09YS5FT0Ype2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiYnJlYWsiLDM5KTtjYXNlIDc6aWYoIShtIGluc3RhbmNlb2YgYS5OYW1lKSl7ZS5uZXh0PTEyO2JyZWFrfSJXTW9kZSI9PT1tLm5hbWU/dih0LHIpOiJDTWFwTmFtZSI9PT1tLm5hbWUmJnkodCxyKSxjPW0sZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMTI6aWYoIShtIGluc3RhbmNlb2YgYS5DbWQpKXtlLm5leHQ9Mjk7YnJlYWt9ZS50MD1tLmNtZCxlLm5leHQ9ImVuZGNtYXAiPT09ZS50MD8xNjoidXNlY21hcCI9PT1lLnQwPzE3OiJiZWdpbmNvZGVzcGFjZXJhbmdlIj09PWUudDA/MTk6ImJlZ2luYmZjaGFyIj09PWUudDA/MjE6ImJlZ2luY2lkY2hhciI9PT1lLnQwPzIzOiJiZWdpbmJmcmFuZ2UiPT09ZS50MD8yNToiYmVnaW5jaWRyYW5nZSI9PT1lLnQwPzI3OjI5O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMzkpO2Nhc2UgMTc6cmV0dXJuIGMgaW5zdGFuY2VvZiBhLk5hbWUmJihmPWMubmFtZSksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAxOTpyZXR1cm4gZyh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjE6cmV0dXJuIGwodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDIzOnJldHVybiBkKHQsciksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAyNTpyZXR1cm4gaCh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjc6cmV0dXJuIHAodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDI5OmUubmV4dD0zNzticmVhaztjYXNlIDMxOmlmKGUucHJldj0zMSxlLnQxPWUuY2F0Y2goMSksIShlLnQxIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpe2UubmV4dD0zNTticmVha310aHJvdyBlLnQxO2Nhc2UgMzU6cmV0dXJuKDAsbi53YXJuKSgiSW52YWxpZCBjTWFwIGRhdGE6ICIrZS50MSksZS5hYnJ1cHQoImNvbnRpbnVlIiwwKTtjYXNlIDM3OmUubmV4dD0wO2JyZWFrO2Nhc2UgMzk6aWYoIW8mJmYmJihvPWYpLCFvKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLE8odCxpLG8pKTtjYXNlIDQyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDQzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbMSwzMV1dKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPKGUsdCxyKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQSgpe3JldHVybihBPWYodSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGk7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsQyhuLHIpO2Nhc2UgMjppZih0LnVzZUNNYXA9ZS5zZW50LDA9PT10Lm51bUNvZGVzcGFjZVJhbmdlcyl7Zm9yKGE9dC51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcyxpPTA7aTxhLmxlbmd0aDtpKyspdC5jb2Rlc3BhY2VSYW5nZXNbaV09YVtpXS5zbGljZSgpO3QubnVtQ29kZXNwYWNlUmFuZ2VzPXQudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9cmV0dXJuIHQudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QuY29udGFpbnMoZSl8fHQubWFwT25lKGUsdC51c2VDTWFwLmxvb2t1cChlKSl9KSksZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQyhlLHQpe3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBGKCl7cmV0dXJuKEY9Zih1KCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBhLGkscyxsLGY7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiSWRlbnRpdHktSCIhPT10KXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITEsMikpO2Nhc2UgNDppZigiSWRlbnRpdHktViIhPT10KXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITAsMikpO2Nhc2UgNjppZihtLmluY2x1ZGVzKHQpKXtlLm5leHQ9ODticmVha310aHJvdyBuZXcgRXJyb3IoIlVua25vd24gQ01hcCBuYW1lOiAiK3QpO2Nhc2UgODppZihyKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIscih0KTtjYXNlIDEyOmlmKGE9ZS5zZW50LGk9YS5jTWFwRGF0YSxzPWEuY29tcHJlc3Npb25UeXBlLGw9bmV3IHcoITApLHMhPT1uLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZKXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChuZXcgUykucHJvY2VzcyhpLGwsKGZ1bmN0aW9uKGUpe3JldHVybiBPKGwscixlKX0pKSk7Y2FzZSAxODppZihzIT09bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpe2UubmV4dD0yMTticmVha31yZXR1cm4gZj1uZXcgby5MZXhlcihuZXcgYy5TdHJlYW0oaSkpLGUuYWJydXB0KCJyZXR1cm4iLGIobCxmLHIsbnVsbCkpO2Nhc2UgMjE6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIENNYXAgImNvbXByZXNzaW9uVHlwZSIgdmFsdWU6ICcuY29uY2F0KHMpKTtjYXNlIDIyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJue2NyZWF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZih1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4scyxjO3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYocj1lLmVuY29kaW5nLG49ZS5mZXRjaEJ1aWx0SW5DTWFwLHM9ZS51c2VDTWFwLCEociBpbnN0YW5jZW9mIGEuTmFtZSkpe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixDKHIubmFtZSxuKSk7Y2FzZSA3OmlmKCEociBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSkpe3QubmV4dD0xNDticmVha31yZXR1cm4gdC5uZXh0PTEwLGIobmV3IHcsbmV3IG8uTGV4ZXIociksbixzKTtjYXNlIDEwOmlmKCEoYz10LnNlbnQpLmlzSWRlbnRpdHlDTWFwKXt0Lm5leHQ9MTM7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLEMoYy5uYW1lLG4pKTtjYXNlIDEzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgcmVxdWlyZWQuIik7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSgpfX19KCk7dC5DTWFwRmFjdG9yeT14fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGFyc2VyPXQuTGluZWFyaXphdGlvbj10LkxleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpLG89cigxNDcpLHM9cigxNDkpLGM9cigxNTApLHU9cigxNTIpLGw9cigxNTMpLGY9cigxNTYpLGg9cigxNTgpLGQ9cigxNjApLHA9cigxMzkpLGc9cigxNjEpLHY9cigxNjIpO2Z1bmN0aW9uIHkoZSl7cmV0dXJuIHk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHkoZSl9ZnVuY3Rpb24gbShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGIoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT15KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB3KGUsdCxyKXtyZXR1cm4gdCYmYihlLnByb3RvdHlwZSx0KSxyJiZiKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5sZXhlcixuPXQueHJlZixhPXQuYWxsb3dTdHJlYW1zLGk9dm9pZCAwIT09YSYmYSxvPXQucmVjb3ZlcnlNb2RlLHM9dm9pZCAwIT09byYmbzttKHRoaXMsZSksdGhpcy5sZXhlcj1yLHRoaXMueHJlZj1uLHRoaXMuYWxsb3dTdHJlYW1zPWksdGhpcy5yZWNvdmVyeU1vZGU9cyx0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbWFnZUlkPTAsdGhpcy5yZWZpbGwoKX1yZXR1cm4gdyhlLFt7a2V5OiJyZWZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5idWYxPXRoaXMubGV4ZXIuZ2V0T2JqKCksdGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJ1ZjIgaW5zdGFuY2VvZiBhLkNtZCYmIklEIj09PXRoaXMuYnVmMi5jbWQ/KHRoaXMuYnVmMT10aGlzLmJ1ZjIsdGhpcy5idWYyPW51bGwpOih0aGlzLmJ1ZjE9dGhpcy5idWYyLHRoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpKX19LHtrZXk6InRyeVNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gdGhpcy5zaGlmdCgpLCEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9dGhpcy5idWYxO2lmKHRoaXMuc2hpZnQoKSx0IGluc3RhbmNlb2YgYS5DbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpmb3IodmFyIHI9W107ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiXSIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspci5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIHI7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXkuIil9cmV0dXJuIHRoaXMuc2hpZnQoKSxyO2Nhc2UiPDwiOmZvcih2YXIgbz1uZXcgYS5EaWN0KHRoaXMueHJlZik7ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiPj4iKSYmdGhpcy5idWYxIT09YS5FT0Y7KWlmKHRoaXMuYnVmMSBpbnN0YW5jZW9mIGEuTmFtZSl7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO28uc2V0KHMsdGhpcy5nZXRPYmooZSkpfWVsc2UoMCxuLmluZm8pKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpLHRoaXMuc2hpZnQoKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIG87dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1yZXR1cm4oMCxhLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpP3RoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShvLGUpOm86KHRoaXMuc2hpZnQoKSxvKTtkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJSIikpe3ZhciBjPWEuUmVmLmdldCh0LHRoaXMuYnVmMSk7cmV0dXJuIHRoaXMuc2hpZnQoKSx0aGlzLnNoaWZ0KCksY31yZXR1cm4gdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJmU/ZS5kZWNyeXB0U3RyaW5nKHQpOnR9fSx7a2V5OiJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbz10aGlzLmxleGVyLHM9ZS5wb3MsYz0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YyljPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YyljPTczPT09dD8yOjA7ZWxzZSBpZigzMj09PXR8fDEwPT09dHx8MTM9PT10KXtyPWUucG9zO2Zvcih2YXIgdT1lLnBlZWtCeXRlcygxMCksbD0wLGY9dS5sZW5ndGg7bDxmO2wrKylpZigoMCE9PSh0PXVbbF0pfHwwPT09dVtsKzFdKSYmMTAhPT10JiYxMyE9PXQmJih0PDMyfHx0PjEyNykpe2M9MDticmVha31pZigyIT09Yyljb250aW51ZTtpZihvLmtub3duQ29tbWFuZHMpe3ZhciBoPW8ucGVla09iaigpO2ggaW5zdGFuY2VvZiBhLkNtZCYmIW8ua25vd25Db21tYW5kc1toLmNtZF0mJihjPTApfWVsc2UoMCxuLndhcm4pKCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCAtIGBsZXhlci5rbm93bkNvbW1hbmRzYCBpcyB1bmRlZmluZWQuIik7aWYoMj09PWMpYnJlYWt9ZWxzZSBjPTA7LTE9PT10JiYoKDAsbi53YXJuKSgiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQ6IFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhvdXQgZmluZGluZyBhIHZhbGlkIEVJIG1hcmtlciIpLHImJigoMCxuLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpLGUuc2tpcCgtKGUucG9zLXIpKSkpO3ZhciBkPTQ7cmV0dXJuIGUuc2tpcCgtZCksdD1lLnBlZWtCeXRlKCksZS5za2lwKGQpLCgwLGkuaXNXaGl0ZVNwYWNlKSh0KXx8ZC0tLGUucG9zLWQtc319LHtrZXk6ImZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLGE9ZS5wb3MsaT0hMTstMSE9PSh0PWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09dCl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0OihyPWUuZ2V0VWludDE2KCkpPjI/ZS5za2lwKHItMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfXZhciBvPWUucG9zLWE7cmV0dXJuLTE9PT10PygoMCxuLndhcm4pKCJJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogRU9JIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtbyksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLG8pfX0se2tleToiZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigxMjY9PT10KXt2YXIgYT1lLnBvcztmb3IodD1lLnBlZWtCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyllLnNraXAoKSx0PWUucGVla0J5dGUoKTtpZig2Mj09PXQpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPmEpe3ZhciBvPWUucGVla0J5dGVzKDIpO2lmKDY5PT09b1swXSYmNzM9PT1vWzFdKWJyZWFrfX12YXIgcz1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJODVEZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIiksZS5za2lwKC1zKSx0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpKToodGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSkscyl9fSx7a2V5OiJmaW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpJiY2MiE9PXQ7KTt2YXIgYT1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtYSksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLGEpfX0se2tleToiaW5saW5lU3RyZWFtU2tpcEVJIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09cilyPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09cilyPTczPT09dD8yOjA7ZWxzZSBpZigyPT09cilicmVha319LHtrZXk6Im1ha2VJbmxpbmVJbWFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5sZXhlcixpPXIuc3RyZWFtLG89T2JqZWN0LmNyZWF0ZShudWxsKTshKDAsYS5pc0NtZCkodGhpcy5idWYxLCJJRCIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspe2lmKCEodGhpcy5idWYxIGluc3RhbmNlb2YgYS5OYW1lKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO29bc109dGhpcy5nZXRPYmooZSl9LTEhPT1yLmJlZ2luSW5saW5lSW1hZ2VQb3MmJih0PWkucG9zLXIuYmVnaW5JbmxpbmVJbWFnZVBvcyk7dmFyIGMsdT10aGlzLnhyZWYuZmV0Y2hJZlJlZihvLkZ8fG8uRmlsdGVyKTtpZih1IGluc3RhbmNlb2YgYS5OYW1lKWM9dS5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9dGhpcy54cmVmLmZldGNoSWZSZWYodVswXSk7bCBpbnN0YW5jZW9mIGEuTmFtZSYmKGM9bC5uYW1lKX12YXIgZixoLGQ9aS5wb3M7c3dpdGNoKGMpe2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6Zj10aGlzLmZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoaSk7YnJlYWs7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6Zj10aGlzLmZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpmPXRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2RlZmF1bHQ6Zj10aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGkpfWlmKGY8MWUzJiZ0PjApe3ZhciBwPWkucG9zO2kucG9zPXIuYmVnaW5JbmxpbmVJbWFnZVBvcyxoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPWUubGVuZ3RoLG49MDtuPHItMTspdC5wdXNoKGVbbisrXTw8OHxlW24rK10pO3JldHVybiBuPHImJnQucHVzaChlW25dKSxyKyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9KGkuZ2V0Qnl0ZXModCtmKSksaS5wb3M9cDt2YXIgZz10aGlzLmltYWdlQ2FjaGVbaF07aWYodm9pZCAwIT09ZylyZXR1cm4gdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksZy5yZXNldCgpLGd9dmFyIHY9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2Zvcih2YXIgeSBpbiBvKXYuc2V0KHksb1t5XSk7dmFyIG09aS5tYWtlU3ViU3RyZWFtKGQsZix2KTtyZXR1cm4gZSYmKG09ZS5jcmVhdGVTdHJlYW0obSxmKSksKG09dGhpcy5maWx0ZXIobSx2LGYpKS5kaWN0PXYsdm9pZCAwIT09aCYmKG0uY2FjaGVLZXk9ImlubGluZV9pbWdfIi5jb25jYXQoKyt0aGlzLl9pbWFnZUlkKSx0aGlzLmltYWdlQ2FjaGVbaF09bSksdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksbX19LHtrZXk6Il9maW5kU3RyZWFtTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIuc3RyZWFtO3IucG9zPWU7Zm9yKHZhciBuPXQubGVuZ3RoO3IucG9zPHIuZW5kOyl7dmFyIGE9ci5wZWVrQnl0ZXMoMjA0OCksaT1hLmxlbmd0aC1uO2lmKGk8PTApYnJlYWs7Zm9yKHZhciBvPTA7bzxpOyl7Zm9yKHZhciBzPTA7czxuJiZhW28rc109PT10W3NdOylzKys7aWYocz49bilyZXR1cm4gci5wb3MrPW8sci5wb3MtZTtvKyt9ci5wb3MrPWl9cmV0dXJuLTF9fSx7a2V5OiJtYWtlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIsbz1yLnN0cmVhbTtyLnNraXBUb05leHRMaW5lKCk7dmFyIHM9by5wb3MtMSxjPWUuZ2V0KCJMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGMpfHwoKDAsbi5pbmZvKSgnQmFkIGxlbmd0aCAiJy5jb25jYXQoYyYmYy50b1N0cmluZygpLCciIGluIHN0cmVhbS4nKSksYz0wKSxvLnBvcz1zK2Msci5uZXh0Q2hhcigpLHRoaXMudHJ5U2hpZnQoKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJlbmRzdHJlYW0iKSl0aGlzLnNoaWZ0KCk7ZWxzZXt2YXIgdT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTE1LDExNiwxMTQsMTAxLDk3LDEwOV0pLGw9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChzLHUpO2lmKGw8MCl7Zm9yKHZhciBmPTE7Zjw9MTtmKyspe3ZhciBoPXUubGVuZ3RoLWYsZD11LnNsaWNlKDAsaCkscD10aGlzLl9maW5kU3RyZWFtTGVuZ3RoKHMsZCk7aWYocD49MCl7dmFyIGc9by5wZWVrQnl0ZXMoaCsxKVtoXTtpZighKDAsaS5pc1doaXRlU3BhY2UpKGcpKWJyZWFrOygwLG4uaW5mbykoJ0ZvdW5kICInLmNvbmNhdCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGQpLCciIHdoZW4gJykrInNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuIiksbD1wO2JyZWFrfX1pZihsPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIil9Yz1sLHIubmV4dENoYXIoKSx0aGlzLnNoaWZ0KCksdGhpcy5zaGlmdCgpfXJldHVybiB0aGlzLnNoaWZ0KCksbz1vLm1ha2VTdWJTdHJlYW0ocyxjLGUpLHQmJihvPXQuY3JlYXRlU3RyZWFtKG8sYykpLChvPXRoaXMuZmlsdGVyKG8sZSxjKSkuZGljdD1lLG99fSx7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10LmdldCgiRiIsIkZpbHRlciIpLG89dC5nZXQoIkRQIiwiRGVjb2RlUGFybXMiKTtpZihpIGluc3RhbmNlb2YgYS5OYW1lKXJldHVybiBBcnJheS5pc0FycmF5KG8pJiYoMCxuLndhcm4pKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKSx0aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUscixvKTt2YXIgcz1yO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBjPWksdT1vLGw9MCxmPWMubGVuZ3RoO2w8ZjsrK2wpe2lmKCEoKGk9dGhpcy54cmVmLmZldGNoSWZSZWYoY1tsXSkpaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdCYWQgZmlsdGVyIG5hbWUgIicuY29uY2F0KGksJyInKSk7bz1udWxsLEFycmF5LmlzQXJyYXkodSkmJmwgaW4gdSYmKG89dGhpcy54cmVmLmZldGNoSWZSZWYodVtsXSkpLGU9dGhpcy5tYWtlRmlsdGVyKGUsaS5uYW1lLHMsbykscz1udWxsfXJldHVybiBlfX0se2tleToibWFrZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7aWYoMD09PXIpcmV0dXJuKDAsbi53YXJuKSgnRW1wdHkgIicuY29uY2F0KHQsJyIgc3RyZWFtLicpKSxuZXcgcC5OdWxsU3RyZWFtO3ZhciB5PXRoaXMueHJlZi5zdGF0czt0cnl7c3dpdGNoKHQpe2Nhc2UiRmwiOmNhc2UiRmxhdGVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkZMQVRFKSxhP25ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgdS5GbGF0ZVN0cmVhbShlLHIpLHIsYSk6bmV3IHUuRmxhdGVTdHJlYW0oZSxyKTtjYXNlIkxaVyI6Y2FzZSJMWldEZWNvZGUiOnkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuTFpXKTt2YXIgbT0xO3JldHVybiBhPyhhLmhhcygiRWFybHlDaGFuZ2UiKSYmKG09YS5nZXQoIkVhcmx5Q2hhbmdlIikpLG5ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgZC5MWldTdHJlYW0oZSxyLG0pLHIsYSkpOm5ldyBkLkxaV1N0cmVhbShlLHIsbSk7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5EQ1QpLG5ldyBmLkpwZWdTdHJlYW0oZSxyLGEpO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIHkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuSlBYKSxuZXcgaC5KcHhTdHJlYW0oZSxyLGEpO2Nhc2UiQTg1IjpjYXNlIkFTQ0lJODVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkE4NSksbmV3IG8uQXNjaWk4NVN0cmVhbShlLHIpO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5BSFgpLG5ldyBzLkFzY2lpSGV4U3RyZWFtKGUscik7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkNDRiksbmV3IGMuQ0NJVFRGYXhTdHJlYW0oZSxyLGEpO2Nhc2UiUkwiOmNhc2UiUnVuTGVuZ3RoRGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5STFgpLG5ldyB2LlJ1bkxlbmd0aFN0cmVhbShlLHIpO2Nhc2UiSkJJRzJEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkpCSUcpLG5ldyBsLkpiaWcyU3RyZWFtKGUscixhKX1yZXR1cm4oMCxuLndhcm4pKCdGaWx0ZXIgIicuY29uY2F0KHQsJyIgaXMgbm90IHN1cHBvcnRlZC4nKSksZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybigwLG4ud2FybikoJ0ludmFsaWQgc3RyZWFtOiAiJy5jb25jYXQoZSwnIicpKSxuZXcgcC5OdWxsU3RyZWFtfX19XSksZX0oKTt0LlBhcnNlcj1rO3ZhciBTPVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiB4KGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO20odGhpcyxlKSx0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKSx0aGlzLnN0ckJ1Zj1bXSx0aGlzLmtub3duQ29tbWFuZHM9cix0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTAsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPS0xfXJldHVybiB3KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6InBlZWtDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfX0se2tleToiZ2V0TnVtYmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxyPTAsYT0wO2lmKDQ1PT09ZT8oYT0tMSw0NT09PShlPXRoaXMubmV4dENoYXIoKSkmJihlPXRoaXMubmV4dENoYXIoKSkpOjQzPT09ZSYmKGE9MSxlPXRoaXMubmV4dENoYXIoKSksMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSYmKHI9MTAsZT10aGlzLm5leHRDaGFyKCkpLGU8NDh8fGU+NTcpe3ZhciBvPSJJbnZhbGlkIG51bWJlcjogIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiIChjaGFyQ29kZSAiKS5jb25jYXQoZSwiKSIpO2lmKCgwLGkuaXNXaGl0ZVNwYWNlKShlKXx8LTE9PT1lKXJldHVybigwLG4uaW5mbykoJ0xleGVyLmdldE51bWJlciAtICInLmNvbmNhdChvLCciLicpKSwwO3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKG8pfWE9YXx8MTtmb3IodmFyIHM9ZS00OCxjPTAsdT0xOyhlPXRoaXMubmV4dENoYXIoKSk+PTA7KWlmKGU+PTQ4JiZlPD01Nyl7dmFyIGw9ZS00ODt0P2M9MTAqYytsOigwIT09ciYmKHIqPTEwKSxzPTEwKnMrbCl9ZWxzZSBpZig0Nj09PWUpe2lmKDAhPT1yKWJyZWFrO3I9MX1lbHNlIGlmKDQ1PT09ZSkoMCxuLndhcm4pKCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyOiBtaW51cyBzaWduIGluIHRoZSBtaWRkbGUiKTtlbHNle2lmKDY5IT09ZSYmMTAxIT09ZSlicmVhaztpZig0Mz09PShlPXRoaXMucGVla0NoYXIoKSl8fDQ1PT09ZSl1PTQ1PT09ZT8tMToxLHRoaXMubmV4dENoYXIoKTtlbHNlIGlmKGU8NDh8fGU+NTcpYnJlYWs7dD0hMH1yZXR1cm4gMCE9PXImJihzLz1yKSx0JiYocyo9TWF0aC5wb3coMTAsdSpjKSksYSpzfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTEsdD0hMSxyPXRoaXMuc3RyQnVmO3IubGVuZ3RoPTA7Zm9yKHZhciBhPXRoaXMubmV4dENoYXIoKTs7KXt2YXIgaT0hMTtzd2l0Y2goMHxhKXtjYXNlLTE6KDAsbi53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpLHQ9ITA7YnJlYWs7Y2FzZSA0MDorK2Usci5wdXNoKCIoIik7YnJlYWs7Y2FzZSA0MTowPT0tLWU/KHRoaXMubmV4dENoYXIoKSx0PSEwKTpyLnB1c2goIikiKTticmVhaztjYXNlIDkyOnN3aXRjaChhPXRoaXMubmV4dENoYXIoKSl7Y2FzZS0xOigwLG4ud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKSx0PSEwO2JyZWFrO2Nhc2UgMTEwOnIucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDpyLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6ci5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6ci5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOnIucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OnZhciBvPTE1JmE7aT0hMCwoYT10aGlzLm5leHRDaGFyKCkpPj00OCYmYTw9NTUmJihvPShvPDwzKSsoMTUmYSksKGE9dGhpcy5uZXh0Q2hhcigpKT49NDgmJmE8PTU1JiYoaT0hMSxvPShvPDwzKSsoMTUmYSkpKSxyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShvKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9aWYodClicmVhaztpfHwoYT10aGlzLm5leHRDaGFyKCkpfXJldHVybiByLmpvaW4oIiIpfX0se2tleToiZ2V0TmFtZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5zdHJCdWY7Zm9yKHIubGVuZ3RoPTA7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmIVNbZV07KWlmKDM1PT09ZSl7aWYoZT10aGlzLm5leHRDaGFyKCksU1tlXSl7KDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci4iKSxyLnB1c2goIiMiKTticmVha312YXIgaT14KGUpO2lmKC0xIT09aSl7dD1lO3ZhciBvPXgoZT10aGlzLm5leHRDaGFyKCkpO2lmKC0xPT09byl7aWYoKDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiKSAiKSsiaW4gaGV4YWRlY2ltYWwgbnVtYmVyLiIpLHIucHVzaCgiIyIsU3RyaW5nLmZyb21DaGFyQ29kZSh0KSksU1tlXSlicmVhaztyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29udGludWV9ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaTw8NHxvKSl9ZWxzZSByLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWVsc2Ugci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3JldHVybiByLmxlbmd0aD4xMjcmJigwLG4ud2FybikoIk5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogIi5jb25jYXQoci5sZW5ndGgpKSxhLk5hbWUuZ2V0KHIuam9pbigiIikpfX0se2tleToiX2hleFN0cmluZ1dhcm4iLHZhbHVlOmZ1bmN0aW9uKGUpezUhPXRoaXMuX2hleFN0cmluZ051bVdhcm4rKz90aGlzLl9oZXhTdHJpbmdOdW1XYXJuPjV8fCgwLG4ud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyOiAiLmNvbmNhdChlKSk6KDAsbi53YXJuKSgiZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgYWRkaXRpb25hbCBpbnZhbGlkIGNoYXJhY3RlcnMuIil9fSx7a2V5OiJnZXRIZXhTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDt2YXIgdCxyLGE9dGhpcy5jdXJyZW50Q2hhcixpPSEwO2Zvcih0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTA7Oyl7aWYoYTwwKXsoMCxuLndhcm4pKCJVbnRlcm1pbmF0ZWQgaGV4IHN0cmluZyIpO2JyZWFrfWlmKDYyPT09YSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEhPT1TW2FdKXtpZihpKXtpZigtMT09PSh0PXgoYSkpKXt0aGlzLl9oZXhTdHJpbmdXYXJuKGEpLGE9dGhpcy5uZXh0Q2hhcigpO2NvbnRpbnVlfX1lbHNle2lmKC0xPT09KHI9eChhKSkpe3RoaXMuX2hleFN0cmluZ1dhcm4oYSksYT10aGlzLm5leHRDaGFyKCk7Y29udGludWV9ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodDw8NHxyKSl9aT0haSxhPXRoaXMubmV4dENoYXIoKX1lbHNlIGE9dGhpcy5uZXh0Q2hhcigpfXJldHVybiBlLmpvaW4oIiIpfX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKDEhPT1TW3RdKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSA0MDpyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtjYXNlIDQ3OnJldHVybiB0aGlzLmdldE5hbWUoKTtjYXNlIDkxOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJbIik7Y2FzZSA5MzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiXSIpO2Nhc2UgNjA6cmV0dXJuIDYwPT09KHQ9dGhpcy5uZXh0Q2hhcigpKT8odGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiPDwiKSk6dGhpcy5nZXRIZXhTdHJpbmcoKTtjYXNlIDYyOnJldHVybiA2Mj09PSh0PXRoaXMubmV4dENoYXIoKSk/KHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIj4+IikpOmEuQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJ7Iik7Y2FzZSAxMjU6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIn0iKTtjYXNlIDQxOnRocm93IHRoaXMubmV4dENoYXIoKSxuZXcgbi5Gb3JtYXRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXI6ICIuY29uY2F0KHQpKX12YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHQ8MzJ8fHQ+MTI3KXt2YXIgaT10aGlzLnBlZWtDaGFyKCk7aWYoaT49MzImJmk8PTEyNylyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldChyKX1mb3IodmFyIG89dGhpcy5rbm93bkNvbW1hbmRzLHM9byYmdm9pZCAwIT09b1tyXTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYhU1t0XTspe3ZhciBjPXIrU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZihzJiZ2b2lkIDA9PT1vW2NdKWJyZWFrO2lmKDEyOD09PXIubGVuZ3RoKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb21tYW5kIHRva2VuIHRvbyBsb25nOiAiLmNvbmNhdChyLmxlbmd0aCkpO3I9YyxzPW8mJnZvaWQgMCE9PW9bcl19cmV0dXJuInRydWUiPT09cnx8ImZhbHNlIiE9PXImJigibnVsbCI9PT1yP251bGw6KCJCSSI9PT1yJiYodGhpcy5iZWdpbklubGluZUltYWdlUG9zPXRoaXMuc3RyZWFtLnBvcyksYS5DbWQuZ2V0KHIpKSl9fSx7a2V5OiJwZWVrT2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5zdHJlYW0ucG9zLHI9dGhpcy5jdXJyZW50Q2hhcixhPXRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvczt0cnl7ZT10aGlzLmdldE9iaigpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgicGVla09iajogIi5jb25jYXQoZSkpfXJldHVybiB0aGlzLnN0cmVhbS5wb3M9dCx0aGlzLmN1cnJlbnRDaGFyPXIsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPWEsZX19LHtrZXk6InNraXBUb05leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRDaGFyO2U+PTA7KXtpZigxMz09PWUpezEwPT09KGU9dGhpcy5uZXh0Q2hhcigpKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19XSksZX0oKTt0LkxleGVyPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bSh0aGlzLGUpfXJldHVybiB3KGUsbnVsbCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPWUuZ2V0KHQpO2lmKE51bWJlci5pc0ludGVnZXIobikmJihyP24+PTA6bj4wKSlyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiJy5jb25jYXQodCwnIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gJykrImRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX12YXIgcixuLGk9bmV3IGsoe2xleGVyOm5ldyBPKGUpLHhyZWY6bnVsbH0pLG89aS5nZXRPYmooKSxzPWkuZ2V0T2JqKCksYz1pLmdldE9iaigpLHU9aS5nZXRPYmooKTtpZighKE51bWJlci5pc0ludGVnZXIobykmJk51bWJlci5pc0ludGVnZXIocykmJigwLGEuaXNDbWQpKGMsIm9iaiIpJiZ1IGluc3RhbmNlb2YgYS5EaWN0JiYibnVtYmVyIj09dHlwZW9mKHI9dS5nZXQoIkxpbmVhcml6ZWQiKSkmJnI+MCkpcmV0dXJuIG51bGw7aWYoKG49dCh1LCJMIikpIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXMgbm90IGVxdWFsIHRoZSBzdHJlYW0gbGVuZ3RoLicpO3JldHVybntsZW5ndGg6bixoaW50czpmdW5jdGlvbihlKXt2YXIgdCxyPWUuZ2V0KCJIIik7aWYoQXJyYXkuaXNBcnJheShyKSYmKDI9PT0odD1yLmxlbmd0aCl8fDQ9PT10KSl7Zm9yKHZhciBuPTA7bjx0O24rKyl7dmFyIGE9cltuXTtpZighKE51bWJlci5pc0ludGVnZXIoYSkmJmE+MCkpdGhyb3cgbmV3IEVycm9yKCJIaW50ICgiLmNvbmNhdChuLCIpIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKSl9cmV0dXJuIHJ9dGhyb3cgbmV3IEVycm9yKCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX0odSksb2JqZWN0TnVtYmVyRmlyc3Q6dCh1LCJPIiksZW5kRmlyc3Q6dCh1LCJFIiksbnVtUGFnZXM6dCh1LCJOIiksbWFpblhSZWZFbnRyaWVzT2Zmc2V0OnQodSwiVCIpLHBhZ2VGaXJzdDp1LmhhcygiUCIpP3QodSwiUCIsITApOjB9fX1dKSxlfSgpO3QuTGluZWFyaXphdGlvbj1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bc2NpaTg1U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gcz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHMoZSx0KX1mdW5jdGlvbiBjKGUpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxjKGUpfXZhciB1PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KGYsZSk7dmFyIHQscixhLHUsbD0oYT1mLHU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHUpe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGYoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxmKSx0JiYodCo9LjgpLChyPWwuY2FsbCh0aGlzLHQpKS5zdHI9ZSxyLmRpY3Q9ZS5kaWN0LHIuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoNSkscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuc3RyLHQ9ZS5nZXRCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xIT09dCYmMTI2IT09dCl7dmFyIHIsbixhPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDEyMj09PXQpe2ZvcihyPXRoaXMuZW5zdXJlQnVmZmVyKGErNCksbj0wO248NDsrK24pclthK25dPTA7dGhpcy5idWZmZXJMZW5ndGgrPTR9ZWxzZXt2YXIgbz10aGlzLmlucHV0O2ZvcihvWzBdPXQsbj0xO248NTsrK24pe2Zvcih0PWUuZ2V0Qnl0ZSgpOygwLGkuaXNXaGl0ZVNwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtpZihvW25dPXQsLTE9PT10fHwxMjY9PT10KWJyZWFrfWlmKHI9dGhpcy5lbnN1cmVCdWZmZXIoYStuLTEpLHRoaXMuYnVmZmVyTGVuZ3RoKz1uLTEsbjw1KXtmb3IoO248NTsrK24pb1tuXT0xMTc7dGhpcy5lb2Y9ITB9dmFyIHM9MDtmb3Iobj0wO248NTsrK24pcz04NSpzKyhvW25dLTMzKTtmb3Iobj0zO24+PTA7LS1uKXJbYStuXT0yNTUmcyxzPj49OH19ZWxzZSB0aGlzLmVvZj0hMH19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZn0oYS5EZWNvZGVTdHJlYW0pO3QuQXNjaWk4NVN0cmVhbT11fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHJlYW1zU2VxdWVuY2VTdHJlYW09dC5EZWNvZGVTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTM5KTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9bmV3IFVpbnQ4QXJyYXkoMCkseT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO2lmKHUodGhpcyxyKSwobj10LmNhbGwodGhpcykpLl9yYXdNaW5CdWZmZXJMZW5ndGg9ZXx8MCxuLnBvcz0wLG4uYnVmZmVyTGVuZ3RoPTAsbi5lb2Y9ITEsbi5idWZmZXI9dixuLm1pbkJ1ZmZlckxlbmd0aD01MTIsZSlmb3IoO24ubWluQnVmZmVyTGVuZ3RoPGU7KW4ubWluQnVmZmVyTGVuZ3RoKj0yO3JldHVybiBufXJldHVybiBmKHIsW3trZXk6ImlzRW1wdHkiLGdldDpmdW5jdGlvbigpe2Zvcig7IXRoaXMuZW9mJiYwPT09dGhpcy5idWZmZXJMZW5ndGg7KXRoaXMucmVhZEJsb2NrKCk7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlckxlbmd0aH19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgcj10aGlzLm1pbkJ1ZmZlckxlbmd0aDtyPGU7KXIqPTI7dmFyIG49bmV3IFVpbnQ4QXJyYXkocik7cmV0dXJuIG4uc2V0KHQpLHRoaXMuYnVmZmVyPW59fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9dGhpcy5wb3M7aWYoZSl7Zm9yKHRoaXMuZW5zdXJlQnVmZmVyKHIrZSksdD1yK2U7IXRoaXMuZW9mJiZ0aGlzLmJ1ZmZlckxlbmd0aDx0Oyl0aGlzLnJlYWRCbG9jaygpO3ZhciBuPXRoaXMuYnVmZmVyTGVuZ3RoO3Q+biYmKHQ9bil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTt0PXRoaXMuYnVmZmVyTGVuZ3RofXJldHVybiB0aGlzLnBvcz10LHRoaXMuYnVmZmVyLnN1YmFycmF5KHIsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz0wfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZih2b2lkIDA9PT10KWZvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2Vsc2UgZm9yKHZhciBuPWUrdDt0aGlzLmJ1ZmZlckxlbmd0aDw9biYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiBuZXcgaS5TdHJlYW0odGhpcy5idWZmZXIsZSx0LHIpfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6bnVsbH19XSkscn0oYS5CYXNlU3RyZWFtKTt0LkRlY29kZVN0cmVhbT15O3ZhciBtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDt1KHRoaXMscik7dmFyIGkscz0wLGM9byhlKTt0cnl7Zm9yKGMucygpOyEoaT1jLm4oKSkuZG9uZTspe3ZhciBsPWkudmFsdWU7cys9bCBpbnN0YW5jZW9mIHk/bC5fcmF3TWluQnVmZmVyTGVuZ3RoOmwubGVuZ3RofX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm4obj10LmNhbGwodGhpcyxzKSkuc3RyZWFtcz1lLG4uX29uRXJyb3I9YSxufXJldHVybiBmKHIsW3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbXM7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdCxyPWUuc2hpZnQoKTt0cnl7dD1yLmdldEJ5dGVzKCl9Y2F0Y2goZSl7aWYodGhpcy5fb25FcnJvcilyZXR1cm4gdm9pZCB0aGlzLl9vbkVycm9yKGUsci5kaWN0JiZyLmRpY3Qub2JqSWQpO3Rocm93IGV9dmFyIG49dGhpcy5idWZmZXJMZW5ndGgsYT1uK3QubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKGEpLnNldCh0LG4pLHRoaXMuYnVmZmVyTGVuZ3RoPWF9ZWxzZSB0aGlzLmVvZj0hMH19LHtrZXk6ImdldEJhc2VTdHJlYW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj1bXSxuPW8odGhpcy5zdHJlYW1zKTt0cnl7Zm9yKG4ucygpOyEoZT1uLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWUuZ2V0QmFzZVN0cmVhbXMoKTthJiZyLnB1c2guYXBwbHkocixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBjKGUpfSh0PWEpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHQpfHxzKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIubGVuZ3RoPjA/cjpudWxsfX1dKSxyfSh5KTt0LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbT1tfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LG8oZSx0KX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxzKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFzY2lpSGV4U3RyZWFtPXZvaWQgMDt2YXIgYz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShmLGUpO3ZhciB0LHIsYyx1LGw9KGM9Zix1PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9cyhjKTtpZih1KXt2YXIgcj1zKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBmKGUsdCl7dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZiksdCYmKHQqPS41KSwocj1sLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyLmZpcnN0RGlnaXQ9LTEscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZihlLmxlbmd0aCl7dmFyIHQscj1lLmxlbmd0aCsxPj4xLG49dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrciksaT10aGlzLmJ1ZmZlckxlbmd0aCxvPXRoaXMuZmlyc3REaWdpdCxzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxvPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IG99fX19KGUpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZSx1PXZvaWQgMDtpZihjPj00OCYmYzw9NTcpdT0xNSZjO2Vsc2V7aWYoIShjPj02NSYmYzw9NzB8fGM+PTk3JiZjPD0xMDIpKXtpZig2Mj09PWMpe3RoaXMuZW9mPSEwO2JyZWFrfWNvbnRpbnVlfXU9OSsoMTUmYyl9bzwwP289dToobltpKytdPW88PDR8dSxvPS0xKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9bz49MCYmdGhpcy5lb2YmJihuW2krK109bzw8NCxvPS0xKSx0aGlzLmZpcnN0RGlnaXQ9byx0aGlzLmJ1ZmZlckxlbmd0aD1pfWVsc2UgdGhpcy5lb2Y9ITB9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGZ9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuQXNjaWlIZXhTdHJlYW09Y30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTUxKSxpPXIoMTQ4KSxvPXIoMTM0KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9dmFyIGw9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oaCxlKTt2YXIgdCxyLGksbCxmPShpPWgsbD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PXUoaSk7aWYobCl7dmFyIHI9dSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gaChlLHQscil7dmFyIG47IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsaCksKG49Zi5jYWxsKHRoaXMsdCkpLnN0cj1lLG4uZGljdD1lLmRpY3QsciBpbnN0YW5jZW9mIG8uRGljdHx8KHI9by5EaWN0LmVtcHR5KTt2YXIgaT17bmV4dDpmdW5jdGlvbigpe3JldHVybiBlLmdldEJ5dGUoKX19O3JldHVybiBuLmNjaXR0RmF4RGVjb2Rlcj1uZXcgYS5DQ0lUVEZheERlY29kZXIoaSx7SzpyLmdldCgiSyIpLEVuZE9mTGluZTpyLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjpyLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6ci5nZXQoIkNvbHVtbnMiKSxSb3dzOnIuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazpyLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOnIuZ2V0KCJCbGFja0lzMSIpfSksbn1yZXR1cm4gdD1oLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDshdGhpcy5lb2Y7KXt2YXIgZT10aGlzLmNjaXR0RmF4RGVjb2Rlci5yZWFkTmV4dENoYXIoKTtpZigtMT09PWUpcmV0dXJuIHZvaWQodGhpcy5lb2Y9ITApO3RoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoKzEpLHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWV9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxofShpLkRlY29kZVN0cmVhbSk7dC5DQ0lUVEZheFN0cmVhbT1sfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhEZWNvZGVyPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGEoZSl9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBvPS0xLHM9W1stMSwtMV0sWy0xLC0xXSxbNyw4XSxbNyw3XSxbNiw2XSxbNiw2XSxbNiw1XSxbNiw1XSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXV0sYz1bWy0xLC0xXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjU2MF1dLHU9W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzgsMjldLFs4LDI5XSxbOCwzMF0sWzgsMzBdLFs4LDQ1XSxbOCw0NV0sWzgsNDZdLFs4LDQ2XSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjNdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs4LDQ3XSxbOCw0N10sWzgsNDhdLFs4LDQ4XSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbOCwzM10sWzgsMzNdLFs4LDM0XSxbOCwzNF0sWzgsMzVdLFs4LDM1XSxbOCwzNl0sWzgsMzZdLFs4LDM3XSxbOCwzN10sWzgsMzhdLFs4LDM4XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzgsMzFdLFs4LDMxXSxbOCwzMl0sWzgsMzJdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzgsNTNdLFs4LDUzXSxbOCw1NF0sWzgsNTRdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbOCwzOV0sWzgsMzldLFs4LDQwXSxbOCw0MF0sWzgsNDFdLFs4LDQxXSxbOCw0Ml0sWzgsNDJdLFs4LDQzXSxbOCw0M10sWzgsNDRdLFs4LDQ0XSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs4LDYxXSxbOCw2MV0sWzgsNjJdLFs4LDYyXSxbOCw2M10sWzgsNjNdLFs4LDBdLFs4LDBdLFs4LDMyMF0sWzgsMzIwXSxbOCwzODRdLFs4LDM4NF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNywyN10sWzcsMjddLFs3LDI3XSxbNywyN10sWzgsNTldLFs4LDU5XSxbOCw2MF0sWzgsNjBdLFs5LDE0NzJdLFs5LDE1MzZdLFs5LDE2MDBdLFs5LDE3MjhdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzgsNDldLFs4LDQ5XSxbOCw1MF0sWzgsNTBdLFs4LDUxXSxbOCw1MV0sWzgsNTJdLFs4LDUyXSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzgsNTVdLFs4LDU1XSxbOCw1Nl0sWzgsNTZdLFs4LDU3XSxbOCw1N10sWzgsNThdLFs4LDU4XSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzgsNDQ4XSxbOCw0NDhdLFs4LDUxMl0sWzgsNTEyXSxbOSw3MDRdLFs5LDc2OF0sWzgsNjQwXSxbOCw2NDBdLFs4LDU3Nl0sWzgsNTc2XSxbOSw4MzJdLFs5LDg5Nl0sWzksOTYwXSxbOSwxMDI0XSxbOSwxMDg4XSxbOSwxMTUyXSxbOSwxMjE2XSxbOSwxMjgwXSxbOSwxMzQ0XSxbOSwxNDA4XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN11dLGw9W1stMSwtMV0sWy0xLC0xXSxbMTIsLTJdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNDk2XSxbMTIsMjU2MF0sWzEyLDI1NjBdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTIsNTJdLFsxMiw1Ml0sWzEzLDY0MF0sWzEzLDcwNF0sWzEzLDc2OF0sWzEzLDgzMl0sWzEyLDU1XSxbMTIsNTVdLFsxMiw1Nl0sWzEyLDU2XSxbMTMsMTI4MF0sWzEzLDEzNDRdLFsxMywxNDA4XSxbMTMsMTQ3Ml0sWzEyLDU5XSxbMTIsNTldLFsxMiw2MF0sWzEyLDYwXSxbMTMsMTUzNl0sWzEzLDE2MDBdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTMsMTY2NF0sWzEzLDE3MjhdLFsxMiwzMjBdLFsxMiwzMjBdLFsxMiwzODRdLFsxMiwzODRdLFsxMiw0NDhdLFsxMiw0NDhdLFsxMyw1MTJdLFsxMyw1NzZdLFsxMiw1M10sWzEyLDUzXSxbMTIsNTRdLFsxMiw1NF0sWzEzLDg5Nl0sWzEzLDk2MF0sWzEzLDEwMjRdLFsxMywxMDg4XSxbMTMsMTE1Ml0sWzEzLDEyMTZdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XV0sZj1bWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFsxMSwyM10sWzExLDIzXSxbMTIsNTBdLFsxMiw1MV0sWzEyLDQ0XSxbMTIsNDVdLFsxMiw0Nl0sWzEyLDQ3XSxbMTIsNTddLFsxMiw1OF0sWzEyLDYxXSxbMTIsMjU2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEyLDQ4XSxbMTIsNDldLFsxMiw2Ml0sWzEyLDYzXSxbMTIsMzBdLFsxMiwzMV0sWzEyLDMyXSxbMTIsMzNdLFsxMiw0MF0sWzEyLDQxXSxbMTEsMjJdLFsxMSwyMl0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFsxMiwxMjhdLFsxMiwxOTJdLFsxMiwyNl0sWzEyLDI3XSxbMTIsMjhdLFsxMiwyOV0sWzExLDE5XSxbMTEsMTldLFsxMSwyMF0sWzExLDIwXSxbMTIsMzRdLFsxMiwzNV0sWzEyLDM2XSxbMTIsMzddLFsxMiwzOF0sWzEyLDM5XSxbMTEsMjFdLFsxMSwyMV0sWzEyLDQyXSxbMTIsNDNdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdXSxoPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs2LDldLFs2LDhdLFs1LDddLFs1LDddLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdXSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSwhdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQubmV4dCl0aHJvdyBuZXcgRXJyb3IoJ0NDSVRURmF4RGVjb2RlciAtIGludmFsaWQgInNvdXJjZSIgcGFyYW1ldGVyLicpO3RoaXMuc291cmNlPXQsdGhpcy5lb2Y9ITEsdGhpcy5lbmNvZGluZz1yLkt8fDAsdGhpcy5lb2xpbmU9ci5FbmRPZkxpbmV8fCExLHRoaXMuYnl0ZUFsaWduPXIuRW5jb2RlZEJ5dGVBbGlnbnx8ITEsdGhpcy5jb2x1bW5zPXIuQ29sdW1uc3x8MTcyOCx0aGlzLnJvd3M9ci5Sb3dzfHwwO3ZhciBuLGE9ci5FbmRPZkJsb2NrO2ZvcihudWxsPT1hJiYoYT0hMCksdGhpcy5lb2Jsb2NrPWEsdGhpcy5ibGFjaz1yLkJsYWNrSXMxfHwhMSx0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKSx0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKSx0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zLHRoaXMuY29kaW5nUG9zPTAsdGhpcy5yb3c9MCx0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwLHRoaXMuaW5wdXRCaXRzPTAsdGhpcy5pbnB1dEJ1Zj0wLHRoaXMub3V0cHV0Qml0cz0wLHRoaXMucm93c0RvbmU9ITE7MD09PShuPXRoaXMuX2xvb2tCaXRzKDEyKSk7KXRoaXMuX2VhdEJpdHMoMSk7MT09PW4mJnRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJyZWFkTmV4dENoYXIiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5lb2YpcmV0dXJuLTE7dmFyIGUsdCxyLGEsaSxzPXRoaXMucmVmTGluZSxjPXRoaXMuY29kaW5nTGluZSx1PXRoaXMuY29sdW1ucztpZigwPT09dGhpcy5vdXRwdXRCaXRzKXtpZih0aGlzLnJvd3NEb25lJiYodGhpcy5lb2Y9ITApLHRoaXMuZW9mKXJldHVybi0xO3ZhciBsLGYsaDtpZih0aGlzLmVycj0hMSx0aGlzLm5leHRMaW5lMkQpe2ZvcihhPTA7Y1thXTx1OysrYSlzW2FdPWNbYV07Zm9yKHNbYSsrXT11LHNbYV09dSxjWzBdPTAsdGhpcy5jb2RpbmdQb3M9MCxlPTAsdD0wO2NbdGhpcy5jb2RpbmdQb3NdPHU7KXN3aXRjaChsPXRoaXMuX2dldFR3b0RpbUNvZGUoKSl7Y2FzZSAwOnRoaXMuX2FkZFBpeGVscyhzW2UrMV0sdCksc1tlKzFdPHUmJihlKz0yKTticmVhaztjYXNlIDE6aWYobD1mPTAsdCl7ZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZG97Zis9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCl9ZWxzZXtkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tmKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KX1mb3IodGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2wsdCksY1t0aGlzLmNvZGluZ1Bvc108dSYmdGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2YsMV50KTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgNzppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSszLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoKytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA1OmlmKHRoaXMuX2FkZFBpeGVscyhzW2VdKzIsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcigrK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDM6aWYodGhpcy5fYWRkUGl4ZWxzKHNbZV0rMSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgMjppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgODppZih0aGlzLl9hZGRQaXhlbHNOZWcoc1tlXS0zLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoZT4wPy0tZTorK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDY6aWYodGhpcy5fYWRkUGl4ZWxzTmVnKHNbZV0tMix0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKGU+MD8tLWU6KytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA0OmlmKHRoaXMuX2FkZFBpeGVsc05lZyhzW2VdLTEsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcihlPjA/LS1lOisrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2Ugbzp0aGlzLl9hZGRQaXhlbHModSwwKSx0aGlzLmVvZj0hMDticmVhaztkZWZhdWx0OigwLG4uaW5mbykoImJhZCAyZCBjb2RlIiksdGhpcy5fYWRkUGl4ZWxzKHUsMCksdGhpcy5lcnI9ITB9fWVsc2UgZm9yKGNbMF09MCx0aGlzLmNvZGluZ1Bvcz0wLHQ9MDtjW3RoaXMuY29kaW5nUG9zXTx1Oyl7aWYobD0wLHQpZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZWxzZSBkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTt0aGlzLl9hZGRQaXhlbHMoY1t0aGlzLmNvZGluZ1Bvc10rbCx0KSx0Xj0xfXZhciBkPSExO2lmKHRoaXMuYnl0ZUFsaWduJiYodGhpcy5pbnB1dEJpdHMmPS04KSx0aGlzLmVvYmxvY2t8fHRoaXMucm93IT09dGhpcy5yb3dzLTEpe2lmKGw9dGhpcy5fbG9va0JpdHMoMTIpLHRoaXMuZW9saW5lKWZvcig7bCE9PW8mJjEhPT1sOyl0aGlzLl9lYXRCaXRzKDEpLGw9dGhpcy5fbG9va0JpdHMoMTIpO2Vsc2UgZm9yKDswPT09bDspdGhpcy5fZWF0Qml0cygxKSxsPXRoaXMuX2xvb2tCaXRzKDEyKTsxPT09bD8odGhpcy5fZWF0Qml0cygxMiksZD0hMCk6bD09PW8mJih0aGlzLmVvZj0hMCl9ZWxzZSB0aGlzLnJvd3NEb25lPSEwO2lmKCF0aGlzLmVvZiYmdGhpcy5lbmNvZGluZz4wJiYhdGhpcy5yb3dzRG9uZSYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSksdGhpcy5lb2Jsb2NrJiZkJiZ0aGlzLmJ5dGVBbGlnbil7aWYoMT09PShsPXRoaXMuX2xvb2tCaXRzKDEyKSkpe2lmKHRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2xvb2tCaXRzKDEpLHRoaXMuX2VhdEJpdHMoMSkpLHRoaXMuZW5jb2Rpbmc+PTApZm9yKGE9MDthPDQ7KythKTEhPT0obD10aGlzLl9sb29rQml0cygxMikpJiYoMCxuLmluZm8pKCJiYWQgcnRjIGNvZGU6ICIrbCksdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSk7dGhpcy5lb2Y9ITB9fWVsc2UgaWYodGhpcy5lcnImJnRoaXMuZW9saW5lKXtmb3IoOzspe2lmKChsPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiB0aGlzLmVvZj0hMCwtMTtpZihsPj4xPT0xKWJyZWFrO3RoaXMuX2VhdEJpdHMoMSl9dGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fZWF0Qml0cygxKSx0aGlzLm5leHRMaW5lMkQ9ISgxJmwpKX1jWzBdPjA/dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MF06dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MV0sdGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpaT0xJnRoaXMuY29kaW5nUG9zPzA6MjU1LHRoaXMub3V0cHV0Qml0cy09OCwwPT09dGhpcy5vdXRwdXRCaXRzJiZjW3RoaXMuY29kaW5nUG9zXTx1JiYodGhpcy5jb2RpbmdQb3MrKyx0aGlzLm91dHB1dEJpdHM9Y1t0aGlzLmNvZGluZ1Bvc10tY1t0aGlzLmNvZGluZ1Bvcy0xXSk7ZWxzZXtyPTgsaT0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTt0aGlzLm91dHB1dEJpdHM+cj8oaTw8PXIsMSZ0aGlzLmNvZGluZ1Bvc3x8KGl8PTI1NT4+OC1yKSx0aGlzLm91dHB1dEJpdHMtPXIscj0wKTooaTw8PXRoaXMub3V0cHV0Qml0cywxJnRoaXMuY29kaW5nUG9zfHwoaXw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyksci09dGhpcy5vdXRwdXRCaXRzLHRoaXMub3V0cHV0Qml0cz0wLGNbdGhpcy5jb2RpbmdQb3NdPHU/KHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3NdLWNbdGhpcy5jb2RpbmdQb3MtMV0pOnI+MCYmKGk8PD1yLHI9MCkpfXdoaWxlKHIpfXJldHVybiB0aGlzLmJsYWNrJiYoaV49MjU1KSxpfX0se2tleToiX2FkZFBpeGVscyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNvZGluZ0xpbmUsYT10aGlzLmNvZGluZ1BvcztlPnJbYV0mJihlPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWUpLHRoaXMuY29kaW5nUG9zPWF9fSx7a2V5OiJfYWRkUGl4ZWxzTmVnIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY29kaW5nTGluZSxhPXRoaXMuY29kaW5nUG9zO2lmKGU+clthXSllPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWU7ZWxzZSBpZihlPHJbYV0pe2ZvcihlPDAmJigoMCxuLmluZm8pKCJpbnZhbGlkIGNvZGUiKSx0aGlzLmVycj0hMCxlPTApO2E+MCYmZTxyW2EtMV07KS0tYTtyW2FdPWV9dGhpcy5jb2RpbmdQb3M9YX19LHtrZXk6Il9maW5kVGFibGVDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGE9bnx8MCxpPWU7aTw9dDsrK2kpe3ZhciBzPXRoaXMuX2xvb2tCaXRzKGkpO2lmKHM9PT1vKXJldHVyblshMCwxLCExXTtpZihpPHQmJihzPDw9dC1pKSwhYXx8cz49YSl7dmFyIGM9cltzLWFdO2lmKGNbMF09PT1pKXJldHVybiB0aGlzLl9lYXRCaXRzKGkpLFshMCxjWzFdLCEwXX19cmV0dXJuWyExLDAsITFdfX0se2tleToiX2dldFR3b0RpbUNvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7aWYodD10aGlzLl9sb29rQml0cyg3KSwoZT1zW3RdKSYmZVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKGVbMF0pLGVbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDEsNyxzKTtpZihyWzBdJiZyWzJdKXJldHVybiByWzFdfXJldHVybigwLG4uaW5mbykoIkJhZCB0d28gZGltIGNvZGUiKSxvfX0se2tleToiX2dldFdoaXRlQ29kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXtpZigodD10aGlzLl9sb29rQml0cygxMikpPT09bylyZXR1cm4gMTtpZigoZT10Pj41PT0wP2NbdF06dVt0Pj4zXSlbMF0+MClyZXR1cm4gdGhpcy5fZWF0Qml0cyhlWzBdKSxlWzFdfWVsc2V7dmFyIHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxLDksdSk7aWYoclswXSlyZXR1cm4gclsxXTtpZigocj10aGlzLl9maW5kVGFibGVDb2RlKDExLDEyLGMpKVswXSlyZXR1cm4gclsxXX1yZXR1cm4oMCxuLmluZm8pKCJiYWQgd2hpdGUgY29kZSIpLHRoaXMuX2VhdEJpdHMoMSksMX19LHtrZXk6Il9nZXRCbGFja0NvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdDtpZih0aGlzLmVvYmxvY2spe2lmKChlPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiAxO2lmKCh0PWU+Pjc9PTA/bFtlXTplPj45PT0wJiZlPj43IT0wP2ZbKGU+PjEpLTY0XTpoW2U+PjddKVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKHRbMF0pLHRbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDIsNixoKTtpZihyWzBdKXJldHVybiByWzFdO2lmKChyPXRoaXMuX2ZpbmRUYWJsZUNvZGUoNywxMixmLDY0KSlbMF0pcmV0dXJuIHJbMV07aWYoKHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxMCwxMyxsKSlbMF0pcmV0dXJuIHJbMV19cmV0dXJuKDAsbi5pbmZvKSgiYmFkIGJsYWNrIGNvZGUiKSx0aGlzLl9lYXRCaXRzKDEpLDF9fSx7a2V5OiJfbG9va0JpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/bzp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0LHRoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfX0se2tleToiX2VhdEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpeyh0aGlzLmlucHV0Qml0cy09ZSk8MCYmKHRoaXMuaW5wdXRCaXRzPTApfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0NJVFRGYXhEZWNvZGVyPWR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZsYXRlU3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX12YXIgdT1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLGw9bmV3IEludDMyQXJyYXkoWzMsNCw1LDYsNyw4LDksMTAsNjU1NDcsNjU1NDksNjU1NTEsNjU1NTMsMTMxMDkxLDEzMTA5NSwxMzEwOTksMTMxMTAzLDE5NjY0MywxOTY2NTEsMTk2NjU5LDE5NjY2NywyNjIyMTEsMjYyMjI3LDI2MjI0MywyNjIyNTksMzI3ODExLDMyNzg0MywzMjc4NzUsMzI3OTA3LDI1OCwyNTgsMjU4XSksZj1uZXcgSW50MzJBcnJheShbMSwyLDMsNCw2NTU0MSw2NTU0MywxMzEwODEsMTMxMDg1LDE5NjYyNSwxOTY2MzMsMjYyMTc3LDI2MjE5MywzMjc3NDUsMzI3Nzc3LDM5MzM0NSwzOTM0MDksNDU5MDA5LDQ1OTEzNyw1MjQ4MDEsNTI1MDU3LDU5MDg0OSw1OTEzNjEsNjU3NDA5LDY1ODQzMyw3MjQ5OTMsNzI3MDQxLDc5NDYyNSw3OTg3MjEsODY4MzUzLDg3NjU0NV0pLGg9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLGQ9W25ldyBJbnQzMkFycmF5KFszMjc2ODAsMzI3Njk2LDMyNzY4OCwzMjc3MDQsMzI3Njg0LDMyNzcwMCwzMjc2OTIsMzI3NzA4LDMyNzY4MiwzMjc2OTgsMzI3NjkwLDMyNzcwNiwzMjc2ODYsMzI3NzAyLDMyNzY5NCwwLDMyNzY4MSwzMjc2OTcsMzI3Njg5LDMyNzcwNSwzMjc2ODUsMzI3NzAxLDMyNzY5MywzMjc3MDksMzI3NjgzLDMyNzY5OSwzMjc2OTEsMzI3NzA3LDMyNzY4NywzMjc3MDMsMzI3Njk1LDBdKSw1XSxwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KHYsZSk7dmFyIHQscixhLHAsZz0oYT12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHApe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoZSx0KXt2YXIgcjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwocj1nLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdDt2YXIgbj1lLmdldEJ5dGUoKSxhPWUuZ2V0Qnl0ZSgpO2lmKC0xPT09bnx8LTE9PT1hKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtpZig4IT0oMTUmbikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIGluIGZsYXRlIHN0cmVhbTogIi5jb25jYXQobiwiLCAiKS5jb25jYXQoYSkpO2lmKCgobjw8OCkrYSklMzEhPTApdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChuLCIsICIpLmNvbmNhdChhKSk7aWYoMzImYSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiRkRJQ1QgYml0IHNldCBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtyZXR1cm4gci5jb2RlU2l6ZT0wLHIuY29kZUJ1Zj0wLHJ9cmV0dXJuIHQ9diwocj1be2tleToiZ2V0Qml0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5zdHIsbj10aGlzLmNvZGVTaXplLGE9dGhpcy5jb2RlQnVmO248ZTspe2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7YXw9dDw8bixuKz04fXJldHVybiB0PWEmKDE8PGUpLTEsdGhpcy5jb2RlQnVmPWE+PmUsdGhpcy5jb2RlU2l6ZT1uLT1lLHR9fSx7a2V5OiJnZXRDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLnN0cixuPWVbMF0sYT1lWzFdLG89dGhpcy5jb2RlU2l6ZSxzPXRoaXMuY29kZUJ1ZjtvPGEmJi0xIT09KHQ9ci5nZXRCeXRlKCkpOylzfD10PDxvLG8rPTg7dmFyIGM9bltzJigxPDxhKS0xXSx1PWM+PjE2LGw9NjU1MzUmYztpZih1PDF8fG88dSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybiB0aGlzLmNvZGVCdWY9cz4+dSx0aGlzLmNvZGVTaXplPW8tdSxsfX0se2tleToiZ2VuZXJhdGVIdWZmbWFuVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5sZW5ndGgsbj0wO2Zvcih0PTA7dDxyOysrdCllW3RdPm4mJihuPWVbdF0pO2Zvcih2YXIgYT0xPDxuLGk9bmV3IEludDMyQXJyYXkoYSksbz0xLHM9MCxjPTI7bzw9bjsrK28sczw8PTEsYzw8PTEpZm9yKHZhciB1PTA7dTxyOysrdSlpZihlW3VdPT09byl7dmFyIGw9MCxmPXM7Zm9yKHQ9MDt0PG87Kyt0KWw9bDw8MXwxJmYsZj4+PTE7Zm9yKHQ9bDt0PGE7dCs9YylpW3RdPW88PDE2fHU7KytzfXJldHVybltpLG5dfX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLnN0cixuPXRoaXMuZ2V0Qml0cygzKTtpZigxJm4mJih0aGlzLmVvZj0hMCksMCE9KG4+Pj0xKSl7dmFyIGEsbztpZigxPT09bilhPWgsbz1kO2Vsc2V7aWYoMiE9PW4pdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gYmxvY2sgdHlwZSBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgcyxjPXRoaXMuZ2V0Qml0cyg1KSsyNTcscD10aGlzLmdldEJpdHMoNSkrMSxnPXRoaXMuZ2V0Qml0cyg0KSs0LHY9bmV3IFVpbnQ4QXJyYXkodS5sZW5ndGgpO2ZvcihzPTA7czxnOysrcyl2W3Vbc11dPXRoaXMuZ2V0Qml0cygzKTt2YXIgeT10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHYpO3Q9MCxzPTA7Zm9yKHZhciBtLGIsdyxrPWMrcCxTPW5ldyBVaW50OEFycmF5KGspO3M8azspe3ZhciB4PXRoaXMuZ2V0Q29kZSh5KTtpZigxNj09PXgpbT0yLGI9Myx3PXQ7ZWxzZSBpZigxNz09PXgpbT0zLGI9Myx3PXQ9MDtlbHNle2lmKDE4IT09eCl7U1tzKytdPXQ9eDtjb250aW51ZX1tPTcsYj0xMSx3PXQ9MH1mb3IodmFyIE89dGhpcy5nZXRCaXRzKG0pK2I7Ty0tID4wOylTW3MrK109d31hPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheSgwLGMpKSxvPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheShjLGspKX1mb3IodmFyIEE9KGU9dGhpcy5idWZmZXIpP2UubGVuZ3RoOjAsQz10aGlzLmJ1ZmZlckxlbmd0aDs7KXt2YXIgRj10aGlzLmdldENvZGUoYSk7aWYoRjwyNTYpQysxPj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDKzEpKS5sZW5ndGgpLGVbQysrXT1GO2Vsc2V7aWYoMjU2PT09RilyZXR1cm4gdm9pZCh0aGlzLmJ1ZmZlckxlbmd0aD1DKTt2YXIgUD0oRj1sW0YtPTI1N10pPj4xNjtQPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSksdD0oNjU1MzUmRikrUCxGPXRoaXMuZ2V0Q29kZShvKSwoUD0oRj1mW0ZdKT4+MTYpPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSk7dmFyIFQ9KDY1NTM1JkYpK1A7Qyt0Pj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDK3QpKS5sZW5ndGgpO2Zvcih2YXIgST0wO0k8dDsrK0ksKytDKWVbQ109ZVtDLVRdfX19ZWxzZXt2YXIgRTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgaj1FO2lmKC0xPT09KEU9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2lmKGp8PUU8PDgsLTE9PT0oRT1yLmdldEJ5dGUoKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7dmFyIE09RTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtpZigoTXw9RTw8OCkhPSg2NTUzNSZ+aikmJigwIT09anx8MCE9PU0pKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW0iKTt0aGlzLmNvZGVCdWY9MCx0aGlzLmNvZGVTaXplPTA7dmFyIF89dGhpcy5idWZmZXJMZW5ndGgsTD1fK2o7aWYoZT10aGlzLmVuc3VyZUJ1ZmZlcihMKSx0aGlzLmJ1ZmZlckxlbmd0aD1MLDA9PT1qKS0xPT09ci5wZWVrQnl0ZSgpJiYodGhpcy5lb2Y9ITApO2Vsc2V7dmFyIFI9ci5nZXRCeXRlcyhqKTtlLnNldChSLF8pLFIubGVuZ3RoPGomJih0aGlzLmVvZj0hMCl9fX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdn0oYS5EZWNvZGVTdHJlYW0pO3QuRmxhdGVTdHJlYW09cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTQ4KSxvPXIoMTM0KSxzPXIoMTU0KSxjPXIoMik7ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGwoZSx0KX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxmKGUpfXZhciBoPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9KHAsZSk7dmFyIHQscixpLGgsZD0oaT1wLGg9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1mKGkpO2lmKGgpe3ZhciByPWYodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHAoZSx0LHIpe3ZhciBuO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHApLChuPWQuY2FsbCh0aGlzLHQpKS5zdHJlYW09ZSxuLmRpY3Q9ZS5kaWN0LG4ubWF5YmVMZW5ndGg9dCxuLnBhcmFtcz1yLG59cmV0dXJuIHQ9cCwocj1be2tleToiYnl0ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGMuc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfX0se2tleToiZW5zdXJlQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT1uZXcgcy5KYmlnMkltYWdlLHQ9W107aWYodGhpcy5wYXJhbXMgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYociBpbnN0YW5jZW9mIGEuQmFzZVN0cmVhbSl7dmFyIG49ci5nZXRCeXRlcygpO3QucHVzaCh7ZGF0YTpuLHN0YXJ0OjAsZW5kOm4ubGVuZ3RofSl9fXQucHVzaCh7ZGF0YTp0aGlzLmJ5dGVzLHN0YXJ0OjAsZW5kOnRoaXMuYnl0ZXMubGVuZ3RofSk7Zm9yKHZhciBpPWUucGFyc2VDaHVua3ModCksYz1pLmxlbmd0aCx1PTA7dTxjO3UrKylpW3VdXj0yNTU7dGhpcy5idWZmZXI9aSx0aGlzLmJ1ZmZlckxlbmd0aD1jLHRoaXMuZW9mPSEwfX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscH0oaS5EZWNvZGVTdHJlYW0pO3QuSmJpZzJTdHJlYW09aH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJJbWFnZT12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTU1KSxzPXIoMTUxKTtmdW5jdGlvbiBjKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBmKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1sKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBsKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZyhlLHQpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHYoZSl9dmFyIHk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmcoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9dih0KTtpZihyKXt2YXIgaT12KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBwKHRoaXMsaSksYS5jYWxsKHRoaXMsIkpCSUcyIGVycm9yOiAiLmNvbmNhdChlKSwiSmJpZzJFcnJvciIpfXJldHVybiBkKGkpfShhLkJhc2VFeGNlcHRpb24pLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cCh0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImdldENvbnRleHRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7cCh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuc3RhcnQ9cix0aGlzLmVuZD1ufXJldHVybiBkKGUsW3trZXk6ImRlY29kZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZGVjb2RlciIsZSl9fSx7a2V5OiJjb250ZXh0Q2FjaGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBtO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLGUpfX1dKSxlfSgpO2Z1bmN0aW9uIHcoZSx0LHIpe3ZhciBuPWUuZ2V0Q29udGV4dHModCksYT0xO2Z1bmN0aW9uIGkoZSl7Zm9yKHZhciB0PTAsaT0wO2k8ZTtpKyspe3ZhciBvPXIucmVhZEJpdChuLGEpO2E9YTwyNTY/YTw8MXxvOjUxMSYoYTw8MXxvKXwyNTYsdD10PDwxfG99cmV0dXJuIHQ+Pj4wfXZhciBvPWkoMSkscz1pKDEpP2koMSk/aSgxKT9pKDEpP2koMSk/aSgzMikrNDQzNjppKDEyKSszNDA6aSg4KSs4NDppKDYpKzIwOmkoNCkrNDppKDIpO3JldHVybiAwPT09bz9zOnM+MD8tczpudWxsfWZ1bmN0aW9uIGsoZSx0LHIpe2Zvcih2YXIgbj1lLmdldENvbnRleHRzKCJJQUlEIiksYT0xLGk9MDtpPHI7aSsrKWE9YTw8MXx0LnJlYWRCaXQobixhKTtyZXR1cm4gcjwzMT9hJigxPDxyKS0xOjIxNDc0ODM2NDcmYX12YXIgUz1bIlN5bWJvbERpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uIixudWxsLCJJbW1lZGlhdGVUZXh0UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIlBhdHRlcm5EaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb24iLG51bGwsIkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLCJQYWdlSW5mb3JtYXRpb24iLCJFbmRPZlBhZ2UiLCJFbmRPZlN0cmlwZSIsIkVuZE9mRmlsZSIsIlByb2ZpbGVzIiwiVGFibGVzIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkV4dGVuc2lvbiJdLHg9W1t7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMyx5Oi0xfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV1dLE89W3tjb2Rpbmc6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6LTEseToxfSx7eDowLHk6MX0se3g6MSx5OjF9XX0se2NvZGluZzpbe3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6MCx5OjF9LHt4OjEseToxfV19XSxBPVszOTcxNywxOTQxLDIyOSw0MDVdLEM9WzMyLDhdO2Z1bmN0aW9uIEYoZSx0LHIsbixhLGksbyxzKXtpZihlKXJldHVybiBHKG5ldyBYKHMuZGF0YSxzLnN0YXJ0LHMuZW5kKSx0LHIsITEpO2lmKDA9PT1uJiYhaSYmIWEmJjQ9PT1vLmxlbmd0aCYmMz09PW9bMF0ueCYmLTE9PT1vWzBdLnkmJi0zPT09b1sxXS54JiYtMT09PW9bMV0ueSYmMj09PW9bMl0ueCYmLTI9PT1vWzJdLnkmJi0yPT09b1szXS54JiYtMj09PW9bM10ueSlyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLHMsYyx1LGw9ci5kZWNvZGVyLGY9ci5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIiksaD1bXTtmb3IoYT0wO2E8dDthKyspZm9yKHM9aFthXT1uZXcgVWludDhBcnJheShlKSxjPWE8MT9zOmhbYS0xXSxuPSh1PWE8Mj9zOmhbYS0yXSlbMF08PDEzfHVbMV08PDEyfHVbMl08PDExfGNbMF08PDd8Y1sxXTw8NnxjWzJdPDw1fGNbM108PDQsaT0wO2k8ZTtpKyspc1tpXT1vPWwucmVhZEJpdChmLG4pLG49KDMxNzM1Jm4pPDwxfChpKzM8ZT91W2krM108PDExOjApfChpKzQ8ZT9jW2krNF08PDQ6MCl8bztyZXR1cm4gaH0odCxyLHMpO3ZhciBjPSEhaSx1PXhbbl0uY29uY2F0KG8pO3Uuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH0pKTt2YXIgbCxmLGg9dS5sZW5ndGgsZD1uZXcgSW50OEFycmF5KGgpLHA9bmV3IEludDhBcnJheShoKSxnPVtdLHY9MCx5PTAsbT0wLGI9MDtmb3IoZj0wO2Y8aDtmKyspZFtmXT11W2ZdLngscFtmXT11W2ZdLnkseT1NYXRoLm1pbih5LHVbZl0ueCksbT1NYXRoLm1heChtLHVbZl0ueCksYj1NYXRoLm1pbihiLHVbZl0ueSksZjxoLTEmJnVbZl0ueT09PXVbZisxXS55JiZ1W2ZdLng9PT11W2YrMV0ueC0xP3Z8PTE8PGgtMS1mOmcucHVzaChmKTt2YXIgdz1nLmxlbmd0aCxrPW5ldyBJbnQ4QXJyYXkodyksUz1uZXcgSW50OEFycmF5KHcpLE89bmV3IFVpbnQxNkFycmF5KHcpO2ZvcihsPTA7bDx3O2wrKylmPWdbbF0sa1tsXT11W2ZdLngsU1tsXT11W2ZdLnksT1tsXT0xPDxoLTEtZjtmb3IodmFyIEMsRixQLFQsSSxFPS15LGo9LWIsTT10LW0sXz1BW25dLEw9bmV3IFVpbnQ4QXJyYXkodCksUj1bXSxOPXMuZGVjb2RlcixEPXMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpLEI9MCxVPTAsJD0wOyQ8cjskKyspaWYoYSYmKEJePU4ucmVhZEJpdChELF8pKSlSLnB1c2goTCk7ZWxzZSBmb3IoTD1uZXcgVWludDhBcnJheShMKSxSLnB1c2goTCksQz0wO0M8dDtDKyspaWYoYyYmaVskXVtDXSlMW0NdPTA7ZWxzZXtpZihDPj1FJiZDPE0mJiQ+PWopZm9yKFU9VTw8MSZ2LGY9MDtmPHc7ZisrKUY9JCtTW2ZdLFA9QytrW2ZdLChUPVJbRl1bUF0pJiYoVXw9VD1PW2ZdKTtlbHNlIGZvcihVPTAsST1oLTEsZj0wO2Y8aDtmKyssSS0tKShQPUMrZFtmXSk+PTAmJlA8dCYmKEY9JCtwW2ZdKT49MCYmKFQ9UltGXVtQXSkmJihVfD1UPDxJKTt2YXIgSD1OLnJlYWRCaXQoRCxVKTtMW0NdPUh9cmV0dXJuIFJ9ZnVuY3Rpb24gUChlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9T1tyXS5jb2Rpbmc7MD09PXImJih1PXUuY29uY2F0KFtzWzBdXSkpO3ZhciBsLGY9dS5sZW5ndGgsaD1uZXcgSW50MzJBcnJheShmKSxkPW5ldyBJbnQzMkFycmF5KGYpO2ZvcihsPTA7bDxmO2wrKyloW2xdPXVbbF0ueCxkW2xdPXVbbF0ueTt2YXIgcD1PW3JdLnJlZmVyZW5jZTswPT09ciYmKHA9cC5jb25jYXQoW3NbMV1dKSk7dmFyIGc9cC5sZW5ndGgsdj1uZXcgSW50MzJBcnJheShnKSxtPW5ldyBJbnQzMkFycmF5KGcpO2ZvcihsPTA7bDxnO2wrKyl2W2xdPXBbbF0ueCxtW2xdPXBbbF0ueTtmb3IodmFyIGI9blswXS5sZW5ndGgsdz1uLmxlbmd0aCxrPUNbcl0sUz1bXSx4PWMuZGVjb2RlcixBPWMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpLEY9MCxQPTA7UDx0O1ArKyl7aWYobyYmKEZePXgucmVhZEJpdChBLGspKSl0aHJvdyBuZXcgeSgicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkIik7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoZSk7Uy5wdXNoKFQpO2Zvcih2YXIgST0wO0k8ZTtJKyspe3ZhciBFPXZvaWQgMCxqPXZvaWQgMCxNPTA7Zm9yKGw9MDtsPGY7bCsrKUU9UCtkW2xdLGo9SStoW2xdLEU8MHx8ajwwfHxqPj1lP008PD0xOk09TTw8MXxTW0VdW2pdO2ZvcihsPTA7bDxnO2wrKylFPVArbVtsXS1pLGo9SSt2W2xdLWEsRTwwfHxFPj13fHxqPDB8fGo+PWI/TTw8PTE6TT1NPDwxfG5bRV1bal07dmFyIF89eC5yZWFkQml0KEEsTSk7VFtJXT1ffX1yZXR1cm4gU31mdW5jdGlvbiBUKGUsdCxyLG4sYSxpLG8scyxjLHUsbCxmLGgsZCxwLGcsdixtLGIpe2lmKGUmJnQpdGhyb3cgbmV3IHkoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTt2YXIgUyx4LE89W107Zm9yKFM9MDtTPG47UysrKXtpZih4PW5ldyBVaW50OEFycmF5KHIpLGEpZm9yKHZhciBBPTA7QTxyO0ErKyl4W0FdPWE7Ty5wdXNoKHgpfXZhciBDPXYuZGVjb2RlcixGPXYuY29udGV4dENhY2hlLFQ9ZT8tZC50YWJsZURlbHRhVC5kZWNvZGUoYik6LXcoRiwiSUFEVCIsQyksST0wO2ZvcihTPTA7UzxpOyl7VCs9ZT9kLnRhYmxlRGVsdGFULmRlY29kZShiKTp3KEYsIklBRFQiLEMpO2Zvcih2YXIgRT1JKz1lP2QudGFibGVGaXJzdFMuZGVjb2RlKGIpOncoRiwiSUFGUyIsQyk7Oyl7dmFyIGo9MDtvPjEmJihqPWU/Yi5yZWFkQml0cyhtKTp3KEYsIklBSVQiLEMpKTt2YXIgTT1vKlQraixfPWU/ZC5zeW1ib2xJRFRhYmxlLmRlY29kZShiKTprKEYsQyxjKSxMPXQmJihlP2IucmVhZEJpdCgpOncoRiwiSUFSSSIsQykpLFI9c1tfXSxOPVJbMF0ubGVuZ3RoLEQ9Ui5sZW5ndGg7aWYoTCl7dmFyIEI9dyhGLCJJQVJEVyIsQyksVT13KEYsIklBUkRIIixDKTtSPVAoTis9QixEKz1VLHAsUiwoQj4+MSkrdyhGLCJJQVJEWCIsQyksKFU+PjEpK3coRiwiSUFSRFkiLEMpLCExLGcsdil9dmFyICQ9TS0oMSZmPzA6RC0xKSxYPUUtKDImZj9OLTE6MCksSD12b2lkIDAscT12b2lkIDAsRz12b2lkIDA7aWYodSl7Zm9yKEg9MDtIPEQ7SCsrKWlmKHg9T1tYK0hdKXtHPVJbSF07dmFyIHo9TWF0aC5taW4oci0kLE4pO3N3aXRjaChoKXtjYXNlIDA6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXXw9R1txXTticmVhaztjYXNlIDI6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXV49R1txXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJvcGVyYXRvciAiLmNvbmNhdChoLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19RSs9RC0xfWVsc2V7Zm9yKHE9MDtxPEQ7cSsrKWlmKHg9T1skK3FdKXN3aXRjaChHPVJbcV0saCl7Y2FzZSAwOmZvcihIPTA7SDxOO0grKyl4W1grSF18PUdbSF07YnJlYWs7Y2FzZSAyOmZvcihIPTA7SDxOO0grKyl4W1grSF1ePUdbSF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQoaCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9RSs9Ti0xfVMrKzt2YXIgVz1lP2QudGFibGVEZWx0YVMuZGVjb2RlKGIpOncoRiwiSUFEUyIsQyk7aWYobnVsbD09PVcpYnJlYWs7RSs9VytsfX1yZXR1cm4gT31mdW5jdGlvbiBJKGUsdCl7dmFyIHI9e307ci5udW1iZXI9KDAsaS5yZWFkVWludDMyKShlLHQpO3ZhciBuPWVbdCs0XSxhPTYzJm47aWYoIVNbYV0pdGhyb3cgbmV3IHkoImludmFsaWQgc2VnbWVudCB0eXBlOiAiK2EpO3IudHlwZT1hLHIudHlwZU5hbWU9U1thXSxyLmRlZmVycmVkTm9uUmV0YWluPSEhKDEyOCZuKTt2YXIgbz0hISg2NCZuKSxzPWVbdCs1XSxjPXM+PjUmNyx1PVszMSZzXSxsPXQrNjtpZig3PT09cyl7Yz01MzY4NzA5MTEmKDAsaS5yZWFkVWludDMyKShlLGwtMSksbCs9Mzt2YXIgZj1jKzc+PjM7Zm9yKHVbMF09ZVtsKytdOy0tZj4wOyl1LnB1c2goZVtsKytdKX1lbHNlIGlmKDU9PT1zfHw2PT09cyl0aHJvdyBuZXcgeSgiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO3IucmV0YWluQml0cz11O3ZhciBoPTQ7ci5udW1iZXI8PTI1Nj9oPTE6ci5udW1iZXI8PTY1NTM2JiYoaD0yKTt2YXIgZCxwLGc9W107Zm9yKGQ9MDtkPGM7ZCsrKXt2YXIgdjt2PTE9PT1oP2VbbF06Mj09PWg/KDAsaS5yZWFkVWludDE2KShlLGwpOigwLGkucmVhZFVpbnQzMikoZSxsKSxnLnB1c2godiksbCs9aH1pZihyLnJlZmVycmVkVG89ZyxvPyhyLnBhZ2VBc3NvY2lhdGlvbj0oMCxpLnJlYWRVaW50MzIpKGUsbCksbCs9NCk6ci5wYWdlQXNzb2NpYXRpb249ZVtsKytdLHIubGVuZ3RoPSgwLGkucmVhZFVpbnQzMikoZSxsKSxsKz00LDQyOTQ5NjcyOTU9PT1yLmxlbmd0aCl7aWYoMzghPT1hKXRocm93IG5ldyB5KCJpbnZhbGlkIHVua25vd24gc2VnbWVudCBsZW5ndGgiKTt2YXIgbT1qKGUsbCksYj0hISgxJmVbbCtNXSksdz1uZXcgVWludDhBcnJheSg2KTtmb3IoYnx8KHdbMF09MjU1LHdbMV09MTcyKSx3WzJdPW0uaGVpZ2h0Pj4+MjQmMjU1LHdbM109bS5oZWlnaHQ+PjE2JjI1NSx3WzRdPW0uaGVpZ2h0Pj44JjI1NSx3WzVdPTI1NSZtLmhlaWdodCxkPWwscD1lLmxlbmd0aDtkPHA7ZCsrKXtmb3IodmFyIGs9MDtrPDYmJndba109PT1lW2Qra107KWsrKztpZig2PT09ayl7ci5sZW5ndGg9ZCs2O2JyZWFrfX1pZig0Mjk0OTY3Mjk1PT09ci5sZW5ndGgpdGhyb3cgbmV3IHkoInNlZ21lbnQgZW5kIHdhcyBub3QgZm91bmQiKX1yZXR1cm4gci5oZWFkZXJFbmQ9bCxyfWZ1bmN0aW9uIEUoZSx0LHIsbil7Zm9yKHZhciBhPVtdLGk9cjtpPG47KXt2YXIgbz1JKHQsaSk7aT1vLmhlYWRlckVuZDt2YXIgcz17aGVhZGVyOm8sZGF0YTp0fTtpZihlLnJhbmRvbUFjY2Vzc3x8KHMuc3RhcnQ9aSxpKz1vLmxlbmd0aCxzLmVuZD1pKSxhLnB1c2gocyksNTE9PT1vLnR5cGUpYnJlYWt9aWYoZS5yYW5kb21BY2Nlc3MpZm9yKHZhciBjPTAsdT1hLmxlbmd0aDtjPHU7YysrKWFbY10uc3RhcnQ9aSxpKz1hW2NdLmhlYWRlci5sZW5ndGgsYVtjXS5lbmQ9aTtyZXR1cm4gYX1mdW5jdGlvbiBqKGUsdCl7cmV0dXJue3dpZHRoOigwLGkucmVhZFVpbnQzMikoZSx0KSxoZWlnaHQ6KDAsaS5yZWFkVWludDMyKShlLHQrNCkseDooMCxpLnJlYWRVaW50MzIpKGUsdCs4KSx5OigwLGkucmVhZFVpbnQzMikoZSx0KzEyKSxjb21iaW5hdGlvbk9wZXJhdG9yOjcmZVt0KzE2XX19dmFyIE09MTc7ZnVuY3Rpb24gXyhlLHQpe3ZhciByLG4sYSxvLHM9ZS5oZWFkZXIsYz1lLmRhdGEsdT1lLmVuZCxsPWUuc3RhcnQ7c3dpdGNoKHMudHlwZSl7Y2FzZSAwOnZhciBmPXt9LGg9KDAsaS5yZWFkVWludDE2KShjLGwpO2lmKGYuaHVmZm1hbj0hISgxJmgpLGYucmVmaW5lbWVudD0hISgyJmgpLGYuaHVmZm1hbkRIU2VsZWN0b3I9aD4+MiYzLGYuaHVmZm1hbkRXU2VsZWN0b3I9aD4+NCYzLGYuYml0bWFwU2l6ZVNlbGVjdG9yPWg+PjYmMSxmLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9aD4+NyYxLGYuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JmgpLGYuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZoKSxmLnRlbXBsYXRlPWg+PjEwJjMsZi5yZWZpbmVtZW50VGVtcGxhdGU9aD4+MTImMSxsKz0yLCFmLmh1ZmZtYW4pe2ZvcihvPTA9PT1mLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLmF0PW59aWYoZi5yZWZpbmVtZW50JiYhZi5yZWZpbmVtZW50VGVtcGxhdGUpe2ZvcihuPVtdLGE9MDthPDI7YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLnJlZmluZW1lbnRBdD1ufWYubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsZi5udW1iZXJPZk5ld1N5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bZixzLm51bWJlcixzLnJlZmVycmVkVG8sYyxsLHVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dmFyIGQ9e307ZC5pbmZvPWooYyxsKSxsKz1NO3ZhciBwPSgwLGkucmVhZFVpbnQxNikoYyxsKTtpZihsKz0yLGQuaHVmZm1hbj0hISgxJnApLGQucmVmaW5lbWVudD0hISgyJnApLGQubG9nU3RyaXBTaXplPXA+PjImMyxkLnN0cmlwU2l6ZT0xPDxkLmxvZ1N0cmlwU2l6ZSxkLnJlZmVyZW5jZUNvcm5lcj1wPj40JjMsZC50cmFuc3Bvc2VkPSEhKDY0JnApLGQuY29tYmluYXRpb25PcGVyYXRvcj1wPj43JjMsZC5kZWZhdWx0UGl4ZWxWYWx1ZT1wPj45JjEsZC5kc09mZnNldD1wPDwxNz4+MjcsZC5yZWZpbmVtZW50VGVtcGxhdGU9cD4+MTUmMSxkLmh1ZmZtYW4pe3ZhciBnPSgwLGkucmVhZFVpbnQxNikoYyxsKTtsKz0yLGQuaHVmZm1hbkZTPTMmZyxkLmh1ZmZtYW5EUz1nPj4yJjMsZC5odWZmbWFuRFQ9Zz4+NCYzLGQuaHVmZm1hblJlZmluZW1lbnREVz1nPj42JjMsZC5odWZmbWFuUmVmaW5lbWVudERIPWc+PjgmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFg9Zz4+MTAmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFk9Zz4+MTImMyxkLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmcpfWlmKGQucmVmaW5lbWVudCYmIWQucmVmaW5lbWVudFRlbXBsYXRlKXtmb3Iobj1bXSxhPTA7YTwyO2ErKyluLnB1c2goe3g6KDAsaS5yZWFkSW50OCkoYyxsKSx5OigwLGkucmVhZEludDgpKGMsbCsxKX0pLGwrPTI7ZC5yZWZpbmVtZW50QXQ9bn1kLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LHI9W2Qscy5yZWZlcnJlZFRvLGMsbCx1XTticmVhaztjYXNlIDE2OnZhciB2PXt9LG09Y1tsKytdO3YubW1yPSEhKDEmbSksdi50ZW1wbGF0ZT1tPj4xJjMsdi5wYXR0ZXJuV2lkdGg9Y1tsKytdLHYucGF0dGVybkhlaWdodD1jW2wrK10sdi5tYXhQYXR0ZXJuSW5kZXg9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bdixzLm51bWJlcixjLGwsdV07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnZhciBiPXt9O2IuaW5mbz1qKGMsbCksbCs9TTt2YXIgdz1jW2wrK107Yi5tbXI9ISEoMSZ3KSxiLnRlbXBsYXRlPXc+PjEmMyxiLmVuYWJsZVNraXA9ISEoOCZ3KSxiLmNvbWJpbmF0aW9uT3BlcmF0b3I9dz4+NCY3LGIuZGVmYXVsdFBpeGVsVmFsdWU9dz4+NyYxLGIuZ3JpZFdpZHRoPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZEhlaWdodD0oMCxpLnJlYWRVaW50MzIpKGMsbCksbCs9NCxiLmdyaWRPZmZzZXRYPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsYi5ncmlkT2Zmc2V0WT00Mjk0OTY3Mjk1JigwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZFZlY3Rvclg9KDAsaS5yZWFkVWludDE2KShjLGwpLGwrPTIsYi5ncmlkVmVjdG9yWT0oMCxpLnJlYWRVaW50MTYpKGMsbCksbCs9MixyPVtiLHMucmVmZXJyZWRUbyxjLGwsdV07YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnZhciBrPXt9O2suaW5mbz1qKGMsbCksbCs9TTt2YXIgUz1jW2wrK107aWYoay5tbXI9ISEoMSZTKSxrLnRlbXBsYXRlPVM+PjEmMyxrLnByZWRpY3Rpb249ISEoOCZTKSwhay5tbXIpe2ZvcihvPTA9PT1rLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtrLmF0PW59cj1bayxjLGwsdV07YnJlYWs7Y2FzZSA0ODp2YXIgeD17d2lkdGg6KDAsaS5yZWFkVWludDMyKShjLGwpLGhlaWdodDooMCxpLnJlYWRVaW50MzIpKGMsbCs0KSxyZXNvbHV0aW9uWDooMCxpLnJlYWRVaW50MzIpKGMsbCs4KSxyZXNvbHV0aW9uWTooMCxpLnJlYWRVaW50MzIpKGMsbCsxMil9OzQyOTQ5NjcyOTU9PT14LmhlaWdodCYmZGVsZXRlIHguaGVpZ2h0O3ZhciBPPWNbbCsxNl07KDAsaS5yZWFkVWludDE2KShjLGwrMTcpLHgubG9zc2xlc3M9ISEoMSZPKSx4LnJlZmluZW1lbnQ9ISEoMiZPKSx4LmRlZmF1bHRQaXhlbFZhbHVlPU8+PjImMSx4LmNvbWJpbmF0aW9uT3BlcmF0b3I9Tz4+MyYzLHgucmVxdWlyZXNCdWZmZXI9ISEoMzImTykseC5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU9ISEoNjQmTykscj1beF07YnJlYWs7Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA2MjpicmVhaztjYXNlIDUzOnI9W3MubnVtYmVyLGMsbCx1XTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJzZWdtZW50IHR5cGUgIi5jb25jYXQocy50eXBlTmFtZSwiKCIpLmNvbmNhdChzLnR5cGUsIikgaXMgbm90IGltcGxlbWVudGVkIikpfXZhciBBPSJvbiIrcy50eXBlTmFtZTtBIGluIHQmJnRbQV0uYXBwbHkodCxyKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKV8oZVtyXSx0KX12YXIgUj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToib25QYWdlSW5mb3JtYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7dmFyIHQ9ZS53aWR0aCs3Pj4zLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2UuZGVmYXVsdFBpeGVsVmFsdWUmJnIuZmlsbCgyNTUpLHRoaXMuYnVmZmVyPXJ9fSx7a2V5OiJkcmF3Qml0bWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpLG89dGhpcy5jdXJyZW50UGFnZUluZm8scz1lLndpZHRoLGM9ZS5oZWlnaHQsdT1vLndpZHRoKzc+PjMsbD1vLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT9lLmNvbWJpbmF0aW9uT3BlcmF0b3I6by5jb21iaW5hdGlvbk9wZXJhdG9yLGY9dGhpcy5idWZmZXIsaD0xMjg+Pig3JmUueCksZD1lLnkqdSsoZS54Pj4zKTtzd2l0Y2gobCl7Y2FzZSAwOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV18PWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7Y2FzZSAyOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV1ePWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQobCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9fX0se2tleToib25JbW1lZGlhdGVHZW5lcmljUmVnaW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1lLmluZm8saT1uZXcgYih0LHIsbiksbz1GKGUubW1yLGEud2lkdGgsYS5oZWlnaHQsZS50ZW1wbGF0ZSxlLnByZWRpY3Rpb24sbnVsbCxlLmF0LGkpO3RoaXMuZHJhd0JpdG1hcChhLG8pfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25TeW1ib2xEaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsbyl7dmFyIHMsbDtlLmh1ZmZtYW4mJihzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbz0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOm49JChlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpuPUgobyx0LHIpLG8rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTphPSQoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6YT1IKG8sdCxyKSxvKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yIil9cmV0dXJuIGUuYml0bWFwU2l6ZVNlbGVjdG9yPyhpPUgobyx0LHIpLG8rKyk6aT0kKDEpLHt0YWJsZURlbHRhSGVpZ2h0Om4sdGFibGVEZWx0YVdpZHRoOmEsdGFibGVCaXRtYXBTaXplOmksdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXM6ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP0gobyx0LHIpOiQoMSl9fShlLHIsdGhpcy5jdXN0b21UYWJsZXMpLGw9bmV3IFgobixhLG8pKTt2YXIgZj10aGlzLnN5bWJvbHM7Znx8KHRoaXMuc3ltYm9scz1mPXt9KTt2YXIgaCxkPVtdLHA9dShyKTt0cnl7Zm9yKHAucygpOyEoaD1wLm4oKSkuZG9uZTspe3ZhciBnPWZbaC52YWx1ZV07ZyYmZC5wdXNoLmFwcGx5KGQsYyhnKSl9fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfXZhciB2PW5ldyBiKG4sYSxvKTtmW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoKXtpZihlJiZ0KXRocm93IG5ldyB5KCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBkLHAsZz1bXSx2PTAsbT0oMCxpLmxvZzIpKHIubGVuZ3RoK24pLGI9Zi5kZWNvZGVyLFM9Zi5jb250ZXh0Q2FjaGU7Zm9yKGUmJihkPSQoMSkscD1bXSxtPU1hdGgubWF4KG0sMSkpO2cubGVuZ3RoPG47KXt2Kz1lP28udGFibGVEZWx0YUhlaWdodC5kZWNvZGUoaCk6dyhTLCJJQURIIixiKTtmb3IodmFyIHg9MCxPPTAsQT1lP3AubGVuZ3RoOjA7Oyl7dmFyIEM9ZT9vLnRhYmxlRGVsdGFXaWR0aC5kZWNvZGUoaCk6dyhTLCJJQURXIixiKTtpZihudWxsPT09QylicmVhaztPKz14Kz1DO3ZhciBJPXZvaWQgMDtpZih0KXt2YXIgRT13KFMsIklBQUkiLGIpO2lmKEU+MSlJPVQoZSx0LHgsdiwwLEUsMSxyLmNvbmNhdChnKSxtLDAsMCwxLDAsbyx1LGwsZiwwLGgpO2Vsc2V7dmFyIGo9ayhTLGIsbSksTT13KFMsIklBUkRYIixiKSxfPXcoUywiSUFSRFkiLGIpO0k9UCh4LHYsdSxqPHIubGVuZ3RoP3Jbal06Z1tqLXIubGVuZ3RoXSxNLF8sITEsbCxmKX1nLnB1c2goSSl9ZWxzZSBlP3AucHVzaCh4KTooST1GKCExLHgsdixzLCExLG51bGwsYyxmKSxnLnB1c2goSSkpfWlmKGUmJiF0KXt2YXIgTD1vLnRhYmxlQml0bWFwU2l6ZS5kZWNvZGUoaCk7aC5ieXRlQWxpZ24oKTt2YXIgUj12b2lkIDA7aWYoMD09PUwpUj1xKGgsTyx2KTtlbHNle3ZhciBOPWguZW5kLEQ9aC5wb3NpdGlvbitMO2guZW5kPUQsUj1HKGgsTyx2LCExKSxoLmVuZD1OLGgucG9zaXRpb249RH12YXIgQj1wLmxlbmd0aDtpZihBPT09Qi0xKWcucHVzaChSKTtlbHNle3ZhciBVPXZvaWQgMCxYPXZvaWQgMCxIPTAsej12b2lkIDAsVz12b2lkIDA7Zm9yKFU9QTtVPEI7VSsrKXtmb3Ioej1IK3BbVV0sVz1bXSxYPTA7WDx2O1grKylXLnB1c2goUltYXS5zdWJhcnJheShILHopKTtnLnB1c2goVyksSD16fX19fWZvcih2YXIgVixZLEs9W10sSj1bXSxaPSExLFE9ci5sZW5ndGgrbjtKLmxlbmd0aDxROyl7Zm9yKHZhciBlZT1lP2QuZGVjb2RlKGgpOncoUywiSUFFWCIsYik7ZWUtLTspSi5wdXNoKFopO1o9IVp9Zm9yKFY9MCxZPXIubGVuZ3RoO1Y8WTtWKyspSltWXSYmSy5wdXNoKHJbVl0pO2Zvcih2YXIgdGU9MDt0ZTxuO1YrKyx0ZSsrKUpbVl0mJksucHVzaChnW3RlXSk7cmV0dXJuIEt9KGUuaHVmZm1hbixlLnJlZmluZW1lbnQsZCxlLm51bWJlck9mTmV3U3ltYm9scyxlLm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLHMsZS50ZW1wbGF0ZSxlLmF0LGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LHYsbCl9fSx7a2V5OiJvbkltbWVkaWF0ZVRleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG8scyxsLGY9ZS5pbmZvLGg9dGhpcy5zeW1ib2xzLGQ9W10scD11KHQpO3RyeXtmb3IocC5zKCk7IShsPXAubigpKS5kb25lOyl7dmFyIGc9aFtsLnZhbHVlXTtnJiZkLnB1c2guYXBwbHkoZCxjKGcpKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9dmFyIHY9KDAsaS5sb2cyKShkLmxlbmd0aCk7ZS5odWZmbWFuJiYocz1uZXcgWChyLG4sYSksbz1mdW5jdGlvbihlLHQscixuLGEpe2Zvcih2YXIgaT1bXSxvPTA7bzw9MzQ7bysrKXt2YXIgcz1hLnJlYWRCaXRzKDQpO2kucHVzaChuZXcgTihbbyxzLDAsMF0pKX12YXIgYz1uZXcgQihpLCExKTtpLmxlbmd0aD0wO2Zvcih2YXIgdT0wO3U8bjspe3ZhciBsPWMuZGVjb2RlKGEpO2lmKGw+PTMyKXt2YXIgZj12b2lkIDAsaD12b2lkIDAsZD12b2lkIDA7c3dpdGNoKGwpe2Nhc2UgMzI6aWYoMD09PXUpdGhyb3cgbmV3IHkoIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZSIpO2g9YS5yZWFkQml0cygyKSszLGY9aVt1LTFdLnByZWZpeExlbmd0aDticmVhaztjYXNlIDMzOmg9YS5yZWFkQml0cygzKSszLGY9MDticmVhaztjYXNlIDM0Omg9YS5yZWFkQml0cyg3KSsxMSxmPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKX1mb3IoZD0wO2Q8aDtkKyspaS5wdXNoKG5ldyBOKFt1LGYsMCwwXSkpLHUrK31lbHNlIGkucHVzaChuZXcgTihbdSxsLDAsMF0pKSx1Kyt9YS5ieXRlQWxpZ24oKTt2YXIgcCxnLHYsbT1uZXcgQihpLCExKSxiPTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOnA9JChlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6cD1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRTKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpnPSQoZS5odWZmbWFuRFMrOCk7YnJlYWs7Y2FzZSAzOmc9SChiLHQsciksYisrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHkoImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6dj0kKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6dj1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyB5KCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6bSx0YWJsZUZpcnN0UzpwLHRhYmxlRGVsdGFTOmcsdGFibGVEZWx0YVQ6dn19KGUsdCx0aGlzLmN1c3RvbVRhYmxlcyxkLmxlbmd0aCxzKSk7dmFyIG09bmV3IGIocixuLGEpLHc9VChlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGYud2lkdGgsZi5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGQsdixlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbyxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxtLGUubG9nU3RyaXBTaXplLHMpO3RoaXMuZHJhd0JpdG1hcChmLHcpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25QYXR0ZXJuRGljdGlvbmFyeSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT10aGlzLnBhdHRlcm5zO2l8fCh0aGlzLnBhdHRlcm5zPWk9e30pO3ZhciBvPW5ldyBiKHIsbixhKTtpW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1bXTtlfHwoby5wdXNoKHt4Oi10LHk6MH0pLDA9PT1hJiZvLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSkpO2Zvcih2YXIgcz1GKGUsKG4rMSkqdCxyLGEsITEsbnVsbCxvLGkpLGM9W10sdT0wO3U8PW47dSsrKXtmb3IodmFyIGw9W10sZj10KnUsaD1mK3QsZD0wO2Q8cjtkKyspbC5wdXNoKHNbZF0uc3ViYXJyYXkoZixoKSk7Yy5wdXNoKGwpfXJldHVybiBjfShlLm1tcixlLnBhdHRlcm5XaWR0aCxlLnBhdHRlcm5IZWlnaHQsZS5tYXhQYXR0ZXJuSW5kZXgsZS50ZW1wbGF0ZSxvKX19LHtrZXk6Im9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG89dGhpcy5wYXR0ZXJuc1t0WzBdXSxzPWUuaW5mbyxjPW5ldyBiKHIsbixhKSx1PWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoLGQscCxnKXtpZihzKXRocm93IG5ldyB5KCJza2lwIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZigwIT09Yyl0aHJvdyBuZXcgeSgnb3BlcmF0b3IgIicuY29uY2F0KGMsJyIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb24nKSk7dmFyIHYsbSxiLHc9W107Zm9yKHY9MDt2PGE7disrKXtpZihiPW5ldyBVaW50OEFycmF5KG4pLG8pZm9yKG09MDttPG47bSsrKWJbbV09bzt3LnB1c2goYil9dmFyIGs9dC5sZW5ndGgsUz10WzBdLHg9U1swXS5sZW5ndGgsTz1TLmxlbmd0aCxBPSgwLGkubG9nMikoayksQz1bXTtlfHwoQy5wdXNoKHt4OnI8PTE/MzoyLHk6LTF9KSwwPT09ciYmQy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pKTt2YXIgUCxULEksRSxqLE0sXyxMLFIsTixELEI9W107Zm9yKGUmJihQPW5ldyBYKGcuZGF0YSxnLnN0YXJ0LGcuZW5kKSksdj1BLTE7dj49MDt2LS0pVD1lP0coUCx1LGwsITApOkYoITEsdSxsLHIsITEsbnVsbCxDLGcpLEJbdl09VDtmb3IoST0wO0k8bDtJKyspZm9yKEU9MDtFPHU7RSsrKXtmb3Ioaj0wLE09MCxtPUEtMTttPj0wO20tLSlNfD0oal49QlttXVtJXVtFXSk8PG07aWYoXz10W01dLFI9aCtJKmQtRSpwPj44LChMPWYrSSpwK0UqZD4+OCk+PTAmJkwreDw9biYmUj49MCYmUitPPD1hKWZvcih2PTA7djxPO3YrKylmb3IoRD13W1Irdl0sTj1fW3ZdLG09MDttPHg7bSsrKURbTCttXXw9TlttXTtlbHNle3ZhciBVPXZvaWQgMCwkPXZvaWQgMDtmb3Iodj0wO3Y8Tzt2KyspaWYoISgoJD1SK3YpPDB8fCQ+PWEpKWZvcihEPXdbJF0sTj1fW3ZdLG09MDttPHg7bSsrKShVPUwrbSk+PTAmJlU8biYmKERbVV18PU5bbV0pfX1yZXR1cm4gd30oZS5tbXIsbyxlLnRlbXBsYXRlLHMud2lkdGgscy5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLmVuYWJsZVNraXAsZS5jb21iaW5hdGlvbk9wZXJhdG9yLGUuZ3JpZFdpZHRoLGUuZ3JpZEhlaWdodCxlLmdyaWRPZmZzZXRYLGUuZ3JpZE9mZnNldFksZS5ncmlkVmVjdG9yWCxlLmdyaWRWZWN0b3JZLGMpO3RoaXMuZHJhd0JpdG1hcChzLHUpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJvblRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5jdXN0b21UYWJsZXM7YXx8KHRoaXMuY3VzdG9tVGFibGVzPWE9e30pLGFbZV09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsbz1lW3RdLHM9NDI5NDk2NzI5NSYoMCxpLnJlYWRVaW50MzIpKGUsdCsxKSxjPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShlLHQrNSksdT1uZXcgWChlLHQrOSxyKSxsPTErKG8+PjEmNyksZj0xKyhvPj40JjcpLGg9W10sZD1zO2Rve249dS5yZWFkQml0cyhsKSxhPXUucmVhZEJpdHMoZiksaC5wdXNoKG5ldyBOKFtkLG4sYSwwXSkpLGQrPTE8PGF9d2hpbGUoZDxjKTtyZXR1cm4gbj11LnJlYWRCaXRzKGwpLGgucHVzaChuZXcgTihbcy0xLG4sMzIsMCwibG93ZXIiXSkpLG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW2MsbiwzMiwwXSkpLDEmbyYmKG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW24sMF0pKSksbmV3IEIoaCwhMSl9KHQscixuKX19XSksZX0oKSxOPWQoKGZ1bmN0aW9uIGUodCl7cCh0aGlzLGUpLDI9PT10Lmxlbmd0aD8odGhpcy5pc09PQj0hMCx0aGlzLnJhbmdlTG93PTAsdGhpcy5wcmVmaXhMZW5ndGg9dFswXSx0aGlzLnJhbmdlTGVuZ3RoPTAsdGhpcy5wcmVmaXhDb2RlPXRbMV0sdGhpcy5pc0xvd2VyUmFuZ2U9ITEpOih0aGlzLmlzT09CPSExLHRoaXMucmFuZ2VMb3c9dFswXSx0aGlzLnByZWZpeExlbmd0aD10WzFdLHRoaXMucmFuZ2VMZW5ndGg9dFsyXSx0aGlzLnByZWZpeENvZGU9dFszXSx0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09dFs0XSl9KSksRD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cCh0aGlzLGUpLHRoaXMuY2hpbGRyZW49W10sdD8odGhpcy5pc0xlYWY9ITAsdGhpcy5yYW5nZUxlbmd0aD10LnJhbmdlTGVuZ3RoLHRoaXMucmFuZ2VMb3c9dC5yYW5nZUxvdyx0aGlzLmlzTG93ZXJSYW5nZT10LmlzTG93ZXJSYW5nZSx0aGlzLmlzT09CPXQuaXNPT0IpOnRoaXMuaXNMZWFmPSExfXJldHVybiBkKGUsW3trZXk6ImJ1aWxkVHJlZSIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj10LnByZWZpeENvZGU+PnImMTtpZihyPD0wKXRoaXMuY2hpbGRyZW5bbl09bmV3IGUodCk7ZWxzZXt2YXIgYT10aGlzLmNoaWxkcmVuW25dO2F8fCh0aGlzLmNoaWxkcmVuW25dPWE9bmV3IGUobnVsbCkpLGEuYnVpbGRUcmVlKHQsci0xKX19fSx7a2V5OiJkZWNvZGVOb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmlzTGVhZil7aWYodGhpcy5pc09PQilyZXR1cm4gbnVsbDt2YXIgdD1lLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO3JldHVybiB0aGlzLnJhbmdlTG93Kyh0aGlzLmlzTG93ZXJSYW5nZT8tdDp0KX12YXIgcj10aGlzLmNoaWxkcmVuW2UucmVhZEJpdCgpXTtpZighcil0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTtyZXR1cm4gci5kZWNvZGVOb2RlKGUpfX1dKSxlfSgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHJ8fHRoaXMuYXNzaWduUHJlZml4Q29kZXModCksdGhpcy5yb290Tm9kZT1uZXcgRChudWxsKTtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKyspe3ZhciBpPXRbbl07aS5wcmVmaXhMZW5ndGg+MCYmdGhpcy5yb290Tm9kZS5idWlsZFRyZWUoaSxpLnByZWZpeExlbmd0aC0xKX19cmV0dXJuIGQoZSxbe2tleToiZGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfX0se2tleToiYXNzaWduUHJlZml4Q29kZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPTAsbj0wO248dDtuKyspcj1NYXRoLm1heChyLGVbbl0ucHJlZml4TGVuZ3RoKTtmb3IodmFyIGE9bmV3IFVpbnQzMkFycmF5KHIrMSksaT0wO2k8dDtpKyspYVtlW2ldLnByZWZpeExlbmd0aF0rKzt2YXIgbyxzLGMsdT0xLGw9MDtmb3IoYVswXT0wO3U8PXI7KXtmb3Iobz1sPWwrYVt1LTFdPDwxLHM9MDtzPHQ7KShjPWVbc10pLnByZWZpeExlbmd0aD09PXUmJihjLnByZWZpeENvZGU9byxvKyspLHMrKzt1Kyt9fX1dKSxlfSgpLFU9e307ZnVuY3Rpb24gJChlKXt2YXIgdCxyPVVbZV07aWYocilyZXR1cm4gcjtzd2l0Y2goZSl7Y2FzZSAxOnQ9W1swLDEsNCwwXSxbMTYsMiw4LDJdLFsyNzIsMywxNiw2XSxbNjU4MDgsMywzMiw3XV07YnJlYWs7Y2FzZSAyOnQ9W1swLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWzc1LDYsMzIsNjJdLFs2LDYzXV07YnJlYWs7Y2FzZSAzOnQ9W1stMjU2LDgsOCwyNTRdLFswLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWy0yNTcsOCwzMiwyNTUsImxvd2VyIl0sWzc1LDcsMzIsMTI2XSxbNiw2Ml1dO2JyZWFrO2Nhc2UgNDp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFs3Niw1LDMyLDMxXV07YnJlYWs7Y2FzZSA1OnQ9W1stMjU1LDcsOCwxMjZdLFsxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWy0yNTYsNywzMiwxMjcsImxvd2VyIl0sWzc2LDYsMzIsNjJdXTticmVhaztjYXNlIDY6dD1bWy0yMDQ4LDUsMTAsMjhdLFstMTAyNCw0LDksOF0sWy01MTIsNCw4LDldLFstMjU2LDQsNywxMF0sWy0xMjgsNSw2LDI5XSxbLTY0LDUsNSwzMF0sWy0zMiw0LDUsMTFdLFswLDIsNywwXSxbMTI4LDMsNywyXSxbMjU2LDMsOCwzXSxbNTEyLDQsOSwxMl0sWzEwMjQsNCwxMCwxM10sWy0yMDQ5LDYsMzIsNjIsImxvd2VyIl0sWzIwNDgsNiwzMiw2M11dO2JyZWFrO2Nhc2UgNzp0PVtbLTEwMjQsNCw5LDhdLFstNTEyLDMsOCwwXSxbLTI1Niw0LDcsOV0sWy0xMjgsNSw2LDI2XSxbLTY0LDUsNSwyN10sWy0zMiw0LDUsMTBdLFswLDQsNSwxMV0sWzMyLDUsNSwyOF0sWzY0LDUsNiwyOV0sWzEyOCw0LDcsMTJdLFsyNTYsMyw4LDFdLFs1MTIsMyw5LDJdLFsxMDI0LDMsMTAsM10sWy0xMDI1LDUsMzIsMzAsImxvd2VyIl0sWzIwNDgsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgODp0PVtbLTE1LDgsMywyNTJdLFstNyw5LDEsNTA4XSxbLTUsOCwxLDI1M10sWy0zLDksMCw1MDldLFstMiw3LDAsMTI0XSxbLTEsNCwwLDEwXSxbMCwyLDEsMF0sWzIsNSwwLDI2XSxbMyw2LDAsNThdLFs0LDMsNCw0XSxbMjAsNiwxLDU5XSxbMjIsNCw0LDExXSxbMzgsNCw1LDEyXSxbNzAsNSw2LDI3XSxbMTM0LDUsNywyOF0sWzI2Miw2LDcsNjBdLFszOTAsNyw4LDEyNV0sWzY0Niw2LDEwLDYxXSxbLTE2LDksMzIsNTEwLCJsb3dlciJdLFsxNjcwLDksMzIsNTExXSxbMiwxXV07YnJlYWs7Y2FzZSA5OnQ9W1stMzEsOCw0LDI1Ml0sWy0xNSw5LDIsNTA4XSxbLTExLDgsMiwyNTNdLFstNyw5LDEsNTA5XSxbLTUsNywxLDEyNF0sWy0zLDQsMSwxMF0sWy0xLDMsMSwyXSxbMSwzLDEsM10sWzMsNSwxLDI2XSxbNSw2LDEsNThdLFs3LDMsNSw0XSxbMzksNiwyLDU5XSxbNDMsNCw1LDExXSxbNzUsNCw2LDEyXSxbMTM5LDUsNywyN10sWzI2Nyw1LDgsMjhdLFs1MjMsNiw4LDYwXSxbNzc5LDcsOSwxMjVdLFsxMjkxLDYsMTEsNjFdLFstMzIsOSwzMiw1MTAsImxvd2VyIl0sWzMzMzksOSwzMiw1MTFdLFsyLDBdXTticmVhaztjYXNlIDEwOnQ9W1stMjEsNyw0LDEyMl0sWy01LDgsMCwyNTJdLFstNCw3LDAsMTIzXSxbLTMsNSwwLDI0XSxbLTIsMiwyLDBdLFsyLDUsMCwyNV0sWzMsNiwwLDU0XSxbNCw3LDAsMTI0XSxbNSw4LDAsMjUzXSxbNiwyLDYsMV0sWzcwLDUsNSwyNl0sWzEwMiw2LDUsNTVdLFsxMzQsNiw2LDU2XSxbMTk4LDYsNyw1N10sWzMyNiw2LDgsNThdLFs1ODIsNiw5LDU5XSxbMTA5NCw2LDEwLDYwXSxbMjExOCw3LDExLDEyNV0sWy0yMiw4LDMyLDI1NCwibG93ZXIiXSxbNDE2Niw4LDMyLDI1NV0sWzIsMl1dO2JyZWFrO2Nhc2UgMTE6dD1bWzEsMSwwLDBdLFsyLDIsMSwyXSxbNCw0LDAsMTJdLFs1LDQsMSwxM10sWzcsNSwxLDI4XSxbOSw1LDIsMjldLFsxMyw2LDIsNjBdLFsxNyw3LDIsMTIyXSxbMjEsNywzLDEyM10sWzI5LDcsNCwxMjRdLFs0NSw3LDUsMTI1XSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTI6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDEsNl0sWzUsNSwwLDI4XSxbNiw1LDEsMjldLFs4LDYsMSw2MF0sWzEwLDcsMCwxMjJdLFsxMSw3LDEsMTIzXSxbMTMsNywyLDEyNF0sWzE3LDcsMywxMjVdLFsyNSw3LDQsMTI2XSxbNDEsOCw1LDI1NF0sWzczLDgsMzIsMjU1XV07YnJlYWs7Y2FzZSAxMzp0PVtbMSwxLDAsMF0sWzIsMywwLDRdLFszLDQsMCwxMl0sWzQsNSwwLDI4XSxbNSw0LDEsMTNdLFs3LDMsMyw1XSxbMTUsNiwxLDU4XSxbMTcsNiwyLDU5XSxbMjEsNiwzLDYwXSxbMjksNiw0LDYxXSxbNDUsNiw1LDYyXSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTQ6dD1bWy0yLDMsMCw0XSxbLTEsMywwLDVdLFswLDEsMCwwXSxbMSwzLDAsNl0sWzIsMywwLDddXTticmVhaztjYXNlIDE1OnQ9W1stMjQsNyw0LDEyNF0sWy04LDYsMiw2MF0sWy00LDUsMSwyOF0sWy0yLDQsMCwxMl0sWy0xLDMsMCw0XSxbMCwxLDAsMF0sWzEsMywwLDVdLFsyLDQsMCwxM10sWzMsNSwxLDI5XSxbNSw2LDIsNjFdLFs5LDcsNCwxMjVdLFstMjUsNywzMiwxMjYsImxvd2VyIl0sWzI1LDcsMzIsMTI3XV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgic3RhbmRhcmQgdGFibGUgQi4iLmNvbmNhdChlLCIgZG9lcyBub3QgZXhpc3QiKSl9Zm9yKHZhciBuPTAsYT10Lmxlbmd0aDtuPGE7bisrKXRbbl09bmV3IE4odFtuXSk7cmV0dXJuIHI9bmV3IEIodCwhMCksVVtlXT1yLHJ9dmFyIFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtwKHRoaXMsZSksdGhpcy5kYXRhPXQsdGhpcy5zdGFydD1yLHRoaXMuZW5kPW4sdGhpcy5wb3NpdGlvbj1yLHRoaXMuc2hpZnQ9LTEsdGhpcy5jdXJyZW50Qnl0ZT0wfXJldHVybiBkKGUsW3trZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgeSgiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdLHRoaXMuc2hpZnQ9N312YXIgZT10aGlzLmN1cnJlbnRCeXRlPj50aGlzLnNoaWZ0JjE7cmV0dXJuIHRoaXMuc2hpZnQtLSxlfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9MDtmb3IodD1lLTE7dD49MDt0LS0pcnw9dGhpcy5yZWFkQml0KCk8PHQ7cmV0dXJuIHJ9fSx7a2V5OiJieXRlQWxpZ24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zaGlmdD0tMX19LHtrZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24+PXRoaXMuZW5kPy0xOnRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdfX1dKSxlfSgpO2Z1bmN0aW9uIEgoZSx0LHIpe2Zvcih2YXIgbj0wLGE9MCxpPXQubGVuZ3RoO2E8aTthKyspe3ZhciBvPXJbdFthXV07aWYobyl7aWYoZT09PW4pcmV0dXJuIG87bisrfX10aHJvdyBuZXcgeSgiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIHEoZSx0LHIpe2Zvcih2YXIgbj1bXSxhPTA7YTxyO2ErKyl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodCk7bi5wdXNoKGkpO2Zvcih2YXIgbz0wO288dDtvKyspaVtvXT1lLnJlYWRCaXQoKTtlLmJ5dGVBbGlnbigpfXJldHVybiBufWZ1bmN0aW9uIEcoZSx0LHIsbil7Zm9yKHZhciBhLGk9e0s6LTEsQ29sdW1uczp0LFJvd3M6cixCbGFja0lzMTohMCxFbmRPZkJsb2NrOm59LG89bmV3IHMuQ0NJVFRGYXhEZWNvZGVyKGUsaSksYz1bXSx1PSExLGw9MDtsPHI7bCsrKXt2YXIgZj1uZXcgVWludDhBcnJheSh0KTtjLnB1c2goZik7Zm9yKHZhciBoPS0xLGQ9MDtkPHQ7ZCsrKWg8MCYmKC0xPT09KGE9by5yZWFkTmV4dENoYXIoKSkmJihhPTAsdT0hMCksaD03KSxmW2RdPWE+PmgmMSxoLS19aWYobiYmIXUpZm9yKHZhciBwPTA7cDw1JiYtMSE9PW8ucmVhZE5leHRDaGFyKCk7cCsrKTtyZXR1cm4gY312YXIgej1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToicGFyc2VDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFIscj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7dmFyIGE9ZVtyXTtMKEUoe30sYS5kYXRhLGEuc3RhcnQsYS5lbmQpLHQpfXJldHVybiB0LmJ1ZmZlcn0oZSl9fSx7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQ6IEpiaWcySW1hZ2UucGFyc2UiKX19XSksZX0oKTt0LkpiaWcySW1hZ2U9en0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBhPW4uY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1yKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bcml0aG1ldGljRGVjb2Rlcj12b2lkIDA7dmFyIGE9W3txZToyMjAxNyxubXBzOjEsbmxwczoxLHN3aXRjaEZsYWc6MX0se3FlOjEzMzEzLG5tcHM6MixubHBzOjYsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjMsbmxwczo5LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczo0LG5scHM6MTIsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjUsbmxwczoyOSxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozOCxubHBzOjMzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NyxubHBzOjYsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczo4LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTg0MzMsbm1wczo5LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxMCxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MTEsbmxwczoxNyxzd2l0Y2hGbGFnOjB9LHtxZTo5MjE3LG5tcHM6MTIsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZTo3MTY5LG5tcHM6MTMsbmxwczoyMCxzd2l0Y2hGbGFnOjB9LHtxZTo1NjMzLG5tcHM6MjksbmxwczoyMSxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjE1LG5scHM6MTQsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczoxNixubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjIwNzM3LG5tcHM6MTcsbmxwczoxNSxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjE4LG5scHM6MTYsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxOSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjEzMzEzLG5tcHM6MjAsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZToxMjI4OSxubXBzOjIxLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6MTAyNDEsbm1wczoyMixubHBzOjE5LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoyMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjg3MDUsbm1wczoyNCxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoyNSxubHBzOjIyLHN3aXRjaEZsYWc6MH0se3FlOjYxNDUsbm1wczoyNixubHBzOjIzLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyNyxubHBzOjI0LHN3aXRjaEZsYWc6MH0se3FlOjUxMjEsbm1wczoyOCxubHBzOjI1LHN3aXRjaEZsYWc6MH0se3FlOjQ2MDksbm1wczoyOSxubHBzOjI2LHN3aXRjaEZsYWc6MH0se3FlOjQzNTMsbm1wczozMCxubHBzOjI3LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczozMSxubHBzOjI4LHN3aXRjaEZsYWc6MH0se3FlOjI0OTcsbm1wczozMixubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjIyMDksbm1wczozMyxubHBzOjMwLHN3aXRjaEZsYWc6MH0se3FlOjEzMTMsbm1wczozNCxubHBzOjMxLHN3aXRjaEZsYWc6MH0se3FlOjEwODksbm1wczozNSxubHBzOjMyLHN3aXRjaEZsYWc6MH0se3FlOjY3MyxubXBzOjM2LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6NTQ1LG5tcHM6MzcsbmxwczozNCxzd2l0Y2hGbGFnOjB9LHtxZTozMjEsbm1wczozOCxubHBzOjM1LHN3aXRjaEZsYWc6MH0se3FlOjI3MyxubXBzOjM5LG5scHM6MzYsc3dpdGNoRmxhZzowfSx7cWU6MTMzLG5tcHM6NDAsbmxwczozNyxzd2l0Y2hGbGFnOjB9LHtxZTo3MyxubXBzOjQxLG5scHM6Mzgsc3dpdGNoRmxhZzowfSx7cWU6Mzcsbm1wczo0MixubHBzOjM5LHN3aXRjaEZsYWc6MH0se3FlOjIxLG5tcHM6NDMsbmxwczo0MCxzd2l0Y2hGbGFnOjB9LHtxZTo5LG5tcHM6NDQsbmxwczo0MSxzd2l0Y2hGbGFnOjB9LHtxZTo1LG5tcHM6NDUsbmxwczo0Mixzd2l0Y2hGbGFnOjB9LHtxZToxLG5tcHM6NDUsbmxwczo0Myxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjQ2LG5scHM6NDYsc3dpdGNoRmxhZzowfV0saT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4peyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuYnA9cix0aGlzLmRhdGFFbmQ9bix0aGlzLmNoaWdoPXRbcl0sdGhpcy5jbG93PTAsdGhpcy5ieXRlSW4oKSx0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDcmNjU1MzV8dGhpcy5jbG93Pj45JjEyNyx0aGlzLmNsb3c9dGhpcy5jbG93PDw3JjY1NTM1LHRoaXMuY3QtPTcsdGhpcy5hPTMyNzY4fXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiYnl0ZUluIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YSx0PXRoaXMuYnA7MjU1PT09ZVt0XT9lW3QrMV0+MTQzPyh0aGlzLmNsb3crPTY1MjgwLHRoaXMuY3Q9OCk6KHQrKyx0aGlzLmNsb3crPWVbdF08PDksdGhpcy5jdD03LHRoaXMuYnA9dCk6KHQrKyx0aGlzLmNsb3crPXQ8dGhpcy5kYXRhRW5kP2VbdF08PDg6NjUyODAsdGhpcy5jdD04LHRoaXMuYnA9dCksdGhpcy5jbG93PjY1NTM1JiYodGhpcy5jaGlnaCs9dGhpcy5jbG93Pj4xNix0aGlzLmNsb3cmPTY1NTM1KX19LHtrZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lW3RdPj4xLGk9MSZlW3RdLG89YVtuXSxzPW8ucWUsYz10aGlzLmEtcztpZih0aGlzLmNoaWdoPHMpYzxzPyhjPXMscj1pLG49by5ubXBzKTooYz1zLHI9MV5pLDE9PT1vLnN3aXRjaEZsYWcmJihpPXIpLG49by5ubHBzKTtlbHNle2lmKHRoaXMuY2hpZ2gtPXMsMCE9KDMyNzY4JmMpKXJldHVybiB0aGlzLmE9YyxpO2M8cz8ocj0xXmksMT09PW8uc3dpdGNoRmxhZyYmKGk9ciksbj1vLm5scHMpOihyPWksbj1vLm5tcHMpfWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpLGM8PD0xLHRoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjEsdGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNSx0aGlzLmN0LS19d2hpbGUoMD09KDMyNzY4JmMpKTtyZXR1cm4gdGhpcy5hPWMsZVt0XT1uPDwxfGkscn19XSkmJm4odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkFyaXRobWV0aWNEZWNvZGVyPWl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTQ4KSxpPXIoMTM0KSxvPXIoMTU3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxsKGUpfXZhciBmPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9KGQsZSk7dmFyIHQscixhLGYsaD0oYT1kLGY9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1sKGEpO2lmKGYpe3ZhciByPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGQoZSx0LHIpe3ZhciBuLGE7Zm9yKGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZCk7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDI1NT09PWEpe2Uuc2tpcCgtMSk7YnJlYWt9cmV0dXJuKG49aC5jYWxsKHRoaXMsdCkpLnN0cmVhbT1lLG4uZGljdD1lLmRpY3Qsbi5tYXliZUxlbmd0aD10LG4ucGFyYW1zPXIsbn1yZXR1cm4gdD1kLChyPVt7a2V5OiJieXRlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9fSx7a2V5OiJlbnN1cmVCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5lb2Ype3ZhciBlPXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0sdD10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLmZvcmNlUkdCJiZBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9dGhpcy5kaWN0LmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpfHw4LG49dC5sZW5ndGgsYT1uZXcgSW50MzJBcnJheShuKSxzPSExLGM9KDE8PHIpLTEsdT0wO3U8bjt1Kz0yKWFbdV09MjU2Kih0W3UrMV0tdFt1XSl8MCxhW3UrMV09dFt1XSpjfDAsMjU2PT09YVt1XSYmMD09PWFbdSsxXXx8KHM9ITApO3MmJihlLmRlY29kZVRyYW5zZm9ybT1hKX1pZih0aGlzLnBhcmFtcyBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGw9dGhpcy5wYXJhbXMuZ2V0KCJDb2xvclRyYW5zZm9ybSIpO051bWJlci5pc0ludGVnZXIobCkmJihlLmNvbG9yVHJhbnNmb3JtPWwpfXZhciBmPW5ldyBvLkpwZWdJbWFnZShlKTtmLnBhcnNlKHRoaXMuYnl0ZXMpO3ZhciBoPWYuZ2V0RGF0YSh7d2lkdGg6dGhpcy5kcmF3V2lkdGgsaGVpZ2h0OnRoaXMuZHJhd0hlaWdodCxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9aCx0aGlzLmJ1ZmZlckxlbmd0aD1oLmxlbmd0aCx0aGlzLmVvZj0hMH19fV0pJiZjKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGR9KGEuRGVjb2RlU3RyZWFtKTt0LkpwZWdTdHJlYW09Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM1KTtmdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP28oZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHMoZSl9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBmKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmgoZSx0KX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxoKGUsdCl9ZnVuY3Rpb24gZChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX12YXIgZz1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsIkpQRUcgZXJyb3I6ICIuY29uY2F0KGUpLCJKcGVnRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSx2PWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1kKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gbCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIkROTE1hcmtlckVycm9yIikpLnNjYW5MaW5lcz1uLGF9cmV0dXJuIHUocil9KG4uQmFzZUV4Y2VwdGlvbikseT1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRU9JTWFya2VyRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSxtPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksYj00MDE3LHc9Nzk5LGs9MzQwNixTPTIyNzYseD0xNTY3LE89Mzc4NCxBPTU3OTMsQz0yODk2O2Z1bmN0aW9uIEYoZSx0KXtmb3IodmFyIHIsbixhPTAsaT0xNjtpPjAmJiFlW2ktMV07KWktLTt2YXIgbyxzPVt7Y2hpbGRyZW46W10saW5kZXg6MH1dLGM9c1swXTtmb3Iocj0wO3I8aTtyKyspe2ZvcihuPTA7bjxlW3JdO24rKyl7Zm9yKChjPXMucG9wKCkpLmNoaWxkcmVuW2MuaW5kZXhdPXRbYV07Yy5pbmRleD4wOyljPXMucG9wKCk7Zm9yKGMuaW5kZXgrKyxzLnB1c2goYyk7cy5sZW5ndGg8PXI7KXMucHVzaChvPXtjaGlsZHJlbjpbXSxpbmRleDowfSksYy5jaGlsZHJlbltjLmluZGV4XT1vLmNoaWxkcmVuLGM9bzthKyt9cisxPGkmJihzLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pLGMuY2hpbGRyZW5bYy5pbmRleF09by5jaGlsZHJlbixjPW8pfXJldHVybiBzWzBdLmNoaWxkcmVufWZ1bmN0aW9uIFAoZSx0LHIpe3JldHVybiA2NCooKGUuYmxvY2tzUGVyTGluZSsxKSp0K3IpfWZ1bmN0aW9uIFQoZSx0LHIsaSxvLGMsdSxsLGYpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+OSYmdm9pZCAwIT09YXJndW1lbnRzWzldJiZhcmd1bWVudHNbOV0sZD1yLm1jdXNQZXJMaW5lLHA9ci5wcm9ncmVzc2l2ZSxiPXQsdz0wLGs9MDtmdW5jdGlvbiBTKCl7aWYoaz4wKXJldHVybiBrLS0sdz4+ayYxO2lmKDI1NT09PSh3PWVbdCsrXSkpe3ZhciBuPWVbdCsrXTtpZihuKXtpZigyMjA9PT1uJiZoKXt0Kz0yO3ZhciBpPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZih0Kz0yLGk+MCYmaSE9PXIuc2NhbkxpbmVzKXRocm93IG5ldyB2KCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixpKX1lbHNlIGlmKDIxNz09PW4pe2lmKGgpe3ZhciBvPUkqKDg9PT1yLnByZWNpc2lvbj84OjApO2lmKG8+MCYmTWF0aC5yb3VuZChyLnNjYW5MaW5lcy9vKT49NSl0aHJvdyBuZXcgdigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLG8pfXRocm93IG5ldyB5KCJGb3VuZCBFT0kgbWFya2VyICgweEZGRDkpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIil9dGhyb3cgbmV3IGcoInVuZXhwZWN0ZWQgbWFya2VyICIuY29uY2F0KCh3PDw4fG4pLnRvU3RyaW5nKDE2KSkpfX1yZXR1cm4gaz03LHc+Pj43fWZ1bmN0aW9uIHgoZSl7Zm9yKHZhciB0PWU7Oyl7c3dpdGNoKHModD10W1MoKV0pKXtjYXNlIm51bWJlciI6cmV0dXJuIHQ7Y2FzZSJvYmplY3QiOmNvbnRpbnVlfXRocm93IG5ldyBnKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9MDtlPjA7KXQ9dDw8MXxTKCksZS0tO3JldHVybiB0fWZ1bmN0aW9uIEEoZSl7aWYoMT09PWUpcmV0dXJuIDE9PT1TKCk/MTotMTt2YXIgdD1PKGUpO3JldHVybiB0Pj0xPDxlLTE/dDp0KygtMTw8ZSkrMX12YXIgQyxGPTAsVD0wLEk9MDtmdW5jdGlvbiBFKGUsdCxyLG4sYSl7dmFyIGk9ciVkO0k9KHIvZHwwKSplLnYrbjt2YXIgbz1pKmUuaCthO3QoZSxQKGUsSSxvKSl9ZnVuY3Rpb24gTShlLHQscil7ST1yL2UuYmxvY2tzUGVyTGluZXwwO3ZhciBuPXIlZS5ibG9ja3NQZXJMaW5lO3QoZSxQKGUsSSxuKSl9dmFyIF8sTCxSLE4sRCxCLFU9aS5sZW5ndGg7Qj1wPzA9PT1jPzA9PT1sP2Z1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTw8ZjtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW59OmZ1bmN0aW9uKGUsdCl7ZS5ibG9ja0RhdGFbdF18PVMoKTw8Zn06MD09PWw/ZnVuY3Rpb24oZSx0KXtpZihGPjApRi0tO2Vsc2UgZm9yKHZhciByPWMsbj11O3I8PW47KXt2YXIgYT14KGUuaHVmZm1hblRhYmxlQUMpLGk9MTUmYSxvPWE+PjQ7aWYoMCE9PWkpe3ZhciBzPW1bcis9b107ZS5ibG9ja0RhdGFbdCtzXT1BKGkpKigxPDxmKSxyKyt9ZWxzZXtpZihvPDE1KXtGPU8obykrKDE8PG8pLTE7YnJlYWt9cis9MTZ9fX06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixhPWMsaT11LG89MDthPD1pOyl7dmFyIHM9dCttW2FdLGw9ZS5ibG9ja0RhdGFbc108MD8tMToxO3N3aXRjaChUKXtjYXNlIDA6aWYobz0obj14KGUuaHVmZm1hblRhYmxlQUMpKT4+NCwwPT0ocj0xNSZuKSlvPDE1PyhGPU8obykrKDE8PG8pLFQ9NCk6KG89MTYsVD0xKTtlbHNle2lmKDEhPT1yKXRocm93IG5ldyBnKCJpbnZhbGlkIEFDbiBlbmNvZGluZyIpO0M9QShyKSxUPW8/MjozfWNvbnRpbnVlO2Nhc2UgMTpjYXNlIDI6ZS5ibG9ja0RhdGFbc10/ZS5ibG9ja0RhdGFbc10rPWwqKFMoKTw8Zik6MD09LS1vJiYoVD0yPT09VD8zOjApO2JyZWFrO2Nhc2UgMzplLmJsb2NrRGF0YVtzXT9lLmJsb2NrRGF0YVtzXSs9bCooUygpPDxmKTooZS5ibG9ja0RhdGFbc109Qzw8ZixUPTApO2JyZWFrO2Nhc2UgNDplLmJsb2NrRGF0YVtzXSYmKGUuYmxvY2tEYXRhW3NdKz1sKihTKCk8PGYpKX1hKyt9ND09PVQmJjA9PS0tRiYmKFQ9MCl9OmZ1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW47Zm9yKHZhciBhPTE7YTw2NDspe3ZhciBpPXgoZS5odWZmbWFuVGFibGVBQyksbz0xNSZpLHM9aT4+NDtpZigwIT09byl7dmFyIGM9bVthKz1zXTtlLmJsb2NrRGF0YVt0K2NdPUEobyksYSsrfWVsc2V7aWYoczwxNSlicmVhazthKz0xNn19fTt2YXIgJCxYLEgscSxHPTA7Zm9yKFg9MT09PVU/aVswXS5ibG9ja3NQZXJMaW5lKmlbMF0uYmxvY2tzUGVyQ29sdW1uOmQqci5tY3VzUGVyQ29sdW1uO0c8PVg7KXt2YXIgej1vP01hdGgubWluKFgtRyxvKTpYO2lmKHo+MCl7Zm9yKEw9MDtMPFU7TCsrKWlbTF0ucHJlZD0wO2lmKEY9MCwxPT09VSlmb3IoXz1pWzBdLEQ9MDtEPHo7RCsrKU0oXyxCLEcpLEcrKztlbHNlIGZvcihEPTA7RDx6O0QrKyl7Zm9yKEw9MDtMPFU7TCsrKWZvcihIPShfPWlbTF0pLmgscT1fLnYsUj0wO1I8cTtSKyspZm9yKE49MDtOPEg7TisrKUUoXyxCLEcsUixOKTtHKyt9fWlmKGs9MCwhKCQ9aihlLHQpKSlicmVhaztpZigkLmludmFsaWQpe3ZhciBXPXo+MD8idW5leHBlY3RlZCI6ImV4Y2Vzc2l2ZSI7KDAsbi53YXJuKSgiZGVjb2RlU2NhbiAtICIuY29uY2F0KFcsIiBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIpLmNvbmNhdCgkLmludmFsaWQpKSx0PSQub2Zmc2V0fWlmKCEoJC5tYXJrZXI+PTY1NDg4JiYkLm1hcmtlcjw9NjU0OTUpKWJyZWFrO3QrPTJ9cmV0dXJuIHQtYn1mdW5jdGlvbiBJKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sRixQLFQ9ZS5xdWFudGl6YXRpb25UYWJsZSxJPWUuYmxvY2tEYXRhO2lmKCFUKXRocm93IG5ldyBnKCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4iKTtmb3IodmFyIEU9MDtFPDY0O0UrPTgpZj1JW3QrRV0saD1JW3QrRSsxXSxkPUlbdCtFKzJdLHA9SVt0K0UrM10sdj1JW3QrRSs0XSx5PUlbdCtFKzVdLG09SVt0K0UrNl0sRj1JW3QrRSs3XSxmKj1UW0VdLDAhPShofGR8cHx2fHl8bXxGKT8oaCo9VFtFKzFdLGQqPVRbRSsyXSxwKj1UW0UrM10sdio9VFtFKzRdLHkqPVRbRSs1XSxtKj1UW0UrNl0sRio9VFtFKzddLGE9KG49KG49QSpmKzEyOD4+OCkrKGE9QSp2KzEyOD4+OCkrMT4+MSktYSxQPShpPWQpKk8rKG89bSkqeCsxMjg+PjgsaT1pKngtbypPKzEyOD4+OCx1PShzPShzPUMqKGgtRikrMTI4Pj44KSsodT15PDw0KSsxPj4xKS11LGM9KGw9KGw9QyooaCtGKSsxMjg+PjgpKyhjPXA8PDQpKzE+PjEpLWMsbz0obj1uKyhvPVApKzE+PjEpLW8saT0oYT1hK2krMT4+MSktaSxQPXMqUytsKmsrMjA0OD4+MTIscz1zKmstbCpTKzIwNDg+PjEyLGw9UCxQPWMqdyt1KmIrMjA0OD4+MTIsYz1jKmItdSp3KzIwNDg+PjEyLHU9UCxyW0VdPW4rbCxyW0UrN109bi1sLHJbRSsxXT1hK3UscltFKzZdPWEtdSxyW0UrMl09aStjLHJbRSs1XT1pLWMscltFKzNdPW8rcyxyW0UrNF09by1zKTooUD1BKmYrNTEyPj4xMCxyW0VdPVAscltFKzFdPVAscltFKzJdPVAscltFKzNdPVAscltFKzRdPVAscltFKzVdPVAscltFKzZdPVAscltFKzddPVApO2Zvcih2YXIgaj0wO2o8ODsrK2opZj1yW2pdLDAhPSgoaD1yW2orOF0pfChkPXJbaisxNl0pfChwPXJbaisyNF0pfCh2PXJbaiszMl0pfCh5PXJbais0MF0pfChtPXJbais0OF0pfChGPXJbais1Nl0pKT8oYT0obj00MTEyKygobj1BKmYrMjA0OD4+MTIpKyhhPUEqdisyMDQ4Pj4xMikrMT4+MSkpLWEsUD0oaT1kKSpPKyhvPW0pKngrMjA0OD4+MTIsaT1pKngtbypPKzIwNDg+PjEyLG89UCx1PShzPShzPUMqKGgtRikrMjA0OD4+MTIpKyh1PXkpKzE+PjEpLXUsYz0obD0obD1DKihoK0YpKzIwNDg+PjEyKSsoYz1wKSsxPj4xKS1jLFA9cypTK2wqaysyMDQ4Pj4xMixzPXMqay1sKlMrMjA0OD4+MTIsbD1QLFA9Yyp3K3UqYisyMDQ4Pj4xMixjPWMqYi11KncrMjA0OD4+MTIsKGY9KG49bitvKzE+PjEpK2wpPDE2P2Y9MDpmPj00MDgwP2Y9MjU1OmY+Pj00LChoPShhPWEraSsxPj4xKSsodT1QKSk8MTY/aD0wOmg+PTQwODA/aD0yNTU6aD4+PTQsKGQ9KGk9YS1pKStjKTwxNj9kPTA6ZD49NDA4MD9kPTI1NTpkPj49NCwocD0obz1uLW8pK3MpPDE2P3A9MDpwPj00MDgwP3A9MjU1OnA+Pj00LCh2PW8tcyk8MTY/dj0wOnY+PTQwODA/dj0yNTU6dj4+PTQsKHk9aS1jKTwxNj95PTA6eT49NDA4MD95PTI1NTp5Pj49NCwobT1hLXUpPDE2P209MDptPj00MDgwP209MjU1Om0+Pj00LChGPW4tbCk8MTY/Rj0wOkY+PTQwODA/Rj0yNTU6Rj4+PTQsSVt0K2pdPWYsSVt0K2orOF09aCxJW3QraisxNl09ZCxJW3QraisyNF09cCxJW3QraiszMl09dixJW3Qrais0MF09eSxJW3Qrais0OF09bSxJW3Qrais1Nl09Rik6KFA9KFA9QSpmKzgxOTI+PjE0KTwtMjA0MD8wOlA+PTIwMjQ/MjU1OlArMjA1Nj4+NCxJW3Qral09UCxJW3Qrais4XT1QLElbdCtqKzE2XT1QLElbdCtqKzI0XT1QLElbdCtqKzMyXT1QLElbdCtqKzQwXT1QLElbdCtqKzQ4XT1QLElbdCtqKzU2XT1QKX1mdW5jdGlvbiBFKGUsdCl7Zm9yKHZhciByPXQuYmxvY2tzUGVyTGluZSxuPXQuYmxvY2tzUGVyQ29sdW1uLGE9bmV3IEludDE2QXJyYXkoNjQpLGk9MDtpPG47aSsrKWZvcih2YXIgbz0wO288cjtvKyspSSh0LFAodCxpLG8pLGEpO3JldHVybiB0LmJsb2NrRGF0YX1mdW5jdGlvbiBqKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnQsbj1lLmxlbmd0aC0xLGk9cjx0P3I6dDtpZih0Pj1uKXJldHVybiBudWxsO3ZhciBvPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZihvPj02NTQ3MiYmbzw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6byxvZmZzZXQ6dH07Zm9yKHZhciBzPSgwLGEucmVhZFVpbnQxNikoZSxpKTshKHM+PTY1NDcyJiZzPD02NTUzNCk7KXtpZigrK2k+PW4pcmV0dXJuIG51bGw7cz0oMCxhLnJlYWRVaW50MTYpKGUsaSl9cmV0dXJue2ludmFsaWQ6by50b1N0cmluZygxNiksbWFya2VyOnMsb2Zmc2V0Oml9fXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXQuZGVjb2RlVHJhbnNmb3JtLG49dm9pZCAwPT09cj9udWxsOnIsYT10LmNvbG9yVHJhbnNmb3JtLGk9dm9pZCAwPT09YT8tMTphO2wodGhpcyxlKSx0aGlzLl9kZWNvZGVUcmFuc2Zvcm09bix0aGlzLl9jb2xvclRyYW5zZm9ybT1pfXJldHVybiB1KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5kbmxTY2FuTGluZXMscj12b2lkIDA9PT10P251bGw6dDtmdW5jdGlvbiBvKCl7dmFyIHQ9KDAsYS5yZWFkVWludDE2KShlLGwpLHI9KGwrPTIpK3QtMixpPWooZSxyLGwpO2kmJmkuaW52YWxpZCYmKCgwLG4ud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIitpLmludmFsaWQpLHI9aS5vZmZzZXQpO3ZhciBvPWUuc3ViYXJyYXkobCxyKTtyZXR1cm4gbCs9by5sZW5ndGgsb31mdW5jdGlvbiBzKGUpe3ZhciB0LHI9TWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOC9lLm1heEgpLG49TWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgvZS5tYXhWKSxhPWkoZS5jb21wb25lbnRzKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBvPXQudmFsdWUscz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqby5oL2UubWF4SCksYz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKm8udi9lLm1heFYpLHU9cipvLmgsbD1uKm8udio2NCoodSsxKTtvLmJsb2NrRGF0YT1uZXcgSW50MTZBcnJheShsKSxvLmJsb2Nrc1BlckxpbmU9cyxvLmJsb2Nrc1BlckNvbHVtbj1jfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLm1jdXNQZXJMaW5lPXIsZS5tY3VzUGVyQ29sdW1uPW59dmFyIGMsdSxsPTAsZj1udWxsLGg9bnVsbCxkPTAscD1bXSxiPVtdLHc9W10saz0oMCxhLnJlYWRVaW50MTYpKGUsbCk7aWYobCs9Miw2NTQ5NiE9PWspdGhyb3cgbmV3IGcoIlNPSSBub3QgZm91bmQiKTtrPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yO2U6Zm9yKDs2NTQ5NyE9PWs7KXt2YXIgUz12b2lkIDAseD12b2lkIDAsTz12b2lkIDA7c3dpdGNoKGspe2Nhc2UgNjU1MDQ6Y2FzZSA2NTUwNTpjYXNlIDY1NTA2OmNhc2UgNjU1MDc6Y2FzZSA2NTUwODpjYXNlIDY1NTA5OmNhc2UgNjU1MTA6Y2FzZSA2NTUxMTpjYXNlIDY1NTEyOmNhc2UgNjU1MTM6Y2FzZSA2NTUxNDpjYXNlIDY1NTE1OmNhc2UgNjU1MTY6Y2FzZSA2NTUxNzpjYXNlIDY1NTE4OmNhc2UgNjU1MTk6Y2FzZSA2NTUzNDp2YXIgQT1vKCk7NjU1MDQ9PT1rJiY3ND09PUFbMF0mJjcwPT09QVsxXSYmNzM9PT1BWzJdJiY3MD09PUFbM10mJjA9PT1BWzRdJiYoZj17dmVyc2lvbjp7bWFqb3I6QVs1XSxtaW5vcjpBWzZdfSxkZW5zaXR5VW5pdHM6QVs3XSx4RGVuc2l0eTpBWzhdPDw4fEFbOV0seURlbnNpdHk6QVsxMF08PDh8QVsxMV0sdGh1bWJXaWR0aDpBWzEyXSx0aHVtYkhlaWdodDpBWzEzXSx0aHVtYkRhdGE6QS5zdWJhcnJheSgxNCwxNCszKkFbMTJdKkFbMTNdKX0pLDY1NTE4PT09ayYmNjU9PT1BWzBdJiYxMDA9PT1BWzFdJiYxMTE9PT1BWzJdJiY5OD09PUFbM10mJjEwMT09PUFbNF0mJihoPXt2ZXJzaW9uOkFbNV08PDh8QVs2XSxmbGFnczA6QVs3XTw8OHxBWzhdLGZsYWdzMTpBWzldPDw4fEFbMTBdLHRyYW5zZm9ybUNvZGU6QVsxMV19KTticmVhaztjYXNlIDY1NDk5OmZvcih2YXIgQz0oMCxhLnJlYWRVaW50MTYpKGUsbCkrKGwrPTIpLTI7bDxDOyl7dmFyIFA9ZVtsKytdLEk9bmV3IFVpbnQxNkFycmF5KDY0KTtpZihQPj40PT0wKWZvcih4PTA7eDw2NDt4KyspSVttW3hdXT1lW2wrK107ZWxzZXtpZihQPj40IT0xKXRocm93IG5ldyBnKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3IoeD0wO3g8NjQ7eCsrKUlbbVt4XV09KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9cFsxNSZQXT1JfWJyZWFrO2Nhc2UgNjU0NzI6Y2FzZSA2NTQ3MzpjYXNlIDY1NDc0OmlmKGMpdGhyb3cgbmV3IGcoIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZCIpO2wrPTIsKGM9e30pLmV4dGVuZGVkPTY1NDczPT09ayxjLnByb2dyZXNzaXZlPTY1NDc0PT09ayxjLnByZWNpc2lvbj1lW2wrK107dmFyIE09KDAsYS5yZWFkVWludDE2KShlLGwpO2wrPTIsYy5zY2FuTGluZXM9cnx8TSxjLnNhbXBsZXNQZXJMaW5lPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yLGMuY29tcG9uZW50cz1bXSxjLmNvbXBvbmVudElkcz17fTt2YXIgXz1lW2wrK10sTD0wLFI9MDtmb3IoUz0wO1M8XztTKyspe3ZhciBOPWVbbF0sRD1lW2wrMV0+PjQsQj0xNSZlW2wrMV07TDxEJiYoTD1EKSxSPEImJihSPUIpO3ZhciBVPWVbbCsyXTtPPWMuY29tcG9uZW50cy5wdXNoKHtoOkQsdjpCLHF1YW50aXphdGlvbklkOlUscXVhbnRpemF0aW9uVGFibGU6bnVsbH0pLGMuY29tcG9uZW50SWRzW05dPU8tMSxsKz0zfWMubWF4SD1MLGMubWF4Vj1SLHMoYyk7YnJlYWs7Y2FzZSA2NTQ3Njp2YXIgJD0oMCxhLnJlYWRVaW50MTYpKGUsbCk7Zm9yKGwrPTIsUz0yO1M8JDspe3ZhciBYPWVbbCsrXSxIPW5ldyBVaW50OEFycmF5KDE2KSxxPTA7Zm9yKHg9MDt4PDE2O3grKyxsKyspcSs9SFt4XT1lW2xdO3ZhciBHPW5ldyBVaW50OEFycmF5KHEpO2Zvcih4PTA7eDxxO3grKyxsKyspR1t4XT1lW2xdO1MrPTE3K3EsKFg+PjQ9PTA/dzpiKVsxNSZYXT1GKEgsRyl9YnJlYWs7Y2FzZSA2NTUwMTpsKz0yLHU9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTI7YnJlYWs7Y2FzZSA2NTQ5ODp2YXIgej0xPT0rK2QmJiFyO2wrPTI7dmFyIFc9ZVtsKytdLFY9W107Zm9yKFM9MDtTPFc7UysrKXt2YXIgWT1lW2wrK10sSz1jLmNvbXBvbmVudElkc1tZXSxKPWMuY29tcG9uZW50c1tLXTtKLmluZGV4PVk7dmFyIFo9ZVtsKytdO0ouaHVmZm1hblRhYmxlREM9d1taPj40XSxKLmh1ZmZtYW5UYWJsZUFDPWJbMTUmWl0sVi5wdXNoKEopfXZhciBRPWVbbCsrXSxlZT1lW2wrK10sdGU9ZVtsKytdO3RyeXt2YXIgcmU9VChlLGwsYyxWLHUsUSxlZSx0ZT4+NCwxNSZ0ZSx6KTtsKz1yZX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgdilyZXR1cm4oMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLiIpKSx0aGlzLnBhcnNlKGUse2RubFNjYW5MaW5lczp0LnNjYW5MaW5lc30pO2lmKHQgaW5zdGFuY2VvZiB5KXsoMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS4iKSk7YnJlYWsgZX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6bCs9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbbF0mJmwtLTticmVhaztkZWZhdWx0OnZhciBuZT1qKGUsbC0yLGwtMyk7aWYobmUmJm5lLmludmFsaWQpeygwLG4ud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrbmUuaW52YWxpZCksbD1uZS5vZmZzZXQ7YnJlYWt9aWYoIW5lfHxsPj1lLmxlbmd0aC0xKXsoMCxuLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgd2l0aG91dCBmaW5kaW5nIGFuIEVPSSBtYXJrZXIgKDB4RkZEOSkuIik7YnJlYWsgZX10aHJvdyBuZXcgZygiSnBlZ0ltYWdlLnBhcnNlIC0gdW5rbm93biBtYXJrZXI6ICIray50b1N0cmluZygxNikpfWs9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9dGhpcy53aWR0aD1jLnNhbXBsZXNQZXJMaW5lLHRoaXMuaGVpZ2h0PWMuc2NhbkxpbmVzLHRoaXMuamZpZj1mLHRoaXMuYWRvYmU9aCx0aGlzLmNvbXBvbmVudHM9W107dmFyIGFlLGllPWkoYy5jb21wb25lbnRzKTt0cnl7Zm9yKGllLnMoKTshKGFlPWllLm4oKSkuZG9uZTspe3ZhciBvZT1hZS52YWx1ZSxzZT1wW29lLnF1YW50aXphdGlvbklkXTtzZSYmKG9lLnF1YW50aXphdGlvblRhYmxlPXNlKSx0aGlzLmNvbXBvbmVudHMucHVzaCh7aW5kZXg6b2UuaW5kZXgsb3V0cHV0OkUoMCxvZSksc2NhbGVYOm9lLmgvYy5tYXhILHNjYWxlWTpvZS52L2MubWF4VixibG9ja3NQZXJMaW5lOm9lLmJsb2Nrc1BlckxpbmUsYmxvY2tzUGVyQ29sdW1uOm9lLmJsb2Nrc1BlckNvbHVtbn0pfX1jYXRjaChlKXtpZS5lKGUpfWZpbmFsbHl7aWUuZigpfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofX0se2tleToiX2dldExpbmVhcml6ZWRCbG9ja0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGksbyxzLGMsdSxsLGYsaCxkLHA9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxnPXRoaXMud2lkdGgvZSx2PXRoaXMuaGVpZ2h0L3QseT0wLG09dGhpcy5jb21wb25lbnRzLmxlbmd0aCxiPWUqdCptLHc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGIpLGs9bmV3IFVpbnQzMkFycmF5KGUpLFM9NDI5NDk2NzI4ODtmb3IoYz0wO2M8bTtjKyspe2lmKG49KHI9dGhpcy5jb21wb25lbnRzW2NdKS5zY2FsZVgqZyxhPXIuc2NhbGVZKnYseT1jLGg9ci5vdXRwdXQsaT1yLmJsb2Nrc1BlckxpbmUrMTw8MyxuIT09ZCl7Zm9yKG89MDtvPGU7bysrKXU9MHxvKm4sa1tvXT0odSZTKTw8M3w3JnU7ZD1ufWZvcihzPTA7czx0O3MrKylmb3IoZj1pKigodT0wfHMqYSkmUyl8KDcmdSk8PDMsbz0wO288ZTtvKyspd1t5XT1oW2Yra1tvXV0seSs9bX12YXIgeD10aGlzLl9kZWNvZGVUcmFuc2Zvcm07aWYocHx8NCE9PW18fHh8fCh4PW5ldyBJbnQzMkFycmF5KFstMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NV0pKSx4KWZvcihjPTA7YzxiOylmb3IodT0wLGw9MDt1PG07dSsrLGMrKyxsKz0yKXdbY109KHdbY10qeFtsXT4+OCkreFtsKzFdO3JldHVybiB3fX0se2tleToiX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZG9iZT8hIXRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZTozPT09dGhpcy5udW1Db21wb25lbnRzPzAhPT10aGlzLl9jb2xvclRyYW5zZm9ybSYmKDgyIT09dGhpcy5jb21wb25lbnRzWzBdLmluZGV4fHw3MSE9PXRoaXMuY29tcG9uZW50c1sxXS5pbmRleHx8NjYhPT10aGlzLmNvbXBvbmVudHNbMl0uaW5kZXgpOjE9PT10aGlzLl9jb2xvclRyYW5zZm9ybX19LHtrZXk6Il9jb252ZXJ0WWNjVG9SZ2IiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYT0wLGk9ZS5sZW5ndGg7YTxpO2ErPTMpdD1lW2FdLHI9ZVthKzFdLG49ZVthKzJdLGVbYV09dC0xNzkuNDU2KzEuNDAyKm4sZVthKzFdPXQrMTM1LjQ1OS0uMzQ0KnItLjcxNCpuLGVbYSsyXT10LTIyNi44MTYrMS43NzIqcjtyZXR1cm4gZX19LHtrZXk6Il9jb252ZXJ0WWNja1RvUmdiIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGEsaT0wLG89MCxzPWUubGVuZ3RoO288cztvKz00KXQ9ZVtvXSxyPWVbbysxXSxuPWVbbysyXSxhPWVbbyszXSxlW2krK109ciooLTY2MDYzNTY2OTQyMDM2NGUtMTkqcisuMDAwNDM3MTMwNDc1OTI2MjMyKm4tNTQwODA2MTAwNjQ1OTllLTE4KnQrLjAwMDQ4NDQ5Nzk3MTIwMjgxKmEtLjE1NDM2MjE1MTg3MTEyNiktMTIyLjY3MTk1NDA2ODk0K24qKC0uMDAwOTU3OTY0Mzc4NDQ1NzczKm4rLjAwMDgxNzA3NjkxMTM0NjYyNSp0LS4wMDQ3NzI3MTQwNTQwODc0NyphKzEuNTMzODAyNTMyMjE3MzQpK3QqKC4wMDA5NjEyNTAxODQxMzA2ODgqdC0uMDAyNjYyNTczMzIyODM5MzMqYSsuNDgzNTcwODg0NTEyNjUpK2EqKC0uMDAwMzM2MTk3MTc3NjE4Mzk0KmErLjQ4NDc5MTU2MTQ5MDc3NiksZVtpKytdPTEwNy4yNjgwMzkzOTc3MjQrciooMjE5OTI3MTA0NTI1NzQxZS0xOSpyLS4wMDA2NDA5OTIwMTgyOTc5NDUqbisuMDAwNjU5Mzk3MDAxMjQ1NTc3KnQrLjAwMDQyNjEwNTY1MjkzODgzNyphLS4xNzY0OTE3OTI0NjI4NzUpK24qKC0uMDAwNzc4MjY5OTQxNTEzNjgzKm4rLjAwMTMwODcyMjYxNDA4Mjc1KnQrLjAwMDc3MDQ4MjYzMTgwMTEzMiphLS4xNTEwNTE0OTI3NzU1NjIpK3QqKC4wMDEyNjkzNTM2ODExNDg0Myp0LS4wMDI2NTA5MDE4OTAxMDg5OCphKy4yNTgwMjkxMDIwNjg0NSkrYSooLS4wMDAzMTg5MTMxMTc1ODgzMjgqYS0uMjEzNzQyNDAwMzIzNjY1KSxlW2krK109ciooLS4wMDA1NzAxMTUxOTY5NzM2Nzcqci0yNjM0MDkwNTEwMDQ1ODllLTE5Km4rLjAwMjA3NDEwODgxMTUwMTIqdC0uMDAyODgyNjAyMzY4NTM0NDIqYSsuODE0MjcyOTY4MzU5Mjk1KS0yMC44MTAwMTI1NDY5NDcrbiooLTE1MzQ5NjA1NzQ0MDk3NWUtMTkqbi0uMDAwMTMyNjg5MDQzOTYxNDQ2KnQrLjAwMDU2MDgzMzY5MTI0MjgxMiphLS4xOTUxNTIwMjc1MzQwNDkpK3QqKC4wMDE3NDQxODEzMjkyNzU4Mip0LS4wMDI1NTI0MzMyMTQzOTM0NyphKy4xMTY5MzUwMjA0NjUxNDUpK2EqKC0uMDAwMzQzNTMxOTk2NTEwNTU1KmErLjI0MTY1MjYwMjMyNDA3KTtyZXR1cm4gZS5zdWJhcnJheSgwLGkpfX0se2tleToiX2NvbnZlcnRZY2NrVG9DbXlrIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGE9MCxpPWUubGVuZ3RoO2E8aTthKz00KXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPTQzNC40NTYtdC0xLjQwMipuLGVbYSsxXT0xMTkuNTQxLXQrLjM0NCpyKy43MTQqbixlW2ErMl09NDgxLjgxNi10LTEuNzcyKnI7cmV0dXJuIGV9fSx7a2V5OiJfY29udmVydENteWtUb1JnYiIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixhLGk9MCxvPTAscz1lLmxlbmd0aDtvPHM7bys9NCl0PWVbb10scj1lW28rMV0sbj1lW28rMl0sYT1lW28rM10sZVtpKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNypyKy4wMDAyODk0NzE4MTg4NjQzMjk0Km4rLjAwMzI2NDIzMTA1NzUzNzgwNiphLTEuMTE4NTYxMTg2NzIwMzkzNykrciooMjYzNzQxMDc2MTYwODk0MDVlLTIxKnItODYyNjk0OTE1ODYzODU3MmUtMjAqbi0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSphLS4wMjE1NTY4ODc5NDk3ODk2NykrbiooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKm4tLjAwMDMyNjc4MDgyNzk0ODUyODYqYSsuMDY4Njc0MjIzODU5NTM0NSktYSooLjAwMDMzNjE5NzE3NzYxODM5MzcqYSsuNzQzMDY1OTE1MTM0MjI1NCksZVtpKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KnIrLjAwMDEwNTY3MzU5NjE4NjgzNTkzKm4rLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqYS0uMzEwOTY4OTU4NzUxNTg3NSkrciooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCpyKy4wMDAyNzAyODQ1MjUzNTM0NzE0Km4rLjAwMjAyMDAzMDg5NzczMDcxNTYqYS0uNzQ4ODA1MjE2NzAxNTQ5NCkrbiooNjgzNDgxNTk5ODIzNTY2MmUtMjAqbisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqYS0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLWEqKC4wMDAzMTg5MTMxMTc1ODgzMjgxKmErLjczNjQ4ODM4MDc3MzMxNjgpLGVbaSsrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKnIrLjAwMDQ3NTE5ODUwOTc1ODM1ODkqbi0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqYS0uMDU1NjIxODY5ODAyNjQwMzQpK3IqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NipyKy4wMDA5NjkyMjM5MTMwNzI1MTg2Km4rLjAwMDc3ODI2OTI0NTAwMzYyNTMqYS0uNDQwMTUyMzIzNjc1MjY0NjMpK24qKDUuMDY4ODgyOTE0MDY4NzY5ZS03Km4rLjAwMTc3NzgzNjkwMTEzNzUwNzEqYS0uNzU5MTQ1NDY0OTc0OTYwOSktYSooLjAwMDM0MzUzMTk5NjUxMDU1NTMqYSsuNzA2Mzc3MDE4NjE2MDE0NCk7cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX19LHtrZXk6ImdldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUud2lkdGgscj1lLmhlaWdodCxuPWUuZm9yY2VSR0IsYT12b2lkIDAhPT1uJiZuLG89ZS5pc1NvdXJjZVBERixzPXZvaWQgMCE9PW8mJm87aWYodGhpcy5udW1Db21wb25lbnRzPjQpdGhyb3cgbmV3IGcoIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGUiKTt2YXIgYz10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHQscixzKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiZhKXt2YXIgdSxsPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmMubGVuZ3RoKSxmPTAsaD1pKGMpO3RyeXtmb3IoaC5zKCk7ISh1PWgubigpKS5kb25lOyl7dmFyIGQ9dS52YWx1ZTtsW2YrK109ZCxsW2YrK109ZCxsW2YrK109ZH19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGx9aWYoMz09PXRoaXMubnVtQ29tcG9uZW50cyYmdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihjKTtpZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gYT90aGlzLl9jb252ZXJ0WWNja1RvUmdiKGMpOnRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKGMpO2lmKGEpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoYyl9cmV0dXJuIGN9fV0pLGV9KCk7dC5KcGVnSW1hZ2U9TX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSnB4U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDE1OSksbz1yKDIpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX12YXIgbD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYyhlLHQpfShoLGUpO3ZhciB0LHIsYSxsLGY9KGE9aCxsPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9dShhKTtpZihsKXt2YXIgcj11KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBoKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxoKSwobj1mLmNhbGwodGhpcyx0KSkuc3RyZWFtPWUsbi5kaWN0PWUuZGljdCxuLm1heWJlTGVuZ3RoPXQsbi5wYXJhbXM9cixufXJldHVybiB0PWgsKHI9W3trZXk6ImJ5dGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmVvZil7dmFyIGU9bmV3IGkuSnB4SW1hZ2U7ZS5wYXJzZSh0aGlzLmJ5dGVzKTt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQsbj1lLmNvbXBvbmVudHNDb3VudCxhPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1hKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtmb3IodmFyIG89bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqcipuKSxzPTA7czxhO3MrKylmb3IodmFyIGM9ZS50aWxlc1tzXSx1PWMud2lkdGgsbD1jLmhlaWdodCxmPWMubGVmdCxoPWMudG9wLGQ9Yy5pdGVtcyxwPTAsZz0odCpoK2YpKm4sdj10Km4seT11Km4sbT0wO208bDttKyspe3ZhciBiPWQuc3ViYXJyYXkocCxwK3kpO28uc2V0KGIsZykscCs9eSxnKz12fXRoaXMuYnVmZmVyPW99dGhpcy5idWZmZXJMZW5ndGg9dGhpcy5idWZmZXIubGVuZ3RoLHRoaXMuZW9mPSEwfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksaH0oYS5EZWNvZGVTdHJlYW0pO3QuSnB4U3RyZWFtPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpweEltYWdlPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxMzUpLG89cigxNTUpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZihlLHQpfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZChlKTtpZih0KXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9dmFyIHA9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLCJKUFggZXJyb3I6ICIuY29uY2F0KGUpLCJKcHhFcnJvciIpfXJldHVybiBjKHIpfShhLkJhc2VFeGNlcHRpb24pLGc9e0xMOjAsTEg6MSxITDoxLEhIOjJ9LHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dSh0aGlzLGUpLHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2U9ITF9cmV0dXJuIGMoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDY1MzU5IT09KDAsaS5yZWFkVWludDE2KShlLDApKWZvcih2YXIgdD1lLmxlbmd0aCxyPTA7cjx0Oyl7dmFyIG49OCxvPSgwLGkucmVhZFVpbnQzMikoZSxyKSxzPSgwLGkucmVhZFVpbnQzMikoZSxyKzQpO2lmKHIrPW4sMT09PW8mJihvPTQyOTQ5NjcyOTYqKDAsaS5yZWFkVWludDMyKShlLHIpKygwLGkucmVhZFVpbnQzMikoZSxyKzQpLHIrPTgsbis9OCksMD09PW8mJihvPXQtcituKSxvPG4pdGhyb3cgbmV3IHAoIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTt2YXIgYz1vLW4sdT0hMDtzd2l0Y2gocyl7Y2FzZSAxNzg1NzM3ODMyOnU9ITE7YnJlYWs7Y2FzZSAxNjY4MjQ2NjQyOnZhciBsPWVbcl07aWYoMT09PWwpe3ZhciBmPSgwLGkucmVhZFVpbnQzMikoZSxyKzMpO3N3aXRjaChmKXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLGEud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK2YpfX1lbHNlIDI9PT1sJiYoMCxhLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUscixyK2MpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLGkucmVhZFVpbnQzMikoZSxyKSYmKDAsYS53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OnZhciBoPVN0cmluZy5mcm9tQ2hhckNvZGUocz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyk7KDAsYS53YXJuKSgiVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgIi5jb25jYXQocywiICgiKS5jb25jYXQoaCwiKS4iKSl9dSYmKHIrPWMpfWVsc2UgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZSwwLGUubGVuZ3RoKX19LHtrZXk6InBhcnNlSW1hZ2VQcm9wZXJ0aWVzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5nZXRCeXRlKCk7dD49MDspaWYoNjUzNjE9PSh0PDw4fCh0PWUuZ2V0Qnl0ZSgpKSkpe2Uuc2tpcCg0KTt2YXIgcj1lLmdldEludDMyKCk+Pj4wLG49ZS5nZXRJbnQzMigpPj4+MCxhPWUuZ2V0SW50MzIoKT4+PjAsaT1lLmdldEludDMyKCk+Pj4wO2Uuc2tpcCgxNik7dmFyIG89ZS5nZXRVaW50MTYoKTtyZXR1cm4gdGhpcy53aWR0aD1yLWEsdGhpcy5oZWlnaHQ9bi1pLHRoaXMuY29tcG9uZW50c0NvdW50PW8sdm9pZCh0aGlzLmJpdHNQZXJDb21wb25lbnQ9OCl9dGhyb3cgbmV3IHAoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX19LHtrZXk6InBhcnNlQ29kZXN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXt9LG89ITE7dHJ5e2Zvcih2YXIgcz10O3MrMTxyOyl7dmFyIGM9KDAsaS5yZWFkVWludDE2KShlLHMpO3MrPTI7dmFyIHU9MCxsPXZvaWQgMCxmPXZvaWQgMCxoPXZvaWQgMCxkPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2goYyl7Y2FzZSA2NTM1OTpuLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOnU9KDAsaS5yZWFkVWludDE2KShlLHMpO3ZhciBiPXt9O2IuWHNpej0oMCxpLnJlYWRVaW50MzIpKGUscys0KSxiLllzaXo9KDAsaS5yZWFkVWludDMyKShlLHMrOCksYi5YT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxMiksYi5ZT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxNiksYi5YVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyMCksYi5ZVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyNCksYi5YVE9zaXo9KDAsaS5yZWFkVWludDMyKShlLHMrMjgpLGIuWVRPc2l6PSgwLGkucmVhZFVpbnQzMikoZSxzKzMyKTt2YXIgdz0oMCxpLnJlYWRVaW50MTYpKGUscyszNik7Yi5Dc2l6PXc7dmFyIGs9W107bD1zKzM4O2Zvcih2YXIgUz0wO1M8dztTKyspe3ZhciB4PXtwcmVjaXNpb246MSsoMTI3JmVbbF0pLGlzU2lnbmVkOiEhKDEyOCZlW2xdKSxYUnNpejplW2wrMV0sWVJzaXo6ZVtsKzJdfTtsKz0zLHkoeCxiKSxrLnB1c2goeCl9bi5TSVo9YixuLmNvbXBvbmVudHM9ayxtKG4sayksbi5RQ0M9W10sbi5DT0M9W107YnJlYWs7Y2FzZSA2NTM3Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgTz17fTtzd2l0Y2gobD1zKzIsMzEmKGY9ZVtsKytdKSl7Y2FzZSAwOmQ9OCxnPSEwO2JyZWFrO2Nhc2UgMTpkPTE2LGc9ITE7YnJlYWs7Y2FzZSAyOmQ9MTYsZz0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrZil9Zm9yKE8ubm9RdWFudGl6YXRpb249OD09PWQsTy5zY2FsYXJFeHBvdW5kZWQ9ZyxPLmd1YXJkQml0cz1mPj41LGg9W107bDx1K3M7KXt2YXIgQT17fTs4PT09ZD8oQS5lcHNpbG9uPWVbbCsrXT4+MyxBLm11PTApOihBLmVwc2lsb249ZVtsXT4+MyxBLm11PSg3JmVbbF0pPDw4fGVbbCsxXSxsKz0yKSxoLnB1c2goQSl9Ty5TUHFjZHM9aCxuLm1haW5IZWFkZXI/bi5RQ0Q9Tzoobi5jdXJyZW50VGlsZS5RQ0Q9TyxuLmN1cnJlbnRUaWxlLlFDQz1bXSk7YnJlYWs7Y2FzZSA2NTM3Mzp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgQz17fTtsPXMrMjt2YXIgRj12b2lkIDA7c3dpdGNoKG4uU0laLkNzaXo8MjU3P0Y9ZVtsKytdOihGPSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yKSwzMSYoZj1lW2wrK10pKXtjYXNlIDA6ZD04LGc9ITA7YnJlYWs7Y2FzZSAxOmQ9MTYsZz0hMTticmVhaztjYXNlIDI6ZD0xNixnPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitmKX1mb3IoQy5ub1F1YW50aXphdGlvbj04PT09ZCxDLnNjYWxhckV4cG91bmRlZD1nLEMuZ3VhcmRCaXRzPWY+PjUsaD1bXTtsPHUrczspe3ZhciBQPXt9Ozg9PT1kPyhQLmVwc2lsb249ZVtsKytdPj4zLFAubXU9MCk6KFAuZXBzaWxvbj1lW2xdPj4zLFAubXU9KDcmZVtsXSk8PDh8ZVtsKzFdLGwrPTIpLGgucHVzaChQKX1DLlNQcWNkcz1oLG4ubWFpbkhlYWRlcj9uLlFDQ1tGXT1DOm4uY3VycmVudFRpbGUuUUNDW0ZdPUM7YnJlYWs7Y2FzZSA2NTM2Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgVD17fTtsPXMrMjt2YXIgaj1lW2wrK107VC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmaiksVC5zb3BNYXJrZXJVc2VkPSEhKDImaiksVC5lcGhNYXJrZXJVc2VkPSEhKDQmaiksVC5wcm9ncmVzc2lvbk9yZGVyPWVbbCsrXSxULmxheWVyc0NvdW50PSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yLFQubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVtsKytdLFQuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbbCsrXSxULnhjYj0yKygxNSZlW2wrK10pLFQueWNiPTIrKDE1JmVbbCsrXSk7dmFyIEw9ZVtsKytdO2lmKFQuc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcz0hISgxJkwpLFQucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcz0hISgyJkwpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzPSEhKDQmTCksVC52ZXJ0aWNhbGx5U3RyaXBlPSEhKDgmTCksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uPSEhKDE2JkwpLFQuc2VnbWVudGF0aW9uU3ltYm9sVXNlZD0hISgzMiZMKSxULnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbj1lW2wrK10sVC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKXtmb3IodmFyIFI9W107bDx1K3M7KXt2YXIgTj1lW2wrK107Ui5wdXNoKHtQUHg6MTUmTixQUHk6Tj4+NH0pfVQucHJlY2luY3RzU2l6ZXM9Un12YXIgRD1bXTtULnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJkQucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZELnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpLFQudmVydGljYWxseVN0cmlwZSYmRC5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIiksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZELnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKSxELmxlbmd0aD4wJiYobz0hMCwoMCxhLndhcm4pKCJKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgiLmNvbmNhdChELmpvaW4oIiwgIiksIikuIikpKSxuLm1haW5IZWFkZXI/bi5DT0Q9VDoobi5jdXJyZW50VGlsZS5DT0Q9VCxuLmN1cnJlbnRUaWxlLkNPQz1bXSk7YnJlYWs7Y2FzZSA2NTQyNDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKSwodj17fSkuaW5kZXg9KDAsaS5yZWFkVWludDE2KShlLHMrMiksdi5sZW5ndGg9KDAsaS5yZWFkVWludDMyKShlLHMrNCksdi5kYXRhRW5kPXYubGVuZ3RoK3MtMix2LnBhcnRJbmRleD1lW3MrOF0sdi5wYXJ0c0NvdW50PWVbcys5XSxuLm1haW5IZWFkZXI9ITEsMD09PXYucGFydEluZGV4JiYodi5DT0Q9bi5DT0Qsdi5DT0M9bi5DT0Muc2xpY2UoMCksdi5RQ0Q9bi5RQ0Qsdi5RQ0M9bi5RQ0Muc2xpY2UoMCkpLG4uY3VycmVudFRpbGU9djticmVhaztjYXNlIDY1NDI3OjA9PT0odj1uLmN1cnJlbnRUaWxlKS5wYXJ0SW5kZXgmJihfKG4sdi5pbmRleCksSShuKSksRShuLGUscyx1PXYuZGF0YUVuZC1zKTticmVhaztjYXNlIDY1MzYzOigwLGEud2FybikoIkpQWDogQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQuIik7Y2FzZSA2NTM2NTpjYXNlIDY1MzY3OmNhc2UgNjUzNjg6Y2FzZSA2NTM4MDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICIrYy50b1N0cmluZygxNikpfXMrPXV9fWNhdGNoKGUpe2lmKG98fHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpdGhyb3cgbmV3IHAoZS5tZXNzYWdlKTsoMCxhLndhcm4pKCdKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICInLmNvbmNhdChlLm1lc3NhZ2UsJyIuJykpfXRoaXMudGlsZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jb21wb25lbnRzLG49dC5Dc2l6LGE9W10saT0wLG89ZS50aWxlcy5sZW5ndGg7aTxvO2krKyl7Zm9yKHZhciBzPWUudGlsZXNbaV0sYz1bXSx1PTA7dTxuO3UrKyljW3VdPU0oZSxzLHUpO3ZhciBsPWNbMF0sZj1uZXcgVWludDhDbGFtcGVkQXJyYXkobC5pdGVtcy5sZW5ndGgqbiksaD17bGVmdDpsLmxlZnQsdG9wOmwudG9wLHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LGl0ZW1zOmZ9LGQ9dm9pZCAwLHA9dm9pZCAwLGc9MCx2PXZvaWQgMCx5PXZvaWQgMCxtPXZvaWQgMCxiPXZvaWQgMCx3PXZvaWQgMDtpZihzLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm0pe3ZhciBrPTQ9PT1uLFM9Y1swXS5pdGVtcyx4PWNbMV0uaXRlbXMsTz1jWzJdLml0ZW1zLEE9az9jWzNdLml0ZW1zOm51bGw7cD0uNSsoMTI4PDwoZD1yWzBdLnByZWNpc2lvbi04KSk7dmFyIEM9cy5jb21wb25lbnRzWzBdLEY9bi0zO2lmKHk9Uy5sZW5ndGgsQy5jb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uKWZvcih2PTA7djx5O3YrKyxnKz1GKXttPVNbdl0rcCxiPXhbdl07dmFyIFA9bS0oKHc9T1t2XSkrYj4+Mik7ZltnKytdPVArdz4+ZCxmW2crK109UD4+ZCxmW2crK109UCtiPj5kfWVsc2UgZm9yKHY9MDt2PHk7disrLGcrPUYpbT1TW3ZdK3AsYj14W3ZdLHc9T1t2XSxmW2crK109bSsxLjQwMip3Pj5kLGZbZysrXT1tLS4zNDQxMypiLS43MTQxNCp3Pj5kLGZbZysrXT1tKzEuNzcyKmI+PmQ7aWYoaylmb3Iodj0wLGc9Mzt2PHk7disrLGcrPTQpZltnXT1BW3ZdK3A+PmR9ZWxzZSBmb3IodmFyIFQ9MDtUPG47VCsrKXt2YXIgST1jW1RdLml0ZW1zO2ZvcihwPS41KygxMjg8PChkPXJbVF0ucHJlY2lzaW9uLTgpKSxnPVQsdj0wLHk9SS5sZW5ndGg7djx5O3YrKylmW2ddPUlbdl0rcD4+ZCxnKz1ufWEucHVzaChoKX1yZXR1cm4gYX0obiksdGhpcy53aWR0aD1uLlNJWi5Yc2l6LW4uU0laLlhPc2l6LHRoaXMuaGVpZ2h0PW4uU0laLllzaXotbi5TSVouWU9zaXosdGhpcy5jb21wb25lbnRzQ291bnQ9bi5TSVouQ3Npen19XSksZX0oKTtmdW5jdGlvbiB5KGUsdCl7ZS54MD1NYXRoLmNlaWwodC5YT3Npei9lLlhSc2l6KSxlLngxPU1hdGguY2VpbCh0LlhzaXovZS5YUnNpeiksZS55MD1NYXRoLmNlaWwodC5ZT3Npei9lLllSc2l6KSxlLnkxPU1hdGguY2VpbCh0LllzaXovZS5ZUnNpeiksZS53aWR0aD1lLngxLWUueDAsZS5oZWlnaHQ9ZS55MS1lLnkwfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIHIsbj1lLlNJWixhPVtdLGk9TWF0aC5jZWlsKChuLlhzaXotbi5YVE9zaXopL24uWFRzaXopLG89TWF0aC5jZWlsKChuLllzaXotbi5ZVE9zaXopL24uWVRzaXopLHM9MDtzPG87cysrKWZvcih2YXIgYz0wO2M8aTtjKyspKHI9e30pLnR4MD1NYXRoLm1heChuLlhUT3NpeitjKm4uWFRzaXosbi5YT3Npeiksci50eTA9TWF0aC5tYXgobi5ZVE9zaXorcypuLllUc2l6LG4uWU9zaXopLHIudHgxPU1hdGgubWluKG4uWFRPc2l6KyhjKzEpKm4uWFRzaXosbi5Yc2l6KSxyLnR5MT1NYXRoLm1pbihuLllUT3NpeisocysxKSpuLllUc2l6LG4uWXNpeiksci53aWR0aD1yLnR4MS1yLnR4MCxyLmhlaWdodD1yLnR5MS1yLnR5MCxyLmNvbXBvbmVudHM9W10sYS5wdXNoKHIpO2UudGlsZXM9YTtmb3IodmFyIHU9MCxsPW4uQ3Npejt1PGw7dSsrKWZvcih2YXIgZj10W3VdLGg9MCxkPWEubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPXt9O3I9YVtoXSxwLnRjeDA9TWF0aC5jZWlsKHIudHgwL2YuWFJzaXopLHAudGN5MD1NYXRoLmNlaWwoci50eTAvZi5ZUnNpeikscC50Y3gxPU1hdGguY2VpbChyLnR4MS9mLlhSc2l6KSxwLnRjeTE9TWF0aC5jZWlsKHIudHkxL2YuWVJzaXopLHAud2lkdGg9cC50Y3gxLXAudGN4MCxwLmhlaWdodD1wLnRjeTEtcC50Y3kwLHIuY29tcG9uZW50c1t1XT1wfX1mdW5jdGlvbiBiKGUsdCxyKXt2YXIgbj10LmNvZGluZ1N0eWxlUGFyYW1ldGVycyxhPXt9O3JldHVybiBuLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHM/KGEuUFB4PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB4LGEuUFB5PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB5KTooYS5QUHg9MTUsYS5QUHk9MTUpLGEueGNiXz1yPjA/TWF0aC5taW4obi54Y2IsYS5QUHgtMSk6TWF0aC5taW4obi54Y2IsYS5QUHgpLGEueWNiXz1yPjA/TWF0aC5taW4obi55Y2IsYS5QUHktMSk6TWF0aC5taW4obi55Y2IsYS5QUHkpLGF9ZnVuY3Rpb24gdyhlLHQscil7dmFyIG49MTw8ci5QUHgsYT0xPDxyLlBQeSxpPTA9PT10LnJlc0xldmVsLG89MTw8ci5QUHgrKGk/MDotMSkscz0xPDxyLlBQeSsoaT8wOi0xKSxjPXQudHJ4MT50LnRyeDA/TWF0aC5jZWlsKHQudHJ4MS9uKS1NYXRoLmZsb29yKHQudHJ4MC9uKTowLHU9dC50cnkxPnQudHJ5MD9NYXRoLmNlaWwodC50cnkxL2EpLU1hdGguZmxvb3IodC50cnkwL2EpOjAsbD1jKnU7dC5wcmVjaW5jdFBhcmFtZXRlcnM9e3ByZWNpbmN0V2lkdGg6bixwcmVjaW5jdEhlaWdodDphLG51bXByZWNpbmN0c3dpZGU6YyxudW1wcmVjaW5jdHNoaWdoOnUsbnVtcHJlY2luY3RzOmwscHJlY2luY3RXaWR0aEluU3ViYmFuZDpvLHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kOnN9fWZ1bmN0aW9uIGsoZSx0LHIpe3ZhciBuLGEsaSxvLHM9ci54Y2JfLGM9ci55Y2JfLHU9MTw8cyxsPTE8PGMsZj10LnRieDA+PnMsaD10LnRieTA+PmMsZD10LnRieDErdS0xPj5zLHA9dC50YnkxK2wtMT4+YyxnPXQucmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMsdj1bXSx5PVtdO2ZvcihhPWg7YTxwO2ErKylmb3Iobj1mO248ZDtuKyspaWYoKGk9e2NieDpuLGNieTphLHRieDA6dSpuLHRieTA6bCphLHRieDE6dSoobisxKSx0YnkxOmwqKGErMSl9KS50YngwXz1NYXRoLm1heCh0LnRieDAsaS50YngwKSxpLnRieTBfPU1hdGgubWF4KHQudGJ5MCxpLnRieTApLGkudGJ4MV89TWF0aC5taW4odC50YngxLGkudGJ4MSksaS50YnkxXz1NYXRoLm1pbih0LnRieTEsaS50YnkxKSxvPU1hdGguZmxvb3IoKGkudGJ4MF8tdC50YngwKS9nLnByZWNpbmN0V2lkdGhJblN1YmJhbmQpK01hdGguZmxvb3IoKGkudGJ5MF8tdC50YnkwKS9nLnByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kKSpnLm51bXByZWNpbmN0c3dpZGUsaS5wcmVjaW5jdE51bWJlcj1vLGkuc3ViYmFuZFR5cGU9dC50eXBlLGkuTGJsb2NrPTMsIShpLnRieDFfPD1pLnRieDBffHxpLnRieTFfPD1pLnRieTBfKSl7di5wdXNoKGkpO3ZhciBtPXlbb107dm9pZCAwIT09bT8objxtLmNieE1pbj9tLmNieE1pbj1uOm4+bS5jYnhNYXgmJihtLmNieE1heD1uKSxhPG0uY2J5TWluP20uY2J4TWluPWE6YT5tLmNieU1heCYmKG0uY2J5TWF4PWEpKTp5W29dPW09e2NieE1pbjpuLGNieU1pbjphLGNieE1heDpuLGNieU1heDphfSxpLnByZWNpbmN0PW19dC5jb2RlYmxvY2tQYXJhbWV0ZXJzPXtjb2RlYmxvY2tXaWR0aDpzLGNvZGVibG9ja0hlaWdodDpjLG51bWNvZGVibG9ja3dpZGU6ZC1mKzEsbnVtY29kZWJsb2NraGlnaDpwLWgrMX0sdC5jb2RlYmxvY2tzPXYsdC5wcmVjaW5jdHM9eX1mdW5jdGlvbiBTKGUsdCxyKXtmb3IodmFyIG49W10sYT1lLnN1YmJhbmRzLGk9MCxvPWEubGVuZ3RoO2k8bztpKyspZm9yKHZhciBzPWFbaV0uY29kZWJsb2NrcyxjPTAsdT1zLmxlbmd0aDtjPHU7YysrKXt2YXIgbD1zW2NdO2wucHJlY2luY3ROdW1iZXI9PT10JiZuLnB1c2gobCl9cmV0dXJue2xheWVyTnVtYmVyOnIsY29kZWJsb2NrczpufX1mdW5jdGlvbiB4KGUpe2Zvcih2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89MCxzPTA7czxpO3MrKylvPU1hdGgubWF4KG8sbi5jb21wb25lbnRzW3NdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO3ZhciBjPTAsdT0wLGw9MCxmPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtjPGE7YysrKXtmb3IoO3U8PW87dSsrKXtmb3IoO2w8aTtsKyspe3ZhciBlPW4uY29tcG9uZW50c1tsXTtpZighKHU+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSl7Zm9yKHZhciB0PWUucmVzb2x1dGlvbnNbdV0scj10LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7ZjxyOyl7dmFyIHM9Uyh0LGYsYyk7cmV0dXJuIGYrKyxzfWY9MH19bD0wfXU9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9ZS5TSVoscj1lLmN1cnJlbnRUaWxlLmluZGV4LG49ZS50aWxlc1tyXSxhPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxpPXQuQ3NpeixvPTAscz0wO3M8aTtzKyspbz1NYXRoLm1heChvLG4uY29tcG9uZW50c1tzXS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTt2YXIgYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7Yzw9bztjKyspe2Zvcig7dTxhO3UrKyl7Zm9yKDtsPGk7bCsrKXt2YXIgZT1uLmNvbXBvbmVudHNbbF07aWYoIShjPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe2Zvcih2YXIgdD1lLnJlc29sdXRpb25zW2NdLHI9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Y8cjspe3ZhciBzPVModCxmLHUpO3JldHVybiBmKyssc31mPTB9fWw9MH11PTB9dGhyb3cgbmV3IHAoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIEEoZSl7dmFyIHQscixuLGEsaT1lLlNJWixvPWUuY3VycmVudFRpbGUuaW5kZXgscz1lLnRpbGVzW29dLGM9cy5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LHU9aS5Dc2l6LGw9MDtmb3Iobj0wO248dTtuKyspe3ZhciBmPXMuY29tcG9uZW50c1tuXTtsPU1hdGgubWF4KGwsZi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KX12YXIgaD1uZXcgSW50MzJBcnJheShsKzEpO2ZvcihyPTA7cjw9bDsrK3Ipe3ZhciBkPTA7Zm9yKG49MDtuPHU7KytuKXt2YXIgZz1zLmNvbXBvbmVudHNbbl0ucmVzb2x1dGlvbnM7cjxnLmxlbmd0aCYmKGQ9TWF0aC5tYXgoZCxnW3JdLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpKX1oW3JdPWR9dD0wLHI9MCxuPTAsYT0wLHRoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7cjw9bDtyKyspe2Zvcig7YTxoW3JdO2ErKyl7Zm9yKDtuPHU7bisrKXt2YXIgZT1zLmNvbXBvbmVudHNbbl07aWYoIShyPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe3ZhciBpPWUucmVzb2x1dGlvbnNbcl0sbz1pLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7aWYoIShhPj1vKSl7Zm9yKDt0PGM7KXt2YXIgZj1TKGksYSx0KTtyZXR1cm4gdCsrLGZ9dD0wfX19bj0wfWE9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPW8sYz0wLHU9MCxsPTAsZj0wLGg9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24oKXtmb3IoO2g8cy5tYXhOdW1IaWdoO2grKyl7Zm9yKDtmPHMubWF4TnVtV2lkZTtmKyspe2Zvcig7bDxpO2wrKyl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1tsXSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDt1PD10O3UrKyl7dmFyIHI9ZS5yZXNvbHV0aW9uc1t1XSxkPW8uY29tcG9uZW50c1tsXS5yZXNvbHV0aW9uc1t1XSxnPVAoZixoLGQscyxyKTtpZihudWxsIT09Zyl7Zm9yKDtjPGE7KXt2YXIgdj1TKHIsZyxjKTtyZXR1cm4gYysrLHZ9Yz0wfX11PTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gRihlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPTAsYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7dTxpOysrdSl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1t1XSx0PW8uY29tcG9uZW50c1t1XSxyPWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmPHQubWF4TnVtSGlnaDtmKyspe2Zvcig7bDx0Lm1heE51bVdpZGU7bCsrKXtmb3IoO2M8PXI7YysrKXt2YXIgaD1lLnJlc29sdXRpb25zW2NdLGQ9dC5yZXNvbHV0aW9uc1tjXSxnPVAobCxmLGQsdCxoKTtpZihudWxsIT09Zyl7Zm9yKDtzPGE7KXt2YXIgdj1TKGgsZyxzKTtyZXR1cm4gcysrLHZ9cz0wfX1jPTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gUChlLHQscixuLGEpe3ZhciBpPWUqbi5taW5XaWR0aCxvPXQqbi5taW5IZWlnaHQ7aWYoaSVyLndpZHRoIT0wfHxvJXIuaGVpZ2h0IT0wKXJldHVybiBudWxsO3ZhciBzPW8vci53aWR0aCphLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlO3JldHVybiBpL3IuaGVpZ2h0K3N9ZnVuY3Rpb24gVChlKXtmb3IodmFyIHQ9ZS5jb21wb25lbnRzLmxlbmd0aCxyPU51bWJlci5NQVhfVkFMVUUsbj1OdW1iZXIuTUFYX1ZBTFVFLGE9MCxpPTAsbz1uZXcgQXJyYXkodCkscz0wO3M8dDtzKyspe2Zvcih2YXIgYz1lLmNvbXBvbmVudHNbc10sdT1jLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbD1uZXcgQXJyYXkodSsxKSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUFYX1ZBTFVFLGQ9MCxwPTAsZz0xLHY9dTt2Pj0wOy0tdil7dmFyIHk9Yy5yZXNvbHV0aW9uc1t2XSxtPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aCxiPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHQ7Zj1NYXRoLm1pbihmLG0pLGg9TWF0aC5taW4oaCxiKSxkPU1hdGgubWF4KGQseS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZSkscD1NYXRoLm1heChwLHkucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c2hpZ2gpLGxbdl09e3dpZHRoOm0saGVpZ2h0OmJ9LGc8PD0xfXI9TWF0aC5taW4ocixmKSxuPU1hdGgubWluKG4saCksYT1NYXRoLm1heChhLGQpLGk9TWF0aC5tYXgoaSxwKSxvW3NdPXtyZXNvbHV0aW9uczpsLG1pbldpZHRoOmYsbWluSGVpZ2h0OmgsbWF4TnVtV2lkZTpkLG1heE51bUhpZ2g6cH19cmV0dXJue2NvbXBvbmVudHM6byxtaW5XaWR0aDpyLG1pbkhlaWdodDpuLG1heE51bVdpZGU6YSxtYXhOdW1IaWdoOml9fWZ1bmN0aW9uIEkoZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT10LkNzaXosaT0wO2k8YTtpKyspe2Zvcih2YXIgbz1uLmNvbXBvbmVudHNbaV0scz1vLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsYz1bXSx1PVtdLGw9MDtsPD1zO2wrKyl7dmFyIGY9YigwLG8sbCksaD17fSxkPTE8PHMtbDtoLnRyeDA9TWF0aC5jZWlsKG8udGN4MC9kKSxoLnRyeTA9TWF0aC5jZWlsKG8udGN5MC9kKSxoLnRyeDE9TWF0aC5jZWlsKG8udGN4MS9kKSxoLnRyeTE9TWF0aC5jZWlsKG8udGN5MS9kKSxoLnJlc0xldmVsPWwsdygwLGgsZiksYy5wdXNoKGgpO3ZhciBnPXZvaWQgMDtpZigwPT09bCkoZz17fSkudHlwZT0iTEwiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL2QpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL2QpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL2QpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL2QpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSxoLnN1YmJhbmRzPVtnXTtlbHNle3ZhciB2PTE8PHMtbCsxLHk9W107KGc9e30pLnR5cGU9IkhMIixnLnRieDA9TWF0aC5jZWlsKG8udGN4MC92LS41KSxnLnRieTA9TWF0aC5jZWlsKG8udGN5MC92KSxnLnRieDE9TWF0aC5jZWlsKG8udGN4MS92LS41KSxnLnRieTE9TWF0aC5jZWlsKG8udGN5MS92KSxnLnJlc29sdXRpb249aCxrKDAsZyxmKSx1LnB1c2goZykseS5wdXNoKGcpLChnPXt9KS50eXBlPSJMSCIsZy50YngwPU1hdGguY2VpbChvLnRjeDAvdiksZy50YnkwPU1hdGguY2VpbChvLnRjeTAvdi0uNSksZy50YngxPU1hdGguY2VpbChvLnRjeDEvdiksZy50YnkxPU1hdGguY2VpbChvLnRjeTEvdi0uNSksZy5yZXNvbHV0aW9uPWgsaygwLGcsZiksdS5wdXNoKGcpLHkucHVzaChnKSwoZz17fSkudHlwZT0iSEgiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL3YtLjUpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL3YtLjUpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL3YtLjUpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL3YtLjUpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSx5LnB1c2goZyksaC5zdWJiYW5kcz15fX1vLnJlc29sdXRpb25zPWMsby5zdWJiYW5kcz11fXZhciBtPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO3N3aXRjaChtKXtjYXNlIDA6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IHgoZSk7YnJlYWs7Y2FzZSAxOm4ucGFja2V0c0l0ZXJhdG9yPW5ldyBPKGUpO2JyZWFrO2Nhc2UgMjpuLnBhY2tldHNJdGVyYXRvcj1uZXcgQShlKTticmVhaztjYXNlIDM6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IEMoZSk7YnJlYWs7Y2FzZSA0Om4ucGFja2V0c0l0ZXJhdG9yPW5ldyBGKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHAoIlVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICIuY29uY2F0KG0pKX19ZnVuY3Rpb24gRShlLHQscixuKXt2YXIgYSxvPTAscz0wLGM9ITE7ZnVuY3Rpb24gdShlKXtmb3IoO3M8ZTspe3ZhciBuPXRbcitvXTtvKyssYz8oYT1hPDw3fG4scys9NyxjPSExKTooYT1hPDw4fG4scys9OCksMjU1PT09biYmKGM9ITApfXJldHVybiBhPj4+KHMtPWUpJigxPDxlKS0xfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIDI1NT09PXRbcitvLTFdJiZ0W3Irb109PT1lPyhmKDEpLCEwKToyNTU9PT10W3Irb10mJnRbcitvKzFdPT09ZSYmKGYoMiksITApfWZ1bmN0aW9uIGYoZSl7bys9ZX1mdW5jdGlvbiBoKCl7cz0wLGMmJihvKyssYz0hMSl9ZnVuY3Rpb24gZCgpe2lmKDA9PT11KDEpKXJldHVybiAxO2lmKDA9PT11KDEpKXJldHVybiAyO3ZhciBlPXUoMik7cmV0dXJuIGU8Mz9lKzM6KGU9dSg1KSk8MzE/ZSs2OihlPXUoNykpKzM3fWZvcih2YXIgZz1lLmN1cnJlbnRUaWxlLmluZGV4LHY9ZS50aWxlc1tnXSx5PWUuQ09ELnNvcE1hcmtlclVzZWQsbT1lLkNPRC5lcGhNYXJrZXJVc2VkLGI9di5wYWNrZXRzSXRlcmF0b3I7bzxuOyl7aCgpLHkmJmwoMTQ1KSYmZig0KTt2YXIgdz1iLm5leHRQYWNrZXQoKTtpZih1KDEpKXtmb3IodmFyIGs9dy5sYXllck51bWJlcixTPVtdLHg9dm9pZCAwLE89MCxBPXcuY29kZWJsb2Nrcy5sZW5ndGg7TzxBO08rKyl7dmFyIEM9KHg9dy5jb2RlYmxvY2tzW09dKS5wcmVjaW5jdCxGPXguY2J4LUMuY2J4TWluLFA9eC5jYnktQy5jYnlNaW4sVD0hMSxJPSExLEU9dm9pZCAwO2lmKHZvaWQgMCE9PXguaW5jbHVkZWQpVD0hIXUoMSk7ZWxzZXt2YXIgaj12b2lkIDA7aWYodm9pZCAwIT09KEM9eC5wcmVjaW5jdCkuaW5jbHVzaW9uVHJlZSlqPUMuaW5jbHVzaW9uVHJlZTtlbHNle3ZhciBNPUMuY2J4TWF4LUMuY2J4TWluKzEsXz1DLmNieU1heC1DLmNieU1pbisxO2o9bmV3IFUoTSxfLGspLEU9bmV3IEIoTSxfKSxDLmluY2x1c2lvblRyZWU9aixDLnplcm9CaXRQbGFuZXNUcmVlPUU7Zm9yKHZhciBMPTA7TDxrO0wrKylpZigwIT09dSgxKSl0aHJvdyBuZXcgcCgiSW52YWxpZCB0YWcgdHJlZSIpfWlmKGoucmVzZXQoRixQLGspKWZvcig7Oyl7aWYoIXUoMSkpe2ouaW5jcmVtZW50VmFsdWUoayk7YnJlYWt9aWYoIWoubmV4dExldmVsKCkpe3guaW5jbHVkZWQ9ITAsVD1JPSEwO2JyZWFrfX19aWYoVCl7aWYoSSl7Zm9yKChFPUMuemVyb0JpdFBsYW5lc1RyZWUpLnJlc2V0KEYsUCk7OylpZih1KDEpKXtpZighRS5uZXh0TGV2ZWwoKSlicmVha31lbHNlIEUuaW5jcmVtZW50VmFsdWUoKTt4Lnplcm9CaXRQbGFuZXM9RS52YWx1ZX1mb3IodmFyIFI9ZCgpO3UoMSk7KXguTGJsb2NrKys7dmFyIE49KDAsaS5sb2cyKShSKSxEPXUoKFI8MTw8Tj9OLTE6TikreC5MYmxvY2spO1MucHVzaCh7Y29kZWJsb2NrOngsY29kaW5ncGFzc2VzOlIsZGF0YUxlbmd0aDpEfSl9fWZvcihoKCksbSYmbCgxNDYpO1MubGVuZ3RoPjA7KXt2YXIgJD1TLnNoaWZ0KCk7dm9pZCAwPT09KHg9JC5jb2RlYmxvY2spLmRhdGEmJih4LmRhdGE9W10pLHguZGF0YS5wdXNoKHtkYXRhOnQsc3RhcnQ6citvLGVuZDpyK28rJC5kYXRhTGVuZ3RoLGNvZGluZ3Bhc3NlczokLmNvZGluZ3Bhc3Nlc30pLG8rPSQuZGF0YUxlbmd0aH19fXJldHVybiBvfWZ1bmN0aW9uIGooZSx0LHIsbixhLGkscyxjLHUpe2Zvcih2YXIgbD1uLnRieDAsZj1uLnRieTAsaD1uLnRieDEtbi50YngwLGQ9bi5jb2RlYmxvY2tzLHA9IkgiPT09bi50eXBlLmNoYXJBdCgwKT8xOjAsZz0iSCI9PT1uLnR5cGUuY2hhckF0KDEpP3Q6MCx2PTAseT1kLmxlbmd0aDt2PHk7Kyt2KXt2YXIgbT1kW3ZdLGI9bS50YngxXy1tLnRieDBfLHc9bS50YnkxXy1tLnRieTBfO2lmKDAhPT1iJiYwIT09dyYmdm9pZCAwIT09bS5kYXRhKXt2YXIgaz1uZXcgJChiLHcsbS5zdWJiYW5kVHlwZSxtLnplcm9CaXRQbGFuZXMsaSksUz0yLHg9bS5kYXRhLE89MCxBPTAsQz12b2lkIDAsRj12b2lkIDAsUD12b2lkIDA7Zm9yKEM9MCxGPXgubGVuZ3RoO0M8RjtDKyspTys9KFA9eFtDXSkuZW5kLVAuc3RhcnQsQSs9UC5jb2RpbmdwYXNzZXM7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoTyksST0wO2ZvcihDPTAsRj14Lmxlbmd0aDtDPEY7QysrKXt2YXIgRT0oUD14W0NdKS5kYXRhLnN1YmFycmF5KFAuc3RhcnQsUC5lbmQpO1Quc2V0KEUsSSksSSs9RS5sZW5ndGh9dmFyIGo9bmV3IG8uQXJpdGhtZXRpY0RlY29kZXIoVCwwLE8pO2ZvcihrLnNldERlY29kZXIoaiksQz0wO0M8QTtDKyspe3N3aXRjaChTKXtjYXNlIDA6ay5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTticmVhaztjYXNlIDE6ay5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO2JyZWFrO2Nhc2UgMjprLnJ1bkNsZWFudXBQYXNzKCksYyYmay5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpfXUmJmsucmVzZXQoKSxTPShTKzEpJTN9dmFyIE09bS50YngwXy1sKyhtLnRieTBfLWYpKmgsXz1rLmNvZWZmaWNlbnRzU2lnbixMPWsuY29lZmZpY2VudHNNYWduaXR1ZGUsUj1rLmJpdHNEZWNvZGVkLE49cz8wOi41LEQ9dm9pZCAwLEI9dm9pZCAwLFU9dm9pZCAwO0k9MDt2YXIgWD0iTEwiIT09bi50eXBlO2ZvcihDPTA7Qzx3O0MrKyl7dmFyIEg9MiooTS9ofDApKih0LWgpK3ArZztmb3IoRD0wO0Q8YjtEKyspe2lmKDAhPT0oQj1MW0ldKSlCPShCK04pKmEsMCE9PV9bSV0mJihCPS1CKSxVPVJbSV0sZVtYP0grKE08PDEpOk1dPXMmJlU+PWk/QjpCKigxPDxpLVUpO00rKyxJKyt9TSs9aC1ifX19fWZ1bmN0aW9uIE0oZSx0LHIpe2Zvcih2YXIgbj10LmNvbXBvbmVudHNbcl0sYT1uLmNvZGluZ1N0eWxlUGFyYW1ldGVycyxpPW4ucXVhbnRpemF0aW9uUGFyYW1ldGVycyxvPWEuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LHM9aS5TUHFjZHMsYz1pLnNjYWxhckV4cG91bmRlZCx1PWkuZ3VhcmRCaXRzLGw9YS5zZWdtZW50YXRpb25TeW1ib2xVc2VkLGY9YS5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzLGg9ZS5jb21wb25lbnRzW3JdLnByZWNpc2lvbixkPWEucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uLHA9ZD9uZXcgcTpuZXcgSCx2PVtdLHk9MCxtPTA7bTw9bzttKyspe2Zvcih2YXIgYj1uLnJlc29sdXRpb25zW21dLHc9Yi50cngxLWIudHJ4MCxrPWIudHJ5MS1iLnRyeTAsUz1uZXcgRmxvYXQzMkFycmF5KHcqaykseD0wLE89Yi5zdWJiYW5kcy5sZW5ndGg7eDxPO3grKyl7dmFyIEE9dm9pZCAwLEM9dm9pZCAwO2M/KEE9c1t5XS5tdSxDPXNbeV0uZXBzaWxvbix5KyspOihBPXNbMF0ubXUsQz1zWzBdLmVwc2lsb24rKG0+MD8xLW06MCkpO3ZhciBGPWIuc3ViYmFuZHNbeF0sUD1nW0YudHlwZV07aihTLHcsMCxGLGQ/MTpNYXRoLnBvdygyLGgrUC1DKSooMStBLzIwNDgpLHUrQy0xLGQsbCxmKX12LnB1c2goe3dpZHRoOncsaGVpZ2h0OmssaXRlbXM6U30pfXZhciBUPXAuY2FsY3VsYXRlKHYsbi50Y3gwLG4udGN5MCk7cmV0dXJue2xlZnQ6bi50Y3gwLHRvcDpuLnRjeTAsd2lkdGg6VC53aWR0aCxoZWlnaHQ6VC5oZWlnaHQsaXRlbXM6VC5pdGVtc319ZnVuY3Rpb24gXyhlLHQpe2Zvcih2YXIgcj1lLlNJWi5Dc2l6LG49ZS50aWxlc1t0XSxhPTA7YTxyO2ErKyl7dmFyIGk9bi5jb21wb25lbnRzW2FdLG89dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbYV0/ZS5jdXJyZW50VGlsZS5RQ0NbYV06ZS5jdXJyZW50VGlsZS5RQ0Q7aS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW87dmFyIHM9dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5DT0NbYV0/ZS5jdXJyZW50VGlsZS5DT0NbYV06ZS5jdXJyZW50VGlsZS5DT0Q7aS5jb2RpbmdTdHlsZVBhcmFtZXRlcnM9c31uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnM9ZS5jdXJyZW50VGlsZS5DT0R9dC5KcHhJbWFnZT12O3ZhciBMLFIsTixELEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dSh0aGlzLGUpO3ZhciBuPSgwLGkubG9nMikoTWF0aC5tYXgodCxyKSkrMTt0aGlzLmxldmVscz1bXTtmb3IodmFyIGE9MDthPG47YSsrKXt2YXIgbz17d2lkdGg6dCxoZWlnaHQ6cixpdGVtczpbXX07dGhpcy5sZXZlbHMucHVzaChvKSx0PU1hdGguY2VpbCh0LzIpLHI9TWF0aC5jZWlsKHIvMil9fXJldHVybiBjKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuPTAsYT0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGk9ZSt0KihyPXRoaXMubGV2ZWxzW25dKS53aWR0aDtpZih2b2lkIDAhPT1yLml0ZW1zW2ldKXthPXIuaXRlbXNbaV07YnJlYWt9ci5pbmRleD1pLGU+Pj0xLHQ+Pj0xLG4rK31uLS0sKHI9dGhpcy5sZXZlbHNbbl0pLml0ZW1zW3IuaW5kZXhdPWEsdGhpcy5jdXJyZW50TGV2ZWw9bixkZWxldGUgdGhpcy52YWx1ZX19LHtrZXk6ImluY3JlbWVudFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtlLml0ZW1zW2UuaW5kZXhdKyt9fSx7a2V5OiJuZXh0TGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXSxyPXQuaXRlbXNbdC5pbmRleF07cmV0dXJuLS1lPDA/KHRoaXMudmFsdWU9ciwhMSk6KHRoaXMuY3VycmVudExldmVsPWUsKHQ9dGhpcy5sZXZlbHNbZV0pLml0ZW1zW3QuaW5kZXhdPXIsITApfX1dKSxlfSgpLFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt1KHRoaXMsZSk7dmFyIGE9KDAsaS5sb2cyKShNYXRoLm1heCh0LHIpKSsxO3RoaXMubGV2ZWxzPVtdO2Zvcih2YXIgbz0wO288YTtvKyspe2Zvcih2YXIgcz1uZXcgVWludDhBcnJheSh0KnIpLGM9MCxsPXMubGVuZ3RoO2M8bDtjKyspc1tjXT1uO3ZhciBmPXt3aWR0aDp0LGhlaWdodDpyLGl0ZW1zOnN9O3RoaXMubGV2ZWxzLnB1c2goZiksdD1NYXRoLmNlaWwodC8yKSxyPU1hdGguY2VpbChyLzIpfX1yZXR1cm4gYyhlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGE9dGhpcy5sZXZlbHNbbl0saT1lK3QqYS53aWR0aDthLmluZGV4PWk7dmFyIG89YS5pdGVtc1tpXTtpZigyNTU9PT1vKWJyZWFrO2lmKG8+cilyZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bix0aGlzLnByb3BhZ2F0ZVZhbHVlcygpLCExO2U+Pj0xLHQ+Pj0xLG4rK31yZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bi0xLCEwfX0se2tleToiaW5jcmVtZW50VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTt0Lml0ZW1zW3QuaW5kZXhdPWUrMSx0aGlzLnByb3BhZ2F0ZVZhbHVlcygpfX0se2tleToicHJvcGFnYXRlVmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRMZXZlbCx0PXRoaXMubGV2ZWxzW2VdLHI9dC5pdGVtc1t0LmluZGV4XTstLWU+PTA7KSh0PXRoaXMubGV2ZWxzW2VdKS5pdGVtc1t0LmluZGV4XT1yfX0se2tleToibmV4dExldmVsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV0scj10Lml0ZW1zW3QuaW5kZXhdO3JldHVybiB0Lml0ZW1zW3QuaW5kZXhdPTI1NSwhKC0tZTwwfHwodGhpcy5jdXJyZW50TGV2ZWw9ZSwodD10aGlzLmxldmVsc1tlXSkuaXRlbXNbdC5pbmRleF09ciwwKSl9fV0pLGV9KCksJD0oTD0xNyxSPW5ldyBVaW50OEFycmF5KFswLDUsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDEsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOF0pLE49bmV3IFVpbnQ4QXJyYXkoWzAsMyw0LDAsNSw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMSwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4XSksRD1uZXcgVWludDhBcnJheShbMCwxLDIsMCwxLDIsMiwwLDIsMiwyLDAsMCwwLDAsMCwzLDQsNSwwLDQsNSw1LDAsNSw1LDUsMCwwLDAsMCwwLDYsNyw3LDAsNyw3LDcsMCw3LDcsNywwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDhdKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpKXt2YXIgbzt1KHRoaXMsZSksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsbz0iSEgiPT09bj9EOiJITCI9PT1uP046Uix0aGlzLmNvbnRleHRMYWJlbFRhYmxlPW87dmFyIHMsYz10KnI7dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkoYyksdGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkoYykscz1pPjE0P25ldyBVaW50MzJBcnJheShjKTppPjY/bmV3IFVpbnQxNkFycmF5KGMpOm5ldyBVaW50OEFycmF5KGMpLHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU9cyx0aGlzLnByb2Nlc3NpbmdGbGFncz1uZXcgVWludDhBcnJheShjKTt2YXIgbD1uZXcgVWludDhBcnJheShjKTtpZigwIT09YSlmb3IodmFyIGY9MDtmPGM7ZisrKWxbZl09YTt0aGlzLmJpdHNEZWNvZGVkPWwsdGhpcy5yZXNldCgpfXJldHVybiBjKGUsW3trZXk6InNldERlY29kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGVjb2Rlcj1lfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0cz1uZXcgSW50OEFycmF5KDE5KSx0aGlzLmNvbnRleHRzWzBdPTgsdGhpcy5jb250ZXh0c1sxN109OTIsdGhpcy5jb250ZXh0c1sxOF09Nn19LHtrZXk6InNldE5laWdoYm9yc1NpZ25pZmljYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsaT10aGlzLndpZHRoLG89dGhpcy5oZWlnaHQscz10PjAsYz10KzE8aTtlPjAmJihuPXItaSxzJiYoYVtuLTFdKz0xNiksYyYmKGFbbisxXSs9MTYpLGFbbl0rPTQpLGUrMTxvJiYobj1yK2kscyYmKGFbbi0xXSs9MTYpLGMmJihhW24rMV0rPTE2KSxhW25dKz00KSxzJiYoYVtyLTFdKz0xKSxjJiYoYVtyKzFdKz0xKSxhW3JdfD0xMjh9fSx7a2V5OiJydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgscj10aGlzLmhlaWdodCxuPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsYT10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG89dGhpcy5wcm9jZXNzaW5nRmxhZ3Mscz10aGlzLmNvbnRleHRzLGM9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSx1PXRoaXMuYml0c0RlY29kZWQsbD0wO2w8cjtsKz00KWZvcih2YXIgZj0wO2Y8dDtmKyspZm9yKHZhciBoPWwqdCtmLGQ9MDtkPDQ7ZCsrLGgrPXQpe3ZhciBwPWwrZDtpZihwPj1yKWJyZWFrO2lmKG9baF0mPS0yLCFuW2hdJiZpW2hdKXt2YXIgZz1jW2lbaF1dO2lmKGUucmVhZEJpdChzLGcpKXt2YXIgdj10aGlzLmRlY29kZVNpZ25CaXQocCxmLGgpO2FbaF09dixuW2hdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UocCxmLGgpLG9baF18PTJ9dVtoXSsrLG9baF18PTF9fX19LHtrZXk6ImRlY29kZVNpZ25CaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdT10aGlzLndpZHRoLGw9dGhpcy5oZWlnaHQsZj10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLGg9dGhpcy5jb2VmZmljZW50c1NpZ247bz10PjAmJjAhPT1mW3ItMV0sdCsxPHUmJjAhPT1mW3IrMV0/KGk9aFtyKzFdLG49bz8xLWktKGE9aFtyLTFdKToxLWktaSk6bj1vPzEtKGE9aFtyLTFdKS1hOjA7dmFyIGQ9MypuO3JldHVybiBvPWU+MCYmMCE9PWZbci11XSxlKzE8bCYmMCE9PWZbcit1XT8oaT1oW3IrdV0sbj1vPzEtaS0oYT1oW3ItdV0pK2Q6MS1pLWkrZCk6bj1vPzEtKGE9aFtyLXVdKS1hK2Q6ZCxuPj0wPyhzPTkrbixjPXRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMscykpOihzPTktbixjPTFedGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyxzKSksY319LHtrZXk6InJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsaT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxvPXRoaXMuY29udGV4dHMscz10aGlzLmJpdHNEZWNvZGVkLGM9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsdT1yKm4sbD00KnIsZj0wO2Y8dTtmPWUpe2U9TWF0aC5taW4odSxmK2wpO2Zvcih2YXIgaD0wO2g8cjtoKyspZm9yKHZhciBkPWYraDtkPGU7ZCs9cilpZihhW2RdJiYwPT0oMSZjW2RdKSl7dmFyIHA9MTY7MCE9KDImY1tkXSkmJihjW2RdXj0yLHA9MD09KDEyNyZpW2RdKT8xNToxNCk7dmFyIGc9dC5yZWFkQml0KG8scCk7YVtkXT1hW2RdPDwxfGcsc1tkXSsrLGNbZF18PTF9fX19LHtrZXk6InJ1bkNsZWFudXBQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxvPXRoaXMuY29lZmZpY2VudHNTaWduLHM9dGhpcy5jb250ZXh0cyxjPXRoaXMuY29udGV4dExhYmVsVGFibGUsdT10aGlzLmJpdHNEZWNvZGVkLGw9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsZj1yLGg9MipyLGQ9MypyLHA9MDtwPG47cD1lKXtlPU1hdGgubWluKHArNCxuKTtmb3IodmFyIGc9cCpyLHY9cCszPG4seT0wO3k8cjt5Kyspe3ZhciBtPWcreSxiPTAsdz1tLGs9cCxTPXZvaWQgMDtpZih2JiYwPT09bFttXSYmMD09PWxbbStmXSYmMD09PWxbbStoXSYmMD09PWxbbStkXSYmMD09PWFbbV0mJjA9PT1hW20rZl0mJjA9PT1hW20raF0mJjA9PT1hW20rZF0pe2lmKCF0LnJlYWRCaXQocywxOCkpe3VbbV0rKyx1W20rZl0rKyx1W20raF0rKyx1W20rZF0rKztjb250aW51ZX0wIT0oYj10LnJlYWRCaXQocyxMKTw8MXx0LnJlYWRCaXQocyxMKSkmJihrPXArYix3Kz1iKnIpLFM9dGhpcy5kZWNvZGVTaWduQml0KGsseSx3KSxvW3ddPVMsaVt3XT0xLHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGsseSx3KSxsW3ddfD0yLHc9bTtmb3IodmFyIHg9cDt4PD1rO3grKyx3Kz1yKXVbd10rKztiKyt9Zm9yKGs9cCtiO2s8ZTtrKyssdys9cilpZighaVt3XSYmMD09KDEmbFt3XSkpe3ZhciBPPWNbYVt3XV07MT09PXQucmVhZEJpdChzLE8pJiYoUz10aGlzLmRlY29kZVNpZ25CaXQoayx5LHcpLG9bd109UyxpW3ddPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2Uoayx5LHcpLGxbd118PTIpLHVbd10rK319fX19LHtrZXk6ImNoZWNrU2VnbWVudGF0aW9uU3ltYm9sIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMuY29udGV4dHM7aWYoMTAhPShlLnJlYWRCaXQodCxMKTw8M3xlLnJlYWRCaXQodCxMKTw8MnxlLnJlYWRCaXQodCxMKTw8MXxlLnJlYWRCaXQodCxMKSkpdGhyb3cgbmV3IHAoIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX1dKSxlfSgpKSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIFRyYW5zZm9ybS4iKX1yZXR1cm4gYyhlLFt7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49ZVswXSxhPTEsaT1lLmxlbmd0aDthPGk7YSsrKW49dGhpcy5pdGVyYXRlKG4sZVthXSx0LHIpO3JldHVybiBufX0se2tleToiZXh0ZW5kIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dC0xLGE9dCsxLGk9dCtyLTIsbz10K3I7ZVtuLS1dPWVbYSsrXSxlW28rK109ZVtpLS1dLGVbbi0tXT1lW2ErK10sZVtvKytdPWVbaS0tXSxlW24tLV09ZVthKytdLGVbbysrXT1lW2ktLV0sZVtuXT1lW2FdLGVbb109ZVtpXX19LHtrZXk6ImZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGZpbHRlcmAgY2FsbGVkIil9fSx7a2V5OiJpdGVyYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYSxpLG8scyxjLHUsbD1lLndpZHRoLGY9ZS5oZWlnaHQsaD1lLml0ZW1zLGQ9dC53aWR0aCxwPXQuaGVpZ2h0LGc9dC5pdGVtcztmb3Iobz0wLGE9MDthPGY7YSsrKWZvcihzPTIqYSpkLGk9MDtpPGw7aSsrLG8rKyxzKz0yKWdbc109aFtvXTtoPWUuaXRlbXM9bnVsbDt2YXIgdj1uZXcgRmxvYXQzMkFycmF5KGQrOCk7aWYoMT09PWQpe2lmKDAhPSgxJnIpKWZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZClnW29dKj0uNX1lbHNlIGZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZCl2LnNldChnLnN1YmFycmF5KG8sbytkKSw0KSx0aGlzLmV4dGVuZCh2LDQsZCksdGhpcy5maWx0ZXIodiw0LGQpLGcuc2V0KHYuc3ViYXJyYXkoNCw0K2QpLG8pO3ZhciB5PTE2LG09W107Zm9yKGE9MDthPHk7YSsrKW0ucHVzaChuZXcgRmxvYXQzMkFycmF5KHArOCkpO3ZhciBiLHc9MDtpZihlPTQrcCwxPT09cCl7aWYoMCE9KDEmbikpZm9yKGM9MDtjPGQ7YysrKWdbY10qPS41fWVsc2UgZm9yKGM9MDtjPGQ7YysrKXtpZigwPT09dyl7Zm9yKHk9TWF0aC5taW4oZC1jLHkpLG89YyxzPTQ7czxlO28rPWQscysrKWZvcihiPTA7Yjx5O2IrKyltW2JdW3NdPWdbbytiXTt3PXl9dmFyIGs9bVstLXddO2lmKHRoaXMuZXh0ZW5kKGssNCxwKSx0aGlzLmZpbHRlcihrLDQscCksMD09PXcpZm9yKG89Yy15KzEscz00O3M8ZTtvKz1kLHMrKylmb3IoYj0wO2I8eTtiKyspZ1tvK2JdPW1bYl1bc119cmV0dXJue3dpZHRoOmQsaGVpZ2h0OnAsaXRlbXM6Z319fV0pLGV9KCksSD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzPXI+PjEsYz0tMS41ODYxMzQzNDIwNTk5MjQsdT0tLjA1Mjk4MDExODU3Mjk2MSxsPS44ODI5MTEwNzU1MzA5MzQsZj0uNDQzNTA2ODUyMDQzOTcxLGg9MS4yMzAxNzQxMDQ5MTQwMDE7Zm9yKG49KHR8PTApLTMsYT1zKzQ7YS0tO24rPTIpZVtuXSo9LjgxMjg5MzA2NjExNTk2MDk7Zm9yKGk9ZiplWyhuPXQtMiktMV0sYT1zKzM7YS0tJiYobz1mKmVbbisxXSxlW25dPWgqZVtuXS1pLW8sYS0tKTtuKz0yKWk9ZiplWyhuKz0yKSsxXSxlW25dPWgqZVtuXS1pLW87Zm9yKGk9bCplWyhuPXQtMSktMV0sYT1zKzI7YS0tJiYobz1sKmVbbisxXSxlW25dLT1pK28sYS0tKTtuKz0yKWk9bCplWyhuKz0yKSsxXSxlW25dLT1pK287Zm9yKGk9dSplWyhuPXQpLTFdLGE9cysxO2EtLSYmKG89dSplW24rMV0sZVtuXS09aStvLGEtLSk7bis9MilpPXUqZVsobis9MikrMV0sZVtuXS09aStvO2lmKDAhPT1zKWZvcihpPWMqZVsobj10KzEpLTFdLGE9czthLS0mJihvPWMqZVtuKzFdLGVbbl0tPWkrbyxhLS0pO24rPTIpaT1jKmVbKG4rPTIpKzFdLGVbbl0tPWkrb319XSkscn0oWCkscT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9cj4+MTtmb3Iobj10fD0wLGE9aSsxO2EtLTtuKz0yKWVbbl0tPWVbbi0xXStlW24rMV0rMj4+Mjtmb3Iobj10KzEsYT1pO2EtLTtuKz0yKWVbbl0rPWVbbi0xXStlW24rMV0+PjF9fV0pLHJ9KFgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBpPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LG8oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTFpXU3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmNhY2hlZERhdGE9MCxuLmJpdHNDYWNoZWQ9MDtmb3IodmFyIGE9NDA5NixpPXtlYXJseUNoYW5nZTpyLGNvZGVMZW5ndGg6OSxuZXh0Q29kZToyNTgsZGljdGlvbmFyeVZhbHVlczpuZXcgVWludDhBcnJheShhKSxkaWN0aW9uYXJ5TGVuZ3RoczpuZXcgVWludDE2QXJyYXkoYSksZGljdGlvbmFyeVByZXZDb2RlczpuZXcgVWludDE2QXJyYXkoYSksY3VycmVudFNlcXVlbmNlOm5ldyBVaW50OEFycmF5KGEpLGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDowfSxvPTA7bzwyNTY7KytvKWkuZGljdGlvbmFyeVZhbHVlc1tvXT1vLGkuZGljdGlvbmFyeUxlbmd0aHNbb109MTtyZXR1cm4gbi5sendTdGF0ZT1pLG59cmV0dXJuIHQ9bCwocj1be2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmJpdHNDYWNoZWQscj10aGlzLmNhY2hlZERhdGE7dDxlOyl7dmFyIG49dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09bilyZXR1cm4gdGhpcy5lb2Y9ITAsbnVsbDtyPXI8PDh8bix0Kz04fXJldHVybiB0aGlzLmJpdHNDYWNoZWQ9dC09ZSx0aGlzLmNhY2hlZERhdGE9cix0aGlzLmxhc3RDb2RlPW51bGwscj4+PnQmKDE8PGUpLTF9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49MTAyNCxhPXRoaXMubHp3U3RhdGU7aWYoYSl7dmFyIGk9YS5lYXJseUNoYW5nZSxvPWEubmV4dENvZGUscz1hLmRpY3Rpb25hcnlWYWx1ZXMsYz1hLmRpY3Rpb25hcnlMZW5ndGhzLHU9YS5kaWN0aW9uYXJ5UHJldkNvZGVzLGw9YS5jb2RlTGVuZ3RoLGY9YS5wcmV2Q29kZSxoPWEuY3VycmVudFNlcXVlbmNlLGQ9YS5jdXJyZW50U2VxdWVuY2VMZW5ndGgscD0wLGc9dGhpcy5idWZmZXJMZW5ndGgsdj10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtuKTtmb3IoZT0wO2U8NTEyO2UrKyl7dmFyIHk9dGhpcy5yZWFkQml0cyhsKSxtPWQ+MDtpZih5PDI1NiloWzBdPXksZD0xO2Vsc2V7aWYoISh5Pj0yNTgpKXtpZigyNTY9PT15KXtsPTksbz0yNTgsZD0wO2NvbnRpbnVlfXRoaXMuZW9mPSEwLGRlbGV0ZSB0aGlzLmx6d1N0YXRlO2JyZWFrfWlmKHk8bylmb3IodD0oZD1jW3ldKS0xLHI9eTt0Pj0wO3QtLSloW3RdPXNbcl0scj11W3JdO2Vsc2UgaFtkKytdPWhbMF19aWYobSYmKHVbb109ZixjW29dPWNbZl0rMSxzW29dPWhbMF0sbD0rK28raSZvK2ktMT9sOjB8TWF0aC5taW4oTWF0aC5sb2cobytpKS8uNjkzMTQ3MTgwNTU5OTQ1MysxLDEyKSksZj15LG48KHArPWQpKXtkb3tuKz01MTJ9d2hpbGUobjxwKTt2PXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK24pfWZvcih0PTA7dDxkO3QrKyl2W2crK109aFt0XX1hLm5leHRDb2RlPW8sYS5jb2RlTGVuZ3RoPWwsYS5wcmV2Q29kZT1mLGEuY3VycmVudFNlcXVlbmNlTGVuZ3RoPWQsdGhpcy5idWZmZXJMZW5ndGg9Z319fV0pJiZhKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGx9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuTFpXU3RyZWFtPXN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlByZWRpY3RvclN0cmVhbT12b2lkIDA7dmFyIGE9cigxNDgpLGk9cigxMzQpLG89cigyKTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBsKGUpfWZ1bmN0aW9uIGwoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9dmFyIGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oZCxlKTt2YXIgdCxyLG4sYSxoPShuPWQsYT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWYobik7aWYoYSl7dmFyIHI9Zih0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdSh0aGlzLGUpfSk7ZnVuY3Rpb24gZChlLHQscil7dmFyIG47aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxkKSxuPWguY2FsbCh0aGlzLHQpLCEociBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIHUobixlKTt2YXIgYT1uLnByZWRpY3Rvcj1yLmdldCgiUHJlZGljdG9yIil8fDE7aWYoYTw9MSlyZXR1cm4gdShuLGUpO2lmKDIhPT1hJiYoYTwxMHx8YT4xNSkpdGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQoYSkpO24ucmVhZEJsb2NrPTI9PT1hP24ucmVhZEJsb2NrVGlmZjpuLnJlYWRCbG9ja1BuZyxuLnN0cj1lLG4uZGljdD1lLmRpY3Q7dmFyIHM9bi5jb2xvcnM9ci5nZXQoIkNvbG9ycyIpfHwxLGM9bi5iaXRzPXIuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsZj1uLmNvbHVtbnM9ci5nZXQoIkNvbHVtbnMiKXx8MTtyZXR1cm4gbi5waXhCeXRlcz1zKmMrNz4+MyxuLnJvd0J5dGVzPWYqcypjKzc+PjMsdShuLGwobikpfXJldHVybiB0PWQsKHI9W3trZXk6InJlYWRCbG9ja1RpZmYiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMuYnVmZmVyTGVuZ3RoLHI9dGhpcy5lbnN1cmVCdWZmZXIodCtlKSxuPXRoaXMuYml0cyxhPXRoaXMuY29sb3JzLGk9dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IWkubGVuZ3RoLCF0aGlzLmVvZil7dmFyIG8scz0wLGM9MCx1PTAsbD0wLGY9dDtpZigxPT09biYmMT09PWEpZm9yKG89MDtvPGU7KytvKXt2YXIgaD1pW29dXnM7aF49aD4+MSxoXj1oPj4yLHM9KDEmKGhePWg+PjQpKTw8NyxyW2YrK109aH1lbHNlIGlmKDg9PT1uKXtmb3Iobz0wO288YTsrK28pcltmKytdPWlbb107Zm9yKDtvPGU7KytvKXJbZl09cltmLWFdK2lbb10sZisrfWVsc2UgaWYoMTY9PT1uKXt2YXIgZD0yKmE7Zm9yKG89MDtvPGQ7KytvKXJbZisrXT1pW29dO2Zvcig7bzxlO28rPTIpe3ZhciBwPSgoMjU1Jmlbb10pPDw4KSsoMjU1JmlbbysxXSkrKCgyNTUmcltmLWRdKTw8OCkrKDI1NSZyW2YtZCsxXSk7cltmKytdPXA+PjgmMjU1LHJbZisrXT0yNTUmcH19ZWxzZXt2YXIgZz1uZXcgVWludDhBcnJheShhKzEpLHY9KDE8PG4pLTEseT0wLG09dCxiPXRoaXMuY29sdW1ucztmb3Iobz0wO288YjsrK28pZm9yKHZhciB3PTA7dzxhOysrdyl1PG4mJihzPXM8PDh8MjU1JmlbeSsrXSx1Kz04KSxnW3ddPWdbd10rKHM+PnUtbikmdix1LT1uLGM9Yzw8bnxnW3ddLChsKz1uKT49OCYmKHJbbSsrXT1jPj5sLTgmMjU1LGwtPTgpO2w+MCYmKHJbbSsrXT0oYzw8OC1sKSsocyYoMTw8OC1sKS0xKSl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fX0se2tleToicmVhZEJsb2NrUG5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLnBpeEJ5dGVzLHI9dGhpcy5zdHIuZ2V0Qnl0ZSgpLG49dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IW4ubGVuZ3RoLCF0aGlzLmVvZil7dmFyIGE9dGhpcy5idWZmZXJMZW5ndGgsaT10aGlzLmVuc3VyZUJ1ZmZlcihhK2UpLHM9aS5zdWJhcnJheShhLWUsYSk7MD09PXMubGVuZ3RoJiYocz1uZXcgVWludDhBcnJheShlKSk7dmFyIGMsdSxsLGY9YTtzd2l0Y2gocil7Y2FzZSAwOmZvcihjPTA7YzxlOysrYylpW2YrK109bltjXTticmVhaztjYXNlIDE6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT1uW2NdO2Zvcig7YzxlOysrYylpW2ZdPWlbZi10XStuW2NdJjI1NSxmKys7YnJlYWs7Y2FzZSAyOmZvcihjPTA7YzxlOysrYylpW2YrK109c1tjXStuW2NdJjI1NTticmVhaztjYXNlIDM6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT0oc1tjXT4+MSkrbltjXTtmb3IoO2M8ZTsrK2MpaVtmXT0oc1tjXStpW2YtdF0+PjEpK25bY10mMjU1LGYrKzticmVhaztjYXNlIDQ6Zm9yKGM9MDtjPHQ7KytjKXU9c1tjXSxsPW5bY10saVtmKytdPXUrbDtmb3IoO2M8ZTsrK2Mpe3U9c1tjXTt2YXIgaD1zW2MtdF0sZD1pW2YtdF0scD1kK3UtaCxnPXAtZDtnPDAmJihnPS1nKTt2YXIgdj1wLXU7djwwJiYodj0tdik7dmFyIHk9cC1oO3k8MCYmKHk9LXkpLGw9bltjXSxpW2YrK109Zzw9diYmZzw9eT9kK2w6djw9eT91K2w6aCtsfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQocikpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZH0oYS5EZWNvZGVTdHJlYW0pO3QuUHJlZGljdG9yU3RyZWFtPWh9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5SdW5MZW5ndGhTdHJlYW09dm9pZCAwO3ZhciBzPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZpKGUsdCl9KGwsZSk7dmFyIHQscixzLGMsdT0ocz1sLGM9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1vKHMpO2lmKGMpe3ZhciByPW8odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwocj11LmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyfXJldHVybiB0PWwsKHI9W3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl0aGlzLmVvZj0hMDtlbHNle3ZhciB0LHI9dGhpcy5idWZmZXJMZW5ndGgsbj1lWzBdO2lmKG48MTI4KXtpZigodD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSkpW3IrK109ZVsxXSxuPjApe3ZhciBhPXRoaXMuc3RyLmdldEJ5dGVzKG4pO3Quc2V0KGEscikscis9bn19ZWxzZXtuPTI1Ny1uO3ZhciBpPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSk7Zm9yKHZhciBvPTA7bzxuO28rKyl0W3IrK109aX10aGlzLmJ1ZmZlckxlbmd0aD1yfX19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5SdW5MZW5ndGhTdHJlYW09c30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnQ9dC5FcnJvckZvbnQ9dm9pZCAwO3ZhciBuPXIoMiksYT1yKDE2NCksaT1yKDE2Nyksbz1yKDE2OSkscz1yKDE2OCksYz1yKDE2NiksdT1yKDE3MCksbD1yKDE3MSksZj1yKDE3MiksaD1yKDE3MyksZD1yKDE3NCkscD1yKDE3NSksZz1yKDE0NSksdj1yKDE3NikseT1yKDEzNSksbT1yKDEzOSksYj1yKDE3Nyk7ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxTKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBrKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1TKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBTKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB4KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/eChlLHQpOnZvaWQgMH19ZnVuY3Rpb24geChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09TyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PU8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1PKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBGKGUsdCxyKXtyZXR1cm4gdCYmQyhlLnByb3RvdHlwZSx0KSxyJiZDKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgUD1bWzU3MzQ0LDYzNzQzXSxbMTA0ODU3NiwxMTE0MTA5XV0sVD0xZTMsST1bImFzY2VudCIsImJib3giLCJibGFjayIsImJvbGQiLCJjaGFyUHJvY09wZXJhdG9yTGlzdCIsImNvbXBvc2l0ZSIsImNzc0ZvbnRJbmZvIiwiZGF0YSIsImRlZmF1bHRWTWV0cmljcyIsImRlZmF1bHRXaWR0aCIsImRlc2NlbnQiLCJmYWxsYmFja05hbWUiLCJmb250TWF0cml4IiwiZm9udFR5cGUiLCJpc0ludmFsaWRQREZqc0ZvbnQiLCJpc1R5cGUzRm9udCIsIml0YWxpYyIsImxvYWRlZE5hbWUiLCJtaW1ldHlwZSIsIm1pc3NpbmdGaWxlIiwibmFtZSIsInJlbWVhc3VyZSIsInN1YnR5cGUiLCJ0eXBlIiwidmVydGljYWwiXSxFPVsiY01hcCIsImRlZmF1bHRFbmNvZGluZyIsImRpZmZlcmVuY2VzIiwiaXNNb25vc3BhY2UiLCJpc1NlcmlmRm9udCIsImlzU3ltYm9saWNGb250Iiwic2VhY01hcCIsInRvRm9udENoYXIiLCJ0b1VuaWNvZGUiLCJ2bWV0cmljcyIsIndpZHRocyJdO2Z1bmN0aW9uIGooZSl7aWYoZS5mb250TWF0cml4JiZlLmZvbnRNYXRyaXhbMF0hPT1uLkZPTlRfSURFTlRJVFlfTUFUUklYWzBdKXt2YXIgdD0uMDAxL2UuZm9udE1hdHJpeFswXSxyPWUud2lkdGhzO2Zvcih2YXIgYSBpbiByKXJbYV0qPXQ7ZS5kZWZhdWx0V2lkdGgqPXR9fWZ1bmN0aW9uIE0oZSl7aWYoZS5mYWxsYmFja1RvVW5pY29kZSYmIShlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXApKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZS5mYWxsYmFja1RvVW5pY29kZSllLnRvVW5pY29kZS5oYXMocil8fCh0W3JdPWUuZmFsbGJhY2tUb1VuaWNvZGVbcl0pO3QubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHQpfX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpLG8scyxjLHUpe0EodGhpcyxlKSx0aGlzLm9yaWdpbmFsQ2hhckNvZGU9dCx0aGlzLmZvbnRDaGFyPXIsdGhpcy51bmljb2RlPW4sdGhpcy5hY2NlbnQ9YSx0aGlzLndpZHRoPWksdGhpcy52bWV0cmljPW8sdGhpcy5vcGVyYXRvckxpc3RJZD1zLHRoaXMuaXNTcGFjZT1jLHRoaXMuaXNJbkZvbnQ9dX1yZXR1cm4gRihlLFt7a2V5OiJjYXRlZ29yeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNhdGVnb3J5IiwoMCxvLmdldENoYXJVbmljb2RlQ2F0ZWdvcnkpKHRoaXMudW5pY29kZSksITApfX0se2tleToibm9ybWFsaXplZFVuaWNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJub3JtYWxpemVkVW5pY29kZSIsKDAsby5yZXZlcnNlSWZSdGwpKGUuX05vcm1hbGl6ZWRVbmljb2Rlc1t0aGlzLnVuaWNvZGVdfHx0aGlzLnVuaWNvZGUpLCEwKX19XSxbe2tleToiX05vcm1hbGl6ZWRVbmljb2RlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIl9Ob3JtYWxpemVkVW5pY29kZXMiLCgwLG8uZ2V0Tm9ybWFsaXplZFVuaWNvZGVzKSgpKX19XSksZX0oKTtmdW5jdGlvbiBMKGUsdCl7cmV0dXJuKGU8PDgpK3R9ZnVuY3Rpb24gUihlLHQscil7ZVt0KzFdPXIsZVt0XT1yPj4+OH1mdW5jdGlvbiBOKGUsdCl7dmFyIHI9KGU8PDgpK3Q7cmV0dXJuIDMyNzY4JnI/ci02NTUzNjpyfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIGU+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KSxTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiJ0dGNmIj09PSgwLG4uYnl0ZXNUb1N0cmluZykodCl9ZnVuY3Rpb24gJChlLHQpe2Zvcih2YXIgciBpbiB0KWVbK3JdPXRbcl19ZnVuY3Rpb24gWChlLHQscil7Zm9yKHZhciBuLGE9W10saT0wLHM9ZS5sZW5ndGg7aTxzO2krKyktMSE9PShuPSgwLG8uZ2V0VW5pY29kZUZvckdseXBoKShlW2ldLHQpKSYmKGFbaV09bik7Zm9yKHZhciBjIGluIHIpLTEhPT0obj0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkocltjXSx0KSkmJihhWytjXT1uKTtyZXR1cm4gYX1mdW5jdGlvbiBIKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gdC5jaGFyQ29kZUF0KDApO2Nhc2UgMjpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPDw4fHQuY2hhckNvZGVBdCgxKX12YXIgYT0iVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgIi5jb25jYXQoZSwnKTogIicpLmNvbmNhdCh0LCciLicpO2lmKHIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYSk7cmV0dXJuKDAsbi53YXJuKShhKSx0fWZ1bmN0aW9uIHEoZSx0LHIsYSl7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKSxvPW5ldyBNYXAscz1bXSxjPW5ldyBTZXQsdT0wLGw9UFt1XVswXSxmPWwsaD1QW3VdWzFdO2Zvcih2YXIgZCBpbiBlKXt2YXIgcD1lW2R8PTBdO2lmKHQocCkpe2lmKGY+aCl7aWYoKyt1Pj1QLmxlbmd0aCl7KDAsbi53YXJuKSgiUmFuIG91dCBvZiBzcGFjZSBpbiBmb250IHByaXZhdGUgdXNlIGFyZWEuIik7YnJlYWt9Zj1QW3VdWzBdLGg9UFt1XVsxXX12YXIgZz1mKys7MD09PXAmJihwPXIpO3ZhciB2PWEuZ2V0KGQpOyJzdHJpbmciPT10eXBlb2YgdiYmKHY9di5jb2RlUG9pbnRBdCgwKSksdiYmdjxsJiYhYy5oYXMocCkmJihvLnNldCh2LHApLGMuYWRkKHApKSxpW2ddPXAsc1tkXT1nfX1yZXR1cm57dG9Gb250Q2hhcjpzLGNoYXJDb2RlVG9HbHlwaElkOmksdG9Vbmljb2RlRXh0cmFNYXA6byxuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlOmZ9fWZ1bmN0aW9uIEcoZSx0LHIpe3ZhciBhLGksbyxzLGM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtdO2Zvcih2YXIgYSBpbiBlKWVbYV0+PXJ8fG4ucHVzaCh7Zm9udENoYXJDb2RlOjB8YSxnbHlwaElkOmVbYV19KTtpZih0KXt2YXIgaSxvPWsodCk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz13KGkudmFsdWUsMiksYz1zWzBdLHU9c1sxXTt1Pj1yfHxuLnB1c2goe2ZvbnRDaGFyQ29kZTpjLGdseXBoSWQ6dX0pfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19MD09PW4ubGVuZ3RoJiZuLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pLG4uc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Zm9yKHZhciBsPVtdLGY9bi5sZW5ndGgsaD0wO2g8Zjspe3ZhciBkPW5baF0uZm9udENoYXJDb2RlLHA9W25baF0uZ2x5cGhJZF07KytoO2Zvcih2YXIgZz1kO2g8ZiYmZysxPT09bltoXS5mb250Q2hhckNvZGUmJihwLnB1c2gobltoXS5nbHlwaElkKSwrK2gsNjU1MzUhPSsrZyk7KTtsLnB1c2goW2QsZyxwXSl9cmV0dXJuIGx9KGUsdCxyKSx1PWMuYXQoLTEpWzFdPjY1NTM1PzI6MSxsPSJcMFwwIitEKHUpKyJcMANcMAEiKygwLG4uc3RyaW5nMzIpKDQrOCp1KTtmb3IoYT1jLmxlbmd0aC0xO2E+PTAmJiEoY1thXVswXTw9NjU1MzUpOy0tYSk7dmFyIGY9YSsxO2NbYV1bMF08NjU1MzUmJjY1NTM1PT09Y1thXVsxXSYmKGNbYV1bMV09NjU1MzQpO3ZhciBoLGQscCxnLHk9Y1thXVsxXTw2NTUzNT8xOjAsbT1mK3ksYj12Lk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG0sMiksUz0iIix4PSIiLE89IiIsQT0iIixDPSIiLEY9MDtmb3IoYT0wLGk9ZjthPGk7YSsrKXtkPShoPWNbYV0pWzBdLHA9aFsxXSxTKz1EKGQpLHgrPUQocCk7dmFyIFA9ITA7Zm9yKG89MSxzPShnPWhbMl0pLmxlbmd0aDtvPHM7KytvKWlmKGdbb10hPT1nW28tMV0rMSl7UD0hMTticmVha31pZihQKU8rPUQoZ1swXS1kJjY1NTM1KSxBKz1EKDApO2Vsc2V7dmFyIFQ9MioobS1hKSsyKkY7Zm9yKEYrPXAtZCsxLE8rPUQoMCksQSs9RChUKSxvPTAscz1nLmxlbmd0aDtvPHM7KytvKUMrPUQoZ1tvXSl9fXk+MCYmKHgrPSLDv8O/IixTKz0iw7/DvyIsTys9IlwwASIsQSs9IlwwXDAiKTt2YXIgST0iXDBcMCIrRCgyKm0pK0QoYi5yYW5nZSkrRChiLmVudHJ5KStEKGIucmFuZ2VTaGlmdCkreCsiXDBcMCIrUytPK0ErQyxFPSIiLGo9IiI7aWYodT4xKXtmb3IobCs9IlwwA1wwXG4iKygwLG4uc3RyaW5nMzIpKDQrOCp1KzQrSS5sZW5ndGgpLEU9IiIsYT0wLGk9Yy5sZW5ndGg7YTxpO2ErKyl7ZD0oaD1jW2FdKVswXTt2YXIgTT0oZz1oWzJdKVswXTtmb3Iobz0xLHM9Zy5sZW5ndGg7bzxzOysrbylnW29dIT09Z1tvLTFdKzEmJihwPWhbMF0rby0xLEUrPSgwLG4uc3RyaW5nMzIpKGQpKygwLG4uc3RyaW5nMzIpKHApKygwLG4uc3RyaW5nMzIpKE0pLGQ9cCsxLE09Z1tvXSk7RSs9KDAsbi5zdHJpbmczMikoZCkrKDAsbi5zdHJpbmczMikoaFsxXSkrKDAsbi5zdHJpbmczMikoTSl9aj0iXDBcZlwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoKzE2KSsiXDBcMFwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoLzEyKX1yZXR1cm4gbCsiXDAEIitEKEkubGVuZ3RoKzQpK0kraitFfWZ1bmN0aW9uIHooZSx0LHIpe3I9cnx8e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH07dmFyIGE9MCxpPTAscz0wLGM9MCx1PW51bGwsbD0wO2lmKHQpe2Zvcih2YXIgZiBpbiB0KXsodT4oZnw9MCl8fCF1KSYmKHU9ZiksbDxmJiYobD1mKTt2YXIgaD0oMCxvLmdldFVuaWNvZGVSYW5nZUZvcikoZik7aWYoaDwzMilhfD0xPDxoO2Vsc2UgaWYoaDw2NClpfD0xPDxoLTMyO2Vsc2UgaWYoaDw5NilzfD0xPDxoLTY0O2Vsc2V7aWYoIShoPDEyMykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuaWNvZGUgcmFuZ2VzIEJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSIpO2N8PTE8PGgtOTZ9fWw+NjU1MzUmJihsPTY1NTM1KX1lbHNlIHU9MCxsPTI1NTt2YXIgZD1lLmJib3h8fFswLDAsMCwwXSxwPXIudW5pdHNQZXJFbXx8MS8oZS5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSxnPWUuYXNjZW50U2NhbGVkPzE6cC9ULHY9ci5hc2NlbnR8fE1hdGgucm91bmQoZyooZS5hc2NlbnR8fGRbM10pKSx5PXIuZGVzY2VudHx8TWF0aC5yb3VuZChnKihlLmRlc2NlbnR8fGRbMV0pKTt5PjAmJmUuZGVzY2VudD4wJiZkWzFdPDAmJih5PS15KTt2YXIgbT1yLnlNYXh8fHYsYj0tci55TWlufHwteTtyZXR1cm4iXDADAiQBw7RcMAVcMFwwAsKKAsK7XDBcMFwwwowCwooCwrtcMFwwAcOfXHgwMDEBAlwwXDBcMFwwBiIrU3RyaW5nLmZyb21DaGFyQ29kZShlLmZpeGVkUGl0Y2g/OTowKSsiXDBcMFwwXDBcMFwwIisoMCxuLnN0cmluZzMyKShhKSsoMCxuLnN0cmluZzMyKShpKSsoMCxuLnN0cmluZzMyKShzKSsoMCxuLnN0cmluZzMyKShjKSsiKjIxKiIrRChlLml0YWxpY0FuZ2xlPzE6MCkrRCh1fHxlLmZpcnN0Q2hhcikrRChsfHxlLmxhc3RDaGFyKStEKHYpK0QoeSkrIlwwZCIrRChtKStEKGIpKyJcMFwwXDBcMFwwXDBcMFwwIitEKGUueEhlaWdodCkrRChlLmNhcEhlaWdodCkrRCgwKStEKHV8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBXKGUpe3ZhciB0PU1hdGguZmxvb3IoZS5pdGFsaWNBbmdsZSpNYXRoLnBvdygyLDE2KSk7cmV0dXJuIlwwA1wwXDAiKygwLG4uc3RyaW5nMzIpKHQpKyJcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoZS5maXhlZFBpdGNoPzE6MCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn1mdW5jdGlvbiBWKGUpe3JldHVybiBlLnJlcGxhY2UoL1teXHgyMS1ceDdFXXxbW1xdKCl7fTw+LyVdL2csIiIpLnNsaWNlKDAsNjMpfWZ1bmN0aW9uIFkoZSx0KXt0fHwodD1bW10sW11dKTt2YXIgcixuLGEsaSxvLHM9W3RbMF1bMF18fCJPcmlnaW5hbCBsaWNlbmNlIix0WzBdWzFdfHxlLHRbMF1bMl18fCJVbmtub3duIix0WzBdWzNdfHwidW5pcXVlSUQiLHRbMF1bNF18fGUsdFswXVs1XXx8IlZlcnNpb24gMC4xMSIsdFswXVs2XXx8VihlKSx0WzBdWzddfHwiVW5rbm93biIsdFswXVs4XXx8IlVua25vd24iLHRbMF1bOV18fCJVbmtub3duIl0sYz1bXTtmb3Iocj0wLG49cy5sZW5ndGg7cjxuO3IrKyl7dmFyIHU9W107Zm9yKGE9MCxpPShvPXRbMV1bcl18fHNbcl0pLmxlbmd0aDthPGk7YSsrKXUucHVzaChEKG8uY2hhckNvZGVBdChhKSkpO2MucHVzaCh1LmpvaW4oIiIpKX12YXIgbD1bcyxjXSxmPVsiXDABIiwiXDADIl0saD1bIlwwXDAiLCJcMAEiXSxkPVsiXDBcMCIsIgRcdCJdLHA9cy5sZW5ndGgqZi5sZW5ndGgsZz0iXDBcMCIrRChwKStEKDEyKnArNiksdj0wO2ZvcihyPTAsbj1mLmxlbmd0aDtyPG47cisrKXt2YXIgeT1sW3JdO2ZvcihhPTAsaT15Lmxlbmd0aDthPGk7YSsrKW89eVthXSxnKz1mW3JdK2hbcl0rZFtyXStEKGEpK0Qoby5sZW5ndGgpK0Qodiksdis9by5sZW5ndGh9cmV0dXJuIGcrKHMuam9pbigiIikrYy5qb2luKCIiKSl9dmFyIEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixhKXtBKHRoaXMsZSksdGhpcy5uYW1lPXQsdGhpcy5wc05hbWU9bnVsbCx0aGlzLm1pbWV0eXBlPW51bGwsdGhpcy5kaXNhYmxlRm9udEZhY2U9ITEsdGhpcy5sb2FkZWROYW1lPWEubG9hZGVkTmFtZSx0aGlzLmlzVHlwZTNGb250PWEuaXNUeXBlM0ZvbnQsdGhpcy5taXNzaW5nRmlsZT0hMSx0aGlzLmNzc0ZvbnRJbmZvPWEuY3NzRm9udEluZm8sdGhpcy5fY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2dseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgbz0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlNlcmlmKTtpZighbyYmIWEuaXNTaW11bGF0ZWRGbGFncyl7dmFyIHMsYz10LnJlcGxhY2UoL1ssX10vZywiLSIpLnNwbGl0KCItIilbMF0sbD0oMCx1LmdldFNlcmlmRm9udHMpKCksaD1rKGMuc3BsaXQoIisiKSk7dHJ5e2ZvcihoLnMoKTshKHM9aC5uKCkpLmRvbmU7KWlmKGxbcy52YWx1ZV0pe289ITA7YnJlYWt9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX10aGlzLmlzU2VyaWZGb250PW8sdGhpcy5pc1N5bWJvbGljRm9udD0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlN5bWJvbGljKSx0aGlzLmlzTW9ub3NwYWNlPSEhKGEuZmxhZ3MmaS5Gb250RmxhZ3MuRml4ZWRQaXRjaCk7dmFyIGQ9YS50eXBlLHA9YS5zdWJ0eXBlO3RoaXMudHlwZT1kLHRoaXMuc3VidHlwZT1wO3ZhciBnPXQubWF0Y2goL15JbnZhbGlkUERGanNGb250XyguKilfXGQrJC8pO2lmKHRoaXMuaXNJbnZhbGlkUERGanNGb250PSEhZyx0aGlzLmlzSW52YWxpZFBERmpzRm9udD90aGlzLmZhbGxiYWNrTmFtZT1nWzFdOnRoaXMuaXNNb25vc3BhY2U/dGhpcy5mYWxsYmFja05hbWU9Im1vbm9zcGFjZSI6dGhpcy5pc1NlcmlmRm9udD90aGlzLmZhbGxiYWNrTmFtZT0ic2VyaWYiOnRoaXMuZmFsbGJhY2tOYW1lPSJzYW5zLXNlcmlmIix0aGlzLmRpZmZlcmVuY2VzPWEuZGlmZmVyZW5jZXMsdGhpcy53aWR0aHM9YS53aWR0aHMsdGhpcy5kZWZhdWx0V2lkdGg9YS5kZWZhdWx0V2lkdGgsdGhpcy5jb21wb3NpdGU9YS5jb21wb3NpdGUsdGhpcy5jTWFwPWEuY01hcCx0aGlzLmNhcEhlaWdodD1hLmNhcEhlaWdodC9ULHRoaXMuYXNjZW50PWEuYXNjZW50L1QsdGhpcy5kZXNjZW50PWEuZGVzY2VudC9ULHRoaXMubGluZUhlaWdodD10aGlzLmFzY2VudC10aGlzLmRlc2NlbnQsdGhpcy5mb250TWF0cml4PWEuZm9udE1hdHJpeCx0aGlzLmJib3g9YS5iYm94LHRoaXMuZGVmYXVsdEVuY29kaW5nPWEuZGVmYXVsdEVuY29kaW5nLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMudG9Gb250Q2hhcj1bXSwiVHlwZTMiIT09YS50eXBlKXtpZih0aGlzLmNpZEVuY29kaW5nPWEuY2lkRW5jb2Rpbmd8fCIiLHRoaXMudmVydGljYWw9ISFhLnZlcnRpY2FsLHRoaXMudmVydGljYWwmJih0aGlzLnZtZXRyaWNzPWEudm1ldHJpY3MsdGhpcy5kZWZhdWx0Vk1ldHJpY3M9YS5kZWZhdWx0Vk1ldHJpY3MpLCFyfHxyLmlzRW1wdHkpcmV0dXJuIHImJigwLG4ud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJyt0KyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpLHZvaWQgdGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChhKTt2YXIgdixtPXcoZnVuY3Rpb24oZSx0KXt2YXIgcixhLGk9dC50eXBlLG89dC5zdWJ0eXBlLHM9dC5jb21wb3NpdGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PSgwLHkucmVhZFVpbnQzMikodCwwKXx8InRydWUiPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSl8fFUoZSk/cj1zPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIk9UVE8iPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSk/cj1zPyJDSURGb250VHlwZTIiOiJPcGVuVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoMik7cmV0dXJuIDM3PT09dFswXSYmMzM9PT10WzFdfHwxMjg9PT10WzBdJiYxPT09dFsxXX0oZSk/cj1zPyJDSURGb250VHlwZTAiOiJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpP3M/KHI9IkNJREZvbnRUeXBlMCIsYT0iQ0lERm9udFR5cGUwQyIpOihyPSJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSIsYT0iVHlwZTFDIik6KCgwLG4ud2FybikoImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIikscj1pLGE9byksW3IsYV19KHIsYSksMik7ZD1tWzBdLHA9bVsxXSxkPT09dGhpcy50eXBlJiZwPT09dGhpcy5zdWJ0eXBlfHwoMCxuLmluZm8pKCJJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICIrIiIuY29uY2F0KHRoaXMudHlwZSwiLyIpLmNvbmNhdCh0aGlzLnN1YnR5cGUsIiBidXQgZm91bmQ6ICIpLmNvbmNhdChkLCIvIikuY29uY2F0KHAsIi4iKSk7dHJ5e3N3aXRjaChkKXtjYXNlIk1NVHlwZTEiOigwLG4uaW5mbykoIk1NVHlwZTEgZm9udCAoIit0KyIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuIik7Y2FzZSJUeXBlMSI6Y2FzZSJDSURGb250VHlwZTAiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO3ZhciBTPSJUeXBlMUMiPT09cHx8IkNJREZvbnRUeXBlMEMiPT09cD9uZXcgZi5DRkZGb250KHIsYSk6bmV3IGIuVHlwZTFGb250KHQscixhKTtqKGEpLHY9dGhpcy5jb252ZXJ0KHQsUyxhKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSIsdj10aGlzLmNoZWNrQW5kUmVwYWlyKHQscixhKSx0aGlzLmlzT3BlblR5cGUmJihqKGEpLGQ9Ik9wZW5UeXBlIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRm9udCAiLmNvbmNhdChkLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19Y2F0Y2goZSl7cmV0dXJuKDAsbi53YXJuKShlKSx2b2lkIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSl9TShhKSx0aGlzLmRhdGE9dix0aGlzLmZvbnRUeXBlPSgwLGkuZ2V0Rm9udFR5cGUpKGQscCxhLmlzU3RhbmRhcmRGb250KSx0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4LHRoaXMud2lkdGhzPWEud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPWEuZGVmYXVsdFdpZHRoLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMuc2VhY01hcD1hLnNlYWNNYXB9ZWxzZXtmb3IodmFyIHg9MDt4PDI1Njt4KyspdGhpcy50b0ZvbnRDaGFyW3hdPXRoaXMuZGlmZmVyZW5jZXNbeF18fGEuZGVmYXVsdEVuY29kaW5nW3hdO3RoaXMuZm9udFR5cGU9bi5Gb250VHlwZS5UWVBFM319cmV0dXJuIEYoZSxbe2tleToicmVuZGVyZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPWguRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcyxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJlbmRlcmVyIixlKX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXT9bXS5jb25jYXQoSSxFKTpJLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxpPWsobik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXZvaWQgMCE9PSh0PXRoaXNbZT1yLnZhbHVlXSkmJihhW2VdPXQpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0se2tleToiZmFsbGJhY2tUb1N5c3RlbUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5taXNzaW5nRmlsZT0hMDt2YXIgcj10aGlzLm5hbWUsYT10aGlzLnR5cGUsZj10aGlzLnN1YnR5cGUsaD0oMCxpLm5vcm1hbGl6ZUZvbnROYW1lKShyKSxwPSgwLHUuZ2V0U3RkRm9udE1hcCkoKSxnPSgwLHUuZ2V0Tm9uU3RkRm9udE1hcCkoKSx2PSEhcFtoXSx5PSEoIWdbaF18fCFwW2dbaF1dKTtoPXBbaF18fGdbaF18fGg7dmFyIG09KDAsZC5nZXRGb250QmFzaWNNZXRyaWNzKSgpW2hdO20mJihpc05hTih0aGlzLmFzY2VudCkmJih0aGlzLmFzY2VudD1tLmFzY2VudC9UKSxpc05hTih0aGlzLmRlc2NlbnQpJiYodGhpcy5kZXNjZW50PW0uZGVzY2VudC9UKSxpc05hTih0aGlzLmNhcEhlaWdodCkmJih0aGlzLmNhcEhlaWdodD1tLmNhcEhlaWdodC9UKSksdGhpcy5ib2xkPS9ib2xkL2dpLnRlc3QoaCksdGhpcy5pdGFsaWM9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QoaCksdGhpcy5ibGFjaz0vQmxhY2svZy50ZXN0KHIpO3ZhciBiPS9OYXJyb3cvZy50ZXN0KHIpO2lmKHRoaXMucmVtZWFzdXJlPSghdnx8YikmJk9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGg+MCwodnx8eSkmJiJDSURGb250VHlwZTIiPT09YSYmdGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKSl7dmFyIHc9ZS5jaWRUb0dpZE1hcCxrPVtdO2lmKCQoaywoMCx1LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSksL0FyaWFsLT9CbGFjay9pLnRlc3Qocik/JChrLCgwLHUuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpKTovQ2FsaWJyaS9pLnRlc3QocikmJiQoaywoMCx1LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKSksdyl7Zm9yKHZhciBTIGluIGspe3ZhciB4PWtbU107dm9pZCAwIT09d1t4XSYmKGtbK1NdPXdbeF0pfXcubGVuZ3RoIT09dGhpcy50b1VuaWNvZGUubGVuZ3RoJiZlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9a1tlXTt2b2lkIDA9PT13W3JdJiYoa1srZV09dCl9KSl9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2tbK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPWssdGhpcy50b1VuaWNvZGU9bmV3IGwuVG9Vbmljb2RlTWFwKGspfWVsc2UgaWYoL1N5bWJvbC9pLnRlc3QoaCkpdGhpcy50b0ZvbnRDaGFyPVgoYy5TeW1ib2xTZXRFbmNvZGluZywoMCxzLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZigvRGluZ2JhdHMvaS50ZXN0KGgpKS9XaW5nZGluZ3MvaS50ZXN0KHIpJiYoMCxuLndhcm4pKCJOb24tZW1iZWRkZWQgV2luZ2RpbmdzIGZvbnQsIGZhbGxpbmcgYmFjayB0byBaYXBmRGluZ2JhdHMuIiksdGhpcy50b0ZvbnRDaGFyPVgoYy5aYXBmRGluZ2JhdHNFbmNvZGluZywoMCxzLmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKHYpe3ZhciBPPVgodGhpcy5kZWZhdWx0RW5jb2RpbmcsKDAscy5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpOyJDSURGb250VHlwZTIiIT09YXx8dGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKXx8dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe09bK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPU99ZWxzZXt2YXIgQT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKCksQz1bXTt0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCF0LmNvbXBvc2l0ZSl7dmFyIG49dC5kaWZmZXJlbmNlc1tlXXx8dC5kZWZhdWx0RW5jb2RpbmdbZV0sYT0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkobixBKTstMSE9PWEmJihyPWEpfUNbK2VdPXJ9KSksdGhpcy5jb21wb3NpdGUmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCYmL1RhaG9tYXxWZXJkYW5hL2kudGVzdChyKSYmJChDLCgwLHUuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpKSx0aGlzLnRvRm9udENoYXI9Q31NKGUpLHRoaXMubG9hZGVkTmFtZT1oLnNwbGl0KCItIilbMF0sdGhpcy5mb250VHlwZT0oMCxpLmdldEZvbnRUeXBlKShhLGYsZS5pc1N0YW5kYXJkRm9udCl9fSx7a2V5OiJjaGVja0FuZFJlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPVsiT1MvMiIsImNtYXAiLCJoZWFkIiwiaGhlYSIsImhtdHgiLCJtYXhwIiwibmFtZSIsInBvc3QiLCJsb2NhIiwiZ2x5ZiIsImZwZ20iLCJwcmVwIiwiY3Z0ICIsIkNGRiAiXTtmdW5jdGlvbiB1KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyWyJPUy8yIl09bnVsbCxyLmNtYXA9bnVsbCxyLmhlYWQ9bnVsbCxyLmhoZWE9bnVsbCxyLmhtdHg9bnVsbCxyLm1heHA9bnVsbCxyLm5hbWU9bnVsbCxyLnBvc3Q9bnVsbDtmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgYT1oKGUpO28uaW5jbHVkZXMoYS50YWcpJiYwIT09YS5sZW5ndGgmJihyW2EudGFnXT1hKX1yZXR1cm4gcn1mdW5jdGlvbiBoKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLGk9ZS5wb3M7ZS5wb3M9ZS5zdGFydHx8MCxlLnNraXAobik7dmFyIG89ZS5nZXRCeXRlcyhhKTtyZXR1cm4gZS5wb3M9aSwiaGVhZCI9PT10JiYob1s4XT1vWzldPW9bMTBdPW9bMTFdPTAsb1sxN118PTMyKSx7dGFnOnQsY2hlY2tzdW06cixsZW5ndGg6YSxvZmZzZXQ6bixkYXRhOm99fWZ1bmN0aW9uIGQoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiB5KGUsdCxyLG4sYSxpKXt2YXIgbz17bGVuZ3RoOjAsc2l6ZU9mSW5zdHJ1Y3Rpb25zOjB9O2lmKHItdDw9MTIpcmV0dXJuIG87dmFyIHM9ZS5zdWJhcnJheSh0LHIpLGM9TihzWzBdLHNbMV0pO2lmKGM8MClyZXR1cm4gUihzLDAsYz0tMSksbi5zZXQocyxhKSxvLmxlbmd0aD1zLmxlbmd0aCxvO3ZhciB1LGw9MTAsZj0wO2Zvcih1PTA7dTxjO3UrKylmPTErKHNbbF08PDh8c1tsKzFdKSxsKz0yO3ZhciBoPWwsZD1zW2xdPDw4fHNbbCsxXTtvLnNpemVPZkluc3RydWN0aW9ucz1kO3ZhciBwPWwrPTIrZCxnPTA7Zm9yKHU9MDt1PGY7dSsrKXt2YXIgdj1zW2wrK107MTkyJnYmJihzW2wtMV09NjMmdik7dmFyIHk9MjsyJnY/eT0xOjE2JnYmJih5PTApO3ZhciBtPTI7NCZ2P209MTozMiZ2JiYobT0wKTt2YXIgYj15K207aWYoZys9Yiw4JnYpe3ZhciB3PXNbbCsrXTt1Kz13LGcrPXcqYn19aWYoMD09PWcpcmV0dXJuIG87dmFyIGs9bCtnO3JldHVybiBrPnMubGVuZ3RoP286IWkmJmQ+MD8obi5zZXQocy5zdWJhcnJheSgwLGgpLGEpLG4uc2V0KFswLDBdLGEraCksbi5zZXQocy5zdWJhcnJheShwLGspLGEraCsyKSxrLT1kLHMubGVuZ3RoLWs+MyYmKGs9ayszJi00KSxvLmxlbmd0aD1rLG8pOnMubGVuZ3RoLWs+Mz8oaz1rKzMmLTQsbi5zZXQocy5zdWJhcnJheSgwLGspLGEpLG8ubGVuZ3RoPWssbyk6KG4uc2V0KHMsYSksby5sZW5ndGg9cy5sZW5ndGgsbyl9ZnVuY3Rpb24gYihlKXt2YXIgcj0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9cjt2YXIgbj1bW10sW11dLGE9ZS5sZW5ndGgsaT1yK2E7aWYoMCE9PXQuZ2V0VWludDE2KCl8fGE8NilyZXR1cm4gbjt2YXIgbyxzLGM9dC5nZXRVaW50MTYoKSx1PXQuZ2V0VWludDE2KCksbD1bXTtmb3Iobz0wO288YyYmdC5wb3MrMTI8PWk7bysrKXt2YXIgZj17cGxhdGZvcm06dC5nZXRVaW50MTYoKSxlbmNvZGluZzp0LmdldFVpbnQxNigpLGxhbmd1YWdlOnQuZ2V0VWludDE2KCksbmFtZTp0LmdldFVpbnQxNigpLGxlbmd0aDp0LmdldFVpbnQxNigpLG9mZnNldDp0LmdldFVpbnQxNigpfTsoMT09PWYucGxhdGZvcm0mJjA9PT1mLmVuY29kaW5nJiYwPT09Zi5sYW5ndWFnZXx8Mz09PWYucGxhdGZvcm0mJjE9PT1mLmVuY29kaW5nJiYxMDMzPT09Zi5sYW5ndWFnZSkmJmwucHVzaChmKX1mb3Iobz0wLHM9bC5sZW5ndGg7bzxzO28rKyl7dmFyIGg9bFtvXTtpZighKGgubGVuZ3RoPD0wKSl7dmFyIGQ9cit1K2gub2Zmc2V0O2lmKCEoZCtoLmxlbmd0aD5pKSl7dC5wb3M9ZDt2YXIgcD1oLm5hbWU7aWYoaC5lbmNvZGluZyl7Zm9yKHZhciBnPSIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kz0yKWcrPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7blsxXVtwXT1nfWVsc2UgblswXVtwXT10LmdldFN0cmluZyhoLmxlbmd0aCl9fX1yZXR1cm4gbn12YXIgdyxTLHgsTyxBPVswLDAsMCwwLDAsMCwwLDAsLTIsLTIsLTIsLTIsMCwwLC0yLC01LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLC0xLC0xLDEsLTEsLTk5OSwwLDEsMCwtMSwtMiwwLC0xLC0yLC0xLC0xLDAsLTEsLTEsMCwwLC05OTksLTk5OSwtMSwtMSwtMSwtMSwtMiwtOTk5LC0yLC0yLC05OTksMCwtMiwtMiwwLDAsLTIsMCwtMiwwLDAsMCwtMiwtMSwtMSwxLDEsMCwwLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLDAsLTk5OSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwtMiwtOTk5LC05OTksLTk5OSwtOTk5LC05OTksLTEsLTEsLTIsLTIsMCwwLDAsMCwtMSwtMSwtOTk5LC0yLC0yLDAsMCwtMSwtMiwtMiwwLDAsMCwtMSwtMSwtMSwtMl07ZnVuY3Rpb24gQyhlLHQpe2Zvcih2YXIgcixhLGksbyxzLGM9ZS5kYXRhLHU9MCxsPTAsZj0wLGg9W10sZD1bXSxwPVtdLGc9dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMsdj0hMSx5PTAsbT0wLGI9Yy5sZW5ndGg7dTxiOyl7dmFyIHc9Y1t1KytdO2lmKDY0PT09dylpZihhPWNbdSsrXSx2fHxtKXUrPWE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaC5wdXNoKGNbdSsrXSk7ZWxzZSBpZig2NT09PXcpaWYoYT1jW3UrK10sdnx8bSl1Kz0yKmE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaT1jW3UrK10saC5wdXNoKGk8PDh8Y1t1KytdKTtlbHNlIGlmKDE3Nj09KDI0OCZ3KSlpZihhPXctMTc2KzEsdnx8bSl1Kz1hO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWgucHVzaChjW3UrK10pO2Vsc2UgaWYoMTg0PT0oMjQ4JncpKWlmKGE9dy0xODQrMSx2fHxtKXUrPTIqYTtlbHNlIGZvcihyPTA7cjxhO3IrKylpPWNbdSsrXSxoLnB1c2goaTw8OHxjW3UrK10pO2Vsc2UgaWYoNDMhPT13fHxnKWlmKDQ0IT09d3x8Zyl7aWYoNDU9PT13KWlmKHYpdj0hMSxsPXU7ZWxzZXtpZighKHM9ZC5wb3AoKSkpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IEVOREYgYmFkIHN0YWNrIiksdm9pZCh0LmhpbnRzVmFsaWQ9ITEpO289cC5wb3AoKSxjPXMuZGF0YSx1PXMuaSx0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW29dPWgubGVuZ3RoLXMuc3RhY2tUb3B9ZWxzZSBpZigxMzc9PT13KSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dTtlbHNlIGlmKDg4PT09dykrK3k7ZWxzZSBpZigyNz09PXcpbT15O2Vsc2UgaWYoODk9PT13KW09PT15JiYobT0wKSwtLXk7ZWxzZSBpZigyOD09PXcmJiF2JiYhbSl7dmFyIGs9aC5hdCgtMSk7az4wJiYodSs9ay0xKX19ZWxzZSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dSxvPWgucG9wKCksdC5mdW5jdGlvbnNEZWZpbmVkW29dPXtkYXRhOmMsaTp1fTtlbHNlIGlmKCF2JiYhbSlpZihvPWguYXQoLTEpLGlzTmFOKG8pKSgwLG4uaW5mbykoIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS4iKTtlbHNlIGlmKHQuZnVuY3Rpb25zVXNlZFtvXT0hMCxvIGluIHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpe3ZhciBTPWgubGVuZ3RoK3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbb107aWYoUzwwKXJldHVybigwLG4ud2FybikoIlRUOiBDQUxMIGludmFsaWQgZnVuY3Rpb25zIHN0YWNrIGRlbHRhLiIpLHZvaWQodC5oaW50c1ZhbGlkPSExKTtoLmxlbmd0aD1TfWVsc2UgaWYobyBpbiB0LmZ1bmN0aW9uc0RlZmluZWQmJiFwLmluY2x1ZGVzKG8pKXtpZihkLnB1c2goe2RhdGE6YyxpOnUsc3RhY2tUb3A6aC5sZW5ndGgtMX0pLHAucHVzaChvKSwhKHM9dC5mdW5jdGlvbnNEZWZpbmVkW29dKSlyZXR1cm4oMCxuLndhcm4pKCJUVDogQ0FMTCBub24tZXhpc3RlbnQgZnVuY3Rpb24iKSx2b2lkKHQuaGludHNWYWxpZD0hMSk7Yz1zLmRhdGEsdT1zLml9aWYoIXYmJiFtKXt2YXIgeD0wO2Zvcih3PD0xNDI/eD1BW3ddOnc+PTE5MiYmdzw9MjIzP3g9LTE6dz49MjI0JiYoeD0tMiksdz49MTEzJiZ3PD0xMTcmJihhPWgucG9wKCksaXNOYU4oYSl8fCh4PTIqLWEpKTt4PDAmJmgubGVuZ3RoPjA7KWgucG9wKCkseCsrO2Zvcig7eD4wOyloLnB1c2goTmFOKSx4LS19fXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zPWc7dmFyIE89W2NdO3U+Yy5sZW5ndGgmJk8ucHVzaChuZXcgVWludDhBcnJheSh1LWMubGVuZ3RoKSksZj5sJiYoKDAsbi53YXJuKSgiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwiKSxPLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzM0LDQ1XSkpKSxmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoPjEpe3ZhciByLG4sYT0wO2ZvcihyPTAsbj10Lmxlbmd0aDtyPG47cisrKWErPXRbcl0ubGVuZ3RoO2E9YSszJi00O3ZhciBpPW5ldyBVaW50OEFycmF5KGEpLG89MDtmb3Iocj0wLG49dC5sZW5ndGg7cjxuO3IrKylpLnNldCh0W3JdLG8pLG8rPXRbcl0ubGVuZ3RoO2UuZGF0YT1pLGUubGVuZ3RoPWF9fShlLE8pfWlmKFUodD1uZXcgbS5TdHJlYW0obmV3IFVpbnQ4QXJyYXkodC5nZXRCeXRlcygpKSkpKXt2YXIgRj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpOygwLG4uYXNzZXJ0KSgidHRjZiI9PT10LCJNdXN0IGJlIGEgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250LiIpO2Zvcih2YXIgcj1lLmdldFVpbnQxNigpLGE9ZS5nZXRVaW50MTYoKSxpPWUuZ2V0SW50MzIoKT4+PjAsbz1bXSxzPTA7czxpO3MrKylvLnB1c2goZS5nZXRJbnQzMigpPj4+MCk7dmFyIGM9e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjpyLG1pbm9yVmVyc2lvbjphLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6b307c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gYztjYXNlIDI6cmV0dXJuIGMuZHNpZ1RhZz1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ0xlbmd0aD1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ09mZnNldD1lLmdldEludDMyKCk+Pj4wLGN9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICIuY29uY2F0KHIsIi4iKSl9KGUpLGk9YS5udW1Gb250cyxvPWEub2Zmc2V0VGFibGUscz10LnNwbGl0KCIrIiksYz0wO2M8aTtjKyspe2UucG9zPShlLnN0YXJ0fHwwKStvW2NdO3ZhciBsPWQoZSksZj11KGUsbC5udW1UYWJsZXMpO2lmKCFmLm5hbWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSAibmFtZSIgdGFibGUuJyk7Zm9yKHZhciBoPWIoZi5uYW1lKSxwPTAsZz1oLmxlbmd0aDtwPGc7cCsrKWZvcih2YXIgdj0wLHk9aFtwXS5sZW5ndGg7djx5O3YrKyl7dmFyIG09aFtwXVt2XSYmaFtwXVt2XS5yZXBsYWNlKC9ccy9nLCIiKTtpZihtKXtpZihtPT09dClyZXR1cm57aGVhZGVyOmwsdGFibGVzOmZ9O2lmKCEocy5sZW5ndGg8Mikpe3ZhciB3LFM9ayhzKTt0cnl7Zm9yKFMucygpOyEodz1TLm4oKSkuZG9uZTspe3ZhciB4PXcudmFsdWU7bT09PXgmJihyPXtuYW1lOngsaGVhZGVyOmwsdGFibGVzOmZ9KX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fX19fWlmKHIpcmV0dXJuKDAsbi53YXJuKSgnVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQsICcpKydmYWxsaW5nIGJhY2sgdG8gIicuY29uY2F0KHIubmFtZSwnIiBmb250IGluc3RlYWQuJykpLHtoZWFkZXI6ci5oZWFkZXIsdGFibGVzOnIudGFibGVzfTt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQuJykpfSh0LHRoaXMubmFtZSk7dz1GLmhlYWRlcixTPUYudGFibGVzfWVsc2Ugdz1kKHQpLFM9dSh0LHcubnVtVGFibGVzKTt2YXIgUD0hU1siQ0ZGICJdO2lmKFApe2lmKCFTLmxvY2EpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJsb2NhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtTLmdseWZ8fCgoMCxuLndhcm4pKCdSZXF1aXJlZCAiZ2x5ZiIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpLFMuZ2x5Zj17dGFnOiJnbHlmIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksdGhpcy5pc09wZW5UeXBlPSExfWVsc2V7dmFyIFQ9ci5jb21wb3NpdGUmJigoci5jaWRUb0dpZE1hcHx8W10pLmxlbmd0aD4wfHwhKHIuY01hcCBpbnN0YW5jZW9mIGcuSWRlbnRpdHlDTWFwKSk7aWYoIk9UVE8iPT09dy52ZXJzaW9uJiYhVHx8IVMuaGVhZHx8IVMuaGhlYXx8IVMubWF4cHx8IVMucG9zdClyZXR1cm4gTz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLHg9bmV3IGYuQ0ZGRm9udChPLHIpLGoociksdGhpcy5jb252ZXJ0KGUseCxyKTtkZWxldGUgUy5nbHlmLGRlbGV0ZSBTLmxvY2EsZGVsZXRlIFMuZnBnbSxkZWxldGUgUy5wcmVwLGRlbGV0ZSBTWyJjdnQgIl0sdGhpcy5pc09wZW5UeXBlPSEwfWlmKCFTLm1heHApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTt0LnBvcz0odC5zdGFydHx8MCkrUy5tYXhwLm9mZnNldDt2YXIgST10LmdldEludDMyKCksRT10LmdldFVpbnQxNigpO2lmKHIuc2NhbGVGYWN0b3JzJiZyLnNjYWxlRmFjdG9ycy5sZW5ndGg9PT1FJiZQKXt2YXIgTT1yLnNjYWxlRmFjdG9ycyxfPUwoUy5oZWFkLmRhdGFbNTBdLFMuaGVhZC5kYXRhWzUxXSksRD1uZXcgcC5HbHlmVGFibGUoe2dseWZUYWJsZTpTLmdseWYuZGF0YSxpc0dseXBoTG9jYXRpb25zTG9uZzpfLGxvY2FUYWJsZTpTLmxvY2EuZGF0YSxudW1HbHlwaHM6RX0pO0Quc2NhbGUoTSk7dmFyIEI9RC53cml0ZSgpLCQ9Qi5nbHlmLFg9Qi5sb2NhLFY9Qi5pc0xvY2F0aW9uTG9uZztTLmdseWYuZGF0YT0kLFMubG9jYS5kYXRhPVgsViE9PSEhXyYmKFMuaGVhZC5kYXRhWzUwXT0wLFMuaGVhZC5kYXRhWzUxXT1WPzE6MCk7Zm9yKHZhciBLPVMuaG10eC5kYXRhLEo9MDtKPEU7SisrKXt2YXIgWj00KkosUT1NYXRoLnJvdW5kKE1bSl0qTChLW1pdLEtbWisxXSkpO0tbWl09UT4+OCYyNTUsS1taKzFdPTI1NSZRLFIoSyxaKzIsTWF0aC5yb3VuZChNW0pdKk4oS1taKzJdLEtbWiszXSkpKX19dmFyIGVlPUUrMSx0ZT0hMDtlZT42NTUzNSYmKHRlPSExLGVlPUUsKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBnbHlmcyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIikpO3ZhciByZT0wLG5lPTA7ST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYodC5wb3MrPTgsdC5nZXRVaW50MTYoKT4yJiYoUy5tYXhwLmRhdGFbMTRdPTAsUy5tYXhwLmRhdGFbMTVdPTIpLHQucG9zKz00LHJlPXQuZ2V0VWludDE2KCksdC5wb3MrPTQsbmU9dC5nZXRVaW50MTYoKSksUy5tYXhwLmRhdGFbNF09ZWU+PjgsUy5tYXhwLmRhdGFbNV09MjU1JmVlO3ZhciBhZT1mdW5jdGlvbihlLHQscixhKXt2YXIgaT17ZnVuY3Rpb25zRGVmaW5lZDpbXSxmdW5jdGlvbnNVc2VkOltdLGZ1bmN0aW9uc1N0YWNrRGVsdGFzOltdLHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczohMSxoaW50c1ZhbGlkOiEwfTtpZihlJiZDKGUsaSksdCYmQyh0LGkpLGUmJmZ1bmN0aW9uKGUsdCl7aWYoIWUudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKXtpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCIpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtmb3IodmFyIHI9MCxhPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7cjxhO3IrKyl7aWYocj50KXJldHVybigwLG4ud2FybikoIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiAiK3IpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtpZihlLmZ1bmN0aW9uc1VzZWRbcl0mJiFlLmZ1bmN0aW9uc0RlZmluZWRbcl0pcmV0dXJuKDAsbi53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIityKSx2b2lkKGUuaGludHNWYWxpZD0hMSl9fX0oaSxhKSxyJiYxJnIubGVuZ3RoKXt2YXIgbz1uZXcgVWludDhBcnJheShyLmxlbmd0aCsxKTtvLnNldChyLmRhdGEpLHIuZGF0YT1vfXJldHVybiBpLmhpbnRzVmFsaWR9KFMuZnBnbSxTLnByZXAsU1siY3Z0ICJdLHJlKTtpZihhZXx8KGRlbGV0ZSBTLmZwZ20sZGVsZXRlIFMucHJlcCxkZWxldGUgU1siY3Z0ICJdKSxmdW5jdGlvbihlLHQscixhLGksbyl7aWYodCl7ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0LGUucG9zKz00LGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yO3ZhciBzPWUuZ2V0VWludDE2KCk7ZS5wb3MrPTgsZS5wb3MrPTI7dmFyIGM9ZS5nZXRVaW50MTYoKTswIT09cyYmKDImTChhLmRhdGFbNDRdLGEuZGF0YVs0NV0pfHwodC5kYXRhWzIyXT0wLHQuZGF0YVsyM109MCkpLGM+aSYmKCgwLG4uaW5mbykoIlRoZSBudW1PZk1ldHJpY3MgKCIuY29uY2F0KGMsIikgc2hvdWxkIG5vdCBiZSAiKSsiZ3JlYXRlciB0aGFuIHRoZSBudW1HbHlwaHMgKCIuY29uY2F0KGksIikuIikpLGM9aSx0LmRhdGFbMzRdPSg2NTI4MCZjKT4+OCx0LmRhdGFbMzVdPTI1NSZjKTt2YXIgdT1pLWMtKHIubGVuZ3RoLTQqYz4+MSk7aWYodT4wKXt2YXIgbD1uZXcgVWludDhBcnJheShyLmxlbmd0aCsyKnUpO2wuc2V0KHIuZGF0YSksbyYmKGxbci5sZW5ndGhdPXIuZGF0YVsyXSxsW3IubGVuZ3RoKzFdPXIuZGF0YVszXSksci5kYXRhPWx9fWVsc2UgciYmKHIuZGF0YT1udWxsKX0odCxTLmhoZWEsUy5obXR4LFMuaGVhZCxlZSx0ZSksIVMuaGVhZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhlYWQiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOyFmdW5jdGlvbihlLHQscil7dmFyIGE9ZS5kYXRhLGk9KGFbMF08PDI0KSsoYVsxXTw8MTYpKyhhWzJdPDw4KSthWzNdO2k+PjE2IT0xJiYoKDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICIraSksYVswXT0wLGFbMV09MSxhWzJdPTAsYVszXT0wKTt2YXIgbz1MKGFbNTBdLGFbNTFdKTtpZihvPDB8fG8+MSl7KDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCBpbmRleFRvTG9jRm9ybWF0IGluIGhlYWQgdGFibGU6ICIrbyk7dmFyIHM9dCsxO2lmKHI9PT1zPDwxKWFbNTBdPTAsYVs1MV09MDtlbHNle2lmKHIhPT1zPDwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb3VsZCBub3QgZml4IGluZGV4VG9Mb2NGb3JtYXQ6ICIrbyk7YVs1MF09MCxhWzUxXT0xfX19KFMuaGVhZCxFLFA/Uy5sb2NhLmxlbmd0aDowKTt2YXIgaWU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihQKXt2YXIgb2U9TChTLmhlYWQuZGF0YVs1MF0sUy5oZWFkLmRhdGFbNTFdKSxzZT1mdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU7bj8ocz00LGM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+Pj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfSk6KHM9MixjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+PjkmMjU1LGVbdCsxXT1yPj4xJjI1NX0pO3ZhciBsPWk/cisxOnIsZj1zKigxK2wpLGg9bmV3IFVpbnQ4QXJyYXkoZik7aC5zZXQoZS5kYXRhLnN1YmFycmF5KDAsZikpLGUuZGF0YT1oO3ZhciBkLHAsZz10LmRhdGEsdj1nLmxlbmd0aCxtPW5ldyBVaW50OEFycmF5KHYpLGI9W107Zm9yKGQ9MCxwPTA7ZDxyKzE7ZCsrLHArPXMpe3ZhciB3PWMoaCxwKTt3PnYmJih3PXYpLGIucHVzaCh7aW5kZXg6ZCxvZmZzZXQ6dyxlbmRPZmZzZXQ6MH0pfWZvcihiLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUub2Zmc2V0LXQub2Zmc2V0fSkpLGQ9MDtkPHI7ZCsrKWJbZF0uZW5kT2Zmc2V0PWJbZCsxXS5vZmZzZXQ7Zm9yKGIuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pbmRleC10LmluZGV4fSkpLGQ9MDtkPHI7ZCsrKXt2YXIgaz1iW2RdLFM9ay5vZmZzZXQseD1rLmVuZE9mZnNldDtpZigwIT09U3x8MCE9PXgpYnJlYWs7dmFyIE89YltkKzFdLm9mZnNldDtpZigwIT09Tyl7YltkXS5lbmRPZmZzZXQ9TzticmVha319dmFyIEE9T2JqZWN0LmNyZWF0ZShudWxsKSxDPTA7Zm9yKHUoaCwwLEMpLGQ9MCxwPXM7ZDxyO2QrKyxwKz1zKXt2YXIgRj15KGcsYltkXS5vZmZzZXQsYltkXS5lbmRPZmZzZXQsbSxDLGEpLFA9Ri5sZW5ndGg7MD09PVAmJihBW2RdPSEwKSxGLnNpemVPZkluc3RydWN0aW9ucz5vJiYobz1GLnNpemVPZkluc3RydWN0aW9ucyksdShoLHAsQys9UCl9aWYoMD09PUMpe3ZhciBUPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihkPTAscD1zO2Q8bDtkKysscCs9cyl1KGgscCxULmxlbmd0aCk7dC5kYXRhPVR9ZWxzZSBpZihpKXt2YXIgST1jKGgscyk7bS5sZW5ndGg+SStDP3QuZGF0YT1tLnN1YmFycmF5KDAsSStDKToodC5kYXRhPW5ldyBVaW50OEFycmF5KEkrQyksdC5kYXRhLnNldChtLnN1YmFycmF5KDAsQykpKSx0LmRhdGEuc2V0KG0uc3ViYXJyYXkoMCxJKSxDKSx1KGUuZGF0YSxoLmxlbmd0aC1zLEMrSSl9ZWxzZSB0LmRhdGE9bS5zdWJhcnJheSgwLEMpO3JldHVybnttaXNzaW5nR2x5cGhzOkEsbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zOm99fShTLmxvY2EsUy5nbHlmLEUsb2UsYWUsdGUsbmUpO2llPXNlLm1pc3NpbmdHbHlwaHMsST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYoUy5tYXhwLmRhdGFbMjZdPXNlLm1heFNpemVPZkluc3RydWN0aW9ucz4+OCxTLm1heHAuZGF0YVsyN109MjU1JnNlLm1heFNpemVPZkluc3RydWN0aW9ucyl9aWYoIVMuaGhlYSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhoZWEiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOzA9PT1TLmhoZWEuZGF0YVsxMF0mJjA9PT1TLmhoZWEuZGF0YVsxMV0mJihTLmhoZWEuZGF0YVsxMF09MjU1LFMuaGhlYS5kYXRhWzExXT0yNTUpO3ZhciBjZT17dW5pdHNQZXJFbTpMKFMuaGVhZC5kYXRhWzE4XSxTLmhlYWQuZGF0YVsxOV0pLHlNYXg6TChTLmhlYWQuZGF0YVs0Ml0sUy5oZWFkLmRhdGFbNDNdKSx5TWluOk4oUy5oZWFkLmRhdGFbMzhdLFMuaGVhZC5kYXRhWzM5XSksYXNjZW50Ok4oUy5oaGVhLmRhdGFbNF0sUy5oaGVhLmRhdGFbNV0pLGRlc2NlbnQ6TihTLmhoZWEuZGF0YVs2XSxTLmhoZWEuZGF0YVs3XSksbGluZUdhcDpOKFMuaGhlYS5kYXRhWzhdLFMuaGhlYS5kYXRhWzldKX07dGhpcy5hc2NlbnQ9Y2UuYXNjZW50L2NlLnVuaXRzUGVyRW0sdGhpcy5kZXNjZW50PWNlLmRlc2NlbnQvY2UudW5pdHNQZXJFbSx0aGlzLmxpbmVHYXA9Y2UubGluZUdhcC9jZS51bml0c1BlckVtLHRoaXMuY3NzRm9udEluZm8mJnRoaXMuY3NzRm9udEluZm8ubGluZUhlaWdodD8odGhpcy5saW5lSGVpZ2h0PXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lSGVpZ2h0LHRoaXMubGluZUdhcD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUdhcCk6dGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXAsUy5wb3N0JiZmdW5jdGlvbihlLHIsYSl7dmFyIG89KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPW87dmFyIHMsYz1vK2UubGVuZ3RoLHU9dC5nZXRJbnQzMigpO3Quc2tpcCgyOCk7dmFyIGwsZj0hMDtzd2l0Y2godSl7Y2FzZSA2NTUzNjpzPWkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nO2JyZWFrO2Nhc2UgMTMxMDcyOnZhciBoPXQuZ2V0VWludDE2KCk7aWYoaCE9PWEpe2Y9ITE7YnJlYWt9dmFyIGQ9W107Zm9yKGw9MDtsPGg7KytsKXt2YXIgcD10LmdldFVpbnQxNigpO2lmKHA+PTMyNzY4KXtmPSExO2JyZWFrfWQucHVzaChwKX1pZighZilicmVhaztmb3IodmFyIGc9W10sdj1bXTt0LnBvczxjOyl7dmFyIHk9dC5nZXRCeXRlKCk7Zm9yKHYubGVuZ3RoPXksbD0wO2w8eTsrK2wpdltsXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuZ2V0Qnl0ZSgpKTtnLnB1c2godi5qb2luKCIiKSl9Zm9yKHM9W10sbD0wO2w8aDsrK2wpe3ZhciBtPWRbbF07bTwyNTg/cy5wdXNoKGkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nW21dKTpzLnB1c2goZ1ttLTI1OF0pfWJyZWFrO2Nhc2UgMTk2NjA4OmJyZWFrO2RlZmF1bHQ6KDAsbi53YXJuKSgiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gIit1KSxmPSExLHIuZGVmYXVsdEVuY29kaW5nJiYocz1yLmRlZmF1bHRFbmNvZGluZyl9ci5nbHlwaE5hbWVzPXN9KFMucG9zdCxyLEUpLFMucG9zdD17dGFnOiJwb3N0IixkYXRhOlcocil9O3ZhciB1ZT1bXTtmdW5jdGlvbiBsZShlKXtyZXR1cm4haWVbZV19aWYoci5jb21wb3NpdGUpe3ZhciBmZT1yLmNpZFRvR2lkTWFwfHxbXSxoZT0wPT09ZmUubGVuZ3RoO3IuY01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9SChlLHQsITApKSx0PjY1NTM1KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9LTE7aGU/cj10OnZvaWQgMCE9PWZlW3RdJiYocj1mZVt0XSkscj49MCYmcjxFJiZsZShyKSYmKHVlW2VdPXIpfSkpfWVsc2V7dmFyIGRlPWZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybigwLG4ud2FybikoIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgaSxvPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1vLHQuc2tpcCgyKTtmb3IodmFyIHMsYz10LmdldFVpbnQxNigpLHU9ITEsbD0wO2w8YztsKyspe3ZhciBmPXQuZ2V0VWludDE2KCksaD10LmdldFVpbnQxNigpLGQ9dC5nZXRJbnQzMigpPj4+MCxwPSExO2lmKCFzfHxzLnBsYXRmb3JtSWQhPT1mfHxzLmVuY29kaW5nSWQhPT1oKXtpZigwIT09Znx8MCE9PWgmJjEhPT1oJiYzIT09aClpZigxPT09ZiYmMD09PWgpcD0hMDtlbHNlIGlmKDMhPT1mfHwxIT09aHx8IWEmJnMpe2lmKHImJjM9PT1mJiYwPT09aCl7cD0hMDt2YXIgZz0hMDtpZihsPGMtMSl7dmFyIHY9dC5wZWVrQnl0ZXMoMik7TCh2WzBdLHZbMV0pPGYmJihnPSExKX1nJiYodT0hMCl9fWVsc2UgcD0hMCxyfHwodT0hMCk7ZWxzZSBwPSEwO2lmKHAmJihzPXtwbGF0Zm9ybUlkOmYsZW5jb2RpbmdJZDpoLG9mZnNldDpkfSksdSlicmVha319aWYocyYmKHQucG9zPW8rcy5vZmZzZXQpLCFzfHwtMT09PXQucGVla0J5dGUoKSlyZXR1cm4oMCxuLndhcm4pKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgeSxtLGI9dC5nZXRVaW50MTYoKSx3PSExLGs9W107aWYoMD09PWIpe2Zvcih0LnNraXAoNCkseT0wO3k8MjU2O3krKyl7dmFyIFM9dC5nZXRCeXRlKCk7UyYmay5wdXNoKHtjaGFyQ29kZTp5LGdseXBoSWQ6U30pfXc9ITB9ZWxzZSBpZigyPT09Yil7dC5za2lwKDQpO2Zvcih2YXIgeD1bXSxPPTAsQT0wO0E8MjU2O0ErKyl7dmFyIEM9dC5nZXRVaW50MTYoKT4+Mzt4LnB1c2goQyksTz1NYXRoLm1heChDLE8pfWZvcih2YXIgRj1bXSxQPTA7UDw9TztQKyspRi5wdXNoKHtmaXJzdENvZGU6dC5nZXRVaW50MTYoKSxlbnRyeUNvdW50OnQuZ2V0VWludDE2KCksaWREZWx0YTpOKHQuZ2V0Qnl0ZSgpLHQuZ2V0Qnl0ZSgpKSxpZFJhbmdlUG9zOnQucG9zK3QuZ2V0VWludDE2KCl9KTtmb3IodmFyIFQ9MDtUPDI1NjtUKyspaWYoMD09PXhbVF0pdC5wb3M9RlswXS5pZFJhbmdlUG9zKzIqVCxtPXQuZ2V0VWludDE2KCksay5wdXNoKHtjaGFyQ29kZTpULGdseXBoSWQ6bX0pO2Vsc2V7dmFyIEk9Rlt4W1RdXTtmb3IoeT0wO3k8SS5lbnRyeUNvdW50O3krKyl7dmFyIEU9KFQ8PDgpK3krSS5maXJzdENvZGU7dC5wb3M9SS5pZFJhbmdlUG9zKzIqeSwwIT09KG09dC5nZXRVaW50MTYoKSkmJihtPShtK0kuaWREZWx0YSklNjU1MzYpLGsucHVzaCh7Y2hhckNvZGU6RSxnbHlwaElkOm19KX19fWVsc2UgaWYoND09PWIpe3Quc2tpcCg0KTt2YXIgaj10LmdldFVpbnQxNigpPj4xO3Quc2tpcCg2KTt2YXIgTSxfPVtdO2ZvcihNPTA7TTxqO00rKylfLnB1c2goe2VuZDp0LmdldFVpbnQxNigpfSk7Zm9yKHQuc2tpcCgyKSxNPTA7TTxqO00rKylfW01dLnN0YXJ0PXQuZ2V0VWludDE2KCk7Zm9yKE09MDtNPGo7TSsrKV9bTV0uZGVsdGE9dC5nZXRVaW50MTYoKTt2YXIgUixEPTA7Zm9yKE09MDtNPGo7TSsrKXtpPV9bTV07dmFyIEI9dC5nZXRVaW50MTYoKTtCPyhSPShCPj4xKS0oai1NKSxpLm9mZnNldEluZGV4PVIsRD1NYXRoLm1heChELFIraS5lbmQtaS5zdGFydCsxKSk6aS5vZmZzZXRJbmRleD0tMX12YXIgVT1bXTtmb3IoeT0wO3k8RDt5KyspVS5wdXNoKHQuZ2V0VWludDE2KCkpO2ZvcihNPTA7TTxqO00rKyl7bz0oaT1fW01dKS5zdGFydDt2YXIgJD1pLmVuZCxYPWkuZGVsdGE7Zm9yKFI9aS5vZmZzZXRJbmRleCx5PW87eTw9JDt5KyspNjU1MzUhPT15JiYobT0obT1SPDA/eTpVW1IreS1vXSkrWCY2NTUzNSxrLnB1c2goe2NoYXJDb2RlOnksZ2x5cGhJZDptfSkpfX1lbHNlIGlmKDY9PT1iKXt0LnNraXAoNCk7dmFyIEg9dC5nZXRVaW50MTYoKSxxPXQuZ2V0VWludDE2KCk7Zm9yKHk9MDt5PHE7eSsrKXttPXQuZ2V0VWludDE2KCk7dmFyIEc9SCt5O2sucHVzaCh7Y2hhckNvZGU6RyxnbHlwaElkOm19KX19ZWxzZXtpZigxMiE9PWIpcmV0dXJuKDAsbi53YXJuKSgiY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAiK2IpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt0LnNraXAoMTApO3ZhciB6PXQuZ2V0SW50MzIoKT4+PjA7Zm9yKHk9MDt5PHo7eSsrKWZvcih2YXIgVz10LmdldEludDMyKCk+Pj4wLFY9dC5nZXRJbnQzMigpPj4+MCxZPXQuZ2V0SW50MzIoKT4+PjAsSz1XO0s8PVY7SysrKWsucHVzaCh7Y2hhckNvZGU6SyxnbHlwaElkOlkrK30pfWsuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpO2Zvcih2YXIgSj0xO0o8ay5sZW5ndGg7SisrKWtbSi0xXS5jaGFyQ29kZT09PWtbSl0uY2hhckNvZGUmJihrLnNwbGljZShKLDEpLEotLSk7cmV0dXJue3BsYXRmb3JtSWQ6cy5wbGF0Zm9ybUlkLGVuY29kaW5nSWQ6cy5lbmNvZGluZ0lkLG1hcHBpbmdzOmssaGFzU2hvcnRDbWFwOnd9fShTLmNtYXAsdCx0aGlzLmlzU3ltYm9saWNGb250LHIuaGFzRW5jb2RpbmcpLHBlPWRlLnBsYXRmb3JtSWQsZ2U9ZGUuZW5jb2RpbmdJZCx2ZT1kZS5tYXBwaW5ncyx5ZT1bXSxtZT0hMTtpZighci5oYXNFbmNvZGluZ3x8Ik1hY1JvbWFuRW5jb2RpbmciIT09ci5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PXIuYmFzZUVuY29kaW5nTmFtZXx8KHllPSgwLGMuZ2V0RW5jb2RpbmcpKHIuYmFzZUVuY29kaW5nTmFtZSkpLHIuaGFzRW5jb2RpbmcmJiF0aGlzLmlzU3ltYm9saWNGb250JiYoMz09PXBlJiYxPT09Z2V8fDE9PT1wZSYmMD09PWdlKSlmb3IodmFyIGJlPSgwLHMuZ2V0R2x5cGhzVW5pY29kZSkoKSx3ZT0wO3dlPDI1Njt3ZSsrKXt2YXIga2U7aWYoa2U9dm9pZCAwIT09dGhpcy5kaWZmZXJlbmNlc1t3ZV0/dGhpcy5kaWZmZXJlbmNlc1t3ZV06eWUubGVuZ3RoJiYiIiE9PXllW3dlXT95ZVt3ZV06Yy5TdGFuZGFyZEVuY29kaW5nW3dlXSl7dmFyIFNlPSgwLGkucmVjb3ZlckdseXBoTmFtZSkoa2UsYmUpLHhlPXZvaWQgMDtpZigzPT09cGUmJjE9PT1nZT94ZT1iZVtTZV06MT09PXBlJiYwPT09Z2UmJih4ZT1jLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihTZSkpLHZvaWQgMD09PXhlKXtpZighci5nbHlwaE5hbWVzJiZyLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiYhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciBPZT10aGlzLnRvVW5pY29kZS5nZXQod2UpO09lJiYoeGU9T2UuY29kZVBvaW50QXQoMCkpfWlmKHZvaWQgMD09PXhlKWNvbnRpbnVlfXZhciBBZSxDZT1rKHZlKTt0cnl7Zm9yKENlLnMoKTshKEFlPUNlLm4oKSkuZG9uZTspe3ZhciBGZT1BZS52YWx1ZTtpZihGZS5jaGFyQ29kZT09PXhlKXt1ZVt3ZV09RmUuZ2x5cGhJZDticmVha319fWNhdGNoKGUpe0NlLmUoZSl9ZmluYWxseXtDZS5mKCl9fX1lbHNlIGlmKDA9PT1wZSl7dmFyIFBlLFRlPWsodmUpO3RyeXtmb3IoVGUucygpOyEoUGU9VGUubigpKS5kb25lOyl7dmFyIEllPVBlLnZhbHVlO3VlW0llLmNoYXJDb2RlXT1JZS5nbHlwaElkfX1jYXRjaChlKXtUZS5lKGUpfWZpbmFsbHl7VGUuZigpfW1lPSEwfWVsc2V7dmFyIEVlLGplPWsodmUpO3RyeXtmb3IoamUucygpOyEoRWU9amUubigpKS5kb25lOyl7dmFyIE1lPUVlLnZhbHVlLF9lPU1lLmNoYXJDb2RlOzM9PT1wZSYmX2U+PTYxNDQwJiZfZTw9NjE2OTUmJihfZSY9MjU1KSx1ZVtfZV09TWUuZ2x5cGhJZH19Y2F0Y2goZSl7amUuZShlKX1maW5hbGx5e2plLmYoKX19aWYoci5nbHlwaE5hbWVzJiYoeWUubGVuZ3RofHx0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpZm9yKHZhciBMZT0wO0xlPDI1NjsrK0xlKWlmKG1lfHx2b2lkIDA9PT11ZVtMZV0pe3ZhciBSZT10aGlzLmRpZmZlcmVuY2VzW0xlXXx8eWVbTGVdO2lmKFJlKXt2YXIgTmU9ci5nbHlwaE5hbWVzLmluZGV4T2YoUmUpO05lPjAmJmxlKE5lKSYmKHVlW0xlXT1OZSl9fX0wPT09dWUubGVuZ3RoJiYodWVbMF09MCk7dmFyIERlPWVlLTE7aWYodGV8fChEZT0wKSwhci5jc3NGb250SW5mbyl7dmFyIEJlPXEodWUsbGUsRGUsdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1CZS50b0ZvbnRDaGFyLFMuY21hcD17dGFnOiJjbWFwIixkYXRhOkcoQmUuY2hhckNvZGVUb0dseXBoSWQsQmUudG9Vbmljb2RlRXh0cmFNYXAsZWUpfSxTWyJPUy8yIl0mJmZ1bmN0aW9uKGUsdCl7dC5wb3M9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3ZhciByPXQuZ2V0VWludDE2KCk7dC5za2lwKDYwKTt2YXIgbj10LmdldFVpbnQxNigpO3JldHVybiEocjw0JiY3Njgmbnx8dC5nZXRVaW50MTYoKT50LmdldFVpbnQxNigpfHwodC5za2lwKDYpLDA9PT10LmdldFVpbnQxNigpfHwoZS5kYXRhWzhdPWUuZGF0YVs5XT0wLDApKSl9KFNbIk9TLzIiXSx0KXx8KFNbIk9TLzIiXT17dGFnOiJPUy8yIixkYXRhOnoocixCZS5jaGFyQ29kZVRvR2x5cGhJZCxjZSl9KX1pZighUCl0cnl7Tz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLCh4PW5ldyBhLkNGRlBhcnNlcihPLHIsaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpLnBhcnNlKCkpLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTt2YXIgVWU9bmV3IGEuQ0ZGQ29tcGlsZXIoeCk7U1siQ0ZGICJdLmRhdGE9VWUuY29tcGlsZSgpfWNhdGNoKGUpeygwLG4ud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIityLmxvYWRlZE5hbWUpfWlmKFMubmFtZSl7dmFyICRlPWIoUy5uYW1lKTtTLm5hbWUuZGF0YT1ZKGUsJGUpLHRoaXMucHNOYW1lPSRlWzBdWzZdfHxudWxsfWVsc2UgUy5uYW1lPXt0YWc6Im5hbWUiLGRhdGE6WSh0aGlzLm5hbWUpfTt2YXIgWGU9bmV3IHYuT3BlblR5cGVGaWxlQnVpbGRlcih3LnZlcnNpb24pO2Zvcih2YXIgSGUgaW4gUylYZS5hZGRUYWJsZShIZSxTW0hlXS5kYXRhKTtyZXR1cm4gWGUudG9BcnJheSgpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3IuZml4ZWRQaXRjaD0hMSxyLmJ1aWx0SW5FbmNvZGluZyYmZnVuY3Rpb24oZSx0KXtpZighZS5pc0ludGVybmFsRm9udCYmIShlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwfHx0PT09ZS5kZWZhdWx0RW5jb2Rpbmd8fGUudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciByPVtdLG49KDAscy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgYSBpbiB0KWlmKCFlLmhhc0VuY29kaW5nfHwwIT09ZS5kaWZmZXJlbmNlcy5sZW5ndGgmJnZvaWQgMD09PWUuZGlmZmVyZW5jZXNbYV0pe3ZhciBpPXRbYV0sYz0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkoaSxuKTstMSE9PWMmJihyW2FdPVN0cmluZy5mcm9tQ2hhckNvZGUoYykpfXIubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHIpfX0ocixyLmJ1aWx0SW5FbmNvZGluZyk7dmFyIGE9MTt0IGluc3RhbmNlb2YgZi5DRkZGb250JiYoYT10Lm51bUdseXBocy0xKTt2YXIgdT10LmdldEdseXBoTWFwcGluZyhyKSxoPW51bGwsZD11LHA9bnVsbDtyLmNzc0ZvbnRJbmZvfHwoaD1xKHUsdC5oYXNHbHlwaElkLmJpbmQodCksYSx0aGlzLnRvVW5pY29kZSksdGhpcy50b0ZvbnRDaGFyPWgudG9Gb250Q2hhcixkPWguY2hhckNvZGVUb0dseXBoSWQscD1oLnRvVW5pY29kZUV4dHJhTWFwKTt2YXIgZz10Lm51bUdseXBocztmdW5jdGlvbiB5KGUsdCl7dmFyIHI9bnVsbDtmb3IodmFyIG4gaW4gZSl0PT09ZVtuXSYmKHJ8fChyPVtdKSxyLnB1c2goMHxuKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgciBpbiBlKWlmKHQ9PT1lW3JdKXJldHVybiAwfHI7cmV0dXJuIGguY2hhckNvZGVUb0dseXBoSWRbaC5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXT10LGgubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSsrfXZhciBiPXQuc2VhY3M7aWYoaCYmaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQmJmImJmIubGVuZ3RoKXt2YXIgdz1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsUz10LmdldENoYXJzZXQoKSx4PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBPIGluIGIpe3ZhciBBPWJbT3w9MF0sQz1jLlN0YW5kYXJkRW5jb2RpbmdbQVsyXV0sRj1jLlN0YW5kYXJkRW5jb2RpbmdbQVszXV0sUD1TLmluZGV4T2YoQyksVD1TLmluZGV4T2YoRik7aWYoIShQPDB8fFQ8MCkpe3ZhciBJPXt4OkFbMF0qd1swXStBWzFdKndbMl0rd1s0XSx5OkFbMF0qd1sxXStBWzFdKndbM10rd1s1XX0sRT15KHUsTyk7aWYoRSl7dmFyIGosTT1rKEUpO3RyeXtmb3IoTS5zKCk7IShqPU0ubigpKS5kb25lOyl7dmFyIF89ai52YWx1ZSxMPWguY2hhckNvZGVUb0dseXBoSWQsUj1tKEwsUCksTj1tKEwsVCk7eFtfXT17YmFzZUZvbnRDaGFyQ29kZTpSLGFjY2VudEZvbnRDaGFyQ29kZTpOLGFjY2VudE9mZnNldDpJfX19Y2F0Y2goZSl7TS5lKGUpfWZpbmFsbHl7TS5mKCl9fX19ci5zZWFjTWFwPXh9dmFyIFU9MS8oci5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSwkPW5ldyB2Lk9wZW5UeXBlRmlsZUJ1aWxkZXIoIk9UVE8iKTtyZXR1cm4gJC5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKSwkLmFkZFRhYmxlKCJPUy8yIix6KHIsZCkpLCQuYWRkVGFibGUoImNtYXAiLEcoZCxwLGcpKSwkLmFkZFRhYmxlKCJoZWFkIiwiXDABXDBcMFwwXDAQXDBcMFwwXDBcMF8PPMO1XDBcMCIrQihVKSsiXDBcMFwwXDDCnlx2fidcMFwwXDBcMMKeXHZ+J1wwXDAiK0Ioci5kZXNjZW50KSsiD8O/IitCKHIuYXNjZW50KStEKHIuaXRhbGljQW5nbGU/MjowKSsiXDARXDBcMFwwXDBcMFwwIiksJC5hZGRUYWJsZSgiaGhlYSIsIlwwAVwwXDAiK0Ioci5hc2NlbnQpK0Ioci5kZXNjZW50KSsiXDBcMMO/w79cMFwwXDBcMFwwXDAiK0Ioci5jYXBIZWlnaHQpK0IoTWF0aC50YW4oci5pdGFsaWNBbmdsZSkqci54SGVpZ2h0KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIitEKGcpKSwkLmFkZFRhYmxlKCJobXR4IixmdW5jdGlvbigpe2Zvcih2YXIgZT10LmNoYXJzdHJpbmdzLHI9dC5jZmY/dC5jZmYud2lkdGhzOm51bGwsbj0iXDBcMFwwXDAiLGE9MSxpPWc7YTxpO2ErKyl7dmFyIG89MDtpZihlKXt2YXIgcz1lW2EtMV07bz0id2lkdGgiaW4gcz9zLndpZHRoOjB9ZWxzZSByJiYobz1NYXRoLmNlaWwoclthXXx8MCkpO24rPUQobykrRCgwKX1yZXR1cm4gbn0oKSksJC5hZGRUYWJsZSgibWF4cCIsIlwwXDBQXDAiK0QoZykpLCQuYWRkVGFibGUoIm5hbWUiLFkoZSkpLCQuYWRkVGFibGUoInBvc3QiLFcocikpLCQudG9BcnJheSgpfX0se2tleToic3BhY2VXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MCxyPVsic3BhY2UiLCJtaW51cyIsIm9uZSIsImkiLCJJIl07dDxyLmxlbmd0aDt0Kyspe3ZhciBhPXJbdF07aWYoYSBpbiB0aGlzLndpZHRocyl7ZT10aGlzLndpZHRoc1thXTticmVha312YXIgaT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKClbYV0sbz0wO2lmKHRoaXMuY29tcG9zaXRlJiZ0aGlzLmNNYXAuY29udGFpbnMoaSkmJiJzdHJpbmciPT10eXBlb2Yobz10aGlzLmNNYXAubG9va3VwKGkpKSYmKG89SChpLG8pKSwhbyYmdGhpcy50b1VuaWNvZGUmJihvPXRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoaSkpLG88PTAmJihvPWkpLGU9dGhpcy53aWR0aHNbb10pYnJlYWt9cmV0dXJuIGU9ZXx8dGhpcy5kZWZhdWx0V2lkdGgsKDAsbi5zaGFkb3cpKHRoaXMsInNwYWNlV2lkdGgiLGUpfX0se2tleToiX2NoYXJUb0dseXBoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHM9dGhpcy5fZ2x5cGhDYWNoZVtlXTtpZihzJiZzLmlzU3BhY2U9PT1pKXJldHVybiBzO3ZhciBjPWU7dGhpcy5jTWFwJiZ0aGlzLmNNYXAuY29udGFpbnMoZSkmJiJzdHJpbmciPT10eXBlb2YoYz10aGlzLmNNYXAubG9va3VwKGUpKSYmKGM9SChlLGMpKSwibnVtYmVyIiE9dHlwZW9mKHI9dGhpcy53aWR0aHNbY10pJiYocj10aGlzLmRlZmF1bHRXaWR0aCk7dmFyIHU9dGhpcy52bWV0cmljcyYmdGhpcy52bWV0cmljc1tjXSxsPXRoaXMudG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGwmJihsPVN0cmluZy5mcm9tQ2hhckNvZGUobCkpO3ZhciBmPXZvaWQgMCE9PXRoaXMudG9Gb250Q2hhcltlXTtpZih0PXRoaXMudG9Gb250Q2hhcltlXXx8ZSx0aGlzLm1pc3NpbmdGaWxlKXt2YXIgaD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTsiLm5vdGRlZiIhPT1oJiYiIiE9PWh8fCJUeXBlMSIhPT10aGlzLnR5cGV8fCh0PTMyKSx0PSgwLG8ubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKHQpfXRoaXMuaXNUeXBlM0ZvbnQmJihhPXQpO3ZhciBkPW51bGw7aWYodGhpcy5zZWFjTWFwJiZ0aGlzLnNlYWNNYXBbZV0pe2Y9ITA7dmFyIHA9dGhpcy5zZWFjTWFwW2VdO3Q9cC5iYXNlRm9udENoYXJDb2RlLGQ9e2ZvbnRDaGFyOlN0cmluZy5mcm9tQ29kZVBvaW50KHAuYWNjZW50Rm9udENoYXJDb2RlKSxvZmZzZXQ6cC5hY2NlbnRPZmZzZXR9fXZhciBnPSIiO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ8PTExMTQxMTE/Zz1TdHJpbmcuZnJvbUNvZGVQb2ludCh0KTooMCxuLndhcm4pKCJjaGFyVG9HbHlwaCAtIGludmFsaWQgZm9udENoYXJDb2RlOiAiLmNvbmNhdCh0KSkpLHM9bmV3IF8oZSxnLGwsZCxyLHUsYSxpLGYpLHRoaXMuX2dseXBoQ2FjaGVbZV09c319LHtrZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDtpZih0PVtdLHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPWUubGVuZ3RoLGE9MDthPG47KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUsYSxyKTt2YXIgaT1yLmNoYXJjb2RlLG89ci5sZW5ndGg7YSs9bzt2YXIgcz10aGlzLl9jaGFyVG9HbHlwaChpLDE9PT1vJiYzMj09PWUuY2hhckNvZGVBdChhLTEpKTt0LnB1c2gocyl9ZWxzZSBmb3IodmFyIGM9MCx1PWUubGVuZ3RoO2M8dTsrK2Mpe3ZhciBsPWUuY2hhckNvZGVBdChjKSxmPXRoaXMuX2NoYXJUb0dseXBoKGwsMzI9PT1sKTt0LnB1c2goZil9cmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbZV09dH19LHtrZXk6ImdldENoYXJQb3NpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPTA7bjxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxuLHIpO3ZhciBhPXIubGVuZ3RoO3QucHVzaChbbixuK2FdKSxuKz1hfWVsc2UgZm9yKHZhciBpPTAsbz1lLmxlbmd0aDtpPG87KytpKXQucHVzaChbaSxpKzFdKTtyZXR1cm4gdH19LHtrZXk6ImdseXBoQ2FjaGVWYWx1ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfX0se2tleToiZW5jb2RlU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxyPVtdLG49W10sYT1mdW5jdGlvbigpe3JldHVybiByLmxlbmd0aCUyPT0xfSxpPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcD9mdW5jdGlvbihlKXtyZXR1cm4gdC50b1VuaWNvZGUuY2hhckNvZGVPZihlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9Vbmljb2RlLmNoYXJDb2RlT2YoU3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpfSxvPTAscz1lLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1lLmNvZGVQb2ludEF0KG8pO2lmKGM+NTUyOTUmJihjPDU3MzQ0fHxjPjY1NTMzKSYmbysrLHRoaXMudG9Vbmljb2RlKXt2YXIgdT1pKGMpO2lmKC0xIT09dSl7YSgpJiYoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApO2Zvcih2YXIgZj0odGhpcy5jTWFwP3RoaXMuY01hcC5nZXRDaGFyQ29kZUxlbmd0aCh1KToxKS0xO2Y+PTA7Zi0tKW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHU+PjgqZiYyNTUpKTtjb250aW51ZX19YSgpfHwoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApLG4ucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSl9cmV0dXJuIHIucHVzaChuLmpvaW4oIiIpKSxyfX1dKSxlfSgpO3QuRm9udD1LO3ZhciBKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtBKHRoaXMsZSksdGhpcy5lcnJvcj10LHRoaXMubG9hZGVkTmFtZT0iZ19mb250X2Vycm9yIix0aGlzLm1pc3NpbmdGaWxlPSEwfXJldHVybiBGKGUsW3trZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSx7a2V5OiJlbmNvZGVTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlXX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOnRoaXMuZXJyb3J9fX1dKSxlfSgpO3QuRXJyb3JGb250PUp9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DRkZUb3BEaWN0PXQuQ0ZGU3RyaW5ncz10LkNGRlN0YW5kYXJkU3RyaW5ncz10LkNGRlByaXZhdGVEaWN0PXQuQ0ZGUGFyc2VyPXQuQ0ZGSW5kZXg9dC5DRkZIZWFkZXI9dC5DRkZGRFNlbGVjdD10LkNGRkNvbXBpbGVyPXQuQ0ZGQ2hhcnNldD10LkNGRj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY1KSxpPXIoMTY2KTtmdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWQoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGQoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHAoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9wKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWYobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1mKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB5KGUsdCxyKXtyZXR1cm4gdCYmdihlLnByb3RvdHlwZSx0KSxyJiZ2KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbT1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiLCIwMDEuMDAwIiwiMDAxLjAwMSIsIjAwMS4wMDIiLCIwMDEuMDAzIiwiQmxhY2siLCJCb2xkIiwiQm9vayIsIkxpZ2h0IiwiTWVkaXVtIiwiUmVndWxhciIsIlJvbWFuIiwiU2VtaWJvbGQiXTt0LkNGRlN0YW5kYXJkU3RyaW5ncz1tO3ZhciBiPVtudWxsLHtpZDoiaHN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0sbnVsbCx7aWQ6InZzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoidm1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybGluZXRvIixtaW46MixyZXNldFN0YWNrOiEwfSx7aWQ6ImhsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoidmxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJycmN1cnZldG8iLG1pbjo2LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJyZXR1cm4iLG1pbjowLHVuZGVmU3RhY2s6ITB9LG51bGwsbnVsbCx7aWQ6ImVuZGNoYXIiLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LG51bGwsbnVsbCxudWxsLHtpZDoiaHN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6ImhpbnRtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6ImNudHJtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJtb3ZldG8iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiaG1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJ2c3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoicmN1cnZlbGluZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJybGluZWN1cnZlIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InZ2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJoaGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsZ3N1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoidmhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6Imh2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH1dLHc9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm46ZnVuY3Rpb24oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2codGhpcyxlKSx0aGlzLmJ5dGVzPXQuZ2V0Qnl0ZXMoKSx0aGlzLnByb3BlcnRpZXM9cix0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFufXJldHVybiB5KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBTO3RoaXMuY2ZmPXQ7dmFyIHI9dGhpcy5wYXJzZUhlYWRlcigpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxhPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG89dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxzPXRoaXMucGFyc2VEaWN0KGEub2JqLmdldCgwKSksYz10aGlzLmNyZWF0ZURpY3QoUCxzLHQuc3RyaW5ncyk7dC5oZWFkZXI9ci5vYmosdC5uYW1lcz10aGlzLnBhcnNlTmFtZUluZGV4KG4ub2JqKSx0LnN0cmluZ3M9dGhpcy5wYXJzZVN0cmluZ0luZGV4KGkub2JqKSx0LnRvcERpY3Q9Yyx0Lmdsb2JhbFN1YnJJbmRleD1vLm9iaix0aGlzLnBhcnNlUHJpdmF0ZURpY3QodC50b3BEaWN0KSx0LmlzQ0lERm9udD1jLmhhc05hbWUoIlJPUyIpO3ZhciB1PWMuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGw9dGhpcy5wYXJzZUluZGV4KHUpLm9iaixmPWMuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7ZiYmKGUuZm9udE1hdHJpeD1mKTt2YXIgaCxkLHA9Yy5nZXRCeU5hbWUoIkZvbnRCQm94Iik7aWYocCYmKGUuYXNjZW50PU1hdGgubWF4KHBbM10scFsxXSksZS5kZXNjZW50PU1hdGgubWluKHBbMV0scFszXSksZS5hc2NlbnRTY2FsZWQ9ITApLHQuaXNDSURGb250KXtmb3IodmFyIGc9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iaix2PTAseT1nLmNvdW50O3Y8eTsrK3Ype3ZhciBtPWcuZ2V0KHYpLGI9dGhpcy5jcmVhdGVEaWN0KFAsdGhpcy5wYXJzZURpY3QobSksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoYiksdC5mZEFycmF5LnB1c2goYil9ZD1udWxsLGg9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksbC5jb3VudCx0LnN0cmluZ3MsITApLHQuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGwuY291bnQpfWVsc2UgaD10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxsLmNvdW50LHQuc3RyaW5ncywhMSksZD10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MsaC5jaGFyc2V0KTt0LmNoYXJzZXQ9aCx0LmVuY29kaW5nPWQ7dmFyIHc9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpsLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6by5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7cmV0dXJuIHQuY2hhclN0cmluZ3M9dy5jaGFyU3RyaW5ncyx0LnNlYWNzPXcuc2VhY3MsdC53aWR0aHM9dy53aWR0aHMsdH19LHtrZXk6InBhcnNlSGVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmJ5dGVzLHQ9ZS5sZW5ndGgscj0wO3I8dCYmMSE9PWVbcl07KSsrcjtpZihyPj10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIENGRiBoZWFkZXIiKTswIT09ciYmKCgwLG4uaW5mbykoImNmZiBkYXRhIGlzIHNoaWZ0ZWQiKSxlPWUuc3ViYXJyYXkociksdGhpcy5ieXRlcz1lKTt2YXIgYT1lWzBdLGk9ZVsxXSxvPWVbMl0scz1lWzNdO3JldHVybntvYmo6bmV3IHgoYSxpLG8scyksZW5kUG9zOm99fX0se2tleToicGFyc2VEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wO3ZhciByLGE9W10saT1bXTt0PTA7Zm9yKHZhciBvPWUubGVuZ3RoO3Q8bzspe3ZhciBzPWVbdF07czw9MjE/KDEyPT09cyYmKHM9czw8OHxlWysrdF0pLGkucHVzaChbcyxhXSksYT1bXSwrK3QpOmEucHVzaCgocj12b2lkIDAsMzA9PT0ocj1lW3QrK10pP2Z1bmN0aW9uKCl7Zm9yKHZhciByPSIiLG49WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLGE9ZS5sZW5ndGg7dDxhOyl7dmFyIGk9ZVt0KytdLG89aT4+NCxzPTE1Jmk7aWYoMTU9PT1vKWJyZWFrO2lmKHIrPW5bb10sMTU9PT1zKWJyZWFrO3IrPW5bc119cmV0dXJuIHBhcnNlRmxvYXQocil9KCk6Mjg9PT1yP3I9KChyPWVbdCsrXSk8PDI0fGVbdCsrXTw8MTYpPj4xNjoyOT09PXI/cj0ocj0ocj0ocj1lW3QrK10pPDw4fGVbdCsrXSk8PDh8ZVt0KytdKTw8OHxlW3QrK106cj49MzImJnI8PTI0Nj9yLTEzOTpyPj0yNDcmJnI8PTI1MD8yNTYqKHItMjQ3KStlW3QrK10rMTA4OnI+PTI1MSYmcjw9MjU0Py0yNTYqKHItMjUxKS1lW3QrK10tMTA4OigoMCxuLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiAiJytyKyciIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKSxOYU4pKSl9cmV0dXJuIGl9fSx7a2V5OiJwYXJzZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG49bmV3IEEsYT10aGlzLmJ5dGVzLGk9YVtlKytdPDw4fGFbZSsrXSxvPVtdLHM9ZTtpZigwIT09aSl7dmFyIGM9YVtlKytdLHU9ZSsoaSsxKSpjLTE7Zm9yKHQ9MCxyPWkrMTt0PHI7Kyt0KXtmb3IodmFyIGw9MCxmPTA7ZjxjOysrZilsPDw9OCxsKz1hW2UrK107by5wdXNoKHUrbCl9cz1vW2ldfWZvcih0PTAscj1vLmxlbmd0aC0xO3Q8cjsrK3Qpe3ZhciBoPW9bdF0sZD1vW3QrMV07bi5hZGQoYS5zdWJhcnJheShoLGQpKX1yZXR1cm57b2JqOm4sZW5kUG9zOnN9fX0se2tleToicGFyc2VOYW1lSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QucHVzaCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGkpKX1yZXR1cm4gdH19LHtrZXk6InBhcnNlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgTyxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QuYWRkKCgwLG4uYnl0ZXNUb1N0cmluZykoaSkpfXJldHVybiB0fX0se2tleToiY3JlYXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvPW5ldyBlKHIpLHM9aCh0KTt0cnl7Zm9yKHMucygpOyEobj1zLm4oKSkuZG9uZTspe3ZhciBjPShhPW4udmFsdWUsaT0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGEpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGEsaSl8fGQoYSxpKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PWNbMF0sbD1jWzFdO28uc2V0QnlLZXkodSxsKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9cmV0dXJuIG99fSx7a2V5OiJwYXJzZUNoYXJTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCF0fHxlLmNhbGxEZXB0aD4xMClyZXR1cm4hMTtmb3IodmFyIGk9ZS5zdGFja1NpemUsbz1lLnN0YWNrLHM9dC5sZW5ndGgsYz0wO2M8czspe3ZhciB1PXRbYysrXSxsPW51bGw7aWYoMTI9PT11KXt2YXIgZj10W2MrK107MD09PWY/KHRbYy0yXT0xMzksdFtjLTFdPTIyLGk9MCk6bD13W2ZdfWVsc2UgaWYoMjg9PT11KW9baV09KHRbY108PDI0fHRbYysxXTw8MTYpPj4xNixjKz0yLGkrKztlbHNlIGlmKDE0PT09dSl7aWYoaT49NCYmKGktPTQsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKSlyZXR1cm4gZS5zZWFjPW8uc2xpY2UoaSxpKzQpLCExO2w9Ylt1XX1lbHNlIGlmKHU+PTMyJiZ1PD0yNDYpb1tpXT11LTEzOSxpKys7ZWxzZSBpZih1Pj0yNDcmJnU8PTI1NClvW2ldPXU8MjUxPyh1LTI0Nzw8OCkrdFtjXSsxMDg6LSh1LTI1MTw8OCktdFtjXS0xMDgsYysrLGkrKztlbHNlIGlmKDI1NT09PXUpb1tpXT0odFtjXTw8MjR8dFtjKzFdPDwxNnx0W2MrMl08PDh8dFtjKzNdKS82NTUzNixjKz00LGkrKztlbHNlIGlmKDE5PT09dXx8MjA9PT11KWUuaGludHMrPWk+PjEsYys9ZS5oaW50cys3Pj4zLGklPTIsbD1iW3VdO2Vsc2V7aWYoMTA9PT11fHwyOT09PXUpe3ZhciBoPXZvaWQgMDtpZighKGg9MTA9PT11P3I6YSkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yICIrbC5pZCksITE7dmFyIGQ9MzI3Njg7aC5jb3VudDwxMjQwP2Q9MTA3OmguY291bnQ8MzM5MDAmJihkPTExMzEpO3ZhciBwPW9bLS1pXStkO2lmKHA8MHx8cD49aC5jb3VudHx8aXNOYU4ocCkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgIitsLmlkKSwhMTtpZihlLnN0YWNrU2l6ZT1pLGUuY2FsbERlcHRoKyssIXRoaXMucGFyc2VDaGFyU3RyaW5nKGUsaC5nZXQocCkscixhKSlyZXR1cm4hMTtlLmNhbGxEZXB0aC0tLGk9ZS5zdGFja1NpemU7Y29udGludWV9aWYoMTE9PT11KXJldHVybiBlLnN0YWNrU2l6ZT1pLCEwO2lmKDA9PT11JiZjPT09dC5sZW5ndGgpdFtjLTFdPTE0LGw9YlsxNF07ZWxzZXtpZig5PT09dSl7dC5jb3B5V2l0aGluKGMtMSxjLC0xKSxjLT0xLHMtPTE7Y29udGludWV9bD1iW3VdfX1pZihsKXtpZihsLnN0ZW0mJihlLmhpbnRzKz1pPj4xLDM9PT11fHwyMz09PXU/ZS5oYXNWU3RlbXM9ITA6IWUuaGFzVlN0ZW1zfHwxIT09dSYmMTghPT11fHwoKDAsbi53YXJuKSgiQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyIiksdFtjLTFdPTE9PT11PzM6MjMpKSwibWluImluIGwmJiFlLnVuZGVmU3RhY2smJmk8bC5taW4pcmV0dXJuKDAsbi53YXJuKSgiTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciAiK2wuaWQrIjsgYWN0dWFsOiAiK2krIiwgZXhwZWN0ZWQ6ICIrbC5taW4pLDA9PT1pJiYodFtjLTFdPTE0LCEwKTtlLmZpcnN0U3RhY2tDbGVhcmluZyYmbC5zdGFja0NsZWFyaW5nJiYoZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITEsKGktPWwubWluKT49MiYmbC5zdGVtP2klPTI6aT4xJiYoMCxuLndhcm4pKCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kIiksaT4wJiYoZS53aWR0aD1vW2ktMV0pKSwic3RhY2tEZWx0YSJpbiBsPygic3RhY2tGbiJpbiBsJiZsLnN0YWNrRm4obyxpKSxpKz1sLnN0YWNrRGVsdGEpOmwuc3RhY2tDbGVhcmluZz9pPTA6bC5yZXNldFN0YWNrPyhpPTAsZS51bmRlZlN0YWNrPSExKTpsLnVuZGVmU3RhY2smJihpPTAsZS51bmRlZlN0YWNrPSEwLGUuZmlyc3RTdGFja0NsZWFyaW5nPSExKX19cmV0dXJuIHM8dC5sZW5ndGgmJnQuZmlsbCgxNCxzKSxlLnN0YWNrU2l6ZT1pLCEwfX0se2tleToicGFyc2VDaGFyU3RyaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuY2hhclN0cmluZ3Mscj1lLmxvY2FsU3VickluZGV4LGE9ZS5nbG9iYWxTdWJySW5kZXgsaT1lLmZkU2VsZWN0LG89ZS5mZEFycmF5LHM9ZS5wcml2YXRlRGljdCxjPVtdLHU9W10sbD10LmNvdW50LGY9MDtmPGw7ZisrKXt2YXIgaD10LmdldChmKSxkPXtjYWxsRGVwdGg6MCxzdGFja1NpemU6MCxzdGFjazpbXSx1bmRlZlN0YWNrOiEwLGhpbnRzOjAsZmlyc3RTdGFja0NsZWFyaW5nOiEwLHNlYWM6bnVsbCx3aWR0aDpudWxsLGhhc1ZTdGVtczohMX0scD0hMCxnPW51bGwsdj1zO2lmKGkmJm8ubGVuZ3RoKXt2YXIgeT1pLmdldEZESW5kZXgoZik7LTE9PT15JiYoKDAsbi53YXJuKSgiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKSxwPSExKSx5Pj1vLmxlbmd0aCYmKCgwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpLHA9ITEpLHAmJihnPSh2PW9beV0ucHJpdmF0ZURpY3QpLnN1YnJzSW5kZXgpfWVsc2UgciYmKGc9cik7aWYocCYmKHA9dGhpcy5wYXJzZUNoYXJTdHJpbmcoZCxoLGcsYSkpLG51bGwhPT1kLndpZHRoKXt2YXIgbT12LmdldEJ5TmFtZSgibm9taW5hbFdpZHRoWCIpO3VbZl09bStkLndpZHRofWVsc2V7dmFyIGI9di5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTt1W2ZdPWJ9bnVsbCE9PWQuc2VhYyYmKGNbZl09ZC5zZWFjKSxwfHx0LnNldChmLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6dCxzZWFjczpjLHdpZHRoczp1fX19LHtrZXk6ImVtcHR5UHJpdmF0ZURpY3Rpb25hcnkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlRGljdChJLFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSksZS5wcml2YXRlRGljdD10fX0se2tleToicGFyc2VQcml2YXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNOYW1lKCJQcml2YXRlIikpe3ZhciB0PWUuZ2V0QnlOYW1lKCJQcml2YXRlIik7aWYoQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoKXt2YXIgcj10WzBdLG49dFsxXTtpZigwPT09cnx8bj49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGE9bityLGk9dGhpcy5ieXRlcy5zdWJhcnJheShuLGEpLG89dGhpcy5wYXJzZURpY3QoaSkscz10aGlzLmNyZWF0ZURpY3QoSSxvLGUuc3RyaW5ncyk7aWYoZS5wcml2YXRlRGljdD1zLHMuZ2V0QnlOYW1lKCJTdWJycyIpKXt2YXIgYz1zLmdldEJ5TmFtZSgiU3VicnMiKSx1PW4rYztpZigwPT09Y3x8dT49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGw9dGhpcy5wYXJzZUluZGV4KHUpO3Muc3VicnNJbmRleD1sLm9ian19fX1lbHNlIGUucmVtb3ZlQnlOYW1lKCJQcml2YXRlIil9ZWxzZSB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSl9fSx7a2V5OiJwYXJzZUNoYXJzZXRzIix2YWx1ZTpmdW5jdGlvbihlLHQscixpKXtpZigwPT09ZSlyZXR1cm4gbmV3IGooITAsRS5JU09fQURPQkUsYS5JU09BZG9iZUNoYXJzZXQpO2lmKDE9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVCxhLkV4cGVydENoYXJzZXQpO2lmKDI9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVF9TVUJTRVQsYS5FeHBlcnRTdWJzZXRDaGFyc2V0KTt2YXIgbyxzLGMsdT10aGlzLmJ5dGVzLGw9ZSxmPXVbZSsrXSxoPVtpPzA6Ii5ub3RkZWYiXTtzd2l0Y2godC09MSxmKXtjYXNlIDA6Zm9yKGM9MDtjPHQ7YysrKW89dVtlKytdPDw4fHVbZSsrXSxoLnB1c2goaT9vOnIuZ2V0KG8pKTticmVhaztjYXNlIDE6Zm9yKDtoLmxlbmd0aDw9dDspZm9yKG89dVtlKytdPDw4fHVbZSsrXSxzPXVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2Nhc2UgMjpmb3IoO2gubGVuZ3RoPD10Oylmb3Iobz11W2UrK108PDh8dVtlKytdLHM9dVtlKytdPDw4fHVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gY2hhcnNldCBmb3JtYXQiKX12YXIgZD1lLHA9dS5zdWJhcnJheShsLGQpO3JldHVybiBuZXcgaighMSxmLGgscCl9fSx7a2V5OiJwYXJzZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbyxzLGMsdT1PYmplY3QuY3JlYXRlKG51bGwpLGw9dGhpcy5ieXRlcyxmPSExLGg9bnVsbDtpZigwPT09ZXx8MT09PWUpe2Y9ITAsbz1lO3ZhciBkPWU/aS5FeHBlcnRFbmNvZGluZzppLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKHM9MCxjPWEubGVuZ3RoO3M8YztzKyspe3ZhciBwPWQuaW5kZXhPZihhW3NdKTstMSE9PXAmJih1W3BdPXMpfX1lbHNle3ZhciBnPWU7c3dpdGNoKDEyNyYobz1sW2UrK10pKXtjYXNlIDA6dmFyIHY9bFtlKytdO2ZvcihzPTE7czw9djtzKyspdVtsW2UrK11dPXM7YnJlYWs7Y2FzZSAxOnZhciB5PWxbZSsrXSxtPTE7Zm9yKHM9MDtzPHk7cysrKWZvcih2YXIgYj1sW2UrK10sdz1sW2UrK10saz1iO2s8PWIrdztrKyspdVtrXT1tKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6ICIuY29uY2F0KG8sIiBpbiBDRkYiKSl9dmFyIFM9ZTsxMjgmbyYmKGxbZ10mPTEyNyxmdW5jdGlvbigpe3ZhciB0PWxbZSsrXTtmb3Iocz0wO3M8dDtzKyspe3ZhciBuPWxbZSsrXSxpPShsW2UrK108PDgpKygyNTUmbFtlKytdKTt1W25dPWEuaW5kZXhPZihyLmdldChpKSl9fSgpKSxoPWwuc3ViYXJyYXkoZyxTKX1yZXR1cm4gbmV3IE0oZixvJj0xMjcsdSxoKX19LHtrZXk6InBhcnNlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT10aGlzLmJ5dGVzLGk9YVtlKytdLG89W107c3dpdGNoKGkpe2Nhc2UgMDpmb3Iocj0wO3I8dDsrK3Ipe3ZhciBzPWFbZSsrXTtvLnB1c2gocyl9YnJlYWs7Y2FzZSAzOnZhciBjPWFbZSsrXTw8OHxhW2UrK107Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1hW2UrK108PDh8YVtlKytdOzA9PT1yJiYwIT09dSYmKCgwLG4ud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKSx1PTApO2Zvcih2YXIgbD1hW2UrK10sZj1hW2VdPDw4fGFbZSsxXSxoPXU7aDxmOysraClvLnB1c2gobCl9ZSs9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJy5jb25jYXQoaSwnIi4nKSl9aWYoby5sZW5ndGghPT10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IF8oaSxvKX19XSksZX0oKTt0LkNGRlBhcnNlcj1rO3ZhciBTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2codGhpcyxlKSx0aGlzLmhlYWRlcj1udWxsLHRoaXMubmFtZXM9W10sdGhpcy50b3BEaWN0PW51bGwsdGhpcy5zdHJpbmdzPW5ldyBPLHRoaXMuZ2xvYmFsU3VickluZGV4PW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHRoaXMuY2hhcnNldD1udWxsLHRoaXMuY2hhclN0cmluZ3M9bnVsbCx0aGlzLmZkQXJyYXk9W10sdGhpcy5mZFNlbGVjdD1udWxsLHRoaXMuaXNDSURGb250PSExfXJldHVybiB5KGUsW3trZXk6ImR1cGxpY2F0ZUZpcnN0R2x5cGgiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGFyU3RyaW5ncy5jb3VudD49NjU1MzUpKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBjaGFyc3RyaW5ncyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIik7ZWxzZXt2YXIgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKSx0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfX19LHtrZXk6Imhhc0dseXBoSWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KSYmdGhpcy5jaGFyU3RyaW5ncy5nZXQoZSkubGVuZ3RoPjB9fV0pLGV9KCk7dC5DRkY9Uzt2YXIgeD15KChmdW5jdGlvbiBlKHQscixuLGEpe2codGhpcyxlKSx0aGlzLm1ham9yPXQsdGhpcy5taW5vcj1yLHRoaXMuaGRyU2l6ZT1uLHRoaXMub2ZmU2l6ZT1hfSkpO3QuQ0ZGSGVhZGVyPXg7dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMuc3RyaW5ncz1bXX1yZXR1cm4geShlLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0zOTA/bVtlXTplLTM5MTw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS0zOTFdOm1bMF19fSx7a2V5OiJnZXRTSUQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW0uaW5kZXhPZihlKTtyZXR1cm4tMSE9PXQ/dDotMSE9PSh0PXRoaXMuc3RyaW5ncy5pbmRleE9mKGUpKT90KzM5MTotMX19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9fSx7a2V5OiJjb3VudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGh9fV0pLGV9KCk7dC5DRkZTdHJpbmdzPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2JqZWN0cz1bXSx0aGlzLmxlbmd0aD0wfXJldHVybiB5KGUsW3trZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5sZW5ndGgrPWUubGVuZ3RoLHRoaXMub2JqZWN0cy5wdXNoKGUpfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubGVuZ3RoKz10Lmxlbmd0aC10aGlzLm9iamVjdHNbZV0ubGVuZ3RoLHRoaXMub2JqZWN0c1tlXT10fX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmplY3RzW2VdfX0se2tleToiY291bnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdHMubGVuZ3RofX1dKSxlfSgpO3QuQ0ZGSW5kZXg9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5rZXlUb05hbWVNYXA9dC5rZXlUb05hbWVNYXAsdGhpcy5uYW1lVG9LZXlNYXA9dC5uYW1lVG9LZXlNYXAsdGhpcy5kZWZhdWx0cz10LmRlZmF1bHRzLHRoaXMudHlwZXM9dC50eXBlcyx0aGlzLm9wY29kZXM9dC5vcGNvZGVzLHRoaXMub3JkZXI9dC5vcmRlcix0aGlzLnN0cmluZ3M9cix0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6InNldEJ5S2V5Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpcmV0dXJuITE7aWYoMD09PXQubGVuZ3RoKXJldHVybiEwO3ZhciByLGE9aCh0KTt0cnl7Zm9yKGEucygpOyEocj1hLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aWYoaXNOYU4oaSkpcmV0dXJuKDAsbi53YXJuKSgnSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJy5jb25jYXQodCwnIiBmb3Iga2V5ICInKS5jb25jYXQoZSwnIi4nKSksITB9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXZhciBvPXRoaXMudHlwZXNbZV07cmV0dXJuIm51bSIhPT1vJiYic2lkIiE9PW8mJiJvZmZzZXQiIT09b3x8KHQ9dFswXSksdGhpcy52YWx1ZXNbZV09dCwhMH19LHtrZXk6InNldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiJy5jb25jYXQoZSwnIicpKTt0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV09dH19LHtrZXk6Imhhc05hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5hbWVUb0tleU1hcFtlXWluIHRoaXMudmFsdWVzfX0se2tleToiZ2V0QnlOYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiLmNvbmNhdChlLCciJykpO3ZhciB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19fSx7a2V5OiJyZW1vdmVCeU5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV19fV0sW3trZXk6ImNyZWF0ZVRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj17a2V5VG9OYW1lTWFwOnt9LG5hbWVUb0tleU1hcDp7fSxkZWZhdWx0czp7fSx0eXBlczp7fSxvcGNvZGVzOnt9LG9yZGVyOltdfSxuPWgoZSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlLGk9QXJyYXkuaXNBcnJheShhWzBdKT8oYVswXVswXTw8OCkrYVswXVsxXTphWzBdO3Iua2V5VG9OYW1lTWFwW2ldPWFbMV0sci5uYW1lVG9LZXlNYXBbYVsxXV09aSxyLnR5cGVzW2ldPWFbMl0sci5kZWZhdWx0c1tpXT1hWzNdLHIub3Bjb2Rlc1tpXT1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06W2FbMF1dLHIub3JkZXIucHVzaChpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fV0pLGV9KCksRj1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dLFA9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHIudGFibGVzLGUpKS5wcml2YXRlRGljdD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKEYpKX19XSkscn0oQyk7dC5DRkZUb3BEaWN0PVA7dmFyIFQ9W1s2LCJCbHVlVmFsdWVzIiwiZGVsdGEiLG51bGxdLFs3LCJPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFs4LCJGYW1pbHlCbHVlcyIsImRlbHRhIixudWxsXSxbOSwiRmFtaWx5T3RoZXJCbHVlcyIsImRlbHRhIixudWxsXSxbWzEyLDldLCJCbHVlU2NhbGUiLCJudW0iLC4wMzk2MjVdLFtbMTIsMTBdLCJCbHVlU2hpZnQiLCJudW0iLDddLFtbMTIsMTFdLCJCbHVlRnV6eiIsIm51bSIsMV0sWzEwLCJTdGRIVyIsIm51bSIsbnVsbF0sWzExLCJTdGRWVyIsIm51bSIsbnVsbF0sW1sxMiwxMl0sIlN0ZW1TbmFwSCIsImRlbHRhIixudWxsXSxbWzEyLDEzXSwiU3RlbVNuYXBWIiwiZGVsdGEiLG51bGxdLFtbMTIsMTRdLCJGb3JjZUJvbGQiLCJudW0iLDBdLFtbMTIsMTddLCJMYW5ndWFnZUdyb3VwIiwibnVtIiwwXSxbWzEyLDE4XSwiRXhwYW5zaW9uRmFjdG9yIiwibnVtIiwuMDZdLFtbMTIsMTldLCJpbml0aWFsUmFuZG9tU2VlZCIsIm51bSIsMF0sWzIwLCJkZWZhdWx0V2lkdGhYIiwibnVtIiwwXSxbMjEsIm5vbWluYWxXaWR0aFgiLCJudW0iLDBdLFsxOSwiU3VicnMiLCJvZmZzZXQiLG51bGxdXSxJPWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGcodGhpcyxyKSwobj10LmNhbGwodGhpcyxyLnRhYmxlcyxlKSkuc3VicnNJbmRleD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKFQpKX19XSkscn0oQyk7dC5DRkZQcml2YXRlRGljdD1JO3ZhciBFPXtJU09fQURPQkU6MCxFWFBFUlQ6MSxFWFBFUlRfU1VCU0VUOjJ9LGo9eSgoZnVuY3Rpb24gZSh0LHIsbixhKXtnKHRoaXMsZSksdGhpcy5wcmVkZWZpbmVkPXQsdGhpcy5mb3JtYXQ9cix0aGlzLmNoYXJzZXQ9bix0aGlzLnJhdz1hfSkpO3QuQ0ZGQ2hhcnNldD1qO3ZhciBNPXkoKGZ1bmN0aW9uIGUodCxyLG4sYSl7Zyh0aGlzLGUpLHRoaXMucHJlZGVmaW5lZD10LHRoaXMuZm9ybWF0PXIsdGhpcy5lbmNvZGluZz1uLHRoaXMucmF3PWF9KSksXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5mb3JtYXQ9dCx0aGlzLmZkU2VsZWN0PXJ9cmV0dXJuIHkoZSxbe2tleToiZ2V0RkRJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MHx8ZT49dGhpcy5mZFNlbGVjdC5sZW5ndGg/LTE6dGhpcy5mZFNlbGVjdFtlXX19XSksZX0oKTt0LkNGRkZEU2VsZWN0PV87dmFyIEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2Zmc2V0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6ImlzVHJhY2tpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMub2Zmc2V0c319LHtrZXk6InRyYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUgaW4gdGhpcy5vZmZzZXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJBbHJlYWR5IHRyYWNraW5nIGxvY2F0aW9uIG9mICIuY29uY2F0KGUpKTt0aGlzLm9mZnNldHNbZV09dH19LHtrZXk6Im9mZnNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMub2Zmc2V0cyl0aGlzLm9mZnNldHNbdF0rPWV9fSx7a2V5OiJzZXRFbnRyeUxvY2F0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYoIShlIGluIHRoaXMub2Zmc2V0cykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vdCB0cmFja2luZyBsb2NhdGlvbiBvZiAiLmNvbmNhdChlKSk7Zm9yKHZhciBhPXIuZGF0YSxpPXRoaXMub2Zmc2V0c1tlXSxvPTAscz10Lmxlbmd0aDtvPHM7KytvKXt2YXIgYz01Km8raSx1PWMrMSxsPWMrMixmPWMrMyxoPWMrNDtpZigyOSE9PWFbY118fDAhPT1hW3VdfHwwIT09YVtsXXx8MCE9PWFbZl18fDAhPT1hW2hdKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpO3ZhciBkPXRbb107YVtjXT0yOSxhW3VdPWQ+PjI0JjI1NSxhW2xdPWQ+PjE2JjI1NSxhW2ZdPWQ+PjgmMjU1LGFbaF09MjU1JmR9fX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2codGhpcyxlKSx0aGlzLmNmZj10fXJldHVybiB5KGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LHI9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChyKTt2YXIgYT10aGlzLmNvbXBpbGVOYW1lSW5kZXgoZS5uYW1lcyk7aWYodC5hZGQoYSksZS5pc0NJREZvbnQmJmUudG9wRGljdC5oYXNOYW1lKCJGb250TWF0cml4Iikpe3ZhciBpPWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7dmFyIG8scz1oKGUuZmRBcnJheSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9aS5zbGljZSgwKTtjLmhhc05hbWUoIkZvbnRNYXRyaXgiKSYmKHU9bi5VdGlsLnRyYW5zZm9ybSh1LGMuZ2V0QnlOYW1lKCJGb250TWF0cml4IikpKSxjLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsdSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX12YXIgbD1lLnRvcERpY3QuZ2V0QnlOYW1lKCJYVUlEIik7bCYmbC5sZW5ndGg+MTYmJmUudG9wRGljdC5yZW1vdmVCeU5hbWUoIlhVSUQiKSxlLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTt2YXIgZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQoZi5vdXRwdXQpO3ZhciBkPWYudHJhY2tlcnNbMF0scD10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQocCk7dmFyIGc9dGhpcy5jb21waWxlSW5kZXgoZS5nbG9iYWxTdWJySW5kZXgpO2lmKHQuYWRkKGcpLGUuZW5jb2RpbmcmJmUudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKWlmKGUuZW5jb2RpbmcucHJlZGVmaW5lZClkLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbZS5lbmNvZGluZy5mb3JtYXRdLHQpO2Vsc2V7dmFyIHY9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KSx0LmFkZCh2KX12YXIgeT10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCxlLmNoYXJTdHJpbmdzLmNvdW50LGUuc3RyaW5ncyxlLmlzQ0lERm9udCk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpLHQuYWRkKHkpO3ZhciBtPXRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGUuY2hhclN0cmluZ3MpO2lmKGQuc2V0RW50cnlMb2NhdGlvbigiQ2hhclN0cmluZ3MiLFt0Lmxlbmd0aF0sdCksdC5hZGQobSksZS5pc0NJREZvbnQpe2Quc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLFt0Lmxlbmd0aF0sdCk7dmFyIGI9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQoYiksZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApLGQuc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KSx0LmFkZChmLm91dHB1dCk7dmFyIHc9Zi50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHcsdCl9cmV0dXJuIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhbZS50b3BEaWN0XSxbZF0sdCksdC5hZGQoWzBdKSx0LmRhdGF9fSx7a2V5OiJlbmNvZGVOdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpP3RoaXMuZW5jb2RlSW50ZWdlcihlKTp0aGlzLmVuY29kZUZsb2F0KGUpfX0se2tleToiZW5jb2RlRmxvYXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQudG9TdHJpbmcoKSxuPWUuRW5jb2RlRmxvYXRSZWdFeHAuZXhlYyhyKTtpZihuKXt2YXIgYT1wYXJzZUZsb2F0KCIxZSIrKChuWzJdPytuWzJdOjApK25bMV0ubGVuZ3RoKSk7cj0oTWF0aC5yb3VuZCh0KmEpL2EpLnRvU3RyaW5nKCl9dmFyIGksbyxzPSIiO2ZvcihpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgYz1yW2ldO3MrPSJlIj09PWM/Ii0iPT09clsrK2ldPyJjIjoiYiI6Ii4iPT09Yz8iYSI6Ii0iPT09Yz8iZSI6Y312YXIgdT1bMzBdO2ZvcihpPTAsbz0ocys9MSZzLmxlbmd0aD8iZiI6ImZmIikubGVuZ3RoO2k8bztpKz0yKXUucHVzaChwYXJzZUludChzLnN1YnN0cmluZyhpLGkrMiksMTYpKTtyZXR1cm4gdX19LHtrZXk6ImVuY29kZUludGVnZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXX19LHtrZXk6ImNvbXBpbGVIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfX0se2tleToiY29tcGlsZU5hbWVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgQSxhPWgoZSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXtmb3IodmFyIGk9dC52YWx1ZSxvPU1hdGgubWluKGkubGVuZ3RoLDEyNykscz1uZXcgQXJyYXkobyksYz0wO2M8bztjKyspe3ZhciB1PWlbY107KHU8IiEifHx1PiJ+Inx8IlsiPT09dXx8Il0iPT09dXx8IigiPT09dXx8IikiPT09dXx8InsiPT09dXx8In0iPT09dXx8IjwiPT09dXx8Ij4iPT09dXx8Ii8iPT09dXx8IiUiPT09dSkmJih1PSJfIiksc1tjXT11fSIiPT09KHM9cy5qb2luKCIiKSkmJihzPSJCYWRfRm9udF9OYW1lIiksci5hZGQoKDAsbi5zdHJpbmdUb0J5dGVzKShzKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleChyKX19LHtrZXk6ImNvbXBpbGVUb3BEaWN0cyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9W10saT1uZXcgQSxvPWgoZSk7dHJ5e2ZvcihvLnMoKTshKG49by5uKCkpLmRvbmU7KXt2YXIgcz1uLnZhbHVlO3ImJihzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFZlcnNpb24iKSxzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFJldmlzaW9uIikscy5yZW1vdmVCeU5hbWUoIkNJREZvbnRUeXBlIikscy5yZW1vdmVCeU5hbWUoIkNJRENvdW50Iikscy5yZW1vdmVCeU5hbWUoIlVJREJhc2UiKSk7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyk7YS5wdXNoKGMpLGkuYWRkKHUpLGMub2Zmc2V0KHQpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm57dHJhY2tlcnM6YSxvdXRwdXQ6aT10aGlzLmNvbXBpbGVJbmRleChpLGEpfX19LHtrZXk6ImNvbXBpbGVQcml2YXRlRGljdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTsrK2Epe3ZhciBvPWVbYV0scz1vLnByaXZhdGVEaWN0O2lmKCFzfHwhby5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyksbD1yLmxlbmd0aDtpZihjLm9mZnNldChsKSx1Lmxlbmd0aHx8KGw9MCksdFthXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbdS5sZW5ndGgsbF0sciksci5hZGQodSkscy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe3ZhciBmPXRoaXMuY29tcGlsZUluZGV4KHMuc3VicnNJbmRleCk7Yy5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW3UubGVuZ3RoXSxyKSxyLmFkZChmKX19fX0se2tleToiY29tcGlsZURpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT1bXSxpPWgoZS5vcmRlcik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKHMgaW4gZS52YWx1ZXMpe3ZhciBjPWUudmFsdWVzW3NdLHU9ZS50eXBlc1tzXTtpZihBcnJheS5pc0FycmF5KHUpfHwodT1bdV0pLEFycmF5LmlzQXJyYXkoYyl8fChjPVtjXSksMCE9PWMubGVuZ3RoKXtmb3IodmFyIGw9MCxmPXUubGVuZ3RoO2w8ZjsrK2wpe3ZhciBkPXVbbF0scD1jW2xdO3N3aXRjaChkKXtjYXNlIm51bSI6Y2FzZSJzaWQiOmEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIocCkpKTticmVhaztjYXNlIm9mZnNldCI6dmFyIGc9ZS5rZXlUb05hbWVNYXBbc107dC5pc1RyYWNraW5nKGcpfHx0LnRyYWNrKGcsYS5sZW5ndGgpLGEucHVzaCgyOSwwLDAsMCwwKTticmVhaztjYXNlImFycmF5IjpjYXNlImRlbHRhIjphLnB1c2guYXBwbHkoYSxvKHRoaXMuZW5jb2RlTnVtYmVyKHApKSk7Zm9yKHZhciB2PTEseT1jLmxlbmd0aDt2PHk7Kyt2KWEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIoY1t2XSkpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGRhdGEgdHlwZSBvZiAiLmNvbmNhdChkKSl9fWEucHVzaC5hcHBseShhLG8oZS5vcGNvZGVzW3NdKSl9fX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIGF9fSx7a2V5OiJjb21waWxlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9bmV3IEEsYT1oKGUpO3RyeXtmb3IoYS5zKCk7ISh0PWEubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZTtyLmFkZCgoMCxuLnN0cmluZ1RvQnl0ZXMpKGkpKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHIpfX0se2tleToiY29tcGlsZUdsb2JhbFN1YnJJbmRleCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNmZi5nbG9iYWxTdWJySW5kZXg7dGhpcy5vdXQud3JpdGVCeXRlQXJyYXkodGhpcy5jb21waWxlSW5kZXgoZSkpfX0se2tleToiY29tcGlsZUNoYXJTdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEEscj0wO3I8ZS5jb3VudDtyKyspe3ZhciBuPWUuZ2V0KHIpOzAhPT1uLmxlbmd0aD90LmFkZChuKTp0LmFkZChuZXcgVWludDhBcnJheShbMTM5LDE0XSkpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX19LHtrZXk6ImNvbXBpbGVDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaSxvPXQtMTtpZihhKWk9bmV3IFVpbnQ4QXJyYXkoWzIsMCwwLG8+PjgmMjU1LDI1NSZvXSk7ZWxzZXsoaT1uZXcgVWludDhBcnJheSgxKzIqbykpWzBdPTA7Zm9yKHZhciBzPTAsYz1lLmNoYXJzZXQubGVuZ3RoLHU9ITEsbD0xO2w8aS5sZW5ndGg7bCs9Mil7dmFyIGY9MDtpZihzPGMpe3ZhciBoPWUuY2hhcnNldFtzKytdOy0xPT09KGY9ci5nZXRTSUQoaCkpJiYoZj0wLHV8fCh1PSEwLCgwLG4ud2FybikoIkNvdWxkbid0IGZpbmQgIi5jb25jYXQoaCwiIGluIENGRiBzdHJpbmdzIikpKSl9aVtsXT1mPj44JjI1NSxpW2wrMV09MjU1JmZ9fXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGkpfX0se2tleToiY29tcGlsZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShlLnJhdyl9fSx7a2V5OiJjb21waWxlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1lLmZvcm1hdDtzd2l0Y2gobil7Y2FzZSAwOmZvcigodD1uZXcgVWludDhBcnJheSgxK2UuZmRTZWxlY3QubGVuZ3RoKSlbMF09bixyPTA7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspdFtyKzFdPWUuZmRTZWxlY3Rbcl07YnJlYWs7Y2FzZSAzOnZhciBhPWUuZmRTZWxlY3RbMF0saT1bbiwwLDAsMCwwLGFdO2ZvcihyPTE7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspe3ZhciBvPWUuZmRTZWxlY3Rbcl07byE9PWEmJihpLnB1c2gocj4+OCYyNTUsMjU1JnIsbyksYT1vKX12YXIgcz0oaS5sZW5ndGgtMykvMztpWzFdPXM+PjgmMjU1LGlbMl09MjU1JnMsaS5wdXNoKHI+PjgmMjU1LDI1NSZyKSx0PW5ldyBVaW50OEFycmF5KGkpfXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KHQpfX0se2tleToiY29tcGlsZVR5cGVkQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47KytyKXRbcl09ZVtyXTtyZXR1cm4gdH19LHtrZXk6ImNvbXBpbGVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLHI9ZS5vYmplY3RzLG49ci5sZW5ndGg7aWYoMD09PW4pcmV0dXJuWzAsMF07dmFyIGEsaSxzPVtuPj44JjI1NSwyNTUmbl0sYz0xO2ZvcihhPTA7YTxuOysrYSljKz1yW2FdLmxlbmd0aDtpPWM8MjU2PzE6Yzw2NTUzNj8yOmM8MTY3NzcyMTY/Mzo0LHMucHVzaChpKTt2YXIgdT0xO2ZvcihhPTA7YTxuKzE7YSsrKTE9PT1pP3MucHVzaCgyNTUmdSk6Mj09PWk/cy5wdXNoKHU+PjgmMjU1LDI1NSZ1KTozPT09aT9zLnB1c2godT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1KTpzLnB1c2godT4+PjI0JjI1NSx1Pj4xNiYyNTUsdT4+OCYyNTUsMjU1JnUpLHJbYV0mJih1Kz1yW2FdLmxlbmd0aCk7Zm9yKGE9MDthPG47YSsrKXRbYV0mJnRbYV0ub2Zmc2V0KHMubGVuZ3RoKSxzLnB1c2guYXBwbHkocyxvKHJbYV0pKTtyZXR1cm4gc319XSxbe2tleToiRW5jb2RlRmxvYXRSZWdFeHAiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJFbmNvZGVGbG9hdFJlZ0V4cCIsL1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8pfX1dKSxlfSgpO3QuQ0ZGQ29tcGlsZXI9Un0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JU09BZG9iZUNoYXJzZXQ9dC5FeHBlcnRTdWJzZXRDaGFyc2V0PXQuRXhwZXJ0Q2hhcnNldD12b2lkIDAsdC5JU09BZG9iZUNoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iXSx0LkV4cGVydENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl0sdC5FeHBlcnRTdWJzZXRDaGFyc2V0PVsiLm5vdGRlZiIsInNwYWNlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsImh5cGhlbnN1cGVyaW9yIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsImNlbnRvbGRzdHlsZSIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciJdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlphcGZEaW5nYmF0c0VuY29kaW5nPXQuV2luQW5zaUVuY29kaW5nPXQuU3ltYm9sU2V0RW5jb2Rpbmc9dC5TdGFuZGFyZEVuY29kaW5nPXQuTWFjUm9tYW5FbmNvZGluZz10LkV4cGVydEVuY29kaW5nPXZvaWQgMCx0LmdldEVuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIldpbkFuc2lFbmNvZGluZyI6cmV0dXJuIG87Y2FzZSJTdGFuZGFyZEVuY29kaW5nIjpyZXR1cm4gaTtjYXNlIk1hY1JvbWFuRW5jb2RpbmciOnJldHVybiBhO2Nhc2UiU3ltYm9sU2V0RW5jb2RpbmciOnJldHVybiBzO2Nhc2UiWmFwZkRpbmdiYXRzRW5jb2RpbmciOnJldHVybiBjO2Nhc2UiRXhwZXJ0RW5jb2RpbmciOnJldHVybiByO2Nhc2UiTWFjRXhwZXJ0RW5jb2RpbmciOnJldHVybiBuO2RlZmF1bHQ6cmV0dXJuIG51bGx9fTt2YXIgcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsIiIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsIiIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsIiIsIiIsIiIsImlzdXBlcmlvciIsIiIsIiIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsIiIsIiIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCIiLCJEb3RhY2NlbnRzbWFsbCIsIiIsIiIsIk1hY3JvbnNtYWxsIiwiIiwiIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiIiwiIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCIiLCIiLCIiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCIiLCIiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCJdO3QuRXhwZXJ0RW5jb2Rpbmc9cjt2YXIgbj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLGE9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInNwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iXTt0Lk1hY1JvbWFuRW5jb2Rpbmc9YTt2YXIgaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCIiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCIiLCJxdWVzdGlvbmRvd24iLCIiLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsIiIsInJpbmciLCJjZWRpbGxhIiwiIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJBRSIsIiIsIm9yZGZlbWluaW5lIiwiIiwiIiwiIiwiIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCIiLCIiLCIiLCIiLCIiLCJhZSIsIiIsIiIsIiIsImRvdGxlc3NpIiwiIiwiIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwiIiwiIiwiIiwiIl07dC5TdGFuZGFyZEVuY29kaW5nPWk7dmFyIG89WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiYnVsbGV0IiwiRXVybyIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwiZmxvcmluIiwicXVvdGVkYmxiYXNlIiwiZWxsaXBzaXMiLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJjaXJjdW1mbGV4IiwicGVydGhvdXNhbmQiLCJTY2Fyb24iLCJndWlsc2luZ2xsZWZ0IiwiT0UiLCJidWxsZXQiLCJaY2Fyb24iLCJidWxsZXQiLCJidWxsZXQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsImJ1bGxldCIsImVuZGFzaCIsImVtZGFzaCIsInRpbGRlIiwidHJhZGVtYXJrIiwic2Nhcm9uIiwiZ3VpbHNpbmdscmlnaHQiLCJvZSIsImJ1bGxldCIsInpjYXJvbiIsIllkaWVyZXNpcyIsInNwYWNlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImN1cnJlbmN5IiwieWVuIiwiYnJva2VuYmFyIiwic2VjdGlvbiIsImRpZXJlc2lzIiwiY29weXJpZ2h0Iiwib3JkZmVtaW5pbmUiLCJndWlsbGVtb3RsZWZ0IiwibG9naWNhbG5vdCIsImh5cGhlbiIsInJlZ2lzdGVyZWQiLCJtYWNyb24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJhY3V0ZSIsIm11IiwicGFyYWdyYXBoIiwicGVyaW9kY2VudGVyZWQiLCJjZWRpbGxhIiwib25lc3VwZXJpb3IiLCJvcmRtYXNjdWxpbmUiLCJndWlsbGVtb3RyaWdodCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93biIsIkFncmF2ZSIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQXRpbGRlIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJBRSIsIkNjZWRpbGxhIiwiRWdyYXZlIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJJZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIkV0aCIsIk50aWxkZSIsIk9ncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT3RpbGRlIiwiT2RpZXJlc2lzIiwibXVsdGlwbHkiLCJPc2xhc2giLCJVZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIllhY3V0ZSIsIlRob3JuIiwiZ2VybWFuZGJscyIsImFncmF2ZSIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYXRpbGRlIiwiYWRpZXJlc2lzIiwiYXJpbmciLCJhZSIsImNjZWRpbGxhIiwiZWdyYXZlIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImV0aCIsIm50aWxkZSIsIm9ncmF2ZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib3RpbGRlIiwib2RpZXJlc2lzIiwiZGl2aWRlIiwib3NsYXNoIiwidWdyYXZlIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ5YWN1dGUiLCJ0aG9ybiIsInlkaWVyZXNpcyJdO3QuV2luQW5zaUVuY29kaW5nPW87dmFyIHM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXTt0LlN5bWJvbFNldEVuY29kaW5nPXM7dmFyIGM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImExIiwiYTIiLCJhMjAyIiwiYTMiLCJhNCIsImE1IiwiYTExOSIsImExMTgiLCJhMTE3IiwiYTExIiwiYTEyIiwiYTEzIiwiYTE0IiwiYTE1IiwiYTE2IiwiYTEwNSIsImExNyIsImExOCIsImExOSIsImEyMCIsImEyMSIsImEyMiIsImEyMyIsImEyNCIsImEyNSIsImEyNiIsImEyNyIsImEyOCIsImE2IiwiYTciLCJhOCIsImE5IiwiYTEwIiwiYTI5IiwiYTMwIiwiYTMxIiwiYTMyIiwiYTMzIiwiYTM0IiwiYTM1IiwiYTM2IiwiYTM3IiwiYTM4IiwiYTM5IiwiYTQwIiwiYTQxIiwiYTQyIiwiYTQzIiwiYTQ0IiwiYTQ1IiwiYTQ2IiwiYTQ3IiwiYTQ4IiwiYTQ5IiwiYTUwIiwiYTUxIiwiYTUyIiwiYTUzIiwiYTU0IiwiYTU1IiwiYTU2IiwiYTU3IiwiYTU4IiwiYTU5IiwiYTYwIiwiYTYxIiwiYTYyIiwiYTYzIiwiYTY0IiwiYTY1IiwiYTY2IiwiYTY3IiwiYTY4IiwiYTY5IiwiYTcwIiwiYTcxIiwiYTcyIiwiYTczIiwiYTc0IiwiYTIwMyIsImE3NSIsImEyMDQiLCJhNzYiLCJhNzciLCJhNzgiLCJhNzkiLCJhODEiLCJhODIiLCJhODMiLCJhODQiLCJhOTciLCJhOTgiLCJhOTkiLCJhMTAwIiwiIiwiYTg5IiwiYTkwIiwiYTkzIiwiYTk0IiwiYTkxIiwiYTkyIiwiYTIwNSIsImE4NSIsImEyMDYiLCJhODYiLCJhODciLCJhODgiLCJhOTUiLCJhOTYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJhMTAxIiwiYTEwMiIsImExMDMiLCJhMTA0IiwiYTEwNiIsImExMDciLCJhMTA4IiwiYTExMiIsImExMTEiLCJhMTEwIiwiYTEwOSIsImExMjAiLCJhMTIxIiwiYTEyMiIsImExMjMiLCJhMTI0IiwiYTEyNSIsImExMjYiLCJhMTI3IiwiYTEyOCIsImExMjkiLCJhMTMwIiwiYTEzMSIsImExMzIiLCJhMTMzIiwiYTEzNCIsImExMzUiLCJhMTM2IiwiYTEzNyIsImExMzgiLCJhMTM5IiwiYTE0MCIsImExNDEiLCJhMTQyIiwiYTE0MyIsImExNDQiLCJhMTQ1IiwiYTE0NiIsImExNDciLCJhMTQ4IiwiYTE0OSIsImExNTAiLCJhMTUxIiwiYTE1MiIsImExNTMiLCJhMTU0IiwiYTE1NSIsImExNTYiLCJhMTU3IiwiYTE1OCIsImExNTkiLCJhMTYwIiwiYTE2MSIsImExNjMiLCJhMTY0IiwiYTE5NiIsImExNjUiLCJhMTkyIiwiYTE2NiIsImExNjciLCJhMTY4IiwiYTE2OSIsImExNzAiLCJhMTcxIiwiYTE3MiIsImExNzMiLCJhMTYyIiwiYTE3NCIsImExNzUiLCJhMTc2IiwiYTE3NyIsImExNzgiLCJhMTc5IiwiYTE5MyIsImExODAiLCJhMTk5IiwiYTE4MSIsImEyMDAiLCJhMTgyIiwiIiwiYTIwMSIsImExODMiLCJhMTg0IiwiYTE5NyIsImExODUiLCJhMTk0IiwiYTE5OCIsImExODYiLCJhMTk1IiwiYTE4NyIsImExODgiLCJhMTg5IiwiYTE5MCIsImExOTEiLCIiXTt0LlphcGZEaW5nYmF0c0VuY29kaW5nPWN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9dC5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc9dC5Gb250RmxhZ3M9dm9pZCAwLHQuZ2V0Rm9udFR5cGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3N3aXRjaChlKXtjYXNlIlR5cGUxIjpyZXR1cm4gcj9uLkZvbnRUeXBlLlRZUEUxU1RBTkRBUkQ6IlR5cGUxQyI9PT10P24uRm9udFR5cGUuVFlQRTFDOm4uRm9udFR5cGUuVFlQRTE7Y2FzZSJDSURGb250VHlwZTAiOnJldHVybiJDSURGb250VHlwZTBDIj09PXQ/bi5Gb250VHlwZS5DSURGT05UVFlQRTBDOm4uRm9udFR5cGUuQ0lERk9OVFRZUEUwO2Nhc2UiT3BlblR5cGUiOnJldHVybiBuLkZvbnRUeXBlLk9QRU5UWVBFO2Nhc2UiVHJ1ZVR5cGUiOnJldHVybiBuLkZvbnRUeXBlLlRSVUVUWVBFO2Nhc2UiQ0lERm9udFR5cGUyIjpyZXR1cm4gbi5Gb250VHlwZS5DSURGT05UVFlQRTI7Y2FzZSJNTVR5cGUxIjpyZXR1cm4gbi5Gb250VHlwZS5NTVRZUEUxO2Nhc2UiVHlwZTAiOnJldHVybiBuLkZvbnRUeXBlLlRZUEUwO2RlZmF1bHQ6cmV0dXJuIG4uRm9udFR5cGUuVU5LTk9XTn19LHQubm9ybWFsaXplRm9udE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWyxfXS9nLCItIikucmVwbGFjZSgvXHMvZywiIil9LHQucmVjb3ZlckdseXBoTmFtZT1jLHQudHlwZTFGb250R2x5cGhNYXBwaW5nPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixvLHUsbD1PYmplY3QuY3JlYXRlKG51bGwpLGY9ISEoZS5mbGFncyZzLlN5bWJvbGljKTtpZihlLmlzSW50ZXJuYWxGb250KWZvcih1PXQsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7ZWxzZSBpZihlLmJhc2VFbmNvZGluZ05hbWUpZm9yKHU9KDAsYS5nZXRFbmNvZGluZykoZS5iYXNlRW5jb2RpbmdOYW1lKSxvPTA7bzx1Lmxlbmd0aDtvKyspbj1yLmluZGV4T2YodVtvXSksbFtvXT1uPj0wP246MDtlbHNlIGlmKGYpZm9yKG8gaW4gdClsW29dPXRbb107ZWxzZSBmb3IodT1hLlN0YW5kYXJkRW5jb2Rpbmcsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7dmFyIGgsZD1lLmRpZmZlcmVuY2VzO2lmKGQpZm9yKG8gaW4gZCl7dmFyIHA9ZFtvXTtpZigtMT09PShuPXIuaW5kZXhPZihwKSkpe2h8fChoPSgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSk7dmFyIGc9YyhwLGgpO2chPT1wJiYobj1yLmluZGV4T2YoZykpfWxbb109bj49MD9uOjB9cmV0dXJuIGx9O3ZhciBuPXIoMiksYT1yKDE2NiksaT1yKDE2OCksbz1yKDE2OSk7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9ITA7dmFyIHM9e0ZpeGVkUGl0Y2g6MSxTZXJpZjoyLFN5bWJvbGljOjQsU2NyaXB0OjgsTm9uc3ltYm9saWM6MzIsSXRhbGljOjY0LEFsbENhcDo2NTUzNixTbWFsbENhcDoxMzEwNzIsRm9yY2VCb2xkOjI2MjE0NH07ZnVuY3Rpb24gYyhlLHQpe2lmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIGU7dmFyIHI9KDAsby5nZXRVbmljb2RlRm9yR2x5cGgpKGUsdCk7aWYoLTEhPT1yKWZvcih2YXIgYSBpbiB0KWlmKHRbYV09PT1yKXJldHVybiBhO3JldHVybigwLG4uaW5mbykoIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSksZX10LkZvbnRGbGFncz1zLHQuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXX0sKGUsdCxyKT0+e3Iucih0KSxyLmQodCx7Z2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlOigpPT5pLGdldEdseXBoc1VuaWNvZGU6KCk9PmF9KTt2YXIgbj1yKDEzNSk7Y29uc3QgYT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIkEiLDY1LCJBRSIsMTk4LCJBRWFjdXRlIiw1MDgsIkFFbWFjcm9uIiw0ODIsIkFFc21hbGwiLDYzNDYyLCJBYWN1dGUiLDE5MywiQWFjdXRlc21hbGwiLDYzNDU3LCJBYnJldmUiLDI1OCwiQWJyZXZlYWN1dGUiLDc4NTQsIkFicmV2ZWN5cmlsbGljIiwxMjMyLCJBYnJldmVkb3RiZWxvdyIsNzg2MiwiQWJyZXZlZ3JhdmUiLDc4NTYsIkFicmV2ZWhvb2thYm92ZSIsNzg1OCwiQWJyZXZldGlsZGUiLDc4NjAsIkFjYXJvbiIsNDYxLCJBY2lyY2xlIiw5Mzk4LCJBY2lyY3VtZmxleCIsMTk0LCJBY2lyY3VtZmxleGFjdXRlIiw3ODQ0LCJBY2lyY3VtZmxleGRvdGJlbG93Iiw3ODUyLCJBY2lyY3VtZmxleGdyYXZlIiw3ODQ2LCJBY2lyY3VtZmxleGhvb2thYm92ZSIsNzg0OCwiQWNpcmN1bWZsZXhzbWFsbCIsNjM0NTgsIkFjaXJjdW1mbGV4dGlsZGUiLDc4NTAsIkFjdXRlIiw2MzE3NywiQWN1dGVzbWFsbCIsNjM0MTIsIkFjeXJpbGxpYyIsMTA0MCwiQWRibGdyYXZlIiw1MTIsIkFkaWVyZXNpcyIsMTk2LCJBZGllcmVzaXNjeXJpbGxpYyIsMTIzNCwiQWRpZXJlc2lzbWFjcm9uIiw0NzgsIkFkaWVyZXNpc3NtYWxsIiw2MzQ2MCwiQWRvdGJlbG93Iiw3ODQwLCJBZG90bWFjcm9uIiw0ODAsIkFncmF2ZSIsMTkyLCJBZ3JhdmVzbWFsbCIsNjM0NTYsIkFob29rYWJvdmUiLDc4NDIsIkFpZWN5cmlsbGljIiwxMjM2LCJBaW52ZXJ0ZWRicmV2ZSIsNTE0LCJBbHBoYSIsOTEzLCJBbHBoYXRvbm9zIiw5MDIsIkFtYWNyb24iLDI1NiwiQW1vbm9zcGFjZSIsNjUzMTMsIkFvZ29uZWsiLDI2MCwiQXJpbmciLDE5NywiQXJpbmdhY3V0ZSIsNTA2LCJBcmluZ2JlbG93Iiw3NjgwLCJBcmluZ3NtYWxsIiw2MzQ2MSwiQXNtYWxsIiw2MzMyOSwiQXRpbGRlIiwxOTUsIkF0aWxkZXNtYWxsIiw2MzQ1OSwiQXliYXJtZW5pYW4iLDEzMjksIkIiLDY2LCJCY2lyY2xlIiw5Mzk5LCJCZG90YWNjZW50Iiw3NjgyLCJCZG90YmVsb3ciLDc2ODQsIkJlY3lyaWxsaWMiLDEwNDEsIkJlbmFybWVuaWFuIiwxMzMwLCJCZXRhIiw5MTQsIkJob29rIiwzODUsIkJsaW5lYmVsb3ciLDc2ODYsIkJtb25vc3BhY2UiLDY1MzE0LCJCcmV2ZXNtYWxsIiw2MzIyMCwiQnNtYWxsIiw2MzMzMCwiQnRvcGJhciIsMzg2LCJDIiw2NywiQ2Fhcm1lbmlhbiIsMTM0MiwiQ2FjdXRlIiwyNjIsIkNhcm9uIiw2MzE3OCwiQ2Fyb25zbWFsbCIsNjMyMjEsIkNjYXJvbiIsMjY4LCJDY2VkaWxsYSIsMTk5LCJDY2VkaWxsYWFjdXRlIiw3Njg4LCJDY2VkaWxsYXNtYWxsIiw2MzQ2MywiQ2NpcmNsZSIsOTQwMCwiQ2NpcmN1bWZsZXgiLDI2NCwiQ2RvdCIsMjY2LCJDZG90YWNjZW50IiwyNjYsIkNlZGlsbGFzbWFsbCIsNjM0MTYsIkNoYWFybWVuaWFuIiwxMzUzLCJDaGVhYmtoYXNpYW5jeXJpbGxpYyIsMTIxMiwiQ2hlY3lyaWxsaWMiLDEwNjMsIkNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljIiwxMjE0LCJDaGVkZXNjZW5kZXJjeXJpbGxpYyIsMTIwNiwiQ2hlZGllcmVzaXNjeXJpbGxpYyIsMTI2OCwiQ2hlaGFybWVuaWFuIiwxMzQ3LCJDaGVraGFrYXNzaWFuY3lyaWxsaWMiLDEyMjcsIkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMiLDEyMDgsIkNoaSIsOTM1LCJDaG9vayIsMzkxLCJDaXJjdW1mbGV4c21hbGwiLDYzMjIyLCJDbW9ub3NwYWNlIiw2NTMxNSwiQ29hcm1lbmlhbiIsMTM2MSwiQ3NtYWxsIiw2MzMzMSwiRCIsNjgsIkRaIiw0OTcsIkRaY2Fyb24iLDQ1MiwiRGFhcm1lbmlhbiIsMTMzMiwiRGFmcmljYW4iLDM5MywiRGNhcm9uIiwyNzAsIkRjZWRpbGxhIiw3Njk2LCJEY2lyY2xlIiw5NDAxLCJEY2lyY3VtZmxleGJlbG93Iiw3Njk4LCJEY3JvYXQiLDI3MiwiRGRvdGFjY2VudCIsNzY5MCwiRGRvdGJlbG93Iiw3NjkyLCJEZWN5cmlsbGljIiwxMDQ0LCJEZWljb3B0aWMiLDEwMDYsIkRlbHRhIiw4NzEwLCJEZWx0YWdyZWVrIiw5MTYsIkRob29rIiwzOTQsIkRpZXJlc2lzIiw2MzE3OSwiRGllcmVzaXNBY3V0ZSIsNjMxODAsIkRpZXJlc2lzR3JhdmUiLDYzMTgxLCJEaWVyZXNpc3NtYWxsIiw2MzQwMCwiRGlnYW1tYWdyZWVrIiw5ODgsIkRqZWN5cmlsbGljIiwxMDI2LCJEbGluZWJlbG93Iiw3Njk0LCJEbW9ub3NwYWNlIiw2NTMxNiwiRG90YWNjZW50c21hbGwiLDYzMjIzLCJEc2xhc2giLDI3MiwiRHNtYWxsIiw2MzMzMiwiRHRvcGJhciIsMzk1LCJEeiIsNDk4LCJEemNhcm9uIiw0NTMsIkR6ZWFia2hhc2lhbmN5cmlsbGljIiwxMjQ4LCJEemVjeXJpbGxpYyIsMTAyOSwiRHpoZWN5cmlsbGljIiwxMDM5LCJFIiw2OSwiRWFjdXRlIiwyMDEsIkVhY3V0ZXNtYWxsIiw2MzQ2NSwiRWJyZXZlIiwyNzYsIkVjYXJvbiIsMjgyLCJFY2VkaWxsYWJyZXZlIiw3NzA4LCJFY2hhcm1lbmlhbiIsMTMzMywiRWNpcmNsZSIsOTQwMiwiRWNpcmN1bWZsZXgiLDIwMiwiRWNpcmN1bWZsZXhhY3V0ZSIsNzg3MCwiRWNpcmN1bWZsZXhiZWxvdyIsNzcwNCwiRWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg3OCwiRWNpcmN1bWZsZXhncmF2ZSIsNzg3MiwiRWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NzQsIkVjaXJjdW1mbGV4c21hbGwiLDYzNDY2LCJFY2lyY3VtZmxleHRpbGRlIiw3ODc2LCJFY3lyaWxsaWMiLDEwMjgsIkVkYmxncmF2ZSIsNTE2LCJFZGllcmVzaXMiLDIwMywiRWRpZXJlc2lzc21hbGwiLDYzNDY3LCJFZG90IiwyNzgsIkVkb3RhY2NlbnQiLDI3OCwiRWRvdGJlbG93Iiw3ODY0LCJFZmN5cmlsbGljIiwxMDYwLCJFZ3JhdmUiLDIwMCwiRWdyYXZlc21hbGwiLDYzNDY0LCJFaGFybWVuaWFuIiwxMzM1LCJFaG9va2Fib3ZlIiw3ODY2LCJFaWdodHJvbWFuIiw4NTUxLCJFaW52ZXJ0ZWRicmV2ZSIsNTE4LCJFaW90aWZpZWRjeXJpbGxpYyIsMTEyNCwiRWxjeXJpbGxpYyIsMTA1MSwiRWxldmVucm9tYW4iLDg1NTQsIkVtYWNyb24iLDI3NCwiRW1hY3JvbmFjdXRlIiw3NzAyLCJFbWFjcm9uZ3JhdmUiLDc3MDAsIkVtY3lyaWxsaWMiLDEwNTIsIkVtb25vc3BhY2UiLDY1MzE3LCJFbmN5cmlsbGljIiwxMDUzLCJFbmRlc2NlbmRlcmN5cmlsbGljIiwxMTg2LCJFbmciLDMzMCwiRW5naGVjeXJpbGxpYyIsMTE4OCwiRW5ob29rY3lyaWxsaWMiLDEyMjMsIkVvZ29uZWsiLDI4MCwiRW9wZW4iLDQwMCwiRXBzaWxvbiIsOTE3LCJFcHNpbG9udG9ub3MiLDkwNCwiRXJjeXJpbGxpYyIsMTA1NiwiRXJldmVyc2VkIiwzOTgsIkVyZXZlcnNlZGN5cmlsbGljIiwxMDY5LCJFc2N5cmlsbGljIiwxMDU3LCJFc2Rlc2NlbmRlcmN5cmlsbGljIiwxMTk0LCJFc2giLDQyNSwiRXNtYWxsIiw2MzMzMywiRXRhIiw5MTksIkV0YXJtZW5pYW4iLDEzMzYsIkV0YXRvbm9zIiw5MDUsIkV0aCIsMjA4LCJFdGhzbWFsbCIsNjM0NzIsIkV0aWxkZSIsNzg2OCwiRXRpbGRlYmVsb3ciLDc3MDYsIkV1cm8iLDgzNjQsIkV6aCIsNDM5LCJFemhjYXJvbiIsNDk0LCJFemhyZXZlcnNlZCIsNDQwLCJGIiw3MCwiRmNpcmNsZSIsOTQwMywiRmRvdGFjY2VudCIsNzcxMCwiRmVoYXJtZW5pYW4iLDEzNjYsIkZlaWNvcHRpYyIsOTk2LCJGaG9vayIsNDAxLCJGaXRhY3lyaWxsaWMiLDExMzgsIkZpdmVyb21hbiIsODU0OCwiRm1vbm9zcGFjZSIsNjUzMTgsIkZvdXJyb21hbiIsODU0NywiRnNtYWxsIiw2MzMzNCwiRyIsNzEsIkdCc3F1YXJlIiwxMzE5MSwiR2FjdXRlIiw1MDAsIkdhbW1hIiw5MTUsIkdhbW1hYWZyaWNhbiIsNDA0LCJHYW5naWFjb3B0aWMiLDEwMDIsIkdicmV2ZSIsMjg2LCJHY2Fyb24iLDQ4NiwiR2NlZGlsbGEiLDI5MCwiR2NpcmNsZSIsOTQwNCwiR2NpcmN1bWZsZXgiLDI4NCwiR2NvbW1hYWNjZW50IiwyOTAsIkdkb3QiLDI4OCwiR2RvdGFjY2VudCIsMjg4LCJHZWN5cmlsbGljIiwxMDQzLCJHaGFkYXJtZW5pYW4iLDEzNDYsIkdoZW1pZGRsZWhvb2tjeXJpbGxpYyIsMTE3MiwiR2hlc3Ryb2tlY3lyaWxsaWMiLDExNzAsIkdoZXVwdHVybmN5cmlsbGljIiwxMTY4LCJHaG9vayIsNDAzLCJHaW1hcm1lbmlhbiIsMTMzMSwiR2plY3lyaWxsaWMiLDEwMjcsIkdtYWNyb24iLDc3MTIsIkdtb25vc3BhY2UiLDY1MzE5LCJHcmF2ZSIsNjMxODIsIkdyYXZlc21hbGwiLDYzMzI4LCJHc21hbGwiLDYzMzM1LCJHc21hbGxob29rIiw2NjcsIkdzdHJva2UiLDQ4NCwiSCIsNzIsIkgxODUzMyIsOTY3OSwiSDE4NTQzIiw5NjQyLCJIMTg1NTEiLDk2NDMsIkgyMjA3MyIsOTYzMywiSFBzcXVhcmUiLDEzMjU5LCJIYWFia2hhc2lhbmN5cmlsbGljIiwxMTkyLCJIYWRlc2NlbmRlcmN5cmlsbGljIiwxMjAyLCJIYXJkc2lnbmN5cmlsbGljIiwxMDY2LCJIYmFyIiwyOTQsIkhicmV2ZWJlbG93Iiw3NzIyLCJIY2VkaWxsYSIsNzcyMCwiSGNpcmNsZSIsOTQwNSwiSGNpcmN1bWZsZXgiLDI5MiwiSGRpZXJlc2lzIiw3NzE4LCJIZG90YWNjZW50Iiw3NzE0LCJIZG90YmVsb3ciLDc3MTYsIkhtb25vc3BhY2UiLDY1MzIwLCJIb2FybWVuaWFuIiwxMzQ0LCJIb3JpY29wdGljIiwxZTMsIkhzbWFsbCIsNjMzMzYsIkh1bmdhcnVtbGF1dCIsNjMxODMsIkh1bmdhcnVtbGF1dHNtYWxsIiw2MzIyNCwiSHpzcXVhcmUiLDEzMjAwLCJJIiw3MywiSUFjeXJpbGxpYyIsMTA3MSwiSUoiLDMwNiwiSVVjeXJpbGxpYyIsMTA3MCwiSWFjdXRlIiwyMDUsIklhY3V0ZXNtYWxsIiw2MzQ2OSwiSWJyZXZlIiwzMDAsIkljYXJvbiIsNDYzLCJJY2lyY2xlIiw5NDA2LCJJY2lyY3VtZmxleCIsMjA2LCJJY2lyY3VtZmxleHNtYWxsIiw2MzQ3MCwiSWN5cmlsbGljIiwxMDMwLCJJZGJsZ3JhdmUiLDUyMCwiSWRpZXJlc2lzIiwyMDcsIklkaWVyZXNpc2FjdXRlIiw3NzI2LCJJZGllcmVzaXNjeXJpbGxpYyIsMTI1MiwiSWRpZXJlc2lzc21hbGwiLDYzNDcxLCJJZG90IiwzMDQsIklkb3RhY2NlbnQiLDMwNCwiSWRvdGJlbG93Iiw3ODgyLCJJZWJyZXZlY3lyaWxsaWMiLDEyMzgsIkllY3lyaWxsaWMiLDEwNDUsIklmcmFrdHVyIiw4NDY1LCJJZ3JhdmUiLDIwNCwiSWdyYXZlc21hbGwiLDYzNDY4LCJJaG9va2Fib3ZlIiw3ODgwLCJJaWN5cmlsbGljIiwxMDQ4LCJJaW52ZXJ0ZWRicmV2ZSIsNTIyLCJJaXNob3J0Y3lyaWxsaWMiLDEwNDksIkltYWNyb24iLDI5OCwiSW1hY3JvbmN5cmlsbGljIiwxMjUwLCJJbW9ub3NwYWNlIiw2NTMyMSwiSW5pYXJtZW5pYW4iLDEzMzksIklvY3lyaWxsaWMiLDEwMjUsIklvZ29uZWsiLDMwMiwiSW90YSIsOTIxLCJJb3RhYWZyaWNhbiIsNDA2LCJJb3RhZGllcmVzaXMiLDkzOCwiSW90YXRvbm9zIiw5MDYsIklzbWFsbCIsNjMzMzcsIklzdHJva2UiLDQwNywiSXRpbGRlIiwyOTYsIkl0aWxkZWJlbG93Iiw3NzI0LCJJemhpdHNhY3lyaWxsaWMiLDExNDAsIkl6aGl0c2FkYmxncmF2ZWN5cmlsbGljIiwxMTQyLCJKIiw3NCwiSmFhcm1lbmlhbiIsMTM0NSwiSmNpcmNsZSIsOTQwNywiSmNpcmN1bWZsZXgiLDMwOCwiSmVjeXJpbGxpYyIsMTAzMiwiSmhlaGFybWVuaWFuIiwxMzU1LCJKbW9ub3NwYWNlIiw2NTMyMiwiSnNtYWxsIiw2MzMzOCwiSyIsNzUsIktCc3F1YXJlIiwxMzE4OSwiS0tzcXVhcmUiLDEzMjYxLCJLYWJhc2hraXJjeXJpbGxpYyIsMTE4NCwiS2FjdXRlIiw3NzI4LCJLYWN5cmlsbGljIiwxMDUwLCJLYWRlc2NlbmRlcmN5cmlsbGljIiwxMTc4LCJLYWhvb2tjeXJpbGxpYyIsMTIxOSwiS2FwcGEiLDkyMiwiS2FzdHJva2VjeXJpbGxpYyIsMTE4MiwiS2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMTgwLCJLY2Fyb24iLDQ4OCwiS2NlZGlsbGEiLDMxMCwiS2NpcmNsZSIsOTQwOCwiS2NvbW1hYWNjZW50IiwzMTAsIktkb3RiZWxvdyIsNzczMCwiS2VoYXJtZW5pYW4iLDEzNjQsIktlbmFybWVuaWFuIiwxMzQzLCJLaGFjeXJpbGxpYyIsMTA2MSwiS2hlaWNvcHRpYyIsOTk4LCJLaG9vayIsNDA4LCJLamVjeXJpbGxpYyIsMTAzNiwiS2xpbmViZWxvdyIsNzczMiwiS21vbm9zcGFjZSIsNjUzMjMsIktvcHBhY3lyaWxsaWMiLDExNTIsIktvcHBhZ3JlZWsiLDk5MCwiS3NpY3lyaWxsaWMiLDExMzQsIktzbWFsbCIsNjMzMzksIkwiLDc2LCJMSiIsNDU1LCJMTCIsNjMxNjcsIkxhY3V0ZSIsMzEzLCJMYW1iZGEiLDkyMywiTGNhcm9uIiwzMTcsIkxjZWRpbGxhIiwzMTUsIkxjaXJjbGUiLDk0MDksIkxjaXJjdW1mbGV4YmVsb3ciLDc3NDAsIkxjb21tYWFjY2VudCIsMzE1LCJMZG90IiwzMTksIkxkb3RhY2NlbnQiLDMxOSwiTGRvdGJlbG93Iiw3NzM0LCJMZG90YmVsb3dtYWNyb24iLDc3MzYsIkxpd25hcm1lbmlhbiIsMTM0MCwiTGoiLDQ1NiwiTGplY3lyaWxsaWMiLDEwMzMsIkxsaW5lYmVsb3ciLDc3MzgsIkxtb25vc3BhY2UiLDY1MzI0LCJMc2xhc2giLDMyMSwiTHNsYXNoc21hbGwiLDYzMjI1LCJMc21hbGwiLDYzMzQwLCJNIiw3NywiTUJzcXVhcmUiLDEzMTkwLCJNYWNyb24iLDYzMTg0LCJNYWNyb25zbWFsbCIsNjM0MDcsIk1hY3V0ZSIsNzc0MiwiTWNpcmNsZSIsOTQxMCwiTWRvdGFjY2VudCIsNzc0NCwiTWRvdGJlbG93Iiw3NzQ2LCJNZW5hcm1lbmlhbiIsMTM0OCwiTW1vbm9zcGFjZSIsNjUzMjUsIk1zbWFsbCIsNjMzNDEsIk10dXJuZWQiLDQxMiwiTXUiLDkyNCwiTiIsNzgsIk5KIiw0NTgsIk5hY3V0ZSIsMzIzLCJOY2Fyb24iLDMyNywiTmNlZGlsbGEiLDMyNSwiTmNpcmNsZSIsOTQxMSwiTmNpcmN1bWZsZXhiZWxvdyIsNzc1NCwiTmNvbW1hYWNjZW50IiwzMjUsIk5kb3RhY2NlbnQiLDc3NDgsIk5kb3RiZWxvdyIsNzc1MCwiTmhvb2tsZWZ0Iiw0MTMsIk5pbmVyb21hbiIsODU1MiwiTmoiLDQ1OSwiTmplY3lyaWxsaWMiLDEwMzQsIk5saW5lYmVsb3ciLDc3NTIsIk5tb25vc3BhY2UiLDY1MzI2LCJOb3dhcm1lbmlhbiIsMTM1MCwiTnNtYWxsIiw2MzM0MiwiTnRpbGRlIiwyMDksIk50aWxkZXNtYWxsIiw2MzQ3MywiTnUiLDkyNSwiTyIsNzksIk9FIiwzMzgsIk9Fc21hbGwiLDYzMjI2LCJPYWN1dGUiLDIxMSwiT2FjdXRlc21hbGwiLDYzNDc1LCJPYmFycmVkY3lyaWxsaWMiLDEyNTYsIk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljIiwxMjU4LCJPYnJldmUiLDMzNCwiT2Nhcm9uIiw0NjUsIk9jZW50ZXJlZHRpbGRlIiw0MTUsIk9jaXJjbGUiLDk0MTIsIk9jaXJjdW1mbGV4IiwyMTIsIk9jaXJjdW1mbGV4YWN1dGUiLDc4ODgsIk9jaXJjdW1mbGV4ZG90YmVsb3ciLDc4OTYsIk9jaXJjdW1mbGV4Z3JhdmUiLDc4OTAsIk9jaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODkyLCJPY2lyY3VtZmxleHNtYWxsIiw2MzQ3NiwiT2NpcmN1bWZsZXh0aWxkZSIsNzg5NCwiT2N5cmlsbGljIiwxMDU0LCJPZGJsYWN1dGUiLDMzNiwiT2RibGdyYXZlIiw1MjQsIk9kaWVyZXNpcyIsMjE0LCJPZGllcmVzaXNjeXJpbGxpYyIsMTI1NCwiT2RpZXJlc2lzc21hbGwiLDYzNDc4LCJPZG90YmVsb3ciLDc4ODQsIk9nb25la3NtYWxsIiw2MzIyNywiT2dyYXZlIiwyMTAsIk9ncmF2ZXNtYWxsIiw2MzQ3NCwiT2hhcm1lbmlhbiIsMTM2NSwiT2htIiw4NDg2LCJPaG9va2Fib3ZlIiw3ODg2LCJPaG9ybiIsNDE2LCJPaG9ybmFjdXRlIiw3ODk4LCJPaG9ybmRvdGJlbG93Iiw3OTA2LCJPaG9ybmdyYXZlIiw3OTAwLCJPaG9ybmhvb2thYm92ZSIsNzkwMiwiT2hvcm50aWxkZSIsNzkwNCwiT2h1bmdhcnVtbGF1dCIsMzM2LCJPaSIsNDE4LCJPaW52ZXJ0ZWRicmV2ZSIsNTI2LCJPbWFjcm9uIiwzMzIsIk9tYWNyb25hY3V0ZSIsNzc2MiwiT21hY3JvbmdyYXZlIiw3NzYwLCJPbWVnYSIsODQ4NiwiT21lZ2FjeXJpbGxpYyIsMTEyMCwiT21lZ2FncmVlayIsOTM3LCJPbWVnYXJvdW5kY3lyaWxsaWMiLDExNDYsIk9tZWdhdGl0bG9jeXJpbGxpYyIsMTE0OCwiT21lZ2F0b25vcyIsOTExLCJPbWljcm9uIiw5MjcsIk9taWNyb250b25vcyIsOTA4LCJPbW9ub3NwYWNlIiw2NTMyNywiT25lcm9tYW4iLDg1NDQsIk9vZ29uZWsiLDQ5MCwiT29nb25la21hY3JvbiIsNDkyLCJPb3BlbiIsMzkwLCJPc2xhc2giLDIxNiwiT3NsYXNoYWN1dGUiLDUxMCwiT3NsYXNoc21hbGwiLDYzNDgwLCJPc21hbGwiLDYzMzQzLCJPc3Ryb2tlYWN1dGUiLDUxMCwiT3RjeXJpbGxpYyIsMTE1MCwiT3RpbGRlIiwyMTMsIk90aWxkZWFjdXRlIiw3NzU2LCJPdGlsZGVkaWVyZXNpcyIsNzc1OCwiT3RpbGRlc21hbGwiLDYzNDc3LCJQIiw4MCwiUGFjdXRlIiw3NzY0LCJQY2lyY2xlIiw5NDEzLCJQZG90YWNjZW50Iiw3NzY2LCJQZWN5cmlsbGljIiwxMDU1LCJQZWhhcm1lbmlhbiIsMTM1NCwiUGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTAsIlBoaSIsOTM0LCJQaG9vayIsNDIwLCJQaSIsOTI4LCJQaXdyYXJtZW5pYW4iLDEzNjMsIlBtb25vc3BhY2UiLDY1MzI4LCJQc2kiLDkzNiwiUHNpY3lyaWxsaWMiLDExMzYsIlBzbWFsbCIsNjMzNDQsIlEiLDgxLCJRY2lyY2xlIiw5NDE0LCJRbW9ub3NwYWNlIiw2NTMyOSwiUXNtYWxsIiw2MzM0NSwiUiIsODIsIlJhYXJtZW5pYW4iLDEzNTYsIlJhY3V0ZSIsMzQwLCJSY2Fyb24iLDM0NCwiUmNlZGlsbGEiLDM0MiwiUmNpcmNsZSIsOTQxNSwiUmNvbW1hYWNjZW50IiwzNDIsIlJkYmxncmF2ZSIsNTI4LCJSZG90YWNjZW50Iiw3NzY4LCJSZG90YmVsb3ciLDc3NzAsIlJkb3RiZWxvd21hY3JvbiIsNzc3MiwiUmVoYXJtZW5pYW4iLDEzNjAsIlJmcmFrdHVyIiw4NDc2LCJSaG8iLDkyOSwiUmluZ3NtYWxsIiw2MzIyOCwiUmludmVydGVkYnJldmUiLDUzMCwiUmxpbmViZWxvdyIsNzc3NCwiUm1vbm9zcGFjZSIsNjUzMzAsIlJzbWFsbCIsNjMzNDYsIlJzbWFsbGludmVydGVkIiw2NDEsIlJzbWFsbGludmVydGVkc3VwZXJpb3IiLDY5NCwiUyIsODMsIlNGMDEwMDAwIiw5NDg0LCJTRjAyMDAwMCIsOTQ5MiwiU0YwMzAwMDAiLDk0ODgsIlNGMDQwMDAwIiw5NDk2LCJTRjA1MDAwMCIsOTUzMiwiU0YwNjAwMDAiLDk1MTYsIlNGMDcwMDAwIiw5NTI0LCJTRjA4MDAwMCIsOTUwMCwiU0YwOTAwMDAiLDk1MDgsIlNGMTAwMDAwIiw5NDcyLCJTRjExMDAwMCIsOTQ3NCwiU0YxOTAwMDAiLDk1NjksIlNGMjAwMDAwIiw5NTcwLCJTRjIxMDAwMCIsOTU1OCwiU0YyMjAwMDAiLDk1NTcsIlNGMjMwMDAwIiw5NTcxLCJTRjI0MDAwMCIsOTU1MywiU0YyNTAwMDAiLDk1NTksIlNGMjYwMDAwIiw5NTY1LCJTRjI3MDAwMCIsOTU2NCwiU0YyODAwMDAiLDk1NjMsIlNGMzYwMDAwIiw5NTY2LCJTRjM3MDAwMCIsOTU2NywiU0YzODAwMDAiLDk1NjIsIlNGMzkwMDAwIiw5NTU2LCJTRjQwMDAwMCIsOTU3NywiU0Y0MTAwMDAiLDk1NzQsIlNGNDIwMDAwIiw5NTY4LCJTRjQzMDAwMCIsOTU1MiwiU0Y0NDAwMDAiLDk1ODAsIlNGNDUwMDAwIiw5NTc1LCJTRjQ2MDAwMCIsOTU3NiwiU0Y0NzAwMDAiLDk1NzIsIlNGNDgwMDAwIiw5NTczLCJTRjQ5MDAwMCIsOTU2MSwiU0Y1MDAwMDAiLDk1NjAsIlNGNTEwMDAwIiw5NTU0LCJTRjUyMDAwMCIsOTU1NSwiU0Y1MzAwMDAiLDk1NzksIlNGNTQwMDAwIiw5NTc4LCJTYWN1dGUiLDM0NiwiU2FjdXRlZG90YWNjZW50Iiw3NzgwLCJTYW1waWdyZWVrIiw5OTIsIlNjYXJvbiIsMzUyLCJTY2Fyb25kb3RhY2NlbnQiLDc3ODIsIlNjYXJvbnNtYWxsIiw2MzIyOSwiU2NlZGlsbGEiLDM1MCwiU2Nod2EiLDM5OSwiU2Nod2FjeXJpbGxpYyIsMTI0MCwiU2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQyLCJTY2lyY2xlIiw5NDE2LCJTY2lyY3VtZmxleCIsMzQ4LCJTY29tbWFhY2NlbnQiLDUzNiwiU2RvdGFjY2VudCIsNzc3NiwiU2RvdGJlbG93Iiw3Nzc4LCJTZG90YmVsb3dkb3RhY2NlbnQiLDc3ODQsIlNlaGFybWVuaWFuIiwxMzU3LCJTZXZlbnJvbWFuIiw4NTUwLCJTaGFhcm1lbmlhbiIsMTM1MSwiU2hhY3lyaWxsaWMiLDEwNjQsIlNoY2hhY3lyaWxsaWMiLDEwNjUsIlNoZWljb3B0aWMiLDk5NCwiU2hoYWN5cmlsbGljIiwxMjEwLCJTaGltYWNvcHRpYyIsMTAwNCwiU2lnbWEiLDkzMSwiU2l4cm9tYW4iLDg1NDksIlNtb25vc3BhY2UiLDY1MzMxLCJTb2Z0c2lnbmN5cmlsbGljIiwxMDY4LCJTc21hbGwiLDYzMzQ3LCJTdGlnbWFncmVlayIsOTg2LCJUIiw4NCwiVGF1Iiw5MzIsIlRiYXIiLDM1OCwiVGNhcm9uIiwzNTYsIlRjZWRpbGxhIiwzNTQsIlRjaXJjbGUiLDk0MTcsIlRjaXJjdW1mbGV4YmVsb3ciLDc3OTIsIlRjb21tYWFjY2VudCIsMzU0LCJUZG90YWNjZW50Iiw3Nzg2LCJUZG90YmVsb3ciLDc3ODgsIlRlY3lyaWxsaWMiLDEwNTgsIlRlZGVzY2VuZGVyY3lyaWxsaWMiLDExOTYsIlRlbnJvbWFuIiw4NTUzLCJUZXRzZWN5cmlsbGljIiwxMjA0LCJUaGV0YSIsOTIwLCJUaG9vayIsNDI4LCJUaG9ybiIsMjIyLCJUaG9ybnNtYWxsIiw2MzQ4NiwiVGhyZWVyb21hbiIsODU0NiwiVGlsZGVzbWFsbCIsNjMyMzAsIlRpd25hcm1lbmlhbiIsMTM1OSwiVGxpbmViZWxvdyIsNzc5MCwiVG1vbm9zcGFjZSIsNjUzMzIsIlRvYXJtZW5pYW4iLDEzMzcsIlRvbmVmaXZlIiw0NDQsIlRvbmVzaXgiLDM4OCwiVG9uZXR3byIsNDIzLCJUcmV0cm9mbGV4aG9vayIsNDMwLCJUc2VjeXJpbGxpYyIsMTA2MiwiVHNoZWN5cmlsbGljIiwxMDM1LCJUc21hbGwiLDYzMzQ4LCJUd2VsdmVyb21hbiIsODU1NSwiVHdvcm9tYW4iLDg1NDUsIlUiLDg1LCJVYWN1dGUiLDIxOCwiVWFjdXRlc21hbGwiLDYzNDgyLCJVYnJldmUiLDM2NCwiVWNhcm9uIiw0NjcsIlVjaXJjbGUiLDk0MTgsIlVjaXJjdW1mbGV4IiwyMTksIlVjaXJjdW1mbGV4YmVsb3ciLDc3OTgsIlVjaXJjdW1mbGV4c21hbGwiLDYzNDgzLCJVY3lyaWxsaWMiLDEwNTksIlVkYmxhY3V0ZSIsMzY4LCJVZGJsZ3JhdmUiLDUzMiwiVWRpZXJlc2lzIiwyMjAsIlVkaWVyZXNpc2FjdXRlIiw0NzEsIlVkaWVyZXNpc2JlbG93Iiw3Nzk0LCJVZGllcmVzaXNjYXJvbiIsNDczLCJVZGllcmVzaXNjeXJpbGxpYyIsMTI2NCwiVWRpZXJlc2lzZ3JhdmUiLDQ3NSwiVWRpZXJlc2lzbWFjcm9uIiw0NjksIlVkaWVyZXNpc3NtYWxsIiw2MzQ4NCwiVWRvdGJlbG93Iiw3OTA4LCJVZ3JhdmUiLDIxNywiVWdyYXZlc21hbGwiLDYzNDgxLCJVaG9va2Fib3ZlIiw3OTEwLCJVaG9ybiIsNDMxLCJVaG9ybmFjdXRlIiw3OTEyLCJVaG9ybmRvdGJlbG93Iiw3OTIwLCJVaG9ybmdyYXZlIiw3OTE0LCJVaG9ybmhvb2thYm92ZSIsNzkxNiwiVWhvcm50aWxkZSIsNzkxOCwiVWh1bmdhcnVtbGF1dCIsMzY4LCJVaHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjYsIlVpbnZlcnRlZGJyZXZlIiw1MzQsIlVrY3lyaWxsaWMiLDExNDQsIlVtYWNyb24iLDM2MiwiVW1hY3JvbmN5cmlsbGljIiwxMjYyLCJVbWFjcm9uZGllcmVzaXMiLDc4MDIsIlVtb25vc3BhY2UiLDY1MzMzLCJVb2dvbmVrIiwzNzAsIlVwc2lsb24iLDkzMywiVXBzaWxvbjEiLDk3OCwiVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrIiw5NzksIlVwc2lsb25hZnJpY2FuIiw0MzMsIlVwc2lsb25kaWVyZXNpcyIsOTM5LCJVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsiLDk4MCwiVXBzaWxvbmhvb2tzeW1ib2wiLDk3OCwiVXBzaWxvbnRvbm9zIiw5MTAsIlVyaW5nIiwzNjYsIlVzaG9ydGN5cmlsbGljIiwxMDM4LCJVc21hbGwiLDYzMzQ5LCJVc3RyYWlnaHRjeXJpbGxpYyIsMTE5OCwiVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMiLDEyMDAsIlV0aWxkZSIsMzYwLCJVdGlsZGVhY3V0ZSIsNzgwMCwiVXRpbGRlYmVsb3ciLDc3OTYsIlYiLDg2LCJWY2lyY2xlIiw5NDE5LCJWZG90YmVsb3ciLDc4MDYsIlZlY3lyaWxsaWMiLDEwNDIsIlZld2FybWVuaWFuIiwxMzU4LCJWaG9vayIsNDM0LCJWbW9ub3NwYWNlIiw2NTMzNCwiVm9hcm1lbmlhbiIsMTM1MiwiVnNtYWxsIiw2MzM1MCwiVnRpbGRlIiw3ODA0LCJXIiw4NywiV2FjdXRlIiw3ODEwLCJXY2lyY2xlIiw5NDIwLCJXY2lyY3VtZmxleCIsMzcyLCJXZGllcmVzaXMiLDc4MTIsIldkb3RhY2NlbnQiLDc4MTQsIldkb3RiZWxvdyIsNzgxNiwiV2dyYXZlIiw3ODA4LCJXbW9ub3NwYWNlIiw2NTMzNSwiV3NtYWxsIiw2MzM1MSwiWCIsODgsIlhjaXJjbGUiLDk0MjEsIlhkaWVyZXNpcyIsNzgyMCwiWGRvdGFjY2VudCIsNzgxOCwiWGVoYXJtZW5pYW4iLDEzNDEsIlhpIiw5MjYsIlhtb25vc3BhY2UiLDY1MzM2LCJYc21hbGwiLDYzMzUyLCJZIiw4OSwiWWFjdXRlIiwyMjEsIllhY3V0ZXNtYWxsIiw2MzQ4NSwiWWF0Y3lyaWxsaWMiLDExMjIsIlljaXJjbGUiLDk0MjIsIlljaXJjdW1mbGV4IiwzNzQsIllkaWVyZXNpcyIsMzc2LCJZZGllcmVzaXNzbWFsbCIsNjM0ODcsIllkb3RhY2NlbnQiLDc4MjIsIllkb3RiZWxvdyIsNzkyNCwiWWVyaWN5cmlsbGljIiwxMDY3LCJZZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MiwiWWdyYXZlIiw3OTIyLCJZaG9vayIsNDM1LCJZaG9va2Fib3ZlIiw3OTI2LCJZaWFybWVuaWFuIiwxMzQ5LCJZaWN5cmlsbGljIiwxMDMxLCJZaXduYXJtZW5pYW4iLDEzNjIsIlltb25vc3BhY2UiLDY1MzM3LCJZc21hbGwiLDYzMzUzLCJZdGlsZGUiLDc5MjgsIll1c2JpZ2N5cmlsbGljIiwxMTMwLCJZdXNiaWdpb3RpZmllZGN5cmlsbGljIiwxMTMyLCJZdXNsaXR0bGVjeXJpbGxpYyIsMTEyNiwiWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyIsMTEyOCwiWiIsOTAsIlphYXJtZW5pYW4iLDEzMzQsIlphY3V0ZSIsMzc3LCJaY2Fyb24iLDM4MSwiWmNhcm9uc21hbGwiLDYzMjMxLCJaY2lyY2xlIiw5NDIzLCJaY2lyY3VtZmxleCIsNzgyNCwiWmRvdCIsMzc5LCJaZG90YWNjZW50IiwzNzksIlpkb3RiZWxvdyIsNzgyNiwiWmVjeXJpbGxpYyIsMTA0NywiWmVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NiwiWmVkaWVyZXNpc2N5cmlsbGljIiwxMjQ2LCJaZXRhIiw5MTgsIlpoZWFybWVuaWFuIiwxMzM4LCJaaGVicmV2ZWN5cmlsbGljIiwxMjE3LCJaaGVjeXJpbGxpYyIsMTA0NiwiWmhlZGVzY2VuZGVyY3lyaWxsaWMiLDExNzQsIlpoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDQsIlpsaW5lYmVsb3ciLDc4MjgsIlptb25vc3BhY2UiLDY1MzM4LCJac21hbGwiLDYzMzU0LCJac3Ryb2tlIiw0MzcsImEiLDk3LCJhYWJlbmdhbGkiLDI0MzgsImFhY3V0ZSIsMjI1LCJhYWRldmEiLDIzMTAsImFhZ3VqYXJhdGkiLDI2OTQsImFhZ3VybXVraGkiLDI1NjYsImFhbWF0cmFndXJtdWtoaSIsMjYyMiwiYWFydXNxdWFyZSIsMTMwNTksImFhdm93ZWxzaWduYmVuZ2FsaSIsMjQ5NCwiYWF2b3dlbHNpZ25kZXZhIiwyMzY2LCJhYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzUwLCJhYmJyZXZpYXRpb25tYXJrYXJtZW5pYW4iLDEzNzUsImFiYnJldmlhdGlvbnNpZ25kZXZhIiwyNDE2LCJhYmVuZ2FsaSIsMjQzNywiYWJvcG9tb2ZvIiwxMjU3MCwiYWJyZXZlIiwyNTksImFicmV2ZWFjdXRlIiw3ODU1LCJhYnJldmVjeXJpbGxpYyIsMTIzMywiYWJyZXZlZG90YmVsb3ciLDc4NjMsImFicmV2ZWdyYXZlIiw3ODU3LCJhYnJldmVob29rYWJvdmUiLDc4NTksImFicmV2ZXRpbGRlIiw3ODYxLCJhY2Fyb24iLDQ2MiwiYWNpcmNsZSIsOTQyNCwiYWNpcmN1bWZsZXgiLDIyNiwiYWNpcmN1bWZsZXhhY3V0ZSIsNzg0NSwiYWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg1MywiYWNpcmN1bWZsZXhncmF2ZSIsNzg0NywiYWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NDksImFjaXJjdW1mbGV4dGlsZGUiLDc4NTEsImFjdXRlIiwxODAsImFjdXRlYmVsb3djbWIiLDc5MSwiYWN1dGVjbWIiLDc2OSwiYWN1dGVjb21iIiw3NjksImFjdXRlZGV2YSIsMjM4OCwiYWN1dGVsb3dtb2QiLDcxOSwiYWN1dGV0b25lY21iIiw4MzMsImFjeXJpbGxpYyIsMTA3MiwiYWRibGdyYXZlIiw1MTMsImFkZGFrZ3VybXVraGkiLDI2NzMsImFkZXZhIiwyMzA5LCJhZGllcmVzaXMiLDIyOCwiYWRpZXJlc2lzY3lyaWxsaWMiLDEyMzUsImFkaWVyZXNpc21hY3JvbiIsNDc5LCJhZG90YmVsb3ciLDc4NDEsImFkb3RtYWNyb24iLDQ4MSwiYWUiLDIzMCwiYWVhY3V0ZSIsNTA5LCJhZWtvcmVhbiIsMTI2MjQsImFlbWFjcm9uIiw0ODMsImFmaWkwMDIwOCIsODIxMywiYWZpaTA4OTQxIiw4MzU2LCJhZmlpMTAwMTciLDEwNDAsImFmaWkxMDAxOCIsMTA0MSwiYWZpaTEwMDE5IiwxMDQyLCJhZmlpMTAwMjAiLDEwNDMsImFmaWkxMDAyMSIsMTA0NCwiYWZpaTEwMDIyIiwxMDQ1LCJhZmlpMTAwMjMiLDEwMjUsImFmaWkxMDAyNCIsMTA0NiwiYWZpaTEwMDI1IiwxMDQ3LCJhZmlpMTAwMjYiLDEwNDgsImFmaWkxMDAyNyIsMTA0OSwiYWZpaTEwMDI4IiwxMDUwLCJhZmlpMTAwMjkiLDEwNTEsImFmaWkxMDAzMCIsMTA1MiwiYWZpaTEwMDMxIiwxMDUzLCJhZmlpMTAwMzIiLDEwNTQsImFmaWkxMDAzMyIsMTA1NSwiYWZpaTEwMDM0IiwxMDU2LCJhZmlpMTAwMzUiLDEwNTcsImFmaWkxMDAzNiIsMTA1OCwiYWZpaTEwMDM3IiwxMDU5LCJhZmlpMTAwMzgiLDEwNjAsImFmaWkxMDAzOSIsMTA2MSwiYWZpaTEwMDQwIiwxMDYyLCJhZmlpMTAwNDEiLDEwNjMsImFmaWkxMDA0MiIsMTA2NCwiYWZpaTEwMDQzIiwxMDY1LCJhZmlpMTAwNDQiLDEwNjYsImFmaWkxMDA0NSIsMTA2NywiYWZpaTEwMDQ2IiwxMDY4LCJhZmlpMTAwNDciLDEwNjksImFmaWkxMDA0OCIsMTA3MCwiYWZpaTEwMDQ5IiwxMDcxLCJhZmlpMTAwNTAiLDExNjgsImFmaWkxMDA1MSIsMTAyNiwiYWZpaTEwMDUyIiwxMDI3LCJhZmlpMTAwNTMiLDEwMjgsImFmaWkxMDA1NCIsMTAyOSwiYWZpaTEwMDU1IiwxMDMwLCJhZmlpMTAwNTYiLDEwMzEsImFmaWkxMDA1NyIsMTAzMiwiYWZpaTEwMDU4IiwxMDMzLCJhZmlpMTAwNTkiLDEwMzQsImFmaWkxMDA2MCIsMTAzNSwiYWZpaTEwMDYxIiwxMDM2LCJhZmlpMTAwNjIiLDEwMzgsImFmaWkxMDA2MyIsNjMxNzIsImFmaWkxMDA2NCIsNjMxNzMsImFmaWkxMDA2NSIsMTA3MiwiYWZpaTEwMDY2IiwxMDczLCJhZmlpMTAwNjciLDEwNzQsImFmaWkxMDA2OCIsMTA3NSwiYWZpaTEwMDY5IiwxMDc2LCJhZmlpMTAwNzAiLDEwNzcsImFmaWkxMDA3MSIsMTEwNSwiYWZpaTEwMDcyIiwxMDc4LCJhZmlpMTAwNzMiLDEwNzksImFmaWkxMDA3NCIsMTA4MCwiYWZpaTEwMDc1IiwxMDgxLCJhZmlpMTAwNzYiLDEwODIsImFmaWkxMDA3NyIsMTA4MywiYWZpaTEwMDc4IiwxMDg0LCJhZmlpMTAwNzkiLDEwODUsImFmaWkxMDA4MCIsMTA4NiwiYWZpaTEwMDgxIiwxMDg3LCJhZmlpMTAwODIiLDEwODgsImFmaWkxMDA4MyIsMTA4OSwiYWZpaTEwMDg0IiwxMDkwLCJhZmlpMTAwODUiLDEwOTEsImFmaWkxMDA4NiIsMTA5MiwiYWZpaTEwMDg3IiwxMDkzLCJhZmlpMTAwODgiLDEwOTQsImFmaWkxMDA4OSIsMTA5NSwiYWZpaTEwMDkwIiwxMDk2LCJhZmlpMTAwOTEiLDEwOTcsImFmaWkxMDA5MiIsMTA5OCwiYWZpaTEwMDkzIiwxMDk5LCJhZmlpMTAwOTQiLDExMDAsImFmaWkxMDA5NSIsMTEwMSwiYWZpaTEwMDk2IiwxMTAyLCJhZmlpMTAwOTciLDExMDMsImFmaWkxMDA5OCIsMTE2OSwiYWZpaTEwMDk5IiwxMTA2LCJhZmlpMTAxMDAiLDExMDcsImFmaWkxMDEwMSIsMTEwOCwiYWZpaTEwMTAyIiwxMTA5LCJhZmlpMTAxMDMiLDExMTAsImFmaWkxMDEwNCIsMTExMSwiYWZpaTEwMTA1IiwxMTEyLCJhZmlpMTAxMDYiLDExMTMsImFmaWkxMDEwNyIsMTExNCwiYWZpaTEwMTA4IiwxMTE1LCJhZmlpMTAxMDkiLDExMTYsImFmaWkxMDExMCIsMTExOCwiYWZpaTEwMTQ1IiwxMDM5LCJhZmlpMTAxNDYiLDExMjIsImFmaWkxMDE0NyIsMTEzOCwiYWZpaTEwMTQ4IiwxMTQwLCJhZmlpMTAxOTIiLDYzMTc0LCJhZmlpMTAxOTMiLDExMTksImFmaWkxMDE5NCIsMTEyMywiYWZpaTEwMTk1IiwxMTM5LCJhZmlpMTAxOTYiLDExNDEsImFmaWkxMDgzMSIsNjMxNzUsImFmaWkxMDgzMiIsNjMxNzYsImFmaWkxMDg0NiIsMTI0MSwiYWZpaTI5OSIsODIwNiwiYWZpaTMwMCIsODIwNywiYWZpaTMwMSIsODIwNSwiYWZpaTU3MzgxIiwxNjQyLCJhZmlpNTczODgiLDE1NDgsImFmaWk1NzM5MiIsMTYzMiwiYWZpaTU3MzkzIiwxNjMzLCJhZmlpNTczOTQiLDE2MzQsImFmaWk1NzM5NSIsMTYzNSwiYWZpaTU3Mzk2IiwxNjM2LCJhZmlpNTczOTciLDE2MzcsImFmaWk1NzM5OCIsMTYzOCwiYWZpaTU3Mzk5IiwxNjM5LCJhZmlpNTc0MDAiLDE2NDAsImFmaWk1NzQwMSIsMTY0MSwiYWZpaTU3NDAzIiwxNTYzLCJhZmlpNTc0MDciLDE1NjcsImFmaWk1NzQwOSIsMTU2OSwiYWZpaTU3NDEwIiwxNTcwLCJhZmlpNTc0MTEiLDE1NzEsImFmaWk1NzQxMiIsMTU3MiwiYWZpaTU3NDEzIiwxNTczLCJhZmlpNTc0MTQiLDE1NzQsImFmaWk1NzQxNSIsMTU3NSwiYWZpaTU3NDE2IiwxNTc2LCJhZmlpNTc0MTciLDE1NzcsImFmaWk1NzQxOCIsMTU3OCwiYWZpaTU3NDE5IiwxNTc5LCJhZmlpNTc0MjAiLDE1ODAsImFmaWk1NzQyMSIsMTU4MSwiYWZpaTU3NDIyIiwxNTgyLCJhZmlpNTc0MjMiLDE1ODMsImFmaWk1NzQyNCIsMTU4NCwiYWZpaTU3NDI1IiwxNTg1LCJhZmlpNTc0MjYiLDE1ODYsImFmaWk1NzQyNyIsMTU4NywiYWZpaTU3NDI4IiwxNTg4LCJhZmlpNTc0MjkiLDE1ODksImFmaWk1NzQzMCIsMTU5MCwiYWZpaTU3NDMxIiwxNTkxLCJhZmlpNTc0MzIiLDE1OTIsImFmaWk1NzQzMyIsMTU5MywiYWZpaTU3NDM0IiwxNTk0LCJhZmlpNTc0NDAiLDE2MDAsImFmaWk1NzQ0MSIsMTYwMSwiYWZpaTU3NDQyIiwxNjAyLCJhZmlpNTc0NDMiLDE2MDMsImFmaWk1NzQ0NCIsMTYwNCwiYWZpaTU3NDQ1IiwxNjA1LCJhZmlpNTc0NDYiLDE2MDYsImFmaWk1NzQ0OCIsMTYwOCwiYWZpaTU3NDQ5IiwxNjA5LCJhZmlpNTc0NTAiLDE2MTAsImFmaWk1NzQ1MSIsMTYxMSwiYWZpaTU3NDUyIiwxNjEyLCJhZmlpNTc0NTMiLDE2MTMsImFmaWk1NzQ1NCIsMTYxNCwiYWZpaTU3NDU1IiwxNjE1LCJhZmlpNTc0NTYiLDE2MTYsImFmaWk1NzQ1NyIsMTYxNywiYWZpaTU3NDU4IiwxNjE4LCJhZmlpNTc0NzAiLDE2MDcsImFmaWk1NzUwNSIsMTcwMCwiYWZpaTU3NTA2IiwxNjYyLCJhZmlpNTc1MDciLDE2NzAsImFmaWk1NzUwOCIsMTY4OCwiYWZpaTU3NTA5IiwxNzExLCJhZmlpNTc1MTEiLDE2NTcsImFmaWk1NzUxMiIsMTY3MiwiYWZpaTU3NTEzIiwxNjgxLCJhZmlpNTc1MTQiLDE3MjIsImFmaWk1NzUxOSIsMTc0NiwiYWZpaTU3NTM0IiwxNzQ5LCJhZmlpNTc2MzYiLDgzNjIsImFmaWk1NzY0NSIsMTQ3MCwiYWZpaTU3NjU4IiwxNDc1LCJhZmlpNTc2NjQiLDE0ODgsImFmaWk1NzY2NSIsMTQ4OSwiYWZpaTU3NjY2IiwxNDkwLCJhZmlpNTc2NjciLDE0OTEsImFmaWk1NzY2OCIsMTQ5MiwiYWZpaTU3NjY5IiwxNDkzLCJhZmlpNTc2NzAiLDE0OTQsImFmaWk1NzY3MSIsMTQ5NSwiYWZpaTU3NjcyIiwxNDk2LCJhZmlpNTc2NzMiLDE0OTcsImFmaWk1NzY3NCIsMTQ5OCwiYWZpaTU3Njc1IiwxNDk5LCJhZmlpNTc2NzYiLDE1MDAsImFmaWk1NzY3NyIsMTUwMSwiYWZpaTU3Njc4IiwxNTAyLCJhZmlpNTc2NzkiLDE1MDMsImFmaWk1NzY4MCIsMTUwNCwiYWZpaTU3NjgxIiwxNTA1LCJhZmlpNTc2ODIiLDE1MDYsImFmaWk1NzY4MyIsMTUwNywiYWZpaTU3Njg0IiwxNTA4LCJhZmlpNTc2ODUiLDE1MDksImFmaWk1NzY4NiIsMTUxMCwiYWZpaTU3Njg3IiwxNTExLCJhZmlpNTc2ODgiLDE1MTIsImFmaWk1NzY4OSIsMTUxMywiYWZpaTU3NjkwIiwxNTE0LCJhZmlpNTc2OTQiLDY0Mjk4LCJhZmlpNTc2OTUiLDY0Mjk5LCJhZmlpNTc3MDAiLDY0MzMxLCJhZmlpNTc3MDUiLDY0Mjg3LCJhZmlpNTc3MTYiLDE1MjAsImFmaWk1NzcxNyIsMTUyMSwiYWZpaTU3NzE4IiwxNTIyLCJhZmlpNTc3MjMiLDY0MzA5LCJhZmlpNTc3OTMiLDE0NjAsImFmaWk1Nzc5NCIsMTQ2MSwiYWZpaTU3Nzk1IiwxNDYyLCJhZmlpNTc3OTYiLDE0NjcsImFmaWk1Nzc5NyIsMTQ2NCwiYWZpaTU3Nzk4IiwxNDYzLCJhZmlpNTc3OTkiLDE0NTYsImFmaWk1NzgwMCIsMTQ1OCwiYWZpaTU3ODAxIiwxNDU3LCJhZmlpNTc4MDIiLDE0NTksImFmaWk1NzgwMyIsMTQ3NCwiYWZpaTU3ODA0IiwxNDczLCJhZmlpNTc4MDYiLDE0NjUsImFmaWk1NzgwNyIsMTQ2OCwiYWZpaTU3ODM5IiwxNDY5LCJhZmlpNTc4NDEiLDE0NzEsImFmaWk1Nzg0MiIsMTQ3MiwiYWZpaTU3OTI5Iiw3MDAsImFmaWk2MTI0OCIsODQ1MywiYWZpaTYxMjg5Iiw4NDY3LCJhZmlpNjEzNTIiLDg0NzAsImFmaWk2MTU3MyIsODIzNiwiYWZpaTYxNTc0Iiw4MjM3LCJhZmlpNjE1NzUiLDgyMzgsImFmaWk2MTY2NCIsODIwNCwiYWZpaTYzMTY3IiwxNjQ1LCJhZmlpNjQ5MzciLDcwMSwiYWdyYXZlIiwyMjQsImFndWphcmF0aSIsMjY5MywiYWd1cm11a2hpIiwyNTY1LCJhaGlyYWdhbmEiLDEyMzU0LCJhaG9va2Fib3ZlIiw3ODQzLCJhaWJlbmdhbGkiLDI0NDgsImFpYm9wb21vZm8iLDEyNTc0LCJhaWRldmEiLDIzMjAsImFpZWN5cmlsbGljIiwxMjM3LCJhaWd1amFyYXRpIiwyNzA0LCJhaWd1cm11a2hpIiwyNTc2LCJhaW1hdHJhZ3VybXVraGkiLDI2MzIsImFpbmFyYWJpYyIsMTU5MywiYWluZmluYWxhcmFiaWMiLDY1MjI2LCJhaW5pbml0aWFsYXJhYmljIiw2NTIyNywiYWlubWVkaWFsYXJhYmljIiw2NTIyOCwiYWludmVydGVkYnJldmUiLDUxNSwiYWl2b3dlbHNpZ25iZW5nYWxpIiwyNTA0LCJhaXZvd2Vsc2lnbmRldmEiLDIzNzYsImFpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjAsImFrYXRha2FuYSIsMTI0NTAsImFrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTMsImFrb3JlYW4iLDEyNjIzLCJhbGVmIiwxNDg4LCJhbGVmYXJhYmljIiwxNTc1LCJhbGVmZGFnZXNoaGVicmV3Iiw2NDMwNCwiYWxlZmZpbmFsYXJhYmljIiw2NTE2NiwiYWxlZmhhbXphYWJvdmVhcmFiaWMiLDE1NzEsImFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU2LCJhbGVmaGFtemFiZWxvd2FyYWJpYyIsMTU3MywiYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUxNjAsImFsZWZoZWJyZXciLDE0ODgsImFsZWZsYW1lZGhlYnJldyIsNjQzMzUsImFsZWZtYWRkYWFib3ZlYXJhYmljIiwxNTcwLCJhbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTE1NCwiYWxlZm1ha3N1cmFhcmFiaWMiLDE2MDksImFsZWZtYWtzdXJhZmluYWxhcmFiaWMiLDY1MjY0LCJhbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMiLDY1MjY3LCJhbGVmbWFrc3VyYW1lZGlhbGFyYWJpYyIsNjUyNjgsImFsZWZwYXRhaGhlYnJldyIsNjQzMDIsImFsZWZxYW1hdHNoZWJyZXciLDY0MzAzLCJhbGVwaCIsODUwMSwiYWxsZXF1YWwiLDg3ODAsImFscGhhIiw5NDUsImFscGhhdG9ub3MiLDk0MCwiYW1hY3JvbiIsMjU3LCJhbW9ub3NwYWNlIiw2NTM0NSwiYW1wZXJzYW5kIiwzOCwiYW1wZXJzYW5kbW9ub3NwYWNlIiw2NTI4NiwiYW1wZXJzYW5kc21hbGwiLDYzMjcwLCJhbXNxdWFyZSIsMTMyNTAsImFuYm9wb21vZm8iLDEyNTc4LCJhbmdib3BvbW9mbyIsMTI1ODAsImFuZ2JyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nYnJhY2tldHJpZ2h0IiwxMjI5NywiYW5na2hhbmtodXRoYWkiLDM2NzQsImFuZ2xlIiw4NzM2LCJhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NywiYW5nbGVicmFja2V0cmlnaHQiLDEyMjk3LCJhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4OCwiYW5nbGVsZWZ0Iiw5MDAxLCJhbmdsZXJpZ2h0Iiw5MDAyLCJhbmdzdHJvbSIsODQ5MSwiYW5vdGVsZWlhIiw5MDMsImFudWRhdHRhZGV2YSIsMjM4NiwiYW51c3ZhcmFiZW5nYWxpIiwyNDM0LCJhbnVzdmFyYWRldmEiLDIzMDYsImFudXN2YXJhZ3VqYXJhdGkiLDI2OTAsImFvZ29uZWsiLDI2MSwiYXBhYXRvc3F1YXJlIiwxMzA1NiwiYXBhcmVuIiw5MzcyLCJhcG9zdHJvcGhlYXJtZW5pYW4iLDEzNzAsImFwb3N0cm9waGVtb2QiLDcwMCwiYXBwbGUiLDYzNzQzLCJhcHByb2FjaGVzIiw4Nzg0LCJhcHByb3hlcXVhbCIsODc3NiwiYXBwcm94ZXF1YWxvcmltYWdlIiw4Nzg2LCJhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3NzMsImFyYWVhZWtvcmVhbiIsMTI2ODYsImFyYWVha29yZWFuIiwxMjY4NSwiYXJjIiw4OTc4LCJhcmlnaHRoYWxmcmluZyIsNzgzNCwiYXJpbmciLDIyOSwiYXJpbmdhY3V0ZSIsNTA3LCJhcmluZ2JlbG93Iiw3NjgxLCJhcnJvd2JvdGgiLDg1OTYsImFycm93ZGFzaGRvd24iLDg2NzUsImFycm93ZGFzaGxlZnQiLDg2NzIsImFycm93ZGFzaHJpZ2h0Iiw4Njc0LCJhcnJvd2Rhc2h1cCIsODY3MywiYXJyb3dkYmxib3RoIiw4NjYwLCJhcnJvd2RibGRvd24iLDg2NTksImFycm93ZGJsbGVmdCIsODY1NiwiYXJyb3dkYmxyaWdodCIsODY1OCwiYXJyb3dkYmx1cCIsODY1NywiYXJyb3dkb3duIiw4NTk1LCJhcnJvd2Rvd25sZWZ0Iiw4NjAxLCJhcnJvd2Rvd25yaWdodCIsODYwMCwiYXJyb3dkb3dud2hpdGUiLDg2ODEsImFycm93aGVhZGRvd25tb2QiLDcwOSwiYXJyb3doZWFkbGVmdG1vZCIsNzA2LCJhcnJvd2hlYWRyaWdodG1vZCIsNzA3LCJhcnJvd2hlYWR1cG1vZCIsNzA4LCJhcnJvd2hvcml6ZXgiLDYzNzE5LCJhcnJvd2xlZnQiLDg1OTIsImFycm93bGVmdGRibCIsODY1NiwiYXJyb3dsZWZ0ZGJsc3Ryb2tlIiw4NjUzLCJhcnJvd2xlZnRvdmVycmlnaHQiLDg2NDYsImFycm93bGVmdHdoaXRlIiw4Njc4LCJhcnJvd3JpZ2h0Iiw4NTk0LCJhcnJvd3JpZ2h0ZGJsc3Ryb2tlIiw4NjU1LCJhcnJvd3JpZ2h0aGVhdnkiLDEwMTQyLCJhcnJvd3JpZ2h0b3ZlcmxlZnQiLDg2NDQsImFycm93cmlnaHR3aGl0ZSIsODY4MCwiYXJyb3d0YWJsZWZ0Iiw4Njc2LCJhcnJvd3RhYnJpZ2h0Iiw4Njc3LCJhcnJvd3VwIiw4NTkzLCJhcnJvd3VwZG4iLDg1OTcsImFycm93dXBkbmJzZSIsODYxNiwiYXJyb3d1cGRvd25iYXNlIiw4NjE2LCJhcnJvd3VwbGVmdCIsODU5OCwiYXJyb3d1cGxlZnRvZmRvd24iLDg2NDUsImFycm93dXByaWdodCIsODU5OSwiYXJyb3d1cHdoaXRlIiw4Njc5LCJhcnJvd3ZlcnRleCIsNjM3MTgsImFzY2lpY2lyY3VtIiw5NCwiYXNjaWljaXJjdW1tb25vc3BhY2UiLDY1MzQyLCJhc2NpaXRpbGRlIiwxMjYsImFzY2lpdGlsZGVtb25vc3BhY2UiLDY1Mzc0LCJhc2NyaXB0Iiw1OTMsImFzY3JpcHR0dXJuZWQiLDU5NCwiYXNtYWxsaGlyYWdhbmEiLDEyMzUzLCJhc21hbGxrYXRha2FuYSIsMTI0NDksImFzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4MywiYXN0ZXJpc2siLDQyLCJhc3Rlcmlza2FsdG9uZWFyYWJpYyIsMTY0NSwiYXN0ZXJpc2thcmFiaWMiLDE2NDUsImFzdGVyaXNrbWF0aCIsODcyNywiYXN0ZXJpc2ttb25vc3BhY2UiLDY1MjkwLCJhc3Rlcmlza3NtYWxsIiw2NTEyMSwiYXN0ZXJpc20iLDgyNTgsImFzdXBlcmlvciIsNjMyMDksImFzeW1wdG90aWNhbGx5ZXF1YWwiLDg3NzEsImF0Iiw2NCwiYXRpbGRlIiwyMjcsImF0bW9ub3NwYWNlIiw2NTMxMiwiYXRzbWFsbCIsNjUxMzEsImF0dXJuZWQiLDU5MiwiYXViZW5nYWxpIiwyNDUyLCJhdWJvcG9tb2ZvIiwxMjU3NiwiYXVkZXZhIiwyMzI0LCJhdWd1amFyYXRpIiwyNzA4LCJhdWd1cm11a2hpIiwyNTgwLCJhdWxlbmd0aG1hcmtiZW5nYWxpIiwyNTE5LCJhdW1hdHJhZ3VybXVraGkiLDI2MzYsImF1dm93ZWxzaWduYmVuZ2FsaSIsMjUwOCwiYXV2b3dlbHNpZ25kZXZhIiwyMzgwLCJhdXZvd2Vsc2lnbmd1amFyYXRpIiwyNzY0LCJhdmFncmFoYWRldmEiLDIzNjUsImF5YmFybWVuaWFuIiwxMzc3LCJheWluIiwxNTA2LCJheWluYWx0b25laGVicmV3Iiw2NDI4OCwiYXlpbmhlYnJldyIsMTUwNiwiYiIsOTgsImJhYmVuZ2FsaSIsMjQ3NiwiYmFja3NsYXNoIiw5MiwiYmFja3NsYXNobW9ub3NwYWNlIiw2NTM0MCwiYmFkZXZhIiwyMzQ4LCJiYWd1amFyYXRpIiwyNzMyLCJiYWd1cm11a2hpIiwyNjA0LCJiYWhpcmFnYW5hIiwxMjQwMCwiYmFodHRoYWkiLDM2NDcsImJha2F0YWthbmEiLDEyNDk2LCJiYXIiLDEyNCwiYmFybW9ub3NwYWNlIiw2NTM3MiwiYmJvcG9tb2ZvIiwxMjU0OSwiYmNpcmNsZSIsOTQyNSwiYmRvdGFjY2VudCIsNzY4MywiYmRvdGJlbG93Iiw3Njg1LCJiZWFtZWRzaXh0ZWVudGhub3RlcyIsOTgzNiwiYmVjYXVzZSIsODc1NywiYmVjeXJpbGxpYyIsMTA3MywiYmVoYXJhYmljIiwxNTc2LCJiZWhmaW5hbGFyYWJpYyIsNjUxNjgsImJlaGluaXRpYWxhcmFiaWMiLDY1MTY5LCJiZWhpcmFnYW5hIiwxMjQwOSwiYmVobWVkaWFsYXJhYmljIiw2NTE3MCwiYmVobWVlbWluaXRpYWxhcmFiaWMiLDY0NjcxLCJiZWhtZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIwLCJiZWhub29uZmluYWxhcmFiaWMiLDY0NjIxLCJiZWthdGFrYW5hIiwxMjUwNSwiYmVuYXJtZW5pYW4iLDEzNzgsImJldCIsMTQ4OSwiYmV0YSIsOTQ2LCJiZXRhc3ltYm9sZ3JlZWsiLDk3NiwiYmV0ZGFnZXNoIiw2NDMwNSwiYmV0ZGFnZXNoaGVicmV3Iiw2NDMwNSwiYmV0aGVicmV3IiwxNDg5LCJiZXRyYWZlaGVicmV3Iiw2NDMzMiwiYmhhYmVuZ2FsaSIsMjQ3NywiYmhhZGV2YSIsMjM0OSwiYmhhZ3VqYXJhdGkiLDI3MzMsImJoYWd1cm11a2hpIiwyNjA1LCJiaG9vayIsNTk1LCJiaWhpcmFnYW5hIiwxMjQwMywiYmlrYXRha2FuYSIsMTI0OTksImJpbGFiaWFsY2xpY2siLDY2NCwiYmluZGlndXJtdWtoaSIsMjU2MiwiYmlydXNxdWFyZSIsMTMxMDUsImJsYWNrY2lyY2xlIiw5Njc5LCJibGFja2RpYW1vbmQiLDk2NzAsImJsYWNrZG93bnBvaW50aW5ndHJpYW5nbGUiLDk2NjAsImJsYWNrbGVmdHBvaW50aW5ncG9pbnRlciIsOTY2OCwiYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZSIsOTY2NCwiYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQiLDEyMzA0LCJibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4MywiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMwNSwiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDg0LCJibGFja2xvd2VybGVmdHRyaWFuZ2xlIiw5Njk5LCJibGFja2xvd2VycmlnaHR0cmlhbmdsZSIsOTY5OCwiYmxhY2tyZWN0YW5nbGUiLDk2NDQsImJsYWNrcmlnaHRwb2ludGluZ3BvaW50ZXIiLDk2NTgsImJsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlIiw5NjU0LCJibGFja3NtYWxsc3F1YXJlIiw5NjQyLCJibGFja3NtaWxpbmdmYWNlIiw5Nzg3LCJibGFja3NxdWFyZSIsOTYzMiwiYmxhY2tzdGFyIiw5NzMzLCJibGFja3VwcGVybGVmdHRyaWFuZ2xlIiw5NzAwLCJibGFja3VwcGVycmlnaHR0cmlhbmdsZSIsOTcwMSwiYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1MiwiYmxhY2t1cHBvaW50aW5ndHJpYW5nbGUiLDk2NTAsImJsYW5rIiw5MjUxLCJibGluZWJlbG93Iiw3Njg3LCJibG9jayIsOTYwOCwiYm1vbm9zcGFjZSIsNjUzNDYsImJvYmFpbWFpdGhhaSIsMzYxMCwiYm9oaXJhZ2FuYSIsMTI0MTIsImJva2F0YWthbmEiLDEyNTA4LCJicGFyZW4iLDkzNzMsImJxc3F1YXJlIiwxMzI1MSwiYnJhY2VleCIsNjM3MzIsImJyYWNlbGVmdCIsMTIzLCJicmFjZWxlZnRidCIsNjM3MzEsImJyYWNlbGVmdG1pZCIsNjM3MzAsImJyYWNlbGVmdG1vbm9zcGFjZSIsNjUzNzEsImJyYWNlbGVmdHNtYWxsIiw2NTExNSwiYnJhY2VsZWZ0dHAiLDYzNzI5LCJicmFjZWxlZnR2ZXJ0aWNhbCIsNjUwNzksImJyYWNlcmlnaHQiLDEyNSwiYnJhY2VyaWdodGJ0Iiw2Mzc0MiwiYnJhY2VyaWdodG1pZCIsNjM3NDEsImJyYWNlcmlnaHRtb25vc3BhY2UiLDY1MzczLCJicmFjZXJpZ2h0c21hbGwiLDY1MTE2LCJicmFjZXJpZ2h0dHAiLDYzNzQwLCJicmFjZXJpZ2h0dmVydGljYWwiLDY1MDgwLCJicmFja2V0bGVmdCIsOTEsImJyYWNrZXRsZWZ0YnQiLDYzNzI4LCJicmFja2V0bGVmdGV4Iiw2MzcyNywiYnJhY2tldGxlZnRtb25vc3BhY2UiLDY1MzM5LCJicmFja2V0bGVmdHRwIiw2MzcyNiwiYnJhY2tldHJpZ2h0Iiw5MywiYnJhY2tldHJpZ2h0YnQiLDYzNzM5LCJicmFja2V0cmlnaHRleCIsNjM3MzgsImJyYWNrZXRyaWdodG1vbm9zcGFjZSIsNjUzNDEsImJyYWNrZXRyaWdodHRwIiw2MzczNywiYnJldmUiLDcyOCwiYnJldmViZWxvd2NtYiIsODE0LCJicmV2ZWNtYiIsNzc0LCJicmV2ZWludmVydGVkYmVsb3djbWIiLDgxNSwiYnJldmVpbnZlcnRlZGNtYiIsNzg1LCJicmV2ZWludmVydGVkZG91YmxlY21iIiw4NjUsImJyaWRnZWJlbG93Y21iIiw4MTAsImJyaWRnZWludmVydGVkYmVsb3djbWIiLDgyNiwiYnJva2VuYmFyIiwxNjYsImJzdHJva2UiLDM4NCwiYnN1cGVyaW9yIiw2MzIxMCwiYnRvcGJhciIsMzg3LCJidWhpcmFnYW5hIiwxMjQwNiwiYnVrYXRha2FuYSIsMTI1MDIsImJ1bGxldCIsODIyNiwiYnVsbGV0aW52ZXJzZSIsOTY4OCwiYnVsbGV0b3BlcmF0b3IiLDg3MjksImJ1bGxzZXllIiw5Njc4LCJjIiw5OSwiY2Fhcm1lbmlhbiIsMTM5MCwiY2FiZW5nYWxpIiwyNDU4LCJjYWN1dGUiLDI2MywiY2FkZXZhIiwyMzMwLCJjYWd1amFyYXRpIiwyNzE0LCJjYWd1cm11a2hpIiwyNTg2LCJjYWxzcXVhcmUiLDEzMTkyLCJjYW5kcmFiaW5kdWJlbmdhbGkiLDI0MzMsImNhbmRyYWJpbmR1Y21iIiw3ODQsImNhbmRyYWJpbmR1ZGV2YSIsMjMwNSwiY2FuZHJhYmluZHVndWphcmF0aSIsMjY4OSwiY2Fwc2xvY2siLDg2ODIsImNhcmVvZiIsODQ1MywiY2Fyb24iLDcxMSwiY2Fyb25iZWxvd2NtYiIsODEyLCJjYXJvbmNtYiIsNzgwLCJjYXJyaWFnZXJldHVybiIsODYyOSwiY2JvcG9tb2ZvIiwxMjU2OCwiY2Nhcm9uIiwyNjksImNjZWRpbGxhIiwyMzEsImNjZWRpbGxhYWN1dGUiLDc2ODksImNjaXJjbGUiLDk0MjYsImNjaXJjdW1mbGV4IiwyNjUsImNjdXJsIiw1OTcsImNkb3QiLDI2NywiY2RvdGFjY2VudCIsMjY3LCJjZHNxdWFyZSIsMTMyNTMsImNlZGlsbGEiLDE4NCwiY2VkaWxsYWNtYiIsODA3LCJjZW50IiwxNjIsImNlbnRpZ3JhZGUiLDg0NTEsImNlbnRpbmZlcmlvciIsNjMxOTksImNlbnRtb25vc3BhY2UiLDY1NTA0LCJjZW50b2xkc3R5bGUiLDYzMzk0LCJjZW50c3VwZXJpb3IiLDYzMjAwLCJjaGFhcm1lbmlhbiIsMTQwMSwiY2hhYmVuZ2FsaSIsMjQ1OSwiY2hhZGV2YSIsMjMzMSwiY2hhZ3VqYXJhdGkiLDI3MTUsImNoYWd1cm11a2hpIiwyNTg3LCJjaGJvcG9tb2ZvIiwxMjU2NCwiY2hlYWJraGFzaWFuY3lyaWxsaWMiLDEyMTMsImNoZWNrbWFyayIsMTAwMDMsImNoZWN5cmlsbGljIiwxMDk1LCJjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyIsMTIxNSwiY2hlZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDcsImNoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNjksImNoZWhhcm1lbmlhbiIsMTM5NSwiY2hla2hha2Fzc2lhbmN5cmlsbGljIiwxMjI4LCJjaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMjA5LCJjaGkiLDk2NywiY2hpZXVjaGFjaXJjbGVrb3JlYW4iLDEyOTE5LCJjaGlldWNoYXBhcmVua29yZWFuIiwxMjgyMywiY2hpZXVjaGNpcmNsZWtvcmVhbiIsMTI5MDUsImNoaWV1Y2hrb3JlYW4iLDEyNjE4LCJjaGlldWNocGFyZW5rb3JlYW4iLDEyODA5LCJjaG9jaGFuZ3RoYWkiLDM1OTQsImNob2NoYW50aGFpIiwzNTkyLCJjaG9jaGluZ3RoYWkiLDM1OTMsImNob2Nob2V0aGFpIiwzNTk2LCJjaG9vayIsMzkyLCJjaWV1Y2FjaXJjbGVrb3JlYW4iLDEyOTE4LCJjaWV1Y2FwYXJlbmtvcmVhbiIsMTI4MjIsImNpZXVjY2lyY2xla29yZWFuIiwxMjkwNCwiY2lldWNrb3JlYW4iLDEyNjE2LCJjaWV1Y3BhcmVua29yZWFuIiwxMjgwOCwiY2lldWN1cGFyZW5rb3JlYW4iLDEyODI4LCJjaXJjbGUiLDk2NzUsImNpcmNsZWNvcHlydCIsMTY5LCJjaXJjbGVtdWx0aXBseSIsODg1NSwiY2lyY2xlb3QiLDg4NTcsImNpcmNsZXBsdXMiLDg4NTMsImNpcmNsZXBvc3RhbG1hcmsiLDEyMzQyLCJjaXJjbGV3aXRobGVmdGhhbGZibGFjayIsOTY4MCwiY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrIiw5NjgxLCJjaXJjdW1mbGV4Iiw3MTAsImNpcmN1bWZsZXhiZWxvd2NtYiIsODEzLCJjaXJjdW1mbGV4Y21iIiw3NzAsImNsZWFyIiw4OTk5LCJjbGlja2FsdmVvbGFyIiw0NTAsImNsaWNrZGVudGFsIiw0NDgsImNsaWNrbGF0ZXJhbCIsNDQ5LCJjbGlja3JldHJvZmxleCIsNDUxLCJjbHViIiw5ODI3LCJjbHVic3VpdGJsYWNrIiw5ODI3LCJjbHVic3VpdHdoaXRlIiw5ODMxLCJjbWN1YmVkc3F1YXJlIiwxMzIyMCwiY21vbm9zcGFjZSIsNjUzNDcsImNtc3F1YXJlZHNxdWFyZSIsMTMyMTYsImNvYXJtZW5pYW4iLDE0MDksImNvbG9uIiw1OCwiY29sb25tb25ldGFyeSIsODM1MywiY29sb25tb25vc3BhY2UiLDY1MzA2LCJjb2xvbnNpZ24iLDgzNTMsImNvbG9uc21hbGwiLDY1MTA5LCJjb2xvbnRyaWFuZ3VsYXJoYWxmbW9kIiw3MjEsImNvbG9udHJpYW5ndWxhcm1vZCIsNzIwLCJjb21tYSIsNDQsImNvbW1hYWJvdmVjbWIiLDc4NywiY29tbWFhYm92ZXJpZ2h0Y21iIiw3ODksImNvbW1hYWNjZW50Iiw2MzE3MSwiY29tbWFhcmFiaWMiLDE1NDgsImNvbW1hYXJtZW5pYW4iLDEzNzMsImNvbW1haW5mZXJpb3IiLDYzMjAxLCJjb21tYW1vbm9zcGFjZSIsNjUyOTIsImNvbW1hcmV2ZXJzZWRhYm92ZWNtYiIsNzg4LCJjb21tYXJldmVyc2VkbW9kIiw3MDEsImNvbW1hc21hbGwiLDY1MTA0LCJjb21tYXN1cGVyaW9yIiw2MzIwMiwiY29tbWF0dXJuZWRhYm92ZWNtYiIsNzg2LCJjb21tYXR1cm5lZG1vZCIsNjk5LCJjb21wYXNzIiw5Nzg4LCJjb25ncnVlbnQiLDg3NzMsImNvbnRvdXJpbnRlZ3JhbCIsODc1MCwiY29udHJvbCIsODk2MywiY29udHJvbEFDSyIsNiwiY29udHJvbEJFTCIsNywiY29udHJvbEJTIiw4LCJjb250cm9sQ0FOIiwyNCwiY29udHJvbENSIiwxMywiY29udHJvbERDMSIsMTcsImNvbnRyb2xEQzIiLDE4LCJjb250cm9sREMzIiwxOSwiY29udHJvbERDNCIsMjAsImNvbnRyb2xERUwiLDEyNywiY29udHJvbERMRSIsMTYsImNvbnRyb2xFTSIsMjUsImNvbnRyb2xFTlEiLDUsImNvbnRyb2xFT1QiLDQsImNvbnRyb2xFU0MiLDI3LCJjb250cm9sRVRCIiwyMywiY29udHJvbEVUWCIsMywiY29udHJvbEZGIiwxMiwiY29udHJvbEZTIiwyOCwiY29udHJvbEdTIiwyOSwiY29udHJvbEhUIiw5LCJjb250cm9sTEYiLDEwLCJjb250cm9sTkFLIiwyMSwiY29udHJvbE5VTEwiLDAsImNvbnRyb2xSUyIsMzAsImNvbnRyb2xTSSIsMTUsImNvbnRyb2xTTyIsMTQsImNvbnRyb2xTT1QiLDIsImNvbnRyb2xTVFgiLDEsImNvbnRyb2xTVUIiLDI2LCJjb250cm9sU1lOIiwyMiwiY29udHJvbFVTIiwzMSwiY29udHJvbFZUIiwxMSwiY29weXJpZ2h0IiwxNjksImNvcHlyaWdodHNhbnMiLDYzNzIxLCJjb3B5cmlnaHRzZXJpZiIsNjMxOTMsImNvcm5lcmJyYWNrZXRsZWZ0IiwxMjMwMCwiY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGgiLDY1Mzc4LCJjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4OSwiY29ybmVyYnJhY2tldHJpZ2h0IiwxMjMwMSwiY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoIiw2NTM3OSwiY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkwLCJjb3Jwb3JhdGlvbnNxdWFyZSIsMTMxODMsImNvc3F1YXJlIiwxMzI1NSwiY292ZXJrZ3NxdWFyZSIsMTMyNTQsImNwYXJlbiIsOTM3NCwiY3J1emVpcm8iLDgzNTQsImNzdHJldGNoZWQiLDY2MywiY3VybHlhbmQiLDg5MTEsImN1cmx5b3IiLDg5MTAsImN1cnJlbmN5IiwxNjQsImN5ckJyZXZlIiw2MzE4NSwiY3lyRmxleCIsNjMxODYsImN5cmJyZXZlIiw2MzE4OCwiY3lyZmxleCIsNjMxODksImQiLDEwMCwiZGFhcm1lbmlhbiIsMTM4MCwiZGFiZW5nYWxpIiwyNDcwLCJkYWRhcmFiaWMiLDE1OTAsImRhZGV2YSIsMjM0MiwiZGFkZmluYWxhcmFiaWMiLDY1MjE0LCJkYWRpbml0aWFsYXJhYmljIiw2NTIxNSwiZGFkbWVkaWFsYXJhYmljIiw2NTIxNiwiZGFnZXNoIiwxNDY4LCJkYWdlc2hoZWJyZXciLDE0NjgsImRhZ2dlciIsODIyNCwiZGFnZ2VyZGJsIiw4MjI1LCJkYWd1amFyYXRpIiwyNzI2LCJkYWd1cm11a2hpIiwyNTk4LCJkYWhpcmFnYW5hIiwxMjM4NCwiZGFrYXRha2FuYSIsMTI0ODAsImRhbGFyYWJpYyIsMTU4MywiZGFsZXQiLDE0OTEsImRhbGV0ZGFnZXNoIiw2NDMwNywiZGFsZXRkYWdlc2hoZWJyZXciLDY0MzA3LCJkYWxldGhlYnJldyIsMTQ5MSwiZGFsZmluYWxhcmFiaWMiLDY1MTk0LCJkYW1tYWFyYWJpYyIsMTYxNSwiZGFtbWFsb3dhcmFiaWMiLDE2MTUsImRhbW1hdGFuYWx0b25lYXJhYmljIiwxNjEyLCJkYW1tYXRhbmFyYWJpYyIsMTYxMiwiZGFuZGEiLDI0MDQsImRhcmdhaGVicmV3IiwxNDQ3LCJkYXJnYWxlZnRoZWJyZXciLDE0NDcsImRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1NywiZGJsR3JhdmUiLDYzMTg3LCJkYmxhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5OCwiZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NSwiZGJsYW5nbGVicmFja2V0cmlnaHQiLDEyMjk5LCJkYmxhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4NiwiZGJsYXJjaGludmVydGVkYmVsb3djbWIiLDgxMSwiZGJsYXJyb3dsZWZ0Iiw4NjYwLCJkYmxhcnJvd3JpZ2h0Iiw4NjU4LCJkYmxkYW5kYSIsMjQwNSwiZGJsZ3JhdmUiLDYzMTkwLCJkYmxncmF2ZWNtYiIsNzgzLCJkYmxpbnRlZ3JhbCIsODc0OCwiZGJsbG93bGluZSIsODIxNSwiZGJsbG93bGluZWNtYiIsODE5LCJkYmxvdmVybGluZWNtYiIsODMxLCJkYmxwcmltZW1vZCIsNjk4LCJkYmx2ZXJ0aWNhbGJhciIsODIxNCwiZGJsdmVydGljYWxsaW5lYWJvdmVjbWIiLDc4MiwiZGJvcG9tb2ZvIiwxMjU1MywiZGJzcXVhcmUiLDEzMjU2LCJkY2Fyb24iLDI3MSwiZGNlZGlsbGEiLDc2OTcsImRjaXJjbGUiLDk0MjcsImRjaXJjdW1mbGV4YmVsb3ciLDc2OTksImRjcm9hdCIsMjczLCJkZGFiZW5nYWxpIiwyNDY1LCJkZGFkZXZhIiwyMzM3LCJkZGFndWphcmF0aSIsMjcyMSwiZGRhZ3VybXVraGkiLDI1OTMsImRkYWxhcmFiaWMiLDE2NzIsImRkYWxmaW5hbGFyYWJpYyIsNjQzOTMsImRkZGhhZGV2YSIsMjM5NiwiZGRoYWJlbmdhbGkiLDI0NjYsImRkaGFkZXZhIiwyMzM4LCJkZGhhZ3VqYXJhdGkiLDI3MjIsImRkaGFndXJtdWtoaSIsMjU5NCwiZGRvdGFjY2VudCIsNzY5MSwiZGRvdGJlbG93Iiw3NjkzLCJkZWNpbWFsc2VwYXJhdG9yYXJhYmljIiwxNjQzLCJkZWNpbWFsc2VwYXJhdG9ycGVyc2lhbiIsMTY0MywiZGVjeXJpbGxpYyIsMTA3NiwiZGVncmVlIiwxNzYsImRlaGloZWJyZXciLDE0NTMsImRlaGlyYWdhbmEiLDEyMzkxLCJkZWljb3B0aWMiLDEwMDcsImRla2F0YWthbmEiLDEyNDg3LCJkZWxldGVsZWZ0Iiw5MDAzLCJkZWxldGVyaWdodCIsODk5OCwiZGVsdGEiLDk0OCwiZGVsdGF0dXJuZWQiLDM5NywiZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGkiLDI1NTIsImRlemgiLDY3NiwiZGhhYmVuZ2FsaSIsMjQ3MSwiZGhhZGV2YSIsMjM0MywiZGhhZ3VqYXJhdGkiLDI3MjcsImRoYWd1cm11a2hpIiwyNTk5LCJkaG9vayIsNTk5LCJkaWFseXRpa2F0b25vcyIsOTAxLCJkaWFseXRpa2F0b25vc2NtYiIsODM2LCJkaWFtb25kIiw5ODMwLCJkaWFtb25kc3VpdHdoaXRlIiw5ODI2LCJkaWVyZXNpcyIsMTY4LCJkaWVyZXNpc2FjdXRlIiw2MzE5MSwiZGllcmVzaXNiZWxvd2NtYiIsODA0LCJkaWVyZXNpc2NtYiIsNzc2LCJkaWVyZXNpc2dyYXZlIiw2MzE5MiwiZGllcmVzaXN0b25vcyIsOTAxLCJkaWhpcmFnYW5hIiwxMjM4NiwiZGlrYXRha2FuYSIsMTI0ODIsImRpdHRvbWFyayIsMTIyOTEsImRpdmlkZSIsMjQ3LCJkaXZpZGVzIiw4NzM5LCJkaXZpc2lvbnNsYXNoIiw4NzI1LCJkamVjeXJpbGxpYyIsMTEwNiwiZGtzaGFkZSIsOTYxOSwiZGxpbmViZWxvdyIsNzY5NSwiZGxzcXVhcmUiLDEzMjA3LCJkbWFjcm9uIiwyNzMsImRtb25vc3BhY2UiLDY1MzQ4LCJkbmJsb2NrIiw5NjA0LCJkb2NoYWRhdGhhaSIsMzU5OCwiZG9kZWt0aGFpIiwzNjA0LCJkb2hpcmFnYW5hIiwxMjM5MywiZG9rYXRha2FuYSIsMTI0ODksImRvbGxhciIsMzYsImRvbGxhcmluZmVyaW9yIiw2MzIwMywiZG9sbGFybW9ub3NwYWNlIiw2NTI4NCwiZG9sbGFyb2xkc3R5bGUiLDYzMjY4LCJkb2xsYXJzbWFsbCIsNjUxMjksImRvbGxhcnN1cGVyaW9yIiw2MzIwNCwiZG9uZyIsODM2MywiZG9ydXNxdWFyZSIsMTMwOTQsImRvdGFjY2VudCIsNzI5LCJkb3RhY2NlbnRjbWIiLDc3NSwiZG90YmVsb3djbWIiLDgwMywiZG90YmVsb3djb21iIiw4MDMsImRvdGthdGFrYW5hIiwxMjUzOSwiZG90bGVzc2kiLDMwNSwiZG90bGVzc2oiLDYzMTY2LCJkb3RsZXNzanN0cm9rZWhvb2siLDY0NCwiZG90bWF0aCIsODkwMSwiZG90dGVkY2lyY2xlIiw5Njc2LCJkb3VibGV5b2RwYXRhaCIsNjQyODcsImRvdWJsZXlvZHBhdGFoaGVicmV3Iiw2NDI4NywiZG93bnRhY2tiZWxvd2NtYiIsNzk4LCJkb3dudGFja21vZCIsNzI1LCJkcGFyZW4iLDkzNzUsImRzdXBlcmlvciIsNjMyMTEsImR0YWlsIiw1OTgsImR0b3BiYXIiLDM5NiwiZHVoaXJhZ2FuYSIsMTIzODksImR1a2F0YWthbmEiLDEyNDg1LCJkeiIsNDk5LCJkemFsdG9uZSIsNjc1LCJkemNhcm9uIiw0NTQsImR6Y3VybCIsNjc3LCJkemVhYmtoYXNpYW5jeXJpbGxpYyIsMTI0OSwiZHplY3lyaWxsaWMiLDExMDksImR6aGVjeXJpbGxpYyIsMTExOSwiZSIsMTAxLCJlYWN1dGUiLDIzMywiZWFydGgiLDk3OTMsImViZW5nYWxpIiwyNDQ3LCJlYm9wb21vZm8iLDEyNTcyLCJlYnJldmUiLDI3NywiZWNhbmRyYWRldmEiLDIzMTcsImVjYW5kcmFndWphcmF0aSIsMjcwMSwiZWNhbmRyYXZvd2Vsc2lnbmRldmEiLDIzNzMsImVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aSIsMjc1NywiZWNhcm9uIiwyODMsImVjZWRpbGxhYnJldmUiLDc3MDksImVjaGFybWVuaWFuIiwxMzgxLCJlY2h5aXduYXJtZW5pYW4iLDE0MTUsImVjaXJjbGUiLDk0MjgsImVjaXJjdW1mbGV4IiwyMzQsImVjaXJjdW1mbGV4YWN1dGUiLDc4NzEsImVjaXJjdW1mbGV4YmVsb3ciLDc3MDUsImVjaXJjdW1mbGV4ZG90YmVsb3ciLDc4NzksImVjaXJjdW1mbGV4Z3JhdmUiLDc4NzMsImVjaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODc1LCJlY2lyY3VtZmxleHRpbGRlIiw3ODc3LCJlY3lyaWxsaWMiLDExMDgsImVkYmxncmF2ZSIsNTE3LCJlZGV2YSIsMjMxOSwiZWRpZXJlc2lzIiwyMzUsImVkb3QiLDI3OSwiZWRvdGFjY2VudCIsMjc5LCJlZG90YmVsb3ciLDc4NjUsImVlZ3VybXVraGkiLDI1NzUsImVlbWF0cmFndXJtdWtoaSIsMjYzMSwiZWZjeXJpbGxpYyIsMTA5MiwiZWdyYXZlIiwyMzIsImVndWphcmF0aSIsMjcwMywiZWhhcm1lbmlhbiIsMTM4MywiZWhib3BvbW9mbyIsMTI1NzMsImVoaXJhZ2FuYSIsMTIzNjAsImVob29rYWJvdmUiLDc4NjcsImVpYm9wb21vZm8iLDEyNTc1LCJlaWdodCIsNTYsImVpZ2h0YXJhYmljIiwxNjQwLCJlaWdodGJlbmdhbGkiLDI1NDIsImVpZ2h0Y2lyY2xlIiw5MzE5LCJlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI5LCJlaWdodGRldmEiLDI0MTQsImVpZ2h0ZWVuY2lyY2xlIiw5MzI5LCJlaWdodGVlbnBhcmVuIiw5MzQ5LCJlaWdodGVlbnBlcmlvZCIsOTM2OSwiZWlnaHRndWphcmF0aSIsMjc5OCwiZWlnaHRndXJtdWtoaSIsMjY3MCwiZWlnaHRoYWNrYXJhYmljIiwxNjQwLCJlaWdodGhhbmd6aG91IiwxMjMyOCwiZWlnaHRobm90ZWJlYW1lZCIsOTgzNSwiZWlnaHRpZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOSwiZWlnaHRpbmZlcmlvciIsODMyOCwiZWlnaHRtb25vc3BhY2UiLDY1MzA0LCJlaWdodG9sZHN0eWxlIiw2MzI4OCwiZWlnaHRwYXJlbiIsOTMzOSwiZWlnaHRwZXJpb2QiLDkzNTksImVpZ2h0cGVyc2lhbiIsMTc4NCwiZWlnaHRyb21hbiIsODU2NywiZWlnaHRzdXBlcmlvciIsODMxMiwiZWlnaHR0aGFpIiwzNjcyLCJlaW52ZXJ0ZWRicmV2ZSIsNTE5LCJlaW90aWZpZWRjeXJpbGxpYyIsMTEyNSwiZWthdGFrYW5hIiwxMjQ1NiwiZWthdGFrYW5haGFsZndpZHRoIiw2NTM5NiwiZWtvbmthcmd1cm11a2hpIiwyNjc2LCJla29yZWFuIiwxMjYyOCwiZWxjeXJpbGxpYyIsMTA4MywiZWxlbWVudCIsODcxMiwiZWxldmVuY2lyY2xlIiw5MzIyLCJlbGV2ZW5wYXJlbiIsOTM0MiwiZWxldmVucGVyaW9kIiw5MzYyLCJlbGV2ZW5yb21hbiIsODU3MCwiZWxsaXBzaXMiLDgyMzAsImVsbGlwc2lzdmVydGljYWwiLDg5NDIsImVtYWNyb24iLDI3NSwiZW1hY3JvbmFjdXRlIiw3NzAzLCJlbWFjcm9uZ3JhdmUiLDc3MDEsImVtY3lyaWxsaWMiLDEwODQsImVtZGFzaCIsODIxMiwiZW1kYXNodmVydGljYWwiLDY1MDczLCJlbW9ub3NwYWNlIiw2NTM0OSwiZW1waGFzaXNtYXJrYXJtZW5pYW4iLDEzNzEsImVtcHR5c2V0Iiw4NzA5LCJlbmJvcG9tb2ZvIiwxMjU3OSwiZW5jeXJpbGxpYyIsMTA4NSwiZW5kYXNoIiw4MjExLCJlbmRhc2h2ZXJ0aWNhbCIsNjUwNzQsImVuZGVzY2VuZGVyY3lyaWxsaWMiLDExODcsImVuZyIsMzMxLCJlbmdib3BvbW9mbyIsMTI1ODEsImVuZ2hlY3lyaWxsaWMiLDExODksImVuaG9va2N5cmlsbGljIiwxMjI0LCJlbnNwYWNlIiw4MTk0LCJlb2dvbmVrIiwyODEsImVva29yZWFuIiwxMjYyNywiZW9wZW4iLDYwMywiZW9wZW5jbG9zZWQiLDY2NiwiZW9wZW5yZXZlcnNlZCIsNjA0LCJlb3BlbnJldmVyc2VkY2xvc2VkIiw2MDYsImVvcGVucmV2ZXJzZWRob29rIiw2MDUsImVwYXJlbiIsOTM3NiwiZXBzaWxvbiIsOTQ5LCJlcHNpbG9udG9ub3MiLDk0MSwiZXF1YWwiLDYxLCJlcXVhbG1vbm9zcGFjZSIsNjUzMDksImVxdWFsc21hbGwiLDY1MTI2LCJlcXVhbHN1cGVyaW9yIiw4MzE2LCJlcXVpdmFsZW5jZSIsODgwMSwiZXJib3BvbW9mbyIsMTI1ODIsImVyY3lyaWxsaWMiLDEwODgsImVyZXZlcnNlZCIsNjAwLCJlcmV2ZXJzZWRjeXJpbGxpYyIsMTEwMSwiZXNjeXJpbGxpYyIsMTA4OSwiZXNkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NSwiZXNoIiw2NDMsImVzaGN1cmwiLDY0NiwiZXNob3J0ZGV2YSIsMjMxOCwiZXNob3J0dm93ZWxzaWduZGV2YSIsMjM3NCwiZXNocmV2ZXJzZWRsb29wIiw0MjYsImVzaHNxdWF0cmV2ZXJzZWQiLDY0NSwiZXNtYWxsaGlyYWdhbmEiLDEyMzU5LCJlc21hbGxrYXRha2FuYSIsMTI0NTUsImVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NiwiZXN0aW1hdGVkIiw4NDk0LCJlc3VwZXJpb3IiLDYzMjEyLCJldGEiLDk1MSwiZXRhcm1lbmlhbiIsMTM4NCwiZXRhdG9ub3MiLDk0MiwiZXRoIiwyNDAsImV0aWxkZSIsNzg2OSwiZXRpbGRlYmVsb3ciLDc3MDcsImV0bmFodGFmb3VraGhlYnJldyIsMTQyNSwiZXRuYWh0YWZvdWtobGVmdGhlYnJldyIsMTQyNSwiZXRuYWh0YWhlYnJldyIsMTQyNSwiZXRuYWh0YWxlZnRoZWJyZXciLDE0MjUsImV0dXJuZWQiLDQ3NywiZXVrb3JlYW4iLDEyNjQxLCJldXJvIiw4MzY0LCJldm93ZWxzaWduYmVuZ2FsaSIsMjUwMywiZXZvd2Vsc2lnbmRldmEiLDIzNzUsImV2b3dlbHNpZ25ndWphcmF0aSIsMjc1OSwiZXhjbGFtIiwzMywiZXhjbGFtYXJtZW5pYW4iLDEzNzIsImV4Y2xhbWRibCIsODI1MiwiZXhjbGFtZG93biIsMTYxLCJleGNsYW1kb3duc21hbGwiLDYzMzkzLCJleGNsYW1tb25vc3BhY2UiLDY1MjgxLCJleGNsYW1zbWFsbCIsNjMyNjUsImV4aXN0ZW50aWFsIiw4NzA3LCJlemgiLDY1OCwiZXpoY2Fyb24iLDQ5NSwiZXpoY3VybCIsNjU5LCJlemhyZXZlcnNlZCIsNDQxLCJlemh0YWlsIiw0NDIsImYiLDEwMiwiZmFkZXZhIiwyMzk4LCJmYWd1cm11a2hpIiwyNjU0LCJmYWhyZW5oZWl0Iiw4NDU3LCJmYXRoYWFyYWJpYyIsMTYxNCwiZmF0aGFsb3dhcmFiaWMiLDE2MTQsImZhdGhhdGFuYXJhYmljIiwxNjExLCJmYm9wb21vZm8iLDEyNTUyLCJmY2lyY2xlIiw5NDI5LCJmZG90YWNjZW50Iiw3NzExLCJmZWhhcmFiaWMiLDE2MDEsImZlaGFybWVuaWFuIiwxNDE0LCJmZWhmaW5hbGFyYWJpYyIsNjUyMzQsImZlaGluaXRpYWxhcmFiaWMiLDY1MjM1LCJmZWhtZWRpYWxhcmFiaWMiLDY1MjM2LCJmZWljb3B0aWMiLDk5NywiZmVtYWxlIiw5NzkyLCJmZiIsNjQyNTYsImZfZiIsNjQyNTYsImZmaSIsNjQyNTksImZfZl9pIiw2NDI1OSwiZmZsIiw2NDI2MCwiZl9mX2wiLDY0MjYwLCJmaSIsNjQyNTcsImZfaSIsNjQyNTcsImZpZnRlZW5jaXJjbGUiLDkzMjYsImZpZnRlZW5wYXJlbiIsOTM0NiwiZmlmdGVlbnBlcmlvZCIsOTM2NiwiZmlndXJlZGFzaCIsODIxMCwiZmlsbGVkYm94Iiw5NjMyLCJmaWxsZWRyZWN0Iiw5NjQ0LCJmaW5hbGthZiIsMTQ5OCwiZmluYWxrYWZkYWdlc2giLDY0MzE0LCJmaW5hbGthZmRhZ2VzaGhlYnJldyIsNjQzMTQsImZpbmFsa2FmaGVicmV3IiwxNDk4LCJmaW5hbG1lbSIsMTUwMSwiZmluYWxtZW1oZWJyZXciLDE1MDEsImZpbmFsbnVuIiwxNTAzLCJmaW5hbG51bmhlYnJldyIsMTUwMywiZmluYWxwZSIsMTUwNywiZmluYWxwZWhlYnJldyIsMTUwNywiZmluYWx0c2FkaSIsMTUwOSwiZmluYWx0c2FkaWhlYnJldyIsMTUwOSwiZmlyc3R0b25lY2hpbmVzZSIsNzEzLCJmaXNoZXllIiw5NjczLCJmaXRhY3lyaWxsaWMiLDExMzksImZpdmUiLDUzLCJmaXZlYXJhYmljIiwxNjM3LCJmaXZlYmVuZ2FsaSIsMjUzOSwiZml2ZWNpcmNsZSIsOTMxNiwiZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI2LCJmaXZlZGV2YSIsMjQxMSwiZml2ZWVpZ2h0aHMiLDg1NDEsImZpdmVndWphcmF0aSIsMjc5NSwiZml2ZWd1cm11a2hpIiwyNjY3LCJmaXZlaGFja2FyYWJpYyIsMTYzNywiZml2ZWhhbmd6aG91IiwxMjMyNSwiZml2ZWlkZW9ncmFwaGljcGFyZW4iLDEyODM2LCJmaXZlaW5mZXJpb3IiLDgzMjUsImZpdmVtb25vc3BhY2UiLDY1MzAxLCJmaXZlb2xkc3R5bGUiLDYzMjg1LCJmaXZlcGFyZW4iLDkzMzYsImZpdmVwZXJpb2QiLDkzNTYsImZpdmVwZXJzaWFuIiwxNzgxLCJmaXZlcm9tYW4iLDg1NjQsImZpdmVzdXBlcmlvciIsODMwOSwiZml2ZXRoYWkiLDM2NjksImZsIiw2NDI1OCwiZl9sIiw2NDI1OCwiZmxvcmluIiw0MDIsImZtb25vc3BhY2UiLDY1MzUwLCJmbXNxdWFyZSIsMTMyMDksImZvZmFudGhhaSIsMzYxNSwiZm9mYXRoYWkiLDM2MTMsImZvbmdtYW50aGFpIiwzNjYzLCJmb3JhbGwiLDg3MDQsImZvdXIiLDUyLCJmb3VyYXJhYmljIiwxNjM2LCJmb3VyYmVuZ2FsaSIsMjUzOCwiZm91cmNpcmNsZSIsOTMxNSwiZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI1LCJmb3VyZGV2YSIsMjQxMCwiZm91cmd1amFyYXRpIiwyNzk0LCJmb3VyZ3VybXVraGkiLDI2NjYsImZvdXJoYWNrYXJhYmljIiwxNjM2LCJmb3VyaGFuZ3pob3UiLDEyMzI0LCJmb3VyaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzUsImZvdXJpbmZlcmlvciIsODMyNCwiZm91cm1vbm9zcGFjZSIsNjUzMDAsImZvdXJudW1lcmF0b3JiZW5nYWxpIiwyNTUxLCJmb3Vyb2xkc3R5bGUiLDYzMjg0LCJmb3VycGFyZW4iLDkzMzUsImZvdXJwZXJpb2QiLDkzNTUsImZvdXJwZXJzaWFuIiwxNzgwLCJmb3Vycm9tYW4iLDg1NjMsImZvdXJzdXBlcmlvciIsODMwOCwiZm91cnRlZW5jaXJjbGUiLDkzMjUsImZvdXJ0ZWVucGFyZW4iLDkzNDUsImZvdXJ0ZWVucGVyaW9kIiw5MzY1LCJmb3VydGhhaSIsMzY2OCwiZm91cnRodG9uZWNoaW5lc2UiLDcxNSwiZnBhcmVuIiw5Mzc3LCJmcmFjdGlvbiIsODI2MCwiZnJhbmMiLDgzNTUsImciLDEwMywiZ2FiZW5nYWxpIiwyNDU1LCJnYWN1dGUiLDUwMSwiZ2FkZXZhIiwyMzI3LCJnYWZhcmFiaWMiLDE3MTEsImdhZmZpbmFsYXJhYmljIiw2NDQwMywiZ2FmaW5pdGlhbGFyYWJpYyIsNjQ0MDQsImdhZm1lZGlhbGFyYWJpYyIsNjQ0MDUsImdhZ3VqYXJhdGkiLDI3MTEsImdhZ3VybXVraGkiLDI1ODMsImdhaGlyYWdhbmEiLDEyMzY0LCJnYWthdGFrYW5hIiwxMjQ2MCwiZ2FtbWEiLDk0NywiZ2FtbWFsYXRpbnNtYWxsIiw2MTEsImdhbW1hc3VwZXJpb3IiLDczNiwiZ2FuZ2lhY29wdGljIiwxMDAzLCJnYm9wb21vZm8iLDEyNTU3LCJnYnJldmUiLDI4NywiZ2Nhcm9uIiw0ODcsImdjZWRpbGxhIiwyOTEsImdjaXJjbGUiLDk0MzAsImdjaXJjdW1mbGV4IiwyODUsImdjb21tYWFjY2VudCIsMjkxLCJnZG90IiwyODksImdkb3RhY2NlbnQiLDI4OSwiZ2VjeXJpbGxpYyIsMTA3NSwiZ2VoaXJhZ2FuYSIsMTIzNzAsImdla2F0YWthbmEiLDEyNDY2LCJnZW9tZXRyaWNhbGx5ZXF1YWwiLDg3ODUsImdlcmVzaGFjY2VudGhlYnJldyIsMTQzNiwiZ2VyZXNoaGVicmV3IiwxNTIzLCJnZXJlc2htdXFkYW1oZWJyZXciLDE0MzcsImdlcm1hbmRibHMiLDIyMywiZ2Vyc2hheWltYWNjZW50aGVicmV3IiwxNDM4LCJnZXJzaGF5aW1oZWJyZXciLDE1MjQsImdldGFtYXJrIiwxMjMwNywiZ2hhYmVuZ2FsaSIsMjQ1NiwiZ2hhZGFybWVuaWFuIiwxMzk0LCJnaGFkZXZhIiwyMzI4LCJnaGFndWphcmF0aSIsMjcxMiwiZ2hhZ3VybXVraGkiLDI1ODQsImdoYWluYXJhYmljIiwxNTk0LCJnaGFpbmZpbmFsYXJhYmljIiw2NTIzMCwiZ2hhaW5pbml0aWFsYXJhYmljIiw2NTIzMSwiZ2hhaW5tZWRpYWxhcmFiaWMiLDY1MjMyLCJnaGVtaWRkbGVob29rY3lyaWxsaWMiLDExNzMsImdoZXN0cm9rZWN5cmlsbGljIiwxMTcxLCJnaGV1cHR1cm5jeXJpbGxpYyIsMTE2OSwiZ2hoYWRldmEiLDIzOTQsImdoaGFndXJtdWtoaSIsMjY1MCwiZ2hvb2siLDYwOCwiZ2h6c3F1YXJlIiwxMzIwMywiZ2loaXJhZ2FuYSIsMTIzNjYsImdpa2F0YWthbmEiLDEyNDYyLCJnaW1hcm1lbmlhbiIsMTM3OSwiZ2ltZWwiLDE0OTAsImdpbWVsZGFnZXNoIiw2NDMwNiwiZ2ltZWxkYWdlc2hoZWJyZXciLDY0MzA2LCJnaW1lbGhlYnJldyIsMTQ5MCwiZ2plY3lyaWxsaWMiLDExMDcsImdsb3R0YWxpbnZlcnRlZHN0cm9rZSIsNDQ2LCJnbG90dGFsc3RvcCIsNjYwLCJnbG90dGFsc3RvcGludmVydGVkIiw2NjIsImdsb3R0YWxzdG9wbW9kIiw3MDQsImdsb3R0YWxzdG9wcmV2ZXJzZWQiLDY2MSwiZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZCIsNzA1LCJnbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3IiLDc0MCwiZ2xvdHRhbHN0b3BzdHJva2UiLDY3MywiZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZCIsNjc0LCJnbWFjcm9uIiw3NzEzLCJnbW9ub3NwYWNlIiw2NTM1MSwiZ29oaXJhZ2FuYSIsMTIzNzIsImdva2F0YWthbmEiLDEyNDY4LCJncGFyZW4iLDkzNzgsImdwYXNxdWFyZSIsMTMyMjgsImdyYWRpZW50Iiw4NzExLCJncmF2ZSIsOTYsImdyYXZlYmVsb3djbWIiLDc5MCwiZ3JhdmVjbWIiLDc2OCwiZ3JhdmVjb21iIiw3NjgsImdyYXZlZGV2YSIsMjM4NywiZ3JhdmVsb3dtb2QiLDcxOCwiZ3JhdmVtb25vc3BhY2UiLDY1MzQ0LCJncmF2ZXRvbmVjbWIiLDgzMiwiZ3JlYXRlciIsNjIsImdyZWF0ZXJlcXVhbCIsODgwNSwiZ3JlYXRlcmVxdWFsb3JsZXNzIiw4OTIzLCJncmVhdGVybW9ub3NwYWNlIiw2NTMxMCwiZ3JlYXRlcm9yZXF1aXZhbGVudCIsODgxOSwiZ3JlYXRlcm9ybGVzcyIsODgyMywiZ3JlYXRlcm92ZXJlcXVhbCIsODgwNywiZ3JlYXRlcnNtYWxsIiw2NTEyNSwiZ3NjcmlwdCIsNjA5LCJnc3Ryb2tlIiw0ODUsImd1aGlyYWdhbmEiLDEyMzY4LCJndWlsbGVtb3RsZWZ0IiwxNzEsImd1aWxsZW1vdHJpZ2h0IiwxODcsImd1aWxzaW5nbGxlZnQiLDgyNDksImd1aWxzaW5nbHJpZ2h0Iiw4MjUwLCJndWthdGFrYW5hIiwxMjQ2NCwiZ3VyYW11c3F1YXJlIiwxMzA4MCwiZ3lzcXVhcmUiLDEzMjU3LCJoIiwxMDQsImhhYWJraGFzaWFuY3lyaWxsaWMiLDExOTMsImhhYWx0b25lYXJhYmljIiwxNzI5LCJoYWJlbmdhbGkiLDI0ODksImhhZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDMsImhhZGV2YSIsMjM2MSwiaGFndWphcmF0aSIsMjc0NSwiaGFndXJtdWtoaSIsMjYxNywiaGFoYXJhYmljIiwxNTgxLCJoYWhmaW5hbGFyYWJpYyIsNjUxODYsImhhaGluaXRpYWxhcmFiaWMiLDY1MTg3LCJoYWhpcmFnYW5hIiwxMjM5OSwiaGFobWVkaWFsYXJhYmljIiw2NTE4OCwiaGFpdHVzcXVhcmUiLDEzMDk4LCJoYWthdGFrYW5hIiwxMjQ5NSwiaGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTgsImhhbGFudGd1cm11a2hpIiwyNjM3LCJoYW16YWFyYWJpYyIsMTU2OSwiaGFtemFsb3dhcmFiaWMiLDE1NjksImhhbmd1bGZpbGxlciIsMTI2NDQsImhhcmRzaWduY3lyaWxsaWMiLDEwOTgsImhhcnBvb25sZWZ0YmFyYnVwIiw4NjM2LCJoYXJwb29ucmlnaHRiYXJidXAiLDg2NDAsImhhc3F1YXJlIiwxMzI1OCwiaGF0YWZwYXRhaCIsMTQ1OCwiaGF0YWZwYXRhaDE2IiwxNDU4LCJoYXRhZnBhdGFoMjMiLDE0NTgsImhhdGFmcGF0YWgyZiIsMTQ1OCwiaGF0YWZwYXRhaGhlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaG5hcnJvd2hlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NTgsImhhdGFmcGF0YWh3aWRlaGVicmV3IiwxNDU4LCJoYXRhZnFhbWF0cyIsMTQ1OSwiaGF0YWZxYW1hdHMxYiIsMTQ1OSwiaGF0YWZxYW1hdHMyOCIsMTQ1OSwiaGF0YWZxYW1hdHMzNCIsMTQ1OSwiaGF0YWZxYW1hdHNoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzbmFycm93aGVicmV3IiwxNDU5LCJoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzd2lkZWhlYnJldyIsMTQ1OSwiaGF0YWZzZWdvbCIsMTQ1NywiaGF0YWZzZWdvbDE3IiwxNDU3LCJoYXRhZnNlZ29sMjQiLDE0NTcsImhhdGFmc2Vnb2wzMCIsMTQ1NywiaGF0YWZzZWdvbGhlYnJldyIsMTQ1NywiaGF0YWZzZWdvbG5hcnJvd2hlYnJldyIsMTQ1NywiaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXciLDE0NTcsImhhdGFmc2Vnb2x3aWRlaGVicmV3IiwxNDU3LCJoYmFyIiwyOTUsImhib3BvbW9mbyIsMTI1NTksImhicmV2ZWJlbG93Iiw3NzIzLCJoY2VkaWxsYSIsNzcyMSwiaGNpcmNsZSIsOTQzMSwiaGNpcmN1bWZsZXgiLDI5MywiaGRpZXJlc2lzIiw3NzE5LCJoZG90YWNjZW50Iiw3NzE1LCJoZG90YmVsb3ciLDc3MTcsImhlIiwxNDkyLCJoZWFydCIsOTgyOSwiaGVhcnRzdWl0YmxhY2siLDk4MjksImhlYXJ0c3VpdHdoaXRlIiw5ODI1LCJoZWRhZ2VzaCIsNjQzMDgsImhlZGFnZXNoaGVicmV3Iiw2NDMwOCwiaGVoYWx0b25lYXJhYmljIiwxNzI5LCJoZWhhcmFiaWMiLDE2MDcsImhlaGVicmV3IiwxNDkyLCJoZWhmaW5hbGFsdG9uZWFyYWJpYyIsNjQ0MjMsImhlaGZpbmFsYWx0dHdvYXJhYmljIiw2NTI1OCwiaGVoZmluYWxhcmFiaWMiLDY1MjU4LCJoZWhoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY0NDIxLCJoZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWMiLDY0NDIwLCJoZWhpbml0aWFsYWx0b25lYXJhYmljIiw2NDQyNCwiaGVoaW5pdGlhbGFyYWJpYyIsNjUyNTksImhlaGlyYWdhbmEiLDEyNDA4LCJoZWhtZWRpYWxhbHRvbmVhcmFiaWMiLDY0NDI1LCJoZWhtZWRpYWxhcmFiaWMiLDY1MjYwLCJoZWlzZWllcmFzcXVhcmUiLDEzMTc5LCJoZWthdGFrYW5hIiwxMjUwNCwiaGVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjEsImhla3V0YWFydXNxdWFyZSIsMTMxMTAsImhlbmdob29rIiw2MTUsImhlcnV0dXNxdWFyZSIsMTMxMTMsImhldCIsMTQ5NSwiaGV0aGVicmV3IiwxNDk1LCJoaG9vayIsNjE0LCJoaG9va3N1cGVyaW9yIiw2ODksImhpZXVoYWNpcmNsZWtvcmVhbiIsMTI5MjMsImhpZXVoYXBhcmVua29yZWFuIiwxMjgyNywiaGlldWhjaXJjbGVrb3JlYW4iLDEyOTA5LCJoaWV1aGtvcmVhbiIsMTI2MjIsImhpZXVocGFyZW5rb3JlYW4iLDEyODEzLCJoaWhpcmFnYW5hIiwxMjQwMiwiaGlrYXRha2FuYSIsMTI0OTgsImhpa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE5LCJoaXJpcSIsMTQ2MCwiaGlyaXExNCIsMTQ2MCwiaGlyaXEyMSIsMTQ2MCwiaGlyaXEyZCIsMTQ2MCwiaGlyaXFoZWJyZXciLDE0NjAsImhpcmlxbmFycm93aGVicmV3IiwxNDYwLCJoaXJpcXF1YXJ0ZXJoZWJyZXciLDE0NjAsImhpcmlxd2lkZWhlYnJldyIsMTQ2MCwiaGxpbmViZWxvdyIsNzgzMCwiaG1vbm9zcGFjZSIsNjUzNTIsImhvYXJtZW5pYW4iLDEzOTIsImhvaGlwdGhhaSIsMzYyNywiaG9oaXJhZ2FuYSIsMTI0MTEsImhva2F0YWthbmEiLDEyNTA3LCJob2thdGFrYW5haGFsZndpZHRoIiw2NTQyMiwiaG9sYW0iLDE0NjUsImhvbGFtMTkiLDE0NjUsImhvbGFtMjYiLDE0NjUsImhvbGFtMzIiLDE0NjUsImhvbGFtaGVicmV3IiwxNDY1LCJob2xhbW5hcnJvd2hlYnJldyIsMTQ2NSwiaG9sYW1xdWFydGVyaGVicmV3IiwxNDY1LCJob2xhbXdpZGVoZWJyZXciLDE0NjUsImhvbm9raHVrdGhhaSIsMzYzMCwiaG9va2Fib3ZlY29tYiIsNzc3LCJob29rY21iIiw3NzcsImhvb2twYWxhdGFsaXplZGJlbG93Y21iIiw4MDEsImhvb2tyZXRyb2ZsZXhiZWxvd2NtYiIsODAyLCJob29uc3F1YXJlIiwxMzEyMiwiaG9yaWNvcHRpYyIsMTAwMSwiaG9yaXpvbnRhbGJhciIsODIxMywiaG9ybmNtYiIsNzk1LCJob3RzcHJpbmdzIiw5ODMyLCJob3VzZSIsODk2MiwiaHBhcmVuIiw5Mzc5LCJoc3VwZXJpb3IiLDY4OCwiaHR1cm5lZCIsNjEzLCJodWhpcmFnYW5hIiwxMjQwNSwiaHVpaXRvc3F1YXJlIiwxMzEwNywiaHVrYXRha2FuYSIsMTI1MDEsImh1a2F0YWthbmFoYWxmd2lkdGgiLDY1NDIwLCJodW5nYXJ1bWxhdXQiLDczMywiaHVuZ2FydW1sYXV0Y21iIiw3NzksImh2Iiw0MDUsImh5cGhlbiIsNDUsImh5cGhlbmluZmVyaW9yIiw2MzIwNSwiaHlwaGVubW9ub3NwYWNlIiw2NTI5MywiaHlwaGVuc21hbGwiLDY1MTIzLCJoeXBoZW5zdXBlcmlvciIsNjMyMDYsImh5cGhlbnR3byIsODIwOCwiaSIsMTA1LCJpYWN1dGUiLDIzNywiaWFjeXJpbGxpYyIsMTEwMywiaWJlbmdhbGkiLDI0MzksImlib3BvbW9mbyIsMTI1ODMsImlicmV2ZSIsMzAxLCJpY2Fyb24iLDQ2NCwiaWNpcmNsZSIsOTQzMiwiaWNpcmN1bWZsZXgiLDIzOCwiaWN5cmlsbGljIiwxMTEwLCJpZGJsZ3JhdmUiLDUyMSwiaWRlb2dyYXBoZWFydGhjaXJjbGUiLDEyOTQzLCJpZGVvZ3JhcGhmaXJlY2lyY2xlIiwxMjkzOSwiaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuIiwxMjg2MywiaWRlb2dyYXBoaWNjYWxscGFyZW4iLDEyODU4LCJpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZSIsMTI5NjUsImlkZW9ncmFwaGljY2xvc2UiLDEyMjk0LCJpZGVvZ3JhcGhpY2NvbW1hIiwxMjI4OSwiaWRlb2dyYXBoaWNjb21tYWxlZnQiLDY1MzgwLCJpZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4iLDEyODU1LCJpZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGUiLDEyOTYzLCJpZGVvZ3JhcGhpY2VhcnRocGFyZW4iLDEyODQ3LCJpZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiIsMTI4NjEsImlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlIiwxMjk1NywiaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuIiwxMjg2NCwiaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUiLDEyOTUwLCJpZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuIiwxMjg1NCwiaWRlb2dyYXBoaWNmaXJlcGFyZW4iLDEyODQzLCJpZGVvZ3JhcGhpY2hhdmVwYXJlbiIsMTI4NTAsImlkZW9ncmFwaGljaGlnaGNpcmNsZSIsMTI5NjQsImlkZW9ncmFwaGljaXRlcmF0aW9ubWFyayIsMTIyOTMsImlkZW9ncmFwaGljbGFib3JjaXJjbGUiLDEyOTUyLCJpZGVvZ3JhcGhpY2xhYm9ycGFyZW4iLDEyODU2LCJpZGVvZ3JhcGhpY2xlZnRjaXJjbGUiLDEyOTY3LCJpZGVvZ3JhcGhpY2xvd2NpcmNsZSIsMTI5NjYsImlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGUiLDEyOTY5LCJpZGVvZ3JhcGhpY21ldGFscGFyZW4iLDEyODQ2LCJpZGVvZ3JhcGhpY21vb25wYXJlbiIsMTI4NDIsImlkZW9ncmFwaGljbmFtZXBhcmVuIiwxMjg1MiwiaWRlb2dyYXBoaWNwZXJpb2QiLDEyMjkwLCJpZGVvZ3JhcGhpY3ByaW50Y2lyY2xlIiwxMjk1OCwiaWRlb2dyYXBoaWNyZWFjaHBhcmVuIiwxMjg2NywiaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbiIsMTI4NTcsImlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiIsMTI4NjIsImlkZW9ncmFwaGljcmlnaHRjaXJjbGUiLDEyOTY4LCJpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZSIsMTI5NTMsImlkZW9ncmFwaGljc2VsZnBhcmVuIiwxMjg2NiwiaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW4iLDEyODUxLCJpZGVvZ3JhcGhpY3NwYWNlIiwxMjI4OCwiaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4iLDEyODUzLCJpZGVvZ3JhcGhpY3N0b2NrcGFyZW4iLDEyODQ5LCJpZGVvZ3JhcGhpY3N0dWR5cGFyZW4iLDEyODU5LCJpZGVvZ3JhcGhpY3N1bnBhcmVuIiwxMjg0OCwiaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbiIsMTI4NjAsImlkZW9ncmFwaGljd2F0ZXJwYXJlbiIsMTI4NDQsImlkZW9ncmFwaGljd29vZHBhcmVuIiwxMjg0NSwiaWRlb2dyYXBoaWN6ZXJvIiwxMjI5NSwiaWRlb2dyYXBobWV0YWxjaXJjbGUiLDEyOTQyLCJpZGVvZ3JhcGhtb29uY2lyY2xlIiwxMjkzOCwiaWRlb2dyYXBobmFtZWNpcmNsZSIsMTI5NDgsImlkZW9ncmFwaHN1bmNpcmNsZSIsMTI5NDQsImlkZW9ncmFwaHdhdGVyY2lyY2xlIiwxMjk0MCwiaWRlb2dyYXBod29vZGNpcmNsZSIsMTI5NDEsImlkZXZhIiwyMzExLCJpZGllcmVzaXMiLDIzOSwiaWRpZXJlc2lzYWN1dGUiLDc3MjcsImlkaWVyZXNpc2N5cmlsbGljIiwxMjUzLCJpZG90YmVsb3ciLDc4ODMsImllYnJldmVjeXJpbGxpYyIsMTIzOSwiaWVjeXJpbGxpYyIsMTA3NywiaWV1bmdhY2lyY2xla29yZWFuIiwxMjkxNywiaWV1bmdhcGFyZW5rb3JlYW4iLDEyODIxLCJpZXVuZ2NpcmNsZWtvcmVhbiIsMTI5MDMsImlldW5na29yZWFuIiwxMjYxNSwiaWV1bmdwYXJlbmtvcmVhbiIsMTI4MDcsImlncmF2ZSIsMjM2LCJpZ3VqYXJhdGkiLDI2OTUsImlndXJtdWtoaSIsMjU2NywiaWhpcmFnYW5hIiwxMjM1NiwiaWhvb2thYm92ZSIsNzg4MSwiaWliZW5nYWxpIiwyNDQwLCJpaWN5cmlsbGljIiwxMDgwLCJpaWRldmEiLDIzMTIsImlpZ3VqYXJhdGkiLDI2OTYsImlpZ3VybXVraGkiLDI1NjgsImlpbWF0cmFndXJtdWtoaSIsMjYyNCwiaWludmVydGVkYnJldmUiLDUyMywiaWlzaG9ydGN5cmlsbGljIiwxMDgxLCJpaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTYsImlpdm93ZWxzaWduZGV2YSIsMjM2OCwiaWl2b3dlbHNpZ25ndWphcmF0aSIsMjc1MiwiaWoiLDMwNywiaWthdGFrYW5hIiwxMjQ1MiwiaWthdGFrYW5haGFsZndpZHRoIiw2NTM5NCwiaWtvcmVhbiIsMTI2NDMsImlsZGUiLDczMiwiaWx1eWhlYnJldyIsMTQ1MiwiaW1hY3JvbiIsMjk5LCJpbWFjcm9uY3lyaWxsaWMiLDEyNTEsImltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3ODcsImltYXRyYWd1cm11a2hpIiwyNjIzLCJpbW9ub3NwYWNlIiw2NTM1MywiaW5jcmVtZW50Iiw4NzEwLCJpbmZpbml0eSIsODczNCwiaW5pYXJtZW5pYW4iLDEzODcsImludGVncmFsIiw4NzQ3LCJpbnRlZ3JhbGJvdHRvbSIsODk5MywiaW50ZWdyYWxidCIsODk5MywiaW50ZWdyYWxleCIsNjM3MzMsImludGVncmFsdG9wIiw4OTkyLCJpbnRlZ3JhbHRwIiw4OTkyLCJpbnRlcnNlY3Rpb24iLDg3NDUsImludGlzcXVhcmUiLDEzMDYxLCJpbnZidWxsZXQiLDk2ODgsImludmNpcmNsZSIsOTY4OSwiaW52c21pbGVmYWNlIiw5Nzg3LCJpb2N5cmlsbGljIiwxMTA1LCJpb2dvbmVrIiwzMDMsImlvdGEiLDk1MywiaW90YWRpZXJlc2lzIiw5NzAsImlvdGFkaWVyZXNpc3Rvbm9zIiw5MTIsImlvdGFsYXRpbiIsNjE3LCJpb3RhdG9ub3MiLDk0MywiaXBhcmVuIiw5MzgwLCJpcmlndXJtdWtoaSIsMjY3NCwiaXNtYWxsaGlyYWdhbmEiLDEyMzU1LCJpc21hbGxrYXRha2FuYSIsMTI0NTEsImlzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NCwiaXNzaGFyYmVuZ2FsaSIsMjU1NCwiaXN0cm9rZSIsNjE2LCJpc3VwZXJpb3IiLDYzMjEzLCJpdGVyYXRpb25oaXJhZ2FuYSIsMTI0NDUsIml0ZXJhdGlvbmthdGFrYW5hIiwxMjU0MSwiaXRpbGRlIiwyOTcsIml0aWxkZWJlbG93Iiw3NzI1LCJpdWJvcG9tb2ZvIiwxMjU4NSwiaXVjeXJpbGxpYyIsMTEwMiwiaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTUsIml2b3dlbHNpZ25kZXZhIiwyMzY3LCJpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTEsIml6aGl0c2FjeXJpbGxpYyIsMTE0MSwiaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMiLDExNDMsImoiLDEwNiwiamFhcm1lbmlhbiIsMTM5MywiamFiZW5nYWxpIiwyNDYwLCJqYWRldmEiLDIzMzIsImphZ3VqYXJhdGkiLDI3MTYsImphZ3VybXVraGkiLDI1ODgsImpib3BvbW9mbyIsMTI1NjAsImpjYXJvbiIsNDk2LCJqY2lyY2xlIiw5NDMzLCJqY2lyY3VtZmxleCIsMzA5LCJqY3Jvc3NlZHRhaWwiLDY2OSwiamRvdGxlc3NzdHJva2UiLDYwNywiamVjeXJpbGxpYyIsMTExMiwiamVlbWFyYWJpYyIsMTU4MCwiamVlbWZpbmFsYXJhYmljIiw2NTE4MiwiamVlbWluaXRpYWxhcmFiaWMiLDY1MTgzLCJqZWVtbWVkaWFsYXJhYmljIiw2NTE4NCwiamVoYXJhYmljIiwxNjg4LCJqZWhmaW5hbGFyYWJpYyIsNjQzOTUsImpoYWJlbmdhbGkiLDI0NjEsImpoYWRldmEiLDIzMzMsImpoYWd1amFyYXRpIiwyNzE3LCJqaGFndXJtdWtoaSIsMjU4OSwiamhlaGFybWVuaWFuIiwxNDAzLCJqaXMiLDEyMjkyLCJqbW9ub3NwYWNlIiw2NTM1NCwianBhcmVuIiw5MzgxLCJqc3VwZXJpb3IiLDY5MCwiayIsMTA3LCJrYWJhc2hraXJjeXJpbGxpYyIsMTE4NSwia2FiZW5nYWxpIiwyNDUzLCJrYWN1dGUiLDc3MjksImthY3lyaWxsaWMiLDEwODIsImthZGVzY2VuZGVyY3lyaWxsaWMiLDExNzksImthZGV2YSIsMjMyNSwia2FmIiwxNDk5LCJrYWZhcmFiaWMiLDE2MDMsImthZmRhZ2VzaCIsNjQzMTUsImthZmRhZ2VzaGhlYnJldyIsNjQzMTUsImthZmZpbmFsYXJhYmljIiw2NTI0Miwia2FmaGVicmV3IiwxNDk5LCJrYWZpbml0aWFsYXJhYmljIiw2NTI0Mywia2FmbWVkaWFsYXJhYmljIiw2NTI0NCwia2FmcmFmZWhlYnJldyIsNjQzMzMsImthZ3VqYXJhdGkiLDI3MDksImthZ3VybXVraGkiLDI1ODEsImthaGlyYWdhbmEiLDEyMzYzLCJrYWhvb2tjeXJpbGxpYyIsMTIyMCwia2FrYXRha2FuYSIsMTI0NTksImtha2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk4LCJrYXBwYSIsOTU0LCJrYXBwYXN5bWJvbGdyZWVrIiwxMDA4LCJrYXB5ZW91bm1pZXVta29yZWFuIiwxMjY1Nywia2FweWVvdW5waGlldXBoa29yZWFuIiwxMjY3Niwia2FweWVvdW5waWV1cGtvcmVhbiIsMTI2NjQsImthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbiIsMTI2NjUsImthcm9yaWlzcXVhcmUiLDEzMDY5LCJrYXNoaWRhYXV0b2FyYWJpYyIsMTYwMCwia2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljIiwxNjAwLCJrYXNtYWxsa2F0YWthbmEiLDEyNTMzLCJrYXNxdWFyZSIsMTMxODgsImthc3JhYXJhYmljIiwxNjE2LCJrYXNyYXRhbmFyYWJpYyIsMTYxMywia2FzdHJva2VjeXJpbGxpYyIsMTE4Mywia2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aCIsNjUzOTIsImthdmVydGljYWxzdHJva2VjeXJpbGxpYyIsMTE4MSwia2JvcG9tb2ZvIiwxMjU1OCwia2NhbHNxdWFyZSIsMTMxOTMsImtjYXJvbiIsNDg5LCJrY2VkaWxsYSIsMzExLCJrY2lyY2xlIiw5NDM0LCJrY29tbWFhY2NlbnQiLDMxMSwia2RvdGJlbG93Iiw3NzMxLCJrZWhhcm1lbmlhbiIsMTQxMiwia2VoaXJhZ2FuYSIsMTIzNjksImtla2F0YWthbmEiLDEyNDY1LCJrZWthdGFrYW5haGFsZndpZHRoIiw2NTQwMSwia2VuYXJtZW5pYW4iLDEzOTEsImtlc21hbGxrYXRha2FuYSIsMTI1MzQsImtncmVlbmxhbmRpYyIsMzEyLCJraGFiZW5nYWxpIiwyNDU0LCJraGFjeXJpbGxpYyIsMTA5Mywia2hhZGV2YSIsMjMyNiwia2hhZ3VqYXJhdGkiLDI3MTAsImtoYWd1cm11a2hpIiwyNTgyLCJraGFoYXJhYmljIiwxNTgyLCJraGFoZmluYWxhcmFiaWMiLDY1MTkwLCJraGFoaW5pdGlhbGFyYWJpYyIsNjUxOTEsImtoYWhtZWRpYWxhcmFiaWMiLDY1MTkyLCJraGVpY29wdGljIiw5OTksImtoaGFkZXZhIiwyMzkzLCJraGhhZ3VybXVraGkiLDI2NDksImtoaWV1a2hhY2lyY2xla29yZWFuIiwxMjkyMCwia2hpZXVraGFwYXJlbmtvcmVhbiIsMTI4MjQsImtoaWV1a2hjaXJjbGVrb3JlYW4iLDEyOTA2LCJraGlldWtoa29yZWFuIiwxMjYxOSwia2hpZXVraHBhcmVua29yZWFuIiwxMjgxMCwia2hva2hhaXRoYWkiLDM1ODYsImtob2tob250aGFpIiwzNTg5LCJraG9raHVhdHRoYWkiLDM1ODcsImtob2tod2FpdGhhaSIsMzU4OCwia2hvbXV0dGhhaSIsMzY3NSwia2hvb2siLDQwOSwia2hvcmFraGFuZ3RoYWkiLDM1OTAsImtoenNxdWFyZSIsMTMyMDEsImtpaGlyYWdhbmEiLDEyMzY1LCJraWthdGFrYW5hIiwxMjQ2MSwia2lrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTksImtpcm9ndXJhbXVzcXVhcmUiLDEzMDc3LCJraXJvbWVldG9ydXNxdWFyZSIsMTMwNzgsImtpcm9zcXVhcmUiLDEzMDc2LCJraXllb2thY2lyY2xla29yZWFuIiwxMjkxMCwia2l5ZW9rYXBhcmVua29yZWFuIiwxMjgxNCwia2l5ZW9rY2lyY2xla29yZWFuIiwxMjg5Niwia2l5ZW9ra29yZWFuIiwxMjU5Mywia2l5ZW9rcGFyZW5rb3JlYW4iLDEyODAwLCJraXllb2tzaW9za29yZWFuIiwxMjU5NSwia2plY3lyaWxsaWMiLDExMTYsImtsaW5lYmVsb3ciLDc3MzMsImtsc3F1YXJlIiwxMzIwOCwia21jdWJlZHNxdWFyZSIsMTMyMjIsImttb25vc3BhY2UiLDY1MzU1LCJrbXNxdWFyZWRzcXVhcmUiLDEzMjE4LCJrb2hpcmFnYW5hIiwxMjM3MSwia29obXNxdWFyZSIsMTMyNDgsImtva2FpdGhhaSIsMzU4NSwia29rYXRha2FuYSIsMTI0NjcsImtva2F0YWthbmFoYWxmd2lkdGgiLDY1NDAyLCJrb29wb3NxdWFyZSIsMTMwODYsImtvcHBhY3lyaWxsaWMiLDExNTMsImtvcmVhbnN0YW5kYXJkc3ltYm9sIiwxMjkyNywia29yb25pc2NtYiIsODM1LCJrcGFyZW4iLDkzODIsImtwYXNxdWFyZSIsMTMyMjYsImtzaWN5cmlsbGljIiwxMTM1LCJrdHNxdWFyZSIsMTMyNjMsImt0dXJuZWQiLDY3MCwia3VoaXJhZ2FuYSIsMTIzNjcsImt1a2F0YWthbmEiLDEyNDYzLCJrdWthdGFrYW5haGFsZndpZHRoIiw2NTQwMCwia3ZzcXVhcmUiLDEzMjQwLCJrd3NxdWFyZSIsMTMyNDYsImwiLDEwOCwibGFiZW5nYWxpIiwyNDgyLCJsYWN1dGUiLDMxNCwibGFkZXZhIiwyMzU0LCJsYWd1amFyYXRpIiwyNzM4LCJsYWd1cm11a2hpIiwyNjEwLCJsYWtraGFuZ3lhb3RoYWkiLDM2NTMsImxhbWFsZWZmaW5hbGFyYWJpYyIsNjUyNzYsImxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MjcyLCJsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljIiw2NTI3MSwibGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUyNzQsImxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWMiLDY1MjczLCJsYW1hbGVmaXNvbGF0ZWRhcmFiaWMiLDY1Mjc1LCJsYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTI3MCwibGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYyIsNjUyNjksImxhbWFyYWJpYyIsMTYwNCwibGFtYmRhIiw5NTUsImxhbWJkYXN0cm9rZSIsNDExLCJsYW1lZCIsMTUwMCwibGFtZWRkYWdlc2giLDY0MzE2LCJsYW1lZGRhZ2VzaGhlYnJldyIsNjQzMTYsImxhbWVkaGVicmV3IiwxNTAwLCJsYW1maW5hbGFyYWJpYyIsNjUyNDYsImxhbWhhaGluaXRpYWxhcmFiaWMiLDY0NzE0LCJsYW1pbml0aWFsYXJhYmljIiw2NTI0NywibGFtamVlbWluaXRpYWxhcmFiaWMiLDY0NzEzLCJsYW1raGFoaW5pdGlhbGFyYWJpYyIsNjQ3MTUsImxhbWxhbWhlaGlzb2xhdGVkYXJhYmljIiw2NTAxMCwibGFtbWVkaWFsYXJhYmljIiw2NTI0OCwibGFtbWVlbWhhaGluaXRpYWxhcmFiaWMiLDY0OTA0LCJsYW1tZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MTYsImxhcmdlY2lyY2xlIiw5NzExLCJsYmFyIiw0MTAsImxiZWx0Iiw2MjAsImxib3BvbW9mbyIsMTI1NTYsImxjYXJvbiIsMzE4LCJsY2VkaWxsYSIsMzE2LCJsY2lyY2xlIiw5NDM1LCJsY2lyY3VtZmxleGJlbG93Iiw3NzQxLCJsY29tbWFhY2NlbnQiLDMxNiwibGRvdCIsMzIwLCJsZG90YWNjZW50IiwzMjAsImxkb3RiZWxvdyIsNzczNSwibGRvdGJlbG93bWFjcm9uIiw3NzM3LCJsZWZ0YW5nbGVhYm92ZWNtYiIsNzk0LCJsZWZ0dGFja2JlbG93Y21iIiw3OTIsImxlc3MiLDYwLCJsZXNzZXF1YWwiLDg4MDQsImxlc3NlcXVhbG9yZ3JlYXRlciIsODkyMiwibGVzc21vbm9zcGFjZSIsNjUzMDgsImxlc3NvcmVxdWl2YWxlbnQiLDg4MTgsImxlc3NvcmdyZWF0ZXIiLDg4MjIsImxlc3NvdmVyZXF1YWwiLDg4MDYsImxlc3NzbWFsbCIsNjUxMjQsImxlemgiLDYyMiwibGZibG9jayIsOTYxMiwibGhvb2tyZXRyb2ZsZXgiLDYyMSwibGlyYSIsODM1NiwibGl3bmFybWVuaWFuIiwxMzg4LCJsaiIsNDU3LCJsamVjeXJpbGxpYyIsMTExMywibGwiLDYzMTY4LCJsbGFkZXZhIiwyMzU1LCJsbGFndWphcmF0aSIsMjczOSwibGxpbmViZWxvdyIsNzczOSwibGxsYWRldmEiLDIzNTYsImxsdm9jYWxpY2JlbmdhbGkiLDI1MjksImxsdm9jYWxpY2RldmEiLDI0MDEsImxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzEsImxsdm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDI0MDMsImxtaWRkbGV0aWxkZSIsNjE5LCJsbW9ub3NwYWNlIiw2NTM1NiwibG1zcXVhcmUiLDEzMjY0LCJsb2NodWxhdGhhaSIsMzYyOCwibG9naWNhbGFuZCIsODc0MywibG9naWNhbG5vdCIsMTcyLCJsb2dpY2Fsbm90cmV2ZXJzZWQiLDg5NzYsImxvZ2ljYWxvciIsODc0NCwibG9saW5ndGhhaSIsMzYyMSwibG9uZ3MiLDM4MywibG93bGluZWNlbnRlcmxpbmUiLDY1MTAyLCJsb3dsaW5lY21iIiw4MTgsImxvd2xpbmVkYXNoZWQiLDY1MTAxLCJsb3plbmdlIiw5Njc0LCJscGFyZW4iLDkzODMsImxzbGFzaCIsMzIyLCJsc3F1YXJlIiw4NDY3LCJsc3VwZXJpb3IiLDYzMjE0LCJsdHNoYWRlIiw5NjE3LCJsdXRoYWkiLDM2MjIsImx2b2NhbGljYmVuZ2FsaSIsMjQ0NCwibHZvY2FsaWNkZXZhIiwyMzE2LCJsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzAsImx2b2NhbGljdm93ZWxzaWduZGV2YSIsMjQwMiwibHhzcXVhcmUiLDEzMjY3LCJtIiwxMDksIm1hYmVuZ2FsaSIsMjQ3OCwibWFjcm9uIiwxNzUsIm1hY3JvbmJlbG93Y21iIiw4MTcsIm1hY3JvbmNtYiIsNzcyLCJtYWNyb25sb3dtb2QiLDcxNywibWFjcm9ubW9ub3NwYWNlIiw2NTUwNywibWFjdXRlIiw3NzQzLCJtYWRldmEiLDIzNTAsIm1hZ3VqYXJhdGkiLDI3MzQsIm1hZ3VybXVraGkiLDI2MDYsIm1haGFwYWtoaGVicmV3IiwxNDQ0LCJtYWhhcGFraGxlZnRoZWJyZXciLDE0NDQsIm1haGlyYWdhbmEiLDEyNDE0LCJtYWljaGF0dGF3YWxvd2xlZnR0aGFpIiw2MzYzNywibWFpY2hhdHRhd2Fsb3dyaWdodHRoYWkiLDYzNjM2LCJtYWljaGF0dGF3YXRoYWkiLDM2NTksIm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSIsNjM2MzUsIm1haWVrbG93bGVmdHRoYWkiLDYzNjI4LCJtYWlla2xvd3JpZ2h0dGhhaSIsNjM2MjcsIm1haWVrdGhhaSIsMzY1NiwibWFpZWt1cHBlcmxlZnR0aGFpIiw2MzYyNiwibWFpaGFuYWthdGxlZnR0aGFpIiw2MzYyMCwibWFpaGFuYWthdHRoYWkiLDM2MzMsIm1haXRhaWtodWxlZnR0aGFpIiw2MzYyNSwibWFpdGFpa2h1dGhhaSIsMzY1NSwibWFpdGhvbG93bGVmdHRoYWkiLDYzNjMxLCJtYWl0aG9sb3dyaWdodHRoYWkiLDYzNjMwLCJtYWl0aG90aGFpIiwzNjU3LCJtYWl0aG91cHBlcmxlZnR0aGFpIiw2MzYyOSwibWFpdHJpbG93bGVmdHRoYWkiLDYzNjM0LCJtYWl0cmlsb3dyaWdodHRoYWkiLDYzNjMzLCJtYWl0cml0aGFpIiwzNjU4LCJtYWl0cml1cHBlcmxlZnR0aGFpIiw2MzYzMiwibWFpeWFtb2t0aGFpIiwzNjU0LCJtYWthdGFrYW5hIiwxMjUxMCwibWFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjMsIm1hbGUiLDk3OTQsIm1hbnN5b25zcXVhcmUiLDEzMTI3LCJtYXFhZmhlYnJldyIsMTQ3MCwibWFycyIsOTc5NCwibWFzb3JhY2lyY2xlaGVicmV3IiwxNDU1LCJtYXNxdWFyZSIsMTMxODcsIm1ib3BvbW9mbyIsMTI1NTEsIm1ic3F1YXJlIiwxMzI2OCwibWNpcmNsZSIsOTQzNiwibWN1YmVkc3F1YXJlIiwxMzIyMSwibWRvdGFjY2VudCIsNzc0NSwibWRvdGJlbG93Iiw3NzQ3LCJtZWVtYXJhYmljIiwxNjA1LCJtZWVtZmluYWxhcmFiaWMiLDY1MjUwLCJtZWVtaW5pdGlhbGFyYWJpYyIsNjUyNTEsIm1lZW1tZWRpYWxhcmFiaWMiLDY1MjUyLCJtZWVtbWVlbWluaXRpYWxhcmFiaWMiLDY0NzIxLCJtZWVtbWVlbWlzb2xhdGVkYXJhYmljIiw2NDU4NCwibWVldG9ydXNxdWFyZSIsMTMxMzMsIm1laGlyYWdhbmEiLDEyNDE3LCJtZWl6aWVyYXNxdWFyZSIsMTMxODIsIm1la2F0YWthbmEiLDEyNTEzLCJtZWthdGFrYW5haGFsZndpZHRoIiw2NTQyNiwibWVtIiwxNTAyLCJtZW1kYWdlc2giLDY0MzE4LCJtZW1kYWdlc2hoZWJyZXciLDY0MzE4LCJtZW1oZWJyZXciLDE1MDIsIm1lbmFybWVuaWFuIiwxMzk2LCJtZXJraGFoZWJyZXciLDE0NDUsIm1lcmtoYWtlZnVsYWhlYnJldyIsMTQ0NiwibWVya2hha2VmdWxhbGVmdGhlYnJldyIsMTQ0NiwibWVya2hhbGVmdGhlYnJldyIsMTQ0NSwibWhvb2siLDYyNSwibWh6c3F1YXJlIiwxMzIwMiwibWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGgiLDY1MzgxLCJtaWRkb3QiLDE4MywibWlldW1hY2lyY2xla29yZWFuIiwxMjkxNCwibWlldW1hcGFyZW5rb3JlYW4iLDEyODE4LCJtaWV1bWNpcmNsZWtvcmVhbiIsMTI5MDAsIm1pZXVta29yZWFuIiwxMjYwOSwibWlldW1wYW5zaW9za29yZWFuIiwxMjY1NiwibWlldW1wYXJlbmtvcmVhbiIsMTI4MDQsIm1pZXVtcGlldXBrb3JlYW4iLDEyNjU0LCJtaWV1bXNpb3Nrb3JlYW4iLDEyNjU1LCJtaWhpcmFnYW5hIiwxMjQxNSwibWlrYXRha2FuYSIsMTI1MTEsIm1pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDI0LCJtaW51cyIsODcyMiwibWludXNiZWxvd2NtYiIsODAwLCJtaW51c2NpcmNsZSIsODg1NCwibWludXNtb2QiLDcyNywibWludXNwbHVzIiw4NzIzLCJtaW51dGUiLDgyNDIsIm1pcmliYWFydXNxdWFyZSIsMTMxMzAsIm1pcmlzcXVhcmUiLDEzMTI5LCJtbG9uZ2xlZ3R1cm5lZCIsNjI0LCJtbHNxdWFyZSIsMTMyMDYsIm1tY3ViZWRzcXVhcmUiLDEzMjE5LCJtbW9ub3NwYWNlIiw2NTM1NywibW1zcXVhcmVkc3F1YXJlIiwxMzIxNSwibW9oaXJhZ2FuYSIsMTI0MTgsIm1vaG1zcXVhcmUiLDEzMjQ5LCJtb2thdGFrYW5hIiwxMjUxNCwibW9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjcsIm1vbHNxdWFyZSIsMTMyNzAsIm1vbWF0aGFpIiwzNjE3LCJtb3ZlcnNzcXVhcmUiLDEzMjIzLCJtb3ZlcnNzcXVhcmVkc3F1YXJlIiwxMzIyNCwibXBhcmVuIiw5Mzg0LCJtcGFzcXVhcmUiLDEzMjI3LCJtc3NxdWFyZSIsMTMyMzUsIm1zdXBlcmlvciIsNjMyMTUsIm10dXJuZWQiLDYyMywibXUiLDE4MSwibXUxIiwxODEsIm11YXNxdWFyZSIsMTMxODYsIm11Y2hncmVhdGVyIiw4ODExLCJtdWNobGVzcyIsODgxMCwibXVmc3F1YXJlIiwxMzE5NiwibXVncmVlayIsOTU2LCJtdWdzcXVhcmUiLDEzMTk3LCJtdWhpcmFnYW5hIiwxMjQxNiwibXVrYXRha2FuYSIsMTI1MTIsIm11a2F0YWthbmFoYWxmd2lkdGgiLDY1NDI1LCJtdWxzcXVhcmUiLDEzMjA1LCJtdWx0aXBseSIsMjE1LCJtdW1zcXVhcmUiLDEzMjExLCJtdW5haGhlYnJldyIsMTQ0MywibXVuYWhsZWZ0aGVicmV3IiwxNDQzLCJtdXNpY2Fsbm90ZSIsOTgzNCwibXVzaWNhbG5vdGVkYmwiLDk4MzUsIm11c2ljZmxhdHNpZ24iLDk4MzcsIm11c2ljc2hhcnBzaWduIiw5ODM5LCJtdXNzcXVhcmUiLDEzMjM0LCJtdXZzcXVhcmUiLDEzMjM4LCJtdXdzcXVhcmUiLDEzMjQ0LCJtdm1lZ2FzcXVhcmUiLDEzMjQxLCJtdnNxdWFyZSIsMTMyMzksIm13bWVnYXNxdWFyZSIsMTMyNDcsIm13c3F1YXJlIiwxMzI0NSwibiIsMTEwLCJuYWJlbmdhbGkiLDI0NzIsIm5hYmxhIiw4NzExLCJuYWN1dGUiLDMyNCwibmFkZXZhIiwyMzQ0LCJuYWd1amFyYXRpIiwyNzI4LCJuYWd1cm11a2hpIiwyNjAwLCJuYWhpcmFnYW5hIiwxMjM5NCwibmFrYXRha2FuYSIsMTI0OTAsIm5ha2F0YWthbmFoYWxmd2lkdGgiLDY1NDEzLCJuYXBvc3Ryb3BoZSIsMzI5LCJuYXNxdWFyZSIsMTMxODUsIm5ib3BvbW9mbyIsMTI1NTUsIm5ic3BhY2UiLDE2MCwibmNhcm9uIiwzMjgsIm5jZWRpbGxhIiwzMjYsIm5jaXJjbGUiLDk0MzcsIm5jaXJjdW1mbGV4YmVsb3ciLDc3NTUsIm5jb21tYWFjY2VudCIsMzI2LCJuZG90YWNjZW50Iiw3NzQ5LCJuZG90YmVsb3ciLDc3NTEsIm5laGlyYWdhbmEiLDEyMzk3LCJuZWthdGFrYW5hIiwxMjQ5MywibmVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTYsIm5ld3NoZXFlbHNpZ24iLDgzNjIsIm5mc3F1YXJlIiwxMzE5NSwibmdhYmVuZ2FsaSIsMjQ1NywibmdhZGV2YSIsMjMyOSwibmdhZ3VqYXJhdGkiLDI3MTMsIm5nYWd1cm11a2hpIiwyNTg1LCJuZ29uZ3V0aGFpIiwzNTkxLCJuaGlyYWdhbmEiLDEyNDM1LCJuaG9va2xlZnQiLDYyNiwibmhvb2tyZXRyb2ZsZXgiLDYyNywibmlldW5hY2lyY2xla29yZWFuIiwxMjkxMSwibmlldW5hcGFyZW5rb3JlYW4iLDEyODE1LCJuaWV1bmNpZXVja29yZWFuIiwxMjU5NywibmlldW5jaXJjbGVrb3JlYW4iLDEyODk3LCJuaWV1bmhpZXVoa29yZWFuIiwxMjU5OCwibmlldW5rb3JlYW4iLDEyNTk2LCJuaWV1bnBhbnNpb3Nrb3JlYW4iLDEyNjQ4LCJuaWV1bnBhcmVua29yZWFuIiwxMjgwMSwibmlldW5zaW9za29yZWFuIiwxMjY0NywibmlldW50aWtldXRrb3JlYW4iLDEyNjQ2LCJuaWhpcmFnYW5hIiwxMjM5NSwibmlrYXRha2FuYSIsMTI0OTEsIm5pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE0LCJuaWtoYWhpdGxlZnR0aGFpIiw2MzY0MSwibmlraGFoaXR0aGFpIiwzNjYxLCJuaW5lIiw1NywibmluZWFyYWJpYyIsMTY0MSwibmluZWJlbmdhbGkiLDI1NDMsIm5pbmVjaXJjbGUiLDkzMjAsIm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEzMCwibmluZWRldmEiLDI0MTUsIm5pbmVndWphcmF0aSIsMjc5OSwibmluZWd1cm11a2hpIiwyNjcxLCJuaW5laGFja2FyYWJpYyIsMTY0MSwibmluZWhhbmd6aG91IiwxMjMyOSwibmluZWlkZW9ncmFwaGljcGFyZW4iLDEyODQwLCJuaW5laW5mZXJpb3IiLDgzMjksIm5pbmVtb25vc3BhY2UiLDY1MzA1LCJuaW5lb2xkc3R5bGUiLDYzMjg5LCJuaW5lcGFyZW4iLDkzNDAsIm5pbmVwZXJpb2QiLDkzNjAsIm5pbmVwZXJzaWFuIiwxNzg1LCJuaW5lcm9tYW4iLDg1NjgsIm5pbmVzdXBlcmlvciIsODMxMywibmluZXRlZW5jaXJjbGUiLDkzMzAsIm5pbmV0ZWVucGFyZW4iLDkzNTAsIm5pbmV0ZWVucGVyaW9kIiw5MzcwLCJuaW5ldGhhaSIsMzY3MywibmoiLDQ2MCwibmplY3lyaWxsaWMiLDExMTQsIm5rYXRha2FuYSIsMTI1MzEsIm5rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzcsIm5sZWdyaWdodGxvbmciLDQxNCwibmxpbmViZWxvdyIsNzc1Mywibm1vbm9zcGFjZSIsNjUzNTgsIm5tc3F1YXJlIiwxMzIxMCwibm5hYmVuZ2FsaSIsMjQ2Nywibm5hZGV2YSIsMjMzOSwibm5hZ3VqYXJhdGkiLDI3MjMsIm5uYWd1cm11a2hpIiwyNTk1LCJubm5hZGV2YSIsMjM0NSwibm9oaXJhZ2FuYSIsMTIzOTgsIm5va2F0YWthbmEiLDEyNDk0LCJub2thdGFrYW5haGFsZndpZHRoIiw2NTQxNywibm9uYnJlYWtpbmdzcGFjZSIsMTYwLCJub25lbnRoYWkiLDM2MDMsIm5vbnV0aGFpIiwzNjA5LCJub29uYXJhYmljIiwxNjA2LCJub29uZmluYWxhcmFiaWMiLDY1MjU0LCJub29uZ2h1bm5hYXJhYmljIiwxNzIyLCJub29uZ2h1bm5hZmluYWxhcmFiaWMiLDY0NDE1LCJub29uaW5pdGlhbGFyYWJpYyIsNjUyNTUsIm5vb25qZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MjIsIm5vb25qZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTg3LCJub29ubWVkaWFsYXJhYmljIiw2NTI1Niwibm9vbm1lZW1pbml0aWFsYXJhYmljIiw2NDcyNSwibm9vbm1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1OTAsIm5vb25ub29uZmluYWxhcmFiaWMiLDY0NjUzLCJub3Rjb250YWlucyIsODcxNiwibm90ZWxlbWVudCIsODcxMywibm90ZWxlbWVudG9mIiw4NzEzLCJub3RlcXVhbCIsODgwMCwibm90Z3JlYXRlciIsODgxNSwibm90Z3JlYXRlcm5vcmVxdWFsIiw4ODE3LCJub3RncmVhdGVybm9ybGVzcyIsODgyNSwibm90aWRlbnRpY2FsIiw4ODAyLCJub3RsZXNzIiw4ODE0LCJub3RsZXNzbm9yZXF1YWwiLDg4MTYsIm5vdHBhcmFsbGVsIiw4NzQyLCJub3RwcmVjZWRlcyIsODgzMiwibm90c3Vic2V0Iiw4ODM2LCJub3RzdWNjZWVkcyIsODgzMywibm90c3VwZXJzZXQiLDg4MzcsIm5vd2FybWVuaWFuIiwxMzk4LCJucGFyZW4iLDkzODUsIm5zc3F1YXJlIiwxMzIzMywibnN1cGVyaW9yIiw4MzE5LCJudGlsZGUiLDI0MSwibnUiLDk1NywibnVoaXJhZ2FuYSIsMTIzOTYsIm51a2F0YWthbmEiLDEyNDkyLCJudWthdGFrYW5haGFsZndpZHRoIiw2NTQxNSwibnVrdGFiZW5nYWxpIiwyNDkyLCJudWt0YWRldmEiLDIzNjQsIm51a3RhZ3VqYXJhdGkiLDI3NDgsIm51a3RhZ3VybXVraGkiLDI2MjAsIm51bWJlcnNpZ24iLDM1LCJudW1iZXJzaWdubW9ub3NwYWNlIiw2NTI4MywibnVtYmVyc2lnbnNtYWxsIiw2NTExOSwibnVtZXJhbHNpZ25ncmVlayIsODg0LCJudW1lcmFsc2lnbmxvd2VyZ3JlZWsiLDg4NSwibnVtZXJvIiw4NDcwLCJudW4iLDE1MDQsIm51bmRhZ2VzaCIsNjQzMjAsIm51bmRhZ2VzaGhlYnJldyIsNjQzMjAsIm51bmhlYnJldyIsMTUwNCwibnZzcXVhcmUiLDEzMjM3LCJud3NxdWFyZSIsMTMyNDMsIm55YWJlbmdhbGkiLDI0NjIsIm55YWRldmEiLDIzMzQsIm55YWd1amFyYXRpIiwyNzE4LCJueWFndXJtdWtoaSIsMjU5MCwibyIsMTExLCJvYWN1dGUiLDI0Mywib2FuZ3RoYWkiLDM2MjksIm9iYXJyZWQiLDYyOSwib2JhcnJlZGN5cmlsbGljIiwxMjU3LCJvYmFycmVkZGllcmVzaXNjeXJpbGxpYyIsMTI1OSwib2JlbmdhbGkiLDI0NTEsIm9ib3BvbW9mbyIsMTI1NzEsIm9icmV2ZSIsMzM1LCJvY2FuZHJhZGV2YSIsMjMyMSwib2NhbmRyYWd1amFyYXRpIiwyNzA1LCJvY2FuZHJhdm93ZWxzaWduZGV2YSIsMjM3Nywib2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzYxLCJvY2Fyb24iLDQ2Niwib2NpcmNsZSIsOTQzOCwib2NpcmN1bWZsZXgiLDI0NCwib2NpcmN1bWZsZXhhY3V0ZSIsNzg4OSwib2NpcmN1bWZsZXhkb3RiZWxvdyIsNzg5Nywib2NpcmN1bWZsZXhncmF2ZSIsNzg5MSwib2NpcmN1bWZsZXhob29rYWJvdmUiLDc4OTMsIm9jaXJjdW1mbGV4dGlsZGUiLDc4OTUsIm9jeXJpbGxpYyIsMTA4Niwib2RibGFjdXRlIiwzMzcsIm9kYmxncmF2ZSIsNTI1LCJvZGV2YSIsMjMyMywib2RpZXJlc2lzIiwyNDYsIm9kaWVyZXNpc2N5cmlsbGljIiwxMjU1LCJvZG90YmVsb3ciLDc4ODUsIm9lIiwzMzksIm9la29yZWFuIiwxMjYzNCwib2dvbmVrIiw3MzEsIm9nb25la2NtYiIsODA4LCJvZ3JhdmUiLDI0Miwib2d1amFyYXRpIiwyNzA3LCJvaGFybWVuaWFuIiwxNDEzLCJvaGlyYWdhbmEiLDEyMzYyLCJvaG9va2Fib3ZlIiw3ODg3LCJvaG9ybiIsNDE3LCJvaG9ybmFjdXRlIiw3ODk5LCJvaG9ybmRvdGJlbG93Iiw3OTA3LCJvaG9ybmdyYXZlIiw3OTAxLCJvaG9ybmhvb2thYm92ZSIsNzkwMywib2hvcm50aWxkZSIsNzkwNSwib2h1bmdhcnVtbGF1dCIsMzM3LCJvaSIsNDE5LCJvaW52ZXJ0ZWRicmV2ZSIsNTI3LCJva2F0YWthbmEiLDEyNDU4LCJva2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk3LCJva29yZWFuIiwxMjYzMSwib2xlaGVicmV3IiwxNDUxLCJvbWFjcm9uIiwzMzMsIm9tYWNyb25hY3V0ZSIsNzc2Mywib21hY3JvbmdyYXZlIiw3NzYxLCJvbWRldmEiLDIzODQsIm9tZWdhIiw5NjksIm9tZWdhMSIsOTgyLCJvbWVnYWN5cmlsbGljIiwxMTIxLCJvbWVnYWxhdGluY2xvc2VkIiw2MzEsIm9tZWdhcm91bmRjeXJpbGxpYyIsMTE0Nywib21lZ2F0aXRsb2N5cmlsbGljIiwxMTQ5LCJvbWVnYXRvbm9zIiw5NzQsIm9tZ3VqYXJhdGkiLDI3NjgsIm9taWNyb24iLDk1OSwib21pY3JvbnRvbm9zIiw5NzIsIm9tb25vc3BhY2UiLDY1MzU5LCJvbmUiLDQ5LCJvbmVhcmFiaWMiLDE2MzMsIm9uZWJlbmdhbGkiLDI1MzUsIm9uZWNpcmNsZSIsOTMxMiwib25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiIsMTAxMjIsIm9uZWRldmEiLDI0MDcsIm9uZWRvdGVubGVhZGVyIiw4MjI4LCJvbmVlaWdodGgiLDg1MzksIm9uZWZpdHRlZCIsNjMxOTYsIm9uZWd1amFyYXRpIiwyNzkxLCJvbmVndXJtdWtoaSIsMjY2Mywib25laGFja2FyYWJpYyIsMTYzMywib25laGFsZiIsMTg5LCJvbmVoYW5nemhvdSIsMTIzMjEsIm9uZWlkZW9ncmFwaGljcGFyZW4iLDEyODMyLCJvbmVpbmZlcmlvciIsODMyMSwib25lbW9ub3NwYWNlIiw2NTI5Nywib25lbnVtZXJhdG9yYmVuZ2FsaSIsMjU0OCwib25lb2xkc3R5bGUiLDYzMjgxLCJvbmVwYXJlbiIsOTMzMiwib25lcGVyaW9kIiw5MzUyLCJvbmVwZXJzaWFuIiwxNzc3LCJvbmVxdWFydGVyIiwxODgsIm9uZXJvbWFuIiw4NTYwLCJvbmVzdXBlcmlvciIsMTg1LCJvbmV0aGFpIiwzNjY1LCJvbmV0aGlyZCIsODUzMSwib29nb25layIsNDkxLCJvb2dvbmVrbWFjcm9uIiw0OTMsIm9vZ3VybXVraGkiLDI1NzksIm9vbWF0cmFndXJtdWtoaSIsMjYzNSwib29wZW4iLDU5Niwib3BhcmVuIiw5Mzg2LCJvcGVuYnVsbGV0Iiw5NzAyLCJvcHRpb24iLDg5OTcsIm9yZGZlbWluaW5lIiwxNzAsIm9yZG1hc2N1bGluZSIsMTg2LCJvcnRob2dvbmFsIiw4NzM1LCJvc2hvcnRkZXZhIiwyMzIyLCJvc2hvcnR2b3dlbHNpZ25kZXZhIiwyMzc4LCJvc2xhc2giLDI0OCwib3NsYXNoYWN1dGUiLDUxMSwib3NtYWxsaGlyYWdhbmEiLDEyMzYxLCJvc21hbGxrYXRha2FuYSIsMTI0NTcsIm9zbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4Nywib3N0cm9rZWFjdXRlIiw1MTEsIm9zdXBlcmlvciIsNjMyMTYsIm90Y3lyaWxsaWMiLDExNTEsIm90aWxkZSIsMjQ1LCJvdGlsZGVhY3V0ZSIsNzc1Nywib3RpbGRlZGllcmVzaXMiLDc3NTksIm91Ym9wb21vZm8iLDEyNTc3LCJvdmVybGluZSIsODI1NCwib3ZlcmxpbmVjZW50ZXJsaW5lIiw2NTA5OCwib3ZlcmxpbmVjbWIiLDc3Mywib3ZlcmxpbmVkYXNoZWQiLDY1MDk3LCJvdmVybGluZWRibHdhdnkiLDY1MTAwLCJvdmVybGluZXdhdnkiLDY1MDk5LCJvdmVyc2NvcmUiLDE3NSwib3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MDcsIm92b3dlbHNpZ25kZXZhIiwyMzc5LCJvdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjMsInAiLDExMiwicGFhbXBzc3F1YXJlIiwxMzE4NCwicGFhc2VudG9zcXVhcmUiLDEzMDk5LCJwYWJlbmdhbGkiLDI0NzQsInBhY3V0ZSIsNzc2NSwicGFkZXZhIiwyMzQ2LCJwYWdlZG93biIsODY3MSwicGFnZXVwIiw4NjcwLCJwYWd1amFyYXRpIiwyNzMwLCJwYWd1cm11a2hpIiwyNjAyLCJwYWhpcmFnYW5hIiwxMjQwMSwicGFpeWFubm9pdGhhaSIsMzYzMSwicGFrYXRha2FuYSIsMTI0OTcsInBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWIiLDExNTYsInBhbG9jaGthY3lyaWxsaWMiLDEyMTYsInBhbnNpb3Nrb3JlYW4iLDEyNjcxLCJwYXJhZ3JhcGgiLDE4MiwicGFyYWxsZWwiLDg3NDEsInBhcmVubGVmdCIsNDAsInBhcmVubGVmdGFsdG9uZWFyYWJpYyIsNjQ4MzAsInBhcmVubGVmdGJ0Iiw2MzcyNSwicGFyZW5sZWZ0ZXgiLDYzNzI0LCJwYXJlbmxlZnRpbmZlcmlvciIsODMzMywicGFyZW5sZWZ0bW9ub3NwYWNlIiw2NTI4OCwicGFyZW5sZWZ0c21hbGwiLDY1MTEzLCJwYXJlbmxlZnRzdXBlcmlvciIsODMxNywicGFyZW5sZWZ0dHAiLDYzNzIzLCJwYXJlbmxlZnR2ZXJ0aWNhbCIsNjUwNzcsInBhcmVucmlnaHQiLDQxLCJwYXJlbnJpZ2h0YWx0b25lYXJhYmljIiw2NDgzMSwicGFyZW5yaWdodGJ0Iiw2MzczNiwicGFyZW5yaWdodGV4Iiw2MzczNSwicGFyZW5yaWdodGluZmVyaW9yIiw4MzM0LCJwYXJlbnJpZ2h0bW9ub3NwYWNlIiw2NTI4OSwicGFyZW5yaWdodHNtYWxsIiw2NTExNCwicGFyZW5yaWdodHN1cGVyaW9yIiw4MzE4LCJwYXJlbnJpZ2h0dHAiLDYzNzM0LCJwYXJlbnJpZ2h0dmVydGljYWwiLDY1MDc4LCJwYXJ0aWFsZGlmZiIsODcwNiwicGFzZXFoZWJyZXciLDE0NzIsInBhc2h0YWhlYnJldyIsMTQzMywicGFzcXVhcmUiLDEzMjI1LCJwYXRhaCIsMTQ2MywicGF0YWgxMSIsMTQ2MywicGF0YWgxZCIsMTQ2MywicGF0YWgyYSIsMTQ2MywicGF0YWhoZWJyZXciLDE0NjMsInBhdGFobmFycm93aGVicmV3IiwxNDYzLCJwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NjMsInBhdGFod2lkZWhlYnJldyIsMTQ2MywicGF6ZXJoZWJyZXciLDE0NDEsInBib3BvbW9mbyIsMTI1NTAsInBjaXJjbGUiLDk0MzksInBkb3RhY2NlbnQiLDc3NjcsInBlIiwxNTA4LCJwZWN5cmlsbGljIiwxMDg3LCJwZWRhZ2VzaCIsNjQzMjQsInBlZGFnZXNoaGVicmV3Iiw2NDMyNCwicGVlemlzcXVhcmUiLDEzMTE1LCJwZWZpbmFsZGFnZXNoaGVicmV3Iiw2NDMyMywicGVoYXJhYmljIiwxNjYyLCJwZWhhcm1lbmlhbiIsMTQwMiwicGVoZWJyZXciLDE1MDgsInBlaGZpbmFsYXJhYmljIiw2NDM0MywicGVoaW5pdGlhbGFyYWJpYyIsNjQzNDQsInBlaGlyYWdhbmEiLDEyNDEwLCJwZWhtZWRpYWxhcmFiaWMiLDY0MzQ1LCJwZWthdGFrYW5hIiwxMjUwNiwicGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTEsInBlcmFmZWhlYnJldyIsNjQzMzQsInBlcmNlbnQiLDM3LCJwZXJjZW50YXJhYmljIiwxNjQyLCJwZXJjZW50bW9ub3NwYWNlIiw2NTI4NSwicGVyY2VudHNtYWxsIiw2NTEzMCwicGVyaW9kIiw0NiwicGVyaW9kYXJtZW5pYW4iLDE0MTcsInBlcmlvZGNlbnRlcmVkIiwxODMsInBlcmlvZGhhbGZ3aWR0aCIsNjUzNzcsInBlcmlvZGluZmVyaW9yIiw2MzIwNywicGVyaW9kbW9ub3NwYWNlIiw2NTI5NCwicGVyaW9kc21hbGwiLDY1MTA2LCJwZXJpb2RzdXBlcmlvciIsNjMyMDgsInBlcmlzcG9tZW5pZ3JlZWtjbWIiLDgzNCwicGVycGVuZGljdWxhciIsODg2OSwicGVydGhvdXNhbmQiLDgyNDAsInBlc2V0YSIsODM1OSwicGZzcXVhcmUiLDEzMTk0LCJwaGFiZW5nYWxpIiwyNDc1LCJwaGFkZXZhIiwyMzQ3LCJwaGFndWphcmF0aSIsMjczMSwicGhhZ3VybXVraGkiLDI2MDMsInBoaSIsOTY2LCJwaGkxIiw5ODEsInBoaWV1cGhhY2lyY2xla29yZWFuIiwxMjkyMiwicGhpZXVwaGFwYXJlbmtvcmVhbiIsMTI4MjYsInBoaWV1cGhjaXJjbGVrb3JlYW4iLDEyOTA4LCJwaGlldXBoa29yZWFuIiwxMjYyMSwicGhpZXVwaHBhcmVua29yZWFuIiwxMjgxMiwicGhpbGF0aW4iLDYzMiwicGhpbnRodXRoYWkiLDM2NDIsInBoaXN5bWJvbGdyZWVrIiw5ODEsInBob29rIiw0MjEsInBob3BoYW50aGFpIiwzNjE0LCJwaG9waHVuZ3RoYWkiLDM2MTIsInBob3NhbXBoYW90aGFpIiwzNjE2LCJwaSIsOTYwLCJwaWV1cGFjaXJjbGVrb3JlYW4iLDEyOTE1LCJwaWV1cGFwYXJlbmtvcmVhbiIsMTI4MTksInBpZXVwY2lldWNrb3JlYW4iLDEyNjYyLCJwaWV1cGNpcmNsZWtvcmVhbiIsMTI5MDEsInBpZXVwa2l5ZW9ra29yZWFuIiwxMjY1OCwicGlldXBrb3JlYW4iLDEyNjEwLCJwaWV1cHBhcmVua29yZWFuIiwxMjgwNSwicGlldXBzaW9za2l5ZW9ra29yZWFuIiwxMjY2MCwicGlldXBzaW9za29yZWFuIiwxMjYxMiwicGlldXBzaW9zdGlrZXV0a29yZWFuIiwxMjY2MSwicGlldXB0aGlldXRoa29yZWFuIiwxMjY2MywicGlldXB0aWtldXRrb3JlYW4iLDEyNjU5LCJwaWhpcmFnYW5hIiwxMjQwNCwicGlrYXRha2FuYSIsMTI1MDAsInBpc3ltYm9sZ3JlZWsiLDk4MiwicGl3cmFybWVuaWFuIiwxNDExLCJwbHVzIiw0MywicGx1c2JlbG93Y21iIiw3OTksInBsdXNjaXJjbGUiLDg4NTMsInBsdXNtaW51cyIsMTc3LCJwbHVzbW9kIiw3MjYsInBsdXNtb25vc3BhY2UiLDY1MjkxLCJwbHVzc21hbGwiLDY1MTIyLCJwbHVzc3VwZXJpb3IiLDgzMTQsInBtb25vc3BhY2UiLDY1MzYwLCJwbXNxdWFyZSIsMTMyNzIsInBvaGlyYWdhbmEiLDEyNDEzLCJwb2ludGluZ2luZGV4ZG93bndoaXRlIiw5NzU5LCJwb2ludGluZ2luZGV4bGVmdHdoaXRlIiw5NzU2LCJwb2ludGluZ2luZGV4cmlnaHR3aGl0ZSIsOTc1OCwicG9pbnRpbmdpbmRleHVwd2hpdGUiLDk3NTcsInBva2F0YWthbmEiLDEyNTA5LCJwb3BsYXRoYWkiLDM2MTEsInBvc3RhbG1hcmsiLDEyMzA2LCJwb3N0YWxtYXJrZmFjZSIsMTIzMjAsInBwYXJlbiIsOTM4NywicHJlY2VkZXMiLDg4MjYsInByZXNjcmlwdGlvbiIsODQ3OCwicHJpbWVtb2QiLDY5NywicHJpbWVyZXZlcnNlZCIsODI0NSwicHJvZHVjdCIsODcxOSwicHJvamVjdGl2ZSIsODk2NSwicHJvbG9uZ2Vka2FuYSIsMTI1NDAsInByb3BlbGxvciIsODk4NCwicHJvcGVyc3Vic2V0Iiw4ODM0LCJwcm9wZXJzdXBlcnNldCIsODgzNSwicHJvcG9ydGlvbiIsODc1OSwicHJvcG9ydGlvbmFsIiw4NzMzLCJwc2kiLDk2OCwicHNpY3lyaWxsaWMiLDExMzcsInBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1OCwicHNzcXVhcmUiLDEzMjMyLCJwdWhpcmFnYW5hIiwxMjQwNywicHVrYXRha2FuYSIsMTI1MDMsInB2c3F1YXJlIiwxMzIzNiwicHdzcXVhcmUiLDEzMjQyLCJxIiwxMTMsInFhZGV2YSIsMjM5MiwicWFkbWFoZWJyZXciLDE0NDgsInFhZmFyYWJpYyIsMTYwMiwicWFmZmluYWxhcmFiaWMiLDY1MjM4LCJxYWZpbml0aWFsYXJhYmljIiw2NTIzOSwicWFmbWVkaWFsYXJhYmljIiw2NTI0MCwicWFtYXRzIiwxNDY0LCJxYW1hdHMxMCIsMTQ2NCwicWFtYXRzMWEiLDE0NjQsInFhbWF0czFjIiwxNDY0LCJxYW1hdHMyNyIsMTQ2NCwicWFtYXRzMjkiLDE0NjQsInFhbWF0czMzIiwxNDY0LCJxYW1hdHNkZSIsMTQ2NCwicWFtYXRzaGVicmV3IiwxNDY0LCJxYW1hdHNuYXJyb3doZWJyZXciLDE0NjQsInFhbWF0c3FhdGFuaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbm5hcnJvd2hlYnJldyIsMTQ2NCwicWFtYXRzcWF0YW5xdWFydGVyaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbndpZGVoZWJyZXciLDE0NjQsInFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NjQsInFhbWF0c3dpZGVoZWJyZXciLDE0NjQsInFhcm5leXBhcmFoZWJyZXciLDE0MzksInFib3BvbW9mbyIsMTI1NjEsInFjaXJjbGUiLDk0NDAsInFob29rIiw2NzIsInFtb25vc3BhY2UiLDY1MzYxLCJxb2YiLDE1MTEsInFvZmRhZ2VzaCIsNjQzMjcsInFvZmRhZ2VzaGhlYnJldyIsNjQzMjcsInFvZmhlYnJldyIsMTUxMSwicXBhcmVuIiw5Mzg4LCJxdWFydGVybm90ZSIsOTgzMywicXVidXRzIiwxNDY3LCJxdWJ1dHMxOCIsMTQ2NywicXVidXRzMjUiLDE0NjcsInF1YnV0czMxIiwxNDY3LCJxdWJ1dHNoZWJyZXciLDE0NjcsInF1YnV0c25hcnJvd2hlYnJldyIsMTQ2NywicXVidXRzcXVhcnRlcmhlYnJldyIsMTQ2NywicXVidXRzd2lkZWhlYnJldyIsMTQ2NywicXVlc3Rpb24iLDYzLCJxdWVzdGlvbmFyYWJpYyIsMTU2NywicXVlc3Rpb25hcm1lbmlhbiIsMTM3NCwicXVlc3Rpb25kb3duIiwxOTEsInF1ZXN0aW9uZG93bnNtYWxsIiw2MzQyMywicXVlc3Rpb25ncmVlayIsODk0LCJxdWVzdGlvbm1vbm9zcGFjZSIsNjUzMTEsInF1ZXN0aW9uc21hbGwiLDYzMjk1LCJxdW90ZWRibCIsMzQsInF1b3RlZGJsYmFzZSIsODIyMiwicXVvdGVkYmxsZWZ0Iiw4MjIwLCJxdW90ZWRibG1vbm9zcGFjZSIsNjUyODIsInF1b3RlZGJscHJpbWUiLDEyMzE4LCJxdW90ZWRibHByaW1lcmV2ZXJzZWQiLDEyMzE3LCJxdW90ZWRibHJpZ2h0Iiw4MjIxLCJxdW90ZWxlZnQiLDgyMTYsInF1b3RlbGVmdHJldmVyc2VkIiw4MjE5LCJxdW90ZXJldmVyc2VkIiw4MjE5LCJxdW90ZXJpZ2h0Iiw4MjE3LCJxdW90ZXJpZ2h0biIsMzI5LCJxdW90ZXNpbmdsYmFzZSIsODIxOCwicXVvdGVzaW5nbGUiLDM5LCJxdW90ZXNpbmdsZW1vbm9zcGFjZSIsNjUyODcsInIiLDExNCwicmFhcm1lbmlhbiIsMTQwNCwicmFiZW5nYWxpIiwyNDgwLCJyYWN1dGUiLDM0MSwicmFkZXZhIiwyMzUyLCJyYWRpY2FsIiw4NzMwLCJyYWRpY2FsZXgiLDYzNzE3LCJyYWRvdmVyc3NxdWFyZSIsMTMyMzAsInJhZG92ZXJzc3F1YXJlZHNxdWFyZSIsMTMyMzEsInJhZHNxdWFyZSIsMTMyMjksInJhZmUiLDE0NzEsInJhZmVoZWJyZXciLDE0NzEsInJhZ3VqYXJhdGkiLDI3MzYsInJhZ3VybXVraGkiLDI2MDgsInJhaGlyYWdhbmEiLDEyNDI1LCJyYWthdGFrYW5hIiwxMjUyMSwicmFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzEsInJhbG93ZXJkaWFnb25hbGJlbmdhbGkiLDI1NDUsInJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpIiwyNTQ0LCJyYW1zaG9ybiIsNjEyLCJyYXRpbyIsODc1OCwicmJvcG9tb2ZvIiwxMjU2NiwicmNhcm9uIiwzNDUsInJjZWRpbGxhIiwzNDMsInJjaXJjbGUiLDk0NDEsInJjb21tYWFjY2VudCIsMzQzLCJyZGJsZ3JhdmUiLDUyOSwicmRvdGFjY2VudCIsNzc2OSwicmRvdGJlbG93Iiw3NzcxLCJyZG90YmVsb3dtYWNyb24iLDc3NzMsInJlZmVyZW5jZW1hcmsiLDgyNTEsInJlZmxleHN1YnNldCIsODgzOCwicmVmbGV4c3VwZXJzZXQiLDg4MzksInJlZ2lzdGVyZWQiLDE3NCwicmVnaXN0ZXJzYW5zIiw2MzcyMCwicmVnaXN0ZXJzZXJpZiIsNjMxOTQsInJlaGFyYWJpYyIsMTU4NSwicmVoYXJtZW5pYW4iLDE0MDgsInJlaGZpbmFsYXJhYmljIiw2NTE5OCwicmVoaXJhZ2FuYSIsMTI0MjgsInJla2F0YWthbmEiLDEyNTI0LCJyZWthdGFrYW5haGFsZndpZHRoIiw2NTQzNCwicmVzaCIsMTUxMiwicmVzaGRhZ2VzaGhlYnJldyIsNjQzMjgsInJlc2hoZWJyZXciLDE1MTIsInJldmVyc2VkdGlsZGUiLDg3NjUsInJldmlhaGVicmV3IiwxNDMxLCJyZXZpYW11Z3Jhc2hoZWJyZXciLDE0MzEsInJldmxvZ2ljYWxub3QiLDg5NzYsInJmaXNoaG9vayIsNjM4LCJyZmlzaGhvb2tyZXZlcnNlZCIsNjM5LCJyaGFiZW5nYWxpIiwyNTI1LCJyaGFkZXZhIiwyMzk3LCJyaG8iLDk2MSwicmhvb2siLDYzNywicmhvb2t0dXJuZWQiLDYzNSwicmhvb2t0dXJuZWRzdXBlcmlvciIsNjkzLCJyaG9zeW1ib2xncmVlayIsMTAwOSwicmhvdGljaG9va21vZCIsNzM0LCJyaWV1bGFjaXJjbGVrb3JlYW4iLDEyOTEzLCJyaWV1bGFwYXJlbmtvcmVhbiIsMTI4MTcsInJpZXVsY2lyY2xla29yZWFuIiwxMjg5OSwicmlldWxoaWV1aGtvcmVhbiIsMTI2MDgsInJpZXVsa2l5ZW9ra29yZWFuIiwxMjYwMiwicmlldWxraXllb2tzaW9za29yZWFuIiwxMjY0OSwicmlldWxrb3JlYW4iLDEyNjAxLCJyaWV1bG1pZXVta29yZWFuIiwxMjYwMywicmlldWxwYW5zaW9za29yZWFuIiwxMjY1MiwicmlldWxwYXJlbmtvcmVhbiIsMTI4MDMsInJpZXVscGhpZXVwaGtvcmVhbiIsMTI2MDcsInJpZXVscGlldXBrb3JlYW4iLDEyNjA0LCJyaWV1bHBpZXVwc2lvc2tvcmVhbiIsMTI2NTEsInJpZXVsc2lvc2tvcmVhbiIsMTI2MDUsInJpZXVsdGhpZXV0aGtvcmVhbiIsMTI2MDYsInJpZXVsdGlrZXV0a29yZWFuIiwxMjY1MCwicmlldWx5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NTMsInJpZ2h0YW5nbGUiLDg3MzUsInJpZ2h0dGFja2JlbG93Y21iIiw3OTMsInJpZ2h0dHJpYW5nbGUiLDg4OTUsInJpaGlyYWdhbmEiLDEyNDI2LCJyaWthdGFrYW5hIiwxMjUyMiwicmlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzIsInJpbmciLDczMCwicmluZ2JlbG93Y21iIiw4MDUsInJpbmdjbWIiLDc3OCwicmluZ2hhbGZsZWZ0Iiw3MDMsInJpbmdoYWxmbGVmdGFybWVuaWFuIiwxMzY5LCJyaW5naGFsZmxlZnRiZWxvd2NtYiIsNzk2LCJyaW5naGFsZmxlZnRjZW50ZXJlZCIsNzIzLCJyaW5naGFsZnJpZ2h0Iiw3MDIsInJpbmdoYWxmcmlnaHRiZWxvd2NtYiIsODI1LCJyaW5naGFsZnJpZ2h0Y2VudGVyZWQiLDcyMiwicmludmVydGVkYnJldmUiLDUzMSwicml0dG9ydXNxdWFyZSIsMTMxMzcsInJsaW5lYmVsb3ciLDc3NzUsInJsb25nbGVnIiw2MzYsInJsb25nbGVndHVybmVkIiw2MzQsInJtb25vc3BhY2UiLDY1MzYyLCJyb2hpcmFnYW5hIiwxMjQyOSwicm9rYXRha2FuYSIsMTI1MjUsInJva2F0YWthbmFoYWxmd2lkdGgiLDY1NDM1LCJyb3J1YXRoYWkiLDM2MTksInJwYXJlbiIsOTM4OSwicnJhYmVuZ2FsaSIsMjUyNCwicnJhZGV2YSIsMjM1MywicnJhZ3VybXVraGkiLDI2NTIsInJyZWhhcmFiaWMiLDE2ODEsInJyZWhmaW5hbGFyYWJpYyIsNjQzOTcsInJydm9jYWxpY2JlbmdhbGkiLDI1MjgsInJydm9jYWxpY2RldmEiLDI0MDAsInJydm9jYWxpY2d1amFyYXRpIiwyNzg0LCJycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNTAwLCJycnZvY2FsaWN2b3dlbHNpZ25kZXZhIiwyMzcyLCJycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aSIsMjc1NiwicnN1cGVyaW9yIiw2MzIxNywicnRibG9jayIsOTYxNiwicnR1cm5lZCIsNjMzLCJydHVybmVkc3VwZXJpb3IiLDY5MiwicnVoaXJhZ2FuYSIsMTI0MjcsInJ1a2F0YWthbmEiLDEyNTIzLCJydWthdGFrYW5haGFsZndpZHRoIiw2NTQzMywicnVwZWVtYXJrYmVuZ2FsaSIsMjU0NiwicnVwZWVzaWduYmVuZ2FsaSIsMjU0NywicnVwaWFoIiw2MzE5NywicnV0aGFpIiwzNjIwLCJydm9jYWxpY2JlbmdhbGkiLDI0NDMsInJ2b2NhbGljZGV2YSIsMjMxNSwicnZvY2FsaWNndWphcmF0aSIsMjY5OSwicnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNDk5LCJydm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDIzNzEsInJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTUsInMiLDExNSwic2FiZW5nYWxpIiwyNDg4LCJzYWN1dGUiLDM0Nywic2FjdXRlZG90YWNjZW50Iiw3NzgxLCJzYWRhcmFiaWMiLDE1ODksInNhZGV2YSIsMjM2MCwic2FkZmluYWxhcmFiaWMiLDY1MjEwLCJzYWRpbml0aWFsYXJhYmljIiw2NTIxMSwic2FkbWVkaWFsYXJhYmljIiw2NTIxMiwic2FndWphcmF0aSIsMjc0NCwic2FndXJtdWtoaSIsMjYxNiwic2FoaXJhZ2FuYSIsMTIzNzMsInNha2F0YWthbmEiLDEyNDY5LCJzYWthdGFrYW5haGFsZndpZHRoIiw2NTQwMywic2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYyIsNjUwMTgsInNhbWVraCIsMTUwNSwic2FtZWtoZGFnZXNoIiw2NDMyMSwic2FtZWtoZGFnZXNoaGVicmV3Iiw2NDMyMSwic2FtZWtoaGVicmV3IiwxNTA1LCJzYXJhYWF0aGFpIiwzNjM0LCJzYXJhYWV0aGFpIiwzNjQ5LCJzYXJhYWltYWltYWxhaXRoYWkiLDM2NTIsInNhcmFhaW1haW11YW50aGFpIiwzNjUxLCJzYXJhYW10aGFpIiwzNjM1LCJzYXJhYXRoYWkiLDM2MzIsInNhcmFldGhhaSIsMzY0OCwic2FyYWlpbGVmdHRoYWkiLDYzNjIyLCJzYXJhaWl0aGFpIiwzNjM3LCJzYXJhaWxlZnR0aGFpIiw2MzYyMSwic2FyYWl0aGFpIiwzNjM2LCJzYXJhb3RoYWkiLDM2NTAsInNhcmF1ZWVsZWZ0dGhhaSIsNjM2MjQsInNhcmF1ZWV0aGFpIiwzNjM5LCJzYXJhdWVsZWZ0dGhhaSIsNjM2MjMsInNhcmF1ZXRoYWkiLDM2MzgsInNhcmF1dGhhaSIsMzY0MCwic2FyYXV1dGhhaSIsMzY0MSwic2JvcG9tb2ZvIiwxMjU2OSwic2Nhcm9uIiwzNTMsInNjYXJvbmRvdGFjY2VudCIsNzc4Mywic2NlZGlsbGEiLDM1MSwic2Nod2EiLDYwMSwic2Nod2FjeXJpbGxpYyIsMTI0MSwic2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQzLCJzY2h3YWhvb2siLDYwMiwic2NpcmNsZSIsOTQ0Miwic2NpcmN1bWZsZXgiLDM0OSwic2NvbW1hYWNjZW50Iiw1MzcsInNkb3RhY2NlbnQiLDc3NzcsInNkb3RiZWxvdyIsNzc3OSwic2RvdGJlbG93ZG90YWNjZW50Iiw3Nzg1LCJzZWFndWxsYmVsb3djbWIiLDgyOCwic2Vjb25kIiw4MjQzLCJzZWNvbmR0b25lY2hpbmVzZSIsNzE0LCJzZWN0aW9uIiwxNjcsInNlZW5hcmFiaWMiLDE1ODcsInNlZW5maW5hbGFyYWJpYyIsNjUyMDIsInNlZW5pbml0aWFsYXJhYmljIiw2NTIwMywic2Vlbm1lZGlhbGFyYWJpYyIsNjUyMDQsInNlZ29sIiwxNDYyLCJzZWdvbDEzIiwxNDYyLCJzZWdvbDFmIiwxNDYyLCJzZWdvbDJjIiwxNDYyLCJzZWdvbGhlYnJldyIsMTQ2Miwic2Vnb2xuYXJyb3doZWJyZXciLDE0NjIsInNlZ29scXVhcnRlcmhlYnJldyIsMTQ2Miwic2Vnb2x0YWhlYnJldyIsMTQyNiwic2Vnb2x3aWRlaGVicmV3IiwxNDYyLCJzZWhhcm1lbmlhbiIsMTQwNSwic2VoaXJhZ2FuYSIsMTIzNzksInNla2F0YWthbmEiLDEyNDc1LCJzZWthdGFrYW5haGFsZndpZHRoIiw2NTQwNiwic2VtaWNvbG9uIiw1OSwic2VtaWNvbG9uYXJhYmljIiwxNTYzLCJzZW1pY29sb25tb25vc3BhY2UiLDY1MzA3LCJzZW1pY29sb25zbWFsbCIsNjUxMDgsInNlbWl2b2ljZWRtYXJra2FuYSIsMTI0NDQsInNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aCIsNjU0MzksInNlbnRpc3F1YXJlIiwxMzA5MCwic2VudG9zcXVhcmUiLDEzMDkxLCJzZXZlbiIsNTUsInNldmVuYXJhYmljIiwxNjM5LCJzZXZlbmJlbmdhbGkiLDI1NDEsInNldmVuY2lyY2xlIiw5MzE4LCJzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI4LCJzZXZlbmRldmEiLDI0MTMsInNldmVuZWlnaHRocyIsODU0Miwic2V2ZW5ndWphcmF0aSIsMjc5Nywic2V2ZW5ndXJtdWtoaSIsMjY2OSwic2V2ZW5oYWNrYXJhYmljIiwxNjM5LCJzZXZlbmhhbmd6aG91IiwxMjMyNywic2V2ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOCwic2V2ZW5pbmZlcmlvciIsODMyNywic2V2ZW5tb25vc3BhY2UiLDY1MzAzLCJzZXZlbm9sZHN0eWxlIiw2MzI4Nywic2V2ZW5wYXJlbiIsOTMzOCwic2V2ZW5wZXJpb2QiLDkzNTgsInNldmVucGVyc2lhbiIsMTc4Mywic2V2ZW5yb21hbiIsODU2Niwic2V2ZW5zdXBlcmlvciIsODMxMSwic2V2ZW50ZWVuY2lyY2xlIiw5MzI4LCJzZXZlbnRlZW5wYXJlbiIsOTM0OCwic2V2ZW50ZWVucGVyaW9kIiw5MzY4LCJzZXZlbnRoYWkiLDM2NzEsInNmdGh5cGhlbiIsMTczLCJzaGFhcm1lbmlhbiIsMTM5OSwic2hhYmVuZ2FsaSIsMjQ4Niwic2hhY3lyaWxsaWMiLDEwOTYsInNoYWRkYWFyYWJpYyIsMTYxNywic2hhZGRhZGFtbWFhcmFiaWMiLDY0NjA5LCJzaGFkZGFkYW1tYXRhbmFyYWJpYyIsNjQ2MDYsInNoYWRkYWZhdGhhYXJhYmljIiw2NDYwOCwic2hhZGRha2FzcmFhcmFiaWMiLDY0NjEwLCJzaGFkZGFrYXNyYXRhbmFyYWJpYyIsNjQ2MDcsInNoYWRlIiw5NjE4LCJzaGFkZWRhcmsiLDk2MTksInNoYWRlbGlnaHQiLDk2MTcsInNoYWRlbWVkaXVtIiw5NjE4LCJzaGFkZXZhIiwyMzU4LCJzaGFndWphcmF0aSIsMjc0Miwic2hhZ3VybXVraGkiLDI2MTQsInNoYWxzaGVsZXRoZWJyZXciLDE0MjcsInNoYm9wb21vZm8iLDEyNTY1LCJzaGNoYWN5cmlsbGljIiwxMDk3LCJzaGVlbmFyYWJpYyIsMTU4OCwic2hlZW5maW5hbGFyYWJpYyIsNjUyMDYsInNoZWVuaW5pdGlhbGFyYWJpYyIsNjUyMDcsInNoZWVubWVkaWFsYXJhYmljIiw2NTIwOCwic2hlaWNvcHRpYyIsOTk1LCJzaGVxZWwiLDgzNjIsInNoZXFlbGhlYnJldyIsODM2Miwic2hldmEiLDE0NTYsInNoZXZhMTE1IiwxNDU2LCJzaGV2YTE1IiwxNDU2LCJzaGV2YTIyIiwxNDU2LCJzaGV2YTJlIiwxNDU2LCJzaGV2YWhlYnJldyIsMTQ1Niwic2hldmFuYXJyb3doZWJyZXciLDE0NTYsInNoZXZhcXVhcnRlcmhlYnJldyIsMTQ1Niwic2hldmF3aWRlaGVicmV3IiwxNDU2LCJzaGhhY3lyaWxsaWMiLDEyMTEsInNoaW1hY29wdGljIiwxMDA1LCJzaGluIiwxNTEzLCJzaGluZGFnZXNoIiw2NDMyOSwic2hpbmRhZ2VzaGhlYnJldyIsNjQzMjksInNoaW5kYWdlc2hzaGluZG90Iiw2NDMwMCwic2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXciLDY0MzAwLCJzaGluZGFnZXNoc2luZG90Iiw2NDMwMSwic2hpbmRhZ2VzaHNpbmRvdGhlYnJldyIsNjQzMDEsInNoaW5kb3RoZWJyZXciLDE0NzMsInNoaW5oZWJyZXciLDE1MTMsInNoaW5zaGluZG90Iiw2NDI5OCwic2hpbnNoaW5kb3RoZWJyZXciLDY0Mjk4LCJzaGluc2luZG90Iiw2NDI5OSwic2hpbnNpbmRvdGhlYnJldyIsNjQyOTksInNob29rIiw2NDIsInNpZ21hIiw5NjMsInNpZ21hMSIsOTYyLCJzaWdtYWZpbmFsIiw5NjIsInNpZ21hbHVuYXRlc3ltYm9sZ3JlZWsiLDEwMTAsInNpaGlyYWdhbmEiLDEyMzc1LCJzaWthdGFrYW5hIiwxMjQ3MSwic2lrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDQsInNpbHVxaGVicmV3IiwxNDY5LCJzaWx1cWxlZnRoZWJyZXciLDE0NjksInNpbWlsYXIiLDg3NjQsInNpbmRvdGhlYnJldyIsMTQ3NCwic2lvc2FjaXJjbGVrb3JlYW4iLDEyOTE2LCJzaW9zYXBhcmVua29yZWFuIiwxMjgyMCwic2lvc2NpZXVja29yZWFuIiwxMjY3MCwic2lvc2NpcmNsZWtvcmVhbiIsMTI5MDIsInNpb3NraXllb2trb3JlYW4iLDEyNjY2LCJzaW9za29yZWFuIiwxMjYxMywic2lvc25pZXVua29yZWFuIiwxMjY2Nywic2lvc3BhcmVua29yZWFuIiwxMjgwNiwic2lvc3BpZXVwa29yZWFuIiwxMjY2OSwic2lvc3Rpa2V1dGtvcmVhbiIsMTI2NjgsInNpeCIsNTQsInNpeGFyYWJpYyIsMTYzOCwic2l4YmVuZ2FsaSIsMjU0MCwic2l4Y2lyY2xlIiw5MzE3LCJzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNywic2l4ZGV2YSIsMjQxMiwic2l4Z3VqYXJhdGkiLDI3OTYsInNpeGd1cm11a2hpIiwyNjY4LCJzaXhoYWNrYXJhYmljIiwxNjM4LCJzaXhoYW5nemhvdSIsMTIzMjYsInNpeGlkZW9ncmFwaGljcGFyZW4iLDEyODM3LCJzaXhpbmZlcmlvciIsODMyNiwic2l4bW9ub3NwYWNlIiw2NTMwMiwic2l4b2xkc3R5bGUiLDYzMjg2LCJzaXhwYXJlbiIsOTMzNywic2l4cGVyaW9kIiw5MzU3LCJzaXhwZXJzaWFuIiwxNzgyLCJzaXhyb21hbiIsODU2NSwic2l4c3VwZXJpb3IiLDgzMTAsInNpeHRlZW5jaXJjbGUiLDkzMjcsInNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSIsMjU1Mywic2l4dGVlbnBhcmVuIiw5MzQ3LCJzaXh0ZWVucGVyaW9kIiw5MzY3LCJzaXh0aGFpIiwzNjcwLCJzbGFzaCIsNDcsInNsYXNobW9ub3NwYWNlIiw2NTI5NSwic2xvbmciLDM4Mywic2xvbmdkb3RhY2NlbnQiLDc4MzUsInNtaWxlZmFjZSIsOTc4Niwic21vbm9zcGFjZSIsNjUzNjMsInNvZnBhc3VxaGVicmV3IiwxNDc1LCJzb2Z0aHlwaGVuIiwxNzMsInNvZnRzaWduY3lyaWxsaWMiLDExMDAsInNvaGlyYWdhbmEiLDEyMzgxLCJzb2thdGFrYW5hIiwxMjQ3Nywic29rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDcsInNvbGlkdXNsb25nb3ZlcmxheWNtYiIsODI0LCJzb2xpZHVzc2hvcnRvdmVybGF5Y21iIiw4MjMsInNvcnVzaXRoYWkiLDM2MjUsInNvc2FsYXRoYWkiLDM2MjQsInNvc290aGFpIiwzNTk1LCJzb3N1YXRoYWkiLDM2MjYsInNwYWNlIiwzMiwic3BhY2VoYWNrYXJhYmljIiwzMiwic3BhZGUiLDk4MjQsInNwYWRlc3VpdGJsYWNrIiw5ODI0LCJzcGFkZXN1aXR3aGl0ZSIsOTgyOCwic3BhcmVuIiw5MzkwLCJzcXVhcmViZWxvd2NtYiIsODI3LCJzcXVhcmVjYyIsMTMyNTIsInNxdWFyZWNtIiwxMzIxMywic3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTY0MSwic3F1YXJlaG9yaXpvbnRhbGZpbGwiLDk2MzYsInNxdWFyZWtnIiwxMzE5OSwic3F1YXJla20iLDEzMjE0LCJzcXVhcmVrbWNhcGl0YWwiLDEzMjYyLCJzcXVhcmVsbiIsMTMyNjUsInNxdWFyZWxvZyIsMTMyNjYsInNxdWFyZW1nIiwxMzE5OCwic3F1YXJlbWlsIiwxMzI2OSwic3F1YXJlbW0iLDEzMjEyLCJzcXVhcmVtc3F1YXJlZCIsMTMyMTcsInNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTYzOCwic3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCIsOTYzOSwic3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbCIsOTY0MCwic3F1YXJldmVydGljYWxmaWxsIiw5NjM3LCJzcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrIiw5NjM1LCJzcnNxdWFyZSIsMTMyNzUsInNzYWJlbmdhbGkiLDI0ODcsInNzYWRldmEiLDIzNTksInNzYWd1amFyYXRpIiwyNzQzLCJzc2FuZ2NpZXVja29yZWFuIiwxMjYxNywic3NhbmdoaWV1aGtvcmVhbiIsMTI2NzcsInNzYW5naWV1bmdrb3JlYW4iLDEyNjcyLCJzc2FuZ2tpeWVva2tvcmVhbiIsMTI1OTQsInNzYW5nbmlldW5rb3JlYW4iLDEyNjQ1LCJzc2FuZ3BpZXVwa29yZWFuIiwxMjYxMSwic3NhbmdzaW9za29yZWFuIiwxMjYxNCwic3Nhbmd0aWtldXRrb3JlYW4iLDEyNjAwLCJzc3VwZXJpb3IiLDYzMjE4LCJzdGVybGluZyIsMTYzLCJzdGVybGluZ21vbm9zcGFjZSIsNjU1MDUsInN0cm9rZWxvbmdvdmVybGF5Y21iIiw4MjIsInN0cm9rZXNob3J0b3ZlcmxheWNtYiIsODIxLCJzdWJzZXQiLDg4MzQsInN1YnNldG5vdGVxdWFsIiw4ODQyLCJzdWJzZXRvcmVxdWFsIiw4ODM4LCJzdWNjZWVkcyIsODgyNywic3VjaHRoYXQiLDg3MTUsInN1aGlyYWdhbmEiLDEyMzc3LCJzdWthdGFrYW5hIiwxMjQ3Mywic3VrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDUsInN1a3VuYXJhYmljIiwxNjE4LCJzdW1tYXRpb24iLDg3MjEsInN1biIsOTc4OCwic3VwZXJzZXQiLDg4MzUsInN1cGVyc2V0bm90ZXF1YWwiLDg4NDMsInN1cGVyc2V0b3JlcXVhbCIsODgzOSwic3ZzcXVhcmUiLDEzMjc2LCJzeW91d2FlcmFzcXVhcmUiLDEzMTgwLCJ0IiwxMTYsInRhYmVuZ2FsaSIsMjQ2OCwidGFja2Rvd24iLDg4NjgsInRhY2tsZWZ0Iiw4ODY3LCJ0YWRldmEiLDIzNDAsInRhZ3VqYXJhdGkiLDI3MjQsInRhZ3VybXVraGkiLDI1OTYsInRhaGFyYWJpYyIsMTU5MSwidGFoZmluYWxhcmFiaWMiLDY1MjE4LCJ0YWhpbml0aWFsYXJhYmljIiw2NTIxOSwidGFoaXJhZ2FuYSIsMTIzODMsInRhaG1lZGlhbGFyYWJpYyIsNjUyMjAsInRhaXN5b3VlcmFzcXVhcmUiLDEzMTgxLCJ0YWthdGFrYW5hIiwxMjQ3OSwidGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDgsInRhdHdlZWxhcmFiaWMiLDE2MDAsInRhdSIsOTY0LCJ0YXYiLDE1MTQsInRhdmRhZ2VzIiw2NDMzMCwidGF2ZGFnZXNoIiw2NDMzMCwidGF2ZGFnZXNoaGVicmV3Iiw2NDMzMCwidGF2aGVicmV3IiwxNTE0LCJ0YmFyIiwzNTksInRib3BvbW9mbyIsMTI1NTQsInRjYXJvbiIsMzU3LCJ0Y2N1cmwiLDY4MCwidGNlZGlsbGEiLDM1NSwidGNoZWhhcmFiaWMiLDE2NzAsInRjaGVoZmluYWxhcmFiaWMiLDY0Mzc5LCJ0Y2hlaGluaXRpYWxhcmFiaWMiLDY0MzgwLCJ0Y2hlaG1lZGlhbGFyYWJpYyIsNjQzODEsInRjaXJjbGUiLDk0NDMsInRjaXJjdW1mbGV4YmVsb3ciLDc3OTMsInRjb21tYWFjY2VudCIsMzU1LCJ0ZGllcmVzaXMiLDc4MzEsInRkb3RhY2NlbnQiLDc3ODcsInRkb3RiZWxvdyIsNzc4OSwidGVjeXJpbGxpYyIsMTA5MCwidGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NywidGVoYXJhYmljIiwxNTc4LCJ0ZWhmaW5hbGFyYWJpYyIsNjUxNzQsInRlaGhhaGluaXRpYWxhcmFiaWMiLDY0Njc0LCJ0ZWhoYWhpc29sYXRlZGFyYWJpYyIsNjQ1MjQsInRlaGluaXRpYWxhcmFiaWMiLDY1MTc1LCJ0ZWhpcmFnYW5hIiwxMjM5MCwidGVoamVlbWluaXRpYWxhcmFiaWMiLDY0NjczLCJ0ZWhqZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIzLCJ0ZWhtYXJidXRhYXJhYmljIiwxNTc3LCJ0ZWhtYXJidXRhZmluYWxhcmFiaWMiLDY1MTcyLCJ0ZWhtZWRpYWxhcmFiaWMiLDY1MTc2LCJ0ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ2NzYsInRlaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1MjYsInRlaG5vb25maW5hbGFyYWJpYyIsNjQ2MjcsInRla2F0YWthbmEiLDEyNDg2LCJ0ZWthdGFrYW5haGFsZndpZHRoIiw2NTQxMSwidGVsZXBob25lIiw4NDgxLCJ0ZWxlcGhvbmVibGFjayIsOTc0MiwidGVsaXNoYWdlZG9sYWhlYnJldyIsMTQ0MCwidGVsaXNoYXFldGFuYWhlYnJldyIsMTQ0OSwidGVuY2lyY2xlIiw5MzIxLCJ0ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjg0MSwidGVucGFyZW4iLDkzNDEsInRlbnBlcmlvZCIsOTM2MSwidGVucm9tYW4iLDg1NjksInRlc2giLDY3OSwidGV0IiwxNDk2LCJ0ZXRkYWdlc2giLDY0MzEyLCJ0ZXRkYWdlc2hoZWJyZXciLDY0MzEyLCJ0ZXRoZWJyZXciLDE0OTYsInRldHNlY3lyaWxsaWMiLDEyMDUsInRldmlyaGVicmV3IiwxNDM1LCJ0ZXZpcmxlZnRoZWJyZXciLDE0MzUsInRoYWJlbmdhbGkiLDI0NjksInRoYWRldmEiLDIzNDEsInRoYWd1amFyYXRpIiwyNzI1LCJ0aGFndXJtdWtoaSIsMjU5NywidGhhbGFyYWJpYyIsMTU4NCwidGhhbGZpbmFsYXJhYmljIiw2NTE5NiwidGhhbnRoYWtoYXRsb3dsZWZ0dGhhaSIsNjM2NDAsInRoYW50aGFraGF0bG93cmlnaHR0aGFpIiw2MzYzOSwidGhhbnRoYWtoYXR0aGFpIiwzNjYwLCJ0aGFudGhha2hhdHVwcGVybGVmdHRoYWkiLDYzNjM4LCJ0aGVoYXJhYmljIiwxNTc5LCJ0aGVoZmluYWxhcmFiaWMiLDY1MTc4LCJ0aGVoaW5pdGlhbGFyYWJpYyIsNjUxNzksInRoZWhtZWRpYWxhcmFiaWMiLDY1MTgwLCJ0aGVyZWV4aXN0cyIsODcwNywidGhlcmVmb3JlIiw4NzU2LCJ0aGV0YSIsOTUyLCJ0aGV0YTEiLDk3NywidGhldGFzeW1ib2xncmVlayIsOTc3LCJ0aGlldXRoYWNpcmNsZWtvcmVhbiIsMTI5MjEsInRoaWV1dGhhcGFyZW5rb3JlYW4iLDEyODI1LCJ0aGlldXRoY2lyY2xla29yZWFuIiwxMjkwNywidGhpZXV0aGtvcmVhbiIsMTI2MjAsInRoaWV1dGhwYXJlbmtvcmVhbiIsMTI4MTEsInRoaXJ0ZWVuY2lyY2xlIiw5MzI0LCJ0aGlydGVlbnBhcmVuIiw5MzQ0LCJ0aGlydGVlbnBlcmlvZCIsOTM2NCwidGhvbmFuZ21vbnRob3RoYWkiLDM2MDEsInRob29rIiw0MjksInRob3BodXRoYW90aGFpIiwzNjAyLCJ0aG9ybiIsMjU0LCJ0aG90aGFoYW50aGFpIiwzNjA3LCJ0aG90aGFudGhhaSIsMzYwMCwidGhvdGhvbmd0aGFpIiwzNjA4LCJ0aG90aHVuZ3RoYWkiLDM2MDYsInRob3VzYW5kY3lyaWxsaWMiLDExNTQsInRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYyIsMTY0NCwidGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiIsMTY0NCwidGhyZWUiLDUxLCJ0aHJlZWFyYWJpYyIsMTYzNSwidGhyZWViZW5nYWxpIiwyNTM3LCJ0aHJlZWNpcmNsZSIsOTMxNCwidGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNCwidGhyZWVkZXZhIiwyNDA5LCJ0aHJlZWVpZ2h0aHMiLDg1NDAsInRocmVlZ3VqYXJhdGkiLDI3OTMsInRocmVlZ3VybXVraGkiLDI2NjUsInRocmVlaGFja2FyYWJpYyIsMTYzNSwidGhyZWVoYW5nemhvdSIsMTIzMjMsInRocmVlaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzQsInRocmVlaW5mZXJpb3IiLDgzMjMsInRocmVlbW9ub3NwYWNlIiw2NTI5OSwidGhyZWVudW1lcmF0b3JiZW5nYWxpIiwyNTUwLCJ0aHJlZW9sZHN0eWxlIiw2MzI4MywidGhyZWVwYXJlbiIsOTMzNCwidGhyZWVwZXJpb2QiLDkzNTQsInRocmVlcGVyc2lhbiIsMTc3OSwidGhyZWVxdWFydGVycyIsMTkwLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiw2MzE5OCwidGhyZWVyb21hbiIsODU2MiwidGhyZWVzdXBlcmlvciIsMTc5LCJ0aHJlZXRoYWkiLDM2NjcsInRoenNxdWFyZSIsMTMyMDQsInRpaGlyYWdhbmEiLDEyMzg1LCJ0aWthdGFrYW5hIiwxMjQ4MSwidGlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDksInRpa2V1dGFjaXJjbGVrb3JlYW4iLDEyOTEyLCJ0aWtldXRhcGFyZW5rb3JlYW4iLDEyODE2LCJ0aWtldXRjaXJjbGVrb3JlYW4iLDEyODk4LCJ0aWtldXRrb3JlYW4iLDEyNTk5LCJ0aWtldXRwYXJlbmtvcmVhbiIsMTI4MDIsInRpbGRlIiw3MzIsInRpbGRlYmVsb3djbWIiLDgxNiwidGlsZGVjbWIiLDc3MSwidGlsZGVjb21iIiw3NzEsInRpbGRlZG91YmxlY21iIiw4NjQsInRpbGRlb3BlcmF0b3IiLDg3NjQsInRpbGRlb3ZlcmxheWNtYiIsODIwLCJ0aWxkZXZlcnRpY2FsY21iIiw4MzAsInRpbWVzY2lyY2xlIiw4ODU1LCJ0aXBlaGFoZWJyZXciLDE0MzAsInRpcGVoYWxlZnRoZWJyZXciLDE0MzAsInRpcHBpZ3VybXVraGkiLDI2NzIsInRpdGxvY3lyaWxsaWNjbWIiLDExNTUsInRpd25hcm1lbmlhbiIsMTQwNywidGxpbmViZWxvdyIsNzc5MSwidG1vbm9zcGFjZSIsNjUzNjQsInRvYXJtZW5pYW4iLDEzODUsInRvaGlyYWdhbmEiLDEyMzkyLCJ0b2thdGFrYW5hIiwxMjQ4OCwidG9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTIsInRvbmViYXJleHRyYWhpZ2htb2QiLDc0MSwidG9uZWJhcmV4dHJhbG93bW9kIiw3NDUsInRvbmViYXJoaWdobW9kIiw3NDIsInRvbmViYXJsb3dtb2QiLDc0NCwidG9uZWJhcm1pZG1vZCIsNzQzLCJ0b25lZml2ZSIsNDQ1LCJ0b25lc2l4IiwzODksInRvbmV0d28iLDQyNCwidG9ub3MiLDkwMCwidG9uc3F1YXJlIiwxMzA5NSwidG9wYXRha3RoYWkiLDM1OTksInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMDgsInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsIiw2NTExNywidG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDgxLCJ0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0IiwxMjMwOSwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsIiw2NTExOCwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4MiwidG90YW90aGFpIiwzNjA1LCJ0cGFsYXRhbGhvb2siLDQyNywidHBhcmVuIiw5MzkxLCJ0cmFkZW1hcmsiLDg0ODIsInRyYWRlbWFya3NhbnMiLDYzNzIyLCJ0cmFkZW1hcmtzZXJpZiIsNjMxOTUsInRyZXRyb2ZsZXhob29rIiw2NDgsInRyaWFnZG4iLDk2NjAsInRyaWFnbGYiLDk2NjgsInRyaWFncnQiLDk2NTgsInRyaWFndXAiLDk2NTAsInRzIiw2NzgsInRzYWRpIiwxNTEwLCJ0c2FkaWRhZ2VzaCIsNjQzMjYsInRzYWRpZGFnZXNoaGVicmV3Iiw2NDMyNiwidHNhZGloZWJyZXciLDE1MTAsInRzZWN5cmlsbGljIiwxMDk0LCJ0c2VyZSIsMTQ2MSwidHNlcmUxMiIsMTQ2MSwidHNlcmUxZSIsMTQ2MSwidHNlcmUyYiIsMTQ2MSwidHNlcmVoZWJyZXciLDE0NjEsInRzZXJlbmFycm93aGVicmV3IiwxNDYxLCJ0c2VyZXF1YXJ0ZXJoZWJyZXciLDE0NjEsInRzZXJld2lkZWhlYnJldyIsMTQ2MSwidHNoZWN5cmlsbGljIiwxMTE1LCJ0c3VwZXJpb3IiLDYzMjE5LCJ0dGFiZW5nYWxpIiwyNDYzLCJ0dGFkZXZhIiwyMzM1LCJ0dGFndWphcmF0aSIsMjcxOSwidHRhZ3VybXVraGkiLDI1OTEsInR0ZWhhcmFiaWMiLDE2NTcsInR0ZWhmaW5hbGFyYWJpYyIsNjQzNTksInR0ZWhpbml0aWFsYXJhYmljIiw2NDM2MCwidHRlaG1lZGlhbGFyYWJpYyIsNjQzNjEsInR0aGFiZW5nYWxpIiwyNDY0LCJ0dGhhZGV2YSIsMjMzNiwidHRoYWd1amFyYXRpIiwyNzIwLCJ0dGhhZ3VybXVraGkiLDI1OTIsInR0dXJuZWQiLDY0NywidHVoaXJhZ2FuYSIsMTIzODgsInR1a2F0YWthbmEiLDEyNDg0LCJ0dWthdGFrYW5haGFsZndpZHRoIiw2NTQxMCwidHVzbWFsbGhpcmFnYW5hIiwxMjM4NywidHVzbWFsbGthdGFrYW5hIiwxMjQ4MywidHVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM5MSwidHdlbHZlY2lyY2xlIiw5MzIzLCJ0d2VsdmVwYXJlbiIsOTM0MywidHdlbHZlcGVyaW9kIiw5MzYzLCJ0d2VsdmVyb21hbiIsODU3MSwidHdlbnR5Y2lyY2xlIiw5MzMxLCJ0d2VudHloYW5nemhvdSIsMjEzMTYsInR3ZW50eXBhcmVuIiw5MzUxLCJ0d2VudHlwZXJpb2QiLDkzNzEsInR3byIsNTAsInR3b2FyYWJpYyIsMTYzNCwidHdvYmVuZ2FsaSIsMjUzNiwidHdvY2lyY2xlIiw5MzEzLCJ0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyMywidHdvZGV2YSIsMjQwOCwidHdvZG90ZW5sZWFkZXIiLDgyMjksInR3b2RvdGxlYWRlciIsODIyOSwidHdvZG90bGVhZGVydmVydGljYWwiLDY1MDcyLCJ0d29ndWphcmF0aSIsMjc5MiwidHdvZ3VybXVraGkiLDI2NjQsInR3b2hhY2thcmFiaWMiLDE2MzQsInR3b2hhbmd6aG91IiwxMjMyMiwidHdvaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzMsInR3b2luZmVyaW9yIiw4MzIyLCJ0d29tb25vc3BhY2UiLDY1Mjk4LCJ0d29udW1lcmF0b3JiZW5nYWxpIiwyNTQ5LCJ0d29vbGRzdHlsZSIsNjMyODIsInR3b3BhcmVuIiw5MzMzLCJ0d29wZXJpb2QiLDkzNTMsInR3b3BlcnNpYW4iLDE3NzgsInR3b3JvbWFuIiw4NTYxLCJ0d29zdHJva2UiLDQ0MywidHdvc3VwZXJpb3IiLDE3OCwidHdvdGhhaSIsMzY2NiwidHdvdGhpcmRzIiw4NTMyLCJ1IiwxMTcsInVhY3V0ZSIsMjUwLCJ1YmFyIiw2NDksInViZW5nYWxpIiwyNDQxLCJ1Ym9wb21vZm8iLDEyNTg0LCJ1YnJldmUiLDM2NSwidWNhcm9uIiw0NjgsInVjaXJjbGUiLDk0NDQsInVjaXJjdW1mbGV4IiwyNTEsInVjaXJjdW1mbGV4YmVsb3ciLDc3OTksInVjeXJpbGxpYyIsMTA5MSwidWRhdHRhZGV2YSIsMjM4NSwidWRibGFjdXRlIiwzNjksInVkYmxncmF2ZSIsNTMzLCJ1ZGV2YSIsMjMxMywidWRpZXJlc2lzIiwyNTIsInVkaWVyZXNpc2FjdXRlIiw0NzIsInVkaWVyZXNpc2JlbG93Iiw3Nzk1LCJ1ZGllcmVzaXNjYXJvbiIsNDc0LCJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI2NSwidWRpZXJlc2lzZ3JhdmUiLDQ3NiwidWRpZXJlc2lzbWFjcm9uIiw0NzAsInVkb3RiZWxvdyIsNzkwOSwidWdyYXZlIiwyNDksInVndWphcmF0aSIsMjY5NywidWd1cm11a2hpIiwyNTY5LCJ1aGlyYWdhbmEiLDEyMzU4LCJ1aG9va2Fib3ZlIiw3OTExLCJ1aG9ybiIsNDMyLCJ1aG9ybmFjdXRlIiw3OTEzLCJ1aG9ybmRvdGJlbG93Iiw3OTIxLCJ1aG9ybmdyYXZlIiw3OTE1LCJ1aG9ybmhvb2thYm92ZSIsNzkxNywidWhvcm50aWxkZSIsNzkxOSwidWh1bmdhcnVtbGF1dCIsMzY5LCJ1aHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjcsInVpbnZlcnRlZGJyZXZlIiw1MzUsInVrYXRha2FuYSIsMTI0NTQsInVrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTUsInVrY3lyaWxsaWMiLDExNDUsInVrb3JlYW4iLDEyNjM2LCJ1bWFjcm9uIiwzNjMsInVtYWNyb25jeXJpbGxpYyIsMTI2MywidW1hY3JvbmRpZXJlc2lzIiw3ODAzLCJ1bWF0cmFndXJtdWtoaSIsMjYyNSwidW1vbm9zcGFjZSIsNjUzNjUsInVuZGVyc2NvcmUiLDk1LCJ1bmRlcnNjb3JlZGJsIiw4MjE1LCJ1bmRlcnNjb3JlbW9ub3NwYWNlIiw2NTM0MywidW5kZXJzY29yZXZlcnRpY2FsIiw2NTA3NSwidW5kZXJzY29yZXdhdnkiLDY1MTAzLCJ1bmlvbiIsODc0NiwidW5pdmVyc2FsIiw4NzA0LCJ1b2dvbmVrIiwzNzEsInVwYXJlbiIsOTM5MiwidXBibG9jayIsOTYwMCwidXBwZXJkb3RoZWJyZXciLDE0NzYsInVwc2lsb24iLDk2NSwidXBzaWxvbmRpZXJlc2lzIiw5NzEsInVwc2lsb25kaWVyZXNpc3Rvbm9zIiw5NDQsInVwc2lsb25sYXRpbiIsNjUwLCJ1cHNpbG9udG9ub3MiLDk3MywidXB0YWNrYmVsb3djbWIiLDc5NywidXB0YWNrbW9kIiw3MjQsInVyYWd1cm11a2hpIiwyNjc1LCJ1cmluZyIsMzY3LCJ1c2hvcnRjeXJpbGxpYyIsMTExOCwidXNtYWxsaGlyYWdhbmEiLDEyMzU3LCJ1c21hbGxrYXRha2FuYSIsMTI0NTMsInVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NSwidXN0cmFpZ2h0Y3lyaWxsaWMiLDExOTksInVzdHJhaWdodHN0cm9rZWN5cmlsbGljIiwxMjAxLCJ1dGlsZGUiLDM2MSwidXRpbGRlYWN1dGUiLDc4MDEsInV0aWxkZWJlbG93Iiw3Nzk3LCJ1dWJlbmdhbGkiLDI0NDIsInV1ZGV2YSIsMjMxNCwidXVndWphcmF0aSIsMjY5OCwidXVndXJtdWtoaSIsMjU3MCwidXVtYXRyYWd1cm11a2hpIiwyNjI2LCJ1dXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTgsInV1dm93ZWxzaWduZGV2YSIsMjM3MCwidXV2b3dlbHNpZ25ndWphcmF0aSIsMjc1NCwidXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTcsInV2b3dlbHNpZ25kZXZhIiwyMzY5LCJ1dm93ZWxzaWduZ3VqYXJhdGkiLDI3NTMsInYiLDExOCwidmFkZXZhIiwyMzU3LCJ2YWd1amFyYXRpIiwyNzQxLCJ2YWd1cm11a2hpIiwyNjEzLCJ2YWthdGFrYW5hIiwxMjUzNSwidmF2IiwxNDkzLCJ2YXZkYWdlc2giLDY0MzA5LCJ2YXZkYWdlc2g2NSIsNjQzMDksInZhdmRhZ2VzaGhlYnJldyIsNjQzMDksInZhdmhlYnJldyIsMTQ5MywidmF2aG9sYW0iLDY0MzMxLCJ2YXZob2xhbWhlYnJldyIsNjQzMzEsInZhdnZhdmhlYnJldyIsMTUyMCwidmF2eW9kaGVicmV3IiwxNTIxLCJ2Y2lyY2xlIiw5NDQ1LCJ2ZG90YmVsb3ciLDc4MDcsInZlY3lyaWxsaWMiLDEwNzQsInZlaGFyYWJpYyIsMTcwMCwidmVoZmluYWxhcmFiaWMiLDY0MzYzLCJ2ZWhpbml0aWFsYXJhYmljIiw2NDM2NCwidmVobWVkaWFsYXJhYmljIiw2NDM2NSwidmVrYXRha2FuYSIsMTI1MzcsInZlbnVzIiw5NzkyLCJ2ZXJ0aWNhbGJhciIsMTI0LCJ2ZXJ0aWNhbGxpbmVhYm92ZWNtYiIsNzgxLCJ2ZXJ0aWNhbGxpbmViZWxvd2NtYiIsODA5LCJ2ZXJ0aWNhbGxpbmVsb3dtb2QiLDcxNiwidmVydGljYWxsaW5lbW9kIiw3MTIsInZld2FybWVuaWFuIiwxNDA2LCJ2aG9vayIsNjUxLCJ2aWthdGFrYW5hIiwxMjUzNiwidmlyYW1hYmVuZ2FsaSIsMjUwOSwidmlyYW1hZGV2YSIsMjM4MSwidmlyYW1hZ3VqYXJhdGkiLDI3NjUsInZpc2FyZ2FiZW5nYWxpIiwyNDM1LCJ2aXNhcmdhZGV2YSIsMjMwNywidmlzYXJnYWd1amFyYXRpIiwyNjkxLCJ2bW9ub3NwYWNlIiw2NTM2Niwidm9hcm1lbmlhbiIsMTQwMCwidm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEiLDEyNDQ2LCJ2b2ljZWRpdGVyYXRpb25rYXRha2FuYSIsMTI1NDIsInZvaWNlZG1hcmtrYW5hIiwxMjQ0Mywidm9pY2VkbWFya2thbmFoYWxmd2lkdGgiLDY1NDM4LCJ2b2thdGFrYW5hIiwxMjUzOCwidnBhcmVuIiw5MzkzLCJ2dGlsZGUiLDc4MDUsInZ0dXJuZWQiLDY1MiwidnVoaXJhZ2FuYSIsMTI0MzYsInZ1a2F0YWthbmEiLDEyNTMyLCJ3IiwxMTksIndhY3V0ZSIsNzgxMSwid2Fla29yZWFuIiwxMjYzMywid2FoaXJhZ2FuYSIsMTI0MzEsIndha2F0YWthbmEiLDEyNTI3LCJ3YWthdGFrYW5haGFsZndpZHRoIiw2NTQzNiwid2Frb3JlYW4iLDEyNjMyLCJ3YXNtYWxsaGlyYWdhbmEiLDEyNDMwLCJ3YXNtYWxsa2F0YWthbmEiLDEyNTI2LCJ3YXR0b3NxdWFyZSIsMTMxNDMsIndhdmVkYXNoIiwxMjMxNiwid2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbCIsNjUwNzYsIndhd2FyYWJpYyIsMTYwOCwid2F3ZmluYWxhcmFiaWMiLDY1MjYyLCJ3YXdoYW16YWFib3ZlYXJhYmljIiwxNTcyLCJ3YXdoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU4LCJ3YnNxdWFyZSIsMTMyNzcsIndjaXJjbGUiLDk0NDYsIndjaXJjdW1mbGV4IiwzNzMsIndkaWVyZXNpcyIsNzgxMywid2RvdGFjY2VudCIsNzgxNSwid2RvdGJlbG93Iiw3ODE3LCJ3ZWhpcmFnYW5hIiwxMjQzMywid2VpZXJzdHJhc3MiLDg0NzIsIndla2F0YWthbmEiLDEyNTI5LCJ3ZWtvcmVhbiIsMTI2MzgsIndlb2tvcmVhbiIsMTI2MzcsIndncmF2ZSIsNzgwOSwid2hpdGVidWxsZXQiLDk3MDIsIndoaXRlY2lyY2xlIiw5Njc1LCJ3aGl0ZWNpcmNsZWludmVyc2UiLDk2ODksIndoaXRlY29ybmVyYnJhY2tldGxlZnQiLDEyMzAyLCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDkxLCJ3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCIsMTIzMDMsIndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkyLCJ3aGl0ZWRpYW1vbmQiLDk2NzEsIndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZCIsOTY3Miwid2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlIiw5NjYzLCJ3aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlIiw5NjYxLCJ3aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NjcsIndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGUiLDk2NjUsIndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0IiwxMjMxMCwid2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMxMSwid2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1Nywid2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUiLDk2NTUsIndoaXRlc21hbGxzcXVhcmUiLDk2NDMsIndoaXRlc21pbGluZ2ZhY2UiLDk3ODYsIndoaXRlc3F1YXJlIiw5NjMzLCJ3aGl0ZXN0YXIiLDk3MzQsIndoaXRldGVsZXBob25lIiw5NzQzLCJ3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMTIsIndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCIsMTIzMTMsIndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NTMsIndoaXRldXBwb2ludGluZ3RyaWFuZ2xlIiw5NjUxLCJ3aWhpcmFnYW5hIiwxMjQzMiwid2lrYXRha2FuYSIsMTI1MjgsIndpa29yZWFuIiwxMjYzOSwid21vbm9zcGFjZSIsNjUzNjcsIndvaGlyYWdhbmEiLDEyNDM0LCJ3b2thdGFrYW5hIiwxMjUzMCwid29rYXRha2FuYWhhbGZ3aWR0aCIsNjUzODIsIndvbiIsODM2MSwid29ubW9ub3NwYWNlIiw2NTUxMCwid293YWVudGhhaSIsMzYyMywid3BhcmVuIiw5Mzk0LCJ3cmluZyIsNzgzMiwid3N1cGVyaW9yIiw2OTUsInd0dXJuZWQiLDY1Mywid3lubiIsNDQ3LCJ4IiwxMjAsInhhYm92ZWNtYiIsODI5LCJ4Ym9wb21vZm8iLDEyNTYyLCJ4Y2lyY2xlIiw5NDQ3LCJ4ZGllcmVzaXMiLDc4MjEsInhkb3RhY2NlbnQiLDc4MTksInhlaGFybWVuaWFuIiwxMzg5LCJ4aSIsOTU4LCJ4bW9ub3NwYWNlIiw2NTM2OCwieHBhcmVuIiw5Mzk1LCJ4c3VwZXJpb3IiLDczOSwieSIsMTIxLCJ5YWFkb3NxdWFyZSIsMTMxMzQsInlhYmVuZ2FsaSIsMjQ3OSwieWFjdXRlIiwyNTMsInlhZGV2YSIsMjM1MSwieWFla29yZWFuIiwxMjYyNiwieWFndWphcmF0aSIsMjczNSwieWFndXJtdWtoaSIsMjYwNywieWFoaXJhZ2FuYSIsMTI0MjAsInlha2F0YWthbmEiLDEyNTE2LCJ5YWthdGFrYW5haGFsZndpZHRoIiw2NTQyOCwieWFrb3JlYW4iLDEyNjI1LCJ5YW1ha2thbnRoYWkiLDM2NjIsInlhc21hbGxoaXJhZ2FuYSIsMTI0MTksInlhc21hbGxrYXRha2FuYSIsMTI1MTUsInlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aCIsNjUzODgsInlhdGN5cmlsbGljIiwxMTIzLCJ5Y2lyY2xlIiw5NDQ4LCJ5Y2lyY3VtZmxleCIsMzc1LCJ5ZGllcmVzaXMiLDI1NSwieWRvdGFjY2VudCIsNzgyMywieWRvdGJlbG93Iiw3OTI1LCJ5ZWhhcmFiaWMiLDE2MTAsInllaGJhcnJlZWFyYWJpYyIsMTc0NiwieWVoYmFycmVlZmluYWxhcmFiaWMiLDY0NDMxLCJ5ZWhmaW5hbGFyYWJpYyIsNjUyNjYsInllaGhhbXphYWJvdmVhcmFiaWMiLDE1NzQsInllaGhhbXphYWJvdmVmaW5hbGFyYWJpYyIsNjUxNjIsInllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljIiw2NTE2MywieWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYyIsNjUxNjQsInllaGluaXRpYWxhcmFiaWMiLDY1MjY3LCJ5ZWhtZWRpYWxhcmFiaWMiLDY1MjY4LCJ5ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MzMsInllaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ2MDAsInllaG5vb25maW5hbGFyYWJpYyIsNjQ2NjAsInllaHRocmVlZG90c2JlbG93YXJhYmljIiwxNzQ1LCJ5ZWtvcmVhbiIsMTI2MzAsInllbiIsMTY1LCJ5ZW5tb25vc3BhY2UiLDY1NTA5LCJ5ZW9rb3JlYW4iLDEyNjI5LCJ5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NzgsInllcmFoYmVueW9tb2hlYnJldyIsMTQ1MCwieWVyYWhiZW55b21vbGVmdGhlYnJldyIsMTQ1MCwieWVyaWN5cmlsbGljIiwxMDk5LCJ5ZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MywieWVzaWV1bmdrb3JlYW4iLDEyNjczLCJ5ZXNpZXVuZ3BhbnNpb3Nrb3JlYW4iLDEyNjc1LCJ5ZXNpZXVuZ3Npb3Nrb3JlYW4iLDEyNjc0LCJ5ZXRpdmhlYnJldyIsMTQzNCwieWdyYXZlIiw3OTIzLCJ5aG9vayIsNDM2LCJ5aG9va2Fib3ZlIiw3OTI3LCJ5aWFybWVuaWFuIiwxMzk3LCJ5aWN5cmlsbGljIiwxMTExLCJ5aWtvcmVhbiIsMTI2NDIsInlpbnlhbmciLDk3NzUsInlpd25hcm1lbmlhbiIsMTQxMCwieW1vbm9zcGFjZSIsNjUzNjksInlvZCIsMTQ5NywieW9kZGFnZXNoIiw2NDMxMywieW9kZGFnZXNoaGVicmV3Iiw2NDMxMywieW9kaGVicmV3IiwxNDk3LCJ5b2R5b2RoZWJyZXciLDE1MjIsInlvZHlvZHBhdGFoaGVicmV3Iiw2NDI4NywieW9oaXJhZ2FuYSIsMTI0MjQsInlvaWtvcmVhbiIsMTI2ODEsInlva2F0YWthbmEiLDEyNTIwLCJ5b2thdGFrYW5haGFsZndpZHRoIiw2NTQzMCwieW9rb3JlYW4iLDEyNjM1LCJ5b3NtYWxsaGlyYWdhbmEiLDEyNDIzLCJ5b3NtYWxsa2F0YWthbmEiLDEyNTE5LCJ5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1MzkwLCJ5b3RncmVlayIsMTAxMSwieW95YWVrb3JlYW4iLDEyNjgwLCJ5b3lha29yZWFuIiwxMjY3OSwieW95YWt0aGFpIiwzNjE4LCJ5b3lpbmd0aGFpIiwzNTk3LCJ5cGFyZW4iLDkzOTYsInlwb2dlZ3JhbW1lbmkiLDg5MCwieXBvZ2VncmFtbWVuaWdyZWVrY21iIiw4MzcsInlyIiw0MjIsInlyaW5nIiw3ODMzLCJ5c3VwZXJpb3IiLDY5NiwieXRpbGRlIiw3OTI5LCJ5dHVybmVkIiw2NTQsInl1aGlyYWdhbmEiLDEyNDIyLCJ5dWlrb3JlYW4iLDEyNjg0LCJ5dWthdGFrYW5hIiwxMjUxOCwieXVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjksInl1a29yZWFuIiwxMjY0MCwieXVzYmlnY3lyaWxsaWMiLDExMzEsInl1c2JpZ2lvdGlmaWVkY3lyaWxsaWMiLDExMzMsInl1c2xpdHRsZWN5cmlsbGljIiwxMTI3LCJ5dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljIiwxMTI5LCJ5dXNtYWxsaGlyYWdhbmEiLDEyNDIxLCJ5dXNtYWxsa2F0YWthbmEiLDEyNTE3LCJ5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1Mzg5LCJ5dXlla29yZWFuIiwxMjY4MywieXV5ZW9rb3JlYW4iLDEyNjgyLCJ5eWFiZW5nYWxpIiwyNTI3LCJ5eWFkZXZhIiwyMzk5LCJ6IiwxMjIsInphYXJtZW5pYW4iLDEzODIsInphY3V0ZSIsMzc4LCJ6YWRldmEiLDIzOTUsInphZ3VybXVraGkiLDI2NTEsInphaGFyYWJpYyIsMTU5MiwiemFoZmluYWxhcmFiaWMiLDY1MjIyLCJ6YWhpbml0aWFsYXJhYmljIiw2NTIyMywiemFoaXJhZ2FuYSIsMTIzNzQsInphaG1lZGlhbGFyYWJpYyIsNjUyMjQsInphaW5hcmFiaWMiLDE1ODYsInphaW5maW5hbGFyYWJpYyIsNjUyMDAsInpha2F0YWthbmEiLDEyNDcwLCJ6YXFlZmdhZG9saGVicmV3IiwxNDI5LCJ6YXFlZnFhdGFuaGVicmV3IiwxNDI4LCJ6YXJxYWhlYnJldyIsMTQzMiwiemF5aW4iLDE0OTQsInpheWluZGFnZXNoIiw2NDMxMCwiemF5aW5kYWdlc2hoZWJyZXciLDY0MzEwLCJ6YXlpbmhlYnJldyIsMTQ5NCwiemJvcG9tb2ZvIiwxMjU2NywiemNhcm9uIiwzODIsInpjaXJjbGUiLDk0NDksInpjaXJjdW1mbGV4Iiw3ODI1LCJ6Y3VybCIsNjU3LCJ6ZG90IiwzODAsInpkb3RhY2NlbnQiLDM4MCwiemRvdGJlbG93Iiw3ODI3LCJ6ZWN5cmlsbGljIiwxMDc5LCJ6ZWRlc2NlbmRlcmN5cmlsbGljIiwxMTc3LCJ6ZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDcsInplaGlyYWdhbmEiLDEyMzgwLCJ6ZWthdGFrYW5hIiwxMjQ3NiwiemVybyIsNDgsInplcm9hcmFiaWMiLDE2MzIsInplcm9iZW5nYWxpIiwyNTM0LCJ6ZXJvZGV2YSIsMjQwNiwiemVyb2d1amFyYXRpIiwyNzkwLCJ6ZXJvZ3VybXVraGkiLDI2NjIsInplcm9oYWNrYXJhYmljIiwxNjMyLCJ6ZXJvaW5mZXJpb3IiLDgzMjAsInplcm9tb25vc3BhY2UiLDY1Mjk2LCJ6ZXJvb2xkc3R5bGUiLDYzMjgwLCJ6ZXJvcGVyc2lhbiIsMTc3NiwiemVyb3N1cGVyaW9yIiw4MzA0LCJ6ZXJvdGhhaSIsMzY2NCwiemVyb3dpZHRoam9pbmVyIiw2NTI3OSwiemVyb3dpZHRobm9uam9pbmVyIiw4MjA0LCJ6ZXJvd2lkdGhzcGFjZSIsODIwMywiemV0YSIsOTUwLCJ6aGJvcG9tb2ZvIiwxMjU2MywiemhlYXJtZW5pYW4iLDEzODYsInpoZWJyZXZlY3lyaWxsaWMiLDEyMTgsInpoZWN5cmlsbGljIiwxMDc4LCJ6aGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NSwiemhlZGllcmVzaXNjeXJpbGxpYyIsMTI0NSwiemloaXJhZ2FuYSIsMTIzNzYsInppa2F0YWthbmEiLDEyNDcyLCJ6aW5vcmhlYnJldyIsMTQ1NCwiemxpbmViZWxvdyIsNzgyOSwiem1vbm9zcGFjZSIsNjUzNzAsInpvaGlyYWdhbmEiLDEyMzgyLCJ6b2thdGFrYW5hIiwxMjQ3OCwienBhcmVuIiw5Mzk3LCJ6cmV0cm9mbGV4aG9vayIsNjU2LCJ6c3Ryb2tlIiw0MzgsInp1aGlyYWdhbmEiLDEyMzc4LCJ6dWthdGFrYW5hIiwxMjQ3NCwiLm5vdGRlZiIsMCwiYW5nYnJhY2tldGxlZnRiaWciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnIiw5MDAxLCJhbmdicmFja2V0bGVmdGJpZ2ciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnZyIsOTAwMSwiYW5nYnJhY2tldHJpZ2h0QmlnIiw5MDAyLCJhbmdicmFja2V0cmlnaHRiaWciLDkwMDIsImFuZ2JyYWNrZXRyaWdodEJpZ2ciLDkwMDIsImFuZ2JyYWNrZXRyaWdodGJpZ2ciLDkwMDIsImFycm93aG9va2xlZnQiLDg2MTgsImFycm93aG9va3JpZ2h0Iiw4NjE3LCJhcnJvd2xlZnR0b3BoYWxmIiw4NjM2LCJhcnJvd2xlZnRib3RoYWxmIiw4NjM3LCJhcnJvd25vcnRoZWFzdCIsODU5OSwiYXJyb3dub3J0aHdlc3QiLDg1OTgsImFycm93cmlnaHR0b3BoYWxmIiw4NjQwLCJhcnJvd3JpZ2h0Ym90aGFsZiIsODY0MSwiYXJyb3dzb3V0aGVhc3QiLDg2MDAsImFycm93c291dGh3ZXN0Iiw4NjAxLCJiYWNrc2xhc2hiaWciLDg3MjYsImJhY2tzbGFzaEJpZyIsODcyNiwiYmFja3NsYXNoQmlnZyIsODcyNiwiYmFja3NsYXNoYmlnZyIsODcyNiwiYmFyZGJsIiw4MjE0LCJicmFjZWh0aXBkb3dubGVmdCIsNjUwNzksImJyYWNlaHRpcGRvd25yaWdodCIsNjUwNzksImJyYWNlaHRpcHVwbGVmdCIsNjUwODAsImJyYWNlaHRpcHVwcmlnaHQiLDY1MDgwLCJicmFjZWxlZnRCaWciLDEyMywiYnJhY2VsZWZ0YmlnIiwxMjMsImJyYWNlbGVmdGJpZ2ciLDEyMywiYnJhY2VsZWZ0QmlnZyIsMTIzLCJicmFjZXJpZ2h0QmlnIiwxMjUsImJyYWNlcmlnaHRiaWciLDEyNSwiYnJhY2VyaWdodGJpZ2ciLDEyNSwiYnJhY2VyaWdodEJpZ2ciLDEyNSwiYnJhY2tldGxlZnRiaWciLDkxLCJicmFja2V0bGVmdEJpZyIsOTEsImJyYWNrZXRsZWZ0YmlnZyIsOTEsImJyYWNrZXRsZWZ0QmlnZyIsOTEsImJyYWNrZXRyaWdodEJpZyIsOTMsImJyYWNrZXRyaWdodGJpZyIsOTMsImJyYWNrZXRyaWdodGJpZ2ciLDkzLCJicmFja2V0cmlnaHRCaWdnIiw5MywiY2VpbGluZ2xlZnRiaWciLDg5NjgsImNlaWxpbmdsZWZ0QmlnIiw4OTY4LCJjZWlsaW5nbGVmdEJpZ2ciLDg5NjgsImNlaWxpbmdsZWZ0YmlnZyIsODk2OCwiY2VpbGluZ3JpZ2h0YmlnIiw4OTY5LCJjZWlsaW5ncmlnaHRCaWciLDg5NjksImNlaWxpbmdyaWdodGJpZ2ciLDg5NjksImNlaWxpbmdyaWdodEJpZ2ciLDg5NjksImNpcmNsZWRvdGRpc3BsYXkiLDg4NTcsImNpcmNsZWRvdHRleHQiLDg4NTcsImNpcmNsZW11bHRpcGx5ZGlzcGxheSIsODg1NSwiY2lyY2xlbXVsdGlwbHl0ZXh0Iiw4ODU1LCJjaXJjbGVwbHVzZGlzcGxheSIsODg1MywiY2lyY2xlcGx1c3RleHQiLDg4NTMsImNvbnRpbnRlZ3JhbGRpc3BsYXkiLDg3NTAsImNvbnRpbnRlZ3JhbHRleHQiLDg3NTAsImNvcHJvZHVjdGRpc3BsYXkiLDg3MjAsImNvcHJvZHVjdHRleHQiLDg3MjAsImZsb29ybGVmdEJpZyIsODk3MCwiZmxvb3JsZWZ0YmlnIiw4OTcwLCJmbG9vcmxlZnRiaWdnIiw4OTcwLCJmbG9vcmxlZnRCaWdnIiw4OTcwLCJmbG9vcnJpZ2h0YmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnZyIsODk3MSwiZmxvb3JyaWdodGJpZ2ciLDg5NzEsImhhdHdpZGUiLDc3MCwiaGF0d2lkZXIiLDc3MCwiaGF0d2lkZXN0Iiw3NzAsImludGVyY2FsIiw3NDg4LCJpbnRlZ3JhbGRpc3BsYXkiLDg3NDcsImludGVncmFsdGV4dCIsODc0NywiaW50ZXJzZWN0aW9uZGlzcGxheSIsODg5OCwiaW50ZXJzZWN0aW9udGV4dCIsODg5OCwibG9naWNhbGFuZGRpc3BsYXkiLDg3NDMsImxvZ2ljYWxhbmR0ZXh0Iiw4NzQzLCJsb2dpY2Fsb3JkaXNwbGF5Iiw4NzQ0LCJsb2dpY2Fsb3J0ZXh0Iiw4NzQ0LCJwYXJlbmxlZnRCaWciLDQwLCJwYXJlbmxlZnRiaWciLDQwLCJwYXJlbmxlZnRCaWdnIiw0MCwicGFyZW5sZWZ0YmlnZyIsNDAsInBhcmVucmlnaHRCaWciLDQxLCJwYXJlbnJpZ2h0YmlnIiw0MSwicGFyZW5yaWdodEJpZ2ciLDQxLCJwYXJlbnJpZ2h0YmlnZyIsNDEsInByaW1lIiw4MjQyLCJwcm9kdWN0ZGlzcGxheSIsODcxOSwicHJvZHVjdHRleHQiLDg3MTksInJhZGljYWxiaWciLDg3MzAsInJhZGljYWxCaWciLDg3MzAsInJhZGljYWxCaWdnIiw4NzMwLCJyYWRpY2FsYmlnZyIsODczMCwicmFkaWNhbGJ0Iiw4NzMwLCJyYWRpY2FsdHAiLDg3MzAsInJhZGljYWx2ZXJ0ZXgiLDg3MzAsInNsYXNoYmlnIiw0Nywic2xhc2hCaWciLDQ3LCJzbGFzaEJpZ2ciLDQ3LCJzbGFzaGJpZ2ciLDQ3LCJzdW1tYXRpb25kaXNwbGF5Iiw4NzIxLCJzdW1tYXRpb250ZXh0Iiw4NzIxLCJ0aWxkZXdpZGUiLDczMiwidGlsZGV3aWRlciIsNzMyLCJ0aWxkZXdpZGVzdCIsNzMyLCJ1bmlvbmRpc3BsYXkiLDg4OTksInVuaW9ubXVsdGlkaXNwbGF5Iiw4ODQ2LCJ1bmlvbm11bHRpdGV4dCIsODg0NiwidW5pb25zcWRpc3BsYXkiLDg4NTIsInVuaW9uc3F0ZXh0Iiw4ODUyLCJ1bmlvbnRleHQiLDg4OTksInZleHRlbmRkb3VibGUiLDg3NDEsInZleHRlbmRzaW5nbGUiLDg3MzldfSkpLGk9KDAsbi5nZXRBcnJheUxvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKCl7cmV0dXJuWyJzcGFjZSIsMzIsImExIiw5OTg1LCJhMiIsOTk4NiwiYTIwMiIsOTk4NywiYTMiLDk5ODgsImE0Iiw5NzQyLCJhNSIsOTk5MCwiYTExOSIsOTk5MSwiYTExOCIsOTk5MiwiYTExNyIsOTk5MywiYTExIiw5NzU1LCJhMTIiLDk3NTgsImExMyIsOTk5NiwiYTE0Iiw5OTk3LCJhMTUiLDk5OTgsImExNiIsOTk5OSwiYTEwNSIsMWU0LCJhMTciLDEwMDAxLCJhMTgiLDEwMDAyLCJhMTkiLDEwMDAzLCJhMjAiLDEwMDA0LCJhMjEiLDEwMDA1LCJhMjIiLDEwMDA2LCJhMjMiLDEwMDA3LCJhMjQiLDEwMDA4LCJhMjUiLDEwMDA5LCJhMjYiLDEwMDEwLCJhMjciLDEwMDExLCJhMjgiLDEwMDEyLCJhNiIsMTAwMTMsImE3IiwxMDAxNCwiYTgiLDEwMDE1LCJhOSIsMTAwMTYsImExMCIsMTAwMTcsImEyOSIsMTAwMTgsImEzMCIsMTAwMTksImEzMSIsMTAwMjAsImEzMiIsMTAwMjEsImEzMyIsMTAwMjIsImEzNCIsMTAwMjMsImEzNSIsOTczMywiYTM2IiwxMDAyNSwiYTM3IiwxMDAyNiwiYTM4IiwxMDAyNywiYTM5IiwxMDAyOCwiYTQwIiwxMDAyOSwiYTQxIiwxMDAzMCwiYTQyIiwxMDAzMSwiYTQzIiwxMDAzMiwiYTQ0IiwxMDAzMywiYTQ1IiwxMDAzNCwiYTQ2IiwxMDAzNSwiYTQ3IiwxMDAzNiwiYTQ4IiwxMDAzNywiYTQ5IiwxMDAzOCwiYTUwIiwxMDAzOSwiYTUxIiwxMDA0MCwiYTUyIiwxMDA0MSwiYTUzIiwxMDA0MiwiYTU0IiwxMDA0MywiYTU1IiwxMDA0NCwiYTU2IiwxMDA0NSwiYTU3IiwxMDA0NiwiYTU4IiwxMDA0NywiYTU5IiwxMDA0OCwiYTYwIiwxMDA0OSwiYTYxIiwxMDA1MCwiYTYyIiwxMDA1MSwiYTYzIiwxMDA1MiwiYTY0IiwxMDA1MywiYTY1IiwxMDA1NCwiYTY2IiwxMDA1NSwiYTY3IiwxMDA1NiwiYTY4IiwxMDA1NywiYTY5IiwxMDA1OCwiYTcwIiwxMDA1OSwiYTcxIiw5Njc5LCJhNzIiLDEwMDYxLCJhNzMiLDk2MzIsImE3NCIsMTAwNjMsImEyMDMiLDEwMDY0LCJhNzUiLDEwMDY1LCJhMjA0IiwxMDA2NiwiYTc2Iiw5NjUwLCJhNzciLDk2NjAsImE3OCIsOTY3MCwiYTc5IiwxMDA3MCwiYTgxIiw5Njg3LCJhODIiLDEwMDcyLCJhODMiLDEwMDczLCJhODQiLDEwMDc0LCJhOTciLDEwMDc1LCJhOTgiLDEwMDc2LCJhOTkiLDEwMDc3LCJhMTAwIiwxMDA3OCwiYTEwMSIsMTAwODEsImExMDIiLDEwMDgyLCJhMTAzIiwxMDA4MywiYTEwNCIsMTAwODQsImExMDYiLDEwMDg1LCJhMTA3IiwxMDA4NiwiYTEwOCIsMTAwODcsImExMTIiLDk4MjcsImExMTEiLDk4MzAsImExMTAiLDk4MjksImExMDkiLDk4MjQsImExMjAiLDkzMTIsImExMjEiLDkzMTMsImExMjIiLDkzMTQsImExMjMiLDkzMTUsImExMjQiLDkzMTYsImExMjUiLDkzMTcsImExMjYiLDkzMTgsImExMjciLDkzMTksImExMjgiLDkzMjAsImExMjkiLDkzMjEsImExMzAiLDEwMTAyLCJhMTMxIiwxMDEwMywiYTEzMiIsMTAxMDQsImExMzMiLDEwMTA1LCJhMTM0IiwxMDEwNiwiYTEzNSIsMTAxMDcsImExMzYiLDEwMTA4LCJhMTM3IiwxMDEwOSwiYTEzOCIsMTAxMTAsImExMzkiLDEwMTExLCJhMTQwIiwxMDExMiwiYTE0MSIsMTAxMTMsImExNDIiLDEwMTE0LCJhMTQzIiwxMDExNSwiYTE0NCIsMTAxMTYsImExNDUiLDEwMTE3LCJhMTQ2IiwxMDExOCwiYTE0NyIsMTAxMTksImExNDgiLDEwMTIwLCJhMTQ5IiwxMDEyMSwiYTE1MCIsMTAxMjIsImExNTEiLDEwMTIzLCJhMTUyIiwxMDEyNCwiYTE1MyIsMTAxMjUsImExNTQiLDEwMTI2LCJhMTU1IiwxMDEyNywiYTE1NiIsMTAxMjgsImExNTciLDEwMTI5LCJhMTU4IiwxMDEzMCwiYTE1OSIsMTAxMzEsImExNjAiLDEwMTMyLCJhMTYxIiw4NTk0LCJhMTYzIiw4NTk2LCJhMTY0Iiw4NTk3LCJhMTk2IiwxMDEzNiwiYTE2NSIsMTAxMzcsImExOTIiLDEwMTM4LCJhMTY2IiwxMDEzOSwiYTE2NyIsMTAxNDAsImExNjgiLDEwMTQxLCJhMTY5IiwxMDE0MiwiYTE3MCIsMTAxNDMsImExNzEiLDEwMTQ0LCJhMTcyIiwxMDE0NSwiYTE3MyIsMTAxNDYsImExNjIiLDEwMTQ3LCJhMTc0IiwxMDE0OCwiYTE3NSIsMTAxNDksImExNzYiLDEwMTUwLCJhMTc3IiwxMDE1MSwiYTE3OCIsMTAxNTIsImExNzkiLDEwMTUzLCJhMTkzIiwxMDE1NCwiYTE4MCIsMTAxNTUsImExOTkiLDEwMTU2LCJhMTgxIiwxMDE1NywiYTIwMCIsMTAxNTgsImExODIiLDEwMTU5LCJhMjAxIiwxMDE2MSwiYTE4MyIsMTAxNjIsImExODQiLDEwMTYzLCJhMTk3IiwxMDE2NCwiYTE4NSIsMTAxNjUsImExOTQiLDEwMTY2LCJhMTk4IiwxMDE2NywiYTE4NiIsMTAxNjgsImExOTUiLDEwMTY5LCJhMTg3IiwxMDE3MCwiYTE4OCIsMTAxNzEsImExODkiLDEwMTcyLCJhMTkwIiwxMDE3MywiYTE5MSIsMTAxNzQsImE4OSIsMTAwODgsImE5MCIsMTAwODksImE5MyIsMTAwOTAsImE5NCIsMTAwOTEsImE5MSIsMTAwOTIsImE5MiIsMTAwOTMsImEyMDUiLDEwMDk0LCJhODUiLDEwMDk1LCJhMjA2IiwxMDA5NiwiYTg2IiwxMDA5NywiYTg3IiwxMDA5OCwiYTg4IiwxMDA5OSwiYTk1IiwxMDEwMCwiYTk2IiwxMDEwMSwiLm5vdGRlZiIsMF19KSl9LChlLHQscik9PntyLnIodCksci5kKHQse2NsZWFyVW5pY29kZUNhY2hlczooKT0+cCxnZXRDaGFyVW5pY29kZUNhdGVnb3J5OigpPT5kLGdldE5vcm1hbGl6ZWRVbmljb2RlczooKT0+dSxnZXRVbmljb2RlRm9yR2x5cGg6KCk9Pm8sZ2V0VW5pY29kZVJhbmdlRm9yOigpPT5jLG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzOigpPT5pLHJldmVyc2VJZlJ0bDooKT0+bH0pO3ZhciBuPXIoMTM1KTtjb25zdCBhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVs2MzcyMV09MTY5LGVbNjMxOTNdPTE2OSxlWzYzNzIwXT0xNzQsZVs2MzE5NF09MTc0LGVbNjM3MjJdPTg0ODIsZVs2MzE5NV09ODQ4MixlWzYzNzI5XT05MTI3LGVbNjM3MzBdPTkxMjgsZVs2MzczMV09OTEyOSxlWzYzNzQwXT05MTMxLGVbNjM3NDFdPTkxMzIsZVs2Mzc0Ml09OTEzMyxlWzYzNzI2XT05MTIxLGVbNjM3MjddPTkxMjIsZVs2MzcyOF09OTEyMyxlWzYzNzM3XT05MTI0LGVbNjM3MzhdPTkxMjUsZVs2MzczOV09OTEyNixlWzYzNzIzXT05MTE1LGVbNjM3MjRdPTkxMTYsZVs2MzcyNV09OTExNyxlWzYzNzM0XT05MTE4LGVbNjM3MzVdPTkxMTksZVs2MzczNl09OTEyMH0pKTtmdW5jdGlvbiBpKGUpe3JldHVybiBlPj02NTUyMCYmZTw9NjU1MzU/MDplPj02Mjk3NiYmZTw9NjM3NDM/YSgpW2VdfHxlOjE3Mz09PWU/NDU6ZX1mdW5jdGlvbiBvKGUsdCl7bGV0IHI9dFtlXTtpZih2b2lkIDAhPT1yKXJldHVybiByO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pbj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7bj1lLnN1YnN0cmluZygxKX1pZihuPT09bi50b1VwcGVyQ2FzZSgpJiYocj1wYXJzZUludChuLDE2KSxyPj0wKSlyZXR1cm4gcn1yZXR1cm4tMX1jb25zdCBzPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XTtmdW5jdGlvbiBjKGUpe2ZvcihsZXQgdD0wLHI9cy5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1zW3RdO2lmKGU+PXIuYmVnaW4mJmU8ci5lbmQpcmV0dXJuIHR9cmV0dXJuLTF9Y29uc3QgdT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIsKoIiwiIMyIIiwiwq8iLCIgzIQiLCLCtCIsIiDMgSIsIsK1IiwizrwiLCLCuCIsIiDMpyIsIsSyIiwiSUoiLCLEsyIsImlqIiwixL8iLCJMwrciLCLFgCIsImzCtyIsIsWJIiwiyrxuIiwixb8iLCJzIiwix4QiLCJExb0iLCLHhSIsIkTFviIsIseGIiwiZMW+Iiwix4ciLCJMSiIsIseIIiwiTGoiLCLHiSIsImxqIiwix4oiLCJOSiIsIseLIiwiTmoiLCLHjCIsIm5qIiwix7EiLCJEWiIsIseyIiwiRHoiLCLHsyIsImR6Iiwiy5giLCIgzIYiLCLLmSIsIiDMhyIsIsuaIiwiIMyKIiwiy5siLCIgzKgiLCLLnCIsIiDMgyIsIsudIiwiIMyLIiwizboiLCIgzYUiLCLOhCIsIiDMgSIsIs+QIiwizrIiLCLPkSIsIs64Iiwiz5IiLCLOpSIsIs+VIiwiz4YiLCLPliIsIs+AIiwiz7AiLCLOuiIsIs+xIiwiz4EiLCLPsiIsIs+CIiwiz7QiLCLOmCIsIs+1IiwizrUiLCLPuSIsIs6jIiwi1ociLCLVpdaCIiwi2bUiLCLYp9m0Iiwi2bYiLCLZiNm0Iiwi2bciLCLbh9m0Iiwi2bgiLCLZitm0Iiwi4LizIiwi4LmN4LiyIiwi4LqzIiwi4LuN4LqyIiwi4LucIiwi4Lqr4LqZIiwi4LudIiwi4Lqr4LqhIiwi4L23Iiwi4L6y4L6BIiwi4L25Iiwi4L6z4L6BIiwi4bqaIiwiYcq+Iiwi4b69IiwiIMyTIiwi4b6/IiwiIMyTIiwi4b+AIiwiIM2CIiwi4b++IiwiIMyUIiwi4oCCIiwiICIsIuKAgyIsIiAiLCLigIQiLCIgIiwi4oCFIiwiICIsIuKAhiIsIiAiLCLigIgiLCIgIiwi4oCJIiwiICIsIuKAiiIsIiAiLCLigJciLCIgzLMiLCLigKQiLCIuIiwi4oClIiwiLi4iLCLigKYiLCIuLi4iLCLigLMiLCLigLLigLIiLCLigLQiLCLigLLigLLigLIiLCLigLYiLCLigLXigLUiLCLigLciLCLigLXigLXigLUiLCLigLwiLCIhISIsIuKAviIsIiDMhSIsIuKBhyIsIj8/Iiwi4oGIIiwiPyEiLCLigYkiLCIhPyIsIuKBlyIsIuKAsuKAsuKAsuKAsiIsIuKBnyIsIiAiLCLigqgiLCJScyIsIuKEgCIsImEvYyIsIuKEgSIsImEvcyIsIuKEgyIsIsKwQyIsIuKEhSIsImMvbyIsIuKEhiIsImMvdSIsIuKEhyIsIsaQIiwi4oSJIiwiwrBGIiwi4oSWIiwiTm8iLCLihKEiLCJURUwiLCLihLUiLCLXkCIsIuKEtiIsIteRIiwi4oS3Iiwi15IiLCLihLgiLCLXkyIsIuKEuyIsIkZBWCIsIuKFoCIsIkkiLCLihaEiLCJJSSIsIuKFoiIsIklJSSIsIuKFoyIsIklWIiwi4oWkIiwiViIsIuKFpSIsIlZJIiwi4oWmIiwiVklJIiwi4oWnIiwiVklJSSIsIuKFqCIsIklYIiwi4oWpIiwiWCIsIuKFqiIsIlhJIiwi4oWrIiwiWElJIiwi4oWsIiwiTCIsIuKFrSIsIkMiLCLiha4iLCJEIiwi4oWvIiwiTSIsIuKFsCIsImkiLCLihbEiLCJpaSIsIuKFsiIsImlpaSIsIuKFsyIsIml2Iiwi4oW0IiwidiIsIuKFtSIsInZpIiwi4oW2IiwidmlpIiwi4oW3IiwidmlpaSIsIuKFuCIsIml4Iiwi4oW5IiwieCIsIuKFuiIsInhpIiwi4oW7IiwieGlpIiwi4oW8IiwibCIsIuKFvSIsImMiLCLihb4iLCJkIiwi4oW/IiwibSIsIuKIrCIsIuKIq+KIqyIsIuKIrSIsIuKIq+KIq+KIqyIsIuKIryIsIuKIruKIriIsIuKIsCIsIuKIruKIruKIriIsIuKRtCIsIigxKSIsIuKRtSIsIigyKSIsIuKRtiIsIigzKSIsIuKRtyIsIig0KSIsIuKRuCIsIig1KSIsIuKRuSIsIig2KSIsIuKRuiIsIig3KSIsIuKRuyIsIig4KSIsIuKRvCIsIig5KSIsIuKRvSIsIigxMCkiLCLikb4iLCIoMTEpIiwi4pG/IiwiKDEyKSIsIuKSgCIsIigxMykiLCLikoEiLCIoMTQpIiwi4pKCIiwiKDE1KSIsIuKSgyIsIigxNikiLCLikoQiLCIoMTcpIiwi4pKFIiwiKDE4KSIsIuKShiIsIigxOSkiLCLikociLCIoMjApIiwi4pKIIiwiMS4iLCLikokiLCIyLiIsIuKSiiIsIjMuIiwi4pKLIiwiNC4iLCLikowiLCI1LiIsIuKSjSIsIjYuIiwi4pKOIiwiNy4iLCLiko8iLCI4LiIsIuKSkCIsIjkuIiwi4pKRIiwiMTAuIiwi4pKSIiwiMTEuIiwi4pKTIiwiMTIuIiwi4pKUIiwiMTMuIiwi4pKVIiwiMTQuIiwi4pKWIiwiMTUuIiwi4pKXIiwiMTYuIiwi4pKYIiwiMTcuIiwi4pKZIiwiMTguIiwi4pKaIiwiMTkuIiwi4pKbIiwiMjAuIiwi4pKcIiwiKGEpIiwi4pKdIiwiKGIpIiwi4pKeIiwiKGMpIiwi4pKfIiwiKGQpIiwi4pKgIiwiKGUpIiwi4pKhIiwiKGYpIiwi4pKiIiwiKGcpIiwi4pKjIiwiKGgpIiwi4pKkIiwiKGkpIiwi4pKlIiwiKGopIiwi4pKmIiwiKGspIiwi4pKnIiwiKGwpIiwi4pKoIiwiKG0pIiwi4pKpIiwiKG4pIiwi4pKqIiwiKG8pIiwi4pKrIiwiKHApIiwi4pKsIiwiKHEpIiwi4pKtIiwiKHIpIiwi4pKuIiwiKHMpIiwi4pKvIiwiKHQpIiwi4pKwIiwiKHUpIiwi4pKxIiwiKHYpIiwi4pKyIiwiKHcpIiwi4pKzIiwiKHgpIiwi4pK0IiwiKHkpIiwi4pK1IiwiKHopIiwi4qiMIiwi4oir4oir4oir4oirIiwi4qm0IiwiOjo9Iiwi4qm1IiwiPT0iLCLiqbYiLCI9PT0iLCLiup8iLCLmr40iLCLiu7MiLCLpvp8iLCLivIAiLCLkuIAiLCLivIEiLCLkuKgiLCLivIIiLCLkuLYiLCLivIMiLCLkuL8iLCLivIQiLCLkuZkiLCLivIUiLCLkuoUiLCLivIYiLCLkuowiLCLivIciLCLkuqAiLCLivIgiLCLkuroiLCLivIkiLCLlhL8iLCLivIoiLCLlhaUiLCLivIsiLCLlhasiLCLivIwiLCLlhoIiLCLivI0iLCLlhpYiLCLivI4iLCLlhqsiLCLivI8iLCLlh6AiLCLivJAiLCLlh7UiLCLivJEiLCLliIAiLCLivJIiLCLlipsiLCLivJMiLCLli7kiLCLivJQiLCLljJUiLCLivJUiLCLljJoiLCLivJYiLCLljLgiLCLivJciLCLljYEiLCLivJgiLCLljZwiLCLivJkiLCLljakiLCLivJoiLCLljoIiLCLivJsiLCLljrYiLCLivJwiLCLlj4giLCLivJ0iLCLlj6MiLCLivJ4iLCLlm5ciLCLivJ8iLCLlnJ8iLCLivKAiLCLlo6siLCLivKEiLCLlpIIiLCLivKIiLCLlpIoiLCLivKMiLCLlpJUiLCLivKQiLCLlpKciLCLivKUiLCLlpbMiLCLivKYiLCLlrZAiLCLivKciLCLlroAiLCLivKgiLCLlr7giLCLivKkiLCLlsI8iLCLivKoiLCLlsKIiLCLivKsiLCLlsLgiLCLivKwiLCLlsa4iLCLivK0iLCLlsbEiLCLivK4iLCLlt5siLCLivK8iLCLlt6UiLCLivLAiLCLlt7EiLCLivLEiLCLlt74iLCLivLIiLCLlubIiLCLivLMiLCLluboiLCLivLQiLCLlub8iLCLivLUiLCLlu7QiLCLivLYiLCLlu74iLCLivLciLCLlvIsiLCLivLgiLCLlvJMiLCLivLkiLCLlvZAiLCLivLoiLCLlvaEiLCLivLsiLCLlvbMiLCLivLwiLCLlv4MiLCLivL0iLCLmiIgiLCLivL4iLCLmiLYiLCLivL8iLCLmiYsiLCLivYAiLCLmlK8iLCLivYEiLCLmlLQiLCLivYIiLCLmlociLCLivYMiLCLmlpciLCLivYQiLCLmlqQiLCLivYUiLCLmlrkiLCLivYYiLCLml6AiLCLivYciLCLml6UiLCLivYgiLCLmm7AiLCLivYkiLCLmnIgiLCLivYoiLCLmnKgiLCLivYsiLCLmrKAiLCLivYwiLCLmraIiLCLivY0iLCLmrbkiLCLivY4iLCLmrrMiLCLivY8iLCLmr4siLCLivZAiLCLmr5QiLCLivZEiLCLmr5siLCLivZIiLCLmsI8iLCLivZMiLCLmsJQiLCLivZQiLCLmsLQiLCLivZUiLCLngasiLCLivZYiLCLniKoiLCLivZciLCLniLYiLCLivZgiLCLniLsiLCLivZkiLCLniL8iLCLivZoiLCLniYciLCLivZsiLCLniZkiLCLivZwiLCLniZsiLCLivZ0iLCLniqwiLCLivZ4iLCLnjoQiLCLivZ8iLCLnjokiLCLivaAiLCLnk5wiLCLivaEiLCLnk6YiLCLivaIiLCLnlJgiLCLivaMiLCLnlJ8iLCLivaQiLCLnlKgiLCLivaUiLCLnlLAiLCLivaYiLCLnlosiLCLivaciLCLnlpIiLCLivagiLCLnmbYiLCLivakiLCLnmb0iLCLivaoiLCLnmq4iLCLivasiLCLnmr8iLCLivawiLCLnm64iLCLiva0iLCLnn5siLCLiva4iLCLnn6IiLCLiva8iLCLnn7MiLCLivbAiLCLnpLoiLCLivbEiLCLnprgiLCLivbIiLCLnpr4iLCLivbMiLCLnqbQiLCLivbQiLCLnq4siLCLivbUiLCLnq7kiLCLivbYiLCLnsbMiLCLivbciLCLns7giLCLivbgiLCLnvLYiLCLivbkiLCLnvZEiLCLivboiLCLnvooiLCLivbsiLCLnvr0iLCLivbwiLCLogIEiLCLivb0iLCLogIwiLCLivb4iLCLogJIiLCLivb8iLCLogLMiLCLivoAiLCLogb8iLCLivoEiLCLogokiLCLivoIiLCLoh6MiLCLivoMiLCLoh6oiLCLivoQiLCLoh7MiLCLivoUiLCLoh7wiLCLivoYiLCLoiIwiLCLivociLCLoiJsiLCLivogiLCLoiJ8iLCLivokiLCLoia4iLCLivooiLCLoibIiLCLivosiLCLoibgiLCLivowiLCLomY0iLCLivo0iLCLomasiLCLivo4iLCLooYAiLCLivo8iLCLooYwiLCLivpAiLCLooaMiLCLivpEiLCLopb4iLCLivpIiLCLoposiLCLivpMiLCLop5IiLCLivpQiLCLoqIAiLCLivpUiLCLosLciLCLivpYiLCLosYYiLCLivpciLCLosZUiLCLivpgiLCLosbgiLCLivpkiLCLosp0iLCLivpoiLCLotaQiLCLivpsiLCLotbAiLCLivpwiLCLotrMiLCLivp0iLCLouqsiLCLivp4iLCLou4oiLCLivp8iLCLovpsiLCLivqAiLCLovrAiLCLivqEiLCLovrUiLCLivqIiLCLpgpEiLCLivqMiLCLphYkiLCLivqQiLCLph4YiLCLivqUiLCLph4wiLCLivqYiLCLph5EiLCLivqciLCLplbciLCLivqgiLCLploAiLCLivqkiLCLpmJwiLCLivqoiLCLpmrYiLCLivqsiLCLpmrkiLCLivqwiLCLpm6giLCLivq0iLCLpnZEiLCLivq4iLCLpnZ4iLCLivq8iLCLpnaIiLCLivrAiLCLpnakiLCLivrEiLCLpn4siLCLivrIiLCLpn60iLCLivrMiLCLpn7MiLCLivrQiLCLpoIEiLCLivrUiLCLpoqgiLCLivrYiLCLpo5siLCLivrciLCLpo58iLCLivrgiLCLpppYiLCLivrkiLCLpppkiLCLivroiLCLppqwiLCLivrsiLCLpqqgiLCLivrwiLCLpq5giLCLivr0iLCLpq58iLCLivr4iLCLprKUiLCLivr8iLCLprK8iLCLiv4AiLCLprLIiLCLiv4EiLCLprLwiLCLiv4IiLCLprZoiLCLiv4MiLCLps6UiLCLiv4QiLCLpubUiLCLiv4UiLCLpub8iLCLiv4YiLCLpuqUiLCLiv4ciLCLpursiLCLiv4giLCLpu4MiLCLiv4kiLCLpu40iLCLiv4oiLCLpu5EiLCLiv4siLCLpu7kiLCLiv4wiLCLpu70iLCLiv40iLCLpvI4iLCLiv44iLCLpvJMiLCLiv48iLCLpvKAiLCLiv5AiLCLpvLsiLCLiv5EiLCLpvYoiLCLiv5IiLCLpvZIiLCLiv5MiLCLpvo0iLCLiv5QiLCLpvpwiLCLiv5UiLCLpvqAiLCLjgLYiLCLjgJIiLCLjgLgiLCLljYEiLCLjgLkiLCLljYQiLCLjgLoiLCLljYUiLCLjgpsiLCIg44KZIiwi44KcIiwiIOOCmiIsIuOEsSIsIuGEgCIsIuOEsiIsIuGEgSIsIuOEsyIsIuGGqiIsIuOEtCIsIuGEgiIsIuOEtSIsIuGGrCIsIuOEtiIsIuGGrSIsIuOEtyIsIuGEgyIsIuOEuCIsIuGEhCIsIuOEuSIsIuGEhSIsIuOEuiIsIuGGsCIsIuOEuyIsIuGGsSIsIuOEvCIsIuGGsiIsIuOEvSIsIuGGsyIsIuOEviIsIuGGtCIsIuOEvyIsIuGGtSIsIuOFgCIsIuGEmiIsIuOFgSIsIuGEhiIsIuOFgiIsIuGEhyIsIuOFgyIsIuGEiCIsIuOFhCIsIuGEoSIsIuOFhSIsIuGEiSIsIuOFhiIsIuGEiiIsIuOFhyIsIuGEiyIsIuOFiCIsIuGEjCIsIuOFiSIsIuGEjSIsIuOFiiIsIuGEjiIsIuOFiyIsIuGEjyIsIuOFjCIsIuGEkCIsIuOFjSIsIuGEkSIsIuOFjiIsIuGEkiIsIuOFjyIsIuGFoSIsIuOFkCIsIuGFoiIsIuOFkSIsIuGFoyIsIuOFkiIsIuGFpCIsIuOFkyIsIuGFpSIsIuOFlCIsIuGFpiIsIuOFlSIsIuGFpyIsIuOFliIsIuGFqCIsIuOFlyIsIuGFqSIsIuOFmCIsIuGFqiIsIuOFmSIsIuGFqyIsIuOFmiIsIuGFrCIsIuOFmyIsIuGFrSIsIuOFnCIsIuGFriIsIuOFnSIsIuGFryIsIuOFniIsIuGFsCIsIuOFnyIsIuGFsSIsIuOFoCIsIuGFsiIsIuOFoSIsIuGFsyIsIuOFoiIsIuGFtCIsIuOFoyIsIuGFtSIsIuOFpCIsIuGFoCIsIuOFpSIsIuGElCIsIuOFpiIsIuGElSIsIuOFpyIsIuGHhyIsIuOFqCIsIuGHiCIsIuOFqSIsIuGHjCIsIuOFqiIsIuGHjiIsIuOFqyIsIuGHkyIsIuOFrCIsIuGHlyIsIuOFrSIsIuGHmSIsIuOFriIsIuGEnCIsIuOFryIsIuGHnSIsIuOFsCIsIuGHnyIsIuOFsSIsIuGEnSIsIuOFsiIsIuGEniIsIuOFsyIsIuGEoCIsIuOFtCIsIuGEoiIsIuOFtSIsIuGEoyIsIuOFtiIsIuGEpyIsIuOFtyIsIuGEqSIsIuOFuCIsIuGEqyIsIuOFuSIsIuGErCIsIuOFuiIsIuGErSIsIuOFuyIsIuGEriIsIuOFvCIsIuGEryIsIuOFvSIsIuGEsiIsIuOFviIsIuGEtiIsIuOFvyIsIuGFgCIsIuOGgCIsIuGFhyIsIuOGgSIsIuGFjCIsIuOGgiIsIuGHsSIsIuOGgyIsIuGHsiIsIuOGhCIsIuGFlyIsIuOGhSIsIuGFmCIsIuOGhiIsIuGFmSIsIuOGhyIsIuGGhCIsIuOGiCIsIuGGhSIsIuOGiSIsIuGGiCIsIuOGiiIsIuGGkSIsIuOGiyIsIuGGkiIsIuOGjCIsIuGGlCIsIuOGjSIsIuGGniIsIuOGjiIsIuGGoSIsIuOIgCIsIijhhIApIiwi44iBIiwiKOGEgikiLCLjiIIiLCIo4YSDKSIsIuOIgyIsIijhhIUpIiwi44iEIiwiKOGEhikiLCLjiIUiLCIo4YSHKSIsIuOIhiIsIijhhIkpIiwi44iHIiwiKOGEiykiLCLjiIgiLCIo4YSMKSIsIuOIiSIsIijhhI4pIiwi44iKIiwiKOGEjykiLCLjiIsiLCIo4YSQKSIsIuOIjCIsIijhhJEpIiwi44iNIiwiKOGEkikiLCLjiI4iLCIo4YSA4YWhKSIsIuOIjyIsIijhhILhhaEpIiwi44iQIiwiKOGEg+GFoSkiLCLjiJEiLCIo4YSF4YWhKSIsIuOIkiIsIijhhIbhhaEpIiwi44iTIiwiKOGEh+GFoSkiLCLjiJQiLCIo4YSJ4YWhKSIsIuOIlSIsIijhhIvhhaEpIiwi44iWIiwiKOGEjOGFoSkiLCLjiJciLCIo4YSO4YWhKSIsIuOImCIsIijhhI/hhaEpIiwi44iZIiwiKOGEkOGFoSkiLCLjiJoiLCIo4YSR4YWhKSIsIuOImyIsIijhhJLhhaEpIiwi44icIiwiKOGEjOGFrikiLCLjiJ0iLCIo4YSL4YWp4YSM4YWl4YarKSIsIuOIniIsIijhhIvhhanhhJLhha4pIiwi44igIiwiKOS4gCkiLCLjiKEiLCIo5LqMKSIsIuOIoiIsIijkuIkpIiwi44ijIiwiKOWbmykiLCLjiKQiLCIo5LqUKSIsIuOIpSIsIijlha0pIiwi44imIiwiKOS4gykiLCLjiKciLCIo5YWrKSIsIuOIqCIsIijkuZ0pIiwi44ipIiwiKOWNgSkiLCLjiKoiLCIo5pyIKSIsIuOIqyIsIijngaspIiwi44isIiwiKOawtCkiLCLjiK0iLCIo5pyoKSIsIuOIriIsIijph5EpIiwi44ivIiwiKOWcnykiLCLjiLAiLCIo5pelKSIsIuOIsSIsIijmoKopIiwi44iyIiwiKOaciSkiLCLjiLMiLCIo56S+KSIsIuOItCIsIijlkI0pIiwi44i1IiwiKOeJuSkiLCLjiLYiLCIo6LKhKSIsIuOItyIsIijnpZ0pIiwi44i4IiwiKOWKtCkiLCLjiLkiLCIo5LujKSIsIuOIuiIsIijlkbwpIiwi44i7IiwiKOWtpikiLCLjiLwiLCIo55ujKSIsIuOIvSIsIijkvIEpIiwi44i+IiwiKOizhykiLCLjiL8iLCIo5Y2UKSIsIuOJgCIsIijnpa0pIiwi44mBIiwiKOS8kSkiLCLjiYIiLCIo6IeqKSIsIuOJgyIsIijoh7MpIiwi44uAIiwiMeaciCIsIuOLgSIsIjLmnIgiLCLji4IiLCIz5pyIIiwi44uDIiwiNOaciCIsIuOLhCIsIjXmnIgiLCLji4UiLCI25pyIIiwi44uGIiwiN+aciCIsIuOLhyIsIjjmnIgiLCLji4giLCI55pyIIiwi44uJIiwiMTDmnIgiLCLji4oiLCIxMeaciCIsIuOLiyIsIjEy5pyIIiwi442YIiwiMOeCuSIsIuONmSIsIjHngrkiLCLjjZoiLCIy54K5Iiwi442bIiwiM+eCuSIsIuONnCIsIjTngrkiLCLjjZ0iLCI154K5Iiwi442eIiwiNueCuSIsIuONnyIsIjfngrkiLCLjjaAiLCI454K5Iiwi442hIiwiOeeCuSIsIuONoiIsIjEw54K5Iiwi442jIiwiMTHngrkiLCLjjaQiLCIxMueCuSIsIuONpSIsIjEz54K5Iiwi442mIiwiMTTngrkiLCLjjaciLCIxNeeCuSIsIuONqCIsIjE254K5Iiwi442pIiwiMTfngrkiLCLjjaoiLCIxOOeCuSIsIuONqyIsIjE554K5Iiwi442sIiwiMjDngrkiLCLjja0iLCIyMeeCuSIsIuONriIsIjIy54K5Iiwi442vIiwiMjPngrkiLCLjjbAiLCIyNOeCuSIsIuOPoCIsIjHml6UiLCLjj6EiLCIy5pelIiwi44+iIiwiM+aXpSIsIuOPoyIsIjTml6UiLCLjj6QiLCI15pelIiwi44+lIiwiNuaXpSIsIuOPpiIsIjfml6UiLCLjj6ciLCI45pelIiwi44+oIiwiOeaXpSIsIuOPqSIsIjEw5pelIiwi44+qIiwiMTHml6UiLCLjj6siLCIxMuaXpSIsIuOPrCIsIjEz5pelIiwi44+tIiwiMTTml6UiLCLjj64iLCIxNeaXpSIsIuOPryIsIjE25pelIiwi44+wIiwiMTfml6UiLCLjj7EiLCIxOOaXpSIsIuOPsiIsIjE55pelIiwi44+zIiwiMjDml6UiLCLjj7QiLCIyMeaXpSIsIuOPtSIsIjIy5pelIiwi44+2IiwiMjPml6UiLCLjj7ciLCIyNOaXpSIsIuOPuCIsIjI15pelIiwi44+5IiwiMjbml6UiLCLjj7oiLCIyN+aXpSIsIuOPuyIsIjI45pelIiwi44+8IiwiMjnml6UiLCLjj70iLCIzMOaXpSIsIuOPviIsIjMx5pelIiwi76yAIiwiZmYiLCLvrIEiLCJmaSIsIu+sgiIsImZsIiwi76yDIiwiZmZpIiwi76yEIiwiZmZsIiwi76yFIiwixb90Iiwi76yGIiwic3QiLCLvrJMiLCLVtNW2Iiwi76yUIiwi1bTVpSIsIu+slSIsItW01asiLCLvrJYiLCLVvtW2Iiwi76yXIiwi1bTVrSIsIu+tjyIsIteQ15wiLCLvrZAiLCLZsSIsIu+tkSIsItmxIiwi762SIiwi2bsiLCLvrZMiLCLZuyIsIu+tlCIsItm7Iiwi762VIiwi2bsiLCLvrZYiLCLZviIsIu+tlyIsItm+Iiwi762YIiwi2b4iLCLvrZkiLCLZviIsIu+tmiIsItqAIiwi762bIiwi2oAiLCLvrZwiLCLagCIsIu+tnSIsItqAIiwi762eIiwi2boiLCLvrZ8iLCLZuiIsIu+toCIsItm6Iiwi762hIiwi2boiLCLvraIiLCLZvyIsIu+toyIsItm/Iiwi762kIiwi2b8iLCLvraUiLCLZvyIsIu+tpiIsItm5Iiwi762nIiwi2bkiLCLvragiLCLZuSIsIu+tqSIsItm5Iiwi762qIiwi2qQiLCLvrasiLCLapCIsIu+trCIsItqkIiwi762tIiwi2qQiLCLvra4iLCLapiIsIu+tryIsItqmIiwi762wIiwi2qYiLCLvrbEiLCLapiIsIu+tsiIsItqEIiwi762zIiwi2oQiLCLvrbQiLCLahCIsIu+ttSIsItqEIiwi7622Iiwi2oMiLCLvrbciLCLagyIsIu+tuCIsItqDIiwi7625Iiwi2oMiLCLvrboiLCLahiIsIu+tuyIsItqGIiwi7628Iiwi2oYiLCLvrb0iLCLahiIsIu+tviIsItqHIiwi762/Iiwi2ociLCLvroAiLCLahyIsIu+ugSIsItqHIiwi766CIiwi2o0iLCLvroMiLCLajSIsIu+uhCIsItqMIiwi766FIiwi2owiLCLvroYiLCLajiIsIu+uhyIsItqOIiwi766IIiwi2ogiLCLvrokiLCLaiCIsIu+uiiIsItqYIiwi766LIiwi2pgiLCLvrowiLCLakSIsIu+ujSIsItqRIiwi766OIiwi2qkiLCLvro8iLCLaqSIsIu+ukCIsItqpIiwi766RIiwi2qkiLCLvrpIiLCLaryIsIu+ukyIsItqvIiwi766UIiwi2q8iLCLvrpUiLCLaryIsIu+uliIsItqzIiwi766XIiwi2rMiLCLvrpgiLCLasyIsIu+umSIsItqzIiwi766aIiwi2rEiLCLvrpsiLCLasSIsIu+unCIsItqxIiwi766dIiwi2rEiLCLvrp4iLCLauiIsIu+unyIsItq6Iiwi766gIiwi2rsiLCLvrqEiLCLauyIsIu+uoiIsItq7Iiwi766jIiwi2rsiLCLvrqQiLCLbgCIsIu+upSIsItuAIiwi766mIiwi24EiLCLvrqciLCLbgSIsIu+uqCIsItuBIiwi766pIiwi24EiLCLvrqoiLCLaviIsIu+uqyIsItq+Iiwi766sIiwi2r4iLCLvrq0iLCLaviIsIu+uriIsItuSIiwi766vIiwi25IiLCLvrrAiLCLbkyIsIu+usSIsItuTIiwi76+TIiwi2q0iLCLvr5QiLCLarSIsIu+vlSIsItqtIiwi76+WIiwi2q0iLCLvr5ciLCLbhyIsIu+vmCIsItuHIiwi76+ZIiwi24YiLCLvr5oiLCLbhiIsIu+vmyIsItuIIiwi76+cIiwi24giLCLvr50iLCLZtyIsIu+vniIsItuLIiwi76+fIiwi24siLCLvr6AiLCLbhSIsIu+voSIsItuFIiwi76+iIiwi24kiLCLvr6MiLCLbiSIsIu+vpCIsItuQIiwi76+lIiwi25AiLCLvr6YiLCLbkCIsIu+vpyIsItuQIiwi76+oIiwi2YkiLCLvr6kiLCLZiSIsIu+vqiIsItim2KciLCLvr6siLCLYptinIiwi76+sIiwi2KbblSIsIu+vrSIsItim25UiLCLvr64iLCLYptmIIiwi76+vIiwi2KbZiCIsIu+vsCIsItim24ciLCLvr7EiLCLYptuHIiwi76+yIiwi2KbbhiIsIu+vsyIsItim24YiLCLvr7QiLCLYptuIIiwi76+1Iiwi2KbbiCIsIu+vtiIsItim25AiLCLvr7ciLCLYptuQIiwi76+4Iiwi2KbbkCIsIu+vuSIsItim2YkiLCLvr7oiLCLYptmJIiwi76+7Iiwi2KbZiSIsIu+vvCIsItuMIiwi76+9Iiwi24wiLCLvr74iLCLbjCIsIu+vvyIsItuMIiwi77CAIiwi2KbYrCIsIu+wgSIsItim2K0iLCLvsIIiLCLYptmFIiwi77CDIiwi2KbZiSIsIu+whCIsItim2YoiLCLvsIUiLCLYqNisIiwi77CGIiwi2KjYrSIsIu+whyIsItio2K4iLCLvsIgiLCLYqNmFIiwi77CJIiwi2KjZiSIsIu+wiiIsItio2YoiLCLvsIsiLCLYqtisIiwi77CMIiwi2KrYrSIsIu+wjSIsItiq2K4iLCLvsI4iLCLYqtmFIiwi77CPIiwi2KrZiSIsIu+wkCIsItiq2YoiLCLvsJEiLCLYq9isIiwi77CSIiwi2KvZhSIsIu+wkyIsItir2YkiLCLvsJQiLCLYq9mKIiwi77CVIiwi2KzYrSIsIu+wliIsItis2YUiLCLvsJciLCLYrdisIiwi77CYIiwi2K3ZhSIsIu+wmSIsItiu2KwiLCLvsJoiLCLYrtitIiwi77CbIiwi2K7ZhSIsIu+wnCIsItiz2KwiLCLvsJ0iLCLYs9itIiwi77CeIiwi2LPYriIsIu+wnyIsItiz2YUiLCLvsKAiLCLYtditIiwi77ChIiwi2LXZhSIsIu+woiIsIti22KwiLCLvsKMiLCLYttitIiwi77CkIiwi2LbYriIsIu+wpSIsIti22YUiLCLvsKYiLCLYt9itIiwi77CnIiwi2LfZhSIsIu+wqCIsIti42YUiLCLvsKkiLCLYudisIiwi77CqIiwi2LnZhSIsIu+wqyIsIti62KwiLCLvsKwiLCLYutmFIiwi77CtIiwi2YHYrCIsIu+wriIsItmB2K0iLCLvsK8iLCLZgdiuIiwi77CwIiwi2YHZhSIsIu+wsSIsItmB2YkiLCLvsLIiLCLZgdmKIiwi77CzIiwi2YLYrSIsIu+wtCIsItmC2YUiLCLvsLUiLCLZgtmJIiwi77C2Iiwi2YLZiiIsIu+wtyIsItmD2KciLCLvsLgiLCLZg9isIiwi77C5Iiwi2YPYrSIsIu+wuiIsItmD2K4iLCLvsLsiLCLZg9mEIiwi77C8Iiwi2YPZhSIsIu+wvSIsItmD2YkiLCLvsL4iLCLZg9mKIiwi77C/Iiwi2YTYrCIsIu+xgCIsItmE2K0iLCLvsYEiLCLZhNiuIiwi77GCIiwi2YTZhSIsIu+xgyIsItmE2YkiLCLvsYQiLCLZhNmKIiwi77GFIiwi2YXYrCIsIu+xhiIsItmF2K0iLCLvsYciLCLZhdiuIiwi77GIIiwi2YXZhSIsIu+xiSIsItmF2YkiLCLvsYoiLCLZhdmKIiwi77GLIiwi2YbYrCIsIu+xjCIsItmG2K0iLCLvsY0iLCLZhtiuIiwi77GOIiwi2YbZhSIsIu+xjyIsItmG2YkiLCLvsZAiLCLZhtmKIiwi77GRIiwi2YfYrCIsIu+xkiIsItmH2YUiLCLvsZMiLCLZh9mJIiwi77GUIiwi2YfZiiIsIu+xlSIsItmK2KwiLCLvsZYiLCLZititIiwi77GXIiwi2YrYriIsIu+xmCIsItmK2YUiLCLvsZkiLCLZitmJIiwi77GaIiwi2YrZiiIsIu+xmyIsItiw2bAiLCLvsZwiLCLYsdmwIiwi77GdIiwi2YnZsCIsIu+xniIsIiDZjNmRIiwi77GfIiwiINmN2ZEiLCLvsaAiLCIg2Y7ZkSIsIu+xoSIsIiDZj9mRIiwi77GiIiwiINmQ2ZEiLCLvsaMiLCIg2ZHZsCIsIu+xpCIsItim2LEiLCLvsaUiLCLYptiyIiwi77GmIiwi2KbZhSIsIu+xpyIsItim2YYiLCLvsagiLCLYptmJIiwi77GpIiwi2KbZiiIsIu+xqiIsItio2LEiLCLvsasiLCLYqNiyIiwi77GsIiwi2KjZhSIsIu+xrSIsItio2YYiLCLvsa4iLCLYqNmJIiwi77GvIiwi2KjZiiIsIu+xsCIsItiq2LEiLCLvsbEiLCLYqtiyIiwi77GyIiwi2KrZhSIsIu+xsyIsItiq2YYiLCLvsbQiLCLYqtmJIiwi77G1Iiwi2KrZiiIsIu+xtiIsItir2LEiLCLvsbciLCLYq9iyIiwi77G4Iiwi2KvZhSIsIu+xuSIsItir2YYiLCLvsboiLCLYq9mJIiwi77G7Iiwi2KvZiiIsIu+xvCIsItmB2YkiLCLvsb0iLCLZgdmKIiwi77G+Iiwi2YLZiSIsIu+xvyIsItmC2YoiLCLvsoAiLCLZg9inIiwi77KBIiwi2YPZhCIsIu+ygiIsItmD2YUiLCLvsoMiLCLZg9mJIiwi77KEIiwi2YPZiiIsIu+yhSIsItmE2YUiLCLvsoYiLCLZhNmJIiwi77KHIiwi2YTZiiIsIu+yiCIsItmF2KciLCLvsokiLCLZhdmFIiwi77KKIiwi2YbYsSIsIu+yiyIsItmG2LIiLCLvsowiLCLZhtmFIiwi77KNIiwi2YbZhiIsIu+yjiIsItmG2YkiLCLvso8iLCLZhtmKIiwi77KQIiwi2YnZsCIsIu+ykSIsItmK2LEiLCLvspIiLCLZitiyIiwi77KTIiwi2YrZhSIsIu+ylCIsItmK2YYiLCLvspUiLCLZitmJIiwi77KWIiwi2YrZiiIsIu+ylyIsItim2KwiLCLvspgiLCLYptitIiwi77KZIiwi2KbYriIsIu+ymiIsItim2YUiLCLvspsiLCLYptmHIiwi77KcIiwi2KjYrCIsIu+ynSIsItio2K0iLCLvsp4iLCLYqNiuIiwi77KfIiwi2KjZhSIsIu+yoCIsItio2YciLCLvsqEiLCLYqtisIiwi77KiIiwi2KrYrSIsIu+yoyIsItiq2K4iLCLvsqQiLCLYqtmFIiwi77KlIiwi2KrZhyIsIu+ypiIsItir2YUiLCLvsqciLCLYrNitIiwi77KoIiwi2KzZhSIsIu+yqSIsItit2KwiLCLvsqoiLCLYrdmFIiwi77KrIiwi2K7YrCIsIu+yrCIsItiu2YUiLCLvsq0iLCLYs9isIiwi77KuIiwi2LPYrSIsIu+yryIsItiz2K4iLCLvsrAiLCLYs9mFIiwi77KxIiwi2LXYrSIsIu+ysiIsIti12K4iLCLvsrMiLCLYtdmFIiwi77K0Iiwi2LbYrCIsIu+ytSIsIti22K0iLCLvsrYiLCLYttiuIiwi77K3Iiwi2LbZhSIsIu+yuCIsIti32K0iLCLvsrkiLCLYuNmFIiwi77K6Iiwi2LnYrCIsIu+yuyIsIti52YUiLCLvsrwiLCLYutisIiwi77K9Iiwi2LrZhSIsIu+yviIsItmB2KwiLCLvsr8iLCLZgditIiwi77OAIiwi2YHYriIsIu+zgSIsItmB2YUiLCLvs4IiLCLZgtitIiwi77ODIiwi2YLZhSIsIu+zhCIsItmD2KwiLCLvs4UiLCLZg9itIiwi77OGIiwi2YPYriIsIu+zhyIsItmD2YQiLCLvs4giLCLZg9mFIiwi77OJIiwi2YTYrCIsIu+ziiIsItmE2K0iLCLvs4siLCLZhNiuIiwi77OMIiwi2YTZhSIsIu+zjSIsItmE2YciLCLvs44iLCLZhdisIiwi77OPIiwi2YXYrSIsIu+zkCIsItmF2K4iLCLvs5EiLCLZhdmFIiwi77OSIiwi2YbYrCIsIu+zkyIsItmG2K0iLCLvs5QiLCLZhtiuIiwi77OVIiwi2YbZhSIsIu+zliIsItmG2YciLCLvs5ciLCLZh9isIiwi77OYIiwi2YfZhSIsIu+zmSIsItmH2bAiLCLvs5oiLCLZitisIiwi77ObIiwi2YrYrSIsIu+znCIsItmK2K4iLCLvs50iLCLZitmFIiwi77OeIiwi2YrZhyIsIu+znyIsItim2YUiLCLvs6AiLCLYptmHIiwi77OhIiwi2KjZhSIsIu+zoiIsItio2YciLCLvs6MiLCLYqtmFIiwi77OkIiwi2KrZhyIsIu+zpSIsItir2YUiLCLvs6YiLCLYq9mHIiwi77OnIiwi2LPZhSIsIu+zqCIsItiz2YciLCLvs6kiLCLYtNmFIiwi77OqIiwi2LTZhyIsIu+zqyIsItmD2YQiLCLvs6wiLCLZg9mFIiwi77OtIiwi2YTZhSIsIu+zriIsItmG2YUiLCLvs68iLCLZhtmHIiwi77OwIiwi2YrZhSIsIu+zsSIsItmK2YciLCLvs7IiLCLZgNmO2ZEiLCLvs7MiLCLZgNmP2ZEiLCLvs7QiLCLZgNmQ2ZEiLCLvs7UiLCLYt9mJIiwi77O2Iiwi2LfZiiIsIu+ztyIsIti52YkiLCLvs7giLCLYudmKIiwi77O5Iiwi2LrZiSIsIu+zuiIsIti62YoiLCLvs7siLCLYs9mJIiwi77O8Iiwi2LPZiiIsIu+zvSIsIti02YkiLCLvs74iLCLYtNmKIiwi77O/Iiwi2K3ZiSIsIu+0gCIsItit2YoiLCLvtIEiLCLYrNmJIiwi77SCIiwi2KzZiiIsIu+0gyIsItiu2YkiLCLvtIQiLCLYrtmKIiwi77SFIiwi2LXZiSIsIu+0hiIsIti12YoiLCLvtIciLCLYttmJIiwi77SIIiwi2LbZiiIsIu+0iSIsIti02KwiLCLvtIoiLCLYtNitIiwi77SLIiwi2LTYriIsIu+0jCIsIti02YUiLCLvtI0iLCLYtNixIiwi77SOIiwi2LPYsSIsIu+0jyIsIti12LEiLCLvtJAiLCLYttixIiwi77SRIiwi2LfZiSIsIu+0kiIsIti32YoiLCLvtJMiLCLYudmJIiwi77SUIiwi2LnZiiIsIu+0lSIsIti62YkiLCLvtJYiLCLYutmKIiwi77SXIiwi2LPZiSIsIu+0mCIsItiz2YoiLCLvtJkiLCLYtNmJIiwi77SaIiwi2LTZiiIsIu+0myIsItit2YkiLCLvtJwiLCLYrdmKIiwi77SdIiwi2KzZiSIsIu+0niIsItis2YoiLCLvtJ8iLCLYrtmJIiwi77SgIiwi2K7ZiiIsIu+0oSIsIti12YkiLCLvtKIiLCLYtdmKIiwi77SjIiwi2LbZiSIsIu+0pCIsIti22YoiLCLvtKUiLCLYtNisIiwi77SmIiwi2LTYrSIsIu+0pyIsIti02K4iLCLvtKgiLCLYtNmFIiwi77SpIiwi2LTYsSIsIu+0qiIsItiz2LEiLCLvtKsiLCLYtdixIiwi77SsIiwi2LbYsSIsIu+0rSIsIti02KwiLCLvtK4iLCLYtNitIiwi77SvIiwi2LTYriIsIu+0sCIsIti02YUiLCLvtLEiLCLYs9mHIiwi77SyIiwi2LTZhyIsIu+0syIsIti32YUiLCLvtLQiLCLYs9isIiwi77S1Iiwi2LPYrSIsIu+0tiIsItiz2K4iLCLvtLciLCLYtNisIiwi77S4Iiwi2LTYrSIsIu+0uSIsIti02K4iLCLvtLoiLCLYt9mFIiwi77S7Iiwi2LjZhSIsIu+0vCIsItin2YsiLCLvtL0iLCLYp9mLIiwi77WQIiwi2KrYrNmFIiwi77WRIiwi2KrYrdisIiwi77WSIiwi2KrYrdisIiwi77WTIiwi2KrYrdmFIiwi77WUIiwi2KrYrtmFIiwi77WVIiwi2KrZhdisIiwi77WWIiwi2KrZhditIiwi77WXIiwi2KrZhdiuIiwi77WYIiwi2KzZhditIiwi77WZIiwi2KzZhditIiwi77WaIiwi2K3ZhdmKIiwi77WbIiwi2K3ZhdmJIiwi77WcIiwi2LPYrdisIiwi77WdIiwi2LPYrNitIiwi77WeIiwi2LPYrNmJIiwi77WfIiwi2LPZhditIiwi77WgIiwi2LPZhditIiwi77WhIiwi2LPZhdisIiwi77WiIiwi2LPZhdmFIiwi77WjIiwi2LPZhdmFIiwi77WkIiwi2LXYrditIiwi77WlIiwi2LXYrditIiwi77WmIiwi2LXZhdmFIiwi77WnIiwi2LTYrdmFIiwi77WoIiwi2LTYrdmFIiwi77WpIiwi2LTYrNmKIiwi77WqIiwi2LTZhdiuIiwi77WrIiwi2LTZhdiuIiwi77WsIiwi2LTZhdmFIiwi77WtIiwi2LTZhdmFIiwi77WuIiwi2LbYrdmJIiwi77WvIiwi2LbYrtmFIiwi77WwIiwi2LbYrtmFIiwi77WxIiwi2LfZhditIiwi77WyIiwi2LfZhditIiwi77WzIiwi2LfZhdmFIiwi77W0Iiwi2LfZhdmKIiwi77W1Iiwi2LnYrNmFIiwi77W2Iiwi2LnZhdmFIiwi77W3Iiwi2LnZhdmFIiwi77W4Iiwi2LnZhdmJIiwi77W5Iiwi2LrZhdmFIiwi77W6Iiwi2LrZhdmKIiwi77W7Iiwi2LrZhdmJIiwi77W8Iiwi2YHYrtmFIiwi77W9Iiwi2YHYrtmFIiwi77W+Iiwi2YLZhditIiwi77W/Iiwi2YLZhdmFIiwi77aAIiwi2YTYrdmFIiwi77aBIiwi2YTYrdmKIiwi77aCIiwi2YTYrdmJIiwi77aDIiwi2YTYrNisIiwi77aEIiwi2YTYrNisIiwi77aFIiwi2YTYrtmFIiwi77aGIiwi2YTYrtmFIiwi77aHIiwi2YTZhditIiwi77aIIiwi2YTZhditIiwi77aJIiwi2YXYrdisIiwi77aKIiwi2YXYrdmFIiwi77aLIiwi2YXYrdmKIiwi77aMIiwi2YXYrNitIiwi77aNIiwi2YXYrNmFIiwi77aOIiwi2YXYrtisIiwi77aPIiwi2YXYrtmFIiwi77aSIiwi2YXYrNiuIiwi77aTIiwi2YfZhdisIiwi77aUIiwi2YfZhdmFIiwi77aVIiwi2YbYrdmFIiwi77aWIiwi2YbYrdmJIiwi77aXIiwi2YbYrNmFIiwi77aYIiwi2YbYrNmFIiwi77aZIiwi2YbYrNmJIiwi77aaIiwi2YbZhdmKIiwi77abIiwi2YbZhdmJIiwi77acIiwi2YrZhdmFIiwi77adIiwi2YrZhdmFIiwi77aeIiwi2KjYrtmKIiwi77afIiwi2KrYrNmKIiwi77agIiwi2KrYrNmJIiwi77ahIiwi2KrYrtmKIiwi77aiIiwi2KrYrtmJIiwi77ajIiwi2KrZhdmKIiwi77akIiwi2KrZhdmJIiwi77alIiwi2KzZhdmKIiwi77amIiwi2KzYrdmJIiwi77anIiwi2KzZhdmJIiwi77aoIiwi2LPYrtmJIiwi77apIiwi2LXYrdmKIiwi77aqIiwi2LTYrdmKIiwi77arIiwi2LbYrdmKIiwi77asIiwi2YTYrNmKIiwi77atIiwi2YTZhdmKIiwi77auIiwi2YrYrdmKIiwi77avIiwi2YrYrNmKIiwi77awIiwi2YrZhdmKIiwi77axIiwi2YXZhdmKIiwi77ayIiwi2YLZhdmKIiwi77azIiwi2YbYrdmKIiwi77a0Iiwi2YLZhditIiwi77a1Iiwi2YTYrdmFIiwi77a2Iiwi2LnZhdmKIiwi77a3Iiwi2YPZhdmKIiwi77a4Iiwi2YbYrNitIiwi77a5Iiwi2YXYrtmKIiwi77a6Iiwi2YTYrNmFIiwi77a7Iiwi2YPZhdmFIiwi77a8Iiwi2YTYrNmFIiwi77a9Iiwi2YbYrNitIiwi77a+Iiwi2KzYrdmKIiwi77a/Iiwi2K3YrNmKIiwi77eAIiwi2YXYrNmKIiwi77eBIiwi2YHZhdmKIiwi77eCIiwi2KjYrdmKIiwi77eDIiwi2YPZhdmFIiwi77eEIiwi2LnYrNmFIiwi77eFIiwi2LXZhdmFIiwi77eGIiwi2LPYrtmKIiwi77eHIiwi2YbYrNmKIiwi77mJIiwi4oC+Iiwi77mKIiwi4oC+Iiwi77mLIiwi4oC+Iiwi77mMIiwi4oC+Iiwi77mNIiwiXyIsIu+5jiIsIl8iLCLvuY8iLCJfIiwi77qAIiwi2KEiLCLvuoEiLCLYoiIsIu+6giIsItiiIiwi77qDIiwi2KMiLCLvuoQiLCLYoyIsIu+6hSIsItikIiwi77qGIiwi2KQiLCLvuociLCLYpSIsIu+6iCIsItilIiwi77qJIiwi2KYiLCLvuooiLCLYpiIsIu+6iyIsItimIiwi77qMIiwi2KYiLCLvuo0iLCLYpyIsIu+6jiIsItinIiwi77qPIiwi2KgiLCLvupAiLCLYqCIsIu+6kSIsItioIiwi77qSIiwi2KgiLCLvupMiLCLYqSIsIu+6lCIsItipIiwi77qVIiwi2KoiLCLvupYiLCLYqiIsIu+6lyIsItiqIiwi77qYIiwi2KoiLCLvupkiLCLYqyIsIu+6miIsItirIiwi77qbIiwi2KsiLCLvupwiLCLYqyIsIu+6nSIsItisIiwi77qeIiwi2KwiLCLvup8iLCLYrCIsIu+6oCIsItisIiwi77qhIiwi2K0iLCLvuqIiLCLYrSIsIu+6oyIsItitIiwi77qkIiwi2K0iLCLvuqUiLCLYriIsIu+6piIsItiuIiwi77qnIiwi2K4iLCLvuqgiLCLYriIsIu+6qSIsItivIiwi77qqIiwi2K8iLCLvuqsiLCLYsCIsIu+6rCIsItiwIiwi77qtIiwi2LEiLCLvuq4iLCLYsSIsIu+6ryIsItiyIiwi77qwIiwi2LIiLCLvurEiLCLYsyIsIu+6siIsItizIiwi77qzIiwi2LMiLCLvurQiLCLYsyIsIu+6tSIsIti0Iiwi77q2Iiwi2LQiLCLvurciLCLYtCIsIu+6uCIsIti0Iiwi77q5Iiwi2LUiLCLvuroiLCLYtSIsIu+6uyIsIti1Iiwi77q8Iiwi2LUiLCLvur0iLCLYtiIsIu+6viIsIti2Iiwi77q/Iiwi2LYiLCLvu4AiLCLYtiIsIu+7gSIsIti3Iiwi77uCIiwi2LciLCLvu4MiLCLYtyIsIu+7hCIsIti3Iiwi77uFIiwi2LgiLCLvu4YiLCLYuCIsIu+7hyIsIti4Iiwi77uIIiwi2LgiLCLvu4kiLCLYuSIsIu+7iiIsIti5Iiwi77uLIiwi2LkiLCLvu4wiLCLYuSIsIu+7jSIsIti6Iiwi77uOIiwi2LoiLCLvu48iLCLYuiIsIu+7kCIsIti6Iiwi77uRIiwi2YEiLCLvu5IiLCLZgSIsIu+7kyIsItmBIiwi77uUIiwi2YEiLCLvu5UiLCLZgiIsIu+7liIsItmCIiwi77uXIiwi2YIiLCLvu5giLCLZgiIsIu+7mSIsItmDIiwi77uaIiwi2YMiLCLvu5siLCLZgyIsIu+7nCIsItmDIiwi77udIiwi2YQiLCLvu54iLCLZhCIsIu+7nyIsItmEIiwi77ugIiwi2YQiLCLvu6EiLCLZhSIsIu+7oiIsItmFIiwi77ujIiwi2YUiLCLvu6QiLCLZhSIsIu+7pSIsItmGIiwi77umIiwi2YYiLCLvu6ciLCLZhiIsIu+7qCIsItmGIiwi77upIiwi2YciLCLvu6oiLCLZhyIsIu+7qyIsItmHIiwi77usIiwi2YciLCLvu60iLCLZiCIsIu+7riIsItmIIiwi77uvIiwi2YkiLCLvu7AiLCLZiSIsIu+7sSIsItmKIiwi77uyIiwi2YoiLCLvu7MiLCLZiiIsIu+7tCIsItmKIiwi77u1Iiwi2YTYoiIsIu+7tiIsItmE2KIiLCLvu7ciLCLZhNijIiwi77u4Iiwi2YTYoyIsIu+7uSIsItmE2KUiLCLvu7oiLCLZhNilIiwi77u7Iiwi2YTYpyIsIu+7vCIsItmE2KciXX0pKTtmdW5jdGlvbiBsKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYodDw9MXx8IWZ1bmN0aW9uKGUpe2xldCB0PXNbMTNdO3JldHVybiBlPj10LmJlZ2luJiZlPHQuZW5kfHwodD1zWzExXSxlPj10LmJlZ2luJiZlPHQuZW5kKX0oZS5jaGFyQ29kZUF0KDApKSlyZXR1cm4gZTtjb25zdCByPVtdO2ZvcihsZXQgbj10LTE7bj49MDtuLS0pci5wdXNoKGVbbl0pO3JldHVybiByLmpvaW4oIiIpfWNvbnN0IGY9bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLGg9bmV3IE1hcDtmdW5jdGlvbiBkKGUpe2NvbnN0IHQ9aC5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCByPWUubWF0Y2goZiksbj17aXNXaGl0ZXNwYWNlOiEoIXJ8fCFyWzFdKSxpc1plcm9XaWR0aERpYWNyaXRpYzohKCFyfHwhclsyXSksaXNJbnZpc2libGVGb3JtYXRNYXJrOiEoIXJ8fCFyWzNdKX07cmV0dXJuIGguc2V0KGUsbiksbn1mdW5jdGlvbiBwKCl7aC5jbGVhcigpfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFNlcmlmRm9udHM9dC5nZXROb25TdGRGb250TWFwPXQuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPXQuZ2V0Rm9udE5hbWVUb0ZpbGVNYXA9dm9pZCAwLHQuZ2V0U3RhbmRhcmRGb250TmFtZT1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gaSgpW3RdfSx0LmdldFN5bWJvbHNGb250cz10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldFN0ZEZvbnRNYXA9dm9pZCAwO3ZhciBuPXIoMTM1KSxhPXIoMTY3KSxpPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiVGltZXMtUm9tYW4iXT0iVGltZXMtUm9tYW4iLGUuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiLGUuQ291cmllcj0iQ291cmllciIsZS5TeW1ib2w9IlN5bWJvbCIsZVsiVGltZXMtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJIZWx2ZXRpY2EtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ291cmllci1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZS5aYXBmRGluZ2JhdHM9IlphcGZEaW5nYmF0cyIsZVsiVGltZXMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyIsZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJDb3VyaWVyLU9ibGlxdWUiLGVbIlRpbWVzLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlLkFyaWFsTmFycm93PSJIZWx2ZXRpY2EiLGVbIkFyaWFsTmFycm93LUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbE5hcnJvdy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxCbGFjaz0iSGVsdmV0aWNhIixlWyJBcmlhbEJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlWyJBcmlhbC1CbGFjayJdPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbC1CbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWw9IkhlbHZldGljYSIsZVsiQXJpYWwtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZS5BcmlhbE1UPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxVbmljb2RlTVM9IkhlbHZldGljYSIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXItSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZS5Db3VyaWVyTmV3PSJDb3VyaWVyIixlWyJDb3VyaWVyTmV3LUJvbGQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3LUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllck5ldy1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIixlWyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXJOZXdQUy1Cb2xkTVQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXT0iQ291cmllci1PYmxpcXVlIixlLkNvdXJpZXJOZXdQU01UPSJDb3VyaWVyIixlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIlN5bWJvbC1Cb2xkIl09IlN5bWJvbCIsZVsiU3ltYm9sLUJvbGRJdGFsaWMiXT0iU3ltYm9sIixlWyJTeW1ib2wtSXRhbGljIl09IlN5bWJvbCIsZS5UaW1lc05ld1JvbWFuPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hbi1Cb2xkIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiLGUuVGltZXNOZXdSb21hblBTPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTLUJvbGQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZE1UIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXT0iVGltZXMtSXRhbGljIixlLlRpbWVzTmV3Um9tYW5QU01UPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QU01ULUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMifSkpO3QuZ2V0U3RkRm9udE1hcD1pO3ZhciBvPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPSJGb3hpdEZpeGVkLnBmYiIsZVsiQ291cmllci1Cb2xkIl09IkZveGl0Rml4ZWRCb2xkLnBmYiIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJGb3hpdEZpeGVkSXRhbGljLnBmYiIsZS5IZWx2ZXRpY2E9IkZveGl0U2Fucy5wZmIiLGVbIkhlbHZldGljYS1Cb2xkIl09IkZveGl0U2Fuc0JvbGQucGZiIixlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0iRm94aXRTYW5zQm9sZEl0YWxpYy5wZmIiLGVbIkhlbHZldGljYS1PYmxpcXVlIl09IkZveGl0U2Fuc0l0YWxpYy5wZmIiLGVbIlRpbWVzLVJvbWFuIl09IkZveGl0U2VyaWYucGZiIixlWyJUaW1lcy1Cb2xkIl09IkZveGl0U2VyaWZCb2xkLnBmYiIsZVsiVGltZXMtQm9sZEl0YWxpYyJdPSJGb3hpdFNlcmlmQm9sZEl0YWxpYy5wZmIiLGVbIlRpbWVzLUl0YWxpYyJdPSJGb3hpdFNlcmlmSXRhbGljLnBmYiIsZS5TeW1ib2w9IkZveGl0U3ltYm9sLnBmYiIsZS5aYXBmRGluZ2JhdHM9IkZveGl0RGluZ2JhdHMucGZiIixlWyJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIl09IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkIl09IkxpYmVyYXRpb25TYW5zLUJvbGQudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiIsZVsiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiJ9KSk7dC5nZXRGb250TmFtZVRvRmlsZU1hcD1vO3ZhciBzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5DYWxpYnJpPSJIZWx2ZXRpY2EiLGVbIkNhbGlicmktQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ2FsaWJyaS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQ2VudHVyeUdvdGhpYz0iSGVsdmV0aWNhIixlWyJDZW50dXJ5R290aGljLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkNlbnR1cnlHb3RoaWMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkNlbnR1cnlHb3RoaWMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkNvbWljU2Fuc01TPSJDb21pYyBTYW5zIE1TIixlWyJDb21pY1NhbnNNUy1Cb2xkIl09IkNvbWljIFNhbnMgTVMtQm9sZCIsZVsiQ29taWNTYW5zTVMtQm9sZEl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUJvbGRJdGFsaWMiLGVbIkNvbWljU2Fuc01TLUl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUl0YWxpYyIsZVsiSXRjU3ltYm9sLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkl0Y1N5bWJvbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLUJvb2siXT0iSGVsdmV0aWNhIixlWyJJdGNTeW1ib2wtQm9va0l0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLU1lZGl1bSJdPSJIZWx2ZXRpY2EiLGVbIkl0Y1N5bWJvbC1NZWRpdW1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuTHVjaWRhQ29uc29sZT0iQ291cmllciIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkx1Y2lkYUNvbnNvbGUtSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZVsiTHVjaWRhU2Fucy1EZW1pIl09IkhlbHZldGljYS1Cb2xkIixlWyJNUy1Hb3RoaWMiXT0iTVMgR290aGljIixlWyJNUy1Hb3RoaWMtQm9sZCJdPSJNUyBHb3RoaWMtQm9sZCIsZVsiTVMtR290aGljLUJvbGRJdGFsaWMiXT0iTVMgR290aGljLUJvbGRJdGFsaWMiLGVbIk1TLUdvdGhpYy1JdGFsaWMiXT0iTVMgR290aGljLUl0YWxpYyIsZVsiTVMtTWluY2hvIl09Ik1TIE1pbmNobyIsZVsiTVMtTWluY2hvLUJvbGQiXT0iTVMgTWluY2hvLUJvbGQiLGVbIk1TLU1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIE1pbmNoby1Cb2xkSXRhbGljIixlWyJNUy1NaW5jaG8tSXRhbGljIl09Ik1TIE1pbmNoby1JdGFsaWMiLGVbIk1TLVBHb3RoaWMiXT0iTVMgUEdvdGhpYyIsZVsiTVMtUEdvdGhpYy1Cb2xkIl09Ik1TIFBHb3RoaWMtQm9sZCIsZVsiTVMtUEdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIFBHb3RoaWMtQm9sZEl0YWxpYyIsZVsiTVMtUEdvdGhpYy1JdGFsaWMiXT0iTVMgUEdvdGhpYy1JdGFsaWMiLGVbIk1TLVBNaW5jaG8iXT0iTVMgUE1pbmNobyIsZVsiTVMtUE1pbmNoby1Cb2xkIl09Ik1TIFBNaW5jaG8tQm9sZCIsZVsiTVMtUE1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIFBNaW5jaG8tQm9sZEl0YWxpYyIsZVsiTVMtUE1pbmNoby1JdGFsaWMiXT0iTVMgUE1pbmNoby1JdGFsaWMiLGUuTnVwdGlhbFNjcmlwdD0iVGltZXMtSXRhbGljIixlLlNlZ29lVUlTeW1ib2w9IkhlbHZldGljYSIsZS5XaW5nZGluZ3M9IlphcGZEaW5nYmF0cyIsZVsiV2luZ2RpbmdzLVJlZ3VsYXIiXT0iWmFwZkRpbmdiYXRzIn0pKTt0LmdldE5vblN0ZEZvbnRNYXA9czt2YXIgYz0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwLGVbIkFkb2JlIFRleHQiXT0hMCxlLkFsYmVydHVzPSEwLGUuQWxkdXM9ITAsZS5BbGV4YW5kcmlhPSEwLGUuQWxnZXJpYW49ITAsZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwLGUuQW50aXF1YT0hMCxlLkFwZXg9ITAsZS5Bcm5vPSEwLGUuQXN0ZXI9ITAsZS5BdXJvcmE9ITAsZS5CYXNrZXJ2aWxsZT0hMCxlLkJlbGw9ITAsZS5CZW1ibz0hMCxlWyJCZW1ibyBTY2hvb2xib29rIl09ITAsZS5CZW5ndWlhdD0hMCxlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMCxlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMCxlWyJCZXJ0aG9sZCBDaXR5Il09ITAsZS5Cb2Rvbmk9ITAsZVsiQmF1ZXIgQm9kb25pIl09ITAsZVsiQm9vayBBbnRpcXVhIl09ITAsZS5Cb29rbWFuPSEwLGVbIkJvcmRlYXV4IFJvbWFuIl09ITAsZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMCxlLkNhbGlzdG89ITAsZS5DYWx2ZXJ0PSEwLGUuQ2FwaXRhbHM9ITAsZS5DYW1icmlhPSEwLGUuQ2FydGllcj0hMCxlLkNhc2xvbj0hMCxlLkNhdHVsbD0hMCxlLkNlbnRhdXI9ITAsZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMCxlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMCxlLkNoYXBhcnJhbD0hMCxlWyJDaGFyaXMgU0lMIl09ITAsZS5DaGVsdGVuaGFtPSEwLGVbIkNob2xsYSBTbGFiIl09ITAsZS5DbGFyZW5kb249ITAsZS5DbGVhcmZhY2U9ITAsZS5Db2NoaW49ITAsZS5Db2xvbm5hPSEwLGVbIkNvbXB1dGVyIE1vZGVybiJdPSEwLGVbIkNvbmNyZXRlIFJvbWFuIl09ITAsZS5Db25zdGFudGlhPSEwLGVbIkNvb3BlciBCbGFjayJdPSEwLGUuQ29yb25hPSEwLGUuRWNvdHlwZT0hMCxlLkVneXB0aWVubmU9ITAsZS5FbGVwaGFudD0hMCxlLkV4Y2Vsc2lvcj0hMCxlLkZhaXJmaWVsZD0hMCxlWyJGRiBTY2FsYSJdPSEwLGUuRm9sa2FyZD0hMCxlLkZvb3RsaWdodD0hMCxlLkZyZWVTZXJpZj0hMCxlWyJGcml6IFF1YWRyYXRhIl09ITAsZS5HYXJhbW9uZD0hMCxlLkdlbnRpdW09ITAsZS5HZW9yZ2lhPSEwLGUuR2xvdWNlc3Rlcj0hMCxlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMCxlWyJHb3VkeSBTY2hvb2xib29rIl09ITAsZVsiR291ZHkgUHJvIEZvbnQiXT0hMCxlLkdyYW5qb249ITAsZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMCxlLkhlYXRoZXI9ITAsZS5IZXJjdWxlcz0hMCxlWyJIaWdoIFRvd2VyIFRleHQiXT0hMCxlLkhpcm9zaGlnZT0hMCxlWyJIb2VmbGVyIFRleHQiXT0hMCxlWyJIdW1hbmEgU2VyaWYiXT0hMCxlLkltcHJpbnQ9ITAsZVsiSW9uaWMgTm8uIDUiXT0hMCxlLkphbnNvbj0hMCxlLkpvYW5uYT0hMCxlLktvcmlubmE9ITAsZS5MZXhpY29uPSEwLGUuTGliZXJhdGlvblNlcmlmPSEwLGVbIkxpYmVyYXRpb24gU2VyaWYiXT0hMCxlWyJMaW51eCBMaWJlcnRpbmUiXT0hMCxlLkxpdGVyYXR1cm5heWE9ITAsZS5MdWNpZGE9ITAsZVsiTHVjaWRhIEJyaWdodCJdPSEwLGUuTWVsaW9yPSEwLGUuTWVtcGhpcz0hMCxlLk1pbGxlcj0hMCxlLk1pbmlvbj0hMCxlLk1vZGVybj0hMCxlWyJNb25hIExpc2EiXT0hMCxlWyJNcnMgRWF2ZXMiXT0hMCxlWyJNUyBTZXJpZiJdPSEwLGVbIk11c2VvIFNsYWIiXT0hMCxlWyJOZXcgWW9yayJdPSEwLGVbIk5pbWJ1cyBSb21hbiJdPSEwLGVbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwLGUuTnVwdGlhbFNjcmlwdD0hMCxlLlBhbGF0aW5vPSEwLGUuUGVycGV0dWE9ITAsZS5QbGFudGluPSEwLGVbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwLGUuUGxheWJpbGw9ITAsZVsiUG9vciBSaWNoYXJkIl09ITAsZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMCxlLlJlbmF1bHQ9ITAsZS5SZXF1aWVtPSEwLGUuUm9ja3dlbGw9ITAsZS5Sb21hbj0hMCxlWyJSb3RpcyBTZXJpZiJdPSEwLGUuU2Fib249ITAsZS5TY2FsYT0hMCxlLlNlYWd1bGw9ITAsZS5TaXN0aW5hPSEwLGUuU291dmVuaXI9ITAsZS5TVElYPSEwLGVbIlN0b25lIEluZm9ybWFsIl09ITAsZVsiU3RvbmUgU2VyaWYiXT0hMCxlLlN5bGZhZW49ITAsZS5UaW1lcz0hMCxlLlRyYWphbj0hMCxlWyJUcmluaXTDqSJdPSEwLGVbIlRydW1wIE1lZGlhZXZhbCJdPSEwLGUuVXRvcGlhPSEwLGVbIlZhbGUgVHlwZSJdPSEwLGVbIkJpdHN0cmVhbSBWZXJhIl09ITAsZVsiVmVyYSBTZXJpZiJdPSEwLGUuVmVyc2FpbGxlcz0hMCxlLldhbnRlZD0hMCxlLldlaXNzPSEwLGVbIldpZGUgTGF0aW4iXT0hMCxlLldpbmRzb3I9ITAsZS5YSVRTPSEwfSkpO3QuZ2V0U2VyaWZGb250cz1jO3ZhciB1PSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5EaW5nYmF0cz0hMCxlLlN5bWJvbD0hMCxlLlphcGZEaW5nYmF0cz0hMH0pKTt0LmdldFN5bWJvbHNGb250cz11O3ZhciBsPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsyXT0xMCxlWzNdPTMyLGVbNF09MzMsZVs1XT0zNCxlWzZdPTM1LGVbN109MzYsZVs4XT0zNyxlWzldPTM4LGVbMTBdPTM5LGVbMTFdPTQwLGVbMTJdPTQxLGVbMTNdPTQyLGVbMTRdPTQzLGVbMTVdPTQ0LGVbMTZdPTQ1LGVbMTddPTQ2LGVbMThdPTQ3LGVbMTldPTQ4LGVbMjBdPTQ5LGVbMjFdPTUwLGVbMjJdPTUxLGVbMjNdPTUyLGVbMjRdPTUzLGVbMjVdPTU0LGVbMjZdPTU1LGVbMjddPTU2LGVbMjhdPTU3LGVbMjldPTU4LGVbMzBdPTg5NCxlWzMxXT02MCxlWzMyXT02MSxlWzMzXT02MixlWzM0XT02MyxlWzM1XT02NCxlWzM2XT02NSxlWzM3XT02NixlWzM4XT02NyxlWzM5XT02OCxlWzQwXT02OSxlWzQxXT03MCxlWzQyXT03MSxlWzQzXT03MixlWzQ0XT03MyxlWzQ1XT03NCxlWzQ2XT03NSxlWzQ3XT03NixlWzQ4XT03NyxlWzQ5XT03OCxlWzUwXT03OSxlWzUxXT04MCxlWzUyXT04MSxlWzUzXT04MixlWzU0XT04MyxlWzU1XT04NCxlWzU2XT04NSxlWzU3XT04NixlWzU4XT04NyxlWzU5XT04OCxlWzYwXT04OSxlWzYxXT05MCxlWzYyXT05MSxlWzYzXT05MixlWzY0XT05MyxlWzY1XT05NCxlWzY2XT05NSxlWzY3XT05NixlWzY4XT05NyxlWzY5XT05OCxlWzcwXT05OSxlWzcxXT0xMDAsZVs3Ml09MTAxLGVbNzNdPTEwMixlWzc0XT0xMDMsZVs3NV09MTA0LGVbNzZdPTEwNSxlWzc3XT0xMDYsZVs3OF09MTA3LGVbNzldPTEwOCxlWzgwXT0xMDksZVs4MV09MTEwLGVbODJdPTExMSxlWzgzXT0xMTIsZVs4NF09MTEzLGVbODVdPTExNCxlWzg2XT0xMTUsZVs4N109MTE2LGVbODhdPTExNyxlWzg5XT0xMTgsZVs5MF09MTE5LGVbOTFdPTEyMCxlWzkyXT0xMjEsZVs5M109MTIyLGVbOTRdPTEyMyxlWzk1XT0xMjQsZVs5Nl09MTI1LGVbOTddPTEyNixlWzk4XT0xOTYsZVs5OV09MTk3LGVbMTAwXT0xOTksZVsxMDFdPTIwMSxlWzEwMl09MjA5LGVbMTAzXT0yMTQsZVsxMDRdPTIyMCxlWzEwNV09MjI1LGVbMTA2XT0yMjQsZVsxMDddPTIyNixlWzEwOF09MjI4LGVbMTA5XT0yMjcsZVsxMTBdPTIyOSxlWzExMV09MjMxLGVbMTEyXT0yMzMsZVsxMTNdPTIzMixlWzExNF09MjM0LGVbMTE1XT0yMzUsZVsxMTZdPTIzNyxlWzExN109MjM2LGVbMTE4XT0yMzgsZVsxMTldPTIzOSxlWzEyMF09MjQxLGVbMTIxXT0yNDMsZVsxMjJdPTI0MixlWzEyM109MjQ0LGVbMTI0XT0yNDYsZVsxMjVdPTI0NSxlWzEyNl09MjUwLGVbMTI3XT0yNDksZVsxMjhdPTI1MSxlWzEyOV09MjUyLGVbMTMwXT04MjI0LGVbMTMxXT0xNzYsZVsxMzJdPTE2MixlWzEzM109MTYzLGVbMTM0XT0xNjcsZVsxMzVdPTgyMjYsZVsxMzZdPTE4MixlWzEzN109MjIzLGVbMTM4XT0xNzQsZVsxMzldPTE2OSxlWzE0MF09ODQ4MixlWzE0MV09MTgwLGVbMTQyXT0xNjgsZVsxNDNdPTg4MDAsZVsxNDRdPTE5OCxlWzE0NV09MjE2LGVbMTQ2XT04NzM0LGVbMTQ3XT0xNzcsZVsxNDhdPTg4MDQsZVsxNDldPTg4MDUsZVsxNTBdPTE2NSxlWzE1MV09MTgxLGVbMTUyXT04NzA2LGVbMTUzXT04NzIxLGVbMTU0XT04NzE5LGVbMTU2XT04NzQ3LGVbMTU3XT0xNzAsZVsxNThdPTE4NixlWzE1OV09ODQ4NixlWzE2MF09MjMwLGVbMTYxXT0yNDgsZVsxNjJdPTE5MSxlWzE2M109MTYxLGVbMTY0XT0xNzIsZVsxNjVdPTg3MzAsZVsxNjZdPTQwMixlWzE2N109ODc3NixlWzE2OF09ODcxMCxlWzE2OV09MTcxLGVbMTcwXT0xODcsZVsxNzFdPTgyMzAsZVsxNzldPTgyMjAsZVsxODBdPTgyMjEsZVsxODFdPTgyMTYsZVsxODJdPTgyMTcsZVsyMDBdPTE5MyxlWzIwM109MjA1LGVbMjEwXT0yMTgsZVsyMjNdPTcxMSxlWzIyNF09MzIxLGVbMjI1XT0zMjIsZVsyMjZdPTM1MixlWzIyN109MzUzLGVbMjI4XT0zODEsZVsyMjldPTM4MixlWzIzM109MjIxLGVbMjM0XT0yNTMsZVsyNTJdPTI2MyxlWzI1M109MjY4LGVbMjU0XT0yNjksZVsyNThdPTI1OCxlWzI2MF09MjYwLGVbMjYxXT0yNjEsZVsyNjVdPTI4MCxlWzI2Nl09MjgxLGVbMjY3XT0yODIsZVsyNjhdPTI4MyxlWzI2OV09MzEzLGVbMjc1XT0zMjMsZVsyNzZdPTMyNCxlWzI3OF09MzI4LGVbMjgzXT0zNDQsZVsyODRdPTM0NSxlWzI4NV09MzQ2LGVbMjg2XT0zNDcsZVsyOTJdPTM2NyxlWzI5NV09Mzc3LGVbMjk2XT0zNzgsZVsyOThdPTM4MCxlWzMwNV09OTYzLGVbMzA2XT05NjQsZVszMDddPTk2NixlWzMwOF09ODIxNSxlWzMwOV09ODI1MixlWzMxMF09ODMxOSxlWzMxMV09ODM1OSxlWzMxMl09ODU5MixlWzMxM109ODU5MyxlWzMzN109OTU1MixlWzQ5M109MTAzOSxlWzQ5NF09MTA0MCxlWzY3Ml09MTQ4OCxlWzY3M109MTQ4OSxlWzY3NF09MTQ5MCxlWzY3NV09MTQ5MSxlWzY3Nl09MTQ5MixlWzY3N109MTQ5MyxlWzY3OF09MTQ5NCxlWzY3OV09MTQ5NSxlWzY4MF09MTQ5NixlWzY4MV09MTQ5NyxlWzY4Ml09MTQ5OCxlWzY4M109MTQ5OSxlWzY4NF09MTUwMCxlWzY4NV09MTUwMSxlWzY4Nl09MTUwMixlWzY4N109MTUwMyxlWzY4OF09MTUwNCxlWzY4OV09MTUwNSxlWzY5MF09MTUwNixlWzY5MV09MTUwNyxlWzY5Ml09MTUwOCxlWzY5M109MTUwOSxlWzY5NF09MTUxMCxlWzY5NV09MTUxMSxlWzY5Nl09MTUxMixlWzY5N109MTUxMyxlWzY5OF09MTUxNCxlWzcwNV09MTUyNCxlWzcwNl09ODM2MixlWzcxMF09NjQyODgsZVs3MTFdPTY0Mjk4LGVbNzU5XT0xNjE3LGVbNzYxXT0xNzc2LGVbNzYzXT0xNzc4LGVbNzc1XT0xNjUyLGVbNzc3XT0xNzY0LGVbNzc4XT0xNzgwLGVbNzc5XT0xNzgxLGVbNzgwXT0xNzgyLGVbNzgyXT03NzEsZVs3ODNdPTY0NzI2LGVbNzg2XT04MzYzLGVbNzg4XT04NTMyLGVbNzkwXT03NjgsZVs3OTFdPTc2OSxlWzc5Ml09NzY4LGVbNzk1XT04MDMsZVs3OTddPTY0MzM2LGVbNzk4XT02NDMzNyxlWzc5OV09NjQzNDIsZVs4MDBdPTY0MzQzLGVbODAxXT02NDM0NCxlWzgwMl09NjQzNDUsZVs4MDNdPTY0MzYyLGVbODA0XT02NDM2MyxlWzgwNV09NjQzNjQsZVsyNDI0XT03ODIxLGVbMjQyNV09NzgyMixlWzI0MjZdPTc4MjMsZVsyNDI3XT03ODI0LGVbMjQyOF09NzgyNSxlWzI0MjldPTc4MjYsZVsyNDMwXT03ODI3LGVbMjQzM109NzY4MixlWzI2NzhdPTgwNDUsZVsyNjc5XT04MDQ2LGVbMjgzMF09MTU1MixlWzI4MzhdPTY4NixlWzI4NDBdPTc1MSxlWzI4NDJdPTc1MyxlWzI4NDNdPTc1NCxlWzI4NDRdPTc1NSxlWzI4NDZdPTc1NyxlWzI4NTZdPTc2NyxlWzI4NTddPTg0OCxlWzI4NThdPTg0OSxlWzI4NjJdPTg1MyxlWzI4NjNdPTg1NCxlWzI4NjRdPTg1NSxlWzI4NjVdPTg2MSxlWzI4NjZdPTg2MixlWzI5MDZdPTc0NjAsZVsyOTA4XT03NDYyLGVbMjkwOV09NzQ2MyxlWzI5MTBdPTc0NjQsZVsyOTEyXT03NDY2LGVbMjkxM109NzQ2NyxlWzI5MTRdPTc0NjgsZVsyOTE2XT03NDcwLGVbMjkxN109NzQ3MSxlWzI5MThdPTc0NzIsZVsyOTIwXT03NDc0LGVbMjkyMV09NzQ3NSxlWzI5MjJdPTc0NzYsZVsyOTI0XT03NDc4LGVbMjkyNV09NzQ3OSxlWzI5MjZdPTc0ODAsZVsyOTI4XT03NDgyLGVbMjkyOV09NzQ4MyxlWzI5MzBdPTc0ODQsZVsyOTMyXT03NDg2LGVbMjkzM109NzQ4NyxlWzI5MzRdPTc0ODgsZVsyOTM2XT03NDkwLGVbMjkzN109NzQ5MSxlWzI5MzhdPTc0OTIsZVsyOTQwXT03NDk0LGVbMjk0MV09NzQ5NSxlWzI5NDJdPTc0OTYsZVsyOTQ0XT03NDk4LGVbMjk0Nl09NzUwMCxlWzI5NDhdPTc1MDIsZVsyOTUwXT03NTA0LGVbMjk1MV09NzUwNSxlWzI5NTJdPTc1MDYsZVsyOTU0XT03NTA4LGVbMjk1NV09NzUwOSxlWzI5NTZdPTc1MTAsZVsyOTU4XT03NTEyLGVbMjk1OV09NzUxMyxlWzI5NjBdPTc1MTQsZVsyOTYyXT03NTE2LGVbMjk2M109NzUxNyxlWzI5NjRdPTc1MTgsZVsyOTY2XT03NTIwLGVbMjk2N109NzUyMSxlWzI5NjhdPTc1MjIsZVsyOTcwXT03NTI0LGVbMjk3MV09NzUyNSxlWzI5NzJdPTc1MjYsZVsyOTc0XT03NTI4LGVbMjk3NV09NzUyOSxlWzI5NzZdPTc1MzAsZVsyOTc4XT0xNTM3LGVbMjk3OV09MTUzOCxlWzI5ODBdPTE1MzksZVsyOTgyXT0xNTQ5LGVbMjk4M109MTU1MSxlWzI5ODRdPTE1NTIsZVsyOTg2XT0xNTU0LGVbMjk4N109MTU1NSxlWzI5ODhdPTE1NTYsZVsyOTkwXT0xNjIzLGVbMjk5MV09MTYyNCxlWzI5OTVdPTE3NzUsZVsyOTk5XT0xNzkxLGVbMzAwMl09NjQyOTAsZVszMDAzXT02NDI5MSxlWzMwMDRdPTY0MjkyLGVbMzAwNl09NjQyOTQsZVszMDA3XT02NDI5NSxlWzMwMDhdPTY0Mjk2LGVbMzAxMV09MTkwMCxlWzMwMTRdPTgyMjMsZVszMDE1XT04MjQ0LGVbMzAxN109NzUzMixlWzMwMThdPTc1MzMsZVszMDE5XT03NTM0LGVbMzA3NV09NzU5MCxlWzMwNzZdPTc1OTEsZVszMDc5XT03NTk0LGVbMzA4MF09NzU5NSxlWzMwODNdPTc1OTgsZVszMDg0XT03NTk5LGVbMzA4N109NzYwMixlWzMwODhdPTc2MDMsZVszMDkxXT03NjA2LGVbMzA5Ml09NzYwNyxlWzMwOTVdPTc2MTAsZVszMDk2XT03NjExLGVbMzA5OV09NzYxNCxlWzMxMDBdPTc2MTUsZVszMTAzXT03NjE4LGVbMzEwNF09NzYxOSxlWzMxMDddPTgzMzcsZVszMTA4XT04MzM4LGVbMzExNl09MTg4NCxlWzMxMTldPTE4ODUsZVszMTIwXT0xODg1LGVbMzEyM109MTg4NixlWzMxMjRdPTE4ODYsZVszMTI3XT0xODg3LGVbMzEyOF09MTg4NyxlWzMxMzFdPTE4ODgsZVszMTMyXT0xODg4LGVbMzEzNV09MTg4OSxlWzMxMzZdPTE4ODksZVszMTM5XT0xODkwLGVbMzE0MF09MTg5MCxlWzMxNDNdPTE4OTEsZVszMTQ0XT0xODkxLGVbMzE0N109MTg5MixlWzMxNDhdPTE4OTIsZVszMTUzXT01ODAsZVszMTU0XT01ODEsZVszMTU3XT01ODQsZVszMTU4XT01ODUsZVszMTYxXT01ODgsZVszMTYyXT01ODksZVszMTY1XT04OTEsZVszMTY2XT04OTIsZVszMTY5XT0xMjc0LGVbMzE3MF09MTI3NSxlWzMxNzNdPTEyNzgsZVszMTc0XT0xMjc5LGVbMzE4MV09NzYyMixlWzMxODJdPTc2MjMsZVszMjgyXT0xMTc5OSxlWzMzMTZdPTU3OCxlWzMzNzldPTQyNzg1LGVbMzM5M109MTE1OSxlWzM0MTZdPTgzNzd9KSk7dC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM9bDt2YXIgZj0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjIsZVsyNjRdPTI2MSxlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPWY7dmFyIGg9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWzFdPTMyLGVbNF09NjUsZVs1XT0xOTIsZVs2XT0xOTMsZVs5XT0xOTYsZVsxN109NjYsZVsxOF09NjcsZVsyMV09MjY4LGVbMjRdPTY4LGVbMjhdPTY5LGVbMjldPTIwMCxlWzMwXT0yMDEsZVszMl09MjgyLGVbMzhdPTcwLGVbMzldPTcxLGVbNDRdPTcyLGVbNDddPTczLGVbNDhdPTIwNCxlWzQ5XT0yMDUsZVs1OF09NzQsZVs2MF09NzUsZVs2Ml09NzYsZVs2OF09NzcsZVs2OV09NzgsZVs3NV09NzksZVs3Nl09MjEwLGVbODBdPTIxNCxlWzg3XT04MCxlWzg5XT04MSxlWzkwXT04MixlWzkyXT0zNDQsZVs5NF09ODMsZVs5N109MzUyLGVbMTAwXT04NCxlWzEwNF09ODUsZVsxMDldPTIyMCxlWzExNV09ODYsZVsxMTZdPTg3LGVbMTIxXT04OCxlWzEyMl09ODksZVsxMjRdPTIyMSxlWzEyN109OTAsZVsxMjldPTM4MSxlWzI1OF09OTcsZVsyNTldPTIyNCxlWzI2MF09MjI1LGVbMjYzXT0yMjgsZVsyNjhdPTI2MSxlWzI3MV09OTgsZVsyNzJdPTk5LGVbMjczXT0yNjMsZVsyNzVdPTI2OSxlWzI4Ml09MTAwLGVbMjg2XT0xMDEsZVsyODddPTIzMixlWzI4OF09MjMzLGVbMjkwXT0yODMsZVsyOTVdPTI4MSxlWzI5Nl09MTAyLGVbMzM2XT0xMDMsZVszNDZdPTEwNCxlWzM0OV09MTA1LGVbMzUwXT0yMzYsZVszNTFdPTIzNyxlWzM2MV09MTA2LGVbMzY0XT0xMDcsZVszNjddPTEwOCxlWzM3MV09MzIyLGVbMzczXT0xMDksZVszNzRdPTExMCxlWzM4MV09MTExLGVbMzgyXT0yNDIsZVszODNdPTI0MyxlWzM4Nl09MjQ2LGVbMzkzXT0xMTIsZVszOTVdPTExMyxlWzM5Nl09MTE0LGVbMzk4XT0zNDUsZVs0MDBdPTExNSxlWzQwMV09MzQ3LGVbNDAzXT0zNTMsZVs0MTBdPTExNixlWzQzN109MTE3LGVbNDQyXT0yNTIsZVs0NDhdPTExOCxlWzQ0OV09MTE5LGVbNDU0XT0xMjAsZVs0NTVdPTEyMSxlWzQ1N109MjUzLGVbNDYwXT0xMjIsZVs0NjJdPTM4MixlWzQ2M109MzgwLGVbODUzXT00NCxlWzg1NV09NTgsZVs4NTZdPTQ2LGVbODc2XT00NyxlWzg3OF09NDUsZVs4ODJdPTQ1LGVbODk0XT00MCxlWzg5NV09NDEsZVs4OTZdPTkxLGVbODk3XT05MyxlWzkyM109NjQsZVsxMDA0XT00OCxlWzEwMDVdPTQ5LGVbMTAwNl09NTAsZVsxMDA3XT01MSxlWzEwMDhdPTUyLGVbMTAwOV09NTMsZVsxMDEwXT01NCxlWzEwMTFdPTU1LGVbMTAxMl09NTYsZVsxMDEzXT01NyxlWzEwODFdPTM3LGVbMTA4NV09NDMsZVsxMDg2XT00NX0pKTt0LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9Vbmljb2RlTWFwPXQuSWRlbnRpdHlUb1VuaWNvZGVNYXA9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtpKHRoaXMsZSksdGhpcy5fbWFwPXR9cmV0dXJuIHMoZSxbe2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuX21hcFt0XS5jaGFyQ29kZUF0KDApKX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcFtlXX19LHtrZXk6ImNoYXJDb2RlT2YiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHIgaW4gdClpZih0W3JdPT09ZSlyZXR1cm4gMHxyO3JldHVybi0xfX0se2tleToiYW1lbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXRoaXMuX21hcFt0XT1lW3RdfX1dKSxlfSgpO3QuVG9Vbmljb2RlTWFwPWM7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aSh0aGlzLGUpLHRoaXMuZmlyc3RDaGFyPXQsdGhpcy5sYXN0Q2hhcj1yfXJldHVybiBzKGUsW3trZXk6Imxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENoYXIrMS10aGlzLmZpcnN0Q2hhcn19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmZpcnN0Q2hhcixyPXRoaXMubGFzdENoYXI7dDw9cjt0KyspZSh0LHQpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXJ9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9fSx7a2V5OiJhbWVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpIil9fV0pLGV9KCk7dC5JZGVudGl0eVRvVW5pY29kZU1hcD11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0ZGRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigxNjcpLGk9cigyKTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnByb3BlcnRpZXM9cjt2YXIgbz1uZXcgbi5DRkZQYXJzZXIodCxyLGEuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1vLnBhcnNlKCksdGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO3ZhciBzPW5ldyBuLkNGRkNvbXBpbGVyKHRoaXMuY2ZmKTt0aGlzLnNlYWNzPXRoaXMuY2ZmLnNlYWNzO3RyeXt0aGlzLmRhdGE9cy5jb21waWxlKCl9Y2F0Y2goZSl7KDAsaS53YXJuKSgiRmFpbGVkIHRvIGNvbXBpbGUgZm9udCAiK3IubG9hZGVkTmFtZSksdGhpcy5kYXRhPXR9dGhpcy5fY3JlYXRlQnVpbHRJbkVuY29kaW5nKCl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJudW1HbHlwaHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNmZi5jaGFyU3RyaW5ncy5jb3VudH19LHtrZXk6ImdldENoYXJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJzZXQuY2hhcnNldH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5jZmYsbj10aGlzLnByb3BlcnRpZXMsaT1uLmNpZFRvR2lkTWFwLG89bi5jTWFwLHM9ci5jaGFyc2V0LmNoYXJzZXQ7aWYobi5jb21wb3NpdGUpe3ZhciBjLHU7aWYoaSYmaS5sZW5ndGg+MCl7Yz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbD0wLGY9aS5sZW5ndGg7bDxmO2wrKyl7dmFyIGg9aVtsXTt2b2lkIDAhPT1oJiYoY1toXT1sKX19aWYoZT1PYmplY3QuY3JlYXRlKG51bGwpLHIuaXNDSURGb250KWZvcih0PTA7dDxzLmxlbmd0aDt0Kyspe3ZhciBkPXNbdF07dT1vLmNoYXJDb2RlT2YoZCksYyYmdm9pZCAwIT09Y1t1XSYmKHU9Y1t1XSksZVt1XT10fWVsc2UgZm9yKHQ9MDt0PHIuY2hhclN0cmluZ3MuY291bnQ7dCsrKWVbdT1vLmNoYXJDb2RlT2YodCldPXQ7cmV0dXJuIGV9dmFyIHA9ci5lbmNvZGluZz9yLmVuY29kaW5nLmVuY29kaW5nOm51bGw7cmV0dXJuIG4uaXNJbnRlcm5hbEZvbnQmJihwPW4uZGVmYXVsdEVuY29kaW5nKSwoMCxhLnR5cGUxRm9udEdseXBoTWFwcGluZykobixwLHMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoZSl9fSx7a2V5OiJfY3JlYXRlQnVpbHRJbkVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2ZmLHQ9ZS5jaGFyc2V0LHI9ZS5lbmNvZGluZztpZih0JiZyKXt2YXIgbj10LmNoYXJzZXQsYT1yLmVuY29kaW5nLGk9W107Zm9yKHZhciBvIGluIGEpe3ZhciBzPWFbb107aWYocz49MCl7dmFyIGM9bltzXTtjJiYoaVtvXT1jKX19aS5sZW5ndGg+MCYmKHRoaXMucHJvcGVydGllcy5idWlsdEluRW5jb2Rpbmc9aSl9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0ZGRm9udD1jfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY0KSxpPXIoMTY4KSxvPXIoMTY2KSxzPXIoMTM5KTtmdW5jdGlvbiBjKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1mKGUpO2lmKHQpe3ZhciBhPWYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gZihlKXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sZihlKX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxoKGUpfWZ1bmN0aW9uIGQoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWgoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1oKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscil7cmV0dXJuIHQmJnAoZS5wcm90b3R5cGUsdCksciYmcChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNik+PjE2fWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gZVt0XTw8MjQ+PjI0fWZ1bmN0aW9uIHcoZSx0KXtyZXR1cm4gbShlLHQpLzE2Mzg0fWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZS5sZW5ndGgscj0zMjc2ODtyZXR1cm4gdDwxMjQwP3I9MTA3OnQ8MzM5MDAmJihyPTExMzEpLHJ9ZnVuY3Rpb24gUyhlLHQscil7dmFyIGEsaSxvLHM9MT09PXkoZSx0KzIpP3YoZSx0KzgpOnYoZSx0KzE2KSxjPXkoZSx0K3MpO2lmKDQ9PT1jKXt5KGUsdCtzKzIpO3ZhciB1PXkoZSx0K3MrNik+PjE7Zm9yKGk9dCtzKzE0LGE9W10sbz0wO288dTtvKyssaSs9MilhW29dPXtlbmQ6eShlLGkpfTtmb3IoaSs9MixvPTA7bzx1O28rKyxpKz0yKWFbb10uc3RhcnQ9eShlLGkpO2ZvcihvPTA7bzx1O28rKyxpKz0yKWFbb10uaWREZWx0YT15KGUsaSk7Zm9yKG89MDtvPHU7bysrLGkrPTIpe3ZhciBsPXkoZSxpKTtpZigwIT09bCl7YVtvXS5pZHM9W107Zm9yKHZhciBmPTAsaD1hW29dLmVuZC1hW29dLnN0YXJ0KzE7ZjxoO2YrKylhW29dLmlkc1tmXT15KGUsaStsKSxsKz0yfX1yZXR1cm4gYX1pZigxMj09PWMpe3ZhciBkPXYoZSx0K3MrMTIpO2ZvcihpPXQrcysxNixhPVtdLG89MDtvPGQ7bysrKXQ9dihlLGkpLGEucHVzaCh7c3RhcnQ6dCxlbmQ6dihlLGkrNCksaWREZWx0YTp2KGUsaSs4KS10fSksaSs9MTI7cmV0dXJuIGF9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuc3VwcG9ydGVkIGNtYXA6ICIuY29uY2F0KGMpKX1mdW5jdGlvbiB4KGUsdCxyLG4pe3ZhciBpPW5ldyBhLkNGRlBhcnNlcihuZXcgcy5TdHJlYW0oZSx0LHItdCkse30sbikucGFyc2UoKTtyZXR1cm57Z2x5cGhzOmkuY2hhclN0cmluZ3Mub2JqZWN0cyxzdWJyczppLnRvcERpY3QucHJpdmF0ZURpY3QmJmkudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4JiZpLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleC5vYmplY3RzLGdzdWJyczppLmdsb2JhbFN1YnJJbmRleCYmaS5nbG9iYWxTdWJySW5kZXgub2JqZWN0cyxpc0NGRkNJREZvbnQ6aS5pc0NJREZvbnQsZmRTZWxlY3Q6aS5mZFNlbGVjdCxmZEFycmF5OmkuZmRBcnJheX19ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgcj10LmNvZGVQb2ludEF0KDApLG49MCxhPTAsaT1lLmxlbmd0aC0xO2E8aTspe3ZhciBvPWEraSsxPj4xO3I8ZVtvXS5zdGFydD9pPW8tMTphPW99cmV0dXJuIGVbYV0uc3RhcnQ8PXImJnI8PWVbYV0uZW5kJiYobj1lW2FdLmlkRGVsdGErKGVbYV0uaWRzP2VbYV0uaWRzW3ItZVthXS5zdGFydF06cikmNjU1MzUpLHtjaGFyQ29kZTpyLGdseXBoSWQ6bn19ZnVuY3Rpb24gQShlLHQscil7ZnVuY3Rpb24gbihlLHIpe3QucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBhKGUscil7dC5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSxyXX0pfWZ1bmN0aW9uIGkoZSxyLG4sYSl7dC5wdXNoKHtjbWQ6InF1YWRyYXRpY0N1cnZlVG8iLGFyZ3M6W2UscixuLGFdfSl9dmFyIG8scz0wLGM9bShlLHMpLHU9MCxsPTA7aWYocys9MTAsYzwwKWRve289eShlLHMpO3ZhciBmPXkoZSxzKzIpO3MrPTQ7dmFyIGg9dm9pZCAwLGQ9dm9pZCAwOzEmbz8oMiZvPyhoPW0oZSxzKSxkPW0oZSxzKzIpKTooaD15KGUscyksZD15KGUscysyKSkscys9NCk6MiZvPyhoPWIoZSxzKyspLGQ9YihlLHMrKykpOihoPWVbcysrXSxkPWVbcysrXSksMiZvPyh1PWgsbD1kKToodT0wLGw9MCk7dmFyIHA9MSxnPTEsdj0wLGs9MDs4Jm8/KHA9Zz13KGUscykscys9Mik6NjQmbz8ocD13KGUscyksZz13KGUscysyKSxzKz00KToxMjgmbyYmKHA9dyhlLHMpLHY9dyhlLHMrMiksaz13KGUscys0KSxnPXcoZSxzKzYpLHMrPTgpO3ZhciBTPXIuZ2x5cGhzW2ZdO1MmJih0LnB1c2goe2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zZm9ybSIsYXJnczpbcCx2LGssZyx1LGxdfSksQShTLHQsciksdC5wdXNoKHtjbWQ6InJlc3RvcmUifSkpfXdoaWxlKDMyJm8pO2Vsc2V7dmFyIHgsTyxDPVtdO2Zvcih4PTA7eDxjO3grKylDLnB1c2goeShlLHMpKSxzKz0yO3MrPTIreShlLHMpO2Zvcih2YXIgRj1DLmF0KC0xKSsxLFA9W107UC5sZW5ndGg8Rjspe3ZhciBUPTE7Zm9yKDgmKG89ZVtzKytdKSYmKFQrPWVbcysrXSk7VC0tID4wOylQLnB1c2goe2ZsYWdzOm99KX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgxOCZQW3hdLmZsYWdzKXtjYXNlIDA6dSs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSAyOnUtPWVbcysrXTticmVhaztjYXNlIDE4OnUrPWVbcysrXX1QW3hdLng9dX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgzNiZQW3hdLmZsYWdzKXtjYXNlIDA6bCs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSA0OmwtPWVbcysrXTticmVhaztjYXNlIDM2OmwrPWVbcysrXX1QW3hdLnk9bH12YXIgST0wO2ZvcihzPTA7czxjO3MrKyl7dmFyIEU9Q1tzXSxqPVAuc2xpY2UoSSxFKzEpO2lmKDEmalswXS5mbGFncylqLnB1c2goalswXSk7ZWxzZSBpZigxJmouYXQoLTEpLmZsYWdzKWoudW5zaGlmdChqLmF0KC0xKSk7ZWxzZXt2YXIgTT17ZmxhZ3M6MSx4OihqWzBdLngrai5hdCgtMSkueCkvMix5OihqWzBdLnkrai5hdCgtMSkueSkvMn07ai51bnNoaWZ0KE0pLGoucHVzaChNKX1mb3IobihqWzBdLngsalswXS55KSx4PTEsTz1qLmxlbmd0aDt4PE87eCsrKTEmalt4XS5mbGFncz9hKGpbeF0ueCxqW3hdLnkpOjEmalt4KzFdLmZsYWdzPyhpKGpbeF0ueCxqW3hdLnksalt4KzFdLngsalt4KzFdLnkpLHgrKyk6aShqW3hdLngsalt4XS55LChqW3hdLngralt4KzFdLngpLzIsKGpbeF0ueStqW3grMV0ueSkvMik7ST1FKzF9fX1mdW5jdGlvbiBDKGUsdCxyLGEpe2Z1bmN0aW9uIGkoZSxyKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLHJdfSl9ZnVuY3Rpb24gcyhlLHIpe3QucHVzaCh7Y21kOiJsaW5lVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBjKGUscixuLGEsaSxvKXt0LnB1c2goe2NtZDoiYmV6aWVyQ3VydmVUbyIsYXJnczpbZSxyLG4sYSxpLG9dfSl9dmFyIHU9W10sbD0wLGY9MCxoPTA7IWZ1bmN0aW9uIGUoZCl7Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDspe3ZhciBnPSExLHY9ZFtwKytdLHk9dm9pZCAwLG09dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLFM9dm9pZCAwLHg9dm9pZCAwLEE9dm9pZCAwLEY9dm9pZCAwO3N3aXRjaCh2KXtjYXNlIDE6Y2FzZSAzOmNhc2UgMTg6Y2FzZSAyMzpoKz11Lmxlbmd0aD4+MSxnPSEwO2JyZWFrO2Nhc2UgNDpmKz11LnBvcCgpLGkobCxmKSxnPSEwO2JyZWFrO2Nhc2UgNTpmb3IoO3UubGVuZ3RoPjA7KWwrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNjpmb3IoO3UubGVuZ3RoPjAmJihzKGwrPXUuc2hpZnQoKSxmKSwwIT09dS5sZW5ndGgpOylmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNzpmb3IoO3UubGVuZ3RoPjAmJihmKz11LnNoaWZ0KCkscyhsLGYpLDAhPT11Lmxlbmd0aCk7KXMobCs9dS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgODpmb3IoO3UubGVuZ3RoPjA7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2Nhc2UgMTA6aWYoQT11LnBvcCgpLEY9bnVsbCxyLmlzQ0ZGQ0lERm9udCl7dmFyIFA9ci5mZFNlbGVjdC5nZXRGREluZGV4KGEpO2lmKFA+PTAmJlA8ci5mZEFycmF5Lmxlbmd0aCl7dmFyIFQ9ci5mZEFycmF5W1BdLEk9dm9pZCAwO1QucHJpdmF0ZURpY3QmJlQucHJpdmF0ZURpY3Quc3VicnNJbmRleCYmKEk9VC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMpLEkmJihGPUlbQSs9ayhJKV0pfWVsc2UoMCxuLndhcm4pKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKX1lbHNlIEY9ci5zdWJyc1tBK3Iuc3VicnNCaWFzXTtGJiZlKEYpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKHY9ZFtwKytdKXtjYXNlIDM0Om09KHk9bCt1LnNoaWZ0KCkpK3Uuc2hpZnQoKSxTPWYrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LGYsbSxTLGwsUyksbT0oeT1sK3Uuc2hpZnQoKSkrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LFMsbSxmLGwsZik7YnJlYWs7Y2FzZSAzNTp5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx1LnBvcCgpO2JyZWFrO2Nhc2UgMzY6Yyh5PWwrdS5zaGlmdCgpLFM9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx4PVMrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCkseCksYyh5PWwrdS5zaGlmdCgpLHgsbT15K3Uuc2hpZnQoKSx4K3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgMzc6dmFyIEU9bCxqPWY7eT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZikseT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0sZj13LE1hdGguYWJzKGwtRSk+TWF0aC5hYnMoZi1qKT9sKz11LnNoaWZ0KCk6Zis9dS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVua25vd24gb3BlcmF0b3I6IDEyICIuY29uY2F0KHYpKX1icmVhaztjYXNlIDE0OmlmKHUubGVuZ3RoPj00KXt2YXIgTT11LnBvcCgpLF89dS5wb3AoKTtmPXUucG9wKCksbD11LnBvcCgpLHQucHVzaCh7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNsYXRlIixhcmdzOltsLGZdfSk7dmFyIEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbTV1dKSk7QyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpLHQucHVzaCh7Y21kOiJyZXN0b3JlIn0pLEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbX11dKSksQyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6cCs9KGgrPXUubGVuZ3RoPj4xKSs3Pj4zLGc9ITA7YnJlYWs7Y2FzZSAyMTpmKz11LnBvcCgpLGkobCs9dS5wb3AoKSxmKSxnPSEwO2JyZWFrO2Nhc2UgMjI6aShsKz11LnBvcCgpLGYpLGc9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO3UubGVuZ3RoPjI7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2wrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgMjU6Zm9yKDt1Lmxlbmd0aD42OylsKz11LnNoaWZ0KCksZis9dS5zaGlmdCgpLHMobCxmKTt5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKTticmVhaztjYXNlIDI2OmZvcih1Lmxlbmd0aCUyJiYobCs9dS5zaGlmdCgpKTt1Lmxlbmd0aD4wOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZik7YnJlYWs7Y2FzZSAyNzpmb3IodS5sZW5ndGglMiYmKGYrPXUuc2hpZnQoKSk7dS5sZW5ndGg+MDspYyh5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcpO2JyZWFrO2Nhc2UgMjg6dS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2KT4+MTYpLHArPTI7YnJlYWs7Y2FzZSAyOTpBPXUucG9wKCkrci5nc3VicnNCaWFzLChGPXIuZ3N1YnJzW0FdKSYmZShGKTticmVhaztjYXNlIDMwOmZvcig7dS5sZW5ndGg+MCYmKHk9bCxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dysoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxjKHksYixtLHcsbCxmKSwwIT09dS5sZW5ndGgpOyl5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbD1tKygxPT09dS5sZW5ndGg/dS5zaGlmdCgpOjApLGYpO2JyZWFrO2Nhc2UgMzE6Zm9yKDt1Lmxlbmd0aD4wJiYoeT1sK3Uuc2hpZnQoKSxiPWYsbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGw9bSsoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxmKSwwIT09dS5sZW5ndGgpOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrKDE9PT11Lmxlbmd0aD91LnNoaWZ0KCk6MCksYyh5LGIsbSx3LGwsZik7YnJlYWs7ZGVmYXVsdDppZih2PDMyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIG9wZXJhdG9yOiAiLmNvbmNhdCh2KSk7djwyNDc/dS5wdXNoKHYtMTM5KTp2PDI1MT91LnB1c2goMjU2Kih2LTI0NykrZFtwKytdKzEwOCk6djwyNTU/dS5wdXNoKDI1NiotKHYtMjUxKS1kW3ArK10tMTA4KToodS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2fGRbcCsyXTw8OHxkW3ArM10pLzY1NTM2KSxwKz00KX1nJiYodS5sZW5ndGg9MCl9fShlKX12YXIgRj1bXSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtkKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBDb21waWxlZEZvbnQuIiksdGhpcy5mb250TWF0cml4PXQsdGhpcy5jb21waWxlZEdseXBocz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZD1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBnKGUsW3trZXk6ImdldFBhdGhKcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkLGE9dGhpcy5jb21waWxlZEdseXBoc1tuXTtpZighYSl0cnl7YT10aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tuXSxuKSx0aGlzLmNvbXBpbGVkR2x5cGhzW25dPWF9Y2F0Y2goZSl7dGhyb3cgdGhpcy5jb21waWxlZEdseXBoc1tuXT1GLHZvaWQgMD09PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXSYmKHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXT1uKSxlfXJldHVybiB2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl09biksYX19LHtrZXk6ImNvbXBpbGVHbHlwaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighZXx8MD09PWUubGVuZ3RofHwxND09PWVbMF0pcmV0dXJuIEY7dmFyIHI9dGhpcy5mb250TWF0cml4O2lmKHRoaXMuaXNDRkZDSURGb250KXt2YXIgYT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgodCk7YT49MCYmYTx0aGlzLmZkQXJyYXkubGVuZ3RoP3I9dGhpcy5mZEFycmF5W2FdLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpfHxuLkZPTlRfSURFTlRJVFlfTUFUUklYOigwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfXZhciBpPVt7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNmb3JtIixhcmdzOnIuc2xpY2UoKX0se2NtZDoic2NhbGUiLGFyZ3M6WyJzaXplIiwiLXNpemUiXX1dO3JldHVybiB0aGlzLmNvbXBpbGVHbHlwaEltcGwoZSxpLHQpLGkucHVzaCh7Y21kOiJyZXN0b3JlIn0pLGl9fSx7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy4iKX19LHtrZXk6Imhhc0J1aWx0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkO3JldHVybiB2b2lkIDAhPT10aGlzLmNvbXBpbGVkR2x5cGhzW25dJiZ2b2lkIDAhPT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl19fV0pLGV9KCksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gZCh0aGlzLHIpLChpPXQuY2FsbCh0aGlzLGF8fFs0ODhlLTYsMCwwLDQ4OGUtNiwwLDBdKSkuZ2x5cGhzPWUsaS5jbWFwPW4saX1yZXR1cm4gZyhyLFt7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbihlLHQpe0EoZSx0LHRoaXMpfX1dKSxyfShQKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsbyl7dmFyIHM7cmV0dXJuIGQodGhpcyxyKSwocz10LmNhbGwodGhpcyxhfHxbLjAwMSwwLDAsLjAwMSwwLDBdKSkuZ2x5cGhzPWUuZ2x5cGhzLHMuZ3N1YnJzPWUuZ3N1YnJzfHxbXSxzLnN1YnJzPWUuc3VicnN8fFtdLHMuY21hcD1uLHMuZ2x5cGhOYW1lTWFwPW98fCgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSxzLmdzdWJyc0JpYXM9ayhzLmdzdWJycykscy5zdWJyc0JpYXM9ayhzLnN1YnJzKSxzLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udCxzLmZkU2VsZWN0PWUuZmRTZWxlY3Qscy5mZEFycmF5PWUuZmRBcnJheSxzfXJldHVybiBnKHIsW3trZXk6ImNvbXBpbGVHbHlwaEltcGwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtDKGUsdCx0aGlzLHIpfX1dKSxyfShQKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2QodGhpcyxlKX1yZXR1cm4gZyhlLG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsYSxpLG8scyxjLHU9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKSxsPXkodSw0KSxmPTAsaD0xMjtmPGw7ZisrLGgrPTE2KXt2YXIgZD0oMCxuLmJ5dGVzVG9TdHJpbmcpKHUuc3ViYXJyYXkoaCxoKzQpKSxwPXYodSxoKzgpLGc9dih1LGgrMTIpO3N3aXRjaChkKXtjYXNlImNtYXAiOnI9Uyh1LHApO2JyZWFrO2Nhc2UiZ2x5ZiI6YT11LnN1YmFycmF5KHAscCtnKTticmVhaztjYXNlImxvY2EiOmk9dS5zdWJhcnJheShwLHArZyk7YnJlYWs7Y2FzZSJoZWFkIjpjPXkodSxwKzE4KSxzPXkodSxwKzUwKTticmVhaztjYXNlIkNGRiAiOm89eCh1LHAscCtnLHQpfX1pZihhKXt2YXIgbT1jP1sxL2MsMCwwLDEvYywwLDBdOmUuZm9udE1hdHJpeDtyZXR1cm4gbmV3IFQoZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7cj8obj00LGE9dik6KG49MixhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDIqeShlLHQpfSk7Zm9yKHZhciBpPVtdLG89YSh0LDApLHM9bjtzPHQubGVuZ3RoO3MrPW4pe3ZhciBjPWEodCxzKTtpLnB1c2goZS5zdWJhcnJheShvLGMpKSxvPWN9cmV0dXJuIGl9KGEsaSxzKSxyLG0pfXJldHVybiBuZXcgSShvLHIsZS5mb250TWF0cml4LGUuZ2x5cGhOYW1lTWFwKX19XSksZX0oKTt0LkZvbnRSZW5kZXJlckZhY3Rvcnk9RX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE1ldHJpY3M9dC5nZXRGb250QmFzaWNNZXRyaWNzPXZvaWQgMDt2YXIgbj1yKDEzNSksYT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj02MDAsZVsiQ291cmllci1Cb2xkIl09NjAwLGVbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT02MDAsZVsiQ291cmllci1PYmxpcXVlIl09NjAwLGUuSGVsdmV0aWNhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5leGNsYW09Mjc4LGUucXVvdGVkYmw9MzU1LGUubnVtYmVyc2lnbj01NTYsZS5kb2xsYXI9NTU2LGUucGVyY2VudD04ODksZS5hbXBlcnNhbmQ9NjY3LGUucXVvdGVyaWdodD0yMjIsZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlzaz0zODksZS5wbHVzPTU4NCxlLmNvbW1hPTI3OCxlLmh5cGhlbj0zMzMsZS5wZXJpb2Q9Mjc4LGUuc2xhc2g9Mjc4LGUuemVybz01NTYsZS5vbmU9NTU2LGUudHdvPTU1NixlLnRocmVlPTU1NixlLmZvdXI9NTU2LGUuZml2ZT01NTYsZS5zaXg9NTU2LGUuc2V2ZW49NTU2LGUuZWlnaHQ9NTU2LGUubmluZT01NTYsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01ODQsZS5lcXVhbD01ODQsZS5ncmVhdGVyPTU4NCxlLnF1ZXN0aW9uPTU1NixlLmF0PTEwMTUsZS5BPTY2NyxlLkI9NjY3LGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTUwMCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9Mjc4LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0yNzgsZS5hc2NpaWNpcmN1bT00NjksZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yMjIsZS5hPTU1NixlLmI9NTU2LGUuYz01MDAsZS5kPTU1NixlLmU9NTU2LGUuZj0yNzgsZS5nPTU1NixlLmg9NTU2LGUuaT0yMjIsZS5qPTIyMixlLms9NTAwLGUubD0yMjIsZS5tPTgzMyxlLm49NTU2LGUubz01NTYsZS5wPTU1NixlLnE9NTU2LGUucj0zMzMsZS5zPTUwMCxlLnQ9Mjc4LGUudT01NTYsZS52PTUwMCxlLnc9NzIyLGUueD01MDAsZS55PTUwMCxlLno9NTAwLGUuYnJhY2VsZWZ0PTMzNCxlLmJhcj0yNjAsZS5icmFjZXJpZ2h0PTMzNCxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0xOTEsZS5xdW90ZWRibGxlZnQ9MzMzLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01MzcsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MjIyLGUucXVvdGVkYmxiYXNlPTMzMyxlLnF1b3RlZGJscmlnaHQ9MzMzLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTU1NixlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTIyMixlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NTU2LGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTY2NyxlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTAwLGUuc2NvbW1hYWNjZW50PTUwMCxlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTU1NixlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTUwMCxlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9MjIyLGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTUwMCxlLnNjZWRpbGxhPTUwMCxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NTU2LGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj02NjcsZS5yY2Fyb249MzMzLGUuY2NlZGlsbGE9NTAwLGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTY0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NTU2LGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTY2NyxlLkFicmV2ZT02NjcsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NTU2LGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz01MDAsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTAwLGUubmFjdXRlPTU1NixlLnVtYWNyb249NTU2LGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI2MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9MzMzLGUub21hY3Jvbj01NTYsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTIyMixlLnRjYXJvbj0zMTcsZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTY2NyxlLkFkaWVyZXNpcz02NjcsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9MjIyLGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT01NTYsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01MDAsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTU1NixlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT01NTYsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01NTYsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD01NTYsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj0yOTksZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj01NTYsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01NTYsZS5udGlsZGU9NTU2LGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NTU2LGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01NTYsZS5DY2Fyb249NzIyLGUudWdyYXZlPTU1NixlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zMzMsZS5OdGlsZGU9NzIyLGUub3RpbGRlPTU1NixlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTY2NyxlLkFvZ29uZWs9NjY3LGUuQXJpbmc9NjY3LGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTUwMCxlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj01NTYsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NTU2LGUudWRpZXJlc2lzPTU1NixlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01NTYsZS5ldGg9NTU2LGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD01NTYsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00NzQsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD03MjIsZS5xdW90ZXJpZ2h0PTI3OCxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NjExLGUuYXQ9OTc1LGUuQT03MjIsZS5CPTcyMixlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTcyMixlLkk9Mjc4LGUuSj01NTYsZS5LPTcyMixlLkw9NjExLGUuTT04MzMsZS5OPTcyMixlLk89Nzc4LGUuUD02NjcsZS5RPTc3OCxlLlI9NzIyLGUuUz02NjcsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTk0NCxlLlg9NjY3LGUuWT02NjcsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTg0LGUudW5kZXJzY29yZT01NTYsZS5xdW90ZWxlZnQ9Mjc4LGUuYT01NTYsZS5iPTYxMSxlLmM9NTU2LGUuZD02MTEsZS5lPTU1NixlLmY9MzMzLGUuZz02MTEsZS5oPTYxMSxlLmk9Mjc4LGUuaj0yNzgsZS5rPTU1NixlLmw9Mjc4LGUubT04ODksZS5uPTYxMSxlLm89NjExLGUucD02MTEsZS5xPTYxMSxlLnI9Mzg5LGUucz01NTYsZS50PTMzMyxlLnU9NjExLGUudj01NTYsZS53PTc3OCxlLng9NTU2LGUueT01NTYsZS56PTUwMCxlLmJyYWNlbGVmdD0zODksZS5iYXI9MjgwLGUuYnJhY2VyaWdodD0zODksZS5hc2NpaXRpbGRlPTU4NCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01NTYsZS5zdGVybGluZz01NTYsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTU2LGUuZmxvcmluPTU1NixlLnNlY3Rpb249NTU2LGUuY3VycmVuY3k9NTU2LGUucXVvdGVzaW5nbGU9MjM4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTU2LGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT02MTEsZS5mbD02MTEsZS5lbmRhc2g9NTU2LGUuZGFnZ2VyPTU1NixlLmRhZ2dlcmRibD01NTYsZS5wZXJpb2RjZW50ZXJlZD0yNzgsZS5wYXJhZ3JhcGg9NTU2LGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTI3OCxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTU1NixlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj02MTEsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTM3MCxlLkxzbGFzaD02MTEsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTM2NSxlLmFlPTg4OSxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NjExLGUub2U9OTQ0LGUuZ2VybWFuZGJscz02MTEsZS5JZGllcmVzaXM9Mjc4LGUuZWFjdXRlPTU1NixlLmFicmV2ZT01NTYsZS51aHVuZ2FydW1sYXV0PTYxMSxlLmVjYXJvbj01NTYsZS5ZZGllcmVzaXM9NjY3LGUuZGl2aWRlPTU4NCxlLllhY3V0ZT02NjcsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTU2LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTU1NixlLnNjb21tYWFjY2VudD01NTYsZS5lY2lyY3VtZmxleD01NTYsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01NTYsZS5VYWN1dGU9NzIyLGUudW9nb25laz02MTEsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03MzcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj01NTYsZS5hcmluZz01NTYsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01NTYsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01NTYsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj01NTYsZS5zY2VkaWxsYT01NTYsZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTYxMSxlLmFjaXJjdW1mbGV4PTU1NixlLkFtYWNyb249NzIyLGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTU1NixlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjY3LGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTY2NyxlLmRjYXJvbj03NDMsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTYxMSxlLnRocmVlc3VwZXJpb3I9MzMzLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTg0LGUudWFjdXRlPTYxMSxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTU2LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01NTYsZS5lZGllcmVzaXM9NTU2LGUuY2FjdXRlPTU1NixlLm5hY3V0ZT02MTEsZS51bWFjcm9uPTYxMSxlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mjc4LGUucGx1c21pbnVzPTU4NCxlLmJyb2tlbmJhcj0yODAsZS5yZWdpc3RlcmVkPTczNyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTI3OCxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NjExLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249Mzg5LGUuZW9nb25laz01NTYsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTU1NixlLnphY3V0ZT01MDAsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NjExLGUuYW1hY3Jvbj01NTYsZS5zYWN1dGU9NTU2LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj02MTEsZS50d29zdXBlcmlvcj0zMzMsZS5PZGllcmVzaXM9Nzc4LGUubXU9NjExLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NjExLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NjExLGUudGhyZWVxdWFydGVycz04MzQsZS5TY2VkaWxsYT02NjcsZS5sY2Fyb249NDAwLGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD01NTYsZS5JZ3JhdmU9Mjc4LGUuSW1hY3Jvbj0yNzgsZS5MY2Fyb249NjExLGUub25laGFsZj04MzQsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NjExLGUubnRpbGRlPTYxMSxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NTU2LGUuZ2JyZXZlPTYxMSxlLm9uZXF1YXJ0ZXI9ODM0LGUuU2Nhcm9uPTY2NyxlLlNjb21tYWFjY2VudD02NjcsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NjExLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT02MTEsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT02MTEsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTUwMCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTI3OCxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01ODQsZS5JY2lyY3VtZmxleD0yNzgsZS5uY2Fyb249NjExLGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTg0LGUub2RpZXJlc2lzPTYxMSxlLnVkaWVyZXNpcz02MTEsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NjExLGUuZXRoPTYxMSxlLnpjYXJvbj01MDAsZS5uY29tbWFhY2NlbnQ9NjExLGUub25lc3VwZXJpb3I9MzMzLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTU1Nn0pKSxlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4LGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQ3NCxlLm51bWJlcnNpZ249NTU2LGUuZG9sbGFyPTU1NixlLnBlcmNlbnQ9ODg5LGUuYW1wZXJzYW5kPTcyMixlLnF1b3RlcmlnaHQ9Mjc4LGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9Mzg5LGUucGx1cz01ODQsZS5jb21tYT0yNzgsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI3OCxlLnNsYXNoPTI3OCxlLnplcm89NTU2LGUub25lPTU1NixlLnR3bz01NTYsZS50aHJlZT01NTYsZS5mb3VyPTU1NixlLmZpdmU9NTU2LGUuc2l4PTU1NixlLnNldmVuPTU1NixlLmVpZ2h0PTU1NixlLm5pbmU9NTU2LGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTg0LGUuZXF1YWw9NTg0LGUuZ3JlYXRlcj01ODQsZS5xdWVzdGlvbj02MTEsZS5hdD05NzUsZS5BPTcyMixlLkI9NzIyLGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTU1NixlLks9NzIyLGUuTD02MTEsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01ODQsZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yNzgsZS5hPTU1NixlLmI9NjExLGUuYz01NTYsZS5kPTYxMSxlLmU9NTU2LGUuZj0zMzMsZS5nPTYxMSxlLmg9NjExLGUuaT0yNzgsZS5qPTI3OCxlLms9NTU2LGUubD0yNzgsZS5tPTg4OSxlLm49NjExLGUubz02MTEsZS5wPTYxMSxlLnE9NjExLGUucj0zODksZS5zPTU1NixlLnQ9MzMzLGUudT02MTEsZS52PTU1NixlLnc9Nzc4LGUueD01NTYsZS55PTU1NixlLno9NTAwLGUuYnJhY2VsZWZ0PTM4OSxlLmJhcj0yODAsZS5icmFjZXJpZ2h0PTM4OSxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0yMzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTYxMSxlLmZsPTYxMSxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01NTYsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9Mjc4LGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NjExLGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTU2LGUuc2NvbW1hYWNjZW50PTU1NixlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTYxMSxlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTU1NixlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTU1NixlLnNjZWRpbGxhPTU1NixlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NjExLGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NTU2LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTc0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NjExLGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NjExLGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz01NTYsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTU2LGUubmFjdXRlPTYxMSxlLnVtYWNyb249NjExLGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI4MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj02MTEsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zODksZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT02MTEsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01NTYsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTYxMSxlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT02MTEsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD02MTEsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD02MTEsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj00MDAsZS5LY29tbWFhY2NlbnQ9NzIyLGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD02MTEsZS5udGlsZGU9NjExLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NjExLGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT02MTEsZS5DY2Fyb249NzIyLGUudWdyYXZlPTYxMSxlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NzIyLGUub3RpbGRlPTYxMSxlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTU1NixlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj02MTEsZS50Y29tbWFhY2NlbnQ9MzMzLGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NjExLGUudWRpZXJlc2lzPTYxMSxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD02MTEsZS5ldGg9NjExLGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD02MTEsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1PYmxpcXVlIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0yNzgsZS5xdW90ZWRibD0zNTUsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD02NjcsZS5xdW90ZXJpZ2h0PTIyMixlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NTU2LGUuYXQ9MTAxNSxlLkE9NjY3LGUuQj02NjcsZS5DPTcyMixlLkQ9NzIyLGUuRT02NjcsZS5GPTYxMSxlLkc9Nzc4LGUuSD03MjIsZS5JPTI3OCxlLko9NTAwLGUuSz02NjcsZS5MPTU1NixlLk09ODMzLGUuTj03MjIsZS5PPTc3OCxlLlA9NjY3LGUuUT03NzgsZS5SPTcyMixlLlM9NjY3LGUuVD02MTEsZS5VPTcyMixlLlY9NjY3LGUuVz05NDQsZS5YPTY2NyxlLlk9NjY3LGUuWj02MTEsZS5icmFja2V0bGVmdD0yNzgsZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTI3OCxlLmFzY2lpY2lyY3VtPTQ2OSxlLnVuZGVyc2NvcmU9NTU2LGUucXVvdGVsZWZ0PTIyMixlLmE9NTU2LGUuYj01NTYsZS5jPTUwMCxlLmQ9NTU2LGUuZT01NTYsZS5mPTI3OCxlLmc9NTU2LGUuaD01NTYsZS5pPTIyMixlLmo9MjIyLGUuaz01MDAsZS5sPTIyMixlLm09ODMzLGUubj01NTYsZS5vPTU1NixlLnA9NTU2LGUucT01NTYsZS5yPTMzMyxlLnM9NTAwLGUudD0yNzgsZS51PTU1NixlLnY9NTAwLGUudz03MjIsZS54PTUwMCxlLnk9NTAwLGUuej01MDAsZS5icmFjZWxlZnQ9MzM0LGUuYmFyPTI2MCxlLmJyYWNlcmlnaHQ9MzM0LGUuYXNjaWl0aWxkZT01ODQsZS5leGNsYW1kb3duPTMzMyxlLmNlbnQ9NTU2LGUuc3Rlcmxpbmc9NTU2LGUuZnJhY3Rpb249MTY3LGUueWVuPTU1NixlLmZsb3Jpbj01NTYsZS5zZWN0aW9uPTU1NixlLmN1cnJlbmN5PTU1NixlLnF1b3Rlc2luZ2xlPTE5MSxlLnF1b3RlZGJsbGVmdD0zMzMsZS5ndWlsbGVtb3RsZWZ0PTU1NixlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NTAwLGUuZmw9NTAwLGUuZW5kYXNoPTU1NixlLmRhZ2dlcj01NTYsZS5kYWdnZXJkYmw9NTU2LGUucGVyaW9kY2VudGVyZWQ9Mjc4LGUucGFyYWdyYXBoPTUzNyxlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0yMjIsZS5xdW90ZWRibGJhc2U9MzMzLGUucXVvdGVkYmxyaWdodD0zMzMsZS5ndWlsbGVtb3RyaWdodD01NTYsZS5lbGxpcHNpcz0xZTMsZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NjExLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD0xZTMsZS5BRT0xZTMsZS5vcmRmZW1pbmluZT0zNzAsZS5Mc2xhc2g9NTU2LGUuT3NsYXNoPTc3OCxlLk9FPTFlMyxlLm9yZG1hc2N1bGluZT0zNjUsZS5hZT04ODksZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9MjIyLGUub3NsYXNoPTYxMSxlLm9lPTk0NCxlLmdlcm1hbmRibHM9NjExLGUuSWRpZXJlc2lzPTI3OCxlLmVhY3V0ZT01NTYsZS5hYnJldmU9NTU2LGUudWh1bmdhcnVtbGF1dD01NTYsZS5lY2Fyb249NTU2LGUuWWRpZXJlc2lzPTY2NyxlLmRpdmlkZT01ODQsZS5ZYWN1dGU9NjY3LGUuQWNpcmN1bWZsZXg9NjY3LGUuYWFjdXRlPTU1NixlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT01MDAsZS5zY29tbWFhY2NlbnQ9NTAwLGUuZWNpcmN1bWZsZXg9NTU2LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTU2LGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NTU2LGUuRWRpZXJlc2lzPTY2NyxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzM3LGUuRW1hY3Jvbj02NjcsZS5jY2Fyb249NTAwLGUuYXJpbmc9NTU2LGUuTmNvbW1hYWNjZW50PTcyMixlLmxhY3V0ZT0yMjIsZS5hZ3JhdmU9NTU2LGUuVGNvbW1hYWNjZW50PTYxMSxlLkNhY3V0ZT03MjIsZS5hdGlsZGU9NTU2LGUuRWRvdGFjY2VudD02NjcsZS5zY2Fyb249NTAwLGUuc2NlZGlsbGE9NTAwLGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDcxLGUuUmNhcm9uPTcyMixlLkdjb21tYWFjY2VudD03NzgsZS51Y2lyY3VtZmxleD01NTYsZS5hY2lyY3VtZmxleD01NTYsZS5BbWFjcm9uPTY2NyxlLnJjYXJvbj0zMzMsZS5jY2VkaWxsYT01MDAsZS5aZG90YWNjZW50PTYxMSxlLlRob3JuPTY2NyxlLk9tYWNyb249Nzc4LGUuUmFjdXRlPTcyMixlLlNhY3V0ZT02NjcsZS5kY2Fyb249NjQzLGUuVW1hY3Jvbj03MjIsZS51cmluZz01NTYsZS50aHJlZXN1cGVyaW9yPTMzMyxlLk9ncmF2ZT03NzgsZS5BZ3JhdmU9NjY3LGUuQWJyZXZlPTY2NyxlLm11bHRpcGx5PTU4NCxlLnVhY3V0ZT01NTYsZS5UY2Fyb249NjExLGUucGFydGlhbGRpZmY9NDc2LGUueWRpZXJlc2lzPTUwMCxlLk5hY3V0ZT03MjIsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02NjcsZS5hZGllcmVzaXM9NTU2LGUuZWRpZXJlc2lzPTU1NixlLmNhY3V0ZT01MDAsZS5uYWN1dGU9NTU2LGUudW1hY3Jvbj01NTYsZS5OY2Fyb249NzIyLGUuSWFjdXRlPTI3OCxlLnBsdXNtaW51cz01ODQsZS5icm9rZW5iYXI9MjYwLGUucmVnaXN0ZXJlZD03MzcsZS5HYnJldmU9Nzc4LGUuSWRvdGFjY2VudD0yNzgsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTY2NyxlLnJhY3V0ZT0zMzMsZS5vbWFjcm9uPTU1NixlLlphY3V0ZT02MTEsZS5aY2Fyb249NjExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT03MjIsZS5sY29tbWFhY2NlbnQ9MjIyLGUudGNhcm9uPTMxNyxlLmVvZ29uZWs9NTU2LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NjY3LGUuQWRpZXJlc2lzPTY2NyxlLmVncmF2ZT01NTYsZS56YWN1dGU9NTAwLGUuaW9nb25laz0yMjIsZS5PYWN1dGU9Nzc4LGUub2FjdXRlPTU1NixlLmFtYWNyb249NTU2LGUuc2FjdXRlPTUwMCxlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03NzgsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NTU2LGUudHdvc3VwZXJpb3I9MzMzLGUuT2RpZXJlc2lzPTc3OCxlLm11PTU1NixlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTU1NixlLkVvZ29uZWs9NjY3LGUuZGNyb2F0PTU1NixlLnRocmVlcXVhcnRlcnM9ODM0LGUuU2NlZGlsbGE9NjY3LGUubGNhcm9uPTI5OSxlLktjb21tYWFjY2VudD02NjcsZS5MYWN1dGU9NTU2LGUudHJhZGVtYXJrPTFlMyxlLmVkb3RhY2NlbnQ9NTU2LGUuSWdyYXZlPTI3OCxlLkltYWNyb249Mjc4LGUuTGNhcm9uPTU1NixlLm9uZWhhbGY9ODM0LGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTU1NixlLm50aWxkZT01NTYsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02NjcsZS5lbWFjcm9uPTU1NixlLmdicmV2ZT01NTYsZS5vbmVxdWFydGVyPTgzNCxlLlNjYXJvbj02NjcsZS5TY29tbWFhY2NlbnQ9NjY3LGUuT2h1bmdhcnVtbGF1dD03NzgsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTU1NixlLkNjYXJvbj03MjIsZS51Z3JhdmU9NTU2LGUucmFkaWNhbD00NTMsZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTMzMyxlLk50aWxkZT03MjIsZS5vdGlsZGU9NTU2LGUuUmNvbW1hYWNjZW50PTcyMixlLkxjb21tYWFjY2VudD01NTYsZS5BdGlsZGU9NjY3LGUuQW9nb25laz02NjcsZS5BcmluZz02NjcsZS5PdGlsZGU9Nzc4LGUuemRvdGFjY2VudD01MDAsZS5FY2Fyb249NjY3LGUuSW9nb25laz0yNzgsZS5rY29tbWFhY2NlbnQ9NTAwLGUubWludXM9NTg0LGUuSWNpcmN1bWZsZXg9Mjc4LGUubmNhcm9uPTU1NixlLnRjb21tYWFjY2VudD0yNzgsZS5sb2dpY2Fsbm90PTU4NCxlLm9kaWVyZXNpcz01NTYsZS51ZGllcmVzaXM9NTU2LGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTU1NixlLmV0aD01NTYsZS56Y2Fyb249NTAwLGUubmNvbW1hYWNjZW50PTU1NixlLm9uZXN1cGVyaW9yPTMzMyxlLmltYWNyb249Mjc4LGUuRXVybz01NTZ9KSksZS5TeW1ib2w9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS51bml2ZXJzYWw9NzEzLGUubnVtYmVyc2lnbj01MDAsZS5leGlzdGVudGlhbD01NDksZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5zdWNodGhhdD00MzksZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlza21hdGg9NTAwLGUucGx1cz01NDksZS5jb21tYT0yNTAsZS5taW51cz01NDksZS5wZXJpb2Q9MjUwLGUuc2xhc2g9Mjc4LGUuemVybz01MDAsZS5vbmU9NTAwLGUudHdvPTUwMCxlLnRocmVlPTUwMCxlLmZvdXI9NTAwLGUuZml2ZT01MDAsZS5zaXg9NTAwLGUuc2V2ZW49NTAwLGUuZWlnaHQ9NTAwLGUubmluZT01MDAsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01NDksZS5lcXVhbD01NDksZS5ncmVhdGVyPTU0OSxlLnF1ZXN0aW9uPTQ0NCxlLmNvbmdydWVudD01NDksZS5BbHBoYT03MjIsZS5CZXRhPTY2NyxlLkNoaT03MjIsZS5EZWx0YT02MTIsZS5FcHNpbG9uPTYxMSxlLlBoaT03NjMsZS5HYW1tYT02MDMsZS5FdGE9NzIyLGUuSW90YT0zMzMsZS50aGV0YTE9NjMxLGUuS2FwcGE9NzIyLGUuTGFtYmRhPTY4NixlLk11PTg4OSxlLk51PTcyMixlLk9taWNyb249NzIyLGUuUGk9NzY4LGUuVGhldGE9NzQxLGUuUmhvPTU1NixlLlNpZ21hPTU5MixlLlRhdT02MTEsZS5VcHNpbG9uPTY5MCxlLnNpZ21hMT00MzksZS5PbWVnYT03NjgsZS5YaT02NDUsZS5Qc2k9Nzk1LGUuWmV0YT02MTEsZS5icmFja2V0bGVmdD0zMzMsZS50aGVyZWZvcmU9ODYzLGUuYnJhY2tldHJpZ2h0PTMzMyxlLnBlcnBlbmRpY3VsYXI9NjU4LGUudW5kZXJzY29yZT01MDAsZS5yYWRpY2FsZXg9NTAwLGUuYWxwaGE9NjMxLGUuYmV0YT01NDksZS5jaGk9NTQ5LGUuZGVsdGE9NDk0LGUuZXBzaWxvbj00MzksZS5waGk9NTIxLGUuZ2FtbWE9NDExLGUuZXRhPTYwMyxlLmlvdGE9MzI5LGUucGhpMT02MDMsZS5rYXBwYT01NDksZS5sYW1iZGE9NTQ5LGUubXU9NTc2LGUubnU9NTIxLGUub21pY3Jvbj01NDksZS5waT01NDksZS50aGV0YT01MjEsZS5yaG89NTQ5LGUuc2lnbWE9NjAzLGUudGF1PTQzOSxlLnVwc2lsb249NTc2LGUub21lZ2ExPTcxMyxlLm9tZWdhPTY4NixlLnhpPTQ5MyxlLnBzaT02ODYsZS56ZXRhPTQ5NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5zaW1pbGFyPTU0OSxlLkV1cm89NzUwLGUuVXBzaWxvbjE9NjIwLGUubWludXRlPTI0NyxlLmxlc3NlcXVhbD01NDksZS5mcmFjdGlvbj0xNjcsZS5pbmZpbml0eT03MTMsZS5mbG9yaW49NTAwLGUuY2x1Yj03NTMsZS5kaWFtb25kPTc1MyxlLmhlYXJ0PTc1MyxlLnNwYWRlPTc1MyxlLmFycm93Ym90aD0xMDQyLGUuYXJyb3dsZWZ0PTk4NyxlLmFycm93dXA9NjAzLGUuYXJyb3dyaWdodD05ODcsZS5hcnJvd2Rvd249NjAzLGUuZGVncmVlPTQwMCxlLnBsdXNtaW51cz01NDksZS5zZWNvbmQ9NDExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLm11bHRpcGx5PTU0OSxlLnByb3BvcnRpb25hbD03MTMsZS5wYXJ0aWFsZGlmZj00OTQsZS5idWxsZXQ9NDYwLGUuZGl2aWRlPTU0OSxlLm5vdGVxdWFsPTU0OSxlLmVxdWl2YWxlbmNlPTU0OSxlLmFwcHJveGVxdWFsPTU0OSxlLmVsbGlwc2lzPTFlMyxlLmFycm93dmVydGV4PTYwMyxlLmFycm93aG9yaXpleD0xZTMsZS5jYXJyaWFnZXJldHVybj02NTgsZS5hbGVwaD04MjMsZS5JZnJha3R1cj02ODYsZS5SZnJha3R1cj03OTUsZS53ZWllcnN0cmFzcz05ODcsZS5jaXJjbGVtdWx0aXBseT03NjgsZS5jaXJjbGVwbHVzPTc2OCxlLmVtcHR5c2V0PTgyMyxlLmludGVyc2VjdGlvbj03NjgsZS51bmlvbj03NjgsZS5wcm9wZXJzdXBlcnNldD03MTMsZS5yZWZsZXhzdXBlcnNldD03MTMsZS5ub3RzdWJzZXQ9NzEzLGUucHJvcGVyc3Vic2V0PTcxMyxlLnJlZmxleHN1YnNldD03MTMsZS5lbGVtZW50PTcxMyxlLm5vdGVsZW1lbnQ9NzEzLGUuYW5nbGU9NzY4LGUuZ3JhZGllbnQ9NzEzLGUucmVnaXN0ZXJzZXJpZj03OTAsZS5jb3B5cmlnaHRzZXJpZj03OTAsZS50cmFkZW1hcmtzZXJpZj04OTAsZS5wcm9kdWN0PTgyMyxlLnJhZGljYWw9NTQ5LGUuZG90bWF0aD0yNTAsZS5sb2dpY2Fsbm90PTcxMyxlLmxvZ2ljYWxhbmQ9NjAzLGUubG9naWNhbG9yPTYwMyxlLmFycm93ZGJsYm90aD0xMDQyLGUuYXJyb3dkYmxsZWZ0PTk4NyxlLmFycm93ZGJsdXA9NjAzLGUuYXJyb3dkYmxyaWdodD05ODcsZS5hcnJvd2RibGRvd249NjAzLGUubG96ZW5nZT00OTQsZS5hbmdsZWxlZnQ9MzI5LGUucmVnaXN0ZXJzYW5zPTc5MCxlLmNvcHlyaWdodHNhbnM9NzkwLGUudHJhZGVtYXJrc2Fucz03ODYsZS5zdW1tYXRpb249NzEzLGUucGFyZW5sZWZ0dHA9Mzg0LGUucGFyZW5sZWZ0ZXg9Mzg0LGUucGFyZW5sZWZ0YnQ9Mzg0LGUuYnJhY2tldGxlZnR0cD0zODQsZS5icmFja2V0bGVmdGV4PTM4NCxlLmJyYWNrZXRsZWZ0YnQ9Mzg0LGUuYnJhY2VsZWZ0dHA9NDk0LGUuYnJhY2VsZWZ0bWlkPTQ5NCxlLmJyYWNlbGVmdGJ0PTQ5NCxlLmJyYWNlZXg9NDk0LGUuYW5nbGVyaWdodD0zMjksZS5pbnRlZ3JhbD0yNzQsZS5pbnRlZ3JhbHRwPTY4NixlLmludGVncmFsZXg9Njg2LGUuaW50ZWdyYWxidD02ODYsZS5wYXJlbnJpZ2h0dHA9Mzg0LGUucGFyZW5yaWdodGV4PTM4NCxlLnBhcmVucmlnaHRidD0zODQsZS5icmFja2V0cmlnaHR0cD0zODQsZS5icmFja2V0cmlnaHRleD0zODQsZS5icmFja2V0cmlnaHRidD0zODQsZS5icmFjZXJpZ2h0dHA9NDk0LGUuYnJhY2VyaWdodG1pZD00OTQsZS5icmFjZXJpZ2h0YnQ9NDk0LGUuYXBwbGU9NzkwfSkpLGVbIlRpbWVzLVJvbWFuIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00MDgsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTY0LGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU2NCxlLmVxdWFsPTU2NCxlLmdyZWF0ZXI9NTY0LGUucXVlc3Rpb249NDQ0LGUuYXQ9OTIxLGUuQT03MjIsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTYxMSxlLkY9NTU2LGUuRz03MjIsZS5IPTcyMixlLkk9MzMzLGUuSj0zODksZS5LPTcyMixlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD01NTYsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj03MjIsZS5XPTk0NCxlLlg9NzIyLGUuWT03MjIsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NDY5LGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT00NDQsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTUwMCxlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTUwMCxlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9MzMzLGUucz0zODksZS50PTI3OCxlLnU9NTAwLGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5hc2NpaXRpbGRlPTU0MSxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9MTgwLGUucXVvdGVkYmxsZWZ0PTQ0NCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NDUzLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT00NDQsZS5xdW90ZWRibHJpZ2h0PTQ0NCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj00NDQsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTg4OSxlLm9yZGZlbWluaW5lPTI3NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9ODg5LGUub3JkbWFzY3VsaW5lPTMxMCxlLmFlPTY2NyxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9MzMzLGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT00NDQsZS51aHVuZ2FydW1sYXV0PTUwMCxlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU2NCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NDQ0LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz00NDQsZS5VYWN1dGU9NzIyLGUudW9nb25laz01MDAsZS5FZGllcmVzaXM9NjExLGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NjAsZS5FbWFjcm9uPTYxMSxlLmNjYXJvbj00NDQsZS5hcmluZz00NDQsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT00NDQsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT00NDQsZS5FZG90YWNjZW50PTYxMSxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00NzEsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTUwMCxlLmFjaXJjdW1mbGV4PTQ0NCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTMzMyxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NTU2LGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj01ODgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTUwMCxlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTY0LGUudWFjdXRlPTUwMCxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00NzYsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTYxMSxlLmFkaWVyZXNpcz00NDQsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01MDAsZS51bWFjcm9uPTUwMCxlLk5jYXJvbj03MjIsZS5JYWN1dGU9MzMzLGUucGx1c21pbnVzPTU2NCxlLmJyb2tlbmJhcj0yMDAsZS5yZWdpc3RlcmVkPTc2MCxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTMzMyxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjExLGUucmFjdXRlPTMzMyxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzI2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj00NDQsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTAwLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02MTEsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzQ0LGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9OTgwLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9MzMzLGUuSW1hY3Jvbj0zMzMsZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTUwMCxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTYxMSxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01MDAsZS5yYWRpY2FsPTQ1MyxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9MzMzLGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02MTEsZS5Jb2dvbmVrPTMzMyxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz01NjQsZS5JY2lyY3VtZmxleD0zMzMsZS5uY2Fyb249NTAwLGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NTY0LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01MDAsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTAwLGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTFlMyxlLmFtcGVyc2FuZD04MzMsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9OTMwLGUuQT03MjIsZS5CPTY2NyxlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTc3OCxlLkw9NjY3LGUuTT05NDQsZS5OPTcyMixlLk89Nzc4LGUuUD02MTEsZS5RPTc3OCxlLlI9NzIyLGUuUz01NTYsZS5UPTY2NyxlLlU9NzIyLGUuVj03MjIsZS5XPTFlMyxlLlg9NzIyLGUuWT03MjIsZS5aPTY2NyxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTgxLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTU1NixlLmM9NDQ0LGUuZD01NTYsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0zMzMsZS5rPTU1NixlLmw9Mjc4LGUubT04MzMsZS5uPTU1NixlLm89NTAwLGUucD01NTYsZS5xPTU1NixlLnI9NDQ0LGUucz0zODksZS50PTMzMyxlLnU9NTU2LGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD0zOTQsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zOTQsZS5hc2NpaXRpbGRlPTUyMCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTQwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTMwMCxlLkxzbGFzaD02NjcsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTMzMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01NTYsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjY3LGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTQ0NCxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjY3LGUuVGhvcm49NjExLGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTU1NixlLmRjYXJvbj02NzIsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02NjcsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTQ0NCxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTY2NyxlLlpjYXJvbj02NjcsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249NDE2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01NTYsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9Nzc4LGUubXU9NTU2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTU2LGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249Mzk0LGUuS2NvbW1hYWNjZW50PTc3OCxlLkxhY3V0ZT02NjcsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjY3LGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9NDQ0LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTY2NyxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01NzAsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTcwLGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkSXRhbGljIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zODksZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9ODMyLGUuQT02NjcsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTY2NyxlLkY9NjY3LGUuRz03MjIsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTY2NyxlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD02MTEsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTg4OSxlLlg9NjY3LGUuWT02MTEsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTcwLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTU1NixlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9Mzg5LGUucz0zODksZS50PTI3OCxlLnU9NTU2LGUudj00NDQsZS53PTY2NyxlLng9NTAwLGUueT00NDQsZS56PTM4OSxlLmJyYWNlbGVmdD0zNDgsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zNDgsZS5hc2NpaXRpbGRlPTU3MCxlLmV4Y2xhbWRvd249Mzg5LGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTAwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTk0NCxlLm9yZGZlbWluaW5lPTI2NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9OTQ0LGUub3JkbWFzY3VsaW5lPTMwMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NjExLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT02MTEsZS5BY2lyY3VtZmxleD02NjcsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTQ0NCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NjY3LGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjExLGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj02MDgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT02NjcsZS5BYnJldmU9NjY3LGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NDQ0LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzY2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT02NjcsZS5BZGllcmVzaXM9NjY3LGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT0zODksZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTc2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzgyLGUuS2NvbW1hYWNjZW50PTY2NyxlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT02NjcsZS5Bb2dvbmVrPTY2NyxlLkFyaW5nPTY2NyxlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTM4OSxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz02MDYsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NjA2LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj0zODksZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1JdGFsaWMiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQyMCxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz02NzUsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9Njc1LGUuZXF1YWw9Njc1LGUuZ3JlYXRlcj02NzUsZS5xdWVzdGlvbj01MDAsZS5hdD05MjAsZS5BPTYxMSxlLkI9NjExLGUuQz02NjcsZS5EPTcyMixlLkU9NjExLGUuRj02MTEsZS5HPTcyMixlLkg9NzIyLGUuST0zMzMsZS5KPTQ0NCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NjY3LGUuTz03MjIsZS5QPTYxMSxlLlE9NzIyLGUuUj02MTEsZS5TPTUwMCxlLlQ9NTU2LGUuVT03MjIsZS5WPTYxMSxlLlc9ODMzLGUuWD02MTEsZS5ZPTU1NixlLlo9NTU2LGUuYnJhY2tldGxlZnQ9Mzg5LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zODksZS5hc2NpaWNpcmN1bT00MjIsZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTUwMCxlLmI9NTAwLGUuYz00NDQsZS5kPTUwMCxlLmU9NDQ0LGUuZj0yNzgsZS5nPTUwMCxlLmg9NTAwLGUuaT0yNzgsZS5qPTI3OCxlLms9NDQ0LGUubD0yNzgsZS5tPTcyMixlLm49NTAwLGUubz01MDAsZS5wPTUwMCxlLnE9NTAwLGUucj0zODksZS5zPTM4OSxlLnQ9Mjc4LGUudT01MDAsZS52PTQ0NCxlLnc9NjY3LGUueD00NDQsZS55PTQ0NCxlLno9Mzg5LGUuYnJhY2VsZWZ0PTQwMCxlLmJhcj0yNzUsZS5icmFjZXJpZ2h0PTQwMCxlLmFzY2lpdGlsZGU9NTQxLGUuZXhjbGFtZG93bj0zODksZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0yMTQsZS5xdW90ZWRibGxlZnQ9NTU2LGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD01MjMsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTU1NixlLnF1b3RlZGJscmlnaHQ9NTU2LGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9ODg5LGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTUwMCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9ODg5LGUuQUU9ODg5LGUub3JkZmVtaW5pbmU9Mjc2LGUuTHNsYXNoPTU1NixlLk9zbGFzaD03MjIsZS5PRT05NDQsZS5vcmRtYXNjdWxpbmU9MzEwLGUuYWU9NjY3LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT02NjcsZS5nZXJtYW5kYmxzPTUwMCxlLklkaWVyZXNpcz0zMzMsZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTUwMCxlLnVodW5nYXJ1bWxhdXQ9NTAwLGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz01NTYsZS5kaXZpZGU9Njc1LGUuWWFjdXRlPTU1NixlLkFjaXJjdW1mbGV4PTYxMSxlLmFhY3V0ZT01MDAsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NDQ0LGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTUwMCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTUwMCxlLkVkaWVyZXNpcz02MTEsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc2MCxlLkVtYWNyb249NjExLGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTUwMCxlLk5jb21tYWFjY2VudD02NjcsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTUwMCxlLlRjb21tYWFjY2VudD01NTYsZS5DYWN1dGU9NjY3LGUuYXRpbGRlPTUwMCxlLkVkb3RhY2NlbnQ9NjExLGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj02MTEsZS5HY29tbWFhY2NlbnQ9NzIyLGUudWNpcmN1bWZsZXg9NTAwLGUuYWNpcmN1bWZsZXg9NTAwLGUuQW1hY3Jvbj02MTEsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD01NTYsZS5UaG9ybj02MTEsZS5PbWFjcm9uPTcyMixlLlJhY3V0ZT02MTEsZS5TYWN1dGU9NTAwLGUuZGNhcm9uPTU0NCxlLlVtYWNyb249NzIyLGUudXJpbmc9NTAwLGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9NzIyLGUuQWdyYXZlPTYxMSxlLkFicmV2ZT02MTEsZS5tdWx0aXBseT02NzUsZS51YWN1dGU9NTAwLGUuVGNhcm9uPTU1NixlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz00NDQsZS5OYWN1dGU9NjY3LGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjExLGUuYWRpZXJlc2lzPTUwMCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTUwMCxlLnVtYWNyb249NTAwLGUuTmNhcm9uPTY2NyxlLklhY3V0ZT0zMzMsZS5wbHVzbWludXM9Njc1LGUuYnJva2VuYmFyPTI3NSxlLnJlZ2lzdGVyZWQ9NzYwLGUuR2JyZXZlPTcyMixlLklkb3RhY2NlbnQ9MzMzLGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02MTEsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NTU2LGUuWmNhcm9uPTU1NixlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NjY3LGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zMDAsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTYxMSxlLkFkaWVyZXNpcz02MTEsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTM4OSxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTcyMixlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTUwMCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9NzIyLGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTUwMCxlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03MjIsZS5tdT01MDAsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTYxMSxlLmRjcm9hdD01MDAsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTUwMCxlLmxjYXJvbj0zMDAsZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz05ODAsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zMzMsZS5JbWFjcm9uPTMzMyxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTAwLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjExLGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTAwLGUuU2NvbW1hYWNjZW50PTUwMCxlLk9odW5nYXJ1bWxhdXQ9NzIyLGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NjY3LGUudWdyYXZlPTUwMCxlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NjY3LGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD02MTEsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTYxMSxlLkFvZ29uZWs9NjExLGUuQXJpbmc9NjExLGUuT3RpbGRlPTcyMixlLnpkb3RhY2NlbnQ9Mzg5LGUuRWNhcm9uPTYxMSxlLklvZ29uZWs9MzMzLGUua2NvbW1hYWNjZW50PTQ0NCxlLm1pbnVzPTY3NSxlLkljaXJjdW1mbGV4PTMzMyxlLm5jYXJvbj01MDAsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD02NzUsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTUwMCxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTM4OSxlLm5jb21tYWFjY2VudD01MDAsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGUuWmFwZkRpbmdiYXRzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5hMT05NzQsZS5hMj05NjEsZS5hMjAyPTk3NCxlLmEzPTk4MCxlLmE0PTcxOSxlLmE1PTc4OSxlLmExMTk9NzkwLGUuYTExOD03OTEsZS5hMTE3PTY5MCxlLmExMT05NjAsZS5hMTI9OTM5LGUuYTEzPTU0OSxlLmExND04NTUsZS5hMTU9OTExLGUuYTE2PTkzMyxlLmExMDU9OTExLGUuYTE3PTk0NSxlLmExOD05NzQsZS5hMTk9NzU1LGUuYTIwPTg0NixlLmEyMT03NjIsZS5hMjI9NzYxLGUuYTIzPTU3MSxlLmEyND02NzcsZS5hMjU9NzYzLGUuYTI2PTc2MCxlLmEyNz03NTksZS5hMjg9NzU0LGUuYTY9NDk0LGUuYTc9NTUyLGUuYTg9NTM3LGUuYTk9NTc3LGUuYTEwPTY5MixlLmEyOT03ODYsZS5hMzA9Nzg4LGUuYTMxPTc4OCxlLmEzMj03OTAsZS5hMzM9NzkzLGUuYTM0PTc5NCxlLmEzNT04MTYsZS5hMzY9ODIzLGUuYTM3PTc4OSxlLmEzOD04NDEsZS5hMzk9ODIzLGUuYTQwPTgzMyxlLmE0MT04MTYsZS5hNDI9ODMxLGUuYTQzPTkyMyxlLmE0ND03NDQsZS5hNDU9NzIzLGUuYTQ2PTc0OSxlLmE0Nz03OTAsZS5hNDg9NzkyLGUuYTQ5PTY5NSxlLmE1MD03NzYsZS5hNTE9NzY4LGUuYTUyPTc5MixlLmE1Mz03NTksZS5hNTQ9NzA3LGUuYTU1PTcwOCxlLmE1Nj02ODIsZS5hNTc9NzAxLGUuYTU4PTgyNixlLmE1OT04MTUsZS5hNjA9Nzg5LGUuYTYxPTc4OSxlLmE2Mj03MDcsZS5hNjM9Njg3LGUuYTY0PTY5NixlLmE2NT02ODksZS5hNjY9Nzg2LGUuYTY3PTc4NyxlLmE2OD03MTMsZS5hNjk9NzkxLGUuYTcwPTc4NSxlLmE3MT03OTEsZS5hNzI9ODczLGUuYTczPTc2MSxlLmE3ND03NjIsZS5hMjAzPTc2MixlLmE3NT03NTksZS5hMjA0PTc1OSxlLmE3Nj04OTIsZS5hNzc9ODkyLGUuYTc4PTc4OCxlLmE3OT03ODQsZS5hODE9NDM4LGUuYTgyPTEzOCxlLmE4Mz0yNzcsZS5hODQ9NDE1LGUuYTk3PTM5MixlLmE5OD0zOTIsZS5hOTk9NjY4LGUuYTEwMD02NjgsZS5hODk9MzkwLGUuYTkwPTM5MCxlLmE5Mz0zMTcsZS5hOTQ9MzE3LGUuYTkxPTI3NixlLmE5Mj0yNzYsZS5hMjA1PTUwOSxlLmE4NT01MDksZS5hMjA2PTQxMCxlLmE4Nj00MTAsZS5hODc9MjM0LGUuYTg4PTIzNCxlLmE5NT0zMzQsZS5hOTY9MzM0LGUuYTEwMT03MzIsZS5hMTAyPTU0NCxlLmExMDM9NTQ0LGUuYTEwND05MTAsZS5hMTA2PTY2NyxlLmExMDc9NzYwLGUuYTEwOD03NjAsZS5hMTEyPTc3NixlLmExMTE9NTk1LGUuYTExMD02OTQsZS5hMTA5PTYyNixlLmExMjA9Nzg4LGUuYTEyMT03ODgsZS5hMTIyPTc4OCxlLmExMjM9Nzg4LGUuYTEyND03ODgsZS5hMTI1PTc4OCxlLmExMjY9Nzg4LGUuYTEyNz03ODgsZS5hMTI4PTc4OCxlLmExMjk9Nzg4LGUuYTEzMD03ODgsZS5hMTMxPTc4OCxlLmExMzI9Nzg4LGUuYTEzMz03ODgsZS5hMTM0PTc4OCxlLmExMzU9Nzg4LGUuYTEzNj03ODgsZS5hMTM3PTc4OCxlLmExMzg9Nzg4LGUuYTEzOT03ODgsZS5hMTQwPTc4OCxlLmExNDE9Nzg4LGUuYTE0Mj03ODgsZS5hMTQzPTc4OCxlLmExNDQ9Nzg4LGUuYTE0NT03ODgsZS5hMTQ2PTc4OCxlLmExNDc9Nzg4LGUuYTE0OD03ODgsZS5hMTQ5PTc4OCxlLmExNTA9Nzg4LGUuYTE1MT03ODgsZS5hMTUyPTc4OCxlLmExNTM9Nzg4LGUuYTE1ND03ODgsZS5hMTU1PTc4OCxlLmExNTY9Nzg4LGUuYTE1Nz03ODgsZS5hMTU4PTc4OCxlLmExNTk9Nzg4LGUuYTE2MD04OTQsZS5hMTYxPTgzOCxlLmExNjM9MTAxNixlLmExNjQ9NDU4LGUuYTE5Nj03NDgsZS5hMTY1PTkyNCxlLmExOTI9NzQ4LGUuYTE2Nj05MTgsZS5hMTY3PTkyNyxlLmExNjg9OTI4LGUuYTE2OT05MjgsZS5hMTcwPTgzNCxlLmExNzE9ODczLGUuYTE3Mj04MjgsZS5hMTczPTkyNCxlLmExNjI9OTI0LGUuYTE3ND05MTcsZS5hMTc1PTkzMCxlLmExNzY9OTMxLGUuYTE3Nz00NjMsZS5hMTc4PTg4MyxlLmExNzk9ODM2LGUuYTE5Mz04MzYsZS5hMTgwPTg2NyxlLmExOTk9ODY3LGUuYTE4MT02OTYsZS5hMjAwPTY5NixlLmExODI9ODc0LGUuYTIwMT04NzQsZS5hMTgzPTc2MCxlLmExODQ9OTQ2LGUuYTE5Nz03NzEsZS5hMTg1PTg2NSxlLmExOTQ9NzcxLGUuYTE5OD04ODgsZS5hMTg2PTk2NyxlLmExOTU9ODg4LGUuYTE4Nz04MzEsZS5hMTg4PTg3MyxlLmExODk9OTI3LGUuYTE5MD05NzAsZS5hMTkxPTkxOH0pKX0pKTt0LmdldE1ldHJpY3M9YTt2YXIgaT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0Oi00MjZ9LGVbIkNvdXJpZXItQm9sZCJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDM5fSxlWyJDb3VyaWVyLU9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn0sZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDI2fSxlLkhlbHZldGljYT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGQiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUzMn0sZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9LGVbIlRpbWVzLVJvbWFuIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjIseEhlaWdodDo0NTB9LGVbIlRpbWVzLUJvbGQiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY3Nix4SGVpZ2h0OjQ2MX0sZVsiVGltZXMtSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NTMseEhlaWdodDo0NDF9LGVbIlRpbWVzLUJvbGRJdGFsaWMiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY2OSx4SGVpZ2h0OjQ2Mn0sZS5TeW1ib2w9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfSxlLlphcGZEaW5nYmF0cz17YXNjZW50Ok1hdGguTmFOLGRlc2NlbnQ6TWF0aC5OYU4sY2FwSGVpZ2h0Ok1hdGguTmFOLHhIZWlnaHQ6TWF0aC5OYU59fSkpO3QuZ2V0Rm9udEJhc2ljTWV0cmljcz1pfSwoZSx0KT0+e2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1pKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBvKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/byhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBjKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIHQmJmMoZS5wcm90b3R5cGUsdCksciYmYyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuR2x5ZlRhYmxlPXZvaWQgMDt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5nbHlmVGFibGUsbj10LmlzR2x5cGhMb2NhdGlvbnNMb25nLGE9dC5sb2NhVGFibGUsaT10Lm51bUdseXBocztzKHRoaXMsZSksdGhpcy5nbHlwaHM9W107Zm9yKHZhciBvPW5ldyBEYXRhVmlldyhhLmJ1ZmZlcixhLmJ5dGVPZmZzZXQsYS5ieXRlTGVuZ3RoKSxjPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKSx1PW4/NDoyLGw9bj9vLmdldFVpbnQzMigwKToyKm8uZ2V0VWludDE2KDApLGg9MCxkPTA7ZDxpO2QrKyl7aCs9dTt2YXIgcD1uP28uZ2V0VWludDMyKGgpOjIqby5nZXRVaW50MTYoaCk7aWYocCE9PWwpe3ZhciBnPWYucGFyc2UobCxjKTt0aGlzLmdseXBocy5wdXNoKGcpLGw9cH1lbHNlIHRoaXMuZ2x5cGhzLnB1c2gobmV3IGYoe30pKX19cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHlwaHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlKyh0LmdldFNpemUoKSszJi00KX0pLDApfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTaXplKCksdD1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKGUpKSxyPWU+MTMxMDcwLG49cj80OjIsaT1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCh0aGlzLmdseXBocy5sZW5ndGgrMSkqbikpO3I/aS5zZXRVaW50MzIoMCwwKTppLnNldFVpbnQxNigwLDApO3ZhciBvLHM9MCxjPTAsdT1hKHRoaXMuZ2x5cGhzKTt0cnl7Zm9yKHUucygpOyEobz11Lm4oKSkuZG9uZTspcz0ocys9by52YWx1ZS53cml0ZShzLHQpKSszJi00LGMrPW4scj9pLnNldFVpbnQzMihjLHMpOmkuc2V0VWludDE2KGMscz4+MSl9Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJue2lzTG9jYXRpb25Mb25nOnIsbG9jYTpuZXcgVWludDhBcnJheShpLmJ1ZmZlciksZ2x5ZjpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcil9fX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9dGhpcy5nbHlwaHMubGVuZ3RoO3Q8cjt0KyspdGhpcy5nbHlwaHNbdF0uc2NhbGUoZVt0XSl9fV0pLGV9KCk7dC5HbHlmVGFibGU9bDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5oZWFkZXIsbj12b2lkIDA9PT1yP251bGw6cixhPXQuc2ltcGxlLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LmNvbXBvc2l0ZXMsYz12b2lkIDA9PT1vP251bGw6bztzKHRoaXMsZSksdGhpcy5oZWFkZXI9bix0aGlzLnNpbXBsZT1pLHRoaXMuY29tcG9zaXRlcz1jfXJldHVybiB1KGUsW3trZXk6ImdldFNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciBlPXRoaXMuc2ltcGxlP3RoaXMuc2ltcGxlLmdldFNpemUoKTp0aGlzLmNvbXBvc2l0ZXMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuZ2V0U2l6ZSgpfSksMCk7cmV0dXJuIHRoaXMuaGVhZGVyLmdldFNpemUoKStlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciByPWU7aWYoZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KSx0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2V7dmFyIG4saT1hKHRoaXMuY29tcG9zaXRlcyk7dHJ5e2ZvcihpLnMoKTshKG49aS5uKCkpLmRvbmU7KWUrPW4udmFsdWUud3JpdGUoZSx0KX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuIGUtcn19LHtrZXk6InNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmhlYWRlcil7dmFyIHQ9KHRoaXMuaGVhZGVyLnhNaW4rdGhpcy5oZWFkZXIueE1heCkvMjtpZih0aGlzLmhlYWRlci5zY2FsZSh0LGUpLHRoaXMuc2ltcGxlKXRoaXMuc2ltcGxlLnNjYWxlKHQsZSk7ZWxzZXt2YXIgcixuPWEodGhpcy5jb21wb3NpdGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5zY2FsZSh0LGUpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19fX1dLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgYT1yKGgucGFyc2UodCxuKSwyKSxpPWFbMF0sbz1hWzFdO2lmKHQrPWksby5udW1iZXJPZkNvbnRvdXJzPDApe2Zvcih2YXIgcz1bXTs7KXt2YXIgYz1yKGcucGFyc2UodCxuKSwyKSx1PWNbMF0sbD1jWzFdO2lmKHQrPXUscy5wdXNoKGwpLCEoMzImbC5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBlKHtoZWFkZXI6byxjb21wb3NpdGVzOnN9KX1yZXR1cm4gbmV3IGUoe2hlYWRlcjpvLHNpbXBsZTpwLnBhcnNlKHQsbixvLm51bWJlck9mQ29udG91cnMpfSl9fV0pLGV9KCksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5udW1iZXJPZkNvbnRvdXJzLG49dC54TWluLGE9dC55TWluLGk9dC54TWF4LG89dC55TWF4O3ModGhpcyxlKSx0aGlzLm51bWJlck9mQ29udG91cnM9cix0aGlzLnhNaW49bix0aGlzLnlNaW49YSx0aGlzLnhNYXg9aSx0aGlzLnlNYXg9b31yZXR1cm4gdShlLFt7a2V5OiJnZXRTaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAxMH19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKSx0LnNldEludDE2KGUrMix0aGlzLnhNaW4pLHQuc2V0SW50MTYoZSs0LHRoaXMueU1pbiksdC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KSx0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpLDEwfX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy54TWluPU1hdGgucm91bmQoZSsodGhpcy54TWluLWUpKnQpLHRoaXMueE1heD1NYXRoLnJvdW5kKGUrKHRoaXMueE1heC1lKSp0KX19XSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuWzEwLG5ldyBlKHtudW1iZXJPZkNvbnRvdXJzOnIuZ2V0SW50MTYodCkseE1pbjpyLmdldEludDE2KHQrMikseU1pbjpyLmdldEludDE2KHQrNCkseE1heDpyLmdldEludDE2KHQrNikseU1heDpyLmdldEludDE2KHQrOCl9KV19fV0pLGV9KCksZD11KChmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LnhDb29yZGluYXRlcyxhPXQueUNvb3JkaW5hdGVzO3ModGhpcyxlKSx0aGlzLnhDb29yZGluYXRlcz1uLHRoaXMueUNvb3JkaW5hdGVzPWEsdGhpcy5mbGFncz1yfSkpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuY29udG91cnMsbj10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5jb250b3Vycz1yLHRoaXMuaW5zdHJ1Y3Rpb25zPW59cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTIqdGhpcy5jb250b3Vycy5sZW5ndGgrMit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgscj0wLG49MCxpPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgbz1lLnZhbHVlO3QrPW8uZmxhZ3MubGVuZ3RoO2Zvcih2YXIgcz0wLGM9by54Q29vcmRpbmF0ZXMubGVuZ3RoO3M8YztzKyspe3ZhciB1PW8ueENvb3JkaW5hdGVzW3NdLGw9by55Q29vcmRpbmF0ZXNbc10sZj1NYXRoLmFicyh1LXIpO2Y+MjU1P3QrPTI6Zj4wJiYodCs9MSkscj11LChmPU1hdGguYWJzKGwtbikpPjI1NT90Kz0yOmY+MCYmKHQrPTEpLG49bH19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiB0fX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lLGk9W10sbz1bXSxzPVtdLGM9MCx1PTAsbD1hKHRoaXMuY29udG91cnMpO3RyeXtmb3IobC5zKCk7IShyPWwubigpKS5kb25lOyl7Zm9yKHZhciBmPXIudmFsdWUsaD0wLGQ9Zi54Q29vcmRpbmF0ZXMubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPWYuZmxhZ3NbaF0sZz1mLnhDb29yZGluYXRlc1toXSx2PWctYztpZigwPT09dilwfD0xNixpLnB1c2goMCk7ZWxzZXt2YXIgeT1NYXRoLmFicyh2KTt5PD0yNTU/KHB8PXY+PTA/MTg6MixpLnB1c2goeSkpOmkucHVzaCh2KX1jPWc7dmFyIG09Zi55Q29vcmRpbmF0ZXNbaF07aWYoMD09KHY9bS11KSlwfD0zMixvLnB1c2goMCk7ZWxzZXt2YXIgYj1NYXRoLmFicyh2KTtiPD0yNTU/KHB8PXY+PTA/MzY6NCxvLnB1c2goYikpOm8ucHVzaCh2KX11PW0scy5wdXNoKHApfXQuc2V0VWludDE2KGUsaS5sZW5ndGgtMSksZSs9Mn19Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpLGUrPTIsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoJiYobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSksZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtmb3IodmFyIHc9MCxrPXM7dzxrLmxlbmd0aDt3Kyspe3ZhciBTPWtbd107dC5zZXRVaW50OChlKyssUyl9Zm9yKHZhciB4PTAsTz1pLmxlbmd0aDt4PE87eCsrKXt2YXIgQT1pW3hdLEM9c1t4XTsyJkM/dC5zZXRVaW50OChlKyssQSk6MTYmQ3x8KHQuc2V0SW50MTYoZSxBKSxlKz0yKX1mb3IodmFyIEY9MCxQPW8ubGVuZ3RoO0Y8UDtGKyspe3ZhciBUPW9bRl0sST1zW0ZdOzQmST90LnNldFVpbnQ4KGUrKyxUKTozMiZJfHwodC5zZXRJbnQxNihlLFQpLGUrPTIpfXJldHVybiBlLW59fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKDAhPT1pLnhDb29yZGluYXRlcy5sZW5ndGgpZm9yKHZhciBvPTAscz1pLnhDb29yZGluYXRlcy5sZW5ndGg7bzxzO28rKylpLnhDb29yZGluYXRlc1tvXT1NYXRoLnJvdW5kKGUrKGkueENvb3JkaW5hdGVzW29dLWUpKnQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7Zm9yKHZhciBhPVtdLGk9MDtpPG47aSsrKXt2YXIgbz1yLmdldFVpbnQxNih0KTt0Kz0yLGEucHVzaChvKX12YXIgcz1hW24tMV0rMSxjPXIuZ2V0VWludDE2KHQpO3QrPTI7dmFyIHU9bmV3IFVpbnQ4QXJyYXkocikuc2xpY2UodCx0K2MpO3QrPWM7Zm9yKHZhciBsPVtdLGY9MDtmPHM7dCsrLGYrKyl7dmFyIGg9ci5nZXRVaW50OCh0KTtpZihsLnB1c2goaCksOCZoKXt2YXIgcD1yLmdldFVpbnQ4KCsrdCk7aF49ODtmb3IodmFyIGc9MDtnPHA7ZysrKWwucHVzaChoKTtmKz1wfX1mb3IodmFyIHY9W10seT1bXSxtPVtdLGI9W10sdz1bXSxrPTAsUz0wLHg9MDt4PHM7eCsrKXt2YXIgTz1sW3hdO2lmKDImTyl7dmFyIEE9ci5nZXRVaW50OCh0KyspO1MrPTE2Jk8/QTotQSx5LnB1c2goUyl9ZWxzZSAxNiZPfHwoUys9ci5nZXRJbnQxNih0KSx0Kz0yKSx5LnB1c2goUyk7YVtrXT09PXgmJihrKyssdi5wdXNoKHkpLHk9W10pfVM9MCxrPTA7Zm9yKHZhciBDPTA7QzxzO0MrKyl7dmFyIEY9bFtDXTtpZig0JkYpe3ZhciBQPXIuZ2V0VWludDgodCsrKTtTKz0zMiZGP1A6LVAsbS5wdXNoKFMpfWVsc2UgMzImRnx8KFMrPXIuZ2V0SW50MTYodCksdCs9MiksbS5wdXNoKFMpO2IucHVzaCgxJkZ8NjQmRiksYVtrXT09PUMmJih5PXZba10saysrLHcucHVzaChuZXcgZCh7ZmxhZ3M6Yix4Q29vcmRpbmF0ZXM6eSx5Q29vcmRpbmF0ZXM6bX0pKSxtPVtdLGI9W10pfXJldHVybiBuZXcgZSh7Y29udG91cnM6dyxpbnN0cnVjdGlvbnM6dX0pfX1dKSxlfSgpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LmdseXBoSW5kZXgsYT10LmFyZ3VtZW50MSxpPXQuYXJndW1lbnQyLG89dC50cmFuc2YsYz10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5mbGFncz1yLHRoaXMuZ2x5cGhJbmRleD1uLHRoaXMuYXJndW1lbnQxPWEsdGhpcy5hcmd1bWVudDI9aSx0aGlzLnRyYW5zZj1vLHRoaXMuaW5zdHJ1Y3Rpb25zPWN9cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoO3JldHVybiAyNTYmdGhpcy5mbGFncyYmKGUrPTIrdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSxlKz0yLDImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fChlKz0yKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fChlKz0yKSxlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZTtyZXR1cm4gMiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KHRoaXMuZmxhZ3N8PTEpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KHRoaXMuZmxhZ3N8PTEpLHQuc2V0VWludDE2KGUsdGhpcy5mbGFncyksdC5zZXRVaW50MTYoZSsyLHRoaXMuZ2x5cGhJbmRleCksZSs9NCwxJnRoaXMuZmxhZ3M/KDImdGhpcy5mbGFncz8odC5zZXRJbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldEludDE2KGUrMix0aGlzLmFyZ3VtZW50MikpOih0LnNldFVpbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpKSxlKz00KToodC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50MiksZSs9MiksMjU2JnRoaXMuZmxhZ3MmJih0LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCksZSs9Mix0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgmJihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKSxlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpKSxlLXJ9fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt9fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuLGEsaT10LG89W10scz1yLmdldFVpbnQxNih0KSxjPXIuZ2V0VWludDE2KHQrMik7dCs9NCwxJnM/KDImcz8obj1yLmdldEludDE2KHQpLGE9ci5nZXRJbnQxNih0KzIpKToobj1yLmdldFVpbnQxNih0KSxhPXIuZ2V0VWludDE2KHQrMikpLHQrPTQsc149MSk6KDImcz8obj1yLmdldEludDgodCksYT1yLmdldEludDgodCsxKSk6KG49ci5nZXRVaW50OCh0KSxhPXIuZ2V0VWludDgodCsxKSksdCs9MiksOCZzPyhvLnB1c2goci5nZXRVaW50MTYodCkpLHQrPTIpOjY0JnM/KG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpKSx0Kz00KToxMjgmcyYmKG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpLHIuZ2V0VWludDE2KHQrNCksci5nZXRVaW50MTYodCs2KSksdCs9OCk7dmFyIHU9bnVsbDtpZigyNTYmcyl7dmFyIGw9ci5nZXRVaW50MTYodCk7dCs9Mix1PW5ldyBVaW50OEFycmF5KHIpLnNsaWNlKHQsdCtsKSx0Kz1sfXJldHVyblt0LWksbmV3IGUoe2ZsYWdzOnMsZ2x5cGhJbmRleDpjLGFyZ3VtZW50MTpuLGFyZ3VtZW50MjphLHRyYW5zZjpvLGluc3RydWN0aW9uczp1fSldfX1dKSxlfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVuVHlwZUZpbGVCdWlsZGVyPXZvaWQgMDt2YXIgYT1yKDEzNSksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQscil7ZVt0XT1yPj44JjI1NSxlW3QrMV09MjU1JnJ9ZnVuY3Rpb24gdShlLHQscil7ZVt0XT1yPj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfWZ1bmN0aW9uIGwoZSx0LHIpe2lmKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KWUuc2V0KHIsdCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpZm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bisrKWVbdCsrXT0yNTUmci5jaGFyQ29kZUF0KG4pO2Vsc2V7dmFyIGksbz1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fShyKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBjPWkudmFsdWU7ZVt0KytdPTI1NSZjfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19fXZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnNmbnQ9dCx0aGlzLnRhYmxlcz1PYmplY3QuY3JlYXRlKG51bGwpfXZhciB0LHIsbjtyZXR1cm4gdD1lLG49W3trZXk6ImdldFNlYXJjaFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MSxuPTA7KHJeZSk+cjspcjw8PTEsbisrO3ZhciBhPXIqdDtyZXR1cm57cmFuZ2U6YSxlbnRyeTpuLHJhbmdlU2hpZnQ6dCplLWF9fX1dLChyPVt7a2V5OiJ0b0FycmF5Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2ZudCxyPXRoaXMudGFibGVzLG49T2JqZWN0LmtleXMocik7bi5zb3J0KCk7dmFyIG8scyxmLGgsZCxwPW4ubGVuZ3RoLGc9MTIrMTYqcCx2PVtnXTtmb3Iobz0wO288cDtvKyspZys9KChoPXJbbltvXV0pLmxlbmd0aCszJi00KT4+PjAsdi5wdXNoKGcpO3ZhciB5PW5ldyBVaW50OEFycmF5KGcpO2ZvcihvPTA7bzxwO28rKyloPXJbbltvXV0sbCh5LHZbb10saCk7InRydWUiPT09dCYmKHQ9KDAsaS5zdHJpbmczMikoNjU1MzYpKSx5WzBdPTI1NSZ0LmNoYXJDb2RlQXQoMCkseVsxXT0yNTUmdC5jaGFyQ29kZUF0KDEpLHlbMl09MjU1JnQuY2hhckNvZGVBdCgyKSx5WzNdPTI1NSZ0LmNoYXJDb2RlQXQoMyksYyh5LDQscCk7dmFyIG09ZS5nZXRTZWFyY2hQYXJhbXMocCwxNik7Zm9yKGMoeSw2LG0ucmFuZ2UpLGMoeSw4LG0uZW50cnkpLGMoeSwxMCxtLnJhbmdlU2hpZnQpLGc9MTIsbz0wO288cDtvKyspe2Q9bltvXSx5W2ddPTI1NSZkLmNoYXJDb2RlQXQoMCkseVtnKzFdPTI1NSZkLmNoYXJDb2RlQXQoMSkseVtnKzJdPTI1NSZkLmNoYXJDb2RlQXQoMikseVtnKzNdPTI1NSZkLmNoYXJDb2RlQXQoMyk7dmFyIGI9MDtmb3Iocz12W29dLGY9dltvKzFdO3M8ZjtzKz00KWI9YisoMCxhLnJlYWRVaW50MzIpKHkscyk+Pj4wO3UoeSxnKzQsYiksdSh5LGcrOCx2W29dKSx1KHksZysxMixyW2RdLmxlbmd0aCksZys9MTZ9cmV0dXJuIHl9fSx7a2V5OiJhZGRUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihlIGluIHRoaXMudGFibGVzKXRocm93IG5ldyBFcnJvcigiVGFibGUgIitlKyIgYWxyZWFkeSBleGlzdHMiKTt0aGlzLnRhYmxlc1tlXT10fX1dKSYmbyh0LnByb3RvdHlwZSxyKSxuJiZvKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGUxRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigyKSxpPXIoMTY3KSxvPXIoMTM1KSxzPXIoMTM5KSxjPXIoMTc4KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxhPXQubGVuZ3RoLGk9bi1hLHM9cixjPSExO3M8aTspe2Zvcih2YXIgdT0wO3U8YSYmZVtzK3VdPT09dFt1XTspdSsrO2lmKHU+PWEpe2ZvcihzKz11O3M8biYmKDAsby5pc1doaXRlU3BhY2UpKGVbc10pOylzKys7Yz0hMDticmVha31zKyt9cmV0dXJue2ZvdW5kOmMsbGVuZ3RoOnN9fXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSk7dmFyIG89bi5sZW5ndGgxLHU9KG4ubGVuZ3RoMixyLnBlZWtCeXRlcyg2KSksbD0xMjg9PT11WzBdJiYxPT09dVsxXTtsJiYoci5za2lwKDYpLG89dVs1XTw8MjR8dVs0XTw8MTZ8dVszXTw8OHx1WzJdKTt2YXIgZj1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxvLGM9WzEwMSwxMDEsMTIwLDEwMSw5OV0sdT1lLnBvczt0cnl7bj0ocj1lLmdldEJ5dGVzKHQpKS5sZW5ndGh9Y2F0Y2goZSl7fWlmKG49PT10JiYoaT1kKHIsYyx0LTIqYy5sZW5ndGgpKS5mb3VuZCYmaS5sZW5ndGg9PT10KXJldHVybntzdHJlYW06bmV3IHMuU3RyZWFtKHIpLGxlbmd0aDp0fTtmb3IoKDAsYS53YXJuKSgnSW52YWxpZCAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxlLnBvcz11OzAhPT0oaT1kKGUucGVla0J5dGVzKDIwNDgpLGMsMCkpLmxlbmd0aDspaWYoZS5wb3MrPWkubGVuZ3RoLGkuZm91bmQpe289ZS5wb3MtdTticmVha31yZXR1cm4gZS5wb3M9dSxvP3tzdHJlYW06bmV3IHMuU3RyZWFtKGUuZ2V0Qnl0ZXMobykpLGxlbmd0aDpvfTooKDAsYS53YXJuKSgnVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJykse3N0cmVhbTpuZXcgcy5TdHJlYW0oZS5nZXRCeXRlcyh0KSksbGVuZ3RoOnR9KX0ocixvKTtuZXcgYy5UeXBlMVBhcnNlcihmLnN0cmVhbSwhMSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIobiksbCYmKCh1PXIuZ2V0Qnl0ZXMoNikpWzVdLHVbNF0sdVszXSx1WzJdKTt2YXIgaD1mdW5jdGlvbihlLHQpe3ZhciByPWUuZ2V0Qnl0ZXMoKTtpZigwPT09ci5sZW5ndGgpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImdldEVleGVjQmxvY2sgLSBubyBmb250IHByb2dyYW0gZm91bmQuIik7cmV0dXJue3N0cmVhbTpuZXcgcy5TdHJlYW0ociksbGVuZ3RoOnIubGVuZ3RofX0ocikscD1uZXcgYy5UeXBlMVBhcnNlcihoLnN0cmVhbSwhMCxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRQcm9ncmFtKG4pO2Zvcih2YXIgZyBpbiBwLnByb3BlcnRpZXMpbltnXT1wLnByb3BlcnRpZXNbZ107dmFyIHY9cC5jaGFyc3RyaW5ncyx5PXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyh2KSxtPXRoaXMuZ2V0VHlwZTJTdWJycyhwLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPXYsdGhpcy5kYXRhPXRoaXMud3JhcCh0LHksdGhpcy5jaGFyc3RyaW5ncyxtLG4pLHRoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhwLmNoYXJzdHJpbmdzKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6Im51bUdseXBocyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9fSx7a2V5OiJnZXRDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9WyIubm90ZGVmIl0scj1sKHRoaXMuY2hhcnN0cmluZ3MpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZS5nbHlwaE5hbWU7dC5wdXNoKG4pfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGFyc3RyaW5ncztpZihlLmNvbXBvc2l0ZSl7Zm9yKHZhciByPU9iamVjdC5jcmVhdGUobnVsbCksbj0wLGE9dC5sZW5ndGg7bjxhO24rKylyW2UuY01hcC5jaGFyQ29kZU9mKG4pXT1uKzE7cmV0dXJuIHJ9dmFyIG8scyxjPVsiLm5vdGRlZiJdO2ZvcihzPTA7czx0Lmxlbmd0aDtzKyspYy5wdXNoKHRbc10uZ2x5cGhOYW1lKTt2YXIgdT1lLmJ1aWx0SW5FbmNvZGluZztpZih1KWZvcih2YXIgbCBpbiBvPU9iamVjdC5jcmVhdGUobnVsbCksdSkocz1jLmluZGV4T2YodVtsXSkpPj0wJiYob1tsXT1zKTtyZXR1cm4oMCxpLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxvLGMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIShlPDB8fGU+PXRoaXMubnVtR2x5cGhzKSYmKDA9PT1lfHx0aGlzLmNoYXJzdHJpbmdzW2UtMV0uY2hhcnN0cmluZy5sZW5ndGg+MCl9fSx7a2V5OiJnZXRTZWFjcyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBhPWVbcl07YS5zZWFjJiYodFtyKzFdPWEuc2VhYyl9cmV0dXJuIHR9fSx7a2V5OiJnZXRUeXBlMkNoYXJzdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPVtdLG49bChlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7ci5wdXNoKGEuY2hhcnN0cmluZyl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByfX0se2tleToiZ2V0VHlwZTJTdWJycyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxlbmd0aDt0PXI8MTEzMz8xMDc6cjwzMzc2OT8xMTMxOjMyNzY4O3ZhciBuLGE9W107Zm9yKG49MDtuPHQ7bisrKWEucHVzaChbMTFdKTtmb3Iobj0wO248cjtuKyspYS5wdXNoKGVbbl0pO3JldHVybiBhfX0se2tleToid3JhcCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxpKXt2YXIgbz1uZXcgbi5DRkY7by5oZWFkZXI9bmV3IG4uQ0ZGSGVhZGVyKDEsMCw0LDQpLG8ubmFtZXM9W2VdO3ZhciBzPW5ldyBuLkNGRlRvcERpY3Q7cy5zZXRCeU5hbWUoInZlcnNpb24iLDM5MSkscy5zZXRCeU5hbWUoIk5vdGljZSIsMzkyKSxzLnNldEJ5TmFtZSgiRnVsbE5hbWUiLDM5Mykscy5zZXRCeU5hbWUoIkZhbWlseU5hbWUiLDM5NCkscy5zZXRCeU5hbWUoIldlaWdodCIsMzk1KSxzLnNldEJ5TmFtZSgiRW5jb2RpbmciLG51bGwpLHMuc2V0QnlOYW1lKCJGb250TWF0cml4IixpLmZvbnRNYXRyaXgpLHMuc2V0QnlOYW1lKCJGb250QkJveCIsaS5iYm94KSxzLnNldEJ5TmFtZSgiY2hhcnNldCIsbnVsbCkscy5zZXRCeU5hbWUoIkNoYXJTdHJpbmdzIixudWxsKSxzLnNldEJ5TmFtZSgiUHJpdmF0ZSIsbnVsbCksby50b3BEaWN0PXM7dmFyIGM9bmV3IG4uQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIiksYy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKSxjLmFkZChlKSxjLmFkZChlKSxjLmFkZCgiTWVkaXVtIiksby5zdHJpbmdzPWMsby5nbG9iYWxTdWJySW5kZXg9bmV3IG4uQ0ZGSW5kZXg7dmFyIHUsbCxmPXQubGVuZ3RoLGg9WyIubm90ZGVmIl07Zm9yKHU9MDt1PGY7dSsrKXt2YXIgZD1yW3VdLmdseXBoTmFtZTstMT09PW4uQ0ZGU3RhbmRhcmRTdHJpbmdzLmluZGV4T2YoZCkmJmMuYWRkKGQpLGgucHVzaChkKX1vLmNoYXJzZXQ9bmV3IG4uQ0ZGQ2hhcnNldCghMSwwLGgpO3ZhciBwPW5ldyBuLkNGRkluZGV4O2ZvcihwLmFkZChbMTM5LDE0XSksdT0wO3U8Zjt1KyspcC5hZGQodFt1XSk7by5jaGFyU3RyaW5ncz1wO3ZhciBnPW5ldyBuLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7dmFyIHY9WyJCbHVlVmFsdWVzIiwiT3RoZXJCbHVlcyIsIkZhbWlseUJsdWVzIiwiRmFtaWx5T3RoZXJCbHVlcyIsIlN0ZW1TbmFwSCIsIlN0ZW1TbmFwViIsIkJsdWVTaGlmdCIsIkJsdWVGdXp6IiwiQmx1ZVNjYWxlIiwiTGFuZ3VhZ2VHcm91cCIsIkV4cGFuc2lvbkZhY3RvciIsIkZvcmNlQm9sZCIsIlN0ZEhXIiwiU3RkVlciXTtmb3IodT0wLGw9di5sZW5ndGg7dTxsO3UrKyl7dmFyIHk9dlt1XTtpZih5IGluIGkucHJpdmF0ZURhdGEpe3ZhciBtPWkucHJpdmF0ZURhdGFbeV07aWYoQXJyYXkuaXNBcnJheShtKSlmb3IodmFyIGI9bS5sZW5ndGgtMTtiPjA7Yi0tKW1bYl0tPW1bYi0xXTtnLnNldEJ5TmFtZSh5LG0pfX1vLnRvcERpY3QucHJpdmF0ZURpY3Q9Zzt2YXIgdz1uZXcgbi5DRkZJbmRleDtmb3IodT0wLGw9YS5sZW5ndGg7dTxsO3UrKyl3LmFkZChhW3VdKTtyZXR1cm4gZy5zdWJyc0luZGV4PXcsbmV3IG4uQ0ZGQ29tcGlsZXIobykuY29tcGlsZSgpfX1dKSYmaCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuVHlwZTFGb250PXB9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UeXBlMVBhcnNlcj12b2lkIDA7dmFyIG49cigxNjYpLGE9cigxMzUpLGk9cigxMzkpLG89cigyKTtmdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPVs0XSxkPVs1XSxwPVs2XSxnPVs3XSx2PVs4XSx5PVsxMiwzNV0sbT1bMTRdLGI9WzIxXSx3PVsyMl0saz1bMzBdLFM9WzMxXSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLndpZHRoPTAsdGhpcy5sc2I9MCx0aGlzLmZsZXhpbmc9ITEsdGhpcy5vdXRwdXQ9W10sdGhpcy5zdGFjaz1bXX1yZXR1cm4gZihlLFt7a2V5OiJjb252ZXJ0Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuLGEsaSxzPWUubGVuZ3RoLGM9ITEsdT0wO3U8czt1Kyspe3ZhciBsPWVbdV07aWYobDwzMil7c3dpdGNoKDEyPT09bCYmKGw9KGw8PDgpK2VbKyt1XSksbCl7Y2FzZSAxOmNhc2UgMzpjYXNlIDk6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDMwNzQ6Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSA0OmlmKHRoaXMuZmxleGluZyl7aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7Yz0hMDticmVha312YXIgZj10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCgwLGYpO2JyZWFrfWM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGgpO2JyZWFrO2Nhc2UgNTpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixkKTticmVhaztjYXNlIDY6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDEscCk7YnJlYWs7Y2FzZSA3OmM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGcpO2JyZWFrO2Nhc2UgODpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNix2KTticmVhaztjYXNlIDEwOmlmKHRoaXMuc3RhY2subGVuZ3RoPDEpe2M9ITA7YnJlYWt9aWYoIXRbaT10aGlzLnN0YWNrLnBvcCgpXSl7Yz0hMDticmVha31jPXRoaXMuY29udmVydCh0W2ldLHQscik7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gYztjYXNlIDEzOmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe2M9ITA7YnJlYWt9bj10aGlzLnN0YWNrLnBvcCgpLGE9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMix3KTticmVhaztjYXNlIDE0OnRoaXMub3V0cHV0LnB1c2gobVswXSk7YnJlYWs7Y2FzZSAyMTppZih0aGlzLmZsZXhpbmcpYnJlYWs7Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDIsYik7YnJlYWs7Y2FzZSAyMjppZih0aGlzLmZsZXhpbmcpe3RoaXMuc3RhY2sucHVzaCgwKTticmVha31jPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSx3KTticmVhaztjYXNlIDMwOmM9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGspO2JyZWFrO2Nhc2UgMzE6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsUyk7YnJlYWs7Y2FzZSAzMDc4OmlmKHIpe3ZhciB4PXRoaXMuc3RhY2suYXQoLTUpO3RoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KSx0aGlzLnNlYWNbMF0rPXRoaXMubHNiLXgsYz10aGlzLmV4ZWN1dGVDb21tYW5kKDAsbSl9ZWxzZSBjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxtKTticmVhaztjYXNlIDMwNzk6aWYodGhpcy5zdGFjay5sZW5ndGg8NCl7Yz0hMDticmVha310aGlzLnN0YWNrLnBvcCgpLG49dGhpcy5zdGFjay5wb3AoKTt2YXIgTz10aGlzLnN0YWNrLnBvcCgpO2E9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhLE8pLGM9dGhpcy5leGVjdXRlQ29tbWFuZCgzLGIpO2JyZWFrO2Nhc2UgMzA4NDppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfXZhciBBPXRoaXMuc3RhY2sucG9wKCksQz10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaChDL0EpO2JyZWFrO2Nhc2UgMzA4ODppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfWk9dGhpcy5zdGFjay5wb3AoKTt2YXIgRj10aGlzLnN0YWNrLnBvcCgpO2lmKDA9PT1pJiYzPT09Ril7dmFyIFA9dGhpcy5zdGFjay5zcGxpY2UodGhpcy5zdGFjay5sZW5ndGgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChQWzJdK1BbMF0sUFszXStQWzFdLFBbNF0sUFs1XSxQWzZdLFBbN10sUFs4XSxQWzldLFBbMTBdLFBbMTFdLFBbMTJdLFBbMTNdLFBbMTRdKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMseSwhMCksdGhpcy5mbGV4aW5nPSExLHRoaXMuc3RhY2sucHVzaChQWzE1XSxQWzE2XSl9ZWxzZSAxPT09aSYmMD09PUYmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0OigwLG8ud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJytsKyciJyl9aWYoYylicmVha31lbHNlIGw8PTI0Nj9sLT0xMzk6bD1sPD0yNTA/MjU2KihsLTI0NykrZVsrK3VdKzEwODpsPD0yNTQ/LTI1NioobC0yNTEpLWVbKyt1XS0xMDg6KDI1NSZlWysrdV0pPDwyNHwoMjU1JmVbKyt1XSk8PDE2fCgyNTUmZVsrK3VdKTw8OHwoMjU1JmVbKyt1XSk8PDAsdGhpcy5zdGFjay5wdXNoKGwpfXJldHVybiBjfX0se2tleToiZXhlY3V0ZUNvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9dGhpcy5zdGFjay5sZW5ndGg7aWYoZT5pKXJldHVybiEwO2Zvcih2YXIgbz1pLWUscz1vO3M8aTtzKyspe3ZhciB1PXRoaXMuc3RhY2tbc107TnVtYmVyLmlzSW50ZWdlcih1KT90aGlzLm91dHB1dC5wdXNoKDI4LHU+PjgmMjU1LDI1NSZ1KToodT02NTUzNip1fDAsdGhpcy5vdXRwdXQucHVzaCgyNTUsdT4+MjQmMjU1LHU+PjE2JjI1NSx1Pj44JjI1NSwyNTUmdSkpfXJldHVybihuPXRoaXMub3V0cHV0KS5wdXNoLmFwcGx5KG4sZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYyhlKX0oYT10KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShhKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX0oYSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpLHI/dGhpcy5zdGFjay5zcGxpY2UobyxlKTp0aGlzLnN0YWNrLmxlbmd0aD0wLCExfX1dKSxlfSgpO2Z1bmN0aW9uIE8oZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIEEoZSx0LHIpe2lmKHI+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbixhLGk9MHx0O2ZvcihuPTA7bjxyO24rKylpPTUyODQ1KihlW25dK2kpKzIyNzE5JjY1NTM1O3ZhciBvPWUubGVuZ3RoLXIscz1uZXcgVWludDhBcnJheShvKTtmb3Iobj1yLGE9MDthPG87bisrLGErKyl7dmFyIGM9ZVtuXTtzW2FdPWNeaT4+OCxpPTUyODQ1KihjK2kpKzIyNzE5JjY1NTM1fXJldHVybiBzfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfXZhciBGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7aWYodSh0aGlzLGUpLHIpe3ZhciBvPXQuZ2V0Qnl0ZXMoKSxzPSEoKE8ob1swXSl8fCgwLGEuaXNXaGl0ZVNwYWNlKShvWzBdKSkmJk8ob1sxXSkmJk8ob1syXSkmJk8ob1szXSkmJk8ob1s0XSkmJk8ob1s1XSkmJk8ob1s2XSkmJk8ob1s3XSkpO3Q9bmV3IGkuU3RyZWFtKHM/QShvLDU1NjY1LDQpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9NTU2NjUsbz1lLmxlbmd0aCxzPW5ldyBVaW50OEFycmF5KG8+Pj4xKTtmb3Iobj0wLGE9MDtuPG87bisrKXt2YXIgYz1lW25dO2lmKE8oYykpe24rKztmb3IodmFyIHU9dm9pZCAwO248byYmIU8odT1lW25dKTspbisrO2lmKG48byl7dmFyIGw9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShjLHUpLDE2KTtzW2ErK109bF5pPj44LGk9NTI4NDUqKGwraSkrMjI3MTkmNjU1MzV9fX1yZXR1cm4gcy5zbGljZSg0LGEpfShvKSl9dGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkPSEhbix0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKX1yZXR1cm4gZihlLFt7a2V5OiJyZWFkTnVtYmVyQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgZT1bXTs7KXt2YXIgdD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXR8fCJdIj09PXR8fCJ9Ij09PXQpYnJlYWs7ZS5wdXNoKHBhcnNlRmxvYXQodHx8MCkpfXJldHVybiBlfX0se2tleToicmVhZE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9fSx7a2V5OiJyZWFkSW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gMHxwYXJzZUludChlfHwwLDEwKX19LHtrZXk6InJlYWRCb29sZWFuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJ0cnVlIj09PXRoaXMuZ2V0VG9rZW4oKT8xOjB9fSx7a2V5OiJuZXh0Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJwcmV2Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJlYW0uc2tpcCgtMiksdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJnZXRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyOzspe2lmKC0xPT09dClyZXR1cm4gbnVsbDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxhLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9aWYoQyh0KSlyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLFN0cmluZy5mcm9tQ2hhckNvZGUodCk7dmFyIHI9IiI7ZG97cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PXRoaXMubmV4dENoYXIoKX13aGlsZSh0Pj0wJiYhKDAsYS5pc1doaXRlU3BhY2UpKHQpJiYhQyh0KSk7cmV0dXJuIHJ9fSx7a2V5OiJyZWFkQ2hhclN0cmluZ3MiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT10P2U6QShlLDQzMzAsdCl9fSx7a2V5OiJleHRyYWN0Rm9udFByb2dyYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RyZWFtLHI9W10sbj1bXSxhPU9iamVjdC5jcmVhdGUobnVsbCk7YS5sZW5JVj00O2Zvcih2YXIgaSxvLHMsYyx1PXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTphfX07bnVsbCE9PShpPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PWkpc3dpdGNoKGk9dGhpcy5nZXRUb2tlbigpKXtjYXNlIkNoYXJTdHJpbmdzIjpmb3IodGhpcy5nZXRUb2tlbigpLHRoaXMuZ2V0VG9rZW4oKSx0aGlzLmdldFRva2VuKCksdGhpcy5nZXRUb2tlbigpO251bGwhPT0oaT10aGlzLmdldFRva2VuKCkpJiYiZW5kIiE9PWk7KWlmKCIvIj09PWkpe3ZhciBsPXRoaXMuZ2V0VG9rZW4oKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBmPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpP3RoaXMuZ2V0VG9rZW4oKToiLyI9PT1pJiZ0aGlzLnByZXZDaGFyKCksbi5wdXNoKHtnbHlwaDpsLGVuY29kZWQ6Zn0pfWJyZWFrO2Nhc2UiU3VicnMiOmZvcih0aGlzLnJlYWRJbnQoKSx0aGlzLmdldFRva2VuKCk7ImR1cCI9PT10aGlzLmdldFRva2VuKCk7KXt2YXIgaD10aGlzLnJlYWRJbnQoKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBkPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpJiZ0aGlzLmdldFRva2VuKCkscltoXT1kfWJyZWFrO2Nhc2UiQmx1ZVZhbHVlcyI6Y2FzZSJPdGhlckJsdWVzIjpjYXNlIkZhbWlseUJsdWVzIjpjYXNlIkZhbWlseU90aGVyQmx1ZXMiOnZhciBwPXRoaXMucmVhZE51bWJlckFycmF5KCk7cC5sZW5ndGg+MCYmcC5sZW5ndGg7YnJlYWs7Y2FzZSJTdGVtU25hcEgiOmNhc2UiU3RlbVNuYXBWIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTticmVhaztjYXNlIlN0ZEhXIjpjYXNlIlN0ZFZXIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTticmVhaztjYXNlIkJsdWVTaGlmdCI6Y2FzZSJsZW5JViI6Y2FzZSJCbHVlRnV6eiI6Y2FzZSJCbHVlU2NhbGUiOmNhc2UiTGFuZ3VhZ2VHcm91cCI6Y2FzZSJFeHBhbnNpb25GYWN0b3IiOnUucHJvcGVydGllcy5wcml2YXRlRGF0YVtpXT10aGlzLnJlYWROdW1iZXIoKTticmVhaztjYXNlIkZvcmNlQm9sZCI6dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2ldPXRoaXMucmVhZEJvb2xlYW4oKX1mb3IodmFyIGc9MCx2PW47Zzx2Lmxlbmd0aDtnKyspe3ZhciB5PXZbZ10sbT15LmVuY29kZWQsYj15LmdseXBoLHc9bmV3IHgsaz13LmNvbnZlcnQobSxyLHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCksUz13Lm91dHB1dDtrJiYoUz1bMTRdKTt2YXIgTz17Z2x5cGhOYW1lOmIsY2hhcnN0cmluZzpTLHdpZHRoOncud2lkdGgsbHNiOncubHNiLHNlYWM6dy5zZWFjfTtpZigiLm5vdGRlZiI9PT1iP3UuY2hhcnN0cmluZ3MudW5zaGlmdChPKTp1LmNoYXJzdHJpbmdzLnB1c2goTyksZS5idWlsdEluRW5jb2Rpbmcpe3ZhciBBPWUuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoYik7QT4tMSYmdm9pZCAwPT09ZS53aWR0aHNbQV0mJkE+PWUuZmlyc3RDaGFyJiZBPD1lLmxhc3RDaGFyJiYoZS53aWR0aHNbQV09dy53aWR0aCl9fXJldHVybiB1fX0se2tleToiZXh0cmFjdEZvbnRIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDtudWxsIT09KHQ9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09dClzd2l0Y2godD10aGlzLmdldFRva2VuKCkpe2Nhc2UiRm9udE1hdHJpeCI6dmFyIHI9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9cjticmVhaztjYXNlIkVuY29kaW5nIjp2YXIgYT10aGlzLmdldFRva2VuKCksaT12b2lkIDA7aWYoL15cZCskLy50ZXN0KGEpKXtpPVtdO3ZhciBvPTB8cGFyc2VJbnQoYSwxMCk7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgcz0wO3M8bztzKyspe2Zvcih0PXRoaXMuZ2V0VG9rZW4oKTsiZHVwIiE9PXQmJiJkZWYiIT09dDspaWYobnVsbD09PSh0PXRoaXMuZ2V0VG9rZW4oKSkpcmV0dXJuO2lmKCJkZWYiPT09dClicmVhazt2YXIgYz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7dmFyIHU9dGhpcy5nZXRUb2tlbigpO2lbY109dSx0aGlzLmdldFRva2VuKCl9fWVsc2UgaT0oMCxuLmdldEVuY29kaW5nKShhKTtlLmJ1aWx0SW5FbmNvZGluZz1pO2JyZWFrO2Nhc2UiRm9udEJCb3giOnZhciBsPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5hc2NlbnQ9TWF0aC5tYXgobFszXSxsWzFdKSxlLmRlc2NlbnQ9TWF0aC5taW4obFsxXSxsWzNdKSxlLmFzY2VudFNjYWxlZD0hMH19fV0pLGV9KCk7dC5UeXBlMVBhcnNlcj1GfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGF0dGVybj12b2lkIDAsdC5nZXRUaWxpbmdQYXR0ZXJuSVI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXQuZ2V0QXJyYXkoIk1hdHJpeCIpLGk9bi5VdGlsLm5vcm1hbGl6ZVJlY3QodC5nZXRBcnJheSgiQkJveCIpKSxvPXQuZ2V0KCJYU3RlcCIpLHM9dC5nZXQoIllTdGVwIiksYz10LmdldCgiUGFpbnRUeXBlIiksdT10LmdldCgiVGlsaW5nVHlwZSIpO2lmKGlbMl0taVswXT09MHx8aVszXS1pWzFdPT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyIuY29uY2F0KGksIl0uIikpO3JldHVyblsiVGlsaW5nUGF0dGVybiIscixlLGEsaSxvLHMsYyx1XX07dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTQzKSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49aChlKTtpZih0KXt2YXIgYT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmKHRoaXMscil9fWZ1bmN0aW9uIGYoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZChlKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1kKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWQoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3AodGhpcyxlKSwoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKX1yZXR1cm4gdihlLG51bGwsW3trZXk6InBhcnNlU2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzLGMpe3ZhciB1PWUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0/ZS5kaWN0OmUsbD11LmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKGwpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG5ldyB3KHUsdCxyLHMsYyk7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OnJldHVybiBuZXcgeChlLHQscixzLGMpO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK2wpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiBpLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnNoYWRpbmdQYXR0ZXJufSksKDAsbi53YXJuKShlKSxuZXcgT319fV0pLGV9KCk7dC5QYXR0ZXJuPXk7dmFyIG0sYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy4iKX1yZXR1cm4gdihlLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRJUmAgY2FsbGVkLiIpfX1dLFt7a2V5OiJTTUFMTF9OVU1CRVIiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJTTUFMTF9OVU1CRVIiLDFlLTYpfX1dKSxlfSgpLHc9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLGEsbyxjLHUpe3ZhciBsO3AodGhpcyxyKSwobD10LmNhbGwodGhpcykpLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKSxsLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpO3ZhciBoPWkuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6ZS5nZXRSYXcoIkNTIil8fGUuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjphLHJlc291cmNlczpvLHBkZkZ1bmN0aW9uRmFjdG9yeTpjLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KSxkPWUuZ2V0QXJyYXkoIkJCb3giKTtBcnJheS5pc0FycmF5KGQpJiY0PT09ZC5sZW5ndGg/bC5iYm94PW4uVXRpbC5ub3JtYWxpemVSZWN0KGQpOmwuYmJveD1udWxsO3ZhciBnPTAsdj0xO2lmKGUuaGFzKCJEb21haW4iKSl7dmFyIHk9ZS5nZXRBcnJheSgiRG9tYWluIik7Zz15WzBdLHY9eVsxXX12YXIgbT0hMSx3PSExO2lmKGUuaGFzKCJFeHRlbmQiKSl7dmFyIGs9ZS5nZXRBcnJheSgiRXh0ZW5kIik7bT1rWzBdLHc9a1sxXX1pZighKDMhPT1sLnNoYWRpbmdUeXBlfHxtJiZ3KSl7dmFyIFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShsLmNvb3Jkc0Fyciw2KSx4PVNbMF0sTz1TWzFdLEE9U1syXSxDPVNbM10sRj1TWzRdLFA9U1s1XSxUPU1hdGguaHlwb3QoeC1DLE8tRik7QTw9UCtUJiZQPD1BK1QmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKX1sLmV4dGVuZFN0YXJ0PW0sbC5leHRlbmRFbmQ9dzt2YXIgST1lLmdldFJhdygiRnVuY3Rpb24iKSxFPWMuY3JlYXRlRnJvbUFycmF5KEkpLGo9KHYtZykvMTAsTT1sLmNvbG9yU3RvcHM9W107aWYoZz49dnx8ajw9MClyZXR1cm4oMCxuLmluZm8pKCJCYWQgc2hhZGluZyBkb21haW4uIiksZihsKTtmb3IodmFyIF8sTD1uZXcgRmxvYXQzMkFycmF5KGgubnVtQ29tcHMpLFI9bmV3IEZsb2F0MzJBcnJheSgxKSxOPTA7Tjw9MTA7TisrKXtSWzBdPWcrTipqLEUoUiwwLEwsMCksXz1oLmdldFJnYihMLDApO3ZhciBEPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pO00ucHVzaChbTi8xMCxEXSl9dmFyIEI9InRyYW5zcGFyZW50IjtyZXR1cm4gZS5oYXMoIkJhY2tncm91bmQiKSYmKF89aC5nZXRSZ2IoZS5nZXQoIkJhY2tncm91bmQiKSwwKSxCPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pKSxtfHwoTS51bnNoaWZ0KFswLEJdKSxNWzFdWzBdKz1iLlNNQUxMX05VTUJFUiksd3x8KE0uYXQoLTEpWzBdLT1iLlNNQUxMX05VTUJFUixNLnB1c2goWzEsQl0pKSxsLmNvbG9yU3RvcHM9TSxsfXJldHVybiB2KHIsW3trZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGksbz10aGlzLmNvb3Jkc0FycixzPXRoaXMuc2hhZGluZ1R5cGU7cmV0dXJuIDI9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bMl0sb1szXV0sYT1udWxsLGk9bnVsbCxlPSJheGlhbCIpOjM9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bM10sb1s0XV0sYT1vWzJdLGk9b1s1XSxlPSJyYWRpYWwiKTooMCxuLnVucmVhY2hhYmxlKSgiZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICIuY29uY2F0KHMpKSxbIlJhZGlhbEF4aWFsIixlLHRoaXMuYmJveCx0aGlzLmNvbG9yU3RvcHMsdCxyLGEsaV19fV0pLHJ9KGIpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5jb250ZXh0PXIsdGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wO3ZhciBuPXIubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KG4pO3ZhciBhPXIuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9ci5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkoYSk6dGhpcy50bXBDb21wc0J1Zn1yZXR1cm4gdihlLFt7a2V5OiJoYXNEYXRhIixnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLnN0cmVhbS5lbmQpcmV0dXJuIHRoaXMuc3RyZWFtLnBvczx0aGlzLnN0cmVhbS5lbmQ7aWYodGhpcy5idWZmZXJMZW5ndGg+MClyZXR1cm4hMDt2YXIgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIShlPDB8fCh0aGlzLmJ1ZmZlcj1lLHRoaXMuYnVmZmVyTGVuZ3RoPTgsMCkpfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnVmZmVyLHI9dGhpcy5idWZmZXJMZW5ndGg7aWYoMzI9PT1lKXtpZigwPT09cilyZXR1cm4odGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkpPj4+MDt0PXQ8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTt2YXIgbj10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIHRoaXMuYnVmZmVyPW4mKDE8PHIpLTEsKHQ8PDgtcnwoMjU1Jm4pPj5yKT4+PjB9aWYoOD09PWUmJjA9PT1yKXJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Zm9yKDtyPGU7KXQ9dDw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkscis9ODtyZXR1cm4gci09ZSx0aGlzLmJ1ZmZlckxlbmd0aD1yLHRoaXMuYnVmZmVyPXQmKDE8PHIpLTEsdD4+cn19LHtrZXk6ImFsaWduIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYnVmZmVyPTAsdGhpcy5idWZmZXJMZW5ndGg9MH19LHtrZXk6InJlYWRGbGFnIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9fSx7a2V5OiJyZWFkQ29vcmRpbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGUsdD10aGlzLnJlYWRCaXRzKGUpLHI9dGhpcy5yZWFkQml0cyhlKSxuPXRoaXMuY29udGV4dC5kZWNvZGUsYT1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwO3JldHVyblt0KmEqKG5bMV0tblswXSkrblswXSxyKmEqKG5bM10tblsyXSkrblsyXV19fSx7a2V5OiJyZWFkQ29tcG9uZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jb250ZXh0Lm51bUNvbXBzLHQ9dGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQscj10PDMyPzEvKCgxPDx0KS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwLG49dGhpcy5jb250ZXh0LmRlY29kZSxhPXRoaXMudG1wQ29tcHNCdWYsaT0wLG89NDtpPGU7aSsrLG8rPTIpe3ZhciBzPXRoaXMucmVhZEJpdHModCk7YVtpXT1zKnIqKG5bbysxXS1uW29dKStuW29dfXZhciBjPXRoaXMudG1wQ3NDb21wc0J1ZjtyZXR1cm4gdGhpcy5jb250ZXh0LmNvbG9yRm4mJnRoaXMuY29udGV4dC5jb2xvckZuKGEsMCxjLDApLHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihjLDApfX1dKSxlfSgpLFM9KG09W10sZnVuY3Rpb24oZSl7cmV0dXJuIG1bZV18fChtW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjw9ZTtyKyspe3ZhciBuPXIvZSxhPTEtbjt0LnB1c2gobmV3IEZsb2F0MzJBcnJheShbYSphKmEsMypuKmEqYSwzKm4qbiphLG4qbipuXSkpfXJldHVybiB0fShlKSksbVtlXX0pLHg9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLG8scyxjLHUpe3ZhciBsO2lmKHAodGhpcyxyKSxsPXQuY2FsbCh0aGlzKSwhKGUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtIik7dmFyIGY9ZS5kaWN0O2wuc2hhZGluZ1R5cGU9Zi5nZXQoIlNoYWRpbmdUeXBlIik7dmFyIGg9Zi5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9sLmJib3g9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoaCk6bC5iYm94PW51bGw7dmFyIGQ9aS5Db2xvclNwYWNlLnBhcnNlKHtjczpmLmdldFJhdygiQ1MiKXx8Zi5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOm8scmVzb3VyY2VzOnMscGRmRnVuY3Rpb25GYWN0b3J5OmMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dX0pO2wuYmFja2dyb3VuZD1mLmhhcygiQmFja2dyb3VuZCIpP2QuZ2V0UmdiKGYuZ2V0KCJCYWNrZ3JvdW5kIiksMCk6bnVsbDt2YXIgZz1mLmdldFJhdygiRnVuY3Rpb24iKSx2PWc/Yy5jcmVhdGVGcm9tQXJyYXkoZyk6bnVsbDtsLmNvb3Jkcz1bXSxsLmNvbG9ycz1bXSxsLmZpZ3VyZXM9W107dmFyIHk9e2JpdHNQZXJDb29yZGluYXRlOmYuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6Zi5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpmLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6Zi5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjp2LGNvbG9yU3BhY2U6ZCxudW1Db21wczp2PzE6ZC5udW1Db21wc30sbT1uZXcgayhlLHkpLGI9ITE7c3dpdGNoKGwuc2hhZGluZ1R5cGUpe2Nhc2UgNDpsLl9kZWNvZGVUeXBlNFNoYWRpbmcobSk7YnJlYWs7Y2FzZSA1OnZhciB3PTB8Zi5nZXQoIlZlcnRpY2VzUGVyUm93Iik7aWYodzwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7bC5fZGVjb2RlVHlwZTVTaGFkaW5nKG0sdyk7YnJlYWs7Y2FzZSA2OmwuX2RlY29kZVR5cGU2U2hhZGluZyhtKSxiPSEwO2JyZWFrO2Nhc2UgNzpsLl9kZWNvZGVUeXBlN1NoYWRpbmcobSksYj0hMDticmVhaztkZWZhdWx0OigwLG4udW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYoYil7bC5fdXBkYXRlQm91bmRzKCk7Zm9yKHZhciBTPTAseD1sLmZpZ3VyZXMubGVuZ3RoO1M8eDtTKyspbC5fYnVpbGRGaWd1cmVGcm9tUGF0Y2goUyl9cmV0dXJuIGwuX3VwZGF0ZUJvdW5kcygpLGwuX3BhY2tEYXRhKCksbH1yZXR1cm4gdihyLFt7a2V5OiJfZGVjb2RlVHlwZTRTaGFkaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxhPVtdLGk9W10sbz0wO2UuaGFzRGF0YTspe3ZhciBzPWUucmVhZEZsYWcoKSxjPWUucmVhZENvb3JkaW5hdGUoKSx1PWUucmVhZENvbXBvbmVudHMoKTtpZigwPT09byl7aWYoISgwPD1zJiZzPD0yKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNCBmbGFnIik7c3dpdGNoKHMpe2Nhc2UgMDpvPTM7YnJlYWs7Y2FzZSAxOmkucHVzaChpLmF0KC0yKSxpLmF0KC0xKSksbz0xO2JyZWFrO2Nhc2UgMjppLnB1c2goaS5hdCgtMyksaS5hdCgtMSkpLG89MX1hLnB1c2gocyl9aS5wdXNoKHQubGVuZ3RoKSx0LnB1c2goYyksci5wdXNoKHUpLG8tLSxlLmFsaWduKCl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InRyaWFuZ2xlcyIsY29vcmRzOm5ldyBJbnQzMkFycmF5KGkpLGNvbG9yczpuZXcgSW50MzJBcnJheShpKX0pfX0se2tleToiX2RlY29kZVR5cGU1U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5jb29yZHMsbj10aGlzLmNvbG9ycyxhPVtdO2UuaGFzRGF0YTspe3ZhciBpPWUucmVhZENvb3JkaW5hdGUoKSxvPWUucmVhZENvbXBvbmVudHMoKTthLnB1c2goci5sZW5ndGgpLHIucHVzaChpKSxuLnB1c2gobyl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6ImxhdHRpY2UiLGNvb3JkczpuZXcgSW50MzJBcnJheShhKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoYSksdmVydGljZXNQZXJSb3c6dH0pfX0se2tleToiX2RlY29kZVR5cGU2U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzg6MTI7Yzx1O2MrKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtmb3IodmFyIGw9ci5sZW5ndGgsZj0wLGg9MCE9PW8/Mjo0O2Y8aDtmKyspci5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7dmFyIGQ9dm9pZCAwLHA9dm9pZCAwLGc9dm9pZCAwLHY9dm9pZCAwO3N3aXRjaChvKXtjYXNlIDA6YVsxMl09cyszLGFbMTNdPXMrNCxhWzE0XT1zKzUsYVsxNV09cys2LGFbOF09cysyLGFbMTFdPXMrNyxhWzRdPXMrMSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVsxMV09cyszLGFbNF09cCxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbMTFdPXMrMyxhWzRdPXAsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVsxMV09cyszLGFbNF09YVsyXSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9YVs1XT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMF1dWzBdLXRbYVsxNV1dWzBdKzYqKHRbYVs0XV1bMF0rdFthWzFdXVswXSktMioodFthWzEyXV1bMF0rdFthWzNdXVswXSkrMyoodFthWzEzXV1bMF0rdFthWzddXVswXSkpLzksKC00KnRbYVswXV1bMV0tdFthWzE1XV1bMV0rNioodFthWzRdXVsxXSt0W2FbMV1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMTNdXVsxXSt0W2FbN11dWzFdKSkvOV0pLGFbNl09dC5sZW5ndGgsdC5wdXNoKFsoLTQqdFthWzNdXVswXS10W2FbMTJdXVswXSs2Kih0W2FbMl1dWzBdK3RbYVs3XV1bMF0pLTIqKHRbYVswXV1bMF0rdFthWzE1XV1bMF0pKzMqKHRbYVs0XV1bMF0rdFthWzE0XV1bMF0pKS85LCgtNCp0W2FbM11dWzFdLXRbYVsxMl1dWzFdKzYqKHRbYVsyXV1bMV0rdFthWzddXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzRdXVsxXSt0W2FbMTRdXVsxXSkpLzldKSxhWzldPXQubGVuZ3RoLHQucHVzaChbKC00KnRbYVsxMl1dWzBdLXRbYVszXV1bMF0rNioodFthWzhdXVswXSt0W2FbMTNdXVswXSktMioodFthWzBdXVswXSt0W2FbMTVdXVswXSkrMyoodFthWzExXV1bMF0rdFthWzFdXVswXSkpLzksKC00KnRbYVsxMl1dWzFdLXRbYVszXV1bMV0rNioodFthWzhdXVsxXSt0W2FbMTNdXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzExXV1bMV0rdFthWzFdXVsxXSkpLzldKSxhWzEwXT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMTVdXVswXS10W2FbMF1dWzBdKzYqKHRbYVsxMV1dWzBdK3RbYVsxNF1dWzBdKS0yKih0W2FbMTJdXVswXSt0W2FbM11dWzBdKSszKih0W2FbMl1dWzBdK3RbYVs4XV1bMF0pKS85LCgtNCp0W2FbMTVdXVsxXS10W2FbMF1dWzFdKzYqKHRbYVsxMV1dWzFdK3RbYVsxNF1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMl1dWzFdK3RbYVs4XV1bMV0pKS85XSksdGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2RlY29kZVR5cGU3U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzEyOjE2O2M8dTtjKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Zm9yKHZhciBsPXIubGVuZ3RoLGY9MCxoPTAhPT1vPzI6NDtmPGg7ZisrKXIucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO3ZhciBkPXZvaWQgMCxwPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2gobyl7Y2FzZSAwOmFbMTJdPXMrMyxhWzEzXT1zKzQsYVsxNF09cys1LGFbMTVdPXMrNixhWzhdPXMrMixhWzldPXMrMTMsYVsxMF09cysxNCxhWzExXT1zKzcsYVs0XT1zKzEsYVs1XT1zKzEyLGFbNl09cysxNSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1wLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbOV09cys5LGFbMTBdPXMrMTAsYVsxMV09cyszLGFbNF09cCxhWzVdPXMrOCxhWzZdPXMrMTEsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1hWzJdLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2J1aWxkRmlndXJlRnJvbVBhdGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpZ3VyZXNbZV07KDAsbi5hc3NlcnQpKCJwYXRjaCI9PT10LnR5cGUsIlVuZXhwZWN0ZWQgcGF0Y2ggbWVzaCBmaWd1cmUiKTt2YXIgYT10aGlzLmNvb3JkcyxpPXRoaXMuY29sb3JzLG89dC5jb29yZHMscz10LmNvbG9ycyxjPU1hdGgubWluKGFbb1swXV1bMF0sYVtvWzNdXVswXSxhW29bMTJdXVswXSxhW29bMTVdXVswXSksdT1NYXRoLm1pbihhW29bMF1dWzFdLGFbb1szXV1bMV0sYVtvWzEyXV1bMV0sYVtvWzE1XV1bMV0pLGw9TWF0aC5tYXgoYVtvWzBdXVswXSxhW29bM11dWzBdLGFbb1sxMl1dWzBdLGFbb1sxNV1dWzBdKSxmPU1hdGgubWF4KGFbb1swXV1bMV0sYVtvWzNdXVsxXSxhW29bMTJdXVsxXSxhW29bMTVdXVsxXSksaD1NYXRoLmNlaWwoKGwtYykqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1syXS10aGlzLmJvdW5kc1swXSkpO2g9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGgpKTt2YXIgZD1NYXRoLmNlaWwoKGYtdSkqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1szXS10aGlzLmJvdW5kc1sxXSkpO2Q9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGQpKTtmb3IodmFyIHA9aCsxLGc9bmV3IEludDMyQXJyYXkoKGQrMSkqcCksdj1uZXcgSW50MzJBcnJheSgoZCsxKSpwKSx5PTAsbT1uZXcgVWludDhBcnJheSgzKSxiPW5ldyBVaW50OEFycmF5KDMpLHc9aVtzWzBdXSxrPWlbc1sxXV0seD1pW3NbMl1dLE89aVtzWzNdXSxBPVMoZCksQz1TKGgpLEY9MDtGPD1kO0YrKyl7bVswXT0od1swXSooZC1GKSt4WzBdKkYpL2R8MCxtWzFdPSh3WzFdKihkLUYpK3hbMV0qRikvZHwwLG1bMl09KHdbMl0qKGQtRikreFsyXSpGKS9kfDAsYlswXT0oa1swXSooZC1GKStPWzBdKkYpL2R8MCxiWzFdPShrWzFdKihkLUYpK09bMV0qRikvZHwwLGJbMl09KGtbMl0qKGQtRikrT1syXSpGKS9kfDA7Zm9yKHZhciBQPTA7UDw9aDtQKysseSsrKWlmKDAhPT1GJiZGIT09ZHx8MCE9PVAmJlAhPT1oKXtmb3IodmFyIFQ9MCxJPTAsRT0wLGo9MDtqPD0zO2orKylmb3IodmFyIE09MDtNPD0zO00rKyxFKyspe3ZhciBfPUFbRl1bal0qQ1tQXVtNXTtUKz1hW29bRV1dWzBdKl8sSSs9YVtvW0VdXVsxXSpffWdbeV09YS5sZW5ndGgsYS5wdXNoKFtULEldKSx2W3ldPWkubGVuZ3RoO3ZhciBMPW5ldyBVaW50OEFycmF5KDMpO0xbMF09KG1bMF0qKGgtUCkrYlswXSpQKS9ofDAsTFsxXT0obVsxXSooaC1QKStiWzFdKlApL2h8MCxMWzJdPShtWzJdKihoLVApK2JbMl0qUCkvaHwwLGkucHVzaChMKX19Z1swXT1vWzBdLHZbMF09c1swXSxnW2hdPW9bM10sdltoXT1zWzFdLGdbcCpkXT1vWzEyXSx2W3AqZF09c1syXSxnW3AqZCtoXT1vWzE1XSx2W3AqZCtoXT1zWzNdLHRoaXMuZmlndXJlc1tlXT17dHlwZToibGF0dGljZSIsY29vcmRzOmcsY29sb3JzOnYsdmVydGljZXNQZXJSb3c6cH19fSx7a2V5OiJfdXBkYXRlQm91bmRzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvb3Jkc1swXVswXSx0PXRoaXMuY29vcmRzWzBdWzFdLHI9ZSxuPXQsYT0xLGk9dGhpcy5jb29yZHMubGVuZ3RoO2E8aTthKyspe3ZhciBvPXRoaXMuY29vcmRzW2FdWzBdLHM9dGhpcy5jb29yZHNbYV1bMV07ZT1lPm8/bzplLHQ9dD5zP3M6dCxyPXI8bz9vOnIsbj1uPHM/czpufXRoaXMuYm91bmRzPVtlLHQscixuXX19LHtrZXk6Il9wYWNrRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixhPXRoaXMuY29vcmRzLGk9bmV3IEZsb2F0MzJBcnJheSgyKmEubGVuZ3RoKTtmb3IoZT0wLHI9MCx0PWEubGVuZ3RoO2U8dDtlKyspe3ZhciBvPWFbZV07aVtyKytdPW9bMF0saVtyKytdPW9bMV19dGhpcy5jb29yZHM9aTt2YXIgcz10aGlzLmNvbG9ycyxjPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAscj0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7dmFyIHU9c1tlXTtjW3IrK109dVswXSxjW3IrK109dVsxXSxjW3IrK109dVsyXX10aGlzLmNvbG9ycz1jO3ZhciBsPXRoaXMuZmlndXJlcztmb3IoZT0wLHQ9bC5sZW5ndGg7ZTx0O2UrKyl7dmFyIGY9bFtlXSxoPWYuY29vcmRzLGQ9Zi5jb2xvcnM7Zm9yKHI9MCxuPWgubGVuZ3RoO3I8bjtyKyspaFtyXSo9MixkW3JdKj0zfX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblsiTWVzaCIsdGhpcy5zaGFkaW5nVHlwZSx0aGlzLmNvb3Jkcyx0aGlzLmNvbG9ycyx0aGlzLmZpZ3VyZXMsdGhpcy5ib3VuZHMsdGhpcy5iYm94LHRoaXMuYmFja2dyb3VuZF19fV0sW3trZXk6Ik1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLDMpfX0se2tleToiTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCIsMjApfX0se2tleToiVFJJQU5HTEVfREVOU0lUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIlRSSUFOR0xFX0RFTlNJVFkiLDIwKX19XSkscn0oYiksTz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bIkR1bW15Il19fV0pLHJ9KGIpfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0WGZhRm9udERpY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZyhlKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPXQuYmFzZVdpZHRocyxhPXQuYmFzZU1hcHBpbmcsaT10LmZhY3RvcnM7cj1pP24ubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBlKmlbdF19KSk6bjt2YXIgbyxzLGM9LTIsdT1bXSxsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1oKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oYS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2UsdF19KSkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLDEpWzBdLWYodCwxKVswXX0pKSk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgZD1mKHMudmFsdWUsMikscD1kWzBdLHY9ZFsxXTstMSE9PXAmJihwPT09YysxPyhvLnB1c2goclt2XSksYys9MSk6KGM9cCxvPVtyW3ZdXSx1LnB1c2gocCxvKSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdX0oZSkscj1uZXcgYS5EaWN0KG51bGwpO3Iuc2V0KCJCYXNlRm9udCIsYS5OYW1lLmdldChlKSksci5zZXQoIlR5cGUiLGEuTmFtZS5nZXQoIkZvbnQiKSksci5zZXQoIlN1YnR5cGUiLGEuTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKSxyLnNldCgiRW5jb2RpbmciLGEuTmFtZS5nZXQoIklkZW50aXR5LUgiKSksci5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxyLnNldCgiVyIsdCksci5zZXQoIkZpcnN0Q2hhciIsdFswXSksci5zZXQoIkxhc3RDaGFyIix0LmF0KC0yKSt0LmF0KC0xKS5sZW5ndGgtMSk7dmFyIG49bmV3IGEuRGljdChudWxsKTtyLnNldCgiRm9udERlc2NyaXB0b3IiLG4pO3ZhciBpPW5ldyBhLkRpY3QobnVsbCk7cmV0dXJuIGkuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksaS5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxpLnNldCgiU3VwcGxlbWVudCIsMCksci5zZXQoIkNJRFN5c3RlbUluZm8iLGkpLHJ9LHQuZ2V0WGZhRm9udE5hbWU9Zzt2YXIgbj1yKDE4MSksYT1yKDEzNCksaT1yKDE4Miksbz1yKDE4Mykscz1yKDE4NCksYz1yKDE4NSksdT1yKDEzNSksbD1yKDE2Nyk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxoKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBwPSgwLHUuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiTXlyaWFkUHJvLVJlZ3VsYXIiXT1lWyJQZGZKUy1GYWxsYmFjay1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6cy5NeXJpYWRQcm9SZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvUmVndWxhck1ldHJpY3N9LGVbIk15cmlhZFByby1Cb2xkIl09ZVsiUGRmSlMtRmFsbGJhY2stQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnMuTXlyaWFkUHJvQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczpzLk15cmlhZFByb0JvbGRNZXRyaWNzfSxlWyJNeXJpYWRQcm8tSXQiXT1lWyJNeXJpYWRQcm8tSXRhbGljIl09ZVsiUGRmSlMtRmFsbGJhY2stSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpzLk15cmlhZFByb0l0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6cy5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzfSxlWyJNeXJpYWRQcm8tQm9sZEl0Il09ZVsiTXlyaWFkUHJvLUJvbGRJdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6cy5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3N9LGUuQXJpYWxNVD1lLkFyaWFsPWVbIkFyaWFsLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmd9LGVbIkFyaWFsLUJvbGRNVCJdPWVbIkFyaWFsLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmd9LGVbIkFyaWFsLUl0YWxpY01UIl09ZVsiQXJpYWwtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nfSxlWyJBcmlhbC1Cb2xkSXRhbGljTVQiXT1lWyJBcmlhbC1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGJhc2VXaWR0aHM6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nfSxlWyJDYWxpYnJpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpuLkNhbGlicmlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpuLkNhbGlicmlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRNZXRyaWNzfSxlWyJDYWxpYnJpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6bi5DYWxpYnJpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpuLkNhbGlicmlJdGFsaWNNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpuLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpjLlNlZ29ldWlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpjLlNlZ29ldWlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRNZXRyaWNzfSxlWyJTZWdvZXVpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6Yy5TZWdvZXVpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpjLlNlZ29ldWlJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtUmVndWxhciJdPWUuSGVsdmV0aWNhPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmkuSGVsdmV0aWNhUmVndWxhckZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczppLkhlbHZldGljYUl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6aS5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzfX0pKTtmdW5jdGlvbiBnKGUpe3ZhciB0PSgwLGwubm9ybWFsaXplRm9udE5hbWUpKGUpO3JldHVybiBwKClbdF19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNhbGlicmlSZWd1bGFyTWV0cmljcz10LkNhbGlicmlSZWd1bGFyRmFjdG9ycz10LkNhbGlicmlJdGFsaWNNZXRyaWNzPXQuQ2FsaWJyaUl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZE1ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZEZhY3RvcnM9dm9pZCAwLHQuQ2FsaWJyaUJvbGRGYWN0b3JzPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NDY1NywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzMyOTMsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MTIxLC44Njk0MywuNzk3OTUsLjg4MTk4LC43Nzk1OCwuNzA4NjQsLjgxMDU1LC45MDM5OSwuODg2NTMsLjk2MDE3LC44MjU3NywuNzc4OTIsLjc4MjU3LC45NzUwNywxLjU0NjU3LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuODg3NjIsLjg3ODUsLjc1MjQxLC44Nzg1LC45MDUxOCwuOTUwMTUsLjc3NjE4LC44Nzg1LC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTE0ODgsLjg3ODUsLjg4MDEsLjg3ODUsLjg3ODUsLjkxMzQzLC43MTczLDEuMDQxMDYsLjg3ODUsLjg1MDc1LC45NTc5NCwuODI2MTYsLjg1MTYyLC43OTQ5MiwuODgzMzEsMS42OTgwOCwuODgzMzEsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS43ODAxLC44OTU1MiwxLjI0NDg3LDEuMTMyNTQsMS4xMjQwMSwuOTY4MzksLjg1Mjg0LC42ODc4NywuNzA2NDUsLjg1NTkyLC45MDc0NywxLjAxNDY2LDEuMDA4OCwuOTAzMjMsMSwxLjA3NDYzLDEsLjkxMDU2LC43NTgwNiwxLjE5MTE4LC45NjgzOSwuNzg4NjQsLjgyODQ1LC44NDEzMywuNzU4NTksLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjc3NTM5LC43MzI5MywuNzMxMzMsLjczMTMzLC43MzEzMywuNzMxMzMsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjk1OTU4LC44ODUwNiwuOTEyMSwuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg2OTQzLC44NTI4NCwuODc1MDgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44NzE1LC43NTI0MSwuOTA1MTgsLjkwNTE4LC45MDUxOCwuOTA1MTgsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44Nzg1LC44ODAxLC44ODAxLC44ODAxLC44ODAxLC44ODAxLC45MDc0NywuODkwNDksLjg3ODUsLjg3ODUsLjg3ODUsLjg3ODUsLjg1MTYyLC44Nzg1LC44NTE2MiwuODM5MDgsLjg4NzYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC44NzI4OSwuODMwMTYsLjg4NTA2LC45MzEyNSwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjgxOTIxLC43NzYxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsMSwxLC44NzM1NiwuODc4NSwuOTEwNzUsLjg5NjA4LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzYyMjksLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc5NDY4LC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTEyMSwuODc4NSwxLDEsLjkxMjEsLjg3ODUsLjg3ODAyLC44ODY1NiwuODc4NSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44Njk0MywuODgwMSwuODc0MDIsLjg5MjkxLC43Nzk1OCwuOTEzNDMsMSwxLC43Nzk1OCwuOTEzNDMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45NjAxNywuOTU3OTQsLjc3ODkyLC44NTE2MiwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuODg3NjIsLjc3NTM5LC44NzE1LC44NzUwOCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwNjc0LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjA2MzAzLC44MzkwOCwuODAzNTIsLjU3MTg0LC42OTY1LC41NjI4OSwuODIwMDEsLjU2MDI5LC44MTIzNSwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjgxNTYsLjgwMzY3LC43MzEzMywuNzgyNTcsLjg3MzU2LC44Njk0MywuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MTIxLC43NjQ4LC44Njk0MywuODczNTYsLjc5Nzk1LC43ODI3NSwuODEwNTUsLjc3ODkyLC45NzYyLC44MjU3NywuOTk4MTksLjg0ODk2LC45NTk1OCwuNzc4OTIsLjk2MTA4LDEuMDE0MDcsLjg5MDQ5LDEuMDI5ODgsLjk0MjExLC45NjEwOCwuODkzNiwuODQwMjEsLjg3ODQyLC45NjM5OSwuNzkxMDksLjg5MDQ5LDEuMDA4MTMsMS4wMjk4OCwuODYwNzcsLjg3NDQ1LC45MjA5OSwuODQ3MjMsLjg2NTEzLC44ODAxLC43NTYzOCwuODU3MTQsLjc4MjE2LC43OTU4NiwuODc5NjUsLjk0MjExLC45Nzc0NywuNzgyODcsLjk3OTI2LC44NDk3MSwxLjAyOTg4LC45NDIxMSwuODgwMSwuOTQyMTEsLjg0OTcxLC43MzEzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTAyNjQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTE4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDU0OCwxLDEsMSwxLDEsMSwuOTYwMTcsLjk1Nzk0LC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMzYzLC45Mjc5NCwuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODcwMTIsLjg3MDEyLC44NzAxMiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjcxMTQzLDEuMDYxNTIsMSwxLDEuMDMzNzIsMS4wMzM3MiwuOTcxNzEsMS40OTU2LDIuMjgwNywuOTM4MzUsLjgzNDA2LC45MTEzMywuODQxMDcsLjkxMTMzLDEsMSwxLC43MjAyMSwxLDEuMjMxMDgsLjgzNDg5LC44ODUyNSwuODg1MjUsLjgxNDk5LC45MDUyNywxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMzEwMDYsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fSx0LkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLC45NzgwMSwuOTI0ODIsLjg5NTUyLC45MTEzMywuODE5ODgsLjk3NTY2LC45ODE1MiwuOTM1NDgsLjkzNTQ4LDEuMjc5OCwuODUyODQsLjkyNzk0LDEsLjk2MTM0LDEuNTYyMzksLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC44Mjg0NSwuODI4NDUsLjg1Mjg0LC44NTI4NCwuODUyODQsLjc1ODU5LC45MjEzOCwuODM5MDgsLjc3NjIsLjcxODA1LC44NzI4OSwuNzMxMzMsLjc1MTQsLjgxOTIxLC44NzM1NiwuOTU5NTgsLjU5NTI2LC43NTcyNywuNjkyMjUsMS4wNDkyNCwuOTA4NzIsLjg1OTM4LC43OTc5NSwuODcwNjgsLjc3OTU4LC42OTc2NiwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwNjgsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTI5LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuOTQ5MDgsLjg2NDExLC43NDAxMiwuODY0MTEsLjg4MzIzLC45NTAxNSwuODY0MTEsLjg2MzMxLC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTAzOSwuODYzMzEsLjg2MzMxLC44NjQxMSwuODY0MTEsLjkwNDY0LC43MDg1MiwxLjA0MTA2LC44NjMzMSwuODQzNzIsLjk1Nzk0LC44MjYxNiwuODQ1NDgsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjE5MTI5LC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjcxODA1LC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MDg3MiwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTI4NCwuODcwNjgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC44NTg4NywuNzQwMTIsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4MzIzLC44ODQwMSwuODg0MDEsLjg4NDAxLC44ODQwMSwuODc4NSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuOTA3NDcsLjg5MDQ5LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODQ1NDgsLjg2NDExLC44NDU0OCwuODM5MDgsLjk0OTA4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC44NzI4OSwuNzk1MzgsLjg4NTA2LC45MjcyNiwuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjgxOTIxLC44NjQxMSwuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsMSwxLC44NzM1NiwuODYzMzEsLjkxMDc1LC44Nzc3LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzY0NjcsLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc3MzEyLC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTA4NzIsLjg2MzMxLDEsMSwuOTA4NzIsLjg2MzMxLC44NjkwNiwuODgxMTYsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NzQwMiwuODY1NDksLjc3OTU4LC45MDQ2NCwxLDEsLjc3OTU4LC45MDQ2NCwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuOTQ5MDgsLjc3NTM5LC44NTg4NywuODcwNjgsLjg5MDQ5LDEsMSwuODEwNTUsMS4wNDEwNiwxLjIwNTI4LDEuMjA1MjgsMSwxLjE1NTQzLC43MDA4OCwuOTgzODcsLjk0NzIxLDEuMzM0MzEsMS40NTg5NCwuOTUxNjEsMS40ODM4NywuODM5MDgsLjgwMzUyLC41NzExOCwuNjk2NSwuNTYzNDcsLjc5MTc5LC41NTg1MywuODAzNDYsMS4wMjk4OCwuODM5MDgsLjc3NjIsLjY3MTc0LC44NjAzNiwuNzMxMzMsLjc4MjU3LC44NzM1NiwuODY0NDEsLjk1OTU4LC43NTcyNywuODkwMTksMS4wNDkyNCwuOTA4NzIsLjc0ODg5LC44NTkzOCwuODc4OTEsLjc5Nzk1LC43OTU3LC44MTA1NSwuNzc4OTIsLjk3NDQ3LC44MjU3NywuOTc0NjYsLjg3MTc5LC45NTk1OCwuNzc4OTIsLjk0MjUyLC45NTYxMiwuODc1MywxLjAyOTg4LC45MjczMywuOTQyNTIsLjg3NDExLC44NDAyMSwuODcyOCwuOTU2MTIsLjc0MDgxLC44NzUzLDEuMDIxODksMS4wMjk4OCwuODQ4MTQsLjg3NDQ1LC45MTgyMiwuODQ3MjMsLjg1NjY4LC44NjMzMSwuODEzNDQsLjg3NTgxLC43NjQyMiwuODIwNDYsLjk2MDU3LC45MjczMywuOTkzNzUsLjc4MDIyLC45NTQ1MiwuODYwMTUsMS4wMjk4OCwuOTI3MzMsLjg2MzMxLC45MjczMywuODYwMTUsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDYzMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODgzMjMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1MTc0LDEsMSwxLDEsMSwxLC45NjA2OCwuOTU3OTQsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC43Nzg5MiwuODQ1NDgsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjg5ODA3LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzEwOTQsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45Mjk3MiwuODM0MDYsLjkxMTMzLC44MzMyNiwuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNjE2LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTA3LDEuNTM3MTEsLjk0NDM0LDEuMDg2OTYsMSwuOTUwMTgsLjc3MTkyLC44NTI4NCwuOTA3NDcsMS4xNzUzNCwuNjk4MjUsLjk3MTYsMS4zNzA3NywuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDgwMDQsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA3MjcsLjkwNzI3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkNhbGlicmlCb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzk1NDMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjcyMzQ2LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTI0OSwuODQxMTgsLjc3NDUyLC44NTM3NCwuNzUxODYsLjY3Nzg5LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDMwOSwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zODMxMywxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC45MjQ1LC45MjQ1LC44MzIwMywuOTI0NSwuODU4NjUsMS4wOTg0MiwuOTI0NSwuOTI0NSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk0OTU5LC45MjQ1LC45MjI3NCwuOTI0NSwuOTI0NSwxLjAyOTMzLC43NzgzMiwxLjIwNTYyLC45MjQ1LC44OTE2LC45ODk4NiwuODY2MjEsLjg5NDUzLC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMTYzNTksLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzIzNDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5MjQ5LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODQxMTgsLjg1Mjg0LC44NDU1NywuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODQ4NDMsLjgzMjAzLC44NTg2NSwuODU4NjUsLjg1ODY1LC44NTg2NSwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45MjQ1LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkwNzQ3LC44NjY1MSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODk0NTMsLjkyNDUsLjg5NDUzLC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjg1MTkzLC44ODc1LC44NjQ3NywuOTkwMzQsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsLjgxMTA1LC45MjQ1LDEsMSwuODYyNzUsLjkyNDUsLjkwODcyLC45MzU5MSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzg5NiwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45Mzc1LC45ODE1NiwuOTM0MDcsLjc3MjYxLDEuMTE0MjksLjg5MjQ5LC45MjQ1LDEsMSwuODkyNDksLjkyNDUsLjkyNTM0LC44NjY5OCwuOTI0NSwuODQxMTgsLjkyMjc0LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODY2NywuODYyOTEsLjc1MTg2LDEuMDI5MzMsMSwxLC43NTE4NiwxLjAyOTMzLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsMSwxLC43OTc3NiwuOTc2NTUsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjkyNDUsLjc2MzE4LC44NDg0MywuODQ1NTcsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3MDA5LC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44Njc1LC45MDg2MSwuNjE5MiwuNzM2MywuNjQ4MjQsLjgyNDExLC41NjMyMSwuODU2OTYsMS4yMzUxNiwuODY3NSwuODE1NTIsLjcyODYsLjg0MTM0LC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NDM2OSwuOTA2ODUsLjc3ODkyLC44NTg3MSwxLjAyNjM4LC44OTI0OSwuNzU4MjgsLjg0MTE4LC44NTk4NCwuNzc0NTIsLjc2NDY2LC43OTc3NiwuNzMwNiwuOTA3ODIsLjc3ODE4LC45MDMsLjg3MjkxLC45MDY4NSwuNzMwNiwuOTkwNTgsMS4wMzY2NywuOTQ2MzUsMS4yMzUxNiwuOTg0OSwuOTkwNTgsLjkyMzkzLC44OTE2LC45NDIsMS4wMzY2NywuNzUwMjYsLjk0NjM1LDEuMDI5NywxLjIzNTE2LC45MDkxOCwuOTQwNDgsLjk4MjE3LC44OTc0NiwuODQxNTMsLjkyMjc0LC44MjUwNywuODg4MzIsLjg0NDM4LC44ODE3OCwxLjAzNTI1LC45ODQ5LDEuMDAyMjUsLjc4MDg2LC45NzI0OCwuODk0MDQsMS4yMzUxNiwuOTg0OSwuOTIyNzQsLjk4NDksLjg5NDA0LC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2OTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1ODY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDkzMywxLDEsMSwxLDEsMSwuOTQzMDksLjk4OTg2LC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY4OTk0LDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTc4NTgsLjgyNjE2LC45MTEzMywuODM0MzcsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1NzIsMS44MTA1NSwuOTA3NDksMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTI4NCwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5DYWxpYnJpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpUmVndWxhckZhY3RvcnM9WzEuMzg3NywxLDEsMSwxLjE3MjIzLDEuMTI5MywuODk1NTIsLjkxMTMzLC44MDM5NSwxLjAyMjY5LDEuMTU2MDEsLjkxMDU2LC45MTA1NiwxLjI3OTgsLjg1Mjg0LC44OTgwNywxLC45MDg2MSwxLjM5MDE2LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTYzMDksLjk2MzA5LC44NTI4NCwuODUyODQsLjg1Mjg0LC44MzMxOSwuODgwNzEsLjg2NzUsLjgxNTUyLC43MzgzNCwuODUxOTMsLjczMjA2LC43NTIyLC44MTEwNSwuODYyNzUsLjkwNjg1LC42Mzc3LC43Nzg5MiwuNzU1OTMsMS4wMjYzOCwuODkzODUsLjg1MTIyLC43NzQ1MiwuODY1MDMsLjc1MTg2LC42ODg4NywuNzk3NzYsLjg4ODQ0LC44NTA2NiwuOTQyNTgsLjc3ODE4LC43MzA2LC43NjY1OSwxLjEwMzY5LDEuMzkwMTYsMS4xMDM2OSwxLjA2MTM5LC44OTU1MiwuODczOSwuODYxMjgsLjk0NDY5LC44NDU3LC45NDQ2OSwuODk0NjQsMS4wOTg0MiwuODQ2MzYsLjk0NDY5LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTU4OTcsLjk0NDY5LC45NDgyLC45NDQ2OSwuOTQ0NjksMS4wNDY5MiwuNzgyMjMsMS4yMDU2MiwuOTQ0NjksLjkwMzMyLC45ODk4NiwuODY2MjEsLjkwNTI3LC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMDg3MDcsLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzM4MzQsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5Mzg1LC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1Mjg0LC44NTMxMSwuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODY5MywuODQ1NywuODk0NjQsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjgyNjAxLC44MjYwMSwuODI2MDEsLjgyNjAxLC45NDQ2OSwuOTQ0NjksLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjkwNzQ3LC44NjY1MSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjkwNTI3LC45NDQ2OSwuOTA1MjcsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC44NTE5MywuOTI0NTQsLjg2NDc3LC45OTIxLC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwxLDEsLjg2Mjc1LC45NDQ2OSwuOTA4NzIsLjk1Nzg2LC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3NzQxLDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkwNDUyLC45ODE1NiwxLjExODQyLC43NzI2MSwxLjExNDI5LC44OTM4NSwuOTQ0NjksMSwxLC44OTM4NSwuOTQ0NjksLjk1ODc3LC44NjkwMSwuOTQ0NjksLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg2NjcsLjkwMDE2LC43NTE4NiwxLjA0NjkyLDEsMSwuNzUxODYsMS4wNDY5MiwuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLDEsMSwuNzk3NzYsLjkyMTg4LC43OTc3NiwxLjIzMDIzLC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LC43MzA2LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LDEuMDkyMzEsLjU0ODczLC44Njc1LC44NjEyOCwuNzYzMTgsLjg2OTMsLjg1MzExLC44NjY1MSwxLDEsLjc5Nzc2LDEuMjA1NjIsMS4xODYyMiwxLjE4NjIyLDEsMS4xNDM3LC42Nzc0MiwuOTYzMzQsLjkzNjk1LDEuMzUxOTEsMS40MDkwOSwuOTUxNjEsMS40ODM4NywuODY2ODYsLjkwODYxLC42MjI2NywuNzQzNTksLjY1NjQ5LC44NTQ5OCwuNTY5NjMsLjg4MjU0LDEuMjM1MTYsLjg2NzUsLjgxNTUyLC43NTQ0MywuODQ1MDMsLjczMjA2LC43NjY1OSwuODYyNzUsLjg1MTIyLC45MDY4NSwuNzc4OTIsLjg1NzQ2LDEuMDI2MzgsLjg5Mzg1LC43NTY1NywuODUxMjIsLjg2Mjc1LC43NzQ1MiwuNzQxNzEsLjc5Nzc2LC43MzA2LC45NTE2NSwuNzc4MTgsLjg5NzcyLC44ODgzMSwuOTA2ODUsLjczMDYsLjk4MTQyLDEuMDIxOTEsLjk2NTc2LDEuMjM1MTYsLjk5MDE4LC45ODE0MiwuOTIzNiwuODkyNTgsLjk0MDM1LDEuMDIxOTEsLjc4ODQ4LC45NjU3NiwuOTU2MSwxLjIzNTE2LC45MDkxOCwuOTI1NzgsLjk1NDI0LC44OTc0NiwuODM5NjksLjk0ODIsLjgwMTEzLC44OTQ0MiwuODUyMDgsLjg2MTU1LC45ODAyMiwuOTkwMTgsMS4wMDQ1MiwuODEyMDksLjk5MjQ3LC44OTE4MSwxLjIzNTE2LC45OTAxOCwuOTQ4MiwuOTkwMTgsLjg5MTgxLC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODg4NDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NDY0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45Njc2NiwxLDEsMSwxLDEsMSwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY5MDQzLDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTkzMzEsLjgyNjE2LC45MTEzMywuODQyODYsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1MjcsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLjA3MTg1LC45OTQxMywuOTYzMzQsMS4wODA2NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz10LkhlbHZldGljYVJlZ3VsYXJGYWN0b3JzPXQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz10LkhlbHZldGljYUl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkTWV0cmljcz10LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz12b2lkIDAsdC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDMzNzQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDQyLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMzgyOCwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LDEuMDAwNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5MywuOTk5OCwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEsMS4wMDAxNiwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwxLjAwMDI2LC44MTIxLDEuMDAwMjYsLjk5OTk4LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwNiwuOTk5NzMsLjk5OTc3LC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMzQsLjk5OTc3LDEsLjk5OTk3LDEuMDAwMjYsMS4wMDA3OCwxLjAwMDM2LC45OTk3MywxLjAwMDEzLDEuMDAwNiwuOTk5NzcsLjk5OTc3LC45OTk4OCwuODUxNDgsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwuOTk5NzcsMS4wMDAwMSwuOTk5OTksLjk5OTc3LDEuMDAwNjksMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwuOTk5ODQsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMjQsMS4wMDAwMSwuOTk5OSwxLDEuMDAwNiwxLjAwMDAxLDEuMDAwNDEsLjk5OTYyLDEuMDAwMjYsMS4wMDA2LC45OTk5NSwxLjAwMDQxLC45OTk0MiwuOTk5NzMsLjk5OTI3LDEuMDAwODIsLjk5OTAyLDEuMDAwMjYsMS4wMDA4NywxLjAwMDYsMS4wMDA2OSwuOTk5NzMsLjk5ODY3LC45OTk3MywuOTk5MywxLjAwMDI2LDEuMDAwNDksMS4wMDA1NiwxLC45OTk4OCwuOTk5MzUsLjk5OTk1LC45OTk1NCwxLjAwMDU1LC45OTk0NSwxLjAwMDMyLDEuMDAwNiwuOTk5OTUsMS4wMDAyNiwuOTk5OTUsMS4wMDAzMiwxLjAwMDAxLDEuMDAwMDgsLjk5OTcxLDEuMDAwMTksLjk5OTQsMS4wMDAwMSwxLjAwMDYsMS4wMDA0NCwuOTk5NzMsMS4wMDAyMywxLjAwMDQ3LDEsLjk5OTQyLC45OTU2MSwuOTk5ODksMS4wMDAzNSwuOTk5NzcsMS4wMDAzNSwuOTk5NzcsMS4wMDAxOSwuOTk5NDQsMS4wMDAwMSwxLjAwMDIxLC45OTkyNiwxLjAwMDM1LDEuMDAwMzUsLjk5OTQyLDEuMDAwNDgsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMzUsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5ODksMS4wMDA1NywxLjAwMDAxLC45OTkzNiwxLjAwMDUyLDEuMDAwMTIsLjk5OTk2LDEuMDAwNDMsMSwxLjAwMDM1LC45OTk0LC45OTk3NiwxLjAwMDM1LC45OTk3MywxLjAwMDUyLDEuMDAwNDEsMS4wMDExOSwxLjAwMDM3LC45OTk3MywxLjAwMDAyLC45OTk4NiwxLjAwMDQxLDEuMDAwNDEsLjk5OTAyLC45OTk2LDEuMDAwMzQsLjk5OTk5LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsLjk5OTczLDEuMDAwNTIsLjk5OTczLDEsLjk5OTczLDEuMDAwNDEsMS4wMDA3NSwuOTk5NCwxLjAwMDMsLjk5OTk5LDEsMS4wMDA0MSwuOTk5NTUsMSwuOTk5MTUsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAxMTksLjk5OTU1LC45OTk3MywxLjAwMDYsLjk5OTExLDEuMDAwNiwxLjAwMDI2LC45OTk3MiwxLjAwMDI2LC45OTkwMiwxLjAwMDQxLC45OTk3MywuOTk5OTksMSwxLDEuMDAwMzgsMS4wMDA1LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMSwxLDEsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAxMDYsLjk5OTk5LC45OTk5OCwuOTk5OTgsLjk5OTk5LC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsMS4wMDA0NywxLjAwMDIzLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEsMSwxLDEsMSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAwNDQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAxMDExLDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3NywxLDEsMS4wMDAyNiwuOTk5NjksLjk5OTcyLC45OTk4MSwuOTk5OCwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLC45MTE1NSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTY2LDEuMDAwMjIsMS4wMDAzMiwxLjAwMDAxLC45OTk0NCwxLjAwMDI2LDEuMDAwMDEsLjk5OTY4LDEuMDAwMDEsMS4wMDA0NywxLDEuMDAwNiwxLjAwMDAxLC45OTk4MSwxLjAwMTAxLDEuMDAwMjYsMS4wMDA2LC45OTk0OCwuOTk5ODEsMS4wMDA2NCwuOTk5NzMsLjk5OTQyLDEuMDAxMDEsMS4wMDA2MSwxLjAwMDI2LDEuMDAwNjksMS4wMDA2LDEuMDAwMTQsLjk5OTczLDEuMDEzMjIsLjk5OTczLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDEyLC45OTkyMywxLDEuMDAwNjQsMS4wMDA3NiwuOTk5NDgsMS4wMDA1NSwxLjAwMDYzLDEuMDAwMDcsLjk5OTQzLDEuMDAwNiwuOTk5NDgsMS4wMDAyNiwuOTk5NDgsLjk5OTQzLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI5LDEuMDAwMzgsMS4wMDAzNSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3OCwxLjAwMDAxLDEuMDAwNTcsLjk5OTg5LC45OTk2NywuOTk5NjQsLjk5OTY3LC45OTk3NywuOTk5OTksLjk5OTc3LDEuMDAwMzgsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwNjYsLjk5OTY3LC45OTk2NywxLjAwMDQxLC45OTk5OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsLjk5OTY3LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTY0LDEuMDAwMzEsMS4wMDAwMSwuOTk5OTksLjk5OTk5LDEsMS4wMDAyMywxLDEsLjk5OTk5LDEuMDAwMzUsMS4wMDAwMSwuOTk5OTksLjk5OTczLC45OTk3NywuOTk5OTksMS4wMDA1OCwuOTk5NzMsLjk5OTczLC45OTk1NSwuOTk5NSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAzMiwuOTk5ODksMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLC40NTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAwMSwuOTk5OTksLjk5OTgyLC45OTk5NCwuOTk5OTYsMSwxLjAwMDQyLDEuMDAwNDQsMS4wMDAyOSwxLjAwMDIzLC45OTk3MywuOTk5NzMsMS4wMDAyNiwuOTk5NDksMS4wMDAwMiwuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45ODY4NSwuOTk5NzMsMS4wMDAyNiwxLDEsLjk5OTY2LDEuMDAwNDQsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MSwuOTk5NzgsMSwxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDk4LDEsMSwxLDEuMDAwNDksMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn0sdC5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwxLjAwMDYsMS4wMDAwNiwuOTk5NzMsLjk5OTczLC45OTk4MiwxLjAwMDAxLDEuMDAwNDMsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLC45OTk3MywuOTk5ODcsMS4wMDAwMSwxLjAwMDAxLC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwxLDEuMDAwMDEsLjk5OTczLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk0OSwuOTk5NzMsLjk5OTk4LC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTkyNCwuOTk5MjQsMSwuOTk5MjQsLjk5OTk5LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDYsLjk5OTczLDEsLjk5OTc3LDEsMSwxLDEuMDAwMDUsMS4wMDA5LDEuMDAwMDUsMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwOSwuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTgsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwxLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDY0MDksMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsMSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMS4wMjg4LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwuOTk5NDYsMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDYzMTEsLjk5OTczLDEuMDAwMjQsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDQxLC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg5NTQ3LDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDU0LC45OTk3NywxLjAwMDg0LDEuMDAwMDcsLjk5OTczLDEuMDAwMTMsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwuOTk5NDUsLjkxMjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTMzLDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMSwxLjAwMDAxLDEuMDAwNTIsMSwxLjAwMDYsMS4wMDAwMSwuOTk5NDUsLjk5ODk3LC45OTk2OCwuOTk5MjQsMS4wMDAzNiwuOTk5NDUsLjk5OTQ5LDEsMS4wMDA2LC45OTg5NywuOTk5MTgsLjk5OTY4LC45OTkxMSwuOTk5MjQsMSwuOTk5NjIsMS4wMTQ4NywxLDEuMDAwNSwuOTk5NzMsMS4wMDAxMiwxLjAwMDQzLDEsLjk5OTk1LC45OTk5NCwxLjAwMDM2LC45OTk0NywxLjAwMDE5LDEuMDAwNjMsMS4wMDAyNSwuOTk5MjQsMS4wMDAzNiwuOTk5NzMsMS4wMDAzNiwxLjAwMDI1LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI3LDEuMDAwMSwxLjAwMDY4LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLDEuMDAwMDgsLjk5OTU3LC45OTk3MiwuOTk5NCwuOTk5NTQsLjk5OTc1LDEuMDAwNTEsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsMS4wMDAxLC45OTk4NiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAzOCwuOTk5NTQsLjk5OTU0LC45OTk0LDEuMDAwNjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwNTQsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NzUsMS4wMDAxLDEuMDAwMDEsLjk5OTkzLC45OTk1LC45OTk1NSwxLjAwMDE2LC45OTk3OCwuOTk5NzQsMS4wMDAxOSwxLjAwMDIyLC45OTk1NSwxLjAwMDUzLC45OTk3MywxLjAwMDg5LDEuMDAwMDUsLjk5OTY3LDEuMDAwNDgsLjk5OTczLDEuMDAwMDIsMS4wMDAzNCwuOTk5NzMsLjk5OTczLC45OTk2NCwxLjAwMDA2LDEuMDAwNjYsLjk5OTQ3LC45OTk3MywuOTg4OTQsLjk5OTczLDEsLjQ0ODk4LDEsLjk5OTQ2LDEsMS4wMDAzOSwxLjAwMDgyLC45OTk5MSwuOTk5OTEsLjk5OTg1LDEuMDAwMjIsMS4wMDAyMywxLjAwMDYxLDEuMDAwMDYsLjk5OTY2LC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwMTksMS4wMDA4LDEsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTgzLDEuMDAwNDQsLjk5OTczLC45OTk2NCwuOTgzMzIsMSwuOTk5NzMsMSwxLC45OTk2MiwuOTk4OTUsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAyNjcsLjk5OTk5LC45OTk5OCwuOTk5OTgsMSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsMS4wMDQyMywuOTk5MjUsLjk5OTk5LDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwNDksMSwxLjAwMjQ1LDEsMSwxLDEsLjk2MzI5LDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsLjgyNTQsMS4wMDAxNSwxLDEuMDAwMzUsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsMS4wMDAwMywxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjM1LGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhUmVndWxhckZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjA0NTk2LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwxLjAwMDE5LDEuMDAwMzQsMSwuOTk5MjQsMS4wMDAwMSwxLDEsLjk5OTczLC45OTkyNCwuOTk5NzMsLjk5OTI0LC45OTk3MywxLjAyNTcyLC45OTk3MywxLjAwMDA1LC45OTk3MywuOTk5MjQsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTk5LC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg0NTMzLDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTkyOCwxLC45OTk3NywxLjAwMDEzLDEuMDAwNTUsLjk5OTQ3LC45OTk0NSwuOTk5NDEsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDQsLjkxNjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDA1LC45OTk5OSwuOTk5NzcsMS4wMDAxNSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk3MywxLjAwMDI2LDEuMDAwMDEsMS4wMDAxOSwxLjAwMDAxLC45OTk0NiwxLDEuMDAwNiwxLjAwMDAxLC45OTk3OCwxLjAwMDQ1LC45OTk3MywuOTk5MjQsMS4wMDAyMywuOTk5NzgsLjk5OTY2LDEsMS4wMDA2NSwxLjAwMDQ1LDEuMDAwMTksLjk5OTczLC45OTk3MywuOTk5MjQsMSwxLC45NjQ5OSwxLDEuMDAwNTUsLjk5OTczLDEuMDAwMDgsMS4wMDAyNywxLC45OTk3LC45OTk5NSwxLjAwMDIzLC45OTkzMywxLjAwMDE5LDEuMDAwMTUsMS4wMDAzMSwuOTk5MjQsMS4wMDAyMywuOTk5NzMsMS4wMDAyMywxLjAwMDMxLDEuMDAwMDEsLjk5OTI4LDEuMDAwMjksMS4wMDA5MiwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLC45OTk4OCwuOTk5NzUsMSwxLjAwMDgyLC45OTU2MSwuOTk5NiwxLjAwMDM1LDEuMDAwMDEsLjk5OTYyLDEuMDAwMDEsMS4wMDA5MiwuOTk5NjQsMS4wMDAwMSwuOTk5NjMsLjk5OTk5LDEuMDAwMzUsMS4wMDAzNSwxLjAwMDgyLC45OTk2MiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk2LC45OTk2NywxLjAwMDAxLDEuMDAwMzQsMS4wMDA3NCwxLjAwMDU0LDEuMDAwNTMsMS4wMDA2MywuOTk5NzEsLjk5OTYyLDEuMDAwMzUsLjk5OTc1LC45OTk3NywuOTk5NzMsMS4wMDA0MywuOTk5NTMsMS4wMDA3LC45OTkxNSwuOTk5NzMsMS4wMDAwOCwuOTk4OTIsMS4wMDA3MywxLjAwMDczLDEuMDAxMTQsLjk5OTE1LDEuMDAwNzMsLjk5OTU1LC45OTk3MywxLjAwMDkyLC45OTk3MywxLC45OTk5OCwxLDEuMDAwMywxLDEuMDAwNDMsMS4wMDAwMSwuOTk5NjksMS4wMDAzLDEsMS4wMDAzNSwxLjAwMDAxLC45OTk1LDEsMS4wMDA5MiwuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDcsLjk5OTUsMSwuOTk5MjQsMS4wMDA2LC45OTkyNCwuOTk5NzIsMS4wMDA2MiwuOTk5NzMsMS4wMDExNCwxLjAwMDczLDEsLjk5OTU1LDEsMSwxLjAwMDQ3LC45OTk2OCwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsLjk5OTI1LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTUzMTcsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPXQuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZz10LkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzPXQuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPXQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmc9dm9pZCAwLHQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzE5LDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODUsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzODUsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw0NjUsNzIyLDMzMyw4NTMsOTA2LDQ3NCw4MjUsOTI3LDgzOCwyNzgsNzIyLDcyMiw2MDEsNzE5LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY0NCw3NzgsNzIyLDY2Nyw2MDAsNjExLDY2Nyw4MjEsNjY3LDgwOSw4MDIsMjc4LDY2Nyw2MTUsNDUxLDYxMSwyNzgsNTgyLDYxNSw2MTAsNTU2LDYwNiw0NzUsNDYwLDYxMSw1NDEsMjc4LDU1OCw1NTYsNjEyLDU1Niw0NDUsNjExLDc2Niw2MTksNTIwLDY4NCw0NDYsNTgyLDcxNSw1NzYsNzUzLDg0NSwyNzgsNTgyLDYxMSw1ODIsODQ1LDY2Nyw2NjksODg1LDU2Nyw3MTEsNjY3LDI3OCwyNzYsNTU2LDEwOTQsMTA2Miw4NzUsNjEwLDcyMiw2MjIsNzE5LDcyMiw3MTksNzIyLDU2Nyw3MTIsNjY3LDkwNCw2MjYsNzE5LDcxOSw2MTAsNzAyLDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MjIsODU0LDY2Nyw3MzAsNzAzLDEwMDUsMTAxOSw4NzAsOTc5LDcxOSw3MTEsMTAzMSw3MTksNTU2LDYxOCw2MTUsNDE3LDYzNSw1NTYsNzA5LDQ5Nyw2MTUsNjE1LDUwMCw2MzUsNzQwLDYwNCw2MTEsNjA0LDYxMSw1NTYsNDkwLDU1Niw4NzUsNTU2LDYxNSw1ODEsODMzLDg0NCw3MjksODU0LDYxNSw1NTIsODU0LDU4Myw1NTYsNTU2LDYxMSw0MTcsNTUyLDU1NiwyNzgsMjgxLDI3OCw5NjksOTA2LDYxMSw1MDAsNjE1LDU1Niw2MDQsNzc4LDYxMSw0ODcsNDQ3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDEwOTQsNTU2LDg4NSw0ODksMTExNSwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHM9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3NDAsNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4Miw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM5Niw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw3MjIsMzMzLDg1NCw5MDYsNDczLDg0NCw5MzAsODQ3LDI3OCw3MjIsNzIyLDYxMCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjU3LDc3OCw3MTgsNjY3LDU5MCw2MTEsNjY3LDgyMiw2NjcsODI5LDc4MSwyNzgsNjY3LDYyMCw0NzksNjExLDI3OCw1OTEsNjIwLDYyMSw1NTYsNjEwLDQ3OSw0OTIsNjExLDU1OCwyNzgsNTY2LDU1Niw2MDMsNTU2LDQ1MCw2MTEsNzEyLDYwNSw1MzIsNjY0LDQwOSw1OTEsNzA0LDU3OCw3NzMsODM0LDI3OCw1OTEsNjExLDU5MSw4MzQsNjY3LDY2Nyw4ODYsNjE0LDcxOSw2NjcsMjc4LDI3OCw1NTYsMTA5NCwxMDQyLDg1NCw2MjIsNzE5LDY3Nyw3MTksNzIyLDcwOCw3MjIsNjE0LDcyMiw2NjcsOTI3LDY0Myw3MTksNzE5LDYxNSw2ODcsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDY3Nyw3ODEsNjY3LDcyOSw3MDgsOTc5LDk4OSw4NTQsMWUzLDcwOCw3MTksMTA0Miw3MjksNTU2LDYxOSw2MDQsNTM0LDYxOCw1NTYsNzM2LDUxMCw2MTEsNjExLDUwNyw2MjIsNzQwLDYwNCw2MTEsNjExLDYxMSw1NTYsODg5LDU1Niw4ODUsNTU2LDY0Niw1ODMsODg5LDkzNSw3MDcsODU0LDU5NCw1NTIsODY1LDU4OSw1NTYsNTU2LDYxMSw0NjksNTYzLDU1NiwyNzgsMjc4LDI3OCw5NjksOTA2LDYxMSw1MDcsNjE5LDU1Niw2MTEsNzc4LDYxMSw1NzUsNDY3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDExMDQsNTU2LDg4NSw1MTYsMTE0NiwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsOTk5LDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocz1bMzY1LDAsMzMzLDI3OCwyNzgsMzU1LDU1Niw1NTYsODg5LDY2NywxOTEsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCw1ODQsNTg0LDU4NCw1NTYsMTAxNSw2NjcsNjY3LDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1MDAsNjY3LDU1Niw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDI3OCwyNzgsMjc4LDQ2OSw1NTYsMzMzLDU1Niw1NTYsNTAwLDU1Niw1NTYsMjc4LDU1Niw1NTYsMjIyLDIyMiw1MDAsMjIyLDgzMyw1NTYsNTU2LDU1Niw1NTYsMzMzLDUwMCwyNzgsNTU2LDUwMCw3MjIsNTAwLDUwMCw1MDAsMzM0LDI2MCwzMzQsNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjYwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTM3LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDUwMCw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NDksNjExLDU1Niw1NTYsNTU2LDU1Niw1MDAsNTU2LDUwMCw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw2MjUsNzIyLDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3MjIsNTU2LDcyMiw1NTYsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDIyMiwyNzgsMjc4LDczMyw0NDQsNTAwLDIyMiw2NjcsNTAwLDUwMCw1NTYsMjIyLDU1NiwyMjIsNTU2LDI4MSw1NTYsNDAwLDU1NiwyMjIsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNjE1LDcyMyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsMWUzLDk0NCw3MjIsMzMzLDcyMiwzMzMsNzIyLDMzMyw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDYxMSwyNzgsNjExLDM1NCw2MTEsMjc4LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDk0NCw3MjIsNjY3LDUwMCw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjIyLDU1Niw2NjcsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTAwLDYxMSwyNzgsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw2NjcsMjc4LDc4OSw4NDYsMzg5LDc5NCw4NjUsNzc1LDIyMiw2NjcsNjY3LDU3MCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw2NjcsNjY3LDgzMyw3MjIsNjQ4LDc3OCw3MjUsNjY3LDYwMCw2MTEsNjY3LDgzNyw2NjcsODMxLDc2MSwyNzgsNjY3LDU3MCw0MzksNTU1LDIyMiw1NTAsNTcwLDU3MSw1MDAsNTU2LDQzOSw0NjMsNTU1LDU0MiwyMjIsNTAwLDQ5Miw1NDgsNTAwLDQ0Nyw1NTYsNjcwLDU3Myw0ODYsNjAzLDM3NCw1NTAsNjUyLDU0Niw3MjgsNzc5LDIyMiw1NTAsNTU2LDU1MCw3NzksNjY3LDY2Nyw4NDMsNTQ0LDcwOCw2NjcsMjc4LDI3OCw1MDAsMTA2Niw5ODIsODQ0LDU4OSw3MTUsNjM5LDcyNCw2NjcsNjUxLDY2Nyw1NDQsNzA0LDY2Nyw5MTcsNjE0LDcxNSw3MTUsNTg5LDY4Niw4MzMsNzIyLDc3OCw3MjUsNjY3LDcyMiw2MTEsNjM5LDc5NSw2NjcsNzI3LDY3Myw5MjAsOTIzLDgwNSw4ODYsNjUxLDY5NCwxMDIyLDY4Miw1NTYsNTYyLDUyMiw0OTMsNTUzLDU1Niw2ODgsNDY1LDU1Niw1NTYsNDcyLDU2NCw2ODYsNTUwLDU1Niw1NTYsNTU2LDUwMCw4MzMsNTAwLDgzNSw1MDAsNTcyLDUxOCw4MzAsODUxLDYyMSw3MzYsNTI2LDQ5Miw3NTIsNTM0LDU1Niw1NTYsNTU2LDM3OCw0OTYsNTAwLDIyMiwyMjIsMjIyLDkxMCw4MjgsNTU2LDQ3Miw1NjUsNTAwLDU1Niw3NzgsNTU2LDQ5MiwzMzksOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDgzLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDk5OCw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTg0LDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYxNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzM1LDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjkyLDU1NiwzMzQsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MDQsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzc1LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg0LDgzOCwzODQsNzc0LDg1NSw3NTIsMjIyLDY2Nyw2NjcsNTUxLDY2OCw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjgsODMzLDcyMiw2NTAsNzc4LDcyMiw2NjcsNjE4LDYxMSw2NjcsNzk4LDY2Nyw4MzUsNzQ4LDI3OCw2NjcsNTc4LDQ0Niw1NTYsMjIyLDU0Nyw1NzgsNTc1LDUwMCw1NTcsNDQ2LDQ0MSw1NTYsNTU2LDIyMiw1MDAsNTAwLDU3Niw1MDAsNDQ4LDU1Niw2OTAsNTY5LDQ4Miw2MTcsMzk1LDU0Nyw2NDgsNTI1LDcxMyw3ODEsMjIyLDU0Nyw1NTYsNTQ3LDc4MSw2NjcsNjY3LDg2NSw1NDIsNzE5LDY2NywyNzgsMjc4LDUwMCwxMDU3LDEwMTAsODU0LDU4Myw3MjIsNjM1LDcxOSw2NjcsNjU2LDY2Nyw1NDIsNjc3LDY2Nyw5MjMsNjA0LDcxOSw3MTksNTgzLDY1Niw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjM1LDc2MCw2NjcsNzQwLDY2Nyw5MTcsOTM4LDc5Miw4ODUsNjU2LDcxOSwxMDEwLDcyMiw1NTYsNTczLDUzMSwzNjUsNTgzLDU1Niw2NjksNDU4LDU1OSw1NTksNDM4LDU4Myw2ODgsNTUyLDU1Niw1NDIsNTU2LDUwMCw0NTgsNTAwLDgyMyw1MDAsNTczLDUyMSw4MDIsODIzLDYyNSw3MTksNTIxLDUxMCw3NTAsNTQyLDU1Niw1NTYsNTU2LDM2NSw1MTAsNTAwLDIyMiwyNzgsMjIyLDkwNiw4MTIsNTU2LDQzOCw1NTksNTAwLDU1Miw3NzgsNTU2LDQ4OSw0MTEsOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDczLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NeXJpYWRQcm9SZWd1bGFyTWV0cmljcz10Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPXQuTXlyaWFkUHJvSXRhbGljTWV0cmljcz10Lk15cmlhZFByb0l0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkTWV0cmljcz10Lk15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzPXQuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz12b2lkIDAsdC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjcyNzA2LC44MDQ3OSwuODM3MzQsLjk4ODk0LC45OTc5MywuOTg5NywuOTM4ODQsLjg2MjA5LC45NDI5MiwuOTQyOTIsMS4xNjY2MSwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTkxMzcsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcyODUxLC43ODk2NiwuOTA4MzgsLjgzNjM3LC44MjM5MSwuOTYzNzYsLjgwMDYxLC44NjI3NSwuODc2OCwuOTU0MDcsMS4wMjU4LC43MzkwMSwuODUwMjIsLjgzNjU1LDEuMDE1NiwuOTU1NDYsLjkyMTc5LC44NzEwNywuOTIxNzksLjgyMTE0LC44MDk2LC44OTcxMywuOTQ0MzgsLjk1MzUzLC45NDA4MywuOTE5MDUsLjkwNDA2LC45NDQ2LC45NDI5MiwxLjE4Nzc3LC45NDI5MiwxLjAyMDU4LC44OTkwMywuOTAwODgsLjk0OTM4LC45Nzg5OCwuODEwOTMsLjk3NTcxLC45NDkzOCwxLjAyNCwuOTU3NywuOTU5MzMsLjk4NjIxLDEuMDQ3NCwuOTc0NTUsLjk4OTgxLC45NjcyLC45NTkzMywuOTQ0NiwuOTc4OTgsLjk3NDA3LC45NzY0NiwuNzgwMzYsMS4xMDIwOCwuOTU0NDIsLjk1Mjk4LC45NzU3OSwuOTMzMiwuOTQwMzksLjkzOCwuODA2ODcsMS4wMTE0OSwuODA2ODcsMS4wMjA1OCwuODA0NzksLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLDEuMDExNDksMS4wMDg3MiwuOTAwODgsLjkxODgyLDEuMDIxMywuODM2MSwxLjAyMDU4LC42MjI5NSwuNTQzMjQsLjg5MDIyLDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NzQ1NSwuOTM1ODIsLjkwMDg4LDEsMS4wNTY4NiwuODM2MSwuOTk2NDIsLjk5NjQyLC45OTY0MiwuNzI4NTEsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjg2OCwuODIzOTEsLjgwMDYxLC44MDA2MSwuODAwNjEsLjgwMDYxLDEuMDI1OCwxLjAyNTgsMS4wMjU4LDEuMDI1OCwuOTc0ODQsLjk1NTQ2LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksMS4wMjA1OCwuOTIxNzksLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45MDQwNiwuODY5NTgsLjk4MjI1LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45MDMxLC44MTA5MywuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45Mzk2OSwuOTU5MzMsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsMS4wODU5NSwuOTQ0NiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk0MDM5LC45Nzg5OCwuOTQwMzksLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuOTYzNzYsLjg0MzEzLC45NzQ4NCwuOTc1NzEsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44NzY4LC45NTc3LC44NzY4LC45NTc3LC44NzY4LC45NTc3LDEsMSwuOTU0MDcsLjk1OTMzLC45NzA2OSwuOTU5MzMsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLC44ODcsMS4wMTU5MSwuNzM5MDEsMS4wNDc0LDEsMSwuOTc0NTUsLjgzNjU1LC45ODk4MSwxLDEsLjgzNjU1LC43Mzk3NywuODM2NTUsLjczOTAzLC44NDYzOCwxLjAzMywuOTU1NDYsLjk1OTMzLDEsMSwuOTU1NDYsLjk1OTMzLC44MjcxLC45NTQxNywuOTU5MzMsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkzNiwuOTE5NjQsLjgyMTE0LC45NzY0NiwxLDEsLjgyMTE0LC45NzY0NiwuODA5NiwuNzgwMzYsLjgwOTYsLjc4MDM2LDEsMSwuODA5NiwuNzgwMzYsMSwxLC44OTcxMywuNzc0NTIsLjg5NzEzLDEuMTAyMDgsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45MDQwNiwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwxLC45OTc5MywuOTA4MzgsLjk0OTM4LC44NjgsLjkwMzEsLjkyMTc5LC45NDQ2LDEsMSwuODk3MTMsMS4xMDIwOCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTA5ODksLjkzNTgsLjkxOTQ1LC44MzE4MSwuNzUyNjEsLjg3OTkyLC44Mjk3NiwuOTYwMzQsLjgzNjg5LC45NzI2OCwxLjAwNzgsLjkwODM4LC44MzYzNywuODAxOSwuOTAxNTcsLjgwMDYxLC45NDQ2LC45NTQwNywuOTI0MzYsMS4wMjU4LC44NTAyMiwuOTcxNTMsMS4wMTU2LC45NTU0NiwuODkxOTIsLjkyMTc5LC45MjM2MSwuODcxMDcsLjk2MzE4LC44OTcxMywuOTM3MDQsLjk1NjM4LC45MTkwNSwuOTE3MDksLjkyNzk2LDEuMDI1OCwuOTM3MDQsLjk0ODM2LDEuMDM3MywuOTU5MzMsMS4wMDc4LC45NTg3MSwuOTQ4MzYsLjk2MTc0LC45MjYwMSwuOTQ5OCwuOTg2MDcsLjk1Nzc2LC45NTkzMywxLjA1NDUzLDEuMDA3OCwuOTgyNzUsLjkzMTQsLjk1NjE3LC45MTcwMSwxLjA1OTkzLC45NDQ2LC43ODM2NywuOTU1MywxLC44NjgzMiwxLjAxMjgsLjk1ODcxLC45OTM5NCwuODc1NDgsLjk2MzYxLC44Njc3NCwxLjAwNzgsLjk1ODcxLC45NDQ2LC45NTg3MSwuODY3NzQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45NjY5NCwxLC44OTkwMywxLDEsMSwuOTM1ODIsLjkzNTgyLC45MzU4MiwxLC45MDgsLjkwOCwuOTE4LC45NDIxOSwuOTQyMTksLjk2NTQ0LDEsMS4yODUsMSwxLC44MTA3OSwuODEwNzksMSwxLC43NDg1NCwxLDEsMSwxLC45OTc5MywxLDEsMSwuNjUsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE3MTczLDEsLjgwNTM1LC43NjE2OSwxLjAyMDU4LDEuMDczMiwxLjA1NDg2LDEsMSwxLjMwNjkyLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTYxNjEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9Cb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sdC5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY2MjI3LC44MDc3OSwuODE2MjUsLjk3Mjc2LC45NzI3NiwuOTc3MzMsLjkyMjIyLC44MzI2NiwuOTQyOTIsLjk0MjkyLDEuMTYxNDgsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE3MzM3LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MTU0MSwuNzY4MTMsLjg1NTc2LC44MDU5MSwuODA3MjksLjk0Mjk5LC43NzUxMiwuODM2NTUsLjg2NTIzLC45MjIyMiwuOTg2MjEsLjcxNzQzLC44MTY5OCwuNzk3MjYsLjk4NTU4LC45MjIyMiwuOTA2MzcsLjgzODA5LC45MDYzNywuODA3MjksLjc2NDYzLC44NjI3NSwuOTA2OTksLjkxNjA1LC45MTU0LC44NTMwOCwuODU0NTgsLjkwNTMxLC45NDI5MiwxLjIxMjk2LC45NDI5MiwxLjAyMDU4LC44OTkwMywxLjE4NjE2LC45OTYxMywuOTE2NzcsLjc4MjE2LC45MTY3NywuOTAwODMsLjk4Nzk2LC45MTM1LC45MjE2OCwuOTUzODEsLjk4OTgxLC45NTI5OCwuOTUzODEsLjkzNDU5LC45MjE2OCwuOTE1MTMsLjkyMDA0LC45MTY3NywuOTUwNzcsLjc0OCwxLjA0NTAyLC45MTY3NywuOTIwNjEsLjk0MjM2LC44OTU0NCwuODkzNjQsLjksLjgwNjg3LC44NTc4LC44MDY4NywxLjAyMDU4LC44MDc3OSwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjg1NzgsLjk5OTczLDEuMTg2MTYsLjkxMzM5LDEuMDgwNzQsLjgyODkxLDEuMDIwNTgsLjU1NTA5LC43MTUyNiwuODkwMjIsMS4wODU5NSwxLDEsMS4xODYxNiwxLC45NjczNiwuOTM1ODIsMS4xODYxNiwxLDEuMDQ4NjQsLjgyNzExLC45OTA0MywuOTkwNDMsLjk5MDQzLC43MTU0MSwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODQ1LC44MDcyOSwuNzc1MTIsLjc3NTEyLC43NzUxMiwuNzc1MTIsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45NTk2MSwuOTIyMjIsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LC45MDYzNywxLjAyMDU4LC45MDI1MSwuOTA2OTksLjkwNjk5LC45MDY5OSwuOTA2OTksLjg1NDU4LC44MzY1OSwuOTQ5NTEsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjg1ODExLC43ODIxNiwuOTAwODMsLjkwMDgzLC45MDA4MywuOTAwODMsLjk1MzgxLC45NTM4MSwuOTUzODEsLjk1MzgxLC45MTM1LC45MjE2OCwuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsLjkxNTEzLDEuMDg1OTUsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC45MTY3NywuODkzNjQsLjkyMzMyLC44OTM2NCwuODU1NzYsLjk5NjEzLC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC45NDI5OSwuNzY3ODMsLjk1OTYxLC45MTY3NywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwuODY1MjMsLjkxMzUsMSwxLC45MjIyMiwuOTIxNjgsLjkyMjIyLC45MjE2OCwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjg2MDM2LC45NzA5NiwuNzE3NDMsLjk4OTgxLDEsMSwuOTUyOTgsLjc5NzI2LC45NTM4MSwxLDEsLjc5NzI2LC42ODk0LC43OTcyNiwuNzQzMjEsLjgxNjkxLDEuMDAwNiwuOTIyMjIsLjkyMTY4LDEsMSwuOTIyMjIsLjkyMTY4LC43OTQ2NCwuOTIwOTgsLjkyMTY4LC45MDYzNywuOTE1MTMsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDksLjg3NTE0LC44MDcyOSwuOTUwNzcsMSwxLC44MDcyOSwuOTUwNzcsLjc2NDYzLC43NDgsLjc2NDYzLC43NDgsMSwxLC43NjQ2MywuNzQ4LDEsMSwuODYyNzUsLjcyNjUxLC44NjI3NSwxLjA0NTAyLC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MTU0LC45NDIzNiwuODU0NTgsLjg5MzY0LC44NTQ1OCwuOTA1MzEsLjksLjkwNTMxLC45LC45MDUzMSwuOSwxLC45NzI3NiwuODU1NzYsLjk5NjEzLC44NDUsLjg1ODExLC45MDI1MSwuOTE2NzcsMSwxLC44NjI3NSwxLjA0NTAyLDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMDA4OTksMS4zMDYyOCwuODU1NzYsLjgwMTc4LC42Njg2MiwuNzkyNywuNjkzMjMsLjg4MTI3LC43MjQ1OSwuODk3MTEsLjk1MzgxLC44NTU3NiwuODA1OTEsLjc4MDUsLjk0NzI5LC43NzUxMiwuOTA1MzEsLjkyMjIyLC45MDYzNywuOTg2MjEsLjgxNjk4LC45MjY1NSwuOTg1NTgsLjkyMjIyLC44NTM1OSwuOTA2MzcsLjkwOTc2LC44MzgwOSwuOTQ1MjMsLjg2Mjc1LC44MzUwOSwuOTMxNTcsLjg1MzA4LC44MzM5MiwuOTIzNDYsLjk4NjIxLC44MzUwOSwuOTI4ODYsLjkxMzI0LC45MjE2OCwuOTUzODEsLjkwNjQ2LC45Mjg4NiwuOTA1NTcsLjg2ODQ3LC45MDI3NiwuOTEzMjQsLjg2ODQyLC45MjE2OCwuOTk1MzEsLjk1MzgxLC45MjI0LC44NTQwOCwuOTI2OTksLjg2ODQ3LDEuMDA1MSwuOTE1MTMsLjgwNDg3LC45MzQ4MSwxLC44ODE1OSwxLjA1MjE0LC45MDY0NiwuOTczNTUsLjgxNTM5LC44OTM5OCwuODU5MjMsLjk1MzgxLC45MDY0NiwuOTE1MTMsLjkwNjQ2LC44NTkyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MTc4MiwuOTE3ODIsLjkxNzgyLDEsLjg5NiwuODk2LC44OTYsLjkzMzIsLjkzMzIsLjk1OTczLDEsMS4yNiwxLDEsLjgwNDc5LC44MDE3OCwxLDEsLjg1NjMzLDEsMSwxLDEsLjk3Mjc2LDEsMSwxLC42OTgsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE0NTQyLDEsLjc5MTk5LC43ODY5NCwxLjAyMDU4LDEuMDM0OTMsMS4wNTQ4NiwxLDEsMS4yMzAyNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjIwMDA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuTXlyaWFkUHJvSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY1NTA3LC44NDk0MywuODU2MzksLjg4NDY1LC44ODQ2NSwuODY5MzYsLjg4MzA3LC44Njk0OCwuODUyODMsLjg1MjgzLDEuMDYzODMsMS4wMjA1OCwuNzU5NDUsLjkyMTksLjc1OTQ1LDEuMTczMzcsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC43NTk0NSwuNzU5NDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjY5MDQ2LC43MDkyNiwuODUxNTgsLjc3ODEyLC43Njg1MiwuODk1OTEsLjcwNDY2LC43NjEyNSwuODAwOTQsLjg2ODIyLC44Mzg2NCwuNzI4LC43NzIxMiwuNzk0NzUsLjkzNjM3LC44NzUxNCwuODU4OCwuNzYwMTMsLjg1ODgsLjcyNDIxLC42OTg2NiwuNzc1OTgsLjg1OTkxLC44MDgxMSwuODc4MzIsLjc4MTEyLC43NzUxMiwuODU2MiwxLjAyMjIsMS4xODQxNywxLjAyMjIsMS4yNzAxNCwuODk5MDMsMS4xNTAxMiwuOTM4NTksLjk0Mzk5LC44NDYsLjk0Mzk5LC44MTQ1MywxLjAxODYsLjk0MjE5LC45NjAxNywxLjAzMDc1LDEuMDIxNzUsLjkxMiwxLjAzMDc1LC45Njk5OCwuOTYwMTcsLjkzODU5LC45NDM5OSwuOTQzOTksLjk1NDkzLC43NDYsMS4xMjY1OCwuOTQ1NzgsLjkxLC45NzksLjg4MiwuODgyLC44MywuODUwMzQsLjgzNTM3LC44NTAzNCwxLjAyMDU4LC43MDg2OSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjgzNTM3LC45MDA4MywxLjE1MDEyLC45MTYxLC45NDU2NSwuNzM1NDEsMS4wMjA1OCwuNTM2MDksLjY5MzUzLC43OTUxOSwxLjA4NTk1LDEsMSwxLjE1MDEyLDEsLjkxOTc0LC43NTk0NSwxLjE1MDEyLDEsLjk0NDYsLjczMzYxLC45MDA1LC45MDA1LC45MDA1LC42Mjg2NCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuNzczLC43Njg1MiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuNzA0NjYsLjgzODY0LC44Mzg2NCwuODM4NjQsLjgzODY0LC45MDU2MSwuODc1MTQsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsMS4wMjA1OCwuODU3NTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjg1OTkxLC43NzUxMiwuNzYwMTMsLjg4MDc1LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC44MDc1LC44NDYsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgxNDUzLC44MjQyNCwuODI0MjQsLjgyNDI0LC44MjQyNCwuOTI3OCwuOTYwMTcsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwxLjA4NTk1LC44NTYyLC45NDU3OCwuOTQ1NzgsLjk0NTc4LC45NDU3OCwuODgyLC45NDU3OCwuODgyLC44NTE1OCwuOTM4NTksLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC44OTU5MSwuODU0NCwuOTA1NjEsLjk0Mzk5LC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuODAwOTQsLjk0MjE5LC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwxLDEsLjg2ODIyLC45NjAxNywuODY4MjIsLjk2MDE3LC44Mzg2NCwuODI0MjQsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwxLjAzMDc1LC44Mzg2NCwuODI0MjQsLjgxNDAyLDEuMDI3MzgsLjcyOCwxLjAyMTc1LDEsMSwuOTEyLC43OTQ3NSwxLjAzMDc1LDEsMSwuNzk0NzUsLjgzOTExLC43OTQ3NSwuNjYyNjYsLjgwNTUzLDEuMDY2NzYsLjg3NTE0LC45NjAxNywxLDEsLjg3NTE0LC45NjAxNywuODY4NjUsLjg3Mzk2LC45NjAxNywuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NTg4LC45Mzg1OSwuODY3LC44NDc1OSwuNzI0MjEsLjk1NDkzLDEsMSwuNzI0MjEsLjk1NDkzLC42OTg2NiwuNzQ2LC42OTg2NiwuNzQ2LDEsMSwuNjk4NjYsLjc0NiwxLDEsLjc3NTk4LC44ODQxNywuNzc1OTgsMS4xMjY1OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODc4MzIsLjk3OSwuNzc1MTIsLjg4MiwuNzc1MTIsLjg1NjIsLjgzLC44NTYyLC44MywuODU2MiwuODMsMSwuODg0NjUsLjg1MTU4LC45Mzg1OSwuNzczLC44MDc1LC44NTc1MSwuODU2MiwxLDEsLjc3NTk4LDEuMTI2NTgsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUzMTMsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4wODEwNiwxLjAzOTAxLC44NTE1OCwuNzcwMjUsLjYyMjY0LC43NjQ2LC42NTM1MSwuODYwMjYsLjY5NDYxLC44OTk0NywxLjAzMDc1LC44NTE1OCwuNzc4MTIsLjc2NDQ5LC44ODgzNiwuNzA0NjYsLjg1NjIsLjg2ODIyLC44NTg4LC44Mzg2NCwuNzcyMTIsLjg1MzA4LC45MzYzNywuODc1MTQsLjgyMzUyLC44NTg4LC44NTcwMSwuNzYwMTMsLjg5MDU4LC43NzU5OCwuODE1NiwuODI1NjUsLjc4MTEyLC43Nzg5OSwuODkzODYsLjgzODY0LC44MTU2LC45NDg2LC45MjM4OCwuOTYxODYsMS4wMzA3NSwuOTExMjMsLjk0ODYsLjkzMjk4LC44NzgsLjkzOTQyLC45MjM4OCwuODQ1OTYsLjk2MTg2LC45NTExOSwxLjAzMDc1LC45MjIsLjg4Nzg3LC45NTgyOSwuODgsLjkzNTU5LC45Mzg1OSwuNzg4MTUsLjkzNzU4LDEsLjg5MjE3LDEuMDM3MzcsLjkxMTIzLC45Mzk2OSwuNzc0ODcsLjg1NzY5LC44Njc5OSwxLjAzMDc1LC45MTEyMywuOTM4NTksLjkxMTIzLC44Njc5OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC44NzMyMSwuODczMjEsLjg3MzIxLDEsMS4wMjcsMS4wMjcsMS4wMjcsLjg2ODQ3LC44Njg0NywuNzkxMjEsMSwxLjEyNCwxLDEsLjczNTcyLC43MzU3MiwxLDEsLjg1MDM0LDEsMSwxLDEsLjg4NDY1LDEsMSwxLC42NjksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0ODI4LDEsLjc0OTQ4LC43NTE4NywxLjAyMDU4LC45ODM5MSwxLjAyMTE5LDEsMSwxLjA2MjMzLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDUyMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSx0Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNzYzMDUsLjgyNzg0LC45NDkzNSwuODkzNjQsLjkyMjQxLC44OTA3MywuOTA3MDYsLjk4NDcyLC44NTI4MywuODUyODMsMS4wNjY0LDEuMDIwNTgsLjc0NTA1LC45MjE5LC43NDUwNSwxLjIzNDU2LC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuNzQ1MDUsLjc0NTA1LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MzAwMiwuNzI2MDEsLjkxNzU1LC44MTI2LC44MDMxNCwuOTIyMjIsLjczNzY0LC43OTcyNiwuODMwNTEsLjkwMjg0LC44NjAyMywuNzQsLjgxMjYsLjg0ODY5LC45NjUxOCwuOTExMTUsLjg4NTgsLjc5NzYxLC44ODU4LC43NDQ5OCwuNzM5MTQsLjgxMzYzLC44OTU5MSwuODM2NTksLjg5NjMzLC44NTYwOCwuODExMSwuOTA1MzEsMS4wMjIyLDEuMjI3MzYsMS4wMjIyLDEuMjcwMTQsLjg5OTAzLC45MDA4OCwuODY2NjcsMS4wMjMxLC44OTYsMS4wMTQxMSwuOTAwODMsMS4wNTA5OSwxLjAwNTEyLC45OTc5MywxLjA1MzI2LDEuMDkzNzcsLjkzOCwxLjA2MjI2LDEuMDAxMTksLjk5NzkzLC45ODcxNCwxLjAyMzEsMS4wMTIzMSwuOTgxOTYsLjc5MiwxLjE5MTM3LC45OTA3NCwuOTYyLDEuMDE5MTUsLjkyNiwuOTQyLC44NTYsLjg1MDM0LC45MjAwNiwuODUwMzQsMS4wMjA1OCwuNjkwNjcsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjAwNiwuOTMzMiwuOTAwODgsLjkxODgyLC45MzQ4NCwuNzUzMzksMS4wMjA1OCwuNTY4NjYsLjU0MzI0LC43OTUxOSwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTUzMjUsLjc0NTA1LC45MDA4OCwxLC45NzE5OCwuNzUzMzksLjkxMDA5LC45MTAwOSwuOTEwMDksLjY2NDY2LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC43ODgsLjgwMzE0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC43Mzc2NCwuODYwMjMsLjg2MDIzLC44NjAyMywuODYwMjMsLjkyOTE1LC45MTExNSwuODg1OCwuODg1OCwuODg1OCwuODg1OCwuODg1OCwxLjAyMDU4LC44ODU4LC44OTU5MSwuODk1OTEsLjg5NTkxLC44OTU5MSwuODExMSwuNzk2MTEsLjg5NzEzLC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjkzNiwuODk2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuODQyMjQsLjg0MjI0LC44NDIyNCwuODQyMjQsLjk3Mjc2LC45OTc5MywuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsLjk4NzE0LDEuMDg1OTUsLjg5ODc2LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45OTA3NCwuOTQyLDEuMDIzMSwuOTQyLC45MTc1NSwuODY2NjcsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC45MjIyMiwuOTMzNzIsLjkyOTE1LDEuMDE0MTEsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLDEsMSwuOTAyODQsLjk5NzkzLC45MDk3NiwuOTk3OTMsLjg2MDIzLC44NDIyNCwuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLDEuMDUzMjYsLjg2MDIzLC44NDIyNCwuODI4NzMsMS4wNzQ2OSwuNzQsMS4wOTM3NywxLDEsLjkzOCwuODQ4NjksMS4wNjIyNiwxLDEsLjg0ODY5LC44MzcwNCwuODQ4NjksLjgxNDQxLC44NTU4OCwxLjA4OTI3LC45MTExNSwuOTk3OTMsMSwxLC45MTExNSwuOTk3OTMsLjkxODg3LC45MDk5MSwuOTk3OTMsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODg1OCwuOTg3MTQsLjg5NCwuOTE0MzQsLjc0NDk4LC45ODE5NiwxLDEsLjc0NDk4LC45ODE5NiwuNzM5MTQsLjc5MiwuNzM5MTQsLjc5MiwxLDEsLjczOTE0LC43OTIsMSwxLC44MTM2MywuOTA0LC44MTM2MywxLjE5MTM3LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTYzMywxLjAxOTE1LC44MTExLC45NDIsLjgxMTEsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsMSwuOTIyNDEsLjkxNzU1LC44NjY2NywuNzg4LC44NjkzNiwuODg1OCwuODk4NzYsMSwxLC44MTM2MywxLjE5MTM3LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDM4OCwxLjAzOTAxLC45MjEzOCwuNzgxMDUsLjcxNTQsLjg2MTY5LC44MDUxMywuOTQwMDcsLjgyNTI4LC45ODYxMiwxLjA2MjI2LC45MTc1NSwuODEyNiwuODE4ODQsLjkyODE5LC43Mzc2NCwuOTA1MzEsLjkwMjg0LC44ODU4LC44NjAyMywuODEyNiwuOTExNzIsLjk2NTE4LC45MTExNSwuODMwODksLjg4NTgsLjg3NzkxLC43OTc2MSwuODkyOTcsLjgxMzYzLC44ODE1NywuODk5OTIsLjg1NjA4LC44MTk5MiwuOTQzMDcsLjg2MDIzLC44ODE1NywuOTUzMDgsLjk4Njk5LC45OTc5MywxLjA2MjI2LC45NTgxNywuOTUzMDgsLjk3MzU4LC45MjgsLjk4MDg4LC45ODY5OSwuOTI3NjEsLjk5NzkzLC45NjAxNywxLjA2MjI2LC45ODYsLjk0NCwuOTU5NzgsLjkzOCwuOTY3MDUsLjk4NzE0LC44MDQ0MiwuOTg5NzIsMSwuODk3NjIsMS4wNDU1MiwuOTU4MTcsLjk5MDA3LC44NzA2NCwuOTE4NzksLjg4ODg4LDEuMDYyMjYsLjk1ODE3LC45ODcxNCwuOTU4MTcsLjg4ODg4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuOTIxOSwxLC44OTkwMywxLDEsMSwuOTMxNzMsLjkzMTczLC45MzE3MywxLDEuMDYzMDQsMS4wNjMwNCwxLjA2OTA0LC44OTkwMywuODk5MDMsLjgwNTQ5LDEsMS4xNTYsMSwxLC43NjU3NSwuNzY1NzUsMSwxLC43MjQ1OCwxLDEsMSwxLC45MjI0MSwxLDEsMSwuNjE5LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNzI1NywxLC43NDcwNSwuNzExMTksMS4wMjA1OCwxLjAyNCwxLjAyMTE5LDEsMSwxLjE1MzYsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTYzOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0Lk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TZWdvZXVpUmVndWxhck1ldHJpY3M9dC5TZWdvZXVpUmVndWxhckZhY3RvcnM9dC5TZWdvZXVpSXRhbGljTWV0cmljcz10LlNlZ29ldWlJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRGYWN0b3JzPXZvaWQgMCx0LlNlZ29ldWlCb2xkRmFjdG9ycz1bMS43NjczOCwxLDEsLjk5Mjk3LC45ODI0LDEuMDQwMTYsMS4wNjQ5NywxLjAzNDI0LC45NzUyOSwxLjE3NjQ3LDEuMjMyMDMsMS4xMDg1LDEuMTA4NSwxLjE2OTM5LDEuMjEwNywuOTc1NCwxLjIxNDA4LC45NzU0LDEuNTk1NzgsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwuODEzNzgsLjgxMzc4LDEuMjEwNywxLjIxMDcsMS4yMTA3LC43MTcwMywuOTc4NDcsLjk3MzYzLC44ODc3NiwuODY0MSwxLjAyMDk2LC43OTc5NSwuODUxMzIsLjkxNCwxLjA2MDg1LDEuMTQwNiwuODAwNywuODk4NTgsLjgzNjkzLDEuMTQ4ODksMS4wOTM5OCwuOTc0ODksLjkyMDk0LC45NzQ4OSwuOTAzOTksLjg0MDQxLC45NTkyMywxLjAwMTM1LDEsMS4wNjQ2NywuOTgyNDMsLjkwOTk2LC45OTM2MSwxLjEwODUsMS41Njk0MiwxLjEwODUsMS4yMTA3LC43NDYyNywuOTQyODIsLjk2NzUyLDEuMDE1MTksLjg2MzA0LDEuMDEzNTksLjk3Mjc4LDEuMTUxMDMsMS4wMTM1OSwuOTg1NjEsMS4wMjI4NSwxLjAyMjg1LDEuMDA1MjcsMS4wMjI4NSwxLjAzMDIsLjk5MDQxLDEuMDAwOCwxLjAxNTE5LDEuMDEzNTksMS4wMjI1OCwuNzkxMDQsMS4xNjg2MiwuOTkwNDEsLjk3NDU0LDEuMDI1MTEsLjk5Mjk4LC45Njc1MiwuOTU4MDEsLjk0ODU2LDEuMTY1NzksLjk0ODU2LDEuMjEwNywuOTgyNCwxLjAzNDI0LDEuMDM0MjQsMSwxLjAzNDI0LDEuMTY1NzksLjg3MjcsMS4zODcxLDEuMTg2MjIsMS4xMDgxOCwxLjA0NDc4LDEuMjEwNywxLjE4NjIyLC43NTE1NSwuOTQ5OTQsMS4yODgyNiwxLjIxNDA4LDEuMjE0MDgsLjkxMDU2LDEsLjkxNTcyLC45NzU0LC42NDY2MywxLjE4MzI4LDEuMjQ4NjYsMS4wNDQ3OCwxLjE0MTY5LDEuMTU3NDksMS4xNzM4OSwuNzE3MDMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjkzNTA2LC44NjQxLC43OTc5NSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wMjA5NiwxLjA5Mzk4LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsMS4yMTA3LC45NzQ4OSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MDk5NiwuOTIwOTQsMS4wMjc5OCwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTMxMzYsLjg2MzA0LC45NzI3OCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LC45NzEyMiwuOTkwNDEsMSwxLDEsMSwxLDEuMjg4MjYsMS4wMDA4LC45OTA0MSwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTY3NTIsMS4wMTUxOSwuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LDEuMDIwOTYsMS4wMzA1NywxLjAyMDk2LDEuMDM1MTcsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LDEsMSwxLjA2MDg1LC45ODU2MSwxLjA2MDg1LDEuMDA4NzksMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsLjk3MTM4LDEuMDg2OTIsLjgwMDcsMS4wMjI4NSwxLDEsMS4wMDUyNywuODM2OTMsMS4wMjI4NSwxLDEsLjgzNjkzLC45NDU1LC44MzY5MywuOTA0MTgsLjgzNjkzLDEuMTMwMDUsMS4wOTM5OCwuOTkwNDEsMSwxLDEuMDkzOTgsLjk5MDQxLC45NjY5MiwxLjA5MjUxLC45OTA0MSwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTM5OTQsLjk3OTMxLC45MDM5OSwxLjAyMjU4LDEsMSwuOTAzOTksMS4wMjI1OCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LDEsMSwuOTU5MjMsMS4wNzAzNCwuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwuOTA5OTYsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsMS4wNzczMywxLjAzNDI0LC45NzM2MywuOTY3NTIsLjkzNTA2LC45MzEzNiwuOTc0ODksMS4wMDA4LDEsMSwuOTU5MjMsMS4xNjg2MiwxLjE1MTAzLDEuMTUxMDMsMS4wMTE3MywxLjAzOTU5LC43NTk1MywuODEzNzgsLjc5OTEyLDEuMTUxMDMsMS4yMTk5NCwuOTUxNjEsLjg3ODE1LDEuMDExNDksLjgxNTI1LC43Njc2LC45ODE2NywxLjAxMTM0LDEuMDI1NDYsLjg0MDk3LDEuMDMwODksMS4xODEwMiwuOTczNjMsLjg4Nzc2LC44NTEzNCwuOTc4MjYsLjc5Nzk1LC45OTM2MSwxLjA2MDg1LC45NzQ4OSwxLjE0MDYsLjg5ODU4LDEuMDM4OCwxLjE0ODg5LDEuMDkzOTgsLjg2MDM5LC45NzQ4OSwxLjA1OTUsLjkyMDk0LC45NDc5MywuOTU5MjMsLjkwOTk2LC45OTM0NiwuOTgyNDMsMS4wMjExMiwuOTU0OTMsMS4xNDA2LC45MDk5NiwxLjAzNTc0LDEuMDI1OTcsMS4wMDA4LDEuMTgxMDIsMS4wNjYyOCwxLjAzNTc0LDEuMDE5MiwxLjAxOTMyLDEuMDA4ODYsLjk3NTMxLDEuMDEwNiwxLjAwMDgsMS4xMzE4OSwxLjE4MTAyLDEuMDIyNzcsLjk4NjgzLDEuMDAxNiwuOTk1NjEsMS4wNzIzNywxLjAwMDgsLjkwNDM0LC45OTkyMSwuOTM4MDMsLjg5NjUsMS4yMzA4NSwxLjA2NjI4LDEuMDQ5ODMsLjk2MjY4LDEuMDQ5OSwuOTg0MzksMS4xODEwMiwxLjA2NjI4LDEuMDAwOCwxLjA2NjI4LC45ODQzOSwuNzk3OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTQ2NiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTcyNzgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMjA2NSwxLDEsMSwxLDEsMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLDEsMS4yMTQwOCwuODk5MDMsMSwxLC43NTE1NSwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43MzA0NywuNzMwNDcsMS4yMDY0MiwuOTEyMTEsMS4yNTYzNSwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMTI0NTQsLjkzNTAzLDEuMDM0MjQsMS4xOTY4NywxLjAzNDI0LDEsMSwxLC43NzEsMSwxLDEuMTU3NDksMS4xNTc0OSwxLjE1NzQ5LDEuMTA5NDgsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4xNjg5NywxLC45NjA4NSwuOTAxMzcsMS4yMTA3LDEuMTg0MTYsMS4xMzk3MywuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTE3MiwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4ODc0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4wOTE5MywxLjA5MTkzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LlNlZ29ldWlCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjAzOTU5LDEuMDQwMTYsMS4wMjgwOSwxLjAzNiwuOTc2MzksMS4xMDk1MywxLjIzMjAzLDEuMTExNDQsMS4xMTE0NCwxLjE2OTM5LDEuMjEyMzcsLjk3NTQsMS4yMTI2MSwuOTc1NCwxLjU5NzU0LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LC44MTM3OCwuODEzNzgsMS4yMTIzNywxLjIxMjM3LDEuMjEyMzcsLjczNTQxLC45Nzg0NywuOTczNjMsLjg5NzIzLC44Nzg5NywxLjA0MjYsLjc5NDI5LC44NTI5MiwuOTExNDksMS4wNTgxNSwxLjE0MDYsLjc5NjMxLC45MDEyOCwuODM4NTMsMS4wNDM5NiwxLjEwNjE1LC45NzU1MiwuOTQ0MzYsLjk3NTUyLC44ODY0MSwuODA1MjcsLjk2MDgzLDEuMDAxMzUsMSwxLjA2Nzc3LC45ODE3LC45MTE0MiwuOTkzNjEsMS4xMTE0NCwxLjU3MjkzLDEuMTExNDQsMS4yMTIzNywuNzQ2MjcsMS4zMTgxOCwxLjA2NTg1LC45NzA0MiwuODMwNTUsLjk3MDQyLC45MzUwMywxLjEyNjEsLjk3MDQyLC45NzkyMiwxLjE0MjM2LC45NDU1MiwxLjAxMDU0LDEuMTQyMzYsMS4wMjQ3MSwuOTc5MjIsLjk0MTY1LC45NzA0MiwuOTcwNDIsMS4wMjc2LC43ODkyOSwxLjEyNjEsLjk3OTIyLC45NTg3NCwxLjAyMTk3LC45ODUwNywuOTY3NTIsLjk3MTY4LC45NTEwNywxLjE2NTc5LC45NTEwNywxLjIxMjM3LDEuMDM5NTksMS4wMzYsMS4wMzYsMSwxLjAzNiwxLjE2NTc5LC44NzM1NywxLjMxODE4LDEuMTg3NTQsMS4yNjc4MSwxLjA1MzU2LDEuMjEyMzcsMS4xODYyMiwuNzk0ODcsLjk0OTk0LDEuMjkwMDQsMS4yNDA0NywxLjI0MDQ3LDEuMzE4MTgsMSwuOTE0ODQsLjk3NTQsMS4zMTgxOCwxLjEzNDksMS4yNDg2NiwxLjA1MzU2LDEuMTM5MzQsMS4xNTU3NCwxLjE3Mzg5LC43MzU0MSwuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTQzODUsLjg3ODk3LC43OTQyOSwuNzk0MjksLjc5NDI5LC43OTQyOSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wNDI2LDEuMTA2MTUsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwxLjIxMjM3LC45NzU1MiwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MTE0MiwuOTQ0MzYsLjk4NzIxLDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LC45NjcwNSwuODMwNTUsLjkzNTAzLC45MzUwMywuOTM1MDMsLjkzNTAzLDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsLjkzMTI1LC45NzkyMiwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LDEuMjkwMDQsLjk0MTY1LC45NzkyMiwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTY3NTIsLjk3MDQyLC45Njc1MiwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LDEuMDQyNiwxLjAwMzMsMS4wNDI2LC45NzA0MiwuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsMSwxLDEuMDU4MTUsLjk3OTIyLDEuMDU4MTUsLjk3OTIyLDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LC45NzQ0MSwxLjA0MzAyLC43OTYzMSwxLjAxNTgyLDEsMSwxLjAxMDU0LC44Mzg1MywxLjE0MjM2LDEsMSwuODM4NTMsMS4wOTEyNSwuODM4NTMsLjkwNDE4LC44Mzg1MywxLjE5NTA4LDEuMTA2MTUsLjk3OTIyLDEsMSwxLjEwNjE1LC45NzkyMiwxLjAxMDM0LDEuMTA0NjYsLjk3OTIyLC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45MTYwMiwuOTE5ODEsLjg4NjQxLDEuMDI3NiwxLDEsLjg4NjQxLDEuMDI3NiwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LDEsMSwuOTYwODMsMS4wNTQwMywuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwuOTExNDIsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsMS4yMzE5OSwxLjAzNiwuOTczNjMsMS4wNjU4NSwuOTQzODUsLjk2NzA1LC45NzU1MiwuOTQxNjUsMSwxLC45NjA4MywxLjEyNjEsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsLjk1MTYxLDEuMjcxMjYsMS4wMDgxMSwuODMyODQsLjc3NzAyLC45OTEzNywuOTUyNTMsMS4wMzQ3LC44NjE0MiwxLjA3MjA1LDEuMTQyMzYsLjk3MzYzLC44OTcyMywuODY4NjksMS4wOTgxOCwuNzk0MjksLjk5MzYxLDEuMDU4MTUsLjk3NTUyLDEuMTQwNiwuOTAxMjgsMS4wNjY2MiwxLjA0Mzk2LDEuMTA2MTUsLjg0OTE4LC45NzU1MiwxLjA0Njk0LC45NDQzNiwuOTgwMTUsLjk2MDgzLC45MTE0MiwxLjAwMzU2LC45ODE3LDEuMDE5NDUsLjk4OTk5LDEuMTQwNiwuOTExNDIsMS4wNDk2MSwuOTg5OCwxLjAwNjM5LDEuMTQyMzYsMS4wNzUxNCwxLjA0OTYxLC45OTYwNywxLjAyODk3LDEuMDA4LC45ODk4LC45NTEzNCwxLjAwNjM5LDEuMTExMjEsMS4xNDIzNiwxLjAwNTE4LC45Nzk4MSwxLjAyMTg2LDEsMS4wODU3OCwuOTQxNjUsLjk5MzE0LC45ODM4NywuOTMwMjgsLjkzMzc3LDEuMzUxMjUsMS4wNzUxNCwxLjEwNjg3LC45MzQ5MSwxLjA0MjMyLDEuMDAzNTEsMS4xNDIzNiwxLjA3NTE0LC45NDE2NSwxLjA3NTE0LDEuMDAzNTEsLjc5NDI5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDkwOTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkzNTAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NjYwOSwxLDEsMSwxLDEsMSwxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLDEsMS4yMTI2MSwuODk5MDMsMSwxLC43NTE1NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43Mjk1OSwuNzI5NTksMS4yMDUwMiwuOTE0MDYsMS4yNjUxNCwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMDkxMjUsLjkzMzI3LDEuMDMzMzYsMS4xNjU0MSwxLjAzNiwxLDEsMSwuNzcxLDEsMSwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LC44NjM2NCwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYyMjQsMSwxLDEuMTY3OTgsMSwuOTYwODUsLjkwMDY4LDEuMjEyMzcsMS4xODQxNiwxLjEzOTA0LC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMzM5LDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg3NzUsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEzMjY5LDEuMTMyNjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfSx0LlNlZ29ldWlJdGFsaWNGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTg5NDYsMS4xNDc2MywxLjA1MzY1LDEuMDYyMzQsLjk2OTI3LC45MjU4NiwxLjE1MzczLDEuMTg0MTQsLjkxMzQ5LC45MTM0OSwxLjA3NDAzLDEuMTczMDgsLjc4MzgzLDEuMjAwODgsLjc4MzgzLDEuNDI1MzEsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODM4MywuNzgzODMsMS4xNzMwOCwxLjE3MzA4LDEuMTczMDgsLjc3MzQ5LC45NDU2NSwuOTQ3MjksLjg1OTQ0LC44ODUwNiwuOTg1OCwuNzQ4MTcsLjgwMDE2LC44ODQ0OSwuOTgwMzksLjk1NzgyLC42OTIzOCwuODk4OTgsLjgzMjMxLC45ODE4MywxLjAzOTg5LC45NjkyNCwuODYyMzcsLjk2OTI0LC44MDU5NSwuNzQ1MjQsLjg2MDkxLC45NTQwMiwuOTQxNDMsLjk4NDQ4LC44ODU4LC44MzA4OSwuOTMyODUsMS4wOTQ5LDEuMzkwMTYsMS4wOTQ5LDEuNDU5OTQsLjc0NjI3LDEuMDQ4MzksLjk3NDU0LC45NzQ1NCwuODcyMDcsLjk3NDU0LC44NzUzMywxLjA2MTUxLC45NzQ1NCwxLjAwMTc2LDEuMTY0ODQsMS4wODEzMiwuOTgwNDcsMS4xNjQ4NCwxLjAyOTg5LDEuMDEwNTQsLjk2MjI1LC45NzQ1NCwuOTc0NTQsMS4wNjU5OCwuNzkwMDQsMS4xNjM0NCwxLjAwMzUxLC45NDYyOSwuOTk3MywuOTEwMTYsLjk2Nzc3LC45MDQzLC45MTA4MiwuOTI0ODEsLjkxMDgyLDEuMTczMDgsLjk1NzQ4LC45NjkyNywuOTY5MjcsMSwuOTY5MjcsLjkyNDgxLC44MDU5NywxLjA0ODM5LDEuMjMzOTMsMS4xNzgxLC45MjQ1LDEuMTczMDgsMS4yMDgwOCwuNjMyMTgsLjk0MjYxLDEuMjQ4MjIsMS4wOTk3MSwxLjA5OTcxLDEuMDQ4MzksMSwuODUyNzMsLjc4MDMyLDEuMDQ4MzksMS4wOTk3MSwxLjIyMzI2LC45MjQ1LDEuMDk4MzYsMS4xMzUyNSwxLjE1MjIyLC43MDQyNCwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuODU0OTgsLjg4NTA2LC43NDgxNywuNzQ4MTcsLjc0ODE3LC43NDgxNywuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk4NTgsMS4wMzk4OSwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTczMDgsLjk2OTI0LC45NTQwMiwuOTU0MDIsLjk1NDAyLC45NTQwMiwuODMwODksLjg2MjM3LC44ODQwOSwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTI5MTYsLjg3MjA3LC44NzUzMywuODc1MzMsLjg3NTMzLC44NzUzMywuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTMxNDYsLjkzODU0LDEuMDEwNTQsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LC45NjIyNSwxLjI0ODIyLC44NzYxLDEuMDAzNTEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsLjk2Nzc3LC45NzQ1NCwuOTY3NzcsLjk0NzI5LC45NzQ1NCwuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuOTg1OCwuOTUzOTEsLjk4NTgsLjk3NDU0LC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuODg0NDksLjk3NDU0LC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwxLDEsLjk4MDM5LDEuMDAxNzYsLjk4MDM5LDEuMDAxNzYsLjk1NzgyLC45MzE0NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLDEuMTY0ODQsLjk1NzgyLC45MzE0NiwuODQ0MjEsMS4xMjc2MSwuNjkyMzgsMS4wODEzMiwxLDEsLjk4MDQ3LC44MzIzMSwxLjE2NDg0LDEsMSwuODQ3MjMsMS4wNDg2MSwuODQ3MjMsLjc4NzU1LC44MzIzMSwxLjIzNzM2LDEuMDM5ODksMS4wMTA1NCwxLDEsMS4wMzk4OSwxLjAxMDU0LC45ODU3LDEuMDM4NDksMS4wMTA1NCwuOTY5MjQsLjk2MjI1LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTIzODMsLjkwMTcxLC44MDU5NSwxLjA2NTk4LDEsMSwuODA1OTUsMS4wNjU5OCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LDEsMSwuODYwOTEsMS4wMjc1OSwuODU3NzEsMS4xNjM0NCwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTg0NDgsLjk5NzMsLjgzMDg5LC45Njc3NywuODMwODksLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywuOTMyODUsLjkwNDMsMS4zMTg2OCwuOTY5MjcsLjk0NzI5LC45NzQ1NCwuODU0OTgsLjkyOTE2LC45NjkyNCwuODc2MSwxLDEsLjg2MDkxLDEuMTYzNDQsMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksLjgxOTY1LC44MTk2NSwuOTQ3MjksLjc4MDMyLC43MTAyMiwuOTA4ODMsLjg0MTcxLC45OTg3NywuNzc1OTYsMS4wNTczNCwxLjIsLjk0NzI5LC44NTk0NCwuODI3OTEsLjk2MDcsLjc0ODE3LC45MzI4NSwuOTgwMzksLjk2OTI0LC45NTc4MiwuODk4OTgsLjk4MzE2LC45ODE4MywxLjAzOTg5LC43ODYxNCwuOTY5MjQsLjk3NjQyLC44NjIzNywuODYwNzUsLjg2MDkxLC44MzA4OSwuOTAwODIsLjg4NTgsLjk3Mjk2LDEuMDEyODQsLjk1NzgyLC44MzA4OSwxLjA5NzYsMS4wNCwxLjAzMzQyLDEuMiwxLjA2NzUsMS4wOTc2LC45ODIwNSwxLjAzODA5LDEuMDUwOTcsMS4wNCwuOTUzNjQsMS4wMzM0MiwxLjA1NDAxLDEuMiwxLjAyMTQ4LDEuMDExOSwxLjA0NzI0LDEuMDEyNywxLjAyNzMyLC45NjIyNSwuODk2NSwuOTc3ODMsLjkzNTc0LC45NDgxOCwxLjMwNjc5LDEuMDY3NSwxLjExODI2LC45OTgyMSwxLjA1NTcsMS4wMzI2LDEuMiwxLjA2NzUsLjk2MjI1LDEuMDY3NSwxLjAzMjYsLjc0ODE3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDM3NTQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3NTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45ODcwNSwxLDEsMSwxLDEsMSwuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwuOTQ5NDUsMS4xMjMxNywxLjEyMzE3LDEuMTIzMTcsLjY3NjAzLC42NzYwMywxLjE1NjIxLC43MzU4NCwxLjIxMTkxLDEuMjIxMzUsMS4wNjQ4MywuOTQ4NjgsLjk0ODY4LC45NTk5NiwxLjI0NjMzLDEsMS4wNzQ5NywuODc3MDksLjk2OTI3LDEuMDE0NzMsLjk2OTI3LDEsMSwxLC43NzI5NSwxLDEsMS4wOTgzNiwxLjA5ODM2LDEuMDk4MzYsMS4wMTUyMiwuODYzMjEsLjk0NDM0LC44NjQ5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjQzOCwxLjE3MzA4LDEuMTg0MTYsMS4xNDU4OSwuNjk4MjUsLjk3NjIyLDEuOTY3OTEsMS4yNDgyMiwxLjI0ODIyLDEuMTczMDgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xNzk4NCwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA3NDIsMS4xMDc0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5TZWdvZXVpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpUmVndWxhckZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODU5NCwxLjAyMjg1LDEuMTA0NTQsMS4wNjIzNCwuOTY5MjcsLjkyMDM3LDEuMTk5ODUsMS4yMDQ2LC45MDYxNiwuOTA2MTYsMS4wNzE1MiwxLjE3MTQsLjc4MDMyLDEuMjAwODgsLjc4MDMyLDEuNDAyNDYsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODAzMiwuNzgwMzIsMS4xNzE0LDEuMTcxNCwxLjE3MTQsLjgwNTk3LC45NDA4NCwuOTY3MDYsLjg1OTQ0LC44NTczNCwuOTcwOTMsLjc1ODQyLC43OTkzNiwuODgxOTgsLjk4MzEsLjk1NzgyLC43MTM4NywuODY5NjksLjg0NjM2LDEuMDc3OTYsMS4wMzU4NCwuOTY5MjQsLjgzOTY4LC45NjkyNCwuODI4MjYsLjc5NjQ5LC44NTc3MSwuOTUxMzIsLjkzMTE5LC45ODk2NSwuODg0MzMsLjgyODcsLjkzMzY1LDEuMDg2MTIsMS4zNjM4LDEuMDg2MTIsMS40NTc4NiwuNzQ2MjcsLjgwNDk5LC45MTQ4NCwxLjA1NzA3LC45MjM4MywxLjA1ODgyLC45NDAzLDEuMTI2NTQsMS4wNTg4MiwxLjAxNzU2LDEuMDkwMTEsMS4wOTAxMSwuOTk0MTQsMS4wOTAxMSwxLjAzNCwxLjAxNzU2LDEuMDUzNTYsMS4wNTcwNywxLjA1ODgyLDEuMDQzOTksLjg0ODYzLDEuMjE5NjgsMS4wMTc1NiwuOTU4MDEsMS4wMDA2OCwuOTE3OTcsLjk2Nzc3LC45MDQzLC45MDM1MSwuOTIxMDUsLjkwMzUxLDEuMTcxNCwuODUzMzcsLjk2OTI3LC45NjkyNywuOTk5MTIsLjk2OTI3LC45MjEwNSwuODA1OTcsMS4yNDM0LDEuMjA4MDgsMS4wNTkzNywuOTA5NTcsMS4xNzE0LDEuMjA4MDgsLjc1MTU1LC45NDI2MSwxLjI0NjQ0LDEuMDk5NzEsMS4wOTk3MSwuODQ3NTEsMSwuODUyNzMsLjc4MDMyLC42MTU4NCwxLjA1NDI1LDEuMTc5MTQsLjkwOTU3LDEuMDg2NjUsMS4xMTU5MywxLjE0MTY5LC43MzM4MSwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuODYwMzUsLjg1NzM0LC43NTg0MiwuNzU4NDIsLjc1ODQyLC43NTg0MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk3MDkzLDEuMDM1ODQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MTQsLjk2OTI0LC45NTEzMiwuOTUxMzIsLjk1MTMyLC45NTEzMiwuODI4NywuODM5NjgsLjg5MDQ5LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MzU3NSwuOTIzODMsLjk0MDMsLjk0MDMsLjk0MDMsLjk0MDMsLjg3MTcsLjg3MTcsLjg3MTcsLjg3MTcsMS4wMDUyNywxLjAxNzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjI0NjQ0LC45NTkyMywxLjAxNzU2LDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LC45Njc3NywxLjA1NzA3LC45Njc3NywuOTY3MDYsLjkxNDg0LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC45NzA5MywxLjA5NjksLjk3MDkzLDEuMDU4ODIsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwxLDEsLjk4MzEsMS4wMTc1NiwuOTgzMSwxLjAxNzU2LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLC44NzE3LC45NTc4MiwxLjA5MDExLC45NTc4MiwuODcxNywuODQ3ODQsMS4xMTU1MSwuNzEzODcsMS4wOTAxMSwxLDEsLjk5NDE0LC44NDYzNiwxLjA5MDExLDEsMSwuODQ2MzYsMS4wNTM2LC44NDYzNiwuOTQyOTgsLjg0NjM2LDEuMjMyOTcsMS4wMzU4NCwxLjAxNzU2LDEsMSwxLjAzNTg0LDEuMDE3NTYsMS4wMDMyMywxLjAzNDQ0LDEuMDE3NTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjkzMDY2LC45ODI5MywuODI4MjYsMS4wNDM5OSwxLDEsLjgyODI2LDEuMDQzOTksLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywxLDEsLjg1NzcxLDEuMTczMTgsLjg1NzcxLDEuMjE5NjgsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LC44Mjg3LC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsLjkzMzY1LC45MDQzLDEuMDg1NzEsLjk2OTI3LC45NjcwNiwuOTE0ODQsLjg2MDM1LC45MzU3NSwuOTY5MjQsLjk1OTIzLDEsMSwuODU3NzEsMS4yMTk2OCwxLjExNDM3LDEuMTE0MzcsLjkzMTA5LC45MTIwMiwuNjA0MTEsLjg0MTY0LC41NTU3MiwxLjAxMTczLC45NzM2MSwuODE4MTgsLjgxODE4LC45NjYzNSwuNzgwMzIsLjcyNzI3LC45MjM2NiwuOTg2MDEsMS4wMzQwNSwuNzc5NjgsMS4wOTc5OSwxLjIsLjk2NzA2LC44NTk0NCwuODU2MzgsLjk2NDkxLC43NTg0MiwuOTMzNjUsLjk4MzEsLjk2OTI0LC45NTc4MiwuODY5NjksLjk0MTUyLDEuMDc3OTYsMS4wMzU4NCwuNzg0MzcsLjk2OTI0LC45ODcxNSwuODM5NjgsLjgzNDkxLC44NTc3MSwuODI4NywuOTQ0OTIsLjg4NDMzLC45Mjg3LDEuMDA5OCwuOTU3ODIsLjgyODcsMS4wNjI1LC45ODI0OCwxLjAzNDI0LDEuMiwxLjAxMDcxLDEuMDYyNSwuOTUyNDYsMS4wMzgwOSwxLjA0OTEyLC45ODI0OCwxLjAwMjIxLDEuMDM0MjQsMS4wNTQ0MywxLjIsMS4wNDc4NSwuOTk2MDksMS4wMDE2OSwxLjA1MTc2LC45OTM0NiwxLjA1MzU2LC45MDg3LDEuMDMwMDQsLjk1NTQyLC45MzExNywxLjIzMzYyLDEuMDEwNzEsMS4wNzgzMSwxLjAyNTEyLDEuMDUyMDUsMS4wMzUwMiwxLjIsMS4wMTA3MSwxLjA1MzU2LDEuMDEwNzEsMS4wMzUwMiwuNzU4NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzcxOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0MDIxLDEsMSwxLDEsMSwxLC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC44Mjg3LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wMzA3NywxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjEzMTk2LDEuMTMxOTYsMS4xMzE5NiwuNjc0MjgsLjY3NDI4LDEuMTYwMzksLjczMjkxLDEuMjA5OTYsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44Nzc5NiwuOTY5MjcsMS4wMTUxOCwuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjEwNTM5LDEuMTA1MzksMS4xMTM1OCwxLjA2OTY3LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjUwNywxLjE3MTQsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njk3LDEuMjQ4MjIsMS4yNDgyMiwxLjE3MjM4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTgwODMsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwOTM4LDEuMTA5MzgsMSwxLDEsMS4wNTQyNSwxLjA5OTcxLDEuMDk5NzEsMS4wOTk3MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvc3RTY3JpcHRFdmFsdWF0b3I9dC5Qb3N0U2NyaXB0Q29tcGlsZXI9dC5QREZGdW5jdGlvbkZhY3Rvcnk9dm9pZCAwLHQuaXNQREZGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdDtpZigib2JqZWN0IiE9PWcoZSkpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIG4uRGljdCl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9O3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE4Nyksbz1yKDEzNikscz1yKDE4OCk7ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZihlKTtpZih0KXt2YXIgYT1mKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWcodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9ZnVuY3Rpb24gaChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gcChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3AoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIHAoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWcoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1nKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gbShlLHQscil7cmV0dXJuIHQmJnkoZS5wcm90b3R5cGUsdCksciYmeShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQueHJlZixuPXQuaXNFdmFsU3VwcG9ydGVkLGE9dm9pZCAwPT09bnx8bjt2KHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT1hfXJldHVybiBtKGUsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlKHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm46ZSBpbnN0YW5jZW9mIG4uUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7cmV0dXJuIHRoaXMuX2NhY2hlKGUscikscn19LHtrZXk6ImNyZWF0ZUZyb21BcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplIGluc3RhbmNlb2Ygbi5SZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTtyZXR1cm4gdGhpcy5fY2FjaGUoZSxyKSxyfX0se2tleToiZ2V0Q2FjaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihlIGluc3RhbmNlb2Ygbi5SZWY/dD1lOmUgaW5zdGFuY2VvZiBuLkRpY3Q/dD1lLm9iaklkOmUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJih0PWUuZGljdCYmZS5kaWN0Lm9iaklkKSx0KXt2YXIgcj10aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYodCk7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH19LHtrZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ1BERkZ1bmN0aW9uRmFjdG9yeS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkRnVuY3Rpb24iIGFyZ3VtZW50LicpO3ZhciByO2UgaW5zdGFuY2VvZiBuLlJlZj9yPWU6ZSBpbnN0YW5jZW9mIG4uRGljdD9yPWUub2JqSWQ6ZSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmKHI9ZS5kaWN0JiZlLmRpY3Qub2JqSWQpLHImJnRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5zZXQobnVsbCxyLHQpfX0se2tleToiX2xvY2FsRnVuY3Rpb25DYWNoZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9sb2NhbEZ1bmN0aW9uQ2FjaGUiLG5ldyBzLkxvY2FsRnVuY3Rpb25DYWNoZSl9fV0pLGV9KCk7ZnVuY3Rpb24gdyhlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZS5sZW5ndGgscj0wO3I8dDtyKyspaWYoIm51bWJlciIhPXR5cGVvZiBlW3JdKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGE9MDthPHQ7YSsrKW5bYV09K2VbYV07cmV0dXJuIG59cmV0dXJuIGV9dC5QREZGdW5jdGlvbkZhY3Rvcnk9Yjt2YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2KHRoaXMsZSl9cmV0dXJuIG0oZSxudWxsLFt7a2V5OiJnZXRTYW1wbGVBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvPTE7Zm9yKGE9MCxpPWUubGVuZ3RoO2E8aTthKyspbyo9ZVthXTtvKj10O3ZhciBzPW5ldyBBcnJheShvKSxjPTAsdT0wLGw9MS8oTWF0aC5wb3coMixyKS0xKSxmPW4uZ2V0Qnl0ZXMoKG8qcis3KS84KSxoPTA7Zm9yKGE9MDthPG87YSsrKXtmb3IoO2M8cjspdTw8PTgsdXw9ZltoKytdLGMrPTg7Yy09cixzW2FdPSh1Pj5jKSpsLHUmPSgxPDxjKS0xfXJldHVybiBzfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuaXNFdmFsU3VwcG9ydGVkLG49ZS5mbixpPW4uZGljdHx8bjtzd2l0Y2goaS5nZXQoIkZ1bmN0aW9uVHlwZSIpKXtjYXNlIDA6cmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm4sZGljdDppfSk7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixkaWN0Oml9KTtjYXNlIDM6cmV0dXJuIHRoaXMuY29uc3RydWN0U3RpY2hlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGRpY3Q6aX0pO2Nhc2UgNDpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0KHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46bixkaWN0Oml9KX10aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uIil9fSx7a2V5OiJwYXJzZUFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZm5PYmo7aWYoIUFycmF5LmlzQXJyYXkobikpcmV0dXJuIHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjpufSk7dmFyIGEsaT1bXSxvPWgobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlO2kucHVzaCh0aGlzLnBhcnNlKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46dC5mZXRjaElmUmVmKHMpfSkpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBhPTAsbz1pLmxlbmd0aDthPG87YSsrKWlbYV0oZSx0LHIsbithKX19fSx7a2V5OiJjb25zdHJ1Y3RTYW1wbGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7dmFyIHQ9ZS5mbixyPWUuZGljdDtmdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVtdLG49MCxhPTA7YTx0O2ErPTIpcltuKytdPVtlW2FdLGVbYSsxXV07cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQscixuLGEpe3JldHVybiBuKyhhLW4pLyhyLXQpKihlLXQpfXZhciBvPXcoci5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhyLmdldEFycmF5KCJSYW5nZSIpKTtpZighb3x8IXMpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiBvciByYW5nZSIpO3ZhciBjPW8ubGVuZ3RoLzIsdT1zLmxlbmd0aC8yO289bihvKSxzPW4ocyk7dmFyIGw9dyhyLmdldEFycmF5KCJTaXplIikpLGY9ci5nZXQoIkJpdHNQZXJTYW1wbGUiKSxoPXIuZ2V0KCJPcmRlciIpfHwxOzEhPT1oJiYoMCxhLmluZm8pKCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogIitoKTt2YXIgZD13KHIuZ2V0QXJyYXkoIkVuY29kZSIpKTtpZihkKWQ9bihkKTtlbHNle2Q9W107Zm9yKHZhciBwPTA7cDxjOysrcClkLnB1c2goWzAsbFtwXS0xXSl9dmFyIGc9dyhyLmdldEFycmF5KCJEZWNvZGUiKSk7Zz1nP24oZyk6czt2YXIgdj10aGlzLmdldFNhbXBsZUFycmF5KGwsdSxmLHQpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxmLGg9MTw8YyxwPW5ldyBGbG9hdDY0QXJyYXkoaCkseT1uZXcgVWludDMyQXJyYXkoaCk7Zm9yKGY9MDtmPGg7ZisrKXBbZl09MTt2YXIgbT11LGI9MTtmb3IoYT0wO2E8YzsrK2Epe3ZhciB3PW9bYV1bMF0saz1vW2FdWzFdLFM9aShNYXRoLm1pbihNYXRoLm1heChlW3QrYV0sdyksayksdyxrLGRbYV1bMF0sZFthXVsxXSkseD1sW2FdLE89KFM9TWF0aC5taW4oTWF0aC5tYXgoUywwKSx4LTEpKTx4LTE/TWF0aC5mbG9vcihTKTpTLTEsQT1PKzEtUyxDPVMtTyxGPU8qbSxQPUYrbTtmb3IoZj0wO2Y8aDtmKyspZiZiPyhwW2ZdKj1DLHlbZl0rPVApOihwW2ZdKj1BLHlbZl0rPUYpO20qPXgsYjw8PTF9Zm9yKGY9MDtmPHU7KytmKXt2YXIgVD0wO2ZvcihhPTA7YTxoO2ErKylUKz12W3lbYV0rZl0qcFthXTtUPWkoVCwwLDEsZ1tmXVswXSxnW2ZdWzFdKSxyW24rZl09TWF0aC5taW4oTWF0aC5tYXgoVCxzW2ZdWzBdKSxzW2ZdWzFdKX19fX0se2tleToiY29uc3RydWN0SW50ZXJwb2xhdGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7Zm9yKHZhciB0PWUuZGljdCxyPXcodC5nZXRBcnJheSgiQzAiKSl8fFswXSxuPXcodC5nZXRBcnJheSgiQzEiKSl8fFsxXSxhPXQuZ2V0KCJOIiksaT1bXSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWkucHVzaChuW29dLXJbb10pO3ZhciBjPWkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlLHQsbixvKXtmb3IodmFyIHM9MT09PWE/ZVt0XTpNYXRoLnBvdyhlW3RdLGEpLHU9MDt1PGM7Kyt1KW5bbyt1XT1yW3VdK3MqaVt1XX19fSx7a2V5OiJjb25zdHJ1Y3RTdGljaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZGljdCxpPXcobi5nZXRBcnJheSgiRG9tYWluIikpO2lmKCFpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyBkb21haW4iKTtpZigxIT1pLmxlbmd0aC8yKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uIik7dmFyIG8scz1bXSxjPWgobi5nZXQoIkZ1bmN0aW9ucyIpKTt0cnl7Zm9yKGMucygpOyEobz1jLm4oKSkuZG9uZTspe3ZhciB1PW8udmFsdWU7cy5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjp0LmZldGNoSWZSZWYodSl9KSl9fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXZhciBsPXcobi5nZXRBcnJheSgiQm91bmRzIikpLGY9dyhuLmdldEFycmF5KCJFbmNvZGUiKSksZD1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxvPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT5yP2U9cjplPHQmJihlPXQpLGV9KGVbdF0saVswXSxpWzFdKSxjPWwubGVuZ3RoO2ZvcihhPTA7YTxjJiYhKG88bFthXSk7KythKTt2YXIgdT1pWzBdO2E+MCYmKHU9bFthLTFdKTt2YXIgaD1pWzFdO2E8bC5sZW5ndGgmJihoPWxbYV0pO3ZhciBwPWZbMiphXSxnPWZbMiphKzFdO2RbMF09dT09PWg/cDpwKyhvLXUpKihnLXApLyhoLXUpLHNbYV0oZCwwLHIsbil9fX0se2tleToiY29uc3RydWN0UG9zdFNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS54cmVmO3ZhciB0PWUuaXNFdmFsU3VwcG9ydGVkLHI9ZS5mbixuPWUuZGljdCxvPXcobi5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhuLmdldEFycmF5KCJSYW5nZSIpKTtpZighbyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gZG9tYWluLiIpO2lmKCFzKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyByYW5nZS4iKTt2YXIgYz1uZXcgaS5Qb3N0U2NyaXB0TGV4ZXIociksdT1uZXcgaS5Qb3N0U2NyaXB0UGFyc2VyKGMpLnBhcnNlKCk7aWYodCYmYS5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBsPShuZXcgUikuY29tcGlsZSh1LG8scyk7aWYobClyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIsbCl9KDAsYS5pbmZvKSgiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTt2YXIgZj1zLmxlbmd0aD4+MSxoPW8ubGVuZ3RoPj4xLGQ9bmV3IHgodSkscD1PYmplY3QuY3JlYXRlKG51bGwpLGc9ODE5Mix2PW5ldyBGbG9hdDMyQXJyYXkoaCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbz0iIixjPXY7Zm9yKGE9MDthPGg7YSsrKWk9ZVt0K2FdLGNbYV09aSxvKz1pKyJfIjt2YXIgdT1wW29dO2lmKHZvaWQgMD09PXUpe3ZhciBsPW5ldyBGbG9hdDMyQXJyYXkoZikseT1kLmV4ZWN1dGUoYyksbT15Lmxlbmd0aC1mO2ZvcihhPTA7YTxmO2ErKyl7aT15W20rYV07dmFyIGI9c1syKmFdOyhpPGJ8fGk+KGI9c1syKmErMV0pKSYmKGk9YiksbFthXT1pfWc+MCYmKGctLSxwW29dPWwpLHIuc2V0KGwsbil9ZWxzZSByLnNldCh1LG4pfX19XSksZX0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2KHRoaXMsZSksdGhpcy5zdGFjaz10P0FycmF5LmZyb20odCk6W119cmV0dXJuIG0oZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGg+PWUuTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO3RoaXMuc3RhY2sucHVzaCh0KX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YWNrLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgdW5kZXJmbG93LiIpO3JldHVybiB0aGlzLnN0YWNrLnBvcCgpfX0se2tleToiY29weSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGgrdD49ZS5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Zm9yKHZhciByPXRoaXMuc3RhY2ssbj1yLmxlbmd0aC10LGE9dC0xO2E+PTA7YS0tLG4rKylyLnB1c2gocltuXSl9fSx7a2V5OiJpbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZS0xXSl9fSx7a2V5OiJyb2xsIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLnN0YWNrLG49ci5sZW5ndGgtZSxhPXIubGVuZ3RoLTEsaT1uKyh0LU1hdGguZmxvb3IodC9lKSplKSxvPW4scz1hO288cztvKysscy0tKXt2YXIgYz1yW29dO3Jbb109cltzXSxyW3NdPWN9Zm9yKHZhciB1PW4sbD1pLTE7dTxsO3UrKyxsLS0pe3ZhciBmPXJbdV07clt1XT1yW2xdLHJbbF09Zn1mb3IodmFyIGg9aSxkPWE7aDxkO2grKyxkLS0pe3ZhciBwPXJbaF07cltoXT1yW2RdLHJbZF09cH19fV0sW3trZXk6Ik1BWF9TVEFDS19TSVpFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiTUFYX1NUQUNLX1NJWkUiLDEwMCl9fV0pLGV9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMub3BlcmF0b3JzPXR9cmV0dXJuIG0oZSxbe2tleToiZXhlY3V0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixpPW5ldyBTKGUpLG89MCxzPXRoaXMub3BlcmF0b3JzLGM9cy5sZW5ndGg7bzxjOylpZigibnVtYmVyIiE9dHlwZW9mKHQ9c1tvKytdKSlzd2l0Y2godCl7Y2FzZSJqeiI6bj1pLnBvcCgpLChyPWkucG9wKCkpfHwobz1uKTticmVhaztjYXNlImoiOm89cj1pLnBvcCgpO2JyZWFrO2Nhc2UiYWJzIjpyPWkucG9wKCksaS5wdXNoKE1hdGguYWJzKHIpKTticmVhaztjYXNlImFkZCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocituKTticmVhaztjYXNlImFuZCI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHImJm4pOmkucHVzaChyJm4pO2JyZWFrO2Nhc2UiYXRhbiI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmF0YW4ocikpO2JyZWFrO2Nhc2UiYml0c2hpZnQiOm49aS5wb3AoKSwocj1pLnBvcCgpKT4wP2kucHVzaChyPDxuKTppLnB1c2gocj4+bik7YnJlYWs7Y2FzZSJjZWlsaW5nIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY2VpbChyKSk7YnJlYWs7Y2FzZSJjb3B5IjpyPWkucG9wKCksaS5jb3B5KHIpO2JyZWFrO2Nhc2UiY29zIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY29zKHIpKTticmVhaztjYXNlImN2aSI6cj0wfGkucG9wKCksaS5wdXNoKHIpO2JyZWFrO2Nhc2UiY3ZyIjpicmVhaztjYXNlImRpdiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci9uKTticmVhaztjYXNlImR1cCI6aS5jb3B5KDEpO2JyZWFrO2Nhc2UiZXEiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI9PT1uKTticmVhaztjYXNlImV4Y2giOmkucm9sbCgyLDEpO2JyZWFrO2Nhc2UiZXhwIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChNYXRoLnBvdyhyLG4pKTticmVhaztjYXNlImZhbHNlIjppLnB1c2goITEpO2JyZWFrO2Nhc2UiZmxvb3IiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5mbG9vcihyKSk7YnJlYWs7Y2FzZSJnZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj49bik7YnJlYWs7Y2FzZSJndCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj5uKTticmVhaztjYXNlImlkaXYiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIvbnwwKTticmVhaztjYXNlImluZGV4IjpyPWkucG9wKCksaS5pbmRleChyKTticmVhaztjYXNlImxlIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyPD1uKTticmVhaztjYXNlImxuIjpyPWkucG9wKCksaS5wdXNoKE1hdGgubG9nKHIpKTticmVhaztjYXNlImxvZyI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmxvZyhyKS9NYXRoLkxOMTApO2JyZWFrO2Nhc2UibHQiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI8bik7YnJlYWs7Y2FzZSJtb2QiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIlbik7YnJlYWs7Y2FzZSJtdWwiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIqbik7YnJlYWs7Y2FzZSJuZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gociE9PW4pO2JyZWFrO2Nhc2UibmVnIjpyPWkucG9wKCksaS5wdXNoKC1yKTticmVhaztjYXNlIm5vdCI6ImJvb2xlYW4iPT10eXBlb2Yocj1pLnBvcCgpKT9pLnB1c2goIXIpOmkucHVzaCh+cik7YnJlYWs7Y2FzZSJvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHJ8fG4pOmkucHVzaChyfG4pO2JyZWFrO2Nhc2UicG9wIjppLnBvcCgpO2JyZWFrO2Nhc2Uicm9sbCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnJvbGwocixuKTticmVhaztjYXNlInJvdW5kIjpyPWkucG9wKCksaS5wdXNoKE1hdGgucm91bmQocikpO2JyZWFrO2Nhc2Uic2luIjpyPWkucG9wKCksaS5wdXNoKE1hdGguc2luKHIpKTticmVhaztjYXNlInNxcnQiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5zcXJ0KHIpKTticmVhaztjYXNlInN1YiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci1uKTticmVhaztjYXNlInRydWUiOmkucHVzaCghMCk7YnJlYWs7Y2FzZSJ0cnVuY2F0ZSI6cj0ocj1pLnBvcCgpKTwwP01hdGguY2VpbChyKTpNYXRoLmZsb29yKHIpLGkucHVzaChyKTticmVhaztjYXNlInhvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHIhPT1uKTppLnB1c2gocl5uKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIG9wZXJhdG9yICIuY29uY2F0KHQpKX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gaS5zdGFja319XSksZX0oKTt0LlBvc3RTY3JpcHRFdmFsdWF0b3I9eDt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMudHlwZT10fXJldHVybiBtKGUsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXsoMCxhLnVucmVhY2hhYmxlKSgiYWJzdHJhY3QgbWV0aG9kIil9fV0pLGV9KCksQT1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJhcmdzIikpLmluZGV4PWUsaS5taW49bixpLm1heD1hLGl9cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRBcmd1bWVudCh0aGlzKX19XSkscn0oTyksQz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB2KHRoaXMsciksKG49dC5jYWxsKHRoaXMsImxpdGVyYWwiKSkubnVtYmVyPWUsbi5taW49ZSxuLm1heD1lLG59cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1dKSxyfShPKSxGPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSxvKXt2YXIgcztyZXR1cm4gdih0aGlzLHIpLChzPXQuY2FsbCh0aGlzLCJiaW5hcnkiKSkub3A9ZSxzLmFyZzE9bixzLmFyZzI9YSxzLm1pbj1pLHMubWF4PW8sc31yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19XSkscn0oTyksUD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHYodGhpcyxyKSwoYT10LmNhbGwodGhpcywibWF4IikpLmFyZz1lLGEubWluPWUubWluLGEubWF4PW4sYX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdE1pbih0aGlzKX19XSkscn0oTyksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJ2YXIiKSkuaW5kZXg9ZSxpLm1pbj1uLGkubWF4PWEsaX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdFZhcmlhYmxlKHRoaXMpfX1dKSxyfShPKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJkZWZpbml0aW9uIikpLnZhcmlhYmxlPWUsYS5hcmc9bixhfXJldHVybiBtKHIsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXtlLnZpc2l0VmFyaWFibGVEZWZpbml0aW9uKHRoaXMpfX1dKSxyfShPKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3YodGhpcyxlKSx0aGlzLnBhcnRzPVtdfXJldHVybiBtKGUsW3trZXk6InZpc2l0QXJndW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgiTWF0aC5tYXgoIixlLm1pbiwiLCBNYXRoLm1pbigiLGUubWF4LCIsIHNyY1tzcmNPZmZzZXQgKyAiLGUuaW5kZXgsIl0pKSIpfX0se2tleToidmlzaXRWYXJpYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2IixlLmluZGV4KX19LHtrZXk6InZpc2l0TGl0ZXJhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKGUubnVtYmVyKX19LHtrZXk6InZpc2l0QmluYXJ5T3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIigiKSxlLmFyZzEudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgIixlLm9wLCIgIiksZS5hcmcyLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiKSIpfX0se2tleToidmlzaXRWYXJpYWJsZURlZmluaXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgidmFyICIpLGUudmFyaWFibGUudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgPSAiKSxlLmFyZy52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIjsiKX19LHtrZXk6InZpc2l0TWluIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWluKCIpLGUuYXJnLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiLCAiLGUubWF4LCIpIil9fSx7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJ0cy5qb2luKCIiKX19XSksZX0oKTtmdW5jdGlvbiBqKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBDKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgRigiKyIsZSx0LGUubWluK3QubWluLGUubWF4K3QubWF4KX1mdW5jdGlvbiBNKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBDKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEMoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fXZhciByPU1hdGgubWluKGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KSxuPU1hdGgubWF4KGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KTtyZXR1cm4gbmV3IEYoIioiLGUsdCxyLG4pfWZ1bmN0aW9uIF8oZSx0KXtpZigibGl0ZXJhbCI9PT10LnR5cGUpe2lmKDA9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyLXQubnVtYmVyKX1yZXR1cm4iYmluYXJ5Ij09PXQudHlwZSYmIi0iPT09dC5vcCYmImxpdGVyYWwiPT09ZS50eXBlJiYxPT09ZS5udW1iZXImJiJsaXRlcmFsIj09PXQuYXJnMS50eXBlJiYxPT09dC5hcmcxLm51bWJlcj90LmFyZzI6bmV3IEYoIi0iLGUsdCxlLm1pbi10Lm1heCxlLm1heC10Lm1pbil9ZnVuY3Rpb24gTChlLHQpe3JldHVybiBlLm1pbj49dD9uZXcgQyh0KTplLm1heDw9dD9lOm5ldyBQKGUsdCl9dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dih0aGlzLGUpfXJldHVybiBtKGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG4sYSxpLG8scyxjLHUsbCxmPVtdLGg9W10sZz10Lmxlbmd0aD4+MSx2PXIubGVuZ3RoPj4xLHk9MCxtPTA7bTxnO20rKylmLnB1c2gobmV3IEEobSx0WzIqbV0sdFsyKm0rMV0pKTtmb3IodmFyIGI9MCx3PWUubGVuZ3RoO2I8dztiKyspaWYoIm51bWJlciIhPXR5cGVvZihsPWVbYl0pKXN3aXRjaChsKXtjYXNlImFkZCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtvPWYucG9wKCksaT1mLnBvcCgpLGYucHVzaChqKGksbykpO2JyZWFrO2Nhc2UiY3ZyIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2JyZWFrO2Nhc2UibXVsIjppZihmLmxlbmd0aDwyKXJldHVybiBudWxsO289Zi5wb3AoKSxpPWYucG9wKCksZi5wdXNoKE0oaSxvKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7bz1mLnBvcCgpLGk9Zi5wb3AoKSxmLnB1c2goXyhpLG8pKTticmVhaztjYXNlImV4Y2giOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7cz1mLnBvcCgpLGM9Zi5wb3AoKSxmLnB1c2gocyxjKTticmVhaztjYXNlInBvcCI6aWYoZi5sZW5ndGg8MSlyZXR1cm4gbnVsbDtmLnBvcCgpO2JyZWFrO2Nhc2UiaW5kZXgiOmlmKGYubGVuZ3RoPDEpcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiIT09KGk9Zi5wb3AoKSkudHlwZSlyZXR1cm4gbnVsbDtpZigobj1pLm51bWJlcik8MHx8IU51bWJlci5pc0ludGVnZXIobil8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiPT09KHM9ZltmLmxlbmd0aC1uLTFdKS50eXBlfHwidmFyIj09PXMudHlwZSl7Zi5wdXNoKHMpO2JyZWFrfXU9bmV3IFQoeSsrLHMubWluLHMubWF4KSxmW2YubGVuZ3RoLW4tMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2UiZHVwIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2lmKCJudW1iZXIiPT10eXBlb2YgZVtiKzFdJiYiZ3QiPT09ZVtiKzJdJiZlW2IrM109PT1iKzcmJiJqeiI9PT1lW2IrNF0mJiJwb3AiPT09ZVtiKzVdJiZlW2IrNl09PT1lW2IrMV0pe2k9Zi5wb3AoKSxmLnB1c2goTChpLGVbYisxXSkpLGIrPTY7YnJlYWt9aWYoImxpdGVyYWwiPT09KHM9Zi5hdCgtMSkpLnR5cGV8fCJ2YXIiPT09cy50eXBlKXtmLnB1c2gocyk7YnJlYWt9dT1uZXcgVCh5Kysscy5taW4scy5tYXgpLGZbZi5sZW5ndGgtMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2Uicm9sbCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtpZihvPWYucG9wKCksaT1mLnBvcCgpLCJsaXRlcmFsIiE9PW8udHlwZXx8ImxpdGVyYWwiIT09aS50eXBlKXJldHVybiBudWxsO2lmKGE9by5udW1iZXIsKG49aS5udW1iZXIpPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIoYSl8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoMD09KGE9KGElbituKSVuKSlicmVhaztmLnB1c2guYXBwbHkoZixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShrPWYuc3BsaWNlKGYubGVuZ3RoLW4sbi1hKSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oayl8fGQoayl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9ZWxzZSBmLnB1c2gobmV3IEMobCkpO3ZhciBrO2lmKGYubGVuZ3RoIT09dilyZXR1cm4gbnVsbDtmb3IodmFyIFM9W10seD0wLE89aDt4PE8ubGVuZ3RoO3grKyl7dmFyIEY9T1t4XSxQPW5ldyBFO0YudmlzaXQoUCksUy5wdXNoKFAudG9TdHJpbmcoKSl9Zm9yKHZhciBSPTAsTj1mLmxlbmd0aDtSPE47UisrKXt2YXIgRD1mW1JdLEI9bmV3IEU7RC52aXNpdChCKTt2YXIgVT1yWzIqUl0sJD1yWzIqUisxXSxYPVtCLnRvU3RyaW5nKCldO1U+RC5taW4mJihYLnVuc2hpZnQoIk1hdGgubWF4KCIsVSwiLCAiKSxYLnB1c2goIikiKSksJDxELm1heCYmKFgudW5zaGlmdCgiTWF0aC5taW4oIiwkLCIsICIpLFgucHVzaCgiKSIpKSxYLnVuc2hpZnQoImRlc3RbZGVzdE9mZnNldCArICIsUiwiXSA9ICIpLFgucHVzaCgiOyIpLFMucHVzaChYLmpvaW4oIiIpKX1yZXR1cm4gUy5qb2luKCJcbiIpfX1dKSxlfSgpO3QuUG9zdFNjcmlwdENvbXBpbGVyPVJ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qb3N0U2NyaXB0UGFyc2VyPXQuUG9zdFNjcmlwdExleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG8oZSl9ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB1KGUsdCxyKXtyZXR1cm4gdCYmYyhlLnByb3RvdHlwZSx0KSxyJiZjKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMubGV4ZXI9dCx0aGlzLm9wZXJhdG9ycz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5wcmV2PW51bGx9cmV0dXJuIHUoZSxbe2tleToibmV4dFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJldj10aGlzLnRva2VuLHRoaXMudG9rZW49dGhpcy5sZXhlci5nZXRUb2tlbigpfX0se2tleToiYWNjZXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2tlbi50eXBlPT09ZSYmKHRoaXMubmV4dFRva2VuKCksITApfX0se2tleToiZXhwZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmFjY2VwdChlKSlyZXR1cm4hMDt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICIuY29uY2F0KHRoaXMudG9rZW4udHlwZSwiIGV4cGVjdGVkICIpLmNvbmNhdChlLCIuIikpfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuKCksdGhpcy5leHBlY3QoZi5MQlJBQ0UpLHRoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLm9wZXJhdG9yc319LHtrZXk6InBhcnNlQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDs7KWlmKHRoaXMuYWNjZXB0KGYuTlVNQkVSKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZSBpZih0aGlzLmFjY2VwdChmLk9QRVJBVE9SKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZXtpZighdGhpcy5hY2NlcHQoZi5MQlJBQ0UpKXJldHVybjt0aGlzLnBhcnNlQ29uZGl0aW9uKCl9fX0se2tleToicGFyc2VDb25kaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO2lmKHRoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKSx0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdChmLlJCUkFDRSksdGhpcy5hY2NlcHQoZi5JRikpdGhpcy5vcGVyYXRvcnNbZV09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW2UrMV09Imp6IjtlbHNle2lmKCF0aGlzLmFjY2VwdChmLkxCUkFDRSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLiIpO3ZhciB0PXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dmFyIHI9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLmV4cGVjdChmLklGRUxTRSksdGhpcy5vcGVyYXRvcnNbdF09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW3QrMV09ImoiLHRoaXMub3BlcmF0b3JzW2VdPXIsdGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifX19XSksZX0oKTt0LlBvc3RTY3JpcHRQYXJzZXI9bDt2YXIgZj17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ModGhpcyxlKSx0aGlzLnR5cGU9dCx0aGlzLnZhbHVlPXJ9cmV0dXJuIHUoZSxudWxsLFt7a2V5OiJvcENhY2hlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3BDYWNoZSIsT2JqZWN0LmNyZWF0ZShudWxsKSl9fSx7a2V5OiJnZXRPcGVyYXRvciIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUub3BDYWNoZVt0XXx8KGUub3BDYWNoZVt0XT1uZXcgZShmLk9QRVJBVE9SLHQpKX19LHtrZXk6IkxCUkFDRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkxCUkFDRSIsbmV3IGUoZi5MQlJBQ0UsInsiKSl9fSx7a2V5OiJSQlJBQ0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJSQlJBQ0UiLG5ldyBlKGYuUkJSQUNFLCJ9IikpfX0se2tleToiSUYiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRiIsbmV3IGUoZi5JRiwiSUYiKSl9fSx7a2V5OiJJRkVMU0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRkVMU0UiLG5ldyBlKGYuSUZFTFNFLCJJRkVMU0UiKSl9fV0pLGV9KCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5uZXh0Q2hhcigpLHRoaXMuc3RyQnVmPVtdfXJldHVybiB1KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6ImdldFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxpLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gbmV3IGgoZi5OVU1CRVIsdGhpcy5nZXROdW1iZXIoKSk7Y2FzZSAxMjM6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxoLkxCUkFDRTtjYXNlIDEyNTpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGguUkJSQUNFfXZhciByPXRoaXMuc3RyQnVmO2ZvcihyLmxlbmd0aD0wLHJbMF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYodD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyKTspci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO3ZhciBuPXIuam9pbigiIik7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJpZiI6cmV0dXJuIGguSUY7Y2FzZSJpZmVsc2UiOnJldHVybiBoLklGRUxTRTtkZWZhdWx0OnJldHVybiBoLmdldE9wZXJhdG9yKG4pfX19LHtrZXk6ImdldE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnRDaGFyLHQ9dGhpcy5zdHJCdWY7Zm9yKHQubGVuZ3RoPTAsdFswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJihlPj00OCYmZTw9NTd8fDQ1PT09ZXx8NDY9PT1lKTspdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3ZhciByPXBhcnNlRmxvYXQodC5qb2luKCIiKSk7aWYoaXNOYU4ocikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAiLmNvbmNhdChyKSk7cmV0dXJuIHJ9fV0pLGV9KCk7dC5Qb3N0U2NyaXB0TGV4ZXI9ZH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPXQuTG9jYWxJbWFnZUNhY2hlPXQuTG9jYWxHU3RhdGVDYWNoZT10LkxvY2FsRnVuY3Rpb25DYWNoZT10LkxvY2FsQ29sb3JTcGFjZUNhY2hlPXQuR2xvYmFsSW1hZ2VDYWNoZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KTtmdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0scyhlLHQpfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49dShlKTtpZih0KXt2YXIgYT11KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWwodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbChlKX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1sKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWwoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiB0JiZoKGUucHJvdG90eXBlLHQpLHImJmgoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlTG9jYWxDYWNoZS4iKSx0aGlzLl9vbmx5UmVmcz0hMD09PSh0JiZ0Lm9ubHlSZWZzKSx0aGlzLl9vbmx5UmVmc3x8KHRoaXMuX25hbWVSZWZNYXA9bmV3IE1hcCx0aGlzLl9pbWFnZU1hcD1uZXcgTWFwKSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6ImdldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fb25seVJlZnMmJigwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgYGdldEJ5TmFtZWAgbWV0aG9kLiIpO3ZhciB0PXRoaXMuX25hbWVSZWZNYXAuZ2V0KGUpO3JldHVybiB0P3RoaXMuZ2V0QnlSZWYodCk6dGhpcy5faW1hZ2VNYXAuZ2V0KGUpfHxudWxsfX0se2tleToiZ2V0QnlSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbWFnZUNhY2hlLmdldChlKXx8bnVsbH19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNldGAgY2FsbGVkLiIpfX1dKSxlfSgpLGc9ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBmKHRoaXMsciksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsSW1hZ2VDYWNoZT1nO3ZhciB2PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gZih0aGlzLHIpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBkKHIsW3trZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiBudWxsIT09ZSYmdGhpcy5fbmFtZVJlZk1hcC5zZXQoZSx0KSx2b2lkIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQscil9dGhpcy5faW1hZ2VNYXAuaGFzKGUpfHx0aGlzLl9pbWFnZU1hcC5zZXQoZSxyKX19XSkscn0ocCk7dC5Mb2NhbENvbG9yU3BhY2VDYWNoZT12O3ZhciB5PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx7b25seVJlZnM6ITB9KX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsRnVuY3Rpb25DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9eTt2YXIgbT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGYodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsR1N0YXRlQ2FjaGU9bTt2YXIgYj1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMse29ubHlSZWZzOiEwfSl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZT1iO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLl9yZWZDYWNoZT1uZXcgYS5SZWZTZXRDYWNoZSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6Il9ieXRlU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD0wLHI9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX0odGhpcy5faW1hZ2VDYWNoZSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXQrPWUudmFsdWUuYnl0ZVNpemV9Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHR9fSx7a2V5OiJfY2FjaGVMaW1pdFJlYWNoZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPGUuTUlOX0lNQUdFU19UT19DQUNIRXx8dGhpcy5fYnl0ZVNpemU8ZS5NQVhfQllURV9TSVpFKX19LHtrZXk6InNob3VsZENhY2hlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtyZXR1cm4hKChuP24uc2l6ZSsobi5oYXMocik/MDoxKToxKTxlLk5VTV9QQUdFU19USFJFU0hPTER8fCF0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSYmdGhpcy5fY2FjaGVMaW1pdFJlYWNoZWQpfX0se2tleToiYWRkUGFnZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3JlZkNhY2hlLmdldChlKTtyfHwocj1uZXcgU2V0LHRoaXMuX3JlZkNhY2hlLnB1dChlLHIpKSxyLmFkZCh0KX19LHtrZXk6ImFkZEJ5dGVTaXplIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO3ImJihyLmJ5dGVTaXplfHwoci5ieXRlU2l6ZT10KSl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtpZighbilyZXR1cm4gbnVsbDtpZihuLnNpemU8ZS5OVU1fUEFHRVNfVEhSRVNIT0xEKXJldHVybiBudWxsO3ZhciBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHQpO3JldHVybiBhPyhuLmFkZChyKSxhKTpudWxsfX0se2tleToic2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fcmVmQ2FjaGUuaGFzKGUpKXRocm93IG5ldyBFcnJvcignR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gZXhwZWN0ZWQgImFkZFBhZ2VJbmRleCIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8KHRoaXMuX2NhY2hlTGltaXRSZWFjaGVkPygwLG4ud2FybikoIkdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGNhY2hlIGxpbWl0IHJlYWNoZWQuIik6dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLl9yZWZDYWNoZS5jbGVhcigpLHRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKX19XSxbe2tleToiTlVNX1BBR0VTX1RIUkVTSE9MRCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk5VTV9QQUdFU19USFJFU0hPTEQiLDIpfX0se2tleToiTUlOX0lNQUdFU19UT19DQUNIRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1JTl9JTUFHRVNfVE9fQ0FDSEUiLDEwKX19LHtrZXk6Ik1BWF9CWVRFX1NJWkUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfQllURV9TSVpFIiw0ZTcpfX1dKSxlfSgpO3QuR2xvYmFsSW1hZ2VDYWNoZT13fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYmlkaT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTEscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLHA9ITAsZz1lLmxlbmd0aDtpZigwPT09Z3x8cilyZXR1cm4gZihlLHAscik7aC5sZW5ndGg9ZyxkLmxlbmd0aD1nO3ZhciB2LHksbT0wO2Zvcih2PTA7djxnOysrdil7aFt2XT1lLmNoYXJBdCh2KTt2YXIgYj1lLmNoYXJDb2RlQXQodiksdz0iTCI7Yjw9MjU1P3c9YVtiXToxNDI0PD1iJiZiPD0xNTI0P3c9IlIiOjE1MzY8PWImJmI8PTE3OTE/KHc9aVsyNTUmYl0pfHwoMCxuLndhcm4pKCJCaWRpOiBpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyICIrYi50b1N0cmluZygxNikpOjE3OTI8PWImJmI8PTIyMjAmJih3PSJBTCIpLCJSIiE9PXcmJiJBTCIhPT13JiYiQU4iIT09d3x8bSsrLGRbdl09d31pZigwPT09bSlyZXR1cm4gZihlLHA9ITApOy0xPT09dCYmKG0vZzwuMyYmZz40PyhwPSEwLHQ9MCk6KHA9ITEsdD0xKSk7dmFyIGs9W107Zm9yKHY9MDt2PGc7Kyt2KWtbdl09dDt2YXIgUyx4PW8odCk/IlIiOiJMIixPPXgsQT1PLEM9Tztmb3Iodj0wO3Y8ZzsrK3YpIk5TTSI9PT1kW3ZdP2Rbdl09QzpDPWRbdl07Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iQUwiPT09Qz8iQU4iOiJFTiI6IlIiIT09UyYmIkwiIT09UyYmIkFMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdikiQUwiPT09KFM9ZFt2XSkmJihkW3ZdPSJSIik7Zm9yKHY9MTt2PGctMTsrK3YpIkVTIj09PWRbdl0mJiJFTiI9PT1kW3YtMV0mJiJFTiI9PT1kW3YrMV0mJihkW3ZdPSJFTiIpLCJDUyIhPT1kW3ZdfHwiRU4iIT09ZFt2LTFdJiYiQU4iIT09ZFt2LTFdfHxkW3YrMV0hPT1kW3YtMV18fChkW3ZdPWRbdi0xXSk7Zm9yKHY9MDt2PGc7Kyt2KWlmKCJFTiI9PT1kW3ZdKXtmb3IodmFyIEY9di0xO0Y+PTAmJiJFVCI9PT1kW0ZdOy0tRilkW0ZdPSJFTiI7Zm9yKHZhciBQPXYrMTtQPGcmJiJFVCI9PT1kW1BdOysrUClkW1BdPSJFTiJ9Zm9yKHY9MDt2PGc7Kyt2KSJXUyIhPT0oUz1kW3ZdKSYmIkVTIiE9PVMmJiJFVCIhPT1TJiYiQ1MiIT09U3x8KGRbdl09Ik9OIik7Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iTCI9PT1DPyJMIjoiRU4iOiJSIiE9PVMmJiJMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdilpZigiT04iPT09ZFt2XSl7dmFyIFQ9YyhkLHYrMSwiT04iKSxJPU87dj4wJiYoST1kW3YtMV0pO3ZhciBFPUE7VCsxPGcmJihFPWRbVCsxXSksIkwiIT09SSYmKEk9IlIiKSwiTCIhPT1FJiYoRT0iUiIpLEk9PT1FJiZ1KGQsdixULEkpLHY9VC0xfWZvcih2PTA7djxnOysrdikiT04iPT09ZFt2XSYmKGRbdl09eCk7Zm9yKHY9MDt2PGc7Kyt2KVM9ZFt2XSxzKGtbdl0pPyJSIj09PVM/a1t2XSs9MToiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0yKToiTCIhPT1TJiYiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0xKTt2YXIgaixNPS0xLF89OTk7Zm9yKHY9MCx5PWsubGVuZ3RoO3Y8eTsrK3YpTTwoaj1rW3ZdKSYmKE09aiksXz5qJiZvKGopJiYoXz1qKTtmb3Ioaj1NO2o+PV87LS1qKXt2YXIgTD0tMTtmb3Iodj0wLHk9ay5sZW5ndGg7djx5OysrdilrW3ZdPGo/TD49MCYmKGwoaCxMLHYpLEw9LTEpOkw8MCYmKEw9dik7TD49MCYmbChoLEwsay5sZW5ndGgpfWZvcih2PTAseT1oLmxlbmd0aDt2PHk7Kyt2KXt2YXIgUj1oW3ZdOyI8IiE9PVImJiI+IiE9PVJ8fChoW3ZdPSIiKX1yZXR1cm4gZihoLmpvaW4oIiIpLHApfTt2YXIgbj1yKDIpLGE9WyJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJTIiwiQiIsIlMiLCJXUyIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkIiLCJCIiwiUyIsIldTIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJFUyIsIkNTIiwiRVMiLCJDUyIsIkNTIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJDUyIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQ1MiLCJPTiIsIkVUIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiT04iLCJPTiIsIkJOIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFTiIsIkVOIiwiT04iLCJMIiwiT04iLCJPTiIsIk9OIiwiRU4iLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCJdLGk9WyJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJPTiIsIk9OIiwiQUwiLCJFVCIsIkVUIiwiQUwiLCJDUyIsIkFMIiwiT04iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCIiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkVUIiwiQU4iLCJBTiIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIl07ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMCE9KDEmZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gMD09KDEmZSl9ZnVuY3Rpb24gYyhlLHQscil7dmFyIG4sYTtmb3Iobj10LGE9ZS5sZW5ndGg7bjxhOysrbilpZihlW25dIT09cilyZXR1cm4gbjtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCxyLG4pe2Zvcih2YXIgYT10O2E8cjsrK2EpZVthXT1ufWZ1bmN0aW9uIGwoZSx0LHIpe2Zvcih2YXIgbj10LGE9ci0xO248YTsrK24sLS1hKXt2YXIgaT1lW25dO2Vbbl09ZVthXSxlW2FdPWl9fWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj0ibHRyIjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXT9yPSJ0dGIiOnR8fChyPSJydGwiKSx7c3RyOmUsZGlyOnJ9fXZhciBoPVtdLGQ9W119LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigyKTtmdW5jdGlvbiBhKGUpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxhKGUpfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxjPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuaDE9dD80Mjk0OTY3Mjk1JnQ6byx0aGlzLmgyPXQ/NDI5NDk2NzI5NSZ0Om99dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt0PW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpLHI9MDtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTthKyspe3ZhciBvPWUuY2hhckNvZGVBdChhKTtvPD0yNTU/dFtyKytdPW86KHRbcisrXT1vPj4+OCx0W3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKGUpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KHQ9ZS5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGw9ci00KnUsZj1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCx1KSxoPTAsZD0wLHA9dGhpcy5oMSxnPXRoaXMuaDIsdj0zNDMyOTE4MzUzLHk9NDYxODQ1OTA3LG09MTE2MDEsYj0xMzcxNSx3PTA7dzx1O3crKykxJnc/cD01KihwPShwXj1oPShoPShoPShoPWZbd10pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2Omc9NSooZz0oZ149ZD0oZD0oZD0oZD1mW3ddKSp2JnN8ZCptJmMpPDwxNXxkPj4+MTcpKnkmc3xkKmImYyk8PDEzfGc+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goaD0wLGwpe2Nhc2UgMzpoXj10WzQqdSsyXTw8MTY7Y2FzZSAyOmhePXRbNCp1KzFdPDw4O2Nhc2UgMTpoPShoPShoPShoXj10WzQqdV0pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjLDEmdT9wXj1oOmdePWh9dGhpcy5oMT1wLHRoaXMuaDI9Z319LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmgxLHQ9dGhpcy5oMjtyZXR1cm4gZT0zOTgxODA2Nzk3KihlXj10Pj4+MSkmc3wzNjA0NSplJmMsZT00NDQ5ODQ0MDMqKGVePSh0PTQyODM1NDM1MTEqdCZzfCgyOTUwMTYzNzk3Kih0PDwxNnxlPj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSplJmMsKChlXj0odD0zMzAxODgyMzY2KnQmc3woMzEyMDQzNzg5MyoodDw8MTZ8ZT4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsodD4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NdXJtdXJIYXNoM182ND11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuT3BlcmF0b3JMaXN0PXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyhlLHQpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHMoZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYyhlKX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1jKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0LHIsbixhKXtmb3IodmFyIGk9ZSxvPTAscz10Lmxlbmd0aC0xO288cztvKyspe3ZhciBjPXRbb107aT1pW2NdfHwoaVtjXT1bXSl9aVt0LmF0KC0xKV09e2NoZWNrRm46cixpdGVyYXRlRm46bixwcm9jZXNzRm46YX19dmFyIGQ9W107aChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxuLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTpyZXR1cm4gclt0XT09PW4uT1BTLnRyYW5zZm9ybTtjYXNlIDI6cmV0dXJuIHJbdF09PT1uLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDtjYXNlIDM6cmV0dXJuIHJbdF09PT1uLk9QUy5yZXN0b3JlfXRocm93IG5ldyBFcnJvcigiaXRlcmF0ZUlubGluZUltYWdlR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwyMDApO2lmKHU8MTApcmV0dXJuIHQtKHQtbyklNDtmb3IodmFyIGw9MCxmPVtdLGg9MCxkPTEscD0xLGc9MDtnPHU7ZysrKXt2YXIgdj1hW3MrKGc8PDIpXSx5PWFbYysoZzw8MildWzBdO2QreS53aWR0aD4xZTMmJihsPU1hdGgubWF4KGwsZCkscCs9aCsyLGQ9MCxoPTApLGYucHVzaCh7dHJhbnNmb3JtOnYseDpkLHk6cCx3Onkud2lkdGgsaDp5LmhlaWdodH0pLGQrPXkud2lkdGgrMixoPU1hdGgubWF4KGgseS5oZWlnaHQpfWZvcih2YXIgbT1NYXRoLm1heChsLGQpKzEsYj1wK2grMSx3PW5ldyBVaW50OEFycmF5KG0qYio0KSxrPW08PDIsUz0wO1M8dTtTKyspe3ZhciB4PWFbYysoUzw8MildWzBdLmRhdGEsTz1mW1NdLnc8PDIsQT0wLEM9ZltTXS54K2ZbU10ueSptPDwyO3cuc2V0KHguc3ViYXJyYXkoMCxPKSxDLWspO2Zvcih2YXIgRj0wLFA9ZltTXS5oO0Y8UDtGKyspdy5zZXQoeC5zdWJhcnJheShBLEErTyksQyksQSs9TyxDKz1rO2Zvcih3LnNldCh4LnN1YmFycmF5KEEtTyxBKSxDKTtDPj0wOyl4W0MtNF09eFtDXSx4W0MtM109eFtDKzFdLHhbQy0yXT14W0MrMl0seFtDLTFdPXhbQyszXSx4W0MrT109eFtDK08tNF0seFtDK08rMV09eFtDK08tM10seFtDK08rMl09eFtDK08tMl0seFtDK08rM109eFtDK08tMV0sQy09a31yZXR1cm4gci5zcGxpY2Uobyw0KnUsbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW3t3aWR0aDptLGhlaWdodDpiLGtpbmQ6bi5JbWFnZUtpbmQuUkdCQV8zMkJQUCxkYXRhOnd9LGZdKSxvKzF9KSksaChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Qsbi5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiByW3RdPT09bi5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiByW3RdPT09bi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gclt0XT09PW4uT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5mbG9vcigodC1vKS80KTtpZih1PDEwKXJldHVybiB0LSh0LW8pJTQ7dmFyIGwsZixoPSExLGQ9YVtjXVswXSxwPWFbc11bMF0sZz1hW3NdWzFdLHY9YVtzXVsyXSx5PWFbc11bM107aWYoZz09PXYpe2g9ITAsbD1zKzQ7Zm9yKHZhciBtPWMrNCxiPTE7Yjx1O2IrKyxsKz00LG0rPTQpaWYoZj1hW2xdLGFbbV1bMF0hPT1kfHxmWzBdIT09cHx8ZlsxXSE9PWd8fGZbMl0hPT12fHxmWzNdIT09eSl7YjwxMD9oPSExOnU9YjticmVha319aWYoaCl7dT1NYXRoLm1pbih1LDFlMyk7dmFyIHc9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2w9cztmb3IodmFyIGs9MDtrPHU7aysrLGwrPTQpZj1hW2xdLHdbazw8MV09Zls0XSx3WzErKGs8PDEpXT1mWzVdO3Iuc3BsaWNlKG8sNCp1LG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KnUsW2QscCxnLHYseSx3XSl9ZWxzZXt1PU1hdGgubWluKHUsMTAwKTtmb3IodmFyIFM9W10seD0wO3g8dTt4Kyspe2Y9YVtzKyh4PDwyKV07dmFyIE89YVtjKyh4PDwyKV1bMF07Uy5wdXNoKHtkYXRhOk8uZGF0YSx3aWR0aDpPLndpZHRoLGhlaWdodDpPLmhlaWdodCxpbnRlcnBvbGF0ZTpPLmludGVycG9sYXRlLGNvdW50Ok8uY291bnQsdHJhbnNmb3JtOmZ9KX1yLnNwbGljZShvLDQqdSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW1NdKX1yZXR1cm4gbysxfSkpLGgoZCxbbi5PUFMuc2F2ZSxuLk9QUy50cmFuc2Zvcm0sbi5PUFMucGFpbnRJbWFnZVhPYmplY3Qsbi5PUFMucmVzdG9yZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXJnc0FycmF5LHI9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFtyXVsxXSYmMD09PXRbcl1bMl19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxpPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTppZihyW3RdIT09bi5PUFMudHJhbnNmb3JtKXJldHVybiExO3ZhciBvPWUuaUN1cnItMixzPWFbb11bMF0sYz1hW29dWzNdO3JldHVybiBhW3RdWzBdPT09cyYmMD09PWFbdF1bMV0mJjA9PT1hW3RdWzJdJiZhW3RdWzNdPT09YztjYXNlIDI6aWYoclt0XSE9PW4uT1BTLnBhaW50SW1hZ2VYT2JqZWN0KXJldHVybiExO3ZhciB1PWFbZS5pQ3Vyci0xXVswXTtyZXR1cm4gYVt0XVswXT09PXU7Y2FzZSAzOnJldHVybiByW3RdPT09bi5PUFMucmVzdG9yZX10aHJvdyBuZXcgRXJyb3IoIml0ZXJhdGVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICIuY29uY2F0KGkpKX0pLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixvPWktMyxzPWktMixjPWFbaS0xXVswXSx1PWFbc11bMF0sbD1hW3NdWzNdLGY9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwxZTMpO2lmKGY8MylyZXR1cm4gdC0odC1vKSU0O2Zvcih2YXIgaD1uZXcgRmxvYXQzMkFycmF5KDIqZiksZD1zLHA9MDtwPGY7cCsrLGQrPTQpe3ZhciBnPWFbZF07aFtwPDwxXT1nWzRdLGhbMSsocDw8MSldPWdbNV19dmFyIHY9W2MsdSxsLGhdO3JldHVybiByLnNwbGljZShvLDQqZixuLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KmYsdiksbysxfSkpLGgoZCxbbi5PUFMuYmVnaW5UZXh0LG4uT1BTLnNldEZvbnQsbi5PUFMuc2V0VGV4dE1hdHJpeCxuLk9QUy5zaG93VGV4dCxuLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9KHQtKGUuaUN1cnItNCkpJTU7c3dpdGNoKGkpe2Nhc2UgMDpyZXR1cm4gclt0XT09PW4uT1BTLmJlZ2luVGV4dDtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy5zZXRGb250O2Nhc2UgMjpyZXR1cm4gclt0XT09PW4uT1BTLnNldFRleHRNYXRyaXg7Y2FzZSAzOmlmKHJbdF0hPT1uLk9QUy5zaG93VGV4dClyZXR1cm4hMTt2YXIgbz1lLmlDdXJyLTMscz1hW29dWzBdLGM9YVtvXVsxXTtyZXR1cm4gYVt0XVswXT09PXMmJmFbdF1bMV09PT1jO2Nhc2UgNDpyZXR1cm4gclt0XT09PW4uT1BTLmVuZFRleHR9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAiLmNvbmNhdChpKSl9KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxhPWUuaUN1cnIsaT1hLTQsbz1hLTMscz1hLTIsYz1hLTEsdT1hLGw9bltvXVswXSxmPW5bb11bMV0saD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LWkpLzUpLDFlMyk7aWYoaDwzKXJldHVybiB0LSh0LWkpJTU7dmFyIGQ9aTtpPj00JiZyW2ktNF09PT1yW29dJiZyW2ktM109PT1yW3NdJiZyW2ktMl09PT1yW2NdJiZyW2ktMV09PT1yW3VdJiZuW2ktNF1bMF09PT1sJiZuW2ktNF1bMV09PT1mJiYoaCsrLGQtPTUpO2Zvcih2YXIgcD1kKzQsZz0xO2c8aDtnKyspci5zcGxpY2UocCwzKSxuLnNwbGljZShwLDMpLHArPTI7cmV0dXJuIHArMX0pKTt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMucXVldWU9dH1yZXR1cm4gZihlLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKSx0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpLHRoaXMuX29wdGltaXplKCl9fSx7a2V5OiJmbHVzaCIsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLGV9KCksZz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShhLGUpO3ZhciB0LHIsbj0odD1hLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1zKHQpO2lmKHIpe3ZhciBhPXModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Yyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGEoZSl7dmFyIHQ7cmV0dXJuIHUodGhpcyxhKSwodD1uLmNhbGwodGhpcyxlKSkuc3RhdGU9bnVsbCx0LmNvbnRleHQ9e2lDdXJyOjAsZm5BcnJheTplLmZuQXJyYXksYXJnc0FycmF5OmUuYXJnc0FycmF5fSx0Lm1hdGNoPW51bGwsdC5sYXN0UHJvY2Vzc2VkPTAsdH1yZXR1cm4gZihhLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5xdWV1ZS5mbkFycmF5LHQ9dGhpcy5sYXN0UHJvY2Vzc2VkLHI9ZS5sZW5ndGgsbj10aGlzLnN0YXRlLGE9dGhpcy5tYXRjaDtpZihufHxhfHx0KzEhPT1yfHxkW2VbdF1dKXtmb3IodmFyIGk9dGhpcy5jb250ZXh0O3Q8cjspe2lmKGEpe2lmKCgwLGEuaXRlcmF0ZUZuKShpLHQpKXt0Kys7Y29udGludWV9aWYodD0oMCxhLnByb2Nlc3NGbikoaSx0KzEpLGE9bnVsbCxuPW51bGwsdD49KHI9ZS5sZW5ndGgpKWJyZWFrfShuPShufHxkKVtlW3RdXSkmJiFBcnJheS5pc0FycmF5KG4pPyhpLmlDdXJyPXQsdCsrLCFuLmNoZWNrRm58fCgwLG4uY2hlY2tGbikoaSk/KGE9bixuPW51bGwpOm49bnVsbCk6dCsrfXRoaXMuc3RhdGU9bix0aGlzLm1hdGNoPWEsdGhpcy5sYXN0UHJvY2Vzc2VkPXR9ZWxzZSB0aGlzLmxhc3RQcm9jZXNzZWQ9cn19LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe2Zvcig7dGhpcy5tYXRjaDspe3ZhciBlPXRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7dGhpcy5sYXN0UHJvY2Vzc2VkPSgwLHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsZSksdGhpcy5tYXRjaD1udWxsLHRoaXMuc3RhdGU9bnVsbCx0aGlzLl9vcHRpbWl6ZSgpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhdGU9bnVsbCx0aGlzLm1hdGNoPW51bGwsdGhpcy5sYXN0UHJvY2Vzc2VkPTB9fV0pLGF9KHApLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt1KHRoaXMsZSksdGhpcy5fc3RyZWFtU2luaz1yLHRoaXMuZm5BcnJheT1bXSx0aGlzLmFyZ3NBcnJheT1bXSwhcnx8dCZuLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUP3RoaXMub3B0aW1pemVyPW5ldyBwKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBnKHRoaXMpLHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5fdG90YWxMZW5ndGg9MCx0aGlzLndlaWdodD0wLHRoaXMuX3Jlc29sdmVkPXI/bnVsbDpQcm9taXNlLnJlc29sdmUoKX1yZXR1cm4gZihlLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9fSx7a2V5OiJyZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fX0se2tleToidG90YWxMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH19LHtrZXk6ImFkZE9wIix2YWx1ZTpmdW5jdGlvbih0LHIpe3RoaXMub3B0aW1pemVyLnB1c2godCxyKSx0aGlzLndlaWdodCsrLHRoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFfHx0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFX0FCT1VUJiYodD09PW4uT1BTLnJlc3RvcmV8fHQ9PT1uLk9QUy5lbmRUZXh0KSkmJnRoaXMuZmx1c2goKX19LHtrZXk6ImFkZEltYWdlT3BzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dm9pZCAwIT09ciYmdGhpcy5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixyXSksdGhpcy5hZGRPcChlLHQpLHZvaWQgMCE9PXImJnRoaXMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSl9fSx7a2V5OiJhZGREZXBlbmRlbmN5Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRlcGVuZGVuY2llcy5oYXMoZSl8fCh0aGlzLmRlcGVuZGVuY2llcy5hZGQoZSksdGhpcy5hZGRPcChuLk9QUy5kZXBlbmRlbmN5LFtlXSkpfX0se2tleToiYWRkRGVwZW5kZW5jaWVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWEoZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO3RoaXMuYWRkRGVwZW5kZW5jeShuKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9fX0se2tleToiYWRkT3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZSl7dmFyIHIsaT1hKHQuZGVwZW5kZW5jaWVzKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1mb3IodmFyIHM9MCxjPXQubGVuZ3RoO3M8YztzKyspdGhpcy5hZGRPcCh0LmZuQXJyYXlbc10sdC5hcmdzQXJyYXlbc10pfWVsc2UoMCxuLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX19LHtrZXk6Il90cmFuc2ZlcnMiLGdldDpmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXRoaXMuZm5BcnJheSxyPXRoaXMuYXJnc0FycmF5LGE9dGhpcy5sZW5ndGgsaT0wO2k8YTtpKyspc3dpdGNoKHRbaV0pe2Nhc2Ugbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6Y2FzZSBuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOmNhc2Ugbi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OnZhciBvPXJbaV1bMF07IW8uY2FjaGVkJiZvLmRhdGEmJm8uZGF0YS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmZS5wdXNoKG8uZGF0YS5idWZmZXIpfXJldHVybiBlfX0se2tleToiZmx1c2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMub3B0aW1pemVyLmZsdXNoKCk7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPXIsdGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGFzdENodW5rOmUsc2VwYXJhdGVBbm5vdHM6dCxsZW5ndGg6cn0sMSx0aGlzLl90cmFuc2ZlcnMpLHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCksdGhpcy5mbkFycmF5Lmxlbmd0aD0wLHRoaXMuYXJnc0FycmF5Lmxlbmd0aD0wLHRoaXMud2VpZ2h0PTAsdGhpcy5vcHRpbWl6ZXIucmVzZXQoKX19XSxbe2tleToiQ0hVTktfU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkNIVU5LX1NJWkUiLDFlMyl9fSx7a2V5OiJDSFVOS19TSVpFX0FCT1VUIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiQ0hVTktfU0laRV9BQk9VVCIsdGhpcy5DSFVOS19TSVpFLTUpfX1dKSxlfSgpO3QuT3BlcmF0b3JMaXN0PXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTkzKSxpPXIoMTM2KSxvPXIoMTQzKSxzPXIoMTQ4KSxjPXIoMTU2KSx1PXIoMTU5KSxsPXIoMTM0KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWYoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscixuKXtyZXR1cm4oZT10K2Uqcik8MD9lPTA6ZT5uJiYoZT1uKSxlfWZ1bmN0aW9uIHYoZSx0LHIsbixhLGkpe3ZhciBvLHM9YSppO289dDw9OD9uZXcgVWludDhBcnJheShzKTp0PD0xNj9uZXcgVWludDE2QXJyYXkocyk6bmV3IFVpbnQzMkFycmF5KHMpO3ZhciBjLHUsbCxmLGg9ci9hLGQ9bi9pLHA9MCxnPW5ldyBVaW50MTZBcnJheShhKSx2PXI7Zm9yKGM9MDtjPGE7YysrKWdbY109TWF0aC5mbG9vcihjKmgpO2ZvcihjPTA7YzxpO2MrKylmb3IobD1NYXRoLmZsb29yKGMqZCkqdix1PTA7dTxhO3UrKylmPWwrZ1t1XSxvW3ArK109ZVtmXTtyZXR1cm4gb312YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLGE9dC5yZXMscz10LmltYWdlLGM9dC5pc0lubGluZSxmPXZvaWQgMCE9PWMmJmMsaD10LnNtYXNrLGQ9dm9pZCAwPT09aD9udWxsOmgscD10Lm1hc2ssZz12b2lkIDA9PT1wP251bGw6cCx2PXQuaXNNYXNrLHk9dm9pZCAwIT09diYmdixtPXQucGRmRnVuY3Rpb25GYWN0b3J5LGI9dC5sb2NhbENvbG9yU3BhY2VDYWNoZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmltYWdlPXM7dmFyIHcsaz1zLmRpY3QsUz1rLmdldCgiRiIsIkZpbHRlciIpO2lmKFMgaW5zdGFuY2VvZiBsLk5hbWUpdz1TLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KFMpKXt2YXIgeD1yLmZldGNoSWZSZWYoU1swXSk7eCBpbnN0YW5jZW9mIGwuTmFtZSYmKHc9eC5uYW1lKX1zd2l0Y2godyl7Y2FzZSJKUFhEZWNvZGUiOnZhciBPPW5ldyB1LkpweEltYWdlO08ucGFyc2VJbWFnZVByb3BlcnRpZXMocy5zdHJlYW0pLHMuc3RyZWFtLnJlc2V0KCkscy53aWR0aD1PLndpZHRoLHMuaGVpZ2h0PU8uaGVpZ2h0LHMuYml0c1BlckNvbXBvbmVudD1PLmJpdHNQZXJDb21wb25lbnQscy5udW1Db21wcz1PLmNvbXBvbmVudHNDb3VudDticmVhaztjYXNlIkpCSUcyRGVjb2RlIjpzLmJpdHNQZXJDb21wb25lbnQ9MSxzLm51bUNvbXBzPTF9dmFyIEE9ay5nZXQoIlciLCJXaWR0aCIpLEM9ay5nZXQoIkgiLCJIZWlnaHQiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHMud2lkdGgpJiZzLndpZHRoPjAmJk51bWJlci5pc0ludGVnZXIocy5oZWlnaHQpJiZzLmhlaWdodD4wJiYocy53aWR0aCE9PUF8fHMuaGVpZ2h0IT09QykmJigoMCxuLndhcm4pKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpLEE9cy53aWR0aCxDPXMuaGVpZ2h0KSxBPDF8fEM8MSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBpbWFnZSB3aWR0aDogIi5jb25jYXQoQSwiIG9yIGhlaWdodDogIikuY29uY2F0KEMpKTt0aGlzLndpZHRoPUEsdGhpcy5oZWlnaHQ9Qyx0aGlzLmludGVycG9sYXRlPWsuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSx0aGlzLmltYWdlTWFzaz1rLmdldCgiSU0iLCJJbWFnZU1hc2siKXx8ITEsdGhpcy5tYXR0ZT1rLmdldCgiTWF0dGUiKXx8ITE7dmFyIEY9cy5iaXRzUGVyQ29tcG9uZW50O2lmKCFGJiYhKEY9ay5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKSkpe2lmKCF0aGlzLmltYWdlTWFzayl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6ICIuY29uY2F0KHRoaXMuaW1hZ2VNYXNrKSk7Rj0xfWlmKHRoaXMuYnBjPUYsIXRoaXMuaW1hZ2VNYXNrKXt2YXIgUD1rLmdldFJhdygiQ1MiKXx8ay5nZXRSYXcoIkNvbG9yU3BhY2UiKTtpZighUClzd2l0Y2goKDAsbi5pbmZvKSgiSlBYIGltYWdlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgY29sb3Igc3BhY2VzKSIpLHMubnVtQ29tcHMpe2Nhc2UgMTpQPWwuTmFtZS5nZXQoIkRldmljZUdyYXkiKTticmVhaztjYXNlIDM6UD1sLk5hbWUuZ2V0KCJEZXZpY2VSR0IiKTticmVhaztjYXNlIDQ6UD1sLk5hbWUuZ2V0KCJEZXZpY2VDTVlLIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkpQWCBpbWFnZXMgd2l0aCAiLmNvbmNhdChzLm51bUNvbXBzLCIgY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLiIpKX10aGlzLmNvbG9yU3BhY2U9by5Db2xvclNwYWNlLnBhcnNlKHtjczpQLHhyZWY6cixyZXNvdXJjZXM6Zj9hOm51bGwscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pLHRoaXMubnVtQ29tcHM9dGhpcy5jb2xvclNwYWNlLm51bUNvbXBzfWlmKHRoaXMuZGVjb2RlPWsuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKSx0aGlzLm5lZWRzRGVjb2RlPSExLHRoaXMuZGVjb2RlJiYodGhpcy5jb2xvclNwYWNlJiYhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSxGKXx8eSYmIW8uQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsMSkpKXt0aGlzLm5lZWRzRGVjb2RlPSEwO3ZhciBUPSgxPDxGKS0xO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzPVtdLHRoaXMuZGVjb2RlQWRkZW5kcz1bXTtmb3IodmFyIEk9dGhpcy5jb2xvclNwYWNlJiYiSW5kZXhlZCI9PT10aGlzLmNvbG9yU3BhY2UubmFtZSxFPTAsaj0wO0U8dGhpcy5kZWNvZGUubGVuZ3RoO0UrPTIsKytqKXt2YXIgTT10aGlzLmRlY29kZVtFXSxfPXRoaXMuZGVjb2RlW0UrMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbal09ST8oXy1NKS9UOl8tTSx0aGlzLmRlY29kZUFkZGVuZHNbal09ST9NOlQqTX19ZD90aGlzLnNtYXNrPW5ldyBlKHt4cmVmOnIscmVzOmEsaW1hZ2U6ZCxpc0lubGluZTpmLHBkZkZ1bmN0aW9uRmFjdG9yeTptLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmJ9KTpnJiYoZyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9nLmRpY3QuZ2V0KCJJTSIsIkltYWdlTWFzayIpP3RoaXMubWFzaz1uZXcgZSh7eHJlZjpyLHJlczphLGltYWdlOmcsaXNJbmxpbmU6Zixpc01hc2s6ITAscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pOigwLG4ud2FybikoIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKTp0aGlzLm1hc2s9Zyl9dmFyIHQscixmLHksbTtyZXR1cm4gdD1lLHI9W3trZXk6ImRyYXdXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMud2lkdGgsdGhpcy5zbWFzayYmdGhpcy5zbWFzay53aWR0aHx8MCx0aGlzLm1hc2smJnRoaXMubWFzay53aWR0aHx8MCl9fSx7a2V5OiJkcmF3SGVpZ2h0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsdGhpcy5zbWFzayYmdGhpcy5zbWFzay5oZWlnaHR8fDAsdGhpcy5tYXNrJiZ0aGlzLm1hc2suaGVpZ2h0fHwwKX19LHtrZXk6ImRlY29kZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMuYnBjLGE9dGhpcy5udW1Db21wcyxpPXRoaXMuZGVjb2RlQWRkZW5kcyxvPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLHM9KDE8PG4pLTE7aWYoMSE9PW4pe3ZhciBjPTA7Zm9yKHQ9MCxyPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7dDxyO3QrKylmb3IodmFyIHU9MDt1PGE7dSsrKWVbY109ZyhlW2NdLGlbdV0sb1t1XSxzKSxjKyt9ZWxzZSBmb3IodD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyllW3RdPSshZVt0XX19LHtrZXk6ImdldENvbXBvbmVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnBjO2lmKDg9PT10KXJldHVybiBlO3ZhciByLG49dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LGk9dGhpcy5udW1Db21wcyxvPW4qYSppLHM9MDtyPXQ8PTg/bmV3IFVpbnQ4QXJyYXkobyk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KG8pOm5ldyBVaW50MzJBcnJheShvKTt2YXIgYyx1LGw9bippLGY9KDE8PHQpLTEsaD0wO2lmKDE9PT10KWZvcih2YXIgZCxwLGcsdj0wO3Y8YTt2Kyspe2ZvcihwPWgrKC04JmwpLGc9aCtsO2g8cDspdT1lW3MrK10scltoXT11Pj43JjEscltoKzFdPXU+PjYmMSxyW2grMl09dT4+NSYxLHJbaCszXT11Pj40JjEscltoKzRdPXU+PjMmMSxyW2grNV09dT4+MiYxLHJbaCs2XT11Pj4xJjEscltoKzddPTEmdSxoKz04O2lmKGg8Zylmb3IodT1lW3MrK10sZD0xMjg7aDxnOylyW2grK109KyEhKHUmZCksZD4+PTF9ZWxzZXt2YXIgeT0wO2Zvcih1PTAsaD0wLGM9bztoPGM7KytoKXtmb3IoaCVsPT0wJiYodT0wLHk9MCk7eTx0Oyl1PXU8PDh8ZVtzKytdLHkrPTg7dmFyIG09eS10LGI9dT4+bTtiPDA/Yj0wOmI+ZiYmKGI9ZikscltoXT1iLHUmPSgxPDxtKS0xLHk9bX19cmV0dXJuIHJ9fSx7a2V5OiJmaWxsT3BhY2l0eSIsdmFsdWU6ZnVuY3Rpb24odCxyLGEsaSxvKXt2YXIgcyxjLHUsbCxmLGgsZD10aGlzLnNtYXNrLHA9dGhpcy5tYXNrO2lmKGQpYz1kLndpZHRoLHU9ZC5oZWlnaHQscz1uZXcgVWludDhDbGFtcGVkQXJyYXkoYyp1KSxkLmZpbGxHcmF5QnVmZmVyKHMpLGM9PT1yJiZ1PT09YXx8KHM9dihzLGQuYnBjLGMsdSxyLGEpKTtlbHNlIGlmKHApaWYocCBpbnN0YW5jZW9mIGUpe2ZvcihjPXAud2lkdGgsdT1wLmhlaWdodCxzPW5ldyBVaW50OENsYW1wZWRBcnJheShjKnUpLHAubnVtQ29tcHM9MSxwLmZpbGxHcmF5QnVmZmVyKHMpLGw9MCxmPWMqdTtsPGY7KytsKXNbbF09MjU1LXNbbF07Yz09PXImJnU9PT1hfHwocz12KHMscC5icGMsYyx1LHIsYSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkocCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gbWFzayBmb3JtYXQuIik7cz1uZXcgVWludDhDbGFtcGVkQXJyYXkociphKTt2YXIgZz10aGlzLm51bUNvbXBzO2ZvcihsPTAsZj1yKmE7bDxmOysrbCl7dmFyIHk9MCxtPWwqZztmb3IoaD0wO2g8ZzsrK2gpe3ZhciBiPW9bbStoXSx3PTIqaDtpZihiPHBbd118fGI+cFt3KzFdKXt5PTI1NTticmVha319c1tsXT15fX1pZihzKWZvcihsPTAsaD0zLGY9cippO2w8ZjsrK2wsaCs9NCl0W2hdPXNbbF07ZWxzZSBmb3IobD0wLGg9MyxmPXIqaTtsPGY7KytsLGgrPTQpdFtoXT0yNTV9fSx7a2V5OiJ1bmRvUHJlYmxlbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLm1hdHRlO2lmKG4pZm9yKHZhciBhPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IobiwwKSxpPWFbMF0sbz1hWzFdLHM9YVsyXSxjPXQqcio0LHU9MDt1PGM7dSs9NCl7dmFyIGw9ZVt1KzNdO2lmKDAhPT1sKXt2YXIgZj0yNTUvbDtlW3VdPShlW3VdLWkpKmYraSxlW3UrMV09KGVbdSsxXS1vKSpmK28sZVt1KzJdPShlW3UrMl0tcykqZitzfWVsc2UgZVt1XT0yNTUsZVt1KzFdPTI1NSxlW3UrMl09MjU1fX19LHtrZXk6ImNyZWF0ZUltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9dGhpcy5kcmF3V2lkdGgscj10aGlzLmRyYXdIZWlnaHQsYT17d2lkdGg6dCxoZWlnaHQ6cixpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlLGtpbmQ6MCxkYXRhOm51bGx9LGk9dGhpcy5udW1Db21wcyxvPXRoaXMud2lkdGgscz10aGlzLmhlaWdodCx1PXRoaXMuYnBjLGw9byppKnUrNz4+MztpZighZSl7dmFyIGY7aWYoIkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT11P2Y9bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PXV8fHRoaXMubmVlZHNEZWNvZGV8fChmPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCksZiYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJnQ9PT1vJiZyPT09cyl7aWYoYS5raW5kPWYsYS5kYXRhPXRoaXMuZ2V0SW1hZ2VCeXRlcyhzKmwse30pLHRoaXMubmVlZHNEZWNvZGUpeygwLG4uYXNzZXJ0KShmPT09bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2Zvcih2YXIgaD1hLmRhdGEsZD0wLHA9aC5sZW5ndGg7ZDxwO2QrKyloW2RdXj0yNTV9cmV0dXJuIGF9aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIGMuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2spe3ZhciBnPXMqbDtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6Zyo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gYS5raW5kPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCxhLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKGcse2RyYXdXaWR0aDp0LGRyYXdIZWlnaHQ6cixmb3JjZVJHQjohMH0pLGF9fX12YXIgdix5LG09dGhpcy5nZXRJbWFnZUJ5dGVzKHMqbCx7aW50ZXJuYWw6ITB9KSxiPTB8bS5sZW5ndGgvbCpyL3Msdz10aGlzLmdldENvbXBvbmVudHMobSk7cmV0dXJuIGV8fHRoaXMuc21hc2t8fHRoaXMubWFzaz8oYS5raW5kPW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFAsYS5kYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KnIqNCksdj0xLHk9ITAsdGhpcy5maWxsT3BhY2l0eShhLmRhdGEsdCxyLGIsdykpOihhLmtpbmQ9bi5JbWFnZUtpbmQuUkdCXzI0QlBQLGEuZGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCpyKjMpLHY9MCx5PSExKSx0aGlzLm5lZWRzRGVjb2RlJiZ0aGlzLmRlY29kZUJ1ZmZlcih3KSx0aGlzLmNvbG9yU3BhY2UuZmlsbFJnYihhLmRhdGEsbyxzLHQscixiLHUsdyx2KSx5JiZ0aGlzLnVuZG9QcmVibGVuZChhLmRhdGEsdCxiKSxhfX0se2tleToiZmlsbEdyYXlCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlJlYWRpbmcgZ3JheSBzY2FsZSBmcm9tIGEgY29sb3IgaW1hZ2U6ICIuY29uY2F0KHQpKTt2YXIgcixhLGk9dGhpcy53aWR0aCxvPXRoaXMuaGVpZ2h0LHM9dGhpcy5icGMsYz1pKnQqcys3Pj4zLHU9dGhpcy5nZXRJbWFnZUJ5dGVzKG8qYyx7aW50ZXJuYWw6ITB9KSxsPXRoaXMuZ2V0Q29tcG9uZW50cyh1KTtpZigxIT09cyl7dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIobCksYT1pKm87dmFyIGY9MjU1LygoMTw8cyktMSk7Zm9yKHI9MDtyPGE7KytyKWVbcl09ZipsW3JdfWVsc2UgaWYoYT1pKm8sdGhpcy5uZWVkc0RlY29kZSlmb3Iocj0wO3I8YTsrK3IpZVtyXT1sW3JdLTEmMjU1O2Vsc2UgZm9yKHI9MDtyPGE7KytyKWVbcl09MjU1Ji1sW3JdfX0se2tleToiZ2V0SW1hZ2VCeXRlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmRyYXdXaWR0aCxhPXQuZHJhd0hlaWdodCxpPXQuZm9yY2VSR0Isbz12b2lkIDAhPT1pJiZpLGM9dC5pbnRlcm5hbCx1PXZvaWQgMCE9PWMmJmM7dGhpcy5pbWFnZS5yZXNldCgpLHRoaXMuaW1hZ2UuZHJhd1dpZHRoPXJ8fHRoaXMud2lkdGgsdGhpcy5pbWFnZS5kcmF3SGVpZ2h0PWF8fHRoaXMuaGVpZ2h0LHRoaXMuaW1hZ2UuZm9yY2VSR0I9ISFvO3ZhciBsPXRoaXMuaW1hZ2UuZ2V0Qnl0ZXMoZSk7cmV0dXJuIHV8fHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBzLkRlY29kZVN0cmVhbT9sOigoMCxuLmFzc2VydCkobCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksJ1BERkltYWdlLmdldEltYWdlQnl0ZXM6IFVuc3VwcG9ydGVkICJpbWFnZUJ5dGVzIiB0eXBlLicpLG5ldyBVaW50OEFycmF5KGwpKX19XSxmPVt7a2V5OiJidWlsZEltYWdlIix2YWx1ZTooeT1oKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgYSxvLHMsYyx1LGwsZixkLHAsZyx2LHk7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gYT1yLnhyZWYsbz1yLnJlcyxzPXIuaW1hZ2UsYz1yLmlzSW5saW5lLHU9dm9pZCAwIT09YyYmYyxsPXIucGRmRnVuY3Rpb25GYWN0b3J5LGY9ci5sb2NhbENvbG9yU3BhY2VDYWNoZSxkPXMscD1udWxsLGc9bnVsbCx2PXMuZGljdC5nZXQoIlNNYXNrIikseT1zLmRpY3QuZ2V0KCJNYXNrIiksdj92IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtP3A9djooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvU01hc2sgZm9ybWF0LiIpOnkmJih5IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KHkpP2c9eTooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvTWFzayBmb3JtYXQuIikpLHQuYWJydXB0KCJyZXR1cm4iLG5ldyBlKHt4cmVmOmEscmVzOm8saW1hZ2U6ZCxpc0lubGluZTp1LHNtYXNrOnAsbWFzazpnLHBkZkZ1bmN0aW9uRmFjdG9yeTpsLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSksbT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXkuYXBwbHkoZSx0KTtmdW5jdGlvbiBpKGUpe2QoYSxyLG4saSxvLCJuZXh0IixlKX1mdW5jdGlvbiBvKGUpe2QoYSxyLG4saSxvLCJ0aHJvdyIsZSl9aSh2b2lkIDApfSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY3JlYXRlUmF3TWFzayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPWUuaW1nQXJyYXksYT1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PShhKzc+PjMpKmksbD1uLmJ5dGVMZW5ndGg7aWYoIW98fHMmJnUhPT1sP3M/KCh0PW5ldyBVaW50OEFycmF5KHUpKS5zZXQobiksdC5maWxsKDI1NSxsKSk6dD1uZXcgVWludDhBcnJheShuKTp0PW4scylmb3Iocj0wO3I8bDtyKyspdFtyXV49MjU1O3JldHVybntkYXRhOnQsd2lkdGg6YSxoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpjfX19LHtrZXk6ImNyZWF0ZU1hc2siLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW1nQXJyYXkscj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PWUuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsbD12b2lkIDA9PT11fHx1LGY9MT09PXImJjE9PT1pJiZzPT09KDA9PT10Lmxlbmd0aHx8ISEoMTI4JnRbMF0pKTtpZihmKXJldHVybntpc1NpbmdsZU9wYXF1ZVBpeGVsOmZ9O2lmKGwmJm4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe3ZhciBoPW5ldyBPZmZzY3JlZW5DYW52YXMocixpKSxkPWguZ2V0Q29udGV4dCgiMmQiKSxwPWQuY3JlYXRlSW1hZ2VEYXRhKHIsaSk7cmV0dXJuKDAsYS5hcHBseU1hc2tJbWFnZURhdGEpKHtzcmM6dCxkZXN0OnAuZGF0YSx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6c30pLGQucHV0SW1hZ2VEYXRhKHAsMCwwKSx7ZGF0YTpudWxsLHdpZHRoOnIsaGVpZ2h0OmksaW50ZXJwb2xhdGU6YyxiaXRtYXA6aC50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX19cmV0dXJuIHRoaXMuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6dCx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6cyxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpvLGludGVycG9sYXRlOmN9KX19XSxyJiZwKHQucHJvdG90eXBlLHIpLGYmJnAodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuUERGSW1hZ2U9eX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFwcGx5TWFza0ltYWdlRGF0YT1mdW5jdGlvbihlKXt2YXIgdCxyPWUuc3JjLGk9ZS5zcmNQb3Msbz12b2lkIDA9PT1pPzA6aSxzPWUuZGVzdCxjPWUuZGVzdFBvcyx1PXZvaWQgMD09PWM/MDpjLGw9ZS53aWR0aCxmPWUuaGVpZ2h0LGg9ZS5pbnZlcnNlRGVjb2RlLGQ9dm9pZCAwIT09aCYmaCxwPW4uRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUsZz1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0PWQ/WzAscF06W3AsMF0pfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLDIpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSwyKTp2b2lkIDB9fSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpLHY9Z1swXSx5PWdbMV0sbT1sPj4zLGI9NyZsLHc9ci5sZW5ndGg7cz1uZXcgVWludDMyQXJyYXkocy5idWZmZXIpO2Zvcih2YXIgaz0wO2s8ZjtrKyspe2Zvcih2YXIgUz1vK207bzxTO28rKyl7dmFyIHg9bzx3P3Jbb106MjU1O3NbdSsrXT0xMjgmeD95OnYsc1t1KytdPTY0Jng/eTp2LHNbdSsrXT0zMiZ4P3k6dixzW3UrK109MTYmeD95OnYsc1t1KytdPTgmeD95OnYsc1t1KytdPTQmeD95OnYsc1t1KytdPTImeD95OnYsc1t1KytdPTEmeD95OnZ9aWYoMCE9PWIpZm9yKHZhciBPPW88dz9yW28rK106MjU1LEE9MDtBPGI7QSsrKXNbdSsrXT1PJjE8PDctQT95OnZ9cmV0dXJue3NyY1BvczpvLGRlc3RQb3M6dX19O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmluY3JlbWVudGFsVXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3JpZ2luYWxEYXRhLHI9ZS54cmVmSW5mbyxzPWUubmV3UmVmcyx1PWUueHJlZixoPXZvaWQgMD09PXU/bnVsbDp1LGc9ZS5oYXNYZmEsdj12b2lkIDAhPT1nJiZnLGI9ZS54ZmFEYXRhc2V0c1JlZix3PXZvaWQgMD09PWI/bnVsbDpiLGs9ZS5oYXNYZmFEYXRhc2V0c0VudHJ5LFM9dm9pZCAwIT09ayYmayx4PWUubmVlZEFwcGVhcmFuY2VzLE89ZS5hY3JvRm9ybVJlZixBPXZvaWQgMD09PU8/bnVsbDpPLEM9ZS5hY3JvRm9ybSxGPXZvaWQgMD09PUM/bnVsbDpDLFA9ZS54ZmFEYXRhLFQ9dm9pZCAwPT09UD9udWxsOlA7KGZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuYWNyb0Zvcm0saT1lLmFjcm9Gb3JtUmVmLG89ZS5oYXNYZmEscz1lLmhhc1hmYURhdGFzZXRzRW50cnksYz1lLnhmYURhdGFzZXRzUmVmLHU9ZS5uZWVkQXBwZWFyYW5jZXMsZj1lLm5ld1JlZnM7aWYoIW98fHN8fGN8fCgwLG4ud2FybikoIlhGQSAtIENhbm5vdCBzYXZlIGl0IiksdXx8byYmYyl7dmFyIGgscD1uZXcgYS5EaWN0KHQpLGc9bChyLmdldEtleXMoKSk7dHJ5e2ZvcihnLnMoKTshKGg9Zy5uKCkpLmRvbmU7KXt2YXIgdj1oLnZhbHVlO3Auc2V0KHYsci5nZXRSYXcodikpfX1jYXRjaChlKXtnLmUoZSl9ZmluYWxseXtnLmYoKX1pZihvJiYhcyl7dmFyIHk9ci5nZXQoIlhGQSIpLnNsaWNlKCk7eS5zcGxpY2UoMiwwLCJkYXRhc2V0cyIpLHkuc3BsaWNlKDMsMCxjKSxwLnNldCgiWEZBIix5KX11JiZwLnNldCgiTmVlZEFwcGVhcmFuY2VzIiwhMCk7dmFyIG09dC5lbmNyeXB0LGI9bnVsbDttJiYoYj1tLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShpLm51bSxpLmdlbikpO3ZhciB3PVtdO2QoaSxwLHcsYiksZi5wdXNoKHtyZWY6aSxkYXRhOncuam9pbigiIil9KX19KSh7eHJlZjpoLGFjcm9Gb3JtOkYsYWNyb0Zvcm1SZWY6QSxoYXNYZmE6dixoYXNYZmFEYXRhc2V0c0VudHJ5OlMseGZhRGF0YXNldHNSZWY6dyxuZWVkQXBwZWFyYW5jZXM6eCxuZXdSZWZzOnN9KSx2JiZmdW5jdGlvbihlKXt2YXIgdD1lLnhmYURhdGEscj1lLnhmYURhdGFzZXRzUmVmLGE9ZS5uZXdSZWZzLHM9ZS54cmVmO251bGw9PT10JiYodD1mdW5jdGlvbihlLHQpe3ZhciByLGE9bmV3IG8uU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpLHM9bCh0KTt0cnl7Zm9yKHMucygpOyEocj1zLm4oKSkuZG9uZTspe3ZhciBjPXIudmFsdWUueGZhO2lmKGMpe3ZhciB1PWMucGF0aCxmPWMudmFsdWU7aWYodSl7dmFyIGg9YS5kb2N1bWVudEVsZW1lbnQuc2VhcmNoTm9kZSgoMCxpLnBhcnNlWEZBUGF0aCkodSksMCk7aD9BcnJheS5pc0FycmF5KGYpP2guY2hpbGROb2Rlcz1mLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBvLlNpbXBsZURPTU5vZGUoInZhbHVlIixlKX0pKTpoLmNoaWxkTm9kZXM9W25ldyBvLlNpbXBsZURPTU5vZGUoIiN0ZXh0IixmKV06KDAsbi53YXJuKSgiTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICIuY29uY2F0KHUpKX19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgZD1bXTtyZXR1cm4gYS5kb2N1bWVudEVsZW1lbnQuZHVtcChkKSxkLmpvaW4oIiIpfShzLmZldGNoSWZSZWYocikuZ2V0U3RyaW5nKCksYSkpO3ZhciBjPXMuZW5jcnlwdDtjJiYodD1jLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShyLm51bSxyLmdlbikuZW5jcnlwdFN0cmluZyh0KSk7dmFyIHU9IiIuY29uY2F0KHIubnVtLCIgIikuY29uY2F0KHIuZ2VuLCIgb2JqXG4iKSsiPDwgL1R5cGUgL0VtYmVkZGVkRmlsZSAvTGVuZ3RoICIuY29uY2F0KHQubGVuZ3RoLCI+Plxuc3RyZWFtXG4iKSt0KyJcbmVuZHN0cmVhbVxuZW5kb2JqXG4iO2EucHVzaCh7cmVmOnIsZGF0YTp1fSl9KHt4ZmFEYXRhOlQseGZhRGF0YXNldHNSZWY6dyxuZXdSZWZzOnMseHJlZjpofSk7dmFyIEksRSxqPW5ldyBhLkRpY3QobnVsbCksTT1yLm5ld1JlZixfPXQuYXQoLTEpOzEwPT09X3x8MTM9PT1fPyhJPVtdLEU9dC5sZW5ndGgpOihJPVsiXG4iXSxFPXQubGVuZ3RoKzEpLGouc2V0KCJTaXplIixNLm51bSsxKSxqLnNldCgiUHJldiIsci5zdGFydFhSZWYpLGouc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYUmVmIikpLG51bGwhPT1yLnJvb3RSZWYmJmouc2V0KCJSb290IixyLnJvb3RSZWYpLG51bGwhPT1yLmluZm9SZWYmJmouc2V0KCJJbmZvIixyLmluZm9SZWYpLG51bGwhPT1yLmVuY3J5cHRSZWYmJmouc2V0KCJFbmNyeXB0IixyLmVuY3J5cHRSZWYpLHMucHVzaCh7cmVmOk0sZGF0YToiIn0pO3ZhciBMLFI9W1swLDEsNjU1MzVdXSxOPVswLDFdLEQ9MCxCPWwocz1zLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVmLm51bS10LnJlZi5udW19KSkpO3RyeXtmb3IoQi5zKCk7IShMPUIubigpKS5kb25lOyl7dmFyIFU9TC52YWx1ZSwkPVUucmVmLFg9VS5kYXRhO0Q9TWF0aC5tYXgoRCxFKSxSLnB1c2goWzEsRSxNYXRoLm1pbigkLmdlbiw2NTUzNSldKSxFKz1YLmxlbmd0aCxOLnB1c2goJC5udW0sMSksSS5wdXNoKFgpfX1jYXRjaChlKXtCLmUoZSl9ZmluYWxseXtCLmYoKX1pZihqLnNldCgiSW5kZXgiLE4pLEFycmF5LmlzQXJyYXkoci5maWxlSWRzKSYmci5maWxlSWRzLmxlbmd0aD4wKXt2YXIgSD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLmZsb29yKERhdGUubm93KCkvMWUzKSxhPXQuZmlsZW5hbWV8fCIiLGk9W3IudG9TdHJpbmcoKSxhLGUudG9TdHJpbmcoKV0sbz1pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLHM9MCx1PU9iamVjdC52YWx1ZXModC5pbmZvKTtzPHUubGVuZ3RoO3MrKyl7dmFyIGw9dVtzXTtpLnB1c2gobCksbys9bC5sZW5ndGh9Zm9yKHZhciBmPW5ldyBVaW50OEFycmF5KG8pLGg9MCxkPTAscD1pO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1wW2RdO20oZyxoLGYpLGgrPWcubGVuZ3RofXJldHVybigwLG4uYnl0ZXNUb1N0cmluZykoKDAsYy5jYWxjdWxhdGVNRDUpKGYpKX0oRSxyKTtqLnNldCgiSUQiLFtyLmZpbGVJZHNbMF0sSF0pfXZhciBxPVsxLE1hdGguY2VpbChNYXRoLmxvZzIoRCkvOCksMl0sRz0ocVswXStxWzFdK3FbMl0pKlIubGVuZ3RoO2ouc2V0KCJXIixxKSxqLnNldCgiTGVuZ3RoIixHKSxJLnB1c2goIiIuY29uY2F0KE0ubnVtLCIgIikuY29uY2F0KE0uZ2VuLCIgb2JqXG4iKSkscChqLEksbnVsbCksSS5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgej1JLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLFc9IlxuZW5kc3RyZWFtXG5lbmRvYmpcbnN0YXJ0eHJlZlxuIi5jb25jYXQoRSwiXG4lJUVPRlxuIiksVj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCt6K0crVy5sZW5ndGgpO1Yuc2V0KHQpO3ZhciBZLEssSj10Lmxlbmd0aCxaPWwoSSk7dHJ5e2ZvcihaLnMoKTshKFk9Wi5uKCkpLmRvbmU7KXt2YXIgUT1ZLnZhbHVlO20oUSxKLFYpLEorPVEubGVuZ3RofX1jYXRjaChlKXtaLmUoZSl9ZmluYWxseXtaLmYoKX1mb3IodmFyIGVlPTAsdGU9UjtlZTx0ZS5sZW5ndGg7ZWUrKyl7dmFyIHJlPSgzLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KEs9dGVbZWVdKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwzIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KEspfHxmKEssMyl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksbmU9cmVbMF0sYWU9cmVbMV0saWU9cmVbMl07Sj15KG5lLHFbMF0sSixWKSxKPXkoYWUscVsxXSxKLFYpLEo9eShpZSxxWzJdLEosVil9cmV0dXJuIG0oVyxKLFYpLFZ9LHQud3JpdGVEaWN0PXAsdC53cml0ZU9iamVjdD1kO3ZhciBuPXIoMiksYT1yKDEzNCksaT1yKDEzNSksbz1yKDE5NSkscz1yKDEzNiksYz1yKDE5Nik7ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sdShlKX1mdW5jdGlvbiBsKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBoKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gaChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGQoZSx0LHIsbil7ci5wdXNoKCIiLmNvbmNhdChlLm51bSwiICIpLmNvbmNhdChlLmdlbiwiIG9ialxuIikpLHQgaW5zdGFuY2VvZiBhLkRpY3Q/cCh0LHIsbik6dCBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSYmZyh0LHIsbiksci5wdXNoKCJcbmVuZG9ialxuIil9ZnVuY3Rpb24gcChlLHQscil7dC5wdXNoKCI8PCIpO3ZhciBuLGE9bChlLmdldEtleXMoKSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO3QucHVzaCgiIC8iLmNvbmNhdCgoMCxpLmVzY2FwZVBERk5hbWUpKG8pLCIgIikpLHYoZS5nZXRSYXcobyksdCxyKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9dC5wdXNoKCI+PiIpfWZ1bmN0aW9uIGcoZSx0LHIpe3AoZS5kaWN0LHQsciksdC5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgbj1lLmdldFN0cmluZygpO251bGwhPT1yJiYobj1yLmVuY3J5cHRTdHJpbmcobikpLHQucHVzaChuLCJcbmVuZHN0cmVhbSIpfWZ1bmN0aW9uIHYoZSx0LHIpe2UgaW5zdGFuY2VvZiBhLk5hbWU/dC5wdXNoKCIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShlLm5hbWUpKSk6ZSBpbnN0YW5jZW9mIGEuUmVmP3QucHVzaCgiIi5jb25jYXQoZS5udW0sIiAiKS5jb25jYXQoZS5nZW4sIiBSIikpOkFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24oZSx0LHIpe3QucHVzaCgiWyIpO3ZhciBuLGE9ITAsaT1sKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTthP2E9ITE6dC5wdXNoKCIgIiksdihvLHQscil9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXQucHVzaCgiXSIpfShlLHQscik6InN0cmluZyI9PXR5cGVvZiBlPyhudWxsIT09ciYmKGU9ci5lbmNyeXB0U3RyaW5nKGUpKSx0LnB1c2goIigiLmNvbmNhdCgoMCxpLmVzY2FwZVN0cmluZykoZSksIikiKSkpOiJudW1iZXIiPT10eXBlb2YgZT90LnB1c2goKDAsaS5udW1iZXJUb1N0cmluZykoZSkpOiJib29sZWFuIj09dHlwZW9mIGU/dC5wdXNoKGUudG9TdHJpbmcoKSk6ZSBpbnN0YW5jZW9mIGEuRGljdD9wKGUsdCxyKTplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtP2coZSx0LHIpOm51bGw9PT1lP3QucHVzaCgibnVsbCIpOigwLG4ud2FybikoIlVuaGFuZGxlZCB2YWx1ZSBpbiB3cml0ZXI6ICIuY29uY2F0KHUoZSksIiwgcGxlYXNlIGZpbGUgYSBidWcuIikpfWZ1bmN0aW9uIHkoZSx0LHIsbil7Zm9yKHZhciBhPXQrci0xO2E+ci0xO2EtLSluW2FdPTI1NSZlLGU+Pj04O3JldHVybiByK3R9ZnVuY3Rpb24gbShlLHQscil7Zm9yKHZhciBuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXJbdCtuXT0yNTUmZS5jaGFyQ29kZUF0KG4pfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhNTFBhcnNlckVycm9yQ29kZT10LlhNTFBhcnNlckJhc2U9dC5TaW1wbGVYTUxQYXJzZXI9dC5TaW1wbGVET01Ob2RlPXZvaWQgMDt2YXIgbj1yKDEzNSk7ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYShlLHQpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGkoZSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9YyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxjKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBjKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB1KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dShlLHQpOnZvaWQgMH19ZnVuY3Rpb24gdShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGwoZSl9ZnVuY3Rpb24gZihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1sKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgcD17Tm9FcnJvcjowLEVuZE9mRG9jdW1lbnQ6LTEsVW50ZXJtaW5hdGVkQ2RhdDotMixVbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbjotMyxVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246LTQsVW50ZXJtaW5hdGVkQ29tbWVudDotNSxNYWxmb3JtZWRFbGVtZW50Oi02LE91dE9mTWVtb3J5Oi03LFVudGVybWluYXRlZEF0dHJpYnV0ZVZhbHVlOi04LFVudGVybWluYXRlZEVsZW1lbnQ6LTksRWxlbWVudE5ldmVyQmVndW46LTEwfTtmdW5jdGlvbiBnKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4iICI9PT1yfHwiXG4iPT09cnx8IlxyIj09PXJ8fCJcdCI9PT1yfXQuWE1MUGFyc2VyRXJyb3JDb2RlPXA7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6Il9yZXNvbHZlRW50aXRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGUucmVwbGFjZSgvJihbXjtdKyk7L2csKGZ1bmN0aW9uKGUscil7aWYoIiN4Ij09PXIuc3Vic3RyaW5nKDAsMikpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHIuc3Vic3RyaW5nKDIpLDE2KSk7aWYoIiMiPT09ci5zdWJzdHJpbmcoMCwxKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoci5zdWJzdHJpbmcoMSksMTApKTtzd2l0Y2gocil7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UicXVvdCI6cmV0dXJuJyInO2Nhc2UiYXBvcyI6cmV0dXJuIicifXJldHVybiB0Lm9uUmVzb2x2ZUVudGl0eShyKX0pKX19LHtrZXk6Il9wYXJzZUNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj10O2Z1bmN0aW9uIGEoKXtmb3IoO248ZS5sZW5ndGgmJmcoZSxuKTspKytufWZvcig7bjxlLmxlbmd0aCYmIWcoZSxuKSYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXTspKytuO3ZhciBpPWUuc3Vic3RyaW5nKHQsbik7Zm9yKGEoKTtuPGUubGVuZ3RoJiYiPiIhPT1lW25dJiYiLyIhPT1lW25dJiYiPyIhPT1lW25dOyl7YSgpO2Zvcih2YXIgbyxzPSIiO248ZS5sZW5ndGgmJiFnKGUsbikmJiI9IiE9PWVbbl07KXMrPWVbbl0sKytuO2lmKGEoKSwiPSIhPT1lW25dKXJldHVybiBudWxsOysrbixhKCk7dmFyIGM9ZVtuXTtpZignIichPT1jJiYiJyIhPT1jKXJldHVybiBudWxsO3ZhciB1PWUuaW5kZXhPZihjLCsrbik7aWYodTwwKXJldHVybiBudWxsO289ZS5zdWJzdHJpbmcobix1KSxyLnB1c2goe25hbWU6cyx2YWx1ZTp0aGlzLl9yZXNvbHZlRW50aXRpZXMobyl9KSxuPXUrMSxhKCl9cmV0dXJue25hbWU6aSxhdHRyaWJ1dGVzOnIscGFyc2VkOm4tdH19fSx7a2V5OiJfcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQ7cjxlLmxlbmd0aCYmIWcoZSxyKSYmIj4iIT09ZVtyXSYmIj8iIT09ZVtyXSYmIi8iIT09ZVtyXTspKytyO3ZhciBuPWUuc3Vic3RyaW5nKHQscik7IWZ1bmN0aW9uKCl7Zm9yKDtyPGUubGVuZ3RoJiZnKGUscik7KSsrcn0oKTtmb3IodmFyIGE9cjtyPGUubGVuZ3RoJiYoIj8iIT09ZVtyXXx8Ij4iIT09ZVtyKzFdKTspKytyO3JldHVybntuYW1lOm4sdmFsdWU6ZS5zdWJzdHJpbmcoYSxyKSxwYXJzZWQ6ci10fX19LHtrZXk6InBhcnNlWG1sIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOyl7dmFyIHI9dDtpZigiPCI9PT1lW3RdKXt2YXIgbj12b2lkIDA7c3dpdGNoKGVbKytyXSl7Y2FzZSIvIjppZigrK3IsKG49ZS5pbmRleE9mKCI+IixyKSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhyLG4pKSxyPW4rMTticmVhaztjYXNlIj8iOisrcjt2YXIgYT10aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHIpO2lmKCI/PiIhPT1lLnN1YnN0cmluZyhyK2EucGFyc2VkLHIrYS5wYXJzZWQrMikpcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO3RoaXMub25QaShhLm5hbWUsYS52YWx1ZSkscis9YS5wYXJzZWQrMjticmVhaztjYXNlIiEiOmlmKCItLSI9PT1lLnN1YnN0cmluZyhyKzEsciszKSl7aWYoKG49ZS5pbmRleE9mKCItLVx4M2UiLHIrMykpPDApcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkQ29tbWVudCk7dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcociszLG4pKSxyPW4rM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXtpZigobj1lLmluZGV4T2YoIl1dPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRDZGF0KTt0aGlzLm9uQ2RhdGEoZS5zdWJzdHJpbmcocis4LG4pKSxyPW4rM31lbHNle2lmKCJET0NUWVBFIiE9PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciBpPWUuaW5kZXhPZigiWyIscis4KSxvPSExO2lmKChuPWUuaW5kZXhPZigiPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO2lmKGk+MCYmbj5pKXtpZigobj1lLmluZGV4T2YoIl0+IixyKzgpKTwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7bz0hMH12YXIgcz1lLnN1YnN0cmluZyhyKzgsbisobz8xOjApKTt0aGlzLm9uRG9jdHlwZShzKSxyPW4rKG8/MjoxKX1icmVhaztkZWZhdWx0OnZhciBjPXRoaXMuX3BhcnNlQ29udGVudChlLHIpO2lmKG51bGw9PT1jKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciB1PSExO2lmKCIvPiI9PT1lLnN1YnN0cmluZyhyK2MucGFyc2VkLHIrYy5wYXJzZWQrMikpdT0hMDtlbHNlIGlmKCI+IiE9PWUuc3Vic3RyaW5nKHIrYy5wYXJzZWQscitjLnBhcnNlZCsxKSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uQmVnaW5FbGVtZW50KGMubmFtZSxjLmF0dHJpYnV0ZXMsdSkscis9Yy5wYXJzZWQrKHU/MjoxKX19ZWxzZXtmb3IoO3I8ZS5sZW5ndGgmJiI8IiE9PWVbcl07KXIrKzt2YXIgbD1lLnN1YnN0cmluZyh0LHIpO3RoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyhsKSl9dD1yfX19LHtrZXk6Im9uUmVzb2x2ZUVudGl0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIiYiLmNvbmNhdChlLCI7Iil9fSx7a2V5OiJvblBpIix2YWx1ZTpmdW5jdGlvbihlLHQpe319LHtrZXk6Im9uQ29tbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25DZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25Eb2N0eXBlIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvblRleHQiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6Im9uQmVnaW5FbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7fX0se2tleToib25FbmRFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt9fV0pLGV9KCk7dC5YTUxQYXJzZXJCYXNlPXY7dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubm9kZU5hbWU9dCx0aGlzLm5vZGVWYWx1ZT1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwYXJlbnROb2RlIix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pfXJldHVybiBkKGUsW3trZXk6ImZpcnN0Q2hpbGQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlc1swXX19LHtrZXk6Im5leHRTaWJsaW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZihlKXt2YXIgdD1lLmluZGV4T2YodGhpcyk7aWYoLTEhPT10KXJldHVybiBlW3QrMV19fX0se2tleToidGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbigiIik6dGhpcy5ub2RlVmFsdWV8fCIifX0se2tleToiY2hpbGRyZW4iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN8fFtdfX0se2tleToiaGFzQ2hpbGROb2RlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzJiZ0aGlzLmNoaWxkTm9kZXMubGVuZ3RoPjB9fSx7a2V5OiJzZWFyY2hOb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHQ+PWUubGVuZ3RoKXJldHVybiB0aGlzO2Zvcih2YXIgcj1lW3RdLG49W10sYT10aGlzOzspe2lmKHIubmFtZT09PWEubm9kZU5hbWUpe2lmKDAhPT1yLnBvcyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO3ZhciBpLGM9MCx1PW8ocyhuLnBvcCgpLDEpWzBdLmNoaWxkTm9kZXMpO3RyeXtmb3IodS5zKCk7IShpPXUubigpKS5kb25lOyl7dmFyIGw9aS52YWx1ZTtpZihyLm5hbWU9PT1sLm5vZGVOYW1lKXtpZihjPT09ci5wb3MpcmV0dXJuIGwuc2VhcmNoTm9kZShlLHQrMSk7YysrfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJuIGEuc2VhcmNoTm9kZShlLHQrMSl9dmFyIGY9YS5zZWFyY2hOb2RlKGUsdCsxKTtpZihudWxsIT09ZilyZXR1cm4gZn1pZihhLmNoaWxkTm9kZXMmJjAhPT1hLmNoaWxkTm9kZXMubGVuZ3RoKW4ucHVzaChbYSwwXSksYT1hLmNoaWxkTm9kZXNbMF07ZWxzZXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKDswIT09bi5sZW5ndGg7KXt2YXIgaD1zKG4ucG9wKCksMiksZD1oWzBdLHA9aFsxXSsxO2lmKHA8ZC5jaGlsZE5vZGVzLmxlbmd0aCl7bi5wdXNoKFtkLHBdKSxhPWQuY2hpbGROb2Rlc1twXTticmVha319aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsfX19fSx7a2V5OiJkdW1wIix2YWx1ZTpmdW5jdGlvbihlKXtpZigiI3RleHQiIT09dGhpcy5ub2RlTmFtZSl7aWYoZS5wdXNoKCI8Ii5jb25jYXQodGhpcy5ub2RlTmFtZSkpLHRoaXMuYXR0cmlidXRlcyl7dmFyIHQscj1vKHRoaXMuYXR0cmlidXRlcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlO2UucHVzaCgiICIuY29uY2F0KGEubmFtZSwnPSInKS5jb25jYXQoKDAsbi5lbmNvZGVUb1htbFN0cmluZykoYS52YWx1ZSksJyInKSl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX1pZih0aGlzLmhhc0NoaWxkTm9kZXMoKSl7ZS5wdXNoKCI+Iik7dmFyIGkscz1vKHRoaXMuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KWkudmFsdWUuZHVtcChlKX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1lLnB1c2goIjwvIi5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKX1lbHNlIHRoaXMubm9kZVZhbHVlP2UucHVzaCgiPiIuY29uY2F0KCgwLG4uZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKSwiPC8iKS5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKTplLnB1c2goIi8+Iil9ZWxzZSBlLnB1c2goKDAsbi5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpKX19XSksZX0oKTt0LlNpbXBsZURPTU5vZGU9eTt2YXIgbT1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYShlLHQpfShjLGUpO3ZhciB0LHIsbj0odD1jLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1pKHQpO2lmKHIpe3ZhciBhPWkodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGMoZSl7dmFyIHQscj1lLmhhc0F0dHJpYnV0ZXMsYT12b2lkIDAhPT1yJiZyLGk9ZS5sb3dlckNhc2VOYW1lLG89dm9pZCAwIT09aSYmaTtyZXR1cm4gZih0aGlzLGMpLCh0PW4uY2FsbCh0aGlzKSkuX2N1cnJlbnRGcmFnbWVudD1udWxsLHQuX3N0YWNrPW51bGwsdC5fZXJyb3JDb2RlPXAuTm9FcnJvcix0Ll9oYXNBdHRyaWJ1dGVzPWEsdC5fbG93ZXJDYXNlTmFtZT1vLHR9cmV0dXJuIGQoYyxbe2tleToicGFyc2VGcm9tU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W10sdGhpcy5fc3RhY2s9W10sdGhpcy5fZXJyb3JDb2RlPXAuTm9FcnJvcix0aGlzLnBhcnNlWG1sKGUpLHRoaXMuX2Vycm9yQ29kZT09PXAuTm9FcnJvcil7dmFyIHQ9cyh0aGlzLl9jdXJyZW50RnJhZ21lbnQsMSlbMF07aWYodClyZXR1cm57ZG9jdW1lbnRFbGVtZW50OnR9fX19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZighZyhlLHQpKXJldHVybiExO3JldHVybiEwfShlKSl7dmFyIHQ9bmV3IHkoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX19fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgeSgiI3RleHQiLGUpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHQpfX0se2tleToib25CZWdpbkVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9sb3dlckNhc2VOYW1lJiYoZT1lLnRvTG93ZXJDYXNlKCkpO3ZhciBuPW5ldyB5KGUpO24uY2hpbGROb2Rlcz1bXSx0aGlzLl9oYXNBdHRyaWJ1dGVzJiYobi5hdHRyaWJ1dGVzPXQpLHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG4pLHJ8fCh0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCksdGhpcy5fY3VycmVudEZyYWdtZW50PW4uY2hpbGROb2Rlcyl9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107dmFyIHQ9dGhpcy5fY3VycmVudEZyYWdtZW50LmF0KC0xKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPW8odC5jaGlsZE5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5wYXJlbnROb2RlPXR9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHR9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9lcnJvckNvZGU9ZX19XSksY30odik7dC5TaW1wbGVYTUxQYXJzZXI9bX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbGN1bGF0ZVNIQTI1Nj10LmNhbGN1bGF0ZU1ENT10LlBERjIwPXQuUERGMTc9dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PXQuQVJDRm91ckNpcGhlcj10LkFFUzI1NkNpcGhlcj10LkFFUzEyOENpcGhlcj12b2lkIDAsdC5jYWxjdWxhdGVTSEEzODQ9ayx0LmNhbGN1bGF0ZVNIQTUxMj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTk3KTtmdW5jdGlvbiBvKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnMoZSx0KX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj11KGUpO2lmKHQpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxsKGUpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWwoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1sKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09bChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLmE9MCx0aGlzLmI9MDtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMjU2KSxuPXQubGVuZ3RoLGE9MDthPDI1NjsrK2EpclthXT1hO2Zvcih2YXIgaT0wLG89MDtpPDI1NjsrK2kpe3ZhciBzPXJbaV07bz1vK3MrdFtpJW5dJjI1NSxyW2ldPXJbb10scltvXT1zfXRoaXMucz1yfXJldHVybiBkKGUsW3trZXk6ImVuY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuYSxyPXRoaXMuYixuPXRoaXMucyxhPWUubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkoYSksbz0wO288YTsrK28pe3ZhciBzPW5bdD10KzEmMjU1XSxjPW5bcj1yK3MmMjU1XTtuW3RdPWMsbltyXT1zLGlbb109ZVtvXV5uW3MrYyYyNTVdfXJldHVybiB0aGlzLmE9dCx0aGlzLmI9cixpfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fV0pLGV9KCk7dC5BUkNGb3VyQ2lwaGVyPXA7dmFyIGcsdix5PShnPW5ldyBVaW50OEFycmF5KFs3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjFdKSx2PW5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LC0zODk1NjQ1ODYsNjA2MTA1ODE5LC0xMDQ0NTI1MzMwLC0xNzY0MTg4OTcsMTIwMDA4MDQyNiwtMTQ3MzIzMTM0MSwtNDU3MDU5ODMsMTc3MDAzNTQxNiwtMTk1ODQxNDQxNywtNDIwNjMsLTE5OTA0MDQxNjIsMTgwNDYwMzY4MiwtNDAzNDExMDEsLTE1MDIwMDIyOTAsMTIzNjUzNTMyOSwtMTY1Nzk2NTEwLC0xMDY5NTAxNjMyLDY0MzcxNzcxMywtMzczODk3MzAyLC03MDE1NTg2OTEsMzgwMTYwODMsLTY2MDQ3ODMzNSwtNDA1NTM3ODQ4LDU2ODQ0NjQzOCwtMTAxOTgwMzY5MCwtMTg3MzYzOTYxLDExNjM1MzE1MDEsLTE0NDQ2ODE0NjcsLTUxNDAzNzg0LDE3MzUzMjg0NzMsLTE5MjY2MDc3MzQsLTM3ODU1OCwtMjAyMjU3NDQ2MywxODM5MDMwNTYyLC0zNTMwOTU1NiwtMTUzMDk5MjA2MCwxMjcyODkzMzUzLC0xNTU0OTc2MzIsLTEwOTQ3MzA2NDAsNjgxMjc5MTc0LC0zNTg1MzcyMjIsLTcyMjUyMTk3OSw3NjAyOTE4OSwtNjQwMzY0NDg3LC00MjE4MTU4MzUsNTMwNzQyNTIwLC05OTUzMzg2NTEsLTE5ODYzMDg0NCwxMTI2ODkxNDE1LC0xNDE2MzU0OTA1LC01NzQzNDA1NSwxNzAwNDg1NTcxLC0xODk0OTg2NjA2LC0xMDUxNTIzLC0yMDU0OTIyNzk5LDE4NzMzMTMzNTksLTMwNjExNzQ0LC0xNTYwMTk4MzgwLDEzMDkxNTE2NDksLTE0NTUyMzA3MCwtMTEyMDIxMDM3OSw3MTg3ODcyNTksLTM0MzQ4NTU1MV0pLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9MTczMjU4NDE5MyxvPS0yNzE3MzM4Nzkscz0tMTczMjU4NDE5NCxjPTI3MTczMzg3OCx1PXIrNzImLTY0LGw9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKG49MDtuPHI7KytuKWxbbl09ZVt0KytdO2xbbisrXT0xMjg7Zm9yKHZhciBmPXUtODtuPGY7KWxbbisrXT0wO2xbbisrXT1yPDwzJjI1NSxsW24rK109cj4+NSYyNTUsbFtuKytdPXI+PjEzJjI1NSxsW24rK109cj4+MjEmMjU1LGxbbisrXT1yPj4+MjkmMjU1LGxbbisrXT0wLGxbbisrXT0wLGxbbisrXT0wO3ZhciBoPW5ldyBJbnQzMkFycmF5KDE2KTtmb3Iobj0wO248dTspe2ZvcihhPTA7YTwxNjsrK2Esbis9NCloW2FdPWxbbl18bFtuKzFdPDw4fGxbbisyXTw8MTZ8bFtuKzNdPDwyNDt2YXIgZD1pLHA9byx5PXMsbT1jLGI9dm9pZCAwLHc9dm9pZCAwO2ZvcihhPTA7YTw2NDsrK2Epe2E8MTY/KGI9cCZ5fH5wJm0sdz1hKTphPDMyPyhiPW0mcHx+bSZ5LHc9NSphKzEmMTUpOmE8NDg/KGI9cF55Xm0sdz0zKmErNSYxNSk6KGI9eV4ocHx+bSksdz03KmEmMTUpO3ZhciBrPW0sUz1kK2IrdlthXStoW3ddfDAseD1nW2FdO209eSx5PXAscD1wKyhTPDx4fFM+Pj4zMi14KXwwLGQ9a31pPWkrZHwwLG89bytwfDAscz1zK3l8MCxjPWMrbXwwfXJldHVybiBuZXcgVWludDhBcnJheShbMjU1JmksaT4+OCYyNTUsaT4+MTYmMjU1LGk+Pj4yNCYyNTUsMjU1Jm8sbz4+OCYyNTUsbz4+MTYmMjU1LG8+Pj4yNCYyNTUsMjU1JnMscz4+OCYyNTUscz4+MTYmMjU1LHM+Pj4yNCYyNTUsMjU1JmMsYz4+OCYyNTUsYz4+MTYmMjU1LGM+Pj4yNCYyNTVdKX0pO3QuY2FsY3VsYXRlTUQ1PXk7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMuaGlnaD0wfHQsdGhpcy5sb3c9MHxyfXJldHVybiBkKGUsW3trZXk6ImFuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoJj1lLmhpZ2gsdGhpcy5sb3cmPWUubG93fX0se2tleToieG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmhpZ2hePWUuaGlnaCx0aGlzLmxvd149ZS5sb3d9fSx7a2V5OiJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdofD1lLmhpZ2gsdGhpcy5sb3d8PWUubG93fX0se2tleToic2hpZnRSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT49MzI/KHRoaXMubG93PXRoaXMuaGlnaD4+PmUtMzJ8MCx0aGlzLmhpZ2g9MCk6KHRoaXMubG93PXRoaXMubG93Pj4+ZXx0aGlzLmhpZ2g8PDMyLWUsdGhpcy5oaWdoPXRoaXMuaGlnaD4+PmV8MCl9fSx7a2V5OiJzaGlmdExlZnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2U+PTMyPyh0aGlzLmhpZ2g9dGhpcy5sb3c8PGUtMzIsdGhpcy5sb3c9MCk6KHRoaXMuaGlnaD10aGlzLmhpZ2g8PGV8dGhpcy5sb3c+Pj4zMi1lLHRoaXMubG93PDw9ZSl9fSx7a2V5OiJyb3RhdGVSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscjszMiZlPyhyPXRoaXMubG93LHQ9dGhpcy5oaWdoKToodD10aGlzLmxvdyxyPXRoaXMuaGlnaCksZSY9MzEsdGhpcy5sb3c9dD4+PmV8cjw8MzItZSx0aGlzLmhpZ2g9cj4+PmV8dDw8MzItZX19LHtrZXk6Im5vdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaCx0aGlzLmxvdz1+dGhpcy5sb3d9fSx7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSh0aGlzLmxvdz4+PjApKyhlLmxvdz4+PjApLHI9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihyKz0xKSx0aGlzLmxvdz0wfHQsdGhpcy5oaWdoPTB8cn19LHtrZXk6ImNvcHlUbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NSxlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTUsZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTUsZVt0KzNdPTI1NSZ0aGlzLmhpZ2gsZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1LGVbdCs1XT10aGlzLmxvdz4+MTYmMjU1LGVbdCs2XT10aGlzLmxvdz4+OCYyNTUsZVt0KzddPTI1NSZ0aGlzLmxvd319LHtrZXk6ImFzc2lnbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoPWUuaGlnaCx0aGlzLmxvdz1lLmxvd319XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIHQoZSx0LHIpe3JldHVybiBlJnRefmUmcn1mdW5jdGlvbiByKGUsdCxyKXtyZXR1cm4gZSZ0XmUmcl50JnJ9ZnVuY3Rpb24gbih0KXtyZXR1cm4gZSh0LDIpXmUodCwxMyleZSh0LDIyKX1mdW5jdGlvbiBhKHQpe3JldHVybiBlKHQsNileZSh0LDExKV5lKHQsMjUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUodCw3KV5lKHQsMTgpXnQ+Pj4zfXZhciBvPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoPTE3NzkwMzM3MDMsZD0zMTQ0MTM0Mjc3LHA9MTAxMzkwNDI0MixnPTI3NzM0ODA3NjIsdj0xMzU5ODkzMTE5LHk9MjYwMDgyMjkyNCxtPTUyODczNDYzNSxiPTE1NDE0NTkyMjUsdz02NCpNYXRoLmNlaWwoKHUrOSkvNjQpLGs9bmV3IFVpbnQ4QXJyYXkodyk7Zm9yKGw9MDtsPHU7KytsKWtbbF09c1tjKytdO2tbbCsrXT0xMjg7Zm9yKHZhciBTPXctODtsPFM7KWtbbCsrXT0wO2tbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT11Pj4+MjkmMjU1LGtbbCsrXT11Pj4yMSYyNTUsa1tsKytdPXU+PjEzJjI1NSxrW2wrK109dT4+NSYyNTUsa1tsKytdPXU8PDMmMjU1O3ZhciB4LE89bmV3IFVpbnQzMkFycmF5KDY0KTtmb3IobD0wO2w8dzspe2ZvcihmPTA7ZjwxNjsrK2YpT1tmXT1rW2xdPDwyNHxrW2wrMV08PDE2fGtbbCsyXTw8OHxrW2wrM10sbCs9NDtmb3IoZj0xNjtmPDY0OysrZilPW2ZdPTB8KGUoeD1PW2YtMl0sMTcpXmUoeCwxOSleeD4+PjEwKStPW2YtN10raShPW2YtMTVdKStPW2YtMTZdO3ZhciBBPWgsQz1kLEY9cCxQPWcsVD12LEk9eSxFPW0saj1iLE09dm9pZCAwLF89dm9pZCAwO2ZvcihmPTA7Zjw2NDsrK2YpTT1qK2EoVCkrdChULEksRSkrb1tmXStPW2ZdLF89bihBKStyKEEsQyxGKSxqPUUsRT1JLEk9VCxUPVArTXwwLFA9RixGPUMsQz1BLEE9TStffDA7aD1oK0F8MCxkPWQrQ3wwLHA9cCtGfDAsZz1nK1B8MCx2PXYrVHwwLHk9eStJfDAsbT1tK0V8MCxiPWIranwwfXJldHVybiBuZXcgVWludDhBcnJheShbaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaCxkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHA+PjI0JjI1NSxwPj4xNiYyNTUscD4+OCYyNTUsMjU1JnAsZz4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyx2Pj4yNCYyNTUsdj4+MTYmMjU1LHY+PjgmMjU1LDI1NSZ2LHk+PjI0JjI1NSx5Pj4xNiYyNTUseT4+OCYyNTUsMjU1JnksbT4+MjQmMjU1LG0+PjE2JjI1NSxtPj44JjI1NSwyNTUmbSxiPj4yNCYyNTUsYj4+MTYmMjU1LGI+PjgmMjU1LDI1NSZiXSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PWI7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5ub3QoKSxhLmFuZChuKSxlLnhvcihhKX1mdW5jdGlvbiB0KGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5hbmQobiksZS54b3IoYSksYS5hc3NpZ24ociksYS5hbmQobiksZS54b3IoYSl9ZnVuY3Rpb24gcihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgyOCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzNCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzOSksZS54b3Iocil9ZnVuY3Rpb24gbihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxNCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgxOCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCg0MSksZS54b3Iocil9ZnVuY3Rpb24gYShlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxKSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDgpLGUueG9yKHIpLHIuYXNzaWduKHQpLHIuc2hpZnRSaWdodCg3KSxlLnhvcihyKX1mdW5jdGlvbiBpKGUsdCxyKXtlLmFzc2lnbih0KSxlLnJvdGF0ZVJpZ2h0KDE5KSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDYxKSxlLnhvcihyKSxyLmFzc2lnbih0KSxyLnNoaWZ0UmlnaHQoNiksZS54b3Iocil9dmFyIG89W25ldyBtKDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksbmV3IG0oMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBtKDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSksbmV3IG0oMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxuZXcgbSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IG0oMTUwODk3MDk5MywzMDUzODM0MjY1KSxuZXcgbSgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLG5ldyBtKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IG0oMzYyNDM4MTA4MCwyNzM0ODgzMzk0KSxuZXcgbSgzMTA1OTg0MDEsMTE2NDk5NjU0MiksbmV3IG0oNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBtKDE0MjY4ODE5ODcsMzU5MDMwNDk5NCksbmV3IG0oMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxuZXcgbSgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IG0oMjYxNDg4ODEwMyw2MzM4MDMzMTcpLG5ldyBtKDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksbmV3IG0oMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgbSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksbmV3IG0oMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLG5ldyBtKDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgbSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksbmV3IG0oMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxuZXcgbSgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBtKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksbmV3IG0oMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxuZXcgbSgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IG0oMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxuZXcgbSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLG5ldyBtKDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IG0oMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxuZXcgbSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksbmV3IG0oMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IG0oNjY2MzA3MjA1LDExODgxNzk5NjQpLG5ldyBtKDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxuZXcgbSgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBtKDEzOTYxODIyOTEsMjY0MzgzMzgyMyksbmV3IG0oMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxuZXcgbSgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBtKDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksbmV3IG0oMjQ1Njk1NjAzNywzNDQwNzc2MjcpLG5ldyBtKDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IG0oMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxuZXcgbSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLG5ldyBtKDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgbSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLG5ldyBtKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksbmV3IG0oNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgbSgyNzU0MjMzNDQsODUxMTY5NzIwKSxuZXcgbSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksbmV3IG0oNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBtKDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxuZXcgbSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksbmV3IG0oOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBtKDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksbmV3IG0oMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxuZXcgbSgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBtKDE5NTU1NjIyMjIsMTU3NTk5MDAxMiksbmV3IG0oMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxuZXcgbSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBtKDIzNjE4NTI0MjQsNDQyNzc2MDQ0KSxuZXcgbSgyNDI4NDM2NDc0LDU5MzY5ODM0NCksbmV3IG0oMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgbSgzMjA0MDMxNDc5LDI5OTkzNTE1NzMpLG5ldyBtKDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksbmV3IG0oMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgbSgzNTE1MjY3MjcxLDU2NjI4MDcxMSksbmV3IG0oMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxuZXcgbSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBtKDExNjQxODQ3NCwxOTE0MTM4NTU0KSxuZXcgbSgxNzQyOTI0MjEsMjczMTA1NTI3MCksbmV3IG0oMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBtKDQ2MDM5MzI2OSwzMjA2MjAzMTUpLG5ldyBtKDY4NTQ3MTczMyw1ODc0OTY4MzYpLG5ldyBtKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgbSgxMDE3MDM2Mjk4LDM2NTU0MzEwMCksbmV3IG0oMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxuZXcgbSgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBtKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksbmV3IG0oMTYwNzE2NzkxNSw5ODcxNjc0NjgpLG5ldyBtKDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoLGQscCxnLHYseSxiPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Yj8obD1uZXcgbSgzNDE4MDcwMzY1LDMyMzgzNzEwMzIpLGY9bmV3IG0oMTY1NDI3MDI1MCw5MTQxNTA2NjMpLGg9bmV3IG0oMjQzODUyOTM3MCw4MTI3MDI5OTkpLGQ9bmV3IG0oMzU1NDYyMzYwLDQxNDQ5MTI2OTcpLHA9bmV3IG0oMTczMTQwNTQxNSw0MjkwNzc1ODU3KSxnPW5ldyBtKDIzOTQxODAyMzEsMTc1MDYwMzAyNSksdj1uZXcgbSgzNjc1MDA4NTI1LDE2OTQwNzY4MzkpLHk9bmV3IG0oMTIwMzA2MjgxMywzMjA0MDc1NDI4KSk6KGw9bmV3IG0oMTc3OTAzMzcwMyw0MDg5MjM1NzIwKSxmPW5ldyBtKDMxNDQxMzQyNzcsMjIyNzg3MzU5NSksaD1uZXcgbSgxMDEzOTA0MjQyLDQyNzExNzU3MjMpLGQ9bmV3IG0oMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KSxwPW5ldyBtKDEzNTk4OTMxMTksMjkxNzU2NTEzNyksZz1uZXcgbSgyNjAwODIyOTI0LDcyNTUxMTE5OSksdj1uZXcgbSg1Mjg3MzQ2MzUsNDIxNTM4OTU0NykseT1uZXcgbSgxNTQxNDU5MjI1LDMyNzAzMzIwOSkpO3ZhciB3LGssUz0xMjgqTWF0aC5jZWlsKCh1KzE3KS8xMjgpLHg9bmV3IFVpbnQ4QXJyYXkoUyk7Zm9yKHc9MDt3PHU7Kyt3KXhbd109c1tjKytdO3hbdysrXT0xMjg7Zm9yKHZhciBPPVMtMTY7dzxPOyl4W3crK109MDt4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109dT4+PjI5JjI1NSx4W3crK109dT4+MjEmMjU1LHhbdysrXT11Pj4xMyYyNTUseFt3KytdPXU+PjUmMjU1LHhbdysrXT11PDwzJjI1NTt2YXIgQT1uZXcgQXJyYXkoODApO2Zvcih3PTA7dzw4MDt3KyspQVt3XT1uZXcgbSgwLDApO3ZhciBDLEYsUD1uZXcgbSgwLDApLFQ9bmV3IG0oMCwwKSxJPW5ldyBtKDAsMCksRT1uZXcgbSgwLDApLGo9bmV3IG0oMCwwKSxNPW5ldyBtKDAsMCksXz1uZXcgbSgwLDApLEw9bmV3IG0oMCwwKSxSPW5ldyBtKDAsMCksTj1uZXcgbSgwLDApLEQ9bmV3IG0oMCwwKSxCPW5ldyBtKDAsMCk7Zm9yKHc9MDt3PFM7KXtmb3Ioaz0wO2s8MTY7KytrKUFba10uaGlnaD14W3ddPDwyNHx4W3crMV08PDE2fHhbdysyXTw8OHx4W3crM10sQVtrXS5sb3c9eFt3KzRdPDwyNHx4W3crNV08PDE2fHhbdys2XTw8OHx4W3crN10sdys9ODtmb3Ioaz0xNjtrPDgwOysraylpKEM9QVtrXSxBW2stMl0sQiksQy5hZGQoQVtrLTddKSxhKEQsQVtrLTE1XSxCKSxDLmFkZChEKSxDLmFkZChBW2stMTZdKTtmb3IoUC5hc3NpZ24obCksVC5hc3NpZ24oZiksSS5hc3NpZ24oaCksRS5hc3NpZ24oZCksai5hc3NpZ24ocCksTS5hc3NpZ24oZyksXy5hc3NpZ24odiksTC5hc3NpZ24oeSksaz0wO2s8ODA7KytrKVIuYXNzaWduKEwpLG4oRCxqLEIpLFIuYWRkKEQpLGUoRCxqLE0sXyxCKSxSLmFkZChEKSxSLmFkZChvW2tdKSxSLmFkZChBW2tdKSxyKE4sUCxCKSx0KEQsUCxULEksQiksTi5hZGQoRCksQz1MLEw9XyxfPU0sTT1qLEUuYWRkKFIpLGo9RSxFPUksST1ULFQ9UCxDLmFzc2lnbihSKSxDLmFkZChOKSxQPUM7bC5hZGQoUCksZi5hZGQoVCksaC5hZGQoSSksZC5hZGQoRSkscC5hZGQoaiksZy5hZGQoTSksdi5hZGQoXykseS5hZGQoTCl9cmV0dXJuIGI/KEY9bmV3IFVpbnQ4QXJyYXkoNDgpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSk6KEY9bmV3IFVpbnQ4QXJyYXkoNjQpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSx2LmNvcHlUbyhGLDQ4KSx5LmNvcHlUbyhGLDU2KSksRn19KCk7ZnVuY3Rpb24gayhlLHQscil7cmV0dXJuIHcoZSx0LHIsITApfXQuY2FsY3VsYXRlU0hBNTEyPXc7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImRlY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19XSksZX0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuIiksdGhpcy5fcz1uZXcgVWludDhBcnJheShbOTksMTI0LDExOSwxMjMsMjQyLDEwNywxMTEsMTk3LDQ4LDEsMTAzLDQzLDI1NCwyMTUsMTcxLDExOCwyMDIsMTMwLDIwMSwxMjUsMjUwLDg5LDcxLDI0MCwxNzMsMjEyLDE2MiwxNzUsMTU2LDE2NCwxMTQsMTkyLDE4MywyNTMsMTQ3LDM4LDU0LDYzLDI0NywyMDQsNTIsMTY1LDIyOSwyNDEsMTEzLDIxNiw0OSwyMSw0LDE5OSwzNSwxOTUsMjQsMTUwLDUsMTU0LDcsMTgsMTI4LDIyNiwyMzUsMzksMTc4LDExNyw5LDEzMSw0NCwyNiwyNywxMTAsOTAsMTYwLDgyLDU5LDIxNCwxNzksNDEsMjI3LDQ3LDEzMiw4MywyMDksMCwyMzcsMzIsMjUyLDE3Nyw5MSwxMDYsMjAzLDE5MCw1Nyw3NCw3Niw4OCwyMDcsMjA4LDIzOSwxNzAsMjUxLDY3LDc3LDUxLDEzMyw2OSwyNDksMiwxMjcsODAsNjAsMTU5LDE2OCw4MSwxNjMsNjQsMTQzLDE0NiwxNTcsNTYsMjQ1LDE4OCwxODIsMjE4LDMzLDE2LDI1NSwyNDMsMjEwLDIwNSwxMiwxOSwyMzYsOTUsMTUxLDY4LDIzLDE5NiwxNjcsMTI2LDYxLDEwMCw5MywyNSwxMTUsOTYsMTI5LDc5LDIyMCwzNCw0MiwxNDQsMTM2LDcwLDIzOCwxODQsMjAsMjIyLDk0LDExLDIxOSwyMjQsNTAsNTgsMTAsNzMsNiwzNiw5MiwxOTQsMjExLDE3Miw5OCwxNDUsMTQ5LDIyOCwxMjEsMjMxLDIwMCw1NSwxMDksMTQxLDIxMyw3OCwxNjksMTA4LDg2LDI0NCwyMzQsMTAxLDEyMiwxNzQsOCwxODYsMTIwLDM3LDQ2LDI4LDE2NiwxODAsMTk4LDIzMiwyMjEsMTE2LDMxLDc1LDE4OSwxMzksMTM4LDExMiw2MiwxODEsMTAyLDcyLDMsMjQ2LDE0LDk3LDUzLDg3LDE4NSwxMzQsMTkzLDI5LDE1OCwyMjUsMjQ4LDE1MiwxNywxMDUsMjE3LDE0MiwxNDgsMTU1LDMwLDEzNSwyMzMsMjA2LDg1LDQwLDIyMywxNDAsMTYxLDEzNywxMywxOTEsMjMwLDY2LDEwNCw2NSwxNTMsNDUsMTUsMTc2LDg0LDE4NywyMl0pLHRoaXMuX2ludl9zPW5ldyBVaW50OEFycmF5KFs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSksdGhpcy5fbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pLHRoaXMuX21peENvbD1uZXcgVWludDhBcnJheSgyNTYpO2Zvcih2YXIgdD0wO3Q8MjU2O3QrKyl0aGlzLl9taXhDb2xbdF09dDwxMjg/dDw8MTp0PDwxXjI3O3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KSx0aGlzLmJ1ZmZlclBvc2l0aW9uPTB9cmV0dXJuIGQoZSxbe2tleToiX2V4cGFuZEtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfX0se2tleToiX2RlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9bmV3IFVpbnQ4QXJyYXkoMTYpO2kuc2V0KGUpO2Zvcih2YXIgbz0wLHM9dGhpcy5fa2V5U2l6ZTtvPDE2OysrbywrK3MpaVtvXV49dFtzXTtmb3IodmFyIGM9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7Yz49MTstLWMpe3I9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHU9MDt1PDE2OysrdSlpW3VdPXRoaXMuX2ludl9zW2lbdV1dO2Zvcih2YXIgbD0wLGY9MTYqYztsPDE2OysrbCwrK2YpaVtsXV49dFtmXTtmb3IodmFyIGg9MDtoPDE2O2grPTQpe3ZhciBkPXRoaXMuX21peFtpW2hdXSxwPXRoaXMuX21peFtpW2grMV1dLGc9dGhpcy5fbWl4W2lbaCsyXV0sdj10aGlzLl9taXhbaVtoKzNdXTtyPWRecD4+PjhecDw8MjReZz4+PjE2Xmc8PDE2XnY+Pj4yNF52PDw4LGlbaF09cj4+PjI0JjI1NSxpW2grMV09cj4+MTYmMjU1LGlbaCsyXT1yPj44JjI1NSxpW2grM109MjU1JnJ9fXI9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHk9MDt5PDE2OysreSlpW3ldPXRoaXMuX2ludl9zW2lbeV1dLGlbeV1ePXRbeV07cmV0dXJuIGl9fSx7a2V5OiJfZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT10aGlzLl9zLG89bmV3IFVpbnQ4QXJyYXkoMTYpO28uc2V0KGUpO2Zvcih2YXIgcz0wO3M8MTY7KytzKW9bc11ePXRbc107Zm9yKHZhciBjPTE7Yzx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247YysrKXtmb3IodmFyIHU9MDt1PDE2OysrdSlvW3VdPWlbb1t1XV07YT1vWzFdLG9bMV09b1s1XSxvWzVdPW9bOV0sb1s5XT1vWzEzXSxvWzEzXT1hLGE9b1syXSxuPW9bNl0sb1syXT1vWzEwXSxvWzZdPW9bMTRdLG9bMTBdPWEsb1sxNF09bixhPW9bM10sbj1vWzddLHI9b1sxMV0sb1szXT1vWzE1XSxvWzddPWEsb1sxMV09bixvWzE1XT1yO2Zvcih2YXIgbD0wO2w8MTY7bCs9NCl7dmFyIGY9b1tsKzBdLGg9b1tsKzFdLGQ9b1tsKzJdLHA9b1tsKzNdO3I9Zl5oXmRecCxvW2wrMF1ePXJedGhpcy5fbWl4Q29sW2ZeaF0sb1tsKzFdXj1yXnRoaXMuX21peENvbFtoXmRdLG9bbCsyXV49cl50aGlzLl9taXhDb2xbZF5wXSxvW2wrM11ePXJedGhpcy5fbWl4Q29sW3BeZl19Zm9yKHZhciBnPTAsdj0xNipjO2c8MTY7KytnLCsrdilvW2ddXj10W3ZdfWZvcih2YXIgeT0wO3k8MTY7Kyt5KW9beV09aVtvW3ldXTthPW9bMV0sb1sxXT1vWzVdLG9bNV09b1s5XSxvWzldPW9bMTNdLG9bMTNdPWEsYT1vWzJdLG49b1s2XSxvWzJdPW9bMTBdLG9bNl09b1sxNF0sb1sxMF09YSxvWzE0XT1uLGE9b1szXSxuPW9bN10scj1vWzExXSxvWzNdPW9bMTVdLG9bN109YSxvWzExXT1uLG9bMTVdPXI7Zm9yKHZhciBtPTAsYj10aGlzLl9rZXlTaXplO208MTY7KyttLCsrYilvW21dXj10W2JdO3JldHVybiBvfX0se2tleToiX2RlY3J5cHRCbG9jazIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uLGk9W10sbz10aGlzLml2LHM9MDtzPHI7KytzKWlmKG5bYV09ZVtzXSwhKCsrYTwxNikpe2Zvcih2YXIgYz10aGlzLl9kZWNyeXB0KG4sdGhpcy5fa2V5KSx1PTA7dTwxNjsrK3UpY1t1XV49b1t1XTtvPW4saS5wdXNoKGMpLG49bmV3IFVpbnQ4QXJyYXkoMTYpLGE9MH1pZih0aGlzLmJ1ZmZlcj1uLHRoaXMuYnVmZmVyTGVuZ3RoPWEsdGhpcy5pdj1vLDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIGw9MTYqaS5sZW5ndGg7aWYodCl7dmFyIGY9aS5hdCgtMSksaD1mWzE1XTtpZihoPD0xNil7Zm9yKHZhciBkPTE1LHA9MTYtaDtkPj1wOy0tZClpZihmW2RdIT09aCl7aD0wO2JyZWFrfWwtPWgsaVtpLmxlbmd0aC0xXT1mLnN1YmFycmF5KDAsMTYtaCl9fWZvcih2YXIgZz1uZXcgVWludDhBcnJheShsKSx2PTAseT0wLG09aS5sZW5ndGg7djxtOysrdix5Kz0xNilnLnNldChpW3ZdLHkpO3JldHVybiBnfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLG49ZS5sZW5ndGgsYT10aGlzLmJ1ZmZlcixpPXRoaXMuYnVmZmVyUG9zaXRpb247aWYocil0aGlzLml2PXI7ZWxzZXtmb3IodmFyIG89MDtpPDE2JiZvPG47KytvLCsraSlhW2ldPWVbb107aWYoaTwxNilyZXR1cm4gdGhpcy5idWZmZXJMZW5ndGg9aSxuZXcgVWludDhBcnJheSgwKTt0aGlzLml2PWEsZT1lLnN1YmFycmF5KDE2KX1yZXR1cm4gdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5kZWNyeXB0QmxvY2s9dGhpcy5fZGVjcnlwdEJsb2NrMix0aGlzLmRlY3J5cHRCbG9jayhlLHQpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aCxuPXRoaXMuYnVmZmVyLGE9dGhpcy5idWZmZXJQb3NpdGlvbixpPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKHZhciBvPTA7bzxyOysrbylpZihuW2FdPWVbb10sISgrK2E8MTYpKXtmb3IodmFyIHM9MDtzPDE2OysrcyluW3NdXj10W3NdO3ZhciBjPXRoaXMuX2VuY3J5cHQobix0aGlzLl9rZXkpO3Q9YyxpLnB1c2goYyksbj1uZXcgVWludDhBcnJheSgxNiksYT0wfWlmKHRoaXMuYnVmZmVyPW4sdGhpcy5idWZmZXJMZW5ndGg9YSx0aGlzLml2PXQsMD09PWkubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtmb3IodmFyIHU9MTYqaS5sZW5ndGgsbD1uZXcgVWludDhBcnJheSh1KSxmPTAsaD0wLGQ9aS5sZW5ndGg7ZjxkOysrZixoKz0xNilsLnNldChpW2ZdLGgpO3JldHVybiBsfX1dKSxlfSgpLE89ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzKSkuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMCxuLl9rZXlTaXplPTE2MCxuLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSksbi5fa2V5PW4uX2V4cGFuZEtleShlKSxufXJldHVybiBkKHIsW3trZXk6Il9leHBhbmRLZXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Mscj10aGlzLl9yY29uLG49bmV3IFVpbnQ4QXJyYXkoMTc2KTtuLnNldChlKTtmb3IodmFyIGE9MTYsaT0xO2E8MTc2OysraSl7dmFyIG89blthLTNdLHM9blthLTJdLGM9blthLTFdLHU9blthLTRdO289dFtvXSxzPXRbc10sYz10W2NdLHU9dFt1XSxvXj1yW2ldO2Zvcih2YXIgbD0wO2w8NDsrK2wpblthXT1vXj1uW2EtMTZdLG5bKythXT1zXj1uW2EtMTZdLG5bKythXT1jXj1uW2EtMTZdLG5bKythXT11Xj1uW2EtMTZdLGErK31yZXR1cm4gbn19XSkscn0oeCk7dC5BRVMxMjhDaXBoZXI9Tzt2YXIgQT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMpKS5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0LG4uX2tleVNpemU9MjI0LG4uX2tleT1uLl9leHBhbmRLZXkoZSksbn1yZXR1cm4gZChyLFt7a2V5OiJfZXhwYW5kS2V5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zLHI9bmV3IFVpbnQ4QXJyYXkoMjQwKTtyLnNldChlKTtmb3IodmFyIG4sYSxpLG8scz0xLGM9MzIsdT0xO2M8MjQwOysrdSl7YyUzMj09MTY/KG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSk6YyUzMj09MCYmKG49cltjLTNdLGE9cltjLTJdLGk9cltjLTFdLG89cltjLTRdLG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSxuXj1zLChzPDw9MSk+PTI1NiYmKHM9MjU1JigyN15zKSkpO2Zvcih2YXIgbD0wO2w8NDsrK2wpcltjXT1uXj1yW2MtMzJdLHJbKytjXT1hXj1yW2MtMzJdLHJbKytjXT1pXj1yW2MtMzJdLHJbKytjXT1vXj1yW2MtMzJdLGMrK31yZXR1cm4gcn19XSkscn0oeCk7dC5BRVMyNTZDaXBoZXI9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKSxpLnNldCh0LGUubGVuZ3RoKSxpLnNldChyLGUubGVuZ3RoK3QubGVuZ3RoKTt2YXIgbz1iKGksMCxpLmxlbmd0aCk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJjaGVja1VzZXJQYXNzd29yZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2Euc2V0KGUsMCksYS5zZXQodCxlLmxlbmd0aCk7dmFyIGk9YihhLDAsYS5sZW5ndGgpO3JldHVybigwLG4uaXNBcnJheUVxdWFsKShpLHIpfX0se2tleToiZ2V0T3duZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTthLnNldChlLDApLGEuc2V0KHQsZS5sZW5ndGgpLGEuc2V0KHIsZS5sZW5ndGgrdC5sZW5ndGgpO3ZhciBpPWIoYSwwLGEubGVuZ3RoKTtyZXR1cm4gbmV3IEEoaSkuZGVjcnlwdEJsb2NrKG4sITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19LHtrZXk6ImdldFVzZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApLG4uc2V0KHQsZS5sZW5ndGgpO3ZhciBhPWIobiwwLG4ubGVuZ3RoKTtyZXR1cm4gbmV3IEEoYSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19XSksZX0oKTt0LlBERjE3PUM7dmFyIEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXtmb3IodmFyIG49Yih0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLGE9WzBdLGk9MDtpPDY0fHxhLmF0KC0xKT5pLTMyOyl7dmFyIG89ZS5sZW5ndGgrbi5sZW5ndGgrci5sZW5ndGgscz1uZXcgVWludDhBcnJheShvKSxjPTA7cy5zZXQoZSxjKSxjKz1lLmxlbmd0aCxzLnNldChuLGMpLGMrPW4ubGVuZ3RoLHMuc2V0KHIsYyk7Zm9yKHZhciB1PW5ldyBVaW50OEFycmF5KDY0Km8pLGw9MCxmPTA7bDw2NDtsKyssZis9byl1LnNldChzLGYpO3ZhciBoPShhPW5ldyBPKG4uc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQodSxuLnN1YmFycmF5KDE2LDMyKSkpLnNsaWNlKDAsMTYpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCklMzswPT09aD9uPWIoYSwwLGEubGVuZ3RoKToxPT09aD9uPWsoYSwwLGEubGVuZ3RoKToyPT09aCYmKG49dyhhLDAsYS5sZW5ndGgpKSxpKyt9cmV0dXJuIG4uc3ViYXJyYXkoMCwzMil9cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KX1yZXR1cm4gZCh0LFt7a2V5OiJoYXNoIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUodCxyLG4pfX0se2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSxpKXt2YXIgbz1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCs1Nik7by5zZXQodCwwKSxvLnNldChyLHQubGVuZ3RoKSxvLnNldChhLHQubGVuZ3RoK3IubGVuZ3RoKTt2YXIgcz1lKHQsbyxhKTtyZXR1cm4oMCxuLmlzQXJyYXlFcXVhbCkocyxpKX19LHtrZXk6ImNoZWNrVXNlclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7aS5zZXQodCwwKSxpLnNldChyLHQubGVuZ3RoKTt2YXIgbz1lKHQsaSxbXSk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJnZXRPd25lcktleSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrNTYpO2kuc2V0KHQsMCksaS5zZXQocix0Lmxlbmd0aCksaS5zZXQobix0Lmxlbmd0aCtyLmxlbmd0aCk7dmFyIG89ZSh0LGksbik7cmV0dXJuIG5ldyBBKG8pLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fSx7a2V5OiJnZXRVc2VyS2V5Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGE9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7YS5zZXQodCwwKSxhLnNldChyLHQubGVuZ3RoKTt2YXIgaT1lKHQsYSxbXSk7cmV0dXJuIG5ldyBBKGkpLmRlY3J5cHRCbG9jayhuLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fV0pLHR9KCl9KCk7dC5QREYyMD1GO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2YodGhpcyxlKSx0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yPXQsdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3Rvcj1yfXJldHVybiBkKGUsW3trZXk6ImNyZWF0ZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IGkuRGVjcnlwdFN0cmVhbShlLHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVjcnlwdEJsb2NrKGUsdCl9KSl9fSx7a2V5OiJkZWNyeXB0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcixyPSgwLG4uc3RyaW5nVG9CeXRlcykoZSk7cmV0dXJuIHI9dC5kZWNyeXB0QmxvY2sociwhMCksKDAsbi5ieXRlc1RvU3RyaW5nKShyKX19LHtrZXk6ImVuY3J5cHRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yO2lmKHQgaW5zdGFuY2VvZiB4KXt2YXIgcj0xNi1lLmxlbmd0aCUxNjtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLnJlcGVhdChyKTt2YXIgYT1uZXcgVWludDhBcnJheSgxNik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhKTtlbHNlIGZvcih2YXIgaT0wO2k8MTY7aSsrKWFbaV09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7dmFyIG89KDAsbi5zdHJpbmdUb0J5dGVzKShlKTtvPXQuZW5jcnlwdChvLGEpO3ZhciBzPW5ldyBVaW50OEFycmF5KDE2K28ubGVuZ3RoKTtyZXR1cm4gcy5zZXQoYSkscy5zZXQobywxNiksKDAsbi5ieXRlc1RvU3RyaW5nKShzKX12YXIgYz0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO3JldHVybiBjPXQuZW5jcnlwdChjKSwoMCxuLmJ5dGVzVG9TdHJpbmcpKGMpfX1dKSxlfSgpLFQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHQodCxyLG4sYSxpLG8scyxjKXt2YXIgdSxsLGY9NDArbi5sZW5ndGgrdC5sZW5ndGgsaD1uZXcgVWludDhBcnJheShmKSxkPTA7aWYocilmb3IobD1NYXRoLm1pbigzMixyLmxlbmd0aCk7ZDxsOysrZCloW2RdPXJbZF07Zm9yKHU9MDtkPDMyOyloW2QrK109ZVt1KytdO2Zvcih1PTAsbD1uLmxlbmd0aDt1PGw7Kyt1KWhbZCsrXT1uW3VdO2ZvcihoW2QrK109MjU1JmksaFtkKytdPWk+PjgmMjU1LGhbZCsrXT1pPj4xNiYyNTUsaFtkKytdPWk+Pj4yNCYyNTUsdT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTtvPj00JiYhYyYmKGhbZCsrXT0yNTUsaFtkKytdPTI1NSxoW2QrK109MjU1LGhbZCsrXT0yNTUpO3ZhciBnPXkoaCwwLGQpLHY9cz4+MztpZihvPj0zKWZvcih1PTA7dTw1MDsrK3UpZz15KGcsMCx2KTt2YXIgbSxiPWcuc3ViYXJyYXkoMCx2KTtpZihvPj0zKXtmb3IoZD0wO2Q8MzI7KytkKWhbZF09ZVtkXTtmb3IodT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTttPW5ldyBwKGIpLmVuY3J5cHRCbG9jayh5KGgsMCxkKSksbD1iLmxlbmd0aDt2YXIgdz1uZXcgVWludDhBcnJheShsKTtmb3IodT0xO3U8PTE5OysrdSl7Zm9yKHZhciBrPTA7azxsOysrayl3W2tdPWJba11edTttPW5ldyBwKHcpLmVuY3J5cHRCbG9jayhtKX1mb3IodT0wLGw9bS5sZW5ndGg7dTxsOysrdSlpZihhW3VdIT09bVt1XSlyZXR1cm4gbnVsbH1lbHNlIGZvcih1PTAsbD0obT1uZXcgcChiKS5lbmNyeXB0QmxvY2soZSkpLmxlbmd0aDt1PGw7Kyt1KWlmKGFbdV0hPT1tW3VdKXJldHVybiBudWxsO3JldHVybiBifXZhciByPWEuTmFtZS5nZXQoIklkZW50aXR5Iik7ZnVuY3Rpb24gaShlLHQscil7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrOSksbz1yLmxlbmd0aDtmb3Iobj0wO248bzsrK24paVtuXT1yW25dO3JldHVybiBpW24rK109MjU1JmUsaVtuKytdPWU+PjgmMjU1LGlbbisrXT1lPj4xNiYyNTUsaVtuKytdPTI1NSZ0LGlbbisrXT10Pj44JjI1NSxhJiYoaVtuKytdPTExNSxpW24rK109NjUsaVtuKytdPTEwOCxpW24rK109ODQpLHkoaSwwLG4pLnN1YmFycmF5KDAsTWF0aC5taW4oci5sZW5ndGgrNSwxNikpfWZ1bmN0aW9uIG8oZSx0LHIsbyxzKXtpZighKHQgaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNyeXB0IGZpbHRlciBuYW1lLiIpO3ZhciBjLHU9ZS5nZXQodC5uYW1lKTtpZihudWxsIT11JiYoYz11LmdldCgiQ0ZNIikpLCFjfHwiTm9uZSI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTfTtpZigiVjIiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcChpKHIsbyxzLCExKSl9O2lmKCJBRVNWMiI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPKGkocixvLHMsITApKX07aWYoIkFFU1YzIj09PWMubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEocyl9O3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoaSxvLGMpe2YodGhpcyxzKTt2YXIgdT1pLmdldCgiRmlsdGVyIik7aWYoISgwLGEuaXNOYW1lKSh1LCJTdGFuZGFyZCIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPXUubmFtZSx0aGlzLmRpY3Q9aTt2YXIgbD1pLmdldCgiViIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHwxIT09bCYmMiE9PWwmJjQhPT1sJiY1IT09bCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0iKTt0aGlzLmFsZ29yaXRobT1sO3ZhciBoPWkuZ2V0KCJMZW5ndGgiKTtpZighaClpZihsPD0zKWg9NDA7ZWxzZXt2YXIgZD1pLmdldCgiQ0YiKSxnPWkuZ2V0KCJTdG1GIik7aWYoZCBpbnN0YW5jZW9mIGEuRGljdCYmZyBpbnN0YW5jZW9mIGEuTmFtZSl7ZC5zdXBwcmVzc0VuY3J5cHRpb249ITA7dmFyIHY9ZC5nZXQoZy5uYW1lKTsoaD12JiZ2LmdldCgiTGVuZ3RoIil8fDEyOCk8NDAmJihoPDw9Myl9fWlmKCFOdW1iZXIuaXNJbnRlZ2VyKGgpfHxoPDQwfHxoJTghPTApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBtPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMCwzMiksYj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsMzIpLHc9aS5nZXQoIlAiKSxrPWkuZ2V0KCJSIiksUz0oND09PWx8fDU9PT1sKSYmITEhPT1pLmdldCgiRW5jcnlwdE1ldGFkYXRhIik7dGhpcy5lbmNyeXB0TWV0YWRhdGE9Uzt2YXIgeCxPLEE9KDAsbi5zdHJpbmdUb0J5dGVzKShvKTtpZihjKXtpZig2PT09ayl0cnl7Yz0oMCxuLnV0ZjhTdHJpbmdUb1N0cmluZykoYyl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTogVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLiIpfXg9KDAsbi5zdHJpbmdUb0J5dGVzKShjKX1pZig1IT09bClPPXQoQSx4LG0sYix3LGssaCxTKTtlbHNle3ZhciBQPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMzIsNDApLFQ9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiTyIpKS5zdWJhcnJheSg0MCw0OCksST0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsNDgpLEU9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSgzMiw0MCksaj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDQwLDQ4KSxNPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk9FIikpLF89KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVUUiKSk7KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiUGVybXMiKSksTz1mdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyx1LGwsZil7aWYodCl7dmFyIGg9TWF0aC5taW4oMTI3LHQubGVuZ3RoKTt0PXQuc3ViYXJyYXkoMCxoKX1lbHNlIHQ9W107dmFyIGQ7cmV0dXJuKGQ9Nj09PWU/bmV3IEY6bmV3IEMpLmNoZWNrVXNlclBhc3N3b3JkKHQscyxvKT9kLmdldFVzZXJLZXkodCxjLGwpOnQubGVuZ3RoJiZkLmNoZWNrT3duZXJQYXNzd29yZCh0LG4saSxyKT9kLmdldE93bmVyS2V5KHQsYSxpLHUpOm51bGx9KGsseCxtLFAsVCxJLGIsRSxqLE0sXyl9aWYoIU8mJiFjKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJObyBwYXNzd29yZCBnaXZlbiIsbi5QYXNzd29yZFJlc3BvbnNlcy5ORUVEX1BBU1NXT1JEKTtpZighTyYmYyl7dmFyIEw9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KDMyKSxvPTAscz1NYXRoLm1pbigzMix0Lmxlbmd0aCk7bzxzOysrbylpW29dPXRbb107Zm9yKHZhciBjPTA7bzwzMjspaVtvKytdPWVbYysrXTt2YXIgdSxsPXkoaSwwLG8pLGY9YT4+MztpZihuPj0zKWZvcihjPTA7Yzw1MDsrK2MpbD15KGwsMCxsLmxlbmd0aCk7aWYobj49Myl7dT1yO3ZhciBoPW5ldyBVaW50OEFycmF5KGYpO2ZvcihjPTE5O2M+PTA7Yy0tKXtmb3IodmFyIGQ9MDtkPGY7KytkKWhbZF09bFtkXV5jO3U9bmV3IHAoaCkuZW5jcnlwdEJsb2NrKHUpfX1lbHNlIHU9bmV3IHAobC5zdWJhcnJheSgwLGYpKS5lbmNyeXB0QmxvY2socik7cmV0dXJuIHV9KHgsbSxrLGgpO089dChBLEwsbSxiLHcsayxoLFMpfWlmKCFPKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJJbmNvcnJlY3QgUGFzc3dvcmQiLG4uUGFzc3dvcmRSZXNwb25zZXMuSU5DT1JSRUNUX1BBU1NXT1JEKTtpZih0aGlzLmVuY3J5cHRpb25LZXk9TyxsPj00KXt2YXIgUj1pLmdldCgiQ0YiKTtSIGluc3RhbmNlb2YgYS5EaWN0JiYoUi5zdXBwcmVzc0VuY3J5cHRpb249ITApLHRoaXMuY2Y9Uix0aGlzLnN0bWY9aS5nZXQoIlN0bUYiKXx8cix0aGlzLnN0cmY9aS5nZXQoIlN0ckYiKXx8cix0aGlzLmVmZj1pLmdldCgiRUZGIil8fHRoaXMuc3RtZn19cmV0dXJuIGQocyxbe2tleToiY3JlYXRlQ2lwaGVyVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKDQ9PT10aGlzLmFsZ29yaXRobXx8NT09PXRoaXMuYWxnb3JpdGhtKXJldHVybiBuZXcgUChvKHRoaXMuY2YsdGhpcy5zdHJmLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpLG8odGhpcy5jZix0aGlzLnN0bWYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSkpO3ZhciByPWkoZSx0LHRoaXMuZW5jcnlwdGlvbktleSwhMSksbj1mdW5jdGlvbigpe3JldHVybiBuZXcgcChyKX07cmV0dXJuIG5ldyBQKG4sbil9fV0pLHN9KCk7cmV0dXJuIHN9KCk7dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PVR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWNyeXB0U3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmRlY3J5cHQ9cixuLm5leHRDaHVuaz1udWxsLG4uaW5pdGlhbGl6ZWQ9ITEsbn1yZXR1cm4gdD1sLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5pbml0aWFsaXplZD9lPXRoaXMubmV4dENodW5rOihlPXRoaXMuc3RyLmdldEJ5dGVzKDUxMiksdGhpcy5pbml0aWFsaXplZD0hMCksZSYmMCE9PWUubGVuZ3RoKXt0aGlzLm5leHRDaHVuaz10aGlzLnN0ci5nZXRCeXRlcyg1MTIpO3ZhciB0PXRoaXMubmV4dENodW5rJiZ0aGlzLm5leHRDaHVuay5sZW5ndGg+MDtlPSgwLHRoaXMuZGVjcnlwdCkoZSwhdCk7dmFyIHI9dGhpcy5idWZmZXJMZW5ndGgsbj1yK2UubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKG4pLnNldChlLHIpLHRoaXMuYnVmZmVyTGVuZ3RoPW59ZWxzZSB0aGlzLmVvZj0hMH19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5EZWNyeXB0U3RyZWFtPXN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DYXRhbG9nPXZvaWQgMDt2YXIgbj1yKDEzNSksYT1yKDIpLGk9cigxMzQpLG89cigxOTkpLHM9cigxMzYpLGM9cigyMDApLHU9cigxNDMpLGw9cigyMDEpLGY9cigxODgpLGg9cigyMDIpLGQ9cigyMDMpO2Z1bmN0aW9uIHAoZSl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHAoZSl9ZnVuY3Rpb24gZygpe2c9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gdihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7dihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7dihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9dyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gdyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gayhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2soZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGsoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBTKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PXAoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1wKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09cChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24geChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuRGljdCYmKGU9ZS5nZXQoIkQiKSksQXJyYXkuaXNBcnJheShlKT9lOm51bGx9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnhyZWY9cix0aGlzLl9jYXREaWN0PXIuZ2V0Q2F0YWxvZ09iaigpLCEodGhpcy5fY2F0RGljdCBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy50b3BsZXZlbFBhZ2VzRGljdCx0aGlzLl9hY3R1YWxOdW1QYWdlcz1udWxsLHRoaXMuZm9udENhY2hlPW5ldyBpLlJlZlNldENhY2hlLHRoaXMuYnVpbHRJbkNNYXBDYWNoZT1uZXcgTWFwLHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW5ldyBNYXAsdGhpcy5nbG9iYWxJbWFnZUNhY2hlPW5ldyBmLkdsb2JhbEltYWdlQ2FjaGUsdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGUsdGhpcy5wYWdlSW5kZXhDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZSx0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9bmV3IGkuUmVmU2V0fXZhciB0LHIsdixPLEEsQyxGO3JldHVybiB0PWUscj1be2tleToidmVyc2lvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlZlcnNpb24iKTtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXtpZihuLlBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KGUubmFtZSkpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZlcnNpb24iLGUubmFtZSk7KDAsYS53YXJuKSgiSW52YWxpZCBQREYgY2F0YWxvZyB2ZXJzaW9uOiAiLmNvbmNhdChlLm5hbWUpKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmVyc2lvbiIsbnVsbCl9fSx7a2V5OiJsYW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJsYW5nIiwic3RyaW5nIj09dHlwZW9mIGU/KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZSk6bnVsbCl9fSx7a2V5OiJuZWVkc1JlbmRlcmluZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5lZWRzUmVuZGVyaW5nIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm5lZWRzUmVuZGVyaW5nIiwiYm9vbGVhbiI9PXR5cGVvZiBlJiZlKX19LHtrZXk6ImNvbGxlY3Rpb24iLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e3ZhciB0PXRoaXMuX2NhdERpY3QuZ2V0KCJDb2xsZWN0aW9uIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZW50cnk7IGFzc3VtaW5nIG5vIGNvbGxlY3Rpb24gaXMgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY29sbGVjdGlvbiIsZSl9fSx7a2V5OiJhY3JvRm9ybSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIkFjcm9Gb3JtIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIEFjcm9Gb3JtIGVudHJ5OyBhc3N1bWluZyBubyBmb3JtcyBhcmUgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiYWNyb0Zvcm0iLGUpfX0se2tleToiYWNyb0Zvcm1SZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJBY3JvRm9ybSIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJhY3JvRm9ybVJlZiIsZSBpbnN0YW5jZW9mIGkuUmVmP2U6bnVsbCl9fSx7a2V5OiJtZXRhZGF0YSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIk1ldGFkYXRhIik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsbnVsbCk7dmFyIHQ9bnVsbDt0cnl7dmFyIHI9ISh0aGlzLnhyZWYuZW5jcnlwdCYmdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKSxvPXRoaXMueHJlZi5mZXRjaChlLHIpO2lmKG8gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0mJm8uZGljdCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGM9by5kaWN0LmdldCgiVHlwZSIpLHU9by5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCgwLGkuaXNOYW1lKShjLCJNZXRhZGF0YSIpJiYoMCxpLmlzTmFtZSkodSwiWE1MIikpe3ZhciBsPSgwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShvLmdldFN0cmluZygpKTtsJiYodD1uZXcgaC5NZXRhZGF0YVBhcnNlcihsKS5zZXJpYWxpemFibGUpfX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLmluZm8pKCdTa2lwcGluZyBpbnZhbGlkIE1ldGFkYXRhOiAiJy5jb25jYXQoZSwnIi4nKSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIix0KX19LHtrZXk6Im1hcmtJbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRNYXJrSW5mbygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtYXJrSW5mbyIsZSl9fSx7a2V5OiJfcmVhZE1hcmtJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJNYXJrSW5mbyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9e01hcmtlZDohMSxVc2VyUHJvcGVydGllczohMSxTdXNwZWN0czohMX07Zm9yKHZhciByIGluIHQpe3ZhciBuPWUuZ2V0KHIpOyJib29sZWFuIj09dHlwZW9mIG4mJih0W3JdPW4pfXJldHVybiB0fX0se2tleToic3RydWN0VHJlZVJvb3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFN0cnVjdFRyZWVSb290KCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJzdHJ1Y3RUcmVlUm9vdCIsZSl9fSx7a2V5OiJfcmVhZFN0cnVjdFRyZWVSb290Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJTdHJ1Y3RUcmVlUm9vdCIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9bmV3IGQuU3RydWN0VHJlZVJvb3QoZSk7cmV0dXJuIHQuaW5pdCgpLHR9fSx7a2V5OiJ0b3BsZXZlbFBhZ2VzRGljdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfX0se2tleToiZG9jdW1lbnRPdXRsaW5lIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9fSx7a2V5OiJfcmVhZERvY3VtZW50T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2lmKCEoKHQ9dC5nZXRSYXcoIkZpcnN0IikpaW5zdGFuY2VvZiBpLlJlZikpcmV0dXJuIG51bGw7dmFyIHI9e2l0ZW1zOltdfSxuPVt7b2JqOnQscGFyZW50OnJ9XSxvPW5ldyBpLlJlZlNldDtvLnB1dCh0KTtmb3IodmFyIHM9dGhpcy54cmVmLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO24ubGVuZ3RoPjA7KXt2YXIgbD1uLnNoaWZ0KCksZj1zLmZldGNoSWZSZWYobC5vYmopO2lmKG51bGwhPT1mKXtpZighZi5oYXMoIlRpdGxlIikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLiIpO3ZhciBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O2UucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6ZixyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOnRoaXMuYXR0YWNobWVudHN9KTt2YXIgZD1mLmdldCgiVGl0bGUiKSxwPWYuZ2V0KCJGIil8fDAsZz1mLmdldEFycmF5KCJDIiksdj1mLmdldCgiQ291bnQiKSx5PWM7IUFycmF5LmlzQXJyYXkoZyl8fDMhPT1nLmxlbmd0aHx8MD09PWdbMF0mJjA9PT1nWzFdJiYwPT09Z1syXXx8KHk9dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihnLDApKTt2YXIgbT17YWN0aW9uOmguYWN0aW9uLGF0dGFjaG1lbnQ6aC5hdHRhY2htZW50LGRlc3Q6aC5kZXN0LHVybDpoLnVybCx1bnNhZmVVcmw6aC51bnNhZmVVcmwsbmV3V2luZG93OmgubmV3V2luZG93LHNldE9DR1N0YXRlOmguc2V0T0NHU3RhdGUsdGl0bGU6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZCksY29sb3I6eSxjb3VudDpOdW1iZXIuaXNJbnRlZ2VyKHYpP3Y6dm9pZCAwLGJvbGQ6ISEoMiZwKSxpdGFsaWM6ISEoMSZwKSxpdGVtczpbXX07bC5wYXJlbnQuaXRlbXMucHVzaChtKSwodD1mLmdldFJhdygiRmlyc3QiKSlpbnN0YW5jZW9mIGkuUmVmJiYhby5oYXModCkmJihuLnB1c2goe29iajp0LHBhcmVudDptfSksby5wdXQodCkpLCh0PWYuZ2V0UmF3KCJOZXh0IikpaW5zdGFuY2VvZiBpLlJlZiYmIW8uaGFzKHQpJiYobi5wdXNoKHtvYmo6dCxwYXJlbnQ6bC5wYXJlbnR9KSxvLnB1dCh0KSl9fXJldHVybiByLml0ZW1zLmxlbmd0aD4wP3IuaXRlbXM6bnVsbH19LHtrZXk6InBlcm1pc3Npb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQZXJtaXNzaW9ucygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBlcm1pc3Npb25zIixlKX19LHtrZXk6Il9yZWFkUGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJFbmNyeXB0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz1NYXRoLnBvdygyLDMyKTt2YXIgcj1bXTtmb3IodmFyIG4gaW4gYS5QZXJtaXNzaW9uRmxhZyl7dmFyIG89YS5QZXJtaXNzaW9uRmxhZ1tuXTt0Jm8mJnIucHVzaChvKX1yZXR1cm4gcn19LHtrZXk6Im9wdGlvbmFsQ29udGVudENvbmZpZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9DUHJvcGVydGllcyIpO2lmKCF0KXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO3ZhciByPXQuZ2V0KCJEIik7aWYoIXIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7dmFyIG89dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShvKSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTt2YXIgcyxjPVtdLHU9W10sbD1iKG8pO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZihmIGluc3RhbmNlb2YgaS5SZWYpe3UucHVzaChmKTt2YXIgaD10aGlzLnhyZWYuZmV0Y2hJZlJlZihmKTtjLnB1c2goe2lkOmYudG9TdHJpbmcoKSxuYW1lOiJzdHJpbmciPT10eXBlb2YgaC5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiTmFtZSIpKTpudWxsLGludGVudDoic3RyaW5nIj09dHlwZW9mIGguZ2V0KCJJbnRlbnQiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiSW50ZW50IikpOm51bGx9KX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfShlPXRoaXMuX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcocix1KSkuZ3JvdXBzPWN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogIi5jb25jYXQoZSkpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLGUpfX0se2tleToiX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihlKXt2YXIgcj1bXTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbixhPWIoZSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28gaW5zdGFuY2VvZiBpLlJlZiYmdC5pbmNsdWRlcyhvKSYmci5wdXNoKG8udG9TdHJpbmcoKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfX1yZXR1cm4gcn1mdW5jdGlvbiBuKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO3ZhciBuLGE9W10scz1iKGUpO3RyeXtmb3Iocy5zKCk7IShuPXMubigpKS5kb25lOyl7dmFyIHU9bi52YWx1ZTtpZih1IGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXModSkpYy5wdXQodSksYS5wdXNoKHUudG9TdHJpbmcoKSk7ZWxzZXt2YXIgbD1vKHUscik7bCYmYS5wdXNoKGwpfX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYocj4wKXJldHVybiBhO3ZhciBmLGg9W10sZD1iKHQpO3RyeXtmb3IoZC5zKCk7IShmPWQubigpKS5kb25lOyl7dmFyIHA9Zi52YWx1ZTtjLmhhcyhwKXx8aC5wdXNoKHAudG9TdHJpbmcoKSl9fWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfXJldHVybiBoLmxlbmd0aCYmYS5wdXNoKHtuYW1lOm51bGwsb3JkZXI6aH0pLGF9ZnVuY3Rpb24gbyhlLHQpe2lmKCsrdD51KXJldHVybigwLGEud2FybikoInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLiIpLG51bGw7dmFyIHI9cy5mZXRjaElmUmVmKGUpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBudWxsO3ZhciBpPXMuZmV0Y2hJZlJlZihyWzBdKTtpZigic3RyaW5nIiE9dHlwZW9mIGkpcmV0dXJuIG51bGw7dmFyIG89bihyLnNsaWNlKDEpLHQpO3JldHVybiBvJiZvLmxlbmd0aD97bmFtZTooMCxhLnN0cmluZ1RvUERGU3RyaW5nKShpKSxvcmRlcjpvfTpudWxsfXZhciBzPXRoaXMueHJlZixjPW5ldyBpLlJlZlNldCx1PTEwO3JldHVybntuYW1lOiJzdHJpbmciPT10eXBlb2YgZS5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiTmFtZSIpKTpudWxsLGNyZWF0b3I6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiQ3JlYXRvciIpPygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJDcmVhdG9yIikpOm51bGwsYmFzZVN0YXRlOmUuZ2V0KCJCYXNlU3RhdGUiKWluc3RhbmNlb2YgaS5OYW1lP2UuZ2V0KCJCYXNlU3RhdGUiKS5uYW1lOm51bGwsb246cihlLmdldCgiT04iKSksb2ZmOnIoZS5nZXQoIk9GRiIpKSxvcmRlcjpuKGUuZ2V0KCJPcmRlciIpKSxncm91cHM6bnVsbH19fSx7a2V5OiJzZXRBY3R1YWxOdW1QYWdlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1lfX0se2tleToiaGFzQWN0dWFsTnVtUGFnZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWN0dWFsTnVtUGFnZXN9fSx7a2V5OiJfcGFnZXNDb3VudCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoIkNvdW50Iik7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9wYWdlc0NvdW50IixlKX19LHtrZXk6Im51bVBhZ2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBY3R1YWxOdW1QYWdlcz90aGlzLl9hY3R1YWxOdW1QYWdlczp0aGlzLl9wYWdlc0NvdW50fX0se2tleToiZGVzdGluYXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkRGVzdHMoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZSBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByLG49YihlLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT14KHNbMV0pO3UmJih0WygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGMpXT11KX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9fWVsc2UgZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuPXgocik7biYmKHRbZV09bil9KSk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRlc3RpbmF0aW9ucyIsdCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZERlc3RzKCk7aWYodCBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByPXgodC5nZXQoZSkpO2lmKHIpcmV0dXJuIHI7dmFyIG49dGhpcy5kZXN0aW5hdGlvbnNbZV07aWYobilyZXR1cm4oMCxhLndhcm4pKCdGb3VuZCAiJy5jb25jYXQoZSwnIiBhdCBhbiBpbmNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIE5hbWVUcmVlLicpKSxufWVsc2UgaWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIHM9eCh0LmdldChlKSk7aWYocylyZXR1cm4gc31yZXR1cm4gbnVsbH19LHtrZXk6Il9yZWFkRGVzdHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGUmJmUuaGFzKCJEZXN0cyIpP25ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJEZXN0cyIpLHRoaXMueHJlZik6dGhpcy5fY2F0RGljdC5oYXMoIkRlc3RzIik/dGhpcy5fY2F0RGljdC5nZXQoIkRlc3RzIik6dm9pZCAwfX0se2tleToicGFnZUxhYmVscyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGFnZUxhYmVscygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYWJlbHMiLGUpfX0se2tleToiX3JlYWRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKSxyPW51bGwscz0iIixjPW5ldyBvLk51bWJlclRyZWUoZSx0aGlzLnhyZWYpLmdldEFsbCgpLHU9IiIsbD0xLGY9MCxoPXRoaXMubnVtUGFnZXM7ZjxoO2YrKyl7dmFyIGQ9Yy5nZXQoZik7aWYodm9pZCAwIT09ZCl7aWYoIShkIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYoZC5oYXMoIlR5cGUiKSYmISgwLGkuaXNOYW1lKShkLmdldCgiVHlwZSIpLCJQYWdlTGFiZWwiKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0eXBlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2lmKGQuaGFzKCJTIikpe3ZhciBwPWQuZ2V0KCJTIik7aWYoIShwIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdHlsZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtyPXAubmFtZX1lbHNlIHI9bnVsbDtpZihkLmhhcygiUCIpKXt2YXIgZz1kLmdldCgiUCIpO2lmKCJzdHJpbmciIT10eXBlb2YgZyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBwcmVmaXggaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7cz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShnKX1lbHNlIHM9IiI7aWYoZC5oYXMoIlN0Iikpe3ZhciB2PWQuZ2V0KCJTdCIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih2KSYmdj49MSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgc3RhcnQgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7bD12fWVsc2UgbD0xfXN3aXRjaChyKXtjYXNlIkQiOnU9bDticmVhaztjYXNlIlIiOmNhc2UiciI6dT0oMCxuLnRvUm9tYW5OdW1lcmFscykobCwiciI9PT1yKTticmVhaztjYXNlIkEiOmNhc2UiYSI6dmFyIHk9ImEiPT09cj85Nzo2NSxtPWwtMTt1PVN0cmluZy5mcm9tQ2hhckNvZGUoeSttJTI2KS5yZXBlYXQoTWF0aC5mbG9vcihtLzI2KSsxKTticmVhaztkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoJ0ludmFsaWQgc3R5bGUgIicuY29uY2F0KHIsJyIgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJykpO3U9IiJ9dFtmXT1zK3UsbCsrfXJldHVybiB0fX0se2tleToicGFnZUxheW91dCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VMYXlvdXQiKSx0PSIiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTaW5nbGVQYWdlIjpjYXNlIk9uZUNvbHVtbiI6Y2FzZSJUd29Db2x1bW5MZWZ0IjpjYXNlIlR3b0NvbHVtblJpZ2h0IjpjYXNlIlR3b1BhZ2VMZWZ0IjpjYXNlIlR3b1BhZ2VSaWdodCI6dD1lLm5hbWV9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYXlvdXQiLHQpfX0se2tleToicGFnZU1vZGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTW9kZSIpLHQ9IlVzZU5vbmUiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJGdWxsU2NyZWVuIjpjYXNlIlVzZU9DIjpjYXNlIlVzZUF0dGFjaG1lbnRzIjp0PWUubmFtZX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywicGFnZU1vZGUiLHQpfX0se2tleToidmlld2VyUHJlZmVyZW5jZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLl9jYXREaWN0LmdldCgiVmlld2VyUHJlZmVyZW5jZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsbnVsbCk7dmFyIHIsbj1udWxsLG89Yih0LmdldEtleXMoKSk7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlLGM9dC5nZXQocyksdT12b2lkIDA7c3dpdGNoKHMpe2Nhc2UiSGlkZVRvb2xiYXIiOmNhc2UiSGlkZU1lbnViYXIiOmNhc2UiSGlkZVdpbmRvd1VJIjpjYXNlIkZpdFdpbmRvdyI6Y2FzZSJDZW50ZXJXaW5kb3ciOmNhc2UiRGlzcGxheURvY1RpdGxlIjpjYXNlIlBpY2tUcmF5QnlQREZTaXplIjoiYm9vbGVhbiI9PXR5cGVvZiBjJiYodT1jKTticmVhaztjYXNlIk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIlVzZU9DIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9IlVzZU5vbmUifWJyZWFrO2Nhc2UiRGlyZWN0aW9uIjppZihjIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChjLm5hbWUpe2Nhc2UiTDJSIjpjYXNlIlIyTCI6dT1jLm5hbWU7YnJlYWs7ZGVmYXVsdDp1PSJMMlIifWJyZWFrO2Nhc2UiVmlld0FyZWEiOmNhc2UiVmlld0NsaXAiOmNhc2UiUHJpbnRBcmVhIjpjYXNlIlByaW50Q2xpcCI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIk1lZGlhQm94IjpjYXNlIkNyb3BCb3giOmNhc2UiQmxlZWRCb3giOmNhc2UiVHJpbUJveCI6Y2FzZSJBcnRCb3giOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQ3JvcEJveCJ9YnJlYWs7Y2FzZSJQcmludFNjYWxpbmciOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJOb25lIjpjYXNlIkFwcERlZmF1bHQiOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQXBwRGVmYXVsdCJ9YnJlYWs7Y2FzZSJEdXBsZXgiOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJTaW1wbGV4IjpjYXNlIkR1cGxleEZsaXBTaG9ydEVkZ2UiOmNhc2UiRHVwbGV4RmxpcExvbmdFZGdlIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9Ik5vbmUifWJyZWFrO2Nhc2UiUHJpbnRQYWdlUmFuZ2UiOkFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJTI9PTAmJmMuZXZlcnkoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih0KSYmdD4wJiYoMD09PXJ8fHQ+PW5bci0xXSkmJnQ8PWUubnVtUGFnZXN9KSkmJih1PWMpO2JyZWFrO2Nhc2UiTnVtQ29waWVzIjpOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPjAmJih1PWMpO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiSWdub3Jpbmcgbm9uLXN0YW5kYXJkIGtleSBpbiBWaWV3ZXJQcmVmZXJlbmNlczogIi5jb25jYXQocywiLiIpKTtjb250aW51ZX12b2lkIDAhPT11PyhufHwobj1PYmplY3QuY3JlYXRlKG51bGwpKSxuW3NdPXUpOigwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICcpLmNvbmNhdChjLCIuIikpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLG4pfX0se2tleToib3BlbkFjdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIG49bmV3IGkuRGljdCh0aGlzLnhyZWYpO24uc2V0KCJBIix0KTt2YXIgbz17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtlLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0Om4scmVzdWx0T2JqOm99KSxBcnJheS5pc0FycmF5KG8uZGVzdCk/ci5kZXN0PW8uZGVzdDpvLmFjdGlvbiYmKHIuYWN0aW9uPW8uYWN0aW9uKX1lbHNlIEFycmF5LmlzQXJyYXkodCkmJihyLmRlc3Q9dCk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wZW5BY3Rpb24iLCgwLGEub2JqZWN0U2l6ZSkocik+MD9yOm51bGwpfX0se2tleToiYXR0YWNobWVudHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpLHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXt2YXIgcixuPWIobmV3IG8uTmFtZVRyZWUoZS5nZXRSYXcoIkVtYmVkZGVkRmlsZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdLGY9bmV3IGwuRmlsZVNwZWModSx0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpLHRbKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyldPWYuc2VyaWFsaXphYmxlfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImF0dGFjaG1lbnRzIix0KX19LHtrZXk6InhmYUltYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIiksdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJYRkFJbWFnZXMiKSl7dmFyIHIsbj1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdO3R8fCh0PW5ldyBpLkRpY3QodGhpcy54cmVmKSksdC5zZXQoKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyksdSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywieGZhSW1hZ2VzIix0KX19LHtrZXk6Il9jb2xsZWN0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKSx0PW51bGw7ZnVuY3Rpb24gcihlLHIpe2lmKHIgaW5zdGFuY2VvZiBpLkRpY3QmJigwLGkuaXNOYW1lKShyLmdldCgiUyIpLCJKYXZhU2NyaXB0Iikpe3ZhciBuPXIuZ2V0KCJKUyIpO2lmKG4gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pbj1uLmdldFN0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBuKXJldHVybjtudWxsPT09dCYmKHQ9bmV3IE1hcCksbj0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShuKS5yZXBsYWNlKC9cdTAwMDAvZywiIiksdC5zZXQoZSxuKX19aWYoZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5oYXMoIkphdmFTY3JpcHQiKSl7dmFyIG4sYz1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJKYXZhU2NyaXB0IiksdGhpcy54cmVmKS5nZXRBbGwoKSk7dHJ5e2ZvcihjLnMoKTshKG49Yy5uKCkpLmRvbmU7KXt2YXIgdT1tKG4udmFsdWUsMiksbD11WzBdLGY9dVsxXTtyKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGwpLGYpfX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX19dmFyIGg9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTtyZXR1cm4gaCYmcigiT3BlbkFjdGlvbiIsaCksdH19LHtrZXk6ImphdmFTY3JpcHQiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiamF2YVNjcmlwdCIsdD9mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBrKGUpfShlPXQudmFsdWVzKCkpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHx3KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpOm51bGwpfX0se2tleToianNBY3Rpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpLHQ9KDAsbi5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMuX2NhdERpY3QsYS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSk7aWYoZSl7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHIsaT1iKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89bShyLnZhbHVlLDIpLHM9b1swXSxjPW9bMV07cyBpbiB0P3Rbc10ucHVzaChjKTp0W3NdPVtjXX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLHQpfX0se2tleToiZm9udEZhbGxiYWNrIix2YWx1ZTooRj15KGcoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG87cmV0dXJuIGcoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgMjpuPWUuc2VudCxhPWIobiksZS5wcmV2PTQsYS5zKCk7Y2FzZSA2OmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTM7YnJlYWt9aWYoKG89aS52YWx1ZSkubG9hZGVkTmFtZSE9PXQpe2UubmV4dD0xMTticmVha31yZXR1cm4gby5mYWxsYmFjayhyKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMTplLm5leHQ9NjticmVhaztjYXNlIDEzOmUubmV4dD0xODticmVhaztjYXNlIDE1OmUucHJldj0xNSxlLnQwPWUuY2F0Y2goNCksYS5lKGUudDApO2Nhc2UgMTg6cmV0dXJuIGUucHJldj0xOCxhLmYoKSxlLmZpbmlzaCgxOCk7Y2FzZSAyMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzQsMTUsMTgsMjFdXSl9KSkpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNsZWFudXAiLHZhbHVlOihDPXkoZygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sYSxpPWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PWkubGVuZ3RoPjAmJnZvaWQgMCE9PWlbMF0mJmlbMF0sKDAsYy5jbGVhckdsb2JhbENhY2hlcykoKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIodCksdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKSx0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCksdGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCksZS5uZXh0PTgsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgODpyPWUuc2VudCxuPWIocik7dHJ5e2ZvcihuLnMoKTshKGE9bi5uKCkpLmRvbmU7KWRlbGV0ZSBhLnZhbHVlLmRpY3QuY2FjaGVLZXl9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dGhpcy5mb250Q2FjaGUuY2xlYXIoKSx0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuY2xlYXIoKSx0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlRGljdCIsdmFsdWU6KEE9eShnKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLG8scyxjLHUsbCxmLGgsZCxwLHYseSxtLGIsdztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnI9W3RoaXMudG9wbGV2ZWxQYWdlc0RpY3RdLG49bmV3IGkuUmVmU2V0LChvPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpKWluc3RhbmNlb2YgaS5SZWYmJm4ucHV0KG8pLHM9dGhpcy54cmVmLGM9dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsdT10aGlzLnBhZ2VJbmRleENhY2hlLGw9MDtjYXNlIDY6aWYoIXIubGVuZ3RoKXtlLm5leHQ9Njc7YnJlYWt9aWYoISgoZj1yLnBvcCgpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9MzQ7YnJlYWt9aWYoISgoaD1jLmdldChmKSk+PTAmJmwraDw9dCkpe2UubmV4dD0xMzticmVha31yZXR1cm4gbCs9aCxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgMTM6aWYoIW4uaGFzKGYpKXtlLm5leHQ9MTU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2VzIHRyZWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlLiIpO2Nhc2UgMTU6cmV0dXJuIG4ucHV0KGYpLGUubmV4dD0xOCxzLmZldGNoQXN5bmMoZik7Y2FzZSAxODppZighKChkPWUuc2VudClpbnN0YW5jZW9mIGkuRGljdCkpe2UubmV4dD0zMjticmVha31pZighKChwPWQuZ2V0UmF3KCJUeXBlIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5uZXh0PTI0LHMuZmV0Y2hBc3luYyhwKTtjYXNlIDI0OnA9ZS5zZW50O2Nhc2UgMjU6aWYoISgwLGkuaXNOYW1lKShwLCJQYWdlIikmJmQuaGFzKCJLaWRzIikpe2UubmV4dD0zMjticmVha31pZihjLmhhcyhmKXx8Yy5wdXQoZiwxKSx1LmhhcyhmKXx8dS5wdXQoZixsKSxsIT09dCl7ZS5uZXh0PTMwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbZCxmXSk7Y2FzZSAzMDpyZXR1cm4gbCsrLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzMjpyZXR1cm4gci5wdXNoKGQpLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzNDppZihmIGluc3RhbmNlb2YgaS5EaWN0KXtlLm5leHQ9MzY7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTtjYXNlIDM2OmlmKHY9Zi5vYmpJZCwhKCh5PWYuZ2V0UmF3KCJDb3VudCIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUubmV4dD00MSxzLmZldGNoQXN5bmMoeSk7Y2FzZSA0MTp5PWUuc2VudDtjYXNlIDQyOmlmKCEoTnVtYmVyLmlzSW50ZWdlcih5KSYmeT49MCkpe2UubmV4dD00NzticmVha31pZih2JiYhYy5oYXModikmJmMucHV0KHYseSksIShsK3k8PXQpKXtlLm5leHQ9NDc7YnJlYWt9cmV0dXJuIGwrPXksZS5hYnJ1cHQoImNvbnRpbnVlIiw2KTtjYXNlIDQ3OmlmKCEoKG09Zi5nZXRSYXcoIktpZHMiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUyO2JyZWFrfXJldHVybiBlLm5leHQ9NTEscy5mZXRjaEFzeW5jKG0pO2Nhc2UgNTE6bT1lLnNlbnQ7Y2FzZSA1MjppZihBcnJheS5pc0FycmF5KG0pKXtlLm5leHQ9NjQ7YnJlYWt9aWYoISgoYj1mLmdldFJhdygiVHlwZSIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NTg7YnJlYWt9cmV0dXJuIGUubmV4dD01NyxzLmZldGNoQXN5bmMoYik7Y2FzZSA1NzpiPWUuc2VudDtjYXNlIDU4OmlmKCEoMCxpLmlzTmFtZSkoYiwiUGFnZSIpJiZmLmhhcygiS2lkcyIpKXtlLm5leHQ9NjM7YnJlYWt9aWYobCE9PXQpe2UubmV4dD02MTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsW2YsbnVsbF0pO2Nhc2UgNjE6cmV0dXJuIGwrKyxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgNjM6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIik7Y2FzZSA2NDpmb3Iodz1tLmxlbmd0aC0xO3c+PTA7dy0tKXIucHVzaChtW3ddKTtlLm5leHQ9NjticmVhaztjYXNlIDY3OnRocm93IG5ldyBFcnJvcigiUGFnZSBpbmRleCAiLmNvbmNhdCh0LCIgbm90IGZvdW5kLiIpKTtjYXNlIDY4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIEEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFsbFBhZ2VEaWN0cyIsdmFsdWU6KE89eShnKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4PWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnA9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIG4uWFJlZkVudHJ5RXhjZXB0aW9uJiYhdCl0aHJvdyBlO3QmJnImJjA9PT1oJiYoKDAsYS53YXJuKSgnZ2V0QWxsUGFnZURpY3RzIC0gU2tpcHBpbmcgaW52YWxpZCBmaXJzdCBwYWdlOiAiJy5jb25jYXQoZSwnIi4nKSksZT1pLkRpY3QuZW1wdHkpLHUuc2V0KGgrKyxbZSxudWxsXSl9LGQ9ZnVuY3Rpb24oZSx0KXt0JiYhZi5oYXModCkmJmYucHV0KHQsaCksdS5zZXQoaCsrLFtlLHRdKX0sdD14Lmxlbmd0aD4wJiZ2b2lkIDAhPT14WzBdJiZ4WzBdLHI9dGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzLG89W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0scz1uZXcgaS5SZWZTZXQsKGM9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIikpaW5zdGFuY2VvZiBpLlJlZiYmcy5wdXQoYyksdT1uZXcgTWFwLGw9dGhpcy54cmVmLGY9dGhpcy5wYWdlSW5kZXhDYWNoZSxoPTA7Y2FzZSAxMDppZighKG8ubGVuZ3RoPjApKXtlLm5leHQ9NzA7YnJlYWt9aWYodj1vLmF0KC0xKSx5PXYuY3VycmVudE5vZGUsbT12LnBvc0luS2lkcywhKChiPXkuZ2V0UmF3KCJLaWRzIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5wcmV2PTE1LGUubmV4dD0xOCxsLmZldGNoQXN5bmMoYik7Y2FzZSAxODpiPWUuc2VudCxlLm5leHQ9MjU7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gZS5wcmV2PTIxLGUudDA9ZS5jYXRjaCgxNSkscChlLnQwKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDI1OmlmKEFycmF5LmlzQXJyYXkoYikpe2UubmV4dD0yODticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAyODppZighKG0+PWIubGVuZ3RoKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBvLnBvcCgpLGUuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgMzE6aWYodz1iW21dLGs9dm9pZCAwLCEodyBpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUwO2JyZWFrfWlmKCFzLmhhcyh3KSl7ZS5uZXh0PTM3O2JyZWFrfXJldHVybiBwKG5ldyBhLkZvcm1hdEVycm9yKCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAzNzpyZXR1cm4gcy5wdXQodyksZS5wcmV2PTM4LGUubmV4dD00MSxsLmZldGNoQXN5bmModyk7Y2FzZSA0MTprPWUuc2VudCxlLm5leHQ9NDg7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gZS5wcmV2PTQ0LGUudDE9ZS5jYXRjaCgzOCkscChlLnQxKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDQ4OmUubmV4dD01MTticmVhaztjYXNlIDUwOms9dztjYXNlIDUxOmlmKGsgaW5zdGFuY2VvZiBpLkRpY3Qpe2UubmV4dD01NDticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDU0OmlmKCEoKFM9ay5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTY2O2JyZWFrfXJldHVybiBlLnByZXY9NTYsZS5uZXh0PTU5LGwuZmV0Y2hBc3luYyhTKTtjYXNlIDU5OlM9ZS5zZW50LGUubmV4dD02NjticmVhaztjYXNlIDYyOnJldHVybiBlLnByZXY9NjIsZS50Mj1lLmNhdGNoKDU2KSxwKGUudDIpLGUuYWJydXB0KCJicmVhayIsNzApO2Nhc2UgNjY6KDAsaS5pc05hbWUpKFMsIlBhZ2UiKXx8IWsuaGFzKCJLaWRzIik/ZChrLHcgaW5zdGFuY2VvZiBpLlJlZj93Om51bGwpOm8ucHVzaCh7Y3VycmVudE5vZGU6ayxwb3NJbktpZHM6MH0pLHYucG9zSW5LaWRzKyssZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNzA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHUpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxNSwyMV0sWzM4LDQ0XSxbNTYsNjJdXSl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KGUpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShyKTt2YXIgbj10aGlzLnhyZWYsbz0wO3JldHVybiBmdW5jdGlvbiByKHMpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcixvPTA7cmV0dXJuIG4uZmV0Y2hBc3luYyh0KS50aGVuKChmdW5jdGlvbihuKXtpZigoMCxpLmlzUmVmc0VxdWFsKSh0LGUpJiYhKDAsaS5pc0RpY3QpKG4sIlBhZ2UiKSYmIShuIGluc3RhbmNlb2YgaS5EaWN0JiYhbi5oYXMoIlR5cGUiKSYmbi5oYXMoIkNvbnRlbnRzIikpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJUaGUgcmVmZXJlbmNlIGRvZXMgbm90IHBvaW50IHRvIGEgL1BhZ2UgZGljdGlvbmFyeS4iKTtpZighbilyZXR1cm4gbnVsbDtpZighKG4gaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybiByPW4uZ2V0UmF3KCJQYXJlbnQiKSxuLmdldEFzeW5jKCJQYXJlbnQiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIGUuZ2V0QXN5bmMoIktpZHMiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgcyxjPVtdLHU9ITEsbD1iKGUpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZighKGYgaW5zdGFuY2VvZiBpLlJlZikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIktpZCBtdXN0IGJlIGEgcmVmZXJlbmNlLiIpO2lmKCgwLGkuaXNSZWZzRXF1YWwpKGYsdCkpe3U9ITA7YnJlYWt9Yy5wdXNoKG4uZmV0Y2hBc3luYyhmKS50aGVuKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtlLmhhcygiQ291bnQiKT9vKz1lLmdldCgiQ291bnQiKTpvKyt9KSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1pZighdSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwoYykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bbyxyXX0pKX0pKX0ocykudGhlbigoZnVuY3Rpb24obil7aWYoIW4pcmV0dXJuIHQucGFnZUluZGV4Q2FjaGUucHV0KGUsbyksbzt2YXIgYT1tKG4sMiksaT1hWzBdLHM9YVsxXTtyZXR1cm4gbys9aSxyKHMpfSkpfShlKX19LHtrZXk6ImJhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJVUkkiKTtpZihlIGluc3RhbmNlb2YgaS5EaWN0KXt2YXIgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9KDAsYS5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0LG51bGwse3RyeUNvbnZlcnRFbmNvZGluZzohMH0pO2lmKHIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLHIuaHJlZil9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJiYXNlVXJsIixudWxsKX19XSx2PVt7a2V5OiJwYXJzZURlc3REaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRlc3REaWN0O2lmKHQgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciByPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiPT09cChyKSl7dmFyIG8sYyx1PWUuZG9jQmFzZVVybHx8bnVsbCxsPWUuZG9jQXR0YWNobWVudHN8fG51bGwsZj10LmdldCgiQSIpO2lmKGYgaW5zdGFuY2VvZiBpLkRpY3R8fCh0LmhhcygiRGVzdCIpP2Y9dC5nZXQoIkRlc3QiKTooZj10LmdldCgiQUEiKSlpbnN0YW5jZW9mIGkuRGljdCYmKGYuaGFzKCJEIik/Zj1mLmdldCgiRCIpOmYuaGFzKCJVIikmJihmPWYuZ2V0KCJVIikpKSksZiBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGg9Zi5nZXQoIlMiKTtpZighKGggaW5zdGFuY2VvZiBpLk5hbWUpKXJldHVybiB2b2lkKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogSW52YWxpZCB0eXBlIGluIEFjdGlvbiBkaWN0aW9uYXJ5LiIpO3ZhciBkPWgubmFtZTtzd2l0Y2goZCl7Y2FzZSJSZXNldEZvcm0iOnZhciBnLHY9Zi5nZXQoIkZsYWdzIikseT0wPT0oMSYoIm51bWJlciI9PXR5cGVvZiB2P3Y6MCkpLG09W10sdz1bXSxrPWIoZi5nZXQoIkZpZWxkcyIpfHxbXSk7dHJ5e2ZvcihrLnMoKTshKGc9ay5uKCkpLmRvbmU7KXt2YXIgUz1nLnZhbHVlO1MgaW5zdGFuY2VvZiBpLlJlZj93LnB1c2goUy50b1N0cmluZygpKToic3RyaW5nIj09dHlwZW9mIFMmJm0ucHVzaCgoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShTKSl9fWNhdGNoKGUpe2suZShlKX1maW5hbGx5e2suZigpfXIucmVzZXRGb3JtPXtmaWVsZHM6bSxyZWZzOncsaW5jbHVkZTp5fTticmVhaztjYXNlIlVSSSI6KG89Zi5nZXQoIlVSSSIpKWluc3RhbmNlb2YgaS5OYW1lJiYobz0iLyIrby5uYW1lKTticmVhaztjYXNlIkdvVG8iOmM9Zi5nZXQoIkQiKTticmVhaztjYXNlIkxhdW5jaCI6Y2FzZSJHb1RvUiI6dmFyIHg9Zi5nZXQoIkYiKTt4IGluc3RhbmNlb2YgaS5EaWN0P289eC5nZXQoIkYiKXx8bnVsbDoic3RyaW5nIj09dHlwZW9mIHgmJihvPXgpO3ZhciBPPWYuZ2V0KCJEIik7aWYoTyYmKE8gaW5zdGFuY2VvZiBpLk5hbWUmJihPPU8ubmFtZSksInN0cmluZyI9PXR5cGVvZiBvKSl7dmFyIEE9by5zcGxpdCgiIyIpWzBdOyJzdHJpbmciPT10eXBlb2YgTz9vPUErIiMiK086QXJyYXkuaXNBcnJheShPKSYmKG89QSsiIyIrSlNPTi5zdHJpbmdpZnkoTykpfXZhciBDPWYuZ2V0KCJOZXdXaW5kb3ciKTsiYm9vbGVhbiI9PXR5cGVvZiBDJiYoci5uZXdXaW5kb3c9Qyk7YnJlYWs7Y2FzZSJHb1RvRSI6dmFyIEYsUD1mLmdldCgiVCIpO2lmKGwmJlAgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBUPVAuZ2V0KCJSIiksST1QLmdldCgiTiIpOygwLGkuaXNOYW1lKShULCJDIikmJiJzdHJpbmciPT10eXBlb2YgSSYmKEY9bFsoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShJKV0pfUY/ci5hdHRhY2htZW50PUY6KDAsYS53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuaW1wbGVtZW50ZWQgIkdvVG9FIiBhY3Rpb24uJyk7YnJlYWs7Y2FzZSJOYW1lZCI6dmFyIEU9Zi5nZXQoIk4iKTtFIGluc3RhbmNlb2YgaS5OYW1lJiYoci5hY3Rpb249RS5uYW1lKTticmVhaztjYXNlIlNldE9DR1N0YXRlIjp2YXIgaj1mLmdldCgiU3RhdGUiKSxNPWYuZ2V0KCJQcmVzZXJ2ZVJCIik7aWYoIUFycmF5LmlzQXJyYXkoail8fDA9PT1qLmxlbmd0aClicmVhazt2YXIgXyxMPVtdLFI9YihqKTt0cnl7Zm9yKFIucygpOyEoXz1SLm4oKSkuZG9uZTspe3ZhciBOPV8udmFsdWU7aWYoTiBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goTi5uYW1lKXtjYXNlIk9OIjpjYXNlIk9GRiI6Y2FzZSJUb2dnbGUiOkwucHVzaChOLm5hbWUpfWVsc2UgTiBpbnN0YW5jZW9mIGkuUmVmJiZMLnB1c2goTi50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9aWYoTC5sZW5ndGghPT1qLmxlbmd0aClicmVhaztyLnNldE9DR1N0YXRlPXtzdGF0ZTpMLHByZXNlcnZlUkI6ImJvb2xlYW4iIT10eXBlb2YgTXx8TX07YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijp2YXIgRCxCPWYuZ2V0KCJKUyIpO0IgaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0/RD1CLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgQiYmKEQ9Qik7dmFyIFU9RCYmKDAsbi5yZWNvdmVySnNVUkwpKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKEQpKTtpZihVKXtvPVUudXJsLHIubmV3V2luZG93PVUubmV3V2luZG93O2JyZWFrfWRlZmF1bHQ6aWYoIkphdmFTY3JpcHQiPT09ZHx8IlN1Ym1pdEZvcm0iPT09ZClicmVhazsoMCxhLndhcm4pKCdwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5zdXBwb3J0ZWQgYWN0aW9uOiAiJy5jb25jYXQoZCwnIi4nKSl9fWVsc2UgdC5oYXMoIkRlc3QiKSYmKGM9dC5nZXQoIkRlc3QiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBvKXt2YXIgJD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKG8sdSx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pOyQmJihyLnVybD0kLmhyZWYpLHIudW5zYWZlVXJsPW99YyYmKGMgaW5zdGFuY2VvZiBpLk5hbWUmJihjPWMubmFtZSksInN0cmluZyI9PXR5cGVvZiBjP3IuZGVzdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTpBcnJheS5pc0FycmF5KGMpJiYoci5kZXN0PWMpKX1lbHNlKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogYHJlc3VsdE9iamAgbXVzdCBiZSBhbiBvYmplY3QuIil9ZWxzZSgwLGEud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IGBkZXN0RGljdGAgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIil9fV0sciYmUyh0LnByb3RvdHlwZSxyKSx2JiZTKHQsdiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkNhdGFsb2c9T30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk51bWJlclRyZWU9dC5OYW1lVHJlZT12b2lkIDA7dmFyIG49cigxMzQpLGE9cigyKTtmdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJm8oZSx0KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxvKGUsdCl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1jKGUpO2lmKHQpe3ZhciBhPWModGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09dSh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX1mdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09dShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXUobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT11KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBwKGUsdCxyKXtyZXR1cm4gdCYmZChlLnByb3RvdHlwZSx0KSxyJiZkKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2godGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIE5hbWVPck51bWJlclRyZWUuIiksdGhpcy5yb290PXQsdGhpcy54cmVmPXIsdGhpcy5fdHlwZT1ufXJldHVybiBwKGUsW3trZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7dmFyIHQ9dGhpcy54cmVmLHI9bmV3IG4uUmVmU2V0O3IucHV0KHRoaXMucm9vdCk7Zm9yKHZhciBpPVt0aGlzLnJvb3RdO2kubGVuZ3RoPjA7KXt2YXIgbz10LmZldGNoSWZSZWYoaS5zaGlmdCgpKTtpZihvIGluc3RhbmNlb2Ygbi5EaWN0KWlmKG8uaGFzKCJLaWRzIikpe3ZhciBzPW8uZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkocykpY29udGludWU7dmFyIGMsdT1sKHMpO3RyeXtmb3IodS5zKCk7IShjPXUubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZihyLmhhcyhmKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcignRHVwbGljYXRlIGVudHJ5IGluICInLmNvbmNhdCh0aGlzLl90eXBlLCciIHRyZWUuJykpO2kucHVzaChmKSxyLnB1dChmKX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9fWVsc2V7dmFyIGg9by5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IodmFyIGQ9MCxwPWgubGVuZ3RoO2Q8cDtkKz0yKWUuc2V0KHQuZmV0Y2hJZlJlZihoW2RdKSx0LmZldGNoSWZSZWYoaFtkKzFdKSl9fXJldHVybiBlfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZighdGhpcy5yb290KXJldHVybiBudWxsO2Zvcih2YXIgdD10aGlzLnhyZWYscj10LmZldGNoSWZSZWYodGhpcy5yb290KSxuPTA7ci5oYXMoIktpZHMiKTspe2lmKCsrbj4xMClyZXR1cm4oMCxhLndhcm4pKCdTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIicuY29uY2F0KHRoaXMuX3R5cGUsJyIgdHJlZS4nKSksbnVsbDt2YXIgaT1yLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBudWxsO2Zvcih2YXIgbz0wLHM9aS5sZW5ndGgtMTtvPD1zOyl7dmFyIGM9bytzPj4xLHU9dC5mZXRjaElmUmVmKGlbY10pLGw9dS5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGxbMF0pKXM9Yy0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihsWzFdKSkpe3I9dTticmVha31vPWMrMX19aWYobz5zKXJldHVybiBudWxsfXZhciBmPXIuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKHZhciBoPTAsZD1mLmxlbmd0aC0yO2g8PWQ7KXt2YXIgcD1oK2Q+PjEsZz1wKygxJnApLHY9dC5mZXRjaElmUmVmKGZbZ10pO2lmKGU8dilkPWctMjtlbHNle2lmKCEoZT52KSlyZXR1cm4gdC5mZXRjaElmUmVmKGZbZysxXSk7aD1nKzJ9fXJldHVybiBudWxsfX1dKSxlfSgpLHY9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOYW1lcyIpfXJldHVybiBwKHIpfShnKTt0Lk5hbWVUcmVlPXY7dmFyIHk9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOdW1zIil9cmV0dXJuIHAocil9KGcpO3QuTnVtYmVyVHJlZT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2xlYXJHbG9iYWxDYWNoZXM9ZnVuY3Rpb24oKXsoMCxuLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpLCgwLGEuY2xlYXJVbmljb2RlQ2FjaGVzKSgpfTt2YXIgbj1yKDEzNCksYT1yKDE2OSl9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWxlU3BlYz12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTM0KTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLmhhcygiVUYiKT9lLmdldCgiVUYiKTplLmhhcygiRiIpP2UuZ2V0KCJGIik6ZS5oYXMoIlVuaXgiKT9lLmdldCgiVW5peCIpOmUuaGFzKCJNYWMiKT9lLmdldCgiTWFjIik6ZS5oYXMoIkRPUyIpP2UuZ2V0KCJET1MiKTpudWxsfXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHQgaW5zdGFuY2VvZiBpLkRpY3QmJih0aGlzLnhyZWY9cix0aGlzLnJvb3Q9dCx0LmhhcygiRlMiKSYmKHRoaXMuZnM9dC5nZXQoIkZTIikpLHRoaXMuZGVzY3JpcHRpb249dC5oYXMoIkRlc2MiKT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh0LmdldCgiRGVzYyIpKToiIix0LmhhcygiUkYiKSYmKDAsbi53YXJuKSgiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIiksdGhpcy5jb250ZW50QXZhaWxhYmxlPSEwLHQuaGFzKCJFRiIpfHwodGhpcy5jb250ZW50QXZhaWxhYmxlPSExLCgwLG4ud2FybikoIk5vbi1lbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIikpKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZmlsZW5hbWUmJnRoaXMucm9vdCl7dmFyIGU9Yyh0aGlzLnJvb3QpfHwidW5uYW1lZCI7dGhpcy5fZmlsZW5hbWU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSkucmVwbGFjZSgvXFxcXC9nLCJcXCIpLnJlcGxhY2UoL1xcXC8vZywiLyIpLnJlcGxhY2UoL1xcL2csIi8iKX1yZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJjb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jb250ZW50QXZhaWxhYmxlKXJldHVybiBudWxsOyF0aGlzLmNvbnRlbnRSZWYmJnRoaXMucm9vdCYmKHRoaXMuY29udGVudFJlZj1jKHRoaXMucm9vdC5nZXQoIkVGIikpKTt2YXIgZT1udWxsO2lmKHRoaXMuY29udGVudFJlZil7dmFyIHQ9dGhpcy54cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTt0IGluc3RhbmNlb2YgYS5CYXNlU3RyZWFtP2U9dC5nZXRCeXRlcygpOigwLG4ud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpfWVsc2UoMCxuLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnQiKTtyZXR1cm4gZX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuRmlsZVNwZWM9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1ldGFkYXRhUGFyc2VyPXZvaWQgMDt2YXIgbj1yKDE5NSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1vKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGkscz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBzKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gcyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdD10aGlzLl9yZXBhaXIodCk7dmFyIHI9bmV3IG4uU2ltcGxlWE1MUGFyc2VyKHtsb3dlckNhc2VOYW1lOiEwfSkucGFyc2VGcm9tU3RyaW5nKHQpO3RoaXMuX21ldGFkYXRhTWFwPW5ldyBNYXAsdGhpcy5fZGF0YT10LHImJnRoaXMuX3BhcnNlKHIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX3JlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXltePF0rLywiIikucmVwbGFjZSgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQucmVwbGFjZSgvXFwoWzAtM10pKFswLTddKShbMC03XSkvZywoZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjQqdCs4KnIrMSpuKX0pKS5yZXBsYWNlKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UiYXBvcyI6cmV0dXJuIiciO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJxdW90IjpyZXR1cm4nIid9dGhyb3cgbmV3IEVycm9yKCJfcmVwYWlyOiAiLmNvbmNhdCh0LCIgaXNuJ3QgZGVmaW5lZC4iKSl9KSksbj1bXSxhPTAsaT1yLmxlbmd0aDthPGk7YSs9Mil7dmFyIG89MjU2KnIuY2hhckNvZGVBdChhKStyLmNoYXJDb2RlQXQoYSsxKTtvPj0zMiYmbzwxMjcmJjYwIT09byYmNjIhPT1vJiYzOCE9PW8/bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobykpOm4ucHVzaCgiJiN4IisoNjU1MzYrbykudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSsiOyIpfXJldHVybiI+IituLmpvaW4oIiIpfSkpfX0se2tleToiX2dldFNlcXVlbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lO3JldHVybiJyZGY6YmFnIiE9PXQmJiJyZGY6c2VxIiE9PXQmJiJyZGY6YWx0IiE9PXQ/bnVsbDplLmNoaWxkTm9kZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4icmRmOmxpIj09PWUubm9kZU5hbWV9KSl9fSx7a2V5OiJfcGFyc2VBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNDaGlsZE5vZGVzKCkpe3ZhciB0PShuPWUuY2hpbGROb2RlcyxhPTEsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0obixhKXx8byhuLGEpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpWzBdLHI9dGhpcy5fZ2V0U2VxdWVuY2UodCl8fFtdO3RoaXMuX21ldGFkYXRhTWFwLnNldChlLm5vZGVOYW1lLHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudC50cmltKCl9KSkpfXZhciBuLGF9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9jdW1lbnRFbGVtZW50O2lmKCJyZGY6cmRmIiE9PXQubm9kZU5hbWUpZm9yKHQ9dC5maXJzdENoaWxkO3QmJiJyZGY6cmRmIiE9PXQubm9kZU5hbWU7KXQ9dC5uZXh0U2libGluZztpZih0JiYicmRmOnJkZiI9PT10Lm5vZGVOYW1lJiZ0Lmhhc0NoaWxkTm9kZXMoKSl7dmFyIHIsbj1pKHQuY2hpbGROb2Rlcyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO2lmKCJyZGY6ZGVzY3JpcHRpb24iPT09YS5ub2RlTmFtZSl7dmFyIG8scz1pKGEuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9Yy5ub2RlTmFtZTtzd2l0Y2godSl7Y2FzZSIjdGV4dCI6Y29udGludWU7Y2FzZSJkYzpjcmVhdG9yIjpjYXNlImRjOnN1YmplY3QiOnRoaXMuX3BhcnNlQXJyYXkoYyk7Y29udGludWV9dGhpcy5fbWV0YWRhdGFNYXAuc2V0KHUsYy50ZXh0Q29udGVudC50cmltKCkpfX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX19fX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2VkRGF0YTp0aGlzLl9tZXRhZGF0YU1hcCxyYXdEYXRhOnRoaXMuX2RhdGF9fX1dKSYmYyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuTWV0YWRhdGFQYXJzZXI9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cnVjdFRyZWVSb290PXQuU3RydWN0VHJlZVBhZ2U9dm9pZCAwO3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE5OSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGg9IlBBR0VfQ09OVEVOVCIsZD0iU1RSRUFNX0NPTlRFTlQiLHA9Ik9CSkVDVCIsZz0iRUxFTUVOVCIsdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMuZGljdD10LHRoaXMucm9sZU1hcD1uZXcgTWFwfXJldHVybiBmKGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZWFkUm9sZU1hcCgpfX0se2tleToicmVhZFJvbGVNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZGljdC5nZXQoIlJvbGVNYXAiKTt0IGluc3RhbmNlb2Ygbi5EaWN0JiZ0LmZvckVhY2goKGZ1bmN0aW9uKHQscil7ciBpbnN0YW5jZW9mIG4uTmFtZSYmZS5yb2xlTWFwLnNldCh0LHIubmFtZSl9KSl9fV0pLGV9KCk7dC5TdHJ1Y3RUcmVlUm9vdD12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnRyZWU9dCx0aGlzLmRpY3Q9cix0aGlzLmtpZHM9W10sdGhpcy5wYXJzZUtpZHMoKX1yZXR1cm4gZihlLFt7a2V5OiJyb2xlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRpY3QuZ2V0KCJTIiksdD1lIGluc3RhbmNlb2Ygbi5OYW1lP2UubmFtZToiIixyPXRoaXMudHJlZS5yb290O3JldHVybiByLnJvbGVNYXAuaGFzKHQpP3Iucm9sZU1hcC5nZXQodCk6dH19LHtrZXk6InBhcnNlS2lkcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1udWxsLHQ9dGhpcy5kaWN0LmdldFJhdygiUGciKTt0IGluc3RhbmNlb2Ygbi5SZWYmJihlPXQudG9TdHJpbmcoKSk7dmFyIHI9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLGk9byhyKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsYz10aGlzLnBhcnNlS2lkKGUscyk7YyYmdGhpcy5raWRzLnB1c2goYyl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX1lbHNle3ZhciB1PXRoaXMucGFyc2VLaWQoZSxyKTt1JiZ0aGlzLmtpZHMucHVzaCh1KX19fSx7a2V5OiJwYXJzZUtpZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IG0oe3R5cGU6aCxtY2lkOnQscGFnZU9iaklkOmV9KTt2YXIgcj1udWxsO2lmKHQgaW5zdGFuY2VvZiBuLlJlZj9yPXRoaXMuZGljdC54cmVmLmZldGNoKHQpOnQgaW5zdGFuY2VvZiBuLkRpY3QmJihyPXQpLCFyKXJldHVybiBudWxsO3ZhciBhPXIuZ2V0UmF3KCJQZyIpO2EgaW5zdGFuY2VvZiBuLlJlZiYmKGU9YS50b1N0cmluZygpKTt2YXIgaT1yLmdldCgiVHlwZSIpaW5zdGFuY2VvZiBuLk5hbWU/ci5nZXQoIlR5cGUiKS5uYW1lOm51bGw7cmV0dXJuIk1DUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpkLHJlZk9iaklkOnIuZ2V0UmF3KCJTdG0iKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIlN0bSIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZSxtY2lkOnIuZ2V0KCJNQ0lEIil9KToiT0JKUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpwLHJlZk9iaklkOnIuZ2V0UmF3KCJPYmoiKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIk9iaiIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZX0pOm5ldyBtKHt0eXBlOmcsZGljdDpyfSl9fV0pLGV9KCksbT1mKChmdW5jdGlvbiBlKHQpe3ZhciByPXQudHlwZSxuPXQuZGljdCxhPXZvaWQgMD09PW4/bnVsbDpuLGk9dC5tY2lkLG89dm9pZCAwPT09aT9udWxsOmkscz10LnBhZ2VPYmpJZCxjPXZvaWQgMD09PXM/bnVsbDpzLGw9dC5yZWZPYmpJZCxmPXZvaWQgMD09PWw/bnVsbDpsO3UodGhpcyxlKSx0aGlzLnR5cGU9cix0aGlzLmRpY3Q9YSx0aGlzLm1jaWQ9byx0aGlzLnBhZ2VPYmpJZD1jLHRoaXMucmVmT2JqSWQ9Zix0aGlzLnBhcmVudE5vZGU9bnVsbH0pKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnJvb3Q9dCx0aGlzLnJvb3REaWN0PXQ/dC5kaWN0Om51bGwsdGhpcy5wYWdlRGljdD1yLHRoaXMubm9kZXM9W119cmV0dXJuIGYoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5yb290JiZ0aGlzLnJvb3REaWN0KXt2YXIgZT10aGlzLnJvb3REaWN0LmdldCgiUGFyZW50VHJlZSIpO2lmKGUpe3ZhciB0PXRoaXMucGFnZURpY3QuZ2V0KCJTdHJ1Y3RQYXJlbnRzIik7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSl7dmFyIHI9bmV3IGkuTnVtYmVyVHJlZShlLHRoaXMucm9vdERpY3QueHJlZikuZ2V0KHQpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLHM9bmV3IE1hcCxjPW8ocik7dHJ5e2ZvcihjLnMoKTshKGE9Yy5uKCkpLmRvbmU7KXt2YXIgdT1hLnZhbHVlO3UgaW5zdGFuY2VvZiBuLlJlZiYmdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaCh1KSxzKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19fX19LHtrZXk6ImFkZE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7aWYocj40MClyZXR1cm4oMCxhLndhcm4pKCJTdHJ1Y3RUcmVlIE1BWF9ERVBUSCByZWFjaGVkLiIpLG51bGw7aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO3ZhciBpPW5ldyB5KHRoaXMsZSk7dC5zZXQoZSxpKTt2YXIgcz1lLmdldCgiUCIpO2lmKCFzfHwoMCxuLmlzTmFtZSkocy5nZXQoIlR5cGUiKSwiU3RydWN0VHJlZVJvb3QiKSlyZXR1cm4gdGhpcy5hZGRUb3BMZXZlbE5vZGUoZSxpKXx8dC5kZWxldGUoZSksaTt2YXIgYz10aGlzLmFkZE5vZGUocyx0LHIrMSk7aWYoIWMpcmV0dXJuIGk7dmFyIHUsbD0hMSxmPW8oYy5raWRzKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aC50eXBlPT09ZyYmaC5kaWN0PT09ZSYmKGgucGFyZW50Tm9kZT1pLGw9ITApfX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX1yZXR1cm4gbHx8dC5kZWxldGUoZSksaX19LHtrZXk6ImFkZFRvcExldmVsTm9kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnJvb3REaWN0LmdldCgiSyIpO2lmKCFyKXJldHVybiExO2lmKHIgaW5zdGFuY2VvZiBuLkRpY3QpcmV0dXJuIHIub2JqSWQ9PT1lLm9iaklkJiYodGhpcy5ub2Rlc1swXT10LCEwKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4hMDtmb3IodmFyIGE9ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO28mJm8udG9TdHJpbmcoKT09PWUub2JqSWQmJih0aGlzLm5vZGVzW2ldPXQsYT0hMCl9cmV0dXJuIGF9fSx7a2V5OiJzZXJpYWxpemFibGUiLGdldDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtpZihuPjQwKSgwLGEud2FybikoIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTtlbHNle3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7aS5yb2xlPXQucm9sZSxpLmNoaWxkcmVuPVtdLHIuY2hpbGRyZW4ucHVzaChpKTt2YXIgcz10LmRpY3QuZ2V0KCJBbHQiKTsic3RyaW5nIj09dHlwZW9mIHMmJihpLmFsdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShzKSk7dmFyIGM9dC5kaWN0LmdldCgiTGFuZyIpOyJzdHJpbmciPT10eXBlb2YgYyYmKGkubGFuZz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKSk7dmFyIHUsbD1vKHQua2lkcyk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlLHY9Zi50eXBlPT09Zz9mLnBhcmVudE5vZGU6bnVsbDt2P2UodixpLG4rMSk6Zi50eXBlPT09aHx8Zi50eXBlPT09ZD9pLmNoaWxkcmVuLnB1c2goe3R5cGU6ImNvbnRlbnQiLGlkOiJwYWdlIi5jb25jYXQoZi5wYWdlT2JqSWQsIl9tY2lkIikuY29uY2F0KGYubWNpZCl9KTpmLnR5cGU9PT1wJiZpLmNoaWxkcmVuLnB1c2goe3R5cGU6Im9iamVjdCIsaWQ6Zi5yZWZPYmpJZH0pfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX19fXZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7dC5jaGlsZHJlbj1bXSx0LnJvbGU9IlJvb3QiO3ZhciByLG49byh0aGlzLm5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aSYmZShpLHQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19XSksZX0oKTt0LlN0cnVjdFRyZWVQYWdlPWJ9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk9iamVjdExvYWRlcj12b2lkIDA7dmFyIGE9cigxMzQpLGk9cigxMzYpLG89cigxMzUpLHM9cigyKTtmdW5jdGlvbiBjKCl7Yz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LGE9T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LG89aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHM9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIix1PWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2woe30sIiIpfWNhdGNoKGUpe2w9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGYoZSx0LHIsbil7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYobnx8W10pO3JldHVybiBhKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gaChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1mO3ZhciBkPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2woeSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixvKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bChlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gaShhLG8scyxjKXt2YXIgdT1oKGVbYV0sZSxvKTtpZigidGhyb3ciIT09dS50eXBlKXt2YXIgbD11LmFyZyxmPWwudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1uKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2koIm5leHQiLGUscyxjKX0pLChmdW5jdGlvbihlKXtpKCJ0aHJvdyIsZSxzLGMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXtsLnZhbHVlPWUscyhsKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gaSgidGhyb3ciLGUscyxjKX0pKX1jKHUuYXJnKX12YXIgbzthKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7aShlLHIsdCxuKX0pKX1yZXR1cm4gbz1vP28udGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1kKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9aChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1kKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxkO3ZhciBhPWgobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxkO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGQpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbb107aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LGEodywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLGEodiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9bCh2LHUsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixsKGUsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxsKFMucHJvdG90eXBlLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGYodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxsKHcsdSwiR2VuZXJhdG9yIiksbCh3LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbCh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxkKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGR9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxkfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxkfX0sZX1mdW5jdGlvbiB1KGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXt1KGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXt1KGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBkKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQpe2lmKGUgaW5zdGFuY2VvZiBhLkRpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSllPWUuZGljdC5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybjt2YXIgcixuLG89aChlKTt0cnl7Zm9yKG8ucygpOyEocj1vLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7KChuPXMpaW5zdGFuY2VvZiBhLlJlZnx8biBpbnN0YW5jZW9mIGEuRGljdHx8biBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShuKSkmJnQucHVzaChzKX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9fXZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5kaWN0PXQsdGhpcy5rZXlzPXIsdGhpcy54cmVmPW4sdGhpcy5yZWZTZXQ9bnVsbH12YXIgdCxyLG4sdTtyZXR1cm4gdD1lLHI9W3trZXk6ImxvYWQiLHZhbHVlOih1PWwoYygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4saSxvLHMsdTtyZXR1cm4gYygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHZvaWQgMCk7Y2FzZSAyOnQ9dGhpcy5rZXlzLHI9dGhpcy5kaWN0LHRoaXMucmVmU2V0PW5ldyBhLlJlZlNldCxuPVtdLGk9aCh0KTt0cnl7Zm9yKGkucygpOyEobz1pLm4oKSkuZG9uZTspcz1vLnZhbHVlLHZvaWQgMCE9PSh1PXIuZ2V0UmF3KHMpKSYmbi5wdXNoKHUpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl93YWxrKG4pKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfd2FsayIsdmFsdWU6KG49bChjKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLHUsbCxmLGQsZyx2LHksbSxiLHc7cmV0dXJuIGMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPVtdLG49W107Y2FzZSAyOmlmKCF0Lmxlbmd0aCl7ZS5uZXh0PTQ4O2JyZWFrfWlmKCEoKHU9dC5wb3AoKSlpbnN0YW5jZW9mIGEuUmVmKSl7ZS5uZXh0PTIxO2JyZWFrfWlmKCF0aGlzLnJlZlNldC5oYXModSkpe2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDIpO2Nhc2UgNzplLnByZXY9Nyx0aGlzLnJlZlNldC5wdXQodSksdT10aGlzLnhyZWYuZmV0Y2godSksZS5uZXh0PTIxO2JyZWFrO2Nhc2UgMTI6aWYoZS5wcmV2PTEyLGUudDA9ZS5jYXRjaCg3KSxlLnQwIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTE5O2JyZWFrfXJldHVybigwLHMud2FybikoJ09iamVjdExvYWRlci5fd2FsayAtIHJlcXVlc3RpbmcgYWxsIGRhdGE6ICInLmNvbmNhdChlLnQwLCciLicpKSx0aGlzLnJlZlNldD1udWxsLGw9dGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLGUuYWJydXB0KCJyZXR1cm4iLGwucmVxdWVzdEFsbENodW5rcygpKTtjYXNlIDE5OnIucHVzaCh1KSxuLnB1c2goe2JlZ2luOmUudDAuYmVnaW4sZW5kOmUudDAuZW5kfSk7Y2FzZSAyMTppZighKHUgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pKXtlLm5leHQ9NDU7YnJlYWt9aWYoIShmPXUuZ2V0QmFzZVN0cmVhbXMoKSkpe2UubmV4dD00NTticmVha31kPSExLGc9aChmKSxlLnByZXY9MjYsZy5zKCk7Y2FzZSAyODppZigodj1nLm4oKSkuZG9uZSl7ZS5uZXh0PTM2O2JyZWFrfWlmKCEoeT12LnZhbHVlKS5pc0RhdGFMb2FkZWQpe2UubmV4dD0zMjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiwzNCk7Y2FzZSAzMjpkPSEwLG4ucHVzaCh7YmVnaW46eS5zdGFydCxlbmQ6eS5lbmR9KTtjYXNlIDM0OmUubmV4dD0yODticmVhaztjYXNlIDM2OmUubmV4dD00MTticmVhaztjYXNlIDM4OmUucHJldj0zOCxlLnQxPWUuY2F0Y2goMjYpLGcuZShlLnQxKTtjYXNlIDQxOnJldHVybiBlLnByZXY9NDEsZy5mKCksZS5maW5pc2goNDEpO2Nhc2UgNDQ6ZCYmci5wdXNoKHUpO2Nhc2UgNDU6cCh1LHQpLGUubmV4dD0yO2JyZWFrO2Nhc2UgNDg6aWYoIW4ubGVuZ3RoKXtlLm5leHQ9NTQ7YnJlYWt9cmV0dXJuIGUubmV4dD01MSx0aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhuKTtjYXNlIDUxOm09aChyKTt0cnl7Zm9yKG0ucygpOyEoYj1tLm4oKSkuZG9uZTspKHc9Yi52YWx1ZSlpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnJlZlNldC5yZW1vdmUodyl9Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3dhbGsocikpO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucmVmU2V0PW51bGwsZS5hYnJ1cHQoInJldHVybiIsdm9pZCAwKTtjYXNlIDU2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbNywxMl0sWzI2LDM4LDQxLDQ0XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dLHImJmYodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9iamVjdExvYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWEZBRmFjdG9yeT12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTApLGk9cigyMTYpLG89cigyMTQpLHM9cigyMDcpLGM9cigyKSx1PXIoMjE3KSxsPXIoMjI3KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7ZD1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP3QucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBwKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtwKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtwKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKTt0cnl7dGhpcy5yb290PShuZXcgdS5YRkFQYXJzZXIpLnBhcnNlKGUuX2NyZWF0ZURvY3VtZW50KHQpKTt2YXIgcj1uZXcgYS5CaW5kZXIodGhpcy5yb290KTt0aGlzLmZvcm09ci5iaW5kKCksdGhpcy5kYXRhSGFuZGxlcj1uZXcgaS5EYXRhSGFuZGxlcih0aGlzLnJvb3Qsci5nZXREYXRhKCkpLHRoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS50ZW1wbGF0ZT10aGlzLmZvcm19Y2F0Y2goZSl7KDAsYy53YXJuKSgiWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgYW5kIGJpbmRpbmc6ICIuY29uY2F0KGUpKX19dmFyIHQscixmLHAseSxtO3JldHVybiB0PWUscj1be2tleToiaXNWYWxpZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290JiZ0aGlzLmZvcm19fSx7a2V5OiJfY3JlYXRlUGFnZXNIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5mb3JtW24uJHRvUGFnZXNdKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3NldFRpbWVvdXQoKGZ1bmN0aW9uIG4oKXt0cnl7dmFyIGE9ZS5uZXh0KCk7YS5kb25lP3QoYS52YWx1ZSk6c2V0VGltZW91dChuLDApfWNhdGNoKGUpe3IoZSl9fSksMCl9KSl9fSx7a2V5OiJfY3JlYXRlUGFnZXMiLHZhbHVlOihtPWcoZCgpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gZCgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLnByZXY9MCxlLm5leHQ9Myx0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO2Nhc2UgMzp0aGlzLnBhZ2VzPWUuc2VudCx0aGlzLmRpbXM9dGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlcy5zdHlsZSxyPXQud2lkdGgsbj10LmhlaWdodDtyZXR1cm5bMCwwLHBhcnNlSW50KHIpLHBhcnNlSW50KG4pXX0pKSxlLm5leHQ9MTA7YnJlYWs7Y2FzZSA3OmUucHJldj03LGUudDA9ZS5jYXRjaCgwKSwoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAiLmNvbmNhdChlLnQwKSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzAsN11dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZ2V0Qm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpbXNbZV19fSx7a2V5OiJnZXROdW1QYWdlcyIsdmFsdWU6KHk9ZyhkKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBkKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5wYWdlcyl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUubmV4dD0zLHRoaXMuX2NyZWF0ZVBhZ2VzKCk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLmRpbXMubGVuZ3RoKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJzZXRJbWFnZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS5pbWFnZXM9ZX19LHtrZXk6InNldEZvbnRzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcj1uZXcgby5Gb250RmluZGVyKGUpO3ZhciB0LHI9W10sYT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fSh0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcyk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2k9KDAscy5zdHJpcFF1b3RlcykoaSksdGhpcy5mb3JtW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuZmluZChpKXx8ci5wdXNoKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm4gci5sZW5ndGg+MD9yOm51bGx9fSx7a2V5OiJhcHBlbmRGb250cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5hZGQoZSx0KX19LHtrZXk6ImdldFBhZ2VzIix2YWx1ZToocD1nKGQoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIGQoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZih0aGlzLnBhZ2VzKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5uZXh0PTMsdGhpcy5fY3JlYXRlUGFnZXMoKTtjYXNlIDM6cmV0dXJuIHQ9dGhpcy5wYWdlcyx0aGlzLnBhZ2VzPW51bGwsZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfX1dLGY9W3trZXk6Il9jcmVhdGVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19fSx7a2V5OiJnZXRSaWNoVGV4dEFzSHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7dmFyIHQ9bmV3IHUuWEZBUGFyc2VyKGwuWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbbi4kbm9kZU5hbWVdKSl7dmFyIHI9bC5YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtyW24uJGFwcGVuZENoaWxkXSh0KSx0PXJ9dmFyIGE9dFtuLiR0b0hUTUxdKCk7aWYoIWEuc3VjY2VzcylyZXR1cm4gbnVsbDt2YXIgaT1hLmh0bWwsbz1pLmF0dHJpYnV0ZXM7cmV0dXJuIG8mJihvLmNsYXNzJiYoby5jbGFzcz1vLmNsYXNzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuc3RhcnRzV2l0aCgieGZhIil9KSkpLG8uZGlyPSJhdXRvIikse2h0bWw6aSxzdHI6dFtuLiR0ZXh0XSgpfX1jYXRjaChlKXsoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiByaWNoIHRleHQ6ICIuY29uY2F0KGUpKX1yZXR1cm4gbnVsbH19XSxyJiZ2KHQucHJvdG90eXBlLHIpLGYmJnYodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWEZBRmFjdG9yeT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWG1sT2JqZWN0PXQuWEZBT2JqZWN0QXJyYXk9dC5YRkFPYmplY3Q9dC5YRkFBdHRyaWJ1dGU9dC5TdHJpbmdPYmplY3Q9dC5PcHRpb25PYmplY3Q9dC5PcHRpb24xMD10Lk9wdGlvbjAxPXQuSW50ZWdlck9iamVjdD10LkNvbnRlbnRPYmplY3Q9dC4kdWlkPXQuJHRvU3R5bGU9dC4kdG9TdHJpbmc9dC4kdG9QYWdlcz10LiR0b0hUTUw9dC4kdGV4dD10LiR0YWJJbmRleD10LiRzZXRWYWx1ZT10LiRzZXRTZXRBdHRyaWJ1dGVzPXQuJHNldElkPXQuJHNlYXJjaE5vZGU9dC4kcm9vdD10LiRyZXNvbHZlUHJvdG90eXBlcz10LiRyZW1vdmVDaGlsZD10LiRwdXNoUGFyYT10LiRwdXNoR2x5cGhzPXQuJHBvcFBhcmE9dC4kb25UZXh0PXQuJG9uQ2hpbGRDaGVjaz10LiRvbkNoaWxkPXQuJG5zQXR0cmlidXRlcz10LiRub2RlTmFtZT10LiRuYW1lc3BhY2VJZD10LiRpc1VzYWJsZT10LiRpc1RyYW5zcGFyZW50PXQuJGlzVGhlcmVNb3JlV2lkdGg9dC4kaXNTcGxpdHRhYmxlPXQuJGlzTnNBZ25vc3RpYz10LiRpc0Rlc2NlbmRlbnQ9dC4kaXNEYXRhVmFsdWU9dC4kaXNDREFUQVhtbD10LiRpc0JpbmRhYmxlPXQuJGluc2VydEF0PXQuJGluZGV4T2Y9dC4kaWRzPXQuJGhhc1NldHRhYmxlVmFsdWU9dC4kZ2xvYmFsRGF0YT10LiRnZXRUZW1wbGF0ZVJvb3Q9dC4kZ2V0U3ViZm9ybVBhcmVudD10LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdD10LiRnZXRQYXJlbnQ9dC4kZ2V0TmV4dFBhZ2U9dC4kZ2V0RXh0cmE9dC4kZ2V0RGF0YVZhbHVlPXQuJGdldENvbnRhaW5lZENoaWxkcmVuPXQuJGdldENoaWxkcmVuQnlOYW1lSXQ9dC4kZ2V0Q2hpbGRyZW5CeU5hbWU9dC4kZ2V0Q2hpbGRyZW5CeUNsYXNzPXQuJGdldENoaWxkcmVuPXQuJGdldEF2YWlsYWJsZVNwYWNlPXQuJGdldEF0dHJpYnV0ZXM9dC4kZ2V0QXR0cmlidXRlSXQ9dC4kZmx1c2hIVE1MPXQuJGZpbmFsaXplPXQuJGV4dHJhPXQuJGR1bXA9dC4kZGF0YT10LiRjb250ZW50PXQuJGNvbnN1bWVkPXQuJGNsb25lPXQuJGNsZWFudXA9dC4kY2xlYW5QYWdlPXQuJGNsZWFuPXQuJGNoaWxkcmVuVG9IVE1MPXQuJGFwcGVuZENoaWxkPXQuJGFkZEhUTUw9dC4kYWNjZXB0V2hpdGVzcGFjZT12b2lkIDA7dmFyIG49cigyMDcpLGE9cigyKSxpPXIoMTM1KSxvPXIoMjA4KSxzPXIoMjA5KTtmdW5jdGlvbiBjKCl7cmV0dXJuIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1wKGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZChlKX0odGhpcyxyKX19ZnVuY3Rpb24gZChlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoKXt2PWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIGg/dDpoLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGY9e307ZnVuY3Rpb24gaCgpe31mdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz1wLnByb3RvdHlwZT1oLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGY9dS52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PWcoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWYpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWYpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGY7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGY7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZik6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxmKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGQucHJvdG90eXBlPXAsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnAsY29uZmlndXJhYmxlOiEwfSksbihwLCJjb25zdHJ1Y3RvciIse3ZhbHVlOmQsY29uZmlndXJhYmxlOiEwfSksZC5kaXNwbGF5TmFtZT1jKHAscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWR8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHApOihlLl9fcHJvdG9fXz1wLGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGYpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZn0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGZ9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGZ9fSxlfWZ1bmN0aW9uIHkoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPW0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIG0oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGIoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9iKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBiKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGsoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWcobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1nKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBTKGUsdCxyKXtyZXR1cm4gdCYmayhlLnByb3RvdHlwZSx0KSxyJiZrKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgeD1TeW1ib2woKTt0LiRhY2NlcHRXaGl0ZXNwYWNlPXg7dmFyIE89U3ltYm9sKCk7dC4kYWRkSFRNTD1PO3ZhciBBPVN5bWJvbCgpO3QuJGFwcGVuZENoaWxkPUE7dmFyIEM9U3ltYm9sKCk7dC4kY2hpbGRyZW5Ub0hUTUw9Qzt2YXIgRj1TeW1ib2woKTt0LiRjbGVhbj1GO3ZhciBQPVN5bWJvbCgpO3QuJGNsZWFuUGFnZT1QO3ZhciBUPVN5bWJvbCgpO3QuJGNsZWFudXA9VDt2YXIgST1TeW1ib2woKTt0LiRjbG9uZT1JO3ZhciBFPVN5bWJvbCgpO3QuJGNvbnN1bWVkPUU7dmFyIGo9U3ltYm9sKCJjb250ZW50Iik7dC4kY29udGVudD1qO3ZhciBNPVN5bWJvbCgiZGF0YSIpO3QuJGRhdGE9TTt2YXIgXz1TeW1ib2woKTt0LiRkdW1wPV87dmFyIEw9U3ltYm9sKCJleHRyYSIpO3QuJGV4dHJhPUw7dmFyIFI9U3ltYm9sKCk7dC4kZmluYWxpemU9Ujt2YXIgTj1TeW1ib2woKTt0LiRmbHVzaEhUTUw9Tjt2YXIgRD1TeW1ib2woKTt0LiRnZXRBdHRyaWJ1dGVJdD1EO3ZhciBCPVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZXM9Qjt2YXIgVT1TeW1ib2woKTt0LiRnZXRBdmFpbGFibGVTcGFjZT1VO3ZhciAkPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlDbGFzcz0kO3ZhciBYPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlOYW1lPVg7dmFyIEg9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD1IO3ZhciBxPVN5bWJvbCgpO3QuJGdldERhdGFWYWx1ZT1xO3ZhciBHPVN5bWJvbCgpO3QuJGdldEV4dHJhPUc7dmFyIHo9U3ltYm9sKCk7dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9ejt2YXIgVz1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbj1XO3ZhciBWPVN5bWJvbCgpO3QuJGdldENvbnRhaW5lZENoaWxkcmVuPVY7dmFyIFk9U3ltYm9sKCk7dC4kZ2V0TmV4dFBhZ2U9WTt2YXIgSz1TeW1ib2woKTt0LiRnZXRTdWJmb3JtUGFyZW50PUs7dmFyIEo9U3ltYm9sKCk7dC4kZ2V0UGFyZW50PUo7dmFyIFo9U3ltYm9sKCk7dC4kZ2V0VGVtcGxhdGVSb290PVo7dmFyIFE9U3ltYm9sKCk7dC4kZ2xvYmFsRGF0YT1RO3ZhciBlZT1TeW1ib2woKTt0LiRoYXNTZXR0YWJsZVZhbHVlPWVlO3ZhciB0ZT1TeW1ib2woKTt0LiRpZHM9dGU7dmFyIHJlPVN5bWJvbCgpO3QuJGluZGV4T2Y9cmU7dmFyIG5lPVN5bWJvbCgpO3QuJGluc2VydEF0PW5lO3ZhciBhZT1TeW1ib2woKTt0LiRpc0NEQVRBWG1sPWFlO3ZhciBpZT1TeW1ib2woKTt0LiRpc0JpbmRhYmxlPWllO3ZhciBvZT1TeW1ib2woKTt0LiRpc0RhdGFWYWx1ZT1vZTt2YXIgc2U9U3ltYm9sKCk7dC4kaXNEZXNjZW5kZW50PXNlO3ZhciBjZT1TeW1ib2woKTt0LiRpc05zQWdub3N0aWM9Y2U7dmFyIHVlPVN5bWJvbCgpO3QuJGlzU3BsaXR0YWJsZT11ZTt2YXIgbGU9U3ltYm9sKCk7dC4kaXNUaGVyZU1vcmVXaWR0aD1sZTt2YXIgZmU9U3ltYm9sKCk7dC4kaXNUcmFuc3BhcmVudD1mZTt2YXIgaGU9U3ltYm9sKCk7dC4kaXNVc2FibGU9aGU7dmFyIGRlPVN5bWJvbCgpLHBlPVN5bWJvbCgibmFtZXNwYWNlSWQiKTt0LiRuYW1lc3BhY2VJZD1wZTt2YXIgZ2U9U3ltYm9sKCJub2RlTmFtZSIpO3QuJG5vZGVOYW1lPWdlO3ZhciB2ZT1TeW1ib2woKTt0LiRuc0F0dHJpYnV0ZXM9dmU7dmFyIHllPVN5bWJvbCgpO3QuJG9uQ2hpbGQ9eWU7dmFyIG1lPVN5bWJvbCgpO3QuJG9uQ2hpbGRDaGVjaz1tZTt2YXIgYmU9U3ltYm9sKCk7dC4kb25UZXh0PWJlO3ZhciB3ZT1TeW1ib2woKTt0LiRwdXNoR2x5cGhzPXdlO3ZhciBrZT1TeW1ib2woKTt0LiRwb3BQYXJhPWtlO3ZhciBTZT1TeW1ib2woKTt0LiRwdXNoUGFyYT1TZTt2YXIgeGU9U3ltYm9sKCk7dC4kcmVtb3ZlQ2hpbGQ9eGU7dmFyIE9lPVN5bWJvbCgicm9vdCIpO3QuJHJvb3Q9T2U7dmFyIEFlPVN5bWJvbCgpO3QuJHJlc29sdmVQcm90b3R5cGVzPUFlO3ZhciBDZT1TeW1ib2woKTt0LiRzZWFyY2hOb2RlPUNlO3ZhciBGZT1TeW1ib2woKTt0LiRzZXRJZD1GZTt2YXIgUGU9U3ltYm9sKCk7dC4kc2V0U2V0QXR0cmlidXRlcz1QZTt2YXIgVGU9U3ltYm9sKCk7dC4kc2V0VmFsdWU9VGU7dmFyIEllPVN5bWJvbCgpO3QuJHRhYkluZGV4PUllO3ZhciBFZT1TeW1ib2woKTt0LiR0ZXh0PUVlO3ZhciBqZT1TeW1ib2woKTt0LiR0b1BhZ2VzPWplO3ZhciBNZT1TeW1ib2woKTt0LiR0b0hUTUw9TWU7dmFyIF9lPVN5bWJvbCgpO3QuJHRvU3RyaW5nPV9lO3ZhciBMZT1TeW1ib2woKTt0LiR0b1N0eWxlPUxlO3ZhciBSZT1TeW1ib2woInVpZCIpO3QuJHVpZD1SZTt2YXIgTmU9U3ltYm9sKCksRGU9U3ltYm9sKCksQmU9U3ltYm9sKCksVWU9U3ltYm9sKCJfY2hpbGRyZW4iKSwkZT1TeW1ib2woKSxYZT1TeW1ib2woKSxIZT1TeW1ib2woKSxxZT1TeW1ib2woKSxHZT1TeW1ib2woKSx6ZT1TeW1ib2woKSxXZT1TeW1ib2woKSxWZT1TeW1ib2woKSxZZT1TeW1ib2woKSxLZT1TeW1ib2woInBhcmVudCIpLEplPVN5bWJvbCgpLFplPVN5bWJvbCgpLFFlPVN5bWJvbCgpLGV0PTAsdHQ9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQscnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt3KHRoaXMsZSksdGhpc1twZV09dCx0aGlzW2dlXT1yLHRoaXNbV2VdPW4sdGhpc1tLZV09bnVsbCx0aGlzW1VlXT1bXSx0aGlzW1JlXT0iIi5jb25jYXQocikuY29uY2F0KGV0KyspLHRoaXNbUV09bnVsbH1yZXR1cm4gUyhlLFt7a2V5OnllLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzW1dlXXx8IXRoaXNbbWVdKGUpKXJldHVybiExO3ZhciB0PWVbZ2VdLHI9dGhpc1t0XTtpZighKHIgaW5zdGFuY2VvZiBudCkpcmV0dXJuIG51bGwhPT1yJiZ0aGlzW3hlXShyKSx0aGlzW3RdPWUsdGhpc1tBXShlKSwhMDtpZihyLnB1c2goZSkpcmV0dXJuIHRoaXNbQV0oZSksITA7dmFyIG49IiI7cmV0dXJuIHRoaXMuaWQ/bj0iIChpZDogIi5jb25jYXQodGhpcy5pZCwiKSIpOnRoaXMubmFtZSYmKG49IiAobmFtZTogIi5jb25jYXQodGhpcy5uYW1lLCIgIikuY29uY2F0KHRoaXMuaC52YWx1ZSwiKSIpKSwoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdCh0aGlzW2dlXSwnIicpLmNvbmNhdChuLCcgaGFzIGFscmVhZHkgZW5vdWdoICInKS5jb25jYXQodCwnIiEnKSksITF9fSx7a2V5Om1lLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KGVbZ2VdKSYmZVtwZV09PT10aGlzW3BlXX19LHtrZXk6Y2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6eCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTphZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTppZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTprZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGFyYSYmdGhpc1taXSgpW0xdLnBhcmFTdGFjay5wb3AoKX19LHtrZXk6U2UsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW1pdKClbTF0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKX19LHtrZXk6RmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pZCYmdGhpc1twZV09PT1vLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCYmZS5zZXQodGhpcy5pZCx0aGlzKX19LHtrZXk6Wix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW1FdLnRlbXBsYXRlfX0se2tleTp1ZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpBLHZhbHVlOmZ1bmN0aW9uKGUpe2VbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaChlKSwhZVtRXSYmdGhpc1tRXSYmKGVbUV09dGhpc1tRXSl9fSx7a2V5OnhlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbVWVdLmluZGV4T2YoZSk7dGhpc1tVZV0uc3BsaWNlKHQsMSl9fSx7a2V5OmVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoInZhbHVlIil9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleTpGLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzW1dlXSx0aGlzW1RdJiYoZS5jbGVhbih0aGlzW1RdKSxkZWxldGUgdGhpc1tUXSl9fSx7a2V5OnJlLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW1VlXS5pbmRleE9mKGUpfX0se2tleTpuZSx2YWx1ZTpmdW5jdGlvbihlLHQpe3RbS2VdPXRoaXMsdGhpc1tVZV0uc3BsaWNlKGUsMCx0KSwhdFtRXSYmdGhpc1tRXSYmKHRbUV09dGhpc1tRXSl9fSx7a2V5OmZlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubmFtZX19LHtrZXk6ZGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIn19LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXNbVWVdLmxlbmd0aD90aGlzW2pdOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbRWVdKCl9KSkuam9pbigiIil9fSx7a2V5OkJlLGdldDpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZighdC5fYXR0cmlidXRlcyl7dmFyIHIsbj10Ll9hdHRyaWJ1dGVzPW5ldyBTZXQsaT15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7aWYobnVsbD09PXRoaXNbb118fHRoaXNbb11pbnN0YW5jZW9mIGV8fHRoaXNbb11pbnN0YW5jZW9mIG50KWJyZWFrO24uYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsQmUsdC5fYXR0cmlidXRlcyl9fSx7a2V5OnNlLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZSlyZXR1cm4hMDt0PXRbSl0oKX1yZXR1cm4hMX19LHtrZXk6Six2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0tlXX19LHtrZXk6Syx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0pdKCl9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW2VdOnRoaXNbVWVdfX0se2tleTpfLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzW2pdJiYodC4kY29udGVudD10aGlzW2pdKTt2YXIgcixuPXkoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZSxpPXRoaXNbYV07bnVsbCE9PWkmJihpIGluc3RhbmNlb2YgZT90W2FdPWlbX10oKTppIGluc3RhbmNlb2YgbnQ/aS5pc0VtcHR5KCl8fCh0W2FdPWkuZHVtcCgpKTp0W2FdPWkpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19LHtrZXk6TGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LHtrZXk6TWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5IVE1MUmVzdWx0LkVNUFRZfX0se2tleTpWLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6dD15KHRoaXNbV10oKSksZS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtlLm5leHQ9OTticmVha31yZXR1cm4gbj1yLnZhbHVlLGUubmV4dD03LG47Y2FzZSA3OmUubmV4dD0zO2JyZWFrO2Nhc2UgOTplLm5leHQ9MTQ7YnJlYWs7Y2FzZSAxMTplLnByZXY9MTEsZS50MD1lLmNhdGNoKDEpLHQuZShlLnQwKTtjYXNlIDE0OnJldHVybiBlLnByZXY9MTQsdC5mKCksZS5maW5pc2goMTQpO2Nhc2UgMTc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxLDExLDE0LDE3XV0pfSkpfSx7a2V5OnFlLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOm49eSh0aGlzW1ZdKCkpLGUucHJldj0xLG4ucygpO2Nhc2UgMzppZigoYT1uLm4oKSkuZG9uZSl7ZS5uZXh0PTEzO2JyZWFrfWlmKGk9YS52YWx1ZSx0JiZyIT09dC5oYXMoaVtnZV0pKXtlLm5leHQ9MTE7YnJlYWt9cmV0dXJuIG89dGhpc1tVXSgpLChzPWlbTWVdKG8pKS5zdWNjZXNzfHwodGhpc1tMXS5mYWlsaW5nTm9kZT1pKSxlLm5leHQ9MTEscztjYXNlIDExOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTM6ZS5uZXh0PTE4O2JyZWFrO2Nhc2UgMTU6ZS5wcmV2PTE1LGUudDA9ZS5jYXRjaCgxKSxuLmUoZS50MCk7Y2FzZSAxODpyZXR1cm4gZS5wcmV2PTE4LG4uZigpLGUuZmluaXNoKDE4KTtjYXNlIDIxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNSwxOCwyMV1dKX0pKX0se2tleTpOLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSx7a2V5Ok8sdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzW0xdLmNoaWxkcmVuLnB1c2goZSl9fSx7a2V5OlUsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OkMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maWx0ZXIscj12b2lkIDA9PT10P251bGw6dCxhPWUuaW5jbHVkZSxpPXZvaWQgMD09PWF8fGE7aWYodGhpc1tMXS5nZW5lcmF0b3Ipe3ZhciBvPXRoaXNbVV0oKSxzPXRoaXNbTF0uZmFpbGluZ05vZGVbTWVdKG8pO2lmKCFzLnN1Y2Nlc3MpcmV0dXJuIHM7cy5odG1sJiZ0aGlzW09dKHMuaHRtbCxzLmJib3gpLGRlbGV0ZSB0aGlzW0xdLmZhaWxpbmdOb2RlfWVsc2UgdGhpc1tMXS5nZW5lcmF0b3I9dGhpc1txZV0ocixpKTtmb3IoOzspe3ZhciBjPXRoaXNbTF0uZ2VuZXJhdG9yLm5leHQoKTtpZihjLmRvbmUpYnJlYWs7dmFyIHU9Yy52YWx1ZTtpZighdS5zdWNjZXNzKXJldHVybiB1O3UuaHRtbCYmdGhpc1tPXSh1Lmh0bWwsdS5iYm94KX1yZXR1cm4gdGhpc1tMXS5nZW5lcmF0b3I9bnVsbCxuLkhUTUxSZXN1bHQuRU1QVFl9fSx7a2V5OlBlLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXNbWmVdPW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpfX0se2tleTp6ZSx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbQmVdLG49dGhpc1taZV07cmV0dXJuKHQ9ZSxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBiKGUpfSh0KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8bSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gci5oYXMoZSkmJiFuLmhhcyhlKX0pKX19LHtrZXk6QWUsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFNldCxuPXkodGhpc1tVZV0pO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl0LnZhbHVlW0plXShlLHIpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19LHtrZXk6SmUsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzW0dlXShlLHQpO3I/dGhpc1tOZV0ocixlLHQpOnRoaXNbQWVdKGUsdCl9fSx7a2V5OkdlLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy51c2Usbj10aGlzLnVzZWhyZWY7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPW51bGwsbz1udWxsLGM9bnVsbCx1PXI7aWYobj8odT1uLG4uc3RhcnRzV2l0aCgiI3NvbSgiKSYmbi5lbmRzV2l0aCgiKSIpP289bi5zbGljZSg1LG4ubGVuZ3RoLTEpOm4uc3RhcnRzV2l0aCgiLiNzb20oIikmJm4uZW5kc1dpdGgoIikiKT9vPW4uc2xpY2UoNixuLmxlbmd0aC0xKTpuLnN0YXJ0c1dpdGgoIiMiKT9jPW4uc2xpY2UoMSk6bi5zdGFydHNXaXRoKCIuIyIpJiYoYz1uLnNsaWNlKDIpKSk6ci5zdGFydHNXaXRoKCIjIik/Yz1yLnNsaWNlKDEpOm89cix0aGlzLnVzZT10aGlzLnVzZWhyZWY9IiIsYz9pPWUuZ2V0KGMpOihpPSgwLHMuc2VhcmNoTm9kZSkoZS5nZXQoT2UpLHRoaXMsbywhMCwhMSkpJiYoaT1pWzBdKSwhaSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICIuY29uY2F0KHUsIi4iKSksbnVsbDtpZihpW2dlXSE9PXRoaXNbZ2VdKXJldHVybigwLGEud2FybikoIlhGQSAtIEluY29tcGF0aWJsZSBwcm90b3R5cGU6ICIuY29uY2F0KGlbZ2VdLCIgIT09ICIpLmNvbmNhdCh0aGlzW2dlXSwiLiIpKSxudWxsO2lmKHQuaGFzKGkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpLG51bGw7dC5hZGQoaSk7dmFyIGw9aVtHZV0oZSx0KTtyZXR1cm4gbCYmaVtOZV0obCxlLHQpLGlbQWVdKGUsdCksdC5kZWxldGUoaSksaX19LHtrZXk6TmUsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHIuaGFzKGUpKSgwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO2Vsc2V7IXRoaXNbal0mJmVbal0mJih0aGlzW2pdPWVbal0pLG5ldyBTZXQocikuYWRkKGUpO3ZhciBuLGk9eSh0aGlzW3plXShlW1plXSkpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTt0aGlzW29dPWVbb10sdGhpc1taZV0mJnRoaXNbWmVdLmFkZChvKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9dmFyIHMsYz15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7aWYoIXRoaXNbQmVdLmhhcyh1KSl7dmFyIGw9dGhpc1t1XSxmPWVbdV07aWYobCBpbnN0YW5jZW9mIG50KXt2YXIgaCxkPXkobFtVZV0pO3RyeXtmb3IoZC5zKCk7IShoPWQubigpKS5kb25lOyloLnZhbHVlW0plXSh0LHIpfWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfWZvcih2YXIgcD1sW1VlXS5sZW5ndGgsZz1mW1VlXS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9ZVtVZV1bcF1bSV0oKTtpZighbC5wdXNoKHYpKWJyZWFrO3ZbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaCh2KSx2W0plXSh0LHIpfX1lbHNlIGlmKG51bGw9PT1sKXtpZihudWxsIT09Zil7dmFyIG09ZltJXSgpO21bS2VdPXRoaXMsdGhpc1t1XT1tLHRoaXNbVWVdLnB1c2gobSksbVtKZV0odCxyKX19ZWxzZSBsW0FlXSh0LHIpLGYmJmxbTmVdKGYsdCxyKX19fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfX19fSx7a2V5OkksdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxyPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKSxuPXkoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO3RyeXtyW2ldPXRoaXNbaV19Y2F0Y2goZSl7KDAsYS5zaGFkb3cpKHIsaSx0aGlzW2ldKX19fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJbUmVdPSIiLmNvbmNhdChyW2dlXSkuY29uY2F0KGV0KyspLHJbVWVdPVtdO3ZhciBvLHM9eShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlO2lmKHRoaXNbQmVdLmhhcyhjKSlyW2NdPWVbJGVdKHRoaXNbY10pO2Vsc2V7dmFyIHU9dGhpc1tjXTtyW2NdPXUgaW5zdGFuY2VvZiBudD9uZXcgbnQodVtWZV0pOm51bGx9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgbCxmPXkodGhpc1tVZV0pO3RyeXtmb3IoZi5zKCk7IShsPWYubigpKS5kb25lOyl7dmFyIGg9bC52YWx1ZSxkPWhbZ2VdLHA9aFtJXSgpO3JbVWVdLnB1c2gocCkscFtLZV09cixudWxsPT09cltkXT9yW2RdPXA6cltkXVtVZV0ucHVzaChwKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9cmV0dXJuIHJ9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW1VlXS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2dlXT09PWV9KSk6dGhpc1tVZV19fSx7a2V5OiQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZV19fSx7a2V5OlgsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiBBcnJheS5mcm9tKHRoaXNbSF0oZSx0LHIpKX19LHtrZXk6SCx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiB2KCkubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGEpe2Zvcig7Oylzd2l0Y2goYS5wcmV2PWEubmV4dCl7Y2FzZSAwOmlmKCJwYXJlbnQiIT09ZSl7YS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGEubmV4dD0zLHJbS2VdO2Nhc2UgMzpyZXR1cm4gYS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDppPXkocltVZV0pLGEucHJldj01LGkucygpO2Nhc2UgNzppZigobz1pLm4oKSkuZG9uZSl7YS5uZXh0PTE5O2JyZWFrfWlmKChzPW8udmFsdWUpW2dlXSE9PWUpe2EubmV4dD0xMjticmVha31yZXR1cm4gYS5uZXh0PTEyLHM7Y2FzZSAxMjppZihzLm5hbWUhPT1lKXthLm5leHQ9MTU7YnJlYWt9cmV0dXJuIGEubmV4dD0xNSxzO2Nhc2UgMTU6aWYoIXQmJiFzW2ZlXSgpKXthLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGEuZGVsZWdhdGVZaWVsZChzW0hdKGUsdCwhMSksInQwIiwxNyk7Y2FzZSAxNzphLm5leHQ9NzticmVhaztjYXNlIDE5OmEubmV4dD0yNDticmVhaztjYXNlIDIxOmEucHJldj0yMSxhLnQxPWEuY2F0Y2goNSksaS5lKGEudDEpO2Nhc2UgMjQ6cmV0dXJuIGEucHJldj0yNCxpLmYoKSxhLmZpbmlzaCgyNCk7Y2FzZSAyNzppZighbnx8IXJbQmVdLmhhcyhlKSl7YS5uZXh0PTMwO2JyZWFrfXJldHVybiBhLm5leHQ9MzAsbmV3IGF0KHIsZSxyW2VdKTtjYXNlIDMwOmNhc2UiZW5kIjpyZXR1cm4gYS5zdG9wKCl9fSksYSxudWxsLFtbNSwyMSwyNCwyN11dKX0pKSgpfX1dLFt7a2V5OiRlLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVskZV0odCl9KSk6Im9iamVjdCI9PT1nKHQpJiZudWxsIT09dD9PYmplY3QuYXNzaWduKHt9LHQpOnR9fV0pLGV9KCk7dC5YRkFPYmplY3Q9cnQ7dmFyIG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxLzA7dyh0aGlzLGUpLHRoaXNbVmVdPXQsdGhpc1tVZV09W119cmV0dXJuIFMoZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbVWVdLmxlbmd0aDw9dGhpc1tWZV0/KHRoaXNbVWVdLnB1c2goZSksITApOigoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdChlW2dlXSwnIiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAnKS5jb25jYXQodGhpc1tWZV0sIiBjaGlsZHJlbiIpKSwhMSl9fSx7a2V5OiJpc0VtcHR5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpc1tVZV0ubGVuZ3RofX0se2tleToiZHVtcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXNbVWVdLmxlbmd0aD90aGlzW1VlXVswXVtfXSgpOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbX10oKX0pKX19LHtrZXk6SSx2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBlKHRoaXNbVmVdKTtyZXR1cm4gdFtVZV09dGhpc1tVZV0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtJXSgpfSkpLHR9fSx7a2V5OiJjaGlsZHJlbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVWVdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tVZV0ubGVuZ3RoPTB9fV0pLGV9KCk7dC5YRkFPYmplY3RBcnJheT1udDt2YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt3KHRoaXMsZSksdGhpc1tLZV09dCx0aGlzW2dlXT1yLHRoaXNbal09bix0aGlzW0VdPSExLHRoaXNbUmVdPSJhdHRyaWJ1dGUiLmNvbmNhdChldCsrKX1yZXR1cm4gUyhlLFt7a2V5OkosdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tLZV19fSx7a2V5Om9lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXX19LHtrZXk6c2UsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbS2VdPT09ZXx8dGhpc1tLZV1bc2VdKGUpfX1dKSxlfSgpO3QuWEZBQXR0cmlidXRlPWF0O3ZhciBpdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGEsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYodyh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsbikpW2pdPSIiLGFbWGVdPW51bGwsIiN0ZXh0IiE9PW4pe3ZhciBvPW5ldyBNYXA7YVtEZV09bztmb3IodmFyIHM9MCxjPU9iamVjdC5lbnRyaWVzKGkpO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD11KGNbc10sMiksZj1sWzBdLGg9bFsxXTtvLnNldChmLG5ldyBhdChkKGEpLGYsaCkpfWlmKGkuaGFzT3duUHJvcGVydHkodmUpKXt2YXIgcD1pW3ZlXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09cCYmKCJkYXRhR3JvdXAiPT09cD9hW1hlXT0hMToiZGF0YVZhbHVlIj09PXAmJihhW1hlXT0hMCkpfX1yZXR1cm4gYVtFXT0hMSxhfXJldHVybiBTKHIsW3trZXk6X2UsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tnZV07aWYoIiN0ZXh0IiE9PXQpe3ZhciByPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKSh0KSxuPXRoaXNbcGVdPT09dHQ/InhmYToiOiIiO2UucHVzaCgiPCIuY29uY2F0KG4pLmNvbmNhdChyKSk7dmFyIG8scz15KHRoaXNbRGVdLmVudHJpZXMoKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz11KG8udmFsdWUsMiksbD1jWzBdLGY9Y1sxXSxoPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKShsKTtlLnB1c2goIiAiLmNvbmNhdChoLCc9IicpLmNvbmNhdCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKShmW2pdKSwnIicpKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYobnVsbCE9PXRoaXNbWGVdJiYodGhpc1tYZV0/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpLHRoaXNbal18fDAhPT10aGlzW1VlXS5sZW5ndGgpe2lmKGUucHVzaCgiPiIpLHRoaXNbal0pInN0cmluZyI9PXR5cGVvZiB0aGlzW2pdP2UucHVzaCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2pdKSk6dGhpc1tqXVtfZV0oZSk7ZWxzZXt2YXIgZCxwPXkodGhpc1tVZV0pO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOylkLnZhbHVlW19lXShlKX1jYXRjaChlKXtwLmUoZSl9ZmluYWxseXtwLmYoKX19ZS5wdXNoKCI8LyIuY29uY2F0KG4pLmNvbmNhdChyLCI+IikpfWVsc2UgZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKCgwLGkuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXNbal0pKX19LHtrZXk6eWUsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpc1tqXSl7dmFyIHQ9bmV3IHIodGhpc1twZV0sIiN0ZXh0Iik7dGhpc1tBXSh0KSx0W2pdPXRoaXNbal0sdGhpc1tqXT0iIn1yZXR1cm4gdGhpc1tBXShlKSwhMH19LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbal0mJnRoaXNbVWVdLmxlbmd0aD4wKXt2YXIgZT1uZXcgcih0aGlzW3BlXSwiI3RleHQiKTt0aGlzW0FdKGUpLGVbal09dGhpc1tqXSxkZWxldGUgdGhpc1tqXX19fSx7a2V5Ok1lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiN0ZXh0Ij09PXRoaXNbZ2VdP24uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tqXX0pOm4uSFRNTFJlc3VsdC5FTVBUWX19LHtrZXk6Vyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBlP3RoaXNbVWVdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHRbZ2VdPT09ZX0pKTp0aGlzW1VlXX19LHtrZXk6Qix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0RlXX19LHtrZXk6JCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzW0RlXS5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDp0aGlzW1ddKGUpfX0se2tleTpILHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXNbRGVdLmdldChlKSkpe28ubmV4dD00O2JyZWFrfXJldHVybiBvLm5leHQ9NCxyO2Nhc2UgNDpuPXkodGhpc1tVZV0pLG8ucHJldj01LG4ucygpO2Nhc2UgNzppZigoYT1uLm4oKSkuZG9uZSl7by5uZXh0PTE2O2JyZWFrfWlmKChpPWEudmFsdWUpW2dlXSE9PWUpe28ubmV4dD0xMjticmVha31yZXR1cm4gby5uZXh0PTEyLGk7Y2FzZSAxMjppZighdCl7by5uZXh0PTE0O2JyZWFrfXJldHVybiBvLmRlbGVnYXRlWWllbGQoaVtIXShlLHQpLCJ0MCIsMTQpO2Nhc2UgMTQ6by5uZXh0PTc7YnJlYWs7Y2FzZSAxNjpvLm5leHQ9MjE7YnJlYWs7Y2FzZSAxODpvLnByZXY9MTgsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDIxOnJldHVybiBvLnByZXY9MjEsbi5mKCksby5maW5pc2goMjEpO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE4LDIxLDI0XV0pfSkpfSx7a2V5OkQsdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk7cmV0dXJuIHYoKS53cmFwKChmdW5jdGlvbihvKXtmb3IoOzspc3dpdGNoKG8ucHJldj1vLm5leHQpe2Nhc2UgMDppZighKHI9dGhpc1tEZV0uZ2V0KGUpKXx8dCYmcltFXSl7by5uZXh0PTQ7YnJlYWt9cmV0dXJuIG8ubmV4dD00LHI7Y2FzZSA0Om49eSh0aGlzW1VlXSksby5wcmV2PTUsbi5zKCk7Y2FzZSA3OmlmKChhPW4ubigpKS5kb25lKXtvLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGk9YS52YWx1ZSxvLmRlbGVnYXRlWWllbGQoaVtEXShlLHQpLCJ0MCIsMTApO2Nhc2UgMTA6by5uZXh0PTc7YnJlYWs7Y2FzZSAxMjpvLm5leHQ9MTc7YnJlYWs7Y2FzZSAxNDpvLnByZXY9MTQsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDE3OnJldHVybiBvLnByZXY9MTcsbi5mKCksby5maW5pc2goMTcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE0LDE3LDIwXV0pfSkpfSx7a2V5OnosdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGksbztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmE9eSh0aGlzW1VlXSksZS5wcmV2PTEsYS5zKCk7Y2FzZSAzOmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTI7YnJlYWt9aWYoKG89aS52YWx1ZSlbZ2VdIT09dHx8biYmb1tFXSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD04LG87Y2FzZSA4OmlmKCFyKXtlLm5leHQ9MTA7YnJlYWt9cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChvW3pdKHQscixuKSwidDAiLDEwKTtjYXNlIDEwOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTI6ZS5uZXh0PTE3O2JyZWFrO2Nhc2UgMTQ6ZS5wcmV2PTE0LGUudDE9ZS5jYXRjaCgxKSxhLmUoZS50MSk7Y2FzZSAxNzpyZXR1cm4gZS5wcmV2PTE3LGEuZigpLGUuZmluaXNoKDE3KTtjYXNlIDIwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNCwxNywyMF1dKX0pKX0se2tleTpvZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpc1tYZV0/MD09PXRoaXNbVWVdLmxlbmd0aHx8dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ6dGhpc1tYZV19fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXNbWGVdPzA9PT10aGlzW1VlXS5sZW5ndGg/dGhpc1tqXS50cmltKCk6dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/dGhpc1tVZV1bMF1bRWVdKCkudHJpbSgpOm51bGw6dGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6Xyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW3BlXSksdGhpc1tqXSYmKHQuJGNvbnRlbnQ9dGhpc1tqXSksdC4kbmFtZT10aGlzW2dlXSx0LmNoaWxkcmVuPVtdO3ZhciByLG49eSh0aGlzW1VlXSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO3QuY2hpbGRyZW4ucHVzaChhW19dKGUpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dC5hdHRyaWJ1dGVzPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIGksbz15KHRoaXNbRGVdKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPXUoaS52YWx1ZSwyKSxjPXNbMF0sbD1zWzFdO3QuYXR0cmlidXRlc1tjXT1sW2pdfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdH19XSkscn0ocnQpO3QuWG1sT2JqZWN0PWl0O3ZhciBvdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHcodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLG4pKVtqXT0iIixhfXJldHVybiBTKHIsW3trZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe319XSkscn0ocnQpO3QuQ29udGVudE9iamVjdD1vdDt2YXIgc3Q9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHcodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlLG4pKVtZZV09YSxpfXJldHVybiBTKHIsW3trZXk6Uix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpc1tqXT0oMCxuLmdldEtleXdvcmQpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbWWVdWzBdLHZhbGlkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlW1llXS5pbmNsdWRlcyh0KX19KX19LHtrZXk6Rix2YWx1ZTpmdW5jdGlvbihlKXtjKHAoci5wcm90b3R5cGUpLEYsdGhpcykuY2FsbCh0aGlzLGUpLGRlbGV0ZSB0aGlzW1llXX19XSkscn0ob3QpO3QuT3B0aW9uT2JqZWN0PXN0O3ZhciBjdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHcodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUyhyLFt7a2V5OlIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2pdPXRoaXNbal0udHJpbSgpfX1dKSxyfShvdCk7dC5TdHJpbmdPYmplY3Q9Y3Q7dmFyIHV0PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSl7dmFyIG87cmV0dXJuIHcodGhpcyxyKSwobz10LmNhbGwodGhpcyxlLG4pKVtIZV09YSxvW1FlXT1pLG99cmV0dXJuIFMocixbe2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tqXT0oMCxuLmdldEludGVnZXIpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbSGVdLHZhbGlkYXRlOnRoaXNbUWVdfSl9fSx7a2V5OkYsdmFsdWU6ZnVuY3Rpb24oZSl7YyhwKHIucHJvdG90eXBlKSxGLHRoaXMpLmNhbGwodGhpcyxlKSxkZWxldGUgdGhpc1tIZV0sZGVsZXRlIHRoaXNbUWVdfX1dKSxyfShvdCk7dC5JbnRlZ2VyT2JqZWN0PXV0O3ZhciBsdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7cmV0dXJuIHcodGhpcyxyKSx0LmNhbGwodGhpcyxlLG4sMCwoZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfSkpfXJldHVybiBTKHIpfSh1dCk7dC5PcHRpb24wMT1sdDt2YXIgZnQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiB3KHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLDEsKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZX0pKX1yZXR1cm4gUyhyKX0odXQpO3QuT3B0aW9uMTA9ZnR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkhUTUxSZXN1bHQ9dm9pZCAwLHQuZ2V0QkJveD1mdW5jdGlvbihlKXt2YXIgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgcj1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSwiLTEiKX0pKTtpZihyLmxlbmd0aDw0fHxyWzJdPDB8fHJbM108MClyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgbj1vKHIsNCk7cmV0dXJue3g6blswXSx5Om5bMV0sd2lkdGg6blsyXSxoZWlnaHQ6blszXX19LHQuZ2V0Q29sb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9byhhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WzAsMCwwXSwzKSxyPXRbMF0sbj10WzFdLGE9dFsyXTtpZighZSlyZXR1cm57cixnOm4sYjphfTt2YXIgaT1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KDAscGFyc2VJbnQoZS50cmltKCksMTApKSwyNTUpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpPzA6ZX0pKTtpZihpLmxlbmd0aDwzKXJldHVybntyLGc6bixiOmF9O3ZhciBzPW8oaSwzKTtyZXR1cm57cjpyPXNbMF0sZzpuPXNbMV0sYjphPXNbMl19fSx0LmdldEZsb2F0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKGEpJiZuKGEpP2E6cn0sdC5nZXRJbnRlZ2VyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlSW50KHQsMTApO3JldHVybiFpc05hTihhKSYmbihhKT9hOnJ9LHQuZ2V0S2V5d29yZD1sLHQuZ2V0TWVhc3VyZW1lbnQ9Zix0LmdldFJhdGlvPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybntudW06MSxkZW46MX07dmFyIHQ9ZS50cmltKCkuc3BsaXQoL1xzKjpccyovKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUZsb2F0KGUpfSkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKGUpfSkpO2lmKDE9PT10Lmxlbmd0aCYmdC5wdXNoKDEpLDA9PT10Lmxlbmd0aClyZXR1cm57bnVtOjEsZGVuOjF9O3ZhciByPW8odCwyKTtyZXR1cm57bnVtOnJbMF0sZGVuOnJbMV19fSx0LmdldFJlbGV2YW50PWZ1bmN0aW9uKGUpe3JldHVybiBlP2UudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntleGNsdWRlZDoiLSI9PT1lWzBdLHZpZXduYW1lOmUuc3Vic3RyaW5nKDEpfX0pKTpbXX0sdC5nZXRTdHJpbmdPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0WzBdLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmluY2x1ZGVzKGUpfX0pfSx0LnN0cmlwUXVvdGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJyk/ZS5zbGljZSgxLGUubGVuZ3RoLTEpOmV9O3ZhciBhPXIoMik7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgYz17cHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNtOmZ1bmN0aW9uKGUpe3JldHVybiBlLzIuNTQqNzJ9LG1tOmZ1bmN0aW9uKGUpe3JldHVybiBlLzI1LjQqNzJ9LGluOmZ1bmN0aW9uKGUpe3JldHVybiA3MiplfSxweDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LHU9LyhbKy1dP1xkK1wuP1xkKikoLiopLztmdW5jdGlvbiBsKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtyZXR1cm4gdCYmbih0PXQudHJpbSgpKT90OnJ9ZnVuY3Rpb24gZihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IjAiO2lmKHQ9dHx8IjAiLCFlKXJldHVybiBmKHQpO3ZhciByPWUudHJpbSgpLm1hdGNoKHUpO2lmKCFyKXJldHVybiBmKHQpO3ZhciBuPW8ociwzKSxhPW5bMV0saT1uWzJdLHM9cGFyc2VGbG9hdChhKTtpZihpc05hTihzKSlyZXR1cm4gZih0KTtpZigwPT09cylyZXR1cm4gMDt2YXIgbD1jW2ldO3JldHVybiBsP2wocyk6c312YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zdWNjZXNzPXQsdGhpcy5odG1sPXIsdGhpcy5iYm94PW4sdGhpcy5icmVha05vZGU9YX12YXIgdCxyLG47cmV0dXJuIHQ9ZSxuPVt7a2V5OiJGQUlMVVJFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRkFJTFVSRSIsbmV3IGUoITEsbnVsbCxudWxsLG51bGwpKX19LHtrZXk6IkVNUFRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRU1QVFkiLG5ldyBlKCEwLG51bGwsbnVsbCxudWxsKSl9fSx7a2V5OiJicmVha05vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSghMSxudWxsLG51bGwsdCl9fSx7a2V5OiJzdWNjZXNzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUoITAsdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxudWxsKX19XSwocj1be2tleToiaXNCcmVhayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYnJlYWtOb2RlfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxuJiZpKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkhUTUxSZXN1bHQ9aH0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VJZHM9dC4kYnVpbGRYRkFPYmplY3Q9dm9pZCAwO3ZhciByPVN5bWJvbCgpO3QuJGJ1aWxkWEZBT2JqZWN0PXIsdC5OYW1lc3BhY2VJZHM9e2NvbmZpZzp7aWQ6MCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hjaS8iKX19LGNvbm5lY3Rpb25TZXQ6e2lkOjEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9fSxkYXRhc2V0czp7aWQ6MixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLyIpfX0sZm9ybTp7aWQ6MyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1mb3JtLyIpfX0sbG9jYWxlU2V0OntpZDo0LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9fSxwZGY6e2lkOjUsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi8iPT09ZX19LHNpZ25hdHVyZTp7aWQ6NixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI9PT1lfX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXNvdXJjZS1zZXQvIil9fSxzdHlsZXNoZWV0OntpZDo4LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPT09ZX19LHRlbXBsYXRlOntpZDo5LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXRlbXBsYXRlLyIpfX0seGRjOntpZDoxMCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX19LHhkcDp7aWQ6MTEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyI9PT1lfX0seGZkZjp7aWQ6MTIsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGZkZi8iPT09ZX19LHhodG1sOntpZDoxMyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfX0seG1wbWV0YTp7aWQ6MTQsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS8iPT09ZX19fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZURhdGFOb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT15KHIpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3BlcmF0b3I9PT1kLmRvdERvdH0pKSlyZXR1cm4gbnVsbDt2YXIgbz1wLmdldChhWzBdLm5hbWUpLHM9MDtvPyhlPW8oZSx0KSxzPTEpOmU9dHx8ZTtmb3IodmFyIGM9YS5sZW5ndGg7czxjO3MrKyl7dmFyIHU9YVtzXSxsPXUubmFtZSxmPXUub3BlcmF0b3IsaD11LmluZGV4O2lmKCFpc0Zpbml0ZShoKSlyZXR1cm4gYVtzXS5pbmRleD0wLG0oZSxhLnNsaWNlKHMpKTt2YXIgZz12b2lkIDA7c3dpdGNoKGYpe2Nhc2UgZC5kb3Q6Zz1lW24uJGdldENoaWxkcmVuQnlOYW1lXShsLCExKTticmVhaztjYXNlIGQuZG90RG90Omc9ZVtuLiRnZXRDaGlsZHJlbkJ5TmFtZV0obCwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6Zz0oZz1lW24uJGdldENoaWxkcmVuQnlDbGFzc10obCkpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P2cuY2hpbGRyZW46W2ddfWlmKDA9PT1nLmxlbmd0aClyZXR1cm4gbShlLGEuc2xpY2UocykpO2lmKCEoaDxnLmxlbmd0aCkpcmV0dXJuIGFbc10uaW5kZXg9aC1nLmxlbmd0aCxtKGUsYS5zbGljZShzKSk7dmFyIHY9Z1toXTtpZighKHYgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gQ2Fubm90IGNyZWF0ZSBhIG5vZGUuIiksbnVsbDtlPXZ9cmV0dXJuIG51bGx9LHQuc2VhcmNoTm9kZT1mdW5jdGlvbihlLHQscil7dmFyIGE9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxpPXkociwhKGFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYyx1PXAuZ2V0KGlbMF0ubmFtZSksbD0wO3U/KGM9ITAsZT1bdShlLHQpXSxsPTEpOihjPW51bGw9PT10LGU9W3R8fGVdKTtmb3IodmFyIGY9ZnVuY3Rpb24ocil7dmFyIHMsdT1pW2xdLGY9dS5uYW1lLGg9dS5jYWNoZU5hbWUscD11Lm9wZXJhdG9yLHY9dS5pbmRleCx5PVtdLG09byhlKTt0cnl7Zm9yKG0ucygpOyEocz1tLm4oKSkuZG9uZTspe3ZhciBiPXMudmFsdWU7aWYoYiBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXt2YXIgdz12b2lkIDAsaz12b2lkIDA7aWYoYSYmKChrPWcuZ2V0KGIpKXx8KGs9bmV3IE1hcCxnLnNldChiLGspKSx3PWsuZ2V0KGgpKSwhdyl7c3dpdGNoKHApe2Nhc2UgZC5kb3Q6dz1iW24uJGdldENoaWxkcmVuQnlOYW1lXShmLCExKTticmVhaztjYXNlIGQuZG90RG90Onc9YltuLiRnZXRDaGlsZHJlbkJ5TmFtZV0oZiwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6dz0odz1iW24uJGdldENoaWxkcmVuQnlDbGFzc10oZikpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P3cuY2hpbGRyZW46W3ddfWEmJmsuc2V0KGgsdyl9dy5sZW5ndGg+MCYmeS5wdXNoKHcpfX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9aWYoMD09PXkubGVuZ3RoJiYhYyYmMD09PWwpe3ZhciBTPXRbbi4kZ2V0UGFyZW50XSgpO3JldHVybih0PVMpPyhsPS0xLGU9W3RdLCJjb250aW51ZSIpOnt2Om51bGx9fWU9aXNGaW5pdGUodik/eS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2PGUubGVuZ3RofSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdl19KSk6eS5mbGF0KCl9LGg9aS5sZW5ndGg7bDxoO2wrKyl7dmFyIHY9ZigpO2lmKCJjb250aW51ZSIhPT12JiYib2JqZWN0Ij09PXModikpcmV0dXJuIHYudn1yZXR1cm4gMD09PWUubGVuZ3RoP251bGw6ZX07dmFyIG49cigyMDYpLGE9cigyMDgpLGk9cigyKTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gdShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2woZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGwoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgZj0vXlteLltdKy8saD0vXlteXF1dKy8sZD17ZG90OjAsZG90RG90OjEsZG90SGFzaDoyLGRvdEJyYWNrZXQ6Myxkb3RQYXJlbjo0fSxwPW5ldyBNYXAoW1siJGRhdGEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmV9XSxbIiRyZWNvcmQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW24uJGdldENoaWxkcmVuXSgpWzBdfV0sWyIkdGVtcGxhdGUiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGVtcGxhdGV9XSxbIiRjb25uZWN0aW9uU2V0IixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbm5lY3Rpb25TZXR9XSxbIiRmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmZvcm19XSxbIiRsYXlvdXQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGF5b3V0fV0sWyIkaG9zdCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ob3N0fV0sWyIkZGF0YVdpbmRvdyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kYXRhV2luZG93fV0sWyIkZXZlbnQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZXZlbnR9XSxbIiEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHN9XSxbIiR4ZmEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9XSxbInhmYSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX1dLFsiJCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH1dXSksZz1uZXcgV2Vha01hcCx2PWEuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2Z1bmN0aW9uIHkoZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLG49ZS5tYXRjaChmKTtpZighbilyZXR1cm4gbnVsbDtmb3IodmFyIGEsbz1jKG4sMSlbMF0scz1be25hbWU6byxjYWNoZU5hbWU6Ii4iK28saW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGwsb3BlcmF0b3I6ZC5kb3R9XSx1PW8ubGVuZ3RoO3U8ZS5sZW5ndGg7KXt2YXIgbD11O2lmKCJbIiE9PWUuY2hhckF0KHUrKykpe3ZhciBwPXZvaWQgMDtzd2l0Y2goZS5jaGFyQXQodSkpe2Nhc2UiLiI6aWYoIXQpcmV0dXJuIG51bGw7dSsrLHA9ZC5kb3REb3Q7YnJlYWs7Y2FzZSIjIjp1KysscD1kLmRvdEhhc2g7YnJlYWs7Y2FzZSJbIjppZihyKXJldHVybigwLGkud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuIiksbnVsbDtwPWQuZG90QnJhY2tldDticmVhaztjYXNlIigiOmlmKHIpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBKYXZhU2NyaXB0IHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpLG51bGw7cD1kLmRvdFBhcmVuO2JyZWFrO2RlZmF1bHQ6cD1kLmRvdH1pZighKG49ZS5zbGljZSh1KS5tYXRjaChmKSkpYnJlYWs7dSs9KG89YyhuLDEpWzBdKS5sZW5ndGgscy5wdXNoKHtuYW1lOm8sY2FjaGVOYW1lOmUuc2xpY2UobCx1KSxvcGVyYXRvcjpwLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsfSl9ZWxzZXtpZighKG49ZS5zbGljZSh1KS5tYXRjaChoKSkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpLG51bGw7cy5hdCgtMSkuaW5kZXg9IioiPT09KGE9KGE9blswXSkudHJpbSgpKT8xLzA6cGFyc2VJbnQoYSwxMCl8fDAsdSs9blswXS5sZW5ndGgrMX19cmV0dXJuIHN9ZnVuY3Rpb24gbShlLHQpe3ZhciByLGE9bnVsbCxpPW8odCk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXtmb3IodmFyIHM9ci52YWx1ZSxjPXMubmFtZSx1PXMuaW5kZXgsbD0wLGY9aXNGaW5pdGUodSk/dTowO2w8PWY7bCsrKXt2YXIgaD1lW24uJG5hbWVzcGFjZUlkXT09PXY/LTE6ZVtuLiRuYW1lc3BhY2VJZF07YT1uZXcgbi5YbWxPYmplY3QoaCxjKSxlW24uJGFwcGVuZENoaWxkXShhKX1lPWF9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpbmRlcj12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTEpLGk9cigyMDkpLG89cigyMDgpLHM9cigyKTtmdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZihlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZihlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gaChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2goZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHA9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gZyhlKXt2YXIgdD1uZXcgYS5UZXh0KHt9KTtyZXR1cm4gdFtuLiRjb250ZW50XT1lLHR9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucm9vdD10LHRoaXMuZGF0YXNldHM9dC5kYXRhc2V0cyx0LmRhdGFzZXRzJiZ0LmRhdGFzZXRzLmRhdGE/dGhpcy5kYXRhPXQuZGF0YXNldHMuZGF0YTp0aGlzLmRhdGE9bmV3IG4uWG1sT2JqZWN0KG8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkLCJkYXRhIiksdGhpcy5lbXB0eU1lcmdlPTA9PT10aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCkubGVuZ3RoLHRoaXMucm9vdC5mb3JtPXRoaXMuZm9ybT10LnRlbXBsYXRlW24uJGNsb25lXSgpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX2lzQ29uc3VtZURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHlNZXJnZSYmdGhpcy5fbWVyZ2VNb2RlfX0se2tleToiX2lzTWF0Y2hUZW1wbGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faXNDb25zdW1lRGF0YSgpfX0se2tleToiYmluZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmluZEVsZW1lbnQodGhpcy5mb3JtLHRoaXMuZGF0YSksdGhpcy5mb3JtfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0se2tleToiX2JpbmRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKGVbbi4kZGF0YV09dCxlW24uJGhhc1NldHRhYmxlVmFsdWVdKCkpaWYodFtuLiRpc0RhdGFWYWx1ZV0oKSl7dmFyIGk9dFtuLiRnZXREYXRhVmFsdWVdKCk7ZVtuLiRzZXRWYWx1ZV0oZyhpKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgYS5GaWVsZCYmZS51aSYmZS51aS5jaG9pY2VMaXN0JiYibXVsdGlTZWxlY3QiPT09ZS51aS5jaG9pY2VMaXN0Lm9wZW4pe3ZhciBvPXRbbi4kZ2V0Q2hpbGRyZW5dKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRjb250ZW50XS50cmltKCl9KSkuam9pbigiXG4iKTtlW24uJHNldFZhbHVlXShnKG8pKX1lbHNlIHRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKDAscy53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpO2Vsc2UhdFtuLiRpc0RhdGFWYWx1ZV0oKXx8dGhpcy5faXNNYXRjaFRlbXBsYXRlKCk/dGhpcy5fYmluZEVsZW1lbnQoZSx0KTooMCxzLndhcm4pKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIil9fSx7a2V5OiJfZmluZERhdGFCeU5hbWVUb0NvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybiBudWxsO2Zvcih2YXIgaSxzLGM9MDtjPDM7YysrKXtmb3IoaT1yW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCExLCEwKTtzPWkubmV4dCgpLnZhbHVlOylpZih0PT09c1tuLiRpc0RhdGFWYWx1ZV0oKSlyZXR1cm4gcztpZihyW24uJG5hbWVzcGFjZUlkXT09PW8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkJiYiZGF0YSI9PT1yW24uJG5vZGVOYW1lXSlicmVhaztyPXJbbi4kZ2V0UGFyZW50XSgpfXJldHVybiBhJiYoKHM9KGk9dGhpcy5kYXRhW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCEwLCExKSkubmV4dCgpLnZhbHVlKXx8KHM9KGk9dGhpcy5kYXRhW24uJGdldEF0dHJpYnV0ZUl0XShlLCEwKSkubmV4dCgpLnZhbHVlKSYmc1tuLiRpc0RhdGFWYWx1ZV0oKSk/czpudWxsfX0se2tleToiX3NldFByb3BlcnRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoZS5oYXNPd25Qcm9wZXJ0eSgic2V0UHJvcGVydHkiKSl7dmFyIHIsbz1sKGUuc2V0UHJvcGVydHkuY2hpbGRyZW4pO3RyeXtmb3Ioby5zKCk7IShyPW8ubigpKS5kb25lOyl7dmFyIGM9ci52YWx1ZSxmPWMucmVmLGg9Yy50YXJnZXQ7aWYoIWMuY29ubmVjdGlvbiYmZil7dmFyIGQ9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxmLCExLCExKTtpZihkKXt2YXIgcD11KGQsMSlbMF07aWYocFtuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YSkpe3ZhciBnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LGUsaCwhMSwhMSk7aWYoZyl7dmFyIHY9dShnLDEpWzBdO2lmKHZbbi4kaXNEZXNjZW5kZW50XShlKSl7dmFyIHk9dltuLiRnZXRQYXJlbnRdKCk7aWYodiBpbnN0YW5jZW9mIGEuU2V0UHJvcGVydHl8fHkgaW5zdGFuY2VvZiBhLlNldFByb3BlcnR5KSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBzZXRQcm9wZXJ0eSBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuIik7ZWxzZSBpZih2IGluc3RhbmNlb2YgYS5CaW5kSXRlbXN8fHkgaW5zdGFuY2VvZiBhLkJpbmRJdGVtcykoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtlbHNle3ZhciBtPXBbbi4kdGV4dF0oKSxiPXZbbi4kbm9kZU5hbWVdO2lmKHYgaW5zdGFuY2VvZiBuLlhGQUF0dHJpYnV0ZSl7dmFyIHc9T2JqZWN0LmNyZWF0ZShudWxsKTt3W2JdPW07dmFyIGs9UmVmbGVjdC5jb25zdHJ1Y3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKHkpLmNvbnN0cnVjdG9yLFt3XSk7eVtiXT1rW2JdfWVsc2Ugdi5oYXNPd25Qcm9wZXJ0eShuLiRjb250ZW50KT8odltuLiRkYXRhXT1wLHZbbi4kY29udGVudF09bSx2W24uJGZpbmFsaXplXSgpKTooMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIG5vZGUgdG8gdXNlIGluIHNldFByb3BlcnR5Iil9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogIi5jb25jYXQoaCwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlOiBtdXN0IGJlIGEgZGF0YSBub2RlLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoZiwiLiIpKX19fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfX19fSx7a2V5OiJfYmluZEl0ZW1zIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUuaGFzT3duUHJvcGVydHkoIml0ZW1zIikmJmUuaGFzT3duUHJvcGVydHkoImJpbmRJdGVtcyIpJiYhZS5iaW5kSXRlbXMuaXNFbXB0eSgpKXt2YXIgcixvPWwoZS5pdGVtcy5jaGlsZHJlbik7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlO2Vbbi4kcmVtb3ZlQ2hpbGRdKGMpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1lLml0ZW1zLmNsZWFyKCk7dmFyIGY9bmV3IGEuSXRlbXMoe30pLGg9bmV3IGEuSXRlbXMoe30pO2Vbbi4kYXBwZW5kQ2hpbGRdKGYpLGUuaXRlbXMucHVzaChmKSxlW24uJGFwcGVuZENoaWxkXShoKSxlLml0ZW1zLnB1c2goaCk7dmFyIGQscD1sKGUuYmluZEl0ZW1zLmNoaWxkcmVuKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LnJlZixtPXYubGFiZWxSZWYsYj12LnZhbHVlUmVmO2lmKCF2LmNvbm5lY3Rpb24mJnkpe3ZhciB3PSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQseSwhMSwhMSk7aWYodyl7dmFyIGssUz1sKHcpO3RyeXtmb3IoUy5zKCk7IShrPVMubigpKS5kb25lOyl7dmFyIHg9ay52YWx1ZTtpZih4W24uJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpe3ZhciBPPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHgsbSwhMCwhMSk7aWYoTyl7dmFyIEE9dShPLDEpWzBdO2lmKEFbbi4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7dmFyIEM9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QseCxiLCEwLCExKTtpZihDKXt2YXIgRj11KEMsMSlbMF07aWYoRltuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXt2YXIgUD1nKEFbbi4kdGV4dF0oKSksVD1nKEZbbi4kdGV4dF0oKSk7ZltuLiRhcHBlbmRDaGlsZF0oUCksZi50ZXh0LnB1c2goUCksaFtuLiRhcHBlbmRDaGlsZF0oVCksaC50ZXh0LnB1c2goVCl9ZWxzZSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCB2YWx1ZTogIi5jb25jYXQoYiwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBsYWJlbDogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIGxhYmVsOiAiLmNvbmNhdChtLCIuIikpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZiAoIi5jb25jYXQoeSwiKTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpKX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoeSwiLiIpKX19fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfX19fSx7a2V5OiJfYmluZE9jY3VycmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE7aWYodC5sZW5ndGg+MSYmKChhPWVbbi4kY2xvbmVdKCkpW24uJHJlbW92ZUNoaWxkXShhLm9jY3VyKSxhLm9jY3VyPW51bGwpLHRoaXMuX2JpbmRWYWx1ZShlLHRbMF0sciksdGhpcy5fc2V0UHJvcGVydGllcyhlLHRbMF0pLHRoaXMuX2JpbmRJdGVtcyhlLHRbMF0pLDEhPT10Lmxlbmd0aClmb3IodmFyIGk9ZVtuLiRnZXRQYXJlbnRdKCksbz1lW24uJG5vZGVOYW1lXSxzPWlbbi4kaW5kZXhPZl0oZSksYz0xLHU9dC5sZW5ndGg7Yzx1O2MrKyl7dmFyIGw9dFtjXSxmPWFbbi4kY2xvbmVdKCk7aVtvXS5wdXNoKGYpLGlbbi4kaW5zZXJ0QXRdKHMrYyxmKSx0aGlzLl9iaW5kVmFsdWUoZixsLHIpLHRoaXMuX3NldFByb3BlcnRpZXMoZixsKSx0aGlzLl9iaW5kSXRlbXMoZixsKX19fSx7a2V5OiJfY3JlYXRlT2NjdXJyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZW1wdHlNZXJnZSl7dmFyIHQ9ZS5vY2N1cjtpZih0JiYhKHQuaW5pdGlhbDw9MSkpe3ZhciByPWVbbi4kZ2V0UGFyZW50XSgpLGE9ZVtuLiRub2RlTmFtZV07aWYoclthXWluc3RhbmNlb2Ygbi5YRkFPYmplY3RBcnJheSl7dmFyIGk7aT1lLm5hbWU/clthXS5jaGlsZHJlbi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWU9PT1lLm5hbWV9KSkubGVuZ3RoOnJbYV0uY2hpbGRyZW4ubGVuZ3RoO3ZhciBvPXJbbi4kaW5kZXhPZl0oZSkrMSxzPXQuaW5pdGlhbC1pO2lmKHMpe3ZhciBjPWVbbi4kY2xvbmVdKCk7Y1tuLiRyZW1vdmVDaGlsZF0oYy5vY2N1ciksYy5vY2N1cj1udWxsLHJbYV0ucHVzaChjKSxyW24uJGluc2VydEF0XShvLGMpO2Zvcih2YXIgdT0xO3U8czt1Kyspe3ZhciBsPWNbbi4kY2xvbmVdKCk7clthXS5wdXNoKGwpLHJbbi4kaW5zZXJ0QXRdKG8rdSxsKX19fX19fX0se2tleToiX2dldE9jY3VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLHI9ZS5vY2N1cjtpZighcnx8IXQpcmV0dXJuWzEsMV07dmFyIG49LTE9PT1yLm1heD8xLzA6ci5tYXg7cmV0dXJuW3IubWluLG5dfX0se2tleToiX3NldEFuZEJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc2V0UHJvcGVydGllcyhlLHQpLHRoaXMuX2JpbmRJdGVtcyhlLHQpLHRoaXMuX2JpbmRFbGVtZW50KGUsdCl9fSx7a2V5OiJfYmluZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7dmFyIGEsbz1sKGVbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioby5zKCk7IShhPW8ubigpKS5kb25lOyl7dmFyIGM9YS52YWx1ZTtpZighY1tuLiRkYXRhXSlpZih2b2lkIDAhPT10aGlzLl9tZXJnZU1vZGV8fCJzdWJmb3JtIiE9PWNbbi4kbm9kZU5hbWVdKXtpZihjW24uJGlzQmluZGFibGVdKCkpe3ZhciBmPSExLGg9bnVsbCxkPW51bGwsZz1udWxsO2lmKGMuYmluZCl7c3dpdGNoKGMuYmluZC5tYXRjaCl7Y2FzZSJub25lIjp0aGlzLl9zZXRBbmRCaW5kKGMsdCk7Y29udGludWU7Y2FzZSJnbG9iYWwiOmY9ITA7YnJlYWs7Y2FzZSJkYXRhUmVmIjppZighYy5iaW5kLnJlZil7KDAscy53YXJuKSgiWEZBIC0gcmVmIGlzIGVtcHR5IGluIG5vZGUgIi5jb25jYXQoY1tuLiRub2RlTmFtZV0sIi4iKSksdGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWQ9Yy5iaW5kLnJlZn1jLmJpbmQucGljdHVyZSYmKGg9Yy5iaW5kLnBpY3R1cmVbbi4kY29udGVudF0pfXZhciB2PXUodGhpcy5fZ2V0T2NjdXJJbmZvKGMpLDIpLHk9dlswXSxtPXZbMV07aWYoZCl7aWYobnVsbD09PShnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsZCwhMCwhMSkpKXtpZighKGc9KDAsaS5jcmVhdGVEYXRhTm9kZSkodGhpcy5kYXRhLHQsZCkpKWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKGdbbi4kY29uc3VtZWRdPSEwKSx0aGlzLl9zZXRBbmRCaW5kKGMsZyk7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYoZz1nLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWVbbi4kY29uc3VtZWRdfSkpKSxnLmxlbmd0aD5tP2c9Zy5zbGljZSgwLG0pOjA9PT1nLmxlbmd0aCYmKGc9bnVsbCksZyYmdGhpcy5faXNDb25zdW1lRGF0YSgpJiZnLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Vbbi4kY29uc3VtZWRdPSEwfSkpfWVsc2V7aWYoIWMubmFtZSl7dGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWlmKHRoaXMuX2lzQ29uc3VtZURhdGEoKSl7Zm9yKHZhciBiPVtdO2IubGVuZ3RoPG07KXt2YXIgdz10aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShjLm5hbWUsY1tuLiRoYXNTZXR0YWJsZVZhbHVlXSgpLHQsZik7aWYoIXcpYnJlYWs7d1tuLiRjb25zdW1lZF09ITAsYi5wdXNoKHcpfWc9Yi5sZW5ndGg+MD9iOm51bGx9ZWxzZXtpZighKGc9dFtuLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oYy5uYW1lLCExLHRoaXMuZW1wdHlNZXJnZSkubmV4dCgpLnZhbHVlKSl7aWYoMD09PXkpe3IucHVzaChjKTtjb250aW51ZX12YXIgaz10W24uJG5hbWVzcGFjZUlkXT09PXA/LTE6dFtuLiRuYW1lc3BhY2VJZF07Zz1jW24uJGRhdGFdPW5ldyBuLlhtbE9iamVjdChrLGMubmFtZSksdGhpcy5lbXB0eU1lcmdlJiYoZ1tuLiRjb25zdW1lZF09ITApLHRbbi4kYXBwZW5kQ2hpbGRdKGcpLHRoaXMuX3NldEFuZEJpbmQoYyxnKTtjb250aW51ZX10aGlzLmVtcHR5TWVyZ2UmJihnW24uJGNvbnN1bWVkXT0hMCksZz1bZ119fWc/dGhpcy5fYmluZE9jY3VycmVuY2VzKGMsZyxoKTp5PjA/dGhpcy5fc2V0QW5kQmluZChjLHQpOnIucHVzaChjKX19ZWxzZXt0aGlzLl9tZXJnZU1vZGU9ImNvbnN1bWVEYXRhIj09PWMubWVyZ2VNb2RlO3ZhciBTPXRbbi4kZ2V0Q2hpbGRyZW5dKCk7aWYoUy5sZW5ndGg+MCl0aGlzLl9iaW5kT2NjdXJyZW5jZXMoYyxbU1swXV0sbnVsbCk7ZWxzZSBpZih0aGlzLmVtcHR5TWVyZ2Upe3ZhciB4PXRbbi4kbmFtZXNwYWNlSWRdPT09cD8tMTp0W24uJG5hbWVzcGFjZUlkXSxPPWNbbi4kZGF0YV09bmV3IG4uWG1sT2JqZWN0KHgsYy5uYW1lfHwicm9vdCIpO3Rbbi4kYXBwZW5kQ2hpbGRdKE8pLHRoaXMuX2JpbmRFbGVtZW50KGMsTyl9fX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9ci5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRnZXRQYXJlbnRdKClbbi4kcmVtb3ZlQ2hpbGRdKGUpfSkpfX1dKSYmZCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQmluZGVyPXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5WYWx1ZT10LlRleHQ9dC5UZW1wbGF0ZU5hbWVzcGFjZT10LlRlbXBsYXRlPXQuU2V0UHJvcGVydHk9dC5JdGVtcz10LkZpZWxkPXQuQmluZEl0ZW1zPXZvaWQgMDt2YXIgbj1yKDIwNiksYT1yKDIwOCksaT1yKDIxMiksbz1yKDIxMykscz1yKDIwNyksYz1yKDIpLHU9cigyMTQpLGw9cigxMzUpLGY9cigyMDkpO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGgoZSl9ZnVuY3Rpb24gZCgpe3JldHVybiBkPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ayhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8QShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1oKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWgoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmIoZSx0KX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxiKGUsdCl9ZnVuY3Rpb24gdyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1rKGUpO2lmKHQpe3ZhciBhPWsodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gayhlKXtyZXR1cm4gaz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sayhlKX1mdW5jdGlvbiBTKCl7Uz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBmPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fXZhciB2PXt9O2ModixpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShQKFtdKSkpO20mJm0hPT10JiZyLmNhbGwobSxpKSYmKHY9bSk7dmFyIGI9Zy5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiB3KGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBrKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxmPXUudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1oKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1mKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1mKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxmO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxmO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGYpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZil9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBwLnByb3RvdHlwZT1nLG4oYiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLHAuZGlzcGxheU5hbWU9YyhnLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1wfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSxnKTooZS5fX3Byb3RvX189ZyxjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx3KGsucHJvdG90eXBlKSxjKGsucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPWssZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBrKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sdyhiKSxjKGIscywiR2VuZXJhdG9yIiksYyhiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyhiLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxmKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGZ9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxmfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxmfX0sZX12YXIgeD1TKCkubWFyayhMKTtmdW5jdGlvbiBPKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1BKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBBKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBDKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gQyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBGPWEuTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkLFA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixUPS9eSChcZCspJC8sST1uZXcgU2V0KFsiaW1hZ2UvZ2lmIiwiaW1hZ2UvanBlZyIsImltYWdlL2pwZyIsImltYWdlL3BqcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvYXBuZyIsImltYWdlL3gtcG5nIiwiaW1hZ2UvYm1wIiwiaW1hZ2UveC1tcy1ibXAiLCJpbWFnZS90aWZmIiwiaW1hZ2UvdGlmIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pLEU9W1tbNjYsNzddLCJpbWFnZS9ibXAiXSxbWzI1NSwyMTYsMjU1XSwiaW1hZ2UvanBlZyJdLFtbNzMsNzMsNDIsMF0sImltYWdlL3RpZmYiXSxbWzc3LDc3LDAsNDJdLCJpbWFnZS90aWZmIl0sW1s3MSw3Myw3MCw1Niw1Nyw5N10sImltYWdlL2dpZiJdLFtbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSwiaW1hZ2UvcG5nIl1dO2Z1bmN0aW9uIGooZSl7aWYoIWV8fCFlLmJvcmRlcilyZXR1cm57dzowLGg6MH07dmFyIHQ9ZS5ib3JkZXJbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/e3c6dC53aWR0aHNbMF0rdC53aWR0aHNbMl0rdC5pbnNldHNbMF0rdC5pbnNldHNbMl0saDp0LndpZHRoc1sxXSt0LndpZHRoc1szXSt0Lmluc2V0c1sxXSt0Lmluc2V0c1szXX06e3c6MCxoOjB9fWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGUubWFyZ2luJiYoZS5tYXJnaW4udG9wSW5zZXR8fGUubWFyZ2luLnJpZ2h0SW5zZXR8fGUubWFyZ2luLmJvdHRvbUluc2V0fHxlLm1hcmdpbi5sZWZ0SW5zZXQpfWZ1bmN0aW9uIF8oZSx0KXtpZighZS52YWx1ZSl7dmFyIHI9bmV3IFZ0KHt9KTtlW24uJGFwcGVuZENoaWxkXShyKSxlLnZhbHVlPXJ9ZS52YWx1ZVtuLiRzZXRWYWx1ZV0odCl9ZnVuY3Rpb24gTChlKXt2YXIgdCxyLGE7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihpKXtmb3IoOzspc3dpdGNoKGkucHJldj1pLm5leHQpe2Nhc2UgMDp0PU8oZVtuLiRnZXRDaGlsZHJlbl0oKSksaS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtpLm5leHQ9MTI7YnJlYWt9aWYoISgoYT1yLnZhbHVlKWluc3RhbmNlb2YgX3QpKXtpLm5leHQ9ODticmVha31yZXR1cm4gaS5kZWxlZ2F0ZVlpZWxkKGFbbi4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCksInQwIiw3KTtjYXNlIDc6cmV0dXJuIGkuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgODpyZXR1cm4gaS5uZXh0PTEwLGE7Y2FzZSAxMDppLm5leHQ9MzticmVhaztjYXNlIDEyOmkubmV4dD0xNzticmVhaztjYXNlIDE0OmkucHJldj0xNCxpLnQxPWkuY2F0Y2goMSksdC5lKGkudDEpO2Nhc2UgMTc6cmV0dXJuIGkucHJldj0xNyx0LmYoKSxpLmZpbmlzaCgxNyk7Y2FzZSAyMDpjYXNlImVuZCI6cmV0dXJuIGkuc3RvcCgpfX0pLHgsbnVsbCxbWzEsMTQsMTcsMjBdXSl9ZnVuY3Rpb24gUihlKXtyZXR1cm4gZS52YWxpZGF0ZSYmImVycm9yIj09PWUudmFsaWRhdGUubnVsbFRlc3R9ZnVuY3Rpb24gTihlKXtmb3IoO2U7KXtpZighZS50cmF2ZXJzYWwpcmV0dXJuIHZvaWQoZVtuLiR0YWJJbmRleF09ZVtuLiRnZXRQYXJlbnRdKClbbi4kdGFiSW5kZXhdKTtpZihlW24uJHRhYkluZGV4XSlyZXR1cm47dmFyIHQscj1udWxsLGE9TyhlLnRyYXZlcnNhbFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2lmKCJuZXh0Ij09PWkub3BlcmF0aW9uKXtyPWk7YnJlYWt9fX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1pZighcnx8IXIucmVmKXJldHVybiB2b2lkKGVbbi4kdGFiSW5kZXhdPWVbbi4kZ2V0UGFyZW50XSgpW24uJHRhYkluZGV4XSk7dmFyIG89ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCk7ZVtuLiR0YWJJbmRleF09KytvW24uJHRhYkluZGV4XTt2YXIgcz1vW24uJHNlYXJjaE5vZGVdKHIucmVmLGUpO2lmKCFzKXJldHVybjtlPXNbMF19fWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmFzc2lzdDtpZihyKXt2YXIgYT1yW24uJHRvSFRNTF0oKTthJiYodC50aXRsZT1hKTt2YXIgaT1yLnJvbGUubWF0Y2goVCk7aWYoaSl7dmFyIG89aVsxXTt0LnJvbGU9ImhlYWRpbmciLHRbImFyaWEtbGV2ZWwiXT1vfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle3ZhciBzPWVbbi4kZ2V0UGFyZW50XSgpOyJyb3ciPT09cy5sYXlvdXQmJihzLmFzc2lzdCYmIlRIIj09PXMuYXNzaXN0LnJvbGU/dC5yb2xlPSJjb2x1bW5oZWFkZXIiOnQucm9sZT0iY2VsbCIpfX1mdW5jdGlvbiBCKGUpe2lmKCFlLmFzc2lzdClyZXR1cm4gbnVsbDt2YXIgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrW24uJGNvbnRlbnRdP3Quc3BlYWtbbi4kY29udGVudF06dC50b29sVGlwP3QudG9vbFRpcFtuLiRjb250ZW50XTpudWxsfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOlt7bmFtZToic3BhbiIsYXR0cmlidXRlczp7c3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sdmFsdWU6ZX1dfSl9ZnVuY3Rpb24gJChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTtudWxsPT09dFtuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGUmJih0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT1lLHRbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCl9ZnVuY3Rpb24gWChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTt0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT09PWUmJih0W24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEpfWZ1bmN0aW9uIEgoZSl7aWYoZVtuLiRleHRyYV0pcmV0dXJuITE7aWYoZVtuLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSwiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7dmFyIHQ9ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCkscj1udWxsO2lmKGUudGFyZ2V0KXtpZighKHI9dFtuLiRzZWFyY2hOb2RlXShlLnRhcmdldCxlW24uJGdldFBhcmVudF0oKSkpKXJldHVybiExO3I9clswXX12YXIgYT10W24uJGV4dHJhXSxpPWEuY3VycmVudFBhZ2VBcmVhLG89YS5jdXJyZW50Q29udGVudEFyZWE7aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSlyZXR1cm4gciBpbnN0YW5jZW9mIGR0fHwocj1udWxsKSxlLnN0YXJ0TmV3PyhlW24uJGV4dHJhXS50YXJnZXQ9cnx8aSwhMCk6ISghcnx8cj09PWl8fChlW24uJGV4dHJhXS50YXJnZXQ9ciwwKSk7ciBpbnN0YW5jZW9mIHBlfHwocj1udWxsKTt2YXIgcyxjPXImJnJbbi4kZ2V0UGFyZW50XSgpLHU9YztpZihlLnN0YXJ0TmV3KWlmKHIpe3ZhciBsPWMuY29udGVudEFyZWEuY2hpbGRyZW4sZj1sLmluZGV4T2YobyksaD1sLmluZGV4T2Yocik7LTEhPT1mJiZmPGgmJih1PW51bGwpLHM9aC0xfWVsc2Ugcz1pLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yobyk7ZWxzZXtpZighcnx8cj09PW8pcmV0dXJuITE7cz1jLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YociktMSx1PWM9PT1pP251bGw6Y31yZXR1cm4gZVtuLiRleHRyYV0udGFyZ2V0PXUsZVtuLiRleHRyYV0uaW5kZXg9cywhMH1mdW5jdGlvbiBxKGUsdCxyKXt2YXIgYT1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxpPWFbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSxvPXRbbi4kZ2V0U3ViZm9ybVBhcmVudF07dFtuLiRnZXRTdWJmb3JtUGFyZW50XT1mdW5jdGlvbigpe3JldHVybiBlfSxhW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7dmFyIHM9dFtuLiR0b0hUTUxdKHIpO2Vbbi4kYWRkSFRNTF0ocy5odG1sLHMuYmJveCksYVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWksdFtuLiRnZXRTdWJmb3JtUGFyZW50XT1vfXZhciBHPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJhcHBlYXJhbmNlRmlsdGVyIikpLmlkPWUuaWR8fCIiLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImFyYyIsITApKS5jaXJjdWxhcj0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuY2lyY3VsYXIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaGFuZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4uc3RhcnRBbmdsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLnN0YXJ0QW5nbGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksbi5zd2VlcEFuZ2xlPSgwLHMuZ2V0RmxvYXQpKHtkYXRhOmUuc3dlZXBBbmdsZSxkZWZhdWx0VmFsdWU6MzYwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVkZ2U9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmVkZ2V8fG5ldyBBZSh7fSkscj10W24uJHRvU3R5bGVdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuZmlsbCYmInZpc2libGUiPT09dGhpcy5maWxsLnByZXNlbmNlP09iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbbi4kdG9TdHlsZV0oKSk6YS5maWxsPSJ0cmFuc3BhcmVudCIsYS5zdHJva2VXaWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykoInZpc2libGUiPT09dC5wcmVzZW5jZT90LnRoaWNrbmVzczowKSxhLnN0cm9rZT1yLmNvbG9yO3ZhciBpPXt4bWxuczpQLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9fTtpZigzNjA9PT10aGlzLnN3ZWVwQW5nbGUpZT17bmFtZToiZWxsaXBzZSIsYXR0cmlidXRlczp7eG1sbnM6UCxjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTphfX07ZWxzZXt2YXIgYz10aGlzLnN0YXJ0QW5nbGUqTWF0aC5QSS8xODAsdT10aGlzLnN3ZWVwQW5nbGUqTWF0aC5QSS8xODAsbD10aGlzLnN3ZWVwQW5nbGU+MTgwPzE6MCxmPTUwKigxK01hdGguY29zKGMpKSxoPTUwKigxLU1hdGguc2luKGMpKSxkPTUwKigxK01hdGguY29zKGMrdSkpLHA9NTAqKDEtTWF0aC5zaW4oYyt1KSk7ZT17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6UCxkOiJNICIuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIEEgNTAgNTAgMCAiKS5jb25jYXQobCwiIDAgIikuY29uY2F0KGQsIiAiKS5jb25jYXQocCksdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOmF9fSxPYmplY3QuYXNzaWduKGkse3ZpZXdCb3g6IjAgMCAxMDAgMTAwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfXZhciBnPXtuYW1lOiJzdmciLGNoaWxkcmVuOltlXSxhdHRyaWJ1dGVzOml9O3JldHVybiBNKHRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbZ119KTooZy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoZykpfX1dKSxyfShuLlhGQU9iamVjdCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiYXJlYSIsITApKS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9cCh0LDQpLGE9clswXSxpPXJbMV0sbz1yWzJdLHM9clszXTt0aGlzW24uJGV4dHJhXS53aWR0aD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS53aWR0aCxhK28pLHRoaXNbbi4kZXh0cmFdLmhlaWdodD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS5oZWlnaHQsaStzKSx0aGlzW24uJGV4dHJhXS5jaGlsZHJlbi5wdXNoKGUpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5hdmFpbGFibGVTcGFjZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywicG9zaXRpb24iKSxyPXtzdHlsZTp0LGlkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUFyZWEiXX07KDAsby5pc1ByaW50T25seSkodGhpcykmJnIuY2xhc3MucHVzaCgieGZhUHJpbnRPbmx5IiksdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSk7dmFyIGE9W107dGhpc1tuLiRleHRyYV09e2NoaWxkcmVuOmEsd2lkdGg6MCxoZWlnaHQ6MCxhdmFpbGFibGVTcGFjZTplfTt2YXIgaT10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwiZXhjbEdyb3VwIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSksaW5jbHVkZTohMH0pO2lmKCFpLnN1Y2Nlc3MpcmV0dXJuIGkuaXNCcmVhaygpP2k6KGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRSk7dC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpc1tuLiRleHRyYV0ud2lkdGgpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzW24uJGV4dHJhXS5oZWlnaHQpO3ZhciBjPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6cixjaGlsZHJlbjphfSx1PVt0aGlzLngsdGhpcy55LHRoaXNbbi4kZXh0cmFdLndpZHRoLHRoaXNbbi4kZXh0cmFdLmhlaWdodF07cmV0dXJuIGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuc3VjY2VzcyhjLHUpfX1dKSxyfShuLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYXNzaXN0IiwhMCkpLmlkPWUuaWR8fCIiLG4ucm9sZT1lLnJvbGV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNwZWFrPW51bGwsbi50b29sVGlwPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvb2xUaXAmJnRoaXMudG9vbFRpcFtuLiRjb250ZW50XT90aGlzLnRvb2xUaXBbbi4kY29udGVudF06bnVsbH19XSkscn0obi5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJhcmNvZGUiLCEwKSkuY2hhckVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS5jaGFyRW5jb2Rpbmc/ZS5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxuLmNoZWNrc3VtPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmNoZWNrc3VtLFsibm9uZSIsIjFtb2QxMCIsIjFtb2QxMF8xbW9kMTEiLCIybW9kMTAiLCJhdXRvIl0pLG4uZGF0YUNvbHVtbkNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhQ29sdW1uQ291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZGF0YUxlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YUxlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5kYXRhUHJlcD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhUHJlcCxbIm5vbmUiLCJmbGF0ZUNvbXByZXNzIl0pLG4uZGF0YVJvd0NvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhUm93Q291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZW5kQ2hhcj1lLmVuZENoYXJ8fCIiLG4uZXJyb3JDb3JyZWN0aW9uTGV2ZWw9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmVycm9yQ29ycmVjdGlvbkxldmVsLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9OH19KSxuLmlkPWUuaWR8fCIiLG4ubW9kdWxlSGVpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlSGVpZ2h0LCI1bW0iKSxuLm1vZHVsZVdpZHRoPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlV2lkdGgsIjAuMjVtbSIpLG4ucHJpbnRDaGVja0RpZ2l0PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wcmludENoZWNrRGlnaXQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4ucm93Q29sdW1uUmF0aW89KDAscy5nZXRSYXRpbykoZS5yb3dDb2x1bW5SYXRpbyksbi5zdGFydENoYXI9ZS5zdGFydENoYXJ8fCIiLG4udGV4dExvY2F0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRleHRMb2NhdGlvbixbImJlbG93IiwiYWJvdmUiLCJhYm92ZUVtYmVkZGVkIiwiYmVsb3dFbWJlZGRlZCIsIm5vbmUiXSksbi50cnVuY2F0ZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudHJ1bmNhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlP2UudHlwZS50b0xvd2VyQ2FzZSgpOiIiLFsiYXp0ZWMiLCJjb2RhYmFyIiwiY29kZTJvZjVpbmR1c3RyaWFsIiwiY29kZTJvZjVpbnRlcmxlYXZlZCIsImNvZGUyb2Y1bWF0cml4IiwiY29kZTJvZjVzdGFuZGFyZCIsImNvZGUzb2Y5IiwiY29kZTNvZjlleHRlbmRlZCIsImNvZGUxMSIsImNvZGU0OSIsImNvZGU5MyIsImNvZGUxMjgiLCJjb2RlMTI4YSIsImNvZGUxMjhiIiwiY29kZTEyOGMiLCJjb2RlMTI4c3NjYyIsImRhdGFtYXRyaXgiLCJlYW44IiwiZWFuOGFkZDIiLCJlYW44YWRkNSIsImVhbjEzIiwiZWFuMTNhZGQyIiwiZWFuMTNhZGQ1IiwiZWFuMTNwd2NkIiwiZmltIiwibG9nbWFycyIsIm1heGljb2RlIiwibXNpIiwicGRmNDE3IiwicGRmNDE3bWFjcm8iLCJwbGVzc2V5IiwicG9zdGF1c2N1c3QyIiwicG9zdGF1c2N1c3QzIiwicG9zdGF1c3JlcGx5cGFpZCIsInBvc3RhdXNzdGFuZGFyZCIsInBvc3R1a3JtNHNjYyIsInBvc3R1c2RwYmMiLCJwb3N0dXNpbWIiLCJwb3N0dXNzdGFuZGFyZCIsInBvc3R1czV6aXAiLCJxcmNvZGUiLCJyZmlkIiwicnNzMTQiLCJyc3MxNGV4cGFuZGVkIiwicnNzMTRsaW1pdGVkIiwicnNzMTRzdGFja2VkIiwicnNzMTRzdGFja2Vkb21uaSIsInJzczE0dHJ1bmNhdGVkIiwidGVsZXBlbiIsInVjYzEyOCIsInVjYzEyOHJhbmRvbSIsInVjYzEyOHNzY2MiLCJ1cGNhIiwidXBjYWFkZDIiLCJ1cGNhYWRkNSIsInVwY2Fwd2NkIiwidXBjZSIsInVwY2VhZGQyIiwidXBjZWFkZDUiLCJ1cGNlYW4yIiwidXBjZWFuNSIsInVwc21heGljb2RlIl0pLG4udXBzTW9kZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS51cHNNb2RlLFsidXNDYXJyaWVyIiwiaW50ZXJuYXRpb25hbENhcnJpZXIiLCJzZWN1cmVTeW1ib2wiLCJzdGFuZGFyZFN5bWJvbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53aWRlTmFycm93UmF0aW89KDAscy5nZXRSYXRpbykoZS53aWRlTmFycm93UmF0aW8pLG4uZW5jcnlwdD1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJpbmQiLCEwKSkubWF0Y2g9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWF0Y2gsWyJvbmNlIiwiZGF0YVJlZiIsImdsb2JhbCIsIm5vbmUiXSksbi5yZWY9ZS5yZWZ8fCIiLG4ucGljdHVyZT1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJiaW5kSXRlbXMiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuQmluZEl0ZW1zPUo7dmFyIFo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJvb2tlbmQiKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksUT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYm9vbGVhbiIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSgxPT09dGhpc1tuLiRjb250ZW50XT8iMSI6IjAiKX19XSkscn0obi5PcHRpb24wMSksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImJvcmRlciIsITApKS5icmVhaz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5icmVhayxbImNsb3NlIiwib3BlbiJdKSxhLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY29ybmVyPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZWRnZT1uZXcgbi5YRkFPYmplY3RBcnJheSg0KSxhLmV4dHJhcz1udWxsLGEuZmlsbD1udWxsLGEubWFyZ2luPW51bGwsYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4uc2xpY2UoKTtpZihlLmxlbmd0aDw0KWZvcih2YXIgdD1lLmF0KC0xKXx8bmV3IEFlKHt9KSxyPWUubGVuZ3RoO3I8NDtyKyspZS5wdXNoKHQpO3ZhciBhPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50aGlja25lc3N9KSksaT1bMCwwLDAsMF07dGhpcy5tYXJnaW4mJihpWzBdPXRoaXMubWFyZ2luLnRvcEluc2V0LGlbMV09dGhpcy5tYXJnaW4ucmlnaHRJbnNldCxpWzJdPXRoaXMubWFyZ2luLmJvdHRvbUluc2V0LGlbM109dGhpcy5tYXJnaW4ubGVmdEluc2V0KSx0aGlzW24uJGV4dHJhXT17d2lkdGhzOmEsaW5zZXRzOmksZWRnZXM6ZX19cmV0dXJuIHRoaXNbbi4kZXh0cmFdfX0se2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRFeHRyYV0oKS5lZGdlcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kdG9TdHlsZV0oKTtyZXR1cm4gdC5jb2xvcj10LmNvbG9yfHwiIzAwMDAwMCIsdH0pKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5tYXJnaW4mJk9iamVjdC5hc3NpZ24odCx0aGlzLm1hcmdpbltuLiR0b1N0eWxlXSgpKSx0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZSYmT2JqZWN0LmFzc2lnbih0LHRoaXMuZmlsbFtuLiR0b1N0eWxlXSgpKSx0aGlzLmNvcm5lci5jaGlsZHJlbi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUucmFkaXVzfSkpKXt2YXIgcj10aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlW24uJHRvU3R5bGVdKCl9KSk7aWYoMj09PXIubGVuZ3RofHwzPT09ci5sZW5ndGgpZm9yKHZhciBhPXIuYXQoLTEpLGk9ci5sZW5ndGg7aTw0O2krKylyLnB1c2goYSk7dC5ib3JkZXJSYWRpdXM9ci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJhZGl1c30pKS5qb2luKCIgIil9c3dpdGNoKHRoaXMucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjpjYXNlImhpZGRlbiI6dC5ib3JkZXJTdHlsZT0iIjticmVhaztjYXNlImluYWN0aXZlIjp0LmJvcmRlclN0eWxlPSJub25lIjticmVhaztkZWZhdWx0OnQuYm9yZGVyU3R5bGU9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0eWxlfSkpLmpvaW4oIiAiKX1yZXR1cm4gdC5ib3JkZXJXaWR0aD1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUud2lkdGh9KSkuam9pbigiICIpLHQuYm9yZGVyQ29sb3I9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbG9yfSkpLmpvaW4oIiAiKSx0fX1dKSxyfShuLlhGQU9iamVjdCksdGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJyZWFrIiwhMCkpLmFmdGVyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFmdGVyLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiLCJwYWdlRXZlbiIsInBhZ2VPZGQiXSksbi5hZnRlclRhcmdldD1lLmFmdGVyVGFyZ2V0fHwiIixuLmJlZm9yZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5iZWZvcmUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKSxuLmJlZm9yZVRhcmdldD1lLmJlZm9yZVRhcmdldHx8IiIsbi5ib29rZW5kTGVhZGVyPWUuYm9va2VuZExlYWRlcnx8IiIsbi5ib29rZW5kVHJhaWxlcj1lLmJvb2tlbmRUcmFpbGVyfHwiIixuLmlkPWUuaWR8fCIiLG4ub3ZlcmZsb3dMZWFkZXI9ZS5vdmVyZmxvd0xlYWRlcnx8IiIsbi5vdmVyZmxvd1RhcmdldD1lLm92ZXJmbG93VGFyZ2V0fHwiIixuLm92ZXJmbG93VHJhaWxlcj1lLm92ZXJmbG93VHJhaWxlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxyZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtBZnRlciIsITApKS5pZD1lLmlkfHwiIixuLmxlYWRlcj1lLmxlYWRlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRhcmdldFR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudGFyZ2V0VHlwZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl0pLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxuZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtCZWZvcmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4uc3RhcnROZXc9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi50YXJnZXRUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKSxuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW24uJGV4dHJhXT17fSxzLkhUTUxSZXN1bHQuRkFJTFVSRX19XSkscn0obi5YRkFPYmplY3QpLGFlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJidXR0b24iLCEwKSkuaGlnaGxpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhpZ2hsaWdodCxbImludmVydGVkIiwibm9uZSIsIm91dGxpbmUiLCJwdXNoIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxhPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0saT1PKHIuZXZlbnQuY2hpbGRyZW4pO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZTtpZigiY2xpY2siPT09Yy5hY3Rpdml0eSYmYy5zY3JpcHQpe3ZhciB1PSgwLGwucmVjb3ZlckpzVVJMKShjLnNjcmlwdFtuLiRjb250ZW50XSk7aWYodSl7dmFyIGY9KDAsby5maXhVUkwpKHUudXJsKTtmJiZhLmNoaWxkcmVuLnB1c2goe25hbWU6ImEiLGF0dHJpYnV0ZXM6e2lkOiJsaW5rIit0aGlzW24uJHVpZF0saHJlZjpmLG5ld1dpbmRvdzp1Lm5ld1dpbmRvdyxjbGFzczpbInhmYUxpbmsiXSxzdHlsZTp7fX0sY2hpbGRyZW46W119KX19fX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3MoYSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxpZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FsY3VsYXRlIiwhMCkpLmlkPWUuaWR8fCIiLG4ub3ZlcnJpZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3ZlcnJpZGUsWyJkaXNhYmxlZCIsImVycm9yIiwiaWdub3JlIiwid2FybmluZyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLm1lc3NhZ2U9bnVsbCxuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxvZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FwdGlvbiIsITApKS5pZD1lLmlkfHwiIixuLnBsYWNlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wbGFjZW1lbnQsWyJsZWZ0IiwiYm90dG9tIiwiaW5saW5lIiwicmlnaHQiLCJ0b3AiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJlc2VydmU9TWF0aC5jZWlsKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmVzZXJ2ZSkpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4uZm9udD1udWxsLG4ubWFyZ2luPW51bGwsbi5wYXJhPW51bGwsbi52YWx1ZT1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kZ2V0RXh0cmEsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQ7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0PXRoaXMucmVzZXJ2ZTw9MD90OnRoaXMucmVzZXJ2ZTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnI9dGhpcy5yZXNlcnZlPD0wP3I6dGhpcy5yZXNlcnZlfXRoaXNbbi4kZXh0cmFdPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyx7d2lkdGg6dCxoZWlnaHQ6cn0pfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnZhbHVlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpc1tuLiRwdXNoUGFyYV0oKTt2YXIgdD10aGlzLnZhbHVlW24uJHRvSFRNTF0oZSkuaHRtbDtpZighdClyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgcj10aGlzLnJlc2VydmU7aWYodGhpcy5yZXNlcnZlPD0wKXt2YXIgYT10aGlzW24uJGdldEV4dHJhXShlKSxpPWEudyxjPWEuaDtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnRoaXMucmVzZXJ2ZT1pO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPWN9fXZhciB1PVtdOyJzdHJpbmciPT10eXBlb2YgdD91LnB1c2goe25hbWU6IiN0ZXh0Iix2YWx1ZTp0fSk6dS5wdXNoKHQpO3ZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsIm1hcmdpbiIsInZpc2liaWxpdHkiKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6dGhpcy5yZXNlcnZlPjAmJihsLndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJlc2VydmUpKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT4wJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmVzZXJ2ZSkpfXJldHVybigwLG8uc2V0UGFyYSkodGhpcyxudWxsLHQpLHRoaXNbbi4kcG9wUGFyYV0oKSx0aGlzLnJlc2VydmU9cixzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTpsLGNsYXNzOlsieGZhQ2FwdGlvbiJdfSxjaGlsZHJlbjp1fSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxjZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGVzIiwhMCkpLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi5pZD1lLmlkfHwiIixuLnVybD1lLnVybHx8IiIsbi51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVuY3J5cHRpb249bnVsbCxuLmlzc3VlcnM9bnVsbCxuLmtleVVzYWdlPW51bGwsbi5vaWRzPW51bGwsbi5zaWduaW5nPW51bGwsbi5zdWJqZWN0RE5zPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjaGVja0J1dHRvbiIsITApKS5pZD1lLmlkfHwiIixuLm1hcms9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWFyayxbImRlZmF1bHQiLCJjaGVjayIsImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiXSksbi5zaGFwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaGFwZSxbInNxdWFyZSIsInJvdW5kIl0pLG4uc2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnNpemUsIjEwcHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT0oMCxvLnRvU3R5bGUpKCJtYXJnaW4iKSxjPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNpemUpO2kud2lkdGg9aS5oZWlnaHQ9Yzt2YXIgdSxsPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxmPWwuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiZsLml0ZW1zLmNoaWxkcmVuWzBdW24uJHRvSFRNTF0oKS5odG1sfHxbXSxoPXtvbjoodm9pZCAwIT09ZlswXT9mWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1mWzFdP2ZbMV06Im9mZiIpLnRvU3RyaW5nKCl9LGQ9KGwudmFsdWUmJmwudmFsdWVbbi4kdGV4dF0oKXx8Im9mZiIpPT09aC5vbnx8dm9pZCAwLHA9bFtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGc9bFtuLiR1aWRdO3AgaW5zdGFuY2VvZiBSZT8oYT1wW24uJHVpZF0sdD0icmFkaW8iLHI9InhmYVJhZGlvIix1PXBbbi4kZGF0YV0mJnBbbi4kZGF0YV1bbi4kdWlkXXx8cFtuLiR1aWRdKToodD0iY2hlY2tib3giLHI9InhmYUNoZWNrYm94Iix1PWxbbi4kZGF0YV0mJmxbbi4kZGF0YV1bbi4kdWlkXXx8bFtuLiR1aWRdKTt2YXIgdj17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltyXSxzdHlsZTppLGZpZWxkSWQ6ZyxkYXRhSWQ6dSx0eXBlOnQsY2hlY2tlZDpkLHhmYU9uOmgub24seGZhT2ZmOmgub2ZmLCJhcmlhLWxhYmVsIjpCKGwpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBhJiYodi5hdHRyaWJ1dGVzLm5hbWU9YSksUihsKSYmKHYuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHYuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt2XX0pfX1dKSxyfShuLlhGQU9iamVjdCksbGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNob2ljZUxpc3QiLCEwKSkuY29tbWl0T249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5vcGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKSxuLnRleHRFbnRyeT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxvLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9ci5mb250JiZyLmZvbnQuc2l6ZXx8MTAsaT17Zm9udFNpemU6ImNhbGMoIi5jb25jYXQoYSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpfSxjPVtdO2lmKHIuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoPjApe3ZhciB1PXIuaXRlbXMsbD0wLGY9MDsyPT09dS5jaGlsZHJlbi5sZW5ndGgmJihmPTEtKGw9dS5jaGlsZHJlblswXS5zYXZlKSk7Zm9yKHZhciBoPXUuY2hpbGRyZW5bbF1bbi4kdG9IVE1MXSgpLmh0bWwsZD11LmNoaWxkcmVuW2ZdW24uJHRvSFRNTF0oKS5odG1sLHA9ITEsZz1yLnZhbHVlJiZyLnZhbHVlW24uJHRleHRdKCl8fCIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kyspe3ZhciBtPXtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e3ZhbHVlOmRbdl18fGhbdl0sc3R5bGU6aX0sdmFsdWU6aFt2XX07ZFt2XT09PWcmJihtLmF0dHJpYnV0ZXMuc2VsZWN0ZWQ9cD0hMCksYy5wdXNoKG0pfXB8fGMuc3BsaWNlKDAsMCx7bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOntoaWRkZW46ITAsc2VsZWN0ZWQ6ITB9LHZhbHVlOiIgIn0pfXZhciBiPXtjbGFzczpbInhmYVNlbGVjdCJdLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX07cmV0dXJuIFIocikmJihiWyJhcmlhLXJlcXVpcmVkIl09ITAsYi5yZXF1aXJlZD0hMCksIm11bHRpU2VsZWN0Ij09PXRoaXMub3BlbiYmKGIubXVsdGlwbGU9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbe25hbWU6InNlbGVjdCIsY2hpbGRyZW46YyxhdHRyaWJ1dGVzOmJ9XX0pfX1dKSxyfShuLlhGQU9iamVjdCksZmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbG9yIiwhMCkpLmNTcGFjZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jU3BhY2UsWyJTUkdCIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4udmFsdWU9ZS52YWx1ZT8oMCxzLmdldENvbG9yKShlLnZhbHVlKToiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZT9jLlV0aWwubWFrZUhleENvbG9yKHRoaXMudmFsdWUucix0aGlzLnZhbHVlLmcsdGhpcy52YWx1ZS5iKTpudWxsfX1dKSxyfShuLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbWIiKSkuaWQ9ZS5pZHx8IiIsbi5udW1iZXJPZkNlbGxzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5udW1iZXJPZkNlbGxzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksZGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbm5lY3QiLCEwKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uaWQ9ZS5pZHx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udXNhZ2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudXNhZ2UsWyJleHBvcnRBbmRJbXBvcnQiLCJleHBvcnRPbmx5IiwiaW1wb3J0T25seSJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5waWN0dXJlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb250ZW50QXJlYSIsITApKS5oPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KSxuLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxuLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxuLmRlc2M9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2xlZnQ6KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueCksdG9wOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnkpLHdpZHRoOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLncpLGhlaWdodDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5oKX0scj1bInhmYUNvbnRlbnRhcmVhIl07cmV0dXJuKDAsby5pc1ByaW50T25seSkodGhpcykmJnIucHVzaCgieGZhUHJpbnRPbmx5Iikscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7c3R5bGU6dCxjbGFzczpyLGlkOnRoaXNbbi4kdWlkXX19KX19XSkscn0obi5YRkFPYmplY3QpLGdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb3JuZXIiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5pbnZlcnRlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uam9pbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5qb2luLFsic3F1YXJlIiwicm91bmQiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJhZGl1cz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl1cyksbi5zdHJva2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKSxuLnRoaWNrbmVzcz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtyZXR1cm4gZS5yYWRpdXM9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJzcXVhcmUiPT09dGhpcy5qb2luPzA6dGhpcy5yYWRpdXMpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZSIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRjb250ZW50XS50cmltKCk7dGhpc1tuLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSh0aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCkseWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRhdGVUaW1lIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKTt0aGlzW24uJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKHRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxtZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZVRpbWVFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGlja2VyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnBpY2tlcixbImhvc3QiLCJub25lIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOnJbbi4kdWlkXSxkYXRhSWQ6cltuLiRkYXRhXSYmcltuLiRkYXRhXVtuLiR1aWRdfHxyW24uJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBSKHIpJiYoYS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITAsYS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwKSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2FdfSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxiZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGVjaW1hbCIpKS5mcmFjRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mcmFjRGlnaXRzLGRlZmF1bHRWYWx1ZToyLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4uaWQ9ZS5pZHx8IiIsbi5sZWFkRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZWFkRGlnaXRzLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLHdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJkZWZhdWx0VWkiLCEwKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLGtlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkZXNjIiwhMCkpLmlkPWUuaWR8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksU2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRpZ2VzdE1ldGhvZCIsWyIiLCJTSEExIiwiU0hBMjU2IiwiU0hBNTEyIiwiUklQRU1EMTYwIl0pKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5PcHRpb25PYmplY3QpLHhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkaWdlc3RNZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5kaWdlc3RNZXRob2Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLE9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkcmF3IiwhMCkpLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubG9jYWxlPWUubG9jYWxlfHwiIixhLm1heEg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKSxhLm1heFc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKSxhLm1pbkg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKSxhLm1pblc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKSxhLm5hbWU9ZS5uYW1lfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS5yb3RhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSU5MD09MH19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5ib3JkZXI9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5wYXJhPW51bGwsYS50cmF2ZXJzYWw9bnVsbCxhLnVpPW51bGwsYS52YWx1ZT1udWxsLGEuc2V0UHJvcGVydHk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe18odGhpcyxlKX0pKX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7KDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciB0PXRoaXMudyxyPXRoaXMuaCxhPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyxlKSxjPWEudyx1PWEuaCxsPWEuaXNCcm9rZW47aWYoYyYmIiI9PT10aGlzLncpe2lmKGwmJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7dGhpcy53PWN9aWYodSYmIiI9PT10aGlzLmgmJih0aGlzLmg9dSksJCh0aGlzKSwhKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtYKHRoaXMpO3ZhciBmPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsImhBbGlnbiIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsImJvcmRlciIsIm1hcmdpbiIpOygwLG8uc2V0TWluTWF4RGltZW5zaW9ucykodGhpcyxmKSxmLm1hcmdpbiYmKGYucGFkZGluZz1mLm1hcmdpbixkZWxldGUgZi5tYXJnaW4pO3ZhciBoPVsieGZhRHJhdyJdO3RoaXMuZm9udCYmaC5wdXNoKCJ4ZmFGb250IiksKDAsby5pc1ByaW50T25seSkodGhpcykmJmgucHVzaCgieGZhUHJpbnRPbmx5Iik7dmFyIGQ9e3N0eWxlOmYsaWQ6dGhpc1tuLiR1aWRdLGNsYXNzOmh9O3RoaXMubmFtZSYmKGQueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBwPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZCxjaGlsZHJlbjpbXX07RCh0aGlzLGQpO3ZhciBnPSgwLG8uY29tcHV0ZUJib3gpKHRoaXMscCxlKSx2PXRoaXMudmFsdWU/dGhpcy52YWx1ZVtuLiR0b0hUTUxdKGUpLmh0bWw6bnVsbDtyZXR1cm4gbnVsbD09PXY/KHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxvLmNyZWF0ZVdyYXBwZXIpKHRoaXMscCksZykpOihwLmNoaWxkcmVuLnB1c2godiksKDAsby5zZXRQYXJhKSh0aGlzLGYsdiksdGhpcy53PXQsdGhpcy5oPXIsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxwKSxnKSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxBZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZWRnZSIsITApKS5jYXA9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY2FwLFsic3F1YXJlIiwiYnV0dCIsInJvdW5kIl0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnN0cm9rZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zdHJva2UsWyJzb2xpZCIsImRhc2hEb3QiLCJkYXNoRG90RG90IiwiZGFzaGVkIiwiZG90dGVkIiwiZW1ib3NzZWQiLCJldGNoZWQiLCJsb3dlcmVkIiwicmFpc2VkIl0pLG4udGhpY2tuZXNzPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudGhpY2tuZXNzLCIwLjVwdCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywidmlzaWJpbGl0eSIpO2lmKE9iamVjdC5hc3NpZ24oZSx7bGluZWNhcDp0aGlzLmNhcCx3aWR0aDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50aGlja25lc3MpLGNvbG9yOnRoaXMuY29sb3I/dGhpcy5jb2xvcltuLiR0b1N0eWxlXSgpOiIjMDAwMDAwIixzdHlsZToiIn0pLCJ2aXNpYmxlIiE9PXRoaXMucHJlc2VuY2UpZS5zdHlsZT0ibm9uZSI7ZWxzZSBzd2l0Y2godGhpcy5zdHJva2Upe2Nhc2Uic29saWQiOmUuc3R5bGU9InNvbGlkIjticmVhaztjYXNlImRhc2hEb3QiOmNhc2UiZGFzaERvdERvdCI6Y2FzZSJkYXNoZWQiOmUuc3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmUuc3R5bGU9ImRvdHRlZCI7YnJlYWs7Y2FzZSJlbWJvc3NlZCI6ZS5zdHlsZT0icmlkZ2UiO2JyZWFrO2Nhc2UiZXRjaGVkIjplLnN0eWxlPSJncm9vdmUiO2JyZWFrO2Nhc2UibG93ZXJlZCI6ZS5zdHlsZT0iaW5zZXQiO2JyZWFrO2Nhc2UicmFpc2VkIjplLnN0eWxlPSJvdXRzZXQifXJldHVybiBlfX1dKSxyfShuLlhGQU9iamVjdCksQ2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImVuY29kaW5nIixbImFkYmUueDUwOS5yc2Ffc2hhMSIsImFkYmUucGtjczcuZGV0YWNoZWQiLCJhZGJlLnBrY3M3LnNoYTEiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksRmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY29kaW5ncyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0IiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNlcnRpZmljYXRlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFRlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0RGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJlbmNyeXB0IiwiZGVjcnlwdCJdKSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZmlsdGVyPW51bGwsbi5tYW5pZmVzdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxJZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZW5jcnlwdGlvbiIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0aW9uTWV0aG9kIixbIiIsIkFFUzI1Ni1DQkMiLCJUUklQTEVERVMtQ0JDIiwiQUVTMTI4LUNCQyIsIkFFUzE5Mi1DQkMiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksamU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY3J5cHRpb25NZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5lbmNyeXB0aW9uTWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxNZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZXZlbnQiLCEwKSkuYWN0aXZpdHk9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYWN0aXZpdHksWyJjbGljayIsImNoYW5nZSIsImRvY0Nsb3NlIiwiZG9jUmVhZHkiLCJlbnRlciIsImV4aXQiLCJmdWxsIiwiaW5kZXhDaGFuZ2UiLCJpbml0aWFsaXplIiwibW91c2VEb3duIiwibW91c2VFbnRlciIsIm1vdXNlRXhpdCIsIm1vdXNlVXAiLCJwb3N0RXhlY3V0ZSIsInBvc3RPcGVuIiwicG9zdFByaW50IiwicG9zdFNhdmUiLCJwb3N0U2lnbiIsInBvc3RTdWJtaXQiLCJwcmVFeGVjdXRlIiwicHJlT3BlbiIsInByZVByaW50IiwicHJlU2F2ZSIsInByZVNpZ24iLCJwcmVTdWJtaXQiLCJyZWFkeSIsInZhbGlkYXRpb25TdGF0ZSJdKSxuLmlkPWUuaWR8fCIiLG4ubGlzdGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxpc3RlbixbInJlZk9ubHkiLCJyZWZBbmREZXNjZW5kZW50cyJdKSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5lbmNyeXB0RGF0YT1udWxsLG4uZXhlY3V0ZT1udWxsLG4uc2NyaXB0PW51bGwsbi5zaWduRGF0YT1udWxsLG4uc3VibWl0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLF9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJleERhdGEiKSkuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiIsbi5ocmVmPWUuaHJlZnx8IiIsbi5pZD1lLmlkfHwiIixuLm1heExlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubWF4TGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49LTF9fSksbi5uYW1lPWUubmFtZXx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsibm9uZSIsImJhc2U2NCIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRpc0NEQVRBWG1sLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlfX0se2tleTpuLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybigidGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJmVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWR8fCJ0ZXh0L3htbCI9PT10aGlzLmNvbnRlbnRUeXBlKSYmKHRoaXNbbi4kY29udGVudF09ZSwhMCl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJnRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XVtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5Db250ZW50T2JqZWN0KSxMZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXhPYmplY3QiLCEwKSkuYXJjaGl2ZT1lLmFyY2hpdmV8fCIiLGEuY2xhc3NJZD1lLmNsYXNzSWR8fCIiLGEuY29kZUJhc2U9ZS5jb2RlQmFzZXx8IiIsYS5jb2RlVHlwZT1lLmNvZGVUeXBlfHwiIixhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJleGNsR3JvdXAiLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIixhLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubGF5b3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSksYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLnc9ZS53PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiIsYS54PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0IiksYS55PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0IiksYS5hc3Npc3Q9bnVsbCxhLmJpbmQ9bnVsbCxhLmJvcmRlcj1udWxsLGEuY2FsY3VsYXRlPW51bGwsYS5jYXB0aW9uPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS52YWxpZGF0ZT1udWxsLGEuY29ubmVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV2ZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmllbGQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0LHI9Tyh0aGlzLmZpZWxkLmNoaWxkcmVuKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7aWYoIWEudmFsdWUpe3ZhciBpPW5ldyBWdCh7fSk7YVtuLiRhcHBlbmRDaGlsZF0oaSksYS52YWx1ZT1pfWEudmFsdWVbbi4kc2V0VmFsdWVdKGUpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSl9LHtrZXk6bi4kaXNUaGVyZU1vcmVXaWR0aCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW24uJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kaXNUaGVyZU1vcmVXaWR0aF0oKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iik/KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITEsITEpOiEoZS5sYXlvdXQmJmUubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMCE9PWVbbi4kZXh0cmFdLm51bWJlckluTGluZXx8KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITAsMCkpKX19LHtrZXk6bi4kZmx1c2hIVE1MLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5mbHVzaEhUTUwpKHRoaXMpfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9fSx7a2V5Om4uJGdldEF2YWlsYWJsZVNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5nZXRBdmFpbGFibGVTcGFjZSkodGhpcyl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtpZihOKHRoaXMpLCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTsoMCxvLmZpeERpbWVuc2lvbnMpKHRoaXMpO3ZhciB0PVtdLHI9e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbXX07KDAsby5zZXRBY2Nlc3MpKHRoaXMsci5jbGFzcyksdGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKSxPYmplY3QuYXNzaWduKHRoaXNbbi4kZXh0cmFdLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6cixhdHRlbXB0OjAsbGluZTpudWxsLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO3ZhciBhPXRoaXNbbi4kaXNTcGxpdHRhYmxlXSgpO2lmKGF8fCQodGhpcyksISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXJldHVybiBzLkhUTUxSZXN1bHQuRkFJTFVSRTt2YXIgYz1uZXcgU2V0KFsiZmllbGQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgdT10aGlzW24uJGdldFN1YmZvcm1QYXJlbnRdKCkuY29sdW1uV2lkdGhzO0FycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoPjAmJih0aGlzW24uJGV4dHJhXS5jb2x1bW5XaWR0aHM9dSx0aGlzW24uJGV4dHJhXS5jdXJyZW50Q29sdW1uPTApfXZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksZj1bInhmYUV4Y2xncm91cCJdLGg9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aCYmZi5wdXNoKGgpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZmLnB1c2goInhmYVByaW50T25seSIpLHIuc3R5bGU9bCxyLmNsYXNzPWYsdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSksdGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGQ9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQscD1kPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PHA7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtkJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgZz10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmMsaW5jbHVkZTohMH0pO2lmKGcuc3VjY2VzcylicmVhaztpZihnLmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLGc7aWYoZCYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiF0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PXA7YnJlYWt9fWlmKHRoaXNbbi4kcG9wUGFyYV0oKSxhfHxYKHRoaXMpLHRoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9PT1wKXJldHVybiBhfHxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIHY9MCx5PTA7dGhpcy5tYXJnaW4mJih2PXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0LHk9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBtPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLndpZHRoK3YsdGhpcy53fHwwKSxiPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLmhlaWdodCt5LHRoaXMuaHx8MCksdz1bdGhpcy54LHRoaXMueSxtLGJdOyIiPT09dGhpcy53JiYobC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykobSkpLCIiPT09dGhpcy5oJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKGIpKTt2YXIgaz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOnIsY2hpbGRyZW46dH07cmV0dXJuIEQodGhpcyxyKSxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLGspLHcpfX1dKSxyfShuLlhGQU9iamVjdCksTmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImV4ZWN1dGUiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uZXhlY3V0ZVR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZXhlY3V0ZVR5cGUsWyJpbXBvcnQiLCJyZW1lcmdlIl0pLG4uaWQ9ZS5pZHx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXh0cmFzIiwhMCkpLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXh0cmFzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksQmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImZpZWxkIiwhMCkpLmFjY2Vzcz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKSxhLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiIsYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5oPWUuaD8oMCxzLmdldE1lYXN1cmVtZW50KShlLmgpOiIiLGEuaEFsaWduPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEucm90YXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUlOTA9PTB9fSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEudz1lLnc/KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KToiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmFzc2lzdD1udWxsLGEuYmluZD1udWxsLGEuYm9yZGVyPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEuZm9ybWF0PW51bGwsYS5pdGVtcz1uZXcgbi5YRkFPYmplY3RBcnJheSgyKSxhLmtlZXA9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS51aT1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhbHVlPW51bGwsYS5iaW5kSXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb25uZWN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKE4odGhpcyksIXRoaXMudWkpe3ZhciB0O3N3aXRjaCh0aGlzLnVpPW5ldyB6dCh7fSksdGhpcy51aVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKHRoaXMudWkpLHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6dD1uZXcgVXQoe30pLHRoaXMudWkudGV4dEVkaXQ9dDticmVhaztjYXNlIDE6dD1uZXcgdWUoe30pLHRoaXMudWkuY2hlY2tCdXR0b249dDticmVhaztjYXNlIDI6dD1uZXcgbGUoe30pLHRoaXMudWkuY2hvaWNlTGlzdD10fXRoaXMudWlbbi4kYXBwZW5kQ2hpbGRdKHQpfWlmKCF0aGlzLnVpfHwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpcy5jYXB0aW9uJiZkZWxldGUgdGhpcy5jYXB0aW9uW24uJGV4dHJhXSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciByPXRoaXMuY2FwdGlvbj90aGlzLmNhcHRpb25bbi4kdG9IVE1MXShlKS5odG1sOm51bGwsYT10aGlzLncsYz10aGlzLmgsbD0wLGY9MDt0aGlzLm1hcmdpbiYmKGw9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsZj10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIGg9bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe3ZhciBkPW51bGwsZz1udWxsLHY9MCx5PTA7aWYodGhpcy51aS5jaGVja0J1dHRvbil2PXk9dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7dmFyIG09KDAsby5sYXlvdXROb2RlKSh0aGlzLGUpLGI9bS53LHc9bS5oO251bGwhPT1iPyh2PWIseT13KTp5PSgwLHUuZ2V0TWV0cmljcykodGhpcy5mb250LCEwKS5saW5lTm9HYXB9aWYodis9KGg9aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKSkudyx5Kz1oLmgsdGhpcy5jYXB0aW9uKXt2YXIgaz10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLFM9ay53LHg9ay5oO2lmKGsuaXNCcm9rZW4mJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7c3dpdGNoKGQ9UyxnPXgsdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6ZCs9djticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmcrPXl9fWVsc2UgZD12LGc9eTtkJiYiIj09PXRoaXMudyYmKGQrPWwsdGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPGQ/ZDp0aGlzLm1pblcpKSxnJiYiIj09PXRoaXMuaCYmKGcrPWYsdGhpcy5oPU1hdGgubWluKHRoaXMubWF4SDw9MD8xLzA6dGhpcy5tYXhILHRoaXMubWluSCsxPGc/Zzp0aGlzLm1pbkgpKX1pZih0aGlzW24uJHBvcFBhcmFdKCksKDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gdGhpcy53PWEsdGhpcy5oPWMsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5GQUlMVVJFO1godGhpcyk7dmFyIE89KDAsby50b1N0eWxlKSh0aGlzLCJmb250IiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsInByZXNlbmNlIiwibWFyZ2luIiwiaEFsaWduIik7KDAsby5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLE8pO3ZhciBBPVsieGZhRmllbGQiXTt0aGlzLmZvbnQmJkEucHVzaCgieGZhRm9udCIpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZBLnB1c2goInhmYVByaW50T25seSIpO3ZhciBDPXtzdHlsZTpPLGlkOnRoaXNbbi4kdWlkXSxjbGFzczpBfTtPLm1hcmdpbiYmKE8ucGFkZGluZz1PLm1hcmdpbixkZWxldGUgTy5tYXJnaW4pLCgwLG8uc2V0QWNjZXNzKSh0aGlzLEEpLHRoaXMubmFtZSYmKEMueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBGPVtdLFA9e25hbWU6ImRpdiIsYXR0cmlidXRlczpDLGNoaWxkcmVuOkZ9O0QodGhpcyxDKTt2YXIgVD10aGlzLmJvcmRlcj90aGlzLmJvcmRlcltuLiR0b1N0eWxlXSgpOm51bGwsST0oMCxvLmNvbXB1dGVCYm94KSh0aGlzLFAsZSksRT10aGlzLnVpW24uJHRvSFRNTF0oKS5odG1sO2lmKCFFKXJldHVybiBPYmplY3QuYXNzaWduKE8sVCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO3RoaXNbbi4kdGFiSW5kZXhdJiYoRS5jaGlsZHJlbiYmRS5jaGlsZHJlblswXT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1tuLiR0YWJJbmRleF06RS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbbi4kdGFiSW5kZXhdKSxFLmF0dHJpYnV0ZXMuc3R5bGV8fChFLmF0dHJpYnV0ZXMuc3R5bGU9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIE09bnVsbDtpZih0aGlzLnVpLmJ1dHRvbj8oMT09PUUuY2hpbGRyZW4ubGVuZ3RoJiYoTT1wKEUuY2hpbGRyZW4uc3BsaWNlKDAsMSksMSlbMF0pLE9iamVjdC5hc3NpZ24oRS5hdHRyaWJ1dGVzLnN0eWxlLFQpKTpPYmplY3QuYXNzaWduKE8sVCksRi5wdXNoKEUpLHRoaXMudmFsdWUpaWYodGhpcy51aS5pbWFnZUVkaXQpRS5jaGlsZHJlbi5wdXNoKHRoaXMudmFsdWVbbi4kdG9IVE1MXSgpLmh0bWwpO2Vsc2UgaWYoIXRoaXMudWkuYnV0dG9uKXt2YXIgXz0iIjtpZih0aGlzLnZhbHVlLmV4RGF0YSlfPXRoaXMudmFsdWUuZXhEYXRhW24uJHRleHRdKCk7ZWxzZSBpZih0aGlzLnZhbHVlLnRleHQpXz10aGlzLnZhbHVlLnRleHRbbi4kZ2V0RXh0cmFdKCk7ZWxzZXt2YXIgTD10aGlzLnZhbHVlW24uJHRvSFRNTF0oKS5odG1sO251bGwhPT1MJiYoXz1MLmNoaWxkcmVuWzBdLnZhbHVlKX10aGlzLnVpLnRleHRFZGl0JiZ0aGlzLnZhbHVlLnRleHQmJnRoaXMudmFsdWUudGV4dC5tYXhDaGFycyYmKEUuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5tYXhMZW5ndGg9dGhpcy52YWx1ZS50ZXh0Lm1heENoYXJzKSxfJiYodGhpcy51aS5udW1lcmljRWRpdCYmKF89cGFyc2VGbG9hdChfKSxfPWlzTmFOKF8pPyIiOl8udG9TdHJpbmcoKSksInRleHRhcmVhIj09PUUuY2hpbGRyZW5bMF0ubmFtZT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGV4dENvbnRlbnQ9XzpFLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudmFsdWU9Xyl9aWYoIXRoaXMudWkuaW1hZ2VFZGl0JiZFLmNoaWxkcmVuJiZFLmNoaWxkcmVuWzBdJiZ0aGlzLmgpe2g9aHx8aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKTt2YXIgUj0wO2lmKHRoaXMuY2FwdGlvbiYmWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSl7KFI9dGhpcy5jYXB0aW9uLnJlc2VydmUpPD0wJiYoUj10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLmgpO3ZhciBCPXRoaXMuaC1SLWYtaC5oO0UuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKEIpfWVsc2UgRS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0iMTAwJSJ9aWYoTSYmRS5jaGlsZHJlbi5wdXNoKE0pLCFyKXJldHVybiBFLmF0dHJpYnV0ZXMuY2xhc3MmJkUuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0IiksdGhpcy53PWEsdGhpcy5oPWMscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO2lmKHRoaXMudWkuYnV0dG9uKXJldHVybiBPLnBhZGRpbmcmJmRlbGV0ZSBPLnBhZGRpbmcsImRpdiI9PT1yLm5hbWUmJihyLm5hbWU9InNwYW4iKSxFLmNoaWxkcmVuLnB1c2gocikscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoUCxJKTtzd2l0Y2godGhpcy51aS5jaGVja0J1dHRvbiYmKHIuYXR0cmlidXRlcy5jbGFzc1swXT0ieGZhQ2FwdGlvbkZvckNoZWNrQnV0dG9uIiksRS5hdHRyaWJ1dGVzLmNsYXNzfHwoRS5hdHRyaWJ1dGVzLmNsYXNzPVtdKSxFLmNoaWxkcmVuLnNwbGljZSgwLDAsciksdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlImlubGluZSI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTticmVhaztjYXNlInJpZ2h0IjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhUmlnaHQiKTticmVhaztjYXNlInRvcCI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVRvcCIpO2JyZWFrO2Nhc2UiYm90dG9tIjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhQm90dG9tIil9cmV0dXJuIHRoaXMudz1hLHRoaXMuaD1jLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxQKSxJKX19XSkscn0obi5YRkFPYmplY3QpO3QuRmllbGQ9QmU7dmFyIFVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmaWxsIiwhMCkpLmlkPWUuaWR8fCIiLG4ucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG4ubGluZWFyPW51bGwsbi5wYXR0ZXJuPW51bGwsbi5yYWRpYWw9bnVsbCxuLnNvbGlkPW51bGwsbi5zdGlwcGxlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PWVbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxyPU9iamVjdC5jcmVhdGUobnVsbCksYT0iY29sb3IiLGk9YTtlIGluc3RhbmNlb2YgZWUmJihhPSJiYWNrZ3JvdW5kLWNvbG9yIixpPSJiYWNrZ3JvdW5kIix0IGluc3RhbmNlb2YgenQmJihyLmJhY2tncm91bmRDb2xvcj0id2hpdGUiKSksKGUgaW5zdGFuY2VvZiB4dHx8ZSBpbnN0YW5jZW9mIHopJiYoYT1pPSJmaWxsIixyLmZpbGw9IndoaXRlIik7dmFyIG8scz1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBjPW8udmFsdWU7aWYoImV4dHJhcyIhPT1jJiYiY29sb3IiIT09Yyl7dmFyIHU9dGhpc1tjXTtpZih1IGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBsPXVbbi4kdG9TdHlsZV0odGhpcy5jb2xvcik7cmV0dXJuIGwmJihyW2wuc3RhcnRzV2l0aCgiIyIpP2E6aV09bCkscn19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1pZih0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLnZhbHVlKXt2YXIgZj10aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk7cltmLnN0YXJ0c1dpdGgoIiMiKT9hOmldPWZ9cmV0dXJuIHJ9fV0pLHJ9KG4uWEZBT2JqZWN0KSwkZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZmlsdGVyIiwhMCkpLmFkZFJldm9jYXRpb25JbmZvPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFkZFJldm9jYXRpb25JbmZvLFsiIiwicmVxdWlyZWQiLCJvcHRpb25hbCIsIm5vbmUiXSksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52ZXJzaW9uPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6bi52ZXJzaW9uLGRlZmF1bHRWYWx1ZTo1LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD01fX0pLG4uYXBwZWFyYW5jZUZpbHRlcj1udWxsLG4uY2VydGlmaWNhdGVzPW51bGwsbi5kaWdlc3RNZXRob2RzPW51bGwsbi5lbmNvZGluZ3M9bnVsbCxuLmVuY3J5cHRpb25NZXRob2RzPW51bGwsbi5oYW5kbGVyPW51bGwsbi5sb2NrRG9jdW1lbnQ9bnVsbCxuLm1kcD1udWxsLG4ucmVhc29ucz1udWxsLG4udGltZVN0YW1wPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmbG9hdCIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmb250IiwhMCkpLmJhc2VsaW5lU2hpZnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5iYXNlbGluZVNoaWZ0KSxuLmZvbnRIb3Jpem9udGFsU2NhbGU9KDAscy5nZXRGbG9hdCkoe2RhdGE6ZS5mb250SG9yaXpvbnRhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5mb250VmVydGljYWxTY2FsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLmZvbnRWZXJ0aWNhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5pZD1lLmlkfHwiIixuLmtlcm5pbmdNb2RlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmtlcm5pbmdNb2RlLFsibm9uZSIsInBhaXIiXSksbi5sZXR0ZXJTcGFjaW5nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGV0dGVyU3BhY2luZywiMCIpLG4ubGluZVRocm91Z2g9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxpbmVUaHJvdWdoLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZXx8Mj09PWV9fSksbi5saW5lVGhyb3VnaFBlcmlvZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5saW5lVGhyb3VnaFBlcmlvZCxbImFsbCIsIndvcmQiXSksbi5vdmVybGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3ZlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfHwyPT09ZX19KSxuLm92ZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm92ZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKSxuLnBvc3R1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucG9zdHVyZSxbIm5vcm1hbCIsIml0YWxpYyJdKSxuLnNpemU9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaXplLCIxMHB0Iiksbi50eXBlZmFjZT1lLnR5cGVmYWNlfHwiQ291cmllciIsbi51bmRlcmxpbmU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnVuZGVybGluZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDI9PT1lfX0pLG4udW5kZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnVuZGVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4ud2VpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLndlaWdodCxbIm5vcm1hbCIsImJvbGQiXSksbi5leHRyYXM9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kY2xlYW4sdmFsdWU6ZnVuY3Rpb24oZSl7ZChrKHIucHJvdG90eXBlKSxuLiRjbGVhbix0aGlzKS5jYWxsKHRoaXMsZSksdGhpc1tuLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZCh0aGlzLnR5cGVmYWNlKX19LHtrZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywiZmlsbCIpLHQ9ZS5jb2xvcjtyZXR1cm4gdCYmKCIjMDAwMDAwIj09PXQ/ZGVsZXRlIGUuY29sb3I6dC5zdGFydHNXaXRoKCIjIil8fChlLmJhY2tncm91bmQ9dCxlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IixlLmNvbG9yPSJ0cmFuc3BhcmVudCIpKSx0aGlzLmJhc2VsaW5lU2hpZnQmJihlLnZlcnRpY2FsQWxpZ249KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuYmFzZWxpbmVTaGlmdCkpLGUuZm9udEtlcm5pbmc9Im5vbmUiPT09dGhpcy5rZXJuaW5nTW9kZT8ibm9uZSI6Im5vcm1hbCIsZS5sZXR0ZXJTcGFjaW5nPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxldHRlclNwYWNpbmcpLDAhPT10aGlzLmxpbmVUaHJvdWdoJiYoZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIiwyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLDAhPT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvbj0ib3ZlcmxpbmUiLDI9PT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKSksZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlLGUuZm9udFNpemU9KDAsby5tZWFzdXJlVG9TdHJpbmcpKC45OSp0aGlzLnNpemUpLCgwLG8uc2V0Rm9udEZhbWlseSkodGhpcyx0aGlzLHRoaXNbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixlKSwwIT09dGhpcy51bmRlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiLDI9PT10aGlzLnVuZGVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLGUuZm9udFdlaWdodD10aGlzLndlaWdodCxlfX1dKSxyfShuLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImZvcm1hdCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLnBpY3R1cmU9bnVsbCxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksR2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImhhbmRsZXIiKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCksemU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImh5cGhlbmF0aW9uIikpLmV4Y2x1ZGVBbGxDYXBzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlQWxsQ2FwcyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5leGNsdWRlSW5pdGlhbENhcD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUluaXRpYWxDYXAsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaHlwaGVuYXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5oeXBoZW5hdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wdXNoQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnB1c2hDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnJlbWFpbkNoYXJhY3RlckNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yZW1haW5DaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53b3JkQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLndvcmRDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Nyx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksV2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImltYWdlIikpLmFzcGVjdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSksbi5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIixuLmhyZWY9ZS5ocmVmfHwiIixuLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRlbnRUeXBlJiYhSS5oYXModGhpcy5jb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO3ZhciBlPXRoaXNbbi4kZ2xvYmFsRGF0YV0uaW1hZ2VzJiZ0aGlzW24uJGdsb2JhbERhdGFdLmltYWdlcy5nZXQodGhpcy5ocmVmKTtpZighZSYmKHRoaXMuaHJlZnx8IXRoaXNbbi4kY29udGVudF0pKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoZXx8ImJhc2U2NCIhPT10aGlzLnRyYW5zZmVyRW5jb2Rpbmd8fChlPSgwLGMuc3RyaW5nVG9CeXRlcykoYXRvYih0aGlzW24uJGNvbnRlbnRdKSkpLCFlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoIXRoaXMuY29udGVudFR5cGUpe2Zvcih2YXIgdD0wLHI9RTt0PHIubGVuZ3RoO3QrKyl7dmFyIGE9cChyW3RdLDIpLGk9YVswXSxvPWFbMV07aWYoZS5sZW5ndGg+aS5sZW5ndGgmJmkuZXZlcnkoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9PT1lW3JdfSkpKXt0aGlzLmNvbnRlbnRUeXBlPW87YnJlYWt9fWlmKCF0aGlzLmNvbnRlbnRUeXBlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFl9dmFyIHUsbD1uZXcgQmxvYihbZV0se3R5cGU6dGhpcy5jb250ZW50VHlwZX0pO3N3aXRjaCh0aGlzLmFzcGVjdCl7Y2FzZSJmaXQiOmNhc2UiYWN0dWFsIjpicmVhaztjYXNlImhlaWdodCI6dT17aGVpZ2h0OiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifTticmVhaztjYXNlIm5vbmUiOnU9e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uid2lkdGgiOnU9e3dpZHRoOiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifX12YXIgZj10aGlzW24uJGdldFBhcmVudF0oKTtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImltZyIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFJbWFnZSJdLHN0eWxlOnUsc3JjOlVSTC5jcmVhdGVPYmplY3RVUkwobCksYWx0OmY/QihmW24uJGdldFBhcmVudF0oKSk6bnVsbH19KX19XSkscn0obi5TdHJpbmdPYmplY3QpLFZlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJpbWFnZUVkaXQiLCEwKSkuZGF0YT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhLFsibGluayIsImVtYmVkIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9zLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShuLlhGQU9iamVjdCksWWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImludGVnZXIiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXBhcnNlSW50KHRoaXNbbi4kY29udGVudF0udHJpbSgpLDEwKTt0aGlzW24uJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKG51bGwhPT10aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksS2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImlzc3VlcnMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmNlcnRpZmljYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiaXRlbXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlZj1lLnJlZnx8IiIsYS5zYXZlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5zYXZlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5ib29sZWFuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGVjaW1hbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1PKHRoaXNbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTt0LnB1c2goYVtuLiR0ZXh0XSgpKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfX1dKSxyfShuLlhGQU9iamVjdCk7dC5JdGVtcz1KZTt2YXIgWmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjt5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwia2VlcCIsITApKS5pZD1lLmlkfHwiIjt2YXIgYT1bIm5vbmUiLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl07cmV0dXJuIG4uaW50YWN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmludGFjdCxhKSxuLm5leHQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubmV4dCxhKSxuLnByZXZpb3VzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXZpb3VzLGEpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxRZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3kodGhpcyxyKTt2YXIgYT1bIiIsInllcyIsIm5vIl07cmV0dXJuKG49dC5jYWxsKHRoaXMsRiwia2V5VXNhZ2UiKSkuY3JsU2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jcmxTaWduLGEpLG4uZGF0YUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhRW5jaXBoZXJtZW50LGEpLG4uZGVjaXBoZXJPbmx5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmRlY2lwaGVyT25seSxhKSxuLmRpZ2l0YWxTaWduYXR1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZGlnaXRhbFNpZ25hdHVyZSxhKSxuLmVuY2lwaGVyT25seT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5lbmNpcGhlck9ubHksYSksbi5pZD1lLmlkfHwiIixuLmtleUFncmVlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlBZ3JlZW1lbnQsYSksbi5rZXlDZXJ0U2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlDZXJ0U2lnbixhKSxuLmtleUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlFbmNpcGhlcm1lbnQsYSksbi5ub25SZXB1ZGlhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ub25SZXB1ZGlhdGlvbixhKSxuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxldD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibGluZSIsITApKS5oYW5kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5zbG9wZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zbG9wZSxbIlxcIiwiLyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5lZGdlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGk9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGM9dGhpcy5lZGdlfHxuZXcgQWUoe30pLHU9Y1tuLiR0b1N0eWxlXSgpLGw9T2JqZWN0LmNyZWF0ZShudWxsKSxmPSJ2aXNpYmxlIj09PWMucHJlc2VuY2U/Yy50aGlja25lc3M6MDtsLnN0cm9rZVdpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShmKSxsLnN0cm9rZT11LmNvbG9yO3ZhciBoPSIxMDAlIixkPSIxMDAlIjtpLnc8PWY/KGU9IjUwJSIsdD0wLHI9IjUwJSIsYT0iMTAwJSIsaD1sLnN0cm9rZVdpZHRoKTppLmg8PWY/KGU9MCx0PSI1MCUiLHI9IjEwMCUiLGE9IjUwJSIsZD1sLnN0cm9rZVdpZHRoKToiXFwiPT09dGhpcy5zbG9wZT8oZT0wLHQ9MCxyPSIxMDAlIixhPSIxMDAlIik6KGU9MCx0PSIxMDAlIixyPSIxMDAlIixhPTApO3ZhciBwPXtuYW1lOiJzdmciLGNoaWxkcmVuOlt7bmFtZToibGluZSIsYXR0cmlidXRlczp7eG1sbnM6UCx4MTplLHkxOnQseDI6cix5MjphLHN0eWxlOmx9fV0sYXR0cmlidXRlczp7eG1sbnM6UCx3aWR0aDpoLGhlaWdodDpkLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9fX07cmV0dXJuIE0oaSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbcF19KToocC5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MocCkpfX1dKSxyfShuLlhGQU9iamVjdCksdHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxpbmVhciIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvUmlnaHQiLCJ0b0JvdHRvbSIsInRvTGVmdCIsInRvVG9wIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLnR5cGUucmVwbGFjZSgvKFtSQkxUXSkvLCIgJDEiKS50b0xvd2VyQ2FzZSgpLHI9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiO3JldHVybiJsaW5lYXItZ3JhZGllbnQoIi5jb25jYXQodCwiLCAiKS5jb25jYXQoZSwiLCAiKS5jb25jYXQociwiKSIpfX1dKSxyfShuLlhGQU9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxvY2tEb2N1bWVudCIpKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09KDAscy5nZXRTdHJpbmdPcHRpb24pKHRoaXNbbi4kY29udGVudF0sWyJhdXRvIiwiMCIsIjEiXSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksbnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsIm1hbmlmZXN0IiwhMCkpLmFjdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY3Rpb24sWyJpbmNsdWRlIiwiYWxsIiwiZXhjbHVkZSJdKSxhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEucmVmPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxhdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibWFyZ2luIiwhMCkpLmJvdHRvbUluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuYm90dG9tSW5zZXQsIjAiKSxuLmlkPWUuaWR8fCIiLG4ubGVmdEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGVmdEluc2V0LCIwIiksbi5yaWdodEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmlnaHRJbnNldCwiMCIpLG4udG9wSW5zZXQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS50b3BJbnNldCwiMCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue21hcmdpbjooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50b3BJbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJpZ2h0SW5zZXQpKyIgIisoMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5ib3R0b21JbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxlZnRJbnNldCl9fX1dKSxyfShuLlhGQU9iamVjdCksaXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1kcCIpKS5pZD1lLmlkfHwiIixuLnBlcm1pc3Npb25zPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wZXJtaXNzaW9ucyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDM9PT1lfX0pLG4uc2lnbmF0dXJlVHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaWduYXR1cmVUeXBlLFsiZmlsbGVyIiwiYXV0aG9yIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1lZGl1bSIpKS5pZD1lLmlkfHwiIixuLmltYWdpbmdCQm94PSgwLHMuZ2V0QkJveCkoZS5pbWFnaW5nQkJveCksbi5sb25nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubG9uZyksbi5vcmllbnRhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcmllbnRhdGlvbixbInBvcnRyYWl0IiwibGFuZHNjYXBlIl0pLG4uc2hvcnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaG9ydCksbi5zdG9jaz1lLnN0b2NrfHwiIixuLnRyYXlJbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmF5SW4sWyJhdXRvIiwiZGVsZWdhdGUiLCJwYWdlRnJvbnQiXSksbi50cmF5T3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlPdXQsWyJhdXRvIiwiZGVsZWdhdGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxzdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwibWVzc2FnZSIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxjdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibnVtZXJpY0VkaXQiLCEwKSkuaFNjcm9sbFBvbGljeT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5jb21iPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIikscj10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCksYT17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOkIociksImFyaWEtcmVxdWlyZWQiOiExfX07cmV0dXJuIFIocikmJihhLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMCxhLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbYV19KX19XSkscn0obi5YRkFPYmplY3QpLHV0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvY2N1ciIsITApKS5pZD1lLmlkfHwiIixuLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pOiIiLG4ubWF4PSIiIT09ZS5tYXg/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KToiIixuLm1pbj0iIiE9PWUubWluPygwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5taW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSk6IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGNsZWFuLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIGR0fHxlIGluc3RhbmNlb2YgcHQ/MDoxKSwiIj09PXRoaXMubWF4JiYodGhpcy5tYXg9IiI9PT10P2UgaW5zdGFuY2VvZiBkdHx8ZSBpbnN0YW5jZW9mIHB0Py0xOjE6dGhpcy5taW4pLC0xIT09dGhpcy5tYXgmJnRoaXMubWF4PHRoaXMubWluJiYodGhpcy5tYXg9dGhpcy5taW4pLCIiPT09dGhpcy5pbml0aWFsJiYodGhpcy5pbml0aWFsPWUgaW5zdGFuY2VvZiBEdD8xOnRoaXMubWluKX19XSkscn0obi5YRkFPYmplY3QpLGx0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvaWQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxmdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwib2lkcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEub2lkPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxodD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwib3ZlcmZsb3ciKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PXRoaXNbbi4kZ2V0VGVtcGxhdGVSb290XSgpLHI9dFtuLiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCxlKSxhPXRbbi4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsZSksaT10W24uJHNlYXJjaE5vZGVdKHRoaXMudHJhaWxlcixlKTt0aGlzW24uJGV4dHJhXT17dGFyZ2V0OnImJnJbMF18fG51bGwsbGVhZGVyOmEmJmFbMF18fG51bGwsdHJhaWxlcjppJiZpWzBdfHxudWxsLGFkZExlYWRlcjohMSxhZGRUcmFpbGVyOiExfX1yZXR1cm4gdGhpc1tuLiRleHRyYV19fV0pLHJ9KG4uWEZBT2JqZWN0KSxkdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicGFnZUFyZWEiLCEwKSkuYmxhbmtPck5vdEJsYW5rPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmJsYW5rT3JOb3RCbGFuayxbImFueSIsImJsYW5rIiwibm90QmxhbmsiXSksYS5pZD1lLmlkfHwiIixhLmluaXRpYWxOdW1iZXI9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWxOdW1iZXIsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5uYW1lPWUubmFtZXx8IiIsYS5udW1iZXJlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyZWQsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5vZGRPckV2ZW49KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub2RkT3JFdmVuLFsiYW55IiwiZXZlbiIsIm9kZCJdKSxhLnBhZ2VQb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wYWdlUG9zaXRpb24sWyJhbnkiLCJmaXJzdCIsImxhc3QiLCJvbmx5IiwicmVzdCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEubWVkaXVtPW51bGwsYS5vY2N1cj1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbnRlbnRBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZHJhdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNVc2FibGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuLiRleHRyYV0/IXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4Oih0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0sITApfX0se2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLiRleHRyYV19fSx7a2V5Om4uJGdldE5leHRQYWdlLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0pO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW24uJGlzVXNhYmxlXSgpPyh0aGlzW24uJGV4dHJhXS5udW1iZXJPZlVzZSs9MSx0aGlzKTplW24uJGdldE5leHRQYWdlXSgpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5zcGFjZXx8e3dpZHRoOjAsaGVpZ2h0OjB9fX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPXtudW1iZXJPZlVzZToxfSk7dmFyIGU9W107dGhpc1tuLiRleHRyYV0uY2hpbGRyZW49ZTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRoaXMubWVkaXVtJiZ0aGlzLm1lZGl1bS5zaG9ydCYmdGhpcy5tZWRpdW0ubG9uZyl7aWYodC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0uc2hvcnQpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1lZGl1bS5sb25nKSx0aGlzW24uJGV4dHJhXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0uc2hvcnQsaGVpZ2h0OnRoaXMubWVkaXVtLmxvbmd9LCJsYW5kc2NhcGUiPT09dGhpcy5tZWRpdW0ub3JpZW50YXRpb24pe3ZhciByPXQud2lkdGg7dC53aWR0aD10LmhlaWdodCx0LmhlaWdodD1yLHRoaXNbbi4kZXh0cmFdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5sb25nLGhlaWdodDp0aGlzLm1lZGl1bS5zaG9ydH19fWVsc2UoMCxjLndhcm4pKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtyZXR1cm4gdGhpc1tuLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiYXJlYSIsImRyYXciLCJmaWVsZCIsInN1YmZvcm0iXSksaW5jbHVkZTohMH0pLHRoaXNbbi4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6bmV3IFNldChbImNvbnRlbnRBcmVhIl0pLGluY2x1ZGU6ITB9KSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjplLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUGFnZSJdLGlkOnRoaXNbbi4kdWlkXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1dKSxyfShuLlhGQU9iamVjdCkscHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInBhZ2VTZXQiLCEwKSkuZHVwbGV4SW1wb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZXh0cmFzPW51bGwsYS5vY2N1cj1udWxsLGEucGFnZUFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYWdlU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PU8odGhpcy5wYWdlQXJlYS5jaGlsZHJlbik7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWVbbi4kY2xlYW5QYWdlXSgpfWNhdGNoKGUpe3QuZShlKX1maW5hbGx5e3QuZigpfXZhciByLGE9Tyh0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOylyLnZhbHVlW24uJGNsZWFuUGFnZV0oKX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX19fSx7a2V5Om4uJGlzVXNhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4fX0se2tleTpuLiRnZXROZXh0UGFnZSx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbbi4kZXh0cmFdfHwodGhpc1tuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4Oi0xLHBhZ2VTZXRJbmRleDotMX0pLCJvcmRlcmVkT2NjdXJyZW5jZSI9PT10aGlzLnJlbGF0aW9uKXtpZih0aGlzW24uJGV4dHJhXS5wYWdlSW5kZXgrMTx0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4Kz0xLHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4XVtuLiRnZXROZXh0UGFnZV0oKTtpZih0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrMTx0aGlzLnBhZ2VTZXQuY2hpbGRyZW4ubGVuZ3RoKXJldHVybiB0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrPTEsdGhpcy5wYWdlU2V0LmNoaWxkcmVuW3RoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleF1bbi4kZ2V0TmV4dFBhZ2VdKCk7aWYodGhpc1tuLiRpc1VzYWJsZV0oKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTEsdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4PS0xLHRoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleD0tMSx0aGlzW24uJGdldE5leHRQYWdlXSgpO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlIGluc3RhbmNlb2Ygcj9lW24uJGdldE5leHRQYWdlXSgpOih0aGlzW24uJGNsZWFuUGFnZV0oKSx0aGlzW24uJGdldE5leHRQYWdlXSgpKX12YXIgdD10aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFnZU51bWJlcixhPXQlMj09MD8iZXZlbiI6Im9kZCIsaT0wPT09dD8iZmlyc3QiOiJyZXN0IixvPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub2RkT3JFdmVuPT09YSYmZS5wYWdlUG9zaXRpb249PT1pfSkpO3JldHVybiBvfHwoKG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiZlLnBhZ2VQb3NpdGlvbj09PWl9KSkpP286KG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiYiYW55Ij09PWUucGFnZVBvc2l0aW9ufSkpKXx8dGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxndD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFyYSIsITApKS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4ubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5saW5lSGVpZ2h0LCIwcHQiKToiIixuLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luTGVmdCwiMHB0Iik6IiIsbi5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiLG4ub3JwaGFucz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnByZXNlcnZlPWUucHJlc2VydmV8fCIiLG4ucmFkaXhPZmZzZXQ9ZS5yYWRpeE9mZnNldD8oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl4T2Zmc2V0LCIwcHQiKToiIixuLnNwYWNlQWJvdmU9ZS5zcGFjZUFib3ZlPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuc3BhY2VBYm92ZSwiMHB0Iik6IiIsbi5zcGFjZUJlbG93PWUuc3BhY2VCZWxvdz8oMCxzLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQmVsb3csIjBwdCIpOiIiLG4udGFiRGVmYXVsdD1lLnRhYkRlZmF1bHQ/KDAscy5nZXRNZWFzdXJlbWVudCkobi50YWJEZWZhdWx0KToiIixuLnRhYlN0b3BzPShlLnRhYlN0b3BzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMj09MT8oMCxzLmdldE1lYXN1cmVtZW50KShlKTplfSkpLG4udGV4dEluZGVudD1lLnRleHRJbmRlbnQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS50ZXh0SW5kZW50LCIwcHQiKToiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52QWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudkFsaWduLFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLG4ud2lkb3dzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS53aWRvd3MsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5oeXBoZW5hdGlvbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9KDAsby50b1N0eWxlKSh0aGlzLCJoQWxpZ24iKTtyZXR1cm4iIiE9PXRoaXMubWFyZ2luTGVmdCYmKGUucGFkZGluZ0xlZnQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luTGVmdCkpLCIiIT09dGhpcy5tYXJnaW5SaWdodCYmKGUucGFkZGluZ2lnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luUmlnaHQpKSwiIiE9PXRoaXMuc3BhY2VBYm92ZSYmKGUucGFkZGluZ1RvcD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUFib3ZlKSksIiIhPT10aGlzLnNwYWNlQmVsb3cmJihlLnBhZGRpbmdCb3R0b209KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VCZWxvdykpLCIiIT09dGhpcy50ZXh0SW5kZW50JiYoZS50ZXh0SW5kZW50PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRleHRJbmRlbnQpLCgwLG8uZml4VGV4dEluZGVudCkoZSkpLHRoaXMubGluZUhlaWdodD4wJiYoZS5saW5lSGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxpbmVIZWlnaHQpKSwiIiE9PXRoaXMudGFiRGVmYXVsdCYmKGUudGFiU2l6ZT0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KSksdGhpcy50YWJTdG9wcy5sZW5ndGgsdGhpcy5oeXBoZW5hdGF0aW9uJiZPYmplY3QuYXNzaWduKGUsdGhpcy5oeXBoZW5hdGF0aW9uW24uJHRvU3R5bGVdKCkpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFzc3dvcmRFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx5dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGF0dGVybiIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbImNyb3NzSGF0Y2giLCJjcm9zc0RpYWdvbmFsIiwiZGlhZ29uYWxMZWZ0IiwiZGlhZ29uYWxSaWdodCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lP2Vbbi4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7dmFyIHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiLHI9InJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLGE9IiIuY29uY2F0KGUsIiwiKS5jb25jYXQoZSwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCgxMCwicHgiKTtzd2l0Y2godGhpcy50eXBlKXtjYXNlImNyb3NzSGF0Y2giOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpICIpLmNvbmNhdChyLCIodG8gcmlnaHQsIikuY29uY2F0KGEsIikiKTtjYXNlImNyb3NzRGlhZ29uYWwiOnJldHVybiIiLmNvbmNhdChyLCIoNDVkZWcsIikuY29uY2F0KGEsIikgIikuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImRpYWdvbmFsTGVmdCI6cmV0dXJuIiIuY29uY2F0KHIsIig0NWRlZywiKS5jb25jYXQoYSwiKSIpO2Nhc2UiZGlhZ29uYWxSaWdodCI6cmV0dXJuIiIuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImhvcml6b250YWwiOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpIik7Y2FzZSJ2ZXJ0aWNhbCI6cmV0dXJuIiIuY29uY2F0KHIsIih0byByaWdodCwiKS5jb25jYXQoYSwiKSIpfXJldHVybiIifX1dKSxyfShuLlhGQU9iamVjdCksbXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInBpY3R1cmUiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxidD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicHJvdG8iLCEwKSkuYXBwZWFyYW5jZUZpbHRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyYz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5hc3Npc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5iYXJjb2RlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYmluZEl0ZW1zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYm9va2VuZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5ib3JkZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVhaz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJ1dHRvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhbGN1bGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhcHRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jZXJ0aWZpY2F0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNlcnRpZmljYXRlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNoZWNrQnV0dG9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY2hvaWNlTGlzdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbG9yPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY29tYj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb250ZW50QXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvcm5lcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWZhdWx0VWk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZXNjPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNvZGluZ3M9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0aW9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdGlvbk1ldGhvZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmVuY3J5cHRpb25NZXRob2RzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4ZWN1dGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leHRyYXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWVsZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpbGw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWx0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZvbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mb3JtYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5oYW5kbGVyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaHlwaGVuYXRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pc3N1ZXJzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5rZWVwPW5ldyBuLlhGQU9iamVjdEFycmF5LGEua2V5VXNhZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5saW5lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubGluZWFyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubG9ja0RvY3VtZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEubWFuaWZlc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tYXJnaW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZHA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZWRpdW09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZXNzYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubnVtZXJpY0VkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vY2N1cj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZHM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vdmVyZmxvdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhZ2VBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGFnZVNldD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhcmE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXNzd29yZEVkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXR0ZXJuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGljdHVyZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJhZGlhbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbnM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWN0YW5nbGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWY9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zY3JpcHQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmF0dXJlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmluZz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNvbGlkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3BlYWs9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdGlwcGxlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE5zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3VibWl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRleHRFZGl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWVTdGFtcD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRvb2xUaXA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnVpPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudmFsaWRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS52YWx1ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnZhcmlhYmxlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksd3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInJhZGlhbCIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvRWRnZSIsInRvQ2VudGVyIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbbi4kdG9TdHlsZV0oKToiIzAwMDAwMCIscj0idG9FZGdlIj09PXRoaXMudHlwZT8iIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0KToiIi5jb25jYXQodCwiLCIpLmNvbmNhdChlKTtyZXR1cm4icmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCBjZW50ZXIsICIuY29uY2F0KHIsIikiKX19XSkscn0obi5YRkFPYmplY3QpLGt0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWFzb24iKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxTdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVhc29ucyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEucmVhc29uPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx4dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVjdGFuZ2xlIiwhMCkpLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5jb3JuZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXkoNCksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZmlsbD1udWxsLGF9cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuZWRnZS5jaGlsZHJlblswXTpuZXcgQWUoe30pLHQ9ZVtuLiR0b1N0eWxlXSgpLHI9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZT9PYmplY3QuYXNzaWduKHIsdGhpcy5maWxsW24uJHRvU3R5bGVdKCkpOnIuZmlsbD0idHJhbnNwYXJlbnQiLHIuc3Ryb2tlV2lkdGg9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCksci5zdHJva2U9dC5jb2xvcjt2YXIgYT0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyBnZSh7fSkpW24uJHRvU3R5bGVdKCksaT17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6InJlY3QiLGF0dHJpYnV0ZXM6e3htbG5zOlAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIseDowLHk6MCxyeDphLnJhZGl1cyxyeTphLnJhZGl1cyxzdHlsZTpyfX1dLGF0dHJpYnV0ZXM6e3htbG5zOlAsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fTtyZXR1cm4gTSh0aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCkpP3MuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2ldfSk6KGkuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuSFRNTFJlc3VsdC5zdWNjZXNzKGkpKX19XSkscn0obi5YRkFPYmplY3QpLE90PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWYiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxBdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2NyaXB0IikpLmJpbmRpbmc9ZS5iaW5kaW5nfHwiIixuLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxDdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2V0UHJvcGVydHkiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ucmVmPWUucmVmfHwiIixuLnRhcmdldD1lLnRhcmdldHx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuU2V0UHJvcGVydHk9Q3Q7dmFyIEZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduRGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJzaWduIiwiY2xlYXIiLCJ2ZXJpZnkiXSksbi5yZWY9ZS5yZWZ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5maWx0ZXI9bnVsbCxuLm1hbmlmZXN0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFB0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduYXR1cmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJQREYxLjMiLCJQREYxLjYiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLmZpbHRlcj1udWxsLG4ubWFuaWZlc3Q9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxUdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic2lnbmluZyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzb2xpZCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT9lW24uJHRvU3R5bGVdKCk6IiNGRkZGRkYifX1dKSxyfShuLlhGQU9iamVjdCksRXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInNwZWFrIikpLmRpc2FibGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRpc2FibGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmlvcml0eT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmlvcml0eSxbImN1c3RvbSIsImNhcHRpb24iLCJuYW1lIiwidG9vbFRpcCJdKSxuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxqdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3RpcHBsZSIsITApKS5pZD1lLmlkfHwiIixuLnJhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJhdGUsZGVmYXVsdFZhbHVlOjUwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0xMDB9fSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmF0ZS8xMDA7cmV0dXJuIGMuVXRpbC5tYWtlSGV4Q29sb3IoTWF0aC5yb3VuZChlLnZhbHVlLnIqKDEtdCkrdGhpcy52YWx1ZS5yKnQpLE1hdGgucm91bmQoZS52YWx1ZS5nKigxLXQpK3RoaXMudmFsdWUuZyp0KSxNYXRoLnJvdW5kKGUudmFsdWUuYiooMS10KSt0aGlzLnZhbHVlLmIqdCkpfX1dKSxyfShuLlhGQU9iamVjdCksTXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInN1YmZvcm0iLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWxsb3dNYWNybz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dNYWNybyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiItMSI9PT1lPy0xOigwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpfSkpLGEuaD1lLmg/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5oKToiIixhLmhBbGlnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pLGEuaWQ9ZS5pZHx8IiIsYS5sYXlvdXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKSxhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5tZXJnZU1vZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWVyZ2VNb2RlLFsiY29uc3VtZURhdGEiLCJtYXRjaFRlbXBsYXRlIl0pLGEubWluSD0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpLGEubWluVz0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpLGEubmFtZT1lLm5hbWV8fCIiLGEucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksYS5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxhLnJlc3RvcmVTdGF0ZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5yZXN0b3JlU3RhdGUsWyJtYW51YWwiLCJhdXRvIl0pLGEuc2NvcGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NvcGUsWyJuYW1lIiwibm9uZSJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5iaW5kPW51bGwsYS5ib29rZW5kPW51bGwsYS5ib3JkZXI9bnVsbCxhLmJyZWFrPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5vY2N1cj1udWxsLGEub3ZlcmZsb3c9bnVsbCxhLnBhZ2VTZXQ9bnVsbCxhLnBhcmE9bnVsbCxhLnRyYXZlcnNhbD1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhcmlhYmxlcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kcmF3PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucHJvdG89bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJmb3JtU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRnZXRTdWJmb3JtUGFyZW50LHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBfdD9lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk6ZX19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRpc1RoZXJlTW9yZVdpZHRoLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJnRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT4wfHx0aGlzW24uJGdldFBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpfX0se2tleTpuLiRnZXRDb250YWluZWRDaGlsZHJlbix2YWx1ZTpTKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChMKHRoaXMpLCJ0MCIsMSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKX0se2tleTpuLiRmbHVzaEhUTUwsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9fSx7a2V5Om4uJGFkZEhUTUwsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxpLmFkZEhUTUwpKHRoaXMsZSx0KX19LHtrZXk6bi4kZ2V0QXZhaWxhYmxlU3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmdldEF2YWlsYWJsZVNwYWNlKSh0aGlzKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iil8fHRoaXMua2VlcCYmIm5vbmUiIT09dGhpcy5rZWVwLmludGFjdD8odGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMSwhMSk6IShlLmxheW91dCYmZS5sYXlvdXQuZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtuLiRleHRyYV0ubnVtYmVySW5MaW5lfHwodGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMCwwKSkpfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSx0aGlzLmJyZWFrKXtpZigiYXV0byIhPT10aGlzLmJyZWFrLmFmdGVyfHwiIiE9PXRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQpe3ZhciB0PW5ldyByZSh7dGFyZ2V0VHlwZTp0aGlzLmJyZWFrLmFmdGVyLHRhcmdldDp0aGlzLmJyZWFrLmFmdGVyVGFyZ2V0LHN0YXJ0TmV3OnRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKX0pO3Rbbi4kZ2xvYmFsRGF0YV09dGhpc1tuLiRnbG9iYWxEYXRhXSx0aGlzW24uJGFwcGVuZENoaWxkXSh0KSx0aGlzLmJyZWFrQWZ0ZXIucHVzaCh0KX1pZigiYXV0byIhPT10aGlzLmJyZWFrLmJlZm9yZXx8IiIhPT10aGlzLmJyZWFrLmJlZm9yZVRhcmdldCl7dmFyIHI9bmV3IG5lKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtyW24uJGdsb2JhbERhdGFdPXRoaXNbbi4kZ2xvYmFsRGF0YV0sdGhpc1tuLiRhcHBlbmRDaGlsZF0ociksdGhpcy5icmVha0JlZm9yZS5wdXNoKHIpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7dmFyIGE9bmV3IGh0KHt0YXJnZXQ6dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCxsZWFkZXI6dGhpcy5icmVhay5vdmVyZmxvd0xlYWRlcix0cmFpbGVyOnRoaXMuYnJlYWsub3ZlcmZsb3dUcmFpbGVyfSk7YVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKGEpLHRoaXMub3ZlcmZsb3cucHVzaChhKX10aGlzW24uJHJlbW92ZUNoaWxkXSh0aGlzLmJyZWFrKSx0aGlzLmJyZWFrPW51bGx9aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO2lmKCh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD4xfHx0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPjEpJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIGJyZWFrQmVmb3JlIG9yIGJyZWFrQWZ0ZXIgaW4gc3ViZm9ybXM6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgdT10aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO2lmKEgodSkpcmV0dXJuIHMuSFRNTFJlc3VsdC5icmVha05vZGUodSl9aWYodGhpc1tuLiRleHRyYV0mJnRoaXNbbi4kZXh0cmFdLmFmdGVyQnJlYWtBZnRlcilyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZOygwLG8uZml4RGltZW5zaW9ucykodGhpcyk7dmFyIGw9W10sZj17aWQ6dGhpc1tuLiR1aWRdLGNsYXNzOltdfTsoMCxvLnNldEFjY2VzcykodGhpcyxmLmNsYXNzKSx0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPU9iamVjdC5jcmVhdGUobnVsbCkpLE9iamVjdC5hc3NpZ24odGhpc1tuLiRleHRyYV0se2NoaWxkcmVuOmwsbGluZTpudWxsLGF0dHJpYnV0ZXM6ZixhdHRlbXB0OjAsbnVtYmVySW5MaW5lOjAsYXZhaWxhYmxlU3BhY2U6e3dpZHRoOk1hdGgubWluKHRoaXMud3x8MS8wLGUud2lkdGgpLGhlaWdodDpNYXRoLm1pbih0aGlzLmh8fDEvMCxlLmhlaWdodCl9LHdpZHRoOjAsaGVpZ2h0OjAscHJldkhlaWdodDowLGN1cnJlbnRXaWR0aDowfSk7dmFyIGg9dGhpc1tuLiRnZXRUZW1wbGF0ZVJvb3RdKCksZD1oW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUscD10aGlzW24uJGlzU3BsaXR0YWJsZV0oKTtpZihwfHwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIGc9bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZXhjbEdyb3VwIiwiZmllbGQiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciB2PXRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKS5jb2x1bW5XaWR0aHM7QXJyYXkuaXNBcnJheSh2KSYmdi5sZW5ndGg+MCYmKHRoaXNbbi4kZXh0cmFdLmNvbHVtbldpZHRocz12LHRoaXNbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW49MCl9dmFyIHk9KDAsby50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxtPVsieGZhU3ViZm9ybSJdLGI9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aWYoYiYmbS5wdXNoKGIpLGYuc3R5bGU9eSxmLmNsYXNzPW0sdGhpcy5uYW1lJiYoZi54ZmFOYW1lPXRoaXMubmFtZSksdGhpcy5vdmVyZmxvdyl7dmFyIHc9dGhpcy5vdmVyZmxvd1tuLiRnZXRFeHRyYV0oKTt3LmFkZExlYWRlciYmKHcuYWRkTGVhZGVyPSExLHEodGhpcyx3LmxlYWRlcixlKSl9dGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGs9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsUz1rPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PFM7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtrJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgeD10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmcsaW5jbHVkZTohMH0pO2lmKHguc3VjY2VzcylicmVhaztpZih4LmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHg7aWYoayYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiFoW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9UzticmVha319aWYodGhpc1tuLiRwb3BQYXJhXSgpLHB8fFgodGhpcyksaFtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWQsdGhpc1tuLiRleHRyYV0uYXR0ZW1wdD09PVMpcmV0dXJuIHRoaXMub3ZlcmZsb3cmJih0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPXRoaXMub3ZlcmZsb3cpLHB8fGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtpZih0aGlzLm92ZXJmbG93KXt2YXIgTz10aGlzLm92ZXJmbG93W24uJGdldEV4dHJhXSgpO08uYWRkVHJhaWxlciYmKE8uYWRkVHJhaWxlcj0hMSxxKHRoaXMsTy50cmFpbGVyLGUpKX12YXIgQT0wLEM9MDt0aGlzLm1hcmdpbiYmKEE9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsQz10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIEY9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0ud2lkdGgrQSx0aGlzLnd8fDApLFA9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0uaGVpZ2h0K0MsdGhpcy5ofHwwKSxUPVt0aGlzLngsdGhpcy55LEYsUF07aWYoIiI9PT10aGlzLncmJih5LndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShGKSksIiI9PT10aGlzLmgmJih5LmhlaWdodD0oMCxvLm1lYXN1cmVUb1N0cmluZykoUCkpLCgiMHB4Ij09PXkud2lkdGh8fCIwcHgiPT09eS5oZWlnaHQpJiYwPT09bC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgST17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmYsY2hpbGRyZW46bH07RCh0aGlzLGYpO3ZhciBFPXMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxJKSxUKTtpZih0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgaj10aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW5bMF07aWYoSChqKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyPUUscy5IVE1MUmVzdWx0LmJyZWFrTm9kZShqKX1yZXR1cm4gZGVsZXRlIHRoaXNbbi4kZXh0cmFdLEV9fV0pLHJ9KG4uWEZBT2JqZWN0KSxfdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViZm9ybVNldCIsITApKS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2tlbmQ9bnVsbCxhLmJyZWFrPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm9jY3VyPW51bGwsYS5vdmVyZmxvdz1udWxsLGEuYnJlYWtBZnRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQmVmb3JlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGdldFN1YmZvcm1QYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7IShlIGluc3RhbmNlb2YgTXQpOyllPWVbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlfX0se2tleTpuLiRpc0JpbmRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fV0pLHJ9KG4uWEZBT2JqZWN0KSxMdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3ViamVjdEROIikpLmRlbGltaXRlcj1lLmRlbGltaXRlcnx8IiwiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09bmV3IE1hcCh0aGlzW24uJGNvbnRlbnRdLnNwbGl0KHRoaXMuZGVsaW1pdGVyKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybihlPWUuc3BsaXQoIj0iLDIpKVswXT1lWzBdLnRyaW0oKSxlfSkpKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxSdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViamVjdEROcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuc3ViamVjdEROPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxOdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3VibWl0IiwhMCkpLmVtYmVkUERGPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5lbWJlZFBERixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5mb3JtYXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsieGRwIiwiZm9ybWRhdGEiLCJwZGYiLCJ1cmxlbmNvZGVkIiwieGZkIiwieG1sIl0pLGEuaWQ9ZS5pZHx8IiIsYS50YXJnZXQ9ZS50YXJnZXR8fCIiLGEudGV4dEVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS50ZXh0RW5jb2Rpbmc/ZS50ZXh0RW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS54ZHBDb250ZW50PWUueGRwQ29udGVudHx8IiIsYS5lbmNyeXB0PW51bGwsYS5lbmNyeXB0RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwidGVtcGxhdGUiLCEwKSkuYmFzZVByb2ZpbGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYmFzZVByb2ZpbGUsWyJmdWxsIiwiaW50ZXJhY3RpdmVGb3JtcyJdKSxhLmV4dHJhcz1udWxsLGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXswPT09dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCYmKDAsYy53YXJuKSgiWEZBIC0gTm8gc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZS4iKSx0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0yJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXNbbi4kdGFiSW5kZXhdPTVlM319LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNlYXJjaE5vZGUsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdGFydHNXaXRoKCIjIik/W3RoaXNbbi4kaWRzXS5nZXQoZS5zbGljZSgxKSldOigwLGYuc2VhcmNoTm9kZSkodGhpcyx0LGUsITAsITApfX0se2tleTpuLiR0b1BhZ2VzLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixhLGksbyx1LGwsZixkLHAsZyx2LHksbSxiLHcsaz10aGlzO3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfSkpO2Nhc2UgMjp0aGlzW24uJGV4dHJhXT17b3ZlcmZsb3dOb2RlOm51bGwsZmlyc3RVbnNwbGl0dGFibGU6bnVsbCxjdXJyZW50Q29udGVudEFyZWE6bnVsbCxjdXJyZW50UGFnZUFyZWE6bnVsbCxub0xheW91dEZhaWx1cmU6ITEscGFnZU51bWJlcjoxLHBhZ2VQb3NpdGlvbjoiZmlyc3QiLG9kZE9yRXZlbjoib2RkIixibGFua09yTm90Qmxhbms6Im5vbkJsYW5rIixwYXJhU3RhY2s6W119LCh0PXRoaXMuc3ViZm9ybS5jaGlsZHJlblswXSkucGFnZVNldFtuLiRjbGVhblBhZ2VdKCkscj10LnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW4sYT17bmFtZToiZGl2IixjaGlsZHJlbjpbXX0saT1udWxsLG89bnVsbCx1PW51bGwsdC5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTE/KG89dC5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0xJiZ0LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xPyhvPXQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LmJyZWFrJiZ0LmJyZWFrLmJlZm9yZVRhcmdldD8obz10LmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpOnQuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJnQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhayYmdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLmJlZm9yZVRhcmdldCYmKG89dC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpLG8mJihsPXRoaXNbbi4kc2VhcmNoTm9kZV0odSxvW24uJGdldFBhcmVudF0oKSkpaW5zdGFuY2VvZiBkdCYmKGk9bCxvW24uJGV4dHJhXT17fSksaXx8KGk9clswXSksaVtuLiRleHRyYV09e251bWJlck9mVXNlOjF9LChmPWlbbi4kZ2V0UGFyZW50XSgpKVtuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4OmYucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKSxwYWdlU2V0SW5kZXg6MH0scD1udWxsLGc9bnVsbCx2PSEwLHk9MCxtPTAsYj1TKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciByLG8scyx1LGwsZixoLGIsdyx4LE8sQSxDLEYsUDtyZXR1cm4gUygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHYpe2UubmV4dD03O2JyZWFrfWlmKGEuY2hpbGRyZW4ucG9wKCksMyE9Kyt5KXtlLm5leHQ9NTticmVha31yZXR1cm4oMCxjLndhcm4pKCJYRkEgLSBTb21ldGhpbmcgZ29lcyB3cm9uZzogcGxlYXNlIGZpbGUgYSBidWcuIiksZS5hYnJ1cHQoInJldHVybiIse3Y6YX0pO2Nhc2UgNTplLm5leHQ9ODticmVhaztjYXNlIDc6eT0wO2Nhc2UgODpkPW51bGwsa1tuLiRleHRyYV0uY3VycmVudFBhZ2VBcmVhPWkscj1pW24uJHRvSFRNTF0oKS5odG1sLGEuY2hpbGRyZW4ucHVzaChyKSxwJiYoa1tuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwLHIuY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oaVtuLiRleHRyYV0uc3BhY2UpLmh0bWwpLHA9bnVsbCksZyYmKGtbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCxyLmNoaWxkcmVuLnB1c2goZ1tuLiR0b0hUTUxdKGlbbi4kZXh0cmFdLnNwYWNlKS5odG1sKSxnPW51bGwpLG89aS5jb250ZW50QXJlYS5jaGlsZHJlbixzPXIuY2hpbGRyZW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKCJ4ZmFDb250ZW50YXJlYSIpfSkpLHY9ITEsa1tuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbCxrW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEsdT1mdW5jdGlvbihlKXt2YXIgcj10W24uJGZsdXNoSFRNTF0oKTtyJiYodj12fHxyLmNoaWxkcmVuJiYwIT09ci5jaGlsZHJlbi5sZW5ndGgsc1tlXS5jaGlsZHJlbi5wdXNoKHIpKX0sbD1tLGY9by5sZW5ndGg7Y2FzZSAyMTppZighKGw8Zikpe2UubmV4dD01NjticmVha31pZihoPWtbbi4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYT1vW2xdLGI9e3dpZHRoOmgudyxoZWlnaHQ6aC5ofSxtPTAscCYmKHNbbF0uY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oYikuaHRtbCkscD1udWxsKSxnJiYoc1tsXS5jaGlsZHJlbi5wdXNoKGdbbi4kdG9IVE1MXShiKS5odG1sKSxnPW51bGwpLCEodz10W24uJHRvSFRNTF0oYikpLnN1Y2Nlc3Mpe2UubmV4dD0zMTticmVha31yZXR1cm4gdy5odG1sPyh2PXZ8fHcuaHRtbC5jaGlsZHJlbiYmMCE9PXcuaHRtbC5jaGlsZHJlbi5sZW5ndGgsc1tsXS5jaGlsZHJlbi5wdXNoKHcuaHRtbCkpOiF2JiZhLmNoaWxkcmVuLmxlbmd0aD4xJiZhLmNoaWxkcmVuLnBvcCgpLGUuYWJydXB0KCJyZXR1cm4iLHt2OmF9KTtjYXNlIDMxOmlmKCF3LmlzQnJlYWsoKSl7ZS5uZXh0PTQwO2JyZWFrfWlmKHg9dy5icmVha05vZGUsdShsKSwiYXV0byIhPT14LnRhcmdldFR5cGUpe2UubmV4dD0zNjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw1Myk7Y2FzZSAzNjpyZXR1cm4geC5sZWFkZXImJihwPShwPWtbbi4kc2VhcmNoTm9kZV0oeC5sZWFkZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9wWzBdOm51bGwpLHgudHJhaWxlciYmKGc9KGc9a1tuLiRzZWFyY2hOb2RlXSh4LnRyYWlsZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9nWzBdOm51bGwpLCJwYWdlQXJlYSI9PT14LnRhcmdldFR5cGU/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LGw9MS8wKTp4W24uJGV4dHJhXS50YXJnZXQ/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LG09eFtuLiRleHRyYV0uaW5kZXgrMSxsPTEvMCk6bD14W24uJGV4dHJhXS5pbmRleCxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDQwOmlmKCFrW24uJGV4dHJhXS5vdmVyZmxvd05vZGUpe2UubmV4dD01MjticmVha31yZXR1cm4gTz1rW24uJGV4dHJhXS5vdmVyZmxvd05vZGUsa1tuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPW51bGwsQT1PW24uJGdldEV4dHJhXSgpLEM9QS50YXJnZXQsQS5hZGRMZWFkZXI9bnVsbCE9PUEubGVhZGVyLEEuYWRkVHJhaWxlcj1udWxsIT09QS50cmFpbGVyLHUobCksRj1sLGw9MS8wLEMgaW5zdGFuY2VvZiBkdD9kPUM6QyBpbnN0YW5jZW9mIHBlJiYoLTEhPT0oUD1vLmluZGV4T2YoQykpP1A+Rj9sPVAtMTptPVA6KGQ9Q1tuLiRnZXRQYXJlbnRdKCksbT1kLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoQykpKSxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDUyOnUobCk7Y2FzZSA1MzpsKyssZS5uZXh0PTIxO2JyZWFrO2Nhc2UgNTY6cmV0dXJuIGtbbi4kZXh0cmFdLnBhZ2VOdW1iZXIrPTEsZCYmKGRbbi4kaXNVc2FibGVdKCk/ZFtuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTE6ZD1udWxsKSxpPWR8fGlbbi4kZ2V0TmV4dFBhZ2VdKCksZS5uZXh0PTYxLG51bGw7Y2FzZSA2MTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpO2Nhc2UgMjI6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChiKCksInQwIiwyNCk7Y2FzZSAyNDppZigib2JqZWN0IiE9PWgodz1lLnQwKSl7ZS5uZXh0PTI3O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix3LnYpO2Nhc2UgMjc6ZS5uZXh0PTIyO2JyZWFrO2Nhc2UgMjk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfV0pLHJ9KG4uWEZBT2JqZWN0KTt0LlRlbXBsYXRlPUR0O3ZhciBCdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dCIpKS5pZD1lLmlkfHwiIixuLm1heENoYXJzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXhDaGFycyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRhY2NlcHRXaGl0ZXNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/KHRoaXNbbi4kY29udGVudF09ZSwhMCk6KCgwLGMud2FybikoIlhGQSAtIEludmFsaWQgY29udGVudCBpbiBUZXh0OiAiLmNvbmNhdChlW24uJG5vZGVOYW1lXSwiLiIpKSwhMSl9fSx7a2V5Om4uJG9uVGV4dCx2YWx1ZTpmdW5jdGlvbihlKXt0aGlzW24uJGNvbnRlbnRdaW5zdGFuY2VvZiBuLlhGQU9iamVjdHx8ZChrKHIucHJvdG90eXBlKSxuLiRvblRleHQsdGhpcykuY2FsbCh0aGlzLGUpfX0se2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpeyJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSYmKHRoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS5yZXBsYWNlKC9cclxuL2csIlxuIikpfX0se2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI5XHUyMDI4XG5dLykucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0JiZlLnB1c2godCksZX0pLFtdKS5qb2luKCJcbiIpOnRoaXNbbi4kY29udGVudF1bbi4kdGV4dF0oKX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSl7dmFyIHQ9VSh0aGlzW24uJGNvbnRlbnRdKS5odG1sO3JldHVybiB0aGlzW24uJGNvbnRlbnRdLmluY2x1ZGVzKCJcdTIwMjkiKT8odC5uYW1lPSJkaXYiLHQuY2hpbGRyZW49W10sdGhpc1tuLiRjb250ZW50XS5zcGxpdCgiXHUyMDI5IikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvW1x1MjAyOFxuXS8pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSksZX0pLFtdKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNoaWxkcmVuLnB1c2goe25hbWU6InAiLGNoaWxkcmVuOmV9KX0pKSk6L1tcdTIwMjhcbl0vLnRlc3QodGhpc1tuLiRjb250ZW50XSkmJih0Lm5hbWU9ImRpdiIsdC5jaGlsZHJlbj1bXSx0aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI4XG5dLykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jaGlsZHJlbi5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTplfSx7bmFtZToiYnIifSl9KSkpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfXJldHVybiB0aGlzW24uJGNvbnRlbnRdW24uJHRvSFRNTF0oZSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCk7dC5UZXh0PUJ0O3ZhciBVdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dEVkaXQiLCEwKSkuYWxsb3dSaWNoVGV4dD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5oU2Nyb2xsUG9saWN5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSksbi5pZD1lLmlkfHwiIixuLm11bHRpTGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubXVsdGlMaW5lLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV8fDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnZTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudlNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIiksYT10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPWEgaW5zdGFuY2VvZiBPZT8xOjApLHQ9MT09PXRoaXMubXVsdGlMaW5lP3tuYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlczp7ZGF0YUlkOmFbbi4kZGF0YV0mJmFbbi4kZGF0YV1bbi4kdWlkXXx8YVtuLiR1aWRdLGZpZWxkSWQ6YVtuLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6ciwiYXJpYS1sYWJlbCI6QihhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTp7bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGRhdGFJZDphW24uJGRhdGFdJiZhW24uJGRhdGFdW24uJHVpZF18fGFbbi4kdWlkXSxmaWVsZElkOmFbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnIsImFyaWEtbGFiZWwiOkIoYSksImFyaWEtcmVxdWlyZWQiOiExfX0sUihhKSYmKHQuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHQuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt0XX0pfX1dKSxyfShuLlhGQU9iamVjdCksJHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXNbbi4kY29udGVudF0udHJpbSgpO3RoaXNbbi4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFUodGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLlN0cmluZ09iamVjdCksWHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWVTdGFtcCIpKS5pZD1lLmlkfHwiIixuLnNlcnZlcj1lLnNlcnZlcnx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksSHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRvb2xUaXAiKSkuaWQ9ZS5pZHx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCkscXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInRyYXZlcnNhbCIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5leHRyYXM9bnVsbCxhLnRyYXZlcnNlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxHdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidHJhdmVyc2UiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5vcGVyYXRpb249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKSxuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6Im5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZXJhdGlvbn19LHtrZXk6bi4kaXNUcmFuc3BhcmVudCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX1dKSxyfShuLlhGQU9iamVjdCksenQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInVpIiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ucGljdHVyZT1udWxsLG4uYmFyY29kZT1udWxsLG4uYnV0dG9uPW51bGwsbi5jaGVja0J1dHRvbj1udWxsLG4uY2hvaWNlTGlzdD1udWxsLG4uZGF0ZVRpbWVFZGl0PW51bGwsbi5kZWZhdWx0VWk9bnVsbCxuLmltYWdlRWRpdD1udWxsLG4ubnVtZXJpY0VkaXQ9bnVsbCxuLnBhc3N3b3JkRWRpdD1udWxsLG4uc2lnbmF0dXJlPW51bGwsbi50ZXh0RWRpdD1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXNbbi4kZXh0cmFdKXt2YXIgZSx0PU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3IodC5zKCk7IShlPXQubigpKS5kb25lOyl7dmFyIHI9ZS52YWx1ZTtpZigiZXh0cmFzIiE9PXImJiJwaWN0dXJlIiE9PXIpe3ZhciBhPXRoaXNbcl07aWYoYSBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXJldHVybiB0aGlzW24uJGV4dHJhXT1hLGF9fX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX10aGlzW24uJGV4dHJhXT1udWxsfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/dFtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpLFd0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWxpZGF0ZSIsITApKS5mb3JtYXRUZXN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKSxuLmlkPWUuaWR8fCIiLG4ubnVsbFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKSxuLnNjcmlwdFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ubWVzc2FnZT1udWxsLG4ucGljdHVyZT1udWxsLG4uc2NyaXB0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWx1ZSIsITApKS5pZD1lLmlkfHwiIixuLm92ZXJyaWRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5vdmVycmlkZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5hcmM9bnVsbCxuLmJvb2xlYW49bnVsbCxuLmRhdGU9bnVsbCxuLmRhdGVUaW1lPW51bGwsbi5kZWNpbWFsPW51bGwsbi5leERhdGE9bnVsbCxuLmZsb2F0PW51bGwsbi5pbWFnZT1udWxsLG4uaW50ZWdlcj1udWxsLG4ubGluZT1udWxsLG4ucmVjdGFuZ2xlPW51bGwsbi50ZXh0PW51bGwsbi50aW1lPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0UGFyZW50XSgpO2lmKHQgaW5zdGFuY2VvZiBCZSYmdC51aSYmdC51aS5pbWFnZUVkaXQpcmV0dXJuIHRoaXMuaW1hZ2V8fCh0aGlzLmltYWdlPW5ldyBXZSh7fSksdGhpc1tuLiRhcHBlbmRDaGlsZF0odGhpcy5pbWFnZSkpLHZvaWQodGhpcy5pbWFnZVtuLiRjb250ZW50XT1lW24uJGNvbnRlbnRdKTt2YXIgcj1lW24uJG5vZGVOYW1lXTtpZihudWxsPT09dGhpc1tyXSl7dmFyIGEsaT1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBvPWEudmFsdWUscz10aGlzW29dO3MgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCYmKHRoaXNbb109bnVsbCx0aGlzW24uJHJlbW92ZUNoaWxkXShzKSl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXNbZVtuLiRub2RlTmFtZV1dPWUsdGhpc1tuLiRhcHBlbmRDaGlsZF0oZSl9ZWxzZSB0aGlzW3JdW24uJGNvbnRlbnRdPWVbbi4kY29udGVudF19KSl9LHtrZXk6bi4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuZXhEYXRhKXJldHVybiJzdHJpbmciPT10eXBlb2YgdGhpcy5leERhdGFbbi4kY29udGVudF0/dGhpcy5leERhdGFbbi4kY29udGVudF0udHJpbSgpOnRoaXMuZXhEYXRhW24uJGNvbnRlbnRdW24uJHRleHRdKCkudHJpbSgpO3ZhciBlLHQ9TyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KXt2YXIgcj1lLnZhbHVlO2lmKCJpbWFnZSIhPT1yKXt2YXIgYT10aGlzW3JdO2lmKGEgaW5zdGFuY2VvZiBuLlhGQU9iamVjdClyZXR1cm4oYVtuLiRjb250ZW50XXx8IiIpLnRvU3RyaW5nKCkudHJpbSgpfX19Y2F0Y2goZSl7dC5lKGUpfWZpbmFsbHl7dC5mKCl9cmV0dXJuIG51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIGE9dGhpc1t0LnZhbHVlXTtpZihhIGluc3RhbmNlb2Ygbi5YRkFPYmplY3QpcmV0dXJuIGFbbi4kdG9IVE1MXShlKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpO3QuVmFsdWU9VnQ7dmFyIFl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJ2YXJpYWJsZXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW50ZWdlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm1hbmlmZXN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2NyaXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19XSkscn0obi5YRkFPYmplY3QpLEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3kodGhpcyxlKX1yZXR1cm4gdihlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXt2YXIgYT1lW3RdKHIpO3JldHVybiBhW24uJHNldFNldEF0dHJpYnV0ZXNdKHIpLGF9fX0se2tleToiYXBwZWFyYW5jZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHKGUpfX0se2tleToiYXJjIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHooZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFcoZSl9fSx7a2V5OiJhc3Npc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImJhcmNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWShlKX19LHtrZXk6ImJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImJpbmRJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKKGUpfX0se2tleToiYm9va2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiYm9vbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRKGUpfX0se2tleToiYm9yZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiYnJlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJicmVha0FmdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiYnJlYWtCZWZvcmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbmUoZSl9fSx7a2V5OiJidXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYWUoZSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJjYXB0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG9lKGUpfX0se2tleToiY2VydGlmaWNhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgc2UoZSl9fSx7a2V5OiJjZXJ0aWZpY2F0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJjaGVja0J1dHRvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1ZShlKX19LHtrZXk6ImNob2ljZUxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJjb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImNvbWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJjb25uZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGRlKGUpfX0se2tleToiY29udGVudEFyZWEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJjb3JuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ2UoZSl9fSx7a2V5OiJkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZlKGUpfX0se2tleToiZGF0ZVRpbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJkYXRlVGltZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbWUoZSl9fSx7a2V5OiJkZWNpbWFsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGJlKGUpfX0se2tleToiZGVmYXVsdFVpIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdlKGUpfX0se2tleToiZGVzYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBTZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeGUoZSl9fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE9lKGUpfX0se2tleToiZWRnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IENlKGUpfX0se2tleToiZW5jb2RpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZlKGUpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQZShlKX19LHtrZXk6ImVuY3J5cHREYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJZShlKX19LHtrZXk6ImVuY3J5cHRpb25NZXRob2QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRWUoZSl9fSx7a2V5OiJlbmNyeXB0aW9uTWV0aG9kcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6ImV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToiZXhEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF9lKGUpfX0se2tleToiZXhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTGUoZSl9fSx7a2V5OiJleGNsR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJleGVjdXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToiZXh0cmFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToiZmllbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQmUoZSl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToiZmlsdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToiZmxvYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWGUoZSl9fSx7a2V5OiJmb250Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEhlKGUpfX0se2tleToiZm9ybWF0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHFlKGUpfX0se2tleToiaGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHZShlKX19LHtrZXk6Imh5cGhlbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToiaW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgV2UoZSl9fSx7a2V5OiJpbWFnZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVmUoZSl9fSx7a2V5OiJpbnRlZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFllKGUpfX0se2tleToiaXNzdWVycyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBLZShlKX19LHtrZXk6Iml0ZW1zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEplKGUpfX0se2tleToia2VlcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaZShlKX19LHtrZXk6ImtleVVzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFFlKGUpfX0se2tleToibGluZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBldChlKX19LHtrZXk6ImxpbmVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0dChlKX19LHtrZXk6ImxvY2tEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBydChlKX19LHtrZXk6Im1hbmlmZXN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG50KGUpfX0se2tleToibWFyZ2luIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToibWRwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToibWVkaXVtIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG90KGUpfX0se2tleToibWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6Im51bWVyaWNFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToib2NjdXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJvaWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJvaWRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZ0KGUpfX0se2tleToib3ZlcmZsb3ciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaHQoZSl9fSx7a2V5OiJwYWdlQXJlYSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InBhZ2VTZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJwYXJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGd0KGUpfX0se2tleToicGFzc3dvcmRFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZ0KGUpfX0se2tleToicGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5dChlKX19LHtrZXk6InBpY3R1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJwcm90byIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBidChlKX19LHtrZXk6InJhZGlhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3dChlKX19LHtrZXk6InJlYXNvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrdChlKX19LHtrZXk6InJlYXNvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJyZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJyZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgT3QoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQXQoZSl9fSx7a2V5OiJzZXRQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDdChlKX19LHtrZXk6InNpZ25EYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZ0KGUpfX0se2tleToic2lnbmF0dXJlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToic2lnbmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUdChlKX19LHtrZXk6InNvbGlkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToic3BlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRXQoZSl9fSx7a2V5OiJzdGlwcGxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGp0KGUpfX0se2tleToic3ViZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNdChlKX19LHtrZXk6InN1YmZvcm1TZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJzdWJqZWN0RE4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTHQoZSl9fSx7a2V5OiJzdWJqZWN0RE5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToic3VibWl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE50KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ0ZXh0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJ0KGUpfX0se2tleToidGV4dEVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVXQoZSl9fSx7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToidGltZVN0YW1wIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFh0KGUpfX0se2tleToidG9vbFRpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InRyYXZlcnNhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InRyYXZlcnNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEd0KGUpfX0se2tleToidWkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgenQoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19LHtrZXk6InZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFZ0KGUpfX0se2tleToidmFyaWFibGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFl0KGUpfX1dKSxlfSgpO3QuVGVtcGxhdGVOYW1lc3BhY2U9S3R9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hZGRIVE1MPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1lW24uJGV4dHJhXSx1PXMuYXZhaWxhYmxlU3BhY2UsbD1pKHIsNCksZj1sWzBdLGg9bFsxXSxkPWxbMl0scD1sWzNdO3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6cy53aWR0aD1NYXRoLm1heChzLndpZHRoLGYrZCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQsaCtwKSxzLmNoaWxkcmVuLnB1c2godCk7YnJlYWs7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6cy5saW5lJiYxIT09cy5hdHRlbXB0fHwocy5saW5lPWMoZSxbXSkscy5jaGlsZHJlbi5wdXNoKHMubGluZSkscy5udW1iZXJJbkxpbmU9MCkscy5udW1iZXJJbkxpbmUrPTEscy5saW5lLmNoaWxkcmVuLnB1c2godCksMD09PXMuYXR0ZW1wdD8ocy5jdXJyZW50V2lkdGgrPWQscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQscy5wcmV2SGVpZ2h0K3ApKToocy5jdXJyZW50V2lkdGg9ZCxzLnByZXZIZWlnaHQ9cy5oZWlnaHQscy5oZWlnaHQrPXAscy5hdHRlbXB0PTApLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aCxzLmN1cnJlbnRXaWR0aCk7YnJlYWs7Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpzLmNoaWxkcmVuLnB1c2godCkscy53aWR0aCs9ZCxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxwKTt2YXIgZyx2PSgwLGEubWVhc3VyZVRvU3RyaW5nKShzLmhlaWdodCkseT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9byhlKSkpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19KHMuY2hpbGRyZW4pO3RyeXtmb3IoeS5zKCk7IShnPXkubigpKS5kb25lOylnLnZhbHVlLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PXZ9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9YnJlYWs7Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cy53aWR0aD1NYXRoLm1pbih1LndpZHRoLE1hdGgubWF4KHMud2lkdGgsZCkpLHMuaGVpZ2h0Kz1wLHMuY2hpbGRyZW4ucHVzaCh0KX19LHQuY2hlY2tEaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09PWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSlyZXR1cm4hMDtpZigwPT09ZS53fHwwPT09ZS5oKXJldHVybiEwO3ZhciByPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKSxhPXJbbi4kZXh0cmFdJiZyW24uJGV4dHJhXS5hdHRlbXB0fHwwLG89aShmdW5jdGlvbihlKXt2YXIgdCxyLG49IiI9PT1lLnc/TmFOOmUudyxhPSIiPT09ZS5oP05hTjplLmgsaT0wLG89MDtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOmk9bi8yLG89YTticmVhaztjYXNlImJvdHRvbUxlZnQiOmk9MCxvPWE7YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6aT1uLG89YTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6aT1uLzIsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0IjppPTAsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6aT1uLG89YS8yO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjppPW4vMixvPTA7YnJlYWs7Y2FzZSJ0b3BSaWdodCI6aT1uLG89MH1zd2l0Y2goZS5yb3RhdGV8fDApe2Nhc2UgMDp0PS1pLHI9LW87YnJlYWs7Y2FzZSA5MDp0PS1vLHI9aTt2YXIgcz1bYSwtbl07bj1zWzBdLGE9c1sxXTticmVhaztjYXNlIDE4MDp0PWkscj1vO3ZhciBjPVstbiwtYV07bj1jWzBdLGE9Y1sxXTticmVhaztjYXNlIDI3MDp0PW8scj0taTt2YXIgdT1bLWEsbl07bj11WzBdLGE9dVsxXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxuKSxlLnkrcitNYXRoLm1pbigwLGEpLE1hdGguYWJzKG4pLE1hdGguYWJzKGEpXX0oZSksNCkscz1vWzFdLGM9b1syXSx1PW9bM107c3dpdGNoKHIubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWE/ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT8iIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTI6dC53aWR0aD4yOiEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fDA9PT1yW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJnQuaGVpZ2h0PjI6dC53aWR0aD4yKTohIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIj09PWUud3x8TWF0aC5yb3VuZChjLXQud2lkdGgpPD0yfHwhcltuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKSYmdC5oZWlnaHQ+MjtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm4hIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCgiIj09PWUuaHx8ZVtuLiRpc1NwbGl0dGFibGVdKCk/KCIiPT09ZS53fHxNYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fCFyW24uJGlzVGhlcmVNb3JlV2lkdGhdKCkpJiZ0LmhlaWdodD4yOk1hdGgucm91bmQodS10LmhlaWdodCk8PTIpO2Nhc2UicG9zaXRpb24iOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodStzLXQuaGVpZ2h0KTw9Mnx8dStzPmVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWEuaDtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodS10LmhlaWdodCk8PTI7ZGVmYXVsdDpyZXR1cm4hMH19LHQuZmx1c2hIVE1MPWZ1bmN0aW9uKGUpe2lmKCFlW24uJGV4dHJhXSlyZXR1cm4gbnVsbDt2YXIgdD17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmVbbi4kZXh0cmFdLmF0dHJpYnV0ZXMsY2hpbGRyZW46ZVtuLiRleHRyYV0uY2hpbGRyZW59O2lmKGVbbi4kZXh0cmFdLmZhaWxpbmdOb2RlKXt2YXIgcj1lW24uJGV4dHJhXS5mYWlsaW5nTm9kZVtuLiRmbHVzaEhUTUxdKCk7ciYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goYyhlLFtyXSkpOnQuY2hpbGRyZW4ucHVzaChyKSl9cmV0dXJuIDA9PT10LmNoaWxkcmVuLmxlbmd0aD9udWxsOnR9LHQuZ2V0QXZhaWxhYmxlU3BhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuLiRleHRyYV0uYXZhaWxhYmxlU3BhY2Uscj1lLm1hcmdpbj9lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldDowLGE9ZS5tYXJnaW4/ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ6MDtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09ZVtuLiRleHRyYV0uYXR0ZW1wdD97d2lkdGg6dC53aWR0aC1hLWVbbi4kZXh0cmFdLmN1cnJlbnRXaWR0aCxoZWlnaHQ6dC5oZWlnaHQtci1lW24uJGV4dHJhXS5wcmV2SGVpZ2h0fTp7d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm57d2lkdGg6ZVtuLiRleHRyYV0uY29sdW1uV2lkdGhzLnNsaWNlKGVbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSkpLGhlaWdodDp0LmhlaWdodC1hfTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm57d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07ZGVmYXVsdDpyZXR1cm4gdH19O3ZhciBuPXIoMjA2KSxhPXIoMjEzKTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fG8oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe3JldHVybntuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsibHItdGIiPT09ZS5sYXlvdXQ/InhmYUxyIjoieGZhUmwiXX0sY2hpbGRyZW46dH19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29tcHV0ZUJib3g9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhO2lmKCIiIT09ZS53JiYiIiE9PWUuaClhPVtlLngsZS55LGUudyxlLmhdO2Vsc2V7aWYoIXIpcmV0dXJuIG51bGw7dmFyIGk9ZS53O2lmKCIiPT09aSl7aWYoMD09PWUubWF4Vyl7dmFyIG89ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2k9InBvc2l0aW9uIj09PW8ubGF5b3V0JiYiIiE9PW8udz8wOmUubWluV31lbHNlIGk9TWF0aC5taW4oZS5tYXhXLHIud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD11KGkpfXZhciBzPWUuaDtpZigiIj09PXMpe2lmKDA9PT1lLm1heEgpe3ZhciBjPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtzPSJwb3NpdGlvbiI9PT1jLmxheW91dCYmIiIhPT1jLmg/MDplLm1pbkh9ZWxzZSBzPU1hdGgubWluKGUubWF4SCxyLmhlaWdodCk7dC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD11KHMpfWE9W2UueCxlLnksaSxzXX1yZXR1cm4gYX0sdC5jcmVhdGVXcmFwcGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5hdHRyaWJ1dGVzLGE9ci5zdHlsZSxpPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhV3JhcHBlciJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOltdfTtpZihyLmNsYXNzLnB1c2goInhmYVdyYXBwZWQiKSxlLmJvcmRlcil7dmFyIG8scyxjPWUuYm9yZGVyW24uJGV4dHJhXSx1PWMud2lkdGhzLGw9Yy5pbnNldHMsZj1sWzBdLGQ9bFszXSxwPWxbMF0rbFsyXSxnPWxbMV0rbFszXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpmLT11WzBdLzIsZC09dVszXS8yLG89ImNhbGMoMTAwJSArICIuY29uY2F0KCh1WzFdK3VbM10pLzItZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQoKHVbMF0rdVsyXSkvMi1wLCJweCkiKTticmVhaztjYXNlImxlZnQiOmYtPXVbMF0sZC09dVszXSxvPSJjYWxjKDEwMCUgKyAiLmNvbmNhdCh1WzFdK3VbM10tZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQodVswXSt1WzJdLXAsInB4KSIpO2JyZWFrO2Nhc2UicmlnaHQiOm89Zz8iY2FsYygxMDAlIC0gIi5jb25jYXQoZywicHgpIik6IjEwMCUiLHM9cD8iY2FsYygxMDAlIC0gIi5jb25jYXQocCwicHgpIik6IjEwMCUifXZhciB2PVsieGZhQm9yZGVyIl07aChlLmJvcmRlcikmJnYucHVzaCgieGZhUHJpbnRPbmx5Iik7Zm9yKHZhciB5PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOnYsc3R5bGU6e3RvcDoiIi5jb25jYXQoZiwicHgiKSxsZWZ0OiIiLmNvbmNhdChkLCJweCIpLHdpZHRoOm8saGVpZ2h0OnN9fSxjaGlsZHJlbjpbXX0sbT0wLGI9WyJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyU3R5bGUiXTttPGIubGVuZ3RoO20rKyl7dmFyIHc9YlttXTt2b2lkIDAhPT1hW3ddJiYoeS5hdHRyaWJ1dGVzLnN0eWxlW3ddPWFbd10sZGVsZXRlIGFbd10pfWkuY2hpbGRyZW4ucHVzaCh5LHQpfWVsc2UgaS5jaGlsZHJlbi5wdXNoKHQpO2Zvcih2YXIgaz0wLFM9WyJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENsaXAiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtT3JpZ2luIiwidmlzaWJpbGl0eSJdO2s8Uy5sZW5ndGg7aysrKXt2YXIgeD1TW2tdO3ZvaWQgMCE9PWFbeF0mJihpLmF0dHJpYnV0ZXMuc3R5bGVbeF09YVt4XSxkZWxldGUgYVt4XSl9cmV0dXJuImFic29sdXRlIj09PWEucG9zaXRpb24/aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI6aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZGVsZXRlIGEucG9zaXRpb24sYS5hbGlnblNlbGYmJihpLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPWEuYWxpZ25TZWxmLGRlbGV0ZSBhLmFsaWduU2VsZiksaX0sdC5maXhEaW1lbnNpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZih0LmxheW91dCYmdC5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgcixhPXRbbi4kZXh0cmFdLGk9ZS5jb2xTcGFuO3I9LTE9PT1pP2EuY29sdW1uV2lkdGhzLnNsaWNlKGEuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKTphLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4sYS5jdXJyZW50Q29sdW1uK2kpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksaXNOYU4ocil8fChlLnc9cil9dC5sYXlvdXQmJiJwb3NpdGlvbiIhPT10LmxheW91dCYmKGUueD1lLnk9MCksInRhYmxlIj09PWUubGF5b3V0JiYiIj09PWUudyYmQXJyYXkuaXNBcnJheShlLmNvbHVtbldpZHRocykmJihlLnc9ZS5jb2x1bW5XaWR0aHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSl9LHQuZml4VGV4dEluZGVudD1mdW5jdGlvbihlKXt2YXIgdD0oMCxpLmdldE1lYXN1cmVtZW50KShlLnRleHRJbmRlbnQsIjBweCIpO2lmKCEodD49MCkpe3ZhciByPSJwYWRkaW5nIisoImxlZnQiPT0oInJpZ2h0Ij09PWUudGV4dEFsaWduPyJyaWdodCI6ImxlZnQiKT8iTGVmdCI6IlJpZ2h0Iiksbj0oMCxpLmdldE1lYXN1cmVtZW50KShlW3JdLCIwcHgiKTtlW3JdPSIiLmNvbmNhdChuLXQsInB4Iil9fSx0LmZpeFVSTD1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUsbnVsbCx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO3JldHVybiB0P3QuaHJlZjpudWxsfSx0LmlzUHJpbnRPbmx5PWgsdC5sYXlvdXRDbGFzcz1mdW5jdGlvbihlKXtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UicG9zaXRpb24iOmRlZmF1bHQ6cmV0dXJuInhmYVBvc2l0aW9uIjtjYXNlImxyLXRiIjpyZXR1cm4ieGZhTHJUYiI7Y2FzZSJybC1yb3ciOnJldHVybiJ4ZmFSbFJvdyI7Y2FzZSJybC10YiI6cmV0dXJuInhmYVJsVGIiO2Nhc2Uicm93IjpyZXR1cm4ieGZhUm93IjtjYXNlInRhYmxlIjpyZXR1cm4ieGZhVGFibGUiO2Nhc2UidGIiOnJldHVybiJ4ZmFUYiJ9fSx0LmxheW91dE5vZGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsLGE9bnVsbCxpPSExO2lmKCghZS53fHwhZS5oKSYmZS52YWx1ZSl7dmFyIG89MCxzPTA7ZS5tYXJnaW4mJihvPWUubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0LHM9ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBjPW51bGwsdT1udWxsO2UucGFyYSYmKHU9T2JqZWN0LmNyZWF0ZShudWxsKSxjPSIiPT09ZS5wYXJhLmxpbmVIZWlnaHQ/bnVsbDplLnBhcmEubGluZUhlaWdodCx1LnRvcD0iIj09PWUucGFyYS5zcGFjZUFib3ZlPzA6ZS5wYXJhLnNwYWNlQWJvdmUsdS5ib3R0b209IiI9PT1lLnBhcmEuc3BhY2VCZWxvdz8wOmUucGFyYS5zcGFjZUJlbG93LHUubGVmdD0iIj09PWUucGFyYS5tYXJnaW5MZWZ0PzA6ZS5wYXJhLm1hcmdpbkxlZnQsdS5yaWdodD0iIj09PWUucGFyYS5tYXJnaW5SaWdodD8wOmUucGFyYS5tYXJnaW5SaWdodCk7dmFyIGw9ZS5mb250O2lmKCFsKWZvcih2YXIgaD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxkPWVbbi4kZ2V0UGFyZW50XSgpO2QmJmQhPT1oOyl7aWYoZC5mb250KXtsPWQuZm9udDticmVha31kPWRbbi4kZ2V0UGFyZW50XSgpfXZhciBwPShlLnd8fHQud2lkdGgpLW8sZz1lW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI7aWYoZS52YWx1ZS5leERhdGEmJmUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdJiYidGV4dC9odG1sIj09PWUudmFsdWUuZXhEYXRhLmNvbnRlbnRUeXBlKXt2YXIgdj1mKGUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdLGwsdSxjLGcscCk7YT12LndpZHRoLHI9di5oZWlnaHQsaT12LmlzQnJva2VufWVsc2V7dmFyIHk9ZS52YWx1ZVtuLiR0ZXh0XSgpO2lmKHkpe3ZhciBtPWYoeSxsLHUsYyxnLHApO2E9bS53aWR0aCxyPW0uaGVpZ2h0LGk9bS5pc0Jyb2tlbn19bnVsbD09PWF8fGUud3x8KGErPW8pLG51bGw9PT1yfHxlLmh8fChyKz1zKX1yZXR1cm57dzphLGg6cixpc0Jyb2tlbjppfX0sdC5tZWFzdXJlVG9TdHJpbmc9dSx0LnNldEFjY2Vzcz1mdW5jdGlvbihlLHQpe3N3aXRjaChlLmFjY2Vzcyl7Y2FzZSJub25JbnRlcmFjdGl2ZSI6dC5wdXNoKCJ4ZmFOb25JbnRlcmFjdGl2ZSIpO2JyZWFrO2Nhc2UicmVhZE9ubHkiOnQucHVzaCgieGZhUmVhZE9ubHkiKTticmVhaztjYXNlInByb3RlY3RlZCI6dC5wdXNoKCJ4ZmFEaXNhYmxlZCIpfX0sdC5zZXRGb250RmFtaWx5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHIpe3ZhciBhPSgwLGkuc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpO24uZm9udEZhbWlseT0nIicuY29uY2F0KGEsJyInKTt2YXIgcz1yLmZpbmQoYSk7aWYocyl7dmFyIGM9cy5yZWd1bGFyLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHk7YyE9PWEmJihuLmZvbnRGYW1pbHk9JyInLmNvbmNhdChjLCciJykpO3ZhciB1PWQodCk7aWYodSYmIiIhPT11LmxpbmVIZWlnaHQpcmV0dXJuO2lmKG4ubGluZUhlaWdodClyZXR1cm47dmFyIGw9KDAsby5zZWxlY3RGb250KShlLHMpO2wmJihuLmxpbmVIZWlnaHQ9TWF0aC5tYXgoMS4yLGwubGluZUhlaWdodCkpfX1lbHNlIGRlbGV0ZSBuLmZvbnRGYW1pbHl9LHQuc2V0TWluTWF4RGltZW5zaW9ucz1mdW5jdGlvbihlLHQpeyJwb3NpdGlvbiI9PT1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCkubGF5b3V0JiYoZS5taW5XPjAmJih0Lm1pbldpZHRoPXUoZS5taW5XKSksZS5tYXhXPjAmJih0Lm1heFdpZHRoPXUoZS5tYXhXKSksZS5taW5IPjAmJih0Lm1pbkhlaWdodD11KGUubWluSCkpLGUubWF4SD4wJiYodC5tYXhIZWlnaHQ9dShlLm1heEgpKSl9LHQuc2V0UGFyYT1mdW5jdGlvbihlLHQscil7aWYoci5hdHRyaWJ1dGVzLmNsYXNzJiZyLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSl7dCYmKCIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKSwiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKSk7dmFyIGE9ZChlKTtpZihhKXt2YXIgaT1yLmF0dHJpYnV0ZXMuc3R5bGU7c3dpdGNoKGkuZGlzcGxheT0iZmxleCIsaS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGEudkFsaWduKXtjYXNlInRvcCI6aS5qdXN0aWZ5Q29udGVudD0ic3RhcnQiO2JyZWFrO2Nhc2UiYm90dG9tIjppLmp1c3RpZnlDb250ZW50PSJlbmQiO2JyZWFrO2Nhc2UibWlkZGxlIjppLmp1c3RpZnlDb250ZW50PSJjZW50ZXIifWZvcih2YXIgbz1hW24uJHRvU3R5bGVdKCkscz0wLHU9T2JqZWN0LmVudHJpZXMobyk7czx1Lmxlbmd0aDtzKyspe3ZhciBsPSgyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHA9dVtzXSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7Zm9yKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShwKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsMik6dm9pZCAwfX0ocCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksZj1sWzBdLGg9bFsxXTtmIGluIGl8fChpW2ZdPWgpfX19dmFyIHB9LHQudG9TdHlsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkocj4xP3ItMTowKSxvPTE7bzxyO28rKylpW28tMV09YXJndW1lbnRzW29dO2Zvcih2YXIgcz0wLGM9aTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXSxmPWVbdV07aWYobnVsbCE9PWYpaWYobC5oYXNPd25Qcm9wZXJ0eSh1KSlsW3VdKGUsdCk7ZWxzZSBpZihmIGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBoPWZbbi4kdG9TdHlsZV0oKTtoP09iamVjdC5hc3NpZ24odCxoKTooMCxhLndhcm4pKCIoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICIuY29uY2F0KHUsIiBub3QgaW1wbGVtZW50ZWQgeWV0IikpfX1yZXR1cm4gdH07dmFyIG49cigyMDYpLGE9cigyKSxpPXIoMjA3KSxvPXIoMjE0KSxzPXIoMjE1KTtmdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/IjBweCI6TnVtYmVyLmlzSW50ZWdlcihlKT8iIi5jb25jYXQoZSwicHgiKToiIi5jb25jYXQoZS50b0ZpeGVkKDIpLCJweCIpfXZhciBsPXthbmNob3JUeXBlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKHImJighci5sYXlvdXR8fCJwb3NpdGlvbiI9PT1yLmxheW91dCkpc3dpdGNoKCJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKSxlLmFuY2hvclR5cGUpe2Nhc2UiYm90dG9tQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC0xMDAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkiO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLDApIjticmVhaztjYXNlInRvcFJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwwKSJ9fSxkaW1lbnNpb25zOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGE9ZS53LGk9ZS5oO2lmKHIubGF5b3V0JiZyLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciBvLHM9cltuLiRleHRyYV0sYz1lLmNvbFNwYW47LTE9PT1jPyhvPXMuY29sdW1uV2lkdGhzLnNsaWNlKHMuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSxzLmN1cnJlbnRDb2x1bW49MCk6KG89cy5jb2x1bW5XaWR0aHMuc2xpY2Uocy5jdXJyZW50Q29sdW1uLHMuY3VycmVudENvbHVtbitjKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApLHMuY3VycmVudENvbHVtbj0ocy5jdXJyZW50Q29sdW1uK2UuY29sU3Bhbiklcy5jb2x1bW5XaWR0aHMubGVuZ3RoKSxpc05hTihvKXx8KGE9ZS53PW8pfXQud2lkdGg9IiIhPT1hP3UoYSk6ImF1dG8iLHQuaGVpZ2h0PSIiIT09aT91KGkpOiJhdXRvIn0scG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgcj1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk7ciYmci5sYXlvdXQmJiJwb3NpdGlvbiIhPT1yLmxheW91dHx8KHQucG9zaXRpb249ImFic29sdXRlIix0LmxlZnQ9dShlLngpLHQudG9wPXUoZS55KSl9LHJvdGF0ZTpmdW5jdGlvbihlLHQpe2Uucm90YXRlJiYoInRyYW5zZm9ybSJpbiB0fHwodC50cmFuc2Zvcm09IiIpLHQudHJhbnNmb3JtKz0icm90YXRlKC0iLmNvbmNhdChlLnJvdGF0ZSwiZGVnKSIpLHQudHJhbnNmb3JtT3JpZ2luPSJ0b3AgbGVmdCIpfSxwcmVzZW5jZTpmdW5jdGlvbihlLHQpe3N3aXRjaChlLnByZXNlbmNlKXtjYXNlImludmlzaWJsZSI6dC52aXNpYmlsaXR5PSJoaWRkZW4iO2JyZWFrO2Nhc2UiaGlkZGVuIjpjYXNlImluYWN0aXZlIjp0LmRpc3BsYXk9Im5vbmUifX0saEFsaWduOmZ1bmN0aW9uKGUsdCl7aWYoInBhcmEiPT09ZVtuLiRub2RlTmFtZV0pc3dpdGNoKGUuaEFsaWduKXtjYXNlImp1c3RpZnlBbGwiOnQudGV4dEFsaWduPSJqdXN0aWZ5LWFsbCI7YnJlYWs7Y2FzZSJyYWRpeCI6dC50ZXh0QWxpZ249ImxlZnQiO2JyZWFrO2RlZmF1bHQ6dC50ZXh0QWxpZ249ZS5oQWxpZ259ZWxzZSBzd2l0Y2goZS5oQWxpZ24pe2Nhc2UibGVmdCI6dC5hbGlnblNlbGY9InN0YXJ0IjticmVhaztjYXNlImNlbnRlciI6dC5hbGlnblNlbGY9ImNlbnRlciI7YnJlYWs7Y2FzZSJyaWdodCI6dC5hbGlnblNlbGY9ImVuZCJ9fSxtYXJnaW46ZnVuY3Rpb24oZSx0KXtlLm1hcmdpbiYmKHQubWFyZ2luPWUubWFyZ2luW24uJHRvU3R5bGVdKCkubWFyZ2luKX19O2Z1bmN0aW9uIGYoZSx0LHIsYSxpLG8pe3ZhciBjPW5ldyBzLlRleHRNZWFzdXJlKHQscixhLGkpO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9jLmFkZFN0cmluZyhlKTplW24uJHB1c2hHbHlwaHNdKGMpLGMuY29tcHV0ZShvKX1mdW5jdGlvbiBoKGUpe3JldHVybiBlLnJlbGV2YW50Lmxlbmd0aD4wJiYhZS5yZWxldmFudFswXS5leGNsdWRlZCYmInByaW50Ij09PWUucmVsZXZhbnRbMF0udmlld25hbWV9ZnVuY3Rpb24gZChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFyYVN0YWNrO3JldHVybiB0Lmxlbmd0aD90LmF0KC0xKTpudWxsfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnRGaW5kZXI9dm9pZCAwLHQuZ2V0TWV0cmljcz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9bnVsbDtpZihlKXt2YXIgaT0oMCxhLnN0cmlwUXVvdGVzKShlLnR5cGVmYWNlKSxvPWVbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKGkpO3I9ZChlLG8pfWlmKCFyKXJldHVybntsaW5lSGVpZ2h0OjEyLGxpbmVHYXA6MixsaW5lTm9HYXA6MTB9O3ZhciBzPWUuc2l6ZXx8MTAsYz1yLmxpbmVIZWlnaHQ/TWF0aC5tYXgodD8wOjEuMixyLmxpbmVIZWlnaHQpOjEuMix1PXZvaWQgMD09PXIubGluZUdhcD8uMjpyLmxpbmVHYXA7cmV0dXJue2xpbmVIZWlnaHQ6YypzLGxpbmVHYXA6dSpzLGxpbmVOb0dhcDpNYXRoLm1heCgxLGMtdSkqc319LHQuc2VsZWN0Rm9udD1kO3ZhciBuPXIoMjA2KSxhPXIoMjA3KSxpPXIoMik7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXUoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1vKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09byhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PW8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmZvbnRzPW5ldyBNYXAsdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMud2FybmVkPW5ldyBTZXQsdGhpcy5kZWZhdWx0Rm9udD1udWxsLHRoaXMuYWRkKHQpfXZhciB0LHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsbj1jKGUpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGE9dC52YWx1ZTt0aGlzLmFkZFBkZkZvbnQoYSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBpLG89Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPWkudmFsdWU7cy5yZWd1bGFyfHwocy5yZWd1bGFyPXMuaXRhbGljfHxzLmJvbGR8fHMuYm9sZGl0YWxpYyl9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfWlmKHImJjAhPT1yLnNpemUpe3ZhciB1LGw9dGhpcy5mb250cy5nZXQoIlBkZkpTLUZhbGxiYWNrLVBkZkpTLVhGQSIpLGY9YyhyKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7dGhpcy5mb250cy5zZXQoaCxsKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9fX19LHtrZXk6ImFkZFBkZkZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY3NzRm9udEluZm8scj10LmZvbnRGYW1pbHksbj10aGlzLmZvbnRzLmdldChyKTtufHwobj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZm9udHMuc2V0KHIsbiksdGhpcy5kZWZhdWx0Rm9udHx8KHRoaXMuZGVmYXVsdEZvbnQ9bikpO3ZhciBhPSIiLGk9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP2E9aT49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjppPj03MDAmJihhPSJib2xkIiksYXx8KChlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWUmJmUucHNOYW1lLmluY2x1ZGVzKCJCb2xkIikpJiYoYT0iYm9sZCIpLChlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lJiYoZS5wc05hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLnBzTmFtZS5lbmRzV2l0aCgiSXQiKSkpJiYoYSs9Iml0YWxpYyIpKSxhfHwoYT0icmVndWxhciIpLG5bYV09ZX19LHtrZXk6ImdldERlZmF1bHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdEZvbnR9fSx7a2V5OiJmaW5kIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLHI9dGhpcy5mb250cy5nZXQoZSl8fHRoaXMuY2FjaGUuZ2V0KGUpO2lmKHIpcmV0dXJuIHI7dmFyIG49Lyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpLGE9ZS5yZXBsYWNlKG4sIiIpO2lmKHI9dGhpcy5mb250cy5nZXQoYSkpcmV0dXJuIHRoaXMuY2FjaGUuc2V0KGUscikscjthPWEudG9Mb3dlckNhc2UoKTt2YXIgbyx1PVtdLGw9Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihsLnMoKTshKG89bC5uKCkpLmRvbmU7KXt2YXIgZj1zKG8udmFsdWUsMiksaD1mWzBdLGQ9ZlsxXTtoLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goZCl9fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfWlmKDA9PT11Lmxlbmd0aCl7dmFyIHAsZz1jKHRoaXMuZm9udHMuZW50cmllcygpKTt0cnl7Zm9yKGcucygpOyEocD1nLm4oKSkuZG9uZTspe3ZhciB2PXMocC52YWx1ZSwyKVsxXTt2LnJlZ3VsYXIubmFtZSYmdi5yZWd1bGFyLm5hbWUucmVwbGFjZShuLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYSkmJnUucHVzaCh2KX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9fWlmKDA9PT11Lmxlbmd0aCl7YT1hLnJlcGxhY2UoL3BzbXR8bXQvZ2ksIiIpO3ZhciB5LG09Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj1zKHkudmFsdWUsMiksdz1iWzBdLGs9YlsxXTt3LnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goayl9fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfX1pZigwPT09dS5sZW5ndGgpe3ZhciBTLHg9Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7Ty5yZWd1bGFyLm5hbWUmJk8ucmVndWxhci5uYW1lLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goTyl9fWNhdGNoKGUpe3guZShlKX1maW5hbGx5e3guZigpfX1yZXR1cm4gdS5sZW5ndGg+PTE/KDEhPT11Lmxlbmd0aCYmdCYmKDAsaS53YXJuKSgiWEZBIC0gVG9vIG1hbnkgY2hvaWNlcyB0byBndWVzcyB0aGUgY29ycmVjdCBmb250OiAiLmNvbmNhdChlKSksdGhpcy5jYWNoZS5zZXQoZSx1WzBdKSx1WzBdKToodCYmIXRoaXMud2FybmVkLmhhcyhlKSYmKHRoaXMud2FybmVkLmFkZChlKSwoMCxpLndhcm4pKCJYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogIi5jb25jYXQoZSkpKSxudWxsKX19XSxyJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7ZnVuY3Rpb24gZChlLHQpe3JldHVybiJpdGFsaWMiPT09ZS5wb3N0dXJlPyJib2xkIj09PWUud2VpZ2h0P3QuYm9sZGl0YWxpYzp0Lml0YWxpYzoiYm9sZCI9PT1lLndlaWdodD90LmJvbGQ6dC5yZWd1bGFyfXQuRm9udEZpbmRlcj1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGV4dE1lYXN1cmU9dm9pZCAwO3ZhciBuPXIoMjE0KTtmdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBpKGUpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxpKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8cyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1pKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsYSxpKXtpZih1KHRoaXMsZSksdGhpcy5saW5lSGVpZ2h0PWEsdGhpcy5wYXJhTWFyZ2luPXJ8fHt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MH0sIXQpe3ZhciBzPW8odGhpcy5kZWZhdWx0Rm9udChpKSwyKTtyZXR1cm4gdGhpcy5wZGZGb250PXNbMF0sdm9pZCh0aGlzLnhmYUZvbnQ9c1sxXSl9dGhpcy54ZmFGb250PXt0eXBlZmFjZTp0LnR5cGVmYWNlLHBvc3R1cmU6dC5wb3N0dXJlLHdlaWdodDp0LndlaWdodCxzaXplOnQuc2l6ZSxsZXR0ZXJTcGFjaW5nOnQubGV0dGVyU3BhY2luZ307dmFyIGM9aS5maW5kKHQudHlwZWZhY2UpO2lmKCFjKXt2YXIgbD1vKHRoaXMuZGVmYXVsdEZvbnQoaSksMik7cmV0dXJuIHRoaXMucGRmRm9udD1sWzBdLHZvaWQodGhpcy54ZmFGb250PWxbMV0pfWlmKHRoaXMucGRmRm9udD0oMCxuLnNlbGVjdEZvbnQpKHQsYyksIXRoaXMucGRmRm9udCl7dmFyIGY9byh0aGlzLmRlZmF1bHRGb250KGkpLDIpO3RoaXMucGRmRm9udD1mWzBdLHRoaXMueGZhRm9udD1mWzFdfX1yZXR1cm4gZihlLFt7a2V5OiJkZWZhdWx0Rm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maW5kKCJIZWx2ZXRpY2EiLCExKXx8ZS5maW5kKCJNeXJpYWQgUHJvIiwhMSl8fGUuZmluZCgiQXJpYWwiLCExKXx8ZS5nZXREZWZhdWx0KCk7aWYodCYmdC5yZWd1bGFyKXt2YXIgcj10LnJlZ3VsYXI7cmV0dXJuW3Ise3R5cGVmYWNlOnIuY3NzRm9udEluZm8uZm9udEZhbWlseSxwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfXJldHVybltudWxsLHt0eXBlZmFjZToiQ291cmllciIscG9zdHVyZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc2l6ZToxMCxsZXR0ZXJTcGFjaW5nOjB9XX19XSksZX0oKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixhKXt1KHRoaXMsZSksdGhpcy5mb250RmluZGVyPWEsdGhpcy5zdGFjaz1bbmV3IGgodCxyLG4sYSldfXJldHVybiBmKGUsW3trZXk6InB1c2hEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMuc3RhY2suYXQoLTEpLGE9MCxpPVsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXTthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtlW29dfHwoZVtvXT1uLnhmYUZvbnRbb10pfWZvcih2YXIgcz0wLGM9WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXTtpc05hTih0W3VdKSYmKHRbdV09bi5wYXJhTWFyZ2luW3VdKX12YXIgbD1uZXcgaChlLHQscnx8bi5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7bC5wZGZGb250fHwobC5wZGZGb250PW4ucGRmRm9udCksdGhpcy5zdGFjay5wdXNoKGwpfX0se2tleToicG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0YWNrLnBvcCgpfX0se2tleToidG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fV0pLGV9KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7dSh0aGlzLGUpLHRoaXMuZ2x5cGhzPVtdLHRoaXMuZm9udFNlbGVjdG9yPW5ldyBkKHQscixuLGEpLHRoaXMuZXh0cmFIZWlnaHQ9MH1yZXR1cm4gZihlLFt7a2V5OiJwdXNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuZm9udFNlbGVjdG9yLnB1c2hEYXRhKGUsdCxyKX19LHtrZXk6InBvcEZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZvbnRTZWxlY3Rvci5wb3BGb250KCl9fSx7a2V5OiJhZGRQYXJhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTt0aGlzLmV4dHJhSGVpZ2h0Kz1lLnBhcmFNYXJnaW4udG9wK2UucGFyYU1hcmdpbi5ib3R0b219fSx7a2V5OiJhZGRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKSxyPXQueGZhRm9udC5zaXplO2lmKHQucGRmRm9udCl7dmFyIG4saT10LnhmYUZvbnQubGV0dGVyU3BhY2luZyxvPXQucGRmRm9udCxzPW8ubGluZUhlaWdodHx8MS4yLGM9dC5saW5lSGVpZ2h0fHxNYXRoLm1heCgxLjIscykqcix1PXMtKHZvaWQgMD09PW8ubGluZUdhcD8uMjpvLmxpbmVHYXApLGw9TWF0aC5tYXgoMSx1KSpyLGY9ci8xZTMsaD1vLmRlZmF1bHRXaWR0aHx8by5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGgsZD1hKGUuc3BsaXQoL1tcdTIwMjlcbl0vKSk7dHJ5e2ZvcihkLnMoKTshKG49ZC5uKCkpLmRvbmU7KXt2YXIgcCxnPW4udmFsdWUsdj1vLmVuY29kZVN0cmluZyhnKS5qb2luKCIiKSx5PWEoby5jaGFyc1RvR2x5cGhzKHYpKTt0cnl7Zm9yKHkucygpOyEocD15Lm4oKSkuZG9uZTspe3ZhciBtPXAudmFsdWUsYj1tLndpZHRofHxoO3RoaXMuZ2x5cGhzLnB1c2goW2IqZitpLGMsbCxtLnVuaWNvZGUsITFdKX19Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtkLmUoZSl9ZmluYWxseXtkLmYoKX10aGlzLmdseXBocy5wb3AoKX1lbHNle3ZhciB3LGs9YShlLnNwbGl0KC9bXHUyMDI5XG5dLykpO3RyeXtmb3Ioay5zKCk7ISh3PWsubigpKS5kb25lOyl7dmFyIFMseD1hKHcudmFsdWUuc3BsaXQoIiIpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7dGhpcy5nbHlwaHMucHVzaChbciwxLjIqcixyLE8sITFdKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtrLmUoZSl9ZmluYWxseXtrLmYoKX10aGlzLmdseXBocy5wb3AoKX19fX0se2tleToiY29tcHV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLHI9MCxuPTAsYT0wLGk9MCxzPTAsYz0hMSx1PSEwLGw9MCxmPXRoaXMuZ2x5cGhzLmxlbmd0aDtsPGY7bCsrKXt2YXIgaD1vKHRoaXMuZ2x5cGhzW2xdLDUpLGQ9aFswXSxwPWhbMV0sZz1oWzJdLHY9IiAiPT09aFszXSx5PXU/ZzpwO2hbNF0/KG49TWF0aC5tYXgobixpKSxpPTAsYSs9cyxzPXksdD0tMSxyPTAsdT0hMSk6dj9pK2Q+ZT8obj1NYXRoLm1heChuLGkpLGk9MCxhKz1zLHM9eSx0PS0xLHI9MCxjPSEwLHU9ITEpOihzPU1hdGgubWF4KHkscykscj1pLGkrPWQsdD1sKTppK2Q+ZT8oYSs9cyxzPXksLTEhPT10PyhsPXQsbj1NYXRoLm1heChuLHIpLGk9MCx0PS0xLHI9MCk6KG49TWF0aC5tYXgobixpKSxpPWQpLGM9ITAsdT0hMSk6KGkrPWQscz1NYXRoLm1heCh5LHMpKX1yZXR1cm57d2lkdGg6MS4wMioobj1NYXRoLm1heChuLGkpKSxoZWlnaHQ6YSs9cyt0aGlzLmV4dHJhSGVpZ2h0LGlzQnJva2VuOmN9fX1dKSxlfSgpO3QuVGV4dE1lYXN1cmU9cH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFIYW5kbGVyPXZvaWQgMDt2YXIgbj1yKDIwNik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT1yLHRoaXMuZGF0YXNldD10LmRhdGFzZXRzfHxudWxsfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W1stMSx0aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCldXTt0Lmxlbmd0aD4wOyl7dmFyIHI9dC5hdCgtMSksYT1vKHIsMikscz1hWzBdLGM9YVsxXTtpZihzKzEhPT1jLmxlbmd0aCl7dmFyIHU9Y1srK3JbMF1dLGw9ZS5nZXQodVtuLiR1aWRdKTtpZihsKXVbbi4kc2V0VmFsdWVdKGwpO2Vsc2V7dmFyIGYsaD1pKHVbbi4kZ2V0QXR0cmlidXRlc10oKS52YWx1ZXMoKSk7dHJ5e2ZvcihoLnMoKTshKGY9aC5uKCkpLmRvbmU7KXt2YXIgZD1mLnZhbHVlLHA9ZS5nZXQoZFtuLiR1aWRdKTtpZihwKXtkW24uJHNldFZhbHVlXShwKTticmVha319fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX12YXIgZz11W24uJGdldENoaWxkcmVuXSgpO2cubGVuZ3RoPjAmJnQucHVzaChbLTEsZ10pfWVsc2UgdC5wb3AoKX12YXIgdj1bJzx4ZmE6ZGF0YXNldHMgeG1sbnM6eGZhPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLzEuMC8iPiddO2lmKHRoaXMuZGF0YXNldCl7dmFyIHksbT1pKHRoaXMuZGF0YXNldFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj15LnZhbHVlOyJkYXRhIiE9PWJbbi4kbm9kZU5hbWVdJiZiW24uJHRvU3RyaW5nXSh2KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9fXJldHVybiB0aGlzLmRhdGFbbi4kdG9TdHJpbmddKHYpLHYucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iiksdi5qb2luKCIiKX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkRhdGFIYW5kbGVyPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhGQVBhcnNlcj12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigxOTUpLG89cigyMTgpLHM9cigyKTtmdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGgoZSx0KX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZoKGUsdCl9KHYsZSk7dmFyIHQscixsLHAsZz0obD12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1kKGwpO2lmKHApe3ZhciByPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoKXt2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwoZT1nLmNhbGwodGhpcykpLl9idWlsZGVyPW5ldyBvLkJ1aWxkZXIodCksZS5fc3RhY2s9W10sZS5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fSxlLl9pZHM9bmV3IE1hcCxlLl9jdXJyZW50PWUuX2J1aWxkZXIuYnVpbGRSb290KGUuX2lkcyksZS5fZXJyb3JDb2RlPWkuWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IsZS5fd2hpdGVSZWdleD0vXlxzKyQvLGUuX25ic3BzPS9ceGEwKy9nLGUuX3JpY2hUZXh0PXIsZX1yZXR1cm4gdD12LChyPVt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5wYXJzZVhtbChlKSx0aGlzLl9lcnJvckNvZGU9PT1pLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKXJldHVybiB0aGlzLl9jdXJyZW50W2EuJGZpbmFsaXplXSgpLHRoaXMuX2N1cnJlbnQuZWxlbWVudH19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UodGhpcy5fbmJzcHMsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKDEpKyIgIn0pKSx0aGlzLl9yaWNoVGV4dHx8dGhpcy5fY3VycmVudFthLiRhY2NlcHRXaGl0ZXNwYWNlXSgpP3RoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLHRoaXMuX3JpY2hUZXh0KTp0aGlzLl93aGl0ZVJlZ2V4LnRlc3QoZSl8fHRoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLnRyaW0oKSl9fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9jdXJyZW50W2EuJG9uVGV4dF0oZSl9fSx7a2V5OiJfbWtBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG49bnVsbCxpPW51bGwsbz1PYmplY3QuY3JlYXRlKHt9KSxjPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXt2YXIgbD1yLnZhbHVlLGY9bC5uYW1lLGg9bC52YWx1ZTtpZigieG1sbnMiPT09ZiluPygwLHMud2FybikoIlhGQSAtIG11bHRpcGxlIG5hbWVzcGFjZSBkZWZpbml0aW9uIGluIDwiLmNvbmNhdCh0LCI+IikpOm49aDtlbHNlIGlmKGYuc3RhcnRzV2l0aCgieG1sbnM6Iikpe3ZhciBkPWYuc3Vic3RyaW5nKDYpO2l8fChpPVtdKSxpLnB1c2goe3ByZWZpeDpkLHZhbHVlOmh9KX1lbHNle3ZhciBwPWYuaW5kZXhPZigiOiIpO2lmKC0xPT09cClvW2ZdPWg7ZWxzZXt2YXIgZz1vW2EuJG5zQXR0cmlidXRlc107Z3x8KGc9b1thLiRuc0F0dHJpYnV0ZXNdPU9iamVjdC5jcmVhdGUobnVsbCkpO3ZhciB2PVtmLnNsaWNlKDAscCksZi5zbGljZShwKzEpXSx5PXZbMF0sbT12WzFdLGI9Z1t5XTtifHwoYj1nW3ldPU9iamVjdC5jcmVhdGUobnVsbCkpLGJbbV09aH19fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm5bbixpLG9dfX0se2tleToiX2dldE5hbWVBbmRQcmVmaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1yP1tlLG51bGxdOltlLnN1YnN0cmluZyhyKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxyKV19fSx7a2V5OiJvbkJlZ2luRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWModGhpcy5fbWtBdHRyaWJ1dGVzKHQsZSksMyksaT1uWzBdLG89blsxXSxzPW5bMl0sdT1jKHRoaXMuX2dldE5hbWVBbmRQcmVmaXgoZSx0aGlzLl9idWlsZGVyLmlzTnNBZ25vc3RpYygpKSwyKSxsPXVbMF0sZj11WzFdLGg9dGhpcy5fYnVpbGRlci5idWlsZCh7bnNQcmVmaXg6ZixuYW1lOmwsYXR0cmlidXRlczpzLG5hbWVzcGFjZTppLHByZWZpeGVzOm99KTtpZihoW2EuJGdsb2JhbERhdGFdPXRoaXMuX2dsb2JhbERhdGEscilyZXR1cm4gaFthLiRmaW5hbGl6ZV0oKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKGgpJiZoW2EuJHNldElkXSh0aGlzLl9pZHMpLHZvaWQgaFthLiRjbGVhbl0odGhpcy5fYnVpbGRlcik7dGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50KSx0aGlzLl9jdXJyZW50PWh9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnQ7aWYodFthLiRpc0NEQVRBWG1sXSgpJiYic3RyaW5nIj09dHlwZW9mIHRbYS4kY29udGVudF0pe3ZhciByPW5ldyB2O3IuX2dsb2JhbERhdGE9dGhpcy5fZ2xvYmFsRGF0YTt2YXIgbj1yLnBhcnNlKHRbYS4kY29udGVudF0pO3RbYS4kY29udGVudF09bnVsbCx0W2EuJG9uQ2hpbGRdKG4pfXRbYS4kZmluYWxpemVdKCksdGhpcy5fY3VycmVudD10aGlzLl9zdGFjay5wb3AoKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKHQpJiZ0W2EuJHNldElkXSh0aGlzLl9pZHMpLHRbYS4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpfX0se2tleToib25FcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZXJyb3JDb2RlPWV9fV0pJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHZ9KGkuWE1MUGFyc2VyQmFzZSk7dC5YRkFQYXJzZXI9cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQnVpbGRlcj12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpLG89cigyMTkpLHM9cigyMTEpLGM9cigyMjgpLHU9cigyKTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGYoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGYoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBoKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBnKGUsdCxyKXtyZXR1cm4gdCYmcChlLnByb3RvdHlwZSx0KSxyJiZwKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB2KCl7cmV0dXJuIHY9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT13KGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZtKGUsdCl9ZnVuY3Rpb24gbShlLHQpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbShlLHQpfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9dyhlKTtpZih0KXt2YXIgaT13KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHcoZSl7cmV0dXJuIHc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHcoZSl9dmFyIGs9ZnVuY3Rpb24oZSl7eShyLGUpO3ZhciB0PWIocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLC0xLCJyb290IixPYmplY3QuY3JlYXRlKG51bGwpKSkuZWxlbWVudD1udWxsLG5baS4kaWRzXT1lLG59cmV0dXJuIGcocixbe2tleTppLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVsZW1lbnQ9ZSwhMH19LHtrZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2KHcoci5wcm90b3R5cGUpLGkuJGZpbmFsaXplLHRoaXMpLmNhbGwodGhpcyksdGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2Ygcy5UZW1wbGF0ZSYmKHRoaXNbaS4kaWRzXS5zZXQoaS4kcm9vdCx0aGlzLmVsZW1lbnQpLHRoaXMuZWxlbWVudC50ZW1wbGF0ZVtpLiRyZXNvbHZlUHJvdG90eXBlc10odGhpc1tpLiRpZHNdKSx0aGlzLmVsZW1lbnQudGVtcGxhdGVbaS4kaWRzXT10aGlzW2kuJGlkc10pfX1dKSxyfShpLlhGQU9iamVjdCksUz1mdW5jdGlvbihlKXt5KHIsZSk7dmFyIHQ9YihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGQodGhpcyxyKSx0LmNhbGwodGhpcywtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1yZXR1cm4gZyhyLFt7a2V5OmkuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fV0pLHJ9KGkuWEZBT2JqZWN0KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7ZCh0aGlzLGUpLHRoaXMuX25hbWVzcGFjZVN0YWNrPVtdLHRoaXMuX25zQWdub3N0aWNMZXZlbD0wLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzPW5ldyBNYXAsdGhpcy5fbmFtZXNwYWNlcz1uZXcgTWFwLHRoaXMuX25leHROc0lkPU1hdGgubWF4LmFwcGx5KE1hdGgsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gaChlKX0odD1PYmplY3QudmFsdWVzKGEuTmFtZXNwYWNlSWRzKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSkpKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8Zih0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdGhpcy5fY3VycmVudE5hbWVzcGFjZT1yfHxuZXcgYy5Vbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfXJldHVybiBnKGUsW3trZXk6ImJ1aWxkUm9vdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubnNQcmVmaXgscj1lLm5hbWUsbj1lLmF0dHJpYnV0ZXMscz1lLm5hbWVzcGFjZSxjPWUucHJlZml4ZXMsdT1udWxsIT09cztpZih1JiYodGhpcy5fbmFtZXNwYWNlU3RhY2sucHVzaCh0aGlzLl9jdXJyZW50TmFtZXNwYWNlKSx0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX3NlYXJjaE5hbWVzcGFjZShzKSksYyYmdGhpcy5fYWRkTmFtZXNwYWNlUHJlZml4KGMpLG4uaGFzT3duUHJvcGVydHkoaS4kbnNBdHRyaWJ1dGVzKSl7Zm9yKHZhciBmPW8uTmFtZXNwYWNlU2V0VXAuZGF0YXNldHMsaD1uW2kuJG5zQXR0cmlidXRlc10sZD1udWxsLHA9MCxnPU9iamVjdC5lbnRyaWVzKGgpO3A8Zy5sZW5ndGg7cCsrKXt2YXIgdj1sKGdbcF0sMikseT12WzBdLG09dlsxXTtpZih0aGlzLl9nZXROYW1lc3BhY2VUb1VzZSh5KT09PWYpe2Q9e3hmYTptfTticmVha319ZD9uW2kuJG5zQXR0cmlidXRlc109ZDpkZWxldGUgbltpLiRuc0F0dHJpYnV0ZXNdfXZhciBiPXRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKHQpLHc9YiYmYlthLiRidWlsZFhGQU9iamVjdF0ocixuKXx8bmV3IFM7cmV0dXJuIHdbaS4kaXNOc0Fnbm9zdGljXSgpJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwrKywodXx8Y3x8d1tpLiRpc05zQWdub3N0aWNdKCkpJiYod1tpLiRjbGVhbnVwXT17aGFzTmFtZXNwYWNlOnUscHJlZml4ZXM6Yyxuc0Fnbm9zdGljOndbaS4kaXNOc0Fnbm9zdGljXSgpfSksd319LHtrZXk6ImlzTnNBZ25vc3RpYyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbnNBZ25vc3RpY0xldmVsPjB9fSx7a2V5OiJfc2VhcmNoTmFtZXNwYWNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lc3BhY2VzLmdldChlKTtpZih0KXJldHVybiB0O2Zvcih2YXIgcj0wLG49T2JqZWN0LmVudHJpZXMoYS5OYW1lc3BhY2VJZHMpO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1sKG5bcl0sMikscz1pWzBdO2lmKCgwLGlbMV0uY2hlY2spKGUpKXtpZih0PW8uTmFtZXNwYWNlU2V0VXBbc10pcmV0dXJuIHRoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCksdDticmVha319cmV0dXJuIHQ9bmV3IGMuVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKSx0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpLHR9fSx7a2V5OiJfYWRkTmFtZXNwYWNlUHJlZml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlLGE9bi5wcmVmaXgsaT1uLnZhbHVlLG89dGhpcy5fc2VhcmNoTmFtZXNwYWNlKGkpLHM9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGEpO3N8fChzPVtdLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldChhLHMpKSxzLnB1c2gobyl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19LHtrZXk6Il9nZXROYW1lc3BhY2VUb1VzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXMuX2N1cnJlbnROYW1lc3BhY2U7dmFyIHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO3JldHVybiB0JiZ0Lmxlbmd0aD4wP3QuYXQoLTEpOigoMCx1Lndhcm4pKCJVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICIuY29uY2F0KGUsIi4iKSksbnVsbCl9fSx7a2V5OiJjbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFzTmFtZXNwYWNlLG49ZS5wcmVmaXhlcyxhPWUubnNBZ25vc3RpYztyJiYodGhpcy5fY3VycmVudE5hbWVzcGFjZT10aGlzLl9uYW1lc3BhY2VTdGFjay5wb3AoKSksbiYmbi5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lLnByZWZpeDt0Ll9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocikucG9wKCl9KSksYSYmdGhpcy5fbnNBZ25vc3RpY0xldmVsLS19fV0pLGV9KCk7dC5CdWlsZGVyPXh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VTZXRVcD12b2lkIDA7dmFyIG49cigyMjApLGE9cigyMjEpLGk9cigyMjIpLG89cigyMjMpLHM9cigyMjQpLGM9cigyMjUpLHU9cigyMTEpLGw9cigyMjYpLGY9cigyMjcpLGg9e2NvbmZpZzpuLkNvbmZpZ05hbWVzcGFjZSxjb25uZWN0aW9uOmEuQ29ubmVjdGlvblNldE5hbWVzcGFjZSxkYXRhc2V0czppLkRhdGFzZXRzTmFtZXNwYWNlLGxvY2FsZVNldDpvLkxvY2FsZVNldE5hbWVzcGFjZSxzaWduYXR1cmU6cy5TaWduYXR1cmVOYW1lc3BhY2Usc3R5bGVzaGVldDpjLlN0eWxlc2hlZXROYW1lc3BhY2UsdGVtcGxhdGU6dS5UZW1wbGF0ZU5hbWVzcGFjZSx4ZHA6bC5YZHBOYW1lc3BhY2UseGh0bWw6Zi5YaHRtbE5hbWVzcGFjZX07dC5OYW1lc3BhY2VTZXRVcD1ofSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db25maWdOYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gdCYmdShlLnByb3RvdHlwZSx0KSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9YS5OYW1lc3BhY2VJZHMuY29uZmlnLmlkLHk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFjcm9iYXQiLCEwKSkuYWNyb2JhdDc9bnVsbCxuLmF1dG9TYXZlPW51bGwsbi5jb21tb249bnVsbCxuLnZhbGlkYXRlPW51bGwsbi52YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcz1udWxsLG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhY3JvYmF0NyIsITApKS5keW5hbWljUmVuZGVyPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLGI9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNDb25zb2xlIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNEZWJ1Z2dlciIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRTaWxlbnRQcmludCIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxTPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx4PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGp1c3REYXRhIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMTApLE89ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLDAsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD04fSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFnZW50IiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5jb21tb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFsd2F5c0VtYmVkIil9cmV0dXJuIGwocil9KGkuQ29udGVudE9iamVjdCksRj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiYW1kIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhcmVhIikpLmxldmVsPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZXZlbCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MSYmZTw9M319KSxuLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbIiIsImJhcmNvZGUiLCJjb3JlaW5pdCIsImRldmljZURyaXZlciIsImZvbnQiLCJnZW5lcmFsIiwibGF5b3V0IiwibWVyZ2UiLCJzY3JpcHQiLCJzaWduYXR1cmUiLCJzb3VyY2VTZXQiLCJ0ZW1wbGF0ZUNhY2hlIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdHRyaWJ1dGVzIixbInByZXNlcnZlIiwiZGVsZWdhdGUiLCJpZ25vcmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdXRvU2F2ZSIsWyJkaXNhYmxlZCIsImVuYWJsZWQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxFPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiYXNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJiYXRjaE91dHB1dCIpKS5mb3JtYXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsibm9uZSIsImNvbmNhdCIsInppcCIsInppcENvbXByZXNzIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiZWhhdmlvck92ZXJyaWRlIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09bmV3IE1hcCh0aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcygiOiIpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoIjoiLDIpfSkpKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjYWNoZSIsITApKS50ZW1wbGF0ZUNhY2hlPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNoYW5nZSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxSPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21tb24iLCEwKSkuZGF0YT1udWxsLG4ubG9jYWxlPW51bGwsbi5sb2NhbGVTZXQ9bnVsbCxuLm1lc3NhZ2luZz1udWxsLG4uc3VwcHJlc3NCYW5uZXI9bnVsbCxuLnRlbXBsYXRlPW51bGwsbi52YWxpZGF0aW9uTWVzc2FnaW5nPW51bGwsbi52ZXJzaW9uQ29udHJvbD1udWxsLG4ubG9nPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxOPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21wcmVzcyIpKS5zY29wZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbImltYWdlT25seSIsImRvY3VtZW50Il0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxEPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29tcHJlc3NPYmplY3RTdHJlYW0iKX1yZXR1cm4gbChyKX0oaS5PcHRpb24xMCksVT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29tcHJlc3Npb24iLCEwKSkuY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlPW51bGwsbi5jb21wcmVzc09iamVjdFN0cmVhbT1udWxsLG4ubGV2ZWw9bnVsbCxuLnR5cGU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29uZmlnIiwhMCkpLmFjcm9iYXQ9bnVsbCxuLnByZXNlbnQ9bnVsbCxuLnRyYWNlPW51bGwsbi5hZ2VudD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29uZm9ybWFuY2UiLFsiQSIsIkIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxIPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb250ZW50Q29weSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxxPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb3BpZXMiLDEsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNyZWF0b3IiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImN1cnJlbnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxXPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJkYXRhIiwhMCkpLmFkanVzdERhdGE9bnVsbCxuLmF0dHJpYnV0ZXM9bnVsbCxuLmluY3JlbWVudGFsTG9hZD1udWxsLG4ub3V0cHV0WFNMPW51bGwsbi5yYW5nZT1udWxsLG4ucmVjb3JkPW51bGwsbi5zdGFydE5vZGU9bnVsbCxuLnVyaT1udWxsLG4ud2luZG93PW51bGwsbi54c2w9bnVsbCxuLmV4Y2x1ZGVOUz1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnRyYW5zZm9ybT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZGVidWciLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImRlZmF1bHRUeXBlZmFjZSIpKS53cml0aW5nU2NyaXB0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLndyaXRpbmdTY3JpcHQsWyIqIiwiQXJhYmljIiwiQ3lyaWxsaWMiLCJFYXN0RXVyb3BlYW5Sb21hbiIsIkdyZWVrIiwiSGVicmV3IiwiSmFwYW5lc2UiLCJLb3JlYW4iLCJSb21hbiIsIlNpbXBsaWZpZWRDaGluZXNlIiwiVGhhaSIsIlRyYWRpdGlvbmFsQ2hpbmVzZSIsIlZpZXRuYW1lc2UiXSksbn1yZXR1cm4gbChyKX0oaS5Db250ZW50T2JqZWN0KSxLPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkZXN0aW5hdGlvbiIsWyJwZGYiLCJwY2wiLCJwcyIsIndlYkNsaWVudCIsInpwbCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImRvY3VtZW50QXNzZW1ibHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksWj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZHJpdmVyIiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5mb250SW5mbz1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImR1cGxleE9wdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4RmxpcExvbmdFZGdlIiwiZHVwbGV4RmxpcFNob3J0RWRnZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkeW5hbWljUmVuZGVyIixbImZvcmJpZGRlbiIsInJlcXVpcmVkIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksdGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVtYmVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLHJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmNyeXB0Iil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLG5lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJlbmNyeXB0aW9uIiwhMCkpLmVuY3J5cHQ9bnVsbCxuLmVuY3J5cHRpb25MZXZlbD1udWxsLG4ucGVybWlzc2lvbnM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVuY3J5cHRpb25MZXZlbCIsWyI0MGJpdCIsIjEyOGJpdCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmZvcmNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxvZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZXF1YXRlIikpLmZvcmNlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5mb3JjZSxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9fSksbi5mcm9tPWUuZnJvbXx8IiIsbi50bz1lLnRvfHwiIixufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksc2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImVxdWF0ZVJhbmdlIikpLmZyb209ZS5mcm9tfHwiIixuLnRvPWUudG98fCIiLG4uX3VuaWNvZGVSYW5nZT1lLnVuaWNvZGVSYW5nZXx8IiIsbn1yZXR1cm4gbChyLFt7a2V5OiJ1bmljb2RlUmFuZ2UiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj0vVVwrKFswLTlhLWZBLUZdKykvLG49ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0odGhpcy5fdW5pY29kZVJhbmdlLnNwbGl0KCIsIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTsxPT09KGE9YS5zcGxpdCgiLSIsMikubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKHIpO3JldHVybiB0P3BhcnNlSW50KHRbMV0sMTYpOjB9KSkpLmxlbmd0aCYmYS5wdXNoKGFbMF0pLHQucHVzaChhKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsInVuaWNvZGVSYW5nZSIsdCl9fV0pLHJ9KGkuWEZBT2JqZWN0KSxjZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZbImNhbGN1bGF0ZSIsImNsb3NlIiwiZW50ZXIiLCJleGl0IiwiaW5pdGlhbGl6ZSIsInJlYWR5IiwidmFsaWRhdGUiXS5pbmNsdWRlcyhlKX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSx1ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZU5TIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxsZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZmxpcExhYmVsIixbInVzZVByaW50ZXJTZXR0aW5nIiwib24iLCJvZmYiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxmZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZm9udEluZm8iLCEwKSkuZW1iZWQ9bnVsbCxuLm1hcD1udWxsLG4uc3Vic2V0QmVsb3c9bnVsbCxuLmFsd2F5c0VtYmVkPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZGVmYXVsdFR5cGVmYWNlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ubmV2ZXJFbWJlZD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImZvcm1GaWVsZEZpbGxpbmciKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksZGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImdyb3VwUGFyZW50Iil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxwZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaWZFbXB0eSIsWyJkYXRhVmFsdWUiLCJkYXRhR3JvdXAiLCJpZ25vcmUiLCJyZW1vdmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxnZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaW5jbHVkZVhEUENvbnRlbnQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJpbmNyZW1lbnRhbExvYWQiLFsibm9uZSIsImZvcndhcmRPbmx5Il0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkseWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImluY3JlbWVudGFsTWVyZ2UiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksbWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImludGVyYWN0aXZlIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLGJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJqb2ciLFsidXNlUHJpbnRlclNldHRpbmciLCJub25lIiwicGFnZVNldCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsYWJlbFByaW50ZXIiLCEwKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsienBsIiwiZHBsIiwiaXBsIiwidGNwbCJdKSxuLmJhdGNoT3V0cHV0PW51bGwsbi5mbGlwTGFiZWw9bnVsbCxuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksa2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxheW91dCIsWyJwYWdpbmF0ZSIsInBhbmVsIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksU2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxldmVsIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT4wfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLHhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsaW5lYXJpemVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE9lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEFlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGVTZXQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLENlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsb2ciLCEwKSkubW9kZT1udWxsLG4udGhyZXNob2xkPW51bGwsbi50bz1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtYXAiLCEwKSkuZXF1YXRlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZXF1YXRlUmFuZ2U9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtZWRpdW1JbmZvIiwhMCkpLm1hcD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwibWVzc2FnZSIsITApKS5tc2dJZD1udWxsLG4uc2V2ZXJpdHk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm1lc3NhZ2luZyIsITApKS5tZXNzYWdlPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxFZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kZSIsWyJhcHBlbmQiLCJvdmVyd3JpdGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxqZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kaWZ5QW5ub3RzIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE1lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJtc2dJZCIsMSwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksX2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIm5hbWVBdHRyIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxMZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibmV2ZXJFbWJlZCIpfXJldHVybiBsKHIpfShpLkNvbnRlbnRPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJudW1iZXJPZkNvcGllcyIsbnVsbCwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTImJmU8PTV9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksTmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm9wZW5BY3Rpb24iLCEwKSkuZGVzdGluYXRpb249bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksRGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm91dHB1dCIsITApKS50bz1udWxsLG4udHlwZT1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdXRwdXRCaW4iKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLFVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJvdXRwdXRYU0wiLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCRlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdmVycHJpbnQiLFsibm9uZSIsImJvdGgiLCJkcmF3IiwiZmllbGQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxYZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFja2V0cyIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXsiKiIhPT10aGlzW2kuJGNvbnRlbnRdJiYodGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm5bImNvbmZpZyIsImRhdGFzZXRzIiwidGVtcGxhdGUiLCJ4ZmRmIiwieHNsdCJdLmluY2x1ZGVzKGUpfSkpKX19XSkscn0oaS5TdHJpbmdPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwYWdlT2Zmc2V0IikpLng9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLngsZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLnk9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnksZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBhZ2VSYW5nZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpLHQ9W10scj0wLG49ZS5sZW5ndGg7cjxuO3IrPTIpdC5wdXNoKGUuc2xpY2UocixyKzIpKTt0aGlzW2kuJGNvbnRlbnRdPXR9fV0pLHJ9KGkuU3RyaW5nT2JqZWN0KSxHZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4U2hvcnRFZGdlIiwiZHVwbGV4TG9uZ0VkZ2UiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx6ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbk92ZXJyaWRlIixbIm5vbmUiLCJmb3JjZUR1cGxleCIsImZvcmNlRHVwbGV4TG9uZ0VkZ2UiLCJmb3JjZUR1cGxleFNob3J0RWRnZSIsImZvcmNlU2ltcGxleCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLFdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwYXJ0IiwxLChmdW5jdGlvbihlKXtyZXR1cm4hMX0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxWZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwicGNsIiwhMCkpLm5hbWU9ZS5uYW1lfHwiIixuLmJhdGNoT3V0cHV0PW51bGwsbi5mb250SW5mbz1udWxsLG4uam9nPW51bGwsbi5tZWRpdW1JbmZvPW51bGwsbi5vdXRwdXRCaW49bnVsbCxuLnBhZ2VPZmZzZXQ9bnVsbCxuLnN0YXBsZT1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwZGYiLCEwKSkubmFtZT1lLm5hbWV8fCIiLG4uYWRvYmVFeHRlbnNpb25MZXZlbD1udWxsLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmNvbXByZXNzaW9uPW51bGwsbi5jcmVhdG9yPW51bGwsbi5lbmNyeXB0aW9uPW51bGwsbi5mb250SW5mbz1udWxsLG4uaW50ZXJhY3RpdmU9bnVsbCxuLmxpbmVhcml6ZWQ9bnVsbCxuLm9wZW5BY3Rpb249bnVsbCxuLnBkZmE9bnVsbCxuLnByb2R1Y2VyPW51bGwsbi5yZW5kZXJQb2xpY3k9bnVsbCxuLnNjcmlwdE1vZGVsPW51bGwsbi5zaWxlbnRQcmludD1udWxsLG4uc3VibWl0Rm9ybWF0PW51bGwsbi50YWdnZWQ9bnVsbCxuLnZlcnNpb249bnVsbCxuLnZpZXdlclByZWZlcmVuY2VzPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksS2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBkZmEiLCEwKSkuYW1kPW51bGwsbi5jb25mb3JtYW5jZT1udWxsLG4uaW5jbHVkZVhEUENvbnRlbnQ9bnVsbCxuLnBhcnQ9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBlcm1pc3Npb25zIiwhMCkpLmFjY2Vzc2libGVDb250ZW50PW51bGwsbi5jaGFuZ2U9bnVsbCxuLmNvbnRlbnRDb3B5PW51bGwsbi5kb2N1bWVudEFzc2VtYmx5PW51bGwsbi5mb3JtRmllbGRGaWxsaW5nPW51bGwsbi5tb2RpZnlBbm5vdHM9bnVsbCxuLnBsYWludGV4dE1ldGFkYXRhPW51bGwsbi5wcmludD1udWxsLG4ucHJpbnRIaWdoUXVhbGl0eT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxaZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGlja1RyYXlCeVBERlNpemUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksUWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBpY3R1cmUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwbGFpbnRleHRNZXRhZGF0YSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx0dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJlc2VuY2UiLFsicHJlc2VydmUiLCJkaXNzb2x2ZSIsImRpc3NvbHZlU3RydWN0dXJlIiwiaWdub3JlIiwicmVtb3ZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInByZXNlbnQiLCEwKSkuYmVoYXZpb3JPdmVycmlkZT1udWxsLG4uY2FjaGU9bnVsbCxuLmNvbW1vbj1udWxsLG4uY29waWVzPW51bGwsbi5kZXN0aW5hdGlvbj1udWxsLG4uaW5jcmVtZW50YWxNZXJnZT1udWxsLG4ubGF5b3V0PW51bGwsbi5vdXRwdXQ9bnVsbCxuLm92ZXJwcmludD1udWxsLG4ucGFnaW5hdGlvbj1udWxsLG4ucGFnaW5hdGlvbk92ZXJyaWRlPW51bGwsbi5zY3JpcHQ9bnVsbCxuLnZhbGlkYXRlPW51bGwsbi54ZHA9bnVsbCxuLmRyaXZlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLmxhYmVsUHJpbnRlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBjbD1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBkZj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBzPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ud2ViQ2xpZW50PW5ldyBpLlhGQU9iamVjdEFycmF5LG4uenBsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxudD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJpbnQiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksYXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50SGlnaFF1YWxpdHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksaXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50U2NhbGluZyIsWyJhcHBkZWZhdWx0Iiwibm9TY2FsaW5nIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50ZXJOYW1lIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxzdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJvZHVjZXIiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGN0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwcyIsITApKS5uYW1lPWUubmFtZXx8IiIsbi5iYXRjaE91dHB1dD1udWxsLG4uZm9udEluZm89bnVsbCxuLmpvZz1udWxsLG4ubWVkaXVtSW5mbz1udWxsLG4ub3V0cHV0QmluPW51bGwsbi5zdGFwbGU9bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx1dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmFuZ2UiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiLSIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUudHJpbSgpLDEwKX0pKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4oZSl9KSl9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubGVuZ3RoJiZlLnB1c2goZVswXSksZX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxsdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVjb3JkIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCk7dmFyIGU9cGFyc2VJbnQodGhpc1tpLiRjb250ZW50XSwxMCk7IWlzTmFOKGUpJiZlPj0wJiYodGhpc1tpLiRjb250ZW50XT1lKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxmdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVsZXZhbnQiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLyl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksaHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmFtZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLCh0aGlzW2kuJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbaS4kY29udGVudF0pKSYmKDAscy53YXJuKSgiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lIil9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksZHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmRlclBvbGljeSIsWyJzZXJ2ZXIiLCJjbGllbnQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxwdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicnVuU2NyaXB0cyIsWyJib3RoIiwiY2xpZW50Iiwibm9uZSIsInNlcnZlciJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzY3JpcHQiLCEwKSkuY3VycmVudFBhZ2U9bnVsbCxuLmV4Y2x1ZGU9bnVsbCxuLnJ1blNjcmlwdHM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksdnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInNjcmlwdE1vZGVsIixbIlhGQSIsIm5vbmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx5dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic2V2ZXJpdHkiLFsiaWdub3JlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsInRyYWNlIiwid2FybmluZyJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLG10PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzaWxlbnRQcmludCIsITApKS5hZGRTaWxlbnRQcmludD1udWxsLG4ucHJpbnRlck5hbWU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInN0YXBsZSIpKS5tb2RlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm1vZGUsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx3dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnROb2RlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxrdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4hMH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxTdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3VibWl0Rm9ybWF0IixbImh0bWwiLCJkZWxlZ2F0ZSIsImZkZiIsInhtbCIsInBkZiJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJtaXRVcmwiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLE90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJzZXRCZWxvdyIsMTAwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9MTAwfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEF0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdXBwcmVzc0Jhbm5lciIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxDdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGFnZ2VkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLEZ0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZSIsITApKS5iYXNlPW51bGwsbi5yZWxldmFudD1udWxsLG4uc3RhcnRQYWdlPW51bGwsbi51cmk9bnVsbCxuLnhzbD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxQdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGhyZXNob2xkIixbInRyYWNlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsIndhcm5pbmciXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxUdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidG8iLFsibnVsbCIsIm1lbW9yeSIsInN0ZGVyciIsInN0ZG91dCIsInN5c3RlbSIsInVyaSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEl0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZUNhY2hlIikpLm1heEVudHJpZXM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heEVudHJpZXMsZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0cmFjZSIsITApKS5hcmVhPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxqdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwidHJhbnNmb3JtIiwhMCkpLmdyb3VwUGFyZW50PW51bGwsbi5pZkVtcHR5PW51bGwsbi5uYW1lQXR0cj1udWxsLG4ucGljdHVyZT1udWxsLG4ucHJlc2VuY2U9bnVsbCxuLnJlbmFtZT1udWxsLG4ud2hpdGVzcGFjZT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidHlwZSIsWyJub25lIiwiYXNjaWk4NSIsImFzY2lpSGV4IiwiY2NpdHRmYXgiLCJmbGF0ZSIsImx6dyIsInJ1bkxlbmd0aCIsIm5hdGl2ZSIsInhkcCIsIm1lcmdlZFhEUCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLF90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ1cmkiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEx0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ2YWxpZGF0ZSIsWyJwcmVTdWJtaXQiLCJwcmVQcmludCIsInByZUV4ZWN1dGUiLCJwcmVTYXZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksUnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuWyJkb2NSZWFkeSIsInBvc3RTaWduIl0uaW5jbHVkZXMoZSl9KSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksTnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRpb25NZXNzYWdpbmciLFsiYWxsTWVzc2FnZXNJbmRpdmlkdWFsbHkiLCJhbGxNZXNzYWdlc1RvZ2V0aGVyIiwiZmlyc3RNZXNzYWdlT25seSIsIm5vTWVzc2FnZXMiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxEdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidmVyc2lvbiIsWyIxLjciLCIxLjYiLCIxLjUiLCIxLjQiLCIxLjMiLCIxLjIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxCdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiVmVyc2lvbkNvbnRyb2wiKSkub3V0cHV0QmVsb3c9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3V0cHV0QmVsb3csWyJ3YXJuIiwiZXJyb3IiLCJ1cGRhdGUiXSksbi5zb3VyY2VBYm92ZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zb3VyY2VBYm92ZSxbIndhcm4iLCJlcnJvciJdKSxuLnNvdXJjZUJlbG93PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUJlbG93LFsidXBkYXRlIiwibWFpbnRhaW4iXSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApKS5BREJFX0pTQ29uc29sZT1udWxsLG4uQURCRV9KU0RlYnVnZ2VyPW51bGwsbi5hZGRWaWV3ZXJQcmVmZXJlbmNlcz1udWxsLG4uZHVwbGV4T3B0aW9uPW51bGwsbi5lbmZvcmNlPW51bGwsbi5udW1iZXJPZkNvcGllcz1udWxsLG4ucGFnZVJhbmdlPW51bGwsbi5waWNrVHJheUJ5UERGU2l6ZT1udWxsLG4ucHJpbnRTY2FsaW5nPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCR0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ3ZWJDbGllbnQiLCEwKSkubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIixuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIndoaXRlc3BhY2UiLFsicHJlc2VydmUiLCJsdHJpbSIsIm5vcm1hbGl6ZSIsInJ0cmltIiwidHJpbSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ3aW5kb3ciKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpO2Uuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSkpP3RoaXNbaS4kY29udGVudF09WzAsMF06KDE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pLHRoaXNbaS4kY29udGVudF09ZSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCkscXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInhkYyIsITApKS51cmk9bmV3IGkuWEZBT2JqZWN0QXJyYXksbi54c2w9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ4ZHAiLCEwKSkucGFja2V0cz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx6dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwieHNsIiwhMCkpLmRlYnVnPW51bGwsbi51cmk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksV3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInpwbCIsITApKS5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmZsaXBMYWJlbD1udWxsLG4uZm9udEluZm89bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxWdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGwoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImFjcm9iYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeShlKX19LHtrZXk6ImFjcm9iYXQ3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG0oZSl9fSx7a2V5OiJBREJFX0pTQ29uc29sZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiQURCRV9KU0RlYnVnZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJhZGRTaWxlbnRQcmludCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYWRkVmlld2VyUHJlZmVyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6ImFkanVzdERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTyhlKX19LHtrZXk6ImFnZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fSx7a2V5OiJhbHdheXNFbWJlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToiYW1kIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEYoZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFAoZSl9fSx7a2V5OiJhdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJhdXRvU2F2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJKGUpfX0se2tleToiYmFzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFKGUpfX0se2tleToiYmF0Y2hPdXRwdXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaihlKX19LHtrZXk6ImJlaGF2aW9yT3ZlcnJpZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTShlKX19LHtrZXk6ImNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJjaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTChlKX19LHtrZXk6ImNvbW1vbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSKGUpfX0se2tleToiY29tcHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTihlKX19LHtrZXk6ImNvbXByZXNzTG9naWNhbFN0cnVjdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEKGUpfX0se2tleToiY29tcHJlc3NPYmplY3RTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihlKX19LHtrZXk6ImNvbXByZXNzaW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFUoZSl9fSx7a2V5OiJjb25maWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgJChlKX19LHtrZXk6ImNvbmZvcm1hbmNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFgoZSl9fSx7a2V5OiJjb250ZW50Q29weSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIKGUpfX0se2tleToiY29waWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHEoZSl9fSx7a2V5OiJjcmVhdG9yIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEcoZSl9fSx7a2V5OiJjdXJyZW50UGFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6KGUpfX0se2tleToiZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXKGUpfX0se2tleToiZGVidWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImRlZmF1bHRUeXBlZmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZKGUpfX0se2tleToiZGVzdGluYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImRvY3VtZW50QXNzZW1ibHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSihlKX19LHtrZXk6ImRyaXZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiZHVwbGV4T3B0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFEoZSl9fSx7a2V5OiJkeW5hbWljUmVuZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiZW1iZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuZShlKX19LHtrZXk6ImVuY3J5cHRpb25MZXZlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhZShlKX19LHtrZXk6ImVuZm9yY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJlcXVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb2UoZSl9fSx7a2V5OiJlcXVhdGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzZShlKX19LHtrZXk6ImV4Y2x1ZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJleGNsdWRlTlMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdWUoZSl9fSx7a2V5OiJmbGlwTGFiZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJmb250SW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImZvcm1GaWVsZEZpbGxpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJncm91cFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkZShlKX19LHtrZXk6ImlmRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJpbmNsdWRlWERQQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnZShlKX19LHtrZXk6ImluY3JlbWVudGFsTG9hZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2ZShlKX19LHtrZXk6ImluY3JlbWVudGFsTWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJpbnRlcmFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtZShlKX19LHtrZXk6ImpvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiZShlKX19LHtrZXk6ImxhYmVsUHJpbnRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3ZShlKX19LHtrZXk6ImxheW91dCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImxldmVsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFNlKGUpfX0se2tleToibGluZWFyaXplZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB4ZShlKX19LHtrZXk6ImxvY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPZShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImxvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDZShlKX19LHtrZXk6Im1hcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBGZShlKX19LHtrZXk6Im1lZGl1bUluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUGUoZSl9fSx7a2V5OiJtZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToibWVzc2FnaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEllKGUpfX0se2tleToibW9kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFZShlKX19LHtrZXk6Im1vZGlmeUFubm90cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6Im1zZ0lkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToibmFtZUF0dHIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX2UoZSl9fSx7a2V5OiJuZXZlckVtYmVkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IExlKGUpfX0se2tleToibnVtYmVyT2ZDb3BpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJvcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToib3V0cHV0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToib3V0cHV0QmluIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJlKGUpfX0se2tleToib3V0cHV0WFNMIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToib3ZlcnByaW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToicGFja2V0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYZShlKX19LHtrZXk6InBhZ2VPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSGUoZSl9fSx7a2V5OiJwYWdlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcWUoZSl9fSx7a2V5OiJwYWdpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEdlKGUpfX0se2tleToicGFnaW5hdGlvbk92ZXJyaWRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToicGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXZShlKX19LHtrZXk6InBjbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBWZShlKX19LHtrZXk6InBkZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZZShlKX19LHtrZXk6InBkZmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgS2UoZSl9fSx7a2V5OiJwZXJtaXNzaW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKZShlKX19LHtrZXk6InBpY2tUcmF5QnlQREZTaXplIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFplKGUpfX0se2tleToicGljdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRZShlKX19LHtrZXk6InBsYWludGV4dE1ldGFkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGV0KGUpfX0se2tleToicHJlc2VuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdHQoZSl9fSx7a2V5OiJwcmVzZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJ0KGUpfX0se2tleToicHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbnQoZSl9fSx7a2V5OiJwcmludEhpZ2hRdWFsaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToicHJpbnRTY2FsaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToicHJpbnRlck5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb3QoZSl9fSx7a2V5OiJwcm9kdWNlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6InBzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToicmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJyZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJyZWxldmFudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmdChlKX19LHtrZXk6InJlbmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBodChlKX19LHtrZXk6InJlbmRlclBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InJ1blNjcmlwdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ3QoZSl9fSx7a2V5OiJzY3JpcHRNb2RlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2dChlKX19LHtrZXk6InNldmVyaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHl0KGUpfX0se2tleToic2lsZW50UHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJzdGFwbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYnQoZSl9fSx7a2V5OiJzdGFydE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd3QoZSl9fSx7a2V5OiJzdGFydFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcga3QoZSl9fSx7a2V5OiJzdWJtaXRGb3JtYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJzdWJtaXRVcmwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJzdWJzZXRCZWxvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPdChlKX19LHtrZXk6InN1cHByZXNzQmFubmVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEF0KGUpfX0se2tleToidGFnZ2VkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEN0KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRnQoZSl9fSx7a2V5OiJ0ZW1wbGF0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToidGhyZXNob2xkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToidG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVHQoZSl9fSx7a2V5OiJ0cmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFdChlKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqdChlKX19LHtrZXk6InR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTXQoZSl9fSx7a2V5OiJ1cmkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMdChlKX19LHtrZXk6InZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToidmFsaWRhdGlvbk1lc3NhZ2luZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOdChlKX19LHtrZXk6InZlcnNpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ2ZXJzaW9uQ29udHJvbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBCdChlKX19LHtrZXk6InZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFV0KGUpfX0se2tleToid2ViQ2xpZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToid2hpdGVzcGFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYdChlKX19LHtrZXk6IndpbmRvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InhkYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InhkcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHdChlKX19LHtrZXk6InhzbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6dChlKX19LHtrZXk6InpwbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19XSksZX0oKTt0LkNvbmZpZ05hbWVzcGFjZT1WdH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCxyKXtyZXR1cm4gdCYmbyhlLnByb3RvdHlwZSx0KSxyJiZvKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbChlLHQpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9aChlKTtpZih0KXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9dmFyIGQ9YS5OYW1lc3BhY2VJZHMuY29ubmVjdGlvblNldC5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJjb25uZWN0aW9uU2V0IiwhMCkpLndzZGxDb25uZWN0aW9uPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ueG1sQ29ubmVjdGlvbj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnhzZENvbm5lY3Rpb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gcyhyKX0oaS5YRkFPYmplY3QpLGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsImVmZmVjdGl2ZUlucHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksdj1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZWZmZWN0aXZlT3V0cHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCkseT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwib3BlcmF0aW9uIikpLmlkPWUuaWR8fCIiLG4uaW5wdXQ9ZS5pbnB1dHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5vdXRwdXQ9ZS5vdXRwdXR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksbT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwicm9vdEVsZW1lbnQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxiPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJzb2FwQWN0aW9uIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksdz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwic29hcEFkZHJlc3MiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ1cmkiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ3c2RsQWRkcmVzcyIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gcyhyKX0oaS5TdHJpbmdPYmplY3QpLHg9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsIndzZGxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5lZmZlY3RpdmVJbnB1dFBvbGljeT1udWxsLG4uZWZmZWN0aXZlT3V0cHV0UG9saWN5PW51bGwsbi5vcGVyYXRpb249bnVsbCxuLnNvYXBBY3Rpb249bnVsbCxuLnNvYXBBZGRyZXNzPW51bGwsbi53c2RsQWRkcmVzcz1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ4bWxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51cmk9bnVsbCxufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksQT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwieHNkQ29ubmVjdGlvbiIsITApKS5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4ucm9vdEVsZW1lbnQ9bnVsbCxuLnVyaT1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2ModGhpcyxlKX1yZXR1cm4gcyhlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXJldHVybiBlW3RdKHIpfX0se2tleToiY29ubmVjdGlvblNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBwKGUpfX0se2tleToiZWZmZWN0aXZlSW5wdXRQb2xpY3kiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZyhlKX19LHtrZXk6ImVmZmVjdGl2ZU91dHB1dFBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2KGUpfX0se2tleToib3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHkoZSl9fSx7a2V5OiJyb290RWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtKGUpfX0se2tleToic29hcEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToic29hcEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdyhlKX19LHtrZXk6InVyaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToid3NkbEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6IndzZGxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHgoZSl9fSx7a2V5OiJ4bWxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJ4c2RDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fV0pLGV9KCk7dC5Db25uZWN0aW9uU2V0TmFtZXNwYWNlPUN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFzZXRzTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwNiksaT1yKDIwOCk7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1pLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8odGhpcyxyKSx0LmNhbGwodGhpcyxkLCJkYXRhIixlKX1yZXR1cm4gYyhyLFt7a2V5OmEuJGlzTnNBZ25vc3RpYyx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX1dKSxyfShhLlhtbE9iamVjdCksZz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBvKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZGF0YXNldHMiLCEwKSkuZGF0YT1udWxsLG4uU2lnbmF0dXJlPW51bGwsbn1yZXR1cm4gYyhyLFt7a2V5OmEuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVthLiRub2RlTmFtZV07KCJkYXRhIj09PXQmJmVbYS4kbmFtZXNwYWNlSWRdPT09ZHx8IlNpZ25hdHVyZSI9PT10JiZlW2EuJG5hbWVzcGFjZUlkXT09PWkuTmFtZXNwYWNlSWRzLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpLHRoaXNbYS4kYXBwZW5kQ2hpbGRdKGUpfX1dKSxyfShhLlhGQU9iamVjdCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmkuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImRhdGFzZXRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGcoZSl9fSx7a2V5OiJkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHAoZSl9fV0pLGV9KCk7dC5EYXRhc2V0c05hbWVzcGFjZT12fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Mb2NhbGVTZXROYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWQoZSk7aWYodCl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWEuTmFtZXNwYWNlSWRzLmxvY2FsZVNldC5pZCxnPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjYWxlbmRhclN5bWJvbHMiLCEwKSkubmFtZT0iZ3JlZ29yaWFuIixuLmRheU5hbWVzPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG4uZXJhTmFtZXM9bnVsbCxuLm1lcmlkaWVtTmFtZXM9bnVsbCxuLm1vbnRoTmFtZXM9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLHY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImN1cnJlbmN5U3ltYm9sIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSx5PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjdXJyZW5jeVN5bWJvbHMiLCEwKSkuY3VycmVuY3lTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMyksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLG09ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLGI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJucyIsITApKS5kYXRlUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF0ZVRpbWVTeW1ib2xzIil9cmV0dXJuIGMocil9KGkuQ29udGVudE9iamVjdCksaz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF5Iil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJkYXlOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLmRheT1uZXcgaS5YRkFPYmplY3RBcnJheSg3KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCkseD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZXJhIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJlcmFOYW1lcyIsITApKS5lcmE9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEE9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZSIsITApKS5kZXNjPWUuZGVzY3x8IiIsbi5uYW1lPSJpc29uYW1lIixuLmNhbGVuZGFyU3ltYm9scz1udWxsLG4uY3VycmVuY3lTeW1ib2xzPW51bGwsbi5kYXRlUGF0dGVybnM9bnVsbCxuLmRhdGVUaW1lU3ltYm9scz1udWxsLG4ubnVtYmVyUGF0dGVybnM9bnVsbCxuLm51bWJlclN5bWJvbHM9bnVsbCxuLnRpbWVQYXR0ZXJucz1udWxsLG4udHlwZUZhY2VzPW51bGwsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZVNldCIsITApKS5sb2NhbGU9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLHAsIm1lcmlkaWVtIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJtZXJpZGllbU5hbWVzIiwhMCkpLm1lcmlkaWVtPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxwLCJtb250aCIpfXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksST1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibW9udGhOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLm1vbnRoPW5ldyBpLlhGQU9iamVjdEFycmF5KDEyKSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksRT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyUGF0dGVybiIpKS5uYW1lPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJQYXR0ZXJucyIsITApKS5udW1iZXJQYXR0ZXJuPW5ldyBpLlhGQU9iamVjdEFycmF5KDQpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJTeW1ib2wiKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZGVjaW1hbCIsImdyb3VwaW5nIiwicGVyY2VudCIsIm1pbnVzIiwiemVybyJdKSxufXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksXz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyU3ltYm9scyIsITApKS5udW1iZXJTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoNSksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLFI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJucyIsITApKS50aW1lUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksTj1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwidHlwZUZhY2UiLCEwKSkubmFtZT0iInxlLm5hbWUsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInR5cGVGYWNlcyIsITApKS50eXBlRmFjZT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt1KHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImNhbGVuZGFyU3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnKGUpfX0se2tleToiY3VycmVuY3lTeW1ib2wiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdihlKX19LHtrZXk6ImN1cnJlbmN5U3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5KGUpfX0se2tleToiZGF0ZVBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbShlKX19LHtrZXk6ImRhdGVQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiZGF0ZVRpbWVTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJkYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgayhlKX19LHtrZXk6ImRheU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFMoZSl9fSx7a2V5OiJlcmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImVyYU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJsb2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToibWVyaWRpZW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRihlKX19LHtrZXk6Im1lcmlkaWVtTmFtZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUChlKX19LHtrZXk6Im1vbnRoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJtb250aE5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqKGUpfX0se2tleToibnVtYmVyU3ltYm9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE0oZSl9fSx7a2V5OiJudW1iZXJTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJ0aW1lUGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToidGltZVBhdHRlcm5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFIoZSl9fSx7a2V5OiJ0eXBlRmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOKGUpfX0se2tleToidHlwZUZhY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fV0pLGV9KCk7dC5Mb2NhbGVTZXROYW1lc3BhY2U9Qn0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2lnbmF0dXJlTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zaWduYXR1cmUuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGModGhpcyxpKSxhLmNhbGwodGhpcyxmLCJzaWduYXR1cmUiLCEwKX1yZXR1cm4gcyhpKX0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBzKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJzaWduYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlNpZ25hdHVyZU5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHlsZXNoZWV0TmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zdHlsZXNoZWV0LmlkLGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9bCh0KTtpZihyKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBjKHRoaXMsaSksYS5jYWxsKHRoaXMsZiwic3R5bGVzaGVldCIsITApfXJldHVybiBzKGkpfShpLlhGQU9iamVjdCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtjKHRoaXMsZSl9cmV0dXJuIHMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6InN0eWxlc2hlZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlN0eWxlc2hlZXROYW1lc3BhY2U9ZH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWGRwTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy54ZHAuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShoLGUpO3ZhciB0LHIscz0odD1oLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGgoZSl7dmFyIHQ7cmV0dXJuIG8odGhpcyxoKSwodD1zLmNhbGwodGhpcyxmLCJ4ZHAiLCEwKSkudXVpZD1lLnV1aWR8fCIiLHQudGltZVN0YW1wPWUudGltZVN0YW1wfHwiIix0LmNvbmZpZz1udWxsLHQuY29ubmVjdGlvblNldD1udWxsLHQuZGF0YXNldHM9bnVsbCx0LmxvY2FsZVNldD1udWxsLHQuc3R5bGVzaGVldD1uZXcgaS5YRkFPYmplY3RBcnJheSx0LnRlbXBsYXRlPW51bGwsdH1yZXR1cm4gYyhoLFt7a2V5OmkuJG9uQ2hpbGRDaGVjayx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hLk5hbWVzcGFjZUlkc1tlW2kuJG5vZGVOYW1lXV07cmV0dXJuIHQmJmVbaS4kbmFtZXNwYWNlSWRdPT09dC5pZH19XSksaH0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpfXJldHVybiBjKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJ4ZHAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlhkcE5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YaHRtbE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigyMDgpLG89cigyMTMpLHM9cigyMDcpO2Z1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIHQmJnUoZS5wcm90b3R5cGUsdCksciYmdShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gZigpe3JldHVybiBmPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ZyhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGgoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZChlLHQpfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGQoZSx0KX1mdW5jdGlvbiBwKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWcoZSk7aWYodCl7dmFyIGk9Zyh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8bShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24geShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9bShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gbShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgdz1pLk5hbWVzcGFjZUlkcy54aHRtbC5pZCxrPVN5bWJvbCgpLFM9bmV3IFNldChbImNvbG9yIiwiZm9udCIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtd2VpZ2h0IiwibWFyZ2luIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsImxldHRlci1zcGFjaW5nIiwibGluZS1oZWlnaHQiLCJvcnBoYW5zIiwicGFnZS1icmVhay1hZnRlciIsInBhZ2UtYnJlYWstYmVmb3JlIiwicGFnZS1icmVhay1pbnNpZGUiLCJ0YWItaW50ZXJ2YWwiLCJ0YWItc3RvcCIsInRleHQtYWxpZ24iLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LWluZGVudCIsInZlcnRpY2FsLWFsaWduIiwid2lkb3dzIiwia2VybmluZy1tb2RlIiwieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZSIsInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIiwieGZhLXNwYWNlcnVuIiwieGZhLXRhYi1zdG9wcyJdKSx4PW5ldyBNYXAoW1sicGFnZS1icmVhay1hZnRlciIsImJyZWFrQWZ0ZXIiXSxbInBhZ2UtYnJlYWstYmVmb3JlIiwiYnJlYWtCZWZvcmUiXSxbInBhZ2UtYnJlYWstaW5zaWRlIiwiYnJlYWtJbnNpZGUiXSxbImtlcm5pbmctbW9kZSIsZnVuY3Rpb24oZSl7cmV0dXJuIm5vbmUiPT09ZT8ibm9uZSI6Im5vcm1hbCJ9XSxbInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLGZ1bmN0aW9uKGUpe3JldHVybiJzY2FsZVgoIi5jb25jYXQoTWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpLCIpIil9XSxbInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIixmdW5jdGlvbihlKXtyZXR1cm4ic2NhbGVZKCIuY29uY2F0KE1hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQoZSkvMTAwKSkudG9GaXhlZCgyKSwiKSIpfV0sWyJ4ZmEtc3BhY2VydW4iLCIiXSxbInhmYS10YWItc3RvcHMiLCIiXSxbImZvbnQtc2l6ZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10LmZvbnRTaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpLCgwLG8ubWVhc3VyZVRvU3RyaW5nKSguOTkqZSl9XSxbImxldHRlci1zcGFjaW5nIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJsaW5lLWhlaWdodCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tYm90dG9tIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tbGVmdCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luLXJpZ2h0IixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tdG9wIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJ0ZXh0LWluZGVudCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsiZm9udC1mYW1pbHkiLGZ1bmN0aW9uKGUpe3JldHVybiBlfV0sWyJ2ZXJ0aWNhbC1hbGlnbiIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dXSksTz0vXHMrL2csQT0vW1xyXG5dKy9nLEM9L1xyXG4/L2c7ZnVuY3Rpb24gRihlLHQscil7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gbjt2YXIgaSxjPU9iamVjdC5jcmVhdGUobnVsbCksdT15KGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2Zvcih1LnMoKTshKGk9dS5uKCkpLmRvbmU7KXt2YXIgbD12KGkudmFsdWUsMiksZj1sWzBdLGg9bFsxXSxkPXguZ2V0KGYpO2lmKCIiIT09ZCl7dmFyIHA9aDtkJiYocD0ic3RyaW5nIj09dHlwZW9mIGQ/ZDpkKGgsYykpLGYuZW5kc1dpdGgoInNjYWxlIik/bi50cmFuc2Zvcm0/bi50cmFuc2Zvcm09IiIuY29uY2F0KG5bZl0sIiAiKS5jb25jYXQocCk6bi50cmFuc2Zvcm09cDpuW2YucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSkpXT1wfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9aWYobi5mb250RmFtaWx5JiYoMCxvLnNldEZvbnRGYW1pbHkpKHt0eXBlZmFjZTpuLmZvbnRGYW1pbHksd2VpZ2h0Om4uZm9udFdlaWdodHx8Im5vcm1hbCIscG9zdHVyZTpuLmZvbnRTdHlsZXx8Im5vcm1hbCIsc2l6ZTpjLmZvbnRTaXplfHwwfSx0LHRbYS4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixuKSxyJiZuLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09bi52ZXJ0aWNhbEFsaWduJiZuLmZvbnRTaXplKXt2YXIgZz0oMCxzLmdldE1lYXN1cmVtZW50KShuLmZvbnRTaXplKTtuLmZvbnRTaXplPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSguNTgzKmcpLG4udmVydGljYWxBbGlnbj0oMCxvLm1lYXN1cmVUb1N0cmluZykoTWF0aC5zaWduKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKG4udmVydGljYWxBbGlnbikpKmcqLjMzMyl9cmV0dXJuIHImJm4uZm9udFNpemUmJihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KG4uZm9udFNpemUsIiAqIHZhcigtLXNjYWxlLWZhY3RvcikpIikpLCgwLG8uZml4VGV4dEluZGVudCkobiksbn12YXIgUD1uZXcgU2V0KFsiYm9keSIsImh0bWwiXSksVD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIGModGhpcyxyKSwoYT10LmNhbGwodGhpcyx3LG4pKVtrXT0hMSxhLnN0eWxlPWUuc3R5bGV8fCIiLGF9cmV0dXJuIGwocixbe2tleTphLiRjbGVhbix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtmKGcoci5wcm90b3R5cGUpLGEuJGNsZWFuLHRoaXMpLmNhbGwodGhpcyxlKSx0aGlzLnN0eWxlPSh0PXRoaXMpLnN0eWxlP3Quc3R5bGUudHJpbSgpLnNwbGl0KC9ccyo7XHMqLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvXHMqOlxzKi8sMil9KSkuZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgcj12KGUsMiksbj1yWzBdLGk9clsxXTtyZXR1cm4iZm9udC1mYW1pbHkiPT09biYmdFthLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZChpKSxTLmhhcyhuKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmpvaW4oIjoiKX0pKS5qb2luKCI7Iik6IiJ9fSx7a2V5OmEuJGFjY2VwdFdoaXRlc3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hUC5oYXModGhpc1thLiRub2RlTmFtZV0pfX0se2tleTphLiRvblRleHQsdmFsdWU6ZnVuY3Rpb24oZSl7YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXT90aGlzW2tdPSEwOihlPWUucmVwbGFjZShBLCIiKSx0aGlzLnN0eWxlLmluY2x1ZGVzKCJ4ZmEtc3BhY2VydW46eWVzIil8fChlPWUucmVwbGFjZShPLCIgIikpKSxlJiYodGhpc1thLiRjb250ZW50XSs9ZSl9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPXt0b3A6TmFOLGJvdHRvbTpOYU4sbGVmdDpOYU4scmlnaHQ6TmFOfSxvPW51bGwsYz15KHRoaXMuc3R5bGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2ZvcihjLnMoKTshKHQ9Yy5uKCkpLmRvbmU7KXt2YXIgdT12KHQudmFsdWUsMiksbD11WzBdLGY9dVsxXTtzd2l0Y2gobCl7Y2FzZSJmb250LWZhbWlseSI6bi50eXBlZmFjZT0oMCxzLnN0cmlwUXVvdGVzKShmKTticmVhaztjYXNlImZvbnQtc2l6ZSI6bi5zaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UiZm9udC13ZWlnaHQiOm4ud2VpZ2h0PWY7YnJlYWs7Y2FzZSJmb250LXN0eWxlIjpuLnBvc3R1cmU9ZjticmVhaztjYXNlImxldHRlci1zcGFjaW5nIjpuLmxldHRlclNwYWNpbmc9KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4iOnZhciBoPWYuc3BsaXQoLyBcdC8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAscy5nZXRNZWFzdXJlbWVudCkoZSl9KSk7c3dpdGNoKGgubGVuZ3RoKXtjYXNlIDE6aS50b3A9aS5ib3R0b209aS5sZWZ0PWkucmlnaHQ9aFswXTticmVhaztjYXNlIDI6aS50b3A9aS5ib3R0b209aFswXSxpLmxlZnQ9aS5yaWdodD1oWzFdO2JyZWFrO2Nhc2UgMzppLnRvcD1oWzBdLGkuYm90dG9tPWhbMl0saS5sZWZ0PWkucmlnaHQ9aFsxXTticmVhaztjYXNlIDQ6aS50b3A9aFswXSxpLmxlZnQ9aFsxXSxpLmJvdHRvbT1oWzJdLGkucmlnaHQ9aFszXX1icmVhaztjYXNlIm1hcmdpbi10b3AiOmkudG9wPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLWJvdHRvbSI6aS5ib3R0b209KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4tbGVmdCI6aS5sZWZ0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLXJpZ2h0IjppLnJpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibGluZS1oZWlnaHQiOm89KDAscy5nZXRNZWFzdXJlbWVudCkoZil9fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1pZihlLnB1c2hEYXRhKG4saSxvKSx0aGlzW2EuJGNvbnRlbnRdKWUuYWRkU3RyaW5nKHRoaXNbYS4kY29udGVudF0pO2Vsc2V7dmFyIGQscD15KHRoaXNbYS4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTsiI3RleHQiIT09Z1thLiRub2RlTmFtZV0/Z1thLiRwdXNoR2x5cGhzXShlKTplLmFkZFN0cmluZyhnW2EuJGNvbnRlbnRdKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fXImJmUucG9wRm9udCgpfX0se2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1bXTtyZXR1cm4gdGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnJ9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwIT09ci5sZW5ndGh8fHRoaXNbYS4kY29udGVudF0/KHQ9dGhpc1trXT90aGlzW2EuJGNvbnRlbnRdP3RoaXNbYS4kY29udGVudF0ucmVwbGFjZShDLCJcbiIpOnZvaWQgMDp0aGlzW2EuJGNvbnRlbnRdfHx2b2lkIDAscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6dGhpc1thLiRub2RlTmFtZV0sYXR0cmlidXRlczp7aHJlZjp0aGlzLmhyZWYsc3R5bGU6Rih0aGlzLnN0eWxlLHRoaXMsdGhpc1trXSl9LGNoaWxkcmVuOnIsdmFsdWU6dH0pKTpzLkhUTUxSZXN1bHQuRU1QVFl9fV0pLHJ9KGEuWG1sT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxlLCJhIikpLmhyZWY9KDAsby5maXhVUkwpKGUuaHJlZil8fCIiLG59cmV0dXJuIGwocil9KFQpLEU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImIiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wdXNoRm9udCh7d2VpZ2h0OiJib2xkIn0pLGYoZyhyLnByb3RvdHlwZSksYS4kcHVzaEdseXBocyx0aGlzKS5jYWxsKHRoaXMsZSksZS5wb3BGb250KCl9fV0pLHJ9KFQpLGo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImJvZHkiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1mKGcoci5wcm90b3R5cGUpLGEuJHRvSFRNTCx0aGlzKS5jYWxsKHRoaXMsZSksbj10Lmh0bWw7cmV0dXJuIG4/KG4ubmFtZT0iZGl2IixuLmF0dHJpYnV0ZXMuY2xhc3M9WyJ4ZmFSaWNoIl0sdCk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShUKSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJiciIpfXJldHVybiBsKHIsW3trZXk6YS4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJcbiJ9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5hZGRTdHJpbmcoIlxuIil9fSx7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImJyIn0pfX1dKSxyfShUKSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJodG1sIil9cmV0dXJuIGwocixbe2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYodGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnR9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwPT09dC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSx2YWx1ZTp0aGlzW2EuJGNvbnRlbnRdfHwiIn0pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIHI9dFswXTtpZihyLmF0dHJpYnV0ZXMmJnIuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhyKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19XSkscn0oVCksTD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiaSIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtlLnB1c2hGb250KHtwb3N0dXJlOiJpdGFsaWMifSksZihnKHIucHJvdG90eXBlKSxhLiRwdXNoR2x5cGhzLHRoaXMpLmNhbGwodGhpcyxlKSxlLnBvcEZvbnQoKX19XSkscn0oVCksUj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwibGkiKX1yZXR1cm4gbChyKX0oVCksTj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwib2wiKX1yZXR1cm4gbChyKX0oVCksRD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwicCIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtmKGcoci5wcm90b3R5cGUpLGEuJHB1c2hHbHlwaHMsdGhpcykuY2FsbCh0aGlzLGUsITEpLGUuYWRkU3RyaW5nKCJcbiIpLGUuYWRkUGFyYSgpLGUucG9wRm9udCgpfX0se2tleTphLiR0ZXh0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYS4kZ2V0UGFyZW50XSgpW2EuJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcyk6ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcykrIlxuIn19XSkscn0oVCksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3BhbiIpfXJldHVybiBsKHIpfShUKSxVPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJzdWIiKX1yZXR1cm4gbChyKX0oVCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3VwIil9cmV0dXJuIGwocil9KFQpLFg9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsInVsIil9cmV0dXJuIGwocil9KFQpLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBsKGUsbnVsbCxbe2tleTppLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJiIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJib2R5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGooZSl9fSx7a2V5OiJiciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNKGUpfX0se2tleToiaHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBfKGUpfX0se2tleToiaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToibGkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUihlKX19LHtrZXk6Im9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE4oZSl9fSx7a2V5OiJwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fSx7a2V5OiJzcGFuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEIoZSl9fSx7a2V5OiJzdWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVShlKX19LHtrZXk6InN1cCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyAkKGUpfX0se2tleToidWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWChlKX19XSksZX0oKTt0LlhodG1sTmFtZXNwYWNlPUh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgbj1yKDIwOCksYT1yKDIwNik7ZnVuY3Rpb24gaShlKXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0saShlKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWkoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1pKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aShhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMubmFtZXNwYWNlSWQ9dH12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6bi4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGEuWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsZSx0KX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LlVua25vd25OYW1lc3BhY2U9c30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGF0YXNldFJlYWRlcj12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTk1KTtmdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoKXtyZXR1cm4gbD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oZSx0KXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSYmbnVsbCE9PShlPWgoZSkpOyk7cmV0dXJuIGV9KGUsdCk7aWYobil7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpO3JldHVybiBhLmdldD9hLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9lOnIpOmEudmFsdWV9fSxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX1mdW5jdGlvbiBkKGUpe3RyeXtyZXR1cm4oMCxhLnN0cmluZ1RvVVRGOFN0cmluZykoZSl9Y2F0Y2godCl7cmV0dXJuKDAsYS53YXJuKSgnVVRGLTggZGVjb2RpbmcgZmFpbGVkOiAiJy5jb25jYXQodCwnIi4nKSksZX19dmFyIHA9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9aCh0KTtpZihyKXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3ZhciB0O3JldHVybiBzKHRoaXMsaSksKHQ9YS5jYWxsKHRoaXMsZSkpLm5vZGU9bnVsbCx0fXJldHVybiB1KGksW3trZXk6Im9uRW5kRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bChoKGkucHJvdG90eXBlKSwib25FbmRFbGVtZW50Iix0aGlzKS5jYWxsKHRoaXMsZSk7aWYodCYmInhmYTpkYXRhc2V0cyI9PT1lKXRocm93IHRoaXMubm9kZT10LG5ldyBFcnJvcigiQWJvcnRpbmcgRGF0YXNldFhNTFBhcnNlci4iKX19XSksaX0oby5TaW1wbGVYTUxQYXJzZXIpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKHModGhpcyxlKSx0LmRhdGFzZXRzKXRoaXMubm9kZT1uZXcgby5TaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcodC5kYXRhc2V0cykuZG9jdW1lbnRFbGVtZW50O2Vsc2V7dmFyIHI9bmV3IHAoe2hhc0F0dHJpYnV0ZXM6ITB9KTt0cnl7ci5wYXJzZUZyb21TdHJpbmcodFsieGRwOnhkcCJdKX1jYXRjaChlKXt9dGhpcy5ub2RlPXIubm9kZX19cmV0dXJuIHUoZSxbe2tleToiZ2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLm5vZGV8fCFlKXJldHVybiIiO3ZhciB0PXRoaXMubm9kZS5zZWFyY2hOb2RlKCgwLGkucGFyc2VYRkFQYXRoKShlKSwwKTtpZighdClyZXR1cm4iIjt2YXIgcj10LmZpcnN0Q2hpbGQ7cmV0dXJuIHImJiJ2YWx1ZSI9PT1yLm5vZGVOYW1lP3QuY2hpbGRyZW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZChlLnRleHRDb250ZW50KX0pKTpkKHQudGV4dENvbnRlbnQpfX1dKSxlfSgpO3QuRGF0YXNldFJlYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWFJlZj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTQ2KSxzPXIoMTM2KSxjPXIoMTk2KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoKXtsPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciBsPWMuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXUoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGYoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBoKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe2YoaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2YoaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBwKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cChlLHQpOnZvaWQgMH19KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5wZGZNYW5hZ2VyPXIsdGhpcy5lbnRyaWVzPVtdLHRoaXMueHJlZnN0bXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9jYWNoZU1hcD1uZXcgTWFwLHRoaXMuX3BlbmRpbmdSZWZzPW5ldyBhLlJlZlNldCx0aGlzLnN0YXRzPW5ldyBpLkRvY1N0YXRzKHIubXNnSGFuZGxlciksdGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT1udWxsLHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsfXZhciB0LHIsdSxmO3JldHVybiB0PWUscj1be2tleToiZ2V0TmV3UGVyc2lzdGVudFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSl7bnVsbD09PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0mJih0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO3ZhciB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKztyZXR1cm4gdGhpcy5fY2FjaGVNYXAuc2V0KHQsZSksYS5SZWYuZ2V0KHQsMCl9fSx7a2V5OiJnZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0mJih0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09dGhpcy5lbnRyaWVzLmxlbmd0aHx8MSksYS5SZWYuZ2V0KHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSsrLDApfX0se2tleToicmVzZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGx9fSx7a2V5OiJzZXRTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RhcnRYUmVmUXVldWU9W2VdfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG89YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtvPygoMCxuLndhcm4pKCJJbmRleGluZyBhbGwgUERGIG9iamVjdHMiKSxlPXRoaXMuaW5kZXhPYmplY3RzKCkpOmU9dGhpcy5yZWFkWFJlZigpLGUuYXNzaWduWHJlZih0aGlzKSx0aGlzLnRyYWlsZXI9ZTt0cnl7dD1lLmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHQgaW5zdGFuY2VvZiBhLkRpY3Qpe3ZhciBzPWUuZ2V0KCJJRCIpLHU9cyYmcy5sZW5ndGg/c1swXToiIjt0LnN1cHByZXNzRW5jcnlwdGlvbj0hMCx0aGlzLmVuY3J5cHQ9bmV3IGMuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSh0LHUsdGhpcy5wZGZNYW5hZ2VyLnBhc3N3b3JkKX10cnl7cj1lLmdldCgiUm9vdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlJvb3QiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHIgaW5zdGFuY2VvZiBhLkRpY3QpdHJ5e2lmKHIuZ2V0KCJQYWdlcyIpaW5zdGFuY2VvZiBhLkRpY3QpcmV0dXJuIHZvaWQodGhpcy5yb290PXIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlBhZ2VzIiByZWZlcmVuY2U6ICInLmNvbmNhdChlLCciLicpKX1pZighbyl0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247dGhyb3cgbmV3IG4uSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBSb290IHJlZmVyZW5jZS4iKX19LHtrZXk6InByb2Nlc3NYUmVmVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpeyJ0YWJsZVN0YXRlImluIHRoaXN8fCh0aGlzLnRhYmxlU3RhdGU9e2VudHJ5TnVtOjAsc3RyZWFtUG9zOmUubGV4ZXIuc3RyZWFtLnBvcyxwYXJzZXJCdWYxOmUuYnVmMSxwYXJzZXJCdWYyOmUuYnVmMn0pO3ZhciB0PXRoaXMucmVhZFhSZWZUYWJsZShlKTtpZighKDAsYS5pc0NtZCkodCwidHJhaWxlciIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO3ZhciByPWUuZ2V0T2JqKCk7aWYociBpbnN0YW5jZW9mIGEuRGljdHx8IXIuZGljdHx8KHI9ci5kaWN0KSwhKHIgaW5zdGFuY2VvZiBhLkRpY3QpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnkiKTtyZXR1cm4gZGVsZXRlIHRoaXMudGFibGVTdGF0ZSxyfX0se2tleToicmVhZFhSZWZUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxleGVyLnN0cmVhbSxpPXRoaXMudGFibGVTdGF0ZTtmb3Ioci5wb3M9aS5zdHJlYW1Qb3MsZS5idWYxPWkucGFyc2VyQnVmMSxlLmJ1ZjI9aS5wYXJzZXJCdWYyOzspe2lmKCEoImZpcnN0RW50cnlOdW0iaW4gaSl8fCEoImVudHJ5Q291bnQiaW4gaSkpe2lmKCgwLGEuaXNDbWQpKHQ9ZS5nZXRPYmooKSwidHJhaWxlciIpKWJyZWFrO2kuZmlyc3RFbnRyeU51bT10LGkuZW50cnlDb3VudD1lLmdldE9iaigpfXZhciBvPWkuZmlyc3RFbnRyeU51bSxzPWkuZW50cnlDb3VudDtpZighTnVtYmVyLmlzSW50ZWdlcihvKXx8IU51bWJlci5pc0ludGVnZXIocykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IodmFyIGM9aS5lbnRyeU51bTtjPHM7YysrKXtpLnN0cmVhbVBvcz1yLnBvcyxpLmVudHJ5TnVtPWMsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyO3ZhciB1PXt9O3Uub2Zmc2V0PWUuZ2V0T2JqKCksdS5nZW49ZS5nZXRPYmooKTt2YXIgbD1lLmdldE9iaigpO2lmKGwgaW5zdGFuY2VvZiBhLkNtZClzd2l0Y2gobC5jbWQpe2Nhc2UiZiI6dS5mcmVlPSEwO2JyZWFrO2Nhc2UibiI6dS51bmNvbXByZXNzZWQ9ITB9aWYoIU51bWJlci5pc0ludGVnZXIodS5vZmZzZXQpfHwhTnVtYmVyLmlzSW50ZWdlcih1Lmdlbil8fCF1LmZyZWUmJiF1LnVuY29tcHJlc3NlZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICIuY29uY2F0KG8sIiwgIikuY29uY2F0KHMpKTswPT09YyYmdS5mcmVlJiYxPT09byYmKG89MCksdGhpcy5lbnRyaWVzW2Mrb118fCh0aGlzLmVudHJpZXNbYytvXT11KX1pLmVudHJ5TnVtPTAsaS5zdHJlYW1Qb3M9ci5wb3MsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyLGRlbGV0ZSBpLmZpcnN0RW50cnlOdW0sZGVsZXRlIGkuZW50cnlDb3VudH1pZih0aGlzLmVudHJpZXNbMF0mJiF0aGlzLmVudHJpZXNbMF0uZnJlZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB1bmV4cGVjdGVkIGZpcnN0IG9iamVjdCIpO3JldHVybiB0fX0se2tleToicHJvY2Vzc1hSZWZTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCEoInN0cmVhbVN0YXRlImluIHRoaXMpKXt2YXIgdD1lLmRpY3Qscj10LmdldCgiVyIpLG49dC5nZXQoIkluZGV4Iik7bnx8KG49WzAsdC5nZXQoIlNpemUiKV0pLHRoaXMuc3RyZWFtU3RhdGU9e2VudHJ5UmFuZ2VzOm4sYnl0ZVdpZHRoczpyLGVudHJ5TnVtOjAsc3RyZWFtUG9zOmUucG9zfX1yZXR1cm4gdGhpcy5yZWFkWFJlZlN0cmVhbShlKSxkZWxldGUgdGhpcy5zdHJlYW1TdGF0ZSxlLmRpY3R9fSx7a2V5OiJyZWFkWFJlZlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHJlYW1TdGF0ZTtlLnBvcz10LnN0cmVhbVBvcztmb3IodmFyIHI9ZCh0LmJ5dGVXaWR0aHMsMyksYT1yWzBdLGk9clsxXSxvPXJbMl0scz10LmVudHJ5UmFuZ2VzO3MubGVuZ3RoPjA7KXt2YXIgYz1kKHMsMiksdT1jWzBdLGw9Y1sxXTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiByYW5nZSBmaWVsZHM6ICIuY29uY2F0KHUsIiwgIikuY29uY2F0KGwpKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IU51bWJlci5pc0ludGVnZXIoaSl8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogIi5jb25jYXQodSwiLCAiKS5jb25jYXQobCkpO2Zvcih2YXIgZj10LmVudHJ5TnVtO2Y8bDsrK2Ype3QuZW50cnlOdW09Zix0LnN0cmVhbVBvcz1lLnBvcztmb3IodmFyIGg9MCxwPTAsZz0wLHY9MDt2PGE7Kyt2KXt2YXIgeT1lLmdldEJ5dGUoKTtpZigtMT09PXkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy4iKTtoPWg8PDh8eX0wPT09YSYmKGg9MSk7Zm9yKHZhciBtPTA7bTxpOysrbSl7dmFyIGI9ZS5nZXRCeXRlKCk7aWYoLTE9PT1iKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtwPXA8PDh8Yn1mb3IodmFyIHc9MDt3PG87Kyt3KXt2YXIgaz1lLmdldEJ5dGUoKTtpZigtMT09PWspdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtnPWc8PDh8a312YXIgUz17fTtzd2l0Y2goUy5vZmZzZXQ9cCxTLmdlbj1nLGgpe2Nhc2UgMDpTLmZyZWU9ITA7YnJlYWs7Y2FzZSAxOlMudW5jb21wcmVzc2VkPSEwO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogIi5jb25jYXQoaCkpfXRoaXMuZW50cmllc1t1K2ZdfHwodGhpcy5lbnRyaWVzW3UrZl09Uyl9dC5lbnRyeU51bT0wLHQuc3RyZWFtUG9zPWUucG9zLHMuc3BsaWNlKDAsMil9fX0se2tleToiaW5kZXhPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIHI9IiIsbj1lW3RdOzEwIT09biYmMTMhPT1uJiY2MCE9PW4mJiEoKyt0Pj1lLmxlbmd0aCk7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUobiksbj1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHQoZSx0LHIpe2Zvcih2YXIgbj1yLmxlbmd0aCxhPWUubGVuZ3RoLGk9MDt0PGE7KXtmb3IodmFyIG89MDtvPG4mJmVbdCtvXT09PXJbb107KSsrbztpZihvPj1uKWJyZWFrO3QrKyxpKyt9cmV0dXJuIGl9dmFyIHI9L1xiKGVuZG9ianxcZCtccytcZCtccytvYmp8eHJlZnx0cmFpbGVyKVxiL2cscz0vXGIoc3RhcnR4cmVmfFxkK1xzK1xkK1xzK29iailcYi9nLGM9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLHU9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSksbD1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLGY9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTAsdGhpcy5fY2FjaGVNYXAuY2xlYXIoKTt2YXIgaD10aGlzLnN0cmVhbTtoLnBvcz0wO2Zvcih2YXIgZCxwLGc9aC5nZXRCeXRlcygpLHY9KDAsbi5ieXRlc1RvU3RyaW5nKShnKSx5PWcubGVuZ3RoLG09aC5zdGFydCxiPVtdLHc9W107bTx5Oyl7dmFyIGs9Z1ttXTtpZig5IT09ayYmMTAhPT1rJiYxMyE9PWsmJjMyIT09aylpZigzNyE9PWspe3ZhciBTPWUoZyxtKSx4PXZvaWQgMDtpZihTLnN0YXJ0c1dpdGgoInhyZWYiKSYmKDQ9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbNF0pKSltKz10KGcsbSx1KSxiLnB1c2gobSksbSs9dChnLG0sbCk7ZWxzZSBpZih4PWMuZXhlYyhTKSl7dmFyIE89MHx4WzFdLEE9MHx4WzJdLEM9bStTLmxlbmd0aCxGPXZvaWQgMCxQPSExO2lmKHRoaXMuZW50cmllc1tPXSl7aWYodGhpcy5lbnRyaWVzW09dLmdlbj09PUEpdHJ5e25ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoaC5tYWtlU3ViU3RyZWFtKEMpKX0pLmdldE9iaigpLFA9ITB9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIGkuUGFyc2VyRU9GRXhjZXB0aW9uPygwLG4ud2FybikoImluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCIuY29uY2F0KFMsJyk6ICInKS5jb25jYXQoZSwnIi4nKSk6UD0hMH19ZWxzZSBQPSEwO1AmJih0aGlzLmVudHJpZXNbT109e29mZnNldDptLWguc3RhcnQsZ2VuOkEsdW5jb21wcmVzc2VkOiEwfSksci5sYXN0SW5kZXg9Qzt2YXIgVD1yLmV4ZWModik7VD8oRj1yLmxhc3RJbmRleCsxLW0sImVuZG9iaiIhPT1UWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoVFsxXSwnIiBpbnNpZGUgb2YgYW5vdGhlciAib2JqIiwgJykrJ2NhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLicpLEYtPVRbMV0ubGVuZ3RoKzEpKTpGPXktbTt2YXIgST1nLnN1YmFycmF5KG0sbStGKSxFPXQoSSwwLGYpO0U8RiYmSVtFKzVdPDY0JiYody5wdXNoKG0taC5zdGFydCksdGhpcy54cmVmc3Rtc1ttLWguc3RhcnRdPTEpLG0rPUZ9ZWxzZSBpZihTLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbN10pKSl7Yi5wdXNoKG0pO3ZhciBqPW0rUy5sZW5ndGgsTT12b2lkIDA7cy5sYXN0SW5kZXg9ajt2YXIgXz1zLmV4ZWModik7Xz8oTT1zLmxhc3RJbmRleCsxLW0sInN0YXJ0eHJlZiIhPT1fWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoX1sxXSwnIiBhZnRlciAidHJhaWxlciIsICcpKydjYXVzZWQgYnkgbWlzc2luZyAic3RhcnR4cmVmIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxNLT1fWzFdLmxlbmd0aCsxKSk6TT15LW0sbSs9TX1lbHNlIG0rPVMubGVuZ3RoKzF9ZWxzZSBkb3tpZigrK20+PXkpYnJlYWs7az1nW21dfXdoaWxlKDEwIT09ayYmMTMhPT1rKTtlbHNlKyttfWZvcih2YXIgTD0wLFI9dztMPFIubGVuZ3RoO0wrKyl7dmFyIE49UltMXTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goTiksdGhpcy5yZWFkWFJlZighMCl9Zm9yKHZhciBEPTAsQj1bXS5jb25jYXQoYixbImdlbmVyYXRpb25GYWxsYmFjayJdLGIpO0Q8Qi5sZW5ndGg7RCsrKXt2YXIgVT1CW0RdO2lmKCJnZW5lcmF0aW9uRmFsbGJhY2siIT09VSl7aC5wb3M9VTt2YXIgJD1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGgpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSksWD0kLmdldE9iaigpO2lmKCgwLGEuaXNDbWQpKFgsInRyYWlsZXIiKSl7dmFyIEg9JC5nZXRPYmooKTtpZihIIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcT0hMTt0cnl7dmFyIEc9SC5nZXQoIlJvb3QiKTtpZighKEcgaW5zdGFuY2VvZiBhLkRpY3QpKWNvbnRpbnVlO3ZhciB6PUcuZ2V0KCJQYWdlcyIpO2lmKCEoeiBpbnN0YW5jZW9mIGEuRGljdCkpY29udGludWU7dmFyIFc9ei5nZXQoIkNvdW50Iik7TnVtYmVyLmlzSW50ZWdlcihXKSYmKHE9ITApfWNhdGNoKGUpe3A9ZTtjb250aW51ZX1pZihxJiZILmhhcygiSUQiKSlyZXR1cm4gSDtkPUh9fX1lbHNle2lmKCFwKWJyZWFrO3RoaXMuX2dlbmVyYXRpb25GYWxsYmFjaz0hMH19aWYoZClyZXR1cm4gZDtpZih0aGlzLnRvcERpY3QpcmV0dXJuIHRoaXMudG9wRGljdDt0aHJvdyBuZXcgbi5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuIil9fSx7a2V5OiJyZWFkWFJlZiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PXRoaXMuc3RyZWFtLHI9bmV3IFNldDt0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aDspe3RyeXt2YXIgYz10aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO2lmKHIuaGFzKGMpKXsoMCxuLndhcm4pKCJyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLiIpLHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtjb250aW51ZX1yLmFkZChjKSx0LnBvcz1jK3Quc3RhcnQ7dmFyIHU9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcih0KSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksbD11LmdldE9iaigpLGY9dm9pZCAwO2lmKCgwLGEuaXNDbWQpKGwsInhyZWYiKSl7aWYoZj10aGlzLnByb2Nlc3NYUmVmVGFibGUodSksdGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWYpLGw9Zi5nZXQoIlhSZWZTdG0iKSxOdW1iZXIuaXNJbnRlZ2VyKGwpKXt2YXIgaD1sO2ggaW4gdGhpcy54cmVmc3Rtc3x8KHRoaXMueHJlZnN0bXNbaF09MSx0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goaCkpfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih1LmdldE9iaigpKSYmKDAsYS5pc0NtZCkodS5nZXRPYmooKSwib2JqIikmJihsPXUuZ2V0T2JqKCkpaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7aWYoZj10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGwpLHRoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1mKSwhZil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1sPWYuZ2V0KCJQcmV2IiksTnVtYmVyLmlzSW50ZWdlcihsKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobCk6bCBpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobC5udW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbn19LHtrZXk6ImdldEVudHJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmVudHJpZXNbZV07cmV0dXJuIHQmJiF0LmZyZWUmJnQub2Zmc2V0P3Q6bnVsbH19LHtrZXk6ImZldGNoSWZSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07cmV0dXJuIGUgaW5zdGFuY2VvZiBhLlJlZj90aGlzLmZldGNoKGUsdCk6ZX19LHtrZXk6ImZldGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKCEoZSBpbnN0YW5jZW9mIGEuUmVmKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7dmFyIHI9ZS5udW0saT10aGlzLl9jYWNoZU1hcC5nZXQocik7aWYodm9pZCAwIT09aSlyZXR1cm4gaSBpbnN0YW5jZW9mIGEuRGljdCYmIWkub2JqSWQmJihpLm9iaklkPWUudG9TdHJpbmcoKSksaTt2YXIgbz10aGlzLmdldEVudHJ5KHIpO2lmKG51bGw9PT1vKXJldHVybiB0aGlzLl9jYWNoZU1hcC5zZXQocixvKSxvO2lmKHRoaXMuX3BlbmRpbmdSZWZzLmhhcyhlKSlyZXR1cm4gdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpLCgwLG4ud2FybikoIklnbm9yaW5nIGNpcmN1bGFyIHJlZmVyZW5jZTogIi5jb25jYXQoZSwiLiIpKSxhLkNJUkNVTEFSX1JFRjt0aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e289by51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLG8sdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxvLHQpLHRoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aHJvdyB0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSksdH1yZXR1cm4gbyBpbnN0YW5jZW9mIGEuRGljdD9vLm9iaklkPWUudG9TdHJpbmcoKTpvIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYoby5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSksb319LHtrZXk6ImZldGNoVW5jb21wcmVzc2VkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYz1lLmdlbix1PWUubnVtO2lmKHQuZ2VuIT09Yyl7dmFyIGw9IkluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICIuY29uY2F0KGUpO2lmKHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayYmdC5nZW48YylyZXR1cm4oMCxuLndhcm4pKGwpLHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQoYS5SZWYuZ2V0KHUsdC5nZW4pLHQscik7dGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKGwpfXZhciBmPXRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0odC5vZmZzZXQrdGhpcy5zdHJlYW0uc3RhcnQpLGg9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcihmKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksZD1oLmdldE9iaigpLHA9aC5nZXRPYmooKSxnPWguZ2V0T2JqKCk7aWYoZCE9PXV8fHAhPT1jfHwhKGcgaW5zdGFuY2VvZiBhLkNtZCkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpO2lmKCJvYmoiIT09Zy5jbWQpe2lmKGcuY21kLnN0YXJ0c1dpdGgoIm9iaiIpJiYodT1wYXJzZUludChnLmNtZC5zdWJzdHJpbmcoMyksMTApLCFOdW1iZXIuaXNOYU4odSkpKXJldHVybiB1O3Rocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbigiQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKX1yZXR1cm4odD10aGlzLmVuY3J5cHQmJiFyP2guZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odSxjKSk6aC5nZXRPYmooKSlpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KHUsdCksdH19LHtrZXk6ImZldGNoQ29tcHJlc3NlZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10Lm9mZnNldCxjPXRoaXMuZmV0Y2goYS5SZWYuZ2V0KHIsMCkpO2lmKCEoYyBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImJhZCBPYmpTdG0gc3RyZWFtIik7dmFyIHU9Yy5kaWN0LmdldCgiRmlyc3QiKSxsPWMuZGljdC5nZXQoIk4iKTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbSIpO2Zvcih2YXIgZj1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGMpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSxoPW5ldyBBcnJheShsKSxkPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCl7dmFyIGc9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihnKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdChnKSk7dmFyIHY9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcih2KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdCh2KSk7aFtwXT1nLGRbcF09dn1mb3IodmFyIHk9KGMuc3RhcnR8fDApK3UsbT1uZXcgQXJyYXkobCksYj0wO2I8bDsrK2Ipe3ZhciB3PWI8bC0xP2RbYisxXS1kW2JdOnZvaWQgMDtpZih3PDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtLiIpO3ZhciBrPShmPW5ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoYy5tYWtlU3ViU3RyZWFtKHkrZFtiXSx3LGMuZGljdCkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSkuZ2V0T2JqKCk7aWYobVtiXT1rLCEoayBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpe3ZhciBTPWhbYl0seD10aGlzLmVudHJpZXNbU107eCYmeC5vZmZzZXQ9PT1yJiZ4Lmdlbj09PWImJnRoaXMuX2NhY2hlTWFwLnNldChTLGspfX1pZih2b2lkIDA9PT0odD1tW3QuZ2VuXSkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKGNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKTtyZXR1cm4gdH19LHtrZXk6ImZldGNoSWZSZWZBc3luYyIsdmFsdWU6KGY9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoISh0IGluc3RhbmNlb2YgYS5SZWYpKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5mZXRjaEFzeW5jKHQscikpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hBc3luYyIsdmFsdWU6KHU9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2godCxyKSk7Y2FzZSA0OmlmKGUucHJldj00LGUudDA9ZS5jYXRjaCgwKSxlLnQwIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCx0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGUudDAuYmVnaW4sZS50MC5lbmQpO2Nhc2UgMTA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2hBc3luYyh0LHIpKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw0XV0pfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRDYXRhbG9nT2JqIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9fV0sciYmZyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWFJlZj12fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixjPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8sYyl7dmFyIHU9aChlW25dLGUsaSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8sYyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLG8obCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8sYyl9KSl9Yyh1LmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodix1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LHUsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gaShlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1zKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSl7c3dpdGNoKGUgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKGUpJiZudWxsIT09ZXx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksZS5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKGUubWVzc2FnZSxlLnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3ZhciBhPXRoaXM7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zb3VyY2VOYW1lPXQsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZT09PWEuc291cmNlTmFtZSlpZih0LnN0cmVhbSlhLl9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KTtlbHNlIGlmKHQuY2FsbGJhY2spe3ZhciByPXQuY2FsbGJhY2tJZCxpPWEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PXQuY2FsbGJhY2spaS5yZXNvbHZlKHQuZGF0YSk7ZWxzZXtpZigyIT09dC5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2kucmVqZWN0KGModC5yZWFzb24pKX19ZWxzZXt2YXIgbz1hLmFjdGlvbkhhbmRsZXJbdC5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KHQuYWN0aW9uKSk7aWYodC5jYWxsYmFja0lkKXt2YXIgcz1hLnNvdXJjZU5hbWUsdT10LnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uobyh0LmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihlKXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTplfSl9KSwoZnVuY3Rpb24oZSl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLHJlYXNvbjpjKGUpfSl9KSl9ZWxzZSB0LnN0cmVhbUlkP2EuX2NyZWF0ZVN0cmVhbVNpbmsodCk6byh0LmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIHQscixzLHU7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYocltlXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KGUsJyInKSk7cltlXT10fX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246ZSxkYXRhOnR9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5jYWxsYmFja0lkKyssaT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbYV09aTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6YSxkYXRhOnR9LHIpfWNhdGNoKGUpe2kucmVqZWN0KGUpfXJldHVybiBpLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIGk9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxsPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBjPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6YyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246ZSxzdHJlYW1JZDpvLGRhdGE6dCxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxhKSxjLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gaS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD10LGwucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSksdC5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciB0PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD10LGkuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpjKGUpfSksdC5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbihlKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgYz10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sYz4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo0LHN0cmVhbUlkOnQsY2h1bms6ZX0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGkucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjMsc3RyZWFtSWQ6dH0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW3RdKX0sZXJyb3I6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsaS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NSxzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW3RdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QocyhlLmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06OCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo4LHN0cmVhbUlkOnQscmVhc29uOmMoZSl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxzPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIDg6ZS5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNzplLnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZlLmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9ZS5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ZShzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo3LHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjcsc3RyZWFtSWQ6dCxyZWFzb246YyhlKX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUoZS5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihjKGUucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLHQpO2JyZWFrO2Nhc2UgMjplLnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGMoZS5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt0KHMub25DYW5jZWwmJnMub25DYW5jZWwoYyhlLnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjIsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06MixzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QoYyhlLnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbdF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9YSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW3Quc3RhcnRDYWxsJiZ0LnN0YXJ0Q2FsbC5wcm9taXNlLHQucHVsbENhbGwmJnQucHVsbENhbGwucHJvbWlzZSx0LmNhbmNlbENhbGwmJnQuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXMuYXBwbHkoZSx0KTtmdW5jdGlvbiBvKGUpe2koYSxyLG4sbyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2koYSxyLG4sbyxjLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NZXNzYWdlSGFuZGxlcj11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGV29ya2VyU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsYz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGwoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7bCh7fSwiIil9Y2F0Y2goZSl7bD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307bCh5LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLG8pJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtsKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLGMpe3ZhciB1PWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBsPXUuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXMoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLGMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8sYyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLGMpfSkpfWModS5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtvXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1sKHYsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGwoZSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGwoUy5wcm90b3R5cGUsYywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGwodyx1LCJHZW5lcmF0b3IiKSxsKHcsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxsKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGkoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBvPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKGUpe2kobyxuLGEscyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2kobyxuLGEscyxjLCJ0aHJvdyIsZSl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGYoZSxbe2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZXb3JrZXJTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4iKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1uZXcgZCh0aGlzLl9tc2dIYW5kbGVyKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBwKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTtyZXR1cm4gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXImJnRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChlKTt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl0LnZhbHVlLmNhbmNlbChlKX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19fV0pLGV9KCk7dC5QREZXb3JrZXJTdHJlYW09aDt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dGhpczt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO3ZhciBuPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJlYWRlciIpO3RoaXMuX3JlYWRlcj1uLmdldFJlYWRlcigpLHRoaXMuX2hlYWRlcnNSZWFkeT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiUmVhZGVySGVhZGVyc1JlYWR5IikudGhlbigoZnVuY3Rpb24oZSl7ci5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ZS5pc1N0cmVhbWluZ1N1cHBvcnRlZCxyLl9pc1JhbmdlU3VwcG9ydGVkPWUuaXNSYW5nZVN1cHBvcnRlZCxyLl9jb250ZW50TGVuZ3RoPWUuY29udGVudExlbmd0aH0pKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOih0PW8oYSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSAyOmlmKHQ9ZS5zZW50LHI9dC52YWx1ZSwhdC5kb25lKXtlLm5leHQ9NzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6ci5idWZmZXIsZG9uZTohMX0pO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19XSksZX0oKSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dSh0aGlzLGUpLHRoaXMuX21zZ0hhbmRsZXI9bix0aGlzLm9uUHJvZ3Jlc3M9bnVsbDt2YXIgYT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSYW5nZVJlYWRlciIse2JlZ2luOnQsZW5kOnJ9KTt0aGlzLl9yZWFkZXI9YS5nZXRSZWFkZXIoKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJyZWFkIix2YWx1ZToodD1vKGEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgMjppZih0PWUuc2VudCxyPXQudmFsdWUsIXQuZG9uZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnIuYnVmZmVyLGRvbmU6ITF9KTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fV0pLGV9KCl9XSx0PXt9O2Z1bmN0aW9uIHIobil7dmFyIGE9dFtuXTtpZih2b2lkIDAhPT1hKXJldHVybiBhLmV4cG9ydHM7dmFyIGk9dFtuXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbbl0oaSxpLmV4cG9ydHMsciksaS5leHBvcnRzfXIuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KXIubyh0LG4pJiYhci5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0sci5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxyLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBuPXt9O3JldHVybigoKT0+e3ZhciBlPW47T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJXb3JrZXJNZXNzYWdlSGFuZGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuV29ya2VyTWVzc2FnZUhhbmRsZXJ9fSk7dmFyIHQ9cigxKX0pKCksbn0pKCksIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciIsW10sdCk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPXQoKTplWyJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIiXT1lLnBkZmpzV29ya2VyPXQoKTs=",K="LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgcGRmLmpzLkxJQ0VOU0UudHh0ICovCnZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9LHJvb3QsZmFjdG9yeTtyb290PWdsb2JhbFRoaXMsZmFjdG9yeT0oKT0+KCgpPT57dmFyIF9fd2VicGFja19tb2R1bGVzX189WywodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGkodCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaSh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gYSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBvKHQpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxvKHQpfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1vKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gZSYmcyh0LnByb3RvdHlwZSxlKSxyJiZzKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiB1KHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZoKHQsZSl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0saCh0LGUpfWZ1bmN0aW9uIGYodCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZCh0KTtpZihlKXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW8oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGQodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVmVyYm9zaXR5TGV2ZWw9ZS5VdGlsPWUuVW5rbm93bkVycm9yRXhjZXB0aW9uPWUuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPWUuVU5TVVBQT1JURURfRkVBVFVSRVM9ZS5UZXh0UmVuZGVyaW5nTW9kZT1lLlN0cmVhbVR5cGU9ZS5SZW5kZXJpbmdJbnRlbnRGbGFnPWUuUGVybWlzc2lvbkZsYWc9ZS5QYXNzd29yZFJlc3BvbnNlcz1lLlBhc3N3b3JkRXhjZXB0aW9uPWUuUGFnZUFjdGlvbkV2ZW50VHlwZT1lLk9QUz1lLk1pc3NpbmdQREZFeGNlcHRpb249ZS5MSU5FX0ZBQ1RPUj1lLkxJTkVfREVTQ0VOVF9GQUNUT1I9ZS5JbnZhbGlkUERGRXhjZXB0aW9uPWUuSW1hZ2VLaW5kPWUuSURFTlRJVFlfTUFUUklYPWUuRm9ybWF0RXJyb3I9ZS5Gb250VHlwZT1lLkZlYXR1cmVUZXN0PWUuRk9OVF9JREVOVElUWV9NQVRSSVg9ZS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT1lLkNNYXBDb21wcmVzc2lvblR5cGU9ZS5CYXNlRXhjZXB0aW9uPWUuQkFTRUxJTkVfRkFDVE9SPWUuQW5ub3RhdGlvblR5cGU9ZS5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9ZS5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9ZS5Bbm5vdGF0aW9uUmVwbHlUeXBlPWUuQW5ub3RhdGlvbk1vZGU9ZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9ZS5Bbm5vdGF0aW9uRmxhZz1lLkFubm90YXRpb25GaWVsZEZsYWc9ZS5Bbm5vdGF0aW9uRWRpdG9yVHlwZT1lLkFubm90YXRpb25FZGl0b3JQcmVmaXg9ZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT1lLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9ZS5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPWUuQWJvcnRFeGNlcHRpb249dm9pZCAwLGUuYXJyYXlCeXRlTGVuZ3RoPVQsZS5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDE9PT1lJiZ0WzBdaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiB0WzBdO2Zvcih2YXIgcj0wLG49MDtuPGU7bisrKXIrPVQodFtuXSk7Zm9yKHZhciBpPTAsYT1uZXcgVWludDhBcnJheShyKSxvPTA7bzxlO28rKyl7dmFyIHM9dFtvXTtzIGluc3RhbmNlb2YgVWludDhBcnJheXx8KHM9InN0cmluZyI9PXR5cGVvZiBzP1Aocyk6bmV3IFVpbnQ4QXJyYXkocykpO3ZhciBsPXMuYnl0ZUxlbmd0aDthLnNldChzLGkpLGkrPWx9cmV0dXJuIGF9LGUuYXNzZXJ0PWZ1bmN0aW9uKHQsZSl7dHx8bShlKX0sZS5ieXRlc1RvU3RyaW5nPWZ1bmN0aW9uKHQpeyJvYmplY3QiPT09byh0KSYmbnVsbCE9PXQmJnZvaWQgMCE9PXQubGVuZ3RofHxtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7dmFyIGU9dC5sZW5ndGgscj04MTkyO2lmKGU8cilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpO2Zvcih2YXIgbj1bXSxpPTA7aTxlO2krPXIpe3ZhciBhPU1hdGgubWluKGkrcixlKSxzPXQuc3ViYXJyYXkoaSxhKTtuLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHMpKX1yZXR1cm4gbi5qb2luKCIiKX0sZS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eT1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksZT0hMTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldHRsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX19KSx0LnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dC5yZXNvbHZlPWZ1bmN0aW9uKHQpe2U9ITAscih0KX0sdC5yZWplY3Q9ZnVuY3Rpb24odCl7ZT0hMCxuKHQpfX0pKSx0fSxlLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighdClyZXR1cm4gbnVsbDt0cnl7aWYociYmInN0cmluZyI9PXR5cGVvZiB0KXtpZihyLmFkZERlZmF1bHRQcm90b2NvbCYmdC5zdGFydHNXaXRoKCJ3d3cuIikpe3ZhciBuPXQubWF0Y2goL1wuL2cpO24mJm4ubGVuZ3RoPj0yJiYodD0iaHR0cDovLyIuY29uY2F0KHQpKX1pZihyLnRyeUNvbnZlcnRFbmNvZGluZyl0cnl7dD1SKHQpfWNhdGNoKHQpe319dmFyIGk9ZT9uZXcgVVJMKHQsZSk6bmV3IFVSTCh0KTtpZihmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtzd2l0Y2godC5wcm90b2NvbCl7Y2FzZSJodHRwOiI6Y2FzZSJodHRwczoiOmNhc2UiZnRwOiI6Y2FzZSJtYWlsdG86IjpjYXNlInRlbDoiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fShpKSlyZXR1cm4gaX1jYXRjaCh0KXt9cmV0dXJuIG51bGx9LGUuZ2V0TW9kaWZpY2F0aW9uRGF0ZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuZXcgRGF0ZTtyZXR1cm5bdC5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksKHQuZ2V0VVRDTW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIildLmpvaW4oIiIpfSxlLmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHZ9LGUuaW5mbz1mdW5jdGlvbih0KXt2Pj1wLklORk9TJiZjb25zb2xlLmxvZygiSW5mbzogIi5jb25jYXQodCkpfSxlLmlzQXJyYXlCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PT1vKHQpJiZudWxsIT09dCYmdm9pZCAwIT09dC5ieXRlTGVuZ3RofSxlLmlzQXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfSxlLm9iamVjdEZyb21NYXA9ZnVuY3Rpb24odCl7dmFyIGUscixuPU9iamVjdC5jcmVhdGUobnVsbCksYT1mdW5jdGlvbih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9aSh0KSkpe3ImJih0PXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsbD0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIHM9dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7bD0hMCxvPXR9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IG99fX19KHQpO3RyeXtmb3IoYS5zKCk7IShlPWEubigpKS5kb25lOyl7dmFyIG89KHI9ZS52YWx1ZSwyLGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHIpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2ZvcihhPShyPXIuY2FsbCh0KSkubmV4dCwwOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0ocil8fGkociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSxzPW9bMF0sbD1vWzFdO25bc109bH19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIG59LGUub2JqZWN0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RofSxlLnNldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKHQpe051bWJlci5pc0ludGVnZXIodCkmJih2PXQpfSxlLnNoYWRvdz1nLGUuc3RyaW5nMzI9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9LGUuc3RyaW5nVG9CeXRlcz1QLGUuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU7aWYodFswXT49IsOvIiYmKCLDviI9PT10WzBdJiYiw78iPT09dFsxXT9lPSJ1dGYtMTZiZSI6IsO/Ij09PXRbMF0mJiLDviI9PT10WzFdP2U9InV0Zi0xNmxlIjoiw68iPT09dFswXSYmIsK7Ij09PXRbMV0mJiLCvyI9PT10WzJdJiYoZT0idXRmLTgiKSxlKSl0cnl7dmFyIHI9bmV3IFRleHREZWNvZGVyKGUse2ZhdGFsOiEwfSksbj1QKHQpO3JldHVybiByLmRlY29kZShuKX1jYXRjaCh0KXt5KCdzdHJpbmdUb1BERlN0cmluZzogIicuY29uY2F0KHQsJyIuJykpfWZvcih2YXIgaT1bXSxhPTAsbz10Lmxlbmd0aDthPG87YSsrKXt2YXIgcz1NW3QuY2hhckNvZGVBdChhKV07aS5wdXNoKHM/U3RyaW5nLmZyb21DaGFyQ29kZShzKTp0LmNoYXJBdChhKSl9cmV0dXJuIGkuam9pbigiIil9LGUuc3RyaW5nVG9VVEY4U3RyaW5nPVIsZS51bnJlYWNoYWJsZT1tLGUudXRmOFN0cmluZ1RvU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodCkpfSxlLndhcm49eSxnbG9iYWxUaGlzLl9wZGZqc0NvbXBhdGliaWxpdHlDaGVja2VkfHwoZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZD0hMCxyKDIpKSxlLklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdLGUuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXSxlLkxJTkVfRkFDVE9SPTEuMzUsZS5MSU5FX0RFU0NFTlRfRkFDVE9SPS4zNSxlLkJBU0VMSU5FX0ZBQ1RPUj0uMjU5MjU5MjU5MjU5MjU5MjQsZS5SZW5kZXJpbmdJbnRlbnRGbGFnPXtBTlk6MSxESVNQTEFZOjIsUFJJTlQ6NCxTQVZFOjgsQU5OT1RBVElPTlNfRk9STVM6MTYsQU5OT1RBVElPTlNfU1RPUkFHRTozMixBTk5PVEFUSU9OU19ESVNBQkxFOjY0LE9QTElTVDoyNTZ9LGUuQW5ub3RhdGlvbk1vZGU9e0RJU0FCTEU6MCxFTkFCTEU6MSxFTkFCTEVfRk9STVM6MixFTkFCTEVfU1RPUkFHRTozfSxlLkFubm90YXRpb25FZGl0b3JQcmVmaXg9InBkZmpzX2ludGVybmFsX2VkaXRvcl8iLGUuQW5ub3RhdGlvbkVkaXRvclR5cGU9e0RJU0FCTEU6LTEsTk9ORTowLEZSRUVURVhUOjMsSU5LOjE1fSxlLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXtGUkVFVEVYVF9TSVpFOjEsRlJFRVRFWFRfQ09MT1I6MixGUkVFVEVYVF9PUEFDSVRZOjMsSU5LX0NPTE9SOjExLElOS19USElDS05FU1M6MTIsSU5LX09QQUNJVFk6MTN9LGUuUGVybWlzc2lvbkZsYWc9e1BSSU5UOjQsTU9ESUZZX0NPTlRFTlRTOjgsQ09QWToxNixNT0RJRllfQU5OT1RBVElPTlM6MzIsRklMTF9JTlRFUkFDVElWRV9GT1JNUzoyNTYsQ09QWV9GT1JfQUNDRVNTSUJJTElUWTo1MTIsQVNTRU1CTEU6MTAyNCxQUklOVF9ISUdIX1FVQUxJVFk6MjA0OH0sZS5UZXh0UmVuZGVyaW5nTW9kZT17RklMTDowLFNUUk9LRToxLEZJTExfU1RST0tFOjIsSU5WSVNJQkxFOjMsRklMTF9BRERfVE9fUEFUSDo0LFNUUk9LRV9BRERfVE9fUEFUSDo1LEZJTExfU1RST0tFX0FERF9UT19QQVRIOjYsQUREX1RPX1BBVEg6NyxGSUxMX1NUUk9LRV9NQVNLOjMsQUREX1RPX1BBVEhfRkxBRzo0fSxlLkltYWdlS2luZD17R1JBWVNDQUxFXzFCUFA6MSxSR0JfMjRCUFA6MixSR0JBXzMyQlBQOjN9LGUuQW5ub3RhdGlvblR5cGU9e1RFWFQ6MSxMSU5LOjIsRlJFRVRFWFQ6MyxMSU5FOjQsU1FVQVJFOjUsQ0lSQ0xFOjYsUE9MWUdPTjo3LFBPTFlMSU5FOjgsSElHSExJR0hUOjksVU5ERVJMSU5FOjEwLFNRVUlHR0xZOjExLFNUUklLRU9VVDoxMixTVEFNUDoxMyxDQVJFVDoxNCxJTks6MTUsUE9QVVA6MTYsRklMRUFUVEFDSE1FTlQ6MTcsU09VTkQ6MTgsTU9WSUU6MTksV0lER0VUOjIwLFNDUkVFTjoyMSxQUklOVEVSTUFSSzoyMixUUkFQTkVUOjIzLFdBVEVSTUFSSzoyNCxUSFJFRUQ6MjUsUkVEQUNUOjI2fSxlLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZT17TUFSS0VEOiJNYXJrZWQiLFJFVklFVzoiUmV2aWV3In0sZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9e01BUktFRDoiTWFya2VkIixVTk1BUktFRDoiVW5tYXJrZWQifSxlLkFubm90YXRpb25SZXZpZXdTdGF0ZT17QUNDRVBURUQ6IkFjY2VwdGVkIixSRUpFQ1RFRDoiUmVqZWN0ZWQiLENBTkNFTExFRDoiQ2FuY2VsbGVkIixDT01QTEVURUQ6IkNvbXBsZXRlZCIsTk9ORToiTm9uZSJ9LGUuQW5ub3RhdGlvblJlcGx5VHlwZT17R1JPVVA6Ikdyb3VwIixSRVBMWToiUiJ9LGUuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9LGUuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH0sZS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fSxlLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9e0U6Ik1vdXNlIEVudGVyIixYOiJNb3VzZSBFeGl0IixEOiJNb3VzZSBEb3duIixVOiJNb3VzZSBVcCIsRm86IkZvY3VzIixCbDoiQmx1ciIsUE86IlBhZ2VPcGVuIixQQzoiUGFnZUNsb3NlIixQVjoiUGFnZVZpc2libGUiLFBJOiJQYWdlSW52aXNpYmxlIixLOiJLZXlzdHJva2UiLEY6IkZvcm1hdCIsVjoiVmFsaWRhdGUiLEM6IkNhbGN1bGF0ZSJ9LGUuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9e1dDOiJXaWxsQ2xvc2UiLFdTOiJXaWxsU2F2ZSIsRFM6IkRpZFNhdmUiLFdQOiJXaWxsUHJpbnQiLERQOiJEaWRQcmludCJ9LGUuUGFnZUFjdGlvbkV2ZW50VHlwZT17TzoiUGFnZU9wZW4iLEM6IlBhZ2VDbG9zZSJ9LGUuU3RyZWFtVHlwZT17VU5LTk9XTjoiVU5LTk9XTiIsRkxBVEU6IkZMQVRFIixMWlc6IkxaVyIsRENUOiJEQ1QiLEpQWDoiSlBYIixKQklHOiJKQklHIixBODU6IkE4NSIsQUhYOiJBSFgiLENDRjoiQ0NGIixSTFg6IlJMWCJ9LGUuRm9udFR5cGU9e1VOS05PV046IlVOS05PV04iLFRZUEUxOiJUWVBFMSIsVFlQRTFTVEFOREFSRDoiVFlQRTFTVEFOREFSRCIsVFlQRTFDOiJUWVBFMUMiLENJREZPTlRUWVBFMDoiQ0lERk9OVFRZUEUwIixDSURGT05UVFlQRTBDOiJDSURGT05UVFlQRTBDIixUUlVFVFlQRToiVFJVRVRZUEUiLENJREZPTlRUWVBFMjoiQ0lERk9OVFRZUEUyIixUWVBFMzoiVFlQRTMiLE9QRU5UWVBFOiJPUEVOVFlQRSIsVFlQRTA6IlRZUEUwIixNTVRZUEUxOiJNTVRZUEUxIn07dmFyIHA9e0VSUk9SUzowLFdBUk5JTkdTOjEsSU5GT1M6NX07ZS5WZXJib3NpdHlMZXZlbD1wLGUuQ01hcENvbXByZXNzaW9uVHlwZT17Tk9ORTowLEJJTkFSWToxfSxlLk9QUz17ZGVwZW5kZW5jeToxLHNldExpbmVXaWR0aDoyLHNldExpbmVDYXA6MyxzZXRMaW5lSm9pbjo0LHNldE1pdGVyTGltaXQ6NSxzZXREYXNoOjYsc2V0UmVuZGVyaW5nSW50ZW50Ojcsc2V0RmxhdG5lc3M6OCxzZXRHU3RhdGU6OSxzYXZlOjEwLHJlc3RvcmU6MTEsdHJhbnNmb3JtOjEyLG1vdmVUbzoxMyxsaW5lVG86MTQsY3VydmVUbzoxNSxjdXJ2ZVRvMjoxNixjdXJ2ZVRvMzoxNyxjbG9zZVBhdGg6MTgscmVjdGFuZ2xlOjE5LHN0cm9rZToyMCxjbG9zZVN0cm9rZToyMSxmaWxsOjIyLGVvRmlsbDoyMyxmaWxsU3Ryb2tlOjI0LGVvRmlsbFN0cm9rZToyNSxjbG9zZUZpbGxTdHJva2U6MjYsY2xvc2VFT0ZpbGxTdHJva2U6MjcsZW5kUGF0aDoyOCxjbGlwOjI5LGVvQ2xpcDozMCxiZWdpblRleHQ6MzEsZW5kVGV4dDozMixzZXRDaGFyU3BhY2luZzozMyxzZXRXb3JkU3BhY2luZzozNCxzZXRIU2NhbGU6MzUsc2V0TGVhZGluZzozNixzZXRGb250OjM3LHNldFRleHRSZW5kZXJpbmdNb2RlOjM4LHNldFRleHRSaXNlOjM5LG1vdmVUZXh0OjQwLHNldExlYWRpbmdNb3ZlVGV4dDo0MSxzZXRUZXh0TWF0cml4OjQyLG5leHRMaW5lOjQzLHNob3dUZXh0OjQ0LHNob3dTcGFjZWRUZXh0OjQ1LG5leHRMaW5lU2hvd1RleHQ6NDYsbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6NDcsc2V0Q2hhcldpZHRoOjQ4LHNldENoYXJXaWR0aEFuZEJvdW5kczo0OSxzZXRTdHJva2VDb2xvclNwYWNlOjUwLHNldEZpbGxDb2xvclNwYWNlOjUxLHNldFN0cm9rZUNvbG9yOjUyLHNldFN0cm9rZUNvbG9yTjo1MyxzZXRGaWxsQ29sb3I6NTQsc2V0RmlsbENvbG9yTjo1NSxzZXRTdHJva2VHcmF5OjU2LHNldEZpbGxHcmF5OjU3LHNldFN0cm9rZVJHQkNvbG9yOjU4LHNldEZpbGxSR0JDb2xvcjo1OSxzZXRTdHJva2VDTVlLQ29sb3I6NjAsc2V0RmlsbENNWUtDb2xvcjo2MSxzaGFkaW5nRmlsbDo2MixiZWdpbklubGluZUltYWdlOjYzLGJlZ2luSW1hZ2VEYXRhOjY0LGVuZElubGluZUltYWdlOjY1LHBhaW50WE9iamVjdDo2NixtYXJrUG9pbnQ6NjcsbWFya1BvaW50UHJvcHM6NjgsYmVnaW5NYXJrZWRDb250ZW50OjY5LGJlZ2luTWFya2VkQ29udGVudFByb3BzOjcwLGVuZE1hcmtlZENvbnRlbnQ6NzEsYmVnaW5Db21wYXQ6NzIsZW5kQ29tcGF0OjczLHBhaW50Rm9ybVhPYmplY3RCZWdpbjo3NCxwYWludEZvcm1YT2JqZWN0RW5kOjc1LGJlZ2luR3JvdXA6NzYsZW5kR3JvdXA6NzcsYmVnaW5Bbm5vdGF0aW9uOjgwLGVuZEFubm90YXRpb246ODEscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfSxlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXtmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNpZ25hdHVyZXM6InNpZ25hdHVyZXMiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixlcnJvclRpbGluZ1BhdHRlcm46ImVycm9yVGlsaW5nUGF0dGVybiIsZXJyb3JFeHRHU3RhdGU6ImVycm9yRXh0R1N0YXRlIixlcnJvclhPYmplY3Q6ImVycm9yWE9iamVjdCIsZXJyb3JGb250TG9hZFR5cGUzOiJlcnJvckZvbnRMb2FkVHlwZTMiLGVycm9yRm9udFN0YXRlOiJlcnJvckZvbnRTdGF0ZSIsZXJyb3JGb250TWlzc2luZzoiZXJyb3JGb250TWlzc2luZyIsZXJyb3JGb250VHJhbnNsYXRlOiJlcnJvckZvbnRUcmFuc2xhdGUiLGVycm9yQ29sb3JTcGFjZToiZXJyb3JDb2xvclNwYWNlIixlcnJvck9wZXJhdG9yTGlzdDoiZXJyb3JPcGVyYXRvckxpc3QiLGVycm9yRm9udFRvVW5pY29kZToiZXJyb3JGb250VG9Vbmljb2RlIixlcnJvckZvbnRMb2FkTmF0aXZlOiJlcnJvckZvbnRMb2FkTmF0aXZlIixlcnJvckZvbnRCdWlsZFBhdGg6ImVycm9yRm9udEJ1aWxkUGF0aCIsZXJyb3JGb250R2V0UGF0aDoiZXJyb3JGb250R2V0UGF0aCIsZXJyb3JNYXJrZWRDb250ZW50OiJlcnJvck1hcmtlZENvbnRlbnQiLGVycm9yQ29udGVudFN1YlN0cmVhbToiZXJyb3JDb250ZW50U3ViU3RyZWFtIn0sZS5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt2YXIgdj1wLldBUk5JTkdTO2Z1bmN0aW9uIHkodCl7dj49cC5XQVJOSU5HUyYmY29uc29sZS5sb2coIldhcm5pbmc6ICIuY29uY2F0KHQpKX1mdW5jdGlvbiBtKHQpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6IW4sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiExfSkscn12YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt0aGlzLmNvbnN0cnVjdG9yPT09dCYmbSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUV4Y2VwdGlvbi4iKSx0aGlzLm1lc3NhZ2U9ZSx0aGlzLm5hbWU9cn1yZXR1cm4gdC5wcm90b3R5cGU9bmV3IEVycm9yLHQuY29uc3RydWN0b3I9dCx0fSgpO2UuQmFzZUV4Y2VwdGlvbj1iO3ZhciBfPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlBhc3N3b3JkRXhjZXB0aW9uIikpLmNvZGU9bixpfXJldHVybiBsKHIpfShiKTtlLlBhc3N3b3JkRXhjZXB0aW9uPV87dmFyIHc9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0LG4pe3ZhciBpO3JldHVybiB1KHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiVW5rbm93bkVycm9yRXhjZXB0aW9uIikpLmRldGFpbHM9bixpfXJldHVybiBsKHIpfShiKTtlLlVua25vd25FcnJvckV4Y2VwdGlvbj13O3ZhciBBPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJJbnZhbGlkUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuSW52YWxpZFBERkV4Y2VwdGlvbj1BO3ZhciBrPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJNaXNzaW5nUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuTWlzc2luZ1BERkV4Y2VwdGlvbj1rO3ZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiIpKS5zdGF0dXM9bixpfXJldHVybiBsKHIpfShiKTtlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1TO3ZhciB4PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJGb3JtYXRFcnJvciIpfXJldHVybiBsKHIpfShiKTtlLkZvcm1hdEVycm9yPXg7dmFyIEU9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdSh0aGlzLHIpLGUuY2FsbCh0aGlzLHQsIkFib3J0RXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2Z1bmN0aW9uIFAodCl7InN0cmluZyIhPXR5cGVvZiB0JiZtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IFVpbnQ4QXJyYXkoZSksbj0wO248ZTsrK24pcltuXT0yNTUmdC5jaGFyQ29kZUF0KG4pO3JldHVybiByfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHZvaWQgMCE9PXQubGVuZ3RoP3QubGVuZ3RoOnZvaWQgMCE9PXQuYnl0ZUxlbmd0aD90LmJ5dGVMZW5ndGg6dm9pZCBtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBhcnJheUJ5dGVMZW5ndGgiKX1lLkFib3J0RXhjZXB0aW9uPUU7dmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToiaXNMaXR0bGVFbmRpYW4iLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzTGl0dGxlRW5kaWFuIiwoKHQ9bmV3IFVpbnQ4QXJyYXkoNCkpWzBdPTEsMT09PW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciwwLDEpWzBdKSk7dmFyIHR9fSx7a2V5OiJpc0V2YWxTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbigiIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpKX19LHtrZXk6ImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfX0se2tleToicGxhdGZvcm0iLGdldDpmdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yP2codGhpcywicGxhdGZvcm0iLHtpc1dpbjohMSxpc01hYzohMX0pOmcodGhpcywicGxhdGZvcm0iLHtpc1dpbjpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIldpbiIpLGlzTWFjOm5hdmlnYXRvci5wbGF0Zm9ybS5pbmNsdWRlcygiTWFjIil9KX19XSksdH0oKTtlLkZlYXR1cmVUZXN0PUM7dmFyIE89bihBcnJheSgyNTYpLmtleXMoKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfSkpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToibWFrZUhleENvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIiMiLmNvbmNhdChPW3RdKS5jb25jYXQoT1tlXSkuY29uY2F0KE9bcl0pfX0se2tleToic2NhbGVNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI7dFswXT8odFswXTwwJiYocj1lWzBdLGVbMF09ZVsxXSxlWzFdPXIpLGVbMF0qPXRbMF0sZVsxXSo9dFswXSx0WzNdPDAmJihyPWVbMl0sZVsyXT1lWzNdLGVbM109ciksZVsyXSo9dFszXSxlWzNdKj10WzNdKToocj1lWzBdLGVbMF09ZVsyXSxlWzJdPXIscj1lWzFdLGVbMV09ZVszXSxlWzNdPXIsdFsxXTwwJiYocj1lWzJdLGVbMl09ZVszXSxlWzNdPXIpLGVbMl0qPXRbMV0sZVszXSo9dFsxXSx0WzJdPDAmJihyPWVbMF0sZVswXT1lWzFdLGVbMV09ciksZVswXSo9dFsyXSxlWzFdKj10WzJdKSxlWzBdKz10WzRdLGVbMV0rPXRbNF0sZVsyXSs9dFs1XSxlWzNdKz10WzVdfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdKmVbMF0rdFsyXSplWzFdLHRbMV0qZVswXSt0WzNdKmVbMV0sdFswXSplWzJdK3RbMl0qZVszXSx0WzFdKmVbMl0rdFszXSplWzNdLHRbMF0qZVs0XSt0WzJdKmVbNV0rdFs0XSx0WzFdKmVbNF0rdFszXSplWzVdK3RbNV1dfX0se2tleToiYXBwbHlUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0qZVswXSt0WzFdKmVbMl0rZVs0XSx0WzBdKmVbMV0rdFsxXSplWzNdK2VbNV1dfX0se2tleToiYXBwbHlJbnZlcnNlVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuWyh0WzBdKmVbM10tdFsxXSplWzJdK2VbMl0qZVs1XS1lWzRdKmVbM10pL3IsKC10WzBdKmVbMV0rdFsxXSplWzBdK2VbNF0qZVsxXS1lWzVdKmVbMF0pL3JdfX0se2tleToiZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUscil7dmFyIG49dC5hcHBseVRyYW5zZm9ybShlLHIpLGk9dC5hcHBseVRyYW5zZm9ybShlLnNsaWNlKDIsNCksciksYT10LmFwcGx5VHJhbnNmb3JtKFtlWzBdLGVbM11dLHIpLG89dC5hcHBseVRyYW5zZm9ybShbZVsyXSxlWzFdXSxyKTtyZXR1cm5bTWF0aC5taW4oblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5taW4oblsxXSxpWzFdLGFbMV0sb1sxXSksTWF0aC5tYXgoblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5tYXgoblsxXSxpWzFdLGFbMV0sb1sxXSldfX0se2tleToiaW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bdFszXS9lLC10WzFdL2UsLXRbMl0vZSx0WzBdL2UsKHRbMl0qdFs1XS10WzRdKnRbM10pL2UsKHRbNF0qdFsxXS10WzVdKnRbMF0pL2VdfX0se2tleToic2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVt0WzBdLHRbMl0sdFsxXSx0WzNdXSxyPXRbMF0qZVswXSt0WzFdKmVbMl0sbj10WzBdKmVbMV0rdFsxXSplWzNdLGk9dFsyXSplWzBdK3RbM10qZVsyXSxhPXRbMl0qZVsxXSt0WzNdKmVbM10sbz0ocithKS8yLHM9TWF0aC5zcXJ0KE1hdGgucG93KHIrYSwyKS00KihyKmEtaSpuKSkvMixsPW8rc3x8MSx1PW8tc3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydCh1KV19fSx7a2V5OiJub3JtYWxpemVSZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKDApO3JldHVybiB0WzBdPnRbMl0mJihlWzBdPXRbMl0sZVsyXT10WzBdKSx0WzFdPnRbM10mJihlWzFdPXRbM10sZVszXT10WzFdKSxlfX0se2tleToiaW50ZXJzZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgubWF4KE1hdGgubWluKHRbMF0sdFsyXSksTWF0aC5taW4oZVswXSxlWzJdKSksbj1NYXRoLm1pbihNYXRoLm1heCh0WzBdLHRbMl0pLE1hdGgubWF4KGVbMF0sZVsyXSkpO2lmKHI+bilyZXR1cm4gbnVsbDt2YXIgaT1NYXRoLm1heChNYXRoLm1pbih0WzFdLHRbM10pLE1hdGgubWluKGVbMV0sZVszXSkpLGE9TWF0aC5taW4oTWF0aC5tYXgodFsxXSx0WzNdKSxNYXRoLm1heChlWzFdLGVbM10pKTtyZXR1cm4gaT5hP251bGw6W3IsaSxuLGFdfX0se2tleToiYmV6aWVyQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGksYSxvLHMsbCl7Zm9yKHZhciB1LGMsaCxmLGQscCx2LHksbT1bXSxnPVtbXSxbXV0sYj0wO2I8MjsrK2IpaWYoMD09PWI/KGM9Nip0LTEyKnIrNiphLHU9LTMqdCs5KnItOSphKzMqcyxoPTMqci0zKnQpOihjPTYqZS0xMippKzYqbyx1PS0zKmUrOSppLTkqbyszKmwsaD0zKmktMyplKSxNYXRoLmFicyh1KTwxZS0xMil7aWYoTWF0aC5hYnMoYyk8MWUtMTIpY29udGludWU7MDwoZj0taC9jKSYmZjwxJiZtLnB1c2goZil9ZWxzZSB2PWMqYy00KmgqdSx5PU1hdGguc3FydCh2KSx2PDB8fCgwPChkPSgtYyt5KS8oMip1KSkmJmQ8MSYmbS5wdXNoKGQpLDA8KHA9KC1jLXkpLygyKnUpKSYmcDwxJiZtLnB1c2gocCkpO2Zvcih2YXIgXyx3PW0ubGVuZ3RoLEE9dzt3LS07KV89MS0oZj1tW3ddKSxnWzBdW3ddPV8qXypfKnQrMypfKl8qZipyKzMqXypmKmYqYStmKmYqZipzLGdbMV1bd109XypfKl8qZSszKl8qXypmKmkrMypfKmYqZipvK2YqZipmKmw7cmV0dXJuIGdbMF1bQV09dCxnWzFdW0FdPWUsZ1swXVtBKzFdPXMsZ1sxXVtBKzFdPWwsZ1swXS5sZW5ndGg9Z1sxXS5sZW5ndGg9QSsyLFtNYXRoLm1pbi5hcHBseShNYXRoLG4oZ1swXSkpLE1hdGgubWluLmFwcGx5KE1hdGgsbihnWzFdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKGdbMF0pKSxNYXRoLm1heC5hcHBseShNYXRoLG4oZ1sxXSkpXX19XSksdH0oKTtlLlV0aWw9Rjt2YXIgTT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzI4LDcxMSw3MTAsNzI5LDczMyw3MzEsNzMwLDczMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MjI2LDgyMjQsODIyNSw4MjMwLDgyMTIsODIxMSw0MDIsODI2MCw4MjQ5LDgyNTAsODcyMiw4MjQwLDgyMjIsODIyMCw4MjIxLDgyMTYsODIxNyw4MjE4LDg0ODIsNjQyNTcsNjQyNTgsMzIxLDMzOCwzNTIsMzc2LDM4MSwzMDUsMzIyLDMzOSwzNTMsMzgyLDAsODM2NF07ZnVuY3Rpb24gUih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh0KSl9fSwodCxlLHIpPT57dmFyIG49cigzKTshZ2xvYmFsVGhpcy5idG9hJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5idG9hPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiaW5hcnkiKS50b1N0cmluZygiYmFzZTY0Iil9KSwhZ2xvYmFsVGhpcy5hdG9iJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5hdG9iPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiYXNlNjQiKS50b1N0cmluZygiYmluYXJ5Iil9KSwhZ2xvYmFsVGhpcy5ET01NYXRyaXgmJm4uaXNOb2RlSlMmJihnbG9iYWxUaGlzLkRPTU1hdHJpeD1yZXF1aXJlKCJjYW52YXMiKS5ET01NYXRyaXgpLCFnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbT1yZXF1aXJlKCJ3ZWItc3RyZWFtcy1wb2x5ZmlsbC9kaXN0L3BvbnlmaWxsLmpzIikuUmVhZGFibGVTdHJlYW0pLEFycmF5LnByb3RvdHlwZS5hdHx8cig0KSxVaW50OEFycmF5LnByb3RvdHlwZS5hdHx8cig3OCksZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmV8fHIoODgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuaXNOb2RlSlM9dm9pZCAwO3ZhciBuPSEoIm9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBwcm9jZXNzPyJ1bmRlZmluZWQiOnIocHJvY2VzcykpfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKTtlLmlzTm9kZUpTPW59LCh0LGUscik9PntyKDUpO3ZhciBuPXIoNzcpO3QuZXhwb3J0cz1uKCJBcnJheSIsImF0Iil9LCh0LGUscik9Pnt2YXIgbj1yKDYpLGk9cig0MyksYT1yKDY3KSxvPXIoNjUpLHM9cig3Mik7bih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHthdDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLHI9YShlKSxuPW8odCkscz1uPj0wP246cituO3JldHVybiBzPDB8fHM+PXI/dm9pZCAwOmVbc119fSkscygiYXQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDgpLmYsYT1yKDQ3KSxvPXIoNTEpLHM9cig0MSksbD1yKDU5KSx1PXIoNzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsaCxmLGQscD10LnRhcmdldCx2PXQuZ2xvYmFsLHk9dC5zdGF0O2lmKHI9dj9uOnk/bltwXXx8cyhwLHt9KToobltwXXx8e30pLnByb3RvdHlwZSlmb3IoYyBpbiBlKXtpZihmPWVbY10saD10LmRvbnRDYWxsR2V0U2V0PyhkPWkocixjKSkmJmQudmFsdWU6cltjXSwhdSh2P2M6cCsoeT8iLiI6IiMiKStjLHQuZm9yY2VkKSYmdm9pZCAwIT09aCl7aWYodHlwZW9mIGY9PXR5cGVvZiBoKWNvbnRpbnVlO2woZixoKX0odC5zaGFtfHxoJiZoLnNoYW0pJiZhKGYsInNoYW0iLCEwKSxvKHIsYyxmLHQpfX19LHQ9Pnt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5NYXRoPT1NYXRoJiZ0fTt0LmV4cG9ydHM9ZSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxlKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxlKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGUoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cigxMSksYT1yKDEzKSxvPXIoMTQpLHM9cigxNSksbD1yKDIxKSx1PXIoNDIpLGM9cig0NSksaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1uP2g6ZnVuY3Rpb24odCxlKXtpZih0PXModCksZT1sKGUpLGMpdHJ5e3JldHVybiBoKHQsZSl9Y2F0Y2godCl7fWlmKHUodCxlKSlyZXR1cm4gbyghaShhLmYsdCxlKSx0W2VdKX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKX0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7dC5leHBvcnRzPW4/aS5iaW5kKGkpOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoaSxhcmd1bWVudHMpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0Lmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKX0sKHQsZSk9Pnt2YXIgcj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1uJiYhci5jYWxsKHsxOjJ9LDEpO2UuZj1pP2Z1bmN0aW9uKHQpe3ZhciBlPW4odGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06cn0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LCh0LGUscik9Pnt2YXIgbj1yKDE2KSxpPXIoMTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbihpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMTApLGE9cigxOCksbz1PYmplY3Qscz1uKCIiLnNwbGl0KTt0LmV4cG9ydHM9aSgoZnVuY3Rpb24oKXtyZXR1cm4hbygieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT1hKHQpP3ModCwiIik6byh0KX06b30sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLGE9aS5jYWxsLG89biYmaS5iaW5kLmJpbmQoYSxhKTt0LmV4cG9ydHM9bj9vOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KHQsYXJndW1lbnRzKX19fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1uKHt9LnRvU3RyaW5nKSxhPW4oIiIuc2xpY2UpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpLDgsLTEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjApLGk9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXRocm93IGkoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9fSx0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjIpLGk9cigyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCwic3RyaW5nIik7cmV0dXJuIGkoZSk/ZTplKyIifX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigyMyksYT1yKDI2KSxvPXIoMzMpLHM9cigzNiksbD1yKDM3KSx1PVR5cGVFcnJvcixjPWwoInRvUHJpbWl0aXZlIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWkodCl8fGEodCkpcmV0dXJuIHQ7dmFyIHIsbD1vKHQsYyk7aWYobCl7aWYodm9pZCAwPT09ZSYmKGU9ImRlZmF1bHQiKSxyPW4obCx0LGUpLCFpKHIpfHxhKHIpKXJldHVybiByO3Rocm93IHUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIikscyh0LGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjQpLGk9cigyNSksYT1pLmFsbDt0LmV4cG9ydHM9aS5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDpuKHQpfHx0PT09YX06ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10Om4odCl9fSwodCxlLHIpPT57dmFyIG49cigyNSksaT1uLmFsbDt0LmV4cG9ydHM9bi5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fHx0PT09aX06ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9fSx0PT57dmFyIGU9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLHI9dm9pZCAwPT09ZSYmdm9pZCAwIT09ZTt0LmV4cG9ydHM9e2FsbDplLElTX0hUTUxEREE6cn19LCh0LGUscik9Pnt2YXIgbj1yKDI3KSxpPXIoMjQpLGE9cigyOCksbz1yKDI5KSxzPU9iamVjdDt0LmV4cG9ydHM9bz9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3ZhciBlPW4oIlN5bWJvbCIpO3JldHVybiBpKGUpJiZhKGUucHJvdG90eXBlLHModCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyhyPW5bdF0saShyKT9yOnZvaWQgMCk6blt0XSYmblt0XVtlXTt2YXIgcn19LCh0LGUscik9Pnt2YXIgbj1yKDE3KTt0LmV4cG9ydHM9bih7fS5pc1Byb3RvdHlwZU9mKX0sKHQsZSxyKT0+e3ZhciBuPXIoMzApO3QuZXhwb3J0cz1uJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwodCxlLHIpPT57dmFyIG49cigzMSksaT1yKDEwKTt0LmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhaSgoZnVuY3Rpb24oKXt2YXIgdD1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZuJiZuPDQxfSkpfSwodCxlLHIpPT57dmFyIG4saSxhPXIoNyksbz1yKDMyKSxzPWEucHJvY2VzcyxsPWEuRGVubyx1PXMmJnMudmVyc2lvbnN8fGwmJmwudmVyc2lvbixjPXUmJnUudjg7YyYmKGk9KG49Yy5zcGxpdCgiLiIpKVswXT4wJiZuWzBdPDQ/MTorKG5bMF0rblsxXSkpLCFpJiZvJiYoIShuPW8ubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxuWzFdPj03NCkmJihuPW8ubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihpPStuWzFdKSx0LmV4cG9ydHM9aX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpO3QuZXhwb3J0cz1uKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiJ9LCh0LGUscik9Pnt2YXIgbj1yKDM0KSxpPXIoMjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRbZV07cmV0dXJuIGkocik/dm9pZCAwOm4ocil9fSwodCxlLHIpPT57dmFyIG49cigyNCksaT1yKDM1KSxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobih0KSlyZXR1cm4gdDt0aHJvdyBhKGkodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfX0sdD0+e3ZhciBlPVN0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBlKHQpfWNhdGNoKHQpe3JldHVybiJPYmplY3QifX19LCh0LGUscik9Pnt2YXIgbj1yKDExKSxpPXIoMjQpLGE9cigyMyksbz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscztpZigic3RyaW5nIj09PWUmJmkocj10LnRvU3RyaW5nKSYmIWEocz1uKHIsdCkpKXJldHVybiBzO2lmKGkocj10LnZhbHVlT2YpJiYhYShzPW4ocix0KSkpcmV0dXJuIHM7aWYoInN0cmluZyIhPT1lJiZpKHI9dC50b1N0cmluZykmJiFhKHM9bihyLHQpKSlyZXR1cm4gczt0aHJvdyBvKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigzOCksYT1yKDQyKSxvPXIoNDQpLHM9cigzMCksbD1yKDI5KSx1PWkoIndrcyIpLGM9bi5TeW1ib2wsaD1jJiZjLmZvcixmPWw/YzpjJiZjLndpdGhvdXRTZXR0ZXJ8fG87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHUsdCl8fCFzJiYic3RyaW5nIiE9dHlwZW9mIHVbdF0pe3ZhciBlPSJTeW1ib2wuIit0O3MmJmEoYyx0KT91W3RdPWNbdF06dVt0XT1sJiZoP2goZSk6ZihlKX1yZXR1cm4gdVt0XX19LCh0LGUscik9Pnt2YXIgbj1yKDM5KSxpPXIoNDApOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVt0XXx8KGlbdF09dm9pZCAwIT09ZT9lOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMjYuMSIsbW9kZTpuPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4yNi4xL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSl9LHQ9Pnt0LmV4cG9ydHM9ITF9LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cig0MSksYT0iX19jb3JlLWpzX3NoYXJlZF9fIixvPW5bYV18fGkoYSx7fSk7dC5leHBvcnRzPW99LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtpKG4sdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChyKXtuW3RdPWV9cmV0dXJuIGV9fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDQzKSxhPW4oe30uaGFzT3duUHJvcGVydHkpO3QuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCksZSl9fSwodCxlLHIpPT57dmFyIG49cigxOSksaT1PYmplY3Q7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9MCxhPU1hdGgucmFuZG9tKCksbz1uKDEuLnRvU3RyaW5nKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrbygrK2krYSwzNil9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApLGE9cig0Nik7dC5leHBvcnRzPSFuJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGEoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDIzKSxhPW4uZG9jdW1lbnQsbz1pKGEpJiZpKGEuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2EuY3JlYXRlRWxlbWVudCh0KTp7fX19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9bj9mdW5jdGlvbih0LGUscil7cmV0dXJuIGkuZih0LGUsYSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0NSksYT1yKDQ5KSxvPXIoNTApLHM9cigyMSksbD1UeXBlRXJyb3IsdT1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGg9ImVudW1lcmFibGUiLGY9ImNvbmZpZ3VyYWJsZSIsZD0id3JpdGFibGUiO2UuZj1uP2E/ZnVuY3Rpb24odCxlLHIpe2lmKG8odCksZT1zKGUpLG8ociksImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJwcm90b3R5cGUiPT09ZSYmInZhbHVlImluIHImJmQgaW4gciYmIXJbZF0pe3ZhciBuPWModCxlKTtuJiZuW2RdJiYodFtlXT1yLnZhbHVlLHI9e2NvbmZpZ3VyYWJsZTpmIGluIHI/cltmXTpuW2ZdLGVudW1lcmFibGU6aCBpbiByP3JbaF06bltoXSx3cml0YWJsZTohMX0pfXJldHVybiB1KHQsZSxyKX06dTpmdW5jdGlvbih0LGUscil7aWYobyh0KSxlPXMoZSksbyhyKSxpKXRyeXtyZXR1cm4gdSh0LGUscil9Y2F0Y2godCl7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IGwoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIHImJih0W2VdPXIudmFsdWUpLHR9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApO3QuZXhwb3J0cz1uJiZpKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMjMpLGk9U3RyaW5nLGE9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXJldHVybiB0O3Rocm93IGEoaSh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoNDgpLGE9cig1Miksbz1yKDQxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7c3x8KHM9e30pO3ZhciBsPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6ZTtpZihuKHIpJiZhKHIsdSxzKSxzLmdsb2JhbClsP3RbZV09cjpvKGUscik7ZWxzZXt0cnl7cy51bnNhZmU/dFtlXSYmKGw9ITApOmRlbGV0ZSB0W2VdfWNhdGNoKHQpe31sP3RbZV09cjppLmYodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApLGk9cigyNCksYT1yKDQyKSxvPXIoOSkscz1yKDUzKS5DT05GSUdVUkFCTEUsbD1yKDU0KSx1PXIoNTUpLGM9dS5lbmZvcmNlLGg9dS5nZXQsZj1PYmplY3QuZGVmaW5lUHJvcGVydHksZD1vJiYhbigoZnVuY3Rpb24oKXtyZXR1cm4gOCE9PWYoKGZ1bmN0aW9uKCl7fSksImxlbmd0aCIse3ZhbHVlOjh9KS5sZW5ndGh9KSkscD1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIiksdj10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJTeW1ib2woIj09PVN0cmluZyhlKS5zbGljZSgwLDcpJiYoZT0iWyIrU3RyaW5nKGUpLnJlcGxhY2UoL15TeW1ib2xcKChbXildKilcKS8sIiQxIikrIl0iKSxyJiZyLmdldHRlciYmKGU9ImdldCAiK2UpLHImJnIuc2V0dGVyJiYoZT0ic2V0ICIrZSksKCFhKHQsIm5hbWUiKXx8cyYmdC5uYW1lIT09ZSkmJihvP2YodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSk6dC5uYW1lPWUpLGQmJnImJmEociwiYXJpdHkiKSYmdC5sZW5ndGghPT1yLmFyaXR5JiZmKHQsImxlbmd0aCIse3ZhbHVlOnIuYXJpdHl9KTt0cnl7ciYmYShyLCJjb25zdHJ1Y3RvciIpJiZyLmNvbnN0cnVjdG9yP28mJmYodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KTp0LnByb3RvdHlwZSYmKHQucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2godCl7fXZhciBuPWModCk7cmV0dXJuIGEobiwic291cmNlIil8fChuLnNvdXJjZT1wLmpvaW4oInN0cmluZyI9PXR5cGVvZiBlP2U6IiIpKSx0fTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9digoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzKSYmaCh0aGlzKS5zb3VyY2V8fGwodGhpcyl9KSwidG9TdHJpbmciKX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQyKSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxvPW4mJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1pKGEsIm5hbWUiKSxsPXMmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsdT1zJiYoIW58fG4mJm8oYSwibmFtZSIpLmNvbmZpZ3VyYWJsZSk7dC5leHBvcnRzPXtFWElTVFM6cyxQUk9QRVI6bCxDT05GSUdVUkFCTEU6dX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMjQpLGE9cig0MCksbz1uKEZ1bmN0aW9uLnRvU3RyaW5nKTtpKGEuaW5zcGVjdFNvdXJjZSl8fChhLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9KSx0LmV4cG9ydHM9YS5pbnNwZWN0U291cmNlfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig1Nikscz1yKDcpLGw9cigyMyksdT1yKDQ3KSxjPXIoNDIpLGg9cig0MCksZj1yKDU3KSxkPXIoNTgpLHA9Ik9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIix2PXMuVHlwZUVycm9yLHk9cy5XZWFrTWFwO2lmKG98fGguc3RhdGUpe3ZhciBtPWguc3RhdGV8fChoLnN0YXRlPW5ldyB5KTttLmdldD1tLmdldCxtLmhhcz1tLmhhcyxtLnNldD1tLnNldCxuPWZ1bmN0aW9uKHQsZSl7aWYobS5oYXModCkpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCxtLnNldCh0LGUpLGV9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIG0uZ2V0KHQpfHx7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gbS5oYXModCl9fWVsc2V7dmFyIGc9Zigic3RhdGUiKTtkW2ddPSEwLG49ZnVuY3Rpb24odCxlKXtpZihjKHQsZykpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCx1KHQsZyxlKSxlfSxpPWZ1bmN0aW9uKHQpe3JldHVybiBjKHQsZyk/dFtnXTp7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gYyh0LGcpfX10LmV4cG9ydHM9e3NldDpuLGdldDppLGhhczphLGVuZm9yY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/aSh0KTpuKHQse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByO2lmKCFsKGUpfHwocj1pKGUpKS50eXBlIT09dCl0aHJvdyB2KCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIHJ9fX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigyNCksYT1uLldlYWtNYXA7dC5leHBvcnRzPWkoYSkmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoYSkpfSwodCxlLHIpPT57dmFyIG49cigzOCksaT1yKDQ0KSxhPW4oImtleXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFbdF18fChhW3RdPWkodCkpfX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cig2MCksYT1yKDgpLG89cig0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIHM9aShlKSxsPW8uZix1PWEuZixjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBoPXNbY107bih0LGgpfHxyJiZuKHIsaCl8fGwodCxoLHUoZSxoKSl9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cigxNyksYT1yKDYxKSxvPXIoNzApLHM9cig1MCksbD1pKFtdLmNvbmNhdCk7dC5leHBvcnRzPW4oIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPWEuZihzKHQpKSxyPW8uZjtyZXR1cm4gcj9sKGUscih0KSk6ZX19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gbih0LGkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9cig0MiksYT1yKDE1KSxvPXIoNjMpLmluZGV4T2Yscz1yKDU4KSxsPW4oW10ucHVzaCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1hKHQpLHU9MCxjPVtdO2ZvcihyIGluIG4pIWkocyxyKSYmaShuLHIpJiZsKGMscik7Zm9yKDtlLmxlbmd0aD51OylpKG4scj1lW3UrK10pJiYofm8oYyxyKXx8bChjLHIpKTtyZXR1cm4gY319LCh0LGUscik9Pnt2YXIgbj1yKDE1KSxpPXIoNjQpLGE9cig2Nyksbz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG8pe3ZhciBzLGw9bihlKSx1PWEobCksYz1pKG8sdSk7aWYodCYmciE9cil7Zm9yKDt1PmM7KWlmKChzPWxbYysrXSkhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+YztjKyspaWYoKHR8fGMgaW4gbCkmJmxbY109PT1yKXJldHVybiB0fHxjfHwwO3JldHVybiF0JiYtMX19O3QuZXhwb3J0cz17aW5jbHVkZXM6byghMCksaW5kZXhPZjpvKCExKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWF4LGE9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KTtyZXR1cm4gcjwwP2kocitlLDApOmEocixlKX19LCh0LGUscik9Pnt2YXIgbj1yKDY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGUhPWV8fDA9PT1lPzA6bihlKX19LHQ9Pnt2YXIgZT1NYXRoLmNlaWwscj1NYXRoLmZsb29yO3QuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXt2YXIgbj0rdDtyZXR1cm4obj4wP3I6ZSkobil9fSwodCxlLHIpPT57dmFyIG49cig2OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQubGVuZ3RoKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP2kobih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sdD0+e3QuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSwodCxlKT0+e2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDI0KSxhPS8jfFwucHJvdG90eXBlXC4vLG89ZnVuY3Rpb24odCxlKXt2YXIgcj1sW3ModCldO3JldHVybiByPT1jfHxyIT11JiYoaShlKT9uKGUpOiEhZSl9LHM9by5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKGEsIi4iKS50b0xvd2VyQ2FzZSgpfSxsPW8uZGF0YT17fSx1PW8uTkFUSVZFPSJOIixjPW8uUE9MWUZJTEw9IlAiO3QuZXhwb3J0cz1vfSwodCxlLHIpPT57dmFyIG49cigzNyksaT1yKDczKSxhPXIoNDgpLmYsbz1uKCJ1bnNjb3BhYmxlcyIpLHM9QXJyYXkucHJvdG90eXBlO251bGw9PXNbb10mJmEocyxvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6aShudWxsKX0pLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtzW29dW3RdPSEwfX0sKHQsZSxyKT0+e3ZhciBuLGk9cig1MCksYT1yKDc0KSxvPXIoNjkpLHM9cig1OCksbD1yKDc2KSx1PXIoNDYpLGM9cig1NyksaD0icHJvdG90eXBlIixmPSJzY3JpcHQiLGQ9YygiSUVfUFJPVE8iKSxwPWZ1bmN0aW9uKCl7fSx2PWZ1bmN0aW9uKHQpe3JldHVybiI8IitmKyI+Iit0KyI8LyIrZisiPiJ9LHk9ZnVuY3Rpb24odCl7dC53cml0ZSh2KCIiKSksdC5jbG9zZSgpO3ZhciBlPXQucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gdD1udWxsLGV9LG09ZnVuY3Rpb24oKXt0cnl7bj1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaCh0KXt9dmFyIHQsZSxyO209InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJm4/eShuKTooZT11KCJpZnJhbWUiKSxyPSJqYXZhIitmKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGwuYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKHIpLCh0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUodigiZG9jdW1lbnQuRj1PYmplY3QiKSksdC5jbG9zZSgpLHQuRik6eShuKTtmb3IodmFyIGk9by5sZW5ndGg7aS0tOylkZWxldGUgbVtoXVtvW2ldXTtyZXR1cm4gbSgpfTtzW2RdPSEwLHQuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8ocFtoXT1pKHQpLHI9bmV3IHAscFtoXT1udWxsLHJbZF09dCk6cj1tKCksdm9pZCAwPT09ZT9yOmEuZihyLGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQ5KSxhPXIoNDgpLG89cig1MCkscz1yKDE1KSxsPXIoNzUpO2UuZj1uJiYhaT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe28odCk7Zm9yKHZhciByLG49cyhlKSxpPWwoZSksdT1pLmxlbmd0aCxjPTA7dT5jOylhLmYodCxyPWlbYysrXSxuW3JdKTtyZXR1cm4gdH19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpKX19LCh0LGUscik9Pnt2YXIgbj1yKDI3KTt0LmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuW3RdLnByb3RvdHlwZVtlXSl9fSwodCxlLHIpPT57cig3OSl9LCh0LGUscik9Pnt2YXIgbj1yKDgwKSxpPXIoNjcpLGE9cig2NSksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzKSxyPWkoZSksbj1hKHQpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDplW3NdfSkpfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig4MSkscz1yKDkpLGw9cig3KSx1PXIoMjQpLGM9cigyMyksaD1yKDQyKSxmPXIoODIpLGQ9cigzNSkscD1yKDQ3KSx2PXIoNTEpLHk9cig0OCkuZixtPXIoMjgpLGc9cig4NCksYj1yKDg2KSxfPXIoMzcpLHc9cig0NCksQT1yKDU1KSxrPUEuZW5mb3JjZSxTPUEuZ2V0LHg9bC5JbnQ4QXJyYXksRT14JiZ4LnByb3RvdHlwZSxQPWwuVWludDhDbGFtcGVkQXJyYXksVD1QJiZQLnByb3RvdHlwZSxDPXgmJmcoeCksTz1FJiZnKEUpLEY9T2JqZWN0LnByb3RvdHlwZSxNPWwuVHlwZUVycm9yLFI9XygidG9TdHJpbmdUYWciKSxJPXcoIlRZUEVEX0FSUkFZX1RBRyIpLGo9IlR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsTD1vJiYhIWImJiJPcGVyYSIhPT1mKGwub3BlcmEpLEQ9ITEsTj17SW50OEFycmF5OjEsVWludDhBcnJheToxLFVpbnQ4Q2xhbXBlZEFycmF5OjEsSW50MTZBcnJheToyLFVpbnQxNkFycmF5OjIsSW50MzJBcnJheTo0LFVpbnQzMkFycmF5OjQsRmxvYXQzMkFycmF5OjQsRmxvYXQ2NEFycmF5Ojh9LFU9e0JpZ0ludDY0QXJyYXk6OCxCaWdVaW50NjRBcnJheTo4fSxXPWZ1bmN0aW9uKHQpe3ZhciBlPWcodCk7aWYoYyhlKSl7dmFyIHI9UyhlKTtyZXR1cm4gciYmaChyLGopP3Jbal06VyhlKX19LEc9ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4gaChOLGUpfHxoKFUsZSl9O2ZvcihuIGluIE4pKGE9KGk9bFtuXSkmJmkucHJvdG90eXBlKT9rKGEpW2pdPWk6TD0hMTtmb3IobiBpbiBVKShhPShpPWxbbl0pJiZpLnByb3RvdHlwZSkmJihrKGEpW2pdPWkpO2lmKCghTHx8IXUoQyl8fEM9PT1GdW5jdGlvbi5wcm90b3R5cGUpJiYoQz1mdW5jdGlvbigpe3Rocm93IE0oIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LEwpKWZvcihuIGluIE4pbFtuXSYmYihsW25dLEMpO2lmKCghTHx8IU98fE89PT1GKSYmKE89Qy5wcm90b3R5cGUsTCkpZm9yKG4gaW4gTilsW25dJiZiKGxbbl0ucHJvdG90eXBlLE8pO2lmKEwmJmcoVCkhPT1PJiZiKFQsTykscyYmIWgoTyxSKSlmb3IobiBpbiBEPSEwLHkoTyxSLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzKT90aGlzW0ldOnZvaWQgMH19KSxOKWxbbl0mJnAobFtuXSxJLG4pO3QuZXhwb3J0cz17TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpMLFRZUEVEX0FSUkFZX1RBRzpEJiZJLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKEcodCkpcmV0dXJuIHQ7dGhyb3cgTSgiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LGFUeXBlZEFycmF5Q29uc3RydWN0b3I6ZnVuY3Rpb24odCl7aWYodSh0KSYmKCFifHxtKEMsdCkpKXJldHVybiB0O3Rocm93IE0oZCh0KSsiIGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIil9LGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6ZnVuY3Rpb24odCxlLHIsbil7aWYocyl7aWYocilmb3IodmFyIGkgaW4gTil7dmFyIGE9bFtpXTtpZihhJiZoKGEucHJvdG90eXBlLHQpKXRyeXtkZWxldGUgYS5wcm90b3R5cGVbdF19Y2F0Y2gocil7dHJ5e2EucHJvdG90eXBlW3RdPWV9Y2F0Y2godCl7fX19T1t0XSYmIXJ8fHYoTyx0LHI/ZTpMJiZFW3RdfHxlLG4pfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihzKXtpZihiKXtpZihyKWZvcihuIGluIE4paWYoKGk9bFtuXSkmJmgoaSx0KSl0cnl7ZGVsZXRlIGlbdF19Y2F0Y2godCl7fWlmKENbdF0mJiFyKXJldHVybjt0cnl7cmV0dXJuIHYoQyx0LHI/ZTpMJiZDW3RdfHxlKX1jYXRjaCh0KXt9fWZvcihuIGluIE4pIShpPWxbbl0pfHxpW3RdJiYhcnx8dihpLHQsZSl9fSxnZXRUeXBlZEFycmF5Q29uc3RydWN0b3I6Vyxpc1ZpZXc6ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4iRGF0YVZpZXciPT09ZXx8aChOLGUpfHxoKFUsZSl9LGlzVHlwZWRBcnJheTpHLFR5cGVkQXJyYXk6QyxUeXBlZEFycmF5UHJvdG90eXBlOk99fSx0PT57dC5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgRGF0YVZpZXd9LCh0LGUscik9Pnt2YXIgbj1yKDgzKSxpPXIoMjQpLGE9cigxOCksbz1yKDM3KSgidG9TdHJpbmdUYWciKSxzPU9iamVjdCxsPSJBcmd1bWVudHMiPT1hKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPW4/YTpmdW5jdGlvbih0KXt2YXIgZSxyLG47cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yocj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fShlPXModCksbykpP3I6bD9hKGUpOiJPYmplY3QiPT0obj1hKGUpKSYmaShlLmNhbGxlZSk/IkFyZ3VtZW50cyI6bn19LCh0LGUscik9Pnt2YXIgbj17fTtuW3IoMzcpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhuKX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cigyNCksYT1yKDQzKSxvPXIoNTcpLHM9cig4NSksbD1vKCJJRV9QUk9UTyIpLHU9T2JqZWN0LGM9dS5wcm90b3R5cGU7dC5leHBvcnRzPXM/dS5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXt2YXIgZT1hKHQpO2lmKG4oZSxsKSlyZXR1cm4gZVtsXTt2YXIgcj1lLmNvbnN0cnVjdG9yO3JldHVybiBpKHIpJiZlIGluc3RhbmNlb2Ygcj9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgdT9jOm51bGx9fSwodCxlLHIpPT57dmFyIG49cigxMCk7dC5leHBvcnRzPSFuKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyB0KSE9PXQucHJvdG90eXBlfSkpfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDUwKSxhPXIoODcpO3QuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgdCxlPSExLHI9e307dHJ5eyh0PW4oT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpKShyLFtdKSxlPXIgaW5zdGFuY2VvZiBBcnJheX1jYXRjaCh0KXt9cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGkociksYShuKSxlP3QocixuKTpyLl9fcHJvdG9fXz1uLHJ9fSgpOnZvaWQgMCl9LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPVN0cmluZyxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0fHxuKHQpKXJldHVybiB0O3Rocm93IGEoIkNhbid0IHNldCAiK2kodCkrIiBhcyBhIHByb3RvdHlwZSIpfX0sKHQsZSxyKT0+e3IoODkpLHIoOTYpLHIoOTgpLHIoMTIxKSxyKDEyMyk7dmFyIG49cigxMzIpO3QuZXhwb3J0cz1uLnN0cnVjdHVyZWRDbG9uZX0sKHQsZSxyKT0+e3ZhciBuPXIoMTUpLGk9cig3MiksYT1yKDkwKSxvPXIoNTUpLHM9cig0OCkuZixsPXIoOTEpLHU9cig5NSksYz1yKDM5KSxoPXIoOSksZj0iQXJyYXkgSXRlcmF0b3IiLGQ9by5zZXQscD1vLmdldHRlckZvcihmKTt0LmV4cG9ydHM9bChBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe2QodGhpcyx7dHlwZTpmLHRhcmdldDpuKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLGU9dC50YXJnZXQscj10LmtpbmQsbj10LmluZGV4Kys7cmV0dXJuIWV8fG4+PWUubGVuZ3RoPyh0LnRhcmdldD12b2lkIDAsdSh2b2lkIDAsITApKTp1KCJrZXlzIj09cj9uOiJ2YWx1ZXMiPT1yP2Vbbl06W24sZVtuXV0sITEpfSksInZhbHVlcyIpO3ZhciB2PWEuQXJndW1lbnRzPWEuQXJyYXk7aWYoaSgia2V5cyIpLGkoInZhbHVlcyIpLGkoImVudHJpZXMiKSwhYyYmaCYmInZhbHVlcyIhPT12Lm5hbWUpdHJ5e3ModiwibmFtZSIse3ZhbHVlOiJ2YWx1ZXMifSl9Y2F0Y2godCl7fX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDExKSxhPXIoMzkpLG89cig1Mykscz1yKDI0KSxsPXIoOTIpLHU9cig4NCksYz1yKDg2KSxoPXIoOTQpLGY9cig0NyksZD1yKDUxKSxwPXIoMzcpLHY9cig5MCkseT1yKDkzKSxtPW8uUFJPUEVSLGc9by5DT05GSUdVUkFCTEUsYj15Lkl0ZXJhdG9yUHJvdG90eXBlLF89eS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLHc9cCgiaXRlcmF0b3IiKSxBPSJrZXlzIixrPSJ2YWx1ZXMiLFM9ImVudHJpZXMiLHg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scCx5LEUpe2wocixlLG8pO3ZhciBQLFQsQyxPPWZ1bmN0aW9uKHQpe2lmKHQ9PT1wJiZqKXJldHVybiBqO2lmKCFfJiZ0IGluIFIpcmV0dXJuIFJbdF07c3dpdGNoKHQpe2Nhc2UgQTpjYXNlIGs6Y2FzZSBTOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyl9fSxGPWUrIiBJdGVyYXRvciIsTT0hMSxSPXQucHJvdG90eXBlLEk9Ult3XXx8UlsiQEBpdGVyYXRvciJdfHxwJiZSW3BdLGo9IV8mJkl8fE8ocCksTD0iQXJyYXkiPT1lJiZSLmVudHJpZXN8fEk7aWYoTCYmKFA9dShMLmNhbGwobmV3IHQpKSkhPT1PYmplY3QucHJvdG90eXBlJiZQLm5leHQmJihhfHx1KFApPT09Ynx8KGM/YyhQLGIpOnMoUFt3XSl8fGQoUCx3LHgpKSxoKFAsRiwhMCwhMCksYSYmKHZbRl09eCkpLG0mJnA9PWsmJkkmJkkubmFtZSE9PWsmJighYSYmZz9mKFIsIm5hbWUiLGspOihNPSEwLGo9ZnVuY3Rpb24oKXtyZXR1cm4gaShJLHRoaXMpfSkpLHApaWYoVD17dmFsdWVzOk8oayksa2V5czp5P2o6TyhBKSxlbnRyaWVzOk8oUyl9LEUpZm9yKEMgaW4gVCkoX3x8TXx8IShDIGluIFIpKSYmZChSLEMsVFtDXSk7ZWxzZSBuKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6X3x8TX0sVCk7cmV0dXJuIGEmJiFFfHxSW3ddPT09anx8ZChSLHcsaix7bmFtZTpwfSksdltlXT1qLFR9fSwodCxlLHIpPT57dmFyIG49cig5MykuSXRlcmF0b3JQcm90b3R5cGUsaT1yKDczKSxhPXIoMTQpLG89cig5NCkscz1yKDkwKSxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXt2YXIgYz1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1pKG4se25leHQ6YSgrIXUscil9KSxvKHQsYywhMSwhMCksc1tjXT1sLHR9fSwodCxlLHIpPT57dmFyIG4saSxhLG89cigxMCkscz1yKDI0KSxsPXIoMjMpLHU9cig3MyksYz1yKDg0KSxoPXIoNTEpLGY9cigzNyksZD1yKDM5KSxwPWYoIml0ZXJhdG9yIiksdj0hMTtbXS5rZXlzJiYoIm5leHQiaW4oYT1bXS5rZXlzKCkpPyhpPWMoYyhhKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKG49aSk6dj0hMCksIWwobil8fG8oKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIG5bcF0uY2FsbCh0KSE9PXR9KSk/bj17fTpkJiYobj11KG4pKSxzKG5bcF0pfHxoKG4scCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOm4sQlVHR1lfU0FGQVJJX0lURVJBVE9SUzp2fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDQyKSxhPXIoMzcpKCJ0b1N0cmluZ1RhZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dCYmIXImJih0PXQucHJvdG90eXBlKSx0JiYhaSh0LGEpJiZuKHQsYSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LHQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6dCxkb25lOmV9fX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig1MSksYT1yKDk3KTtufHxpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixhLHt1bnNhZmU6ITB9KX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig4Mik7dC5leHBvcnRzPW4/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK2kodGhpcykrIl0ifX0sKHQsZSxyKT0+e3IoOTkpfSwodCxlLHIpPT57cigxMDApKCJNYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDcpLGE9cigxNyksbz1yKDcxKSxzPXIoNTEpLGw9cigxMDEpLHU9cigxMDgpLGM9cigxMTUpLGg9cigyNCksZj1yKDIwKSxkPXIoMjMpLHA9cigxMCksdj1yKDExNikseT1yKDk0KSxtPXIoMTE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBnPS0xIT09dC5pbmRleE9mKCJNYXAiKSxiPS0xIT09dC5pbmRleE9mKCJXZWFrIiksXz1nPyJzZXQiOiJhZGQiLHc9aVt0XSxBPXcmJncucHJvdG90eXBlLGs9dyxTPXt9LHg9ZnVuY3Rpb24odCl7dmFyIGU9YShBW3RdKTtzKEEsdCwiYWRkIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLDA9PT10PzA6dCksdGhpc306ImRlbGV0ZSI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShiJiYhZCh0KSkmJmUodGhpcywwPT09dD8wOnQpfToiZ2V0Ij09dD9mdW5jdGlvbih0KXtyZXR1cm4gYiYmIWQodCk/dm9pZCAwOmUodGhpcywwPT09dD8wOnQpfToiaGFzIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKGImJiFkKHQpKSYmZSh0aGlzLDA9PT10PzA6dCl9OmZ1bmN0aW9uKHQscil7cmV0dXJuIGUodGhpcywwPT09dD8wOnQsciksdGhpc30pfTtpZihvKHQsIWgodyl8fCEoYnx8QS5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IHcpLmVudHJpZXMoKS5uZXh0KCl9KSkpKSlrPXIuZ2V0Q29uc3RydWN0b3IoZSx0LGcsXyksbC5lbmFibGUoKTtlbHNlIGlmKG8odCwhMCkpe3ZhciBFPW5ldyBrLFA9RVtfXShiP3t9Oi0wLDEpIT1FLFQ9cCgoZnVuY3Rpb24oKXtFLmhhcygxKX0pKSxDPXYoKGZ1bmN0aW9uKHQpe25ldyB3KHQpfSkpLE89IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyB3LGU9NTtlLS07KXRbX10oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSkpO0N8fCgoaz1lKChmdW5jdGlvbih0LGUpe2ModCxBKTt2YXIgcj1tKG5ldyB3LHQsayk7cmV0dXJuIGYoZSl8fHUoZSxyW19dLHt0aGF0OnIsQVNfRU5UUklFUzpnfSkscn0pKSkucHJvdG90eXBlPUEsQS5jb25zdHJ1Y3Rvcj1rKSwoVHx8TykmJih4KCJkZWxldGUiKSx4KCJoYXMiKSxnJiZ4KCJnZXQiKSksKE98fFApJiZ4KF8pLGImJkEuY2xlYXImJmRlbGV0ZSBBLmNsZWFyfXJldHVybiBTW3RdPWssbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDprIT13fSxTKSx5KGssdCksYnx8ci5zZXRTdHJvbmcoayx0LGcpLGt9fSwodCxlLHIpPT57dmFyIG49cig2KSxpPXIoMTcpLGE9cig1OCksbz1yKDIzKSxzPXIoNDIpLGw9cig0OCkuZix1PXIoNjEpLGM9cigxMDIpLGg9cigxMDUpLGY9cig0NCksZD1yKDEwNykscD0hMSx2PWYoIm1ldGEiKSx5PTAsbT1mdW5jdGlvbih0KXtsKHQsdix7dmFsdWU6e29iamVjdElEOiJPIit5Kyssd2Vha0RhdGE6e319fSl9LGc9dC5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXtnLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgdD11LmYsZT1pKFtdLnNwbGljZSkscj17fTtyW3ZdPTEsdChyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQociksaT0wLGE9bi5sZW5ndGg7aTxhO2krKylpZihuW2ldPT09dil7ZShuLGksMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6Yy5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6KCJzdHJpbmciPT10eXBlb2YgdD8iUyI6IlAiKSt0O2lmKCFzKHQsdikpe2lmKCFoKHQpKXJldHVybiJGIjtpZighZSlyZXR1cm4iRSI7bSh0KX1yZXR1cm4gdFt2XS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighcyh0LHYpKXtpZighaCh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTttKHQpfXJldHVybiB0W3ZdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gZCYmcCYmaCh0KSYmIXModCx2KSYmbSh0KSx0fX07YVt2XT0hMH0sKHQsZSxyKT0+e3ZhciBuPXIoMTgpLGk9cigxNSksYT1yKDYxKS5mLG89cigxMDMpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gcyYmIldpbmRvdyI9PW4odCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhKHQpfWNhdGNoKHQpe3JldHVybiBvKHMpfX0odCk6YShpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDY0KSxpPXIoNjcpLGE9cigxMDQpLG89QXJyYXkscz1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbD1pKHQpLHU9bihlLGwpLGM9bih2b2lkIDA9PT1yP2w6cixsKSxoPW8ocyhjLXUsMCkpLGY9MDt1PGM7dSsrLGYrKylhKGgsZix0W3VdKTtyZXR1cm4gaC5sZW5ndGg9ZixofX0sKHQsZSxyKT0+e3ZhciBuPXIoMjEpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPW4oZSk7byBpbiB0P2kuZih0LG8sYSgwLHIpKTp0W29dPXJ9fSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDIzKSxhPXIoMTgpLG89cigxMDYpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxsPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTt0LmV4cG9ydHM9bHx8bz9mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighb3x8IkFycmF5QnVmZmVyIiE9YSh0KSkmJighc3x8cyh0KSl9OnN9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciB0PW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKHQpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYSIse3ZhbHVlOjh9KX19KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwOSksaT1yKDExKSxhPXIoNTApLG89cigzNSkscz1yKDExMSksbD1yKDY3KSx1PXIoMjgpLGM9cigxMTIpLGg9cigxMTMpLGY9cigxMTQpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfSx2PXAucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHksbSxnLGIsXyx3LEEsaz1yJiZyLnRoYXQsUz0hKCFyfHwhci5BU19FTlRSSUVTKSx4PSEoIXJ8fCFyLklTX1JFQ09SRCksRT0hKCFyfHwhci5JU19JVEVSQVRPUiksUD0hKCFyfHwhci5JTlRFUlJVUFRFRCksVD1uKGUsayksQz1mdW5jdGlvbih0KXtyZXR1cm4geSYmZih5LCJub3JtYWwiLHQpLG5ldyBwKCEwLHQpfSxPPWZ1bmN0aW9uKHQpe3JldHVybiBTPyhhKHQpLFA/VCh0WzBdLHRbMV0sQyk6VCh0WzBdLHRbMV0pKTpQP1QodCxDKTpUKHQpfTtpZih4KXk9dC5pdGVyYXRvcjtlbHNlIGlmKEUpeT10O2Vsc2V7aWYoIShtPWgodCkpKXRocm93IGQobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMobSkpe2ZvcihnPTAsYj1sKHQpO2I+ZztnKyspaWYoKF89Tyh0W2ddKSkmJnUodixfKSlyZXR1cm4gXztyZXR1cm4gbmV3IHAoITEpfXk9Yyh0LG0pfWZvcih3PXg/dC5uZXh0OnkubmV4dDshKEE9aSh3LHkpKS5kb25lOyl7dHJ5e189TyhBLnZhbHVlKX1jYXRjaCh0KXtmKHksInRocm93Iix0KX1pZigib2JqZWN0Ij09dHlwZW9mIF8mJl8mJnUodixfKSlyZXR1cm4gX31yZXR1cm4gbmV3IHAoITEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEwKSxpPXIoMzQpLGE9cigxMiksbz1uKG4uYmluZCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCksdm9pZCAwPT09ZT90OmE/byh0LGUpOmZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LCh0LGUscik9Pnt2YXIgbj1yKDE4KSxpPXIoMTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiRnVuY3Rpb24iPT09bih0KSlyZXR1cm4gaSh0KX19LCh0LGUscik9Pnt2YXIgbj1yKDM3KSxpPXIoOTApLGE9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihpLkFycmF5PT09dHx8b1thXT09PXQpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigzNCksYT1yKDUwKSxvPXIoMzUpLHM9cigxMTMpLGw9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKHQpOmU7aWYoaShyKSlyZXR1cm4gYShuKHIsdCkpO3Rocm93IGwobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKHQsZSxyKT0+e3ZhciBuPXIoODIpLGk9cigzMyksYT1yKDIwKSxvPXIoOTApLHM9cigzNykoIml0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiBpKHQscyl8fGkodCwiQEBpdGVyYXRvciIpfHxvW24odCldfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig1MCksYT1yKDMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHM7aSh0KTt0cnl7aWYoIShvPWEodCwicmV0dXJuIikpKXtpZigidGhyb3ciPT09ZSl0aHJvdyByO3JldHVybiByfW89bihvLHQpfWNhdGNoKHQpe3M9ITAsbz10fWlmKCJ0aHJvdyI9PT1lKXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBpKG8pLHJ9fSwodCxlLHIpPT57dmFyIG49cigyOCksaT1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYobihlLHQpKXJldHVybiB0O3Rocm93IGkoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwodCxlLHIpPT57dmFyIG49cigzNykoIml0ZXJhdG9yIiksaT0hMTt0cnl7dmFyIGE9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFhKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtpPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFpKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgYT17fTthW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSx0KGEpfWNhdGNoKHQpe31yZXR1cm4gcn19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoMjMpLGE9cig4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzO3JldHVybiBhJiZuKG89ZS5jb25zdHJ1Y3RvcikmJm8hPT1yJiZpKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmEodCxzKSx0fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDczKSxhPXIoMTE5KSxvPXIoMTA5KSxzPXIoMTE1KSxsPXIoMjApLHU9cigxMDgpLGM9cig5MSksaD1yKDk1KSxmPXIoMTIwKSxkPXIoOSkscD1yKDEwMSkuZmFzdEtleSx2PXIoNTUpLHk9di5zZXQsbT12LmdldHRlckZvcjt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxyLGMpe3ZhciBoPXQoKGZ1bmN0aW9uKHQsbil7cyh0LGYpLHkodCx7dHlwZTplLGluZGV4OmkobnVsbCksZmlyc3Q6dm9pZCAwLGxhc3Q6dm9pZCAwLHNpemU6MH0pLGR8fCh0LnNpemU9MCksbChuKXx8dShuLHRbY10se3RoYXQ6dCxBU19FTlRSSUVTOnJ9KX0pKSxmPWgucHJvdG90eXBlLHY9bShlKSxnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dih0KSxvPWIodCxlKTtyZXR1cm4gbz9vLnZhbHVlPXI6KGEubGFzdD1vPXtpbmRleDppPXAoZSwhMCksa2V5OmUsdmFsdWU6cixwcmV2aW91czpuPWEubGFzdCxuZXh0OnZvaWQgMCxyZW1vdmVkOiExfSxhLmZpcnN0fHwoYS5maXJzdD1vKSxuJiYobi5uZXh0PW8pLGQ/YS5zaXplKys6dC5zaXplKyssIkYiIT09aSYmKGEuaW5kZXhbaV09bykpLHR9LGI9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXYodCksaT1wKGUpO2lmKCJGIiE9PWkpcmV0dXJuIG4uaW5kZXhbaV07Zm9yKHI9bi5maXJzdDtyO3I9ci5uZXh0KWlmKHIua2V5PT1lKXJldHVybiByfTtyZXR1cm4gYShmLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD12KHRoaXMpLGU9dC5pbmRleCxyPXQuZmlyc3Q7cjspci5yZW1vdmVkPSEwLHIucHJldmlvdXMmJihyLnByZXZpb3VzPXIucHJldmlvdXMubmV4dD12b2lkIDApLGRlbGV0ZSBlW3IuaW5kZXhdLHI9ci5uZXh0O3QuZmlyc3Q9dC5sYXN0PXZvaWQgMCxkP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXYoZSksbj1iKGUsdCk7aWYobil7dmFyIGk9bi5uZXh0LGE9bi5wcmV2aW91cztkZWxldGUgci5pbmRleFtuLmluZGV4XSxuLnJlbW92ZWQ9ITAsYSYmKGEubmV4dD1pKSxpJiYoaS5wcmV2aW91cz1hKSxyLmZpcnN0PT1uJiYoci5maXJzdD1pKSxyLmxhc3Q9PW4mJihyLmxhc3Q9YSksZD9yLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIW59LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dih0aGlzKSxuPW8odCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7ZT1lP2UubmV4dDpyLmZpcnN0Oylmb3IobihlLnZhbHVlLGUua2V5LHRoaXMpO2UmJmUucmVtb3ZlZDspZT1lLnByZXZpb3VzfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISFiKHRoaXMsdCl9fSksYShmLHI/e2dldDpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBnKHRoaXMsMD09PXQ/MDp0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLHQ9MD09PXQ/MDp0LHQpfX0pLGQmJm4oZiwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB2KHRoaXMpLnNpemV9fSksaH0sc2V0U3Ryb25nOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lKyIgSXRlcmF0b3IiLGk9bShlKSxhPW0obik7Yyh0LGUsKGZ1bmN0aW9uKHQsZSl7eSh0aGlzLHt0eXBlOm4sdGFyZ2V0OnQsc3RhdGU6aSh0KSxraW5kOmUsbGFzdDp2b2lkIDB9KX0pLChmdW5jdGlvbigpe2Zvcih2YXIgdD1hKHRoaXMpLGU9dC5raW5kLHI9dC5sYXN0O3ImJnIucmVtb3ZlZDspcj1yLnByZXZpb3VzO3JldHVybiB0LnRhcmdldCYmKHQubGFzdD1yPXI/ci5uZXh0OnQuc3RhdGUuZmlyc3QpP2goImtleXMiPT1lP3Iua2V5OiJ2YWx1ZXMiPT1lP3IudmFsdWU6W3Iua2V5LHIudmFsdWVdLCExKToodC50YXJnZXQ9dm9pZCAwLGgodm9pZCAwLCEwKSl9KSxyPyJlbnRyaWVzIjoidmFsdWVzIiwhciwhMCksZihlKX19fSwodCxlLHIpPT57dmFyIG49cig1MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGkgaW4gZSluKHQsaSxlW2ldLHIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cig0OCksYT1yKDM3KSxvPXIoOSkscz1hKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1pLmY7byYmZSYmIWVbc10mJnIoZSxzLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwodCxlLHIpPT57cigxMjIpfSwodCxlLHIpPT57cigxMDApKCJTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuLGk9cigzOSksYT1yKDYpLG89cig3KSxzPXIoMjcpLGw9cigxNyksdT1yKDEwKSxjPXIoNDQpLGg9cigyNCksZj1yKDEyNCksZD1yKDIwKSxwPXIoMjMpLHY9cigyNikseT1yKDEwOCksbT1yKDUwKSxnPXIoODIpLGI9cig0MiksXz1yKDEwNCksdz1yKDQ3KSxBPXIoNjcpLGs9cigxMjUpLFM9cigxMjYpLHg9cigxMjgpLEU9cigzMSksUD1yKDEyOSksVD1yKDEzMCksQz1yKDEzMSksTz1vLk9iamVjdCxGPW8uRGF0ZSxNPW8uRXJyb3IsUj1vLkV2YWxFcnJvcixJPW8uUmFuZ2VFcnJvcixqPW8uUmVmZXJlbmNlRXJyb3IsTD1vLlN5bnRheEVycm9yLEQ9by5UeXBlRXJyb3IsTj1vLlVSSUVycm9yLFU9by5QZXJmb3JtYW5jZU1hcmssVz1vLldlYkFzc2VtYmx5LEc9VyYmVy5Db21waWxlRXJyb3J8fE0sQj1XJiZXLkxpbmtFcnJvcnx8TSxxPVcmJlcuUnVudGltZUVycm9yfHxNLEg9cygiRE9NRXhjZXB0aW9uIiksej1zKCJTZXQiKSxWPXMoIk1hcCIpLFg9Vi5wcm90b3R5cGUsWT1sKFguaGFzKSxLPWwoWC5nZXQpLEo9bChYLnNldCksUT1sKHoucHJvdG90eXBlLmFkZCksJD1zKCJPYmplY3QiLCJrZXlzIiksWj1sKFtdLnB1c2gpLHR0PWwoKCEwKS52YWx1ZU9mKSxldD1sKDEuLnZhbHVlT2YpLHJ0PWwoIiIudmFsdWVPZiksbnQ9bChGLnByb3RvdHlwZS5nZXRUaW1lKSxpdD1jKCJzdHJ1Y3R1cmVkQ2xvbmUiKSxhdD0iRGF0YUNsb25lRXJyb3IiLG90PSJUcmFuc2ZlcnJpbmciLHN0PWZ1bmN0aW9uKHQpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciBlPW5ldyBvLlNldChbN10pLHI9dChlKSxuPXQoTyg3KSk7cmV0dXJuIHI9PWV8fCFyLmhhcyg3KXx8Im9iamVjdCIhPXR5cGVvZiBufHw3IT1ufSkpJiZ0fSxsdD1mdW5jdGlvbih0LGUpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciByPW5ldyBlLG49dCh7YTpyLGI6cn0pO3JldHVybiEobiYmbi5hPT09bi5iJiZuLmEgaW5zdGFuY2VvZiBlJiZuLmEuc3RhY2s9PT1yLnN0YWNrKX0pKX0sdXQ9by5zdHJ1Y3R1cmVkQ2xvbmUsY3Q9aXx8IWx0KHV0LE0pfHwhbHQodXQsSCl8fChuPXV0LCEhdSgoZnVuY3Rpb24oKXt2YXIgdD1uKG5ldyBvLkFnZ3JlZ2F0ZUVycm9yKFsxXSxpdCx7Y2F1c2U6M30pKTtyZXR1cm4iQWdncmVnYXRlRXJyb3IiIT10Lm5hbWV8fDEhPXQuZXJyb3JzWzBdfHx0Lm1lc3NhZ2UhPWl0fHwzIT10LmNhdXNlfSkpKSxodD0hdXQmJnN0KChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFUoaXQse2RldGFpbDp0fSkuZGV0YWlsfSkpLGZ0PXN0KHV0KXx8aHQsZHQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEgoIlVuY2xvbmVhYmxlIHR5cGU6ICIrdCxhdCl9LHB0PWZ1bmN0aW9uKHQsZSl7dGhyb3cgbmV3IEgoKGV8fCJDbG9uaW5nIikrIiBvZiAiK3QrIiBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiB0aGlzIGVuZ2luZSIsYXQpfSx2dD1mdW5jdGlvbih0LGUpe2lmKHYodCkmJmR0KCJTeW1ib2wiKSwhcCh0KSlyZXR1cm4gdDtpZihlKXtpZihZKGUsdCkpcmV0dXJuIEsoZSx0KX1lbHNlIGU9bmV3IFY7dmFyIHIsbixpLGEsbCx1LGMsZixkLHksbT1nKHQpLGs9ITE7c3dpdGNoKG0pe2Nhc2UiQXJyYXkiOmk9W10saz0hMDticmVhaztjYXNlIk9iamVjdCI6aT17fSxrPSEwO2JyZWFrO2Nhc2UiTWFwIjppPW5ldyBWLGs9ITA7YnJlYWs7Y2FzZSJTZXQiOmk9bmV3IHosaz0hMDticmVhaztjYXNlIlJlZ0V4cCI6aT1uZXcgUmVnRXhwKHQuc291cmNlLFModCkpO2JyZWFrO2Nhc2UiRXJyb3IiOnN3aXRjaChuPXQubmFtZSl7Y2FzZSJBZ2dyZWdhdGVFcnJvciI6aT1zKCJBZ2dyZWdhdGVFcnJvciIpKFtdKTticmVhaztjYXNlIkV2YWxFcnJvciI6aT1SKCk7YnJlYWs7Y2FzZSJSYW5nZUVycm9yIjppPUkoKTticmVhaztjYXNlIlJlZmVyZW5jZUVycm9yIjppPWooKTticmVhaztjYXNlIlN5bnRheEVycm9yIjppPUwoKTticmVhaztjYXNlIlR5cGVFcnJvciI6aT1EKCk7YnJlYWs7Y2FzZSJVUklFcnJvciI6aT1OKCk7YnJlYWs7Y2FzZSJDb21waWxlRXJyb3IiOmk9RygpO2JyZWFrO2Nhc2UiTGlua0Vycm9yIjppPUIoKTticmVhaztjYXNlIlJ1bnRpbWVFcnJvciI6aT1xKCk7YnJlYWs7ZGVmYXVsdDppPU0oKX1rPSEwO2JyZWFrO2Nhc2UiRE9NRXhjZXB0aW9uIjppPW5ldyBIKHQubWVzc2FnZSx0Lm5hbWUpLGs9ITA7YnJlYWs7Y2FzZSJEYXRhVmlldyI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJCaWdJbnQ2NEFycmF5IjpjYXNlIkJpZ1VpbnQ2NEFycmF5IjpyPW9bbV0scChyKXx8cHQobSksaT1uZXcgcih2dCh0LmJ1ZmZlcixlKSx0LmJ5dGVPZmZzZXQsIkRhdGFWaWV3Ij09PW0/dC5ieXRlTGVuZ3RoOnQubGVuZ3RoKTticmVhaztjYXNlIkRPTVF1YWQiOnRyeXtpPW5ldyBET01RdWFkKHZ0KHQucDEsZSksdnQodC5wMixlKSx2dCh0LnAzLGUpLHZ0KHQucDQsZSkpfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7Y2FzZSJGaWxlTGlzdCI6aWYoYT1mdW5jdGlvbigpe3ZhciB0O3RyeXt0PW5ldyBvLkRhdGFUcmFuc2Zlcn1jYXRjaChlKXt0cnl7dD1uZXcgby5DbGlwYm9hcmRFdmVudCgiIikuY2xpcGJvYXJkRGF0YX1jYXRjaCh0KXt9fXJldHVybiB0JiZ0Lml0ZW1zJiZ0LmZpbGVzP3Q6bnVsbH0oKSl7Zm9yKGw9MCx1PUEodCk7bDx1O2wrKylhLml0ZW1zLmFkZCh2dCh0W2xdLGUpKTtpPWEuZmlsZXN9ZWxzZSBmdD9pPWZ0KHQpOnB0KG0pO2JyZWFrO2Nhc2UiSW1hZ2VEYXRhIjp0cnl7aT1uZXcgSW1hZ2VEYXRhKHZ0KHQuZGF0YSxlKSx0LndpZHRoLHQuaGVpZ2h0LHtjb2xvclNwYWNlOnQuY29sb3JTcGFjZX0pfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7ZGVmYXVsdDppZihmdClpPWZ0KHQpO2Vsc2Ugc3dpdGNoKG0pe2Nhc2UiQmlnSW50IjppPU8odC52YWx1ZU9mKCkpO2JyZWFrO2Nhc2UiQm9vbGVhbiI6aT1PKHR0KHQpKTticmVhaztjYXNlIk51bWJlciI6aT1PKGV0KHQpKTticmVhaztjYXNlIlN0cmluZyI6aT1PKHJ0KHQpKTticmVhaztjYXNlIkRhdGUiOmk9bmV3IEYobnQodCkpO2JyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOihyPW8uRGF0YVZpZXcpfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZXx8cHQobSk7dHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlKWk9dC5zbGljZSgwKTtlbHNlIGZvcih1PXQuYnl0ZUxlbmd0aCxpPW5ldyBBcnJheUJ1ZmZlcih1KSxkPW5ldyByKHQpLHk9bmV3IHIoaSksbD0wO2w8dTtsKyspeS5zZXRVaW50OChsLGQuZ2V0VWludDgobCkpfWNhdGNoKHQpe3Rocm93IG5ldyBIKCJBcnJheUJ1ZmZlciBpcyBkZXRhY2hlZCIsYXQpfWJyZWFrO2Nhc2UiU2hhcmVkQXJyYXlCdWZmZXIiOmk9dDticmVhaztjYXNlIkJsb2IiOnRyeXtpPXQuc2xpY2UoMCx0LnNpemUsdC50eXBlKX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTVBvaW50IjpjYXNlIkRPTVBvaW50UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21Qb2ludD9yLmZyb21Qb2ludCh0KTpuZXcgcih0LngsdC55LHQueix0LncpfWNhdGNoKHQpe3B0KG0pfWJyZWFrO2Nhc2UiRE9NUmVjdCI6Y2FzZSJET01SZWN0UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21SZWN0P3IuZnJvbVJlY3QodCk6bmV3IHIodC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTU1hdHJpeCI6Y2FzZSJET01NYXRyaXhSZWFkT25seSI6cj1vW21dO3RyeXtpPXIuZnJvbU1hdHJpeD9yLmZyb21NYXRyaXgodCk6bmV3IHIodCl9Y2F0Y2godCl7cHQobSl9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6aCh0LmNsb25lKXx8cHQobSk7dHJ5e2k9dC5jbG9uZSgpfWNhdGNoKHQpe2R0KG0pfWJyZWFrO2Nhc2UiRmlsZSI6dHJ5e2k9bmV3IEZpbGUoW3RdLHQubmFtZSx0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkNyb3BUYXJnZXQiOmNhc2UiQ3J5cHRvS2V5IjpjYXNlIkZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUZpbGVIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUhhbmRsZSI6Y2FzZSJHUFVDb21waWxhdGlvbkluZm8iOmNhc2UiR1BVQ29tcGlsYXRpb25NZXNzYWdlIjpjYXNlIkltYWdlQml0bWFwIjpjYXNlIlJUQ0NlcnRpZmljYXRlIjpjYXNlIldlYkFzc2VtYmx5Lk1vZHVsZSI6cHQobSk7ZGVmYXVsdDpkdChtKX19aWYoSihlLHQsaSksaylzd2l0Y2gobSl7Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmZvcihjPSQodCksbD0wLHU9QShjKTtsPHU7bCsrKWY9Y1tsXSxfKGksZix2dCh0W2ZdLGUpKTticmVhaztjYXNlIk1hcCI6dC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe0ooaSx2dChyLGUpLHZ0KHQsZSkpfSkpO2JyZWFrO2Nhc2UiU2V0Ijp0LmZvckVhY2goKGZ1bmN0aW9uKHQpe1EoaSx2dCh0LGUpKX0pKTticmVhaztjYXNlIkVycm9yIjp3KGksIm1lc3NhZ2UiLHZ0KHQubWVzc2FnZSxlKSksYih0LCJjYXVzZSIpJiZ3KGksImNhdXNlIix2dCh0LmNhdXNlLGUpKSwiQWdncmVnYXRlRXJyb3IiPT1uJiYoaS5lcnJvcnM9dnQodC5lcnJvcnMsZSkpO2Nhc2UiRE9NRXhjZXB0aW9uIjp4JiZ3KGksInN0YWNrIix2dCh0LnN0YWNrLGUpKX1yZXR1cm4gaX0seXQ9dXQmJiF1KChmdW5jdGlvbigpe2lmKFQmJkU+OTJ8fEMmJkU+OTR8fFAmJkU+OTcpcmV0dXJuITE7dmFyIHQ9bmV3IEFycmF5QnVmZmVyKDgpLGU9dXQodCx7dHJhbnNmZXI6W3RdfSk7cmV0dXJuIDAhPXQuYnl0ZUxlbmd0aHx8OCE9ZS5ieXRlTGVuZ3RofSkpO2Eoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLHNoYW06IXl0LGZvcmNlZDpjdH0se3N0cnVjdHVyZWRDbG9uZTpmdW5jdGlvbih0KXt2YXIgZSxyPWsoYXJndW1lbnRzLmxlbmd0aCwxKT4xJiYhZChhcmd1bWVudHNbMV0pP20oYXJndW1lbnRzWzFdKTp2b2lkIDAsbj1yP3IudHJhbnNmZXI6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1uJiZmdW5jdGlvbih0LGUpe2lmKCFwKHQpKXRocm93IEQoIlRyYW5zZmVyIG9wdGlvbiBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgc2VxdWVuY2UiKTt2YXIgcj1bXTt5KHQsKGZ1bmN0aW9uKHQpe1oocixtKHQpKX0pKTt2YXIgbixpLGEscyxsLHUsYz0wLGQ9QShyKTtpZih5dClmb3Iocz11dChyLHt0cmFuc2ZlcjpyfSk7YzxkOylKKGUscltjXSxzW2MrK10pO2Vsc2UgZm9yKDtjPGQ7KXtpZihuPXJbYysrXSxZKGUsbikpdGhyb3cgbmV3IEgoIkR1cGxpY2F0ZSB0cmFuc2ZlcmFibGUiLGF0KTtzd2l0Y2goaT1nKG4pKXtjYXNlIkltYWdlQml0bWFwIjphPW8uT2Zmc2NyZWVuQ2FudmFzLGYoYSl8fHB0KGksb3QpO3RyeXsodT1uZXcgYShuLndpZHRoLG4uaGVpZ2h0KSkuZ2V0Q29udGV4dCgiYml0bWFwcmVuZGVyZXIiKS50cmFuc2ZlckZyb21JbWFnZUJpdG1hcChuKSxsPXUudHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXVkaW9EYXRhIjpjYXNlIlZpZGVvRnJhbWUiOmgobi5jbG9uZSkmJmgobi5jbG9zZSl8fHB0KGksb3QpO3RyeXtsPW4uY2xvbmUoKSxuLmNsb3NlKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOmNhc2UiTWVkaWFTb3VyY2VIYW5kbGUiOmNhc2UiTWVzc2FnZVBvcnQiOmNhc2UiT2Zmc2NyZWVuQ2FudmFzIjpjYXNlIlJlYWRhYmxlU3RyZWFtIjpjYXNlIlRyYW5zZm9ybVN0cmVhbSI6Y2FzZSJXcml0YWJsZVN0cmVhbSI6cHQoaSxvdCl9aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgSCgiVGhpcyBvYmplY3QgY2Fubm90IGJlIHRyYW5zZmVycmVkOiAiK2ksYXQpO0ooZSxuLGwpfX0obixlPW5ldyBWKSx2dCh0LGUpfX0pfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDEwKSxhPXIoMjQpLG89cig4Mikscz1yKDI3KSxsPXIoNTQpLHU9ZnVuY3Rpb24oKXt9LGM9W10saD1zKCJSZWZsZWN0IiwiY29uc3RydWN0IiksZj0vXlxzKig/OmNsYXNzfGZ1bmN0aW9uKVxiLyxkPW4oZi5leGVjKSxwPSFmLmV4ZWModSksdj1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIGgodSxjLHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX0seT1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTtzd2l0Y2gobyh0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gcHx8ISFkKGYsbCh0KSl9Y2F0Y2godCl7cmV0dXJuITB9fTt5LnNoYW09ITAsdC5leHBvcnRzPSFofHxpKChmdW5jdGlvbigpe3ZhciB0O3JldHVybiB2KHYuY2FsbCl8fCF2KE9iamVjdCl8fCF2KChmdW5jdGlvbigpe3Q9ITB9KSl8fHR9KSk/eTp2fSx0PT57dmFyIGU9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2lmKHQ8cil0aHJvdyBlKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig0MiksYT1yKDI4KSxvPXIoMTI3KSxzPVJlZ0V4cC5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PWV8fCJmbGFncyJpbiBzfHxpKHQsImZsYWdzIil8fCFhKHMsdCk/ZTpuKG8sdCl9fSwodCxlLHIpPT57dmFyIG49cig1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKSxlPSIiO3JldHVybiB0Lmhhc0luZGljZXMmJihlKz0iZCIpLHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnVuaWNvZGVTZXRzJiYoZSs9InYiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKSxpPXIoMTQpO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1FcnJvcigiYSIpO3JldHVybiEoInN0YWNrImluIHQpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN0YWNrIixpKDEsNykpLDchPT10LnN0YWNrKX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMTMwKSxpPXIoMTMxKTt0LmV4cG9ydHM9IW4mJiFpJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudH0sdD0+e3QuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIERlbm8mJkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9ufSwodCxlLHIpPT57dmFyIG49cigxOCksaT1yKDcpO3QuZXhwb3J0cz0icHJvY2VzcyI9PW4oaS5wcm9jZXNzKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyk7dC5leHBvcnRzPW59LChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd19wZGZqc19yZXF1aXJlX18pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGV4cG9ydHMuYnVpbGQ9ZXhwb3J0cy5SZW5kZXJUYXNrPWV4cG9ydHMuUERGV29ya2VyVXRpbD1leHBvcnRzLlBERldvcmtlcj1leHBvcnRzLlBERlBhZ2VQcm94eT1leHBvcnRzLlBERkRvY3VtZW50UHJveHk9ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPWV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0PWV4cG9ydHMuTG9vcGJhY2tQb3J0PWV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWV4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9ZXhwb3J0cy5EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwLGV4cG9ydHMuZ2V0RG9jdW1lbnQ9Z2V0RG9jdW1lbnQsZXhwb3J0cy5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeT1zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSxleHBvcnRzLnZlcnNpb249dm9pZCAwO3ZhciBfdXRpbD1fX3dfcGRmanNfcmVxdWlyZV9fKDEpLF9hbm5vdGF0aW9uX3N0b3JhZ2U9X193X3BkZmpzX3JlcXVpcmVfXygxMzQpLF9kaXNwbGF5X3V0aWxzPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxfZm9udF9sb2FkZXI9X193X3BkZmpzX3JlcXVpcmVfXygxNDApLF9jYW52YXM9X193X3BkZmpzX3JlcXVpcmVfXygxNDEpLF93b3JrZXJfb3B0aW9ucz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NCksX2lzX25vZGU9X193X3BkZmpzX3JlcXVpcmVfXygzKSxfbWVzc2FnZV9oYW5kbGVyPV9fd19wZGZqc19yZXF1aXJlX18oMTQ1KSxfbWV0YWRhdGE9X193X3BkZmpzX3JlcXVpcmVfXygxNDYpLF9vcHRpb25hbF9jb250ZW50X2NvbmZpZz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NyksX3RyYW5zcG9ydF9zdHJlYW09X193X3BkZmpzX3JlcXVpcmVfXygxNDgpLF94ZmFfdGV4dD1fX3dfcGRmanNfcmVxdWlyZV9fKDE0OSk7ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHQsZSl7X2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheSh0KXtyZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5KHQpfHxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCl8fF9ub25JdGVyYWJsZVNwcmVhZCgpfWZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBfYXJyYXlMaWtlVG9BcnJheSh0KX1mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCl7X3JlZ2VuZXJhdG9yUnVudGltZT1mdW5jdGlvbigpe3JldHVybiB0fTt2YXIgdD17fSxlPU9iamVjdC5wcm90b3R5cGUscj1lLmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbih0LGUscil7dFtlXT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGE9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e2woe30sIiIpfWNhdGNoKHQpe2w9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXJ9fWZ1bmN0aW9uIHUodCxlLHIsaSl7dmFyIGE9ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBmP2U6ZixvPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpLHM9bmV3IHgoaXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp3KHQscixzKX0pLG99ZnVuY3Rpb24gYyh0LGUscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxyKX19Y2F0Y2godCl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6dH19fXQud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIGYoKXt9ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBwKCl7fXZhciB2PXt9O2wodixhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShFKFtdKSkpO20mJm0hPT1lJiZyLmNhbGwobSxhKSYmKHY9bSk7dmFyIGc9cC5wcm90b3R5cGU9Zi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiBiKHQpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7bCh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBfKHQsZSl7ZnVuY3Rpb24gaShuLGEsbyxzKXt2YXIgbD1jKHRbbl0sdCxhKTtpZigidGhyb3ciIT09bC50eXBlKXt2YXIgdT1sLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1fdHlwZW9mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP2UucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe2koIm5leHQiLHQsbyxzKX0pLChmdW5jdGlvbih0KXtpKCJ0aHJvdyIsdCxvLHMpfSkpOmUucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsbyh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gaSgidGhyb3ciLHQsbyxzKX0pKX1zKGwuYXJnKX12YXIgYTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsbil7aSh0LHIsZSxuKX0pKX1yZXR1cm4gYT1hP2EudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihpLGEpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1pKXRocm93IGE7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9aSxyLmFyZz1hOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9QShvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGw9Yyh0LGUscik7aWYoIm5vcm1hbCI9PT1sLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsbC5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpsLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWwudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1sLmFyZyl9fX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9ZS5tZXRob2Qsbj10Lml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIGUuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmdC5pdGVyYXRvci5yZXR1cm4mJihlLm1ldGhvZD0icmV0dXJuIixlLmFyZz12b2lkIDAsQSh0LGUpLCJ0aHJvdyI9PT1lLm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBpPWMobix0Lml0ZXJhdG9yLGUuYXJnKTtpZigidGhyb3ciPT09aS50eXBlKXJldHVybiBlLm1ldGhvZD0idGhyb3ciLGUuYXJnPWkuYXJnLGUuZGVsZWdhdGU9bnVsbCxoO3ZhciBhPWkuYXJnO3JldHVybiBhP2EuZG9uZT8oZVt0LnJlc3VsdE5hbWVdPWEudmFsdWUsZS5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PWUubWV0aG9kJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksZS5kZWxlZ2F0ZT1udWxsLGgpOmE6KGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxlLmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gayh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPSJub3JtYWwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiB4KHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSx0LmZvckVhY2goayx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBFKHQpe2lmKHQpe3ZhciBlPXRbYV07aWYoZSlyZXR1cm4gZS5jYWxsKHQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiBlKCl7Zm9yKDsrK248dC5sZW5ndGg7KWlmKHIuY2FsbCh0LG4pKXJldHVybiBlLnZhbHVlPXRbbl0sZS5kb25lPSExLGU7cmV0dXJuIGUudmFsdWU9dm9pZCAwLGUuZG9uZT0hMCxlfTtyZXR1cm4gaS5uZXh0PWl9fXJldHVybntuZXh0OlB9fWZ1bmN0aW9uIFAoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBkLnByb3RvdHlwZT1wLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLG4ocCwiY29uc3RydWN0b3IiLHt2YWx1ZTpkLGNvbmZpZ3VyYWJsZTohMH0pLGQuZGlzcGxheU5hbWU9bChwLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1kfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxwKToodC5fX3Byb3RvX189cCxsKHQscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxiKF8ucHJvdG90eXBlKSxsKF8ucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPV8sdC5hc3luYz1mdW5jdGlvbihlLHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPVByb21pc2UpO3ZhciBvPW5ldyBfKHUoZSxyLG4saSksYSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTpvLm5leHQoKX0pKX0sYihnKSxsKGcscywiR2VuZXJhdG9yIiksbChnLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbChnLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh0KSxyPVtdO2Zvcih2YXIgbiBpbiBlKXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gdCgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gdC52YWx1ZT1uLHQuZG9uZT0hMSx0fXJldHVybiB0LmRvbmU9ITAsdH19LHQudmFsdWVzPUUseC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOngscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChTKSwhdClmb3IodmFyIGUgaW4gdGhpcykidCI9PT1lLmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsZSkmJiFpc05hTigrZS5zbGljZSgxKSkmJih0aGlzW2VdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgZT10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9dCxlLm5leHQ9cixuJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksISFufWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxvPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGEsImNhdGNoTG9jIiksbD1yLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHMmJmwpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGk9dGhpcy50cnlFbnRyaWVzW25dO2lmKGkudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChpLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxpLmZpbmFsbHlMb2Mpe3ZhciBhPWk7YnJlYWt9fWEmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZhLnRyeUxvYzw9ZSYmZTw9YS5maW5hbGx5TG9jJiYoYT1udWxsKTt2YXIgbz1hP2EuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPXQsby5hcmc9ZSxhPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWEuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLGh9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksUyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBpPW4uYXJnO1Mocil9cmV0dXJuIGl9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpFKHQpLHJlc3VsdE5hbWU6ZSxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sdH1mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2sodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsX3RvUHJvcGVydHlLZXkobi5rZXkpLG4pfX1mdW5jdGlvbiBfY3JlYXRlQ2xhc3ModCxlLHIpe3JldHVybiBlJiZfZGVmaW5lUHJvcGVydGllcyh0LnByb3RvdHlwZSxlKSxyJiZfZGVmaW5lUHJvcGVydGllcyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCl7dmFyIGU9X3RvUHJpbWl0aXZlKHQsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09X3R5cGVvZihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBfdG9QcmltaXRpdmUodCxlKXtpZigib2JqZWN0IiE9PV90eXBlb2YodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09X3R5cGVvZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWU/U3RyaW5nOk51bWJlcikodCl9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModCxlLHIpe19jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHQsZSxyKXtyZXR1cm4gX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQsX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHQsZSl7cmV0dXJuIF9jbGFzc0FwcGx5RGVzY3JpcHRvckdldCh0LF9jbGFzc0V4dHJhY3RGaWVsZERlc2NyaXB0b3IodCxlLCJnZXQiKSl9ZnVuY3Rpb24gX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjU2V0KHQsZSxyLG4pe3JldHVybiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNBY2Nlc3ModCxlKSxfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3Iociwic2V0IiksX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQscixuKSxufWZ1bmN0aW9uIF9jbGFzc0FwcGx5RGVzY3JpcHRvclNldCh0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19ZnVuY3Rpb24gX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LGUscil7cmV0dXJuIF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0FjY2Vzcyh0LGUpLF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0ZpZWxkRGVzY3JpcHRvcihyLCJnZXQiKSxfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxyKX1mdW5jdGlvbiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3IodCxlKXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2UrIiBwcml2YXRlIHN0YXRpYyBmaWVsZCBiZWZvcmUgaXRzIGRlY2xhcmF0aW9uIil9ZnVuY3Rpb24gX2NsYXNzQ2hlY2tQcml2YXRlU3RhdGljQWNjZXNzKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX1mdW5jdGlvbiBfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfWZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcCh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKHQpe2FzeW5jR2VuZXJhdG9yU3RlcChhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YXN5bmNHZW5lcmF0b3JTdGVwKGEsbixpLG8scywidGhyb3ciLHQpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkodCxlKXtyZXR1cm4gX2FycmF5V2l0aEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5TGltaXQodCxlKXx8X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQsZSl8fF9ub25JdGVyYWJsZVJlc3QoKX1mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX1mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/X2FycmF5TGlrZVRvQXJyYXkodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXModCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH1mdW5jdGlvbiBfdHlwZW9mKHQpe3JldHVybiBfdHlwZW9mPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxfdHlwZW9mKHQpfXZhciBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU9NjU1MzYsUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUPTEwMCxEZWZhdWx0Q2FudmFzRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DYW52YXNGYWN0b3J5O2V4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9RGVmYXVsdENhbnZhc0ZhY3Rvcnk7dmFyIERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeTtleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk7dmFyIERlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxjcmVhdGVQREZOZXR3b3JrU3RyZWFtO2lmKGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxfaXNfbm9kZS5pc05vZGVKUyl7dmFyIF9yZXF1aXJlPV9fd19wZGZqc19yZXF1aXJlX18oMTUwKSxOb2RlQ2FudmFzRmFjdG9yeT1fcmVxdWlyZS5Ob2RlQ2FudmFzRmFjdG9yeSxOb2RlQ01hcFJlYWRlckZhY3Rvcnk9X3JlcXVpcmUuTm9kZUNNYXBSZWFkZXJGYWN0b3J5LE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fcmVxdWlyZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7ZXhwb3J0cy5EZWZhdWx0Q2FudmFzRmFjdG9yeT1EZWZhdWx0Q2FudmFzRmFjdG9yeT1Ob2RlQ2FudmFzRmFjdG9yeSxleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9Tm9kZUNNYXBSZWFkZXJGYWN0b3J5LGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnl9ZnVuY3Rpb24gc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkodCl7Y3JlYXRlUERGTmV0d29ya1N0cmVhbT10fWZ1bmN0aW9uIGdldERvY3VtZW50KHQpe3ZhciBlLHI9bmV3IFBERkRvY3VtZW50TG9hZGluZ1Rhc2s7aWYoInN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgVVJMKWU9e3VybDp0fTtlbHNlIGlmKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKHQpKWU9e2RhdGE6dH07ZWxzZSBpZih0IGluc3RhbmNlb2YgUERGRGF0YVJhbmdlVHJhbnNwb3J0KWU9e3JhbmdlOnR9O2Vsc2V7aWYoIm9iamVjdCIhPT1fdHlwZW9mKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgaW4gZ2V0RG9jdW1lbnQsIG5lZWQgZWl0aGVyIHN0cmluZywgVVJMLCBUeXBlZEFycmF5LCBvciBwYXJhbWV0ZXIgb2JqZWN0LiIpO2lmKCF0LnVybCYmIXQuZGF0YSYmIXQucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhcmFtZXRlciBvYmplY3Q6IG5lZWQgZWl0aGVyIC5kYXRhLCAucmFuZ2Ugb3IgLnVybCIpO2U9dH12YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9bnVsbCxhPW51bGw7Zm9yKHZhciBvIGluIGUpe3ZhciBzPWVbb107c3dpdGNoKG8pe2Nhc2UidXJsIjppZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl0cnl7bltvXT1uZXcgVVJMKHMsd2luZG93LmxvY2F0aW9uKS5ocmVmO2NvbnRpbnVlfWNhdGNoKHQpeygwLF91dGlsLndhcm4pKCdDYW5ub3QgY3JlYXRlIHZhbGlkIFVSTDogIicuY29uY2F0KHQsJyIuJykpfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBzfHxzIGluc3RhbmNlb2YgVVJMKXtuW29dPXMudG9TdHJpbmcoKTtjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIHVybCBkYXRhOiBlaXRoZXIgc3RyaW5nIG9yIFVSTC1vYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIHVybCBwcm9wZXJ0eS4iKTtjYXNlInJhbmdlIjppPXM7Y29udGludWU7Y2FzZSJ3b3JrZXIiOmE9cztjb250aW51ZTtjYXNlImRhdGEiOmlmKF9pc19ub2RlLmlzTm9kZUpTJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJ1ZmZlciYmcyBpbnN0YW5jZW9mIEJ1ZmZlciluW29dPW5ldyBVaW50OEFycmF5KHMpO2Vsc2V7aWYocyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpYnJlYWs7aWYoInN0cmluZyI9PXR5cGVvZiBzKW5bb109KDAsX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7ZWxzZSBpZigib2JqZWN0IiE9PV90eXBlb2Yocyl8fG51bGw9PT1zfHxpc05hTihzLmxlbmd0aCkpe2lmKCEoMCxfdXRpbC5pc0FycmF5QnVmZmVyKShzKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIGJpbmFyeSBkYXRhOiBlaXRoZXIgVHlwZWRBcnJheSwgc3RyaW5nLCBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgZGF0YSBwcm9wZXJ0eS4iKTtuW29dPW5ldyBVaW50OEFycmF5KHMpfWVsc2UgbltvXT1uZXcgVWludDhBcnJheShzKX1jb250aW51ZX1uW29dPXN9aWYobi5DTWFwUmVhZGVyRmFjdG9yeT1uLkNNYXBSZWFkZXJGYWN0b3J5fHxEZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnksbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1uLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5fHxEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnksbi5pZ25vcmVFcnJvcnM9ITAhPT1uLnN0b3BBdEVycm9ycyxuLmZvbnRFeHRyYVByb3BlcnRpZXM9ITA9PT1uLmZvbnRFeHRyYVByb3BlcnRpZXMsbi5wZGZCdWc9ITA9PT1uLnBkZkJ1ZyxuLmVuYWJsZVhmYT0hMD09PW4uZW5hYmxlWGZhLCghTnVtYmVyLmlzSW50ZWdlcihuLnJhbmdlQ2h1bmtTaXplKXx8bi5yYW5nZUNodW5rU2l6ZTwxKSYmKG4ucmFuZ2VDaHVua1NpemU9REVGQVVMVF9SQU5HRV9DSFVOS19TSVpFKSwoInN0cmluZyIhPXR5cGVvZiBuLmRvY0Jhc2VVcmx8fCgwLF9kaXNwbGF5X3V0aWxzLmlzRGF0YVNjaGVtZSkobi5kb2NCYXNlVXJsKSkmJihuLmRvY0Jhc2VVcmw9bnVsbCksKCFOdW1iZXIuaXNJbnRlZ2VyKG4ubWF4SW1hZ2VTaXplKXx8bi5tYXhJbWFnZVNpemU8LTEpJiYobi5tYXhJbWFnZVNpemU9LTEpLCJzdHJpbmciIT10eXBlb2Ygbi5jTWFwVXJsJiYobi5jTWFwVXJsPW51bGwpLCJzdHJpbmciIT10eXBlb2Ygbi5zdGFuZGFyZEZvbnREYXRhVXJsJiYobi5zdGFuZGFyZEZvbnREYXRhVXJsPW51bGwpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlV29ya2VyRmV0Y2gmJihuLnVzZVdvcmtlckZldGNoPW4uQ01hcFJlYWRlckZhY3Rvcnk9PT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeSYmbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT09PV9kaXNwbGF5X3V0aWxzLkRPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzRXZhbFN1cHBvcnRlZCYmKG4uaXNFdmFsU3VwcG9ydGVkPSEwKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkJiYobi5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD0hX2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUZvbnRGYWNlJiYobi5kaXNhYmxlRm9udEZhY2U9X2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlU3lzdGVtRm9udHMmJihuLnVzZVN5c3RlbUZvbnRzPSFfaXNfbm9kZS5pc05vZGVKUyYmIW4uZGlzYWJsZUZvbnRGYWNlKSwib2JqZWN0Ij09PV90eXBlb2Yobi5vd25lckRvY3VtZW50KSYmbnVsbCE9PW4ub3duZXJEb2N1bWVudHx8KG4ub3duZXJEb2N1bWVudD1nbG9iYWxUaGlzLmRvY3VtZW50KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVSYW5nZSYmKG4uZGlzYWJsZVJhbmdlPSExKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVTdHJlYW0mJihuLmRpc2FibGVTdHJlYW09ITEpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUF1dG9GZXRjaCYmKG4uZGlzYWJsZUF1dG9GZXRjaD0hMSksKDAsX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKG4udmVyYm9zaXR5KSwhYSl7dmFyIGw9e3ZlcmJvc2l0eTpuLnZlcmJvc2l0eSxwb3J0Ol93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnR9O2E9bC5wb3J0P1BERldvcmtlci5mcm9tUG9ydChsKTpuZXcgUERGV29ya2VyKGwpLHIuX3dvcmtlcj1hfXZhciB1PXIuZG9jSWQ7cmV0dXJuIGEucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHQ9X2ZldGNoRG9jdW1lbnQoYSxuLGksdSksZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dmFyIGU7aT9lPW5ldyBfdHJhbnNwb3J0X3N0cmVhbS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtsZW5ndGg6bi5sZW5ndGgsaW5pdGlhbERhdGE6bi5pbml0aWFsRGF0YSxwcm9ncmVzc2l2ZURvbmU6bi5wcm9ncmVzc2l2ZURvbmUsY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6bi5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSxkaXNhYmxlUmFuZ2U6bi5kaXNhYmxlUmFuZ2UsZGlzYWJsZVN0cmVhbTpuLmRpc2FibGVTdHJlYW19LGkpOm4uZGF0YXx8KGU9Y3JlYXRlUERGTmV0d29ya1N0cmVhbSh7dXJsOm4udXJsLGxlbmd0aDpuLmxlbmd0aCxodHRwSGVhZGVyczpuLmh0dHBIZWFkZXJzLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFscyxyYW5nZUNodW5rU2l6ZTpuLnJhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpuLmRpc2FibGVSYW5nZSxkaXNhYmxlU3RyZWFtOm4uZGlzYWJsZVN0cmVhbX0pKSx0KGUpfSkpO3JldHVybiBQcm9taXNlLmFsbChbdCxlXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9X3NsaWNlZFRvQXJyYXkodCwyKSxpPWVbMF0sbz1lWzFdO2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHM9bmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIodSxpLGEucG9ydCksbD1uZXcgV29ya2VyVHJhbnNwb3J0KHMscixvLG4pO3IuX3RyYW5zcG9ydD1sLHMuc2VuZCgiUmVhZHkiLG51bGwpfSkpfSkpLmNhdGNoKHIuX2NhcGFiaWxpdHkucmVqZWN0KSxyfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50KHQsZSxyLG4pe3JldHVybiBfZmV0Y2hEb2N1bWVudDIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50Migpe3JldHVybihfZmV0Y2hEb2N1bWVudDI9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighZS5kZXN0cm95ZWQpe3QubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQiKTtjYXNlIDI6cmV0dXJuIG4mJihyLmxlbmd0aD1uLmxlbmd0aCxyLmluaXRpYWxEYXRhPW4uaW5pdGlhbERhdGEsci5wcm9ncmVzc2l2ZURvbmU9bi5wcm9ncmVzc2l2ZURvbmUsci5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZT1uLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lKSx0Lm5leHQ9NSxlLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RG9jUmVxdWVzdCIse2RvY0lkOmksYXBpVmVyc2lvbjoiMy4yLjAiLGRhdGE6ci5kYXRhLHBhc3N3b3JkOnIucGFzc3dvcmQsZGlzYWJsZUF1dG9GZXRjaDpyLmRpc2FibGVBdXRvRmV0Y2gscmFuZ2VDaHVua1NpemU6ci5yYW5nZUNodW5rU2l6ZSxsZW5ndGg6ci5sZW5ndGgsZG9jQmFzZVVybDpyLmRvY0Jhc2VVcmwsZW5hYmxlWGZhOnIuZW5hYmxlWGZhLGV2YWx1YXRvck9wdGlvbnM6e21heEltYWdlU2l6ZTpyLm1heEltYWdlU2l6ZSxkaXNhYmxlRm9udEZhY2U6ci5kaXNhYmxlRm9udEZhY2UsaWdub3JlRXJyb3JzOnIuaWdub3JlRXJyb3JzLGlzRXZhbFN1cHBvcnRlZDpyLmlzRXZhbFN1cHBvcnRlZCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpyLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGZvbnRFeHRyYVByb3BlcnRpZXM6ci5mb250RXh0cmFQcm9wZXJ0aWVzLHVzZVN5c3RlbUZvbnRzOnIudXNlU3lzdGVtRm9udHMsY01hcFVybDpyLnVzZVdvcmtlckZldGNoP3IuY01hcFVybDpudWxsLHN0YW5kYXJkRm9udERhdGFVcmw6ci51c2VXb3JrZXJGZXRjaD9yLnN0YW5kYXJkRm9udERhdGFVcmw6bnVsbH19KTtjYXNlIDU6aWYoYT10LnNlbnQsci5kYXRhJiYoci5kYXRhPW51bGwpLCFlLmRlc3Ryb3llZCl7dC5uZXh0PTk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpO2Nhc2UgOTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsYSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBfb25VbnN1cHBvcnRlZEZlYXR1cmU9bmV3IFdlYWtNYXAsUERGRG9jdW1lbnRMb2FkaW5nVGFzaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5fY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXI9bnVsbCx0aGlzLmRvY0lkPSJkIi5jb25jYXQoKF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNTZXQodCx0LF9kb2NJZCwoZT1fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfZG9jSWQpLHI9ZSsrLGUpKSxyKSksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5vblBhc3N3b3JkPW51bGwsdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJvblVuc3VwcG9ydGVkRmVhdHVyZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9vblVuc3VwcG9ydGVkRmVhdHVyZSl9LHNldDpmdW5jdGlvbih0KXsoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50TG9hZGluZ1Rhc2sgb25VbnN1cHBvcnRlZEZlYXR1cmUgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHQpfX0se2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOihlPV9hc3luY1RvR2VuZXJhdG9yKF9yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGU7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5kZXN0cm95ZWQ9ITAsdC5uZXh0PTMsbnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZGVzdHJveSgpO2Nhc2UgMzp0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXImJih0aGlzLl93b3JrZXIuZGVzdHJveSgpLHRoaXMuX3dvcmtlcj1udWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCk7ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPVBERkRvY3VtZW50TG9hZGluZ1Rhc2s7dmFyIF9kb2NJZD17d3JpdGFibGU6ITAsdmFsdWU6MH0sUERGRGF0YVJhbmdlVHJhbnNwb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmxlbmd0aD1lLHRoaXMuaW5pdGlhbERhdGE9cix0aGlzLnByb2dyZXNzaXZlRG9uZT1uLHRoaXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9aSx0aGlzLl9yYW5nZUxpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc0xpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnM9W10sdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzPVtdLHRoaXMuX3JlYWR5Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFkZFJhbmdlTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2godCl9fSx7a2V5OiJhZGRQcm9ncmVzc0xpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycy5wdXNoKHQpfX0se2tleToib25EYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9yYW5nZUxpc3RlbmVycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KSgwLHIudmFsdWUpKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25EYXRhUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciBuLGk9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoci5fcHJvZ3Jlc3NMaXN0ZW5lcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOykoMCxuLnZhbHVlKSh0LGUpfWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX0pKX19LHtrZXk6Im9uRGF0YVByb2dyZXNzaXZlUmVhZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciByLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspKDAsci52YWx1ZSkodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fSkpfX0se2tleToib25EYXRhUHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXt2YXIgZSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHQuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KSgwLGUudmFsdWUpKCl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fSkpfX0se2tleToidHJhbnNwb3J0UmVhZHkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6InJlcXVlc3REYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsX3V0aWwudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgUERGRGF0YVJhbmdlVHJhbnNwb3J0LnJlcXVlc3REYXRhUmFuZ2UiKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe319XSksdH0oKTtleHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydD1QREZEYXRhUmFuZ2VUcmFuc3BvcnQ7dmFyIFBERkRvY3VtZW50UHJveHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7X2NsYXNzQ2FsbENoZWNrKHRoaXMsdCksdGhpcy5fcGRmSW5mbz1lLHRoaXMuX3RyYW5zcG9ydD1yfXJldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToiYW5ub3RhdGlvblN0b3JhZ2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuYW5ub3RhdGlvblN0b3JhZ2V9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BkZkluZm8ubnVtUGFnZXN9fSx7a2V5OiJmaW5nZXJwcmludHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wZGZJbmZvLmZpbmdlcnByaW50c319LHtrZXk6InN0YXRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50UHJveHkgc3RhdHMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5fdHJhbnNwb3J0LnN0YXRzfX0se2tleToiaXNQdXJlWGZhIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImlzUHVyZVhmYSIsISF0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpfX0se2tleToiYWxsWGZhSHRtbCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZSh0KX19LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSW5kZXgodCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKX19LHtrZXk6ImdldERlc3RpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERlc3RpbmF0aW9uKHQpfX0se2tleToiZ2V0UGFnZUxhYmVscyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKX19LHtrZXk6ImdldFBhZ2VMYXlvdXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlTGF5b3V0KCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCl9fSx7a2V5OiJnZXRWaWV3ZXJQcmVmZXJlbmNlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFZpZXdlclByZWZlcmVuY2VzKCl9fSx7a2V5OiJnZXRPcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3BlbkFjdGlvbigpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpfX0se2tleToiZ2V0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERvY0pTQWN0aW9ucygpfX0se2tleToiZ2V0T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE91dGxpbmUoKX19LHtrZXk6ImdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpfX0se2tleToiZ2V0UGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQZXJtaXNzaW9ucygpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNZXRhZGF0YSgpfX0se2tleToiZ2V0TWFya0luZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNYXJrSW5mbygpfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKX19LHtrZXk6InNhdmVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnNhdmVEb2N1bWVudCgpfX0se2tleToiZ2V0RG93bmxvYWRJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKHR8fHRoaXMuaXNQdXJlWGZhKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGluZ1Rhc2suZGVzdHJveSgpfX0se2tleToibG9hZGluZ1BhcmFtcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5sb2FkaW5nUGFyYW1zfX0se2tleToibG9hZGluZ1Rhc2siLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1Rhc2t9fSx7a2V5OiJnZXRGaWVsZE9iamVjdHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRGaWVsZE9iamVjdHMoKX19LHtrZXk6Imhhc0pTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lmhhc0pTQWN0aW9ucygpfX0se2tleToiZ2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldENhbGN1bGF0aW9uT3JkZXJJZHMoKX19XSksdH0oKTtleHBvcnRzLlBERkRvY3VtZW50UHJveHk9UERGRG9jdW1lbnRQcm94eTt2YXIgUERGUGFnZVByb3h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSYmYXJndW1lbnRzWzRdO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLHRoaXMuX3BhZ2VJbmRleD1lLHRoaXMuX3BhZ2VJbmZvPXIsdGhpcy5fb3duZXJEb2N1bWVudD1pLHRoaXMuX3RyYW5zcG9ydD1uLHRoaXMuX3N0YXRzPWE/bmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcjpudWxsLHRoaXMuX3BkZkJ1Zz1hLHRoaXMuY29tbW9uT2Jqcz1uLmNvbW1vbk9ianMsdGhpcy5vYmpzPW5ldyBQREZPYmplY3RzLHRoaXMuX2JpdG1hcHM9bmV3IFNldCx0aGlzLmNsZWFudXBBZnRlclJlbmRlcj0hMSx0aGlzLnBlbmRpbmdDbGVhbnVwPSExLHRoaXMuX2ludGVudFN0YXRlcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExfXZhciBlO3JldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToicGFnZU51bWJlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmRleCsxfX0se2tleToicm90YXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucm90YXRlfX0se2tleToicmVmIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucmVmfX0se2tleToidXNlclVuaXQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdH19LHtrZXk6InZpZXciLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby52aWV3fX0se2tleToiZ2V0Vmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGU9dC5zY2FsZSxyPXQucm90YXRpb24sbj12b2lkIDA9PT1yP3RoaXMucm90YXRlOnIsaT10Lm9mZnNldFgsYT12b2lkIDA9PT1pPzA6aSxvPXQub2Zmc2V0WSxzPXZvaWQgMD09PW8/MDpvLGw9dC5kb250RmxpcCx1PXZvaWQgMCE9PWwmJmw7cmV0dXJuIG5ldyBfZGlzcGxheV91dGlscy5QYWdlVmlld3BvcnQoe3ZpZXdCb3g6dGhpcy52aWV3LHNjYWxlOmUscm90YXRpb246bixvZmZzZXRYOmEsb2Zmc2V0WTpzLGRvbnRGbGlwOnV9KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLmludGVudCxlPXZvaWQgMD09PXQ/ImRpc3BsYXkiOnQscj10aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KGUpO3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0QW5ub3RhdGlvbnModGhpcy5fcGFnZUluZGV4LHIucmVuZGVyaW5nSW50ZW50KX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VKU0FjdGlvbnModGhpcy5fcGFnZUluZGV4KX19LHtrZXk6ImlzUHVyZVhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJpc1B1cmVYZmEiLCEhdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhKX19LHtrZXk6ImdldFhmYSIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZTtyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIiwobnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2hpbGRyZW5bdGhpcy5fcGFnZUluZGV4XSl8fG51bGwpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMsaT10LmNhbnZhc0NvbnRleHQsYT10LnZpZXdwb3J0LG89dC5pbnRlbnQscz12b2lkIDA9PT1vPyJkaXNwbGF5IjpvLGw9dC5hbm5vdGF0aW9uTW9kZSx1PXZvaWQgMD09PWw/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmwsYz10LnRyYW5zZm9ybSxoPXZvaWQgMD09PWM/bnVsbDpjLGY9dC5jYW52YXNGYWN0b3J5LGQ9dm9pZCAwPT09Zj9udWxsOmYscD10LmJhY2tncm91bmQsdj12b2lkIDA9PT1wP251bGw6cCx5PXQub3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSxtPXZvaWQgMD09PXk/bnVsbDp5LGc9dC5hbm5vdGF0aW9uQ2FudmFzTWFwLGI9dm9pZCAwPT09Zz9udWxsOmcsXz10LnBhZ2VDb2xvcnMsdz12b2lkIDA9PT1fP251bGw6XyxBPXQucHJpbnRBbm5vdGF0aW9uU3RvcmFnZSxrPXZvaWQgMD09PUE/bnVsbDpBO251bGw9PT0oZT10aGlzLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiT3ZlcmFsbCIpO3ZhciBTPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQocyx1LGspO3RoaXMucGVuZGluZ0NsZWFudXA9ITEsbXx8KG09dGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpKTt2YXIgeD10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KFMuY2FjaGVLZXkpO3h8fCh4PU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5faW50ZW50U3RhdGVzLnNldChTLmNhY2hlS2V5LHgpKSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQmJihjbGVhclRpbWVvdXQoeC5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCk7dmFyIEUsUD1kfHxuZXcgRGVmYXVsdENhbnZhc0ZhY3Rvcnkoe293bmVyRG9jdW1lbnQ6dGhpcy5fb3duZXJEb2N1bWVudH0pLFQ9ISEoUy5yZW5kZXJpbmdJbnRlbnQmX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7eC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5fHwoeC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShFPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09RXx8RS50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KFMpKTt2YXIgQz1mdW5jdGlvbih0KXt2YXIgZSxyO3gucmVuZGVyVGFza3MuZGVsZXRlKE8pLChuLmNsZWFudXBBZnRlclJlbmRlcnx8VCkmJihuLnBlbmRpbmdDbGVhbnVwPSEwKSxuLl90cnlDbGVhbnVwKCksdD8oTy5jYXBhYmlsaXR5LnJlamVjdCh0KSxuLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6eCxyZWFzb246dCBpbnN0YW5jZW9mIEVycm9yP3Q6bmV3IEVycm9yKHQpfSkpOk8uY2FwYWJpbGl0eS5yZXNvbHZlKCksbnVsbD09PShlPW4uX3N0YXRzKXx8dm9pZCAwPT09ZXx8ZS50aW1lRW5kKCJSZW5kZXJpbmciKSxudWxsPT09KHI9bi5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIk92ZXJhbGwiKX0sTz1uZXcgSW50ZXJuYWxSZW5kZXJUYXNrKHtjYWxsYmFjazpDLHBhcmFtczp7Y2FudmFzQ29udGV4dDppLHZpZXdwb3J0OmEsdHJhbnNmb3JtOmgsYmFja2dyb3VuZDp2fSxvYmpzOnRoaXMub2Jqcyxjb21tb25PYmpzOnRoaXMuY29tbW9uT2Jqcyxhbm5vdGF0aW9uQ2FudmFzTWFwOmIsb3BlcmF0b3JMaXN0Ongub3BlcmF0b3JMaXN0LHBhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsY2FudmFzRmFjdG9yeTpQLHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZTohVCxwZGZCdWc6dGhpcy5fcGRmQnVnLHBhZ2VDb2xvcnM6d30pOygocj14KS5yZW5kZXJUYXNrc3x8KHIucmVuZGVyVGFza3M9bmV3IFNldCkpLmFkZChPKTt2YXIgRj1PLnRhc2s7cmV0dXJuIFByb21pc2UuYWxsKFt4LmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZSxtXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGUscj1fc2xpY2VkVG9BcnJheSh0LDIpLGk9clswXSxhPXJbMV07bi5wZW5kaW5nQ2xlYW51cD9DKCk6KG51bGw9PT0oZT1uLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiUmVuZGVyaW5nIiksTy5pbml0aWFsaXplR3JhcGhpY3Moe3RyYW5zcGFyZW5jeTppLG9wdGlvbmFsQ29udGVudENvbmZpZzphfSksTy5vcGVyYXRvckxpc3RDaGFuZ2VkKCkpfSkpLmNhdGNoKEMpLEZ9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGk9bi5pbnRlbnQsYT12b2lkIDA9PT1pPyJkaXNwbGF5IjppLG89bi5hbm5vdGF0aW9uTW9kZSxzPXZvaWQgMD09PW8/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOm8sbD1uLnByaW50QW5ub3RhdGlvblN0b3JhZ2UsdT12b2lkIDA9PT1sP251bGw6bCxjPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQoYSxzLHUsITApLGg9dGhpcy5faW50ZW50U3RhdGVzLmdldChjLmNhY2hlS2V5KTtyZXR1cm4gaHx8KGg9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbnRlbnRTdGF0ZXMuc2V0KGMuY2FjaGVLZXksaCkpLGgub3BMaXN0UmVhZENhcGFiaWxpdHl8fCgodD1PYmplY3QuY3JlYXRlKG51bGwpKS5vcGVyYXRvckxpc3RDaGFuZ2VkPWZ1bmN0aW9uKCl7aC5vcGVyYXRvckxpc3QubGFzdENodW5rJiYoaC5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKGgub3BlcmF0b3JMaXN0KSxoLnJlbmRlclRhc2tzLmRlbGV0ZSh0KSl9LGgub3BMaXN0UmVhZENhcGFiaWxpdHk9KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksKChlPWgpLnJlbmRlclRhc2tzfHwoZS5yZW5kZXJUYXNrcz1uZXcgU2V0KSkuYWRkKHQpLGgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShyPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09cnx8ci50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KGMpKSxoLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJzdHJlYW1UZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10LmRpc2FibGVDb21iaW5lVGV4dEl0ZW1zLHI9dm9pZCAwIT09ZSYmZSxuPXQuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT12b2lkIDAhPT1uJiZuO3JldHVybiB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFRleHRDb250ZW50Iix7cGFnZUluZGV4OnRoaXMuX3BhZ2VJbmRleCxjb21iaW5lVGV4dEl0ZW1zOiEwIT09cixpbmNsdWRlTWFya2VkQ29udGVudDohMD09PWl9LHtoaWdoV2F0ZXJNYXJrOjEwMCxzaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lml0ZW1zLmxlbmd0aH19KX19LHtrZXk6ImdldFRleHRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZih0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpcmV0dXJuIHRoaXMuZ2V0WGZhKCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIF94ZmFfdGV4dC5YZmFUZXh0LnRleHRDb250ZW50KHQpfSkpO3ZhciBlPXRoaXMuc3RyZWFtVGV4dENvbnRlbnQodCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZ2V0UmVhZGVyKCksaT17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9OyFmdW5jdGlvbiBlKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24ocil7dmFyIG4sYT1yLnZhbHVlO3IuZG9uZT90KGkpOihPYmplY3QuYXNzaWduKGkuc3R5bGVzLGEuc3R5bGVzKSwobj1pLml0ZW1zKS5wdXNoLmFwcGx5KG4sX3RvQ29uc3VtYWJsZUFycmF5KGEuaXRlbXMpKSxlKCkpfSkscil9KCl9KSl9fSx7a2V5OiJnZXRTdHJ1Y3RUcmVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0U3RydWN0VHJlZSh0aGlzLl9wYWdlSW5kZXgpfX0se2tleToiX2Rlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITA7dmFyIHQsZT1bXSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcy52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO2lmKHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtpbnRlbnRTdGF0ZTpuLHJlYXNvbjpuZXcgRXJyb3IoIlBhZ2Ugd2FzIGRlc3Ryb3llZC4iKSxmb3JjZTohMH0pLCFuLm9wTGlzdFJlYWRDYXBhYmlsaXR5KXt2YXIgaSxhPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG4ucmVuZGVyVGFza3MpO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOyl7dmFyIG89aS52YWx1ZTtlLnB1c2goby5jb21wbGV0ZWQpLG8uY2FuY2VsKCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMub2Jqcy5jbGVhcigpO3ZhciBzLGw9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXMudmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtsLmUodCl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsUHJvbWlzZS5hbGwoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGVuZGluZ0NsZWFudXA9ITAsdGhpcy5fdHJ5Q2xlYW51cCh0KX19LHtrZXk6Il90cnlDbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMucGVuZGluZ0NsZWFudXApcmV0dXJuITE7dmFyIGUscj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9pbnRlbnRTdGF0ZXMudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPW4ucmVuZGVyVGFza3MsYT1uLm9wZXJhdG9yTGlzdDtpZihpLnNpemU+MHx8IWEubGFzdENodW5rKXJldHVybiExfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9pbnRlbnRTdGF0ZXMuY2xlYXIoKSx0aGlzLm9ianMuY2xlYXIoKSx0JiZ0aGlzLl9zdGF0cyYmKHRoaXMuX3N0YXRzPW5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIpO3ZhciBvLHM9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KW8udmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsITB9fSx7a2V5OiJfc3RhcnRSZW5kZXJQYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByLG4saT10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGUpO2kmJihudWxsPT09KHI9dGhpcy5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIlBhZ2UgUmVxdWVzdCIpLG51bGw9PT0obj1pLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpfHx2b2lkIDA9PT1ufHxuLnJlc29sdmUodCkpfX0se2tleToiX3JlbmRlclBhZ2VDaHVuayIsdmFsdWU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZS5vcGVyYXRvckxpc3QuZm5BcnJheS5wdXNoKHQuZm5BcnJheVtyXSksZS5vcGVyYXRvckxpc3QuYXJnc0FycmF5LnB1c2godC5hcmdzQXJyYXlbcl0pO2Uub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz10Lmxhc3RDaHVuayxlLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cz10LnNlcGFyYXRlQW5ub3RzO3ZhciBpLGE9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5yZW5kZXJUYXNrcyk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUub3BlcmF0b3JMaXN0Q2hhbmdlZCgpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXQubGFzdENodW5rJiZ0aGlzLl90cnlDbGVhbnVwKCl9fSx7a2V5OiJfcHVtcE9wZXJhdG9yTGlzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucmVuZGVyaW5nSW50ZW50LG49dC5jYWNoZUtleSxpPXQuYW5ub3RhdGlvblN0b3JhZ2VNYXAsYT10aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldE9wZXJhdG9yTGlzdCIse3BhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsaW50ZW50OnIsY2FjaGVLZXk6bixhbm5vdGF0aW9uU3RvcmFnZTppfSkuZ2V0UmVhZGVyKCksbz10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KG4pO28uc3RyZWFtUmVhZGVyPWEsZnVuY3Rpb24gdCgpe2EucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBuPXIudmFsdWU7ci5kb25lP28uc3RyZWFtUmVhZGVyPW51bGw6ZS5fdHJhbnNwb3J0LmRlc3Ryb3llZHx8KGUuX3JlbmRlclBhZ2VDaHVuayhuLG8pLHQoKSl9KSwoZnVuY3Rpb24odCl7aWYoby5zdHJlYW1SZWFkZXI9bnVsbCwhZS5fdHJhbnNwb3J0LmRlc3Ryb3llZCl7aWYoby5vcGVyYXRvckxpc3Qpe28ub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz0hMDt2YXIgcixuPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8ucmVuZGVyVGFza3MpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLm9wZXJhdG9yTGlzdENoYW5nZWQoKX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLl90cnlDbGVhbnVwKCl9aWYoby5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KW8uZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QodCk7ZWxzZXtpZighby5vcExpc3RSZWFkQ2FwYWJpbGl0eSl0aHJvdyB0O28ub3BMaXN0UmVhZENhcGFiaWxpdHkucmVqZWN0KHQpfX19KSl9KCl9fSx7a2V5OiJfYWJvcnRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10LmludGVudFN0YXRlLG49dC5yZWFzb24saT10LmZvcmNlLGE9dm9pZCAwIT09aSYmaTtpZihyLnN0cmVhbVJlYWRlcil7aWYoci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHIuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCksci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0PW51bGwpLCFhKXtpZihyLnJlbmRlclRhc2tzLnNpemU+MClyZXR1cm47aWYobiBpbnN0YW5jZW9mIF9kaXNwbGF5X3V0aWxzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbil7dmFyIG89UkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUO3JldHVybiBuLmV4dHJhRGVsYXk+MCYmbi5leHRyYURlbGF5PDFlMyYmKG8rPW4uZXh0cmFEZWxheSksdm9pZChyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCxlLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6cixyZWFzb246bixmb3JjZTohMH0pfSksbykpfX1pZihyLnN0cmVhbVJlYWRlci5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKG4ubWVzc2FnZSkpLmNhdGNoKChmdW5jdGlvbigpe30pKSxyLnN0cmVhbVJlYWRlcj1udWxsLCF0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKXt2YXIgcyxsPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgdT1fc2xpY2VkVG9BcnJheShzLnZhbHVlLDIpLGM9dVswXTtpZih1WzFdPT09cil7dGhpcy5faW50ZW50U3RhdGVzLmRlbGV0ZShjKTticmVha319fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfXRoaXMuY2xlYW51cCgpfX19fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRzfX1dKSx0fSgpO2V4cG9ydHMuUERGUGFnZVByb3h5PVBERlBhZ2VQcm94eTt2YXIgX2xpc3RlbmVycz1uZXcgV2Vha01hcCxfZGVmZXJyZWQ9bmV3IFdlYWtNYXAsTG9vcGJhY2tQb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2xpc3RlbmVycyx7d3JpdGFibGU6ITAsdmFsdWU6W119KSxfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLF9kZWZlcnJlZCx7d3JpdGFibGU6ITAsdmFsdWU6UHJvbWlzZS5yZXNvbHZlKCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6InBvc3RNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj17ZGF0YTpzdHJ1Y3R1cmVkQ2xvbmUodCxlKX07X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2RlZmVycmVkKS50aGVuKChmdW5jdGlvbigpe3ZhciB0LGU9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHIsX2xpc3RlbmVycykpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmNhbGwocixuKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19KSl9fSx7a2V5OiJhZGRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLnB1c2goZSl9fSx7a2V5OiJyZW1vdmVFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLmluZGV4T2YoZSk7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykuc3BsaWNlKHIsMSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykubGVuZ3RoPTB9fV0pLHR9KCk7ZXhwb3J0cy5Mb29wYmFja1BvcnQ9TG9vcGJhY2tQb3J0O3ZhciBQREZXb3JrZXJVdGlsPXtpc1dvcmtlckRpc2FibGVkOiExLGZhbGxiYWNrV29ya2VyU3JjOm51bGwsZmFrZVdvcmtlcklkOjB9O2lmKGV4cG9ydHMuUERGV29ya2VyVXRpbD1QREZXb3JrZXJVdGlsLF9pc19ub2RlLmlzTm9kZUpTJiYiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSlQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITAsUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz0iLi9wZGYud29ya2VyLmpzIjtlbHNlIGlmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQ/InVuZGVmaW5lZCI6X3R5cGVvZihkb2N1bWVudCkpKXt2YXIgX2RvY3VtZW50LF9kb2N1bWVudCRjdXJyZW50U2NyaSxwZGZqc0ZpbGVQYXRoPW51bGw9PT0oX2RvY3VtZW50PWRvY3VtZW50KXx8dm9pZCAwPT09X2RvY3VtZW50fHxudWxsPT09KF9kb2N1bWVudCRjdXJyZW50U2NyaT1fZG9jdW1lbnQuY3VycmVudFNjcmlwdCl8fHZvaWQgMD09PV9kb2N1bWVudCRjdXJyZW50U2NyaT92b2lkIDA6X2RvY3VtZW50JGN1cnJlbnRTY3JpLnNyYztwZGZqc0ZpbGVQYXRoJiYoUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz1wZGZqc0ZpbGVQYXRoLnJlcGxhY2UoLyhcLig/Om1pblwuKT9qcykoXD8uKik/JC9pLCIud29ya2VyJDEkMiIpKX1QREZXb3JrZXJVdGlsLmlzU2FtZU9yaWdpbj1mdW5jdGlvbih0LGUpe3ZhciByO3RyeXtpZighKHI9bmV3IFVSTCh0KSkub3JpZ2lufHwibnVsbCI9PT1yLm9yaWdpbilyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX12YXIgbj1uZXcgVVJMKGUscik7cmV0dXJuIHIub3JpZ2luPT09bi5vcmlnaW59LFBERldvcmtlclV0aWwuY3JlYXRlQ0ROV3JhcHBlcj1mdW5jdGlvbih0KXt2YXIgZT0naW1wb3J0U2NyaXB0cygiJy5jb25jYXQodCwnIik7Jyk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2VdKSl9O3ZhciBQREZXb3JrZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQREZXb3JrZXIoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10Lm5hbWUscj12b2lkIDA9PT1lP251bGw6ZSxuPXQucG9ydCxpPXZvaWQgMD09PW4/bnVsbDpuLGE9dC52ZXJib3NpdHksbz12b2lkIDA9PT1hPygwLF91dGlsLmdldFZlcmJvc2l0eUxldmVsKSgpOmE7aWYoX2NsYXNzQ2FsbENoZWNrKHRoaXMsUERGV29ya2VyKSxpJiZfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KFBERldvcmtlcixQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXMoaSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgUERGV29ya2VyIHBlciBwb3J0LiIpO2lmKHRoaXMubmFtZT1yLHRoaXMuZGVzdHJveWVkPSExLHRoaXMudmVyYm9zaXR5PW8sdGhpcy5fcmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl93ZWJXb3JrZXI9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsLGkpcmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoUERGV29ya2VyLFBERldvcmtlcixfd29ya2VyUG9ydHMpLnNldChpLHRoaXMpLHZvaWQgdGhpcy5faW5pdGlhbGl6ZUZyb21Qb3J0KGkpO3RoaXMuX2luaXRpYWxpemUoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKFBERldvcmtlcixbe2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToicG9ydCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcnR9fSx7a2V5OiJtZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2VIYW5kbGVyfX0se2tleToiX2luaXRpYWxpemVGcm9tUG9ydCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fcG9ydD10LHRoaXMuX21lc3NhZ2VIYW5kbGVyPW5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKCJtYWluIiwid29ya2VyIix0KSx0aGlzLl9tZXNzYWdlSGFuZGxlci5vbigicmVhZHkiLChmdW5jdGlvbigpe30pKSx0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpLHRoaXMuX21lc3NhZ2VIYW5kbGVyLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0aGlzLnZlcmJvc2l0eX0pfX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighUERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkJiYhUERGV29ya2VyLl9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIpe3ZhciBlPVBERldvcmtlci53b3JrZXJTcmM7dHJ5e1BERldvcmtlclV0aWwuaXNTYW1lT3JpZ2luKHdpbmRvdy5sb2NhdGlvbi5ocmVmLGUpfHwoZT1QREZXb3JrZXJVdGlsLmNyZWF0ZUNETldyYXBwZXIobmV3IFVSTChlLHdpbmRvdy5sb2NhdGlvbikuaHJlZikpO3ZhciByPW5ldyBXb3JrZXIoZSksbj1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcigibWFpbiIsIndvcmtlciIsciksaT1mdW5jdGlvbigpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4uZGVzdHJveSgpLHIudGVybWluYXRlKCksdC5kZXN0cm95ZWQ/dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpOnQuX3NldHVwRmFrZVdvcmtlcigpfSxhPWZ1bmN0aW9uKCl7dC5fd2ViV29ya2VyfHxpKCl9O3IuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4ub24oInRlc3QiLChmdW5jdGlvbihlKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZD9pKCk6ZT8odC5fbWVzc2FnZUhhbmRsZXI9bix0Ll9wb3J0PXIsdC5fd2ViV29ya2VyPXIsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxuLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pKToodC5fc2V0dXBGYWtlV29ya2VyKCksbi5kZXN0cm95KCksci50ZXJtaW5hdGUoKSl9KSksbi5vbigicmVhZHkiLChmdW5jdGlvbihlKXtpZihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZClpKCk7ZWxzZSB0cnl7bygpfWNhdGNoKGUpe3QuX3NldHVwRmFrZVdvcmtlcigpfX0pKTt2YXIgbz1mdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5O24uc2VuZCgidGVzdCIsdCxbdC5idWZmZXJdKX07cmV0dXJuIHZvaWQgbygpfWNhdGNoKHQpeygwLF91dGlsLmluZm8pKCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLiIpfX10aGlzLl9zZXR1cEZha2VXb3JrZXIoKX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWR8fCgoMCxfdXRpbC53YXJuKSgiU2V0dGluZyB1cCBmYWtlIHdvcmtlci4iKSxQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITApLFBERldvcmtlci5fc2V0dXBGYWtlV29ya2VyR2xvYmFsLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHQuZGVzdHJveWVkKXQuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTtlbHNle3ZhciByPW5ldyBMb29wYmFja1BvcnQ7dC5fcG9ydD1yO3ZhciBuPSJmYWtlIi5jb25jYXQoUERGV29ya2VyVXRpbC5mYWtlV29ya2VySWQrKyksaT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuKyJfd29ya2VyIixuLHIpO2Uuc2V0dXAoaSxyKTt2YXIgYT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuLG4rIl93b3JrZXIiLHIpO3QuX21lc3NhZ2VIYW5kbGVyPWEsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxhLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoJ1NldHRpbmcgdXAgZmFrZSB3b3JrZXIgZmFpbGVkOiAiJy5jb25jYXQoZS5tZXNzYWdlLCciLicpKSl9KSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3dlYldvcmtlciYmKHRoaXMuX3dlYldvcmtlci50ZXJtaW5hdGUoKSx0aGlzLl93ZWJXb3JrZXI9bnVsbCksX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldChQREZXb3JrZXIsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZGVsZXRlKHRoaXMuX3BvcnQpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlciYmKHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKSx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsKX19XSxbe2tleToiZnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG51bGw9PXR8fCF0LnBvcnQpdGhyb3cgbmV3IEVycm9yKCJQREZXb3JrZXIuZnJvbVBvcnQgLSBpbnZhbGlkIG1ldGhvZCBzaWduYXR1cmUuIik7cmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodGhpcyxQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXModC5wb3J0KT9fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHRoaXMsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZ2V0KHQucG9ydCk6bmV3IFBERldvcmtlcih0KX19LHtrZXk6IndvcmtlclNyYyIsZ2V0OmZ1bmN0aW9uKCl7aWYoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKXJldHVybiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7aWYobnVsbCE9PVBERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmMpcmV0dXJuIF9pc19ub2RlLmlzTm9kZUpTfHwoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgnTm8gIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjIiBzcGVjaWZpZWQuJyksUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYzt0aHJvdyBuZXcgRXJyb3IoJ05vICJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyIgc3BlY2lmaWVkLicpfX0se2tleToiX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3ZhciB0O3JldHVybihudWxsPT09KHQ9Z2xvYmFsVGhpcy5wZGZqc1dvcmtlcil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuV29ya2VyTWVzc2FnZUhhbmRsZXIpfHxudWxsfWNhdGNoKHQpe3JldHVybiBudWxsfX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXJHbG9iYWwiLGdldDpmdW5jdGlvbiBnZXQoKXt2YXIgX3RoaXMxMD10aGlzLGxvYWRlcj1mdW5jdGlvbigpe3ZhciBfcmVmMTU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIF9jYWxsZWUzKCl7dmFyIG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcix3b3JrZXI7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKXtmb3IoOzspc3dpdGNoKF9jb250ZXh0My5wcmV2PV9jb250ZXh0My5uZXh0KXtjYXNlIDA6aWYobWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyPV90aGlzMTAuX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciwhbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyKXtfY29udGV4dDMubmV4dD0zO2JyZWFrfXJldHVybiBfY29udGV4dDMuYWJydXB0KCJyZXR1cm4iLG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcik7Y2FzZSAzOmlmKCFfaXNfbm9kZS5pc05vZGVKU3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHJlcXVpcmUpe19jb250ZXh0My5uZXh0PTY7YnJlYWt9cmV0dXJuIHdvcmtlcj1ldmFsKCJyZXF1aXJlIikoX3RoaXMxMC53b3JrZXJTcmMpLF9jb250ZXh0My5hYnJ1cHQoInJldHVybiIsd29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyKTtjYXNlIDY6cmV0dXJuIF9jb250ZXh0My5uZXh0PTgsKDAsX2Rpc3BsYXlfdXRpbHMubG9hZFNjcmlwdCkoX3RoaXMxMC53b3JrZXJTcmMpO2Nhc2UgODpyZXR1cm4gX2NvbnRleHQzLmFicnVwdCgicmV0dXJuIix3aW5kb3cucGRmanNXb3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXIpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIF9jb250ZXh0My5zdG9wKCl9fSksX2NhbGxlZTMpfSkpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gX3JlZjE1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJfc2V0dXBGYWtlV29ya2VyR2xvYmFsIixsb2FkZXIoKSl9fV0pLFBERldvcmtlcn0oKTtleHBvcnRzLlBERldvcmtlcj1QREZXb3JrZXI7dmFyIF93b3JrZXJQb3J0cz17d3JpdGFibGU6ITAsdmFsdWU6bmV3IFdlYWtNYXB9LF9kb2NTdGF0cz1uZXcgV2Vha01hcCxfcGFnZUNhY2hlPW5ldyBXZWFrTWFwLF9wYWdlUHJvbWlzZXM9bmV3IFdlYWtNYXAsX21ldGFkYXRhUHJvbWlzZT1uZXcgV2Vha01hcCxXb3JrZXJUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuLGkpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2RvY1N0YXRzLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZUNhY2hlLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZVByb21pc2VzLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfbWV0YWRhdGFQcm9taXNlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5tZXNzYWdlSGFuZGxlcj1lLHRoaXMubG9hZGluZ1Rhc2s9cix0aGlzLmNvbW1vbk9ianM9bmV3IFBERk9iamVjdHMsdGhpcy5mb250TG9hZGVyPW5ldyBfZm9udF9sb2FkZXIuRm9udExvYWRlcih7b25VbnN1cHBvcnRlZEZlYXR1cmU6dGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSxvd25lckRvY3VtZW50Omkub3duZXJEb2N1bWVudCxzdHlsZUVsZW1lbnQ6aS5zdHlsZUVsZW1lbnR9KSx0aGlzLl9wYXJhbXM9aSxpLnVzZVdvcmtlckZldGNofHwodGhpcy5DTWFwUmVhZGVyRmFjdG9yeT1uZXcgaS5DTWFwUmVhZGVyRmFjdG9yeSh7YmFzZVVybDppLmNNYXBVcmwsaXNDb21wcmVzc2VkOmkuY01hcFBhY2tlZH0pLHRoaXMuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9bmV3IGkuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnkoe2Jhc2VVcmw6aS5zdGFuZGFyZEZvbnREYXRhVXJsfSkpLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVzdHJveUNhcGFiaWxpdHk9bnVsbCx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHk9bnVsbCx0aGlzLl9uZXR3b3JrU3RyZWFtPW4sdGhpcy5fZnVsbFJlYWRlcj1udWxsLHRoaXMuX2xhc3RQcm9ncmVzcz1udWxsLHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKX12YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFubm90YXRpb25TdG9yYWdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImFubm90YXRpb25TdG9yYWdlIixuZXcgX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZSl9fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9kb2NTdGF0cyl9fSx7a2V5OiJnZXRSZW5kZXJpbmdJbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEUscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10saT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVksYT1udWxsO3N3aXRjaCh0KXtjYXNlImFueSI6aT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWTticmVhaztjYXNlImRpc3BsYXkiOmJyZWFrO2Nhc2UicHJpbnQiOmk9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVDticmVhaztkZWZhdWx0OigwLF91dGlsLndhcm4pKCJnZXRSZW5kZXJpbmdJbnRlbnQgLSBpbnZhbGlkIGludGVudDogIi5jb25jYXQodCkpfXN3aXRjaChlKXtjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkRJU0FCTEU6aSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFO2JyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmJyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX0ZPUk1TOmkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVM7YnJlYWs7Y2FzZSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEVfU1RPUkFHRTphPSgoaSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19TVE9SQUdFKSZfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UJiZyIGluc3RhbmNlb2YgX2Fubm90YXRpb25fc3RvcmFnZS5QcmludEFubm90YXRpb25TdG9yYWdlP3I6dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSkuc2VyaWFsaXphYmxlO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwud2FybikoImdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgYW5ub3RhdGlvbk1vZGU6ICIuY29uY2F0KGUpKX1yZXR1cm4gbiYmKGkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUKSx7cmVuZGVyaW5nSW50ZW50OmksY2FjaGVLZXk6IiIuY29uY2F0KGksIl8iKS5jb25jYXQoX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZS5nZXRIYXNoKGEpKSxhbm5vdGF0aW9uU3RvcmFnZU1hcDphfX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5KXJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkmJnRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCBkdXJpbmcgb25QYXNzd29yZCBjYWxsYmFjayIpKTt2YXIgZSxyPVtdLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtyLnB1c2goaS5fZGVzdHJveSgpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfcGFnZVByb21pc2VzKS5jbGVhcigpLHRoaXMuaGFzT3duUHJvcGVydHkoImFubm90YXRpb25TdG9yYWdlIikmJnRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO3ZhciBhPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJUZXJtaW5hdGUiLG51bGwpO3JldHVybiByLnB1c2goYSksUHJvbWlzZS5hbGwocikudGhlbigoZnVuY3Rpb24oKXt0LmNvbW1vbk9ianMuY2xlYXIoKSx0LmZvbnRMb2FkZXIuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfbWV0YWRhdGFQcm9taXNlLG51bGwpLHQuX2dldEZpZWxkT2JqZWN0c1Byb21pc2U9bnVsbCx0Ll9oYXNKU0FjdGlvbnNQcm9taXNlPW51bGwsdC5fbmV0d29ya1N0cmVhbSYmdC5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSksdC5tZXNzYWdlSGFuZGxlciYmKHQubWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpLHQubWVzc2FnZUhhbmRsZXI9bnVsbCksdC5kZXN0cm95Q2FwYWJpbGl0eS5yZXNvbHZlKCl9KSx0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToic2V0dXBNZXNzYWdlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5tZXNzYWdlSGFuZGxlcixyPXRoaXMubG9hZGluZ1Rhc2s7ZS5vbigiR2V0UmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJlYWRlciAtIG5vIGBJUERGU3RyZWFtYCBpbnN0YW5jZSBhdmFpbGFibGUuIiksdC5fZnVsbFJlYWRlcj10Ll9uZXR3b3JrU3RyZWFtLmdldEZ1bGxSZWFkZXIoKSx0Ll9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7dC5fbGFzdFByb2dyZXNzPXtsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS50b3RhbH19LHIub25QdWxsPWZ1bmN0aW9uKCl7dC5fZnVsbFJlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSZWFkZXIgLSBleHBlY3RlZCBhbiBBcnJheUJ1ZmZlci4iKSxyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoZSksMSxbZV0pKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ci5lcnJvcih0KX0pKX0sci5vbkNhbmNlbD1mdW5jdGlvbihlKXt0Ll9mdWxsUmVhZGVyLmNhbmNlbChlKSxyLnJlYWR5LmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5kZXN0cm95ZWQpdGhyb3cgZX0pKX19KSksZS5vbigiUmVhZGVySGVhZGVyc1JlYWR5IiwoZnVuY3Rpb24oZSl7dmFyIG49KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksaT10Ll9mdWxsUmVhZGVyO3JldHVybiBpLmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe3ZhciBlO2kuaXNTdHJlYW1pbmdTdXBwb3J0ZWQmJmkuaXNSYW5nZVN1cHBvcnRlZHx8KHQuX2xhc3RQcm9ncmVzcyYmKG51bGw9PT0oZT1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwocix0Ll9sYXN0UHJvZ3Jlc3MpKSxpLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXIub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbChyLHtsb2FkZWQ6dC5sb2FkZWQsdG90YWw6dC50b3RhbH0pfSksbi5yZXNvbHZlKHtpc1N0cmVhbWluZ1N1cHBvcnRlZDppLmlzU3RyZWFtaW5nU3VwcG9ydGVkLGlzUmFuZ2VTdXBwb3J0ZWQ6aS5pc1JhbmdlU3VwcG9ydGVkLGNvbnRlbnRMZW5ndGg6aS5jb250ZW50TGVuZ3RofSl9KSxuLnJlamVjdCksbi5wcm9taXNlfSkpLGUub24oIkdldFJhbmdlUmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS4iKTt2YXIgbj10Ll9uZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGUuYmVnaW4sZS5lbmQpO24/KHIub25QdWxsPWZ1bmN0aW9uKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSYW5nZVJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLiIpLHIuZW5xdWV1ZShuZXcgVWludDhBcnJheShlKSwxLFtlXSkpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyLmVycm9yKHQpfSkpfSxyLm9uQ2FuY2VsPWZ1bmN0aW9uKGUpe24uY2FuY2VsKGUpLHIucmVhZHkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCF0LmRlc3Ryb3llZCl0aHJvdyBlfSkpfSk6ci5jbG9zZSgpfSkpLGUub24oIkdldERvYyIsKGZ1bmN0aW9uKGUpe3ZhciBuPWUucGRmSW5mbzt0Ll9udW1QYWdlcz1uLm51bVBhZ2VzLHQuX2h0bWxGb3JYZmE9bi5odG1sRm9yWGZhLGRlbGV0ZSBuLmh0bWxGb3JYZmEsci5fY2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBQREZEb2N1bWVudFByb3h5KG4sdCkpfSkpLGUub24oIkRvY0V4Y2VwdGlvbiIsKGZ1bmN0aW9uKHQpe3ZhciBlO3N3aXRjaCh0Lm5hbWUpe2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOmU9bmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2JyZWFrO2Nhc2UiSW52YWxpZFBERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjplPW5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24odC5tZXNzYWdlLHQuc3RhdHVzKTticmVhaztjYXNlIlVua25vd25FcnJvckV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LmRldGFpbHMpO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwudW5yZWFjaGFibGUpKCJEb2NFeGNlcHRpb24gLSBleHBlY3RlZCBhIHZhbGlkIEVycm9yLiIpfXIuX2NhcGFiaWxpdHkucmVqZWN0KGUpfSkpLGUub24oIlBhc3N3b3JkUmVxdWVzdCIsKGZ1bmN0aW9uKGUpe2lmKHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyLm9uUGFzc3dvcmQpdHJ5e3Iub25QYXNzd29yZCgoZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIEVycm9yP3QuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QoZSk6dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlc29sdmUoe3Bhc3N3b3JkOmV9KX0pLGUuY29kZSl9Y2F0Y2goZSl7dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChlKX1lbHNlIHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpKTtyZXR1cm4gdC5fcGFzc3dvcmRDYXBhYmlsaXR5LnByb21pc2V9KSksZS5vbigiRGF0YUxvYWRlZCIsKGZ1bmN0aW9uKGUpe3ZhciBuO251bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubGVuZ3RoLHRvdGFsOmUubGVuZ3RofSksdC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUoZSl9KSksZS5vbigiU3RhcnRSZW5kZXJQYWdlIiwoZnVuY3Rpb24oZSl7dC5kZXN0cm95ZWR8fF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0LF9wYWdlQ2FjaGUpLmdldChlLnBhZ2VJbmRleCkuX3N0YXJ0UmVuZGVyUGFnZShlLnRyYW5zcGFyZW5jeSxlLmNhY2hlS2V5KX0pKSxlLm9uKCJjb21tb25vYmoiLChmdW5jdGlvbihyKXt2YXIgbixpPV9zbGljZWRUb0FycmF5KHIsMyksYT1pWzBdLG89aVsxXSxzPWlbMl07aWYoIXQuZGVzdHJveWVkJiYhdC5jb21tb25PYmpzLmhhcyhhKSlzd2l0Y2gobyl7Y2FzZSJGb250Ijp2YXIgbD10Ll9wYXJhbXM7aWYoImVycm9yImluIHMpe3ZhciB1PXMuZXJyb3I7KDAsX3V0aWwud2FybikoIkVycm9yIGR1cmluZyBmb250IGxvYWRpbmc6ICIuY29uY2F0KHUpKSx0LmNvbW1vbk9ianMucmVzb2x2ZShhLHUpO2JyZWFrfXZhciBjPW51bGw7bC5wZGZCdWcmJm51bGwhPT0obj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpJiZ2b2lkIDAhPT1uJiZuLmVuYWJsZWQmJihjPXtyZWdpc3RlckZvbnQ6ZnVuY3Rpb24odCxlKXtnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IuZm9udEFkZGVkKHQsZSl9fSk7dmFyIGg9bmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChzLHtpc0V2YWxTdXBwb3J0ZWQ6bC5pc0V2YWxTdXBwb3J0ZWQsZGlzYWJsZUZvbnRGYWNlOmwuZGlzYWJsZUZvbnRGYWNlLGlnbm9yZUVycm9yczpsLmlnbm9yZUVycm9ycyxvblVuc3VwcG9ydGVkRmVhdHVyZTp0Ll9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHQpLGZvbnRSZWdpc3RyeTpjfSk7dC5mb250TG9hZGVyLmJpbmQoaCkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlbmRXaXRoUHJvbWlzZSgiRm9udEZhbGxiYWNrIix7aWQ6YX0pfSkpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7IWwuZm9udEV4dHJhUHJvcGVydGllcyYmaC5kYXRhJiYoaC5kYXRhPW51bGwpLHQuY29tbW9uT2Jqcy5yZXNvbHZlKGEsaCl9KSk7YnJlYWs7Y2FzZSJGb250UGF0aCI6Y2FzZSJJbWFnZSI6dC5jb21tb25PYmpzLnJlc29sdmUoYSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiR290IHVua25vd24gY29tbW9uIG9iamVjdCB0eXBlICIuY29uY2F0KG8pKX19KSksZS5vbigib2JqIiwoZnVuY3Rpb24oZSl7dmFyIHI9X3NsaWNlZFRvQXJyYXkoZSw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxvPXJbM107aWYoIXQuZGVzdHJveWVkKXt2YXIgcz1fY2xhc3NQcml2YXRlRmllbGRHZXQodCxfcGFnZUNhY2hlKS5nZXQoaSk7aWYoIXMub2Jqcy5oYXMobikpc3dpdGNoKGEpe2Nhc2UiSW1hZ2UiOmlmKHMub2Jqcy5yZXNvbHZlKG4sbyksbyl7dmFyIGw7aWYoby5iaXRtYXApe3ZhciB1PW8uYml0bWFwO2w9by53aWR0aCpvLmhlaWdodCo0LHMuX2JpdG1hcHMuYWRkKHUpfWVsc2V7dmFyIGM7bD0obnVsbD09PShjPW8uZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMubGVuZ3RoKXx8MH1sPjhlNiYmKHMuY2xlYW51cEFmdGVyUmVuZGVyPSEwKX1icmVhaztjYXNlIlBhdHRlcm4iOnMub2Jqcy5yZXNvbHZlKG4sbyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkdvdCB1bmtub3duIG9iamVjdCB0eXBlICIuY29uY2F0KGEpKX19fSkpLGUub24oIkRvY1Byb2dyZXNzIiwoZnVuY3Rpb24oZSl7dmFyIG47dC5kZXN0cm95ZWR8fG51bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubG9hZGVkLHRvdGFsOmUudG90YWx9KX0pKSxlLm9uKCJEb2NTdGF0cyIsKGZ1bmN0aW9uKGUpe3QuZGVzdHJveWVkfHxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfZG9jU3RhdHMsT2JqZWN0LmZyZWV6ZSh7c3RyZWFtVHlwZXM6T2JqZWN0LmZyZWV6ZShlLnN0cmVhbVR5cGVzKSxmb250VHlwZXM6T2JqZWN0LmZyZWV6ZShlLmZvbnRUeXBlcyl9KSl9KSksZS5vbigiVW5zdXBwb3J0ZWRGZWF0dXJlIix0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpKSxlLm9uKCJGZXRjaEJ1aWx0SW5DTWFwIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuQ01hcFJlYWRlckZhY3Rvcnk/dC5DTWFwUmVhZGVyRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNNYXBSZWFkZXJGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSksZS5vbigiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk/dC5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIlN0YW5kYXJkRm9udERhdGFGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSl9fSx7a2V5OiJfb25VbnN1cHBvcnRlZEZlYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10LmZlYXR1cmVJZDt0aGlzLmRlc3Ryb3llZHx8bnVsbD09PShlPShyPXRoaXMubG9hZGluZ1Rhc2spLm9uVW5zdXBwb3J0ZWRGZWF0dXJlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHIsbil9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGF0YSIsbnVsbCl9fSx7a2V5OiJzYXZlRG9jdW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7cmV0dXJuIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2l6ZTw9MCYmKDAsX3V0aWwud2FybikoInNhdmVEb2N1bWVudCBjYWxsZWQgd2hpbGUgYGFubm90YXRpb25TdG9yYWdlYCBpcyBlbXB0eSwgcGxlYXNlIHVzZSB0aGUgZ2V0RGF0YS1tZXRob2QgaW5zdGVhZC4iKSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiU2F2ZURvY3VtZW50Iix7aXNQdXJlWGZhOiEhdGhpcy5faHRtbEZvclhmYSxudW1QYWdlczp0aGlzLl9udW1QYWdlcyxhbm5vdGF0aW9uU3RvcmFnZTp0aGlzLmFubm90YXRpb25TdG9yYWdlLnNlcmlhbGl6YWJsZSxmaWxlbmFtZTpudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZWFkZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmZpbGVuYW1lKSYmdm9pZCAwIT09dD90Om51bGx9KS5maW5hbGx5KChmdW5jdGlvbigpe3IuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpfSkpfX0se2tleToiZ2V0UGFnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDw9MHx8dD50aGlzLl9udW1QYWdlcylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJJbnZhbGlkIHBhZ2UgcmVxdWVzdC4iKSk7dmFyIHI9dC0xLG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VQcm9taXNlcykuZ2V0KHIpO2lmKG4pcmV0dXJuIG47dmFyIGk9dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2UiLHtwYWdlSW5kZXg6cn0pLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKGUuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVHJhbnNwb3J0IGRlc3Ryb3llZCIpO3ZhciBuPW5ldyBQREZQYWdlUHJveHkocix0LGUsZS5fcGFyYW1zLm93bmVyRG9jdW1lbnQsZS5fcGFyYW1zLnBkZkJ1Zyk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChlLF9wYWdlQ2FjaGUpLnNldChyLG4pLG59KSk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9wYWdlUHJvbWlzZXMpLnNldChyLGkpLGl9fSx7a2V5OiJnZXRQYWdlSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiIT09X3R5cGVvZih0KXx8bnVsbD09PXR8fCFOdW1iZXIuaXNJbnRlZ2VyKHQubnVtKXx8dC5udW08MHx8IU51bWJlci5pc0ludGVnZXIodC5nZW4pfHx0LmdlbjwwP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBwYWdlSW5kZXggcmVxdWVzdC4iKSk6dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VJbmRleCIse251bTp0Lm51bSxnZW46dC5nZW59KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0QW5ub3RhdGlvbnMiLHtwYWdlSW5kZXg6dCxpbnRlbnQ6ZX0pfX0se2tleToiZ2V0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlfHwodGhpcy5fZ2V0RmllbGRPYmplY3RzUHJvbWlzZT10aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RmllbGRPYmplY3RzIixudWxsKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0pTQWN0aW9uc1Byb21pc2V8fCh0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJIYXNKU0FjdGlvbnMiLG51bGwpKX19LHtrZXk6ImdldENhbGN1bGF0aW9uT3JkZXJJZHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKX19LHtrZXk6ImdldERlc3RpbmF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERlc3RpbmF0aW9ucyIsbnVsbCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LiIpKTp0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGVzdGluYXRpb24iLHtpZDp0fSl9fSx7a2V5OiJnZXRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxhYmVscyIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTGF5b3V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxheW91dCIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VNb2RlIixudWxsKX19LHtrZXk6ImdldFZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLG51bGwpfX0se2tleToiZ2V0T3BlbkFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE9wZW5BY3Rpb24iLG51bGwpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRBdHRhY2htZW50cyIsbnVsbCl9fSx7a2V5OiJnZXRKYXZhU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0SmF2YVNjcmlwdCIsbnVsbCl9fSx7a2V5OiJnZXREb2NKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXREb2NKU0FjdGlvbnMiLG51bGwpfX0se2tleToiZ2V0UGFnZUpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlSlNBY3Rpb25zIix7cGFnZUluZGV4OnR9KX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0U3RydWN0VHJlZSIse3BhZ2VJbmRleDp0fSl9fSx7a2V5OiJnZXRPdXRsaW5lIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0T3V0bGluZSIsbnVsbCl9fSx7a2V5OiJnZXRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnLk9wdGlvbmFsQ29udGVudENvbmZpZyh0KX0pKX19LHtrZXk6ImdldFBlcm1pc3Npb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGVybWlzc2lvbnMiLG51bGwpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSl8fF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9tZXRhZGF0YVByb21pc2UsdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1ldGFkYXRhIixudWxsKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcixuLGksYTtyZXR1cm57aW5mbzplWzBdLG1ldGFkYXRhOmVbMV0/bmV3IF9tZXRhZGF0YS5NZXRhZGF0YShlWzFdKTpudWxsLGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lOm51bGwhPT0ocj1udWxsPT09KG49dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PW4/dm9pZCAwOm4uZmlsZW5hbWUpJiZ2b2lkIDAhPT1yP3I6bnVsbCxjb250ZW50TGVuZ3RoOm51bGwhPT0oaT1udWxsPT09KGE9dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29udGVudExlbmd0aCkmJnZvaWQgMCE9PWk/aTpudWxsfX0pKSl9fSx7a2V5OiJnZXRNYXJrSW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1hcmtJbmZvIixudWxsKX19LHtrZXk6InN0YXJ0Q2xlYW51cCIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxhPWFyZ3VtZW50cztyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKGU9YS5sZW5ndGg+MCYmdm9pZCAwIT09YVswXSYmYVswXSwhdGhpcy5kZXN0cm95ZWQpe3QubmV4dD0zO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOnJldHVybiB0Lm5leHQ9NSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiQ2xlYW51cCIsbnVsbCk7Y2FzZSA1OnI9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpLHQucHJldj02LHIucygpO2Nhc2UgODppZigobj1yLm4oKSkuZG9uZSl7dC5uZXh0PTE1O2JyZWFrfWlmKChpPW4udmFsdWUpLmNsZWFudXAoKSl7dC5uZXh0PTEzO2JyZWFrfXRocm93IG5ldyBFcnJvcigic3RhcnRDbGVhbnVwOiBQYWdlICIuY29uY2F0KGkucGFnZU51bWJlciwiIGlzIGN1cnJlbnRseSByZW5kZXJpbmcuIikpO2Nhc2UgMTM6dC5uZXh0PTg7YnJlYWs7Y2FzZSAxNTp0Lm5leHQ9MjA7YnJlYWs7Y2FzZSAxNzp0LnByZXY9MTcsdC50MD10LmNhdGNoKDYpLHIuZSh0LnQwKTtjYXNlIDIwOnJldHVybiB0LnByZXY9MjAsci5mKCksdC5maW5pc2goMjApO2Nhc2UgMjM6dGhpcy5jb21tb25PYmpzLmNsZWFyKCksZXx8dGhpcy5mb250TG9hZGVyLmNsZWFyKCksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSxudWxsKSx0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlPW51bGwsdGhpcy5faGFzSlNBY3Rpb25zUHJvbWlzZT1udWxsO2Nhc2UgMjg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s2LDE3LDIwLDIzXV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJsb2FkaW5nUGFyYW1zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJhbXM7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJsb2FkaW5nUGFyYW1zIix7ZGlzYWJsZUF1dG9GZXRjaDp0LmRpc2FibGVBdXRvRmV0Y2gsZW5hYmxlWGZhOnQuZW5hYmxlWGZhfSl9fV0pLHR9KCksX29ianM9bmV3IFdlYWtNYXAsX2Vuc3VyZU9iaj1uZXcgV2Vha1NldCxQREZPYmplY3RzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLF9lbnN1cmVPYmopLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29ianMse3dyaXRhYmxlOiEwLHZhbHVlOk9iamVjdC5jcmVhdGUobnVsbCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYoZSl7dmFyIHI9X2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLF9lbnN1cmVPYmosX2Vuc3VyZU9iajIpLmNhbGwodGhpcyx0KTtyZXR1cm4gci5jYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZShyLmRhdGEpfSkpLG51bGx9dmFyIG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO2lmKG51bGw9PW58fCFuLmNhcGFiaWxpdHkuc2V0dGxlZCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVlc3Rpbmcgb2JqZWN0IHRoYXQgaXNuJ3QgcmVzb2x2ZWQgeWV0ICIuY29uY2F0KHQsIi4iKSk7cmV0dXJuIG4uZGF0YX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO3JldHVybihudWxsPT1lP3ZvaWQgMDplLmNhcGFiaWxpdHkuc2V0dGxlZCl8fCExfX0se2tleToicmVzb2x2ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1fY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsX2Vuc3VyZU9iaixfZW5zdXJlT2JqMikuY2FsbCh0aGlzLHQpO3IuZGF0YT1lLHIuY2FwYWJpbGl0eS5yZXNvbHZlKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXtfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcyxfb2JqcyxPYmplY3QuY3JlYXRlKG51bGwpKX19XSksdH0oKTtmdW5jdGlvbiBfZW5zdXJlT2JqMih0KXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdfHwoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdPXtjYXBhYmlsaXR5OigwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGRhdGE6bnVsbH0pfXZhciBfaW50ZXJuYWxSZW5kZXJUYXNrPW5ldyBXZWFrTWFwLFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2ludGVybmFsUmVuZGVyVGFzayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2ssZSksdGhpcy5vbkNvbnRpbnVlPW51bGx9cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJwcm9taXNlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2ludGVybmFsUmVuZGVyVGFzaykuY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLmNhbmNlbChudWxsLHQpfX0se2tleToic2VwYXJhdGVBbm5vdHMiLGdldDpmdW5jdGlvbigpe3ZhciB0PV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cztpZighdClyZXR1cm4hMTt2YXIgZT1fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfaW50ZXJuYWxSZW5kZXJUYXNrKS5hbm5vdGF0aW9uQ2FudmFzTWFwO3JldHVybiB0LmZvcm18fHQuY2FudmFzJiYobnVsbD09ZT92b2lkIDA6ZS5zaXplKT4wfX1dKSx0fSgpO2V4cG9ydHMuUmVuZGVyVGFzaz1SZW5kZXJUYXNrO3ZhciBJbnRlcm5hbFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUuY2FsbGJhY2ssbj1lLnBhcmFtcyxpPWUub2JqcyxhPWUuY29tbW9uT2JqcyxvPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxzPWUub3BlcmF0b3JMaXN0LGw9ZS5wYWdlSW5kZXgsdT1lLmNhbnZhc0ZhY3RvcnksYz1lLnVzZVJlcXVlc3RBbmltYXRpb25GcmFtZSxoPXZvaWQgMCE9PWMmJmMsZj1lLnBkZkJ1ZyxkPXZvaWQgMCE9PWYmJmYscD1lLnBhZ2VDb2xvcnMsdj12b2lkIDA9PT1wP251bGw6cDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmNhbGxiYWNrPXIsdGhpcy5wYXJhbXM9bix0aGlzLm9ianM9aSx0aGlzLmNvbW1vbk9ianM9YSx0aGlzLmFubm90YXRpb25DYW52YXNNYXA9byx0aGlzLm9wZXJhdG9yTGlzdElkeD1udWxsLHRoaXMub3BlcmF0b3JMaXN0PXMsdGhpcy5fcGFnZUluZGV4PWwsdGhpcy5jYW52YXNGYWN0b3J5PXUsdGhpcy5fcGRmQnVnPWQsdGhpcy5wYWdlQ29sb3JzPXYsdGhpcy5ydW5uaW5nPSExLHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrPW51bGwsdGhpcy5ncmFwaGljc1JlYWR5PSExLHRoaXMuX3VzZVJlcXVlc3RBbmltYXRpb25GcmFtZT0hMD09PWgmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LHRoaXMuY2FuY2VsbGVkPSExLHRoaXMuY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnRhc2s9bmV3IFJlbmRlclRhc2sodGhpcyksdGhpcy5fY2FuY2VsQm91bmQ9dGhpcy5jYW5jZWwuYmluZCh0aGlzKSx0aGlzLl9jb250aW51ZUJvdW5kPXRoaXMuX2NvbnRpbnVlLmJpbmQodGhpcyksdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQ9dGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyksdGhpcy5fbmV4dEJvdW5kPXRoaXMuX25leHQuYmluZCh0aGlzKSx0aGlzLl9jYW52YXM9bi5jYW52YXNDb250ZXh0LmNhbnZhc312YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImNvbXBsZXRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FwYWJpbGl0eS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKX19LHtrZXk6ImluaXRpYWxpemVHcmFwaGljcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHIsbixpPWUudHJhbnNwYXJlbmN5LGE9dm9pZCAwIT09aSYmaSxvPWUub3B0aW9uYWxDb250ZW50Q29uZmlnO2lmKCF0aGlzLmNhbmNlbGxlZCl7aWYodGhpcy5fY2FudmFzKXtpZihfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmhhcyh0aGlzLl9jYW52YXMpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuIFVzZSBkaWZmZXJlbnQgY2FudmFzIG9yIGVuc3VyZSBwcmV2aW91cyBvcGVyYXRpb25zIHdlcmUgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC4iKTtfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmFkZCh0aGlzLl9jYW52YXMpfXRoaXMuX3BkZkJ1ZyYmbnVsbCE9PShyPWdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXIpJiZ2b2lkIDAhPT1yJiZyLmVuYWJsZWQmJih0aGlzLnN0ZXBwZXI9Z2xvYmFsVGhpcy5TdGVwcGVyTWFuYWdlci5jcmVhdGUodGhpcy5fcGFnZUluZGV4KSx0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCksdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50PXRoaXMuc3RlcHBlci5nZXROZXh0QnJlYWtQb2ludCgpKTt2YXIgcz10aGlzLnBhcmFtcyxsPXMuY2FudmFzQ29udGV4dCx1PXMudmlld3BvcnQsYz1zLnRyYW5zZm9ybSxoPXMuYmFja2dyb3VuZDt0aGlzLmdmeD1uZXcgX2NhbnZhcy5DYW52YXNHcmFwaGljcyhsLHRoaXMuY29tbW9uT2Jqcyx0aGlzLm9ianMsdGhpcy5jYW52YXNGYWN0b3J5LHtvcHRpb25hbENvbnRlbnRDb25maWc6b30sdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwLHRoaXMucGFnZUNvbG9ycyksdGhpcy5nZnguYmVnaW5EcmF3aW5nKHt0cmFuc2Zvcm06Yyx2aWV3cG9ydDp1LHRyYW5zcGFyZW5jeTphLGJhY2tncm91bmQ6aH0pLHRoaXMub3BlcmF0b3JMaXN0SWR4PTAsdGhpcy5ncmFwaGljc1JlYWR5PSEwLG51bGw9PT0obj10aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayl8fHZvaWQgMD09PW58fG4uY2FsbCh0aGlzKX19fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3RoaXMucnVubmluZz0hMSx0aGlzLmNhbmNlbGxlZD0hMCxudWxsPT09KGU9dGhpcy5nZngpfHx2b2lkIDA9PT1lfHxlLmVuZERyYXdpbmcoKSx0aGlzLl9jYW52YXMmJl9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodCx0LF9jYW52YXNJblVzZSkuZGVsZXRlKHRoaXMuX2NhbnZhcyksdGhpcy5jYWxsYmFjayhyfHxuZXcgX2Rpc3BsYXlfdXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uKCJSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlICIuY29uY2F0KHRoaXMuX3BhZ2VJbmRleCsxKSwiY2FudmFzIixuKSl9fSx7a2V5OiJvcGVyYXRvckxpc3RDaGFuZ2VkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3RoaXMuZ3JhcGhpY3NSZWFkeT8obnVsbD09PSh0PXRoaXMuc3RlcHBlcil8fHZvaWQgMD09PXR8fHQudXBkYXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0KSx0aGlzLnJ1bm5pbmd8fHRoaXMuX2NvbnRpbnVlKCkpOnRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrfHwodGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2s9dGhpcy5fY29udGludWVCb3VuZCl9fSx7a2V5OiJfY29udGludWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ydW5uaW5nPSEwLHRoaXMuY2FuY2VsbGVkfHwodGhpcy50YXNrLm9uQ29udGludWU/dGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpOnRoaXMuX3NjaGVkdWxlTmV4dCgpKX19LHtrZXk6Il9zY2hlZHVsZU5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXt0Ll9uZXh0Qm91bmQoKS5jYXRjaCh0Ll9jYW5jZWxCb3VuZCl9KSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbih0aGlzLl9uZXh0Qm91bmQpLmNhdGNoKHRoaXMuX2NhbmNlbEJvdW5kKX19LHtrZXk6Il9uZXh0Iix2YWx1ZTooZT1fYXN5bmNUb0dlbmVyYXRvcihfcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuY2FuY2VsbGVkKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjp0aGlzLm9wZXJhdG9yTGlzdElkeD10aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LHRoaXMub3BlcmF0b3JMaXN0SWR4LHRoaXMuX2NvbnRpbnVlQm91bmQsdGhpcy5zdGVwcGVyKSx0aGlzLm9wZXJhdG9yTGlzdElkeD09PXRoaXMub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5sZW5ndGgmJih0aGlzLnJ1bm5pbmc9ITEsdGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rJiYodGhpcy5nZnguZW5kRHJhd2luZygpLHRoaXMuX2NhbnZhcyYmX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LHQsX2NhbnZhc0luVXNlKS5kZWxldGUodGhpcy5fY2FudmFzKSx0aGlzLmNhbGxiYWNrKCkpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCksX2NhbnZhc0luVXNlPXt3cml0YWJsZTohMCx2YWx1ZTpuZXcgV2Vha1NldH0sdmVyc2lvbj0iMy4yLjAiO2V4cG9ydHMudmVyc2lvbj12ZXJzaW9uO3ZhciBidWlsZD0iIjtleHBvcnRzLmJ1aWxkPWJ1aWxkfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QcmludEFubm90YXRpb25TdG9yYWdlPWUuQW5ub3RhdGlvblN0b3JhZ2U9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNSksbz1yKDEzOSk7ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0scyh0LGUpfWZ1bmN0aW9uIGwodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LHUodCl9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUscil7Zyh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gZyh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx3KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwodCk6ZS52YWx1ZX0odCx3KHQsZSwiZ2V0IikpfWZ1bmN0aW9uIHcodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIityKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQodCl9dmFyIEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrU2V0LHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIGU7cCh0aGlzLHQpLGcodGhpcyxlPVMpLGUuYWRkKHRoaXMpLG0odGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLG0odGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdGhpcy5vblNldE1vZGlmaWVkPW51bGwsdGhpcy5vblJlc2V0TW9kaWZpZWQ9bnVsbCx0aGlzLm9uQW5ub3RhdGlvbkVkaXRvcj1udWxsfXJldHVybiB5KHQsW3trZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV8odGhpcyxrKS5nZXQodCk7cmV0dXJuIHZvaWQgMD09PXI/ZTpPYmplY3QuYXNzaWduKGUscil9fSx7a2V5OiJnZXRSYXdWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIF8odGhpcyxrKS5nZXQodCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKF8odGhpcyxrKS5kZWxldGUodCksMD09PV8odGhpcyxrKS5zaXplJiZ0aGlzLnJlc2V0TW9kaWZpZWQoKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3Ipe3ZhciBlLHI9aChfKHRoaXMsaykudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOylpZihlLnZhbHVlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yKXJldHVybn1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLm9uQW5ub3RhdGlvbkVkaXRvcihudWxsKX19fSx7a2V5OiJzZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1fKHRoaXMsaykuZ2V0KHQpLG49ITE7aWYodm9pZCAwIT09cilmb3IodmFyIGk9MCxvPU9iamVjdC5lbnRyaWVzKGUpO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1jKG9baV0sMiksbD1zWzBdLHU9c1sxXTtyW2xdIT09dSYmKG49ITAscltsXT11KX1lbHNlIG49ITAsXyh0aGlzLGspLnNldCh0LGUpO24mJmZ1bmN0aW9uKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfSh0aGlzLFMsRSkuY2FsbCh0aGlzKSxlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3ImJnRoaXMub25Bbm5vdGF0aW9uRWRpdG9yKGUuY29uc3RydWN0b3IuX3R5cGUpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gXyh0aGlzLGspLmhhcyh0KX19LHtrZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLGspLnNpemU+MD8oMCxpLm9iamVjdEZyb21NYXApKF8odGhpcyxrKSk6bnVsbH19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMsaykuc2l6ZX19LHtrZXk6InJlc2V0TW9kaWZpZWQiLHZhbHVlOmZ1bmN0aW9uKCl7Xyh0aGlzLEEpJiYoYih0aGlzLEEsITEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uUmVzZXRNb2RpZmllZCYmdGhpcy5vblJlc2V0TW9kaWZpZWQoKSl9fSx7a2V5OiJwcmludCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUKHRoaXMpfX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtpZigwPT09Xyh0aGlzLGspLnNpemUpcmV0dXJuIG51bGw7dmFyIHQsZT1uZXcgTWFwLHI9aChfKHRoaXMsaykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIG49Yyh0LnZhbHVlLDIpLGk9blswXSxvPW5bMV0scz1vIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yP28uc2VyaWFsaXplKCk6bztzJiZlLnNldChpLHMpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gZX19XSxbe2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIiI7dmFyIGUscj1uZXcgby5NdXJtdXJIYXNoM182NCxuPWgodCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1jKGUudmFsdWUsMiksYT1pWzBdLHM9aVsxXTtyLnVwZGF0ZSgiIi5jb25jYXQoYSwiOiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShzKSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gci5oZXhkaWdlc3QoKX19XSksdH0oKTtmdW5jdGlvbiBFKCl7Xyh0aGlzLEEpfHwoYih0aGlzLEEsITApLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uU2V0TW9kaWZpZWQmJnRoaXMub25TZXRNb2RpZmllZCgpKX1lLkFubm90YXRpb25TdG9yYWdlPXg7dmFyIFA9bmV3IFdlYWtNYXAsVD1mdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmcyh0LGUpfShvLHQpO3ZhciBlLHIsYT0oZT1vLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIHQsaT11KGUpO2lmKHIpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7dD1SZWZsZWN0LmNvbnN0cnVjdChpLGFyZ3VtZW50cyxhKX1lbHNlIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09bihlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gbCh0KX0odGhpcyx0KX0pO2Z1bmN0aW9uIG8odCl7dmFyIGU7cmV0dXJuIHAodGhpcyxvKSxtKGwoZT1hLmNhbGwodGhpcykpLFAse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxiKGwoZSksUCxzdHJ1Y3R1cmVkQ2xvbmUodC5zZXJpYWxpemFibGUpKSxlfXJldHVybiB5KG8sW3trZXk6InByaW50IixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIFByaW50QW5ub3RhdGlvblN0b3JhZ2UucHJpbnQiKX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcyxQKX19XSksb30oeCk7ZS5QcmludEFubm90YXRpb25TdG9yYWdlPVR9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkFubm90YXRpb25FZGl0b3I9dm9pZCAwO3ZhciBpPXIoMTM2KSxhPXIoMSk7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGMobi5rZXkpLG4pfX1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4oZT1jKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIGModCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGgodCxlLHIpeyFmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LHAodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHAodCxlLCJnZXQiKSl9ZnVuY3Rpb24gcCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgdj1uZXcgV2Vha01hcCx5PW5ldyBXZWFrTWFwLG09bmV3IFdlYWtNYXAsZz1uZXcgV2Vha01hcCxiPW5ldyBXZWFrTWFwLF89bmV3IFdlYWtNYXAsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksaCh0aGlzLHYse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNpbi5iaW5kKHRoaXMpfSksaCh0aGlzLHkse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNvdXQuYmluZCh0aGlzKX0pLGgodGhpcyxtLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxnLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxiLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHUodGhpcywiX3VpTWFuYWdlciIsbnVsbCksaCh0aGlzLF8se3dyaXRhYmxlOiEwLHZhbHVlOnQuX3pJbmRleCsrfSksdGhpcy5jb25zdHJ1Y3Rvcj09PXQmJigwLGEudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBBbm5vdGF0aW9uRWRpdG9yLiIpLHRoaXMucGFyZW50PWUucGFyZW50LHRoaXMuaWQ9ZS5pZCx0aGlzLndpZHRoPXRoaXMuaGVpZ2h0PW51bGwsdGhpcy5wYWdlSW5kZXg9ZS5wYXJlbnQucGFnZUluZGV4LHRoaXMubmFtZT1lLm5hbWUsdGhpcy5kaXY9bnVsbCx0aGlzLl91aU1hbmFnZXI9ZS51aU1hbmFnZXI7dmFyIHI9dGhpcy5wYXJlbnQudmlld3BvcnQsbj1yLnJvdGF0aW9uLGk9ci5yYXdEaW1zLHM9aS5wYWdlV2lkdGgsbD1pLnBhZ2VIZWlnaHQsYz1pLnBhZ2VYLGY9aS5wYWdlWTt0aGlzLnJvdGF0aW9uPW4sdGhpcy5wYWdlRGltZW5zaW9ucz1bcyxsXSx0aGlzLnBhZ2VUcmFuc2xhdGlvbj1bYyxmXTt2YXIgZD1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxwPWRbMF0sdz1kWzFdO3RoaXMueD1lLngvcCx0aGlzLnk9ZS55L3csdGhpcy5pc0F0dGFjaGVkVG9ET009ITF9dmFyIGUscixuO3JldHVybiBlPXQsbj1be2tleToiX2RlZmF1bHRMaW5lQ29sb3IiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfZGVmYXVsdExpbmVDb2xvciIsdGhpcy5fY29sb3JNYW5hZ2VyLmdldEhleENvZGUoIkNhbnZhc1RleHQiKSl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyB0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7cGFyZW50OmUsaWQ6ZS5nZXROZXh0SWQoKSx1aU1hbmFnZXI6cn0pO24ucm90YXRpb249dC5yb3RhdGlvbjt2YXIgaT1vKG4ucGFnZURpbWVuc2lvbnMsMiksYT1pWzBdLHM9aVsxXSxsPW8obi5nZXRSZWN0SW5DdXJyZW50Q29vcmRzKHQucmVjdCxzKSw0KSx1PWxbMF0sYz1sWzFdLGg9bFsyXSxmPWxbM107cmV0dXJuIG4ueD11L2Esbi55PWMvcyxuLndpZHRoPWgvYSxuLmhlaWdodD1mL3Msbn19XSwocj1be2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3VpTWFuYWdlci5hZGRDb21tYW5kcyh0KX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci5jdXJyZW50TGF5ZXJ9fSx7a2V5OiJzZXRJbkJhY2tncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PTB9fSx7a2V5OiJzZXRJbkZvcmVncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PWQodGhpcyxfKX19LHtrZXk6InNldFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24odCl7bnVsbCE9PXQmJih0aGlzLnBhZ2VJbmRleD10LnBhZ2VJbmRleCx0aGlzLnBhZ2VEaW1lbnNpb25zPXQucGFnZURpbWVuc2lvbnMpLHRoaXMucGFyZW50PXR9fSx7a2V5OiJmb2N1c2luIix2YWx1ZTpmdW5jdGlvbih0KXtkKHRoaXMsbSk/Zih0aGlzLG0sITEpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpfX0se2tleToiZm9jdXNvdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXt2YXIgcj10LnJlbGF0ZWRUYXJnZXQ7bnVsbCE9ciYmci5jbG9zZXN0KCIjIi5jb25jYXQodGhpcy5pZCkpfHwodC5wcmV2ZW50RGVmYXVsdCgpLG51bGwhPT0oZT10aGlzLnBhcmVudCkmJnZvaWQgMCE9PWUmJmUuaXNNdWx0aXBsZVNlbGVjdGlvbnx8dGhpcy5jb21taXRPclJlbW92ZSgpKX19fSx7a2V5OiJjb21taXRPclJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkoKT90aGlzLnJlbW92ZSgpOnRoaXMuY29tbWl0KCl9fSx7a2V5OiJjb21taXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9fSx7a2V5OiJhZGRUb0Fubm90YXRpb25TdG9yYWdlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3VpTWFuYWdlci5hZGRUb0Fubm90YXRpb25TdG9yYWdlKHRoaXMpfX0se2tleToiZHJhZ3N0YXJ0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudC5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zdGFydFg9dC5jbGllbnRYLWUueCx0aGlzLnN0YXJ0WT10LmNsaWVudFktZS55LHQuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHRoaXMuaWQpLHQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUifX0se2tleToic2V0QXQiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8odGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxzPWlbMV0sbD1vKHRoaXMuc2NyZWVuVG9QYWdlVHJhbnNsYXRpb24ocixuKSwyKTtyPWxbMF0sbj1sWzFdLHRoaXMueD0odCtyKS9hLHRoaXMueT0oZStuKS9zLHRoaXMuZGl2LnN0eWxlLmxlZnQ9IiIuY29uY2F0KDEwMCp0aGlzLngsIiUiKSx0aGlzLmRpdi5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCp0aGlzLnksIiUiKX19LHtrZXk6InRyYW5zbGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdLGE9byh0aGlzLnNjcmVlblRvUGFnZVRyYW5zbGF0aW9uKHQsZSksMik7dD1hWzBdLGU9YVsxXSx0aGlzLngrPXQvbix0aGlzLnkrPWUvaSx0aGlzLmRpdi5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqdGhpcy54LCIlIiksdGhpcy5kaXYuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqdGhpcy55LCIlIil9fSx7a2V5OiJzY3JlZW5Ub1BhZ2VUcmFuc2xhdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5wYXJlbnRSb3RhdGlvbil7Y2FzZSA5MDpyZXR1cm5bZSwtdF07Y2FzZSAxODA6cmV0dXJuWy10LC1lXTtjYXNlIDI3MDpyZXR1cm5bLWUsdF07ZGVmYXVsdDpyZXR1cm5bdCxlXX19fSx7a2V5OiJwYXJlbnRTY2FsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGV9fSx7a2V5OiJwYXJlbnRSb3RhdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yb3RhdGlvbn19LHtrZXk6InBhcmVudERpbWVuc2lvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGUsZT1vKHRoaXMucGFnZURpbWVuc2lvbnMsMik7cmV0dXJuW2VbMF0qdCxlWzFdKnRdfX0se2tleToic2V0RGltcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdO3RoaXMuZGl2LnN0eWxlLndpZHRoPSIiLmNvbmNhdCgxMDAqdC9uLCIlIiksdGhpcy5kaXYuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZS9pLCIlIil9fSx7a2V5OiJmaXhEaW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGl2LnN0eWxlLGU9dC5oZWlnaHQscj10LndpZHRoLG49ci5lbmRzV2l0aCgiJSIpLGk9ZS5lbmRzV2l0aCgiJSIpO2lmKCFufHwhaSl7dmFyIGE9byh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscz1hWzBdLGw9YVsxXTtufHwodC53aWR0aD0iIi5jb25jYXQoMTAwKnBhcnNlRmxvYXQocikvcywiJSIpKSxpfHwodC5oZWlnaHQ9IiIuY29uY2F0KDEwMCpwYXJzZUZsb2F0KGUpL2wsIiUiKSl9fX0se2tleToiZ2V0SW5pdGlhbFRyYW5zbGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblswLDBdfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiZGF0YS1lZGl0b3Itcm90YXRpb24iLCgzNjAtdGhpcy5yb3RhdGlvbiklMzYwKSx0aGlzLmRpdi5jbGFzc05hbWU9dGhpcy5uYW1lLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuaWQpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLDApLHRoaXMuc2V0SW5Gb3JlZ3JvdW5kKCksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKTt2YXIgdD1vKHRoaXMuZ2V0SW5pdGlhbFRyYW5zbGF0aW9uKCksMiksZT10WzBdLHI9dFsxXTtyZXR1cm4gdGhpcy50cmFuc2xhdGUoZSxyKSwoMCxpLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnc3RhcnQiLCJwb2ludGVyZG93biJdKSx0aGlzLmRpdn19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjOzAhPT10LmJ1dHRvbnx8dC5jdHJsS2V5JiZlP3QucHJldmVudERlZmF1bHQoKToodC5jdHJsS2V5JiYhZXx8dC5zaGlmdEtleXx8dC5tZXRhS2V5JiZlP3RoaXMucGFyZW50LnRvZ2dsZVNlbGVjdGVkKHRoaXMpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLGYodGhpcyxtLCEwKSl9fSx7a2V5OiJnZXRSZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFyZW50U2NhbGUsbj1vKHRoaXMucGFnZURpbWVuc2lvbnMsMiksaT1uWzBdLGE9blsxXSxzPW8odGhpcy5wYWdlVHJhbnNsYXRpb24sMiksbD1zWzBdLHU9c1sxXSxjPXQvcixoPWUvcixmPXRoaXMueCppLGQ9dGhpcy55KmEscD10aGlzLndpZHRoKmksdj10aGlzLmhlaWdodCphO3N3aXRjaCh0aGlzLnJvdGF0aW9uKXtjYXNlIDA6cmV0dXJuW2YrYytsLGEtZC1oLXYrdSxmK2MrcCtsLGEtZC1oK3VdO2Nhc2UgOTA6cmV0dXJuW2YraCtsLGEtZCtjK3UsZitoK3YrbCxhLWQrYytwK3VdO2Nhc2UgMTgwOnJldHVybltmLWMtcCtsLGEtZCtoK3UsZi1jK2wsYS1kK2grdit1XTtjYXNlIDI3MDpyZXR1cm5bZi1oLXYrbCxhLWQtYy1wK3UsZi1oK2wsYS1kLWMrdV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19fSx7a2V5OiJnZXRSZWN0SW5DdXJyZW50Q29vcmRzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW8odCw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxzPXJbM10sbD1hLW4sdT1zLWk7c3dpdGNoKHRoaXMucm90YXRpb24pe2Nhc2UgMDpyZXR1cm5bbixlLXMsbCx1XTtjYXNlIDkwOnJldHVybltuLGUtaSx1LGxdO2Nhc2UgMTgwOnJldHVyblthLGUtaSxsLHVdO2Nhc2UgMjcwOnJldHVyblthLGUtcyx1LGxdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdGF0aW9uIil9fX0se2tleToib25jZUFkZGVkIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtmKHRoaXMsYiwhMCl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zih0aGlzLGIsITEpfX0se2tleToiaXNJbkVkaXRNb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkKHRoaXMsYil9fSx7a2V5OiJzaG91bGRHZXRLZXlib2FyZEV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6Im5lZWRzVG9CZVJlYnVpbHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2JiYhdGhpcy5pc0F0dGFjaGVkVG9ET019fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O251bGw9PT0odD10aGlzLmRpdil8fHZvaWQgMD09PXR8fHQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxhLnVucmVhY2hhYmxlKSgiQW4gZWRpdG9yIG11c3QgYmUgc2VyaWFsaXphYmxlIil9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKSx0aGlzLmlzRW1wdHkoKXx8dGhpcy5jb21taXQoKSx0aGlzLnBhcmVudC5yZW1vdmUodGhpcyl9fSx7a2V5OiJzZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe319LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImVuYWJsZUVkaXRpbmciLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImlzRWRpdGluZyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcyxnKX0sc2V0OmZ1bmN0aW9uKHQpe2YodGhpcyxnLHQpLHQ/KHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLHRoaXMucGFyZW50LnNldEFjdGl2ZUVkaXRvcih0aGlzKSk6dGhpcy5wYXJlbnQuc2V0QWN0aXZlRWRpdG9yKG51bGwpfX1dKSYmbChlLnByb3RvdHlwZSxyKSxuJiZsKGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLkFubm90YXRpb25FZGl0b3I9dyx1KHcsIl9jb2xvck1hbmFnZXIiLG5ldyBpLkNvbG9yTWFuYWdlciksdSh3LCJfekluZGV4IiwxKX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuS2V5Ym9hcmRNYW5hZ2VyPWUuQ29tbWFuZE1hbmFnZXI9ZS5Db2xvck1hbmFnZXI9ZS5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyPXZvaWQgMCxlLmJpbmRFdmVudHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9XyhyKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7ZS5hZGRFdmVudExpc3RlbmVyKGEsdFthXS5iaW5kKHQpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fSxlLm9wYWNpdHlUb0hleD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLm1pbigyNTUsTWF0aC5tYXgoMSwyNTUqdCkpKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEEodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHx3KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybihlPXAoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx3KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7eSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGModCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHAobi5rZXkpLG4pfX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBwKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiB2KHQsZSxyKXt5KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB5KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LGIodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gYih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj13KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiB3KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBBKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gQSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciBrPW5ldyBXZWFrTWFwLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpLHYodGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTowfSl9cmV0dXJuIGQodCxbe2tleToiZ2V0SWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4iIi5jb25jYXQoaS5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4KS5jb25jYXQoKG0odGhpcyxrLCh0PWcodGhpcyxrKSxlPXQrKyx0KSksZSkpfX1dKSx0fSgpLHg9bmV3IFdlYWtNYXAsRT1uZXcgV2Vha01hcCxQPW5ldyBXZWFrTWFwLFQ9bmV3IFdlYWtNYXAsQz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTI4O2godGhpcyx0KSx2KHRoaXMseCx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx2KHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx2KHRoaXMsUCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdih0aGlzLFQse3dyaXRhYmxlOiEwLHZhbHVlOi0xfSksbSh0aGlzLFAsZSl9cmV0dXJuIGQodCxbe2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmNtZCxyPXQudW5kbyxuPXQubXVzdEV4ZWMsaT10LnR5cGUsYT12b2lkIDA9PT1pP05hTjppLG89dC5vdmVyd3JpdGVJZlNhbWVUeXBlLHM9dm9pZCAwIT09byYmbyxsPXQua2VlcFVuZG8sdT12b2lkIDAhPT1sJiZsO2lmKG4mJmUoKSwhZyh0aGlzLEUpKXt2YXIgYz17Y21kOmUsdW5kbzpyLHR5cGU6YX07aWYoLTE9PT1nKHRoaXMsVCkpcmV0dXJuIGcodGhpcyx4KS5sZW5ndGg+MCYmKGcodGhpcyx4KS5sZW5ndGg9MCksbSh0aGlzLFQsMCksdm9pZCBnKHRoaXMseCkucHVzaChjKTtpZihzJiZnKHRoaXMseClbZyh0aGlzLFQpXS50eXBlPT09YSlyZXR1cm4gdSYmKGMudW5kbz1nKHRoaXMseClbZyh0aGlzLFQpXS51bmRvKSx2b2lkKGcodGhpcyx4KVtnKHRoaXMsVCldPWMpO3ZhciBoPWcodGhpcyxUKSsxO2g9PT1nKHRoaXMsUCk/Zyh0aGlzLHgpLnNwbGljZSgwLDEpOihtKHRoaXMsVCxoKSxoPGcodGhpcyx4KS5sZW5ndGgmJmcodGhpcyx4KS5zcGxpY2UoaCkpLGcodGhpcyx4KS5wdXNoKGMpfX19LHtrZXk6InVuZG8iLHZhbHVlOmZ1bmN0aW9uKCl7LTEhPT1nKHRoaXMsVCkmJihtKHRoaXMsRSwhMCksZyh0aGlzLHgpW2codGhpcyxUKV0udW5kbygpLG0odGhpcyxFLCExKSxtKHRoaXMsVCxnKHRoaXMsVCktMSkpfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xJiYobSh0aGlzLFQsZyh0aGlzLFQpKzEpLG0odGhpcyxFLCEwKSxnKHRoaXMseClbZyh0aGlzLFQpXS5jbWQoKSxtKHRoaXMsRSwhMSkpfX0se2tleToiaGFzU29tZXRoaW5nVG9VbmRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybi0xIT09Zyh0aGlzLFQpfX0se2tleToiaGFzU29tZXRoaW5nVG9SZWRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXttKHRoaXMseCxudWxsKX19XSksdH0oKTtlLkNvbW1hbmRNYW5hZ2VyPUM7dmFyIE89bmV3IFdlYWtTZXQsRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHUodGhpcyxPKSx0aGlzLmJ1ZmZlcj1bXSx0aGlzLmNhbGxiYWNrcz1uZXcgTWFwLHRoaXMuYWxsS2V5cz1uZXcgU2V0O3ZhciByLG49aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYyxhPV8oZSk7dHJ5e2ZvcihhLnMoKTshKHI9YS5uKCkpLmRvbmU7KXt2YXIgbyxzPWwoci52YWx1ZSwyKSxjPXNbMF0sZj1zWzFdLGQ9XyhjKTt0cnl7Zm9yKGQucygpOyEobz1kLm4oKSkuZG9uZTspe3ZhciBwPW8udmFsdWUsdj1wLnN0YXJ0c1dpdGgoIm1hYysiKTtuJiZ2Pyh0aGlzLmNhbGxiYWNrcy5zZXQocC5zbGljZSg0KSxmKSx0aGlzLmFsbEtleXMuYWRkKHAuc3BsaXQoIisiKS5hdCgtMSkpKTpufHx2fHwodGhpcy5jYWxsYmFja3Muc2V0KHAsZiksdGhpcy5hbGxLZXlzLmFkZChwLnNwbGl0KCIrIikuYXQoLTEpKSl9fWNhdGNoKHQpe2QuZSh0KX1maW5hbGx5e2QuZigpfX19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9fXJldHVybiBkKHQsW3trZXk6ImV4ZWMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5hbGxLZXlzLmhhcyhlLmtleSkpe3ZhciByPXRoaXMuY2FsbGJhY2tzLmdldChjKHRoaXMsTyxNKS5jYWxsKHRoaXMsZSkpO3ImJihyLmJpbmQodCkoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9fX1dKSx0fSgpO2Z1bmN0aW9uIE0odCl7dC5hbHRLZXkmJnRoaXMuYnVmZmVyLnB1c2goImFsdCIpLHQuY3RybEtleSYmdGhpcy5idWZmZXIucHVzaCgiY3RybCIpLHQubWV0YUtleSYmdGhpcy5idWZmZXIucHVzaCgibWV0YSIpLHQuc2hpZnRLZXkmJnRoaXMuYnVmZmVyLnB1c2goInNoaWZ0IiksdGhpcy5idWZmZXIucHVzaCh0LmtleSk7dmFyIGU9dGhpcy5idWZmZXIuam9pbigiKyIpO3JldHVybiB0aGlzLmJ1ZmZlci5sZW5ndGg9MCxlfWUuS2V5Ym9hcmRNYW5hZ2VyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpfXJldHVybiBkKHQsW3trZXk6Il9jb2xvcnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PW5ldyBNYXAoW1siQ2FudmFzVGV4dCIsbnVsbF0sWyJDYW52YXMiLG51bGxdXSk7cmV0dXJuKDAsYS5nZXRDb2xvclZhbHVlcykodCksKDAsaS5zaGFkb3cpKHRoaXMsIl9jb2xvcnMiLHQpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHI9KDAsYS5nZXRSR0IpKGUpO2lmKCF3aW5kb3cubWF0Y2hNZWRpYSgiKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSkiKS5tYXRjaGVzKXJldHVybiByO3ZhciBuLGk9Xyh0aGlzLl9jb2xvcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bChuLnZhbHVlLDIpLHM9b1swXTtpZihvWzFdLmV2ZXJ5KChmdW5jdGlvbih0LGUpe3JldHVybiB0PT09cltlXX0pKSlyZXR1cm4gdC5fY29sb3JzTWFwcGluZy5nZXQocyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfXJldHVybiByfX0se2tleToiZ2V0SGV4Q29kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29sb3JzLmdldCh0KTtyZXR1cm4gZT9pLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxvKGUpKTp0fX1dKSx0fSgpO2UuQ29sb3JNYW5hZ2VyPVIscyhSLCJfY29sb3JzTWFwcGluZyIsbmV3IE1hcChbWyJDYW52YXNUZXh0IixbMCwwLDBdXSxbIkNhbnZhcyIsWzI1NSwyNTUsMjU1XV1dKSk7dmFyIEk9bmV3IFdlYWtNYXAsaj1uZXcgV2Vha01hcCxMPW5ldyBXZWFrTWFwLEQ9bmV3IFdlYWtNYXAsTj1uZXcgV2Vha01hcCxVPW5ldyBXZWFrTWFwLFc9bmV3IFdlYWtNYXAsRz1uZXcgV2Vha01hcCxCPW5ldyBXZWFrTWFwLHE9bmV3IFdlYWtNYXAsSD1uZXcgV2Vha01hcCx6PW5ldyBXZWFrTWFwLFY9bmV3IFdlYWtNYXAsWD1uZXcgV2Vha01hcCxZPW5ldyBXZWFrTWFwLEs9bmV3IFdlYWtNYXAsSj1uZXcgV2Vha01hcCxRPW5ldyBXZWFrTWFwLCQ9bmV3IFdlYWtNYXAsWj1uZXcgV2Vha01hcCx0dD1uZXcgV2Vha01hcCxldD1uZXcgV2Vha01hcCxydD1uZXcgV2Vha01hcCxudD1uZXcgV2Vha1NldCxpdD1uZXcgV2Vha1NldCxhdD1uZXcgV2Vha1NldCxvdD1uZXcgV2Vha1NldCxzdD1uZXcgV2Vha1NldCxsdD1uZXcgV2Vha1NldCx1dD1uZXcgV2Vha1NldCxjdD1uZXcgV2Vha1NldCxodD1uZXcgV2Vha1NldCxmdD1uZXcgV2Vha1NldCxkdD1uZXcgV2Vha1NldCxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe2godGhpcyx0KSx1KHRoaXMsZHQpLHUodGhpcyxmdCksdSh0aGlzLGh0KSx1KHRoaXMsY3QpLHUodGhpcyx1dCksdSh0aGlzLGx0KSx1KHRoaXMsc3QpLHUodGhpcyxvdCksdSh0aGlzLGF0KSx1KHRoaXMsaXQpLHUodGhpcyxudCksdih0aGlzLEkse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsaix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHYodGhpcyxMLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdih0aGlzLEQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsTix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEN9KSx2KHRoaXMsVSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLHYodGhpcyxXLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdih0aGlzLEcse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBTZXR9KSx2KHRoaXMsQix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLHYodGhpcyxxLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgU30pLHYodGhpcyxILHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHYodGhpcyx6LHt3cml0YWJsZTohMCx2YWx1ZTppLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkV9KSx2KHRoaXMsVix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFNldH0pLHYodGhpcyxYLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmNvcHkuYmluZCh0aGlzKX0pLHYodGhpcyxZLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmN1dC5iaW5kKHRoaXMpfSksdih0aGlzLEsse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMucGFzdGUuYmluZCh0aGlzKX0pLHYodGhpcyxKLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmtleWRvd24uYmluZCh0aGlzKX0pLHYodGhpcyxRLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uRWRpdGluZ0FjdGlvbi5iaW5kKHRoaXMpfSksdih0aGlzLCQse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMub25QYWdlQ2hhbmdpbmcuYmluZCh0aGlzKX0pLHYodGhpcyxaLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uU2NhbGVDaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLHR0LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uUm90YXRpb25DaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLGV0LHt3cml0YWJsZTohMCx2YWx1ZTp7aXNFZGl0aW5nOiExLGlzRW1wdHk6ITAsaGFzU29tZXRoaW5nVG9VbmRvOiExLGhhc1NvbWV0aGluZ1RvUmVkbzohMSxoYXNTZWxlY3RlZEVkaXRvcjohMX19KSx2KHRoaXMscnQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxtKHRoaXMscnQsZSksbSh0aGlzLEIsciksZyh0aGlzLEIpLl9vbigiZWRpdGluZ2FjdGlvbiIsZyh0aGlzLFEpKSxnKHRoaXMsQikuX29uKCJwYWdlY2hhbmdpbmciLGcodGhpcywkKSksZyh0aGlzLEIpLl9vbigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29uKCJyb3RhdGlvbmNoYW5naW5nIixnKHRoaXMsdHQpKSxtKHRoaXMsRCxuKSx0aGlzLnZpZXdQYXJhbWV0ZXJzPXtyZWFsU2NhbGU6YS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMscm90YXRpb246MH19cmV0dXJuIGQodCxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXtjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksZyh0aGlzLEIpLl9vZmYoImVkaXRpbmdhY3Rpb24iLGcodGhpcyxRKSksZyh0aGlzLEIpLl9vZmYoInBhZ2VjaGFuZ2luZyIsZyh0aGlzLCQpKSxnKHRoaXMsQikuX29mZigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29mZigicm90YXRpb25jaGFuZ2luZyIsZyh0aGlzLHR0KSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGVzdHJveSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxMKS5jbGVhcigpLGcodGhpcyxqKS5jbGVhcigpLGcodGhpcyxHKS5jbGVhcigpLG0odGhpcyxJLG51bGwpLGcodGhpcyxWKS5jbGVhcigpLGcodGhpcyxOKS5kZXN0cm95KCl9fSx7a2V5OiJvblBhZ2VDaGFuZ2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5wYWdlTnVtYmVyO20odGhpcyxVLGUtMSl9fSx7a2V5OiJmb2N1c01haW5Db250YWluZXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zyh0aGlzLHJ0KS5mb2N1cygpfX0se2tleToiYWRkU2hvdWxkUmVzY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEcpLmFkZCh0KX19LHtrZXk6InJlbW92ZVNob3VsZFJlc2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxHKS5kZWxldGUodCl9fSx7a2V5OiJvblNjYWxlQ2hhbmdpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2NhbGU7dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucmVhbFNjYWxlPWUqYS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFM7dmFyIHIsbj1fKGcodGhpcyxHKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUub25TY2FsZUNoYW5naW5nKCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25Sb3RhdGlvbkNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnBhZ2VzUm90YXRpb247dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucm90YXRpb249ZX19LHtrZXk6ImFkZFRvQW5ub3RhdGlvblN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3QuaXNFbXB0eSgpfHwhZyh0aGlzLEQpfHxnKHRoaXMsRCkuaGFzKHQuaWQpfHxnKHRoaXMsRCkuc2V0VmFsdWUodC5pZCx0KX19LHtrZXk6ImNvcHkiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQucHJldmVudERlZmF1bHQoKSxnKHRoaXMsSSkmJmcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpLHRoaXMuaGFzU2VsZWN0aW9uKXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsVikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLmlzRW1wdHkoKXx8ci5wdXNoKGkuc2VyaWFsaXplKCkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX0wIT09ci5sZW5ndGgmJnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJhcHBsaWNhdGlvbi9wZGZqcyIsSlNPTi5zdHJpbmdpZnkocikpfX19LHtrZXk6ImN1dCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jb3B5KHQpLHRoaXMuZGVsZXRlKCl9fSx7a2V5OiJwYXN0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9dC5jbGlwYm9hcmREYXRhLmdldERhdGEoImFwcGxpY2F0aW9uL3BkZmpzIik7aWYocil7dHJ5e3I9SlNPTi5wYXJzZShyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCgwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX1pZihBcnJheS5pc0FycmF5KHIpKXt0aGlzLnVuc2VsZWN0QWxsKCk7dmFyIG49Zyh0aGlzLEwpLmdldChnKHRoaXMsVSkpO3RyeXt2YXIgYSxvPVtdLHM9XyhyKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1uLmRlc2VyaWFsaXplKGwpO2lmKCF1KXJldHVybjtvLnB1c2godSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9bzt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTtjKGUsaHQsa3QpLmNhbGwoZSxuKX1jKGUsZHQseHQpLmNhbGwoZSxvKX0sdW5kbzpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9bzt0PGUubGVuZ3RoO3QrKyllW3RdLnJlbW92ZSgpfSxtdXN0RXhlYzohMH0pfWNhdGNoKHQpeygwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX19fX19LHtrZXk6ImtleWRvd24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByO251bGwhPT0ocj10aGlzLmdldEFjdGl2ZSgpKSYmdm9pZCAwIT09ciYmci5zaG91bGRHZXRLZXlib2FyZEV2ZW50cygpfHx0Ll9rZXlib2FyZE1hbmFnZXIuZXhlYyh0aGlzLGUpfX0se2tleToib25FZGl0aW5nQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtbInVuZG8iLCJyZWRvIiwiZGVsZXRlIiwic2VsZWN0QWxsIl0uaW5jbHVkZXModC5uYW1lKSYmdGhpc1t0Lm5hbWVdKCl9fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q/KGModGhpcyxudCx2dCkuY2FsbCh0aGlzKSxjKHRoaXMsYXQsbXQpLmNhbGwodGhpcyksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2lzRWRpdGluZzpnKHRoaXMseikhPT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyksaGFzU29tZXRoaW5nVG9VbmRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1VuZG8oKSxoYXNTb21ldGhpbmdUb1JlZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvUmVkbygpLGhhc1NlbGVjdGVkRWRpdG9yOiExfSkpOihjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksYyh0aGlzLG90LGd0KS5jYWxsKHRoaXMpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtpc0VkaXRpbmc6ITF9KSl9fSx7a2V5OiJyZWdpc3RlckVkaXRvclR5cGVzIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZyh0aGlzLFcpKXttKHRoaXMsVyx0KTt2YXIgZSxyPV8oZyh0aGlzLFcpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7Yyh0aGlzLGx0LF90KS5jYWxsKHRoaXMsbi5kZWZhdWx0UHJvcGVydGllc1RvVXBkYXRlKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX19LHtrZXk6ImdldElkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMscSkuZ2V0SWQoKX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcyxMKS5nZXQoZyh0aGlzLFUpKX19LHtrZXk6ImN1cnJlbnRQYWdlSW5kZXgiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVSl9fSx7a2V5OiJhZGRMYXllciIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEwpLnNldCh0LnBhZ2VJbmRleCx0KSxnKHRoaXMsSCk/dC5lbmFibGUoKTp0LmRpc2FibGUoKX19LHtrZXk6InJlbW92ZUxheWVyIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsTCkuZGVsZXRlKHQucGFnZUluZGV4KX19LHtrZXk6InVwZGF0ZU1vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG0odGhpcyx6LHQpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUpdGhpcy5zZXRFZGl0aW5nU3RhdGUoITEpLGModGhpcyxjdCxBdCkuY2FsbCh0aGlzKTtlbHNle3RoaXMuc2V0RWRpdGluZ1N0YXRlKCEwKSxjKHRoaXMsdXQsd3QpLmNhbGwodGhpcyk7dmFyIGUscj1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUudXBkYXRlTW9kZSh0KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fX0se2tleToidXBkYXRlVG9vbGJhciIsdmFsdWU6ZnVuY3Rpb24odCl7dCE9PWcodGhpcyx6KSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJzd2l0Y2hhbm5vdGF0aW9uZWRpdG9ybW9kZSIse3NvdXJjZTp0aGlzLG1vZGU6dH0pfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKGcodGhpcyxXKSl7dmFyIHIsbj1fKGcodGhpcyxWKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUudXBkYXRlUGFyYW1zKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9dmFyIGksYT1fKGcodGhpcyxXKSk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUudXBkYXRlRGVmYXVsdFBhcmFtcyh0LGUpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fSx7a2V5OiJnZXRFZGl0b3JzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLnBhZ2VJbmRleD09PXQmJnIucHVzaChpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fSx7a2V5OiJnZXRFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsaikuZ2V0KHQpfX0se2tleToiYWRkRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsaikuc2V0KHQuaWQsdCl9fSx7a2V5OiJyZW1vdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2codGhpcyxqKS5kZWxldGUodC5pZCksdGhpcy51bnNlbGVjdCh0KSxudWxsPT09KGU9Zyh0aGlzLEQpKXx8dm9pZCAwPT09ZXx8ZS5yZW1vdmUodC5pZCl9fSx7a2V5OiJzZXRBY3RpdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxJKSE9PXQmJihtKHRoaXMsSSx0KSx0JiZjKHRoaXMsbHQsX3QpLmNhbGwodGhpcyx0LnByb3BlcnRpZXNUb1VwZGF0ZSkpfX0se2tleToidG9nZ2xlU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKGcodGhpcyxWKS5oYXModCkpcmV0dXJuIGcodGhpcyxWKS5kZWxldGUodCksdC51bnNlbGVjdCgpLHZvaWQgYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NlbGVjdGVkRWRpdG9yOnRoaXMuaGFzU2VsZWN0aW9ufSk7Zyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7biE9PXQmJm4udW5zZWxlY3QoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9Zyh0aGlzLFYpLmNsZWFyKCksZyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6ImlzU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsVikuaGFzKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3QudW5zZWxlY3QoKSxnKHRoaXMsVikuZGVsZXRlKHQpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjp0aGlzLmhhc1NlbGVjdGlvbn0pfX0se2tleToiaGFzU2VsZWN0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PWcodGhpcyxWKS5zaXplfX0se2tleToidW5kbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikudW5kbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvVW5kbygpLGhhc1NvbWV0aGluZ1RvUmVkbzohMCxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikucmVkbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86ITAsaGFzU29tZXRoaW5nVG9SZWRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1JlZG8oKSxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxOKS5hZGQodCksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NvbWV0aGluZ1RvVW5kbzohMCxoYXNTb21ldGhpbmdUb1JlZG86ITEsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyl9KX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuY29tbWl0T3JSZW1vdmUoKSx0aGlzLmhhc1NlbGVjdGlvbil7dmFyIGU9byhnKHRoaXMsVikpO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe3ZhciB0LHI9XyhlKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspdC52YWx1ZS5yZW1vdmUoKX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19LHVuZG86ZnVuY3Rpb24oKXt2YXIgcixuPV8oZSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2ModCxodCxrdCkuY2FsbCh0LGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19LG11c3RFeGVjOiEwfSl9fX0se2tleToiY29tbWl0T3JSZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PWcodGhpcyxJKSl8fHZvaWQgMD09PXR8fHQuY29tbWl0T3JSZW1vdmUoKX19LHtrZXk6InNlbGVjdEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS5jb21taXQoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1jKHRoaXMsZHQseHQpLmNhbGwodGhpcyxnKHRoaXMsaikudmFsdWVzKCkpfX0se2tleToidW5zZWxlY3RBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoZyh0aGlzLEkpKWcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpO2Vsc2UgaWYoMCE9PWcodGhpcyxWKS5zaXplKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS51bnNlbGVjdCgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxWKS5jbGVhcigpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjohMX0pfX19LHtrZXk6ImlzQWN0aXZlIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLEkpPT09dH19LHtrZXk6ImdldEFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLEkpfX0se2tleToiZ2V0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLHopfX1dKSx0fSgpO2Z1bmN0aW9uIHZ0KCl7Zyh0aGlzLHJ0KS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIHl0KCl7Zyh0aGlzLHJ0KS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIG10KCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsZyh0aGlzLFgpKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjdXQiLGcodGhpcyxZKSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicGFzdGUiLGcodGhpcyxLKSl9ZnVuY3Rpb24gZ3QoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb3B5IixnKHRoaXMsWCkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImN1dCIsZyh0aGlzLFkpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwYXN0ZSIsZyh0aGlzLEspKX1mdW5jdGlvbiBidCh0KXt2YXIgZT10aGlzO09iamVjdC5lbnRyaWVzKHQpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciByPWwodCwyKSxuPXJbMF0saT1yWzFdO3JldHVybiBnKGUsZXQpW25dIT09aX0pKSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9yc3RhdGVzY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6T2JqZWN0LmFzc2lnbihnKHRoaXMsZXQpLHQpfSl9ZnVuY3Rpb24gX3QodCl7Zyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9ycGFyYW1zY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6dH0pfWZ1bmN0aW9uIHd0KCl7aWYoIWcodGhpcyxIKSl7bSh0aGlzLEgsITApO3ZhciB0LGU9XyhnKHRoaXMsTCkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24gQXQoKXtpZih0aGlzLnVuc2VsZWN0QWxsKCksZyh0aGlzLEgpKXttKHRoaXMsSCwhMSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGlzYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24ga3QodCl7dmFyIGU9Zyh0aGlzLEwpLmdldCh0LnBhZ2VJbmRleCk7ZT9lLmFkZE9yUmVidWlsZCh0KTp0aGlzLmFkZEVkaXRvcih0KX1mdW5jdGlvbiBTdCgpe2lmKDA9PT1nKHRoaXMsaikuc2l6ZSlyZXR1cm4hMDtpZigxPT09Zyh0aGlzLGopLnNpemUpe3ZhciB0LGU9XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOylyZXR1cm4gdC52YWx1ZS5pc0VtcHR5KCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fXJldHVybiExfWZ1bmN0aW9uIHh0KHQpe2codGhpcyxWKS5jbGVhcigpO3ZhciBlLHI9Xyh0KTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7bi5pc0VtcHR5KCl8fChnKHRoaXMsVikuYWRkKG4pLG4uc2VsZWN0KCkpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1jKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX1lLkFubm90YXRpb25FZGl0b3JVSU1hbmFnZXI9cHQscyhwdCwiX2tleWJvYXJkTWFuYWdlciIsbmV3IEYoW1tbImN0cmwrYSIsIm1hYyttZXRhK2EiXSxwdC5wcm90b3R5cGUuc2VsZWN0QWxsXSxbWyJjdHJsK3oiLCJtYWMrbWV0YSt6Il0scHQucHJvdG90eXBlLnVuZG9dLFtbImN0cmwreSIsImN0cmwrc2hpZnQrWiIsIm1hYyttZXRhK3NoaWZ0K1oiXSxwdC5wcm90b3R5cGUucmVkb10sW1siQmFja3NwYWNlIiwiYWx0K0JhY2tzcGFjZSIsImN0cmwrQmFja3NwYWNlIiwic2hpZnQrQmFja3NwYWNlIiwibWFjK0JhY2tzcGFjZSIsIm1hYythbHQrQmFja3NwYWNlIiwibWFjK2N0cmwrQmFja3NwYWNlIiwiRGVsZXRlIiwiY3RybCtEZWxldGUiLCJzaGlmdCtEZWxldGUiXSxwdC5wcm90b3R5cGUuZGVsZXRlXSxbWyJFc2NhcGUiLCJtYWMrRXNjYXBlIl0scHQucHJvdG90eXBlLnVuc2VsZWN0QWxsXV0pKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlN0YXRUaW1lcj1lLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbj1lLlBpeGVsc1BlckluY2g9ZS5QYWdlVmlld3BvcnQ9ZS5QREZEYXRlU3RyaW5nPWUuRE9NU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5ET01TVkdGYWN0b3J5PWUuRE9NQ2FudmFzRmFjdG9yeT1lLkRPTUNNYXBSZWFkZXJGYWN0b3J5PWUuQW5ub3RhdGlvblByZWZpeD12b2lkIDAsZS5kZXByZWNhdGVkPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKCJEZXByZWNhdGVkIEFQSSB1c2FnZTogIit0KX0sZS5nZXRDb2xvclZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7ZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5kKGUpO3ZhciByLG49cyh0LmtleXMoKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2Uuc3R5bGUuY29sb3I9aTt2YXIgYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5jb2xvcjt0LnNldChpLEkoYSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLnJlbW92ZSgpfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUcmFuc2Zvcm0oKTtyZXR1cm5bZS5hLGUuYixlLmMsZS5kLGUuZSxlLmZdfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VHJhbnNmb3JtKCkuaW52ZXJ0U2VsZigpO3JldHVybltlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZl19LGUuZ2V0RmlsZW5hbWVGcm9tVXJsPWZ1bmN0aW9uKHQpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpe3ZhciBlPXQuc3BsaXQoL1sjP10vLDEpO3Q9KDEsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0ocj1lKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQsMDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwxIT09cy5sZW5ndGgpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHIpfHxsKHIsMSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSlbMF19dmFyIHI7cmV0dXJuIHQuc3Vic3RyaW5nKHQubGFzdEluZGV4T2YoIi8iKSsxKX0sZS5nZXRQZGZGaWxlbmFtZUZyb21Vcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJkb2N1bWVudC5wZGYiO2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gZTtpZihDKHQpKXJldHVybigwLGkud2FybikoJ2dldFBkZkZpbGVuYW1lRnJvbVVybDogaWdub3JlICJkYXRhOiItVVJMIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLicpLGU7dmFyIHI9L1teLz8jPV0rXC5wZGZcYig/IS4qXC5wZGZcYikvaSxuPS9eKD86KD86W146XSs6KT9cL1wvW14vXSspPyhbXj8jXSopKFw/W14jXSopPygjLiopPyQvLmV4ZWModCksYT1yLmV4ZWMoblsxXSl8fHIuZXhlYyhuWzJdKXx8ci5leGVjKG5bM10pO2lmKGEmJihhPWFbMF0pLmluY2x1ZGVzKCIlIikpdHJ5e2E9ci5leGVjKGRlY29kZVVSSUNvbXBvbmVudChhKSlbMF19Y2F0Y2godCl7fXJldHVybiBhfHxlfSxlLmdldFJHQj1JLGUuZ2V0WGZhUGFnZVZpZXdwb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zY2FsZSxuPXZvaWQgMD09PXI/MTpyLGk9ZS5yb3RhdGlvbixhPXZvaWQgMD09PWk/MDppLG89dC5hdHRyaWJ1dGVzLnN0eWxlLHM9by53aWR0aCxsPW8uaGVpZ2h0LHU9WzAsMCxwYXJzZUludChzKSxwYXJzZUludChsKV07cmV0dXJuIG5ldyBQKHt2aWV3Qm94OnUsc2NhbGU6bixyb3RhdGlvbjphfSl9LGUuaXNEYXRhU2NoZW1lPUMsZS5pc1BkZkZpbGU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYvXC5wZGYkL2kudGVzdCh0KX0sZS5pc1ZhbGlkRmV0Y2hVcmw9TSxlLmxvYWRTY3JpcHQ9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aS5zcmM9dCxpLm9ubG9hZD1mdW5jdGlvbih0KXtlJiZpLnJlbW92ZSgpLHIodCl9LGkub25lcnJvcj1mdW5jdGlvbigpe24obmV3IEVycm9yKCJDYW5ub3QgbG9hZCBzY3JpcHQgYXQ6ICIuY29uY2F0KGkuc3JjKSkpfSwoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmQoaSl9KSl9LGUuc2V0TGF5ZXJEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPSEoYXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pfHxhcmd1bWVudHNbM107aWYoZSBpbnN0YW5jZW9mIFApe3ZhciBpPWUucmF3RGltcyxhPWkucGFnZVdpZHRoLG89aS5wYWdlSGVpZ2h0LHM9dC5zdHlsZSxsPSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChhLCJweCkiKSx1PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChvLCJweCkiKTtyJiZlLnJvdGF0aW9uJTE4MCE9MD8ocy53aWR0aD11LHMuaGVpZ2h0PWwpOihzLndpZHRoPWwscy5oZWlnaHQ9dSl9biYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsZS5yb3RhdGlvbil9O3ZhciBuPXIoMTM4KSxpPXIoMSk7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxzPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIscykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLHMsbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09byhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LHMsbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQscyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LHMoYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LHMsbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W3NdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbyh0KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKHQpO2lmKGUpe3ZhciBpPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09byhlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fSh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0scCh0KX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxiKG4ua2V5KSxuKX19ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybihlPWIoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gYih0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW8oZSk/ZTpTdHJpbmcoZSl9ZS5Bbm5vdGF0aW9uUHJlZml4PSJwZGZqc19pbnRlcm5hbF9pZF8iO3ZhciBfPXkoKGZ1bmN0aW9uIHQoKXttKHRoaXMsdCl9KSk7ZS5QaXhlbHNQZXJJbmNoPV8sZyhfLCJDU1MiLDk2KSxnKF8sIlBERiIsNzIpLGcoXywiUERGX1RPX0NTU19VTklUUyIsXy5DU1MvXy5QREYpO3ZhciB3PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXt2YXIgdCxuPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtyZXR1cm4gbSh0aGlzLHIpLCh0PWUuY2FsbCh0aGlzKSkuX2RvY3VtZW50PWksdH1yZXR1cm4geShyLFt7a2V5OiJfY3JlYXRlQ2FudmFzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiByLndpZHRoPXQsci5oZWlnaHQ9ZSxyfX1dKSxyfShuLkJhc2VDYW52YXNGYWN0b3J5KTtmdW5jdGlvbiBBKHQpe3JldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrKCl7dmFyIHQ7cmV0dXJuIHQ9YSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsbixvPWFyZ3VtZW50cztyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9by5sZW5ndGg+MSYmdm9pZCAwIT09b1sxXSYmb1sxXSwhTShlLGRvY3VtZW50LmJhc2VVUkkpKXt0Lm5leHQ9MjE7YnJlYWt9cmV0dXJuIHQubmV4dD00LGZldGNoKGUpO2Nhc2UgNDppZigobj10LnNlbnQpLm9rKXt0Lm5leHQ9NzticmVha310aHJvdyBuZXcgRXJyb3Iobi5zdGF0dXNUZXh0KTtjYXNlIDc6aWYoIXIpe3QubmV4dD0xNTticmVha31yZXR1cm4gdC50MT1VaW50OEFycmF5LHQubmV4dD0xMSxuLmFycmF5QnVmZmVyKCk7Y2FzZSAxMTp0LnQyPXQuc2VudCx0LnQwPW5ldyB0LnQxKHQudDIpLHQubmV4dD0yMDticmVhaztjYXNlIDE1OnJldHVybiB0LnQzPWkuc3RyaW5nVG9CeXRlcyx0Lm5leHQ9MTgsbi50ZXh0KCk7Y2FzZSAxODp0LnQ0PXQuc2VudCx0LnQwPSgwLHQudDMpKHQudDQpO2Nhc2UgMjA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQudDApO2Nhc2UgMjE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe3ZhciBhPW5ldyBYTUxIdHRwUmVxdWVzdDthLm9wZW4oIkdFVCIsZSwhMCksciYmKGEucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIpLGEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoYS5yZWFkeVN0YXRlPT09WE1MSHR0cFJlcXVlc3QuRE9ORSl7dmFyIGU7aWYoKDIwMD09PWEuc3RhdHVzfHwwPT09YS5zdGF0dXMpJiYociYmYS5yZXNwb25zZT9lPW5ldyBVaW50OEFycmF5KGEucmVzcG9uc2UpOiFyJiZhLnJlc3BvbnNlVGV4dCYmKGU9KDAsaS5zdHJpbmdUb0J5dGVzKShhLnJlc3BvbnNlVGV4dCkpLGUpKXJldHVybiB2b2lkIHQoZSk7bihuZXcgRXJyb3IoYS5zdGF0dXNUZXh0KSl9fSxhLnNlbmQobnVsbCl9KSkpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSxrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9LGsuYXBwbHkodGhpcyxhcmd1bWVudHMpfWUuRE9NQ2FudmFzRmFjdG9yeT13O3ZhciBTPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEEodCx0aGlzLmlzQ29tcHJlc3NlZCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJue2NNYXBEYXRhOnQsY29tcHJlc3Npb25UeXBlOmV9fSkpfX1dKSxyfShuLkJhc2VDTWFwUmVhZGVyRmFjdG9yeSk7ZS5ET01DTWFwUmVhZGVyRmFjdG9yeT1TO3ZhciB4PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBKHQsITApfX1dKSxyfShuLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT14O3ZhciBFPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0KX19XSkscn0obi5CYXNlU1ZHRmFjdG9yeSk7ZS5ET01TVkdGYWN0b3J5PUU7dmFyIFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUudmlld0JveCxuPWUuc2NhbGUsaT1lLnJvdGF0aW9uLGE9ZS5vZmZzZXRYLG89dm9pZCAwPT09YT8wOmEscz1lLm9mZnNldFksbD12b2lkIDA9PT1zPzA6cyx1PWUuZG9udEZsaXAsYz12b2lkIDAhPT11JiZ1O20odGhpcyx0KSx0aGlzLnZpZXdCb3g9cix0aGlzLnNjYWxlPW4sdGhpcy5yb3RhdGlvbj1pLHRoaXMub2Zmc2V0WD1vLHRoaXMub2Zmc2V0WT1sO3ZhciBoLGYsZCxwLHYseSxnLGIsXz0oclsyXStyWzBdKS8yLHc9KHJbM10rclsxXSkvMjtzd2l0Y2goKGklPTM2MCk8MCYmKGkrPTM2MCksaSl7Y2FzZSAxODA6aD0tMSxmPTAsZD0wLHA9MTticmVhaztjYXNlIDkwOmg9MCxmPTEsZD0xLHA9MDticmVhaztjYXNlIDI3MDpoPTAsZj0tMSxkPS0xLHA9MDticmVhaztjYXNlIDA6aD0xLGY9MCxkPTAscD0tMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiUGFnZVZpZXdwb3J0OiBJbnZhbGlkIHJvdGF0aW9uLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAgZGVncmVlcy4iKX1jJiYoZD0tZCxwPS1wKSwwPT09aD8odj1NYXRoLmFicyh3LXJbMV0pKm4rbyx5PU1hdGguYWJzKF8tclswXSkqbitsLGc9KHJbM10tclsxXSkqbixiPShyWzJdLXJbMF0pKm4pOih2PU1hdGguYWJzKF8tclswXSkqbitvLHk9TWF0aC5hYnMody1yWzFdKSpuK2wsZz0oclsyXS1yWzBdKSpuLGI9KHJbM10tclsxXSkqbiksdGhpcy50cmFuc2Zvcm09W2gqbixmKm4sZCpuLHAqbix2LWgqbipfLWQqbip3LHktZipuKl8tcCpuKnddLHRoaXMud2lkdGg9Zyx0aGlzLmhlaWdodD1ifXJldHVybiB5KHQsW3trZXk6InJhd0RpbXMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMudmlld0JveDtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywicmF3RGltcyIse3BhZ2VXaWR0aDp0WzJdLXRbMF0scGFnZUhlaWdodDp0WzNdLXRbMV0scGFnZVg6dFswXSxwYWdlWTp0WzFdfSl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30scj1lLnNjYWxlLG49dm9pZCAwPT09cj90aGlzLnNjYWxlOnIsaT1lLnJvdGF0aW9uLGE9dm9pZCAwPT09aT90aGlzLnJvdGF0aW9uOmksbz1lLm9mZnNldFgscz12b2lkIDA9PT1vP3RoaXMub2Zmc2V0WDpvLGw9ZS5vZmZzZXRZLHU9dm9pZCAwPT09bD90aGlzLm9mZnNldFk6bCxjPWUuZG9udEZsaXAsaD12b2lkIDAhPT1jJiZjO3JldHVybiBuZXcgdCh7dmlld0JveDp0aGlzLnZpZXdCb3guc2xpY2UoKSxzY2FsZTpuLHJvdGF0aW9uOmEsb2Zmc2V0WDpzLG9mZnNldFk6dSxkb250RmxpcDpofSl9fSx7a2V5OiJjb252ZXJ0VG9WaWV3cG9ydFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3QsZV0sdGhpcy50cmFuc2Zvcm0pfX0se2tleToiY29udmVydFRvVmlld3BvcnRSZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWkuVXRpbC5hcHBseVRyYW5zZm9ybShbdFswXSx0WzFdXSx0aGlzLnRyYW5zZm9ybSkscj1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFszXV0sdGhpcy50cmFuc2Zvcm0pO3JldHVybltlWzBdLGVbMV0sclswXSxyWzFdXX19LHtrZXk6ImNvbnZlcnRUb1BkZlBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlJbnZlcnNlVHJhbnNmb3JtKFt0LGVdLHRoaXMudHJhbnNmb3JtKX19XSksdH0oKTtlLlBhZ2VWaWV3cG9ydD1QO3ZhciBUPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO3JldHVybiBtKHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIikpLnR5cGU9bixpLmV4dHJhRGVsYXk9YSxpfXJldHVybiB5KHIpfShpLkJhc2VFeGNlcHRpb24pO2Z1bmN0aW9uIEModCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MDtyPGUmJiIiPT09dFtyXS50cmltKCk7KXIrKztyZXR1cm4iZGF0YToiPT09dC5zdWJzdHJpbmcocixyKzUpLnRvTG93ZXJDYXNlKCl9ZS5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249VDt2YXIgTyxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe20odGhpcyx0KSxnKHRoaXMsInN0YXJ0ZWQiLE9iamVjdC5jcmVhdGUobnVsbCkpLGcodGhpcywidGltZXMiLFtdKX1yZXR1cm4geSh0LFt7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZCYmKDAsaS53YXJuKSgiVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAiLmNvbmNhdCh0KSksdGhpcy5zdGFydGVkW3RdPURhdGUubm93KCl9fSx7a2V5OiJ0aW1lRW5kIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZHx8KDAsaS53YXJuKSgiVGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZm9yICIuY29uY2F0KHQpKSx0aGlzLnRpbWVzLnB1c2goe25hbWU6dCxzdGFydDp0aGlzLnN0YXJ0ZWRbdF0sZW5kOkRhdGUubm93KCl9KSxkZWxldGUgdGhpcy5zdGFydGVkW3RdfX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZT1bXSxyPTAsbj1zKHRoaXMudGltZXMpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZS5uYW1lO3I9TWF0aC5tYXgoaS5sZW5ndGgscil9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXZhciBhLG89cyh0aGlzLnRpbWVzKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1sLm5hbWUsYz1sLnN0YXJ0LGg9bC5lbmQ7ZS5wdXNoKCIiLmNvbmNhdCh1LnBhZEVuZChyKSwiICIpLmNvbmNhdChoLWMsIm1zXG4iKSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiBlLmpvaW4oIiIpfX1dKSx0fSgpO2Z1bmN0aW9uIE0odCxlKXt0cnl7dmFyIHI9KGU/bmV3IFVSTCh0LGUpOm5ldyBVUkwodCkpLnByb3RvY29sO3JldHVybiJodHRwOiI9PT1yfHwiaHR0cHM6Ij09PXJ9Y2F0Y2godCl7cmV0dXJuITF9fWUuU3RhdFRpbWVyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bSh0aGlzLHQpfXJldHVybiB5KHQsbnVsbCxbe2tleToidG9EYXRlT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdHx8InN0cmluZyIhPXR5cGVvZiB0KXJldHVybiBudWxsO098fChPPW5ldyBSZWdFeHAoIl5EOihcXGR7NH0pKFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFtafCt8LV0pPyhcXGR7Mn0pPyc/KFxcZHsyfSk/Jz8iKSk7dmFyIGU9Ty5leGVjKHQpO2lmKCFlKXJldHVybiBudWxsO3ZhciByPXBhcnNlSW50KGVbMV0sMTApLG49cGFyc2VJbnQoZVsyXSwxMCk7bj1uPj0xJiZuPD0xMj9uLTE6MDt2YXIgaT1wYXJzZUludChlWzNdLDEwKTtpPWk+PTEmJmk8PTMxP2k6MTt2YXIgYT1wYXJzZUludChlWzRdLDEwKTthPWE+PTAmJmE8PTIzP2E6MDt2YXIgbz1wYXJzZUludChlWzVdLDEwKTtvPW8+PTAmJm88PTU5P286MDt2YXIgcz1wYXJzZUludChlWzZdLDEwKTtzPXM+PTAmJnM8PTU5P3M6MDt2YXIgbD1lWzddfHwiWiIsdT1wYXJzZUludChlWzhdLDEwKTt1PXU+PTAmJnU8PTIzP3U6MDt2YXIgYz1wYXJzZUludChlWzldLDEwKXx8MDtyZXR1cm4gYz1jPj0wJiZjPD01OT9jOjAsIi0iPT09bD8oYSs9dSxvKz1jKToiKyI9PT1sJiYoYS09dSxvLT1jKSxuZXcgRGF0ZShEYXRlLlVUQyhyLG4saSxhLG8scykpfX1dKSx0fSgpO2Z1bmN0aW9uIEkodCl7aWYodC5zdGFydHNXaXRoKCIjIikpe3ZhciBlPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpO3JldHVyblsoMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZV19cmV0dXJuIHQuc3RhcnRzV2l0aCgicmdiKCIpP3Quc2xpY2UoNCwtMSkuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KX0pKTp0LnN0YXJ0c1dpdGgoInJnYmEoIik/dC5zbGljZSg1LC0xKS5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQpfSkpLnNsaWNlKDAsMyk6KCgwLGkud2FybikoJ05vdCBhIHZhbGlkIGNvbG9yIGZvcm1hdDogIicuY29uY2F0KHQsJyInKSksWzAsMCwwXSl9ZS5QREZEYXRlU3RyaW5nPVJ9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5CYXNlU1ZHRmFjdG9yeT1lLkJhc2VDYW52YXNGYWN0b3J5PWUuQmFzZUNNYXBSZWFkZXJGYWN0b3J5PXZvaWQgMDt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkoKXtpPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLGwpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PXMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8sbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLGwpfSkpfWwodS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe2EobyxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EobyxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PXModCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1zKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09cyhpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIGUmJnUodC5wcm90b3R5cGUsZSksciYmdSh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNhbnZhc0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHQ8PTB8fGU8PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbnZhcyBzaXplIik7dmFyIHI9dGhpcy5fY3JlYXRlQ2FudmFzKHQsZSk7cmV0dXJue2NhbnZhczpyLGNvbnRleHQ6ci5nZXRDb250ZXh0KCIyZCIpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbih0LGUscil7aWYoIXQuY2FudmFzKXRocm93IG5ldyBFcnJvcigiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWQiKTtpZihlPD0wfHxyPD0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjYW52YXMgc2l6ZSIpO3QuY2FudmFzLndpZHRoPWUsdC5jYW52YXMuaGVpZ2h0PXJ9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5jYW52YXMpdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgaXMgbm90IHNwZWNpZmllZCIpO3QuY2FudmFzLndpZHRoPTAsdC5jYW52YXMuaGVpZ2h0PTAsdC5jYW52YXM9bnVsbCx0LmNvbnRleHQ9bnVsbH19LHtrZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2NyZWF0ZUNhbnZhc2AgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZUNhbnZhc0ZhY3Rvcnk9aDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnIsYT1lLmlzQ29tcHJlc3NlZCxvPXZvaWQgMCE9PWEmJmE7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNNYXBSZWFkZXJGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pLHRoaXMuaXNDb21wcmVzc2VkPW99dmFyIGU7cmV0dXJuIGModCxbe2tleToiZmV0Y2giLHZhbHVlOihlPW8oaSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsYSxvLHM9dGhpcztyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9ZS5uYW1lLHRoaXMuYmFzZVVybCl7dC5uZXh0PTM7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdUaGUgQ01hcCAiYmFzZVVybCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB0aGUgImNNYXBVcmwiIGFuZCAiY01hcFBhY2tlZCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpO2Nhc2UgMzppZihyKXt0Lm5leHQ9NTticmVha310aHJvdyBuZXcgRXJyb3IoIkNNYXAgbmFtZSBtdXN0IGJlIHNwZWNpZmllZC4iKTtjYXNlIDU6cmV0dXJuIGE9dGhpcy5iYXNlVXJsK3IrKHRoaXMuaXNDb21wcmVzc2VkPyIuYmNtYXAiOiIiKSxvPXRoaXMuaXNDb21wcmVzc2VkP24uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlk6bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUsdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKGEsbykuY2F0Y2goKGZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGxvYWQgIi5jb25jYXQocy5pc0NvbXByZXNzZWQ/ImJpbmFyeSAiOiIiLCJDTWFwIGF0OiAiKS5jb25jYXQoYSkpfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBfZmV0Y2hEYXRhYCBjYWxsZWQuIil9fV0pLHR9KCk7ZS5CYXNlQ01hcFJlYWRlckZhY3Rvcnk9Zjt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnI7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pfXZhciBlO3JldHVybiBjKHQsW3trZXk6ImZldGNoIix2YWx1ZTooZT1vKGkoKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLG47cmV0dXJuIGkoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihyPWUuZmlsZW5hbWUsdGhpcy5iYXNlVXJsKXt0Lm5leHQ9MzticmVha310aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdGFuZGFyZCBmb250ICJiYXNlVXJsIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQsIGVuc3VyZSB0aGF0IHRoZSAic3RhbmRhcmRGb250RGF0YVVybCIgQVBJIHBhcmFtZXRlciBpcyBwcm92aWRlZC4nKTtjYXNlIDM6aWYocil7dC5uZXh0PTU7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJGb250IGZpbGVuYW1lIG11c3QgYmUgc3BlY2lmaWVkLiIpO2Nhc2UgNTpyZXR1cm4gbj0iIi5jb25jYXQodGhpcy5iYXNlVXJsKS5jb25jYXQociksdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKG4pLmNhdGNoKChmdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBsb2FkIGZvbnQgZGF0YSBhdDogIi5jb25jYXQobikpfSkpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2ZldGNoRGF0YWAgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNWR0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYodDw9MHx8ZTw9MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgU1ZHIGRpbWVuc2lvbnMiKTt2YXIgbj10aGlzLl9jcmVhdGVTVkcoInN2ZzpzdmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxyfHwobi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiIi5jb25jYXQodCwicHgiKSksbi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIiIuY29uY2F0KGUsInB4IikpKSxuLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxuLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiLmNvbmNhdCh0LCIgIikuY29uY2F0KGUpKSxufX0se2tleToiY3JlYXRlRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTVkcgZWxlbWVudCB0eXBlIik7cmV0dXJuIHRoaXMuX2NyZWF0ZVNWRyh0KX19LHtrZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYF9jcmVhdGVTVkdgIGNhbGxlZC4iKX19XSksdH0oKTtlLkJhc2VTVkdGYWN0b3J5PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigxKTtmdW5jdGlvbiBpKHQpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxpKHQpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09aSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1pKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxsPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuaDE9ZT80Mjk0OTY3Mjk1JmU6byx0aGlzLmgyPWU/NDI5NDk2NzI5NSZlOm99dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtlPW5ldyBVaW50OEFycmF5KDIqdC5sZW5ndGgpLHI9MDtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspe3ZhciBvPXQuY2hhckNvZGVBdChpKTtvPD0yNTU/ZVtyKytdPW86KGVbcisrXT1vPj4+OCxlW3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKHQpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KGU9dC5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGM9ci00KnUsaD1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCx1KSxmPTAsZD0wLHA9dGhpcy5oMSx2PXRoaXMuaDIseT0zNDMyOTE4MzUzLG09NDYxODQ1OTA3LGc9MTE2MDEsYj0xMzcxNSxfPTA7Xzx1O18rKykxJl8/cD01KihwPShwXj1mPShmPShmPShmPWhbX10pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2OnY9NSoodj0odl49ZD0oZD0oZD0oZD1oW19dKSp5JnN8ZCpnJmwpPDwxNXxkPj4+MTcpKm0mc3xkKmImbCk8PDEzfHY+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goZj0wLGMpe2Nhc2UgMzpmXj1lWzQqdSsyXTw8MTY7Y2FzZSAyOmZePWVbNCp1KzFdPDw4O2Nhc2UgMTpmPShmPShmPShmXj1lWzQqdV0pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsLDEmdT9wXj1mOnZePWZ9dGhpcy5oMT1wLHRoaXMuaDI9dn19LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmgxLGU9dGhpcy5oMjtyZXR1cm4gdD0zOTgxODA2Nzk3Kih0Xj1lPj4+MSkmc3wzNjA0NSp0JmwsdD00NDQ5ODQ0MDMqKHRePShlPTQyODM1NDM1MTEqZSZzfCgyOTUwMTYzNzk3KihlPDwxNnx0Pj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSp0JmwsKCh0Xj0oZT0zMzAxODgyMzY2KmUmc3woMzEyMDQzNzg5MyooZTw8MTZ8dD4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsoZT4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZhKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NdXJtdXJIYXNoM182ND11fSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRm9udExvYWRlcj1lLkZvbnRGYWNlT2JqZWN0PXZvaWQgMDt2YXIgbj1yKDEpLGk9cigzKTtmdW5jdGlvbiBhKHQpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxhKHQpfWZ1bmN0aW9uIG8oKXtvPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30scz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLHMpJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sbyxzLGwpe3ZhciB1PWYodFtuXSx0LG8pO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWEoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxzLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LHMsbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxzKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxzLGwpfSkpfWwodS5hcmcpfXZhciBvO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBvPW8/by50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtzXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWEodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuIGUmJmgodC5wcm90b3R5cGUsZSksciYmaCh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUub25VbnN1cHBvcnRlZEZlYXR1cmUsbj1lLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtlLnN0eWxlRWxlbWVudCxjKHRoaXMsdCksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmU9cix0aGlzLl9kb2N1bWVudD1pLHRoaXMubmF0aXZlRm9udEZhY2VzPVtdLHRoaXMuc3R5bGVFbGVtZW50PW51bGwsdGhpcy5sb2FkaW5nUmVxdWVzdHM9W10sdGhpcy5sb2FkVGVzdEZvbnRJZD0wfXZhciBlLHI7cmV0dXJuIGYodCxbe2tleToiYWRkTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubmF0aXZlRm9udEZhY2VzLnB1c2godCksdGhpcy5fZG9jdW1lbnQuZm9udHMuYWRkKHQpfX0se2tleToiaW5zZXJ0UnVsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zdHlsZUVsZW1lbnR8fCh0aGlzLnN0eWxlRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZCh0aGlzLnN0eWxlRWxlbWVudCkpO3ZhciBlPXRoaXMuc3R5bGVFbGVtZW50LnNoZWV0O2UuaW5zZXJ0UnVsZSh0LGUuY3NzUnVsZXMubGVuZ3RoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0LGU9bCh0aGlzLm5hdGl2ZUZvbnRGYWNlcyk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3RoaXMuX2RvY3VtZW50LmZvbnRzLmRlbGV0ZShyKX19Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9dGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoPTAsdGhpcy5zdHlsZUVsZW1lbnQmJih0aGlzLnN0eWxlRWxlbWVudC5yZW1vdmUoKSx0aGlzLnN0eWxlRWxlbWVudD1udWxsKX19LHtrZXk6ImJpbmQiLHZhbHVlOihlPW8oKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLGksYT10aGlzO3JldHVybiBvKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIWUuYXR0YWNoZWQmJiFlLm1pc3NpbmdGaWxlKXt0Lm5leHQ9MjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjppZihlLmF0dGFjaGVkPSEwLCF0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpe3QubmV4dD0xOTticmVha31pZighKHI9ZS5jcmVhdGVOYXRpdmVGb250RmFjZSgpKSl7dC5uZXh0PTE4O2JyZWFrfXJldHVybiB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKHIpLHQucHJldj03LHQubmV4dD0xMCxyLmxvYWRlZDtjYXNlIDEwOnQubmV4dD0xODticmVhaztjYXNlIDEyOnRocm93IHQucHJldj0xMix0LnQwPXQuY2F0Y2goNyksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udExvYWROYXRpdmV9KSwoMCxuLndhcm4pKCJGYWlsZWQgdG8gbG9hZCBmb250ICciLmNvbmNhdChyLmZhbWlseSwiJzogJyIpLmNvbmNhdCh0LnQwLCInLiIpKSxlLmRpc2FibGVGb250RmFjZT0hMCx0LnQwO2Nhc2UgMTg6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE5OmlmKCEoaT1lLmNyZWF0ZUZvbnRGYWNlUnVsZSgpKSl7dC5uZXh0PTI2O2JyZWFrfWlmKHRoaXMuaW5zZXJ0UnVsZShpKSwhdGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCl7dC5uZXh0PTI0O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyNDpyZXR1cm4gdC5uZXh0PTI2LG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXt2YXIgcj1hLl9xdWV1ZUxvYWRpbmdDYWxsYmFjayh0KTthLl9wcmVwYXJlRm9udExvYWRFdmVudChlLHIpfSkpO2Nhc2UgMjY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s3LDEyXV0pfSkpLHI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixpKXt2YXIgYT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyh0KXtzKGEsbixpLG8sbCwibmV4dCIsdCl9ZnVuY3Rpb24gbCh0KXtzKGEsbixpLG8sbCwidGhyb3ciLHQpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0LGU9IShudWxsPT09KHQ9dGhpcy5fZG9jdW1lbnQpfHx2b2lkIDA9PT10fHwhdC5mb250cyk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGUpfX0se2tleToiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PSExO3JldHVybihpLmlzTm9kZUpTfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL01vemlsbGFcLzUuMC4qP3J2OlxkKy4qPyBHZWNrby8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkmJih0PSEwKSwoMCxuLnNoYWRvdykodGhpcywiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLHQpfX0se2tleToiX3F1ZXVlTG9hZGluZ0NhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRpbmdSZXF1ZXN0cyxyPXtkb25lOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7Zm9yKCgwLG4uYXNzZXJ0KSghci5kb25lLCJjb21wbGV0ZVJlcXVlc3QoKSBjYW5ub3QgYmUgY2FsbGVkIHR3aWNlLiIpLHIuZG9uZT0hMDtlLmxlbmd0aD4wJiZlWzBdLmRvbmU7KXt2YXIgdD1lLnNoaWZ0KCk7c2V0VGltZW91dCh0LmNhbGxiYWNrLDApfX0sY2FsbGJhY2s6dH07cmV0dXJuIGUucHVzaChyKSxyfX0se2tleToiX2xvYWRUZXN0Rm9udCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9YXRvYigiVDFSVVR3QUxBSUFBQXdBd1EwWkdJREh0Wmc0QUFBT1lBQUFBZ1VaR1ZFMWxrelp3QUFBRUhBQUFBQnhIUkVWR0FCUUFGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQUFMd0FBQUEyYUdobFlRZGtBK29BQUFEMEFBQUFKR2h0ZEhnRDZBQUFBQUFFV0FBQUFBWnRZWGh3QUFKUUFBQUFBUmdBQUFBR2JtRnRaVmptZEg0QUFBR0FBQUFBc1hCdmMzVC9oZ0F6QUFBRGVBQUFBQ0FBQVFBQUFBRUFBTFpSRnNSZkR6ejFBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRDZBQUFBQUFENkFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQVVBQUFBZ0FBQUFRRDZBSDBBQVVBQUFLS0Fyd0FBQUNNQW9vQ3ZBQUFBZUFBTVFFQ0FBQUNBQVlKQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFGQm1SV1FBd0FBdUFDNERJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQUFBRUFBUUFBQUFFQUFBQUFBQUlBQVFBQUFBRUFBQUFBQUFNQUFRQUFBQUVBQUFBQUFBUUFBUUFBQUFFQUFBQUFBQVVBQVFBQUFBRUFBQUFBQUFZQUFRQUFBQU1BQVFRSkFBQUFBZ0FCQUFNQUFRUUpBQUVBQWdBQkFBTUFBUVFKQUFJQUFnQUJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWUFBQUFBQUFBQXdBQUFBTUFBQUFjQUFFQUFBQUFBRHdBQXdBQkFBQUFIQUFFQUNBQUFBQUVBQVFBQVFBQUFDNy8vd0FBQUM3Ly8vL1RBQUVBQUFBQUFBQUJCZ0FBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQUFBQUFBRC9nd0F5QUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBUUVBQUVCQVFKWUFBRUJBU0g0RHdENEd3SEVBdmdjQS9nWEJJd01BWXVMK256NXRRWGtENWozQ0JMbkVRQUNBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90M0RvdjZmQUg2ZkFUK2ZQcDgrbndIRG9zTUN2bTFDdm0xREF6NmZCUUFBQUFBQUFBQkFBQUFBTW1KYnpFQUFBQUF6Z1RqRlFBQUFBRE9CT1FwQUFFQUFBQUFBQUFBREFBVUFBUUFBQUFCQUFBQUFnQUJBQUFBQUFBQUFBQUQ2QUFBQUFBQUFBPT0iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2xvYWRUZXN0Rm9udCIsdCl9fSx7a2V5OiJfcHJlcGFyZUZvbnRMb2FkRXZlbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0LmNoYXJDb2RlQXQoZSk8PDI0fHQuY2hhckNvZGVBdChlKzEpPDwxNnx0LmNoYXJDb2RlQXQoZSsyKTw8OHwyNTUmdC5jaGFyQ29kZUF0KGUrMyl9ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm4gdC5zdWJzdHJpbmcoMCxlKStuK3Quc3Vic3RyaW5nKGUrcil9dmFyIGEsbyxzPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Mud2lkdGg9MSxzLmhlaWdodD0xO3ZhciBsPXMuZ2V0Q29udGV4dCgiMmQiKSx1PTAsYz0ibHQiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKSxoPXRoaXMuX2xvYWRUZXN0Rm9udCxmPTE0ODIxODQ3OTIsZD1yKGg9aShoLDk3NixjLmxlbmd0aCxjKSwxNik7Zm9yKGE9MCxvPWMubGVuZ3RoLTM7YTxvO2ErPTQpZD1kLWYrcihjLGEpfDA7YTxjLmxlbmd0aCYmKGQ9ZC1mK3IoYysiWFhYIixhKXwwKSxoPWkoaCwxNiw0LCgwLG4uc3RyaW5nMzIpKGQpKTt2YXIgcD0idXJsKGRhdGE6Zm9udC9vcGVudHlwZTtiYXNlNjQsIi5jb25jYXQoYnRvYShoKSwiKTsiKSx2PSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQoYywnIjtzcmM6JykuY29uY2F0KHAsIn0iKTt0aGlzLmluc2VydFJ1bGUodik7dmFyIHk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7eS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHkuc3R5bGUud2lkdGg9eS5zdHlsZS5oZWlnaHQ9IjEwcHgiLHkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix5LnN0eWxlLnRvcD15LnN0eWxlLmxlZnQ9IjBweCI7Zm9yKHZhciBtPTAsZz1bdC5sb2FkZWROYW1lLGNdO208Zy5sZW5ndGg7bSsrKXt2YXIgYj1nW21dLF89dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO18udGV4dENvbnRlbnQ9IkhpIixfLnN0eWxlLmZvbnRGYW1pbHk9Yix5LmFwcGVuZChfKX10aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZCh5KSxmdW5jdGlvbiB0KGUscil7aWYoKyt1PjMwKXJldHVybigwLG4ud2FybikoIkxvYWQgdGVzdCBmb250IG5ldmVyIGxvYWRlZC4iKSx2b2lkIHIoKTtsLmZvbnQ9IjMwcHggIitlLGwuZmlsbFRleHQoIi4iLDAsMjApLGwuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGFbM10+MD9yKCk6c2V0VGltZW91dCh0LmJpbmQobnVsbCxlLHIpKX0oYywoZnVuY3Rpb24oKXt5LnJlbW92ZSgpLGUuY29tcGxldGUoKX0pKX19XSksdH0oKTtlLkZvbnRMb2FkZXI9ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgbj1yLmlzRXZhbFN1cHBvcnRlZCxpPXZvaWQgMD09PW58fG4sYT1yLmRpc2FibGVGb250RmFjZSxvPXZvaWQgMCE9PWEmJmEscz1yLmlnbm9yZUVycm9ycyxsPXZvaWQgMCE9PXMmJnMsdT1yLm9uVW5zdXBwb3J0ZWRGZWF0dXJlLGg9ci5mb250UmVnaXN0cnksZj12b2lkIDA9PT1oP251bGw6aDtmb3IodmFyIGQgaW4gYyh0aGlzLHQpLHRoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlKXRoaXNbZF09ZVtkXTt0aGlzLmlzRXZhbFN1cHBvcnRlZD0hMSE9PWksdGhpcy5kaXNhYmxlRm9udEZhY2U9ITA9PT1vLHRoaXMuaWdub3JlRXJyb3JzPSEwPT09bCx0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZT11LHRoaXMuZm9udFJlZ2lzdHJ5PWZ9cmV0dXJuIGYodCxbe2tleToiY3JlYXRlTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDtpZih0aGlzLmNzc0ZvbnRJbmZvKXt2YXIgcj17d2VpZ2h0OnRoaXMuY3NzRm9udEluZm8uZm9udFdlaWdodH07dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKHIuc3R5bGU9Im9ibGlxdWUgIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSwiZGVnIikpLGU9bmV3IEZvbnRGYWNlKHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSx0aGlzLmRhdGEscil9ZWxzZSBlPW5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsdGhpcy5kYXRhLHt9KTtyZXR1cm4gbnVsbD09PSh0PXRoaXMuZm9udFJlZ2lzdHJ5KXx8dm9pZCAwPT09dHx8dC5yZWdpc3RlckZvbnQodGhpcyksZX19LHtrZXk6ImNyZWF0ZUZvbnRGYWNlUnVsZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDt2YXIgZSxyPSgwLG4uYnl0ZXNUb1N0cmluZykodGhpcy5kYXRhKSxpPSJ1cmwoZGF0YToiLmNvbmNhdCh0aGlzLm1pbWV0eXBlLCI7YmFzZTY0LCIpLmNvbmNhdChidG9hKHIpLCIpOyIpO2lmKHRoaXMuY3NzRm9udEluZm8pe3ZhciBhPSJmb250LXdlaWdodDogIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0LCI7Iik7dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKGErPSJmb250LXN0eWxlOiBvYmxpcXVlICIuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uaXRhbGljQW5nbGUsImRlZzsiKSksZT0nQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6IicuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSwnIjsnKS5jb25jYXQoYSwic3JjOiIpLmNvbmNhdChpLCJ9Iil9ZWxzZSBlPSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQodGhpcy5sb2FkZWROYW1lLCciO3NyYzonKS5jb25jYXQoaSwifSIpO3JldHVybiBudWxsPT09KHQ9dGhpcy5mb250UmVnaXN0cnkpfHx2b2lkIDA9PT10fHx0LnJlZ2lzdGVyRm9udCh0aGlzLGkpLGV9fSx7a2V5OiJnZXRQYXRoR2VuZXJhdG9yIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbZV0pcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV07dmFyIHI7dHJ5e3I9dC5nZXQodGhpcy5sb2FkZWROYW1lKyJfcGF0aF8iK2UpfWNhdGNoKHQpe2lmKCF0aGlzLmlnbm9yZUVycm9ycyl0aHJvdyB0O3JldHVybiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7ZmVhdHVyZUlkOm4uVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250R2V0UGF0aH0pLCgwLG4ud2FybikoJ2dldFBhdGhHZW5lcmF0b3IgLSBpZ25vcmluZyBjaGFyYWN0ZXI6ICInLmNvbmNhdCh0LCciLicpKSx0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7fX1pZih0aGlzLmlzRXZhbFN1cHBvcnRlZCYmbi5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBpLGE9W10sbz1sKHIpO3RyeXtmb3Ioby5zKCk7IShpPW8ubigpKS5kb25lOyl7dmFyIHM9aS52YWx1ZSx1PXZvaWQgMCE9PXMuYXJncz9zLmFyZ3Muam9pbigiLCIpOiIiO2EucHVzaCgiYy4iLHMuY21kLCIoIix1LCIpO1xuIil9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPW5ldyBGdW5jdGlvbigiYyIsInNpemUiLGEuam9pbigiIikpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT1sKHIpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTsic2NhbGUiPT09YS5jbWQmJihhLmFyZ3M9W2UsLWVdKSx0W2EuY21kXS5hcHBseSh0LGEuYXJncyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX19fV0pLHR9KCk7ZS5Gb250RmFjZU9iamVjdD1wfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ2FudmFzR3JhcGhpY3M9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDE0Miksbz1yKDE0Mykscz1yKDMpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGQodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9Zih0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz00MDk2LGI9cy5pc05vZGVKUyYmInVuZGVmaW5lZCI9PXR5cGVvZiBQYXRoMkQ/LTE6MWUzLF89MTYsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dih0aGlzLHQpLHRoaXMuY2FudmFzRmFjdG9yeT1lLHRoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtyZXR1cm4gdm9pZCAwIT09dGhpcy5jYWNoZVt0XT8obj10aGlzLmNhY2hlW3RdLHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChuLGUscikpOihuPXRoaXMuY2FudmFzRmFjdG9yeS5jcmVhdGUoZSxyKSx0aGlzLmNhY2hlW3RdPW4pLG59fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmNhY2hlW3RdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuY2FjaGUpe3ZhciBlPXRoaXMuY2FjaGVbdF07dGhpcy5jYW52YXNGYWN0b3J5LmRlc3Ryb3koZSksZGVsZXRlIHRoaXMuY2FjaGVbdF19fX1dKSx0fSgpO2Z1bmN0aW9uIEEodCxlLHIsbixhLG8scyxsLHUsYyl7dmFyIGY9aCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpLDYpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWZbNF0sZz1mWzVdO2lmKDA9PT1wJiYwPT09dil7dmFyIGI9cypkK20sXz1NYXRoLnJvdW5kKGIpLHc9bCp5K2csQT1NYXRoLnJvdW5kKHcpLGs9KHMrdSkqZCttLFM9TWF0aC5hYnMoTWF0aC5yb3VuZChrKS1fKXx8MSx4PShsK2MpKnkrZyxFPU1hdGguYWJzKE1hdGgucm91bmQoeCktQSl8fDE7cmV0dXJuIHQuc2V0VHJhbnNmb3JtKE1hdGguc2lnbihkKSwwLDAsTWF0aC5zaWduKHkpLF8sQSksdC5kcmF3SW1hZ2UoZSxyLG4sYSxvLDAsMCxTLEUpLHQuc2V0VHJhbnNmb3JtKGQscCx2LHksbSxnKSxbUyxFXX1pZigwPT09ZCYmMD09PXkpe3ZhciBQPWwqdittLFQ9TWF0aC5yb3VuZChQKSxDPXMqcCtnLE89TWF0aC5yb3VuZChDKSxGPShsK2MpKnYrbSxNPU1hdGguYWJzKE1hdGgucm91bmQoRiktVCl8fDEsUj0ocyt1KSpwK2csST1NYXRoLmFicyhNYXRoLnJvdW5kKFIpLU8pfHwxO3JldHVybiB0LnNldFRyYW5zZm9ybSgwLE1hdGguc2lnbihwKSxNYXRoLnNpZ24odiksMCxULE8pLHQuZHJhd0ltYWdlKGUscixuLGEsbywwLDAsSSxNKSx0LnNldFRyYW5zZm9ybShkLHAsdix5LG0sZyksW0ksTV19cmV0dXJuIHQuZHJhd0ltYWdlKGUscixuLGEsbyxzLGwsdSxjKSxbTWF0aC5oeXBvdChkLHApKnUsTWF0aC5oeXBvdCh2LHkpKmNdfXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3YodGhpcyx0KSx0aGlzLmFscGhhSXNTaGFwZT0hMSx0aGlzLmZvbnRTaXplPTAsdGhpcy5mb250U2l6ZVNjYWxlPTEsdGhpcy50ZXh0TWF0cml4PW4uSURFTlRJVFlfTUFUUklYLHRoaXMudGV4dE1hdHJpeFNjYWxlPTEsdGhpcy5mb250TWF0cml4PW4uRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy54PTAsdGhpcy55PTAsdGhpcy5saW5lWD0wLHRoaXMubGluZVk9MCx0aGlzLmNoYXJTcGFjaW5nPTAsdGhpcy53b3JkU3BhY2luZz0wLHRoaXMudGV4dEhTY2FsZT0xLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMudGV4dFJpc2U9MCx0aGlzLmZpbGxDb2xvcj0iIzAwMDAwMCIsdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5wYXR0ZXJuRmlsbD0hMSx0aGlzLmZpbGxBbHBoYT0xLHRoaXMuc3Ryb2tlQWxwaGE9MSx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuYWN0aXZlU01hc2s9bnVsbCx0aGlzLnRyYW5zZmVyTWFwcz1udWxsLHRoaXMuc3RhcnROZXdQYXRoQW5kQ2xpcEJveChbMCwwLGUscl0pfXJldHVybiBtKHQsW3trZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIHQuY2xpcEJveD10aGlzLmNsaXBCb3guc2xpY2UoKSx0fX0se2tleToic2V0Q3VycmVudFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMueD10LHRoaXMueT1lfX0se2tleToidXBkYXRlUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWgobi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlLHJdLHQpLDIpO2U9aVswXSxyPWlbMV0sdGhpcy5taW5YPU1hdGgubWluKHRoaXMubWluWCxlKSx0aGlzLm1pblk9TWF0aC5taW4odGhpcy5taW5ZLHIpLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZSksdGhpcy5tYXhZPU1hdGgubWF4KHRoaXMubWF4WSxyKX19LHtrZXk6InVwZGF0ZVJlY3RNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKGUsdCksaT1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oZS5zbGljZSgyKSx0KTt0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLHJbMF0saVswXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxyWzFdLGlbMV0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsclswXSxpWzBdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLHJbMV0saVsxXSl9fSx7a2V5OiJ1cGRhdGVTY2FsaW5nUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtuLlV0aWwuc2NhbGVNaW5NYXgodCxlKSx0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLGVbMF0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZVsxXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxlWzJdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLGVbM10pfX0se2tleToidXBkYXRlQ3VydmVQYXRoTWluTWF4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpLGEsbyxzLGwsdSxjKXt2YXIgaD1uLlV0aWwuYmV6aWVyQm91bmRpbmdCb3goZSxyLGksYSxvLHMsbCx1KTtpZihjKXJldHVybiBjWzBdPU1hdGgubWluKGNbMF0saFswXSxoWzJdKSxjWzFdPU1hdGgubWF4KGNbMV0saFswXSxoWzJdKSxjWzJdPU1hdGgubWluKGNbMl0saFsxXSxoWzNdKSx2b2lkKGNbM109TWF0aC5tYXgoY1szXSxoWzFdLGhbM10pKTt0aGlzLnVwZGF0ZVJlY3RNaW5NYXgodCxoKX19LHtrZXk6ImdldFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1bdGhpcy5taW5YLHRoaXMubWluWSx0aGlzLm1heFgsdGhpcy5tYXhZXTtpZih0PT09YS5QYXRoVHlwZS5TVFJPS0Upe2V8fCgwLG4udW5yZWFjaGFibGUpKCJTdHJva2UgYm91bmRpbmcgYm94IG11c3QgaW5jbHVkZSB0cmFuc2Zvcm0uIik7dmFyIGk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpLG89aVswXSp0aGlzLmxpbmVXaWR0aC8yLHM9aVsxXSp0aGlzLmxpbmVXaWR0aC8yO3JbMF0tPW8sclsxXS09cyxyWzJdKz1vLHJbM10rPXN9cmV0dXJuIHJ9fSx7a2V5OiJ1cGRhdGVDbGlwRnJvbVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bi5VdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsdGhpcy5nZXRQYXRoQm91bmRpbmdCb3goKSk7dGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KHR8fFswLDAsMCwwXSl9fSx7a2V5OiJpc0VtcHR5Q2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW5YPT09MS8wfX0se2tleToic3RhcnROZXdQYXRoQW5kQ2xpcEJveCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jbGlwQm94PXQsdGhpcy5taW5YPTEvMCx0aGlzLm1pblk9MS8wLHRoaXMubWF4WD0wLHRoaXMubWF4WT0wfX0se2tleToiZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuIG4uVXRpbC5pbnRlcnNlY3QodGhpcy5jbGlwQm94LHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KHQsZSkpfX1dKSx0fSgpO2Z1bmN0aW9uIFModCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlRGF0YSYmZSBpbnN0YW5jZW9mIEltYWdlRGF0YSl0LnB1dEltYWdlRGF0YShlLDAsMCk7ZWxzZXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZD1lLmhlaWdodCxwPWUud2lkdGgsdj1kJV8seT0oZC12KS9fLG09MD09PXY/eTp5KzEsZz10LmNyZWF0ZUltYWdlRGF0YShwLF8pLGI9MCx3PWUuZGF0YSxBPWcuZGF0YTtpZihyKXN3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnU9clswXSxjPXJbMF0saD1yWzBdLGY9clswXTticmVhaztjYXNlIDQ6dT1yWzBdLGM9clsxXSxoPXJbMl0sZj1yWzNdfWlmKGUua2luZD09PW4uSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKXt2YXIgaz13LmJ5dGVMZW5ndGgsUz1uZXcgVWludDMyQXJyYXkoQS5idWZmZXIsMCxBLmJ5dGVMZW5ndGg+PjIpLHg9Uy5sZW5ndGgsRT1wKzc+PjMsUD00Mjk0OTY3Mjk1LFQ9bi5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NTtpZihmJiYyNTU9PT1mWzBdJiYwPT09ZlsyNTVdKXt2YXIgQz1bVCxQXTtQPUNbMF0sVD1DWzFdfWZvcihhPTA7YTxtO2ErKyl7Zm9yKHM9YTx5P186dixpPTAsbz0wO288cztvKyspe2Zvcih2YXIgTz1rLWIsRj0wLE09Tz5FP3A6OCpPLTcsUj0tOCZNLEk9MCxqPTA7RjxSO0YrPTgpaj13W2IrK10sU1tpKytdPTEyOCZqP1A6VCxTW2krK109NjQmaj9QOlQsU1tpKytdPTMyJmo/UDpULFNbaSsrXT0xNiZqP1A6VCxTW2krK109OCZqP1A6VCxTW2krK109NCZqP1A6VCxTW2krK109MiZqP1A6VCxTW2krK109MSZqP1A6VDtmb3IoO0Y8TTtGKyspMD09PUkmJihqPXdbYisrXSxJPTEyOCksU1tpKytdPWomST9QOlQsST4+PTF9Zm9yKDtpPHg7KVNbaSsrXT0wO3QucHV0SW1hZ2VEYXRhKGcsMCxhKl8pfX1lbHNlIGlmKGUua2luZD09PW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFApe3ZhciBMPSEhKHV8fGN8fGgpO2ZvcihvPTAsbD1wKl8qNCxhPTA7YTx5O2ErKyl7aWYoQS5zZXQody5zdWJhcnJheShiLGIrbCkpLGIrPWwsTClmb3IodmFyIEQ9MDtEPGw7RCs9NCl1JiYoQVtEKzBdPXVbQVtEKzBdXSksYyYmKEFbRCsxXT1jW0FbRCsxXV0pLGgmJihBW0QrMl09aFtBW0QrMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsbyksbys9X31pZihhPG0pe2lmKGw9cCp2KjQsQS5zZXQody5zdWJhcnJheShiLGIrbCkpLEwpZm9yKHZhciBOPTA7TjxsO04rPTQpdSYmKEFbTiswXT11W0FbTiswXV0pLGMmJihBW04rMV09Y1tBW04rMV1dKSxoJiYoQVtOKzJdPWhbQVtOKzJdXSk7dC5wdXRJbWFnZURhdGEoZywwLG8pfX1lbHNle2lmKGUua2luZCE9PW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCl0aHJvdyBuZXcgRXJyb3IoImJhZCBpbWFnZSBraW5kOiAiLmNvbmNhdChlLmtpbmQpKTt2YXIgVT0hISh1fHxjfHxoKTtmb3IobD1wKihzPV8pLGE9MDthPG07YSsrKXtmb3IoYT49eSYmKGw9cCoocz12KSksaT0wLG89bDtvLS07KUFbaSsrXT13W2IrK10sQVtpKytdPXdbYisrXSxBW2krK109d1tiKytdLEFbaSsrXT0yNTU7aWYoVSlmb3IodmFyIFc9MDtXPGk7Vys9NCl1JiYoQVtXKzBdPXVbQVtXKzBdXSksYyYmKEFbVysxXT1jW0FbVysxXV0pLGgmJihBW1crMl09aFtBW1crMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsYSpfKX19fX1mdW5jdGlvbiB4KHQsZSl7aWYoZS5iaXRtYXApdC5kcmF3SW1hZ2UoZS5iaXRtYXAsMCwwKTtlbHNlIGZvcih2YXIgcj1lLmhlaWdodCxuPWUud2lkdGgsaT1yJV8sYT0oci1pKS9fLHM9MD09PWk/YTphKzEsbD10LmNyZWF0ZUltYWdlRGF0YShuLF8pLHU9MCxjPWUuZGF0YSxoPWwuZGF0YSxmPTA7ZjxzO2YrKyl7dmFyIGQ9ZjxhP186aTt1PSgwLG8uYXBwbHlNYXNrSW1hZ2VEYXRhKSh7c3JjOmMsc3JjUG9zOnUsZGVzdDpoLHdpZHRoOm4saGVpZ2h0OmR9KS5zcmNQb3MsdC5wdXRJbWFnZURhdGEobCwwLGYqXyl9fWZ1bmN0aW9uIEUodCxlKXtmb3IodmFyIHI9MCxuPVsic3Ryb2tlU3R5bGUiLCJmaWxsU3R5bGUiLCJmaWxsUnVsZSIsImdsb2JhbEFscGhhIiwibGluZVdpZHRoIiwibGluZUNhcCIsImxpbmVKb2luIiwibWl0ZXJMaW1pdCIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImZvbnQiXTtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTt2b2lkIDAhPT10W2ldJiYoZVtpXT10W2ldKX12b2lkIDAhPT10LnNldExpbmVEYXNoJiYoZS5zZXRMaW5lRGFzaCh0LmdldExpbmVEYXNoKCkpLGUubGluZURhc2hPZmZzZXQ9dC5saW5lRGFzaE9mZnNldCl9ZnVuY3Rpb24gUCh0LGUpe3Quc3Ryb2tlU3R5bGU9dC5maWxsU3R5bGU9ZXx8IiMwMDAwMDAiLHQuZmlsbFJ1bGU9Im5vbnplcm8iLHQuZ2xvYmFsQWxwaGE9MSx0LmxpbmVXaWR0aD0xLHQubGluZUNhcD0iYnV0dCIsdC5saW5lSm9pbj0ibWl0ZXIiLHQubWl0ZXJMaW1pdD0xMCx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuZm9udD0iMTBweCBzYW5zLXNlcmlmIix2b2lkIDAhPT10LnNldExpbmVEYXNoJiYodC5zZXRMaW5lRGFzaChbXSksdC5saW5lRGFzaE9mZnNldD0wKX1mdW5jdGlvbiBUKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTM7YTxpO2ErPTQpe3ZhciBvPXRbYV07aWYoMD09PW8pdFthLTNdPWUsdFthLTJdPXIsdFthLTFdPW47ZWxzZSBpZihvPDI1NSl7dmFyIHM9MjU1LW87dFthLTNdPXRbYS0zXSpvK2Uqcz4+OCx0W2EtMl09dFthLTJdKm8rcipzPj44LHRbYS0xXT10W2EtMV0qbytuKnM+Pjh9fX1mdW5jdGlvbiBDKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT0zO2k8bjtpKz00KXt2YXIgYT1yP3JbdFtpXV06dFtpXTtlW2ldPWVbaV0qYSouMDAzOTIxNTY4NjI3NDUwOTh8MH19ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MztpPG47aSs9NCl7dmFyIGE9NzcqdFtpLTNdKzE1Mip0W2ktMl0rMjgqdFtpLTFdO2VbaV09cj9lW2ldKnJbYT4+OF0+Pjg6ZVtpXSphPj4xNn19ZnVuY3Rpb24gRih0LGUpe3ZhciByPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0KTtyWzBdPU1hdGguZnJvdW5kKHJbMF0pLHJbMV09TWF0aC5mcm91bmQoclsxXSk7dmFyIGE9TWF0aC5mcm91bmQoKGdsb2JhbFRoaXMuZGV2aWNlUGl4ZWxSYXRpb3x8MSkqaS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMpO3JldHVybiB2b2lkIDAhPT1lP2U6clswXTw9YXx8clsxXTw9YX12YXIgTT1bImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdLFI9WyJtaXRlciIsInJvdW5kIiwiYmV2ZWwiXSxJPXt9LGo9e30sTD1uZXcgV2Vha1NldCxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpLGEsbyxzKXt2YXIgbCx1LGM9YS5vcHRpb25hbENvbnRlbnRDb25maWcsaD1hLm1hcmtlZENvbnRlbnRTdGFjayxmPXZvaWQgMD09PWg/bnVsbDpoO3YodGhpcyx0KSxmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KGw9dGhpcyx1PUwpLHUuYWRkKGwpLHRoaXMuY3R4PWUsdGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnN0YXRlU3RhY2s9W10sdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMucGVuZGluZ0VPRmlsbD0hMSx0aGlzLnJlcz1udWxsLHRoaXMueG9ianM9bnVsbCx0aGlzLmNvbW1vbk9ianM9cix0aGlzLm9ianM9bix0aGlzLmNhbnZhc0ZhY3Rvcnk9aSx0aGlzLmdyb3VwU3RhY2s9W10sdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm09bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjaz1bXSx0aGlzLmdyb3VwTGV2ZWw9MCx0aGlzLnNtYXNrU3RhY2s9W10sdGhpcy5zbWFza0NvdW50ZXI9MCx0aGlzLnRlbXBTTWFzaz1udWxsLHRoaXMuc3VzcGVuZGVkQ3R4PW51bGwsdGhpcy5jb250ZW50VmlzaWJsZT0hMCx0aGlzLm1hcmtlZENvbnRlbnRTdGFjaz1mfHxbXSx0aGlzLm9wdGlvbmFsQ29udGVudENvbmZpZz1jLHRoaXMuY2FjaGVkQ2FudmFzZXM9bmV3IHcodGhpcy5jYW52YXNGYWN0b3J5KSx0aGlzLmNhY2hlZFBhdHRlcm5zPW5ldyBNYXAsdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwPW8sdGhpcy52aWV3cG9ydFNjYWxlPTEsdGhpcy5vdXRwdXRTY2FsZVg9MSx0aGlzLm91dHB1dFNjYWxlWT0xLHRoaXMuYmFja2dyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmJhY2tncm91bmQpfHxudWxsLHRoaXMuZm9yZWdyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmZvcmVncm91bmQpfHxudWxsLHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmc9bnVsbCx0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwsdGhpcy5fY2FjaGVkQml0bWFwc01hcD1uZXcgTWFwfXJldHVybiBtKHQsW3trZXk6ImdldE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3RhcnRzV2l0aCgiZ18iKT90aGlzLmNvbW1vbk9ianMuZ2V0KHQpOnRoaXMub2Jqcy5nZXQodCk6ZX19LHtrZXk6ImJlZ2luRHJhd2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXQudHJhbnNmb3JtLGE9dC52aWV3cG9ydCxvPXQudHJhbnNwYXJlbmN5LHM9dm9pZCAwIT09byYmbyx1PXQuYmFja2dyb3VuZCxjPXZvaWQgMD09PXU/bnVsbDp1LGY9dGhpcy5jdHguY2FudmFzLndpZHRoLGQ9dGhpcy5jdHguY2FudmFzLmhlaWdodCxwPWN8fCIjZmZmZmZmIjtpZih0aGlzLmN0eC5zYXZlKCksdGhpcy5mb3JlZ3JvdW5kQ29sb3ImJnRoaXMuYmFja2dyb3VuZENvbG9yKXt0aGlzLmN0eC5maWxsU3R5bGU9dGhpcy5mb3JlZ3JvdW5kQ29sb3I7dmFyIHY9dGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO3RoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcjt2YXIgeSxtLGc9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO2lmKHRoaXMuY3R4LmZpbGxTdHlsZT1wLHk9InN0cmluZyI9PXR5cGVvZihtPXRoaXMuY3R4LmZpbGxTdHlsZSkmJi9eI1swLTlBLUZhLWZdezZ9JC8udGVzdChtKSwiIzAwMDAwMCI9PT12JiYiI2ZmZmZmZiI9PT1nfHx2PT09Z3x8IXkpdGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbDtlbHNle3ZhciBiPWgoKDAsaS5nZXRSR0IpKG0pLDMpLF89YlswXSx3PWJbMV0sQT1iWzJdLGs9ZnVuY3Rpb24odCl7cmV0dXJuKHQvPTI1NSk8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9LFM9TWF0aC5yb3VuZCguMjEyNiprKF8pKy43MTUyKmsodykrLjA3MjIqayhBKSk7dGhpcy5zZWxlY3RDb2xvcj1mdW5jdGlvbih0LGUscil7dmFyIG49LjIxMjYqayh0KSsuNzE1MiprKGUpKy4wNzIyKmsocik7cmV0dXJuIE1hdGgucm91bmQobik9PT1TP2c6dn19fWlmKHRoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcnx8cCx0aGlzLmN0eC5maWxsUmVjdCgwLDAsZixkKSx0aGlzLmN0eC5yZXN0b3JlKCkscyl7dmFyIHgsRT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygidHJhbnNwYXJlbnQiLGYsZCk7dGhpcy5jb21wb3NpdGVDdHg9dGhpcy5jdHgsdGhpcy50cmFuc3BhcmVudENhbnZhcz1FLmNhbnZhcyx0aGlzLmN0eD1FLmNvbnRleHQsdGhpcy5jdHguc2F2ZSgpLCh4PXRoaXMuY3R4KS50cmFuc2Zvcm0uYXBwbHkoeCxsKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jb21wb3NpdGVDdHgpKSl9dGhpcy5jdHguc2F2ZSgpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpLG4mJigocj10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KHIsbChuKSksdGhpcy5vdXRwdXRTY2FsZVg9blswXSx0aGlzLm91dHB1dFNjYWxlWT1uWzBdKSwoZT10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KGUsbChhLnRyYW5zZm9ybSkpLHRoaXMudmlld3BvcnRTY2FsZT1hLnNjYWxlLHRoaXMuYmFzZVRyYW5zZm9ybT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KX19LHtrZXk6ImV4ZWN1dGVPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuYXJnc0FycmF5LG89dC5mbkFycmF5LHM9ZXx8MCxsPWEubGVuZ3RoO2lmKGw9PT1zKXJldHVybiBzO2Zvcih2YXIgdSxoPWwtcz4xMCYmImZ1bmN0aW9uIj09dHlwZW9mIHIsZj1oP0RhdGUubm93KCkrMTU6MCxkPTAscD10aGlzLmNvbW1vbk9ianMsdj10aGlzLm9ianM7Oyl7aWYodm9pZCAwIT09aSYmcz09PWkubmV4dEJyZWFrUG9pbnQpcmV0dXJuIGkuYnJlYWtJdChzLHIpLHM7aWYoKHU9b1tzXSkhPT1uLk9QUy5kZXBlbmRlbmN5KXRoaXNbdV0uYXBwbHkodGhpcyxhW3NdKTtlbHNle3ZhciB5LG09YyhhW3NdKTt0cnl7Zm9yKG0ucygpOyEoeT1tLm4oKSkuZG9uZTspe3ZhciBnPXkudmFsdWUsYj1nLnN0YXJ0c1dpdGgoImdfIik/cDp2O2lmKCFiLmhhcyhnKSlyZXR1cm4gYi5nZXQoZyxyKSxzfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19aWYoKytzPT09bClyZXR1cm4gcztpZihoJiYrK2Q+MTApe2lmKERhdGUubm93KCk+ZilyZXR1cm4gcigpLHM7ZD0wfX19fSx7a2V5OiJlbmREcmF3aW5nIix2YWx1ZTpmdW5jdGlvbigpe3UodGhpcyxMLE4pLmNhbGwodGhpcyksdGhpcy5jYWNoZWRDYW52YXNlcy5jbGVhcigpLHRoaXMuY2FjaGVkUGF0dGVybnMuY2xlYXIoKTt2YXIgdCxlPWModGhpcy5fY2FjaGVkQml0bWFwc01hcC52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcixuPXQudmFsdWUsaT1jKG4udmFsdWVzKCkpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTsidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZhIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQmJihhLndpZHRoPWEuaGVpZ2h0PTApfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1uLmNsZWFyKCl9fWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfXRoaXMuX2NhY2hlZEJpdG1hcHNNYXAuY2xlYXIoKX19LHtrZXk6Il9zY2FsZUltYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9dC53aWR0aCxhPXQuaGVpZ2h0LG89TWF0aC5tYXgoTWF0aC5oeXBvdChlWzBdLGVbMV0pLDEpLHM9TWF0aC5tYXgoTWF0aC5oeXBvdChlWzJdLGVbM10pLDEpLGw9aSx1PWEsYz0icHJlc2NhbGUxIjtvPjImJmw+MXx8cz4yJiZ1PjE7KXt2YXIgaD1sLGY9dTtvPjImJmw+MSYmKG8vPWwvKGg9TWF0aC5jZWlsKGwvMikpKSxzPjImJnU+MSYmKHMvPXUvKGY9TWF0aC5jZWlsKHUvMikpKSwobj0ocj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhjLGgsZikpLmNvbnRleHQpLmNsZWFyUmVjdCgwLDAsaCxmKSxuLmRyYXdJbWFnZSh0LDAsMCxsLHUsMCwwLGgsZiksdD1yLmNhbnZhcyxsPWgsdT1mLGM9InByZXNjYWxlMSI9PT1jPyJwcmVzY2FsZTIiOiJwcmVzY2FsZTEifXJldHVybntpbWc6dCxwYWludFdpZHRoOmwscGFpbnRIZWlnaHQ6dX19fSx7a2V5OiJfY3JlYXRlTWFza0NhbnZhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixvLHMsdT10aGlzLmN0eCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXRoaXMuY3VycmVudC5maWxsQ29sb3IsZD10aGlzLmN1cnJlbnQucGF0dGVybkZpbGwscD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHUpO2lmKCh0LmJpdG1hcHx8dC5kYXRhKSYmdC5jb3VudD4xKXt2YXIgdj10LmJpdG1hcHx8dC5kYXRhLmJ1ZmZlcjtyPUpTT04uc3RyaW5naWZ5KGQ/cDpbcC5zbGljZSgwLDQpLGZdKSwoZT10aGlzLl9jYWNoZWRCaXRtYXBzTWFwLmdldCh2KSl8fChlPW5ldyBNYXAsdGhpcy5fY2FjaGVkQml0bWFwc01hcC5zZXQodixlKSk7dmFyIHk9ZS5nZXQocik7aWYoeSYmIWQpcmV0dXJue2NhbnZhczp5LG9mZnNldFg6TWF0aC5yb3VuZChNYXRoLm1pbihwWzBdLHBbMl0pK3BbNF0pLG9mZnNldFk6TWF0aC5yb3VuZChNYXRoLm1pbihwWzFdLHBbM10pK3BbNV0pfTtvPXl9b3x8eCgocz10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsYyxoKSkuY29udGV4dCx0KTt2YXIgbT1uLlV0aWwudHJhbnNmb3JtKHAsWzEvYywwLDAsLTEvaCwwLDBdKTttPW4uVXRpbC50cmFuc2Zvcm0obSxbMSwwLDAsMSwwLC1oXSk7dmFyIGc9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFswLDBdLG0pLGI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtjLGhdLG0pLF89bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2dbMF0sZ1sxXSxiWzBdLGJbMV1dKSx3PU1hdGgucm91bmQoX1syXS1fWzBdKXx8MSxrPU1hdGgucm91bmQoX1szXS1fWzFdKXx8MSxTPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJmaWxsQ2FudmFzIix3LGspLEU9Uy5jb250ZXh0LFA9TWF0aC5taW4oZ1swXSxiWzBdKSxUPU1hdGgubWluKGdbMV0sYlsxXSk7RS50cmFuc2xhdGUoLVAsLVQpLEUudHJhbnNmb3JtLmFwcGx5KEUsbChtKSksb3x8KG89KG89dGhpcy5fc2NhbGVJbWFnZShzLmNhbnZhcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSkpLmltZyxlJiZkJiZlLnNldChyLG8pKSxFLmltYWdlU21vb3RoaW5nRW5hYmxlZD1GKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkoRSksdC5pbnRlcnBvbGF0ZSksQShFLG8sMCwwLG8ud2lkdGgsby5oZWlnaHQsMCwwLGMsaCksRS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiI7dmFyIEM9bi5VdGlsLnRyYW5zZm9ybSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSxbMSwwLDAsMSwtUCwtVF0pO3JldHVybiBFLmZpbGxTdHlsZT1kP2YuZ2V0UGF0dGVybih1LHRoaXMsQyxhLlBhdGhUeXBlLkZJTEwpOmYsRS5maWxsUmVjdCgwLDAsYyxoKSxlJiYhZCYmKHRoaXMuY2FjaGVkQ2FudmFzZXMuZGVsZXRlKCJmaWxsQ2FudmFzIiksZS5zZXQocixTLmNhbnZhcykpLHtjYW52YXM6Uy5jYW52YXMsb2Zmc2V0WDpNYXRoLnJvdW5kKFApLG9mZnNldFk6TWF0aC5yb3VuZChUKX19fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3QhPT10aGlzLmN1cnJlbnQubGluZVdpZHRoJiYodGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsKSx0aGlzLmN1cnJlbnQubGluZVdpZHRoPXQsdGhpcy5jdHgubGluZVdpZHRoPXR9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN0eC5saW5lQ2FwPU1bdF19fSx7a2V5OiJzZXRMaW5lSm9pbiIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdHgubGluZUpvaW49Ult0XX19LHtrZXk6InNldE1pdGVyTGltaXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3R4Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldERhc2giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jdHg7dm9pZCAwIT09ci5zZXRMaW5lRGFzaCYmKHIuc2V0TGluZURhc2godCksci5saW5lRGFzaE9mZnNldD1lKX19LHtrZXk6InNldFJlbmRlcmluZ0ludGVudCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0RmxhdG5lc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe319LHtrZXk6InNldEdTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1jKHQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49aChlLnZhbHVlLDIpLGk9blswXSxhPW5bMV07c3dpdGNoKGkpe2Nhc2UiTFciOnRoaXMuc2V0TGluZVdpZHRoKGEpO2JyZWFrO2Nhc2UiTEMiOnRoaXMuc2V0TGluZUNhcChhKTticmVhaztjYXNlIkxKIjp0aGlzLnNldExpbmVKb2luKGEpO2JyZWFrO2Nhc2UiTUwiOnRoaXMuc2V0TWl0ZXJMaW1pdChhKTticmVhaztjYXNlIkQiOnRoaXMuc2V0RGFzaChhWzBdLGFbMV0pO2JyZWFrO2Nhc2UiUkkiOnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KGEpO2JyZWFrO2Nhc2UiRkwiOnRoaXMuc2V0RmxhdG5lc3MoYSk7YnJlYWs7Y2FzZSJGb250Ijp0aGlzLnNldEZvbnQoYVswXSxhWzFdKTticmVhaztjYXNlIkNBIjp0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9YTticmVhaztjYXNlImNhIjp0aGlzLmN1cnJlbnQuZmlsbEFscGhhPWEsdGhpcy5jdHguZ2xvYmFsQWxwaGE9YTticmVhaztjYXNlIkJNIjp0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YTticmVhaztjYXNlIlNNYXNrIjp0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s9YT90aGlzLnRlbXBTTWFzazpudWxsLHRoaXMudGVtcFNNYXNrPW51bGwsdGhpcy5jaGVja1NNYXNrU3RhdGUoKTticmVhaztjYXNlIlRSIjp0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzPWF9fX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fSx7a2V5OiJpblNNYXNrTW9kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnN1c3BlbmRlZEN0eH19LHtrZXk6ImNoZWNrU01hc2tTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluU01hc2tNb2RlO3RoaXMuY3VycmVudC5hY3RpdmVTTWFzayYmIXQ/dGhpcy5iZWdpblNNYXNrTW9kZSgpOiF0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2smJnQmJnRoaXMuZW5kU01hc2tNb2RlKCl9fSx7a2V5OiJiZWdpblNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmluU01hc2tNb2RlKXRocm93IG5ldyBFcnJvcigiYmVnaW5TTWFza01vZGUgY2FsbGVkIHdoaWxlIGFscmVhZHkgaW4gc21hc2sgbW9kZSIpO3ZhciB0PXRoaXMuY3R4LmNhbnZhcy53aWR0aCxlPXRoaXMuY3R4LmNhbnZhcy5oZWlnaHQscj0ic21hc2tHcm91cEF0Iit0aGlzLmdyb3VwTGV2ZWwsbj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhyLHQsZSk7dGhpcy5zdXNwZW5kZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9bi5jb250ZXh0O3ZhciBhPXRoaXMuY3R4O2Euc2V0VHJhbnNmb3JtLmFwcGx5KGEsbCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuc3VzcGVuZGVkQ3R4KSkpLEUodGhpcy5zdXNwZW5kZWRDdHgsYSksZnVuY3Rpb24odCxlKXtpZih0Ll9yZW1vdmVNaXJyb3JpbmcpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IGlzIGFscmVhZHkgZm9yd2FyZGluZyBvcGVyYXRpb25zLiIpO3QuX19vcmlnaW5hbFNhdmU9dC5zYXZlLHQuX19vcmlnaW5hbFJlc3RvcmU9dC5yZXN0b3JlLHQuX19vcmlnaW5hbFJvdGF0ZT10LnJvdGF0ZSx0Ll9fb3JpZ2luYWxTY2FsZT10LnNjYWxlLHQuX19vcmlnaW5hbFRyYW5zbGF0ZT10LnRyYW5zbGF0ZSx0Ll9fb3JpZ2luYWxUcmFuc2Zvcm09dC50cmFuc2Zvcm0sdC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtPXQuc2V0VHJhbnNmb3JtLHQuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtPXQucmVzZXRUcmFuc2Zvcm0sdC5fX29yaWdpbmFsQ2xpcD10LmNsaXAsdC5fX29yaWdpbmFsTW92ZVRvPXQubW92ZVRvLHQuX19vcmlnaW5hbExpbmVUbz10LmxpbmVUbyx0Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvPXQuYmV6aWVyQ3VydmVUbyx0Ll9fb3JpZ2luYWxSZWN0PXQucmVjdCx0Ll9fb3JpZ2luYWxDbG9zZVBhdGg9dC5jbG9zZVBhdGgsdC5fX29yaWdpbmFsQmVnaW5QYXRoPXQuYmVnaW5QYXRoLHQuX3JlbW92ZU1pcnJvcmluZz1mdW5jdGlvbigpe3Quc2F2ZT10Ll9fb3JpZ2luYWxTYXZlLHQucmVzdG9yZT10Ll9fb3JpZ2luYWxSZXN0b3JlLHQucm90YXRlPXQuX19vcmlnaW5hbFJvdGF0ZSx0LnNjYWxlPXQuX19vcmlnaW5hbFNjYWxlLHQudHJhbnNsYXRlPXQuX19vcmlnaW5hbFRyYW5zbGF0ZSx0LnRyYW5zZm9ybT10Ll9fb3JpZ2luYWxUcmFuc2Zvcm0sdC5zZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtLHQucmVzZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0sdC5jbGlwPXQuX19vcmlnaW5hbENsaXAsdC5tb3ZlVG89dC5fX29yaWdpbmFsTW92ZVRvLHQubGluZVRvPXQuX19vcmlnaW5hbExpbmVUbyx0LmJlemllckN1cnZlVG89dC5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyx0LnJlY3Q9dC5fX29yaWdpbmFsUmVjdCx0LmNsb3NlUGF0aD10Ll9fb3JpZ2luYWxDbG9zZVBhdGgsdC5iZWdpblBhdGg9dC5fX29yaWdpbmFsQmVnaW5QYXRoLGRlbGV0ZSB0Ll9yZW1vdmVNaXJyb3Jpbmd9LHQuc2F2ZT1mdW5jdGlvbigpe2Uuc2F2ZSgpLHRoaXMuX19vcmlnaW5hbFNhdmUoKX0sdC5yZXN0b3JlPWZ1bmN0aW9uKCl7ZS5yZXN0b3JlKCksdGhpcy5fX29yaWdpbmFsUmVzdG9yZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbih0LHIpe2UudHJhbnNsYXRlKHQsciksdGhpcy5fX29yaWdpbmFsVHJhbnNsYXRlKHQscil9LHQuc2NhbGU9ZnVuY3Rpb24odCxyKXtlLnNjYWxlKHQsciksdGhpcy5fX29yaWdpbmFsU2NhbGUodCxyKX0sdC50cmFuc2Zvcm09ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UudHJhbnNmb3JtKHQscixuLGksYSxvKSx0aGlzLl9fb3JpZ2luYWxUcmFuc2Zvcm0odCxyLG4saSxhLG8pfSx0LnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LHIsbixpLGEsbyl7ZS5zZXRUcmFuc2Zvcm0odCxyLG4saSxhLG8pLHRoaXMuX19vcmlnaW5hbFNldFRyYW5zZm9ybSh0LHIsbixpLGEsbyl9LHQucmVzZXRUcmFuc2Zvcm09ZnVuY3Rpb24oKXtlLnJlc2V0VHJhbnNmb3JtKCksdGhpcy5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0oKX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7ZS5yb3RhdGUodCksdGhpcy5fX29yaWdpbmFsUm90YXRlKHQpfSx0LmNsaXA9ZnVuY3Rpb24odCl7ZS5jbGlwKHQpLHRoaXMuX19vcmlnaW5hbENsaXAodCl9LHQubW92ZVRvPWZ1bmN0aW9uKHQscil7ZS5tb3ZlVG8odCxyKSx0aGlzLl9fb3JpZ2luYWxNb3ZlVG8odCxyKX0sdC5saW5lVG89ZnVuY3Rpb24odCxyKXtlLmxpbmVUbyh0LHIpLHRoaXMuX19vcmlnaW5hbExpbmVUbyh0LHIpfSx0LmJlemllckN1cnZlVG89ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UuYmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyksdGhpcy5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyl9LHQucmVjdD1mdW5jdGlvbih0LHIsbixpKXtlLnJlY3QodCxyLG4saSksdGhpcy5fX29yaWdpbmFsUmVjdCh0LHIsbixpKX0sdC5jbG9zZVBhdGg9ZnVuY3Rpb24oKXtlLmNsb3NlUGF0aCgpLHRoaXMuX19vcmlnaW5hbENsb3NlUGF0aCgpfSx0LmJlZ2luUGF0aD1mdW5jdGlvbigpe2UuYmVnaW5QYXRoKCksdGhpcy5fX29yaWdpbmFsQmVnaW5QYXRoKCl9fShhLHRoaXMuc3VzcGVuZGVkQ3R4KSx0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKX19LHtrZXk6ImVuZFNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pblNNYXNrTW9kZSl0aHJvdyBuZXcgRXJyb3IoImVuZFNNYXNrTW9kZSBjYWxsZWQgd2hpbGUgbm90IGluIHNtYXNrIG1vZGUiKTt0aGlzLmN0eC5fcmVtb3ZlTWlycm9yaW5nKCksRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5jdHg9dGhpcy5zdXNwZW5kZWRDdHgsdGhpcy5zdXNwZW5kZWRDdHg9bnVsbH19LHtrZXk6ImNvbXBvc2UiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayl7dD8odFswXT1NYXRoLmZsb29yKHRbMF0pLHRbMV09TWF0aC5mbG9vcih0WzFdKSx0WzJdPU1hdGguY2VpbCh0WzJdKSx0WzNdPU1hdGguY2VpbCh0WzNdKSk6dD1bMCwwLHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0XTt2YXIgZT10aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s7KGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5bMF0sYT1uWzFdLG89blsyXS1pLHM9blszXS1hOzAhPT1vJiYwIT09cyYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLHUsYyl7dmFyIGgsZj0hIWEsZD1mP2FbMF06MCxwPWY/YVsxXTowLHY9Zj9hWzJdOjA7aD0iTHVtaW5vc2l0eSI9PT1pP086Qztmb3IodmFyIHk9TWF0aC5taW4obixNYXRoLmNlaWwoMTA0ODU3Ni9yKSksbT0wO208bjttKz15KXt2YXIgZz1NYXRoLm1pbih5LG4tbSksYj10LmdldEltYWdlRGF0YShzLXUsbSsobC1jKSxyLGcpLF89ZS5nZXRJbWFnZURhdGEocyxtK2wscixnKTtmJiZUKGIuZGF0YSxkLHAsdiksaChiLmRhdGEsXy5kYXRhLG8pLGUucHV0SW1hZ2VEYXRhKF8scyxtK2wpfX0oZS5jb250ZXh0LHIsbyxzLGUuc3VidHlwZSxlLmJhY2tkcm9wLGUudHJhbnNmZXJNYXAsaSxhLGUub2Zmc2V0WCxlLm9mZnNldFkpLHQuc2F2ZSgpLHQuZ2xvYmFsQWxwaGE9MSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0LmRyYXdJbWFnZShyLmNhbnZhcywwLDApLHQucmVzdG9yZSgpKX0pKHRoaXMuc3VzcGVuZGVkQ3R4LGUsdGhpcy5jdHgsdCksdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguY2xlYXJSZWN0KDAsMCx0aGlzLmN0eC5jYW52YXMud2lkdGgsdGhpcy5jdHguY2FudmFzLmhlaWdodCksdGhpcy5jdHgucmVzdG9yZSgpfX19LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pblNNYXNrTW9kZT8oRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5zdXNwZW5kZWRDdHguc2F2ZSgpKTp0aGlzLmN0eC5zYXZlKCk7dmFyIHQ9dGhpcy5jdXJyZW50O3RoaXMuc3RhdGVTdGFjay5wdXNoKHQpLHRoaXMuY3VycmVudD10LmNsb25lKCl9fSx7a2V5OiJyZXN0b3JlIix2YWx1ZTpmdW5jdGlvbigpezA9PT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiZ0aGlzLmluU01hc2tNb2RlJiZ0aGlzLmVuZFNNYXNrTW9kZSgpLDAhPT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiYodGhpcy5jdXJyZW50PXRoaXMuc3RhdGVTdGFjay5wb3AoKSx0aGlzLmluU01hc2tNb2RlPyh0aGlzLnN1c3BlbmRlZEN0eC5yZXN0b3JlKCksRSh0aGlzLnN1c3BlbmRlZEN0eCx0aGlzLmN0eCkpOnRoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLmNoZWNrU01hc2tTdGF0ZSgpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY3R4LnRyYW5zZm9ybSh0LGUscixuLGksYSksdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsLHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9bnVsbH19LHtrZXk6ImNvbnN0cnVjdFBhdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGEsbyxzPXRoaXMuY3R4LGw9dGhpcy5jdXJyZW50LHU9bC54LGM9bC55LGg9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShzKSxmPTA9PT1oWzBdJiYwPT09aFszXXx8MD09PWhbMV0mJjA9PT1oWzJdLGQ9Zj9yLnNsaWNlKDApOm51bGwscD0wLHY9MCx5PXQubGVuZ3RoO3A8eTtwKyspc3dpdGNoKDB8dFtwXSl7Y2FzZSBuLk9QUy5yZWN0YW5nbGU6dT1lW3YrK10sYz1lW3YrK107dmFyIG09ZVt2KytdLGc9ZVt2KytdLGI9dSttLF89YytnO3MubW92ZVRvKHUsYyksMD09PW18fDA9PT1nP3MubGluZVRvKGIsXyk6KHMubGluZVRvKGIsYykscy5saW5lVG8oYixfKSxzLmxpbmVUbyh1LF8pKSxmfHxsLnVwZGF0ZVJlY3RNaW5NYXgoaCxbdSxjLGIsX10pLHMuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSBuLk9QUy5tb3ZlVG86dT1lW3YrK10sYz1lW3YrK10scy5tb3ZlVG8odSxjKSxmfHxsLnVwZGF0ZVBhdGhNaW5NYXgoaCx1LGMpO2JyZWFrO2Nhc2Ugbi5PUFMubGluZVRvOnU9ZVt2KytdLGM9ZVt2KytdLHMubGluZVRvKHUsYyksZnx8bC51cGRhdGVQYXRoTWluTWF4KGgsdSxjKTticmVhaztjYXNlIG4uT1BTLmN1cnZlVG86YT11LG89Yyx1PWVbdis0XSxjPWVbdis1XSxzLmJlemllckN1cnZlVG8oZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sdSxjLGQpLHYrPTY7YnJlYWs7Y2FzZSBuLk9QUy5jdXJ2ZVRvMjphPXUsbz1jLHMuYmV6aWVyQ3VydmVUbyh1LGMsZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSksbC51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoaCxhLG8sdSxjLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sZCksdT1lW3YrMl0sYz1lW3YrM10sdis9NDticmVhaztjYXNlIG4uT1BTLmN1cnZlVG8zOmE9dSxvPWMsdT1lW3YrMl0sYz1lW3YrM10scy5iZXppZXJDdXJ2ZVRvKGVbdl0sZVt2KzFdLHUsYyx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLHUsYyx1LGMsZCksdis9NDticmVhaztjYXNlIG4uT1BTLmNsb3NlUGF0aDpzLmNsb3NlUGF0aCgpfWYmJmwudXBkYXRlU2NhbGluZ1BhdGhNaW5NYXgoaCxkKSxsLnNldEN1cnJlbnRQb2ludCh1LGMpfX0se2tleToiY2xvc2VQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY3R4LmNsb3NlUGF0aCgpfX0se2tleToic3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5zdHJva2VBbHBoYSx0aGlzLmNvbnRlbnRWaXNpYmxlJiYoIm9iamVjdCI9PT1wKHIpJiZudWxsIT1yJiZyLmdldFBhdHRlcm4/KGUuc2F2ZSgpLGUuc3Ryb2tlU3R5bGU9ci5nZXRQYXR0ZXJuKGUsdGhpcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKSxhLlBhdGhUeXBlLlNUUk9LRSksdGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCExKSxlLnJlc3RvcmUoKSk6dGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCEwKSksdCYmdGhpcy5jb25zdW1lUGF0aCh0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpKSxlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5maWxsQWxwaGF9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5maWxsQ29sb3Isbj0hMTt0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwmJihlLnNhdmUoKSxlLmZpbGxTdHlsZT1yLmdldFBhdHRlcm4oZSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKGUpLGEuUGF0aFR5cGUuRklMTCksbj0hMCk7dmFyIG89dGhpcy5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goKTt0aGlzLmNvbnRlbnRWaXNpYmxlJiZudWxsIT09byYmKHRoaXMucGVuZGluZ0VPRmlsbD8oZS5maWxsKCJldmVub2RkIiksdGhpcy5wZW5kaW5nRU9GaWxsPSExKTplLmZpbGwoKSksbiYmZS5yZXN0b3JlKCksdCYmdGhpcy5jb25zdW1lUGF0aChvKX19LHtrZXk6ImVvRmlsbCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZmlsbCghMSksdGhpcy5zdHJva2UoITEpLHRoaXMuY29uc3VtZVBhdGgoKX19LHtrZXk6ImVvRmlsbFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0VPRmlsbD0hMCx0aGlzLmNsb3NlUGF0aCgpLHRoaXMuZmlsbFN0cm9rZSgpfX0se2tleToiZW5kUGF0aCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN1bWVQYXRoKCl9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0NsaXA9SX19LHtrZXk6ImVvQ2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdDbGlwPWp9fSx7a2V5OiJiZWdpblRleHQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVgsdGhpcy5jdXJyZW50LnRleHRNYXRyaXhTY2FsZT0xLHRoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wLHRoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBlbmRpbmdUZXh0UGF0aHMsZT10aGlzLmN0eDtpZih2b2lkIDAhPT10KXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpO3ZhciByLG49Yyh0KTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zZXRUcmFuc2Zvcm0uYXBwbHkoZSxsKGkudHJhbnNmb3JtKSksZS50cmFuc2xhdGUoaS54LGkueSksaS5hZGRUb1BhdGgoZSxpLmZvbnRTaXplKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9ZS5yZXN0b3JlKCksZS5jbGlwKCksZS5iZWdpblBhdGgoKSxkZWxldGUgdGhpcy5wZW5kaW5nVGV4dFBhdGhzfWVsc2UgZS5iZWdpblBhdGgoKX19LHtrZXk6InNldENoYXJTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuY2hhclNwYWNpbmc9dH19LHtrZXk6InNldFdvcmRTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9dH19LHtrZXk6InNldEhTY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRIU2NhbGU9dC8xMDB9fSx7a2V5OiJzZXRMZWFkaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGVhZGluZz0tdH19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21tb25PYmpzLmdldCh0KSxpPXRoaXMuY3VycmVudDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGZpbmQgZm9udCBmb3IgIi5jb25jYXQodCkpO2lmKGkuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsMCE9PWkuZm9udE1hdHJpeFswXSYmMCE9PWkuZm9udE1hdHJpeFszXXx8KDAsbi53YXJuKSgiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCAiK3QpLGU8MD8oZT0tZSxpLmZvbnREaXJlY3Rpb249LTEpOmkuZm9udERpcmVjdGlvbj0xLHRoaXMuY3VycmVudC5mb250PXIsdGhpcy5jdXJyZW50LmZvbnRTaXplPWUsIXIuaXNUeXBlM0ZvbnQpe3ZhciBhPXIubG9hZGVkTmFtZXx8InNhbnMtc2VyaWYiLG89Im5vcm1hbCI7ci5ibGFjaz9vPSI5MDAiOnIuYm9sZCYmKG89ImJvbGQiKTt2YXIgcz1yLml0YWxpYz8iaXRhbGljIjoibm9ybWFsIixsPSciJy5jb25jYXQoYSwnIiwgJykuY29uY2F0KHIuZmFsbGJhY2tOYW1lKSx1PWU7ZTwxNj91PTE2OmU+MTAwJiYodT0xMDApLHRoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlPWUvdSx0aGlzLmN0eC5mb250PSIiLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiAiKS5jb25jYXQodSwicHggIikuY29uY2F0KGwpfX19LHtrZXk6InNldFRleHRSZW5kZXJpbmdNb2RlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGU9dH19LHtrZXk6InNldFRleHRSaXNlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJpc2U9dH19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWCs9dCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVkrPWV9fSx7a2V5OiJzZXRMZWFkaW5nTW92ZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRMZWFkaW5nKC1lKSx0aGlzLm1vdmVUZXh0KHQsZSl9fSx7a2V5OiJzZXRUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9W3QsZSxyLG4saSxhXSx0aGlzLmN1cnJlbnQudGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSx0aGlzLmN1cnJlbnQueD10aGlzLmN1cnJlbnQubGluZVg9MCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVk9MH19LHtrZXk6Im5leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubW92ZVRleHQoMCx0aGlzLmN1cnJlbnQubGVhZGluZyl9fSx7a2V5OiJwYWludENoYXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM9dGhpcy5jdHgsdT10aGlzLmN1cnJlbnQsYz11LmZvbnQsaD11LnRleHRSZW5kZXJpbmdNb2RlLGY9dS5mb250U2l6ZS91LmZvbnRTaXplU2NhbGUsZD1oJm4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSyxwPSEhKGgmbi5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKSx2PXUucGF0dGVybkZpbGwmJiFjLm1pc3NpbmdGaWxlOyhjLmRpc2FibGVGb250RmFjZXx8cHx8dikmJihvPWMuZ2V0UGF0aEdlbmVyYXRvcih0aGlzLmNvbW1vbk9ianMsdCkpLGMuZGlzYWJsZUZvbnRGYWNlfHx2PyhzLnNhdmUoKSxzLnRyYW5zbGF0ZShlLHIpLHMuYmVnaW5QYXRoKCksbyhzLGYpLGEmJnMuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbChhKSksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuZmlsbCgpLGQhPT1uLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuc3Ryb2tlKCkscy5yZXN0b3JlKCkpOihkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5maWxsVGV4dCh0LGUsciksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5zdHJva2VUZXh0KHQsZSxyKSkscCYmKHRoaXMucGVuZGluZ1RleHRQYXRoc3x8KHRoaXMucGVuZGluZ1RleHRQYXRocz1bXSkpLnB1c2goe3RyYW5zZm9ybTooMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHMpLHg6ZSx5OnIsZm9udFNpemU6ZixhZGRUb1BhdGg6b30pfX0se2tleToiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCIsMTAsMTApLmNvbnRleHQ7dC5zY2FsZSgxLjUsMSksdC5maWxsVGV4dCgiSSIsMCwxMCk7Zm9yKHZhciBlPXQuZ2V0SW1hZ2VEYXRhKDAsMCwxMCwxMCkuZGF0YSxyPSExLGk9MztpPGUubGVuZ3RoO2krPTQpaWYoZVtpXT4wJiZlW2ldPDI1NSl7cj0hMDticmVha31yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLHIpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udDtpZihyLmlzVHlwZTNGb250KXJldHVybiB0aGlzLnNob3dUeXBlM1RleHQodCk7dmFyIG89ZS5mb250U2l6ZTtpZigwIT09byl7dmFyIHMsdT10aGlzLmN0eCxoPWUuZm9udFNpemVTY2FsZSxmPWUuY2hhclNwYWNpbmcsZD1lLndvcmRTcGFjaW5nLHA9ZS5mb250RGlyZWN0aW9uLHY9ZS50ZXh0SFNjYWxlKnAseT10Lmxlbmd0aCxtPXIudmVydGljYWwsZz1tPzE6LTEsYj1yLmRlZmF1bHRWTWV0cmljcyxfPW8qZS5mb250TWF0cml4WzBdLHc9ZS50ZXh0UmVuZGVyaW5nTW9kZT09PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmIXIuZGlzYWJsZUZvbnRGYWNlJiYhZS5wYXR0ZXJuRmlsbDtpZih1LnNhdmUoKSx1LnRyYW5zZm9ybS5hcHBseSh1LGwoZS50ZXh0TWF0cml4KSksdS50cmFuc2xhdGUoZS54LGUueStlLnRleHRSaXNlKSxwPjA/dS5zY2FsZSh2LC0xKTp1LnNjYWxlKHYsMSksZS5wYXR0ZXJuRmlsbCl7dS5zYXZlKCk7dmFyIEE9ZS5maWxsQ29sb3IuZ2V0UGF0dGVybih1LHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkodSksYS5QYXRoVHlwZS5GSUxMKTtzPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodSksdS5yZXN0b3JlKCksdS5maWxsU3R5bGU9QX12YXIgaz1lLmxpbmVXaWR0aCxTPWUudGV4dE1hdHJpeFNjYWxlO2lmKDA9PT1TfHwwPT09ayl7dmFyIHg9ZS50ZXh0UmVuZGVyaW5nTW9kZSZuLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7eCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZ4IT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8KGs9dGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpfWVsc2Ugay89UztpZigxIT09aCYmKHUuc2NhbGUoaCxoKSxrLz1oKSx1LmxpbmVXaWR0aD1rLHIuaXNJbnZhbGlkUERGanNGb250KXt2YXIgRSxQPVtdLFQ9MCxDPWModCk7dHJ5e2ZvcihDLnMoKTshKEU9Qy5uKCkpLmRvbmU7KXt2YXIgTz1FLnZhbHVlO1AucHVzaChPLnVuaWNvZGUpLFQrPU8ud2lkdGh9fWNhdGNoKHQpe0MuZSh0KX1maW5hbGx5e0MuZigpfXJldHVybiB1LmZpbGxUZXh0KFAuam9pbigiIiksMCwwKSxlLngrPVQqXyp2LHUucmVzdG9yZSgpLHZvaWQgdGhpcy5jb21wb3NlKCl9dmFyIEYsTT0wO2ZvcihGPTA7Rjx5OysrRil7dmFyIFI9dFtGXTtpZigibnVtYmVyIiE9dHlwZW9mIFIpe3ZhciBJPSExLGo9KFIuaXNTcGFjZT9kOjApK2YsTD1SLmZvbnRDaGFyLEQ9Ui5hY2NlbnQsTj12b2lkIDAsVT12b2lkIDAsVz1SLndpZHRoO2lmKG0pe3ZhciBHPVIudm1ldHJpY3x8YixCPS0oUi52bWV0cmljP0dbMV06LjUqVykqXyxxPUdbMl0qXztXPUc/LUdbMF06VyxOPUIvaCxVPShNK3EpL2h9ZWxzZSBOPU0vaCxVPTA7aWYoci5yZW1lYXN1cmUmJlc+MCl7dmFyIEg9MWUzKnUubWVhc3VyZVRleHQoTCkud2lkdGgvbypoO2lmKFc8SCYmdGhpcy5pc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCl7dmFyIHo9Vy9IO0k9ITAsdS5zYXZlKCksdS5zY2FsZSh6LDEpLE4vPXp9ZWxzZSBXIT09SCYmKE4rPShXLUgpLzJlMypvL2gpfWlmKHRoaXMuY29udGVudFZpc2libGUmJihSLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSlpZih3JiYhRCl1LmZpbGxUZXh0KEwsTixVKTtlbHNlIGlmKHRoaXMucGFpbnRDaGFyKEwsTixVLHMpLEQpe3ZhciBWPU4rbypELm9mZnNldC54L2gsWD1VLW8qRC5vZmZzZXQueS9oO3RoaXMucGFpbnRDaGFyKEQuZm9udENoYXIsVixYLHMpfU0rPW0/VypfLWoqcDpXKl8raipwLEkmJnUucmVzdG9yZSgpfWVsc2UgTSs9ZypSKm8vMWUzfW0/ZS55LT1NOmUueCs9TSp2LHUucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InNob3dUeXBlM1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG89dGhpcy5jdHgscz10aGlzLmN1cnJlbnQsdT1zLmZvbnQsYz1zLmZvbnRTaXplLGg9cy5mb250RGlyZWN0aW9uLGY9dS52ZXJ0aWNhbD8xOi0xLGQ9cy5jaGFyU3BhY2luZyxwPXMud29yZFNwYWNpbmcsdj1zLnRleHRIU2NhbGUqaCx5PXMuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWCxtPXQubGVuZ3RoO2lmKHMudGV4dFJlbmRlcmluZ01vZGUhPT1uLlRleHRSZW5kZXJpbmdNb2RlLklOVklTSUJMRSYmMCE9PWMpe2Zvcih0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsLG8uc2F2ZSgpLG8udHJhbnNmb3JtLmFwcGx5KG8sbChzLnRleHRNYXRyaXgpKSxvLnRyYW5zbGF0ZShzLngscy55KSxvLnNjYWxlKHYsaCksZT0wO2U8bTsrK2UpaWYoIm51bWJlciIhPXR5cGVvZihyPXRbZV0pKXt2YXIgZz0oci5pc1NwYWNlP3A6MCkrZCxiPXUuY2hhclByb2NPcGVyYXRvckxpc3Rbci5vcGVyYXRvckxpc3RJZF07Yj8odGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMucHJvY2Vzc2luZ1R5cGUzPXIsdGhpcy5zYXZlKCksby5zY2FsZShjLGMpLG8udHJhbnNmb3JtLmFwcGx5KG8sbCh5KSksdGhpcy5leGVjdXRlT3BlcmF0b3JMaXN0KGIpLHRoaXMucmVzdG9yZSgpKSxpPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbci53aWR0aCwwXSx5KVswXSpjK2csby50cmFuc2xhdGUoaSwwKSxzLngrPWkqdik6KDAsbi53YXJuKSgnVHlwZTMgY2hhcmFjdGVyICInLmNvbmNhdChyLm9wZXJhdG9yTGlzdElkLCciIGlzIG5vdCBhdmFpbGFibGUuJykpfWVsc2UgYT1mKnIqYy8xZTMsdGhpcy5jdHgudHJhbnNsYXRlKGEsMCkscy54Kz1hKnY7by5yZXN0b3JlKCksdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbH19fSx7a2V5OiJzZXRDaGFyV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToic2V0Q2hhcldpZHRoQW5kQm91bmRzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdHgucmVjdChyLG4saS1yLGEtbiksdGhpcy5jdHguY2xpcCgpLHRoaXMuZW5kUGF0aCgpfX0se2tleToiZ2V0Q29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcztpZigiVGlsaW5nUGF0dGVybiI9PT1lWzBdKXt2YXIgbz1lWzFdLHM9dGhpcy5iYXNlVHJhbnNmb3JtfHwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxsPXtjcmVhdGVDYW52YXNHcmFwaGljczpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSxuLmNvbW1vbk9ianMsbi5vYmpzLG4uY2FudmFzRmFjdG9yeSx7b3B0aW9uYWxDb250ZW50Q29uZmlnOm4ub3B0aW9uYWxDb250ZW50Q29uZmlnLG1hcmtlZENvbnRlbnRTdGFjazpuLm1hcmtlZENvbnRlbnRTdGFja30pfX07cj1uZXcgYS5UaWxpbmdQYXR0ZXJuKGUsbyx0aGlzLmN0eCxsLHMpfWVsc2Ugcj10aGlzLl9nZXRQYXR0ZXJuKGVbMV0sZVsyXSk7cmV0dXJuIHJ9fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPXRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKX19LHtrZXk6InNldEZpbGxDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LmZpbGxDb2xvcj10aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyksdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsPSEwfX0se2tleToic2V0U3Ryb2tlUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LnN0cm9rZVN0eWxlPWEsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWF9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LmZpbGxTdHlsZT1hLHRoaXMuY3VycmVudC5maWxsQ29sb3I9YSx0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw9ITF9fSx7a2V5OiJfZ2V0UGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJucy5oYXModCk/ZT10aGlzLmNhY2hlZFBhdHRlcm5zLmdldCh0KTooZT0oMCxhLmdldFNoYWRpbmdQYXR0ZXJuKSh0aGlzLm9ianMuZ2V0KHQpKSx0aGlzLmNhY2hlZFBhdHRlcm5zLnNldCh0LGUpKSxyJiYoZS5tYXRyaXg9ciksZX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmN0eDt0aGlzLnNhdmUoKTt2YXIgcj10aGlzLl9nZXRQYXR0ZXJuKHQpO2UuZmlsbFN0eWxlPXIuZ2V0UGF0dGVybihlLHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoZSksYS5QYXRoVHlwZS5TSEFESU5HKTt2YXIgbz0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKTtpZihvKXt2YXIgcz1lLmNhbnZhcyxsPXMud2lkdGgsdT1zLmhlaWdodCxjPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCwwXSxvKSxoPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCx1XSxvKSxmPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCwwXSxvKSxkPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCx1XSxvKSxwPU1hdGgubWluKGNbMF0saFswXSxmWzBdLGRbMF0pLHY9TWF0aC5taW4oY1sxXSxoWzFdLGZbMV0sZFsxXSkseT1NYXRoLm1heChjWzBdLGhbMF0sZlswXSxkWzBdKSxtPU1hdGgubWF4KGNbMV0saFsxXSxmWzFdLGRbMV0pO3RoaXMuY3R4LmZpbGxSZWN0KHAsdix5LXAsbS12KX1lbHNlIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLC0xZTEwLDJlMTAsMmUxMCk7dGhpcy5jb21wb3NlKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpLHRoaXMucmVzdG9yZSgpfX19LHtrZXk6ImJlZ2luSW5saW5lSW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlIil9fSx7a2V5OiJiZWdpbkltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhIil9fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuc2F2ZSgpLHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKSxBcnJheS5pc0FycmF5KHQpJiY2PT09dC5sZW5ndGgmJnRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbCh0KSksdGhpcy5iYXNlVHJhbnNmb3JtPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpLGUpKXt2YXIgcj1lWzJdLWVbMF0sbj1lWzNdLWVbMV07dGhpcy5jdHgucmVjdChlWzBdLGVbMV0scixuKSx0aGlzLmN1cnJlbnQudXBkYXRlUmVjdE1pbk1heCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxlKSx0aGlzLmNsaXAoKSx0aGlzLmVuZFBhdGgoKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0RW5kIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGVudFZpc2libGUmJih0aGlzLnJlc3RvcmUoKSx0aGlzLmJhc2VUcmFuc2Zvcm09dGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sucG9wKCkpfX0se2tleToiYmVnaW5Hcm91cCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5jb250ZW50VmlzaWJsZSl7dGhpcy5zYXZlKCksdGhpcy5pblNNYXNrTW9kZSYmKHRoaXMuZW5kU01hc2tNb2RlKCksdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrPW51bGwpO3ZhciBlPXRoaXMuY3R4O3QuaXNvbGF0ZWR8fCgwLG4uaW5mbykoIlRPRE86IFN1cHBvcnQgbm9uLWlzb2xhdGVkIGdyb3Vwcy4iKSx0Lmtub2Nrb3V0JiYoMCxuLndhcm4pKCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC4iKTt2YXIgcj0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGUpO2lmKHQubWF0cml4JiZlLnRyYW5zZm9ybS5hcHBseShlLGwodC5tYXRyaXgpKSwhdC5iYm94KXRocm93IG5ldyBFcnJvcigiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLiIpO3ZhciBhPW4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LmJib3gsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSksbz1bMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodF07YT1uLlV0aWwuaW50ZXJzZWN0KGEsbyl8fFswLDAsMCwwXTt2YXIgcz1NYXRoLmZsb29yKGFbMF0pLHU9TWF0aC5mbG9vcihhWzFdKSxjPU1hdGgubWF4KE1hdGguY2VpbChhWzJdKS1zLDEpLGg9TWF0aC5tYXgoTWF0aC5jZWlsKGFbM10pLXUsMSksZj0xLGQ9MTtjPmcmJihmPWMvZyxjPWcpLGg+ZyYmKGQ9aC9nLGg9ZyksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3goWzAsMCxjLGhdKTt2YXIgcD0iZ3JvdXBBdCIrdGhpcy5ncm91cExldmVsO3Quc21hc2smJihwKz0iX3NtYXNrXyIrdGhpcy5zbWFza0NvdW50ZXIrKyUyKTt2YXIgdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhwLGMsaCkseT12LmNvbnRleHQ7eS5zY2FsZSgxL2YsMS9kKSx5LnRyYW5zbGF0ZSgtcywtdSkseS50cmFuc2Zvcm0uYXBwbHkoeSxsKHIpKSx0LnNtYXNrP3RoaXMuc21hc2tTdGFjay5wdXNoKHtjYW52YXM6di5jYW52YXMsY29udGV4dDp5LG9mZnNldFg6cyxvZmZzZXRZOnUsc2NhbGVYOmYsc2NhbGVZOmQsc3VidHlwZTp0LnNtYXNrLnN1YnR5cGUsYmFja2Ryb3A6dC5zbWFzay5iYWNrZHJvcCx0cmFuc2Zlck1hcDp0LnNtYXNrLnRyYW5zZmVyTWFwfHxudWxsLHN0YXJ0VHJhbnNmb3JtSW52ZXJzZTpudWxsfSk6KGUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxlLnRyYW5zbGF0ZShzLHUpLGUuc2NhbGUoZixkKSxlLnNhdmUoKSksRShlLHkpLHRoaXMuY3R4PXksdGhpcy5zZXRHU3RhdGUoW1siQk0iLCJzb3VyY2Utb3ZlciJdLFsiY2EiLDFdLFsiQ0EiLDFdXSksdGhpcy5ncm91cFN0YWNrLnB1c2goZSksdGhpcy5ncm91cExldmVsKyt9fX0se2tleToiZW5kR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3RoaXMuZ3JvdXBMZXZlbC0tO3ZhciBlPXRoaXMuY3R4LHI9dGhpcy5ncm91cFN0YWNrLnBvcCgpO2lmKHRoaXMuY3R4PXIsdGhpcy5jdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExLHQuc21hc2spdGhpcy50ZW1wU01hc2s9dGhpcy5zbWFza1N0YWNrLnBvcCgpLHRoaXMucmVzdG9yZSgpO2Vsc2V7dmFyIGE7dGhpcy5jdHgucmVzdG9yZSgpO3ZhciBvPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpO3RoaXMucmVzdG9yZSgpLHRoaXMuY3R4LnNhdmUoKSwoYT10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KGEsbChvKSk7dmFyIHM9bi5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0XSxvKTt0aGlzLmN0eC5kcmF3SW1hZ2UoZS5jYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy5jb21wb3NlKHMpfX19fSx7a2V5OiJiZWdpbkFubm90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM7aWYodSh0aGlzLEwsTikuY2FsbCh0aGlzKSxQKHRoaXMuY3R4LHRoaXMuZm9yZWdyb3VuZENvbG9yKSx0aGlzLmN0eC5zYXZlKCksdGhpcy5zYXZlKCksdGhpcy5iYXNlVHJhbnNmb3JtJiYocz10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbCh0aGlzLmJhc2VUcmFuc2Zvcm0pKSxBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGgpe3ZhciBjPWVbMl0tZVswXSxmPWVbM10tZVsxXTtpZihvJiZ0aGlzLmFubm90YXRpb25DYW52YXNNYXApeyhyPXIuc2xpY2UoKSlbNF0tPWVbMF0scls1XS09ZVsxXSwoZT1lLnNsaWNlKCkpWzBdPWVbMV09MCxlWzJdPWMsZVszXT1mO3ZhciBkPWgobi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpKSwyKSxwPWRbMF0sdj1kWzFdLHk9dGhpcy52aWV3cG9ydFNjYWxlLG09TWF0aC5jZWlsKGMqdGhpcy5vdXRwdXRTY2FsZVgqeSksZz1NYXRoLmNlaWwoZip0aGlzLm91dHB1dFNjYWxlWSp5KTt0aGlzLmFubm90YXRpb25DYW52YXM9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZShtLGcpO3ZhciBiPXRoaXMuYW5ub3RhdGlvbkNhbnZhcyxfPWIuY2FudmFzLHc9Yi5jb250ZXh0O3RoaXMuYW5ub3RhdGlvbkNhbnZhc01hcC5zZXQodCxfKSx0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9dyx0aGlzLmN0eC5zZXRUcmFuc2Zvcm0ocCwwLDAsLXYsMCxmKnYpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpfWVsc2UgUCh0aGlzLmN0eCx0aGlzLmZvcmVncm91bmRDb2xvciksdGhpcy5jdHgucmVjdChlWzBdLGVbMV0sYyxmKSx0aGlzLmN0eC5jbGlwKCksdGhpcy5lbmRQYXRoKCl9dGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLGwocikpLHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbChhKSl9fSx7a2V5OiJlbmRBbm5vdGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYW5ub3RhdGlvbkNhbnZhcyYmKHRoaXMuY3R4PXRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eCxkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzLnNhdmVkQ3R4LGRlbGV0ZSB0aGlzLmFubm90YXRpb25DYW52YXMpfX0se2tleToicGFpbnRJbWFnZU1hc2tYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10LmNvdW50Oyh0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KSkuY291bnQ9ZTt2YXIgcj10aGlzLmN0eCxuPXRoaXMucHJvY2Vzc2luZ1R5cGUzO2lmKG4mJih2b2lkIDA9PT1uLmNvbXBpbGVkJiYobi5jb21waWxlZD1mdW5jdGlvbih0KXt2YXIgZT10LndpZHRoLHI9dC5oZWlnaHQ7aWYoZT5ifHxyPmIpcmV0dXJuIG51bGw7dmFyIG4saSxhLG8scz1uZXcgVWludDhBcnJheShbMCwyLDQsMCwxLDAsNSw0LDgsMTAsMCw4LDAsMiwxLDBdKSxsPWUrMSx1PW5ldyBVaW50OEFycmF5KGwqKHIrMSkpLGg9ZSs3Ji04LGY9bmV3IFVpbnQ4QXJyYXkoaCpyKSxkPTAscD1jKHQuZGF0YSk7dHJ5e2ZvcihwLnMoKTshKG89cC5uKCkpLmRvbmU7KWZvcih2YXIgdj1vLnZhbHVlLHk9MTI4O3k+MDspZltkKytdPXYmeT8wOjI1NSx5Pj49MX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX12YXIgbT0wO2ZvcigwIT09ZltkPTBdJiYodVswXT0xLCsrbSksaT0xO2k8ZTtpKyspZltkXSE9PWZbZCsxXSYmKHVbaV09ZltkXT8yOjEsKyttKSxkKys7Zm9yKDAhPT1mW2RdJiYodVtpXT0yLCsrbSksbj0xO248cjtuKyspe2E9bipsLGZbKGQ9bipoKS1oXSE9PWZbZF0mJih1W2FdPWZbZF0/MTo4LCsrbSk7dmFyIGc9KGZbZF0/NDowKSsoZltkLWhdPzg6MCk7Zm9yKGk9MTtpPGU7aSsrKXNbZz0oZz4+MikrKGZbZCsxXT80OjApKyhmW2QtaCsxXT84OjApXSYmKHVbYStpXT1zW2ddLCsrbSksZCsrO2lmKGZbZC1oXSE9PWZbZF0mJih1W2EraV09ZltkXT8yOjQsKyttKSxtPjFlMylyZXR1cm4gbnVsbH1mb3IoYT1uKmwsMCE9PWZbZD1oKihyLTEpXSYmKHVbYV09OCwrK20pLGk9MTtpPGU7aSsrKWZbZF0hPT1mW2QrMV0mJih1W2EraV09ZltkXT80OjgsKyttKSxkKys7aWYoMCE9PWZbZF0mJih1W2EraV09NCwrK20pLG0+MWUzKXJldHVybiBudWxsO3ZhciBfPW5ldyBJbnQzMkFycmF5KFswLGwsLTEsMCwtbCwwLDAsMCwxXSksdz1uZXcgUGF0aDJEO2ZvcihuPTA7bSYmbjw9cjtuKyspe2Zvcih2YXIgQT1uKmwsaz1BK2U7QTxrJiYhdVtBXTspQSsrO2lmKEEhPT1rKXt3Lm1vdmVUbyhBJWwsbik7dmFyIFM9QSx4PXVbQV07ZG97dmFyIEU9X1t4XTtkb3tBKz1FfXdoaWxlKCF1W0FdKTt2YXIgUD11W0FdOzUhPT1QJiYxMCE9PVA/KHg9UCx1W0FdPTApOih4PVAmNTEqeD4+NCx1W0FdJj14Pj4yfHg8PDIpLHcubGluZVRvKEElbCxBL2x8MCksdVtBXXx8LS1tfXdoaWxlKFMhPT1BKTstLW59fXJldHVybiBmPW51bGwsdT1udWxsLGZ1bmN0aW9uKHQpe3Quc2F2ZSgpLHQuc2NhbGUoMS9lLC0xL3IpLHQudHJhbnNsYXRlKDAsLXIpLHQuZmlsbCh3KSx0LmJlZ2luUGF0aCgpLHQucmVzdG9yZSgpfX0odCkpLG4uY29tcGlsZWQpKW4uY29tcGlsZWQocik7ZWxzZXt2YXIgaT10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpLGE9aS5jYW52YXM7ci5zYXZlKCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHIuZHJhd0ltYWdlKGEsaS5vZmZzZXRYLGkub2Zmc2V0WSksci5yZXN0b3JlKCksdGhpcy5jb21wb3NlKCl9fX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTp2b2lkIDAscz1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOnZvaWQgMDtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KTt2YXIgbD10aGlzLmN0eDtsLnNhdmUoKTt2YXIgdT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGwpO2wudHJhbnNmb3JtKGUscixhLG8sMCwwKTt2YXIgYz10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpO2wuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYy5vZmZzZXRYLXVbNF0sYy5vZmZzZXRZLXVbNV0pO2Zvcih2YXIgZj0wLGQ9cy5sZW5ndGg7ZjxkO2YrPTIpe3ZhciBwPW4uVXRpbC50cmFuc2Zvcm0odSxbZSxyLGEsbyxzW2ZdLHNbZisxXV0pLHY9aChuLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0scCksMikseT12WzBdLG09dlsxXTtsLmRyYXdJbWFnZShjLmNhbnZhcyx5LG0pfWwucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZSxyPXRoaXMuY3R4LG49dGhpcy5jdXJyZW50LmZpbGxDb2xvcixvPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxzPWModCk7dHJ5e2ZvcihzLnMoKTshKGU9cy5uKCkpLmRvbmU7KXt2YXIgdT1lLnZhbHVlLGg9dS5kYXRhLGY9dS53aWR0aCxkPXUuaGVpZ2h0LHA9dS50cmFuc2Zvcm0sdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsZixkKSx5PXYuY29udGV4dDt5LnNhdmUoKSx4KHksdGhpcy5nZXRPYmplY3QoaCx1KSkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIseS5maWxsU3R5bGU9bz9uLmdldFBhdHRlcm4oeSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKHIpLGEuUGF0aFR5cGUuRklMTCk6bix5LmZpbGxSZWN0KDAsMCxmLGQpLHkucmVzdG9yZSgpLHIuc2F2ZSgpLHIudHJhbnNmb3JtLmFwcGx5KHIsbChwKSksci5zY2FsZSgxLC0xKSxBKHIsdi5jYW52YXMsMCwwLGYsZCwwLC0xLDEsMSksci5yZXN0b3JlKCl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmdldE9iamVjdCh0KTtlP3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSk6KDAsbi53YXJuKSgiRGVwZW5kZW50IGltYWdlIGlzbid0IHJlYWR5IHlldCIpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpKXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgYT10aGlzLmdldE9iamVjdCh0KTtpZihhKXtmb3IodmFyIG89YS53aWR0aCxzPWEuaGVpZ2h0LGw9W10sdT0wLGM9aS5sZW5ndGg7dTxjO3UrPTIpbC5wdXNoKHt0cmFuc2Zvcm06W2UsMCwwLHIsaVt1XSxpW3UrMV1dLHg6MCx5OjAsdzpvLGg6c30pO3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cChhLGwpfWVsc2UoMCxuLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iil9fX0se2tleToicGFpbnRJbmxpbmVJbWFnZVhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciBlLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGE9dGhpcy5jdHg7aWYodGhpcy5zYXZlKCksYS5zY2FsZSgxL3IsLTEvbiksImZ1bmN0aW9uIj09dHlwZW9mIEhUTUxFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fCF0LmRhdGEpZT10O2Vsc2V7dmFyIG89dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixyLG4pO1Moby5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyksZT1vLmNhbnZhc312YXIgcz10aGlzLl9zY2FsZUltYWdlKGUsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoYSkpO2EuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPUYoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShhKSx0LmludGVycG9sYXRlKSxBKGEscy5pbWcsMCwwLHMucGFpbnRXaWR0aCxzLnBhaW50SGVpZ2h0LDAsLW4scixuKSx0aGlzLmNvbXBvc2UoKSx0aGlzLnJlc3RvcmUoKX19fSx7a2V5OiJwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciByPXRoaXMuY3R4LG49dC53aWR0aCxpPXQuaGVpZ2h0LGE9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixuLGkpO1MoYS5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyk7dmFyIG8scz1jKGUpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIHU9by52YWx1ZTtyLnNhdmUoKSxyLnRyYW5zZm9ybS5hcHBseShyLGwodS50cmFuc2Zvcm0pKSxyLnNjYWxlKDEsLTEpLEEocixhLmNhbnZhcyx1LngsdS55LHUudyx1LmgsMCwtMSwxLDEpLHIucmVzdG9yZSgpfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX10aGlzLmNvbXBvc2UoKX19fSx7a2V5OiJwYWludFNvbGlkQ29sb3JJbWFnZU1hc2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuY3R4LmZpbGxSZWN0KDAsMCwxLDEpLHRoaXMuY29tcG9zZSgpKX19LHtrZXk6Im1hcmtQb2ludCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToibWFya1BvaW50UHJvcHMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToiYmVnaW5NYXJrZWRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOiEwfSl9fSx7a2V5OiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXsiT0MiPT09dD90aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOnRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShlKX0pOnRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe3Zpc2libGU6ITB9KSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiZW5kTWFya2VkQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wb3AoKSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiYmVnaW5Db21wYXQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiZW5kQ29tcGF0Iix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImNvbnN1bWVQYXRoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQuaXNFbXB0eUNsaXAoKTt0aGlzLnBlbmRpbmdDbGlwJiZ0aGlzLmN1cnJlbnQudXBkYXRlQ2xpcEZyb21QYXRoKCksdGhpcy5wZW5kaW5nQ2xpcHx8dGhpcy5jb21wb3NlKHQpO3ZhciByPXRoaXMuY3R4O3RoaXMucGVuZGluZ0NsaXAmJihlfHwodGhpcy5wZW5kaW5nQ2xpcD09PWo/ci5jbGlwKCJldmVub2RkIik6ci5jbGlwKCkpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3godGhpcy5jdXJyZW50LmNsaXBCb3gpLHIuYmVnaW5QYXRoKCl9fSx7a2V5OiJnZXRTaW5nbGVQaXhlbFdpZHRoIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoKXt2YXIgdD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KTtpZigwPT09dFsxXSYmMD09PXRbMl0pdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD0xL01hdGgubWluKE1hdGguYWJzKHRbMF0pLE1hdGguYWJzKHRbM10pKTtlbHNle3ZhciBlPU1hdGguYWJzKHRbMF0qdFszXS10WzJdKnRbMV0pLHI9TWF0aC5oeXBvdCh0WzBdLHRbMl0pLG49TWF0aC5oeXBvdCh0WzFdLHRbM10pO3RoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9TWF0aC5tYXgocixuKS9lfX1yZXR1cm4gdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aH19LHtrZXk6ImdldFNjYWxlRm9yU3Ryb2tpbmciLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmcpe3ZhciB0LGUscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCk7aWYoMD09PW5bMV0mJjA9PT1uWzJdKXt2YXIgYT1NYXRoLmFicyhuWzBdKSxvPU1hdGguYWJzKG5bM10pO2lmKDA9PT1yKXQ9MS9hLGU9MS9vO2Vsc2V7dmFyIHM9YSpyLGw9bypyO3Q9czwxPzEvczoxLGU9bDwxPzEvbDoxfX1lbHNle3ZhciB1PU1hdGguYWJzKG5bMF0qblszXS1uWzJdKm5bMV0pLGM9TWF0aC5oeXBvdChuWzBdLG5bMV0pLGg9TWF0aC5oeXBvdChuWzJdLG5bM10pO2lmKDA9PT1yKXQ9aC91LGU9Yy91O2Vsc2V7dmFyIGY9cip1O3Q9aD5mP2gvZjoxLGU9Yz5mP2MvZjoxfX10aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPVt0LGVdfXJldHVybiB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nfX0se2tleToicmVzY2FsZUFuZFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdHgscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49aCh0aGlzLmdldFNjYWxlRm9yU3Ryb2tpbmcoKSwyKSxhPW5bMF0sbz1uWzFdO2lmKGUubGluZVdpZHRoPXJ8fDEsMSE9PWF8fDEhPT1vKXt2YXIgcyx1LGM7dCYmKHM9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSx1PWUuZ2V0TGluZURhc2goKS5zbGljZSgpLGM9ZS5saW5lRGFzaE9mZnNldCksZS5zY2FsZShhLG8pO3ZhciBmPU1hdGgubWF4KGEsbyk7ZS5zZXRMaW5lRGFzaChlLmdldExpbmVEYXNoKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9mfSkpKSxlLmxpbmVEYXNoT2Zmc2V0Lz1mLGUuc3Ryb2tlKCksdCYmKGUuc2V0VHJhbnNmb3JtLmFwcGx5KGUsbChzKSksZS5zZXRMaW5lRGFzaCh1KSxlLmxpbmVEYXNoT2Zmc2V0PWMpfWVsc2UgZS5zdHJva2UoKX19LHtrZXk6ImlzQ29udGVudFZpc2libGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubWFya2VkQ29udGVudFN0YWNrLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKCF0aGlzLm1hcmtlZENvbnRlbnRTdGFja1t0XS52aXNpYmxlKXJldHVybiExO3JldHVybiEwfX1dKSx0fSgpO2Z1bmN0aW9uIE4oKXtmb3IoO3RoaXMuc3RhdGVTdGFjay5sZW5ndGh8fHRoaXMuaW5TTWFza01vZGU7KXRoaXMucmVzdG9yZSgpO3RoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLnRyYW5zcGFyZW50Q2FudmFzJiYodGhpcy5jdHg9dGhpcy5jb21wb3NpdGVDdHgsdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMudHJhbnNwYXJlbnRDYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy50cmFuc3BhcmVudENhbnZhcz1udWxsKX1mb3IodmFyIFUgaW4gZS5DYW52YXNHcmFwaGljcz1ELG4uT1BTKXZvaWQgMCE9PUQucHJvdG90eXBlW1VdJiYoRC5wcm90b3R5cGVbbi5PUFNbVV1dPUQucHJvdG90eXBlW1VdKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlRpbGluZ1BhdHRlcm49ZS5QYXRoVHlwZT12b2lkIDAsZS5nZXRTaGFkaW5nUGF0dGVybj1mdW5jdGlvbih0KXtzd2l0Y2godFswXSl7Y2FzZSJSYWRpYWxBeGlhbCI6cmV0dXJuIG5ldyB3KHQpO2Nhc2UiTWVzaCI6cmV0dXJuIG5ldyBTKHQpO2Nhc2UiRHVtbXkiOnJldHVybiBuZXcgeH10aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSVIgdHlwZTogIi5jb25jYXQodFswXSkpfTt2YXIgbj1yKDEpLGk9cigxMzcpLGE9cigzKTtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB1KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8bCh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmaCh0LGUpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LGgodCxlKX1mdW5jdGlvbiBmKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQodCk7aWYoZSl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGkpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1wKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxkKHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz17RklMTDoiRmlsbCIsU1RST0tFOiJTdHJva2UiLFNIQURJTkc6IlNoYWRpbmcifTtmdW5jdGlvbiBiKHQsZSl7aWYoZSYmIWEuaXNOb2RlSlMpe3ZhciByPWVbMl0tZVswXSxuPWVbM10tZVsxXSxpPW5ldyBQYXRoMkQ7aS5yZWN0KGVbMF0sZVsxXSxyLG4pLHQuY2xpcChpKX19ZS5QYXRoVHlwZT1nO3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3YodGhpcyx0KSx0aGlzLmNvbnN0cnVjdG9yPT09dCYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTaGFkaW5nUGF0dGVybi4iKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldFBhdHRlcm5gIGNhbGxlZC4iKX19XSksdH0oKSx3PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl90eXBlPXRbMV0sbi5fYmJveD10WzJdLG4uX2NvbG9yU3RvcHM9dFszXSxuLl9wMD10WzRdLG4uX3AxPXRbNV0sbi5fcjA9dFs2XSxuLl9yMT10WzddLG4ubWF0cml4PW51bGwsbn1yZXR1cm4gbShyLFt7a2V5OiJfY3JlYXRlR3JhZGllbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlOyJheGlhbCI9PT10aGlzLl90eXBlP2U9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0aGlzLl9wMFswXSx0aGlzLl9wMFsxXSx0aGlzLl9wMVswXSx0aGlzLl9wMVsxXSk6InJhZGlhbCI9PT10aGlzLl90eXBlJiYoZT10LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHRoaXMuX3AwWzBdLHRoaXMuX3AwWzFdLHRoaXMuX3IwLHRoaXMuX3AxWzBdLHRoaXMuX3AxWzFdLHRoaXMuX3IxKSk7dmFyIHIsbj1zKHRoaXMuX2NvbG9yU3RvcHMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9ci52YWx1ZTtlLmFkZENvbG9yU3RvcChpWzBdLGlbMV0pfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gZX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzO2lmKGE9PT1nLlNUUk9LRXx8YT09PWcuRklMTCl7dmFyIGw9ZS5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goYSwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKXx8WzAsMCwwLDBdLHU9TWF0aC5jZWlsKGxbMl0tbFswXSl8fDEsYz1NYXRoLmNlaWwobFszXS1sWzFdKXx8MSxoPWUuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIix1LGMsITApLGY9aC5jb250ZXh0O2YuY2xlYXJSZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYuYmVnaW5QYXRoKCksZi5yZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYudHJhbnNsYXRlKC1sWzBdLC1sWzFdKSxyPW4uVXRpbC50cmFuc2Zvcm0ocixbMSwwLDAsMSxsWzBdLGxbMV1dKSxmLnRyYW5zZm9ybS5hcHBseShmLG8oZS5iYXNlVHJhbnNmb3JtKSksdGhpcy5tYXRyaXgmJmYudHJhbnNmb3JtLmFwcGx5KGYsbyh0aGlzLm1hdHJpeCkpLGIoZix0aGlzLl9iYm94KSxmLmZpbGxTdHlsZT10aGlzLl9jcmVhdGVHcmFkaWVudChmKSxmLmZpbGwoKSxzPXQuY3JlYXRlUGF0dGVybihoLmNhbnZhcywibm8tcmVwZWF0Iik7dmFyIGQ9bmV3IERPTU1hdHJpeChyKTtzLnNldFRyYW5zZm9ybShkKX1lbHNlIGIodCx0aGlzLl9iYm94KSxzPXRoaXMuX2NyZWF0ZUdyYWRpZW50KHQpO3JldHVybiBzfX1dKSxyfShfKTtmdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsdT1lLmNvb3JkcyxjPWUuY29sb3JzLGg9dC5kYXRhLGY9NCp0LndpZHRoO3VbcisxXT51W24rMV0mJihsPXIscj1uLG49bCxsPWEsYT1vLG89bCksdVtuKzFdPnVbaSsxXSYmKGw9bixuPWksaT1sLGw9byxvPXMscz1sKSx1W3IrMV0+dVtuKzFdJiYobD1yLHI9bixuPWwsbD1hLGE9byxvPWwpO3ZhciBkPSh1W3JdK2Uub2Zmc2V0WCkqZS5zY2FsZVgscD0odVtyKzFdK2Uub2Zmc2V0WSkqZS5zY2FsZVksdj0odVtuXStlLm9mZnNldFgpKmUuc2NhbGVYLHk9KHVbbisxXStlLm9mZnNldFkpKmUuc2NhbGVZLG09KHVbaV0rZS5vZmZzZXRYKSplLnNjYWxlWCxnPSh1W2krMV0rZS5vZmZzZXRZKSplLnNjYWxlWTtpZighKHA+PWcpKWZvcih2YXIgYixfLHcsQSxrLFMseCxFLFA9Y1thXSxUPWNbYSsxXSxDPWNbYSsyXSxPPWNbb10sRj1jW28rMV0sTT1jW28rMl0sUj1jW3NdLEk9Y1tzKzFdLGo9Y1tzKzJdLEw9TWF0aC5yb3VuZChwKSxEPU1hdGgucm91bmQoZyksTj1MO048PUQ7TisrKXtpZihOPHkpe3ZhciBVO2I9ZC0oZC12KSooVT1OPHA/MDoocC1OKS8ocC15KSksXz1QLShQLU8pKlUsdz1ULShULUYpKlUsQT1DLShDLU0pKlV9ZWxzZXt2YXIgVztiPXYtKHYtbSkqKFc9Tj5nPzE6eT09PWc/MDooeS1OKS8oeS1nKSksXz1PLShPLVIpKlcsdz1GLShGLUkpKlcsQT1NLShNLWopKld9dmFyIEc9dm9pZCAwO2s9ZC0oZC1tKSooRz1OPHA/MDpOPmc/MToocC1OKS8ocC1nKSksUz1QLShQLVIpKkcseD1ULShULUkpKkcsRT1DLShDLWopKkc7Zm9yKHZhciBCPU1hdGgucm91bmQoTWF0aC5taW4oYixrKSkscT1NYXRoLnJvdW5kKE1hdGgubWF4KGIsaykpLEg9ZipOKzQqQix6PUI7ejw9cTt6KyspKEc9KGIteikvKGItaykpPDA/Rz0wOkc+MSYmKEc9MSksaFtIKytdPV8tKF8tUykqR3wwLGhbSCsrXT13LSh3LXgpKkd8MCxoW0grK109QS0oQS1FKSpHfDAsaFtIKytdPTI1NX19ZnVuY3Rpb24gayh0LGUscil7dmFyIG4saSxhPWUuY29vcmRzLG89ZS5jb2xvcnM7c3dpdGNoKGUudHlwZSl7Y2FzZSJsYXR0aWNlIjp2YXIgcz1lLnZlcnRpY2VzUGVyUm93LGw9TWF0aC5mbG9vcihhLmxlbmd0aC9zKS0xLHU9cy0xO2ZvcihuPTA7bjxsO24rKylmb3IodmFyIGM9bipzLGg9MDtoPHU7aCsrLGMrKylBKHQscixhW2NdLGFbYysxXSxhW2Mrc10sb1tjXSxvW2MrMV0sb1tjK3NdKSxBKHQscixhW2MrcysxXSxhW2MrMV0sYVtjK3NdLG9bYytzKzFdLG9bYysxXSxvW2Mrc10pO2JyZWFrO2Nhc2UidHJpYW5nbGVzIjpmb3Iobj0wLGk9YS5sZW5ndGg7bjxpO24rPTMpQSh0LHIsYVtuXSxhW24rMV0sYVtuKzJdLG9bbl0sb1tuKzFdLG9bbisyXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgZmlndXJlIil9fXZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl9jb29yZHM9dFsyXSxuLl9jb2xvcnM9dFszXSxuLl9maWd1cmVzPXRbNF0sbi5fYm91bmRzPXRbNV0sbi5fYmJveD10WzddLG4uX2JhY2tncm91bmQ9dFs4XSxuLm1hdHJpeD1udWxsLG59cmV0dXJuIG0ocixbe2tleToiX2NyZWF0ZU1lc2hDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1swXSksaT1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1sxXSksYT1NYXRoLmNlaWwodGhpcy5fYm91bmRzWzJdKS1uLG89TWF0aC5jZWlsKHRoaXMuX2JvdW5kc1szXSktaSxsPU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhhKnRbMF0qMS4xKSksM2UzKSx1PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhvKnRbMV0qMS4xKSksM2UzKSxjPWEvbCxoPW8vdSxmPXtjb29yZHM6dGhpcy5fY29vcmRzLGNvbG9yczp0aGlzLl9jb2xvcnMsb2Zmc2V0WDotbixvZmZzZXRZOi1pLHNjYWxlWDoxL2Msc2NhbGVZOjEvaH0sZD1sKzQscD11KzQsdj1yLmdldENhbnZhcygibWVzaCIsZCxwLCExKSx5PXYuY29udGV4dCxtPXkuY3JlYXRlSW1hZ2VEYXRhKGwsdSk7aWYoZSlmb3IodmFyIGc9bS5kYXRhLGI9MCxfPWcubGVuZ3RoO2I8XztiKz00KWdbYl09ZVswXSxnW2IrMV09ZVsxXSxnW2IrMl09ZVsyXSxnW2IrM109MjU1O3ZhciB3LEE9cyh0aGlzLl9maWd1cmVzKTt0cnl7Zm9yKEEucygpOyEodz1BLm4oKSkuZG9uZTspayhtLHcudmFsdWUsZil9Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9cmV0dXJuIHkucHV0SW1hZ2VEYXRhKG0sMiwyKSx7Y2FudmFzOnYuY2FudmFzLG9mZnNldFg6bi0yKmMsb2Zmc2V0WTppLTIqaCxzY2FsZVg6YyxzY2FsZVk6aH19fSx7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0LGUscixhKXt2YXIgcztpZihiKHQsdGhpcy5fYmJveCksYT09PWcuU0hBRElORylzPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKTtlbHNlIGlmKHM9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgpe3ZhciBsPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7cz1bc1swXSpsWzBdLHNbMV0qbFsxXV19dmFyIHU9dGhpcy5fY3JlYXRlTWVzaENhbnZhcyhzLGE9PT1nLlNIQURJTkc/bnVsbDp0aGlzLl9iYWNrZ3JvdW5kLGUuY2FjaGVkQ2FudmFzZXMpO3JldHVybiBhIT09Zy5TSEFESU5HJiYodC5zZXRUcmFuc2Zvcm0uYXBwbHkodCxvKGUuYmFzZVRyYW5zZm9ybSkpLHRoaXMubWF0cml4JiZ0LnRyYW5zZm9ybS5hcHBseSh0LG8odGhpcy5tYXRyaXgpKSksdC50cmFuc2xhdGUodS5vZmZzZXRYLHUub2Zmc2V0WSksdC5zY2FsZSh1LnNjYWxlWCx1LnNjYWxlWSksdC5jcmVhdGVQYXR0ZXJuKHUuY2FudmFzLCJuby1yZXBlYXQiKX19XSkscn0oXykseD1mdW5jdGlvbih0KXtjKHIsdCk7dmFyIGU9ZihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHYodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbShyLFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJob3RwaW5rIn19XSkscn0oXyksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4saSxhKXt2KHRoaXMsdCksdGhpcy5vcGVyYXRvckxpc3Q9ZVsyXSx0aGlzLm1hdHJpeD1lWzNdfHxbMSwwLDAsMSwwLDBdLHRoaXMuYmJveD1lWzRdLHRoaXMueHN0ZXA9ZVs1XSx0aGlzLnlzdGVwPWVbNl0sdGhpcy5wYWludFR5cGU9ZVs3XSx0aGlzLnRpbGluZ1R5cGU9ZVs4XSx0aGlzLmNvbG9yPXIsdGhpcy5jdHg9bix0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeT1pLHRoaXMuYmFzZVRyYW5zZm9ybT1hfXJldHVybiBtKHQsW3trZXk6ImNyZWF0ZVBhdHRlcm5DYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3BlcmF0b3JMaXN0LHI9dGhpcy5iYm94LGE9dGhpcy54c3RlcCxvPXRoaXMueXN0ZXAscz10aGlzLnBhaW50VHlwZSxsPXRoaXMudGlsaW5nVHlwZSx1PXRoaXMuY29sb3IsYz10aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeTsoMCxuLmluZm8pKCJUaWxpbmdUeXBlOiAiK2wpO3ZhciBoPXJbMF0sZj1yWzFdLGQ9clsyXSxwPXJbM10sdj1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5tYXRyaXgpLHk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSksbT1bdlswXSp5WzBdLHZbMV0qeVsxXV0sZz10aGlzLmdldFNpemVBbmRTY2FsZShhLHRoaXMuY3R4LmNhbnZhcy53aWR0aCxtWzBdKSxiPXRoaXMuZ2V0U2l6ZUFuZFNjYWxlKG8sdGhpcy5jdHguY2FudmFzLmhlaWdodCxtWzFdKSxfPXQuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIixnLnNpemUsYi5zaXplLCEwKSx3PV8uY29udGV4dCxBPWMuY3JlYXRlQ2FudmFzR3JhcGhpY3Modyk7QS5ncm91cExldmVsPXQuZ3JvdXBMZXZlbCx0aGlzLnNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChBLHMsdSk7dmFyIGs9aCxTPWYseD1kLEU9cDtyZXR1cm4gaDwwJiYoaz0wLHgrPU1hdGguYWJzKGgpKSxmPDAmJihTPTAsRSs9TWF0aC5hYnMoZikpLHcudHJhbnNsYXRlKC1nLnNjYWxlKmssLWIuc2NhbGUqUyksQS50cmFuc2Zvcm0oZy5zY2FsZSwwLDAsYi5zY2FsZSwwLDApLHcuc2F2ZSgpLHRoaXMuY2xpcEJib3goQSxrLFMseCxFKSxBLmJhc2VUcmFuc2Zvcm09KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShBLmN0eCksQS5leGVjdXRlT3BlcmF0b3JMaXN0KGUpLEEuZW5kRHJhd2luZygpLHtjYW52YXM6Xy5jYW52YXMsc2NhbGVYOmcuc2NhbGUsc2NhbGVZOmIuc2NhbGUsb2Zmc2V0WDprLG9mZnNldFk6U319fSx7a2V5OiJnZXRTaXplQW5kU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUscixuKXtlPU1hdGguYWJzKGUpO3ZhciBpPU1hdGgubWF4KHQuTUFYX1BBVFRFUk5fU0laRSxyKSxhPU1hdGguY2VpbChlKm4pO3JldHVybiBhPj1pP2E9aTpuPWEvZSx7c2NhbGU6bixzaXplOmF9fX0se2tleToiY2xpcEJib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89bi1lLHM9YS1yO3QuY3R4LnJlY3QoZSxyLG8scyksdC5jdXJyZW50LnVwZGF0ZVJlY3RNaW5NYXgoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0LmN0eCksW2UscixuLGFdKSx0LmNsaXAoKSx0LmVuZFBhdGgoKX19LHtrZXk6InNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuY3R4LGE9dC5jdXJyZW50O3N3aXRjaChlKXtjYXNlIDE6dmFyIG89dGhpcy5jdHg7aS5maWxsU3R5bGU9by5maWxsU3R5bGUsaS5zdHJva2VTdHlsZT1vLnN0cm9rZVN0eWxlLGEuZmlsbENvbG9yPW8uZmlsbFN0eWxlLGEuc3Ryb2tlQ29sb3I9by5zdHJva2VTdHlsZTticmVhaztjYXNlIDI6dmFyIHM9bi5VdGlsLm1ha2VIZXhDb2xvcihyWzBdLHJbMV0sclsyXSk7aS5maWxsU3R5bGU9cyxpLnN0cm9rZVN0eWxlPXMsYS5maWxsQ29sb3I9cyxhLnN0cm9rZUNvbG9yPXM7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgcGFpbnQgdHlwZTogIi5jb25jYXQoZSkpfX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXI7aSE9PWcuU0hBRElORyYmKGE9bi5VdGlsLnRyYW5zZm9ybShhLGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgmJihhPW4uVXRpbC50cmFuc2Zvcm0oYSx0aGlzLm1hdHJpeCkpKTt2YXIgbz10aGlzLmNyZWF0ZVBhdHRlcm5DYW52YXMoZSkscz1uZXcgRE9NTWF0cml4KGEpO3M9KHM9cy50cmFuc2xhdGUoby5vZmZzZXRYLG8ub2Zmc2V0WSkpLnNjYWxlKDEvby5zY2FsZVgsMS9vLnNjYWxlWSk7dmFyIGw9dC5jcmVhdGVQYXR0ZXJuKG8uY2FudmFzLCJyZXBlYXQiKTtyZXR1cm4gbC5zZXRUcmFuc2Zvcm0ocyksbH19XSxbe2tleToiTUFYX1BBVFRFUk5fU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1BWF9QQVRURVJOX1NJWkUiLDNlMyl9fV0pLHR9KCk7ZS5UaWxpbmdQYXR0ZXJuPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5hcHBseU1hc2tJbWFnZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNyYyxhPXQuc3JjUG9zLG89dm9pZCAwPT09YT8wOmEscz10LmRlc3QsbD10LmRlc3RQb3MsdT12b2lkIDA9PT1sPzA6bCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXQuaW52ZXJzZURlY29kZSxkPXZvaWQgMCE9PWYmJmYscD1uLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuPzQyNzgxOTAwODA6MjU1LHY9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0oZT1kP1swLHBdOltwLDBdKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQ7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGkodCwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKHQsMik6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSx5PXZbMF0sbT12WzFdLGc9Yz4+MyxiPTcmYyxfPXIubGVuZ3RoO3M9bmV3IFVpbnQzMkFycmF5KHMuYnVmZmVyKTtmb3IodmFyIHc9MDt3PGg7dysrKXtmb3IodmFyIEE9bytnO288QTtvKyspe3ZhciBrPW88Xz9yW29dOjI1NTtzW3UrK109MTI4Jms/bTp5LHNbdSsrXT02NCZrP206eSxzW3UrK109MzImaz9tOnksc1t1KytdPTE2Jms/bTp5LHNbdSsrXT04Jms/bTp5LHNbdSsrXT00Jms/bTp5LHNbdSsrXT0yJms/bTp5LHNbdSsrXT0xJms/bTp5fWlmKDAhPT1iKWZvcih2YXIgUz1vPF8/cltvKytdOjI1NSx4PTA7eDxiO3grKylzW3UrK109UyYxPDw3LXg/bTp5fXJldHVybntzcmNQb3M6byxkZXN0UG9zOnV9fTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuR2xvYmFsV29ya2VyT3B0aW9ucz12b2lkIDA7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtlLkdsb2JhbFdvcmtlck9wdGlvbnM9cixyLndvcmtlclBvcnQ9dm9pZCAwPT09ci53b3JrZXJQb3J0P251bGw6ci53b3JrZXJQb3J0LHIud29ya2VyU3JjPXZvaWQgMD09PXIud29ya2VyU3JjPyIiOnIud29ya2VyU3JjfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMSk7ZnVuY3Rpb24gaSgpe2k9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsbykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8sbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09cyhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8sbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LG8oYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8sbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W29dO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1zKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCl7c3dpdGNoKHQgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKHQpJiZudWxsIT09dHx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksdC5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24odC5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKHQubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHQubWVzc2FnZSx0LnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24odC5tZXNzYWdlLHQuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPXRoaXM7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5zb3VyY2VOYW1lPWUsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhO2lmKGUudGFyZ2V0TmFtZT09PWkuc291cmNlTmFtZSlpZihlLnN0cmVhbSlpLl9wcm9jZXNzU3RyZWFtTWVzc2FnZShlKTtlbHNlIGlmKGUuY2FsbGJhY2spe3ZhciByPWUuY2FsbGJhY2tJZCxhPWkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PWUuY2FsbGJhY2spYS5yZXNvbHZlKGUuZGF0YSk7ZWxzZXtpZigyIT09ZS5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2EucmVqZWN0KGwoZS5yZWFzb24pKX19ZWxzZXt2YXIgbz1pLmFjdGlvbkhhbmRsZXJbZS5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KGUuYWN0aW9uKSk7aWYoZS5jYWxsYmFja0lkKXt2YXIgcz1pLnNvdXJjZU5hbWUsdT1lLnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QobyhlLmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbih0KXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDplLmNhbGxiYWNrSWQsZGF0YTp0fSl9KSwoZnVuY3Rpb24odCl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6ZS5jYWxsYmFja0lkLHJlYXNvbjpsKHQpfSl9KSl9ZWxzZSBlLnN0cmVhbUlkP2kuX2NyZWF0ZVN0cmVhbVNpbmsoZSk6byhlLmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIGUscixzLHU7cmV0dXJuIGU9dCxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYoclt0XSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KHQsJyInKSk7clt0XT1lfX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246dCxkYXRhOmV9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5jYWxsYmFja0lkKyssYT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbaV09YTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjp0LGNhbGxiYWNrSWQ6aSxkYXRhOmV9LHIpfWNhdGNoKHQpe2EucmVqZWN0KHQpfXJldHVybiBhLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxjPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBsPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6bCxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246dCxzdHJlYW1JZDpvLGRhdGE6ZSxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxpKSxsLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24odCl7dmFyIGU9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD1lLGMucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTp0LmRlc2lyZWRTaXplfSksZS5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciBlPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD1lLGEuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpsKHQpfSksZS5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlclt0LmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbih0KXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgbD10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sbD4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo0LHN0cmVhbUlkOmUsY2h1bms6dH0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGEucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjMsc3RyZWFtSWQ6ZX0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW2VdKX0sZXJyb3I6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsYS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NSxzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6dC5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW2VdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uocyh0LmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06OCxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbih0KXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo4LHN0cmVhbUlkOmUscmVhc29uOmwodCl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1tlXSxzPXRoaXMuc3RyZWFtU2lua3NbZV07c3dpdGNoKHQuc3RyZWFtKXtjYXNlIDg6dC5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNzp0LnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NyxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZ0LmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9dC5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo3LHN0cmVhbUlkOmUsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKHQpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjcsc3RyZWFtSWQ6ZSxyZWFzb246bCh0KX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUodC5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihsKHQucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLGUpO2JyZWFrO2Nhc2UgMjp0LnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGwodC5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbihlKXtlKHMub25DYW5jZWwmJnMub25DYW5jZWwobCh0LnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjIsc3RyZWFtSWQ6ZSxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24odCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06MixzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QobCh0LnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbZV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9aSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW2Uuc3RhcnRDYWxsJiZlLnN0YXJ0Q2FsbC5wcm9taXNlLGUucHVsbENhbGwmJmUucHVsbENhbGwucHJvbWlzZSxlLmNhbmNlbENhbGwmJmUuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBpPXMuYXBwbHkodCxlKTtmdW5jdGlvbiBvKHQpe2EoaSxyLG4sbyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EoaSxyLG4sbyxsLCJ0aHJvdyIsdCl9byh2b2lkIDApfSkpfSxmdW5jdGlvbih0LGUpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NZXNzYWdlSGFuZGxlcj11fSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NZXRhZGF0YT12b2lkIDA7dmFyIGk9cigxKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24gbyh0LGUscil7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHUodCxlLCJnZXQiKSl9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx1KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiB1KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBjPW5ldyBXZWFrTWFwLGg9bmV3IFdlYWtNYXAsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5wYXJzZWREYXRhLG49ZS5yYXdEYXRhOyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLG8odGhpcyxjLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxvKHRoaXMsaCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksbCh0aGlzLGMsciksbCh0aGlzLGgsbil9dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcyxoKX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGwhPT0oZT1zKHRoaXMsYykuZ2V0KHQpKSYmdm9pZCAwIT09ZT9lOm51bGx9fSx7a2V5OiJnZXRBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5vYmplY3RGcm9tTWFwKShzKHRoaXMsYykpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyh0aGlzLGMpLmhhcyh0KX19XSkmJmEoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLk1ldGFkYXRhPWZ9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLk9wdGlvbmFsQ29udGVudENvbmZpZz12b2lkIDA7dmFyIGk9cigxKSxhPXIoMTM5KTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1zKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgYX19fX1mdW5jdGlvbiBzKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBsKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZSYmaCh0LnByb3RvdHlwZSxlKSxyJiZoKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBkKHQsZSxyKXtwKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBwKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LG0odCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LG0odCxlLCJnZXQiKSl9ZnVuY3Rpb24gbSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgZz1TeW1ib2woIklOVEVSTkFMIiksYj1uZXcgV2Vha01hcCxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2ModGhpcyx0KSxkKHRoaXMsYix7d3JpdGFibGU6ITAsdmFsdWU6ITB9KSx0aGlzLm5hbWU9ZSx0aGlzLmludGVudD1yfXJldHVybiBmKHQsW3trZXk6InZpc2libGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsYil9fSx7a2V5OiJfc2V0VmlzaWJsZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0IT09ZyYmKDAsaS51bnJlYWNoYWJsZSkoIkludGVybmFsIG1ldGhvZCBgX3NldFZpc2libGVgIGNhbGxlZC4iKSx2KHRoaXMsYixlKX19XSksdH0oKSx3PW5ldyBXZWFrTWFwLEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrTWFwLHg9bmV3IFdlYWtTZXQsRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7aWYoYyh0aGlzLHQpLHAodGhpcyxyPXgpLHIuYWRkKHRoaXMpLGQodGhpcyx3LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZCh0aGlzLEEse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxkKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGQodGhpcyxTLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5uYW1lPW51bGwsdGhpcy5jcmVhdG9yPW51bGwsbnVsbCE9PWUpe3RoaXMubmFtZT1lLm5hbWUsdGhpcy5jcmVhdG9yPWUuY3JlYXRvcix2KHRoaXMsUyxlLm9yZGVyKTt2YXIgbixpPW8oZS5ncm91cHMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTt5KHRoaXMsQSkuc2V0KGEuaWQsbmV3IF8oYS5uYW1lLGEuaW50ZW50KSl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfWlmKCJPRkYiPT09ZS5iYXNlU3RhdGUpe3ZhciBzLGw9byh5KHRoaXMsQSkudmFsdWVzKCkpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOylzLnZhbHVlLl9zZXRWaXNpYmxlKGcsITEpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX12YXIgdSxoPW8oZS5vbik7dHJ5e2ZvcihoLnMoKTshKHU9aC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO3kodGhpcyxBKS5nZXQoZikuX3NldFZpc2libGUoZywhMCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXZhciBtLGI9byhlLm9mZik7dHJ5e2ZvcihiLnMoKTshKG09Yi5uKCkpLmRvbmU7KXt2YXIgRT1tLnZhbHVlO3kodGhpcyxBKS5nZXQoRSkuX3NldFZpc2libGUoZywhMSl9fWNhdGNoKHQpe2IuZSh0KX1maW5hbGx5e2IuZigpfXYodGhpcyxrLHRoaXMuZ2V0SGFzaCgpKX19cmV0dXJuIGYodCxbe2tleToiaXNWaXNpYmxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09eSh0aGlzLEEpLnNpemUpcmV0dXJuITA7aWYoIXQpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZGVmaW5lZC4iKSwhMDtpZigiT0NHIj09PXQudHlwZSlyZXR1cm4geSh0aGlzLEEpLmhhcyh0LmlkKT95KHRoaXMsQSkuZ2V0KHQuaWQpLnZpc2libGU6KCgwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh0LmlkKSksITApO2lmKCJPQ01EIj09PXQudHlwZSl7aWYodC5leHByZXNzaW9uKXJldHVybiB1KHRoaXMseCxQKS5jYWxsKHRoaXMsdC5leHByZXNzaW9uKTtpZighdC5wb2xpY3l8fCJBbnlPbiI9PT10LnBvbGljeSl7dmFyIGUscj1vKHQuaWRzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobikpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KG4pKSwhMDtpZih5KHRoaXMsQSkuZ2V0KG4pLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXJldHVybiExfWlmKCJBbGxPbiI9PT10LnBvbGljeSl7dmFyIGEscz1vKHQuaWRzKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobCkpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KGwpKSwhMDtpZigheSh0aGlzLEEpLmdldChsKS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4hMH1pZigiQW55T2ZmIj09PXQucG9saWN5KXt2YXIgYyxoPW8odC5pZHMpO3RyeXtmb3IoaC5zKCk7IShjPWgubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZigheSh0aGlzLEEpLmhhcyhmKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoZikpLCEwO2lmKCF5KHRoaXMsQSkuZ2V0KGYpLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiExfWlmKCJBbGxPZmYiPT09dC5wb2xpY3kpe3ZhciBkLHA9byh0Lmlkcyk7dHJ5e2ZvcihwLnMoKTshKGQ9cC5uKCkpLmRvbmU7KXt2YXIgdj1kLnZhbHVlO2lmKCF5KHRoaXMsQSkuaGFzKHYpKXJldHVybigwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh2KSksITA7aWYoeSh0aGlzLEEpLmdldCh2KS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX1yZXR1cm4hMH1yZXR1cm4oMCxpLndhcm4pKCJVbmtub3duIG9wdGlvbmFsIGNvbnRlbnQgcG9saWN5ICIuY29uY2F0KHQucG9saWN5LCIuIikpLCEwfXJldHVybigwLGkud2FybikoIlVua25vd24gZ3JvdXAgdHlwZSAiLmNvbmNhdCh0LnR5cGUsIi4iKSksITB9fSx7a2V5OiJzZXRWaXNpYmlsaXR5Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3kodGhpcyxBKS5oYXModCk/KHkodGhpcyxBKS5nZXQodCkuX3NldFZpc2libGUoZywhIWUpLHYodGhpcyx3LG51bGwpKTooMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQodCkpfX0se2tleToiaGFzSW5pdGlhbFZpc2liaWxpdHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhhc2goKT09PXkodGhpcyxrKX19LHtrZXk6ImdldE9yZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT95KHRoaXMsUyk/eSh0aGlzLFMpLnNsaWNlKCk6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbCh0KX0odD15KHRoaXMsQSkua2V5cygpKXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8cyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKTpudWxsO3ZhciB0fX0se2tleToiZ2V0R3JvdXBzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT4wPygwLGkub2JqZWN0RnJvbU1hcCkoeSh0aGlzLEEpKTpudWxsfX0se2tleToiZ2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHRoaXMsQSkuZ2V0KHQpfHxudWxsfX0se2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihudWxsIT09eSh0aGlzLHcpKXJldHVybiB5KHRoaXMsdyk7dmFyIHQsZSxyLG49bmV3IGEuTXVybXVySGFzaDNfNjQsaT1vKHkodGhpcyxBKSk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbD0oZT10LnZhbHVlLHI9MixmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fShlKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlLHIpfHxzKGUscil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdT1sWzBdLGM9bFsxXTtuLnVwZGF0ZSgiIi5jb25jYXQodSwiOiIpLmNvbmNhdChjLnZpc2libGUpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIHYodGhpcyx3LG4uaGV4ZGlnZXN0KCkpfX1dKSx0fSgpO2Z1bmN0aW9uIFAodCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwyKXJldHVybiEwO2Zvcih2YXIgcj10WzBdLG49MTtuPGU7bisrKXt2YXIgYT10W25dLG89dm9pZCAwO2lmKEFycmF5LmlzQXJyYXkoYSkpbz11KHRoaXMseCxQKS5jYWxsKHRoaXMsYSk7ZWxzZXtpZigheSh0aGlzLEEpLmhhcyhhKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoYSkpLCEwO289eSh0aGlzLEEpLmdldChhKS52aXNpYmxlfXN3aXRjaChyKXtjYXNlIkFuZCI6aWYoIW8pcmV0dXJuITE7YnJlYWs7Y2FzZSJPciI6aWYobylyZXR1cm4hMDticmVhaztjYXNlIk5vdCI6cmV0dXJuIW87ZGVmYXVsdDpyZXR1cm4hMH19cmV0dXJuIkFuZCI9PT1yfWUuT3B0aW9uYWxDb250ZW50Q29uZmlnPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxMzcpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBjKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1sKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgaT10aGlzO2godGhpcyx0KSwoMCxuLmFzc2VydCkociwnUERGRGF0YVRyYW5zcG9ydFN0cmVhbSAtIG1pc3NpbmcgcmVxdWlyZWQgInBkZkRhdGFSYW5nZVRyYW5zcG9ydCIgYXJndW1lbnQuJyksdGhpcy5fcXVldWVkQ2h1bmtzPVtdLHRoaXMuX3Byb2dyZXNzaXZlRG9uZT1lLnByb2dyZXNzaXZlRG9uZXx8ITEsdGhpcy5fY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9ZS5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZXx8bnVsbDt2YXIgYT1lLmluaXRpYWxEYXRhO2lmKChudWxsPT1hP3ZvaWQgMDphLmxlbmd0aCk+MCl7dmFyIG89bmV3IFVpbnQ4QXJyYXkoYSkuYnVmZmVyO3RoaXMuX3F1ZXVlZENodW5rcy5wdXNoKG8pfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydD1yLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFlLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hZS5kaXNhYmxlUmFuZ2UsdGhpcy5fY29udGVudExlbmd0aD1lLmxlbmd0aCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVhZGVycz1bXSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUmFuZ2VMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblJlY2VpdmVEYXRhKHtiZWdpbjp0LGNodW5rOmV9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblByb2dyZXNzKHtsb2FkZWQ6dCx0b3RhbDplfSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKChmdW5jdGlvbih0KXtpLl9vblJlY2VpdmVEYXRhKHtjaHVuazp0fSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlRG9uZUxpc3RlbmVyKChmdW5jdGlvbigpe2kuX29uUHJvZ3Jlc3NpdmVEb25lKCl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LnRyYW5zcG9ydFJlYWR5KCl9cmV0dXJuIGQodCxbe2tleToiX29uUmVjZWl2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQuY2h1bmspLmJ1ZmZlcjtpZih2b2lkIDA9PT10LmJlZ2luKXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyP3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGUpOnRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGUpO2Vsc2V7dmFyIHI9dGhpcy5fcmFuZ2VSZWFkZXJzLnNvbWUoKGZ1bmN0aW9uKHIpe3JldHVybiByLl9iZWdpbj09PXQuYmVnaW4mJihyLl9lbnF1ZXVlKGUpLCEwKX0pKTsoMCxuLmFzc2VydCkociwiX29uUmVjZWl2ZURhdGEgLSBubyBgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyYCBpbnN0YW5jZSBmb3VuZC4iKX19fSx7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk7dm9pZCAwPT09dC50b3RhbD9udWxsPT09KGU9dGhpcy5fcmFuZ2VSZWFkZXJzWzBdKXx8dm9pZCAwPT09ZXx8bnVsbD09PShyPWUub25Qcm9ncmVzcyl8fHZvaWQgMD09PXJ8fHIuY2FsbChlLHtsb2FkZWQ6dC5sb2FkZWR9KTpudWxsPT09KG49dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1ufHxudWxsPT09KGk9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09aXx8aS5jYWxsKG4se2xvYWRlZDp0LmxvYWRlZCx0b3RhbDp0LnRvdGFsfSl9fSx7a2V5OiJfb25Qcm9ncmVzc2l2ZURvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09dHx8dC5wcm9ncmVzc2l2ZURvbmUoKSx0aGlzLl9wcm9ncmVzc2l2ZURvbmU9ITB9fSx7a2V5OiJfcmVtb3ZlUmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JhbmdlUmVhZGVycy5pbmRleE9mKHQpO2U+PTAmJnRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGRGF0YVRyYW5zcG9ydFN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3ZhciB0PXRoaXMuX3F1ZXVlZENodW5rcztyZXR1cm4gdGhpcy5fcXVldWVkQ2h1bmtzPW51bGwsbmV3IHYodGhpcyx0LHRoaXMuX3Byb2dyZXNzaXZlRG9uZSx0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSl9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IHkodGhpcyx0LGUpO3JldHVybiB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZSh0LGUpLHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCk7dmFyIHIsbj11KHRoaXMuX3JhbmdlUmVhZGVycy5zbGljZSgwKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUuY2FuY2VsKHQpfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpfX1dKSx0fSgpO2UuUERGRGF0YVRyYW5zcG9ydFN0cmVhbT1wO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtoKHRoaXMsdCksdGhpcy5fc3RyZWFtPWUsdGhpcy5fZG9uZT1ufHwhMSx0aGlzLl9maWxlbmFtZT0oMCxpLmlzUGRmRmlsZSkoYSk/YTpudWxsLHRoaXMuX3F1ZXVlZENodW5rcz1yfHxbXSx0aGlzLl9sb2FkZWQ9MDt2YXIgbyxzPXUodGhpcy5fcXVldWVkQ2h1bmtzKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWU7dGhpcy5fbG9hZGVkKz1sLmJ5dGVMZW5ndGh9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX2hlYWRlcnNSZWFkeT1Qcm9taXNlLnJlc29sdmUoKSxlLl9mdWxsUmVxdWVzdFJlYWRlcj10aGlzLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lfHwodGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVua3MucHVzaCh0KSx0aGlzLl9sb2FkZWQrPXQuYnl0ZUxlbmd0aCl9fSx7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJmaWxlbmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cmVhbS5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJlYW0uX2NvbnRlbnRMZW5ndGh9fSx7a2V5OiJyZWFkIix2YWx1ZTooZT1zKGEoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGUscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCEodGhpcy5fcXVldWVkQ2h1bmtzLmxlbmd0aD4wKSl7dC5uZXh0PTM7YnJlYWt9cmV0dXJuIGU9dGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCksdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmUsZG9uZTohMX0pO2Nhc2UgMzppZighdGhpcy5fZG9uZSl7dC5uZXh0PTU7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNTpyZXR1cm4gcj0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3JlcXVlc3RzLnB1c2gociksdC5hYnJ1cHQoInJldHVybiIsci5wcm9taXNlKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITA7dmFyIGUscj11KHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wfX0se2tleToicHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RvbmV8fCh0aGlzLl9kb25lPSEwKX19XSksdH0oKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX3N0cmVhbT1lLHRoaXMuX2JlZ2luPXIsdGhpcy5fZW5kPW4sdGhpcy5fcXVldWVkQ2h1bms9bnVsbCx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5fZG9uZSl7aWYoMD09PXRoaXMuX3JlcXVlc3RzLmxlbmd0aCl0aGlzLl9xdWV1ZWRDaHVuaz10O2Vsc2V7dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTt2YXIgZSxyPXUodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9dGhpcy5fZG9uZT0hMCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NDticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDQ6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDY6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lPSEwO3ZhciBlLHI9dSh0aGlzLl9yZXF1ZXN0cyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUucmVzb2x2ZSh7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9yZXF1ZXN0cy5sZW5ndGg9MCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX1dKSx0fSgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9ZnVuY3Rpb24gbih0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIG49dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBpPW4uY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1yKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5YZmFUZXh0PXZvaWQgMDt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToidGV4dENvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9e2l0ZW1zOnIsc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9O3JldHVybiBmdW5jdGlvbiBlKGkpe3ZhciBhO2lmKGkpe3ZhciBvPW51bGwscz1pLm5hbWU7aWYoIiN0ZXh0Ij09PXMpbz1pLnZhbHVlO2Vsc2V7aWYoIXQuc2hvdWxkQnVpbGRUZXh0KHMpKXJldHVybjtudWxsIT1pJiZudWxsIT09KGE9aS5hdHRyaWJ1dGVzKSYmdm9pZCAwIT09YSYmYS50ZXh0Q29udGVudD9vPWkuYXR0cmlidXRlcy50ZXh0Q29udGVudDppLnZhbHVlJiYobz1pLnZhbHVlKX1pZihudWxsIT09byYmci5wdXNoKHtzdHI6b30pLGkuY2hpbGRyZW4pe3ZhciBsLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBuKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bih0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIGk9MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gaT49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbaSsrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gcz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLG89dH0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgb319fX0oaS5jaGlsZHJlbik7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWUobC52YWx1ZSl9Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9fX19KGUpLGl9fSx7a2V5OiJzaG91bGRCdWlsZFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEoInRleHRhcmVhIj09PXR8fCJpbnB1dCI9PT10fHwib3B0aW9uIj09PXR8fCJzZWxlY3QiPT09dCl9fV0sbnVsbCYmaShlLnByb3RvdHlwZSxudWxsKSxyJiZpKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYVRleHQ9YX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWUuTm9kZUNhbnZhc0ZhY3Rvcnk9ZS5Ob2RlQ01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwO3ZhciBpPXIoMTM4KTtmdW5jdGlvbiBhKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBlJiZvKHQucHJvdG90eXBlLGUpLHImJm8odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGwodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmdSh0LGUpfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LHUodCxlKX1mdW5jdGlvbiBjKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixpPWgodCk7aWYoZSl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGksYXJndW1lbnRzLGEpfWVsc2Ugcj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBoKHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxoKHQpfXZhciBmPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXtyZXF1aXJlKCJmcyIpLnJlYWRGaWxlKHQsKGZ1bmN0aW9uKHQsbil7IXQmJm4/ZShuZXcgVWludDhBcnJheShuKSk6cihuZXcgRXJyb3IodCkpfSkpfSkpfSxkPWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJlcXVpcmUoImNhbnZhcyIpLmNyZWF0ZUNhbnZhcyh0LGUpfX1dKSxyfShpLkJhc2VDYW52YXNGYWN0b3J5KTtlLk5vZGVDYW52YXNGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24odCl7bChyLHQpO3ZhciBlPWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBhKHRoaXMsciksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHMocixbe2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0KS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57Y01hcERhdGE6dCxjb21wcmVzc2lvblR5cGU6ZX19KSl9fV0pLHJ9KGkuQmFzZUNNYXBSZWFkZXJGYWN0b3J5KTtlLk5vZGVDTWFwUmVhZGVyRmFjdG9yeT1wO3ZhciB2PWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmKHQpfX1dKSxyfShpLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9dn0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVGV4dExheWVyUmVuZGVyVGFzaz12b2lkIDAsZS5yZW5kZXJUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dC50ZXh0Q29udGVudFNvdXJjZXx8IXQudGV4dENvbnRlbnQmJiF0LnRleHRDb250ZW50U3RyZWFtfHwoKDAsYS5kZXByZWNhdGVkKSgiVGhlIFRleHRMYXllclJlbmRlciBgdGV4dENvbnRlbnRgL2B0ZXh0Q29udGVudFN0cmVhbWAgcGFyYW1ldGVycyB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSwgcGxlYXNlIHVzZSBgdGV4dENvbnRlbnRTb3VyY2VgIGluc3RlYWQuIiksdC50ZXh0Q29udGVudFNvdXJjZT10LnRleHRDb250ZW50fHx0LnRleHRDb250ZW50U3RyZWFtKTt2YXIgZT1uZXcgcCh0KTtyZXR1cm4gZS5fcmVuZGVyKCksZX0sZS51cGRhdGVUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250YWluZXIscj10LnZpZXdwb3J0LG49dC50ZXh0RGl2cyxpPXQudGV4dERpdlByb3BlcnRpZXMsbz10LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGw9dC5tdXN0Um90YXRlLHU9dm9pZCAwPT09bHx8bCxjPXQubXVzdFJlc2NhbGUsZj12b2lkIDA9PT1jfHxjO2lmKHUmJigwLGEuc2V0TGF5ZXJEaW1lbnNpb25zKShlLHtyb3RhdGlvbjpyLnJvdGF0aW9ufSksZil7dmFyIHAsdj1oKDAsbykseT17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpyLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6dn0sbT1zKG4pO3RyeXtmb3IobS5zKCk7IShwPW0ubigpKS5kb25lOyl7dmFyIGc9cC52YWx1ZTt5LnByb3BlcnRpZXM9aS5nZXQoZykseS5kaXY9ZyxkKHkpfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19fTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2wodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciB1PTMwLGM9bmV3IE1hcDtmdW5jdGlvbiBoKHQsZSl7dmFyIHI7aWYoZSYmaS5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZClyPW5ldyBPZmZzY3JlZW5DYW52YXModCx0KS5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSk7ZWxzZXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLndpZHRoPW4uaGVpZ2h0PXQscj1uLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITF9KX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksYT17YW5nbGU6MCxjYW52YXNXaWR0aDowLGhhc1RleHQ6IiIhPT1lLnN0cixoYXNFT0w6ZS5oYXNFT0wsZm9udFNpemU6MH07dC5fdGV4dERpdnMucHVzaChuKTt2YXIgbz1pLlV0aWwudHJhbnNmb3JtKHQuX3RyYW5zZm9ybSxlLnRyYW5zZm9ybSkscz1NYXRoLmF0YW4yKG9bMV0sb1swXSksbD1yW2UuZm9udE5hbWVdO2wudmVydGljYWwmJihzKz1NYXRoLlBJLzIpO3ZhciBmLGQscD1NYXRoLmh5cG90KG9bMl0sb1szXSksdj1wKmZ1bmN0aW9uKHQsZSl7dmFyIHI9Yy5nZXQodCk7aWYocilyZXR1cm4gcjt2YXIgbj1oKHUsZSk7bi5mb250PSIiLmNvbmNhdCh1LCJweCAiKS5jb25jYXQodCk7dmFyIGk9bi5tZWFzdXJlVGV4dCgiIiksYT1pLmZvbnRCb3VuZGluZ0JveEFzY2VudCxvPU1hdGguYWJzKGkuZm9udEJvdW5kaW5nQm94RGVzY2VudCk7aWYoYSl7dmFyIHM9YS8oYStvKTtyZXR1cm4gYy5zZXQodCxzKSxuLmNhbnZhcy53aWR0aD1uLmNhbnZhcy5oZWlnaHQ9MCxzfW4uc3Ryb2tlU3R5bGU9InJlZCIsbi5jbGVhclJlY3QoMCwwLHUsdSksbi5zdHJva2VUZXh0KCJnIiwwLDApO3ZhciBsPW4uZ2V0SW1hZ2VEYXRhKDAsMCx1LHUpLmRhdGE7bz0wO2Zvcih2YXIgZj1sLmxlbmd0aC0xLTM7Zj49MDtmLT00KWlmKGxbZl0+MCl7bz1NYXRoLmNlaWwoZi80L3UpO2JyZWFrfW4uY2xlYXJSZWN0KDAsMCx1LHUpLG4uc3Ryb2tlVGV4dCgiQSIsMCx1KSxhPTA7Zm9yKHZhciBkPTAscD0obD1uLmdldEltYWdlRGF0YSgwLDAsdSx1KS5kYXRhKS5sZW5ndGg7ZDxwO2QrPTQpaWYobFtkXT4wKXthPXUtTWF0aC5mbG9vcihkLzQvdSk7YnJlYWt9aWYobi5jYW52YXMud2lkdGg9bi5jYW52YXMuaGVpZ2h0PTAsYSl7dmFyIHY9YS8oYStvKTtyZXR1cm4gYy5zZXQodCx2KSx2fXJldHVybiBjLnNldCh0LC44KSwuOH0obC5mb250RmFtaWx5LHQuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKTswPT09cz8oZj1vWzRdLGQ9b1s1XS12KTooZj1vWzRdK3YqTWF0aC5zaW4ocyksZD1vWzVdLXYqTWF0aC5jb3MocykpO3ZhciB5PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikqIixtPW4uc3R5bGU7dC5fY29udGFpbmVyPT09dC5fcm9vdENvbnRhaW5lcj8obS5sZWZ0PSIiLmNvbmNhdCgoMTAwKmYvdC5fcGFnZVdpZHRoKS50b0ZpeGVkKDIpLCIlIiksbS50b3A9IiIuY29uY2F0KCgxMDAqZC90Ll9wYWdlSGVpZ2h0KS50b0ZpeGVkKDIpLCIlIikpOihtLmxlZnQ9IiIuY29uY2F0KHkpLmNvbmNhdChmLnRvRml4ZWQoMiksInB4KSIpLG0udG9wPSIiLmNvbmNhdCh5KS5jb25jYXQoZC50b0ZpeGVkKDIpLCJweCkiKSksbS5mb250U2l6ZT0iIi5jb25jYXQoeSkuY29uY2F0KHAudG9GaXhlZCgyKSwicHgpIiksbS5mb250RmFtaWx5PWwuZm9udEZhbWlseSxhLmZvbnRTaXplPXAsbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKSxuLnRleHRDb250ZW50PWUuc3RyLG4uZGlyPWUuZGlyLHQuX2ZvbnRJbnNwZWN0b3JFbmFibGVkJiYobi5kYXRhc2V0LmZvbnROYW1lPWUuZm9udE5hbWUpLDAhPT1zJiYoYS5hbmdsZT1zKigxODAvTWF0aC5QSSkpO3ZhciBnPSExO2lmKGUuc3RyLmxlbmd0aD4xKWc9ITA7ZWxzZSBpZigiICIhPT1lLnN0ciYmZS50cmFuc2Zvcm1bMF0hPT1lLnRyYW5zZm9ybVszXSl7dmFyIGI9TWF0aC5hYnMoZS50cmFuc2Zvcm1bMF0pLF89TWF0aC5hYnMoZS50cmFuc2Zvcm1bM10pO2IhPT1fJiZNYXRoLm1heChiLF8pL01hdGgubWluKGIsXyk+MS41JiYoZz0hMCl9ZyYmKGEuY2FudmFzV2lkdGg9bC52ZXJ0aWNhbD9lLmhlaWdodDplLndpZHRoKSx0Ll90ZXh0RGl2UHJvcGVydGllcy5zZXQobixhKSx0Ll9pc1JlYWRhYmxlU3RyZWFtJiZ0Ll9sYXlvdXRUZXh0KG4pfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXYscj10LnNjYWxlLG49dC5wcm9wZXJ0aWVzLGk9dC5jdHgsYT10LnByZXZGb250U2l6ZSxvPXQucHJldkZvbnRGYW1pbHkscz1lLnN0eWxlLGw9IiI7aWYoMCE9PW4uY2FudmFzV2lkdGgmJm4uaGFzVGV4dCl7dmFyIHU9cy5mb250RmFtaWx5LGM9bi5jYW52YXNXaWR0aCxoPW4uZm9udFNpemU7YT09PWgmJm89PT11fHwoaS5mb250PSIiLmNvbmNhdChoKnIsInB4ICIpLmNvbmNhdCh1KSx0LnByZXZGb250U2l6ZT1oLHQucHJldkZvbnRGYW1pbHk9dSk7dmFyIGY9aS5tZWFzdXJlVGV4dChlLnRleHRDb250ZW50KS53aWR0aDtmPjAmJihsPSJzY2FsZVgoIi5jb25jYXQoYypyL2YsIikiKSl9MCE9PW4uYW5nbGUmJihsPSJyb3RhdGUoIi5jb25jYXQobi5hbmdsZSwiZGVnKSAiKS5jb25jYXQobCkpLGwubGVuZ3RoPjAmJihzLnRyYW5zZm9ybT1sKX12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbj10aGlzLG89ZS50ZXh0Q29udGVudFNvdXJjZSxzPWUuY29udGFpbmVyLGw9ZS52aWV3cG9ydCx1PWUudGV4dERpdnMsYz1lLnRleHREaXZQcm9wZXJ0aWVzLGY9ZS50ZXh0Q29udGVudEl0ZW1zU3RyLGQ9ZS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLl90ZXh0Q29udGVudFNvdXJjZT1vLHRoaXMuX2lzUmVhZGFibGVTdHJlYW09byBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtLHRoaXMuX2NvbnRhaW5lcj10aGlzLl9yb290Q29udGFpbmVyPXMsdGhpcy5fdGV4dERpdnM9dXx8W10sdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0cj1mfHxbXSx0aGlzLl9mb250SW5zcGVjdG9yRW5hYmxlZD0hKG51bGw9PT0ocj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpfHx2b2lkIDA9PT1yfHwhci5lbmFibGVkKSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl90ZXh0RGl2UHJvcGVydGllcz1jfHxuZXcgV2Vha01hcCx0aGlzLl9jYW5jZWxlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fbGF5b3V0VGV4dFBhcmFtcz17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpsLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6aCgwLGQpfTt2YXIgcD1sLnJhd0RpbXMsdj1wLnBhZ2VXaWR0aCx5PXAucGFnZUhlaWdodCxtPXAucGFnZVgsZz1wLnBhZ2VZO3RoaXMuX3RyYW5zZm9ybT1bMSwwLDAsLTEsLW0sZyt5XSx0aGlzLl9wYWdlV2lkdGg9dix0aGlzLl9wYWdlSGVpZ2h0PXksKDAsYS5zZXRMYXllckRpbWVuc2lvbnMpKHMsbCksdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlLmZpbmFsbHkoKGZ1bmN0aW9uKCl7bi5fbGF5b3V0VGV4dFBhcmFtcz1udWxsfSkpLmNhdGNoKChmdW5jdGlvbigpe30pKX12YXIgZSxyO3JldHVybiBlPXQsKHI9W3trZXk6InByb21pc2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsZWQ9ITAsdGhpcy5fcmVhZGVyJiYodGhpcy5fcmVhZGVyLmNhbmNlbChuZXcgaS5BYm9ydEV4Y2VwdGlvbigiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLiIpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSksdGhpcy5fcmVhZGVyPW51bGwpLHRoaXMuX2NhcGFiaWxpdHkucmVqZWN0KG5ldyBpLkFib3J0RXhjZXB0aW9uKCJUZXh0TGF5ZXIgdGFzayBjYW5jZWxsZWQuIikpfX0se2tleToiX3Byb2Nlc3NJdGVtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXModCk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKHZvaWQgMCE9PWkuc3RyKXRoaXMuX3RleHRDb250ZW50SXRlbXNTdHIucHVzaChpLnN0ciksZih0aGlzLGksZSk7ZWxzZSBpZigiYmVnaW5NYXJrZWRDb250ZW50UHJvcHMiPT09aS50eXBlfHwiYmVnaW5NYXJrZWRDb250ZW50Ij09PWkudHlwZSl7dmFyIGE9dGhpcy5fY29udGFpbmVyO3RoaXMuX2NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcmtlZENvbnRlbnQiKSxudWxsIT09aS5pZCYmdGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiaWQiLCIiLmNvbmNhdChpLmlkKSksYS5hcHBlbmQodGhpcy5fY29udGFpbmVyKX1lbHNlImVuZE1hcmtlZENvbnRlbnQiPT09aS50eXBlJiYodGhpcy5fY29udGFpbmVyPXRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToiX2xheW91dFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xheW91dFRleHRQYXJhbXMucHJvcGVydGllcz10aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQodCk7aWYodGhpcy5fbGF5b3V0VGV4dFBhcmFtcy5kaXY9dCxkKHRoaXMuX2xheW91dFRleHRQYXJhbXMpLGUuaGFzVGV4dCYmdGhpcy5fY29udGFpbmVyLmFwcGVuZCh0KSxlLmhhc0VPTCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTtyLnNldEF0dHJpYnV0ZSgicm9sZSIsInByZXNlbnRhdGlvbiIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmQocil9fX0se2tleToiX3JlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5faXNSZWFkYWJsZVN0cmVhbSl0aGlzLl9yZWFkZXI9dGhpcy5fdGV4dENvbnRlbnRTb3VyY2UuZ2V0UmVhZGVyKCksZnVuY3Rpb24gbigpe3QuX3JlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oaSl7dmFyIGE9aS52YWx1ZTtpLmRvbmU/ZS5yZXNvbHZlKCk6KE9iamVjdC5hc3NpZ24ocixhLnN0eWxlcyksdC5fcHJvY2Vzc0l0ZW1zKGEuaXRlbXMsciksbigpKX0pLGUucmVqZWN0KX0oKTtlbHNle2lmKCF0aGlzLl90ZXh0Q29udGVudFNvdXJjZSl0aHJvdyBuZXcgRXJyb3IoJ05vICJ0ZXh0Q29udGVudFNvdXJjZSIgcGFyYW1ldGVyIHNwZWNpZmllZC4nKTt2YXIgbj10aGlzLl90ZXh0Q29udGVudFNvdXJjZSxhPW4uaXRlbXMsbz1uLnN0eWxlczt0aGlzLl9wcm9jZXNzSXRlbXMoYSxvKSxlLnJlc29sdmUoKX1lLnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyPW51bGwsZnVuY3Rpb24odCl7aWYoIXQuX2NhbmNlbGVkKXt2YXIgZT10Ll90ZXh0RGl2cyxyPXQuX2NhcGFiaWxpdHk7aWYoZS5sZW5ndGg+MWU1KXIucmVzb2x2ZSgpO2Vsc2V7aWYoIXQuX2lzUmVhZGFibGVTdHJlYW0pe3ZhciBuLGk9cyhlKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7dC5fbGF5b3V0VGV4dChhKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fXIucmVzb2x2ZSgpfX19KHQpfSksdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QpfX1dKSYmbyhlLnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fSgpO2UuVGV4dExheWVyUmVuZGVyVGFzaz1wfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDE1Mykscz1yKDE1NCksbD1yKDEzNyk7ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGModCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKHQsZSk6dm9pZCAwfX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxkKG4ua2V5KSxuKX19ZnVuY3Rpb24gZih0LGUpe3YodCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBkKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBwKHQsZSxyKXt2KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB2KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB5KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gZyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCxiKHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBiKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBfLHcsQT1uZXcgV2Vha01hcCxrPW5ldyBXZWFrTWFwLFM9bmV3IFdlYWtNYXAseD1uZXcgV2Vha01hcCxFPW5ldyBXZWFrTWFwLFA9bmV3IFdlYWtNYXAsVD1uZXcgV2Vha01hcCxDPW5ldyBXZWFrTWFwLE89bmV3IFdlYWtTZXQsRj1uZXcgV2Vha1NldCxNPW5ldyBXZWFrU2V0LFI9bmV3IFdlYWtTZXQsST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksZih0aGlzLFIpLGYodGhpcyxNKSxmKHRoaXMsRiksZih0aGlzLE8pLHAodGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxwKHRoaXMsUyx7d3JpdGFibGU6ITAsdmFsdWU6dGhpcy5wb2ludGVydXAuYmluZCh0aGlzKX0pLHAodGhpcyx4LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLnBvaW50ZXJkb3duLmJpbmQodGhpcyl9KSxwKHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHAodGhpcyxQLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxULHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0Ll9pbml0aWFsaXplZHx8KHQuX2luaXRpYWxpemVkPSEwLG8uRnJlZVRleHRFZGl0b3IuaW5pdGlhbGl6ZShlLmwxMG4pLHMuSW5rRWRpdG9yLmluaXRpYWxpemUoZS5sMTBuKSksZS51aU1hbmFnZXIucmVnaXN0ZXJFZGl0b3JUeXBlcyhbby5GcmVlVGV4dEVkaXRvcixzLklua0VkaXRvcl0pLGcodGhpcyxDLGUudWlNYW5hZ2VyKSx0aGlzLnBhZ2VJbmRleD1lLnBhZ2VJbmRleCx0aGlzLmRpdj1lLmRpdixnKHRoaXMsQSxlLmFjY2Vzc2liaWxpdHlNYW5hZ2VyKSxtKHRoaXMsQykuYWRkTGF5ZXIodGhpcyl9dmFyIGUscjtyZXR1cm4gZT10LHI9W3trZXk6InVwZGF0ZVRvb2xiYXIiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51cGRhdGVUb29sYmFyKHQpfX0se2tleToidXBkYXRlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bSh0aGlzLEMpLmdldE1vZGUoKTt5KHRoaXMsUixOKS5jYWxsKHRoaXMpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8odGhpcy5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMSksdGhpcy5kaXNhYmxlQ2xpY2soKSk6dGhpcy5lbmFibGVDbGljaygpLG0odGhpcyxDKS51bnNlbGVjdEFsbCgpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImZyZWVUZXh0RWRpdGluZyIsdD09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImlua0VkaXRpbmciLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSyl9fSx7a2V5OiJhZGRJbmtFZGl0b3JJZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodHx8bSh0aGlzLEMpLmdldE1vZGUoKT09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LKXtpZighdCl7dmFyIGUscj11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlO2lmKG4uaXNFbXB0eSgpKXJldHVybiB2b2lkIG4uc2V0SW5CYWNrZ3JvdW5kKCl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX15KHRoaXMsTSxEKS5jYWxsKHRoaXMse29mZnNldFg6MCxvZmZzZXRZOjB9KS5zZXRJbkJhY2tncm91bmQoKX19fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS5zZXRFZGl0aW5nU3RhdGUodCl9fSx7a2V5OiJhZGRDb21tYW5kcyIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLmFkZENvbW1hbmRzKHQpfX0se2tleToiZW5hYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZUVkaXRpbmcoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19fSx7a2V5OiJkaXNhYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmRpc2FibGVFZGl0aW5nKCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fX0se2tleToic2V0QWN0aXZlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuZ2V0QWN0aXZlKCkhPT10JiZtKHRoaXMsQykuc2V0QWN0aXZlRWRpdG9yKHQpfX0se2tleToiZW5hYmxlQ2xpY2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLG0odGhpcyx4KSksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixtKHRoaXMsUykpfX0se2tleToiZGlzYWJsZUNsaWNrIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixtKHRoaXMseCkpLHRoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsbSh0aGlzLFMpKX19LHtrZXk6ImF0dGFjaCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEUpLnNldCh0LmlkLHQpfX0se2tleToiZGV0YWNoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTttKHRoaXMsRSkuZGVsZXRlKHQuaWQpLG51bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLnJlbW92ZVBvaW50ZXJJblRleHRMYXllcih0LmNvbnRlbnREaXYpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO20odGhpcyxDKS5yZW1vdmVFZGl0b3IodCksdGhpcy5kZXRhY2godCksdC5kaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIsc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmRpdi5zdHlsZS5kaXNwbGF5PSIiLHQuZGl2LnJlbW92ZSgpLHQuaXNBdHRhY2hlZFRvRE9NPSExLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5JiZtKGUsQykuZm9jdXNNYWluQ29udGFpbmVyKCl9KSwwKSxtKHRoaXMsVCl8fHRoaXMuYWRkSW5rRWRpdG9ySWZOZWVkZWQoITEpfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXtpZih5KHRoaXMsTyxqKS5jYWxsKHRoaXMsdCksbSh0aGlzLEMpLmFkZEVkaXRvcih0KSx0aGlzLmF0dGFjaCh0KSwhdC5pc0F0dGFjaGVkVG9ET00pe3ZhciBlPXQucmVuZGVyKCk7dGhpcy5kaXYuYXBwZW5kKGUpLHQuaXNBdHRhY2hlZFRvRE9NPSEwfXRoaXMubW92ZUVkaXRvckluRE9NKHQpLHQub25jZUFkZGVkKCksbSh0aGlzLEMpLmFkZFRvQW5ub3RhdGlvblN0b3JhZ2UodCl9fSx7a2V5OiJtb3ZlRWRpdG9ySW5ET00iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLm1vdmVFbGVtZW50SW5ET00odGhpcy5kaXYsdC5kaXYsdC5jb250ZW50RGl2LCEwKX19LHtrZXk6ImFkZE9yUmVidWlsZCIsdmFsdWU6ZnVuY3Rpb24odCl7dC5uZWVkc1RvQmVSZWJ1aWx0KCk/dC5yZWJ1aWxkKCk6dGhpcy5hZGQodCl9fSx7a2V5OiJhZGRBTmV3RWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITB9KX19LHtrZXk6ImFkZFVuZG9hYmxlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITF9KX19LHtrZXk6ImdldE5leHRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLEMpLmdldElkKCl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuYW5ub3RhdGlvblR5cGUpe2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDpyZXR1cm4gby5GcmVlVGV4dEVkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKTtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOnJldHVybiBzLklua0VkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKX1yZXR1cm4gbnVsbH19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuc2V0U2VsZWN0ZWQodCl9fSx7a2V5OiJ0b2dnbGVTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLnRvZ2dsZVNlbGVjdGVkKHQpfX0se2tleToiaXNTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odGhpcyxDKS5pc1NlbGVjdGVkKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51bnNlbGVjdCh0KX19LHtrZXk6InBvaW50ZXJ1cCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYzswIT09dC5idXR0b258fHQuY3RybEtleSYmZXx8dC50YXJnZXQ9PT10aGlzLmRpdiYmbSh0aGlzLFApJiYoZyh0aGlzLFAsITEpLG0odGhpcyxrKT95KHRoaXMsTSxEKS5jYWxsKHRoaXMsdCk6Zyh0aGlzLGssITApKX19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1pLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjO2lmKCEoMCE9PXQuYnV0dG9ufHx0LmN0cmxLZXkmJmUpJiZ0LnRhcmdldD09PXRoaXMuZGl2KXtnKHRoaXMsUCwhMCk7dmFyIHI9bSh0aGlzLEMpLmdldEFjdGl2ZSgpO2codGhpcyxrLCFyfHxyLmlzRW1wdHkoKSl9fX0se2tleToiZHJvcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgidGV4dC9wbGFpbiIpLHI9bSh0aGlzLEMpLmdldEVkaXRvcihlKTtpZihyKXt0LnByZXZlbnREZWZhdWx0KCksdC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSIseSh0aGlzLE8saikuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5jbGllbnRYLW4ueCxhPXQuY2xpZW50WS1uLnk7ci50cmFuc2xhdGUoaS1yLnN0YXJ0WCxhLXIuc3RhcnRZKSx0aGlzLm1vdmVFZGl0b3JJbkRPTShyKSxyLmRpdi5mb2N1cygpfX19LHtrZXk6ImRyYWdvdmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0OyhudWxsPT09KHQ9bSh0aGlzLEMpLmdldEFjdGl2ZSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5wYXJlbnQpPT09dGhpcyYmbSh0aGlzLEMpLnNldEFjdGl2ZUVkaXRvcihudWxsKTt2YXIgZSxyPXUobSh0aGlzLEUpLnZhbHVlcygpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuLGk9ZS52YWx1ZTtudWxsPT09KG49bSh0aGlzLEEpKXx8dm9pZCAwPT09bnx8bi5yZW1vdmVQb2ludGVySW5UZXh0TGF5ZXIoaS5jb250ZW50RGl2KSxpLnNldFBhcmVudChudWxsKSxpLmlzQXR0YWNoZWRUb0RPTT0hMSxpLmRpdi5yZW1vdmUoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5kaXY9bnVsbCxtKHRoaXMsRSkuY2xlYXIoKSxtKHRoaXMsQykucmVtb3ZlTGF5ZXIodGhpcyl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmlld3BvcnQ7dGhpcy52aWV3cG9ydD1lLCgwLGwuc2V0TGF5ZXJEaW1lbnNpb25zKSh0aGlzLmRpdixlKSwoMCxhLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnb3ZlciIsImRyb3AiXSk7dmFyIHIsbj11KG0odGhpcyxDKS5nZXRFZGl0b3JzKHRoaXMucGFnZUluZGV4KSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO3RoaXMuYWRkKGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX10aGlzLnVwZGF0ZU1vZGUoKX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC52aWV3cG9ydDttKHRoaXMsQykuY29tbWl0T3JSZW1vdmUoKSx0aGlzLnZpZXdwb3J0PWUsKDAsbC5zZXRMYXllckRpbWVuc2lvbnMpKHRoaXMuZGl2LHtyb3RhdGlvbjplLnJvdGF0aW9ufSksdGhpcy51cGRhdGVNb2RlKCl9fSx7a2V5OiJwYWdlRGltZW5zaW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52aWV3cG9ydC5yYXdEaW1zO3JldHVyblt0LnBhZ2VXaWR0aCx0LnBhZ2VIZWlnaHRdfX1dLHImJmgoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtmdW5jdGlvbiBqKHQpe3ZhciBlO3QucGFyZW50IT09dGhpcyYmKHRoaXMuYXR0YWNoKHQpLG51bGw9PT0oZT10LnBhcmVudCl8fHZvaWQgMD09PWV8fGUuZGV0YWNoKHQpLHQuc2V0UGFyZW50KHRoaXMpLHQuZGl2JiZ0LmlzQXR0YWNoZWRUb0RPTSYmKHQuZGl2LnJlbW92ZSgpLHRoaXMuZGl2LmFwcGVuZCh0LmRpdikpKX1mdW5jdGlvbiBMKHQpe3N3aXRjaChtKHRoaXMsQykuZ2V0TW9kZSgpKXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBvLkZyZWVUZXh0RWRpdG9yKHQpO2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6cmV0dXJuIG5ldyBzLklua0VkaXRvcih0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEKHQpe3ZhciBlPXRoaXMuZ2V0TmV4dElkKCkscj15KHRoaXMsRixMKS5jYWxsKHRoaXMse3BhcmVudDp0aGlzLGlkOmUseDp0Lm9mZnNldFgseTp0Lm9mZnNldFksdWlNYW5hZ2VyOm0odGhpcyxDKX0pO3JldHVybiByJiZ0aGlzLmFkZChyKSxyfWZ1bmN0aW9uIE4oKXtnKHRoaXMsVCwhMCk7dmFyIHQsZT11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3IuaXNFbXB0eSgpJiZyLnJlbW92ZSgpfX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1nKHRoaXMsVCwhMSl9ZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9SSxfPUksKHc9ZCh3PSJfaW5pdGlhbGl6ZWQiKSlpbiBfP09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLHcse3ZhbHVlOmZhbHNlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6X1t3XT1mYWxzZX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRnJlZVRleHRFZGl0b3I9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDEzNSk7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9dSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx1KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gYyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/aChPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2IodCxlLHJbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOmgoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXyhuLmtleSksbil9fWZ1bmN0aW9uIHAoKXtyZXR1cm4gcD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PW0odCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSxwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSx2KHQsZSl9ZnVuY3Rpb24geSh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sbSh0KX1mdW5jdGlvbiBnKHQsZSl7QSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGIodCxlLHIpe3JldHVybihlPV8oZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gXyh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW4oZSk/ZTpTdHJpbmcoZSl9ZnVuY3Rpb24gdyh0LGUscil7QSh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gQSh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKHQpOmUudmFsdWV9KHQsRSh0LGUsImdldCIpKX1mdW5jdGlvbiBTKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19KHQsRSh0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gRSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgUD1uZXcgV2Vha01hcCxUPW5ldyBXZWFrTWFwLEM9bmV3IFdlYWtNYXAsTz1uZXcgV2Vha01hcCxGPW5ldyBXZWFrTWFwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha1NldCxEPW5ldyBXZWFrU2V0LE49bmV3IFdlYWtTZXQsVT1uZXcgV2Vha1NldCxXPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZ2KHQsZSl9KEUsdCk7dmFyIGUscixoLGIsXyxBPShiPUUsXz1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgdCxlPW0oYik7aWYoXyl7dmFyIHI9bSh0aGlzKS5jb25zdHJ1Y3Rvcjt0PVJlZmxlY3QuY29uc3RydWN0KGUsYXJndW1lbnRzLHIpfWVsc2UgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiB5KHQpfSh0aGlzLHQpfSk7ZnVuY3Rpb24gRSh0KXt2YXIgZTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxFKSxnKHkoZT1BLmNhbGwodGhpcyxmKGYoe30sdCkse30se25hbWU6ImZyZWVUZXh0RWRpdG9yIn0pKSksVSksZyh5KGUpLE4pLGcoeShlKSxEKSxnKHkoZSksTCksdyh5KGUpLFAse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Qmx1ci5iaW5kKHkoZSkpfSksdyh5KGUpLFQse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Rm9jdXMuYmluZCh5KGUpKX0pLHcoeShlKSxDLHt3cml0YWJsZTohMCx2YWx1ZTplLmVkaXRvckRpdklucHV0LmJpbmQoeShlKSl9KSx3KHkoZSksTyx7d3JpdGFibGU6ITAsdmFsdWU6ZS5lZGl0b3JEaXZLZXlkb3duLmJpbmQoeShlKSl9KSx3KHkoZSksRix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdyh5KGUpLE0se3dyaXRhYmxlOiEwLHZhbHVlOiIifSksdyh5KGUpLFIse3dyaXRhYmxlOiEwLHZhbHVlOiIiLmNvbmNhdChlLmlkLCItZWRpdG9yIil9KSx3KHkoZSksSSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx3KHkoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkseCh5KGUpLEYsdC5jb2xvcnx8RS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLHgoeShlKSxqLHQuZm9udFNpemV8fEUuX2RlZmF1bHRGb250U2l6ZSksZX1yZXR1cm4gZT1FLGg9W3trZXk6ImluaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2wxMG5Qcm9taXNlPW5ldyBNYXAoWyJmcmVlX3RleHQyX2RlZmF1bHRfY29udGVudCIsImVkaXRvcl9mcmVlX3RleHQyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSk7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO3RoaXMuX2ludGVybmFsUGFkZGluZz1wYXJzZUZsb2F0KGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1mcmVldGV4dC1wYWRkaW5nIikpfX0se2tleToidXBkYXRlRGVmYXVsdFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkU6RS5fZGVmYXVsdEZvbnRTaXplPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOkUuX2RlZmF1bHRDb2xvcj1lfX19LHtrZXk6ImRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLEUuX2RlZmF1bHRGb250U2l6ZV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1IsRS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3JdXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4sYT1wKG0oRSksImRlc2VyaWFsaXplIix0aGlzKS5jYWxsKHRoaXMsdCxlLHIpO3JldHVybiB4KGEsaix0LmZvbnRTaXplKSx4KGEsRixpLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBjKHQpfShuPXQuY29sb3IpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KG4pfHx1KG4pfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSkseChhLE0sdC52YWx1ZSksYX19XSwocj1be2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRTpTKHRoaXMsTCxHKS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOlModGhpcyxELEIpLmNhbGwodGhpcyxlKX19fSx7a2V5OiJwcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLGsodGhpcyxqKV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isayh0aGlzLEYpXV19fSx7a2V5OiJnZXRJbml0aWFsVHJhbnNsYXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnRTY2FsZTtyZXR1cm5bLUUuX2ludGVybmFsUGFkZGluZyp0LC0oRS5faW50ZXJuYWxQYWRkaW5nK2sodGhpcyxqKSkqdF19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3AobShFLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5pc0F0dGFjaGVkVG9ET018fHRoaXMucGFyZW50LmFkZCh0aGlzKSl9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpfHwodGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCExKSx0aGlzLnBhcmVudC51cGRhdGVUb29sYmFyKGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHAobShFLnByb3RvdHlwZSksImVuYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QucmVtb3ZlKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwLHRoaXMuZGl2LmRyYWdnYWJsZT0hMSx0aGlzLmRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLHRoaXMuZWRpdG9yRGl2LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGsodGhpcyxPKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGsodGhpcyxUKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsayh0aGlzLFApKSx0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsayh0aGlzLEMpKSl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0luRWRpdE1vZGUoKSYmKHRoaXMucGFyZW50LnNldEVkaXRpbmdTdGF0ZSghMCkscChtKEUucHJvdG90eXBlKSwiZGlzYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSExLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixrKHRoaXMsUikpLHRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixrKHRoaXMsTykpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixrKHRoaXMsVCkpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGsodGhpcyxQKSksdGhpcy5lZGl0b3JEaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGsodGhpcyxDKSksdGhpcy5kaXYuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmlzRWRpdGluZz0hMSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7cChtKEUucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHQudGFyZ2V0IT09dGhpcy5lZGl0b3JEaXYmJnRoaXMuZWRpdG9yRGl2LmZvY3VzKCl9fSx7a2V5OiJvbmNlQWRkZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53aWR0aHx8KHRoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpKX19LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZWRpdG9yRGl2fHwiIj09PXRoaXMuZWRpdG9yRGl2LmlubmVyVGV4dC50cmltKCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCEwKSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikscChtKEUucHJvdG90eXBlKSwicmVtb3ZlIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiY29tbWl0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNJbkVkaXRNb2RlKCkmJihwKG0oRS5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksayh0aGlzLEkpfHwoeCh0aGlzLEksITApLHRoaXMucGFyZW50LmFkZFVuZG9hYmxlRWRpdG9yKHRoaXMpKSx0aGlzLmRpc2FibGVFZGl0TW9kZSgpLHgodGhpcyxNLFModGhpcyxOLHEpLmNhbGwodGhpcykudHJpbUVuZCgpKSxTKHRoaXMsVSxIKS5jYWxsKHRoaXMpKX19LHtrZXk6InNob3VsZEdldEtleWJvYXJkRXZlbnRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5FZGl0TW9kZSgpfX0se2tleToiZGJsY2xpY2siLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpfX0se2tleToia2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT10aGlzLmRpdiYmIkVudGVyIj09PXQua2V5JiYodGhpcy5lbmFibGVFZGl0TW9kZSgpLHRoaXMuZWRpdG9yRGl2LmZvY3VzKCkpfX0se2tleToiZWRpdG9yRGl2S2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7RS5fa2V5Ym9hcmRNYW5hZ2VyLmV4ZWModGhpcyx0KX19LHtrZXk6ImVkaXRvckRpdkZvY3VzIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmlzRWRpdGluZz0hMH19LHtrZXk6ImVkaXRvckRpdkJsdXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuaXNFZGl0aW5nPSExfX0se2tleToiZWRpdG9yRGl2SW5wdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJmcmVlVGV4dEVkaXRpbmciLHRoaXMuaXNFbXB0eSgpKX19LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsImNvbW1lbnQiKSx0aGlzLmVkaXRvckRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIil9fSx7a2V5OiJlbmFibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsInRleHRib3giKSx0aGlzLmVkaXRvckRpdi5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIiwhMCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkscChtKEUucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMuZWRpdG9yRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWRpdG9yRGl2LmNsYXNzTmFtZT0iaW50ZXJuYWwiLHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgiaWQiLGsodGhpcyxSKSksdGhpcy5lbmFibGVFZGl0aW5nKCksRS5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfZnJlZV90ZXh0Ml9hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KX0pKSxFLl9sMTBuUHJvbWlzZS5nZXQoImZyZWVfdGV4dDJfZGVmYXVsdF9jb250ZW50IikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJkZWZhdWx0LWNvbnRlbnQiLHQpfSkpLHRoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZT0hMDt2YXIgbj10aGlzLmVkaXRvckRpdi5zdHlsZTtpZihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGsodGhpcyxqKSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpLG4uY29sb3I9ayh0aGlzLEYpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLmVkaXRvckRpdiksdGhpcy5vdmVybGF5RGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJvdmVybGF5IiwiZW5hYmxlZCIpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLm92ZXJsYXlEaXYpLCgwLGEuYmluZEV2ZW50cykodGhpcyx0aGlzLmRpdixbImRibGNsaWNrIiwia2V5ZG93biJdKSx0aGlzLndpZHRoKXt2YXIgaT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWlbMF0sdT1pWzFdO3RoaXMuc2V0QXQodCpvLGUqdSx0aGlzLndpZHRoKm8sdGhpcy5oZWlnaHQqdSk7dmFyIGMsaD1zKGsodGhpcyxNKS5zcGxpdCgiXG4iKSk7dHJ5e2ZvcihoLnMoKTshKGM9aC5uKCkpLmRvbmU7KXt2YXIgZj1jLnZhbHVlLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5hcHBlbmQoZj9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKSx0aGlzLmVkaXRvckRpdi5hcHBlbmQoZCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGU9ITF9ZWxzZSB0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwO3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvckRpdn19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD1FLl9pbnRlcm5hbFBhZGRpbmcqdGhpcy5wYXJlbnRTY2FsZSxlPXRoaXMuZ2V0UmVjdCh0LHQpLHI9by5Bbm5vdGF0aW9uRWRpdG9yLl9jb2xvck1hbmFnZXIuY29udmVydCh0aGlzLmlzQXR0YWNoZWRUb0RPTT9nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWRpdG9yRGl2KS5jb2xvcjprKHRoaXMsRikpO3JldHVybnthbm5vdGF0aW9uVHlwZTppLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhULGNvbG9yOnIsZm9udFNpemU6ayh0aGlzLGopLHZhbHVlOmsodGhpcyxNKSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscmVjdDplLHJvdGF0aW9uOnRoaXMucm90YXRpb259fX1dKSYmZChlLnByb3RvdHlwZSxyKSxoJiZkKGUsaCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksRX0oby5Bbm5vdGF0aW9uRWRpdG9yKTtmdW5jdGlvbiBHKHQpe3ZhciBlPXRoaXMscj1mdW5jdGlvbih0KXtlLmVkaXRvckRpdi5zdHlsZS5mb250U2l6ZT0iY2FsYygiLmNvbmNhdCh0LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIiksZS50cmFuc2xhdGUoMCwtKHQtayhlLGopKSplLnBhcmVudFNjYWxlKSx4KGUsaix0KSxTKGUsVSxIKS5jYWxsKGUpfSxuPWsodGhpcyxqKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyKHQpfSx1bmRvOmZ1bmN0aW9uKCl7cihuKX0sbXVzdEV4ZWM6ITAsdHlwZTppLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkUsb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIEIodCl7dmFyIGU9dGhpcyxyPWsodGhpcyxGKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXt4KGUsRixlLmVkaXRvckRpdi5zdHlsZS5jb2xvcj10KX0sdW5kbzpmdW5jdGlvbigpe3goZSxGLGUuZWRpdG9yRGl2LnN0eWxlLmNvbG9yPXIpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIHEoKXt2YXIgdD10aGlzLmVkaXRvckRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVkaXRvckRpdi5pbm5lclRleHQ7dmFyIGUscj1bXSxuPXModCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1lLnZhbHVlO3IucHVzaChpLmlubmVyVGV4dC5yZXBsYWNlKC9cclxuP3xcbi8sIiIpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIuam9pbigiXG4iKX1mdW5jdGlvbiBIKCl7dmFyIHQsZT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxyPWVbMF0sbj1lWzFdO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXQ9dGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt2YXIgaT10aGlzLmN1cnJlbnRMYXllcixhPXRoaXMuZGl2LG89YS5zdHlsZS5kaXNwbGF5O2Euc3R5bGUuZGlzcGxheT0iaGlkZGVuIixpLmRpdi5hcHBlbmQodGhpcy5kaXYpLHQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhLnJlbW92ZSgpLGEuc3R5bGUuZGlzcGxheT1vfXRoaXMud2lkdGg9dC53aWR0aC9yLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0L259ZS5GcmVlVGV4dEVkaXRvcj1XLGIoVywiX2ZyZWVUZXh0RGVmYXVsdENvbnRlbnQiLCIiKSxiKFcsIl9sMTBuUHJvbWlzZSIsdm9pZCAwKSxiKFcsIl9pbnRlcm5hbFBhZGRpbmciLDApLGIoVywiX2RlZmF1bHRDb2xvciIsbnVsbCksYihXLCJfZGVmYXVsdEZvbnRTaXplIiwxMCksYihXLCJfa2V5Ym9hcmRNYW5hZ2VyIixuZXcgYS5LZXlib2FyZE1hbmFnZXIoW1tbImN0cmwrRW50ZXIiLCJtYWMrbWV0YStFbnRlciIsIkVzY2FwZSIsIm1hYytFc2NhcGUiXSxXLnByb3RvdHlwZS5jb21taXRPclJlbW92ZV1dKSksYihXLCJfdHlwZSIsImZyZWV0ZXh0Iil9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLklua0VkaXRvcj12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImZpdEN1cnZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5maXRDdXJ2ZX19KTt2YXIgaT1yKDEpLGE9cigxMzUpLG89cigxNTUpLHM9cigxMzYpO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWgodCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGYodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxoKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8aCh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaCh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZih0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2YodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGYodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYobj1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP2QoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXt3KHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpkKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSkpfXJldHVybiB0fWZ1bmN0aW9uIHYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEEobi5rZXkpLG4pfX1mdW5jdGlvbiB5KCl7cmV0dXJuIHk9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkmJm51bGwhPT0odD1iKHQpKTspO3JldHVybiB0fSh0LGUpO2lmKG4pe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKTtyZXR1cm4gaS5nZXQ/aS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/dDpyKTppLnZhbHVlfX0seS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbSh0LGUpfWZ1bmN0aW9uIGcodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGIodCl9ZnVuY3Rpb24gXyh0LGUpe1ModCxlKSxlLmFkZCh0KX1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4oZT1BKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIEEodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGsodCxlLHIpe1ModCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIFModCxlKXtpZihlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKHQhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgc3RhdGljIGFjY2VzcyBvZiB3cm9uZyBwcm92ZW5hbmNlIil9KHQsZSkscn1mdW5jdGlvbiBFKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LFQodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LFQodCxlLCJnZXQiKSl9ZnVuY3Rpb24gVCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBDKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfXZhciBPPTE2LEY9MTAwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha01hcCxEPW5ldyBXZWFrTWFwLE49bmV3IFdlYWtNYXAsVT1uZXcgV2Vha01hcCxXPW5ldyBXZWFrTWFwLEc9bmV3IFdlYWtNYXAsQj1uZXcgV2Vha01hcCxxPW5ldyBXZWFrTWFwLEg9bmV3IFdlYWtNYXAsej1uZXcgV2Vha01hcCxWPW5ldyBXZWFrU2V0LFg9bmV3IFdlYWtTZXQsWT1uZXcgV2Vha1NldCxLPW5ldyBXZWFrU2V0LEo9bmV3IFdlYWtTZXQsUT1uZXcgV2Vha1NldCwkPW5ldyBXZWFrU2V0LFo9bmV3IFdlYWtTZXQsdHQ9bmV3IFdlYWtTZXQsZXQ9bmV3IFdlYWtTZXQscnQ9bmV3IFdlYWtTZXQsbnQ9bmV3IFdlYWtTZXQsaXQ9bmV3IFdlYWtTZXQsYXQ9bmV3IFdlYWtTZXQsb3Q9bmV3IFdlYWtTZXQsc3Q9bmV3IFdlYWtTZXQsbHQ9bmV3IFdlYWtTZXQsdXQ9bmV3IFdlYWtTZXQsY3Q9bmV3IFdlYWtTZXQsaHQ9bmV3IFdlYWtTZXQsZnQ9bmV3IFdlYWtTZXQsZHQ9bmV3IFdlYWtTZXQscHQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJm0odCxlKX0oZCx0KTt2YXIgZSxyLG8scyxoLGY9KHM9ZCxoPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciB0LGU9YihzKTtpZihoKXt2YXIgcj1iKHRoaXMpLmNvbnN0cnVjdG9yO3Q9UmVmbGVjdC5jb25zdHJ1Y3QoZSxhcmd1bWVudHMscil9ZWxzZSB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW4oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGcodCl9KHRoaXMsdCl9KTtmdW5jdGlvbiBkKHQpe3ZhciBlO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGQpLF8oZyhlPWYuY2FsbCh0aGlzLHAocCh7fSx0KSx7fSx7bmFtZToiaW5rRWRpdG9yIn0pKSksZHQpLF8oZyhlKSxmdCksXyhnKGUpLGh0KSxfKGcoZSksY3QpLF8oZyhlKSx1dCksXyhnKGUpLGx0KSxfKGcoZSksc3QpLF8oZyhlKSxvdCksXyhnKGUpLGF0KSxfKGcoZSksaXQpLF8oZyhlKSxudCksXyhnKGUpLHJ0KSxfKGcoZSksZXQpLF8oZyhlKSx0dCksXyhnKGUpLFopLF8oZyhlKSwkKSxfKGcoZSksUSksXyhnKGUpLEopLF8oZyhlKSxLKSxfKGcoZSksWSksXyhnKGUpLFgpLF8oZyhlKSxWKSxrKGcoZSksTSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSxSLHt3cml0YWJsZTohMCx2YWx1ZTowfSksayhnKGUpLEkse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVybW92ZS5iaW5kKGcoZSkpfSksayhnKGUpLEwse3dyaXRhYmxlOiEwLHZhbHVlOmUuY2FudmFzUG9pbnRlcmxlYXZlLmJpbmQoZyhlKSl9KSxrKGcoZSksRCx7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVydXAuYmluZChnKGUpKX0pLGsoZyhlKSxOLHt3cml0YWJsZTohMCx2YWx1ZTplLmNhbnZhc1BvaW50ZXJkb3duLmJpbmQoZyhlKSl9KSxrKGcoZSksVSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksVyx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksRyx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGsoZyhlKSxCLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksayhnKGUpLHEse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksSCx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSx6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZS5jb2xvcj10LmNvbG9yfHxudWxsLGUudGhpY2tuZXNzPXQudGhpY2tuZXNzfHxudWxsLGUub3BhY2l0eT10Lm9wYWNpdHl8fG51bGwsZS5wYXRocz1bXSxlLmJlemllclBhdGgyRD1bXSxlLmN1cnJlbnRQYXRoPVtdLGUuc2NhbGVGYWN0b3I9MSxlLnRyYW5zbGF0aW9uWD1lLnRyYW5zbGF0aW9uWT0wLGUueD0wLGUueT0wLGV9cmV0dXJuIGU9ZCxvPVt7a2V5OiJpbml0aWFsaXplIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9sMTBuUHJvbWlzZT1uZXcgTWFwKFsiZWRpdG9yX2lua19jYW52YXNfYXJpYV9sYWJlbCIsImVkaXRvcl9pbmsyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSl9fSx7a2V5OiJ1cGRhdGVEZWZhdWx0UGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUzpkLl9kZWZhdWx0VGhpY2tuZXNzPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUjpkLl9kZWZhdWx0Q29sb3I9ZTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFk6ZC5fZGVmYXVsdE9wYWNpdHk9ZS8xMDB9fX0se2tleToiZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW1tpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1MsZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCpkLl9kZWZhdWx0T3BhY2l0eSldXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG49eShiKGQpLCJkZXNlcmlhbGl6ZSIsdGhpcykuY2FsbCh0aGlzLHQsZSxyKTtuLnRoaWNrbmVzcz10LnRoaWNrbmVzcyxuLmNvbG9yPWkuVXRpbC5tYWtlSGV4Q29sb3IuYXBwbHkoaS5VdGlsLHUodC5jb2xvcikpLG4ub3BhY2l0eT10Lm9wYWNpdHk7dmFyIGE9YyhuLnBhZ2VEaW1lbnNpb25zLDIpLG89YVswXSxzPWFbMV0saD1uLndpZHRoKm8sZj1uLmhlaWdodCpzLHA9bi5wYXJlbnRTY2FsZSx2PXQudGhpY2tuZXNzLzI7RShuLE0saC9mKSxFKG4sVSwhMCksRShuLHEsTWF0aC5yb3VuZChoKSksRShuLEgsTWF0aC5yb3VuZChmKSk7dmFyIG0sZz1sKHQucGF0aHMpO3RyeXtmb3IoZy5zKCk7IShtPWcubigpKS5kb25lOyl7dmFyIF89bS52YWx1ZS5iZXppZXIsdz1bXTtuLnBhdGhzLnB1c2godyk7Zm9yKHZhciBBPXAqKF9bMF0tdiksaz1wKihmLV9bMV0tdiksUz0yLFA9Xy5sZW5ndGg7UzxQO1MrPTYpe3ZhciBUPXAqKF9bU10tdiksRj1wKihmLV9bUysxXS12KSxqPXAqKF9bUysyXS12KSxMPXAqKGYtX1tTKzNdLXYpLEQ9cCooX1tTKzRdLXYpLE49cCooZi1fW1MrNV0tdik7dy5wdXNoKFtbQSxrXSxbVCxGXSxbaixMXSxbRCxOXV0pLEE9RCxrPU59dmFyIFc9eCh0aGlzLGQsT3QpLmNhbGwodGhpcyx3KTtuLmJlemllclBhdGgyRC5wdXNoKFcpfX1jYXRjaCh0KXtnLmUodCl9ZmluYWxseXtnLmYoKX12YXIgRz1DKG4sY3QsSXQpLmNhbGwobik7cmV0dXJuIEUobixJLE1hdGgubWF4KE8sR1syXS1HWzBdKSksRShuLFIsTWF0aC5tYXgoTyxHWzNdLUdbMV0pKSxDKG4sYXQsVHQpLmNhbGwobixoLGYpLG59fV0sKHI9W3trZXk6InVwZGF0ZVBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1M6Qyh0aGlzLFYsdnQpLmNhbGwodGhpcyxlKTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SOkModGhpcyxYLHl0KS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19PUEFDSVRZOkModGhpcyxZLG10KS5jYWxsKHRoaXMsZSl9fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm5bW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyx0aGlzLnRoaWNrbmVzc3x8ZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLHRoaXMuY29sb3J8fGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCoobnVsbCE9PSh0PXRoaXMub3BhY2l0eSkmJnZvaWQgMCE9PXQ/dDpkLl9kZWZhdWx0T3BhY2l0eSkpXV19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3koYihkLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5jYW52YXN8fChDKHRoaXMscnQseHQpLmNhbGwodGhpcyksQyh0aGlzLG50LEV0KS5jYWxsKHRoaXMpKSx0aGlzLmlzQXR0YWNoZWRUb0RPTXx8KHRoaXMucGFyZW50LmFkZCh0aGlzKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcykpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuY2FudmFzJiYodGhpcy5pc0VtcHR5KCl8fHRoaXMuY29tbWl0KCksdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMuaGVpZ2h0PTAsdGhpcy5jYW52YXMucmVtb3ZlKCksdGhpcy5jYW52YXM9bnVsbCxQKHRoaXMsQikuZGlzY29ubmVjdCgpLEUodGhpcyxCLG51bGwpLHkoYihkLnByb3RvdHlwZSksInJlbW92ZSIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJzZXRQYXJlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpeyF0aGlzLnBhcmVudCYmdD90aGlzLl91aU1hbmFnZXIucmVtb3ZlU2hvdWxkUmVzY2FsZSh0aGlzKTp0aGlzLnBhcmVudCYmbnVsbD09PXQmJnRoaXMuX3VpTWFuYWdlci5hZGRTaG91bGRSZXNjYWxlKHRoaXMpLHkoYihkLnByb3RvdHlwZSksInNldFBhcmVudCIsdGhpcykuY2FsbCh0aGlzLHQpfX0se2tleToib25TY2FsZUNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV0sbj10aGlzLndpZHRoKmUsaT10aGlzLmhlaWdodCpyO3RoaXMuc2V0RGltZW5zaW9ucyhuLGkpfX0se2tleToiZW5hYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7UCh0aGlzLFUpfHxudWxsPT09dGhpcy5jYW52YXN8fCh5KGIoZC5wcm90b3R5cGUpLCJlbmFibGVFZGl0TW9kZSIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6ImRpc2FibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpJiZudWxsIT09dGhpcy5jYW52YXMmJih5KGIoZC5wcm90b3R5cGUpLCJkaXNhYmxlRWRpdE1vZGUiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5kaXYuZHJhZ2dhYmxlPSF0aGlzLmlzRW1wdHkoKSx0aGlzLmRpdi5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0aW5nIiksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6Im9uY2VBZGRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpdi5kcmFnZ2FibGU9IXRoaXMuaXNFbXB0eSgpfX0se2tleToiaXNFbXB0eSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMucGF0aHMubGVuZ3RofHwxPT09dGhpcy5wYXRocy5sZW5ndGgmJjA9PT10aGlzLnBhdGhzWzBdLmxlbmd0aH19LHtrZXk6ImNvbW1pdCIsdmFsdWU6ZnVuY3Rpb24oKXtQKHRoaXMsVSl8fCh5KGIoZC5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5kaXNhYmxlRWRpdE1vZGUoKSx0aGlzLnNldEluRm9yZWdyb3VuZCgpLEUodGhpcyxVLCEwKSx0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJkaXNhYmxlZCIpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzLCEwKSx0aGlzLnBhcmVudC5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMCksdGhpcy5wYXJlbnQubW92ZUVkaXRvckluRE9NKHRoaXMpLHRoaXMuZGl2LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7eShiKGQucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHRoaXMuZW5hYmxlRWRpdE1vZGUoKX19LHtrZXk6ImNhbnZhc1BvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJiFQKHRoaXMsVSkmJih0aGlzLnNldEluRm9yZWdyb3VuZCgpLCJtb3VzZSIhPT10LnR5cGUmJnRoaXMuZGl2LmZvY3VzKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksQyh0aGlzLFEsX3QpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybW92ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSxDKHRoaXMsJCx3dCkuY2FsbCh0aGlzLHQub2Zmc2V0WCx0Lm9mZnNldFkpfX0se2tleToiY2FudmFzUG9pbnRlcnVwIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJjAhPT10aGlzLmN1cnJlbnRQYXRoLmxlbmd0aCYmKHQuc3RvcFByb3BhZ2F0aW9uKCksQyh0aGlzLGV0LFN0KS5jYWxsKHRoaXMsdCksdGhpcy5zZXRJbkJhY2tncm91bmQoKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybGVhdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe0ModGhpcyxldCxTdCkuY2FsbCh0aGlzLHQpLHRoaXMuc2V0SW5CYWNrZ3JvdW5kKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkseShiKGQucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLGQuX2wxMG5Qcm9taXNlLmdldCgiZWRpdG9yX2luazJfYXJpYV9sYWJlbCIpLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBudWxsPT09KGU9ci5kaXYpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCl9KSk7dmFyIG49YyhDKHRoaXMsSyxndCkuY2FsbCh0aGlzKSw0KSxpPW5bMF0sYT1uWzFdLG89blsyXSxzPW5bM107aWYodGhpcy5zZXRBdChpLGEsMCwwKSx0aGlzLnNldERpbXMobyxzKSxDKHRoaXMscnQseHQpLmNhbGwodGhpcyksdGhpcy53aWR0aCl7dmFyIGw9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMiksdT1sWzBdLGg9bFsxXTt0aGlzLnNldEF0KHQqdSxlKmgsdGhpcy53aWR0aCp1LHRoaXMuaGVpZ2h0KmgpLEUodGhpcyxXLCEwKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksdGhpcy5zZXREaW1zKHRoaXMud2lkdGgqdSx0aGlzLmhlaWdodCpoKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksQyh0aGlzLGR0LER0KS5jYWxsKHRoaXMpLHRoaXMuZGl2LmNsYXNzTGlzdC5hZGQoImRpc2FibGVkIil9ZWxzZSB0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJlZGl0aW5nIiksdGhpcy5lbmFibGVFZGl0TW9kZSgpO3JldHVybiBDKHRoaXMsbnQsRXQpLmNhbGwodGhpcyksdGhpcy5kaXZ9fSx7a2V5OiJzZXREaW1lbnNpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucm91bmQodCksbj1NYXRoLnJvdW5kKGUpO2lmKFAodGhpcyxxKSE9PXJ8fFAodGhpcyxIKSE9PW4pe0UodGhpcyxxLHIpLEUodGhpcyxILG4pLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsUCh0aGlzLE0pJiZNYXRoLmFicyhQKHRoaXMsTSktdC9lKT4uMDEmJihlPU1hdGguY2VpbCh0L1AodGhpcyxNKSksdGhpcy5zZXREaW1zKHQsZSkpO3ZhciBpPWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxvPWlbMV07dGhpcy53aWR0aD10L2EsdGhpcy5oZWlnaHQ9ZS9vLFAodGhpcyxVKSYmQyh0aGlzLGF0LFR0KS5jYWxsKHRoaXMsdCxlKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD10aGlzLmdldFJlY3QoMCwwKSxlPXRoaXMucm90YXRpb24lMTgwPT0wP3RbM10tdFsxXTp0WzJdLXRbMF0scj1hLkFubm90YXRpb25FZGl0b3IuX2NvbG9yTWFuYWdlci5jb252ZXJ0KHRoaXMuY3R4LnN0cm9rZVN0eWxlKTtyZXR1cm57YW5ub3RhdGlvblR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkssY29sb3I6cix0aGlja25lc3M6dGhpcy50aGlja25lc3Msb3BhY2l0eTp0aGlzLm9wYWNpdHkscGF0aHM6Qyh0aGlzLHN0LEZ0KS5jYWxsKHRoaXMsdGhpcy5zY2FsZUZhY3Rvci90aGlzLnBhcmVudFNjYWxlLHRoaXMudHJhbnNsYXRpb25YLHRoaXMudHJhbnNsYXRpb25ZLGUpLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxyZWN0OnQscm90YXRpb246dGhpcy5yb3RhdGlvbn19fV0pJiZ2KGUucHJvdG90eXBlLHIpLG8mJnYoZSxvKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxkfShhLkFubm90YXRpb25FZGl0b3IpO2Z1bmN0aW9uIHZ0KHQpe3ZhciBlPXRoaXMscj10aGlzLnRoaWNrbmVzczt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLnRoaWNrbmVzcz10LEMoZSxmdCxMdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UudGhpY2tuZXNzPXIsQyhlLGZ0LEx0KS5jYWxsKGUpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24geXQodCl7dmFyIGU9dGhpcyxyPXRoaXMuY29sb3I7dGhpcy5hZGRDb21tYW5kcyh7Y21kOmZ1bmN0aW9uKCl7ZS5jb2xvcj10LEMoZSx0dCxrdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UuY29sb3I9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIG10KHQpe3ZhciBlPXRoaXM7dC89MTAwO3ZhciByPXRoaXMub3BhY2l0eTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLm9wYWNpdHk9dCxDKGUsdHQsa3QpLmNhbGwoZSl9LHVuZG86ZnVuY3Rpb24oKXtlLm9wYWNpdHk9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24gZ3QoKXt2YXIgdD10aGlzLnBhcmVudFJvdGF0aW9uLGU9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscj1lWzBdLG49ZVsxXTtzd2l0Y2godCl7Y2FzZSA5MDpyZXR1cm5bMCxuLG4scl07Y2FzZSAxODA6cmV0dXJuW3IsbixyLG5dO2Nhc2UgMjcwOnJldHVybltyLDAsbixyXTtkZWZhdWx0OnJldHVyblswLDAscixuXX19ZnVuY3Rpb24gYnQoKXt2YXIgdD10aGlzLmN0eCxlPXRoaXMuY29sb3Iscj10aGlzLm9wYWNpdHksbj10aGlzLnRoaWNrbmVzcyxpPXRoaXMucGFyZW50U2NhbGUsYT10aGlzLnNjYWxlRmFjdG9yO3QubGluZVdpZHRoPW4qaS9hLHQubGluZUNhcD0icm91bmQiLHQubGluZUpvaW49InJvdW5kIix0Lm1pdGVyTGltaXQ9MTAsdC5zdHJva2VTdHlsZT0iIi5jb25jYXQoZSkuY29uY2F0KCgwLHMub3BhY2l0eVRvSGV4KShyKSl9ZnVuY3Rpb24gX3QodCxlKXt2YXIgcixuPXRoaXM7dGhpcy5pc0VkaXRpbmc9ITAsUCh0aGlzLFcpfHwoRSh0aGlzLFcsITApLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSx0aGlzLnRoaWNrbmVzc3x8KHRoaXMudGhpY2tuZXNzPXB0Ll9kZWZhdWx0VGhpY2tuZXNzKSx0aGlzLmNvbG9yfHwodGhpcy5jb2xvcj1wdC5fZGVmYXVsdENvbG9yfHxhLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLG51bGwhPT0ocj10aGlzLm9wYWNpdHkpJiZ2b2lkIDAhPT1yfHwodGhpcy5vcGFjaXR5PXB0Ll9kZWZhdWx0T3BhY2l0eSkpLHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsbnVsbCksQyh0aGlzLEosYnQpLmNhbGwodGhpcyksdGhpcy5jdHguYmVnaW5QYXRoKCksdGhpcy5jdHgubW92ZVRvKHQsZSksRSh0aGlzLHosKGZ1bmN0aW9uKCl7dmFyIHQ7UChuLHopJiYoUChuLEcpJiYobi5pc0VtcHR5KCk/KG4uY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksbi5jdHguY2xlYXJSZWN0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpKTpDKG4sdHQsa3QpLmNhbGwobiksKHQ9bi5jdHgpLmxpbmVUby5hcHBseSh0LHUoUChuLEcpKSksRShuLEcsbnVsbCksbi5jdHguc3Ryb2tlKCkpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUChuLHopKSl9KSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShQKHRoaXMseikpfWZ1bmN0aW9uIHd0KHQsZSl7dmFyIHI9Yyh0aGlzLmN1cnJlbnRQYXRoLmF0KC0xKSwyKSxuPXJbMF0saT1yWzFdO3Q9PT1uJiZlPT09aXx8KHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsW3QsZV0pKX1mdW5jdGlvbiBBdCh0LGUpe3ZhciByPXRoaXM7dGhpcy5jdHguY2xvc2VQYXRoKCksRSh0aGlzLHosbnVsbCksdD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuY2FudmFzLndpZHRoKSxlPU1hdGgubWluKE1hdGgubWF4KGUsMCksdGhpcy5jYW52YXMuaGVpZ2h0KTt2YXIgbixpPWModGhpcy5jdXJyZW50UGF0aC5hdCgtMSksMiksYT1pWzBdLHM9aVsxXTtpZih0PT09YSYmZT09PXN8fHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksMSE9PXRoaXMuY3VycmVudFBhdGgubGVuZ3RoKW49KDAsby5maXRDdXJ2ZSkodGhpcy5jdXJyZW50UGF0aCwzMCxudWxsKTtlbHNle3ZhciBsPVt0LGVdO249W1tsLGwuc2xpY2UoKSxsLnNsaWNlKCksbF1dfXZhciB1PXgocHQscHQsT3QpLmNhbGwocHQsbik7dGhpcy5jdXJyZW50UGF0aC5sZW5ndGg9MCx0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyLnBhdGhzLnB1c2gobiksci5iZXppZXJQYXRoMkQucHVzaCh1KSxyLnJlYnVpbGQoKX0sdW5kbzpmdW5jdGlvbigpe3IucGF0aHMucG9wKCksci5iZXppZXJQYXRoMkQucG9wKCksMD09PXIucGF0aHMubGVuZ3RoP3IucmVtb3ZlKCk6KHIuY2FudmFzfHwoQyhyLHJ0LHh0KS5jYWxsKHIpLEMocixudCxFdCkuY2FsbChyKSksQyhyLGZ0LEx0KS5jYWxsKHIpKX0sbXVzdEV4ZWM6ITB9KX1mdW5jdGlvbiBrdCgpe2lmKHRoaXMuaXNFbXB0eSgpKUModGhpcyxvdCxDdCkuY2FsbCh0aGlzKTtlbHNle0ModGhpcyxKLGJ0KS5jYWxsKHRoaXMpO3ZhciB0PXRoaXMuY2FudmFzLGU9dGhpcy5jdHg7ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGUuY2xlYXJSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyk7dmFyIHIsbj1sKHRoaXMuYmV6aWVyUGF0aDJEKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zdHJva2UoaSl9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfX19ZnVuY3Rpb24gU3QodCl7Qyh0aGlzLFosQXQpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSx0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksdGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9ZnVuY3Rpb24geHQoKXt2YXIgdD10aGlzO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD0wLHRoaXMuY2FudmFzLmNsYXNzTmFtZT0iaW5rRWRpdG9yQ2FudmFzIixwdC5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfaW5rX2NhbnZhc19hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj10LmNhbnZhcyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX0pKSx0aGlzLmRpdi5hcHBlbmQodGhpcy5jYW52YXMpLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIil9ZnVuY3Rpb24gRXQoKXt2YXIgdD10aGlzLGU9bnVsbDtFKHRoaXMsQixuZXcgUmVzaXplT2JzZXJ2ZXIoKGZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uY29udGVudFJlY3Q7bi53aWR0aCYmbi5oZWlnaHQmJihudWxsIT09ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmZpeERpbXMoKSxlPW51bGx9KSxGKSx0LnNldERpbWVuc2lvbnMobi53aWR0aCxuLmhlaWdodCkpfSkpKSxQKHRoaXMsQikub2JzZXJ2ZSh0aGlzLmRpdil9ZnVuY3Rpb24gUHQoKXtpZihQKHRoaXMsVykpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV07dGhpcy5jYW52YXMud2lkdGg9TWF0aC5jZWlsKHRoaXMud2lkdGgqZSksdGhpcy5jYW52YXMuaGVpZ2h0PU1hdGguY2VpbCh0aGlzLmhlaWdodCpyKSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyl9fWZ1bmN0aW9uIFR0KHQsZSl7dmFyIHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpLG49KHQtcikvUCh0aGlzLEkpLGk9KGUtcikvUCh0aGlzLFIpO3RoaXMuc2NhbGVGYWN0b3I9TWF0aC5taW4obixpKX1mdW5jdGlvbiBDdCgpe3ZhciB0PUModGhpcyxodCxqdCkuY2FsbCh0aGlzKS8yO3RoaXMuY3R4LnNldFRyYW5zZm9ybSh0aGlzLnNjYWxlRmFjdG9yLDAsMCx0aGlzLnNjYWxlRmFjdG9yLHRoaXMudHJhbnNsYXRpb25YKnRoaXMuc2NhbGVGYWN0b3IrdCx0aGlzLnRyYW5zbGF0aW9uWSp0aGlzLnNjYWxlRmFjdG9yK3QpfWZ1bmN0aW9uIE90KHQpe2Zvcih2YXIgZT1uZXcgUGF0aDJELHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe3ZhciBpPWModFtyXSw0KSxhPWlbMF0sbz1pWzFdLHM9aVsyXSxsPWlbM107MD09PXImJmUubW92ZVRvLmFwcGx5KGUsdShhKSksZS5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX1yZXR1cm4gZX1mdW5jdGlvbiBGdCh0LGUscixuKXt2YXIgaSxhLG8scz1bXSx1PXRoaXMudGhpY2tuZXNzLzIsaD1sKHRoaXMucGF0aHMpO3RyeXtmb3IoaC5zKCk7IShvPWgubigpKS5kb25lOyl7dmFyIGY9by52YWx1ZTtpPVtdLGE9W107Zm9yKHZhciBkPTAscD1mLmxlbmd0aDtkPHA7ZCsrKXt2YXIgdj1jKGZbZF0sNCkseT12WzBdLG09dlsxXSxnPXZbMl0sYj12WzNdLF89dCooeVswXStlKSt1LHc9bi10Kih5WzFdK3IpLXUsQT10KihtWzBdK2UpK3Usaz1uLXQqKG1bMV0rciktdSxTPXQqKGdbMF0rZSkrdSx4PW4tdCooZ1sxXStyKS11LEU9dCooYlswXStlKSt1LFA9bi10KihiWzFdK3IpLXU7MD09PWQmJihpLnB1c2goXyx3KSxhLnB1c2goXyx3KSksaS5wdXNoKEEsayxTLHgsRSxQKSxDKHRoaXMsbHQsTXQpLmNhbGwodGhpcyxfLHcsQSxrLFMseCxFLFAsNCxhKX1zLnB1c2goe2JlemllcjppLHBvaW50czphfSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiBzfWZ1bmN0aW9uIE10KHQsZSxyLG4saSxhLG8scyxsLHUpe2lmKEModGhpcyx1dCxSdCkuY2FsbCh0aGlzLHQsZSxyLG4saSxhLG8scykpdS5wdXNoKG8scyk7ZWxzZXtmb3IodmFyIGM9MTtjPGwtMTtjKyspe3ZhciBoPWMvbCxmPTEtaCxkPWgqdCtmKnIscD1oKmUrZipuLHY9aCpyK2YqaSx5PWgqbitmKmE7ZD1oKihkPWgqZCtmKnYpK2YqKHY9aCp2K2YqKGgqaStmKm8pKSxwPWgqKHA9aCpwK2YqeSkrZiooeT1oKnkrZiooaCphK2YqcykpLHUucHVzaChkLHApfXUucHVzaChvLHMpfX1mdW5jdGlvbiBSdCh0LGUscixuLGksYSxvLHMpe3ZhciBsPU1hdGgucG93KDMqci0yKnQtbywyKSx1PU1hdGgucG93KDMqbi0yKmUtcywyKSxjPU1hdGgucG93KDMqaS10LTIqbywyKSxoPU1hdGgucG93KDMqYS1lLTIqcywyKTtyZXR1cm4gTWF0aC5tYXgobCxjKStNYXRoLm1heCh1LGgpPD0xMH1mdW5jdGlvbiBJdCgpe3ZhciB0LGU9MS8wLHI9LTEvMCxuPTEvMCxhPS0xLzAsbz1sKHRoaXMucGF0aHMpO3RyeXtmb3Ioby5zKCk7ISh0PW8ubigpKS5kb25lOyl7dmFyIHMsaD1sKHQudmFsdWUpO3RyeXtmb3IoaC5zKCk7IShzPWgubigpKS5kb25lOyl7dmFyIGY9YyhzLnZhbHVlLDQpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWkuVXRpbC5iZXppZXJCb3VuZGluZ0JveC5hcHBseShpLlV0aWwsdShkKS5jb25jYXQodShwKSx1KHYpLHUoeSkpKTtlPU1hdGgubWluKGUsbVswXSksbj1NYXRoLm1pbihuLG1bMV0pLHI9TWF0aC5tYXgocixtWzJdKSxhPU1hdGgubWF4KGEsbVszXSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9cmV0dXJuW2UsbixyLGFdfWZ1bmN0aW9uIGp0KCl7cmV0dXJuIFAodGhpcyxVKT9NYXRoLmNlaWwodGhpcy50aGlja25lc3MqdGhpcy5wYXJlbnRTY2FsZSk6MH1mdW5jdGlvbiBMdCgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMuaXNFbXB0eSgpKWlmKFAodGhpcyxVKSl7dmFyIGU9Qyh0aGlzLGN0LEl0KS5jYWxsKHRoaXMpLHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpO0UodGhpcyxJLE1hdGgubWF4KE8sZVsyXS1lWzBdKSksRSh0aGlzLFIsTWF0aC5tYXgoTyxlWzNdLWVbMV0pKTt2YXIgbj1NYXRoLmNlaWwocitQKHRoaXMsSSkqdGhpcy5zY2FsZUZhY3RvciksaT1NYXRoLmNlaWwocitQKHRoaXMsUikqdGhpcy5zY2FsZUZhY3RvciksYT1jKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWFbMF0scz1hWzFdO3RoaXMud2lkdGg9bi9vLHRoaXMuaGVpZ2h0PWkvcyxFKHRoaXMsTSxuL2kpLEModGhpcyxkdCxEdCkuY2FsbCh0aGlzKTt2YXIgbD10aGlzLnRyYW5zbGF0aW9uWCx1PXRoaXMudHJhbnNsYXRpb25ZO3RoaXMudHJhbnNsYXRpb25YPS1lWzBdLHRoaXMudHJhbnNsYXRpb25ZPS1lWzFdLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksRSh0aGlzLHEsbiksRSh0aGlzLEgsaSksdGhpcy5zZXREaW1zKG4saSk7dmFyIGg9dD9yL3RoaXMuc2NhbGVGYWN0b3IvMjowO3RoaXMudHJhbnNsYXRlKGwtdGhpcy50cmFuc2xhdGlvblgtaCx1LXRoaXMudHJhbnNsYXRpb25ZLWgpfWVsc2UgQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpfWZ1bmN0aW9uIER0KCl7dmFyIHQ9dGhpcy5kaXYuc3R5bGU7UCh0aGlzLE0pPj0xPyh0Lm1pbkhlaWdodD0iIi5jb25jYXQoTywicHgiKSx0Lm1pbldpZHRoPSIiLmNvbmNhdChNYXRoLnJvdW5kKFAodGhpcyxNKSpPKSwicHgiKSk6KHQubWluV2lkdGg9IiIuY29uY2F0KE8sInB4IiksdC5taW5IZWlnaHQ9IiIuY29uY2F0KE1hdGgucm91bmQoTy9QKHRoaXMsTSkpLCJweCIpKX1lLklua0VkaXRvcj1wdCx3KHB0LCJfZGVmYXVsdENvbG9yIixudWxsKSx3KHB0LCJfZGVmYXVsdE9wYWNpdHkiLDEpLHcocHQsIl9kZWZhdWx0VGhpY2tuZXNzIiwxKSx3KHB0LCJfbDEwblByb21pc2UiLHZvaWQgMCksdyhwdCwiX3R5cGUiLCJpbmsiKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmZpdEN1cnZlPXZvaWQgMDt2YXIgbj1yKDE1Nik7ZS5maXRDdXJ2ZT1ufSx0PT57ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sZSh0KX1mdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbih0LHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQscil7aWYoIm9iamVjdCIhPT1lKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZShpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PWUoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBlJiZuKHQucHJvdG90eXBlLGUpLHImJm4odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8byh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIG8scyxoLGYsZCxwLHksbSxnLGIsXyx3LEE7aWYoMj09PXQubGVuZ3RoKXJldHVybiB3PXYudmVjdG9yTGVuKHYuc3VidHJhY3QodFswXSx0WzFdKSkvMyxbbz1bdFswXSx2LmFkZEFycmF5cyh0WzBdLHYubXVsSXRlbXMoZSx3KSksdi5hZGRBcnJheXModFsxXSx2Lm11bEl0ZW1zKHIsdykpLHRbMV1dXTtzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7ZT1hP3Irdi52ZWN0b3JMZW4odi5zdWJ0cmFjdCh0LG4pKTowLGkucHVzaChlKSxyPWUsbj10fSkpLGk9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L3J9KSl9KHQpO3ZhciBrPWEodSh0LHMscyxlLHIsaSksMyk7aWYobz1rWzBdLGY9a1sxXSxwPWtbMl0sMD09PWZ8fGY8bilyZXR1cm5bb107aWYoZjxuKm4pZm9yKGg9cyxkPWYseT1wLEE9MDtBPDIwO0ErKyl7dmFyIFM9YSh1KHQscyxoPWMobyx0LGgpLGUscixpKSwzKTtpZihvPVNbMF0sZj1TWzFdLHA9U1syXSxmPG4pcmV0dXJuW29dO2lmKHA9PT15KXt2YXIgeD1mL2Q7aWYoeD4uOTk5OSYmeDwxLjAwMDEpYnJlYWt9ZD1mLHk9cH1pZihfPVtdLChtPXYuc3VidHJhY3QodFtwLTFdLHRbcCsxXSkpLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR9KSkpe3ZhciBFPVstKG09di5zdWJ0cmFjdCh0W3AtMV0sdFtwXSkpWzFdLG1bMF1dO21bMF09RVswXSxtWzFdPUVbMV19cmV0dXJuIGc9di5ub3JtYWxpemUobSksYj12Lm11bEl0ZW1zKGcsLTEpLChfPV8uY29uY2F0KGwodC5zbGljZSgwLHArMSksZSxnLG4saSkpKS5jb25jYXQobCh0LnNsaWNlKHApLGIscixuLGkpKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxvKXt2YXIgcyxsLHU7cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZCxwLG0sZyxiLF8sdyxBLGs9dFswXSxTPXRbdC5sZW5ndGgtMV07Zm9yKGk9W2ssbnVsbCxudWxsLFNdLGE9di56ZXJvc19YeDJ4MihlLmxlbmd0aCksZz0wLGI9ZS5sZW5ndGg7ZzxiO2crKylBPTEtKHc9ZVtnXSksKG89YVtnXSlbMF09di5tdWxJdGVtcyhyLDMqdyooQSpBKSksb1sxXT12Lm11bEl0ZW1zKG4sMypBKih3KncpKTtmb3Iocz1bWzAsMF0sWzAsMF1dLGw9WzAsMF0sZz0wLGI9dC5sZW5ndGg7ZzxiO2crKyl3PWVbZ10sbz1hW2ddLHNbMF1bMF0rPXYuZG90KG9bMF0sb1swXSksc1swXVsxXSs9di5kb3Qob1swXSxvWzFdKSxzWzFdWzBdKz12LmRvdChvWzBdLG9bMV0pLHNbMV1bMV0rPXYuZG90KG9bMV0sb1sxXSksXz12LnN1YnRyYWN0KHRbZ10seS5xKFtrLGssUyxTXSx3KSksbFswXSs9di5kb3Qob1swXSxfKSxsWzFdKz12LmRvdChvWzFdLF8pO3JldHVybiB1PXNbMF1bMF0qc1sxXVsxXS1zWzFdWzBdKnNbMF1bMV0sYz1zWzBdWzBdKmxbMV0tc1sxXVswXSpsWzBdLGg9bFswXSpzWzFdWzFdLWxbMV0qc1swXVsxXSxkPTA9PT11PzA6Yy91LChmPTA9PT11PzA6aC91KTwocD0xZS02KihtPXYudmVjdG9yTGVuKHYuc3VidHJhY3QoayxTKSkpKXx8ZDxwPyhpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLG0vMykpLGlbMl09di5hZGRBcnJheXMoUyx2Lm11bEl0ZW1zKG4sbS8zKSkpOihpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLGYpKSxpWzJdPXYuYWRkQXJyYXlzKFMsdi5tdWxJdGVtcyhuLGQpKSksaX0odCxyLG4saSk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCx1LGM7aT0wLGE9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKTt2YXIgaD1mKGUsMTApO2ZvcihzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXU9dFtzXSxjPWQoMCxyW3NdLGgsMTApLChuPShvPXYuc3VidHJhY3QoeS5xKGUsYyksdSkpWzBdKm9bMF0rb1sxXSpvWzFdKT5pJiYoaT1uLGE9cyk7cmV0dXJuW2ksYV19KHQscyxlKSxoPWEoYywyKTtyZXR1cm4gbD1oWzBdLHU9aFsxXSxvJiZvKHtiZXo6cyxwb2ludHM6dCxwYXJhbXM6ZSxtYXhFcnI6bCxtYXhQb2ludDp1fSksW3MsbCx1XX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGgodCxlW25dLHIpfSkpfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXYuc3VidHJhY3QoeS5xKHQsciksZSksaT15LnFwcmltZSh0LHIpLGE9di5tdWxNYXRyaXgobixpKSxvPXYuc3VtKHYuc3F1YXJlSXRlbXMoaSkpKzIqdi5tdWxNYXRyaXgobix5LnFwcmltZXByaW1lKHQscikpO3JldHVybiAwPT09bz9yOnItYS9vfXZhciBmPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49WzBdLGk9dFswXSxhPTAsbz0xO288PWU7bysrKXI9eS5xKHQsby9lKSxhKz12LnZlY3Rvckxlbih2LnN1YnRyYWN0KHIsaSkpLG4ucHVzaChhKSxpPXI7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9hfSkpfTtmdW5jdGlvbiBkKHQsZSxyLG4pe2lmKGU8MClyZXR1cm4gMDtpZihlPjEpcmV0dXJuIDE7Zm9yKHZhciBpLGEsbyxzLGw9MTtsPD1uO2wrKylpZihlPD1yW2xdKXtvPShsLTEpL24sYT1sL24scz0oZS0oaT1yW2wtMV0pKS8ocltsXS1pKSooYS1vKStvO2JyZWFrfXJldHVybiBzfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdi5ub3JtYWxpemUodi5zdWJ0cmFjdCh0LGUpKX12YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyKHRoaXMsdCl9cmV0dXJuIGkodCxudWxsLFt7a2V5OiJ6ZXJvc19YeDJ4MiIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3QtLTspZS5wdXNoKFswLDBdKTtyZXR1cm4gZX19LHtrZXk6Im11bEl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pKX19LHtrZXk6Im11bE1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdCtyKmVbbl19KSwwKX19LHtrZXk6InN1YnRyYWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC1lW3JdfSkpfX0se2tleToiYWRkQXJyYXlzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlW3JdfSkpfX0se2tleToiYWRkSXRlbXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdCtlfSkpfX0se2tleToic3VtIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKX19LHtrZXk6ImRvdCIsdmFsdWU6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5tdWxNYXRyaXgoZSxyKX19LHtrZXk6InZlY3RvckxlbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguaHlwb3QuYXBwbHkoTWF0aCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBzKHQpfShlPXQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KGUpfHxvKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKTt2YXIgZX19LHtrZXk6ImRpdkl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQvZX0pKX19LHtrZXk6InNxdWFyZUl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KnR9KSl9fSx7a2V5OiJub3JtYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdkl0ZW1zKHQsdGhpcy52ZWN0b3JMZW4odCkpfX1dKSx0fSgpLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cih0aGlzLHQpfXJldHVybiBpKHQsbnVsbCxbe2tleToicSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHRbMF0scipyKnIpLGk9di5tdWxJdGVtcyh0WzFdLDMqcipyKmUpLGE9di5tdWxJdGVtcyh0WzJdLDMqciplKmUpLG89di5tdWxJdGVtcyh0WzNdLGUqZSplKTtyZXR1cm4gdi5hZGRBcnJheXModi5hZGRBcnJheXMobixpKSx2LmFkZEFycmF5cyhhLG8pKX19LHtrZXk6InFwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsxXSx0WzBdKSwzKnIqciksaT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsyXSx0WzFdKSw2KnIqZSksYT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFszXSx0WzJdKSwzKmUqZSk7cmV0dXJuIHYuYWRkQXJyYXlzKHYuYWRkQXJyYXlzKG4saSksYSl9fSx7a2V5OiJxcHJpbWVwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5hZGRBcnJheXModi5tdWxJdGVtcyh2LmFkZEFycmF5cyh2LnN1YnRyYWN0KHRbMl0sdi5tdWxJdGVtcyh0WzFdLDIpKSx0WzBdKSw2KigxLWUpKSx2Lm11bEl0ZW1zKHYuYWRkQXJyYXlzKHYuc3VidHJhY3QodFszXSx2Lm11bEl0ZW1zKHRbMl0sMikpLHRbMV0pLDYqZSkpfX1dKSx0fSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7aWYodC5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighQXJyYXkuaXNBcnJheShlKXx8ZS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHR9KSl8fGUubGVuZ3RoIT09dFswXS5sZW5ndGgpdGhyb3cgRXJyb3IoIkVhY2ggcG9pbnQgc2hvdWxkIGJlIGFuIGFycmF5IG9mIG51bWJlcnMuIEVhY2ggcG9pbnQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgYW1vdW50IG9mIG51bWJlcnMuIil9KSksKHQ9dC5maWx0ZXIoKGZ1bmN0aW9uKGUscil7cmV0dXJuIDA9PT1yfHwhZS5ldmVyeSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PXRbci0xXVtuXX0pKX0pKSkubGVuZ3RoPDIpcmV0dXJuW107dmFyIG49dC5sZW5ndGgsaT1wKHRbMV0sdFswXSksYT1wKHRbbi0yXSx0W24tMV0pO3JldHVybiBsKHQsaSxhLGUscil9LHQuZXhwb3J0cy5maXRDdWJpYz1sLHQuZXhwb3J0cy5jcmVhdGVUYW5nZW50PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uTGF5ZXI9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDEzNCksbz1yKDE1OCkscz1yKDE1OSk7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX0odCxlKSxyfWZ1bmN0aW9uIHUoKXtyZXR1cm4gdT0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PXYodCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB3KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Xyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj12KHQpO2lmKGUpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09QShlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gcCh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sdih0KX1mdW5jdGlvbiB5KHQsZSl7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBtKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPV8odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8Xyh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gXyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3codCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHcodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe3JldHVybiBBPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxBKHQpfWZ1bmN0aW9uIGsodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBTKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxFKG4ua2V5KSxuKX19ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIGUmJlModC5wcm90b3R5cGUsZSksciYmUyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gRSh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09QSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PUEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PUEoZSk/ZTpTdHJpbmcoZSl9dmFyIFA9MWUzLFQ9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gQyh0KXtyZXR1cm57d2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19fXZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2sodGhpcyx0KX1yZXR1cm4geCh0LG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuZGF0YS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBuLkFubm90YXRpb25UeXBlLkxJTks6cmV0dXJuIG5ldyBJKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5URVhUOnJldHVybiBuZXcgVyh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuV0lER0VUOnN3aXRjaCh0LmRhdGEuZmllbGRUeXBlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IEIodCk7Y2FzZSJCdG4iOnJldHVybiB0LmRhdGEucmFkaW9CdXR0b24/bmV3IEgodCk6dC5kYXRhLmNoZWNrQm94P25ldyBxKHQpOm5ldyB6KHQpO2Nhc2UiQ2giOnJldHVybiBuZXcgVih0KX1yZXR1cm4gbmV3IEcodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlBPUFVQOnJldHVybiBuZXcgWCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBLKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5MSU5FOnJldHVybiBuZXcgSih0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuU1FVQVJFOnJldHVybiBuZXcgUSh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOnJldHVybiBuZXcgJCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU6cmV0dXJuIG5ldyBaKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5DQVJFVDpyZXR1cm4gbmV3IGV0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5JTks6cmV0dXJuIG5ldyBydCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUdPTjpyZXR1cm4gbmV3IHR0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6cmV0dXJuIG5ldyBudCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOnJldHVybiBuZXcgaXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNRVUlHR0xZOnJldHVybiBuZXcgYXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDpyZXR1cm4gbmV3IG90KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5TVEFNUDpyZXR1cm4gbmV3IHN0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDpyZXR1cm4gbmV3IGx0KHQpO2RlZmF1bHQ6cmV0dXJuIG5ldyBGKHQpfX19XSksdH0oKSxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1yLmlzUmVuZGVyYWJsZSxpPXZvaWQgMCE9PW4mJm4sYT1yLmlnbm9yZUJvcmRlcixvPXZvaWQgMCE9PWEmJmEscz1yLmNyZWF0ZVF1YWRyaWxhdGVyYWxzLGw9dm9pZCAwIT09cyYmcztrKHRoaXMsdCksdGhpcy5pc1JlbmRlcmFibGU9aSx0aGlzLmRhdGE9ZS5kYXRhLHRoaXMubGF5ZXI9ZS5sYXllcix0aGlzLnBhZ2U9ZS5wYWdlLHRoaXMudmlld3BvcnQ9ZS52aWV3cG9ydCx0aGlzLmxpbmtTZXJ2aWNlPWUubGlua1NlcnZpY2UsdGhpcy5kb3dubG9hZE1hbmFnZXI9ZS5kb3dubG9hZE1hbmFnZXIsdGhpcy5pbWFnZVJlc291cmNlc1BhdGg9ZS5pbWFnZVJlc291cmNlc1BhdGgsdGhpcy5yZW5kZXJGb3Jtcz1lLnJlbmRlckZvcm1zLHRoaXMuc3ZnRmFjdG9yeT1lLnN2Z0ZhY3RvcnksdGhpcy5hbm5vdGF0aW9uU3RvcmFnZT1lLmFubm90YXRpb25TdG9yYWdlLHRoaXMuZW5hYmxlU2NyaXB0aW5nPWUuZW5hYmxlU2NyaXB0aW5nLHRoaXMuaGFzSlNBY3Rpb25zPWUuaGFzSlNBY3Rpb25zLHRoaXMuX2ZpZWxkT2JqZWN0cz1lLmZpZWxkT2JqZWN0cyxpJiYodGhpcy5jb250YWluZXI9dGhpcy5fY3JlYXRlQ29udGFpbmVyKG8pKSxsJiYodGhpcy5xdWFkcmlsYXRlcmFscz10aGlzLl9jcmVhdGVRdWFkcmlsYXRlcmFscyhvKSl9cmV0dXJuIHgodCxbe2tleToiX2NyZWF0ZUNvbnRhaW5lciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGU9dGhpcy5kYXRhLHI9dGhpcy5wYWdlLGk9dGhpcy52aWV3cG9ydCxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iKTthLnNldEF0dHJpYnV0ZSgiZGF0YS1hbm5vdGF0aW9uLWlkIixlLmlkKTt2YXIgbz1pLnJhd0RpbXMscz1vLnBhZ2VXaWR0aCxsPW8ucGFnZUhlaWdodCx1PW8ucGFnZVgsYz1vLnBhZ2VZLGg9QyhlLnJlY3QpLGY9aC53aWR0aCxkPWguaGVpZ2h0LHA9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2UucmVjdFswXSxyLnZpZXdbM10tZS5yZWN0WzFdK3Iudmlld1sxXSxlLnJlY3RbMl0sci52aWV3WzNdLWUucmVjdFszXStyLnZpZXdbMV1dKTtpZighdCYmZS5ib3JkZXJTdHlsZS53aWR0aD4wKXthLnN0eWxlLmJvcmRlcldpZHRoPSIiLmNvbmNhdChlLmJvcmRlclN0eWxlLndpZHRoLCJweCIpO3ZhciB2PWUuYm9yZGVyU3R5bGUuaG9yaXpvbnRhbENvcm5lclJhZGl1cyx5PWUuYm9yZGVyU3R5bGUudmVydGljYWxDb3JuZXJSYWRpdXM7aWYodj4wfHx5PjApe3ZhciBtPSJjYWxjKCIuY29uY2F0KHYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkgLyBjYWxjKCIpLmNvbmNhdCh5LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIik7YS5zdHlsZS5ib3JkZXJSYWRpdXM9bX1lbHNlIGlmKHRoaXMgaW5zdGFuY2VvZiBIKXt2YXIgZz0iY2FsYygiLmNvbmNhdChmLCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIC8gY2FsYygiKS5jb25jYXQoZCwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpO2Euc3R5bGUuYm9yZGVyUmFkaXVzPWd9c3dpdGNoKGUuYm9yZGVyU3R5bGUuc3R5bGUpe2Nhc2Ugbi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOmEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ6YS5zdHlsZS5ib3JkZXJTdHlsZT0iZGFzaGVkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEOigwLG4ud2FybikoIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBiZXZlbGVkIik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ6KDAsbi53YXJuKSgiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGluc2V0Iik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOmEuc3R5bGUuYm9yZGVyQm90dG9tU3R5bGU9InNvbGlkIn12YXIgYj1lLmJvcmRlckNvbG9yfHxudWxsO2I/YS5zdHlsZS5ib3JkZXJDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8YlswXSwwfGJbMV0sMHxiWzJdKTphLnN0eWxlLmJvcmRlcldpZHRoPTB9YS5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqKHBbMF0tdSkvcywiJSIpLGEuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqKHBbMV0tYykvbCwiJSIpO3ZhciBfPWUucm90YXRpb247cmV0dXJuIGUuaGFzT3duQ2FudmFzfHwwPT09Xz8oYS5zdHlsZS53aWR0aD0iIi5jb25jYXQoMTAwKmYvcywiJSIpLGEuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZC9sLCIlIikpOnRoaXMuc2V0Um90YXRpb24oXyxhKSxhfX0se2tleToic2V0Um90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5jb250YWluZXIsaT10aGlzLnZpZXdwb3J0LnJhd0RpbXMsYT1pLnBhZ2VXaWR0aCxvPWkucGFnZUhlaWdodCxzPUModGhpcy5kYXRhLnJlY3QpLGw9cy53aWR0aCx1PXMuaGVpZ2h0O3QlMTgwPT0wPyhlPTEwMCpsL2Escj0xMDAqdS9vKTooZT0xMDAqdS9hLHI9MTAwKmwvbyksbi5zdHlsZS53aWR0aD0iIi5jb25jYXQoZSwiJSIpLG4uc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChyLCIlIiksbi5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsKDM2MC10KSUzNjApfX0se2tleToiX2NvbW1vbkFjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5kZXRhaWxbdF07ci50YXJnZXQuc3R5bGVbZV09by5Db2xvckNvbnZlcnRlcnNbIiIuY29uY2F0KG5bMF0sIl9IVE1MIildKG4uc2xpY2UoMSkpfTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2NvbW1vbkFjdGlvbnMiLHtkaXNwbGF5OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLmRpc3BsYXklMj09MTt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PXI/ImhpZGRlbiI6InZpc2libGUiLHQuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodC5kYXRhLmlkLHtoaWRkZW46cixwcmludDowPT09ZS5kZXRhaWwuZGlzcGxheXx8Mz09PWUuZGV0YWlsLmRpc3BsYXl9KX0scHJpbnQ6ZnVuY3Rpb24oZSl7dC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3ByaW50OmUuZGV0YWlsLnByaW50fSl9LGhpZGRlbjpmdW5jdGlvbihlKXt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PWUuZGV0YWlsLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIsdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse2hpZGRlbjplLmRldGFpbC5oaWRkZW59KX0sZm9jdXM6ZnVuY3Rpb24odCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gdC50YXJnZXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITF9KX0pLDApfSx1c2VyTmFtZTpmdW5jdGlvbih0KXt0LnRhcmdldC50aXRsZT10LmRldGFpbC51c2VyTmFtZX0scmVhZG9ubHk6ZnVuY3Rpb24odCl7dC5kZXRhaWwucmVhZG9ubHk/dC50YXJnZXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpOnQudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgicmVhZG9ubHkiKX0scmVxdWlyZWQ6ZnVuY3Rpb24oZSl7dC5fc2V0UmVxdWlyZWQoZS50YXJnZXQsZS5kZXRhaWwucmVxdWlyZWQpfSxiZ0NvbG9yOmZ1bmN0aW9uKHQpe2UoImJnQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLHQpfSxmaWxsQ29sb3I6ZnVuY3Rpb24odCl7ZSgiZmlsbENvbG9yIiwiYmFja2dyb3VuZENvbG9yIix0KX0sZmdDb2xvcjpmdW5jdGlvbih0KXtlKCJmZ0NvbG9yIiwiY29sb3IiLHQpfSx0ZXh0Q29sb3I6ZnVuY3Rpb24odCl7ZSgidGV4dENvbG9yIiwiY29sb3IiLHQpfSxib3JkZXJDb2xvcjpmdW5jdGlvbih0KXtlKCJib3JkZXJDb2xvciIsImJvcmRlckNvbG9yIix0KX0sc3Ryb2tlQ29sb3I6ZnVuY3Rpb24odCl7ZSgic3Ryb2tlQ29sb3IiLCJib3JkZXJDb2xvciIsdCl9LHJvdGF0aW9uOmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLnJvdGF0aW9uO3Quc2V0Um90YXRpb24ociksdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3JvdGF0aW9uOnJ9KX19KX19LHtrZXk6Il9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbW1vbkFjdGlvbnMsbj0wLGk9T2JqZWN0LmtleXMoZS5kZXRhaWwpO248aS5sZW5ndGg7bisrKXt2YXIgYT1pW25dLG89dFthXXx8clthXTtudWxsPT1vfHxvKGUpfX19LHtrZXk6Il9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5lbmFibGVTY3JpcHRpbmcpe3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2UuZ2V0UmF3VmFsdWUodGhpcy5kYXRhLmlkKTtpZihlKWZvcih2YXIgcj10aGlzLl9jb21tb25BY3Rpb25zLG49MCxpPU9iamVjdC5lbnRyaWVzKGUpO248aS5sZW5ndGg7bisrKXt2YXIgYT1iKGlbbl0sMiksbz1hWzBdLHM9YVsxXSxsPXJbb107bCYmKGwoe2RldGFpbDp7W29dOnN9LHRhcmdldDp0fSksZGVsZXRlIGVbb10pfX19fSx7a2V5OiJfY3JlYXRlUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5kYXRhLnF1YWRQb2ludHMpcmV0dXJuIG51bGw7dmFyIGUscj1bXSxuPXRoaXMuZGF0YS5yZWN0LGk9Zyh0aGlzLmRhdGEucXVhZFBvaW50cyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgYT1lLnZhbHVlO3RoaXMuZGF0YS5yZWN0PVthWzJdLngsYVsyXS55LGFbMV0ueCxhWzFdLnldLHIucHVzaCh0aGlzLl9jcmVhdGVDb250YWluZXIodCkpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdGhpcy5kYXRhLnJlY3Q9bixyfX0se2tleToiX2NyZWF0ZVBvcHVwIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY29udGFpbmVyO3RoaXMucXVhZHJpbGF0ZXJhbHMmJih0PXR8fHRoaXMucXVhZHJpbGF0ZXJhbHMscj10aGlzLnF1YWRyaWxhdGVyYWxzWzBdKSx0fHwoKHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmNsYXNzTmFtZT0icG9wdXBUcmlnZ2VyQXJlYSIsci5hcHBlbmQodCkpO3ZhciBuPW5ldyBZKHtjb250YWluZXI6cix0cmlnZ2VyOnQsY29sb3I6ZS5jb2xvcix0aXRsZU9iajplLnRpdGxlT2JqLG1vZGlmaWNhdGlvbkRhdGU6ZS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOmUuY29udGVudHNPYmoscmljaFRleHQ6ZS5yaWNoVGV4dCxoaWRlV3JhcHBlcjohMH0pLnJlbmRlcigpO24uc3R5bGUubGVmdD0iMTAwJSIsci5hcHBlbmQobil9fSx7a2V5OiJfcmVuZGVyUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI9Zyh0aGlzLnF1YWRyaWxhdGVyYWxzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5jbGFzc05hbWU9dH1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdGhpcy5xdWFkcmlsYXRlcmFsc319LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBBbm5vdGF0aW9uRWxlbWVudC5yZW5kZXJgIGNhbGxlZCIpfX0se2tleToiX2dldEVsZW1lbnRzQnlOYW1lIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPVtdO2lmKHRoaXMuX2ZpZWxkT2JqZWN0cyl7dmFyIGk9dGhpcy5fZmllbGRPYmplY3RzW3RdO2lmKGkpe3ZhciBhLG89ZyhpKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsbD1zLnBhZ2UsdT1zLmlkLGM9cy5leHBvcnRWYWx1ZXM7aWYoLTEhPT1sJiZ1IT09ZSl7dmFyIGg9InN0cmluZyI9PXR5cGVvZiBjP2M6bnVsbCxmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KHUsJyJdJykpOyFmfHxULmhhcyhmKT9yLnB1c2goe2lkOnUsZXhwb3J0VmFsdWU6aCxkb21FbGVtZW50OmZ9KTooMCxuLndhcm4pKCJfZ2V0RWxlbWVudHNCeU5hbWUgLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdCh1KSl9fX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX19cmV0dXJuIHJ9dmFyIGQscD1nKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHQpKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LmV4cG9ydFZhbHVlLG09di5nZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIpO20hPT1lJiZULmhhcyh2KSYmci5wdXNoKHtpZDptLGV4cG9ydFZhbHVlOnksZG9tRWxlbWVudDp2fSl9fWNhdGNoKHQpe3AuZSh0KX1maW5hbGx5e3AuZigpfXJldHVybiByfX1dKSx0fSgpLE09bmV3IFdlYWtTZXQsUj1uZXcgV2Vha1NldCxJPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gayh0aGlzLHIpLHkocChuPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMCxpZ25vcmVCb3JkZXI6IShudWxsPT1pfHwhaS5pZ25vcmVCb3JkZXIpLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSkpLFIpLHkocChuKSxNKSxuLmlzVG9vbHRpcE9ubHk9dC5kYXRhLmlzVG9vbHRpcE9ubHksbn1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dGhpcy5saW5rU2VydmljZSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIix0LmlkKTt2YXIgbj0hMTtyZXR1cm4gdC51cmw/KGUuYWRkTGlua0F0dHJpYnV0ZXMocix0LnVybCx0Lm5ld1dpbmRvdyksbj0hMCk6dC5hY3Rpb24/KHRoaXMuX2JpbmROYW1lZEFjdGlvbihyLHQuYWN0aW9uKSxuPSEwKTp0LmF0dGFjaG1lbnQ/KHRoaXMuX2JpbmRBdHRhY2htZW50KHIsdC5hdHRhY2htZW50KSxuPSEwKTp0LnNldE9DR1N0YXRlPyhtKHRoaXMsUixMKS5jYWxsKHRoaXMscix0LnNldE9DR1N0YXRlKSxuPSEwKTp0LmRlc3Q/KHRoaXMuX2JpbmRMaW5rKHIsdC5kZXN0KSxuPSEwKToodC5hY3Rpb25zJiYodC5hY3Rpb25zLkFjdGlvbnx8dC5hY3Rpb25zWyJNb3VzZSBVcCJdfHx0LmFjdGlvbnNbIk1vdXNlIERvd24iXSkmJnRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKHRoaXMuX2JpbmRKU0FjdGlvbihyLHQpLG49ITApLHQucmVzZXRGb3JtPyh0aGlzLl9iaW5kUmVzZXRGb3JtQWN0aW9uKHIsdC5yZXNldEZvcm0pLG49ITApOnRoaXMuaXNUb29sdGlwT25seSYmIW4mJih0aGlzLl9iaW5kTGluayhyLCIiKSxuPSEwKSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygibGlua0Fubm90YXRpb24iKS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIG49MD09PWU/cjpyLmNsb25lTm9kZSgpO3JldHVybiB0LmFwcGVuZChuKSx0fSkpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmtBbm5vdGF0aW9uIixuJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXIpfX0se2tleToiX2JpbmRMaW5rIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0RGVzdGluYXRpb25IYXNoKGUpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiBlJiZyLmxpbmtTZXJ2aWNlLmdvVG9EZXN0aW5hdGlvbihlKSwhMX0sKGV8fCIiPT09ZSkmJm0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZE5hbWVkQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSx0Lm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5saW5rU2VydmljZS5leGVjdXRlTmFtZWRBY3Rpb24oZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEF0dGFjaG1lbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5kb3dubG9hZE1hbmFnZXIpfHx2b2lkIDA9PT10fHx0Lm9wZW5PckRvd25sb2FkRGF0YShyLmNvbnRhaW5lcixlLmNvbnRlbnQsZS5maWxlbmFtZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEpTQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTtmb3IodmFyIG49bmV3IE1hcChbWyJBY3Rpb24iLCJvbmNsaWNrIl0sWyJNb3VzZSBVcCIsIm9ubW91c2V1cCJdLFsiTW91c2UgRG93biIsIm9ubW91c2Vkb3duIl1dKSxpPWZ1bmN0aW9uKCl7dmFyIGk9b1thXSxzPW4uZ2V0KGkpO2lmKCFzKXJldHVybiJjb250aW51ZSI7dFtzXT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PXR8fHQuZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLHtzb3VyY2U6cixkZXRhaWw6e2lkOmUuaWQsbmFtZTppfX0pLCExfX0sYT0wLG89T2JqZWN0LmtleXMoZS5hY3Rpb25zKTthPG8ubGVuZ3RoO2ErKylpKCk7dC5vbmNsaWNrfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxtKHRoaXMsTSxqKS5jYWxsKHRoaXMpfX0se2tleToiX2JpbmRSZXNldEZvcm1BY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxpPXQub25jbGljaztpZihpfHwodC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSksbSh0aGlzLE0saikuY2FsbCh0aGlzKSwhdGhpcy5fZmllbGRPYmplY3RzKXJldHVybigwLG4ud2FybikoJ19iaW5kUmVzZXRGb3JtQWN0aW9uIC0gInJlc2V0Rm9ybSIgYWN0aW9uIG5vdCBzdXBwb3J0ZWQsIGVuc3VyZSB0aGF0IHRoZSBgZmllbGRPYmplY3RzYCBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQuJyksdm9pZChpfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSk7dC5vbmNsaWNrPWZ1bmN0aW9uKCl7bnVsbD09aXx8aSgpO3ZhciB0PWUuZmllbGRzLGE9ZS5yZWZzLG89ZS5pbmNsdWRlLHM9W107aWYoMCE9PXQubGVuZ3RofHwwIT09YS5sZW5ndGgpe3ZhciBsLHU9bmV3IFNldChhKSxoPWcodCk7dHJ5e2ZvcihoLnMoKTshKGw9aC5uKCkpLmRvbmU7KXt2YXIgZixkPWwudmFsdWUscD1nKHIuX2ZpZWxkT2JqZWN0c1tkXXx8W10pO3RyeXtmb3IocC5zKCk7IShmPXAubigpKS5kb25lOyl7dmFyIHY9Zi52YWx1ZS5pZDt1LmFkZCh2KX19Y2F0Y2godCl7cC5lKHQpfWZpbmFsbHl7cC5mKCl9fX1jYXRjaCh0KXtoLmUodCl9ZmluYWxseXtoLmYoKX1mb3IodmFyIHk9MCxtPU9iamVjdC52YWx1ZXMoci5fZmllbGRPYmplY3RzKTt5PG0ubGVuZ3RoO3krKyl7dmFyIGIsXz1nKG1beV0pO3RyeXtmb3IoXy5zKCk7IShiPV8ubigpKS5kb25lOyl7dmFyIHc9Yi52YWx1ZTt1Lmhhcyh3LmlkKT09PW8mJnMucHVzaCh3KX19Y2F0Y2godCl7Xy5lKHQpfWZpbmFsbHl7Xy5mKCl9fX1lbHNlIGZvcih2YXIgQT0wLGs9T2JqZWN0LnZhbHVlcyhyLl9maWVsZE9iamVjdHMpO0E8ay5sZW5ndGg7QSsrKXt2YXIgUz1rW0FdO3MucHVzaC5hcHBseShzLGMoUykpfWZvcih2YXIgeCxFPXIuYW5ub3RhdGlvblN0b3JhZ2UsUD1bXSxDPTAsTz1zO0M8Ty5sZW5ndGg7QysrKXt2YXIgRj1PW0NdLE09Ri5pZDtzd2l0Y2goUC5wdXNoKE0pLEYudHlwZSl7Y2FzZSJ0ZXh0Ijp2YXIgUj1GLmRlZmF1bHRWYWx1ZXx8IiI7RS5zZXRWYWx1ZShNLHt2YWx1ZTpSfSk7YnJlYWs7Y2FzZSJjaGVja2JveCI6Y2FzZSJyYWRpb2J1dHRvbiI6dmFyIEk9Ri5kZWZhdWx0VmFsdWU9PT1GLmV4cG9ydFZhbHVlcztFLnNldFZhbHVlKE0se3ZhbHVlOkl9KTticmVhaztjYXNlImNvbWJvYm94IjpjYXNlImxpc3Rib3giOnZhciBqPUYuZGVmYXVsdFZhbHVlfHwiIjtFLnNldFZhbHVlKE0se3ZhbHVlOmp9KTticmVhaztkZWZhdWx0OmNvbnRpbnVlfXZhciBMPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KE0sJyJdJykpO0wmJihULmhhcyhMKT9MLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNldGZvcm0iKSk6KDAsbi53YXJuKSgiX2JpbmRSZXNldEZvcm1BY3Rpb24gLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdChNKSkpfXJldHVybiByLmVuYWJsZVNjcmlwdGluZyYmKG51bGw9PT0oeD1yLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09eHx8eC5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTpyLGRldGFpbDp7aWQ6ImFwcCIsaWRzOlAsbmFtZToiUmVzZXRGb3JtIn19KSksITF9fX1dKSxyfShGKTtmdW5jdGlvbiBqKCl7dGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCJkYXRhLWludGVybmFsLWxpbmsiLCIiKX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiByLmxpbmtTZXJ2aWNlLmV4ZWN1dGVTZXRPQ0dTdGF0ZShlKSwhMX0sbSh0aGlzLE0saikuY2FsbCh0aGlzKX12YXIgRCxOLFUsVz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm99KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ0ZXh0QW5ub3RhdGlvbiI7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIHQuc3JjPXRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoKyJhbm5vdGF0aW9uLSIrdGhpcy5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSsiLnN2ZyIsdC5hbHQ9Ilt7e3R5cGV9fSBBbm5vdGF0aW9uXSIsdC5kYXRhc2V0LmwxMG5JZD0idGV4dF9hbm5vdGF0aW9uX3R5cGUiLHQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7dHlwZTp0aGlzLmRhdGEubmFtZX0pLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAodCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZCh0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksRz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGsodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJih0aGlzLmNvbnRhaW5lci50aXRsZT10aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KSx0aGlzLmNvbnRhaW5lcn19LHtrZXk6Il9nZXRLZXlNb2RpZmllciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9bi5GZWF0dXJlVGVzdC5wbGF0Zm9ybSxyPWUuaXNXaW4saT1lLmlzTWFjO3JldHVybiByJiZ0LmN0cmxLZXl8fGkmJnQubWV0YUtleX19LHtrZXk6Il9zZXRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2UuaW5jbHVkZXMoIm1vdXNlIik/dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpLHNoaWZ0OnQuc2hpZnRLZXksbW9kaWZpZXI6aS5fZ2V0S2V5TW9kaWZpZXIodCl9fSl9KSk6dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpfX0pfSkpfX0se2tleToiX3NldEV2ZW50TGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saT1nKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGEsbz1iKG4udmFsdWUsMikscz1vWzBdLGw9b1sxXTsoIkFjdGlvbiI9PT1sfHxudWxsIT09KGE9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT1hJiZhW2xdKSYmdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcih0LHMsbCxyKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fX0se2tleToiX3NldEJhY2tncm91bmRDb2xvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcnx8bnVsbDt0LnN0eWxlLmJhY2tncm91bmRDb2xvcj1udWxsPT09ZT8idHJhbnNwYXJlbnQiOm4uVXRpbC5tYWtlSGV4Q29sb3IoZVswXSxlWzFdLGVbMl0pfX0se2tleToiX3NldFRleHRTdHlsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRDb2xvcixpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemV8fDksYT10LnN0eWxlLG89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMTAqdCkvMTB9O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpe3ZhciBzPU1hdGguYWJzKHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLTIpLGw9cy8oTWF0aC5yb3VuZChzLyhuLkxJTkVfRkFDVE9SKmkpKXx8MSk7ZT1NYXRoLm1pbihpLG8obC9uLkxJTkVfRkFDVE9SKSl9ZWxzZXt2YXIgdT1NYXRoLmFicyh0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXS0yKTtlPU1hdGgubWluKGksbyh1L24uTElORV9GQUNUT1IpKX1hLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGUsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkiKSxhLmNvbG9yPW4uVXRpbC5tYWtlSGV4Q29sb3IoclswXSxyWzFdLHJbMl0pLG51bGwhPT10aGlzLmRhdGEudGV4dEFsaWdubWVudCYmKGEudGV4dEFsaWduPVsibGVmdCIsImNlbnRlciIsInJpZ2h0Il1bdGhpcy5kYXRhLnRleHRBbGlnbm1lbnRdKX19LHtrZXk6Il9zZXRSZXF1aXJlZCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtlP3Quc2V0QXR0cmlidXRlKCJyZXF1aXJlZCIsITApOnQucmVtb3ZlQXR0cmlidXRlKCJyZXF1aXJlZCIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIixlKX19XSkscn0oRiksQj1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe2sodGhpcyxyKTt2YXIgbj10LnJlbmRlckZvcm1zfHwhdC5kYXRhLmhhc0FwcGVhcmFuY2UmJiEhdC5kYXRhLmZpZWxkVmFsdWU7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpufSl9cmV0dXJuIHgocixbe2tleToic2V0UHJvcGVydHlPblNpYmxpbmdzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Usbz1nKHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKHQubmFtZSx0LmlkKSk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz1pLnZhbHVlO3MuZG9tRWxlbWVudCYmKHMuZG9tRWxlbWVudFtlXT1yKSxhLnNldFZhbHVlKHMuaWQse1tuXTpyfSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZDt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InRleHRXaWRnZXRBbm5vdGF0aW9uIjt2YXIgbj1udWxsO2lmKHRoaXMucmVuZGVyRm9ybXMpe3ZhciBpPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxhPWkuZm9ybWF0dGVkVmFsdWV8fGkudmFsdWV8fCIiLG89ZS5nZXRWYWx1ZShyLHtjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbn0pLmNoYXJMaW1pdDtvJiZhLmxlbmd0aD5vJiYoYT1hLnNsaWNlKDAsbykpO3ZhciBzPXt1c2VyVmFsdWU6YSxmb3JtYXR0ZWRWYWx1ZTpudWxsLGxhc3RDb21taXR0ZWRWYWx1ZTpudWxsLGNvbW1pdEtleToxfTt0aGlzLmRhdGEubXVsdGlMaW5lPygobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpKS50ZXh0Q29udGVudD1hLHRoaXMuZGF0YS5kb05vdFNjcm9sbCYmKG4uc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSk6KChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnR5cGU9InRleHQiLG4uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYSksdGhpcy5kYXRhLmRvTm90U2Nyb2xsJiYobi5zdHlsZS5vdmVyZmxvd1g9ImhpZGRlbiIpKSxULmFkZChuKSxuLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixyKSxuLmRpc2FibGVkPXRoaXMuZGF0YS5yZWFkT25seSxuLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxuLnRhYkluZGV4PVAsdGhpcy5fc2V0UmVxdWlyZWQobix0aGlzLmRhdGEucmVxdWlyZWQpLG8mJihuLm1heExlbmd0aD1vKSxuLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24oaSl7ZS5zZXRWYWx1ZShyLHt2YWx1ZTppLnRhcmdldC52YWx1ZX0pLHQuc2V0UHJvcGVydHlPblNpYmxpbmdzKG4sInZhbHVlIixpLnRhcmdldC52YWx1ZSwidmFsdWUiKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLGk9bnVsbCE9PShyPXQuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSkmJnZvaWQgMCE9PXI/cjoiIjtuLnZhbHVlPXMudXNlclZhbHVlPWkscy5mb3JtYXR0ZWRWYWx1ZT1udWxsfSkpO3ZhciBsPWZ1bmN0aW9uKHQpe3ZhciBlPXMuZm9ybWF0dGVkVmFsdWU7bnVsbCE9ZSYmKHQudGFyZ2V0LnZhbHVlPWUpLHQudGFyZ2V0LnNjcm9sbExlZnQ9MH07aWYodGhpcy5lbmFibGVTY3JpcHRpbmcmJnRoaXMuaGFzSlNBY3Rpb25zKXt2YXIgdTtuLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7cy51c2VyVmFsdWUmJihlLnZhbHVlPXMudXNlclZhbHVlKSxzLmxhc3RDb21taXR0ZWRWYWx1ZT1lLnZhbHVlLHMuY29tbWl0S2V5PTF9KSksbi5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBpPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtzLnVzZXJWYWx1ZT1udWxsIT09KG49dC5kZXRhaWwudmFsdWUpJiZ2b2lkIDAhPT1uP246IiIsZS5zZXRWYWx1ZShyLHt2YWx1ZTpzLnVzZXJWYWx1ZS50b1N0cmluZygpfSksdC50YXJnZXQudmFsdWU9cy51c2VyVmFsdWV9LGZvcm1hdHRlZFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXQuZGV0YWlsLmZvcm1hdHRlZFZhbHVlO3MuZm9ybWF0dGVkVmFsdWU9bixudWxsIT1uJiZ0LnRhcmdldCE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJih0LnRhcmdldC52YWx1ZT1uKSxlLnNldFZhbHVlKHIse2Zvcm1hdHRlZFZhbHVlOm59KX0sc2VsUmFuZ2U6ZnVuY3Rpb24odCl7dmFyIGU7KGU9dC50YXJnZXQpLnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KGUsYyh0LmRldGFpbC5zZWxSYW5nZSkpfSxjaGFyTGltaXQ6ZnVuY3Rpb24obil7dmFyIGksYT1uLmRldGFpbC5jaGFyTGltaXQsbz1uLnRhcmdldDtpZigwIT09YSl7by5zZXRBdHRyaWJ1dGUoIm1heExlbmd0aCIsYSk7dmFyIGw9cy51c2VyVmFsdWU7IWx8fGwubGVuZ3RoPD1hfHwobD1sLnNsaWNlKDAsYSksby52YWx1ZT1zLnVzZXJWYWx1ZT1sLGUuc2V0VmFsdWUocix7dmFsdWU6bH0pLG51bGw9PT0oaT10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09aXx8aS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmwsd2lsbENvbW1pdDohMCxjb21taXRLZXk6MSxzZWxTdGFydDpvLnNlbGVjdGlvblN0YXJ0LHNlbEVuZDpvLnNlbGVjdGlvbkVuZH19KSl9ZWxzZSBvLnJlbW92ZUF0dHJpYnV0ZSgibWF4TGVuZ3RoIil9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goaSxuKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLChmdW5jdGlvbihlKXt2YXIgbjtzLmNvbW1pdEtleT0xO3ZhciBpPS0xO2lmKCJFc2NhcGUiPT09ZS5rZXk/aT0wOiJFbnRlciIhPT1lLmtleXx8dC5kYXRhLm11bHRpTGluZT8iVGFiIj09PWUua2V5JiYocy5jb21taXRLZXk9Myk6aT0yLC0xIT09aSl7dmFyIGE9ZS50YXJnZXQudmFsdWU7cy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1hJiYocy5sYXN0Q29tbWl0dGVkVmFsdWU9YSxzLnVzZXJWYWx1ZT1hLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmEsd2lsbENvbW1pdDohMCxjb21taXRLZXk6aSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKX19KSk7dmFyIGg9bDtsPW51bGwsbi5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoZnVuY3Rpb24oZSl7aWYoZS5yZWxhdGVkVGFyZ2V0KXt2YXIgbixpPWUudGFyZ2V0LnZhbHVlO3MudXNlclZhbHVlPWkscy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1pJiYobnVsbD09PShuPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1ufHxuLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6aSx3aWxsQ29tbWl0OiEwLGNvbW1pdEtleTpzLmNvbW1pdEtleSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKSxoKGUpfX0pKSxudWxsIT09KHU9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT11JiZ1LktleXN0cm9rZSYmbi5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsKGZ1bmN0aW9uKGUpe3ZhciBuO3MubGFzdENvbW1pdHRlZFZhbHVlPW51bGw7dmFyIGk9ZS5kYXRhLGE9ZS50YXJnZXQsbz1hLnZhbHVlLGw9YS5zZWxlY3Rpb25TdGFydCx1PWEuc2VsZWN0aW9uRW5kLGM9bCxoPXU7c3dpdGNoKGUuaW5wdXRUeXBlKXtjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6dmFyIGY9by5zdWJzdHJpbmcoMCxsKS5tYXRjaCgvXHcqW15cd10qJC8pO2YmJihjLT1mWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJkZWxldGVXb3JkRm9yd2FyZCI6dmFyIGQ9by5zdWJzdHJpbmcobCkubWF0Y2goL15bXlx3XSpcdyovKTtkJiYoaCs9ZFswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEJhY2t3YXJkIjpsPT09dSYmKGMtPTEpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEZvcndhcmQiOmw9PT11JiYoaCs9MSl9ZS5wcmV2ZW50RGVmYXVsdCgpLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOm8sY2hhbmdlOml8fCIiLHdpbGxDb21taXQ6ITEsc2VsU3RhcnQ6YyxzZWxFbmQ6aH19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhuLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXV0sKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC52YWx1ZX0pKX1pZihsJiZuLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGwpLHRoaXMuZGF0YS5jb21iKXt2YXIgZj0odGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0pL287bi5jbGFzc0xpc3QuYWRkKCJjb21iIiksbi5zdHlsZS5sZXR0ZXJTcGFjaW5nPSJjYWxjKCIuY29uY2F0KGYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSAtIDFjaCkiKX19ZWxzZShuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS50ZXh0Q29udGVudD10aGlzLmRhdGEuZmllbGRWYWx1ZSxuLnN0eWxlLnZlcnRpY2FsQWxpZ249Im1pZGRsZSIsbi5zdHlsZS5kaXNwbGF5PSJ0YWJsZS1jZWxsIjtyZXR1cm4gdGhpcy5fc2V0VGV4dFN0eWxlKG4pLHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihuKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQobiksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHE9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTp0LnJlbmRlckZvcm1zfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmFubm90YXRpb25TdG9yYWdlLHI9dGhpcy5kYXRhLG49ci5pZCxpPWUuZ2V0VmFsdWUobix7dmFsdWU6ci5leHBvcnRWYWx1ZT09PXIuZmllbGRWYWx1ZX0pLnZhbHVlOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9Ik9mZiIhPT1pLGUuc2V0VmFsdWUobix7dmFsdWU6aX0pKSx0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gY2hlY2tCb3giO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIFQuYWRkKGEpLGEuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLG4pLGEuZGlzYWJsZWQ9ci5yZWFkT25seSx0aGlzLl9zZXRSZXF1aXJlZChhLHRoaXMuZGF0YS5yZXF1aXJlZCksYS50eXBlPSJjaGVja2JveCIsYS5uYW1lPXIuZmllbGROYW1lLGkmJmEuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwhMCksYS5zZXRBdHRyaWJ1dGUoImV4cG9ydFZhbHVlIixyLmV4cG9ydFZhbHVlKSxhLnRhYkluZGV4PVAsYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLChmdW5jdGlvbihpKXt2YXIgYSxvPWkudGFyZ2V0LHM9by5uYW1lLGw9by5jaGVja2VkLHU9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShzLG4pKTt0cnl7Zm9yKHUucygpOyEoYT11Lm4oKSkuZG9uZTspe3ZhciBjPWEudmFsdWUsaD1sJiZjLmV4cG9ydFZhbHVlPT09ci5leHBvcnRWYWx1ZTtjLmRvbUVsZW1lbnQmJihjLmRvbUVsZW1lbnQuY2hlY2tlZD1oKSxlLnNldFZhbHVlKGMuaWQse3ZhbHVlOmh9KX19Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9ZS5zZXRWYWx1ZShuLHt2YWx1ZTpsfSl9KSksYS5hZGRFdmVudExpc3RlbmVyKCJyZXNldGZvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHRGaWVsZFZhbHVlfHwiT2ZmIjt0LnRhcmdldC5jaGVja2VkPWU9PT1yLmV4cG9ydFZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKGEuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLChmdW5jdGlvbihyKXt2YXIgaT17dmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQuY2hlY2tlZD0iT2ZmIiE9PXQuZGV0YWlsLnZhbHVlLGUuc2V0VmFsdWUobix7dmFsdWU6dC50YXJnZXQuY2hlY2tlZH0pfX07dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGkscil9KSksdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoYSxbWyJjaGFuZ2UiLCJWYWxpZGF0ZSJdLFsiY2hhbmdlIiwiQWN0aW9uIl0sWyJmb2N1cyIsIkZvY3VzIl0sWyJibHVyIiwiQmx1ciJdLFsibW91c2Vkb3duIiwiTW91c2UgRG93biJdLFsibW91c2VlbnRlciIsIk1vdXNlIEVudGVyIl0sWyJtb3VzZWxlYXZlIiwiTW91c2UgRXhpdCJdLFsibW91c2V1cCIsIk1vdXNlIFVwIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSksdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKGEpLHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRyksSD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3JldHVybiBrKHRoaXMsciksZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnQucmVuZGVyRm9ybXN9KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gcmFkaW9CdXR0b24iO3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uscj10aGlzLmRhdGEsbj1yLmlkLGk9ZS5nZXRWYWx1ZShuLHt2YWx1ZTpyLmZpZWxkVmFsdWU9PT1yLmJ1dHRvblZhbHVlfSkudmFsdWU7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1pIT09ci5idXR0b25WYWx1ZSxlLnNldFZhbHVlKG4se3ZhbHVlOml9KSk7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtpZihULmFkZChhKSxhLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixuKSxhLmRpc2FibGVkPXIucmVhZE9ubHksdGhpcy5fc2V0UmVxdWlyZWQoYSx0aGlzLmRhdGEucmVxdWlyZWQpLGEudHlwZT0icmFkaW8iLGEubmFtZT1yLmZpZWxkTmFtZSxpJiZhLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsITApLGEudGFiSW5kZXg9UCxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHIpe3ZhciBpLGE9ci50YXJnZXQsbz1hLm5hbWUscz1hLmNoZWNrZWQsbD1nKHQuX2dldEVsZW1lbnRzQnlOYW1lKG8sbikpO3RyeXtmb3IobC5zKCk7IShpPWwubigpKS5kb25lOyl7dmFyIHU9aS52YWx1ZTtlLnNldFZhbHVlKHUuaWQse3ZhbHVlOiExfSl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfWUuc2V0VmFsdWUobix7dmFsdWU6c30pfSkpLGEuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9ci5kZWZhdWx0RmllbGRWYWx1ZTt0LnRhcmdldC5jaGVja2VkPW51bGwhPWUmJmU9PT1yLmJ1dHRvblZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyl7dmFyIG89ci5idXR0b25WYWx1ZTthLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24ocil7dmFyIGk9e3ZhbHVlOmZ1bmN0aW9uKHIpe3ZhciBpLGE9bz09PXIuZGV0YWlsLnZhbHVlLHM9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShyLnRhcmdldC5uYW1lKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgbD1pLnZhbHVlLHU9YSYmbC5pZD09PW47bC5kb21FbGVtZW50JiYobC5kb21FbGVtZW50LmNoZWNrZWQ9dSksZS5zZXRWYWx1ZShsLmlkLHt2YWx1ZTp1fSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfX19O3QuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChpLHIpfSkpLHRoaXMuX3NldEV2ZW50TGlzdGVuZXJzKGEsW1siY2hhbmdlIiwiVmFsaWRhdGUiXSxbImNoYW5nZSIsIkFjdGlvbiJdLFsiZm9jdXMiLCJGb2N1cyJdLFsiYmx1ciIsIkJsdXIiXSxbIm1vdXNlZG93biIsIk1vdXNlIERvd24iXSxbIm1vdXNlZW50ZXIiLCJNb3VzZSBFbnRlciJdLFsibW91c2VsZWF2ZSIsIk1vdXNlIEV4aXQiXSxbIm1vdXNldXAiLCJNb3VzZSBVcCJdXSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNoZWNrZWR9KSl9cmV0dXJuIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihhKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lnbm9yZUJvcmRlcjp0LmRhdGEuaGFzQXBwZWFyYW5jZX0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dSh2KHIucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpO2UuY2xhc3NOYW1lPSJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHB1c2hCdXR0b24iLHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJihlLnRpdGxlPXRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpO3ZhciBuPWUubGFzdENoaWxkO3JldHVybiB0aGlzLmVuYWJsZVNjcmlwdGluZyYmdGhpcy5oYXNKU0FjdGlvbnMmJm4mJih0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSxuLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24oZSl7dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KHt9LGUpfSkpKSxlfX1dKSxyfShJKSxWPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGsodGhpcyxyKSxlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6dC5yZW5kZXJGb3Jtc30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iY2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZCxuPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO1QuYWRkKGkpLGkuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLHIpLGkuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5LHRoaXMuX3NldFJlcXVpcmVkKGksdGhpcy5kYXRhLnJlcXVpcmVkKSxpLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxpLnRhYkluZGV4PVA7dmFyIGE9dGhpcy5kYXRhLmNvbWJvJiZ0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg+MDt0aGlzLmRhdGEuY29tYm98fChpLnNpemU9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoLHRoaXMuZGF0YS5tdWx0aVNlbGVjdCYmKGkubXVsdGlwbGU9ITApKSxpLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLG49dC5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGE9ZyhpLm9wdGlvbnMpO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvLnNlbGVjdGVkPW8udmFsdWU9PT1ufX1jYXRjaCh0KXthLmUodCl9ZmluYWxseXthLmYoKX19KSk7dmFyIG8scz1nKHRoaXMuZGF0YS5vcHRpb25zKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWUsdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTt1LnRleHRDb250ZW50PWwuZGlzcGxheVZhbHVlLHUudmFsdWU9bC5leHBvcnRWYWx1ZSxuLnZhbHVlLmluY2x1ZGVzKGwuZXhwb3J0VmFsdWUpJiYodS5zZXRBdHRyaWJ1dGUoInNlbGVjdGVkIiwhMCksYT0hMSksaS5hcHBlbmQodSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXZhciBjPW51bGw7aWYoYSl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7aC52YWx1ZT0iICIsaC5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsITApLGguc2V0QXR0cmlidXRlKCJzZWxlY3RlZCIsITApLGkucHJlcGVuZChoKSxjPWZ1bmN0aW9uKCl7aC5yZW1vdmUoKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IixjKSxjPW51bGx9LGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGMpfXZhciBmPWZ1bmN0aW9uKHQpe3ZhciBlPXQ/InZhbHVlIjoidGV4dENvbnRlbnQiLHI9aS5vcHRpb25zO3JldHVybiBpLm11bHRpcGxlP0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RlZH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2VdfSkpOi0xPT09ci5zZWxlY3RlZEluZGV4P251bGw6cltyLnNlbGVjdGVkSW5kZXhdW2VdfSxkPWYoITEpLHA9ZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQub3B0aW9ucztyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5VmFsdWU6dC50ZXh0Q29udGVudCxleHBvcnRWYWx1ZTp0LnZhbHVlfX0pKX07cmV0dXJuIHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucz8oaS5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBhPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtudWxsPT09KG49Yyl8fHZvaWQgMD09PW58fG4oKTt2YXIgYSxvPXQuZGV0YWlsLnZhbHVlLHM9bmV3IFNldChBcnJheS5pc0FycmF5KG8pP286W29dKSxsPWcoaS5vcHRpb25zKTt0cnl7Zm9yKGwucygpOyEoYT1sLm4oKSkuZG9uZTspe3ZhciB1PWEudmFsdWU7dS5zZWxlY3RlZD1zLmhhcyh1LnZhbHVlKX19Y2F0Y2godCl7bC5lKHQpfWZpbmFsbHl7bC5mKCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKX0pLGQ9ZighMSl9LG11bHRpcGxlU2VsZWN0aW9uOmZ1bmN0aW9uKHQpe2kubXVsdGlwbGU9ITB9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgbj1pLm9wdGlvbnMsYT10LmRldGFpbC5yZW1vdmU7aWYoblthXS5zZWxlY3RlZD0hMSxpLnJlbW92ZShhKSxuLmxlbmd0aD4wKXt2YXIgbz1BcnJheS5wcm90b3R5cGUuZmluZEluZGV4LmNhbGwobiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0ZWR9KSk7LTE9PT1vJiYoblswXS5zZWxlY3RlZD0hMCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKSxpdGVtczpwKHQpfSksZD1mKCExKX0sY2xlYXI6ZnVuY3Rpb24odCl7Zm9yKDswIT09aS5sZW5ndGg7KWkucmVtb3ZlKDApO2Uuc2V0VmFsdWUocix7dmFsdWU6bnVsbCxpdGVtczpbXX0pLGQ9ZighMSl9LGluc2VydDpmdW5jdGlvbih0KXt2YXIgbj10LmRldGFpbC5pbnNlcnQsYT1uLmluZGV4LG89bi5kaXNwbGF5VmFsdWUscz1uLmV4cG9ydFZhbHVlLGw9aS5jaGlsZHJlblthXSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpO3UudGV4dENvbnRlbnQ9byx1LnZhbHVlPXMsbD9sLmJlZm9yZSh1KTppLmFwcGVuZCh1KSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpdGVtczpmdW5jdGlvbih0KXtmb3IodmFyIG49dC5kZXRhaWwuaXRlbXM7MCE9PWkubGVuZ3RoOylpLnJlbW92ZSgwKTt2YXIgYSxvPWcobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlLGw9cy5kaXNwbGF5VmFsdWUsdT1zLmV4cG9ydFZhbHVlLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Yy50ZXh0Q29udGVudD1sLGMudmFsdWU9dSxpLmFwcGVuZChjKX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9aS5vcHRpb25zLmxlbmd0aD4wJiYoaS5vcHRpb25zWzBdLnNlbGVjdGVkPSEwKSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpbmRpY2VzOmZ1bmN0aW9uKHQpe3ZhciBuLGk9bmV3IFNldCh0LmRldGFpbC5pbmRpY2VzKSxhPWcodC50YXJnZXQub3B0aW9ucyk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28uc2VsZWN0ZWQ9aS5oYXMoby5pbmRleCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfWUuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KSxkPWYoITEpfSxlZGl0YWJsZTpmdW5jdGlvbih0KXt0LnRhcmdldC5kaXNhYmxlZD0hdC5kZXRhaWwuZWRpdGFibGV9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYSxuKX0pKSxpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24obil7dmFyIGksYT1mKCEwKTtlLnNldFZhbHVlKHIse3ZhbHVlOmF9KSxuLnByZXZlbnREZWZhdWx0KCksbnVsbD09PShpPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1pfHxpLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6ZCxjaGFuZ2VFeDphLHdpbGxDb21taXQ6ITEsY29tbWl0S2V5OjEsa2V5RG93bjohMX19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhpLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXSxbImlucHV0IiwiQWN0aW9uIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSk6aS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe2Uuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KX0pKSx0aGlzLmRhdGEuY29tYm8mJnRoaXMuX3NldFRleHRTdHlsZShpKSx0aGlzLl9zZXRCYWNrZ3JvdW5kQ29sb3IoaSksdGhpcy5fc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlMoaSksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShHKSxYPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhO2sodGhpcyxyKTt2YXIgbz10LmRhdGEscz0hci5JR05PUkVfVFlQRVMuaGFzKG8ucGFyZW50VHlwZSkmJiEhKG51bGwhPT0obj1vLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT1vLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT1vLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybiBlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6c30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InBvcHVwQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5sYXllci5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdCh0aGlzLmRhdGEucGFyZW50SWQsJyJdJykpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5jb250YWluZXI7dmFyIGU9bmV3IFkoe2NvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcix0cmlnZ2VyOkFycmF5LmZyb20odCksY29sb3I6dGhpcy5kYXRhLmNvbG9yLHRpdGxlT2JqOnRoaXMuZGF0YS50aXRsZU9iaixtb2RpZmljYXRpb25EYXRlOnRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOnRoaXMuZGF0YS5jb250ZW50c09iaixyaWNoVGV4dDp0aGlzLmRhdGEucmljaFRleHR9KSxyPXRoaXMucGFnZSxpPW4uVXRpbC5ub3JtYWxpemVSZWN0KFt0aGlzLmRhdGEucGFyZW50UmVjdFswXSxyLnZpZXdbM10tdGhpcy5kYXRhLnBhcmVudFJlY3RbMV0rci52aWV3WzFdLHRoaXMuZGF0YS5wYXJlbnRSZWN0WzJdLHIudmlld1szXS10aGlzLmRhdGEucGFyZW50UmVjdFszXStyLnZpZXdbMV1dKSxhPWlbMF0rdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0tdGhpcy5kYXRhLnBhcmVudFJlY3RbMF0sbz1pWzFdLHM9dGhpcy52aWV3cG9ydC5yYXdEaW1zLGw9cy5wYWdlV2lkdGgsdT1zLnBhZ2VIZWlnaHQsYz1zLnBhZ2VYLGg9cy5wYWdlWTtyZXR1cm4gdGhpcy5jb250YWluZXIuc3R5bGUubGVmdD0iIi5jb25jYXQoMTAwKihhLWMpL2wsIiUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCooby1oKS91LCIlIiksdGhpcy5jb250YWluZXIuYXBwZW5kKGUucmVuZGVyKCkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKTtEPVgsTj0iSUdOT1JFX1RZUEVTIixVPW5ldyBTZXQoWyJMaW5lIiwiU3F1YXJlIiwiQ2lyY2xlIiwiUG9seUxpbmUiLCJQb2x5Z29uIiwiSW5rIl0pLChOPUUoTikpaW4gRD9PYmplY3QuZGVmaW5lUHJvcGVydHkoRCxOLHt2YWx1ZTpVLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6RFtOXT1VO3ZhciBZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtrKHRoaXMsdCksdGhpcy5jb250YWluZXI9ZS5jb250YWluZXIsdGhpcy50cmlnZ2VyPWUudHJpZ2dlcix0aGlzLmNvbG9yPWUuY29sb3IsdGhpcy50aXRsZU9iaj1lLnRpdGxlT2JqLHRoaXMubW9kaWZpY2F0aW9uRGF0ZT1lLm1vZGlmaWNhdGlvbkRhdGUsdGhpcy5jb250ZW50c09iaj1lLmNvbnRlbnRzT2JqLHRoaXMucmljaFRleHQ9ZS5yaWNoVGV4dCx0aGlzLmhpZGVXcmFwcGVyPWUuaGlkZVdyYXBwZXJ8fCExLHRoaXMucGlubmVkPSExfXJldHVybiB4KHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5jbGFzc05hbWU9InBvcHVwV3JhcHBlciIsdGhpcy5oaWRlRWxlbWVudD10aGlzLmhpZGVXcmFwcGVyP3I6dGhpcy5jb250YWluZXIsdGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9InBvcHVwIjt2YXIgbz10aGlzLmNvbG9yO2lmKG8pe3ZhciBsPS43KigyNTUtb1swXSkrb1swXSx1PS43KigyNTUtb1sxXSkrb1sxXSxjPS43KigyNTUtb1syXSkrb1syXTthLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8bCwwfHUsMHxjKX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIpO2guZGlyPXRoaXMudGl0bGVPYmouZGlyLGgudGV4dENvbnRlbnQ9dGhpcy50aXRsZU9iai5zdHIsYS5hcHBlbmQoaCk7dmFyIGY9aS5QREZEYXRlU3RyaW5nLnRvRGF0ZU9iamVjdCh0aGlzLm1vZGlmaWNhdGlvbkRhdGUpO2lmKGYpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtkLmNsYXNzTmFtZT0icG9wdXBEYXRlIixkLnRleHRDb250ZW50PSJ7e2RhdGV9fSwge3t0aW1lfX0iLGQuZGF0YXNldC5sMTBuSWQ9ImFubm90YXRpb25fZGF0ZV9zdHJpbmciLGQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7ZGF0ZTpmLnRvTG9jYWxlRGF0ZVN0cmluZygpLHRpbWU6Zi50b0xvY2FsZVRpbWVTdHJpbmcoKX0pLGEuYXBwZW5kKGQpfWlmKG51bGw9PT0odD10aGlzLnJpY2hUZXh0KXx8dm9pZCAwPT09dHx8IXQuc3RyfHxudWxsIT09KGU9dGhpcy5jb250ZW50c09iaikmJnZvaWQgMCE9PWUmJmUuc3RyJiZ0aGlzLmNvbnRlbnRzT2JqLnN0ciE9PXRoaXMucmljaFRleHQuc3RyKXt2YXIgcD10aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzT2JqKTthLmFwcGVuZChwKX1lbHNlIHMuWGZhTGF5ZXIucmVuZGVyKHt4ZmFIdG1sOnRoaXMucmljaFRleHQuaHRtbCxpbnRlbnQ6InJpY2hUZXh0IixkaXY6YX0pLGEubGFzdENoaWxkLmNsYXNzTmFtZT0icmljaFRleHQgcG9wdXBDb250ZW50IjtBcnJheS5pc0FycmF5KHRoaXMudHJpZ2dlcil8fCh0aGlzLnRyaWdnZXI9W3RoaXMudHJpZ2dlcl0pO3ZhciB2LHk9Zyh0aGlzLnRyaWdnZXIpO3RyeXtmb3IoeS5zKCk7ISh2PXkubigpKS5kb25lOyl7dmFyIG09di52YWx1ZTttLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl90b2dnbGUuYmluZCh0aGlzKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHRoaXMuX3Nob3cuYmluZCh0aGlzLCExKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcy5faGlkZS5iaW5kKHRoaXMsITEpKX19Y2F0Y2godCl7eS5lKHQpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hpZGUuYmluZCh0aGlzLCEwKSksci5hcHBlbmQoYSkscn19LHtrZXk6Il9mb3JtYXRDb250ZW50cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHIscj10LmRpcixuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtuLmNsYXNzTmFtZT0icG9wdXBDb250ZW50IixuLmRpcj1yO2Zvcih2YXIgaT1lLnNwbGl0KC8oPzpcclxuP3xcbikvKSxhPTAsbz1pLmxlbmd0aDthPG87KythKXt2YXIgcz1pW2FdO24uYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKSxhPG8tMSYmbi5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSl9cmV0dXJuIG59fSx7a2V5OiJfdG9nZ2xlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGlubmVkP3RoaXMuX2hpZGUoITApOnRoaXMuX3Nob3coITApfX0se2tleToiX3Nob3ciLHZhbHVlOmZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSYmKHRoaXMucGlubmVkPSEwKSx0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiYmKHRoaXMuaGlkZUVsZW1lbnQuaGlkZGVuPSExLHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleD1wYXJzZUludCh0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXgpKzFlMyl9fSx7a2V5OiJfaGlkZSIsdmFsdWU6ZnVuY3Rpb24oKXsoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSkmJih0aGlzLnBpbm5lZD0hMSksdGhpcy5oaWRlRWxlbWVudC5oaWRkZW58fHRoaXMucGlubmVkfHwodGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITAsdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4PXBhcnNlSW50KHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleCktMWUzKX19XSksdH0oKSxLPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLnRleHRDb250ZW50PXQuZGF0YS50ZXh0Q29udGVudCxvfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZyZWVUZXh0QW5ub3RhdGlvbiIsdGhpcy50ZXh0Q29udGVudCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImFubm90YXRpb25UZXh0Q29udGVudCIsdC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjb21tZW50Iik7dmFyIGUscj1nKHRoaXMudGV4dENvbnRlbnQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtpLnRleHRDb250ZW50PW4sdC5hcHBlbmQoaSl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuY29udGFpbmVyLmFwcGVuZCh0KX1yZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLEo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmVBbm5vdGF0aW9uIjt2YXIgdD10aGlzLmRhdGEsZT1DKHQucmVjdCkscj1lLndpZHRoLG49ZS5oZWlnaHQsaT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHIsbiwhMCksYT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmxpbmUiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIngxIix0LnJlY3RbMl0tdC5saW5lQ29vcmRpbmF0ZXNbMF0pLGEuc2V0QXR0cmlidXRlKCJ5MSIsdC5yZWN0WzNdLXQubGluZUNvb3JkaW5hdGVzWzFdKSxhLnNldEF0dHJpYnV0ZSgieDIiLHQucmVjdFsyXS10LmxpbmVDb29yZGluYXRlc1syXSksYS5zZXRBdHRyaWJ1dGUoInkyIix0LnJlY3RbM10tdC5saW5lQ29vcmRpbmF0ZXNbM10pLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHQuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGEuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxpLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoaSksdGhpcy5fY3JlYXRlUG9wdXAoYSx0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksUT1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1YXJlQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5kYXRhLGU9Qyh0LnJlY3QpLHI9ZS53aWR0aCxuPWUuaGVpZ2h0LGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShyLG4sITApLGE9dC5ib3JkZXJTdHlsZS53aWR0aCxvPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZSgieCIsYS8yKSxvLnNldEF0dHJpYnV0ZSgieSIsYS8yKSxvLnNldEF0dHJpYnV0ZSgid2lkdGgiLHItYSksby5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbi1hKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixhfHwxKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwidHJhbnNwYXJlbnQiKSxvLnNldEF0dHJpYnV0ZSgiZmlsbCIsInRyYW5zcGFyZW50IiksaS5hcHBlbmQobyksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuX2NyZWF0ZVBvcHVwKG8sdCksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLCQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImNpcmNsZUFubm90YXRpb24iO3ZhciB0PXRoaXMuZGF0YSxlPUModC5yZWN0KSxyPWUud2lkdGgsbj1lLmhlaWdodCxpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUocixuLCEwKSxhPXQuYm9yZGVyU3R5bGUud2lkdGgsbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmVsbGlwc2UiKTtyZXR1cm4gby5zZXRBdHRyaWJ1dGUoImN4IixyLzIpLG8uc2V0QXR0cmlidXRlKCJjeSIsbi8yKSxvLnNldEF0dHJpYnV0ZSgicngiLHIvMi1hLzIpLG8uc2V0QXR0cmlidXRlKCJyeSIsbi8yLWEvMiksby5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsYXx8MSksby5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50Iiksby5zZXRBdHRyaWJ1dGUoImZpbGwiLCJ0cmFuc3BhcmVudCIpLGkuYXBwZW5kKG8pLHRoaXMuY29udGFpbmVyLmFwcGVuZChpKSx0aGlzLl9jcmVhdGVQb3B1cChvLHQpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxaPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLmNvbnRhaW5lckNsYXNzTmFtZT0icG9seWxpbmVBbm5vdGF0aW9uIixvLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWxpbmUiLG99cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT10aGlzLmNvbnRhaW5lckNsYXNzTmFtZTt2YXIgdCxlPXRoaXMuZGF0YSxyPUMoZS5yZWN0KSxuPXIud2lkdGgsaT1yLmhlaWdodCxhPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUobixpLCEwKSxvPVtdLHM9ZyhlLnZlcnRpY2VzKTt0cnl7Zm9yKHMucygpOyEodD1zLm4oKSkuZG9uZTspe3ZhciBsPXQudmFsdWUsdT1sLngtZS5yZWN0WzBdLGM9ZS5yZWN0WzNdLWwueTtvLnB1c2godSsiLCIrYyl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfW89by5qb2luKCIgIik7dmFyIGg9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7cmV0dXJuIGguc2V0QXR0cmlidXRlKCJwb2ludHMiLG8pLGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGguc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGguc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxhLmFwcGVuZChoKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5fY3JlYXRlUG9wdXAoaCxlKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksdHQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbjtyZXR1cm4gayh0aGlzLHIpLChuPWUuY2FsbCh0aGlzLHQpKS5jb250YWluZXJDbGFzc05hbWU9InBvbHlnb25Bbm5vdGF0aW9uIixuLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWdvbiIsbn1yZXR1cm4geChyKX0oWiksZXQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJjYXJldEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxydD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYSxvO2sodGhpcyxyKTt2YXIgcz0hISh0LmRhdGEuaGFzUG9wdXB8fG51bGwhPT0obj10LmRhdGEudGl0bGVPYmopJiZ2b2lkIDAhPT1uJiZuLnN0cnx8bnVsbCE9PShpPXQuZGF0YS5jb250ZW50c09iaikmJnZvaWQgMCE9PWkmJmkuc3RyfHxudWxsIT09KGE9dC5kYXRhLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybihvPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpzLGlnbm9yZUJvcmRlcjohMH0pKS5jb250YWluZXJDbGFzc05hbWU9Imlua0Fubm90YXRpb24iLG8uc3ZnRWxlbWVudE5hbWU9InN2Zzpwb2x5bGluZSIsb31yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO3ZhciB0LGU9dGhpcy5kYXRhLHI9QyhlLnJlY3QpLG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShuLGksITApLG89ZyhlLmlua0xpc3RzKTt0cnl7Zm9yKG8ucygpOyEodD1vLm4oKSkuZG9uZTspe3ZhciBzLGw9dC52YWx1ZSx1PVtdLGM9ZyhsKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciBoPXMudmFsdWUsZj1oLngtZS5yZWN0WzBdLGQ9ZS5yZWN0WzNdLWgueTt1LnB1c2goIiIuY29uY2F0KGYsIiwiKS5jb25jYXQoZCkpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX11PXUuam9pbigiICIpO3ZhciBwPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpO3Auc2V0QXR0cmlidXRlKCJwb2ludHMiLHUpLHAuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLHAuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLHAuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSx0aGlzLl9jcmVhdGVQb3B1cChwLGUpLGEuYXBwZW5kKHApfX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdGhpcy5jb250YWluZXIuYXBwZW5kKGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxudD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJoaWdobGlnaHRBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iaGlnaGxpZ2h0QW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxpdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJ1bmRlcmxpbmVBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0idW5kZXJsaW5lQW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxhdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJzcXVpZ2dseUFubm90YXRpb24iKToodGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzcXVpZ2dseUFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksb3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMCxjcmVhdGVRdWFkcmlsYXRlcmFsczohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygic3RyaWtlb3V0QW5ub3RhdGlvbiIpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InN0cmlrZW91dEFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksc3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzdGFtcEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxsdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGE7ayh0aGlzLHIpO3ZhciBvPShhPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMH0pKS5kYXRhLmZpbGUscz1vLmZpbGVuYW1lLGw9by5jb250ZW50O3JldHVybiBhLmZpbGVuYW1lPSgwLGkuZ2V0RmlsZW5hbWVGcm9tVXJsKShzLCEwKSxhLmNvbnRlbnQ9bCxudWxsPT09KG49YS5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PW58fG4uZGlzcGF0Y2goImZpbGVhdHRhY2htZW50YW5ub3RhdGlvbiIse3NvdXJjZTpwKGEpLGZpbGVuYW1lOnMsY29udGVudDpsfSksYX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyO3JldHVybiB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiIsdGhpcy5kYXRhLmhhc0FwcGVhcmFuY2U/cj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKToocj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSkuc3JjPSIiLmNvbmNhdCh0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCwiYW5ub3RhdGlvbi0iKS5jb25jYXQoL3BhcGVyY2xpcC9pLnRlc3QodGhpcy5kYXRhLm5hbWUpPyJwYXBlcmNsaXAiOiJwdXNocGluIiwiLnN2ZyIpLHIuY2xhc3NOYW1lPSJwb3B1cFRyaWdnZXJBcmVhIixyLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIix0aGlzLl9kb3dubG9hZC5iaW5kKHRoaXMpKSwhdGhpcy5kYXRhLmhhc1BvcHVwJiYobnVsbCE9PSh0PXRoaXMuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PXQmJnQuc3RyfHxudWxsIT09KGU9dGhpcy5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09ZSYmZS5zdHJ8fHRoaXMuZGF0YS5yaWNoVGV4dCkmJnRoaXMuX2NyZWF0ZVBvcHVwKHIsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXJ9fSx7a2V5OiJfZG93bmxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZG93bmxvYWRNYW5hZ2VyKXx8dm9pZCAwPT09dHx8dC5vcGVuT3JEb3dubG9hZERhdGEodGhpcy5jb250YWluZXIsdGhpcy5jb250ZW50LHRoaXMuZmlsZW5hbWUpfX1dKSxyfShGKSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtrKHRoaXMsdCl9cmV0dXJuIHgodCxudWxsLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbnMsbz1lLmRpdixzPWUudmlld3BvcnQsdT1lLmFjY2Vzc2liaWxpdHlNYW5hZ2VyOygwLGkuc2V0TGF5ZXJEaW1lbnNpb25zKShvLHMpO3ZhciBjLGg9e2RhdGE6bnVsbCxsYXllcjpvLHBhZ2U6ZS5wYWdlLHZpZXdwb3J0OnMsbGlua1NlcnZpY2U6ZS5saW5rU2VydmljZSxkb3dubG9hZE1hbmFnZXI6ZS5kb3dubG9hZE1hbmFnZXIsaW1hZ2VSZXNvdXJjZXNQYXRoOmUuaW1hZ2VSZXNvdXJjZXNQYXRofHwiIixyZW5kZXJGb3JtczohMSE9PWUucmVuZGVyRm9ybXMsc3ZnRmFjdG9yeTpuZXcgaS5ET01TVkdGYWN0b3J5LGFubm90YXRpb25TdG9yYWdlOmUuYW5ub3RhdGlvblN0b3JhZ2V8fG5ldyBhLkFubm90YXRpb25TdG9yYWdlLGVuYWJsZVNjcmlwdGluZzohMD09PWUuZW5hYmxlU2NyaXB0aW5nLGhhc0pTQWN0aW9uczplLmhhc0pTQWN0aW9ucyxmaWVsZE9iamVjdHM6ZS5maWVsZE9iamVjdHN9LGY9MCxkPWcocik7dHJ5e2ZvcihkLnMoKTshKGM9ZC5uKCkpLmRvbmU7KXt2YXIgcD1jLnZhbHVlO2lmKHAuYW5ub3RhdGlvblR5cGUhPT1uLkFubm90YXRpb25UeXBlLlBPUFVQKXt2YXIgdj1DKHAucmVjdCkseT12LndpZHRoLG09di5oZWlnaHQ7aWYoeTw9MHx8bTw9MCljb250aW51ZX1oLmRhdGE9cDt2YXIgYj1PLmNyZWF0ZShoKTtpZihiLmlzUmVuZGVyYWJsZSl7dmFyIF89Yi5yZW5kZXIoKTtpZihwLmhpZGRlbiYmKF8uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIiksQXJyYXkuaXNBcnJheShfKSl7dmFyIHcsQT1nKF8pO3RyeXtmb3IoQS5zKCk7ISh3PUEubigpKS5kb25lOyl7dmFyIGs9dy52YWx1ZTtrLnN0eWxlLnpJbmRleD1mKyssbCh0LHQsY3QpLmNhbGwodCxrLHAuaWQsbyx1KX19Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9fWVsc2UgXy5zdHlsZS56SW5kZXg9ZisrLGIgaW5zdGFuY2VvZiBYP28ucHJlcGVuZChfKTpsKHQsdCxjdCkuY2FsbCh0LF8scC5pZCxvLHUpfX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9bCh0aGlzLHQsaHQpLmNhbGwodGhpcyxvLGUuYW5ub3RhdGlvbkNhbnZhc01hcCl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxuPWUuZGl2LGE9ZS52aWV3cG9ydDsoMCxpLnNldExheWVyRGltZW5zaW9ucykobix7cm90YXRpb246YS5yb3RhdGlvbn0pLGwodGhpcyx0LGh0KS5jYWxsKHRoaXMsbixyKSxuLmhpZGRlbj0hMX19XSksdH0oKTtmdW5jdGlvbiBjdCh0LGUscixuKXt2YXIgYT10LmZpcnN0Q2hpbGR8fHQ7YS5pZD0iIi5jb25jYXQoaS5Bbm5vdGF0aW9uUHJlZml4KS5jb25jYXQoZSksci5hcHBlbmQodCksbnVsbD09bnx8bi5tb3ZlRWxlbWVudEluRE9NKHIsdCxhLCExKX1mdW5jdGlvbiBodCh0LGUpe2lmKGUpe3ZhciByLG49ZyhlKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPWIoci52YWx1ZSwyKSxhPWlbMF0sbz1pWzFdLHM9dC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdChhLCciXScpKTtpZihzKXt2YXIgbD1zLmZpcnN0Q2hpbGQ7bD8iQ0FOVkFTIj09PWwubm9kZU5hbWU/bC5yZXBsYWNlV2l0aChvKTpsLmJlZm9yZShvKTpzLmFwcGVuZChvKX19fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfWUuY2xlYXIoKX19ZS5Bbm5vdGF0aW9uTGF5ZXI9dXR9LCh0LGUpPT57ZnVuY3Rpb24gcih0KXtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scih0KX1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBpKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aSh0LGUpOnZvaWQgMH19KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBpKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1yKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PXIoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIG8odCl7cmV0dXJuIE1hdGguZmxvb3IoMjU1Kk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ29sb3JDb252ZXJ0ZXJzPXZvaWQgMDt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToiQ01ZS19HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsNCkscj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVyblsiRyIsMS1NYXRoLm1pbigxLC4zKnIrLjU5KmErLjExKmkrbyldfX0se2tleToiR19DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm5bIkNNWUsiLDAsMCwwLDEtbih0LDEpWzBdXX19LHtrZXk6IkdfUkdCIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMSlbMF07cmV0dXJuWyJSR0IiLGUsZSxlXX19LHtrZXk6IkdfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9byhuKHQsMSlbMF0pO3JldHVybiIjIi5jb25jYXQoZSkuY29uY2F0KGUpLmNvbmNhdChlKX19LHtrZXk6IlJHQl9HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMyk7cmV0dXJuWyJHIiwuMyplWzBdKy41OSplWzFdKy4xMSplWzJdXX19LHtrZXk6IlJHQl9IVE1MIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj1lWzBdLGk9ZVsxXSxhPWVbMl0scz1vKHIpLGw9byhpKSx1PW8oYSk7cmV0dXJuIiMiLmNvbmNhdChzKS5jb25jYXQobCkuY29uY2F0KHUpfX0se2tleToiVF9IVE1MIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIjMDAwMDAwMDAifX0se2tleToiQ01ZS19SR0IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW4odCw0KSxyPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuWyJSR0IiLDEtTWF0aC5taW4oMSxyK28pLDEtTWF0aC5taW4oMSxhK28pLDEtTWF0aC5taW4oMSxpK28pXX19LHtrZXk6IkNNWUtfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5DTVlLX1JHQih0KS5zbGljZSgxKTtyZXR1cm4gdGhpcy5SR0JfSFRNTChlKX19LHtrZXk6IlJHQl9DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj0xLWVbMF0saT0xLWVbMV0sYT0xLWVbMl07cmV0dXJuWyJDTVlLIixyLGksYSxNYXRoLm1pbihyLGksYSldfX1dLG51bGwmJmEoZS5wcm90b3R5cGUsbnVsbCksciYmYShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5Db2xvckNvbnZlcnRlcnM9c30sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlhmYUxheWVyPXZvaWQgMDt2YXIgbj1yKDE0OSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0saSh0KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fHModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPXModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLGw9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe2w9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBhfX19fWZ1bmN0aW9uIHModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGwodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBsKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1pKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpfXZhciBlLHI7cmV0dXJuIGU9dCxyPVt7a2V5OiJzZXR1cFN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bi5nZXRWYWx1ZShlLHt2YWx1ZTpudWxsfSk7c3dpdGNoKHIubmFtZSl7Y2FzZSJ0ZXh0YXJlYSI6aWYobnVsbCE9PWEudmFsdWUmJih0LnRleHRDb250ZW50PWEudmFsdWUpLCJwcmludCI9PT1pKWJyZWFrO3QuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLChmdW5jdGlvbih0KXtuLnNldFZhbHVlKGUse3ZhbHVlOnQudGFyZ2V0LnZhbHVlfSl9KSk7YnJlYWs7Y2FzZSJpbnB1dCI6aWYoInJhZGlvIj09PXIuYXR0cmlidXRlcy50eXBlfHwiY2hlY2tib3giPT09ci5hdHRyaWJ1dGVzLnR5cGUpe2lmKGEudmFsdWU9PT1yLmF0dHJpYnV0ZXMueGZhT24/dC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCEwKTphLnZhbHVlPT09ci5hdHRyaWJ1dGVzLnhmYU9mZiYmdC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSwicHJpbnQiPT09aSlicmVhazt0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQuY2hlY2tlZD90LnRhcmdldC5nZXRBdHRyaWJ1dGUoInhmYU9uIik6dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJ4ZmFPZmYiKX0pfSkpfWVsc2V7aWYobnVsbCE9PWEudmFsdWUmJnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYS52YWx1ZSksInByaW50Ij09PWkpYnJlYWs7dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQudmFsdWV9KX0pKX1icmVhaztjYXNlInNlbGVjdCI6aWYobnVsbCE9PWEudmFsdWUpe3ZhciBzLGw9byhyLmNoaWxkcmVuKTt0cnl7Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7dS5hdHRyaWJ1dGVzLnZhbHVlPT09YS52YWx1ZSYmKHUuYXR0cmlidXRlcy5zZWxlY3RlZD0hMCl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX10LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24odCl7dmFyIHI9dC50YXJnZXQub3B0aW9ucyxpPS0xPT09ci5zZWxlY3RlZEluZGV4PyIiOnJbci5zZWxlY3RlZEluZGV4XS52YWx1ZTtuLnNldFZhbHVlKGUse3ZhbHVlOml9KX0pKX19fSx7a2V5OiJzZXRBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10Lmh0bWwscj10LmVsZW1lbnQsbj10LnN0b3JhZ2UsaT12b2lkIDA9PT1uP251bGw6bixvPXQuaW50ZW50LHM9dC5saW5rU2VydmljZSxsPXIuYXR0cmlidXRlcyx1PWUgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudDsicmFkaW8iPT09bC50eXBlJiYobC5uYW1lPSIiLmNvbmNhdChsLm5hbWUsIi0iKS5jb25jYXQobykpO2Zvcih2YXIgYz0wLGg9T2JqZWN0LmVudHJpZXMobCk7YzxoLmxlbmd0aDtjKyspe3ZhciBmPWEoaFtjXSwyKSxkPWZbMF0scD1mWzFdO2lmKG51bGwhPXApc3dpdGNoKGQpe2Nhc2UiY2xhc3MiOnAubGVuZ3RoJiZlLnNldEF0dHJpYnV0ZShkLHAuam9pbigiICIpKTticmVhaztjYXNlImRhdGFJZCI6YnJlYWs7Y2FzZSJpZCI6ZS5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIscCk7YnJlYWs7Y2FzZSJzdHlsZSI6T2JqZWN0LmFzc2lnbihlLnN0eWxlLHApO2JyZWFrO2Nhc2UidGV4dENvbnRlbnQiOmUudGV4dENvbnRlbnQ9cDticmVhaztkZWZhdWx0OighdXx8ImhyZWYiIT09ZCYmIm5ld1dpbmRvdyIhPT1kKSYmZS5zZXRBdHRyaWJ1dGUoZCxwKX19dSYmcy5hZGRMaW5rQXR0cmlidXRlcyhlLGwuaHJlZixsLm5ld1dpbmRvdyksaSYmbC5kYXRhSWQmJnRoaXMuc2V0dXBTdG9yYWdlKGUsbC5kYXRhSWQscixpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5hbm5vdGF0aW9uU3RvcmFnZSxyPXQubGlua1NlcnZpY2UsaT10LnhmYUh0bWwscz10LmludGVudHx8ImRpc3BsYXkiLGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2kuYXR0cmlidXRlcyYmdGhpcy5zZXRBdHRyaWJ1dGVzKHtodG1sOmwsZWxlbWVudDppLGludGVudDpzLGxpbmtTZXJ2aWNlOnJ9KTt2YXIgdT1bW2ksLTEsbF1dLGM9dC5kaXY7aWYoYy5hcHBlbmQobCksdC52aWV3cG9ydCl7dmFyIGg9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTtjLnN0eWxlLnRyYW5zZm9ybT1ofSJyaWNoVGV4dCIhPT1zJiZjLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ4ZmFMYXllciB4ZmFGb250Iik7Zm9yKHZhciBmPVtdO3UubGVuZ3RoPjA7KXt2YXIgZCxwLHY9YSh1LmF0KC0xKSwzKSx5PXZbMF0sbT12WzFdLGc9dlsyXTtpZihtKzEhPT15LmNoaWxkcmVuLmxlbmd0aCl7dmFyIGI9eS5jaGlsZHJlblsrK3UuYXQoLTEpWzFdXTtpZihudWxsIT09Yil7dmFyIF89Yi5uYW1lO2lmKCIjdGV4dCIhPT1fKXt2YXIgdz12b2lkIDA7aWYodz1udWxsIT09KGQ9YikmJnZvaWQgMCE9PWQmJm51bGwhPT0ocD1kLmF0dHJpYnV0ZXMpJiZ2b2lkIDAhPT1wJiZwLnhtbG5zP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhiLmF0dHJpYnV0ZXMueG1sbnMsXyk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChfKSxnLmFwcGVuZCh3KSxiLmF0dHJpYnV0ZXMmJnRoaXMuc2V0QXR0cmlidXRlcyh7aHRtbDp3LGVsZW1lbnQ6YixzdG9yYWdlOmUsaW50ZW50OnMsbGlua1NlcnZpY2U6cn0pLGIuY2hpbGRyZW4mJmIuY2hpbGRyZW4ubGVuZ3RoPjApdS5wdXNoKFtiLC0xLHddKTtlbHNlIGlmKGIudmFsdWUpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIudmFsdWUpO24uWGZhVGV4dC5zaG91bGRCdWlsZFRleHQoXykmJmYucHVzaChBKSx3LmFwcGVuZChBKX19ZWxzZXt2YXIgaz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiLnZhbHVlKTtmLnB1c2goayksZy5hcHBlbmQoayl9fX1lbHNlIHUucG9wKCl9dmFyIFMseD1vKGMucXVlcnlTZWxlY3RvckFsbCgiLnhmYU5vbkludGVyYWN0aXZlIGlucHV0LCAueGZhTm9uSW50ZXJhY3RpdmUgdGV4dGFyZWEiKSk7dHJ5e2Zvcih4LnMoKTshKFM9eC5uKCkpLmRvbmU7KVMudmFsdWUuc2V0QXR0cmlidXRlKCJyZWFkT25seSIsITApfWNhdGNoKHQpe3guZSh0KX1maW5hbGx5e3guZigpfXJldHVybnt0ZXh0RGl2czpmfX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTt0LmRpdi5zdHlsZS50cmFuc2Zvcm09ZSx0LmRpdi5oaWRkZW49ITF9fV0sbnVsbCYmdShlLnByb3RvdHlwZSxudWxsKSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYUxheWVyPWN9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlNWR0dyYXBoaWNzPXZvaWQgMDt2YXIgaT1yKDEzNyksYT1yKDEpLG89cigzKTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBoKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Yyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGgodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBoKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiBlJiZmKHQucHJvdG90eXBlLGUpLHImJmYodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgdj1kKChmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLCgwLGEudW5yZWFjaGFibGUpKCJOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzIil9KSk7ZS5TVkdHcmFwaGljcz12O3ZhciB5PWZ1bmN0aW9uKHQpe2lmKE51bWJlci5pc0ludGVnZXIodCkpcmV0dXJuIHQudG9TdHJpbmcoKTt2YXIgZT10LnRvRml4ZWQoMTApLHI9ZS5sZW5ndGgtMTtpZigiMCIhPT1lW3JdKXJldHVybiBlO2Rve3ItLX13aGlsZSgiMCI9PT1lW3JdKTtyZXR1cm4gZS5zdWJzdHJpbmcoMCwiLiI9PT1lW3JdP3I6cisxKX0sbT1mdW5jdGlvbih0KXtpZigwPT09dFs0XSYmMD09PXRbNV0pe2lmKDA9PT10WzFdJiYwPT09dFsyXSlyZXR1cm4gMT09PXRbMF0mJjE9PT10WzNdPyIiOiJzY2FsZSgiLmNvbmNhdCh5KHRbMF0pLCIgIikuY29uY2F0KHkodFszXSksIikiKTtpZih0WzBdPT09dFszXSYmdFsxXT09PS10WzJdKXt2YXIgZT0xODAqTWF0aC5hY29zKHRbMF0pL01hdGguUEk7cmV0dXJuInJvdGF0ZSgiLmNvbmNhdCh5KGUpLCIpIil9fWVsc2UgaWYoMT09PXRbMF0mJjA9PT10WzFdJiYwPT09dFsyXSYmMT09PXRbM10pcmV0dXJuInRyYW5zbGF0ZSgiLmNvbmNhdCh5KHRbNF0pLCIgIikuY29uY2F0KHkodFs1XSksIikiKTtyZXR1cm4ibWF0cml4KCIuY29uY2F0KHkodFswXSksIiAiKS5jb25jYXQoeSh0WzFdKSwiICIpLmNvbmNhdCh5KHRbMl0pLCIgIikuY29uY2F0KHkodFszXSksIiAiKS5jb25jYXQoeSh0WzRdKSwiICIpKyIiLmNvbmNhdCh5KHRbNV0pLCIpIil9LGc9Im5vcm1hbCIsYj0ibm9ybWFsIixfPSIjMDAwMDAwIix3PVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0sQT1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLGs9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihVUkwuY3JlYXRlT2JqZWN0VVJMJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJiFyKXJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSx7dHlwZTplfSkpO2Zvcih2YXIgbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGk9ImRhdGE6Ii5jb25jYXQoZSwiO2Jhc2U2NCwiKSxhPTAsbz10Lmxlbmd0aDthPG87YSs9Myl7dmFyIHM9MjU1JnRbYV0sbD0yNTUmdFthKzFdLHU9MjU1JnRbYSsyXTtpKz1uW3M+PjJdK25bKDMmcyk8PDR8bD4+NF0rblthKzE8bz8oMTUmbCk8PDJ8dT4+Njo2NF0rblthKzI8bz82MyZ1OjY0XX1yZXR1cm4gaX0sUz1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSksZT1uZXcgSW50MzJBcnJheSgyNTYpLHI9MDtyPDI1NjtyKyspe2Zvcih2YXIgbj1yLGk9MDtpPDg7aSsrKW49MSZuPzM5ODgyOTIzODRebj4+MSYyMTQ3NDgzNjQ3Om4+PjEmMjE0NzQ4MzY0NztlW3JdPW59ZnVuY3Rpb24gcyh0LHIsbixpKXt2YXIgYT1pLG89ci5sZW5ndGg7blthXT1vPj4yNCYyNTUsblthKzFdPW8+PjE2JjI1NSxuW2ErMl09bz4+OCYyNTUsblthKzNdPTI1NSZvLG5bYSs9NF09MjU1JnQuY2hhckNvZGVBdCgwKSxuW2ErMV09MjU1JnQuY2hhckNvZGVBdCgxKSxuW2ErMl09MjU1JnQuY2hhckNvZGVBdCgyKSxuW2ErM109MjU1JnQuY2hhckNvZGVBdCgzKSxhKz00LG4uc2V0KHIsYSk7dmFyIHM9ZnVuY3Rpb24odCxyLG4pe2Zvcih2YXIgaT0tMSxhPXI7YTxuO2ErKyl7dmFyIG89MjU1JihpXnRbYV0pO2k9aT4+PjheZVtvXX1yZXR1cm4tMV5pfShuLGkrNCxhKz1yLmxlbmd0aCk7blthXT1zPj4yNCYyNTUsblthKzFdPXM+PjE2JjI1NSxuW2ErMl09cz4+OCYyNTUsblthKzNdPTI1NSZzfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgscj02NTUzNSxuPU1hdGguY2VpbChlL3IpLGk9bmV3IFVpbnQ4QXJyYXkoMitlKzUqbis0KSxhPTA7aVthKytdPTEyMCxpW2ErK109MTU2O2Zvcih2YXIgbz0wO2U+cjspaVthKytdPTAsaVthKytdPTI1NSxpW2ErK109MjU1LGlbYSsrXT0wLGlbYSsrXT0wLGkuc2V0KHQuc3ViYXJyYXkobyxvK3IpLGEpLGErPXIsbys9cixlLT1yO2lbYSsrXT0xLGlbYSsrXT0yNTUmZSxpW2ErK109ZT4+OCYyNTUsaVthKytdPTI1NSZ+ZSxpW2ErK109KDY1NTM1Jn5lKT4+OCYyNTUsaS5zZXQodC5zdWJhcnJheShvKSxhKSxhKz10Lmxlbmd0aC1vO3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MSxpPTAsYT0wO2E8cjsrK2EpaT0oaSsobj0obisoMjU1JnRbYV0pKSU2NTUyMSkpJTY1NTIxO3JldHVybiBpPDwxNnxufSh0LDAsdC5sZW5ndGgpO3JldHVybiBpW2ErK109cz4+MjQmMjU1LGlbYSsrXT1zPj4xNiYyNTUsaVthKytdPXM+PjgmMjU1LGlbYSsrXT0yNTUmcyxpfXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe3ZhciB1LGMsaCxmPWUud2lkdGgsZD1lLmhlaWdodCxwPWUuZGF0YTtzd2l0Y2gocil7Y2FzZSBhLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpjPTAsdT0xLGg9Zis3Pj4zO2JyZWFrO2Nhc2UgYS5JbWFnZUtpbmQuUkdCXzI0QlBQOmM9Mix1PTgsaD0zKmY7YnJlYWs7Y2FzZSBhLkltYWdlS2luZC5SR0JBXzMyQlBQOmM9Nix1PTgsaD00KmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0Iil9Zm9yKHZhciB2PW5ldyBVaW50OEFycmF5KCgxK2gpKmQpLHk9MCxtPTAsZz0wO2c8ZDsrK2cpdlt5KytdPTAsdi5zZXQocC5zdWJhcnJheShtLG0raCkseSksbSs9aCx5Kz1oO2lmKHI9PT1hLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCYmaSl7eT0wO2Zvcih2YXIgYj0wO2I8ZDtiKyspe3krKztmb3IodmFyIF89MDtfPGg7XysrKXZbeSsrXV49MjU1fX12YXIgdz1uZXcgVWludDhBcnJheShbZj4+MjQmMjU1LGY+PjE2JjI1NSxmPj44JjI1NSwyNTUmZixkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHUsYywwLDAsMF0pLEE9ZnVuY3Rpb24odCl7aWYoIW8uaXNOb2RlSlMpcmV0dXJuIGwodCk7dHJ5e3ZhciBlO2U9cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKT49OD90OkJ1ZmZlci5mcm9tKHQpO3ZhciByPXJlcXVpcmUoInpsaWIiKS5kZWZsYXRlU3luYyhlLHtsZXZlbDo5fSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBVaW50OEFycmF5P3I6bmV3IFVpbnQ4QXJyYXkocil9Y2F0Y2godCl7KDAsYS53YXJuKSgiTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6ICIrdCl9cmV0dXJuIGwodCl9KHYpLFM9dC5sZW5ndGgrMzYrdy5sZW5ndGgrQS5sZW5ndGgseD1uZXcgVWludDhBcnJheShTKSxFPTA7cmV0dXJuIHguc2V0KHQsRSkscygiSUhEUiIsdyx4LEUrPXQubGVuZ3RoKSxzKCJJREFUQSIsQSx4LEUrPTEyK3cubGVuZ3RoKSxFKz0xMitBLmxlbmd0aCxzKCJJRU5EIixuZXcgVWludDhBcnJheSgwKSx4LEUpLGsoeCwiaW1hZ2UvcG5nIixuKX0oZSx2b2lkIDA9PT1lLmtpbmQ/YS5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6ZS5raW5kLHIsbil9fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLHRoaXMuZm9udFNpemVTY2FsZT0xLHRoaXMuZm9udFdlaWdodD1iLHRoaXMuZm9udFNpemU9MCx0aGlzLnRleHRNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwsdGhpcy50ZXh0TWF0cml4U2NhbGU9MSx0aGlzLng9MCx0aGlzLnk9MCx0aGlzLmxpbmVYPTAsdGhpcy5saW5lWT0wLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wLHRoaXMuZmlsbENvbG9yPV8sdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5maWxsQWxwaGE9MSx0aGlzLnN0cm9rZUFscGhhPTEsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmxpbmVKb2luPSIiLHRoaXMubGluZUNhcD0iIix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLmRhc2hBcnJheT1bXSx0aGlzLmRhc2hQaGFzZT0wLHRoaXMuZGVwZW5kZW5jaWVzPVtdLHRoaXMuYWN0aXZlQ2xpcFVybD1udWxsLHRoaXMuY2xpcEdyb3VwPW51bGwsdGhpcy5tYXNrSWQ9IiJ9cmV0dXJuIGQodCxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fSx7a2V5OiJzZXRDdXJyZW50UG9pbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9fV0pLHR9KCksRT0wLFA9MCxUPTA7ZS5TVkdHcmFwaGljcz12PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Zm9yKHZhciBvIGluIHAodGhpcyx0KSwoMCxpLmRlcHJlY2F0ZWQpKCJUaGUgU1ZHIGJhY2stZW5kIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGFuZCAqbWF5KiBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5zdmdGYWN0b3J5PW5ldyBpLkRPTVNWR0ZhY3RvcnksdGhpcy5jdXJyZW50PW5ldyB4LHRoaXMudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHRoaXMudHJhbnNmb3JtU3RhY2s9W10sdGhpcy5leHRyYVN0YWNrPVtdLHRoaXMuY29tbW9uT2Jqcz1lLHRoaXMub2Jqcz1yLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLnBlbmRpbmdFT0ZpbGw9ITEsdGhpcy5lbWJlZEZvbnRzPSExLHRoaXMuZW1iZWRkZWRGb250cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY3NzU3R5bGU9bnVsbCx0aGlzLmZvcmNlRGF0YVNjaGVtYT0hIW4sdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmc9W10sYS5PUFMpdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmdbYS5PUFNbb11dPW99cmV0dXJuIGQodCxbe2tleToiZ2V0T2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zdGFydHNXaXRoKCJnXyIpP3RoaXMuY29tbW9uT2Jqcy5nZXQodCk6dGhpcy5vYmpzLmdldCh0KTplfX0se2tleToic2F2ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy50cmFuc2Zvcm1NYXRyaXgpO3ZhciB0PXRoaXMuY3VycmVudDt0aGlzLmV4dHJhU3RhY2sucHVzaCh0KSx0aGlzLmN1cnJlbnQ9dC5jbG9uZSgpfX0se2tleToicmVzdG9yZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybU1hdHJpeD10aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpLHRoaXMuY3VycmVudD10aGlzLmV4dHJhU3RhY2sucG9wKCksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMudGdycD1udWxsfX0se2tleToiZ3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2F2ZSgpLHRoaXMuZXhlY3V0ZU9wVHJlZSh0KSx0aGlzLnJlc3RvcmUoKX19LHtrZXk6ImxvYWREZXBlbmRlbmNpZXMiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9dC5mbkFycmF5LG49dC5hcmdzQXJyYXksaT0wLG89ci5sZW5ndGg7aTxvO2krKylpZihyW2ldPT09YS5PUFMuZGVwZW5kZW5jeSl7dmFyIHMsbD11KG5baV0pO3RyeXt2YXIgYz1mdW5jdGlvbigpe3ZhciB0PXMudmFsdWUscj10LnN0YXJ0c1dpdGgoImdfIik/ZS5jb21tb25PYmpzOmUub2JqcyxuPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtyLmdldCh0LGUpfSkpO2UuY3VycmVudC5kZXBlbmRlbmNpZXMucHVzaChuKX07Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspYygpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX1yZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcyl9fSx7a2V5OiJ0cmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgcz1bdCxlLHIsbixpLG9dO3RoaXMudHJhbnNmb3JtTWF0cml4PWEuVXRpbC50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgscyksdGhpcy50Z3JwPW51bGx9fSx7a2V5OiJnZXRTVkciLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLnZpZXdwb3J0PWU7dmFyIG49dGhpcy5faW5pdGlhbGl6ZShlKTtyZXR1cm4gdGhpcy5sb2FkRGVwZW5kZW5jaWVzKHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHIudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHIuZXhlY3V0ZU9wVHJlZShyLmNvbnZlcnRPcExpc3QodCkpLG59KSl9fSx7a2V5OiJjb252ZXJ0T3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fb3BlcmF0b3JJZE1hcHBpbmcscj10LmFyZ3NBcnJheSxuPXQuZm5BcnJheSxpPVtdLGE9MCxvPW4ubGVuZ3RoO2E8bzthKyspe3ZhciBzPW5bYV07aS5wdXNoKHtmbklkOnMsZm46ZVtzXSxhcmdzOnJbYV19KX1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXSxuPVtdLGk9dSh0KTt0cnl7Zm9yKGkucygpOyEoZT1pLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWU7InNhdmUiIT09YS5mbj8icmVzdG9yZSI9PT1hLmZuP3I9bi5wb3AoKTpyLnB1c2goYSk6KHIucHVzaCh7Zm5JZDo5MixmbjoiZ3JvdXAiLGl0ZW1zOltdfSksbi5wdXNoKHIpLHI9ci5hdCgtMSkuaXRlbXMpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcn0oaSl9fSx7a2V5OiJleGVjdXRlT3BUcmVlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlLGk9bi5mbixvPW4uZm5JZCxzPW4uYXJncztzd2l0Y2goMHxvKXtjYXNlIGEuT1BTLmJlZ2luVGV4dDp0aGlzLmJlZ2luVGV4dCgpO2JyZWFrO2Nhc2UgYS5PUFMuZGVwZW5kZW5jeTpicmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6dGhpcy5zZXRMZWFkaW5nKHMpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGVhZGluZ01vdmVUZXh0OnRoaXMuc2V0TGVhZGluZ01vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGb250OnRoaXMuc2V0Rm9udChzKTticmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmNhc2UgYS5PUFMuc2hvd1NwYWNlZFRleHQ6dGhpcy5zaG93VGV4dChzWzBdKTticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6dGhpcy5lbmRUZXh0KCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDp0aGlzLm1vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRDaGFyU3BhY2luZzp0aGlzLnNldENoYXJTcGFjaW5nKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6dGhpcy5zZXRXb3JkU3BhY2luZyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEhTY2FsZTp0aGlzLnNldEhTY2FsZShzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRNYXRyaXg6dGhpcy5zZXRUZXh0TWF0cml4KHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRSaXNlOnRoaXMuc2V0VGV4dFJpc2Uoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTp0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZVdpZHRoOnRoaXMuc2V0TGluZVdpZHRoKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZUpvaW46dGhpcy5zZXRMaW5lSm9pbihzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldExpbmVDYXA6dGhpcy5zZXRMaW5lQ2FwKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TWl0ZXJMaW1pdDp0aGlzLnNldE1pdGVyTGltaXQoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsUkdCQ29sb3I6dGhpcy5zZXRGaWxsUkdCQ29sb3Ioc1swXSxzWzFdLHNbMl0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6dGhpcy5zZXRTdHJva2VSR0JDb2xvcihzWzBdLHNbMV0sc1syXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvck46dGhpcy5zZXRTdHJva2VDb2xvck4ocyk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOnRoaXMuc2V0RmlsbENvbG9yTihzKTticmVhaztjYXNlIGEuT1BTLnNoYWRpbmdGaWxsOnRoaXMuc2hhZGluZ0ZpbGwoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXREYXNoOnRoaXMuc2V0RGFzaChzWzBdLHNbMV0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50OnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0RmxhdG5lc3M6dGhpcy5zZXRGbGF0bmVzcyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEdTdGF0ZTp0aGlzLnNldEdTdGF0ZShzWzBdKTticmVhaztjYXNlIGEuT1BTLmZpbGw6dGhpcy5maWxsKCk7YnJlYWs7Y2FzZSBhLk9QUy5lb0ZpbGw6dGhpcy5lb0ZpbGwoKTticmVhaztjYXNlIGEuT1BTLnN0cm9rZTp0aGlzLnN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuZmlsbFN0cm9rZTp0aGlzLmZpbGxTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmVvRmlsbFN0cm9rZTp0aGlzLmVvRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xpcDp0aGlzLmNsaXAoIm5vbnplcm8iKTticmVhaztjYXNlIGEuT1BTLmVvQ2xpcDp0aGlzLmNsaXAoImV2ZW5vZGQiKTticmVhaztjYXNlIGEuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazp0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO2JyZWFrO2Nhc2UgYS5PUFMucGFpbnRJbWFnZVhPYmplY3Q6dGhpcy5wYWludEltYWdlWE9iamVjdChzWzBdKTticmVhaztjYXNlIGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OnRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6dGhpcy5wYWludEltYWdlTWFza1hPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW46dGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oc1swXSxzWzFdKTticmVhaztjYXNlIGEuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQ6dGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7YnJlYWs7Y2FzZSBhLk9QUy5jbG9zZVBhdGg6dGhpcy5jbG9zZVBhdGgoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlU3Ryb2tlOnRoaXMuY2xvc2VTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlRmlsbFN0cm9rZTp0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VFT0ZpbGxTdHJva2U6dGhpcy5jbG9zZUVPRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmU6dGhpcy5uZXh0TGluZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMudHJhbnNmb3JtKHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLmNvbnN0cnVjdFBhdGg6dGhpcy5jb25zdHJ1Y3RQYXRoKHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5lbmRQYXRoOnRoaXMuZW5kUGF0aCgpO2JyZWFrO2Nhc2UgOTI6dGhpcy5ncm91cChuLml0ZW1zKTticmVhaztkZWZhdWx0OigwLGEud2FybikoIlVuaW1wbGVtZW50ZWQgb3BlcmF0b3IgIi5jb25jYXQoaSkpfX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX0se2tleToic2V0V29yZFNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC53b3JkU3BhY2luZz10fX0se2tleToic2V0Q2hhclNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5jaGFyU3BhY2luZz10fX0se2tleToibmV4dExpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5tb3ZlVGV4dCgwLHRoaXMuY3VycmVudC5sZWFkaW5nKX19LHtrZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmN1cnJlbnQ7by50ZXh0TWF0cml4PW8ubGluZU1hdHJpeD1bdCxlLHIsbixpLGFdLG8udGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSxvLng9by5saW5lWD0wLG8ueT1vLmxpbmVZPTAsby54Y29vcmRzPVtdLG8ueWNvb3Jkcz1bXSxvLnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSxvLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtZmFtaWx5IixvLmZvbnRGYW1pbHkpLG8udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zaXplIiwiIi5jb25jYXQoeShvLmZvbnRTaXplKSwicHgiKSksby50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1vLnkpKSxvLnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0Iiksby50eHRFbGVtZW50LmFwcGVuZChvLnRzcGFuKX19LHtrZXk6ImJlZ2luVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC54PXQubGluZVg9MCx0Lnk9dC5saW5lWT0wLHQudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWCx0LmxpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdC50ZXh0TWF0cml4U2NhbGU9MSx0LnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSx0LnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0IiksdC50eHRncnA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpnIiksdC54Y29vcmRzPVtdLHQueWNvb3Jkcz1bXX19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY3VycmVudDtyLng9ci5saW5lWCs9dCxyLnk9ci5saW5lWSs9ZSxyLnhjb29yZHM9W10sci55Y29vcmRzPVtdLHIudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHIudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLHIuZm9udEZhbWlseSksci50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLCIiLmNvbmNhdCh5KHIuZm9udFNpemUpLCJweCIpKSxyLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLXIueSkpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udCxuPWUuZm9udFNpemU7aWYoMCE9PW4pe3ZhciBpLG89ZS5mb250U2l6ZVNjYWxlLHM9ZS5jaGFyU3BhY2luZyxsPWUud29yZFNwYWNpbmcsYz1lLmZvbnREaXJlY3Rpb24saD1lLnRleHRIU2NhbGUqYyxmPXIudmVydGljYWwsZD1mPzE6LTEscD1yLmRlZmF1bHRWTWV0cmljcyx2PW4qZS5mb250TWF0cml4WzBdLHc9MCxBPXUodCk7dHJ5e2ZvcihBLnMoKTshKGk9QS5uKCkpLmRvbmU7KXt2YXIgaz1pLnZhbHVlO2lmKG51bGwhPT1rKWlmKCJudW1iZXIiIT10eXBlb2Ygayl7dmFyIFM9KGsuaXNTcGFjZT9sOjApK3MseD1rLmZvbnRDaGFyLEU9dm9pZCAwLFA9dm9pZCAwLFQ9ay53aWR0aDtpZihmKXt2YXIgQz12b2lkIDAsTz1rLnZtZXRyaWN8fHA7Qz0tKEM9ay52bWV0cmljP09bMV06LjUqVCkqdjt2YXIgRj1PWzJdKnY7VD1PPy1PWzBdOlQsRT1DL28sUD0odytGKS9vfWVsc2UgRT13L28sUD0wOyhrLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSYmKGUueGNvb3Jkcy5wdXNoKGUueCtFKSxmJiZlLnljb29yZHMucHVzaCgtZS55K1ApLGUudHNwYW4udGV4dENvbnRlbnQrPXgpLHcrPWY/VCp2LVMqYzpUKnYrUypjfWVsc2Ugdys9ZCprKm4vMWUzO2Vsc2Ugdys9YypsfX1jYXRjaCh0KXtBLmUodCl9ZmluYWxseXtBLmYoKX1lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLGUueGNvb3Jkcy5tYXAoeSkuam9pbigiICIpKSxmP2UudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZS55Y29vcmRzLm1hcCh5KS5qb2luKCIgIikpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIseSgtZS55KSksZj9lLnktPXc6ZS54Kz13KmgsZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtc2l6ZSIsIiIuY29uY2F0KHkoZS5mb250U2l6ZSksInB4IikpLGUuZm9udFN0eWxlIT09ZyYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXN0eWxlIixlLmZvbnRTdHlsZSksZS5mb250V2VpZ2h0IT09YiYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KTt2YXIgTT1lLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztpZihNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMfHxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRT8oZS5maWxsQ29sb3IhPT1fJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLGUuZmlsbENvbG9yKSxlLmZpbGxBbHBoYTwxJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsZS5maWxsQWxwaGEpKTplLnRleHRSZW5kZXJpbmdNb2RlPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSD9lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJ0cmFuc3BhcmVudCIpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0V8fE09PT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKXt2YXIgUj0xLyhlLnRleHRNYXRyaXhTY2FsZXx8MSk7dGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhlLnRzcGFuLFIpfXZhciBJPWUudGV4dE1hdHJpeDswIT09ZS50ZXh0UmlzZSYmKChJPUkuc2xpY2UoKSlbNV0rPWUudGV4dFJpc2UpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCIiLmNvbmNhdChtKEkpLCIgc2NhbGUoIikuY29uY2F0KHkoaCksIiwgLTEpIikpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxlLnR4dEVsZW1lbnQuYXBwZW5kKGUudHNwYW4pLGUudHh0Z3JwLmFwcGVuZChlLnR4dEVsZW1lbnQpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGUudHh0RWxlbWVudCl9fX0se2tleToic2V0TGVhZGluZ01vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2V0TGVhZGluZygtZSksdGhpcy5tb3ZlVGV4dCh0LGUpfX0se2tleToiYWRkRm9udFN0eWxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5kYXRhKXRocm93IG5ldyBFcnJvcignYWRkRm9udFN0eWxlOiBObyBmb250IGRhdGEgYXZhaWxhYmxlLCBlbnN1cmUgdGhhdCB0aGUgImZvbnRFeHRyYVByb3BlcnRpZXMiIEFQSSBwYXJhbWV0ZXIgaXMgc2V0LicpO3RoaXMuY3NzU3R5bGV8fCh0aGlzLmNzc1N0eWxlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6c3R5bGUiKSx0aGlzLmNzc1N0eWxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInR5cGUiLCJ0ZXh0L2NzcyIpLHRoaXMuZGVmcy5hcHBlbmQodGhpcy5jc3NTdHlsZSkpO3ZhciBlPWsodC5kYXRhLHQubWltZXR5cGUsdGhpcy5mb3JjZURhdGFTY2hlbWEpO3RoaXMuY3NzU3R5bGUudGV4dENvbnRlbnQrPSdAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6ICInLmNvbmNhdCh0LmxvYWRlZE5hbWUsJyI7JykrIiBzcmM6IHVybCgiLmNvbmNhdChlLCIpOyB9XG4iKX19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPXRoaXMuY29tbW9uT2Jqcy5nZXQodFswXSksbj10WzFdO2UuZm9udD1yLCF0aGlzLmVtYmVkRm9udHN8fHIubWlzc2luZ0ZpbGV8fHRoaXMuZW1iZWRkZWRGb250c1tyLmxvYWRlZE5hbWVdfHwodGhpcy5hZGRGb250U3R5bGUociksdGhpcy5lbWJlZGRlZEZvbnRzW3IubG9hZGVkTmFtZV09ciksZS5mb250TWF0cml4PXIuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWDt2YXIgaT0ibm9ybWFsIjtyLmJsYWNrP2k9IjkwMCI6ci5ib2xkJiYoaT0iYm9sZCIpO3ZhciBvPXIuaXRhbGljPyJpdGFsaWMiOiJub3JtYWwiO248MD8obj0tbixlLmZvbnREaXJlY3Rpb249LTEpOmUuZm9udERpcmVjdGlvbj0xLGUuZm9udFNpemU9bixlLmZvbnRGYW1pbHk9ci5sb2FkZWROYW1lLGUuZm9udFdlaWdodD1pLGUuZm9udFN0eWxlPW8sZS50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1lLnkpKSxlLnhjb29yZHM9W10sZS55Y29vcmRzPVtdfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuY3VycmVudDtlLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyYmbnVsbCE9PSh0PWUudHh0RWxlbWVudCkmJnZvaWQgMCE9PXQmJnQuaGFzQ2hpbGROb2RlcygpJiYoZS5lbGVtZW50PWUudHh0RWxlbWVudCx0aGlzLmNsaXAoIm5vbnplcm8iKSx0aGlzLmVuZFBhdGgoKSl9fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q+MCYmKHRoaXMuY3VycmVudC5saW5lV2lkdGg9dCl9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGluZUNhcD13W3RdfX0se2tleToic2V0TGluZUpvaW4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5saW5lSm9pbj1BW3RdfX0se2tleToic2V0TWl0ZXJMaW1pdCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldFN0cm9rZUFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9dH19LHtrZXk6InNldFN0cm9rZVJHQkNvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpfX0se2tleToic2V0RmlsbEFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbEFscGhhPXR9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpLHRoaXMuY3VycmVudC50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksdGhpcy5jdXJyZW50Lnhjb29yZHM9W10sdGhpcy5jdXJyZW50Lnljb29yZHM9W119fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5zdHJva2VDb2xvcj10aGlzLl9tYWtlQ29sb3JOX1BhdHRlcm4odCl9fSx7a2V5OiJzZXRGaWxsQ29sb3JOIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPXRoaXMuX21ha2VDb2xvck5fUGF0dGVybih0KX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnZpZXdwb3J0LndpZHRoLHI9dGhpcy52aWV3cG9ydC5oZWlnaHQsbj1hLlV0aWwuaW52ZXJzZVRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCksaT1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0sbiksbz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAscl0sbikscz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2UsMF0sbiksbD1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2Uscl0sbiksdT1NYXRoLm1pbihpWzBdLG9bMF0sc1swXSxsWzBdKSxjPU1hdGgubWluKGlbMV0sb1sxXSxzWzFdLGxbMV0pLGg9TWF0aC5tYXgoaVswXSxvWzBdLHNbMF0sbFswXSksZj1NYXRoLm1heChpWzFdLG9bMV0sc1sxXSxsWzFdKSxkPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2Quc2V0QXR0cmlidXRlTlMobnVsbCwieCIsdSksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixjKSxkLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixoLXUpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixmLWMpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpKSx0aGlzLmN1cnJlbnQuZmlsbEFscGhhPDEmJmQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1vcGFjaXR5Iix0aGlzLmN1cnJlbnQuZmlsbEFscGhhKSx0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChkKX19LHtrZXk6Il9tYWtlQ29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJUaWxpbmdQYXR0ZXJuIj09PXRbMF0/dGhpcy5fbWFrZVRpbGluZ1BhdHRlcm4odCk6dGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpfX0se2tleToiX21ha2VUaWxpbmdQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10WzFdLHI9dFsyXSxuPXRbM118fGEuSURFTlRJVFlfTUFUUklYLGk9bCh0WzRdLDQpLG89aVswXSx1PWlbMV0sYz1pWzJdLGg9aVszXSxmPXRbNV0sZD10WzZdLHA9dFs3XSx2PSJzaGFkaW5nIi5jb25jYXQoVCsrKSx5PWwoYS5VdGlsLm5vcm1hbGl6ZVJlY3QoW10uY29uY2F0KHMoYS5VdGlsLmFwcGx5VHJhbnNmb3JtKFtvLHVdLG4pKSxzKGEuVXRpbC5hcHBseVRyYW5zZm9ybShbYyxoXSxuKSkpKSw0KSxtPXlbMF0sZz15WzFdLGI9eVsyXSxfPXlbM10sdz1sKGEuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShuKSwyKSxBPWYqd1swXSxrPWQqd1sxXSxTPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0dGVybiIpO1Muc2V0QXR0cmlidXRlTlMobnVsbCwiaWQiLHYpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwicGF0dGVyblVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixBKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsayksUy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiIi5jb25jYXQobSkpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIiIuY29uY2F0KGcpKTt2YXIgeD10aGlzLnN2ZyxFPXRoaXMudHJhbnNmb3JtTWF0cml4LFA9dGhpcy5jdXJyZW50LmZpbGxDb2xvcixDPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcixPPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoYi1tLF8tZyk7aWYodGhpcy5zdmc9Tyx0aGlzLnRyYW5zZm9ybU1hdHJpeD1uLDI9PT1wKXt2YXIgRj1hLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGEuVXRpbCxzKGUpKTt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPUYsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUZ9cmV0dXJuIHRoaXMuZXhlY3V0ZU9wVHJlZSh0aGlzLmNvbnZlcnRPcExpc3QocikpLHRoaXMuc3ZnPXgsdGhpcy50cmFuc2Zvcm1NYXRyaXg9RSx0aGlzLmN1cnJlbnQuZmlsbENvbG9yPVAsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUMsUy5hcHBlbmQoTy5jaGlsZE5vZGVzWzBdKSx0aGlzLmRlZnMuYXBwZW5kKFMpLCJ1cmwoIyIuY29uY2F0KHYsIikiKX19LHtrZXk6Il9tYWtlU2hhZGluZ1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIHQmJih0PXRoaXMub2Jqcy5nZXQodCkpLHRbMF0pe2Nhc2UiUmFkaWFsQXhpYWwiOnZhciBlLHI9InNoYWRpbmciLmNvbmNhdChUKyspLG49dFszXTtzd2l0Y2godFsxXSl7Y2FzZSJheGlhbCI6dmFyIGk9dFs0XSxvPXRbNV07KGU9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpsaW5lYXJHcmFkaWVudCIpKS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsciksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJncmFkaWVudFVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngxIixpWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkxIixpWzFdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngyIixvWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkyIixvWzFdKTticmVhaztjYXNlInJhZGlhbCI6dmFyIHM9dFs0XSxsPXRbNV0sYz10WzZdLGg9dFs3XTsoZT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJhZGlhbEdyYWRpZW50IikpLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixyKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLGxbMF0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLGxbMV0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsaCksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeCIsc1swXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeSIsc1sxXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmciIsYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gUmFkaWFsQXhpYWwgdHlwZTogIi5jb25jYXQodFsxXSkpfXZhciBmLGQ9dShuKTt0cnl7Zm9yKGQucygpOyEoZj1kLm4oKSkuZG9uZTspe3ZhciBwPWYudmFsdWUsdj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnN0b3AiKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsIm9mZnNldCIscFswXSksdi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdG9wLWNvbG9yIixwWzFdKSxlLmFwcGVuZCh2KX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9cmV0dXJuIHRoaXMuZGVmcy5hcHBlbmQoZSksInVybCgjIi5jb25jYXQociwiKSIpO2Nhc2UiTWVzaCI6cmV0dXJuKDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBwYXR0ZXJuIE1lc2giKSxudWxsO2Nhc2UiRHVtbXkiOnJldHVybiJob3RwaW5rIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBJUiB0eXBlOiAiLmNvbmNhdCh0WzBdKSl9fX0se2tleToic2V0RGFzaCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLmN1cnJlbnQuZGFzaEFycmF5PXQsdGhpcy5jdXJyZW50LmRhc2hQaGFzZT1lfX0se2tleToiY29uc3RydWN0UGF0aCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuY3VycmVudCxpPW4ueCxvPW4ueSxzPVtdLGw9MCxjPXUodCk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXN3aXRjaCgwfHIudmFsdWUpe2Nhc2UgYS5PUFMucmVjdGFuZ2xlOmk9ZVtsKytdLG89ZVtsKytdO3ZhciBoPWVbbCsrXSxmPWVbbCsrXSxkPWkraCxwPW8rZjtzLnB1c2goIk0iLHkoaSkseShvKSwiTCIseShkKSx5KG8pLCJMIix5KGQpLHkocCksIkwiLHkoaSkseShwKSwiWiIpO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmk9ZVtsKytdLG89ZVtsKytdLHMucHVzaCgiTSIseShpKSx5KG8pKTticmVhaztjYXNlIGEuT1BTLmxpbmVUbzppPWVbbCsrXSxvPWVbbCsrXSxzLnB1c2goIkwiLHkoaSkseShvKSk7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvOmk9ZVtsKzRdLG89ZVtsKzVdLHMucHVzaCgiQyIseShlW2xdKSx5KGVbbCsxXSkseShlW2wrMl0pLHkoZVtsKzNdKSx5KGkpLHkobykpLGwrPTY7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvMjpzLnB1c2goIkMiLHkoaSkseShvKSx5KGVbbF0pLHkoZVtsKzFdKSx5KGVbbCsyXSkseShlW2wrM10pKSxpPWVbbCsyXSxvPWVbbCszXSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY3VydmVUbzM6aT1lW2wrMl0sbz1lW2wrM10scy5wdXNoKCJDIix5KGVbbF0pLHkoZVtsKzFdKSx5KGkpLHkobykseShpKSx5KG8pKSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VQYXRoOnMucHVzaCgiWiIpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX1zPXMuam9pbigiICIpLG4ucGF0aCYmdC5sZW5ndGg+MCYmdFswXSE9PWEuT1BTLnJlY3RhbmdsZSYmdFswXSE9PWEuT1BTLm1vdmVUbz9zPW4ucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIikrczoobi5wYXRoPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0aCIpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKG4ucGF0aCkpLG4ucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIixzKSxuLnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxuLmVsZW1lbnQ9bi5wYXRoLG4uc2V0Q3VycmVudFBvaW50KGksbyl9fSx7a2V5OiJlbmRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VycmVudDtpZih0LnBhdGg9bnVsbCx0aGlzLnBlbmRpbmdDbGlwKWlmKHQuZWxlbWVudCl7dmFyIGU9ImNsaXBwYXRoIi5jb25jYXQoRSsrKSxyPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6Y2xpcFBhdGgiKTtyLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixlKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO3ZhciBuPXQuZWxlbWVudC5jbG9uZU5vZGUoITApO2lmKCJldmVub2RkIj09PXRoaXMucGVuZGluZ0NsaXA/bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJldmVub2RkIik6bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJub256ZXJvIiksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHIuYXBwZW5kKG4pLHRoaXMuZGVmcy5hcHBlbmQociksdC5hY3RpdmVDbGlwVXJsKXt0LmNsaXBHcm91cD1udWxsO3ZhciBpLGE9dSh0aGlzLmV4dHJhU3RhY2spO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOylpLnZhbHVlLmNsaXBHcm91cD1udWxsfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXIuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIix0LmFjdGl2ZUNsaXBVcmwpfXQuYWN0aXZlQ2xpcFVybD0idXJsKCMiLmNvbmNhdChlLCIpIiksdGhpcy50Z3JwPW51bGx9ZWxzZSB0aGlzLnBlbmRpbmdDbGlwPW51bGx9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnBlbmRpbmdDbGlwPXR9fSx7a2V5OiJjbG9zZVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O2lmKHQucGF0aCl7dmFyIGU9IiIuY29uY2F0KHQucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiksIloiKTt0LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsZSl9fX0se2tleToic2V0TGVhZGluZyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LmxlYWRpbmc9LXR9fSx7a2V5OiJzZXRUZXh0UmlzZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSaXNlPXR9fSx7a2V5OiJzZXRUZXh0UmVuZGVyaW5nTW9kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlPXR9fSx7a2V5OiJzZXRIU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPXQvMTAwfX0se2tleToic2V0UmVuZGVyaW5nSW50ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt9fSx7a2V5OiJzZXRGbGF0bmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1sKGUudmFsdWUsMiksaT1uWzBdLG89blsxXTtzd2l0Y2goaSl7Y2FzZSJMVyI6dGhpcy5zZXRMaW5lV2lkdGgobyk7YnJlYWs7Y2FzZSJMQyI6dGhpcy5zZXRMaW5lQ2FwKG8pO2JyZWFrO2Nhc2UiTEoiOnRoaXMuc2V0TGluZUpvaW4obyk7YnJlYWs7Y2FzZSJNTCI6dGhpcy5zZXRNaXRlckxpbWl0KG8pO2JyZWFrO2Nhc2UiRCI6dGhpcy5zZXREYXNoKG9bMF0sb1sxXSk7YnJlYWs7Y2FzZSJSSSI6dGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQobyk7YnJlYWs7Y2FzZSJGTCI6dGhpcy5zZXRGbGF0bmVzcyhvKTticmVhaztjYXNlIkZvbnQiOnRoaXMuc2V0Rm9udChvKTticmVhaztjYXNlIkNBIjp0aGlzLnNldFN0cm9rZUFscGhhKG8pO2JyZWFrO2Nhc2UiY2EiOnRoaXMuc2V0RmlsbEFscGhhKG8pO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIuY29uY2F0KGkpKX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX19LHtrZXk6ImZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O3QuZWxlbWVudCYmKHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIix0LmZpbGxDb2xvciksdC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsdC5maWxsQWxwaGEpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6InN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC5lbGVtZW50JiYodGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyh0LmVsZW1lbnQpLHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6Il9zZXRTdHJva2VBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPXRoaXMuY3VycmVudCxuPXIuZGFzaEFycmF5OzEhPT1lJiZuLmxlbmd0aD4wJiYobj1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUqdH0pKSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UiLHIuc3Ryb2tlQ29sb3IpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW9wYWNpdHkiLHIuc3Ryb2tlQWxwaGEpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW1pdGVybGltaXQiLHkoci5taXRlckxpbWl0KSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtbGluZWNhcCIsci5saW5lQ2FwKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1saW5lam9pbiIsci5saW5lSm9pbiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLHkoZSpyLmxpbmVXaWR0aCkrInB4IiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtZGFzaGFycmF5IixuLm1hcCh5KS5qb2luKCIgIikpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLWRhc2hvZmZzZXQiLHkoZSpyLmRhc2hQaGFzZSkrInB4Iil9fSx7a2V5OiJlb0ZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3Ryb2tlKCksdGhpcy5maWxsKCl9fSx7a2V5OiJlb0ZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5lb0ZpbGxTdHJva2UoKX19LHtrZXk6InBhaW50U29saWRDb2xvckltYWdlTWFzayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJlY3QiKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLCIwIiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IiwiMCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIxcHgiKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsIjFweCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5jdXJyZW50LmZpbGxDb2xvciksdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmQodCl9fSx7a2V5OiJwYWludEltYWdlWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodCk7ZT90aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGUpOigwLGEud2FybikoIkRlcGVuZGVudCBpbWFnZSB3aXRoIG9iamVjdCBJRCAiLmNvbmNhdCh0LCIgaXMgbm90IHJlYWR5IHlldCIpKX19LHtrZXk6InBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPVModCx0aGlzLmZvcmNlRGF0YVNjaGVtYSwhIWUpLGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIseShuKSksdGhpcy5jdXJyZW50LmVsZW1lbnQ9YSx0aGlzLmNsaXAoIm5vbnplcm8iKTt2YXIgbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmltYWdlIik7by5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmhyZWYiLGkpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLW4pKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwic2NhbGUoIi5jb25jYXQoeSgxL3IpLCIgIikuY29uY2F0KHkoLTEvbiksIikiKSksZT9lLmFwcGVuZChvKTp0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChvKX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodC5kYXRhLHQpO2lmKGUuYml0bWFwKSgwLGEud2FybikoInBhaW50SW1hZ2VNYXNrWE9iamVjdDogSW1hZ2VCaXRtYXAgc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQsIGVuc3VyZSB0aGF0IHRoZSBgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWRgIEFQSSBwYXJhbWV0ZXIgaXMgZGlzYWJsZWQuIik7ZWxzZXt2YXIgcj10aGlzLmN1cnJlbnQsbj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1yLmZpbGxDb2xvcjtyLm1hc2tJZD0ibWFzayIuY29uY2F0KFArKyk7dmFyIHM9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzptYXNrIik7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsci5tYXNrSWQpO3ZhciBsPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2wuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxsLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLCIwIiksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIseShuKSksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLHkoaSkpLGwuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsbyksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJtYXNrIiwidXJsKCMiLmNvbmNhdChyLm1hc2tJZCwiKSIpKSx0aGlzLmRlZnMuYXBwZW5kKHMpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGwpLHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSxzKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSYmNj09PXQubGVuZ3RoJiZ0aGlzLnRyYW5zZm9ybSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSksZSl7dmFyIHI9ZVsyXS1lWzBdLG49ZVszXS1lWzFdLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixlWzBdKSxpLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLGVbMV0pLGkuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLHkocikpLGkuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKSx0aGlzLmN1cnJlbnQuZWxlbWVudD1pLHRoaXMuY2xpcCgibm9uemVybyIpLHRoaXMuZW5kUGF0aCgpfX19LHtrZXk6InBhaW50Rm9ybVhPYmplY3RFbmQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodC53aWR0aCx0LmhlaWdodCkscj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmRlZnMiKTtlLmFwcGVuZChyKSx0aGlzLmRlZnM9cjt2YXIgbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLG0odC50cmFuc2Zvcm0pKSxlLmFwcGVuZChuKSx0aGlzLnN2Zz1uLGV9fSx7a2V5OiJfZW5zdXJlQ2xpcEdyb3VwIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsImNsaXAtcGF0aCIsdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmwpLHRoaXMuc3ZnLmFwcGVuZCh0KSx0aGlzLmN1cnJlbnQuY2xpcEdyb3VwPXR9cmV0dXJuIHRoaXMuY3VycmVudC5jbGlwR3JvdXB9fSx7a2V5OiJfZW5zdXJlVHJhbnNmb3JtR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGdycHx8KHRoaXMudGdycD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKSx0aGlzLnRncnAuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIixtKHRoaXMudHJhbnNmb3JtTWF0cml4KSksdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmw/dGhpcy5fZW5zdXJlQ2xpcEdyb3VwKCkuYXBwZW5kKHRoaXMudGdycCk6dGhpcy5zdmcuYXBwZW5kKHRoaXMudGdycCkpLHRoaXMudGdycH19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERk5vZGVTdHJlYW09dm9pZCAwO3ZhciBuPXIoMSksaT1yKDE2Mik7ZnVuY3Rpb24gYSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZvKHQsZSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbyh0LGUpfWZ1bmN0aW9uIHModCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49bCh0KTtpZihlKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PWYoZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGwodCl9ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxhPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtsKHt9LCIiKX1jYXRjaCh0KXtsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGgodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9Yzt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtsKG0sYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsYSkmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2wodCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8scyl7dmFyIGw9aCh0W25dLHQsYSk7aWYoInRocm93IiE9PWwudHlwZSl7dmFyIHU9bC5hcmcsYz11LnZhbHVlO3JldHVybiBjJiYib2JqZWN0Ij09ZihjKSYmci5jYWxsKGMsIl9fYXdhaXQiKT9lLnJlc29sdmUoYy5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8scyl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxzKX0pKTplLnJlc29sdmUoYykudGhlbigoZnVuY3Rpb24odCl7dS52YWx1ZT10LG8odSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8scyl9KSl9cyhsLmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWgodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1oKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W2FdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWwoeSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksbCh0LHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksbChBLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShjKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksbChfLHMsIkdlbmVyYXRvciIpLGwoXyxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIGYodCl7cmV0dXJuIGY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGYodCl9ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWYodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09ZihpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIG09cmVxdWlyZSgiZnMiKSxnPXJlcXVpcmUoImh0dHAiKSxiPXJlcXVpcmUoImh0dHBzIiksXz1yZXF1aXJlKCJ1cmwiKSx3PS9eZmlsZTpcL1wvXC9bYS16QS1aXTpcLy8sQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbjtwKHRoaXMsdCksdGhpcy5zb3VyY2U9ZSx0aGlzLnVybD0ocj1lLnVybCwiZmlsZToiPT09KG49Xy5wYXJzZShyKSkucHJvdG9jb2x8fG4uaG9zdD9uOi9eW2Etel06Wy9cXF0vaS50ZXN0KHIpP18ucGFyc2UoImZpbGU6Ly8vIi5jb25jYXQocikpOihuLmhvc3R8fChuLnByb3RvY29sPSJmaWxlOiIpLG4pKSx0aGlzLmlzSHR0cD0iaHR0cDoiPT09dGhpcy51cmwucHJvdG9jb2x8fCJodHRwczoiPT09dGhpcy51cmwucHJvdG9jb2wsdGhpcy5pc0ZzVXJsPSJmaWxlOiI9PT10aGlzLnVybC5wcm90b2NvbCx0aGlzLmh0dHBIZWFkZXJzPXRoaXMuaXNIdHRwJiZlLmh0dHBIZWFkZXJzfHx7fSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIHkodCxbe2tleToiX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9PSh0PW51bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWU/dm9pZCAwOmUuX2xvYWRlZCkmJnZvaWQgMCE9PXQ/dDowfX0se2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZOb2RlU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9dGhpcy5pc0ZzVXJsP25ldyBUKHRoaXMpOm5ldyBFKHRoaXMpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfX0se2tleToiZ2V0UmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoZTw9dGhpcy5fcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybiBudWxsO3ZhciByPXRoaXMuaXNGc1VybD9uZXcgQyh0aGlzLHQsZSk6bmV3IFAodGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZOb2RlU3RyZWFtPUE7dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3AodGhpcyx0KSx0aGlzLl91cmw9ZS51cmwsdGhpcy5fZG9uZT0hMSx0aGlzLl9zdG9yZWRFcnJvcj1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsO3ZhciByPWUuc291cmNlO3RoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fbG9hZGVkPTAsdGhpcy5fZmlsZW5hbWU9bnVsbCx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX3JhbmdlQ2h1bmtTaXplPXIucmFuZ2VDaHVua1NpemUsdGhpcy5fcmFuZ2VDaHVua1NpemV8fHRoaXMuX2Rpc2FibGVSYW5nZXx8KHRoaXMuX2Rpc2FibGVSYW5nZT0hMCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSFyLmRpc2FibGVSYW5nZSx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faGVhZGVyc0NhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSksaT1uZXcgVWludDhBcnJheShyKS5idWZmZXIsdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmksZG9uZTohMX0pO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRhYmxlU3RyZWFtP3RoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodCk6dGhpcy5fZXJyb3IodCl9fSx7a2V5OiJfZXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPXQsdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX3NldFJlYWRhYmxlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3JlYWRhYmxlU3RyZWFtPXQsdC5vbigicmVhZGFibGUiLChmdW5jdGlvbigpe2UuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlbmQiLChmdW5jdGlvbigpe3QuZGVzdHJveSgpLGUuX2RvbmU9ITAsZS5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfSkpLHQub24oImVycm9yIiwoZnVuY3Rpb24odCl7ZS5fZXJyb3IodCl9KSksIXRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZ0aGlzLl9lcnJvcihuZXcgbi5BYm9ydEV4Y2VwdGlvbigic3RyZWFtaW5nIGlzIGRpc2FibGVkIikpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtwKHRoaXMsdCksdGhpcy5fdXJsPWUudXJsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9bnVsbCx0aGlzLm9uUHJvZ3Jlc3M9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dmFyIHI9ZS5zb3VyY2U7dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLGk9bmV3IFVpbnQ4QXJyYXkocikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTppLGRvbmU6ITF9KTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9yZWFkYWJsZVN0cmVhbT90aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHQpOnRoaXMuX2Vycm9yKHQpfX0se2tleToiX2Vycm9yIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9zdG9yZWRFcnJvcj10LHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6Il9zZXRSZWFkYWJsZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkYWJsZVN0cmVhbT10LHQub24oInJlYWRhYmxlIiwoZnVuY3Rpb24oKXtlLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCl9KSksdC5vbigiZW5kIiwoZnVuY3Rpb24oKXt0LmRlc3Ryb3koKSxlLl9kb25lPSEwLGUuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe2UuX2Vycm9yKHQpfSkpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKTtmdW5jdGlvbiB4KHQsZSl7cmV0dXJue3Byb3RvY29sOnQucHJvdG9jb2wsYXV0aDp0LmF1dGgsaG9zdDp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGg6dC5wYXRoLG1ldGhvZDoiR0VUIixoZWFkZXJzOmV9fXZhciBFPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGE7cCh0aGlzLHIpO3ZhciBvPWZ1bmN0aW9uKGUpe2lmKDQwND09PWUuc3RhdHVzQ29kZSl7dmFyIHI9bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicuY29uY2F0KGEuX3VybCwnIi4nKSk7cmV0dXJuIGEuX3N0b3JlZEVycm9yPXIsdm9pZCBhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3Qocil9YS5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpLGEuX3NldFJlYWRhYmxlU3RyZWFtKGUpO3ZhciBvPWZ1bmN0aW9uKHQpe3JldHVybiBhLl9yZWFkYWJsZVN0cmVhbS5oZWFkZXJzW3QudG9Mb3dlckNhc2UoKV19LHM9KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOm8saXNIdHRwOnQuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOmEuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTphLl9kaXNhYmxlUmFuZ2V9KSxsPXMuYWxsb3dSYW5nZVJlcXVlc3RzLHU9cy5zdWdnZXN0ZWRMZW5ndGg7YS5faXNSYW5nZVN1cHBvcnRlZD1sLGEuX2NvbnRlbnRMZW5ndGg9dXx8YS5fY29udGVudExlbmd0aCxhLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKG8pfTtyZXR1cm4oYT1lLmNhbGwodGhpcyx0KSkuX3JlcXVlc3Q9bnVsbCwiaHR0cDoiPT09YS5fdXJsLnByb3RvY29sP2EuX3JlcXVlc3Q9Zy5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pOmEuX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pLGEuX3JlcXVlc3Qub24oImVycm9yIiwoZnVuY3Rpb24odCl7YS5fc3RvcmVkRXJyb3I9dCxhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QodCl9KSksYS5fcmVxdWVzdC5lbmQoKSxhfXJldHVybiB5KHIpfShrKSxQPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxpLGEpe3ZhciBvO2Zvcih2YXIgcyBpbiBwKHRoaXMsciksKG89ZS5jYWxsKHRoaXMsdCkpLl9odHRwSGVhZGVycz17fSx0Lmh0dHBIZWFkZXJzKXt2YXIgbD10Lmh0dHBIZWFkZXJzW3NdO3ZvaWQgMCE9PWwmJihvLl9odHRwSGVhZGVyc1tzXT1sKX1vLl9odHRwSGVhZGVycy5SYW5nZT0iYnl0ZXM9Ii5jb25jYXQoaSwiLSIpLmNvbmNhdChhLTEpO3ZhciB1PWZ1bmN0aW9uKHQpe2lmKDQwNCE9PXQuc3RhdHVzQ29kZSlvLl9zZXRSZWFkYWJsZVN0cmVhbSh0KTtlbHNle3ZhciBlPW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChvLl91cmwsJyIuJykpO28uX3N0b3JlZEVycm9yPWV9fTtyZXR1cm4gby5fcmVxdWVzdD1udWxsLCJodHRwOiI9PT1vLl91cmwucHJvdG9jb2w/by5fcmVxdWVzdD1nLnJlcXVlc3QoeChvLl91cmwsby5faHR0cEhlYWRlcnMpLHUpOm8uX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoby5fdXJsLG8uX2h0dHBIZWFkZXJzKSx1KSxvLl9yZXF1ZXN0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe28uX3N0b3JlZEVycm9yPXR9KSksby5fcmVxdWVzdC5lbmQoKSxvfXJldHVybiB5KHIpfShTKSxUPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGk7cCh0aGlzLHIpLGk9ZS5jYWxsKHRoaXMsdCk7dmFyIGE9ZGVjb2RlVVJJQ29tcG9uZW50KGkuX3VybC5wYXRoKTtyZXR1cm4gdy50ZXN0KGkuX3VybC5ocmVmKSYmKGE9YS5yZXBsYWNlKC9eXC8vLCIiKSksbS5sc3RhdChhLChmdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIkVOT0VOVCI9PT10LmNvZGUmJih0PW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChhLCciLicpKSksaS5fc3RvcmVkRXJyb3I9dCx2b2lkIGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCh0KTtpLl9jb250ZW50TGVuZ3RoPWUuc2l6ZSxpLl9zZXRSZWFkYWJsZVN0cmVhbShtLmNyZWF0ZVJlYWRTdHJlYW0oYSkpLGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxpfXJldHVybiB5KHIpfShrKSxDPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxuLGkpe3ZhciBhO3AodGhpcyxyKSxhPWUuY2FsbCh0aGlzLHQpO3ZhciBvPWRlY29kZVVSSUNvbXBvbmVudChhLl91cmwucGF0aCk7cmV0dXJuIHcudGVzdChhLl91cmwuaHJlZikmJihvPW8ucmVwbGFjZSgvXlwvLywiIikpLGEuX3NldFJlYWRhYmxlU3RyZWFtKG0uY3JlYXRlUmVhZFN0cmVhbShvLHtzdGFydDpuLGVuZDppLTF9KSksYX1yZXR1cm4geShyKX0oUyl9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQwND09PXR8fDA9PT10JiZlLnN0YXJ0c1dpdGgoImZpbGU6Iik/bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicrZSsnIi4nKTpuZXcgbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgiLmNvbmNhdCh0LCcpIHdoaWxlIHJldHJpZXZpbmcgUERGICInKS5jb25jYXQoZSwnIi4nKSx0KX0sZS5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQoIkNvbnRlbnQtRGlzcG9zaXRpb24iKTtpZihlKXt2YXIgcj0oMCxpLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcikoZSk7aWYoci5pbmNsdWRlcygiJSIpKXRyeXtyPWRlY29kZVVSSUNvbXBvbmVudChyKX1jYXRjaCh0KXt9aWYoKDAsYS5pc1BkZkZpbGUpKHIpKXJldHVybiByfXJldHVybiBudWxsfSxlLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0UmVzcG9uc2VIZWFkZXIscj10LmlzSHR0cCxuPXQucmFuZ2VDaHVua1NpemUsaT10LmRpc2FibGVSYW5nZSxhPXthbGxvd1JhbmdlUmVxdWVzdHM6ITEsc3VnZ2VzdGVkTGVuZ3RoOnZvaWQgMH0sbz1wYXJzZUludChlKCJDb250ZW50LUxlbmd0aCIpLDEwKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihvKT8oYS5zdWdnZXN0ZWRMZW5ndGg9byxvPD0yKm58fGl8fCFyfHwiYnl0ZXMiIT09ZSgiQWNjZXB0LVJhbmdlcyIpfHwiaWRlbnRpdHkiIT09KGUoIkNvbnRlbnQtRW5jb2RpbmciKXx8ImlkZW50aXR5Iil8fChhLmFsbG93UmFuZ2VSZXF1ZXN0cz0hMCksYSk6YX0sZS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzPWZ1bmN0aW9uKHQpe3JldHVybiAyMDA9PT10fHwyMDY9PT10fTt2YXIgbj1yKDEpLGk9cigxNjMpLGE9cigxMzcpfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPSEwLHI9cygiZmlsZW5hbWVcXCoiLCJpIikuZXhlYyh0KTtpZihyKXt2YXIgYT1jKHI9clsxXSk7cmV0dXJuIHUoYT1mKGE9aChhPXVuZXNjYXBlKGEpKSkpfWlmKHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbj1zKCJmaWxlbmFtZVxcKigoPyEwXFxkKVxcZCspKFxcKj8pIiwiaWciKTtudWxsIT09KGU9bi5leGVjKHQpKTspe3ZhciBhPWkoZSw0KSxvPWFbMV0sbD1hWzJdLHU9YVszXTtpZigobz1wYXJzZUludChvLDEwKSlpbiByKXtpZigwPT09bylicmVha31lbHNlIHJbb109W2wsdV19Zm9yKHZhciBmPVtdLGQ9MDtkPHIubGVuZ3RoJiZkIGluIHI7KytkKXt2YXIgcD1pKHJbZF0sMiksdj1wWzBdLHk9cFsxXTt5PWMoeSksdiYmKHk9dW5lc2NhcGUoeSksMD09PWQmJih5PWgoeSkpKSxmLnB1c2goeSl9cmV0dXJuIGYuam9pbigiIil9KHQpKXJldHVybiB1KGYocikpO2lmKHI9cygiZmlsZW5hbWUiLCJpIikuZXhlYyh0KSl7dmFyIG89YyhyPXJbMV0pO3JldHVybiB1KG89ZihvKSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefDspXFxzKiIrdCsnXFxzKj1cXHMqKFteIjtcXHNdW147XFxzXSp8Iig/OlteIlxcXFxdfFxcXFwiPykrIj8pJyxlKX1mdW5jdGlvbiBsKHQscil7aWYodCl7aWYoIS9eW1x4MDAtXHhGRl0rJC8udGVzdChyKSlyZXR1cm4gcjt0cnl7dmFyIGk9bmV3IFRleHREZWNvZGVyKHQse2ZhdGFsOiEwfSksYT0oMCxuLnN0cmluZ1RvQnl0ZXMpKHIpO3I9aS5kZWNvZGUoYSksZT0hMX1jYXRjaCh0KXt9fXJldHVybiByfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGUmJi9bXHg4MC1ceGZmXS8udGVzdCh0KSYmKHQ9bCgidXRmLTgiLHQpLGUmJih0PWwoImlzby04ODU5LTEiLHQpKSksdH1mdW5jdGlvbiBjKHQpe2lmKHQuc3RhcnRzV2l0aCgnIicpKXtmb3IodmFyIGU9dC5zbGljZSgxKS5zcGxpdCgnXFwiJykscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLmluZGV4T2YoJyInKTstMSE9PW4mJihlW3JdPWVbcl0uc2xpY2UoMCxuKSxlLmxlbmd0aD1yKzEpLGVbcl09ZVtyXS5yZXBsYWNlKC9cXCguKS9nLCIkMSIpfXQ9ZS5qb2luKCciJyl9cmV0dXJuIHR9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmluZGV4T2YoIiciKTtyZXR1cm4tMT09PWU/dDpsKHQuc2xpY2UoMCxlKSx0LnNsaWNlKGUrMSkucmVwbGFjZSgvXlteJ10qJy8sIiIpKX1mdW5jdGlvbiBmKHQpe3JldHVybiF0LnN0YXJ0c1dpdGgoIj0/Iil8fC9bXHgwMC1ceDE5XHg4MC1ceGZmXS8udGVzdCh0KT90OnQucmVwbGFjZSgvPVw/KFtcdy1dKilcPyhbUXFCYl0pXD8oKD86W14/XXxcPyg/IT0pKSopXD89L2csKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJxIj09PXJ8fCJRIj09PXIpcmV0dXJuIGwoZSxuPShuPW4ucmVwbGFjZSgvXy9nLCIgIikpLnJlcGxhY2UoLz0oWzAtOWEtZkEtRl17Mn0pL2csKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZSwxNikpfSkpKTt0cnl7bj1hdG9iKG4pfWNhdGNoKHQpe31yZXR1cm4gbChlLG4pfSkpfXJldHVybiIifTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGEodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9hKHQsZSk6dm9pZCAwfX0odCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZOZXR3b3JrU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGw9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHUodCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7dSh7fSwiIil9Y2F0Y2godCl7dT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307dShtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXt1KHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciBsPWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT1sLnR5cGUpe3ZhciB1PWwuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe3UudmFsdWU9dCxvKHUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXMobC5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT11KHksbCwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LHUodCxsLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLHUoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLHUoXyxsLCJHZW5lcmF0b3IiKSx1KF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx1KF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCl7cmV0dXJuIGM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGModCl9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09Yyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1jKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2godGhpcyx0KSx0aGlzLnVybD1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZSksdGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmci5odHRwSGVhZGVyc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLndpdGhDcmVkZW50aWFscz1yLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5nZXRYaHI9ci5nZXRYaHJ8fGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdGhpcy5jdXJyWGhySWQ9MCx0aGlzLnBlbmRpbmdSZXF1ZXN0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBkKHQsW3trZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtiZWdpbjp0LGVuZDplfTtmb3IodmFyIGkgaW4gciluW2ldPXJbaV07cmV0dXJuIHRoaXMucmVxdWVzdChuKX19LHtrZXk6InJlcXVlc3RGdWxsIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHQpfX0se2tleToicmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRYaHIoKSxyPXRoaXMuY3VyclhocklkKyssbj10aGlzLnBlbmRpbmdSZXF1ZXN0c1tyXT17eGhyOmV9O2Zvcih2YXIgaSBpbiBlLm9wZW4oIkdFVCIsdGhpcy51cmwsICEwKSxlLndpdGhDcmVkZW50aWFscz10aGlzLndpdGhDcmVkZW50aWFscyx0aGlzLmh0dHBIZWFkZXJzKXt2YXIgYT10aGlzLmh0dHBIZWFkZXJzW2ldO3ZvaWQgMCE9PWEmJmUuc2V0UmVxdWVzdEhlYWRlcihpLGEpfXJldHVybiB0aGlzLmlzSHR0cCYmImJlZ2luImluIHQmJiJlbmQiaW4gdD8oZS5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIuY29uY2F0KHQuYmVnaW4sIi0iKS5jb25jYXQodC5lbmQtMSkpLG4uZXhwZWN0ZWRTdGF0dXM9MjA2KTpuLmV4cGVjdGVkU3RhdHVzPTIwMCxlLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHQub25FcnJvciYmKGUub25lcnJvcj1mdW5jdGlvbihyKXt0Lm9uRXJyb3IoZS5zdGF0dXMpfSksZS5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyxyKSxlLm9ucHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyxyKSxuLm9uSGVhZGVyc1JlY2VpdmVkPXQub25IZWFkZXJzUmVjZWl2ZWQsbi5vbkRvbmU9dC5vbkRvbmUsbi5vbkVycm9yPXQub25FcnJvcixuLm9uUHJvZ3Jlc3M9dC5vblByb2dyZXNzLGUuc2VuZChudWxsKSxyfX0se2tleToib25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMucGVuZGluZ1JlcXVlc3RzW3RdO24mJihudWxsPT09KHI9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09cnx8ci5jYWxsKG4sZSkpfX0se2tleToib25TdGF0ZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XTtpZihyKXt2YXIgaT1yLnhocjtpZihpLnJlYWR5U3RhdGU+PTImJnIub25IZWFkZXJzUmVjZWl2ZWQmJihyLm9uSGVhZGVyc1JlY2VpdmVkKCksZGVsZXRlIHIub25IZWFkZXJzUmVjZWl2ZWQpLDQ9PT1pLnJlYWR5U3RhdGUmJnQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpaWYoZGVsZXRlIHRoaXMucGVuZGluZ1JlcXVlc3RzW3RdLDA9PT1pLnN0YXR1cyYmdGhpcy5pc0h0dHApe3ZhciBhO251bGw9PT0oYT1yLm9uRXJyb3IpfHx2b2lkIDA9PT1hfHxhLmNhbGwocixpLnN0YXR1cyl9ZWxzZXt2YXIgbz1pLnN0YXR1c3x8MjAwO2lmKDIwMD09PW8mJjIwNj09PXIuZXhwZWN0ZWRTdGF0dXN8fG89PT1yLmV4cGVjdGVkU3RhdHVzKXt2YXIgcz1mdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlO3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9lOigwLG4uc3RyaW5nVG9CeXRlcykoZSkuYnVmZmVyfShpKTtpZigyMDY9PT1vKXt2YXIgbD1pLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVJhbmdlIiksdT0vYnl0ZXMgKFxkKyktKFxkKylcLyhcZCspLy5leGVjKGwpO3Iub25Eb25lKHtiZWdpbjpwYXJzZUludCh1WzFdLDEwKSxjaHVuazpzfSl9ZWxzZSBpZihzKXIub25Eb25lKHtiZWdpbjowLGNodW5rOnN9KTtlbHNle3ZhciBjO251bGw9PT0oYz1yLm9uRXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwocixpLnN0YXR1cyl9fWVsc2V7dmFyIGg7bnVsbD09PShoPXIub25FcnJvcil8fHZvaWQgMD09PWh8fGguY2FsbChyLGkuc3RhdHVzKX19fX19LHtrZXk6ImdldFJlcXVlc3RYaHIiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XS54aHJ9fSx7a2V5OiJpc1BlbmRpbmdSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0c319LHtrZXk6ImFib3J0UmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wZW5kaW5nUmVxdWVzdHNbdF0ueGhyO2RlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XSxlLmFib3J0KCl9fV0pLHR9KCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHRoaXMuX3NvdXJjZT1lLHRoaXMuX21hbmFnZXI9bmV3IHAoZS51cmwse2h0dHBIZWFkZXJzOmUuaHR0cEhlYWRlcnMsd2l0aENyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzfSksdGhpcy5fcmFuZ2VDaHVua1NpemU9ZS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGQodCxbe2tleToiX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YodCk7ZT49MCYmdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGTmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyB5KHRoaXMuX21hbmFnZXIsdGhpcy5fc291cmNlKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW5ldyBtKHRoaXMuX21hbmFnZXIsdCxlKTtyZXR1cm4gci5vbkNsb3NlZD10aGlzLl9vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZC5iaW5kKHRoaXMpLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyKSxyfX0se2tleToiY2FuY2VsQWxsUmVxdWVzdHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpO3ZhciByLG49bCh0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5jYW5jZWwodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX1dKSx0fSgpO2UuUERGTmV0d29ya1N0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2godGhpcyx0KSx0aGlzLl9tYW5hZ2VyPWU7dmFyIGk9e29uSGVhZGVyc1JlY2VpdmVkOnRoaXMuX29uSGVhZGVyc1JlY2VpdmVkLmJpbmQodGhpcyksb25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ci51cmwsdGhpcy5fZnVsbFJlcXVlc3RJZD1lLnJlcXVlc3RGdWxsKGkpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fcmFuZ2VDaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2NhY2hlZENodW5rcz1bXSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMuX3N0b3JlZEVycm9yPXZvaWQgMCx0aGlzLl9maWxlbmFtZT1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9vbkhlYWRlcnNSZWNlaXZlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mdWxsUmVxdWVzdElkLGU9dGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0UmVzcG9uc2VIZWFkZXIodCl9LG49KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOnIsaXNIdHRwOnRoaXMuX21hbmFnZXIuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnRoaXMuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTp0aGlzLl9kaXNhYmxlUmFuZ2V9KSxhPW4uYWxsb3dSYW5nZVJlcXVlc3RzLG89bi5zdWdnZXN0ZWRMZW5ndGg7YSYmKHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ITApLHRoaXMuX2NvbnRlbnRMZW5ndGg9b3x8dGhpcy5fY29udGVudExlbmd0aCx0aGlzLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKHIpLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHQpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX29uRG9uZSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodCYmKHRoaXMuX3JlcXVlc3RzLmxlbmd0aD4wP3RoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6dC5jaHVuayxkb25lOiExfSk6dGhpcy5fY2FjaGVkQ2h1bmtzLnB1c2godC5jaHVuaykpLHRoaXMuX2RvbmU9ITAsISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9fX0se2tleToiX29uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPSgwLGkuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikodCx0aGlzLl91cmwpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVqZWN0KHRoaXMuX3N0b3JlZEVycm9yKTt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcil9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aD0wfX0se2tleToiX29uUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnQubG9hZGVkLHRvdGFsOnQubGVuZ3RoQ29tcHV0YWJsZT90LnRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KX19LHtrZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImhlYWRlcnNSZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYoISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt0Lm5leHQ9NTticmVha31yZXR1cm4gZT10aGlzLl9jYWNoZWRDaHVua3Muc2hpZnQoKSx0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6ZSxkb25lOiExfSk7Y2FzZSA1OmlmKCF0aGlzLl9kb25lKXt0Lm5leHQ9NzticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiByPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVxdWVzdHMucHVzaChyKSx0LmFicnVwdCgicmV0dXJuIixyLnByb21pc2UpO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITAsdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QodCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKSYmdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbH19XSksdH0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX21hbmFnZXI9ZTt2YXIgaT17b25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ZS51cmwsdGhpcy5fcmVxdWVzdElkPWUucmVxdWVzdFJhbmdlKHIsbixpKSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMub25DbG9zZWQ9bnVsbH12YXIgZTtyZXR1cm4gZCh0LFt7a2V5OiJfY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMub25DbG9zZWQpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcyx0aGlzKX19LHtrZXk6Il9vbkRvbmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2h1bms7dGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTplLGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVuaz1lLHRoaXMuX2RvbmU9ITA7dmFyIHIsbj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX2Nsb3NlKCl9fSx7a2V5OiJfb25FcnJvciIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fc3RvcmVkRXJyb3I9KDAsaS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKSh0LHRoaXMuX3VybCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX3F1ZXVlZENodW5rPW51bGx9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8bnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dC5sb2FkZWR9KX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYobnVsbD09PXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NjticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDY6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD04O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDg6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fZG9uZT0hMDt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCksdGhpcy5fY2xvc2UoKX19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERkZldGNoU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxpPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1sKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWwoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIGYodCxlLHIpe3JldHVybiBlJiZoKHQucHJvdG90eXBlLGUpLHImJmgodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybnttZXRob2Q6IkdFVCIsaGVhZGVyczp0LHNpZ25hbDpyLnNpZ25hbCxtb2RlOiJjb3JzIixjcmVkZW50aWFsczplPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4iLHJlZGlyZWN0OiJmb2xsb3cifX1mdW5jdGlvbiBwKHQpe3ZhciBlPW5ldyBIZWFkZXJzO2Zvcih2YXIgciBpbiB0KXt2YXIgbj10W3JdO3ZvaWQgMCE9PW4mJmUuYXBwZW5kKHIsbil9cmV0dXJuIGV9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2ModGhpcyx0KSx0aGlzLnNvdXJjZT1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZS51cmwpLHRoaXMuaHR0cEhlYWRlcnM9dGhpcy5pc0h0dHAmJmUuaHR0cEhlYWRlcnN8fHt9LHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGwsdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1yZXR1cm4gZih0LFt7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJnZXRGdWxsUmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybigwLG4uYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IHkodGhpcyksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXJ9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IG0odGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZGZXRjaFN0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9maWxlbmFtZT1udWxsO3ZhciBhPWUuc291cmNlO3RoaXMuX3dpdGhDcmVkZW50aWFscz1hLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5fY29udGVudExlbmd0aD1hLmxlbmd0aCx0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX2Rpc2FibGVSYW5nZT1hLmRpc2FibGVSYW5nZXx8ITEsdGhpcy5fcmFuZ2VDaHVua1NpemU9YS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hYS5kaXNhYmxlU3RyZWFtLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9IWEuZGlzYWJsZVJhbmdlLHRoaXMuX2hlYWRlcnM9cCh0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpO3ZhciBvPWEudXJsO2ZldGNoKG8sZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLG8pO3IuX3JlYWRlcj10LmJvZHkuZ2V0UmVhZGVyKCksci5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO3ZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiB0LmhlYWRlcnMuZ2V0KGUpfSxhPSgwLGkudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjplLGlzSHR0cDpyLl9zdHJlYW0uaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnIuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpyLl9kaXNhYmxlUmFuZ2V9KSxzPWEuYWxsb3dSYW5nZVJlcXVlc3RzLGw9YS5zdWdnZXN0ZWRMZW5ndGg7ci5faXNSYW5nZVN1cHBvcnRlZD1zLHIuX2NvbnRlbnRMZW5ndGg9bHx8ci5fY29udGVudExlbmd0aCxyLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGUpLCFyLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCYmci5faXNSYW5nZVN1cHBvcnRlZCYmci5jYW5jZWwobmV3IG4uQWJvcnRFeGNlcHRpb24oIlN0cmVhbWluZyBpcyBkaXNhYmxlZC4iKSl9KSkuY2F0Y2godGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KSx0aGlzLm9uUHJvZ3Jlc3M9bnVsbH12YXIgZTtyZXR1cm4gZih0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9cyhhKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsbixpLG87cmV0dXJuIGEoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtjYXNlIDI6cmV0dXJuIHQubmV4dD00LHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSA0OmlmKHI9dC5zZW50LG49ci52YWx1ZSwhKGk9ci5kb25lKSl7dC5uZXh0PTk7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpuLGRvbmU6aX0pO2Nhc2UgOTpyZXR1cm4gdGhpcy5fbG9hZGVkKz1uLmJ5dGVMZW5ndGgsbnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dGhpcy5fbG9hZGVkLHRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KSxvPW5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcix0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6byxkb25lOiExfSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX3JlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpLHRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX1dKSx0fSgpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixhKXt2YXIgbz10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MDt2YXIgcz1lLnNvdXJjZTt0aGlzLl93aXRoQ3JlZGVudGlhbHM9cy53aXRoQ3JlZGVudGlhbHN8fCExLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXMuZGlzYWJsZVN0cmVhbSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9oZWFkZXJzPXAodGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzKSx0aGlzLl9oZWFkZXJzLmFwcGVuZCgiUmFuZ2UiLCJieXRlcz0iLmNvbmNhdChyLCItIikuY29uY2F0KGEtMSkpO3ZhciBsPXMudXJsO2ZldGNoKGwsZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLGwpO28uX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKSxvLl9yZWFkZXI9dC5ib2R5LmdldFJlYWRlcigpfSkpLmNhdGNoKHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIGYodCxbe2tleToiaXNTdHJlYW1pbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxvO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCx0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgNDppZihyPXQuc2VudCxuPXIudmFsdWUsIShpPXIuZG9uZSkpe3QubmV4dD05O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6bixkb25lOml9KTtjYXNlIDk6cmV0dXJuIHRoaXMuX2xvYWRlZCs9bi5ieXRlTGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLG89bmV3IFVpbnQ4QXJyYXkobikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpvLGRvbmU6ITF9KTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fcmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCksdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCl9fV0pLHR9KCl9XSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX193X3BkZmpzX3JlcXVpcmVfXyh0KXt2YXIgZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gZS5leHBvcnRzO3ZhciByPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1t0XT17ZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bdF0ocixyLmV4cG9ydHMsX193X3BkZmpzX3JlcXVpcmVfXyksci5leHBvcnRzfXZhciBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXz17fTtyZXR1cm4oKCk9Pnt2YXIgdD1fX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXztPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFib3J0RXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5BYm9ydEV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvckxheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvclR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25FZGl0b3JUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uTGF5ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkFubm90YXRpb25MYXllcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbk1vZGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25Nb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDTWFwQ29tcHJlc3Npb25UeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5DTWFwQ29tcHJlc3Npb25UeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHbG9iYWxXb3JrZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5HbG9iYWxXb3JrZXJPcHRpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnZhbGlkUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5JbnZhbGlkUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNaXNzaW5nUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5NaXNzaW5nUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPUFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLk9QU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUERGRGF0YVJhbmdlVHJhbnNwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5QREZEYXRhUmFuZ2VUcmFuc3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERkRhdGVTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlBERkRhdGVTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERldvcmtlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUERGV29ya2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQYXNzd29yZFJlc3BvbnNlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuUGFzc3dvcmRSZXNwb25zZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBlcm1pc3Npb25GbGFnIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5QZXJtaXNzaW9uRmxhZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGl4ZWxzUGVySW5jaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uUGl4ZWxzUGVySW5jaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNWR0dyYXBoaWNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5TVkdHcmFwaGljc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVU5TVVBQT1JURURfRkVBVFVSRVMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVXRpbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuVXRpbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVmVyYm9zaXR5TGV2ZWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlZlcmJvc2l0eUxldmVsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJYZmFMYXllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguWGZhTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImJ1aWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5idWlsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVWYWxpZEFic29sdXRlVXJsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVWYWxpZEFic29sdXRlVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXREb2N1bWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0RG9jdW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEZpbGVuYW1lRnJvbVVybCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0RmlsZW5hbWVGcm9tVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRQZGZGaWxlbmFtZUZyb21VcmwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldFBkZkZpbGVuYW1lRnJvbVVybH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0WGZhUGFnZVZpZXdwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRYZmFQYWdlVmlld3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzRGF0YVNjaGVtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uaXNEYXRhU2NoZW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1BkZkZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmlzUGRmRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9hZFNjcmlwdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ubG9hZFNjcmlwdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVuZGVyVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5yZW5kZXJUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldExheWVyRGltZW5zaW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0TGF5ZXJEaW1lbnNpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFkb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLnNoYWRvd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXBkYXRlVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS51cGRhdGVUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZlcnNpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnZlcnNpb259fSk7dmFyIGU9X193X3BkZmpzX3JlcXVpcmVfXygxKSxyPV9fd19wZGZqc19yZXF1aXJlX18oMTMzKSxuPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxpPV9fd19wZGZqc19yZXF1aXJlX18oMTUxKSxhPV9fd19wZGZqc19yZXF1aXJlX18oMTUyKSxvPV9fd19wZGZqc19yZXF1aXJlX18oMTM2KSxzPV9fd19wZGZqc19yZXF1aXJlX18oMTU3KSxsPV9fd19wZGZqc19yZXF1aXJlX18oMTQ0KSx1PV9fd19wZGZqc19yZXF1aXJlX18oMyksYz1fX3dfcGRmanNfcmVxdWlyZV9fKDE2MCksaD1fX3dfcGRmanNfcmVxdWlyZV9fKDE1OSk7aWYodS5pc05vZGVKUyl7dmFyIGY9X193X3BkZmpzX3JlcXVpcmVfXygxNjEpLlBERk5vZGVTdHJlYW07KDAsci5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSkoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZih0KX0pKX1lbHNle3ZhciBkPV9fd19wZGZqc19yZXF1aXJlX18oMTY0KS5QREZOZXR3b3JrU3RyZWFtLHA9X193X3BkZmpzX3JlcXVpcmVfXygxNjUpLlBERkZldGNoU3RyZWFtOygwLHIuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkpKChmdW5jdGlvbih0KXtyZXR1cm4oMCxuLmlzVmFsaWRGZXRjaFVybCkodC51cmwpP25ldyBwKHQpOm5ldyBkKHQpfSkpfX0pKCksX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZmFjdG9yeSgpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJwZGZqcy1kaXN0L2J1aWxkL3BkZiIsW10sZmFjdG9yeSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09ZmFjdG9yeSgpOnJvb3RbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09cm9vdC5wZGZqc0xpYj1mYWN0b3J5KCk7",M=`data:text/javascript;base64,${K}`,a=`data:text/javascript;base64,${x}`;class T{constructor(Z,l={},m={}){X(this,"container",null);X(this,"wrapper",null);X(this,"wrapperMain",null);X(this,"options",{});X(this,"requestOptions",{});X(this,"pdfDocument",null);this.container=Z,this.options={staticFileUrl:"https://unpkg.com/pdfjs-dist@3.1.81/",...l},this.requestOptions=m,this.createWrapper()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-pdf",this.wrapper.setAttribute("style","text-align: center;overflow-y: auto;"),this.container.appendChild(this.wrapper)}createWrapperMain(){this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-pdf-wrapper",this.wrapperMain.setAttribute("style","background: gray; padding: 30px 0;position: relative;"),this.wrapper.appendChild(this.wrapperMain)}createCanvas(Z){let l=this.wrapperMain.querySelectorAll("canvas");if(l[Z-1])return[l[Z-1],l[Z-1].getContext("2d")];const m=document.createElement("canvas");return m.setAttribute("style","width:100%"),this.wrapperMain.appendChild(m),[m,m.getContext("2d")]}installPdfScript(){return h(M).then(()=>{window.pdfjsLib.GlobalWorkerOptions.workerSrc=a})}checkPdfLib(){return window.pdfjsLib?Promise.resolve():this.installPdfScript()}getDocument(Z){return window.pdfjsLib.getDocument({url:u(Z),httpHeaders:this.requestOptions&&this.requestOptions.headers,withCredentials:this.requestOptions&&this.requestOptions.withCredentials,cMapUrl:`${this.options.staticFileUrl.endsWith("/")?this.options.staticFileUrl:this.options.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...p(this.options,["width","staticFileUrl"])}).promise}renderSinglePage(Z){return this.pdfDocument.getPage(Z).then(l=>{const m=l.getViewport({scale:2}),b=window.devicePixelRatio||1;let[G,i]=this.createCanvas(Z);G.width=Math.floor(m.width*b),G.height=Math.floor(m.height*b);let c=Math.floor(m.width),W=Math.floor(m.height);if(this.options.width){let I=this.options.width/c;c=Math.floor(this.options.width),W=Math.floor(W*I)}let Y=this.wrapperMain.getBoundingClientRect().width-20;if(c>Y){let I=Y/c;c=Math.floor(Y),W=Math.floor(W*I)}G.style.width=c+"px",G.style.height=W+"px";const L=b!==1?[b,0,0,b,0,0]:null;return l.render({canvasContext:i,transform:L,viewport:m}).promise.then(()=>{if(this.pdfDocument.numPages>Z)return this.renderSinglePage(Z+1)})})}renderPage(){if(!this.wrapperMain)this.createWrapperMain();else{let Z=this.wrapperMain.querySelectorAll("canvas");if(Z.length>this.pdfDocument.numPages)for(let l=Z.length-1;l>=this.pdfDocument.numPages;l--)this.wrapperMain.removeChild(Z[l])}return this.renderSinglePage(1)}clearAllCanvas(){this.wrapperMain&&(this.wrapper.removeChild(this.wrapperMain),this.wrapperMain=null)}setOptions(Z){this.options=Z}setRequestOptions(Z){this.requestOptions=Z}preview(Z){return new Promise((l,m)=>{if(!Z){this.clearAllCanvas(),m(new Error("预览地址不能为空"));return}this.checkPdfLib().then(b=>{this.getDocument(Z).then(G=>{this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=G,this.renderPage().then(i=>{l()}).catch(i=>{this.clearAllCanvas(),m(i)})}).catch(G=>{this.clearAllCanvas(),m(G)})}).catch(b=>{this.clearAllCanvas(),m(b)})})}rerender(){return this.renderPage().then(Z=>Promise.resolve()).catch(Z=>(this.clearAllCanvas(),Promise.reject(Z)))}save(Z){this.pdfDocument&&this.pdfDocument._transport&&this.pdfDocument._transport.getData().then(l=>{s(Z||`js-preview-pdf-${new Date().getTime()}.pdf`,l.buffer)})}destroy(){this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options={},this.requestOptions={},this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=null}}function C(d,Z,l){return new T(d,Z,l)}const H={init:C},n={__name:"JsPdfDemo",setup(d){const Z=J(null);return S(()=>{window.myPdfPreview=H.init(Z.value),window.myPdfPreview.preview("/vue-office/examples/dist/static/test-files/test.pdf").then(l=>{console.log("excel preview done",window.myPdfPreview)}).catch(l=>{console.log("err",l)})}),(l,m)=>(R(),N("div",{ref_key:"dom",ref:Z,style:{height:"calc(100vh - 50px)"}},null,512))}};export{n as default}; diff --git a/examples/dist/assets/JsPdfDemo-d030d3e0.js b/examples/dist/assets/JsPdfDemo-d030d3e0.js new file mode 100644 index 0000000..9c1b7c0 --- /dev/null +++ b/examples/dist/assets/JsPdfDemo-d030d3e0.js @@ -0,0 +1 @@ +var y=Object.defineProperty;var V=(d,Z,l)=>Z in d?y(d,Z,{enumerable:!0,configurable:!0,writable:!0,value:l}):d[Z]=l;var X=(d,Z,l)=>(V(d,typeof Z!="symbol"?Z+"":Z,l),l);import{l as h,g as u,d as s}from"./url-de9b02cf.js";import{o as p}from"./omit-4f9f5d5d.js";/* empty css */import{r as J,o as S,a as R,c as N}from"./index-58cbfcf0.js";const x="LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgd29ya2VyLmpzLkxJQ0VOU0UudHh0ICovCnZhciBlLHQ7ZT1nbG9iYWxUaGlzLHQ9KCk9PigoKT0+e3ZhciBlPVssKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LldvcmtlclRhc2s9dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTM3KSxzPXIoMjAwKSxjPXIoMTk0KSx1PXIoNCksbD1yKDIzMSksZj1yKDIzMik7ZnVuY3Rpb24gaCgpe2g9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTtjKHYsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoUChbXSkpKTttJiZtIT09dCYmci5jYWxsKG0saSkmJih2PW0pO3ZhciB3PWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YihmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxuKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPWMoZyxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZChlLHQpe3JldHVybiB5KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGcoZSx0KXx8cCgpfWZ1bmN0aW9uIHAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIGcoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHYoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT92KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB2KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24geShlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIG0oZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBiKGUpe3JldHVybiBiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxiKGUpfWZ1bmN0aW9uIHcoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWIoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1iKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gUyhlLHQscil7cmV0dXJuIHQmJmsoZS5wcm90b3R5cGUsdCksciYmayhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3codGhpcyxlKSx0aGlzLm5hbWU9dCx0aGlzLnRlcm1pbmF0ZWQ9ITEsdGhpcy5fY2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpfXJldHVybiBTKGUsW3trZXk6ImZpbmlzaGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmluaXNoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToidGVybWluYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudGVybWluYXRlZD0hMH19LHtrZXk6ImVuc3VyZU5vdFRlcm1pbmF0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19XSksZX0oKTt0LldvcmtlclRhc2s9eDt2YXIgTyxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3codGhpcyxlKX1yZXR1cm4gUyhlLG51bGwsW3trZXk6InNldHVwIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPSExO3Qub24oInRlc3QiLChmdW5jdGlvbihlKXthfHwoYT0hMCx0LnNlbmQoInRlc3QiLGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl9KSksdC5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24oZSl7KDAsbi5zZXRWZXJib3NpdHlMZXZlbCkoZS52ZXJib3NpdHkpfSkpLHQub24oIkdldERvY1JlcXVlc3QiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVEb2N1bWVudEhhbmRsZXIodCxyKX0pKX19LHtrZXk6ImNyZWF0ZURvY3VtZW50SGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcix2PSExLGI9bnVsbCx3PVtdLGs9KDAsbi5nZXRWZXJib3NpdHlMZXZlbCkoKSxTPWUsTz1TLmRvY0lkLEE9Uy5hcGlWZXJzaW9uLEM9IjMuMi4wIjtpZihBIT09Qyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBUEkgdmVyc2lvbiAiJy5jb25jYXQoQSwnIiBkb2VzIG5vdCBtYXRjaCAnKSsndGhlIFdvcmtlciB2ZXJzaW9uICInLmNvbmNhdChDLCciLicpKTt2YXIgRj1bXTtmb3IodmFyIFAgaW5bXSlGLnB1c2goUCk7aWYoRi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgYEFycmF5LnByb3RvdHlwZWAgY29udGFpbnMgdW5leHBlY3RlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXM6ICIrRi5qb2luKCIsICIpKyI7IHRodXMgYnJlYWtpbmcgZS5nLiBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBvZiBgQXJyYXlgcy4iKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlYWRhYmxlU3RyZWFtKXt2YXIgVD0iVGhlIGJyb3dzZXIvZW52aXJvbm1lbnQgbGFja3MgbmF0aXZlIHN1cHBvcnQgZm9yIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgdXNlZCBieSB0aGUgUERGLmpzIGxpYnJhcnkgKGUuZy4gYFJlYWRhYmxlU3RyZWFtYCk7ICI7aWYodS5pc05vZGVKUyl0aHJvdyBuZXcgRXJyb3IoVCsicGxlYXNlIHVzZSBhIGBsZWdhY3lgLWJ1aWxkIGluc3RlYWQuIik7dGhyb3cgbmV3IEVycm9yKFQrInBsZWFzZSB1cGRhdGUgdG8gYSBzdXBwb3J0ZWQgYnJvd3Nlci4iKX12YXIgST1PKyJfd29ya2VyIixFPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKEksTyx0KTtmdW5jdGlvbiBqKCl7aWYodil0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWZ1bmN0aW9uIE0oZSl7dy5wdXNoKGUpfWZ1bmN0aW9uIF8oZSl7ZS5maW5pc2goKTt2YXIgdD13LmluZGV4T2YoZSk7dy5zcGxpY2UodCwxKX1mdW5jdGlvbiBMKGUpe3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBSKCl7dmFyIGU7cmV0dXJuIGU9aCgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIG4sYSxpLG8scyxjLHU7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5lbnN1cmVEb2MoImNoZWNrSGVhZGVyIik7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LHIuZW5zdXJlRG9jKCJwYXJzZSIsW3RdKTtjYXNlIDY6cmV0dXJuIGUubmV4dD04LHIuZW5zdXJlRG9jKCJjaGVja0ZpcnN0UGFnZSIsW3RdKTtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCxyLmVuc3VyZURvYygiY2hlY2tMYXN0UGFnZSIsW3RdKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIsci5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2Nhc2UgMTI6aWYoIShuPWUuc2VudCkpe2UubmV4dD0xODticmVha31yZXR1cm4gTShhPW5ldyB4KCJsb2FkWGZhRm9udHMiKSksZS5uZXh0PTE4LFByb21pc2UuYWxsKFtyLmxvYWRYZmFGb250cyhFLGEpLmNhdGNoKChmdW5jdGlvbihlKXt9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gXyhhKX0pKSxyLmxvYWRYZmFJbWFnZXMoKV0pO2Nhc2UgMTg6cmV0dXJuIGUubmV4dD0yMCxQcm9taXNlLmFsbChbci5lbnN1cmVEb2MoIm51bVBhZ2VzIiksci5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7Y2FzZSAyMDppZihpPWUuc2VudCxvPWQoaSwyKSxzPW9bMF0sYz1vWzFdLCFuKXtlLm5leHQ9MzA7YnJlYWt9cmV0dXJuIGUubmV4dD0yNyxyLmVuc3VyZURvYygiaHRtbEZvclhmYSIpO2Nhc2UgMjc6ZS50MD1lLnNlbnQsZS5uZXh0PTMxO2JyZWFrO2Nhc2UgMzA6ZS50MD1udWxsO2Nhc2UgMzE6cmV0dXJuIHU9ZS50MCxlLmFicnVwdCgicmV0dXJuIix7bnVtUGFnZXM6cyxmaW5nZXJwcmludHM6YyxodG1sRm9yWGZhOnV9KTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSksUj1mdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe20oaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe20oaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gRS5vbigiR2V0UGFnZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbci5lbnN1cmUoZSwicm90YXRlIiksci5lbnN1cmUoZSwicmVmIiksci5lbnN1cmUoZSwidXNlclVuaXQiKSxyLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdD1kKGUsNCk7cmV0dXJue3JvdGF0ZTp0WzBdLHJlZjp0WzFdLHVzZXJVbml0OnRbMl0sdmlldzp0WzNdfX0pKX0pKX0pKSxFLm9uKCJHZXRQYWdlSW5kZXgiLChmdW5jdGlvbihlKXt2YXIgdD1hLlJlZi5nZXQoZS5udW0sZS5nZW4pO3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3RdKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkZXN0aW5hdGlvbnMiKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbiIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldERlc3RpbmF0aW9uIixbZS5pZF0pfSkpLEUub24oIkdldFBhZ2VMYWJlbHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJwYWdlTGFiZWxzIil9KSksRS5vbigiR2V0UGFnZUxheW91dCIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VMYXlvdXQiKX0pKSxFLm9uKCJHZXRQYWdlTW9kZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSksRS5vbigiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJ2aWV3ZXJQcmVmZXJlbmNlcyIpfSkpLEUub24oIkdldE9wZW5BY3Rpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIil9KSksRS5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSkpLEUub24oIkdldEphdmFTY3JpcHQiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSksRS5vbigiR2V0RG9jSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIil9KSksRS5vbigiR2V0UGFnZUpTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4O3JldHVybiByLmdldFBhZ2UodCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlKGUsImpzQWN0aW9ucyIpfSkpfSkpLEUub24oIkdldE91dGxpbmUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkb2N1bWVudE91dGxpbmUiKX0pKSxFLm9uKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcHRpb25hbENvbnRlbnRDb25maWciKX0pKSxFLm9uKCJHZXRQZXJtaXNzaW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBlcm1pc3Npb25zIil9KSksRS5vbigiR2V0TWV0YWRhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxyLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pKSxFLm9uKCJHZXRNYXJrSW5mbyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coIm1hcmtJbmZvIil9KSksRS5vbigiR2V0RGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ieXRlc30pKX0pKSxFLm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4LG49ZS5pbnRlbnQ7cmV0dXJuIHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiR2V0QW5ub3RhdGlvbnM6IHBhZ2UgIi5jb25jYXQodCkpO3JldHVybiBNKHIpLGUuZ2V0QW5ub3RhdGlvbnNEYXRhKEUscixuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gXyhyKSxlfSksKGZ1bmN0aW9uKGUpe18ocil9KSl9KSl9KSksRS5vbigiR2V0RmllbGRPYmplY3RzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKX0pKSxFLm9uKCJIYXNKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImhhc0pTQWN0aW9ucyIpfSkpLEUub24oIkdldENhbGN1bGF0aW9uT3JkZXJJZHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImNhbGN1bGF0aW9uT3JkZXJJZHMiKX0pKSxFLm9uKCJTYXZlRG9jdW1lbnQiLChmdW5jdGlvbihlKXt2YXIgdD1lLmlzUHVyZVhmYSxvPWUubnVtUGFnZXMscz1lLmFubm90YXRpb25TdG9yYWdlLHU9ZS5maWxlbmFtZSxsPVtyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSxyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybVJlZiIpLHIuZW5zdXJlRG9jKCJ4cmVmIiksci5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpXSxmPXQ/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShzKTtpZihmKXt2YXIgaCx2PWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1nKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZik7dHJ5e3ZhciBtPWZ1bmN0aW9uKCl7dmFyIGU9ZChoLnZhbHVlLDIpLHQ9ZVswXSxuPWVbMV07bC5wdXNoKHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiU2F2ZSAoZWRpdG9yKTogcGFnZSAiLmNvbmNhdCh0KSk7cmV0dXJuIGUuc2F2ZU5ld0Fubm90YXRpb25zKEUscixuKS5maW5hbGx5KChmdW5jdGlvbigpe18ocil9KSl9KSkpfTtmb3Iodi5zKCk7IShoPXYubigpKS5kb25lOyltKCl9Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9fWlmKHQpbC5wdXNoKHIuc2VyaWFsaXplWGZhRGF0YShzKSk7ZWxzZSBmb3IodmFyIGI9ZnVuY3Rpb24oZSl7bC5wdXNoKHIuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbih0KXt2YXIgcj1uZXcgeCgiU2F2ZTogcGFnZSAiLmNvbmNhdChlKSk7cmV0dXJuIHQuc2F2ZShFLHIscykuZmluYWxseSgoZnVuY3Rpb24oKXtfKHIpfSkpfSkpKX0sdz0wO3c8bzt3KyspYih3KTtyZXR1cm4gUHJvbWlzZS5hbGwobCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHIsaT15KHI9ZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0ocil8fGcocil8fHAoKSxvPWlbMF0scz1pWzFdLGw9aVsyXSxmPWlbM10saD1pWzRdLGQ9aS5zbGljZSg1KSx2PVtdLG09bnVsbDtpZih0KXtpZighKG09ZFswXSkpcmV0dXJuIG8uYnl0ZXN9ZWxzZSBpZigwPT09KHY9ZC5mbGF0KDIpKS5sZW5ndGgpcmV0dXJuIG8uYnl0ZXM7dmFyIGI9bCYmcyBpbnN0YW5jZW9mIGEuRGljdCYmdi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uZWVkQXBwZWFyYW5jZXN9KSksdz1zIGluc3RhbmNlb2YgYS5EaWN0JiZzLmdldCgiWEZBIil8fG51bGwsaz1udWxsLFM9ITE7aWYoQXJyYXkuaXNBcnJheSh3KSl7Zm9yKHZhciB4PTAsTz13Lmxlbmd0aDt4PE87eCs9MikiZGF0YXNldHMiPT09d1t4XSYmKGs9d1t4KzFdLFM9ITApO251bGw9PT1rJiYoaz1mLmdldE5ld1RlbXBvcmFyeVJlZigpKX1lbHNlIHcmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIFhGQSB0eXBlLiIpO3ZhciBBPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZi50cmFpbGVyKXt2YXIgQz1PYmplY3QuY3JlYXRlKG51bGwpLEY9Zi50cmFpbGVyLmdldCgiSW5mbyIpfHxudWxsO0YgaW5zdGFuY2VvZiBhLkRpY3QmJkYuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIHQmJihDW2VdPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQpKX0pKSxBPXtyb290UmVmOmYudHJhaWxlci5nZXRSYXcoIlJvb3QiKXx8bnVsbCxlbmNyeXB0UmVmOmYudHJhaWxlci5nZXRSYXcoIkVuY3J5cHQiKXx8bnVsbCxuZXdSZWY6Zi5nZXROZXdUZW1wb3JhcnlSZWYoKSxpbmZvUmVmOmYudHJhaWxlci5nZXRSYXcoIkluZm8iKXx8bnVsbCxpbmZvOkMsZmlsZUlkczpmLnRyYWlsZXIuZ2V0KCJJRCIpfHxudWxsLHN0YXJ0WFJlZjpoLGZpbGVuYW1lOnV9fXRyeXtyZXR1cm4oMCxjLmluY3JlbWVudGFsVXBkYXRlKSh7b3JpZ2luYWxEYXRhOm8uYnl0ZXMseHJlZkluZm86QSxuZXdSZWZzOnYseHJlZjpmLGhhc1hmYTohIXcseGZhRGF0YXNldHNSZWY6ayxoYXNYZmFEYXRhc2V0c0VudHJ5OlMsbmVlZEFwcGVhcmFuY2VzOmIsYWNyb0Zvcm1SZWY6bCxhY3JvRm9ybTpzLHhmYURhdGE6bX0pfWZpbmFsbHl7Zi5yZXNldE5ld1RlbXBvcmFyeVJlZigpfX0pKX0pKSxFLm9uKCJHZXRPcGVyYXRvckxpc3QiLChmdW5jdGlvbihlLHQpe3ZhciBhPWUucGFnZUluZGV4O3IuZ2V0UGFnZShhKS50aGVuKChmdW5jdGlvbihyKXt2YXIgaT1uZXcgeCgiR2V0T3BlcmF0b3JMaXN0OiBwYWdlICIuY29uY2F0KGEpKTtNKGkpO3ZhciBvPWs+PW4uVmVyYm9zaXR5TGV2ZWwuSU5GT1M/RGF0ZS5ub3coKTowO3IuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOkUsc2luazp0LHRhc2s6aSxpbnRlbnQ6ZS5pbnRlbnQsY2FjaGVLZXk6ZS5jYWNoZUtleSxhbm5vdGF0aW9uU3RvcmFnZTplLmFubm90YXRpb25TdG9yYWdlfSkudGhlbigoZnVuY3Rpb24oZSl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0T3BlcmF0b3JMaXN0OiB0aW1lPSIpKyIiLmNvbmNhdChEYXRlLm5vdygpLW8sIm1zLCBsZW49IikuY29uY2F0KGUubGVuZ3RoKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFRleHRDb250ZW50IiwoZnVuY3Rpb24oZSx0KXt2YXIgYT1lLnBhZ2VJbmRleDtyLmdldFBhZ2UoYSkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9bmV3IHgoIkdldFRleHRDb250ZW50OiBwYWdlICIrYSk7TShpKTt2YXIgbz1rPj1uLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDtyLmV4dHJhY3RUZXh0Q29udGVudCh7aGFuZGxlcjpFLHRhc2s6aSxzaW5rOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ZS5pbmNsdWRlTWFya2VkQ29udGVudCxjb21iaW5lVGV4dEl0ZW1zOmUuY29tYmluZVRleHRJdGVtc30pLnRoZW4oKGZ1bmN0aW9uKCl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9IikrIiIuY29uY2F0KERhdGUubm93KCktbywibXMiKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmUoZSwiZ2V0U3RydWN0VHJlZSIpfSkpfSkpLEUub24oIkZvbnRGYWxsYmFjayIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmZvbnRGYWxsYmFjayhlLmlkLEUpfSkpLEUub24oIkNsZWFudXAiLChmdW5jdGlvbihlKXtyZXR1cm4gci5jbGVhbnVwKCEwKX0pKSxFLm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXt2PSEwO3ZhciB0PVtdO2lmKHIpe3IudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO3ZhciBhPXIuY2xlYW51cCgpO3QucHVzaChhKSxyPW51bGx9ZWxzZSgwLHMuY2xlYXJHbG9iYWxDYWNoZXMpKCk7YiYmYihuZXcgbi5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtmb3IodmFyIGk9MCxvPXc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07dC5wdXNoKGMuZmluaXNoZWQpLGMudGVybWluYXRlKCl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7RS5kZXN0cm95KCksRT1udWxsfSkpfSkpLEUub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aigpLEUuc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gYShlKXtpZihqKCksZSBpbnN0YW5jZW9mIG4uUGFzc3dvcmRFeGNlcHRpb24pe3ZhciB0PW5ldyB4KCJQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgIi5jb25jYXQoZS5jb2RlKSk7TSh0KSxFLnNlbmRXaXRoUHJvbWlzZSgiUGFzc3dvcmRSZXF1ZXN0IixlKS50aGVuKChmdW5jdGlvbihlKXt2YXIgbj1lLnBhc3N3b3JkO18odCksci51cGRhdGVQYXNzd29yZChuKSxzKCl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7Xyh0KSxFLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSl9KSl9ZWxzZSBlIGluc3RhbmNlb2Ygbi5JbnZhbGlkUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5NaXNzaW5nUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBuLlVua25vd25FcnJvckV4Y2VwdGlvbj9FLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSk6RS5zZW5kKCJEb2NFeGNlcHRpb24iLG5ldyBuLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKSl9ZnVuY3Rpb24gcygpe2ooKSxMKCExKS50aGVuKHQsKGZ1bmN0aW9uKGUpe2ooKSxlIGluc3RhbmNlb2YgaS5YUmVmUGFyc2VFeGNlcHRpb24/ci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oKXtqKCksTCghMCkudGhlbih0LGEpfSkpOmEoZSl9KSl9aigpLGZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5kYXRhLGE9ZS5wYXNzd29yZCxpPWUuZGlzYWJsZUF1dG9GZXRjaCxzPWUucmFuZ2VDaHVua1NpemUsYz1lLmxlbmd0aCx1PWUuZG9jQmFzZVVybCxsPWUuZW5hYmxlWGZhLGg9ZS5ldmFsdWF0b3JPcHRpb25zLGQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtpZihyKXt0cnl7dD1uZXcgby5Mb2NhbFBkZk1hbmFnZXIoTyxyLGEsRSxoLGwsdSksZC5yZXNvbHZlKHQpfWNhdGNoKGUpe2QucmVqZWN0KGUpfXJldHVybiBkLnByb21pc2V9dmFyIHAsZz1bXTt0cnl7cD1uZXcgZi5QREZXb3JrZXJTdHJlYW0oRSl9Y2F0Y2goZSl7cmV0dXJuIGQucmVqZWN0KGUpLGQucHJvbWlzZX12YXIgdj1wLmdldEZ1bGxSZWFkZXIoKTt2LmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe2lmKHYuaXNSYW5nZVN1cHBvcnRlZCl7aT1pfHx2LmlzU3RyZWFtaW5nU3VwcG9ydGVkLHQ9bmV3IG8uTmV0d29ya1BkZk1hbmFnZXIoTyxwLHttc2dIYW5kbGVyOkUscGFzc3dvcmQ6YSxsZW5ndGg6di5jb250ZW50TGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aSxyYW5nZUNodW5rU2l6ZTpzfSxoLGwsdSk7Zm9yKHZhciBlPTAscj1nO2U8ci5sZW5ndGg7ZSsrKXt2YXIgbj1yW2VdO3Quc2VuZFByb2dyZXNzaXZlRGF0YShuKX1nPVtdLGQucmVzb2x2ZSh0KSxiPW51bGx9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtkLnJlamVjdChlKSxiPW51bGx9KSk7dmFyIHk9MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscil7di5yZWFkKCkudGhlbigoZnVuY3Rpb24gZShpKXt2YXIgcz1pLnZhbHVlLGY9aS5kb25lO3RyeXtpZihqKCksZilyZXR1cm4gdHx8ZnVuY3Rpb24oKXt2YXIgZT0oMCxuLmFycmF5c1RvQnl0ZXMpKGcpO2MmJmUubGVuZ3RoIT09YyYmKDAsbi53YXJuKSgicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsIik7dHJ5e3Q9bmV3IG8uTG9jYWxQZGZNYW5hZ2VyKE8sZSxhLEUsaCxsLHUpLGQucmVzb2x2ZSh0KX1jYXRjaChlKXtkLnJlamVjdChlKX1nPVtdfSgpLHZvaWQoYj1udWxsKTt5Kz0oMCxuLmFycmF5Qnl0ZUxlbmd0aCkocyksdi5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8RS5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp5LHRvdGFsOk1hdGgubWF4KHksdi5jb250ZW50TGVuZ3RofHwwKX0pLHQ/dC5zZW5kUHJvZ3Jlc3NpdmVEYXRhKHMpOmcucHVzaChzKSx2LnJlYWQoKS50aGVuKGUscil9Y2F0Y2goZSl7cihlKX19KSxyKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7ZC5yZWplY3QoZSksYj1udWxsfSkpLGI9ZnVuY3Rpb24oZSl7cC5jYW5jZWxBbGxSZXF1ZXN0cyhlKX0sZC5wcm9taXNlfShlKS50aGVuKChmdW5jdGlvbihlKXtpZih2KXRocm93IGUudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpLG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIik7KHI9ZSkucmVxdWVzdExvYWRlZFN0cmVhbSghMCkudGhlbigoZnVuY3Rpb24oZSl7RS5zZW5kKCJEYXRhTG9hZGVkIix7bGVuZ3RoOmUuYnl0ZXMuYnl0ZUxlbmd0aH0pfSkpfSkpLnRoZW4ocyxhKX0oZSksZT1udWxsfSkpLEl9fSx7a2V5OiJpbml0aWFsaXplRnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKCJ3b3JrZXIiLCJtYWluIix0KTtlLnNldHVwKHIsdCksci5zZW5kKCJyZWFkeSIsbnVsbCl9fV0pLGV9KCk7dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1BLCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYhdS5pc05vZGVKUyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYiZnVuY3Rpb24iPT10eXBlb2YoTz1zZWxmKS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBPJiZBLmluaXRpYWxpemVGcm9tUG9ydChzZWxmKX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGkoZSl9KGUpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxhKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGkoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW8oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1vKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09byhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQoZSk7aWYodCl7dmFyIGE9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1vKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlZlcmJvc2l0eUxldmVsPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXQuVGV4dFJlbmRlcmluZ01vZGU9dC5TdHJlYW1UeXBlPXQuUmVuZGVyaW5nSW50ZW50RmxhZz10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10LlBhZ2VBY3Rpb25FdmVudFR5cGU9dC5PUFM9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTElORV9GQUNUT1I9dC5MSU5FX0RFU0NFTlRfRkFDVE9SPXQuSW52YWxpZFBERkV4Y2VwdGlvbj10LkltYWdlS2luZD10LklERU5USVRZX01BVFJJWD10LkZvcm1hdEVycm9yPXQuRm9udFR5cGU9dC5GZWF0dXJlVGVzdD10LkZPTlRfSURFTlRJVFlfTUFUUklYPXQuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuQmFzZUV4Y2VwdGlvbj10LkJBU0VMSU5FX0ZBQ1RPUj10LkFubm90YXRpb25UeXBlPXQuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlPXQuQW5ub3RhdGlvblJldmlld1N0YXRlPXQuQW5ub3RhdGlvblJlcGx5VHlwZT10LkFubm90YXRpb25Nb2RlPXQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXQuQW5ub3RhdGlvbkZsYWc9dC5Bbm5vdGF0aW9uRmllbGRGbGFnPXQuQW5ub3RhdGlvbkVkaXRvclR5cGU9dC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PXQuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXQuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT10LkFib3J0RXhjZXB0aW9uPXZvaWQgMCx0LmFycmF5Qnl0ZUxlbmd0aD1QLHQuYXJyYXlzVG9CeXRlcz1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZigxPT09dCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTtmb3IodmFyIHI9MCxuPTA7bjx0O24rKylyKz1QKGVbbl0pO2Zvcih2YXIgYT0wLGk9bmV3IFVpbnQ4QXJyYXkociksbz0wO288dDtvKyspe3ZhciBzPWVbb107cyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fChzPSJzdHJpbmciPT10eXBlb2Ygcz9GKHMpOm5ldyBVaW50OEFycmF5KHMpKTt2YXIgYz1zLmJ5dGVMZW5ndGg7aS5zZXQocyxhKSxhKz1jfXJldHVybiBpfSx0LmFzc2VydD1mdW5jdGlvbihlLHQpe2V8fHkodCl9LHQuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXsib2JqZWN0Ij09PW8oZSkmJm51bGwhPT1lJiZ2b2lkIDAhPT1lLmxlbmd0aHx8eSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYnl0ZXNUb1N0cmluZyIpO3ZhciB0PWUubGVuZ3RoLHI9ODE5MjtpZih0PHIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IodmFyIG49W10sYT0wO2E8dDthKz1yKXt2YXIgaT1NYXRoLm1pbihhK3IsdCkscz1lLnN1YmFycmF5KGEsaSk7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIG4uam9pbigiIil9LHQuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk9ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9ITE7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzZXR0bGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fSksZS5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UucmVzb2x2ZT1mdW5jdGlvbihlKXt0PSEwLHIoZSl9LGUucmVqZWN0PWZ1bmN0aW9uKGUpe3Q9ITAsbihlKX19KSksZX0sdC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIWUpcmV0dXJuIG51bGw7dHJ5e2lmKHImJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoci5hZGREZWZhdWx0UHJvdG9jb2wmJmUuc3RhcnRzV2l0aCgid3d3LiIpKXt2YXIgbj1lLm1hdGNoKC9cLi9nKTtuJiZuLmxlbmd0aD49MiYmKGU9Imh0dHA6Ly8iLmNvbmNhdChlKSl9aWYoci50cnlDb252ZXJ0RW5jb2RpbmcpdHJ5e2U9TShlKX1jYXRjaChlKXt9fXZhciBhPXQ/bmV3IFVSTChlLHQpOm5ldyBVUkwoZSk7aWYoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7c3dpdGNoKGUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0oYSkpcmV0dXJuIGF9Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmdldE1vZGlmaWNhdGlvbkRhdGU9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmV3IERhdGU7cmV0dXJuW2UuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLChlLmdldFVUQ01vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpXS5qb2luKCIiKX0sdC5nZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBnfSx0LmluZm89ZnVuY3Rpb24oZSl7Zz49cC5JTkZPUyYmY29uc29sZS5sb2coIkluZm86ICIuY29uY2F0KGUpKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09byhlKSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdC5pc0FycmF5RXF1YWw9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH0sdC5vYmplY3RGcm9tTWFwPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWEoZSkpKXtyJiYoZT1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgbyxzPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBzPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsbz1lfSxmOmZ1bmN0aW9uKCl7dHJ5e3N8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBvfX19fShlKTt0cnl7Zm9yKGkucygpOyEodD1pLm4oKSkuZG9uZTspe3ZhciBvPShyPXQudmFsdWUsMixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShyKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHIpfHxhKHIsMil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkscz1vWzBdLGM9b1sxXTtuW3NdPWN9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBufSx0Lm9iamVjdFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aH0sdC5zZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoZz1lKX0sdC5zaGFkb3c9bSx0LnN0cmluZzMyPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmUpfSx0LnN0cmluZ1RvQnl0ZXM9Rix0LnN0cmluZ1RvUERGU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGVbMF0+PSLDryImJigiw74iPT09ZVswXSYmIsO/Ij09PWVbMV0/dD0idXRmLTE2YmUiOiLDvyI9PT1lWzBdJiYiw74iPT09ZVsxXT90PSJ1dGYtMTZsZSI6IsOvIj09PWVbMF0mJiLCuyI9PT1lWzFdJiYiwr8iPT09ZVsyXSYmKHQ9InV0Zi04IiksdCkpdHJ5e3ZhciByPW5ldyBUZXh0RGVjb2Rlcih0LHtmYXRhbDohMH0pLG49RihlKTtyZXR1cm4gci5kZWNvZGUobil9Y2F0Y2goZSl7dignc3RyaW5nVG9QREZTdHJpbmc6ICInLmNvbmNhdChlLCciLicpKX1mb3IodmFyIGE9W10saT0wLG89ZS5sZW5ndGg7aTxvO2krKyl7dmFyIHM9altlLmNoYXJDb2RlQXQoaSldO2EucHVzaChzP1N0cmluZy5mcm9tQ2hhckNvZGUocyk6ZS5jaGFyQXQoaSkpfXJldHVybiBhLmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGOFN0cmluZz1NLHQudW5yZWFjaGFibGU9eSx0LnV0ZjhTdHJpbmdUb1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX0sdC53YXJuPXYsZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZHx8KGdsb2JhbFRoaXMuX3BkZmpzQ29tcGF0aWJpbGl0eUNoZWNrZWQ9ITAscigzKSksdC5JREVOVElUWV9NQVRSSVg9WzEsMCwwLDEsMCwwXSx0LkZPTlRfSURFTlRJVFlfTUFUUklYPVsuMDAxLDAsMCwuMDAxLDAsMF0sdC5MSU5FX0ZBQ1RPUj0xLjM1LHQuTElORV9ERVNDRU5UX0ZBQ1RPUj0uMzUsdC5CQVNFTElORV9GQUNUT1I9LjI1OTI1OTI1OTI1OTI1OTI0LHQuUmVuZGVyaW5nSW50ZW50RmxhZz17QU5ZOjEsRElTUExBWToyLFBSSU5UOjQsU0FWRTo4LEFOTk9UQVRJT05TX0ZPUk1TOjE2LEFOTk9UQVRJT05TX1NUT1JBR0U6MzIsQU5OT1RBVElPTlNfRElTQUJMRTo2NCxPUExJU1Q6MjU2fSx0LkFubm90YXRpb25Nb2RlPXtESVNBQkxFOjAsRU5BQkxFOjEsRU5BQkxFX0ZPUk1TOjIsRU5BQkxFX1NUT1JBR0U6M30sdC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PSJwZGZqc19pbnRlcm5hbF9lZGl0b3JfIix0LkFubm90YXRpb25FZGl0b3JUeXBlPXtESVNBQkxFOi0xLE5PTkU6MCxGUkVFVEVYVDozLElOSzoxNX0sdC5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT17RlJFRVRFWFRfU0laRToxLEZSRUVURVhUX0NPTE9SOjIsRlJFRVRFWFRfT1BBQ0lUWTozLElOS19DT0xPUjoxMSxJTktfVEhJQ0tORVNTOjEyLElOS19PUEFDSVRZOjEzfSx0LlBlcm1pc3Npb25GbGFnPXtQUklOVDo0LE1PRElGWV9DT05URU5UUzo4LENPUFk6MTYsTU9ESUZZX0FOTk9UQVRJT05TOjMyLEZJTExfSU5URVJBQ1RJVkVfRk9STVM6MjU2LENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6NTEyLEFTU0VNQkxFOjEwMjQsUFJJTlRfSElHSF9RVUFMSVRZOjIwNDh9LHQuVGV4dFJlbmRlcmluZ01vZGU9e0ZJTEw6MCxTVFJPS0U6MSxGSUxMX1NUUk9LRToyLElOVklTSUJMRTozLEZJTExfQUREX1RPX1BBVEg6NCxTVFJPS0VfQUREX1RPX1BBVEg6NSxGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDo2LEFERF9UT19QQVRIOjcsRklMTF9TVFJPS0VfTUFTSzozLEFERF9UT19QQVRIX0ZMQUc6NH0sdC5JbWFnZUtpbmQ9e0dSQVlTQ0FMRV8xQlBQOjEsUkdCXzI0QlBQOjIsUkdCQV8zMkJQUDozfSx0LkFubm90YXRpb25UeXBlPXtURVhUOjEsTElOSzoyLEZSRUVURVhUOjMsTElORTo0LFNRVUFSRTo1LENJUkNMRTo2LFBPTFlHT046NyxQT0xZTElORTo4LEhJR0hMSUdIVDo5LFVOREVSTElORToxMCxTUVVJR0dMWToxMSxTVFJJS0VPVVQ6MTIsU1RBTVA6MTMsQ0FSRVQ6MTQsSU5LOjE1LFBPUFVQOjE2LEZJTEVBVFRBQ0hNRU5UOjE3LFNPVU5EOjE4LE1PVklFOjE5LFdJREdFVDoyMCxTQ1JFRU46MjEsUFJJTlRFUk1BUks6MjIsVFJBUE5FVDoyMyxXQVRFUk1BUks6MjQsVEhSRUVEOjI1LFJFREFDVDoyNn0sdC5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9e01BUktFRDoiTWFya2VkIixSRVZJRVc6IlJldmlldyJ9LHQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXtNQVJLRUQ6Ik1hcmtlZCIsVU5NQVJLRUQ6IlVubWFya2VkIn0sdC5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9e0FDQ0VQVEVEOiJBY2NlcHRlZCIsUkVKRUNURUQ6IlJlamVjdGVkIixDQU5DRUxMRUQ6IkNhbmNlbGxlZCIsQ09NUExFVEVEOiJDb21wbGV0ZWQiLE5PTkU6Ik5vbmUifSx0LkFubm90YXRpb25SZXBseVR5cGU9e0dST1VQOiJHcm91cCIsUkVQTFk6IlIifSx0LkFubm90YXRpb25GbGFnPXtJTlZJU0lCTEU6MSxISURERU46MixQUklOVDo0LE5PWk9PTTo4LE5PUk9UQVRFOjE2LE5PVklFVzozMixSRUFET05MWTo2NCxMT0NLRUQ6MTI4LFRPR0dMRU5PVklFVzoyNTYsTE9DS0VEQ09OVEVOVFM6NTEyfSx0LkFubm90YXRpb25GaWVsZEZsYWc9e1JFQURPTkxZOjEsUkVRVUlSRUQ6MixOT0VYUE9SVDo0LE1VTFRJTElORTo0MDk2LFBBU1NXT1JEOjgxOTIsTk9UT0dHTEVUT09GRjoxNjM4NCxSQURJTzozMjc2OCxQVVNIQlVUVE9OOjY1NTM2LENPTUJPOjEzMTA3MixFRElUOjI2MjE0NCxTT1JUOjUyNDI4OCxGSUxFU0VMRUNUOjEwNDg1NzYsTVVMVElTRUxFQ1Q6MjA5NzE1MixET05PVFNQRUxMQ0hFQ0s6NDE5NDMwNCxET05PVFNDUk9MTDo4Mzg4NjA4LENPTUI6MTY3NzcyMTYsUklDSFRFWFQ6MzM1NTQ0MzIsUkFESU9TSU5VTklTT046MzM1NTQ0MzIsQ09NTUlUT05TRUxDSEFOR0U6NjcxMDg4NjR9LHQuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT17U09MSUQ6MSxEQVNIRUQ6MixCRVZFTEVEOjMsSU5TRVQ6NCxVTkRFUkxJTkU6NX0sdC5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPXtFOiJNb3VzZSBFbnRlciIsWDoiTW91c2UgRXhpdCIsRDoiTW91c2UgRG93biIsVToiTW91c2UgVXAiLEZvOiJGb2N1cyIsQmw6IkJsdXIiLFBPOiJQYWdlT3BlbiIsUEM6IlBhZ2VDbG9zZSIsUFY6IlBhZ2VWaXNpYmxlIixQSToiUGFnZUludmlzaWJsZSIsSzoiS2V5c3Ryb2tlIixGOiJGb3JtYXQiLFY6IlZhbGlkYXRlIixDOiJDYWxjdWxhdGUifSx0LkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlPXtXQzoiV2lsbENsb3NlIixXUzoiV2lsbFNhdmUiLERTOiJEaWRTYXZlIixXUDoiV2lsbFByaW50IixEUDoiRGlkUHJpbnQifSx0LlBhZ2VBY3Rpb25FdmVudFR5cGU9e086IlBhZ2VPcGVuIixDOiJQYWdlQ2xvc2UifSx0LlN0cmVhbVR5cGU9e1VOS05PV046IlVOS05PV04iLEZMQVRFOiJGTEFURSIsTFpXOiJMWlciLERDVDoiRENUIixKUFg6IkpQWCIsSkJJRzoiSkJJRyIsQTg1OiJBODUiLEFIWDoiQUhYIixDQ0Y6IkNDRiIsUkxYOiJSTFgifSx0LkZvbnRUeXBlPXtVTktOT1dOOiJVTktOT1dOIixUWVBFMToiVFlQRTEiLFRZUEUxU1RBTkRBUkQ6IlRZUEUxU1RBTkRBUkQiLFRZUEUxQzoiVFlQRTFDIixDSURGT05UVFlQRTA6IkNJREZPTlRUWVBFMCIsQ0lERk9OVFRZUEUwQzoiQ0lERk9OVFRZUEUwQyIsVFJVRVRZUEU6IlRSVUVUWVBFIixDSURGT05UVFlQRTI6IkNJREZPTlRUWVBFMiIsVFlQRTM6IlRZUEUzIixPUEVOVFlQRToiT1BFTlRZUEUiLFRZUEUwOiJUWVBFMCIsTU1UWVBFMToiTU1UWVBFMSJ9O3ZhciBwPXtFUlJPUlM6MCxXQVJOSU5HUzoxLElORk9TOjV9O3QuVmVyYm9zaXR5TGV2ZWw9cCx0LkNNYXBDb21wcmVzc2lvblR5cGU9e05PTkU6MCxCSU5BUlk6MX0sdC5PUFM9e2RlcGVuZGVuY3k6MSxzZXRMaW5lV2lkdGg6MixzZXRMaW5lQ2FwOjMsc2V0TGluZUpvaW46NCxzZXRNaXRlckxpbWl0OjUsc2V0RGFzaDo2LHNldFJlbmRlcmluZ0ludGVudDo3LHNldEZsYXRuZXNzOjgsc2V0R1N0YXRlOjksc2F2ZToxMCxyZXN0b3JlOjExLHRyYW5zZm9ybToxMixtb3ZlVG86MTMsbGluZVRvOjE0LGN1cnZlVG86MTUsY3VydmVUbzI6MTYsY3VydmVUbzM6MTcsY2xvc2VQYXRoOjE4LHJlY3RhbmdsZToxOSxzdHJva2U6MjAsY2xvc2VTdHJva2U6MjEsZmlsbDoyMixlb0ZpbGw6MjMsZmlsbFN0cm9rZToyNCxlb0ZpbGxTdHJva2U6MjUsY2xvc2VGaWxsU3Ryb2tlOjI2LGNsb3NlRU9GaWxsU3Ryb2tlOjI3LGVuZFBhdGg6MjgsY2xpcDoyOSxlb0NsaXA6MzAsYmVnaW5UZXh0OjMxLGVuZFRleHQ6MzIsc2V0Q2hhclNwYWNpbmc6MzMsc2V0V29yZFNwYWNpbmc6MzQsc2V0SFNjYWxlOjM1LHNldExlYWRpbmc6MzYsc2V0Rm9udDozNyxzZXRUZXh0UmVuZGVyaW5nTW9kZTozOCxzZXRUZXh0UmlzZTozOSxtb3ZlVGV4dDo0MCxzZXRMZWFkaW5nTW92ZVRleHQ6NDEsc2V0VGV4dE1hdHJpeDo0MixuZXh0TGluZTo0MyxzaG93VGV4dDo0NCxzaG93U3BhY2VkVGV4dDo0NSxuZXh0TGluZVNob3dUZXh0OjQ2LG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OjQ3LHNldENoYXJXaWR0aDo0OCxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6NDksc2V0U3Ryb2tlQ29sb3JTcGFjZTo1MCxzZXRGaWxsQ29sb3JTcGFjZTo1MSxzZXRTdHJva2VDb2xvcjo1MixzZXRTdHJva2VDb2xvck46NTMsc2V0RmlsbENvbG9yOjU0LHNldEZpbGxDb2xvck46NTUsc2V0U3Ryb2tlR3JheTo1NixzZXRGaWxsR3JheTo1NyxzZXRTdHJva2VSR0JDb2xvcjo1OCxzZXRGaWxsUkdCQ29sb3I6NTksc2V0U3Ryb2tlQ01ZS0NvbG9yOjYwLHNldEZpbGxDTVlLQ29sb3I6NjEsc2hhZGluZ0ZpbGw6NjIsYmVnaW5JbmxpbmVJbWFnZTo2MyxiZWdpbkltYWdlRGF0YTo2NCxlbmRJbmxpbmVJbWFnZTo2NSxwYWludFhPYmplY3Q6NjYsbWFya1BvaW50OjY3LG1hcmtQb2ludFByb3BzOjY4LGJlZ2luTWFya2VkQ29udGVudDo2OSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczo3MCxlbmRNYXJrZWRDb250ZW50OjcxLGJlZ2luQ29tcGF0OjcyLGVuZENvbXBhdDo3MyxwYWludEZvcm1YT2JqZWN0QmVnaW46NzQscGFpbnRGb3JtWE9iamVjdEVuZDo3NSxiZWdpbkdyb3VwOjc2LGVuZEdyb3VwOjc3LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SW1hZ2VNYXNrWE9iamVjdDo4MyxwYWludEltYWdlTWFza1hPYmplY3RHcm91cDo4NCxwYWludEltYWdlWE9iamVjdDo4NSxwYWludElubGluZUltYWdlWE9iamVjdDo4NixwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOjg3LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Ojg4LHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDo4OSxwYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6OTAsY29uc3RydWN0UGF0aDo5MX0sdC5VTlNVUFBPUlRFRF9GRUFUVVJFUz17Zm9ybXM6ImZvcm1zIixqYXZhU2NyaXB0OiJqYXZhU2NyaXB0IixzaWduYXR1cmVzOiJzaWduYXR1cmVzIixzbWFzazoic21hc2siLHNoYWRpbmdQYXR0ZXJuOiJzaGFkaW5nUGF0dGVybiIsZXJyb3JUaWxpbmdQYXR0ZXJuOiJlcnJvclRpbGluZ1BhdHRlcm4iLGVycm9yRXh0R1N0YXRlOiJlcnJvckV4dEdTdGF0ZSIsZXJyb3JYT2JqZWN0OiJlcnJvclhPYmplY3QiLGVycm9yRm9udExvYWRUeXBlMzoiZXJyb3JGb250TG9hZFR5cGUzIixlcnJvckZvbnRTdGF0ZToiZXJyb3JGb250U3RhdGUiLGVycm9yRm9udE1pc3Npbmc6ImVycm9yRm9udE1pc3NpbmciLGVycm9yRm9udFRyYW5zbGF0ZToiZXJyb3JGb250VHJhbnNsYXRlIixlcnJvckNvbG9yU3BhY2U6ImVycm9yQ29sb3JTcGFjZSIsZXJyb3JPcGVyYXRvckxpc3Q6ImVycm9yT3BlcmF0b3JMaXN0IixlcnJvckZvbnRUb1VuaWNvZGU6ImVycm9yRm9udFRvVW5pY29kZSIsZXJyb3JGb250TG9hZE5hdGl2ZToiZXJyb3JGb250TG9hZE5hdGl2ZSIsZXJyb3JGb250QnVpbGRQYXRoOiJlcnJvckZvbnRCdWlsZFBhdGgiLGVycm9yRm9udEdldFBhdGg6ImVycm9yRm9udEdldFBhdGgiLGVycm9yTWFya2VkQ29udGVudDoiZXJyb3JNYXJrZWRDb250ZW50IixlcnJvckNvbnRlbnRTdWJTdHJlYW06ImVycm9yQ29udGVudFN1YlN0cmVhbSJ9LHQuUGFzc3dvcmRSZXNwb25zZXM9e05FRURfUEFTU1dPUkQ6MSxJTkNPUlJFQ1RfUEFTU1dPUkQ6Mn07dmFyIGc9cC5XQVJOSU5HUztmdW5jdGlvbiB2KGUpe2c+PXAuV0FSTklOR1MmJmNvbnNvbGUubG9nKCJXYXJuaW5nOiAiLmNvbmNhdChlKSl9ZnVuY3Rpb24geShlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gbShlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiFuLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5jb25zdHJ1Y3Rvcj09PWUmJnkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VFeGNlcHRpb24uIiksdGhpcy5tZXNzYWdlPXQsdGhpcy5uYW1lPXJ9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LkJhc2VFeGNlcHRpb249Yjt2YXIgdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJQYXNzd29yZEV4Y2VwdGlvbiIpKS5jb2RlPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5QYXNzd29yZEV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpKS5kZXRhaWxzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5Vbmtub3duRXJyb3JFeGNlcHRpb249azt2YXIgUz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiSW52YWxpZFBERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0LkludmFsaWRQREZFeGNlcHRpb249Uzt2YXIgeD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiTWlzc2luZ1BERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0Lk1pc3NpbmdQREZFeGNlcHRpb249eDt2YXIgTz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iKSkuc3RhdHVzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb249Tzt2YXIgQT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRm9ybWF0RXJyb3IiKX1yZXR1cm4gYyhyKX0oYik7dC5Gb3JtYXRFcnJvcj1BO3ZhciBDPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJBYm9ydEV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTtmdW5jdGlvbiBGKGUpeyJzdHJpbmciIT10eXBlb2YgZSYmeSgiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlcyIpO2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBVaW50OEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09MjU1JmUuY2hhckNvZGVBdChuKTtyZXR1cm4gcn1mdW5jdGlvbiBQKGUpe3JldHVybiB2b2lkIDAhPT1lLmxlbmd0aD9lLmxlbmd0aDp2b2lkIDAhPT1lLmJ5dGVMZW5ndGg/ZS5ieXRlTGVuZ3RoOnZvaWQgeSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYXJyYXlCeXRlTGVuZ3RoIil9dC5BYm9ydEV4Y2VwdGlvbj1DO3ZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6ImlzTGl0dGxlRW5kaWFuIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0xpdHRsZUVuZGlhbiIsKChlPW5ldyBVaW50OEFycmF5KDQpKVswXT0xLDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXSkpO3ZhciBlfX0se2tleToiaXNFdmFsU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0V2YWxTdXBwb3J0ZWQiLGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSl9fSx7a2V5OiJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcywiaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQiLCJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzKX19LHtrZXk6InBsYXRmb3JtIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcj9tKHRoaXMsInBsYXRmb3JtIix7aXNXaW46ITEsaXNNYWM6ITF9KTptKHRoaXMsInBsYXRmb3JtIix7aXNXaW46bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJXaW4iKSxpc01hYzpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIk1hYyIpfSl9fV0pLGV9KCk7dC5GZWF0dXJlVGVzdD1UO3ZhciBJPW4oQXJyYXkoMjU2KS5rZXlzKCkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKX0pKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6Im1ha2VIZXhDb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiIjIi5jb25jYXQoSVtlXSkuY29uY2F0KElbdF0pLmNvbmNhdChJW3JdKX19LHtrZXk6InNjYWxlTWluTWF4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByO2VbMF0/KGVbMF08MCYmKHI9dFswXSx0WzBdPXRbMV0sdFsxXT1yKSx0WzBdKj1lWzBdLHRbMV0qPWVbMF0sZVszXTwwJiYocj10WzJdLHRbMl09dFszXSx0WzNdPXIpLHRbMl0qPWVbM10sdFszXSo9ZVszXSk6KHI9dFswXSx0WzBdPXRbMl0sdFsyXT1yLHI9dFsxXSx0WzFdPXRbM10sdFszXT1yLGVbMV08MCYmKHI9dFsyXSx0WzJdPXRbM10sdFszXT1yKSx0WzJdKj1lWzFdLHRbM10qPWVbMV0sZVsyXTwwJiYocj10WzBdLHRbMF09dFsxXSx0WzFdPXIpLHRbMF0qPWVbMl0sdFsxXSo9ZVsyXSksdFswXSs9ZVs0XSx0WzFdKz1lWzRdLHRbMl0rPWVbNV0sdFszXSs9ZVs1XX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX19LHtrZXk6ImFwcGx5VHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX19LHtrZXk6ImFwcGx5SW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9yLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9yXX19LHtrZXk6ImdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPWUuYXBwbHlUcmFuc2Zvcm0odCxyKSxhPWUuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLHIpLGk9ZS5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxyKSxvPWUuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0scik7cmV0dXJuW01hdGgubWluKG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWluKG5bMV0sYVsxXSxpWzFdLG9bMV0pLE1hdGgubWF4KG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWF4KG5bMV0sYVsxXSxpWzFdLG9bMV0pXX19LHtrZXk6ImludmVyc2VUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX19LHtrZXk6InNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0scj1lWzBdKnRbMF0rZVsxXSp0WzJdLG49ZVswXSp0WzFdK2VbMV0qdFszXSxhPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLG89KHIraSkvMixzPU1hdGguc3FydChNYXRoLnBvdyhyK2ksMiktNCoocippLWEqbikpLzIsYz1vK3N8fDEsdT1vLXN8fDE7cmV0dXJuW01hdGguc3FydChjKSxNYXRoLnNxcnQodSldfX0se2tleToibm9ybWFsaXplUmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zbGljZSgwKTtyZXR1cm4gZVswXT5lWzJdJiYodFswXT1lWzJdLHRbMl09ZVswXSksZVsxXT5lWzNdJiYodFsxXT1lWzNdLHRbM109ZVsxXSksdH19LHtrZXk6ImludGVyc2VjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLm1heChNYXRoLm1pbihlWzBdLGVbMl0pLE1hdGgubWluKHRbMF0sdFsyXSkpLG49TWF0aC5taW4oTWF0aC5tYXgoZVswXSxlWzJdKSxNYXRoLm1heCh0WzBdLHRbMl0pKTtpZihyPm4pcmV0dXJuIG51bGw7dmFyIGE9TWF0aC5tYXgoTWF0aC5taW4oZVsxXSxlWzNdKSxNYXRoLm1pbih0WzFdLHRbM10pKSxpPU1hdGgubWluKE1hdGgubWF4KGVbMV0sZVszXSksTWF0aC5tYXgodFsxXSx0WzNdKSk7cmV0dXJuIGE+aT9udWxsOltyLGEsbixpXX19LHtrZXk6ImJlemllckJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzLGMpe2Zvcih2YXIgdSxsLGYsaCxkLHAsZyx2LHk9W10sbT1bW10sW11dLGI9MDtiPDI7KytiKWlmKDA9PT1iPyhsPTYqZS0xMipyKzYqaSx1PS0zKmUrOSpyLTkqaSszKnMsZj0zKnItMyplKToobD02KnQtMTIqYSs2Km8sdT0tMyp0KzkqYS05Km8rMypjLGY9MyphLTMqdCksTWF0aC5hYnModSk8MWUtMTIpe2lmKE1hdGguYWJzKGwpPDFlLTEyKWNvbnRpbnVlOzA8KGg9LWYvbCkmJmg8MSYmeS5wdXNoKGgpfWVsc2UgZz1sKmwtNCpmKnUsdj1NYXRoLnNxcnQoZyksZzwwfHwoMDwoZD0oLWwrdikvKDIqdSkpJiZkPDEmJnkucHVzaChkKSwwPChwPSgtbC12KS8oMip1KSkmJnA8MSYmeS5wdXNoKHApKTtmb3IodmFyIHcsaz15Lmxlbmd0aCxTPWs7ay0tOyl3PTEtKGg9eVtrXSksbVswXVtrXT13KncqdyplKzMqdyp3KmgqciszKncqaCpoKmkraCpoKmgqcyxtWzFdW2tdPXcqdyp3KnQrMyp3KncqaCphKzMqdypoKmgqbytoKmgqaCpjO3JldHVybiBtWzBdW1NdPWUsbVsxXVtTXT10LG1bMF1bUysxXT1zLG1bMV1bUysxXT1jLG1bMF0ubGVuZ3RoPW1bMV0ubGVuZ3RoPVMrMixbTWF0aC5taW4uYXBwbHkoTWF0aCxuKG1bMF0pKSxNYXRoLm1pbi5hcHBseShNYXRoLG4obVsxXSkpLE1hdGgubWF4LmFwcGx5KE1hdGgsbihtWzBdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKG1bMV0pKV19fV0pLGV9KCk7dC5VdGlsPUU7dmFyIGo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcyOCw3MTEsNzEwLDcyOSw3MzMsNzMxLDczMCw3MzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODIyNiw4MjI0LDgyMjUsODIzMCw4MjEyLDgyMTEsNDAyLDgyNjAsODI0OSw4MjUwLDg3MjIsODI0MCw4MjIyLDgyMjAsODIyMSw4MjE2LDgyMTcsODIxOCw4NDgyLDY0MjU3LDY0MjU4LDMyMSwzMzgsMzUyLDM3NiwzODEsMzA1LDMyMiwzMzksMzUzLDM4MiwwLDgzNjRdO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNCk7IWdsb2JhbFRoaXMuYnRvYSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYnRvYT1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmluYXJ5IikudG9TdHJpbmcoImJhc2U2NCIpfSksIWdsb2JhbFRoaXMuYXRvYiYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYXRvYj1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoImJpbmFyeSIpfSksIWdsb2JhbFRoaXMuRE9NTWF0cml4JiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5ET01NYXRyaXg9cmVxdWlyZSgiY2FudmFzIikuRE9NTWF0cml4KSwhZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW09cmVxdWlyZSgid2ViLXN0cmVhbXMtcG9seWZpbGwvZGlzdC9wb255ZmlsbC5qcyIpLlJlYWRhYmxlU3RyZWFtKSxBcnJheS5wcm90b3R5cGUuYXR8fHIoNSksVWludDhBcnJheS5wcm90b3R5cGUuYXR8fHIoNzkpLGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lfHxyKDg5KX0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzTm9kZUpTPXZvaWQgMDt2YXIgbj0hKCJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgcHJvY2Vzcz8idW5kZWZpbmVkIjpyKHByb2Nlc3MpKXx8cHJvY2VzcysiIiE9IltvYmplY3QgcHJvY2Vzc10ifHxwcm9jZXNzLnZlcnNpb25zLm53fHxwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uJiZwcm9jZXNzLnR5cGUmJiJicm93c2VyIiE9PXByb2Nlc3MudHlwZSk7dC5pc05vZGVKUz1ufSwoZSx0LHIpPT57cig2KTt2YXIgbj1yKDc4KTtlLmV4cG9ydHM9bigiQXJyYXkiLCJhdCIpfSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoNDQpLGk9cig2OCksbz1yKDY2KSxzPXIoNzMpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKSxyPWkodCksbj1vKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfX0pLHMoImF0Iil9LChlLHQscik9Pnt2YXIgbj1yKDgpLGE9cig5KS5mLGk9cig0OCksbz1yKDUyKSxzPXIoNDIpLGM9cig2MCksdT1yKDcyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixsLGYsaCxkLHA9ZS50YXJnZXQsZz1lLmdsb2JhbCx2PWUuc3RhdDtpZihyPWc/bjp2P25bcF18fHMocCx7fSk6KG5bcF18fHt9KS5wcm90b3R5cGUpZm9yKGwgaW4gdCl7aWYoaD10W2xdLGY9ZS5kb250Q2FsbEdldFNldD8oZD1hKHIsbCkpJiZkLnZhbHVlOnJbbF0sIXUoZz9sOnArKHY/Ii4iOiIjIikrbCxlLmZvcmNlZCkmJnZvaWQgMCE9PWYpe2lmKHR5cGVvZiBoPT10eXBlb2YgZiljb250aW51ZTtjKGgsZil9KGUuc2hhbXx8ZiYmZi5zaGFtKSYmaShoLCJzaGFtIiwhMCksbyhyLGwsaCxlKX19fSxlPT57dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX07ZS5leHBvcnRzPXQoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8dCgib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8dCgib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHx0KCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDEyKSxpPXIoMTQpLG89cigxNSkscz1yKDE2KSxjPXIoMjIpLHU9cig0MyksbD1yKDQ2KSxmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4/ZjpmdW5jdGlvbihlLHQpe2lmKGU9cyhlKSx0PWModCksbCl0cnl7cmV0dXJuIGYoZSx0KX1jYXRjaChlKXt9aWYodShlLHQpKXJldHVybiBvKCFhKGkuZixlLHQpLGVbdF0pfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9bj9hLmJpbmQoYSk6ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShhLGFyZ3VtZW50cyl9fSwoZSx0LHIpPT57dmFyIG49cigxMSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGV8fGUuaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSkpfSwoZSx0KT0+e3ZhciByPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixhPW4mJiFyLmNhbGwoezE6Mn0sMSk7dC5mPWE/ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpyfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTcpLGE9cigyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuKGEoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigxMSksaT1yKDE5KSxvPU9iamVjdCxzPW4oIiIuc3BsaXQpO2UuZXhwb3J0cz1hKChmdW5jdGlvbigpe3JldHVybiFvKCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PWkoZSk/cyhlLCIiKTpvKGUpfTpvfSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUsaT1hLmNhbGwsbz1uJiZhLmJpbmQuYmluZChpLGkpO2UuZXhwb3J0cz1uP286ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoZSxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPW4oe30udG9TdHJpbmcpLGk9bigiIi5zbGljZSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKGEoZSksOCwtMSl9fSwoZSx0LHIpPT57dmFyIG49cigyMSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpdGhyb3cgYSgiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitlKTtyZXR1cm4gZX19LGU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fSwoZSx0LHIpPT57dmFyIG49cigyMyksYT1yKDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlLCJzdHJpbmciKTtyZXR1cm4gYSh0KT90OnQrIiJ9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDI0KSxpPXIoMjcpLG89cigzNCkscz1yKDM3KSxjPXIoMzgpLHU9VHlwZUVycm9yLGw9YygidG9QcmltaXRpdmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighYShlKXx8aShlKSlyZXR1cm4gZTt2YXIgcixjPW8oZSxsKTtpZihjKXtpZih2b2lkIDA9PT10JiYodD0iZGVmYXVsdCIpLHI9bihjLGUsdCksIWEocil8fGkocikpcmV0dXJuIHI7dGhyb3cgdSgiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PXQmJih0PSJudW1iZXIiKSxzKGUsdCl9fSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1yKDI2KSxpPWEuYWxsO2UuZXhwb3J0cz1hLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOm4oZSl8fGU9PT1pfTpmdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6bihlKX19LChlLHQscik9Pnt2YXIgbj1yKDI2KSxhPW4uYWxsO2UuZXhwb3J0cz1uLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV8fGU9PT1hfTpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX19LGU9Pnt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGwscj12b2lkIDA9PT10JiZ2b2lkIDAhPT10O2UuZXhwb3J0cz17YWxsOnQsSVNfSFRNTEREQTpyfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjgpLGE9cigyNSksaT1yKDI5KSxvPXIoMzApLHM9T2JqZWN0O2UuZXhwb3J0cz1vP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9bigiU3ltYm9sIik7cmV0dXJuIGEodCkmJmkodC5wcm90b3R5cGUscyhlKSl9fSwoZSx0LHIpPT57dmFyIG49cig4KSxhPXIoMjUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/KHI9bltlXSxhKHIpP3I6dm9pZCAwKTpuW2VdJiZuW2VdW3RdO3ZhciByfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpO2UuZXhwb3J0cz1uKHt9LmlzUHJvdG90eXBlT2YpfSwoZSx0LHIpPT57dmFyIG49cigzMSk7ZS5leHBvcnRzPW4mJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LChlLHQscik9Pnt2YXIgbj1yKDMyKSxhPXIoMTEpO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFhKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgpO3JldHVybiFTdHJpbmcoZSl8fCEoT2JqZWN0KGUpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJm4mJm48NDF9KSl9LChlLHQscik9Pnt2YXIgbixhLGk9cig4KSxvPXIoMzMpLHM9aS5wcm9jZXNzLGM9aS5EZW5vLHU9cyYmcy52ZXJzaW9uc3x8YyYmYy52ZXJzaW9uLGw9dSYmdS52ODtsJiYoYT0obj1sLnNwbGl0KCIuIikpWzBdPjAmJm5bMF08ND8xOisoblswXStuWzFdKSksIWEmJm8mJighKG49by5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fG5bMV0+PTc0KSYmKG49by5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKGE9K25bMV0pLGUuZXhwb3J0cz1hfSwoZSx0LHIpPT57dmFyIG49cigyOCk7ZS5leHBvcnRzPW4oIm5hdmlnYXRvciIsInVzZXJBZ2VudCIpfHwiIn0sKGUsdCxyKT0+e3ZhciBuPXIoMzUpLGE9cigyMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4gYShyKT92b2lkIDA6bihyKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMzYpLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSxlPT57dmFyIHQ9U3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2goZSl7cmV0dXJuIk9iamVjdCJ9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigyNSksaT1yKDI0KSxvPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixzO2lmKCJzdHJpbmciPT09dCYmYShyPWUudG9TdHJpbmcpJiYhaShzPW4ocixlKSkpcmV0dXJuIHM7aWYoYShyPWUudmFsdWVPZikmJiFpKHM9bihyLGUpKSlyZXR1cm4gcztpZigic3RyaW5nIiE9PXQmJmEocj1lLnRvU3RyaW5nKSYmIWkocz1uKHIsZSkpKXJldHVybiBzO3Rocm93IG8oIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDM5KSxpPXIoNDMpLG89cig0NSkscz1yKDMxKSxjPXIoMzApLHU9YSgid2tzIiksbD1uLlN5bWJvbCxmPWwmJmwuZm9yLGg9Yz9sOmwmJmwud2l0aG91dFNldHRlcnx8bztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIWkodSxlKXx8IXMmJiJzdHJpbmciIT10eXBlb2YgdVtlXSl7dmFyIHQ9IlN5bWJvbC4iK2U7cyYmaShsLGUpP3VbZV09bFtlXTp1W2VdPWMmJmY/Zih0KTpoKHQpfXJldHVybiB1W2VdfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDApLGE9cig0MSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhW2VdfHwoYVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4yNi4xIixtb2RlOm4/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxNC0yMDIyIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjI2LjEvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sZT0+e2UuZXhwb3J0cz0hMX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDQyKSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLG89bltpXXx8YShpLHt9KTtlLmV4cG9ydHM9b30sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e2EobixlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKHIpe25bZV09dH1yZXR1cm4gdH19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoNDQpLGk9bih7fS5oYXNPd25Qcm9wZXJ0eSk7ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoYShlKSx0KX19LChlLHQscik9Pnt2YXIgbj1yKDIwKSxhPU9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEobihlKSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT0wLGk9TWF0aC5yYW5kb20oKSxvPW4oMS4udG9TdHJpbmcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PWU/IiI6ZSkrIilfIitvKCsrYStpLDM2KX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpLGk9cig0Nyk7ZS5leHBvcnRzPSFuJiYhYSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI0KSxpPW4uZG9jdW1lbnQsbz1hKGkpJiZhKGkuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudChlKTp7fX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDkpLGk9cigxNSk7ZS5leHBvcnRzPW4/ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLmYoZSx0LGkoMSxyKSl9OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yLGV9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDQ2KSxpPXIoNTApLG89cig1MSkscz1yKDIyKSxjPVR5cGVFcnJvcix1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZj0iZW51bWVyYWJsZSIsaD0iY29uZmlndXJhYmxlIixkPSJ3cml0YWJsZSI7dC5mPW4/aT9mdW5jdGlvbihlLHQscil7aWYobyhlKSx0PXModCksbyhyKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmInByb3RvdHlwZSI9PT10JiYidmFsdWUiaW4gciYmZCBpbiByJiYhcltkXSl7dmFyIG49bChlLHQpO24mJm5bZF0mJihlW3RdPXIudmFsdWUscj17Y29uZmlndXJhYmxlOmggaW4gcj9yW2hdOm5baF0sZW51bWVyYWJsZTpmIGluIHI/cltmXTpuW2ZdLHdyaXRhYmxlOiExfSl9cmV0dXJuIHUoZSx0LHIpfTp1OmZ1bmN0aW9uKGUsdCxyKXtpZihvKGUpLHQ9cyh0KSxvKHIpLGEpdHJ5e3JldHVybiB1KGUsdCxyKX1jYXRjaChlKXt9aWYoImdldCJpbiByfHwic2V0ImluIHIpdGhyb3cgYygiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gciYmKGVbdF09ci52YWx1ZSksZX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpO2UuZXhwb3J0cz1uJiZhKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMjQpLGE9U3RyaW5nLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoNDkpLGk9cig1Myksbz1yKDQyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7c3x8KHM9e30pO3ZhciBjPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6dDtpZihuKHIpJiZpKHIsdSxzKSxzLmdsb2JhbCljP2VbdF09cjpvKHQscik7ZWxzZXt0cnl7cy51bnNhZmU/ZVt0XSYmKGM9ITApOmRlbGV0ZSBlW3RdfWNhdGNoKGUpe31jP2VbdF09cjphLmYoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiBlfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigyNSksaT1yKDQzKSxvPXIoMTApLHM9cig1NCkuQ09ORklHVVJBQkxFLGM9cig1NSksdT1yKDU2KSxsPXUuZW5mb3JjZSxmPXUuZ2V0LGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGQ9byYmIW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1oKChmdW5jdGlvbigpe30pLCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLHA9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLGc9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXsiU3ltYm9sKCI9PT1TdHJpbmcodCkuc2xpY2UoMCw3KSYmKHQ9IlsiK1N0cmluZyh0KS5yZXBsYWNlKC9eU3ltYm9sXCgoW14pXSopXCkvLCIkMSIpKyJdIiksciYmci5nZXR0ZXImJih0PSJnZXQgIit0KSxyJiZyLnNldHRlciYmKHQ9InNldCAiK3QpLCghaShlLCJuYW1lIil8fHMmJmUubmFtZSE9PXQpJiYobz9oKGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pOmUubmFtZT10KSxkJiZyJiZpKHIsImFyaXR5IikmJmUubGVuZ3RoIT09ci5hcml0eSYmaChlLCJsZW5ndGgiLHt2YWx1ZTpyLmFyaXR5fSk7dHJ5e3ImJmkociwiY29uc3RydWN0b3IiKSYmci5jb25zdHJ1Y3Rvcj9vJiZoKGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSk6ZS5wcm90b3R5cGUmJihlLnByb3RvdHlwZT12b2lkIDApfWNhdGNoKGUpe312YXIgbj1sKGUpO3JldHVybiBpKG4sInNvdXJjZSIpfHwobi5zb3VyY2U9cC5qb2luKCJzdHJpbmciPT10eXBlb2YgdD90OiIiKSksZX07RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPWcoKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykmJmYodGhpcykuc291cmNlfHxjKHRoaXMpfSksInRvU3RyaW5nIil9LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDMpLGk9RnVuY3Rpb24ucHJvdG90eXBlLG89biYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzPWEoaSwibmFtZSIpLGM9cyYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30ubmFtZSx1PXMmJighbnx8biYmbyhpLCJuYW1lIikuY29uZmlndXJhYmxlKTtlLmV4cG9ydHM9e0VYSVNUUzpzLFBST1BFUjpjLENPTkZJR1VSQUJMRTp1fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigyNSksaT1yKDQxKSxvPW4oRnVuY3Rpb24udG9TdHJpbmcpO2EoaS5pbnNwZWN0U291cmNlKXx8KGkuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0pLGUuZXhwb3J0cz1pLmluc3BlY3RTb3VyY2V9LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDU3KSxzPXIoOCksYz1yKDI0KSx1PXIoNDgpLGw9cig0MyksZj1yKDQxKSxoPXIoNTgpLGQ9cig1OSkscD0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLGc9cy5UeXBlRXJyb3Isdj1zLldlYWtNYXA7aWYob3x8Zi5zdGF0ZSl7dmFyIHk9Zi5zdGF0ZXx8KGYuc3RhdGU9bmV3IHYpO3kuZ2V0PXkuZ2V0LHkuaGFzPXkuaGFzLHkuc2V0PXkuc2V0LG49ZnVuY3Rpb24oZSx0KXtpZih5LmhhcyhlKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHkuc2V0KGUsdCksdH0sYT1mdW5jdGlvbihlKXtyZXR1cm4geS5nZXQoZSl8fHt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiB5LmhhcyhlKX19ZWxzZXt2YXIgbT1oKCJzdGF0ZSIpO2RbbV09ITAsbj1mdW5jdGlvbihlLHQpe2lmKGwoZSxtKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHUoZSxtLHQpLHR9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxtKT9lW21dOnt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsbSl9fWUuZXhwb3J0cz17c2V0Om4sZ2V0OmEsaGFzOmksZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKT9hKGUpOm4oZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI7aWYoIWModCl8fChyPWEodCkpLnR5cGUhPT1lKXRocm93IGcoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitlKyIgcmVxdWlyZWQiKTtyZXR1cm4gcn19fX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI1KSxpPW4uV2Vha01hcDtlLmV4cG9ydHM9YShpKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhpKSl9LChlLHQscik9Pnt2YXIgbj1yKDM5KSxhPXIoNDUpLGk9bigia2V5cyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaVtlXXx8KGlbZV09YShlKSl9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig0MyksYT1yKDYxKSxpPXIoOSksbz1yKDQ5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgcz1hKHQpLGM9by5mLHU9aS5mLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGY9c1tsXTtuKGUsZil8fHImJm4ocixmKXx8YyhlLGYsdSh0LGYpKX19fSwoZSx0LHIpPT57dmFyIG49cigyOCksYT1yKDE4KSxpPXIoNjIpLG89cig3MSkscz1yKDUxKSxjPWEoW10uY29uY2F0KTtlLmV4cG9ydHM9bigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mKHMoZSkpLHI9by5mO3JldHVybiByP2ModCxyKGUpKTp0fX0sKGUsdCxyKT0+e3ZhciBuPXIoNjMpLGE9cig3MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT1yKDQzKSxpPXIoMTYpLG89cig2NCkuaW5kZXhPZixzPXIoNTkpLGM9bihbXS5wdXNoKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWkoZSksdT0wLGw9W107Zm9yKHIgaW4gbikhYShzLHIpJiZhKG4scikmJmMobCxyKTtmb3IoO3QubGVuZ3RoPnU7KWEobixyPXRbdSsrXSkmJih+byhsLHIpfHxjKGwscikpO3JldHVybiBsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTYpLGE9cig2NSksaT1yKDY4KSxvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbyl7dmFyIHMsYz1uKHQpLHU9aShjKSxsPWEobyx1KTtpZihlJiZyIT1yKXtmb3IoO3U+bDspaWYoKHM9Y1tsKytdKSE9cylyZXR1cm4hMH1lbHNlIGZvcig7dT5sO2wrKylpZigoZXx8bCBpbiBjKSYmY1tsXT09PXIpcmV0dXJuIGV8fGx8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczpvKCEwKSxpbmRleE9mOm8oITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5tYXgsaT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpO3JldHVybiByPDA/YShyK3QsMCk6aShyLHQpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDpuKHQpfX0sZT0+e3ZhciB0PU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKGUpe3ZhciBuPStlO3JldHVybihuPjA/cjp0KShuKX19LChlLHQscik9Pnt2YXIgbj1yKDY5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS5sZW5ndGgpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/YShuKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxlPT57ZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LChlLHQpPT57dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LChlLHQscik9Pnt2YXIgbj1yKDExKSxhPXIoMjUpLGk9LyN8XC5wcm90b3R5cGVcLi8sbz1mdW5jdGlvbihlLHQpe3ZhciByPWNbcyhlKV07cmV0dXJuIHI9PWx8fHIhPXUmJihhKHQpP24odCk6ISF0KX0scz1vLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoaSwiLiIpLnRvTG93ZXJDYXNlKCl9LGM9by5kYXRhPXt9LHU9by5OQVRJVkU9Ik4iLGw9by5QT0xZRklMTD0iUCI7ZS5leHBvcnRzPW99LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoNzQpLGk9cig0OSkuZixvPW4oInVuc2NvcGFibGVzIikscz1BcnJheS5wcm90b3R5cGU7bnVsbD09c1tvXSYmaShzLG8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTphKG51bGwpfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3Nbb11bZV09ITB9fSwoZSx0LHIpPT57dmFyIG4sYT1yKDUxKSxpPXIoNzUpLG89cig3MCkscz1yKDU5KSxjPXIoNzcpLHU9cig0NyksbD1yKDU4KSxmPSJwcm90b3R5cGUiLGg9InNjcmlwdCIsZD1sKCJJRV9QUk9UTyIpLHA9ZnVuY3Rpb24oKXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIjwiK2grIj4iK2UrIjwvIitoKyI+In0sdj1mdW5jdGlvbihlKXtlLndyaXRlKGcoIiIpKSxlLmNsb3NlKCk7dmFyIHQ9ZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBlPW51bGwsdH0seT1mdW5jdGlvbigpe3RyeXtuPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoKGUpe312YXIgZSx0LHI7eT0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmbj92KG4pOih0PXUoImlmcmFtZSIpLHI9ImphdmEiK2grIjoiLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsYy5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcociksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShnKCJkb2N1bWVudC5GPU9iamVjdCIpKSxlLmNsb3NlKCksZS5GKTp2KG4pO2Zvcih2YXIgYT1vLmxlbmd0aDthLS07KWRlbGV0ZSB5W2ZdW29bYV1dO3JldHVybiB5KCl9O3NbZF09ITAsZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT1lPyhwW2ZdPWEoZSkscj1uZXcgcCxwW2ZdPW51bGwscltkXT1lKTpyPXkoKSx2b2lkIDA9PT10P3I6aS5mKHIsdCl9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDUwKSxpPXIoNDkpLG89cig1MSkscz1yKDE2KSxjPXIoNzYpO3QuZj1uJiYhYT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciByLG49cyh0KSxhPWModCksdT1hLmxlbmd0aCxsPTA7dT5sOylpLmYoZSxyPWFbbCsrXSxuW3JdKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDYzKSxhPXIoNzApO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxhKX19LChlLHQscik9Pnt2YXIgbj1yKDI4KTtlLmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShuW2VdLnByb3RvdHlwZVt0XSl9fSwoZSx0LHIpPT57cig4MCl9LChlLHQscik9Pnt2YXIgbj1yKDgxKSxhPXIoNjgpLGk9cig2Niksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzKSxyPWEodCksbj1pKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfSkpfSwoZSx0LHIpPT57dmFyIG4sYSxpLG89cig4Mikscz1yKDEwKSxjPXIoOCksdT1yKDI1KSxsPXIoMjQpLGY9cig0MyksaD1yKDgzKSxkPXIoMzYpLHA9cig0OCksZz1yKDUyKSx2PXIoNDkpLmYseT1yKDI5KSxtPXIoODUpLGI9cig4Nyksdz1yKDM4KSxrPXIoNDUpLFM9cig1NikseD1TLmVuZm9yY2UsTz1TLmdldCxBPWMuSW50OEFycmF5LEM9QSYmQS5wcm90b3R5cGUsRj1jLlVpbnQ4Q2xhbXBlZEFycmF5LFA9RiYmRi5wcm90b3R5cGUsVD1BJiZtKEEpLEk9QyYmbShDKSxFPU9iamVjdC5wcm90b3R5cGUsaj1jLlR5cGVFcnJvcixNPXcoInRvU3RyaW5nVGFnIiksXz1rKCJUWVBFRF9BUlJBWV9UQUciKSxMPSJUeXBlZEFycmF5Q29uc3RydWN0b3IiLFI9byYmISFiJiYiT3BlcmEiIT09aChjLm9wZXJhKSxOPSExLEQ9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxCPXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0sVT1mdW5jdGlvbihlKXt2YXIgdD1tKGUpO2lmKGwodCkpe3ZhciByPU8odCk7cmV0dXJuIHImJmYocixMKT9yW0xdOlUodCl9fSwkPWZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIGYoRCx0KXx8ZihCLHQpfTtmb3IobiBpbiBEKShpPShhPWNbbl0pJiZhLnByb3RvdHlwZSk/eChpKVtMXT1hOlI9ITE7Zm9yKG4gaW4gQikoaT0oYT1jW25dKSYmYS5wcm90b3R5cGUpJiYoeChpKVtMXT1hKTtpZigoIVJ8fCF1KFQpfHxUPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKFQ9ZnVuY3Rpb24oKXt0aHJvdyBqKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxSKSlmb3IobiBpbiBEKWNbbl0mJmIoY1tuXSxUKTtpZigoIVJ8fCFJfHxJPT09RSkmJihJPVQucHJvdG90eXBlLFIpKWZvcihuIGluIEQpY1tuXSYmYihjW25dLnByb3RvdHlwZSxJKTtpZihSJiZtKFApIT09SSYmYihQLEkpLHMmJiFmKEksTSkpZm9yKG4gaW4gTj0hMCx2KEksTSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcyk/dGhpc1tfXTp2b2lkIDB9fSksRCljW25dJiZwKGNbbl0sXyxuKTtlLmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6UixUWVBFRF9BUlJBWV9UQUc6TiYmXyxhVHlwZWRBcnJheTpmdW5jdGlvbihlKXtpZigkKGUpKXJldHVybiBlO3Rocm93IGooIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKGUpe2lmKHUoZSkmJighYnx8eShULGUpKSlyZXR1cm4gZTt0aHJvdyBqKGQoZSkrIiBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKHMpe2lmKHIpZm9yKHZhciBhIGluIEQpe3ZhciBpPWNbYV07aWYoaSYmZihpLnByb3RvdHlwZSxlKSl0cnl7ZGVsZXRlIGkucHJvdG90eXBlW2VdfWNhdGNoKHIpe3RyeXtpLnByb3RvdHlwZVtlXT10fWNhdGNoKGUpe319fUlbZV0mJiFyfHxnKEksZSxyP3Q6UiYmQ1tlXXx8dCxuKX19LGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7aWYocyl7aWYoYil7aWYocilmb3IobiBpbiBEKWlmKChhPWNbbl0pJiZmKGEsZSkpdHJ5e2RlbGV0ZSBhW2VdfWNhdGNoKGUpe31pZihUW2VdJiYhcilyZXR1cm47dHJ5e3JldHVybiBnKFQsZSxyP3Q6UiYmVFtlXXx8dCl9Y2F0Y2goZSl7fX1mb3IobiBpbiBEKSEoYT1jW25dKXx8YVtlXSYmIXJ8fGcoYSxlLHQpfX0sZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yOlUsaXNWaWV3OmZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIkRhdGFWaWV3Ij09PXR8fGYoRCx0KXx8ZihCLHQpfSxpc1R5cGVkQXJyYXk6JCxUeXBlZEFycmF5OlQsVHlwZWRBcnJheVByb3RvdHlwZTpJfX0sZT0+e2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYidW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDI1KSxpPXIoMTkpLG89cigzOCkoInRvU3RyaW5nVGFnIikscz1PYmplY3QsYz0iQXJndW1lbnRzIj09aShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1uP2k6ZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKHI9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1zKGUpLG8pKT9yOmM/aSh0KToiT2JqZWN0Ij09KG49aSh0KSkmJmEodC5jYWxsZWUpPyJBcmd1bWVudHMiOm59fSwoZSx0LHIpPT57dmFyIG49e307bltyKDM4KSgidG9TdHJpbmdUYWciKV09InoiLGUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcobil9LChlLHQscik9Pnt2YXIgbj1yKDQzKSxhPXIoMjUpLGk9cig0NCksbz1yKDU4KSxzPXIoODYpLGM9bygiSUVfUFJPVE8iKSx1PU9iamVjdCxsPXUucHJvdG90eXBlO2UuZXhwb3J0cz1zP3UuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtpZihuKHQsYykpcmV0dXJuIHRbY107dmFyIHI9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYShyKSYmdCBpbnN0YW5jZW9mIHI/ci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIHU/bDpudWxsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZSkhPT1lLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cig1MSksaT1yKDg4KTtlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxyPXt9O3RyeXsoZT1uKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0KSkocixbXSksdD1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBhKHIpLGkobiksdD9lKHIsbik6ci5fX3Byb3RvX189bixyfX0oKTp2b2lkIDApfSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1TdHJpbmcsaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXx8bihlKSlyZXR1cm4gZTt0aHJvdyBpKCJDYW4ndCBzZXQgIithKGUpKyIgYXMgYSBwcm90b3R5cGUiKX19LChlLHQscik9PntyKDkwKSxyKDk3KSxyKDk5KSxyKDEyMikscigxMjQpO3ZhciBuPXIoMTMzKTtlLmV4cG9ydHM9bi5zdHJ1Y3R1cmVkQ2xvbmV9LChlLHQscik9Pnt2YXIgbj1yKDE2KSxhPXIoNzMpLGk9cig5MSksbz1yKDU2KSxzPXIoNDkpLmYsYz1yKDkyKSx1PXIoOTYpLGw9cig0MCksZj1yKDEwKSxoPSJBcnJheSBJdGVyYXRvciIsZD1vLnNldCxwPW8uZ2V0dGVyRm9yKGgpO2UuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKGUsdCl7ZCh0aGlzLHt0eXBlOmgsdGFyZ2V0Om4oZSksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciBlPXAodGhpcyksdD1lLnRhcmdldCxyPWUua2luZCxuPWUuaW5kZXgrKztyZXR1cm4hdHx8bj49dC5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCx1KHZvaWQgMCwhMCkpOnUoImtleXMiPT1yP246InZhbHVlcyI9PXI/dFtuXTpbbix0W25dXSwhMSl9KSwidmFsdWVzIik7dmFyIGc9aS5Bcmd1bWVudHM9aS5BcnJheTtpZihhKCJrZXlzIiksYSgidmFsdWVzIiksYSgiZW50cmllcyIpLCFsJiZmJiYidmFsdWVzIiE9PWcubmFtZSl0cnl7cyhnLCJuYW1lIix7dmFsdWU6InZhbHVlcyJ9KX1jYXRjaChlKXt9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTIpLGk9cig0MCksbz1yKDU0KSxzPXIoMjUpLGM9cig5MyksdT1yKDg1KSxsPXIoODcpLGY9cig5NSksaD1yKDQ4KSxkPXIoNTIpLHA9cigzOCksZz1yKDkxKSx2PXIoOTQpLHk9by5QUk9QRVIsbT1vLkNPTkZJR1VSQUJMRSxiPXYuSXRlcmF0b3JQcm90b3R5cGUsdz12LkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsaz1wKCJpdGVyYXRvciIpLFM9ImtleXMiLHg9InZhbHVlcyIsTz0iZW50cmllcyIsQT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyxwLHYsQyl7YyhyLHQsbyk7dmFyIEYsUCxULEk9ZnVuY3Rpb24oZSl7aWYoZT09PXAmJkwpcmV0dXJuIEw7aWYoIXcmJmUgaW4gTSlyZXR1cm4gTVtlXTtzd2l0Y2goZSl7Y2FzZSBTOmNhc2UgeDpjYXNlIE86cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX19LEU9dCsiIEl0ZXJhdG9yIixqPSExLE09ZS5wcm90b3R5cGUsXz1NW2tdfHxNWyJAQGl0ZXJhdG9yIl18fHAmJk1bcF0sTD0hdyYmX3x8SShwKSxSPSJBcnJheSI9PXQmJk0uZW50cmllc3x8XztpZihSJiYoRj11KFIuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJkYubmV4dCYmKGl8fHUoRik9PT1ifHwobD9sKEYsYik6cyhGW2tdKXx8ZChGLGssQSkpLGYoRixFLCEwLCEwKSxpJiYoZ1tFXT1BKSkseSYmcD09eCYmXyYmXy5uYW1lIT09eCYmKCFpJiZtP2goTSwibmFtZSIseCk6KGo9ITAsTD1mdW5jdGlvbigpe3JldHVybiBhKF8sdGhpcyl9KSkscClpZihQPXt2YWx1ZXM6SSh4KSxrZXlzOnY/TDpJKFMpLGVudHJpZXM6SShPKX0sQylmb3IoVCBpbiBQKSh3fHxqfHwhKFQgaW4gTSkpJiZkKE0sVCxQW1RdKTtlbHNlIG4oe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDp3fHxqfSxQKTtyZXR1cm4gaSYmIUN8fE1ba109PT1MfHxkKE0sayxMLHtuYW1lOnB9KSxnW3RdPUwsUH19LChlLHQscik9Pnt2YXIgbj1yKDk0KS5JdGVyYXRvclByb3RvdHlwZSxhPXIoNzQpLGk9cigxNSksbz1yKDk1KSxzPXIoOTEpLGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHUpe3ZhciBsPXQrIiBJdGVyYXRvciI7cmV0dXJuIGUucHJvdG90eXBlPWEobix7bmV4dDppKCshdSxyKX0pLG8oZSxsLCExLCEwKSxzW2xdPWMsZX19LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDExKSxzPXIoMjUpLGM9cigyNCksdT1yKDc0KSxsPXIoODUpLGY9cig1MiksaD1yKDM4KSxkPXIoNDApLHA9aCgiaXRlcmF0b3IiKSxnPSExO1tdLmtleXMmJigibmV4dCJpbihpPVtdLmtleXMoKSk/KGE9bChsKGkpKSkhPT1PYmplY3QucHJvdG90eXBlJiYobj1hKTpnPSEwKSwhYyhuKXx8bygoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gbltwXS5jYWxsKGUpIT09ZX0pKT9uPXt9OmQmJihuPXUobikpLHMobltwXSl8fGYobixwLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6bixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmd9fSwoZSx0LHIpPT57dmFyIG49cig0OSkuZixhPXIoNDMpLGk9cigzOCkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhciYmKGU9ZS5wcm90b3R5cGUpLGUmJiFhKGUsaSkmJm4oZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDUyKSxpPXIoOTgpO258fGEoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGkse3Vuc2FmZTohMH0pfSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDgzKTtlLmV4cG9ydHM9bj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrYSh0aGlzKSsiXSJ9fSwoZSx0LHIpPT57cigxMDApfSwoZSx0LHIpPT57cigxMDEpKCJNYXAiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTkpKX0sKGUsdCxyKT0+e3ZhciBuPXIoNyksYT1yKDgpLGk9cigxOCksbz1yKDcyKSxzPXIoNTIpLGM9cigxMDIpLHU9cigxMDkpLGw9cigxMTYpLGY9cigyNSksaD1yKDIxKSxkPXIoMjQpLHA9cigxMSksZz1yKDExNyksdj1yKDk1KSx5PXIoMTE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBtPS0xIT09ZS5pbmRleE9mKCJNYXAiKSxiPS0xIT09ZS5pbmRleE9mKCJXZWFrIiksdz1tPyJzZXQiOiJhZGQiLGs9YVtlXSxTPWsmJmsucHJvdG90eXBlLHg9ayxPPXt9LEE9ZnVuY3Rpb24oZSl7dmFyIHQ9aShTW2VdKTtzKFMsZSwiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIShiJiYhZChlKSkmJnQodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4gYiYmIWQoZSk/dm9pZCAwOnQodGhpcywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKGImJiFkKGUpKSYmdCh0aGlzLDA9PT1lPzA6ZSl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQodGhpcywwPT09ZT8wOmUsciksdGhpc30pfTtpZihvKGUsIWYoayl8fCEoYnx8Uy5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IGspLmVudHJpZXMoKS5uZXh0KCl9KSkpKSl4PXIuZ2V0Q29uc3RydWN0b3IodCxlLG0sdyksYy5lbmFibGUoKTtlbHNlIGlmKG8oZSwhMCkpe3ZhciBDPW5ldyB4LEY9Q1t3XShiP3t9Oi0wLDEpIT1DLFA9cCgoZnVuY3Rpb24oKXtDLmhhcygxKX0pKSxUPWcoKGZ1bmN0aW9uKGUpe25ldyBrKGUpfSkpLEk9IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBrLHQ9NTt0LS07KWVbd10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSkpO1R8fCgoeD10KChmdW5jdGlvbihlLHQpe2woZSxTKTt2YXIgcj15KG5ldyBrLGUseCk7cmV0dXJuIGgodCl8fHUodCxyW3ddLHt0aGF0OnIsQVNfRU5UUklFUzptfSkscn0pKSkucHJvdG90eXBlPVMsUy5jb25zdHJ1Y3Rvcj14KSwoUHx8SSkmJihBKCJkZWxldGUiKSxBKCJoYXMiKSxtJiZBKCJnZXQiKSksKEl8fEYpJiZBKHcpLGImJlMuY2xlYXImJmRlbGV0ZSBTLmNsZWFyfXJldHVybiBPW2VdPXgsbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDp4IT1rfSxPKSx2KHgsZSksYnx8ci5zZXRTdHJvbmcoeCxlLG0pLHh9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTgpLGk9cig1OSksbz1yKDI0KSxzPXIoNDMpLGM9cig0OSkuZix1PXIoNjIpLGw9cigxMDMpLGY9cigxMDYpLGg9cig0NSksZD1yKDEwOCkscD0hMSxnPWgoIm1ldGEiKSx2PTAseT1mdW5jdGlvbihlKXtjKGUsZyx7dmFsdWU6e29iamVjdElEOiJPIit2Kyssd2Vha0RhdGE6e319fSl9LG09ZS5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXttLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgZT11LmYsdD1hKFtdLnNwbGljZSkscj17fTtyW2ddPTEsZShyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUociksYT0wLGk9bi5sZW5ndGg7YTxpO2ErKylpZihuW2FdPT09Zyl7dChuLGEsMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6bC5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIW8oZSkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6KCJzdHJpbmciPT10eXBlb2YgZT8iUyI6IlAiKStlO2lmKCFzKGUsZykpe2lmKCFmKGUpKXJldHVybiJGIjtpZighdClyZXR1cm4iRSI7eShlKX1yZXR1cm4gZVtnXS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24oZSx0KXtpZighcyhlLGcpKXtpZighZihlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTt5KGUpfXJldHVybiBlW2ddLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZCYmcCYmZihlKSYmIXMoZSxnKSYmeShlKSxlfX07aVtnXT0hMH0sKGUsdCxyKT0+e3ZhciBuPXIoMTkpLGE9cigxNiksaT1yKDYyKS5mLG89cigxMDQpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gcyYmIldpbmRvdyI9PW4oZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBpKGUpfWNhdGNoKGUpe3JldHVybiBvKHMpfX0oZSk6aShhKGUpKX19LChlLHQscik9Pnt2YXIgbj1yKDY1KSxhPXIoNjgpLGk9cigxMDUpLG89QXJyYXkscz1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYz1hKGUpLHU9bih0LGMpLGw9bih2b2lkIDA9PT1yP2M6cixjKSxmPW8ocyhsLXUsMCkpLGg9MDt1PGw7dSsrLGgrKylpKGYsaCxlW3VdKTtyZXR1cm4gZi5sZW5ndGg9aCxmfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjIpLGE9cig0OSksaT1yKDE1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPW4odCk7byBpbiBlP2EuZihlLG8saSgwLHIpKTplW29dPXJ9fSwoZSx0LHIpPT57dmFyIG49cigxMSksYT1yKDI0KSxpPXIoMTkpLG89cigxMDcpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxjPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTtlLmV4cG9ydHM9Y3x8bz9mdW5jdGlvbihlKXtyZXR1cm4hIWEoZSkmJighb3x8IkFycmF5QnVmZmVyIiE9aShlKSkmJighc3x8cyhlKSl9OnN9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciBlPW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiYSIse3ZhbHVlOjh9KX19KSl9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LChlLHQscik9Pnt2YXIgbj1yKDExMCksYT1yKDEyKSxpPXIoNTEpLG89cigzNikscz1yKDExMiksYz1yKDY4KSx1PXIoMjkpLGw9cigxMTMpLGY9cigxMTQpLGg9cigxMTUpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxnPXAucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHYseSxtLGIsdyxrLFMseD1yJiZyLnRoYXQsTz0hKCFyfHwhci5BU19FTlRSSUVTKSxBPSEoIXJ8fCFyLklTX1JFQ09SRCksQz0hKCFyfHwhci5JU19JVEVSQVRPUiksRj0hKCFyfHwhci5JTlRFUlJVUFRFRCksUD1uKHQseCksVD1mdW5jdGlvbihlKXtyZXR1cm4gdiYmaCh2LCJub3JtYWwiLGUpLG5ldyBwKCEwLGUpfSxJPWZ1bmN0aW9uKGUpe3JldHVybiBPPyhpKGUpLEY/UChlWzBdLGVbMV0sVCk6UChlWzBdLGVbMV0pKTpGP1AoZSxUKTpQKGUpfTtpZihBKXY9ZS5pdGVyYXRvcjtlbHNlIGlmKEMpdj1lO2Vsc2V7aWYoISh5PWYoZSkpKXRocm93IGQobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMoeSkpe2ZvcihtPTAsYj1jKGUpO2I+bTttKyspaWYoKHc9SShlW21dKSkmJnUoZyx3KSlyZXR1cm4gdztyZXR1cm4gbmV3IHAoITEpfXY9bChlLHkpfWZvcihrPUE/ZS5uZXh0OnYubmV4dDshKFM9YShrLHYpKS5kb25lOyl7dHJ5e3c9SShTLnZhbHVlKX1jYXRjaChlKXtoKHYsInRocm93IixlKX1pZigib2JqZWN0Ij09dHlwZW9mIHcmJncmJnUoZyx3KSlyZXR1cm4gd31yZXR1cm4gbmV3IHAoITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTExKSxhPXIoMzUpLGk9cigxMyksbz1uKG4uYmluZCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSksdm9pZCAwPT09dD9lOmk/byhlLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiRnVuY3Rpb24iPT09bihlKSlyZXR1cm4gYShlKX19LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoOTEpLGk9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihhLkFycmF5PT09ZXx8b1tpXT09PWUpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigzNSksaT1yKDUxKSxvPXIoMzYpLHM9cigxMTQpLGM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKGUpOnQ7aWYoYShyKSlyZXR1cm4gaShuKHIsZSkpO3Rocm93IGMobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoODMpLGE9cigzNCksaT1yKDIxKSxvPXIoOTEpLHM9cigzOCkoIml0ZXJhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiBhKGUscyl8fGEoZSwiQEBpdGVyYXRvciIpfHxvW24oZSldfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cig1MSksaT1yKDM0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLHM7YShlKTt0cnl7aWYoIShvPWkoZSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyByO3JldHVybiByfW89bihvLGUpfWNhdGNoKGUpe3M9ITAsbz1lfWlmKCJ0aHJvdyI9PT10KXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBhKG8pLHJ9fSwoZSx0LHIpPT57dmFyIG49cigyOSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobih0LGUpKXJldHVybiBlO3Rocm93IGEoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwoZSx0LHIpPT57dmFyIG49cigzOCkoIml0ZXJhdG9yIiksYT0hMTt0cnl7dmFyIGk9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXthPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFhKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgaT17fTtpW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSxlKGkpfWNhdGNoKGUpe31yZXR1cm4gcn19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMjQpLGk9cig4Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbyxzO3JldHVybiBpJiZuKG89dC5jb25zdHJ1Y3RvcikmJm8hPT1yJiZhKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmkoZSxzKSxlfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDkpLmYsYT1yKDc0KSxpPXIoMTIwKSxvPXIoMTEwKSxzPXIoMTE2KSxjPXIoMjEpLHU9cigxMDkpLGw9cig5MiksZj1yKDk2KSxoPXIoMTIxKSxkPXIoMTApLHA9cigxMDIpLmZhc3RLZXksZz1yKDU2KSx2PWcuc2V0LHk9Zy5nZXR0ZXJGb3I7ZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQscixsKXt2YXIgZj1lKChmdW5jdGlvbihlLG4pe3MoZSxoKSx2KGUse3R5cGU6dCxpbmRleDphKG51bGwpLGZpcnN0OnZvaWQgMCxsYXN0OnZvaWQgMCxzaXplOjB9KSxkfHwoZS5zaXplPTApLGMobil8fHUobixlW2xdLHt0aGF0OmUsQVNfRU5UUklFUzpyfSl9KSksaD1mLnByb3RvdHlwZSxnPXkodCksbT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpPWcoZSksbz1iKGUsdCk7cmV0dXJuIG8/by52YWx1ZT1yOihpLmxhc3Q9bz17aW5kZXg6YT1wKHQsITApLGtleTp0LHZhbHVlOnIscHJldmlvdXM6bj1pLmxhc3QsbmV4dDp2b2lkIDAscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9byksbiYmKG4ubmV4dD1vKSxkP2kuc2l6ZSsrOmUuc2l6ZSsrLCJGIiE9PWEmJihpLmluZGV4W2FdPW8pKSxlfSxiPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1nKGUpLGE9cCh0KTtpZigiRiIhPT1hKXJldHVybiBuLmluZGV4W2FdO2ZvcihyPW4uZmlyc3Q7cjtyPXIubmV4dClpZihyLmtleT09dClyZXR1cm4gcn07cmV0dXJuIGkoaCx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9Zyh0aGlzKSx0PWUuaW5kZXgscj1lLmZpcnN0O3I7KXIucmVtb3ZlZD0hMCxyLnByZXZpb3VzJiYoci5wcmV2aW91cz1yLnByZXZpb3VzLm5leHQ9dm9pZCAwKSxkZWxldGUgdFtyLmluZGV4XSxyPXIubmV4dDtlLmZpcnN0PWUubGFzdD12b2lkIDAsZD9lLnNpemU9MDp0aGlzLnNpemU9MH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1nKHQpLG49Yih0LGUpO2lmKG4pe3ZhciBhPW4ubmV4dCxpPW4ucHJldmlvdXM7ZGVsZXRlIHIuaW5kZXhbbi5pbmRleF0sbi5yZW1vdmVkPSEwLGkmJihpLm5leHQ9YSksYSYmKGEucHJldmlvdXM9aSksci5maXJzdD09biYmKHIuZmlyc3Q9YSksci5sYXN0PT1uJiYoci5sYXN0PWkpLGQ/ci5zaXplLS06dC5zaXplLS19cmV0dXJuISFufSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWcodGhpcyksbj1vKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3Q9dD90Lm5leHQ6ci5maXJzdDspZm9yKG4odC52YWx1ZSx0LmtleSx0aGlzKTt0JiZ0LnJlbW92ZWQ7KXQ9dC5wcmV2aW91c30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhYih0aGlzLGUpfX0pLGkoaCxyP3tnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9Yih0aGlzLGUpO3JldHVybiB0JiZ0LnZhbHVlfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbSh0aGlzLDA9PT1lPzA6ZSx0KX19OnthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG0odGhpcyxlPTA9PT1lPzA6ZSxlKX19KSxkJiZuKGgsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzKS5zaXplfX0pLGZ9LHNldFN0cm9uZzpmdW5jdGlvbihlLHQscil7dmFyIG49dCsiIEl0ZXJhdG9yIixhPXkodCksaT15KG4pO2woZSx0LChmdW5jdGlvbihlLHQpe3YodGhpcyx7dHlwZTpuLHRhcmdldDplLHN0YXRlOmEoZSksa2luZDp0LGxhc3Q6dm9pZCAwfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9aSh0aGlzKSx0PWUua2luZCxyPWUubGFzdDtyJiZyLnJlbW92ZWQ7KXI9ci5wcmV2aW91cztyZXR1cm4gZS50YXJnZXQmJihlLmxhc3Q9cj1yP3IubmV4dDplLnN0YXRlLmZpcnN0KT9mKCJrZXlzIj09dD9yLmtleToidmFsdWVzIj09dD9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSwhMSk6KGUudGFyZ2V0PXZvaWQgMCxmKHZvaWQgMCwhMCkpfSkscj8iZW50cmllcyI6InZhbHVlcyIsIXIsITApLGgodCl9fX0sKGUsdCxyKT0+e3ZhciBuPXIoNTIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhIGluIHQpbihlLGEsdFthXSxyKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDI4KSxhPXIoNDkpLGk9cigzOCksbz1yKDEwKSxzPWkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKSxyPWEuZjtvJiZ0JiYhdFtzXSYmcih0LHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LChlLHQscik9PntyKDEyMyl9LChlLHQscik9PntyKDEwMSkoIlNldCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxyKDExOSkpfSwoZSx0LHIpPT57dmFyIG4sYT1yKDQwKSxpPXIoNyksbz1yKDgpLHM9cigyOCksYz1yKDE4KSx1PXIoMTEpLGw9cig0NSksZj1yKDI1KSxoPXIoMTI1KSxkPXIoMjEpLHA9cigyNCksZz1yKDI3KSx2PXIoMTA5KSx5PXIoNTEpLG09cig4MyksYj1yKDQzKSx3PXIoMTA1KSxrPXIoNDgpLFM9cig2OCkseD1yKDEyNiksTz1yKDEyNyksQT1yKDEyOSksQz1yKDMyKSxGPXIoMTMwKSxQPXIoMTMxKSxUPXIoMTMyKSxJPW8uT2JqZWN0LEU9by5EYXRlLGo9by5FcnJvcixNPW8uRXZhbEVycm9yLF89by5SYW5nZUVycm9yLEw9by5SZWZlcmVuY2VFcnJvcixSPW8uU3ludGF4RXJyb3IsTj1vLlR5cGVFcnJvcixEPW8uVVJJRXJyb3IsQj1vLlBlcmZvcm1hbmNlTWFyayxVPW8uV2ViQXNzZW1ibHksJD1VJiZVLkNvbXBpbGVFcnJvcnx8aixYPVUmJlUuTGlua0Vycm9yfHxqLEg9VSYmVS5SdW50aW1lRXJyb3J8fGoscT1zKCJET01FeGNlcHRpb24iKSxHPXMoIlNldCIpLHo9cygiTWFwIiksVz16LnByb3RvdHlwZSxWPWMoVy5oYXMpLFk9YyhXLmdldCksSz1jKFcuc2V0KSxKPWMoRy5wcm90b3R5cGUuYWRkKSxaPXMoIk9iamVjdCIsImtleXMiKSxRPWMoW10ucHVzaCksZWU9YygoITApLnZhbHVlT2YpLHRlPWMoMS4udmFsdWVPZikscmU9YygiIi52YWx1ZU9mKSxuZT1jKEUucHJvdG90eXBlLmdldFRpbWUpLGFlPWwoInN0cnVjdHVyZWRDbG9uZSIpLGllPSJEYXRhQ2xvbmVFcnJvciIsb2U9IlRyYW5zZmVycmluZyIsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8uU2V0KFs3XSkscj1lKHQpLG49ZShJKDcpKTtyZXR1cm4gcj09dHx8IXIuaGFzKDcpfHwib2JqZWN0IiE9dHlwZW9mIG58fDchPW59KSkmJmV9LGNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IHQsbj1lKHthOnIsYjpyfSk7cmV0dXJuIShuJiZuLmE9PT1uLmImJm4uYSBpbnN0YW5jZW9mIHQmJm4uYS5zdGFjaz09PXIuc3RhY2spfSkpfSx1ZT1vLnN0cnVjdHVyZWRDbG9uZSxsZT1hfHwhY2UodWUsail8fCFjZSh1ZSxxKXx8KG49dWUsISF1KChmdW5jdGlvbigpe3ZhciBlPW4obmV3IG8uQWdncmVnYXRlRXJyb3IoWzFdLGFlLHtjYXVzZTozfSkpO3JldHVybiJBZ2dyZWdhdGVFcnJvciIhPWUubmFtZXx8MSE9ZS5lcnJvcnNbMF18fGUubWVzc2FnZSE9YWV8fDMhPWUuY2F1c2V9KSkpLGZlPSF1ZSYmc2UoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihhZSx7ZGV0YWlsOmV9KS5kZXRhaWx9KSksaGU9c2UodWUpfHxmZSxkZT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgcSgiVW5jbG9uZWFibGUgdHlwZTogIitlLGllKX0scGU9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgcSgodHx8IkNsb25pbmciKSsiIG9mICIrZSsiIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIHRoaXMgZW5naW5lIixpZSl9LGdlPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSYmZGUoIlN5bWJvbCIpLCFwKGUpKXJldHVybiBlO2lmKHQpe2lmKFYodCxlKSlyZXR1cm4gWSh0LGUpfWVsc2UgdD1uZXcgejt2YXIgcixuLGEsaSxjLHUsbCxoLGQsdix5PW0oZSkseD0hMTtzd2l0Y2goeSl7Y2FzZSJBcnJheSI6YT1bXSx4PSEwO2JyZWFrO2Nhc2UiT2JqZWN0IjphPXt9LHg9ITA7YnJlYWs7Y2FzZSJNYXAiOmE9bmV3IHoseD0hMDticmVhaztjYXNlIlNldCI6YT1uZXcgRyx4PSEwO2JyZWFrO2Nhc2UiUmVnRXhwIjphPW5ldyBSZWdFeHAoZS5zb3VyY2UsTyhlKSk7YnJlYWs7Y2FzZSJFcnJvciI6c3dpdGNoKG49ZS5uYW1lKXtjYXNlIkFnZ3JlZ2F0ZUVycm9yIjphPXMoIkFnZ3JlZ2F0ZUVycm9yIikoW10pO2JyZWFrO2Nhc2UiRXZhbEVycm9yIjphPU0oKTticmVhaztjYXNlIlJhbmdlRXJyb3IiOmE9XygpO2JyZWFrO2Nhc2UiUmVmZXJlbmNlRXJyb3IiOmE9TCgpO2JyZWFrO2Nhc2UiU3ludGF4RXJyb3IiOmE9UigpO2JyZWFrO2Nhc2UiVHlwZUVycm9yIjphPU4oKTticmVhaztjYXNlIlVSSUVycm9yIjphPUQoKTticmVhaztjYXNlIkNvbXBpbGVFcnJvciI6YT0kKCk7YnJlYWs7Y2FzZSJMaW5rRXJyb3IiOmE9WCgpO2JyZWFrO2Nhc2UiUnVudGltZUVycm9yIjphPUgoKTticmVhaztkZWZhdWx0OmE9aigpfXg9ITA7YnJlYWs7Y2FzZSJET01FeGNlcHRpb24iOmE9bmV3IHEoZS5tZXNzYWdlLGUubmFtZSkseD0hMDticmVhaztjYXNlIkRhdGFWaWV3IjpjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpjYXNlIkJpZ0ludDY0QXJyYXkiOmNhc2UiQmlnVWludDY0QXJyYXkiOnI9b1t5XSxwKHIpfHxwZSh5KSxhPW5ldyByKGdlKGUuYnVmZmVyLHQpLGUuYnl0ZU9mZnNldCwiRGF0YVZpZXciPT09eT9lLmJ5dGVMZW5ndGg6ZS5sZW5ndGgpO2JyZWFrO2Nhc2UiRE9NUXVhZCI6dHJ5e2E9bmV3IERPTVF1YWQoZ2UoZS5wMSx0KSxnZShlLnAyLHQpLGdlKGUucDMsdCksZ2UoZS5wNCx0KSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztjYXNlIkZpbGVMaXN0IjppZihpPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e2U9bmV3IG8uRGF0YVRyYW5zZmVyfWNhdGNoKHQpe3RyeXtlPW5ldyBvLkNsaXBib2FyZEV2ZW50KCIiKS5jbGlwYm9hcmREYXRhfWNhdGNoKGUpe319cmV0dXJuIGUmJmUuaXRlbXMmJmUuZmlsZXM/ZTpudWxsfSgpKXtmb3IoYz0wLHU9UyhlKTtjPHU7YysrKWkuaXRlbXMuYWRkKGdlKGVbY10sdCkpO2E9aS5maWxlc31lbHNlIGhlP2E9aGUoZSk6cGUoeSk7YnJlYWs7Y2FzZSJJbWFnZURhdGEiOnRyeXthPW5ldyBJbWFnZURhdGEoZ2UoZS5kYXRhLHQpLGUud2lkdGgsZS5oZWlnaHQse2NvbG9yU3BhY2U6ZS5jb2xvclNwYWNlfSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztkZWZhdWx0OmlmKGhlKWE9aGUoZSk7ZWxzZSBzd2l0Y2goeSl7Y2FzZSJCaWdJbnQiOmE9SShlLnZhbHVlT2YoKSk7YnJlYWs7Y2FzZSJCb29sZWFuIjphPUkoZWUoZSkpO2JyZWFrO2Nhc2UiTnVtYmVyIjphPUkodGUoZSkpO2JyZWFrO2Nhc2UiU3RyaW5nIjphPUkocmUoZSkpO2JyZWFrO2Nhc2UiRGF0ZSI6YT1uZXcgRShuZShlKSk7YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6KHI9by5EYXRhVmlldyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlfHxwZSh5KTt0cnl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UpYT1lLnNsaWNlKDApO2Vsc2UgZm9yKHU9ZS5ieXRlTGVuZ3RoLGE9bmV3IEFycmF5QnVmZmVyKHUpLGQ9bmV3IHIoZSksdj1uZXcgcihhKSxjPTA7Yzx1O2MrKyl2LnNldFVpbnQ4KGMsZC5nZXRVaW50OChjKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHEoIkFycmF5QnVmZmVyIGlzIGRldGFjaGVkIixpZSl9YnJlYWs7Y2FzZSJTaGFyZWRBcnJheUJ1ZmZlciI6YT1lO2JyZWFrO2Nhc2UiQmxvYiI6dHJ5e2E9ZS5zbGljZSgwLGUuc2l6ZSxlLnR5cGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NUG9pbnQiOmNhc2UiRE9NUG9pbnRSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVBvaW50P3IuZnJvbVBvaW50KGUpOm5ldyByKGUueCxlLnksZS56LGUudyl9Y2F0Y2goZSl7cGUoeSl9YnJlYWs7Y2FzZSJET01SZWN0IjpjYXNlIkRPTVJlY3RSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVJlY3Q/ci5mcm9tUmVjdChlKTpuZXcgcihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NTWF0cml4IjpjYXNlIkRPTU1hdHJpeFJlYWRPbmx5IjpyPW9beV07dHJ5e2E9ci5mcm9tTWF0cml4P3IuZnJvbU1hdHJpeChlKTpuZXcgcihlKX1jYXRjaChlKXtwZSh5KX1icmVhaztjYXNlIkF1ZGlvRGF0YSI6Y2FzZSJWaWRlb0ZyYW1lIjpmKGUuY2xvbmUpfHxwZSh5KTt0cnl7YT1lLmNsb25lKCl9Y2F0Y2goZSl7ZGUoeSl9YnJlYWs7Y2FzZSJGaWxlIjp0cnl7YT1uZXcgRmlsZShbZV0sZS5uYW1lLGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiQ3JvcFRhcmdldCI6Y2FzZSJDcnlwdG9LZXkiOmNhc2UiRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtRmlsZUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtSGFuZGxlIjpjYXNlIkdQVUNvbXBpbGF0aW9uSW5mbyI6Y2FzZSJHUFVDb21waWxhdGlvbk1lc3NhZ2UiOmNhc2UiSW1hZ2VCaXRtYXAiOmNhc2UiUlRDQ2VydGlmaWNhdGUiOmNhc2UiV2ViQXNzZW1ibHkuTW9kdWxlIjpwZSh5KTtkZWZhdWx0OmRlKHkpfX1pZihLKHQsZSxhKSx4KXN3aXRjaCh5KXtjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6Zm9yKGw9WihlKSxjPTAsdT1TKGwpO2M8dTtjKyspaD1sW2NdLHcoYSxoLGdlKGVbaF0sdCkpO2JyZWFrO2Nhc2UiTWFwIjplLmZvckVhY2goKGZ1bmN0aW9uKGUscil7SyhhLGdlKHIsdCksZ2UoZSx0KSl9KSk7YnJlYWs7Y2FzZSJTZXQiOmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7SihhLGdlKGUsdCkpfSkpO2JyZWFrO2Nhc2UiRXJyb3IiOmsoYSwibWVzc2FnZSIsZ2UoZS5tZXNzYWdlLHQpKSxiKGUsImNhdXNlIikmJmsoYSwiY2F1c2UiLGdlKGUuY2F1c2UsdCkpLCJBZ2dyZWdhdGVFcnJvciI9PW4mJihhLmVycm9ycz1nZShlLmVycm9ycyx0KSk7Y2FzZSJET01FeGNlcHRpb24iOkEmJmsoYSwic3RhY2siLGdlKGUuc3RhY2ssdCkpfXJldHVybiBhfSx2ZT11ZSYmIXUoKGZ1bmN0aW9uKCl7aWYoUCYmQz45Mnx8VCYmQz45NHx8RiYmQz45NylyZXR1cm4hMTt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoOCksdD11ZShlLHt0cmFuc2ZlcjpbZV19KTtyZXR1cm4gMCE9ZS5ieXRlTGVuZ3RofHw4IT10LmJ5dGVMZW5ndGh9KSk7aSh7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsc2hhbTohdmUsZm9yY2VkOmxlfSx7c3RydWN0dXJlZENsb25lOmZ1bmN0aW9uKGUpe3ZhciB0LHI9eChhcmd1bWVudHMubGVuZ3RoLDEpPjEmJiFkKGFyZ3VtZW50c1sxXSk/eShhcmd1bWVudHNbMV0pOnZvaWQgMCxuPXI/ci50cmFuc2Zlcjp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PW4mJmZ1bmN0aW9uKGUsdCl7aWYoIXAoZSkpdGhyb3cgTigiVHJhbnNmZXIgb3B0aW9uIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZSIpO3ZhciByPVtdO3YoZSwoZnVuY3Rpb24oZSl7UShyLHkoZSkpfSkpO3ZhciBuLGEsaSxzLGMsdSxsPTAsZD1TKHIpO2lmKHZlKWZvcihzPXVlKHIse3RyYW5zZmVyOnJ9KTtsPGQ7KUsodCxyW2xdLHNbbCsrXSk7ZWxzZSBmb3IoO2w8ZDspe2lmKG49cltsKytdLFYodCxuKSl0aHJvdyBuZXcgcSgiRHVwbGljYXRlIHRyYW5zZmVyYWJsZSIsaWUpO3N3aXRjaChhPW0obikpe2Nhc2UiSW1hZ2VCaXRtYXAiOmk9by5PZmZzY3JlZW5DYW52YXMsaChpKXx8cGUoYSxvZSk7dHJ5eyh1PW5ldyBpKG4ud2lkdGgsbi5oZWlnaHQpKS5nZXRDb250ZXh0KCJiaXRtYXByZW5kZXJlciIpLnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKG4pLGM9dS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6ZihuLmNsb25lKSYmZihuLmNsb3NlKXx8cGUoYSxvZSk7dHJ5e2M9bi5jbG9uZSgpLG4uY2xvc2UoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6Y2FzZSJNZWRpYVNvdXJjZUhhbmRsZSI6Y2FzZSJNZXNzYWdlUG9ydCI6Y2FzZSJPZmZzY3JlZW5DYW52YXMiOmNhc2UiUmVhZGFibGVTdHJlYW0iOmNhc2UiVHJhbnNmb3JtU3RyZWFtIjpjYXNlIldyaXRhYmxlU3RyZWFtIjpwZShhLG9lKX1pZih2b2lkIDA9PT1jKXRocm93IG5ldyBxKCJUaGlzIG9iamVjdCBjYW5ub3QgYmUgdHJhbnNmZXJyZWQ6ICIrYSxpZSk7Syh0LG4sYyl9fShuLHQ9bmV3IHopLGdlKGUsdCl9fSl9LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoMTEpLGk9cigyNSksbz1yKDgzKSxzPXIoMjgpLGM9cig1NSksdT1mdW5jdGlvbigpe30sbD1bXSxmPXMoIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxoPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLGQ9bihoLmV4ZWMpLHA9IWguZXhlYyh1KSxnPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3RyeXtyZXR1cm4gZih1LGwsZSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSx2PWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3N3aXRjaChvKGUpKXtjYXNlIkFzeW5jRnVuY3Rpb24iOmNhc2UiR2VuZXJhdG9yRnVuY3Rpb24iOmNhc2UiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiI6cmV0dXJuITF9dHJ5e3JldHVybiBwfHwhIWQoaCxjKGUpKX1jYXRjaChlKXtyZXR1cm4hMH19O3Yuc2hhbT0hMCxlLmV4cG9ydHM9IWZ8fGEoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGcoZy5jYWxsKXx8IWcoT2JqZWN0KXx8IWcoKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT92Omd9LGU9Pnt2YXIgdD1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7aWYoZTxyKXRocm93IHQoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIGV9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDQzKSxpPXIoMjkpLG89cigxMjgpLHM9UmVnRXhwLnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mbGFncztyZXR1cm4gdm9pZCAwIT09dHx8ImZsYWdzImluIHN8fGEoZSwiZmxhZ3MiKXx8IWkocyxlKT90Om4obyxlKX19LChlLHQscik9Pnt2YXIgbj1yKDUxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHQ9IiI7cmV0dXJuIGUuaGFzSW5kaWNlcyYmKHQrPSJkIiksZS5nbG9iYWwmJih0Kz0iZyIpLGUuaWdub3JlQ2FzZSYmKHQrPSJpIiksZS5tdWx0aWxpbmUmJih0Kz0ibSIpLGUuZG90QWxsJiYodCs9InMiKSxlLnVuaWNvZGUmJih0Kz0idSIpLGUudW5pY29kZVNldHMmJih0Kz0idiIpLGUuc3RpY2t5JiYodCs9InkiKSx0fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigxNSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPUVycm9yKCJhIik7cmV0dXJuISgic3RhY2siaW4gZSl8fChPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RhY2siLGEoMSw3KSksNyE9PWUuc3RhY2spfSkpfSwoZSx0LHIpPT57dmFyIG49cigxMzEpLGE9cigxMzIpO2UuZXhwb3J0cz0hbiYmIWEmJiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50fSxlPT57ZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgRGVubyYmRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb259LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoOCk7ZS5leHBvcnRzPSJwcm9jZXNzIj09bihhLnByb2Nlc3MpfSwoZSx0LHIpPT57dmFyIG49cig4KTtlLmV4cG9ydHM9bn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlZlNldENhY2hlPXQuUmVmU2V0PXQuUmVmPXQuTmFtZT10LkVPRj10LkRpY3Q9dC5DbWQ9dC5DSVJDVUxBUl9SRUY9dm9pZCAwLHQuY2xlYXJQcmltaXRpdmVDYWNoZXM9ZnVuY3Rpb24oKXtiLl9jbGVhckNhY2hlKCkseS5fY2xlYXJDYWNoZSgpLHguX2NsZWFyQ2FjaGUoKX0sdC5pc0NtZD1mdW5jdGlvbihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgYiYmKHZvaWQgMD09PXR8fGUuY21kPT09dCl9LHQuaXNEaWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBrJiYodm9pZCAwPT09dHx8QyhlLmdldCgiVHlwZSIpLHQpKX0sdC5pc05hbWU9Qyx0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGkobixvLHMsYyl7dmFyIHU9aChlW25dLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YShmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodixjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LGMsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gbChlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9U3ltYm9sKCJDSVJDVUxBUl9SRUYiKTt0LkNJUkNVTEFSX1JFRj1wO3ZhciBnPVN5bWJvbCgiRU9GIik7dC5FT0Y9Zzt2YXIgdix5PSh2PU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLm5hbWU9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZbdF18fCh2W3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe3Y9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5OYW1lPXk7dmFyIG0sYj0obT1PYmplY3QuY3JlYXRlKG51bGwpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jbWQ9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG1bdF18fChtW3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe209T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5DbWQ9Yjt2YXIgdz1mdW5jdGlvbigpe3JldHVybiB3fSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2YodGhpcyxlKSx0aGlzLl9tYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnhyZWY9dCx0aGlzLm9iaklkPW51bGwsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb249ITEsdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fPXd9dmFyIHQscjtyZXR1cm4gZChlLFt7a2V5OiJhc3NpZ25YcmVmIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnhyZWY9ZX19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApLmxlbmd0aH19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX21hcFtlXTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmdm9pZCAwPT09KG49dGhpcy5fbWFwW3RdKSYmdm9pZCAwIT09ciYmKG49dGhpcy5fbWFwW3JdKSxuIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmP3RoaXMueHJlZi5mZXRjaChuLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTpufX0se2tleToiZ2V0QXN5bmMiLHZhbHVlOih0PXUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHZvaWQgMD09PShhPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJnZvaWQgMD09PShhPXRoaXMuX21hcFtyXSkmJnZvaWQgMCE9PW4mJihhPXRoaXMuX21hcFtuXSksIShhIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMueHJlZi5mZXRjaEFzeW5jKGEsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKTtjYXNlIDQ6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkscj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKGUpe2woaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2woaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJnZvaWQgMD09PShuPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJihuPXRoaXMuX21hcFtyXSksbiBpbnN0YW5jZW9mIHgmJnRoaXMueHJlZiYmKG49dGhpcy54cmVmLmZldGNoKG4sdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKSxBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgYT0wLGk9KG49bi5zbGljZSgpKS5sZW5ndGg7YTxpO2ErKyluW2FdaW5zdGFuY2VvZiB4JiZ0aGlzLnhyZWYmJihuW2FdPXRoaXMueHJlZi5mZXRjaChuW2FdLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSk7cmV0dXJuIG59fSx7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJnZXRLZXlzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApfX0se2tleToiZ2V0UmF3VmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX21hcCl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9fV0sW3trZXk6ImVtcHR5IixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZShudWxsKTtyZXR1cm4gdC5zZXQ9ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfSwoMCxuLnNoYWRvdykodGhpcywiZW1wdHkiLHQpfX0se2tleToibWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLG49dC54cmVmLGE9dC5kaWN0QXJyYXkscz10Lm1lcmdlU3ViRGljdHMsYz12b2lkIDAhPT1zJiZzLHU9bmV3IGUobiksbD1uZXcgTWFwLGY9byhhKTt0cnl7Zm9yKGYucygpOyEocj1mLm4oKSkuZG9uZTspe3ZhciBoPXIudmFsdWU7aWYoaCBpbnN0YW5jZW9mIGUpZm9yKHZhciBkPTAscD1PYmplY3QuZW50cmllcyhoLl9tYXApO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1pKHBbZF0sMiksdj1nWzBdLHk9Z1sxXSxtPWwuZ2V0KHYpO2lmKHZvaWQgMD09PW0pbT1bXSxsLnNldCh2LG0pO2Vsc2UgaWYoIShjJiZ5IGluc3RhbmNlb2YgZSkpY29udGludWU7bS5wdXNoKHkpfX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9dmFyIGIsdz1vKGwpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIGs9aShiLnZhbHVlLDIpLFM9a1swXSx4PWtbMV07aWYoMSE9PXgubGVuZ3RoJiZ4WzBdaW5zdGFuY2VvZiBlKXt2YXIgTyxBPW5ldyBlKG4pLEM9byh4KTt0cnl7Zm9yKEMucygpOyEoTz1DLm4oKSkuZG9uZTspZm9yKHZhciBGPU8udmFsdWUsUD0wLFQ9T2JqZWN0LmVudHJpZXMoRi5fbWFwKTtQPFQubGVuZ3RoO1ArKyl7dmFyIEk9aShUW1BdLDIpLEU9SVswXSxqPUlbMV07dm9pZCAwPT09QS5fbWFwW0VdJiYoQS5fbWFwW0VdPWopfX1jYXRjaChlKXtDLmUoZSl9ZmluYWxseXtDLmYoKX1BLnNpemU+MCYmKHUuX21hcFtTXT1BKX1lbHNlIHUuX21hcFtTXT14WzBdfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX1yZXR1cm4gbC5jbGVhcigpLHUuc2l6ZT4wP3U6ZS5lbXB0eX19XSksZX0oKTt0LkRpY3Q9azt2YXIgUyx4PShTPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubnVtPXQsdGhpcy5nZW49cn1yZXR1cm4gZChlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZ2VuPyIiLmNvbmNhdCh0aGlzLm51bSwiUiIpOiIiLmNvbmNhdCh0aGlzLm51bSwiUiIpLmNvbmNhdCh0aGlzLmdlbil9fV0sW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj0wPT09cj8iIi5jb25jYXQodCwiUiIpOiIiLmNvbmNhdCh0LCJSIikuY29uY2F0KHIpO3JldHVybiBTW25dfHwoU1tuXT1uZXcgZSh0LHIpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe1M9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5SZWY9eDt2YXIgTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Zih0aGlzLHQpLHRoaXMuX3NldD1uZXcgU2V0KGUmJmUuX3NldCl9cmV0dXJuIGQodCxbe2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2V0LmhhcyhlLnRvU3RyaW5nKCkpfX0se2tleToicHV0Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zZXQuYWRkKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3NldC5kZWxldGUoZS50b1N0cmluZygpKX19LHtrZXk6U3ltYm9sLml0ZXJhdG9yLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldC52YWx1ZXMoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3NldC5jbGVhcigpfX1dKSx0fSgpO3QuUmVmU2V0PU87dmFyIEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KSx0aGlzLl9tYXA9bmV3IE1hcH1yZXR1cm4gZCh0LFt7a2V5OiJzaXplIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUudG9TdHJpbmcoKSl9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJwdXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdCl9fSx7a2V5OiJwdXRBbGlhcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0aGlzLmdldCh0KSl9fSx7a2V5OlN5bWJvbC5pdGVyYXRvcix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAudmFsdWVzKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuY2xlYXIoKX19XSksdH0oKTtmdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiB5JiYodm9pZCAwPT09dHx8ZS5uYW1lPT09dCl9dC5SZWZTZXRDYWNoZT1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj10LkRvY1N0YXRzPXZvaWQgMCx0LmNvbGxlY3RBY3Rpb25zPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLG89Uyh7ZGljdDp0LGtleToiQUEiLHN0b3BXaGVuRm91bmQ6ITF9KTtpZihvKWZvcih2YXIgYz1vLmxlbmd0aC0xO2M+PTA7Yy0tKXt2YXIgdT1vW2NdO2lmKHUgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBsLGY9cyh1LmdldEtleXMoKSk7dHJ5e2ZvcihmLnMoKTshKGw9Zi5uKCkpLmRvbmU7KXt2YXIgaD1sLnZhbHVlLGQ9cltoXTtpZihkKXt2YXIgcD11LmdldFJhdyhoKSxnPW5ldyBpLlJlZlNldCx2PVtdO08ocCxlLHYsZyksdi5sZW5ndGg+MCYmKG5bZF09dil9fX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX19fWlmKHQuaGFzKCJBIikpe3ZhciB5PVtdO08odC5nZXQoIkEiKSxlLHksbmV3IGkuUmVmU2V0KSx5Lmxlbmd0aD4wJiYobi5BY3Rpb249eSl9cmV0dXJuKDAsYS5vYmplY3RTaXplKShuKT4wP246bnVsbH0sdC5lbmNvZGVUb1htbFN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY29kZVBvaW50QXQobik7aWYoMzI8PWkmJmk8PTEyNil7dmFyIG89QVtpXTtvJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKG8pLHI9bisxKX1lbHNlIHI8biYmdC5wdXNoKGUuc3Vic3RyaW5nKHIsbikpLHQucHVzaCgiJiN4Ii5jb25jYXQoaS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwiOyIpKSxpPjU1Mjk1JiYoaTw1NzM0NHx8aT42NTUzMykmJm4rKyxyPW4rMX1yZXR1cm4gMD09PXQubGVuZ3RoP2U6KHI8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhyLGUubGVuZ3RoKSksdC5qb2luKCIiKSl9LHQuZXNjYXBlUERGTmFtZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY2hhckNvZGVBdChuKTsoaTwzM3x8aT4xMjZ8fDM1PT09aXx8NDA9PT1pfHw0MT09PWl8fDYwPT09aXx8NjI9PT1pfHw5MT09PWl8fDkzPT09aXx8MTIzPT09aXx8MTI1PT09aXx8NDc9PT1pfHwzNz09PWkpJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKCIjIi5jb25jYXQoaS50b1N0cmluZygxNikpKSxyPW4rMSl9cmV0dXJuIDA9PT10Lmxlbmd0aD9lOihyPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcocixlLmxlbmd0aCkpLHQuam9pbigiIikpfSx0LmVzY2FwZVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oWygpXFxcblxyXSkvZywoZnVuY3Rpb24oZSl7cmV0dXJuIlxuIj09PWU/IlxcbiI6IlxyIj09PWU/IlxcciI6IlxcIi5jb25jYXQoZSl9KSl9LHQuZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIHI9ZSgpO2U9bnVsbCx0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bis9Mil0W3Jbbl1dPXJbbisxXTtyPW51bGx9cmV0dXJuIHR9fSx0LmdldEluaGVyaXRhYmxlUHJvcGVydHk9Uyx0LmdldExvb2t1cFRhYmxlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSYmKHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxlKHQpLGU9bnVsbCksdH19LHQuZ2V0TmV3QW5ub3RhdGlvbnNNYXA9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHQscixuPW5ldyBNYXAsaT1zKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89KHI9dC52YWx1ZSwyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHIpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dCwwOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0ocil8fGMociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PW9bMF0sbD1vWzFdO2lmKHUuc3RhcnRzV2l0aChhLkFubm90YXRpb25FZGl0b3JQcmVmaXgpKXt2YXIgZj1uLmdldChsLnBhZ2VJbmRleCk7Znx8KGY9W10sbi5zZXQobC5wYWdlSW5kZXgsZikpLGYucHVzaChsKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBuLnNpemU+MD9uOm51bGx9LHQuZ2V0Um90YXRpb25NYXRyaXg9ZnVuY3Rpb24oZSx0LHIpe3N3aXRjaChlKXtjYXNlIDkwOnJldHVyblswLDEsLTEsMCx0LDBdO2Nhc2UgMTgwOnJldHVyblstMSwwLDAsLTEsdCxyXTtjYXNlIDI3MDpyZXR1cm5bMCwtMSwxLDAsMCxyXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3RhdGlvbiIpfX0sdC5pc0FzY2lpPWZ1bmN0aW9uKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX0sdC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDEzPT09ZXx8MTA9PT1lfSx0LmxvZzI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDpNYXRoLmNlaWwoTWF0aC5sb2cyKGUpKX0sdC5udW1iZXJUb1N0cmluZz1mdW5jdGlvbihlKXtpZihOdW1iZXIuaXNJbnRlZ2VyKGUpKXJldHVybiBlLnRvU3RyaW5nKCk7dmFyIHQ9TWF0aC5yb3VuZCgxMDAqZSk7cmV0dXJuIHQlMTAwPT0wPyh0LzEwMCkudG9TdHJpbmcoKTp0JTEwPT0wP2UudG9GaXhlZCgxKTplLnRvRml4ZWQoMil9LHQucGFyc2VYRkFQYXRoPWZ1bmN0aW9uKGUpe3ZhciB0PS8oLispXFsoXGQrKVxdJC87cmV0dXJuIGUuc3BsaXQoIi4iKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPWUubWF0Y2godCk7cmV0dXJuIHI/e25hbWU6clsxXSxwb3M6cGFyc2VJbnQoclsyXSwxMCl9OntuYW1lOmUscG9zOjB9fSkpfSx0LnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH0sdC5yZWFkVWludDE2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfSx0LnJlYWRVaW50MzI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9LHQucmVjb3ZlckpzVVJMPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBSZWdFeHAoIl5cXHMqKCIrWyJhcHAubGF1bmNoVVJMIiwid2luZG93Lm9wZW4iLCJ4ZmEuaG9zdC5nb3RvVVJMIl0uam9pbigifCIpLnNwbGl0KCIuIikuam9pbigiXFwuIikrIilcXCgoPzonfFwiKShbXidcIl0qKSg/Oid8XCIpKD86LFxccyooXFx3KylcXCl8XFwpKSIsImkiKS5leGVjKGUpO2lmKHQmJnRbMl0pe3ZhciByPXRbMl0sbj0hMTtyZXR1cm4idHJ1ZSI9PT10WzNdJiYiYXBwLmxhdW5jaFVSTCI9PT10WzFdJiYobj0hMCkse3VybDpyLG5ld1dpbmRvdzpufX1yZXR1cm4gbnVsbH0sdC5zdHJpbmdUb1VURjE2SGV4U3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKChhPj44JjI1NSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSwoMjU1JmEpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGMTZTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9W107YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSYmdC5wdXNoKCLDvsO/Iik7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYT4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmEpKX1yZXR1cm4gdC5qb2luKCIiKX0sdC50b1JvbWFuTnVtZXJhbHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTsoMCxhLmFzc2VydCkoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wLCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIik7Zm9yKHZhciByLG49W107ZT49MWUzOyllLT0xZTMsbi5wdXNoKCJNIik7cj1lLzEwMHwwLGUlPTEwMCxuLnB1c2goeFtyXSkscj1lLzEwfDAsZSU9MTAsbi5wdXNoKHhbMTArcl0pLG4ucHVzaCh4WzIwK2VdKTt2YXIgaT1uLmpvaW4oIiIpO3JldHVybiB0P2kudG9Mb3dlckNhc2UoKTppfSx0LnZhbGlkYXRlQ1NTRm9udD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgU2V0KFsiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIiwiMTAwMCIsIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIl0pLHI9ZS5mb250RmFtaWx5LG49ZS5mb250V2VpZ2h0LGk9ZS5pdGFsaWNBbmdsZTtpZigvXiIuKiIkLy50ZXN0KHIpKXtpZigvW15cXF0iLy50ZXN0KHIuc2xpY2UoMSxyLmxlbmd0aC0xKSkpcmV0dXJuKDAsYS53YXJuKSgnWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIHVuZXNjYXBlZCAiOiAnLmNvbmNhdChyLCIuIikpLCExfWVsc2UgaWYoL14nLionJC8udGVzdChyKSl7aWYoL1teXFxdJy8udGVzdChyLnNsaWNlKDEsci5sZW5ndGgtMSkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEZvbnRGYW1pbHkgY29udGFpbnMgc29tZSB1bmVzY2FwZWQgJzogIi5jb25jYXQociwiLiIpKSwhMX1lbHNle3ZhciBvLGM9cyhyLnNwbGl0KC9bIFx0XSsvKSk7dHJ5e2ZvcihjLnMoKTshKG89Yy5uKCkpLmRvbmU7KXt2YXIgdT1vLnZhbHVlO2lmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QodSl8fCEvXltcdy1cXF0rJC8udGVzdCh1KSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBGb250RmFtaWx5IGNvbnRhaW5zIHNvbWUgaW52YWxpZCA8Y3VzdG9tLWlkZW50PjogIi5jb25jYXQociwiLiIpKSwhMX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fXZhciBsPW4/bi50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhsKT9sOiI0MDAiO3ZhciBmPXBhcnNlRmxvYXQoaSk7cmV0dXJuIGUuaXRhbGljQW5nbGU9aXNOYU4oZil8fGY8LTkwfHxmPjkwPyIxNCI6aS50b1N0cmluZygpLCEwfTt2YXIgYT1yKDIpLGk9cigxMzQpLG89cigxMzYpO2Z1bmN0aW9uIHMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHUoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT91KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB1KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBkKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnAoZSx0KX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIHA9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxwKGUsdCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT12KGUpO2lmKHQpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdihlKX10LlBERl9WRVJTSU9OX1JFR0VYUD0vXlsxLTldXC5cZCQvO3ZhciB5PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gaCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJNaXNzaW5nIGRhdGEgWyIuY29uY2F0KGUsIiwgIikuY29uY2F0KG4sIikiKSwiTWlzc2luZ0RhdGFFeGNlcHRpb24iKSkuYmVnaW49ZSxhLmVuZD1uLGF9cmV0dXJuIGYocil9KGEuQmFzZUV4Y2VwdGlvbik7dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj15O3ZhciBtPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJQYXJzZXJFT0ZFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlBhcnNlckVPRkV4Y2VwdGlvbj1tO3ZhciBiPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmRW50cnlFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZFbnRyeUV4Y2VwdGlvbj1iO3ZhciB3PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmUGFyc2VFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZQYXJzZUV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtoKHRoaXMsZSksdGhpcy5faGFuZGxlcj10LHRoaXMuX3N0cmVhbVR5cGVzPW5ldyBTZXQsdGhpcy5fZm9udFR5cGVzPW5ldyBTZXR9cmV0dXJuIGYoZSxbe2tleToiX3NlbmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXModGhpcy5fc3RyZWFtVHlwZXMpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl0W2UudmFsdWVdPSEwfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBhLGk9cyh0aGlzLl9mb250VHlwZXMpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOylyW2EudmFsdWVdPSEwfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMuX2hhbmRsZXIuc2VuZCgiRG9jU3RhdHMiLHtzdHJlYW1UeXBlczp0LGZvbnRUeXBlczpyfSl9fSx7a2V5OiJhZGRTdHJlYW1UeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdHJlYW1UeXBlcy5oYXMoZSl8fCh0aGlzLl9zdHJlYW1UeXBlcy5hZGQoZSksdGhpcy5fc2VuZCgpKX19LHtrZXk6ImFkZEZvbnRUeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9mb250VHlwZXMuaGFzKGUpfHwodGhpcy5fZm9udFR5cGVzLmFkZChlKSx0aGlzLl9zZW5kKCkpfX1dKSxlfSgpO2Z1bmN0aW9uIFMoZSl7Zm9yKHZhciB0LHI9ZS5kaWN0LG49ZS5rZXksYT1lLmdldEFycmF5LG89dm9pZCAwIT09YSYmYSxzPWUuc3RvcFdoZW5Gb3VuZCxjPXZvaWQgMD09PXN8fHMsdT1uZXcgaS5SZWZTZXQ7ciBpbnN0YW5jZW9mIGkuRGljdCYmKCFyLm9iaklkfHwhdS5oYXMoci5vYmpJZCkpOyl7ci5vYmpJZCYmdS5wdXQoci5vYmpJZCk7dmFyIGw9bz9yLmdldEFycmF5KG4pOnIuZ2V0KG4pO2lmKHZvaWQgMCE9PWwpe2lmKGMpcmV0dXJuIGw7dHx8KHQ9W10pLHQucHVzaChsKX1yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH10LkRvY1N0YXRzPWs7dmFyIHg9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXTtmdW5jdGlvbiBPKGUsdCxyLG4pe2lmKGUpe3ZhciBjPW51bGw7aWYoZSBpbnN0YW5jZW9mIGkuUmVmKXtpZihuLmhhcyhlKSlyZXR1cm47Yz1lLG4ucHV0KGMpLGU9dC5mZXRjaChlKX1pZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdSxsPXMoZSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KU8odS52YWx1ZSx0LHIsbil9Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9fWVsc2UgaWYoZSBpbnN0YW5jZW9mIGkuRGljdCl7aWYoKDAsaS5pc05hbWUpKGUuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSl7dmFyIGYsaD1lLmdldCgiSlMiKTtoIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2Y9aC5nZXRTdHJpbmcoKToic3RyaW5nIj09dHlwZW9mIGgmJihmPWgpLChmPWYmJigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYpLnJlcGxhY2UoL1x1MDAwMC9nLCIiKSkmJnIucHVzaChmKX1PKGUuZ2V0UmF3KCJOZXh0IiksdCxyLG4pfWMmJm4ucmVtb3ZlKGMpfX12YXIgQT17NjA6IiZsdDsiLDYyOiImZ3Q7IiwzODoiJmFtcDsiLDM0OiImcXVvdDsiLDM5OiImYXBvczsifX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJhc2VTdHJlYW09dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RyZWFtLiIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBsZW5ndGhgIGFjY2Vzc2VkIil9fSx7a2V5OiJpc0VtcHR5IixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBpc0VtcHR5YCBhY2Nlc3NlZCIpfX0se2tleToiaXNEYXRhTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNEYXRhTG9hZGVkIiwhMCl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKX19LHtrZXk6InBlZWtCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xIT09ZSYmdGhpcy5wb3MtLSxlfX0se2tleToicGVla0J5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEJ5dGVzKGUpO3JldHVybiB0aGlzLnBvcy09dC5sZW5ndGgsdH19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fX0se2tleToiZ2V0SW50MzIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX19LHtrZXk6ImdldEJ5dGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZ2V0Qnl0ZXMoZSkpfX0se2tleToic2tpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wb3MrPWV8fDF9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9fSx7a2V5OiJtb3ZlU3RhcnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX19LHtrZXk6Im1ha2VTdWJTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkIil9fSx7a2V5OiJnZXRCYXNlU3RyZWFtcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSkmJmkodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkJhc2VTdHJlYW09b30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5ldHdvcmtQZGZNYW5hZ2VyPXQuTG9jYWxQZGZNYW5hZ2VyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzgpLGk9cigxMzUpLG89cigxNDApLHM9cigxMzkpO2Z1bmN0aW9uIGMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWgoZSk7aWYodCl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmKGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBmKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGQoZSl9ZnVuY3Rpb24gcCgpe3A9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09ZChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZyhlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7ZyhpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7ZyhpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1kKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYihlLHQscil7cmV0dXJuIHQmJm0oZS5wcm90b3R5cGUsdCksciYmbShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdyhlKXtpZihlKXt2YXIgdD0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUpO2lmKHQpcmV0dXJuIHQuaHJlZjsoMCxuLndhcm4pKCdJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gbnVsbH12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt5KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4iKX12YXIgdDtyZXR1cm4gYihlLFt7a2V5OiJkb2NJZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY0lkfX0se2tleToicGFzc3dvcmQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXNzd29yZH19LHtrZXk6ImRvY0Jhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZztyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZG9jQmFzZVVybCIsZS5iYXNlVXJsfHx0aGlzLl9kb2NCYXNlVXJsKX19LHtrZXk6ImVuc3VyZURvYyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudCxlLHQpfX0se2tleToiZW5zdXJlWFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC54cmVmLGUsdCl9fSx7a2V5OiJlbnN1cmVDYXRhbG9nIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LmNhdGFsb2csZSx0KX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UoZSl9fSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZm9udEZhbGxiYWNrKGUsdCl9fSx7a2V5OiJsb2FkWGZhRm9udHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUZvbnRzKGUsdCl9fSx7a2V5OiJsb2FkWGZhSW1hZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmxvYWRYZmFJbWFnZXMoKX19LHtrZXk6InNlcmlhbGl6ZVhmYURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LnNlcmlhbGl6ZVhmYURhdGEoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cChlKX19LHtrZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDooMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfX0se2tleToidXBkYXRlUGFzc3dvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3Bhc3N3b3JkPWV9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fV0pLGV9KCksUz1mdW5jdGlvbihlKXtjKG4sZSk7dmFyIHQscj1sKG4pO2Z1bmN0aW9uIG4oZSx0LGEsaSxjLHUsbCl7dmFyIGg7eSh0aGlzLG4pLChoPXIuY2FsbCh0aGlzKSkuX2RvY0lkPWUsaC5fcGFzc3dvcmQ9YSxoLl9kb2NCYXNlVXJsPXcobCksaC5tc2dIYW5kbGVyPWksaC5ldmFsdWF0b3JPcHRpb25zPWMsaC5lbmFibGVYZmE9dTt2YXIgZD1uZXcgcy5TdHJlYW0odCk7cmV0dXJuIGgucGRmRG9jdW1lbnQ9bmV3IG8uUERGRG9jdW1lbnQoZihoKSxkKSxoLl9sb2FkZWRTdHJlYW1Qcm9taXNlPVByb21pc2UucmVzb2x2ZShkKSxofXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJyZXF1ZXN0UmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX1dKSxufShrKTt0LkxvY2FsUGRmTWFuYWdlcj1TO3ZhciB4PWZ1bmN0aW9uKGUpe2MobixlKTt2YXIgdCxyPWwobik7ZnVuY3Rpb24gbihlLHQsaSxzLGMsdSl7dmFyIGw7cmV0dXJuIHkodGhpcyxuKSwobD1yLmNhbGwodGhpcykpLl9kb2NJZD1lLGwuX3Bhc3N3b3JkPWkucGFzc3dvcmQsbC5fZG9jQmFzZVVybD13KHUpLGwubXNnSGFuZGxlcj1pLm1zZ0hhbmRsZXIsbC5ldmFsdWF0b3JPcHRpb25zPXMsbC5lbmFibGVYZmE9YyxsLnN0cmVhbU1hbmFnZXI9bmV3IGEuQ2h1bmtlZFN0cmVhbU1hbmFnZXIodCx7bXNnSGFuZGxlcjppLm1zZ0hhbmRsZXIsbGVuZ3RoOmkubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmkucmFuZ2VDaHVua1NpemV9KSxsLnBkZkRvY3VtZW50PW5ldyBvLlBERkRvY3VtZW50KGYobCksbC5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKSxsfXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihlLnByZXY9MCwiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDc6aWYoZS5wcmV2PTcsZS50MD1lLmNhdGNoKDApLGUudDAgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXtlLm5leHQ9MTE7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDExOnJldHVybiBlLm5leHQ9MTMsdGhpcy5yZXF1ZXN0UmFuZ2UoZS50MC5iZWdpbixlLnQwLmVuZCk7Y2FzZSAxMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5lbnN1cmUodCxyLG4pKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw3XV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcyhlKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtjaHVuazplfSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChlKX19XSksbn0oayk7dC5OZXR3b3JrUGRmTWFuYWdlcj14fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DaHVua2VkU3RyZWFtTWFuYWdlcj10LkNodW5rZWRTdHJlYW09dm9pZCAwO3ZhciBhPXIoMiksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0LHIpe3JldHVybiB0JiZ1KGUucHJvdG90eXBlLHQpLHImJnUoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfXZhciBkPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9KG8sZSk7dmFyIHQscixhPSh0PW8scj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPWgodCk7aWYocil7dmFyIGk9aCh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gbyhlLHQscil7dmFyIG47cmV0dXJuIGModGhpcyxvKSwobj1hLmNhbGwodGhpcyxuZXcgVWludDhBcnJheShlKSwwLGUsbnVsbCkpLmNodW5rU2l6ZT10LG4uX2xvYWRlZENodW5rcz1uZXcgU2V0LG4ubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpLG4ubWFuYWdlcj1yLG4ucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTAsbi5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMSxufXJldHVybiBsKG8sW3trZXk6ImdldE1pc3NpbmdDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMubnVtQ2h1bmtzO3Q8cjsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfX0se2tleToibnVtQ2h1bmtzTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9fSx7a2V5OiJpc0RhdGFMb2FkZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfX0se2tleToib25SZWNlaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNodW5rU2l6ZTtpZihlJXIhPTApdGhyb3cgbmV3IEVycm9yKCJCYWQgYmVnaW4gb2Zmc2V0OiAiLmNvbmNhdChlKSk7dmFyIG49ZSt0LmJ5dGVMZW5ndGg7aWYobiVyIT0wJiZuIT09dGhpcy5ieXRlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCYWQgZW5kIG9mZnNldDogIi5jb25jYXQobikpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KHQpLGUpO2Zvcih2YXIgYT1NYXRoLmZsb29yKGUvciksaT1NYXRoLmZsb29yKChuLTEpL3IpKzEsbz1hO288aTsrK28pdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChvKX19LHtrZXk6Im9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgscj1NYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KGUpLHQpLHQrPWUuYnl0ZUxlbmd0aCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD10O2Zvcih2YXIgbj10Pj10aGlzLmVuZD90aGlzLm51bUNodW5rczpNYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpLGE9cjthPG47KythKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoYSl9fSx7a2V5OiJlbnN1cmVCeXRlIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGU8dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpKXt2YXIgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX19fSx7a2V5OiJlbnN1cmVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGU+PXR8fHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSl7dmFyIHI9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZighKHI+dGhpcy5udW1DaHVua3MpKWZvcih2YXIgbj1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKSxhPXI7YTxuOysrYSlpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhhKSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLHQpfX19LHtrZXk6Im5leHRFbXB0eUNodW5rIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5udW1DaHVua3Mscj0wO3I8dDsrK3Ipe3ZhciBuPShlK3IpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMobikpcmV0dXJuIG59cmV0dXJuIG51bGx9fSx7a2V5OiJoYXNDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zO3JldHVybiBlPj10aGlzLmVuZD8tMTooZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKSx0aGlzLmJ5dGVzW3RoaXMucG9zKytdKX19LHtrZXk6ImdldEJ5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ5dGVzLHI9dGhpcy5wb3Msbj10aGlzLmVuZDtpZighZSlyZXR1cm4gbj50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLG4pLHQuc3ViYXJyYXkocixuKTt2YXIgYT1yK2U7cmV0dXJuIGE+biYmKGE9biksYT50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLGEpLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsdCksdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtmdW5jdGlvbiBuKCl7fXQ/ZSt0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsZSt0KTplPj10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVCeXRlKGUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGhpcyksbi5wcm90b3R5cGUuZ2V0TWlzc2luZ0NodW5rcz1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNodW5rU2l6ZSx0PU1hdGguZmxvb3IodGhpcy5zdGFydC9lKSxyPU1hdGguZmxvb3IoKHRoaXMuZW5kLTEpL2UpKzEsbj1bXSxhPXQ7YTxyOysrYSl0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGEpfHxuLnB1c2goYSk7cmV0dXJuIG59LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwiaXNEYXRhTG9hZGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkPT09dGhpcy5udW1DaHVua3N8fDA9PT10aGlzLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGh9LGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBhPW5ldyBuO3JldHVybiBhLnBvcz1hLnN0YXJ0PWUsYS5lbmQ9ZSt0fHx0aGlzLmVuZCxhLmRpY3Q9cixhfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXNdfX1dKSxvfShyKDEzOSkuU3RyZWFtKTt0LkNodW5rZWRTdHJlYW09ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtjKHRoaXMsZSksdGhpcy5sZW5ndGg9ci5sZW5ndGgsdGhpcy5jaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLnN0cmVhbT1uZXcgZCh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKSx0aGlzLnBkZk5ldHdvcmtTdHJlYW09dCx0aGlzLmRpc2FibGVBdXRvRmV0Y2g9ci5kaXNhYmxlQXV0b0ZldGNoLHRoaXMubXNnSGFuZGxlcj1yLm1zZ0hhbmRsZXIsdGhpcy5jdXJyUmVxdWVzdElkPTAsdGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXAsdGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXAsdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wLHRoaXMuYWJvcnRlZD0hMSx0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9cmV0dXJuIGwoZSxbe2tleToic2VuZFJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPXRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihlLHQpO24uaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fChuLm9uUHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcykpO3ZhciBpPVtdLG89MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24gcyhjKXt0cnl7aWYoIWMuZG9uZSl7dmFyIHU9Yy52YWx1ZTtyZXR1cm4gaS5wdXNoKHUpLG8rPSgwLGEuYXJyYXlCeXRlTGVuZ3RoKSh1KSxuLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZyLm9uUHJvZ3Jlc3Moe2xvYWRlZDpvfSksdm9pZCBuLnJlYWQoKS50aGVuKHMsdCl9dmFyIGw9KDAsYS5hcnJheXNUb0J5dGVzKShpKTtpPW51bGwsZShsKX1jYXRjaChlKXt0KGUpfX0pLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3IuYWJvcnRlZHx8ci5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pKX19LHtrZXk6InJlcXVlc3RBbGxDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSl7dmFyIGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3RoaXMuX3JlcXVlc3RDaHVua3MoZSl9cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6Il9yZXF1ZXN0Q2h1bmtzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5jdXJyUmVxdWVzdElkKyssbj1uZXcgU2V0O3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQocixuKTt2YXIgaSxzPW8oZSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO3RoaXMuc3RyZWFtLmhhc0NodW5rKGMpfHxuLmFkZChjKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYoMD09PW4uc2l6ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIHU9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5zZXQocix1KTt2YXIgbCxmPVtdLGg9byhuKTt0cnl7Zm9yKGgucygpOyEobD1oLm4oKSkuZG9uZTspe3ZhciBkPWwudmFsdWUscD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGQpO3B8fChwPVtdLHRoaXMuX3JlcXVlc3RzQnlDaHVuay5zZXQoZCxwKSxmLnB1c2goZCkpLHAucHVzaChyKX19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9aWYoZi5sZW5ndGg+MCl7dmFyIGcsdj1vKHRoaXMuZ3JvdXBDaHVua3MoZikpO3RyeXtmb3Iodi5zKCk7IShnPXYubigpKS5kb25lOyl7dmFyIHk9Zy52YWx1ZSxtPXkuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxiPU1hdGgubWluKHkuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QobSxiKS5jYXRjaCh1LnJlamVjdCl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfX1yZXR1cm4gdS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5hYm9ydGVkKXRocm93IGV9KSl9fSx7a2V5OiJnZXRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyZWFtfX0se2tleToicmVxdWVzdFJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXMuZ2V0QmVnaW5DaHVuayhlKSxuPXRoaXMuZ2V0RW5kQ2h1bmsodCksYT1bXSxpPXI7aTxuOysraSlhLnB1c2goaSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoYSl9fSx7a2V5OiJyZXF1ZXN0UmFuZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1vKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWZvcih2YXIgbj1lLnZhbHVlLGE9dGhpcy5nZXRCZWdpbkNodW5rKG4uYmVnaW4pLGk9dGhpcy5nZXRFbmRDaHVuayhuLmVuZCkscz1hO3M8aTsrK3MpdC5pbmNsdWRlcyhzKXx8dC5wdXNoKHMpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiB0LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSx0aGlzLl9yZXF1ZXN0Q2h1bmtzKHQpfX0se2tleToiZ3JvdXBDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPS0xLG49LTEsYT0wLGk9ZS5sZW5ndGg7YTxpOysrYSl7dmFyIG89ZVthXTtyPDAmJihyPW8pLG4+PTAmJm4rMSE9PW8mJih0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpuKzF9KSxyPW8pLGErMT09PWUubGVuZ3RoJiZ0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpvKzF9KSxuPW99cmV0dXJuIHR9fSx7a2V5OiJvblByb2dyZXNzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplK2UubG9hZGVkLHRvdGFsOnRoaXMubGVuZ3RofSl9fSx7a2V5OiJvblJlY2VpdmVEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNodW5rLHI9dm9pZCAwPT09ZS5iZWdpbixuPXI/dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg6ZS5iZWdpbixhPW4rdC5ieXRlTGVuZ3RoLGk9TWF0aC5mbG9vcihuL3RoaXMuY2h1bmtTaXplKSxzPWE8dGhpcy5sZW5ndGg/TWF0aC5mbG9vcihhL3RoaXMuY2h1bmtTaXplKTpNYXRoLmNlaWwoYS90aGlzLmNodW5rU2l6ZSk7cj8odGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKHQpLHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPWEpOnRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEobix0KSx0aGlzLnN0cmVhbS5pc0RhdGFMb2FkZWQmJnRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7Zm9yKHZhciBjPVtdLHU9aTt1PHM7Kyt1KXt2YXIgbD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KHUpO2lmKGwpe3RoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUodSk7dmFyIGYsaD1vKGwpO3RyeXtmb3IoaC5zKCk7IShmPWgubigpKS5kb25lOyl7dmFyIGQ9Zi52YWx1ZSxwPXRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQoZCk7cC5oYXModSkmJnAuZGVsZXRlKHUpLHAuc2l6ZT4wfHxjLnB1c2goZCl9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX19aWYoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCYmMD09PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5zaXplKXt2YXIgZztpZigxPT09dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKXt2YXIgdj10aGlzLnN0cmVhbS5udW1DaHVua3MtMTt0aGlzLnN0cmVhbS5oYXNDaHVuayh2KXx8KGc9dil9ZWxzZSBnPXRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKHMpO051bWJlci5pc0ludGVnZXIoZykmJnRoaXMuX3JlcXVlc3RDaHVua3MoW2ddKX1mb3IodmFyIHk9MCxtPWM7eTxtLmxlbmd0aDt5Kyspe3ZhciBiPW1beV0sdz10aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQoYik7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKGIpLHcucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX19LHtrZXk6Im9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfX0se2tleToiZ2V0QmVnaW5DaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9fSx7a2V5OiJnZXRFbmRDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5hYm9ydGVkPSEwLHRoaXMucGRmTmV0d29ya1N0cmVhbSYmdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKGUpO3ZhciB0LHI9byh0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXQudmFsdWUucmVqZWN0KGUpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19XSksZX0oKTt0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPXB9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cmluZ1N0cmVhbT10LlN0cmVhbT10Lk51bGxTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUsbixhLGkpe3ZhciBzO3JldHVybiBvKHRoaXMsciksKHM9dC5jYWxsKHRoaXMpKS5ieXRlcz1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpLHMuc3RhcnQ9bnx8MCxzLnBvcz1zLnN0YXJ0LHMuZW5kPW4rYXx8cy5ieXRlcy5sZW5ndGgscy5kaWN0PWksc31yZXR1cm4gYyhyLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fX0se2tleToiaXNFbXB0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH19LHtrZXk6ImdldEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnl0ZXMscj10aGlzLnBvcyxuPXRoaXMuZW5kO2lmKCFlKXJldHVybiB0LnN1YmFycmF5KHIsbik7dmFyIGE9citlO3JldHVybiBhPm4mJihhPW4pLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0aGlzLmJ5dGVzLnN1YmFycmF5KGUsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0YXJ0fX0se2tleToibW92ZVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhcnQ9dGhpcy5wb3N9fSx7a2V5OiJtYWtlU3ViU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBuZXcgcih0aGlzLmJ5dGVzLmJ1ZmZlcixlLHQsbil9fV0pLHJ9KGEuQmFzZVN0cmVhbSk7dC5TdHJlYW09ZDt2YXIgcD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsKDAsaS5zdHJpbmdUb0J5dGVzKShlKSl9cmV0dXJuIGMocil9KGQpO3QuU3RyaW5nU3RyZWFtPXA7dmFyIGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcigpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoMCkpfXJldHVybiBjKHIpfShkKTt0Lk51bGxTdHJlYW09Z30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhZ2U9dC5QREZEb2N1bWVudD12b2lkIDA7dmFyIG49cigxNDEpLGE9cigyKSxpPXIoMTM1KSxvPXIoMTM0KSxzPXIoMTgwKSxjPXIoMTM2KSx1PXIoMTk2KSxsPXIoMTk4KSxmPXIoMjAwKSxoPXIoMjI5KSxkPXIoMTQ2KSxwPXIoMTM5KSxnPXIoMjA0KSx2PXIoMTkxKSx5PXIoMTQ0KSxtPXIoMTQ4KSxiPXIoMjAzKSx3PXIoMTk0KSxrPXIoMjA1KSxTPXIoMjMwKTtmdW5jdGlvbiB4KGUpe3JldHVybiB4PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx4KGUpfWZ1bmN0aW9uIE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8UChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gQSgpe0E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09eChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gVChlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fFAoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9UChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gUChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gVChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP1QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIFQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBJKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtJKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtJKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaihlLHQpe3JldHVybiBqPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saihlLHQpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIE09T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LE0oZSl9ZnVuY3Rpb24gXyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXgobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT14KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBSKGUsdCxyKXtyZXR1cm4gdCYmTChlLnByb3RvdHlwZSx0KSxyJiZMKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgTj1bMCwwLDYxMiw3OTJdLEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQucGRmTWFuYWdlcixuPXQueHJlZixhPXQucGFnZUluZGV4LGk9dC5wYWdlRGljdCxvPXQucmVmLHM9dC5nbG9iYWxJZEZhY3RvcnksYz10LmZvbnRDYWNoZSx1PXQuYnVpbHRJbkNNYXBDYWNoZSxsPXQuc3RhbmRhcmRGb250RGF0YUNhY2hlLGY9dC5nbG9iYWxJbWFnZUNhY2hlLGg9dC5ub25CbGVuZE1vZGVzU2V0LGQ9dC54ZmFGYWN0b3J5O18odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9cix0aGlzLnBhZ2VJbmRleD1hLHRoaXMucGFnZURpY3Q9aSx0aGlzLnhyZWY9bix0aGlzLnJlZj1vLHRoaXMuZm9udENhY2hlPWMsdGhpcy5idWlsdEluQ01hcENhY2hlPXUsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9bCx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9Zix0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9aCx0aGlzLmV2YWx1YXRvck9wdGlvbnM9ci5ldmFsdWF0b3JPcHRpb25zLHRoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsLHRoaXMueGZhRmFjdG9yeT1kO3ZhciBwPXtvYmo6MH07dGhpcy5fbG9jYWxJZEZhY3Rvcnk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmooZSx0KX0oaSxlKTt2YXIgdCxyLG49KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLG49TSh0KTtpZihyKXt2YXIgYT1NKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PXgodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKCl7cmV0dXJuIF8odGhpcyxpKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUihpLG51bGwsW3trZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJwIi5jb25jYXQoYSwiXyIpLmNvbmNhdCgrK3Aub2JqKX19LHtrZXk6ImdldFBhZ2VPYmpJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4icGFnZSIuY29uY2F0KG8udG9TdHJpbmcoKSl9fV0pLGl9KHMpfXZhciB0LHIscztyZXR1cm4gUihlLFt7a2V5OiJfZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxyPSgwLGkuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dGhpcy5wYWdlRGljdCxrZXk6ZSxnZXRBcnJheTp0LHN0b3BXaGVuRm91bmQ6ITF9KTtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT8xIT09ci5sZW5ndGgmJnJbMF1pbnN0YW5jZW9mIG8uRGljdD9vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpyfSk6clswXTpyfX0se2tleToiY29udGVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZURpY3QuZ2V0QXJyYXkoIkNvbnRlbnRzIil9fSx7a2V5OiJyZXNvdXJjZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJyZXNvdXJjZXMiLGUgaW5zdGFuY2VvZiBvLkRpY3Q/ZTpvLkRpY3QuZW1wdHkpfX0se2tleToiX2dldEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O3ZhciB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXtpZigodD1hLlV0aWwubm9ybWFsaXplUmVjdCh0KSlbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDsoMCxhLndhcm4pKCJFbXB0eSwgb3IgaW52YWxpZCwgLyIuY29uY2F0KGUsIiBlbnRyeS4iKSl9cmV0dXJuIG51bGx9fSx7a2V5OiJtZWRpYUJveCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1lZGlhQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiTWVkaWFCb3giKXx8Til9fSx7a2V5OiJjcm9wQm94IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9fSx7a2V5OiJ1c2VyVW5pdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7cmV0dXJuKCJudW1iZXIiIT10eXBlb2YgZXx8ZTw9MCkmJihlPTEpLCgwLGEuc2hhZG93KSh0aGlzLCJ1c2VyVW5pdCIsZSl9fSx7a2V5OiJ2aWV3IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyb3BCb3gsdD10aGlzLm1lZGlhQm94O2lmKGUhPT10JiYhKDAsYS5pc0FycmF5RXF1YWwpKGUsdCkpe3ZhciByPWEuVXRpbC5pbnRlcnNlY3QoZSx0KTtpZihyJiZyWzJdLXJbMF0+MCYmclszXS1yWzFdPjApcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZpZXciLHIpOygwLGEud2FybikoIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3Iix0KX19LHtrZXk6InJvdGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiUm90YXRlIil8fDA7cmV0dXJuIGUlOTAhPTA/ZT0wOmU+PTM2MD9lJT0zNjA6ZTwwJiYoZT0oZSUzNjArMzYwKSUzNjApLCgwLGEuc2hhZG93KSh0aGlzLCJyb3RhdGUiLGUpfX0se2tleToiX29uU3ViU3RyZWFtRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBlLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29udGVudFN1YlN0cmVhbX0pLHZvaWQoMCxhLndhcm4pKCJnZXRDb250ZW50U3RyZWFtIC0gaWdub3Jpbmcgc3ViLXN0cmVhbSAoIi5jb25jYXQociwnKTogIicpLmNvbmNhdCh0LCciLicpKTt0aHJvdyB0fX0se2tleToiZ2V0Q29udGVudFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJjb250ZW50IikudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/cjpBcnJheS5pc0FycmF5KHIpP25ldyBtLlN0cmVhbXNTZXF1ZW5jZVN0cmVhbShyLHQuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0LGUpKTpuZXcgcC5OdWxsU3RyZWFtfSkpfX0se2tleToieGZhRGF0YSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGEiLHRoaXMueGZhRmFjdG9yeT97YmJveDp0aGlzLnhmYUZhY3RvcnkuZ2V0Qm91bmRpbmdCb3godGhpcy5wYWdlSW5kZXgpfTpudWxsKX19LHtrZXk6InNhdmVOZXdBbm5vdGF0aW9ucyIsdmFsdWU6KHM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGksbyxzLGMsdSxsLGYsaCxkLHAsZztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhmYUZhY3Rvcnkpe2UubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y2FzZSAyOnJldHVybiBpPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSxvPXRoaXMucGFnZURpY3Qscz10aGlzLmFubm90YXRpb25zLnNsaWNlKCksZS5uZXh0PTcsbi5Bbm5vdGF0aW9uRmFjdG9yeS5zYXZlTmV3QW5ub3RhdGlvbnMoaSxyLGEpO2Nhc2UgNzpjPWUuc2VudCx1PUYoYy5hbm5vdGF0aW9ucyk7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWY9bC52YWx1ZS5yZWYscy5wdXNoKGYpfWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfXJldHVybiBoPW8uZ2V0KCJBbm5vdHMiKSxvLnNldCgiQW5ub3RzIixzKSxkPVtdLHA9bnVsbCx0aGlzLnhyZWYuZW5jcnlwdCYmKHA9dGhpcy54cmVmLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSwoMCx3LndyaXRlT2JqZWN0KSh0aGlzLnJlZixvLGQscCksaCYmby5zZXQoIkFubm90cyIsaCksKGc9Yy5kZXBlbmRlbmNpZXMpLnB1c2guYXBwbHkoZyxbe3JlZjp0aGlzLnJlZixkYXRhOmQuam9pbigiIil9XS5jb25jYXQoQyhjLmFubm90YXRpb25zKSkpLGUuYWJydXB0KCJyZXR1cm4iLGcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSk7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBpLG89W10scz1GKGUpO3RyeXtmb3Iocy5zKCk7IShpPXMubigpKS5kb25lOyl7dmFyIGM9aS52YWx1ZTtjLm11c3RCZVByaW50ZWQocikmJm8ucHVzaChjLnNhdmUobix0LHIpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiKyciJy5jb25jYXQodC5uYW1lLCciIHRhc2s6ICInKS5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXJldHVybiBQcm9taXNlLmFsbChvKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pKX0pKX0pKX19LHtrZXk6ImxvYWRSZXNvdXJjZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZXx8KHRoaXMucmVzb3VyY2VzUHJvbWlzZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsInJlc291cmNlcyIpKSx0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGcuT2JqZWN0TG9hZGVyKHQucmVzb3VyY2VzLGUsdC54cmVmKS5sb2FkKCl9KSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmhhbmRsZXIsbz1lLnNpbmsscz1lLnRhc2ssYz1lLmludGVudCx1PWUuY2FjaGVLZXksbD1lLmFubm90YXRpb25TdG9yYWdlLGY9dm9pZCAwPT09bD9udWxsOmwsaD10aGlzLmdldENvbnRlbnRTdHJlYW0ociksZD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSkscD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnIscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksZz10aGlzLnhmYUZhY3Rvcnk/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShmKSxtPVByb21pc2UucmVzb2x2ZShudWxsKTtpZihnKXt2YXIgYj1nLmdldCh0aGlzLnBhZ2VJbmRleCk7YiYmKG09bi5Bbm5vdGF0aW9uRmFjdG9yeS5wcmludE5ld0Fubm90YXRpb25zKHAscyxiKSl9dmFyIHc9UHJvbWlzZS5hbGwoW2gsZF0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBuPU8oZSwxKVswXSxhPW5ldyB2Lk9wZXJhdG9yTGlzdChjLG8pO3JldHVybiByLnNlbmQoIlN0YXJ0UmVuZGVyUGFnZSIse3RyYW5zcGFyZW5jeTpwLmhhc0JsZW5kTW9kZXModC5yZXNvdXJjZXMsdC5ub25CbGVuZE1vZGVzU2V0KSxwYWdlSW5kZXg6dC5wYWdlSW5kZXgsY2FjaGVLZXk6dX0pLHAuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOnMscmVzb3VyY2VzOnQucmVzb3VyY2VzLG9wZXJhdG9yTGlzdDphfSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoW3csdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMsbV0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PU8oZSwzKSxyPXRbMF0sbj10WzFdLGk9dFsyXTtpZihpJiYobj1uLmNvbmNhdChpKSksMD09PW4ubGVuZ3RofHxjJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFKXJldHVybiByLmZsdXNoKCEwKSx7bGVuZ3RoOnIudG90YWxMZW5ndGh9O3ZhciBvLHU9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVMpLGw9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxoPSEhKGMmYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGQ9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpLGc9W10sdj1GKG4pO3RyeXtmb3Iodi5zKCk7IShvPXYubigpKS5kb25lOyl7dmFyIHk9by52YWx1ZTsobHx8aCYmeS5tdXN0QmVWaWV3ZWQoZil8fGQmJnkubXVzdEJlUHJpbnRlZChmKSkmJmcucHVzaCh5LmdldE9wZXJhdG9yTGlzdChwLHMsYyx1LGYpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIrJyInLmNvbmNhdChzLm5hbWUsJyIgdGFzazogIicpLmNvbmNhdChlLCciLicpKSx7b3BMaXN0Om51bGwsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX0pKSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXJldHVybiBQcm9taXNlLmFsbChnKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdCxuPSExLGE9ITEsaT1GKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89dC52YWx1ZSxzPW8ub3BMaXN0LGM9by5zZXBhcmF0ZUZvcm0sdT1vLnNlcGFyYXRlQ2FudmFzO3IuYWRkT3BMaXN0KHMpLGMmJihuPWMpLHUmJihhPXUpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gci5mbHVzaCghMCx7Zm9ybTpuLGNhbnZhczphfSkse2xlbmd0aDpyLnRvdGFsTGVuZ3RofX0pKX0pKX19LHtrZXk6ImV4dHJhY3RUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFuZGxlcixuPWUudGFzayxhPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT1lLnNpbmssbz1lLmNvbWJpbmVUZXh0SXRlbXMscz10aGlzLmdldENvbnRlbnRTdHJlYW0ociksYz10aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJGb250IiwiUHJvcGVydGllcyIsIlhPYmplY3QiXSk7cmV0dXJuIFByb21pc2UuYWxsKFtzLGNdKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcz1PKGUsMSlbMF07cmV0dXJuIG5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dC54cmVmLGhhbmRsZXI6cixwYWdlSW5kZXg6dC5wYWdlSW5kZXgsaWRGYWN0b3J5OnQuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0Lmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0LmV2YWx1YXRvck9wdGlvbnN9KS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnMsdGFzazpuLHJlc291cmNlczp0LnJlc291cmNlcyxpbmNsdWRlTWFya2VkQ29udGVudDphLGNvbWJpbmVUZXh0SXRlbXM6byxzaW5rOmksdmlld0JveDp0LnZpZXd9KX0pKX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJzdHJ1Y3RUcmVlUm9vdCIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5uZXh0PTcsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbdF0pO2Nhc2UgNzpyZXR1cm4gcj1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsci5zZXJpYWxpemFibGUpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9wYXJzZVN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBiLlN0cnVjdFRyZWVQYWdlKGUsdGhpcy5wYWdlRGljdCk7cmV0dXJuIHQucGFyc2UoKSx0fX0se2tleToiZ2V0QW5ub3RhdGlvbnNEYXRhIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgaSxvLHMsYyx1LGwsZixoLGQscCxnO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3BhcnNlZEFubm90YXRpb25zO2Nhc2UgMjppZigwIT09KGk9ZS5zZW50KS5sZW5ndGgpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbXSk7Y2FzZSA1Om89W10scz1bXSx1PSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWSksbD0hIShuJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSxmPSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKSxoPUYoaSk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSwoKGc9dXx8bCYmcC52aWV3YWJsZSl8fGYmJnAucHJpbnRhYmxlKSYmcy5wdXNoKHAuZGF0YSkscC5oYXNUZXh0Q29udGVudCYmZyYmKGN8fChjPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSksby5wdXNoKHAuZXh0cmFjdFRleHRDb250ZW50KGMscix0aGlzLnZpZXcpLmNhdGNoKChmdW5jdGlvbihlKXsoMCxhLndhcm4pKCdnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIicuY29uY2F0KHIubmFtZSwnIiB0YXNrOiAiJykuY29uY2F0KGUsJyIuJykpfSkpKSl9Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGUubmV4dD0xMixQcm9taXNlLmFsbChvKTtjYXNlIDEyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJhbm5vdGF0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQW5ub3RzIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImFubm90YXRpb25zIixBcnJheS5pc0FycmF5KGUpP2U6W10pfX0se2tleToiX3BhcnNlZEFubm90YXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQscj1bXSxpPUYoZS5hbm5vdGF0aW9ucyk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbz10LnZhbHVlO3IucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZShlLnhyZWYsbyxlLnBkZk1hbmFnZXIsZS5fbG9jYWxJZEZhY3RvcnksITEpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdfcGFyc2VkQW5ub3RhdGlvbnM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIFByb21pc2UuYWxsKHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTt2YXIgdCxyLGE9W10saT1GKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvJiYobyBpbnN0YW5jZW9mIG4uUG9wdXBBbm5vdGF0aW9uPyh0fHwodD1bXSksdC5wdXNoKG8pKTphLnB1c2gobykpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdCYmYS5wdXNoLmFwcGx5KGEsQyh0KSksYX0pKX0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIix0KX19LHtrZXk6ImpzQWN0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9KDAsaS5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMucGFnZURpY3QsYS5QYWdlQWN0aW9uRXZlbnRUeXBlKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywianNBY3Rpb25zIixlKX19XSksZX0oKTt0LlBhZ2U9RDt2YXIgQj1uZXcgVWludDhBcnJheShbMzcsODAsNjgsNzAsNDVdKSxVPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksJD1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTExLDk4LDEwNl0pO2Z1bmN0aW9uIFgoZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTAyNCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sYT10Lmxlbmd0aCxpPWUucGVla0J5dGVzKHIpLG89aS5sZW5ndGgtYTtpZihvPD0wKXJldHVybiExO2lmKG4pZm9yKHZhciBzPWEtMSxjPWkubGVuZ3RoLTE7Yz49czspe2Zvcih2YXIgdT0wO3U8YSYmaVtjLXVdPT09dFtzLXVdOyl1Kys7aWYodT49YSlyZXR1cm4gZS5wb3MrPWMtcywhMDtjLS19ZWxzZSBmb3IodmFyIGw9MDtsPD1vOyl7Zm9yKHZhciBmPTA7ZjxhJiZpW2wrZl09PT10W2ZdOylmKys7aWYoZj49YSlyZXR1cm4gZS5wb3MrPWwsITA7bCsrfXJldHVybiExfXZhciBIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2lmKF8odGhpcyxlKSxyLmxlbmd0aDw9MCl0aHJvdyBuZXcgYS5JbnZhbGlkUERGRXhjZXB0aW9uKCJUaGUgUERGIGZpbGUgaXMgZW1wdHksIGkuZS4gaXRzIHNpemUgaXMgemVybyBieXRlcy4iKTt0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnN0cmVhbT1yLHRoaXMueHJlZj1uZXcgUy5YUmVmKHIsdCksdGhpcy5fcGFnZVByb21pc2VzPW5ldyBNYXAsdGhpcy5fdmVyc2lvbj1udWxsO3ZhciBuPXtmb250OjB9O3RoaXMuX2dsb2JhbElkRmFjdG9yeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfKHRoaXMsZSl9cmV0dXJuIFIoZSxudWxsLFt7a2V5OiJnZXREb2NJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZ18iLmNvbmNhdCh0LmRvY0lkKX19LHtrZXk6ImNyZWF0ZUZvbnRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZiIuY29uY2F0KCsrbi5mb250KX19LHtrZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGNyZWF0ZU9iaklkYCBjYWxsZWQuIil9fSx7a2V5OiJnZXRQYWdlT2JqSWQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsYS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGFnZU9iaklkYCBjYWxsZWQuIil9fV0pLGV9KCl9dmFyIHQscixwLG0sYix3LEMsUDtyZXR1cm4gUihlLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy54cmVmLnBhcnNlKGUpLHRoaXMuY2F0YWxvZz1uZXcgbC5DYXRhbG9nKHRoaXMucGRmTWFuYWdlcix0aGlzLnhyZWYpfX0se2tleToibGluZWFyaXphdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT1kLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoZSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImxpbmVhcml6YXRpb24iLGUpfX0se2tleToic3RhcnRYUmVmIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbSx0PTA7aWYodGhpcy5saW5lYXJpemF0aW9uKWUucmVzZXQoKSxYKGUsJCkmJih0PWUucG9zKzYtZS5zdGFydCk7ZWxzZXtmb3IodmFyIHI9VS5sZW5ndGgsbj0hMSxvPWUuZW5kOyFuJiZvPjA7KShvLT0xMDI0LXIpPDAmJihvPTApLGUucG9zPW8sbj1YKGUsVSwxMDI0LCEwKTtpZihuKXt2YXIgcztlLnNraXAoOSk7ZG97cz1lLmdldEJ5dGUoKX13aGlsZSgoMCxpLmlzV2hpdGVTcGFjZSkocykpO2Zvcih2YXIgYz0iIjtzPj0zMiYmczw9NTc7KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUocykscz1lLmdldEJ5dGUoKTt0PXBhcnNlSW50KGMsMTApLGlzTmFOKHQpJiYodD0wKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInN0YXJ0WFJlZiIsdCl9fSx7a2V5OiJjaGVja0hlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbTtpZihlLnJlc2V0KCksWChlLEIpKXtlLm1vdmVTdGFydCgpLGUuc2tpcChCLmxlbmd0aCk7Zm9yKHZhciB0LHI9IiI7KHQ9ZS5nZXRCeXRlKCkpPjMyJiZyLmxlbmd0aDw3OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2kuUERGX1ZFUlNJT05fUkVHRVhQLnRlc3Qocik/dGhpcy5fdmVyc2lvbj1yOigwLGEud2FybikoIkludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAiLmNvbmNhdChyKSl9fX0se2tleToicGFyc2VTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy54cmVmLnNldFN0YXJ0WFJlZih0aGlzLnN0YXJ0WFJlZil9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXMsKDAsYS5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX19LHtrZXk6Il9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuISFBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChmdW5jdGlvbihlKXtpZighKChlPXQueHJlZi5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLmhhcygiS2lkcyIpKXJldHVybisrcj4xMD8oKDAsYS53YXJuKSgiX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXM6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHJlYWNoZWQiKSwhMSk6dC5faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlLmdldCgiS2lkcyIpLHIpO3ZhciBuPSgwLG8uaXNOYW1lKShlLmdldCgiRlQiKSwiU2lnIiksaT1lLmdldCgiUmVjdCIpLHM9QXJyYXkuaXNBcnJheShpKSYmaS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfSkpO3JldHVybiBuJiZzfSkpfX0se2tleToiX3hmYVN0cmVhbXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiWEZBIikscj17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpcmV0dXJuIHJbInhkcDp4ZHAiXT10LHI7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKz0yKXt2YXIgaTtpZihpPTA9PT1uPyJ4ZHA6eGRwIjpuPT09YS0yPyIveGRwOnhkcCI6dFtuXSxyLmhhc093blByb3BlcnR5KGkpKXt2YXIgbz10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W24rMV0pO28gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHkmJihyW2ldPW8pfX1yZXR1cm4gcn19LHtrZXk6InhmYURhdGFzZXRzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94ZmFTdHJlYW1zO2lmKCFlKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCk7Zm9yKHZhciB0PTAscj1bImRhdGFzZXRzIiwieGRwOnhkcCJdO3Q8ci5sZW5ndGg7dCsrKXt2YXIgbj1yW3RdLGk9ZVtuXTtpZihpKXRyeXt2YXIgbz17W25dOigwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShpLmdldFN0cmluZygpKX07cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixuZXcgaC5EYXRhc2V0UmVhZGVyKG8pKX1jYXRjaChlKXsoMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTticmVha319cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixudWxsKX19LHtrZXk6InhmYURhdGEiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj0wLG49T2JqZWN0LmVudHJpZXMoZSk7cjxuLmxlbmd0aDtyKyspe3ZhciBpPU8obltyXSwyKSxvPWlbMF0scz1pWzFdO2lmKHMpdHJ5e3Rbb109KDAsYS5zdHJpbmdUb1VURjhTdHJpbmcpKHMuZ2V0U3RyaW5nKCkpfWNhdGNoKGUpe3JldHVybigwLGEud2FybikoIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLiIpLG51bGx9fXJldHVybiB0fX0se2tleToieGZhRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbmFibGVYZmEmJnRoaXMuY2F0YWxvZy5uZWVkc1JlbmRlcmluZyYmdGhpcy5mb3JtSW5mby5oYXNYZmEmJiF0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtJiYoZT10aGlzLnhmYURhdGEpLCgwLGEuc2hhZG93KSh0aGlzLCJ4ZmFGYWN0b3J5IixlP25ldyBrLlhGQUZhY3RvcnkoZSk6bnVsbCl9fSx7a2V5OiJpc1B1cmVYZmEiLGdldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy54ZmFGYWN0b3J5JiZ0aGlzLnhmYUZhY3RvcnkuaXNWYWxpZCgpfX0se2tleToiaHRtbEZvclhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3RvcnkuZ2V0UGFnZXMoKTpudWxsfX0se2tleToibG9hZFhmYUltYWdlcyIsdmFsdWU6KFA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixhLGksbyxzLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInhmYUltYWdlcyIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIHI9dC5nZXRLZXlzKCksbj1uZXcgZy5PYmplY3RMb2FkZXIodCxyLHRoaXMueHJlZiksZS5uZXh0PTksbi5sb2FkKCk7Y2FzZSA5OmE9bmV3IE1hcCxpPUYocik7dHJ5e2ZvcihpLnMoKTshKG89aS5uKCkpLmRvbmU7KXM9by52YWx1ZSwodT10LmdldChzKSlpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmYS5zZXQocyx1LmdldEJ5dGVzKCkpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMoYSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRYZmFGb250cyIsdmFsdWU6KEM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBuLGMsdSxsLGYsaCxkLHAsbSxiLHcsayxTLHgsQyxQLFQsSSxFLGosTSxfLEwsUixOLEQsQixVLCQsWCxILHEsRyx6O3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpO2Nhc2UgMjppZihuPWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIGUubmV4dD03LG4uZ2V0QXN5bmMoIkRSIik7Y2FzZSA3OmlmKChjPWUuc2VudClpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpyZXR1cm4gdT1uZXcgZy5PYmplY3RMb2FkZXIoYyxbIkZvbnQiXSx0aGlzLnhyZWYpLGUubmV4dD0xMyx1LmxvYWQoKTtjYXNlIDEzOmlmKChsPWMuZ2V0KCJGb250IikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTY6KGY9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zKSkudXNlU3lzdGVtRm9udHM9ITEsaD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnQscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmZ9KSxkPW5ldyB2Lk9wZXJhdG9yTGlzdCxwPVtdLGUudDA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbT17Z2V0IGZvbnQoKXtyZXR1cm4gcC5hdCgtMSl9LHNldCBmb250KGUpe3AucHVzaChlKX0sY2xvbmU6ZS50MH0sYj1uZXcgTWFwLGwuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtiLnNldChlLHQpfSkpLHc9W10saz1GKGIpLGUucHJldj0yNyxrLnMoKTtjYXNlIDI5OmlmKChTPWsubigpKS5kb25lKXtlLm5leHQ9NDQ7YnJlYWt9aWYoeD1PKFMudmFsdWUsMiksQz14WzBdLFA9eFsxXSwoVD1QLmdldCgiRm9udERlc2NyaXB0b3IiKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTM0O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDQyKTtjYXNlIDM0OmlmKEk9KEk9VC5nZXQoIkZvbnRGYW1pbHkiKSkucmVwbGFjZSgvWyBdKyhcZCkvZywiJDEiKSxFPVQuZ2V0KCJGb250V2VpZ2h0Iiksaj0tVC5nZXQoIkl0YWxpY0FuZ2xlIiksTT17Zm9udEZhbWlseTpJLGZvbnRXZWlnaHQ6RSxpdGFsaWNBbmdsZTpqfSwoMCxpLnZhbGlkYXRlQ1NTRm9udCkoTSkpe2UubmV4dD00MTticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw0Mik7Y2FzZSA0MTp3LnB1c2goaC5oYW5kbGVTZXRGb250KGMsW28uTmFtZS5nZXQoQyksMV0sbnVsbCxkLHIsbSxudWxsLE0pLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkWGZhRm9udHM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKTtjYXNlIDQyOmUubmV4dD0yOTticmVhaztjYXNlIDQ0OmUubmV4dD00OTticmVhaztjYXNlIDQ2OmUucHJldj00NixlLnQxPWUuY2F0Y2goMjcpLGsuZShlLnQxKTtjYXNlIDQ5OnJldHVybiBlLnByZXY9NDksay5mKCksZS5maW5pc2goNDkpO2Nhc2UgNTI6cmV0dXJuIGUubmV4dD01NCxQcm9taXNlLmFsbCh3KTtjYXNlIDU0OmlmKF89dGhpcy54ZmFGYWN0b3J5LnNldEZvbnRzKHApKXtlLm5leHQ9NTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU3OmYuaWdub3JlRXJyb3JzPSEwLHcubGVuZ3RoPTAscC5sZW5ndGg9MCxMPW5ldyBTZXQsUj1GKF8pO3RyeXtmb3IoUi5zKCk7IShOPVIubigpKS5kb25lOylEPU4udmFsdWUsKDAscy5nZXRYZmFGb250TmFtZSkoIiIuY29uY2F0KEQsIi1SZWd1bGFyIikpfHxMLmFkZChEKX1jYXRjaChlKXtSLmUoZSl9ZmluYWxseXtSLmYoKX1MLnNpemUmJl8ucHVzaCgiUGRmSlMtRmFsbGJhY2siKSxCPUYoXyksZS5wcmV2PTY1LEIucygpO2Nhc2UgNjc6aWYoKFU9Qi5uKCkpLmRvbmUpe2UubmV4dD03NDticmVha31pZigkPVUudmFsdWUsIUwuaGFzKCQpKXtlLm5leHQ9NzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJjb250aW51ZSIsNzIpO2Nhc2UgNzE6Zm9yKFg9MCxIPVt7bmFtZToiUmVndWxhciIsZm9udFdlaWdodDo0MDAsaXRhbGljQW5nbGU6MH0se25hbWU6IkJvbGQiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJJdGFsaWMiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjEyfSx7bmFtZToiQm9sZEl0YWxpYyIsZm9udFdlaWdodDo3MDAsaXRhbGljQW5nbGU6MTJ9XTtYPEgubGVuZ3RoO1grKylxPUhbWF0sRz0iIi5jb25jYXQoJCwiLSIpLmNvbmNhdChxLm5hbWUpLHo9KDAscy5nZXRYZmFGb250RGljdCkoRyksdy5wdXNoKGguaGFuZGxlU2V0Rm9udChjLFtvLk5hbWUuZ2V0KEcpLDFdLG51bGwsZCxyLG0seix7Zm9udEZhbWlseTokLGZvbnRXZWlnaHQ6cS5mb250V2VpZ2h0LGl0YWxpY0FuZ2xlOnEuaXRhbGljQW5nbGV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS53YXJuKSgnbG9hZFhmYUZvbnRzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSk7Y2FzZSA3MjplLm5leHQ9Njc7YnJlYWs7Y2FzZSA3NDplLm5leHQ9Nzk7YnJlYWs7Y2FzZSA3NjplLnByZXY9NzYsZS50Mj1lLmNhdGNoKDY1KSxCLmUoZS50Mik7Y2FzZSA3OTpyZXR1cm4gZS5wcmV2PTc5LEIuZigpLGUuZmluaXNoKDc5KTtjYXNlIDgyOnJldHVybiBlLm5leHQ9ODQsUHJvbWlzZS5hbGwodyk7Y2FzZSA4NDp0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMocCxMKTtjYXNlIDg1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMjcsNDYsNDksNTJdLFs2NSw3Niw3OSw4Ml1dKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gQy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplWGZhRGF0YSIsdmFsdWU6KHc9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEodCk6bnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InZlcnNpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbnx8dGhpcy5fdmVyc2lvbn19LHtrZXk6ImZvcm1JbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT17aGFzRmllbGRzOiExLGhhc0Fjcm9Gb3JtOiExLGhhc1hmYTohMSxoYXNTaWduYXR1cmVzOiExfSx0PXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighdClyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZm9ybUluZm8iLGUpO3RyeXt2YXIgcj10LmdldCgiRmllbGRzIiksbj1BcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aD4wO2UuaGFzRmllbGRzPW47dmFyIG89dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkobykmJm8ubGVuZ3RoPjB8fG8gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHk7dmFyIHM9ISEoMSZ0LmdldCgiU2lnRmxhZ3MiKSksdT1zJiZ0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKHIpO2UuaGFzQWNyb0Zvcm09biYmIXUsZS5oYXNTaWduYXR1cmVzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCdDYW5ub3QgZmV0Y2ggZm9ybSBpbmZvcm1hdGlvbjogIicuY29uY2F0KGUsJyIuJykpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSl9fSx7a2V5OiJkb2N1bWVudEluZm8iLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9e1BERkZvcm1hdFZlcnNpb246dGhpcy52ZXJzaW9uLExhbmd1YWdlOnRoaXMuY2F0YWxvZy5sYW5nLEVuY3J5cHRGaWx0ZXJOYW1lOnRoaXMueHJlZi5lbmNyeXB0P3RoaXMueHJlZi5lbmNyeXB0LmZpbHRlck5hbWU6bnVsbCxJc0xpbmVhcml6ZWQ6ISF0aGlzLmxpbmVhcml6YXRpb24sSXNBY3JvRm9ybVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSxJc1hGQVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNYZmEsSXNDb2xsZWN0aW9uUHJlc2VudDohIXRoaXMuY2F0YWxvZy5jb2xsZWN0aW9uLElzU2lnbmF0dXJlc1ByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNTaWduYXR1cmVzfTt0cnl7ZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkluZm8iKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoIlRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZG9jdW1lbnRJbmZvIix0KTt2YXIgcixuPUYoZS5nZXRLZXlzKCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIHM9ci52YWx1ZSxjPWUuZ2V0KHMpO3N3aXRjaChzKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2YgYyl7dFtzXT0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKGMgaW5zdGFuY2VvZiBvLk5hbWUpe3Rbc109Yztjb250aW51ZX1icmVhaztkZWZhdWx0OnZhciB1PXZvaWQgMDtzd2l0Y2goeChjKSl7Y2FzZSJzdHJpbmciOnU9KDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6dT1jO2JyZWFrO2RlZmF1bHQ6YyBpbnN0YW5jZW9mIG8uTmFtZSYmKHU9Yyl9aWYodm9pZCAwPT09dSl7KDAsYS53YXJuKSgnQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSk7Y29udGludWV9dC5DdXN0b218fCh0LkN1c3RvbT1PYmplY3QuY3JlYXRlKG51bGwpKSx0LkN1c3RvbVtzXT11O2NvbnRpbnVlfSgwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLHQpfX0se2tleToiZmluZ2VycHJpbnRzIixnZXQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gdChlKXt2YXIgdCxyPVtdLG49RihlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWUudG9TdHJpbmcoMTYpO3IucHVzaChhLnBhZFN0YXJ0KDIsIjAiKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByLmpvaW4oIiIpfXZhciByLG4saT10aGlzLnhyZWYudHJhaWxlci5nZXQoIklEIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSkmJmUoaVswXSk/KHI9KDAsYS5zdHJpbmdUb0J5dGVzKShpWzBdKSxpWzFdIT09aVswXSYmZShpWzFdKSYmKG49KDAsYS5zdHJpbmdUb0J5dGVzKShpWzFdKSkpOnI9KDAsdS5jYWxjdWxhdGVNRDUpKHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLDEwMjQpLDAsMTAyNCksKDAsYS5zaGFkb3cpKHRoaXMsImZpbmdlcnByaW50cyIsW3Qociksbj90KG4pOm51bGxdKX19LHtrZXk6Il9nZXRMaW5lYXJpemF0aW9uUGFnZSIsdmFsdWU6KGI9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGkscyxjLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gcj10aGlzLmNhdGFsb2csbj10aGlzLmxpbmVhcml6YXRpb24saT10aGlzLnhyZWYscz1vLlJlZi5nZXQobi5vYmplY3ROdW1iZXJGaXJzdCwwKSxlLnByZXY9MixlLm5leHQ9NSxpLmZldGNoQXN5bmMocyk7Y2FzZSA1OmlmKCEoKGM9ZS5zZW50KWluc3RhbmNlb2Ygby5EaWN0KSl7ZS5uZXh0PTE2O2JyZWFrfWlmKCEoKHU9Yy5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTEyO2JyZWFrfXJldHVybiBlLm5leHQ9MTEsaS5mZXRjaEFzeW5jKHUpO2Nhc2UgMTE6dT1lLnNlbnQ7Y2FzZSAxMjppZighKDAsby5pc05hbWUpKHUsIlBhZ2UiKSYmKGMuaGFzKCJUeXBlIil8fGMuaGFzKCJLaWRzIikpKXtlLm5leHQ9MTY7YnJlYWt9cmV0dXJuIHIucGFnZUtpZHNDb3VudENhY2hlLmhhcyhzKXx8ci5wYWdlS2lkc0NvdW50Q2FjaGUucHV0KHMsMSksci5wYWdlSW5kZXhDYWNoZS5oYXMocyl8fHIucGFnZUluZGV4Q2FjaGUucHV0KHMsMCksZS5hYnJ1cHQoInJldHVybiIsW2Msc10pO2Nhc2UgMTY6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlRoZSBMaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lc24ndCBwb2ludCB0byBhIHZhbGlkIFBhZ2UgZGljdGlvbmFyeS4iKTtjYXNlIDE5OnJldHVybiBlLnByZXY9MTksZS50MD1lLmNhdGNoKDIpLCgwLGEud2FybikoJ19nZXRMaW5lYXJpemF0aW9uUGFnZTogIicuY29uY2F0KGUudDAubWVzc2FnZSwnIi4nKSksZS5hYnJ1cHQoInJldHVybiIsci5nZXRQYWdlRGljdCh0KSk7Y2FzZSAyMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIsMTldXSl9KSkpLGZ1bmN0aW9uKGUpe3JldHVybiBiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5fcGFnZVByb21pc2VzLmdldChlKTtpZihyKXJldHVybiByO3ZhciBuLGE9dGhpcy5jYXRhbG9nLGk9dGhpcy5saW5lYXJpemF0aW9uLHM9dGhpcy54ZmFGYWN0b3J5O3JldHVybiBuPShuPXM/UHJvbWlzZS5yZXNvbHZlKFtvLkRpY3QuZW1wdHksbnVsbF0pOmkmJmkucGFnZUZpcnN0PT09ZT90aGlzLl9nZXRMaW5lYXJpemF0aW9uUGFnZShlKTphLmdldFBhZ2VEaWN0KGUpKS50aGVuKChmdW5jdGlvbihyKXt2YXIgbj1PKHIsMiksaT1uWzBdLG89blsxXTtyZXR1cm4gbmV3IEQoe3BkZk1hbmFnZXI6dC5wZGZNYW5hZ2VyLHhyZWY6dC54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OmkscmVmOm8sZ2xvYmFsSWRGYWN0b3J5OnQuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6YS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTphLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmEuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6YS5nbG9iYWxJbWFnZUNhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6YS5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6c30pfSkpLHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxuKSxufX0se2tleToiY2hlY2tGaXJzdFBhZ2UiLHZhbHVlOihtPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHM7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighKHQubGVuZ3RoPjAmJnZvaWQgMCE9PXRbMF0mJnRbMF0pKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpyZXR1cm4gZS5wcmV2PTMsZS5uZXh0PTYsdGhpcy5nZXRQYWdlKDApO2Nhc2UgNjplLm5leHQ9MTU7YnJlYWs7Y2FzZSA4OmlmKGUucHJldj04LGUudDA9ZS5jYXRjaCgzKSwhKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbikpe2UubmV4dD0xNTticmVha31yZXR1cm4gdGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZSgwKSxlLm5leHQ9MTQsdGhpcy5jbGVhbnVwKCk7Y2FzZSAxNDp0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzMsOF1dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2hlY2tMYXN0UGFnZSIsdmFsdWU6KHA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixvLHMsYyx1LGwsZixoLGQscCxnLHY9YXJndW1lbnRzO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9di5sZW5ndGg+MCYmdm9pZCAwIT09dlswXSYmdlswXSxyPXRoaXMuY2F0YWxvZyxuPXRoaXMucGRmTWFuYWdlcixyLnNldEFjdHVhbE51bVBhZ2VzKCksZS5wcmV2PTMsZS5uZXh0PTYsUHJvbWlzZS5hbGwoW24uZW5zdXJlRG9jKCJ4ZmFGYWN0b3J5Iiksbi5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxuLmVuc3VyZUNhdGFsb2coIm51bVBhZ2VzIildKTtjYXNlIDY6aWYoIXRoaXMueGZhRmFjdG9yeSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpvPXRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6ci5udW1QYWdlcztjYXNlIDExOmlmKE51bWJlci5pc0ludGVnZXIobykpe2UubmV4dD0xNTticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpcyBub3QgYW4gaW50ZWdlci4iKTtjYXNlIDE1OmlmKCEobzw9MSkpe2UubmV4dD0xNzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTc6cmV0dXJuIGUubmV4dD0xOSx0aGlzLmdldFBhZ2Uoby0xKTtjYXNlIDE5OmUubmV4dD00NDticmVhaztjYXNlIDIxOnJldHVybiBlLnByZXY9MjEsZS50MD1lLmNhdGNoKDMpLHRoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUoby0xKSxlLm5leHQ9MjYsdGhpcy5jbGVhbnVwKCk7Y2FzZSAyNjppZighKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbil8fHQpe2UubmV4dD0yODticmVha310aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAyODpyZXR1cm4oMCxhLndhcm4pKCJjaGVja0xhc3RQYWdlIC0gaW52YWxpZCAvUGFnZXMgdHJlZSAvQ291bnQ6ICIuY29uY2F0KG8sIi4iKSksZS5wcmV2PTI5LGUubmV4dD0zMixyLmdldEFsbFBhZ2VEaWN0cyh0KTtjYXNlIDMyOnM9ZS5zZW50LGUubmV4dD00MTticmVhaztjYXNlIDM1OmlmKGUucHJldj0zNSxlLnQxPWUuY2F0Y2goMjkpLCEoZS50MSBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uKXx8dCl7ZS5uZXh0PTM5O2JyZWFrfXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbjtjYXNlIDM5OnJldHVybiByLnNldEFjdHVhbE51bVBhZ2VzKDEpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQxOmM9RihzKTt0cnl7Zm9yKGMucygpOyEodT1jLm4oKSkuZG9uZTspbD1PKHUudmFsdWUsMiksZj1sWzBdLGg9TyhsWzFdLDIpLGQ9aFswXSxwPWhbMV0sZz12b2lkIDAsZCBpbnN0YW5jZW9mIEVycm9yPyhnPVByb21pc2UucmVqZWN0KGQpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSk6Zz1Qcm9taXNlLnJlc29sdmUobmV3IEQoe3BkZk1hbmFnZXI6bix4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZixwYWdlRGljdDpkLHJlZjpwLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnIuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6ci5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTpyLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnIuZ2xvYmFsSW1hZ2VDYWNoZSxub25CbGVuZE1vZGVzU2V0OnIubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5Om51bGx9KSksdGhpcy5fcGFnZVByb21pc2VzLnNldChmLGcpfWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXIuc2V0QWN0dWFsTnVtUGFnZXMocy5zaXplKTtjYXNlIDQ0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMywyMV0sWzI5LDM1XV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soZSx0KX19LHtrZXk6ImNsZWFudXAiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyPWFyZ3VtZW50cztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXIubGVuZ3RoPjAmJnZvaWQgMCE9PXJbMF0mJnJbMF0sZS5hYnJ1cHQoInJldHVybiIsdGhpcy5jYXRhbG9nP3RoaXMuY2F0YWxvZy5jbGVhbnVwKHQpOigwLGYuY2xlYXJHbG9iYWxDYWNoZXMpKCkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9jb2xsZWN0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy54cmVmLmZldGNoSWZSZWYodCk7aWYoaS5oYXMoIlQiKSl7dmFyIG89KDAsYS5zdHJpbmdUb1BERlN0cmluZykoaS5nZXQoIlQiKSk7ZT0iIj09PWU/bzoiIi5jb25jYXQoZSwiLiIpLmNvbmNhdChvKX1pZihyLmhhcyhlKXx8ci5zZXQoZSxbXSksci5nZXQoZSkucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsdCx0aGlzLnBkZk1hbmFnZXIsdGhpcy5fbG9jYWxJZEZhY3RvcnksITApLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmdldEZpZWxkT2JqZWN0KCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybigwLGEud2FybikoJ19jb2xsZWN0RmllbGRPYmplY3RzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSksaS5oYXMoIktpZHMiKSl7dmFyIHMsYz1GKGkuZ2V0KCJLaWRzIikpO3RyeXtmb3IoYy5zKCk7IShzPWMubigpKS5kb25lOyl7dmFyIHU9cy52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKGUsdSxyKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19LHtrZXk6ImZpZWxkT2JqZWN0cyIsZ2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmaWVsZE9iamVjdHMiLFByb21pc2UucmVzb2x2ZShudWxsKSk7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9bmV3IE1hcCxuPUYodGhpcy5jYXRhbG9nLmFjcm9Gb3JtLmdldCgiRmllbGRzIikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKCIiLGkscil9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBvLHM9W10sYz1GKHIpO3RyeXt2YXIgdT1mdW5jdGlvbigpe3ZhciBlPU8oby52YWx1ZSwyKSxyPWVbMF0sbj1lWzFdO3MucHVzaChQcm9taXNlLmFsbChuKS50aGVuKChmdW5jdGlvbihlKXsoZT1lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSkpKS5sZW5ndGg+MCYmKHRbcl09ZSl9KSkpfTtmb3IoYy5zKCk7IShvPWMubigpKS5kb25lOyl1KCl9Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5hbGwocykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoIl9wYXJzZUhhc0pTQWN0aW9ucyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJoYXNKU0FjdGlvbnMiLGUpfX0se2tleToiX3BhcnNlSGFzSlNBY3Rpb25zIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuLGE7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKSx0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKV0pO2Nhc2UgMjppZih0PWUuc2VudCxyPU8odCwyKSxuPXJbMF0sYT1yWzFdLCFuKXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsITApO2Nhc2UgODppZighYSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixPYmplY3QudmFsdWVzKGEpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZS5hY3Rpb25zfSkpfSkpKTtjYXNlIDEwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIiwhMSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbGN1bGF0aW9uT3JkZXJJZHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZXx8IWUuaGFzKCJDTyIpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgdD1lLmdldCgiQ08iKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgcixuPVtdLGk9Rih0KTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7cyBpbnN0YW5jZW9mIG8uUmVmJiZuLnB1c2gocy50b1N0cmluZygpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIDA9PT1uLmxlbmd0aD8oMCxhLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk6KDAsYS5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG4pfX1dKSxlfSgpO3QuUERGRG9jdW1lbnQ9SH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvcHVwQW5ub3RhdGlvbj10Lk1hcmt1cEFubm90YXRpb249dC5Bbm5vdGF0aW9uRmFjdG9yeT10LkFubm90YXRpb25Cb3JkZXJTdHlsZT10LkFubm90YXRpb249dm9pZCAwLHQuZ2V0UXVhZFBvaW50cz1EO3ZhciBuPXIoMiksYT1yKDEzNSksaT1yKDE0Miksbz1yKDEzNCkscz1yKDE5NCksYz1yKDEzNiksdT1yKDE4OSksbD1yKDE5OCksZj1yKDE0MyksaD1yKDIwMSksZD1yKDIwNCkscD1yKDE5MSksZz1yKDEzOSksdj1yKDIwNSk7ZnVuY3Rpb24geSgpe3JldHVybiB5PSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9eChlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LHkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG0oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYihlLHQpfWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gYj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGIoZSx0KX1mdW5jdGlvbiB3KGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPXgoZSk7aWYodCl7dmFyIGE9eCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gayh0aGlzLHIpfX1mdW5jdGlvbiBrKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Tyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gUyhlKX1mdW5jdGlvbiBTKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiB4KGUpe3JldHVybiB4PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSx4KGUpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9SShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gQygpe0M9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09TyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIHgoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gRihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7RihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7RihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8SShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gRShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0UoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEUoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBqKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gTShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1PKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09TyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PU8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIF8oZSx0LHIpe3JldHVybiB0JiZNKGUucHJvdG90eXBlLHQpLHImJk0oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2oodGhpcyxlKX12YXIgdCxyLGk7cmV0dXJuIF8oZSxudWxsLFt7a2V5OiJjcmVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9dGhpcztyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxyLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxyLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksci5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksYT90aGlzLl9nZXRQYWdlSW5kZXgoZSx0LHIpOi0xXSkudGhlbigoZnVuY3Rpb24obyl7dmFyIHM9VChvLDUpLGM9c1swXSx1PShzWzFdLHNbMl0pLGw9c1szXSxmPXNbNF07cmV0dXJuIHIuZW5zdXJlKGksIl9jcmVhdGUiLFtlLHQscixuLGMsdSxsLGEsZl0pfSkpfX0se2tleToiX2NyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06bnVsbCx1PWFyZ3VtZW50cy5sZW5ndGg+Nj9hcmd1bWVudHNbNl06dm9pZCAwLGw9YXJndW1lbnRzLmxlbmd0aD43P2FyZ3VtZW50c1s3XTp2b2lkIDAsZj1hcmd1bWVudHMubGVuZ3RoPjgmJnZvaWQgMCE9PWFyZ3VtZW50c1s4XT9hcmd1bWVudHNbOF06LTEsaD1lLmZldGNoSWZSZWYodCk7aWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQ9dCBpbnN0YW5jZW9mIG8uUmVmP3QudG9TdHJpbmcoKToiYW5ub3RfIi5jb25jYXQoaS5jcmVhdGVPYmpJZCgpKSxwPWguZ2V0KCJTdWJ0eXBlIik7cD1wIGluc3RhbmNlb2Ygby5OYW1lP3AubmFtZTpudWxsO3ZhciBnPXMgaW5zdGFuY2VvZiBvLkRpY3Q/czpvLkRpY3QuZW1wdHksdj17eHJlZjplLHJlZjp0LGRpY3Q6aCxzdWJ0eXBlOnAsaWQ6ZCxwZGZNYW5hZ2VyOnIsYWNyb0Zvcm06ZyxhdHRhY2htZW50czpjLHhmYURhdGFzZXRzOnUsY29sbGVjdEZpZWxkczpsLG5lZWRBcHBlYXJhbmNlczohbCYmITA9PT1nLmdldCgiTmVlZEFwcGVhcmFuY2VzIikscGFnZUluZGV4OmYsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6bi5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCYmci5ldmFsdWF0b3JPcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfTtzd2l0Y2gocCl7Y2FzZSJMaW5rIjpyZXR1cm4gbmV3IFkodik7Y2FzZSJUZXh0IjpyZXR1cm4gbmV3IFYodik7Y2FzZSJXaWRnZXQiOnZhciB5PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6aCxrZXk6IkZUIn0pO3N3aXRjaCh5PXkgaW5zdGFuY2VvZiBvLk5hbWU/eS5uYW1lOm51bGwpe2Nhc2UiVHgiOnJldHVybiBuZXcgcSh2KTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBHKHYpO2Nhc2UiQ2giOnJldHVybiBuZXcgeih2KTtjYXNlIlNpZyI6cmV0dXJuIG5ldyBXKHYpfXJldHVybigwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgd2lkZ2V0IGZpZWxkIHR5cGUgIicuY29uY2F0KHksJyIsICcpKyJmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLiIpLG5ldyBIKHYpO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgSyh2KTtjYXNlIkZyZWVUZXh0IjpyZXR1cm4gbmV3IEoodik7Y2FzZSJMaW5lIjpyZXR1cm4gbmV3IFoodik7Y2FzZSJTcXVhcmUiOnJldHVybiBuZXcgUSh2KTtjYXNlIkNpcmNsZSI6cmV0dXJuIG5ldyBlZSh2KTtjYXNlIlBvbHlMaW5lIjpyZXR1cm4gbmV3IHRlKHYpO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG5ldyByZSh2KTtjYXNlIkNhcmV0IjpyZXR1cm4gbmV3IG5lKHYpO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IGFlKHYpO2Nhc2UiSGlnaGxpZ2h0IjpyZXR1cm4gbmV3IGllKHYpO2Nhc2UiVW5kZXJsaW5lIjpyZXR1cm4gbmV3IG9lKHYpO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgc2Uodik7Y2FzZSJTdHJpa2VPdXQiOnJldHVybiBuZXcgY2Uodik7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyB1ZSh2KTtjYXNlIkZpbGVBdHRhY2htZW50IjpyZXR1cm4gbmV3IGxlKHYpO2RlZmF1bHQ6cmV0dXJuIGx8fChwPygwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICInLmNvbmNhdChwLCciLCAnKSsiZmFsbGluZyBiYWNrIHRvIGJhc2UgYW5ub3RhdGlvbi4iKTooMCxuLndhcm4pKCJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLiIpKSxuZXcgVSh2KX19fX0se2tleToiX2dldFBhZ2VJbmRleCIsdmFsdWU6KGk9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGkscyxjO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUubmV4dD0zLHQuZmV0Y2hJZlJlZkFzeW5jKHIpO2Nhc2UgMzppZigoaT1lLnNlbnQpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSA2OmlmKChzPWkuZ2V0UmF3KCJQIikpaW5zdGFuY2VvZiBvLlJlZil7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLC0xKTtjYXNlIDk6cmV0dXJuIGUubmV4dD0xMSxhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3NdKTtjYXNlIDExOnJldHVybiBjPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE1OnJldHVybiBlLnByZXY9MTUsZS50MD1lLmNhdGNoKDApLCgwLG4ud2FybikoJ19nZXRQYWdlSW5kZXg6ICInLmNvbmNhdChlLnQwLCciLicpKSxlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzAsMTVdXSl9KSkpLGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZU5ld0Fubm90YXRpb25zIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhKXt2YXIgaSxjLHUsbCxmLGgsZCxwLGc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppPXQueHJlZix1PVtdLGw9W10sZj1BKGEpLGUucHJldj00LGYucygpO2Nhc2UgNjppZigoaD1mLm4oKSkuZG9uZSl7ZS5uZXh0PTE3O2JyZWFrfWQ9aC52YWx1ZSxlLnQwPWQuYW5ub3RhdGlvblR5cGUsZS5uZXh0PWUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUPzExOmUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8xNDoxNTticmVhaztjYXNlIDExOnJldHVybiBjfHwoKHA9bmV3IG8uRGljdChpKSkuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiSGVsdmV0aWNhIikpLHAuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGb250IikpLHAuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJUeXBlMSIpKSxwLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSxnPVtdLGM9aS5nZXROZXdUZW1wb3JhcnlSZWYoKSwoMCxzLndyaXRlT2JqZWN0KShjLHAsZyxudWxsKSx1LnB1c2goe3JlZjpjLGRhdGE6Zy5qb2luKCIiKX0pKSxsLnB1c2goSi5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1LHtldmFsdWF0b3I6dCx0YXNrOnIsYmFzZUZvbnRSZWY6Y30pKSxlLmFicnVwdCgiYnJlYWsiLDE1KTtjYXNlIDE0OmwucHVzaChhZS5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1KSk7Y2FzZSAxNTplLm5leHQ9NjticmVhaztjYXNlIDE3OmUubmV4dD0yMjticmVhaztjYXNlIDE5OmUucHJldj0xOSxlLnQxPWUuY2F0Y2goNCksZi5lKGUudDEpO2Nhc2UgMjI6cmV0dXJuIGUucHJldj0yMixmLmYoKSxlLmZpbmlzaCgyMik7Y2FzZSAyNTpyZXR1cm4gZS5uZXh0PTI3LFByb21pc2UuYWxsKGwpO2Nhc2UgMjc6cmV0dXJuIGUudDI9ZS5zZW50LGUudDM9dSxlLmFicnVwdCgicmV0dXJuIix7YW5ub3RhdGlvbnM6ZS50MixkZXBlbmRlbmNpZXM6ZS50M30pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDE5LDIyLDI1XV0pfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InByaW50TmV3QW5ub3RhdGlvbnMiLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLG8scyxjLHUsbDtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGEpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDI6aT10LnhyZWYsbz1bXSxzPW4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQmJnQub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCxjPUEoYSksZS5wcmV2PTYsYy5zKCk7Y2FzZSA4OmlmKCh1PWMubigpKS5kb25lKXtlLm5leHQ9MTk7YnJlYWt9bD11LnZhbHVlLGUudDA9bC5hbm5vdGF0aW9uVHlwZSxlLm5leHQ9ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ/MTM6ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LPzE1OjE3O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIG8ucHVzaChKLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihpLGwse2V2YWx1YXRvcjp0LHRhc2s6cixpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTU6cmV0dXJuIG8ucHVzaChhZS5jcmVhdGVOZXdQcmludEFubm90YXRpb24oaSxsLHtpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTc6ZS5uZXh0PTg7YnJlYWs7Y2FzZSAxOTplLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTplLnByZXY9MjEsZS50MT1lLmNhdGNoKDYpLGMuZShlLnQxKTtjYXNlIDI0OnJldHVybiBlLnByZXY9MjQsYy5mKCksZS5maW5pc2goMjQpO2Nhc2UgMjc6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UuYWxsKG8pKTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNiwyMSwyNCwyN11dKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGV9KCk7ZnVuY3Rpb24gUihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O3ZhciByPXR8fG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2Nhc2UgMzpyZXR1cm4gZi5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLHIsMCkscjtjYXNlIDQ6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIEFycmF5LmZyb20oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUvMjU1fSkpfWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmdldEFycmF5KCJRdWFkUG9pbnRzIik7aWYoIUFycmF5LmlzQXJyYXkocil8fDA9PT1yLmxlbmd0aHx8ci5sZW5ndGglOD4wKXJldHVybiBudWxsO2Zvcih2YXIgbj1bXSxhPTAsaT1yLmxlbmd0aC84O2E8aTthKyspe2Zvcih2YXIgbz0xLzAscz0tMS8wLGM9MS8wLHU9LTEvMCxsPTgqYSxmPTgqYSs4O2w8ZjtsKz0yKXt2YXIgaD1yW2xdLGQ9cltsKzFdO289TWF0aC5taW4oaCxvKSxzPU1hdGgubWF4KGgscyksYz1NYXRoLm1pbihkLGMpLHU9TWF0aC5tYXgoZCx1KX1pZihudWxsIT09dCYmKG88dFswXXx8cz50WzJdfHxjPHRbMV18fHU+dFszXSkpcmV0dXJuIG51bGw7bi5wdXNoKFt7eDpvLHk6dX0se3g6cyx5OnV9LHt4Om8seTpjfSx7eDpzLHk6Y31dKX1yZXR1cm4gbn1mdW5jdGlvbiBCKGUsdCxyKXt2YXIgYT1UKG4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LHIpLDQpLGk9YVswXSxvPWFbMV0scz1hWzJdLGM9YVszXTtpZihpPT09c3x8bz09PWMpcmV0dXJuWzEsMCwwLDEsZVswXSxlWzFdXTt2YXIgdT0oZVsyXS1lWzBdKS8ocy1pKSxsPShlWzNdLWVbMV0pLyhjLW8pO3JldHVyblt1LDAsMCxsLGVbMF0taSp1LGVbMV0tbypsXX10LkFubm90YXRpb25GYWN0b3J5PUw7dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2oodGhpcyxlKTt2YXIgcj10LmRpY3QsaT10LnhyZWY7dGhpcy5zZXRUaXRsZShyLmdldCgiVCIpKSx0aGlzLnNldENvbnRlbnRzKHIuZ2V0KCJDb250ZW50cyIpKSx0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoci5nZXQoIk0iKSksdGhpcy5zZXRGbGFncyhyLmdldCgiRiIpKSx0aGlzLnNldFJlY3RhbmdsZShyLmdldEFycmF5KCJSZWN0IikpLHRoaXMuc2V0Q29sb3Ioci5nZXRBcnJheSgiQyIpKSx0aGlzLnNldEJvcmRlclN0eWxlKHIpLHRoaXMuc2V0QXBwZWFyYW5jZShyKSx0aGlzLnNldE9wdGlvbmFsQ29udGVudChyKTt2YXIgcz1yLmdldCgiTUsiKTtpZih0aGlzLnNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMocyksdGhpcy5zZXRSb3RhdGlvbihzKSx0aGlzLl9zdHJlYW1zPVtdLHRoaXMuYXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSksdGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOnQuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOnQuc3VidHlwZSxoYXNPd25DYW52YXM6ITF9LHQuY29sbGVjdEZpZWxkcyl7dmFyIGM9ci5nZXQoIktpZHMiKTtpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgdSxsPVtdLGY9QShjKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aCBpbnN0YW5jZW9mIG8uUmVmJiZsLnB1c2goaC50b1N0cmluZygpKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9MCE9PWwubGVuZ3RoJiYodGhpcy5kYXRhLmtpZElkcz1sKX10aGlzLmRhdGEuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSx0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZShyKSx0aGlzLmRhdGEucGFnZUluZGV4PXQucGFnZUluZGV4fXRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPXQuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsdGhpcy5fZmFsbGJhY2tGb250RGljdD1udWxsLHRoaXMuX25lZWRBcHBlYXJhbmNlcz0hMX12YXIgdCxyLHM7cmV0dXJuIF8oZSxbe2tleToiX2hhc0ZsYWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuISEoZSZ0KX19LHtrZXk6Il9pc1ZpZXdhYmxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSYmIXRoaXMuX2hhc0ZsYWcoZSxuLkFubm90YXRpb25GbGFnLk5PVklFVyl9fSx7a2V5OiJfaXNQcmludGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5QUklOVCkmJiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpfX0se2tleToibXVzdEJlVmlld2VkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LmhpZGRlbj8hdC5oaWRkZW46dGhpcy52aWV3YWJsZSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTil9fSx7a2V5OiJtdXN0QmVQcmludGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LnByaW50P3QucHJpbnQ6dGhpcy5wcmludGFibGV9fSx7a2V5OiJ2aWV3YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmKDA9PT10aGlzLmZsYWdzfHx0aGlzLl9pc1ZpZXdhYmxlKHRoaXMuZmxhZ3MpKX19LHtrZXk6InByaW50YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmMCE9PXRoaXMuZmxhZ3MmJnRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpfX0se2tleToiX3BhcnNlU3RyaW5nSGVscGVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0ic3RyaW5nIj09dHlwZW9mIGU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSk6IiI7cmV0dXJue3N0cjp0LGRpcjp0JiYicnRsIj09PSgwLHUuYmlkaSkodCkuZGlyPyJydGwiOiJsdHIifX19LHtrZXk6InNldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmUuZGljdCxrZXk6IkRBIn0pfHxlLmFjcm9Gb3JtLmdldCgiREEiKTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0ic3RyaW5nIj09dHlwZW9mIHQ/dDoiIix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UpfX0se2tleToic2V0VGl0bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3RpdGxlPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0Q29udGVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2NvbnRlbnRzPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0TW9kaWZpY2F0aW9uRGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5tb2RpZmljYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9fSx7a2V5OiJzZXRGbGFncyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mbGFncz1OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjA/ZTowfX0se2tleToiaGFzRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxlKX19LHtrZXk6InNldFJlY3RhbmdsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7QXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoP3RoaXMucmVjdGFuZ2xlPW4uVXRpbC5ub3JtYWxpemVSZWN0KGUpOnRoaXMucmVjdGFuZ2xlPVswLDAsMCwwXX19LHtrZXk6InNldENvbG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNvbG9yPVIoZSl9fSx7a2V5OiJzZXRMaW5lRW5kaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5saW5lRW5kaW5ncz1bIk5vbmUiLCJOb25lIl0sQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoKWZvcih2YXIgdD0wO3Q8Mjt0Kyspe3ZhciByPWVbdF07aWYociBpbnN0YW5jZW9mIG8uTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPXIubmFtZTtjb250aW51ZX0oMCxuLndhcm4pKCJJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICIuY29uY2F0KHIpKX19fSx7a2V5OiJzZXRSb3RhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5yb3RhdGlvbj0wLGUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB0PWUuZ2V0KCJSIil8fDA7TnVtYmVyLmlzSW50ZWdlcih0KSYmMCE9PXQmJigodCU9MzYwKTwwJiYodCs9MzYwKSx0JTkwPT0wJiYodGhpcy5yb3RhdGlvbj10KSl9fX0se2tleToic2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIG8uRGljdD8odGhpcy5ib3JkZXJDb2xvcj1SKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9UihlLmdldEFycmF5KCJCRyIpLG51bGwpKTp0aGlzLmJvcmRlckNvbG9yPXRoaXMuYmFja2dyb3VuZENvbG9yPW51bGx9fSx7a2V5OiJzZXRCb3JkZXJTdHlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5ib3JkZXJTdHlsZT1uZXcgJCxlIGluc3RhbmNlb2Ygby5EaWN0KWlmKGUuaGFzKCJCUyIpKXt2YXIgdD1lLmdldCgiQlMiKSxyPXQuZ2V0KCJUeXBlIik7ciYmISgwLG8uaXNOYW1lKShyLCJCb3JkZXIiKXx8KHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSx0aGlzLnJlY3RhbmdsZSksdGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKSx0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpKX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7dmFyIG49ZS5nZXRBcnJheSgiQm9yZGVyIik7QXJyYXkuaXNBcnJheShuKSYmbi5sZW5ndGg+PTMmJih0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoblswXSksdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhuWzFdKSx0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKG5bMl0sdGhpcy5yZWN0YW5nbGUpLDQ9PT1uLmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoblszXSwhMCkpfWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX19LHtrZXk6InNldEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO3ZhciB0PWUuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSl0aGlzLmFwcGVhcmFuY2U9cjtlbHNlIGlmKHIgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBuPWUuZ2V0KCJBUyIpO24gaW5zdGFuY2VvZiBvLk5hbWUmJnIuaGFzKG4ubmFtZSkmJih0aGlzLmFwcGVhcmFuY2U9ci5nZXQobi5uYW1lKSl9fX19LHtrZXk6InNldE9wdGlvbmFsQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vYz1udWxsO3ZhciB0PWUuZ2V0KCJPQyIpO3QgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi53YXJuKSgic2V0T3B0aW9uYWxDb250ZW50OiBTdXBwb3J0IGZvciAvTmFtZS1lbnRyeSBpcyBub3QgaW1wbGVtZW50ZWQuIik6dCBpbnN0YW5jZW9mIG8uRGljdCYmKHRoaXMub2M9dCl9fSx7a2V5OiJsb2FkUmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LmRpY3QuZ2V0QXN5bmMoIlJlc291cmNlcyIpLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKHQpcmV0dXJuIG5ldyBkLk9iamVjdExvYWRlcih0LGUsdC54cmVmKS5sb2FkKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKX19LHtrZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KHM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLHMpe3ZhciBjLHUsbCxmLGgsZCx2LHksbSxiO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz10aGlzLmRhdGEsdT10aGlzLmFwcGVhcmFuY2UsbD0hISh0aGlzLmRhdGEuaGFzT3duQ2FudmFzJiZhJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSx1KXtlLm5leHQ9ODticmVha31pZihsKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSA2Oih1PW5ldyBnLlN0cmluZ1N0cmVhbSgiIikpLmRpY3Q9bmV3IG8uRGljdDtjYXNlIDg6cmV0dXJuIGY9dS5kaWN0LGUubmV4dD0xMSx0aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJDb2xvclNwYWNlIiwiUGF0dGVybiIsIlNoYWRpbmciLCJYT2JqZWN0IiwiRm9udCJdLHUpO2Nhc2UgMTE6aWYoaD1lLnNlbnQsZD1mLmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSx2PWYuZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLHk9QihjLnJlY3QsZCx2KSxtPW5ldyBwLk9wZXJhdG9yTGlzdCwhdGhpcy5vYyl7ZS5uZXh0PTIwO2JyZWFrfXJldHVybiBlLm5leHQ9MTksdC5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpO2Nhc2UgMTk6Yj1lLnNlbnQ7Y2FzZSAyMDpyZXR1cm4gdm9pZCAwIT09YiYmbS5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixiXSksbS5hZGRPcChuLk9QUy5iZWdpbkFubm90YXRpb24sW2MuaWQsYy5yZWN0LHksdixsXSksZS5uZXh0PTI0LHQuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dSx0YXNrOnIscmVzb3VyY2VzOmgsb3BlcmF0b3JMaXN0Om0sZmFsbGJhY2tGb250RGljdDp0aGlzLl9mYWxsYmFja0ZvbnREaWN0fSk7Y2FzZSAyNDpyZXR1cm4gbS5hZGRPcChuLk9QUy5lbmRBbm5vdGF0aW9uLFtdKSx2b2lkIDAhPT1iJiZtLmFkZE9wKG4uT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pLHRoaXMucmVzZXQoKSxlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om0sc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOmx9KTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LHIsbixhKXtyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZSIsdmFsdWU6KHI9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFzVGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiExfX0se2tleToiZXh0cmFjdFRleHRDb250ZW50Iix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYSxpLG8scztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdLHRoaXMuYXBwZWFyYW5jZSk7Y2FzZSA0OnJldHVybiBhPWUuc2VudCxpPVtdLG89W10scz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1BKGUuaXRlbXMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTtvLnB1c2goYS5zdHIpLGEuaGFzRU9MJiYoaS5wdXNoKG8uam9pbigiIikpLG8ubGVuZ3RoPTApfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fSxlLm5leHQ9MTAsdC5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnRoaXMuYXBwZWFyYW5jZSx0YXNrOnIscmVzb3VyY2VzOmEsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ITAsY29tYmluZVRleHRJdGVtczohMCxzaW5rOnMsdmlld0JveDpufSk7Y2FzZSAxMDp0aGlzLnJlc2V0KCksby5sZW5ndGgmJmkucHVzaChvLmpvaW4oIiIpKSxpLmxlbmd0aD4wJiYodGhpcy5kYXRhLnRleHRDb250ZW50PWkpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEua2lkSWRzP3tpZDp0aGlzLmRhdGEuaWQsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHR5cGU6IiIsa2lkSWRzOnRoaXMuZGF0YS5raWRJZHMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHJvdGF0aW9uOnRoaXMucm90YXRpb259Om51bGx9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PUEodGhpcy5fc3RyZWFtcyk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWUucmVzZXQoKX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX19fSx7a2V5OiJfY29uc3RydWN0RmllbGROYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxuLndhcm4pKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpLCIiO2lmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSk7dmFyIHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpKTt2YXIgcj1lLGE9bmV3IG8uUmVmU2V0O2ZvcihlLm9iaklkJiZhLnB1dChlLm9iaklkKTtyLmhhcygiUGFyZW50IikmJihyPXIuZ2V0KCJQYXJlbnQiKSlpbnN0YW5jZW9mIG8uRGljdCYmKCFyLm9iaklkfHwhYS5oYXMoci5vYmpJZCkpOylyLm9iaklkJiZhLnB1dChyLm9iaklkKSxyLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsbi5zdHJpbmdUb1BERlN0cmluZykoci5nZXQoIlQiKSkpO3JldHVybiB0LmpvaW4oIi4iKX19XSksZX0oKTt0LkFubm90YXRpb249VTt2YXIgJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtqKHRoaXMsZSksdGhpcy53aWR0aD0xLHRoaXMuc3R5bGU9bi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElELHRoaXMuZGFzaEFycmF5PVszXSx0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9MCx0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzPTB9cmV0dXJuIF8oZSxbe2tleToic2V0V2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbMCwwLDAsMF07aWYoZSBpbnN0YW5jZW9mIG8uTmFtZSl0aGlzLndpZHRoPTA7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKGU+MCl7dmFyIHI9KHRbMl0tdFswXSkvMixhPSh0WzNdLXRbMV0pLzI7cj4wJiZhPjAmJihlPnJ8fGU+YSkmJigoMCxuLndhcm4pKCJBbm5vdGF0aW9uQm9yZGVyU3R5bGUuc2V0V2lkdGggLSBpZ25vcmluZyB3aWR0aDogIi5jb25jYXQoZSkpLGU9MSl9dGhpcy53aWR0aD1lfX19LHtrZXk6InNldFN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygby5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiUyI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7YnJlYWs7Y2FzZSJEIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7YnJlYWs7Y2FzZSJCIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO2JyZWFrO2Nhc2UiSSI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ7YnJlYWs7Y2FzZSJVIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkV9fX0se2tleToic2V0RGFzaEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe3ZhciByLG49ITAsYT0hMCxpPUEoZSk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKCEoK3M+PTApKXtuPSExO2JyZWFrfXM+MCYmKGE9ITEpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1uJiYhYT8odGhpcy5kYXNoQXJyYXk9ZSx0JiZ0aGlzLnNldFN0eWxlKG8uTmFtZS5nZXQoIkQiKSkpOnRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfX0se2tleToic2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX19LHtrZXk6InNldFZlcnRpY2FsQ29ybmVyUmFkaXVzIix2YWx1ZTpmdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19XSksZX0oKTt0LkFubm90YXRpb25Cb3JkZXJTdHlsZT0kO3ZhciBYPWZ1bmN0aW9uKGUpe20oaSxlKTt2YXIgdCxyLGE9dyhpKTtmdW5jdGlvbiBpKGUpe3ZhciB0O2oodGhpcyxpKSx0PWEuY2FsbCh0aGlzLGUpO3ZhciByPWUuZGljdDtpZihyLmhhcygiSVJUIikpe3ZhciBzPXIuZ2V0UmF3KCJJUlQiKTt0LmRhdGEuaW5SZXBseVRvPXMgaW5zdGFuY2VvZiBvLlJlZj9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgYz1yLmdldCgiUlQiKTt0LmRhdGEucmVwbHlUeXBlPWMgaW5zdGFuY2VvZiBvLk5hbWU/Yy5uYW1lOm4uQW5ub3RhdGlvblJlcGx5VHlwZS5SRVBMWX1pZih0LmRhdGEucmVwbHlUeXBlPT09bi5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKXt2YXIgdT1yLmdldCgiSVJUIik7dC5zZXRUaXRsZSh1LmdldCgiVCIpKSx0LmRhdGEudGl0bGVPYmo9dC5fdGl0bGUsdC5zZXRDb250ZW50cyh1LmdldCgiQ29udGVudHMiKSksdC5kYXRhLmNvbnRlbnRzT2JqPXQuX2NvbnRlbnRzLHUuaGFzKCJDcmVhdGlvbkRhdGUiKT8odC5zZXRDcmVhdGlvbkRhdGUodS5nZXQoIkNyZWF0aW9uRGF0ZSIpKSx0LmRhdGEuY3JlYXRpb25EYXRlPXQuY3JlYXRpb25EYXRlKTp0LmRhdGEuY3JlYXRpb25EYXRlPW51bGwsdS5oYXMoIk0iKT8odC5zZXRNb2RpZmljYXRpb25EYXRlKHUuZ2V0KCJNIikpLHQuZGF0YS5tb2RpZmljYXRpb25EYXRlPXQubW9kaWZpY2F0aW9uRGF0ZSk6dC5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCx0LmRhdGEuaGFzUG9wdXA9dS5oYXMoIlBvcHVwIiksdS5oYXMoIkMiKT8odC5zZXRDb2xvcih1LmdldEFycmF5KCJDIikpLHQuZGF0YS5jb2xvcj10LmNvbG9yKTp0LmRhdGEuY29sb3I9bnVsbH1lbHNlIHQuZGF0YS50aXRsZU9iaj10Ll90aXRsZSx0LnNldENyZWF0aW9uRGF0ZShyLmdldCgiQ3JlYXRpb25EYXRlIikpLHQuZGF0YS5jcmVhdGlvbkRhdGU9dC5jcmVhdGlvbkRhdGUsdC5kYXRhLmhhc1BvcHVwPXIuaGFzKCJQb3B1cCIpLHIuaGFzKCJDIil8fCh0LmRhdGEuY29sb3I9bnVsbCk7cmV0dXJuIHIuaGFzKCJSQyIpJiYodC5kYXRhLnJpY2hUZXh0PXYuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChyLmdldCgiUkMiKSkpLHR9cmV0dXJuIF8oaSxbe2tleToic2V0Q3JlYXRpb25EYXRlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNyZWF0aW9uRGF0ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsfX0se2tleToiX3NldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmV4dHJhLG49ZS5zdHJva2VDb2xvcixhPWUuZmlsbENvbG9yLGk9ZS5ibGVuZE1vZGUscz1lLnN0cm9rZUFscGhhLGM9ZS5maWxsQWxwaGEsdT1lLnBvaW50c0NhbGxiYWNrLGw9TnVtYmVyLk1BWF9WQUxVRSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUlOX1ZBTFVFLGQ9TnVtYmVyLk1JTl9WQUxVRSxwPVsicSJdO3ImJnAucHVzaChyKSxuJiZwLnB1c2goIiIuY29uY2F0KG5bMF0sIiAiKS5jb25jYXQoblsxXSwiICIpLmNvbmNhdChuWzJdLCIgUkciKSksYSYmcC5wdXNoKCIiLmNvbmNhdChhWzBdLCIgIikuY29uY2F0KGFbMV0sIiAiKS5jb25jYXQoYVsyXSwiIHJnIikpO3ZhciB2PXRoaXMuZGF0YS5xdWFkUG9pbnRzO3Z8fCh2PVtbe3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVsxXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVsxXX1dXSk7dmFyIHksbT1BKHYpO3RyeXtmb3IobS5zKCk7ISh5PW0ubigpKS5kb25lOyl7dmFyIGI9VCh1KHAseS52YWx1ZSksNCksdz1iWzBdLGs9YlsxXSxTPWJbMl0seD1iWzNdO2w9TWF0aC5taW4obCx3KSxoPU1hdGgubWF4KGgsayksZj1NYXRoLm1pbihmLFMpLGQ9TWF0aC5tYXgoZCx4KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cC5wdXNoKCJRIik7dmFyIE89bmV3IG8uRGljdCh0KSxDPW5ldyBvLkRpY3QodCk7Qy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSk7dmFyIEY9bmV3IGcuU3RyaW5nU3RyZWFtKHAuam9pbigiICIpKTtGLmRpY3Q9QyxPLnNldCgiRm0wIixGKTt2YXIgUD1uZXcgby5EaWN0KHQpO2kmJlAuc2V0KCJCTSIsby5OYW1lLmdldChpKSksIm51bWJlciI9PXR5cGVvZiBzJiZQLnNldCgiQ0EiLHMpLCJudW1iZXIiPT10eXBlb2YgYyYmUC5zZXQoImNhIixjKTt2YXIgST1uZXcgby5EaWN0KHQpO0kuc2V0KCJHUzAiLFApO3ZhciBFPW5ldyBvLkRpY3QodCk7RS5zZXQoIkV4dEdTdGF0ZSIsSSksRS5zZXQoIlhPYmplY3QiLE8pO3ZhciBqPW5ldyBvLkRpY3QodCk7ai5zZXQoIlJlc291cmNlcyIsRSk7dmFyIE09dGhpcy5kYXRhLnJlY3Q9W2wsZixoLGRdO2ouc2V0KCJCQm94IixNKSx0aGlzLmFwcGVhcmFuY2U9bmV3IGcuU3RyaW5nU3RyZWFtKCIvR1MwIGdzIC9GbTAgRG8iKSx0aGlzLmFwcGVhcmFuY2UuZGljdD1qLHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UsRil9fV0sW3trZXk6ImNyZWF0ZU5ld0Fubm90YXRpb24iLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4sYSl7dmFyIGksbyxjLHUsbCxmLGg7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gaT10LmdldE5ld1RlbXBvcmFyeVJlZigpLGUubmV4dD0zLHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShyLHQsYSk7Y2FzZSAzOnJldHVybiBvPWUuc2VudCxjPVtdLG8/KGw9dC5nZXROZXdUZW1wb3JhcnlSZWYoKSx1PXRoaXMuY3JlYXRlTmV3RGljdChyLHQse2FwUmVmOmx9KSxmPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGwubnVtLGwuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGwsbyxjLGYpLG4ucHVzaCh7cmVmOmwsZGF0YTpjLmpvaW4oIiIpfSkpOnU9dGhpcy5jcmVhdGVOZXdEaWN0KHIsdCx7fSksYy5sZW5ndGg9MCxoPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGkubnVtLGkuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGksdSxjLGgpLGUuYWJydXB0KCJyZXR1cm4iLHtyZWY6aSxkYXRhOmMuam9pbigiIil9KTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbiIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGEsaTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0ocix0LG4pO2Nhc2UgMjpyZXR1cm4gYT1lLnNlbnQsaT10aGlzLmNyZWF0ZU5ld0RpY3Qocix0LHthcDphfSksZS5hYnJ1cHQoInJldHVybiIsbmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0OmkseHJlZjp0LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOm4uaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR9KSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGl9KFUpO3QuTWFya3VwQW5ub3RhdGlvbj1YO3ZhciBIPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGMsdSxsPXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtqKHRoaXMsZiksdD1sLmNhbGwodGhpcyxlKTt2YXIgcj1lLmRpY3QsaT1lLnhyZWYscz10LmRhdGE7dC5yZWY9ZS5yZWYsdC5fbmVlZEFwcGVhcmFuY2VzPWUubmVlZEFwcGVhcmFuY2VzLHMuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5XSURHRVQsdm9pZCAwPT09cy5maWVsZE5hbWUmJihzLmZpZWxkTmFtZT10Ll9jb25zdHJ1Y3RGaWVsZE5hbWUocikpLHZvaWQgMD09PXMuYWN0aW9ucyYmKHMuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSk7dmFyIGM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpyLGtleToiViIsZ2V0QXJyYXk6ITB9KTtzLmZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKGMpO3ZhciB1PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRWIixnZXRBcnJheTohMH0pO2lmKHMuZGVmYXVsdEZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKHUpLHZvaWQgMD09PWMmJmUueGZhRGF0YXNldHMpe3ZhciBoPXQuX3RpdGxlLnN0cjtoJiYodC5faGFzVmFsdWVGcm9tWEZBPSEwLHMuZmllbGRWYWx1ZT1jPWUueGZhRGF0YXNldHMuZ2V0VmFsdWUoaCkpfXZvaWQgMD09PWMmJm51bGwhPT1zLmRlZmF1bHRGaWVsZFZhbHVlJiYocy5maWVsZFZhbHVlPXMuZGVmYXVsdEZpZWxkVmFsdWUpLHMuYWx0ZXJuYXRpdmVUZXh0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHIuZ2V0KCJUVSIpfHwiIiksdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSxzLmhhc0FwcGVhcmFuY2U9dC5fbmVlZEFwcGVhcmFuY2VzJiZ2b2lkIDAhPT1zLmZpZWxkVmFsdWUmJm51bGwhPT1zLmZpZWxkVmFsdWV8fHMuaGFzQXBwZWFyYW5jZTt2YXIgZD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGVCJ9KTtzLmZpZWxkVHlwZT1kIGluc3RhbmNlb2Ygby5OYW1lP2QubmFtZTpudWxsO3ZhciBwPSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRSIn0pLGc9ZS5hY3JvRm9ybS5nZXQoIkRSIiksdj10LmFwcGVhcmFuY2UmJnQuYXBwZWFyYW5jZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7cmV0dXJuIHQuX2ZpZWxkUmVzb3VyY2VzPXtsb2NhbFJlc291cmNlczpwLGFjcm9Gb3JtUmVzb3VyY2VzOmcsYXBwZWFyYW5jZVJlc291cmNlczp2LG1lcmdlZFJlc291cmNlczpvLkRpY3QubWVyZ2Uoe3hyZWY6aSxkaWN0QXJyYXk6W3AsdixnXSxtZXJnZVN1YkRpY3RzOiEwfSl9LHMuZmllbGRGbGFncz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGZiJ9KSwoIU51bWJlci5pc0ludGVnZXIocy5maWVsZEZsYWdzKXx8cy5maWVsZEZsYWdzPDApJiYocy5maWVsZEZsYWdzPTApLHMucmVhZE9ubHk9dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFQURPTkxZKSxzLnJlcXVpcmVkPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5SRVFVSVJFRCkscy5oaWRkZW49dC5faGFzRmxhZyhzLmFubm90YXRpb25GbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTiksdH1yZXR1cm4gXyhmLFt7a2V5OiJfZGVjb2RlRm9ybVZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSl9KSk6ZSBpbnN0YW5jZW9mIG8uTmFtZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsfX0se2tleToiaGFzRmllbGRGbGFnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX19LHtrZXk6ImdldFJvdGF0aW9uTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lP2UuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHI9dCYmdC5yb3RhdGlvbjtpZih2b2lkIDA9PT1yJiYocj10aGlzLnJvdGF0aW9uKSwwPT09cilyZXR1cm4gbi5JREVOVElUWV9NQVRSSVg7dmFyIGk9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sbz10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXTtyZXR1cm4oMCxhLmdldFJvdGF0aW9uTWF0cml4KShyLGksbyl9fSx7a2V5OiJnZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU/ZS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDAscj10JiZ0LnJvdGF0aW9uO2lmKHZvaWQgMD09PXImJihyPXRoaXMucm90YXRpb24pLCF0aGlzLmJhY2tncm91bmRDb2xvciYmIXRoaXMuYm9yZGVyQ29sb3IpcmV0dXJuIiI7dmFyIG49dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sYT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxvPTA9PT1yfHwxODA9PT1yPyIwIDAgIi5jb25jYXQobiwiICIpLmNvbmNhdChhLCIgcmUiKToiMCAwICIuY29uY2F0KGEsIiAiKS5jb25jYXQobiwiIHJlIikscz0iIjtpZih0aGlzLmJhY2tncm91bmRDb2xvciYmKHM9IiIuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYmFja2dyb3VuZENvbG9yLCEwKSwiICIpLmNvbmNhdChvLCIgZiAiKSksdGhpcy5ib3JkZXJDb2xvcil7dmFyIGM9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MTtzKz0iIi5jb25jYXQoYywiIHcgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYm9yZGVyQ29sb3IsITEpLCIgIikuY29uY2F0KG8sIiBTICIpfXJldHVybiBzfX0se2tleToiZ2V0T3BlcmF0b3JMaXN0Iix2YWx1ZToodT1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhLGksbyl7dmFyIHMsYyx1LGwsaCxkLHY7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighaXx8dGhpcyBpbnN0YW5jZW9mIFcpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om5ldyBwLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITAsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDI6aWYodGhpcy5faGFzVGV4dCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNDpyZXR1cm4gZS5uZXh0PTYsdGhpcy5fZ2V0QXBwZWFyYW5jZSh0LHIsYSxvKTtjYXNlIDY6aWYocz1lLnNlbnQsIXRoaXMuYXBwZWFyYW5jZXx8bnVsbCE9PXMpe2UubmV4dD05O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pKTtjYXNlIDk6aWYoYz1uZXcgcC5PcGVyYXRvckxpc3QsdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UmJm51bGwhPT1zKXtlLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtvcExpc3Q6YyxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDEyOmlmKHU9WzEsMCwwLDEsMCwwXSxsPVswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dLGg9Qih0aGlzLmRhdGEucmVjdCxsLHUpLCF0aGlzLm9jKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xOCx0LnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCk7Y2FzZSAxODpkPWUuc2VudDtjYXNlIDE5OnJldHVybiB2b2lkIDAhPT1kJiZjLmFkZE9wKG4uT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSxjLmFkZE9wKG4uT1BTLmJlZ2luQW5ub3RhdGlvbixbdGhpcy5kYXRhLmlkLHRoaXMuZGF0YS5yZWN0LGgsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSwhMV0pLHY9bmV3IGcuU3RyaW5nU3RyZWFtKHMpLGUubmV4dD0yNCx0LmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnYsdGFzazpyLHJlc291cmNlczp0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsb3BlcmF0b3JMaXN0OmN9KTtjYXNlIDI0OnJldHVybiBjLmFkZE9wKG4uT1BTLmVuZEFubm90YXRpb24sW10pLHZvaWQgMCE9PWQmJmMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSksZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpjLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX0pO2Nhc2UgMjc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscixuLGEpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfZ2V0TUtEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgby5EaWN0KG51bGwpO3JldHVybiBlJiZ0LnNldCgiUiIsZSksdGhpcy5ib3JkZXJDb2xvciYmdC5zZXQoIkJDIixOKHRoaXMuYm9yZGVyQ29sb3IpKSx0aGlzLmJhY2tncm91bmRDb2xvciYmdC5zZXQoIkJHIixOKHRoaXMuYmFja2dyb3VuZENvbG9yKSksdC5zaXplPjA/dDpudWxsfX0se2tleToic2F2ZSIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsaSl7dmFyIGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4LE8sRixQLFQsSSxFLGosTSxfLEwsUj10aGlzO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz1pP2kuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHU9YyYmYy52YWx1ZSxsPWMmJmMucm90YXRpb24sdSE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiZ2b2lkIDAhPT11KXtlLm5leHQ9NzticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkF8fHZvaWQgMCE9PWwpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6dT11fHx0aGlzLmRhdGEuZmllbGRWYWx1ZTtjYXNlIDc6aWYodm9pZCAwIT09bHx8dGhpcy5faGFzVmFsdWVGcm9tWEZBfHwhQXJyYXkuaXNBcnJheSh1KXx8IUFycmF5LmlzQXJyYXkodGhpcy5kYXRhLmZpZWxkVmFsdWUpfHx1Lmxlbmd0aCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aHx8IXUuZXZlcnkoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1SLmRhdGEuZmllbGRWYWx1ZVt0XX0pKSl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgOTppZih2b2lkIDA9PT1sJiYobD10aGlzLnJvdGF0aW9uKSxmPW51bGwsdGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xNCx0aGlzLl9nZXRBcHBlYXJhbmNlKHQscixuLlJlbmRlcmluZ0ludGVudEZsYWcuU0FWRSxpKTtjYXNlIDE0OmlmKG51bGwhPT0oZj1lLnNlbnQpKXtlLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMTc6ZS5uZXh0PTE5O2JyZWFrO2Nhc2UgMTk6aWYoaD0hMSxmJiZmLm5lZWRBcHBlYXJhbmNlcyYmKGg9ITAsZj1udWxsKSxkPXQueHJlZiwocD1kLmZldGNoSWZSZWYodGhpcy5yZWYpKWluc3RhbmNlb2Ygby5EaWN0KXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6dj1uZXcgby5EaWN0KGQpLHk9QShwLmdldEtleXMoKSk7dHJ5e2Zvcih5LnMoKTshKG09eS5uKCkpLmRvbmU7KSJBUCIhPT0oYj1tLnZhbHVlKSYmdi5zZXQoYixwLmdldFJhdyhiKSl9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIHc9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykodi5nZXQoIlQiKXx8IiIpLHZhbHVlOnV9LGs9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS5pc0FzY2lpKShlKT9lOigwLGEuc3RyaW5nVG9VVEYxNlN0cmluZykoZSwhMCl9LHYuc2V0KCJWIixBcnJheS5pc0FycmF5KHUpP3UubWFwKGspOmsodSkpLChTPXRoaXMuX2dldE1LRGljdChsKSkmJnYuc2V0KCJNSyIsUykseD1kLmVuY3J5cHQsTz14P3guY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pOm51bGwsRj1bXSxQPVt7cmVmOnRoaXMucmVmLGRhdGE6IiIseGZhOncsbmVlZEFwcGVhcmFuY2VzOmh9XSxudWxsIT09ZiYmKFQ9ZC5nZXROZXdUZW1wb3JhcnlSZWYoKSxJPW5ldyBvLkRpY3QoZCksdi5zZXQoIkFQIixJKSxJLnNldCgiTiIsVCksRT1udWxsLHgmJihFPXguY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKFQubnVtLFQuZ2VuKSxmPUUuZW5jcnlwdFN0cmluZyhmKSksaj10aGlzLl9nZXRTYXZlRmllbGRSZXNvdXJjZXMoZCksTT1uZXcgZy5TdHJpbmdTdHJlYW0oZiksKF89TS5kaWN0PW5ldyBvLkRpY3QoZCkpLnNldCgiTGVuZ3RoIixmLmxlbmd0aCksXy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksXy5zZXQoIlJlc291cmNlcyIsaiksXy5zZXQoIkJCb3giLFswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dKSwoTD10aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpKSE9PW4uSURFTlRJVFlfTUFUUklYJiZfLnNldCgiTWF0cml4IixMKSwoMCxzLndyaXRlT2JqZWN0KShULE0sRixFKSxQLnB1c2goe3JlZjpULGRhdGE6Ri5qb2luKCIiKSx4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KSxGLmxlbmd0aD0wKSx2LnNldCgiTSIsIkQ6Ii5jb25jYXQoKDAsbi5nZXRNb2RpZmljYXRpb25EYXRlKSgpKSksKDAscy53cml0ZU9iamVjdCkodGhpcy5yZWYsdixGLE8pLFBbMF0uZGF0YT1GLmpvaW4oIiIpLGUuYWJydXB0KCJyZXR1cm4iLFApO2Nhc2UgNDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXRBcHBlYXJhbmNlIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixvLHMpe3ZhciBjLHUsbCxoLGQscCxnLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLEgscSxHLHosVyxWLFksSyxKLFosUSxlZSx0ZTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAzOmlmKChjPXM/cy5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDApJiYodT1jLmZvcm1hdHRlZFZhbHVlfHxjLnZhbHVlLGw9Yy5yb3RhdGlvbiksdm9pZCAwIT09bHx8dm9pZCAwIT09dXx8dGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9ODticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkEmJiF0aGlzLmFwcGVhcmFuY2Upe2UubmV4dD04O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDg6aWYoaD10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhzKSx2b2lkIDAhPT11KXtlLm5leHQ9MTM7YnJlYWt9aWYodT10aGlzLmRhdGEuZmllbGRWYWx1ZSl7ZS5uZXh0PTEzO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIlEgRU1DIikpO2Nhc2UgMTM6aWYoQXJyYXkuaXNBcnJheSh1KSYmMT09PXUubGVuZ3RoJiYodT11WzBdKSwoMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiB1LCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpLHRoaXMuZGF0YS5jb21ibz8oZD10aGlzLmRhdGEub3B0aW9ucy5maW5kKChmdW5jdGlvbihlKXt2YXIgdD1lLmV4cG9ydFZhbHVlO3JldHVybiB1PT09dH0pKXx8dGhpcy5kYXRhLm9wdGlvbnNbMF0sdT1kJiZkLmRpc3BsYXlWYWx1ZXx8IiIpOnU9dS50cmltKCksIiIhPT11KXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiUSBFTUMiKSk7Y2FzZSAxODpyZXR1cm4gdm9pZCAwPT09bCYmKGw9dGhpcy5yb3RhdGlvbikscD0tMSx0aGlzLmRhdGEubXVsdGlMaW5lPyhnPXUuc3BsaXQoL1xyXG4/fFxuLykubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3JtYWxpemUoIk5GQyIpfSkpLHA9Zy5sZW5ndGgpOmc9W3UucmVwbGFjZSgvXHJcbj98XG4vLCIiKS5ub3JtYWxpemUoIk5GQyIpXSx2PTEseT0yLG09dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sYj10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSw5MCE9PWwmJjI3MCE9PWx8fChiPSh3PVttLGJdKVswXSxtPXdbMV0pLHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpLGUubmV4dD0yOSxmLl9nZXRGb250RGF0YSh0LHIsdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpO2Nhc2UgMjk6az1lLnNlbnQsRj1bXSxQPSExLEk9QShnKTt0cnl7Zm9yKEkucygpOyEoRT1JLm4oKSkuZG9uZTspaj1FLnZhbHVlLChNPWsuZW5jb2RlU3RyaW5nKGopKS5sZW5ndGg+MSYmKFA9ITApLEYucHVzaChNLmpvaW4oIiIpKX1jYXRjaChlKXtJLmUoZSl9ZmluYWxseXtJLmYoKX1pZighKFAmJm8mbi5SZW5kZXJpbmdJbnRlbnRGbGFnLlNBVkUpKXtlLm5leHQ9MzY7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtuZWVkQXBwZWFyYW5jZXM6ITB9KTtjYXNlIDM2OmlmKCFQfHwhdGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe2UubmV4dD01ODticmVha31pZihfPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixMPW5ldyBpLkZha2VVbmljb2RlRm9udCh0LnhyZWYsXyksUj1MLmNyZWF0ZUZvbnRSZXNvdXJjZXMoZy5qb2luKCIiKSksTj1SLmdldFJhdygiRm9udCIpLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5oYXMoIkZvbnQiKSl7RD10aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuZ2V0KCJGb250IiksQj1BKE4uZ2V0S2V5cygpKTt0cnl7Zm9yKEIucygpOyEoVT1CLm4oKSkuZG9uZTspJD1VLnZhbHVlLEQuc2V0KCQsTi5nZXRSYXcoJCkpfWNhdGNoKGUpe0IuZShlKX1maW5hbGx5e0IuZigpfX1lbHNlIHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5zZXQoIkZvbnQiLE4pO3JldHVybiBYPUwuZm9udE5hbWUubmFtZSxlLm5leHQ9NDUsZi5fZ2V0Rm9udERhdGEodCxyLHtmb250TmFtZTpYLGZvbnRTaXplOjB9LFIpO2Nhc2UgNDU6Zm9yKGs9ZS5zZW50LEg9MCxxPUYubGVuZ3RoO0g8cTtIKyspRltIXT0oMCxhLnN0cmluZ1RvVVRGMTZTdHJpbmcpKGdbSF0pO0c9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9MCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lPVgsej10aGlzLl9jb21wdXRlRm9udFNpemUobS0yKnYsYi0yKnksdSxrLHApLFc9VCh6LDMpLFM9V1swXSx4PVdbMV0sTz1XWzJdLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9RyxlLm5leHQ9NjQ7YnJlYWs7Y2FzZSA1ODp0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZHx8KDAsbi53YXJuKSgiX2dldEFwcGVhcmFuY2U6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBhbm5vdGF0aW9uIG1heSBub3QgcmVuZGVyIGNvcnJlY3RseS4iKSxWPXRoaXMuX2NvbXB1dGVGb250U2l6ZShtLTIqdixiLTIqeSx1LGsscCksWT1UKFYsMyksUz1ZWzBdLHg9WVsxXSxPPVlbMl07Y2FzZSA2NDppZihLPWsuZGVzY2VudCxLPWlzTmFOKEspP24uQkFTRUxJTkVfRkFDVE9SKk86TWF0aC5tYXgobi5CQVNFTElORV9GQUNUT1IqTyxNYXRoLmFicyhLKSp4KSxKPU1hdGgubWluKE1hdGguZmxvb3IoKG0teCkvMiksdiksWj10aGlzLmRhdGEudGV4dEFsaWdubWVudCwhdGhpcy5kYXRhLm11bHRpTGluZSl7ZS5uZXh0PTcwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9nZXRNdWx0aWxpbmVBcHBlYXJhbmNlKFMsRixrLHgsYixtLFoseSxKLEssTyxzKSk7Y2FzZSA3MDppZighdGhpcy5kYXRhLmNvbWIpe2UubmV4dD03MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fZ2V0Q29tYkFwcGVhcmFuY2UoUyxrLEZbMF0seCxiLG0seSxKLEssTyxzKSk7Y2FzZSA3MjppZihRPUorSywhKDA9PT1afHxaPjIpKXtlLm5leHQ9NzU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiQlQgIikrUysiIDEgMCAwIDEgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoeSksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUSksIiBUbSAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShGWzBdKSwiKSBUaiIpKyIgRVQgUSBFTUMiKTtjYXNlIDc1OnJldHVybiBlZT17c2hpZnQ6MH0sdGU9dGhpcy5fcmVuZGVyVGV4dChGWzBdLGsseCxiLFosZWUseSxRKSxlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIkJUICIpK1MrIiAxIDAgMCAxIDAgMCBUbSAiLmNvbmNhdCh0ZSkrIiBFVCBRIEVNQyIpO2Nhc2UgNzg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbixhKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2dldFRleHRXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5jaGFyc1RvR2x5cGhzKGUpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LndpZHRofSksMCkvMWUzfX0se2tleToiX2NvbXB1dGVGb250U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxvKXt2YXIgcz10aGlzLGM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZSx1PShjfHwxMikqbi5MSU5FX0ZBQ1RPUixsPU1hdGgucm91bmQoZS91KTtpZighYyl7dmFyIGY9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoMTAwKmUpLzEwMH07aWYoLTE9PT1vKXt2YXIgaD10aGlzLl9nZXRUZXh0V2lkdGgocixhKTtjPWYoTWF0aC5taW4oZS9uLkxJTkVfRkFDVE9SLGg+dD90L2g6MS8wKSksbD0xfWVsc2V7dmFyIGQscD1yLnNwbGl0KC9cclxuP3xcbi8pLGc9W10sdj1BKHApO3RyeXtmb3Iodi5zKCk7IShkPXYubigpKS5kb25lOyl7dmFyIHk9ZC52YWx1ZSxtPWEuZW5jb2RlU3RyaW5nKHkpLmpvaW4oIiIpLGI9YS5jaGFyc1RvR2x5cGhzKG0pLHc9YS5nZXRDaGFyUG9zaXRpb25zKG0pO2cucHVzaCh7bGluZTptLGdseXBoczpiLHBvc2l0aW9uczp3fSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXZhciBrPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wLGk9MCxvPWc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07aWYoKG4rPXMuX3NwbGl0TGluZShudWxsLGEscix0LGMpLmxlbmd0aCpyKT5lKXJldHVybiEwfXJldHVybiExfTtmb3IobD1NYXRoLm1heChsLG8pO2soYz1mKCh1PWUvbCkvbi5MSU5FX0ZBQ1RPUikpOylsKyt9dmFyIFM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx4PVMuZm9udE5hbWUsTz1TLmZvbnRDb2xvcjt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0oMCxpLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7Zm9udFNpemU6Yyxmb250TmFtZTp4LGZvbnRDb2xvcjpPfSl9cmV0dXJuW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLGMsZS9sXX19LHtrZXk6Il9yZW5kZXJUZXh0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMpe3ZhciB1O3U9MT09PWk/KG4tdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqcikvMjoyPT09aT9uLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKnItczpzO3ZhciBsPSgwLGEubnVtYmVyVG9TdHJpbmcpKHUtby5zaGlmdCk7cmV0dXJuIG8uc2hpZnQ9dSxjPSgwLGEubnVtYmVyVG9TdHJpbmcpKGMpLCIiLmNvbmNhdChsLCIgIikuY29uY2F0KGMsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShlKSwiKSBUaiIpfX0se2tleToiX2dldFNhdmVGaWVsZFJlc291cmNlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZmllbGRSZXNvdXJjZXMscj10LmxvY2FsUmVzb3VyY2VzLG49dC5hcHBlYXJhbmNlUmVzb3VyY2VzLGE9dC5hY3JvRm9ybVJlc291cmNlcyxpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEmJnRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udE5hbWU7aWYoIWkpcmV0dXJuIHJ8fG8uRGljdC5lbXB0eTtmb3IodmFyIHM9MCxjPVtyLG5dO3M8Yy5sZW5ndGg7cysrKXt2YXIgdT1jW3NdO2lmKHUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBsPXUuZ2V0KCJGb250Iik7aWYobCBpbnN0YW5jZW9mIG8uRGljdCYmbC5oYXMoaSkpcmV0dXJuIHV9fWlmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBmPWEuZ2V0KCJGb250Iik7aWYoZiBpbnN0YW5jZW9mIG8uRGljdCYmZi5oYXMoaSkpe3ZhciBoPW5ldyBvLkRpY3QoZSk7aC5zZXQoaSxmLmdldFJhdyhpKSk7dmFyIGQ9bmV3IG8uRGljdChlKTtyZXR1cm4gZC5zZXQoIkZvbnQiLGgpLG8uRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbZCxyXSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiByfHxvLkRpY3QuZW1wdHl9fSx7a2V5OiJnZXRGaWVsZE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSxbe2tleToiX2dldEZvbnREYXRhIix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpLHMsYyx1O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGk9bmV3IHAuT3BlcmF0b3JMaXN0LHM9e2ZvbnQ6bnVsbCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sYz1uLmZvbnROYW1lLHU9bi5mb250U2l6ZSxlLm5leHQ9NSx0LmhhbmRsZVNldEZvbnQoYSxbYyYmby5OYW1lLmdldChjKSx1XSxudWxsLGkscixzLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscy5mb250KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksZn0oVSkscT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBpO2oodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlKSkuX2hhc1RleHQ9ITA7dmFyIG89ZS5kaWN0OyJzdHJpbmciIT10eXBlb2YgaS5kYXRhLmZpZWxkVmFsdWUmJihpLmRhdGEuZmllbGRWYWx1ZT0iIik7dmFyIHM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpvLGtleToiUSJ9KTsoIU51bWJlci5pc0ludGVnZXIocyl8fHM8MHx8cz4yKSYmKHM9bnVsbCksaS5kYXRhLnRleHRBbGlnbm1lbnQ9czt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Om8sa2V5OiJNYXhMZW4ifSk7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGMpfHxjPDApJiYoYz0wKSxpLmRhdGEubWF4TGVuPWMsaS5kYXRhLm11bHRpTGluZT1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSxpLmRhdGEuY29tYj1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQikmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSYmIWkuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRklMRVNFTEVDVCkmJjAhPT1pLmRhdGEubWF4TGVuLGkuZGF0YS5kb05vdFNjcm9sbD1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRE9OT1RTQ1JPTEwpLGl9cmV0dXJuIF8ocixbe2tleToiX2dldENvbWJBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMsdSxsLGYpe3ZhciBoLGQ9aS90aGlzLmRhdGEubWF4TGVuLHA9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoZiksZz1bXSx2PUEodC5nZXRDaGFyUG9zaXRpb25zKHIpKTt0cnl7Zm9yKHYucygpOyEoaD12Lm4oKSkuZG9uZTspe3ZhciB5PVQoaC52YWx1ZSwyKSxtPXlbMF0sYj15WzFdO2cucHVzaCgiKCIuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShyLnN1YnN0cmluZyhtLGIpKSwiKSBUaiIpKX19Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9dmFyIHc9Zy5qb2luKCIgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoZCksIiAwIFRkICIpKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KHAsIkJUICIpK2UrIiAxIDAgMCAxICIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKHMpLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKGMrdSksIiBUbSAiKS5jb25jYXQodykrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixpLG8scyxjLHUsbCxmLGgpe2Zvcih2YXIgZD1bXSxwPWktMipjLGc9e3NoaWZ0OjB9LHY9MCx5PXQubGVuZ3RoO3Y8eTt2KyspZm9yKHZhciBtPXRbdl0sYj10aGlzLl9zcGxpdExpbmUobSxyLG4scCksdz0wLGs9Yi5sZW5ndGg7dzxrO3crKyl7dmFyIFM9Ylt3XSx4PTA9PT12JiYwPT09dz8tdS0oZi1sKTotZjtkLnB1c2godGhpcy5fcmVuZGVyVGV4dChTLHIsbixpLHMsZyxjLHgpKX12YXIgTz10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhoKSxBPWQuam9pbigiXG4iKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KE8sIkJUICIpK2UrIiAxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykobyksIiBUbSAiKS5jb25jYXQoQSkrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfc3BsaXRMaW5lIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e307ZT1hLmxpbmV8fGU7dmFyIGk9YS5nbHlwaHN8fHQuY2hhcnNUb0dseXBocyhlKTtpZihpLmxlbmd0aDw9MSlyZXR1cm5bZV07Zm9yKHZhciBvPWEucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSkscz1yLzFlMyxjPVtdLHU9LTEsbD0tMSxmPS0xLGg9MCxkPTAscD0wLGc9aS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9VChvW3BdLDIpLHk9dlswXSxtPXZbMV0sYj1pW3BdLHc9Yi53aWR0aCpzOyIgIj09PWIudW5pY29kZT9kK3c+bj8oYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcsdT0tMSxmPS0xKTooZCs9dyx1PXksbD1tLGY9cCk6ZCt3Pm4/LTEhPT11PyhjLnB1c2goZS5zdWJzdHJpbmcoaCxsKSksaD1sLHA9ZisxLHU9LTEsZD0wKTooYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcpOmQrPXd9cmV0dXJuIGg8ZS5sZW5ndGgmJmMucHVzaChlLnN1YnN0cmluZyhoLGUubGVuZ3RoKSksY319LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWUsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZXx8IiIsbXVsdGlsaW5lOnRoaXMuZGF0YS5tdWx0aUxpbmUscGFzc3dvcmQ6dGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZToidGV4dCJ9fX1dKSxyfShIKSxHPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGksYyx1PXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtyZXR1cm4gaih0aGlzLGYpLCh0PXUuY2FsbCh0aGlzLGUpKS5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQudW5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQuZGF0YS5jaGVja0JveD0hdC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucmFkaW9CdXR0b249dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucHVzaEJ1dHRvbj10Lmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTiksdC5kYXRhLmlzVG9vbHRpcE9ubHk9ITEsdC5kYXRhLmNoZWNrQm94P3QuX3Byb2Nlc3NDaGVja0JveChlKTp0LmRhdGEucmFkaW9CdXR0b24/dC5fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpOnQuZGF0YS5wdXNoQnV0dG9uPyh0LmRhdGEuaGFzT3duQ2FudmFzPSEwLHQuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpKTooMCxuLndhcm4pKCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb24iKSx0fXJldHVybiBfKGYsW3trZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLG8pe3ZhciBzLGMsdSxsLGgsZCxnO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5wdXNoQnV0dG9uKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIseSh4KGYucHJvdG90eXBlKSwiZ2V0T3BlcmF0b3JMaXN0Iix0aGlzKS5jYWxsKHRoaXMsdCxyLGEsITEsbykpO2Nhc2UgMjppZihzPW51bGwsYz1udWxsLG8mJih1PW8uZ2V0KHRoaXMuZGF0YS5pZCkscz11P3UudmFsdWU6bnVsbCxjPXU/dS5yb3RhdGlvbjpudWxsKSxudWxsIT09c3x8IXRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNzppZihudWxsPT1zJiYocz10aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWUpLCEobD1zP3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U6dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSl7ZS5uZXh0PTE4O2JyZWFrfXJldHVybiBoPXRoaXMuYXBwZWFyYW5jZSxkPWwuZGljdC5nZXRBcnJheSgiTWF0cml4Iil8fG4uSURFTlRJVFlfTUFUUklYLGMmJmwuZGljdC5zZXQoIk1hdHJpeCIsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSksdGhpcy5hcHBlYXJhbmNlPWwsZz15KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pLHRoaXMuYXBwZWFyYW5jZT1oLGwuZGljdC5zZXQoIk1hdHJpeCIsZCksZS5hYnJ1cHQoInJldHVybiIsZyk7Y2FzZSAxODpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSl7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOihpPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5jaGVja0JveCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3NhdmVDaGVja2JveCh0LHIsbikpO2Nhc2UgMjppZighdGhpcy5kYXRhLnJhZGlvQnV0dG9uKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fc2F2ZVJhZGlvQnV0dG9uKHQscixuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlQ2hlY2tib3giLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjppZihpPWEuZ2V0KHRoaXMuZGF0YS5pZCksYz1pJiZpLnJvdGF0aW9uLHU9aSYmaS52YWx1ZSx2b2lkIDAhPT1jKXtlLm5leHQ9MTE7YnJlYWt9aWYodm9pZCAwIT09dSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgODppZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZSE9PXUpe2UubmV4dD0xMTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxMTppZigobD10LnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxNDpyZXR1cm4gdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksdm9pZCAwPT09dSYmKHU9dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpLGY9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykobC5nZXQoIlQiKXx8IiIpLHZhbHVlOnU/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiIifSxoPW8uTmFtZS5nZXQodT90aGlzLmRhdGEuZXhwb3J0VmFsdWU6Ik9mZiIpLGwuc2V0KCJWIixoKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoZD10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLGQpLHA9dC54cmVmLmVuY3J5cHQsZz1udWxsLHAmJihnPXAuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSx2PVsiIi5jb25jYXQodGhpcy5yZWYubnVtLCIgIikuY29uY2F0KHRoaXMucmVmLmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShsLHYsZyksdi5wdXNoKCJcbmVuZG9ialxuIiksZS5hYnJ1cHQoInJldHVybiIsW3tyZWY6dGhpcy5yZWYsZGF0YTp2LmpvaW4oIiIpLHhmYTpmfV0pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlUmFkaW9CdXR0b24iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihhKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAyOmlmKGk9YS5nZXQodGhpcy5kYXRhLmlkKSxjPWkmJmkucm90YXRpb24sdT1pJiZpLnZhbHVlLHZvaWQgMCE9PWMpe2UubmV4dD0xMTticmVha31pZih2b2lkIDAhPT11KXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSA4OmlmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlIT09dSl7ZS5uZXh0PTExO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDExOmlmKChsPXQueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTE0O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDE0OnJldHVybiB2b2lkIDA9PT11JiYodT10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSksdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksZj17cGF0aDooMCxuLnN0cmluZ1RvUERGU3RyaW5nKShsLmdldCgiVCIpfHwiIiksdmFsdWU6dT90aGlzLmRhdGEuYnV0dG9uVmFsdWU6IiJ9LGg9by5OYW1lLmdldCh1P3RoaXMuZGF0YS5idXR0b25WYWx1ZToiT2ZmIiksZD1udWxsLHA9dC54cmVmLmVuY3J5cHQsdSYmKHRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5SZWY/KGc9dC54cmVmLmZldGNoKHRoaXMucGFyZW50KSx2PW51bGwscCYmKHY9cC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5wYXJlbnQubnVtLHRoaXMucGFyZW50LmdlbikpLGcuc2V0KCJWIixoKSxkPVsiIi5jb25jYXQodGhpcy5wYXJlbnQubnVtLCIgIikuY29uY2F0KHRoaXMucGFyZW50LmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShnLGQsdiksZC5wdXNoKCJcbmVuZG9ialxuIikpOnRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5EaWN0JiZ0aGlzLnBhcmVudC5zZXQoIlYiLGgpKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoeT10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLHkpLG09bnVsbCxwJiYobT1wLmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKSksYj1bIiIuY29uY2F0KHRoaXMucmVmLm51bSwiICIpLmNvbmNhdCh0aGlzLnJlZi5nZW4sIiBvYmpcbiIpXSwoMCxzLndyaXRlRGljdCkobCxiLG0pLGIucHVzaCgiXG5lbmRvYmpcbiIpLHc9W3tyZWY6dGhpcy5yZWYsZGF0YTpiLmpvaW4oIiIpLHhmYTpmfV0sbnVsbCE9PWQmJncucHVzaCh7cmVmOnRoaXMucGFyZW50LGRhdGE6ZC5qb2luKCIiKSx4ZmE6bnVsbH0pLGUuYWJydXB0KCJyZXR1cm4iLHcpO2Nhc2UgMzM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxzPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLGM9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sdT1bMCwwLHMsY10sbD0uOCpNYXRoLm1pbihzLGMpOyJjaGVjayI9PT10PyhyPXt3aWR0aDouNzU1KmwsaGVpZ2h0Oi43MDUqbH0saT0iMyIpOiJkaXNjIj09PXQ/KHI9e3dpZHRoOi43OTEqbCxoZWlnaHQ6LjcwNSpsfSxpPSJsIik6KDAsbi51bnJlYWNoYWJsZSkoIl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UgLSB1bnN1cHBvcnRlZCB0eXBlOiAiLmNvbmNhdCh0KSk7dmFyIGY9KDAsYS5udW1iZXJUb1N0cmluZykoKHMtci53aWR0aCkvMiksaD0oMCxhLm51bWJlclRvU3RyaW5nKSgoYy1yLmhlaWdodCkvMiksZD0icSBCVCAvUGRmSnNaYURiICIuY29uY2F0KGwsIiBUZiAwIGcgIikuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIFRkICgiKS5jb25jYXQoaSwiKSBUaiBFVCBRIikscD1uZXcgby5EaWN0KGUueHJlZik7cC5zZXQoIkZvcm1UeXBlIiwxKSxwLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiRm9ybSIpKSxwLnNldCgiVHlwZSIsby5OYW1lLmdldCgiWE9iamVjdCIpKSxwLnNldCgiQkJveCIsdSkscC5zZXQoIk1hdHJpeCIsWzEsMCwwLDEsMCwwXSkscC5zZXQoIkxlbmd0aCIsZC5sZW5ndGgpO3ZhciB2PW5ldyBvLkRpY3QoZS54cmVmKSx5PW5ldyBvLkRpY3QoZS54cmVmKTt5LnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpLHYuc2V0KCJGb250Iix5KSxwLnNldCgiUmVzb3VyY2VzIix2KSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBnLlN0cmluZ1N0cmVhbShkKSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3Q9cCx0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSl9fSx7a2V5OiJfcHJvY2Vzc0NoZWNrQm94Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIG49dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgbiYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPW4pO3ZhciBhPW51bGwhPT10aGlzLmRhdGEuZmllbGRWYWx1ZSYmIk9mZiIhPT10aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZToiWWVzIixpPXIuZ2V0S2V5cygpO2lmKDA9PT1pLmxlbmd0aClpLnB1c2goIk9mZiIsYSk7ZWxzZSBpZigxPT09aS5sZW5ndGgpIk9mZiI9PT1pWzBdP2kucHVzaChhKTppLnVuc2hpZnQoIk9mZiIpO2Vsc2UgaWYoaS5pbmNsdWRlcyhhKSlpLmxlbmd0aD0wLGkucHVzaCgiT2ZmIixhKTtlbHNle3ZhciBzPWkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIk9mZiIhPT1lfSkpO2kubGVuZ3RoPTAsaS5wdXNoKCJPZmYiLHMpfWkuaW5jbHVkZXModGhpcy5kYXRhLmZpZWxkVmFsdWUpfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9Ik9mZiIpLHRoaXMuZGF0YS5leHBvcnRWYWx1ZT1pWzFdLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQodGhpcy5kYXRhLmV4cG9ydFZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJjaGVjayIpLHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSksdGhpcy5fZmFsbGJhY2tGb250RGljdD10aGlzLmZhbGxiYWNrRm9udERpY3R9fX19LHtrZXk6Il9wcm9jZXNzUmFkaW9CdXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuZGF0YS5idXR0b25WYWx1ZT1udWxsO3ZhciB0PWUuZGljdC5nZXQoIlBhcmVudCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3RoaXMucGFyZW50PWUuZGljdC5nZXRSYXcoIlBhcmVudCIpO3ZhciByPXQuZ2V0KCJWIik7ciBpbnN0YW5jZW9mIG8uTmFtZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShyKSl9dmFyIG49ZS5kaWN0LmdldCgiQVAiKTtpZihuIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgYT1uLmdldCgiTiIpO2lmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBpLHM9QShhLmdldEtleXMoKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO2lmKCJPZmYiIT09Yyl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShjKTticmVha319fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJkaXNjIiksdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSx0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdH19fX0se2tleToiX3Byb2Nlc3NQdXNoQnV0dG9uIix2YWx1ZTpmdW5jdGlvbihlKXtlLmRpY3QuaGFzKCJBIil8fGUuZGljdC5oYXMoIkFBIil8fHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQ/KHRoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSFlLmRpY3QuaGFzKCJBIikmJiFlLmRpY3QuaGFzKCJBQSIpLGwuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOmUuYXR0YWNobWVudHN9KSk6KDAsbi53YXJuKSgiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfX0se2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0iYnV0dG9uIjtyZXR1cm4gdGhpcy5kYXRhLmNoZWNrQm94Pyh0PSJjaGVja2JveCIsZT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpOnRoaXMuZGF0YS5yYWRpb0J1dHRvbiYmKHQ9InJhZGlvYnV0dG9uIixlPXRoaXMuZGF0YS5idXR0b25WYWx1ZSkse2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZXx8Ik9mZiIsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxleHBvcnRWYWx1ZXM6ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6dH19fSx7a2V5OiJmYWxsYmFja0ZvbnREaWN0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgby5EaWN0O3JldHVybiBlLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIlphcGZEaW5nYmF0cyIpKSxlLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpLGUuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHNFbmNvZGluZyIpKSwoMCxuLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGZ9KEgpLHo9ZnVuY3Rpb24oZSl7bShvLGUpO3ZhciB0LHI9dyhvKTtmdW5jdGlvbiBvKGUpe3ZhciB0O2oodGhpcyxvKSx0PXIuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZjt0LmRhdGEub3B0aW9ucz1bXTt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Omksa2V5OiJPcHQifSk7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIHU9MCxsPWMubGVuZ3RoO3U8bDt1Kyspe3ZhciBmPXMuZmV0Y2hJZlJlZihjW3VdKSxoPUFycmF5LmlzQXJyYXkoZik7dC5kYXRhLm9wdGlvbnNbdV09e2V4cG9ydFZhbHVlOnQuX2RlY29kZUZvcm1WYWx1ZShoP3MuZmV0Y2hJZlJlZihmWzBdKTpmKSxkaXNwbGF5VmFsdWU6dC5fZGVjb2RlRm9ybVZhbHVlKGg/cy5mZXRjaElmUmVmKGZbMV0pOmYpfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQuZGF0YS5maWVsZFZhbHVlP3QuZGF0YS5maWVsZFZhbHVlPVt0LmRhdGEuZmllbGRWYWx1ZV06dC5kYXRhLmZpZWxkVmFsdWV8fCh0LmRhdGEuZmllbGRWYWx1ZT1bXSksdC5kYXRhLmNvbWJvPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CTyksdC5kYXRhLm11bHRpU2VsZWN0PXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSVNFTEVDVCksdC5faGFzVGV4dD0hMCx0fXJldHVybiBfKG8sW3trZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5jb21ibz8iY29tYm9ib3giOiJsaXN0Ym94Iix0PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wP3RoaXMuZGF0YS5maWVsZFZhbHVlWzBdOm51bGw7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0LGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxudW1JdGVtczp0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGgsbXVsdGlwbGVTZWxlY3Rpb246dGhpcy5kYXRhLm11bHRpU2VsZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsaXRlbXM6dGhpcy5kYXRhLm9wdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6ZX19fSx7a2V5OiJfZ2V0QXBwZWFyYW5jZSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxzKXt2YXIgYyx1LGwsZixoLGQscCxnLHYsbSxiLHcsayxTLE8sRixQLEksRSxqLE0sXyxMLFIsTixELEIsVSwkLFgscSxHLHosVyxWLFksSztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmRhdGEuY29tYm8pe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoby5wcm90b3R5cGUpLCJfZ2V0QXBwZWFyYW5jZSIsdGhpcykuY2FsbCh0aGlzLHQscixhLHMpKTtjYXNlIDI6aWYoKGw9cz9zLmdldCh0aGlzLmRhdGEuaWQpOnZvaWQgMCkmJih1PWwucm90YXRpb24sYz1sLnZhbHVlKSx2b2lkIDAhPT11fHx2b2lkIDAhPT1jfHx0aGlzLl9uZWVkQXBwZWFyYW5jZXMpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6Zm9yKHZvaWQgMD09PWM/Yz10aGlzLmRhdGEuZmllbGRWYWx1ZTpBcnJheS5pc0FycmF5KGMpfHwoYz1bY10pLGY9MSxoPTIsZD10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxwPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLDkwIT09dSYmMjcwIT09dXx8KHA9KGc9W2QscF0pWzBdLGQ9Z1sxXSksdj10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsbT1bXSxiPTA7Yjx2O2IrKyl3PXRoaXMuZGF0YS5vcHRpb25zW2JdLmV4cG9ydFZhbHVlLGMuaW5jbHVkZXModykmJm0ucHVzaChiKTtyZXR1cm4gdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSksZS5uZXh0PTE4LEguX2dldEZvbnREYXRhKHQscix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7Y2FzZSAxODppZihrPWUuc2VudCxPPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemUpUz10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtlbHNle0Y9KGQtZikvdixQPS0xLEU9QSh0aGlzLmRhdGEub3B0aW9ucyk7dHJ5e2ZvcihFLnMoKTshKGo9RS5uKCkpLmRvbmU7KU09ai52YWx1ZS5kaXNwbGF5VmFsdWUsKF89dGhpcy5fZ2V0VGV4dFdpZHRoKE0saykpPlAmJihQPV8sST1NKX1jYXRjaChlKXtFLmUoZSl9ZmluYWxseXtFLmYoKX1MPXRoaXMuX2NvbXB1dGVGb250U2l6ZShGLHAtMipoLEksaywtMSksUj1UKEwsMiksUz1SWzBdLE89UlsxXX1pZihOPU8qbi5MSU5FX0ZBQ1RPUixEPShOLU8pLzIsQj1NYXRoLmZsb29yKGQvTiksMT09PW0ubGVuZ3RoPygkPW1bMF0sVT0kLSQlQik6VT1tLmxlbmd0aD9tWzBdOjAsWD1NYXRoLm1pbihVK0IrMSx2KSxxPVsiL1R4IEJNQyBxIiwiMSAxICIuY29uY2F0KHAsIiAiKS5jb25jYXQoZCwiIHJlIFcgbiIpXSxtLmxlbmd0aCl7cS5wdXNoKCIwLjYwMDAwNiAwLjc1Njg2NiAwLjg1NDkwNCByZyIpLEc9QShtKTt0cnl7Zm9yKEcucygpOyEoej1HLm4oKSkuZG9uZTspVz16LnZhbHVlLFU8PVcmJlc8WCYmcS5wdXNoKCIxICIuY29uY2F0KGQtKFctVSsxKSpOLCIgIikuY29uY2F0KHAsIiAiKS5jb25jYXQoTiwiIHJlIGYiKSl9Y2F0Y2goZSl7Ry5lKGUpfWZpbmFsbHl7Ry5mKCl9fWZvcihxLnB1c2goIkJUIixTLCIxIDAgMCAxIDAgIi5jb25jYXQoZCwiIFRtIikpLFY9e3NoaWZ0OjB9LGI9VTtiPFg7YisrKVk9dGhpcy5kYXRhLm9wdGlvbnNbYl0uZGlzcGxheVZhbHVlLEs9Yj09PVU/RDowLHEucHVzaCh0aGlzLl9yZW5kZXJUZXh0KFksayxPLHAsMCxWLGgsLU4rSykpO3JldHVybiBxLnB1c2goIkVUIFEgRU1DIiksZS5hYnJ1cHQoInJldHVybiIscS5qb2luKCJcbiIpKTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksb30oSCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBqKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmRhdGEuZmllbGRWYWx1ZT1udWxsLG59cmV0dXJuIF8ocixbe2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19XSkscn0oSCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdDtyZXR1cm4gYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVEVYVCxhLmRhdGEuaGFzQXBwZWFyYW5jZT9hLmRhdGEubmFtZT0iTm9JY29uIjooYS5kYXRhLnJlY3RbMV09YS5kYXRhLnJlY3RbM10tMjIsYS5kYXRhLnJlY3RbMl09YS5kYXRhLnJlY3RbMF0rMjIsYS5kYXRhLm5hbWU9aS5oYXMoIk5hbWUiKT9pLmdldCgiTmFtZSIpLm5hbWU6Ik5vdGUiKSxpLmhhcygiU3RhdGUiKT8oYS5kYXRhLnN0YXRlPWkuZ2V0KCJTdGF0ZSIpfHxudWxsLGEuZGF0YS5zdGF0ZU1vZGVsPWkuZ2V0KCJTdGF0ZU1vZGVsIil8fG51bGwpOihhLmRhdGEuc3RhdGU9bnVsbCxhLmRhdGEuc3RhdGVNb2RlbD1udWxsKSxhfXJldHVybiBfKHIpfShYKSxZPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuTElOSzt2YXIgaT1EKGUuZGljdCxhLnJlY3RhbmdsZSk7cmV0dXJuIGkmJihhLmRhdGEucXVhZFBvaW50cz1pKSxhLmRhdGEuYm9yZGVyQ29sb3I9YS5kYXRhLmJvcmRlckNvbG9yfHxhLmRhdGEuY29sb3IsbC5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUuZGljdCxyZXN1bHRPYmo6YS5kYXRhLGRvY0Jhc2VVcmw6ZS5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwsZG9jQXR0YWNobWVudHM6ZS5hdHRhY2htZW50c30pLGF9cmV0dXJuIF8ocil9KFUpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Q7YS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuUE9QVVA7dmFyIHM9aS5nZXQoIlBhcmVudCIpO2lmKCFzKXJldHVybigwLG4ud2FybikoIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpLGsoYSk7dmFyIGM9cy5nZXQoIlN1YnR5cGUiKTthLmRhdGEucGFyZW50VHlwZT1jIGluc3RhbmNlb2Ygby5OYW1lP2MubmFtZTpudWxsO3ZhciB1PWkuZ2V0UmF3KCJQYXJlbnQiKTthLmRhdGEucGFyZW50SWQ9dSBpbnN0YW5jZW9mIG8uUmVmP3UudG9TdHJpbmcoKTpudWxsO3ZhciBsPXMuZ2V0QXJyYXkoIlJlY3QiKTtBcnJheS5pc0FycmF5KGwpJiY0PT09bC5sZW5ndGg/YS5kYXRhLnBhcmVudFJlY3Q9bi5VdGlsLm5vcm1hbGl6ZVJlY3QobCk6YS5kYXRhLnBhcmVudFJlY3Q9WzAsMCwwLDBdO3ZhciBmPXMuZ2V0KCJSVCIpO2lmKCgwLG8uaXNOYW1lKShmLG4uQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCkmJihzPXMuZ2V0KCJJUlQiKSkscy5oYXMoIk0iKT8oYS5zZXRNb2RpZmljYXRpb25EYXRlKHMuZ2V0KCJNIikpLGEuZGF0YS5tb2RpZmljYXRpb25EYXRlPWEubW9kaWZpY2F0aW9uRGF0ZSk6YS5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCxzLmhhcygiQyIpPyhhLnNldENvbG9yKHMuZ2V0QXJyYXkoIkMiKSksYS5kYXRhLmNvbG9yPWEuY29sb3IpOmEuZGF0YS5jb2xvcj1udWxsLCFhLnZpZXdhYmxlKXt2YXIgaD1zLmdldCgiRiIpO2EuX2lzVmlld2FibGUoaCkmJmEuc2V0RmxhZ3MoaCl9cmV0dXJuIGEuc2V0VGl0bGUocy5nZXQoIlQiKSksYS5kYXRhLnRpdGxlT2JqPWEuX3RpdGxlLGEuc2V0Q29udGVudHMocy5nZXQoIkNvbnRlbnRzIikpLGEuZGF0YS5jb250ZW50c09iaj1hLl9jb250ZW50cyxzLmhhcygiUkMiKSYmKGEuZGF0YS5yaWNoVGV4dD12LlhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwocy5nZXQoIlJDIikpKSxhfXJldHVybiBfKHIpfShVKTt0LlBvcHVwQW5ub3RhdGlvbj1LO3ZhciBKPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLnhyZWY7aWYodC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQsdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSwhdC5hcHBlYXJhbmNlJiZ0Ll9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7dmFyIG89bmV3IGkuRmFrZVVuaWNvZGVGb250KGEsInNhbnMtc2VyaWYiKSxjPXQuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7dC5hcHBlYXJhbmNlPW8uY3JlYXRlQXBwZWFyYW5jZSh0Ll9jb250ZW50cy5zdHIsdC5yZWN0YW5nbGUsdC5yb3RhdGlvbixjLmZvbnRTaXplfHwxMCxjLmZvbnRDb2xvciksdC5fc3RyZWFtcy5wdXNoKHQuYXBwZWFyYW5jZSxpLkZha2VVbmljb2RlRm9udC50b1VuaWNvZGVTdHJlYW0pfWVsc2UgdC5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR8fCgwLG4ud2FybikoIkZyZWVUZXh0QW5ub3RhdGlvbjogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpO3JldHVybiB0fXJldHVybiBfKHMsW3trZXk6Imhhc1RleHRDb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYXBwZWFyYW5jZX19XSxbe2tleToiY3JlYXRlTmV3RGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXIuYXBSZWYsYz1yLmFwLHU9ZS5jb2xvcixsPWUuZm9udFNpemUsZj1lLnJlY3QsaD1lLnJvdGF0aW9uLGQ9ZS51c2VyLHA9ZS52YWx1ZSxnPW5ldyBvLkRpY3QodCk7Zy5zZXQoIlR5cGUiLG8uTmFtZS5nZXQoIkFubm90IikpLGcuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGcmVlVGV4dCIpKSxnLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxnLnNldCgiUmVjdCIsZik7dmFyIHY9Ii9IZWx2ICIuY29uY2F0KGwsIiBUZiAiKS5jb25jYXQoKDAsaS5nZXRQZGZDb2xvcikodSwhMCkpO2lmKGcuc2V0KCJEQSIsdiksZy5zZXQoIkNvbnRlbnRzIiwoMCxhLmlzQXNjaWkpKHApP3A6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShwLCEwKSksZy5zZXQoIkYiLDQpLGcuc2V0KCJCb3JkZXIiLFswLDAsMF0pLGcuc2V0KCJSb3RhdGUiLGgpLGQmJmcuc2V0KCJUIiwoMCxhLmlzQXNjaWkpKGQpP2Q6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShkLCEwKSksc3x8Yyl7dmFyIHk9bmV3IG8uRGljdCh0KTtnLnNldCgiQVAiLHkpLHM/eS5zZXQoIk4iLHMpOnkuc2V0KCJOIixjKX1yZXR1cm4gZ319LHtrZXk6ImNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLHMpe3ZhciBjLHUsbCxmLGgsZCxwLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLHEsRyx6LFcsVixZLEssSixaLFEsZWUsdGUscmUsbmUsYWUsaWUsb2Usc2U7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gYz1zLmJhc2VGb250UmVmLHU9cy5ldmFsdWF0b3IsbD1zLnRhc2ssZj10LmNvbG9yLGg9dC5mb250U2l6ZSxkPXQucmVjdCxwPXQucm90YXRpb24sdj10LnZhbHVlLHk9bmV3IG8uRGljdChyKSxtPW5ldyBvLkRpY3QociksYz9tLnNldCgiSGVsdiIsYyk6KChiPW5ldyBvLkRpY3QocikpLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIkhlbHZldGljYSIpKSxiLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRm9udCIpKSxiLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiVHlwZTEiKSksYi5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSksbS5zZXQoIkhlbHYiLGIpKSx5LnNldCgiRm9udCIsbSksZS5uZXh0PTgsSC5fZ2V0Rm9udERhdGEodSxsLHtmb250TmFtZToiSGVsdmV0aWNhIixmb250U2l6ZTpofSx5KTtjYXNlIDg6dz1lLnNlbnQsaz1UKGQsNCksUz1rWzBdLHg9a1sxXSxPPWtbMl0sRj1rWzNdLFA9Ty1TLEk9Ri14LHAlMTgwIT0wJiYoUD0oRT1bSSxQXSlbMF0sST1FWzFdKSxqPXYuc3BsaXQoIlxuIiksTT1oLzFlMyxfPS0xLzAsTD1bXSxSPUEoaiksZS5wcmV2PTE4LFIucygpO2Nhc2UgMjA6aWYoKE49Ui5uKCkpLmRvbmUpe2UubmV4dD0zNDticmVha31pZihEPU4udmFsdWUsISgoQj13LmVuY29kZVN0cmluZyhEKSkubGVuZ3RoPjEpKXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6RD1CLmpvaW4oIiIpLEwucHVzaChEKSxVPTAsJD13LmNoYXJzVG9HbHlwaHMoRCksWD1BKCQpO3RyeXtmb3IoWC5zKCk7IShxPVgubigpKS5kb25lOylHPXEudmFsdWUsVSs9Ry53aWR0aCpNfWNhdGNoKGUpe1guZShlKX1maW5hbGx5e1guZigpfV89TWF0aC5tYXgoXyxVKTtjYXNlIDMyOmUubmV4dD0yMDticmVhaztjYXNlIDM0OmUubmV4dD0zOTticmVhaztjYXNlIDM2OmUucHJldj0zNixlLnQwPWUuY2F0Y2goMTgpLFIuZShlLnQwKTtjYXNlIDM5OnJldHVybiBlLnByZXY9MzksUi5mKCksZS5maW5pc2goMzkpO2Nhc2UgNDI6Zm9yKHo9MSxfPlAmJih6PVAvXyksVz0xLFY9bi5MSU5FX0ZBQ1RPUipoLFk9bi5MSU5FX0RFU0NFTlRfRkFDVE9SKmgsKEs9VipqLmxlbmd0aCk+SSYmKFc9SS9LKSxKPU1hdGgubWluKHosVyksWj1oKkosUT1bInEiLCIwIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUCksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSSksIiByZSBXIG4iKSwiQlQiLCIxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSStZKSwiIFRtIDAgVGMgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKGYsITApKSwiL0hlbHYgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoWiksIiBUZiIpXSxlZT0oMCxhLm51bWJlclRvU3RyaW5nKShWKSx0ZT0wLHJlPUw7dGU8cmUubGVuZ3RoO3RlKyspbmU9cmVbdGVdLFEucHVzaCgiMCAtIi5jb25jYXQoZWUsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShuZSksIikgVGoiKSk7cmV0dXJuIFEucHVzaCgiRVQiLCJRIiksYWU9US5qb2luKCJcbiIpLChpZT1uZXcgby5EaWN0KHIpKS5zZXQoIkZvcm1UeXBlIiwxKSxpZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksaWUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLGllLnNldCgiQkJveCIsWzAsMCxQLEldKSxpZS5zZXQoIkxlbmd0aCIsYWUubGVuZ3RoKSxpZS5zZXQoIlJlc291cmNlcyIseSkscCYmKG9lPSgwLGEuZ2V0Um90YXRpb25NYXRyaXgpKHAsUCxJKSxpZS5zZXQoIk1hdHJpeCIsb2UpKSwoc2U9bmV3IGcuU3RyaW5nU3RyZWFtKGFlKSkuZGljdD1pZSxlLmFicnVwdCgicmV0dXJuIixzZSk7Y2FzZSA2NzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzE4LDM2LDM5LDQyXV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksc30oWCksWj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5MSU5FO3ZhciBzPWkuZ2V0QXJyYXkoIkwiKTtpZihhLmRhdGEubGluZUNvb3JkaW5hdGVzPW4uVXRpbC5ub3JtYWxpemVSZWN0KHMpLGEuc2V0TGluZUVuZGluZ3MoaS5nZXRBcnJheSgiTEUiKSksYS5kYXRhLmxpbmVFbmRpbmdzPWEubGluZUVuZGluZ3MsIWEuYXBwZWFyYW5jZSl7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sdT1pLmdldCgiQ0EiKSxsPVIoaS5nZXRBcnJheSgiSUMiKSxudWxsKSxmPWw/TihsKTpudWxsLGg9Zj91Om51bGwsZD1hLmJvcmRlclN0eWxlLndpZHRofHwxLHA9MipkLGc9W2EuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0tcCxhLmRhdGEubGluZUNvb3JkaW5hdGVzWzFdLXAsYS5kYXRhLmxpbmVDb29yZGluYXRlc1syXStwLGEuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10rcF07bi5VdGlsLmludGVyc2VjdChhLnJlY3RhbmdsZSxnKXx8KGEucmVjdGFuZ2xlPWcpLGEuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOm8sZXh0cmE6IiIuY29uY2F0KGQsIiB3Iiksc3Ryb2tlQ29sb3I6YyxmaWxsQ29sb3I6ZixzdHJva2VBbHBoYTp1LGZpbGxBbHBoYTpoLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoc1swXSwiICIpLmNvbmNhdChzWzFdLCIgbSIpLCIiLmNvbmNhdChzWzJdLCIgIikuY29uY2F0KHNbM10sIiBsIiksIlMiKSxbdFswXS54LWQsdFsxXS54K2QsdFszXS55LWQsdFsxXS55K2RdfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSxRPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNRVUFSRSwhYS5hcHBlYXJhbmNlKXt2YXIgcz1hLmNvbG9yP04oYS5jb2xvcik6WzAsMCwwXSxjPWkuZ2V0KCJDQSIpLHU9UihpLmdldEFycmF5KCJJQyIpLG51bGwpLGw9dT9OKHUpOm51bGwsZj1sP2M6bnVsbDtpZigwPT09YS5ib3JkZXJTdHlsZS53aWR0aCYmIWwpcmV0dXJuIGsoYSk7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoYS5ib3JkZXJTdHlsZS53aWR0aCwiIHciKSxzdHJva2VDb2xvcjpzLGZpbGxDb2xvcjpsLHN0cm9rZUFscGhhOmMsZmlsbEFscGhhOmYscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzJdLngrYS5ib3JkZXJTdHlsZS53aWR0aC8yLG49dFsyXS55K2EuYm9yZGVyU3R5bGUud2lkdGgvMixpPXRbM10ueC10WzJdLngtYS5ib3JkZXJTdHlsZS53aWR0aCxvPXRbMV0ueS10WzNdLnktYS5ib3JkZXJTdHlsZS53aWR0aDtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdChyLCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQoaSwiICIpLmNvbmNhdChvLCIgcmUiKSksbD9lLnB1c2goIkIiKTplLnB1c2goIlMiKSxbdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX1yZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFLCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIiksdT1SKGkuZ2V0QXJyYXkoIklDIiksbnVsbCksbD11P04odSk6bnVsbCxmPWw/YzpudWxsO2lmKDA9PT1hLmJvcmRlclN0eWxlLndpZHRoJiYhbClyZXR1cm4gayhhKTt2YXIgaD00LzMqTWF0aC50YW4oTWF0aC5QSS84KTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiIiLmNvbmNhdChhLmJvcmRlclN0eWxlLndpZHRoLCIgdyIpLHN0cm9rZUNvbG9yOnMsZmlsbENvbG9yOmwsc3Ryb2tlQWxwaGE6YyxmaWxsQWxwaGE6Zixwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHQpe3ZhciByPXRbMF0ueCthLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzBdLnktYS5ib3JkZXJTdHlsZS53aWR0aC8yLGk9dFszXS54LWEuYm9yZGVyU3R5bGUud2lkdGgvMixvPXRbM10ueSthLmJvcmRlclN0eWxlLndpZHRoLzIscz1yKyhpLXIpLzIsYz1uKyhvLW4pLzIsdT0oaS1yKS8yKmgsZj0oby1uKS8yKmg7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQocywiICIpLmNvbmNhdChvLCIgbSIpLCIiLmNvbmNhdChzK3UsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMsIiBjIiksIiIuY29uY2F0KGksIiAiKS5jb25jYXQoYy1mLCIgIikuY29uY2F0KHMrdSwiICIpLmNvbmNhdChuLCIgIikuY29uY2F0KHMsIiAiKS5jb25jYXQobiwiIGMiKSwiIi5jb25jYXQocy11LCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLWYsIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLCIgYyIpLCIiLmNvbmNhdChyLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChzLXUsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiBjIiksImgiKSxsP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSx0ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORSxhLmRhdGEudmVydGljZXM9W10sUyhhKWluc3RhbmNlb2YgcmV8fChhLnNldExpbmVFbmRpbmdzKGkuZ2V0QXJyYXkoIkxFIikpLGEuZGF0YS5saW5lRW5kaW5ncz1hLmxpbmVFbmRpbmdzKTt2YXIgcz1pLmdldEFycmF5KCJWZXJ0aWNlcyIpO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBrKGEpO2Zvcih2YXIgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrPTIpYS5kYXRhLnZlcnRpY2VzLnB1c2goe3g6c1tjXSx5OnNbYysxXX0pO2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBsLGY9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0saD1pLmdldCgiQ0EiKSxkPWEuYm9yZGVyU3R5bGUud2lkdGh8fDEscD0yKmQsZz1bMS8wLDEvMCwtMS8wLC0xLzBdLHY9QShhLmRhdGEudmVydGljZXMpO3RyeXtmb3Iodi5zKCk7IShsPXYubigpKS5kb25lOyl7dmFyIHk9bC52YWx1ZTtnWzBdPU1hdGgubWluKGdbMF0seS54LXApLGdbMV09TWF0aC5taW4oZ1sxXSx5LnktcCksZ1syXT1NYXRoLm1heChnWzJdLHkueCtwKSxnWzNdPU1hdGgubWF4KGdbM10seS55K3ApfX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1uLlV0aWwuaW50ZXJzZWN0KGEucmVjdGFuZ2xlLGcpfHwoYS5yZWN0YW5nbGU9ZyksYS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoZCwiIHciKSxzdHJva2VDb2xvcjpmLHN0cm9rZUFscGhhOmgscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9YS5kYXRhLnZlcnRpY2VzLG49MCxpPXIubGVuZ3RoO248aTtuKyspZS5wdXNoKCIiLmNvbmNhdChyW25dLngsIiAiKS5jb25jYXQocltuXS55LCIgIikuY29uY2F0KDA9PT1uPyJtIjoibCIpKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLHJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlBPTFlHT04sYX1yZXR1cm4gXyhyKX0odGUpLG5lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkNBUkVULGF9cmV0dXJuIF8ocil9KFgpLGFlPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLmRpY3QsaT1lLnhyZWY7dC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuSU5LLHQuZGF0YS5pbmtMaXN0cz1bXTt2YXIgbz1hLmdldEFycmF5KCJJbmtMaXN0Iik7aWYoIUFycmF5LmlzQXJyYXkobykpcmV0dXJuIGsodCk7Zm9yKHZhciBjPTAsdT1vLmxlbmd0aDtjPHU7KytjKXt0LmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKHZhciBsPTAsZj1vW2NdLmxlbmd0aDtsPGY7bCs9Mil0LmRhdGEuaW5rTGlzdHNbY10ucHVzaCh7eDppLmZldGNoSWZSZWYob1tjXVtsXSkseTppLmZldGNoSWZSZWYob1tjXVtsKzFdKX0pfWlmKCF0LmFwcGVhcmFuY2Upe3ZhciBoLGQ9dC5jb2xvcj9OKHQuY29sb3IpOlswLDAsMF0scD1hLmdldCgiQ0EiKSxnPXQuYm9yZGVyU3R5bGUud2lkdGh8fDEsdj0yKmcseT1bMS8wLDEvMCwtMS8wLC0xLzBdLG09QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IobS5zKCk7IShoPW0ubigpKS5kb25lOyl7dmFyIGIsdz1BKGgudmFsdWUpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIFM9Yi52YWx1ZTt5WzBdPU1hdGgubWluKHlbMF0sUy54LXYpLHlbMV09TWF0aC5taW4oeVsxXSxTLnktdikseVsyXT1NYXRoLm1heCh5WzJdLFMueCt2KSx5WzNdPU1hdGgubWF4KHlbM10sUy55K3YpfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX19fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfW4uVXRpbC5pbnRlcnNlY3QodC5yZWN0YW5nbGUseSl8fCh0LnJlY3RhbmdsZT15KSx0Ll9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOiIiLmNvbmNhdChnLCIgdyIpLHN0cm9rZUNvbG9yOmQsc3Ryb2tlQWxwaGE6cCxwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHIpe3ZhciBuLGE9QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IoYS5zKCk7IShuPWEubigpKS5kb25lOyl7Zm9yKHZhciBpPW4udmFsdWUsbz0wLHM9aS5sZW5ndGg7bzxzO28rKyllLnB1c2goIiIuY29uY2F0KGlbb10ueCwiICIpLmNvbmNhdChpW29dLnksIiAiKS5jb25jYXQoMD09PW8/Im0iOiJsIikpO2UucHVzaCgiUyIpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm5bclswXS54LHJbMV0ueCxyWzNdLnksclsxXS55XX19KX1yZXR1cm4gdH1yZXR1cm4gXyhzLG51bGwsW3trZXk6ImNyZWF0ZU5ld0RpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1yLmFwUmVmLGk9ci5hcCxzPWUucGF0aHMsYz1lLnJlY3QsdT1lLnJvdGF0aW9uLGw9bmV3IG8uRGljdCh0KTtsLnNldCgiVHlwZSIsby5OYW1lLmdldCgiQW5ub3QiKSksbC5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkluayIpKSxsLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxsLnNldCgiUmVjdCIsYyksbC5zZXQoIklua0xpc3QiLHMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wb2ludHN9KSkpLGwuc2V0KCJGIiw0KSxsLnNldCgiQm9yZGVyIixbMCwwLDBdKSxsLnNldCgiUm90YXRlIix1KTt2YXIgZj1uZXcgby5EaWN0KHQpO3JldHVybiBsLnNldCgiQVAiLGYpLGE/Zi5zZXQoIk4iLGEpOmYuc2V0KCJOIixpKSxsfX0se2tleToiY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIHMsYyx1LGwsZixoLGQscCx2LHksbSxiLHcsayxTLHgsTyxGLFAsSSxFLGosTSxfLEwsUixOLEQsQjtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnM9dC5jb2xvcixjPXQucmVjdCx1PXQucm90YXRpb24sbD10LnBhdGhzLGY9dC50aGlja25lc3MsaD10Lm9wYWNpdHksZD1UKGMsNCkscD1kWzBdLHY9ZFsxXSx5PWRbMl0sbT1kWzNdLGI9eS1wLHc9bS12LHUlMTgwIT0wJiYoYj0oaz1bdyxiXSlbMF0sdz1rWzFdKSxTPVsiIi5jb25jYXQoZiwiIHcgMSBKIDEgaiIpLCIiLmNvbmNhdCgoMCxpLmdldFBkZkNvbG9yKShzLCExKSldLDEhPT1oJiZTLnB1c2goIi9SMCBncyIpLHg9W10sTz1BKGwpO3RyeXtmb3IoTy5zKCk7IShGPU8ubigpKS5kb25lOyl7Zm9yKFA9Ri52YWx1ZS5iZXppZXIseC5sZW5ndGg9MCx4LnB1c2goIiIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMF0pLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMV0pLCIgbSIpKSxJPTIsRT1QLmxlbmd0aDtJPEU7SSs9NilqPVAuc2xpY2UoSSxJKzYpLm1hcChhLm51bWJlclRvU3RyaW5nKS5qb2luKCIgIikseC5wdXNoKCIiLmNvbmNhdChqLCIgYyIpKTt4LnB1c2goIlMiKSxTLnB1c2goeC5qb2luKCJcbiIpKX19Y2F0Y2goZSl7Ty5lKGUpfWZpbmFsbHl7Ty5mKCl9cmV0dXJuIE09Uy5qb2luKCJcbiIpLChfPW5ldyBvLkRpY3QocikpLnNldCgiRm9ybVR5cGUiLDEpLF8uc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGb3JtIikpLF8uc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLF8uc2V0KCJCQm94IixbMCwwLGIsd10pLF8uc2V0KCJMZW5ndGgiLE0ubGVuZ3RoKSx1JiYoTD0oMCxhLmdldFJvdGF0aW9uTWF0cml4KSh1LGIsdyksXy5zZXQoIk1hdHJpeCIsTCkpLDEhPT1oJiYoUj1uZXcgby5EaWN0KHIpLE49bmV3IG8uRGljdChyKSwoRD1uZXcgby5EaWN0KHIpKS5zZXQoIkNBIixoKSxELnNldCgiVHlwZSIsby5OYW1lLmdldCgiRXh0R1N0YXRlIikpLE4uc2V0KCJSMCIsRCksUi5zZXQoIkV4dEdTdGF0ZSIsTiksXy5zZXQoIlJlc291cmNlcyIsUikpLChCPW5ldyBnLlN0cmluZ1N0cmVhbShNKSkuZGljdD1fLGUuYWJydXB0KCJyZXR1cm4iLEIpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHN9KFgpLGllPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe3ZhciBzPWEuYXBwZWFyYW5jZSYmYS5hcHBlYXJhbmNlLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtpZighYS5hcHBlYXJhbmNlfHwhc3x8IXMuaGFzKCJFeHRHU3RhdGUiKSl7YS5hcHBlYXJhbmNlJiYoMCxuLndhcm4pKCJIaWdobGlnaHRBbm5vdGF0aW9uIC0gaWdub3JpbmcgYnVpbHQtaW4gYXBwZWFyYW5jZSBzdHJlYW0uIik7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlsxLDEsMF0sdT1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGZpbGxDb2xvcjpjLGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTp1LHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQodFswXS54LCIgIikuY29uY2F0KHRbMF0ueSwiIG0iKSwiIi5jb25jYXQodFsxXS54LCIgIikuY29uY2F0KHRbMV0ueSwiIGwiKSwiIi5jb25jYXQodFszXS54LCIgIikuY29uY2F0KHRbM10ueSwiIGwiKSwiIi5jb25jYXQodFsyXS54LCIgIikuY29uY2F0KHRbMl0ueSwiIGwiKSwiZiIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX1lbHNlIGEuZGF0YS5oYXNQb3B1cD0hMTtyZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksb2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FLGEuZGF0YS5xdWFkUG9pbnRzPUQoaSxudWxsKSl7aWYoIWEuYXBwZWFyYW5jZSl7dmFyIHM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sYz1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjpzLHN0cm9rZUFscGhhOmMscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdCh0WzJdLngsIiAiKS5jb25jYXQodFsyXS55LCIgbSIpLCIiLmNvbmNhdCh0WzNdLngsIiAiKS5jb25jYXQodFszXS55LCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjtpZihhLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWSxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7dmFyIHI9KHRbMF0ueS10WzJdLnkpLzYsbj1yLGE9dFsyXS54LGk9dFsyXS55LG89dFszXS54O2UucHVzaCgiIi5jb25jYXQoYSwiICIpLmNvbmNhdChpK24sIiBtIikpO2Rve2ErPTIsbj0wPT09bj9yOjAsZS5wdXNoKCIiLmNvbmNhdChhLCIgIikuY29uY2F0KGkrbiwiIGwiKSl9d2hpbGUoYTxvKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMl0ueCxvLGktMipyLGkrMipyXX19KX19ZWxzZSBhLmRhdGEuaGFzUG9wdXA9ITE7cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLGNlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNUUklLRU9VVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoKHRbMF0ueCt0WzJdLngpLzIsIiAiKSsiIi5jb25jYXQoKHRbMF0ueSt0WzJdLnkpLzIsIiBtIiksIiIuY29uY2F0KCh0WzFdLngrdFszXS54KS8yLCIgIikrIiIuY29uY2F0KCh0WzFdLnkrdFszXS55KS8yLCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSx1ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiBqKHRoaXMsciksKGE9dC5jYWxsKHRoaXMsZSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TVEFNUCxhfXJldHVybiBfKHIpfShYKSxsZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZixjPW5ldyBoLkZpbGVTcGVjKGkuZ2V0KCJGUyIpLHMpO2EuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5ULGEuZGF0YS5maWxlPWMuc2VyaWFsaXphYmxlO3ZhciB1PWkuZ2V0KCJOYW1lIik7cmV0dXJuIGEuZGF0YS5uYW1lPXUgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykodS5uYW1lKToiUHVzaFBpbiIsYX1yZXR1cm4gXyhyKX0oWCl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZha2VVbmljb2RlRm9udD12b2lkIDAsdC5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZT1mdW5jdGlvbihlKXt2YXIgdD1lLmZvbnRTaXplLHI9ZS5mb250TmFtZSxuPWUuZm9udENvbG9yO3JldHVybiIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShyKSwiICIpLmNvbmNhdCh0LCIgVGYgIikuY29uY2F0KHcobiwhMCkpfSx0LmdldFBkZkNvbG9yPXcsdC5wYXJzZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYihlKS5wYXJzZSgpfTt2YXIgYT1yKDEzNCksaT1yKDEzNSksbz1yKDIpLHM9cigxNDMpLGM9cigxNDQpLHU9cigxMzkpO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWgoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtyZXR1cm4geT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHkoZSx0KX1mdW5jdGlvbiBtKGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxtKGUpfXZhciBiPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ5KGUsdCl9KGMsZSk7dmFyIHQscixpPSh0PWMscj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPW0odCk7aWYocil7dmFyIGk9bSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gcCh0aGlzLGMpLGkuY2FsbCh0aGlzLG5ldyB1LlN0cmluZ1N0cmVhbShlKSl9cmV0dXJuIHYoYyxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e2ZuOjAsYXJnczpbXX0sdD17Zm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpfTt0cnl7Zm9yKDtlLmFyZ3MubGVuZ3RoPTAsdGhpcy5yZWFkKGUpOylpZigwPT09dGhpcy5zYXZlZFN0YXRlc0RlcHRoKXt2YXIgcj1lLmZuLG49ZS5hcmdzO3N3aXRjaCgwfHIpe2Nhc2Ugby5PUFMuc2V0Rm9udDp2YXIgaT1mKG4sMiksYz1pWzBdLHU9aVsxXTtjIGluc3RhbmNlb2YgYS5OYW1lJiYodC5mb250TmFtZT1jLm5hbWUpLCJudW1iZXIiPT10eXBlb2YgdSYmdT4wJiYodC5mb250U2l6ZT11KTticmVhaztjYXNlIG8uT1BTLnNldEZpbGxSR0JDb2xvcjpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShuLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBvLk9QUy5zZXRGaWxsR3JheTpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0obiwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2Ugby5PUFMuc2V0RmlsbENvbG9yU3BhY2U6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKG4sMCx0LmZvbnRDb2xvciwwKX19fWNhdGNoKGUpeygwLG8ud2FybikoJ3BhcnNlRGVmYXVsdEFwcGVhcmFuY2UgLSBpZ25vcmluZyBlcnJvcnM6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gdH19XSksY30oYy5FdmFsdWF0b3JQcmVwcm9jZXNzb3IpO2Z1bmN0aW9uIHcoZSx0KXtpZihlWzBdPT09ZVsxXSYmZVsxXT09PWVbMl0pe3ZhciByPWVbMF0vMjU1O3JldHVybiIiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShyKSwiICIpLmNvbmNhdCh0PyJnIjoiRyIpfXJldHVybiBBcnJheS5mcm9tKGUsKGZ1bmN0aW9uKGUpe3JldHVybigwLGkubnVtYmVyVG9TdHJpbmcpKGUvMjU1KX0pKS5qb2luKCIgIikrIiAiLmNvbmNhdCh0PyJyZyI6IlJHIil9dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMueHJlZj10LHRoaXMud2lkdGhzPW51bGwsdGhpcy5maXJzdENoYXI9MS8wLHRoaXMubGFzdENoYXI9LTEvMCx0aGlzLmZvbnRGYW1pbHk9cjt2YXIgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSk7dGhpcy5jdHhNZWFzdXJlPW4uZ2V0Q29udGV4dCgiMmQiKSxlLl9mb250TmFtZUlkfHwoZS5fZm9udE5hbWVJZD0xKSx0aGlzLmZvbnROYW1lPWEuTmFtZS5nZXQoIkludmFsaWRQREZqc0ZvbnRfIi5jb25jYXQociwiXyIpLmNvbmNhdChlLl9mb250TmFtZUlkKyspKX1yZXR1cm4gdihlLFt7a2V5OiJ0b1VuaWNvZGVSZWYiLGdldDpmdW5jdGlvbigpe2lmKCFlLl90b1VuaWNvZGVSZWYpe3ZhciB0PWUudG9Vbmljb2RlU3RyZWFtPW5ldyB1LlN0cmluZ1N0cmVhbSgiL0NJREluaXQgL1Byb2NTZXQgZmluZHJlc291cmNlIGJlZ2luXG4xMiBkaWN0IGJlZ2luXG5iZWdpbmNtYXBcbi9DSURTeXN0ZW1JbmZvXG48PCAvUmVnaXN0cnkgKEFkb2JlKVxuL09yZGVyaW5nIChVQ1MpIC9TdXBwbGVtZW50IDAgPj4gZGVmXG4vQ01hcE5hbWUgL0Fkb2JlLUlkZW50aXR5LVVDUyBkZWZcbi9DTWFwVHlwZSAyIGRlZlxuMSBiZWdpbmNvZGVzcGFjZXJhbmdlXG48MDAwMD4gPEZGRkY+XG5lbmRjb2Rlc3BhY2VyYW5nZVxuMSBiZWdpbmJmcmFuZ2VcbjwwMDAwPiA8RkZGRj4gPDAwMDA+XG5lbmRiZnJhbmdlXG5lbmRjbWFwIENNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcCBlbmQgZW5kIikscj1uZXcgYS5EaWN0KHRoaXMueHJlZik7dC5kaWN0PXIsci5zZXQoIkxlbmd0aCIsMzQ2KSxlLl90b1VuaWNvZGVSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX3RvVW5pY29kZVJlZn19LHtrZXk6ImZvbnREZXNjcmlwdG9yUmVmIixnZXQ6ZnVuY3Rpb24oKXtpZighZS5fZm9udERlc2NyaXB0b3JSZWYpe3ZhciB0PW5ldyBhLkRpY3QodGhpcy54cmVmKTt0LnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udERlc2NyaXB0b3IiKSksdC5zZXQoIkZvbnROYW1lIix0aGlzLmZvbnROYW1lKSx0LnNldCgiRm9udEZhbWlseSIsIk15cmlhZFBybyBSZWd1bGFyIiksdC5zZXQoIkZvbnRCQm94IixbMCwwLDAsMF0pLHQuc2V0KCJGb250U3RyZXRjaCIsYS5OYW1lLmdldCgiTm9ybWFsIikpLHQuc2V0KCJGb250V2VpZ2h0Iiw0MDApLHQuc2V0KCJJdGFsaWNBbmdsZSIsMCksZS5fZm9udERlc2NyaXB0b3JSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX2ZvbnREZXNjcmlwdG9yUmVmfX0se2tleToiZGVzY2VuZGFudEZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtlLnNldCgiQmFzZUZvbnQiLHRoaXMuZm9udE5hbWUpLGUuc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJGb250IikpLGUuc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJDSURGb250VHlwZTAiKSksZS5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxlLnNldCgiRmlyc3RDaGFyIix0aGlzLmZpcnN0Q2hhciksZS5zZXQoIkxhc3RDaGFyIix0aGlzLmxhc3RDaGFyKSxlLnNldCgiRm9udERlc2NyaXB0b3IiLHRoaXMuZm9udERlc2NyaXB0b3JSZWYpLGUuc2V0KCJEVyIsMWUzKTt2YXIgdCxyLG49W10saT1udWxsLG89bnVsbCxzPWwoKHI9dGhpcy53aWR0aHMuZW50cmllcygpLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGQoZSl9KHIpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHIpfHxoKHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKS5zb3J0KCkpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9Zih0LnZhbHVlLDIpLHU9Y1swXSxwPWNbMV07aT91PT09aStvLmxlbmd0aD9vLnB1c2gocCk6KG4ucHVzaChpLG8pLGk9dSxvPVtwXSk6KGk9dSxvPVtwXSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfWkmJm4ucHVzaChpLG8pLGUuc2V0KCJXIixuKTt2YXIgZz1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIGcuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksZy5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxnLnNldCgiU3VwcGxlbWVudCIsMCksZS5zZXQoIkNJRFN5c3RlbUluZm8iLGcpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToiYmFzZUZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtyZXR1cm4gZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKSxlLnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udCIpKSxlLnNldCgiU3VidHlwZSIsYS5OYW1lLmdldCgiVHlwZTAiKSksZS5zZXQoIkVuY29kaW5nIixhLk5hbWUuZ2V0KCJJZGVudGl0eS1IIikpLGUuc2V0KCJEZXNjZW5kYW50Rm9udHMiLFt0aGlzLmRlc2NlbmRhbnRGb250UmVmXSksZS5zZXQoIlRvVW5pY29kZSIsdGhpcy50b1VuaWNvZGVSZWYpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToicmVzb3VyY2VzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgYS5EaWN0KHRoaXMueHJlZiksdD1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIHQuc2V0KHRoaXMuZm9udE5hbWUubmFtZSx0aGlzLmJhc2VGb250UmVmKSxlLnNldCgiRm9udCIsdCksZX19LHtrZXk6Il9jcmVhdGVDb250ZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRocz1uZXcgTWFwLHRoaXMuY3R4TWVhc3VyZS5mb250PSIxMDAwcHggIi5jb25jYXQodGhpcy5mb250RmFtaWx5KSx0aGlzLmN0eE1lYXN1cmV9fSx7a2V5OiJjcmVhdGVGb250UmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxuPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYSxpPWwodC52YWx1ZS5zcGxpdCgiIikpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOyl7dmFyIG89YS52YWx1ZSxzPW8uY2hhckNvZGVBdCgwKTtpZighdGhpcy53aWR0aHMuaGFzKHMpKXt2YXIgYz1yLm1lYXN1cmVUZXh0KG8pLHU9TWF0aC5jZWlsKGMud2lkdGgpO3RoaXMud2lkdGhzLnNldChzLHUpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKHMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgocyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHRoaXMucmVzb3VyY2VzfX0se2tleToiY3JlYXRlQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixzKXt2YXIgYyxoPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxkPVtdLHA9LTEvMCxnPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihnLnMoKTshKGM9Zy5uKCkpLmRvbmU7KXt2YXIgdj1jLnZhbHVlO2QucHVzaCh2KTt2YXIgeT1oLm1lYXN1cmVUZXh0KHYpLndpZHRoO3A9TWF0aC5tYXgocCx5KTt2YXIgbSxiPWwodi5zcGxpdCgiIikpO3RyeXtmb3IoYi5zKCk7IShtPWIubigpKS5kb25lOyl7dmFyIGs9bS52YWx1ZSxTPWsuY2hhckNvZGVBdCgwKSx4PXRoaXMud2lkdGhzLmdldChTKTtpZih2b2lkIDA9PT14KXt2YXIgTz1oLm1lYXN1cmVUZXh0KGspO3g9TWF0aC5jZWlsKE8ud2lkdGgpLHRoaXMud2lkdGhzLnNldChTLHgpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKFMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgoUyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9cCo9bi8xZTM7dmFyIEE9Zih0LDQpLEM9QVswXSxGPUFbMV0sUD1BWzJdLUMsVD1BWzNdLUY7aWYociUxODAhPTApe3ZhciBJPVtULFBdO1A9SVswXSxUPUlbMV19dmFyIEU9MTtwPlAmJihFPVAvcCk7dmFyIGo9MSxNPW8uTElORV9GQUNUT1IqbixfPW8uTElORV9ERVNDRU5UX0ZBQ1RPUipuLEw9TSpkLmxlbmd0aDtMPlQmJihqPVQvTCk7Zm9yKHZhciBSPW4qTWF0aC5taW4oRSxqKSxOPVsicSIsIjAgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShQKSwiICIpLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUKSwiIHJlIFcgbiIpLCJCVCIsIjEgMCAwIDEgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUK18pLCIgVG0gMCBUYyAiKS5jb25jYXQodyhzLCEwKSksIi8iLmNvbmNhdCh0aGlzLmZvbnROYW1lLm5hbWUsIiAiKS5jb25jYXQoKDAsaS5udW1iZXJUb1N0cmluZykoUiksIiBUZiIpXSxEPSgwLGkubnVtYmVyVG9TdHJpbmcpKE0pLEI9MCxVPWQ7QjxVLmxlbmd0aDtCKyspe3ZhciAkPVVbQl07Ti5wdXNoKCIwIC0iLmNvbmNhdChELCIgVGQgPCIpLmNvbmNhdCgoMCxpLnN0cmluZ1RvVVRGMTZIZXhTdHJpbmcpKCQpLCI+IFRqIikpfU4ucHVzaCgiRVQiLCJRIik7dmFyIFg9Ti5qb2luKCJcbiIpLEg9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2lmKEguc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJGb3JtIikpLEguc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYT2JqZWN0IikpLEguc2V0KCJCQm94IixbMCwwLFAsVF0pLEguc2V0KCJMZW5ndGgiLFgubGVuZ3RoKSxILnNldCgiUmVzb3VyY2VzIix0aGlzLnJlc291cmNlcykscil7dmFyIHE9KDAsaS5nZXRSb3RhdGlvbk1hdHJpeCkocixQLFQpO0guc2V0KCJNYXRyaXgiLHEpfXZhciBHPW5ldyB1LlN0cmluZ1N0cmVhbShYKTtyZXR1cm4gRy5kaWN0PUgsR319XSksZX0oKTt0LkZha2VVbmljb2RlRm9udD1rfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29sb3JTcGFjZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3AodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbG9yU3BhY2UuIiksdGhpcy5uYW1lPXQsdGhpcy5udW1Db21wcz1yfXZhciB0LHI7cmV0dXJuIHYoZSxbe2tleToiZ2V0UmdiIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtyZXR1cm4gdGhpcy5nZXRSZ2JJdGVtKGUsdCxyLDApLHJ9fSx7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbSIpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyIil9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCIpfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUuaXNEZWZhdWx0RGVjb2RlKHQsdGhpcy5udW1Db21wcyl9fSx7a2V5OiJmaWxsUmdiIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9dCpyLGw9bnVsbCxmPTE8PG8saD1yIT09YXx8dCE9PW47aWYodGhpcy5pc1Bhc3N0aHJvdWdoKG8pKWw9cztlbHNlIGlmKDE9PT10aGlzLm51bUNvbXBzJiZ1PmYmJiJEZXZpY2VHcmF5IiE9PXRoaXMubmFtZSYmIkRldmljZVJHQiIhPT10aGlzLm5hbWUpe2Zvcih2YXIgZD1vPD04P25ldyBVaW50OEFycmF5KGYpOm5ldyBVaW50MTZBcnJheShmKSxwPTA7cDxmO3ArKylkW3BdPXA7dmFyIGc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqZik7aWYodGhpcy5nZXRSZ2JCdWZmZXIoZCwwLGYsZywwLG8sMCksaCl7bD1uZXcgVWludDhBcnJheSgzKnUpO2Zvcih2YXIgdj0wLHk9MDt5PHU7Kyt5KXt2YXIgbT0zKnNbeV07bFt2KytdPWdbbV0sbFt2KytdPWdbbSsxXSxsW3YrK109Z1ttKzJdfX1lbHNlIGZvcih2YXIgYj0wLHc9MDt3PHU7Kyt3KXt2YXIgaz0zKnNbd107ZVtiKytdPWdba10sZVtiKytdPWdbaysxXSxlW2IrK109Z1trKzJdLGIrPWN9fWVsc2UgaD8obD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyp1KSx0aGlzLmdldFJnYkJ1ZmZlcihzLDAsdSxsLDAsbywwKSk6dGhpcy5nZXRSZ2JCdWZmZXIocywwLG4qaSxlLDAsbyxjKTtpZihsKWlmKGgpIWZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe289MSE9PW8/MDpvO2Zvcih2YXIgcyxjPXIvYSx1PW4vaSxsPTAsZj1uZXcgVWludDE2QXJyYXkoYSksaD0zKnIsZD0wO2Q8YTtkKyspZltkXT0zKk1hdGguZmxvb3IoZCpjKTtmb3IodmFyIHA9MDtwPGk7cCsrKWZvcih2YXIgZz1NYXRoLmZsb29yKHAqdSkqaCx2PTA7djxhO3YrKylzPWcrZlt2XSx0W2wrK109ZVtzKytdLHRbbCsrXT1lW3MrK10sdFtsKytdPWVbcysrXSxsKz1vfShsLGUsdCxyLG4sYSxjKTtlbHNlIGZvcih2YXIgUz0wLHg9MCxPPTAsQT1uKmk7TzxBO08rKyllW1MrK109bFt4KytdLGVbUysrXT1sW3grK10sZVtTKytdPWxbeCsrXSxTKz1jfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMCl9fV0sW3trZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJsb2NhbENvbG9yU3BhY2VDYWNoZSIgYXJndW1lbnQuJyk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRDb2xvclNwYWNlIiBhcmd1bWVudC4nKTt2YXIgaSxvO2UgaW5zdGFuY2VvZiBhLlJlZiYmKG89ZSxlPXQuZmV0Y2goZSkpLGUgaW5zdGFuY2VvZiBhLk5hbWUmJihpPWUubmFtZSksKGl8fG8pJiZyLnNldChpLG8sbil9fSx7a2V5OiJnZXRDYWNoZWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZighcil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZihlIGluc3RhbmNlb2YgYS5SZWYpe3ZhciBuPXIuZ2V0QnlSZWYoZSk7aWYobilyZXR1cm4gbjt0cnl7ZT10LmZldGNoKGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBvLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGV9fWlmKGUgaW5zdGFuY2VvZiBhLk5hbWUpe3ZhciBpPXIuZ2V0QnlOYW1lKGUubmFtZSk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH19LHtrZXk6InBhcnNlQXN5bmMiLHZhbHVlOih0PWgoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4sYSxpLG8scyxjO3JldHVybiBoKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHI9dC5jcyxuPXQueHJlZixhPXQucmVzb3VyY2VzLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LnBkZkZ1bmN0aW9uRmFjdG9yeSxzPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsYz10aGlzLl9wYXJzZShyLG4saSxvKSx0aGlzLl9jYWNoZShyLG4scyxjKSxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpLHI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT10LmFwcGx5KGUscik7ZnVuY3Rpb24gbyhlKXtkKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtkKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNzLHI9ZS54cmVmLG49ZS5yZXNvdXJjZXMsYT12b2lkIDA9PT1uP251bGw6bixpPWUucGRmRnVuY3Rpb25GYWN0b3J5LG89ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxzPXRoaXMuZ2V0Q2FjaGVkKHQscixvKTtpZihzKXJldHVybiBzO3ZhciBjPXRoaXMuX3BhcnNlKHQscixhLGkpO3JldHVybiB0aGlzLl9jYWNoZSh0LHIsbyxjKSxjfX0se2tleToiX3BhcnNlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoKGU9dC5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2YgYS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiUGF0dGVybiI6cmV0dXJuIG5ldyBiKG51bGwpO2RlZmF1bHQ6aWYociBpbnN0YW5jZW9mIGEuRGljdCl7dmFyIG89ci5nZXQoIkNvbG9yU3BhY2UiKTtpZihvIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcz1vLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBhLk5hbWUpcmV0dXJuIHRoaXMuX3BhcnNlKHMsdCxyLGkpO2U9czticmVha319fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogIi5jb25jYXQoZS5uYW1lKSl9aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGMsdSxsLGYsaCxkLHA9dC5mZXRjaElmUmVmKGVbMF0pLm5hbWU7c3dpdGNoKHApe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiQ2FsR3JheSI6cmV0dXJuIGY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpLGQ9Yy5nZXQoIkdhbW1hIiksbmV3IE8oZixoLGQpO2Nhc2UiQ2FsUkdCIjpmPShjPXQuZmV0Y2hJZlJlZihlWzFdKSkuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKSxoPWMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKSxkPWMuZ2V0QXJyYXkoIkdhbW1hIik7dmFyIGc9Yy5nZXRBcnJheSgiTWF0cml4Iik7cmV0dXJuIG5ldyBBKGYsaCxkLGcpO2Nhc2UiSUNDQmFzZWQiOnZhciB2PXQuZmV0Y2hJZlJlZihlWzFdKS5kaWN0O3U9di5nZXQoIk4iKTt2YXIgeT12LmdldCgiQWx0ZXJuYXRlIik7aWYoeSl7dmFyIGs9dGhpcy5fcGFyc2UoeSx0LHIsaSk7aWYoay5udW1Db21wcz09PXUpcmV0dXJuIGs7KDAsbi53YXJuKSgiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LiIpfWlmKDE9PT11KXJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtpZigzPT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtpZig0PT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7YnJlYWs7Y2FzZSJQYXR0ZXJuIjpyZXR1cm4obD1lWzFdfHxudWxsKSYmKGw9dGhpcy5fcGFyc2UobCx0LHIsaSkpLG5ldyBiKGwpO2Nhc2UiSSI6Y2FzZSJJbmRleGVkIjpsPXRoaXMuX3BhcnNlKGVbMV0sdCxyLGkpO3ZhciBTPXQuZmV0Y2hJZlJlZihlWzJdKSsxLHg9dC5mZXRjaElmUmVmKGVbM10pO3JldHVybiBuZXcgdyhsLFMseCk7Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOnZhciBGPXQuZmV0Y2hJZlJlZihlWzFdKTt1PUFycmF5LmlzQXJyYXkoRik/Ri5sZW5ndGg6MSxsPXRoaXMuX3BhcnNlKGVbMl0sdCxyLGkpO3ZhciBQPWkuY3JlYXRlKGVbM10pO3JldHVybiBuZXcgbSh1LGwsUCk7Y2FzZSJMYWIiOmY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO3ZhciBUPWMuZ2V0QXJyYXkoIlJhbmdlIik7cmV0dXJuIG5ldyBDKGYsaCxUKTtkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmltcGxlbWVudGVkIENvbG9yU3BhY2Ugb2JqZWN0OiAiLmNvbmNhdChwKSl9fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICIuY29uY2F0KGUpKX19LHtrZXk6ImlzRGVmYXVsdERlY29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyKnQhPT1lLmxlbmd0aClyZXR1cm4oMCxuLndhcm4pKCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoIiksITA7Zm9yKHZhciByPTAsYT1lLmxlbmd0aDtyPGE7cis9MilpZigwIT09ZVtyXXx8MSE9PWVbcisxXSlyZXR1cm4hMTtyZXR1cm4hMH19LHtrZXk6InNpbmdsZXRvbnMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJzaW5nbGV0b25zIix7Z2V0IGdyYXkoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZ3JheSIsbmV3IGspfSxnZXQgcmdiKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJnYiIsbmV3IFMpfSxnZXQgY215aygpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjbXlrIixuZXcgeCl9fSl9fV0pLGV9KCk7dC5Db2xvclNwYWNlPXk7dmFyIG09ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHAodGhpcyxyKSwoaT10LmNhbGwodGhpcywiQWx0ZXJuYXRlIixlKSkuYmFzZT1uLGkudGludEZuPWEsaS50bXBCdWY9bmV3IEZsb2F0MzJBcnJheShuLm51bUNvbXBzKSxpfXJldHVybiB2KHIsW3trZXk6ImdldFJnYkl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPXRoaXMudG1wQnVmO3RoaXMudGludEZuKGUsdCxhLDApLHRoaXMuYmFzZS5nZXRSZ2JJdGVtKGEsMCxyLG4pfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU9dGhpcy50aW50Rm4sbD10aGlzLmJhc2UsZj0xLygoMTw8aSktMSksaD1sLm51bUNvbXBzLGQ9bC51c2VzWmVyb1RvT25lUmFuZ2UscD0obC5pc1Bhc3N0aHJvdWdoKDgpfHwhZCkmJjA9PT1vLGc9cD9hOjAsdj1wP246bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgqcikseT10aGlzLm51bUNvbXBzLG09bmV3IEZsb2F0MzJBcnJheSh5KSxiPW5ldyBGbG9hdDMyQXJyYXkoaCk7Zm9yKHM9MDtzPHI7cysrKXtmb3IoYz0wO2M8eTtjKyspbVtjXT1lW3QrK10qZjtpZih1KG0sMCxiLDApLGQpZm9yKGM9MDtjPGg7YysrKXZbZysrXT0yNTUqYltjXTtlbHNlIGwuZ2V0UmdiSXRlbShiLDAsdixnKSxnKz1ofXB8fGwuZ2V0UmdiQnVmZmVyKHYsMCxyLG4sYSw4LG8pfX0se2tleToiZ2V0T3V0cHV0TGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzL3RoaXMubnVtQ29tcHMsdCl9fV0pLHJ9KHkpLGI9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gcCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLCJQYXR0ZXJuIixudWxsKSkuYmFzZT1lLG59cmV0dXJuIHYocixbe2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZSIpfX1dKSxyfSh5KSx3PWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLG8pe3ZhciBzO3AodGhpcyxyKSwocz10LmNhbGwodGhpcywiSW5kZXhlZCIsMSkpLmJhc2U9ZSxzLmhpZ2hWYWw9YTt2YXIgYz1lLm51bUNvbXBzKmE7aWYocy5sb29rdXA9bmV3IFVpbnQ4QXJyYXkoYyksbyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSl7dmFyIHU9by5nZXRCeXRlcyhjKTtzLmxvb2t1cC5zZXQodSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICIuY29uY2F0KG8pKTtmb3IodmFyIGw9MDtsPGM7KytsKXMubG9va3VwW2xdPTI1NSZvLmNoYXJDb2RlQXQobCl9cmV0dXJuIHN9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5iYXNlLm51bUNvbXBzLGk9ZVt0XSphO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAsaSwxLHIsbiw4LDApfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtmb3IodmFyIHM9dGhpcy5iYXNlLGM9cy5udW1Db21wcyx1PXMuZ2V0T3V0cHV0TGVuZ3RoKGMsbyksbD10aGlzLmxvb2t1cCxmPTA7ZjxyOysrZil7dmFyIGg9ZVt0KytdKmM7cy5nZXRSZ2JCdWZmZXIobCxoLDEsbixhLDgsbyksYSs9dX19fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMsdCl9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fCgyIT09ZS5sZW5ndGg/KCgwLG4ud2FybikoIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0IiksITApOiFOdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDE/KCgwLG4ud2FybikoIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCIpLCEwKTowPT09ZVswXSYmZVsxXT09PSgxPDx0KS0xKX19XSkscn0oeSksaz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlR3JheSIsMSl9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9MjU1KmVbdF07cltuXT1yW24rMV09cltuKzJdPWF9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe2Zvcih2YXIgcz0yNTUvKCgxPDxpKS0xKSxjPXQsdT1hLGw9MDtsPHI7KytsKXt2YXIgZj1zKmVbYysrXTtuW3UrK109ZixuW3UrK109ZixuW3UrK109Zix1Kz1vfX19LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KX19XSkscn0oeSksUz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlUkdCIiwzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtyW25dPTI1NSplW3RdLHJbbisxXT0yNTUqZVt0KzFdLHJbbisyXT0yNTUqZVt0KzJdfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtpZig4IT09aXx8MCE9PW8pZm9yKHZhciBzPTI1NS8oKDE8PGkpLTEpLGM9dCx1PWEsbD0wO2w8cjsrK2wpblt1KytdPXMqZVtjKytdLG5bdSsrXT1zKmVbYysrXSxuW3UrK109cyplW2MrK10sdSs9bztlbHNlIG4uc2V0KGUuc3ViYXJyYXkodCx0KzMqciksYSl9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDg9PT1lfX1dKSxyfSh5KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEpe3ZhciBpPWVbdF0qcixvPWVbdCsxXSpyLHM9ZVt0KzJdKnIsYz1lW3QrM10qcjtuW2FdPTI1NStpKigtNC4zODczMzIzODQ2MDk5ODgqaSs1NC40ODYxNTE5NDE4OTE3NipvKzE4LjgyMjkwNTAyMTY1MzAyKnMrMjEyLjI1NjYyNDUxNjM5NTg1KmMtMjg1LjIzMzEwMjYxMzcwMDQpK28qKDEuNzE0OTc2MzQ3NzM2MjEzNCpvLTUuNjA5NjczNjkwNDA0NzMxNSpzKy0xNy44NzM4NzA4NjE0MTU0NDQqYy01LjQ5NzAwNjQyNzE5NjM2NikrcyooLTIuNTIxNzM0MDEzMTY4MzAzMypzLTIxLjI0ODkyMzMzNzM1MzA3MypjKzE3LjUxMTkyNzA4NDE4MTMpK2MqKC0yMS44NjEyMjE0NzQ2MzYwNSpjLTE4OS40ODE4MDgzNTkyMjc0NyksblthKzFdPTI1NStpKig4Ljg0MTA0MTQyMjAzNjE0OSppKzYwLjExODAyNzA0NTU5NzM2NipvKzYuODcxNDI1NTkyMDQ5MDA3KnMrMzEuMTU5MTAwMTMwMDU1OTIyKmMtNzkuMjk3MDg0NDgxNjU0OCkrbyooLTE1LjMxMDM2MTMwNjk2NzgxNypvKzE3LjU3NTI1MTI2MTEwOTQ4MipzKzEzMS4zNTI1MDkxMjQ5Mzk3NipjLTE5MC45NDUzMzAyNTg4OTUxKStzKig0LjQ0NDMzOTEwMjg1MjczOSpzKzkuODYzMjg2MTQ5MzQwNSpjLTI0Ljg2NzQxNTgyNTU1ODc4KStjKigtMjAuNzM3MzI1NDcxMTgxMDM0KmMtMTg3LjgwNDUzNzA5NzE5NTc4KSxuW2ErMl09MjU1K2kqKC44ODQyNTIyNDMwMDAzMjk2KmkrOC4wNzg2Nzc1MDMxMTI5MjgqbyszMC44OTk3ODMwOTcwMzcyOSpzLS4yMzg4MzIzODY4OTE3ODkzNCpjLTE0LjE4MzU3Njc5OTY3MzI4NikrbyooMTAuNDk1OTMyNzM0MzIwNzIqbys2My4wMjM3ODQ5NDc1NDA1MipzKzUwLjYwNjk1NzY1NjM2MDczNCpjLTExMi4yMzg4NDI1MzcxOTI0OCkrcyooLjAzMjk2MDQxMTE0ODczMjE3KnMrMTE1LjYwMzg0NDQ5NjQ2NjQxKmMtMTkzLjU4MjA5MzU2ODYxNTA1KStjKigtMjIuMzM4MTY4MDczMDk4ODYqYy0xODAuMTI2MTM5NzQ3MDgzNjcpfXJldHVybiBmdW5jdGlvbih0KXtzKG4sdCk7dmFyIHI9dShuKTtmdW5jdGlvbiBuKCl7cmV0dXJuIHAodGhpcyxuKSxyLmNhbGwodGhpcywiRGV2aWNlQ01ZSyIsNCl9cmV0dXJuIHYobixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0LHIsMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbih0LHIsbixhLGksbyxzKXtmb3IodmFyIGM9MS8oKDE8PG8pLTEpLHU9MDt1PG47dSsrKWUodCxyLGMsYSxpKSxyKz00LGkrPTMrc319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fV0pLG59KHkpfSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpKXt2YXIgbz10W3JdKmkscz1NYXRoLnBvdyhvLGUuRyksYz1lLllXKnMsdT1NYXRoLm1heCgyOTUuOCpNYXRoLnBvdyhjLC4zMzMzMzMzMzMzMzMzMzMzKS00MC44LDApO25bYV09dSxuW2ErMV09dSxuW2ErMl09dX1yZXR1cm4gZnVuY3Rpb24odCl7cyhhLHQpO3ZhciByPXUoYSk7ZnVuY3Rpb24gYShlLHQsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89ci5jYWxsKHRoaXMsIkNhbEdyYXkiLDEpLCFlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsR3JheSIpO2lmKHQ9dHx8WzAsMCwwXSxpPWl8fDEsby5YVz1lWzBdLG8uWVc9ZVsxXSxvLlpXPWVbMl0sby5YQj10WzBdLG8uWUI9dFsxXSxvLlpCPXRbMl0sby5HPWksby5YVzwwfHxvLlpXPDB8fDEhPT1vLllXKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgIi5jb25jYXQoby5uYW1lKSsiLCBubyBmYWxsYmFjayBhdmFpbGFibGUiKTtyZXR1cm4oby5YQjwwfHxvLllCPDB8fG8uWkI8MCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICIuY29uY2F0KG8ubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSksby5YQj1vLllCPW8uWkI9MCksMD09PW8uWEImJjA9PT1vLllCJiYwPT09by5aQnx8KDAsbi53YXJuKSgiIi5jb25jYXQoby5uYW1lLCIsIEJsYWNrUG9pbnQ6IFhCOiAiKS5jb25jYXQoby5YQiwiLCBZQjogIikuY29uY2F0KG8uWUIsIiwgIikrIlpCOiAiLmNvbmNhdChvLlpCLCIsIG9ubHkgZGVmYXVsdCB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4iKSksby5HPDEmJigoMCxuLmluZm8pKCJJbnZhbGlkIEdhbW1hOiAiLmNvbmNhdChvLkcsIiBmb3IgIikuY29uY2F0KG8ubmFtZSwiLCAiKSsiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIiksby5HPTEpLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0aGlzLHQscixuLGEsMSl9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKHQscixuLGEsaSxvLHMpe2Zvcih2YXIgYz0xLygoMTw8byktMSksdT0wO3U8bjsrK3UpZSh0aGlzLHQscixhLGksYykscis9MSxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCl9fV0pLGF9KHkpfSgpLEE9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KFsuODk1MSwuMjY2NCwtLjE2MTQsLS43NTAyLDEuNzEzNSwuMDM2NywuMDM4OSwtLjA2ODUsMS4wMjk2XSksdD1uZXcgRmxvYXQzMkFycmF5KFsuOTg2OTkyOSwtLjE0NzA1NDMsLjE1OTk2MjcsLjQzMjMwNTMsLjUxODM2MDMsLjA0OTI5MTIsLS4wMDg1Mjg3LC4wNDAwNDI4LC45Njg0ODY3XSkscj1uZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsLTEuNTM3MTM4NSwtLjQ5ODUzMTQsLS45NjkyNjYsMS44NzYwMTA4LC4wNDE1NTYsLjA1NTY0MzQsLS4yMDQwMjU5LDEuMDU3MjI1Ml0pLGE9bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKSxpPW5ldyBGbG9hdDMyQXJyYXkoMyksbz1uZXcgRmxvYXQzMkFycmF5KDMpLGM9bmV3IEZsb2F0MzJBcnJheSgzKSxsPU1hdGgucG93KDI0LzExNiwzKS84O2Z1bmN0aW9uIGYoZSx0LHIpe3JbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl0sclsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXSxyWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGU8PS4wMDMxMzA4P2QoMCwxLDEyLjkyKmUpOmU+PS45OTU1NDUyNT8xOmQoMCwxLDEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKHQscikpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGU8MD8tZygtZSk6ZT44P01hdGgucG93KChlKzE2KS8xMTYsMyk6ZSpsfWZ1bmN0aW9uIG0obixzLHUsbCxwLHYpe3ZhciB5PWQoMCwxLHNbdV0qdiksbT1kKDAsMSxzW3UrMV0qdiksYj1kKDAsMSxzW3UrMl0qdiksdz0xPT09eT8xOk1hdGgucG93KHksbi5HUiksaz0xPT09bT8xOk1hdGgucG93KG0sbi5HRyksUz0xPT09Yj8xOk1hdGgucG93KGIsbi5HQikseD1uLk1YQSp3K24uTVhCKmsrbi5NWEMqUyxPPW4uTVlBKncrbi5NWUIqaytuLk1ZQypTLEE9bi5NWkEqdytuLk1aQiprK24uTVpDKlMsQz1vO0NbMF09eCxDWzFdPU8sQ1syXT1BO3ZhciBGPWM7IWZ1bmN0aW9uKHIsbixhKXtpZigxPT09clswXSYmMT09PXJbMl0pcmV0dXJuIGFbMF09blswXSxhWzFdPW5bMV0sdm9pZChhWzJdPW5bMl0pO3ZhciBvPWE7ZihlLG4sbyk7dmFyIHM9aTshZnVuY3Rpb24oZSx0LHIpe3JbMF09MSp0WzBdL2VbMF0sclsxXT0xKnRbMV0vZVsxXSxyWzJdPTEqdFsyXS9lWzJdfShyLG8scyksZih0LHMsYSl9KG4ud2hpdGVQb2ludCxDLEYpO3ZhciBQPW87IWZ1bmN0aW9uKGUsdCxyKXtpZigwPT09ZVswXSYmMD09PWVbMV0mJjA9PT1lWzJdKXJldHVybiByWzBdPXRbMF0sclsxXT10WzFdLHZvaWQoclsyXT10WzJdKTt2YXIgbj1nKDApLGE9KDEtbikvKDEtZyhlWzBdKSksaT0xLWEsbz0oMS1uKS8oMS1nKGVbMV0pKSxzPTEtbyxjPSgxLW4pLygxLWcoZVsyXSkpLHU9MS1jO3JbMF09dFswXSphK2ksclsxXT10WzFdKm8rcyxyWzJdPXRbMl0qYyt1fShuLmJsYWNrUG9pbnQsRixQKTt2YXIgVD1jOyFmdW5jdGlvbihyLG4sYSl7dmFyIG89YTtmKGUsbixvKTt2YXIgcz1pOyFmdW5jdGlvbihlLHQscil7clswXT0uOTUwNDcqdFswXS9lWzBdLHJbMV09MSp0WzFdL2VbMV0sclsyXT0xLjA4ODgzKnRbMl0vZVsyXX0ocixvLHMpLGYodCxzLGEpfShhLFAsVCk7dmFyIEk9bztmKHIsVCxJKSxsW3BdPTI1NSpoKElbMF0pLGxbcCsxXT0yNTUqaChJWzFdKSxsW3ArMl09MjU1KmgoSVsyXSl9cmV0dXJuIGZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLGksbyl7dmFyIHM7aWYocCh0aGlzLHIpLHM9dC5jYWxsKHRoaXMsIkNhbFJHQiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTthPWF8fG5ldyBGbG9hdDMyQXJyYXkoMyksaT1pfHxuZXcgRmxvYXQzMkFycmF5KFsxLDEsMV0pLG89b3x8bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwxLDAsMCwwLDFdKTt2YXIgYz1lWzBdLHU9ZVsxXSxsPWVbMl07cy53aGl0ZVBvaW50PWU7dmFyIGY9YVswXSxoPWFbMV0sZD1hWzJdO2lmKHMuYmxhY2tQb2ludD1hLHMuR1I9aVswXSxzLkdHPWlbMV0scy5HQj1pWzJdLHMuTVhBPW9bMF0scy5NWUE9b1sxXSxzLk1aQT1vWzJdLHMuTVhCPW9bM10scy5NWUI9b1s0XSxzLk1aQj1vWzVdLHMuTVhDPW9bNl0scy5NWUM9b1s3XSxzLk1aQz1vWzhdLGM8MHx8bDwwfHwxIT09dSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICIuY29uY2F0KHMubmFtZSkrIiwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7cmV0dXJuKGY8MHx8aDwwfHxkPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50IGZvciAiLmNvbmNhdChzLm5hbWUsIiBbIikuY29uY2F0KGYsIiwgIikuY29uY2F0KGgsIiwgIikuY29uY2F0KGQsIl0sICIpKyJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSxzLmJsYWNrUG9pbnQ9bmV3IEZsb2F0MzJBcnJheSgzKSksKHMuR1I8MHx8cy5HRzwwfHxzLkdCPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBHYW1tYSBbIi5jb25jYXQocy5HUiwiLCAiKS5jb25jYXQocy5HRywiLCAiKS5jb25jYXQocy5HQiwiXSBmb3IgIikrIiIuY29uY2F0KHMubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSkscy5HUj1zLkdHPXMuR0I9MSksc31yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXttKHRoaXMsZSx0LHIsbiwxKX19LHtrZXk6ImdldFJnYkJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7Zm9yKHZhciBzPTEvKCgxPDxpKS0xKSxjPTA7YzxyOysrYyltKHRoaXMsZSx0LG4sYSxzKSx0Kz0zLGErPTMrb319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9fV0pLHJ9KHkpfSgpLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj02LzI5P01hdGgucG93KGUsMyk6MTA4Lzg0MSooZS00LzI5KX1mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiByK2UqKG4tcikvdH1mdW5jdGlvbiByKHIsbixhLGksbyxzKXt2YXIgYz1uW2FdLHU9blthKzFdLGw9blthKzJdOyExIT09aSYmKGM9dChjLGksMCwxMDApLHU9dCh1LGksci5hbWluLHIuYW1heCksbD10KGwsaSxyLmJtaW4sci5ibWF4KSksdT5yLmFtYXg/dT1yLmFtYXg6dTxyLmFtaW4mJih1PXIuYW1pbiksbD5yLmJtYXg/bD1yLmJtYXg6bDxyLmJtaW4mJihsPXIuYm1pbik7dmFyIGYsaCxkLHA9KGMrMTYpLzExNixnPXArdS81MDAsdj1wLWwvMjAwLHk9ci5YVyplKGcpLG09ci5ZVyplKHApLGI9ci5aVyplKHYpO3IuWlc8MT8oZj0zLjEzMzkqeSstMS42MTcqbSstLjQ5MDYqYixoPS0uOTc4NSp5KzEuOTE2Km0rLjAzMzMqYixkPS4wNzIqeSstLjIyOSptKzEuNDA1NypiKTooZj0zLjI0MDYqeSstMS41MzcyKm0rLS40OTg2KmIsaD0tLjk2ODkqeSsxLjg3NTgqbSsuMDQxNSpiLGQ9LjA1NTcqeSstLjIwNCptKzEuMDU3KmIpLG9bc109MjU1Kk1hdGguc3FydChmKSxvW3MrMV09MjU1Kk1hdGguc3FydChoKSxvW3MrMl09MjU1Kk1hdGguc3FydChkKX1yZXR1cm4gZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PXUoYSk7ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89dC5jYWxsKHRoaXMsIkxhYiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWIiKTtpZihyPXJ8fFswLDAsMF0saT1pfHxbLTEwMCwxMDAsLTEwMCwxMDBdLG8uWFc9ZVswXSxvLllXPWVbMV0sby5aVz1lWzJdLG8uYW1pbj1pWzBdLG8uYW1heD1pWzFdLG8uYm1pbj1pWzJdLG8uYm1heD1pWzNdLG8uWEI9clswXSxvLllCPXJbMV0sby5aQj1yWzJdLG8uWFc8MHx8by5aVzwwfHwxIT09by5ZVyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO3JldHVybihvLlhCPDB8fG8uWUI8MHx8by5aQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQiKSxvLlhCPW8uWUI9by5aQj0wKSwoby5hbWluPm8uYW1heHx8by5ibWluPm8uYm1heCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMiKSxvLmFtaW49LTEwMCxvLmFtYXg9MTAwLG8uYm1pbj0tMTAwLG8uYm1heD0xMDApLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSl7cih0aGlzLGUsdCwhMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbixhLGksbyxzKXtmb3IodmFyIGM9KDE8PG8pLTEsdT0wO3U8bjt1Kyspcih0aGlzLGUsdCxjLGEsaSksdCs9MyxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiEwfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fV0pLGF9KHkpfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYXJ0aWFsRXZhbHVhdG9yPXQuRXZhbHVhdG9yUHJlcHJvY2Vzc29yPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxNDUpLG89cigxMzQpLHM9cigxNjMpLGM9cigxNjcpLHU9cigxNjYpLGw9cigxNzApLGY9cigxNzkpLGg9cigxODApLGQ9cigxNzEpLHA9cigxODYpLGc9cigxNDYpLHY9cigxODgpLHk9cigxMzkpLG09cigxMzYpLGI9cigxODkpLHc9cigxNDMpLGs9cigxNDgpLFM9cigxNjgpLHg9cigxMzUpLE89cigxNzQpLEE9cigxNjkpLEM9cigxOTApLEY9cigxOTEpLFA9cigxOTIpO2Z1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8RChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQihlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fEQoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRSgpe0U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXt1KHt9LCIiKX1jYXRjaChlKXt1PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBsKGUsdCxyLG4pe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBDKG58fFtdKTtyZXR1cm4gYShvLCJfaW52b2tlIix7dmFsdWU6UyhlLHIscyl9KSxvfWZ1bmN0aW9uIGYoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9bDt2YXIgaD17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTt1KHYsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoRihbXSkpKTttJiZtIT09dCYmci5jYWxsKG0sbykmJih2PW0pO3ZhciBiPWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gdyhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gayhlLHQpe2Z1bmN0aW9uIGkoYSxvLHMsYyl7dmFyIHU9ZihlW2FdLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsaD1sLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09bihoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT90LnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87YSh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPXgobyxyKTtpZihzKXtpZihzPT09aCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWYoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09aCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24geChlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLHgoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksaDt2YXIgYT1mKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsaDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxoKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGgpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gQyhlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gRihlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpQfX1mdW5jdGlvbiBQKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxhKGIsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxhKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPXUoZyxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsdShlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYiksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sdyhrLnByb3RvdHlwZSksdShrLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1rLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgayhsKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LHcoYiksdShiLGMsIkdlbmVyYXRvciIpLHUoYixvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHUoYiwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1GLEMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsaCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxofSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksaH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6RihlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksaH19LGV9ZnVuY3Rpb24gaihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7aihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7aihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIF8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gUihlLHQscil7cmV0dXJuIHQmJkwoZS5wcm90b3R5cGUsdCksciYmTChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gTihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9RChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gRChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gQihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgVT1PYmplY3QuZnJlZXplKHttYXhJbWFnZVNpemU6LTEsZGlzYWJsZUZvbnRGYWNlOiExLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITAsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITAsZm9udEV4dHJhUHJvcGVydGllczohMSx1c2VTeXN0ZW1Gb250czohMCxjTWFwVXJsOm51bGwsc3RhbmRhcmRGb250RGF0YVVybDpudWxsfSksJD1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBYKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHIsbj1OKGUpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9WChyLnZhbHVlLCEwKTtpZihpKXJldHVybiBpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4oMCxhLndhcm4pKCJVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAiLmNvbmNhdChlKSksInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBvLk5hbWUpKXJldHVybiB0P251bGw6InNvdXJjZS1vdmVyIjtzd2l0Y2goZS5uYW1lKXtjYXNlIk5vcm1hbCI6Y2FzZSJDb21wYXRpYmxlIjpyZXR1cm4ic291cmNlLW92ZXIiO2Nhc2UiTXVsdGlwbHkiOnJldHVybiJtdWx0aXBseSI7Y2FzZSJTY3JlZW4iOnJldHVybiJzY3JlZW4iO2Nhc2UiT3ZlcmxheSI6cmV0dXJuIm92ZXJsYXkiO2Nhc2UiRGFya2VuIjpyZXR1cm4iZGFya2VuIjtjYXNlIkxpZ2h0ZW4iOnJldHVybiJsaWdodGVuIjtjYXNlIkNvbG9yRG9kZ2UiOnJldHVybiJjb2xvci1kb2RnZSI7Y2FzZSJDb2xvckJ1cm4iOnJldHVybiJjb2xvci1idXJuIjtjYXNlIkhhcmRMaWdodCI6cmV0dXJuImhhcmQtbGlnaHQiO2Nhc2UiU29mdExpZ2h0IjpyZXR1cm4ic29mdC1saWdodCI7Y2FzZSJEaWZmZXJlbmNlIjpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSJFeGNsdXNpb24iOnJldHVybiJleGNsdXNpb24iO2Nhc2UiSHVlIjpyZXR1cm4iaHVlIjtjYXNlIlNhdHVyYXRpb24iOnJldHVybiJzYXR1cmF0aW9uIjtjYXNlIkNvbG9yIjpyZXR1cm4iY29sb3IiO2Nhc2UiTHVtaW5vc2l0eSI6cmV0dXJuImx1bWlub3NpdHkifXJldHVybiB0P251bGw6KCgwLGEud2FybikoIlVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICIuY29uY2F0KGUubmFtZSkpLCJzb3VyY2Utb3ZlciIpfWZ1bmN0aW9uIEgoZSl7ZS5mbj09PWEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCYmZS5hcmdzWzBdJiZlLmFyZ3NbMF0uY291bnQ+MCYmZS5hcmdzWzBdLmNvdW50Kyt9dmFyIHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gUihlLFt7a2V5OiJjaGVjayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCsrdGhpcy5jaGVja2VkPGUuQ0hFQ0tfVElNRV9FVkVSWSkmJih0aGlzLmNoZWNrZWQ9MCx0aGlzLmVuZFRpbWU8PURhdGUubm93KCkpfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrZS5USU1FX1NMT1RfRFVSQVRJT05fTVMsdGhpcy5jaGVja2VkPTB9fV0sW3trZXk6IlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsMjApfX0se2tleToiQ0hFQ0tfVElNRV9FVkVSWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIkNIRUNLX1RJTUVfRVZFUlkiLDEwMCl9fV0pLGV9KCksRz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLG49dC5oYW5kbGVyLGE9dC5wYWdlSW5kZXgsaT10LmlkRmFjdG9yeSxvPXQuZm9udENhY2hlLHM9dC5idWlsdEluQ01hcENhY2hlLGM9dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsdT10Lmdsb2JhbEltYWdlQ2FjaGUsbD10Lm9wdGlvbnMsZj12b2lkIDA9PT1sP251bGw6bDtfKHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5oYW5kbGVyPW4sdGhpcy5wYWdlSW5kZXg9YSx0aGlzLmlkRmFjdG9yeT1pLHRoaXMuZm9udENhY2hlPW8sdGhpcy5idWlsdEluQ01hcENhY2hlPXMsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9Yyx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9dSx0aGlzLm9wdGlvbnM9Znx8VSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ9ITEsdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kPXRoaXMuZmV0Y2hCdWlsdEluQ01hcC5iaW5kKHRoaXMpfXZhciB0LHIsbixnLHgsaixMLEQ7cmV0dXJuIFIoZSxbe2tleToiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bmV3IHAuUERGRnVuY3Rpb25GYWN0b3J5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzRXZhbFN1cHBvcnRlZH0pO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfcGRmRnVuY3Rpb25GYWN0b3J5IixlKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9T2JqZWN0LmNyZWF0ZSh0aGlzKTtyZXR1cm4gdC5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnMsZSksdH19LHtrZXk6Imhhc0JsZW5kTW9kZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLm9iaklkJiZ0LmhhcyhlLm9iaklkKSlyZXR1cm4hMTt2YXIgcj1uZXcgby5SZWZTZXQodCk7ZS5vYmpJZCYmci5wdXQoZS5vYmpJZCk7Zm9yKHZhciBuPVtlXSxpPXRoaXMueHJlZjtuLmxlbmd0aDspe3ZhciBzPW4uc2hpZnQoKSxjPXMuZ2V0KCJFeHRHU3RhdGUiKTtpZihjIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgdSxsPU4oYy5nZXRSYXdWYWx1ZXMoKSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO2lmKGYgaW5zdGFuY2VvZiBvLlJlZil7aWYoci5oYXMoZikpY29udGludWU7dHJ5e2Y9aS5mZXRjaChmKX1jYXRjaChlKXtyLnB1dChmKSwoMCxhLmluZm8pKCdoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKGYgaW5zdGFuY2VvZiBvLkRpY3Qpe2Yub2JqSWQmJnIucHV0KGYub2JqSWQpO3ZhciBoPWYuZ2V0KCJCTSIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpe2lmKCJOb3JtYWwiIT09aC5uYW1lKXJldHVybiEwfWVsc2UgaWYodm9pZCAwIT09aCYmQXJyYXkuaXNBcnJheShoKSl7dmFyIGQscD1OKGgpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lJiYiTm9ybWFsIiE9PWcubmFtZSlyZXR1cm4hMH19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfX12YXIgdj1zLmdldCgiWE9iamVjdCIpO2lmKHYgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB5LGI9Tih2LmdldFJhd1ZhbHVlcygpKTt0cnl7Zm9yKGIucygpOyEoeT1iLm4oKSkuZG9uZTspe3ZhciB3PXkudmFsdWU7aWYodyBpbnN0YW5jZW9mIG8uUmVmKXtpZihyLmhhcyh3KSljb250aW51ZTt0cnl7dz1pLmZldGNoKHcpfWNhdGNoKGUpe3IucHV0KHcpLCgwLGEuaW5mbykoJ2hhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKHcgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pe3cuZGljdC5vYmpJZCYmci5wdXQody5kaWN0Lm9iaklkKTt2YXIgaz13LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtrIGluc3RhbmNlb2Ygby5EaWN0JiYoay5vYmpJZCYmci5oYXMoay5vYmpJZCl8fChuLnB1c2goayksay5vYmpJZCYmci5wdXQoay5vYmpJZCkpKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19dmFyIFMseD1OKHIpO3RyeXtmb3IoeC5zKCk7IShTPXgubigpKS5kb25lOyl7dmFyIE89Uy52YWx1ZTt0LnB1dChPKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9cmV0dXJuITF9fSx7a2V5OiJmZXRjaEJ1aWx0SW5DTWFwIix2YWx1ZTooRD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXMuYnVpbHRJbkNNYXBDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscik7Y2FzZSAzOmlmKG51bGw9PT10aGlzLm9wdGlvbnMuY01hcFVybCl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBpPSIiLmNvbmNhdCh0aGlzLm9wdGlvbnMuY01hcFVybCkuY29uY2F0KHQsIi5iY21hcCIpLGUubmV4dD03LGZldGNoKGkpO2Nhc2UgNzppZigobz1lLnNlbnQpLm9rKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdmZXRjaEJ1aWx0SW5DTWFwOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoby5zdGF0dXNUZXh0LCciLicpKTtjYXNlIDEwOnJldHVybiBlLnQwPVVpbnQ4QXJyYXksZS5uZXh0PTEzLG8uYXJyYXlCdWZmZXIoKTtjYXNlIDEzOmUudDE9ZS5zZW50LGUudDI9bmV3IGUudDAoZS50MSksZS50Mz1hLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZLG49e2NNYXBEYXRhOmUudDIsY29tcHJlc3Npb25UeXBlOmUudDN9LGUubmV4dD0yMjticmVhaztjYXNlIDE5OnJldHVybiBlLm5leHQ9MjEsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCdWlsdEluQ01hcCIse25hbWU6dH0pO2Nhc2UgMjE6bj1lLnNlbnQ7Y2FzZSAyMjpyZXR1cm4gbi5jb21wcmVzc2lvblR5cGUhPT1hLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSYmdGhpcy5idWlsdEluQ01hcENhY2hlLnNldCh0LG4pLGUuYWJydXB0KCJyZXR1cm4iLG4pO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gRC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hTdGFuZGFyZEZvbnREYXRhIix2YWx1ZTooTD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvLHMsYztyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEocj10aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IHkuU3RyZWFtKHIpKTtjYXNlIDM6aWYoIXRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250c3x8IlN5bWJvbCI9PT10fHwiWmFwZkRpbmdiYXRzIj09PXQpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6aWYobj0oMCxsLmdldEZvbnROYW1lVG9GaWxlTWFwKSgpLGk9blt0XSxudWxsPT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2UubmV4dD0yMDticmVha31yZXR1cm4gcz0iIi5jb25jYXQodGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpLmNvbmNhdChpKSxlLm5leHQ9MTAsZmV0Y2gocyk7Y2FzZSAxMDppZigoYz1lLnNlbnQpLm9rKXtlLm5leHQ9MTU7YnJlYWt9KDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQocywnIiB3aXRoICInKS5jb25jYXQoYy5zdGF0dXNUZXh0LCciLicpKSxlLm5leHQ9MTg7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZS5uZXh0PTE3LGMuYXJyYXlCdWZmZXIoKTtjYXNlIDE3Om89ZS5zZW50O2Nhc2UgMTg6ZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjA6cmV0dXJuIGUucHJldj0yMCxlLm5leHQ9MjMsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIix7ZmlsZW5hbWU6aX0pO2Nhc2UgMjM6bz1lLnNlbnQsZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjY6ZS5wcmV2PTI2LGUudDA9ZS5jYXRjaCgyMCksKDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoZS50MCwnIi4nKSk7Y2FzZSAyOTppZihvKXtlLm5leHQ9MzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzE6cmV0dXJuIHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLnNldCh0LG8pLGUuYWJydXB0KCJyZXR1cm4iLG5ldyB5LlN0cmVhbShvKSk7Y2FzZSAzMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIwLDI2XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiYnVpbGRGb3JtWE9iamVjdCIsdmFsdWU6KGo9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbixpLHMsYyx1KXt2YXIgbCxmLGgsZCxwLGcsdix5LG0sYixrO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobD1yLmRpY3QsZj1sLmdldEFycmF5KCJNYXRyaXgiKSxoPWwuZ2V0QXJyYXkoIkJCb3giKSxoPUFycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9hLlV0aWwubm9ybWFsaXplUmVjdChoKTpudWxsLCFsLmhhcygiT0MiKSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD03LHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMobC5nZXQoIk9DIiksdCk7Y2FzZSA3OmQ9ZS5zZW50O2Nhc2UgODppZih2b2lkIDAhPT1kJiZpLmFkZE9wKGEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSwhKGc9bC5nZXQoIkdyb3VwIikpKXtlLm5leHQ9Mjk7YnJlYWt9aWYocD17bWF0cml4OmYsYmJveDpoLHNtYXNrOm4saXNvbGF0ZWQ6ITEsa25vY2tvdXQ6ITF9LHY9Zy5nZXQoIlMiKSx5PW51bGwsISgwLG8uaXNOYW1lKSh2LCJUcmFuc3BhcmVuY3kiKSl7ZS5uZXh0PTI3O2JyZWFrfWlmKHAuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITEscC5rbm9ja291dD1nLmdldCgiSyIpfHwhMSwhZy5oYXMoIkNTIikpe2UubmV4dD0yNzticmVha31pZihtPWcuZ2V0UmF3KCJDUyIpLCEoYj13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKG0sdGhpcy54cmVmLHUpKSl7ZS5uZXh0PTI0O2JyZWFrfXk9YixlLm5leHQ9Mjc7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gZS5uZXh0PTI2LHRoaXMucGFyc2VDb2xvclNwYWNlKHtjczptLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KTtjYXNlIDI2Onk9ZS5zZW50O2Nhc2UgMjc6biYmbi5iYWNrZHJvcCYmKHk9eXx8dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLG4uYmFja2Ryb3A9eS5nZXRSZ2Iobi5iYWNrZHJvcCwwKSksaS5hZGRPcChhLk9QUy5iZWdpbkdyb3VwLFtwXSk7Y2FzZSAyOTpyZXR1cm4gaz1nP1tmLG51bGxdOltmLGhdLGkuYWRkT3AoYS5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luLGspLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06cix0YXNrOnMscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8dCxvcGVyYXRvckxpc3Q6aSxpbml0aWFsU3RhdGU6Y30pLnRoZW4oKGZ1bmN0aW9uKCl7aS5hZGRPcChhLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKSxnJiZpLmFkZE9wKGEuT1BTLmVuZEdyb3VwLFtwXSksdm9pZCAwIT09ZCYmaS5hZGRPcChhLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKSk7Y2FzZSAzMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe3JldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfc2VuZEltZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPXQ/W3QuYml0bWFwfHx0LmRhdGEuYnVmZmVyXTpudWxsO3JldHVybiB0aGlzLnBhcnNpbmdUeXBlM0ZvbnR8fHI/dGhpcy5oYW5kbGVyLnNlbmQoImNvbW1vbm9iaiIsW2UsIkltYWdlIix0XSxuKTp0aGlzLmhhbmRsZXIuc2VuZCgib2JqIixbZSx0aGlzLnBhZ2VJbmRleCwiSW1hZ2UiLHRdLG4pfX0se2tleToiYnVpbGRQYWludEltYWdlWE9iamVjdCIsdmFsdWU6KHg9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGksbyxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHcsUyx4LE8sQSxDLEYsVCxJLGosTT10aGlzO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj10LnJlc291cmNlcyxuPXQuaW1hZ2UsaT10LmlzSW5saW5lLG89dm9pZCAwIT09aSYmaSxzPXQub3BlcmF0b3JMaXN0LGM9dC5jYWNoZUtleSx1PXQubG9jYWxJbWFnZUNhY2hlLGw9dC5sb2NhbENvbG9yU3BhY2VDYWNoZSxmPW4uZGljdCxoPWYub2JqSWQsZD1mLmdldCgiVyIsIldpZHRoIikscD1mLmdldCgiSCIsIkhlaWdodCIpLGQmJiJudW1iZXIiPT10eXBlb2YgZCYmcCYmIm51bWJlciI9PXR5cGVvZiBwKXtlLm5leHQ9ODticmVha31yZXR1cm4oMCxhLndhcm4pKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA4OmlmKCEoLTEhPT0oZz10aGlzLm9wdGlvbnMubWF4SW1hZ2VTaXplKSYmZCpwPmcpKXtlLm5leHQ9MTU7YnJlYWt9aWYodj0iSW1hZ2UgZXhjZWVkZWQgbWF4aW11bSBhbGxvd2VkIHNpemUgYW5kIHdhcyByZW1vdmVkLiIsIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpe2UubmV4dD0xNDticmVha31yZXR1cm4oMCxhLndhcm4pKHYpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcih2KTtjYXNlIDE1OmlmKCFmLmhhcygiT0MiKSl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBlLm5leHQ9MTgsdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhmLmdldCgiT0MiKSxyKTtjYXNlIDE4Onk9ZS5zZW50O2Nhc2UgMTk6aWYoIWYuZ2V0KCJJTSIsIkltYWdlTWFzayIpKXtlLm5leHQ9NDQ7YnJlYWt9aWYodz1mLmdldCgiSSIsIkludGVycG9sYXRlIiksUz1kKzc+PjMseD1uLmdldEJ5dGVzKFMqcCksTz1mLmdldEFycmF5KCJEIiwiRGVjb2RlIiksIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7ZS5uZXh0PTMyO2JyZWFrfXJldHVybihtPVAuUERGSW1hZ2UuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6eCx3aWR0aDpkLGhlaWdodDpwLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOm4gaW5zdGFuY2VvZiBrLkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOiEhTyYmT1swXT4wLGludGVycG9sYXRlOnd9KSkuY2FjaGVkPSEhYyxiPVttXSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxiLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6YixvcHRpb25hbENvbnRlbnQ6eX0pLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDMyOmlmKCEobT1QLlBERkltYWdlLmNyZWF0ZU1hc2soe2ltZ0FycmF5Ongsd2lkdGg6ZCxoZWlnaHQ6cCxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpuIGluc3RhbmNlb2Ygay5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTohIU8mJk9bMF0+MCxpbnRlcnBvbGF0ZTp3LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOnRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZH0pKS5pc1NpbmdsZU9wYXF1ZVBpeGVsKXtlLm5leHQ9Mzc7YnJlYWt9cmV0dXJuIHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLFtdLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLGFyZ3M6W10sb3B0aW9uYWxDb250ZW50Onl9KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAzNzpyZXR1cm4gQT0ibWFza18iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxzLmFkZERlcGVuZGVuY3koQSksdGhpcy5fc2VuZEltZ0RhdGEoQSxtKSxiPVt7ZGF0YTpBLHdpZHRoOm0ud2lkdGgsaGVpZ2h0Om0uaGVpZ2h0LGludGVycG9sYXRlOm0uaW50ZXJwb2xhdGUsY291bnQ6MX1dLHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGIseSksYyYmdS5zZXQoYyxoLHtmbjphLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDQ6aWYoQz1mLmdldCgiU00iLCJTTWFzayIpfHwhMSxGPWYuZ2V0KCJNYXNrIil8fCExLCFvfHxDfHxGfHwhKGQrcDwyMDApKXtlLm5leHQ9NTI7YnJlYWt9cmV0dXJuIFQ9bmV3IFAuUERGSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KSxtPVQuY3JlYXRlSW1hZ2VEYXRhKCEwKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LFttXSx5KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA1MjpJPSJpbWdfIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKSksaj0hMSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ/ST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiX3R5cGUzXyIpLmNvbmNhdChJKTpoJiYoaj10aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2hvdWxkQ2FjaGUoaCx0aGlzLnBhZ2VJbmRleCkpJiYoST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiXyIpLmNvbmNhdChJKSkscy5hZGREZXBlbmRlbmN5KEkpLGI9W0ksZCxwXSxQLlBERkltYWdlLmJ1aWxkSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbT1lLmNyZWF0ZUltYWdlRGF0YSghMSksYyYmaCYmaiYmTS5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGgsbS5kYXRhLmxlbmd0aCksTS5fc2VuZEltZ0RhdGEoSSxtLGopfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdVbmFibGUgdG8gZGVjb2RlIGltYWdlICInLmNvbmNhdChJLCciOiAiJykuY29uY2F0KGUsJyIuJykpLE0uX3NlbmRJbWdEYXRhKEksbnVsbCxqKX0pKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGIseSksYyYmKHUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksaCYmKCgwLGEuYXNzZXJ0KSghbywiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkUGFnZUluZGV4KGgsdGhpcy5wYWdlSW5kZXgpLGomJnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGgse29iaklkOkksZm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5LGJ5dGVTaXplOjB9KSkpO2Nhc2UgNTk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4geC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFuZGxlU01hc2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1lLmdldCgiRyIpLHM9e3N1YnR5cGU6ZS5nZXQoIlMiKS5uYW1lLGJhY2tkcm9wOmUuZ2V0KCJCQyIpfSxjPWUuZ2V0KCJUUiIpO2lmKCgwLHAuaXNQREZGdW5jdGlvbikoYykpe2Zvcih2YXIgdT10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGMpLGw9bmV3IFVpbnQ4QXJyYXkoMjU2KSxmPW5ldyBGbG9hdDMyQXJyYXkoMSksaD0wO2g8MjU2O2grKylmWzBdPWgvMjU1LHUoZiwwLGYsMCksbFtoXT0yNTUqZlswXXwwO3MudHJhbnNmZXJNYXA9bH1yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQsbyxzLHIsbixhLnN0YXRlLmNsb25lKCksaSl9fSx7a2V5OiJoYW5kbGVUcmFuc2ZlckZ1bmN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKXQ9ZTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKGUpKXJldHVybiBudWxsO3Q9W2VdfXZhciByLG49W10sYT0wLGk9MCxzPU4odCk7dHJ5e2ZvcihzLnMoKTshKHI9cy5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoYSsrLCgwLG8uaXNOYW1lKSh1LCJJZGVudGl0eSIpKW4ucHVzaChudWxsKTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKHUpKXJldHVybiBudWxsO2Zvcih2YXIgbD10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHUpLGY9bmV3IFVpbnQ4QXJyYXkoMjU2KSxoPW5ldyBGbG9hdDMyQXJyYXkoMSksZD0wO2Q8MjU2O2QrKyloWzBdPWQvMjU1LGwoaCwwLGgsMCksZltkXT0yNTUqaFswXXwwO24ucHVzaChmKSxpKyt9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1yZXR1cm4gMSE9PWEmJjQhPT1hfHwwPT09aT9udWxsOm59fSx7a2V5OiJoYW5kbGVUaWxpbmdUeXBlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGkscyxjLHUpe3ZhciBsPXRoaXMsaD1uZXcgRi5PcGVyYXRvckxpc3QsZD1vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpbaS5nZXQoIlJlc291cmNlcyIpLHJdfSk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOmMscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Omh9KS50aGVuKChmdW5jdGlvbigpe3ZhciByPWguZ2V0SVIoKSxuPSgwLGYuZ2V0VGlsaW5nUGF0dGVybklSKShyLGksdCk7cy5hZGREZXBlbmRlbmNpZXMoaC5kZXBlbmRlbmNpZXMpLHMuYWRkT3AoZSxuKSxpLm9iaklkJiZ1LnNldChudWxsLGkub2JqSWQse29wZXJhdG9yTGlzdElSOnIsZGljdDppfSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihsLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBsLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JUaWxpbmdQYXR0ZXJufSksdm9pZCgwLGEud2FybikoJ2hhbmRsZVRpbGluZ1R5cGUgLSBpZ25vcmluZyBwYXR0ZXJuOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSl9fSx7a2V5OiJoYW5kbGVTZXRGb250Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksYyl7dmFyIHU9dGhpcyxsPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsLGY9YXJndW1lbnRzLmxlbmd0aD43JiZ2b2lkIDAhPT1hcmd1bWVudHNbN10/YXJndW1lbnRzWzddOm51bGwsaD10JiZ0WzBdaW5zdGFuY2VvZiBvLk5hbWU/dFswXS5uYW1lOm51bGw7cmV0dXJuIHRoaXMubG9hZEZvbnQoaCxyLGUsbCxmKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5mb250LmlzVHlwZTNGb250P3QubG9hZFR5cGUzRGF0YSh1LGUsaSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbi5hZGREZXBlbmRlbmNpZXModC50eXBlM0RlcGVuZGVuY2llcyksdH0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRMb2FkVHlwZTN9KSxuZXcgeih7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udCgiVHlwZTMgZm9udCBsb2FkIGVycm9yOiAiLmNvbmNhdChlKSksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp1Lm9wdGlvbnN9KX0pKTp0fSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjLmZvbnQ9ZS5mb250LGUuc2VuZCh1LmhhbmRsZXIpLGUubG9hZGVkTmFtZX0pKX19LHtrZXk6ImhhbmRsZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIG49ci5mb250LGk9bi5jaGFyc1RvR2x5cGhzKHQpO3JldHVybiBuLmRhdGEmJihyLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBR3x8IlBhdHRlcm4iPT09ci5maWxsQ29sb3JTcGFjZS5uYW1lfHxuLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJmUuYnVpbGRGb250UGF0aHMobixpLHRoaXMuaGFuZGxlcix0aGlzLm9wdGlvbnMpLGl9fSx7a2V5OiJlbnN1cmVTdGF0ZUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlLmZvbnQpe3ZhciB0PW5ldyBhLkZvcm1hdEVycm9yKCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuIik7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFN0YXRlfSksdm9pZCgwLGEud2FybikoJ2Vuc3VyZVN0YXRlRm9udDogIicuY29uY2F0KHQsJyIuJykpO3Rocm93IHR9fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTooZz1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPXQucmVzb3VyY2VzLG49dC5nU3RhdGUsaT10Lm9wZXJhdG9yTGlzdCxzPXQuY2FjaGVLZXksYz10LnRhc2ssdT10LnN0YXRlTWFuYWdlcixsPXQubG9jYWxHU3RhdGVDYWNoZSxmPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsaD1uLm9iaklkLGQ9ITAscD1bXSxnPVByb21pc2UucmVzb2x2ZSgpLHY9TihuLmdldEtleXMoKSk7dHJ5e2ZvcihtPWZ1bmN0aW9uKCl7dmFyIGU9eS52YWx1ZSx0PW4uZ2V0KGUpO3N3aXRjaChlKXtjYXNlIlR5cGUiOmJyZWFrO2Nhc2UiTFciOmNhc2UiTEMiOmNhc2UiTEoiOmNhc2UiTUwiOmNhc2UiRCI6Y2FzZSJSSSI6Y2FzZSJGTCI6Y2FzZSJDQSI6Y2FzZSJjYSI6cC5wdXNoKFtlLHRdKTticmVhaztjYXNlIkZvbnQiOmQ9ITEsZz1nLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGIuaGFuZGxlU2V0Rm9udChyLG51bGwsdFswXSxpLGMsdS5zdGF0ZSkudGhlbigoZnVuY3Rpb24ocil7aS5hZGREZXBlbmRlbmN5KHIpLHAucHVzaChbZSxbcix0WzFdXV0pfSkpfSkpO2JyZWFrO2Nhc2UiQk0iOnAucHVzaChbZSxYKHQpXSk7YnJlYWs7Y2FzZSJTTWFzayI6aWYoKDAsby5pc05hbWUpKHQsIk5vbmUiKSl7cC5wdXNoKFtlLCExXSk7YnJlYWt9dCBpbnN0YW5jZW9mIG8uRGljdD8oZD0hMSxnPWcudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYi5oYW5kbGVTTWFzayh0LHIsaSxjLHUsZil9KSkscC5wdXNoKFtlLCEwXSkpOigwLGEud2FybikoIlVuc3VwcG9ydGVkIFNNYXNrIHR5cGUiKTticmVhaztjYXNlIlRSIjp2YXIgcz1iLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odCk7cC5wdXNoKFtlLHNdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsYS5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2UpO2JyZWFrO2RlZmF1bHQ6KDAsYS5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrZSl9fSx2LnMoKTshKHk9di5uKCkpLmRvbmU7KW0oKX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZy50aGVuKChmdW5jdGlvbigpe3AubGVuZ3RoPjAmJmkuYWRkT3AoYS5PUFMuc2V0R1N0YXRlLFtwXSksZCYmbC5zZXQocyxoLHApfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRGb250Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGksdT10aGlzLGw9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGwsZj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06bnVsbCxoPWZ1bmN0aW9uKCl7dmFyIGU9TShFKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyB6KHtsb2FkZWROYW1lOiJnX2ZvbnRfZXJyb3IiLGZvbnQ6bmV3IHMuRXJyb3JGb250KCdGb250ICInLmNvbmNhdCh0LCciIGlzIG5vdCBhdmFpbGFibGUuJykpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPXRoaXMueHJlZjtpZihyKXIgaW5zdGFuY2VvZiBvLlJlZiYmKGk9cik7ZWxzZXt2YXIgcD1uLmdldCgiRm9udCIpO3AmJihpPXAuZ2V0UmF3KHQpKX1pZighaSl7dmFyIGc9J0ZvbnQgIicuY29uY2F0KHR8fHImJnIudG9TdHJpbmcoKSwnIiBpcyBub3QgYXZhaWxhYmxlJyk7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMmJiF0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpcmV0dXJuKDAsYS53YXJuKSgiIi5jb25jYXQoZywiLiIpKSxoKCk7dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udE1pc3Npbmd9KSwoMCxhLndhcm4pKCIiLmNvbmNhdChnLCIgLS0gYXR0ZW1wdGluZyB0byBmYWxsYmFjayB0byBhIGRlZmF1bHQgZm9udC4iKSksaT1sfHxlLmZhbGxiYWNrRm9udERpY3R9aWYodGhpcy5wYXJzaW5nVHlwZTNGb250JiZ0aGlzLnR5cGUzRm9udFJlZnMuaGFzKGkpKXJldHVybiBoKCk7aWYodGhpcy5mb250Q2FjaGUuaGFzKGkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoaSk7aWYoISgocj1kLmZldGNoSWZSZWYoaSkpaW5zdGFuY2VvZiBvLkRpY3QpKXJldHVybiBoKCk7aWYoci5jYWNoZUtleSYmdGhpcy5mb250Q2FjaGUuaGFzKHIuY2FjaGVLZXkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoci5jYWNoZUtleSk7dmFyIHYseT0oMCxhLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RyeXsodj10aGlzLnByZUV2YWx1YXRlRm9udChyKSkuY3NzRm9udEluZm89Zn1jYXRjaChlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkRm9udCAtIHByZUV2YWx1YXRlRm9udCBmYWlsZWQ6ICInLmNvbmNhdChlLCciLicpKSxoKCl9dmFyIG0sYj12LHc9Yi5kZXNjcmlwdG9yLGs9Yi5oYXNoLFM9aSBpbnN0YW5jZW9mIG8uUmVmO2lmKFMmJihtPSJmIi5jb25jYXQoaS50b1N0cmluZygpKSksayYmdyBpbnN0YW5jZW9mIG8uRGljdCl7dy5mb250QWxpYXNlc3x8KHcuZm9udEFsaWFzZXM9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHg9dy5mb250QWxpYXNlcztpZih4W2tdKXt2YXIgTz14W2tdLmFsaWFzUmVmO2lmKFMmJk8mJnRoaXMuZm9udENhY2hlLmhhcyhPKSlyZXR1cm4gdGhpcy5mb250Q2FjaGUucHV0QWxpYXMoaSxPKSx0aGlzLmZvbnRDYWNoZS5nZXQoaSl9ZWxzZSB4W2tdPXtmb250SUQ6dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCl9O1MmJih4W2tdLmFsaWFzUmVmPWkpLG09eFtrXS5mb250SUR9cmV0dXJuIFM/dGhpcy5mb250Q2FjaGUucHV0KGkseS5wcm9taXNlKToobXx8KG09dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCkpLHIuY2FjaGVLZXk9ImNhY2hlS2V5XyIuY29uY2F0KG0pLHRoaXMuZm9udENhY2hlLnB1dChyLmNhY2hlS2V5LHkucHJvbWlzZSkpLCgwLGEuYXNzZXJ0KShtJiZtLnN0YXJ0c1dpdGgoImYiKSwnVGhlICJmb250SUQiIG11c3QgYmUgKGNvcnJlY3RseSkgZGVmaW5lZC4nKSxyLmxvYWRlZE5hbWU9IiIuY29uY2F0KHRoaXMuaWRGYWN0b3J5LmdldERvY0lkKCksIl8iKS5jb25jYXQobSksdGhpcy50cmFuc2xhdGVGb250KHYpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUuZm9udFR5cGUmJmQuc3RhdHMuYWRkRm9udFR5cGUoZS5mb250VHlwZSkseS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250OmUsZGljdDpyLGV2YWx1YXRvck9wdGlvbnM6dS5vcHRpb25zfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt1LmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250VHJhbnNsYXRlfSksKDAsYS53YXJuKSgnbG9hZEZvbnQgLSB0cmFuc2xhdGVGb250IGZhaWxlZDogIicuY29uY2F0KGUsJyIuJykpO3RyeXt2YXIgdD13JiZ3LmdldCgiRm9udEZpbGUzIiksbj10JiZ0LmdldCgiU3VidHlwZSIpLGk9KDAsYy5nZXRGb250VHlwZSkodi50eXBlLG4mJm4ubmFtZSk7dm9pZCAwIT09aSYmZC5zdGF0cy5hZGRGb250VHlwZShpKX1jYXRjaChlKXt9eS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250Om5ldyBzLkVycm9yRm9udChlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKX0pKSx5LnByb21pc2V9fSx7a2V5OiJidWlsZFBhdGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9ZS5sZW5ndGgtMTtpZihyfHwocj1bXSksaTwwfHxlLmZuQXJyYXlbaV0hPT1hLk9QUy5jb25zdHJ1Y3RQYXRoKXt2YXIgbztzd2l0Y2gobiYmKCgwLGEud2FybikoJ0VuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIicuY29uY2F0KHQsJyIgaW5zaWRlIG9mIGEgdGV4dCBvYmplY3QuJykpLGUuYWRkT3AoYS5PUFMuc2F2ZSxudWxsKSksdCl7Y2FzZSBhLk9QUy5yZWN0YW5nbGU6dmFyIHM9clswXStyWzJdLGM9clsxXStyWzNdO289W01hdGgubWluKHJbMF0scyksTWF0aC5tYXgoclswXSxzKSxNYXRoLm1pbihyWzFdLGMpLE1hdGgubWF4KHJbMV0sYyldO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmNhc2UgYS5PUFMubGluZVRvOm89W3JbMF0sclswXSxyWzFdLHJbMV1dO2JyZWFrO2RlZmF1bHQ6bz1bMS8wLC0xLzAsMS8wLC0xLzBdfWUuYWRkT3AoYS5PUFMuY29uc3RydWN0UGF0aCxbW3RdLHIsb10pLG4mJmUuYWRkT3AoYS5PUFMucmVzdG9yZSxudWxsKX1lbHNle3ZhciB1LGw9ZS5hcmdzQXJyYXlbaV07bFswXS5wdXNoKHQpLCh1PWxbMV0pLnB1c2guYXBwbHkodSxJKHIpKTt2YXIgZj1sWzJdO3N3aXRjaCh0KXtjYXNlIGEuT1BTLnJlY3RhbmdsZTp2YXIgaD1yWzBdK3JbMl0sZD1yWzFdK3JbM107ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0saCksZlsxXT1NYXRoLm1heChmWzFdLHJbMF0saCksZlsyXT1NYXRoLm1pbihmWzJdLHJbMV0sZCksZlszXT1NYXRoLm1heChmWzNdLHJbMV0sZCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0pLGZbMV09TWF0aC5tYXgoZlsxXSxyWzBdKSxmWzJdPU1hdGgubWluKGZbMl0sclsxXSksZlszXT1NYXRoLm1heChmWzNdLHJbMV0pfX19fSx7a2V5OiJwYXJzZUNvbG9yU3BhY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmNzLG49ZS5yZXNvdXJjZXMsaT1lLmxvY2FsQ29sb3JTcGFjZUNhY2hlO3JldHVybiB3LkNvbG9yU3BhY2UucGFyc2VBc3luYyh7Y3M6cix4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6bixwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOml9KS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29sb3JTcGFjZX0pLCgwLGEud2FybikoJ3BhcnNlQ29sb3JTcGFjZSAtIGlnbm9yaW5nIENvbG9yU3BhY2U6ICInLmNvbmNhdChlLCciLicpKSxudWxsO3Rocm93IGV9KSl9fSx7a2V5OiJwYXJzZVNoYWRpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc2hhZGluZyxyPWUucmVzb3VyY2VzLG49ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxhPWUubG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlLGk9YS5nZXQodCk7aWYoIWkpe3ZhciBvPWYuUGF0dGVybi5wYXJzZVNoYWRpbmcodCx0aGlzLnhyZWYscix0aGlzLmhhbmRsZXIsdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LG4pLmdldElSKCk7aT0icGF0dGVybl8iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxhLnNldCh0LGkpLHRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtpLHRoaXMucGFnZUluZGV4LCJQYXR0ZXJuIixvXSl9cmV0dXJuIGl9fSx7a2V5OiJoYW5kbGVDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4saSxzLGMsdSxsLGgpe3ZhciBkPXIucG9wKCk7aWYoZCBpbnN0YW5jZW9mIG8uTmFtZSl7dmFyIHA9aS5nZXRSYXcoZC5uYW1lKSxnPXAgaW5zdGFuY2VvZiBvLlJlZiYmbC5nZXRCeVJlZihwKTtpZihnKXRyeXt2YXIgdj1uLmJhc2U/bi5iYXNlLmdldFJnYihyLDApOm51bGwseT0oMCxmLmdldFRpbGluZ1BhdHRlcm5JUikoZy5vcGVyYXRvckxpc3RJUixnLmRpY3Qsdik7cmV0dXJuIHZvaWQgZS5hZGRPcCh0LHkpfWNhdGNoKGUpe312YXIgYj10aGlzLnhyZWYuZmV0Y2hJZlJlZihwKTtpZihiKXt2YXIgdz1iIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2IuZGljdDpiLGs9dy5nZXQoIlBhdHRlcm5UeXBlIik7aWYoMT09PWspe3ZhciBTPW4uYmFzZT9uLmJhc2UuZ2V0UmdiKHIsMCk6bnVsbDtyZXR1cm4gdGhpcy5oYW5kbGVUaWxpbmdUeXBlKHQsUyxzLGIsdyxlLGMsbCl9aWYoMj09PWspe3ZhciB4PXcuZ2V0KCJTaGFkaW5nIiksTz13LmdldEFycmF5KCJNYXRyaXgiKSxBPXRoaXMucGFyc2VTaGFkaW5nKHtzaGFkaW5nOngscmVzb3VyY2VzOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dSxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6aH0pO3JldHVybiB2b2lkIGUuYWRkT3AodCxbIlNoYWRpbmciLEEsT10pfXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5UeXBlOiAiLmNvbmNhdChrKSl9fXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5OYW1lOiAiLmNvbmNhdChkKSl9fSx7a2V5OiJfcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKCsrdD4xMCkoMCxhLndhcm4pKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTtlbHNle3ZhciBuPWUubGVuZ3RoLGk9dGhpcy54cmVmLmZldGNoSWZSZWYoZVswXSk7aWYoIShuPDIpJiZpIGluc3RhbmNlb2Ygby5OYW1lKXtzd2l0Y2goaS5uYW1lKXtjYXNlIkFuZCI6Y2FzZSJPciI6Y2FzZSJOb3QiOnIucHVzaChpLm5hbWUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQoMCxhLndhcm4pKCJJbnZhbGlkIG9wZXJhdG9yICIuY29uY2F0KGkubmFtZSwiIGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbiIpKX1mb3IodmFyIHM9MTtzPG47cysrKXt2YXIgYz1lW3NdLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9W107ci5wdXNoKGwpLHRoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24odSx0LGwpfWVsc2UgYyBpbnN0YW5jZW9mIG8uUmVmJiZyLnB1c2goYy50b1N0cmluZygpKX19ZWxzZSgwLGEud2FybikoIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uIil9fX0se2tleToicGFyc2VNYXJrZWRDb250ZW50UHJvcHMiLHZhbHVlOihuPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXt2YXIgbixpLHMsYyx1LGwsZixoLGQscDtyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEodCBpbnN0YW5jZW9mIG8uTmFtZSkpe2UubmV4dD01O2JyZWFrfWk9ci5nZXQoIlByb3BlcnRpZXMiKSxuPWkuZ2V0KHQubmFtZSksZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNTppZighKHQgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9OTticmVha31uPXQsZS5uZXh0PTEwO2JyZWFrO2Nhc2UgOTp0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiT3B0aW9uYWwgY29udGVudCBwcm9wZXJ0aWVzIG1hbGZvcm1lZC4iKTtjYXNlIDEwOmlmKCJPQ0ciIT09KHM9bi5nZXQoIlR5cGUiKS5uYW1lKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOm4ub2JqSWR9KTtjYXNlIDE1OmlmKCJPQ01EIiE9PXMpe2UubmV4dD0zMTticmVha31pZihjPW4uZ2V0KCJWRSIpLCFBcnJheS5pc0FycmF5KGMpKXtlLm5leHQ9MjI7YnJlYWt9aWYodT1bXSx0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGMsMCx1KSwhKHUubGVuZ3RoPjApKXtlLm5leHQ9MjI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOiJPQ01EIixleHByZXNzaW9uOnV9KTtjYXNlIDIyOmlmKGw9bi5nZXQoIk9DR3MiKSwhKEFycmF5LmlzQXJyYXkobCl8fGwgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9Mjk7YnJlYWt9aWYoZj1bXSxBcnJheS5pc0FycmF5KGwpKXtoPU4obCk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSxmLnB1c2gocC50b1N0cmluZygpKX1jYXRjaChlKXtoLmUoZSl9ZmluYWxseXtoLmYoKX19ZWxzZSBmLnB1c2gobC5vYmpJZCk7cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOnMsaWRzOmYscG9saWN5Om4uZ2V0KCJQIilpbnN0YW5jZW9mIG8uTmFtZT9uLmdldCgiUCIpLm5hbWU6bnVsbCxleHByZXNzaW9uOm51bGx9KTtjYXNlIDI5OmlmKCEobCBpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOmwudG9TdHJpbmcoKX0pO2Nhc2UgMzE6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLnN0cmVhbSxuPWUudGFzayxpPWUucmVzb3VyY2VzLHM9ZS5vcGVyYXRvckxpc3QsYz1lLmluaXRpYWxTdGF0ZSx1PXZvaWQgMD09PWM/bnVsbDpjLGw9ZS5mYWxsYmFja0ZvbnREaWN0LGY9dm9pZCAwPT09bD9udWxsOmw7aWYoaT1pfHxvLkRpY3QuZW1wdHksdT11fHxuZXcgWSwhcyl0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyAib3BlcmF0b3JMaXN0IiBwYXJhbWV0ZXInKTt2YXIgaD10aGlzLGQ9dGhpcy54cmVmLHA9ITEsZz1uZXcgdi5Mb2NhbEltYWdlQ2FjaGUseT1uZXcgdi5Mb2NhbENvbG9yU3BhY2VDYWNoZSxiPW5ldyB2LkxvY2FsR1N0YXRlQ2FjaGUsaz1uZXcgdi5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSxTPW5ldyBNYXAseD1pLmdldCgiWE9iamVjdCIpfHxvLkRpY3QuZW1wdHksTz1pLmdldCgiUGF0dGVybiIpfHxvLkRpY3QuZW1wdHksQT1uZXcgVyh1KSxDPW5ldyBLKHIsZCxBKSxGPW5ldyBxO2Z1bmN0aW9uIFAoZSl7Zm9yKHZhciB0PTAscj1DLnNhdmVkU3RhdGVzRGVwdGg7dDxyO3QrKylzLmFkZE9wKGEuT1BTLnJlc3RvcmUsW10pfXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBjPWZ1bmN0aW9uKG4pe1Byb21pc2UuYWxsKFtuLHMucmVhZHldKS50aGVuKChmdW5jdGlvbigpe3RyeXtlKHQscil9Y2F0Y2goZSl7cihlKX19KSxyKX07bi5lbnN1cmVOb3RUZXJtaW5hdGVkKCksRi5yZXNldCgpO2Zvcih2YXIgdSxsLHYsVCxFLGosTT17fTshKHU9Ri5jaGVjaygpKSYmKE0uYXJncz1udWxsLEMucmVhZChNKSk7KXt2YXIgXz1NLmFyZ3MsTD1NLmZuO3N3aXRjaCgwfEwpe2Nhc2UgYS5PUFMucGFpbnRYT2JqZWN0OmlmKGo9X1swXWluc3RhbmNlb2Ygby5OYW1lLEU9X1swXS5uYW1lLGope3ZhciBSPWcuZ2V0QnlOYW1lKEUpO2lmKFIpe3MuYWRkSW1hZ2VPcHMoUi5mbixSLmFyZ3MsUi5vcHRpb25hbENvbnRlbnQpLEgoUiksXz1udWxsO2NvbnRpbnVlfX1yZXR1cm4gdm9pZCBjKG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFqKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTt2YXIgcj14LmdldFJhdyhFKTtpZihyIGluc3RhbmNlb2Ygby5SZWYpe3ZhciBjPWcuZ2V0QnlSZWYocik7aWYoYylyZXR1cm4gcy5hZGRJbWFnZU9wcyhjLmZuLGMuYXJncyxjLm9wdGlvbmFsQ29udGVudCksSChjKSx2b2lkIGUoKTt2YXIgdT1oLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShyLGgucGFnZUluZGV4KTtpZih1KXJldHVybiBzLmFkZERlcGVuZGVuY3kodS5vYmpJZCkscy5hZGRJbWFnZU9wcyh1LmZuLHUuYXJncyx1Lm9wdGlvbmFsQ29udGVudCksdm9pZCBlKCk7cj1kLmZldGNoKHIpfWlmKCEociBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7dmFyIGw9ci5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEobCBpbnN0YW5jZW9mIG8uTmFtZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSI9PT1sLm5hbWUpcmV0dXJuIEEuc2F2ZSgpLHZvaWQgaC5idWlsZEZvcm1YT2JqZWN0KGkscixudWxsLHMsbixBLnN0YXRlLmNsb25lKCkseSkudGhlbigoZnVuY3Rpb24oKXtBLnJlc3RvcmUoKSxlKCl9KSx0KTtpZigiSW1hZ2UiIT09bC5uYW1lKXtpZigiUFMiIT09bC5uYW1lKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICIuY29uY2F0KGwubmFtZSkpOygwLGEuaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIiksZSgpfWVsc2UgaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpyLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkUsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclhPYmplY3R9KSx2b2lkKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgWE9iamVjdDogIicuY29uY2F0KGUsJyIuJykpO3Rocm93IGV9fSkpKTtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIEQ9X1sxXTtyZXR1cm4gdm9pZCBjKGguaGFuZGxlU2V0Rm9udChpLF8sbnVsbCxzLG4sQS5zdGF0ZSxmKS50aGVuKChmdW5jdGlvbihlKXtzLmFkZERlcGVuZGVuY3koZSkscy5hZGRPcChhLk9QUy5zZXRGb250LFtlLERdKX0pKSk7Y2FzZSBhLk9QUy5iZWdpblRleHQ6cD0hMDticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6cD0hMTticmVhaztjYXNlIGEuT1BTLmVuZElubGluZUltYWdlOnZhciBCPV9bMF0uY2FjaGVLZXk7aWYoQil7dmFyIFU9Zy5nZXRCeU5hbWUoQik7aWYoVSl7cy5hZGRJbWFnZU9wcyhVLmZuLFUuYXJncyxVLm9wdGlvbmFsQ29udGVudCksSChVKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMoaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpfWzBdLGlzSW5saW5lOiEwLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkIsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pKTtjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFBLnN0YXRlLmZvbnQpe2guZW5zdXJlU3RhdGVGb250KEEuc3RhdGUpO2NvbnRpbnVlfV9bMF09aC5oYW5kbGVUZXh0KF9bMF0sQS5zdGF0ZSk7YnJlYWs7Y2FzZSBhLk9QUy5zaG93U3BhY2VkVGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX12YXIgWCxxPVtdLEc9QS5zdGF0ZSx6PU4oX1swXSk7dHJ5e2Zvcih6LnMoKTshKFg9ei5uKCkpLmRvbmU7KXt2YXIgVyxWPVgudmFsdWU7InN0cmluZyI9PXR5cGVvZiBWPyhXPXEpLnB1c2guYXBwbHkoVyxJKGguaGFuZGxlVGV4dChWLEcpKSk6Im51bWJlciI9PXR5cGVvZiBWJiZxLnB1c2goVil9fWNhdGNoKGUpe3ouZShlKX1maW5hbGx5e3ouZigpfV9bMF09cSxMPWEuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmVTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxzLmFkZE9wKGEuT1BTLnNldFdvcmRTcGFjaW5nLFtfLnNoaWZ0KCldKSxzLmFkZE9wKGEuT1BTLnNldENoYXJTcGFjaW5nLFtfLnNoaWZ0KCldKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpBLnN0YXRlLnRleHRSZW5kZXJpbmdNb2RlPV9bMF07YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTp2YXIgWT13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihZKXtBLnN0YXRlLmZpbGxDb2xvclNwYWNlPVk7Y29udGludWV9cmV0dXJuIHZvaWQgYyhoLnBhcnNlQ29sb3JTcGFjZSh7Y3M6X1swXSxyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5fSkudGhlbigoZnVuY3Rpb24oZSl7ZSYmKEEuc3RhdGUuZmlsbENvbG9yU3BhY2U9ZSl9KSkpO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTp2YXIgSz13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihLKXtBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Sztjb250aW51ZX1yZXR1cm4gdm9pZCBjKGgucGFyc2VDb2xvclNwYWNlKHtjczpfWzBdLHJlc291cmNlczppLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnl9KS50aGVuKChmdW5jdGlvbihlKXtlJiYoQS5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPWUpfSkpKTtjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpfPShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3I6Xz0oVD1BLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsR3JheTpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlR3JheTpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6QS5zdGF0ZS5maWxsQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLF89dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ayxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoXywwKTticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZVJHQkNvbG9yOkEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IsXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKF8sMCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLm5hbWUpcmV0dXJuIHZvaWQgYyhoLmhhbmRsZUNvbG9yTihzLGEuT1BTLnNldEZpbGxDb2xvck4sXyxULE8saSxuLHksayxTKSk7Xz1ULmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkubmFtZSlyZXR1cm4gdm9pZCBjKGguaGFuZGxlQ29sb3JOKHMsYS5PUFMuc2V0U3Ryb2tlQ29sb3JOLF8sVCxPLGksbix5LGssUykpO189VC5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2hhZGluZ0ZpbGw6dmFyIEo9aS5nZXQoIlNoYWRpbmciKTtpZighSil0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCIpO3ZhciBaPUouZ2V0KF9bMF0ubmFtZSk7aWYoIVopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgb2JqZWN0IGZvdW5kIik7Xz1baC5wYXJzZVNoYWRpbmcoe3NoYWRpbmc6WixyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5LGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpTfSldLEw9YS5PUFMuc2hhZGluZ0ZpbGw7YnJlYWs7Y2FzZSBhLk9QUy5zZXRHU3RhdGU6aWYoaj1fWzBdaW5zdGFuY2VvZiBvLk5hbWUsRT1fWzBdLm5hbWUsail7dmFyIFE9Yi5nZXRCeU5hbWUoRSk7aWYoUSl7US5sZW5ndGg+MCYmcy5hZGRPcChhLk9QUy5zZXRHU3RhdGUsW1FdKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBjPXIuZ2V0KEUpO2lmKCEoYyBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2guc2V0R1N0YXRlKHtyZXNvdXJjZXM6aSxnU3RhdGU6YyxvcGVyYXRvckxpc3Q6cyxjYWNoZUtleTpFLHRhc2s6bixzdGF0ZU1hbmFnZXI6QSxsb2NhbEdTdGF0ZUNhY2hlOmIsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckV4dEdTdGF0ZX0pLHZvaWQoMCxhLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICInLmNvbmNhdChlLCciLicpKTt0aHJvdyBlfX0pKSk7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86Y2FzZSBhLk9QUy5jdXJ2ZVRvOmNhc2UgYS5PUFMuY3VydmVUbzI6Y2FzZSBhLk9QUy5jdXJ2ZVRvMzpjYXNlIGEuT1BTLmNsb3NlUGF0aDpjYXNlIGEuT1BTLnJlY3RhbmdsZTpoLmJ1aWxkUGF0aChzLEwsXyxwKTtjb250aW51ZTtjYXNlIGEuT1BTLm1hcmtQb2ludDpjYXNlIGEuT1BTLm1hcmtQb2ludFByb3BzOmNhc2UgYS5PUFMuYmVnaW5Db21wYXQ6Y2FzZSBhLk9QUy5lbmRDb21wYXQ6Y29udGludWU7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZighKF9bMF1pbnN0YW5jZW9mIG8uTmFtZSkpeygwLGEud2FybikoIkV4cGVjdGVkIG5hbWUgZm9yIGJlZ2luTWFya2VkQ29udGVudFByb3BzIGFyZzA9Ii5jb25jYXQoX1swXSkpO2NvbnRpbnVlfWlmKCJPQyI9PT1fWzBdLm5hbWUpcmV0dXJuIHZvaWQgYyhoLnBhcnNlTWFya2VkQ29udGVudFByb3BzKF9bMV0saSkudGhlbigoZnVuY3Rpb24oZSl7cy5hZGRPcChhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixlXSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihoLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBoLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JNYXJrZWRDb250ZW50fSksdm9pZCgwLGEud2FybikoJ2dldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSkpO189W19bMF0ubmFtZSxfWzFdaW5zdGFuY2VvZiBvLkRpY3Q/X1sxXS5nZXQoIk1DSUQiKTpudWxsXTticmVhaztjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpjYXNlIGEuT1BTLmVuZE1hcmtlZENvbnRlbnQ6ZGVmYXVsdDppZihudWxsIT09Xyl7Zm9yKGw9MCx2PV8ubGVuZ3RoO2w8diYmIShfW2xdaW5zdGFuY2VvZiBvLkRpY3QpO2wrKyk7aWYobDx2KXsoMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogIitMKTtjb250aW51ZX19fXMuYWRkT3AoTCxfKX11P2MoJCk6KFAoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0fSksKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJy5jb25jYXQobi5uYW1lLCciICcpKyd0YXNrOiAiJy5jb25jYXQoZSwnIi4nKSksdm9pZCBQKCk7dGhyb3cgZX19KSl9fSx7a2V5OiJnZXRUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc3RyZWFtLG49ZS50YXNrLGk9ZS5yZXNvdXJjZXMscz1lLnN0YXRlTWFuYWdlcixjPXZvaWQgMD09PXM/bnVsbDpzLHU9ZS5jb21iaW5lVGV4dEl0ZW1zLGw9dm9pZCAwIT09dSYmdSxmPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaD12b2lkIDAhPT1mJiZmLGQ9ZS5zaW5rLHA9ZS5zZWVuU3R5bGVzLGc9dm9pZCAwPT09cD9uZXcgU2V0OnAseT1lLnZpZXdCb3gsdz1lLm1hcmtlZENvbnRlbnREYXRhLGs9dm9pZCAwPT09dz9udWxsOnc7aT1pfHxvLkRpY3QuZW1wdHksYz1jfHxuZXcgVyhuZXcgViksaCYmKGs9a3x8e2xldmVsOjB9KTt2YXIgUz17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9LHg9e2luaXRpYWxpemVkOiExLHN0cjpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowLHZlcnRpY2FsOiExLHByZXZUcmFuc2Zvcm06bnVsbCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VJbkZsb3dNaW46MCxzcGFjZUluRmxvd01heDowLHRyYWNraW5nU3BhY2VNaW46MS8wLG5lZ2F0aXZlU3BhY2VNYXg6LTEvMCxub3RBU3BhY2U6LTEvMCx0cmFuc2Zvcm06bnVsbCxmb250TmFtZTpudWxsLGhhc0VPTDohMX0sTz1bIiAiLCIgIl0sQT0wO2Z1bmN0aW9uIEMoZSl7dmFyIHQ9KEErMSklMixyPSIgIiE9PU9bQV0mJiIgIj09PU9bdF07cmV0dXJuIE9bQV09ZSxBPXQscn1mdW5jdGlvbiBGKCl7T1swXT1PWzFdPSIgIixBPTB9dmFyIFAsST0uMSxFPS4wMyxqPS0uMixNPS4xLF89LjYsTD10aGlzLFI9dGhpcy54cmVmLE49W10sRD1udWxsLEI9bmV3IHYuTG9jYWxJbWFnZUNhY2hlLFU9bmV3IHYuTG9jYWxHU3RhdGVDYWNoZSxYPW5ldyBLKHIsUixjKTtmdW5jdGlvbiBIKCl7dmFyIGU9UC5mb250LHQ9W1AuZm9udFNpemUqUC50ZXh0SFNjYWxlLDAsMCxQLmZvbnRTaXplLDAsUC50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKFAuZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiEoMCxhLmlzQXJyYXlFcXVhbCkoUC5mb250TWF0cml4LGEuRk9OVF9JREVOVElUWV9NQVRSSVgpKXt2YXIgcj1lLmJib3hbM10tZS5iYm94WzFdO3I+MCYmKHRbM10qPXIqUC5mb250TWF0cml4WzNdKX1yZXR1cm4gYS5VdGlsLnRyYW5zZm9ybShQLmN0bSxhLlV0aWwudHJhbnNmb3JtKFAudGV4dE1hdHJpeCx0KSl9ZnVuY3Rpb24gRygpe2lmKHguaW5pdGlhbGl6ZWQpcmV0dXJuIHg7dmFyIGU9UCx0PWUuZm9udCxyPWUubG9hZGVkTmFtZTtnLmhhcyhyKXx8KGcuYWRkKHIpLFMuc3R5bGVzW3JdPXtmb250RmFtaWx5OnQuZmFsbGJhY2tOYW1lLGFzY2VudDp0LmFzY2VudCxkZXNjZW50OnQuZGVzY2VudCx2ZXJ0aWNhbDp0LnZlcnRpY2FsfSkseC5mb250TmFtZT1yO3ZhciBuPXgudHJhbnNmb3JtPUgoKTt0LnZlcnRpY2FsPyh4LndpZHRoPXgudG90YWxXaWR0aD1NYXRoLmh5cG90KG5bMF0sblsxXSkseC5oZWlnaHQ9eC50b3RhbEhlaWdodD0wLHgudmVydGljYWw9ITApOih4LndpZHRoPXgudG90YWxXaWR0aD0wLHguaGVpZ2h0PXgudG90YWxIZWlnaHQ9TWF0aC5oeXBvdChuWzJdLG5bM10pLHgudmVydGljYWw9ITEpO3ZhciBhPU1hdGguaHlwb3QoUC50ZXh0TGluZU1hdHJpeFswXSxQLnRleHRMaW5lTWF0cml4WzFdKSxpPU1hdGguaHlwb3QoUC5jdG1bMF0sUC5jdG1bMV0pO3JldHVybiB4LnRleHRBZHZhbmNlU2NhbGU9aSphLHgudHJhY2tpbmdTcGFjZU1pbj1QLmZvbnRTaXplKkkseC5ub3RBU3BhY2U9UC5mb250U2l6ZSpFLHgubmVnYXRpdmVTcGFjZU1heD1QLmZvbnRTaXplKmoseC5zcGFjZUluRmxvd01pbj1QLmZvbnRTaXplKk0seC5zcGFjZUluRmxvd01heD1QLmZvbnRTaXplKl8seC5oYXNFT0w9ITEseC5pbml0aWFsaXplZD0hMCx4fWZ1bmN0aW9uIHooKXtpZih4LmluaXRpYWxpemVkKXt2YXIgZT1NYXRoLmh5cG90KFAudGV4dExpbmVNYXRyaXhbMF0sUC50ZXh0TGluZU1hdHJpeFsxXSksdD1NYXRoLmh5cG90KFAuY3RtWzBdLFAuY3RtWzFdKSplO3QhPT14LnRleHRBZHZhbmNlU2NhbGUmJih4LnZlcnRpY2FsPyh4LnRvdGFsSGVpZ2h0Kz14LmhlaWdodCp4LnRleHRBZHZhbmNlU2NhbGUseC5oZWlnaHQ9MCk6KHgudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUseC53aWR0aD0wKSx4LnRleHRBZHZhbmNlU2NhbGU9dCl9fWZ1bmN0aW9uIFkoZSx0KXtyZXR1cm4gTC5sb2FkRm9udChlLHQsaSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9udC5pc1R5cGUzRm9udD9lLmxvYWRUeXBlM0RhdGEoTCxpLG4pLmNhdGNoKChmdW5jdGlvbigpe30pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlfSkpOmV9KSkudGhlbigoZnVuY3Rpb24oZSl7UC5sb2FkZWROYW1lPWUubG9hZGVkTmFtZSxQLmZvbnQ9ZS5mb250LFAuZm9udE1hdHJpeD1lLmZvbnQuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWH0pKX1mdW5jdGlvbiBKKGUsdCxyKXt2YXIgbj1NYXRoLmh5cG90KHJbMF0sclsxXSk7cmV0dXJuWyhyWzBdKmUrclsxXSp0KS9uLChyWzJdKmUrclszXSp0KS9uXX1mdW5jdGlvbiBaKCl7dmFyIGU9SCgpLHQ9ZVs0XSxyPWVbNV0sbj10LXlbMF0sYT1yLXlbMV07aWYobjwwfHxuPnlbMl18fGE8MHx8YT55WzNdKXJldHVybiExO2lmKCFsfHwhUC5mb250fHwheC5wcmV2VHJhbnNmb3JtKXJldHVybiEwO3ZhciBpPXgucHJldlRyYW5zZm9ybVs0XSxvPXgucHJldlRyYW5zZm9ybVs1XTtpZihpPT09dCYmbz09PXIpcmV0dXJuITA7dmFyIHM9LTE7c3dpdGNoKGVbMF0mJjA9PT1lWzFdJiYwPT09ZVsyXT9zPWVbMF0+MD8wOjE4MDplWzFdJiYwPT09ZVswXSYmMD09PWVbM10mJihzPWVbMV0+MD85MDoyNzApLHMpe2Nhc2UgMDpicmVhaztjYXNlIDkwOnZhciBjPVtyLHRdO3Q9Y1swXSxyPWNbMV07dmFyIHU9W28saV07aT11WzBdLG89dVsxXTticmVhaztjYXNlIDE4MDp2YXIgZj1bLXQsLXIsLWksLW9dO3Q9ZlswXSxyPWZbMV0saT1mWzJdLG89ZlszXTticmVhaztjYXNlIDI3MDp2YXIgaD1bLXIsLXRdO3Q9aFswXSxyPWhbMV07dmFyIGQ9Wy1vLC1pXTtpPWRbMF0sbz1kWzFdO2JyZWFrO2RlZmF1bHQ6dmFyIHA9VChKKHQscixlKSwyKTt0PXBbMF0scj1wWzFdO3ZhciBnPVQoSihpLG8seC5wcmV2VHJhbnNmb3JtKSwyKTtpPWdbMF0sbz1nWzFdfWlmKFAuZm9udC52ZXJ0aWNhbCl7dmFyIHY9KG8tcikveC50ZXh0QWR2YW5jZVNjYWxlLG09dC1pLGI9TWF0aC5zaWduKHguaGVpZ2h0KTtyZXR1cm4gdjxiKngubmVnYXRpdmVTcGFjZU1heD9NYXRoLmFicyhtKT4uNSp4LndpZHRoPyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKG0pPngud2lkdGg/KGVlKCksITApOih2PD1iKngubm90QVNwYWNlJiZGKCksdjw9Yip4LnRyYWNraW5nU3BhY2VNaW4/eC5oZWlnaHQrPXY6dGUodix4LnByZXZUcmFuc2Zvcm0sYil8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDpNYXRoLmFicyh2KSx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOnguaGVpZ2h0Kz12KSwhMCl9dmFyIHc9KHQtaSkveC50ZXh0QWR2YW5jZVNjYWxlLGs9ci1vLE89TWF0aC5zaWduKHgud2lkdGgpO3JldHVybiB3PE8qeC5uZWdhdGl2ZVNwYWNlTWF4P01hdGguYWJzKGspPi41KnguaGVpZ2h0PyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKGspPnguaGVpZ2h0PyhlZSgpLCEwKToodzw9Typ4Lm5vdEFTcGFjZSYmRigpLHc8PU8qeC50cmFja2luZ1NwYWNlTWluP3gud2lkdGgrPXc6dGUodyx4LnByZXZUcmFuc2Zvcm0sTyl8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDpNYXRoLmFicyh3KSxoZWlnaHQ6MCx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOngud2lkdGgrPXcpLCEwKX1mdW5jdGlvbiBRKGUpe3ZhciB0PWUuY2hhcnMscj1lLmV4dHJhU3BhY2luZyxuPVAuZm9udDtpZih0KWZvcih2YXIgYT1uLmNoYXJzVG9HbHlwaHModCksaT1QLmZvbnRNYXRyaXhbMF0qUC5mb250U2l6ZSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1hW29dLHU9Yy5jYXRlZ29yeTtpZighdS5pc0ludmlzaWJsZUZvcm1hdE1hcmspe3ZhciBsPVAuY2hhclNwYWNpbmcrKG8rMT09PXM/cjowKSxmPWMud2lkdGg7bi52ZXJ0aWNhbCYmKGY9Yy52bWV0cmljP2Mudm1ldHJpY1swXTotZik7dmFyIGg9ZippO2lmKHUuaXNXaGl0ZXNwYWNlKW4udmVydGljYWw/KGwrPS1oK1Aud29yZFNwYWNpbmcsUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWwpKToobCs9aCtQLndvcmRTcGFjaW5nLFAudHJhbnNsYXRlVGV4dE1hdHJpeChsKlAudGV4dEhTY2FsZSwwKSksQygiICIpO2Vsc2UgaWYoWigpKXt2YXIgZD1HKCk7dS5pc1plcm9XaWR0aERpYWNyaXRpYyYmKGg9MCksbi52ZXJ0aWNhbD8oUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsaCksaD1NYXRoLmFicyhoKSxkLmhlaWdodCs9aCk6KGgqPVAudGV4dEhTY2FsZSxQLnRyYW5zbGF0ZVRleHRNYXRyaXgoaCwwKSxkLndpZHRoKz1oKSxoJiYoZC5wcmV2VHJhbnNmb3JtPUgoKSk7dmFyIHA9Yy5ub3JtYWxpemVkVW5pY29kZTtDKHApJiZkLnN0ci5wdXNoKCIgIiksZC5zdHIucHVzaChwKSxsJiYobi52ZXJ0aWNhbD9QLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtbCk6UC50cmFuc2xhdGVUZXh0TWF0cml4KGwqUC50ZXh0SFNjYWxlLDApKX19fWVsc2V7dmFyIGc9UC5jaGFyU3BhY2luZytyO2cmJihuLnZlcnRpY2FsP1AudHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1nKTpQLnRyYW5zbGF0ZVRleHRNYXRyaXgoZypQLnRleHRIU2NhbGUsMCkpfX1mdW5jdGlvbiBlZSgpe0YoKSx4LmluaXRpYWxpemVkPyh4Lmhhc0VPTD0hMCxyZSgpKTpTLml0ZW1zLnB1c2goe3N0cjoiIixkaXI6Imx0ciIsd2lkdGg6MCxoZWlnaHQ6MCx0cmFuc2Zvcm06SCgpLGZvbnROYW1lOlAubG9hZGVkTmFtZSxoYXNFT0w6ITB9KX1mdW5jdGlvbiB0ZShlLHQscil7aWYocip4LnNwYWNlSW5GbG93TWluPD1lJiZlPD1yKnguc3BhY2VJbkZsb3dNYXgpcmV0dXJuIHguaW5pdGlhbGl6ZWQmJihGKCkseC5zdHIucHVzaCgiICIpKSwhMTt2YXIgbj14LmZvbnROYW1lLGE9MDtyZXR1cm4geC52ZXJ0aWNhbCYmKGE9ZSxlPTApLHJlKCksRigpLFMuaXRlbXMucHVzaCh7c3RyOiIgIixkaXI6Imx0ciIsd2lkdGg6TWF0aC5hYnMoZSksaGVpZ2h0Ok1hdGguYWJzKGEpLHRyYW5zZm9ybTp0fHxIKCksZm9udE5hbWU6bixoYXNFT0w6ITF9KSwhMH1mdW5jdGlvbiByZSgpe3ZhciBlLHQscjt4LmluaXRpYWxpemVkJiZ4LnN0ciYmKHgudmVydGljYWw/eC50b3RhbEhlaWdodCs9eC5oZWlnaHQqeC50ZXh0QWR2YW5jZVNjYWxlOngudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUsUy5pdGVtcy5wdXNoKCh0PShlPXgpLnN0ci5qb2luKCIiKSx7c3RyOihyPSgwLGIuYmlkaSkodCwtMSxlLnZlcnRpY2FsKSkuc3RyLGRpcjpyLmRpcix3aWR0aDpNYXRoLmFicyhlLnRvdGFsV2lkdGgpLGhlaWdodDpNYXRoLmFicyhlLnRvdGFsSGVpZ2h0KSx0cmFuc2Zvcm06ZS50cmFuc2Zvcm0sZm9udE5hbWU6ZS5mb250TmFtZSxoYXNFT0w6ZS5oYXNFT0x9KSkseC5pbml0aWFsaXplZD0hMSx4LnN0ci5sZW5ndGg9MCl9ZnVuY3Rpb24gbmUoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9Uy5pdGVtcy5sZW5ndGg7MCE9PXQmJihlJiZ0PDEwfHwoZC5lbnF1ZXVlKFMsdCksUy5pdGVtcz1bXSxTLnN0eWxlcz1PYmplY3QuY3JlYXRlKG51bGwpKSl9dmFyIGFlPW5ldyBxO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBzPWZ1bmN0aW9uKG4pe25lKCEwKSxQcm9taXNlLmFsbChbbixkLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7ZSh0LHIpfWNhdGNoKGUpe3IoZSl9fSkscil9O24uZW5zdXJlTm90VGVybWluYXRlZCgpLGFlLnJlc2V0KCk7Zm9yKHZhciB1LGY9e30scD1bXTshKHU9YWUuY2hlY2soKSkmJihwLmxlbmd0aD0wLGYuYXJncz1wLFgucmVhZChmKSk7KXtQPWMuc3RhdGU7dmFyIHY9Zi5mbjtzd2l0Y2gocD1mLmFyZ3MsMHx2KXtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIGI9cFswXS5uYW1lLHc9cFsxXTtpZihQLmZvbnQmJmI9PT1QLmZvbnROYW1lJiZ3PT09UC5mb250U2l6ZSlicmVhaztyZXR1cm4gcmUoKSxQLmZvbnROYW1lPWIsUC5mb250U2l6ZT13LHZvaWQgcyhZKGIsbnVsbCkpO2Nhc2UgYS5PUFMuc2V0VGV4dFJpc2U6UC50ZXh0UmlzZT1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0SFNjYWxlOlAudGV4dEhTY2FsZT1wWzBdLzEwMDticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6UC5sZWFkaW5nPXBbMF07YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDpQLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KHBbMF0scFsxXSksUC50ZXh0TWF0cml4PVAudGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpQLmxlYWRpbmc9LXBbMV0sUC50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0pLFAudGV4dE1hdHJpeD1QLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZTpQLmNhcnJpYWdlUmV0dXJuKCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0TWF0cml4OlAuc2V0VGV4dE1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSksUC5zZXRUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSkseigpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0Q2hhclNwYWNpbmc6UC5jaGFyU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6UC53b3JkU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuYmVnaW5UZXh0OlAudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLFAudGV4dExpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNob3dTcGFjZWRUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfWZvcih2YXIgeD0oUC5mb250LnZlcnRpY2FsPzE6LTEpKlAuZm9udFNpemUvMWUzLE89cFswXSxBPTAsQz1PLmxlbmd0aDtBPEMtMTtBKyspe3ZhciBGPU9bQV07aWYoInN0cmluZyI9PXR5cGVvZiBGKU4ucHVzaChGKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgRiYmMCE9PUYpe3ZhciBUPU4uam9pbigiIik7Ti5sZW5ndGg9MCxRKHtjaGFyczpULGV4dHJhU3BhY2luZzpGKnh9KX19dmFyIEk9Ty5hdCgtMSk7aWYoInN0cmluZyI9PXR5cGVvZiBJJiZOLnB1c2goSSksTi5sZW5ndGg+MCl7dmFyIEU9Ti5qb2luKCIiKTtOLmxlbmd0aD0wLFEoe2NoYXJzOkUsZXh0cmFTcGFjaW5nOjB9KX1icmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIWMuc3RhdGUuZm9udCl7TC5lbnN1cmVTdGF0ZUZvbnQoYy5zdGF0ZSk7Y29udGludWV9UC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVAud29yZFNwYWNpbmc9cFswXSxQLmNoYXJTcGFjaW5nPXBbMV0sUC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMl0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLnBhaW50WE9iamVjdDpyZSgpLER8fChEPWkuZ2V0KCJYT2JqZWN0Iil8fG8uRGljdC5lbXB0eSk7dmFyIGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lO2lmKGomJkIuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO3ZhciByPUQuZ2V0UmF3KE0pO2lmKHIgaW5zdGFuY2VvZiBvLlJlZil7aWYoQi5nZXRCeVJlZihyKSlyZXR1cm4gdm9pZCBlKCk7aWYoTC5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEocixMLnBhZ2VJbmRleCkpcmV0dXJuIHZvaWQgZSgpO3I9Ui5mZXRjaChyKX1pZighKHIgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO3ZhciBzPXIuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKHMgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09cy5uYW1lKXJldHVybiBCLnNldChNLHIuZGljdC5vYmpJZCwhMCksdm9pZCBlKCk7dmFyIHU9Yy5zdGF0ZS5jbG9uZSgpLGY9bmV3IFcodSkscD1yLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpO0FycmF5LmlzQXJyYXkocCkmJjY9PT1wLmxlbmd0aCYmZi50cmFuc2Zvcm0ocCksbmUoKTt2YXIgdj17ZW5xdWV1ZUludm9rZWQ6ITEsZW5xdWV1ZTpmdW5jdGlvbihlLHQpe3RoaXMuZW5xdWV1ZUludm9rZWQ9ITAsZC5lbnF1ZXVlKGUsdCl9LGdldCBkZXNpcmVkU2l6ZSgpe3JldHVybiBkLmRlc2lyZWRTaXplfSxnZXQgcmVhZHkoKXtyZXR1cm4gZC5yZWFkeX19O0wuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpyLHRhc2s6bixyZXNvdXJjZXM6ci5kaWN0LmdldCgiUmVzb3VyY2VzIil8fGksc3RhdGVNYW5hZ2VyOmYsY29tYmluZVRleHRJdGVtczpsLGluY2x1ZGVNYXJrZWRDb250ZW50Omgsc2luazp2LHNlZW5TdHlsZXM6Zyx2aWV3Qm94OnksbWFya2VkQ29udGVudERhdGE6a30pLnRoZW4oKGZ1bmN0aW9uKCl7di5lbnF1ZXVlSW52b2tlZHx8Qi5zZXQoTSxyLmRpY3Qub2JqSWQsITApLGUoKX0pLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYoIUwub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIFhPYmplY3Q6ICInLmNvbmNhdChlLCciLicpKX19KSkpO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmlmKGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lLGomJlUuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBuPXIuZ2V0KE0pO2lmKCEobiBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBzPW4uZ2V0KCJGb250Iik7aWYoIXMpcmV0dXJuIFUuc2V0KE0sbi5vYmpJZCwhMCksdm9pZCBlKCk7cmUoKSxQLmZvbnROYW1lPW51bGwsUC5mb250U2l6ZT1zWzFdLFkobnVsbCxzWzBdKS50aGVuKGUsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZighTC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2dldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSl9fSkpKTtjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpyZSgpLGgmJihrLmxldmVsKyssUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzpwWzBdaW5zdGFuY2VvZiBvLk5hbWU/cFswXS5uYW1lOm51bGx9KSk7YnJlYWs7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZihyZSgpLGgpe2subGV2ZWwrKzt2YXIgXz1udWxsO3BbMV1pbnN0YW5jZW9mIG8uRGljdCYmKF89cFsxXS5nZXQoIk1DSUQiKSksUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsaWQ6TnVtYmVyLmlzSW50ZWdlcihfKT8iIi5jb25jYXQoTC5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCksIl9tY2lkIikuY29uY2F0KF8pOm51bGwsdGFnOnBbMF1pbnN0YW5jZW9mIG8uTmFtZT9wWzBdLm5hbWU6bnVsbH0pfWJyZWFrO2Nhc2UgYS5PUFMuZW5kTWFya2VkQ29udGVudDppZihyZSgpLGgpe2lmKDA9PT1rLmxldmVsKWJyZWFrO2subGV2ZWwtLSxTLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9fWlmKFMuaXRlbXMubGVuZ3RoPj1kLmRlc2lyZWRTaXplKXt1PSEwO2JyZWFrfX11P3MoJCk6KHJlKCksbmUoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4oMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIicuY29uY2F0KG4ubmFtZSwnIiAnKSsndGFzazogIicuY29uY2F0KGUsJyIuJykpLHJlKCksdm9pZCBuZSgpO3Rocm93IGV9fSkpfX0se2tleToiZXh0cmFjdERhdGFTdHJ1Y3R1cmVzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG4saT10aGlzLHM9dGhpcy54cmVmLGw9dGhpcy5yZWFkVG9Vbmljb2RlKHIudG9Vbmljb2RlfHxlLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSk7aWYoci5jb21wb3NpdGUpe3ZhciBmPWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7ZiBpbnN0YW5jZW9mIG8uRGljdCYmKHIuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZi5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OmYuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7dmFyIGg9ZS5nZXQoIkNJRFRvR0lETWFwIik7aCBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSYmKG49aC5nZXRCeXRlcygpKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2V4dHJhY3REYXRhU3RydWN0dXJlcyAtIGlnbm9yaW5nIENJRFRvR0lETWFwIGRhdGE6ICInLmNvbmNhdChlLCciLicpKX19dmFyIGQscD1bXSxnPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe2lmKChkPWUuZ2V0KCJFbmNvZGluZyIpKWluc3RhbmNlb2Ygby5EaWN0KXtpZihnPShnPWQuZ2V0KCJCYXNlRW5jb2RpbmciKSlpbnN0YW5jZW9mIG8uTmFtZT9nLm5hbWU6bnVsbCxkLmhhcygiRGlmZmVyZW5jZXMiKSl7dmFyIHYseT0wLGI9TihkLmdldCgiRGlmZmVyZW5jZXMiKSk7dHJ5e2ZvcihiLnMoKTshKHY9Yi5uKCkpLmRvbmU7KXt2YXIgdz12LnZhbHVlLGs9cy5mZXRjaElmUmVmKHcpO2lmKCJudW1iZXIiPT10eXBlb2Ygayl5PWs7ZWxzZXtpZighKGsgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICIuY29uY2F0KGspKTtwW3krK109ay5uYW1lfX19Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9fX1lbHNlIGlmKGQgaW5zdGFuY2VvZiBvLk5hbWUpZz1kLm5hbWU7ZWxzZXt2YXIgUz0iRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0IjtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcihTKTsoMCxhLndhcm4pKFMpfSJNYWNSb21hbkVuY29kaW5nIiE9PWcmJiJNYWNFeHBlcnRFbmNvZGluZyIhPT1nJiYiV2luQW5zaUVuY29kaW5nIiE9PWcmJihnPW51bGwpfWlmKGcpci5kZWZhdWx0RW5jb2Rpbmc9KDAsdS5nZXRFbmNvZGluZykoZyk7ZWxzZXt2YXIgeD0hIShyLmZsYWdzJmMuRm9udEZsYWdzLlN5bWJvbGljKSxPPSEhKHIuZmxhZ3MmYy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO2Q9dS5TdGFuZGFyZEVuY29kaW5nLCJUcnVlVHlwZSIhPT1yLnR5cGV8fE98fChkPXUuV2luQW5zaUVuY29kaW5nKSx4JiYoZD11Lk1hY1JvbWFuRW5jb2Rpbmcsci5maWxlJiYhci5pc0ludGVybmFsRm9udHx8KC9TeW1ib2wvaS50ZXN0KHIubmFtZSk/ZD11LlN5bWJvbFNldEVuY29kaW5nOi9EaW5nYmF0c3xXaW5nZGluZ3MvaS50ZXN0KHIubmFtZSkmJihkPXUuWmFwZkRpbmdiYXRzRW5jb2RpbmcpKSksci5kZWZhdWx0RW5jb2Rpbmc9ZH1yZXR1cm4gci5kaWZmZXJlbmNlcz1wLHIuYmFzZUVuY29kaW5nTmFtZT1nLHIuaGFzRW5jb2Rpbmc9ISFnfHxwLmxlbmd0aD4wLHIuZGljdD1lLGwudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIudG9Vbmljb2RlPWUsaS5idWlsZFRvVW5pY29kZShyKX0pKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci50b1VuaWNvZGU9ZSxuJiYoci5jaWRUb0dpZE1hcD1pLnJlYWRDaWRUb0dpZE1hcChuLGUpKSxyfSkpfX0se2tleToiX3NpbXBsZUZvbnRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07KDAsYS5hc3NlcnQpKCFlLmNvbXBvc2l0ZSwiTXVzdCBiZSBhIHNpbXBsZSBmb250LiIpO3ZhciByPVtdLG49ZS5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKSxpPWUuYmFzZUVuY29kaW5nTmFtZSxvPWUuZGlmZmVyZW5jZXM7Zm9yKHZhciBzIGluIG8pe3ZhciBjPW9bc107Ii5ub3RkZWYiIT09YyYmKG5bc109Yyl9dmFyIGw9KDAsUy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgZiBpbiBuKXt2YXIgaD1uW2ZdO2lmKCIiIT09aCl7dmFyIGQ9bFtoXTtpZih2b2lkIDA9PT1kKXt2YXIgcD0wO3N3aXRjaChoWzBdKXtjYXNlIkciOjM9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlImciOjU9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlIkMiOmNhc2UiYyI6aWYoaC5sZW5ndGg+PTMmJmgubGVuZ3RoPD00KXt2YXIgZz1oLnN1YnN0cmluZygxKTtpZih0KXtwPXBhcnNlSW50KGcsMTYpO2JyZWFrfWlmKHA9K2csTnVtYmVyLmlzTmFOKHApJiZOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlSW50KGcsMTYpKSlyZXR1cm4gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlLCEwKX1icmVhaztjYXNlInUiOi0xIT09KGQ9KDAsQS5nZXRVbmljb2RlRm9yR2x5cGgpKGgsbCkpJiYocD1kKX1pZihwPjAmJnA8PTExMTQxMTEmJk51bWJlci5pc0ludGVnZXIocCkpe2lmKGkmJnA9PT0rZil7dmFyIHY9KDAsdS5nZXRFbmNvZGluZykoaSk7aWYodiYmKGg9dltmXSkpe3JbZl09U3RyaW5nLmZyb21DaGFyQ29kZShsW2hdKTtjb250aW51ZX19cltmXT1TdHJpbmcuZnJvbUNvZGVQb2ludChwKX19ZWxzZSByW2ZdPVN0cmluZy5mcm9tQ2hhckNvZGUoZCl9fXJldHVybiByfX0se2tleToiYnVpbGRUb1VuaWNvZGUiLHZhbHVlOihyPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbixzLGMsdSxsO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcD0hIXQudG9Vbmljb2RlJiZ0LnRvVW5pY29kZS5sZW5ndGg+MCwhdC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIXQuY29tcG9zaXRlJiZ0Lmhhc0VuY29kaW5nJiYodC5mYWxsYmFja1RvVW5pY29kZT10aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHQpKSxlLmFicnVwdCgicmV0dXJuIix0LnRvVW5pY29kZSk7Y2FzZSA0OmlmKHQuY29tcG9zaXRlKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGQuVG9Vbmljb2RlTWFwKHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUodCkpKTtjYXNlIDY6aWYoIXQuY29tcG9zaXRlfHwoIXQuY01hcC5idWlsdEluQ01hcHx8dC5jTWFwIGluc3RhbmNlb2YgaS5JZGVudGl0eUNNYXApJiYoIkFkb2JlIiE9PXQuY2lkU3lzdGVtSW5mby5yZWdpc3RyeXx8IkdCMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJDTlMxIiE9PXQuY2lkU3lzdGVtSW5mby5vcmRlcmluZyYmIkphcGFuMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJLb3JlYTEiIT09dC5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiByPXQuY2lkU3lzdGVtSW5mbyxuPXIucmVnaXN0cnkscz1yLm9yZGVyaW5nLGM9by5OYW1lLmdldCgiIi5jb25jYXQobiwiLSIpLmNvbmNhdChzLCItVUNTMiIpKSxlLm5leHQ9MTEsaS5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmMsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7Y2FzZSAxMTpyZXR1cm4gdT1lLnNlbnQsbD1bXSx0LmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjY1NTM1KXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9dS5sb29rdXAodCk7ciYmKGxbZV09U3RyaW5nLmZyb21DaGFyQ29kZSgoci5jaGFyQ29kZUF0KDApPDw4KStyLmNoYXJDb2RlQXQoMSkpKX0pKSxlLmFicnVwdCgicmV0dXJuIixuZXcgZC5Ub1VuaWNvZGVNYXAobCkpO2Nhc2UgMTU6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKHQuZmlyc3RDaGFyLHQubGFzdENoYXIpKTtjYXNlIDE2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlYWRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIG8uTmFtZT9pLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuSWRlbnRpdHlDTWFwP25ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBkLlRvVW5pY29kZU1hcChlLmdldE1hcCgpKX0pKTplIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2kuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBpLklkZW50aXR5Q01hcClyZXR1cm4gbmV3IGQuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk7dmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCJudW1iZXIiIT10eXBlb2Ygcil7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErPTIpe3ZhciBpPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtpZig1NTI5Nj09KDYzNDg4JmkpKXthKz0yO3ZhciBvPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtuLnB1c2goKCgxMDIzJmkpPDwxMCkrKDEwMjMmbykrNjU1MzYpfWVsc2Ugbi5wdXNoKGkpfXRbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLG4pfWVsc2UgdFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludChyKX0pKSxuZXcgZC5Ub1VuaWNvZGVNYXAodCl9KSwoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRvVW5pY29kZX0pLCgwLGEud2FybikoJ3JlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIicuY29uY2F0KGUsJyIuJykpLG51bGw7dGhyb3cgZX0pKTpQcm9taXNlLnJlc29sdmUobnVsbCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfX0se2tleToicmVhZENpZFRvR2lkTWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXt2YXIgaT1lW24rK108PDh8ZVtuXSxvPW4+PjE7KDAhPT1pfHx0LmhhcyhvKSkmJihyW29dPWkpfXJldHVybiByfX0se2tleToiZXh0cmFjdFdpZHRocyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxzLHUsbCxmLGgsZD10aGlzLnhyZWYscD1bXSxnPTAsdj1bXTtpZihyLmNvbXBvc2l0ZSl7aWYoZz1lLmhhcygiRFciKT9lLmdldCgiRFciKToxZTMsaD1lLmdldCgiVyIpKWZvcihhPTAsaT1oLmxlbmd0aDthPGk7YSsrKWlmKGw9ZC5mZXRjaElmUmVmKGhbYSsrXSksZj1kLmZldGNoSWZSZWYoaFthXSksQXJyYXkuaXNBcnJheShmKSlmb3Iocz0wLHU9Zi5sZW5ndGg7czx1O3MrKylwW2wrK109ZC5mZXRjaElmUmVmKGZbc10pO2Vsc2V7dmFyIHk9ZC5mZXRjaElmUmVmKGhbKythXSk7Zm9yKHM9bDtzPD1mO3MrKylwW3NdPXl9aWYoci52ZXJ0aWNhbCl7dmFyIG09ZS5nZXRBcnJheSgiRFcyIil8fFs4ODAsLTFlM107aWYobj1bbVsxXSwuNSpnLG1bMF1dLG09ZS5nZXQoIlcyIikpZm9yKGE9MCxpPW0ubGVuZ3RoO2E8aTthKyspaWYobD1kLmZldGNoSWZSZWYobVthKytdKSxmPWQuZmV0Y2hJZlJlZihtW2FdKSxBcnJheS5pc0FycmF5KGYpKWZvcihzPTAsdT1mLmxlbmd0aDtzPHU7cysrKXZbbCsrXT1bZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbc10pXTtlbHNle3ZhciBiPVtkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKV07Zm9yKHM9bDtzPD1mO3MrKyl2W3NdPWJ9fX1lbHNle3ZhciB3PXIuZmlyc3RDaGFyO2lmKGg9ZS5nZXQoIldpZHRocyIpKXtmb3Iocz13LGE9MCxpPWgubGVuZ3RoO2E8aTthKyspcFtzKytdPWQuZmV0Y2hJZlJlZihoW2FdKTtnPXBhcnNlRmxvYXQodC5nZXQoIk1pc3NpbmdXaWR0aCIpKXx8MH1lbHNle3ZhciBrPWUuZ2V0KCJCYXNlRm9udCIpO2lmKGsgaW5zdGFuY2VvZiBvLk5hbWUpe3ZhciBTPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGsubmFtZSk7cD10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKFMud2lkdGhzLHIpLGc9Uy5kZWZhdWx0V2lkdGh9fX12YXIgeD0hMCxPPWc7Zm9yKHZhciBBIGluIHApe3ZhciBDPXBbQV07aWYoQylpZihPKXtpZihPIT09Qyl7eD0hMTticmVha319ZWxzZSBPPUN9eCYmKHIuZmxhZ3N8PWMuRm9udEZsYWdzLkZpeGVkUGl0Y2gpLHIuZGVmYXVsdFdpZHRoPWcsci53aWR0aHM9cCxyLmRlZmF1bHRWTWV0cmljcz1uLHIudm1ldHJpY3M9dn19LHtrZXk6ImlzU2VyaWZGb250Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxsLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfX0se2tleToiZ2V0QmFzZUZvbnRNZXRyaWNzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPSExLGE9KDAsbC5nZXRTdGRGb250TWFwKSgpW2VdfHxlLGk9KDAsTy5nZXRNZXRyaWNzKSgpO2EgaW4gaXx8KGE9dGhpcy5pc1NlcmlmRm9udChlKT8iVGltZXMtUm9tYW4iOiJIZWx2ZXRpY2EiKTt2YXIgbz1pW2FdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygbz8odD1vLG49ITApOnI9bygpLHtkZWZhdWx0V2lkdGg6dCxtb25vc3BhY2U6bix3aWR0aHM6cn19fSx7a2V5OiJidWlsZENoYXJDb2RlVG9XaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXQuZGlmZmVyZW5jZXMsYT10LmRlZmF1bHRFbmNvZGluZyxpPTA7aTwyNTY7aSsrKWkgaW4gbiYmZVtuW2ldXT9yW2ldPWVbbltpXV06aSBpbiBhJiZlW2FbaV1dJiYocltpXT1lW2FbaV1dKTtyZXR1cm4gcn19LHtrZXk6InByZUV2YWx1YXRlRm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShyIGluc3RhbmNlb2Ygby5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTt2YXIgbixpLHM9ITE7aWYoIlR5cGUwIj09PXIubmFtZSl7dmFyIGM9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCFjKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KGMpP3RoaXMueHJlZi5mZXRjaElmUmVmKGNbMF0pOmMpaW5zdGFuY2VvZiBvLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTtpZighKChyPWUuZ2V0KCJTdWJ0eXBlIikpaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpO3M9ITB9dmFyIHU9ZS5nZXQoIkZpcnN0Q2hhciIpfHwwLGw9ZS5nZXQoIkxhc3RDaGFyIil8fChzPzY1NTM1OjI1NSksZj1lLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZihmKXtuPW5ldyBDLk11cm11ckhhc2gzXzY0O3ZhciBoPXQuZ2V0UmF3KCJFbmNvZGluZyIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpbi51cGRhdGUoaC5uYW1lKTtlbHNlIGlmKGggaW5zdGFuY2VvZiBvLlJlZiluLnVwZGF0ZShoLnRvU3RyaW5nKCkpO2Vsc2UgaWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQscD1OKGguZ2V0UmF3VmFsdWVzKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lKW4udXBkYXRlKGcubmFtZSk7ZWxzZSBpZihnIGluc3RhbmNlb2Ygby5SZWYpbi51cGRhdGUoZy50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZykpe2Zvcih2YXIgdj1nLmxlbmd0aCx5PW5ldyBBcnJheSh2KSxiPTA7Yjx2O2IrKyl7dmFyIHc9Z1tiXTt3IGluc3RhbmNlb2Ygby5OYW1lP3lbYl09dy5uYW1lOigibnVtYmVyIj09dHlwZW9mIHd8fHcgaW5zdGFuY2VvZiBvLlJlZikmJih5W2JdPXcudG9TdHJpbmcoKSl9bi51cGRhdGUoeS5qb2luKCkpfX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fWlmKG4udXBkYXRlKCIiLmNvbmNhdCh1LCItIikuY29uY2F0KGwpKSwoaT1lLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSlpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSl7dmFyIGs9aS5zdHJ8fGksUz1rLmJ1ZmZlcj9uZXcgVWludDhBcnJheShrLmJ1ZmZlci5idWZmZXIsMCxrLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoay5ieXRlcy5idWZmZXIsay5zdGFydCxrLmVuZC1rLnN0YXJ0KTtuLnVwZGF0ZShTKX1lbHNlIGkgaW5zdGFuY2VvZiBvLk5hbWUmJm4udXBkYXRlKGkubmFtZSk7dmFyIHg9ZS5nZXQoIldpZHRocyIpfHx0LmdldCgiV2lkdGhzIik7aWYoQXJyYXkuaXNBcnJheSh4KSl7dmFyIE8sQT1bXSxGPU4oeCk7dHJ5e2ZvcihGLnMoKTshKE89Ri5uKCkpLmRvbmU7KXt2YXIgUD1PLnZhbHVlOygibnVtYmVyIj09dHlwZW9mIFB8fFAgaW5zdGFuY2VvZiBvLlJlZikmJkEucHVzaChQLnRvU3RyaW5nKCkpfX1jYXRjaChlKXtGLmUoZSl9ZmluYWxseXtGLmYoKX1uLnVwZGF0ZShBLmpvaW4oKSl9aWYocyl7bi51cGRhdGUoImNvbXBvc2l0ZUZvbnQiKTt2YXIgVD1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoVCkpe3ZhciBJLEU9W10saj1OKFQpO3RyeXtmb3Ioai5zKCk7IShJPWoubigpKS5kb25lOyl7dmFyIE09SS52YWx1ZTtpZigibnVtYmVyIj09dHlwZW9mIE18fE0gaW5zdGFuY2VvZiBvLlJlZilFLnB1c2goTS50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoTSkpe3ZhciBfLEw9W10sUj1OKE0pO3RyeXtmb3IoUi5zKCk7IShfPVIubigpKS5kb25lOyl7dmFyIEQ9Xy52YWx1ZTsoIm51bWJlciI9PXR5cGVvZiBEfHxEIGluc3RhbmNlb2Ygby5SZWYpJiZMLnB1c2goRC50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9RS5wdXNoKCJbIi5jb25jYXQoTC5qb2luKCksIl0iKSl9fX1jYXRjaChlKXtqLmUoZSl9ZmluYWxseXtqLmYoKX1uLnVwZGF0ZShFLmpvaW4oKSl9dmFyIEI9ZS5nZXRSYXcoIkNJRFRvR0lETWFwIil8fHQuZ2V0UmF3KCJDSURUb0dJRE1hcCIpO0IgaW5zdGFuY2VvZiBvLk5hbWU/bi51cGRhdGUoQi5uYW1lKTpCIGluc3RhbmNlb2Ygby5SZWY/bi51cGRhdGUoQi50b1N0cmluZygpKTpCIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtJiZuLnVwZGF0ZShCLnBlZWtCeXRlcygpKX19cmV0dXJue2Rlc2NyaXB0b3I6ZixkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6cyx0eXBlOnIubmFtZSxmaXJzdENoYXI6dSxsYXN0Q2hhcjpsLHRvVW5pY29kZTppLGhhc2g6bj9uLmhleGRpZ2VzdCgpOiIifX19LHtrZXk6InRyYW5zbGF0ZUZvbnQiLHZhbHVlOih0PU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbix1LGYsZCxwLGcsdixtLGIsdyxrLFMseCxPLEEsQyxGLFAsVCxJLGosTSxfLEwsUixELEIsVSwkLFgsSCxxLEcseixXPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihyPXQuZGVzY3JpcHRvcixuPXQuZGljdCx1PXQuYmFzZURpY3QsZj10LmNvbXBvc2l0ZSxkPXQudHlwZSxwPXQuZmlyc3RDaGFyLGc9dC5sYXN0Q2hhcix2PXQudG9Vbmljb2RlLG09dC5jc3NGb250SW5mbyxiPSJUeXBlMyI9PT1kLHIpe2UubmV4dD0yNzticmVha31pZighYil7ZS5uZXh0PTk7YnJlYWt9KHI9bmV3IG8uRGljdChudWxsKSkuc2V0KCJGb250TmFtZSIsby5OYW1lLmdldChkKSksci5zZXQoIkZvbnRCQm94IixuLmdldEFycmF5KCJGb250QkJveCIpfHxbMCwwLDAsMF0pLGUubmV4dD0yNzticmVhaztjYXNlIDk6aWYoKGs9bi5nZXQoIkJhc2VGb250IikpaW5zdGFuY2VvZiBvLk5hbWUpe2UubmV4dD0xMjticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWQiKTtjYXNlIDEyOmlmKGs9ay5uYW1lLnJlcGxhY2UoL1ssX10vZywiLSIpLFM9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3MoaykseD1rLnNwbGl0KCItIilbMF0sTz0odGhpcy5pc1NlcmlmRm9udCh4KT9jLkZvbnRGbGFncy5TZXJpZjowKXwoUy5tb25vc3BhY2U/Yy5Gb250RmxhZ3MuRml4ZWRQaXRjaDowKXwoKDAsbC5nZXRTeW1ib2xzRm9udHMpKClbeF0/Yy5Gb250RmxhZ3MuU3ltYm9saWM6Yy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpLHc9e3R5cGU6ZCxuYW1lOmssbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsd2lkdGhzOlMud2lkdGhzLGRlZmF1bHRXaWR0aDpTLmRlZmF1bHRXaWR0aCxpc1NpbXVsYXRlZEZsYWdzOiEwLGZsYWdzOk8sZmlyc3RDaGFyOnAsbGFzdENoYXI6Zyx0b1VuaWNvZGU6dix4SGVpZ2h0OjAsY2FwSGVpZ2h0OjAsaXRhbGljQW5nbGU6MCxpc1R5cGUzRm9udDpifSxBPW4uZ2V0KCJXaWR0aHMiKSxDPSgwLGwuZ2V0U3RhbmRhcmRGb250TmFtZSkoayksRj1udWxsLCFDKXtlLm5leHQ9MjY7YnJlYWt9cmV0dXJuIHcuaXNTdGFuZGFyZEZvbnQ9ITAsZS5uZXh0PTI0LHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEMpO2Nhc2UgMjQ6Rj1lLnNlbnQsdy5pc0ludGVybmFsRm9udD0hIUY7Y2FzZSAyNjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobixuLHcpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKEEpe3ZhciB0LHI9W10sbj1wLGE9TihBKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBpPXQudmFsdWU7cltuKytdPVcueHJlZi5mZXRjaElmUmVmKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLndpZHRocz1yfWVsc2UgZS53aWR0aHM9Vy5idWlsZENoYXJDb2RlVG9XaWR0aChTLndpZHRocyxlKTtyZXR1cm4gbmV3IHMuRm9udChrLEYsZSl9KSkpO2Nhc2UgMjc6aWYoUD1yLmdldCgiRm9udE5hbWUiKSxUPW4uZ2V0KCJCYXNlRm9udCIpLCJzdHJpbmciPT10eXBlb2YgUCYmKFA9by5OYW1lLmdldChQKSksInN0cmluZyI9PXR5cGVvZiBUJiYoVD1vLk5hbWUuZ2V0KFQpKSxifHwoST1QJiZQLm5hbWUsaj1UJiZULm5hbWUsSSE9PWomJigoMCxhLmluZm8pKCJUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyBcIiIuY29uY2F0KEksJyIgYnV0ICcpKyJzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCBcIiIuY29uY2F0KGosJyIuJykpLEkmJmomJmouc3RhcnRzV2l0aChJKSYmKFA9VCkpKSwoUD1QfHxUKWluc3RhbmNlb2Ygby5OYW1lKXtlLm5leHQ9MzU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7Y2FzZSAzNTplLnByZXY9MzUsTT1yLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKSxlLm5leHQ9NDU7YnJlYWs7Y2FzZSAzOTppZihlLnByZXY9MzksZS50MD1lLmNhdGNoKDM1KSx0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXtlLm5leHQ9NDM7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDQzOigwLGEud2FybikoJ3RyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyAiJy5jb25jYXQoUC5uYW1lLCciIGZvbnQgZmlsZTogIicpLmNvbmNhdChlLnQwLCciLicpKSxNPW5ldyB5Lk51bGxTdHJlYW07Y2FzZSA0NTppZihCPSExLFU9ITEsJD1udWxsLCFNKXtlLm5leHQ9NTI7YnJlYWt9TS5kaWN0JiYoKFg9TS5kaWN0LmdldCgiU3VidHlwZSIpKWluc3RhbmNlb2Ygby5OYW1lJiYoXz1YLm5hbWUpLEw9TS5kaWN0LmdldCgiTGVuZ3RoMSIpLFI9TS5kaWN0LmdldCgiTGVuZ3RoMiIpLEQ9TS5kaWN0LmdldCgiTGVuZ3RoMyIpKSxlLm5leHQ9NzQ7YnJlYWs7Y2FzZSA1MjppZighbSl7ZS5uZXh0PTY2O2JyZWFrfWlmKCEoSD0oMCxoLmdldFhmYUZvbnROYW1lKShQLm5hbWUpKSl7ZS5uZXh0PTY0O2JyZWFrfXJldHVybiBtLmZvbnRGYW1pbHk9IiIuY29uY2F0KG0uZm9udEZhbWlseSwiLVBkZkpTLVhGQSIpLG0ubWV0cmljcz1ILm1ldHJpY3N8fG51bGwsJD1ILmZhY3RvcnN8fG51bGwsZS5uZXh0PTYwLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEgubmFtZSk7Y2FzZSA2MDpNPWUuc2VudCxVPSEhTSx1PW49KDAsaC5nZXRYZmFGb250RGljdCkoUC5uYW1lKSxmPSEwO2Nhc2UgNjQ6ZS5uZXh0PTc0O2JyZWFrO2Nhc2UgNjY6aWYoYil7ZS5uZXh0PTc0O2JyZWFrfWlmKCEocT0oMCxsLmdldFN0YW5kYXJkRm9udE5hbWUpKFAubmFtZSkpKXtlLm5leHQ9NzQ7YnJlYWt9cmV0dXJuIEI9ITAsZS5uZXh0PTcyLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKHEpO2Nhc2UgNzI6TT1lLnNlbnQsVT0hIU07Y2FzZSA3NDppZih3PXt0eXBlOmQsbmFtZTpQLm5hbWUsc3VidHlwZTpfLGZpbGU6TSxsZW5ndGgxOkwsbGVuZ3RoMjpSLGxlbmd0aDM6RCxpc1N0YW5kYXJkRm9udDpCLGlzSW50ZXJuYWxGb250OlUsbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsY29tcG9zaXRlOmYsZml4ZWRQaXRjaDohMSxmb250TWF0cml4Om4uZ2V0QXJyYXkoIkZvbnRNYXRyaXgiKXx8YS5GT05UX0lERU5USVRZX01BVFJJWCxmaXJzdENoYXI6cCxsYXN0Q2hhcjpnLHRvVW5pY29kZTp2LGJib3g6ci5nZXRBcnJheSgiRm9udEJCb3giKXx8bi5nZXRBcnJheSgiRm9udEJCb3giKSxhc2NlbnQ6ci5nZXQoIkFzY2VudCIpLGRlc2NlbnQ6ci5nZXQoIkRlc2NlbnQiKSx4SGVpZ2h0OnIuZ2V0KCJYSGVpZ2h0Iil8fDAsY2FwSGVpZ2h0OnIuZ2V0KCJDYXBIZWlnaHQiKXx8MCxmbGFnczpyLmdldCgiRmxhZ3MiKSxpdGFsaWNBbmdsZTpyLmdldCgiSXRhbGljQW5nbGUiKXx8MCxpc1R5cGUzRm9udDpiLGNzc0ZvbnRJbmZvOm0sc2NhbGVGYWN0b3JzOiR9LCFmKXtlLm5leHQ9ODM7YnJlYWt9cmV0dXJuKEc9dS5nZXQoIkVuY29kaW5nIikpaW5zdGFuY2VvZiBvLk5hbWUmJih3LmNpZEVuY29kaW5nPUcubmFtZSksZS5uZXh0PTgwLGkuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzpHLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pO2Nhc2UgODA6ej1lLnNlbnQsdy5jTWFwPXosdy52ZXJ0aWNhbD13LmNNYXAudmVydGljYWw7Y2FzZSA4MzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobix1LHcpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBXLmV4dHJhY3RXaWR0aHMobixyLGUpLG5ldyBzLkZvbnQoUC5uYW1lLE0sZSl9KSkpO2Nhc2UgODQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1szNSwzOV1dKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSxbe2tleToiYnVpbGRGb250UGF0aHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe2Z1bmN0aW9uIGkodCl7dmFyIGk9IiIuY29uY2F0KGUubG9hZGVkTmFtZSwiX3BhdGhfIikuY29uY2F0KHQpO3RyeXtpZihlLnJlbmRlcmVyLmhhc0J1aWx0UGF0aCh0KSlyZXR1cm47ci5zZW5kKCJjb21tb25vYmoiLFtpLCJGb250UGF0aCIsZS5yZW5kZXJlci5nZXRQYXRoSnModCldKX1jYXRjaChlKXtpZihuLmlnbm9yZUVycm9ycylyZXR1cm4gci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRCdWlsZFBhdGh9KSx2b2lkKDAsYS53YXJuKSgiYnVpbGRGb250UGF0aHMgLSBpZ25vcmluZyAiLmNvbmNhdChpLCcgZ2x5cGg6ICInKS5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19dmFyIG8scz1OKHQpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIGM9by52YWx1ZTtpKGMuZm9udENoYXIpO3ZhciB1PWMuYWNjZW50O3UmJnUuZm9udENoYXImJmkodS5mb250Q2hhcil9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX19LHtrZXk6ImZhbGxiYWNrRm9udERpY3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkRpY3Q7cmV0dXJuIGUuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiUERGSlMtRmFsbGJhY2tGb250IikpLGUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKSxlLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSwoMCxhLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGV9KCk7dC5QYXJ0aWFsRXZhbHVhdG9yPUc7dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQubG9hZGVkTmFtZSxuPXQuZm9udCxhPXQuZGljdCxpPXQuZXZhbHVhdG9yT3B0aW9ucztfKHRoaXMsZSksdGhpcy5sb2FkZWROYW1lPXIsdGhpcy5mb250PW4sdGhpcy5kaWN0PWEsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucz1pfHxVLHRoaXMudHlwZTNMb2FkZWQ9bnVsbCx0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPW4uaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsLHRoaXMuc2VudD0hMX1yZXR1cm4gUihlLFt7a2V5OiJzZW5kIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNlbnR8fCh0aGlzLnNlbnQ9ITAsZS5zZW5kKCJjb21tb25vYmoiLFt0aGlzLmxvYWRlZE5hbWUsIkZvbnQiLHRoaXMuZm9udC5leHBvcnREYXRhKHRoaXMuX2V2YWx1YXRvck9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllcyldKSl9fSx7a2V5OiJmYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mb250LmRhdGEmJih0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlPSEwLEcuYnVpbGRGb250UGF0aHModGhpcy5mb250LHRoaXMuZm9udC5nbHlwaENhY2hlVmFsdWVzLGUsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucykpfX0se2tleToibG9hZFR5cGUzRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy50eXBlM0xvYWRlZClyZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtpZighdGhpcy5mb250LmlzVHlwZTNGb250KXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7dmFyIGk9ZS5jbG9uZSh7aWdub3JlRXJyb3JzOiExfSk7aS5wYXJzaW5nVHlwZTNGb250PSEwO3ZhciBzPW5ldyBvLlJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXMuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnMucHV0KHRoaXMuZGljdC5vYmpJZCksaS50eXBlM0ZvbnRSZWZzPXM7dmFyIGMsdT10aGlzLmZvbnQsbD10aGlzLnR5cGUzRGVwZW5kZW5jaWVzLGY9UHJvbWlzZS5yZXNvbHZlKCksaD10aGlzLmRpY3QuZ2V0KCJDaGFyUHJvY3MiKSxkPXRoaXMuZGljdC5nZXQoIlJlc291cmNlcyIpfHx0LHA9T2JqZWN0LmNyZWF0ZShudWxsKSxnPWEuVXRpbC5ub3JtYWxpemVSZWN0KHUuYmJveHx8WzAsMCwwLDBdKSx2PWdbMl0tZ1swXSx5PWdbM10tZ1sxXSxtPU1hdGguaHlwb3Qodix5KSxiPU4oaC5nZXRLZXlzKCkpO3RyeXt2YXIgdz1mdW5jdGlvbigpe3ZhciBlPWMudmFsdWU7Zj1mLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ9aC5nZXQoZSksbz1uZXcgRi5PcGVyYXRvckxpc3Q7cmV0dXJuIGkuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnIscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Om99KS50aGVuKChmdW5jdGlvbigpe28uZm5BcnJheVswXT09PWEuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyYmbi5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhvLG0pLHBbZV09by5nZXRJUigpO3ZhciB0LHI9TihvLmRlcGVuZGVuY2llcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2wuYWRkKGkpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKHQpeygwLGEud2FybikoJ1R5cGUzIGZvbnQgcmVzb3VyY2UgIicuY29uY2F0KGUsJyIgaXMgbm90IGF2YWlsYWJsZS4nKSk7dmFyIHI9bmV3IEYuT3BlcmF0b3JMaXN0O3BbZV09ci5nZXRJUigpfSkpfSkpfTtmb3IoYi5zKCk7IShjPWIubigpKS5kb25lOyl3KCl9Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9cmV0dXJuIHRoaXMudHlwZTNMb2FkZWQ9Zi50aGVuKChmdW5jdGlvbigpe3UuY2hhclByb2NPcGVyYXRvckxpc3Q9cCxuLl9iYm94JiYodS5pc0NoYXJCQm94PSEwLHUuYmJveD1uLl9iYm94KX0pKSx0aGlzLnR5cGUzTG9hZGVkfX0se2tleToiX3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpOYU4scj1hLlV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksbj1yWzJdLXJbMF0saT1yWzNdLXJbMV0sbz1NYXRoLmh5cG90KG4saSk7MD09PW58fDA9PT1pPyhlLmZuQXJyYXkuc3BsaWNlKDAsMSksZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSkpOigwPT09dHx8TWF0aC5yb3VuZChvL3QpPj0xMCkmJih0aGlzLl9iYm94fHwodGhpcy5fYmJveD1bMS8wLDEvMCwtMS8wLC0xLzBdKSx0aGlzLl9iYm94WzBdPU1hdGgubWluKHRoaXMuX2Jib3hbMF0sclswXSksdGhpcy5fYmJveFsxXT1NYXRoLm1pbih0aGlzLl9iYm94WzFdLHJbMV0pLHRoaXMuX2Jib3hbMl09TWF0aC5tYXgodGhpcy5fYmJveFsyXSxyWzJdKSx0aGlzLl9iYm94WzNdPU1hdGgubWF4KHRoaXMuX2Jib3hbM10sclszXSkpO2Zvcih2YXIgcz0wLGM9ZS5sZW5ndGg7czxjOyl7c3dpdGNoKGUuZm5BcnJheVtzXSl7Y2FzZSBhLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHM6YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOmNhc2UgYS5PUFMuc2V0RmlsbENvbG9yU3BhY2U6Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNvbG9yTjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvck46Y2FzZSBhLk9QUy5zZXRTdHJva2VHcmF5OmNhc2UgYS5PUFMuc2V0RmlsbEdyYXk6Y2FzZSBhLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6Y2FzZSBhLk9QUy5zaGFkaW5nRmlsbDpjYXNlIGEuT1BTLnNldFJlbmRlcmluZ0ludGVudDplLmZuQXJyYXkuc3BsaWNlKHMsMSksZS5hcmdzQXJyYXkuc3BsaWNlKHMsMSksYy0tO2NvbnRpbnVlO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmZvcih2YXIgdT1UKGUuYXJnc0FycmF5W3NdLDEpWzBdLGw9MCxmPXUubGVuZ3RoO2w8Zjspe3N3aXRjaChUKHVbbF0sMSlbMF0pe2Nhc2UiVFIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIkJHIjpjYXNlIkJHMiI6Y2FzZSJVQ1IiOmNhc2UiVUNSMiI6dS5zcGxpY2UobCwxKSxmLS07Y29udGludWV9bCsrfX1zKyt9fX1dKSxlfSgpLFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5ldyBZO18odGhpcyxlKSx0aGlzLnN0YXRlPXQsdGhpcy5zdGF0ZVN0YWNrPVtdfXJldHVybiBSKGUsW3trZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKSx0aGlzLnN0YXRlPWUuY2xvbmUoKX19LHtrZXk6InJlc3RvcmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZVN0YWNrLnBvcCgpO2UmJih0aGlzLnN0YXRlPWUpfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnN0YXRlLmN0bT1hLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLGUpfX1dKSxlfSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoYS5JREVOVElUWV9NQVRSSVgpLHRoaXMuZm9udE5hbWU9bnVsbCx0aGlzLmZvbnRTaXplPTAsdGhpcy5sb2FkZWROYW1lPW51bGwsdGhpcy5mb250PW51bGwsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy50ZXh0TWF0cml4PWEuSURFTlRJVFlfTUFUUklYLnNsaWNlKCksdGhpcy50ZXh0TGluZU1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wfXJldHVybiBSKGUsW3trZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz10aGlzLnRleHRNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJzZXRUZXh0TGluZU1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPXRoaXMudGV4dExpbmVNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJ0cmFuc2xhdGVUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dE1hdHJpeDtyWzRdPXJbMF0qZStyWzJdKnQrcls0XSxyWzVdPXJbMV0qZStyWzNdKnQrcls1XX19LHtrZXk6InRyYW5zbGF0ZVRleHRMaW5lTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dExpbmVNYXRyaXg7cls0XT1yWzBdKmUrclsyXSp0K3JbNF0scls1XT1yWzFdKmUrclszXSp0K3JbNV19fSx7a2V5OiJjYXJyaWFnZVJldHVybiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KDAsLXRoaXMubGVhZGluZyksdGhpcy50ZXh0TWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIGUudGV4dE1hdHJpeD10aGlzLnRleHRNYXRyaXguc2xpY2UoKSxlLnRleHRMaW5lTWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKSxlLmZvbnRNYXRyaXg9dGhpcy5mb250TWF0cml4LnNsaWNlKCksZX19XSksZX0oKSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe18odGhpcyxlKSx0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KGEuSURFTlRJVFlfTUFUUklYKSx0aGlzLmZvbnQ9bnVsbCx0aGlzLnRleHRSZW5kZXJpbmdNb2RlPWEuVGV4dFJlbmRlcmluZ01vZGUuRklMTCx0aGlzLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksdGhpcy5zdHJva2VDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXl9cmV0dXJuIFIoZSxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fV0pLGV9KCksSz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bmV3IFc7Xyh0aGlzLGUpLHRoaXMucGFyc2VyPW5ldyBnLlBhcnNlcih7bGV4ZXI6bmV3IGcuTGV4ZXIodCxlLm9wTWFwKSx4cmVmOnJ9KSx0aGlzLnN0YXRlTWFuYWdlcj1uLHRoaXMubm9uUHJvY2Vzc2VkQXJncz1bXSx0aGlzLl9pc1BhdGhPcD0hMSx0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wfXJldHVybiBSKGUsW3trZXk6InNhdmVkU3RhdGVzRGVwdGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aH19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10LmFyZ3M7Oyl7dmFyIG49dGhpcy5wYXJzZXIuZ2V0T2JqKCk7aWYobiBpbnN0YW5jZW9mIG8uQ21kKXt2YXIgaT1uLmNtZCxzPWUub3BNYXBbaV07aWYoIXMpeygwLGEud2FybikoJ1Vua25vd24gY29tbWFuZCAiJy5jb25jYXQoaSwnIi4nKSk7Y29udGludWV9dmFyIGM9cy5pZCx1PXMubnVtQXJncyxsPW51bGwhPT1yP3IubGVuZ3RoOjA7aWYodGhpcy5faXNQYXRoT3B8fCh0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wKSx0aGlzLl9pc1BhdGhPcD1jPj1hLk9QUy5tb3ZlVG8mJmM8PWEuT1BTLmVuZFBhdGgscy52YXJpYWJsZUFyZ3MpbD51JiYoMCxhLmluZm8pKCJDb21tYW5kICIuY29uY2F0KGksIjogZXhwZWN0ZWQgWzAsICIpLmNvbmNhdCh1LCJdIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIikpO2Vsc2V7aWYobCE9PXUpe2Zvcih2YXIgZj10aGlzLm5vblByb2Nlc3NlZEFyZ3M7bD51OylmLnB1c2goci5zaGlmdCgpKSxsLS07Zm9yKDtsPHUmJjAhPT1mLmxlbmd0aDspbnVsbD09PXImJihyPVtdKSxyLnVuc2hpZnQoZi5wb3AoKSksbCsrfWlmKGw8dSl7dmFyIGg9ImNvbW1hbmQgIi5jb25jYXQoaSwiOiBleHBlY3RlZCAiKS5jb25jYXQodSwiIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIik7aWYodGhpcy5faXNQYXRoT3AmJisrdGhpcy5fbnVtSW52YWxpZFBhdGhPUFM+ZS5NQVhfSU5WQUxJRF9QQVRIX09QUyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCAiLmNvbmNhdChoKSk7KDAsYS53YXJuKSgiU2tpcHBpbmcgIi5jb25jYXQoaCkpLG51bGwhPT1yJiYoci5sZW5ndGg9MCk7Y29udGludWV9fXJldHVybiB0aGlzLnByZXByb2Nlc3NDb21tYW5kKGMsciksdC5mbj1jLHQuYXJncz1yLCEwfWlmKG49PT1vLkVPRilyZXR1cm4hMTtpZihudWxsIT09biYmKG51bGw9PT1yJiYocj1bXSksci5wdXNoKG4pLHIubGVuZ3RoPjMzKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX0se2tleToicHJlcHJvY2Vzc0NvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSBhLk9QUy5zYXZlOnRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTticmVhaztjYXNlIGEuT1BTLnJlc3RvcmU6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybSh0KX19fV0sW3trZXk6Im9wTWFwIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT0oMCx4LmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uudz17aWQ6YS5PUFMuc2V0TGluZVdpZHRoLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuSj17aWQ6YS5PUFMuc2V0TGluZUNhcCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmo9e2lkOmEuT1BTLnNldExpbmVKb2luLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuTT17aWQ6YS5PUFMuc2V0TWl0ZXJMaW1pdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmQ9e2lkOmEuT1BTLnNldERhc2gsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5yaT17aWQ6YS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuaT17aWQ6YS5PUFMuc2V0RmxhdG5lc3MsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5ncz17aWQ6YS5PUFMuc2V0R1N0YXRlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUucT17aWQ6YS5PUFMuc2F2ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlE9e2lkOmEuT1BTLnJlc3RvcmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5jbT17aWQ6YS5PUFMudHJhbnNmb3JtLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGUubT17aWQ6YS5PUFMubW92ZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUubD17aWQ6YS5PUFMubGluZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuYz17aWQ6YS5PUFMuY3VydmVUbyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxlLnY9e2lkOmEuT1BTLmN1cnZlVG8yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUueT17aWQ6YS5PUFMuY3VydmVUbzMsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5oPXtpZDphLk9QUy5jbG9zZVBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5yZT17aWQ6YS5PUFMucmVjdGFuZ2xlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUuUz17aWQ6YS5PUFMuc3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUucz17aWQ6YS5PUFMuY2xvc2VTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5mPXtpZDphLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRj17aWQ6YS5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJmKiJdPXtpZDphLk9QUy5lb0ZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5CPXtpZDphLk9QUy5maWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIkIqIl09e2lkOmEuT1BTLmVvRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLmI9e2lkOmEuT1BTLmNsb3NlRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJiKiJdPXtpZDphLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLm49e2lkOmEuT1BTLmVuZFBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5XPXtpZDphLk9QUy5jbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIlcqIl09e2lkOmEuT1BTLmVvQ2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJUPXtpZDphLk9QUy5iZWdpblRleHQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5FVD17aWQ6YS5PUFMuZW5kVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlRjPXtpZDphLk9QUy5zZXRDaGFyU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR3PXtpZDphLk9QUy5zZXRXb3JkU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR6PXtpZDphLk9QUy5zZXRIU2NhbGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5UTD17aWQ6YS5PUFMuc2V0TGVhZGluZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlRmPXtpZDphLk9QUy5zZXRGb250LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVHI9e2lkOmEuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVHM9e2lkOmEuT1BTLnNldFRleHRSaXNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVGQ9e2lkOmEuT1BTLm1vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVEQ9e2lkOmEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLlRtPXtpZDphLk9QUy5zZXRUZXh0TWF0cml4LG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGVbIlQqIl09e2lkOmEuT1BTLm5leHRMaW5lLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuVGo9e2lkOmEuT1BTLnNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVEo9e2lkOmEuT1BTLnNob3dTcGFjZWRUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGVbIiciXT17aWQ6YS5PUFMubmV4dExpbmVTaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlWyciJ109e2lkOmEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUuZDA9e2lkOmEuT1BTLnNldENoYXJXaWR0aCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLmQxPXtpZDphLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sZS5DUz17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmNzPXtpZDphLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlNDPXtpZDphLk9QUy5zZXRTdHJva2VDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfSxlLlNDTj17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxlLnNjPXtpZDphLk9QUy5zZXRGaWxsQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sZS5zY249e2lkOmEuT1BTLnNldEZpbGxDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LGUuRz17aWQ6YS5PUFMuc2V0U3Ryb2tlR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmc9e2lkOmEuT1BTLnNldEZpbGxHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuUkc9e2lkOmEuT1BTLnNldFN0cm9rZVJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUucmc9e2lkOmEuT1BTLnNldEZpbGxSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxlLks9e2lkOmEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxlLms9e2lkOmEuT1BTLnNldEZpbGxDTVlLQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5zaD17aWQ6YS5PUFMuc2hhZGluZ0ZpbGwsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CST17aWQ6YS5PUFMuYmVnaW5JbmxpbmVJbWFnZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLklEPXtpZDphLk9QUy5iZWdpbkltYWdlRGF0YSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkVJPXtpZDphLk9QUy5lbmRJbmxpbmVJbWFnZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLkRvPXtpZDphLk9QUy5wYWludFhPYmplY3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5NUD17aWQ6YS5PUFMubWFya1BvaW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuRFA9e2lkOmEuT1BTLm1hcmtQb2ludFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuQk1DPXtpZDphLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CREM9e2lkOmEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuRU1DPXtpZDphLk9QUy5lbmRNYXJrZWRDb250ZW50LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuQlg9e2lkOmEuT1BTLmJlZ2luQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRVg9e2lkOmEuT1BTLmVuZENvbXBhdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJNPW51bGwsZS5CRD1udWxsLGUudHJ1ZT1udWxsLGUuZmE9bnVsbCxlLmZhbD1udWxsLGUuZmFscz1udWxsLGUuZmFsc2U9bnVsbCxlLm51PW51bGwsZS5udWw9bnVsbCxlLm51bGw9bnVsbH0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3BNYXAiLGUoKSl9fSx7a2V5OiJNQVhfSU5WQUxJRF9QQVRIX09QUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIk1BWF9JTlZBTElEX1BBVEhfT1BTIiwxMCl9fV0pLGV9KCk7dC5FdmFsdWF0b3JQcmVwcm9jZXNzb3I9S30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklkZW50aXR5Q01hcD10LkNNYXBGYWN0b3J5PXQuQ01hcD12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTQ2KSxzPXIoMTM1KSxjPXIoMTM5KTtmdW5jdGlvbiB1KCl7dT1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGwoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gZihlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1sO3ZhciBoPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1mKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxsPXUudmFsdWU7cmV0dXJuIGwmJiJvYmplY3QiPT1wKGwpJiZyLmNhbGwobCwiX19hd2FpdCIpP3QucmVzb2x2ZShsLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShsKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9ZihlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWYobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGwodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBsKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtsKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtsKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaChlLHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saChlLHQpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scChlKX1mdW5jdGlvbiBnKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1wKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXAoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHkoZSx0LHIpe3JldHVybiB0JiZ2KGUucHJvdG90eXBlLHQpLHImJnYoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBtPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sYj1NYXRoLnBvdygyLDI0KS0xLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtnKHRoaXMsZSksdGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wLHRoaXMuX21hcD1bXSx0aGlzLm5hbWU9IiIsdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLnVzZUNNYXA9bnVsbCx0aGlzLmJ1aWx0SW5DTWFwPXR9cmV0dXJuIHkoZSxbe2tleToiYWRkQ29kZXNwYWNlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLmNvZGVzcGFjZVJhbmdlc1tlLTFdLnB1c2godCxyKSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrfX0se2tleToibWFwQ2lkUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0LWU+Yil0aHJvdyBuZXcgRXJyb3IoIm1hcENpZFJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2Zvcig7ZTw9dDspdGhpcy5fbWFwW2UrK109cisrfX0se2tleToibWFwQmZSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHQtZT5iKXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgtMTtlPD10Oyl7dGhpcy5fbWFwW2UrK109cjt2YXIgYT1yLmNoYXJDb2RlQXQobikrMTtyPWE+MjU1P3Iuc3Vic3RyaW5nKDAsbi0xKStTdHJpbmcuZnJvbUNoYXJDb2RlKHIuY2hhckNvZGVBdChuLTEpKzEpKyJcMCI6ci5zdWJzdHJpbmcoMCxuKStTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYodC1lPmIpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlVG9BcnJheSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgsYT0wO2U8PXQmJmE8bjspdGhpcy5fbWFwW2VdPXJbYSsrXSwrK2V9fSx7a2V5OiJtYXBPbmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJjb250YWlucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcCxyPXQubGVuZ3RoO2lmKHI8PTY1NTM2KWZvcih2YXIgbj0wO248cjtuKyspdm9pZCAwIT09dFtuXSYmZShuLHRbbl0pO2Vsc2UgZm9yKHZhciBhIGluIHQpZShhLHRbYV0pfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgciBpbiB0KWlmKHRbcl09PT1lKXJldHVybiAwfHI7cmV0dXJuLTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcH19LHtrZXk6InJlYWRDaGFyQ29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wLGE9dGhpcy5jb2Rlc3BhY2VSYW5nZXMsaT0wLG89YS5sZW5ndGg7aTxvO2krKyl7bj0objw8OHxlLmNoYXJDb2RlQXQodCtpKSk+Pj4wO2Zvcih2YXIgcz1hW2ldLGM9MCx1PXMubGVuZ3RoO2M8dTspe3ZhciBsPXNbYysrXSxmPXNbYysrXTtpZihuPj1sJiZuPD1mKXJldHVybiByLmNoYXJjb2RlPW4sdm9pZChyLmxlbmd0aD1pKzEpfX1yLmNoYXJjb2RlPTAsci5sZW5ndGg9MX19LHtrZXk6ImdldENoYXJDb2RlTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb2Rlc3BhY2VSYW5nZXMscj0wLG49dC5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGE9dFtyXSxpPTAsbz1hLmxlbmd0aDtpPG87KXt2YXIgcz1hW2krK10sYz1hW2krK107aWYoZT49cyYmZTw9YylyZXR1cm4gcisxfXJldHVybiAxfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19XSksZX0oKTt0LkNNYXA9dzt2YXIgaz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaChlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1kKHQpO2lmKHIpe3ZhciBhPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSx0KXt2YXIgcjtyZXR1cm4gZyh0aGlzLGkpLChyPWEuY2FsbCh0aGlzKSkudmVydGljYWw9ZSxyLmFkZENvZGVzcGFjZVJhbmdlKHQsMCw2NTUzNSkscn1yZXR1cm4geShpLFt7a2V5OiJtYXBDaWRSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlVG9BcnJheSIpfX0se2tleToibWFwT25lIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkT25lIil9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOnZvaWQgMH19LHtrZXk6ImNvbnRhaW5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzV9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PD02NTUzNTt0KyspZSh0LHQpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6LTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBBcnJheSg2NTUzNiksdD0wO3Q8PTY1NTM1O3QrKyllW3RdPXQ7cmV0dXJuIGV9fSx7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiA2NTUzNn19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwIil9fV0pLGl9KHcpO3QuSWRlbnRpdHlDTWFwPWs7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTAsbj0wO248PXQ7bisrKXI9cjw8OHxlW25dO3JldHVybiByPj4+MH1mdW5jdGlvbiB0KGUsdCl7cmV0dXJuIDE9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdKTozPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSxlWzJdLGVbM10pOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KDAsdCsxKSl9ZnVuY3Rpb24gcihlLHQscil7Zm9yKHZhciBuPTAsYT1yO2E+PTA7YS0tKW4rPWVbYV0rdFthXSxlW2FdPTI1NSZuLG4+Pj04fWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MSxuPXQ7bj49MCYmcj4wO24tLSlyKz1lW25dLGVbbl09MjU1JnIscj4+PTh9dmFyIGk9MTYsbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7Zyh0aGlzLGUpLHRoaXMuYnVmZmVyPXQsdGhpcy5wb3M9MCx0aGlzLmVuZD10Lmxlbmd0aCx0aGlzLnRtcEJ1Zj1uZXcgVWludDhBcnJheSgxOSl9cmV0dXJuIHkoZSxbe2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXX19LHtrZXk6InJlYWROdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Rve3ZhciByPXRoaXMucmVhZEJ5dGUoKTtpZihyPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7ZT0hKDEyOCZyKSx0PXQ8PDd8MTI3JnJ9d2hpbGUoIWUpO3JldHVybiB0fX0se2tleToicmVhZFNpZ25lZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gMSZlP34oZT4+PjEpOmU+Pj4xfX0se2tleToicmVhZEhleCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyx0aGlzLnBvcyt0KzEpKSx0aGlzLnBvcys9dCsxfX0se2tleToicmVhZEhleE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixhPXRoaXMudG1wQnVmLGk9MDtkb3t2YXIgbz10aGlzLnJlYWRCeXRlKCk7aWYobzwwKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO3I9ISgxMjgmbyksYVtpKytdPTEyNyZvfXdoaWxlKCFyKTtmb3IodmFyIHM9dCxjPTAsdT0wO3M+PTA7KXtmb3IoO3U8OCYmYS5sZW5ndGg+MDspY3w9YVstLWldPDx1LHUrPTc7ZVtzXT0yNTUmYyxzLS0sYz4+PTgsdS09OH19fSx7a2V5OiJyZWFkSGV4U2lnbmVkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucmVhZEhleE51bWJlcihlLHQpO2Zvcih2YXIgcj0xJmVbdF0/MjU1OjAsbj0wLGE9MDthPD10O2ErKyluPSgxJm4pPDw4fGVbYV0sZVthXT1uPj4xXnJ9fSx7a2V5OiJyZWFkU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJlYWROdW1iZXIoKSx0PSIiLHI9MDtyPGU7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO3JldHVybiB0fX1dKSxlfSgpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7Zyh0aGlzLG4pfXZhciBzO3JldHVybiB5KG4sW3trZXk6InByb2Nlc3MiLHZhbHVlOihzPWYodSgpLm1hcmsoKGZ1bmN0aW9uIG4ocyxjLGwpe3ZhciBmLGgsZCxwLGcsdix5LG0sYix3LGssUyx4LE8sQSxDLEYsUCxULEksRTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOmY9bmV3IG8ocyksaD1mLnJlYWRCeXRlKCksYy52ZXJ0aWNhbD0hISgxJmgpLGQ9bnVsbCxwPW5ldyBVaW50OEFycmF5KGkpLGc9bmV3IFVpbnQ4QXJyYXkoaSksdj1uZXcgVWludDhBcnJheShpKSx5PW5ldyBVaW50OEFycmF5KGkpLG09bmV3IFVpbnQ4QXJyYXkoaSk7Y2FzZSA5OmlmKCEoKHc9Zi5yZWFkQnl0ZSgpKT49MCkpe24ubmV4dD02ODticmVha31pZig3IT0oaz13Pj41KSl7bi5uZXh0PTIwO2JyZWFrfW4udDA9MzEmdyxuLm5leHQ9MD09PW4udDA/MTU6MT09PW4udDA/MTc6MTk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZi5yZWFkU3RyaW5nKCksbi5hYnJ1cHQoImJyZWFrIiwxOSk7Y2FzZSAxNzpyZXR1cm4gZD1mLnJlYWRTdHJpbmcoKSxuLmFicnVwdCgiYnJlYWsiLDE5KTtjYXNlIDE5OnJldHVybiBuLmFicnVwdCgiY29udGludWUiLDkpO2Nhc2UgMjA6aWYoUz0hISgxNiZ3KSwhKDErKHg9MTUmdyk+aSkpe24ubmV4dD0yNDticmVha310aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjYXNlIDI0Ok89MSxBPWYucmVhZE51bWJlcigpLG4udDE9ayxuLm5leHQ9MD09PW4udDE/Mjk6MT09PW4udDE/MzU6Mj09PW4udDE/NDE6Mz09PW4udDE/NDY6ND09PW4udDE/NTM6NT09PW4udDE/NTg6NjU7YnJlYWs7Y2FzZSAyOTpmb3IoZi5yZWFkSGV4KHAseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksYy5hZGRDb2Rlc3BhY2VSYW5nZSh4KzEsZShwLHgpLGUoZyx4KSksQz0xO0M8QTtDKyspYShnLHgpLGYucmVhZEhleE51bWJlcihwLHgpLHIocCxnLHgpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGMuYWRkQ29kZXNwYWNlUmFuZ2UoeCsxLGUocCx4KSxlKGcseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDM1OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxmLnJlYWROdW1iZXIoKSxGPTE7RjxBO0YrKylhKGcseCksZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksZi5yZWFkTnVtYmVyKCk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNDE6Zm9yKGYucmVhZEhleCh2LHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBPbmUoZSh2LHgpLGIpLFA9MTtQPEE7UCsrKWEodix4KSxTfHwoZi5yZWFkSGV4TnVtYmVyKG0seCkscih2LG0seCkpLGI9Zi5yZWFkU2lnbmVkKCkrKGIrMSksYy5tYXBPbmUoZSh2LHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDQ2OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxiPWYucmVhZE51bWJlcigpLGMubWFwQ2lkUmFuZ2UoZShwLHgpLGUoZyx4KSxiKSxUPTE7VDxBO1QrKylhKGcseCksUz9wLnNldChnKTooZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCkpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBDaWRSYW5nZShlKHAseCksZShnLHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDUzOmZvcihmLnJlYWRIZXgodixPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcE9uZShlKHYsTyksdCh5LHgpKSxJPTE7STxBO0krKylhKHYsTyksU3x8KGYucmVhZEhleE51bWJlcihtLE8pLHIodixtLE8pKSxhKHkseCksZi5yZWFkSGV4U2lnbmVkKG0seCkscih5LG0seCksYy5tYXBPbmUoZSh2LE8pLHQoeSx4KSk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNTg6Zm9yKGYucmVhZEhleChwLE8pLGYucmVhZEhleE51bWJlcihnLE8pLHIoZyxwLE8pLGYucmVhZEhleCh5LHgpLGMubWFwQmZSYW5nZShlKHAsTyksZShnLE8pLHQoeSx4KSksRT0xO0U8QTtFKyspYShnLE8pLFM/cC5zZXQoZyk6KGYucmVhZEhleE51bWJlcihwLE8pLHIocCxnLE8pKSxmLnJlYWRIZXhOdW1iZXIoZyxPKSxyKGcscCxPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcEJmUmFuZ2UoZShwLE8pLGUoZyxPKSx0KHkseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDY1OnRocm93IG5ldyBFcnJvcigiQmluYXJ5Q01hcFJlYWRlci5wcm9jZXNzIC0gdW5rbm93biB0eXBlOiAiLmNvbmNhdChrKSk7Y2FzZSA2NjpuLm5leHQ9OTticmVhaztjYXNlIDY4OmlmKCFkKXtuLm5leHQ9NzA7YnJlYWt9cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGwoZCkpO2Nhc2UgNzA6cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSksZnVuY3Rpb24oZSx0LHIpe3JldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLG59KCk7cmV0dXJuIHN9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7cisrKXQ9dDw8OHxlLmNoYXJDb2RlQXQocik7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIHIoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuIil9ZnVuY3Rpb24gbChyLG4pe2Zvcig7Oyl7dmFyIGk9bi5nZXRPYmooKTtpZihpPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkoaSwiZW5kYmZjaGFyIikpcmV0dXJuO3QoaSk7dmFyIG89ZShpKTt0KGk9bi5nZXRPYmooKSk7dmFyIHM9aTtyLm1hcE9uZShvLHMpfX1mdW5jdGlvbiBoKHIsaSl7Zm9yKDs7KXt2YXIgbz1pLmdldE9iaigpO2lmKG89PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShvLCJlbmRiZnJhbmdlIikpcmV0dXJuO3Qobyk7dmFyIHM9ZShvKTt0KG89aS5nZXRPYmooKSk7dmFyIGM9ZShvKTtpZihvPWkuZ2V0T2JqKCksTnVtYmVyLmlzSW50ZWdlcihvKXx8InN0cmluZyI9PXR5cGVvZiBvKXt2YXIgdT1OdW1iZXIuaXNJbnRlZ2VyKG8pP1N0cmluZy5mcm9tQ2hhckNvZGUobyk6bztyLm1hcEJmUmFuZ2UocyxjLHUpfWVsc2V7aWYoISgwLGEuaXNDbWQpKG8sIlsiKSlicmVhaztvPWkuZ2V0T2JqKCk7Zm9yKHZhciBsPVtdOyEoMCxhLmlzQ21kKShvLCJdIikmJm8hPT1hLkVPRjspbC5wdXNoKG8pLG89aS5nZXRPYmooKTtyLm1hcEJmUmFuZ2VUb0FycmF5KHMsYyxsKX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gZChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkY2hhciIpKXJldHVybjt0KG8pO3ZhciBzPWUobyk7cihvPWkuZ2V0T2JqKCkpO3ZhciBjPW87bi5tYXBPbmUocyxjKX19ZnVuY3Rpb24gcChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkcmFuZ2UiKSlyZXR1cm47dChvKTt2YXIgcz1lKG8pO3Qobz1pLmdldE9iaigpKTt2YXIgYz1lKG8pO3Iobz1pLmdldE9iaigpKTt2YXIgdT1vO24ubWFwQ2lkUmFuZ2UocyxjLHUpfX1mdW5jdGlvbiBnKHQscil7Zm9yKDs7KXt2YXIgaT1yLmdldE9iaigpO2lmKGk9PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShpLCJlbmRjb2Rlc3BhY2VyYW5nZSIpKXJldHVybjtpZigic3RyaW5nIiE9dHlwZW9mIGkpYnJlYWs7dmFyIG89ZShpKTtpZigic3RyaW5nIiE9dHlwZW9mKGk9ci5nZXRPYmooKSkpYnJlYWs7dmFyIHM9ZShpKTt0LmFkZENvZGVzcGFjZVJhbmdlKGkubGVuZ3RoLG8scyl9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgY29kZXNwYWNlIHJhbmdlLiIpfWZ1bmN0aW9uIHYoZSx0KXt2YXIgcj10LmdldE9iaigpO051bWJlci5pc0ludGVnZXIocikmJihlLnZlcnRpY2FsPSEhcil9ZnVuY3Rpb24geShlLHQpe3ZhciByPXQuZ2V0T2JqKCk7ciBpbnN0YW5jZW9mIGEuTmFtZSYmKGUubmFtZT1yLm5hbWUpfWZ1bmN0aW9uIGIoZSx0LHIsbil7cmV0dXJuIHguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHgoKXtyZXR1cm4oeD1mKHUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixpLG8pe3ZhciBjLGYsbTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGUucHJldj0xLChtPXIuZ2V0T2JqKCkpIT09YS5FT0Ype2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiYnJlYWsiLDM5KTtjYXNlIDc6aWYoIShtIGluc3RhbmNlb2YgYS5OYW1lKSl7ZS5uZXh0PTEyO2JyZWFrfSJXTW9kZSI9PT1tLm5hbWU/dih0LHIpOiJDTWFwTmFtZSI9PT1tLm5hbWUmJnkodCxyKSxjPW0sZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMTI6aWYoIShtIGluc3RhbmNlb2YgYS5DbWQpKXtlLm5leHQ9Mjk7YnJlYWt9ZS50MD1tLmNtZCxlLm5leHQ9ImVuZGNtYXAiPT09ZS50MD8xNjoidXNlY21hcCI9PT1lLnQwPzE3OiJiZWdpbmNvZGVzcGFjZXJhbmdlIj09PWUudDA/MTk6ImJlZ2luYmZjaGFyIj09PWUudDA/MjE6ImJlZ2luY2lkY2hhciI9PT1lLnQwPzIzOiJiZWdpbmJmcmFuZ2UiPT09ZS50MD8yNToiYmVnaW5jaWRyYW5nZSI9PT1lLnQwPzI3OjI5O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMzkpO2Nhc2UgMTc6cmV0dXJuIGMgaW5zdGFuY2VvZiBhLk5hbWUmJihmPWMubmFtZSksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAxOTpyZXR1cm4gZyh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjE6cmV0dXJuIGwodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDIzOnJldHVybiBkKHQsciksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAyNTpyZXR1cm4gaCh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjc6cmV0dXJuIHAodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDI5OmUubmV4dD0zNzticmVhaztjYXNlIDMxOmlmKGUucHJldj0zMSxlLnQxPWUuY2F0Y2goMSksIShlLnQxIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpe2UubmV4dD0zNTticmVha310aHJvdyBlLnQxO2Nhc2UgMzU6cmV0dXJuKDAsbi53YXJuKSgiSW52YWxpZCBjTWFwIGRhdGE6ICIrZS50MSksZS5hYnJ1cHQoImNvbnRpbnVlIiwwKTtjYXNlIDM3OmUubmV4dD0wO2JyZWFrO2Nhc2UgMzk6aWYoIW8mJmYmJihvPWYpLCFvKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLE8odCxpLG8pKTtjYXNlIDQyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDQzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbMSwzMV1dKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPKGUsdCxyKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQSgpe3JldHVybihBPWYodSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGk7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsQyhuLHIpO2Nhc2UgMjppZih0LnVzZUNNYXA9ZS5zZW50LDA9PT10Lm51bUNvZGVzcGFjZVJhbmdlcyl7Zm9yKGE9dC51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcyxpPTA7aTxhLmxlbmd0aDtpKyspdC5jb2Rlc3BhY2VSYW5nZXNbaV09YVtpXS5zbGljZSgpO3QubnVtQ29kZXNwYWNlUmFuZ2VzPXQudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9cmV0dXJuIHQudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QuY29udGFpbnMoZSl8fHQubWFwT25lKGUsdC51c2VDTWFwLmxvb2t1cChlKSl9KSksZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQyhlLHQpe3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBGKCl7cmV0dXJuKEY9Zih1KCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBhLGkscyxsLGY7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiSWRlbnRpdHktSCIhPT10KXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITEsMikpO2Nhc2UgNDppZigiSWRlbnRpdHktViIhPT10KXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITAsMikpO2Nhc2UgNjppZihtLmluY2x1ZGVzKHQpKXtlLm5leHQ9ODticmVha310aHJvdyBuZXcgRXJyb3IoIlVua25vd24gQ01hcCBuYW1lOiAiK3QpO2Nhc2UgODppZihyKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIscih0KTtjYXNlIDEyOmlmKGE9ZS5zZW50LGk9YS5jTWFwRGF0YSxzPWEuY29tcHJlc3Npb25UeXBlLGw9bmV3IHcoITApLHMhPT1uLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZKXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChuZXcgUykucHJvY2VzcyhpLGwsKGZ1bmN0aW9uKGUpe3JldHVybiBPKGwscixlKX0pKSk7Y2FzZSAxODppZihzIT09bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpe2UubmV4dD0yMTticmVha31yZXR1cm4gZj1uZXcgby5MZXhlcihuZXcgYy5TdHJlYW0oaSkpLGUuYWJydXB0KCJyZXR1cm4iLGIobCxmLHIsbnVsbCkpO2Nhc2UgMjE6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIENNYXAgImNvbXByZXNzaW9uVHlwZSIgdmFsdWU6ICcuY29uY2F0KHMpKTtjYXNlIDIyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJue2NyZWF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZih1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4scyxjO3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYocj1lLmVuY29kaW5nLG49ZS5mZXRjaEJ1aWx0SW5DTWFwLHM9ZS51c2VDTWFwLCEociBpbnN0YW5jZW9mIGEuTmFtZSkpe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixDKHIubmFtZSxuKSk7Y2FzZSA3OmlmKCEociBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSkpe3QubmV4dD0xNDticmVha31yZXR1cm4gdC5uZXh0PTEwLGIobmV3IHcsbmV3IG8uTGV4ZXIociksbixzKTtjYXNlIDEwOmlmKCEoYz10LnNlbnQpLmlzSWRlbnRpdHlDTWFwKXt0Lm5leHQ9MTM7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLEMoYy5uYW1lLG4pKTtjYXNlIDEzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgcmVxdWlyZWQuIik7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSgpfX19KCk7dC5DTWFwRmFjdG9yeT14fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGFyc2VyPXQuTGluZWFyaXphdGlvbj10LkxleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpLG89cigxNDcpLHM9cigxNDkpLGM9cigxNTApLHU9cigxNTIpLGw9cigxNTMpLGY9cigxNTYpLGg9cigxNTgpLGQ9cigxNjApLHA9cigxMzkpLGc9cigxNjEpLHY9cigxNjIpO2Z1bmN0aW9uIHkoZSl7cmV0dXJuIHk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHkoZSl9ZnVuY3Rpb24gbShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGIoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT15KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB3KGUsdCxyKXtyZXR1cm4gdCYmYihlLnByb3RvdHlwZSx0KSxyJiZiKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5sZXhlcixuPXQueHJlZixhPXQuYWxsb3dTdHJlYW1zLGk9dm9pZCAwIT09YSYmYSxvPXQucmVjb3ZlcnlNb2RlLHM9dm9pZCAwIT09byYmbzttKHRoaXMsZSksdGhpcy5sZXhlcj1yLHRoaXMueHJlZj1uLHRoaXMuYWxsb3dTdHJlYW1zPWksdGhpcy5yZWNvdmVyeU1vZGU9cyx0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbWFnZUlkPTAsdGhpcy5yZWZpbGwoKX1yZXR1cm4gdyhlLFt7a2V5OiJyZWZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5idWYxPXRoaXMubGV4ZXIuZ2V0T2JqKCksdGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJ1ZjIgaW5zdGFuY2VvZiBhLkNtZCYmIklEIj09PXRoaXMuYnVmMi5jbWQ/KHRoaXMuYnVmMT10aGlzLmJ1ZjIsdGhpcy5idWYyPW51bGwpOih0aGlzLmJ1ZjE9dGhpcy5idWYyLHRoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpKX19LHtrZXk6InRyeVNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gdGhpcy5zaGlmdCgpLCEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9dGhpcy5idWYxO2lmKHRoaXMuc2hpZnQoKSx0IGluc3RhbmNlb2YgYS5DbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpmb3IodmFyIHI9W107ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiXSIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspci5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIHI7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXkuIil9cmV0dXJuIHRoaXMuc2hpZnQoKSxyO2Nhc2UiPDwiOmZvcih2YXIgbz1uZXcgYS5EaWN0KHRoaXMueHJlZik7ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiPj4iKSYmdGhpcy5idWYxIT09YS5FT0Y7KWlmKHRoaXMuYnVmMSBpbnN0YW5jZW9mIGEuTmFtZSl7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO28uc2V0KHMsdGhpcy5nZXRPYmooZSkpfWVsc2UoMCxuLmluZm8pKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpLHRoaXMuc2hpZnQoKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIG87dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1yZXR1cm4oMCxhLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpP3RoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShvLGUpOm86KHRoaXMuc2hpZnQoKSxvKTtkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJSIikpe3ZhciBjPWEuUmVmLmdldCh0LHRoaXMuYnVmMSk7cmV0dXJuIHRoaXMuc2hpZnQoKSx0aGlzLnNoaWZ0KCksY31yZXR1cm4gdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJmU/ZS5kZWNyeXB0U3RyaW5nKHQpOnR9fSx7a2V5OiJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbz10aGlzLmxleGVyLHM9ZS5wb3MsYz0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YyljPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YyljPTczPT09dD8yOjA7ZWxzZSBpZigzMj09PXR8fDEwPT09dHx8MTM9PT10KXtyPWUucG9zO2Zvcih2YXIgdT1lLnBlZWtCeXRlcygxMCksbD0wLGY9dS5sZW5ndGg7bDxmO2wrKylpZigoMCE9PSh0PXVbbF0pfHwwPT09dVtsKzFdKSYmMTAhPT10JiYxMyE9PXQmJih0PDMyfHx0PjEyNykpe2M9MDticmVha31pZigyIT09Yyljb250aW51ZTtpZihvLmtub3duQ29tbWFuZHMpe3ZhciBoPW8ucGVla09iaigpO2ggaW5zdGFuY2VvZiBhLkNtZCYmIW8ua25vd25Db21tYW5kc1toLmNtZF0mJihjPTApfWVsc2UoMCxuLndhcm4pKCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCAtIGBsZXhlci5rbm93bkNvbW1hbmRzYCBpcyB1bmRlZmluZWQuIik7aWYoMj09PWMpYnJlYWt9ZWxzZSBjPTA7LTE9PT10JiYoKDAsbi53YXJuKSgiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQ6IFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhvdXQgZmluZGluZyBhIHZhbGlkIEVJIG1hcmtlciIpLHImJigoMCxuLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpLGUuc2tpcCgtKGUucG9zLXIpKSkpO3ZhciBkPTQ7cmV0dXJuIGUuc2tpcCgtZCksdD1lLnBlZWtCeXRlKCksZS5za2lwKGQpLCgwLGkuaXNXaGl0ZVNwYWNlKSh0KXx8ZC0tLGUucG9zLWQtc319LHtrZXk6ImZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLGE9ZS5wb3MsaT0hMTstMSE9PSh0PWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09dCl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0OihyPWUuZ2V0VWludDE2KCkpPjI/ZS5za2lwKHItMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfXZhciBvPWUucG9zLWE7cmV0dXJuLTE9PT10PygoMCxuLndhcm4pKCJJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogRU9JIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtbyksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLG8pfX0se2tleToiZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigxMjY9PT10KXt2YXIgYT1lLnBvcztmb3IodD1lLnBlZWtCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyllLnNraXAoKSx0PWUucGVla0J5dGUoKTtpZig2Mj09PXQpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPmEpe3ZhciBvPWUucGVla0J5dGVzKDIpO2lmKDY5PT09b1swXSYmNzM9PT1vWzFdKWJyZWFrfX12YXIgcz1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJODVEZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIiksZS5za2lwKC1zKSx0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpKToodGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSkscyl9fSx7a2V5OiJmaW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpJiY2MiE9PXQ7KTt2YXIgYT1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtYSksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLGEpfX0se2tleToiaW5saW5lU3RyZWFtU2tpcEVJIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09cilyPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09cilyPTczPT09dD8yOjA7ZWxzZSBpZigyPT09cilicmVha319LHtrZXk6Im1ha2VJbmxpbmVJbWFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5sZXhlcixpPXIuc3RyZWFtLG89T2JqZWN0LmNyZWF0ZShudWxsKTshKDAsYS5pc0NtZCkodGhpcy5idWYxLCJJRCIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspe2lmKCEodGhpcy5idWYxIGluc3RhbmNlb2YgYS5OYW1lKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO29bc109dGhpcy5nZXRPYmooZSl9LTEhPT1yLmJlZ2luSW5saW5lSW1hZ2VQb3MmJih0PWkucG9zLXIuYmVnaW5JbmxpbmVJbWFnZVBvcyk7dmFyIGMsdT10aGlzLnhyZWYuZmV0Y2hJZlJlZihvLkZ8fG8uRmlsdGVyKTtpZih1IGluc3RhbmNlb2YgYS5OYW1lKWM9dS5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9dGhpcy54cmVmLmZldGNoSWZSZWYodVswXSk7bCBpbnN0YW5jZW9mIGEuTmFtZSYmKGM9bC5uYW1lKX12YXIgZixoLGQ9aS5wb3M7c3dpdGNoKGMpe2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6Zj10aGlzLmZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoaSk7YnJlYWs7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6Zj10aGlzLmZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpmPXRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2RlZmF1bHQ6Zj10aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGkpfWlmKGY8MWUzJiZ0PjApe3ZhciBwPWkucG9zO2kucG9zPXIuYmVnaW5JbmxpbmVJbWFnZVBvcyxoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPWUubGVuZ3RoLG49MDtuPHItMTspdC5wdXNoKGVbbisrXTw8OHxlW24rK10pO3JldHVybiBuPHImJnQucHVzaChlW25dKSxyKyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9KGkuZ2V0Qnl0ZXModCtmKSksaS5wb3M9cDt2YXIgZz10aGlzLmltYWdlQ2FjaGVbaF07aWYodm9pZCAwIT09ZylyZXR1cm4gdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksZy5yZXNldCgpLGd9dmFyIHY9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2Zvcih2YXIgeSBpbiBvKXYuc2V0KHksb1t5XSk7dmFyIG09aS5tYWtlU3ViU3RyZWFtKGQsZix2KTtyZXR1cm4gZSYmKG09ZS5jcmVhdGVTdHJlYW0obSxmKSksKG09dGhpcy5maWx0ZXIobSx2LGYpKS5kaWN0PXYsdm9pZCAwIT09aCYmKG0uY2FjaGVLZXk9ImlubGluZV9pbWdfIi5jb25jYXQoKyt0aGlzLl9pbWFnZUlkKSx0aGlzLmltYWdlQ2FjaGVbaF09bSksdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksbX19LHtrZXk6Il9maW5kU3RyZWFtTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIuc3RyZWFtO3IucG9zPWU7Zm9yKHZhciBuPXQubGVuZ3RoO3IucG9zPHIuZW5kOyl7dmFyIGE9ci5wZWVrQnl0ZXMoMjA0OCksaT1hLmxlbmd0aC1uO2lmKGk8PTApYnJlYWs7Zm9yKHZhciBvPTA7bzxpOyl7Zm9yKHZhciBzPTA7czxuJiZhW28rc109PT10W3NdOylzKys7aWYocz49bilyZXR1cm4gci5wb3MrPW8sci5wb3MtZTtvKyt9ci5wb3MrPWl9cmV0dXJuLTF9fSx7a2V5OiJtYWtlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIsbz1yLnN0cmVhbTtyLnNraXBUb05leHRMaW5lKCk7dmFyIHM9by5wb3MtMSxjPWUuZ2V0KCJMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGMpfHwoKDAsbi5pbmZvKSgnQmFkIGxlbmd0aCAiJy5jb25jYXQoYyYmYy50b1N0cmluZygpLCciIGluIHN0cmVhbS4nKSksYz0wKSxvLnBvcz1zK2Msci5uZXh0Q2hhcigpLHRoaXMudHJ5U2hpZnQoKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJlbmRzdHJlYW0iKSl0aGlzLnNoaWZ0KCk7ZWxzZXt2YXIgdT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTE1LDExNiwxMTQsMTAxLDk3LDEwOV0pLGw9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChzLHUpO2lmKGw8MCl7Zm9yKHZhciBmPTE7Zjw9MTtmKyspe3ZhciBoPXUubGVuZ3RoLWYsZD11LnNsaWNlKDAsaCkscD10aGlzLl9maW5kU3RyZWFtTGVuZ3RoKHMsZCk7aWYocD49MCl7dmFyIGc9by5wZWVrQnl0ZXMoaCsxKVtoXTtpZighKDAsaS5pc1doaXRlU3BhY2UpKGcpKWJyZWFrOygwLG4uaW5mbykoJ0ZvdW5kICInLmNvbmNhdCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGQpLCciIHdoZW4gJykrInNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuIiksbD1wO2JyZWFrfX1pZihsPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIil9Yz1sLHIubmV4dENoYXIoKSx0aGlzLnNoaWZ0KCksdGhpcy5zaGlmdCgpfXJldHVybiB0aGlzLnNoaWZ0KCksbz1vLm1ha2VTdWJTdHJlYW0ocyxjLGUpLHQmJihvPXQuY3JlYXRlU3RyZWFtKG8sYykpLChvPXRoaXMuZmlsdGVyKG8sZSxjKSkuZGljdD1lLG99fSx7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10LmdldCgiRiIsIkZpbHRlciIpLG89dC5nZXQoIkRQIiwiRGVjb2RlUGFybXMiKTtpZihpIGluc3RhbmNlb2YgYS5OYW1lKXJldHVybiBBcnJheS5pc0FycmF5KG8pJiYoMCxuLndhcm4pKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKSx0aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUscixvKTt2YXIgcz1yO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBjPWksdT1vLGw9MCxmPWMubGVuZ3RoO2w8ZjsrK2wpe2lmKCEoKGk9dGhpcy54cmVmLmZldGNoSWZSZWYoY1tsXSkpaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdCYWQgZmlsdGVyIG5hbWUgIicuY29uY2F0KGksJyInKSk7bz1udWxsLEFycmF5LmlzQXJyYXkodSkmJmwgaW4gdSYmKG89dGhpcy54cmVmLmZldGNoSWZSZWYodVtsXSkpLGU9dGhpcy5tYWtlRmlsdGVyKGUsaS5uYW1lLHMsbykscz1udWxsfXJldHVybiBlfX0se2tleToibWFrZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7aWYoMD09PXIpcmV0dXJuKDAsbi53YXJuKSgnRW1wdHkgIicuY29uY2F0KHQsJyIgc3RyZWFtLicpKSxuZXcgcC5OdWxsU3RyZWFtO3ZhciB5PXRoaXMueHJlZi5zdGF0czt0cnl7c3dpdGNoKHQpe2Nhc2UiRmwiOmNhc2UiRmxhdGVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkZMQVRFKSxhP25ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgdS5GbGF0ZVN0cmVhbShlLHIpLHIsYSk6bmV3IHUuRmxhdGVTdHJlYW0oZSxyKTtjYXNlIkxaVyI6Y2FzZSJMWldEZWNvZGUiOnkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuTFpXKTt2YXIgbT0xO3JldHVybiBhPyhhLmhhcygiRWFybHlDaGFuZ2UiKSYmKG09YS5nZXQoIkVhcmx5Q2hhbmdlIikpLG5ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgZC5MWldTdHJlYW0oZSxyLG0pLHIsYSkpOm5ldyBkLkxaV1N0cmVhbShlLHIsbSk7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5EQ1QpLG5ldyBmLkpwZWdTdHJlYW0oZSxyLGEpO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIHkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuSlBYKSxuZXcgaC5KcHhTdHJlYW0oZSxyLGEpO2Nhc2UiQTg1IjpjYXNlIkFTQ0lJODVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkE4NSksbmV3IG8uQXNjaWk4NVN0cmVhbShlLHIpO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5BSFgpLG5ldyBzLkFzY2lpSGV4U3RyZWFtKGUscik7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkNDRiksbmV3IGMuQ0NJVFRGYXhTdHJlYW0oZSxyLGEpO2Nhc2UiUkwiOmNhc2UiUnVuTGVuZ3RoRGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5STFgpLG5ldyB2LlJ1bkxlbmd0aFN0cmVhbShlLHIpO2Nhc2UiSkJJRzJEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkpCSUcpLG5ldyBsLkpiaWcyU3RyZWFtKGUscixhKX1yZXR1cm4oMCxuLndhcm4pKCdGaWx0ZXIgIicuY29uY2F0KHQsJyIgaXMgbm90IHN1cHBvcnRlZC4nKSksZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybigwLG4ud2FybikoJ0ludmFsaWQgc3RyZWFtOiAiJy5jb25jYXQoZSwnIicpKSxuZXcgcC5OdWxsU3RyZWFtfX19XSksZX0oKTt0LlBhcnNlcj1rO3ZhciBTPVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiB4KGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO20odGhpcyxlKSx0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKSx0aGlzLnN0ckJ1Zj1bXSx0aGlzLmtub3duQ29tbWFuZHM9cix0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTAsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPS0xfXJldHVybiB3KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6InBlZWtDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfX0se2tleToiZ2V0TnVtYmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxyPTAsYT0wO2lmKDQ1PT09ZT8oYT0tMSw0NT09PShlPXRoaXMubmV4dENoYXIoKSkmJihlPXRoaXMubmV4dENoYXIoKSkpOjQzPT09ZSYmKGE9MSxlPXRoaXMubmV4dENoYXIoKSksMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSYmKHI9MTAsZT10aGlzLm5leHRDaGFyKCkpLGU8NDh8fGU+NTcpe3ZhciBvPSJJbnZhbGlkIG51bWJlcjogIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiIChjaGFyQ29kZSAiKS5jb25jYXQoZSwiKSIpO2lmKCgwLGkuaXNXaGl0ZVNwYWNlKShlKXx8LTE9PT1lKXJldHVybigwLG4uaW5mbykoJ0xleGVyLmdldE51bWJlciAtICInLmNvbmNhdChvLCciLicpKSwwO3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKG8pfWE9YXx8MTtmb3IodmFyIHM9ZS00OCxjPTAsdT0xOyhlPXRoaXMubmV4dENoYXIoKSk+PTA7KWlmKGU+PTQ4JiZlPD01Nyl7dmFyIGw9ZS00ODt0P2M9MTAqYytsOigwIT09ciYmKHIqPTEwKSxzPTEwKnMrbCl9ZWxzZSBpZig0Nj09PWUpe2lmKDAhPT1yKWJyZWFrO3I9MX1lbHNlIGlmKDQ1PT09ZSkoMCxuLndhcm4pKCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyOiBtaW51cyBzaWduIGluIHRoZSBtaWRkbGUiKTtlbHNle2lmKDY5IT09ZSYmMTAxIT09ZSlicmVhaztpZig0Mz09PShlPXRoaXMucGVla0NoYXIoKSl8fDQ1PT09ZSl1PTQ1PT09ZT8tMToxLHRoaXMubmV4dENoYXIoKTtlbHNlIGlmKGU8NDh8fGU+NTcpYnJlYWs7dD0hMH1yZXR1cm4gMCE9PXImJihzLz1yKSx0JiYocyo9TWF0aC5wb3coMTAsdSpjKSksYSpzfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTEsdD0hMSxyPXRoaXMuc3RyQnVmO3IubGVuZ3RoPTA7Zm9yKHZhciBhPXRoaXMubmV4dENoYXIoKTs7KXt2YXIgaT0hMTtzd2l0Y2goMHxhKXtjYXNlLTE6KDAsbi53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpLHQ9ITA7YnJlYWs7Y2FzZSA0MDorK2Usci5wdXNoKCIoIik7YnJlYWs7Y2FzZSA0MTowPT0tLWU/KHRoaXMubmV4dENoYXIoKSx0PSEwKTpyLnB1c2goIikiKTticmVhaztjYXNlIDkyOnN3aXRjaChhPXRoaXMubmV4dENoYXIoKSl7Y2FzZS0xOigwLG4ud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKSx0PSEwO2JyZWFrO2Nhc2UgMTEwOnIucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDpyLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6ci5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6ci5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOnIucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OnZhciBvPTE1JmE7aT0hMCwoYT10aGlzLm5leHRDaGFyKCkpPj00OCYmYTw9NTUmJihvPShvPDwzKSsoMTUmYSksKGE9dGhpcy5uZXh0Q2hhcigpKT49NDgmJmE8PTU1JiYoaT0hMSxvPShvPDwzKSsoMTUmYSkpKSxyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShvKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9aWYodClicmVhaztpfHwoYT10aGlzLm5leHRDaGFyKCkpfXJldHVybiByLmpvaW4oIiIpfX0se2tleToiZ2V0TmFtZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5zdHJCdWY7Zm9yKHIubGVuZ3RoPTA7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmIVNbZV07KWlmKDM1PT09ZSl7aWYoZT10aGlzLm5leHRDaGFyKCksU1tlXSl7KDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci4iKSxyLnB1c2goIiMiKTticmVha312YXIgaT14KGUpO2lmKC0xIT09aSl7dD1lO3ZhciBvPXgoZT10aGlzLm5leHRDaGFyKCkpO2lmKC0xPT09byl7aWYoKDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiKSAiKSsiaW4gaGV4YWRlY2ltYWwgbnVtYmVyLiIpLHIucHVzaCgiIyIsU3RyaW5nLmZyb21DaGFyQ29kZSh0KSksU1tlXSlicmVhaztyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29udGludWV9ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaTw8NHxvKSl9ZWxzZSByLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWVsc2Ugci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3JldHVybiByLmxlbmd0aD4xMjcmJigwLG4ud2FybikoIk5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogIi5jb25jYXQoci5sZW5ndGgpKSxhLk5hbWUuZ2V0KHIuam9pbigiIikpfX0se2tleToiX2hleFN0cmluZ1dhcm4iLHZhbHVlOmZ1bmN0aW9uKGUpezUhPXRoaXMuX2hleFN0cmluZ051bVdhcm4rKz90aGlzLl9oZXhTdHJpbmdOdW1XYXJuPjV8fCgwLG4ud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyOiAiLmNvbmNhdChlKSk6KDAsbi53YXJuKSgiZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgYWRkaXRpb25hbCBpbnZhbGlkIGNoYXJhY3RlcnMuIil9fSx7a2V5OiJnZXRIZXhTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDt2YXIgdCxyLGE9dGhpcy5jdXJyZW50Q2hhcixpPSEwO2Zvcih0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTA7Oyl7aWYoYTwwKXsoMCxuLndhcm4pKCJVbnRlcm1pbmF0ZWQgaGV4IHN0cmluZyIpO2JyZWFrfWlmKDYyPT09YSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEhPT1TW2FdKXtpZihpKXtpZigtMT09PSh0PXgoYSkpKXt0aGlzLl9oZXhTdHJpbmdXYXJuKGEpLGE9dGhpcy5uZXh0Q2hhcigpO2NvbnRpbnVlfX1lbHNle2lmKC0xPT09KHI9eChhKSkpe3RoaXMuX2hleFN0cmluZ1dhcm4oYSksYT10aGlzLm5leHRDaGFyKCk7Y29udGludWV9ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodDw8NHxyKSl9aT0haSxhPXRoaXMubmV4dENoYXIoKX1lbHNlIGE9dGhpcy5uZXh0Q2hhcigpfXJldHVybiBlLmpvaW4oIiIpfX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKDEhPT1TW3RdKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSA0MDpyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtjYXNlIDQ3OnJldHVybiB0aGlzLmdldE5hbWUoKTtjYXNlIDkxOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJbIik7Y2FzZSA5MzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiXSIpO2Nhc2UgNjA6cmV0dXJuIDYwPT09KHQ9dGhpcy5uZXh0Q2hhcigpKT8odGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiPDwiKSk6dGhpcy5nZXRIZXhTdHJpbmcoKTtjYXNlIDYyOnJldHVybiA2Mj09PSh0PXRoaXMubmV4dENoYXIoKSk/KHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIj4+IikpOmEuQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJ7Iik7Y2FzZSAxMjU6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIn0iKTtjYXNlIDQxOnRocm93IHRoaXMubmV4dENoYXIoKSxuZXcgbi5Gb3JtYXRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXI6ICIuY29uY2F0KHQpKX12YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHQ8MzJ8fHQ+MTI3KXt2YXIgaT10aGlzLnBlZWtDaGFyKCk7aWYoaT49MzImJmk8PTEyNylyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldChyKX1mb3IodmFyIG89dGhpcy5rbm93bkNvbW1hbmRzLHM9byYmdm9pZCAwIT09b1tyXTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYhU1t0XTspe3ZhciBjPXIrU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZihzJiZ2b2lkIDA9PT1vW2NdKWJyZWFrO2lmKDEyOD09PXIubGVuZ3RoKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb21tYW5kIHRva2VuIHRvbyBsb25nOiAiLmNvbmNhdChyLmxlbmd0aCkpO3I9YyxzPW8mJnZvaWQgMCE9PW9bcl19cmV0dXJuInRydWUiPT09cnx8ImZhbHNlIiE9PXImJigibnVsbCI9PT1yP251bGw6KCJCSSI9PT1yJiYodGhpcy5iZWdpbklubGluZUltYWdlUG9zPXRoaXMuc3RyZWFtLnBvcyksYS5DbWQuZ2V0KHIpKSl9fSx7a2V5OiJwZWVrT2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5zdHJlYW0ucG9zLHI9dGhpcy5jdXJyZW50Q2hhcixhPXRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvczt0cnl7ZT10aGlzLmdldE9iaigpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgicGVla09iajogIi5jb25jYXQoZSkpfXJldHVybiB0aGlzLnN0cmVhbS5wb3M9dCx0aGlzLmN1cnJlbnRDaGFyPXIsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPWEsZX19LHtrZXk6InNraXBUb05leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRDaGFyO2U+PTA7KXtpZigxMz09PWUpezEwPT09KGU9dGhpcy5uZXh0Q2hhcigpKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19XSksZX0oKTt0LkxleGVyPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bSh0aGlzLGUpfXJldHVybiB3KGUsbnVsbCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPWUuZ2V0KHQpO2lmKE51bWJlci5pc0ludGVnZXIobikmJihyP24+PTA6bj4wKSlyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiJy5jb25jYXQodCwnIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gJykrImRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX12YXIgcixuLGk9bmV3IGsoe2xleGVyOm5ldyBPKGUpLHhyZWY6bnVsbH0pLG89aS5nZXRPYmooKSxzPWkuZ2V0T2JqKCksYz1pLmdldE9iaigpLHU9aS5nZXRPYmooKTtpZighKE51bWJlci5pc0ludGVnZXIobykmJk51bWJlci5pc0ludGVnZXIocykmJigwLGEuaXNDbWQpKGMsIm9iaiIpJiZ1IGluc3RhbmNlb2YgYS5EaWN0JiYibnVtYmVyIj09dHlwZW9mKHI9dS5nZXQoIkxpbmVhcml6ZWQiKSkmJnI+MCkpcmV0dXJuIG51bGw7aWYoKG49dCh1LCJMIikpIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXMgbm90IGVxdWFsIHRoZSBzdHJlYW0gbGVuZ3RoLicpO3JldHVybntsZW5ndGg6bixoaW50czpmdW5jdGlvbihlKXt2YXIgdCxyPWUuZ2V0KCJIIik7aWYoQXJyYXkuaXNBcnJheShyKSYmKDI9PT0odD1yLmxlbmd0aCl8fDQ9PT10KSl7Zm9yKHZhciBuPTA7bjx0O24rKyl7dmFyIGE9cltuXTtpZighKE51bWJlci5pc0ludGVnZXIoYSkmJmE+MCkpdGhyb3cgbmV3IEVycm9yKCJIaW50ICgiLmNvbmNhdChuLCIpIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKSl9cmV0dXJuIHJ9dGhyb3cgbmV3IEVycm9yKCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX0odSksb2JqZWN0TnVtYmVyRmlyc3Q6dCh1LCJPIiksZW5kRmlyc3Q6dCh1LCJFIiksbnVtUGFnZXM6dCh1LCJOIiksbWFpblhSZWZFbnRyaWVzT2Zmc2V0OnQodSwiVCIpLHBhZ2VGaXJzdDp1LmhhcygiUCIpP3QodSwiUCIsITApOjB9fX1dKSxlfSgpO3QuTGluZWFyaXphdGlvbj1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bc2NpaTg1U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gcz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHMoZSx0KX1mdW5jdGlvbiBjKGUpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxjKGUpfXZhciB1PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KGYsZSk7dmFyIHQscixhLHUsbD0oYT1mLHU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHUpe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGYoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxmKSx0JiYodCo9LjgpLChyPWwuY2FsbCh0aGlzLHQpKS5zdHI9ZSxyLmRpY3Q9ZS5kaWN0LHIuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoNSkscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuc3RyLHQ9ZS5nZXRCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xIT09dCYmMTI2IT09dCl7dmFyIHIsbixhPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDEyMj09PXQpe2ZvcihyPXRoaXMuZW5zdXJlQnVmZmVyKGErNCksbj0wO248NDsrK24pclthK25dPTA7dGhpcy5idWZmZXJMZW5ndGgrPTR9ZWxzZXt2YXIgbz10aGlzLmlucHV0O2ZvcihvWzBdPXQsbj0xO248NTsrK24pe2Zvcih0PWUuZ2V0Qnl0ZSgpOygwLGkuaXNXaGl0ZVNwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtpZihvW25dPXQsLTE9PT10fHwxMjY9PT10KWJyZWFrfWlmKHI9dGhpcy5lbnN1cmVCdWZmZXIoYStuLTEpLHRoaXMuYnVmZmVyTGVuZ3RoKz1uLTEsbjw1KXtmb3IoO248NTsrK24pb1tuXT0xMTc7dGhpcy5lb2Y9ITB9dmFyIHM9MDtmb3Iobj0wO248NTsrK24pcz04NSpzKyhvW25dLTMzKTtmb3Iobj0zO24+PTA7LS1uKXJbYStuXT0yNTUmcyxzPj49OH19ZWxzZSB0aGlzLmVvZj0hMH19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZn0oYS5EZWNvZGVTdHJlYW0pO3QuQXNjaWk4NVN0cmVhbT11fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHJlYW1zU2VxdWVuY2VTdHJlYW09dC5EZWNvZGVTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTM5KTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9bmV3IFVpbnQ4QXJyYXkoMCkseT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO2lmKHUodGhpcyxyKSwobj10LmNhbGwodGhpcykpLl9yYXdNaW5CdWZmZXJMZW5ndGg9ZXx8MCxuLnBvcz0wLG4uYnVmZmVyTGVuZ3RoPTAsbi5lb2Y9ITEsbi5idWZmZXI9dixuLm1pbkJ1ZmZlckxlbmd0aD01MTIsZSlmb3IoO24ubWluQnVmZmVyTGVuZ3RoPGU7KW4ubWluQnVmZmVyTGVuZ3RoKj0yO3JldHVybiBufXJldHVybiBmKHIsW3trZXk6ImlzRW1wdHkiLGdldDpmdW5jdGlvbigpe2Zvcig7IXRoaXMuZW9mJiYwPT09dGhpcy5idWZmZXJMZW5ndGg7KXRoaXMucmVhZEJsb2NrKCk7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlckxlbmd0aH19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgcj10aGlzLm1pbkJ1ZmZlckxlbmd0aDtyPGU7KXIqPTI7dmFyIG49bmV3IFVpbnQ4QXJyYXkocik7cmV0dXJuIG4uc2V0KHQpLHRoaXMuYnVmZmVyPW59fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9dGhpcy5wb3M7aWYoZSl7Zm9yKHRoaXMuZW5zdXJlQnVmZmVyKHIrZSksdD1yK2U7IXRoaXMuZW9mJiZ0aGlzLmJ1ZmZlckxlbmd0aDx0Oyl0aGlzLnJlYWRCbG9jaygpO3ZhciBuPXRoaXMuYnVmZmVyTGVuZ3RoO3Q+biYmKHQ9bil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTt0PXRoaXMuYnVmZmVyTGVuZ3RofXJldHVybiB0aGlzLnBvcz10LHRoaXMuYnVmZmVyLnN1YmFycmF5KHIsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz0wfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZih2b2lkIDA9PT10KWZvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2Vsc2UgZm9yKHZhciBuPWUrdDt0aGlzLmJ1ZmZlckxlbmd0aDw9biYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiBuZXcgaS5TdHJlYW0odGhpcy5idWZmZXIsZSx0LHIpfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6bnVsbH19XSkscn0oYS5CYXNlU3RyZWFtKTt0LkRlY29kZVN0cmVhbT15O3ZhciBtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDt1KHRoaXMscik7dmFyIGkscz0wLGM9byhlKTt0cnl7Zm9yKGMucygpOyEoaT1jLm4oKSkuZG9uZTspe3ZhciBsPWkudmFsdWU7cys9bCBpbnN0YW5jZW9mIHk/bC5fcmF3TWluQnVmZmVyTGVuZ3RoOmwubGVuZ3RofX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm4obj10LmNhbGwodGhpcyxzKSkuc3RyZWFtcz1lLG4uX29uRXJyb3I9YSxufXJldHVybiBmKHIsW3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbXM7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdCxyPWUuc2hpZnQoKTt0cnl7dD1yLmdldEJ5dGVzKCl9Y2F0Y2goZSl7aWYodGhpcy5fb25FcnJvcilyZXR1cm4gdm9pZCB0aGlzLl9vbkVycm9yKGUsci5kaWN0JiZyLmRpY3Qub2JqSWQpO3Rocm93IGV9dmFyIG49dGhpcy5idWZmZXJMZW5ndGgsYT1uK3QubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKGEpLnNldCh0LG4pLHRoaXMuYnVmZmVyTGVuZ3RoPWF9ZWxzZSB0aGlzLmVvZj0hMH19LHtrZXk6ImdldEJhc2VTdHJlYW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj1bXSxuPW8odGhpcy5zdHJlYW1zKTt0cnl7Zm9yKG4ucygpOyEoZT1uLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWUuZ2V0QmFzZVN0cmVhbXMoKTthJiZyLnB1c2guYXBwbHkocixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBjKGUpfSh0PWEpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHQpfHxzKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIubGVuZ3RoPjA/cjpudWxsfX1dKSxyfSh5KTt0LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbT1tfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LG8oZSx0KX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxzKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFzY2lpSGV4U3RyZWFtPXZvaWQgMDt2YXIgYz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShmLGUpO3ZhciB0LHIsYyx1LGw9KGM9Zix1PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9cyhjKTtpZih1KXt2YXIgcj1zKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBmKGUsdCl7dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZiksdCYmKHQqPS41KSwocj1sLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyLmZpcnN0RGlnaXQ9LTEscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZihlLmxlbmd0aCl7dmFyIHQscj1lLmxlbmd0aCsxPj4xLG49dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrciksaT10aGlzLmJ1ZmZlckxlbmd0aCxvPXRoaXMuZmlyc3REaWdpdCxzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxvPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IG99fX19KGUpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZSx1PXZvaWQgMDtpZihjPj00OCYmYzw9NTcpdT0xNSZjO2Vsc2V7aWYoIShjPj02NSYmYzw9NzB8fGM+PTk3JiZjPD0xMDIpKXtpZig2Mj09PWMpe3RoaXMuZW9mPSEwO2JyZWFrfWNvbnRpbnVlfXU9OSsoMTUmYyl9bzwwP289dToobltpKytdPW88PDR8dSxvPS0xKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9bz49MCYmdGhpcy5lb2YmJihuW2krK109bzw8NCxvPS0xKSx0aGlzLmZpcnN0RGlnaXQ9byx0aGlzLmJ1ZmZlckxlbmd0aD1pfWVsc2UgdGhpcy5lb2Y9ITB9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGZ9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuQXNjaWlIZXhTdHJlYW09Y30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTUxKSxpPXIoMTQ4KSxvPXIoMTM0KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9dmFyIGw9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oaCxlKTt2YXIgdCxyLGksbCxmPShpPWgsbD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PXUoaSk7aWYobCl7dmFyIHI9dSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gaChlLHQscil7dmFyIG47IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsaCksKG49Zi5jYWxsKHRoaXMsdCkpLnN0cj1lLG4uZGljdD1lLmRpY3QsciBpbnN0YW5jZW9mIG8uRGljdHx8KHI9by5EaWN0LmVtcHR5KTt2YXIgaT17bmV4dDpmdW5jdGlvbigpe3JldHVybiBlLmdldEJ5dGUoKX19O3JldHVybiBuLmNjaXR0RmF4RGVjb2Rlcj1uZXcgYS5DQ0lUVEZheERlY29kZXIoaSx7SzpyLmdldCgiSyIpLEVuZE9mTGluZTpyLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjpyLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6ci5nZXQoIkNvbHVtbnMiKSxSb3dzOnIuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazpyLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOnIuZ2V0KCJCbGFja0lzMSIpfSksbn1yZXR1cm4gdD1oLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDshdGhpcy5lb2Y7KXt2YXIgZT10aGlzLmNjaXR0RmF4RGVjb2Rlci5yZWFkTmV4dENoYXIoKTtpZigtMT09PWUpcmV0dXJuIHZvaWQodGhpcy5lb2Y9ITApO3RoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoKzEpLHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWV9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxofShpLkRlY29kZVN0cmVhbSk7dC5DQ0lUVEZheFN0cmVhbT1sfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhEZWNvZGVyPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGEoZSl9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBvPS0xLHM9W1stMSwtMV0sWy0xLC0xXSxbNyw4XSxbNyw3XSxbNiw2XSxbNiw2XSxbNiw1XSxbNiw1XSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXV0sYz1bWy0xLC0xXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjU2MF1dLHU9W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzgsMjldLFs4LDI5XSxbOCwzMF0sWzgsMzBdLFs4LDQ1XSxbOCw0NV0sWzgsNDZdLFs4LDQ2XSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjNdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs4LDQ3XSxbOCw0N10sWzgsNDhdLFs4LDQ4XSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbOCwzM10sWzgsMzNdLFs4LDM0XSxbOCwzNF0sWzgsMzVdLFs4LDM1XSxbOCwzNl0sWzgsMzZdLFs4LDM3XSxbOCwzN10sWzgsMzhdLFs4LDM4XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzgsMzFdLFs4LDMxXSxbOCwzMl0sWzgsMzJdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzgsNTNdLFs4LDUzXSxbOCw1NF0sWzgsNTRdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbOCwzOV0sWzgsMzldLFs4LDQwXSxbOCw0MF0sWzgsNDFdLFs4LDQxXSxbOCw0Ml0sWzgsNDJdLFs4LDQzXSxbOCw0M10sWzgsNDRdLFs4LDQ0XSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs4LDYxXSxbOCw2MV0sWzgsNjJdLFs4LDYyXSxbOCw2M10sWzgsNjNdLFs4LDBdLFs4LDBdLFs4LDMyMF0sWzgsMzIwXSxbOCwzODRdLFs4LDM4NF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNywyN10sWzcsMjddLFs3LDI3XSxbNywyN10sWzgsNTldLFs4LDU5XSxbOCw2MF0sWzgsNjBdLFs5LDE0NzJdLFs5LDE1MzZdLFs5LDE2MDBdLFs5LDE3MjhdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzgsNDldLFs4LDQ5XSxbOCw1MF0sWzgsNTBdLFs4LDUxXSxbOCw1MV0sWzgsNTJdLFs4LDUyXSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzgsNTVdLFs4LDU1XSxbOCw1Nl0sWzgsNTZdLFs4LDU3XSxbOCw1N10sWzgsNThdLFs4LDU4XSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzgsNDQ4XSxbOCw0NDhdLFs4LDUxMl0sWzgsNTEyXSxbOSw3MDRdLFs5LDc2OF0sWzgsNjQwXSxbOCw2NDBdLFs4LDU3Nl0sWzgsNTc2XSxbOSw4MzJdLFs5LDg5Nl0sWzksOTYwXSxbOSwxMDI0XSxbOSwxMDg4XSxbOSwxMTUyXSxbOSwxMjE2XSxbOSwxMjgwXSxbOSwxMzQ0XSxbOSwxNDA4XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN11dLGw9W1stMSwtMV0sWy0xLC0xXSxbMTIsLTJdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNDk2XSxbMTIsMjU2MF0sWzEyLDI1NjBdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTIsNTJdLFsxMiw1Ml0sWzEzLDY0MF0sWzEzLDcwNF0sWzEzLDc2OF0sWzEzLDgzMl0sWzEyLDU1XSxbMTIsNTVdLFsxMiw1Nl0sWzEyLDU2XSxbMTMsMTI4MF0sWzEzLDEzNDRdLFsxMywxNDA4XSxbMTMsMTQ3Ml0sWzEyLDU5XSxbMTIsNTldLFsxMiw2MF0sWzEyLDYwXSxbMTMsMTUzNl0sWzEzLDE2MDBdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTMsMTY2NF0sWzEzLDE3MjhdLFsxMiwzMjBdLFsxMiwzMjBdLFsxMiwzODRdLFsxMiwzODRdLFsxMiw0NDhdLFsxMiw0NDhdLFsxMyw1MTJdLFsxMyw1NzZdLFsxMiw1M10sWzEyLDUzXSxbMTIsNTRdLFsxMiw1NF0sWzEzLDg5Nl0sWzEzLDk2MF0sWzEzLDEwMjRdLFsxMywxMDg4XSxbMTMsMTE1Ml0sWzEzLDEyMTZdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XV0sZj1bWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFsxMSwyM10sWzExLDIzXSxbMTIsNTBdLFsxMiw1MV0sWzEyLDQ0XSxbMTIsNDVdLFsxMiw0Nl0sWzEyLDQ3XSxbMTIsNTddLFsxMiw1OF0sWzEyLDYxXSxbMTIsMjU2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEyLDQ4XSxbMTIsNDldLFsxMiw2Ml0sWzEyLDYzXSxbMTIsMzBdLFsxMiwzMV0sWzEyLDMyXSxbMTIsMzNdLFsxMiw0MF0sWzEyLDQxXSxbMTEsMjJdLFsxMSwyMl0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFsxMiwxMjhdLFsxMiwxOTJdLFsxMiwyNl0sWzEyLDI3XSxbMTIsMjhdLFsxMiwyOV0sWzExLDE5XSxbMTEsMTldLFsxMSwyMF0sWzExLDIwXSxbMTIsMzRdLFsxMiwzNV0sWzEyLDM2XSxbMTIsMzddLFsxMiwzOF0sWzEyLDM5XSxbMTEsMjFdLFsxMSwyMV0sWzEyLDQyXSxbMTIsNDNdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdXSxoPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs2LDldLFs2LDhdLFs1LDddLFs1LDddLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdXSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSwhdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQubmV4dCl0aHJvdyBuZXcgRXJyb3IoJ0NDSVRURmF4RGVjb2RlciAtIGludmFsaWQgInNvdXJjZSIgcGFyYW1ldGVyLicpO3RoaXMuc291cmNlPXQsdGhpcy5lb2Y9ITEsdGhpcy5lbmNvZGluZz1yLkt8fDAsdGhpcy5lb2xpbmU9ci5FbmRPZkxpbmV8fCExLHRoaXMuYnl0ZUFsaWduPXIuRW5jb2RlZEJ5dGVBbGlnbnx8ITEsdGhpcy5jb2x1bW5zPXIuQ29sdW1uc3x8MTcyOCx0aGlzLnJvd3M9ci5Sb3dzfHwwO3ZhciBuLGE9ci5FbmRPZkJsb2NrO2ZvcihudWxsPT1hJiYoYT0hMCksdGhpcy5lb2Jsb2NrPWEsdGhpcy5ibGFjaz1yLkJsYWNrSXMxfHwhMSx0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKSx0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKSx0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zLHRoaXMuY29kaW5nUG9zPTAsdGhpcy5yb3c9MCx0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwLHRoaXMuaW5wdXRCaXRzPTAsdGhpcy5pbnB1dEJ1Zj0wLHRoaXMub3V0cHV0Qml0cz0wLHRoaXMucm93c0RvbmU9ITE7MD09PShuPXRoaXMuX2xvb2tCaXRzKDEyKSk7KXRoaXMuX2VhdEJpdHMoMSk7MT09PW4mJnRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJyZWFkTmV4dENoYXIiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5lb2YpcmV0dXJuLTE7dmFyIGUsdCxyLGEsaSxzPXRoaXMucmVmTGluZSxjPXRoaXMuY29kaW5nTGluZSx1PXRoaXMuY29sdW1ucztpZigwPT09dGhpcy5vdXRwdXRCaXRzKXtpZih0aGlzLnJvd3NEb25lJiYodGhpcy5lb2Y9ITApLHRoaXMuZW9mKXJldHVybi0xO3ZhciBsLGYsaDtpZih0aGlzLmVycj0hMSx0aGlzLm5leHRMaW5lMkQpe2ZvcihhPTA7Y1thXTx1OysrYSlzW2FdPWNbYV07Zm9yKHNbYSsrXT11LHNbYV09dSxjWzBdPTAsdGhpcy5jb2RpbmdQb3M9MCxlPTAsdD0wO2NbdGhpcy5jb2RpbmdQb3NdPHU7KXN3aXRjaChsPXRoaXMuX2dldFR3b0RpbUNvZGUoKSl7Y2FzZSAwOnRoaXMuX2FkZFBpeGVscyhzW2UrMV0sdCksc1tlKzFdPHUmJihlKz0yKTticmVhaztjYXNlIDE6aWYobD1mPTAsdCl7ZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZG97Zis9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCl9ZWxzZXtkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tmKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KX1mb3IodGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2wsdCksY1t0aGlzLmNvZGluZ1Bvc108dSYmdGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2YsMV50KTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgNzppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSszLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoKytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA1OmlmKHRoaXMuX2FkZFBpeGVscyhzW2VdKzIsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcigrK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDM6aWYodGhpcy5fYWRkUGl4ZWxzKHNbZV0rMSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgMjppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgODppZih0aGlzLl9hZGRQaXhlbHNOZWcoc1tlXS0zLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoZT4wPy0tZTorK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDY6aWYodGhpcy5fYWRkUGl4ZWxzTmVnKHNbZV0tMix0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKGU+MD8tLWU6KytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA0OmlmKHRoaXMuX2FkZFBpeGVsc05lZyhzW2VdLTEsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcihlPjA/LS1lOisrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2Ugbzp0aGlzLl9hZGRQaXhlbHModSwwKSx0aGlzLmVvZj0hMDticmVhaztkZWZhdWx0OigwLG4uaW5mbykoImJhZCAyZCBjb2RlIiksdGhpcy5fYWRkUGl4ZWxzKHUsMCksdGhpcy5lcnI9ITB9fWVsc2UgZm9yKGNbMF09MCx0aGlzLmNvZGluZ1Bvcz0wLHQ9MDtjW3RoaXMuY29kaW5nUG9zXTx1Oyl7aWYobD0wLHQpZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZWxzZSBkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTt0aGlzLl9hZGRQaXhlbHMoY1t0aGlzLmNvZGluZ1Bvc10rbCx0KSx0Xj0xfXZhciBkPSExO2lmKHRoaXMuYnl0ZUFsaWduJiYodGhpcy5pbnB1dEJpdHMmPS04KSx0aGlzLmVvYmxvY2t8fHRoaXMucm93IT09dGhpcy5yb3dzLTEpe2lmKGw9dGhpcy5fbG9va0JpdHMoMTIpLHRoaXMuZW9saW5lKWZvcig7bCE9PW8mJjEhPT1sOyl0aGlzLl9lYXRCaXRzKDEpLGw9dGhpcy5fbG9va0JpdHMoMTIpO2Vsc2UgZm9yKDswPT09bDspdGhpcy5fZWF0Qml0cygxKSxsPXRoaXMuX2xvb2tCaXRzKDEyKTsxPT09bD8odGhpcy5fZWF0Qml0cygxMiksZD0hMCk6bD09PW8mJih0aGlzLmVvZj0hMCl9ZWxzZSB0aGlzLnJvd3NEb25lPSEwO2lmKCF0aGlzLmVvZiYmdGhpcy5lbmNvZGluZz4wJiYhdGhpcy5yb3dzRG9uZSYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSksdGhpcy5lb2Jsb2NrJiZkJiZ0aGlzLmJ5dGVBbGlnbil7aWYoMT09PShsPXRoaXMuX2xvb2tCaXRzKDEyKSkpe2lmKHRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2xvb2tCaXRzKDEpLHRoaXMuX2VhdEJpdHMoMSkpLHRoaXMuZW5jb2Rpbmc+PTApZm9yKGE9MDthPDQ7KythKTEhPT0obD10aGlzLl9sb29rQml0cygxMikpJiYoMCxuLmluZm8pKCJiYWQgcnRjIGNvZGU6ICIrbCksdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSk7dGhpcy5lb2Y9ITB9fWVsc2UgaWYodGhpcy5lcnImJnRoaXMuZW9saW5lKXtmb3IoOzspe2lmKChsPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiB0aGlzLmVvZj0hMCwtMTtpZihsPj4xPT0xKWJyZWFrO3RoaXMuX2VhdEJpdHMoMSl9dGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fZWF0Qml0cygxKSx0aGlzLm5leHRMaW5lMkQ9ISgxJmwpKX1jWzBdPjA/dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MF06dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MV0sdGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpaT0xJnRoaXMuY29kaW5nUG9zPzA6MjU1LHRoaXMub3V0cHV0Qml0cy09OCwwPT09dGhpcy5vdXRwdXRCaXRzJiZjW3RoaXMuY29kaW5nUG9zXTx1JiYodGhpcy5jb2RpbmdQb3MrKyx0aGlzLm91dHB1dEJpdHM9Y1t0aGlzLmNvZGluZ1Bvc10tY1t0aGlzLmNvZGluZ1Bvcy0xXSk7ZWxzZXtyPTgsaT0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTt0aGlzLm91dHB1dEJpdHM+cj8oaTw8PXIsMSZ0aGlzLmNvZGluZ1Bvc3x8KGl8PTI1NT4+OC1yKSx0aGlzLm91dHB1dEJpdHMtPXIscj0wKTooaTw8PXRoaXMub3V0cHV0Qml0cywxJnRoaXMuY29kaW5nUG9zfHwoaXw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyksci09dGhpcy5vdXRwdXRCaXRzLHRoaXMub3V0cHV0Qml0cz0wLGNbdGhpcy5jb2RpbmdQb3NdPHU/KHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3NdLWNbdGhpcy5jb2RpbmdQb3MtMV0pOnI+MCYmKGk8PD1yLHI9MCkpfXdoaWxlKHIpfXJldHVybiB0aGlzLmJsYWNrJiYoaV49MjU1KSxpfX0se2tleToiX2FkZFBpeGVscyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNvZGluZ0xpbmUsYT10aGlzLmNvZGluZ1BvcztlPnJbYV0mJihlPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWUpLHRoaXMuY29kaW5nUG9zPWF9fSx7a2V5OiJfYWRkUGl4ZWxzTmVnIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY29kaW5nTGluZSxhPXRoaXMuY29kaW5nUG9zO2lmKGU+clthXSllPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWU7ZWxzZSBpZihlPHJbYV0pe2ZvcihlPDAmJigoMCxuLmluZm8pKCJpbnZhbGlkIGNvZGUiKSx0aGlzLmVycj0hMCxlPTApO2E+MCYmZTxyW2EtMV07KS0tYTtyW2FdPWV9dGhpcy5jb2RpbmdQb3M9YX19LHtrZXk6Il9maW5kVGFibGVDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGE9bnx8MCxpPWU7aTw9dDsrK2kpe3ZhciBzPXRoaXMuX2xvb2tCaXRzKGkpO2lmKHM9PT1vKXJldHVyblshMCwxLCExXTtpZihpPHQmJihzPDw9dC1pKSwhYXx8cz49YSl7dmFyIGM9cltzLWFdO2lmKGNbMF09PT1pKXJldHVybiB0aGlzLl9lYXRCaXRzKGkpLFshMCxjWzFdLCEwXX19cmV0dXJuWyExLDAsITFdfX0se2tleToiX2dldFR3b0RpbUNvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7aWYodD10aGlzLl9sb29rQml0cyg3KSwoZT1zW3RdKSYmZVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKGVbMF0pLGVbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDEsNyxzKTtpZihyWzBdJiZyWzJdKXJldHVybiByWzFdfXJldHVybigwLG4uaW5mbykoIkJhZCB0d28gZGltIGNvZGUiKSxvfX0se2tleToiX2dldFdoaXRlQ29kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXtpZigodD10aGlzLl9sb29rQml0cygxMikpPT09bylyZXR1cm4gMTtpZigoZT10Pj41PT0wP2NbdF06dVt0Pj4zXSlbMF0+MClyZXR1cm4gdGhpcy5fZWF0Qml0cyhlWzBdKSxlWzFdfWVsc2V7dmFyIHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxLDksdSk7aWYoclswXSlyZXR1cm4gclsxXTtpZigocj10aGlzLl9maW5kVGFibGVDb2RlKDExLDEyLGMpKVswXSlyZXR1cm4gclsxXX1yZXR1cm4oMCxuLmluZm8pKCJiYWQgd2hpdGUgY29kZSIpLHRoaXMuX2VhdEJpdHMoMSksMX19LHtrZXk6Il9nZXRCbGFja0NvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdDtpZih0aGlzLmVvYmxvY2spe2lmKChlPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiAxO2lmKCh0PWU+Pjc9PTA/bFtlXTplPj45PT0wJiZlPj43IT0wP2ZbKGU+PjEpLTY0XTpoW2U+PjddKVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKHRbMF0pLHRbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDIsNixoKTtpZihyWzBdKXJldHVybiByWzFdO2lmKChyPXRoaXMuX2ZpbmRUYWJsZUNvZGUoNywxMixmLDY0KSlbMF0pcmV0dXJuIHJbMV07aWYoKHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxMCwxMyxsKSlbMF0pcmV0dXJuIHJbMV19cmV0dXJuKDAsbi5pbmZvKSgiYmFkIGJsYWNrIGNvZGUiKSx0aGlzLl9lYXRCaXRzKDEpLDF9fSx7a2V5OiJfbG9va0JpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/bzp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0LHRoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfX0se2tleToiX2VhdEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpeyh0aGlzLmlucHV0Qml0cy09ZSk8MCYmKHRoaXMuaW5wdXRCaXRzPTApfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0NJVFRGYXhEZWNvZGVyPWR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZsYXRlU3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX12YXIgdT1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLGw9bmV3IEludDMyQXJyYXkoWzMsNCw1LDYsNyw4LDksMTAsNjU1NDcsNjU1NDksNjU1NTEsNjU1NTMsMTMxMDkxLDEzMTA5NSwxMzEwOTksMTMxMTAzLDE5NjY0MywxOTY2NTEsMTk2NjU5LDE5NjY2NywyNjIyMTEsMjYyMjI3LDI2MjI0MywyNjIyNTksMzI3ODExLDMyNzg0MywzMjc4NzUsMzI3OTA3LDI1OCwyNTgsMjU4XSksZj1uZXcgSW50MzJBcnJheShbMSwyLDMsNCw2NTU0MSw2NTU0MywxMzEwODEsMTMxMDg1LDE5NjYyNSwxOTY2MzMsMjYyMTc3LDI2MjE5MywzMjc3NDUsMzI3Nzc3LDM5MzM0NSwzOTM0MDksNDU5MDA5LDQ1OTEzNyw1MjQ4MDEsNTI1MDU3LDU5MDg0OSw1OTEzNjEsNjU3NDA5LDY1ODQzMyw3MjQ5OTMsNzI3MDQxLDc5NDYyNSw3OTg3MjEsODY4MzUzLDg3NjU0NV0pLGg9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLGQ9W25ldyBJbnQzMkFycmF5KFszMjc2ODAsMzI3Njk2LDMyNzY4OCwzMjc3MDQsMzI3Njg0LDMyNzcwMCwzMjc2OTIsMzI3NzA4LDMyNzY4MiwzMjc2OTgsMzI3NjkwLDMyNzcwNiwzMjc2ODYsMzI3NzAyLDMyNzY5NCwwLDMyNzY4MSwzMjc2OTcsMzI3Njg5LDMyNzcwNSwzMjc2ODUsMzI3NzAxLDMyNzY5MywzMjc3MDksMzI3NjgzLDMyNzY5OSwzMjc2OTEsMzI3NzA3LDMyNzY4NywzMjc3MDMsMzI3Njk1LDBdKSw1XSxwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KHYsZSk7dmFyIHQscixhLHAsZz0oYT12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHApe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoZSx0KXt2YXIgcjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwocj1nLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdDt2YXIgbj1lLmdldEJ5dGUoKSxhPWUuZ2V0Qnl0ZSgpO2lmKC0xPT09bnx8LTE9PT1hKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtpZig4IT0oMTUmbikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIGluIGZsYXRlIHN0cmVhbTogIi5jb25jYXQobiwiLCAiKS5jb25jYXQoYSkpO2lmKCgobjw8OCkrYSklMzEhPTApdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChuLCIsICIpLmNvbmNhdChhKSk7aWYoMzImYSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiRkRJQ1QgYml0IHNldCBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtyZXR1cm4gci5jb2RlU2l6ZT0wLHIuY29kZUJ1Zj0wLHJ9cmV0dXJuIHQ9diwocj1be2tleToiZ2V0Qml0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5zdHIsbj10aGlzLmNvZGVTaXplLGE9dGhpcy5jb2RlQnVmO248ZTspe2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7YXw9dDw8bixuKz04fXJldHVybiB0PWEmKDE8PGUpLTEsdGhpcy5jb2RlQnVmPWE+PmUsdGhpcy5jb2RlU2l6ZT1uLT1lLHR9fSx7a2V5OiJnZXRDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLnN0cixuPWVbMF0sYT1lWzFdLG89dGhpcy5jb2RlU2l6ZSxzPXRoaXMuY29kZUJ1ZjtvPGEmJi0xIT09KHQ9ci5nZXRCeXRlKCkpOylzfD10PDxvLG8rPTg7dmFyIGM9bltzJigxPDxhKS0xXSx1PWM+PjE2LGw9NjU1MzUmYztpZih1PDF8fG88dSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybiB0aGlzLmNvZGVCdWY9cz4+dSx0aGlzLmNvZGVTaXplPW8tdSxsfX0se2tleToiZ2VuZXJhdGVIdWZmbWFuVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5sZW5ndGgsbj0wO2Zvcih0PTA7dDxyOysrdCllW3RdPm4mJihuPWVbdF0pO2Zvcih2YXIgYT0xPDxuLGk9bmV3IEludDMyQXJyYXkoYSksbz0xLHM9MCxjPTI7bzw9bjsrK28sczw8PTEsYzw8PTEpZm9yKHZhciB1PTA7dTxyOysrdSlpZihlW3VdPT09byl7dmFyIGw9MCxmPXM7Zm9yKHQ9MDt0PG87Kyt0KWw9bDw8MXwxJmYsZj4+PTE7Zm9yKHQ9bDt0PGE7dCs9YylpW3RdPW88PDE2fHU7KytzfXJldHVybltpLG5dfX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLnN0cixuPXRoaXMuZ2V0Qml0cygzKTtpZigxJm4mJih0aGlzLmVvZj0hMCksMCE9KG4+Pj0xKSl7dmFyIGEsbztpZigxPT09bilhPWgsbz1kO2Vsc2V7aWYoMiE9PW4pdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gYmxvY2sgdHlwZSBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgcyxjPXRoaXMuZ2V0Qml0cyg1KSsyNTcscD10aGlzLmdldEJpdHMoNSkrMSxnPXRoaXMuZ2V0Qml0cyg0KSs0LHY9bmV3IFVpbnQ4QXJyYXkodS5sZW5ndGgpO2ZvcihzPTA7czxnOysrcyl2W3Vbc11dPXRoaXMuZ2V0Qml0cygzKTt2YXIgeT10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHYpO3Q9MCxzPTA7Zm9yKHZhciBtLGIsdyxrPWMrcCxTPW5ldyBVaW50OEFycmF5KGspO3M8azspe3ZhciB4PXRoaXMuZ2V0Q29kZSh5KTtpZigxNj09PXgpbT0yLGI9Myx3PXQ7ZWxzZSBpZigxNz09PXgpbT0zLGI9Myx3PXQ9MDtlbHNle2lmKDE4IT09eCl7U1tzKytdPXQ9eDtjb250aW51ZX1tPTcsYj0xMSx3PXQ9MH1mb3IodmFyIE89dGhpcy5nZXRCaXRzKG0pK2I7Ty0tID4wOylTW3MrK109d31hPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheSgwLGMpKSxvPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheShjLGspKX1mb3IodmFyIEE9KGU9dGhpcy5idWZmZXIpP2UubGVuZ3RoOjAsQz10aGlzLmJ1ZmZlckxlbmd0aDs7KXt2YXIgRj10aGlzLmdldENvZGUoYSk7aWYoRjwyNTYpQysxPj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDKzEpKS5sZW5ndGgpLGVbQysrXT1GO2Vsc2V7aWYoMjU2PT09RilyZXR1cm4gdm9pZCh0aGlzLmJ1ZmZlckxlbmd0aD1DKTt2YXIgUD0oRj1sW0YtPTI1N10pPj4xNjtQPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSksdD0oNjU1MzUmRikrUCxGPXRoaXMuZ2V0Q29kZShvKSwoUD0oRj1mW0ZdKT4+MTYpPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSk7dmFyIFQ9KDY1NTM1JkYpK1A7Qyt0Pj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDK3QpKS5sZW5ndGgpO2Zvcih2YXIgST0wO0k8dDsrK0ksKytDKWVbQ109ZVtDLVRdfX19ZWxzZXt2YXIgRTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgaj1FO2lmKC0xPT09KEU9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2lmKGp8PUU8PDgsLTE9PT0oRT1yLmdldEJ5dGUoKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7dmFyIE09RTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtpZigoTXw9RTw8OCkhPSg2NTUzNSZ+aikmJigwIT09anx8MCE9PU0pKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW0iKTt0aGlzLmNvZGVCdWY9MCx0aGlzLmNvZGVTaXplPTA7dmFyIF89dGhpcy5idWZmZXJMZW5ndGgsTD1fK2o7aWYoZT10aGlzLmVuc3VyZUJ1ZmZlcihMKSx0aGlzLmJ1ZmZlckxlbmd0aD1MLDA9PT1qKS0xPT09ci5wZWVrQnl0ZSgpJiYodGhpcy5lb2Y9ITApO2Vsc2V7dmFyIFI9ci5nZXRCeXRlcyhqKTtlLnNldChSLF8pLFIubGVuZ3RoPGomJih0aGlzLmVvZj0hMCl9fX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdn0oYS5EZWNvZGVTdHJlYW0pO3QuRmxhdGVTdHJlYW09cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTQ4KSxvPXIoMTM0KSxzPXIoMTU0KSxjPXIoMik7ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGwoZSx0KX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxmKGUpfXZhciBoPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9KHAsZSk7dmFyIHQscixpLGgsZD0oaT1wLGg9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1mKGkpO2lmKGgpe3ZhciByPWYodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHAoZSx0LHIpe3ZhciBuO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHApLChuPWQuY2FsbCh0aGlzLHQpKS5zdHJlYW09ZSxuLmRpY3Q9ZS5kaWN0LG4ubWF5YmVMZW5ndGg9dCxuLnBhcmFtcz1yLG59cmV0dXJuIHQ9cCwocj1be2tleToiYnl0ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGMuc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfX0se2tleToiZW5zdXJlQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT1uZXcgcy5KYmlnMkltYWdlLHQ9W107aWYodGhpcy5wYXJhbXMgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYociBpbnN0YW5jZW9mIGEuQmFzZVN0cmVhbSl7dmFyIG49ci5nZXRCeXRlcygpO3QucHVzaCh7ZGF0YTpuLHN0YXJ0OjAsZW5kOm4ubGVuZ3RofSl9fXQucHVzaCh7ZGF0YTp0aGlzLmJ5dGVzLHN0YXJ0OjAsZW5kOnRoaXMuYnl0ZXMubGVuZ3RofSk7Zm9yKHZhciBpPWUucGFyc2VDaHVua3ModCksYz1pLmxlbmd0aCx1PTA7dTxjO3UrKylpW3VdXj0yNTU7dGhpcy5idWZmZXI9aSx0aGlzLmJ1ZmZlckxlbmd0aD1jLHRoaXMuZW9mPSEwfX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscH0oaS5EZWNvZGVTdHJlYW0pO3QuSmJpZzJTdHJlYW09aH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJJbWFnZT12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTU1KSxzPXIoMTUxKTtmdW5jdGlvbiBjKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBmKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1sKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBsKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZyhlLHQpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHYoZSl9dmFyIHk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmcoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9dih0KTtpZihyKXt2YXIgaT12KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBwKHRoaXMsaSksYS5jYWxsKHRoaXMsIkpCSUcyIGVycm9yOiAiLmNvbmNhdChlKSwiSmJpZzJFcnJvciIpfXJldHVybiBkKGkpfShhLkJhc2VFeGNlcHRpb24pLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cCh0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImdldENvbnRleHRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7cCh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuc3RhcnQ9cix0aGlzLmVuZD1ufXJldHVybiBkKGUsW3trZXk6ImRlY29kZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZGVjb2RlciIsZSl9fSx7a2V5OiJjb250ZXh0Q2FjaGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBtO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLGUpfX1dKSxlfSgpO2Z1bmN0aW9uIHcoZSx0LHIpe3ZhciBuPWUuZ2V0Q29udGV4dHModCksYT0xO2Z1bmN0aW9uIGkoZSl7Zm9yKHZhciB0PTAsaT0wO2k8ZTtpKyspe3ZhciBvPXIucmVhZEJpdChuLGEpO2E9YTwyNTY/YTw8MXxvOjUxMSYoYTw8MXxvKXwyNTYsdD10PDwxfG99cmV0dXJuIHQ+Pj4wfXZhciBvPWkoMSkscz1pKDEpP2koMSk/aSgxKT9pKDEpP2koMSk/aSgzMikrNDQzNjppKDEyKSszNDA6aSg4KSs4NDppKDYpKzIwOmkoNCkrNDppKDIpO3JldHVybiAwPT09bz9zOnM+MD8tczpudWxsfWZ1bmN0aW9uIGsoZSx0LHIpe2Zvcih2YXIgbj1lLmdldENvbnRleHRzKCJJQUlEIiksYT0xLGk9MDtpPHI7aSsrKWE9YTw8MXx0LnJlYWRCaXQobixhKTtyZXR1cm4gcjwzMT9hJigxPDxyKS0xOjIxNDc0ODM2NDcmYX12YXIgUz1bIlN5bWJvbERpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uIixudWxsLCJJbW1lZGlhdGVUZXh0UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIlBhdHRlcm5EaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb24iLG51bGwsIkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLCJQYWdlSW5mb3JtYXRpb24iLCJFbmRPZlBhZ2UiLCJFbmRPZlN0cmlwZSIsIkVuZE9mRmlsZSIsIlByb2ZpbGVzIiwiVGFibGVzIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkV4dGVuc2lvbiJdLHg9W1t7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMyx5Oi0xfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV1dLE89W3tjb2Rpbmc6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6LTEseToxfSx7eDowLHk6MX0se3g6MSx5OjF9XX0se2NvZGluZzpbe3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6MCx5OjF9LHt4OjEseToxfV19XSxBPVszOTcxNywxOTQxLDIyOSw0MDVdLEM9WzMyLDhdO2Z1bmN0aW9uIEYoZSx0LHIsbixhLGksbyxzKXtpZihlKXJldHVybiBHKG5ldyBYKHMuZGF0YSxzLnN0YXJ0LHMuZW5kKSx0LHIsITEpO2lmKDA9PT1uJiYhaSYmIWEmJjQ9PT1vLmxlbmd0aCYmMz09PW9bMF0ueCYmLTE9PT1vWzBdLnkmJi0zPT09b1sxXS54JiYtMT09PW9bMV0ueSYmMj09PW9bMl0ueCYmLTI9PT1vWzJdLnkmJi0yPT09b1szXS54JiYtMj09PW9bM10ueSlyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLHMsYyx1LGw9ci5kZWNvZGVyLGY9ci5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIiksaD1bXTtmb3IoYT0wO2E8dDthKyspZm9yKHM9aFthXT1uZXcgVWludDhBcnJheShlKSxjPWE8MT9zOmhbYS0xXSxuPSh1PWE8Mj9zOmhbYS0yXSlbMF08PDEzfHVbMV08PDEyfHVbMl08PDExfGNbMF08PDd8Y1sxXTw8NnxjWzJdPDw1fGNbM108PDQsaT0wO2k8ZTtpKyspc1tpXT1vPWwucmVhZEJpdChmLG4pLG49KDMxNzM1Jm4pPDwxfChpKzM8ZT91W2krM108PDExOjApfChpKzQ8ZT9jW2krNF08PDQ6MCl8bztyZXR1cm4gaH0odCxyLHMpO3ZhciBjPSEhaSx1PXhbbl0uY29uY2F0KG8pO3Uuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH0pKTt2YXIgbCxmLGg9dS5sZW5ndGgsZD1uZXcgSW50OEFycmF5KGgpLHA9bmV3IEludDhBcnJheShoKSxnPVtdLHY9MCx5PTAsbT0wLGI9MDtmb3IoZj0wO2Y8aDtmKyspZFtmXT11W2ZdLngscFtmXT11W2ZdLnkseT1NYXRoLm1pbih5LHVbZl0ueCksbT1NYXRoLm1heChtLHVbZl0ueCksYj1NYXRoLm1pbihiLHVbZl0ueSksZjxoLTEmJnVbZl0ueT09PXVbZisxXS55JiZ1W2ZdLng9PT11W2YrMV0ueC0xP3Z8PTE8PGgtMS1mOmcucHVzaChmKTt2YXIgdz1nLmxlbmd0aCxrPW5ldyBJbnQ4QXJyYXkodyksUz1uZXcgSW50OEFycmF5KHcpLE89bmV3IFVpbnQxNkFycmF5KHcpO2ZvcihsPTA7bDx3O2wrKylmPWdbbF0sa1tsXT11W2ZdLngsU1tsXT11W2ZdLnksT1tsXT0xPDxoLTEtZjtmb3IodmFyIEMsRixQLFQsSSxFPS15LGo9LWIsTT10LW0sXz1BW25dLEw9bmV3IFVpbnQ4QXJyYXkodCksUj1bXSxOPXMuZGVjb2RlcixEPXMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpLEI9MCxVPTAsJD0wOyQ8cjskKyspaWYoYSYmKEJePU4ucmVhZEJpdChELF8pKSlSLnB1c2goTCk7ZWxzZSBmb3IoTD1uZXcgVWludDhBcnJheShMKSxSLnB1c2goTCksQz0wO0M8dDtDKyspaWYoYyYmaVskXVtDXSlMW0NdPTA7ZWxzZXtpZihDPj1FJiZDPE0mJiQ+PWopZm9yKFU9VTw8MSZ2LGY9MDtmPHc7ZisrKUY9JCtTW2ZdLFA9QytrW2ZdLChUPVJbRl1bUF0pJiYoVXw9VD1PW2ZdKTtlbHNlIGZvcihVPTAsST1oLTEsZj0wO2Y8aDtmKyssSS0tKShQPUMrZFtmXSk+PTAmJlA8dCYmKEY9JCtwW2ZdKT49MCYmKFQ9UltGXVtQXSkmJihVfD1UPDxJKTt2YXIgSD1OLnJlYWRCaXQoRCxVKTtMW0NdPUh9cmV0dXJuIFJ9ZnVuY3Rpb24gUChlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9T1tyXS5jb2Rpbmc7MD09PXImJih1PXUuY29uY2F0KFtzWzBdXSkpO3ZhciBsLGY9dS5sZW5ndGgsaD1uZXcgSW50MzJBcnJheShmKSxkPW5ldyBJbnQzMkFycmF5KGYpO2ZvcihsPTA7bDxmO2wrKyloW2xdPXVbbF0ueCxkW2xdPXVbbF0ueTt2YXIgcD1PW3JdLnJlZmVyZW5jZTswPT09ciYmKHA9cC5jb25jYXQoW3NbMV1dKSk7dmFyIGc9cC5sZW5ndGgsdj1uZXcgSW50MzJBcnJheShnKSxtPW5ldyBJbnQzMkFycmF5KGcpO2ZvcihsPTA7bDxnO2wrKyl2W2xdPXBbbF0ueCxtW2xdPXBbbF0ueTtmb3IodmFyIGI9blswXS5sZW5ndGgsdz1uLmxlbmd0aCxrPUNbcl0sUz1bXSx4PWMuZGVjb2RlcixBPWMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpLEY9MCxQPTA7UDx0O1ArKyl7aWYobyYmKEZePXgucmVhZEJpdChBLGspKSl0aHJvdyBuZXcgeSgicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkIik7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoZSk7Uy5wdXNoKFQpO2Zvcih2YXIgST0wO0k8ZTtJKyspe3ZhciBFPXZvaWQgMCxqPXZvaWQgMCxNPTA7Zm9yKGw9MDtsPGY7bCsrKUU9UCtkW2xdLGo9SStoW2xdLEU8MHx8ajwwfHxqPj1lP008PD0xOk09TTw8MXxTW0VdW2pdO2ZvcihsPTA7bDxnO2wrKylFPVArbVtsXS1pLGo9SSt2W2xdLWEsRTwwfHxFPj13fHxqPDB8fGo+PWI/TTw8PTE6TT1NPDwxfG5bRV1bal07dmFyIF89eC5yZWFkQml0KEEsTSk7VFtJXT1ffX1yZXR1cm4gU31mdW5jdGlvbiBUKGUsdCxyLG4sYSxpLG8scyxjLHUsbCxmLGgsZCxwLGcsdixtLGIpe2lmKGUmJnQpdGhyb3cgbmV3IHkoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTt2YXIgUyx4LE89W107Zm9yKFM9MDtTPG47UysrKXtpZih4PW5ldyBVaW50OEFycmF5KHIpLGEpZm9yKHZhciBBPTA7QTxyO0ErKyl4W0FdPWE7Ty5wdXNoKHgpfXZhciBDPXYuZGVjb2RlcixGPXYuY29udGV4dENhY2hlLFQ9ZT8tZC50YWJsZURlbHRhVC5kZWNvZGUoYik6LXcoRiwiSUFEVCIsQyksST0wO2ZvcihTPTA7UzxpOyl7VCs9ZT9kLnRhYmxlRGVsdGFULmRlY29kZShiKTp3KEYsIklBRFQiLEMpO2Zvcih2YXIgRT1JKz1lP2QudGFibGVGaXJzdFMuZGVjb2RlKGIpOncoRiwiSUFGUyIsQyk7Oyl7dmFyIGo9MDtvPjEmJihqPWU/Yi5yZWFkQml0cyhtKTp3KEYsIklBSVQiLEMpKTt2YXIgTT1vKlQraixfPWU/ZC5zeW1ib2xJRFRhYmxlLmRlY29kZShiKTprKEYsQyxjKSxMPXQmJihlP2IucmVhZEJpdCgpOncoRiwiSUFSSSIsQykpLFI9c1tfXSxOPVJbMF0ubGVuZ3RoLEQ9Ui5sZW5ndGg7aWYoTCl7dmFyIEI9dyhGLCJJQVJEVyIsQyksVT13KEYsIklBUkRIIixDKTtSPVAoTis9QixEKz1VLHAsUiwoQj4+MSkrdyhGLCJJQVJEWCIsQyksKFU+PjEpK3coRiwiSUFSRFkiLEMpLCExLGcsdil9dmFyICQ9TS0oMSZmPzA6RC0xKSxYPUUtKDImZj9OLTE6MCksSD12b2lkIDAscT12b2lkIDAsRz12b2lkIDA7aWYodSl7Zm9yKEg9MDtIPEQ7SCsrKWlmKHg9T1tYK0hdKXtHPVJbSF07dmFyIHo9TWF0aC5taW4oci0kLE4pO3N3aXRjaChoKXtjYXNlIDA6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXXw9R1txXTticmVhaztjYXNlIDI6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXV49R1txXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJvcGVyYXRvciAiLmNvbmNhdChoLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19RSs9RC0xfWVsc2V7Zm9yKHE9MDtxPEQ7cSsrKWlmKHg9T1skK3FdKXN3aXRjaChHPVJbcV0saCl7Y2FzZSAwOmZvcihIPTA7SDxOO0grKyl4W1grSF18PUdbSF07YnJlYWs7Y2FzZSAyOmZvcihIPTA7SDxOO0grKyl4W1grSF1ePUdbSF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQoaCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9RSs9Ti0xfVMrKzt2YXIgVz1lP2QudGFibGVEZWx0YVMuZGVjb2RlKGIpOncoRiwiSUFEUyIsQyk7aWYobnVsbD09PVcpYnJlYWs7RSs9VytsfX1yZXR1cm4gT31mdW5jdGlvbiBJKGUsdCl7dmFyIHI9e307ci5udW1iZXI9KDAsaS5yZWFkVWludDMyKShlLHQpO3ZhciBuPWVbdCs0XSxhPTYzJm47aWYoIVNbYV0pdGhyb3cgbmV3IHkoImludmFsaWQgc2VnbWVudCB0eXBlOiAiK2EpO3IudHlwZT1hLHIudHlwZU5hbWU9U1thXSxyLmRlZmVycmVkTm9uUmV0YWluPSEhKDEyOCZuKTt2YXIgbz0hISg2NCZuKSxzPWVbdCs1XSxjPXM+PjUmNyx1PVszMSZzXSxsPXQrNjtpZig3PT09cyl7Yz01MzY4NzA5MTEmKDAsaS5yZWFkVWludDMyKShlLGwtMSksbCs9Mzt2YXIgZj1jKzc+PjM7Zm9yKHVbMF09ZVtsKytdOy0tZj4wOyl1LnB1c2goZVtsKytdKX1lbHNlIGlmKDU9PT1zfHw2PT09cyl0aHJvdyBuZXcgeSgiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO3IucmV0YWluQml0cz11O3ZhciBoPTQ7ci5udW1iZXI8PTI1Nj9oPTE6ci5udW1iZXI8PTY1NTM2JiYoaD0yKTt2YXIgZCxwLGc9W107Zm9yKGQ9MDtkPGM7ZCsrKXt2YXIgdjt2PTE9PT1oP2VbbF06Mj09PWg/KDAsaS5yZWFkVWludDE2KShlLGwpOigwLGkucmVhZFVpbnQzMikoZSxsKSxnLnB1c2godiksbCs9aH1pZihyLnJlZmVycmVkVG89ZyxvPyhyLnBhZ2VBc3NvY2lhdGlvbj0oMCxpLnJlYWRVaW50MzIpKGUsbCksbCs9NCk6ci5wYWdlQXNzb2NpYXRpb249ZVtsKytdLHIubGVuZ3RoPSgwLGkucmVhZFVpbnQzMikoZSxsKSxsKz00LDQyOTQ5NjcyOTU9PT1yLmxlbmd0aCl7aWYoMzghPT1hKXRocm93IG5ldyB5KCJpbnZhbGlkIHVua25vd24gc2VnbWVudCBsZW5ndGgiKTt2YXIgbT1qKGUsbCksYj0hISgxJmVbbCtNXSksdz1uZXcgVWludDhBcnJheSg2KTtmb3IoYnx8KHdbMF09MjU1LHdbMV09MTcyKSx3WzJdPW0uaGVpZ2h0Pj4+MjQmMjU1LHdbM109bS5oZWlnaHQ+PjE2JjI1NSx3WzRdPW0uaGVpZ2h0Pj44JjI1NSx3WzVdPTI1NSZtLmhlaWdodCxkPWwscD1lLmxlbmd0aDtkPHA7ZCsrKXtmb3IodmFyIGs9MDtrPDYmJndba109PT1lW2Qra107KWsrKztpZig2PT09ayl7ci5sZW5ndGg9ZCs2O2JyZWFrfX1pZig0Mjk0OTY3Mjk1PT09ci5sZW5ndGgpdGhyb3cgbmV3IHkoInNlZ21lbnQgZW5kIHdhcyBub3QgZm91bmQiKX1yZXR1cm4gci5oZWFkZXJFbmQ9bCxyfWZ1bmN0aW9uIEUoZSx0LHIsbil7Zm9yKHZhciBhPVtdLGk9cjtpPG47KXt2YXIgbz1JKHQsaSk7aT1vLmhlYWRlckVuZDt2YXIgcz17aGVhZGVyOm8sZGF0YTp0fTtpZihlLnJhbmRvbUFjY2Vzc3x8KHMuc3RhcnQ9aSxpKz1vLmxlbmd0aCxzLmVuZD1pKSxhLnB1c2gocyksNTE9PT1vLnR5cGUpYnJlYWt9aWYoZS5yYW5kb21BY2Nlc3MpZm9yKHZhciBjPTAsdT1hLmxlbmd0aDtjPHU7YysrKWFbY10uc3RhcnQ9aSxpKz1hW2NdLmhlYWRlci5sZW5ndGgsYVtjXS5lbmQ9aTtyZXR1cm4gYX1mdW5jdGlvbiBqKGUsdCl7cmV0dXJue3dpZHRoOigwLGkucmVhZFVpbnQzMikoZSx0KSxoZWlnaHQ6KDAsaS5yZWFkVWludDMyKShlLHQrNCkseDooMCxpLnJlYWRVaW50MzIpKGUsdCs4KSx5OigwLGkucmVhZFVpbnQzMikoZSx0KzEyKSxjb21iaW5hdGlvbk9wZXJhdG9yOjcmZVt0KzE2XX19dmFyIE09MTc7ZnVuY3Rpb24gXyhlLHQpe3ZhciByLG4sYSxvLHM9ZS5oZWFkZXIsYz1lLmRhdGEsdT1lLmVuZCxsPWUuc3RhcnQ7c3dpdGNoKHMudHlwZSl7Y2FzZSAwOnZhciBmPXt9LGg9KDAsaS5yZWFkVWludDE2KShjLGwpO2lmKGYuaHVmZm1hbj0hISgxJmgpLGYucmVmaW5lbWVudD0hISgyJmgpLGYuaHVmZm1hbkRIU2VsZWN0b3I9aD4+MiYzLGYuaHVmZm1hbkRXU2VsZWN0b3I9aD4+NCYzLGYuYml0bWFwU2l6ZVNlbGVjdG9yPWg+PjYmMSxmLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9aD4+NyYxLGYuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JmgpLGYuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZoKSxmLnRlbXBsYXRlPWg+PjEwJjMsZi5yZWZpbmVtZW50VGVtcGxhdGU9aD4+MTImMSxsKz0yLCFmLmh1ZmZtYW4pe2ZvcihvPTA9PT1mLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLmF0PW59aWYoZi5yZWZpbmVtZW50JiYhZi5yZWZpbmVtZW50VGVtcGxhdGUpe2ZvcihuPVtdLGE9MDthPDI7YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLnJlZmluZW1lbnRBdD1ufWYubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsZi5udW1iZXJPZk5ld1N5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bZixzLm51bWJlcixzLnJlZmVycmVkVG8sYyxsLHVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dmFyIGQ9e307ZC5pbmZvPWooYyxsKSxsKz1NO3ZhciBwPSgwLGkucmVhZFVpbnQxNikoYyxsKTtpZihsKz0yLGQuaHVmZm1hbj0hISgxJnApLGQucmVmaW5lbWVudD0hISgyJnApLGQubG9nU3RyaXBTaXplPXA+PjImMyxkLnN0cmlwU2l6ZT0xPDxkLmxvZ1N0cmlwU2l6ZSxkLnJlZmVyZW5jZUNvcm5lcj1wPj40JjMsZC50cmFuc3Bvc2VkPSEhKDY0JnApLGQuY29tYmluYXRpb25PcGVyYXRvcj1wPj43JjMsZC5kZWZhdWx0UGl4ZWxWYWx1ZT1wPj45JjEsZC5kc09mZnNldD1wPDwxNz4+MjcsZC5yZWZpbmVtZW50VGVtcGxhdGU9cD4+MTUmMSxkLmh1ZmZtYW4pe3ZhciBnPSgwLGkucmVhZFVpbnQxNikoYyxsKTtsKz0yLGQuaHVmZm1hbkZTPTMmZyxkLmh1ZmZtYW5EUz1nPj4yJjMsZC5odWZmbWFuRFQ9Zz4+NCYzLGQuaHVmZm1hblJlZmluZW1lbnREVz1nPj42JjMsZC5odWZmbWFuUmVmaW5lbWVudERIPWc+PjgmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFg9Zz4+MTAmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFk9Zz4+MTImMyxkLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmcpfWlmKGQucmVmaW5lbWVudCYmIWQucmVmaW5lbWVudFRlbXBsYXRlKXtmb3Iobj1bXSxhPTA7YTwyO2ErKyluLnB1c2goe3g6KDAsaS5yZWFkSW50OCkoYyxsKSx5OigwLGkucmVhZEludDgpKGMsbCsxKX0pLGwrPTI7ZC5yZWZpbmVtZW50QXQ9bn1kLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LHI9W2Qscy5yZWZlcnJlZFRvLGMsbCx1XTticmVhaztjYXNlIDE2OnZhciB2PXt9LG09Y1tsKytdO3YubW1yPSEhKDEmbSksdi50ZW1wbGF0ZT1tPj4xJjMsdi5wYXR0ZXJuV2lkdGg9Y1tsKytdLHYucGF0dGVybkhlaWdodD1jW2wrK10sdi5tYXhQYXR0ZXJuSW5kZXg9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bdixzLm51bWJlcixjLGwsdV07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnZhciBiPXt9O2IuaW5mbz1qKGMsbCksbCs9TTt2YXIgdz1jW2wrK107Yi5tbXI9ISEoMSZ3KSxiLnRlbXBsYXRlPXc+PjEmMyxiLmVuYWJsZVNraXA9ISEoOCZ3KSxiLmNvbWJpbmF0aW9uT3BlcmF0b3I9dz4+NCY3LGIuZGVmYXVsdFBpeGVsVmFsdWU9dz4+NyYxLGIuZ3JpZFdpZHRoPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZEhlaWdodD0oMCxpLnJlYWRVaW50MzIpKGMsbCksbCs9NCxiLmdyaWRPZmZzZXRYPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsYi5ncmlkT2Zmc2V0WT00Mjk0OTY3Mjk1JigwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZFZlY3Rvclg9KDAsaS5yZWFkVWludDE2KShjLGwpLGwrPTIsYi5ncmlkVmVjdG9yWT0oMCxpLnJlYWRVaW50MTYpKGMsbCksbCs9MixyPVtiLHMucmVmZXJyZWRUbyxjLGwsdV07YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnZhciBrPXt9O2suaW5mbz1qKGMsbCksbCs9TTt2YXIgUz1jW2wrK107aWYoay5tbXI9ISEoMSZTKSxrLnRlbXBsYXRlPVM+PjEmMyxrLnByZWRpY3Rpb249ISEoOCZTKSwhay5tbXIpe2ZvcihvPTA9PT1rLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtrLmF0PW59cj1bayxjLGwsdV07YnJlYWs7Y2FzZSA0ODp2YXIgeD17d2lkdGg6KDAsaS5yZWFkVWludDMyKShjLGwpLGhlaWdodDooMCxpLnJlYWRVaW50MzIpKGMsbCs0KSxyZXNvbHV0aW9uWDooMCxpLnJlYWRVaW50MzIpKGMsbCs4KSxyZXNvbHV0aW9uWTooMCxpLnJlYWRVaW50MzIpKGMsbCsxMil9OzQyOTQ5NjcyOTU9PT14LmhlaWdodCYmZGVsZXRlIHguaGVpZ2h0O3ZhciBPPWNbbCsxNl07KDAsaS5yZWFkVWludDE2KShjLGwrMTcpLHgubG9zc2xlc3M9ISEoMSZPKSx4LnJlZmluZW1lbnQ9ISEoMiZPKSx4LmRlZmF1bHRQaXhlbFZhbHVlPU8+PjImMSx4LmNvbWJpbmF0aW9uT3BlcmF0b3I9Tz4+MyYzLHgucmVxdWlyZXNCdWZmZXI9ISEoMzImTykseC5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU9ISEoNjQmTykscj1beF07YnJlYWs7Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA2MjpicmVhaztjYXNlIDUzOnI9W3MubnVtYmVyLGMsbCx1XTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJzZWdtZW50IHR5cGUgIi5jb25jYXQocy50eXBlTmFtZSwiKCIpLmNvbmNhdChzLnR5cGUsIikgaXMgbm90IGltcGxlbWVudGVkIikpfXZhciBBPSJvbiIrcy50eXBlTmFtZTtBIGluIHQmJnRbQV0uYXBwbHkodCxyKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKV8oZVtyXSx0KX12YXIgUj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToib25QYWdlSW5mb3JtYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7dmFyIHQ9ZS53aWR0aCs3Pj4zLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2UuZGVmYXVsdFBpeGVsVmFsdWUmJnIuZmlsbCgyNTUpLHRoaXMuYnVmZmVyPXJ9fSx7a2V5OiJkcmF3Qml0bWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpLG89dGhpcy5jdXJyZW50UGFnZUluZm8scz1lLndpZHRoLGM9ZS5oZWlnaHQsdT1vLndpZHRoKzc+PjMsbD1vLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT9lLmNvbWJpbmF0aW9uT3BlcmF0b3I6by5jb21iaW5hdGlvbk9wZXJhdG9yLGY9dGhpcy5idWZmZXIsaD0xMjg+Pig3JmUueCksZD1lLnkqdSsoZS54Pj4zKTtzd2l0Y2gobCl7Y2FzZSAwOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV18PWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7Y2FzZSAyOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV1ePWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQobCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9fX0se2tleToib25JbW1lZGlhdGVHZW5lcmljUmVnaW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1lLmluZm8saT1uZXcgYih0LHIsbiksbz1GKGUubW1yLGEud2lkdGgsYS5oZWlnaHQsZS50ZW1wbGF0ZSxlLnByZWRpY3Rpb24sbnVsbCxlLmF0LGkpO3RoaXMuZHJhd0JpdG1hcChhLG8pfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25TeW1ib2xEaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsbyl7dmFyIHMsbDtlLmh1ZmZtYW4mJihzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbz0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOm49JChlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpuPUgobyx0LHIpLG8rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTphPSQoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6YT1IKG8sdCxyKSxvKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yIil9cmV0dXJuIGUuYml0bWFwU2l6ZVNlbGVjdG9yPyhpPUgobyx0LHIpLG8rKyk6aT0kKDEpLHt0YWJsZURlbHRhSGVpZ2h0Om4sdGFibGVEZWx0YVdpZHRoOmEsdGFibGVCaXRtYXBTaXplOmksdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXM6ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP0gobyx0LHIpOiQoMSl9fShlLHIsdGhpcy5jdXN0b21UYWJsZXMpLGw9bmV3IFgobixhLG8pKTt2YXIgZj10aGlzLnN5bWJvbHM7Znx8KHRoaXMuc3ltYm9scz1mPXt9KTt2YXIgaCxkPVtdLHA9dShyKTt0cnl7Zm9yKHAucygpOyEoaD1wLm4oKSkuZG9uZTspe3ZhciBnPWZbaC52YWx1ZV07ZyYmZC5wdXNoLmFwcGx5KGQsYyhnKSl9fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfXZhciB2PW5ldyBiKG4sYSxvKTtmW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoKXtpZihlJiZ0KXRocm93IG5ldyB5KCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBkLHAsZz1bXSx2PTAsbT0oMCxpLmxvZzIpKHIubGVuZ3RoK24pLGI9Zi5kZWNvZGVyLFM9Zi5jb250ZXh0Q2FjaGU7Zm9yKGUmJihkPSQoMSkscD1bXSxtPU1hdGgubWF4KG0sMSkpO2cubGVuZ3RoPG47KXt2Kz1lP28udGFibGVEZWx0YUhlaWdodC5kZWNvZGUoaCk6dyhTLCJJQURIIixiKTtmb3IodmFyIHg9MCxPPTAsQT1lP3AubGVuZ3RoOjA7Oyl7dmFyIEM9ZT9vLnRhYmxlRGVsdGFXaWR0aC5kZWNvZGUoaCk6dyhTLCJJQURXIixiKTtpZihudWxsPT09QylicmVhaztPKz14Kz1DO3ZhciBJPXZvaWQgMDtpZih0KXt2YXIgRT13KFMsIklBQUkiLGIpO2lmKEU+MSlJPVQoZSx0LHgsdiwwLEUsMSxyLmNvbmNhdChnKSxtLDAsMCwxLDAsbyx1LGwsZiwwLGgpO2Vsc2V7dmFyIGo9ayhTLGIsbSksTT13KFMsIklBUkRYIixiKSxfPXcoUywiSUFSRFkiLGIpO0k9UCh4LHYsdSxqPHIubGVuZ3RoP3Jbal06Z1tqLXIubGVuZ3RoXSxNLF8sITEsbCxmKX1nLnB1c2goSSl9ZWxzZSBlP3AucHVzaCh4KTooST1GKCExLHgsdixzLCExLG51bGwsYyxmKSxnLnB1c2goSSkpfWlmKGUmJiF0KXt2YXIgTD1vLnRhYmxlQml0bWFwU2l6ZS5kZWNvZGUoaCk7aC5ieXRlQWxpZ24oKTt2YXIgUj12b2lkIDA7aWYoMD09PUwpUj1xKGgsTyx2KTtlbHNle3ZhciBOPWguZW5kLEQ9aC5wb3NpdGlvbitMO2guZW5kPUQsUj1HKGgsTyx2LCExKSxoLmVuZD1OLGgucG9zaXRpb249RH12YXIgQj1wLmxlbmd0aDtpZihBPT09Qi0xKWcucHVzaChSKTtlbHNle3ZhciBVPXZvaWQgMCxYPXZvaWQgMCxIPTAsej12b2lkIDAsVz12b2lkIDA7Zm9yKFU9QTtVPEI7VSsrKXtmb3Ioej1IK3BbVV0sVz1bXSxYPTA7WDx2O1grKylXLnB1c2goUltYXS5zdWJhcnJheShILHopKTtnLnB1c2goVyksSD16fX19fWZvcih2YXIgVixZLEs9W10sSj1bXSxaPSExLFE9ci5sZW5ndGgrbjtKLmxlbmd0aDxROyl7Zm9yKHZhciBlZT1lP2QuZGVjb2RlKGgpOncoUywiSUFFWCIsYik7ZWUtLTspSi5wdXNoKFopO1o9IVp9Zm9yKFY9MCxZPXIubGVuZ3RoO1Y8WTtWKyspSltWXSYmSy5wdXNoKHJbVl0pO2Zvcih2YXIgdGU9MDt0ZTxuO1YrKyx0ZSsrKUpbVl0mJksucHVzaChnW3RlXSk7cmV0dXJuIEt9KGUuaHVmZm1hbixlLnJlZmluZW1lbnQsZCxlLm51bWJlck9mTmV3U3ltYm9scyxlLm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLHMsZS50ZW1wbGF0ZSxlLmF0LGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LHYsbCl9fSx7a2V5OiJvbkltbWVkaWF0ZVRleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG8scyxsLGY9ZS5pbmZvLGg9dGhpcy5zeW1ib2xzLGQ9W10scD11KHQpO3RyeXtmb3IocC5zKCk7IShsPXAubigpKS5kb25lOyl7dmFyIGc9aFtsLnZhbHVlXTtnJiZkLnB1c2guYXBwbHkoZCxjKGcpKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9dmFyIHY9KDAsaS5sb2cyKShkLmxlbmd0aCk7ZS5odWZmbWFuJiYocz1uZXcgWChyLG4sYSksbz1mdW5jdGlvbihlLHQscixuLGEpe2Zvcih2YXIgaT1bXSxvPTA7bzw9MzQ7bysrKXt2YXIgcz1hLnJlYWRCaXRzKDQpO2kucHVzaChuZXcgTihbbyxzLDAsMF0pKX12YXIgYz1uZXcgQihpLCExKTtpLmxlbmd0aD0wO2Zvcih2YXIgdT0wO3U8bjspe3ZhciBsPWMuZGVjb2RlKGEpO2lmKGw+PTMyKXt2YXIgZj12b2lkIDAsaD12b2lkIDAsZD12b2lkIDA7c3dpdGNoKGwpe2Nhc2UgMzI6aWYoMD09PXUpdGhyb3cgbmV3IHkoIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZSIpO2g9YS5yZWFkQml0cygyKSszLGY9aVt1LTFdLnByZWZpeExlbmd0aDticmVhaztjYXNlIDMzOmg9YS5yZWFkQml0cygzKSszLGY9MDticmVhaztjYXNlIDM0Omg9YS5yZWFkQml0cyg3KSsxMSxmPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKX1mb3IoZD0wO2Q8aDtkKyspaS5wdXNoKG5ldyBOKFt1LGYsMCwwXSkpLHUrK31lbHNlIGkucHVzaChuZXcgTihbdSxsLDAsMF0pKSx1Kyt9YS5ieXRlQWxpZ24oKTt2YXIgcCxnLHYsbT1uZXcgQihpLCExKSxiPTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOnA9JChlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6cD1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRTKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpnPSQoZS5odWZmbWFuRFMrOCk7YnJlYWs7Y2FzZSAzOmc9SChiLHQsciksYisrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHkoImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6dj0kKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6dj1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyB5KCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6bSx0YWJsZUZpcnN0UzpwLHRhYmxlRGVsdGFTOmcsdGFibGVEZWx0YVQ6dn19KGUsdCx0aGlzLmN1c3RvbVRhYmxlcyxkLmxlbmd0aCxzKSk7dmFyIG09bmV3IGIocixuLGEpLHc9VChlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGYud2lkdGgsZi5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGQsdixlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbyxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxtLGUubG9nU3RyaXBTaXplLHMpO3RoaXMuZHJhd0JpdG1hcChmLHcpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25QYXR0ZXJuRGljdGlvbmFyeSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT10aGlzLnBhdHRlcm5zO2l8fCh0aGlzLnBhdHRlcm5zPWk9e30pO3ZhciBvPW5ldyBiKHIsbixhKTtpW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1bXTtlfHwoby5wdXNoKHt4Oi10LHk6MH0pLDA9PT1hJiZvLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSkpO2Zvcih2YXIgcz1GKGUsKG4rMSkqdCxyLGEsITEsbnVsbCxvLGkpLGM9W10sdT0wO3U8PW47dSsrKXtmb3IodmFyIGw9W10sZj10KnUsaD1mK3QsZD0wO2Q8cjtkKyspbC5wdXNoKHNbZF0uc3ViYXJyYXkoZixoKSk7Yy5wdXNoKGwpfXJldHVybiBjfShlLm1tcixlLnBhdHRlcm5XaWR0aCxlLnBhdHRlcm5IZWlnaHQsZS5tYXhQYXR0ZXJuSW5kZXgsZS50ZW1wbGF0ZSxvKX19LHtrZXk6Im9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG89dGhpcy5wYXR0ZXJuc1t0WzBdXSxzPWUuaW5mbyxjPW5ldyBiKHIsbixhKSx1PWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoLGQscCxnKXtpZihzKXRocm93IG5ldyB5KCJza2lwIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZigwIT09Yyl0aHJvdyBuZXcgeSgnb3BlcmF0b3IgIicuY29uY2F0KGMsJyIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb24nKSk7dmFyIHYsbSxiLHc9W107Zm9yKHY9MDt2PGE7disrKXtpZihiPW5ldyBVaW50OEFycmF5KG4pLG8pZm9yKG09MDttPG47bSsrKWJbbV09bzt3LnB1c2goYil9dmFyIGs9dC5sZW5ndGgsUz10WzBdLHg9U1swXS5sZW5ndGgsTz1TLmxlbmd0aCxBPSgwLGkubG9nMikoayksQz1bXTtlfHwoQy5wdXNoKHt4OnI8PTE/MzoyLHk6LTF9KSwwPT09ciYmQy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pKTt2YXIgUCxULEksRSxqLE0sXyxMLFIsTixELEI9W107Zm9yKGUmJihQPW5ldyBYKGcuZGF0YSxnLnN0YXJ0LGcuZW5kKSksdj1BLTE7dj49MDt2LS0pVD1lP0coUCx1LGwsITApOkYoITEsdSxsLHIsITEsbnVsbCxDLGcpLEJbdl09VDtmb3IoST0wO0k8bDtJKyspZm9yKEU9MDtFPHU7RSsrKXtmb3Ioaj0wLE09MCxtPUEtMTttPj0wO20tLSlNfD0oal49QlttXVtJXVtFXSk8PG07aWYoXz10W01dLFI9aCtJKmQtRSpwPj44LChMPWYrSSpwK0UqZD4+OCk+PTAmJkwreDw9biYmUj49MCYmUitPPD1hKWZvcih2PTA7djxPO3YrKylmb3IoRD13W1Irdl0sTj1fW3ZdLG09MDttPHg7bSsrKURbTCttXXw9TlttXTtlbHNle3ZhciBVPXZvaWQgMCwkPXZvaWQgMDtmb3Iodj0wO3Y8Tzt2KyspaWYoISgoJD1SK3YpPDB8fCQ+PWEpKWZvcihEPXdbJF0sTj1fW3ZdLG09MDttPHg7bSsrKShVPUwrbSk+PTAmJlU8biYmKERbVV18PU5bbV0pfX1yZXR1cm4gd30oZS5tbXIsbyxlLnRlbXBsYXRlLHMud2lkdGgscy5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLmVuYWJsZVNraXAsZS5jb21iaW5hdGlvbk9wZXJhdG9yLGUuZ3JpZFdpZHRoLGUuZ3JpZEhlaWdodCxlLmdyaWRPZmZzZXRYLGUuZ3JpZE9mZnNldFksZS5ncmlkVmVjdG9yWCxlLmdyaWRWZWN0b3JZLGMpO3RoaXMuZHJhd0JpdG1hcChzLHUpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJvblRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5jdXN0b21UYWJsZXM7YXx8KHRoaXMuY3VzdG9tVGFibGVzPWE9e30pLGFbZV09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsbz1lW3RdLHM9NDI5NDk2NzI5NSYoMCxpLnJlYWRVaW50MzIpKGUsdCsxKSxjPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShlLHQrNSksdT1uZXcgWChlLHQrOSxyKSxsPTErKG8+PjEmNyksZj0xKyhvPj40JjcpLGg9W10sZD1zO2Rve249dS5yZWFkQml0cyhsKSxhPXUucmVhZEJpdHMoZiksaC5wdXNoKG5ldyBOKFtkLG4sYSwwXSkpLGQrPTE8PGF9d2hpbGUoZDxjKTtyZXR1cm4gbj11LnJlYWRCaXRzKGwpLGgucHVzaChuZXcgTihbcy0xLG4sMzIsMCwibG93ZXIiXSkpLG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW2MsbiwzMiwwXSkpLDEmbyYmKG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW24sMF0pKSksbmV3IEIoaCwhMSl9KHQscixuKX19XSksZX0oKSxOPWQoKGZ1bmN0aW9uIGUodCl7cCh0aGlzLGUpLDI9PT10Lmxlbmd0aD8odGhpcy5pc09PQj0hMCx0aGlzLnJhbmdlTG93PTAsdGhpcy5wcmVmaXhMZW5ndGg9dFswXSx0aGlzLnJhbmdlTGVuZ3RoPTAsdGhpcy5wcmVmaXhDb2RlPXRbMV0sdGhpcy5pc0xvd2VyUmFuZ2U9ITEpOih0aGlzLmlzT09CPSExLHRoaXMucmFuZ2VMb3c9dFswXSx0aGlzLnByZWZpeExlbmd0aD10WzFdLHRoaXMucmFuZ2VMZW5ndGg9dFsyXSx0aGlzLnByZWZpeENvZGU9dFszXSx0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09dFs0XSl9KSksRD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cCh0aGlzLGUpLHRoaXMuY2hpbGRyZW49W10sdD8odGhpcy5pc0xlYWY9ITAsdGhpcy5yYW5nZUxlbmd0aD10LnJhbmdlTGVuZ3RoLHRoaXMucmFuZ2VMb3c9dC5yYW5nZUxvdyx0aGlzLmlzTG93ZXJSYW5nZT10LmlzTG93ZXJSYW5nZSx0aGlzLmlzT09CPXQuaXNPT0IpOnRoaXMuaXNMZWFmPSExfXJldHVybiBkKGUsW3trZXk6ImJ1aWxkVHJlZSIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj10LnByZWZpeENvZGU+PnImMTtpZihyPD0wKXRoaXMuY2hpbGRyZW5bbl09bmV3IGUodCk7ZWxzZXt2YXIgYT10aGlzLmNoaWxkcmVuW25dO2F8fCh0aGlzLmNoaWxkcmVuW25dPWE9bmV3IGUobnVsbCkpLGEuYnVpbGRUcmVlKHQsci0xKX19fSx7a2V5OiJkZWNvZGVOb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmlzTGVhZil7aWYodGhpcy5pc09PQilyZXR1cm4gbnVsbDt2YXIgdD1lLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO3JldHVybiB0aGlzLnJhbmdlTG93Kyh0aGlzLmlzTG93ZXJSYW5nZT8tdDp0KX12YXIgcj10aGlzLmNoaWxkcmVuW2UucmVhZEJpdCgpXTtpZighcil0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTtyZXR1cm4gci5kZWNvZGVOb2RlKGUpfX1dKSxlfSgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHJ8fHRoaXMuYXNzaWduUHJlZml4Q29kZXModCksdGhpcy5yb290Tm9kZT1uZXcgRChudWxsKTtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKyspe3ZhciBpPXRbbl07aS5wcmVmaXhMZW5ndGg+MCYmdGhpcy5yb290Tm9kZS5idWlsZFRyZWUoaSxpLnByZWZpeExlbmd0aC0xKX19cmV0dXJuIGQoZSxbe2tleToiZGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfX0se2tleToiYXNzaWduUHJlZml4Q29kZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPTAsbj0wO248dDtuKyspcj1NYXRoLm1heChyLGVbbl0ucHJlZml4TGVuZ3RoKTtmb3IodmFyIGE9bmV3IFVpbnQzMkFycmF5KHIrMSksaT0wO2k8dDtpKyspYVtlW2ldLnByZWZpeExlbmd0aF0rKzt2YXIgbyxzLGMsdT0xLGw9MDtmb3IoYVswXT0wO3U8PXI7KXtmb3Iobz1sPWwrYVt1LTFdPDwxLHM9MDtzPHQ7KShjPWVbc10pLnByZWZpeExlbmd0aD09PXUmJihjLnByZWZpeENvZGU9byxvKyspLHMrKzt1Kyt9fX1dKSxlfSgpLFU9e307ZnVuY3Rpb24gJChlKXt2YXIgdCxyPVVbZV07aWYocilyZXR1cm4gcjtzd2l0Y2goZSl7Y2FzZSAxOnQ9W1swLDEsNCwwXSxbMTYsMiw4LDJdLFsyNzIsMywxNiw2XSxbNjU4MDgsMywzMiw3XV07YnJlYWs7Y2FzZSAyOnQ9W1swLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWzc1LDYsMzIsNjJdLFs2LDYzXV07YnJlYWs7Y2FzZSAzOnQ9W1stMjU2LDgsOCwyNTRdLFswLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWy0yNTcsOCwzMiwyNTUsImxvd2VyIl0sWzc1LDcsMzIsMTI2XSxbNiw2Ml1dO2JyZWFrO2Nhc2UgNDp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFs3Niw1LDMyLDMxXV07YnJlYWs7Y2FzZSA1OnQ9W1stMjU1LDcsOCwxMjZdLFsxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWy0yNTYsNywzMiwxMjcsImxvd2VyIl0sWzc2LDYsMzIsNjJdXTticmVhaztjYXNlIDY6dD1bWy0yMDQ4LDUsMTAsMjhdLFstMTAyNCw0LDksOF0sWy01MTIsNCw4LDldLFstMjU2LDQsNywxMF0sWy0xMjgsNSw2LDI5XSxbLTY0LDUsNSwzMF0sWy0zMiw0LDUsMTFdLFswLDIsNywwXSxbMTI4LDMsNywyXSxbMjU2LDMsOCwzXSxbNTEyLDQsOSwxMl0sWzEwMjQsNCwxMCwxM10sWy0yMDQ5LDYsMzIsNjIsImxvd2VyIl0sWzIwNDgsNiwzMiw2M11dO2JyZWFrO2Nhc2UgNzp0PVtbLTEwMjQsNCw5LDhdLFstNTEyLDMsOCwwXSxbLTI1Niw0LDcsOV0sWy0xMjgsNSw2LDI2XSxbLTY0LDUsNSwyN10sWy0zMiw0LDUsMTBdLFswLDQsNSwxMV0sWzMyLDUsNSwyOF0sWzY0LDUsNiwyOV0sWzEyOCw0LDcsMTJdLFsyNTYsMyw4LDFdLFs1MTIsMyw5LDJdLFsxMDI0LDMsMTAsM10sWy0xMDI1LDUsMzIsMzAsImxvd2VyIl0sWzIwNDgsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgODp0PVtbLTE1LDgsMywyNTJdLFstNyw5LDEsNTA4XSxbLTUsOCwxLDI1M10sWy0zLDksMCw1MDldLFstMiw3LDAsMTI0XSxbLTEsNCwwLDEwXSxbMCwyLDEsMF0sWzIsNSwwLDI2XSxbMyw2LDAsNThdLFs0LDMsNCw0XSxbMjAsNiwxLDU5XSxbMjIsNCw0LDExXSxbMzgsNCw1LDEyXSxbNzAsNSw2LDI3XSxbMTM0LDUsNywyOF0sWzI2Miw2LDcsNjBdLFszOTAsNyw4LDEyNV0sWzY0Niw2LDEwLDYxXSxbLTE2LDksMzIsNTEwLCJsb3dlciJdLFsxNjcwLDksMzIsNTExXSxbMiwxXV07YnJlYWs7Y2FzZSA5OnQ9W1stMzEsOCw0LDI1Ml0sWy0xNSw5LDIsNTA4XSxbLTExLDgsMiwyNTNdLFstNyw5LDEsNTA5XSxbLTUsNywxLDEyNF0sWy0zLDQsMSwxMF0sWy0xLDMsMSwyXSxbMSwzLDEsM10sWzMsNSwxLDI2XSxbNSw2LDEsNThdLFs3LDMsNSw0XSxbMzksNiwyLDU5XSxbNDMsNCw1LDExXSxbNzUsNCw2LDEyXSxbMTM5LDUsNywyN10sWzI2Nyw1LDgsMjhdLFs1MjMsNiw4LDYwXSxbNzc5LDcsOSwxMjVdLFsxMjkxLDYsMTEsNjFdLFstMzIsOSwzMiw1MTAsImxvd2VyIl0sWzMzMzksOSwzMiw1MTFdLFsyLDBdXTticmVhaztjYXNlIDEwOnQ9W1stMjEsNyw0LDEyMl0sWy01LDgsMCwyNTJdLFstNCw3LDAsMTIzXSxbLTMsNSwwLDI0XSxbLTIsMiwyLDBdLFsyLDUsMCwyNV0sWzMsNiwwLDU0XSxbNCw3LDAsMTI0XSxbNSw4LDAsMjUzXSxbNiwyLDYsMV0sWzcwLDUsNSwyNl0sWzEwMiw2LDUsNTVdLFsxMzQsNiw2LDU2XSxbMTk4LDYsNyw1N10sWzMyNiw2LDgsNThdLFs1ODIsNiw5LDU5XSxbMTA5NCw2LDEwLDYwXSxbMjExOCw3LDExLDEyNV0sWy0yMiw4LDMyLDI1NCwibG93ZXIiXSxbNDE2Niw4LDMyLDI1NV0sWzIsMl1dO2JyZWFrO2Nhc2UgMTE6dD1bWzEsMSwwLDBdLFsyLDIsMSwyXSxbNCw0LDAsMTJdLFs1LDQsMSwxM10sWzcsNSwxLDI4XSxbOSw1LDIsMjldLFsxMyw2LDIsNjBdLFsxNyw3LDIsMTIyXSxbMjEsNywzLDEyM10sWzI5LDcsNCwxMjRdLFs0NSw3LDUsMTI1XSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTI6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDEsNl0sWzUsNSwwLDI4XSxbNiw1LDEsMjldLFs4LDYsMSw2MF0sWzEwLDcsMCwxMjJdLFsxMSw3LDEsMTIzXSxbMTMsNywyLDEyNF0sWzE3LDcsMywxMjVdLFsyNSw3LDQsMTI2XSxbNDEsOCw1LDI1NF0sWzczLDgsMzIsMjU1XV07YnJlYWs7Y2FzZSAxMzp0PVtbMSwxLDAsMF0sWzIsMywwLDRdLFszLDQsMCwxMl0sWzQsNSwwLDI4XSxbNSw0LDEsMTNdLFs3LDMsMyw1XSxbMTUsNiwxLDU4XSxbMTcsNiwyLDU5XSxbMjEsNiwzLDYwXSxbMjksNiw0LDYxXSxbNDUsNiw1LDYyXSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTQ6dD1bWy0yLDMsMCw0XSxbLTEsMywwLDVdLFswLDEsMCwwXSxbMSwzLDAsNl0sWzIsMywwLDddXTticmVhaztjYXNlIDE1OnQ9W1stMjQsNyw0LDEyNF0sWy04LDYsMiw2MF0sWy00LDUsMSwyOF0sWy0yLDQsMCwxMl0sWy0xLDMsMCw0XSxbMCwxLDAsMF0sWzEsMywwLDVdLFsyLDQsMCwxM10sWzMsNSwxLDI5XSxbNSw2LDIsNjFdLFs5LDcsNCwxMjVdLFstMjUsNywzMiwxMjYsImxvd2VyIl0sWzI1LDcsMzIsMTI3XV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgic3RhbmRhcmQgdGFibGUgQi4iLmNvbmNhdChlLCIgZG9lcyBub3QgZXhpc3QiKSl9Zm9yKHZhciBuPTAsYT10Lmxlbmd0aDtuPGE7bisrKXRbbl09bmV3IE4odFtuXSk7cmV0dXJuIHI9bmV3IEIodCwhMCksVVtlXT1yLHJ9dmFyIFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtwKHRoaXMsZSksdGhpcy5kYXRhPXQsdGhpcy5zdGFydD1yLHRoaXMuZW5kPW4sdGhpcy5wb3NpdGlvbj1yLHRoaXMuc2hpZnQ9LTEsdGhpcy5jdXJyZW50Qnl0ZT0wfXJldHVybiBkKGUsW3trZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgeSgiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdLHRoaXMuc2hpZnQ9N312YXIgZT10aGlzLmN1cnJlbnRCeXRlPj50aGlzLnNoaWZ0JjE7cmV0dXJuIHRoaXMuc2hpZnQtLSxlfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9MDtmb3IodD1lLTE7dD49MDt0LS0pcnw9dGhpcy5yZWFkQml0KCk8PHQ7cmV0dXJuIHJ9fSx7a2V5OiJieXRlQWxpZ24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zaGlmdD0tMX19LHtrZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24+PXRoaXMuZW5kPy0xOnRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdfX1dKSxlfSgpO2Z1bmN0aW9uIEgoZSx0LHIpe2Zvcih2YXIgbj0wLGE9MCxpPXQubGVuZ3RoO2E8aTthKyspe3ZhciBvPXJbdFthXV07aWYobyl7aWYoZT09PW4pcmV0dXJuIG87bisrfX10aHJvdyBuZXcgeSgiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIHEoZSx0LHIpe2Zvcih2YXIgbj1bXSxhPTA7YTxyO2ErKyl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodCk7bi5wdXNoKGkpO2Zvcih2YXIgbz0wO288dDtvKyspaVtvXT1lLnJlYWRCaXQoKTtlLmJ5dGVBbGlnbigpfXJldHVybiBufWZ1bmN0aW9uIEcoZSx0LHIsbil7Zm9yKHZhciBhLGk9e0s6LTEsQ29sdW1uczp0LFJvd3M6cixCbGFja0lzMTohMCxFbmRPZkJsb2NrOm59LG89bmV3IHMuQ0NJVFRGYXhEZWNvZGVyKGUsaSksYz1bXSx1PSExLGw9MDtsPHI7bCsrKXt2YXIgZj1uZXcgVWludDhBcnJheSh0KTtjLnB1c2goZik7Zm9yKHZhciBoPS0xLGQ9MDtkPHQ7ZCsrKWg8MCYmKC0xPT09KGE9by5yZWFkTmV4dENoYXIoKSkmJihhPTAsdT0hMCksaD03KSxmW2RdPWE+PmgmMSxoLS19aWYobiYmIXUpZm9yKHZhciBwPTA7cDw1JiYtMSE9PW8ucmVhZE5leHRDaGFyKCk7cCsrKTtyZXR1cm4gY312YXIgej1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToicGFyc2VDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFIscj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7dmFyIGE9ZVtyXTtMKEUoe30sYS5kYXRhLGEuc3RhcnQsYS5lbmQpLHQpfXJldHVybiB0LmJ1ZmZlcn0oZSl9fSx7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQ6IEpiaWcySW1hZ2UucGFyc2UiKX19XSksZX0oKTt0LkpiaWcySW1hZ2U9en0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBhPW4uY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1yKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bcml0aG1ldGljRGVjb2Rlcj12b2lkIDA7dmFyIGE9W3txZToyMjAxNyxubXBzOjEsbmxwczoxLHN3aXRjaEZsYWc6MX0se3FlOjEzMzEzLG5tcHM6MixubHBzOjYsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjMsbmxwczo5LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczo0LG5scHM6MTIsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjUsbmxwczoyOSxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozOCxubHBzOjMzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NyxubHBzOjYsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczo4LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTg0MzMsbm1wczo5LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxMCxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MTEsbmxwczoxNyxzd2l0Y2hGbGFnOjB9LHtxZTo5MjE3LG5tcHM6MTIsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZTo3MTY5LG5tcHM6MTMsbmxwczoyMCxzd2l0Y2hGbGFnOjB9LHtxZTo1NjMzLG5tcHM6MjksbmxwczoyMSxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjE1LG5scHM6MTQsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczoxNixubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjIwNzM3LG5tcHM6MTcsbmxwczoxNSxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjE4LG5scHM6MTYsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxOSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjEzMzEzLG5tcHM6MjAsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZToxMjI4OSxubXBzOjIxLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6MTAyNDEsbm1wczoyMixubHBzOjE5LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoyMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjg3MDUsbm1wczoyNCxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoyNSxubHBzOjIyLHN3aXRjaEZsYWc6MH0se3FlOjYxNDUsbm1wczoyNixubHBzOjIzLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyNyxubHBzOjI0LHN3aXRjaEZsYWc6MH0se3FlOjUxMjEsbm1wczoyOCxubHBzOjI1LHN3aXRjaEZsYWc6MH0se3FlOjQ2MDksbm1wczoyOSxubHBzOjI2LHN3aXRjaEZsYWc6MH0se3FlOjQzNTMsbm1wczozMCxubHBzOjI3LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczozMSxubHBzOjI4LHN3aXRjaEZsYWc6MH0se3FlOjI0OTcsbm1wczozMixubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjIyMDksbm1wczozMyxubHBzOjMwLHN3aXRjaEZsYWc6MH0se3FlOjEzMTMsbm1wczozNCxubHBzOjMxLHN3aXRjaEZsYWc6MH0se3FlOjEwODksbm1wczozNSxubHBzOjMyLHN3aXRjaEZsYWc6MH0se3FlOjY3MyxubXBzOjM2LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6NTQ1LG5tcHM6MzcsbmxwczozNCxzd2l0Y2hGbGFnOjB9LHtxZTozMjEsbm1wczozOCxubHBzOjM1LHN3aXRjaEZsYWc6MH0se3FlOjI3MyxubXBzOjM5LG5scHM6MzYsc3dpdGNoRmxhZzowfSx7cWU6MTMzLG5tcHM6NDAsbmxwczozNyxzd2l0Y2hGbGFnOjB9LHtxZTo3MyxubXBzOjQxLG5scHM6Mzgsc3dpdGNoRmxhZzowfSx7cWU6Mzcsbm1wczo0MixubHBzOjM5LHN3aXRjaEZsYWc6MH0se3FlOjIxLG5tcHM6NDMsbmxwczo0MCxzd2l0Y2hGbGFnOjB9LHtxZTo5LG5tcHM6NDQsbmxwczo0MSxzd2l0Y2hGbGFnOjB9LHtxZTo1LG5tcHM6NDUsbmxwczo0Mixzd2l0Y2hGbGFnOjB9LHtxZToxLG5tcHM6NDUsbmxwczo0Myxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjQ2LG5scHM6NDYsc3dpdGNoRmxhZzowfV0saT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4peyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuYnA9cix0aGlzLmRhdGFFbmQ9bix0aGlzLmNoaWdoPXRbcl0sdGhpcy5jbG93PTAsdGhpcy5ieXRlSW4oKSx0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDcmNjU1MzV8dGhpcy5jbG93Pj45JjEyNyx0aGlzLmNsb3c9dGhpcy5jbG93PDw3JjY1NTM1LHRoaXMuY3QtPTcsdGhpcy5hPTMyNzY4fXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiYnl0ZUluIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YSx0PXRoaXMuYnA7MjU1PT09ZVt0XT9lW3QrMV0+MTQzPyh0aGlzLmNsb3crPTY1MjgwLHRoaXMuY3Q9OCk6KHQrKyx0aGlzLmNsb3crPWVbdF08PDksdGhpcy5jdD03LHRoaXMuYnA9dCk6KHQrKyx0aGlzLmNsb3crPXQ8dGhpcy5kYXRhRW5kP2VbdF08PDg6NjUyODAsdGhpcy5jdD04LHRoaXMuYnA9dCksdGhpcy5jbG93PjY1NTM1JiYodGhpcy5jaGlnaCs9dGhpcy5jbG93Pj4xNix0aGlzLmNsb3cmPTY1NTM1KX19LHtrZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lW3RdPj4xLGk9MSZlW3RdLG89YVtuXSxzPW8ucWUsYz10aGlzLmEtcztpZih0aGlzLmNoaWdoPHMpYzxzPyhjPXMscj1pLG49by5ubXBzKTooYz1zLHI9MV5pLDE9PT1vLnN3aXRjaEZsYWcmJihpPXIpLG49by5ubHBzKTtlbHNle2lmKHRoaXMuY2hpZ2gtPXMsMCE9KDMyNzY4JmMpKXJldHVybiB0aGlzLmE9YyxpO2M8cz8ocj0xXmksMT09PW8uc3dpdGNoRmxhZyYmKGk9ciksbj1vLm5scHMpOihyPWksbj1vLm5tcHMpfWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpLGM8PD0xLHRoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjEsdGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNSx0aGlzLmN0LS19d2hpbGUoMD09KDMyNzY4JmMpKTtyZXR1cm4gdGhpcy5hPWMsZVt0XT1uPDwxfGkscn19XSkmJm4odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkFyaXRobWV0aWNEZWNvZGVyPWl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTQ4KSxpPXIoMTM0KSxvPXIoMTU3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxsKGUpfXZhciBmPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9KGQsZSk7dmFyIHQscixhLGYsaD0oYT1kLGY9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1sKGEpO2lmKGYpe3ZhciByPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGQoZSx0LHIpe3ZhciBuLGE7Zm9yKGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZCk7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDI1NT09PWEpe2Uuc2tpcCgtMSk7YnJlYWt9cmV0dXJuKG49aC5jYWxsKHRoaXMsdCkpLnN0cmVhbT1lLG4uZGljdD1lLmRpY3Qsbi5tYXliZUxlbmd0aD10LG4ucGFyYW1zPXIsbn1yZXR1cm4gdD1kLChyPVt7a2V5OiJieXRlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9fSx7a2V5OiJlbnN1cmVCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5lb2Ype3ZhciBlPXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0sdD10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLmZvcmNlUkdCJiZBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9dGhpcy5kaWN0LmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpfHw4LG49dC5sZW5ndGgsYT1uZXcgSW50MzJBcnJheShuKSxzPSExLGM9KDE8PHIpLTEsdT0wO3U8bjt1Kz0yKWFbdV09MjU2Kih0W3UrMV0tdFt1XSl8MCxhW3UrMV09dFt1XSpjfDAsMjU2PT09YVt1XSYmMD09PWFbdSsxXXx8KHM9ITApO3MmJihlLmRlY29kZVRyYW5zZm9ybT1hKX1pZih0aGlzLnBhcmFtcyBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGw9dGhpcy5wYXJhbXMuZ2V0KCJDb2xvclRyYW5zZm9ybSIpO051bWJlci5pc0ludGVnZXIobCkmJihlLmNvbG9yVHJhbnNmb3JtPWwpfXZhciBmPW5ldyBvLkpwZWdJbWFnZShlKTtmLnBhcnNlKHRoaXMuYnl0ZXMpO3ZhciBoPWYuZ2V0RGF0YSh7d2lkdGg6dGhpcy5kcmF3V2lkdGgsaGVpZ2h0OnRoaXMuZHJhd0hlaWdodCxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9aCx0aGlzLmJ1ZmZlckxlbmd0aD1oLmxlbmd0aCx0aGlzLmVvZj0hMH19fV0pJiZjKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGR9KGEuRGVjb2RlU3RyZWFtKTt0LkpwZWdTdHJlYW09Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM1KTtmdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP28oZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHMoZSl9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBmKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmgoZSx0KX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxoKGUsdCl9ZnVuY3Rpb24gZChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX12YXIgZz1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsIkpQRUcgZXJyb3I6ICIuY29uY2F0KGUpLCJKcGVnRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSx2PWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1kKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gbCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIkROTE1hcmtlckVycm9yIikpLnNjYW5MaW5lcz1uLGF9cmV0dXJuIHUocil9KG4uQmFzZUV4Y2VwdGlvbikseT1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRU9JTWFya2VyRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSxtPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksYj00MDE3LHc9Nzk5LGs9MzQwNixTPTIyNzYseD0xNTY3LE89Mzc4NCxBPTU3OTMsQz0yODk2O2Z1bmN0aW9uIEYoZSx0KXtmb3IodmFyIHIsbixhPTAsaT0xNjtpPjAmJiFlW2ktMV07KWktLTt2YXIgbyxzPVt7Y2hpbGRyZW46W10saW5kZXg6MH1dLGM9c1swXTtmb3Iocj0wO3I8aTtyKyspe2ZvcihuPTA7bjxlW3JdO24rKyl7Zm9yKChjPXMucG9wKCkpLmNoaWxkcmVuW2MuaW5kZXhdPXRbYV07Yy5pbmRleD4wOyljPXMucG9wKCk7Zm9yKGMuaW5kZXgrKyxzLnB1c2goYyk7cy5sZW5ndGg8PXI7KXMucHVzaChvPXtjaGlsZHJlbjpbXSxpbmRleDowfSksYy5jaGlsZHJlbltjLmluZGV4XT1vLmNoaWxkcmVuLGM9bzthKyt9cisxPGkmJihzLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pLGMuY2hpbGRyZW5bYy5pbmRleF09by5jaGlsZHJlbixjPW8pfXJldHVybiBzWzBdLmNoaWxkcmVufWZ1bmN0aW9uIFAoZSx0LHIpe3JldHVybiA2NCooKGUuYmxvY2tzUGVyTGluZSsxKSp0K3IpfWZ1bmN0aW9uIFQoZSx0LHIsaSxvLGMsdSxsLGYpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+OSYmdm9pZCAwIT09YXJndW1lbnRzWzldJiZhcmd1bWVudHNbOV0sZD1yLm1jdXNQZXJMaW5lLHA9ci5wcm9ncmVzc2l2ZSxiPXQsdz0wLGs9MDtmdW5jdGlvbiBTKCl7aWYoaz4wKXJldHVybiBrLS0sdz4+ayYxO2lmKDI1NT09PSh3PWVbdCsrXSkpe3ZhciBuPWVbdCsrXTtpZihuKXtpZigyMjA9PT1uJiZoKXt0Kz0yO3ZhciBpPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZih0Kz0yLGk+MCYmaSE9PXIuc2NhbkxpbmVzKXRocm93IG5ldyB2KCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixpKX1lbHNlIGlmKDIxNz09PW4pe2lmKGgpe3ZhciBvPUkqKDg9PT1yLnByZWNpc2lvbj84OjApO2lmKG8+MCYmTWF0aC5yb3VuZChyLnNjYW5MaW5lcy9vKT49NSl0aHJvdyBuZXcgdigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLG8pfXRocm93IG5ldyB5KCJGb3VuZCBFT0kgbWFya2VyICgweEZGRDkpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIil9dGhyb3cgbmV3IGcoInVuZXhwZWN0ZWQgbWFya2VyICIuY29uY2F0KCh3PDw4fG4pLnRvU3RyaW5nKDE2KSkpfX1yZXR1cm4gaz03LHc+Pj43fWZ1bmN0aW9uIHgoZSl7Zm9yKHZhciB0PWU7Oyl7c3dpdGNoKHModD10W1MoKV0pKXtjYXNlIm51bWJlciI6cmV0dXJuIHQ7Y2FzZSJvYmplY3QiOmNvbnRpbnVlfXRocm93IG5ldyBnKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9MDtlPjA7KXQ9dDw8MXxTKCksZS0tO3JldHVybiB0fWZ1bmN0aW9uIEEoZSl7aWYoMT09PWUpcmV0dXJuIDE9PT1TKCk/MTotMTt2YXIgdD1PKGUpO3JldHVybiB0Pj0xPDxlLTE/dDp0KygtMTw8ZSkrMX12YXIgQyxGPTAsVD0wLEk9MDtmdW5jdGlvbiBFKGUsdCxyLG4sYSl7dmFyIGk9ciVkO0k9KHIvZHwwKSplLnYrbjt2YXIgbz1pKmUuaCthO3QoZSxQKGUsSSxvKSl9ZnVuY3Rpb24gTShlLHQscil7ST1yL2UuYmxvY2tzUGVyTGluZXwwO3ZhciBuPXIlZS5ibG9ja3NQZXJMaW5lO3QoZSxQKGUsSSxuKSl9dmFyIF8sTCxSLE4sRCxCLFU9aS5sZW5ndGg7Qj1wPzA9PT1jPzA9PT1sP2Z1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTw8ZjtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW59OmZ1bmN0aW9uKGUsdCl7ZS5ibG9ja0RhdGFbdF18PVMoKTw8Zn06MD09PWw/ZnVuY3Rpb24oZSx0KXtpZihGPjApRi0tO2Vsc2UgZm9yKHZhciByPWMsbj11O3I8PW47KXt2YXIgYT14KGUuaHVmZm1hblRhYmxlQUMpLGk9MTUmYSxvPWE+PjQ7aWYoMCE9PWkpe3ZhciBzPW1bcis9b107ZS5ibG9ja0RhdGFbdCtzXT1BKGkpKigxPDxmKSxyKyt9ZWxzZXtpZihvPDE1KXtGPU8obykrKDE8PG8pLTE7YnJlYWt9cis9MTZ9fX06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixhPWMsaT11LG89MDthPD1pOyl7dmFyIHM9dCttW2FdLGw9ZS5ibG9ja0RhdGFbc108MD8tMToxO3N3aXRjaChUKXtjYXNlIDA6aWYobz0obj14KGUuaHVmZm1hblRhYmxlQUMpKT4+NCwwPT0ocj0xNSZuKSlvPDE1PyhGPU8obykrKDE8PG8pLFQ9NCk6KG89MTYsVD0xKTtlbHNle2lmKDEhPT1yKXRocm93IG5ldyBnKCJpbnZhbGlkIEFDbiBlbmNvZGluZyIpO0M9QShyKSxUPW8/MjozfWNvbnRpbnVlO2Nhc2UgMTpjYXNlIDI6ZS5ibG9ja0RhdGFbc10/ZS5ibG9ja0RhdGFbc10rPWwqKFMoKTw8Zik6MD09LS1vJiYoVD0yPT09VD8zOjApO2JyZWFrO2Nhc2UgMzplLmJsb2NrRGF0YVtzXT9lLmJsb2NrRGF0YVtzXSs9bCooUygpPDxmKTooZS5ibG9ja0RhdGFbc109Qzw8ZixUPTApO2JyZWFrO2Nhc2UgNDplLmJsb2NrRGF0YVtzXSYmKGUuYmxvY2tEYXRhW3NdKz1sKihTKCk8PGYpKX1hKyt9ND09PVQmJjA9PS0tRiYmKFQ9MCl9OmZ1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW47Zm9yKHZhciBhPTE7YTw2NDspe3ZhciBpPXgoZS5odWZmbWFuVGFibGVBQyksbz0xNSZpLHM9aT4+NDtpZigwIT09byl7dmFyIGM9bVthKz1zXTtlLmJsb2NrRGF0YVt0K2NdPUEobyksYSsrfWVsc2V7aWYoczwxNSlicmVhazthKz0xNn19fTt2YXIgJCxYLEgscSxHPTA7Zm9yKFg9MT09PVU/aVswXS5ibG9ja3NQZXJMaW5lKmlbMF0uYmxvY2tzUGVyQ29sdW1uOmQqci5tY3VzUGVyQ29sdW1uO0c8PVg7KXt2YXIgej1vP01hdGgubWluKFgtRyxvKTpYO2lmKHo+MCl7Zm9yKEw9MDtMPFU7TCsrKWlbTF0ucHJlZD0wO2lmKEY9MCwxPT09VSlmb3IoXz1pWzBdLEQ9MDtEPHo7RCsrKU0oXyxCLEcpLEcrKztlbHNlIGZvcihEPTA7RDx6O0QrKyl7Zm9yKEw9MDtMPFU7TCsrKWZvcihIPShfPWlbTF0pLmgscT1fLnYsUj0wO1I8cTtSKyspZm9yKE49MDtOPEg7TisrKUUoXyxCLEcsUixOKTtHKyt9fWlmKGs9MCwhKCQ9aihlLHQpKSlicmVhaztpZigkLmludmFsaWQpe3ZhciBXPXo+MD8idW5leHBlY3RlZCI6ImV4Y2Vzc2l2ZSI7KDAsbi53YXJuKSgiZGVjb2RlU2NhbiAtICIuY29uY2F0KFcsIiBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIpLmNvbmNhdCgkLmludmFsaWQpKSx0PSQub2Zmc2V0fWlmKCEoJC5tYXJrZXI+PTY1NDg4JiYkLm1hcmtlcjw9NjU0OTUpKWJyZWFrO3QrPTJ9cmV0dXJuIHQtYn1mdW5jdGlvbiBJKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sRixQLFQ9ZS5xdWFudGl6YXRpb25UYWJsZSxJPWUuYmxvY2tEYXRhO2lmKCFUKXRocm93IG5ldyBnKCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4iKTtmb3IodmFyIEU9MDtFPDY0O0UrPTgpZj1JW3QrRV0saD1JW3QrRSsxXSxkPUlbdCtFKzJdLHA9SVt0K0UrM10sdj1JW3QrRSs0XSx5PUlbdCtFKzVdLG09SVt0K0UrNl0sRj1JW3QrRSs3XSxmKj1UW0VdLDAhPShofGR8cHx2fHl8bXxGKT8oaCo9VFtFKzFdLGQqPVRbRSsyXSxwKj1UW0UrM10sdio9VFtFKzRdLHkqPVRbRSs1XSxtKj1UW0UrNl0sRio9VFtFKzddLGE9KG49KG49QSpmKzEyOD4+OCkrKGE9QSp2KzEyOD4+OCkrMT4+MSktYSxQPShpPWQpKk8rKG89bSkqeCsxMjg+PjgsaT1pKngtbypPKzEyOD4+OCx1PShzPShzPUMqKGgtRikrMTI4Pj44KSsodT15PDw0KSsxPj4xKS11LGM9KGw9KGw9QyooaCtGKSsxMjg+PjgpKyhjPXA8PDQpKzE+PjEpLWMsbz0obj1uKyhvPVApKzE+PjEpLW8saT0oYT1hK2krMT4+MSktaSxQPXMqUytsKmsrMjA0OD4+MTIscz1zKmstbCpTKzIwNDg+PjEyLGw9UCxQPWMqdyt1KmIrMjA0OD4+MTIsYz1jKmItdSp3KzIwNDg+PjEyLHU9UCxyW0VdPW4rbCxyW0UrN109bi1sLHJbRSsxXT1hK3UscltFKzZdPWEtdSxyW0UrMl09aStjLHJbRSs1XT1pLWMscltFKzNdPW8rcyxyW0UrNF09by1zKTooUD1BKmYrNTEyPj4xMCxyW0VdPVAscltFKzFdPVAscltFKzJdPVAscltFKzNdPVAscltFKzRdPVAscltFKzVdPVAscltFKzZdPVAscltFKzddPVApO2Zvcih2YXIgaj0wO2o8ODsrK2opZj1yW2pdLDAhPSgoaD1yW2orOF0pfChkPXJbaisxNl0pfChwPXJbaisyNF0pfCh2PXJbaiszMl0pfCh5PXJbais0MF0pfChtPXJbais0OF0pfChGPXJbais1Nl0pKT8oYT0obj00MTEyKygobj1BKmYrMjA0OD4+MTIpKyhhPUEqdisyMDQ4Pj4xMikrMT4+MSkpLWEsUD0oaT1kKSpPKyhvPW0pKngrMjA0OD4+MTIsaT1pKngtbypPKzIwNDg+PjEyLG89UCx1PShzPShzPUMqKGgtRikrMjA0OD4+MTIpKyh1PXkpKzE+PjEpLXUsYz0obD0obD1DKihoK0YpKzIwNDg+PjEyKSsoYz1wKSsxPj4xKS1jLFA9cypTK2wqaysyMDQ4Pj4xMixzPXMqay1sKlMrMjA0OD4+MTIsbD1QLFA9Yyp3K3UqYisyMDQ4Pj4xMixjPWMqYi11KncrMjA0OD4+MTIsKGY9KG49bitvKzE+PjEpK2wpPDE2P2Y9MDpmPj00MDgwP2Y9MjU1OmY+Pj00LChoPShhPWEraSsxPj4xKSsodT1QKSk8MTY/aD0wOmg+PTQwODA/aD0yNTU6aD4+PTQsKGQ9KGk9YS1pKStjKTwxNj9kPTA6ZD49NDA4MD9kPTI1NTpkPj49NCwocD0obz1uLW8pK3MpPDE2P3A9MDpwPj00MDgwP3A9MjU1OnA+Pj00LCh2PW8tcyk8MTY/dj0wOnY+PTQwODA/dj0yNTU6dj4+PTQsKHk9aS1jKTwxNj95PTA6eT49NDA4MD95PTI1NTp5Pj49NCwobT1hLXUpPDE2P209MDptPj00MDgwP209MjU1Om0+Pj00LChGPW4tbCk8MTY/Rj0wOkY+PTQwODA/Rj0yNTU6Rj4+PTQsSVt0K2pdPWYsSVt0K2orOF09aCxJW3QraisxNl09ZCxJW3QraisyNF09cCxJW3QraiszMl09dixJW3Qrais0MF09eSxJW3Qrais0OF09bSxJW3Qrais1Nl09Rik6KFA9KFA9QSpmKzgxOTI+PjE0KTwtMjA0MD8wOlA+PTIwMjQ/MjU1OlArMjA1Nj4+NCxJW3Qral09UCxJW3Qrais4XT1QLElbdCtqKzE2XT1QLElbdCtqKzI0XT1QLElbdCtqKzMyXT1QLElbdCtqKzQwXT1QLElbdCtqKzQ4XT1QLElbdCtqKzU2XT1QKX1mdW5jdGlvbiBFKGUsdCl7Zm9yKHZhciByPXQuYmxvY2tzUGVyTGluZSxuPXQuYmxvY2tzUGVyQ29sdW1uLGE9bmV3IEludDE2QXJyYXkoNjQpLGk9MDtpPG47aSsrKWZvcih2YXIgbz0wO288cjtvKyspSSh0LFAodCxpLG8pLGEpO3JldHVybiB0LmJsb2NrRGF0YX1mdW5jdGlvbiBqKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnQsbj1lLmxlbmd0aC0xLGk9cjx0P3I6dDtpZih0Pj1uKXJldHVybiBudWxsO3ZhciBvPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZihvPj02NTQ3MiYmbzw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6byxvZmZzZXQ6dH07Zm9yKHZhciBzPSgwLGEucmVhZFVpbnQxNikoZSxpKTshKHM+PTY1NDcyJiZzPD02NTUzNCk7KXtpZigrK2k+PW4pcmV0dXJuIG51bGw7cz0oMCxhLnJlYWRVaW50MTYpKGUsaSl9cmV0dXJue2ludmFsaWQ6by50b1N0cmluZygxNiksbWFya2VyOnMsb2Zmc2V0Oml9fXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXQuZGVjb2RlVHJhbnNmb3JtLG49dm9pZCAwPT09cj9udWxsOnIsYT10LmNvbG9yVHJhbnNmb3JtLGk9dm9pZCAwPT09YT8tMTphO2wodGhpcyxlKSx0aGlzLl9kZWNvZGVUcmFuc2Zvcm09bix0aGlzLl9jb2xvclRyYW5zZm9ybT1pfXJldHVybiB1KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5kbmxTY2FuTGluZXMscj12b2lkIDA9PT10P251bGw6dDtmdW5jdGlvbiBvKCl7dmFyIHQ9KDAsYS5yZWFkVWludDE2KShlLGwpLHI9KGwrPTIpK3QtMixpPWooZSxyLGwpO2kmJmkuaW52YWxpZCYmKCgwLG4ud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIitpLmludmFsaWQpLHI9aS5vZmZzZXQpO3ZhciBvPWUuc3ViYXJyYXkobCxyKTtyZXR1cm4gbCs9by5sZW5ndGgsb31mdW5jdGlvbiBzKGUpe3ZhciB0LHI9TWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOC9lLm1heEgpLG49TWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgvZS5tYXhWKSxhPWkoZS5jb21wb25lbnRzKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBvPXQudmFsdWUscz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqby5oL2UubWF4SCksYz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKm8udi9lLm1heFYpLHU9cipvLmgsbD1uKm8udio2NCoodSsxKTtvLmJsb2NrRGF0YT1uZXcgSW50MTZBcnJheShsKSxvLmJsb2Nrc1BlckxpbmU9cyxvLmJsb2Nrc1BlckNvbHVtbj1jfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLm1jdXNQZXJMaW5lPXIsZS5tY3VzUGVyQ29sdW1uPW59dmFyIGMsdSxsPTAsZj1udWxsLGg9bnVsbCxkPTAscD1bXSxiPVtdLHc9W10saz0oMCxhLnJlYWRVaW50MTYpKGUsbCk7aWYobCs9Miw2NTQ5NiE9PWspdGhyb3cgbmV3IGcoIlNPSSBub3QgZm91bmQiKTtrPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yO2U6Zm9yKDs2NTQ5NyE9PWs7KXt2YXIgUz12b2lkIDAseD12b2lkIDAsTz12b2lkIDA7c3dpdGNoKGspe2Nhc2UgNjU1MDQ6Y2FzZSA2NTUwNTpjYXNlIDY1NTA2OmNhc2UgNjU1MDc6Y2FzZSA2NTUwODpjYXNlIDY1NTA5OmNhc2UgNjU1MTA6Y2FzZSA2NTUxMTpjYXNlIDY1NTEyOmNhc2UgNjU1MTM6Y2FzZSA2NTUxNDpjYXNlIDY1NTE1OmNhc2UgNjU1MTY6Y2FzZSA2NTUxNzpjYXNlIDY1NTE4OmNhc2UgNjU1MTk6Y2FzZSA2NTUzNDp2YXIgQT1vKCk7NjU1MDQ9PT1rJiY3ND09PUFbMF0mJjcwPT09QVsxXSYmNzM9PT1BWzJdJiY3MD09PUFbM10mJjA9PT1BWzRdJiYoZj17dmVyc2lvbjp7bWFqb3I6QVs1XSxtaW5vcjpBWzZdfSxkZW5zaXR5VW5pdHM6QVs3XSx4RGVuc2l0eTpBWzhdPDw4fEFbOV0seURlbnNpdHk6QVsxMF08PDh8QVsxMV0sdGh1bWJXaWR0aDpBWzEyXSx0aHVtYkhlaWdodDpBWzEzXSx0aHVtYkRhdGE6QS5zdWJhcnJheSgxNCwxNCszKkFbMTJdKkFbMTNdKX0pLDY1NTE4PT09ayYmNjU9PT1BWzBdJiYxMDA9PT1BWzFdJiYxMTE9PT1BWzJdJiY5OD09PUFbM10mJjEwMT09PUFbNF0mJihoPXt2ZXJzaW9uOkFbNV08PDh8QVs2XSxmbGFnczA6QVs3XTw8OHxBWzhdLGZsYWdzMTpBWzldPDw4fEFbMTBdLHRyYW5zZm9ybUNvZGU6QVsxMV19KTticmVhaztjYXNlIDY1NDk5OmZvcih2YXIgQz0oMCxhLnJlYWRVaW50MTYpKGUsbCkrKGwrPTIpLTI7bDxDOyl7dmFyIFA9ZVtsKytdLEk9bmV3IFVpbnQxNkFycmF5KDY0KTtpZihQPj40PT0wKWZvcih4PTA7eDw2NDt4KyspSVttW3hdXT1lW2wrK107ZWxzZXtpZihQPj40IT0xKXRocm93IG5ldyBnKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3IoeD0wO3g8NjQ7eCsrKUlbbVt4XV09KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9cFsxNSZQXT1JfWJyZWFrO2Nhc2UgNjU0NzI6Y2FzZSA2NTQ3MzpjYXNlIDY1NDc0OmlmKGMpdGhyb3cgbmV3IGcoIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZCIpO2wrPTIsKGM9e30pLmV4dGVuZGVkPTY1NDczPT09ayxjLnByb2dyZXNzaXZlPTY1NDc0PT09ayxjLnByZWNpc2lvbj1lW2wrK107dmFyIE09KDAsYS5yZWFkVWludDE2KShlLGwpO2wrPTIsYy5zY2FuTGluZXM9cnx8TSxjLnNhbXBsZXNQZXJMaW5lPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yLGMuY29tcG9uZW50cz1bXSxjLmNvbXBvbmVudElkcz17fTt2YXIgXz1lW2wrK10sTD0wLFI9MDtmb3IoUz0wO1M8XztTKyspe3ZhciBOPWVbbF0sRD1lW2wrMV0+PjQsQj0xNSZlW2wrMV07TDxEJiYoTD1EKSxSPEImJihSPUIpO3ZhciBVPWVbbCsyXTtPPWMuY29tcG9uZW50cy5wdXNoKHtoOkQsdjpCLHF1YW50aXphdGlvbklkOlUscXVhbnRpemF0aW9uVGFibGU6bnVsbH0pLGMuY29tcG9uZW50SWRzW05dPU8tMSxsKz0zfWMubWF4SD1MLGMubWF4Vj1SLHMoYyk7YnJlYWs7Y2FzZSA2NTQ3Njp2YXIgJD0oMCxhLnJlYWRVaW50MTYpKGUsbCk7Zm9yKGwrPTIsUz0yO1M8JDspe3ZhciBYPWVbbCsrXSxIPW5ldyBVaW50OEFycmF5KDE2KSxxPTA7Zm9yKHg9MDt4PDE2O3grKyxsKyspcSs9SFt4XT1lW2xdO3ZhciBHPW5ldyBVaW50OEFycmF5KHEpO2Zvcih4PTA7eDxxO3grKyxsKyspR1t4XT1lW2xdO1MrPTE3K3EsKFg+PjQ9PTA/dzpiKVsxNSZYXT1GKEgsRyl9YnJlYWs7Y2FzZSA2NTUwMTpsKz0yLHU9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTI7YnJlYWs7Y2FzZSA2NTQ5ODp2YXIgej0xPT0rK2QmJiFyO2wrPTI7dmFyIFc9ZVtsKytdLFY9W107Zm9yKFM9MDtTPFc7UysrKXt2YXIgWT1lW2wrK10sSz1jLmNvbXBvbmVudElkc1tZXSxKPWMuY29tcG9uZW50c1tLXTtKLmluZGV4PVk7dmFyIFo9ZVtsKytdO0ouaHVmZm1hblRhYmxlREM9d1taPj40XSxKLmh1ZmZtYW5UYWJsZUFDPWJbMTUmWl0sVi5wdXNoKEopfXZhciBRPWVbbCsrXSxlZT1lW2wrK10sdGU9ZVtsKytdO3RyeXt2YXIgcmU9VChlLGwsYyxWLHUsUSxlZSx0ZT4+NCwxNSZ0ZSx6KTtsKz1yZX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgdilyZXR1cm4oMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLiIpKSx0aGlzLnBhcnNlKGUse2RubFNjYW5MaW5lczp0LnNjYW5MaW5lc30pO2lmKHQgaW5zdGFuY2VvZiB5KXsoMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS4iKSk7YnJlYWsgZX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6bCs9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbbF0mJmwtLTticmVhaztkZWZhdWx0OnZhciBuZT1qKGUsbC0yLGwtMyk7aWYobmUmJm5lLmludmFsaWQpeygwLG4ud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrbmUuaW52YWxpZCksbD1uZS5vZmZzZXQ7YnJlYWt9aWYoIW5lfHxsPj1lLmxlbmd0aC0xKXsoMCxuLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgd2l0aG91dCBmaW5kaW5nIGFuIEVPSSBtYXJrZXIgKDB4RkZEOSkuIik7YnJlYWsgZX10aHJvdyBuZXcgZygiSnBlZ0ltYWdlLnBhcnNlIC0gdW5rbm93biBtYXJrZXI6ICIray50b1N0cmluZygxNikpfWs9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9dGhpcy53aWR0aD1jLnNhbXBsZXNQZXJMaW5lLHRoaXMuaGVpZ2h0PWMuc2NhbkxpbmVzLHRoaXMuamZpZj1mLHRoaXMuYWRvYmU9aCx0aGlzLmNvbXBvbmVudHM9W107dmFyIGFlLGllPWkoYy5jb21wb25lbnRzKTt0cnl7Zm9yKGllLnMoKTshKGFlPWllLm4oKSkuZG9uZTspe3ZhciBvZT1hZS52YWx1ZSxzZT1wW29lLnF1YW50aXphdGlvbklkXTtzZSYmKG9lLnF1YW50aXphdGlvblRhYmxlPXNlKSx0aGlzLmNvbXBvbmVudHMucHVzaCh7aW5kZXg6b2UuaW5kZXgsb3V0cHV0OkUoMCxvZSksc2NhbGVYOm9lLmgvYy5tYXhILHNjYWxlWTpvZS52L2MubWF4VixibG9ja3NQZXJMaW5lOm9lLmJsb2Nrc1BlckxpbmUsYmxvY2tzUGVyQ29sdW1uOm9lLmJsb2Nrc1BlckNvbHVtbn0pfX1jYXRjaChlKXtpZS5lKGUpfWZpbmFsbHl7aWUuZigpfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofX0se2tleToiX2dldExpbmVhcml6ZWRCbG9ja0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGksbyxzLGMsdSxsLGYsaCxkLHA9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxnPXRoaXMud2lkdGgvZSx2PXRoaXMuaGVpZ2h0L3QseT0wLG09dGhpcy5jb21wb25lbnRzLmxlbmd0aCxiPWUqdCptLHc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGIpLGs9bmV3IFVpbnQzMkFycmF5KGUpLFM9NDI5NDk2NzI4ODtmb3IoYz0wO2M8bTtjKyspe2lmKG49KHI9dGhpcy5jb21wb25lbnRzW2NdKS5zY2FsZVgqZyxhPXIuc2NhbGVZKnYseT1jLGg9ci5vdXRwdXQsaT1yLmJsb2Nrc1BlckxpbmUrMTw8MyxuIT09ZCl7Zm9yKG89MDtvPGU7bysrKXU9MHxvKm4sa1tvXT0odSZTKTw8M3w3JnU7ZD1ufWZvcihzPTA7czx0O3MrKylmb3IoZj1pKigodT0wfHMqYSkmUyl8KDcmdSk8PDMsbz0wO288ZTtvKyspd1t5XT1oW2Yra1tvXV0seSs9bX12YXIgeD10aGlzLl9kZWNvZGVUcmFuc2Zvcm07aWYocHx8NCE9PW18fHh8fCh4PW5ldyBJbnQzMkFycmF5KFstMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NV0pKSx4KWZvcihjPTA7YzxiOylmb3IodT0wLGw9MDt1PG07dSsrLGMrKyxsKz0yKXdbY109KHdbY10qeFtsXT4+OCkreFtsKzFdO3JldHVybiB3fX0se2tleToiX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZG9iZT8hIXRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZTozPT09dGhpcy5udW1Db21wb25lbnRzPzAhPT10aGlzLl9jb2xvclRyYW5zZm9ybSYmKDgyIT09dGhpcy5jb21wb25lbnRzWzBdLmluZGV4fHw3MSE9PXRoaXMuY29tcG9uZW50c1sxXS5pbmRleHx8NjYhPT10aGlzLmNvbXBvbmVudHNbMl0uaW5kZXgpOjE9PT10aGlzLl9jb2xvclRyYW5zZm9ybX19LHtrZXk6Il9jb252ZXJ0WWNjVG9SZ2IiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYT0wLGk9ZS5sZW5ndGg7YTxpO2ErPTMpdD1lW2FdLHI9ZVthKzFdLG49ZVthKzJdLGVbYV09dC0xNzkuNDU2KzEuNDAyKm4sZVthKzFdPXQrMTM1LjQ1OS0uMzQ0KnItLjcxNCpuLGVbYSsyXT10LTIyNi44MTYrMS43NzIqcjtyZXR1cm4gZX19LHtrZXk6Il9jb252ZXJ0WWNja1RvUmdiIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGEsaT0wLG89MCxzPWUubGVuZ3RoO288cztvKz00KXQ9ZVtvXSxyPWVbbysxXSxuPWVbbysyXSxhPWVbbyszXSxlW2krK109ciooLTY2MDYzNTY2OTQyMDM2NGUtMTkqcisuMDAwNDM3MTMwNDc1OTI2MjMyKm4tNTQwODA2MTAwNjQ1OTllLTE4KnQrLjAwMDQ4NDQ5Nzk3MTIwMjgxKmEtLjE1NDM2MjE1MTg3MTEyNiktMTIyLjY3MTk1NDA2ODk0K24qKC0uMDAwOTU3OTY0Mzc4NDQ1NzczKm4rLjAwMDgxNzA3NjkxMTM0NjYyNSp0LS4wMDQ3NzI3MTQwNTQwODc0NyphKzEuNTMzODAyNTMyMjE3MzQpK3QqKC4wMDA5NjEyNTAxODQxMzA2ODgqdC0uMDAyNjYyNTczMzIyODM5MzMqYSsuNDgzNTcwODg0NTEyNjUpK2EqKC0uMDAwMzM2MTk3MTc3NjE4Mzk0KmErLjQ4NDc5MTU2MTQ5MDc3NiksZVtpKytdPTEwNy4yNjgwMzkzOTc3MjQrciooMjE5OTI3MTA0NTI1NzQxZS0xOSpyLS4wMDA2NDA5OTIwMTgyOTc5NDUqbisuMDAwNjU5Mzk3MDAxMjQ1NTc3KnQrLjAwMDQyNjEwNTY1MjkzODgzNyphLS4xNzY0OTE3OTI0NjI4NzUpK24qKC0uMDAwNzc4MjY5OTQxNTEzNjgzKm4rLjAwMTMwODcyMjYxNDA4Mjc1KnQrLjAwMDc3MDQ4MjYzMTgwMTEzMiphLS4xNTEwNTE0OTI3NzU1NjIpK3QqKC4wMDEyNjkzNTM2ODExNDg0Myp0LS4wMDI2NTA5MDE4OTAxMDg5OCphKy4yNTgwMjkxMDIwNjg0NSkrYSooLS4wMDAzMTg5MTMxMTc1ODgzMjgqYS0uMjEzNzQyNDAwMzIzNjY1KSxlW2krK109ciooLS4wMDA1NzAxMTUxOTY5NzM2Nzcqci0yNjM0MDkwNTEwMDQ1ODllLTE5Km4rLjAwMjA3NDEwODgxMTUwMTIqdC0uMDAyODgyNjAyMzY4NTM0NDIqYSsuODE0MjcyOTY4MzU5Mjk1KS0yMC44MTAwMTI1NDY5NDcrbiooLTE1MzQ5NjA1NzQ0MDk3NWUtMTkqbi0uMDAwMTMyNjg5MDQzOTYxNDQ2KnQrLjAwMDU2MDgzMzY5MTI0MjgxMiphLS4xOTUxNTIwMjc1MzQwNDkpK3QqKC4wMDE3NDQxODEzMjkyNzU4Mip0LS4wMDI1NTI0MzMyMTQzOTM0NyphKy4xMTY5MzUwMjA0NjUxNDUpK2EqKC0uMDAwMzQzNTMxOTk2NTEwNTU1KmErLjI0MTY1MjYwMjMyNDA3KTtyZXR1cm4gZS5zdWJhcnJheSgwLGkpfX0se2tleToiX2NvbnZlcnRZY2NrVG9DbXlrIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGE9MCxpPWUubGVuZ3RoO2E8aTthKz00KXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPTQzNC40NTYtdC0xLjQwMipuLGVbYSsxXT0xMTkuNTQxLXQrLjM0NCpyKy43MTQqbixlW2ErMl09NDgxLjgxNi10LTEuNzcyKnI7cmV0dXJuIGV9fSx7a2V5OiJfY29udmVydENteWtUb1JnYiIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixhLGk9MCxvPTAscz1lLmxlbmd0aDtvPHM7bys9NCl0PWVbb10scj1lW28rMV0sbj1lW28rMl0sYT1lW28rM10sZVtpKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNypyKy4wMDAyODk0NzE4MTg4NjQzMjk0Km4rLjAwMzI2NDIzMTA1NzUzNzgwNiphLTEuMTE4NTYxMTg2NzIwMzkzNykrciooMjYzNzQxMDc2MTYwODk0MDVlLTIxKnItODYyNjk0OTE1ODYzODU3MmUtMjAqbi0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSphLS4wMjE1NTY4ODc5NDk3ODk2NykrbiooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKm4tLjAwMDMyNjc4MDgyNzk0ODUyODYqYSsuMDY4Njc0MjIzODU5NTM0NSktYSooLjAwMDMzNjE5NzE3NzYxODM5MzcqYSsuNzQzMDY1OTE1MTM0MjI1NCksZVtpKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KnIrLjAwMDEwNTY3MzU5NjE4NjgzNTkzKm4rLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqYS0uMzEwOTY4OTU4NzUxNTg3NSkrciooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCpyKy4wMDAyNzAyODQ1MjUzNTM0NzE0Km4rLjAwMjAyMDAzMDg5NzczMDcxNTYqYS0uNzQ4ODA1MjE2NzAxNTQ5NCkrbiooNjgzNDgxNTk5ODIzNTY2MmUtMjAqbisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqYS0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLWEqKC4wMDAzMTg5MTMxMTc1ODgzMjgxKmErLjczNjQ4ODM4MDc3MzMxNjgpLGVbaSsrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKnIrLjAwMDQ3NTE5ODUwOTc1ODM1ODkqbi0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqYS0uMDU1NjIxODY5ODAyNjQwMzQpK3IqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NipyKy4wMDA5NjkyMjM5MTMwNzI1MTg2Km4rLjAwMDc3ODI2OTI0NTAwMzYyNTMqYS0uNDQwMTUyMzIzNjc1MjY0NjMpK24qKDUuMDY4ODgyOTE0MDY4NzY5ZS03Km4rLjAwMTc3NzgzNjkwMTEzNzUwNzEqYS0uNzU5MTQ1NDY0OTc0OTYwOSktYSooLjAwMDM0MzUzMTk5NjUxMDU1NTMqYSsuNzA2Mzc3MDE4NjE2MDE0NCk7cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX19LHtrZXk6ImdldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUud2lkdGgscj1lLmhlaWdodCxuPWUuZm9yY2VSR0IsYT12b2lkIDAhPT1uJiZuLG89ZS5pc1NvdXJjZVBERixzPXZvaWQgMCE9PW8mJm87aWYodGhpcy5udW1Db21wb25lbnRzPjQpdGhyb3cgbmV3IGcoIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGUiKTt2YXIgYz10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHQscixzKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiZhKXt2YXIgdSxsPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmMubGVuZ3RoKSxmPTAsaD1pKGMpO3RyeXtmb3IoaC5zKCk7ISh1PWgubigpKS5kb25lOyl7dmFyIGQ9dS52YWx1ZTtsW2YrK109ZCxsW2YrK109ZCxsW2YrK109ZH19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGx9aWYoMz09PXRoaXMubnVtQ29tcG9uZW50cyYmdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihjKTtpZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gYT90aGlzLl9jb252ZXJ0WWNja1RvUmdiKGMpOnRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKGMpO2lmKGEpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoYyl9cmV0dXJuIGN9fV0pLGV9KCk7dC5KcGVnSW1hZ2U9TX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSnB4U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDE1OSksbz1yKDIpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX12YXIgbD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYyhlLHQpfShoLGUpO3ZhciB0LHIsYSxsLGY9KGE9aCxsPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9dShhKTtpZihsKXt2YXIgcj11KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBoKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxoKSwobj1mLmNhbGwodGhpcyx0KSkuc3RyZWFtPWUsbi5kaWN0PWUuZGljdCxuLm1heWJlTGVuZ3RoPXQsbi5wYXJhbXM9cixufXJldHVybiB0PWgsKHI9W3trZXk6ImJ5dGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmVvZil7dmFyIGU9bmV3IGkuSnB4SW1hZ2U7ZS5wYXJzZSh0aGlzLmJ5dGVzKTt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQsbj1lLmNvbXBvbmVudHNDb3VudCxhPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1hKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtmb3IodmFyIG89bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqcipuKSxzPTA7czxhO3MrKylmb3IodmFyIGM9ZS50aWxlc1tzXSx1PWMud2lkdGgsbD1jLmhlaWdodCxmPWMubGVmdCxoPWMudG9wLGQ9Yy5pdGVtcyxwPTAsZz0odCpoK2YpKm4sdj10Km4seT11Km4sbT0wO208bDttKyspe3ZhciBiPWQuc3ViYXJyYXkocCxwK3kpO28uc2V0KGIsZykscCs9eSxnKz12fXRoaXMuYnVmZmVyPW99dGhpcy5idWZmZXJMZW5ndGg9dGhpcy5idWZmZXIubGVuZ3RoLHRoaXMuZW9mPSEwfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksaH0oYS5EZWNvZGVTdHJlYW0pO3QuSnB4U3RyZWFtPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpweEltYWdlPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxMzUpLG89cigxNTUpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZihlLHQpfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZChlKTtpZih0KXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9dmFyIHA9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLCJKUFggZXJyb3I6ICIuY29uY2F0KGUpLCJKcHhFcnJvciIpfXJldHVybiBjKHIpfShhLkJhc2VFeGNlcHRpb24pLGc9e0xMOjAsTEg6MSxITDoxLEhIOjJ9LHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dSh0aGlzLGUpLHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2U9ITF9cmV0dXJuIGMoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDY1MzU5IT09KDAsaS5yZWFkVWludDE2KShlLDApKWZvcih2YXIgdD1lLmxlbmd0aCxyPTA7cjx0Oyl7dmFyIG49OCxvPSgwLGkucmVhZFVpbnQzMikoZSxyKSxzPSgwLGkucmVhZFVpbnQzMikoZSxyKzQpO2lmKHIrPW4sMT09PW8mJihvPTQyOTQ5NjcyOTYqKDAsaS5yZWFkVWludDMyKShlLHIpKygwLGkucmVhZFVpbnQzMikoZSxyKzQpLHIrPTgsbis9OCksMD09PW8mJihvPXQtcituKSxvPG4pdGhyb3cgbmV3IHAoIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTt2YXIgYz1vLW4sdT0hMDtzd2l0Y2gocyl7Y2FzZSAxNzg1NzM3ODMyOnU9ITE7YnJlYWs7Y2FzZSAxNjY4MjQ2NjQyOnZhciBsPWVbcl07aWYoMT09PWwpe3ZhciBmPSgwLGkucmVhZFVpbnQzMikoZSxyKzMpO3N3aXRjaChmKXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLGEud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK2YpfX1lbHNlIDI9PT1sJiYoMCxhLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUscixyK2MpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLGkucmVhZFVpbnQzMikoZSxyKSYmKDAsYS53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OnZhciBoPVN0cmluZy5mcm9tQ2hhckNvZGUocz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyk7KDAsYS53YXJuKSgiVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgIi5jb25jYXQocywiICgiKS5jb25jYXQoaCwiKS4iKSl9dSYmKHIrPWMpfWVsc2UgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZSwwLGUubGVuZ3RoKX19LHtrZXk6InBhcnNlSW1hZ2VQcm9wZXJ0aWVzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5nZXRCeXRlKCk7dD49MDspaWYoNjUzNjE9PSh0PDw4fCh0PWUuZ2V0Qnl0ZSgpKSkpe2Uuc2tpcCg0KTt2YXIgcj1lLmdldEludDMyKCk+Pj4wLG49ZS5nZXRJbnQzMigpPj4+MCxhPWUuZ2V0SW50MzIoKT4+PjAsaT1lLmdldEludDMyKCk+Pj4wO2Uuc2tpcCgxNik7dmFyIG89ZS5nZXRVaW50MTYoKTtyZXR1cm4gdGhpcy53aWR0aD1yLWEsdGhpcy5oZWlnaHQ9bi1pLHRoaXMuY29tcG9uZW50c0NvdW50PW8sdm9pZCh0aGlzLmJpdHNQZXJDb21wb25lbnQ9OCl9dGhyb3cgbmV3IHAoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX19LHtrZXk6InBhcnNlQ29kZXN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXt9LG89ITE7dHJ5e2Zvcih2YXIgcz10O3MrMTxyOyl7dmFyIGM9KDAsaS5yZWFkVWludDE2KShlLHMpO3MrPTI7dmFyIHU9MCxsPXZvaWQgMCxmPXZvaWQgMCxoPXZvaWQgMCxkPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2goYyl7Y2FzZSA2NTM1OTpuLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOnU9KDAsaS5yZWFkVWludDE2KShlLHMpO3ZhciBiPXt9O2IuWHNpej0oMCxpLnJlYWRVaW50MzIpKGUscys0KSxiLllzaXo9KDAsaS5yZWFkVWludDMyKShlLHMrOCksYi5YT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxMiksYi5ZT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxNiksYi5YVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyMCksYi5ZVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyNCksYi5YVE9zaXo9KDAsaS5yZWFkVWludDMyKShlLHMrMjgpLGIuWVRPc2l6PSgwLGkucmVhZFVpbnQzMikoZSxzKzMyKTt2YXIgdz0oMCxpLnJlYWRVaW50MTYpKGUscyszNik7Yi5Dc2l6PXc7dmFyIGs9W107bD1zKzM4O2Zvcih2YXIgUz0wO1M8dztTKyspe3ZhciB4PXtwcmVjaXNpb246MSsoMTI3JmVbbF0pLGlzU2lnbmVkOiEhKDEyOCZlW2xdKSxYUnNpejplW2wrMV0sWVJzaXo6ZVtsKzJdfTtsKz0zLHkoeCxiKSxrLnB1c2goeCl9bi5TSVo9YixuLmNvbXBvbmVudHM9ayxtKG4sayksbi5RQ0M9W10sbi5DT0M9W107YnJlYWs7Y2FzZSA2NTM3Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgTz17fTtzd2l0Y2gobD1zKzIsMzEmKGY9ZVtsKytdKSl7Y2FzZSAwOmQ9OCxnPSEwO2JyZWFrO2Nhc2UgMTpkPTE2LGc9ITE7YnJlYWs7Y2FzZSAyOmQ9MTYsZz0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrZil9Zm9yKE8ubm9RdWFudGl6YXRpb249OD09PWQsTy5zY2FsYXJFeHBvdW5kZWQ9ZyxPLmd1YXJkQml0cz1mPj41LGg9W107bDx1K3M7KXt2YXIgQT17fTs4PT09ZD8oQS5lcHNpbG9uPWVbbCsrXT4+MyxBLm11PTApOihBLmVwc2lsb249ZVtsXT4+MyxBLm11PSg3JmVbbF0pPDw4fGVbbCsxXSxsKz0yKSxoLnB1c2goQSl9Ty5TUHFjZHM9aCxuLm1haW5IZWFkZXI/bi5RQ0Q9Tzoobi5jdXJyZW50VGlsZS5RQ0Q9TyxuLmN1cnJlbnRUaWxlLlFDQz1bXSk7YnJlYWs7Y2FzZSA2NTM3Mzp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgQz17fTtsPXMrMjt2YXIgRj12b2lkIDA7c3dpdGNoKG4uU0laLkNzaXo8MjU3P0Y9ZVtsKytdOihGPSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yKSwzMSYoZj1lW2wrK10pKXtjYXNlIDA6ZD04LGc9ITA7YnJlYWs7Y2FzZSAxOmQ9MTYsZz0hMTticmVhaztjYXNlIDI6ZD0xNixnPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitmKX1mb3IoQy5ub1F1YW50aXphdGlvbj04PT09ZCxDLnNjYWxhckV4cG91bmRlZD1nLEMuZ3VhcmRCaXRzPWY+PjUsaD1bXTtsPHUrczspe3ZhciBQPXt9Ozg9PT1kPyhQLmVwc2lsb249ZVtsKytdPj4zLFAubXU9MCk6KFAuZXBzaWxvbj1lW2xdPj4zLFAubXU9KDcmZVtsXSk8PDh8ZVtsKzFdLGwrPTIpLGgucHVzaChQKX1DLlNQcWNkcz1oLG4ubWFpbkhlYWRlcj9uLlFDQ1tGXT1DOm4uY3VycmVudFRpbGUuUUNDW0ZdPUM7YnJlYWs7Y2FzZSA2NTM2Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgVD17fTtsPXMrMjt2YXIgaj1lW2wrK107VC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmaiksVC5zb3BNYXJrZXJVc2VkPSEhKDImaiksVC5lcGhNYXJrZXJVc2VkPSEhKDQmaiksVC5wcm9ncmVzc2lvbk9yZGVyPWVbbCsrXSxULmxheWVyc0NvdW50PSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yLFQubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVtsKytdLFQuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbbCsrXSxULnhjYj0yKygxNSZlW2wrK10pLFQueWNiPTIrKDE1JmVbbCsrXSk7dmFyIEw9ZVtsKytdO2lmKFQuc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcz0hISgxJkwpLFQucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcz0hISgyJkwpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzPSEhKDQmTCksVC52ZXJ0aWNhbGx5U3RyaXBlPSEhKDgmTCksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uPSEhKDE2JkwpLFQuc2VnbWVudGF0aW9uU3ltYm9sVXNlZD0hISgzMiZMKSxULnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbj1lW2wrK10sVC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKXtmb3IodmFyIFI9W107bDx1K3M7KXt2YXIgTj1lW2wrK107Ui5wdXNoKHtQUHg6MTUmTixQUHk6Tj4+NH0pfVQucHJlY2luY3RzU2l6ZXM9Un12YXIgRD1bXTtULnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJkQucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZELnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpLFQudmVydGljYWxseVN0cmlwZSYmRC5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIiksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZELnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKSxELmxlbmd0aD4wJiYobz0hMCwoMCxhLndhcm4pKCJKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgiLmNvbmNhdChELmpvaW4oIiwgIiksIikuIikpKSxuLm1haW5IZWFkZXI/bi5DT0Q9VDoobi5jdXJyZW50VGlsZS5DT0Q9VCxuLmN1cnJlbnRUaWxlLkNPQz1bXSk7YnJlYWs7Y2FzZSA2NTQyNDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKSwodj17fSkuaW5kZXg9KDAsaS5yZWFkVWludDE2KShlLHMrMiksdi5sZW5ndGg9KDAsaS5yZWFkVWludDMyKShlLHMrNCksdi5kYXRhRW5kPXYubGVuZ3RoK3MtMix2LnBhcnRJbmRleD1lW3MrOF0sdi5wYXJ0c0NvdW50PWVbcys5XSxuLm1haW5IZWFkZXI9ITEsMD09PXYucGFydEluZGV4JiYodi5DT0Q9bi5DT0Qsdi5DT0M9bi5DT0Muc2xpY2UoMCksdi5RQ0Q9bi5RQ0Qsdi5RQ0M9bi5RQ0Muc2xpY2UoMCkpLG4uY3VycmVudFRpbGU9djticmVhaztjYXNlIDY1NDI3OjA9PT0odj1uLmN1cnJlbnRUaWxlKS5wYXJ0SW5kZXgmJihfKG4sdi5pbmRleCksSShuKSksRShuLGUscyx1PXYuZGF0YUVuZC1zKTticmVhaztjYXNlIDY1MzYzOigwLGEud2FybikoIkpQWDogQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQuIik7Y2FzZSA2NTM2NTpjYXNlIDY1MzY3OmNhc2UgNjUzNjg6Y2FzZSA2NTM4MDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICIrYy50b1N0cmluZygxNikpfXMrPXV9fWNhdGNoKGUpe2lmKG98fHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpdGhyb3cgbmV3IHAoZS5tZXNzYWdlKTsoMCxhLndhcm4pKCdKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICInLmNvbmNhdChlLm1lc3NhZ2UsJyIuJykpfXRoaXMudGlsZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jb21wb25lbnRzLG49dC5Dc2l6LGE9W10saT0wLG89ZS50aWxlcy5sZW5ndGg7aTxvO2krKyl7Zm9yKHZhciBzPWUudGlsZXNbaV0sYz1bXSx1PTA7dTxuO3UrKyljW3VdPU0oZSxzLHUpO3ZhciBsPWNbMF0sZj1uZXcgVWludDhDbGFtcGVkQXJyYXkobC5pdGVtcy5sZW5ndGgqbiksaD17bGVmdDpsLmxlZnQsdG9wOmwudG9wLHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LGl0ZW1zOmZ9LGQ9dm9pZCAwLHA9dm9pZCAwLGc9MCx2PXZvaWQgMCx5PXZvaWQgMCxtPXZvaWQgMCxiPXZvaWQgMCx3PXZvaWQgMDtpZihzLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm0pe3ZhciBrPTQ9PT1uLFM9Y1swXS5pdGVtcyx4PWNbMV0uaXRlbXMsTz1jWzJdLml0ZW1zLEE9az9jWzNdLml0ZW1zOm51bGw7cD0uNSsoMTI4PDwoZD1yWzBdLnByZWNpc2lvbi04KSk7dmFyIEM9cy5jb21wb25lbnRzWzBdLEY9bi0zO2lmKHk9Uy5sZW5ndGgsQy5jb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uKWZvcih2PTA7djx5O3YrKyxnKz1GKXttPVNbdl0rcCxiPXhbdl07dmFyIFA9bS0oKHc9T1t2XSkrYj4+Mik7ZltnKytdPVArdz4+ZCxmW2crK109UD4+ZCxmW2crK109UCtiPj5kfWVsc2UgZm9yKHY9MDt2PHk7disrLGcrPUYpbT1TW3ZdK3AsYj14W3ZdLHc9T1t2XSxmW2crK109bSsxLjQwMip3Pj5kLGZbZysrXT1tLS4zNDQxMypiLS43MTQxNCp3Pj5kLGZbZysrXT1tKzEuNzcyKmI+PmQ7aWYoaylmb3Iodj0wLGc9Mzt2PHk7disrLGcrPTQpZltnXT1BW3ZdK3A+PmR9ZWxzZSBmb3IodmFyIFQ9MDtUPG47VCsrKXt2YXIgST1jW1RdLml0ZW1zO2ZvcihwPS41KygxMjg8PChkPXJbVF0ucHJlY2lzaW9uLTgpKSxnPVQsdj0wLHk9SS5sZW5ndGg7djx5O3YrKylmW2ddPUlbdl0rcD4+ZCxnKz1ufWEucHVzaChoKX1yZXR1cm4gYX0obiksdGhpcy53aWR0aD1uLlNJWi5Yc2l6LW4uU0laLlhPc2l6LHRoaXMuaGVpZ2h0PW4uU0laLllzaXotbi5TSVouWU9zaXosdGhpcy5jb21wb25lbnRzQ291bnQ9bi5TSVouQ3Npen19XSksZX0oKTtmdW5jdGlvbiB5KGUsdCl7ZS54MD1NYXRoLmNlaWwodC5YT3Npei9lLlhSc2l6KSxlLngxPU1hdGguY2VpbCh0LlhzaXovZS5YUnNpeiksZS55MD1NYXRoLmNlaWwodC5ZT3Npei9lLllSc2l6KSxlLnkxPU1hdGguY2VpbCh0LllzaXovZS5ZUnNpeiksZS53aWR0aD1lLngxLWUueDAsZS5oZWlnaHQ9ZS55MS1lLnkwfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIHIsbj1lLlNJWixhPVtdLGk9TWF0aC5jZWlsKChuLlhzaXotbi5YVE9zaXopL24uWFRzaXopLG89TWF0aC5jZWlsKChuLllzaXotbi5ZVE9zaXopL24uWVRzaXopLHM9MDtzPG87cysrKWZvcih2YXIgYz0wO2M8aTtjKyspKHI9e30pLnR4MD1NYXRoLm1heChuLlhUT3NpeitjKm4uWFRzaXosbi5YT3Npeiksci50eTA9TWF0aC5tYXgobi5ZVE9zaXorcypuLllUc2l6LG4uWU9zaXopLHIudHgxPU1hdGgubWluKG4uWFRPc2l6KyhjKzEpKm4uWFRzaXosbi5Yc2l6KSxyLnR5MT1NYXRoLm1pbihuLllUT3NpeisocysxKSpuLllUc2l6LG4uWXNpeiksci53aWR0aD1yLnR4MS1yLnR4MCxyLmhlaWdodD1yLnR5MS1yLnR5MCxyLmNvbXBvbmVudHM9W10sYS5wdXNoKHIpO2UudGlsZXM9YTtmb3IodmFyIHU9MCxsPW4uQ3Npejt1PGw7dSsrKWZvcih2YXIgZj10W3VdLGg9MCxkPWEubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPXt9O3I9YVtoXSxwLnRjeDA9TWF0aC5jZWlsKHIudHgwL2YuWFJzaXopLHAudGN5MD1NYXRoLmNlaWwoci50eTAvZi5ZUnNpeikscC50Y3gxPU1hdGguY2VpbChyLnR4MS9mLlhSc2l6KSxwLnRjeTE9TWF0aC5jZWlsKHIudHkxL2YuWVJzaXopLHAud2lkdGg9cC50Y3gxLXAudGN4MCxwLmhlaWdodD1wLnRjeTEtcC50Y3kwLHIuY29tcG9uZW50c1t1XT1wfX1mdW5jdGlvbiBiKGUsdCxyKXt2YXIgbj10LmNvZGluZ1N0eWxlUGFyYW1ldGVycyxhPXt9O3JldHVybiBuLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHM/KGEuUFB4PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB4LGEuUFB5PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB5KTooYS5QUHg9MTUsYS5QUHk9MTUpLGEueGNiXz1yPjA/TWF0aC5taW4obi54Y2IsYS5QUHgtMSk6TWF0aC5taW4obi54Y2IsYS5QUHgpLGEueWNiXz1yPjA/TWF0aC5taW4obi55Y2IsYS5QUHktMSk6TWF0aC5taW4obi55Y2IsYS5QUHkpLGF9ZnVuY3Rpb24gdyhlLHQscil7dmFyIG49MTw8ci5QUHgsYT0xPDxyLlBQeSxpPTA9PT10LnJlc0xldmVsLG89MTw8ci5QUHgrKGk/MDotMSkscz0xPDxyLlBQeSsoaT8wOi0xKSxjPXQudHJ4MT50LnRyeDA/TWF0aC5jZWlsKHQudHJ4MS9uKS1NYXRoLmZsb29yKHQudHJ4MC9uKTowLHU9dC50cnkxPnQudHJ5MD9NYXRoLmNlaWwodC50cnkxL2EpLU1hdGguZmxvb3IodC50cnkwL2EpOjAsbD1jKnU7dC5wcmVjaW5jdFBhcmFtZXRlcnM9e3ByZWNpbmN0V2lkdGg6bixwcmVjaW5jdEhlaWdodDphLG51bXByZWNpbmN0c3dpZGU6YyxudW1wcmVjaW5jdHNoaWdoOnUsbnVtcHJlY2luY3RzOmwscHJlY2luY3RXaWR0aEluU3ViYmFuZDpvLHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kOnN9fWZ1bmN0aW9uIGsoZSx0LHIpe3ZhciBuLGEsaSxvLHM9ci54Y2JfLGM9ci55Y2JfLHU9MTw8cyxsPTE8PGMsZj10LnRieDA+PnMsaD10LnRieTA+PmMsZD10LnRieDErdS0xPj5zLHA9dC50YnkxK2wtMT4+YyxnPXQucmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMsdj1bXSx5PVtdO2ZvcihhPWg7YTxwO2ErKylmb3Iobj1mO248ZDtuKyspaWYoKGk9e2NieDpuLGNieTphLHRieDA6dSpuLHRieTA6bCphLHRieDE6dSoobisxKSx0YnkxOmwqKGErMSl9KS50YngwXz1NYXRoLm1heCh0LnRieDAsaS50YngwKSxpLnRieTBfPU1hdGgubWF4KHQudGJ5MCxpLnRieTApLGkudGJ4MV89TWF0aC5taW4odC50YngxLGkudGJ4MSksaS50YnkxXz1NYXRoLm1pbih0LnRieTEsaS50YnkxKSxvPU1hdGguZmxvb3IoKGkudGJ4MF8tdC50YngwKS9nLnByZWNpbmN0V2lkdGhJblN1YmJhbmQpK01hdGguZmxvb3IoKGkudGJ5MF8tdC50YnkwKS9nLnByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kKSpnLm51bXByZWNpbmN0c3dpZGUsaS5wcmVjaW5jdE51bWJlcj1vLGkuc3ViYmFuZFR5cGU9dC50eXBlLGkuTGJsb2NrPTMsIShpLnRieDFfPD1pLnRieDBffHxpLnRieTFfPD1pLnRieTBfKSl7di5wdXNoKGkpO3ZhciBtPXlbb107dm9pZCAwIT09bT8objxtLmNieE1pbj9tLmNieE1pbj1uOm4+bS5jYnhNYXgmJihtLmNieE1heD1uKSxhPG0uY2J5TWluP20uY2J4TWluPWE6YT5tLmNieU1heCYmKG0uY2J5TWF4PWEpKTp5W29dPW09e2NieE1pbjpuLGNieU1pbjphLGNieE1heDpuLGNieU1heDphfSxpLnByZWNpbmN0PW19dC5jb2RlYmxvY2tQYXJhbWV0ZXJzPXtjb2RlYmxvY2tXaWR0aDpzLGNvZGVibG9ja0hlaWdodDpjLG51bWNvZGVibG9ja3dpZGU6ZC1mKzEsbnVtY29kZWJsb2NraGlnaDpwLWgrMX0sdC5jb2RlYmxvY2tzPXYsdC5wcmVjaW5jdHM9eX1mdW5jdGlvbiBTKGUsdCxyKXtmb3IodmFyIG49W10sYT1lLnN1YmJhbmRzLGk9MCxvPWEubGVuZ3RoO2k8bztpKyspZm9yKHZhciBzPWFbaV0uY29kZWJsb2NrcyxjPTAsdT1zLmxlbmd0aDtjPHU7YysrKXt2YXIgbD1zW2NdO2wucHJlY2luY3ROdW1iZXI9PT10JiZuLnB1c2gobCl9cmV0dXJue2xheWVyTnVtYmVyOnIsY29kZWJsb2NrczpufX1mdW5jdGlvbiB4KGUpe2Zvcih2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89MCxzPTA7czxpO3MrKylvPU1hdGgubWF4KG8sbi5jb21wb25lbnRzW3NdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO3ZhciBjPTAsdT0wLGw9MCxmPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtjPGE7YysrKXtmb3IoO3U8PW87dSsrKXtmb3IoO2w8aTtsKyspe3ZhciBlPW4uY29tcG9uZW50c1tsXTtpZighKHU+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSl7Zm9yKHZhciB0PWUucmVzb2x1dGlvbnNbdV0scj10LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7ZjxyOyl7dmFyIHM9Uyh0LGYsYyk7cmV0dXJuIGYrKyxzfWY9MH19bD0wfXU9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9ZS5TSVoscj1lLmN1cnJlbnRUaWxlLmluZGV4LG49ZS50aWxlc1tyXSxhPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxpPXQuQ3NpeixvPTAscz0wO3M8aTtzKyspbz1NYXRoLm1heChvLG4uY29tcG9uZW50c1tzXS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTt2YXIgYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7Yzw9bztjKyspe2Zvcig7dTxhO3UrKyl7Zm9yKDtsPGk7bCsrKXt2YXIgZT1uLmNvbXBvbmVudHNbbF07aWYoIShjPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe2Zvcih2YXIgdD1lLnJlc29sdXRpb25zW2NdLHI9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Y8cjspe3ZhciBzPVModCxmLHUpO3JldHVybiBmKyssc31mPTB9fWw9MH11PTB9dGhyb3cgbmV3IHAoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIEEoZSl7dmFyIHQscixuLGEsaT1lLlNJWixvPWUuY3VycmVudFRpbGUuaW5kZXgscz1lLnRpbGVzW29dLGM9cy5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LHU9aS5Dc2l6LGw9MDtmb3Iobj0wO248dTtuKyspe3ZhciBmPXMuY29tcG9uZW50c1tuXTtsPU1hdGgubWF4KGwsZi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KX12YXIgaD1uZXcgSW50MzJBcnJheShsKzEpO2ZvcihyPTA7cjw9bDsrK3Ipe3ZhciBkPTA7Zm9yKG49MDtuPHU7KytuKXt2YXIgZz1zLmNvbXBvbmVudHNbbl0ucmVzb2x1dGlvbnM7cjxnLmxlbmd0aCYmKGQ9TWF0aC5tYXgoZCxnW3JdLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpKX1oW3JdPWR9dD0wLHI9MCxuPTAsYT0wLHRoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7cjw9bDtyKyspe2Zvcig7YTxoW3JdO2ErKyl7Zm9yKDtuPHU7bisrKXt2YXIgZT1zLmNvbXBvbmVudHNbbl07aWYoIShyPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe3ZhciBpPWUucmVzb2x1dGlvbnNbcl0sbz1pLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7aWYoIShhPj1vKSl7Zm9yKDt0PGM7KXt2YXIgZj1TKGksYSx0KTtyZXR1cm4gdCsrLGZ9dD0wfX19bj0wfWE9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPW8sYz0wLHU9MCxsPTAsZj0wLGg9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24oKXtmb3IoO2g8cy5tYXhOdW1IaWdoO2grKyl7Zm9yKDtmPHMubWF4TnVtV2lkZTtmKyspe2Zvcig7bDxpO2wrKyl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1tsXSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDt1PD10O3UrKyl7dmFyIHI9ZS5yZXNvbHV0aW9uc1t1XSxkPW8uY29tcG9uZW50c1tsXS5yZXNvbHV0aW9uc1t1XSxnPVAoZixoLGQscyxyKTtpZihudWxsIT09Zyl7Zm9yKDtjPGE7KXt2YXIgdj1TKHIsZyxjKTtyZXR1cm4gYysrLHZ9Yz0wfX11PTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gRihlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPTAsYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7dTxpOysrdSl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1t1XSx0PW8uY29tcG9uZW50c1t1XSxyPWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmPHQubWF4TnVtSGlnaDtmKyspe2Zvcig7bDx0Lm1heE51bVdpZGU7bCsrKXtmb3IoO2M8PXI7YysrKXt2YXIgaD1lLnJlc29sdXRpb25zW2NdLGQ9dC5yZXNvbHV0aW9uc1tjXSxnPVAobCxmLGQsdCxoKTtpZihudWxsIT09Zyl7Zm9yKDtzPGE7KXt2YXIgdj1TKGgsZyxzKTtyZXR1cm4gcysrLHZ9cz0wfX1jPTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gUChlLHQscixuLGEpe3ZhciBpPWUqbi5taW5XaWR0aCxvPXQqbi5taW5IZWlnaHQ7aWYoaSVyLndpZHRoIT0wfHxvJXIuaGVpZ2h0IT0wKXJldHVybiBudWxsO3ZhciBzPW8vci53aWR0aCphLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlO3JldHVybiBpL3IuaGVpZ2h0K3N9ZnVuY3Rpb24gVChlKXtmb3IodmFyIHQ9ZS5jb21wb25lbnRzLmxlbmd0aCxyPU51bWJlci5NQVhfVkFMVUUsbj1OdW1iZXIuTUFYX1ZBTFVFLGE9MCxpPTAsbz1uZXcgQXJyYXkodCkscz0wO3M8dDtzKyspe2Zvcih2YXIgYz1lLmNvbXBvbmVudHNbc10sdT1jLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbD1uZXcgQXJyYXkodSsxKSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUFYX1ZBTFVFLGQ9MCxwPTAsZz0xLHY9dTt2Pj0wOy0tdil7dmFyIHk9Yy5yZXNvbHV0aW9uc1t2XSxtPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aCxiPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHQ7Zj1NYXRoLm1pbihmLG0pLGg9TWF0aC5taW4oaCxiKSxkPU1hdGgubWF4KGQseS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZSkscD1NYXRoLm1heChwLHkucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c2hpZ2gpLGxbdl09e3dpZHRoOm0saGVpZ2h0OmJ9LGc8PD0xfXI9TWF0aC5taW4ocixmKSxuPU1hdGgubWluKG4saCksYT1NYXRoLm1heChhLGQpLGk9TWF0aC5tYXgoaSxwKSxvW3NdPXtyZXNvbHV0aW9uczpsLG1pbldpZHRoOmYsbWluSGVpZ2h0OmgsbWF4TnVtV2lkZTpkLG1heE51bUhpZ2g6cH19cmV0dXJue2NvbXBvbmVudHM6byxtaW5XaWR0aDpyLG1pbkhlaWdodDpuLG1heE51bVdpZGU6YSxtYXhOdW1IaWdoOml9fWZ1bmN0aW9uIEkoZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT10LkNzaXosaT0wO2k8YTtpKyspe2Zvcih2YXIgbz1uLmNvbXBvbmVudHNbaV0scz1vLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsYz1bXSx1PVtdLGw9MDtsPD1zO2wrKyl7dmFyIGY9YigwLG8sbCksaD17fSxkPTE8PHMtbDtoLnRyeDA9TWF0aC5jZWlsKG8udGN4MC9kKSxoLnRyeTA9TWF0aC5jZWlsKG8udGN5MC9kKSxoLnRyeDE9TWF0aC5jZWlsKG8udGN4MS9kKSxoLnRyeTE9TWF0aC5jZWlsKG8udGN5MS9kKSxoLnJlc0xldmVsPWwsdygwLGgsZiksYy5wdXNoKGgpO3ZhciBnPXZvaWQgMDtpZigwPT09bCkoZz17fSkudHlwZT0iTEwiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL2QpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL2QpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL2QpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL2QpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSxoLnN1YmJhbmRzPVtnXTtlbHNle3ZhciB2PTE8PHMtbCsxLHk9W107KGc9e30pLnR5cGU9IkhMIixnLnRieDA9TWF0aC5jZWlsKG8udGN4MC92LS41KSxnLnRieTA9TWF0aC5jZWlsKG8udGN5MC92KSxnLnRieDE9TWF0aC5jZWlsKG8udGN4MS92LS41KSxnLnRieTE9TWF0aC5jZWlsKG8udGN5MS92KSxnLnJlc29sdXRpb249aCxrKDAsZyxmKSx1LnB1c2goZykseS5wdXNoKGcpLChnPXt9KS50eXBlPSJMSCIsZy50YngwPU1hdGguY2VpbChvLnRjeDAvdiksZy50YnkwPU1hdGguY2VpbChvLnRjeTAvdi0uNSksZy50YngxPU1hdGguY2VpbChvLnRjeDEvdiksZy50YnkxPU1hdGguY2VpbChvLnRjeTEvdi0uNSksZy5yZXNvbHV0aW9uPWgsaygwLGcsZiksdS5wdXNoKGcpLHkucHVzaChnKSwoZz17fSkudHlwZT0iSEgiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL3YtLjUpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL3YtLjUpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL3YtLjUpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL3YtLjUpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSx5LnB1c2goZyksaC5zdWJiYW5kcz15fX1vLnJlc29sdXRpb25zPWMsby5zdWJiYW5kcz11fXZhciBtPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO3N3aXRjaChtKXtjYXNlIDA6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IHgoZSk7YnJlYWs7Y2FzZSAxOm4ucGFja2V0c0l0ZXJhdG9yPW5ldyBPKGUpO2JyZWFrO2Nhc2UgMjpuLnBhY2tldHNJdGVyYXRvcj1uZXcgQShlKTticmVhaztjYXNlIDM6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IEMoZSk7YnJlYWs7Y2FzZSA0Om4ucGFja2V0c0l0ZXJhdG9yPW5ldyBGKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHAoIlVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICIuY29uY2F0KG0pKX19ZnVuY3Rpb24gRShlLHQscixuKXt2YXIgYSxvPTAscz0wLGM9ITE7ZnVuY3Rpb24gdShlKXtmb3IoO3M8ZTspe3ZhciBuPXRbcitvXTtvKyssYz8oYT1hPDw3fG4scys9NyxjPSExKTooYT1hPDw4fG4scys9OCksMjU1PT09biYmKGM9ITApfXJldHVybiBhPj4+KHMtPWUpJigxPDxlKS0xfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIDI1NT09PXRbcitvLTFdJiZ0W3Irb109PT1lPyhmKDEpLCEwKToyNTU9PT10W3Irb10mJnRbcitvKzFdPT09ZSYmKGYoMiksITApfWZ1bmN0aW9uIGYoZSl7bys9ZX1mdW5jdGlvbiBoKCl7cz0wLGMmJihvKyssYz0hMSl9ZnVuY3Rpb24gZCgpe2lmKDA9PT11KDEpKXJldHVybiAxO2lmKDA9PT11KDEpKXJldHVybiAyO3ZhciBlPXUoMik7cmV0dXJuIGU8Mz9lKzM6KGU9dSg1KSk8MzE/ZSs2OihlPXUoNykpKzM3fWZvcih2YXIgZz1lLmN1cnJlbnRUaWxlLmluZGV4LHY9ZS50aWxlc1tnXSx5PWUuQ09ELnNvcE1hcmtlclVzZWQsbT1lLkNPRC5lcGhNYXJrZXJVc2VkLGI9di5wYWNrZXRzSXRlcmF0b3I7bzxuOyl7aCgpLHkmJmwoMTQ1KSYmZig0KTt2YXIgdz1iLm5leHRQYWNrZXQoKTtpZih1KDEpKXtmb3IodmFyIGs9dy5sYXllck51bWJlcixTPVtdLHg9dm9pZCAwLE89MCxBPXcuY29kZWJsb2Nrcy5sZW5ndGg7TzxBO08rKyl7dmFyIEM9KHg9dy5jb2RlYmxvY2tzW09dKS5wcmVjaW5jdCxGPXguY2J4LUMuY2J4TWluLFA9eC5jYnktQy5jYnlNaW4sVD0hMSxJPSExLEU9dm9pZCAwO2lmKHZvaWQgMCE9PXguaW5jbHVkZWQpVD0hIXUoMSk7ZWxzZXt2YXIgaj12b2lkIDA7aWYodm9pZCAwIT09KEM9eC5wcmVjaW5jdCkuaW5jbHVzaW9uVHJlZSlqPUMuaW5jbHVzaW9uVHJlZTtlbHNle3ZhciBNPUMuY2J4TWF4LUMuY2J4TWluKzEsXz1DLmNieU1heC1DLmNieU1pbisxO2o9bmV3IFUoTSxfLGspLEU9bmV3IEIoTSxfKSxDLmluY2x1c2lvblRyZWU9aixDLnplcm9CaXRQbGFuZXNUcmVlPUU7Zm9yKHZhciBMPTA7TDxrO0wrKylpZigwIT09dSgxKSl0aHJvdyBuZXcgcCgiSW52YWxpZCB0YWcgdHJlZSIpfWlmKGoucmVzZXQoRixQLGspKWZvcig7Oyl7aWYoIXUoMSkpe2ouaW5jcmVtZW50VmFsdWUoayk7YnJlYWt9aWYoIWoubmV4dExldmVsKCkpe3guaW5jbHVkZWQ9ITAsVD1JPSEwO2JyZWFrfX19aWYoVCl7aWYoSSl7Zm9yKChFPUMuemVyb0JpdFBsYW5lc1RyZWUpLnJlc2V0KEYsUCk7OylpZih1KDEpKXtpZighRS5uZXh0TGV2ZWwoKSlicmVha31lbHNlIEUuaW5jcmVtZW50VmFsdWUoKTt4Lnplcm9CaXRQbGFuZXM9RS52YWx1ZX1mb3IodmFyIFI9ZCgpO3UoMSk7KXguTGJsb2NrKys7dmFyIE49KDAsaS5sb2cyKShSKSxEPXUoKFI8MTw8Tj9OLTE6TikreC5MYmxvY2spO1MucHVzaCh7Y29kZWJsb2NrOngsY29kaW5ncGFzc2VzOlIsZGF0YUxlbmd0aDpEfSl9fWZvcihoKCksbSYmbCgxNDYpO1MubGVuZ3RoPjA7KXt2YXIgJD1TLnNoaWZ0KCk7dm9pZCAwPT09KHg9JC5jb2RlYmxvY2spLmRhdGEmJih4LmRhdGE9W10pLHguZGF0YS5wdXNoKHtkYXRhOnQsc3RhcnQ6citvLGVuZDpyK28rJC5kYXRhTGVuZ3RoLGNvZGluZ3Bhc3NlczokLmNvZGluZ3Bhc3Nlc30pLG8rPSQuZGF0YUxlbmd0aH19fXJldHVybiBvfWZ1bmN0aW9uIGooZSx0LHIsbixhLGkscyxjLHUpe2Zvcih2YXIgbD1uLnRieDAsZj1uLnRieTAsaD1uLnRieDEtbi50YngwLGQ9bi5jb2RlYmxvY2tzLHA9IkgiPT09bi50eXBlLmNoYXJBdCgwKT8xOjAsZz0iSCI9PT1uLnR5cGUuY2hhckF0KDEpP3Q6MCx2PTAseT1kLmxlbmd0aDt2PHk7Kyt2KXt2YXIgbT1kW3ZdLGI9bS50YngxXy1tLnRieDBfLHc9bS50YnkxXy1tLnRieTBfO2lmKDAhPT1iJiYwIT09dyYmdm9pZCAwIT09bS5kYXRhKXt2YXIgaz1uZXcgJChiLHcsbS5zdWJiYW5kVHlwZSxtLnplcm9CaXRQbGFuZXMsaSksUz0yLHg9bS5kYXRhLE89MCxBPTAsQz12b2lkIDAsRj12b2lkIDAsUD12b2lkIDA7Zm9yKEM9MCxGPXgubGVuZ3RoO0M8RjtDKyspTys9KFA9eFtDXSkuZW5kLVAuc3RhcnQsQSs9UC5jb2RpbmdwYXNzZXM7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoTyksST0wO2ZvcihDPTAsRj14Lmxlbmd0aDtDPEY7QysrKXt2YXIgRT0oUD14W0NdKS5kYXRhLnN1YmFycmF5KFAuc3RhcnQsUC5lbmQpO1Quc2V0KEUsSSksSSs9RS5sZW5ndGh9dmFyIGo9bmV3IG8uQXJpdGhtZXRpY0RlY29kZXIoVCwwLE8pO2ZvcihrLnNldERlY29kZXIoaiksQz0wO0M8QTtDKyspe3N3aXRjaChTKXtjYXNlIDA6ay5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTticmVhaztjYXNlIDE6ay5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO2JyZWFrO2Nhc2UgMjprLnJ1bkNsZWFudXBQYXNzKCksYyYmay5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpfXUmJmsucmVzZXQoKSxTPShTKzEpJTN9dmFyIE09bS50YngwXy1sKyhtLnRieTBfLWYpKmgsXz1rLmNvZWZmaWNlbnRzU2lnbixMPWsuY29lZmZpY2VudHNNYWduaXR1ZGUsUj1rLmJpdHNEZWNvZGVkLE49cz8wOi41LEQ9dm9pZCAwLEI9dm9pZCAwLFU9dm9pZCAwO0k9MDt2YXIgWD0iTEwiIT09bi50eXBlO2ZvcihDPTA7Qzx3O0MrKyl7dmFyIEg9MiooTS9ofDApKih0LWgpK3ArZztmb3IoRD0wO0Q8YjtEKyspe2lmKDAhPT0oQj1MW0ldKSlCPShCK04pKmEsMCE9PV9bSV0mJihCPS1CKSxVPVJbSV0sZVtYP0grKE08PDEpOk1dPXMmJlU+PWk/QjpCKigxPDxpLVUpO00rKyxJKyt9TSs9aC1ifX19fWZ1bmN0aW9uIE0oZSx0LHIpe2Zvcih2YXIgbj10LmNvbXBvbmVudHNbcl0sYT1uLmNvZGluZ1N0eWxlUGFyYW1ldGVycyxpPW4ucXVhbnRpemF0aW9uUGFyYW1ldGVycyxvPWEuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LHM9aS5TUHFjZHMsYz1pLnNjYWxhckV4cG91bmRlZCx1PWkuZ3VhcmRCaXRzLGw9YS5zZWdtZW50YXRpb25TeW1ib2xVc2VkLGY9YS5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzLGg9ZS5jb21wb25lbnRzW3JdLnByZWNpc2lvbixkPWEucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uLHA9ZD9uZXcgcTpuZXcgSCx2PVtdLHk9MCxtPTA7bTw9bzttKyspe2Zvcih2YXIgYj1uLnJlc29sdXRpb25zW21dLHc9Yi50cngxLWIudHJ4MCxrPWIudHJ5MS1iLnRyeTAsUz1uZXcgRmxvYXQzMkFycmF5KHcqaykseD0wLE89Yi5zdWJiYW5kcy5sZW5ndGg7eDxPO3grKyl7dmFyIEE9dm9pZCAwLEM9dm9pZCAwO2M/KEE9c1t5XS5tdSxDPXNbeV0uZXBzaWxvbix5KyspOihBPXNbMF0ubXUsQz1zWzBdLmVwc2lsb24rKG0+MD8xLW06MCkpO3ZhciBGPWIuc3ViYmFuZHNbeF0sUD1nW0YudHlwZV07aihTLHcsMCxGLGQ/MTpNYXRoLnBvdygyLGgrUC1DKSooMStBLzIwNDgpLHUrQy0xLGQsbCxmKX12LnB1c2goe3dpZHRoOncsaGVpZ2h0OmssaXRlbXM6U30pfXZhciBUPXAuY2FsY3VsYXRlKHYsbi50Y3gwLG4udGN5MCk7cmV0dXJue2xlZnQ6bi50Y3gwLHRvcDpuLnRjeTAsd2lkdGg6VC53aWR0aCxoZWlnaHQ6VC5oZWlnaHQsaXRlbXM6VC5pdGVtc319ZnVuY3Rpb24gXyhlLHQpe2Zvcih2YXIgcj1lLlNJWi5Dc2l6LG49ZS50aWxlc1t0XSxhPTA7YTxyO2ErKyl7dmFyIGk9bi5jb21wb25lbnRzW2FdLG89dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbYV0/ZS5jdXJyZW50VGlsZS5RQ0NbYV06ZS5jdXJyZW50VGlsZS5RQ0Q7aS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW87dmFyIHM9dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5DT0NbYV0/ZS5jdXJyZW50VGlsZS5DT0NbYV06ZS5jdXJyZW50VGlsZS5DT0Q7aS5jb2RpbmdTdHlsZVBhcmFtZXRlcnM9c31uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnM9ZS5jdXJyZW50VGlsZS5DT0R9dC5KcHhJbWFnZT12O3ZhciBMLFIsTixELEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dSh0aGlzLGUpO3ZhciBuPSgwLGkubG9nMikoTWF0aC5tYXgodCxyKSkrMTt0aGlzLmxldmVscz1bXTtmb3IodmFyIGE9MDthPG47YSsrKXt2YXIgbz17d2lkdGg6dCxoZWlnaHQ6cixpdGVtczpbXX07dGhpcy5sZXZlbHMucHVzaChvKSx0PU1hdGguY2VpbCh0LzIpLHI9TWF0aC5jZWlsKHIvMil9fXJldHVybiBjKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuPTAsYT0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGk9ZSt0KihyPXRoaXMubGV2ZWxzW25dKS53aWR0aDtpZih2b2lkIDAhPT1yLml0ZW1zW2ldKXthPXIuaXRlbXNbaV07YnJlYWt9ci5pbmRleD1pLGU+Pj0xLHQ+Pj0xLG4rK31uLS0sKHI9dGhpcy5sZXZlbHNbbl0pLml0ZW1zW3IuaW5kZXhdPWEsdGhpcy5jdXJyZW50TGV2ZWw9bixkZWxldGUgdGhpcy52YWx1ZX19LHtrZXk6ImluY3JlbWVudFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtlLml0ZW1zW2UuaW5kZXhdKyt9fSx7a2V5OiJuZXh0TGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXSxyPXQuaXRlbXNbdC5pbmRleF07cmV0dXJuLS1lPDA/KHRoaXMudmFsdWU9ciwhMSk6KHRoaXMuY3VycmVudExldmVsPWUsKHQ9dGhpcy5sZXZlbHNbZV0pLml0ZW1zW3QuaW5kZXhdPXIsITApfX1dKSxlfSgpLFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt1KHRoaXMsZSk7dmFyIGE9KDAsaS5sb2cyKShNYXRoLm1heCh0LHIpKSsxO3RoaXMubGV2ZWxzPVtdO2Zvcih2YXIgbz0wO288YTtvKyspe2Zvcih2YXIgcz1uZXcgVWludDhBcnJheSh0KnIpLGM9MCxsPXMubGVuZ3RoO2M8bDtjKyspc1tjXT1uO3ZhciBmPXt3aWR0aDp0LGhlaWdodDpyLGl0ZW1zOnN9O3RoaXMubGV2ZWxzLnB1c2goZiksdD1NYXRoLmNlaWwodC8yKSxyPU1hdGguY2VpbChyLzIpfX1yZXR1cm4gYyhlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGE9dGhpcy5sZXZlbHNbbl0saT1lK3QqYS53aWR0aDthLmluZGV4PWk7dmFyIG89YS5pdGVtc1tpXTtpZigyNTU9PT1vKWJyZWFrO2lmKG8+cilyZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bix0aGlzLnByb3BhZ2F0ZVZhbHVlcygpLCExO2U+Pj0xLHQ+Pj0xLG4rK31yZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bi0xLCEwfX0se2tleToiaW5jcmVtZW50VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTt0Lml0ZW1zW3QuaW5kZXhdPWUrMSx0aGlzLnByb3BhZ2F0ZVZhbHVlcygpfX0se2tleToicHJvcGFnYXRlVmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRMZXZlbCx0PXRoaXMubGV2ZWxzW2VdLHI9dC5pdGVtc1t0LmluZGV4XTstLWU+PTA7KSh0PXRoaXMubGV2ZWxzW2VdKS5pdGVtc1t0LmluZGV4XT1yfX0se2tleToibmV4dExldmVsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV0scj10Lml0ZW1zW3QuaW5kZXhdO3JldHVybiB0Lml0ZW1zW3QuaW5kZXhdPTI1NSwhKC0tZTwwfHwodGhpcy5jdXJyZW50TGV2ZWw9ZSwodD10aGlzLmxldmVsc1tlXSkuaXRlbXNbdC5pbmRleF09ciwwKSl9fV0pLGV9KCksJD0oTD0xNyxSPW5ldyBVaW50OEFycmF5KFswLDUsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDEsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOF0pLE49bmV3IFVpbnQ4QXJyYXkoWzAsMyw0LDAsNSw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMSwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4XSksRD1uZXcgVWludDhBcnJheShbMCwxLDIsMCwxLDIsMiwwLDIsMiwyLDAsMCwwLDAsMCwzLDQsNSwwLDQsNSw1LDAsNSw1LDUsMCwwLDAsMCwwLDYsNyw3LDAsNyw3LDcsMCw3LDcsNywwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDhdKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpKXt2YXIgbzt1KHRoaXMsZSksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsbz0iSEgiPT09bj9EOiJITCI9PT1uP046Uix0aGlzLmNvbnRleHRMYWJlbFRhYmxlPW87dmFyIHMsYz10KnI7dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkoYyksdGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkoYykscz1pPjE0P25ldyBVaW50MzJBcnJheShjKTppPjY/bmV3IFVpbnQxNkFycmF5KGMpOm5ldyBVaW50OEFycmF5KGMpLHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU9cyx0aGlzLnByb2Nlc3NpbmdGbGFncz1uZXcgVWludDhBcnJheShjKTt2YXIgbD1uZXcgVWludDhBcnJheShjKTtpZigwIT09YSlmb3IodmFyIGY9MDtmPGM7ZisrKWxbZl09YTt0aGlzLmJpdHNEZWNvZGVkPWwsdGhpcy5yZXNldCgpfXJldHVybiBjKGUsW3trZXk6InNldERlY29kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGVjb2Rlcj1lfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0cz1uZXcgSW50OEFycmF5KDE5KSx0aGlzLmNvbnRleHRzWzBdPTgsdGhpcy5jb250ZXh0c1sxN109OTIsdGhpcy5jb250ZXh0c1sxOF09Nn19LHtrZXk6InNldE5laWdoYm9yc1NpZ25pZmljYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsaT10aGlzLndpZHRoLG89dGhpcy5oZWlnaHQscz10PjAsYz10KzE8aTtlPjAmJihuPXItaSxzJiYoYVtuLTFdKz0xNiksYyYmKGFbbisxXSs9MTYpLGFbbl0rPTQpLGUrMTxvJiYobj1yK2kscyYmKGFbbi0xXSs9MTYpLGMmJihhW24rMV0rPTE2KSxhW25dKz00KSxzJiYoYVtyLTFdKz0xKSxjJiYoYVtyKzFdKz0xKSxhW3JdfD0xMjh9fSx7a2V5OiJydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgscj10aGlzLmhlaWdodCxuPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsYT10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG89dGhpcy5wcm9jZXNzaW5nRmxhZ3Mscz10aGlzLmNvbnRleHRzLGM9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSx1PXRoaXMuYml0c0RlY29kZWQsbD0wO2w8cjtsKz00KWZvcih2YXIgZj0wO2Y8dDtmKyspZm9yKHZhciBoPWwqdCtmLGQ9MDtkPDQ7ZCsrLGgrPXQpe3ZhciBwPWwrZDtpZihwPj1yKWJyZWFrO2lmKG9baF0mPS0yLCFuW2hdJiZpW2hdKXt2YXIgZz1jW2lbaF1dO2lmKGUucmVhZEJpdChzLGcpKXt2YXIgdj10aGlzLmRlY29kZVNpZ25CaXQocCxmLGgpO2FbaF09dixuW2hdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UocCxmLGgpLG9baF18PTJ9dVtoXSsrLG9baF18PTF9fX19LHtrZXk6ImRlY29kZVNpZ25CaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdT10aGlzLndpZHRoLGw9dGhpcy5oZWlnaHQsZj10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLGg9dGhpcy5jb2VmZmljZW50c1NpZ247bz10PjAmJjAhPT1mW3ItMV0sdCsxPHUmJjAhPT1mW3IrMV0/KGk9aFtyKzFdLG49bz8xLWktKGE9aFtyLTFdKToxLWktaSk6bj1vPzEtKGE9aFtyLTFdKS1hOjA7dmFyIGQ9MypuO3JldHVybiBvPWU+MCYmMCE9PWZbci11XSxlKzE8bCYmMCE9PWZbcit1XT8oaT1oW3IrdV0sbj1vPzEtaS0oYT1oW3ItdV0pK2Q6MS1pLWkrZCk6bj1vPzEtKGE9aFtyLXVdKS1hK2Q6ZCxuPj0wPyhzPTkrbixjPXRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMscykpOihzPTktbixjPTFedGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyxzKSksY319LHtrZXk6InJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsaT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxvPXRoaXMuY29udGV4dHMscz10aGlzLmJpdHNEZWNvZGVkLGM9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsdT1yKm4sbD00KnIsZj0wO2Y8dTtmPWUpe2U9TWF0aC5taW4odSxmK2wpO2Zvcih2YXIgaD0wO2g8cjtoKyspZm9yKHZhciBkPWYraDtkPGU7ZCs9cilpZihhW2RdJiYwPT0oMSZjW2RdKSl7dmFyIHA9MTY7MCE9KDImY1tkXSkmJihjW2RdXj0yLHA9MD09KDEyNyZpW2RdKT8xNToxNCk7dmFyIGc9dC5yZWFkQml0KG8scCk7YVtkXT1hW2RdPDwxfGcsc1tkXSsrLGNbZF18PTF9fX19LHtrZXk6InJ1bkNsZWFudXBQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxvPXRoaXMuY29lZmZpY2VudHNTaWduLHM9dGhpcy5jb250ZXh0cyxjPXRoaXMuY29udGV4dExhYmVsVGFibGUsdT10aGlzLmJpdHNEZWNvZGVkLGw9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsZj1yLGg9MipyLGQ9MypyLHA9MDtwPG47cD1lKXtlPU1hdGgubWluKHArNCxuKTtmb3IodmFyIGc9cCpyLHY9cCszPG4seT0wO3k8cjt5Kyspe3ZhciBtPWcreSxiPTAsdz1tLGs9cCxTPXZvaWQgMDtpZih2JiYwPT09bFttXSYmMD09PWxbbStmXSYmMD09PWxbbStoXSYmMD09PWxbbStkXSYmMD09PWFbbV0mJjA9PT1hW20rZl0mJjA9PT1hW20raF0mJjA9PT1hW20rZF0pe2lmKCF0LnJlYWRCaXQocywxOCkpe3VbbV0rKyx1W20rZl0rKyx1W20raF0rKyx1W20rZF0rKztjb250aW51ZX0wIT0oYj10LnJlYWRCaXQocyxMKTw8MXx0LnJlYWRCaXQocyxMKSkmJihrPXArYix3Kz1iKnIpLFM9dGhpcy5kZWNvZGVTaWduQml0KGsseSx3KSxvW3ddPVMsaVt3XT0xLHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGsseSx3KSxsW3ddfD0yLHc9bTtmb3IodmFyIHg9cDt4PD1rO3grKyx3Kz1yKXVbd10rKztiKyt9Zm9yKGs9cCtiO2s8ZTtrKyssdys9cilpZighaVt3XSYmMD09KDEmbFt3XSkpe3ZhciBPPWNbYVt3XV07MT09PXQucmVhZEJpdChzLE8pJiYoUz10aGlzLmRlY29kZVNpZ25CaXQoayx5LHcpLG9bd109UyxpW3ddPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2Uoayx5LHcpLGxbd118PTIpLHVbd10rK319fX19LHtrZXk6ImNoZWNrU2VnbWVudGF0aW9uU3ltYm9sIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMuY29udGV4dHM7aWYoMTAhPShlLnJlYWRCaXQodCxMKTw8M3xlLnJlYWRCaXQodCxMKTw8MnxlLnJlYWRCaXQodCxMKTw8MXxlLnJlYWRCaXQodCxMKSkpdGhyb3cgbmV3IHAoIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX1dKSxlfSgpKSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIFRyYW5zZm9ybS4iKX1yZXR1cm4gYyhlLFt7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49ZVswXSxhPTEsaT1lLmxlbmd0aDthPGk7YSsrKW49dGhpcy5pdGVyYXRlKG4sZVthXSx0LHIpO3JldHVybiBufX0se2tleToiZXh0ZW5kIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dC0xLGE9dCsxLGk9dCtyLTIsbz10K3I7ZVtuLS1dPWVbYSsrXSxlW28rK109ZVtpLS1dLGVbbi0tXT1lW2ErK10sZVtvKytdPWVbaS0tXSxlW24tLV09ZVthKytdLGVbbysrXT1lW2ktLV0sZVtuXT1lW2FdLGVbb109ZVtpXX19LHtrZXk6ImZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGZpbHRlcmAgY2FsbGVkIil9fSx7a2V5OiJpdGVyYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYSxpLG8scyxjLHUsbD1lLndpZHRoLGY9ZS5oZWlnaHQsaD1lLml0ZW1zLGQ9dC53aWR0aCxwPXQuaGVpZ2h0LGc9dC5pdGVtcztmb3Iobz0wLGE9MDthPGY7YSsrKWZvcihzPTIqYSpkLGk9MDtpPGw7aSsrLG8rKyxzKz0yKWdbc109aFtvXTtoPWUuaXRlbXM9bnVsbDt2YXIgdj1uZXcgRmxvYXQzMkFycmF5KGQrOCk7aWYoMT09PWQpe2lmKDAhPSgxJnIpKWZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZClnW29dKj0uNX1lbHNlIGZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZCl2LnNldChnLnN1YmFycmF5KG8sbytkKSw0KSx0aGlzLmV4dGVuZCh2LDQsZCksdGhpcy5maWx0ZXIodiw0LGQpLGcuc2V0KHYuc3ViYXJyYXkoNCw0K2QpLG8pO3ZhciB5PTE2LG09W107Zm9yKGE9MDthPHk7YSsrKW0ucHVzaChuZXcgRmxvYXQzMkFycmF5KHArOCkpO3ZhciBiLHc9MDtpZihlPTQrcCwxPT09cCl7aWYoMCE9KDEmbikpZm9yKGM9MDtjPGQ7YysrKWdbY10qPS41fWVsc2UgZm9yKGM9MDtjPGQ7YysrKXtpZigwPT09dyl7Zm9yKHk9TWF0aC5taW4oZC1jLHkpLG89YyxzPTQ7czxlO28rPWQscysrKWZvcihiPTA7Yjx5O2IrKyltW2JdW3NdPWdbbytiXTt3PXl9dmFyIGs9bVstLXddO2lmKHRoaXMuZXh0ZW5kKGssNCxwKSx0aGlzLmZpbHRlcihrLDQscCksMD09PXcpZm9yKG89Yy15KzEscz00O3M8ZTtvKz1kLHMrKylmb3IoYj0wO2I8eTtiKyspZ1tvK2JdPW1bYl1bc119cmV0dXJue3dpZHRoOmQsaGVpZ2h0OnAsaXRlbXM6Z319fV0pLGV9KCksSD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzPXI+PjEsYz0tMS41ODYxMzQzNDIwNTk5MjQsdT0tLjA1Mjk4MDExODU3Mjk2MSxsPS44ODI5MTEwNzU1MzA5MzQsZj0uNDQzNTA2ODUyMDQzOTcxLGg9MS4yMzAxNzQxMDQ5MTQwMDE7Zm9yKG49KHR8PTApLTMsYT1zKzQ7YS0tO24rPTIpZVtuXSo9LjgxMjg5MzA2NjExNTk2MDk7Zm9yKGk9ZiplWyhuPXQtMiktMV0sYT1zKzM7YS0tJiYobz1mKmVbbisxXSxlW25dPWgqZVtuXS1pLW8sYS0tKTtuKz0yKWk9ZiplWyhuKz0yKSsxXSxlW25dPWgqZVtuXS1pLW87Zm9yKGk9bCplWyhuPXQtMSktMV0sYT1zKzI7YS0tJiYobz1sKmVbbisxXSxlW25dLT1pK28sYS0tKTtuKz0yKWk9bCplWyhuKz0yKSsxXSxlW25dLT1pK287Zm9yKGk9dSplWyhuPXQpLTFdLGE9cysxO2EtLSYmKG89dSplW24rMV0sZVtuXS09aStvLGEtLSk7bis9MilpPXUqZVsobis9MikrMV0sZVtuXS09aStvO2lmKDAhPT1zKWZvcihpPWMqZVsobj10KzEpLTFdLGE9czthLS0mJihvPWMqZVtuKzFdLGVbbl0tPWkrbyxhLS0pO24rPTIpaT1jKmVbKG4rPTIpKzFdLGVbbl0tPWkrb319XSkscn0oWCkscT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9cj4+MTtmb3Iobj10fD0wLGE9aSsxO2EtLTtuKz0yKWVbbl0tPWVbbi0xXStlW24rMV0rMj4+Mjtmb3Iobj10KzEsYT1pO2EtLTtuKz0yKWVbbl0rPWVbbi0xXStlW24rMV0+PjF9fV0pLHJ9KFgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBpPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LG8oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTFpXU3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmNhY2hlZERhdGE9MCxuLmJpdHNDYWNoZWQ9MDtmb3IodmFyIGE9NDA5NixpPXtlYXJseUNoYW5nZTpyLGNvZGVMZW5ndGg6OSxuZXh0Q29kZToyNTgsZGljdGlvbmFyeVZhbHVlczpuZXcgVWludDhBcnJheShhKSxkaWN0aW9uYXJ5TGVuZ3RoczpuZXcgVWludDE2QXJyYXkoYSksZGljdGlvbmFyeVByZXZDb2RlczpuZXcgVWludDE2QXJyYXkoYSksY3VycmVudFNlcXVlbmNlOm5ldyBVaW50OEFycmF5KGEpLGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDowfSxvPTA7bzwyNTY7KytvKWkuZGljdGlvbmFyeVZhbHVlc1tvXT1vLGkuZGljdGlvbmFyeUxlbmd0aHNbb109MTtyZXR1cm4gbi5sendTdGF0ZT1pLG59cmV0dXJuIHQ9bCwocj1be2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmJpdHNDYWNoZWQscj10aGlzLmNhY2hlZERhdGE7dDxlOyl7dmFyIG49dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09bilyZXR1cm4gdGhpcy5lb2Y9ITAsbnVsbDtyPXI8PDh8bix0Kz04fXJldHVybiB0aGlzLmJpdHNDYWNoZWQ9dC09ZSx0aGlzLmNhY2hlZERhdGE9cix0aGlzLmxhc3RDb2RlPW51bGwscj4+PnQmKDE8PGUpLTF9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49MTAyNCxhPXRoaXMubHp3U3RhdGU7aWYoYSl7dmFyIGk9YS5lYXJseUNoYW5nZSxvPWEubmV4dENvZGUscz1hLmRpY3Rpb25hcnlWYWx1ZXMsYz1hLmRpY3Rpb25hcnlMZW5ndGhzLHU9YS5kaWN0aW9uYXJ5UHJldkNvZGVzLGw9YS5jb2RlTGVuZ3RoLGY9YS5wcmV2Q29kZSxoPWEuY3VycmVudFNlcXVlbmNlLGQ9YS5jdXJyZW50U2VxdWVuY2VMZW5ndGgscD0wLGc9dGhpcy5idWZmZXJMZW5ndGgsdj10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtuKTtmb3IoZT0wO2U8NTEyO2UrKyl7dmFyIHk9dGhpcy5yZWFkQml0cyhsKSxtPWQ+MDtpZih5PDI1NiloWzBdPXksZD0xO2Vsc2V7aWYoISh5Pj0yNTgpKXtpZigyNTY9PT15KXtsPTksbz0yNTgsZD0wO2NvbnRpbnVlfXRoaXMuZW9mPSEwLGRlbGV0ZSB0aGlzLmx6d1N0YXRlO2JyZWFrfWlmKHk8bylmb3IodD0oZD1jW3ldKS0xLHI9eTt0Pj0wO3QtLSloW3RdPXNbcl0scj11W3JdO2Vsc2UgaFtkKytdPWhbMF19aWYobSYmKHVbb109ZixjW29dPWNbZl0rMSxzW29dPWhbMF0sbD0rK28raSZvK2ktMT9sOjB8TWF0aC5taW4oTWF0aC5sb2cobytpKS8uNjkzMTQ3MTgwNTU5OTQ1MysxLDEyKSksZj15LG48KHArPWQpKXtkb3tuKz01MTJ9d2hpbGUobjxwKTt2PXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK24pfWZvcih0PTA7dDxkO3QrKyl2W2crK109aFt0XX1hLm5leHRDb2RlPW8sYS5jb2RlTGVuZ3RoPWwsYS5wcmV2Q29kZT1mLGEuY3VycmVudFNlcXVlbmNlTGVuZ3RoPWQsdGhpcy5idWZmZXJMZW5ndGg9Z319fV0pJiZhKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGx9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuTFpXU3RyZWFtPXN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlByZWRpY3RvclN0cmVhbT12b2lkIDA7dmFyIGE9cigxNDgpLGk9cigxMzQpLG89cigyKTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBsKGUpfWZ1bmN0aW9uIGwoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9dmFyIGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oZCxlKTt2YXIgdCxyLG4sYSxoPShuPWQsYT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWYobik7aWYoYSl7dmFyIHI9Zih0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdSh0aGlzLGUpfSk7ZnVuY3Rpb24gZChlLHQscil7dmFyIG47aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxkKSxuPWguY2FsbCh0aGlzLHQpLCEociBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIHUobixlKTt2YXIgYT1uLnByZWRpY3Rvcj1yLmdldCgiUHJlZGljdG9yIil8fDE7aWYoYTw9MSlyZXR1cm4gdShuLGUpO2lmKDIhPT1hJiYoYTwxMHx8YT4xNSkpdGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQoYSkpO24ucmVhZEJsb2NrPTI9PT1hP24ucmVhZEJsb2NrVGlmZjpuLnJlYWRCbG9ja1BuZyxuLnN0cj1lLG4uZGljdD1lLmRpY3Q7dmFyIHM9bi5jb2xvcnM9ci5nZXQoIkNvbG9ycyIpfHwxLGM9bi5iaXRzPXIuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsZj1uLmNvbHVtbnM9ci5nZXQoIkNvbHVtbnMiKXx8MTtyZXR1cm4gbi5waXhCeXRlcz1zKmMrNz4+MyxuLnJvd0J5dGVzPWYqcypjKzc+PjMsdShuLGwobikpfXJldHVybiB0PWQsKHI9W3trZXk6InJlYWRCbG9ja1RpZmYiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMuYnVmZmVyTGVuZ3RoLHI9dGhpcy5lbnN1cmVCdWZmZXIodCtlKSxuPXRoaXMuYml0cyxhPXRoaXMuY29sb3JzLGk9dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IWkubGVuZ3RoLCF0aGlzLmVvZil7dmFyIG8scz0wLGM9MCx1PTAsbD0wLGY9dDtpZigxPT09biYmMT09PWEpZm9yKG89MDtvPGU7KytvKXt2YXIgaD1pW29dXnM7aF49aD4+MSxoXj1oPj4yLHM9KDEmKGhePWg+PjQpKTw8NyxyW2YrK109aH1lbHNlIGlmKDg9PT1uKXtmb3Iobz0wO288YTsrK28pcltmKytdPWlbb107Zm9yKDtvPGU7KytvKXJbZl09cltmLWFdK2lbb10sZisrfWVsc2UgaWYoMTY9PT1uKXt2YXIgZD0yKmE7Zm9yKG89MDtvPGQ7KytvKXJbZisrXT1pW29dO2Zvcig7bzxlO28rPTIpe3ZhciBwPSgoMjU1Jmlbb10pPDw4KSsoMjU1JmlbbysxXSkrKCgyNTUmcltmLWRdKTw8OCkrKDI1NSZyW2YtZCsxXSk7cltmKytdPXA+PjgmMjU1LHJbZisrXT0yNTUmcH19ZWxzZXt2YXIgZz1uZXcgVWludDhBcnJheShhKzEpLHY9KDE8PG4pLTEseT0wLG09dCxiPXRoaXMuY29sdW1ucztmb3Iobz0wO288YjsrK28pZm9yKHZhciB3PTA7dzxhOysrdyl1PG4mJihzPXM8PDh8MjU1JmlbeSsrXSx1Kz04KSxnW3ddPWdbd10rKHM+PnUtbikmdix1LT1uLGM9Yzw8bnxnW3ddLChsKz1uKT49OCYmKHJbbSsrXT1jPj5sLTgmMjU1LGwtPTgpO2w+MCYmKHJbbSsrXT0oYzw8OC1sKSsocyYoMTw8OC1sKS0xKSl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fX0se2tleToicmVhZEJsb2NrUG5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLnBpeEJ5dGVzLHI9dGhpcy5zdHIuZ2V0Qnl0ZSgpLG49dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IW4ubGVuZ3RoLCF0aGlzLmVvZil7dmFyIGE9dGhpcy5idWZmZXJMZW5ndGgsaT10aGlzLmVuc3VyZUJ1ZmZlcihhK2UpLHM9aS5zdWJhcnJheShhLWUsYSk7MD09PXMubGVuZ3RoJiYocz1uZXcgVWludDhBcnJheShlKSk7dmFyIGMsdSxsLGY9YTtzd2l0Y2gocil7Y2FzZSAwOmZvcihjPTA7YzxlOysrYylpW2YrK109bltjXTticmVhaztjYXNlIDE6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT1uW2NdO2Zvcig7YzxlOysrYylpW2ZdPWlbZi10XStuW2NdJjI1NSxmKys7YnJlYWs7Y2FzZSAyOmZvcihjPTA7YzxlOysrYylpW2YrK109c1tjXStuW2NdJjI1NTticmVhaztjYXNlIDM6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT0oc1tjXT4+MSkrbltjXTtmb3IoO2M8ZTsrK2MpaVtmXT0oc1tjXStpW2YtdF0+PjEpK25bY10mMjU1LGYrKzticmVhaztjYXNlIDQ6Zm9yKGM9MDtjPHQ7KytjKXU9c1tjXSxsPW5bY10saVtmKytdPXUrbDtmb3IoO2M8ZTsrK2Mpe3U9c1tjXTt2YXIgaD1zW2MtdF0sZD1pW2YtdF0scD1kK3UtaCxnPXAtZDtnPDAmJihnPS1nKTt2YXIgdj1wLXU7djwwJiYodj0tdik7dmFyIHk9cC1oO3k8MCYmKHk9LXkpLGw9bltjXSxpW2YrK109Zzw9diYmZzw9eT9kK2w6djw9eT91K2w6aCtsfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQocikpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZH0oYS5EZWNvZGVTdHJlYW0pO3QuUHJlZGljdG9yU3RyZWFtPWh9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5SdW5MZW5ndGhTdHJlYW09dm9pZCAwO3ZhciBzPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZpKGUsdCl9KGwsZSk7dmFyIHQscixzLGMsdT0ocz1sLGM9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1vKHMpO2lmKGMpe3ZhciByPW8odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwocj11LmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyfXJldHVybiB0PWwsKHI9W3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl0aGlzLmVvZj0hMDtlbHNle3ZhciB0LHI9dGhpcy5idWZmZXJMZW5ndGgsbj1lWzBdO2lmKG48MTI4KXtpZigodD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSkpW3IrK109ZVsxXSxuPjApe3ZhciBhPXRoaXMuc3RyLmdldEJ5dGVzKG4pO3Quc2V0KGEscikscis9bn19ZWxzZXtuPTI1Ny1uO3ZhciBpPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSk7Zm9yKHZhciBvPTA7bzxuO28rKyl0W3IrK109aX10aGlzLmJ1ZmZlckxlbmd0aD1yfX19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5SdW5MZW5ndGhTdHJlYW09c30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnQ9dC5FcnJvckZvbnQ9dm9pZCAwO3ZhciBuPXIoMiksYT1yKDE2NCksaT1yKDE2Nyksbz1yKDE2OSkscz1yKDE2OCksYz1yKDE2NiksdT1yKDE3MCksbD1yKDE3MSksZj1yKDE3MiksaD1yKDE3MyksZD1yKDE3NCkscD1yKDE3NSksZz1yKDE0NSksdj1yKDE3NikseT1yKDEzNSksbT1yKDEzOSksYj1yKDE3Nyk7ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxTKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBrKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1TKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBTKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB4KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/eChlLHQpOnZvaWQgMH19ZnVuY3Rpb24geChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09TyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PU8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1PKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBGKGUsdCxyKXtyZXR1cm4gdCYmQyhlLnByb3RvdHlwZSx0KSxyJiZDKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgUD1bWzU3MzQ0LDYzNzQzXSxbMTA0ODU3NiwxMTE0MTA5XV0sVD0xZTMsST1bImFzY2VudCIsImJib3giLCJibGFjayIsImJvbGQiLCJjaGFyUHJvY09wZXJhdG9yTGlzdCIsImNvbXBvc2l0ZSIsImNzc0ZvbnRJbmZvIiwiZGF0YSIsImRlZmF1bHRWTWV0cmljcyIsImRlZmF1bHRXaWR0aCIsImRlc2NlbnQiLCJmYWxsYmFja05hbWUiLCJmb250TWF0cml4IiwiZm9udFR5cGUiLCJpc0ludmFsaWRQREZqc0ZvbnQiLCJpc1R5cGUzRm9udCIsIml0YWxpYyIsImxvYWRlZE5hbWUiLCJtaW1ldHlwZSIsIm1pc3NpbmdGaWxlIiwibmFtZSIsInJlbWVhc3VyZSIsInN1YnR5cGUiLCJ0eXBlIiwidmVydGljYWwiXSxFPVsiY01hcCIsImRlZmF1bHRFbmNvZGluZyIsImRpZmZlcmVuY2VzIiwiaXNNb25vc3BhY2UiLCJpc1NlcmlmRm9udCIsImlzU3ltYm9saWNGb250Iiwic2VhY01hcCIsInRvRm9udENoYXIiLCJ0b1VuaWNvZGUiLCJ2bWV0cmljcyIsIndpZHRocyJdO2Z1bmN0aW9uIGooZSl7aWYoZS5mb250TWF0cml4JiZlLmZvbnRNYXRyaXhbMF0hPT1uLkZPTlRfSURFTlRJVFlfTUFUUklYWzBdKXt2YXIgdD0uMDAxL2UuZm9udE1hdHJpeFswXSxyPWUud2lkdGhzO2Zvcih2YXIgYSBpbiByKXJbYV0qPXQ7ZS5kZWZhdWx0V2lkdGgqPXR9fWZ1bmN0aW9uIE0oZSl7aWYoZS5mYWxsYmFja1RvVW5pY29kZSYmIShlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXApKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZS5mYWxsYmFja1RvVW5pY29kZSllLnRvVW5pY29kZS5oYXMocil8fCh0W3JdPWUuZmFsbGJhY2tUb1VuaWNvZGVbcl0pO3QubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHQpfX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpLG8scyxjLHUpe0EodGhpcyxlKSx0aGlzLm9yaWdpbmFsQ2hhckNvZGU9dCx0aGlzLmZvbnRDaGFyPXIsdGhpcy51bmljb2RlPW4sdGhpcy5hY2NlbnQ9YSx0aGlzLndpZHRoPWksdGhpcy52bWV0cmljPW8sdGhpcy5vcGVyYXRvckxpc3RJZD1zLHRoaXMuaXNTcGFjZT1jLHRoaXMuaXNJbkZvbnQ9dX1yZXR1cm4gRihlLFt7a2V5OiJjYXRlZ29yeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNhdGVnb3J5IiwoMCxvLmdldENoYXJVbmljb2RlQ2F0ZWdvcnkpKHRoaXMudW5pY29kZSksITApfX0se2tleToibm9ybWFsaXplZFVuaWNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJub3JtYWxpemVkVW5pY29kZSIsKDAsby5yZXZlcnNlSWZSdGwpKGUuX05vcm1hbGl6ZWRVbmljb2Rlc1t0aGlzLnVuaWNvZGVdfHx0aGlzLnVuaWNvZGUpLCEwKX19XSxbe2tleToiX05vcm1hbGl6ZWRVbmljb2RlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIl9Ob3JtYWxpemVkVW5pY29kZXMiLCgwLG8uZ2V0Tm9ybWFsaXplZFVuaWNvZGVzKSgpKX19XSksZX0oKTtmdW5jdGlvbiBMKGUsdCl7cmV0dXJuKGU8PDgpK3R9ZnVuY3Rpb24gUihlLHQscil7ZVt0KzFdPXIsZVt0XT1yPj4+OH1mdW5jdGlvbiBOKGUsdCl7dmFyIHI9KGU8PDgpK3Q7cmV0dXJuIDMyNzY4JnI/ci02NTUzNjpyfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIGU+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KSxTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiJ0dGNmIj09PSgwLG4uYnl0ZXNUb1N0cmluZykodCl9ZnVuY3Rpb24gJChlLHQpe2Zvcih2YXIgciBpbiB0KWVbK3JdPXRbcl19ZnVuY3Rpb24gWChlLHQscil7Zm9yKHZhciBuLGE9W10saT0wLHM9ZS5sZW5ndGg7aTxzO2krKyktMSE9PShuPSgwLG8uZ2V0VW5pY29kZUZvckdseXBoKShlW2ldLHQpKSYmKGFbaV09bik7Zm9yKHZhciBjIGluIHIpLTEhPT0obj0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkocltjXSx0KSkmJihhWytjXT1uKTtyZXR1cm4gYX1mdW5jdGlvbiBIKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gdC5jaGFyQ29kZUF0KDApO2Nhc2UgMjpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPDw4fHQuY2hhckNvZGVBdCgxKX12YXIgYT0iVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgIi5jb25jYXQoZSwnKTogIicpLmNvbmNhdCh0LCciLicpO2lmKHIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYSk7cmV0dXJuKDAsbi53YXJuKShhKSx0fWZ1bmN0aW9uIHEoZSx0LHIsYSl7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKSxvPW5ldyBNYXAscz1bXSxjPW5ldyBTZXQsdT0wLGw9UFt1XVswXSxmPWwsaD1QW3VdWzFdO2Zvcih2YXIgZCBpbiBlKXt2YXIgcD1lW2R8PTBdO2lmKHQocCkpe2lmKGY+aCl7aWYoKyt1Pj1QLmxlbmd0aCl7KDAsbi53YXJuKSgiUmFuIG91dCBvZiBzcGFjZSBpbiBmb250IHByaXZhdGUgdXNlIGFyZWEuIik7YnJlYWt9Zj1QW3VdWzBdLGg9UFt1XVsxXX12YXIgZz1mKys7MD09PXAmJihwPXIpO3ZhciB2PWEuZ2V0KGQpOyJzdHJpbmciPT10eXBlb2YgdiYmKHY9di5jb2RlUG9pbnRBdCgwKSksdiYmdjxsJiYhYy5oYXMocCkmJihvLnNldCh2LHApLGMuYWRkKHApKSxpW2ddPXAsc1tkXT1nfX1yZXR1cm57dG9Gb250Q2hhcjpzLGNoYXJDb2RlVG9HbHlwaElkOmksdG9Vbmljb2RlRXh0cmFNYXA6byxuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlOmZ9fWZ1bmN0aW9uIEcoZSx0LHIpe3ZhciBhLGksbyxzLGM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtdO2Zvcih2YXIgYSBpbiBlKWVbYV0+PXJ8fG4ucHVzaCh7Zm9udENoYXJDb2RlOjB8YSxnbHlwaElkOmVbYV19KTtpZih0KXt2YXIgaSxvPWsodCk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz13KGkudmFsdWUsMiksYz1zWzBdLHU9c1sxXTt1Pj1yfHxuLnB1c2goe2ZvbnRDaGFyQ29kZTpjLGdseXBoSWQ6dX0pfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19MD09PW4ubGVuZ3RoJiZuLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pLG4uc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Zm9yKHZhciBsPVtdLGY9bi5sZW5ndGgsaD0wO2g8Zjspe3ZhciBkPW5baF0uZm9udENoYXJDb2RlLHA9W25baF0uZ2x5cGhJZF07KytoO2Zvcih2YXIgZz1kO2g8ZiYmZysxPT09bltoXS5mb250Q2hhckNvZGUmJihwLnB1c2gobltoXS5nbHlwaElkKSwrK2gsNjU1MzUhPSsrZyk7KTtsLnB1c2goW2QsZyxwXSl9cmV0dXJuIGx9KGUsdCxyKSx1PWMuYXQoLTEpWzFdPjY1NTM1PzI6MSxsPSJcMFwwIitEKHUpKyJcMANcMAEiKygwLG4uc3RyaW5nMzIpKDQrOCp1KTtmb3IoYT1jLmxlbmd0aC0xO2E+PTAmJiEoY1thXVswXTw9NjU1MzUpOy0tYSk7dmFyIGY9YSsxO2NbYV1bMF08NjU1MzUmJjY1NTM1PT09Y1thXVsxXSYmKGNbYV1bMV09NjU1MzQpO3ZhciBoLGQscCxnLHk9Y1thXVsxXTw2NTUzNT8xOjAsbT1mK3ksYj12Lk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG0sMiksUz0iIix4PSIiLE89IiIsQT0iIixDPSIiLEY9MDtmb3IoYT0wLGk9ZjthPGk7YSsrKXtkPShoPWNbYV0pWzBdLHA9aFsxXSxTKz1EKGQpLHgrPUQocCk7dmFyIFA9ITA7Zm9yKG89MSxzPShnPWhbMl0pLmxlbmd0aDtvPHM7KytvKWlmKGdbb10hPT1nW28tMV0rMSl7UD0hMTticmVha31pZihQKU8rPUQoZ1swXS1kJjY1NTM1KSxBKz1EKDApO2Vsc2V7dmFyIFQ9MioobS1hKSsyKkY7Zm9yKEYrPXAtZCsxLE8rPUQoMCksQSs9RChUKSxvPTAscz1nLmxlbmd0aDtvPHM7KytvKUMrPUQoZ1tvXSl9fXk+MCYmKHgrPSLDv8O/IixTKz0iw7/DvyIsTys9IlwwASIsQSs9IlwwXDAiKTt2YXIgST0iXDBcMCIrRCgyKm0pK0QoYi5yYW5nZSkrRChiLmVudHJ5KStEKGIucmFuZ2VTaGlmdCkreCsiXDBcMCIrUytPK0ErQyxFPSIiLGo9IiI7aWYodT4xKXtmb3IobCs9IlwwA1wwXG4iKygwLG4uc3RyaW5nMzIpKDQrOCp1KzQrSS5sZW5ndGgpLEU9IiIsYT0wLGk9Yy5sZW5ndGg7YTxpO2ErKyl7ZD0oaD1jW2FdKVswXTt2YXIgTT0oZz1oWzJdKVswXTtmb3Iobz0xLHM9Zy5sZW5ndGg7bzxzOysrbylnW29dIT09Z1tvLTFdKzEmJihwPWhbMF0rby0xLEUrPSgwLG4uc3RyaW5nMzIpKGQpKygwLG4uc3RyaW5nMzIpKHApKygwLG4uc3RyaW5nMzIpKE0pLGQ9cCsxLE09Z1tvXSk7RSs9KDAsbi5zdHJpbmczMikoZCkrKDAsbi5zdHJpbmczMikoaFsxXSkrKDAsbi5zdHJpbmczMikoTSl9aj0iXDBcZlwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoKzE2KSsiXDBcMFwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoLzEyKX1yZXR1cm4gbCsiXDAEIitEKEkubGVuZ3RoKzQpK0kraitFfWZ1bmN0aW9uIHooZSx0LHIpe3I9cnx8e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH07dmFyIGE9MCxpPTAscz0wLGM9MCx1PW51bGwsbD0wO2lmKHQpe2Zvcih2YXIgZiBpbiB0KXsodT4oZnw9MCl8fCF1KSYmKHU9ZiksbDxmJiYobD1mKTt2YXIgaD0oMCxvLmdldFVuaWNvZGVSYW5nZUZvcikoZik7aWYoaDwzMilhfD0xPDxoO2Vsc2UgaWYoaDw2NClpfD0xPDxoLTMyO2Vsc2UgaWYoaDw5NilzfD0xPDxoLTY0O2Vsc2V7aWYoIShoPDEyMykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuaWNvZGUgcmFuZ2VzIEJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSIpO2N8PTE8PGgtOTZ9fWw+NjU1MzUmJihsPTY1NTM1KX1lbHNlIHU9MCxsPTI1NTt2YXIgZD1lLmJib3h8fFswLDAsMCwwXSxwPXIudW5pdHNQZXJFbXx8MS8oZS5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSxnPWUuYXNjZW50U2NhbGVkPzE6cC9ULHY9ci5hc2NlbnR8fE1hdGgucm91bmQoZyooZS5hc2NlbnR8fGRbM10pKSx5PXIuZGVzY2VudHx8TWF0aC5yb3VuZChnKihlLmRlc2NlbnR8fGRbMV0pKTt5PjAmJmUuZGVzY2VudD4wJiZkWzFdPDAmJih5PS15KTt2YXIgbT1yLnlNYXh8fHYsYj0tci55TWlufHwteTtyZXR1cm4iXDADAiQBw7RcMAVcMFwwAsKKAsK7XDBcMFwwwowCwooCwrtcMFwwAcOfXHgwMDEBAlwwXDBcMFwwBiIrU3RyaW5nLmZyb21DaGFyQ29kZShlLmZpeGVkUGl0Y2g/OTowKSsiXDBcMFwwXDBcMFwwIisoMCxuLnN0cmluZzMyKShhKSsoMCxuLnN0cmluZzMyKShpKSsoMCxuLnN0cmluZzMyKShzKSsoMCxuLnN0cmluZzMyKShjKSsiKjIxKiIrRChlLml0YWxpY0FuZ2xlPzE6MCkrRCh1fHxlLmZpcnN0Q2hhcikrRChsfHxlLmxhc3RDaGFyKStEKHYpK0QoeSkrIlwwZCIrRChtKStEKGIpKyJcMFwwXDBcMFwwXDBcMFwwIitEKGUueEhlaWdodCkrRChlLmNhcEhlaWdodCkrRCgwKStEKHV8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBXKGUpe3ZhciB0PU1hdGguZmxvb3IoZS5pdGFsaWNBbmdsZSpNYXRoLnBvdygyLDE2KSk7cmV0dXJuIlwwA1wwXDAiKygwLG4uc3RyaW5nMzIpKHQpKyJcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoZS5maXhlZFBpdGNoPzE6MCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn1mdW5jdGlvbiBWKGUpe3JldHVybiBlLnJlcGxhY2UoL1teXHgyMS1ceDdFXXxbW1xdKCl7fTw+LyVdL2csIiIpLnNsaWNlKDAsNjMpfWZ1bmN0aW9uIFkoZSx0KXt0fHwodD1bW10sW11dKTt2YXIgcixuLGEsaSxvLHM9W3RbMF1bMF18fCJPcmlnaW5hbCBsaWNlbmNlIix0WzBdWzFdfHxlLHRbMF1bMl18fCJVbmtub3duIix0WzBdWzNdfHwidW5pcXVlSUQiLHRbMF1bNF18fGUsdFswXVs1XXx8IlZlcnNpb24gMC4xMSIsdFswXVs2XXx8VihlKSx0WzBdWzddfHwiVW5rbm93biIsdFswXVs4XXx8IlVua25vd24iLHRbMF1bOV18fCJVbmtub3duIl0sYz1bXTtmb3Iocj0wLG49cy5sZW5ndGg7cjxuO3IrKyl7dmFyIHU9W107Zm9yKGE9MCxpPShvPXRbMV1bcl18fHNbcl0pLmxlbmd0aDthPGk7YSsrKXUucHVzaChEKG8uY2hhckNvZGVBdChhKSkpO2MucHVzaCh1LmpvaW4oIiIpKX12YXIgbD1bcyxjXSxmPVsiXDABIiwiXDADIl0saD1bIlwwXDAiLCJcMAEiXSxkPVsiXDBcMCIsIgRcdCJdLHA9cy5sZW5ndGgqZi5sZW5ndGgsZz0iXDBcMCIrRChwKStEKDEyKnArNiksdj0wO2ZvcihyPTAsbj1mLmxlbmd0aDtyPG47cisrKXt2YXIgeT1sW3JdO2ZvcihhPTAsaT15Lmxlbmd0aDthPGk7YSsrKW89eVthXSxnKz1mW3JdK2hbcl0rZFtyXStEKGEpK0Qoby5sZW5ndGgpK0Qodiksdis9by5sZW5ndGh9cmV0dXJuIGcrKHMuam9pbigiIikrYy5qb2luKCIiKSl9dmFyIEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixhKXtBKHRoaXMsZSksdGhpcy5uYW1lPXQsdGhpcy5wc05hbWU9bnVsbCx0aGlzLm1pbWV0eXBlPW51bGwsdGhpcy5kaXNhYmxlRm9udEZhY2U9ITEsdGhpcy5sb2FkZWROYW1lPWEubG9hZGVkTmFtZSx0aGlzLmlzVHlwZTNGb250PWEuaXNUeXBlM0ZvbnQsdGhpcy5taXNzaW5nRmlsZT0hMSx0aGlzLmNzc0ZvbnRJbmZvPWEuY3NzRm9udEluZm8sdGhpcy5fY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2dseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgbz0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlNlcmlmKTtpZighbyYmIWEuaXNTaW11bGF0ZWRGbGFncyl7dmFyIHMsYz10LnJlcGxhY2UoL1ssX10vZywiLSIpLnNwbGl0KCItIilbMF0sbD0oMCx1LmdldFNlcmlmRm9udHMpKCksaD1rKGMuc3BsaXQoIisiKSk7dHJ5e2ZvcihoLnMoKTshKHM9aC5uKCkpLmRvbmU7KWlmKGxbcy52YWx1ZV0pe289ITA7YnJlYWt9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX10aGlzLmlzU2VyaWZGb250PW8sdGhpcy5pc1N5bWJvbGljRm9udD0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlN5bWJvbGljKSx0aGlzLmlzTW9ub3NwYWNlPSEhKGEuZmxhZ3MmaS5Gb250RmxhZ3MuRml4ZWRQaXRjaCk7dmFyIGQ9YS50eXBlLHA9YS5zdWJ0eXBlO3RoaXMudHlwZT1kLHRoaXMuc3VidHlwZT1wO3ZhciBnPXQubWF0Y2goL15JbnZhbGlkUERGanNGb250XyguKilfXGQrJC8pO2lmKHRoaXMuaXNJbnZhbGlkUERGanNGb250PSEhZyx0aGlzLmlzSW52YWxpZFBERmpzRm9udD90aGlzLmZhbGxiYWNrTmFtZT1nWzFdOnRoaXMuaXNNb25vc3BhY2U/dGhpcy5mYWxsYmFja05hbWU9Im1vbm9zcGFjZSI6dGhpcy5pc1NlcmlmRm9udD90aGlzLmZhbGxiYWNrTmFtZT0ic2VyaWYiOnRoaXMuZmFsbGJhY2tOYW1lPSJzYW5zLXNlcmlmIix0aGlzLmRpZmZlcmVuY2VzPWEuZGlmZmVyZW5jZXMsdGhpcy53aWR0aHM9YS53aWR0aHMsdGhpcy5kZWZhdWx0V2lkdGg9YS5kZWZhdWx0V2lkdGgsdGhpcy5jb21wb3NpdGU9YS5jb21wb3NpdGUsdGhpcy5jTWFwPWEuY01hcCx0aGlzLmNhcEhlaWdodD1hLmNhcEhlaWdodC9ULHRoaXMuYXNjZW50PWEuYXNjZW50L1QsdGhpcy5kZXNjZW50PWEuZGVzY2VudC9ULHRoaXMubGluZUhlaWdodD10aGlzLmFzY2VudC10aGlzLmRlc2NlbnQsdGhpcy5mb250TWF0cml4PWEuZm9udE1hdHJpeCx0aGlzLmJib3g9YS5iYm94LHRoaXMuZGVmYXVsdEVuY29kaW5nPWEuZGVmYXVsdEVuY29kaW5nLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMudG9Gb250Q2hhcj1bXSwiVHlwZTMiIT09YS50eXBlKXtpZih0aGlzLmNpZEVuY29kaW5nPWEuY2lkRW5jb2Rpbmd8fCIiLHRoaXMudmVydGljYWw9ISFhLnZlcnRpY2FsLHRoaXMudmVydGljYWwmJih0aGlzLnZtZXRyaWNzPWEudm1ldHJpY3MsdGhpcy5kZWZhdWx0Vk1ldHJpY3M9YS5kZWZhdWx0Vk1ldHJpY3MpLCFyfHxyLmlzRW1wdHkpcmV0dXJuIHImJigwLG4ud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJyt0KyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpLHZvaWQgdGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChhKTt2YXIgdixtPXcoZnVuY3Rpb24oZSx0KXt2YXIgcixhLGk9dC50eXBlLG89dC5zdWJ0eXBlLHM9dC5jb21wb3NpdGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PSgwLHkucmVhZFVpbnQzMikodCwwKXx8InRydWUiPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSl8fFUoZSk/cj1zPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIk9UVE8iPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSk/cj1zPyJDSURGb250VHlwZTIiOiJPcGVuVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoMik7cmV0dXJuIDM3PT09dFswXSYmMzM9PT10WzFdfHwxMjg9PT10WzBdJiYxPT09dFsxXX0oZSk/cj1zPyJDSURGb250VHlwZTAiOiJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpP3M/KHI9IkNJREZvbnRUeXBlMCIsYT0iQ0lERm9udFR5cGUwQyIpOihyPSJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSIsYT0iVHlwZTFDIik6KCgwLG4ud2FybikoImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIikscj1pLGE9byksW3IsYV19KHIsYSksMik7ZD1tWzBdLHA9bVsxXSxkPT09dGhpcy50eXBlJiZwPT09dGhpcy5zdWJ0eXBlfHwoMCxuLmluZm8pKCJJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICIrIiIuY29uY2F0KHRoaXMudHlwZSwiLyIpLmNvbmNhdCh0aGlzLnN1YnR5cGUsIiBidXQgZm91bmQ6ICIpLmNvbmNhdChkLCIvIikuY29uY2F0KHAsIi4iKSk7dHJ5e3N3aXRjaChkKXtjYXNlIk1NVHlwZTEiOigwLG4uaW5mbykoIk1NVHlwZTEgZm9udCAoIit0KyIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuIik7Y2FzZSJUeXBlMSI6Y2FzZSJDSURGb250VHlwZTAiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO3ZhciBTPSJUeXBlMUMiPT09cHx8IkNJREZvbnRUeXBlMEMiPT09cD9uZXcgZi5DRkZGb250KHIsYSk6bmV3IGIuVHlwZTFGb250KHQscixhKTtqKGEpLHY9dGhpcy5jb252ZXJ0KHQsUyxhKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSIsdj10aGlzLmNoZWNrQW5kUmVwYWlyKHQscixhKSx0aGlzLmlzT3BlblR5cGUmJihqKGEpLGQ9Ik9wZW5UeXBlIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRm9udCAiLmNvbmNhdChkLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19Y2F0Y2goZSl7cmV0dXJuKDAsbi53YXJuKShlKSx2b2lkIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSl9TShhKSx0aGlzLmRhdGE9dix0aGlzLmZvbnRUeXBlPSgwLGkuZ2V0Rm9udFR5cGUpKGQscCxhLmlzU3RhbmRhcmRGb250KSx0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4LHRoaXMud2lkdGhzPWEud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPWEuZGVmYXVsdFdpZHRoLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMuc2VhY01hcD1hLnNlYWNNYXB9ZWxzZXtmb3IodmFyIHg9MDt4PDI1Njt4KyspdGhpcy50b0ZvbnRDaGFyW3hdPXRoaXMuZGlmZmVyZW5jZXNbeF18fGEuZGVmYXVsdEVuY29kaW5nW3hdO3RoaXMuZm9udFR5cGU9bi5Gb250VHlwZS5UWVBFM319cmV0dXJuIEYoZSxbe2tleToicmVuZGVyZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPWguRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcyxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJlbmRlcmVyIixlKX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXT9bXS5jb25jYXQoSSxFKTpJLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxpPWsobik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXZvaWQgMCE9PSh0PXRoaXNbZT1yLnZhbHVlXSkmJihhW2VdPXQpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0se2tleToiZmFsbGJhY2tUb1N5c3RlbUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5taXNzaW5nRmlsZT0hMDt2YXIgcj10aGlzLm5hbWUsYT10aGlzLnR5cGUsZj10aGlzLnN1YnR5cGUsaD0oMCxpLm5vcm1hbGl6ZUZvbnROYW1lKShyKSxwPSgwLHUuZ2V0U3RkRm9udE1hcCkoKSxnPSgwLHUuZ2V0Tm9uU3RkRm9udE1hcCkoKSx2PSEhcFtoXSx5PSEoIWdbaF18fCFwW2dbaF1dKTtoPXBbaF18fGdbaF18fGg7dmFyIG09KDAsZC5nZXRGb250QmFzaWNNZXRyaWNzKSgpW2hdO20mJihpc05hTih0aGlzLmFzY2VudCkmJih0aGlzLmFzY2VudD1tLmFzY2VudC9UKSxpc05hTih0aGlzLmRlc2NlbnQpJiYodGhpcy5kZXNjZW50PW0uZGVzY2VudC9UKSxpc05hTih0aGlzLmNhcEhlaWdodCkmJih0aGlzLmNhcEhlaWdodD1tLmNhcEhlaWdodC9UKSksdGhpcy5ib2xkPS9ib2xkL2dpLnRlc3QoaCksdGhpcy5pdGFsaWM9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QoaCksdGhpcy5ibGFjaz0vQmxhY2svZy50ZXN0KHIpO3ZhciBiPS9OYXJyb3cvZy50ZXN0KHIpO2lmKHRoaXMucmVtZWFzdXJlPSghdnx8YikmJk9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGg+MCwodnx8eSkmJiJDSURGb250VHlwZTIiPT09YSYmdGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKSl7dmFyIHc9ZS5jaWRUb0dpZE1hcCxrPVtdO2lmKCQoaywoMCx1LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSksL0FyaWFsLT9CbGFjay9pLnRlc3Qocik/JChrLCgwLHUuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpKTovQ2FsaWJyaS9pLnRlc3QocikmJiQoaywoMCx1LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKSksdyl7Zm9yKHZhciBTIGluIGspe3ZhciB4PWtbU107dm9pZCAwIT09d1t4XSYmKGtbK1NdPXdbeF0pfXcubGVuZ3RoIT09dGhpcy50b1VuaWNvZGUubGVuZ3RoJiZlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9a1tlXTt2b2lkIDA9PT13W3JdJiYoa1srZV09dCl9KSl9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2tbK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPWssdGhpcy50b1VuaWNvZGU9bmV3IGwuVG9Vbmljb2RlTWFwKGspfWVsc2UgaWYoL1N5bWJvbC9pLnRlc3QoaCkpdGhpcy50b0ZvbnRDaGFyPVgoYy5TeW1ib2xTZXRFbmNvZGluZywoMCxzLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZigvRGluZ2JhdHMvaS50ZXN0KGgpKS9XaW5nZGluZ3MvaS50ZXN0KHIpJiYoMCxuLndhcm4pKCJOb24tZW1iZWRkZWQgV2luZ2RpbmdzIGZvbnQsIGZhbGxpbmcgYmFjayB0byBaYXBmRGluZ2JhdHMuIiksdGhpcy50b0ZvbnRDaGFyPVgoYy5aYXBmRGluZ2JhdHNFbmNvZGluZywoMCxzLmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKHYpe3ZhciBPPVgodGhpcy5kZWZhdWx0RW5jb2RpbmcsKDAscy5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpOyJDSURGb250VHlwZTIiIT09YXx8dGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKXx8dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe09bK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPU99ZWxzZXt2YXIgQT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKCksQz1bXTt0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCF0LmNvbXBvc2l0ZSl7dmFyIG49dC5kaWZmZXJlbmNlc1tlXXx8dC5kZWZhdWx0RW5jb2RpbmdbZV0sYT0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkobixBKTstMSE9PWEmJihyPWEpfUNbK2VdPXJ9KSksdGhpcy5jb21wb3NpdGUmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCYmL1RhaG9tYXxWZXJkYW5hL2kudGVzdChyKSYmJChDLCgwLHUuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpKSx0aGlzLnRvRm9udENoYXI9Q31NKGUpLHRoaXMubG9hZGVkTmFtZT1oLnNwbGl0KCItIilbMF0sdGhpcy5mb250VHlwZT0oMCxpLmdldEZvbnRUeXBlKShhLGYsZS5pc1N0YW5kYXJkRm9udCl9fSx7a2V5OiJjaGVja0FuZFJlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPVsiT1MvMiIsImNtYXAiLCJoZWFkIiwiaGhlYSIsImhtdHgiLCJtYXhwIiwibmFtZSIsInBvc3QiLCJsb2NhIiwiZ2x5ZiIsImZwZ20iLCJwcmVwIiwiY3Z0ICIsIkNGRiAiXTtmdW5jdGlvbiB1KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyWyJPUy8yIl09bnVsbCxyLmNtYXA9bnVsbCxyLmhlYWQ9bnVsbCxyLmhoZWE9bnVsbCxyLmhtdHg9bnVsbCxyLm1heHA9bnVsbCxyLm5hbWU9bnVsbCxyLnBvc3Q9bnVsbDtmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgYT1oKGUpO28uaW5jbHVkZXMoYS50YWcpJiYwIT09YS5sZW5ndGgmJihyW2EudGFnXT1hKX1yZXR1cm4gcn1mdW5jdGlvbiBoKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLGk9ZS5wb3M7ZS5wb3M9ZS5zdGFydHx8MCxlLnNraXAobik7dmFyIG89ZS5nZXRCeXRlcyhhKTtyZXR1cm4gZS5wb3M9aSwiaGVhZCI9PT10JiYob1s4XT1vWzldPW9bMTBdPW9bMTFdPTAsb1sxN118PTMyKSx7dGFnOnQsY2hlY2tzdW06cixsZW5ndGg6YSxvZmZzZXQ6bixkYXRhOm99fWZ1bmN0aW9uIGQoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiB5KGUsdCxyLG4sYSxpKXt2YXIgbz17bGVuZ3RoOjAsc2l6ZU9mSW5zdHJ1Y3Rpb25zOjB9O2lmKHItdDw9MTIpcmV0dXJuIG87dmFyIHM9ZS5zdWJhcnJheSh0LHIpLGM9TihzWzBdLHNbMV0pO2lmKGM8MClyZXR1cm4gUihzLDAsYz0tMSksbi5zZXQocyxhKSxvLmxlbmd0aD1zLmxlbmd0aCxvO3ZhciB1LGw9MTAsZj0wO2Zvcih1PTA7dTxjO3UrKylmPTErKHNbbF08PDh8c1tsKzFdKSxsKz0yO3ZhciBoPWwsZD1zW2xdPDw4fHNbbCsxXTtvLnNpemVPZkluc3RydWN0aW9ucz1kO3ZhciBwPWwrPTIrZCxnPTA7Zm9yKHU9MDt1PGY7dSsrKXt2YXIgdj1zW2wrK107MTkyJnYmJihzW2wtMV09NjMmdik7dmFyIHk9MjsyJnY/eT0xOjE2JnYmJih5PTApO3ZhciBtPTI7NCZ2P209MTozMiZ2JiYobT0wKTt2YXIgYj15K207aWYoZys9Yiw4JnYpe3ZhciB3PXNbbCsrXTt1Kz13LGcrPXcqYn19aWYoMD09PWcpcmV0dXJuIG87dmFyIGs9bCtnO3JldHVybiBrPnMubGVuZ3RoP286IWkmJmQ+MD8obi5zZXQocy5zdWJhcnJheSgwLGgpLGEpLG4uc2V0KFswLDBdLGEraCksbi5zZXQocy5zdWJhcnJheShwLGspLGEraCsyKSxrLT1kLHMubGVuZ3RoLWs+MyYmKGs9ayszJi00KSxvLmxlbmd0aD1rLG8pOnMubGVuZ3RoLWs+Mz8oaz1rKzMmLTQsbi5zZXQocy5zdWJhcnJheSgwLGspLGEpLG8ubGVuZ3RoPWssbyk6KG4uc2V0KHMsYSksby5sZW5ndGg9cy5sZW5ndGgsbyl9ZnVuY3Rpb24gYihlKXt2YXIgcj0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9cjt2YXIgbj1bW10sW11dLGE9ZS5sZW5ndGgsaT1yK2E7aWYoMCE9PXQuZ2V0VWludDE2KCl8fGE8NilyZXR1cm4gbjt2YXIgbyxzLGM9dC5nZXRVaW50MTYoKSx1PXQuZ2V0VWludDE2KCksbD1bXTtmb3Iobz0wO288YyYmdC5wb3MrMTI8PWk7bysrKXt2YXIgZj17cGxhdGZvcm06dC5nZXRVaW50MTYoKSxlbmNvZGluZzp0LmdldFVpbnQxNigpLGxhbmd1YWdlOnQuZ2V0VWludDE2KCksbmFtZTp0LmdldFVpbnQxNigpLGxlbmd0aDp0LmdldFVpbnQxNigpLG9mZnNldDp0LmdldFVpbnQxNigpfTsoMT09PWYucGxhdGZvcm0mJjA9PT1mLmVuY29kaW5nJiYwPT09Zi5sYW5ndWFnZXx8Mz09PWYucGxhdGZvcm0mJjE9PT1mLmVuY29kaW5nJiYxMDMzPT09Zi5sYW5ndWFnZSkmJmwucHVzaChmKX1mb3Iobz0wLHM9bC5sZW5ndGg7bzxzO28rKyl7dmFyIGg9bFtvXTtpZighKGgubGVuZ3RoPD0wKSl7dmFyIGQ9cit1K2gub2Zmc2V0O2lmKCEoZCtoLmxlbmd0aD5pKSl7dC5wb3M9ZDt2YXIgcD1oLm5hbWU7aWYoaC5lbmNvZGluZyl7Zm9yKHZhciBnPSIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kz0yKWcrPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7blsxXVtwXT1nfWVsc2UgblswXVtwXT10LmdldFN0cmluZyhoLmxlbmd0aCl9fX1yZXR1cm4gbn12YXIgdyxTLHgsTyxBPVswLDAsMCwwLDAsMCwwLDAsLTIsLTIsLTIsLTIsMCwwLC0yLC01LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLC0xLC0xLDEsLTEsLTk5OSwwLDEsMCwtMSwtMiwwLC0xLC0yLC0xLC0xLDAsLTEsLTEsMCwwLC05OTksLTk5OSwtMSwtMSwtMSwtMSwtMiwtOTk5LC0yLC0yLC05OTksMCwtMiwtMiwwLDAsLTIsMCwtMiwwLDAsMCwtMiwtMSwtMSwxLDEsMCwwLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLDAsLTk5OSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwtMiwtOTk5LC05OTksLTk5OSwtOTk5LC05OTksLTEsLTEsLTIsLTIsMCwwLDAsMCwtMSwtMSwtOTk5LC0yLC0yLDAsMCwtMSwtMiwtMiwwLDAsMCwtMSwtMSwtMSwtMl07ZnVuY3Rpb24gQyhlLHQpe2Zvcih2YXIgcixhLGksbyxzLGM9ZS5kYXRhLHU9MCxsPTAsZj0wLGg9W10sZD1bXSxwPVtdLGc9dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMsdj0hMSx5PTAsbT0wLGI9Yy5sZW5ndGg7dTxiOyl7dmFyIHc9Y1t1KytdO2lmKDY0PT09dylpZihhPWNbdSsrXSx2fHxtKXUrPWE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaC5wdXNoKGNbdSsrXSk7ZWxzZSBpZig2NT09PXcpaWYoYT1jW3UrK10sdnx8bSl1Kz0yKmE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaT1jW3UrK10saC5wdXNoKGk8PDh8Y1t1KytdKTtlbHNlIGlmKDE3Nj09KDI0OCZ3KSlpZihhPXctMTc2KzEsdnx8bSl1Kz1hO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWgucHVzaChjW3UrK10pO2Vsc2UgaWYoMTg0PT0oMjQ4JncpKWlmKGE9dy0xODQrMSx2fHxtKXUrPTIqYTtlbHNlIGZvcihyPTA7cjxhO3IrKylpPWNbdSsrXSxoLnB1c2goaTw8OHxjW3UrK10pO2Vsc2UgaWYoNDMhPT13fHxnKWlmKDQ0IT09d3x8Zyl7aWYoNDU9PT13KWlmKHYpdj0hMSxsPXU7ZWxzZXtpZighKHM9ZC5wb3AoKSkpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IEVOREYgYmFkIHN0YWNrIiksdm9pZCh0LmhpbnRzVmFsaWQ9ITEpO289cC5wb3AoKSxjPXMuZGF0YSx1PXMuaSx0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW29dPWgubGVuZ3RoLXMuc3RhY2tUb3B9ZWxzZSBpZigxMzc9PT13KSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dTtlbHNlIGlmKDg4PT09dykrK3k7ZWxzZSBpZigyNz09PXcpbT15O2Vsc2UgaWYoODk9PT13KW09PT15JiYobT0wKSwtLXk7ZWxzZSBpZigyOD09PXcmJiF2JiYhbSl7dmFyIGs9aC5hdCgtMSk7az4wJiYodSs9ay0xKX19ZWxzZSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dSxvPWgucG9wKCksdC5mdW5jdGlvbnNEZWZpbmVkW29dPXtkYXRhOmMsaTp1fTtlbHNlIGlmKCF2JiYhbSlpZihvPWguYXQoLTEpLGlzTmFOKG8pKSgwLG4uaW5mbykoIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS4iKTtlbHNlIGlmKHQuZnVuY3Rpb25zVXNlZFtvXT0hMCxvIGluIHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpe3ZhciBTPWgubGVuZ3RoK3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbb107aWYoUzwwKXJldHVybigwLG4ud2FybikoIlRUOiBDQUxMIGludmFsaWQgZnVuY3Rpb25zIHN0YWNrIGRlbHRhLiIpLHZvaWQodC5oaW50c1ZhbGlkPSExKTtoLmxlbmd0aD1TfWVsc2UgaWYobyBpbiB0LmZ1bmN0aW9uc0RlZmluZWQmJiFwLmluY2x1ZGVzKG8pKXtpZihkLnB1c2goe2RhdGE6YyxpOnUsc3RhY2tUb3A6aC5sZW5ndGgtMX0pLHAucHVzaChvKSwhKHM9dC5mdW5jdGlvbnNEZWZpbmVkW29dKSlyZXR1cm4oMCxuLndhcm4pKCJUVDogQ0FMTCBub24tZXhpc3RlbnQgZnVuY3Rpb24iKSx2b2lkKHQuaGludHNWYWxpZD0hMSk7Yz1zLmRhdGEsdT1zLml9aWYoIXYmJiFtKXt2YXIgeD0wO2Zvcih3PD0xNDI/eD1BW3ddOnc+PTE5MiYmdzw9MjIzP3g9LTE6dz49MjI0JiYoeD0tMiksdz49MTEzJiZ3PD0xMTcmJihhPWgucG9wKCksaXNOYU4oYSl8fCh4PTIqLWEpKTt4PDAmJmgubGVuZ3RoPjA7KWgucG9wKCkseCsrO2Zvcig7eD4wOyloLnB1c2goTmFOKSx4LS19fXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zPWc7dmFyIE89W2NdO3U+Yy5sZW5ndGgmJk8ucHVzaChuZXcgVWludDhBcnJheSh1LWMubGVuZ3RoKSksZj5sJiYoKDAsbi53YXJuKSgiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwiKSxPLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzM0LDQ1XSkpKSxmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoPjEpe3ZhciByLG4sYT0wO2ZvcihyPTAsbj10Lmxlbmd0aDtyPG47cisrKWErPXRbcl0ubGVuZ3RoO2E9YSszJi00O3ZhciBpPW5ldyBVaW50OEFycmF5KGEpLG89MDtmb3Iocj0wLG49dC5sZW5ndGg7cjxuO3IrKylpLnNldCh0W3JdLG8pLG8rPXRbcl0ubGVuZ3RoO2UuZGF0YT1pLGUubGVuZ3RoPWF9fShlLE8pfWlmKFUodD1uZXcgbS5TdHJlYW0obmV3IFVpbnQ4QXJyYXkodC5nZXRCeXRlcygpKSkpKXt2YXIgRj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpOygwLG4uYXNzZXJ0KSgidHRjZiI9PT10LCJNdXN0IGJlIGEgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250LiIpO2Zvcih2YXIgcj1lLmdldFVpbnQxNigpLGE9ZS5nZXRVaW50MTYoKSxpPWUuZ2V0SW50MzIoKT4+PjAsbz1bXSxzPTA7czxpO3MrKylvLnB1c2goZS5nZXRJbnQzMigpPj4+MCk7dmFyIGM9e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjpyLG1pbm9yVmVyc2lvbjphLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6b307c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gYztjYXNlIDI6cmV0dXJuIGMuZHNpZ1RhZz1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ0xlbmd0aD1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ09mZnNldD1lLmdldEludDMyKCk+Pj4wLGN9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICIuY29uY2F0KHIsIi4iKSl9KGUpLGk9YS5udW1Gb250cyxvPWEub2Zmc2V0VGFibGUscz10LnNwbGl0KCIrIiksYz0wO2M8aTtjKyspe2UucG9zPShlLnN0YXJ0fHwwKStvW2NdO3ZhciBsPWQoZSksZj11KGUsbC5udW1UYWJsZXMpO2lmKCFmLm5hbWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSAibmFtZSIgdGFibGUuJyk7Zm9yKHZhciBoPWIoZi5uYW1lKSxwPTAsZz1oLmxlbmd0aDtwPGc7cCsrKWZvcih2YXIgdj0wLHk9aFtwXS5sZW5ndGg7djx5O3YrKyl7dmFyIG09aFtwXVt2XSYmaFtwXVt2XS5yZXBsYWNlKC9ccy9nLCIiKTtpZihtKXtpZihtPT09dClyZXR1cm57aGVhZGVyOmwsdGFibGVzOmZ9O2lmKCEocy5sZW5ndGg8Mikpe3ZhciB3LFM9ayhzKTt0cnl7Zm9yKFMucygpOyEodz1TLm4oKSkuZG9uZTspe3ZhciB4PXcudmFsdWU7bT09PXgmJihyPXtuYW1lOngsaGVhZGVyOmwsdGFibGVzOmZ9KX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fX19fWlmKHIpcmV0dXJuKDAsbi53YXJuKSgnVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQsICcpKydmYWxsaW5nIGJhY2sgdG8gIicuY29uY2F0KHIubmFtZSwnIiBmb250IGluc3RlYWQuJykpLHtoZWFkZXI6ci5oZWFkZXIsdGFibGVzOnIudGFibGVzfTt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQuJykpfSh0LHRoaXMubmFtZSk7dz1GLmhlYWRlcixTPUYudGFibGVzfWVsc2Ugdz1kKHQpLFM9dSh0LHcubnVtVGFibGVzKTt2YXIgUD0hU1siQ0ZGICJdO2lmKFApe2lmKCFTLmxvY2EpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJsb2NhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtTLmdseWZ8fCgoMCxuLndhcm4pKCdSZXF1aXJlZCAiZ2x5ZiIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpLFMuZ2x5Zj17dGFnOiJnbHlmIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksdGhpcy5pc09wZW5UeXBlPSExfWVsc2V7dmFyIFQ9ci5jb21wb3NpdGUmJigoci5jaWRUb0dpZE1hcHx8W10pLmxlbmd0aD4wfHwhKHIuY01hcCBpbnN0YW5jZW9mIGcuSWRlbnRpdHlDTWFwKSk7aWYoIk9UVE8iPT09dy52ZXJzaW9uJiYhVHx8IVMuaGVhZHx8IVMuaGhlYXx8IVMubWF4cHx8IVMucG9zdClyZXR1cm4gTz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLHg9bmV3IGYuQ0ZGRm9udChPLHIpLGoociksdGhpcy5jb252ZXJ0KGUseCxyKTtkZWxldGUgUy5nbHlmLGRlbGV0ZSBTLmxvY2EsZGVsZXRlIFMuZnBnbSxkZWxldGUgUy5wcmVwLGRlbGV0ZSBTWyJjdnQgIl0sdGhpcy5pc09wZW5UeXBlPSEwfWlmKCFTLm1heHApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTt0LnBvcz0odC5zdGFydHx8MCkrUy5tYXhwLm9mZnNldDt2YXIgST10LmdldEludDMyKCksRT10LmdldFVpbnQxNigpO2lmKHIuc2NhbGVGYWN0b3JzJiZyLnNjYWxlRmFjdG9ycy5sZW5ndGg9PT1FJiZQKXt2YXIgTT1yLnNjYWxlRmFjdG9ycyxfPUwoUy5oZWFkLmRhdGFbNTBdLFMuaGVhZC5kYXRhWzUxXSksRD1uZXcgcC5HbHlmVGFibGUoe2dseWZUYWJsZTpTLmdseWYuZGF0YSxpc0dseXBoTG9jYXRpb25zTG9uZzpfLGxvY2FUYWJsZTpTLmxvY2EuZGF0YSxudW1HbHlwaHM6RX0pO0Quc2NhbGUoTSk7dmFyIEI9RC53cml0ZSgpLCQ9Qi5nbHlmLFg9Qi5sb2NhLFY9Qi5pc0xvY2F0aW9uTG9uZztTLmdseWYuZGF0YT0kLFMubG9jYS5kYXRhPVgsViE9PSEhXyYmKFMuaGVhZC5kYXRhWzUwXT0wLFMuaGVhZC5kYXRhWzUxXT1WPzE6MCk7Zm9yKHZhciBLPVMuaG10eC5kYXRhLEo9MDtKPEU7SisrKXt2YXIgWj00KkosUT1NYXRoLnJvdW5kKE1bSl0qTChLW1pdLEtbWisxXSkpO0tbWl09UT4+OCYyNTUsS1taKzFdPTI1NSZRLFIoSyxaKzIsTWF0aC5yb3VuZChNW0pdKk4oS1taKzJdLEtbWiszXSkpKX19dmFyIGVlPUUrMSx0ZT0hMDtlZT42NTUzNSYmKHRlPSExLGVlPUUsKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBnbHlmcyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIikpO3ZhciByZT0wLG5lPTA7ST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYodC5wb3MrPTgsdC5nZXRVaW50MTYoKT4yJiYoUy5tYXhwLmRhdGFbMTRdPTAsUy5tYXhwLmRhdGFbMTVdPTIpLHQucG9zKz00LHJlPXQuZ2V0VWludDE2KCksdC5wb3MrPTQsbmU9dC5nZXRVaW50MTYoKSksUy5tYXhwLmRhdGFbNF09ZWU+PjgsUy5tYXhwLmRhdGFbNV09MjU1JmVlO3ZhciBhZT1mdW5jdGlvbihlLHQscixhKXt2YXIgaT17ZnVuY3Rpb25zRGVmaW5lZDpbXSxmdW5jdGlvbnNVc2VkOltdLGZ1bmN0aW9uc1N0YWNrRGVsdGFzOltdLHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczohMSxoaW50c1ZhbGlkOiEwfTtpZihlJiZDKGUsaSksdCYmQyh0LGkpLGUmJmZ1bmN0aW9uKGUsdCl7aWYoIWUudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKXtpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCIpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtmb3IodmFyIHI9MCxhPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7cjxhO3IrKyl7aWYocj50KXJldHVybigwLG4ud2FybikoIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiAiK3IpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtpZihlLmZ1bmN0aW9uc1VzZWRbcl0mJiFlLmZ1bmN0aW9uc0RlZmluZWRbcl0pcmV0dXJuKDAsbi53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIityKSx2b2lkKGUuaGludHNWYWxpZD0hMSl9fX0oaSxhKSxyJiYxJnIubGVuZ3RoKXt2YXIgbz1uZXcgVWludDhBcnJheShyLmxlbmd0aCsxKTtvLnNldChyLmRhdGEpLHIuZGF0YT1vfXJldHVybiBpLmhpbnRzVmFsaWR9KFMuZnBnbSxTLnByZXAsU1siY3Z0ICJdLHJlKTtpZihhZXx8KGRlbGV0ZSBTLmZwZ20sZGVsZXRlIFMucHJlcCxkZWxldGUgU1siY3Z0ICJdKSxmdW5jdGlvbihlLHQscixhLGksbyl7aWYodCl7ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0LGUucG9zKz00LGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yO3ZhciBzPWUuZ2V0VWludDE2KCk7ZS5wb3MrPTgsZS5wb3MrPTI7dmFyIGM9ZS5nZXRVaW50MTYoKTswIT09cyYmKDImTChhLmRhdGFbNDRdLGEuZGF0YVs0NV0pfHwodC5kYXRhWzIyXT0wLHQuZGF0YVsyM109MCkpLGM+aSYmKCgwLG4uaW5mbykoIlRoZSBudW1PZk1ldHJpY3MgKCIuY29uY2F0KGMsIikgc2hvdWxkIG5vdCBiZSAiKSsiZ3JlYXRlciB0aGFuIHRoZSBudW1HbHlwaHMgKCIuY29uY2F0KGksIikuIikpLGM9aSx0LmRhdGFbMzRdPSg2NTI4MCZjKT4+OCx0LmRhdGFbMzVdPTI1NSZjKTt2YXIgdT1pLWMtKHIubGVuZ3RoLTQqYz4+MSk7aWYodT4wKXt2YXIgbD1uZXcgVWludDhBcnJheShyLmxlbmd0aCsyKnUpO2wuc2V0KHIuZGF0YSksbyYmKGxbci5sZW5ndGhdPXIuZGF0YVsyXSxsW3IubGVuZ3RoKzFdPXIuZGF0YVszXSksci5kYXRhPWx9fWVsc2UgciYmKHIuZGF0YT1udWxsKX0odCxTLmhoZWEsUy5obXR4LFMuaGVhZCxlZSx0ZSksIVMuaGVhZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhlYWQiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOyFmdW5jdGlvbihlLHQscil7dmFyIGE9ZS5kYXRhLGk9KGFbMF08PDI0KSsoYVsxXTw8MTYpKyhhWzJdPDw4KSthWzNdO2k+PjE2IT0xJiYoKDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICIraSksYVswXT0wLGFbMV09MSxhWzJdPTAsYVszXT0wKTt2YXIgbz1MKGFbNTBdLGFbNTFdKTtpZihvPDB8fG8+MSl7KDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCBpbmRleFRvTG9jRm9ybWF0IGluIGhlYWQgdGFibGU6ICIrbyk7dmFyIHM9dCsxO2lmKHI9PT1zPDwxKWFbNTBdPTAsYVs1MV09MDtlbHNle2lmKHIhPT1zPDwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb3VsZCBub3QgZml4IGluZGV4VG9Mb2NGb3JtYXQ6ICIrbyk7YVs1MF09MCxhWzUxXT0xfX19KFMuaGVhZCxFLFA/Uy5sb2NhLmxlbmd0aDowKTt2YXIgaWU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihQKXt2YXIgb2U9TChTLmhlYWQuZGF0YVs1MF0sUy5oZWFkLmRhdGFbNTFdKSxzZT1mdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU7bj8ocz00LGM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+Pj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfSk6KHM9MixjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+PjkmMjU1LGVbdCsxXT1yPj4xJjI1NX0pO3ZhciBsPWk/cisxOnIsZj1zKigxK2wpLGg9bmV3IFVpbnQ4QXJyYXkoZik7aC5zZXQoZS5kYXRhLnN1YmFycmF5KDAsZikpLGUuZGF0YT1oO3ZhciBkLHAsZz10LmRhdGEsdj1nLmxlbmd0aCxtPW5ldyBVaW50OEFycmF5KHYpLGI9W107Zm9yKGQ9MCxwPTA7ZDxyKzE7ZCsrLHArPXMpe3ZhciB3PWMoaCxwKTt3PnYmJih3PXYpLGIucHVzaCh7aW5kZXg6ZCxvZmZzZXQ6dyxlbmRPZmZzZXQ6MH0pfWZvcihiLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUub2Zmc2V0LXQub2Zmc2V0fSkpLGQ9MDtkPHI7ZCsrKWJbZF0uZW5kT2Zmc2V0PWJbZCsxXS5vZmZzZXQ7Zm9yKGIuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pbmRleC10LmluZGV4fSkpLGQ9MDtkPHI7ZCsrKXt2YXIgaz1iW2RdLFM9ay5vZmZzZXQseD1rLmVuZE9mZnNldDtpZigwIT09U3x8MCE9PXgpYnJlYWs7dmFyIE89YltkKzFdLm9mZnNldDtpZigwIT09Tyl7YltkXS5lbmRPZmZzZXQ9TzticmVha319dmFyIEE9T2JqZWN0LmNyZWF0ZShudWxsKSxDPTA7Zm9yKHUoaCwwLEMpLGQ9MCxwPXM7ZDxyO2QrKyxwKz1zKXt2YXIgRj15KGcsYltkXS5vZmZzZXQsYltkXS5lbmRPZmZzZXQsbSxDLGEpLFA9Ri5sZW5ndGg7MD09PVAmJihBW2RdPSEwKSxGLnNpemVPZkluc3RydWN0aW9ucz5vJiYobz1GLnNpemVPZkluc3RydWN0aW9ucyksdShoLHAsQys9UCl9aWYoMD09PUMpe3ZhciBUPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihkPTAscD1zO2Q8bDtkKysscCs9cyl1KGgscCxULmxlbmd0aCk7dC5kYXRhPVR9ZWxzZSBpZihpKXt2YXIgST1jKGgscyk7bS5sZW5ndGg+SStDP3QuZGF0YT1tLnN1YmFycmF5KDAsSStDKToodC5kYXRhPW5ldyBVaW50OEFycmF5KEkrQyksdC5kYXRhLnNldChtLnN1YmFycmF5KDAsQykpKSx0LmRhdGEuc2V0KG0uc3ViYXJyYXkoMCxJKSxDKSx1KGUuZGF0YSxoLmxlbmd0aC1zLEMrSSl9ZWxzZSB0LmRhdGE9bS5zdWJhcnJheSgwLEMpO3JldHVybnttaXNzaW5nR2x5cGhzOkEsbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zOm99fShTLmxvY2EsUy5nbHlmLEUsb2UsYWUsdGUsbmUpO2llPXNlLm1pc3NpbmdHbHlwaHMsST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYoUy5tYXhwLmRhdGFbMjZdPXNlLm1heFNpemVPZkluc3RydWN0aW9ucz4+OCxTLm1heHAuZGF0YVsyN109MjU1JnNlLm1heFNpemVPZkluc3RydWN0aW9ucyl9aWYoIVMuaGhlYSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhoZWEiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOzA9PT1TLmhoZWEuZGF0YVsxMF0mJjA9PT1TLmhoZWEuZGF0YVsxMV0mJihTLmhoZWEuZGF0YVsxMF09MjU1LFMuaGhlYS5kYXRhWzExXT0yNTUpO3ZhciBjZT17dW5pdHNQZXJFbTpMKFMuaGVhZC5kYXRhWzE4XSxTLmhlYWQuZGF0YVsxOV0pLHlNYXg6TChTLmhlYWQuZGF0YVs0Ml0sUy5oZWFkLmRhdGFbNDNdKSx5TWluOk4oUy5oZWFkLmRhdGFbMzhdLFMuaGVhZC5kYXRhWzM5XSksYXNjZW50Ok4oUy5oaGVhLmRhdGFbNF0sUy5oaGVhLmRhdGFbNV0pLGRlc2NlbnQ6TihTLmhoZWEuZGF0YVs2XSxTLmhoZWEuZGF0YVs3XSksbGluZUdhcDpOKFMuaGhlYS5kYXRhWzhdLFMuaGhlYS5kYXRhWzldKX07dGhpcy5hc2NlbnQ9Y2UuYXNjZW50L2NlLnVuaXRzUGVyRW0sdGhpcy5kZXNjZW50PWNlLmRlc2NlbnQvY2UudW5pdHNQZXJFbSx0aGlzLmxpbmVHYXA9Y2UubGluZUdhcC9jZS51bml0c1BlckVtLHRoaXMuY3NzRm9udEluZm8mJnRoaXMuY3NzRm9udEluZm8ubGluZUhlaWdodD8odGhpcy5saW5lSGVpZ2h0PXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lSGVpZ2h0LHRoaXMubGluZUdhcD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUdhcCk6dGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXAsUy5wb3N0JiZmdW5jdGlvbihlLHIsYSl7dmFyIG89KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPW87dmFyIHMsYz1vK2UubGVuZ3RoLHU9dC5nZXRJbnQzMigpO3Quc2tpcCgyOCk7dmFyIGwsZj0hMDtzd2l0Y2godSl7Y2FzZSA2NTUzNjpzPWkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nO2JyZWFrO2Nhc2UgMTMxMDcyOnZhciBoPXQuZ2V0VWludDE2KCk7aWYoaCE9PWEpe2Y9ITE7YnJlYWt9dmFyIGQ9W107Zm9yKGw9MDtsPGg7KytsKXt2YXIgcD10LmdldFVpbnQxNigpO2lmKHA+PTMyNzY4KXtmPSExO2JyZWFrfWQucHVzaChwKX1pZighZilicmVhaztmb3IodmFyIGc9W10sdj1bXTt0LnBvczxjOyl7dmFyIHk9dC5nZXRCeXRlKCk7Zm9yKHYubGVuZ3RoPXksbD0wO2w8eTsrK2wpdltsXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuZ2V0Qnl0ZSgpKTtnLnB1c2godi5qb2luKCIiKSl9Zm9yKHM9W10sbD0wO2w8aDsrK2wpe3ZhciBtPWRbbF07bTwyNTg/cy5wdXNoKGkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nW21dKTpzLnB1c2goZ1ttLTI1OF0pfWJyZWFrO2Nhc2UgMTk2NjA4OmJyZWFrO2RlZmF1bHQ6KDAsbi53YXJuKSgiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gIit1KSxmPSExLHIuZGVmYXVsdEVuY29kaW5nJiYocz1yLmRlZmF1bHRFbmNvZGluZyl9ci5nbHlwaE5hbWVzPXN9KFMucG9zdCxyLEUpLFMucG9zdD17dGFnOiJwb3N0IixkYXRhOlcocil9O3ZhciB1ZT1bXTtmdW5jdGlvbiBsZShlKXtyZXR1cm4haWVbZV19aWYoci5jb21wb3NpdGUpe3ZhciBmZT1yLmNpZFRvR2lkTWFwfHxbXSxoZT0wPT09ZmUubGVuZ3RoO3IuY01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9SChlLHQsITApKSx0PjY1NTM1KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9LTE7aGU/cj10OnZvaWQgMCE9PWZlW3RdJiYocj1mZVt0XSkscj49MCYmcjxFJiZsZShyKSYmKHVlW2VdPXIpfSkpfWVsc2V7dmFyIGRlPWZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybigwLG4ud2FybikoIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgaSxvPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1vLHQuc2tpcCgyKTtmb3IodmFyIHMsYz10LmdldFVpbnQxNigpLHU9ITEsbD0wO2w8YztsKyspe3ZhciBmPXQuZ2V0VWludDE2KCksaD10LmdldFVpbnQxNigpLGQ9dC5nZXRJbnQzMigpPj4+MCxwPSExO2lmKCFzfHxzLnBsYXRmb3JtSWQhPT1mfHxzLmVuY29kaW5nSWQhPT1oKXtpZigwIT09Znx8MCE9PWgmJjEhPT1oJiYzIT09aClpZigxPT09ZiYmMD09PWgpcD0hMDtlbHNlIGlmKDMhPT1mfHwxIT09aHx8IWEmJnMpe2lmKHImJjM9PT1mJiYwPT09aCl7cD0hMDt2YXIgZz0hMDtpZihsPGMtMSl7dmFyIHY9dC5wZWVrQnl0ZXMoMik7TCh2WzBdLHZbMV0pPGYmJihnPSExKX1nJiYodT0hMCl9fWVsc2UgcD0hMCxyfHwodT0hMCk7ZWxzZSBwPSEwO2lmKHAmJihzPXtwbGF0Zm9ybUlkOmYsZW5jb2RpbmdJZDpoLG9mZnNldDpkfSksdSlicmVha319aWYocyYmKHQucG9zPW8rcy5vZmZzZXQpLCFzfHwtMT09PXQucGVla0J5dGUoKSlyZXR1cm4oMCxuLndhcm4pKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgeSxtLGI9dC5nZXRVaW50MTYoKSx3PSExLGs9W107aWYoMD09PWIpe2Zvcih0LnNraXAoNCkseT0wO3k8MjU2O3krKyl7dmFyIFM9dC5nZXRCeXRlKCk7UyYmay5wdXNoKHtjaGFyQ29kZTp5LGdseXBoSWQ6U30pfXc9ITB9ZWxzZSBpZigyPT09Yil7dC5za2lwKDQpO2Zvcih2YXIgeD1bXSxPPTAsQT0wO0E8MjU2O0ErKyl7dmFyIEM9dC5nZXRVaW50MTYoKT4+Mzt4LnB1c2goQyksTz1NYXRoLm1heChDLE8pfWZvcih2YXIgRj1bXSxQPTA7UDw9TztQKyspRi5wdXNoKHtmaXJzdENvZGU6dC5nZXRVaW50MTYoKSxlbnRyeUNvdW50OnQuZ2V0VWludDE2KCksaWREZWx0YTpOKHQuZ2V0Qnl0ZSgpLHQuZ2V0Qnl0ZSgpKSxpZFJhbmdlUG9zOnQucG9zK3QuZ2V0VWludDE2KCl9KTtmb3IodmFyIFQ9MDtUPDI1NjtUKyspaWYoMD09PXhbVF0pdC5wb3M9RlswXS5pZFJhbmdlUG9zKzIqVCxtPXQuZ2V0VWludDE2KCksay5wdXNoKHtjaGFyQ29kZTpULGdseXBoSWQ6bX0pO2Vsc2V7dmFyIEk9Rlt4W1RdXTtmb3IoeT0wO3k8SS5lbnRyeUNvdW50O3krKyl7dmFyIEU9KFQ8PDgpK3krSS5maXJzdENvZGU7dC5wb3M9SS5pZFJhbmdlUG9zKzIqeSwwIT09KG09dC5nZXRVaW50MTYoKSkmJihtPShtK0kuaWREZWx0YSklNjU1MzYpLGsucHVzaCh7Y2hhckNvZGU6RSxnbHlwaElkOm19KX19fWVsc2UgaWYoND09PWIpe3Quc2tpcCg0KTt2YXIgaj10LmdldFVpbnQxNigpPj4xO3Quc2tpcCg2KTt2YXIgTSxfPVtdO2ZvcihNPTA7TTxqO00rKylfLnB1c2goe2VuZDp0LmdldFVpbnQxNigpfSk7Zm9yKHQuc2tpcCgyKSxNPTA7TTxqO00rKylfW01dLnN0YXJ0PXQuZ2V0VWludDE2KCk7Zm9yKE09MDtNPGo7TSsrKV9bTV0uZGVsdGE9dC5nZXRVaW50MTYoKTt2YXIgUixEPTA7Zm9yKE09MDtNPGo7TSsrKXtpPV9bTV07dmFyIEI9dC5nZXRVaW50MTYoKTtCPyhSPShCPj4xKS0oai1NKSxpLm9mZnNldEluZGV4PVIsRD1NYXRoLm1heChELFIraS5lbmQtaS5zdGFydCsxKSk6aS5vZmZzZXRJbmRleD0tMX12YXIgVT1bXTtmb3IoeT0wO3k8RDt5KyspVS5wdXNoKHQuZ2V0VWludDE2KCkpO2ZvcihNPTA7TTxqO00rKyl7bz0oaT1fW01dKS5zdGFydDt2YXIgJD1pLmVuZCxYPWkuZGVsdGE7Zm9yKFI9aS5vZmZzZXRJbmRleCx5PW87eTw9JDt5KyspNjU1MzUhPT15JiYobT0obT1SPDA/eTpVW1IreS1vXSkrWCY2NTUzNSxrLnB1c2goe2NoYXJDb2RlOnksZ2x5cGhJZDptfSkpfX1lbHNlIGlmKDY9PT1iKXt0LnNraXAoNCk7dmFyIEg9dC5nZXRVaW50MTYoKSxxPXQuZ2V0VWludDE2KCk7Zm9yKHk9MDt5PHE7eSsrKXttPXQuZ2V0VWludDE2KCk7dmFyIEc9SCt5O2sucHVzaCh7Y2hhckNvZGU6RyxnbHlwaElkOm19KX19ZWxzZXtpZigxMiE9PWIpcmV0dXJuKDAsbi53YXJuKSgiY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAiK2IpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt0LnNraXAoMTApO3ZhciB6PXQuZ2V0SW50MzIoKT4+PjA7Zm9yKHk9MDt5PHo7eSsrKWZvcih2YXIgVz10LmdldEludDMyKCk+Pj4wLFY9dC5nZXRJbnQzMigpPj4+MCxZPXQuZ2V0SW50MzIoKT4+PjAsSz1XO0s8PVY7SysrKWsucHVzaCh7Y2hhckNvZGU6SyxnbHlwaElkOlkrK30pfWsuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpO2Zvcih2YXIgSj0xO0o8ay5sZW5ndGg7SisrKWtbSi0xXS5jaGFyQ29kZT09PWtbSl0uY2hhckNvZGUmJihrLnNwbGljZShKLDEpLEotLSk7cmV0dXJue3BsYXRmb3JtSWQ6cy5wbGF0Zm9ybUlkLGVuY29kaW5nSWQ6cy5lbmNvZGluZ0lkLG1hcHBpbmdzOmssaGFzU2hvcnRDbWFwOnd9fShTLmNtYXAsdCx0aGlzLmlzU3ltYm9saWNGb250LHIuaGFzRW5jb2RpbmcpLHBlPWRlLnBsYXRmb3JtSWQsZ2U9ZGUuZW5jb2RpbmdJZCx2ZT1kZS5tYXBwaW5ncyx5ZT1bXSxtZT0hMTtpZighci5oYXNFbmNvZGluZ3x8Ik1hY1JvbWFuRW5jb2RpbmciIT09ci5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PXIuYmFzZUVuY29kaW5nTmFtZXx8KHllPSgwLGMuZ2V0RW5jb2RpbmcpKHIuYmFzZUVuY29kaW5nTmFtZSkpLHIuaGFzRW5jb2RpbmcmJiF0aGlzLmlzU3ltYm9saWNGb250JiYoMz09PXBlJiYxPT09Z2V8fDE9PT1wZSYmMD09PWdlKSlmb3IodmFyIGJlPSgwLHMuZ2V0R2x5cGhzVW5pY29kZSkoKSx3ZT0wO3dlPDI1Njt3ZSsrKXt2YXIga2U7aWYoa2U9dm9pZCAwIT09dGhpcy5kaWZmZXJlbmNlc1t3ZV0/dGhpcy5kaWZmZXJlbmNlc1t3ZV06eWUubGVuZ3RoJiYiIiE9PXllW3dlXT95ZVt3ZV06Yy5TdGFuZGFyZEVuY29kaW5nW3dlXSl7dmFyIFNlPSgwLGkucmVjb3ZlckdseXBoTmFtZSkoa2UsYmUpLHhlPXZvaWQgMDtpZigzPT09cGUmJjE9PT1nZT94ZT1iZVtTZV06MT09PXBlJiYwPT09Z2UmJih4ZT1jLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihTZSkpLHZvaWQgMD09PXhlKXtpZighci5nbHlwaE5hbWVzJiZyLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiYhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciBPZT10aGlzLnRvVW5pY29kZS5nZXQod2UpO09lJiYoeGU9T2UuY29kZVBvaW50QXQoMCkpfWlmKHZvaWQgMD09PXhlKWNvbnRpbnVlfXZhciBBZSxDZT1rKHZlKTt0cnl7Zm9yKENlLnMoKTshKEFlPUNlLm4oKSkuZG9uZTspe3ZhciBGZT1BZS52YWx1ZTtpZihGZS5jaGFyQ29kZT09PXhlKXt1ZVt3ZV09RmUuZ2x5cGhJZDticmVha319fWNhdGNoKGUpe0NlLmUoZSl9ZmluYWxseXtDZS5mKCl9fX1lbHNlIGlmKDA9PT1wZSl7dmFyIFBlLFRlPWsodmUpO3RyeXtmb3IoVGUucygpOyEoUGU9VGUubigpKS5kb25lOyl7dmFyIEllPVBlLnZhbHVlO3VlW0llLmNoYXJDb2RlXT1JZS5nbHlwaElkfX1jYXRjaChlKXtUZS5lKGUpfWZpbmFsbHl7VGUuZigpfW1lPSEwfWVsc2V7dmFyIEVlLGplPWsodmUpO3RyeXtmb3IoamUucygpOyEoRWU9amUubigpKS5kb25lOyl7dmFyIE1lPUVlLnZhbHVlLF9lPU1lLmNoYXJDb2RlOzM9PT1wZSYmX2U+PTYxNDQwJiZfZTw9NjE2OTUmJihfZSY9MjU1KSx1ZVtfZV09TWUuZ2x5cGhJZH19Y2F0Y2goZSl7amUuZShlKX1maW5hbGx5e2plLmYoKX19aWYoci5nbHlwaE5hbWVzJiYoeWUubGVuZ3RofHx0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpZm9yKHZhciBMZT0wO0xlPDI1NjsrK0xlKWlmKG1lfHx2b2lkIDA9PT11ZVtMZV0pe3ZhciBSZT10aGlzLmRpZmZlcmVuY2VzW0xlXXx8eWVbTGVdO2lmKFJlKXt2YXIgTmU9ci5nbHlwaE5hbWVzLmluZGV4T2YoUmUpO05lPjAmJmxlKE5lKSYmKHVlW0xlXT1OZSl9fX0wPT09dWUubGVuZ3RoJiYodWVbMF09MCk7dmFyIERlPWVlLTE7aWYodGV8fChEZT0wKSwhci5jc3NGb250SW5mbyl7dmFyIEJlPXEodWUsbGUsRGUsdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1CZS50b0ZvbnRDaGFyLFMuY21hcD17dGFnOiJjbWFwIixkYXRhOkcoQmUuY2hhckNvZGVUb0dseXBoSWQsQmUudG9Vbmljb2RlRXh0cmFNYXAsZWUpfSxTWyJPUy8yIl0mJmZ1bmN0aW9uKGUsdCl7dC5wb3M9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3ZhciByPXQuZ2V0VWludDE2KCk7dC5za2lwKDYwKTt2YXIgbj10LmdldFVpbnQxNigpO3JldHVybiEocjw0JiY3Njgmbnx8dC5nZXRVaW50MTYoKT50LmdldFVpbnQxNigpfHwodC5za2lwKDYpLDA9PT10LmdldFVpbnQxNigpfHwoZS5kYXRhWzhdPWUuZGF0YVs5XT0wLDApKSl9KFNbIk9TLzIiXSx0KXx8KFNbIk9TLzIiXT17dGFnOiJPUy8yIixkYXRhOnoocixCZS5jaGFyQ29kZVRvR2x5cGhJZCxjZSl9KX1pZighUCl0cnl7Tz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLCh4PW5ldyBhLkNGRlBhcnNlcihPLHIsaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpLnBhcnNlKCkpLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTt2YXIgVWU9bmV3IGEuQ0ZGQ29tcGlsZXIoeCk7U1siQ0ZGICJdLmRhdGE9VWUuY29tcGlsZSgpfWNhdGNoKGUpeygwLG4ud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIityLmxvYWRlZE5hbWUpfWlmKFMubmFtZSl7dmFyICRlPWIoUy5uYW1lKTtTLm5hbWUuZGF0YT1ZKGUsJGUpLHRoaXMucHNOYW1lPSRlWzBdWzZdfHxudWxsfWVsc2UgUy5uYW1lPXt0YWc6Im5hbWUiLGRhdGE6WSh0aGlzLm5hbWUpfTt2YXIgWGU9bmV3IHYuT3BlblR5cGVGaWxlQnVpbGRlcih3LnZlcnNpb24pO2Zvcih2YXIgSGUgaW4gUylYZS5hZGRUYWJsZShIZSxTW0hlXS5kYXRhKTtyZXR1cm4gWGUudG9BcnJheSgpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3IuZml4ZWRQaXRjaD0hMSxyLmJ1aWx0SW5FbmNvZGluZyYmZnVuY3Rpb24oZSx0KXtpZighZS5pc0ludGVybmFsRm9udCYmIShlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwfHx0PT09ZS5kZWZhdWx0RW5jb2Rpbmd8fGUudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciByPVtdLG49KDAscy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgYSBpbiB0KWlmKCFlLmhhc0VuY29kaW5nfHwwIT09ZS5kaWZmZXJlbmNlcy5sZW5ndGgmJnZvaWQgMD09PWUuZGlmZmVyZW5jZXNbYV0pe3ZhciBpPXRbYV0sYz0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkoaSxuKTstMSE9PWMmJihyW2FdPVN0cmluZy5mcm9tQ2hhckNvZGUoYykpfXIubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHIpfX0ocixyLmJ1aWx0SW5FbmNvZGluZyk7dmFyIGE9MTt0IGluc3RhbmNlb2YgZi5DRkZGb250JiYoYT10Lm51bUdseXBocy0xKTt2YXIgdT10LmdldEdseXBoTWFwcGluZyhyKSxoPW51bGwsZD11LHA9bnVsbDtyLmNzc0ZvbnRJbmZvfHwoaD1xKHUsdC5oYXNHbHlwaElkLmJpbmQodCksYSx0aGlzLnRvVW5pY29kZSksdGhpcy50b0ZvbnRDaGFyPWgudG9Gb250Q2hhcixkPWguY2hhckNvZGVUb0dseXBoSWQscD1oLnRvVW5pY29kZUV4dHJhTWFwKTt2YXIgZz10Lm51bUdseXBocztmdW5jdGlvbiB5KGUsdCl7dmFyIHI9bnVsbDtmb3IodmFyIG4gaW4gZSl0PT09ZVtuXSYmKHJ8fChyPVtdKSxyLnB1c2goMHxuKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgciBpbiBlKWlmKHQ9PT1lW3JdKXJldHVybiAwfHI7cmV0dXJuIGguY2hhckNvZGVUb0dseXBoSWRbaC5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXT10LGgubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSsrfXZhciBiPXQuc2VhY3M7aWYoaCYmaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQmJmImJmIubGVuZ3RoKXt2YXIgdz1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsUz10LmdldENoYXJzZXQoKSx4PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBPIGluIGIpe3ZhciBBPWJbT3w9MF0sQz1jLlN0YW5kYXJkRW5jb2RpbmdbQVsyXV0sRj1jLlN0YW5kYXJkRW5jb2RpbmdbQVszXV0sUD1TLmluZGV4T2YoQyksVD1TLmluZGV4T2YoRik7aWYoIShQPDB8fFQ8MCkpe3ZhciBJPXt4OkFbMF0qd1swXStBWzFdKndbMl0rd1s0XSx5OkFbMF0qd1sxXStBWzFdKndbM10rd1s1XX0sRT15KHUsTyk7aWYoRSl7dmFyIGosTT1rKEUpO3RyeXtmb3IoTS5zKCk7IShqPU0ubigpKS5kb25lOyl7dmFyIF89ai52YWx1ZSxMPWguY2hhckNvZGVUb0dseXBoSWQsUj1tKEwsUCksTj1tKEwsVCk7eFtfXT17YmFzZUZvbnRDaGFyQ29kZTpSLGFjY2VudEZvbnRDaGFyQ29kZTpOLGFjY2VudE9mZnNldDpJfX19Y2F0Y2goZSl7TS5lKGUpfWZpbmFsbHl7TS5mKCl9fX19ci5zZWFjTWFwPXh9dmFyIFU9MS8oci5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSwkPW5ldyB2Lk9wZW5UeXBlRmlsZUJ1aWxkZXIoIk9UVE8iKTtyZXR1cm4gJC5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKSwkLmFkZFRhYmxlKCJPUy8yIix6KHIsZCkpLCQuYWRkVGFibGUoImNtYXAiLEcoZCxwLGcpKSwkLmFkZFRhYmxlKCJoZWFkIiwiXDABXDBcMFwwXDAQXDBcMFwwXDBcMF8PPMO1XDBcMCIrQihVKSsiXDBcMFwwXDDCnlx2fidcMFwwXDBcMMKeXHZ+J1wwXDAiK0Ioci5kZXNjZW50KSsiD8O/IitCKHIuYXNjZW50KStEKHIuaXRhbGljQW5nbGU/MjowKSsiXDARXDBcMFwwXDBcMFwwIiksJC5hZGRUYWJsZSgiaGhlYSIsIlwwAVwwXDAiK0Ioci5hc2NlbnQpK0Ioci5kZXNjZW50KSsiXDBcMMO/w79cMFwwXDBcMFwwXDAiK0Ioci5jYXBIZWlnaHQpK0IoTWF0aC50YW4oci5pdGFsaWNBbmdsZSkqci54SGVpZ2h0KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIitEKGcpKSwkLmFkZFRhYmxlKCJobXR4IixmdW5jdGlvbigpe2Zvcih2YXIgZT10LmNoYXJzdHJpbmdzLHI9dC5jZmY/dC5jZmYud2lkdGhzOm51bGwsbj0iXDBcMFwwXDAiLGE9MSxpPWc7YTxpO2ErKyl7dmFyIG89MDtpZihlKXt2YXIgcz1lW2EtMV07bz0id2lkdGgiaW4gcz9zLndpZHRoOjB9ZWxzZSByJiYobz1NYXRoLmNlaWwoclthXXx8MCkpO24rPUQobykrRCgwKX1yZXR1cm4gbn0oKSksJC5hZGRUYWJsZSgibWF4cCIsIlwwXDBQXDAiK0QoZykpLCQuYWRkVGFibGUoIm5hbWUiLFkoZSkpLCQuYWRkVGFibGUoInBvc3QiLFcocikpLCQudG9BcnJheSgpfX0se2tleToic3BhY2VXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MCxyPVsic3BhY2UiLCJtaW51cyIsIm9uZSIsImkiLCJJIl07dDxyLmxlbmd0aDt0Kyspe3ZhciBhPXJbdF07aWYoYSBpbiB0aGlzLndpZHRocyl7ZT10aGlzLndpZHRoc1thXTticmVha312YXIgaT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKClbYV0sbz0wO2lmKHRoaXMuY29tcG9zaXRlJiZ0aGlzLmNNYXAuY29udGFpbnMoaSkmJiJzdHJpbmciPT10eXBlb2Yobz10aGlzLmNNYXAubG9va3VwKGkpKSYmKG89SChpLG8pKSwhbyYmdGhpcy50b1VuaWNvZGUmJihvPXRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoaSkpLG88PTAmJihvPWkpLGU9dGhpcy53aWR0aHNbb10pYnJlYWt9cmV0dXJuIGU9ZXx8dGhpcy5kZWZhdWx0V2lkdGgsKDAsbi5zaGFkb3cpKHRoaXMsInNwYWNlV2lkdGgiLGUpfX0se2tleToiX2NoYXJUb0dseXBoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHM9dGhpcy5fZ2x5cGhDYWNoZVtlXTtpZihzJiZzLmlzU3BhY2U9PT1pKXJldHVybiBzO3ZhciBjPWU7dGhpcy5jTWFwJiZ0aGlzLmNNYXAuY29udGFpbnMoZSkmJiJzdHJpbmciPT10eXBlb2YoYz10aGlzLmNNYXAubG9va3VwKGUpKSYmKGM9SChlLGMpKSwibnVtYmVyIiE9dHlwZW9mKHI9dGhpcy53aWR0aHNbY10pJiYocj10aGlzLmRlZmF1bHRXaWR0aCk7dmFyIHU9dGhpcy52bWV0cmljcyYmdGhpcy52bWV0cmljc1tjXSxsPXRoaXMudG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGwmJihsPVN0cmluZy5mcm9tQ2hhckNvZGUobCkpO3ZhciBmPXZvaWQgMCE9PXRoaXMudG9Gb250Q2hhcltlXTtpZih0PXRoaXMudG9Gb250Q2hhcltlXXx8ZSx0aGlzLm1pc3NpbmdGaWxlKXt2YXIgaD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTsiLm5vdGRlZiIhPT1oJiYiIiE9PWh8fCJUeXBlMSIhPT10aGlzLnR5cGV8fCh0PTMyKSx0PSgwLG8ubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKHQpfXRoaXMuaXNUeXBlM0ZvbnQmJihhPXQpO3ZhciBkPW51bGw7aWYodGhpcy5zZWFjTWFwJiZ0aGlzLnNlYWNNYXBbZV0pe2Y9ITA7dmFyIHA9dGhpcy5zZWFjTWFwW2VdO3Q9cC5iYXNlRm9udENoYXJDb2RlLGQ9e2ZvbnRDaGFyOlN0cmluZy5mcm9tQ29kZVBvaW50KHAuYWNjZW50Rm9udENoYXJDb2RlKSxvZmZzZXQ6cC5hY2NlbnRPZmZzZXR9fXZhciBnPSIiO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ8PTExMTQxMTE/Zz1TdHJpbmcuZnJvbUNvZGVQb2ludCh0KTooMCxuLndhcm4pKCJjaGFyVG9HbHlwaCAtIGludmFsaWQgZm9udENoYXJDb2RlOiAiLmNvbmNhdCh0KSkpLHM9bmV3IF8oZSxnLGwsZCxyLHUsYSxpLGYpLHRoaXMuX2dseXBoQ2FjaGVbZV09c319LHtrZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDtpZih0PVtdLHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPWUubGVuZ3RoLGE9MDthPG47KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUsYSxyKTt2YXIgaT1yLmNoYXJjb2RlLG89ci5sZW5ndGg7YSs9bzt2YXIgcz10aGlzLl9jaGFyVG9HbHlwaChpLDE9PT1vJiYzMj09PWUuY2hhckNvZGVBdChhLTEpKTt0LnB1c2gocyl9ZWxzZSBmb3IodmFyIGM9MCx1PWUubGVuZ3RoO2M8dTsrK2Mpe3ZhciBsPWUuY2hhckNvZGVBdChjKSxmPXRoaXMuX2NoYXJUb0dseXBoKGwsMzI9PT1sKTt0LnB1c2goZil9cmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbZV09dH19LHtrZXk6ImdldENoYXJQb3NpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPTA7bjxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxuLHIpO3ZhciBhPXIubGVuZ3RoO3QucHVzaChbbixuK2FdKSxuKz1hfWVsc2UgZm9yKHZhciBpPTAsbz1lLmxlbmd0aDtpPG87KytpKXQucHVzaChbaSxpKzFdKTtyZXR1cm4gdH19LHtrZXk6ImdseXBoQ2FjaGVWYWx1ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfX0se2tleToiZW5jb2RlU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxyPVtdLG49W10sYT1mdW5jdGlvbigpe3JldHVybiByLmxlbmd0aCUyPT0xfSxpPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcD9mdW5jdGlvbihlKXtyZXR1cm4gdC50b1VuaWNvZGUuY2hhckNvZGVPZihlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9Vbmljb2RlLmNoYXJDb2RlT2YoU3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpfSxvPTAscz1lLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1lLmNvZGVQb2ludEF0KG8pO2lmKGM+NTUyOTUmJihjPDU3MzQ0fHxjPjY1NTMzKSYmbysrLHRoaXMudG9Vbmljb2RlKXt2YXIgdT1pKGMpO2lmKC0xIT09dSl7YSgpJiYoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApO2Zvcih2YXIgZj0odGhpcy5jTWFwP3RoaXMuY01hcC5nZXRDaGFyQ29kZUxlbmd0aCh1KToxKS0xO2Y+PTA7Zi0tKW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHU+PjgqZiYyNTUpKTtjb250aW51ZX19YSgpfHwoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApLG4ucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSl9cmV0dXJuIHIucHVzaChuLmpvaW4oIiIpKSxyfX1dKSxlfSgpO3QuRm9udD1LO3ZhciBKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtBKHRoaXMsZSksdGhpcy5lcnJvcj10LHRoaXMubG9hZGVkTmFtZT0iZ19mb250X2Vycm9yIix0aGlzLm1pc3NpbmdGaWxlPSEwfXJldHVybiBGKGUsW3trZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSx7a2V5OiJlbmNvZGVTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlXX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOnRoaXMuZXJyb3J9fX1dKSxlfSgpO3QuRXJyb3JGb250PUp9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DRkZUb3BEaWN0PXQuQ0ZGU3RyaW5ncz10LkNGRlN0YW5kYXJkU3RyaW5ncz10LkNGRlByaXZhdGVEaWN0PXQuQ0ZGUGFyc2VyPXQuQ0ZGSW5kZXg9dC5DRkZIZWFkZXI9dC5DRkZGRFNlbGVjdD10LkNGRkNvbXBpbGVyPXQuQ0ZGQ2hhcnNldD10LkNGRj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY1KSxpPXIoMTY2KTtmdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWQoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGQoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHAoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9wKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWYobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1mKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB5KGUsdCxyKXtyZXR1cm4gdCYmdihlLnByb3RvdHlwZSx0KSxyJiZ2KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbT1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiLCIwMDEuMDAwIiwiMDAxLjAwMSIsIjAwMS4wMDIiLCIwMDEuMDAzIiwiQmxhY2siLCJCb2xkIiwiQm9vayIsIkxpZ2h0IiwiTWVkaXVtIiwiUmVndWxhciIsIlJvbWFuIiwiU2VtaWJvbGQiXTt0LkNGRlN0YW5kYXJkU3RyaW5ncz1tO3ZhciBiPVtudWxsLHtpZDoiaHN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0sbnVsbCx7aWQ6InZzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoidm1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybGluZXRvIixtaW46MixyZXNldFN0YWNrOiEwfSx7aWQ6ImhsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoidmxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJycmN1cnZldG8iLG1pbjo2LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJyZXR1cm4iLG1pbjowLHVuZGVmU3RhY2s6ITB9LG51bGwsbnVsbCx7aWQ6ImVuZGNoYXIiLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LG51bGwsbnVsbCxudWxsLHtpZDoiaHN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6ImhpbnRtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6ImNudHJtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJtb3ZldG8iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiaG1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJ2c3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoicmN1cnZlbGluZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJybGluZWN1cnZlIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InZ2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJoaGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsZ3N1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoidmhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6Imh2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH1dLHc9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm46ZnVuY3Rpb24oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2codGhpcyxlKSx0aGlzLmJ5dGVzPXQuZ2V0Qnl0ZXMoKSx0aGlzLnByb3BlcnRpZXM9cix0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFufXJldHVybiB5KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBTO3RoaXMuY2ZmPXQ7dmFyIHI9dGhpcy5wYXJzZUhlYWRlcigpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxhPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG89dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxzPXRoaXMucGFyc2VEaWN0KGEub2JqLmdldCgwKSksYz10aGlzLmNyZWF0ZURpY3QoUCxzLHQuc3RyaW5ncyk7dC5oZWFkZXI9ci5vYmosdC5uYW1lcz10aGlzLnBhcnNlTmFtZUluZGV4KG4ub2JqKSx0LnN0cmluZ3M9dGhpcy5wYXJzZVN0cmluZ0luZGV4KGkub2JqKSx0LnRvcERpY3Q9Yyx0Lmdsb2JhbFN1YnJJbmRleD1vLm9iaix0aGlzLnBhcnNlUHJpdmF0ZURpY3QodC50b3BEaWN0KSx0LmlzQ0lERm9udD1jLmhhc05hbWUoIlJPUyIpO3ZhciB1PWMuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGw9dGhpcy5wYXJzZUluZGV4KHUpLm9iaixmPWMuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7ZiYmKGUuZm9udE1hdHJpeD1mKTt2YXIgaCxkLHA9Yy5nZXRCeU5hbWUoIkZvbnRCQm94Iik7aWYocCYmKGUuYXNjZW50PU1hdGgubWF4KHBbM10scFsxXSksZS5kZXNjZW50PU1hdGgubWluKHBbMV0scFszXSksZS5hc2NlbnRTY2FsZWQ9ITApLHQuaXNDSURGb250KXtmb3IodmFyIGc9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iaix2PTAseT1nLmNvdW50O3Y8eTsrK3Ype3ZhciBtPWcuZ2V0KHYpLGI9dGhpcy5jcmVhdGVEaWN0KFAsdGhpcy5wYXJzZURpY3QobSksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoYiksdC5mZEFycmF5LnB1c2goYil9ZD1udWxsLGg9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksbC5jb3VudCx0LnN0cmluZ3MsITApLHQuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGwuY291bnQpfWVsc2UgaD10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxsLmNvdW50LHQuc3RyaW5ncywhMSksZD10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MsaC5jaGFyc2V0KTt0LmNoYXJzZXQ9aCx0LmVuY29kaW5nPWQ7dmFyIHc9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpsLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6by5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7cmV0dXJuIHQuY2hhclN0cmluZ3M9dy5jaGFyU3RyaW5ncyx0LnNlYWNzPXcuc2VhY3MsdC53aWR0aHM9dy53aWR0aHMsdH19LHtrZXk6InBhcnNlSGVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmJ5dGVzLHQ9ZS5sZW5ndGgscj0wO3I8dCYmMSE9PWVbcl07KSsrcjtpZihyPj10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIENGRiBoZWFkZXIiKTswIT09ciYmKCgwLG4uaW5mbykoImNmZiBkYXRhIGlzIHNoaWZ0ZWQiKSxlPWUuc3ViYXJyYXkociksdGhpcy5ieXRlcz1lKTt2YXIgYT1lWzBdLGk9ZVsxXSxvPWVbMl0scz1lWzNdO3JldHVybntvYmo6bmV3IHgoYSxpLG8scyksZW5kUG9zOm99fX0se2tleToicGFyc2VEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wO3ZhciByLGE9W10saT1bXTt0PTA7Zm9yKHZhciBvPWUubGVuZ3RoO3Q8bzspe3ZhciBzPWVbdF07czw9MjE/KDEyPT09cyYmKHM9czw8OHxlWysrdF0pLGkucHVzaChbcyxhXSksYT1bXSwrK3QpOmEucHVzaCgocj12b2lkIDAsMzA9PT0ocj1lW3QrK10pP2Z1bmN0aW9uKCl7Zm9yKHZhciByPSIiLG49WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLGE9ZS5sZW5ndGg7dDxhOyl7dmFyIGk9ZVt0KytdLG89aT4+NCxzPTE1Jmk7aWYoMTU9PT1vKWJyZWFrO2lmKHIrPW5bb10sMTU9PT1zKWJyZWFrO3IrPW5bc119cmV0dXJuIHBhcnNlRmxvYXQocil9KCk6Mjg9PT1yP3I9KChyPWVbdCsrXSk8PDI0fGVbdCsrXTw8MTYpPj4xNjoyOT09PXI/cj0ocj0ocj0ocj1lW3QrK10pPDw4fGVbdCsrXSk8PDh8ZVt0KytdKTw8OHxlW3QrK106cj49MzImJnI8PTI0Nj9yLTEzOTpyPj0yNDcmJnI8PTI1MD8yNTYqKHItMjQ3KStlW3QrK10rMTA4OnI+PTI1MSYmcjw9MjU0Py0yNTYqKHItMjUxKS1lW3QrK10tMTA4OigoMCxuLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiAiJytyKyciIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKSxOYU4pKSl9cmV0dXJuIGl9fSx7a2V5OiJwYXJzZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG49bmV3IEEsYT10aGlzLmJ5dGVzLGk9YVtlKytdPDw4fGFbZSsrXSxvPVtdLHM9ZTtpZigwIT09aSl7dmFyIGM9YVtlKytdLHU9ZSsoaSsxKSpjLTE7Zm9yKHQ9MCxyPWkrMTt0PHI7Kyt0KXtmb3IodmFyIGw9MCxmPTA7ZjxjOysrZilsPDw9OCxsKz1hW2UrK107by5wdXNoKHUrbCl9cz1vW2ldfWZvcih0PTAscj1vLmxlbmd0aC0xO3Q8cjsrK3Qpe3ZhciBoPW9bdF0sZD1vW3QrMV07bi5hZGQoYS5zdWJhcnJheShoLGQpKX1yZXR1cm57b2JqOm4sZW5kUG9zOnN9fX0se2tleToicGFyc2VOYW1lSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QucHVzaCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGkpKX1yZXR1cm4gdH19LHtrZXk6InBhcnNlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgTyxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QuYWRkKCgwLG4uYnl0ZXNUb1N0cmluZykoaSkpfXJldHVybiB0fX0se2tleToiY3JlYXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvPW5ldyBlKHIpLHM9aCh0KTt0cnl7Zm9yKHMucygpOyEobj1zLm4oKSkuZG9uZTspe3ZhciBjPShhPW4udmFsdWUsaT0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGEpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGEsaSl8fGQoYSxpKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PWNbMF0sbD1jWzFdO28uc2V0QnlLZXkodSxsKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9cmV0dXJuIG99fSx7a2V5OiJwYXJzZUNoYXJTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCF0fHxlLmNhbGxEZXB0aD4xMClyZXR1cm4hMTtmb3IodmFyIGk9ZS5zdGFja1NpemUsbz1lLnN0YWNrLHM9dC5sZW5ndGgsYz0wO2M8czspe3ZhciB1PXRbYysrXSxsPW51bGw7aWYoMTI9PT11KXt2YXIgZj10W2MrK107MD09PWY/KHRbYy0yXT0xMzksdFtjLTFdPTIyLGk9MCk6bD13W2ZdfWVsc2UgaWYoMjg9PT11KW9baV09KHRbY108PDI0fHRbYysxXTw8MTYpPj4xNixjKz0yLGkrKztlbHNlIGlmKDE0PT09dSl7aWYoaT49NCYmKGktPTQsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKSlyZXR1cm4gZS5zZWFjPW8uc2xpY2UoaSxpKzQpLCExO2w9Ylt1XX1lbHNlIGlmKHU+PTMyJiZ1PD0yNDYpb1tpXT11LTEzOSxpKys7ZWxzZSBpZih1Pj0yNDcmJnU8PTI1NClvW2ldPXU8MjUxPyh1LTI0Nzw8OCkrdFtjXSsxMDg6LSh1LTI1MTw8OCktdFtjXS0xMDgsYysrLGkrKztlbHNlIGlmKDI1NT09PXUpb1tpXT0odFtjXTw8MjR8dFtjKzFdPDwxNnx0W2MrMl08PDh8dFtjKzNdKS82NTUzNixjKz00LGkrKztlbHNlIGlmKDE5PT09dXx8MjA9PT11KWUuaGludHMrPWk+PjEsYys9ZS5oaW50cys3Pj4zLGklPTIsbD1iW3VdO2Vsc2V7aWYoMTA9PT11fHwyOT09PXUpe3ZhciBoPXZvaWQgMDtpZighKGg9MTA9PT11P3I6YSkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yICIrbC5pZCksITE7dmFyIGQ9MzI3Njg7aC5jb3VudDwxMjQwP2Q9MTA3OmguY291bnQ8MzM5MDAmJihkPTExMzEpO3ZhciBwPW9bLS1pXStkO2lmKHA8MHx8cD49aC5jb3VudHx8aXNOYU4ocCkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgIitsLmlkKSwhMTtpZihlLnN0YWNrU2l6ZT1pLGUuY2FsbERlcHRoKyssIXRoaXMucGFyc2VDaGFyU3RyaW5nKGUsaC5nZXQocCkscixhKSlyZXR1cm4hMTtlLmNhbGxEZXB0aC0tLGk9ZS5zdGFja1NpemU7Y29udGludWV9aWYoMTE9PT11KXJldHVybiBlLnN0YWNrU2l6ZT1pLCEwO2lmKDA9PT11JiZjPT09dC5sZW5ndGgpdFtjLTFdPTE0LGw9YlsxNF07ZWxzZXtpZig5PT09dSl7dC5jb3B5V2l0aGluKGMtMSxjLC0xKSxjLT0xLHMtPTE7Y29udGludWV9bD1iW3VdfX1pZihsKXtpZihsLnN0ZW0mJihlLmhpbnRzKz1pPj4xLDM9PT11fHwyMz09PXU/ZS5oYXNWU3RlbXM9ITA6IWUuaGFzVlN0ZW1zfHwxIT09dSYmMTghPT11fHwoKDAsbi53YXJuKSgiQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyIiksdFtjLTFdPTE9PT11PzM6MjMpKSwibWluImluIGwmJiFlLnVuZGVmU3RhY2smJmk8bC5taW4pcmV0dXJuKDAsbi53YXJuKSgiTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciAiK2wuaWQrIjsgYWN0dWFsOiAiK2krIiwgZXhwZWN0ZWQ6ICIrbC5taW4pLDA9PT1pJiYodFtjLTFdPTE0LCEwKTtlLmZpcnN0U3RhY2tDbGVhcmluZyYmbC5zdGFja0NsZWFyaW5nJiYoZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITEsKGktPWwubWluKT49MiYmbC5zdGVtP2klPTI6aT4xJiYoMCxuLndhcm4pKCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kIiksaT4wJiYoZS53aWR0aD1vW2ktMV0pKSwic3RhY2tEZWx0YSJpbiBsPygic3RhY2tGbiJpbiBsJiZsLnN0YWNrRm4obyxpKSxpKz1sLnN0YWNrRGVsdGEpOmwuc3RhY2tDbGVhcmluZz9pPTA6bC5yZXNldFN0YWNrPyhpPTAsZS51bmRlZlN0YWNrPSExKTpsLnVuZGVmU3RhY2smJihpPTAsZS51bmRlZlN0YWNrPSEwLGUuZmlyc3RTdGFja0NsZWFyaW5nPSExKX19cmV0dXJuIHM8dC5sZW5ndGgmJnQuZmlsbCgxNCxzKSxlLnN0YWNrU2l6ZT1pLCEwfX0se2tleToicGFyc2VDaGFyU3RyaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuY2hhclN0cmluZ3Mscj1lLmxvY2FsU3VickluZGV4LGE9ZS5nbG9iYWxTdWJySW5kZXgsaT1lLmZkU2VsZWN0LG89ZS5mZEFycmF5LHM9ZS5wcml2YXRlRGljdCxjPVtdLHU9W10sbD10LmNvdW50LGY9MDtmPGw7ZisrKXt2YXIgaD10LmdldChmKSxkPXtjYWxsRGVwdGg6MCxzdGFja1NpemU6MCxzdGFjazpbXSx1bmRlZlN0YWNrOiEwLGhpbnRzOjAsZmlyc3RTdGFja0NsZWFyaW5nOiEwLHNlYWM6bnVsbCx3aWR0aDpudWxsLGhhc1ZTdGVtczohMX0scD0hMCxnPW51bGwsdj1zO2lmKGkmJm8ubGVuZ3RoKXt2YXIgeT1pLmdldEZESW5kZXgoZik7LTE9PT15JiYoKDAsbi53YXJuKSgiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKSxwPSExKSx5Pj1vLmxlbmd0aCYmKCgwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpLHA9ITEpLHAmJihnPSh2PW9beV0ucHJpdmF0ZURpY3QpLnN1YnJzSW5kZXgpfWVsc2UgciYmKGc9cik7aWYocCYmKHA9dGhpcy5wYXJzZUNoYXJTdHJpbmcoZCxoLGcsYSkpLG51bGwhPT1kLndpZHRoKXt2YXIgbT12LmdldEJ5TmFtZSgibm9taW5hbFdpZHRoWCIpO3VbZl09bStkLndpZHRofWVsc2V7dmFyIGI9di5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTt1W2ZdPWJ9bnVsbCE9PWQuc2VhYyYmKGNbZl09ZC5zZWFjKSxwfHx0LnNldChmLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6dCxzZWFjczpjLHdpZHRoczp1fX19LHtrZXk6ImVtcHR5UHJpdmF0ZURpY3Rpb25hcnkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlRGljdChJLFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSksZS5wcml2YXRlRGljdD10fX0se2tleToicGFyc2VQcml2YXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNOYW1lKCJQcml2YXRlIikpe3ZhciB0PWUuZ2V0QnlOYW1lKCJQcml2YXRlIik7aWYoQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoKXt2YXIgcj10WzBdLG49dFsxXTtpZigwPT09cnx8bj49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGE9bityLGk9dGhpcy5ieXRlcy5zdWJhcnJheShuLGEpLG89dGhpcy5wYXJzZURpY3QoaSkscz10aGlzLmNyZWF0ZURpY3QoSSxvLGUuc3RyaW5ncyk7aWYoZS5wcml2YXRlRGljdD1zLHMuZ2V0QnlOYW1lKCJTdWJycyIpKXt2YXIgYz1zLmdldEJ5TmFtZSgiU3VicnMiKSx1PW4rYztpZigwPT09Y3x8dT49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGw9dGhpcy5wYXJzZUluZGV4KHUpO3Muc3VicnNJbmRleD1sLm9ian19fX1lbHNlIGUucmVtb3ZlQnlOYW1lKCJQcml2YXRlIil9ZWxzZSB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSl9fSx7a2V5OiJwYXJzZUNoYXJzZXRzIix2YWx1ZTpmdW5jdGlvbihlLHQscixpKXtpZigwPT09ZSlyZXR1cm4gbmV3IGooITAsRS5JU09fQURPQkUsYS5JU09BZG9iZUNoYXJzZXQpO2lmKDE9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVCxhLkV4cGVydENoYXJzZXQpO2lmKDI9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVF9TVUJTRVQsYS5FeHBlcnRTdWJzZXRDaGFyc2V0KTt2YXIgbyxzLGMsdT10aGlzLmJ5dGVzLGw9ZSxmPXVbZSsrXSxoPVtpPzA6Ii5ub3RkZWYiXTtzd2l0Y2godC09MSxmKXtjYXNlIDA6Zm9yKGM9MDtjPHQ7YysrKW89dVtlKytdPDw4fHVbZSsrXSxoLnB1c2goaT9vOnIuZ2V0KG8pKTticmVhaztjYXNlIDE6Zm9yKDtoLmxlbmd0aDw9dDspZm9yKG89dVtlKytdPDw4fHVbZSsrXSxzPXVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2Nhc2UgMjpmb3IoO2gubGVuZ3RoPD10Oylmb3Iobz11W2UrK108PDh8dVtlKytdLHM9dVtlKytdPDw4fHVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gY2hhcnNldCBmb3JtYXQiKX12YXIgZD1lLHA9dS5zdWJhcnJheShsLGQpO3JldHVybiBuZXcgaighMSxmLGgscCl9fSx7a2V5OiJwYXJzZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbyxzLGMsdT1PYmplY3QuY3JlYXRlKG51bGwpLGw9dGhpcy5ieXRlcyxmPSExLGg9bnVsbDtpZigwPT09ZXx8MT09PWUpe2Y9ITAsbz1lO3ZhciBkPWU/aS5FeHBlcnRFbmNvZGluZzppLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKHM9MCxjPWEubGVuZ3RoO3M8YztzKyspe3ZhciBwPWQuaW5kZXhPZihhW3NdKTstMSE9PXAmJih1W3BdPXMpfX1lbHNle3ZhciBnPWU7c3dpdGNoKDEyNyYobz1sW2UrK10pKXtjYXNlIDA6dmFyIHY9bFtlKytdO2ZvcihzPTE7czw9djtzKyspdVtsW2UrK11dPXM7YnJlYWs7Y2FzZSAxOnZhciB5PWxbZSsrXSxtPTE7Zm9yKHM9MDtzPHk7cysrKWZvcih2YXIgYj1sW2UrK10sdz1sW2UrK10saz1iO2s8PWIrdztrKyspdVtrXT1tKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6ICIuY29uY2F0KG8sIiBpbiBDRkYiKSl9dmFyIFM9ZTsxMjgmbyYmKGxbZ10mPTEyNyxmdW5jdGlvbigpe3ZhciB0PWxbZSsrXTtmb3Iocz0wO3M8dDtzKyspe3ZhciBuPWxbZSsrXSxpPShsW2UrK108PDgpKygyNTUmbFtlKytdKTt1W25dPWEuaW5kZXhPZihyLmdldChpKSl9fSgpKSxoPWwuc3ViYXJyYXkoZyxTKX1yZXR1cm4gbmV3IE0oZixvJj0xMjcsdSxoKX19LHtrZXk6InBhcnNlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT10aGlzLmJ5dGVzLGk9YVtlKytdLG89W107c3dpdGNoKGkpe2Nhc2UgMDpmb3Iocj0wO3I8dDsrK3Ipe3ZhciBzPWFbZSsrXTtvLnB1c2gocyl9YnJlYWs7Y2FzZSAzOnZhciBjPWFbZSsrXTw8OHxhW2UrK107Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1hW2UrK108PDh8YVtlKytdOzA9PT1yJiYwIT09dSYmKCgwLG4ud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKSx1PTApO2Zvcih2YXIgbD1hW2UrK10sZj1hW2VdPDw4fGFbZSsxXSxoPXU7aDxmOysraClvLnB1c2gobCl9ZSs9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJy5jb25jYXQoaSwnIi4nKSl9aWYoby5sZW5ndGghPT10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IF8oaSxvKX19XSksZX0oKTt0LkNGRlBhcnNlcj1rO3ZhciBTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2codGhpcyxlKSx0aGlzLmhlYWRlcj1udWxsLHRoaXMubmFtZXM9W10sdGhpcy50b3BEaWN0PW51bGwsdGhpcy5zdHJpbmdzPW5ldyBPLHRoaXMuZ2xvYmFsU3VickluZGV4PW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHRoaXMuY2hhcnNldD1udWxsLHRoaXMuY2hhclN0cmluZ3M9bnVsbCx0aGlzLmZkQXJyYXk9W10sdGhpcy5mZFNlbGVjdD1udWxsLHRoaXMuaXNDSURGb250PSExfXJldHVybiB5KGUsW3trZXk6ImR1cGxpY2F0ZUZpcnN0R2x5cGgiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGFyU3RyaW5ncy5jb3VudD49NjU1MzUpKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBjaGFyc3RyaW5ncyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIik7ZWxzZXt2YXIgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKSx0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfX19LHtrZXk6Imhhc0dseXBoSWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KSYmdGhpcy5jaGFyU3RyaW5ncy5nZXQoZSkubGVuZ3RoPjB9fV0pLGV9KCk7dC5DRkY9Uzt2YXIgeD15KChmdW5jdGlvbiBlKHQscixuLGEpe2codGhpcyxlKSx0aGlzLm1ham9yPXQsdGhpcy5taW5vcj1yLHRoaXMuaGRyU2l6ZT1uLHRoaXMub2ZmU2l6ZT1hfSkpO3QuQ0ZGSGVhZGVyPXg7dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMuc3RyaW5ncz1bXX1yZXR1cm4geShlLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0zOTA/bVtlXTplLTM5MTw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS0zOTFdOm1bMF19fSx7a2V5OiJnZXRTSUQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW0uaW5kZXhPZihlKTtyZXR1cm4tMSE9PXQ/dDotMSE9PSh0PXRoaXMuc3RyaW5ncy5pbmRleE9mKGUpKT90KzM5MTotMX19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9fSx7a2V5OiJjb3VudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGh9fV0pLGV9KCk7dC5DRkZTdHJpbmdzPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2JqZWN0cz1bXSx0aGlzLmxlbmd0aD0wfXJldHVybiB5KGUsW3trZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5sZW5ndGgrPWUubGVuZ3RoLHRoaXMub2JqZWN0cy5wdXNoKGUpfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubGVuZ3RoKz10Lmxlbmd0aC10aGlzLm9iamVjdHNbZV0ubGVuZ3RoLHRoaXMub2JqZWN0c1tlXT10fX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmplY3RzW2VdfX0se2tleToiY291bnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdHMubGVuZ3RofX1dKSxlfSgpO3QuQ0ZGSW5kZXg9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5rZXlUb05hbWVNYXA9dC5rZXlUb05hbWVNYXAsdGhpcy5uYW1lVG9LZXlNYXA9dC5uYW1lVG9LZXlNYXAsdGhpcy5kZWZhdWx0cz10LmRlZmF1bHRzLHRoaXMudHlwZXM9dC50eXBlcyx0aGlzLm9wY29kZXM9dC5vcGNvZGVzLHRoaXMub3JkZXI9dC5vcmRlcix0aGlzLnN0cmluZ3M9cix0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6InNldEJ5S2V5Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpcmV0dXJuITE7aWYoMD09PXQubGVuZ3RoKXJldHVybiEwO3ZhciByLGE9aCh0KTt0cnl7Zm9yKGEucygpOyEocj1hLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aWYoaXNOYU4oaSkpcmV0dXJuKDAsbi53YXJuKSgnSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJy5jb25jYXQodCwnIiBmb3Iga2V5ICInKS5jb25jYXQoZSwnIi4nKSksITB9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXZhciBvPXRoaXMudHlwZXNbZV07cmV0dXJuIm51bSIhPT1vJiYic2lkIiE9PW8mJiJvZmZzZXQiIT09b3x8KHQ9dFswXSksdGhpcy52YWx1ZXNbZV09dCwhMH19LHtrZXk6InNldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiJy5jb25jYXQoZSwnIicpKTt0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV09dH19LHtrZXk6Imhhc05hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5hbWVUb0tleU1hcFtlXWluIHRoaXMudmFsdWVzfX0se2tleToiZ2V0QnlOYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiLmNvbmNhdChlLCciJykpO3ZhciB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19fSx7a2V5OiJyZW1vdmVCeU5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV19fV0sW3trZXk6ImNyZWF0ZVRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj17a2V5VG9OYW1lTWFwOnt9LG5hbWVUb0tleU1hcDp7fSxkZWZhdWx0czp7fSx0eXBlczp7fSxvcGNvZGVzOnt9LG9yZGVyOltdfSxuPWgoZSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlLGk9QXJyYXkuaXNBcnJheShhWzBdKT8oYVswXVswXTw8OCkrYVswXVsxXTphWzBdO3Iua2V5VG9OYW1lTWFwW2ldPWFbMV0sci5uYW1lVG9LZXlNYXBbYVsxXV09aSxyLnR5cGVzW2ldPWFbMl0sci5kZWZhdWx0c1tpXT1hWzNdLHIub3Bjb2Rlc1tpXT1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06W2FbMF1dLHIub3JkZXIucHVzaChpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fV0pLGV9KCksRj1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dLFA9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHIudGFibGVzLGUpKS5wcml2YXRlRGljdD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKEYpKX19XSkscn0oQyk7dC5DRkZUb3BEaWN0PVA7dmFyIFQ9W1s2LCJCbHVlVmFsdWVzIiwiZGVsdGEiLG51bGxdLFs3LCJPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFs4LCJGYW1pbHlCbHVlcyIsImRlbHRhIixudWxsXSxbOSwiRmFtaWx5T3RoZXJCbHVlcyIsImRlbHRhIixudWxsXSxbWzEyLDldLCJCbHVlU2NhbGUiLCJudW0iLC4wMzk2MjVdLFtbMTIsMTBdLCJCbHVlU2hpZnQiLCJudW0iLDddLFtbMTIsMTFdLCJCbHVlRnV6eiIsIm51bSIsMV0sWzEwLCJTdGRIVyIsIm51bSIsbnVsbF0sWzExLCJTdGRWVyIsIm51bSIsbnVsbF0sW1sxMiwxMl0sIlN0ZW1TbmFwSCIsImRlbHRhIixudWxsXSxbWzEyLDEzXSwiU3RlbVNuYXBWIiwiZGVsdGEiLG51bGxdLFtbMTIsMTRdLCJGb3JjZUJvbGQiLCJudW0iLDBdLFtbMTIsMTddLCJMYW5ndWFnZUdyb3VwIiwibnVtIiwwXSxbWzEyLDE4XSwiRXhwYW5zaW9uRmFjdG9yIiwibnVtIiwuMDZdLFtbMTIsMTldLCJpbml0aWFsUmFuZG9tU2VlZCIsIm51bSIsMF0sWzIwLCJkZWZhdWx0V2lkdGhYIiwibnVtIiwwXSxbMjEsIm5vbWluYWxXaWR0aFgiLCJudW0iLDBdLFsxOSwiU3VicnMiLCJvZmZzZXQiLG51bGxdXSxJPWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGcodGhpcyxyKSwobj10LmNhbGwodGhpcyxyLnRhYmxlcyxlKSkuc3VicnNJbmRleD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKFQpKX19XSkscn0oQyk7dC5DRkZQcml2YXRlRGljdD1JO3ZhciBFPXtJU09fQURPQkU6MCxFWFBFUlQ6MSxFWFBFUlRfU1VCU0VUOjJ9LGo9eSgoZnVuY3Rpb24gZSh0LHIsbixhKXtnKHRoaXMsZSksdGhpcy5wcmVkZWZpbmVkPXQsdGhpcy5mb3JtYXQ9cix0aGlzLmNoYXJzZXQ9bix0aGlzLnJhdz1hfSkpO3QuQ0ZGQ2hhcnNldD1qO3ZhciBNPXkoKGZ1bmN0aW9uIGUodCxyLG4sYSl7Zyh0aGlzLGUpLHRoaXMucHJlZGVmaW5lZD10LHRoaXMuZm9ybWF0PXIsdGhpcy5lbmNvZGluZz1uLHRoaXMucmF3PWF9KSksXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5mb3JtYXQ9dCx0aGlzLmZkU2VsZWN0PXJ9cmV0dXJuIHkoZSxbe2tleToiZ2V0RkRJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MHx8ZT49dGhpcy5mZFNlbGVjdC5sZW5ndGg/LTE6dGhpcy5mZFNlbGVjdFtlXX19XSksZX0oKTt0LkNGRkZEU2VsZWN0PV87dmFyIEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2Zmc2V0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6ImlzVHJhY2tpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMub2Zmc2V0c319LHtrZXk6InRyYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUgaW4gdGhpcy5vZmZzZXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJBbHJlYWR5IHRyYWNraW5nIGxvY2F0aW9uIG9mICIuY29uY2F0KGUpKTt0aGlzLm9mZnNldHNbZV09dH19LHtrZXk6Im9mZnNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMub2Zmc2V0cyl0aGlzLm9mZnNldHNbdF0rPWV9fSx7a2V5OiJzZXRFbnRyeUxvY2F0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYoIShlIGluIHRoaXMub2Zmc2V0cykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vdCB0cmFja2luZyBsb2NhdGlvbiBvZiAiLmNvbmNhdChlKSk7Zm9yKHZhciBhPXIuZGF0YSxpPXRoaXMub2Zmc2V0c1tlXSxvPTAscz10Lmxlbmd0aDtvPHM7KytvKXt2YXIgYz01Km8raSx1PWMrMSxsPWMrMixmPWMrMyxoPWMrNDtpZigyOSE9PWFbY118fDAhPT1hW3VdfHwwIT09YVtsXXx8MCE9PWFbZl18fDAhPT1hW2hdKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpO3ZhciBkPXRbb107YVtjXT0yOSxhW3VdPWQ+PjI0JjI1NSxhW2xdPWQ+PjE2JjI1NSxhW2ZdPWQ+PjgmMjU1LGFbaF09MjU1JmR9fX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2codGhpcyxlKSx0aGlzLmNmZj10fXJldHVybiB5KGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LHI9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChyKTt2YXIgYT10aGlzLmNvbXBpbGVOYW1lSW5kZXgoZS5uYW1lcyk7aWYodC5hZGQoYSksZS5pc0NJREZvbnQmJmUudG9wRGljdC5oYXNOYW1lKCJGb250TWF0cml4Iikpe3ZhciBpPWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7dmFyIG8scz1oKGUuZmRBcnJheSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9aS5zbGljZSgwKTtjLmhhc05hbWUoIkZvbnRNYXRyaXgiKSYmKHU9bi5VdGlsLnRyYW5zZm9ybSh1LGMuZ2V0QnlOYW1lKCJGb250TWF0cml4IikpKSxjLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsdSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX12YXIgbD1lLnRvcERpY3QuZ2V0QnlOYW1lKCJYVUlEIik7bCYmbC5sZW5ndGg+MTYmJmUudG9wRGljdC5yZW1vdmVCeU5hbWUoIlhVSUQiKSxlLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTt2YXIgZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQoZi5vdXRwdXQpO3ZhciBkPWYudHJhY2tlcnNbMF0scD10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQocCk7dmFyIGc9dGhpcy5jb21waWxlSW5kZXgoZS5nbG9iYWxTdWJySW5kZXgpO2lmKHQuYWRkKGcpLGUuZW5jb2RpbmcmJmUudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKWlmKGUuZW5jb2RpbmcucHJlZGVmaW5lZClkLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbZS5lbmNvZGluZy5mb3JtYXRdLHQpO2Vsc2V7dmFyIHY9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KSx0LmFkZCh2KX12YXIgeT10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCxlLmNoYXJTdHJpbmdzLmNvdW50LGUuc3RyaW5ncyxlLmlzQ0lERm9udCk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpLHQuYWRkKHkpO3ZhciBtPXRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGUuY2hhclN0cmluZ3MpO2lmKGQuc2V0RW50cnlMb2NhdGlvbigiQ2hhclN0cmluZ3MiLFt0Lmxlbmd0aF0sdCksdC5hZGQobSksZS5pc0NJREZvbnQpe2Quc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLFt0Lmxlbmd0aF0sdCk7dmFyIGI9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQoYiksZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApLGQuc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KSx0LmFkZChmLm91dHB1dCk7dmFyIHc9Zi50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHcsdCl9cmV0dXJuIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhbZS50b3BEaWN0XSxbZF0sdCksdC5hZGQoWzBdKSx0LmRhdGF9fSx7a2V5OiJlbmNvZGVOdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpP3RoaXMuZW5jb2RlSW50ZWdlcihlKTp0aGlzLmVuY29kZUZsb2F0KGUpfX0se2tleToiZW5jb2RlRmxvYXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQudG9TdHJpbmcoKSxuPWUuRW5jb2RlRmxvYXRSZWdFeHAuZXhlYyhyKTtpZihuKXt2YXIgYT1wYXJzZUZsb2F0KCIxZSIrKChuWzJdPytuWzJdOjApK25bMV0ubGVuZ3RoKSk7cj0oTWF0aC5yb3VuZCh0KmEpL2EpLnRvU3RyaW5nKCl9dmFyIGksbyxzPSIiO2ZvcihpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgYz1yW2ldO3MrPSJlIj09PWM/Ii0iPT09clsrK2ldPyJjIjoiYiI6Ii4iPT09Yz8iYSI6Ii0iPT09Yz8iZSI6Y312YXIgdT1bMzBdO2ZvcihpPTAsbz0ocys9MSZzLmxlbmd0aD8iZiI6ImZmIikubGVuZ3RoO2k8bztpKz0yKXUucHVzaChwYXJzZUludChzLnN1YnN0cmluZyhpLGkrMiksMTYpKTtyZXR1cm4gdX19LHtrZXk6ImVuY29kZUludGVnZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXX19LHtrZXk6ImNvbXBpbGVIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfX0se2tleToiY29tcGlsZU5hbWVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgQSxhPWgoZSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXtmb3IodmFyIGk9dC52YWx1ZSxvPU1hdGgubWluKGkubGVuZ3RoLDEyNykscz1uZXcgQXJyYXkobyksYz0wO2M8bztjKyspe3ZhciB1PWlbY107KHU8IiEifHx1PiJ+Inx8IlsiPT09dXx8Il0iPT09dXx8IigiPT09dXx8IikiPT09dXx8InsiPT09dXx8In0iPT09dXx8IjwiPT09dXx8Ij4iPT09dXx8Ii8iPT09dXx8IiUiPT09dSkmJih1PSJfIiksc1tjXT11fSIiPT09KHM9cy5qb2luKCIiKSkmJihzPSJCYWRfRm9udF9OYW1lIiksci5hZGQoKDAsbi5zdHJpbmdUb0J5dGVzKShzKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleChyKX19LHtrZXk6ImNvbXBpbGVUb3BEaWN0cyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9W10saT1uZXcgQSxvPWgoZSk7dHJ5e2ZvcihvLnMoKTshKG49by5uKCkpLmRvbmU7KXt2YXIgcz1uLnZhbHVlO3ImJihzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFZlcnNpb24iKSxzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFJldmlzaW9uIikscy5yZW1vdmVCeU5hbWUoIkNJREZvbnRUeXBlIikscy5yZW1vdmVCeU5hbWUoIkNJRENvdW50Iikscy5yZW1vdmVCeU5hbWUoIlVJREJhc2UiKSk7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyk7YS5wdXNoKGMpLGkuYWRkKHUpLGMub2Zmc2V0KHQpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm57dHJhY2tlcnM6YSxvdXRwdXQ6aT10aGlzLmNvbXBpbGVJbmRleChpLGEpfX19LHtrZXk6ImNvbXBpbGVQcml2YXRlRGljdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTsrK2Epe3ZhciBvPWVbYV0scz1vLnByaXZhdGVEaWN0O2lmKCFzfHwhby5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyksbD1yLmxlbmd0aDtpZihjLm9mZnNldChsKSx1Lmxlbmd0aHx8KGw9MCksdFthXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbdS5sZW5ndGgsbF0sciksci5hZGQodSkscy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe3ZhciBmPXRoaXMuY29tcGlsZUluZGV4KHMuc3VicnNJbmRleCk7Yy5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW3UubGVuZ3RoXSxyKSxyLmFkZChmKX19fX0se2tleToiY29tcGlsZURpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT1bXSxpPWgoZS5vcmRlcik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKHMgaW4gZS52YWx1ZXMpe3ZhciBjPWUudmFsdWVzW3NdLHU9ZS50eXBlc1tzXTtpZihBcnJheS5pc0FycmF5KHUpfHwodT1bdV0pLEFycmF5LmlzQXJyYXkoYyl8fChjPVtjXSksMCE9PWMubGVuZ3RoKXtmb3IodmFyIGw9MCxmPXUubGVuZ3RoO2w8ZjsrK2wpe3ZhciBkPXVbbF0scD1jW2xdO3N3aXRjaChkKXtjYXNlIm51bSI6Y2FzZSJzaWQiOmEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIocCkpKTticmVhaztjYXNlIm9mZnNldCI6dmFyIGc9ZS5rZXlUb05hbWVNYXBbc107dC5pc1RyYWNraW5nKGcpfHx0LnRyYWNrKGcsYS5sZW5ndGgpLGEucHVzaCgyOSwwLDAsMCwwKTticmVhaztjYXNlImFycmF5IjpjYXNlImRlbHRhIjphLnB1c2guYXBwbHkoYSxvKHRoaXMuZW5jb2RlTnVtYmVyKHApKSk7Zm9yKHZhciB2PTEseT1jLmxlbmd0aDt2PHk7Kyt2KWEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIoY1t2XSkpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGRhdGEgdHlwZSBvZiAiLmNvbmNhdChkKSl9fWEucHVzaC5hcHBseShhLG8oZS5vcGNvZGVzW3NdKSl9fX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIGF9fSx7a2V5OiJjb21waWxlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9bmV3IEEsYT1oKGUpO3RyeXtmb3IoYS5zKCk7ISh0PWEubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZTtyLmFkZCgoMCxuLnN0cmluZ1RvQnl0ZXMpKGkpKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHIpfX0se2tleToiY29tcGlsZUdsb2JhbFN1YnJJbmRleCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNmZi5nbG9iYWxTdWJySW5kZXg7dGhpcy5vdXQud3JpdGVCeXRlQXJyYXkodGhpcy5jb21waWxlSW5kZXgoZSkpfX0se2tleToiY29tcGlsZUNoYXJTdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEEscj0wO3I8ZS5jb3VudDtyKyspe3ZhciBuPWUuZ2V0KHIpOzAhPT1uLmxlbmd0aD90LmFkZChuKTp0LmFkZChuZXcgVWludDhBcnJheShbMTM5LDE0XSkpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX19LHtrZXk6ImNvbXBpbGVDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaSxvPXQtMTtpZihhKWk9bmV3IFVpbnQ4QXJyYXkoWzIsMCwwLG8+PjgmMjU1LDI1NSZvXSk7ZWxzZXsoaT1uZXcgVWludDhBcnJheSgxKzIqbykpWzBdPTA7Zm9yKHZhciBzPTAsYz1lLmNoYXJzZXQubGVuZ3RoLHU9ITEsbD0xO2w8aS5sZW5ndGg7bCs9Mil7dmFyIGY9MDtpZihzPGMpe3ZhciBoPWUuY2hhcnNldFtzKytdOy0xPT09KGY9ci5nZXRTSUQoaCkpJiYoZj0wLHV8fCh1PSEwLCgwLG4ud2FybikoIkNvdWxkbid0IGZpbmQgIi5jb25jYXQoaCwiIGluIENGRiBzdHJpbmdzIikpKSl9aVtsXT1mPj44JjI1NSxpW2wrMV09MjU1JmZ9fXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGkpfX0se2tleToiY29tcGlsZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShlLnJhdyl9fSx7a2V5OiJjb21waWxlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1lLmZvcm1hdDtzd2l0Y2gobil7Y2FzZSAwOmZvcigodD1uZXcgVWludDhBcnJheSgxK2UuZmRTZWxlY3QubGVuZ3RoKSlbMF09bixyPTA7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspdFtyKzFdPWUuZmRTZWxlY3Rbcl07YnJlYWs7Y2FzZSAzOnZhciBhPWUuZmRTZWxlY3RbMF0saT1bbiwwLDAsMCwwLGFdO2ZvcihyPTE7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspe3ZhciBvPWUuZmRTZWxlY3Rbcl07byE9PWEmJihpLnB1c2gocj4+OCYyNTUsMjU1JnIsbyksYT1vKX12YXIgcz0oaS5sZW5ndGgtMykvMztpWzFdPXM+PjgmMjU1LGlbMl09MjU1JnMsaS5wdXNoKHI+PjgmMjU1LDI1NSZyKSx0PW5ldyBVaW50OEFycmF5KGkpfXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KHQpfX0se2tleToiY29tcGlsZVR5cGVkQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47KytyKXRbcl09ZVtyXTtyZXR1cm4gdH19LHtrZXk6ImNvbXBpbGVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLHI9ZS5vYmplY3RzLG49ci5sZW5ndGg7aWYoMD09PW4pcmV0dXJuWzAsMF07dmFyIGEsaSxzPVtuPj44JjI1NSwyNTUmbl0sYz0xO2ZvcihhPTA7YTxuOysrYSljKz1yW2FdLmxlbmd0aDtpPWM8MjU2PzE6Yzw2NTUzNj8yOmM8MTY3NzcyMTY/Mzo0LHMucHVzaChpKTt2YXIgdT0xO2ZvcihhPTA7YTxuKzE7YSsrKTE9PT1pP3MucHVzaCgyNTUmdSk6Mj09PWk/cy5wdXNoKHU+PjgmMjU1LDI1NSZ1KTozPT09aT9zLnB1c2godT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1KTpzLnB1c2godT4+PjI0JjI1NSx1Pj4xNiYyNTUsdT4+OCYyNTUsMjU1JnUpLHJbYV0mJih1Kz1yW2FdLmxlbmd0aCk7Zm9yKGE9MDthPG47YSsrKXRbYV0mJnRbYV0ub2Zmc2V0KHMubGVuZ3RoKSxzLnB1c2guYXBwbHkocyxvKHJbYV0pKTtyZXR1cm4gc319XSxbe2tleToiRW5jb2RlRmxvYXRSZWdFeHAiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJFbmNvZGVGbG9hdFJlZ0V4cCIsL1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8pfX1dKSxlfSgpO3QuQ0ZGQ29tcGlsZXI9Un0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JU09BZG9iZUNoYXJzZXQ9dC5FeHBlcnRTdWJzZXRDaGFyc2V0PXQuRXhwZXJ0Q2hhcnNldD12b2lkIDAsdC5JU09BZG9iZUNoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iXSx0LkV4cGVydENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl0sdC5FeHBlcnRTdWJzZXRDaGFyc2V0PVsiLm5vdGRlZiIsInNwYWNlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsImh5cGhlbnN1cGVyaW9yIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsImNlbnRvbGRzdHlsZSIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciJdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlphcGZEaW5nYmF0c0VuY29kaW5nPXQuV2luQW5zaUVuY29kaW5nPXQuU3ltYm9sU2V0RW5jb2Rpbmc9dC5TdGFuZGFyZEVuY29kaW5nPXQuTWFjUm9tYW5FbmNvZGluZz10LkV4cGVydEVuY29kaW5nPXZvaWQgMCx0LmdldEVuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIldpbkFuc2lFbmNvZGluZyI6cmV0dXJuIG87Y2FzZSJTdGFuZGFyZEVuY29kaW5nIjpyZXR1cm4gaTtjYXNlIk1hY1JvbWFuRW5jb2RpbmciOnJldHVybiBhO2Nhc2UiU3ltYm9sU2V0RW5jb2RpbmciOnJldHVybiBzO2Nhc2UiWmFwZkRpbmdiYXRzRW5jb2RpbmciOnJldHVybiBjO2Nhc2UiRXhwZXJ0RW5jb2RpbmciOnJldHVybiByO2Nhc2UiTWFjRXhwZXJ0RW5jb2RpbmciOnJldHVybiBuO2RlZmF1bHQ6cmV0dXJuIG51bGx9fTt2YXIgcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsIiIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsIiIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsIiIsIiIsIiIsImlzdXBlcmlvciIsIiIsIiIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsIiIsIiIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCIiLCJEb3RhY2NlbnRzbWFsbCIsIiIsIiIsIk1hY3JvbnNtYWxsIiwiIiwiIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiIiwiIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCIiLCIiLCIiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCIiLCIiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCJdO3QuRXhwZXJ0RW5jb2Rpbmc9cjt2YXIgbj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLGE9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInNwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iXTt0Lk1hY1JvbWFuRW5jb2Rpbmc9YTt2YXIgaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCIiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCIiLCJxdWVzdGlvbmRvd24iLCIiLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsIiIsInJpbmciLCJjZWRpbGxhIiwiIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJBRSIsIiIsIm9yZGZlbWluaW5lIiwiIiwiIiwiIiwiIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCIiLCIiLCIiLCIiLCIiLCJhZSIsIiIsIiIsIiIsImRvdGxlc3NpIiwiIiwiIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwiIiwiIiwiIiwiIl07dC5TdGFuZGFyZEVuY29kaW5nPWk7dmFyIG89WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiYnVsbGV0IiwiRXVybyIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwiZmxvcmluIiwicXVvdGVkYmxiYXNlIiwiZWxsaXBzaXMiLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJjaXJjdW1mbGV4IiwicGVydGhvdXNhbmQiLCJTY2Fyb24iLCJndWlsc2luZ2xsZWZ0IiwiT0UiLCJidWxsZXQiLCJaY2Fyb24iLCJidWxsZXQiLCJidWxsZXQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsImJ1bGxldCIsImVuZGFzaCIsImVtZGFzaCIsInRpbGRlIiwidHJhZGVtYXJrIiwic2Nhcm9uIiwiZ3VpbHNpbmdscmlnaHQiLCJvZSIsImJ1bGxldCIsInpjYXJvbiIsIllkaWVyZXNpcyIsInNwYWNlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImN1cnJlbmN5IiwieWVuIiwiYnJva2VuYmFyIiwic2VjdGlvbiIsImRpZXJlc2lzIiwiY29weXJpZ2h0Iiwib3JkZmVtaW5pbmUiLCJndWlsbGVtb3RsZWZ0IiwibG9naWNhbG5vdCIsImh5cGhlbiIsInJlZ2lzdGVyZWQiLCJtYWNyb24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJhY3V0ZSIsIm11IiwicGFyYWdyYXBoIiwicGVyaW9kY2VudGVyZWQiLCJjZWRpbGxhIiwib25lc3VwZXJpb3IiLCJvcmRtYXNjdWxpbmUiLCJndWlsbGVtb3RyaWdodCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93biIsIkFncmF2ZSIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQXRpbGRlIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJBRSIsIkNjZWRpbGxhIiwiRWdyYXZlIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJJZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIkV0aCIsIk50aWxkZSIsIk9ncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT3RpbGRlIiwiT2RpZXJlc2lzIiwibXVsdGlwbHkiLCJPc2xhc2giLCJVZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIllhY3V0ZSIsIlRob3JuIiwiZ2VybWFuZGJscyIsImFncmF2ZSIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYXRpbGRlIiwiYWRpZXJlc2lzIiwiYXJpbmciLCJhZSIsImNjZWRpbGxhIiwiZWdyYXZlIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImV0aCIsIm50aWxkZSIsIm9ncmF2ZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib3RpbGRlIiwib2RpZXJlc2lzIiwiZGl2aWRlIiwib3NsYXNoIiwidWdyYXZlIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ5YWN1dGUiLCJ0aG9ybiIsInlkaWVyZXNpcyJdO3QuV2luQW5zaUVuY29kaW5nPW87dmFyIHM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXTt0LlN5bWJvbFNldEVuY29kaW5nPXM7dmFyIGM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImExIiwiYTIiLCJhMjAyIiwiYTMiLCJhNCIsImE1IiwiYTExOSIsImExMTgiLCJhMTE3IiwiYTExIiwiYTEyIiwiYTEzIiwiYTE0IiwiYTE1IiwiYTE2IiwiYTEwNSIsImExNyIsImExOCIsImExOSIsImEyMCIsImEyMSIsImEyMiIsImEyMyIsImEyNCIsImEyNSIsImEyNiIsImEyNyIsImEyOCIsImE2IiwiYTciLCJhOCIsImE5IiwiYTEwIiwiYTI5IiwiYTMwIiwiYTMxIiwiYTMyIiwiYTMzIiwiYTM0IiwiYTM1IiwiYTM2IiwiYTM3IiwiYTM4IiwiYTM5IiwiYTQwIiwiYTQxIiwiYTQyIiwiYTQzIiwiYTQ0IiwiYTQ1IiwiYTQ2IiwiYTQ3IiwiYTQ4IiwiYTQ5IiwiYTUwIiwiYTUxIiwiYTUyIiwiYTUzIiwiYTU0IiwiYTU1IiwiYTU2IiwiYTU3IiwiYTU4IiwiYTU5IiwiYTYwIiwiYTYxIiwiYTYyIiwiYTYzIiwiYTY0IiwiYTY1IiwiYTY2IiwiYTY3IiwiYTY4IiwiYTY5IiwiYTcwIiwiYTcxIiwiYTcyIiwiYTczIiwiYTc0IiwiYTIwMyIsImE3NSIsImEyMDQiLCJhNzYiLCJhNzciLCJhNzgiLCJhNzkiLCJhODEiLCJhODIiLCJhODMiLCJhODQiLCJhOTciLCJhOTgiLCJhOTkiLCJhMTAwIiwiIiwiYTg5IiwiYTkwIiwiYTkzIiwiYTk0IiwiYTkxIiwiYTkyIiwiYTIwNSIsImE4NSIsImEyMDYiLCJhODYiLCJhODciLCJhODgiLCJhOTUiLCJhOTYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJhMTAxIiwiYTEwMiIsImExMDMiLCJhMTA0IiwiYTEwNiIsImExMDciLCJhMTA4IiwiYTExMiIsImExMTEiLCJhMTEwIiwiYTEwOSIsImExMjAiLCJhMTIxIiwiYTEyMiIsImExMjMiLCJhMTI0IiwiYTEyNSIsImExMjYiLCJhMTI3IiwiYTEyOCIsImExMjkiLCJhMTMwIiwiYTEzMSIsImExMzIiLCJhMTMzIiwiYTEzNCIsImExMzUiLCJhMTM2IiwiYTEzNyIsImExMzgiLCJhMTM5IiwiYTE0MCIsImExNDEiLCJhMTQyIiwiYTE0MyIsImExNDQiLCJhMTQ1IiwiYTE0NiIsImExNDciLCJhMTQ4IiwiYTE0OSIsImExNTAiLCJhMTUxIiwiYTE1MiIsImExNTMiLCJhMTU0IiwiYTE1NSIsImExNTYiLCJhMTU3IiwiYTE1OCIsImExNTkiLCJhMTYwIiwiYTE2MSIsImExNjMiLCJhMTY0IiwiYTE5NiIsImExNjUiLCJhMTkyIiwiYTE2NiIsImExNjciLCJhMTY4IiwiYTE2OSIsImExNzAiLCJhMTcxIiwiYTE3MiIsImExNzMiLCJhMTYyIiwiYTE3NCIsImExNzUiLCJhMTc2IiwiYTE3NyIsImExNzgiLCJhMTc5IiwiYTE5MyIsImExODAiLCJhMTk5IiwiYTE4MSIsImEyMDAiLCJhMTgyIiwiIiwiYTIwMSIsImExODMiLCJhMTg0IiwiYTE5NyIsImExODUiLCJhMTk0IiwiYTE5OCIsImExODYiLCJhMTk1IiwiYTE4NyIsImExODgiLCJhMTg5IiwiYTE5MCIsImExOTEiLCIiXTt0LlphcGZEaW5nYmF0c0VuY29kaW5nPWN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9dC5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc9dC5Gb250RmxhZ3M9dm9pZCAwLHQuZ2V0Rm9udFR5cGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3N3aXRjaChlKXtjYXNlIlR5cGUxIjpyZXR1cm4gcj9uLkZvbnRUeXBlLlRZUEUxU1RBTkRBUkQ6IlR5cGUxQyI9PT10P24uRm9udFR5cGUuVFlQRTFDOm4uRm9udFR5cGUuVFlQRTE7Y2FzZSJDSURGb250VHlwZTAiOnJldHVybiJDSURGb250VHlwZTBDIj09PXQ/bi5Gb250VHlwZS5DSURGT05UVFlQRTBDOm4uRm9udFR5cGUuQ0lERk9OVFRZUEUwO2Nhc2UiT3BlblR5cGUiOnJldHVybiBuLkZvbnRUeXBlLk9QRU5UWVBFO2Nhc2UiVHJ1ZVR5cGUiOnJldHVybiBuLkZvbnRUeXBlLlRSVUVUWVBFO2Nhc2UiQ0lERm9udFR5cGUyIjpyZXR1cm4gbi5Gb250VHlwZS5DSURGT05UVFlQRTI7Y2FzZSJNTVR5cGUxIjpyZXR1cm4gbi5Gb250VHlwZS5NTVRZUEUxO2Nhc2UiVHlwZTAiOnJldHVybiBuLkZvbnRUeXBlLlRZUEUwO2RlZmF1bHQ6cmV0dXJuIG4uRm9udFR5cGUuVU5LTk9XTn19LHQubm9ybWFsaXplRm9udE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWyxfXS9nLCItIikucmVwbGFjZSgvXHMvZywiIil9LHQucmVjb3ZlckdseXBoTmFtZT1jLHQudHlwZTFGb250R2x5cGhNYXBwaW5nPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixvLHUsbD1PYmplY3QuY3JlYXRlKG51bGwpLGY9ISEoZS5mbGFncyZzLlN5bWJvbGljKTtpZihlLmlzSW50ZXJuYWxGb250KWZvcih1PXQsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7ZWxzZSBpZihlLmJhc2VFbmNvZGluZ05hbWUpZm9yKHU9KDAsYS5nZXRFbmNvZGluZykoZS5iYXNlRW5jb2RpbmdOYW1lKSxvPTA7bzx1Lmxlbmd0aDtvKyspbj1yLmluZGV4T2YodVtvXSksbFtvXT1uPj0wP246MDtlbHNlIGlmKGYpZm9yKG8gaW4gdClsW29dPXRbb107ZWxzZSBmb3IodT1hLlN0YW5kYXJkRW5jb2Rpbmcsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7dmFyIGgsZD1lLmRpZmZlcmVuY2VzO2lmKGQpZm9yKG8gaW4gZCl7dmFyIHA9ZFtvXTtpZigtMT09PShuPXIuaW5kZXhPZihwKSkpe2h8fChoPSgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSk7dmFyIGc9YyhwLGgpO2chPT1wJiYobj1yLmluZGV4T2YoZykpfWxbb109bj49MD9uOjB9cmV0dXJuIGx9O3ZhciBuPXIoMiksYT1yKDE2NiksaT1yKDE2OCksbz1yKDE2OSk7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9ITA7dmFyIHM9e0ZpeGVkUGl0Y2g6MSxTZXJpZjoyLFN5bWJvbGljOjQsU2NyaXB0OjgsTm9uc3ltYm9saWM6MzIsSXRhbGljOjY0LEFsbENhcDo2NTUzNixTbWFsbENhcDoxMzEwNzIsRm9yY2VCb2xkOjI2MjE0NH07ZnVuY3Rpb24gYyhlLHQpe2lmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIGU7dmFyIHI9KDAsby5nZXRVbmljb2RlRm9yR2x5cGgpKGUsdCk7aWYoLTEhPT1yKWZvcih2YXIgYSBpbiB0KWlmKHRbYV09PT1yKXJldHVybiBhO3JldHVybigwLG4uaW5mbykoIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSksZX10LkZvbnRGbGFncz1zLHQuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXX0sKGUsdCxyKT0+e3Iucih0KSxyLmQodCx7Z2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlOigpPT5pLGdldEdseXBoc1VuaWNvZGU6KCk9PmF9KTt2YXIgbj1yKDEzNSk7Y29uc3QgYT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIkEiLDY1LCJBRSIsMTk4LCJBRWFjdXRlIiw1MDgsIkFFbWFjcm9uIiw0ODIsIkFFc21hbGwiLDYzNDYyLCJBYWN1dGUiLDE5MywiQWFjdXRlc21hbGwiLDYzNDU3LCJBYnJldmUiLDI1OCwiQWJyZXZlYWN1dGUiLDc4NTQsIkFicmV2ZWN5cmlsbGljIiwxMjMyLCJBYnJldmVkb3RiZWxvdyIsNzg2MiwiQWJyZXZlZ3JhdmUiLDc4NTYsIkFicmV2ZWhvb2thYm92ZSIsNzg1OCwiQWJyZXZldGlsZGUiLDc4NjAsIkFjYXJvbiIsNDYxLCJBY2lyY2xlIiw5Mzk4LCJBY2lyY3VtZmxleCIsMTk0LCJBY2lyY3VtZmxleGFjdXRlIiw3ODQ0LCJBY2lyY3VtZmxleGRvdGJlbG93Iiw3ODUyLCJBY2lyY3VtZmxleGdyYXZlIiw3ODQ2LCJBY2lyY3VtZmxleGhvb2thYm92ZSIsNzg0OCwiQWNpcmN1bWZsZXhzbWFsbCIsNjM0NTgsIkFjaXJjdW1mbGV4dGlsZGUiLDc4NTAsIkFjdXRlIiw2MzE3NywiQWN1dGVzbWFsbCIsNjM0MTIsIkFjeXJpbGxpYyIsMTA0MCwiQWRibGdyYXZlIiw1MTIsIkFkaWVyZXNpcyIsMTk2LCJBZGllcmVzaXNjeXJpbGxpYyIsMTIzNCwiQWRpZXJlc2lzbWFjcm9uIiw0NzgsIkFkaWVyZXNpc3NtYWxsIiw2MzQ2MCwiQWRvdGJlbG93Iiw3ODQwLCJBZG90bWFjcm9uIiw0ODAsIkFncmF2ZSIsMTkyLCJBZ3JhdmVzbWFsbCIsNjM0NTYsIkFob29rYWJvdmUiLDc4NDIsIkFpZWN5cmlsbGljIiwxMjM2LCJBaW52ZXJ0ZWRicmV2ZSIsNTE0LCJBbHBoYSIsOTEzLCJBbHBoYXRvbm9zIiw5MDIsIkFtYWNyb24iLDI1NiwiQW1vbm9zcGFjZSIsNjUzMTMsIkFvZ29uZWsiLDI2MCwiQXJpbmciLDE5NywiQXJpbmdhY3V0ZSIsNTA2LCJBcmluZ2JlbG93Iiw3NjgwLCJBcmluZ3NtYWxsIiw2MzQ2MSwiQXNtYWxsIiw2MzMyOSwiQXRpbGRlIiwxOTUsIkF0aWxkZXNtYWxsIiw2MzQ1OSwiQXliYXJtZW5pYW4iLDEzMjksIkIiLDY2LCJCY2lyY2xlIiw5Mzk5LCJCZG90YWNjZW50Iiw3NjgyLCJCZG90YmVsb3ciLDc2ODQsIkJlY3lyaWxsaWMiLDEwNDEsIkJlbmFybWVuaWFuIiwxMzMwLCJCZXRhIiw5MTQsIkJob29rIiwzODUsIkJsaW5lYmVsb3ciLDc2ODYsIkJtb25vc3BhY2UiLDY1MzE0LCJCcmV2ZXNtYWxsIiw2MzIyMCwiQnNtYWxsIiw2MzMzMCwiQnRvcGJhciIsMzg2LCJDIiw2NywiQ2Fhcm1lbmlhbiIsMTM0MiwiQ2FjdXRlIiwyNjIsIkNhcm9uIiw2MzE3OCwiQ2Fyb25zbWFsbCIsNjMyMjEsIkNjYXJvbiIsMjY4LCJDY2VkaWxsYSIsMTk5LCJDY2VkaWxsYWFjdXRlIiw3Njg4LCJDY2VkaWxsYXNtYWxsIiw2MzQ2MywiQ2NpcmNsZSIsOTQwMCwiQ2NpcmN1bWZsZXgiLDI2NCwiQ2RvdCIsMjY2LCJDZG90YWNjZW50IiwyNjYsIkNlZGlsbGFzbWFsbCIsNjM0MTYsIkNoYWFybWVuaWFuIiwxMzUzLCJDaGVhYmtoYXNpYW5jeXJpbGxpYyIsMTIxMiwiQ2hlY3lyaWxsaWMiLDEwNjMsIkNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljIiwxMjE0LCJDaGVkZXNjZW5kZXJjeXJpbGxpYyIsMTIwNiwiQ2hlZGllcmVzaXNjeXJpbGxpYyIsMTI2OCwiQ2hlaGFybWVuaWFuIiwxMzQ3LCJDaGVraGFrYXNzaWFuY3lyaWxsaWMiLDEyMjcsIkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMiLDEyMDgsIkNoaSIsOTM1LCJDaG9vayIsMzkxLCJDaXJjdW1mbGV4c21hbGwiLDYzMjIyLCJDbW9ub3NwYWNlIiw2NTMxNSwiQ29hcm1lbmlhbiIsMTM2MSwiQ3NtYWxsIiw2MzMzMSwiRCIsNjgsIkRaIiw0OTcsIkRaY2Fyb24iLDQ1MiwiRGFhcm1lbmlhbiIsMTMzMiwiRGFmcmljYW4iLDM5MywiRGNhcm9uIiwyNzAsIkRjZWRpbGxhIiw3Njk2LCJEY2lyY2xlIiw5NDAxLCJEY2lyY3VtZmxleGJlbG93Iiw3Njk4LCJEY3JvYXQiLDI3MiwiRGRvdGFjY2VudCIsNzY5MCwiRGRvdGJlbG93Iiw3NjkyLCJEZWN5cmlsbGljIiwxMDQ0LCJEZWljb3B0aWMiLDEwMDYsIkRlbHRhIiw4NzEwLCJEZWx0YWdyZWVrIiw5MTYsIkRob29rIiwzOTQsIkRpZXJlc2lzIiw2MzE3OSwiRGllcmVzaXNBY3V0ZSIsNjMxODAsIkRpZXJlc2lzR3JhdmUiLDYzMTgxLCJEaWVyZXNpc3NtYWxsIiw2MzQwMCwiRGlnYW1tYWdyZWVrIiw5ODgsIkRqZWN5cmlsbGljIiwxMDI2LCJEbGluZWJlbG93Iiw3Njk0LCJEbW9ub3NwYWNlIiw2NTMxNiwiRG90YWNjZW50c21hbGwiLDYzMjIzLCJEc2xhc2giLDI3MiwiRHNtYWxsIiw2MzMzMiwiRHRvcGJhciIsMzk1LCJEeiIsNDk4LCJEemNhcm9uIiw0NTMsIkR6ZWFia2hhc2lhbmN5cmlsbGljIiwxMjQ4LCJEemVjeXJpbGxpYyIsMTAyOSwiRHpoZWN5cmlsbGljIiwxMDM5LCJFIiw2OSwiRWFjdXRlIiwyMDEsIkVhY3V0ZXNtYWxsIiw2MzQ2NSwiRWJyZXZlIiwyNzYsIkVjYXJvbiIsMjgyLCJFY2VkaWxsYWJyZXZlIiw3NzA4LCJFY2hhcm1lbmlhbiIsMTMzMywiRWNpcmNsZSIsOTQwMiwiRWNpcmN1bWZsZXgiLDIwMiwiRWNpcmN1bWZsZXhhY3V0ZSIsNzg3MCwiRWNpcmN1bWZsZXhiZWxvdyIsNzcwNCwiRWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg3OCwiRWNpcmN1bWZsZXhncmF2ZSIsNzg3MiwiRWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NzQsIkVjaXJjdW1mbGV4c21hbGwiLDYzNDY2LCJFY2lyY3VtZmxleHRpbGRlIiw3ODc2LCJFY3lyaWxsaWMiLDEwMjgsIkVkYmxncmF2ZSIsNTE2LCJFZGllcmVzaXMiLDIwMywiRWRpZXJlc2lzc21hbGwiLDYzNDY3LCJFZG90IiwyNzgsIkVkb3RhY2NlbnQiLDI3OCwiRWRvdGJlbG93Iiw3ODY0LCJFZmN5cmlsbGljIiwxMDYwLCJFZ3JhdmUiLDIwMCwiRWdyYXZlc21hbGwiLDYzNDY0LCJFaGFybWVuaWFuIiwxMzM1LCJFaG9va2Fib3ZlIiw3ODY2LCJFaWdodHJvbWFuIiw4NTUxLCJFaW52ZXJ0ZWRicmV2ZSIsNTE4LCJFaW90aWZpZWRjeXJpbGxpYyIsMTEyNCwiRWxjeXJpbGxpYyIsMTA1MSwiRWxldmVucm9tYW4iLDg1NTQsIkVtYWNyb24iLDI3NCwiRW1hY3JvbmFjdXRlIiw3NzAyLCJFbWFjcm9uZ3JhdmUiLDc3MDAsIkVtY3lyaWxsaWMiLDEwNTIsIkVtb25vc3BhY2UiLDY1MzE3LCJFbmN5cmlsbGljIiwxMDUzLCJFbmRlc2NlbmRlcmN5cmlsbGljIiwxMTg2LCJFbmciLDMzMCwiRW5naGVjeXJpbGxpYyIsMTE4OCwiRW5ob29rY3lyaWxsaWMiLDEyMjMsIkVvZ29uZWsiLDI4MCwiRW9wZW4iLDQwMCwiRXBzaWxvbiIsOTE3LCJFcHNpbG9udG9ub3MiLDkwNCwiRXJjeXJpbGxpYyIsMTA1NiwiRXJldmVyc2VkIiwzOTgsIkVyZXZlcnNlZGN5cmlsbGljIiwxMDY5LCJFc2N5cmlsbGljIiwxMDU3LCJFc2Rlc2NlbmRlcmN5cmlsbGljIiwxMTk0LCJFc2giLDQyNSwiRXNtYWxsIiw2MzMzMywiRXRhIiw5MTksIkV0YXJtZW5pYW4iLDEzMzYsIkV0YXRvbm9zIiw5MDUsIkV0aCIsMjA4LCJFdGhzbWFsbCIsNjM0NzIsIkV0aWxkZSIsNzg2OCwiRXRpbGRlYmVsb3ciLDc3MDYsIkV1cm8iLDgzNjQsIkV6aCIsNDM5LCJFemhjYXJvbiIsNDk0LCJFemhyZXZlcnNlZCIsNDQwLCJGIiw3MCwiRmNpcmNsZSIsOTQwMywiRmRvdGFjY2VudCIsNzcxMCwiRmVoYXJtZW5pYW4iLDEzNjYsIkZlaWNvcHRpYyIsOTk2LCJGaG9vayIsNDAxLCJGaXRhY3lyaWxsaWMiLDExMzgsIkZpdmVyb21hbiIsODU0OCwiRm1vbm9zcGFjZSIsNjUzMTgsIkZvdXJyb21hbiIsODU0NywiRnNtYWxsIiw2MzMzNCwiRyIsNzEsIkdCc3F1YXJlIiwxMzE5MSwiR2FjdXRlIiw1MDAsIkdhbW1hIiw5MTUsIkdhbW1hYWZyaWNhbiIsNDA0LCJHYW5naWFjb3B0aWMiLDEwMDIsIkdicmV2ZSIsMjg2LCJHY2Fyb24iLDQ4NiwiR2NlZGlsbGEiLDI5MCwiR2NpcmNsZSIsOTQwNCwiR2NpcmN1bWZsZXgiLDI4NCwiR2NvbW1hYWNjZW50IiwyOTAsIkdkb3QiLDI4OCwiR2RvdGFjY2VudCIsMjg4LCJHZWN5cmlsbGljIiwxMDQzLCJHaGFkYXJtZW5pYW4iLDEzNDYsIkdoZW1pZGRsZWhvb2tjeXJpbGxpYyIsMTE3MiwiR2hlc3Ryb2tlY3lyaWxsaWMiLDExNzAsIkdoZXVwdHVybmN5cmlsbGljIiwxMTY4LCJHaG9vayIsNDAzLCJHaW1hcm1lbmlhbiIsMTMzMSwiR2plY3lyaWxsaWMiLDEwMjcsIkdtYWNyb24iLDc3MTIsIkdtb25vc3BhY2UiLDY1MzE5LCJHcmF2ZSIsNjMxODIsIkdyYXZlc21hbGwiLDYzMzI4LCJHc21hbGwiLDYzMzM1LCJHc21hbGxob29rIiw2NjcsIkdzdHJva2UiLDQ4NCwiSCIsNzIsIkgxODUzMyIsOTY3OSwiSDE4NTQzIiw5NjQyLCJIMTg1NTEiLDk2NDMsIkgyMjA3MyIsOTYzMywiSFBzcXVhcmUiLDEzMjU5LCJIYWFia2hhc2lhbmN5cmlsbGljIiwxMTkyLCJIYWRlc2NlbmRlcmN5cmlsbGljIiwxMjAyLCJIYXJkc2lnbmN5cmlsbGljIiwxMDY2LCJIYmFyIiwyOTQsIkhicmV2ZWJlbG93Iiw3NzIyLCJIY2VkaWxsYSIsNzcyMCwiSGNpcmNsZSIsOTQwNSwiSGNpcmN1bWZsZXgiLDI5MiwiSGRpZXJlc2lzIiw3NzE4LCJIZG90YWNjZW50Iiw3NzE0LCJIZG90YmVsb3ciLDc3MTYsIkhtb25vc3BhY2UiLDY1MzIwLCJIb2FybWVuaWFuIiwxMzQ0LCJIb3JpY29wdGljIiwxZTMsIkhzbWFsbCIsNjMzMzYsIkh1bmdhcnVtbGF1dCIsNjMxODMsIkh1bmdhcnVtbGF1dHNtYWxsIiw2MzIyNCwiSHpzcXVhcmUiLDEzMjAwLCJJIiw3MywiSUFjeXJpbGxpYyIsMTA3MSwiSUoiLDMwNiwiSVVjeXJpbGxpYyIsMTA3MCwiSWFjdXRlIiwyMDUsIklhY3V0ZXNtYWxsIiw2MzQ2OSwiSWJyZXZlIiwzMDAsIkljYXJvbiIsNDYzLCJJY2lyY2xlIiw5NDA2LCJJY2lyY3VtZmxleCIsMjA2LCJJY2lyY3VtZmxleHNtYWxsIiw2MzQ3MCwiSWN5cmlsbGljIiwxMDMwLCJJZGJsZ3JhdmUiLDUyMCwiSWRpZXJlc2lzIiwyMDcsIklkaWVyZXNpc2FjdXRlIiw3NzI2LCJJZGllcmVzaXNjeXJpbGxpYyIsMTI1MiwiSWRpZXJlc2lzc21hbGwiLDYzNDcxLCJJZG90IiwzMDQsIklkb3RhY2NlbnQiLDMwNCwiSWRvdGJlbG93Iiw3ODgyLCJJZWJyZXZlY3lyaWxsaWMiLDEyMzgsIkllY3lyaWxsaWMiLDEwNDUsIklmcmFrdHVyIiw4NDY1LCJJZ3JhdmUiLDIwNCwiSWdyYXZlc21hbGwiLDYzNDY4LCJJaG9va2Fib3ZlIiw3ODgwLCJJaWN5cmlsbGljIiwxMDQ4LCJJaW52ZXJ0ZWRicmV2ZSIsNTIyLCJJaXNob3J0Y3lyaWxsaWMiLDEwNDksIkltYWNyb24iLDI5OCwiSW1hY3JvbmN5cmlsbGljIiwxMjUwLCJJbW9ub3NwYWNlIiw2NTMyMSwiSW5pYXJtZW5pYW4iLDEzMzksIklvY3lyaWxsaWMiLDEwMjUsIklvZ29uZWsiLDMwMiwiSW90YSIsOTIxLCJJb3RhYWZyaWNhbiIsNDA2LCJJb3RhZGllcmVzaXMiLDkzOCwiSW90YXRvbm9zIiw5MDYsIklzbWFsbCIsNjMzMzcsIklzdHJva2UiLDQwNywiSXRpbGRlIiwyOTYsIkl0aWxkZWJlbG93Iiw3NzI0LCJJemhpdHNhY3lyaWxsaWMiLDExNDAsIkl6aGl0c2FkYmxncmF2ZWN5cmlsbGljIiwxMTQyLCJKIiw3NCwiSmFhcm1lbmlhbiIsMTM0NSwiSmNpcmNsZSIsOTQwNywiSmNpcmN1bWZsZXgiLDMwOCwiSmVjeXJpbGxpYyIsMTAzMiwiSmhlaGFybWVuaWFuIiwxMzU1LCJKbW9ub3NwYWNlIiw2NTMyMiwiSnNtYWxsIiw2MzMzOCwiSyIsNzUsIktCc3F1YXJlIiwxMzE4OSwiS0tzcXVhcmUiLDEzMjYxLCJLYWJhc2hraXJjeXJpbGxpYyIsMTE4NCwiS2FjdXRlIiw3NzI4LCJLYWN5cmlsbGljIiwxMDUwLCJLYWRlc2NlbmRlcmN5cmlsbGljIiwxMTc4LCJLYWhvb2tjeXJpbGxpYyIsMTIxOSwiS2FwcGEiLDkyMiwiS2FzdHJva2VjeXJpbGxpYyIsMTE4MiwiS2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMTgwLCJLY2Fyb24iLDQ4OCwiS2NlZGlsbGEiLDMxMCwiS2NpcmNsZSIsOTQwOCwiS2NvbW1hYWNjZW50IiwzMTAsIktkb3RiZWxvdyIsNzczMCwiS2VoYXJtZW5pYW4iLDEzNjQsIktlbmFybWVuaWFuIiwxMzQzLCJLaGFjeXJpbGxpYyIsMTA2MSwiS2hlaWNvcHRpYyIsOTk4LCJLaG9vayIsNDA4LCJLamVjeXJpbGxpYyIsMTAzNiwiS2xpbmViZWxvdyIsNzczMiwiS21vbm9zcGFjZSIsNjUzMjMsIktvcHBhY3lyaWxsaWMiLDExNTIsIktvcHBhZ3JlZWsiLDk5MCwiS3NpY3lyaWxsaWMiLDExMzQsIktzbWFsbCIsNjMzMzksIkwiLDc2LCJMSiIsNDU1LCJMTCIsNjMxNjcsIkxhY3V0ZSIsMzEzLCJMYW1iZGEiLDkyMywiTGNhcm9uIiwzMTcsIkxjZWRpbGxhIiwzMTUsIkxjaXJjbGUiLDk0MDksIkxjaXJjdW1mbGV4YmVsb3ciLDc3NDAsIkxjb21tYWFjY2VudCIsMzE1LCJMZG90IiwzMTksIkxkb3RhY2NlbnQiLDMxOSwiTGRvdGJlbG93Iiw3NzM0LCJMZG90YmVsb3dtYWNyb24iLDc3MzYsIkxpd25hcm1lbmlhbiIsMTM0MCwiTGoiLDQ1NiwiTGplY3lyaWxsaWMiLDEwMzMsIkxsaW5lYmVsb3ciLDc3MzgsIkxtb25vc3BhY2UiLDY1MzI0LCJMc2xhc2giLDMyMSwiTHNsYXNoc21hbGwiLDYzMjI1LCJMc21hbGwiLDYzMzQwLCJNIiw3NywiTUJzcXVhcmUiLDEzMTkwLCJNYWNyb24iLDYzMTg0LCJNYWNyb25zbWFsbCIsNjM0MDcsIk1hY3V0ZSIsNzc0MiwiTWNpcmNsZSIsOTQxMCwiTWRvdGFjY2VudCIsNzc0NCwiTWRvdGJlbG93Iiw3NzQ2LCJNZW5hcm1lbmlhbiIsMTM0OCwiTW1vbm9zcGFjZSIsNjUzMjUsIk1zbWFsbCIsNjMzNDEsIk10dXJuZWQiLDQxMiwiTXUiLDkyNCwiTiIsNzgsIk5KIiw0NTgsIk5hY3V0ZSIsMzIzLCJOY2Fyb24iLDMyNywiTmNlZGlsbGEiLDMyNSwiTmNpcmNsZSIsOTQxMSwiTmNpcmN1bWZsZXhiZWxvdyIsNzc1NCwiTmNvbW1hYWNjZW50IiwzMjUsIk5kb3RhY2NlbnQiLDc3NDgsIk5kb3RiZWxvdyIsNzc1MCwiTmhvb2tsZWZ0Iiw0MTMsIk5pbmVyb21hbiIsODU1MiwiTmoiLDQ1OSwiTmplY3lyaWxsaWMiLDEwMzQsIk5saW5lYmVsb3ciLDc3NTIsIk5tb25vc3BhY2UiLDY1MzI2LCJOb3dhcm1lbmlhbiIsMTM1MCwiTnNtYWxsIiw2MzM0MiwiTnRpbGRlIiwyMDksIk50aWxkZXNtYWxsIiw2MzQ3MywiTnUiLDkyNSwiTyIsNzksIk9FIiwzMzgsIk9Fc21hbGwiLDYzMjI2LCJPYWN1dGUiLDIxMSwiT2FjdXRlc21hbGwiLDYzNDc1LCJPYmFycmVkY3lyaWxsaWMiLDEyNTYsIk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljIiwxMjU4LCJPYnJldmUiLDMzNCwiT2Nhcm9uIiw0NjUsIk9jZW50ZXJlZHRpbGRlIiw0MTUsIk9jaXJjbGUiLDk0MTIsIk9jaXJjdW1mbGV4IiwyMTIsIk9jaXJjdW1mbGV4YWN1dGUiLDc4ODgsIk9jaXJjdW1mbGV4ZG90YmVsb3ciLDc4OTYsIk9jaXJjdW1mbGV4Z3JhdmUiLDc4OTAsIk9jaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODkyLCJPY2lyY3VtZmxleHNtYWxsIiw2MzQ3NiwiT2NpcmN1bWZsZXh0aWxkZSIsNzg5NCwiT2N5cmlsbGljIiwxMDU0LCJPZGJsYWN1dGUiLDMzNiwiT2RibGdyYXZlIiw1MjQsIk9kaWVyZXNpcyIsMjE0LCJPZGllcmVzaXNjeXJpbGxpYyIsMTI1NCwiT2RpZXJlc2lzc21hbGwiLDYzNDc4LCJPZG90YmVsb3ciLDc4ODQsIk9nb25la3NtYWxsIiw2MzIyNywiT2dyYXZlIiwyMTAsIk9ncmF2ZXNtYWxsIiw2MzQ3NCwiT2hhcm1lbmlhbiIsMTM2NSwiT2htIiw4NDg2LCJPaG9va2Fib3ZlIiw3ODg2LCJPaG9ybiIsNDE2LCJPaG9ybmFjdXRlIiw3ODk4LCJPaG9ybmRvdGJlbG93Iiw3OTA2LCJPaG9ybmdyYXZlIiw3OTAwLCJPaG9ybmhvb2thYm92ZSIsNzkwMiwiT2hvcm50aWxkZSIsNzkwNCwiT2h1bmdhcnVtbGF1dCIsMzM2LCJPaSIsNDE4LCJPaW52ZXJ0ZWRicmV2ZSIsNTI2LCJPbWFjcm9uIiwzMzIsIk9tYWNyb25hY3V0ZSIsNzc2MiwiT21hY3JvbmdyYXZlIiw3NzYwLCJPbWVnYSIsODQ4NiwiT21lZ2FjeXJpbGxpYyIsMTEyMCwiT21lZ2FncmVlayIsOTM3LCJPbWVnYXJvdW5kY3lyaWxsaWMiLDExNDYsIk9tZWdhdGl0bG9jeXJpbGxpYyIsMTE0OCwiT21lZ2F0b25vcyIsOTExLCJPbWljcm9uIiw5MjcsIk9taWNyb250b25vcyIsOTA4LCJPbW9ub3NwYWNlIiw2NTMyNywiT25lcm9tYW4iLDg1NDQsIk9vZ29uZWsiLDQ5MCwiT29nb25la21hY3JvbiIsNDkyLCJPb3BlbiIsMzkwLCJPc2xhc2giLDIxNiwiT3NsYXNoYWN1dGUiLDUxMCwiT3NsYXNoc21hbGwiLDYzNDgwLCJPc21hbGwiLDYzMzQzLCJPc3Ryb2tlYWN1dGUiLDUxMCwiT3RjeXJpbGxpYyIsMTE1MCwiT3RpbGRlIiwyMTMsIk90aWxkZWFjdXRlIiw3NzU2LCJPdGlsZGVkaWVyZXNpcyIsNzc1OCwiT3RpbGRlc21hbGwiLDYzNDc3LCJQIiw4MCwiUGFjdXRlIiw3NzY0LCJQY2lyY2xlIiw5NDEzLCJQZG90YWNjZW50Iiw3NzY2LCJQZWN5cmlsbGljIiwxMDU1LCJQZWhhcm1lbmlhbiIsMTM1NCwiUGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTAsIlBoaSIsOTM0LCJQaG9vayIsNDIwLCJQaSIsOTI4LCJQaXdyYXJtZW5pYW4iLDEzNjMsIlBtb25vc3BhY2UiLDY1MzI4LCJQc2kiLDkzNiwiUHNpY3lyaWxsaWMiLDExMzYsIlBzbWFsbCIsNjMzNDQsIlEiLDgxLCJRY2lyY2xlIiw5NDE0LCJRbW9ub3NwYWNlIiw2NTMyOSwiUXNtYWxsIiw2MzM0NSwiUiIsODIsIlJhYXJtZW5pYW4iLDEzNTYsIlJhY3V0ZSIsMzQwLCJSY2Fyb24iLDM0NCwiUmNlZGlsbGEiLDM0MiwiUmNpcmNsZSIsOTQxNSwiUmNvbW1hYWNjZW50IiwzNDIsIlJkYmxncmF2ZSIsNTI4LCJSZG90YWNjZW50Iiw3NzY4LCJSZG90YmVsb3ciLDc3NzAsIlJkb3RiZWxvd21hY3JvbiIsNzc3MiwiUmVoYXJtZW5pYW4iLDEzNjAsIlJmcmFrdHVyIiw4NDc2LCJSaG8iLDkyOSwiUmluZ3NtYWxsIiw2MzIyOCwiUmludmVydGVkYnJldmUiLDUzMCwiUmxpbmViZWxvdyIsNzc3NCwiUm1vbm9zcGFjZSIsNjUzMzAsIlJzbWFsbCIsNjMzNDYsIlJzbWFsbGludmVydGVkIiw2NDEsIlJzbWFsbGludmVydGVkc3VwZXJpb3IiLDY5NCwiUyIsODMsIlNGMDEwMDAwIiw5NDg0LCJTRjAyMDAwMCIsOTQ5MiwiU0YwMzAwMDAiLDk0ODgsIlNGMDQwMDAwIiw5NDk2LCJTRjA1MDAwMCIsOTUzMiwiU0YwNjAwMDAiLDk1MTYsIlNGMDcwMDAwIiw5NTI0LCJTRjA4MDAwMCIsOTUwMCwiU0YwOTAwMDAiLDk1MDgsIlNGMTAwMDAwIiw5NDcyLCJTRjExMDAwMCIsOTQ3NCwiU0YxOTAwMDAiLDk1NjksIlNGMjAwMDAwIiw5NTcwLCJTRjIxMDAwMCIsOTU1OCwiU0YyMjAwMDAiLDk1NTcsIlNGMjMwMDAwIiw5NTcxLCJTRjI0MDAwMCIsOTU1MywiU0YyNTAwMDAiLDk1NTksIlNGMjYwMDAwIiw5NTY1LCJTRjI3MDAwMCIsOTU2NCwiU0YyODAwMDAiLDk1NjMsIlNGMzYwMDAwIiw5NTY2LCJTRjM3MDAwMCIsOTU2NywiU0YzODAwMDAiLDk1NjIsIlNGMzkwMDAwIiw5NTU2LCJTRjQwMDAwMCIsOTU3NywiU0Y0MTAwMDAiLDk1NzQsIlNGNDIwMDAwIiw5NTY4LCJTRjQzMDAwMCIsOTU1MiwiU0Y0NDAwMDAiLDk1ODAsIlNGNDUwMDAwIiw5NTc1LCJTRjQ2MDAwMCIsOTU3NiwiU0Y0NzAwMDAiLDk1NzIsIlNGNDgwMDAwIiw5NTczLCJTRjQ5MDAwMCIsOTU2MSwiU0Y1MDAwMDAiLDk1NjAsIlNGNTEwMDAwIiw5NTU0LCJTRjUyMDAwMCIsOTU1NSwiU0Y1MzAwMDAiLDk1NzksIlNGNTQwMDAwIiw5NTc4LCJTYWN1dGUiLDM0NiwiU2FjdXRlZG90YWNjZW50Iiw3NzgwLCJTYW1waWdyZWVrIiw5OTIsIlNjYXJvbiIsMzUyLCJTY2Fyb25kb3RhY2NlbnQiLDc3ODIsIlNjYXJvbnNtYWxsIiw2MzIyOSwiU2NlZGlsbGEiLDM1MCwiU2Nod2EiLDM5OSwiU2Nod2FjeXJpbGxpYyIsMTI0MCwiU2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQyLCJTY2lyY2xlIiw5NDE2LCJTY2lyY3VtZmxleCIsMzQ4LCJTY29tbWFhY2NlbnQiLDUzNiwiU2RvdGFjY2VudCIsNzc3NiwiU2RvdGJlbG93Iiw3Nzc4LCJTZG90YmVsb3dkb3RhY2NlbnQiLDc3ODQsIlNlaGFybWVuaWFuIiwxMzU3LCJTZXZlbnJvbWFuIiw4NTUwLCJTaGFhcm1lbmlhbiIsMTM1MSwiU2hhY3lyaWxsaWMiLDEwNjQsIlNoY2hhY3lyaWxsaWMiLDEwNjUsIlNoZWljb3B0aWMiLDk5NCwiU2hoYWN5cmlsbGljIiwxMjEwLCJTaGltYWNvcHRpYyIsMTAwNCwiU2lnbWEiLDkzMSwiU2l4cm9tYW4iLDg1NDksIlNtb25vc3BhY2UiLDY1MzMxLCJTb2Z0c2lnbmN5cmlsbGljIiwxMDY4LCJTc21hbGwiLDYzMzQ3LCJTdGlnbWFncmVlayIsOTg2LCJUIiw4NCwiVGF1Iiw5MzIsIlRiYXIiLDM1OCwiVGNhcm9uIiwzNTYsIlRjZWRpbGxhIiwzNTQsIlRjaXJjbGUiLDk0MTcsIlRjaXJjdW1mbGV4YmVsb3ciLDc3OTIsIlRjb21tYWFjY2VudCIsMzU0LCJUZG90YWNjZW50Iiw3Nzg2LCJUZG90YmVsb3ciLDc3ODgsIlRlY3lyaWxsaWMiLDEwNTgsIlRlZGVzY2VuZGVyY3lyaWxsaWMiLDExOTYsIlRlbnJvbWFuIiw4NTUzLCJUZXRzZWN5cmlsbGljIiwxMjA0LCJUaGV0YSIsOTIwLCJUaG9vayIsNDI4LCJUaG9ybiIsMjIyLCJUaG9ybnNtYWxsIiw2MzQ4NiwiVGhyZWVyb21hbiIsODU0NiwiVGlsZGVzbWFsbCIsNjMyMzAsIlRpd25hcm1lbmlhbiIsMTM1OSwiVGxpbmViZWxvdyIsNzc5MCwiVG1vbm9zcGFjZSIsNjUzMzIsIlRvYXJtZW5pYW4iLDEzMzcsIlRvbmVmaXZlIiw0NDQsIlRvbmVzaXgiLDM4OCwiVG9uZXR3byIsNDIzLCJUcmV0cm9mbGV4aG9vayIsNDMwLCJUc2VjeXJpbGxpYyIsMTA2MiwiVHNoZWN5cmlsbGljIiwxMDM1LCJUc21hbGwiLDYzMzQ4LCJUd2VsdmVyb21hbiIsODU1NSwiVHdvcm9tYW4iLDg1NDUsIlUiLDg1LCJVYWN1dGUiLDIxOCwiVWFjdXRlc21hbGwiLDYzNDgyLCJVYnJldmUiLDM2NCwiVWNhcm9uIiw0NjcsIlVjaXJjbGUiLDk0MTgsIlVjaXJjdW1mbGV4IiwyMTksIlVjaXJjdW1mbGV4YmVsb3ciLDc3OTgsIlVjaXJjdW1mbGV4c21hbGwiLDYzNDgzLCJVY3lyaWxsaWMiLDEwNTksIlVkYmxhY3V0ZSIsMzY4LCJVZGJsZ3JhdmUiLDUzMiwiVWRpZXJlc2lzIiwyMjAsIlVkaWVyZXNpc2FjdXRlIiw0NzEsIlVkaWVyZXNpc2JlbG93Iiw3Nzk0LCJVZGllcmVzaXNjYXJvbiIsNDczLCJVZGllcmVzaXNjeXJpbGxpYyIsMTI2NCwiVWRpZXJlc2lzZ3JhdmUiLDQ3NSwiVWRpZXJlc2lzbWFjcm9uIiw0NjksIlVkaWVyZXNpc3NtYWxsIiw2MzQ4NCwiVWRvdGJlbG93Iiw3OTA4LCJVZ3JhdmUiLDIxNywiVWdyYXZlc21hbGwiLDYzNDgxLCJVaG9va2Fib3ZlIiw3OTEwLCJVaG9ybiIsNDMxLCJVaG9ybmFjdXRlIiw3OTEyLCJVaG9ybmRvdGJlbG93Iiw3OTIwLCJVaG9ybmdyYXZlIiw3OTE0LCJVaG9ybmhvb2thYm92ZSIsNzkxNiwiVWhvcm50aWxkZSIsNzkxOCwiVWh1bmdhcnVtbGF1dCIsMzY4LCJVaHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjYsIlVpbnZlcnRlZGJyZXZlIiw1MzQsIlVrY3lyaWxsaWMiLDExNDQsIlVtYWNyb24iLDM2MiwiVW1hY3JvbmN5cmlsbGljIiwxMjYyLCJVbWFjcm9uZGllcmVzaXMiLDc4MDIsIlVtb25vc3BhY2UiLDY1MzMzLCJVb2dvbmVrIiwzNzAsIlVwc2lsb24iLDkzMywiVXBzaWxvbjEiLDk3OCwiVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrIiw5NzksIlVwc2lsb25hZnJpY2FuIiw0MzMsIlVwc2lsb25kaWVyZXNpcyIsOTM5LCJVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsiLDk4MCwiVXBzaWxvbmhvb2tzeW1ib2wiLDk3OCwiVXBzaWxvbnRvbm9zIiw5MTAsIlVyaW5nIiwzNjYsIlVzaG9ydGN5cmlsbGljIiwxMDM4LCJVc21hbGwiLDYzMzQ5LCJVc3RyYWlnaHRjeXJpbGxpYyIsMTE5OCwiVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMiLDEyMDAsIlV0aWxkZSIsMzYwLCJVdGlsZGVhY3V0ZSIsNzgwMCwiVXRpbGRlYmVsb3ciLDc3OTYsIlYiLDg2LCJWY2lyY2xlIiw5NDE5LCJWZG90YmVsb3ciLDc4MDYsIlZlY3lyaWxsaWMiLDEwNDIsIlZld2FybWVuaWFuIiwxMzU4LCJWaG9vayIsNDM0LCJWbW9ub3NwYWNlIiw2NTMzNCwiVm9hcm1lbmlhbiIsMTM1MiwiVnNtYWxsIiw2MzM1MCwiVnRpbGRlIiw3ODA0LCJXIiw4NywiV2FjdXRlIiw3ODEwLCJXY2lyY2xlIiw5NDIwLCJXY2lyY3VtZmxleCIsMzcyLCJXZGllcmVzaXMiLDc4MTIsIldkb3RhY2NlbnQiLDc4MTQsIldkb3RiZWxvdyIsNzgxNiwiV2dyYXZlIiw3ODA4LCJXbW9ub3NwYWNlIiw2NTMzNSwiV3NtYWxsIiw2MzM1MSwiWCIsODgsIlhjaXJjbGUiLDk0MjEsIlhkaWVyZXNpcyIsNzgyMCwiWGRvdGFjY2VudCIsNzgxOCwiWGVoYXJtZW5pYW4iLDEzNDEsIlhpIiw5MjYsIlhtb25vc3BhY2UiLDY1MzM2LCJYc21hbGwiLDYzMzUyLCJZIiw4OSwiWWFjdXRlIiwyMjEsIllhY3V0ZXNtYWxsIiw2MzQ4NSwiWWF0Y3lyaWxsaWMiLDExMjIsIlljaXJjbGUiLDk0MjIsIlljaXJjdW1mbGV4IiwzNzQsIllkaWVyZXNpcyIsMzc2LCJZZGllcmVzaXNzbWFsbCIsNjM0ODcsIllkb3RhY2NlbnQiLDc4MjIsIllkb3RiZWxvdyIsNzkyNCwiWWVyaWN5cmlsbGljIiwxMDY3LCJZZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MiwiWWdyYXZlIiw3OTIyLCJZaG9vayIsNDM1LCJZaG9va2Fib3ZlIiw3OTI2LCJZaWFybWVuaWFuIiwxMzQ5LCJZaWN5cmlsbGljIiwxMDMxLCJZaXduYXJtZW5pYW4iLDEzNjIsIlltb25vc3BhY2UiLDY1MzM3LCJZc21hbGwiLDYzMzUzLCJZdGlsZGUiLDc5MjgsIll1c2JpZ2N5cmlsbGljIiwxMTMwLCJZdXNiaWdpb3RpZmllZGN5cmlsbGljIiwxMTMyLCJZdXNsaXR0bGVjeXJpbGxpYyIsMTEyNiwiWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyIsMTEyOCwiWiIsOTAsIlphYXJtZW5pYW4iLDEzMzQsIlphY3V0ZSIsMzc3LCJaY2Fyb24iLDM4MSwiWmNhcm9uc21hbGwiLDYzMjMxLCJaY2lyY2xlIiw5NDIzLCJaY2lyY3VtZmxleCIsNzgyNCwiWmRvdCIsMzc5LCJaZG90YWNjZW50IiwzNzksIlpkb3RiZWxvdyIsNzgyNiwiWmVjeXJpbGxpYyIsMTA0NywiWmVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NiwiWmVkaWVyZXNpc2N5cmlsbGljIiwxMjQ2LCJaZXRhIiw5MTgsIlpoZWFybWVuaWFuIiwxMzM4LCJaaGVicmV2ZWN5cmlsbGljIiwxMjE3LCJaaGVjeXJpbGxpYyIsMTA0NiwiWmhlZGVzY2VuZGVyY3lyaWxsaWMiLDExNzQsIlpoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDQsIlpsaW5lYmVsb3ciLDc4MjgsIlptb25vc3BhY2UiLDY1MzM4LCJac21hbGwiLDYzMzU0LCJac3Ryb2tlIiw0MzcsImEiLDk3LCJhYWJlbmdhbGkiLDI0MzgsImFhY3V0ZSIsMjI1LCJhYWRldmEiLDIzMTAsImFhZ3VqYXJhdGkiLDI2OTQsImFhZ3VybXVraGkiLDI1NjYsImFhbWF0cmFndXJtdWtoaSIsMjYyMiwiYWFydXNxdWFyZSIsMTMwNTksImFhdm93ZWxzaWduYmVuZ2FsaSIsMjQ5NCwiYWF2b3dlbHNpZ25kZXZhIiwyMzY2LCJhYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzUwLCJhYmJyZXZpYXRpb25tYXJrYXJtZW5pYW4iLDEzNzUsImFiYnJldmlhdGlvbnNpZ25kZXZhIiwyNDE2LCJhYmVuZ2FsaSIsMjQzNywiYWJvcG9tb2ZvIiwxMjU3MCwiYWJyZXZlIiwyNTksImFicmV2ZWFjdXRlIiw3ODU1LCJhYnJldmVjeXJpbGxpYyIsMTIzMywiYWJyZXZlZG90YmVsb3ciLDc4NjMsImFicmV2ZWdyYXZlIiw3ODU3LCJhYnJldmVob29rYWJvdmUiLDc4NTksImFicmV2ZXRpbGRlIiw3ODYxLCJhY2Fyb24iLDQ2MiwiYWNpcmNsZSIsOTQyNCwiYWNpcmN1bWZsZXgiLDIyNiwiYWNpcmN1bWZsZXhhY3V0ZSIsNzg0NSwiYWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg1MywiYWNpcmN1bWZsZXhncmF2ZSIsNzg0NywiYWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NDksImFjaXJjdW1mbGV4dGlsZGUiLDc4NTEsImFjdXRlIiwxODAsImFjdXRlYmVsb3djbWIiLDc5MSwiYWN1dGVjbWIiLDc2OSwiYWN1dGVjb21iIiw3NjksImFjdXRlZGV2YSIsMjM4OCwiYWN1dGVsb3dtb2QiLDcxOSwiYWN1dGV0b25lY21iIiw4MzMsImFjeXJpbGxpYyIsMTA3MiwiYWRibGdyYXZlIiw1MTMsImFkZGFrZ3VybXVraGkiLDI2NzMsImFkZXZhIiwyMzA5LCJhZGllcmVzaXMiLDIyOCwiYWRpZXJlc2lzY3lyaWxsaWMiLDEyMzUsImFkaWVyZXNpc21hY3JvbiIsNDc5LCJhZG90YmVsb3ciLDc4NDEsImFkb3RtYWNyb24iLDQ4MSwiYWUiLDIzMCwiYWVhY3V0ZSIsNTA5LCJhZWtvcmVhbiIsMTI2MjQsImFlbWFjcm9uIiw0ODMsImFmaWkwMDIwOCIsODIxMywiYWZpaTA4OTQxIiw4MzU2LCJhZmlpMTAwMTciLDEwNDAsImFmaWkxMDAxOCIsMTA0MSwiYWZpaTEwMDE5IiwxMDQyLCJhZmlpMTAwMjAiLDEwNDMsImFmaWkxMDAyMSIsMTA0NCwiYWZpaTEwMDIyIiwxMDQ1LCJhZmlpMTAwMjMiLDEwMjUsImFmaWkxMDAyNCIsMTA0NiwiYWZpaTEwMDI1IiwxMDQ3LCJhZmlpMTAwMjYiLDEwNDgsImFmaWkxMDAyNyIsMTA0OSwiYWZpaTEwMDI4IiwxMDUwLCJhZmlpMTAwMjkiLDEwNTEsImFmaWkxMDAzMCIsMTA1MiwiYWZpaTEwMDMxIiwxMDUzLCJhZmlpMTAwMzIiLDEwNTQsImFmaWkxMDAzMyIsMTA1NSwiYWZpaTEwMDM0IiwxMDU2LCJhZmlpMTAwMzUiLDEwNTcsImFmaWkxMDAzNiIsMTA1OCwiYWZpaTEwMDM3IiwxMDU5LCJhZmlpMTAwMzgiLDEwNjAsImFmaWkxMDAzOSIsMTA2MSwiYWZpaTEwMDQwIiwxMDYyLCJhZmlpMTAwNDEiLDEwNjMsImFmaWkxMDA0MiIsMTA2NCwiYWZpaTEwMDQzIiwxMDY1LCJhZmlpMTAwNDQiLDEwNjYsImFmaWkxMDA0NSIsMTA2NywiYWZpaTEwMDQ2IiwxMDY4LCJhZmlpMTAwNDciLDEwNjksImFmaWkxMDA0OCIsMTA3MCwiYWZpaTEwMDQ5IiwxMDcxLCJhZmlpMTAwNTAiLDExNjgsImFmaWkxMDA1MSIsMTAyNiwiYWZpaTEwMDUyIiwxMDI3LCJhZmlpMTAwNTMiLDEwMjgsImFmaWkxMDA1NCIsMTAyOSwiYWZpaTEwMDU1IiwxMDMwLCJhZmlpMTAwNTYiLDEwMzEsImFmaWkxMDA1NyIsMTAzMiwiYWZpaTEwMDU4IiwxMDMzLCJhZmlpMTAwNTkiLDEwMzQsImFmaWkxMDA2MCIsMTAzNSwiYWZpaTEwMDYxIiwxMDM2LCJhZmlpMTAwNjIiLDEwMzgsImFmaWkxMDA2MyIsNjMxNzIsImFmaWkxMDA2NCIsNjMxNzMsImFmaWkxMDA2NSIsMTA3MiwiYWZpaTEwMDY2IiwxMDczLCJhZmlpMTAwNjciLDEwNzQsImFmaWkxMDA2OCIsMTA3NSwiYWZpaTEwMDY5IiwxMDc2LCJhZmlpMTAwNzAiLDEwNzcsImFmaWkxMDA3MSIsMTEwNSwiYWZpaTEwMDcyIiwxMDc4LCJhZmlpMTAwNzMiLDEwNzksImFmaWkxMDA3NCIsMTA4MCwiYWZpaTEwMDc1IiwxMDgxLCJhZmlpMTAwNzYiLDEwODIsImFmaWkxMDA3NyIsMTA4MywiYWZpaTEwMDc4IiwxMDg0LCJhZmlpMTAwNzkiLDEwODUsImFmaWkxMDA4MCIsMTA4NiwiYWZpaTEwMDgxIiwxMDg3LCJhZmlpMTAwODIiLDEwODgsImFmaWkxMDA4MyIsMTA4OSwiYWZpaTEwMDg0IiwxMDkwLCJhZmlpMTAwODUiLDEwOTEsImFmaWkxMDA4NiIsMTA5MiwiYWZpaTEwMDg3IiwxMDkzLCJhZmlpMTAwODgiLDEwOTQsImFmaWkxMDA4OSIsMTA5NSwiYWZpaTEwMDkwIiwxMDk2LCJhZmlpMTAwOTEiLDEwOTcsImFmaWkxMDA5MiIsMTA5OCwiYWZpaTEwMDkzIiwxMDk5LCJhZmlpMTAwOTQiLDExMDAsImFmaWkxMDA5NSIsMTEwMSwiYWZpaTEwMDk2IiwxMTAyLCJhZmlpMTAwOTciLDExMDMsImFmaWkxMDA5OCIsMTE2OSwiYWZpaTEwMDk5IiwxMTA2LCJhZmlpMTAxMDAiLDExMDcsImFmaWkxMDEwMSIsMTEwOCwiYWZpaTEwMTAyIiwxMTA5LCJhZmlpMTAxMDMiLDExMTAsImFmaWkxMDEwNCIsMTExMSwiYWZpaTEwMTA1IiwxMTEyLCJhZmlpMTAxMDYiLDExMTMsImFmaWkxMDEwNyIsMTExNCwiYWZpaTEwMTA4IiwxMTE1LCJhZmlpMTAxMDkiLDExMTYsImFmaWkxMDExMCIsMTExOCwiYWZpaTEwMTQ1IiwxMDM5LCJhZmlpMTAxNDYiLDExMjIsImFmaWkxMDE0NyIsMTEzOCwiYWZpaTEwMTQ4IiwxMTQwLCJhZmlpMTAxOTIiLDYzMTc0LCJhZmlpMTAxOTMiLDExMTksImFmaWkxMDE5NCIsMTEyMywiYWZpaTEwMTk1IiwxMTM5LCJhZmlpMTAxOTYiLDExNDEsImFmaWkxMDgzMSIsNjMxNzUsImFmaWkxMDgzMiIsNjMxNzYsImFmaWkxMDg0NiIsMTI0MSwiYWZpaTI5OSIsODIwNiwiYWZpaTMwMCIsODIwNywiYWZpaTMwMSIsODIwNSwiYWZpaTU3MzgxIiwxNjQyLCJhZmlpNTczODgiLDE1NDgsImFmaWk1NzM5MiIsMTYzMiwiYWZpaTU3MzkzIiwxNjMzLCJhZmlpNTczOTQiLDE2MzQsImFmaWk1NzM5NSIsMTYzNSwiYWZpaTU3Mzk2IiwxNjM2LCJhZmlpNTczOTciLDE2MzcsImFmaWk1NzM5OCIsMTYzOCwiYWZpaTU3Mzk5IiwxNjM5LCJhZmlpNTc0MDAiLDE2NDAsImFmaWk1NzQwMSIsMTY0MSwiYWZpaTU3NDAzIiwxNTYzLCJhZmlpNTc0MDciLDE1NjcsImFmaWk1NzQwOSIsMTU2OSwiYWZpaTU3NDEwIiwxNTcwLCJhZmlpNTc0MTEiLDE1NzEsImFmaWk1NzQxMiIsMTU3MiwiYWZpaTU3NDEzIiwxNTczLCJhZmlpNTc0MTQiLDE1NzQsImFmaWk1NzQxNSIsMTU3NSwiYWZpaTU3NDE2IiwxNTc2LCJhZmlpNTc0MTciLDE1NzcsImFmaWk1NzQxOCIsMTU3OCwiYWZpaTU3NDE5IiwxNTc5LCJhZmlpNTc0MjAiLDE1ODAsImFmaWk1NzQyMSIsMTU4MSwiYWZpaTU3NDIyIiwxNTgyLCJhZmlpNTc0MjMiLDE1ODMsImFmaWk1NzQyNCIsMTU4NCwiYWZpaTU3NDI1IiwxNTg1LCJhZmlpNTc0MjYiLDE1ODYsImFmaWk1NzQyNyIsMTU4NywiYWZpaTU3NDI4IiwxNTg4LCJhZmlpNTc0MjkiLDE1ODksImFmaWk1NzQzMCIsMTU5MCwiYWZpaTU3NDMxIiwxNTkxLCJhZmlpNTc0MzIiLDE1OTIsImFmaWk1NzQzMyIsMTU5MywiYWZpaTU3NDM0IiwxNTk0LCJhZmlpNTc0NDAiLDE2MDAsImFmaWk1NzQ0MSIsMTYwMSwiYWZpaTU3NDQyIiwxNjAyLCJhZmlpNTc0NDMiLDE2MDMsImFmaWk1NzQ0NCIsMTYwNCwiYWZpaTU3NDQ1IiwxNjA1LCJhZmlpNTc0NDYiLDE2MDYsImFmaWk1NzQ0OCIsMTYwOCwiYWZpaTU3NDQ5IiwxNjA5LCJhZmlpNTc0NTAiLDE2MTAsImFmaWk1NzQ1MSIsMTYxMSwiYWZpaTU3NDUyIiwxNjEyLCJhZmlpNTc0NTMiLDE2MTMsImFmaWk1NzQ1NCIsMTYxNCwiYWZpaTU3NDU1IiwxNjE1LCJhZmlpNTc0NTYiLDE2MTYsImFmaWk1NzQ1NyIsMTYxNywiYWZpaTU3NDU4IiwxNjE4LCJhZmlpNTc0NzAiLDE2MDcsImFmaWk1NzUwNSIsMTcwMCwiYWZpaTU3NTA2IiwxNjYyLCJhZmlpNTc1MDciLDE2NzAsImFmaWk1NzUwOCIsMTY4OCwiYWZpaTU3NTA5IiwxNzExLCJhZmlpNTc1MTEiLDE2NTcsImFmaWk1NzUxMiIsMTY3MiwiYWZpaTU3NTEzIiwxNjgxLCJhZmlpNTc1MTQiLDE3MjIsImFmaWk1NzUxOSIsMTc0NiwiYWZpaTU3NTM0IiwxNzQ5LCJhZmlpNTc2MzYiLDgzNjIsImFmaWk1NzY0NSIsMTQ3MCwiYWZpaTU3NjU4IiwxNDc1LCJhZmlpNTc2NjQiLDE0ODgsImFmaWk1NzY2NSIsMTQ4OSwiYWZpaTU3NjY2IiwxNDkwLCJhZmlpNTc2NjciLDE0OTEsImFmaWk1NzY2OCIsMTQ5MiwiYWZpaTU3NjY5IiwxNDkzLCJhZmlpNTc2NzAiLDE0OTQsImFmaWk1NzY3MSIsMTQ5NSwiYWZpaTU3NjcyIiwxNDk2LCJhZmlpNTc2NzMiLDE0OTcsImFmaWk1NzY3NCIsMTQ5OCwiYWZpaTU3Njc1IiwxNDk5LCJhZmlpNTc2NzYiLDE1MDAsImFmaWk1NzY3NyIsMTUwMSwiYWZpaTU3Njc4IiwxNTAyLCJhZmlpNTc2NzkiLDE1MDMsImFmaWk1NzY4MCIsMTUwNCwiYWZpaTU3NjgxIiwxNTA1LCJhZmlpNTc2ODIiLDE1MDYsImFmaWk1NzY4MyIsMTUwNywiYWZpaTU3Njg0IiwxNTA4LCJhZmlpNTc2ODUiLDE1MDksImFmaWk1NzY4NiIsMTUxMCwiYWZpaTU3Njg3IiwxNTExLCJhZmlpNTc2ODgiLDE1MTIsImFmaWk1NzY4OSIsMTUxMywiYWZpaTU3NjkwIiwxNTE0LCJhZmlpNTc2OTQiLDY0Mjk4LCJhZmlpNTc2OTUiLDY0Mjk5LCJhZmlpNTc3MDAiLDY0MzMxLCJhZmlpNTc3MDUiLDY0Mjg3LCJhZmlpNTc3MTYiLDE1MjAsImFmaWk1NzcxNyIsMTUyMSwiYWZpaTU3NzE4IiwxNTIyLCJhZmlpNTc3MjMiLDY0MzA5LCJhZmlpNTc3OTMiLDE0NjAsImFmaWk1Nzc5NCIsMTQ2MSwiYWZpaTU3Nzk1IiwxNDYyLCJhZmlpNTc3OTYiLDE0NjcsImFmaWk1Nzc5NyIsMTQ2NCwiYWZpaTU3Nzk4IiwxNDYzLCJhZmlpNTc3OTkiLDE0NTYsImFmaWk1NzgwMCIsMTQ1OCwiYWZpaTU3ODAxIiwxNDU3LCJhZmlpNTc4MDIiLDE0NTksImFmaWk1NzgwMyIsMTQ3NCwiYWZpaTU3ODA0IiwxNDczLCJhZmlpNTc4MDYiLDE0NjUsImFmaWk1NzgwNyIsMTQ2OCwiYWZpaTU3ODM5IiwxNDY5LCJhZmlpNTc4NDEiLDE0NzEsImFmaWk1Nzg0MiIsMTQ3MiwiYWZpaTU3OTI5Iiw3MDAsImFmaWk2MTI0OCIsODQ1MywiYWZpaTYxMjg5Iiw4NDY3LCJhZmlpNjEzNTIiLDg0NzAsImFmaWk2MTU3MyIsODIzNiwiYWZpaTYxNTc0Iiw4MjM3LCJhZmlpNjE1NzUiLDgyMzgsImFmaWk2MTY2NCIsODIwNCwiYWZpaTYzMTY3IiwxNjQ1LCJhZmlpNjQ5MzciLDcwMSwiYWdyYXZlIiwyMjQsImFndWphcmF0aSIsMjY5MywiYWd1cm11a2hpIiwyNTY1LCJhaGlyYWdhbmEiLDEyMzU0LCJhaG9va2Fib3ZlIiw3ODQzLCJhaWJlbmdhbGkiLDI0NDgsImFpYm9wb21vZm8iLDEyNTc0LCJhaWRldmEiLDIzMjAsImFpZWN5cmlsbGljIiwxMjM3LCJhaWd1amFyYXRpIiwyNzA0LCJhaWd1cm11a2hpIiwyNTc2LCJhaW1hdHJhZ3VybXVraGkiLDI2MzIsImFpbmFyYWJpYyIsMTU5MywiYWluZmluYWxhcmFiaWMiLDY1MjI2LCJhaW5pbml0aWFsYXJhYmljIiw2NTIyNywiYWlubWVkaWFsYXJhYmljIiw2NTIyOCwiYWludmVydGVkYnJldmUiLDUxNSwiYWl2b3dlbHNpZ25iZW5nYWxpIiwyNTA0LCJhaXZvd2Vsc2lnbmRldmEiLDIzNzYsImFpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjAsImFrYXRha2FuYSIsMTI0NTAsImFrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTMsImFrb3JlYW4iLDEyNjIzLCJhbGVmIiwxNDg4LCJhbGVmYXJhYmljIiwxNTc1LCJhbGVmZGFnZXNoaGVicmV3Iiw2NDMwNCwiYWxlZmZpbmFsYXJhYmljIiw2NTE2NiwiYWxlZmhhbXphYWJvdmVhcmFiaWMiLDE1NzEsImFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU2LCJhbGVmaGFtemFiZWxvd2FyYWJpYyIsMTU3MywiYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUxNjAsImFsZWZoZWJyZXciLDE0ODgsImFsZWZsYW1lZGhlYnJldyIsNjQzMzUsImFsZWZtYWRkYWFib3ZlYXJhYmljIiwxNTcwLCJhbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTE1NCwiYWxlZm1ha3N1cmFhcmFiaWMiLDE2MDksImFsZWZtYWtzdXJhZmluYWxhcmFiaWMiLDY1MjY0LCJhbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMiLDY1MjY3LCJhbGVmbWFrc3VyYW1lZGlhbGFyYWJpYyIsNjUyNjgsImFsZWZwYXRhaGhlYnJldyIsNjQzMDIsImFsZWZxYW1hdHNoZWJyZXciLDY0MzAzLCJhbGVwaCIsODUwMSwiYWxsZXF1YWwiLDg3ODAsImFscGhhIiw5NDUsImFscGhhdG9ub3MiLDk0MCwiYW1hY3JvbiIsMjU3LCJhbW9ub3NwYWNlIiw2NTM0NSwiYW1wZXJzYW5kIiwzOCwiYW1wZXJzYW5kbW9ub3NwYWNlIiw2NTI4NiwiYW1wZXJzYW5kc21hbGwiLDYzMjcwLCJhbXNxdWFyZSIsMTMyNTAsImFuYm9wb21vZm8iLDEyNTc4LCJhbmdib3BvbW9mbyIsMTI1ODAsImFuZ2JyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nYnJhY2tldHJpZ2h0IiwxMjI5NywiYW5na2hhbmtodXRoYWkiLDM2NzQsImFuZ2xlIiw4NzM2LCJhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NywiYW5nbGVicmFja2V0cmlnaHQiLDEyMjk3LCJhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4OCwiYW5nbGVsZWZ0Iiw5MDAxLCJhbmdsZXJpZ2h0Iiw5MDAyLCJhbmdzdHJvbSIsODQ5MSwiYW5vdGVsZWlhIiw5MDMsImFudWRhdHRhZGV2YSIsMjM4NiwiYW51c3ZhcmFiZW5nYWxpIiwyNDM0LCJhbnVzdmFyYWRldmEiLDIzMDYsImFudXN2YXJhZ3VqYXJhdGkiLDI2OTAsImFvZ29uZWsiLDI2MSwiYXBhYXRvc3F1YXJlIiwxMzA1NiwiYXBhcmVuIiw5MzcyLCJhcG9zdHJvcGhlYXJtZW5pYW4iLDEzNzAsImFwb3N0cm9waGVtb2QiLDcwMCwiYXBwbGUiLDYzNzQzLCJhcHByb2FjaGVzIiw4Nzg0LCJhcHByb3hlcXVhbCIsODc3NiwiYXBwcm94ZXF1YWxvcmltYWdlIiw4Nzg2LCJhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3NzMsImFyYWVhZWtvcmVhbiIsMTI2ODYsImFyYWVha29yZWFuIiwxMjY4NSwiYXJjIiw4OTc4LCJhcmlnaHRoYWxmcmluZyIsNzgzNCwiYXJpbmciLDIyOSwiYXJpbmdhY3V0ZSIsNTA3LCJhcmluZ2JlbG93Iiw3NjgxLCJhcnJvd2JvdGgiLDg1OTYsImFycm93ZGFzaGRvd24iLDg2NzUsImFycm93ZGFzaGxlZnQiLDg2NzIsImFycm93ZGFzaHJpZ2h0Iiw4Njc0LCJhcnJvd2Rhc2h1cCIsODY3MywiYXJyb3dkYmxib3RoIiw4NjYwLCJhcnJvd2RibGRvd24iLDg2NTksImFycm93ZGJsbGVmdCIsODY1NiwiYXJyb3dkYmxyaWdodCIsODY1OCwiYXJyb3dkYmx1cCIsODY1NywiYXJyb3dkb3duIiw4NTk1LCJhcnJvd2Rvd25sZWZ0Iiw4NjAxLCJhcnJvd2Rvd25yaWdodCIsODYwMCwiYXJyb3dkb3dud2hpdGUiLDg2ODEsImFycm93aGVhZGRvd25tb2QiLDcwOSwiYXJyb3doZWFkbGVmdG1vZCIsNzA2LCJhcnJvd2hlYWRyaWdodG1vZCIsNzA3LCJhcnJvd2hlYWR1cG1vZCIsNzA4LCJhcnJvd2hvcml6ZXgiLDYzNzE5LCJhcnJvd2xlZnQiLDg1OTIsImFycm93bGVmdGRibCIsODY1NiwiYXJyb3dsZWZ0ZGJsc3Ryb2tlIiw4NjUzLCJhcnJvd2xlZnRvdmVycmlnaHQiLDg2NDYsImFycm93bGVmdHdoaXRlIiw4Njc4LCJhcnJvd3JpZ2h0Iiw4NTk0LCJhcnJvd3JpZ2h0ZGJsc3Ryb2tlIiw4NjU1LCJhcnJvd3JpZ2h0aGVhdnkiLDEwMTQyLCJhcnJvd3JpZ2h0b3ZlcmxlZnQiLDg2NDQsImFycm93cmlnaHR3aGl0ZSIsODY4MCwiYXJyb3d0YWJsZWZ0Iiw4Njc2LCJhcnJvd3RhYnJpZ2h0Iiw4Njc3LCJhcnJvd3VwIiw4NTkzLCJhcnJvd3VwZG4iLDg1OTcsImFycm93dXBkbmJzZSIsODYxNiwiYXJyb3d1cGRvd25iYXNlIiw4NjE2LCJhcnJvd3VwbGVmdCIsODU5OCwiYXJyb3d1cGxlZnRvZmRvd24iLDg2NDUsImFycm93dXByaWdodCIsODU5OSwiYXJyb3d1cHdoaXRlIiw4Njc5LCJhcnJvd3ZlcnRleCIsNjM3MTgsImFzY2lpY2lyY3VtIiw5NCwiYXNjaWljaXJjdW1tb25vc3BhY2UiLDY1MzQyLCJhc2NpaXRpbGRlIiwxMjYsImFzY2lpdGlsZGVtb25vc3BhY2UiLDY1Mzc0LCJhc2NyaXB0Iiw1OTMsImFzY3JpcHR0dXJuZWQiLDU5NCwiYXNtYWxsaGlyYWdhbmEiLDEyMzUzLCJhc21hbGxrYXRha2FuYSIsMTI0NDksImFzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4MywiYXN0ZXJpc2siLDQyLCJhc3Rlcmlza2FsdG9uZWFyYWJpYyIsMTY0NSwiYXN0ZXJpc2thcmFiaWMiLDE2NDUsImFzdGVyaXNrbWF0aCIsODcyNywiYXN0ZXJpc2ttb25vc3BhY2UiLDY1MjkwLCJhc3Rlcmlza3NtYWxsIiw2NTEyMSwiYXN0ZXJpc20iLDgyNTgsImFzdXBlcmlvciIsNjMyMDksImFzeW1wdG90aWNhbGx5ZXF1YWwiLDg3NzEsImF0Iiw2NCwiYXRpbGRlIiwyMjcsImF0bW9ub3NwYWNlIiw2NTMxMiwiYXRzbWFsbCIsNjUxMzEsImF0dXJuZWQiLDU5MiwiYXViZW5nYWxpIiwyNDUyLCJhdWJvcG9tb2ZvIiwxMjU3NiwiYXVkZXZhIiwyMzI0LCJhdWd1amFyYXRpIiwyNzA4LCJhdWd1cm11a2hpIiwyNTgwLCJhdWxlbmd0aG1hcmtiZW5nYWxpIiwyNTE5LCJhdW1hdHJhZ3VybXVraGkiLDI2MzYsImF1dm93ZWxzaWduYmVuZ2FsaSIsMjUwOCwiYXV2b3dlbHNpZ25kZXZhIiwyMzgwLCJhdXZvd2Vsc2lnbmd1amFyYXRpIiwyNzY0LCJhdmFncmFoYWRldmEiLDIzNjUsImF5YmFybWVuaWFuIiwxMzc3LCJheWluIiwxNTA2LCJheWluYWx0b25laGVicmV3Iiw2NDI4OCwiYXlpbmhlYnJldyIsMTUwNiwiYiIsOTgsImJhYmVuZ2FsaSIsMjQ3NiwiYmFja3NsYXNoIiw5MiwiYmFja3NsYXNobW9ub3NwYWNlIiw2NTM0MCwiYmFkZXZhIiwyMzQ4LCJiYWd1amFyYXRpIiwyNzMyLCJiYWd1cm11a2hpIiwyNjA0LCJiYWhpcmFnYW5hIiwxMjQwMCwiYmFodHRoYWkiLDM2NDcsImJha2F0YWthbmEiLDEyNDk2LCJiYXIiLDEyNCwiYmFybW9ub3NwYWNlIiw2NTM3MiwiYmJvcG9tb2ZvIiwxMjU0OSwiYmNpcmNsZSIsOTQyNSwiYmRvdGFjY2VudCIsNzY4MywiYmRvdGJlbG93Iiw3Njg1LCJiZWFtZWRzaXh0ZWVudGhub3RlcyIsOTgzNiwiYmVjYXVzZSIsODc1NywiYmVjeXJpbGxpYyIsMTA3MywiYmVoYXJhYmljIiwxNTc2LCJiZWhmaW5hbGFyYWJpYyIsNjUxNjgsImJlaGluaXRpYWxhcmFiaWMiLDY1MTY5LCJiZWhpcmFnYW5hIiwxMjQwOSwiYmVobWVkaWFsYXJhYmljIiw2NTE3MCwiYmVobWVlbWluaXRpYWxhcmFiaWMiLDY0NjcxLCJiZWhtZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIwLCJiZWhub29uZmluYWxhcmFiaWMiLDY0NjIxLCJiZWthdGFrYW5hIiwxMjUwNSwiYmVuYXJtZW5pYW4iLDEzNzgsImJldCIsMTQ4OSwiYmV0YSIsOTQ2LCJiZXRhc3ltYm9sZ3JlZWsiLDk3NiwiYmV0ZGFnZXNoIiw2NDMwNSwiYmV0ZGFnZXNoaGVicmV3Iiw2NDMwNSwiYmV0aGVicmV3IiwxNDg5LCJiZXRyYWZlaGVicmV3Iiw2NDMzMiwiYmhhYmVuZ2FsaSIsMjQ3NywiYmhhZGV2YSIsMjM0OSwiYmhhZ3VqYXJhdGkiLDI3MzMsImJoYWd1cm11a2hpIiwyNjA1LCJiaG9vayIsNTk1LCJiaWhpcmFnYW5hIiwxMjQwMywiYmlrYXRha2FuYSIsMTI0OTksImJpbGFiaWFsY2xpY2siLDY2NCwiYmluZGlndXJtdWtoaSIsMjU2MiwiYmlydXNxdWFyZSIsMTMxMDUsImJsYWNrY2lyY2xlIiw5Njc5LCJibGFja2RpYW1vbmQiLDk2NzAsImJsYWNrZG93bnBvaW50aW5ndHJpYW5nbGUiLDk2NjAsImJsYWNrbGVmdHBvaW50aW5ncG9pbnRlciIsOTY2OCwiYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZSIsOTY2NCwiYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQiLDEyMzA0LCJibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4MywiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMwNSwiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDg0LCJibGFja2xvd2VybGVmdHRyaWFuZ2xlIiw5Njk5LCJibGFja2xvd2VycmlnaHR0cmlhbmdsZSIsOTY5OCwiYmxhY2tyZWN0YW5nbGUiLDk2NDQsImJsYWNrcmlnaHRwb2ludGluZ3BvaW50ZXIiLDk2NTgsImJsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlIiw5NjU0LCJibGFja3NtYWxsc3F1YXJlIiw5NjQyLCJibGFja3NtaWxpbmdmYWNlIiw5Nzg3LCJibGFja3NxdWFyZSIsOTYzMiwiYmxhY2tzdGFyIiw5NzMzLCJibGFja3VwcGVybGVmdHRyaWFuZ2xlIiw5NzAwLCJibGFja3VwcGVycmlnaHR0cmlhbmdsZSIsOTcwMSwiYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1MiwiYmxhY2t1cHBvaW50aW5ndHJpYW5nbGUiLDk2NTAsImJsYW5rIiw5MjUxLCJibGluZWJlbG93Iiw3Njg3LCJibG9jayIsOTYwOCwiYm1vbm9zcGFjZSIsNjUzNDYsImJvYmFpbWFpdGhhaSIsMzYxMCwiYm9oaXJhZ2FuYSIsMTI0MTIsImJva2F0YWthbmEiLDEyNTA4LCJicGFyZW4iLDkzNzMsImJxc3F1YXJlIiwxMzI1MSwiYnJhY2VleCIsNjM3MzIsImJyYWNlbGVmdCIsMTIzLCJicmFjZWxlZnRidCIsNjM3MzEsImJyYWNlbGVmdG1pZCIsNjM3MzAsImJyYWNlbGVmdG1vbm9zcGFjZSIsNjUzNzEsImJyYWNlbGVmdHNtYWxsIiw2NTExNSwiYnJhY2VsZWZ0dHAiLDYzNzI5LCJicmFjZWxlZnR2ZXJ0aWNhbCIsNjUwNzksImJyYWNlcmlnaHQiLDEyNSwiYnJhY2VyaWdodGJ0Iiw2Mzc0MiwiYnJhY2VyaWdodG1pZCIsNjM3NDEsImJyYWNlcmlnaHRtb25vc3BhY2UiLDY1MzczLCJicmFjZXJpZ2h0c21hbGwiLDY1MTE2LCJicmFjZXJpZ2h0dHAiLDYzNzQwLCJicmFjZXJpZ2h0dmVydGljYWwiLDY1MDgwLCJicmFja2V0bGVmdCIsOTEsImJyYWNrZXRsZWZ0YnQiLDYzNzI4LCJicmFja2V0bGVmdGV4Iiw2MzcyNywiYnJhY2tldGxlZnRtb25vc3BhY2UiLDY1MzM5LCJicmFja2V0bGVmdHRwIiw2MzcyNiwiYnJhY2tldHJpZ2h0Iiw5MywiYnJhY2tldHJpZ2h0YnQiLDYzNzM5LCJicmFja2V0cmlnaHRleCIsNjM3MzgsImJyYWNrZXRyaWdodG1vbm9zcGFjZSIsNjUzNDEsImJyYWNrZXRyaWdodHRwIiw2MzczNywiYnJldmUiLDcyOCwiYnJldmViZWxvd2NtYiIsODE0LCJicmV2ZWNtYiIsNzc0LCJicmV2ZWludmVydGVkYmVsb3djbWIiLDgxNSwiYnJldmVpbnZlcnRlZGNtYiIsNzg1LCJicmV2ZWludmVydGVkZG91YmxlY21iIiw4NjUsImJyaWRnZWJlbG93Y21iIiw4MTAsImJyaWRnZWludmVydGVkYmVsb3djbWIiLDgyNiwiYnJva2VuYmFyIiwxNjYsImJzdHJva2UiLDM4NCwiYnN1cGVyaW9yIiw2MzIxMCwiYnRvcGJhciIsMzg3LCJidWhpcmFnYW5hIiwxMjQwNiwiYnVrYXRha2FuYSIsMTI1MDIsImJ1bGxldCIsODIyNiwiYnVsbGV0aW52ZXJzZSIsOTY4OCwiYnVsbGV0b3BlcmF0b3IiLDg3MjksImJ1bGxzZXllIiw5Njc4LCJjIiw5OSwiY2Fhcm1lbmlhbiIsMTM5MCwiY2FiZW5nYWxpIiwyNDU4LCJjYWN1dGUiLDI2MywiY2FkZXZhIiwyMzMwLCJjYWd1amFyYXRpIiwyNzE0LCJjYWd1cm11a2hpIiwyNTg2LCJjYWxzcXVhcmUiLDEzMTkyLCJjYW5kcmFiaW5kdWJlbmdhbGkiLDI0MzMsImNhbmRyYWJpbmR1Y21iIiw3ODQsImNhbmRyYWJpbmR1ZGV2YSIsMjMwNSwiY2FuZHJhYmluZHVndWphcmF0aSIsMjY4OSwiY2Fwc2xvY2siLDg2ODIsImNhcmVvZiIsODQ1MywiY2Fyb24iLDcxMSwiY2Fyb25iZWxvd2NtYiIsODEyLCJjYXJvbmNtYiIsNzgwLCJjYXJyaWFnZXJldHVybiIsODYyOSwiY2JvcG9tb2ZvIiwxMjU2OCwiY2Nhcm9uIiwyNjksImNjZWRpbGxhIiwyMzEsImNjZWRpbGxhYWN1dGUiLDc2ODksImNjaXJjbGUiLDk0MjYsImNjaXJjdW1mbGV4IiwyNjUsImNjdXJsIiw1OTcsImNkb3QiLDI2NywiY2RvdGFjY2VudCIsMjY3LCJjZHNxdWFyZSIsMTMyNTMsImNlZGlsbGEiLDE4NCwiY2VkaWxsYWNtYiIsODA3LCJjZW50IiwxNjIsImNlbnRpZ3JhZGUiLDg0NTEsImNlbnRpbmZlcmlvciIsNjMxOTksImNlbnRtb25vc3BhY2UiLDY1NTA0LCJjZW50b2xkc3R5bGUiLDYzMzk0LCJjZW50c3VwZXJpb3IiLDYzMjAwLCJjaGFhcm1lbmlhbiIsMTQwMSwiY2hhYmVuZ2FsaSIsMjQ1OSwiY2hhZGV2YSIsMjMzMSwiY2hhZ3VqYXJhdGkiLDI3MTUsImNoYWd1cm11a2hpIiwyNTg3LCJjaGJvcG9tb2ZvIiwxMjU2NCwiY2hlYWJraGFzaWFuY3lyaWxsaWMiLDEyMTMsImNoZWNrbWFyayIsMTAwMDMsImNoZWN5cmlsbGljIiwxMDk1LCJjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyIsMTIxNSwiY2hlZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDcsImNoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNjksImNoZWhhcm1lbmlhbiIsMTM5NSwiY2hla2hha2Fzc2lhbmN5cmlsbGljIiwxMjI4LCJjaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMjA5LCJjaGkiLDk2NywiY2hpZXVjaGFjaXJjbGVrb3JlYW4iLDEyOTE5LCJjaGlldWNoYXBhcmVua29yZWFuIiwxMjgyMywiY2hpZXVjaGNpcmNsZWtvcmVhbiIsMTI5MDUsImNoaWV1Y2hrb3JlYW4iLDEyNjE4LCJjaGlldWNocGFyZW5rb3JlYW4iLDEyODA5LCJjaG9jaGFuZ3RoYWkiLDM1OTQsImNob2NoYW50aGFpIiwzNTkyLCJjaG9jaGluZ3RoYWkiLDM1OTMsImNob2Nob2V0aGFpIiwzNTk2LCJjaG9vayIsMzkyLCJjaWV1Y2FjaXJjbGVrb3JlYW4iLDEyOTE4LCJjaWV1Y2FwYXJlbmtvcmVhbiIsMTI4MjIsImNpZXVjY2lyY2xla29yZWFuIiwxMjkwNCwiY2lldWNrb3JlYW4iLDEyNjE2LCJjaWV1Y3BhcmVua29yZWFuIiwxMjgwOCwiY2lldWN1cGFyZW5rb3JlYW4iLDEyODI4LCJjaXJjbGUiLDk2NzUsImNpcmNsZWNvcHlydCIsMTY5LCJjaXJjbGVtdWx0aXBseSIsODg1NSwiY2lyY2xlb3QiLDg4NTcsImNpcmNsZXBsdXMiLDg4NTMsImNpcmNsZXBvc3RhbG1hcmsiLDEyMzQyLCJjaXJjbGV3aXRobGVmdGhhbGZibGFjayIsOTY4MCwiY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrIiw5NjgxLCJjaXJjdW1mbGV4Iiw3MTAsImNpcmN1bWZsZXhiZWxvd2NtYiIsODEzLCJjaXJjdW1mbGV4Y21iIiw3NzAsImNsZWFyIiw4OTk5LCJjbGlja2FsdmVvbGFyIiw0NTAsImNsaWNrZGVudGFsIiw0NDgsImNsaWNrbGF0ZXJhbCIsNDQ5LCJjbGlja3JldHJvZmxleCIsNDUxLCJjbHViIiw5ODI3LCJjbHVic3VpdGJsYWNrIiw5ODI3LCJjbHVic3VpdHdoaXRlIiw5ODMxLCJjbWN1YmVkc3F1YXJlIiwxMzIyMCwiY21vbm9zcGFjZSIsNjUzNDcsImNtc3F1YXJlZHNxdWFyZSIsMTMyMTYsImNvYXJtZW5pYW4iLDE0MDksImNvbG9uIiw1OCwiY29sb25tb25ldGFyeSIsODM1MywiY29sb25tb25vc3BhY2UiLDY1MzA2LCJjb2xvbnNpZ24iLDgzNTMsImNvbG9uc21hbGwiLDY1MTA5LCJjb2xvbnRyaWFuZ3VsYXJoYWxmbW9kIiw3MjEsImNvbG9udHJpYW5ndWxhcm1vZCIsNzIwLCJjb21tYSIsNDQsImNvbW1hYWJvdmVjbWIiLDc4NywiY29tbWFhYm92ZXJpZ2h0Y21iIiw3ODksImNvbW1hYWNjZW50Iiw2MzE3MSwiY29tbWFhcmFiaWMiLDE1NDgsImNvbW1hYXJtZW5pYW4iLDEzNzMsImNvbW1haW5mZXJpb3IiLDYzMjAxLCJjb21tYW1vbm9zcGFjZSIsNjUyOTIsImNvbW1hcmV2ZXJzZWRhYm92ZWNtYiIsNzg4LCJjb21tYXJldmVyc2VkbW9kIiw3MDEsImNvbW1hc21hbGwiLDY1MTA0LCJjb21tYXN1cGVyaW9yIiw2MzIwMiwiY29tbWF0dXJuZWRhYm92ZWNtYiIsNzg2LCJjb21tYXR1cm5lZG1vZCIsNjk5LCJjb21wYXNzIiw5Nzg4LCJjb25ncnVlbnQiLDg3NzMsImNvbnRvdXJpbnRlZ3JhbCIsODc1MCwiY29udHJvbCIsODk2MywiY29udHJvbEFDSyIsNiwiY29udHJvbEJFTCIsNywiY29udHJvbEJTIiw4LCJjb250cm9sQ0FOIiwyNCwiY29udHJvbENSIiwxMywiY29udHJvbERDMSIsMTcsImNvbnRyb2xEQzIiLDE4LCJjb250cm9sREMzIiwxOSwiY29udHJvbERDNCIsMjAsImNvbnRyb2xERUwiLDEyNywiY29udHJvbERMRSIsMTYsImNvbnRyb2xFTSIsMjUsImNvbnRyb2xFTlEiLDUsImNvbnRyb2xFT1QiLDQsImNvbnRyb2xFU0MiLDI3LCJjb250cm9sRVRCIiwyMywiY29udHJvbEVUWCIsMywiY29udHJvbEZGIiwxMiwiY29udHJvbEZTIiwyOCwiY29udHJvbEdTIiwyOSwiY29udHJvbEhUIiw5LCJjb250cm9sTEYiLDEwLCJjb250cm9sTkFLIiwyMSwiY29udHJvbE5VTEwiLDAsImNvbnRyb2xSUyIsMzAsImNvbnRyb2xTSSIsMTUsImNvbnRyb2xTTyIsMTQsImNvbnRyb2xTT1QiLDIsImNvbnRyb2xTVFgiLDEsImNvbnRyb2xTVUIiLDI2LCJjb250cm9sU1lOIiwyMiwiY29udHJvbFVTIiwzMSwiY29udHJvbFZUIiwxMSwiY29weXJpZ2h0IiwxNjksImNvcHlyaWdodHNhbnMiLDYzNzIxLCJjb3B5cmlnaHRzZXJpZiIsNjMxOTMsImNvcm5lcmJyYWNrZXRsZWZ0IiwxMjMwMCwiY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGgiLDY1Mzc4LCJjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4OSwiY29ybmVyYnJhY2tldHJpZ2h0IiwxMjMwMSwiY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoIiw2NTM3OSwiY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkwLCJjb3Jwb3JhdGlvbnNxdWFyZSIsMTMxODMsImNvc3F1YXJlIiwxMzI1NSwiY292ZXJrZ3NxdWFyZSIsMTMyNTQsImNwYXJlbiIsOTM3NCwiY3J1emVpcm8iLDgzNTQsImNzdHJldGNoZWQiLDY2MywiY3VybHlhbmQiLDg5MTEsImN1cmx5b3IiLDg5MTAsImN1cnJlbmN5IiwxNjQsImN5ckJyZXZlIiw2MzE4NSwiY3lyRmxleCIsNjMxODYsImN5cmJyZXZlIiw2MzE4OCwiY3lyZmxleCIsNjMxODksImQiLDEwMCwiZGFhcm1lbmlhbiIsMTM4MCwiZGFiZW5nYWxpIiwyNDcwLCJkYWRhcmFiaWMiLDE1OTAsImRhZGV2YSIsMjM0MiwiZGFkZmluYWxhcmFiaWMiLDY1MjE0LCJkYWRpbml0aWFsYXJhYmljIiw2NTIxNSwiZGFkbWVkaWFsYXJhYmljIiw2NTIxNiwiZGFnZXNoIiwxNDY4LCJkYWdlc2hoZWJyZXciLDE0NjgsImRhZ2dlciIsODIyNCwiZGFnZ2VyZGJsIiw4MjI1LCJkYWd1amFyYXRpIiwyNzI2LCJkYWd1cm11a2hpIiwyNTk4LCJkYWhpcmFnYW5hIiwxMjM4NCwiZGFrYXRha2FuYSIsMTI0ODAsImRhbGFyYWJpYyIsMTU4MywiZGFsZXQiLDE0OTEsImRhbGV0ZGFnZXNoIiw2NDMwNywiZGFsZXRkYWdlc2hoZWJyZXciLDY0MzA3LCJkYWxldGhlYnJldyIsMTQ5MSwiZGFsZmluYWxhcmFiaWMiLDY1MTk0LCJkYW1tYWFyYWJpYyIsMTYxNSwiZGFtbWFsb3dhcmFiaWMiLDE2MTUsImRhbW1hdGFuYWx0b25lYXJhYmljIiwxNjEyLCJkYW1tYXRhbmFyYWJpYyIsMTYxMiwiZGFuZGEiLDI0MDQsImRhcmdhaGVicmV3IiwxNDQ3LCJkYXJnYWxlZnRoZWJyZXciLDE0NDcsImRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1NywiZGJsR3JhdmUiLDYzMTg3LCJkYmxhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5OCwiZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NSwiZGJsYW5nbGVicmFja2V0cmlnaHQiLDEyMjk5LCJkYmxhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4NiwiZGJsYXJjaGludmVydGVkYmVsb3djbWIiLDgxMSwiZGJsYXJyb3dsZWZ0Iiw4NjYwLCJkYmxhcnJvd3JpZ2h0Iiw4NjU4LCJkYmxkYW5kYSIsMjQwNSwiZGJsZ3JhdmUiLDYzMTkwLCJkYmxncmF2ZWNtYiIsNzgzLCJkYmxpbnRlZ3JhbCIsODc0OCwiZGJsbG93bGluZSIsODIxNSwiZGJsbG93bGluZWNtYiIsODE5LCJkYmxvdmVybGluZWNtYiIsODMxLCJkYmxwcmltZW1vZCIsNjk4LCJkYmx2ZXJ0aWNhbGJhciIsODIxNCwiZGJsdmVydGljYWxsaW5lYWJvdmVjbWIiLDc4MiwiZGJvcG9tb2ZvIiwxMjU1MywiZGJzcXVhcmUiLDEzMjU2LCJkY2Fyb24iLDI3MSwiZGNlZGlsbGEiLDc2OTcsImRjaXJjbGUiLDk0MjcsImRjaXJjdW1mbGV4YmVsb3ciLDc2OTksImRjcm9hdCIsMjczLCJkZGFiZW5nYWxpIiwyNDY1LCJkZGFkZXZhIiwyMzM3LCJkZGFndWphcmF0aSIsMjcyMSwiZGRhZ3VybXVraGkiLDI1OTMsImRkYWxhcmFiaWMiLDE2NzIsImRkYWxmaW5hbGFyYWJpYyIsNjQzOTMsImRkZGhhZGV2YSIsMjM5NiwiZGRoYWJlbmdhbGkiLDI0NjYsImRkaGFkZXZhIiwyMzM4LCJkZGhhZ3VqYXJhdGkiLDI3MjIsImRkaGFndXJtdWtoaSIsMjU5NCwiZGRvdGFjY2VudCIsNzY5MSwiZGRvdGJlbG93Iiw3NjkzLCJkZWNpbWFsc2VwYXJhdG9yYXJhYmljIiwxNjQzLCJkZWNpbWFsc2VwYXJhdG9ycGVyc2lhbiIsMTY0MywiZGVjeXJpbGxpYyIsMTA3NiwiZGVncmVlIiwxNzYsImRlaGloZWJyZXciLDE0NTMsImRlaGlyYWdhbmEiLDEyMzkxLCJkZWljb3B0aWMiLDEwMDcsImRla2F0YWthbmEiLDEyNDg3LCJkZWxldGVsZWZ0Iiw5MDAzLCJkZWxldGVyaWdodCIsODk5OCwiZGVsdGEiLDk0OCwiZGVsdGF0dXJuZWQiLDM5NywiZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGkiLDI1NTIsImRlemgiLDY3NiwiZGhhYmVuZ2FsaSIsMjQ3MSwiZGhhZGV2YSIsMjM0MywiZGhhZ3VqYXJhdGkiLDI3MjcsImRoYWd1cm11a2hpIiwyNTk5LCJkaG9vayIsNTk5LCJkaWFseXRpa2F0b25vcyIsOTAxLCJkaWFseXRpa2F0b25vc2NtYiIsODM2LCJkaWFtb25kIiw5ODMwLCJkaWFtb25kc3VpdHdoaXRlIiw5ODI2LCJkaWVyZXNpcyIsMTY4LCJkaWVyZXNpc2FjdXRlIiw2MzE5MSwiZGllcmVzaXNiZWxvd2NtYiIsODA0LCJkaWVyZXNpc2NtYiIsNzc2LCJkaWVyZXNpc2dyYXZlIiw2MzE5MiwiZGllcmVzaXN0b25vcyIsOTAxLCJkaWhpcmFnYW5hIiwxMjM4NiwiZGlrYXRha2FuYSIsMTI0ODIsImRpdHRvbWFyayIsMTIyOTEsImRpdmlkZSIsMjQ3LCJkaXZpZGVzIiw4NzM5LCJkaXZpc2lvbnNsYXNoIiw4NzI1LCJkamVjeXJpbGxpYyIsMTEwNiwiZGtzaGFkZSIsOTYxOSwiZGxpbmViZWxvdyIsNzY5NSwiZGxzcXVhcmUiLDEzMjA3LCJkbWFjcm9uIiwyNzMsImRtb25vc3BhY2UiLDY1MzQ4LCJkbmJsb2NrIiw5NjA0LCJkb2NoYWRhdGhhaSIsMzU5OCwiZG9kZWt0aGFpIiwzNjA0LCJkb2hpcmFnYW5hIiwxMjM5MywiZG9rYXRha2FuYSIsMTI0ODksImRvbGxhciIsMzYsImRvbGxhcmluZmVyaW9yIiw2MzIwMywiZG9sbGFybW9ub3NwYWNlIiw2NTI4NCwiZG9sbGFyb2xkc3R5bGUiLDYzMjY4LCJkb2xsYXJzbWFsbCIsNjUxMjksImRvbGxhcnN1cGVyaW9yIiw2MzIwNCwiZG9uZyIsODM2MywiZG9ydXNxdWFyZSIsMTMwOTQsImRvdGFjY2VudCIsNzI5LCJkb3RhY2NlbnRjbWIiLDc3NSwiZG90YmVsb3djbWIiLDgwMywiZG90YmVsb3djb21iIiw4MDMsImRvdGthdGFrYW5hIiwxMjUzOSwiZG90bGVzc2kiLDMwNSwiZG90bGVzc2oiLDYzMTY2LCJkb3RsZXNzanN0cm9rZWhvb2siLDY0NCwiZG90bWF0aCIsODkwMSwiZG90dGVkY2lyY2xlIiw5Njc2LCJkb3VibGV5b2RwYXRhaCIsNjQyODcsImRvdWJsZXlvZHBhdGFoaGVicmV3Iiw2NDI4NywiZG93bnRhY2tiZWxvd2NtYiIsNzk4LCJkb3dudGFja21vZCIsNzI1LCJkcGFyZW4iLDkzNzUsImRzdXBlcmlvciIsNjMyMTEsImR0YWlsIiw1OTgsImR0b3BiYXIiLDM5NiwiZHVoaXJhZ2FuYSIsMTIzODksImR1a2F0YWthbmEiLDEyNDg1LCJkeiIsNDk5LCJkemFsdG9uZSIsNjc1LCJkemNhcm9uIiw0NTQsImR6Y3VybCIsNjc3LCJkemVhYmtoYXNpYW5jeXJpbGxpYyIsMTI0OSwiZHplY3lyaWxsaWMiLDExMDksImR6aGVjeXJpbGxpYyIsMTExOSwiZSIsMTAxLCJlYWN1dGUiLDIzMywiZWFydGgiLDk3OTMsImViZW5nYWxpIiwyNDQ3LCJlYm9wb21vZm8iLDEyNTcyLCJlYnJldmUiLDI3NywiZWNhbmRyYWRldmEiLDIzMTcsImVjYW5kcmFndWphcmF0aSIsMjcwMSwiZWNhbmRyYXZvd2Vsc2lnbmRldmEiLDIzNzMsImVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aSIsMjc1NywiZWNhcm9uIiwyODMsImVjZWRpbGxhYnJldmUiLDc3MDksImVjaGFybWVuaWFuIiwxMzgxLCJlY2h5aXduYXJtZW5pYW4iLDE0MTUsImVjaXJjbGUiLDk0MjgsImVjaXJjdW1mbGV4IiwyMzQsImVjaXJjdW1mbGV4YWN1dGUiLDc4NzEsImVjaXJjdW1mbGV4YmVsb3ciLDc3MDUsImVjaXJjdW1mbGV4ZG90YmVsb3ciLDc4NzksImVjaXJjdW1mbGV4Z3JhdmUiLDc4NzMsImVjaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODc1LCJlY2lyY3VtZmxleHRpbGRlIiw3ODc3LCJlY3lyaWxsaWMiLDExMDgsImVkYmxncmF2ZSIsNTE3LCJlZGV2YSIsMjMxOSwiZWRpZXJlc2lzIiwyMzUsImVkb3QiLDI3OSwiZWRvdGFjY2VudCIsMjc5LCJlZG90YmVsb3ciLDc4NjUsImVlZ3VybXVraGkiLDI1NzUsImVlbWF0cmFndXJtdWtoaSIsMjYzMSwiZWZjeXJpbGxpYyIsMTA5MiwiZWdyYXZlIiwyMzIsImVndWphcmF0aSIsMjcwMywiZWhhcm1lbmlhbiIsMTM4MywiZWhib3BvbW9mbyIsMTI1NzMsImVoaXJhZ2FuYSIsMTIzNjAsImVob29rYWJvdmUiLDc4NjcsImVpYm9wb21vZm8iLDEyNTc1LCJlaWdodCIsNTYsImVpZ2h0YXJhYmljIiwxNjQwLCJlaWdodGJlbmdhbGkiLDI1NDIsImVpZ2h0Y2lyY2xlIiw5MzE5LCJlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI5LCJlaWdodGRldmEiLDI0MTQsImVpZ2h0ZWVuY2lyY2xlIiw5MzI5LCJlaWdodGVlbnBhcmVuIiw5MzQ5LCJlaWdodGVlbnBlcmlvZCIsOTM2OSwiZWlnaHRndWphcmF0aSIsMjc5OCwiZWlnaHRndXJtdWtoaSIsMjY3MCwiZWlnaHRoYWNrYXJhYmljIiwxNjQwLCJlaWdodGhhbmd6aG91IiwxMjMyOCwiZWlnaHRobm90ZWJlYW1lZCIsOTgzNSwiZWlnaHRpZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOSwiZWlnaHRpbmZlcmlvciIsODMyOCwiZWlnaHRtb25vc3BhY2UiLDY1MzA0LCJlaWdodG9sZHN0eWxlIiw2MzI4OCwiZWlnaHRwYXJlbiIsOTMzOSwiZWlnaHRwZXJpb2QiLDkzNTksImVpZ2h0cGVyc2lhbiIsMTc4NCwiZWlnaHRyb21hbiIsODU2NywiZWlnaHRzdXBlcmlvciIsODMxMiwiZWlnaHR0aGFpIiwzNjcyLCJlaW52ZXJ0ZWRicmV2ZSIsNTE5LCJlaW90aWZpZWRjeXJpbGxpYyIsMTEyNSwiZWthdGFrYW5hIiwxMjQ1NiwiZWthdGFrYW5haGFsZndpZHRoIiw2NTM5NiwiZWtvbmthcmd1cm11a2hpIiwyNjc2LCJla29yZWFuIiwxMjYyOCwiZWxjeXJpbGxpYyIsMTA4MywiZWxlbWVudCIsODcxMiwiZWxldmVuY2lyY2xlIiw5MzIyLCJlbGV2ZW5wYXJlbiIsOTM0MiwiZWxldmVucGVyaW9kIiw5MzYyLCJlbGV2ZW5yb21hbiIsODU3MCwiZWxsaXBzaXMiLDgyMzAsImVsbGlwc2lzdmVydGljYWwiLDg5NDIsImVtYWNyb24iLDI3NSwiZW1hY3JvbmFjdXRlIiw3NzAzLCJlbWFjcm9uZ3JhdmUiLDc3MDEsImVtY3lyaWxsaWMiLDEwODQsImVtZGFzaCIsODIxMiwiZW1kYXNodmVydGljYWwiLDY1MDczLCJlbW9ub3NwYWNlIiw2NTM0OSwiZW1waGFzaXNtYXJrYXJtZW5pYW4iLDEzNzEsImVtcHR5c2V0Iiw4NzA5LCJlbmJvcG9tb2ZvIiwxMjU3OSwiZW5jeXJpbGxpYyIsMTA4NSwiZW5kYXNoIiw4MjExLCJlbmRhc2h2ZXJ0aWNhbCIsNjUwNzQsImVuZGVzY2VuZGVyY3lyaWxsaWMiLDExODcsImVuZyIsMzMxLCJlbmdib3BvbW9mbyIsMTI1ODEsImVuZ2hlY3lyaWxsaWMiLDExODksImVuaG9va2N5cmlsbGljIiwxMjI0LCJlbnNwYWNlIiw4MTk0LCJlb2dvbmVrIiwyODEsImVva29yZWFuIiwxMjYyNywiZW9wZW4iLDYwMywiZW9wZW5jbG9zZWQiLDY2NiwiZW9wZW5yZXZlcnNlZCIsNjA0LCJlb3BlbnJldmVyc2VkY2xvc2VkIiw2MDYsImVvcGVucmV2ZXJzZWRob29rIiw2MDUsImVwYXJlbiIsOTM3NiwiZXBzaWxvbiIsOTQ5LCJlcHNpbG9udG9ub3MiLDk0MSwiZXF1YWwiLDYxLCJlcXVhbG1vbm9zcGFjZSIsNjUzMDksImVxdWFsc21hbGwiLDY1MTI2LCJlcXVhbHN1cGVyaW9yIiw4MzE2LCJlcXVpdmFsZW5jZSIsODgwMSwiZXJib3BvbW9mbyIsMTI1ODIsImVyY3lyaWxsaWMiLDEwODgsImVyZXZlcnNlZCIsNjAwLCJlcmV2ZXJzZWRjeXJpbGxpYyIsMTEwMSwiZXNjeXJpbGxpYyIsMTA4OSwiZXNkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NSwiZXNoIiw2NDMsImVzaGN1cmwiLDY0NiwiZXNob3J0ZGV2YSIsMjMxOCwiZXNob3J0dm93ZWxzaWduZGV2YSIsMjM3NCwiZXNocmV2ZXJzZWRsb29wIiw0MjYsImVzaHNxdWF0cmV2ZXJzZWQiLDY0NSwiZXNtYWxsaGlyYWdhbmEiLDEyMzU5LCJlc21hbGxrYXRha2FuYSIsMTI0NTUsImVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NiwiZXN0aW1hdGVkIiw4NDk0LCJlc3VwZXJpb3IiLDYzMjEyLCJldGEiLDk1MSwiZXRhcm1lbmlhbiIsMTM4NCwiZXRhdG9ub3MiLDk0MiwiZXRoIiwyNDAsImV0aWxkZSIsNzg2OSwiZXRpbGRlYmVsb3ciLDc3MDcsImV0bmFodGFmb3VraGhlYnJldyIsMTQyNSwiZXRuYWh0YWZvdWtobGVmdGhlYnJldyIsMTQyNSwiZXRuYWh0YWhlYnJldyIsMTQyNSwiZXRuYWh0YWxlZnRoZWJyZXciLDE0MjUsImV0dXJuZWQiLDQ3NywiZXVrb3JlYW4iLDEyNjQxLCJldXJvIiw4MzY0LCJldm93ZWxzaWduYmVuZ2FsaSIsMjUwMywiZXZvd2Vsc2lnbmRldmEiLDIzNzUsImV2b3dlbHNpZ25ndWphcmF0aSIsMjc1OSwiZXhjbGFtIiwzMywiZXhjbGFtYXJtZW5pYW4iLDEzNzIsImV4Y2xhbWRibCIsODI1MiwiZXhjbGFtZG93biIsMTYxLCJleGNsYW1kb3duc21hbGwiLDYzMzkzLCJleGNsYW1tb25vc3BhY2UiLDY1MjgxLCJleGNsYW1zbWFsbCIsNjMyNjUsImV4aXN0ZW50aWFsIiw4NzA3LCJlemgiLDY1OCwiZXpoY2Fyb24iLDQ5NSwiZXpoY3VybCIsNjU5LCJlemhyZXZlcnNlZCIsNDQxLCJlemh0YWlsIiw0NDIsImYiLDEwMiwiZmFkZXZhIiwyMzk4LCJmYWd1cm11a2hpIiwyNjU0LCJmYWhyZW5oZWl0Iiw4NDU3LCJmYXRoYWFyYWJpYyIsMTYxNCwiZmF0aGFsb3dhcmFiaWMiLDE2MTQsImZhdGhhdGFuYXJhYmljIiwxNjExLCJmYm9wb21vZm8iLDEyNTUyLCJmY2lyY2xlIiw5NDI5LCJmZG90YWNjZW50Iiw3NzExLCJmZWhhcmFiaWMiLDE2MDEsImZlaGFybWVuaWFuIiwxNDE0LCJmZWhmaW5hbGFyYWJpYyIsNjUyMzQsImZlaGluaXRpYWxhcmFiaWMiLDY1MjM1LCJmZWhtZWRpYWxhcmFiaWMiLDY1MjM2LCJmZWljb3B0aWMiLDk5NywiZmVtYWxlIiw5NzkyLCJmZiIsNjQyNTYsImZfZiIsNjQyNTYsImZmaSIsNjQyNTksImZfZl9pIiw2NDI1OSwiZmZsIiw2NDI2MCwiZl9mX2wiLDY0MjYwLCJmaSIsNjQyNTcsImZfaSIsNjQyNTcsImZpZnRlZW5jaXJjbGUiLDkzMjYsImZpZnRlZW5wYXJlbiIsOTM0NiwiZmlmdGVlbnBlcmlvZCIsOTM2NiwiZmlndXJlZGFzaCIsODIxMCwiZmlsbGVkYm94Iiw5NjMyLCJmaWxsZWRyZWN0Iiw5NjQ0LCJmaW5hbGthZiIsMTQ5OCwiZmluYWxrYWZkYWdlc2giLDY0MzE0LCJmaW5hbGthZmRhZ2VzaGhlYnJldyIsNjQzMTQsImZpbmFsa2FmaGVicmV3IiwxNDk4LCJmaW5hbG1lbSIsMTUwMSwiZmluYWxtZW1oZWJyZXciLDE1MDEsImZpbmFsbnVuIiwxNTAzLCJmaW5hbG51bmhlYnJldyIsMTUwMywiZmluYWxwZSIsMTUwNywiZmluYWxwZWhlYnJldyIsMTUwNywiZmluYWx0c2FkaSIsMTUwOSwiZmluYWx0c2FkaWhlYnJldyIsMTUwOSwiZmlyc3R0b25lY2hpbmVzZSIsNzEzLCJmaXNoZXllIiw5NjczLCJmaXRhY3lyaWxsaWMiLDExMzksImZpdmUiLDUzLCJmaXZlYXJhYmljIiwxNjM3LCJmaXZlYmVuZ2FsaSIsMjUzOSwiZml2ZWNpcmNsZSIsOTMxNiwiZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI2LCJmaXZlZGV2YSIsMjQxMSwiZml2ZWVpZ2h0aHMiLDg1NDEsImZpdmVndWphcmF0aSIsMjc5NSwiZml2ZWd1cm11a2hpIiwyNjY3LCJmaXZlaGFja2FyYWJpYyIsMTYzNywiZml2ZWhhbmd6aG91IiwxMjMyNSwiZml2ZWlkZW9ncmFwaGljcGFyZW4iLDEyODM2LCJmaXZlaW5mZXJpb3IiLDgzMjUsImZpdmVtb25vc3BhY2UiLDY1MzAxLCJmaXZlb2xkc3R5bGUiLDYzMjg1LCJmaXZlcGFyZW4iLDkzMzYsImZpdmVwZXJpb2QiLDkzNTYsImZpdmVwZXJzaWFuIiwxNzgxLCJmaXZlcm9tYW4iLDg1NjQsImZpdmVzdXBlcmlvciIsODMwOSwiZml2ZXRoYWkiLDM2NjksImZsIiw2NDI1OCwiZl9sIiw2NDI1OCwiZmxvcmluIiw0MDIsImZtb25vc3BhY2UiLDY1MzUwLCJmbXNxdWFyZSIsMTMyMDksImZvZmFudGhhaSIsMzYxNSwiZm9mYXRoYWkiLDM2MTMsImZvbmdtYW50aGFpIiwzNjYzLCJmb3JhbGwiLDg3MDQsImZvdXIiLDUyLCJmb3VyYXJhYmljIiwxNjM2LCJmb3VyYmVuZ2FsaSIsMjUzOCwiZm91cmNpcmNsZSIsOTMxNSwiZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI1LCJmb3VyZGV2YSIsMjQxMCwiZm91cmd1amFyYXRpIiwyNzk0LCJmb3VyZ3VybXVraGkiLDI2NjYsImZvdXJoYWNrYXJhYmljIiwxNjM2LCJmb3VyaGFuZ3pob3UiLDEyMzI0LCJmb3VyaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzUsImZvdXJpbmZlcmlvciIsODMyNCwiZm91cm1vbm9zcGFjZSIsNjUzMDAsImZvdXJudW1lcmF0b3JiZW5nYWxpIiwyNTUxLCJmb3Vyb2xkc3R5bGUiLDYzMjg0LCJmb3VycGFyZW4iLDkzMzUsImZvdXJwZXJpb2QiLDkzNTUsImZvdXJwZXJzaWFuIiwxNzgwLCJmb3Vycm9tYW4iLDg1NjMsImZvdXJzdXBlcmlvciIsODMwOCwiZm91cnRlZW5jaXJjbGUiLDkzMjUsImZvdXJ0ZWVucGFyZW4iLDkzNDUsImZvdXJ0ZWVucGVyaW9kIiw5MzY1LCJmb3VydGhhaSIsMzY2OCwiZm91cnRodG9uZWNoaW5lc2UiLDcxNSwiZnBhcmVuIiw5Mzc3LCJmcmFjdGlvbiIsODI2MCwiZnJhbmMiLDgzNTUsImciLDEwMywiZ2FiZW5nYWxpIiwyNDU1LCJnYWN1dGUiLDUwMSwiZ2FkZXZhIiwyMzI3LCJnYWZhcmFiaWMiLDE3MTEsImdhZmZpbmFsYXJhYmljIiw2NDQwMywiZ2FmaW5pdGlhbGFyYWJpYyIsNjQ0MDQsImdhZm1lZGlhbGFyYWJpYyIsNjQ0MDUsImdhZ3VqYXJhdGkiLDI3MTEsImdhZ3VybXVraGkiLDI1ODMsImdhaGlyYWdhbmEiLDEyMzY0LCJnYWthdGFrYW5hIiwxMjQ2MCwiZ2FtbWEiLDk0NywiZ2FtbWFsYXRpbnNtYWxsIiw2MTEsImdhbW1hc3VwZXJpb3IiLDczNiwiZ2FuZ2lhY29wdGljIiwxMDAzLCJnYm9wb21vZm8iLDEyNTU3LCJnYnJldmUiLDI4NywiZ2Nhcm9uIiw0ODcsImdjZWRpbGxhIiwyOTEsImdjaXJjbGUiLDk0MzAsImdjaXJjdW1mbGV4IiwyODUsImdjb21tYWFjY2VudCIsMjkxLCJnZG90IiwyODksImdkb3RhY2NlbnQiLDI4OSwiZ2VjeXJpbGxpYyIsMTA3NSwiZ2VoaXJhZ2FuYSIsMTIzNzAsImdla2F0YWthbmEiLDEyNDY2LCJnZW9tZXRyaWNhbGx5ZXF1YWwiLDg3ODUsImdlcmVzaGFjY2VudGhlYnJldyIsMTQzNiwiZ2VyZXNoaGVicmV3IiwxNTIzLCJnZXJlc2htdXFkYW1oZWJyZXciLDE0MzcsImdlcm1hbmRibHMiLDIyMywiZ2Vyc2hheWltYWNjZW50aGVicmV3IiwxNDM4LCJnZXJzaGF5aW1oZWJyZXciLDE1MjQsImdldGFtYXJrIiwxMjMwNywiZ2hhYmVuZ2FsaSIsMjQ1NiwiZ2hhZGFybWVuaWFuIiwxMzk0LCJnaGFkZXZhIiwyMzI4LCJnaGFndWphcmF0aSIsMjcxMiwiZ2hhZ3VybXVraGkiLDI1ODQsImdoYWluYXJhYmljIiwxNTk0LCJnaGFpbmZpbmFsYXJhYmljIiw2NTIzMCwiZ2hhaW5pbml0aWFsYXJhYmljIiw2NTIzMSwiZ2hhaW5tZWRpYWxhcmFiaWMiLDY1MjMyLCJnaGVtaWRkbGVob29rY3lyaWxsaWMiLDExNzMsImdoZXN0cm9rZWN5cmlsbGljIiwxMTcxLCJnaGV1cHR1cm5jeXJpbGxpYyIsMTE2OSwiZ2hoYWRldmEiLDIzOTQsImdoaGFndXJtdWtoaSIsMjY1MCwiZ2hvb2siLDYwOCwiZ2h6c3F1YXJlIiwxMzIwMywiZ2loaXJhZ2FuYSIsMTIzNjYsImdpa2F0YWthbmEiLDEyNDYyLCJnaW1hcm1lbmlhbiIsMTM3OSwiZ2ltZWwiLDE0OTAsImdpbWVsZGFnZXNoIiw2NDMwNiwiZ2ltZWxkYWdlc2hoZWJyZXciLDY0MzA2LCJnaW1lbGhlYnJldyIsMTQ5MCwiZ2plY3lyaWxsaWMiLDExMDcsImdsb3R0YWxpbnZlcnRlZHN0cm9rZSIsNDQ2LCJnbG90dGFsc3RvcCIsNjYwLCJnbG90dGFsc3RvcGludmVydGVkIiw2NjIsImdsb3R0YWxzdG9wbW9kIiw3MDQsImdsb3R0YWxzdG9wcmV2ZXJzZWQiLDY2MSwiZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZCIsNzA1LCJnbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3IiLDc0MCwiZ2xvdHRhbHN0b3BzdHJva2UiLDY3MywiZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZCIsNjc0LCJnbWFjcm9uIiw3NzEzLCJnbW9ub3NwYWNlIiw2NTM1MSwiZ29oaXJhZ2FuYSIsMTIzNzIsImdva2F0YWthbmEiLDEyNDY4LCJncGFyZW4iLDkzNzgsImdwYXNxdWFyZSIsMTMyMjgsImdyYWRpZW50Iiw4NzExLCJncmF2ZSIsOTYsImdyYXZlYmVsb3djbWIiLDc5MCwiZ3JhdmVjbWIiLDc2OCwiZ3JhdmVjb21iIiw3NjgsImdyYXZlZGV2YSIsMjM4NywiZ3JhdmVsb3dtb2QiLDcxOCwiZ3JhdmVtb25vc3BhY2UiLDY1MzQ0LCJncmF2ZXRvbmVjbWIiLDgzMiwiZ3JlYXRlciIsNjIsImdyZWF0ZXJlcXVhbCIsODgwNSwiZ3JlYXRlcmVxdWFsb3JsZXNzIiw4OTIzLCJncmVhdGVybW9ub3NwYWNlIiw2NTMxMCwiZ3JlYXRlcm9yZXF1aXZhbGVudCIsODgxOSwiZ3JlYXRlcm9ybGVzcyIsODgyMywiZ3JlYXRlcm92ZXJlcXVhbCIsODgwNywiZ3JlYXRlcnNtYWxsIiw2NTEyNSwiZ3NjcmlwdCIsNjA5LCJnc3Ryb2tlIiw0ODUsImd1aGlyYWdhbmEiLDEyMzY4LCJndWlsbGVtb3RsZWZ0IiwxNzEsImd1aWxsZW1vdHJpZ2h0IiwxODcsImd1aWxzaW5nbGxlZnQiLDgyNDksImd1aWxzaW5nbHJpZ2h0Iiw4MjUwLCJndWthdGFrYW5hIiwxMjQ2NCwiZ3VyYW11c3F1YXJlIiwxMzA4MCwiZ3lzcXVhcmUiLDEzMjU3LCJoIiwxMDQsImhhYWJraGFzaWFuY3lyaWxsaWMiLDExOTMsImhhYWx0b25lYXJhYmljIiwxNzI5LCJoYWJlbmdhbGkiLDI0ODksImhhZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDMsImhhZGV2YSIsMjM2MSwiaGFndWphcmF0aSIsMjc0NSwiaGFndXJtdWtoaSIsMjYxNywiaGFoYXJhYmljIiwxNTgxLCJoYWhmaW5hbGFyYWJpYyIsNjUxODYsImhhaGluaXRpYWxhcmFiaWMiLDY1MTg3LCJoYWhpcmFnYW5hIiwxMjM5OSwiaGFobWVkaWFsYXJhYmljIiw2NTE4OCwiaGFpdHVzcXVhcmUiLDEzMDk4LCJoYWthdGFrYW5hIiwxMjQ5NSwiaGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTgsImhhbGFudGd1cm11a2hpIiwyNjM3LCJoYW16YWFyYWJpYyIsMTU2OSwiaGFtemFsb3dhcmFiaWMiLDE1NjksImhhbmd1bGZpbGxlciIsMTI2NDQsImhhcmRzaWduY3lyaWxsaWMiLDEwOTgsImhhcnBvb25sZWZ0YmFyYnVwIiw4NjM2LCJoYXJwb29ucmlnaHRiYXJidXAiLDg2NDAsImhhc3F1YXJlIiwxMzI1OCwiaGF0YWZwYXRhaCIsMTQ1OCwiaGF0YWZwYXRhaDE2IiwxNDU4LCJoYXRhZnBhdGFoMjMiLDE0NTgsImhhdGFmcGF0YWgyZiIsMTQ1OCwiaGF0YWZwYXRhaGhlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaG5hcnJvd2hlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NTgsImhhdGFmcGF0YWh3aWRlaGVicmV3IiwxNDU4LCJoYXRhZnFhbWF0cyIsMTQ1OSwiaGF0YWZxYW1hdHMxYiIsMTQ1OSwiaGF0YWZxYW1hdHMyOCIsMTQ1OSwiaGF0YWZxYW1hdHMzNCIsMTQ1OSwiaGF0YWZxYW1hdHNoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzbmFycm93aGVicmV3IiwxNDU5LCJoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzd2lkZWhlYnJldyIsMTQ1OSwiaGF0YWZzZWdvbCIsMTQ1NywiaGF0YWZzZWdvbDE3IiwxNDU3LCJoYXRhZnNlZ29sMjQiLDE0NTcsImhhdGFmc2Vnb2wzMCIsMTQ1NywiaGF0YWZzZWdvbGhlYnJldyIsMTQ1NywiaGF0YWZzZWdvbG5hcnJvd2hlYnJldyIsMTQ1NywiaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXciLDE0NTcsImhhdGFmc2Vnb2x3aWRlaGVicmV3IiwxNDU3LCJoYmFyIiwyOTUsImhib3BvbW9mbyIsMTI1NTksImhicmV2ZWJlbG93Iiw3NzIzLCJoY2VkaWxsYSIsNzcyMSwiaGNpcmNsZSIsOTQzMSwiaGNpcmN1bWZsZXgiLDI5MywiaGRpZXJlc2lzIiw3NzE5LCJoZG90YWNjZW50Iiw3NzE1LCJoZG90YmVsb3ciLDc3MTcsImhlIiwxNDkyLCJoZWFydCIsOTgyOSwiaGVhcnRzdWl0YmxhY2siLDk4MjksImhlYXJ0c3VpdHdoaXRlIiw5ODI1LCJoZWRhZ2VzaCIsNjQzMDgsImhlZGFnZXNoaGVicmV3Iiw2NDMwOCwiaGVoYWx0b25lYXJhYmljIiwxNzI5LCJoZWhhcmFiaWMiLDE2MDcsImhlaGVicmV3IiwxNDkyLCJoZWhmaW5hbGFsdG9uZWFyYWJpYyIsNjQ0MjMsImhlaGZpbmFsYWx0dHdvYXJhYmljIiw2NTI1OCwiaGVoZmluYWxhcmFiaWMiLDY1MjU4LCJoZWhoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY0NDIxLCJoZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWMiLDY0NDIwLCJoZWhpbml0aWFsYWx0b25lYXJhYmljIiw2NDQyNCwiaGVoaW5pdGlhbGFyYWJpYyIsNjUyNTksImhlaGlyYWdhbmEiLDEyNDA4LCJoZWhtZWRpYWxhbHRvbmVhcmFiaWMiLDY0NDI1LCJoZWhtZWRpYWxhcmFiaWMiLDY1MjYwLCJoZWlzZWllcmFzcXVhcmUiLDEzMTc5LCJoZWthdGFrYW5hIiwxMjUwNCwiaGVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjEsImhla3V0YWFydXNxdWFyZSIsMTMxMTAsImhlbmdob29rIiw2MTUsImhlcnV0dXNxdWFyZSIsMTMxMTMsImhldCIsMTQ5NSwiaGV0aGVicmV3IiwxNDk1LCJoaG9vayIsNjE0LCJoaG9va3N1cGVyaW9yIiw2ODksImhpZXVoYWNpcmNsZWtvcmVhbiIsMTI5MjMsImhpZXVoYXBhcmVua29yZWFuIiwxMjgyNywiaGlldWhjaXJjbGVrb3JlYW4iLDEyOTA5LCJoaWV1aGtvcmVhbiIsMTI2MjIsImhpZXVocGFyZW5rb3JlYW4iLDEyODEzLCJoaWhpcmFnYW5hIiwxMjQwMiwiaGlrYXRha2FuYSIsMTI0OTgsImhpa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE5LCJoaXJpcSIsMTQ2MCwiaGlyaXExNCIsMTQ2MCwiaGlyaXEyMSIsMTQ2MCwiaGlyaXEyZCIsMTQ2MCwiaGlyaXFoZWJyZXciLDE0NjAsImhpcmlxbmFycm93aGVicmV3IiwxNDYwLCJoaXJpcXF1YXJ0ZXJoZWJyZXciLDE0NjAsImhpcmlxd2lkZWhlYnJldyIsMTQ2MCwiaGxpbmViZWxvdyIsNzgzMCwiaG1vbm9zcGFjZSIsNjUzNTIsImhvYXJtZW5pYW4iLDEzOTIsImhvaGlwdGhhaSIsMzYyNywiaG9oaXJhZ2FuYSIsMTI0MTEsImhva2F0YWthbmEiLDEyNTA3LCJob2thdGFrYW5haGFsZndpZHRoIiw2NTQyMiwiaG9sYW0iLDE0NjUsImhvbGFtMTkiLDE0NjUsImhvbGFtMjYiLDE0NjUsImhvbGFtMzIiLDE0NjUsImhvbGFtaGVicmV3IiwxNDY1LCJob2xhbW5hcnJvd2hlYnJldyIsMTQ2NSwiaG9sYW1xdWFydGVyaGVicmV3IiwxNDY1LCJob2xhbXdpZGVoZWJyZXciLDE0NjUsImhvbm9raHVrdGhhaSIsMzYzMCwiaG9va2Fib3ZlY29tYiIsNzc3LCJob29rY21iIiw3NzcsImhvb2twYWxhdGFsaXplZGJlbG93Y21iIiw4MDEsImhvb2tyZXRyb2ZsZXhiZWxvd2NtYiIsODAyLCJob29uc3F1YXJlIiwxMzEyMiwiaG9yaWNvcHRpYyIsMTAwMSwiaG9yaXpvbnRhbGJhciIsODIxMywiaG9ybmNtYiIsNzk1LCJob3RzcHJpbmdzIiw5ODMyLCJob3VzZSIsODk2MiwiaHBhcmVuIiw5Mzc5LCJoc3VwZXJpb3IiLDY4OCwiaHR1cm5lZCIsNjEzLCJodWhpcmFnYW5hIiwxMjQwNSwiaHVpaXRvc3F1YXJlIiwxMzEwNywiaHVrYXRha2FuYSIsMTI1MDEsImh1a2F0YWthbmFoYWxmd2lkdGgiLDY1NDIwLCJodW5nYXJ1bWxhdXQiLDczMywiaHVuZ2FydW1sYXV0Y21iIiw3NzksImh2Iiw0MDUsImh5cGhlbiIsNDUsImh5cGhlbmluZmVyaW9yIiw2MzIwNSwiaHlwaGVubW9ub3NwYWNlIiw2NTI5MywiaHlwaGVuc21hbGwiLDY1MTIzLCJoeXBoZW5zdXBlcmlvciIsNjMyMDYsImh5cGhlbnR3byIsODIwOCwiaSIsMTA1LCJpYWN1dGUiLDIzNywiaWFjeXJpbGxpYyIsMTEwMywiaWJlbmdhbGkiLDI0MzksImlib3BvbW9mbyIsMTI1ODMsImlicmV2ZSIsMzAxLCJpY2Fyb24iLDQ2NCwiaWNpcmNsZSIsOTQzMiwiaWNpcmN1bWZsZXgiLDIzOCwiaWN5cmlsbGljIiwxMTEwLCJpZGJsZ3JhdmUiLDUyMSwiaWRlb2dyYXBoZWFydGhjaXJjbGUiLDEyOTQzLCJpZGVvZ3JhcGhmaXJlY2lyY2xlIiwxMjkzOSwiaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuIiwxMjg2MywiaWRlb2dyYXBoaWNjYWxscGFyZW4iLDEyODU4LCJpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZSIsMTI5NjUsImlkZW9ncmFwaGljY2xvc2UiLDEyMjk0LCJpZGVvZ3JhcGhpY2NvbW1hIiwxMjI4OSwiaWRlb2dyYXBoaWNjb21tYWxlZnQiLDY1MzgwLCJpZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4iLDEyODU1LCJpZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGUiLDEyOTYzLCJpZGVvZ3JhcGhpY2VhcnRocGFyZW4iLDEyODQ3LCJpZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiIsMTI4NjEsImlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlIiwxMjk1NywiaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuIiwxMjg2NCwiaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUiLDEyOTUwLCJpZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuIiwxMjg1NCwiaWRlb2dyYXBoaWNmaXJlcGFyZW4iLDEyODQzLCJpZGVvZ3JhcGhpY2hhdmVwYXJlbiIsMTI4NTAsImlkZW9ncmFwaGljaGlnaGNpcmNsZSIsMTI5NjQsImlkZW9ncmFwaGljaXRlcmF0aW9ubWFyayIsMTIyOTMsImlkZW9ncmFwaGljbGFib3JjaXJjbGUiLDEyOTUyLCJpZGVvZ3JhcGhpY2xhYm9ycGFyZW4iLDEyODU2LCJpZGVvZ3JhcGhpY2xlZnRjaXJjbGUiLDEyOTY3LCJpZGVvZ3JhcGhpY2xvd2NpcmNsZSIsMTI5NjYsImlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGUiLDEyOTY5LCJpZGVvZ3JhcGhpY21ldGFscGFyZW4iLDEyODQ2LCJpZGVvZ3JhcGhpY21vb25wYXJlbiIsMTI4NDIsImlkZW9ncmFwaGljbmFtZXBhcmVuIiwxMjg1MiwiaWRlb2dyYXBoaWNwZXJpb2QiLDEyMjkwLCJpZGVvZ3JhcGhpY3ByaW50Y2lyY2xlIiwxMjk1OCwiaWRlb2dyYXBoaWNyZWFjaHBhcmVuIiwxMjg2NywiaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbiIsMTI4NTcsImlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiIsMTI4NjIsImlkZW9ncmFwaGljcmlnaHRjaXJjbGUiLDEyOTY4LCJpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZSIsMTI5NTMsImlkZW9ncmFwaGljc2VsZnBhcmVuIiwxMjg2NiwiaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW4iLDEyODUxLCJpZGVvZ3JhcGhpY3NwYWNlIiwxMjI4OCwiaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4iLDEyODUzLCJpZGVvZ3JhcGhpY3N0b2NrcGFyZW4iLDEyODQ5LCJpZGVvZ3JhcGhpY3N0dWR5cGFyZW4iLDEyODU5LCJpZGVvZ3JhcGhpY3N1bnBhcmVuIiwxMjg0OCwiaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbiIsMTI4NjAsImlkZW9ncmFwaGljd2F0ZXJwYXJlbiIsMTI4NDQsImlkZW9ncmFwaGljd29vZHBhcmVuIiwxMjg0NSwiaWRlb2dyYXBoaWN6ZXJvIiwxMjI5NSwiaWRlb2dyYXBobWV0YWxjaXJjbGUiLDEyOTQyLCJpZGVvZ3JhcGhtb29uY2lyY2xlIiwxMjkzOCwiaWRlb2dyYXBobmFtZWNpcmNsZSIsMTI5NDgsImlkZW9ncmFwaHN1bmNpcmNsZSIsMTI5NDQsImlkZW9ncmFwaHdhdGVyY2lyY2xlIiwxMjk0MCwiaWRlb2dyYXBod29vZGNpcmNsZSIsMTI5NDEsImlkZXZhIiwyMzExLCJpZGllcmVzaXMiLDIzOSwiaWRpZXJlc2lzYWN1dGUiLDc3MjcsImlkaWVyZXNpc2N5cmlsbGljIiwxMjUzLCJpZG90YmVsb3ciLDc4ODMsImllYnJldmVjeXJpbGxpYyIsMTIzOSwiaWVjeXJpbGxpYyIsMTA3NywiaWV1bmdhY2lyY2xla29yZWFuIiwxMjkxNywiaWV1bmdhcGFyZW5rb3JlYW4iLDEyODIxLCJpZXVuZ2NpcmNsZWtvcmVhbiIsMTI5MDMsImlldW5na29yZWFuIiwxMjYxNSwiaWV1bmdwYXJlbmtvcmVhbiIsMTI4MDcsImlncmF2ZSIsMjM2LCJpZ3VqYXJhdGkiLDI2OTUsImlndXJtdWtoaSIsMjU2NywiaWhpcmFnYW5hIiwxMjM1NiwiaWhvb2thYm92ZSIsNzg4MSwiaWliZW5nYWxpIiwyNDQwLCJpaWN5cmlsbGljIiwxMDgwLCJpaWRldmEiLDIzMTIsImlpZ3VqYXJhdGkiLDI2OTYsImlpZ3VybXVraGkiLDI1NjgsImlpbWF0cmFndXJtdWtoaSIsMjYyNCwiaWludmVydGVkYnJldmUiLDUyMywiaWlzaG9ydGN5cmlsbGljIiwxMDgxLCJpaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTYsImlpdm93ZWxzaWduZGV2YSIsMjM2OCwiaWl2b3dlbHNpZ25ndWphcmF0aSIsMjc1MiwiaWoiLDMwNywiaWthdGFrYW5hIiwxMjQ1MiwiaWthdGFrYW5haGFsZndpZHRoIiw2NTM5NCwiaWtvcmVhbiIsMTI2NDMsImlsZGUiLDczMiwiaWx1eWhlYnJldyIsMTQ1MiwiaW1hY3JvbiIsMjk5LCJpbWFjcm9uY3lyaWxsaWMiLDEyNTEsImltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3ODcsImltYXRyYWd1cm11a2hpIiwyNjIzLCJpbW9ub3NwYWNlIiw2NTM1MywiaW5jcmVtZW50Iiw4NzEwLCJpbmZpbml0eSIsODczNCwiaW5pYXJtZW5pYW4iLDEzODcsImludGVncmFsIiw4NzQ3LCJpbnRlZ3JhbGJvdHRvbSIsODk5MywiaW50ZWdyYWxidCIsODk5MywiaW50ZWdyYWxleCIsNjM3MzMsImludGVncmFsdG9wIiw4OTkyLCJpbnRlZ3JhbHRwIiw4OTkyLCJpbnRlcnNlY3Rpb24iLDg3NDUsImludGlzcXVhcmUiLDEzMDYxLCJpbnZidWxsZXQiLDk2ODgsImludmNpcmNsZSIsOTY4OSwiaW52c21pbGVmYWNlIiw5Nzg3LCJpb2N5cmlsbGljIiwxMTA1LCJpb2dvbmVrIiwzMDMsImlvdGEiLDk1MywiaW90YWRpZXJlc2lzIiw5NzAsImlvdGFkaWVyZXNpc3Rvbm9zIiw5MTIsImlvdGFsYXRpbiIsNjE3LCJpb3RhdG9ub3MiLDk0MywiaXBhcmVuIiw5MzgwLCJpcmlndXJtdWtoaSIsMjY3NCwiaXNtYWxsaGlyYWdhbmEiLDEyMzU1LCJpc21hbGxrYXRha2FuYSIsMTI0NTEsImlzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NCwiaXNzaGFyYmVuZ2FsaSIsMjU1NCwiaXN0cm9rZSIsNjE2LCJpc3VwZXJpb3IiLDYzMjEzLCJpdGVyYXRpb25oaXJhZ2FuYSIsMTI0NDUsIml0ZXJhdGlvbmthdGFrYW5hIiwxMjU0MSwiaXRpbGRlIiwyOTcsIml0aWxkZWJlbG93Iiw3NzI1LCJpdWJvcG9tb2ZvIiwxMjU4NSwiaXVjeXJpbGxpYyIsMTEwMiwiaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTUsIml2b3dlbHNpZ25kZXZhIiwyMzY3LCJpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTEsIml6aGl0c2FjeXJpbGxpYyIsMTE0MSwiaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMiLDExNDMsImoiLDEwNiwiamFhcm1lbmlhbiIsMTM5MywiamFiZW5nYWxpIiwyNDYwLCJqYWRldmEiLDIzMzIsImphZ3VqYXJhdGkiLDI3MTYsImphZ3VybXVraGkiLDI1ODgsImpib3BvbW9mbyIsMTI1NjAsImpjYXJvbiIsNDk2LCJqY2lyY2xlIiw5NDMzLCJqY2lyY3VtZmxleCIsMzA5LCJqY3Jvc3NlZHRhaWwiLDY2OSwiamRvdGxlc3NzdHJva2UiLDYwNywiamVjeXJpbGxpYyIsMTExMiwiamVlbWFyYWJpYyIsMTU4MCwiamVlbWZpbmFsYXJhYmljIiw2NTE4MiwiamVlbWluaXRpYWxhcmFiaWMiLDY1MTgzLCJqZWVtbWVkaWFsYXJhYmljIiw2NTE4NCwiamVoYXJhYmljIiwxNjg4LCJqZWhmaW5hbGFyYWJpYyIsNjQzOTUsImpoYWJlbmdhbGkiLDI0NjEsImpoYWRldmEiLDIzMzMsImpoYWd1amFyYXRpIiwyNzE3LCJqaGFndXJtdWtoaSIsMjU4OSwiamhlaGFybWVuaWFuIiwxNDAzLCJqaXMiLDEyMjkyLCJqbW9ub3NwYWNlIiw2NTM1NCwianBhcmVuIiw5MzgxLCJqc3VwZXJpb3IiLDY5MCwiayIsMTA3LCJrYWJhc2hraXJjeXJpbGxpYyIsMTE4NSwia2FiZW5nYWxpIiwyNDUzLCJrYWN1dGUiLDc3MjksImthY3lyaWxsaWMiLDEwODIsImthZGVzY2VuZGVyY3lyaWxsaWMiLDExNzksImthZGV2YSIsMjMyNSwia2FmIiwxNDk5LCJrYWZhcmFiaWMiLDE2MDMsImthZmRhZ2VzaCIsNjQzMTUsImthZmRhZ2VzaGhlYnJldyIsNjQzMTUsImthZmZpbmFsYXJhYmljIiw2NTI0Miwia2FmaGVicmV3IiwxNDk5LCJrYWZpbml0aWFsYXJhYmljIiw2NTI0Mywia2FmbWVkaWFsYXJhYmljIiw2NTI0NCwia2FmcmFmZWhlYnJldyIsNjQzMzMsImthZ3VqYXJhdGkiLDI3MDksImthZ3VybXVraGkiLDI1ODEsImthaGlyYWdhbmEiLDEyMzYzLCJrYWhvb2tjeXJpbGxpYyIsMTIyMCwia2FrYXRha2FuYSIsMTI0NTksImtha2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk4LCJrYXBwYSIsOTU0LCJrYXBwYXN5bWJvbGdyZWVrIiwxMDA4LCJrYXB5ZW91bm1pZXVta29yZWFuIiwxMjY1Nywia2FweWVvdW5waGlldXBoa29yZWFuIiwxMjY3Niwia2FweWVvdW5waWV1cGtvcmVhbiIsMTI2NjQsImthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbiIsMTI2NjUsImthcm9yaWlzcXVhcmUiLDEzMDY5LCJrYXNoaWRhYXV0b2FyYWJpYyIsMTYwMCwia2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljIiwxNjAwLCJrYXNtYWxsa2F0YWthbmEiLDEyNTMzLCJrYXNxdWFyZSIsMTMxODgsImthc3JhYXJhYmljIiwxNjE2LCJrYXNyYXRhbmFyYWJpYyIsMTYxMywia2FzdHJva2VjeXJpbGxpYyIsMTE4Mywia2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aCIsNjUzOTIsImthdmVydGljYWxzdHJva2VjeXJpbGxpYyIsMTE4MSwia2JvcG9tb2ZvIiwxMjU1OCwia2NhbHNxdWFyZSIsMTMxOTMsImtjYXJvbiIsNDg5LCJrY2VkaWxsYSIsMzExLCJrY2lyY2xlIiw5NDM0LCJrY29tbWFhY2NlbnQiLDMxMSwia2RvdGJlbG93Iiw3NzMxLCJrZWhhcm1lbmlhbiIsMTQxMiwia2VoaXJhZ2FuYSIsMTIzNjksImtla2F0YWthbmEiLDEyNDY1LCJrZWthdGFrYW5haGFsZndpZHRoIiw2NTQwMSwia2VuYXJtZW5pYW4iLDEzOTEsImtlc21hbGxrYXRha2FuYSIsMTI1MzQsImtncmVlbmxhbmRpYyIsMzEyLCJraGFiZW5nYWxpIiwyNDU0LCJraGFjeXJpbGxpYyIsMTA5Mywia2hhZGV2YSIsMjMyNiwia2hhZ3VqYXJhdGkiLDI3MTAsImtoYWd1cm11a2hpIiwyNTgyLCJraGFoYXJhYmljIiwxNTgyLCJraGFoZmluYWxhcmFiaWMiLDY1MTkwLCJraGFoaW5pdGlhbGFyYWJpYyIsNjUxOTEsImtoYWhtZWRpYWxhcmFiaWMiLDY1MTkyLCJraGVpY29wdGljIiw5OTksImtoaGFkZXZhIiwyMzkzLCJraGhhZ3VybXVraGkiLDI2NDksImtoaWV1a2hhY2lyY2xla29yZWFuIiwxMjkyMCwia2hpZXVraGFwYXJlbmtvcmVhbiIsMTI4MjQsImtoaWV1a2hjaXJjbGVrb3JlYW4iLDEyOTA2LCJraGlldWtoa29yZWFuIiwxMjYxOSwia2hpZXVraHBhcmVua29yZWFuIiwxMjgxMCwia2hva2hhaXRoYWkiLDM1ODYsImtob2tob250aGFpIiwzNTg5LCJraG9raHVhdHRoYWkiLDM1ODcsImtob2tod2FpdGhhaSIsMzU4OCwia2hvbXV0dGhhaSIsMzY3NSwia2hvb2siLDQwOSwia2hvcmFraGFuZ3RoYWkiLDM1OTAsImtoenNxdWFyZSIsMTMyMDEsImtpaGlyYWdhbmEiLDEyMzY1LCJraWthdGFrYW5hIiwxMjQ2MSwia2lrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTksImtpcm9ndXJhbXVzcXVhcmUiLDEzMDc3LCJraXJvbWVldG9ydXNxdWFyZSIsMTMwNzgsImtpcm9zcXVhcmUiLDEzMDc2LCJraXllb2thY2lyY2xla29yZWFuIiwxMjkxMCwia2l5ZW9rYXBhcmVua29yZWFuIiwxMjgxNCwia2l5ZW9rY2lyY2xla29yZWFuIiwxMjg5Niwia2l5ZW9ra29yZWFuIiwxMjU5Mywia2l5ZW9rcGFyZW5rb3JlYW4iLDEyODAwLCJraXllb2tzaW9za29yZWFuIiwxMjU5NSwia2plY3lyaWxsaWMiLDExMTYsImtsaW5lYmVsb3ciLDc3MzMsImtsc3F1YXJlIiwxMzIwOCwia21jdWJlZHNxdWFyZSIsMTMyMjIsImttb25vc3BhY2UiLDY1MzU1LCJrbXNxdWFyZWRzcXVhcmUiLDEzMjE4LCJrb2hpcmFnYW5hIiwxMjM3MSwia29obXNxdWFyZSIsMTMyNDgsImtva2FpdGhhaSIsMzU4NSwia29rYXRha2FuYSIsMTI0NjcsImtva2F0YWthbmFoYWxmd2lkdGgiLDY1NDAyLCJrb29wb3NxdWFyZSIsMTMwODYsImtvcHBhY3lyaWxsaWMiLDExNTMsImtvcmVhbnN0YW5kYXJkc3ltYm9sIiwxMjkyNywia29yb25pc2NtYiIsODM1LCJrcGFyZW4iLDkzODIsImtwYXNxdWFyZSIsMTMyMjYsImtzaWN5cmlsbGljIiwxMTM1LCJrdHNxdWFyZSIsMTMyNjMsImt0dXJuZWQiLDY3MCwia3VoaXJhZ2FuYSIsMTIzNjcsImt1a2F0YWthbmEiLDEyNDYzLCJrdWthdGFrYW5haGFsZndpZHRoIiw2NTQwMCwia3ZzcXVhcmUiLDEzMjQwLCJrd3NxdWFyZSIsMTMyNDYsImwiLDEwOCwibGFiZW5nYWxpIiwyNDgyLCJsYWN1dGUiLDMxNCwibGFkZXZhIiwyMzU0LCJsYWd1amFyYXRpIiwyNzM4LCJsYWd1cm11a2hpIiwyNjEwLCJsYWtraGFuZ3lhb3RoYWkiLDM2NTMsImxhbWFsZWZmaW5hbGFyYWJpYyIsNjUyNzYsImxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MjcyLCJsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljIiw2NTI3MSwibGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUyNzQsImxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWMiLDY1MjczLCJsYW1hbGVmaXNvbGF0ZWRhcmFiaWMiLDY1Mjc1LCJsYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTI3MCwibGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYyIsNjUyNjksImxhbWFyYWJpYyIsMTYwNCwibGFtYmRhIiw5NTUsImxhbWJkYXN0cm9rZSIsNDExLCJsYW1lZCIsMTUwMCwibGFtZWRkYWdlc2giLDY0MzE2LCJsYW1lZGRhZ2VzaGhlYnJldyIsNjQzMTYsImxhbWVkaGVicmV3IiwxNTAwLCJsYW1maW5hbGFyYWJpYyIsNjUyNDYsImxhbWhhaGluaXRpYWxhcmFiaWMiLDY0NzE0LCJsYW1pbml0aWFsYXJhYmljIiw2NTI0NywibGFtamVlbWluaXRpYWxhcmFiaWMiLDY0NzEzLCJsYW1raGFoaW5pdGlhbGFyYWJpYyIsNjQ3MTUsImxhbWxhbWhlaGlzb2xhdGVkYXJhYmljIiw2NTAxMCwibGFtbWVkaWFsYXJhYmljIiw2NTI0OCwibGFtbWVlbWhhaGluaXRpYWxhcmFiaWMiLDY0OTA0LCJsYW1tZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MTYsImxhcmdlY2lyY2xlIiw5NzExLCJsYmFyIiw0MTAsImxiZWx0Iiw2MjAsImxib3BvbW9mbyIsMTI1NTYsImxjYXJvbiIsMzE4LCJsY2VkaWxsYSIsMzE2LCJsY2lyY2xlIiw5NDM1LCJsY2lyY3VtZmxleGJlbG93Iiw3NzQxLCJsY29tbWFhY2NlbnQiLDMxNiwibGRvdCIsMzIwLCJsZG90YWNjZW50IiwzMjAsImxkb3RiZWxvdyIsNzczNSwibGRvdGJlbG93bWFjcm9uIiw3NzM3LCJsZWZ0YW5nbGVhYm92ZWNtYiIsNzk0LCJsZWZ0dGFja2JlbG93Y21iIiw3OTIsImxlc3MiLDYwLCJsZXNzZXF1YWwiLDg4MDQsImxlc3NlcXVhbG9yZ3JlYXRlciIsODkyMiwibGVzc21vbm9zcGFjZSIsNjUzMDgsImxlc3NvcmVxdWl2YWxlbnQiLDg4MTgsImxlc3NvcmdyZWF0ZXIiLDg4MjIsImxlc3NvdmVyZXF1YWwiLDg4MDYsImxlc3NzbWFsbCIsNjUxMjQsImxlemgiLDYyMiwibGZibG9jayIsOTYxMiwibGhvb2tyZXRyb2ZsZXgiLDYyMSwibGlyYSIsODM1NiwibGl3bmFybWVuaWFuIiwxMzg4LCJsaiIsNDU3LCJsamVjeXJpbGxpYyIsMTExMywibGwiLDYzMTY4LCJsbGFkZXZhIiwyMzU1LCJsbGFndWphcmF0aSIsMjczOSwibGxpbmViZWxvdyIsNzczOSwibGxsYWRldmEiLDIzNTYsImxsdm9jYWxpY2JlbmdhbGkiLDI1MjksImxsdm9jYWxpY2RldmEiLDI0MDEsImxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzEsImxsdm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDI0MDMsImxtaWRkbGV0aWxkZSIsNjE5LCJsbW9ub3NwYWNlIiw2NTM1NiwibG1zcXVhcmUiLDEzMjY0LCJsb2NodWxhdGhhaSIsMzYyOCwibG9naWNhbGFuZCIsODc0MywibG9naWNhbG5vdCIsMTcyLCJsb2dpY2Fsbm90cmV2ZXJzZWQiLDg5NzYsImxvZ2ljYWxvciIsODc0NCwibG9saW5ndGhhaSIsMzYyMSwibG9uZ3MiLDM4MywibG93bGluZWNlbnRlcmxpbmUiLDY1MTAyLCJsb3dsaW5lY21iIiw4MTgsImxvd2xpbmVkYXNoZWQiLDY1MTAxLCJsb3plbmdlIiw5Njc0LCJscGFyZW4iLDkzODMsImxzbGFzaCIsMzIyLCJsc3F1YXJlIiw4NDY3LCJsc3VwZXJpb3IiLDYzMjE0LCJsdHNoYWRlIiw5NjE3LCJsdXRoYWkiLDM2MjIsImx2b2NhbGljYmVuZ2FsaSIsMjQ0NCwibHZvY2FsaWNkZXZhIiwyMzE2LCJsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzAsImx2b2NhbGljdm93ZWxzaWduZGV2YSIsMjQwMiwibHhzcXVhcmUiLDEzMjY3LCJtIiwxMDksIm1hYmVuZ2FsaSIsMjQ3OCwibWFjcm9uIiwxNzUsIm1hY3JvbmJlbG93Y21iIiw4MTcsIm1hY3JvbmNtYiIsNzcyLCJtYWNyb25sb3dtb2QiLDcxNywibWFjcm9ubW9ub3NwYWNlIiw2NTUwNywibWFjdXRlIiw3NzQzLCJtYWRldmEiLDIzNTAsIm1hZ3VqYXJhdGkiLDI3MzQsIm1hZ3VybXVraGkiLDI2MDYsIm1haGFwYWtoaGVicmV3IiwxNDQ0LCJtYWhhcGFraGxlZnRoZWJyZXciLDE0NDQsIm1haGlyYWdhbmEiLDEyNDE0LCJtYWljaGF0dGF3YWxvd2xlZnR0aGFpIiw2MzYzNywibWFpY2hhdHRhd2Fsb3dyaWdodHRoYWkiLDYzNjM2LCJtYWljaGF0dGF3YXRoYWkiLDM2NTksIm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSIsNjM2MzUsIm1haWVrbG93bGVmdHRoYWkiLDYzNjI4LCJtYWlla2xvd3JpZ2h0dGhhaSIsNjM2MjcsIm1haWVrdGhhaSIsMzY1NiwibWFpZWt1cHBlcmxlZnR0aGFpIiw2MzYyNiwibWFpaGFuYWthdGxlZnR0aGFpIiw2MzYyMCwibWFpaGFuYWthdHRoYWkiLDM2MzMsIm1haXRhaWtodWxlZnR0aGFpIiw2MzYyNSwibWFpdGFpa2h1dGhhaSIsMzY1NSwibWFpdGhvbG93bGVmdHRoYWkiLDYzNjMxLCJtYWl0aG9sb3dyaWdodHRoYWkiLDYzNjMwLCJtYWl0aG90aGFpIiwzNjU3LCJtYWl0aG91cHBlcmxlZnR0aGFpIiw2MzYyOSwibWFpdHJpbG93bGVmdHRoYWkiLDYzNjM0LCJtYWl0cmlsb3dyaWdodHRoYWkiLDYzNjMzLCJtYWl0cml0aGFpIiwzNjU4LCJtYWl0cml1cHBlcmxlZnR0aGFpIiw2MzYzMiwibWFpeWFtb2t0aGFpIiwzNjU0LCJtYWthdGFrYW5hIiwxMjUxMCwibWFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjMsIm1hbGUiLDk3OTQsIm1hbnN5b25zcXVhcmUiLDEzMTI3LCJtYXFhZmhlYnJldyIsMTQ3MCwibWFycyIsOTc5NCwibWFzb3JhY2lyY2xlaGVicmV3IiwxNDU1LCJtYXNxdWFyZSIsMTMxODcsIm1ib3BvbW9mbyIsMTI1NTEsIm1ic3F1YXJlIiwxMzI2OCwibWNpcmNsZSIsOTQzNiwibWN1YmVkc3F1YXJlIiwxMzIyMSwibWRvdGFjY2VudCIsNzc0NSwibWRvdGJlbG93Iiw3NzQ3LCJtZWVtYXJhYmljIiwxNjA1LCJtZWVtZmluYWxhcmFiaWMiLDY1MjUwLCJtZWVtaW5pdGlhbGFyYWJpYyIsNjUyNTEsIm1lZW1tZWRpYWxhcmFiaWMiLDY1MjUyLCJtZWVtbWVlbWluaXRpYWxhcmFiaWMiLDY0NzIxLCJtZWVtbWVlbWlzb2xhdGVkYXJhYmljIiw2NDU4NCwibWVldG9ydXNxdWFyZSIsMTMxMzMsIm1laGlyYWdhbmEiLDEyNDE3LCJtZWl6aWVyYXNxdWFyZSIsMTMxODIsIm1la2F0YWthbmEiLDEyNTEzLCJtZWthdGFrYW5haGFsZndpZHRoIiw2NTQyNiwibWVtIiwxNTAyLCJtZW1kYWdlc2giLDY0MzE4LCJtZW1kYWdlc2hoZWJyZXciLDY0MzE4LCJtZW1oZWJyZXciLDE1MDIsIm1lbmFybWVuaWFuIiwxMzk2LCJtZXJraGFoZWJyZXciLDE0NDUsIm1lcmtoYWtlZnVsYWhlYnJldyIsMTQ0NiwibWVya2hha2VmdWxhbGVmdGhlYnJldyIsMTQ0NiwibWVya2hhbGVmdGhlYnJldyIsMTQ0NSwibWhvb2siLDYyNSwibWh6c3F1YXJlIiwxMzIwMiwibWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGgiLDY1MzgxLCJtaWRkb3QiLDE4MywibWlldW1hY2lyY2xla29yZWFuIiwxMjkxNCwibWlldW1hcGFyZW5rb3JlYW4iLDEyODE4LCJtaWV1bWNpcmNsZWtvcmVhbiIsMTI5MDAsIm1pZXVta29yZWFuIiwxMjYwOSwibWlldW1wYW5zaW9za29yZWFuIiwxMjY1NiwibWlldW1wYXJlbmtvcmVhbiIsMTI4MDQsIm1pZXVtcGlldXBrb3JlYW4iLDEyNjU0LCJtaWV1bXNpb3Nrb3JlYW4iLDEyNjU1LCJtaWhpcmFnYW5hIiwxMjQxNSwibWlrYXRha2FuYSIsMTI1MTEsIm1pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDI0LCJtaW51cyIsODcyMiwibWludXNiZWxvd2NtYiIsODAwLCJtaW51c2NpcmNsZSIsODg1NCwibWludXNtb2QiLDcyNywibWludXNwbHVzIiw4NzIzLCJtaW51dGUiLDgyNDIsIm1pcmliYWFydXNxdWFyZSIsMTMxMzAsIm1pcmlzcXVhcmUiLDEzMTI5LCJtbG9uZ2xlZ3R1cm5lZCIsNjI0LCJtbHNxdWFyZSIsMTMyMDYsIm1tY3ViZWRzcXVhcmUiLDEzMjE5LCJtbW9ub3NwYWNlIiw2NTM1NywibW1zcXVhcmVkc3F1YXJlIiwxMzIxNSwibW9oaXJhZ2FuYSIsMTI0MTgsIm1vaG1zcXVhcmUiLDEzMjQ5LCJtb2thdGFrYW5hIiwxMjUxNCwibW9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjcsIm1vbHNxdWFyZSIsMTMyNzAsIm1vbWF0aGFpIiwzNjE3LCJtb3ZlcnNzcXVhcmUiLDEzMjIzLCJtb3ZlcnNzcXVhcmVkc3F1YXJlIiwxMzIyNCwibXBhcmVuIiw5Mzg0LCJtcGFzcXVhcmUiLDEzMjI3LCJtc3NxdWFyZSIsMTMyMzUsIm1zdXBlcmlvciIsNjMyMTUsIm10dXJuZWQiLDYyMywibXUiLDE4MSwibXUxIiwxODEsIm11YXNxdWFyZSIsMTMxODYsIm11Y2hncmVhdGVyIiw4ODExLCJtdWNobGVzcyIsODgxMCwibXVmc3F1YXJlIiwxMzE5NiwibXVncmVlayIsOTU2LCJtdWdzcXVhcmUiLDEzMTk3LCJtdWhpcmFnYW5hIiwxMjQxNiwibXVrYXRha2FuYSIsMTI1MTIsIm11a2F0YWthbmFoYWxmd2lkdGgiLDY1NDI1LCJtdWxzcXVhcmUiLDEzMjA1LCJtdWx0aXBseSIsMjE1LCJtdW1zcXVhcmUiLDEzMjExLCJtdW5haGhlYnJldyIsMTQ0MywibXVuYWhsZWZ0aGVicmV3IiwxNDQzLCJtdXNpY2Fsbm90ZSIsOTgzNCwibXVzaWNhbG5vdGVkYmwiLDk4MzUsIm11c2ljZmxhdHNpZ24iLDk4MzcsIm11c2ljc2hhcnBzaWduIiw5ODM5LCJtdXNzcXVhcmUiLDEzMjM0LCJtdXZzcXVhcmUiLDEzMjM4LCJtdXdzcXVhcmUiLDEzMjQ0LCJtdm1lZ2FzcXVhcmUiLDEzMjQxLCJtdnNxdWFyZSIsMTMyMzksIm13bWVnYXNxdWFyZSIsMTMyNDcsIm13c3F1YXJlIiwxMzI0NSwibiIsMTEwLCJuYWJlbmdhbGkiLDI0NzIsIm5hYmxhIiw4NzExLCJuYWN1dGUiLDMyNCwibmFkZXZhIiwyMzQ0LCJuYWd1amFyYXRpIiwyNzI4LCJuYWd1cm11a2hpIiwyNjAwLCJuYWhpcmFnYW5hIiwxMjM5NCwibmFrYXRha2FuYSIsMTI0OTAsIm5ha2F0YWthbmFoYWxmd2lkdGgiLDY1NDEzLCJuYXBvc3Ryb3BoZSIsMzI5LCJuYXNxdWFyZSIsMTMxODUsIm5ib3BvbW9mbyIsMTI1NTUsIm5ic3BhY2UiLDE2MCwibmNhcm9uIiwzMjgsIm5jZWRpbGxhIiwzMjYsIm5jaXJjbGUiLDk0MzcsIm5jaXJjdW1mbGV4YmVsb3ciLDc3NTUsIm5jb21tYWFjY2VudCIsMzI2LCJuZG90YWNjZW50Iiw3NzQ5LCJuZG90YmVsb3ciLDc3NTEsIm5laGlyYWdhbmEiLDEyMzk3LCJuZWthdGFrYW5hIiwxMjQ5MywibmVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTYsIm5ld3NoZXFlbHNpZ24iLDgzNjIsIm5mc3F1YXJlIiwxMzE5NSwibmdhYmVuZ2FsaSIsMjQ1NywibmdhZGV2YSIsMjMyOSwibmdhZ3VqYXJhdGkiLDI3MTMsIm5nYWd1cm11a2hpIiwyNTg1LCJuZ29uZ3V0aGFpIiwzNTkxLCJuaGlyYWdhbmEiLDEyNDM1LCJuaG9va2xlZnQiLDYyNiwibmhvb2tyZXRyb2ZsZXgiLDYyNywibmlldW5hY2lyY2xla29yZWFuIiwxMjkxMSwibmlldW5hcGFyZW5rb3JlYW4iLDEyODE1LCJuaWV1bmNpZXVja29yZWFuIiwxMjU5NywibmlldW5jaXJjbGVrb3JlYW4iLDEyODk3LCJuaWV1bmhpZXVoa29yZWFuIiwxMjU5OCwibmlldW5rb3JlYW4iLDEyNTk2LCJuaWV1bnBhbnNpb3Nrb3JlYW4iLDEyNjQ4LCJuaWV1bnBhcmVua29yZWFuIiwxMjgwMSwibmlldW5zaW9za29yZWFuIiwxMjY0NywibmlldW50aWtldXRrb3JlYW4iLDEyNjQ2LCJuaWhpcmFnYW5hIiwxMjM5NSwibmlrYXRha2FuYSIsMTI0OTEsIm5pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE0LCJuaWtoYWhpdGxlZnR0aGFpIiw2MzY0MSwibmlraGFoaXR0aGFpIiwzNjYxLCJuaW5lIiw1NywibmluZWFyYWJpYyIsMTY0MSwibmluZWJlbmdhbGkiLDI1NDMsIm5pbmVjaXJjbGUiLDkzMjAsIm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEzMCwibmluZWRldmEiLDI0MTUsIm5pbmVndWphcmF0aSIsMjc5OSwibmluZWd1cm11a2hpIiwyNjcxLCJuaW5laGFja2FyYWJpYyIsMTY0MSwibmluZWhhbmd6aG91IiwxMjMyOSwibmluZWlkZW9ncmFwaGljcGFyZW4iLDEyODQwLCJuaW5laW5mZXJpb3IiLDgzMjksIm5pbmVtb25vc3BhY2UiLDY1MzA1LCJuaW5lb2xkc3R5bGUiLDYzMjg5LCJuaW5lcGFyZW4iLDkzNDAsIm5pbmVwZXJpb2QiLDkzNjAsIm5pbmVwZXJzaWFuIiwxNzg1LCJuaW5lcm9tYW4iLDg1NjgsIm5pbmVzdXBlcmlvciIsODMxMywibmluZXRlZW5jaXJjbGUiLDkzMzAsIm5pbmV0ZWVucGFyZW4iLDkzNTAsIm5pbmV0ZWVucGVyaW9kIiw5MzcwLCJuaW5ldGhhaSIsMzY3MywibmoiLDQ2MCwibmplY3lyaWxsaWMiLDExMTQsIm5rYXRha2FuYSIsMTI1MzEsIm5rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzcsIm5sZWdyaWdodGxvbmciLDQxNCwibmxpbmViZWxvdyIsNzc1Mywibm1vbm9zcGFjZSIsNjUzNTgsIm5tc3F1YXJlIiwxMzIxMCwibm5hYmVuZ2FsaSIsMjQ2Nywibm5hZGV2YSIsMjMzOSwibm5hZ3VqYXJhdGkiLDI3MjMsIm5uYWd1cm11a2hpIiwyNTk1LCJubm5hZGV2YSIsMjM0NSwibm9oaXJhZ2FuYSIsMTIzOTgsIm5va2F0YWthbmEiLDEyNDk0LCJub2thdGFrYW5haGFsZndpZHRoIiw2NTQxNywibm9uYnJlYWtpbmdzcGFjZSIsMTYwLCJub25lbnRoYWkiLDM2MDMsIm5vbnV0aGFpIiwzNjA5LCJub29uYXJhYmljIiwxNjA2LCJub29uZmluYWxhcmFiaWMiLDY1MjU0LCJub29uZ2h1bm5hYXJhYmljIiwxNzIyLCJub29uZ2h1bm5hZmluYWxhcmFiaWMiLDY0NDE1LCJub29uaW5pdGlhbGFyYWJpYyIsNjUyNTUsIm5vb25qZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MjIsIm5vb25qZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTg3LCJub29ubWVkaWFsYXJhYmljIiw2NTI1Niwibm9vbm1lZW1pbml0aWFsYXJhYmljIiw2NDcyNSwibm9vbm1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1OTAsIm5vb25ub29uZmluYWxhcmFiaWMiLDY0NjUzLCJub3Rjb250YWlucyIsODcxNiwibm90ZWxlbWVudCIsODcxMywibm90ZWxlbWVudG9mIiw4NzEzLCJub3RlcXVhbCIsODgwMCwibm90Z3JlYXRlciIsODgxNSwibm90Z3JlYXRlcm5vcmVxdWFsIiw4ODE3LCJub3RncmVhdGVybm9ybGVzcyIsODgyNSwibm90aWRlbnRpY2FsIiw4ODAyLCJub3RsZXNzIiw4ODE0LCJub3RsZXNzbm9yZXF1YWwiLDg4MTYsIm5vdHBhcmFsbGVsIiw4NzQyLCJub3RwcmVjZWRlcyIsODgzMiwibm90c3Vic2V0Iiw4ODM2LCJub3RzdWNjZWVkcyIsODgzMywibm90c3VwZXJzZXQiLDg4MzcsIm5vd2FybWVuaWFuIiwxMzk4LCJucGFyZW4iLDkzODUsIm5zc3F1YXJlIiwxMzIzMywibnN1cGVyaW9yIiw4MzE5LCJudGlsZGUiLDI0MSwibnUiLDk1NywibnVoaXJhZ2FuYSIsMTIzOTYsIm51a2F0YWthbmEiLDEyNDkyLCJudWthdGFrYW5haGFsZndpZHRoIiw2NTQxNSwibnVrdGFiZW5nYWxpIiwyNDkyLCJudWt0YWRldmEiLDIzNjQsIm51a3RhZ3VqYXJhdGkiLDI3NDgsIm51a3RhZ3VybXVraGkiLDI2MjAsIm51bWJlcnNpZ24iLDM1LCJudW1iZXJzaWdubW9ub3NwYWNlIiw2NTI4MywibnVtYmVyc2lnbnNtYWxsIiw2NTExOSwibnVtZXJhbHNpZ25ncmVlayIsODg0LCJudW1lcmFsc2lnbmxvd2VyZ3JlZWsiLDg4NSwibnVtZXJvIiw4NDcwLCJudW4iLDE1MDQsIm51bmRhZ2VzaCIsNjQzMjAsIm51bmRhZ2VzaGhlYnJldyIsNjQzMjAsIm51bmhlYnJldyIsMTUwNCwibnZzcXVhcmUiLDEzMjM3LCJud3NxdWFyZSIsMTMyNDMsIm55YWJlbmdhbGkiLDI0NjIsIm55YWRldmEiLDIzMzQsIm55YWd1amFyYXRpIiwyNzE4LCJueWFndXJtdWtoaSIsMjU5MCwibyIsMTExLCJvYWN1dGUiLDI0Mywib2FuZ3RoYWkiLDM2MjksIm9iYXJyZWQiLDYyOSwib2JhcnJlZGN5cmlsbGljIiwxMjU3LCJvYmFycmVkZGllcmVzaXNjeXJpbGxpYyIsMTI1OSwib2JlbmdhbGkiLDI0NTEsIm9ib3BvbW9mbyIsMTI1NzEsIm9icmV2ZSIsMzM1LCJvY2FuZHJhZGV2YSIsMjMyMSwib2NhbmRyYWd1amFyYXRpIiwyNzA1LCJvY2FuZHJhdm93ZWxzaWduZGV2YSIsMjM3Nywib2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzYxLCJvY2Fyb24iLDQ2Niwib2NpcmNsZSIsOTQzOCwib2NpcmN1bWZsZXgiLDI0NCwib2NpcmN1bWZsZXhhY3V0ZSIsNzg4OSwib2NpcmN1bWZsZXhkb3RiZWxvdyIsNzg5Nywib2NpcmN1bWZsZXhncmF2ZSIsNzg5MSwib2NpcmN1bWZsZXhob29rYWJvdmUiLDc4OTMsIm9jaXJjdW1mbGV4dGlsZGUiLDc4OTUsIm9jeXJpbGxpYyIsMTA4Niwib2RibGFjdXRlIiwzMzcsIm9kYmxncmF2ZSIsNTI1LCJvZGV2YSIsMjMyMywib2RpZXJlc2lzIiwyNDYsIm9kaWVyZXNpc2N5cmlsbGljIiwxMjU1LCJvZG90YmVsb3ciLDc4ODUsIm9lIiwzMzksIm9la29yZWFuIiwxMjYzNCwib2dvbmVrIiw3MzEsIm9nb25la2NtYiIsODA4LCJvZ3JhdmUiLDI0Miwib2d1amFyYXRpIiwyNzA3LCJvaGFybWVuaWFuIiwxNDEzLCJvaGlyYWdhbmEiLDEyMzYyLCJvaG9va2Fib3ZlIiw3ODg3LCJvaG9ybiIsNDE3LCJvaG9ybmFjdXRlIiw3ODk5LCJvaG9ybmRvdGJlbG93Iiw3OTA3LCJvaG9ybmdyYXZlIiw3OTAxLCJvaG9ybmhvb2thYm92ZSIsNzkwMywib2hvcm50aWxkZSIsNzkwNSwib2h1bmdhcnVtbGF1dCIsMzM3LCJvaSIsNDE5LCJvaW52ZXJ0ZWRicmV2ZSIsNTI3LCJva2F0YWthbmEiLDEyNDU4LCJva2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk3LCJva29yZWFuIiwxMjYzMSwib2xlaGVicmV3IiwxNDUxLCJvbWFjcm9uIiwzMzMsIm9tYWNyb25hY3V0ZSIsNzc2Mywib21hY3JvbmdyYXZlIiw3NzYxLCJvbWRldmEiLDIzODQsIm9tZWdhIiw5NjksIm9tZWdhMSIsOTgyLCJvbWVnYWN5cmlsbGljIiwxMTIxLCJvbWVnYWxhdGluY2xvc2VkIiw2MzEsIm9tZWdhcm91bmRjeXJpbGxpYyIsMTE0Nywib21lZ2F0aXRsb2N5cmlsbGljIiwxMTQ5LCJvbWVnYXRvbm9zIiw5NzQsIm9tZ3VqYXJhdGkiLDI3NjgsIm9taWNyb24iLDk1OSwib21pY3JvbnRvbm9zIiw5NzIsIm9tb25vc3BhY2UiLDY1MzU5LCJvbmUiLDQ5LCJvbmVhcmFiaWMiLDE2MzMsIm9uZWJlbmdhbGkiLDI1MzUsIm9uZWNpcmNsZSIsOTMxMiwib25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiIsMTAxMjIsIm9uZWRldmEiLDI0MDcsIm9uZWRvdGVubGVhZGVyIiw4MjI4LCJvbmVlaWdodGgiLDg1MzksIm9uZWZpdHRlZCIsNjMxOTYsIm9uZWd1amFyYXRpIiwyNzkxLCJvbmVndXJtdWtoaSIsMjY2Mywib25laGFja2FyYWJpYyIsMTYzMywib25laGFsZiIsMTg5LCJvbmVoYW5nemhvdSIsMTIzMjEsIm9uZWlkZW9ncmFwaGljcGFyZW4iLDEyODMyLCJvbmVpbmZlcmlvciIsODMyMSwib25lbW9ub3NwYWNlIiw2NTI5Nywib25lbnVtZXJhdG9yYmVuZ2FsaSIsMjU0OCwib25lb2xkc3R5bGUiLDYzMjgxLCJvbmVwYXJlbiIsOTMzMiwib25lcGVyaW9kIiw5MzUyLCJvbmVwZXJzaWFuIiwxNzc3LCJvbmVxdWFydGVyIiwxODgsIm9uZXJvbWFuIiw4NTYwLCJvbmVzdXBlcmlvciIsMTg1LCJvbmV0aGFpIiwzNjY1LCJvbmV0aGlyZCIsODUzMSwib29nb25layIsNDkxLCJvb2dvbmVrbWFjcm9uIiw0OTMsIm9vZ3VybXVraGkiLDI1NzksIm9vbWF0cmFndXJtdWtoaSIsMjYzNSwib29wZW4iLDU5Niwib3BhcmVuIiw5Mzg2LCJvcGVuYnVsbGV0Iiw5NzAyLCJvcHRpb24iLDg5OTcsIm9yZGZlbWluaW5lIiwxNzAsIm9yZG1hc2N1bGluZSIsMTg2LCJvcnRob2dvbmFsIiw4NzM1LCJvc2hvcnRkZXZhIiwyMzIyLCJvc2hvcnR2b3dlbHNpZ25kZXZhIiwyMzc4LCJvc2xhc2giLDI0OCwib3NsYXNoYWN1dGUiLDUxMSwib3NtYWxsaGlyYWdhbmEiLDEyMzYxLCJvc21hbGxrYXRha2FuYSIsMTI0NTcsIm9zbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4Nywib3N0cm9rZWFjdXRlIiw1MTEsIm9zdXBlcmlvciIsNjMyMTYsIm90Y3lyaWxsaWMiLDExNTEsIm90aWxkZSIsMjQ1LCJvdGlsZGVhY3V0ZSIsNzc1Nywib3RpbGRlZGllcmVzaXMiLDc3NTksIm91Ym9wb21vZm8iLDEyNTc3LCJvdmVybGluZSIsODI1NCwib3ZlcmxpbmVjZW50ZXJsaW5lIiw2NTA5OCwib3ZlcmxpbmVjbWIiLDc3Mywib3ZlcmxpbmVkYXNoZWQiLDY1MDk3LCJvdmVybGluZWRibHdhdnkiLDY1MTAwLCJvdmVybGluZXdhdnkiLDY1MDk5LCJvdmVyc2NvcmUiLDE3NSwib3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MDcsIm92b3dlbHNpZ25kZXZhIiwyMzc5LCJvdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjMsInAiLDExMiwicGFhbXBzc3F1YXJlIiwxMzE4NCwicGFhc2VudG9zcXVhcmUiLDEzMDk5LCJwYWJlbmdhbGkiLDI0NzQsInBhY3V0ZSIsNzc2NSwicGFkZXZhIiwyMzQ2LCJwYWdlZG93biIsODY3MSwicGFnZXVwIiw4NjcwLCJwYWd1amFyYXRpIiwyNzMwLCJwYWd1cm11a2hpIiwyNjAyLCJwYWhpcmFnYW5hIiwxMjQwMSwicGFpeWFubm9pdGhhaSIsMzYzMSwicGFrYXRha2FuYSIsMTI0OTcsInBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWIiLDExNTYsInBhbG9jaGthY3lyaWxsaWMiLDEyMTYsInBhbnNpb3Nrb3JlYW4iLDEyNjcxLCJwYXJhZ3JhcGgiLDE4MiwicGFyYWxsZWwiLDg3NDEsInBhcmVubGVmdCIsNDAsInBhcmVubGVmdGFsdG9uZWFyYWJpYyIsNjQ4MzAsInBhcmVubGVmdGJ0Iiw2MzcyNSwicGFyZW5sZWZ0ZXgiLDYzNzI0LCJwYXJlbmxlZnRpbmZlcmlvciIsODMzMywicGFyZW5sZWZ0bW9ub3NwYWNlIiw2NTI4OCwicGFyZW5sZWZ0c21hbGwiLDY1MTEzLCJwYXJlbmxlZnRzdXBlcmlvciIsODMxNywicGFyZW5sZWZ0dHAiLDYzNzIzLCJwYXJlbmxlZnR2ZXJ0aWNhbCIsNjUwNzcsInBhcmVucmlnaHQiLDQxLCJwYXJlbnJpZ2h0YWx0b25lYXJhYmljIiw2NDgzMSwicGFyZW5yaWdodGJ0Iiw2MzczNiwicGFyZW5yaWdodGV4Iiw2MzczNSwicGFyZW5yaWdodGluZmVyaW9yIiw4MzM0LCJwYXJlbnJpZ2h0bW9ub3NwYWNlIiw2NTI4OSwicGFyZW5yaWdodHNtYWxsIiw2NTExNCwicGFyZW5yaWdodHN1cGVyaW9yIiw4MzE4LCJwYXJlbnJpZ2h0dHAiLDYzNzM0LCJwYXJlbnJpZ2h0dmVydGljYWwiLDY1MDc4LCJwYXJ0aWFsZGlmZiIsODcwNiwicGFzZXFoZWJyZXciLDE0NzIsInBhc2h0YWhlYnJldyIsMTQzMywicGFzcXVhcmUiLDEzMjI1LCJwYXRhaCIsMTQ2MywicGF0YWgxMSIsMTQ2MywicGF0YWgxZCIsMTQ2MywicGF0YWgyYSIsMTQ2MywicGF0YWhoZWJyZXciLDE0NjMsInBhdGFobmFycm93aGVicmV3IiwxNDYzLCJwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NjMsInBhdGFod2lkZWhlYnJldyIsMTQ2MywicGF6ZXJoZWJyZXciLDE0NDEsInBib3BvbW9mbyIsMTI1NTAsInBjaXJjbGUiLDk0MzksInBkb3RhY2NlbnQiLDc3NjcsInBlIiwxNTA4LCJwZWN5cmlsbGljIiwxMDg3LCJwZWRhZ2VzaCIsNjQzMjQsInBlZGFnZXNoaGVicmV3Iiw2NDMyNCwicGVlemlzcXVhcmUiLDEzMTE1LCJwZWZpbmFsZGFnZXNoaGVicmV3Iiw2NDMyMywicGVoYXJhYmljIiwxNjYyLCJwZWhhcm1lbmlhbiIsMTQwMiwicGVoZWJyZXciLDE1MDgsInBlaGZpbmFsYXJhYmljIiw2NDM0MywicGVoaW5pdGlhbGFyYWJpYyIsNjQzNDQsInBlaGlyYWdhbmEiLDEyNDEwLCJwZWhtZWRpYWxhcmFiaWMiLDY0MzQ1LCJwZWthdGFrYW5hIiwxMjUwNiwicGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTEsInBlcmFmZWhlYnJldyIsNjQzMzQsInBlcmNlbnQiLDM3LCJwZXJjZW50YXJhYmljIiwxNjQyLCJwZXJjZW50bW9ub3NwYWNlIiw2NTI4NSwicGVyY2VudHNtYWxsIiw2NTEzMCwicGVyaW9kIiw0NiwicGVyaW9kYXJtZW5pYW4iLDE0MTcsInBlcmlvZGNlbnRlcmVkIiwxODMsInBlcmlvZGhhbGZ3aWR0aCIsNjUzNzcsInBlcmlvZGluZmVyaW9yIiw2MzIwNywicGVyaW9kbW9ub3NwYWNlIiw2NTI5NCwicGVyaW9kc21hbGwiLDY1MTA2LCJwZXJpb2RzdXBlcmlvciIsNjMyMDgsInBlcmlzcG9tZW5pZ3JlZWtjbWIiLDgzNCwicGVycGVuZGljdWxhciIsODg2OSwicGVydGhvdXNhbmQiLDgyNDAsInBlc2V0YSIsODM1OSwicGZzcXVhcmUiLDEzMTk0LCJwaGFiZW5nYWxpIiwyNDc1LCJwaGFkZXZhIiwyMzQ3LCJwaGFndWphcmF0aSIsMjczMSwicGhhZ3VybXVraGkiLDI2MDMsInBoaSIsOTY2LCJwaGkxIiw5ODEsInBoaWV1cGhhY2lyY2xla29yZWFuIiwxMjkyMiwicGhpZXVwaGFwYXJlbmtvcmVhbiIsMTI4MjYsInBoaWV1cGhjaXJjbGVrb3JlYW4iLDEyOTA4LCJwaGlldXBoa29yZWFuIiwxMjYyMSwicGhpZXVwaHBhcmVua29yZWFuIiwxMjgxMiwicGhpbGF0aW4iLDYzMiwicGhpbnRodXRoYWkiLDM2NDIsInBoaXN5bWJvbGdyZWVrIiw5ODEsInBob29rIiw0MjEsInBob3BoYW50aGFpIiwzNjE0LCJwaG9waHVuZ3RoYWkiLDM2MTIsInBob3NhbXBoYW90aGFpIiwzNjE2LCJwaSIsOTYwLCJwaWV1cGFjaXJjbGVrb3JlYW4iLDEyOTE1LCJwaWV1cGFwYXJlbmtvcmVhbiIsMTI4MTksInBpZXVwY2lldWNrb3JlYW4iLDEyNjYyLCJwaWV1cGNpcmNsZWtvcmVhbiIsMTI5MDEsInBpZXVwa2l5ZW9ra29yZWFuIiwxMjY1OCwicGlldXBrb3JlYW4iLDEyNjEwLCJwaWV1cHBhcmVua29yZWFuIiwxMjgwNSwicGlldXBzaW9za2l5ZW9ra29yZWFuIiwxMjY2MCwicGlldXBzaW9za29yZWFuIiwxMjYxMiwicGlldXBzaW9zdGlrZXV0a29yZWFuIiwxMjY2MSwicGlldXB0aGlldXRoa29yZWFuIiwxMjY2MywicGlldXB0aWtldXRrb3JlYW4iLDEyNjU5LCJwaWhpcmFnYW5hIiwxMjQwNCwicGlrYXRha2FuYSIsMTI1MDAsInBpc3ltYm9sZ3JlZWsiLDk4MiwicGl3cmFybWVuaWFuIiwxNDExLCJwbHVzIiw0MywicGx1c2JlbG93Y21iIiw3OTksInBsdXNjaXJjbGUiLDg4NTMsInBsdXNtaW51cyIsMTc3LCJwbHVzbW9kIiw3MjYsInBsdXNtb25vc3BhY2UiLDY1MjkxLCJwbHVzc21hbGwiLDY1MTIyLCJwbHVzc3VwZXJpb3IiLDgzMTQsInBtb25vc3BhY2UiLDY1MzYwLCJwbXNxdWFyZSIsMTMyNzIsInBvaGlyYWdhbmEiLDEyNDEzLCJwb2ludGluZ2luZGV4ZG93bndoaXRlIiw5NzU5LCJwb2ludGluZ2luZGV4bGVmdHdoaXRlIiw5NzU2LCJwb2ludGluZ2luZGV4cmlnaHR3aGl0ZSIsOTc1OCwicG9pbnRpbmdpbmRleHVwd2hpdGUiLDk3NTcsInBva2F0YWthbmEiLDEyNTA5LCJwb3BsYXRoYWkiLDM2MTEsInBvc3RhbG1hcmsiLDEyMzA2LCJwb3N0YWxtYXJrZmFjZSIsMTIzMjAsInBwYXJlbiIsOTM4NywicHJlY2VkZXMiLDg4MjYsInByZXNjcmlwdGlvbiIsODQ3OCwicHJpbWVtb2QiLDY5NywicHJpbWVyZXZlcnNlZCIsODI0NSwicHJvZHVjdCIsODcxOSwicHJvamVjdGl2ZSIsODk2NSwicHJvbG9uZ2Vka2FuYSIsMTI1NDAsInByb3BlbGxvciIsODk4NCwicHJvcGVyc3Vic2V0Iiw4ODM0LCJwcm9wZXJzdXBlcnNldCIsODgzNSwicHJvcG9ydGlvbiIsODc1OSwicHJvcG9ydGlvbmFsIiw4NzMzLCJwc2kiLDk2OCwicHNpY3lyaWxsaWMiLDExMzcsInBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1OCwicHNzcXVhcmUiLDEzMjMyLCJwdWhpcmFnYW5hIiwxMjQwNywicHVrYXRha2FuYSIsMTI1MDMsInB2c3F1YXJlIiwxMzIzNiwicHdzcXVhcmUiLDEzMjQyLCJxIiwxMTMsInFhZGV2YSIsMjM5MiwicWFkbWFoZWJyZXciLDE0NDgsInFhZmFyYWJpYyIsMTYwMiwicWFmZmluYWxhcmFiaWMiLDY1MjM4LCJxYWZpbml0aWFsYXJhYmljIiw2NTIzOSwicWFmbWVkaWFsYXJhYmljIiw2NTI0MCwicWFtYXRzIiwxNDY0LCJxYW1hdHMxMCIsMTQ2NCwicWFtYXRzMWEiLDE0NjQsInFhbWF0czFjIiwxNDY0LCJxYW1hdHMyNyIsMTQ2NCwicWFtYXRzMjkiLDE0NjQsInFhbWF0czMzIiwxNDY0LCJxYW1hdHNkZSIsMTQ2NCwicWFtYXRzaGVicmV3IiwxNDY0LCJxYW1hdHNuYXJyb3doZWJyZXciLDE0NjQsInFhbWF0c3FhdGFuaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbm5hcnJvd2hlYnJldyIsMTQ2NCwicWFtYXRzcWF0YW5xdWFydGVyaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbndpZGVoZWJyZXciLDE0NjQsInFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NjQsInFhbWF0c3dpZGVoZWJyZXciLDE0NjQsInFhcm5leXBhcmFoZWJyZXciLDE0MzksInFib3BvbW9mbyIsMTI1NjEsInFjaXJjbGUiLDk0NDAsInFob29rIiw2NzIsInFtb25vc3BhY2UiLDY1MzYxLCJxb2YiLDE1MTEsInFvZmRhZ2VzaCIsNjQzMjcsInFvZmRhZ2VzaGhlYnJldyIsNjQzMjcsInFvZmhlYnJldyIsMTUxMSwicXBhcmVuIiw5Mzg4LCJxdWFydGVybm90ZSIsOTgzMywicXVidXRzIiwxNDY3LCJxdWJ1dHMxOCIsMTQ2NywicXVidXRzMjUiLDE0NjcsInF1YnV0czMxIiwxNDY3LCJxdWJ1dHNoZWJyZXciLDE0NjcsInF1YnV0c25hcnJvd2hlYnJldyIsMTQ2NywicXVidXRzcXVhcnRlcmhlYnJldyIsMTQ2NywicXVidXRzd2lkZWhlYnJldyIsMTQ2NywicXVlc3Rpb24iLDYzLCJxdWVzdGlvbmFyYWJpYyIsMTU2NywicXVlc3Rpb25hcm1lbmlhbiIsMTM3NCwicXVlc3Rpb25kb3duIiwxOTEsInF1ZXN0aW9uZG93bnNtYWxsIiw2MzQyMywicXVlc3Rpb25ncmVlayIsODk0LCJxdWVzdGlvbm1vbm9zcGFjZSIsNjUzMTEsInF1ZXN0aW9uc21hbGwiLDYzMjk1LCJxdW90ZWRibCIsMzQsInF1b3RlZGJsYmFzZSIsODIyMiwicXVvdGVkYmxsZWZ0Iiw4MjIwLCJxdW90ZWRibG1vbm9zcGFjZSIsNjUyODIsInF1b3RlZGJscHJpbWUiLDEyMzE4LCJxdW90ZWRibHByaW1lcmV2ZXJzZWQiLDEyMzE3LCJxdW90ZWRibHJpZ2h0Iiw4MjIxLCJxdW90ZWxlZnQiLDgyMTYsInF1b3RlbGVmdHJldmVyc2VkIiw4MjE5LCJxdW90ZXJldmVyc2VkIiw4MjE5LCJxdW90ZXJpZ2h0Iiw4MjE3LCJxdW90ZXJpZ2h0biIsMzI5LCJxdW90ZXNpbmdsYmFzZSIsODIxOCwicXVvdGVzaW5nbGUiLDM5LCJxdW90ZXNpbmdsZW1vbm9zcGFjZSIsNjUyODcsInIiLDExNCwicmFhcm1lbmlhbiIsMTQwNCwicmFiZW5nYWxpIiwyNDgwLCJyYWN1dGUiLDM0MSwicmFkZXZhIiwyMzUyLCJyYWRpY2FsIiw4NzMwLCJyYWRpY2FsZXgiLDYzNzE3LCJyYWRvdmVyc3NxdWFyZSIsMTMyMzAsInJhZG92ZXJzc3F1YXJlZHNxdWFyZSIsMTMyMzEsInJhZHNxdWFyZSIsMTMyMjksInJhZmUiLDE0NzEsInJhZmVoZWJyZXciLDE0NzEsInJhZ3VqYXJhdGkiLDI3MzYsInJhZ3VybXVraGkiLDI2MDgsInJhaGlyYWdhbmEiLDEyNDI1LCJyYWthdGFrYW5hIiwxMjUyMSwicmFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzEsInJhbG93ZXJkaWFnb25hbGJlbmdhbGkiLDI1NDUsInJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpIiwyNTQ0LCJyYW1zaG9ybiIsNjEyLCJyYXRpbyIsODc1OCwicmJvcG9tb2ZvIiwxMjU2NiwicmNhcm9uIiwzNDUsInJjZWRpbGxhIiwzNDMsInJjaXJjbGUiLDk0NDEsInJjb21tYWFjY2VudCIsMzQzLCJyZGJsZ3JhdmUiLDUyOSwicmRvdGFjY2VudCIsNzc2OSwicmRvdGJlbG93Iiw3NzcxLCJyZG90YmVsb3dtYWNyb24iLDc3NzMsInJlZmVyZW5jZW1hcmsiLDgyNTEsInJlZmxleHN1YnNldCIsODgzOCwicmVmbGV4c3VwZXJzZXQiLDg4MzksInJlZ2lzdGVyZWQiLDE3NCwicmVnaXN0ZXJzYW5zIiw2MzcyMCwicmVnaXN0ZXJzZXJpZiIsNjMxOTQsInJlaGFyYWJpYyIsMTU4NSwicmVoYXJtZW5pYW4iLDE0MDgsInJlaGZpbmFsYXJhYmljIiw2NTE5OCwicmVoaXJhZ2FuYSIsMTI0MjgsInJla2F0YWthbmEiLDEyNTI0LCJyZWthdGFrYW5haGFsZndpZHRoIiw2NTQzNCwicmVzaCIsMTUxMiwicmVzaGRhZ2VzaGhlYnJldyIsNjQzMjgsInJlc2hoZWJyZXciLDE1MTIsInJldmVyc2VkdGlsZGUiLDg3NjUsInJldmlhaGVicmV3IiwxNDMxLCJyZXZpYW11Z3Jhc2hoZWJyZXciLDE0MzEsInJldmxvZ2ljYWxub3QiLDg5NzYsInJmaXNoaG9vayIsNjM4LCJyZmlzaGhvb2tyZXZlcnNlZCIsNjM5LCJyaGFiZW5nYWxpIiwyNTI1LCJyaGFkZXZhIiwyMzk3LCJyaG8iLDk2MSwicmhvb2siLDYzNywicmhvb2t0dXJuZWQiLDYzNSwicmhvb2t0dXJuZWRzdXBlcmlvciIsNjkzLCJyaG9zeW1ib2xncmVlayIsMTAwOSwicmhvdGljaG9va21vZCIsNzM0LCJyaWV1bGFjaXJjbGVrb3JlYW4iLDEyOTEzLCJyaWV1bGFwYXJlbmtvcmVhbiIsMTI4MTcsInJpZXVsY2lyY2xla29yZWFuIiwxMjg5OSwicmlldWxoaWV1aGtvcmVhbiIsMTI2MDgsInJpZXVsa2l5ZW9ra29yZWFuIiwxMjYwMiwicmlldWxraXllb2tzaW9za29yZWFuIiwxMjY0OSwicmlldWxrb3JlYW4iLDEyNjAxLCJyaWV1bG1pZXVta29yZWFuIiwxMjYwMywicmlldWxwYW5zaW9za29yZWFuIiwxMjY1MiwicmlldWxwYXJlbmtvcmVhbiIsMTI4MDMsInJpZXVscGhpZXVwaGtvcmVhbiIsMTI2MDcsInJpZXVscGlldXBrb3JlYW4iLDEyNjA0LCJyaWV1bHBpZXVwc2lvc2tvcmVhbiIsMTI2NTEsInJpZXVsc2lvc2tvcmVhbiIsMTI2MDUsInJpZXVsdGhpZXV0aGtvcmVhbiIsMTI2MDYsInJpZXVsdGlrZXV0a29yZWFuIiwxMjY1MCwicmlldWx5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NTMsInJpZ2h0YW5nbGUiLDg3MzUsInJpZ2h0dGFja2JlbG93Y21iIiw3OTMsInJpZ2h0dHJpYW5nbGUiLDg4OTUsInJpaGlyYWdhbmEiLDEyNDI2LCJyaWthdGFrYW5hIiwxMjUyMiwicmlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzIsInJpbmciLDczMCwicmluZ2JlbG93Y21iIiw4MDUsInJpbmdjbWIiLDc3OCwicmluZ2hhbGZsZWZ0Iiw3MDMsInJpbmdoYWxmbGVmdGFybWVuaWFuIiwxMzY5LCJyaW5naGFsZmxlZnRiZWxvd2NtYiIsNzk2LCJyaW5naGFsZmxlZnRjZW50ZXJlZCIsNzIzLCJyaW5naGFsZnJpZ2h0Iiw3MDIsInJpbmdoYWxmcmlnaHRiZWxvd2NtYiIsODI1LCJyaW5naGFsZnJpZ2h0Y2VudGVyZWQiLDcyMiwicmludmVydGVkYnJldmUiLDUzMSwicml0dG9ydXNxdWFyZSIsMTMxMzcsInJsaW5lYmVsb3ciLDc3NzUsInJsb25nbGVnIiw2MzYsInJsb25nbGVndHVybmVkIiw2MzQsInJtb25vc3BhY2UiLDY1MzYyLCJyb2hpcmFnYW5hIiwxMjQyOSwicm9rYXRha2FuYSIsMTI1MjUsInJva2F0YWthbmFoYWxmd2lkdGgiLDY1NDM1LCJyb3J1YXRoYWkiLDM2MTksInJwYXJlbiIsOTM4OSwicnJhYmVuZ2FsaSIsMjUyNCwicnJhZGV2YSIsMjM1MywicnJhZ3VybXVraGkiLDI2NTIsInJyZWhhcmFiaWMiLDE2ODEsInJyZWhmaW5hbGFyYWJpYyIsNjQzOTcsInJydm9jYWxpY2JlbmdhbGkiLDI1MjgsInJydm9jYWxpY2RldmEiLDI0MDAsInJydm9jYWxpY2d1amFyYXRpIiwyNzg0LCJycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNTAwLCJycnZvY2FsaWN2b3dlbHNpZ25kZXZhIiwyMzcyLCJycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aSIsMjc1NiwicnN1cGVyaW9yIiw2MzIxNywicnRibG9jayIsOTYxNiwicnR1cm5lZCIsNjMzLCJydHVybmVkc3VwZXJpb3IiLDY5MiwicnVoaXJhZ2FuYSIsMTI0MjcsInJ1a2F0YWthbmEiLDEyNTIzLCJydWthdGFrYW5haGFsZndpZHRoIiw2NTQzMywicnVwZWVtYXJrYmVuZ2FsaSIsMjU0NiwicnVwZWVzaWduYmVuZ2FsaSIsMjU0NywicnVwaWFoIiw2MzE5NywicnV0aGFpIiwzNjIwLCJydm9jYWxpY2JlbmdhbGkiLDI0NDMsInJ2b2NhbGljZGV2YSIsMjMxNSwicnZvY2FsaWNndWphcmF0aSIsMjY5OSwicnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNDk5LCJydm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDIzNzEsInJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTUsInMiLDExNSwic2FiZW5nYWxpIiwyNDg4LCJzYWN1dGUiLDM0Nywic2FjdXRlZG90YWNjZW50Iiw3NzgxLCJzYWRhcmFiaWMiLDE1ODksInNhZGV2YSIsMjM2MCwic2FkZmluYWxhcmFiaWMiLDY1MjEwLCJzYWRpbml0aWFsYXJhYmljIiw2NTIxMSwic2FkbWVkaWFsYXJhYmljIiw2NTIxMiwic2FndWphcmF0aSIsMjc0NCwic2FndXJtdWtoaSIsMjYxNiwic2FoaXJhZ2FuYSIsMTIzNzMsInNha2F0YWthbmEiLDEyNDY5LCJzYWthdGFrYW5haGFsZndpZHRoIiw2NTQwMywic2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYyIsNjUwMTgsInNhbWVraCIsMTUwNSwic2FtZWtoZGFnZXNoIiw2NDMyMSwic2FtZWtoZGFnZXNoaGVicmV3Iiw2NDMyMSwic2FtZWtoaGVicmV3IiwxNTA1LCJzYXJhYWF0aGFpIiwzNjM0LCJzYXJhYWV0aGFpIiwzNjQ5LCJzYXJhYWltYWltYWxhaXRoYWkiLDM2NTIsInNhcmFhaW1haW11YW50aGFpIiwzNjUxLCJzYXJhYW10aGFpIiwzNjM1LCJzYXJhYXRoYWkiLDM2MzIsInNhcmFldGhhaSIsMzY0OCwic2FyYWlpbGVmdHRoYWkiLDYzNjIyLCJzYXJhaWl0aGFpIiwzNjM3LCJzYXJhaWxlZnR0aGFpIiw2MzYyMSwic2FyYWl0aGFpIiwzNjM2LCJzYXJhb3RoYWkiLDM2NTAsInNhcmF1ZWVsZWZ0dGhhaSIsNjM2MjQsInNhcmF1ZWV0aGFpIiwzNjM5LCJzYXJhdWVsZWZ0dGhhaSIsNjM2MjMsInNhcmF1ZXRoYWkiLDM2MzgsInNhcmF1dGhhaSIsMzY0MCwic2FyYXV1dGhhaSIsMzY0MSwic2JvcG9tb2ZvIiwxMjU2OSwic2Nhcm9uIiwzNTMsInNjYXJvbmRvdGFjY2VudCIsNzc4Mywic2NlZGlsbGEiLDM1MSwic2Nod2EiLDYwMSwic2Nod2FjeXJpbGxpYyIsMTI0MSwic2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQzLCJzY2h3YWhvb2siLDYwMiwic2NpcmNsZSIsOTQ0Miwic2NpcmN1bWZsZXgiLDM0OSwic2NvbW1hYWNjZW50Iiw1MzcsInNkb3RhY2NlbnQiLDc3NzcsInNkb3RiZWxvdyIsNzc3OSwic2RvdGJlbG93ZG90YWNjZW50Iiw3Nzg1LCJzZWFndWxsYmVsb3djbWIiLDgyOCwic2Vjb25kIiw4MjQzLCJzZWNvbmR0b25lY2hpbmVzZSIsNzE0LCJzZWN0aW9uIiwxNjcsInNlZW5hcmFiaWMiLDE1ODcsInNlZW5maW5hbGFyYWJpYyIsNjUyMDIsInNlZW5pbml0aWFsYXJhYmljIiw2NTIwMywic2Vlbm1lZGlhbGFyYWJpYyIsNjUyMDQsInNlZ29sIiwxNDYyLCJzZWdvbDEzIiwxNDYyLCJzZWdvbDFmIiwxNDYyLCJzZWdvbDJjIiwxNDYyLCJzZWdvbGhlYnJldyIsMTQ2Miwic2Vnb2xuYXJyb3doZWJyZXciLDE0NjIsInNlZ29scXVhcnRlcmhlYnJldyIsMTQ2Miwic2Vnb2x0YWhlYnJldyIsMTQyNiwic2Vnb2x3aWRlaGVicmV3IiwxNDYyLCJzZWhhcm1lbmlhbiIsMTQwNSwic2VoaXJhZ2FuYSIsMTIzNzksInNla2F0YWthbmEiLDEyNDc1LCJzZWthdGFrYW5haGFsZndpZHRoIiw2NTQwNiwic2VtaWNvbG9uIiw1OSwic2VtaWNvbG9uYXJhYmljIiwxNTYzLCJzZW1pY29sb25tb25vc3BhY2UiLDY1MzA3LCJzZW1pY29sb25zbWFsbCIsNjUxMDgsInNlbWl2b2ljZWRtYXJra2FuYSIsMTI0NDQsInNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aCIsNjU0MzksInNlbnRpc3F1YXJlIiwxMzA5MCwic2VudG9zcXVhcmUiLDEzMDkxLCJzZXZlbiIsNTUsInNldmVuYXJhYmljIiwxNjM5LCJzZXZlbmJlbmdhbGkiLDI1NDEsInNldmVuY2lyY2xlIiw5MzE4LCJzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI4LCJzZXZlbmRldmEiLDI0MTMsInNldmVuZWlnaHRocyIsODU0Miwic2V2ZW5ndWphcmF0aSIsMjc5Nywic2V2ZW5ndXJtdWtoaSIsMjY2OSwic2V2ZW5oYWNrYXJhYmljIiwxNjM5LCJzZXZlbmhhbmd6aG91IiwxMjMyNywic2V2ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOCwic2V2ZW5pbmZlcmlvciIsODMyNywic2V2ZW5tb25vc3BhY2UiLDY1MzAzLCJzZXZlbm9sZHN0eWxlIiw2MzI4Nywic2V2ZW5wYXJlbiIsOTMzOCwic2V2ZW5wZXJpb2QiLDkzNTgsInNldmVucGVyc2lhbiIsMTc4Mywic2V2ZW5yb21hbiIsODU2Niwic2V2ZW5zdXBlcmlvciIsODMxMSwic2V2ZW50ZWVuY2lyY2xlIiw5MzI4LCJzZXZlbnRlZW5wYXJlbiIsOTM0OCwic2V2ZW50ZWVucGVyaW9kIiw5MzY4LCJzZXZlbnRoYWkiLDM2NzEsInNmdGh5cGhlbiIsMTczLCJzaGFhcm1lbmlhbiIsMTM5OSwic2hhYmVuZ2FsaSIsMjQ4Niwic2hhY3lyaWxsaWMiLDEwOTYsInNoYWRkYWFyYWJpYyIsMTYxNywic2hhZGRhZGFtbWFhcmFiaWMiLDY0NjA5LCJzaGFkZGFkYW1tYXRhbmFyYWJpYyIsNjQ2MDYsInNoYWRkYWZhdGhhYXJhYmljIiw2NDYwOCwic2hhZGRha2FzcmFhcmFiaWMiLDY0NjEwLCJzaGFkZGFrYXNyYXRhbmFyYWJpYyIsNjQ2MDcsInNoYWRlIiw5NjE4LCJzaGFkZWRhcmsiLDk2MTksInNoYWRlbGlnaHQiLDk2MTcsInNoYWRlbWVkaXVtIiw5NjE4LCJzaGFkZXZhIiwyMzU4LCJzaGFndWphcmF0aSIsMjc0Miwic2hhZ3VybXVraGkiLDI2MTQsInNoYWxzaGVsZXRoZWJyZXciLDE0MjcsInNoYm9wb21vZm8iLDEyNTY1LCJzaGNoYWN5cmlsbGljIiwxMDk3LCJzaGVlbmFyYWJpYyIsMTU4OCwic2hlZW5maW5hbGFyYWJpYyIsNjUyMDYsInNoZWVuaW5pdGlhbGFyYWJpYyIsNjUyMDcsInNoZWVubWVkaWFsYXJhYmljIiw2NTIwOCwic2hlaWNvcHRpYyIsOTk1LCJzaGVxZWwiLDgzNjIsInNoZXFlbGhlYnJldyIsODM2Miwic2hldmEiLDE0NTYsInNoZXZhMTE1IiwxNDU2LCJzaGV2YTE1IiwxNDU2LCJzaGV2YTIyIiwxNDU2LCJzaGV2YTJlIiwxNDU2LCJzaGV2YWhlYnJldyIsMTQ1Niwic2hldmFuYXJyb3doZWJyZXciLDE0NTYsInNoZXZhcXVhcnRlcmhlYnJldyIsMTQ1Niwic2hldmF3aWRlaGVicmV3IiwxNDU2LCJzaGhhY3lyaWxsaWMiLDEyMTEsInNoaW1hY29wdGljIiwxMDA1LCJzaGluIiwxNTEzLCJzaGluZGFnZXNoIiw2NDMyOSwic2hpbmRhZ2VzaGhlYnJldyIsNjQzMjksInNoaW5kYWdlc2hzaGluZG90Iiw2NDMwMCwic2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXciLDY0MzAwLCJzaGluZGFnZXNoc2luZG90Iiw2NDMwMSwic2hpbmRhZ2VzaHNpbmRvdGhlYnJldyIsNjQzMDEsInNoaW5kb3RoZWJyZXciLDE0NzMsInNoaW5oZWJyZXciLDE1MTMsInNoaW5zaGluZG90Iiw2NDI5OCwic2hpbnNoaW5kb3RoZWJyZXciLDY0Mjk4LCJzaGluc2luZG90Iiw2NDI5OSwic2hpbnNpbmRvdGhlYnJldyIsNjQyOTksInNob29rIiw2NDIsInNpZ21hIiw5NjMsInNpZ21hMSIsOTYyLCJzaWdtYWZpbmFsIiw5NjIsInNpZ21hbHVuYXRlc3ltYm9sZ3JlZWsiLDEwMTAsInNpaGlyYWdhbmEiLDEyMzc1LCJzaWthdGFrYW5hIiwxMjQ3MSwic2lrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDQsInNpbHVxaGVicmV3IiwxNDY5LCJzaWx1cWxlZnRoZWJyZXciLDE0NjksInNpbWlsYXIiLDg3NjQsInNpbmRvdGhlYnJldyIsMTQ3NCwic2lvc2FjaXJjbGVrb3JlYW4iLDEyOTE2LCJzaW9zYXBhcmVua29yZWFuIiwxMjgyMCwic2lvc2NpZXVja29yZWFuIiwxMjY3MCwic2lvc2NpcmNsZWtvcmVhbiIsMTI5MDIsInNpb3NraXllb2trb3JlYW4iLDEyNjY2LCJzaW9za29yZWFuIiwxMjYxMywic2lvc25pZXVua29yZWFuIiwxMjY2Nywic2lvc3BhcmVua29yZWFuIiwxMjgwNiwic2lvc3BpZXVwa29yZWFuIiwxMjY2OSwic2lvc3Rpa2V1dGtvcmVhbiIsMTI2NjgsInNpeCIsNTQsInNpeGFyYWJpYyIsMTYzOCwic2l4YmVuZ2FsaSIsMjU0MCwic2l4Y2lyY2xlIiw5MzE3LCJzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNywic2l4ZGV2YSIsMjQxMiwic2l4Z3VqYXJhdGkiLDI3OTYsInNpeGd1cm11a2hpIiwyNjY4LCJzaXhoYWNrYXJhYmljIiwxNjM4LCJzaXhoYW5nemhvdSIsMTIzMjYsInNpeGlkZW9ncmFwaGljcGFyZW4iLDEyODM3LCJzaXhpbmZlcmlvciIsODMyNiwic2l4bW9ub3NwYWNlIiw2NTMwMiwic2l4b2xkc3R5bGUiLDYzMjg2LCJzaXhwYXJlbiIsOTMzNywic2l4cGVyaW9kIiw5MzU3LCJzaXhwZXJzaWFuIiwxNzgyLCJzaXhyb21hbiIsODU2NSwic2l4c3VwZXJpb3IiLDgzMTAsInNpeHRlZW5jaXJjbGUiLDkzMjcsInNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSIsMjU1Mywic2l4dGVlbnBhcmVuIiw5MzQ3LCJzaXh0ZWVucGVyaW9kIiw5MzY3LCJzaXh0aGFpIiwzNjcwLCJzbGFzaCIsNDcsInNsYXNobW9ub3NwYWNlIiw2NTI5NSwic2xvbmciLDM4Mywic2xvbmdkb3RhY2NlbnQiLDc4MzUsInNtaWxlZmFjZSIsOTc4Niwic21vbm9zcGFjZSIsNjUzNjMsInNvZnBhc3VxaGVicmV3IiwxNDc1LCJzb2Z0aHlwaGVuIiwxNzMsInNvZnRzaWduY3lyaWxsaWMiLDExMDAsInNvaGlyYWdhbmEiLDEyMzgxLCJzb2thdGFrYW5hIiwxMjQ3Nywic29rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDcsInNvbGlkdXNsb25nb3ZlcmxheWNtYiIsODI0LCJzb2xpZHVzc2hvcnRvdmVybGF5Y21iIiw4MjMsInNvcnVzaXRoYWkiLDM2MjUsInNvc2FsYXRoYWkiLDM2MjQsInNvc290aGFpIiwzNTk1LCJzb3N1YXRoYWkiLDM2MjYsInNwYWNlIiwzMiwic3BhY2VoYWNrYXJhYmljIiwzMiwic3BhZGUiLDk4MjQsInNwYWRlc3VpdGJsYWNrIiw5ODI0LCJzcGFkZXN1aXR3aGl0ZSIsOTgyOCwic3BhcmVuIiw5MzkwLCJzcXVhcmViZWxvd2NtYiIsODI3LCJzcXVhcmVjYyIsMTMyNTIsInNxdWFyZWNtIiwxMzIxMywic3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTY0MSwic3F1YXJlaG9yaXpvbnRhbGZpbGwiLDk2MzYsInNxdWFyZWtnIiwxMzE5OSwic3F1YXJla20iLDEzMjE0LCJzcXVhcmVrbWNhcGl0YWwiLDEzMjYyLCJzcXVhcmVsbiIsMTMyNjUsInNxdWFyZWxvZyIsMTMyNjYsInNxdWFyZW1nIiwxMzE5OCwic3F1YXJlbWlsIiwxMzI2OSwic3F1YXJlbW0iLDEzMjEyLCJzcXVhcmVtc3F1YXJlZCIsMTMyMTcsInNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTYzOCwic3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCIsOTYzOSwic3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbCIsOTY0MCwic3F1YXJldmVydGljYWxmaWxsIiw5NjM3LCJzcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrIiw5NjM1LCJzcnNxdWFyZSIsMTMyNzUsInNzYWJlbmdhbGkiLDI0ODcsInNzYWRldmEiLDIzNTksInNzYWd1amFyYXRpIiwyNzQzLCJzc2FuZ2NpZXVja29yZWFuIiwxMjYxNywic3NhbmdoaWV1aGtvcmVhbiIsMTI2NzcsInNzYW5naWV1bmdrb3JlYW4iLDEyNjcyLCJzc2FuZ2tpeWVva2tvcmVhbiIsMTI1OTQsInNzYW5nbmlldW5rb3JlYW4iLDEyNjQ1LCJzc2FuZ3BpZXVwa29yZWFuIiwxMjYxMSwic3NhbmdzaW9za29yZWFuIiwxMjYxNCwic3Nhbmd0aWtldXRrb3JlYW4iLDEyNjAwLCJzc3VwZXJpb3IiLDYzMjE4LCJzdGVybGluZyIsMTYzLCJzdGVybGluZ21vbm9zcGFjZSIsNjU1MDUsInN0cm9rZWxvbmdvdmVybGF5Y21iIiw4MjIsInN0cm9rZXNob3J0b3ZlcmxheWNtYiIsODIxLCJzdWJzZXQiLDg4MzQsInN1YnNldG5vdGVxdWFsIiw4ODQyLCJzdWJzZXRvcmVxdWFsIiw4ODM4LCJzdWNjZWVkcyIsODgyNywic3VjaHRoYXQiLDg3MTUsInN1aGlyYWdhbmEiLDEyMzc3LCJzdWthdGFrYW5hIiwxMjQ3Mywic3VrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDUsInN1a3VuYXJhYmljIiwxNjE4LCJzdW1tYXRpb24iLDg3MjEsInN1biIsOTc4OCwic3VwZXJzZXQiLDg4MzUsInN1cGVyc2V0bm90ZXF1YWwiLDg4NDMsInN1cGVyc2V0b3JlcXVhbCIsODgzOSwic3ZzcXVhcmUiLDEzMjc2LCJzeW91d2FlcmFzcXVhcmUiLDEzMTgwLCJ0IiwxMTYsInRhYmVuZ2FsaSIsMjQ2OCwidGFja2Rvd24iLDg4NjgsInRhY2tsZWZ0Iiw4ODY3LCJ0YWRldmEiLDIzNDAsInRhZ3VqYXJhdGkiLDI3MjQsInRhZ3VybXVraGkiLDI1OTYsInRhaGFyYWJpYyIsMTU5MSwidGFoZmluYWxhcmFiaWMiLDY1MjE4LCJ0YWhpbml0aWFsYXJhYmljIiw2NTIxOSwidGFoaXJhZ2FuYSIsMTIzODMsInRhaG1lZGlhbGFyYWJpYyIsNjUyMjAsInRhaXN5b3VlcmFzcXVhcmUiLDEzMTgxLCJ0YWthdGFrYW5hIiwxMjQ3OSwidGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDgsInRhdHdlZWxhcmFiaWMiLDE2MDAsInRhdSIsOTY0LCJ0YXYiLDE1MTQsInRhdmRhZ2VzIiw2NDMzMCwidGF2ZGFnZXNoIiw2NDMzMCwidGF2ZGFnZXNoaGVicmV3Iiw2NDMzMCwidGF2aGVicmV3IiwxNTE0LCJ0YmFyIiwzNTksInRib3BvbW9mbyIsMTI1NTQsInRjYXJvbiIsMzU3LCJ0Y2N1cmwiLDY4MCwidGNlZGlsbGEiLDM1NSwidGNoZWhhcmFiaWMiLDE2NzAsInRjaGVoZmluYWxhcmFiaWMiLDY0Mzc5LCJ0Y2hlaGluaXRpYWxhcmFiaWMiLDY0MzgwLCJ0Y2hlaG1lZGlhbGFyYWJpYyIsNjQzODEsInRjaXJjbGUiLDk0NDMsInRjaXJjdW1mbGV4YmVsb3ciLDc3OTMsInRjb21tYWFjY2VudCIsMzU1LCJ0ZGllcmVzaXMiLDc4MzEsInRkb3RhY2NlbnQiLDc3ODcsInRkb3RiZWxvdyIsNzc4OSwidGVjeXJpbGxpYyIsMTA5MCwidGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NywidGVoYXJhYmljIiwxNTc4LCJ0ZWhmaW5hbGFyYWJpYyIsNjUxNzQsInRlaGhhaGluaXRpYWxhcmFiaWMiLDY0Njc0LCJ0ZWhoYWhpc29sYXRlZGFyYWJpYyIsNjQ1MjQsInRlaGluaXRpYWxhcmFiaWMiLDY1MTc1LCJ0ZWhpcmFnYW5hIiwxMjM5MCwidGVoamVlbWluaXRpYWxhcmFiaWMiLDY0NjczLCJ0ZWhqZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIzLCJ0ZWhtYXJidXRhYXJhYmljIiwxNTc3LCJ0ZWhtYXJidXRhZmluYWxhcmFiaWMiLDY1MTcyLCJ0ZWhtZWRpYWxhcmFiaWMiLDY1MTc2LCJ0ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ2NzYsInRlaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1MjYsInRlaG5vb25maW5hbGFyYWJpYyIsNjQ2MjcsInRla2F0YWthbmEiLDEyNDg2LCJ0ZWthdGFrYW5haGFsZndpZHRoIiw2NTQxMSwidGVsZXBob25lIiw4NDgxLCJ0ZWxlcGhvbmVibGFjayIsOTc0MiwidGVsaXNoYWdlZG9sYWhlYnJldyIsMTQ0MCwidGVsaXNoYXFldGFuYWhlYnJldyIsMTQ0OSwidGVuY2lyY2xlIiw5MzIxLCJ0ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjg0MSwidGVucGFyZW4iLDkzNDEsInRlbnBlcmlvZCIsOTM2MSwidGVucm9tYW4iLDg1NjksInRlc2giLDY3OSwidGV0IiwxNDk2LCJ0ZXRkYWdlc2giLDY0MzEyLCJ0ZXRkYWdlc2hoZWJyZXciLDY0MzEyLCJ0ZXRoZWJyZXciLDE0OTYsInRldHNlY3lyaWxsaWMiLDEyMDUsInRldmlyaGVicmV3IiwxNDM1LCJ0ZXZpcmxlZnRoZWJyZXciLDE0MzUsInRoYWJlbmdhbGkiLDI0NjksInRoYWRldmEiLDIzNDEsInRoYWd1amFyYXRpIiwyNzI1LCJ0aGFndXJtdWtoaSIsMjU5NywidGhhbGFyYWJpYyIsMTU4NCwidGhhbGZpbmFsYXJhYmljIiw2NTE5NiwidGhhbnRoYWtoYXRsb3dsZWZ0dGhhaSIsNjM2NDAsInRoYW50aGFraGF0bG93cmlnaHR0aGFpIiw2MzYzOSwidGhhbnRoYWtoYXR0aGFpIiwzNjYwLCJ0aGFudGhha2hhdHVwcGVybGVmdHRoYWkiLDYzNjM4LCJ0aGVoYXJhYmljIiwxNTc5LCJ0aGVoZmluYWxhcmFiaWMiLDY1MTc4LCJ0aGVoaW5pdGlhbGFyYWJpYyIsNjUxNzksInRoZWhtZWRpYWxhcmFiaWMiLDY1MTgwLCJ0aGVyZWV4aXN0cyIsODcwNywidGhlcmVmb3JlIiw4NzU2LCJ0aGV0YSIsOTUyLCJ0aGV0YTEiLDk3NywidGhldGFzeW1ib2xncmVlayIsOTc3LCJ0aGlldXRoYWNpcmNsZWtvcmVhbiIsMTI5MjEsInRoaWV1dGhhcGFyZW5rb3JlYW4iLDEyODI1LCJ0aGlldXRoY2lyY2xla29yZWFuIiwxMjkwNywidGhpZXV0aGtvcmVhbiIsMTI2MjAsInRoaWV1dGhwYXJlbmtvcmVhbiIsMTI4MTEsInRoaXJ0ZWVuY2lyY2xlIiw5MzI0LCJ0aGlydGVlbnBhcmVuIiw5MzQ0LCJ0aGlydGVlbnBlcmlvZCIsOTM2NCwidGhvbmFuZ21vbnRob3RoYWkiLDM2MDEsInRob29rIiw0MjksInRob3BodXRoYW90aGFpIiwzNjAyLCJ0aG9ybiIsMjU0LCJ0aG90aGFoYW50aGFpIiwzNjA3LCJ0aG90aGFudGhhaSIsMzYwMCwidGhvdGhvbmd0aGFpIiwzNjA4LCJ0aG90aHVuZ3RoYWkiLDM2MDYsInRob3VzYW5kY3lyaWxsaWMiLDExNTQsInRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYyIsMTY0NCwidGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiIsMTY0NCwidGhyZWUiLDUxLCJ0aHJlZWFyYWJpYyIsMTYzNSwidGhyZWViZW5nYWxpIiwyNTM3LCJ0aHJlZWNpcmNsZSIsOTMxNCwidGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNCwidGhyZWVkZXZhIiwyNDA5LCJ0aHJlZWVpZ2h0aHMiLDg1NDAsInRocmVlZ3VqYXJhdGkiLDI3OTMsInRocmVlZ3VybXVraGkiLDI2NjUsInRocmVlaGFja2FyYWJpYyIsMTYzNSwidGhyZWVoYW5nemhvdSIsMTIzMjMsInRocmVlaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzQsInRocmVlaW5mZXJpb3IiLDgzMjMsInRocmVlbW9ub3NwYWNlIiw2NTI5OSwidGhyZWVudW1lcmF0b3JiZW5nYWxpIiwyNTUwLCJ0aHJlZW9sZHN0eWxlIiw2MzI4MywidGhyZWVwYXJlbiIsOTMzNCwidGhyZWVwZXJpb2QiLDkzNTQsInRocmVlcGVyc2lhbiIsMTc3OSwidGhyZWVxdWFydGVycyIsMTkwLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiw2MzE5OCwidGhyZWVyb21hbiIsODU2MiwidGhyZWVzdXBlcmlvciIsMTc5LCJ0aHJlZXRoYWkiLDM2NjcsInRoenNxdWFyZSIsMTMyMDQsInRpaGlyYWdhbmEiLDEyMzg1LCJ0aWthdGFrYW5hIiwxMjQ4MSwidGlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDksInRpa2V1dGFjaXJjbGVrb3JlYW4iLDEyOTEyLCJ0aWtldXRhcGFyZW5rb3JlYW4iLDEyODE2LCJ0aWtldXRjaXJjbGVrb3JlYW4iLDEyODk4LCJ0aWtldXRrb3JlYW4iLDEyNTk5LCJ0aWtldXRwYXJlbmtvcmVhbiIsMTI4MDIsInRpbGRlIiw3MzIsInRpbGRlYmVsb3djbWIiLDgxNiwidGlsZGVjbWIiLDc3MSwidGlsZGVjb21iIiw3NzEsInRpbGRlZG91YmxlY21iIiw4NjQsInRpbGRlb3BlcmF0b3IiLDg3NjQsInRpbGRlb3ZlcmxheWNtYiIsODIwLCJ0aWxkZXZlcnRpY2FsY21iIiw4MzAsInRpbWVzY2lyY2xlIiw4ODU1LCJ0aXBlaGFoZWJyZXciLDE0MzAsInRpcGVoYWxlZnRoZWJyZXciLDE0MzAsInRpcHBpZ3VybXVraGkiLDI2NzIsInRpdGxvY3lyaWxsaWNjbWIiLDExNTUsInRpd25hcm1lbmlhbiIsMTQwNywidGxpbmViZWxvdyIsNzc5MSwidG1vbm9zcGFjZSIsNjUzNjQsInRvYXJtZW5pYW4iLDEzODUsInRvaGlyYWdhbmEiLDEyMzkyLCJ0b2thdGFrYW5hIiwxMjQ4OCwidG9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTIsInRvbmViYXJleHRyYWhpZ2htb2QiLDc0MSwidG9uZWJhcmV4dHJhbG93bW9kIiw3NDUsInRvbmViYXJoaWdobW9kIiw3NDIsInRvbmViYXJsb3dtb2QiLDc0NCwidG9uZWJhcm1pZG1vZCIsNzQzLCJ0b25lZml2ZSIsNDQ1LCJ0b25lc2l4IiwzODksInRvbmV0d28iLDQyNCwidG9ub3MiLDkwMCwidG9uc3F1YXJlIiwxMzA5NSwidG9wYXRha3RoYWkiLDM1OTksInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMDgsInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsIiw2NTExNywidG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDgxLCJ0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0IiwxMjMwOSwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsIiw2NTExOCwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4MiwidG90YW90aGFpIiwzNjA1LCJ0cGFsYXRhbGhvb2siLDQyNywidHBhcmVuIiw5MzkxLCJ0cmFkZW1hcmsiLDg0ODIsInRyYWRlbWFya3NhbnMiLDYzNzIyLCJ0cmFkZW1hcmtzZXJpZiIsNjMxOTUsInRyZXRyb2ZsZXhob29rIiw2NDgsInRyaWFnZG4iLDk2NjAsInRyaWFnbGYiLDk2NjgsInRyaWFncnQiLDk2NTgsInRyaWFndXAiLDk2NTAsInRzIiw2NzgsInRzYWRpIiwxNTEwLCJ0c2FkaWRhZ2VzaCIsNjQzMjYsInRzYWRpZGFnZXNoaGVicmV3Iiw2NDMyNiwidHNhZGloZWJyZXciLDE1MTAsInRzZWN5cmlsbGljIiwxMDk0LCJ0c2VyZSIsMTQ2MSwidHNlcmUxMiIsMTQ2MSwidHNlcmUxZSIsMTQ2MSwidHNlcmUyYiIsMTQ2MSwidHNlcmVoZWJyZXciLDE0NjEsInRzZXJlbmFycm93aGVicmV3IiwxNDYxLCJ0c2VyZXF1YXJ0ZXJoZWJyZXciLDE0NjEsInRzZXJld2lkZWhlYnJldyIsMTQ2MSwidHNoZWN5cmlsbGljIiwxMTE1LCJ0c3VwZXJpb3IiLDYzMjE5LCJ0dGFiZW5nYWxpIiwyNDYzLCJ0dGFkZXZhIiwyMzM1LCJ0dGFndWphcmF0aSIsMjcxOSwidHRhZ3VybXVraGkiLDI1OTEsInR0ZWhhcmFiaWMiLDE2NTcsInR0ZWhmaW5hbGFyYWJpYyIsNjQzNTksInR0ZWhpbml0aWFsYXJhYmljIiw2NDM2MCwidHRlaG1lZGlhbGFyYWJpYyIsNjQzNjEsInR0aGFiZW5nYWxpIiwyNDY0LCJ0dGhhZGV2YSIsMjMzNiwidHRoYWd1amFyYXRpIiwyNzIwLCJ0dGhhZ3VybXVraGkiLDI1OTIsInR0dXJuZWQiLDY0NywidHVoaXJhZ2FuYSIsMTIzODgsInR1a2F0YWthbmEiLDEyNDg0LCJ0dWthdGFrYW5haGFsZndpZHRoIiw2NTQxMCwidHVzbWFsbGhpcmFnYW5hIiwxMjM4NywidHVzbWFsbGthdGFrYW5hIiwxMjQ4MywidHVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM5MSwidHdlbHZlY2lyY2xlIiw5MzIzLCJ0d2VsdmVwYXJlbiIsOTM0MywidHdlbHZlcGVyaW9kIiw5MzYzLCJ0d2VsdmVyb21hbiIsODU3MSwidHdlbnR5Y2lyY2xlIiw5MzMxLCJ0d2VudHloYW5nemhvdSIsMjEzMTYsInR3ZW50eXBhcmVuIiw5MzUxLCJ0d2VudHlwZXJpb2QiLDkzNzEsInR3byIsNTAsInR3b2FyYWJpYyIsMTYzNCwidHdvYmVuZ2FsaSIsMjUzNiwidHdvY2lyY2xlIiw5MzEzLCJ0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyMywidHdvZGV2YSIsMjQwOCwidHdvZG90ZW5sZWFkZXIiLDgyMjksInR3b2RvdGxlYWRlciIsODIyOSwidHdvZG90bGVhZGVydmVydGljYWwiLDY1MDcyLCJ0d29ndWphcmF0aSIsMjc5MiwidHdvZ3VybXVraGkiLDI2NjQsInR3b2hhY2thcmFiaWMiLDE2MzQsInR3b2hhbmd6aG91IiwxMjMyMiwidHdvaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzMsInR3b2luZmVyaW9yIiw4MzIyLCJ0d29tb25vc3BhY2UiLDY1Mjk4LCJ0d29udW1lcmF0b3JiZW5nYWxpIiwyNTQ5LCJ0d29vbGRzdHlsZSIsNjMyODIsInR3b3BhcmVuIiw5MzMzLCJ0d29wZXJpb2QiLDkzNTMsInR3b3BlcnNpYW4iLDE3NzgsInR3b3JvbWFuIiw4NTYxLCJ0d29zdHJva2UiLDQ0MywidHdvc3VwZXJpb3IiLDE3OCwidHdvdGhhaSIsMzY2NiwidHdvdGhpcmRzIiw4NTMyLCJ1IiwxMTcsInVhY3V0ZSIsMjUwLCJ1YmFyIiw2NDksInViZW5nYWxpIiwyNDQxLCJ1Ym9wb21vZm8iLDEyNTg0LCJ1YnJldmUiLDM2NSwidWNhcm9uIiw0NjgsInVjaXJjbGUiLDk0NDQsInVjaXJjdW1mbGV4IiwyNTEsInVjaXJjdW1mbGV4YmVsb3ciLDc3OTksInVjeXJpbGxpYyIsMTA5MSwidWRhdHRhZGV2YSIsMjM4NSwidWRibGFjdXRlIiwzNjksInVkYmxncmF2ZSIsNTMzLCJ1ZGV2YSIsMjMxMywidWRpZXJlc2lzIiwyNTIsInVkaWVyZXNpc2FjdXRlIiw0NzIsInVkaWVyZXNpc2JlbG93Iiw3Nzk1LCJ1ZGllcmVzaXNjYXJvbiIsNDc0LCJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI2NSwidWRpZXJlc2lzZ3JhdmUiLDQ3NiwidWRpZXJlc2lzbWFjcm9uIiw0NzAsInVkb3RiZWxvdyIsNzkwOSwidWdyYXZlIiwyNDksInVndWphcmF0aSIsMjY5NywidWd1cm11a2hpIiwyNTY5LCJ1aGlyYWdhbmEiLDEyMzU4LCJ1aG9va2Fib3ZlIiw3OTExLCJ1aG9ybiIsNDMyLCJ1aG9ybmFjdXRlIiw3OTEzLCJ1aG9ybmRvdGJlbG93Iiw3OTIxLCJ1aG9ybmdyYXZlIiw3OTE1LCJ1aG9ybmhvb2thYm92ZSIsNzkxNywidWhvcm50aWxkZSIsNzkxOSwidWh1bmdhcnVtbGF1dCIsMzY5LCJ1aHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjcsInVpbnZlcnRlZGJyZXZlIiw1MzUsInVrYXRha2FuYSIsMTI0NTQsInVrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTUsInVrY3lyaWxsaWMiLDExNDUsInVrb3JlYW4iLDEyNjM2LCJ1bWFjcm9uIiwzNjMsInVtYWNyb25jeXJpbGxpYyIsMTI2MywidW1hY3JvbmRpZXJlc2lzIiw3ODAzLCJ1bWF0cmFndXJtdWtoaSIsMjYyNSwidW1vbm9zcGFjZSIsNjUzNjUsInVuZGVyc2NvcmUiLDk1LCJ1bmRlcnNjb3JlZGJsIiw4MjE1LCJ1bmRlcnNjb3JlbW9ub3NwYWNlIiw2NTM0MywidW5kZXJzY29yZXZlcnRpY2FsIiw2NTA3NSwidW5kZXJzY29yZXdhdnkiLDY1MTAzLCJ1bmlvbiIsODc0NiwidW5pdmVyc2FsIiw4NzA0LCJ1b2dvbmVrIiwzNzEsInVwYXJlbiIsOTM5MiwidXBibG9jayIsOTYwMCwidXBwZXJkb3RoZWJyZXciLDE0NzYsInVwc2lsb24iLDk2NSwidXBzaWxvbmRpZXJlc2lzIiw5NzEsInVwc2lsb25kaWVyZXNpc3Rvbm9zIiw5NDQsInVwc2lsb25sYXRpbiIsNjUwLCJ1cHNpbG9udG9ub3MiLDk3MywidXB0YWNrYmVsb3djbWIiLDc5NywidXB0YWNrbW9kIiw3MjQsInVyYWd1cm11a2hpIiwyNjc1LCJ1cmluZyIsMzY3LCJ1c2hvcnRjeXJpbGxpYyIsMTExOCwidXNtYWxsaGlyYWdhbmEiLDEyMzU3LCJ1c21hbGxrYXRha2FuYSIsMTI0NTMsInVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NSwidXN0cmFpZ2h0Y3lyaWxsaWMiLDExOTksInVzdHJhaWdodHN0cm9rZWN5cmlsbGljIiwxMjAxLCJ1dGlsZGUiLDM2MSwidXRpbGRlYWN1dGUiLDc4MDEsInV0aWxkZWJlbG93Iiw3Nzk3LCJ1dWJlbmdhbGkiLDI0NDIsInV1ZGV2YSIsMjMxNCwidXVndWphcmF0aSIsMjY5OCwidXVndXJtdWtoaSIsMjU3MCwidXVtYXRyYWd1cm11a2hpIiwyNjI2LCJ1dXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTgsInV1dm93ZWxzaWduZGV2YSIsMjM3MCwidXV2b3dlbHNpZ25ndWphcmF0aSIsMjc1NCwidXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTcsInV2b3dlbHNpZ25kZXZhIiwyMzY5LCJ1dm93ZWxzaWduZ3VqYXJhdGkiLDI3NTMsInYiLDExOCwidmFkZXZhIiwyMzU3LCJ2YWd1amFyYXRpIiwyNzQxLCJ2YWd1cm11a2hpIiwyNjEzLCJ2YWthdGFrYW5hIiwxMjUzNSwidmF2IiwxNDkzLCJ2YXZkYWdlc2giLDY0MzA5LCJ2YXZkYWdlc2g2NSIsNjQzMDksInZhdmRhZ2VzaGhlYnJldyIsNjQzMDksInZhdmhlYnJldyIsMTQ5MywidmF2aG9sYW0iLDY0MzMxLCJ2YXZob2xhbWhlYnJldyIsNjQzMzEsInZhdnZhdmhlYnJldyIsMTUyMCwidmF2eW9kaGVicmV3IiwxNTIxLCJ2Y2lyY2xlIiw5NDQ1LCJ2ZG90YmVsb3ciLDc4MDcsInZlY3lyaWxsaWMiLDEwNzQsInZlaGFyYWJpYyIsMTcwMCwidmVoZmluYWxhcmFiaWMiLDY0MzYzLCJ2ZWhpbml0aWFsYXJhYmljIiw2NDM2NCwidmVobWVkaWFsYXJhYmljIiw2NDM2NSwidmVrYXRha2FuYSIsMTI1MzcsInZlbnVzIiw5NzkyLCJ2ZXJ0aWNhbGJhciIsMTI0LCJ2ZXJ0aWNhbGxpbmVhYm92ZWNtYiIsNzgxLCJ2ZXJ0aWNhbGxpbmViZWxvd2NtYiIsODA5LCJ2ZXJ0aWNhbGxpbmVsb3dtb2QiLDcxNiwidmVydGljYWxsaW5lbW9kIiw3MTIsInZld2FybWVuaWFuIiwxNDA2LCJ2aG9vayIsNjUxLCJ2aWthdGFrYW5hIiwxMjUzNiwidmlyYW1hYmVuZ2FsaSIsMjUwOSwidmlyYW1hZGV2YSIsMjM4MSwidmlyYW1hZ3VqYXJhdGkiLDI3NjUsInZpc2FyZ2FiZW5nYWxpIiwyNDM1LCJ2aXNhcmdhZGV2YSIsMjMwNywidmlzYXJnYWd1amFyYXRpIiwyNjkxLCJ2bW9ub3NwYWNlIiw2NTM2Niwidm9hcm1lbmlhbiIsMTQwMCwidm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEiLDEyNDQ2LCJ2b2ljZWRpdGVyYXRpb25rYXRha2FuYSIsMTI1NDIsInZvaWNlZG1hcmtrYW5hIiwxMjQ0Mywidm9pY2VkbWFya2thbmFoYWxmd2lkdGgiLDY1NDM4LCJ2b2thdGFrYW5hIiwxMjUzOCwidnBhcmVuIiw5MzkzLCJ2dGlsZGUiLDc4MDUsInZ0dXJuZWQiLDY1MiwidnVoaXJhZ2FuYSIsMTI0MzYsInZ1a2F0YWthbmEiLDEyNTMyLCJ3IiwxMTksIndhY3V0ZSIsNzgxMSwid2Fla29yZWFuIiwxMjYzMywid2FoaXJhZ2FuYSIsMTI0MzEsIndha2F0YWthbmEiLDEyNTI3LCJ3YWthdGFrYW5haGFsZndpZHRoIiw2NTQzNiwid2Frb3JlYW4iLDEyNjMyLCJ3YXNtYWxsaGlyYWdhbmEiLDEyNDMwLCJ3YXNtYWxsa2F0YWthbmEiLDEyNTI2LCJ3YXR0b3NxdWFyZSIsMTMxNDMsIndhdmVkYXNoIiwxMjMxNiwid2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbCIsNjUwNzYsIndhd2FyYWJpYyIsMTYwOCwid2F3ZmluYWxhcmFiaWMiLDY1MjYyLCJ3YXdoYW16YWFib3ZlYXJhYmljIiwxNTcyLCJ3YXdoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU4LCJ3YnNxdWFyZSIsMTMyNzcsIndjaXJjbGUiLDk0NDYsIndjaXJjdW1mbGV4IiwzNzMsIndkaWVyZXNpcyIsNzgxMywid2RvdGFjY2VudCIsNzgxNSwid2RvdGJlbG93Iiw3ODE3LCJ3ZWhpcmFnYW5hIiwxMjQzMywid2VpZXJzdHJhc3MiLDg0NzIsIndla2F0YWthbmEiLDEyNTI5LCJ3ZWtvcmVhbiIsMTI2MzgsIndlb2tvcmVhbiIsMTI2MzcsIndncmF2ZSIsNzgwOSwid2hpdGVidWxsZXQiLDk3MDIsIndoaXRlY2lyY2xlIiw5Njc1LCJ3aGl0ZWNpcmNsZWludmVyc2UiLDk2ODksIndoaXRlY29ybmVyYnJhY2tldGxlZnQiLDEyMzAyLCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDkxLCJ3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCIsMTIzMDMsIndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkyLCJ3aGl0ZWRpYW1vbmQiLDk2NzEsIndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZCIsOTY3Miwid2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlIiw5NjYzLCJ3aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlIiw5NjYxLCJ3aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NjcsIndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGUiLDk2NjUsIndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0IiwxMjMxMCwid2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMxMSwid2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1Nywid2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUiLDk2NTUsIndoaXRlc21hbGxzcXVhcmUiLDk2NDMsIndoaXRlc21pbGluZ2ZhY2UiLDk3ODYsIndoaXRlc3F1YXJlIiw5NjMzLCJ3aGl0ZXN0YXIiLDk3MzQsIndoaXRldGVsZXBob25lIiw5NzQzLCJ3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMTIsIndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCIsMTIzMTMsIndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NTMsIndoaXRldXBwb2ludGluZ3RyaWFuZ2xlIiw5NjUxLCJ3aWhpcmFnYW5hIiwxMjQzMiwid2lrYXRha2FuYSIsMTI1MjgsIndpa29yZWFuIiwxMjYzOSwid21vbm9zcGFjZSIsNjUzNjcsIndvaGlyYWdhbmEiLDEyNDM0LCJ3b2thdGFrYW5hIiwxMjUzMCwid29rYXRha2FuYWhhbGZ3aWR0aCIsNjUzODIsIndvbiIsODM2MSwid29ubW9ub3NwYWNlIiw2NTUxMCwid293YWVudGhhaSIsMzYyMywid3BhcmVuIiw5Mzk0LCJ3cmluZyIsNzgzMiwid3N1cGVyaW9yIiw2OTUsInd0dXJuZWQiLDY1Mywid3lubiIsNDQ3LCJ4IiwxMjAsInhhYm92ZWNtYiIsODI5LCJ4Ym9wb21vZm8iLDEyNTYyLCJ4Y2lyY2xlIiw5NDQ3LCJ4ZGllcmVzaXMiLDc4MjEsInhkb3RhY2NlbnQiLDc4MTksInhlaGFybWVuaWFuIiwxMzg5LCJ4aSIsOTU4LCJ4bW9ub3NwYWNlIiw2NTM2OCwieHBhcmVuIiw5Mzk1LCJ4c3VwZXJpb3IiLDczOSwieSIsMTIxLCJ5YWFkb3NxdWFyZSIsMTMxMzQsInlhYmVuZ2FsaSIsMjQ3OSwieWFjdXRlIiwyNTMsInlhZGV2YSIsMjM1MSwieWFla29yZWFuIiwxMjYyNiwieWFndWphcmF0aSIsMjczNSwieWFndXJtdWtoaSIsMjYwNywieWFoaXJhZ2FuYSIsMTI0MjAsInlha2F0YWthbmEiLDEyNTE2LCJ5YWthdGFrYW5haGFsZndpZHRoIiw2NTQyOCwieWFrb3JlYW4iLDEyNjI1LCJ5YW1ha2thbnRoYWkiLDM2NjIsInlhc21hbGxoaXJhZ2FuYSIsMTI0MTksInlhc21hbGxrYXRha2FuYSIsMTI1MTUsInlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aCIsNjUzODgsInlhdGN5cmlsbGljIiwxMTIzLCJ5Y2lyY2xlIiw5NDQ4LCJ5Y2lyY3VtZmxleCIsMzc1LCJ5ZGllcmVzaXMiLDI1NSwieWRvdGFjY2VudCIsNzgyMywieWRvdGJlbG93Iiw3OTI1LCJ5ZWhhcmFiaWMiLDE2MTAsInllaGJhcnJlZWFyYWJpYyIsMTc0NiwieWVoYmFycmVlZmluYWxhcmFiaWMiLDY0NDMxLCJ5ZWhmaW5hbGFyYWJpYyIsNjUyNjYsInllaGhhbXphYWJvdmVhcmFiaWMiLDE1NzQsInllaGhhbXphYWJvdmVmaW5hbGFyYWJpYyIsNjUxNjIsInllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljIiw2NTE2MywieWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYyIsNjUxNjQsInllaGluaXRpYWxhcmFiaWMiLDY1MjY3LCJ5ZWhtZWRpYWxhcmFiaWMiLDY1MjY4LCJ5ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MzMsInllaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ2MDAsInllaG5vb25maW5hbGFyYWJpYyIsNjQ2NjAsInllaHRocmVlZG90c2JlbG93YXJhYmljIiwxNzQ1LCJ5ZWtvcmVhbiIsMTI2MzAsInllbiIsMTY1LCJ5ZW5tb25vc3BhY2UiLDY1NTA5LCJ5ZW9rb3JlYW4iLDEyNjI5LCJ5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NzgsInllcmFoYmVueW9tb2hlYnJldyIsMTQ1MCwieWVyYWhiZW55b21vbGVmdGhlYnJldyIsMTQ1MCwieWVyaWN5cmlsbGljIiwxMDk5LCJ5ZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MywieWVzaWV1bmdrb3JlYW4iLDEyNjczLCJ5ZXNpZXVuZ3BhbnNpb3Nrb3JlYW4iLDEyNjc1LCJ5ZXNpZXVuZ3Npb3Nrb3JlYW4iLDEyNjc0LCJ5ZXRpdmhlYnJldyIsMTQzNCwieWdyYXZlIiw3OTIzLCJ5aG9vayIsNDM2LCJ5aG9va2Fib3ZlIiw3OTI3LCJ5aWFybWVuaWFuIiwxMzk3LCJ5aWN5cmlsbGljIiwxMTExLCJ5aWtvcmVhbiIsMTI2NDIsInlpbnlhbmciLDk3NzUsInlpd25hcm1lbmlhbiIsMTQxMCwieW1vbm9zcGFjZSIsNjUzNjksInlvZCIsMTQ5NywieW9kZGFnZXNoIiw2NDMxMywieW9kZGFnZXNoaGVicmV3Iiw2NDMxMywieW9kaGVicmV3IiwxNDk3LCJ5b2R5b2RoZWJyZXciLDE1MjIsInlvZHlvZHBhdGFoaGVicmV3Iiw2NDI4NywieW9oaXJhZ2FuYSIsMTI0MjQsInlvaWtvcmVhbiIsMTI2ODEsInlva2F0YWthbmEiLDEyNTIwLCJ5b2thdGFrYW5haGFsZndpZHRoIiw2NTQzMCwieW9rb3JlYW4iLDEyNjM1LCJ5b3NtYWxsaGlyYWdhbmEiLDEyNDIzLCJ5b3NtYWxsa2F0YWthbmEiLDEyNTE5LCJ5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1MzkwLCJ5b3RncmVlayIsMTAxMSwieW95YWVrb3JlYW4iLDEyNjgwLCJ5b3lha29yZWFuIiwxMjY3OSwieW95YWt0aGFpIiwzNjE4LCJ5b3lpbmd0aGFpIiwzNTk3LCJ5cGFyZW4iLDkzOTYsInlwb2dlZ3JhbW1lbmkiLDg5MCwieXBvZ2VncmFtbWVuaWdyZWVrY21iIiw4MzcsInlyIiw0MjIsInlyaW5nIiw3ODMzLCJ5c3VwZXJpb3IiLDY5NiwieXRpbGRlIiw3OTI5LCJ5dHVybmVkIiw2NTQsInl1aGlyYWdhbmEiLDEyNDIyLCJ5dWlrb3JlYW4iLDEyNjg0LCJ5dWthdGFrYW5hIiwxMjUxOCwieXVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjksInl1a29yZWFuIiwxMjY0MCwieXVzYmlnY3lyaWxsaWMiLDExMzEsInl1c2JpZ2lvdGlmaWVkY3lyaWxsaWMiLDExMzMsInl1c2xpdHRsZWN5cmlsbGljIiwxMTI3LCJ5dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljIiwxMTI5LCJ5dXNtYWxsaGlyYWdhbmEiLDEyNDIxLCJ5dXNtYWxsa2F0YWthbmEiLDEyNTE3LCJ5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1Mzg5LCJ5dXlla29yZWFuIiwxMjY4MywieXV5ZW9rb3JlYW4iLDEyNjgyLCJ5eWFiZW5nYWxpIiwyNTI3LCJ5eWFkZXZhIiwyMzk5LCJ6IiwxMjIsInphYXJtZW5pYW4iLDEzODIsInphY3V0ZSIsMzc4LCJ6YWRldmEiLDIzOTUsInphZ3VybXVraGkiLDI2NTEsInphaGFyYWJpYyIsMTU5MiwiemFoZmluYWxhcmFiaWMiLDY1MjIyLCJ6YWhpbml0aWFsYXJhYmljIiw2NTIyMywiemFoaXJhZ2FuYSIsMTIzNzQsInphaG1lZGlhbGFyYWJpYyIsNjUyMjQsInphaW5hcmFiaWMiLDE1ODYsInphaW5maW5hbGFyYWJpYyIsNjUyMDAsInpha2F0YWthbmEiLDEyNDcwLCJ6YXFlZmdhZG9saGVicmV3IiwxNDI5LCJ6YXFlZnFhdGFuaGVicmV3IiwxNDI4LCJ6YXJxYWhlYnJldyIsMTQzMiwiemF5aW4iLDE0OTQsInpheWluZGFnZXNoIiw2NDMxMCwiemF5aW5kYWdlc2hoZWJyZXciLDY0MzEwLCJ6YXlpbmhlYnJldyIsMTQ5NCwiemJvcG9tb2ZvIiwxMjU2NywiemNhcm9uIiwzODIsInpjaXJjbGUiLDk0NDksInpjaXJjdW1mbGV4Iiw3ODI1LCJ6Y3VybCIsNjU3LCJ6ZG90IiwzODAsInpkb3RhY2NlbnQiLDM4MCwiemRvdGJlbG93Iiw3ODI3LCJ6ZWN5cmlsbGljIiwxMDc5LCJ6ZWRlc2NlbmRlcmN5cmlsbGljIiwxMTc3LCJ6ZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDcsInplaGlyYWdhbmEiLDEyMzgwLCJ6ZWthdGFrYW5hIiwxMjQ3NiwiemVybyIsNDgsInplcm9hcmFiaWMiLDE2MzIsInplcm9iZW5nYWxpIiwyNTM0LCJ6ZXJvZGV2YSIsMjQwNiwiemVyb2d1amFyYXRpIiwyNzkwLCJ6ZXJvZ3VybXVraGkiLDI2NjIsInplcm9oYWNrYXJhYmljIiwxNjMyLCJ6ZXJvaW5mZXJpb3IiLDgzMjAsInplcm9tb25vc3BhY2UiLDY1Mjk2LCJ6ZXJvb2xkc3R5bGUiLDYzMjgwLCJ6ZXJvcGVyc2lhbiIsMTc3NiwiemVyb3N1cGVyaW9yIiw4MzA0LCJ6ZXJvdGhhaSIsMzY2NCwiemVyb3dpZHRoam9pbmVyIiw2NTI3OSwiemVyb3dpZHRobm9uam9pbmVyIiw4MjA0LCJ6ZXJvd2lkdGhzcGFjZSIsODIwMywiemV0YSIsOTUwLCJ6aGJvcG9tb2ZvIiwxMjU2MywiemhlYXJtZW5pYW4iLDEzODYsInpoZWJyZXZlY3lyaWxsaWMiLDEyMTgsInpoZWN5cmlsbGljIiwxMDc4LCJ6aGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NSwiemhlZGllcmVzaXNjeXJpbGxpYyIsMTI0NSwiemloaXJhZ2FuYSIsMTIzNzYsInppa2F0YWthbmEiLDEyNDcyLCJ6aW5vcmhlYnJldyIsMTQ1NCwiemxpbmViZWxvdyIsNzgyOSwiem1vbm9zcGFjZSIsNjUzNzAsInpvaGlyYWdhbmEiLDEyMzgyLCJ6b2thdGFrYW5hIiwxMjQ3OCwienBhcmVuIiw5Mzk3LCJ6cmV0cm9mbGV4aG9vayIsNjU2LCJ6c3Ryb2tlIiw0MzgsInp1aGlyYWdhbmEiLDEyMzc4LCJ6dWthdGFrYW5hIiwxMjQ3NCwiLm5vdGRlZiIsMCwiYW5nYnJhY2tldGxlZnRiaWciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnIiw5MDAxLCJhbmdicmFja2V0bGVmdGJpZ2ciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnZyIsOTAwMSwiYW5nYnJhY2tldHJpZ2h0QmlnIiw5MDAyLCJhbmdicmFja2V0cmlnaHRiaWciLDkwMDIsImFuZ2JyYWNrZXRyaWdodEJpZ2ciLDkwMDIsImFuZ2JyYWNrZXRyaWdodGJpZ2ciLDkwMDIsImFycm93aG9va2xlZnQiLDg2MTgsImFycm93aG9va3JpZ2h0Iiw4NjE3LCJhcnJvd2xlZnR0b3BoYWxmIiw4NjM2LCJhcnJvd2xlZnRib3RoYWxmIiw4NjM3LCJhcnJvd25vcnRoZWFzdCIsODU5OSwiYXJyb3dub3J0aHdlc3QiLDg1OTgsImFycm93cmlnaHR0b3BoYWxmIiw4NjQwLCJhcnJvd3JpZ2h0Ym90aGFsZiIsODY0MSwiYXJyb3dzb3V0aGVhc3QiLDg2MDAsImFycm93c291dGh3ZXN0Iiw4NjAxLCJiYWNrc2xhc2hiaWciLDg3MjYsImJhY2tzbGFzaEJpZyIsODcyNiwiYmFja3NsYXNoQmlnZyIsODcyNiwiYmFja3NsYXNoYmlnZyIsODcyNiwiYmFyZGJsIiw4MjE0LCJicmFjZWh0aXBkb3dubGVmdCIsNjUwNzksImJyYWNlaHRpcGRvd25yaWdodCIsNjUwNzksImJyYWNlaHRpcHVwbGVmdCIsNjUwODAsImJyYWNlaHRpcHVwcmlnaHQiLDY1MDgwLCJicmFjZWxlZnRCaWciLDEyMywiYnJhY2VsZWZ0YmlnIiwxMjMsImJyYWNlbGVmdGJpZ2ciLDEyMywiYnJhY2VsZWZ0QmlnZyIsMTIzLCJicmFjZXJpZ2h0QmlnIiwxMjUsImJyYWNlcmlnaHRiaWciLDEyNSwiYnJhY2VyaWdodGJpZ2ciLDEyNSwiYnJhY2VyaWdodEJpZ2ciLDEyNSwiYnJhY2tldGxlZnRiaWciLDkxLCJicmFja2V0bGVmdEJpZyIsOTEsImJyYWNrZXRsZWZ0YmlnZyIsOTEsImJyYWNrZXRsZWZ0QmlnZyIsOTEsImJyYWNrZXRyaWdodEJpZyIsOTMsImJyYWNrZXRyaWdodGJpZyIsOTMsImJyYWNrZXRyaWdodGJpZ2ciLDkzLCJicmFja2V0cmlnaHRCaWdnIiw5MywiY2VpbGluZ2xlZnRiaWciLDg5NjgsImNlaWxpbmdsZWZ0QmlnIiw4OTY4LCJjZWlsaW5nbGVmdEJpZ2ciLDg5NjgsImNlaWxpbmdsZWZ0YmlnZyIsODk2OCwiY2VpbGluZ3JpZ2h0YmlnIiw4OTY5LCJjZWlsaW5ncmlnaHRCaWciLDg5NjksImNlaWxpbmdyaWdodGJpZ2ciLDg5NjksImNlaWxpbmdyaWdodEJpZ2ciLDg5NjksImNpcmNsZWRvdGRpc3BsYXkiLDg4NTcsImNpcmNsZWRvdHRleHQiLDg4NTcsImNpcmNsZW11bHRpcGx5ZGlzcGxheSIsODg1NSwiY2lyY2xlbXVsdGlwbHl0ZXh0Iiw4ODU1LCJjaXJjbGVwbHVzZGlzcGxheSIsODg1MywiY2lyY2xlcGx1c3RleHQiLDg4NTMsImNvbnRpbnRlZ3JhbGRpc3BsYXkiLDg3NTAsImNvbnRpbnRlZ3JhbHRleHQiLDg3NTAsImNvcHJvZHVjdGRpc3BsYXkiLDg3MjAsImNvcHJvZHVjdHRleHQiLDg3MjAsImZsb29ybGVmdEJpZyIsODk3MCwiZmxvb3JsZWZ0YmlnIiw4OTcwLCJmbG9vcmxlZnRiaWdnIiw4OTcwLCJmbG9vcmxlZnRCaWdnIiw4OTcwLCJmbG9vcnJpZ2h0YmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnZyIsODk3MSwiZmxvb3JyaWdodGJpZ2ciLDg5NzEsImhhdHdpZGUiLDc3MCwiaGF0d2lkZXIiLDc3MCwiaGF0d2lkZXN0Iiw3NzAsImludGVyY2FsIiw3NDg4LCJpbnRlZ3JhbGRpc3BsYXkiLDg3NDcsImludGVncmFsdGV4dCIsODc0NywiaW50ZXJzZWN0aW9uZGlzcGxheSIsODg5OCwiaW50ZXJzZWN0aW9udGV4dCIsODg5OCwibG9naWNhbGFuZGRpc3BsYXkiLDg3NDMsImxvZ2ljYWxhbmR0ZXh0Iiw4NzQzLCJsb2dpY2Fsb3JkaXNwbGF5Iiw4NzQ0LCJsb2dpY2Fsb3J0ZXh0Iiw4NzQ0LCJwYXJlbmxlZnRCaWciLDQwLCJwYXJlbmxlZnRiaWciLDQwLCJwYXJlbmxlZnRCaWdnIiw0MCwicGFyZW5sZWZ0YmlnZyIsNDAsInBhcmVucmlnaHRCaWciLDQxLCJwYXJlbnJpZ2h0YmlnIiw0MSwicGFyZW5yaWdodEJpZ2ciLDQxLCJwYXJlbnJpZ2h0YmlnZyIsNDEsInByaW1lIiw4MjQyLCJwcm9kdWN0ZGlzcGxheSIsODcxOSwicHJvZHVjdHRleHQiLDg3MTksInJhZGljYWxiaWciLDg3MzAsInJhZGljYWxCaWciLDg3MzAsInJhZGljYWxCaWdnIiw4NzMwLCJyYWRpY2FsYmlnZyIsODczMCwicmFkaWNhbGJ0Iiw4NzMwLCJyYWRpY2FsdHAiLDg3MzAsInJhZGljYWx2ZXJ0ZXgiLDg3MzAsInNsYXNoYmlnIiw0Nywic2xhc2hCaWciLDQ3LCJzbGFzaEJpZ2ciLDQ3LCJzbGFzaGJpZ2ciLDQ3LCJzdW1tYXRpb25kaXNwbGF5Iiw4NzIxLCJzdW1tYXRpb250ZXh0Iiw4NzIxLCJ0aWxkZXdpZGUiLDczMiwidGlsZGV3aWRlciIsNzMyLCJ0aWxkZXdpZGVzdCIsNzMyLCJ1bmlvbmRpc3BsYXkiLDg4OTksInVuaW9ubXVsdGlkaXNwbGF5Iiw4ODQ2LCJ1bmlvbm11bHRpdGV4dCIsODg0NiwidW5pb25zcWRpc3BsYXkiLDg4NTIsInVuaW9uc3F0ZXh0Iiw4ODUyLCJ1bmlvbnRleHQiLDg4OTksInZleHRlbmRkb3VibGUiLDg3NDEsInZleHRlbmRzaW5nbGUiLDg3MzldfSkpLGk9KDAsbi5nZXRBcnJheUxvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKCl7cmV0dXJuWyJzcGFjZSIsMzIsImExIiw5OTg1LCJhMiIsOTk4NiwiYTIwMiIsOTk4NywiYTMiLDk5ODgsImE0Iiw5NzQyLCJhNSIsOTk5MCwiYTExOSIsOTk5MSwiYTExOCIsOTk5MiwiYTExNyIsOTk5MywiYTExIiw5NzU1LCJhMTIiLDk3NTgsImExMyIsOTk5NiwiYTE0Iiw5OTk3LCJhMTUiLDk5OTgsImExNiIsOTk5OSwiYTEwNSIsMWU0LCJhMTciLDEwMDAxLCJhMTgiLDEwMDAyLCJhMTkiLDEwMDAzLCJhMjAiLDEwMDA0LCJhMjEiLDEwMDA1LCJhMjIiLDEwMDA2LCJhMjMiLDEwMDA3LCJhMjQiLDEwMDA4LCJhMjUiLDEwMDA5LCJhMjYiLDEwMDEwLCJhMjciLDEwMDExLCJhMjgiLDEwMDEyLCJhNiIsMTAwMTMsImE3IiwxMDAxNCwiYTgiLDEwMDE1LCJhOSIsMTAwMTYsImExMCIsMTAwMTcsImEyOSIsMTAwMTgsImEzMCIsMTAwMTksImEzMSIsMTAwMjAsImEzMiIsMTAwMjEsImEzMyIsMTAwMjIsImEzNCIsMTAwMjMsImEzNSIsOTczMywiYTM2IiwxMDAyNSwiYTM3IiwxMDAyNiwiYTM4IiwxMDAyNywiYTM5IiwxMDAyOCwiYTQwIiwxMDAyOSwiYTQxIiwxMDAzMCwiYTQyIiwxMDAzMSwiYTQzIiwxMDAzMiwiYTQ0IiwxMDAzMywiYTQ1IiwxMDAzNCwiYTQ2IiwxMDAzNSwiYTQ3IiwxMDAzNiwiYTQ4IiwxMDAzNywiYTQ5IiwxMDAzOCwiYTUwIiwxMDAzOSwiYTUxIiwxMDA0MCwiYTUyIiwxMDA0MSwiYTUzIiwxMDA0MiwiYTU0IiwxMDA0MywiYTU1IiwxMDA0NCwiYTU2IiwxMDA0NSwiYTU3IiwxMDA0NiwiYTU4IiwxMDA0NywiYTU5IiwxMDA0OCwiYTYwIiwxMDA0OSwiYTYxIiwxMDA1MCwiYTYyIiwxMDA1MSwiYTYzIiwxMDA1MiwiYTY0IiwxMDA1MywiYTY1IiwxMDA1NCwiYTY2IiwxMDA1NSwiYTY3IiwxMDA1NiwiYTY4IiwxMDA1NywiYTY5IiwxMDA1OCwiYTcwIiwxMDA1OSwiYTcxIiw5Njc5LCJhNzIiLDEwMDYxLCJhNzMiLDk2MzIsImE3NCIsMTAwNjMsImEyMDMiLDEwMDY0LCJhNzUiLDEwMDY1LCJhMjA0IiwxMDA2NiwiYTc2Iiw5NjUwLCJhNzciLDk2NjAsImE3OCIsOTY3MCwiYTc5IiwxMDA3MCwiYTgxIiw5Njg3LCJhODIiLDEwMDcyLCJhODMiLDEwMDczLCJhODQiLDEwMDc0LCJhOTciLDEwMDc1LCJhOTgiLDEwMDc2LCJhOTkiLDEwMDc3LCJhMTAwIiwxMDA3OCwiYTEwMSIsMTAwODEsImExMDIiLDEwMDgyLCJhMTAzIiwxMDA4MywiYTEwNCIsMTAwODQsImExMDYiLDEwMDg1LCJhMTA3IiwxMDA4NiwiYTEwOCIsMTAwODcsImExMTIiLDk4MjcsImExMTEiLDk4MzAsImExMTAiLDk4MjksImExMDkiLDk4MjQsImExMjAiLDkzMTIsImExMjEiLDkzMTMsImExMjIiLDkzMTQsImExMjMiLDkzMTUsImExMjQiLDkzMTYsImExMjUiLDkzMTcsImExMjYiLDkzMTgsImExMjciLDkzMTksImExMjgiLDkzMjAsImExMjkiLDkzMjEsImExMzAiLDEwMTAyLCJhMTMxIiwxMDEwMywiYTEzMiIsMTAxMDQsImExMzMiLDEwMTA1LCJhMTM0IiwxMDEwNiwiYTEzNSIsMTAxMDcsImExMzYiLDEwMTA4LCJhMTM3IiwxMDEwOSwiYTEzOCIsMTAxMTAsImExMzkiLDEwMTExLCJhMTQwIiwxMDExMiwiYTE0MSIsMTAxMTMsImExNDIiLDEwMTE0LCJhMTQzIiwxMDExNSwiYTE0NCIsMTAxMTYsImExNDUiLDEwMTE3LCJhMTQ2IiwxMDExOCwiYTE0NyIsMTAxMTksImExNDgiLDEwMTIwLCJhMTQ5IiwxMDEyMSwiYTE1MCIsMTAxMjIsImExNTEiLDEwMTIzLCJhMTUyIiwxMDEyNCwiYTE1MyIsMTAxMjUsImExNTQiLDEwMTI2LCJhMTU1IiwxMDEyNywiYTE1NiIsMTAxMjgsImExNTciLDEwMTI5LCJhMTU4IiwxMDEzMCwiYTE1OSIsMTAxMzEsImExNjAiLDEwMTMyLCJhMTYxIiw4NTk0LCJhMTYzIiw4NTk2LCJhMTY0Iiw4NTk3LCJhMTk2IiwxMDEzNiwiYTE2NSIsMTAxMzcsImExOTIiLDEwMTM4LCJhMTY2IiwxMDEzOSwiYTE2NyIsMTAxNDAsImExNjgiLDEwMTQxLCJhMTY5IiwxMDE0MiwiYTE3MCIsMTAxNDMsImExNzEiLDEwMTQ0LCJhMTcyIiwxMDE0NSwiYTE3MyIsMTAxNDYsImExNjIiLDEwMTQ3LCJhMTc0IiwxMDE0OCwiYTE3NSIsMTAxNDksImExNzYiLDEwMTUwLCJhMTc3IiwxMDE1MSwiYTE3OCIsMTAxNTIsImExNzkiLDEwMTUzLCJhMTkzIiwxMDE1NCwiYTE4MCIsMTAxNTUsImExOTkiLDEwMTU2LCJhMTgxIiwxMDE1NywiYTIwMCIsMTAxNTgsImExODIiLDEwMTU5LCJhMjAxIiwxMDE2MSwiYTE4MyIsMTAxNjIsImExODQiLDEwMTYzLCJhMTk3IiwxMDE2NCwiYTE4NSIsMTAxNjUsImExOTQiLDEwMTY2LCJhMTk4IiwxMDE2NywiYTE4NiIsMTAxNjgsImExOTUiLDEwMTY5LCJhMTg3IiwxMDE3MCwiYTE4OCIsMTAxNzEsImExODkiLDEwMTcyLCJhMTkwIiwxMDE3MywiYTE5MSIsMTAxNzQsImE4OSIsMTAwODgsImE5MCIsMTAwODksImE5MyIsMTAwOTAsImE5NCIsMTAwOTEsImE5MSIsMTAwOTIsImE5MiIsMTAwOTMsImEyMDUiLDEwMDk0LCJhODUiLDEwMDk1LCJhMjA2IiwxMDA5NiwiYTg2IiwxMDA5NywiYTg3IiwxMDA5OCwiYTg4IiwxMDA5OSwiYTk1IiwxMDEwMCwiYTk2IiwxMDEwMSwiLm5vdGRlZiIsMF19KSl9LChlLHQscik9PntyLnIodCksci5kKHQse2NsZWFyVW5pY29kZUNhY2hlczooKT0+cCxnZXRDaGFyVW5pY29kZUNhdGVnb3J5OigpPT5kLGdldE5vcm1hbGl6ZWRVbmljb2RlczooKT0+dSxnZXRVbmljb2RlRm9yR2x5cGg6KCk9Pm8sZ2V0VW5pY29kZVJhbmdlRm9yOigpPT5jLG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzOigpPT5pLHJldmVyc2VJZlJ0bDooKT0+bH0pO3ZhciBuPXIoMTM1KTtjb25zdCBhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVs2MzcyMV09MTY5LGVbNjMxOTNdPTE2OSxlWzYzNzIwXT0xNzQsZVs2MzE5NF09MTc0LGVbNjM3MjJdPTg0ODIsZVs2MzE5NV09ODQ4MixlWzYzNzI5XT05MTI3LGVbNjM3MzBdPTkxMjgsZVs2MzczMV09OTEyOSxlWzYzNzQwXT05MTMxLGVbNjM3NDFdPTkxMzIsZVs2Mzc0Ml09OTEzMyxlWzYzNzI2XT05MTIxLGVbNjM3MjddPTkxMjIsZVs2MzcyOF09OTEyMyxlWzYzNzM3XT05MTI0LGVbNjM3MzhdPTkxMjUsZVs2MzczOV09OTEyNixlWzYzNzIzXT05MTE1LGVbNjM3MjRdPTkxMTYsZVs2MzcyNV09OTExNyxlWzYzNzM0XT05MTE4LGVbNjM3MzVdPTkxMTksZVs2MzczNl09OTEyMH0pKTtmdW5jdGlvbiBpKGUpe3JldHVybiBlPj02NTUyMCYmZTw9NjU1MzU/MDplPj02Mjk3NiYmZTw9NjM3NDM/YSgpW2VdfHxlOjE3Mz09PWU/NDU6ZX1mdW5jdGlvbiBvKGUsdCl7bGV0IHI9dFtlXTtpZih2b2lkIDAhPT1yKXJldHVybiByO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pbj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7bj1lLnN1YnN0cmluZygxKX1pZihuPT09bi50b1VwcGVyQ2FzZSgpJiYocj1wYXJzZUludChuLDE2KSxyPj0wKSlyZXR1cm4gcn1yZXR1cm4tMX1jb25zdCBzPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XTtmdW5jdGlvbiBjKGUpe2ZvcihsZXQgdD0wLHI9cy5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1zW3RdO2lmKGU+PXIuYmVnaW4mJmU8ci5lbmQpcmV0dXJuIHR9cmV0dXJuLTF9Y29uc3QgdT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIsKoIiwiIMyIIiwiwq8iLCIgzIQiLCLCtCIsIiDMgSIsIsK1IiwizrwiLCLCuCIsIiDMpyIsIsSyIiwiSUoiLCLEsyIsImlqIiwixL8iLCJMwrciLCLFgCIsImzCtyIsIsWJIiwiyrxuIiwixb8iLCJzIiwix4QiLCJExb0iLCLHhSIsIkTFviIsIseGIiwiZMW+Iiwix4ciLCJMSiIsIseIIiwiTGoiLCLHiSIsImxqIiwix4oiLCJOSiIsIseLIiwiTmoiLCLHjCIsIm5qIiwix7EiLCJEWiIsIseyIiwiRHoiLCLHsyIsImR6Iiwiy5giLCIgzIYiLCLLmSIsIiDMhyIsIsuaIiwiIMyKIiwiy5siLCIgzKgiLCLLnCIsIiDMgyIsIsudIiwiIMyLIiwizboiLCIgzYUiLCLOhCIsIiDMgSIsIs+QIiwizrIiLCLPkSIsIs64Iiwiz5IiLCLOpSIsIs+VIiwiz4YiLCLPliIsIs+AIiwiz7AiLCLOuiIsIs+xIiwiz4EiLCLPsiIsIs+CIiwiz7QiLCLOmCIsIs+1IiwizrUiLCLPuSIsIs6jIiwi1ociLCLVpdaCIiwi2bUiLCLYp9m0Iiwi2bYiLCLZiNm0Iiwi2bciLCLbh9m0Iiwi2bgiLCLZitm0Iiwi4LizIiwi4LmN4LiyIiwi4LqzIiwi4LuN4LqyIiwi4LucIiwi4Lqr4LqZIiwi4LudIiwi4Lqr4LqhIiwi4L23Iiwi4L6y4L6BIiwi4L25Iiwi4L6z4L6BIiwi4bqaIiwiYcq+Iiwi4b69IiwiIMyTIiwi4b6/IiwiIMyTIiwi4b+AIiwiIM2CIiwi4b++IiwiIMyUIiwi4oCCIiwiICIsIuKAgyIsIiAiLCLigIQiLCIgIiwi4oCFIiwiICIsIuKAhiIsIiAiLCLigIgiLCIgIiwi4oCJIiwiICIsIuKAiiIsIiAiLCLigJciLCIgzLMiLCLigKQiLCIuIiwi4oClIiwiLi4iLCLigKYiLCIuLi4iLCLigLMiLCLigLLigLIiLCLigLQiLCLigLLigLLigLIiLCLigLYiLCLigLXigLUiLCLigLciLCLigLXigLXigLUiLCLigLwiLCIhISIsIuKAviIsIiDMhSIsIuKBhyIsIj8/Iiwi4oGIIiwiPyEiLCLigYkiLCIhPyIsIuKBlyIsIuKAsuKAsuKAsuKAsiIsIuKBnyIsIiAiLCLigqgiLCJScyIsIuKEgCIsImEvYyIsIuKEgSIsImEvcyIsIuKEgyIsIsKwQyIsIuKEhSIsImMvbyIsIuKEhiIsImMvdSIsIuKEhyIsIsaQIiwi4oSJIiwiwrBGIiwi4oSWIiwiTm8iLCLihKEiLCJURUwiLCLihLUiLCLXkCIsIuKEtiIsIteRIiwi4oS3Iiwi15IiLCLihLgiLCLXkyIsIuKEuyIsIkZBWCIsIuKFoCIsIkkiLCLihaEiLCJJSSIsIuKFoiIsIklJSSIsIuKFoyIsIklWIiwi4oWkIiwiViIsIuKFpSIsIlZJIiwi4oWmIiwiVklJIiwi4oWnIiwiVklJSSIsIuKFqCIsIklYIiwi4oWpIiwiWCIsIuKFqiIsIlhJIiwi4oWrIiwiWElJIiwi4oWsIiwiTCIsIuKFrSIsIkMiLCLiha4iLCJEIiwi4oWvIiwiTSIsIuKFsCIsImkiLCLihbEiLCJpaSIsIuKFsiIsImlpaSIsIuKFsyIsIml2Iiwi4oW0IiwidiIsIuKFtSIsInZpIiwi4oW2IiwidmlpIiwi4oW3IiwidmlpaSIsIuKFuCIsIml4Iiwi4oW5IiwieCIsIuKFuiIsInhpIiwi4oW7IiwieGlpIiwi4oW8IiwibCIsIuKFvSIsImMiLCLihb4iLCJkIiwi4oW/IiwibSIsIuKIrCIsIuKIq+KIqyIsIuKIrSIsIuKIq+KIq+KIqyIsIuKIryIsIuKIruKIriIsIuKIsCIsIuKIruKIruKIriIsIuKRtCIsIigxKSIsIuKRtSIsIigyKSIsIuKRtiIsIigzKSIsIuKRtyIsIig0KSIsIuKRuCIsIig1KSIsIuKRuSIsIig2KSIsIuKRuiIsIig3KSIsIuKRuyIsIig4KSIsIuKRvCIsIig5KSIsIuKRvSIsIigxMCkiLCLikb4iLCIoMTEpIiwi4pG/IiwiKDEyKSIsIuKSgCIsIigxMykiLCLikoEiLCIoMTQpIiwi4pKCIiwiKDE1KSIsIuKSgyIsIigxNikiLCLikoQiLCIoMTcpIiwi4pKFIiwiKDE4KSIsIuKShiIsIigxOSkiLCLikociLCIoMjApIiwi4pKIIiwiMS4iLCLikokiLCIyLiIsIuKSiiIsIjMuIiwi4pKLIiwiNC4iLCLikowiLCI1LiIsIuKSjSIsIjYuIiwi4pKOIiwiNy4iLCLiko8iLCI4LiIsIuKSkCIsIjkuIiwi4pKRIiwiMTAuIiwi4pKSIiwiMTEuIiwi4pKTIiwiMTIuIiwi4pKUIiwiMTMuIiwi4pKVIiwiMTQuIiwi4pKWIiwiMTUuIiwi4pKXIiwiMTYuIiwi4pKYIiwiMTcuIiwi4pKZIiwiMTguIiwi4pKaIiwiMTkuIiwi4pKbIiwiMjAuIiwi4pKcIiwiKGEpIiwi4pKdIiwiKGIpIiwi4pKeIiwiKGMpIiwi4pKfIiwiKGQpIiwi4pKgIiwiKGUpIiwi4pKhIiwiKGYpIiwi4pKiIiwiKGcpIiwi4pKjIiwiKGgpIiwi4pKkIiwiKGkpIiwi4pKlIiwiKGopIiwi4pKmIiwiKGspIiwi4pKnIiwiKGwpIiwi4pKoIiwiKG0pIiwi4pKpIiwiKG4pIiwi4pKqIiwiKG8pIiwi4pKrIiwiKHApIiwi4pKsIiwiKHEpIiwi4pKtIiwiKHIpIiwi4pKuIiwiKHMpIiwi4pKvIiwiKHQpIiwi4pKwIiwiKHUpIiwi4pKxIiwiKHYpIiwi4pKyIiwiKHcpIiwi4pKzIiwiKHgpIiwi4pK0IiwiKHkpIiwi4pK1IiwiKHopIiwi4qiMIiwi4oir4oir4oir4oirIiwi4qm0IiwiOjo9Iiwi4qm1IiwiPT0iLCLiqbYiLCI9PT0iLCLiup8iLCLmr40iLCLiu7MiLCLpvp8iLCLivIAiLCLkuIAiLCLivIEiLCLkuKgiLCLivIIiLCLkuLYiLCLivIMiLCLkuL8iLCLivIQiLCLkuZkiLCLivIUiLCLkuoUiLCLivIYiLCLkuowiLCLivIciLCLkuqAiLCLivIgiLCLkuroiLCLivIkiLCLlhL8iLCLivIoiLCLlhaUiLCLivIsiLCLlhasiLCLivIwiLCLlhoIiLCLivI0iLCLlhpYiLCLivI4iLCLlhqsiLCLivI8iLCLlh6AiLCLivJAiLCLlh7UiLCLivJEiLCLliIAiLCLivJIiLCLlipsiLCLivJMiLCLli7kiLCLivJQiLCLljJUiLCLivJUiLCLljJoiLCLivJYiLCLljLgiLCLivJciLCLljYEiLCLivJgiLCLljZwiLCLivJkiLCLljakiLCLivJoiLCLljoIiLCLivJsiLCLljrYiLCLivJwiLCLlj4giLCLivJ0iLCLlj6MiLCLivJ4iLCLlm5ciLCLivJ8iLCLlnJ8iLCLivKAiLCLlo6siLCLivKEiLCLlpIIiLCLivKIiLCLlpIoiLCLivKMiLCLlpJUiLCLivKQiLCLlpKciLCLivKUiLCLlpbMiLCLivKYiLCLlrZAiLCLivKciLCLlroAiLCLivKgiLCLlr7giLCLivKkiLCLlsI8iLCLivKoiLCLlsKIiLCLivKsiLCLlsLgiLCLivKwiLCLlsa4iLCLivK0iLCLlsbEiLCLivK4iLCLlt5siLCLivK8iLCLlt6UiLCLivLAiLCLlt7EiLCLivLEiLCLlt74iLCLivLIiLCLlubIiLCLivLMiLCLluboiLCLivLQiLCLlub8iLCLivLUiLCLlu7QiLCLivLYiLCLlu74iLCLivLciLCLlvIsiLCLivLgiLCLlvJMiLCLivLkiLCLlvZAiLCLivLoiLCLlvaEiLCLivLsiLCLlvbMiLCLivLwiLCLlv4MiLCLivL0iLCLmiIgiLCLivL4iLCLmiLYiLCLivL8iLCLmiYsiLCLivYAiLCLmlK8iLCLivYEiLCLmlLQiLCLivYIiLCLmlociLCLivYMiLCLmlpciLCLivYQiLCLmlqQiLCLivYUiLCLmlrkiLCLivYYiLCLml6AiLCLivYciLCLml6UiLCLivYgiLCLmm7AiLCLivYkiLCLmnIgiLCLivYoiLCLmnKgiLCLivYsiLCLmrKAiLCLivYwiLCLmraIiLCLivY0iLCLmrbkiLCLivY4iLCLmrrMiLCLivY8iLCLmr4siLCLivZAiLCLmr5QiLCLivZEiLCLmr5siLCLivZIiLCLmsI8iLCLivZMiLCLmsJQiLCLivZQiLCLmsLQiLCLivZUiLCLngasiLCLivZYiLCLniKoiLCLivZciLCLniLYiLCLivZgiLCLniLsiLCLivZkiLCLniL8iLCLivZoiLCLniYciLCLivZsiLCLniZkiLCLivZwiLCLniZsiLCLivZ0iLCLniqwiLCLivZ4iLCLnjoQiLCLivZ8iLCLnjokiLCLivaAiLCLnk5wiLCLivaEiLCLnk6YiLCLivaIiLCLnlJgiLCLivaMiLCLnlJ8iLCLivaQiLCLnlKgiLCLivaUiLCLnlLAiLCLivaYiLCLnlosiLCLivaciLCLnlpIiLCLivagiLCLnmbYiLCLivakiLCLnmb0iLCLivaoiLCLnmq4iLCLivasiLCLnmr8iLCLivawiLCLnm64iLCLiva0iLCLnn5siLCLiva4iLCLnn6IiLCLiva8iLCLnn7MiLCLivbAiLCLnpLoiLCLivbEiLCLnprgiLCLivbIiLCLnpr4iLCLivbMiLCLnqbQiLCLivbQiLCLnq4siLCLivbUiLCLnq7kiLCLivbYiLCLnsbMiLCLivbciLCLns7giLCLivbgiLCLnvLYiLCLivbkiLCLnvZEiLCLivboiLCLnvooiLCLivbsiLCLnvr0iLCLivbwiLCLogIEiLCLivb0iLCLogIwiLCLivb4iLCLogJIiLCLivb8iLCLogLMiLCLivoAiLCLogb8iLCLivoEiLCLogokiLCLivoIiLCLoh6MiLCLivoMiLCLoh6oiLCLivoQiLCLoh7MiLCLivoUiLCLoh7wiLCLivoYiLCLoiIwiLCLivociLCLoiJsiLCLivogiLCLoiJ8iLCLivokiLCLoia4iLCLivooiLCLoibIiLCLivosiLCLoibgiLCLivowiLCLomY0iLCLivo0iLCLomasiLCLivo4iLCLooYAiLCLivo8iLCLooYwiLCLivpAiLCLooaMiLCLivpEiLCLopb4iLCLivpIiLCLoposiLCLivpMiLCLop5IiLCLivpQiLCLoqIAiLCLivpUiLCLosLciLCLivpYiLCLosYYiLCLivpciLCLosZUiLCLivpgiLCLosbgiLCLivpkiLCLosp0iLCLivpoiLCLotaQiLCLivpsiLCLotbAiLCLivpwiLCLotrMiLCLivp0iLCLouqsiLCLivp4iLCLou4oiLCLivp8iLCLovpsiLCLivqAiLCLovrAiLCLivqEiLCLovrUiLCLivqIiLCLpgpEiLCLivqMiLCLphYkiLCLivqQiLCLph4YiLCLivqUiLCLph4wiLCLivqYiLCLph5EiLCLivqciLCLplbciLCLivqgiLCLploAiLCLivqkiLCLpmJwiLCLivqoiLCLpmrYiLCLivqsiLCLpmrkiLCLivqwiLCLpm6giLCLivq0iLCLpnZEiLCLivq4iLCLpnZ4iLCLivq8iLCLpnaIiLCLivrAiLCLpnakiLCLivrEiLCLpn4siLCLivrIiLCLpn60iLCLivrMiLCLpn7MiLCLivrQiLCLpoIEiLCLivrUiLCLpoqgiLCLivrYiLCLpo5siLCLivrciLCLpo58iLCLivrgiLCLpppYiLCLivrkiLCLpppkiLCLivroiLCLppqwiLCLivrsiLCLpqqgiLCLivrwiLCLpq5giLCLivr0iLCLpq58iLCLivr4iLCLprKUiLCLivr8iLCLprK8iLCLiv4AiLCLprLIiLCLiv4EiLCLprLwiLCLiv4IiLCLprZoiLCLiv4MiLCLps6UiLCLiv4QiLCLpubUiLCLiv4UiLCLpub8iLCLiv4YiLCLpuqUiLCLiv4ciLCLpursiLCLiv4giLCLpu4MiLCLiv4kiLCLpu40iLCLiv4oiLCLpu5EiLCLiv4siLCLpu7kiLCLiv4wiLCLpu70iLCLiv40iLCLpvI4iLCLiv44iLCLpvJMiLCLiv48iLCLpvKAiLCLiv5AiLCLpvLsiLCLiv5EiLCLpvYoiLCLiv5IiLCLpvZIiLCLiv5MiLCLpvo0iLCLiv5QiLCLpvpwiLCLiv5UiLCLpvqAiLCLjgLYiLCLjgJIiLCLjgLgiLCLljYEiLCLjgLkiLCLljYQiLCLjgLoiLCLljYUiLCLjgpsiLCIg44KZIiwi44KcIiwiIOOCmiIsIuOEsSIsIuGEgCIsIuOEsiIsIuGEgSIsIuOEsyIsIuGGqiIsIuOEtCIsIuGEgiIsIuOEtSIsIuGGrCIsIuOEtiIsIuGGrSIsIuOEtyIsIuGEgyIsIuOEuCIsIuGEhCIsIuOEuSIsIuGEhSIsIuOEuiIsIuGGsCIsIuOEuyIsIuGGsSIsIuOEvCIsIuGGsiIsIuOEvSIsIuGGsyIsIuOEviIsIuGGtCIsIuOEvyIsIuGGtSIsIuOFgCIsIuGEmiIsIuOFgSIsIuGEhiIsIuOFgiIsIuGEhyIsIuOFgyIsIuGEiCIsIuOFhCIsIuGEoSIsIuOFhSIsIuGEiSIsIuOFhiIsIuGEiiIsIuOFhyIsIuGEiyIsIuOFiCIsIuGEjCIsIuOFiSIsIuGEjSIsIuOFiiIsIuGEjiIsIuOFiyIsIuGEjyIsIuOFjCIsIuGEkCIsIuOFjSIsIuGEkSIsIuOFjiIsIuGEkiIsIuOFjyIsIuGFoSIsIuOFkCIsIuGFoiIsIuOFkSIsIuGFoyIsIuOFkiIsIuGFpCIsIuOFkyIsIuGFpSIsIuOFlCIsIuGFpiIsIuOFlSIsIuGFpyIsIuOFliIsIuGFqCIsIuOFlyIsIuGFqSIsIuOFmCIsIuGFqiIsIuOFmSIsIuGFqyIsIuOFmiIsIuGFrCIsIuOFmyIsIuGFrSIsIuOFnCIsIuGFriIsIuOFnSIsIuGFryIsIuOFniIsIuGFsCIsIuOFnyIsIuGFsSIsIuOFoCIsIuGFsiIsIuOFoSIsIuGFsyIsIuOFoiIsIuGFtCIsIuOFoyIsIuGFtSIsIuOFpCIsIuGFoCIsIuOFpSIsIuGElCIsIuOFpiIsIuGElSIsIuOFpyIsIuGHhyIsIuOFqCIsIuGHiCIsIuOFqSIsIuGHjCIsIuOFqiIsIuGHjiIsIuOFqyIsIuGHkyIsIuOFrCIsIuGHlyIsIuOFrSIsIuGHmSIsIuOFriIsIuGEnCIsIuOFryIsIuGHnSIsIuOFsCIsIuGHnyIsIuOFsSIsIuGEnSIsIuOFsiIsIuGEniIsIuOFsyIsIuGEoCIsIuOFtCIsIuGEoiIsIuOFtSIsIuGEoyIsIuOFtiIsIuGEpyIsIuOFtyIsIuGEqSIsIuOFuCIsIuGEqyIsIuOFuSIsIuGErCIsIuOFuiIsIuGErSIsIuOFuyIsIuGEriIsIuOFvCIsIuGEryIsIuOFvSIsIuGEsiIsIuOFviIsIuGEtiIsIuOFvyIsIuGFgCIsIuOGgCIsIuGFhyIsIuOGgSIsIuGFjCIsIuOGgiIsIuGHsSIsIuOGgyIsIuGHsiIsIuOGhCIsIuGFlyIsIuOGhSIsIuGFmCIsIuOGhiIsIuGFmSIsIuOGhyIsIuGGhCIsIuOGiCIsIuGGhSIsIuOGiSIsIuGGiCIsIuOGiiIsIuGGkSIsIuOGiyIsIuGGkiIsIuOGjCIsIuGGlCIsIuOGjSIsIuGGniIsIuOGjiIsIuGGoSIsIuOIgCIsIijhhIApIiwi44iBIiwiKOGEgikiLCLjiIIiLCIo4YSDKSIsIuOIgyIsIijhhIUpIiwi44iEIiwiKOGEhikiLCLjiIUiLCIo4YSHKSIsIuOIhiIsIijhhIkpIiwi44iHIiwiKOGEiykiLCLjiIgiLCIo4YSMKSIsIuOIiSIsIijhhI4pIiwi44iKIiwiKOGEjykiLCLjiIsiLCIo4YSQKSIsIuOIjCIsIijhhJEpIiwi44iNIiwiKOGEkikiLCLjiI4iLCIo4YSA4YWhKSIsIuOIjyIsIijhhILhhaEpIiwi44iQIiwiKOGEg+GFoSkiLCLjiJEiLCIo4YSF4YWhKSIsIuOIkiIsIijhhIbhhaEpIiwi44iTIiwiKOGEh+GFoSkiLCLjiJQiLCIo4YSJ4YWhKSIsIuOIlSIsIijhhIvhhaEpIiwi44iWIiwiKOGEjOGFoSkiLCLjiJciLCIo4YSO4YWhKSIsIuOImCIsIijhhI/hhaEpIiwi44iZIiwiKOGEkOGFoSkiLCLjiJoiLCIo4YSR4YWhKSIsIuOImyIsIijhhJLhhaEpIiwi44icIiwiKOGEjOGFrikiLCLjiJ0iLCIo4YSL4YWp4YSM4YWl4YarKSIsIuOIniIsIijhhIvhhanhhJLhha4pIiwi44igIiwiKOS4gCkiLCLjiKEiLCIo5LqMKSIsIuOIoiIsIijkuIkpIiwi44ijIiwiKOWbmykiLCLjiKQiLCIo5LqUKSIsIuOIpSIsIijlha0pIiwi44imIiwiKOS4gykiLCLjiKciLCIo5YWrKSIsIuOIqCIsIijkuZ0pIiwi44ipIiwiKOWNgSkiLCLjiKoiLCIo5pyIKSIsIuOIqyIsIijngaspIiwi44isIiwiKOawtCkiLCLjiK0iLCIo5pyoKSIsIuOIriIsIijph5EpIiwi44ivIiwiKOWcnykiLCLjiLAiLCIo5pelKSIsIuOIsSIsIijmoKopIiwi44iyIiwiKOaciSkiLCLjiLMiLCIo56S+KSIsIuOItCIsIijlkI0pIiwi44i1IiwiKOeJuSkiLCLjiLYiLCIo6LKhKSIsIuOItyIsIijnpZ0pIiwi44i4IiwiKOWKtCkiLCLjiLkiLCIo5LujKSIsIuOIuiIsIijlkbwpIiwi44i7IiwiKOWtpikiLCLjiLwiLCIo55ujKSIsIuOIvSIsIijkvIEpIiwi44i+IiwiKOizhykiLCLjiL8iLCIo5Y2UKSIsIuOJgCIsIijnpa0pIiwi44mBIiwiKOS8kSkiLCLjiYIiLCIo6IeqKSIsIuOJgyIsIijoh7MpIiwi44uAIiwiMeaciCIsIuOLgSIsIjLmnIgiLCLji4IiLCIz5pyIIiwi44uDIiwiNOaciCIsIuOLhCIsIjXmnIgiLCLji4UiLCI25pyIIiwi44uGIiwiN+aciCIsIuOLhyIsIjjmnIgiLCLji4giLCI55pyIIiwi44uJIiwiMTDmnIgiLCLji4oiLCIxMeaciCIsIuOLiyIsIjEy5pyIIiwi442YIiwiMOeCuSIsIuONmSIsIjHngrkiLCLjjZoiLCIy54K5Iiwi442bIiwiM+eCuSIsIuONnCIsIjTngrkiLCLjjZ0iLCI154K5Iiwi442eIiwiNueCuSIsIuONnyIsIjfngrkiLCLjjaAiLCI454K5Iiwi442hIiwiOeeCuSIsIuONoiIsIjEw54K5Iiwi442jIiwiMTHngrkiLCLjjaQiLCIxMueCuSIsIuONpSIsIjEz54K5Iiwi442mIiwiMTTngrkiLCLjjaciLCIxNeeCuSIsIuONqCIsIjE254K5Iiwi442pIiwiMTfngrkiLCLjjaoiLCIxOOeCuSIsIuONqyIsIjE554K5Iiwi442sIiwiMjDngrkiLCLjja0iLCIyMeeCuSIsIuONriIsIjIy54K5Iiwi442vIiwiMjPngrkiLCLjjbAiLCIyNOeCuSIsIuOPoCIsIjHml6UiLCLjj6EiLCIy5pelIiwi44+iIiwiM+aXpSIsIuOPoyIsIjTml6UiLCLjj6QiLCI15pelIiwi44+lIiwiNuaXpSIsIuOPpiIsIjfml6UiLCLjj6ciLCI45pelIiwi44+oIiwiOeaXpSIsIuOPqSIsIjEw5pelIiwi44+qIiwiMTHml6UiLCLjj6siLCIxMuaXpSIsIuOPrCIsIjEz5pelIiwi44+tIiwiMTTml6UiLCLjj64iLCIxNeaXpSIsIuOPryIsIjE25pelIiwi44+wIiwiMTfml6UiLCLjj7EiLCIxOOaXpSIsIuOPsiIsIjE55pelIiwi44+zIiwiMjDml6UiLCLjj7QiLCIyMeaXpSIsIuOPtSIsIjIy5pelIiwi44+2IiwiMjPml6UiLCLjj7ciLCIyNOaXpSIsIuOPuCIsIjI15pelIiwi44+5IiwiMjbml6UiLCLjj7oiLCIyN+aXpSIsIuOPuyIsIjI45pelIiwi44+8IiwiMjnml6UiLCLjj70iLCIzMOaXpSIsIuOPviIsIjMx5pelIiwi76yAIiwiZmYiLCLvrIEiLCJmaSIsIu+sgiIsImZsIiwi76yDIiwiZmZpIiwi76yEIiwiZmZsIiwi76yFIiwixb90Iiwi76yGIiwic3QiLCLvrJMiLCLVtNW2Iiwi76yUIiwi1bTVpSIsIu+slSIsItW01asiLCLvrJYiLCLVvtW2Iiwi76yXIiwi1bTVrSIsIu+tjyIsIteQ15wiLCLvrZAiLCLZsSIsIu+tkSIsItmxIiwi762SIiwi2bsiLCLvrZMiLCLZuyIsIu+tlCIsItm7Iiwi762VIiwi2bsiLCLvrZYiLCLZviIsIu+tlyIsItm+Iiwi762YIiwi2b4iLCLvrZkiLCLZviIsIu+tmiIsItqAIiwi762bIiwi2oAiLCLvrZwiLCLagCIsIu+tnSIsItqAIiwi762eIiwi2boiLCLvrZ8iLCLZuiIsIu+toCIsItm6Iiwi762hIiwi2boiLCLvraIiLCLZvyIsIu+toyIsItm/Iiwi762kIiwi2b8iLCLvraUiLCLZvyIsIu+tpiIsItm5Iiwi762nIiwi2bkiLCLvragiLCLZuSIsIu+tqSIsItm5Iiwi762qIiwi2qQiLCLvrasiLCLapCIsIu+trCIsItqkIiwi762tIiwi2qQiLCLvra4iLCLapiIsIu+tryIsItqmIiwi762wIiwi2qYiLCLvrbEiLCLapiIsIu+tsiIsItqEIiwi762zIiwi2oQiLCLvrbQiLCLahCIsIu+ttSIsItqEIiwi7622Iiwi2oMiLCLvrbciLCLagyIsIu+tuCIsItqDIiwi7625Iiwi2oMiLCLvrboiLCLahiIsIu+tuyIsItqGIiwi7628Iiwi2oYiLCLvrb0iLCLahiIsIu+tviIsItqHIiwi762/Iiwi2ociLCLvroAiLCLahyIsIu+ugSIsItqHIiwi766CIiwi2o0iLCLvroMiLCLajSIsIu+uhCIsItqMIiwi766FIiwi2owiLCLvroYiLCLajiIsIu+uhyIsItqOIiwi766IIiwi2ogiLCLvrokiLCLaiCIsIu+uiiIsItqYIiwi766LIiwi2pgiLCLvrowiLCLakSIsIu+ujSIsItqRIiwi766OIiwi2qkiLCLvro8iLCLaqSIsIu+ukCIsItqpIiwi766RIiwi2qkiLCLvrpIiLCLaryIsIu+ukyIsItqvIiwi766UIiwi2q8iLCLvrpUiLCLaryIsIu+uliIsItqzIiwi766XIiwi2rMiLCLvrpgiLCLasyIsIu+umSIsItqzIiwi766aIiwi2rEiLCLvrpsiLCLasSIsIu+unCIsItqxIiwi766dIiwi2rEiLCLvrp4iLCLauiIsIu+unyIsItq6Iiwi766gIiwi2rsiLCLvrqEiLCLauyIsIu+uoiIsItq7Iiwi766jIiwi2rsiLCLvrqQiLCLbgCIsIu+upSIsItuAIiwi766mIiwi24EiLCLvrqciLCLbgSIsIu+uqCIsItuBIiwi766pIiwi24EiLCLvrqoiLCLaviIsIu+uqyIsItq+Iiwi766sIiwi2r4iLCLvrq0iLCLaviIsIu+uriIsItuSIiwi766vIiwi25IiLCLvrrAiLCLbkyIsIu+usSIsItuTIiwi76+TIiwi2q0iLCLvr5QiLCLarSIsIu+vlSIsItqtIiwi76+WIiwi2q0iLCLvr5ciLCLbhyIsIu+vmCIsItuHIiwi76+ZIiwi24YiLCLvr5oiLCLbhiIsIu+vmyIsItuIIiwi76+cIiwi24giLCLvr50iLCLZtyIsIu+vniIsItuLIiwi76+fIiwi24siLCLvr6AiLCLbhSIsIu+voSIsItuFIiwi76+iIiwi24kiLCLvr6MiLCLbiSIsIu+vpCIsItuQIiwi76+lIiwi25AiLCLvr6YiLCLbkCIsIu+vpyIsItuQIiwi76+oIiwi2YkiLCLvr6kiLCLZiSIsIu+vqiIsItim2KciLCLvr6siLCLYptinIiwi76+sIiwi2KbblSIsIu+vrSIsItim25UiLCLvr64iLCLYptmIIiwi76+vIiwi2KbZiCIsIu+vsCIsItim24ciLCLvr7EiLCLYptuHIiwi76+yIiwi2KbbhiIsIu+vsyIsItim24YiLCLvr7QiLCLYptuIIiwi76+1Iiwi2KbbiCIsIu+vtiIsItim25AiLCLvr7ciLCLYptuQIiwi76+4Iiwi2KbbkCIsIu+vuSIsItim2YkiLCLvr7oiLCLYptmJIiwi76+7Iiwi2KbZiSIsIu+vvCIsItuMIiwi76+9Iiwi24wiLCLvr74iLCLbjCIsIu+vvyIsItuMIiwi77CAIiwi2KbYrCIsIu+wgSIsItim2K0iLCLvsIIiLCLYptmFIiwi77CDIiwi2KbZiSIsIu+whCIsItim2YoiLCLvsIUiLCLYqNisIiwi77CGIiwi2KjYrSIsIu+whyIsItio2K4iLCLvsIgiLCLYqNmFIiwi77CJIiwi2KjZiSIsIu+wiiIsItio2YoiLCLvsIsiLCLYqtisIiwi77CMIiwi2KrYrSIsIu+wjSIsItiq2K4iLCLvsI4iLCLYqtmFIiwi77CPIiwi2KrZiSIsIu+wkCIsItiq2YoiLCLvsJEiLCLYq9isIiwi77CSIiwi2KvZhSIsIu+wkyIsItir2YkiLCLvsJQiLCLYq9mKIiwi77CVIiwi2KzYrSIsIu+wliIsItis2YUiLCLvsJciLCLYrdisIiwi77CYIiwi2K3ZhSIsIu+wmSIsItiu2KwiLCLvsJoiLCLYrtitIiwi77CbIiwi2K7ZhSIsIu+wnCIsItiz2KwiLCLvsJ0iLCLYs9itIiwi77CeIiwi2LPYriIsIu+wnyIsItiz2YUiLCLvsKAiLCLYtditIiwi77ChIiwi2LXZhSIsIu+woiIsIti22KwiLCLvsKMiLCLYttitIiwi77CkIiwi2LbYriIsIu+wpSIsIti22YUiLCLvsKYiLCLYt9itIiwi77CnIiwi2LfZhSIsIu+wqCIsIti42YUiLCLvsKkiLCLYudisIiwi77CqIiwi2LnZhSIsIu+wqyIsIti62KwiLCLvsKwiLCLYutmFIiwi77CtIiwi2YHYrCIsIu+wriIsItmB2K0iLCLvsK8iLCLZgdiuIiwi77CwIiwi2YHZhSIsIu+wsSIsItmB2YkiLCLvsLIiLCLZgdmKIiwi77CzIiwi2YLYrSIsIu+wtCIsItmC2YUiLCLvsLUiLCLZgtmJIiwi77C2Iiwi2YLZiiIsIu+wtyIsItmD2KciLCLvsLgiLCLZg9isIiwi77C5Iiwi2YPYrSIsIu+wuiIsItmD2K4iLCLvsLsiLCLZg9mEIiwi77C8Iiwi2YPZhSIsIu+wvSIsItmD2YkiLCLvsL4iLCLZg9mKIiwi77C/Iiwi2YTYrCIsIu+xgCIsItmE2K0iLCLvsYEiLCLZhNiuIiwi77GCIiwi2YTZhSIsIu+xgyIsItmE2YkiLCLvsYQiLCLZhNmKIiwi77GFIiwi2YXYrCIsIu+xhiIsItmF2K0iLCLvsYciLCLZhdiuIiwi77GIIiwi2YXZhSIsIu+xiSIsItmF2YkiLCLvsYoiLCLZhdmKIiwi77GLIiwi2YbYrCIsIu+xjCIsItmG2K0iLCLvsY0iLCLZhtiuIiwi77GOIiwi2YbZhSIsIu+xjyIsItmG2YkiLCLvsZAiLCLZhtmKIiwi77GRIiwi2YfYrCIsIu+xkiIsItmH2YUiLCLvsZMiLCLZh9mJIiwi77GUIiwi2YfZiiIsIu+xlSIsItmK2KwiLCLvsZYiLCLZititIiwi77GXIiwi2YrYriIsIu+xmCIsItmK2YUiLCLvsZkiLCLZitmJIiwi77GaIiwi2YrZiiIsIu+xmyIsItiw2bAiLCLvsZwiLCLYsdmwIiwi77GdIiwi2YnZsCIsIu+xniIsIiDZjNmRIiwi77GfIiwiINmN2ZEiLCLvsaAiLCIg2Y7ZkSIsIu+xoSIsIiDZj9mRIiwi77GiIiwiINmQ2ZEiLCLvsaMiLCIg2ZHZsCIsIu+xpCIsItim2LEiLCLvsaUiLCLYptiyIiwi77GmIiwi2KbZhSIsIu+xpyIsItim2YYiLCLvsagiLCLYptmJIiwi77GpIiwi2KbZiiIsIu+xqiIsItio2LEiLCLvsasiLCLYqNiyIiwi77GsIiwi2KjZhSIsIu+xrSIsItio2YYiLCLvsa4iLCLYqNmJIiwi77GvIiwi2KjZiiIsIu+xsCIsItiq2LEiLCLvsbEiLCLYqtiyIiwi77GyIiwi2KrZhSIsIu+xsyIsItiq2YYiLCLvsbQiLCLYqtmJIiwi77G1Iiwi2KrZiiIsIu+xtiIsItir2LEiLCLvsbciLCLYq9iyIiwi77G4Iiwi2KvZhSIsIu+xuSIsItir2YYiLCLvsboiLCLYq9mJIiwi77G7Iiwi2KvZiiIsIu+xvCIsItmB2YkiLCLvsb0iLCLZgdmKIiwi77G+Iiwi2YLZiSIsIu+xvyIsItmC2YoiLCLvsoAiLCLZg9inIiwi77KBIiwi2YPZhCIsIu+ygiIsItmD2YUiLCLvsoMiLCLZg9mJIiwi77KEIiwi2YPZiiIsIu+yhSIsItmE2YUiLCLvsoYiLCLZhNmJIiwi77KHIiwi2YTZiiIsIu+yiCIsItmF2KciLCLvsokiLCLZhdmFIiwi77KKIiwi2YbYsSIsIu+yiyIsItmG2LIiLCLvsowiLCLZhtmFIiwi77KNIiwi2YbZhiIsIu+yjiIsItmG2YkiLCLvso8iLCLZhtmKIiwi77KQIiwi2YnZsCIsIu+ykSIsItmK2LEiLCLvspIiLCLZitiyIiwi77KTIiwi2YrZhSIsIu+ylCIsItmK2YYiLCLvspUiLCLZitmJIiwi77KWIiwi2YrZiiIsIu+ylyIsItim2KwiLCLvspgiLCLYptitIiwi77KZIiwi2KbYriIsIu+ymiIsItim2YUiLCLvspsiLCLYptmHIiwi77KcIiwi2KjYrCIsIu+ynSIsItio2K0iLCLvsp4iLCLYqNiuIiwi77KfIiwi2KjZhSIsIu+yoCIsItio2YciLCLvsqEiLCLYqtisIiwi77KiIiwi2KrYrSIsIu+yoyIsItiq2K4iLCLvsqQiLCLYqtmFIiwi77KlIiwi2KrZhyIsIu+ypiIsItir2YUiLCLvsqciLCLYrNitIiwi77KoIiwi2KzZhSIsIu+yqSIsItit2KwiLCLvsqoiLCLYrdmFIiwi77KrIiwi2K7YrCIsIu+yrCIsItiu2YUiLCLvsq0iLCLYs9isIiwi77KuIiwi2LPYrSIsIu+yryIsItiz2K4iLCLvsrAiLCLYs9mFIiwi77KxIiwi2LXYrSIsIu+ysiIsIti12K4iLCLvsrMiLCLYtdmFIiwi77K0Iiwi2LbYrCIsIu+ytSIsIti22K0iLCLvsrYiLCLYttiuIiwi77K3Iiwi2LbZhSIsIu+yuCIsIti32K0iLCLvsrkiLCLYuNmFIiwi77K6Iiwi2LnYrCIsIu+yuyIsIti52YUiLCLvsrwiLCLYutisIiwi77K9Iiwi2LrZhSIsIu+yviIsItmB2KwiLCLvsr8iLCLZgditIiwi77OAIiwi2YHYriIsIu+zgSIsItmB2YUiLCLvs4IiLCLZgtitIiwi77ODIiwi2YLZhSIsIu+zhCIsItmD2KwiLCLvs4UiLCLZg9itIiwi77OGIiwi2YPYriIsIu+zhyIsItmD2YQiLCLvs4giLCLZg9mFIiwi77OJIiwi2YTYrCIsIu+ziiIsItmE2K0iLCLvs4siLCLZhNiuIiwi77OMIiwi2YTZhSIsIu+zjSIsItmE2YciLCLvs44iLCLZhdisIiwi77OPIiwi2YXYrSIsIu+zkCIsItmF2K4iLCLvs5EiLCLZhdmFIiwi77OSIiwi2YbYrCIsIu+zkyIsItmG2K0iLCLvs5QiLCLZhtiuIiwi77OVIiwi2YbZhSIsIu+zliIsItmG2YciLCLvs5ciLCLZh9isIiwi77OYIiwi2YfZhSIsIu+zmSIsItmH2bAiLCLvs5oiLCLZitisIiwi77ObIiwi2YrYrSIsIu+znCIsItmK2K4iLCLvs50iLCLZitmFIiwi77OeIiwi2YrZhyIsIu+znyIsItim2YUiLCLvs6AiLCLYptmHIiwi77OhIiwi2KjZhSIsIu+zoiIsItio2YciLCLvs6MiLCLYqtmFIiwi77OkIiwi2KrZhyIsIu+zpSIsItir2YUiLCLvs6YiLCLYq9mHIiwi77OnIiwi2LPZhSIsIu+zqCIsItiz2YciLCLvs6kiLCLYtNmFIiwi77OqIiwi2LTZhyIsIu+zqyIsItmD2YQiLCLvs6wiLCLZg9mFIiwi77OtIiwi2YTZhSIsIu+zriIsItmG2YUiLCLvs68iLCLZhtmHIiwi77OwIiwi2YrZhSIsIu+zsSIsItmK2YciLCLvs7IiLCLZgNmO2ZEiLCLvs7MiLCLZgNmP2ZEiLCLvs7QiLCLZgNmQ2ZEiLCLvs7UiLCLYt9mJIiwi77O2Iiwi2LfZiiIsIu+ztyIsIti52YkiLCLvs7giLCLYudmKIiwi77O5Iiwi2LrZiSIsIu+zuiIsIti62YoiLCLvs7siLCLYs9mJIiwi77O8Iiwi2LPZiiIsIu+zvSIsIti02YkiLCLvs74iLCLYtNmKIiwi77O/Iiwi2K3ZiSIsIu+0gCIsItit2YoiLCLvtIEiLCLYrNmJIiwi77SCIiwi2KzZiiIsIu+0gyIsItiu2YkiLCLvtIQiLCLYrtmKIiwi77SFIiwi2LXZiSIsIu+0hiIsIti12YoiLCLvtIciLCLYttmJIiwi77SIIiwi2LbZiiIsIu+0iSIsIti02KwiLCLvtIoiLCLYtNitIiwi77SLIiwi2LTYriIsIu+0jCIsIti02YUiLCLvtI0iLCLYtNixIiwi77SOIiwi2LPYsSIsIu+0jyIsIti12LEiLCLvtJAiLCLYttixIiwi77SRIiwi2LfZiSIsIu+0kiIsIti32YoiLCLvtJMiLCLYudmJIiwi77SUIiwi2LnZiiIsIu+0lSIsIti62YkiLCLvtJYiLCLYutmKIiwi77SXIiwi2LPZiSIsIu+0mCIsItiz2YoiLCLvtJkiLCLYtNmJIiwi77SaIiwi2LTZiiIsIu+0myIsItit2YkiLCLvtJwiLCLYrdmKIiwi77SdIiwi2KzZiSIsIu+0niIsItis2YoiLCLvtJ8iLCLYrtmJIiwi77SgIiwi2K7ZiiIsIu+0oSIsIti12YkiLCLvtKIiLCLYtdmKIiwi77SjIiwi2LbZiSIsIu+0pCIsIti22YoiLCLvtKUiLCLYtNisIiwi77SmIiwi2LTYrSIsIu+0pyIsIti02K4iLCLvtKgiLCLYtNmFIiwi77SpIiwi2LTYsSIsIu+0qiIsItiz2LEiLCLvtKsiLCLYtdixIiwi77SsIiwi2LbYsSIsIu+0rSIsIti02KwiLCLvtK4iLCLYtNitIiwi77SvIiwi2LTYriIsIu+0sCIsIti02YUiLCLvtLEiLCLYs9mHIiwi77SyIiwi2LTZhyIsIu+0syIsIti32YUiLCLvtLQiLCLYs9isIiwi77S1Iiwi2LPYrSIsIu+0tiIsItiz2K4iLCLvtLciLCLYtNisIiwi77S4Iiwi2LTYrSIsIu+0uSIsIti02K4iLCLvtLoiLCLYt9mFIiwi77S7Iiwi2LjZhSIsIu+0vCIsItin2YsiLCLvtL0iLCLYp9mLIiwi77WQIiwi2KrYrNmFIiwi77WRIiwi2KrYrdisIiwi77WSIiwi2KrYrdisIiwi77WTIiwi2KrYrdmFIiwi77WUIiwi2KrYrtmFIiwi77WVIiwi2KrZhdisIiwi77WWIiwi2KrZhditIiwi77WXIiwi2KrZhdiuIiwi77WYIiwi2KzZhditIiwi77WZIiwi2KzZhditIiwi77WaIiwi2K3ZhdmKIiwi77WbIiwi2K3ZhdmJIiwi77WcIiwi2LPYrdisIiwi77WdIiwi2LPYrNitIiwi77WeIiwi2LPYrNmJIiwi77WfIiwi2LPZhditIiwi77WgIiwi2LPZhditIiwi77WhIiwi2LPZhdisIiwi77WiIiwi2LPZhdmFIiwi77WjIiwi2LPZhdmFIiwi77WkIiwi2LXYrditIiwi77WlIiwi2LXYrditIiwi77WmIiwi2LXZhdmFIiwi77WnIiwi2LTYrdmFIiwi77WoIiwi2LTYrdmFIiwi77WpIiwi2LTYrNmKIiwi77WqIiwi2LTZhdiuIiwi77WrIiwi2LTZhdiuIiwi77WsIiwi2LTZhdmFIiwi77WtIiwi2LTZhdmFIiwi77WuIiwi2LbYrdmJIiwi77WvIiwi2LbYrtmFIiwi77WwIiwi2LbYrtmFIiwi77WxIiwi2LfZhditIiwi77WyIiwi2LfZhditIiwi77WzIiwi2LfZhdmFIiwi77W0Iiwi2LfZhdmKIiwi77W1Iiwi2LnYrNmFIiwi77W2Iiwi2LnZhdmFIiwi77W3Iiwi2LnZhdmFIiwi77W4Iiwi2LnZhdmJIiwi77W5Iiwi2LrZhdmFIiwi77W6Iiwi2LrZhdmKIiwi77W7Iiwi2LrZhdmJIiwi77W8Iiwi2YHYrtmFIiwi77W9Iiwi2YHYrtmFIiwi77W+Iiwi2YLZhditIiwi77W/Iiwi2YLZhdmFIiwi77aAIiwi2YTYrdmFIiwi77aBIiwi2YTYrdmKIiwi77aCIiwi2YTYrdmJIiwi77aDIiwi2YTYrNisIiwi77aEIiwi2YTYrNisIiwi77aFIiwi2YTYrtmFIiwi77aGIiwi2YTYrtmFIiwi77aHIiwi2YTZhditIiwi77aIIiwi2YTZhditIiwi77aJIiwi2YXYrdisIiwi77aKIiwi2YXYrdmFIiwi77aLIiwi2YXYrdmKIiwi77aMIiwi2YXYrNitIiwi77aNIiwi2YXYrNmFIiwi77aOIiwi2YXYrtisIiwi77aPIiwi2YXYrtmFIiwi77aSIiwi2YXYrNiuIiwi77aTIiwi2YfZhdisIiwi77aUIiwi2YfZhdmFIiwi77aVIiwi2YbYrdmFIiwi77aWIiwi2YbYrdmJIiwi77aXIiwi2YbYrNmFIiwi77aYIiwi2YbYrNmFIiwi77aZIiwi2YbYrNmJIiwi77aaIiwi2YbZhdmKIiwi77abIiwi2YbZhdmJIiwi77acIiwi2YrZhdmFIiwi77adIiwi2YrZhdmFIiwi77aeIiwi2KjYrtmKIiwi77afIiwi2KrYrNmKIiwi77agIiwi2KrYrNmJIiwi77ahIiwi2KrYrtmKIiwi77aiIiwi2KrYrtmJIiwi77ajIiwi2KrZhdmKIiwi77akIiwi2KrZhdmJIiwi77alIiwi2KzZhdmKIiwi77amIiwi2KzYrdmJIiwi77anIiwi2KzZhdmJIiwi77aoIiwi2LPYrtmJIiwi77apIiwi2LXYrdmKIiwi77aqIiwi2LTYrdmKIiwi77arIiwi2LbYrdmKIiwi77asIiwi2YTYrNmKIiwi77atIiwi2YTZhdmKIiwi77auIiwi2YrYrdmKIiwi77avIiwi2YrYrNmKIiwi77awIiwi2YrZhdmKIiwi77axIiwi2YXZhdmKIiwi77ayIiwi2YLZhdmKIiwi77azIiwi2YbYrdmKIiwi77a0Iiwi2YLZhditIiwi77a1Iiwi2YTYrdmFIiwi77a2Iiwi2LnZhdmKIiwi77a3Iiwi2YPZhdmKIiwi77a4Iiwi2YbYrNitIiwi77a5Iiwi2YXYrtmKIiwi77a6Iiwi2YTYrNmFIiwi77a7Iiwi2YPZhdmFIiwi77a8Iiwi2YTYrNmFIiwi77a9Iiwi2YbYrNitIiwi77a+Iiwi2KzYrdmKIiwi77a/Iiwi2K3YrNmKIiwi77eAIiwi2YXYrNmKIiwi77eBIiwi2YHZhdmKIiwi77eCIiwi2KjYrdmKIiwi77eDIiwi2YPZhdmFIiwi77eEIiwi2LnYrNmFIiwi77eFIiwi2LXZhdmFIiwi77eGIiwi2LPYrtmKIiwi77eHIiwi2YbYrNmKIiwi77mJIiwi4oC+Iiwi77mKIiwi4oC+Iiwi77mLIiwi4oC+Iiwi77mMIiwi4oC+Iiwi77mNIiwiXyIsIu+5jiIsIl8iLCLvuY8iLCJfIiwi77qAIiwi2KEiLCLvuoEiLCLYoiIsIu+6giIsItiiIiwi77qDIiwi2KMiLCLvuoQiLCLYoyIsIu+6hSIsItikIiwi77qGIiwi2KQiLCLvuociLCLYpSIsIu+6iCIsItilIiwi77qJIiwi2KYiLCLvuooiLCLYpiIsIu+6iyIsItimIiwi77qMIiwi2KYiLCLvuo0iLCLYpyIsIu+6jiIsItinIiwi77qPIiwi2KgiLCLvupAiLCLYqCIsIu+6kSIsItioIiwi77qSIiwi2KgiLCLvupMiLCLYqSIsIu+6lCIsItipIiwi77qVIiwi2KoiLCLvupYiLCLYqiIsIu+6lyIsItiqIiwi77qYIiwi2KoiLCLvupkiLCLYqyIsIu+6miIsItirIiwi77qbIiwi2KsiLCLvupwiLCLYqyIsIu+6nSIsItisIiwi77qeIiwi2KwiLCLvup8iLCLYrCIsIu+6oCIsItisIiwi77qhIiwi2K0iLCLvuqIiLCLYrSIsIu+6oyIsItitIiwi77qkIiwi2K0iLCLvuqUiLCLYriIsIu+6piIsItiuIiwi77qnIiwi2K4iLCLvuqgiLCLYriIsIu+6qSIsItivIiwi77qqIiwi2K8iLCLvuqsiLCLYsCIsIu+6rCIsItiwIiwi77qtIiwi2LEiLCLvuq4iLCLYsSIsIu+6ryIsItiyIiwi77qwIiwi2LIiLCLvurEiLCLYsyIsIu+6siIsItizIiwi77qzIiwi2LMiLCLvurQiLCLYsyIsIu+6tSIsIti0Iiwi77q2Iiwi2LQiLCLvurciLCLYtCIsIu+6uCIsIti0Iiwi77q5Iiwi2LUiLCLvuroiLCLYtSIsIu+6uyIsIti1Iiwi77q8Iiwi2LUiLCLvur0iLCLYtiIsIu+6viIsIti2Iiwi77q/Iiwi2LYiLCLvu4AiLCLYtiIsIu+7gSIsIti3Iiwi77uCIiwi2LciLCLvu4MiLCLYtyIsIu+7hCIsIti3Iiwi77uFIiwi2LgiLCLvu4YiLCLYuCIsIu+7hyIsIti4Iiwi77uIIiwi2LgiLCLvu4kiLCLYuSIsIu+7iiIsIti5Iiwi77uLIiwi2LkiLCLvu4wiLCLYuSIsIu+7jSIsIti6Iiwi77uOIiwi2LoiLCLvu48iLCLYuiIsIu+7kCIsIti6Iiwi77uRIiwi2YEiLCLvu5IiLCLZgSIsIu+7kyIsItmBIiwi77uUIiwi2YEiLCLvu5UiLCLZgiIsIu+7liIsItmCIiwi77uXIiwi2YIiLCLvu5giLCLZgiIsIu+7mSIsItmDIiwi77uaIiwi2YMiLCLvu5siLCLZgyIsIu+7nCIsItmDIiwi77udIiwi2YQiLCLvu54iLCLZhCIsIu+7nyIsItmEIiwi77ugIiwi2YQiLCLvu6EiLCLZhSIsIu+7oiIsItmFIiwi77ujIiwi2YUiLCLvu6QiLCLZhSIsIu+7pSIsItmGIiwi77umIiwi2YYiLCLvu6ciLCLZhiIsIu+7qCIsItmGIiwi77upIiwi2YciLCLvu6oiLCLZhyIsIu+7qyIsItmHIiwi77usIiwi2YciLCLvu60iLCLZiCIsIu+7riIsItmIIiwi77uvIiwi2YkiLCLvu7AiLCLZiSIsIu+7sSIsItmKIiwi77uyIiwi2YoiLCLvu7MiLCLZiiIsIu+7tCIsItmKIiwi77u1Iiwi2YTYoiIsIu+7tiIsItmE2KIiLCLvu7ciLCLZhNijIiwi77u4Iiwi2YTYoyIsIu+7uSIsItmE2KUiLCLvu7oiLCLZhNilIiwi77u7Iiwi2YTYpyIsIu+7vCIsItmE2KciXX0pKTtmdW5jdGlvbiBsKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYodDw9MXx8IWZ1bmN0aW9uKGUpe2xldCB0PXNbMTNdO3JldHVybiBlPj10LmJlZ2luJiZlPHQuZW5kfHwodD1zWzExXSxlPj10LmJlZ2luJiZlPHQuZW5kKX0oZS5jaGFyQ29kZUF0KDApKSlyZXR1cm4gZTtjb25zdCByPVtdO2ZvcihsZXQgbj10LTE7bj49MDtuLS0pci5wdXNoKGVbbl0pO3JldHVybiByLmpvaW4oIiIpfWNvbnN0IGY9bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLGg9bmV3IE1hcDtmdW5jdGlvbiBkKGUpe2NvbnN0IHQ9aC5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCByPWUubWF0Y2goZiksbj17aXNXaGl0ZXNwYWNlOiEoIXJ8fCFyWzFdKSxpc1plcm9XaWR0aERpYWNyaXRpYzohKCFyfHwhclsyXSksaXNJbnZpc2libGVGb3JtYXRNYXJrOiEoIXJ8fCFyWzNdKX07cmV0dXJuIGguc2V0KGUsbiksbn1mdW5jdGlvbiBwKCl7aC5jbGVhcigpfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFNlcmlmRm9udHM9dC5nZXROb25TdGRGb250TWFwPXQuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPXQuZ2V0Rm9udE5hbWVUb0ZpbGVNYXA9dm9pZCAwLHQuZ2V0U3RhbmRhcmRGb250TmFtZT1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gaSgpW3RdfSx0LmdldFN5bWJvbHNGb250cz10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldFN0ZEZvbnRNYXA9dm9pZCAwO3ZhciBuPXIoMTM1KSxhPXIoMTY3KSxpPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiVGltZXMtUm9tYW4iXT0iVGltZXMtUm9tYW4iLGUuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiLGUuQ291cmllcj0iQ291cmllciIsZS5TeW1ib2w9IlN5bWJvbCIsZVsiVGltZXMtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJIZWx2ZXRpY2EtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ291cmllci1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZS5aYXBmRGluZ2JhdHM9IlphcGZEaW5nYmF0cyIsZVsiVGltZXMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyIsZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJDb3VyaWVyLU9ibGlxdWUiLGVbIlRpbWVzLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlLkFyaWFsTmFycm93PSJIZWx2ZXRpY2EiLGVbIkFyaWFsTmFycm93LUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbE5hcnJvdy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxCbGFjaz0iSGVsdmV0aWNhIixlWyJBcmlhbEJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlWyJBcmlhbC1CbGFjayJdPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbC1CbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWw9IkhlbHZldGljYSIsZVsiQXJpYWwtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZS5BcmlhbE1UPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxVbmljb2RlTVM9IkhlbHZldGljYSIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXItSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZS5Db3VyaWVyTmV3PSJDb3VyaWVyIixlWyJDb3VyaWVyTmV3LUJvbGQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3LUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllck5ldy1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIixlWyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXJOZXdQUy1Cb2xkTVQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXT0iQ291cmllci1PYmxpcXVlIixlLkNvdXJpZXJOZXdQU01UPSJDb3VyaWVyIixlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIlN5bWJvbC1Cb2xkIl09IlN5bWJvbCIsZVsiU3ltYm9sLUJvbGRJdGFsaWMiXT0iU3ltYm9sIixlWyJTeW1ib2wtSXRhbGljIl09IlN5bWJvbCIsZS5UaW1lc05ld1JvbWFuPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hbi1Cb2xkIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiLGUuVGltZXNOZXdSb21hblBTPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTLUJvbGQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZE1UIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXT0iVGltZXMtSXRhbGljIixlLlRpbWVzTmV3Um9tYW5QU01UPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QU01ULUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMifSkpO3QuZ2V0U3RkRm9udE1hcD1pO3ZhciBvPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPSJGb3hpdEZpeGVkLnBmYiIsZVsiQ291cmllci1Cb2xkIl09IkZveGl0Rml4ZWRCb2xkLnBmYiIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJGb3hpdEZpeGVkSXRhbGljLnBmYiIsZS5IZWx2ZXRpY2E9IkZveGl0U2Fucy5wZmIiLGVbIkhlbHZldGljYS1Cb2xkIl09IkZveGl0U2Fuc0JvbGQucGZiIixlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0iRm94aXRTYW5zQm9sZEl0YWxpYy5wZmIiLGVbIkhlbHZldGljYS1PYmxpcXVlIl09IkZveGl0U2Fuc0l0YWxpYy5wZmIiLGVbIlRpbWVzLVJvbWFuIl09IkZveGl0U2VyaWYucGZiIixlWyJUaW1lcy1Cb2xkIl09IkZveGl0U2VyaWZCb2xkLnBmYiIsZVsiVGltZXMtQm9sZEl0YWxpYyJdPSJGb3hpdFNlcmlmQm9sZEl0YWxpYy5wZmIiLGVbIlRpbWVzLUl0YWxpYyJdPSJGb3hpdFNlcmlmSXRhbGljLnBmYiIsZS5TeW1ib2w9IkZveGl0U3ltYm9sLnBmYiIsZS5aYXBmRGluZ2JhdHM9IkZveGl0RGluZ2JhdHMucGZiIixlWyJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIl09IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkIl09IkxpYmVyYXRpb25TYW5zLUJvbGQudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiIsZVsiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiJ9KSk7dC5nZXRGb250TmFtZVRvRmlsZU1hcD1vO3ZhciBzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5DYWxpYnJpPSJIZWx2ZXRpY2EiLGVbIkNhbGlicmktQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ2FsaWJyaS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQ2VudHVyeUdvdGhpYz0iSGVsdmV0aWNhIixlWyJDZW50dXJ5R290aGljLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkNlbnR1cnlHb3RoaWMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkNlbnR1cnlHb3RoaWMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkNvbWljU2Fuc01TPSJDb21pYyBTYW5zIE1TIixlWyJDb21pY1NhbnNNUy1Cb2xkIl09IkNvbWljIFNhbnMgTVMtQm9sZCIsZVsiQ29taWNTYW5zTVMtQm9sZEl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUJvbGRJdGFsaWMiLGVbIkNvbWljU2Fuc01TLUl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUl0YWxpYyIsZVsiSXRjU3ltYm9sLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkl0Y1N5bWJvbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLUJvb2siXT0iSGVsdmV0aWNhIixlWyJJdGNTeW1ib2wtQm9va0l0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLU1lZGl1bSJdPSJIZWx2ZXRpY2EiLGVbIkl0Y1N5bWJvbC1NZWRpdW1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuTHVjaWRhQ29uc29sZT0iQ291cmllciIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkx1Y2lkYUNvbnNvbGUtSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZVsiTHVjaWRhU2Fucy1EZW1pIl09IkhlbHZldGljYS1Cb2xkIixlWyJNUy1Hb3RoaWMiXT0iTVMgR290aGljIixlWyJNUy1Hb3RoaWMtQm9sZCJdPSJNUyBHb3RoaWMtQm9sZCIsZVsiTVMtR290aGljLUJvbGRJdGFsaWMiXT0iTVMgR290aGljLUJvbGRJdGFsaWMiLGVbIk1TLUdvdGhpYy1JdGFsaWMiXT0iTVMgR290aGljLUl0YWxpYyIsZVsiTVMtTWluY2hvIl09Ik1TIE1pbmNobyIsZVsiTVMtTWluY2hvLUJvbGQiXT0iTVMgTWluY2hvLUJvbGQiLGVbIk1TLU1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIE1pbmNoby1Cb2xkSXRhbGljIixlWyJNUy1NaW5jaG8tSXRhbGljIl09Ik1TIE1pbmNoby1JdGFsaWMiLGVbIk1TLVBHb3RoaWMiXT0iTVMgUEdvdGhpYyIsZVsiTVMtUEdvdGhpYy1Cb2xkIl09Ik1TIFBHb3RoaWMtQm9sZCIsZVsiTVMtUEdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIFBHb3RoaWMtQm9sZEl0YWxpYyIsZVsiTVMtUEdvdGhpYy1JdGFsaWMiXT0iTVMgUEdvdGhpYy1JdGFsaWMiLGVbIk1TLVBNaW5jaG8iXT0iTVMgUE1pbmNobyIsZVsiTVMtUE1pbmNoby1Cb2xkIl09Ik1TIFBNaW5jaG8tQm9sZCIsZVsiTVMtUE1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIFBNaW5jaG8tQm9sZEl0YWxpYyIsZVsiTVMtUE1pbmNoby1JdGFsaWMiXT0iTVMgUE1pbmNoby1JdGFsaWMiLGUuTnVwdGlhbFNjcmlwdD0iVGltZXMtSXRhbGljIixlLlNlZ29lVUlTeW1ib2w9IkhlbHZldGljYSIsZS5XaW5nZGluZ3M9IlphcGZEaW5nYmF0cyIsZVsiV2luZ2RpbmdzLVJlZ3VsYXIiXT0iWmFwZkRpbmdiYXRzIn0pKTt0LmdldE5vblN0ZEZvbnRNYXA9czt2YXIgYz0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwLGVbIkFkb2JlIFRleHQiXT0hMCxlLkFsYmVydHVzPSEwLGUuQWxkdXM9ITAsZS5BbGV4YW5kcmlhPSEwLGUuQWxnZXJpYW49ITAsZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwLGUuQW50aXF1YT0hMCxlLkFwZXg9ITAsZS5Bcm5vPSEwLGUuQXN0ZXI9ITAsZS5BdXJvcmE9ITAsZS5CYXNrZXJ2aWxsZT0hMCxlLkJlbGw9ITAsZS5CZW1ibz0hMCxlWyJCZW1ibyBTY2hvb2xib29rIl09ITAsZS5CZW5ndWlhdD0hMCxlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMCxlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMCxlWyJCZXJ0aG9sZCBDaXR5Il09ITAsZS5Cb2Rvbmk9ITAsZVsiQmF1ZXIgQm9kb25pIl09ITAsZVsiQm9vayBBbnRpcXVhIl09ITAsZS5Cb29rbWFuPSEwLGVbIkJvcmRlYXV4IFJvbWFuIl09ITAsZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMCxlLkNhbGlzdG89ITAsZS5DYWx2ZXJ0PSEwLGUuQ2FwaXRhbHM9ITAsZS5DYW1icmlhPSEwLGUuQ2FydGllcj0hMCxlLkNhc2xvbj0hMCxlLkNhdHVsbD0hMCxlLkNlbnRhdXI9ITAsZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMCxlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMCxlLkNoYXBhcnJhbD0hMCxlWyJDaGFyaXMgU0lMIl09ITAsZS5DaGVsdGVuaGFtPSEwLGVbIkNob2xsYSBTbGFiIl09ITAsZS5DbGFyZW5kb249ITAsZS5DbGVhcmZhY2U9ITAsZS5Db2NoaW49ITAsZS5Db2xvbm5hPSEwLGVbIkNvbXB1dGVyIE1vZGVybiJdPSEwLGVbIkNvbmNyZXRlIFJvbWFuIl09ITAsZS5Db25zdGFudGlhPSEwLGVbIkNvb3BlciBCbGFjayJdPSEwLGUuQ29yb25hPSEwLGUuRWNvdHlwZT0hMCxlLkVneXB0aWVubmU9ITAsZS5FbGVwaGFudD0hMCxlLkV4Y2Vsc2lvcj0hMCxlLkZhaXJmaWVsZD0hMCxlWyJGRiBTY2FsYSJdPSEwLGUuRm9sa2FyZD0hMCxlLkZvb3RsaWdodD0hMCxlLkZyZWVTZXJpZj0hMCxlWyJGcml6IFF1YWRyYXRhIl09ITAsZS5HYXJhbW9uZD0hMCxlLkdlbnRpdW09ITAsZS5HZW9yZ2lhPSEwLGUuR2xvdWNlc3Rlcj0hMCxlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMCxlWyJHb3VkeSBTY2hvb2xib29rIl09ITAsZVsiR291ZHkgUHJvIEZvbnQiXT0hMCxlLkdyYW5qb249ITAsZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMCxlLkhlYXRoZXI9ITAsZS5IZXJjdWxlcz0hMCxlWyJIaWdoIFRvd2VyIFRleHQiXT0hMCxlLkhpcm9zaGlnZT0hMCxlWyJIb2VmbGVyIFRleHQiXT0hMCxlWyJIdW1hbmEgU2VyaWYiXT0hMCxlLkltcHJpbnQ9ITAsZVsiSW9uaWMgTm8uIDUiXT0hMCxlLkphbnNvbj0hMCxlLkpvYW5uYT0hMCxlLktvcmlubmE9ITAsZS5MZXhpY29uPSEwLGUuTGliZXJhdGlvblNlcmlmPSEwLGVbIkxpYmVyYXRpb24gU2VyaWYiXT0hMCxlWyJMaW51eCBMaWJlcnRpbmUiXT0hMCxlLkxpdGVyYXR1cm5heWE9ITAsZS5MdWNpZGE9ITAsZVsiTHVjaWRhIEJyaWdodCJdPSEwLGUuTWVsaW9yPSEwLGUuTWVtcGhpcz0hMCxlLk1pbGxlcj0hMCxlLk1pbmlvbj0hMCxlLk1vZGVybj0hMCxlWyJNb25hIExpc2EiXT0hMCxlWyJNcnMgRWF2ZXMiXT0hMCxlWyJNUyBTZXJpZiJdPSEwLGVbIk11c2VvIFNsYWIiXT0hMCxlWyJOZXcgWW9yayJdPSEwLGVbIk5pbWJ1cyBSb21hbiJdPSEwLGVbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwLGUuTnVwdGlhbFNjcmlwdD0hMCxlLlBhbGF0aW5vPSEwLGUuUGVycGV0dWE9ITAsZS5QbGFudGluPSEwLGVbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwLGUuUGxheWJpbGw9ITAsZVsiUG9vciBSaWNoYXJkIl09ITAsZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMCxlLlJlbmF1bHQ9ITAsZS5SZXF1aWVtPSEwLGUuUm9ja3dlbGw9ITAsZS5Sb21hbj0hMCxlWyJSb3RpcyBTZXJpZiJdPSEwLGUuU2Fib249ITAsZS5TY2FsYT0hMCxlLlNlYWd1bGw9ITAsZS5TaXN0aW5hPSEwLGUuU291dmVuaXI9ITAsZS5TVElYPSEwLGVbIlN0b25lIEluZm9ybWFsIl09ITAsZVsiU3RvbmUgU2VyaWYiXT0hMCxlLlN5bGZhZW49ITAsZS5UaW1lcz0hMCxlLlRyYWphbj0hMCxlWyJUcmluaXTDqSJdPSEwLGVbIlRydW1wIE1lZGlhZXZhbCJdPSEwLGUuVXRvcGlhPSEwLGVbIlZhbGUgVHlwZSJdPSEwLGVbIkJpdHN0cmVhbSBWZXJhIl09ITAsZVsiVmVyYSBTZXJpZiJdPSEwLGUuVmVyc2FpbGxlcz0hMCxlLldhbnRlZD0hMCxlLldlaXNzPSEwLGVbIldpZGUgTGF0aW4iXT0hMCxlLldpbmRzb3I9ITAsZS5YSVRTPSEwfSkpO3QuZ2V0U2VyaWZGb250cz1jO3ZhciB1PSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5EaW5nYmF0cz0hMCxlLlN5bWJvbD0hMCxlLlphcGZEaW5nYmF0cz0hMH0pKTt0LmdldFN5bWJvbHNGb250cz11O3ZhciBsPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsyXT0xMCxlWzNdPTMyLGVbNF09MzMsZVs1XT0zNCxlWzZdPTM1LGVbN109MzYsZVs4XT0zNyxlWzldPTM4LGVbMTBdPTM5LGVbMTFdPTQwLGVbMTJdPTQxLGVbMTNdPTQyLGVbMTRdPTQzLGVbMTVdPTQ0LGVbMTZdPTQ1LGVbMTddPTQ2LGVbMThdPTQ3LGVbMTldPTQ4LGVbMjBdPTQ5LGVbMjFdPTUwLGVbMjJdPTUxLGVbMjNdPTUyLGVbMjRdPTUzLGVbMjVdPTU0LGVbMjZdPTU1LGVbMjddPTU2LGVbMjhdPTU3LGVbMjldPTU4LGVbMzBdPTg5NCxlWzMxXT02MCxlWzMyXT02MSxlWzMzXT02MixlWzM0XT02MyxlWzM1XT02NCxlWzM2XT02NSxlWzM3XT02NixlWzM4XT02NyxlWzM5XT02OCxlWzQwXT02OSxlWzQxXT03MCxlWzQyXT03MSxlWzQzXT03MixlWzQ0XT03MyxlWzQ1XT03NCxlWzQ2XT03NSxlWzQ3XT03NixlWzQ4XT03NyxlWzQ5XT03OCxlWzUwXT03OSxlWzUxXT04MCxlWzUyXT04MSxlWzUzXT04MixlWzU0XT04MyxlWzU1XT04NCxlWzU2XT04NSxlWzU3XT04NixlWzU4XT04NyxlWzU5XT04OCxlWzYwXT04OSxlWzYxXT05MCxlWzYyXT05MSxlWzYzXT05MixlWzY0XT05MyxlWzY1XT05NCxlWzY2XT05NSxlWzY3XT05NixlWzY4XT05NyxlWzY5XT05OCxlWzcwXT05OSxlWzcxXT0xMDAsZVs3Ml09MTAxLGVbNzNdPTEwMixlWzc0XT0xMDMsZVs3NV09MTA0LGVbNzZdPTEwNSxlWzc3XT0xMDYsZVs3OF09MTA3LGVbNzldPTEwOCxlWzgwXT0xMDksZVs4MV09MTEwLGVbODJdPTExMSxlWzgzXT0xMTIsZVs4NF09MTEzLGVbODVdPTExNCxlWzg2XT0xMTUsZVs4N109MTE2LGVbODhdPTExNyxlWzg5XT0xMTgsZVs5MF09MTE5LGVbOTFdPTEyMCxlWzkyXT0xMjEsZVs5M109MTIyLGVbOTRdPTEyMyxlWzk1XT0xMjQsZVs5Nl09MTI1LGVbOTddPTEyNixlWzk4XT0xOTYsZVs5OV09MTk3LGVbMTAwXT0xOTksZVsxMDFdPTIwMSxlWzEwMl09MjA5LGVbMTAzXT0yMTQsZVsxMDRdPTIyMCxlWzEwNV09MjI1LGVbMTA2XT0yMjQsZVsxMDddPTIyNixlWzEwOF09MjI4LGVbMTA5XT0yMjcsZVsxMTBdPTIyOSxlWzExMV09MjMxLGVbMTEyXT0yMzMsZVsxMTNdPTIzMixlWzExNF09MjM0LGVbMTE1XT0yMzUsZVsxMTZdPTIzNyxlWzExN109MjM2LGVbMTE4XT0yMzgsZVsxMTldPTIzOSxlWzEyMF09MjQxLGVbMTIxXT0yNDMsZVsxMjJdPTI0MixlWzEyM109MjQ0LGVbMTI0XT0yNDYsZVsxMjVdPTI0NSxlWzEyNl09MjUwLGVbMTI3XT0yNDksZVsxMjhdPTI1MSxlWzEyOV09MjUyLGVbMTMwXT04MjI0LGVbMTMxXT0xNzYsZVsxMzJdPTE2MixlWzEzM109MTYzLGVbMTM0XT0xNjcsZVsxMzVdPTgyMjYsZVsxMzZdPTE4MixlWzEzN109MjIzLGVbMTM4XT0xNzQsZVsxMzldPTE2OSxlWzE0MF09ODQ4MixlWzE0MV09MTgwLGVbMTQyXT0xNjgsZVsxNDNdPTg4MDAsZVsxNDRdPTE5OCxlWzE0NV09MjE2LGVbMTQ2XT04NzM0LGVbMTQ3XT0xNzcsZVsxNDhdPTg4MDQsZVsxNDldPTg4MDUsZVsxNTBdPTE2NSxlWzE1MV09MTgxLGVbMTUyXT04NzA2LGVbMTUzXT04NzIxLGVbMTU0XT04NzE5LGVbMTU2XT04NzQ3LGVbMTU3XT0xNzAsZVsxNThdPTE4NixlWzE1OV09ODQ4NixlWzE2MF09MjMwLGVbMTYxXT0yNDgsZVsxNjJdPTE5MSxlWzE2M109MTYxLGVbMTY0XT0xNzIsZVsxNjVdPTg3MzAsZVsxNjZdPTQwMixlWzE2N109ODc3NixlWzE2OF09ODcxMCxlWzE2OV09MTcxLGVbMTcwXT0xODcsZVsxNzFdPTgyMzAsZVsxNzldPTgyMjAsZVsxODBdPTgyMjEsZVsxODFdPTgyMTYsZVsxODJdPTgyMTcsZVsyMDBdPTE5MyxlWzIwM109MjA1LGVbMjEwXT0yMTgsZVsyMjNdPTcxMSxlWzIyNF09MzIxLGVbMjI1XT0zMjIsZVsyMjZdPTM1MixlWzIyN109MzUzLGVbMjI4XT0zODEsZVsyMjldPTM4MixlWzIzM109MjIxLGVbMjM0XT0yNTMsZVsyNTJdPTI2MyxlWzI1M109MjY4LGVbMjU0XT0yNjksZVsyNThdPTI1OCxlWzI2MF09MjYwLGVbMjYxXT0yNjEsZVsyNjVdPTI4MCxlWzI2Nl09MjgxLGVbMjY3XT0yODIsZVsyNjhdPTI4MyxlWzI2OV09MzEzLGVbMjc1XT0zMjMsZVsyNzZdPTMyNCxlWzI3OF09MzI4LGVbMjgzXT0zNDQsZVsyODRdPTM0NSxlWzI4NV09MzQ2LGVbMjg2XT0zNDcsZVsyOTJdPTM2NyxlWzI5NV09Mzc3LGVbMjk2XT0zNzgsZVsyOThdPTM4MCxlWzMwNV09OTYzLGVbMzA2XT05NjQsZVszMDddPTk2NixlWzMwOF09ODIxNSxlWzMwOV09ODI1MixlWzMxMF09ODMxOSxlWzMxMV09ODM1OSxlWzMxMl09ODU5MixlWzMxM109ODU5MyxlWzMzN109OTU1MixlWzQ5M109MTAzOSxlWzQ5NF09MTA0MCxlWzY3Ml09MTQ4OCxlWzY3M109MTQ4OSxlWzY3NF09MTQ5MCxlWzY3NV09MTQ5MSxlWzY3Nl09MTQ5MixlWzY3N109MTQ5MyxlWzY3OF09MTQ5NCxlWzY3OV09MTQ5NSxlWzY4MF09MTQ5NixlWzY4MV09MTQ5NyxlWzY4Ml09MTQ5OCxlWzY4M109MTQ5OSxlWzY4NF09MTUwMCxlWzY4NV09MTUwMSxlWzY4Nl09MTUwMixlWzY4N109MTUwMyxlWzY4OF09MTUwNCxlWzY4OV09MTUwNSxlWzY5MF09MTUwNixlWzY5MV09MTUwNyxlWzY5Ml09MTUwOCxlWzY5M109MTUwOSxlWzY5NF09MTUxMCxlWzY5NV09MTUxMSxlWzY5Nl09MTUxMixlWzY5N109MTUxMyxlWzY5OF09MTUxNCxlWzcwNV09MTUyNCxlWzcwNl09ODM2MixlWzcxMF09NjQyODgsZVs3MTFdPTY0Mjk4LGVbNzU5XT0xNjE3LGVbNzYxXT0xNzc2LGVbNzYzXT0xNzc4LGVbNzc1XT0xNjUyLGVbNzc3XT0xNzY0LGVbNzc4XT0xNzgwLGVbNzc5XT0xNzgxLGVbNzgwXT0xNzgyLGVbNzgyXT03NzEsZVs3ODNdPTY0NzI2LGVbNzg2XT04MzYzLGVbNzg4XT04NTMyLGVbNzkwXT03NjgsZVs3OTFdPTc2OSxlWzc5Ml09NzY4LGVbNzk1XT04MDMsZVs3OTddPTY0MzM2LGVbNzk4XT02NDMzNyxlWzc5OV09NjQzNDIsZVs4MDBdPTY0MzQzLGVbODAxXT02NDM0NCxlWzgwMl09NjQzNDUsZVs4MDNdPTY0MzYyLGVbODA0XT02NDM2MyxlWzgwNV09NjQzNjQsZVsyNDI0XT03ODIxLGVbMjQyNV09NzgyMixlWzI0MjZdPTc4MjMsZVsyNDI3XT03ODI0LGVbMjQyOF09NzgyNSxlWzI0MjldPTc4MjYsZVsyNDMwXT03ODI3LGVbMjQzM109NzY4MixlWzI2NzhdPTgwNDUsZVsyNjc5XT04MDQ2LGVbMjgzMF09MTU1MixlWzI4MzhdPTY4NixlWzI4NDBdPTc1MSxlWzI4NDJdPTc1MyxlWzI4NDNdPTc1NCxlWzI4NDRdPTc1NSxlWzI4NDZdPTc1NyxlWzI4NTZdPTc2NyxlWzI4NTddPTg0OCxlWzI4NThdPTg0OSxlWzI4NjJdPTg1MyxlWzI4NjNdPTg1NCxlWzI4NjRdPTg1NSxlWzI4NjVdPTg2MSxlWzI4NjZdPTg2MixlWzI5MDZdPTc0NjAsZVsyOTA4XT03NDYyLGVbMjkwOV09NzQ2MyxlWzI5MTBdPTc0NjQsZVsyOTEyXT03NDY2LGVbMjkxM109NzQ2NyxlWzI5MTRdPTc0NjgsZVsyOTE2XT03NDcwLGVbMjkxN109NzQ3MSxlWzI5MThdPTc0NzIsZVsyOTIwXT03NDc0LGVbMjkyMV09NzQ3NSxlWzI5MjJdPTc0NzYsZVsyOTI0XT03NDc4LGVbMjkyNV09NzQ3OSxlWzI5MjZdPTc0ODAsZVsyOTI4XT03NDgyLGVbMjkyOV09NzQ4MyxlWzI5MzBdPTc0ODQsZVsyOTMyXT03NDg2LGVbMjkzM109NzQ4NyxlWzI5MzRdPTc0ODgsZVsyOTM2XT03NDkwLGVbMjkzN109NzQ5MSxlWzI5MzhdPTc0OTIsZVsyOTQwXT03NDk0LGVbMjk0MV09NzQ5NSxlWzI5NDJdPTc0OTYsZVsyOTQ0XT03NDk4LGVbMjk0Nl09NzUwMCxlWzI5NDhdPTc1MDIsZVsyOTUwXT03NTA0LGVbMjk1MV09NzUwNSxlWzI5NTJdPTc1MDYsZVsyOTU0XT03NTA4LGVbMjk1NV09NzUwOSxlWzI5NTZdPTc1MTAsZVsyOTU4XT03NTEyLGVbMjk1OV09NzUxMyxlWzI5NjBdPTc1MTQsZVsyOTYyXT03NTE2LGVbMjk2M109NzUxNyxlWzI5NjRdPTc1MTgsZVsyOTY2XT03NTIwLGVbMjk2N109NzUyMSxlWzI5NjhdPTc1MjIsZVsyOTcwXT03NTI0LGVbMjk3MV09NzUyNSxlWzI5NzJdPTc1MjYsZVsyOTc0XT03NTI4LGVbMjk3NV09NzUyOSxlWzI5NzZdPTc1MzAsZVsyOTc4XT0xNTM3LGVbMjk3OV09MTUzOCxlWzI5ODBdPTE1MzksZVsyOTgyXT0xNTQ5LGVbMjk4M109MTU1MSxlWzI5ODRdPTE1NTIsZVsyOTg2XT0xNTU0LGVbMjk4N109MTU1NSxlWzI5ODhdPTE1NTYsZVsyOTkwXT0xNjIzLGVbMjk5MV09MTYyNCxlWzI5OTVdPTE3NzUsZVsyOTk5XT0xNzkxLGVbMzAwMl09NjQyOTAsZVszMDAzXT02NDI5MSxlWzMwMDRdPTY0MjkyLGVbMzAwNl09NjQyOTQsZVszMDA3XT02NDI5NSxlWzMwMDhdPTY0Mjk2LGVbMzAxMV09MTkwMCxlWzMwMTRdPTgyMjMsZVszMDE1XT04MjQ0LGVbMzAxN109NzUzMixlWzMwMThdPTc1MzMsZVszMDE5XT03NTM0LGVbMzA3NV09NzU5MCxlWzMwNzZdPTc1OTEsZVszMDc5XT03NTk0LGVbMzA4MF09NzU5NSxlWzMwODNdPTc1OTgsZVszMDg0XT03NTk5LGVbMzA4N109NzYwMixlWzMwODhdPTc2MDMsZVszMDkxXT03NjA2LGVbMzA5Ml09NzYwNyxlWzMwOTVdPTc2MTAsZVszMDk2XT03NjExLGVbMzA5OV09NzYxNCxlWzMxMDBdPTc2MTUsZVszMTAzXT03NjE4LGVbMzEwNF09NzYxOSxlWzMxMDddPTgzMzcsZVszMTA4XT04MzM4LGVbMzExNl09MTg4NCxlWzMxMTldPTE4ODUsZVszMTIwXT0xODg1LGVbMzEyM109MTg4NixlWzMxMjRdPTE4ODYsZVszMTI3XT0xODg3LGVbMzEyOF09MTg4NyxlWzMxMzFdPTE4ODgsZVszMTMyXT0xODg4LGVbMzEzNV09MTg4OSxlWzMxMzZdPTE4ODksZVszMTM5XT0xODkwLGVbMzE0MF09MTg5MCxlWzMxNDNdPTE4OTEsZVszMTQ0XT0xODkxLGVbMzE0N109MTg5MixlWzMxNDhdPTE4OTIsZVszMTUzXT01ODAsZVszMTU0XT01ODEsZVszMTU3XT01ODQsZVszMTU4XT01ODUsZVszMTYxXT01ODgsZVszMTYyXT01ODksZVszMTY1XT04OTEsZVszMTY2XT04OTIsZVszMTY5XT0xMjc0LGVbMzE3MF09MTI3NSxlWzMxNzNdPTEyNzgsZVszMTc0XT0xMjc5LGVbMzE4MV09NzYyMixlWzMxODJdPTc2MjMsZVszMjgyXT0xMTc5OSxlWzMzMTZdPTU3OCxlWzMzNzldPTQyNzg1LGVbMzM5M109MTE1OSxlWzM0MTZdPTgzNzd9KSk7dC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM9bDt2YXIgZj0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjIsZVsyNjRdPTI2MSxlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPWY7dmFyIGg9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWzFdPTMyLGVbNF09NjUsZVs1XT0xOTIsZVs2XT0xOTMsZVs5XT0xOTYsZVsxN109NjYsZVsxOF09NjcsZVsyMV09MjY4LGVbMjRdPTY4LGVbMjhdPTY5LGVbMjldPTIwMCxlWzMwXT0yMDEsZVszMl09MjgyLGVbMzhdPTcwLGVbMzldPTcxLGVbNDRdPTcyLGVbNDddPTczLGVbNDhdPTIwNCxlWzQ5XT0yMDUsZVs1OF09NzQsZVs2MF09NzUsZVs2Ml09NzYsZVs2OF09NzcsZVs2OV09NzgsZVs3NV09NzksZVs3Nl09MjEwLGVbODBdPTIxNCxlWzg3XT04MCxlWzg5XT04MSxlWzkwXT04MixlWzkyXT0zNDQsZVs5NF09ODMsZVs5N109MzUyLGVbMTAwXT04NCxlWzEwNF09ODUsZVsxMDldPTIyMCxlWzExNV09ODYsZVsxMTZdPTg3LGVbMTIxXT04OCxlWzEyMl09ODksZVsxMjRdPTIyMSxlWzEyN109OTAsZVsxMjldPTM4MSxlWzI1OF09OTcsZVsyNTldPTIyNCxlWzI2MF09MjI1LGVbMjYzXT0yMjgsZVsyNjhdPTI2MSxlWzI3MV09OTgsZVsyNzJdPTk5LGVbMjczXT0yNjMsZVsyNzVdPTI2OSxlWzI4Ml09MTAwLGVbMjg2XT0xMDEsZVsyODddPTIzMixlWzI4OF09MjMzLGVbMjkwXT0yODMsZVsyOTVdPTI4MSxlWzI5Nl09MTAyLGVbMzM2XT0xMDMsZVszNDZdPTEwNCxlWzM0OV09MTA1LGVbMzUwXT0yMzYsZVszNTFdPTIzNyxlWzM2MV09MTA2LGVbMzY0XT0xMDcsZVszNjddPTEwOCxlWzM3MV09MzIyLGVbMzczXT0xMDksZVszNzRdPTExMCxlWzM4MV09MTExLGVbMzgyXT0yNDIsZVszODNdPTI0MyxlWzM4Nl09MjQ2LGVbMzkzXT0xMTIsZVszOTVdPTExMyxlWzM5Nl09MTE0LGVbMzk4XT0zNDUsZVs0MDBdPTExNSxlWzQwMV09MzQ3LGVbNDAzXT0zNTMsZVs0MTBdPTExNixlWzQzN109MTE3LGVbNDQyXT0yNTIsZVs0NDhdPTExOCxlWzQ0OV09MTE5LGVbNDU0XT0xMjAsZVs0NTVdPTEyMSxlWzQ1N109MjUzLGVbNDYwXT0xMjIsZVs0NjJdPTM4MixlWzQ2M109MzgwLGVbODUzXT00NCxlWzg1NV09NTgsZVs4NTZdPTQ2LGVbODc2XT00NyxlWzg3OF09NDUsZVs4ODJdPTQ1LGVbODk0XT00MCxlWzg5NV09NDEsZVs4OTZdPTkxLGVbODk3XT05MyxlWzkyM109NjQsZVsxMDA0XT00OCxlWzEwMDVdPTQ5LGVbMTAwNl09NTAsZVsxMDA3XT01MSxlWzEwMDhdPTUyLGVbMTAwOV09NTMsZVsxMDEwXT01NCxlWzEwMTFdPTU1LGVbMTAxMl09NTYsZVsxMDEzXT01NyxlWzEwODFdPTM3LGVbMTA4NV09NDMsZVsxMDg2XT00NX0pKTt0LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9Vbmljb2RlTWFwPXQuSWRlbnRpdHlUb1VuaWNvZGVNYXA9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtpKHRoaXMsZSksdGhpcy5fbWFwPXR9cmV0dXJuIHMoZSxbe2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuX21hcFt0XS5jaGFyQ29kZUF0KDApKX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcFtlXX19LHtrZXk6ImNoYXJDb2RlT2YiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHIgaW4gdClpZih0W3JdPT09ZSlyZXR1cm4gMHxyO3JldHVybi0xfX0se2tleToiYW1lbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXRoaXMuX21hcFt0XT1lW3RdfX1dKSxlfSgpO3QuVG9Vbmljb2RlTWFwPWM7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aSh0aGlzLGUpLHRoaXMuZmlyc3RDaGFyPXQsdGhpcy5sYXN0Q2hhcj1yfXJldHVybiBzKGUsW3trZXk6Imxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENoYXIrMS10aGlzLmZpcnN0Q2hhcn19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmZpcnN0Q2hhcixyPXRoaXMubGFzdENoYXI7dDw9cjt0KyspZSh0LHQpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXJ9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9fSx7a2V5OiJhbWVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpIil9fV0pLGV9KCk7dC5JZGVudGl0eVRvVW5pY29kZU1hcD11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0ZGRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigxNjcpLGk9cigyKTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnByb3BlcnRpZXM9cjt2YXIgbz1uZXcgbi5DRkZQYXJzZXIodCxyLGEuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1vLnBhcnNlKCksdGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO3ZhciBzPW5ldyBuLkNGRkNvbXBpbGVyKHRoaXMuY2ZmKTt0aGlzLnNlYWNzPXRoaXMuY2ZmLnNlYWNzO3RyeXt0aGlzLmRhdGE9cy5jb21waWxlKCl9Y2F0Y2goZSl7KDAsaS53YXJuKSgiRmFpbGVkIHRvIGNvbXBpbGUgZm9udCAiK3IubG9hZGVkTmFtZSksdGhpcy5kYXRhPXR9dGhpcy5fY3JlYXRlQnVpbHRJbkVuY29kaW5nKCl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJudW1HbHlwaHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNmZi5jaGFyU3RyaW5ncy5jb3VudH19LHtrZXk6ImdldENoYXJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJzZXQuY2hhcnNldH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5jZmYsbj10aGlzLnByb3BlcnRpZXMsaT1uLmNpZFRvR2lkTWFwLG89bi5jTWFwLHM9ci5jaGFyc2V0LmNoYXJzZXQ7aWYobi5jb21wb3NpdGUpe3ZhciBjLHU7aWYoaSYmaS5sZW5ndGg+MCl7Yz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbD0wLGY9aS5sZW5ndGg7bDxmO2wrKyl7dmFyIGg9aVtsXTt2b2lkIDAhPT1oJiYoY1toXT1sKX19aWYoZT1PYmplY3QuY3JlYXRlKG51bGwpLHIuaXNDSURGb250KWZvcih0PTA7dDxzLmxlbmd0aDt0Kyspe3ZhciBkPXNbdF07dT1vLmNoYXJDb2RlT2YoZCksYyYmdm9pZCAwIT09Y1t1XSYmKHU9Y1t1XSksZVt1XT10fWVsc2UgZm9yKHQ9MDt0PHIuY2hhclN0cmluZ3MuY291bnQ7dCsrKWVbdT1vLmNoYXJDb2RlT2YodCldPXQ7cmV0dXJuIGV9dmFyIHA9ci5lbmNvZGluZz9yLmVuY29kaW5nLmVuY29kaW5nOm51bGw7cmV0dXJuIG4uaXNJbnRlcm5hbEZvbnQmJihwPW4uZGVmYXVsdEVuY29kaW5nKSwoMCxhLnR5cGUxRm9udEdseXBoTWFwcGluZykobixwLHMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoZSl9fSx7a2V5OiJfY3JlYXRlQnVpbHRJbkVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2ZmLHQ9ZS5jaGFyc2V0LHI9ZS5lbmNvZGluZztpZih0JiZyKXt2YXIgbj10LmNoYXJzZXQsYT1yLmVuY29kaW5nLGk9W107Zm9yKHZhciBvIGluIGEpe3ZhciBzPWFbb107aWYocz49MCl7dmFyIGM9bltzXTtjJiYoaVtvXT1jKX19aS5sZW5ndGg+MCYmKHRoaXMucHJvcGVydGllcy5idWlsdEluRW5jb2Rpbmc9aSl9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0ZGRm9udD1jfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY0KSxpPXIoMTY4KSxvPXIoMTY2KSxzPXIoMTM5KTtmdW5jdGlvbiBjKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1mKGUpO2lmKHQpe3ZhciBhPWYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gZihlKXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sZihlKX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxoKGUpfWZ1bmN0aW9uIGQoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWgoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1oKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscil7cmV0dXJuIHQmJnAoZS5wcm90b3R5cGUsdCksciYmcChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNik+PjE2fWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gZVt0XTw8MjQ+PjI0fWZ1bmN0aW9uIHcoZSx0KXtyZXR1cm4gbShlLHQpLzE2Mzg0fWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZS5sZW5ndGgscj0zMjc2ODtyZXR1cm4gdDwxMjQwP3I9MTA3OnQ8MzM5MDAmJihyPTExMzEpLHJ9ZnVuY3Rpb24gUyhlLHQscil7dmFyIGEsaSxvLHM9MT09PXkoZSx0KzIpP3YoZSx0KzgpOnYoZSx0KzE2KSxjPXkoZSx0K3MpO2lmKDQ9PT1jKXt5KGUsdCtzKzIpO3ZhciB1PXkoZSx0K3MrNik+PjE7Zm9yKGk9dCtzKzE0LGE9W10sbz0wO288dTtvKyssaSs9MilhW29dPXtlbmQ6eShlLGkpfTtmb3IoaSs9MixvPTA7bzx1O28rKyxpKz0yKWFbb10uc3RhcnQ9eShlLGkpO2ZvcihvPTA7bzx1O28rKyxpKz0yKWFbb10uaWREZWx0YT15KGUsaSk7Zm9yKG89MDtvPHU7bysrLGkrPTIpe3ZhciBsPXkoZSxpKTtpZigwIT09bCl7YVtvXS5pZHM9W107Zm9yKHZhciBmPTAsaD1hW29dLmVuZC1hW29dLnN0YXJ0KzE7ZjxoO2YrKylhW29dLmlkc1tmXT15KGUsaStsKSxsKz0yfX1yZXR1cm4gYX1pZigxMj09PWMpe3ZhciBkPXYoZSx0K3MrMTIpO2ZvcihpPXQrcysxNixhPVtdLG89MDtvPGQ7bysrKXQ9dihlLGkpLGEucHVzaCh7c3RhcnQ6dCxlbmQ6dihlLGkrNCksaWREZWx0YTp2KGUsaSs4KS10fSksaSs9MTI7cmV0dXJuIGF9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuc3VwcG9ydGVkIGNtYXA6ICIuY29uY2F0KGMpKX1mdW5jdGlvbiB4KGUsdCxyLG4pe3ZhciBpPW5ldyBhLkNGRlBhcnNlcihuZXcgcy5TdHJlYW0oZSx0LHItdCkse30sbikucGFyc2UoKTtyZXR1cm57Z2x5cGhzOmkuY2hhclN0cmluZ3Mub2JqZWN0cyxzdWJyczppLnRvcERpY3QucHJpdmF0ZURpY3QmJmkudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4JiZpLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleC5vYmplY3RzLGdzdWJyczppLmdsb2JhbFN1YnJJbmRleCYmaS5nbG9iYWxTdWJySW5kZXgub2JqZWN0cyxpc0NGRkNJREZvbnQ6aS5pc0NJREZvbnQsZmRTZWxlY3Q6aS5mZFNlbGVjdCxmZEFycmF5OmkuZmRBcnJheX19ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgcj10LmNvZGVQb2ludEF0KDApLG49MCxhPTAsaT1lLmxlbmd0aC0xO2E8aTspe3ZhciBvPWEraSsxPj4xO3I8ZVtvXS5zdGFydD9pPW8tMTphPW99cmV0dXJuIGVbYV0uc3RhcnQ8PXImJnI8PWVbYV0uZW5kJiYobj1lW2FdLmlkRGVsdGErKGVbYV0uaWRzP2VbYV0uaWRzW3ItZVthXS5zdGFydF06cikmNjU1MzUpLHtjaGFyQ29kZTpyLGdseXBoSWQ6bn19ZnVuY3Rpb24gQShlLHQscil7ZnVuY3Rpb24gbihlLHIpe3QucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBhKGUscil7dC5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSxyXX0pfWZ1bmN0aW9uIGkoZSxyLG4sYSl7dC5wdXNoKHtjbWQ6InF1YWRyYXRpY0N1cnZlVG8iLGFyZ3M6W2UscixuLGFdfSl9dmFyIG8scz0wLGM9bShlLHMpLHU9MCxsPTA7aWYocys9MTAsYzwwKWRve289eShlLHMpO3ZhciBmPXkoZSxzKzIpO3MrPTQ7dmFyIGg9dm9pZCAwLGQ9dm9pZCAwOzEmbz8oMiZvPyhoPW0oZSxzKSxkPW0oZSxzKzIpKTooaD15KGUscyksZD15KGUscysyKSkscys9NCk6MiZvPyhoPWIoZSxzKyspLGQ9YihlLHMrKykpOihoPWVbcysrXSxkPWVbcysrXSksMiZvPyh1PWgsbD1kKToodT0wLGw9MCk7dmFyIHA9MSxnPTEsdj0wLGs9MDs4Jm8/KHA9Zz13KGUscykscys9Mik6NjQmbz8ocD13KGUscyksZz13KGUscysyKSxzKz00KToxMjgmbyYmKHA9dyhlLHMpLHY9dyhlLHMrMiksaz13KGUscys0KSxnPXcoZSxzKzYpLHMrPTgpO3ZhciBTPXIuZ2x5cGhzW2ZdO1MmJih0LnB1c2goe2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zZm9ybSIsYXJnczpbcCx2LGssZyx1LGxdfSksQShTLHQsciksdC5wdXNoKHtjbWQ6InJlc3RvcmUifSkpfXdoaWxlKDMyJm8pO2Vsc2V7dmFyIHgsTyxDPVtdO2Zvcih4PTA7eDxjO3grKylDLnB1c2goeShlLHMpKSxzKz0yO3MrPTIreShlLHMpO2Zvcih2YXIgRj1DLmF0KC0xKSsxLFA9W107UC5sZW5ndGg8Rjspe3ZhciBUPTE7Zm9yKDgmKG89ZVtzKytdKSYmKFQrPWVbcysrXSk7VC0tID4wOylQLnB1c2goe2ZsYWdzOm99KX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgxOCZQW3hdLmZsYWdzKXtjYXNlIDA6dSs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSAyOnUtPWVbcysrXTticmVhaztjYXNlIDE4OnUrPWVbcysrXX1QW3hdLng9dX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgzNiZQW3hdLmZsYWdzKXtjYXNlIDA6bCs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSA0OmwtPWVbcysrXTticmVhaztjYXNlIDM2OmwrPWVbcysrXX1QW3hdLnk9bH12YXIgST0wO2ZvcihzPTA7czxjO3MrKyl7dmFyIEU9Q1tzXSxqPVAuc2xpY2UoSSxFKzEpO2lmKDEmalswXS5mbGFncylqLnB1c2goalswXSk7ZWxzZSBpZigxJmouYXQoLTEpLmZsYWdzKWoudW5zaGlmdChqLmF0KC0xKSk7ZWxzZXt2YXIgTT17ZmxhZ3M6MSx4OihqWzBdLngrai5hdCgtMSkueCkvMix5OihqWzBdLnkrai5hdCgtMSkueSkvMn07ai51bnNoaWZ0KE0pLGoucHVzaChNKX1mb3IobihqWzBdLngsalswXS55KSx4PTEsTz1qLmxlbmd0aDt4PE87eCsrKTEmalt4XS5mbGFncz9hKGpbeF0ueCxqW3hdLnkpOjEmalt4KzFdLmZsYWdzPyhpKGpbeF0ueCxqW3hdLnksalt4KzFdLngsalt4KzFdLnkpLHgrKyk6aShqW3hdLngsalt4XS55LChqW3hdLngralt4KzFdLngpLzIsKGpbeF0ueStqW3grMV0ueSkvMik7ST1FKzF9fX1mdW5jdGlvbiBDKGUsdCxyLGEpe2Z1bmN0aW9uIGkoZSxyKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLHJdfSl9ZnVuY3Rpb24gcyhlLHIpe3QucHVzaCh7Y21kOiJsaW5lVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBjKGUscixuLGEsaSxvKXt0LnB1c2goe2NtZDoiYmV6aWVyQ3VydmVUbyIsYXJnczpbZSxyLG4sYSxpLG9dfSl9dmFyIHU9W10sbD0wLGY9MCxoPTA7IWZ1bmN0aW9uIGUoZCl7Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDspe3ZhciBnPSExLHY9ZFtwKytdLHk9dm9pZCAwLG09dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLFM9dm9pZCAwLHg9dm9pZCAwLEE9dm9pZCAwLEY9dm9pZCAwO3N3aXRjaCh2KXtjYXNlIDE6Y2FzZSAzOmNhc2UgMTg6Y2FzZSAyMzpoKz11Lmxlbmd0aD4+MSxnPSEwO2JyZWFrO2Nhc2UgNDpmKz11LnBvcCgpLGkobCxmKSxnPSEwO2JyZWFrO2Nhc2UgNTpmb3IoO3UubGVuZ3RoPjA7KWwrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNjpmb3IoO3UubGVuZ3RoPjAmJihzKGwrPXUuc2hpZnQoKSxmKSwwIT09dS5sZW5ndGgpOylmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNzpmb3IoO3UubGVuZ3RoPjAmJihmKz11LnNoaWZ0KCkscyhsLGYpLDAhPT11Lmxlbmd0aCk7KXMobCs9dS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgODpmb3IoO3UubGVuZ3RoPjA7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2Nhc2UgMTA6aWYoQT11LnBvcCgpLEY9bnVsbCxyLmlzQ0ZGQ0lERm9udCl7dmFyIFA9ci5mZFNlbGVjdC5nZXRGREluZGV4KGEpO2lmKFA+PTAmJlA8ci5mZEFycmF5Lmxlbmd0aCl7dmFyIFQ9ci5mZEFycmF5W1BdLEk9dm9pZCAwO1QucHJpdmF0ZURpY3QmJlQucHJpdmF0ZURpY3Quc3VicnNJbmRleCYmKEk9VC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMpLEkmJihGPUlbQSs9ayhJKV0pfWVsc2UoMCxuLndhcm4pKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKX1lbHNlIEY9ci5zdWJyc1tBK3Iuc3VicnNCaWFzXTtGJiZlKEYpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKHY9ZFtwKytdKXtjYXNlIDM0Om09KHk9bCt1LnNoaWZ0KCkpK3Uuc2hpZnQoKSxTPWYrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LGYsbSxTLGwsUyksbT0oeT1sK3Uuc2hpZnQoKSkrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LFMsbSxmLGwsZik7YnJlYWs7Y2FzZSAzNTp5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx1LnBvcCgpO2JyZWFrO2Nhc2UgMzY6Yyh5PWwrdS5zaGlmdCgpLFM9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx4PVMrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCkseCksYyh5PWwrdS5zaGlmdCgpLHgsbT15K3Uuc2hpZnQoKSx4K3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgMzc6dmFyIEU9bCxqPWY7eT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZikseT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0sZj13LE1hdGguYWJzKGwtRSk+TWF0aC5hYnMoZi1qKT9sKz11LnNoaWZ0KCk6Zis9dS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVua25vd24gb3BlcmF0b3I6IDEyICIuY29uY2F0KHYpKX1icmVhaztjYXNlIDE0OmlmKHUubGVuZ3RoPj00KXt2YXIgTT11LnBvcCgpLF89dS5wb3AoKTtmPXUucG9wKCksbD11LnBvcCgpLHQucHVzaCh7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNsYXRlIixhcmdzOltsLGZdfSk7dmFyIEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbTV1dKSk7QyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpLHQucHVzaCh7Y21kOiJyZXN0b3JlIn0pLEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbX11dKSksQyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6cCs9KGgrPXUubGVuZ3RoPj4xKSs3Pj4zLGc9ITA7YnJlYWs7Y2FzZSAyMTpmKz11LnBvcCgpLGkobCs9dS5wb3AoKSxmKSxnPSEwO2JyZWFrO2Nhc2UgMjI6aShsKz11LnBvcCgpLGYpLGc9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO3UubGVuZ3RoPjI7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2wrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgMjU6Zm9yKDt1Lmxlbmd0aD42OylsKz11LnNoaWZ0KCksZis9dS5zaGlmdCgpLHMobCxmKTt5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKTticmVhaztjYXNlIDI2OmZvcih1Lmxlbmd0aCUyJiYobCs9dS5zaGlmdCgpKTt1Lmxlbmd0aD4wOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZik7YnJlYWs7Y2FzZSAyNzpmb3IodS5sZW5ndGglMiYmKGYrPXUuc2hpZnQoKSk7dS5sZW5ndGg+MDspYyh5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcpO2JyZWFrO2Nhc2UgMjg6dS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2KT4+MTYpLHArPTI7YnJlYWs7Y2FzZSAyOTpBPXUucG9wKCkrci5nc3VicnNCaWFzLChGPXIuZ3N1YnJzW0FdKSYmZShGKTticmVhaztjYXNlIDMwOmZvcig7dS5sZW5ndGg+MCYmKHk9bCxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dysoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxjKHksYixtLHcsbCxmKSwwIT09dS5sZW5ndGgpOyl5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbD1tKygxPT09dS5sZW5ndGg/dS5zaGlmdCgpOjApLGYpO2JyZWFrO2Nhc2UgMzE6Zm9yKDt1Lmxlbmd0aD4wJiYoeT1sK3Uuc2hpZnQoKSxiPWYsbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGw9bSsoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxmKSwwIT09dS5sZW5ndGgpOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrKDE9PT11Lmxlbmd0aD91LnNoaWZ0KCk6MCksYyh5LGIsbSx3LGwsZik7YnJlYWs7ZGVmYXVsdDppZih2PDMyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIG9wZXJhdG9yOiAiLmNvbmNhdCh2KSk7djwyNDc/dS5wdXNoKHYtMTM5KTp2PDI1MT91LnB1c2goMjU2Kih2LTI0NykrZFtwKytdKzEwOCk6djwyNTU/dS5wdXNoKDI1NiotKHYtMjUxKS1kW3ArK10tMTA4KToodS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2fGRbcCsyXTw8OHxkW3ArM10pLzY1NTM2KSxwKz00KX1nJiYodS5sZW5ndGg9MCl9fShlKX12YXIgRj1bXSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtkKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBDb21waWxlZEZvbnQuIiksdGhpcy5mb250TWF0cml4PXQsdGhpcy5jb21waWxlZEdseXBocz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZD1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBnKGUsW3trZXk6ImdldFBhdGhKcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkLGE9dGhpcy5jb21waWxlZEdseXBoc1tuXTtpZighYSl0cnl7YT10aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tuXSxuKSx0aGlzLmNvbXBpbGVkR2x5cGhzW25dPWF9Y2F0Y2goZSl7dGhyb3cgdGhpcy5jb21waWxlZEdseXBoc1tuXT1GLHZvaWQgMD09PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXSYmKHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXT1uKSxlfXJldHVybiB2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl09biksYX19LHtrZXk6ImNvbXBpbGVHbHlwaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighZXx8MD09PWUubGVuZ3RofHwxND09PWVbMF0pcmV0dXJuIEY7dmFyIHI9dGhpcy5mb250TWF0cml4O2lmKHRoaXMuaXNDRkZDSURGb250KXt2YXIgYT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgodCk7YT49MCYmYTx0aGlzLmZkQXJyYXkubGVuZ3RoP3I9dGhpcy5mZEFycmF5W2FdLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpfHxuLkZPTlRfSURFTlRJVFlfTUFUUklYOigwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfXZhciBpPVt7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNmb3JtIixhcmdzOnIuc2xpY2UoKX0se2NtZDoic2NhbGUiLGFyZ3M6WyJzaXplIiwiLXNpemUiXX1dO3JldHVybiB0aGlzLmNvbXBpbGVHbHlwaEltcGwoZSxpLHQpLGkucHVzaCh7Y21kOiJyZXN0b3JlIn0pLGl9fSx7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy4iKX19LHtrZXk6Imhhc0J1aWx0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkO3JldHVybiB2b2lkIDAhPT10aGlzLmNvbXBpbGVkR2x5cGhzW25dJiZ2b2lkIDAhPT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl19fV0pLGV9KCksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gZCh0aGlzLHIpLChpPXQuY2FsbCh0aGlzLGF8fFs0ODhlLTYsMCwwLDQ4OGUtNiwwLDBdKSkuZ2x5cGhzPWUsaS5jbWFwPW4saX1yZXR1cm4gZyhyLFt7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbihlLHQpe0EoZSx0LHRoaXMpfX1dKSxyfShQKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsbyl7dmFyIHM7cmV0dXJuIGQodGhpcyxyKSwocz10LmNhbGwodGhpcyxhfHxbLjAwMSwwLDAsLjAwMSwwLDBdKSkuZ2x5cGhzPWUuZ2x5cGhzLHMuZ3N1YnJzPWUuZ3N1YnJzfHxbXSxzLnN1YnJzPWUuc3VicnN8fFtdLHMuY21hcD1uLHMuZ2x5cGhOYW1lTWFwPW98fCgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSxzLmdzdWJyc0JpYXM9ayhzLmdzdWJycykscy5zdWJyc0JpYXM9ayhzLnN1YnJzKSxzLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udCxzLmZkU2VsZWN0PWUuZmRTZWxlY3Qscy5mZEFycmF5PWUuZmRBcnJheSxzfXJldHVybiBnKHIsW3trZXk6ImNvbXBpbGVHbHlwaEltcGwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtDKGUsdCx0aGlzLHIpfX1dKSxyfShQKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2QodGhpcyxlKX1yZXR1cm4gZyhlLG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsYSxpLG8scyxjLHU9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKSxsPXkodSw0KSxmPTAsaD0xMjtmPGw7ZisrLGgrPTE2KXt2YXIgZD0oMCxuLmJ5dGVzVG9TdHJpbmcpKHUuc3ViYXJyYXkoaCxoKzQpKSxwPXYodSxoKzgpLGc9dih1LGgrMTIpO3N3aXRjaChkKXtjYXNlImNtYXAiOnI9Uyh1LHApO2JyZWFrO2Nhc2UiZ2x5ZiI6YT11LnN1YmFycmF5KHAscCtnKTticmVhaztjYXNlImxvY2EiOmk9dS5zdWJhcnJheShwLHArZyk7YnJlYWs7Y2FzZSJoZWFkIjpjPXkodSxwKzE4KSxzPXkodSxwKzUwKTticmVhaztjYXNlIkNGRiAiOm89eCh1LHAscCtnLHQpfX1pZihhKXt2YXIgbT1jP1sxL2MsMCwwLDEvYywwLDBdOmUuZm9udE1hdHJpeDtyZXR1cm4gbmV3IFQoZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7cj8obj00LGE9dik6KG49MixhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDIqeShlLHQpfSk7Zm9yKHZhciBpPVtdLG89YSh0LDApLHM9bjtzPHQubGVuZ3RoO3MrPW4pe3ZhciBjPWEodCxzKTtpLnB1c2goZS5zdWJhcnJheShvLGMpKSxvPWN9cmV0dXJuIGl9KGEsaSxzKSxyLG0pfXJldHVybiBuZXcgSShvLHIsZS5mb250TWF0cml4LGUuZ2x5cGhOYW1lTWFwKX19XSksZX0oKTt0LkZvbnRSZW5kZXJlckZhY3Rvcnk9RX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE1ldHJpY3M9dC5nZXRGb250QmFzaWNNZXRyaWNzPXZvaWQgMDt2YXIgbj1yKDEzNSksYT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj02MDAsZVsiQ291cmllci1Cb2xkIl09NjAwLGVbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT02MDAsZVsiQ291cmllci1PYmxpcXVlIl09NjAwLGUuSGVsdmV0aWNhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5leGNsYW09Mjc4LGUucXVvdGVkYmw9MzU1LGUubnVtYmVyc2lnbj01NTYsZS5kb2xsYXI9NTU2LGUucGVyY2VudD04ODksZS5hbXBlcnNhbmQ9NjY3LGUucXVvdGVyaWdodD0yMjIsZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlzaz0zODksZS5wbHVzPTU4NCxlLmNvbW1hPTI3OCxlLmh5cGhlbj0zMzMsZS5wZXJpb2Q9Mjc4LGUuc2xhc2g9Mjc4LGUuemVybz01NTYsZS5vbmU9NTU2LGUudHdvPTU1NixlLnRocmVlPTU1NixlLmZvdXI9NTU2LGUuZml2ZT01NTYsZS5zaXg9NTU2LGUuc2V2ZW49NTU2LGUuZWlnaHQ9NTU2LGUubmluZT01NTYsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01ODQsZS5lcXVhbD01ODQsZS5ncmVhdGVyPTU4NCxlLnF1ZXN0aW9uPTU1NixlLmF0PTEwMTUsZS5BPTY2NyxlLkI9NjY3LGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTUwMCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9Mjc4LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0yNzgsZS5hc2NpaWNpcmN1bT00NjksZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yMjIsZS5hPTU1NixlLmI9NTU2LGUuYz01MDAsZS5kPTU1NixlLmU9NTU2LGUuZj0yNzgsZS5nPTU1NixlLmg9NTU2LGUuaT0yMjIsZS5qPTIyMixlLms9NTAwLGUubD0yMjIsZS5tPTgzMyxlLm49NTU2LGUubz01NTYsZS5wPTU1NixlLnE9NTU2LGUucj0zMzMsZS5zPTUwMCxlLnQ9Mjc4LGUudT01NTYsZS52PTUwMCxlLnc9NzIyLGUueD01MDAsZS55PTUwMCxlLno9NTAwLGUuYnJhY2VsZWZ0PTMzNCxlLmJhcj0yNjAsZS5icmFjZXJpZ2h0PTMzNCxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0xOTEsZS5xdW90ZWRibGxlZnQ9MzMzLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01MzcsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MjIyLGUucXVvdGVkYmxiYXNlPTMzMyxlLnF1b3RlZGJscmlnaHQ9MzMzLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTU1NixlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTIyMixlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NTU2LGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTY2NyxlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTAwLGUuc2NvbW1hYWNjZW50PTUwMCxlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTU1NixlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTUwMCxlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9MjIyLGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTUwMCxlLnNjZWRpbGxhPTUwMCxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NTU2LGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj02NjcsZS5yY2Fyb249MzMzLGUuY2NlZGlsbGE9NTAwLGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTY0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NTU2LGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTY2NyxlLkFicmV2ZT02NjcsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NTU2LGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz01MDAsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTAwLGUubmFjdXRlPTU1NixlLnVtYWNyb249NTU2LGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI2MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9MzMzLGUub21hY3Jvbj01NTYsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTIyMixlLnRjYXJvbj0zMTcsZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTY2NyxlLkFkaWVyZXNpcz02NjcsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9MjIyLGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT01NTYsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01MDAsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTU1NixlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT01NTYsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01NTYsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD01NTYsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj0yOTksZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj01NTYsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01NTYsZS5udGlsZGU9NTU2LGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NTU2LGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01NTYsZS5DY2Fyb249NzIyLGUudWdyYXZlPTU1NixlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zMzMsZS5OdGlsZGU9NzIyLGUub3RpbGRlPTU1NixlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTY2NyxlLkFvZ29uZWs9NjY3LGUuQXJpbmc9NjY3LGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTUwMCxlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj01NTYsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NTU2LGUudWRpZXJlc2lzPTU1NixlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01NTYsZS5ldGg9NTU2LGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD01NTYsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00NzQsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD03MjIsZS5xdW90ZXJpZ2h0PTI3OCxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NjExLGUuYXQ9OTc1LGUuQT03MjIsZS5CPTcyMixlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTcyMixlLkk9Mjc4LGUuSj01NTYsZS5LPTcyMixlLkw9NjExLGUuTT04MzMsZS5OPTcyMixlLk89Nzc4LGUuUD02NjcsZS5RPTc3OCxlLlI9NzIyLGUuUz02NjcsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTk0NCxlLlg9NjY3LGUuWT02NjcsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTg0LGUudW5kZXJzY29yZT01NTYsZS5xdW90ZWxlZnQ9Mjc4LGUuYT01NTYsZS5iPTYxMSxlLmM9NTU2LGUuZD02MTEsZS5lPTU1NixlLmY9MzMzLGUuZz02MTEsZS5oPTYxMSxlLmk9Mjc4LGUuaj0yNzgsZS5rPTU1NixlLmw9Mjc4LGUubT04ODksZS5uPTYxMSxlLm89NjExLGUucD02MTEsZS5xPTYxMSxlLnI9Mzg5LGUucz01NTYsZS50PTMzMyxlLnU9NjExLGUudj01NTYsZS53PTc3OCxlLng9NTU2LGUueT01NTYsZS56PTUwMCxlLmJyYWNlbGVmdD0zODksZS5iYXI9MjgwLGUuYnJhY2VyaWdodD0zODksZS5hc2NpaXRpbGRlPTU4NCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01NTYsZS5zdGVybGluZz01NTYsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTU2LGUuZmxvcmluPTU1NixlLnNlY3Rpb249NTU2LGUuY3VycmVuY3k9NTU2LGUucXVvdGVzaW5nbGU9MjM4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTU2LGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT02MTEsZS5mbD02MTEsZS5lbmRhc2g9NTU2LGUuZGFnZ2VyPTU1NixlLmRhZ2dlcmRibD01NTYsZS5wZXJpb2RjZW50ZXJlZD0yNzgsZS5wYXJhZ3JhcGg9NTU2LGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTI3OCxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTU1NixlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj02MTEsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTM3MCxlLkxzbGFzaD02MTEsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTM2NSxlLmFlPTg4OSxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NjExLGUub2U9OTQ0LGUuZ2VybWFuZGJscz02MTEsZS5JZGllcmVzaXM9Mjc4LGUuZWFjdXRlPTU1NixlLmFicmV2ZT01NTYsZS51aHVuZ2FydW1sYXV0PTYxMSxlLmVjYXJvbj01NTYsZS5ZZGllcmVzaXM9NjY3LGUuZGl2aWRlPTU4NCxlLllhY3V0ZT02NjcsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTU2LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTU1NixlLnNjb21tYWFjY2VudD01NTYsZS5lY2lyY3VtZmxleD01NTYsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01NTYsZS5VYWN1dGU9NzIyLGUudW9nb25laz02MTEsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03MzcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj01NTYsZS5hcmluZz01NTYsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01NTYsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01NTYsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj01NTYsZS5zY2VkaWxsYT01NTYsZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTYxMSxlLmFjaXJjdW1mbGV4PTU1NixlLkFtYWNyb249NzIyLGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTU1NixlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjY3LGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTY2NyxlLmRjYXJvbj03NDMsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTYxMSxlLnRocmVlc3VwZXJpb3I9MzMzLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTg0LGUudWFjdXRlPTYxMSxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTU2LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01NTYsZS5lZGllcmVzaXM9NTU2LGUuY2FjdXRlPTU1NixlLm5hY3V0ZT02MTEsZS51bWFjcm9uPTYxMSxlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mjc4LGUucGx1c21pbnVzPTU4NCxlLmJyb2tlbmJhcj0yODAsZS5yZWdpc3RlcmVkPTczNyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTI3OCxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NjExLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249Mzg5LGUuZW9nb25laz01NTYsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTU1NixlLnphY3V0ZT01MDAsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NjExLGUuYW1hY3Jvbj01NTYsZS5zYWN1dGU9NTU2LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj02MTEsZS50d29zdXBlcmlvcj0zMzMsZS5PZGllcmVzaXM9Nzc4LGUubXU9NjExLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NjExLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NjExLGUudGhyZWVxdWFydGVycz04MzQsZS5TY2VkaWxsYT02NjcsZS5sY2Fyb249NDAwLGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD01NTYsZS5JZ3JhdmU9Mjc4LGUuSW1hY3Jvbj0yNzgsZS5MY2Fyb249NjExLGUub25laGFsZj04MzQsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NjExLGUubnRpbGRlPTYxMSxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NTU2LGUuZ2JyZXZlPTYxMSxlLm9uZXF1YXJ0ZXI9ODM0LGUuU2Nhcm9uPTY2NyxlLlNjb21tYWFjY2VudD02NjcsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NjExLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT02MTEsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT02MTEsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTUwMCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTI3OCxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01ODQsZS5JY2lyY3VtZmxleD0yNzgsZS5uY2Fyb249NjExLGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTg0LGUub2RpZXJlc2lzPTYxMSxlLnVkaWVyZXNpcz02MTEsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NjExLGUuZXRoPTYxMSxlLnpjYXJvbj01MDAsZS5uY29tbWFhY2NlbnQ9NjExLGUub25lc3VwZXJpb3I9MzMzLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTU1Nn0pKSxlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4LGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQ3NCxlLm51bWJlcnNpZ249NTU2LGUuZG9sbGFyPTU1NixlLnBlcmNlbnQ9ODg5LGUuYW1wZXJzYW5kPTcyMixlLnF1b3RlcmlnaHQ9Mjc4LGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9Mzg5LGUucGx1cz01ODQsZS5jb21tYT0yNzgsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI3OCxlLnNsYXNoPTI3OCxlLnplcm89NTU2LGUub25lPTU1NixlLnR3bz01NTYsZS50aHJlZT01NTYsZS5mb3VyPTU1NixlLmZpdmU9NTU2LGUuc2l4PTU1NixlLnNldmVuPTU1NixlLmVpZ2h0PTU1NixlLm5pbmU9NTU2LGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTg0LGUuZXF1YWw9NTg0LGUuZ3JlYXRlcj01ODQsZS5xdWVzdGlvbj02MTEsZS5hdD05NzUsZS5BPTcyMixlLkI9NzIyLGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTU1NixlLks9NzIyLGUuTD02MTEsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01ODQsZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yNzgsZS5hPTU1NixlLmI9NjExLGUuYz01NTYsZS5kPTYxMSxlLmU9NTU2LGUuZj0zMzMsZS5nPTYxMSxlLmg9NjExLGUuaT0yNzgsZS5qPTI3OCxlLms9NTU2LGUubD0yNzgsZS5tPTg4OSxlLm49NjExLGUubz02MTEsZS5wPTYxMSxlLnE9NjExLGUucj0zODksZS5zPTU1NixlLnQ9MzMzLGUudT02MTEsZS52PTU1NixlLnc9Nzc4LGUueD01NTYsZS55PTU1NixlLno9NTAwLGUuYnJhY2VsZWZ0PTM4OSxlLmJhcj0yODAsZS5icmFjZXJpZ2h0PTM4OSxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0yMzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTYxMSxlLmZsPTYxMSxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01NTYsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9Mjc4LGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NjExLGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTU2LGUuc2NvbW1hYWNjZW50PTU1NixlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTYxMSxlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTU1NixlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTU1NixlLnNjZWRpbGxhPTU1NixlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NjExLGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NTU2LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTc0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NjExLGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NjExLGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz01NTYsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTU2LGUubmFjdXRlPTYxMSxlLnVtYWNyb249NjExLGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI4MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj02MTEsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zODksZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT02MTEsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01NTYsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTYxMSxlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT02MTEsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD02MTEsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD02MTEsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj00MDAsZS5LY29tbWFhY2NlbnQ9NzIyLGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD02MTEsZS5udGlsZGU9NjExLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NjExLGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT02MTEsZS5DY2Fyb249NzIyLGUudWdyYXZlPTYxMSxlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NzIyLGUub3RpbGRlPTYxMSxlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTU1NixlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj02MTEsZS50Y29tbWFhY2NlbnQ9MzMzLGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NjExLGUudWRpZXJlc2lzPTYxMSxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD02MTEsZS5ldGg9NjExLGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD02MTEsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1PYmxpcXVlIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0yNzgsZS5xdW90ZWRibD0zNTUsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD02NjcsZS5xdW90ZXJpZ2h0PTIyMixlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NTU2LGUuYXQ9MTAxNSxlLkE9NjY3LGUuQj02NjcsZS5DPTcyMixlLkQ9NzIyLGUuRT02NjcsZS5GPTYxMSxlLkc9Nzc4LGUuSD03MjIsZS5JPTI3OCxlLko9NTAwLGUuSz02NjcsZS5MPTU1NixlLk09ODMzLGUuTj03MjIsZS5PPTc3OCxlLlA9NjY3LGUuUT03NzgsZS5SPTcyMixlLlM9NjY3LGUuVD02MTEsZS5VPTcyMixlLlY9NjY3LGUuVz05NDQsZS5YPTY2NyxlLlk9NjY3LGUuWj02MTEsZS5icmFja2V0bGVmdD0yNzgsZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTI3OCxlLmFzY2lpY2lyY3VtPTQ2OSxlLnVuZGVyc2NvcmU9NTU2LGUucXVvdGVsZWZ0PTIyMixlLmE9NTU2LGUuYj01NTYsZS5jPTUwMCxlLmQ9NTU2LGUuZT01NTYsZS5mPTI3OCxlLmc9NTU2LGUuaD01NTYsZS5pPTIyMixlLmo9MjIyLGUuaz01MDAsZS5sPTIyMixlLm09ODMzLGUubj01NTYsZS5vPTU1NixlLnA9NTU2LGUucT01NTYsZS5yPTMzMyxlLnM9NTAwLGUudD0yNzgsZS51PTU1NixlLnY9NTAwLGUudz03MjIsZS54PTUwMCxlLnk9NTAwLGUuej01MDAsZS5icmFjZWxlZnQ9MzM0LGUuYmFyPTI2MCxlLmJyYWNlcmlnaHQ9MzM0LGUuYXNjaWl0aWxkZT01ODQsZS5leGNsYW1kb3duPTMzMyxlLmNlbnQ9NTU2LGUuc3Rlcmxpbmc9NTU2LGUuZnJhY3Rpb249MTY3LGUueWVuPTU1NixlLmZsb3Jpbj01NTYsZS5zZWN0aW9uPTU1NixlLmN1cnJlbmN5PTU1NixlLnF1b3Rlc2luZ2xlPTE5MSxlLnF1b3RlZGJsbGVmdD0zMzMsZS5ndWlsbGVtb3RsZWZ0PTU1NixlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NTAwLGUuZmw9NTAwLGUuZW5kYXNoPTU1NixlLmRhZ2dlcj01NTYsZS5kYWdnZXJkYmw9NTU2LGUucGVyaW9kY2VudGVyZWQ9Mjc4LGUucGFyYWdyYXBoPTUzNyxlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0yMjIsZS5xdW90ZWRibGJhc2U9MzMzLGUucXVvdGVkYmxyaWdodD0zMzMsZS5ndWlsbGVtb3RyaWdodD01NTYsZS5lbGxpcHNpcz0xZTMsZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NjExLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD0xZTMsZS5BRT0xZTMsZS5vcmRmZW1pbmluZT0zNzAsZS5Mc2xhc2g9NTU2LGUuT3NsYXNoPTc3OCxlLk9FPTFlMyxlLm9yZG1hc2N1bGluZT0zNjUsZS5hZT04ODksZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9MjIyLGUub3NsYXNoPTYxMSxlLm9lPTk0NCxlLmdlcm1hbmRibHM9NjExLGUuSWRpZXJlc2lzPTI3OCxlLmVhY3V0ZT01NTYsZS5hYnJldmU9NTU2LGUudWh1bmdhcnVtbGF1dD01NTYsZS5lY2Fyb249NTU2LGUuWWRpZXJlc2lzPTY2NyxlLmRpdmlkZT01ODQsZS5ZYWN1dGU9NjY3LGUuQWNpcmN1bWZsZXg9NjY3LGUuYWFjdXRlPTU1NixlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT01MDAsZS5zY29tbWFhY2NlbnQ9NTAwLGUuZWNpcmN1bWZsZXg9NTU2LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTU2LGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NTU2LGUuRWRpZXJlc2lzPTY2NyxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzM3LGUuRW1hY3Jvbj02NjcsZS5jY2Fyb249NTAwLGUuYXJpbmc9NTU2LGUuTmNvbW1hYWNjZW50PTcyMixlLmxhY3V0ZT0yMjIsZS5hZ3JhdmU9NTU2LGUuVGNvbW1hYWNjZW50PTYxMSxlLkNhY3V0ZT03MjIsZS5hdGlsZGU9NTU2LGUuRWRvdGFjY2VudD02NjcsZS5zY2Fyb249NTAwLGUuc2NlZGlsbGE9NTAwLGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDcxLGUuUmNhcm9uPTcyMixlLkdjb21tYWFjY2VudD03NzgsZS51Y2lyY3VtZmxleD01NTYsZS5hY2lyY3VtZmxleD01NTYsZS5BbWFjcm9uPTY2NyxlLnJjYXJvbj0zMzMsZS5jY2VkaWxsYT01MDAsZS5aZG90YWNjZW50PTYxMSxlLlRob3JuPTY2NyxlLk9tYWNyb249Nzc4LGUuUmFjdXRlPTcyMixlLlNhY3V0ZT02NjcsZS5kY2Fyb249NjQzLGUuVW1hY3Jvbj03MjIsZS51cmluZz01NTYsZS50aHJlZXN1cGVyaW9yPTMzMyxlLk9ncmF2ZT03NzgsZS5BZ3JhdmU9NjY3LGUuQWJyZXZlPTY2NyxlLm11bHRpcGx5PTU4NCxlLnVhY3V0ZT01NTYsZS5UY2Fyb249NjExLGUucGFydGlhbGRpZmY9NDc2LGUueWRpZXJlc2lzPTUwMCxlLk5hY3V0ZT03MjIsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02NjcsZS5hZGllcmVzaXM9NTU2LGUuZWRpZXJlc2lzPTU1NixlLmNhY3V0ZT01MDAsZS5uYWN1dGU9NTU2LGUudW1hY3Jvbj01NTYsZS5OY2Fyb249NzIyLGUuSWFjdXRlPTI3OCxlLnBsdXNtaW51cz01ODQsZS5icm9rZW5iYXI9MjYwLGUucmVnaXN0ZXJlZD03MzcsZS5HYnJldmU9Nzc4LGUuSWRvdGFjY2VudD0yNzgsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTY2NyxlLnJhY3V0ZT0zMzMsZS5vbWFjcm9uPTU1NixlLlphY3V0ZT02MTEsZS5aY2Fyb249NjExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT03MjIsZS5sY29tbWFhY2NlbnQ9MjIyLGUudGNhcm9uPTMxNyxlLmVvZ29uZWs9NTU2LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NjY3LGUuQWRpZXJlc2lzPTY2NyxlLmVncmF2ZT01NTYsZS56YWN1dGU9NTAwLGUuaW9nb25laz0yMjIsZS5PYWN1dGU9Nzc4LGUub2FjdXRlPTU1NixlLmFtYWNyb249NTU2LGUuc2FjdXRlPTUwMCxlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03NzgsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NTU2LGUudHdvc3VwZXJpb3I9MzMzLGUuT2RpZXJlc2lzPTc3OCxlLm11PTU1NixlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTU1NixlLkVvZ29uZWs9NjY3LGUuZGNyb2F0PTU1NixlLnRocmVlcXVhcnRlcnM9ODM0LGUuU2NlZGlsbGE9NjY3LGUubGNhcm9uPTI5OSxlLktjb21tYWFjY2VudD02NjcsZS5MYWN1dGU9NTU2LGUudHJhZGVtYXJrPTFlMyxlLmVkb3RhY2NlbnQ9NTU2LGUuSWdyYXZlPTI3OCxlLkltYWNyb249Mjc4LGUuTGNhcm9uPTU1NixlLm9uZWhhbGY9ODM0LGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTU1NixlLm50aWxkZT01NTYsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02NjcsZS5lbWFjcm9uPTU1NixlLmdicmV2ZT01NTYsZS5vbmVxdWFydGVyPTgzNCxlLlNjYXJvbj02NjcsZS5TY29tbWFhY2NlbnQ9NjY3LGUuT2h1bmdhcnVtbGF1dD03NzgsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTU1NixlLkNjYXJvbj03MjIsZS51Z3JhdmU9NTU2LGUucmFkaWNhbD00NTMsZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTMzMyxlLk50aWxkZT03MjIsZS5vdGlsZGU9NTU2LGUuUmNvbW1hYWNjZW50PTcyMixlLkxjb21tYWFjY2VudD01NTYsZS5BdGlsZGU9NjY3LGUuQW9nb25laz02NjcsZS5BcmluZz02NjcsZS5PdGlsZGU9Nzc4LGUuemRvdGFjY2VudD01MDAsZS5FY2Fyb249NjY3LGUuSW9nb25laz0yNzgsZS5rY29tbWFhY2NlbnQ9NTAwLGUubWludXM9NTg0LGUuSWNpcmN1bWZsZXg9Mjc4LGUubmNhcm9uPTU1NixlLnRjb21tYWFjY2VudD0yNzgsZS5sb2dpY2Fsbm90PTU4NCxlLm9kaWVyZXNpcz01NTYsZS51ZGllcmVzaXM9NTU2LGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTU1NixlLmV0aD01NTYsZS56Y2Fyb249NTAwLGUubmNvbW1hYWNjZW50PTU1NixlLm9uZXN1cGVyaW9yPTMzMyxlLmltYWNyb249Mjc4LGUuRXVybz01NTZ9KSksZS5TeW1ib2w9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS51bml2ZXJzYWw9NzEzLGUubnVtYmVyc2lnbj01MDAsZS5leGlzdGVudGlhbD01NDksZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5zdWNodGhhdD00MzksZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlza21hdGg9NTAwLGUucGx1cz01NDksZS5jb21tYT0yNTAsZS5taW51cz01NDksZS5wZXJpb2Q9MjUwLGUuc2xhc2g9Mjc4LGUuemVybz01MDAsZS5vbmU9NTAwLGUudHdvPTUwMCxlLnRocmVlPTUwMCxlLmZvdXI9NTAwLGUuZml2ZT01MDAsZS5zaXg9NTAwLGUuc2V2ZW49NTAwLGUuZWlnaHQ9NTAwLGUubmluZT01MDAsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01NDksZS5lcXVhbD01NDksZS5ncmVhdGVyPTU0OSxlLnF1ZXN0aW9uPTQ0NCxlLmNvbmdydWVudD01NDksZS5BbHBoYT03MjIsZS5CZXRhPTY2NyxlLkNoaT03MjIsZS5EZWx0YT02MTIsZS5FcHNpbG9uPTYxMSxlLlBoaT03NjMsZS5HYW1tYT02MDMsZS5FdGE9NzIyLGUuSW90YT0zMzMsZS50aGV0YTE9NjMxLGUuS2FwcGE9NzIyLGUuTGFtYmRhPTY4NixlLk11PTg4OSxlLk51PTcyMixlLk9taWNyb249NzIyLGUuUGk9NzY4LGUuVGhldGE9NzQxLGUuUmhvPTU1NixlLlNpZ21hPTU5MixlLlRhdT02MTEsZS5VcHNpbG9uPTY5MCxlLnNpZ21hMT00MzksZS5PbWVnYT03NjgsZS5YaT02NDUsZS5Qc2k9Nzk1LGUuWmV0YT02MTEsZS5icmFja2V0bGVmdD0zMzMsZS50aGVyZWZvcmU9ODYzLGUuYnJhY2tldHJpZ2h0PTMzMyxlLnBlcnBlbmRpY3VsYXI9NjU4LGUudW5kZXJzY29yZT01MDAsZS5yYWRpY2FsZXg9NTAwLGUuYWxwaGE9NjMxLGUuYmV0YT01NDksZS5jaGk9NTQ5LGUuZGVsdGE9NDk0LGUuZXBzaWxvbj00MzksZS5waGk9NTIxLGUuZ2FtbWE9NDExLGUuZXRhPTYwMyxlLmlvdGE9MzI5LGUucGhpMT02MDMsZS5rYXBwYT01NDksZS5sYW1iZGE9NTQ5LGUubXU9NTc2LGUubnU9NTIxLGUub21pY3Jvbj01NDksZS5waT01NDksZS50aGV0YT01MjEsZS5yaG89NTQ5LGUuc2lnbWE9NjAzLGUudGF1PTQzOSxlLnVwc2lsb249NTc2LGUub21lZ2ExPTcxMyxlLm9tZWdhPTY4NixlLnhpPTQ5MyxlLnBzaT02ODYsZS56ZXRhPTQ5NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5zaW1pbGFyPTU0OSxlLkV1cm89NzUwLGUuVXBzaWxvbjE9NjIwLGUubWludXRlPTI0NyxlLmxlc3NlcXVhbD01NDksZS5mcmFjdGlvbj0xNjcsZS5pbmZpbml0eT03MTMsZS5mbG9yaW49NTAwLGUuY2x1Yj03NTMsZS5kaWFtb25kPTc1MyxlLmhlYXJ0PTc1MyxlLnNwYWRlPTc1MyxlLmFycm93Ym90aD0xMDQyLGUuYXJyb3dsZWZ0PTk4NyxlLmFycm93dXA9NjAzLGUuYXJyb3dyaWdodD05ODcsZS5hcnJvd2Rvd249NjAzLGUuZGVncmVlPTQwMCxlLnBsdXNtaW51cz01NDksZS5zZWNvbmQ9NDExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLm11bHRpcGx5PTU0OSxlLnByb3BvcnRpb25hbD03MTMsZS5wYXJ0aWFsZGlmZj00OTQsZS5idWxsZXQ9NDYwLGUuZGl2aWRlPTU0OSxlLm5vdGVxdWFsPTU0OSxlLmVxdWl2YWxlbmNlPTU0OSxlLmFwcHJveGVxdWFsPTU0OSxlLmVsbGlwc2lzPTFlMyxlLmFycm93dmVydGV4PTYwMyxlLmFycm93aG9yaXpleD0xZTMsZS5jYXJyaWFnZXJldHVybj02NTgsZS5hbGVwaD04MjMsZS5JZnJha3R1cj02ODYsZS5SZnJha3R1cj03OTUsZS53ZWllcnN0cmFzcz05ODcsZS5jaXJjbGVtdWx0aXBseT03NjgsZS5jaXJjbGVwbHVzPTc2OCxlLmVtcHR5c2V0PTgyMyxlLmludGVyc2VjdGlvbj03NjgsZS51bmlvbj03NjgsZS5wcm9wZXJzdXBlcnNldD03MTMsZS5yZWZsZXhzdXBlcnNldD03MTMsZS5ub3RzdWJzZXQ9NzEzLGUucHJvcGVyc3Vic2V0PTcxMyxlLnJlZmxleHN1YnNldD03MTMsZS5lbGVtZW50PTcxMyxlLm5vdGVsZW1lbnQ9NzEzLGUuYW5nbGU9NzY4LGUuZ3JhZGllbnQ9NzEzLGUucmVnaXN0ZXJzZXJpZj03OTAsZS5jb3B5cmlnaHRzZXJpZj03OTAsZS50cmFkZW1hcmtzZXJpZj04OTAsZS5wcm9kdWN0PTgyMyxlLnJhZGljYWw9NTQ5LGUuZG90bWF0aD0yNTAsZS5sb2dpY2Fsbm90PTcxMyxlLmxvZ2ljYWxhbmQ9NjAzLGUubG9naWNhbG9yPTYwMyxlLmFycm93ZGJsYm90aD0xMDQyLGUuYXJyb3dkYmxsZWZ0PTk4NyxlLmFycm93ZGJsdXA9NjAzLGUuYXJyb3dkYmxyaWdodD05ODcsZS5hcnJvd2RibGRvd249NjAzLGUubG96ZW5nZT00OTQsZS5hbmdsZWxlZnQ9MzI5LGUucmVnaXN0ZXJzYW5zPTc5MCxlLmNvcHlyaWdodHNhbnM9NzkwLGUudHJhZGVtYXJrc2Fucz03ODYsZS5zdW1tYXRpb249NzEzLGUucGFyZW5sZWZ0dHA9Mzg0LGUucGFyZW5sZWZ0ZXg9Mzg0LGUucGFyZW5sZWZ0YnQ9Mzg0LGUuYnJhY2tldGxlZnR0cD0zODQsZS5icmFja2V0bGVmdGV4PTM4NCxlLmJyYWNrZXRsZWZ0YnQ9Mzg0LGUuYnJhY2VsZWZ0dHA9NDk0LGUuYnJhY2VsZWZ0bWlkPTQ5NCxlLmJyYWNlbGVmdGJ0PTQ5NCxlLmJyYWNlZXg9NDk0LGUuYW5nbGVyaWdodD0zMjksZS5pbnRlZ3JhbD0yNzQsZS5pbnRlZ3JhbHRwPTY4NixlLmludGVncmFsZXg9Njg2LGUuaW50ZWdyYWxidD02ODYsZS5wYXJlbnJpZ2h0dHA9Mzg0LGUucGFyZW5yaWdodGV4PTM4NCxlLnBhcmVucmlnaHRidD0zODQsZS5icmFja2V0cmlnaHR0cD0zODQsZS5icmFja2V0cmlnaHRleD0zODQsZS5icmFja2V0cmlnaHRidD0zODQsZS5icmFjZXJpZ2h0dHA9NDk0LGUuYnJhY2VyaWdodG1pZD00OTQsZS5icmFjZXJpZ2h0YnQ9NDk0LGUuYXBwbGU9NzkwfSkpLGVbIlRpbWVzLVJvbWFuIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00MDgsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTY0LGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU2NCxlLmVxdWFsPTU2NCxlLmdyZWF0ZXI9NTY0LGUucXVlc3Rpb249NDQ0LGUuYXQ9OTIxLGUuQT03MjIsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTYxMSxlLkY9NTU2LGUuRz03MjIsZS5IPTcyMixlLkk9MzMzLGUuSj0zODksZS5LPTcyMixlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD01NTYsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj03MjIsZS5XPTk0NCxlLlg9NzIyLGUuWT03MjIsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NDY5LGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT00NDQsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTUwMCxlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTUwMCxlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9MzMzLGUucz0zODksZS50PTI3OCxlLnU9NTAwLGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5hc2NpaXRpbGRlPTU0MSxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9MTgwLGUucXVvdGVkYmxsZWZ0PTQ0NCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NDUzLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT00NDQsZS5xdW90ZWRibHJpZ2h0PTQ0NCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj00NDQsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTg4OSxlLm9yZGZlbWluaW5lPTI3NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9ODg5LGUub3JkbWFzY3VsaW5lPTMxMCxlLmFlPTY2NyxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9MzMzLGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT00NDQsZS51aHVuZ2FydW1sYXV0PTUwMCxlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU2NCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NDQ0LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz00NDQsZS5VYWN1dGU9NzIyLGUudW9nb25laz01MDAsZS5FZGllcmVzaXM9NjExLGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NjAsZS5FbWFjcm9uPTYxMSxlLmNjYXJvbj00NDQsZS5hcmluZz00NDQsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT00NDQsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT00NDQsZS5FZG90YWNjZW50PTYxMSxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00NzEsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTUwMCxlLmFjaXJjdW1mbGV4PTQ0NCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTMzMyxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NTU2LGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj01ODgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTUwMCxlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTY0LGUudWFjdXRlPTUwMCxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00NzYsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTYxMSxlLmFkaWVyZXNpcz00NDQsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01MDAsZS51bWFjcm9uPTUwMCxlLk5jYXJvbj03MjIsZS5JYWN1dGU9MzMzLGUucGx1c21pbnVzPTU2NCxlLmJyb2tlbmJhcj0yMDAsZS5yZWdpc3RlcmVkPTc2MCxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTMzMyxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjExLGUucmFjdXRlPTMzMyxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzI2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj00NDQsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTAwLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02MTEsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzQ0LGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9OTgwLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9MzMzLGUuSW1hY3Jvbj0zMzMsZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTUwMCxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTYxMSxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01MDAsZS5yYWRpY2FsPTQ1MyxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9MzMzLGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02MTEsZS5Jb2dvbmVrPTMzMyxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz01NjQsZS5JY2lyY3VtZmxleD0zMzMsZS5uY2Fyb249NTAwLGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NTY0LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01MDAsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTAwLGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTFlMyxlLmFtcGVyc2FuZD04MzMsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9OTMwLGUuQT03MjIsZS5CPTY2NyxlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTc3OCxlLkw9NjY3LGUuTT05NDQsZS5OPTcyMixlLk89Nzc4LGUuUD02MTEsZS5RPTc3OCxlLlI9NzIyLGUuUz01NTYsZS5UPTY2NyxlLlU9NzIyLGUuVj03MjIsZS5XPTFlMyxlLlg9NzIyLGUuWT03MjIsZS5aPTY2NyxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTgxLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTU1NixlLmM9NDQ0LGUuZD01NTYsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0zMzMsZS5rPTU1NixlLmw9Mjc4LGUubT04MzMsZS5uPTU1NixlLm89NTAwLGUucD01NTYsZS5xPTU1NixlLnI9NDQ0LGUucz0zODksZS50PTMzMyxlLnU9NTU2LGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD0zOTQsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zOTQsZS5hc2NpaXRpbGRlPTUyMCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTQwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTMwMCxlLkxzbGFzaD02NjcsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTMzMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01NTYsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjY3LGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTQ0NCxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjY3LGUuVGhvcm49NjExLGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTU1NixlLmRjYXJvbj02NzIsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02NjcsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTQ0NCxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTY2NyxlLlpjYXJvbj02NjcsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249NDE2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01NTYsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9Nzc4LGUubXU9NTU2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTU2LGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249Mzk0LGUuS2NvbW1hYWNjZW50PTc3OCxlLkxhY3V0ZT02NjcsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjY3LGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9NDQ0LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTY2NyxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01NzAsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTcwLGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkSXRhbGljIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zODksZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9ODMyLGUuQT02NjcsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTY2NyxlLkY9NjY3LGUuRz03MjIsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTY2NyxlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD02MTEsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTg4OSxlLlg9NjY3LGUuWT02MTEsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTcwLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTU1NixlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9Mzg5LGUucz0zODksZS50PTI3OCxlLnU9NTU2LGUudj00NDQsZS53PTY2NyxlLng9NTAwLGUueT00NDQsZS56PTM4OSxlLmJyYWNlbGVmdD0zNDgsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zNDgsZS5hc2NpaXRpbGRlPTU3MCxlLmV4Y2xhbWRvd249Mzg5LGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTAwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTk0NCxlLm9yZGZlbWluaW5lPTI2NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9OTQ0LGUub3JkbWFzY3VsaW5lPTMwMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NjExLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT02MTEsZS5BY2lyY3VtZmxleD02NjcsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTQ0NCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NjY3LGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjExLGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj02MDgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT02NjcsZS5BYnJldmU9NjY3LGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NDQ0LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzY2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT02NjcsZS5BZGllcmVzaXM9NjY3LGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT0zODksZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTc2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzgyLGUuS2NvbW1hYWNjZW50PTY2NyxlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT02NjcsZS5Bb2dvbmVrPTY2NyxlLkFyaW5nPTY2NyxlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTM4OSxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz02MDYsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NjA2LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj0zODksZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1JdGFsaWMiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQyMCxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz02NzUsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9Njc1LGUuZXF1YWw9Njc1LGUuZ3JlYXRlcj02NzUsZS5xdWVzdGlvbj01MDAsZS5hdD05MjAsZS5BPTYxMSxlLkI9NjExLGUuQz02NjcsZS5EPTcyMixlLkU9NjExLGUuRj02MTEsZS5HPTcyMixlLkg9NzIyLGUuST0zMzMsZS5KPTQ0NCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NjY3LGUuTz03MjIsZS5QPTYxMSxlLlE9NzIyLGUuUj02MTEsZS5TPTUwMCxlLlQ9NTU2LGUuVT03MjIsZS5WPTYxMSxlLlc9ODMzLGUuWD02MTEsZS5ZPTU1NixlLlo9NTU2LGUuYnJhY2tldGxlZnQ9Mzg5LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zODksZS5hc2NpaWNpcmN1bT00MjIsZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTUwMCxlLmI9NTAwLGUuYz00NDQsZS5kPTUwMCxlLmU9NDQ0LGUuZj0yNzgsZS5nPTUwMCxlLmg9NTAwLGUuaT0yNzgsZS5qPTI3OCxlLms9NDQ0LGUubD0yNzgsZS5tPTcyMixlLm49NTAwLGUubz01MDAsZS5wPTUwMCxlLnE9NTAwLGUucj0zODksZS5zPTM4OSxlLnQ9Mjc4LGUudT01MDAsZS52PTQ0NCxlLnc9NjY3LGUueD00NDQsZS55PTQ0NCxlLno9Mzg5LGUuYnJhY2VsZWZ0PTQwMCxlLmJhcj0yNzUsZS5icmFjZXJpZ2h0PTQwMCxlLmFzY2lpdGlsZGU9NTQxLGUuZXhjbGFtZG93bj0zODksZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0yMTQsZS5xdW90ZWRibGxlZnQ9NTU2LGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD01MjMsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTU1NixlLnF1b3RlZGJscmlnaHQ9NTU2LGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9ODg5LGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTUwMCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9ODg5LGUuQUU9ODg5LGUub3JkZmVtaW5pbmU9Mjc2LGUuTHNsYXNoPTU1NixlLk9zbGFzaD03MjIsZS5PRT05NDQsZS5vcmRtYXNjdWxpbmU9MzEwLGUuYWU9NjY3LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT02NjcsZS5nZXJtYW5kYmxzPTUwMCxlLklkaWVyZXNpcz0zMzMsZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTUwMCxlLnVodW5nYXJ1bWxhdXQ9NTAwLGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz01NTYsZS5kaXZpZGU9Njc1LGUuWWFjdXRlPTU1NixlLkFjaXJjdW1mbGV4PTYxMSxlLmFhY3V0ZT01MDAsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NDQ0LGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTUwMCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTUwMCxlLkVkaWVyZXNpcz02MTEsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc2MCxlLkVtYWNyb249NjExLGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTUwMCxlLk5jb21tYWFjY2VudD02NjcsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTUwMCxlLlRjb21tYWFjY2VudD01NTYsZS5DYWN1dGU9NjY3LGUuYXRpbGRlPTUwMCxlLkVkb3RhY2NlbnQ9NjExLGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj02MTEsZS5HY29tbWFhY2NlbnQ9NzIyLGUudWNpcmN1bWZsZXg9NTAwLGUuYWNpcmN1bWZsZXg9NTAwLGUuQW1hY3Jvbj02MTEsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD01NTYsZS5UaG9ybj02MTEsZS5PbWFjcm9uPTcyMixlLlJhY3V0ZT02MTEsZS5TYWN1dGU9NTAwLGUuZGNhcm9uPTU0NCxlLlVtYWNyb249NzIyLGUudXJpbmc9NTAwLGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9NzIyLGUuQWdyYXZlPTYxMSxlLkFicmV2ZT02MTEsZS5tdWx0aXBseT02NzUsZS51YWN1dGU9NTAwLGUuVGNhcm9uPTU1NixlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz00NDQsZS5OYWN1dGU9NjY3LGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjExLGUuYWRpZXJlc2lzPTUwMCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTUwMCxlLnVtYWNyb249NTAwLGUuTmNhcm9uPTY2NyxlLklhY3V0ZT0zMzMsZS5wbHVzbWludXM9Njc1LGUuYnJva2VuYmFyPTI3NSxlLnJlZ2lzdGVyZWQ9NzYwLGUuR2JyZXZlPTcyMixlLklkb3RhY2NlbnQ9MzMzLGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02MTEsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NTU2LGUuWmNhcm9uPTU1NixlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NjY3LGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zMDAsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTYxMSxlLkFkaWVyZXNpcz02MTEsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTM4OSxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTcyMixlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTUwMCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9NzIyLGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTUwMCxlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03MjIsZS5tdT01MDAsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTYxMSxlLmRjcm9hdD01MDAsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTUwMCxlLmxjYXJvbj0zMDAsZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz05ODAsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zMzMsZS5JbWFjcm9uPTMzMyxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTAwLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjExLGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTAwLGUuU2NvbW1hYWNjZW50PTUwMCxlLk9odW5nYXJ1bWxhdXQ9NzIyLGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NjY3LGUudWdyYXZlPTUwMCxlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NjY3LGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD02MTEsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTYxMSxlLkFvZ29uZWs9NjExLGUuQXJpbmc9NjExLGUuT3RpbGRlPTcyMixlLnpkb3RhY2NlbnQ9Mzg5LGUuRWNhcm9uPTYxMSxlLklvZ29uZWs9MzMzLGUua2NvbW1hYWNjZW50PTQ0NCxlLm1pbnVzPTY3NSxlLkljaXJjdW1mbGV4PTMzMyxlLm5jYXJvbj01MDAsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD02NzUsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTUwMCxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTM4OSxlLm5jb21tYWFjY2VudD01MDAsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGUuWmFwZkRpbmdiYXRzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5hMT05NzQsZS5hMj05NjEsZS5hMjAyPTk3NCxlLmEzPTk4MCxlLmE0PTcxOSxlLmE1PTc4OSxlLmExMTk9NzkwLGUuYTExOD03OTEsZS5hMTE3PTY5MCxlLmExMT05NjAsZS5hMTI9OTM5LGUuYTEzPTU0OSxlLmExND04NTUsZS5hMTU9OTExLGUuYTE2PTkzMyxlLmExMDU9OTExLGUuYTE3PTk0NSxlLmExOD05NzQsZS5hMTk9NzU1LGUuYTIwPTg0NixlLmEyMT03NjIsZS5hMjI9NzYxLGUuYTIzPTU3MSxlLmEyND02NzcsZS5hMjU9NzYzLGUuYTI2PTc2MCxlLmEyNz03NTksZS5hMjg9NzU0LGUuYTY9NDk0LGUuYTc9NTUyLGUuYTg9NTM3LGUuYTk9NTc3LGUuYTEwPTY5MixlLmEyOT03ODYsZS5hMzA9Nzg4LGUuYTMxPTc4OCxlLmEzMj03OTAsZS5hMzM9NzkzLGUuYTM0PTc5NCxlLmEzNT04MTYsZS5hMzY9ODIzLGUuYTM3PTc4OSxlLmEzOD04NDEsZS5hMzk9ODIzLGUuYTQwPTgzMyxlLmE0MT04MTYsZS5hNDI9ODMxLGUuYTQzPTkyMyxlLmE0ND03NDQsZS5hNDU9NzIzLGUuYTQ2PTc0OSxlLmE0Nz03OTAsZS5hNDg9NzkyLGUuYTQ5PTY5NSxlLmE1MD03NzYsZS5hNTE9NzY4LGUuYTUyPTc5MixlLmE1Mz03NTksZS5hNTQ9NzA3LGUuYTU1PTcwOCxlLmE1Nj02ODIsZS5hNTc9NzAxLGUuYTU4PTgyNixlLmE1OT04MTUsZS5hNjA9Nzg5LGUuYTYxPTc4OSxlLmE2Mj03MDcsZS5hNjM9Njg3LGUuYTY0PTY5NixlLmE2NT02ODksZS5hNjY9Nzg2LGUuYTY3PTc4NyxlLmE2OD03MTMsZS5hNjk9NzkxLGUuYTcwPTc4NSxlLmE3MT03OTEsZS5hNzI9ODczLGUuYTczPTc2MSxlLmE3ND03NjIsZS5hMjAzPTc2MixlLmE3NT03NTksZS5hMjA0PTc1OSxlLmE3Nj04OTIsZS5hNzc9ODkyLGUuYTc4PTc4OCxlLmE3OT03ODQsZS5hODE9NDM4LGUuYTgyPTEzOCxlLmE4Mz0yNzcsZS5hODQ9NDE1LGUuYTk3PTM5MixlLmE5OD0zOTIsZS5hOTk9NjY4LGUuYTEwMD02NjgsZS5hODk9MzkwLGUuYTkwPTM5MCxlLmE5Mz0zMTcsZS5hOTQ9MzE3LGUuYTkxPTI3NixlLmE5Mj0yNzYsZS5hMjA1PTUwOSxlLmE4NT01MDksZS5hMjA2PTQxMCxlLmE4Nj00MTAsZS5hODc9MjM0LGUuYTg4PTIzNCxlLmE5NT0zMzQsZS5hOTY9MzM0LGUuYTEwMT03MzIsZS5hMTAyPTU0NCxlLmExMDM9NTQ0LGUuYTEwND05MTAsZS5hMTA2PTY2NyxlLmExMDc9NzYwLGUuYTEwOD03NjAsZS5hMTEyPTc3NixlLmExMTE9NTk1LGUuYTExMD02OTQsZS5hMTA5PTYyNixlLmExMjA9Nzg4LGUuYTEyMT03ODgsZS5hMTIyPTc4OCxlLmExMjM9Nzg4LGUuYTEyND03ODgsZS5hMTI1PTc4OCxlLmExMjY9Nzg4LGUuYTEyNz03ODgsZS5hMTI4PTc4OCxlLmExMjk9Nzg4LGUuYTEzMD03ODgsZS5hMTMxPTc4OCxlLmExMzI9Nzg4LGUuYTEzMz03ODgsZS5hMTM0PTc4OCxlLmExMzU9Nzg4LGUuYTEzNj03ODgsZS5hMTM3PTc4OCxlLmExMzg9Nzg4LGUuYTEzOT03ODgsZS5hMTQwPTc4OCxlLmExNDE9Nzg4LGUuYTE0Mj03ODgsZS5hMTQzPTc4OCxlLmExNDQ9Nzg4LGUuYTE0NT03ODgsZS5hMTQ2PTc4OCxlLmExNDc9Nzg4LGUuYTE0OD03ODgsZS5hMTQ5PTc4OCxlLmExNTA9Nzg4LGUuYTE1MT03ODgsZS5hMTUyPTc4OCxlLmExNTM9Nzg4LGUuYTE1ND03ODgsZS5hMTU1PTc4OCxlLmExNTY9Nzg4LGUuYTE1Nz03ODgsZS5hMTU4PTc4OCxlLmExNTk9Nzg4LGUuYTE2MD04OTQsZS5hMTYxPTgzOCxlLmExNjM9MTAxNixlLmExNjQ9NDU4LGUuYTE5Nj03NDgsZS5hMTY1PTkyNCxlLmExOTI9NzQ4LGUuYTE2Nj05MTgsZS5hMTY3PTkyNyxlLmExNjg9OTI4LGUuYTE2OT05MjgsZS5hMTcwPTgzNCxlLmExNzE9ODczLGUuYTE3Mj04MjgsZS5hMTczPTkyNCxlLmExNjI9OTI0LGUuYTE3ND05MTcsZS5hMTc1PTkzMCxlLmExNzY9OTMxLGUuYTE3Nz00NjMsZS5hMTc4PTg4MyxlLmExNzk9ODM2LGUuYTE5Mz04MzYsZS5hMTgwPTg2NyxlLmExOTk9ODY3LGUuYTE4MT02OTYsZS5hMjAwPTY5NixlLmExODI9ODc0LGUuYTIwMT04NzQsZS5hMTgzPTc2MCxlLmExODQ9OTQ2LGUuYTE5Nz03NzEsZS5hMTg1PTg2NSxlLmExOTQ9NzcxLGUuYTE5OD04ODgsZS5hMTg2PTk2NyxlLmExOTU9ODg4LGUuYTE4Nz04MzEsZS5hMTg4PTg3MyxlLmExODk9OTI3LGUuYTE5MD05NzAsZS5hMTkxPTkxOH0pKX0pKTt0LmdldE1ldHJpY3M9YTt2YXIgaT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0Oi00MjZ9LGVbIkNvdXJpZXItQm9sZCJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDM5fSxlWyJDb3VyaWVyLU9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn0sZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDI2fSxlLkhlbHZldGljYT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGQiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUzMn0sZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9LGVbIlRpbWVzLVJvbWFuIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjIseEhlaWdodDo0NTB9LGVbIlRpbWVzLUJvbGQiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY3Nix4SGVpZ2h0OjQ2MX0sZVsiVGltZXMtSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NTMseEhlaWdodDo0NDF9LGVbIlRpbWVzLUJvbGRJdGFsaWMiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY2OSx4SGVpZ2h0OjQ2Mn0sZS5TeW1ib2w9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfSxlLlphcGZEaW5nYmF0cz17YXNjZW50Ok1hdGguTmFOLGRlc2NlbnQ6TWF0aC5OYU4sY2FwSGVpZ2h0Ok1hdGguTmFOLHhIZWlnaHQ6TWF0aC5OYU59fSkpO3QuZ2V0Rm9udEJhc2ljTWV0cmljcz1pfSwoZSx0KT0+e2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1pKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBvKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/byhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBjKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIHQmJmMoZS5wcm90b3R5cGUsdCksciYmYyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuR2x5ZlRhYmxlPXZvaWQgMDt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5nbHlmVGFibGUsbj10LmlzR2x5cGhMb2NhdGlvbnNMb25nLGE9dC5sb2NhVGFibGUsaT10Lm51bUdseXBocztzKHRoaXMsZSksdGhpcy5nbHlwaHM9W107Zm9yKHZhciBvPW5ldyBEYXRhVmlldyhhLmJ1ZmZlcixhLmJ5dGVPZmZzZXQsYS5ieXRlTGVuZ3RoKSxjPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKSx1PW4/NDoyLGw9bj9vLmdldFVpbnQzMigwKToyKm8uZ2V0VWludDE2KDApLGg9MCxkPTA7ZDxpO2QrKyl7aCs9dTt2YXIgcD1uP28uZ2V0VWludDMyKGgpOjIqby5nZXRVaW50MTYoaCk7aWYocCE9PWwpe3ZhciBnPWYucGFyc2UobCxjKTt0aGlzLmdseXBocy5wdXNoKGcpLGw9cH1lbHNlIHRoaXMuZ2x5cGhzLnB1c2gobmV3IGYoe30pKX19cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHlwaHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlKyh0LmdldFNpemUoKSszJi00KX0pLDApfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTaXplKCksdD1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKGUpKSxyPWU+MTMxMDcwLG49cj80OjIsaT1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCh0aGlzLmdseXBocy5sZW5ndGgrMSkqbikpO3I/aS5zZXRVaW50MzIoMCwwKTppLnNldFVpbnQxNigwLDApO3ZhciBvLHM9MCxjPTAsdT1hKHRoaXMuZ2x5cGhzKTt0cnl7Zm9yKHUucygpOyEobz11Lm4oKSkuZG9uZTspcz0ocys9by52YWx1ZS53cml0ZShzLHQpKSszJi00LGMrPW4scj9pLnNldFVpbnQzMihjLHMpOmkuc2V0VWludDE2KGMscz4+MSl9Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJue2lzTG9jYXRpb25Mb25nOnIsbG9jYTpuZXcgVWludDhBcnJheShpLmJ1ZmZlciksZ2x5ZjpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcil9fX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9dGhpcy5nbHlwaHMubGVuZ3RoO3Q8cjt0KyspdGhpcy5nbHlwaHNbdF0uc2NhbGUoZVt0XSl9fV0pLGV9KCk7dC5HbHlmVGFibGU9bDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5oZWFkZXIsbj12b2lkIDA9PT1yP251bGw6cixhPXQuc2ltcGxlLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LmNvbXBvc2l0ZXMsYz12b2lkIDA9PT1vP251bGw6bztzKHRoaXMsZSksdGhpcy5oZWFkZXI9bix0aGlzLnNpbXBsZT1pLHRoaXMuY29tcG9zaXRlcz1jfXJldHVybiB1KGUsW3trZXk6ImdldFNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciBlPXRoaXMuc2ltcGxlP3RoaXMuc2ltcGxlLmdldFNpemUoKTp0aGlzLmNvbXBvc2l0ZXMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuZ2V0U2l6ZSgpfSksMCk7cmV0dXJuIHRoaXMuaGVhZGVyLmdldFNpemUoKStlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciByPWU7aWYoZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KSx0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2V7dmFyIG4saT1hKHRoaXMuY29tcG9zaXRlcyk7dHJ5e2ZvcihpLnMoKTshKG49aS5uKCkpLmRvbmU7KWUrPW4udmFsdWUud3JpdGUoZSx0KX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuIGUtcn19LHtrZXk6InNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmhlYWRlcil7dmFyIHQ9KHRoaXMuaGVhZGVyLnhNaW4rdGhpcy5oZWFkZXIueE1heCkvMjtpZih0aGlzLmhlYWRlci5zY2FsZSh0LGUpLHRoaXMuc2ltcGxlKXRoaXMuc2ltcGxlLnNjYWxlKHQsZSk7ZWxzZXt2YXIgcixuPWEodGhpcy5jb21wb3NpdGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5zY2FsZSh0LGUpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19fX1dLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgYT1yKGgucGFyc2UodCxuKSwyKSxpPWFbMF0sbz1hWzFdO2lmKHQrPWksby5udW1iZXJPZkNvbnRvdXJzPDApe2Zvcih2YXIgcz1bXTs7KXt2YXIgYz1yKGcucGFyc2UodCxuKSwyKSx1PWNbMF0sbD1jWzFdO2lmKHQrPXUscy5wdXNoKGwpLCEoMzImbC5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBlKHtoZWFkZXI6byxjb21wb3NpdGVzOnN9KX1yZXR1cm4gbmV3IGUoe2hlYWRlcjpvLHNpbXBsZTpwLnBhcnNlKHQsbixvLm51bWJlck9mQ29udG91cnMpfSl9fV0pLGV9KCksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5udW1iZXJPZkNvbnRvdXJzLG49dC54TWluLGE9dC55TWluLGk9dC54TWF4LG89dC55TWF4O3ModGhpcyxlKSx0aGlzLm51bWJlck9mQ29udG91cnM9cix0aGlzLnhNaW49bix0aGlzLnlNaW49YSx0aGlzLnhNYXg9aSx0aGlzLnlNYXg9b31yZXR1cm4gdShlLFt7a2V5OiJnZXRTaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAxMH19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKSx0LnNldEludDE2KGUrMix0aGlzLnhNaW4pLHQuc2V0SW50MTYoZSs0LHRoaXMueU1pbiksdC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KSx0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpLDEwfX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy54TWluPU1hdGgucm91bmQoZSsodGhpcy54TWluLWUpKnQpLHRoaXMueE1heD1NYXRoLnJvdW5kKGUrKHRoaXMueE1heC1lKSp0KX19XSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuWzEwLG5ldyBlKHtudW1iZXJPZkNvbnRvdXJzOnIuZ2V0SW50MTYodCkseE1pbjpyLmdldEludDE2KHQrMikseU1pbjpyLmdldEludDE2KHQrNCkseE1heDpyLmdldEludDE2KHQrNikseU1heDpyLmdldEludDE2KHQrOCl9KV19fV0pLGV9KCksZD11KChmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LnhDb29yZGluYXRlcyxhPXQueUNvb3JkaW5hdGVzO3ModGhpcyxlKSx0aGlzLnhDb29yZGluYXRlcz1uLHRoaXMueUNvb3JkaW5hdGVzPWEsdGhpcy5mbGFncz1yfSkpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuY29udG91cnMsbj10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5jb250b3Vycz1yLHRoaXMuaW5zdHJ1Y3Rpb25zPW59cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTIqdGhpcy5jb250b3Vycy5sZW5ndGgrMit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgscj0wLG49MCxpPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgbz1lLnZhbHVlO3QrPW8uZmxhZ3MubGVuZ3RoO2Zvcih2YXIgcz0wLGM9by54Q29vcmRpbmF0ZXMubGVuZ3RoO3M8YztzKyspe3ZhciB1PW8ueENvb3JkaW5hdGVzW3NdLGw9by55Q29vcmRpbmF0ZXNbc10sZj1NYXRoLmFicyh1LXIpO2Y+MjU1P3QrPTI6Zj4wJiYodCs9MSkscj11LChmPU1hdGguYWJzKGwtbikpPjI1NT90Kz0yOmY+MCYmKHQrPTEpLG49bH19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiB0fX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lLGk9W10sbz1bXSxzPVtdLGM9MCx1PTAsbD1hKHRoaXMuY29udG91cnMpO3RyeXtmb3IobC5zKCk7IShyPWwubigpKS5kb25lOyl7Zm9yKHZhciBmPXIudmFsdWUsaD0wLGQ9Zi54Q29vcmRpbmF0ZXMubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPWYuZmxhZ3NbaF0sZz1mLnhDb29yZGluYXRlc1toXSx2PWctYztpZigwPT09dilwfD0xNixpLnB1c2goMCk7ZWxzZXt2YXIgeT1NYXRoLmFicyh2KTt5PD0yNTU/KHB8PXY+PTA/MTg6MixpLnB1c2goeSkpOmkucHVzaCh2KX1jPWc7dmFyIG09Zi55Q29vcmRpbmF0ZXNbaF07aWYoMD09KHY9bS11KSlwfD0zMixvLnB1c2goMCk7ZWxzZXt2YXIgYj1NYXRoLmFicyh2KTtiPD0yNTU/KHB8PXY+PTA/MzY6NCxvLnB1c2goYikpOm8ucHVzaCh2KX11PW0scy5wdXNoKHApfXQuc2V0VWludDE2KGUsaS5sZW5ndGgtMSksZSs9Mn19Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpLGUrPTIsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoJiYobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSksZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtmb3IodmFyIHc9MCxrPXM7dzxrLmxlbmd0aDt3Kyspe3ZhciBTPWtbd107dC5zZXRVaW50OChlKyssUyl9Zm9yKHZhciB4PTAsTz1pLmxlbmd0aDt4PE87eCsrKXt2YXIgQT1pW3hdLEM9c1t4XTsyJkM/dC5zZXRVaW50OChlKyssQSk6MTYmQ3x8KHQuc2V0SW50MTYoZSxBKSxlKz0yKX1mb3IodmFyIEY9MCxQPW8ubGVuZ3RoO0Y8UDtGKyspe3ZhciBUPW9bRl0sST1zW0ZdOzQmST90LnNldFVpbnQ4KGUrKyxUKTozMiZJfHwodC5zZXRJbnQxNihlLFQpLGUrPTIpfXJldHVybiBlLW59fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKDAhPT1pLnhDb29yZGluYXRlcy5sZW5ndGgpZm9yKHZhciBvPTAscz1pLnhDb29yZGluYXRlcy5sZW5ndGg7bzxzO28rKylpLnhDb29yZGluYXRlc1tvXT1NYXRoLnJvdW5kKGUrKGkueENvb3JkaW5hdGVzW29dLWUpKnQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7Zm9yKHZhciBhPVtdLGk9MDtpPG47aSsrKXt2YXIgbz1yLmdldFVpbnQxNih0KTt0Kz0yLGEucHVzaChvKX12YXIgcz1hW24tMV0rMSxjPXIuZ2V0VWludDE2KHQpO3QrPTI7dmFyIHU9bmV3IFVpbnQ4QXJyYXkocikuc2xpY2UodCx0K2MpO3QrPWM7Zm9yKHZhciBsPVtdLGY9MDtmPHM7dCsrLGYrKyl7dmFyIGg9ci5nZXRVaW50OCh0KTtpZihsLnB1c2goaCksOCZoKXt2YXIgcD1yLmdldFVpbnQ4KCsrdCk7aF49ODtmb3IodmFyIGc9MDtnPHA7ZysrKWwucHVzaChoKTtmKz1wfX1mb3IodmFyIHY9W10seT1bXSxtPVtdLGI9W10sdz1bXSxrPTAsUz0wLHg9MDt4PHM7eCsrKXt2YXIgTz1sW3hdO2lmKDImTyl7dmFyIEE9ci5nZXRVaW50OCh0KyspO1MrPTE2Jk8/QTotQSx5LnB1c2goUyl9ZWxzZSAxNiZPfHwoUys9ci5nZXRJbnQxNih0KSx0Kz0yKSx5LnB1c2goUyk7YVtrXT09PXgmJihrKyssdi5wdXNoKHkpLHk9W10pfVM9MCxrPTA7Zm9yKHZhciBDPTA7QzxzO0MrKyl7dmFyIEY9bFtDXTtpZig0JkYpe3ZhciBQPXIuZ2V0VWludDgodCsrKTtTKz0zMiZGP1A6LVAsbS5wdXNoKFMpfWVsc2UgMzImRnx8KFMrPXIuZ2V0SW50MTYodCksdCs9MiksbS5wdXNoKFMpO2IucHVzaCgxJkZ8NjQmRiksYVtrXT09PUMmJih5PXZba10saysrLHcucHVzaChuZXcgZCh7ZmxhZ3M6Yix4Q29vcmRpbmF0ZXM6eSx5Q29vcmRpbmF0ZXM6bX0pKSxtPVtdLGI9W10pfXJldHVybiBuZXcgZSh7Y29udG91cnM6dyxpbnN0cnVjdGlvbnM6dX0pfX1dKSxlfSgpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LmdseXBoSW5kZXgsYT10LmFyZ3VtZW50MSxpPXQuYXJndW1lbnQyLG89dC50cmFuc2YsYz10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5mbGFncz1yLHRoaXMuZ2x5cGhJbmRleD1uLHRoaXMuYXJndW1lbnQxPWEsdGhpcy5hcmd1bWVudDI9aSx0aGlzLnRyYW5zZj1vLHRoaXMuaW5zdHJ1Y3Rpb25zPWN9cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoO3JldHVybiAyNTYmdGhpcy5mbGFncyYmKGUrPTIrdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSxlKz0yLDImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fChlKz0yKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fChlKz0yKSxlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZTtyZXR1cm4gMiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KHRoaXMuZmxhZ3N8PTEpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KHRoaXMuZmxhZ3N8PTEpLHQuc2V0VWludDE2KGUsdGhpcy5mbGFncyksdC5zZXRVaW50MTYoZSsyLHRoaXMuZ2x5cGhJbmRleCksZSs9NCwxJnRoaXMuZmxhZ3M/KDImdGhpcy5mbGFncz8odC5zZXRJbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldEludDE2KGUrMix0aGlzLmFyZ3VtZW50MikpOih0LnNldFVpbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpKSxlKz00KToodC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50MiksZSs9MiksMjU2JnRoaXMuZmxhZ3MmJih0LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCksZSs9Mix0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgmJihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKSxlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpKSxlLXJ9fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt9fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuLGEsaT10LG89W10scz1yLmdldFVpbnQxNih0KSxjPXIuZ2V0VWludDE2KHQrMik7dCs9NCwxJnM/KDImcz8obj1yLmdldEludDE2KHQpLGE9ci5nZXRJbnQxNih0KzIpKToobj1yLmdldFVpbnQxNih0KSxhPXIuZ2V0VWludDE2KHQrMikpLHQrPTQsc149MSk6KDImcz8obj1yLmdldEludDgodCksYT1yLmdldEludDgodCsxKSk6KG49ci5nZXRVaW50OCh0KSxhPXIuZ2V0VWludDgodCsxKSksdCs9MiksOCZzPyhvLnB1c2goci5nZXRVaW50MTYodCkpLHQrPTIpOjY0JnM/KG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpKSx0Kz00KToxMjgmcyYmKG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpLHIuZ2V0VWludDE2KHQrNCksci5nZXRVaW50MTYodCs2KSksdCs9OCk7dmFyIHU9bnVsbDtpZigyNTYmcyl7dmFyIGw9ci5nZXRVaW50MTYodCk7dCs9Mix1PW5ldyBVaW50OEFycmF5KHIpLnNsaWNlKHQsdCtsKSx0Kz1sfXJldHVyblt0LWksbmV3IGUoe2ZsYWdzOnMsZ2x5cGhJbmRleDpjLGFyZ3VtZW50MTpuLGFyZ3VtZW50MjphLHRyYW5zZjpvLGluc3RydWN0aW9uczp1fSldfX1dKSxlfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVuVHlwZUZpbGVCdWlsZGVyPXZvaWQgMDt2YXIgYT1yKDEzNSksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQscil7ZVt0XT1yPj44JjI1NSxlW3QrMV09MjU1JnJ9ZnVuY3Rpb24gdShlLHQscil7ZVt0XT1yPj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfWZ1bmN0aW9uIGwoZSx0LHIpe2lmKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KWUuc2V0KHIsdCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpZm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bisrKWVbdCsrXT0yNTUmci5jaGFyQ29kZUF0KG4pO2Vsc2V7dmFyIGksbz1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fShyKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBjPWkudmFsdWU7ZVt0KytdPTI1NSZjfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19fXZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnNmbnQ9dCx0aGlzLnRhYmxlcz1PYmplY3QuY3JlYXRlKG51bGwpfXZhciB0LHIsbjtyZXR1cm4gdD1lLG49W3trZXk6ImdldFNlYXJjaFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MSxuPTA7KHJeZSk+cjspcjw8PTEsbisrO3ZhciBhPXIqdDtyZXR1cm57cmFuZ2U6YSxlbnRyeTpuLHJhbmdlU2hpZnQ6dCplLWF9fX1dLChyPVt7a2V5OiJ0b0FycmF5Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2ZudCxyPXRoaXMudGFibGVzLG49T2JqZWN0LmtleXMocik7bi5zb3J0KCk7dmFyIG8scyxmLGgsZCxwPW4ubGVuZ3RoLGc9MTIrMTYqcCx2PVtnXTtmb3Iobz0wO288cDtvKyspZys9KChoPXJbbltvXV0pLmxlbmd0aCszJi00KT4+PjAsdi5wdXNoKGcpO3ZhciB5PW5ldyBVaW50OEFycmF5KGcpO2ZvcihvPTA7bzxwO28rKyloPXJbbltvXV0sbCh5LHZbb10saCk7InRydWUiPT09dCYmKHQ9KDAsaS5zdHJpbmczMikoNjU1MzYpKSx5WzBdPTI1NSZ0LmNoYXJDb2RlQXQoMCkseVsxXT0yNTUmdC5jaGFyQ29kZUF0KDEpLHlbMl09MjU1JnQuY2hhckNvZGVBdCgyKSx5WzNdPTI1NSZ0LmNoYXJDb2RlQXQoMyksYyh5LDQscCk7dmFyIG09ZS5nZXRTZWFyY2hQYXJhbXMocCwxNik7Zm9yKGMoeSw2LG0ucmFuZ2UpLGMoeSw4LG0uZW50cnkpLGMoeSwxMCxtLnJhbmdlU2hpZnQpLGc9MTIsbz0wO288cDtvKyspe2Q9bltvXSx5W2ddPTI1NSZkLmNoYXJDb2RlQXQoMCkseVtnKzFdPTI1NSZkLmNoYXJDb2RlQXQoMSkseVtnKzJdPTI1NSZkLmNoYXJDb2RlQXQoMikseVtnKzNdPTI1NSZkLmNoYXJDb2RlQXQoMyk7dmFyIGI9MDtmb3Iocz12W29dLGY9dltvKzFdO3M8ZjtzKz00KWI9YisoMCxhLnJlYWRVaW50MzIpKHkscyk+Pj4wO3UoeSxnKzQsYiksdSh5LGcrOCx2W29dKSx1KHksZysxMixyW2RdLmxlbmd0aCksZys9MTZ9cmV0dXJuIHl9fSx7a2V5OiJhZGRUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihlIGluIHRoaXMudGFibGVzKXRocm93IG5ldyBFcnJvcigiVGFibGUgIitlKyIgYWxyZWFkeSBleGlzdHMiKTt0aGlzLnRhYmxlc1tlXT10fX1dKSYmbyh0LnByb3RvdHlwZSxyKSxuJiZvKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGUxRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigyKSxpPXIoMTY3KSxvPXIoMTM1KSxzPXIoMTM5KSxjPXIoMTc4KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxhPXQubGVuZ3RoLGk9bi1hLHM9cixjPSExO3M8aTspe2Zvcih2YXIgdT0wO3U8YSYmZVtzK3VdPT09dFt1XTspdSsrO2lmKHU+PWEpe2ZvcihzKz11O3M8biYmKDAsby5pc1doaXRlU3BhY2UpKGVbc10pOylzKys7Yz0hMDticmVha31zKyt9cmV0dXJue2ZvdW5kOmMsbGVuZ3RoOnN9fXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSk7dmFyIG89bi5sZW5ndGgxLHU9KG4ubGVuZ3RoMixyLnBlZWtCeXRlcyg2KSksbD0xMjg9PT11WzBdJiYxPT09dVsxXTtsJiYoci5za2lwKDYpLG89dVs1XTw8MjR8dVs0XTw8MTZ8dVszXTw8OHx1WzJdKTt2YXIgZj1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxvLGM9WzEwMSwxMDEsMTIwLDEwMSw5OV0sdT1lLnBvczt0cnl7bj0ocj1lLmdldEJ5dGVzKHQpKS5sZW5ndGh9Y2F0Y2goZSl7fWlmKG49PT10JiYoaT1kKHIsYyx0LTIqYy5sZW5ndGgpKS5mb3VuZCYmaS5sZW5ndGg9PT10KXJldHVybntzdHJlYW06bmV3IHMuU3RyZWFtKHIpLGxlbmd0aDp0fTtmb3IoKDAsYS53YXJuKSgnSW52YWxpZCAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxlLnBvcz11OzAhPT0oaT1kKGUucGVla0J5dGVzKDIwNDgpLGMsMCkpLmxlbmd0aDspaWYoZS5wb3MrPWkubGVuZ3RoLGkuZm91bmQpe289ZS5wb3MtdTticmVha31yZXR1cm4gZS5wb3M9dSxvP3tzdHJlYW06bmV3IHMuU3RyZWFtKGUuZ2V0Qnl0ZXMobykpLGxlbmd0aDpvfTooKDAsYS53YXJuKSgnVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJykse3N0cmVhbTpuZXcgcy5TdHJlYW0oZS5nZXRCeXRlcyh0KSksbGVuZ3RoOnR9KX0ocixvKTtuZXcgYy5UeXBlMVBhcnNlcihmLnN0cmVhbSwhMSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIobiksbCYmKCh1PXIuZ2V0Qnl0ZXMoNikpWzVdLHVbNF0sdVszXSx1WzJdKTt2YXIgaD1mdW5jdGlvbihlLHQpe3ZhciByPWUuZ2V0Qnl0ZXMoKTtpZigwPT09ci5sZW5ndGgpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImdldEVleGVjQmxvY2sgLSBubyBmb250IHByb2dyYW0gZm91bmQuIik7cmV0dXJue3N0cmVhbTpuZXcgcy5TdHJlYW0ociksbGVuZ3RoOnIubGVuZ3RofX0ocikscD1uZXcgYy5UeXBlMVBhcnNlcihoLnN0cmVhbSwhMCxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRQcm9ncmFtKG4pO2Zvcih2YXIgZyBpbiBwLnByb3BlcnRpZXMpbltnXT1wLnByb3BlcnRpZXNbZ107dmFyIHY9cC5jaGFyc3RyaW5ncyx5PXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyh2KSxtPXRoaXMuZ2V0VHlwZTJTdWJycyhwLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPXYsdGhpcy5kYXRhPXRoaXMud3JhcCh0LHksdGhpcy5jaGFyc3RyaW5ncyxtLG4pLHRoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhwLmNoYXJzdHJpbmdzKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6Im51bUdseXBocyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9fSx7a2V5OiJnZXRDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9WyIubm90ZGVmIl0scj1sKHRoaXMuY2hhcnN0cmluZ3MpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZS5nbHlwaE5hbWU7dC5wdXNoKG4pfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGFyc3RyaW5ncztpZihlLmNvbXBvc2l0ZSl7Zm9yKHZhciByPU9iamVjdC5jcmVhdGUobnVsbCksbj0wLGE9dC5sZW5ndGg7bjxhO24rKylyW2UuY01hcC5jaGFyQ29kZU9mKG4pXT1uKzE7cmV0dXJuIHJ9dmFyIG8scyxjPVsiLm5vdGRlZiJdO2ZvcihzPTA7czx0Lmxlbmd0aDtzKyspYy5wdXNoKHRbc10uZ2x5cGhOYW1lKTt2YXIgdT1lLmJ1aWx0SW5FbmNvZGluZztpZih1KWZvcih2YXIgbCBpbiBvPU9iamVjdC5jcmVhdGUobnVsbCksdSkocz1jLmluZGV4T2YodVtsXSkpPj0wJiYob1tsXT1zKTtyZXR1cm4oMCxpLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxvLGMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIShlPDB8fGU+PXRoaXMubnVtR2x5cGhzKSYmKDA9PT1lfHx0aGlzLmNoYXJzdHJpbmdzW2UtMV0uY2hhcnN0cmluZy5sZW5ndGg+MCl9fSx7a2V5OiJnZXRTZWFjcyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBhPWVbcl07YS5zZWFjJiYodFtyKzFdPWEuc2VhYyl9cmV0dXJuIHR9fSx7a2V5OiJnZXRUeXBlMkNoYXJzdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPVtdLG49bChlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7ci5wdXNoKGEuY2hhcnN0cmluZyl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByfX0se2tleToiZ2V0VHlwZTJTdWJycyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxlbmd0aDt0PXI8MTEzMz8xMDc6cjwzMzc2OT8xMTMxOjMyNzY4O3ZhciBuLGE9W107Zm9yKG49MDtuPHQ7bisrKWEucHVzaChbMTFdKTtmb3Iobj0wO248cjtuKyspYS5wdXNoKGVbbl0pO3JldHVybiBhfX0se2tleToid3JhcCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxpKXt2YXIgbz1uZXcgbi5DRkY7by5oZWFkZXI9bmV3IG4uQ0ZGSGVhZGVyKDEsMCw0LDQpLG8ubmFtZXM9W2VdO3ZhciBzPW5ldyBuLkNGRlRvcERpY3Q7cy5zZXRCeU5hbWUoInZlcnNpb24iLDM5MSkscy5zZXRCeU5hbWUoIk5vdGljZSIsMzkyKSxzLnNldEJ5TmFtZSgiRnVsbE5hbWUiLDM5Mykscy5zZXRCeU5hbWUoIkZhbWlseU5hbWUiLDM5NCkscy5zZXRCeU5hbWUoIldlaWdodCIsMzk1KSxzLnNldEJ5TmFtZSgiRW5jb2RpbmciLG51bGwpLHMuc2V0QnlOYW1lKCJGb250TWF0cml4IixpLmZvbnRNYXRyaXgpLHMuc2V0QnlOYW1lKCJGb250QkJveCIsaS5iYm94KSxzLnNldEJ5TmFtZSgiY2hhcnNldCIsbnVsbCkscy5zZXRCeU5hbWUoIkNoYXJTdHJpbmdzIixudWxsKSxzLnNldEJ5TmFtZSgiUHJpdmF0ZSIsbnVsbCksby50b3BEaWN0PXM7dmFyIGM9bmV3IG4uQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIiksYy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKSxjLmFkZChlKSxjLmFkZChlKSxjLmFkZCgiTWVkaXVtIiksby5zdHJpbmdzPWMsby5nbG9iYWxTdWJySW5kZXg9bmV3IG4uQ0ZGSW5kZXg7dmFyIHUsbCxmPXQubGVuZ3RoLGg9WyIubm90ZGVmIl07Zm9yKHU9MDt1PGY7dSsrKXt2YXIgZD1yW3VdLmdseXBoTmFtZTstMT09PW4uQ0ZGU3RhbmRhcmRTdHJpbmdzLmluZGV4T2YoZCkmJmMuYWRkKGQpLGgucHVzaChkKX1vLmNoYXJzZXQ9bmV3IG4uQ0ZGQ2hhcnNldCghMSwwLGgpO3ZhciBwPW5ldyBuLkNGRkluZGV4O2ZvcihwLmFkZChbMTM5LDE0XSksdT0wO3U8Zjt1KyspcC5hZGQodFt1XSk7by5jaGFyU3RyaW5ncz1wO3ZhciBnPW5ldyBuLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7dmFyIHY9WyJCbHVlVmFsdWVzIiwiT3RoZXJCbHVlcyIsIkZhbWlseUJsdWVzIiwiRmFtaWx5T3RoZXJCbHVlcyIsIlN0ZW1TbmFwSCIsIlN0ZW1TbmFwViIsIkJsdWVTaGlmdCIsIkJsdWVGdXp6IiwiQmx1ZVNjYWxlIiwiTGFuZ3VhZ2VHcm91cCIsIkV4cGFuc2lvbkZhY3RvciIsIkZvcmNlQm9sZCIsIlN0ZEhXIiwiU3RkVlciXTtmb3IodT0wLGw9di5sZW5ndGg7dTxsO3UrKyl7dmFyIHk9dlt1XTtpZih5IGluIGkucHJpdmF0ZURhdGEpe3ZhciBtPWkucHJpdmF0ZURhdGFbeV07aWYoQXJyYXkuaXNBcnJheShtKSlmb3IodmFyIGI9bS5sZW5ndGgtMTtiPjA7Yi0tKW1bYl0tPW1bYi0xXTtnLnNldEJ5TmFtZSh5LG0pfX1vLnRvcERpY3QucHJpdmF0ZURpY3Q9Zzt2YXIgdz1uZXcgbi5DRkZJbmRleDtmb3IodT0wLGw9YS5sZW5ndGg7dTxsO3UrKyl3LmFkZChhW3VdKTtyZXR1cm4gZy5zdWJyc0luZGV4PXcsbmV3IG4uQ0ZGQ29tcGlsZXIobykuY29tcGlsZSgpfX1dKSYmaCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuVHlwZTFGb250PXB9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UeXBlMVBhcnNlcj12b2lkIDA7dmFyIG49cigxNjYpLGE9cigxMzUpLGk9cigxMzkpLG89cigyKTtmdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPVs0XSxkPVs1XSxwPVs2XSxnPVs3XSx2PVs4XSx5PVsxMiwzNV0sbT1bMTRdLGI9WzIxXSx3PVsyMl0saz1bMzBdLFM9WzMxXSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLndpZHRoPTAsdGhpcy5sc2I9MCx0aGlzLmZsZXhpbmc9ITEsdGhpcy5vdXRwdXQ9W10sdGhpcy5zdGFjaz1bXX1yZXR1cm4gZihlLFt7a2V5OiJjb252ZXJ0Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuLGEsaSxzPWUubGVuZ3RoLGM9ITEsdT0wO3U8czt1Kyspe3ZhciBsPWVbdV07aWYobDwzMil7c3dpdGNoKDEyPT09bCYmKGw9KGw8PDgpK2VbKyt1XSksbCl7Y2FzZSAxOmNhc2UgMzpjYXNlIDk6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDMwNzQ6Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSA0OmlmKHRoaXMuZmxleGluZyl7aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7Yz0hMDticmVha312YXIgZj10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCgwLGYpO2JyZWFrfWM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGgpO2JyZWFrO2Nhc2UgNTpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixkKTticmVhaztjYXNlIDY6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDEscCk7YnJlYWs7Y2FzZSA3OmM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGcpO2JyZWFrO2Nhc2UgODpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNix2KTticmVhaztjYXNlIDEwOmlmKHRoaXMuc3RhY2subGVuZ3RoPDEpe2M9ITA7YnJlYWt9aWYoIXRbaT10aGlzLnN0YWNrLnBvcCgpXSl7Yz0hMDticmVha31jPXRoaXMuY29udmVydCh0W2ldLHQscik7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gYztjYXNlIDEzOmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe2M9ITA7YnJlYWt9bj10aGlzLnN0YWNrLnBvcCgpLGE9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMix3KTticmVhaztjYXNlIDE0OnRoaXMub3V0cHV0LnB1c2gobVswXSk7YnJlYWs7Y2FzZSAyMTppZih0aGlzLmZsZXhpbmcpYnJlYWs7Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDIsYik7YnJlYWs7Y2FzZSAyMjppZih0aGlzLmZsZXhpbmcpe3RoaXMuc3RhY2sucHVzaCgwKTticmVha31jPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSx3KTticmVhaztjYXNlIDMwOmM9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGspO2JyZWFrO2Nhc2UgMzE6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsUyk7YnJlYWs7Y2FzZSAzMDc4OmlmKHIpe3ZhciB4PXRoaXMuc3RhY2suYXQoLTUpO3RoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KSx0aGlzLnNlYWNbMF0rPXRoaXMubHNiLXgsYz10aGlzLmV4ZWN1dGVDb21tYW5kKDAsbSl9ZWxzZSBjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxtKTticmVhaztjYXNlIDMwNzk6aWYodGhpcy5zdGFjay5sZW5ndGg8NCl7Yz0hMDticmVha310aGlzLnN0YWNrLnBvcCgpLG49dGhpcy5zdGFjay5wb3AoKTt2YXIgTz10aGlzLnN0YWNrLnBvcCgpO2E9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhLE8pLGM9dGhpcy5leGVjdXRlQ29tbWFuZCgzLGIpO2JyZWFrO2Nhc2UgMzA4NDppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfXZhciBBPXRoaXMuc3RhY2sucG9wKCksQz10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaChDL0EpO2JyZWFrO2Nhc2UgMzA4ODppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfWk9dGhpcy5zdGFjay5wb3AoKTt2YXIgRj10aGlzLnN0YWNrLnBvcCgpO2lmKDA9PT1pJiYzPT09Ril7dmFyIFA9dGhpcy5zdGFjay5zcGxpY2UodGhpcy5zdGFjay5sZW5ndGgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChQWzJdK1BbMF0sUFszXStQWzFdLFBbNF0sUFs1XSxQWzZdLFBbN10sUFs4XSxQWzldLFBbMTBdLFBbMTFdLFBbMTJdLFBbMTNdLFBbMTRdKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMseSwhMCksdGhpcy5mbGV4aW5nPSExLHRoaXMuc3RhY2sucHVzaChQWzE1XSxQWzE2XSl9ZWxzZSAxPT09aSYmMD09PUYmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0OigwLG8ud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJytsKyciJyl9aWYoYylicmVha31lbHNlIGw8PTI0Nj9sLT0xMzk6bD1sPD0yNTA/MjU2KihsLTI0NykrZVsrK3VdKzEwODpsPD0yNTQ/LTI1NioobC0yNTEpLWVbKyt1XS0xMDg6KDI1NSZlWysrdV0pPDwyNHwoMjU1JmVbKyt1XSk8PDE2fCgyNTUmZVsrK3VdKTw8OHwoMjU1JmVbKyt1XSk8PDAsdGhpcy5zdGFjay5wdXNoKGwpfXJldHVybiBjfX0se2tleToiZXhlY3V0ZUNvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9dGhpcy5zdGFjay5sZW5ndGg7aWYoZT5pKXJldHVybiEwO2Zvcih2YXIgbz1pLWUscz1vO3M8aTtzKyspe3ZhciB1PXRoaXMuc3RhY2tbc107TnVtYmVyLmlzSW50ZWdlcih1KT90aGlzLm91dHB1dC5wdXNoKDI4LHU+PjgmMjU1LDI1NSZ1KToodT02NTUzNip1fDAsdGhpcy5vdXRwdXQucHVzaCgyNTUsdT4+MjQmMjU1LHU+PjE2JjI1NSx1Pj44JjI1NSwyNTUmdSkpfXJldHVybihuPXRoaXMub3V0cHV0KS5wdXNoLmFwcGx5KG4sZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYyhlKX0oYT10KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShhKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX0oYSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpLHI/dGhpcy5zdGFjay5zcGxpY2UobyxlKTp0aGlzLnN0YWNrLmxlbmd0aD0wLCExfX1dKSxlfSgpO2Z1bmN0aW9uIE8oZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIEEoZSx0LHIpe2lmKHI+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbixhLGk9MHx0O2ZvcihuPTA7bjxyO24rKylpPTUyODQ1KihlW25dK2kpKzIyNzE5JjY1NTM1O3ZhciBvPWUubGVuZ3RoLXIscz1uZXcgVWludDhBcnJheShvKTtmb3Iobj1yLGE9MDthPG87bisrLGErKyl7dmFyIGM9ZVtuXTtzW2FdPWNeaT4+OCxpPTUyODQ1KihjK2kpKzIyNzE5JjY1NTM1fXJldHVybiBzfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfXZhciBGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7aWYodSh0aGlzLGUpLHIpe3ZhciBvPXQuZ2V0Qnl0ZXMoKSxzPSEoKE8ob1swXSl8fCgwLGEuaXNXaGl0ZVNwYWNlKShvWzBdKSkmJk8ob1sxXSkmJk8ob1syXSkmJk8ob1szXSkmJk8ob1s0XSkmJk8ob1s1XSkmJk8ob1s2XSkmJk8ob1s3XSkpO3Q9bmV3IGkuU3RyZWFtKHM/QShvLDU1NjY1LDQpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9NTU2NjUsbz1lLmxlbmd0aCxzPW5ldyBVaW50OEFycmF5KG8+Pj4xKTtmb3Iobj0wLGE9MDtuPG87bisrKXt2YXIgYz1lW25dO2lmKE8oYykpe24rKztmb3IodmFyIHU9dm9pZCAwO248byYmIU8odT1lW25dKTspbisrO2lmKG48byl7dmFyIGw9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShjLHUpLDE2KTtzW2ErK109bF5pPj44LGk9NTI4NDUqKGwraSkrMjI3MTkmNjU1MzV9fX1yZXR1cm4gcy5zbGljZSg0LGEpfShvKSl9dGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkPSEhbix0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKX1yZXR1cm4gZihlLFt7a2V5OiJyZWFkTnVtYmVyQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgZT1bXTs7KXt2YXIgdD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXR8fCJdIj09PXR8fCJ9Ij09PXQpYnJlYWs7ZS5wdXNoKHBhcnNlRmxvYXQodHx8MCkpfXJldHVybiBlfX0se2tleToicmVhZE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9fSx7a2V5OiJyZWFkSW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gMHxwYXJzZUludChlfHwwLDEwKX19LHtrZXk6InJlYWRCb29sZWFuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJ0cnVlIj09PXRoaXMuZ2V0VG9rZW4oKT8xOjB9fSx7a2V5OiJuZXh0Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJwcmV2Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJlYW0uc2tpcCgtMiksdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJnZXRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyOzspe2lmKC0xPT09dClyZXR1cm4gbnVsbDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxhLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9aWYoQyh0KSlyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLFN0cmluZy5mcm9tQ2hhckNvZGUodCk7dmFyIHI9IiI7ZG97cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PXRoaXMubmV4dENoYXIoKX13aGlsZSh0Pj0wJiYhKDAsYS5pc1doaXRlU3BhY2UpKHQpJiYhQyh0KSk7cmV0dXJuIHJ9fSx7a2V5OiJyZWFkQ2hhclN0cmluZ3MiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT10P2U6QShlLDQzMzAsdCl9fSx7a2V5OiJleHRyYWN0Rm9udFByb2dyYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RyZWFtLHI9W10sbj1bXSxhPU9iamVjdC5jcmVhdGUobnVsbCk7YS5sZW5JVj00O2Zvcih2YXIgaSxvLHMsYyx1PXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTphfX07bnVsbCE9PShpPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PWkpc3dpdGNoKGk9dGhpcy5nZXRUb2tlbigpKXtjYXNlIkNoYXJTdHJpbmdzIjpmb3IodGhpcy5nZXRUb2tlbigpLHRoaXMuZ2V0VG9rZW4oKSx0aGlzLmdldFRva2VuKCksdGhpcy5nZXRUb2tlbigpO251bGwhPT0oaT10aGlzLmdldFRva2VuKCkpJiYiZW5kIiE9PWk7KWlmKCIvIj09PWkpe3ZhciBsPXRoaXMuZ2V0VG9rZW4oKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBmPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpP3RoaXMuZ2V0VG9rZW4oKToiLyI9PT1pJiZ0aGlzLnByZXZDaGFyKCksbi5wdXNoKHtnbHlwaDpsLGVuY29kZWQ6Zn0pfWJyZWFrO2Nhc2UiU3VicnMiOmZvcih0aGlzLnJlYWRJbnQoKSx0aGlzLmdldFRva2VuKCk7ImR1cCI9PT10aGlzLmdldFRva2VuKCk7KXt2YXIgaD10aGlzLnJlYWRJbnQoKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBkPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpJiZ0aGlzLmdldFRva2VuKCkscltoXT1kfWJyZWFrO2Nhc2UiQmx1ZVZhbHVlcyI6Y2FzZSJPdGhlckJsdWVzIjpjYXNlIkZhbWlseUJsdWVzIjpjYXNlIkZhbWlseU90aGVyQmx1ZXMiOnZhciBwPXRoaXMucmVhZE51bWJlckFycmF5KCk7cC5sZW5ndGg+MCYmcC5sZW5ndGg7YnJlYWs7Y2FzZSJTdGVtU25hcEgiOmNhc2UiU3RlbVNuYXBWIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTticmVhaztjYXNlIlN0ZEhXIjpjYXNlIlN0ZFZXIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTticmVhaztjYXNlIkJsdWVTaGlmdCI6Y2FzZSJsZW5JViI6Y2FzZSJCbHVlRnV6eiI6Y2FzZSJCbHVlU2NhbGUiOmNhc2UiTGFuZ3VhZ2VHcm91cCI6Y2FzZSJFeHBhbnNpb25GYWN0b3IiOnUucHJvcGVydGllcy5wcml2YXRlRGF0YVtpXT10aGlzLnJlYWROdW1iZXIoKTticmVhaztjYXNlIkZvcmNlQm9sZCI6dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2ldPXRoaXMucmVhZEJvb2xlYW4oKX1mb3IodmFyIGc9MCx2PW47Zzx2Lmxlbmd0aDtnKyspe3ZhciB5PXZbZ10sbT15LmVuY29kZWQsYj15LmdseXBoLHc9bmV3IHgsaz13LmNvbnZlcnQobSxyLHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCksUz13Lm91dHB1dDtrJiYoUz1bMTRdKTt2YXIgTz17Z2x5cGhOYW1lOmIsY2hhcnN0cmluZzpTLHdpZHRoOncud2lkdGgsbHNiOncubHNiLHNlYWM6dy5zZWFjfTtpZigiLm5vdGRlZiI9PT1iP3UuY2hhcnN0cmluZ3MudW5zaGlmdChPKTp1LmNoYXJzdHJpbmdzLnB1c2goTyksZS5idWlsdEluRW5jb2Rpbmcpe3ZhciBBPWUuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoYik7QT4tMSYmdm9pZCAwPT09ZS53aWR0aHNbQV0mJkE+PWUuZmlyc3RDaGFyJiZBPD1lLmxhc3RDaGFyJiYoZS53aWR0aHNbQV09dy53aWR0aCl9fXJldHVybiB1fX0se2tleToiZXh0cmFjdEZvbnRIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDtudWxsIT09KHQ9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09dClzd2l0Y2godD10aGlzLmdldFRva2VuKCkpe2Nhc2UiRm9udE1hdHJpeCI6dmFyIHI9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9cjticmVhaztjYXNlIkVuY29kaW5nIjp2YXIgYT10aGlzLmdldFRva2VuKCksaT12b2lkIDA7aWYoL15cZCskLy50ZXN0KGEpKXtpPVtdO3ZhciBvPTB8cGFyc2VJbnQoYSwxMCk7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgcz0wO3M8bztzKyspe2Zvcih0PXRoaXMuZ2V0VG9rZW4oKTsiZHVwIiE9PXQmJiJkZWYiIT09dDspaWYobnVsbD09PSh0PXRoaXMuZ2V0VG9rZW4oKSkpcmV0dXJuO2lmKCJkZWYiPT09dClicmVhazt2YXIgYz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7dmFyIHU9dGhpcy5nZXRUb2tlbigpO2lbY109dSx0aGlzLmdldFRva2VuKCl9fWVsc2UgaT0oMCxuLmdldEVuY29kaW5nKShhKTtlLmJ1aWx0SW5FbmNvZGluZz1pO2JyZWFrO2Nhc2UiRm9udEJCb3giOnZhciBsPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5hc2NlbnQ9TWF0aC5tYXgobFszXSxsWzFdKSxlLmRlc2NlbnQ9TWF0aC5taW4obFsxXSxsWzNdKSxlLmFzY2VudFNjYWxlZD0hMH19fV0pLGV9KCk7dC5UeXBlMVBhcnNlcj1GfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGF0dGVybj12b2lkIDAsdC5nZXRUaWxpbmdQYXR0ZXJuSVI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXQuZ2V0QXJyYXkoIk1hdHJpeCIpLGk9bi5VdGlsLm5vcm1hbGl6ZVJlY3QodC5nZXRBcnJheSgiQkJveCIpKSxvPXQuZ2V0KCJYU3RlcCIpLHM9dC5nZXQoIllTdGVwIiksYz10LmdldCgiUGFpbnRUeXBlIiksdT10LmdldCgiVGlsaW5nVHlwZSIpO2lmKGlbMl0taVswXT09MHx8aVszXS1pWzFdPT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyIuY29uY2F0KGksIl0uIikpO3JldHVyblsiVGlsaW5nUGF0dGVybiIscixlLGEsaSxvLHMsYyx1XX07dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTQzKSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49aChlKTtpZih0KXt2YXIgYT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmKHRoaXMscil9fWZ1bmN0aW9uIGYoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZChlKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1kKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWQoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3AodGhpcyxlKSwoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKX1yZXR1cm4gdihlLG51bGwsW3trZXk6InBhcnNlU2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzLGMpe3ZhciB1PWUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0/ZS5kaWN0OmUsbD11LmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKGwpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG5ldyB3KHUsdCxyLHMsYyk7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OnJldHVybiBuZXcgeChlLHQscixzLGMpO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK2wpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiBpLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnNoYWRpbmdQYXR0ZXJufSksKDAsbi53YXJuKShlKSxuZXcgT319fV0pLGV9KCk7dC5QYXR0ZXJuPXk7dmFyIG0sYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy4iKX1yZXR1cm4gdihlLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRJUmAgY2FsbGVkLiIpfX1dLFt7a2V5OiJTTUFMTF9OVU1CRVIiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJTTUFMTF9OVU1CRVIiLDFlLTYpfX1dKSxlfSgpLHc9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLGEsbyxjLHUpe3ZhciBsO3AodGhpcyxyKSwobD10LmNhbGwodGhpcykpLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKSxsLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpO3ZhciBoPWkuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6ZS5nZXRSYXcoIkNTIil8fGUuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjphLHJlc291cmNlczpvLHBkZkZ1bmN0aW9uRmFjdG9yeTpjLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KSxkPWUuZ2V0QXJyYXkoIkJCb3giKTtBcnJheS5pc0FycmF5KGQpJiY0PT09ZC5sZW5ndGg/bC5iYm94PW4uVXRpbC5ub3JtYWxpemVSZWN0KGQpOmwuYmJveD1udWxsO3ZhciBnPTAsdj0xO2lmKGUuaGFzKCJEb21haW4iKSl7dmFyIHk9ZS5nZXRBcnJheSgiRG9tYWluIik7Zz15WzBdLHY9eVsxXX12YXIgbT0hMSx3PSExO2lmKGUuaGFzKCJFeHRlbmQiKSl7dmFyIGs9ZS5nZXRBcnJheSgiRXh0ZW5kIik7bT1rWzBdLHc9a1sxXX1pZighKDMhPT1sLnNoYWRpbmdUeXBlfHxtJiZ3KSl7dmFyIFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShsLmNvb3Jkc0Fyciw2KSx4PVNbMF0sTz1TWzFdLEE9U1syXSxDPVNbM10sRj1TWzRdLFA9U1s1XSxUPU1hdGguaHlwb3QoeC1DLE8tRik7QTw9UCtUJiZQPD1BK1QmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKX1sLmV4dGVuZFN0YXJ0PW0sbC5leHRlbmRFbmQ9dzt2YXIgST1lLmdldFJhdygiRnVuY3Rpb24iKSxFPWMuY3JlYXRlRnJvbUFycmF5KEkpLGo9KHYtZykvMTAsTT1sLmNvbG9yU3RvcHM9W107aWYoZz49dnx8ajw9MClyZXR1cm4oMCxuLmluZm8pKCJCYWQgc2hhZGluZyBkb21haW4uIiksZihsKTtmb3IodmFyIF8sTD1uZXcgRmxvYXQzMkFycmF5KGgubnVtQ29tcHMpLFI9bmV3IEZsb2F0MzJBcnJheSgxKSxOPTA7Tjw9MTA7TisrKXtSWzBdPWcrTipqLEUoUiwwLEwsMCksXz1oLmdldFJnYihMLDApO3ZhciBEPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pO00ucHVzaChbTi8xMCxEXSl9dmFyIEI9InRyYW5zcGFyZW50IjtyZXR1cm4gZS5oYXMoIkJhY2tncm91bmQiKSYmKF89aC5nZXRSZ2IoZS5nZXQoIkJhY2tncm91bmQiKSwwKSxCPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pKSxtfHwoTS51bnNoaWZ0KFswLEJdKSxNWzFdWzBdKz1iLlNNQUxMX05VTUJFUiksd3x8KE0uYXQoLTEpWzBdLT1iLlNNQUxMX05VTUJFUixNLnB1c2goWzEsQl0pKSxsLmNvbG9yU3RvcHM9TSxsfXJldHVybiB2KHIsW3trZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGksbz10aGlzLmNvb3Jkc0FycixzPXRoaXMuc2hhZGluZ1R5cGU7cmV0dXJuIDI9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bMl0sb1szXV0sYT1udWxsLGk9bnVsbCxlPSJheGlhbCIpOjM9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bM10sb1s0XV0sYT1vWzJdLGk9b1s1XSxlPSJyYWRpYWwiKTooMCxuLnVucmVhY2hhYmxlKSgiZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICIuY29uY2F0KHMpKSxbIlJhZGlhbEF4aWFsIixlLHRoaXMuYmJveCx0aGlzLmNvbG9yU3RvcHMsdCxyLGEsaV19fV0pLHJ9KGIpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5jb250ZXh0PXIsdGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wO3ZhciBuPXIubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KG4pO3ZhciBhPXIuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9ci5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkoYSk6dGhpcy50bXBDb21wc0J1Zn1yZXR1cm4gdihlLFt7a2V5OiJoYXNEYXRhIixnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLnN0cmVhbS5lbmQpcmV0dXJuIHRoaXMuc3RyZWFtLnBvczx0aGlzLnN0cmVhbS5lbmQ7aWYodGhpcy5idWZmZXJMZW5ndGg+MClyZXR1cm4hMDt2YXIgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIShlPDB8fCh0aGlzLmJ1ZmZlcj1lLHRoaXMuYnVmZmVyTGVuZ3RoPTgsMCkpfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnVmZmVyLHI9dGhpcy5idWZmZXJMZW5ndGg7aWYoMzI9PT1lKXtpZigwPT09cilyZXR1cm4odGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkpPj4+MDt0PXQ8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTt2YXIgbj10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIHRoaXMuYnVmZmVyPW4mKDE8PHIpLTEsKHQ8PDgtcnwoMjU1Jm4pPj5yKT4+PjB9aWYoOD09PWUmJjA9PT1yKXJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Zm9yKDtyPGU7KXQ9dDw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkscis9ODtyZXR1cm4gci09ZSx0aGlzLmJ1ZmZlckxlbmd0aD1yLHRoaXMuYnVmZmVyPXQmKDE8PHIpLTEsdD4+cn19LHtrZXk6ImFsaWduIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYnVmZmVyPTAsdGhpcy5idWZmZXJMZW5ndGg9MH19LHtrZXk6InJlYWRGbGFnIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9fSx7a2V5OiJyZWFkQ29vcmRpbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGUsdD10aGlzLnJlYWRCaXRzKGUpLHI9dGhpcy5yZWFkQml0cyhlKSxuPXRoaXMuY29udGV4dC5kZWNvZGUsYT1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwO3JldHVyblt0KmEqKG5bMV0tblswXSkrblswXSxyKmEqKG5bM10tblsyXSkrblsyXV19fSx7a2V5OiJyZWFkQ29tcG9uZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jb250ZXh0Lm51bUNvbXBzLHQ9dGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQscj10PDMyPzEvKCgxPDx0KS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwLG49dGhpcy5jb250ZXh0LmRlY29kZSxhPXRoaXMudG1wQ29tcHNCdWYsaT0wLG89NDtpPGU7aSsrLG8rPTIpe3ZhciBzPXRoaXMucmVhZEJpdHModCk7YVtpXT1zKnIqKG5bbysxXS1uW29dKStuW29dfXZhciBjPXRoaXMudG1wQ3NDb21wc0J1ZjtyZXR1cm4gdGhpcy5jb250ZXh0LmNvbG9yRm4mJnRoaXMuY29udGV4dC5jb2xvckZuKGEsMCxjLDApLHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihjLDApfX1dKSxlfSgpLFM9KG09W10sZnVuY3Rpb24oZSl7cmV0dXJuIG1bZV18fChtW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjw9ZTtyKyspe3ZhciBuPXIvZSxhPTEtbjt0LnB1c2gobmV3IEZsb2F0MzJBcnJheShbYSphKmEsMypuKmEqYSwzKm4qbiphLG4qbipuXSkpfXJldHVybiB0fShlKSksbVtlXX0pLHg9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLG8scyxjLHUpe3ZhciBsO2lmKHAodGhpcyxyKSxsPXQuY2FsbCh0aGlzKSwhKGUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtIik7dmFyIGY9ZS5kaWN0O2wuc2hhZGluZ1R5cGU9Zi5nZXQoIlNoYWRpbmdUeXBlIik7dmFyIGg9Zi5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9sLmJib3g9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoaCk6bC5iYm94PW51bGw7dmFyIGQ9aS5Db2xvclNwYWNlLnBhcnNlKHtjczpmLmdldFJhdygiQ1MiKXx8Zi5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOm8scmVzb3VyY2VzOnMscGRmRnVuY3Rpb25GYWN0b3J5OmMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dX0pO2wuYmFja2dyb3VuZD1mLmhhcygiQmFja2dyb3VuZCIpP2QuZ2V0UmdiKGYuZ2V0KCJCYWNrZ3JvdW5kIiksMCk6bnVsbDt2YXIgZz1mLmdldFJhdygiRnVuY3Rpb24iKSx2PWc/Yy5jcmVhdGVGcm9tQXJyYXkoZyk6bnVsbDtsLmNvb3Jkcz1bXSxsLmNvbG9ycz1bXSxsLmZpZ3VyZXM9W107dmFyIHk9e2JpdHNQZXJDb29yZGluYXRlOmYuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6Zi5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpmLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6Zi5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjp2LGNvbG9yU3BhY2U6ZCxudW1Db21wczp2PzE6ZC5udW1Db21wc30sbT1uZXcgayhlLHkpLGI9ITE7c3dpdGNoKGwuc2hhZGluZ1R5cGUpe2Nhc2UgNDpsLl9kZWNvZGVUeXBlNFNoYWRpbmcobSk7YnJlYWs7Y2FzZSA1OnZhciB3PTB8Zi5nZXQoIlZlcnRpY2VzUGVyUm93Iik7aWYodzwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7bC5fZGVjb2RlVHlwZTVTaGFkaW5nKG0sdyk7YnJlYWs7Y2FzZSA2OmwuX2RlY29kZVR5cGU2U2hhZGluZyhtKSxiPSEwO2JyZWFrO2Nhc2UgNzpsLl9kZWNvZGVUeXBlN1NoYWRpbmcobSksYj0hMDticmVhaztkZWZhdWx0OigwLG4udW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYoYil7bC5fdXBkYXRlQm91bmRzKCk7Zm9yKHZhciBTPTAseD1sLmZpZ3VyZXMubGVuZ3RoO1M8eDtTKyspbC5fYnVpbGRGaWd1cmVGcm9tUGF0Y2goUyl9cmV0dXJuIGwuX3VwZGF0ZUJvdW5kcygpLGwuX3BhY2tEYXRhKCksbH1yZXR1cm4gdihyLFt7a2V5OiJfZGVjb2RlVHlwZTRTaGFkaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxhPVtdLGk9W10sbz0wO2UuaGFzRGF0YTspe3ZhciBzPWUucmVhZEZsYWcoKSxjPWUucmVhZENvb3JkaW5hdGUoKSx1PWUucmVhZENvbXBvbmVudHMoKTtpZigwPT09byl7aWYoISgwPD1zJiZzPD0yKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNCBmbGFnIik7c3dpdGNoKHMpe2Nhc2UgMDpvPTM7YnJlYWs7Y2FzZSAxOmkucHVzaChpLmF0KC0yKSxpLmF0KC0xKSksbz0xO2JyZWFrO2Nhc2UgMjppLnB1c2goaS5hdCgtMyksaS5hdCgtMSkpLG89MX1hLnB1c2gocyl9aS5wdXNoKHQubGVuZ3RoKSx0LnB1c2goYyksci5wdXNoKHUpLG8tLSxlLmFsaWduKCl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InRyaWFuZ2xlcyIsY29vcmRzOm5ldyBJbnQzMkFycmF5KGkpLGNvbG9yczpuZXcgSW50MzJBcnJheShpKX0pfX0se2tleToiX2RlY29kZVR5cGU1U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5jb29yZHMsbj10aGlzLmNvbG9ycyxhPVtdO2UuaGFzRGF0YTspe3ZhciBpPWUucmVhZENvb3JkaW5hdGUoKSxvPWUucmVhZENvbXBvbmVudHMoKTthLnB1c2goci5sZW5ndGgpLHIucHVzaChpKSxuLnB1c2gobyl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6ImxhdHRpY2UiLGNvb3JkczpuZXcgSW50MzJBcnJheShhKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoYSksdmVydGljZXNQZXJSb3c6dH0pfX0se2tleToiX2RlY29kZVR5cGU2U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzg6MTI7Yzx1O2MrKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtmb3IodmFyIGw9ci5sZW5ndGgsZj0wLGg9MCE9PW8/Mjo0O2Y8aDtmKyspci5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7dmFyIGQ9dm9pZCAwLHA9dm9pZCAwLGc9dm9pZCAwLHY9dm9pZCAwO3N3aXRjaChvKXtjYXNlIDA6YVsxMl09cyszLGFbMTNdPXMrNCxhWzE0XT1zKzUsYVsxNV09cys2LGFbOF09cysyLGFbMTFdPXMrNyxhWzRdPXMrMSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVsxMV09cyszLGFbNF09cCxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbMTFdPXMrMyxhWzRdPXAsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVsxMV09cyszLGFbNF09YVsyXSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9YVs1XT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMF1dWzBdLXRbYVsxNV1dWzBdKzYqKHRbYVs0XV1bMF0rdFthWzFdXVswXSktMioodFthWzEyXV1bMF0rdFthWzNdXVswXSkrMyoodFthWzEzXV1bMF0rdFthWzddXVswXSkpLzksKC00KnRbYVswXV1bMV0tdFthWzE1XV1bMV0rNioodFthWzRdXVsxXSt0W2FbMV1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMTNdXVsxXSt0W2FbN11dWzFdKSkvOV0pLGFbNl09dC5sZW5ndGgsdC5wdXNoKFsoLTQqdFthWzNdXVswXS10W2FbMTJdXVswXSs2Kih0W2FbMl1dWzBdK3RbYVs3XV1bMF0pLTIqKHRbYVswXV1bMF0rdFthWzE1XV1bMF0pKzMqKHRbYVs0XV1bMF0rdFthWzE0XV1bMF0pKS85LCgtNCp0W2FbM11dWzFdLXRbYVsxMl1dWzFdKzYqKHRbYVsyXV1bMV0rdFthWzddXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzRdXVsxXSt0W2FbMTRdXVsxXSkpLzldKSxhWzldPXQubGVuZ3RoLHQucHVzaChbKC00KnRbYVsxMl1dWzBdLXRbYVszXV1bMF0rNioodFthWzhdXVswXSt0W2FbMTNdXVswXSktMioodFthWzBdXVswXSt0W2FbMTVdXVswXSkrMyoodFthWzExXV1bMF0rdFthWzFdXVswXSkpLzksKC00KnRbYVsxMl1dWzFdLXRbYVszXV1bMV0rNioodFthWzhdXVsxXSt0W2FbMTNdXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzExXV1bMV0rdFthWzFdXVsxXSkpLzldKSxhWzEwXT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMTVdXVswXS10W2FbMF1dWzBdKzYqKHRbYVsxMV1dWzBdK3RbYVsxNF1dWzBdKS0yKih0W2FbMTJdXVswXSt0W2FbM11dWzBdKSszKih0W2FbMl1dWzBdK3RbYVs4XV1bMF0pKS85LCgtNCp0W2FbMTVdXVsxXS10W2FbMF1dWzFdKzYqKHRbYVsxMV1dWzFdK3RbYVsxNF1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMl1dWzFdK3RbYVs4XV1bMV0pKS85XSksdGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2RlY29kZVR5cGU3U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzEyOjE2O2M8dTtjKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Zm9yKHZhciBsPXIubGVuZ3RoLGY9MCxoPTAhPT1vPzI6NDtmPGg7ZisrKXIucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO3ZhciBkPXZvaWQgMCxwPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2gobyl7Y2FzZSAwOmFbMTJdPXMrMyxhWzEzXT1zKzQsYVsxNF09cys1LGFbMTVdPXMrNixhWzhdPXMrMixhWzldPXMrMTMsYVsxMF09cysxNCxhWzExXT1zKzcsYVs0XT1zKzEsYVs1XT1zKzEyLGFbNl09cysxNSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1wLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbOV09cys5LGFbMTBdPXMrMTAsYVsxMV09cyszLGFbNF09cCxhWzVdPXMrOCxhWzZdPXMrMTEsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1hWzJdLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2J1aWxkRmlndXJlRnJvbVBhdGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpZ3VyZXNbZV07KDAsbi5hc3NlcnQpKCJwYXRjaCI9PT10LnR5cGUsIlVuZXhwZWN0ZWQgcGF0Y2ggbWVzaCBmaWd1cmUiKTt2YXIgYT10aGlzLmNvb3JkcyxpPXRoaXMuY29sb3JzLG89dC5jb29yZHMscz10LmNvbG9ycyxjPU1hdGgubWluKGFbb1swXV1bMF0sYVtvWzNdXVswXSxhW29bMTJdXVswXSxhW29bMTVdXVswXSksdT1NYXRoLm1pbihhW29bMF1dWzFdLGFbb1szXV1bMV0sYVtvWzEyXV1bMV0sYVtvWzE1XV1bMV0pLGw9TWF0aC5tYXgoYVtvWzBdXVswXSxhW29bM11dWzBdLGFbb1sxMl1dWzBdLGFbb1sxNV1dWzBdKSxmPU1hdGgubWF4KGFbb1swXV1bMV0sYVtvWzNdXVsxXSxhW29bMTJdXVsxXSxhW29bMTVdXVsxXSksaD1NYXRoLmNlaWwoKGwtYykqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1syXS10aGlzLmJvdW5kc1swXSkpO2g9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGgpKTt2YXIgZD1NYXRoLmNlaWwoKGYtdSkqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1szXS10aGlzLmJvdW5kc1sxXSkpO2Q9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGQpKTtmb3IodmFyIHA9aCsxLGc9bmV3IEludDMyQXJyYXkoKGQrMSkqcCksdj1uZXcgSW50MzJBcnJheSgoZCsxKSpwKSx5PTAsbT1uZXcgVWludDhBcnJheSgzKSxiPW5ldyBVaW50OEFycmF5KDMpLHc9aVtzWzBdXSxrPWlbc1sxXV0seD1pW3NbMl1dLE89aVtzWzNdXSxBPVMoZCksQz1TKGgpLEY9MDtGPD1kO0YrKyl7bVswXT0od1swXSooZC1GKSt4WzBdKkYpL2R8MCxtWzFdPSh3WzFdKihkLUYpK3hbMV0qRikvZHwwLG1bMl09KHdbMl0qKGQtRikreFsyXSpGKS9kfDAsYlswXT0oa1swXSooZC1GKStPWzBdKkYpL2R8MCxiWzFdPShrWzFdKihkLUYpK09bMV0qRikvZHwwLGJbMl09KGtbMl0qKGQtRikrT1syXSpGKS9kfDA7Zm9yKHZhciBQPTA7UDw9aDtQKysseSsrKWlmKDAhPT1GJiZGIT09ZHx8MCE9PVAmJlAhPT1oKXtmb3IodmFyIFQ9MCxJPTAsRT0wLGo9MDtqPD0zO2orKylmb3IodmFyIE09MDtNPD0zO00rKyxFKyspe3ZhciBfPUFbRl1bal0qQ1tQXVtNXTtUKz1hW29bRV1dWzBdKl8sSSs9YVtvW0VdXVsxXSpffWdbeV09YS5sZW5ndGgsYS5wdXNoKFtULEldKSx2W3ldPWkubGVuZ3RoO3ZhciBMPW5ldyBVaW50OEFycmF5KDMpO0xbMF09KG1bMF0qKGgtUCkrYlswXSpQKS9ofDAsTFsxXT0obVsxXSooaC1QKStiWzFdKlApL2h8MCxMWzJdPShtWzJdKihoLVApK2JbMl0qUCkvaHwwLGkucHVzaChMKX19Z1swXT1vWzBdLHZbMF09c1swXSxnW2hdPW9bM10sdltoXT1zWzFdLGdbcCpkXT1vWzEyXSx2W3AqZF09c1syXSxnW3AqZCtoXT1vWzE1XSx2W3AqZCtoXT1zWzNdLHRoaXMuZmlndXJlc1tlXT17dHlwZToibGF0dGljZSIsY29vcmRzOmcsY29sb3JzOnYsdmVydGljZXNQZXJSb3c6cH19fSx7a2V5OiJfdXBkYXRlQm91bmRzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvb3Jkc1swXVswXSx0PXRoaXMuY29vcmRzWzBdWzFdLHI9ZSxuPXQsYT0xLGk9dGhpcy5jb29yZHMubGVuZ3RoO2E8aTthKyspe3ZhciBvPXRoaXMuY29vcmRzW2FdWzBdLHM9dGhpcy5jb29yZHNbYV1bMV07ZT1lPm8/bzplLHQ9dD5zP3M6dCxyPXI8bz9vOnIsbj1uPHM/czpufXRoaXMuYm91bmRzPVtlLHQscixuXX19LHtrZXk6Il9wYWNrRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixhPXRoaXMuY29vcmRzLGk9bmV3IEZsb2F0MzJBcnJheSgyKmEubGVuZ3RoKTtmb3IoZT0wLHI9MCx0PWEubGVuZ3RoO2U8dDtlKyspe3ZhciBvPWFbZV07aVtyKytdPW9bMF0saVtyKytdPW9bMV19dGhpcy5jb29yZHM9aTt2YXIgcz10aGlzLmNvbG9ycyxjPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAscj0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7dmFyIHU9c1tlXTtjW3IrK109dVswXSxjW3IrK109dVsxXSxjW3IrK109dVsyXX10aGlzLmNvbG9ycz1jO3ZhciBsPXRoaXMuZmlndXJlcztmb3IoZT0wLHQ9bC5sZW5ndGg7ZTx0O2UrKyl7dmFyIGY9bFtlXSxoPWYuY29vcmRzLGQ9Zi5jb2xvcnM7Zm9yKHI9MCxuPWgubGVuZ3RoO3I8bjtyKyspaFtyXSo9MixkW3JdKj0zfX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblsiTWVzaCIsdGhpcy5zaGFkaW5nVHlwZSx0aGlzLmNvb3Jkcyx0aGlzLmNvbG9ycyx0aGlzLmZpZ3VyZXMsdGhpcy5ib3VuZHMsdGhpcy5iYm94LHRoaXMuYmFja2dyb3VuZF19fV0sW3trZXk6Ik1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLDMpfX0se2tleToiTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCIsMjApfX0se2tleToiVFJJQU5HTEVfREVOU0lUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIlRSSUFOR0xFX0RFTlNJVFkiLDIwKX19XSkscn0oYiksTz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bIkR1bW15Il19fV0pLHJ9KGIpfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0WGZhRm9udERpY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZyhlKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPXQuYmFzZVdpZHRocyxhPXQuYmFzZU1hcHBpbmcsaT10LmZhY3RvcnM7cj1pP24ubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBlKmlbdF19KSk6bjt2YXIgbyxzLGM9LTIsdT1bXSxsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1oKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oYS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2UsdF19KSkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLDEpWzBdLWYodCwxKVswXX0pKSk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgZD1mKHMudmFsdWUsMikscD1kWzBdLHY9ZFsxXTstMSE9PXAmJihwPT09YysxPyhvLnB1c2goclt2XSksYys9MSk6KGM9cCxvPVtyW3ZdXSx1LnB1c2gocCxvKSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdX0oZSkscj1uZXcgYS5EaWN0KG51bGwpO3Iuc2V0KCJCYXNlRm9udCIsYS5OYW1lLmdldChlKSksci5zZXQoIlR5cGUiLGEuTmFtZS5nZXQoIkZvbnQiKSksci5zZXQoIlN1YnR5cGUiLGEuTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKSxyLnNldCgiRW5jb2RpbmciLGEuTmFtZS5nZXQoIklkZW50aXR5LUgiKSksci5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxyLnNldCgiVyIsdCksci5zZXQoIkZpcnN0Q2hhciIsdFswXSksci5zZXQoIkxhc3RDaGFyIix0LmF0KC0yKSt0LmF0KC0xKS5sZW5ndGgtMSk7dmFyIG49bmV3IGEuRGljdChudWxsKTtyLnNldCgiRm9udERlc2NyaXB0b3IiLG4pO3ZhciBpPW5ldyBhLkRpY3QobnVsbCk7cmV0dXJuIGkuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksaS5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxpLnNldCgiU3VwcGxlbWVudCIsMCksci5zZXQoIkNJRFN5c3RlbUluZm8iLGkpLHJ9LHQuZ2V0WGZhRm9udE5hbWU9Zzt2YXIgbj1yKDE4MSksYT1yKDEzNCksaT1yKDE4Miksbz1yKDE4Mykscz1yKDE4NCksYz1yKDE4NSksdT1yKDEzNSksbD1yKDE2Nyk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxoKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBwPSgwLHUuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiTXlyaWFkUHJvLVJlZ3VsYXIiXT1lWyJQZGZKUy1GYWxsYmFjay1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6cy5NeXJpYWRQcm9SZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvUmVndWxhck1ldHJpY3N9LGVbIk15cmlhZFByby1Cb2xkIl09ZVsiUGRmSlMtRmFsbGJhY2stQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnMuTXlyaWFkUHJvQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczpzLk15cmlhZFByb0JvbGRNZXRyaWNzfSxlWyJNeXJpYWRQcm8tSXQiXT1lWyJNeXJpYWRQcm8tSXRhbGljIl09ZVsiUGRmSlMtRmFsbGJhY2stSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpzLk15cmlhZFByb0l0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6cy5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzfSxlWyJNeXJpYWRQcm8tQm9sZEl0Il09ZVsiTXlyaWFkUHJvLUJvbGRJdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6cy5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3N9LGUuQXJpYWxNVD1lLkFyaWFsPWVbIkFyaWFsLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmd9LGVbIkFyaWFsLUJvbGRNVCJdPWVbIkFyaWFsLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmd9LGVbIkFyaWFsLUl0YWxpY01UIl09ZVsiQXJpYWwtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nfSxlWyJBcmlhbC1Cb2xkSXRhbGljTVQiXT1lWyJBcmlhbC1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGJhc2VXaWR0aHM6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nfSxlWyJDYWxpYnJpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpuLkNhbGlicmlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpuLkNhbGlicmlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRNZXRyaWNzfSxlWyJDYWxpYnJpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6bi5DYWxpYnJpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpuLkNhbGlicmlJdGFsaWNNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpuLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpjLlNlZ29ldWlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpjLlNlZ29ldWlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRNZXRyaWNzfSxlWyJTZWdvZXVpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6Yy5TZWdvZXVpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpjLlNlZ29ldWlJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtUmVndWxhciJdPWUuSGVsdmV0aWNhPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmkuSGVsdmV0aWNhUmVndWxhckZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczppLkhlbHZldGljYUl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6aS5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzfX0pKTtmdW5jdGlvbiBnKGUpe3ZhciB0PSgwLGwubm9ybWFsaXplRm9udE5hbWUpKGUpO3JldHVybiBwKClbdF19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNhbGlicmlSZWd1bGFyTWV0cmljcz10LkNhbGlicmlSZWd1bGFyRmFjdG9ycz10LkNhbGlicmlJdGFsaWNNZXRyaWNzPXQuQ2FsaWJyaUl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZE1ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZEZhY3RvcnM9dm9pZCAwLHQuQ2FsaWJyaUJvbGRGYWN0b3JzPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NDY1NywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzMyOTMsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MTIxLC44Njk0MywuNzk3OTUsLjg4MTk4LC43Nzk1OCwuNzA4NjQsLjgxMDU1LC45MDM5OSwuODg2NTMsLjk2MDE3LC44MjU3NywuNzc4OTIsLjc4MjU3LC45NzUwNywxLjU0NjU3LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuODg3NjIsLjg3ODUsLjc1MjQxLC44Nzg1LC45MDUxOCwuOTUwMTUsLjc3NjE4LC44Nzg1LC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTE0ODgsLjg3ODUsLjg4MDEsLjg3ODUsLjg3ODUsLjkxMzQzLC43MTczLDEuMDQxMDYsLjg3ODUsLjg1MDc1LC45NTc5NCwuODI2MTYsLjg1MTYyLC43OTQ5MiwuODgzMzEsMS42OTgwOCwuODgzMzEsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS43ODAxLC44OTU1MiwxLjI0NDg3LDEuMTMyNTQsMS4xMjQwMSwuOTY4MzksLjg1Mjg0LC42ODc4NywuNzA2NDUsLjg1NTkyLC45MDc0NywxLjAxNDY2LDEuMDA4OCwuOTAzMjMsMSwxLjA3NDYzLDEsLjkxMDU2LC43NTgwNiwxLjE5MTE4LC45NjgzOSwuNzg4NjQsLjgyODQ1LC44NDEzMywuNzU4NTksLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjc3NTM5LC43MzI5MywuNzMxMzMsLjczMTMzLC43MzEzMywuNzMxMzMsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjk1OTU4LC44ODUwNiwuOTEyMSwuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg2OTQzLC44NTI4NCwuODc1MDgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44NzE1LC43NTI0MSwuOTA1MTgsLjkwNTE4LC45MDUxOCwuOTA1MTgsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44Nzg1LC44ODAxLC44ODAxLC44ODAxLC44ODAxLC44ODAxLC45MDc0NywuODkwNDksLjg3ODUsLjg3ODUsLjg3ODUsLjg3ODUsLjg1MTYyLC44Nzg1LC44NTE2MiwuODM5MDgsLjg4NzYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC44NzI4OSwuODMwMTYsLjg4NTA2LC45MzEyNSwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjgxOTIxLC43NzYxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsMSwxLC44NzM1NiwuODc4NSwuOTEwNzUsLjg5NjA4LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzYyMjksLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc5NDY4LC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTEyMSwuODc4NSwxLDEsLjkxMjEsLjg3ODUsLjg3ODAyLC44ODY1NiwuODc4NSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44Njk0MywuODgwMSwuODc0MDIsLjg5MjkxLC43Nzk1OCwuOTEzNDMsMSwxLC43Nzk1OCwuOTEzNDMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45NjAxNywuOTU3OTQsLjc3ODkyLC44NTE2MiwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuODg3NjIsLjc3NTM5LC44NzE1LC44NzUwOCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwNjc0LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjA2MzAzLC44MzkwOCwuODAzNTIsLjU3MTg0LC42OTY1LC41NjI4OSwuODIwMDEsLjU2MDI5LC44MTIzNSwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjgxNTYsLjgwMzY3LC43MzEzMywuNzgyNTcsLjg3MzU2LC44Njk0MywuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MTIxLC43NjQ4LC44Njk0MywuODczNTYsLjc5Nzk1LC43ODI3NSwuODEwNTUsLjc3ODkyLC45NzYyLC44MjU3NywuOTk4MTksLjg0ODk2LC45NTk1OCwuNzc4OTIsLjk2MTA4LDEuMDE0MDcsLjg5MDQ5LDEuMDI5ODgsLjk0MjExLC45NjEwOCwuODkzNiwuODQwMjEsLjg3ODQyLC45NjM5OSwuNzkxMDksLjg5MDQ5LDEuMDA4MTMsMS4wMjk4OCwuODYwNzcsLjg3NDQ1LC45MjA5OSwuODQ3MjMsLjg2NTEzLC44ODAxLC43NTYzOCwuODU3MTQsLjc4MjE2LC43OTU4NiwuODc5NjUsLjk0MjExLC45Nzc0NywuNzgyODcsLjk3OTI2LC44NDk3MSwxLjAyOTg4LC45NDIxMSwuODgwMSwuOTQyMTEsLjg0OTcxLC43MzEzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTAyNjQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTE4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDU0OCwxLDEsMSwxLDEsMSwuOTYwMTcsLjk1Nzk0LC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMzYzLC45Mjc5NCwuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODcwMTIsLjg3MDEyLC44NzAxMiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjcxMTQzLDEuMDYxNTIsMSwxLDEuMDMzNzIsMS4wMzM3MiwuOTcxNzEsMS40OTU2LDIuMjgwNywuOTM4MzUsLjgzNDA2LC45MTEzMywuODQxMDcsLjkxMTMzLDEsMSwxLC43MjAyMSwxLDEuMjMxMDgsLjgzNDg5LC44ODUyNSwuODg1MjUsLjgxNDk5LC45MDUyNywxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMzEwMDYsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fSx0LkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLC45NzgwMSwuOTI0ODIsLjg5NTUyLC45MTEzMywuODE5ODgsLjk3NTY2LC45ODE1MiwuOTM1NDgsLjkzNTQ4LDEuMjc5OCwuODUyODQsLjkyNzk0LDEsLjk2MTM0LDEuNTYyMzksLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC44Mjg0NSwuODI4NDUsLjg1Mjg0LC44NTI4NCwuODUyODQsLjc1ODU5LC45MjEzOCwuODM5MDgsLjc3NjIsLjcxODA1LC44NzI4OSwuNzMxMzMsLjc1MTQsLjgxOTIxLC44NzM1NiwuOTU5NTgsLjU5NTI2LC43NTcyNywuNjkyMjUsMS4wNDkyNCwuOTA4NzIsLjg1OTM4LC43OTc5NSwuODcwNjgsLjc3OTU4LC42OTc2NiwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwNjgsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTI5LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuOTQ5MDgsLjg2NDExLC43NDAxMiwuODY0MTEsLjg4MzIzLC45NTAxNSwuODY0MTEsLjg2MzMxLC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTAzOSwuODYzMzEsLjg2MzMxLC44NjQxMSwuODY0MTEsLjkwNDY0LC43MDg1MiwxLjA0MTA2LC44NjMzMSwuODQzNzIsLjk1Nzk0LC44MjYxNiwuODQ1NDgsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjE5MTI5LC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjcxODA1LC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MDg3MiwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTI4NCwuODcwNjgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC44NTg4NywuNzQwMTIsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4MzIzLC44ODQwMSwuODg0MDEsLjg4NDAxLC44ODQwMSwuODc4NSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuOTA3NDcsLjg5MDQ5LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODQ1NDgsLjg2NDExLC44NDU0OCwuODM5MDgsLjk0OTA4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC44NzI4OSwuNzk1MzgsLjg4NTA2LC45MjcyNiwuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjgxOTIxLC44NjQxMSwuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsMSwxLC44NzM1NiwuODYzMzEsLjkxMDc1LC44Nzc3LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzY0NjcsLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc3MzEyLC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTA4NzIsLjg2MzMxLDEsMSwuOTA4NzIsLjg2MzMxLC44NjkwNiwuODgxMTYsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NzQwMiwuODY1NDksLjc3OTU4LC45MDQ2NCwxLDEsLjc3OTU4LC45MDQ2NCwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuOTQ5MDgsLjc3NTM5LC44NTg4NywuODcwNjgsLjg5MDQ5LDEsMSwuODEwNTUsMS4wNDEwNiwxLjIwNTI4LDEuMjA1MjgsMSwxLjE1NTQzLC43MDA4OCwuOTgzODcsLjk0NzIxLDEuMzM0MzEsMS40NTg5NCwuOTUxNjEsMS40ODM4NywuODM5MDgsLjgwMzUyLC41NzExOCwuNjk2NSwuNTYzNDcsLjc5MTc5LC41NTg1MywuODAzNDYsMS4wMjk4OCwuODM5MDgsLjc3NjIsLjY3MTc0LC44NjAzNiwuNzMxMzMsLjc4MjU3LC44NzM1NiwuODY0NDEsLjk1OTU4LC43NTcyNywuODkwMTksMS4wNDkyNCwuOTA4NzIsLjc0ODg5LC44NTkzOCwuODc4OTEsLjc5Nzk1LC43OTU3LC44MTA1NSwuNzc4OTIsLjk3NDQ3LC44MjU3NywuOTc0NjYsLjg3MTc5LC45NTk1OCwuNzc4OTIsLjk0MjUyLC45NTYxMiwuODc1MywxLjAyOTg4LC45MjczMywuOTQyNTIsLjg3NDExLC44NDAyMSwuODcyOCwuOTU2MTIsLjc0MDgxLC44NzUzLDEuMDIxODksMS4wMjk4OCwuODQ4MTQsLjg3NDQ1LC45MTgyMiwuODQ3MjMsLjg1NjY4LC44NjMzMSwuODEzNDQsLjg3NTgxLC43NjQyMiwuODIwNDYsLjk2MDU3LC45MjczMywuOTkzNzUsLjc4MDIyLC45NTQ1MiwuODYwMTUsMS4wMjk4OCwuOTI3MzMsLjg2MzMxLC45MjczMywuODYwMTUsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDYzMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODgzMjMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1MTc0LDEsMSwxLDEsMSwxLC45NjA2OCwuOTU3OTQsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC43Nzg5MiwuODQ1NDgsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjg5ODA3LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzEwOTQsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45Mjk3MiwuODM0MDYsLjkxMTMzLC44MzMyNiwuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNjE2LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTA3LDEuNTM3MTEsLjk0NDM0LDEuMDg2OTYsMSwuOTUwMTgsLjc3MTkyLC44NTI4NCwuOTA3NDcsMS4xNzUzNCwuNjk4MjUsLjk3MTYsMS4zNzA3NywuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDgwMDQsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA3MjcsLjkwNzI3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkNhbGlicmlCb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzk1NDMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjcyMzQ2LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTI0OSwuODQxMTgsLjc3NDUyLC44NTM3NCwuNzUxODYsLjY3Nzg5LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDMwOSwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zODMxMywxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC45MjQ1LC45MjQ1LC44MzIwMywuOTI0NSwuODU4NjUsMS4wOTg0MiwuOTI0NSwuOTI0NSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk0OTU5LC45MjQ1LC45MjI3NCwuOTI0NSwuOTI0NSwxLjAyOTMzLC43NzgzMiwxLjIwNTYyLC45MjQ1LC44OTE2LC45ODk4NiwuODY2MjEsLjg5NDUzLC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMTYzNTksLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzIzNDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5MjQ5LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODQxMTgsLjg1Mjg0LC44NDU1NywuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODQ4NDMsLjgzMjAzLC44NTg2NSwuODU4NjUsLjg1ODY1LC44NTg2NSwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45MjQ1LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkwNzQ3LC44NjY1MSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODk0NTMsLjkyNDUsLjg5NDUzLC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjg1MTkzLC44ODc1LC44NjQ3NywuOTkwMzQsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsLjgxMTA1LC45MjQ1LDEsMSwuODYyNzUsLjkyNDUsLjkwODcyLC45MzU5MSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzg5NiwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45Mzc1LC45ODE1NiwuOTM0MDcsLjc3MjYxLDEuMTE0MjksLjg5MjQ5LC45MjQ1LDEsMSwuODkyNDksLjkyNDUsLjkyNTM0LC44NjY5OCwuOTI0NSwuODQxMTgsLjkyMjc0LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODY2NywuODYyOTEsLjc1MTg2LDEuMDI5MzMsMSwxLC43NTE4NiwxLjAyOTMzLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsMSwxLC43OTc3NiwuOTc2NTUsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjkyNDUsLjc2MzE4LC44NDg0MywuODQ1NTcsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3MDA5LC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44Njc1LC45MDg2MSwuNjE5MiwuNzM2MywuNjQ4MjQsLjgyNDExLC41NjMyMSwuODU2OTYsMS4yMzUxNiwuODY3NSwuODE1NTIsLjcyODYsLjg0MTM0LC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NDM2OSwuOTA2ODUsLjc3ODkyLC44NTg3MSwxLjAyNjM4LC44OTI0OSwuNzU4MjgsLjg0MTE4LC44NTk4NCwuNzc0NTIsLjc2NDY2LC43OTc3NiwuNzMwNiwuOTA3ODIsLjc3ODE4LC45MDMsLjg3MjkxLC45MDY4NSwuNzMwNiwuOTkwNTgsMS4wMzY2NywuOTQ2MzUsMS4yMzUxNiwuOTg0OSwuOTkwNTgsLjkyMzkzLC44OTE2LC45NDIsMS4wMzY2NywuNzUwMjYsLjk0NjM1LDEuMDI5NywxLjIzNTE2LC45MDkxOCwuOTQwNDgsLjk4MjE3LC44OTc0NiwuODQxNTMsLjkyMjc0LC44MjUwNywuODg4MzIsLjg0NDM4LC44ODE3OCwxLjAzNTI1LC45ODQ5LDEuMDAyMjUsLjc4MDg2LC45NzI0OCwuODk0MDQsMS4yMzUxNiwuOTg0OSwuOTIyNzQsLjk4NDksLjg5NDA0LC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2OTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1ODY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDkzMywxLDEsMSwxLDEsMSwuOTQzMDksLjk4OTg2LC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY4OTk0LDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTc4NTgsLjgyNjE2LC45MTEzMywuODM0MzcsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1NzIsMS44MTA1NSwuOTA3NDksMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTI4NCwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5DYWxpYnJpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpUmVndWxhckZhY3RvcnM9WzEuMzg3NywxLDEsMSwxLjE3MjIzLDEuMTI5MywuODk1NTIsLjkxMTMzLC44MDM5NSwxLjAyMjY5LDEuMTU2MDEsLjkxMDU2LC45MTA1NiwxLjI3OTgsLjg1Mjg0LC44OTgwNywxLC45MDg2MSwxLjM5MDE2LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTYzMDksLjk2MzA5LC44NTI4NCwuODUyODQsLjg1Mjg0LC44MzMxOSwuODgwNzEsLjg2NzUsLjgxNTUyLC43MzgzNCwuODUxOTMsLjczMjA2LC43NTIyLC44MTEwNSwuODYyNzUsLjkwNjg1LC42Mzc3LC43Nzg5MiwuNzU1OTMsMS4wMjYzOCwuODkzODUsLjg1MTIyLC43NzQ1MiwuODY1MDMsLjc1MTg2LC42ODg4NywuNzk3NzYsLjg4ODQ0LC44NTA2NiwuOTQyNTgsLjc3ODE4LC43MzA2LC43NjY1OSwxLjEwMzY5LDEuMzkwMTYsMS4xMDM2OSwxLjA2MTM5LC44OTU1MiwuODczOSwuODYxMjgsLjk0NDY5LC44NDU3LC45NDQ2OSwuODk0NjQsMS4wOTg0MiwuODQ2MzYsLjk0NDY5LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTU4OTcsLjk0NDY5LC45NDgyLC45NDQ2OSwuOTQ0NjksMS4wNDY5MiwuNzgyMjMsMS4yMDU2MiwuOTQ0NjksLjkwMzMyLC45ODk4NiwuODY2MjEsLjkwNTI3LC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMDg3MDcsLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzM4MzQsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5Mzg1LC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1Mjg0LC44NTMxMSwuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODY5MywuODQ1NywuODk0NjQsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjgyNjAxLC44MjYwMSwuODI2MDEsLjgyNjAxLC45NDQ2OSwuOTQ0NjksLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjkwNzQ3LC44NjY1MSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjkwNTI3LC45NDQ2OSwuOTA1MjcsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC44NTE5MywuOTI0NTQsLjg2NDc3LC45OTIxLC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwxLDEsLjg2Mjc1LC45NDQ2OSwuOTA4NzIsLjk1Nzg2LC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3NzQxLDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkwNDUyLC45ODE1NiwxLjExODQyLC43NzI2MSwxLjExNDI5LC44OTM4NSwuOTQ0NjksMSwxLC44OTM4NSwuOTQ0NjksLjk1ODc3LC44NjkwMSwuOTQ0NjksLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg2NjcsLjkwMDE2LC43NTE4NiwxLjA0NjkyLDEsMSwuNzUxODYsMS4wNDY5MiwuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLDEsMSwuNzk3NzYsLjkyMTg4LC43OTc3NiwxLjIzMDIzLC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LC43MzA2LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LDEuMDkyMzEsLjU0ODczLC44Njc1LC44NjEyOCwuNzYzMTgsLjg2OTMsLjg1MzExLC44NjY1MSwxLDEsLjc5Nzc2LDEuMjA1NjIsMS4xODYyMiwxLjE4NjIyLDEsMS4xNDM3LC42Nzc0MiwuOTYzMzQsLjkzNjk1LDEuMzUxOTEsMS40MDkwOSwuOTUxNjEsMS40ODM4NywuODY2ODYsLjkwODYxLC42MjI2NywuNzQzNTksLjY1NjQ5LC44NTQ5OCwuNTY5NjMsLjg4MjU0LDEuMjM1MTYsLjg2NzUsLjgxNTUyLC43NTQ0MywuODQ1MDMsLjczMjA2LC43NjY1OSwuODYyNzUsLjg1MTIyLC45MDY4NSwuNzc4OTIsLjg1NzQ2LDEuMDI2MzgsLjg5Mzg1LC43NTY1NywuODUxMjIsLjg2Mjc1LC43NzQ1MiwuNzQxNzEsLjc5Nzc2LC43MzA2LC45NTE2NSwuNzc4MTgsLjg5NzcyLC44ODgzMSwuOTA2ODUsLjczMDYsLjk4MTQyLDEuMDIxOTEsLjk2NTc2LDEuMjM1MTYsLjk5MDE4LC45ODE0MiwuOTIzNiwuODkyNTgsLjk0MDM1LDEuMDIxOTEsLjc4ODQ4LC45NjU3NiwuOTU2MSwxLjIzNTE2LC45MDkxOCwuOTI1NzgsLjk1NDI0LC44OTc0NiwuODM5NjksLjk0ODIsLjgwMTEzLC44OTQ0MiwuODUyMDgsLjg2MTU1LC45ODAyMiwuOTkwMTgsMS4wMDQ1MiwuODEyMDksLjk5MjQ3LC44OTE4MSwxLjIzNTE2LC45OTAxOCwuOTQ4MiwuOTkwMTgsLjg5MTgxLC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODg4NDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NDY0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45Njc2NiwxLDEsMSwxLDEsMSwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY5MDQzLDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTkzMzEsLjgyNjE2LC45MTEzMywuODQyODYsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1MjcsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLjA3MTg1LC45OTQxMywuOTYzMzQsMS4wODA2NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz10LkhlbHZldGljYVJlZ3VsYXJGYWN0b3JzPXQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz10LkhlbHZldGljYUl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkTWV0cmljcz10LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz12b2lkIDAsdC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDMzNzQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDQyLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMzgyOCwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LDEuMDAwNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5MywuOTk5OCwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEsMS4wMDAxNiwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwxLjAwMDI2LC44MTIxLDEuMDAwMjYsLjk5OTk4LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwNiwuOTk5NzMsLjk5OTc3LC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMzQsLjk5OTc3LDEsLjk5OTk3LDEuMDAwMjYsMS4wMDA3OCwxLjAwMDM2LC45OTk3MywxLjAwMDEzLDEuMDAwNiwuOTk5NzcsLjk5OTc3LC45OTk4OCwuODUxNDgsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwuOTk5NzcsMS4wMDAwMSwuOTk5OTksLjk5OTc3LDEuMDAwNjksMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwuOTk5ODQsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMjQsMS4wMDAwMSwuOTk5OSwxLDEuMDAwNiwxLjAwMDAxLDEuMDAwNDEsLjk5OTYyLDEuMDAwMjYsMS4wMDA2LC45OTk5NSwxLjAwMDQxLC45OTk0MiwuOTk5NzMsLjk5OTI3LDEuMDAwODIsLjk5OTAyLDEuMDAwMjYsMS4wMDA4NywxLjAwMDYsMS4wMDA2OSwuOTk5NzMsLjk5ODY3LC45OTk3MywuOTk5MywxLjAwMDI2LDEuMDAwNDksMS4wMDA1NiwxLC45OTk4OCwuOTk5MzUsLjk5OTk1LC45OTk1NCwxLjAwMDU1LC45OTk0NSwxLjAwMDMyLDEuMDAwNiwuOTk5OTUsMS4wMDAyNiwuOTk5OTUsMS4wMDAzMiwxLjAwMDAxLDEuMDAwMDgsLjk5OTcxLDEuMDAwMTksLjk5OTQsMS4wMDAwMSwxLjAwMDYsMS4wMDA0NCwuOTk5NzMsMS4wMDAyMywxLjAwMDQ3LDEsLjk5OTQyLC45OTU2MSwuOTk5ODksMS4wMDAzNSwuOTk5NzcsMS4wMDAzNSwuOTk5NzcsMS4wMDAxOSwuOTk5NDQsMS4wMDAwMSwxLjAwMDIxLC45OTkyNiwxLjAwMDM1LDEuMDAwMzUsLjk5OTQyLDEuMDAwNDgsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMzUsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5ODksMS4wMDA1NywxLjAwMDAxLC45OTkzNiwxLjAwMDUyLDEuMDAwMTIsLjk5OTk2LDEuMDAwNDMsMSwxLjAwMDM1LC45OTk0LC45OTk3NiwxLjAwMDM1LC45OTk3MywxLjAwMDUyLDEuMDAwNDEsMS4wMDExOSwxLjAwMDM3LC45OTk3MywxLjAwMDAyLC45OTk4NiwxLjAwMDQxLDEuMDAwNDEsLjk5OTAyLC45OTk2LDEuMDAwMzQsLjk5OTk5LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsLjk5OTczLDEuMDAwNTIsLjk5OTczLDEsLjk5OTczLDEuMDAwNDEsMS4wMDA3NSwuOTk5NCwxLjAwMDMsLjk5OTk5LDEsMS4wMDA0MSwuOTk5NTUsMSwuOTk5MTUsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAxMTksLjk5OTU1LC45OTk3MywxLjAwMDYsLjk5OTExLDEuMDAwNiwxLjAwMDI2LC45OTk3MiwxLjAwMDI2LC45OTkwMiwxLjAwMDQxLC45OTk3MywuOTk5OTksMSwxLDEuMDAwMzgsMS4wMDA1LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMSwxLDEsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAxMDYsLjk5OTk5LC45OTk5OCwuOTk5OTgsLjk5OTk5LC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsMS4wMDA0NywxLjAwMDIzLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEsMSwxLDEsMSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAwNDQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAxMDExLDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3NywxLDEsMS4wMDAyNiwuOTk5NjksLjk5OTcyLC45OTk4MSwuOTk5OCwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLC45MTE1NSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTY2LDEuMDAwMjIsMS4wMDAzMiwxLjAwMDAxLC45OTk0NCwxLjAwMDI2LDEuMDAwMDEsLjk5OTY4LDEuMDAwMDEsMS4wMDA0NywxLDEuMDAwNiwxLjAwMDAxLC45OTk4MSwxLjAwMTAxLDEuMDAwMjYsMS4wMDA2LC45OTk0OCwuOTk5ODEsMS4wMDA2NCwuOTk5NzMsLjk5OTQyLDEuMDAxMDEsMS4wMDA2MSwxLjAwMDI2LDEuMDAwNjksMS4wMDA2LDEuMDAwMTQsLjk5OTczLDEuMDEzMjIsLjk5OTczLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDEyLC45OTkyMywxLDEuMDAwNjQsMS4wMDA3NiwuOTk5NDgsMS4wMDA1NSwxLjAwMDYzLDEuMDAwMDcsLjk5OTQzLDEuMDAwNiwuOTk5NDgsMS4wMDAyNiwuOTk5NDgsLjk5OTQzLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI5LDEuMDAwMzgsMS4wMDAzNSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3OCwxLjAwMDAxLDEuMDAwNTcsLjk5OTg5LC45OTk2NywuOTk5NjQsLjk5OTY3LC45OTk3NywuOTk5OTksLjk5OTc3LDEuMDAwMzgsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwNjYsLjk5OTY3LC45OTk2NywxLjAwMDQxLC45OTk5OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsLjk5OTY3LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTY0LDEuMDAwMzEsMS4wMDAwMSwuOTk5OTksLjk5OTk5LDEsMS4wMDAyMywxLDEsLjk5OTk5LDEuMDAwMzUsMS4wMDAwMSwuOTk5OTksLjk5OTczLC45OTk3NywuOTk5OTksMS4wMDA1OCwuOTk5NzMsLjk5OTczLC45OTk1NSwuOTk5NSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAzMiwuOTk5ODksMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLC40NTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAwMSwuOTk5OTksLjk5OTgyLC45OTk5NCwuOTk5OTYsMSwxLjAwMDQyLDEuMDAwNDQsMS4wMDAyOSwxLjAwMDIzLC45OTk3MywuOTk5NzMsMS4wMDAyNiwuOTk5NDksMS4wMDAwMiwuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45ODY4NSwuOTk5NzMsMS4wMDAyNiwxLDEsLjk5OTY2LDEuMDAwNDQsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MSwuOTk5NzgsMSwxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDk4LDEsMSwxLDEuMDAwNDksMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn0sdC5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwxLjAwMDYsMS4wMDAwNiwuOTk5NzMsLjk5OTczLC45OTk4MiwxLjAwMDAxLDEuMDAwNDMsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLC45OTk3MywuOTk5ODcsMS4wMDAwMSwxLjAwMDAxLC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwxLDEuMDAwMDEsLjk5OTczLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk0OSwuOTk5NzMsLjk5OTk4LC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTkyNCwuOTk5MjQsMSwuOTk5MjQsLjk5OTk5LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDYsLjk5OTczLDEsLjk5OTc3LDEsMSwxLDEuMDAwMDUsMS4wMDA5LDEuMDAwMDUsMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwOSwuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTgsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwxLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDY0MDksMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsMSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMS4wMjg4LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwuOTk5NDYsMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDYzMTEsLjk5OTczLDEuMDAwMjQsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDQxLC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg5NTQ3LDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDU0LC45OTk3NywxLjAwMDg0LDEuMDAwMDcsLjk5OTczLDEuMDAwMTMsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwuOTk5NDUsLjkxMjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTMzLDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMSwxLjAwMDAxLDEuMDAwNTIsMSwxLjAwMDYsMS4wMDAwMSwuOTk5NDUsLjk5ODk3LC45OTk2OCwuOTk5MjQsMS4wMDAzNiwuOTk5NDUsLjk5OTQ5LDEsMS4wMDA2LC45OTg5NywuOTk5MTgsLjk5OTY4LC45OTkxMSwuOTk5MjQsMSwuOTk5NjIsMS4wMTQ4NywxLDEuMDAwNSwuOTk5NzMsMS4wMDAxMiwxLjAwMDQzLDEsLjk5OTk1LC45OTk5NCwxLjAwMDM2LC45OTk0NywxLjAwMDE5LDEuMDAwNjMsMS4wMDAyNSwuOTk5MjQsMS4wMDAzNiwuOTk5NzMsMS4wMDAzNiwxLjAwMDI1LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI3LDEuMDAwMSwxLjAwMDY4LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLDEuMDAwMDgsLjk5OTU3LC45OTk3MiwuOTk5NCwuOTk5NTQsLjk5OTc1LDEuMDAwNTEsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsMS4wMDAxLC45OTk4NiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAzOCwuOTk5NTQsLjk5OTU0LC45OTk0LDEuMDAwNjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwNTQsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NzUsMS4wMDAxLDEuMDAwMDEsLjk5OTkzLC45OTk1LC45OTk1NSwxLjAwMDE2LC45OTk3OCwuOTk5NzQsMS4wMDAxOSwxLjAwMDIyLC45OTk1NSwxLjAwMDUzLC45OTk3MywxLjAwMDg5LDEuMDAwMDUsLjk5OTY3LDEuMDAwNDgsLjk5OTczLDEuMDAwMDIsMS4wMDAzNCwuOTk5NzMsLjk5OTczLC45OTk2NCwxLjAwMDA2LDEuMDAwNjYsLjk5OTQ3LC45OTk3MywuOTg4OTQsLjk5OTczLDEsLjQ0ODk4LDEsLjk5OTQ2LDEsMS4wMDAzOSwxLjAwMDgyLC45OTk5MSwuOTk5OTEsLjk5OTg1LDEuMDAwMjIsMS4wMDAyMywxLjAwMDYxLDEuMDAwMDYsLjk5OTY2LC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwMTksMS4wMDA4LDEsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTgzLDEuMDAwNDQsLjk5OTczLC45OTk2NCwuOTgzMzIsMSwuOTk5NzMsMSwxLC45OTk2MiwuOTk4OTUsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAyNjcsLjk5OTk5LC45OTk5OCwuOTk5OTgsMSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsMS4wMDQyMywuOTk5MjUsLjk5OTk5LDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwNDksMSwxLjAwMjQ1LDEsMSwxLDEsLjk2MzI5LDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsLjgyNTQsMS4wMDAxNSwxLDEuMDAwMzUsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsMS4wMDAwMywxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjM1LGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhUmVndWxhckZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjA0NTk2LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwxLjAwMDE5LDEuMDAwMzQsMSwuOTk5MjQsMS4wMDAwMSwxLDEsLjk5OTczLC45OTkyNCwuOTk5NzMsLjk5OTI0LC45OTk3MywxLjAyNTcyLC45OTk3MywxLjAwMDA1LC45OTk3MywuOTk5MjQsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTk5LC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg0NTMzLDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTkyOCwxLC45OTk3NywxLjAwMDEzLDEuMDAwNTUsLjk5OTQ3LC45OTk0NSwuOTk5NDEsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDQsLjkxNjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDA1LC45OTk5OSwuOTk5NzcsMS4wMDAxNSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk3MywxLjAwMDI2LDEuMDAwMDEsMS4wMDAxOSwxLjAwMDAxLC45OTk0NiwxLDEuMDAwNiwxLjAwMDAxLC45OTk3OCwxLjAwMDQ1LC45OTk3MywuOTk5MjQsMS4wMDAyMywuOTk5NzgsLjk5OTY2LDEsMS4wMDA2NSwxLjAwMDQ1LDEuMDAwMTksLjk5OTczLC45OTk3MywuOTk5MjQsMSwxLC45NjQ5OSwxLDEuMDAwNTUsLjk5OTczLDEuMDAwMDgsMS4wMDAyNywxLC45OTk3LC45OTk5NSwxLjAwMDIzLC45OTkzMywxLjAwMDE5LDEuMDAwMTUsMS4wMDAzMSwuOTk5MjQsMS4wMDAyMywuOTk5NzMsMS4wMDAyMywxLjAwMDMxLDEuMDAwMDEsLjk5OTI4LDEuMDAwMjksMS4wMDA5MiwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLC45OTk4OCwuOTk5NzUsMSwxLjAwMDgyLC45OTU2MSwuOTk5NiwxLjAwMDM1LDEuMDAwMDEsLjk5OTYyLDEuMDAwMDEsMS4wMDA5MiwuOTk5NjQsMS4wMDAwMSwuOTk5NjMsLjk5OTk5LDEuMDAwMzUsMS4wMDAzNSwxLjAwMDgyLC45OTk2MiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk2LC45OTk2NywxLjAwMDAxLDEuMDAwMzQsMS4wMDA3NCwxLjAwMDU0LDEuMDAwNTMsMS4wMDA2MywuOTk5NzEsLjk5OTYyLDEuMDAwMzUsLjk5OTc1LC45OTk3NywuOTk5NzMsMS4wMDA0MywuOTk5NTMsMS4wMDA3LC45OTkxNSwuOTk5NzMsMS4wMDAwOCwuOTk4OTIsMS4wMDA3MywxLjAwMDczLDEuMDAxMTQsLjk5OTE1LDEuMDAwNzMsLjk5OTU1LC45OTk3MywxLjAwMDkyLC45OTk3MywxLC45OTk5OCwxLDEuMDAwMywxLDEuMDAwNDMsMS4wMDAwMSwuOTk5NjksMS4wMDAzLDEsMS4wMDAzNSwxLjAwMDAxLC45OTk1LDEsMS4wMDA5MiwuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDcsLjk5OTUsMSwuOTk5MjQsMS4wMDA2LC45OTkyNCwuOTk5NzIsMS4wMDA2MiwuOTk5NzMsMS4wMDExNCwxLjAwMDczLDEsLjk5OTU1LDEsMSwxLjAwMDQ3LC45OTk2OCwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsLjk5OTI1LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTUzMTcsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPXQuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZz10LkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzPXQuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPXQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmc9dm9pZCAwLHQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzE5LDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODUsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzODUsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw0NjUsNzIyLDMzMyw4NTMsOTA2LDQ3NCw4MjUsOTI3LDgzOCwyNzgsNzIyLDcyMiw2MDEsNzE5LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY0NCw3NzgsNzIyLDY2Nyw2MDAsNjExLDY2Nyw4MjEsNjY3LDgwOSw4MDIsMjc4LDY2Nyw2MTUsNDUxLDYxMSwyNzgsNTgyLDYxNSw2MTAsNTU2LDYwNiw0NzUsNDYwLDYxMSw1NDEsMjc4LDU1OCw1NTYsNjEyLDU1Niw0NDUsNjExLDc2Niw2MTksNTIwLDY4NCw0NDYsNTgyLDcxNSw1NzYsNzUzLDg0NSwyNzgsNTgyLDYxMSw1ODIsODQ1LDY2Nyw2NjksODg1LDU2Nyw3MTEsNjY3LDI3OCwyNzYsNTU2LDEwOTQsMTA2Miw4NzUsNjEwLDcyMiw2MjIsNzE5LDcyMiw3MTksNzIyLDU2Nyw3MTIsNjY3LDkwNCw2MjYsNzE5LDcxOSw2MTAsNzAyLDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MjIsODU0LDY2Nyw3MzAsNzAzLDEwMDUsMTAxOSw4NzAsOTc5LDcxOSw3MTEsMTAzMSw3MTksNTU2LDYxOCw2MTUsNDE3LDYzNSw1NTYsNzA5LDQ5Nyw2MTUsNjE1LDUwMCw2MzUsNzQwLDYwNCw2MTEsNjA0LDYxMSw1NTYsNDkwLDU1Niw4NzUsNTU2LDYxNSw1ODEsODMzLDg0NCw3MjksODU0LDYxNSw1NTIsODU0LDU4Myw1NTYsNTU2LDYxMSw0MTcsNTUyLDU1NiwyNzgsMjgxLDI3OCw5NjksOTA2LDYxMSw1MDAsNjE1LDU1Niw2MDQsNzc4LDYxMSw0ODcsNDQ3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDEwOTQsNTU2LDg4NSw0ODksMTExNSwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHM9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3NDAsNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4Miw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM5Niw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw3MjIsMzMzLDg1NCw5MDYsNDczLDg0NCw5MzAsODQ3LDI3OCw3MjIsNzIyLDYxMCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjU3LDc3OCw3MTgsNjY3LDU5MCw2MTEsNjY3LDgyMiw2NjcsODI5LDc4MSwyNzgsNjY3LDYyMCw0NzksNjExLDI3OCw1OTEsNjIwLDYyMSw1NTYsNjEwLDQ3OSw0OTIsNjExLDU1OCwyNzgsNTY2LDU1Niw2MDMsNTU2LDQ1MCw2MTEsNzEyLDYwNSw1MzIsNjY0LDQwOSw1OTEsNzA0LDU3OCw3NzMsODM0LDI3OCw1OTEsNjExLDU5MSw4MzQsNjY3LDY2Nyw4ODYsNjE0LDcxOSw2NjcsMjc4LDI3OCw1NTYsMTA5NCwxMDQyLDg1NCw2MjIsNzE5LDY3Nyw3MTksNzIyLDcwOCw3MjIsNjE0LDcyMiw2NjcsOTI3LDY0Myw3MTksNzE5LDYxNSw2ODcsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDY3Nyw3ODEsNjY3LDcyOSw3MDgsOTc5LDk4OSw4NTQsMWUzLDcwOCw3MTksMTA0Miw3MjksNTU2LDYxOSw2MDQsNTM0LDYxOCw1NTYsNzM2LDUxMCw2MTEsNjExLDUwNyw2MjIsNzQwLDYwNCw2MTEsNjExLDYxMSw1NTYsODg5LDU1Niw4ODUsNTU2LDY0Niw1ODMsODg5LDkzNSw3MDcsODU0LDU5NCw1NTIsODY1LDU4OSw1NTYsNTU2LDYxMSw0NjksNTYzLDU1NiwyNzgsMjc4LDI3OCw5NjksOTA2LDYxMSw1MDcsNjE5LDU1Niw2MTEsNzc4LDYxMSw1NzUsNDY3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDExMDQsNTU2LDg4NSw1MTYsMTE0NiwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsOTk5LDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocz1bMzY1LDAsMzMzLDI3OCwyNzgsMzU1LDU1Niw1NTYsODg5LDY2NywxOTEsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCw1ODQsNTg0LDU4NCw1NTYsMTAxNSw2NjcsNjY3LDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1MDAsNjY3LDU1Niw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDI3OCwyNzgsMjc4LDQ2OSw1NTYsMzMzLDU1Niw1NTYsNTAwLDU1Niw1NTYsMjc4LDU1Niw1NTYsMjIyLDIyMiw1MDAsMjIyLDgzMyw1NTYsNTU2LDU1Niw1NTYsMzMzLDUwMCwyNzgsNTU2LDUwMCw3MjIsNTAwLDUwMCw1MDAsMzM0LDI2MCwzMzQsNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjYwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTM3LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDUwMCw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NDksNjExLDU1Niw1NTYsNTU2LDU1Niw1MDAsNTU2LDUwMCw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw2MjUsNzIyLDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3MjIsNTU2LDcyMiw1NTYsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDIyMiwyNzgsMjc4LDczMyw0NDQsNTAwLDIyMiw2NjcsNTAwLDUwMCw1NTYsMjIyLDU1NiwyMjIsNTU2LDI4MSw1NTYsNDAwLDU1NiwyMjIsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNjE1LDcyMyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsMWUzLDk0NCw3MjIsMzMzLDcyMiwzMzMsNzIyLDMzMyw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDYxMSwyNzgsNjExLDM1NCw2MTEsMjc4LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDk0NCw3MjIsNjY3LDUwMCw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjIyLDU1Niw2NjcsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTAwLDYxMSwyNzgsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw2NjcsMjc4LDc4OSw4NDYsMzg5LDc5NCw4NjUsNzc1LDIyMiw2NjcsNjY3LDU3MCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw2NjcsNjY3LDgzMyw3MjIsNjQ4LDc3OCw3MjUsNjY3LDYwMCw2MTEsNjY3LDgzNyw2NjcsODMxLDc2MSwyNzgsNjY3LDU3MCw0MzksNTU1LDIyMiw1NTAsNTcwLDU3MSw1MDAsNTU2LDQzOSw0NjMsNTU1LDU0MiwyMjIsNTAwLDQ5Miw1NDgsNTAwLDQ0Nyw1NTYsNjcwLDU3Myw0ODYsNjAzLDM3NCw1NTAsNjUyLDU0Niw3MjgsNzc5LDIyMiw1NTAsNTU2LDU1MCw3NzksNjY3LDY2Nyw4NDMsNTQ0LDcwOCw2NjcsMjc4LDI3OCw1MDAsMTA2Niw5ODIsODQ0LDU4OSw3MTUsNjM5LDcyNCw2NjcsNjUxLDY2Nyw1NDQsNzA0LDY2Nyw5MTcsNjE0LDcxNSw3MTUsNTg5LDY4Niw4MzMsNzIyLDc3OCw3MjUsNjY3LDcyMiw2MTEsNjM5LDc5NSw2NjcsNzI3LDY3Myw5MjAsOTIzLDgwNSw4ODYsNjUxLDY5NCwxMDIyLDY4Miw1NTYsNTYyLDUyMiw0OTMsNTUzLDU1Niw2ODgsNDY1LDU1Niw1NTYsNDcyLDU2NCw2ODYsNTUwLDU1Niw1NTYsNTU2LDUwMCw4MzMsNTAwLDgzNSw1MDAsNTcyLDUxOCw4MzAsODUxLDYyMSw3MzYsNTI2LDQ5Miw3NTIsNTM0LDU1Niw1NTYsNTU2LDM3OCw0OTYsNTAwLDIyMiwyMjIsMjIyLDkxMCw4MjgsNTU2LDQ3Miw1NjUsNTAwLDU1Niw3NzgsNTU2LDQ5MiwzMzksOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDgzLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDk5OCw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTg0LDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYxNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzM1LDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjkyLDU1NiwzMzQsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MDQsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzc1LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg0LDgzOCwzODQsNzc0LDg1NSw3NTIsMjIyLDY2Nyw2NjcsNTUxLDY2OCw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjgsODMzLDcyMiw2NTAsNzc4LDcyMiw2NjcsNjE4LDYxMSw2NjcsNzk4LDY2Nyw4MzUsNzQ4LDI3OCw2NjcsNTc4LDQ0Niw1NTYsMjIyLDU0Nyw1NzgsNTc1LDUwMCw1NTcsNDQ2LDQ0MSw1NTYsNTU2LDIyMiw1MDAsNTAwLDU3Niw1MDAsNDQ4LDU1Niw2OTAsNTY5LDQ4Miw2MTcsMzk1LDU0Nyw2NDgsNTI1LDcxMyw3ODEsMjIyLDU0Nyw1NTYsNTQ3LDc4MSw2NjcsNjY3LDg2NSw1NDIsNzE5LDY2NywyNzgsMjc4LDUwMCwxMDU3LDEwMTAsODU0LDU4Myw3MjIsNjM1LDcxOSw2NjcsNjU2LDY2Nyw1NDIsNjc3LDY2Nyw5MjMsNjA0LDcxOSw3MTksNTgzLDY1Niw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjM1LDc2MCw2NjcsNzQwLDY2Nyw5MTcsOTM4LDc5Miw4ODUsNjU2LDcxOSwxMDEwLDcyMiw1NTYsNTczLDUzMSwzNjUsNTgzLDU1Niw2NjksNDU4LDU1OSw1NTksNDM4LDU4Myw2ODgsNTUyLDU1Niw1NDIsNTU2LDUwMCw0NTgsNTAwLDgyMyw1MDAsNTczLDUyMSw4MDIsODIzLDYyNSw3MTksNTIxLDUxMCw3NTAsNTQyLDU1Niw1NTYsNTU2LDM2NSw1MTAsNTAwLDIyMiwyNzgsMjIyLDkwNiw4MTIsNTU2LDQzOCw1NTksNTAwLDU1Miw3NzgsNTU2LDQ4OSw0MTEsOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDczLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NeXJpYWRQcm9SZWd1bGFyTWV0cmljcz10Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPXQuTXlyaWFkUHJvSXRhbGljTWV0cmljcz10Lk15cmlhZFByb0l0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkTWV0cmljcz10Lk15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzPXQuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz12b2lkIDAsdC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjcyNzA2LC44MDQ3OSwuODM3MzQsLjk4ODk0LC45OTc5MywuOTg5NywuOTM4ODQsLjg2MjA5LC45NDI5MiwuOTQyOTIsMS4xNjY2MSwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTkxMzcsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcyODUxLC43ODk2NiwuOTA4MzgsLjgzNjM3LC44MjM5MSwuOTYzNzYsLjgwMDYxLC44NjI3NSwuODc2OCwuOTU0MDcsMS4wMjU4LC43MzkwMSwuODUwMjIsLjgzNjU1LDEuMDE1NiwuOTU1NDYsLjkyMTc5LC44NzEwNywuOTIxNzksLjgyMTE0LC44MDk2LC44OTcxMywuOTQ0MzgsLjk1MzUzLC45NDA4MywuOTE5MDUsLjkwNDA2LC45NDQ2LC45NDI5MiwxLjE4Nzc3LC45NDI5MiwxLjAyMDU4LC44OTkwMywuOTAwODgsLjk0OTM4LC45Nzg5OCwuODEwOTMsLjk3NTcxLC45NDkzOCwxLjAyNCwuOTU3NywuOTU5MzMsLjk4NjIxLDEuMDQ3NCwuOTc0NTUsLjk4OTgxLC45NjcyLC45NTkzMywuOTQ0NiwuOTc4OTgsLjk3NDA3LC45NzY0NiwuNzgwMzYsMS4xMDIwOCwuOTU0NDIsLjk1Mjk4LC45NzU3OSwuOTMzMiwuOTQwMzksLjkzOCwuODA2ODcsMS4wMTE0OSwuODA2ODcsMS4wMjA1OCwuODA0NzksLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLDEuMDExNDksMS4wMDg3MiwuOTAwODgsLjkxODgyLDEuMDIxMywuODM2MSwxLjAyMDU4LC42MjI5NSwuNTQzMjQsLjg5MDIyLDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NzQ1NSwuOTM1ODIsLjkwMDg4LDEsMS4wNTY4NiwuODM2MSwuOTk2NDIsLjk5NjQyLC45OTY0MiwuNzI4NTEsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjg2OCwuODIzOTEsLjgwMDYxLC44MDA2MSwuODAwNjEsLjgwMDYxLDEuMDI1OCwxLjAyNTgsMS4wMjU4LDEuMDI1OCwuOTc0ODQsLjk1NTQ2LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksMS4wMjA1OCwuOTIxNzksLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45MDQwNiwuODY5NTgsLjk4MjI1LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45MDMxLC44MTA5MywuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45Mzk2OSwuOTU5MzMsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsMS4wODU5NSwuOTQ0NiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk0MDM5LC45Nzg5OCwuOTQwMzksLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuOTYzNzYsLjg0MzEzLC45NzQ4NCwuOTc1NzEsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44NzY4LC45NTc3LC44NzY4LC45NTc3LC44NzY4LC45NTc3LDEsMSwuOTU0MDcsLjk1OTMzLC45NzA2OSwuOTU5MzMsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLC44ODcsMS4wMTU5MSwuNzM5MDEsMS4wNDc0LDEsMSwuOTc0NTUsLjgzNjU1LC45ODk4MSwxLDEsLjgzNjU1LC43Mzk3NywuODM2NTUsLjczOTAzLC44NDYzOCwxLjAzMywuOTU1NDYsLjk1OTMzLDEsMSwuOTU1NDYsLjk1OTMzLC44MjcxLC45NTQxNywuOTU5MzMsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkzNiwuOTE5NjQsLjgyMTE0LC45NzY0NiwxLDEsLjgyMTE0LC45NzY0NiwuODA5NiwuNzgwMzYsLjgwOTYsLjc4MDM2LDEsMSwuODA5NiwuNzgwMzYsMSwxLC44OTcxMywuNzc0NTIsLjg5NzEzLDEuMTAyMDgsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45MDQwNiwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwxLC45OTc5MywuOTA4MzgsLjk0OTM4LC44NjgsLjkwMzEsLjkyMTc5LC45NDQ2LDEsMSwuODk3MTMsMS4xMDIwOCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTA5ODksLjkzNTgsLjkxOTQ1LC44MzE4MSwuNzUyNjEsLjg3OTkyLC44Mjk3NiwuOTYwMzQsLjgzNjg5LC45NzI2OCwxLjAwNzgsLjkwODM4LC44MzYzNywuODAxOSwuOTAxNTcsLjgwMDYxLC45NDQ2LC45NTQwNywuOTI0MzYsMS4wMjU4LC44NTAyMiwuOTcxNTMsMS4wMTU2LC45NTU0NiwuODkxOTIsLjkyMTc5LC45MjM2MSwuODcxMDcsLjk2MzE4LC44OTcxMywuOTM3MDQsLjk1NjM4LC45MTkwNSwuOTE3MDksLjkyNzk2LDEuMDI1OCwuOTM3MDQsLjk0ODM2LDEuMDM3MywuOTU5MzMsMS4wMDc4LC45NTg3MSwuOTQ4MzYsLjk2MTc0LC45MjYwMSwuOTQ5OCwuOTg2MDcsLjk1Nzc2LC45NTkzMywxLjA1NDUzLDEuMDA3OCwuOTgyNzUsLjkzMTQsLjk1NjE3LC45MTcwMSwxLjA1OTkzLC45NDQ2LC43ODM2NywuOTU1MywxLC44NjgzMiwxLjAxMjgsLjk1ODcxLC45OTM5NCwuODc1NDgsLjk2MzYxLC44Njc3NCwxLjAwNzgsLjk1ODcxLC45NDQ2LC45NTg3MSwuODY3NzQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45NjY5NCwxLC44OTkwMywxLDEsMSwuOTM1ODIsLjkzNTgyLC45MzU4MiwxLC45MDgsLjkwOCwuOTE4LC45NDIxOSwuOTQyMTksLjk2NTQ0LDEsMS4yODUsMSwxLC44MTA3OSwuODEwNzksMSwxLC43NDg1NCwxLDEsMSwxLC45OTc5MywxLDEsMSwuNjUsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE3MTczLDEsLjgwNTM1LC43NjE2OSwxLjAyMDU4LDEuMDczMiwxLjA1NDg2LDEsMSwxLjMwNjkyLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTYxNjEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9Cb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sdC5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY2MjI3LC44MDc3OSwuODE2MjUsLjk3Mjc2LC45NzI3NiwuOTc3MzMsLjkyMjIyLC44MzI2NiwuOTQyOTIsLjk0MjkyLDEuMTYxNDgsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE3MzM3LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MTU0MSwuNzY4MTMsLjg1NTc2LC44MDU5MSwuODA3MjksLjk0Mjk5LC43NzUxMiwuODM2NTUsLjg2NTIzLC45MjIyMiwuOTg2MjEsLjcxNzQzLC44MTY5OCwuNzk3MjYsLjk4NTU4LC45MjIyMiwuOTA2MzcsLjgzODA5LC45MDYzNywuODA3MjksLjc2NDYzLC44NjI3NSwuOTA2OTksLjkxNjA1LC45MTU0LC44NTMwOCwuODU0NTgsLjkwNTMxLC45NDI5MiwxLjIxMjk2LC45NDI5MiwxLjAyMDU4LC44OTkwMywxLjE4NjE2LC45OTYxMywuOTE2NzcsLjc4MjE2LC45MTY3NywuOTAwODMsLjk4Nzk2LC45MTM1LC45MjE2OCwuOTUzODEsLjk4OTgxLC45NTI5OCwuOTUzODEsLjkzNDU5LC45MjE2OCwuOTE1MTMsLjkyMDA0LC45MTY3NywuOTUwNzcsLjc0OCwxLjA0NTAyLC45MTY3NywuOTIwNjEsLjk0MjM2LC44OTU0NCwuODkzNjQsLjksLjgwNjg3LC44NTc4LC44MDY4NywxLjAyMDU4LC44MDc3OSwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjg1NzgsLjk5OTczLDEuMTg2MTYsLjkxMzM5LDEuMDgwNzQsLjgyODkxLDEuMDIwNTgsLjU1NTA5LC43MTUyNiwuODkwMjIsMS4wODU5NSwxLDEsMS4xODYxNiwxLC45NjczNiwuOTM1ODIsMS4xODYxNiwxLDEuMDQ4NjQsLjgyNzExLC45OTA0MywuOTkwNDMsLjk5MDQzLC43MTU0MSwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODQ1LC44MDcyOSwuNzc1MTIsLjc3NTEyLC43NzUxMiwuNzc1MTIsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45NTk2MSwuOTIyMjIsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LC45MDYzNywxLjAyMDU4LC45MDI1MSwuOTA2OTksLjkwNjk5LC45MDY5OSwuOTA2OTksLjg1NDU4LC44MzY1OSwuOTQ5NTEsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjg1ODExLC43ODIxNiwuOTAwODMsLjkwMDgzLC45MDA4MywuOTAwODMsLjk1MzgxLC45NTM4MSwuOTUzODEsLjk1MzgxLC45MTM1LC45MjE2OCwuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsLjkxNTEzLDEuMDg1OTUsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC45MTY3NywuODkzNjQsLjkyMzMyLC44OTM2NCwuODU1NzYsLjk5NjEzLC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC45NDI5OSwuNzY3ODMsLjk1OTYxLC45MTY3NywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwuODY1MjMsLjkxMzUsMSwxLC45MjIyMiwuOTIxNjgsLjkyMjIyLC45MjE2OCwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjg2MDM2LC45NzA5NiwuNzE3NDMsLjk4OTgxLDEsMSwuOTUyOTgsLjc5NzI2LC45NTM4MSwxLDEsLjc5NzI2LC42ODk0LC43OTcyNiwuNzQzMjEsLjgxNjkxLDEuMDAwNiwuOTIyMjIsLjkyMTY4LDEsMSwuOTIyMjIsLjkyMTY4LC43OTQ2NCwuOTIwOTgsLjkyMTY4LC45MDYzNywuOTE1MTMsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDksLjg3NTE0LC44MDcyOSwuOTUwNzcsMSwxLC44MDcyOSwuOTUwNzcsLjc2NDYzLC43NDgsLjc2NDYzLC43NDgsMSwxLC43NjQ2MywuNzQ4LDEsMSwuODYyNzUsLjcyNjUxLC44NjI3NSwxLjA0NTAyLC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MTU0LC45NDIzNiwuODU0NTgsLjg5MzY0LC44NTQ1OCwuOTA1MzEsLjksLjkwNTMxLC45LC45MDUzMSwuOSwxLC45NzI3NiwuODU1NzYsLjk5NjEzLC44NDUsLjg1ODExLC45MDI1MSwuOTE2NzcsMSwxLC44NjI3NSwxLjA0NTAyLDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMDA4OTksMS4zMDYyOCwuODU1NzYsLjgwMTc4LC42Njg2MiwuNzkyNywuNjkzMjMsLjg4MTI3LC43MjQ1OSwuODk3MTEsLjk1MzgxLC44NTU3NiwuODA1OTEsLjc4MDUsLjk0NzI5LC43NzUxMiwuOTA1MzEsLjkyMjIyLC45MDYzNywuOTg2MjEsLjgxNjk4LC45MjY1NSwuOTg1NTgsLjkyMjIyLC44NTM1OSwuOTA2MzcsLjkwOTc2LC44MzgwOSwuOTQ1MjMsLjg2Mjc1LC44MzUwOSwuOTMxNTcsLjg1MzA4LC44MzM5MiwuOTIzNDYsLjk4NjIxLC44MzUwOSwuOTI4ODYsLjkxMzI0LC45MjE2OCwuOTUzODEsLjkwNjQ2LC45Mjg4NiwuOTA1NTcsLjg2ODQ3LC45MDI3NiwuOTEzMjQsLjg2ODQyLC45MjE2OCwuOTk1MzEsLjk1MzgxLC45MjI0LC44NTQwOCwuOTI2OTksLjg2ODQ3LDEuMDA1MSwuOTE1MTMsLjgwNDg3LC45MzQ4MSwxLC44ODE1OSwxLjA1MjE0LC45MDY0NiwuOTczNTUsLjgxNTM5LC44OTM5OCwuODU5MjMsLjk1MzgxLC45MDY0NiwuOTE1MTMsLjkwNjQ2LC44NTkyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MTc4MiwuOTE3ODIsLjkxNzgyLDEsLjg5NiwuODk2LC44OTYsLjkzMzIsLjkzMzIsLjk1OTczLDEsMS4yNiwxLDEsLjgwNDc5LC44MDE3OCwxLDEsLjg1NjMzLDEsMSwxLDEsLjk3Mjc2LDEsMSwxLC42OTgsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE0NTQyLDEsLjc5MTk5LC43ODY5NCwxLjAyMDU4LDEuMDM0OTMsMS4wNTQ4NiwxLDEsMS4yMzAyNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjIwMDA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuTXlyaWFkUHJvSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY1NTA3LC44NDk0MywuODU2MzksLjg4NDY1LC44ODQ2NSwuODY5MzYsLjg4MzA3LC44Njk0OCwuODUyODMsLjg1MjgzLDEuMDYzODMsMS4wMjA1OCwuNzU5NDUsLjkyMTksLjc1OTQ1LDEuMTczMzcsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC43NTk0NSwuNzU5NDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjY5MDQ2LC43MDkyNiwuODUxNTgsLjc3ODEyLC43Njg1MiwuODk1OTEsLjcwNDY2LC43NjEyNSwuODAwOTQsLjg2ODIyLC44Mzg2NCwuNzI4LC43NzIxMiwuNzk0NzUsLjkzNjM3LC44NzUxNCwuODU4OCwuNzYwMTMsLjg1ODgsLjcyNDIxLC42OTg2NiwuNzc1OTgsLjg1OTkxLC44MDgxMSwuODc4MzIsLjc4MTEyLC43NzUxMiwuODU2MiwxLjAyMjIsMS4xODQxNywxLjAyMjIsMS4yNzAxNCwuODk5MDMsMS4xNTAxMiwuOTM4NTksLjk0Mzk5LC44NDYsLjk0Mzk5LC44MTQ1MywxLjAxODYsLjk0MjE5LC45NjAxNywxLjAzMDc1LDEuMDIxNzUsLjkxMiwxLjAzMDc1LC45Njk5OCwuOTYwMTcsLjkzODU5LC45NDM5OSwuOTQzOTksLjk1NDkzLC43NDYsMS4xMjY1OCwuOTQ1NzgsLjkxLC45NzksLjg4MiwuODgyLC44MywuODUwMzQsLjgzNTM3LC44NTAzNCwxLjAyMDU4LC43MDg2OSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjgzNTM3LC45MDA4MywxLjE1MDEyLC45MTYxLC45NDU2NSwuNzM1NDEsMS4wMjA1OCwuNTM2MDksLjY5MzUzLC43OTUxOSwxLjA4NTk1LDEsMSwxLjE1MDEyLDEsLjkxOTc0LC43NTk0NSwxLjE1MDEyLDEsLjk0NDYsLjczMzYxLC45MDA1LC45MDA1LC45MDA1LC42Mjg2NCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuNzczLC43Njg1MiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuNzA0NjYsLjgzODY0LC44Mzg2NCwuODM4NjQsLjgzODY0LC45MDU2MSwuODc1MTQsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsMS4wMjA1OCwuODU3NTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjg1OTkxLC43NzUxMiwuNzYwMTMsLjg4MDc1LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC44MDc1LC44NDYsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgxNDUzLC44MjQyNCwuODI0MjQsLjgyNDI0LC44MjQyNCwuOTI3OCwuOTYwMTcsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwxLjA4NTk1LC44NTYyLC45NDU3OCwuOTQ1NzgsLjk0NTc4LC45NDU3OCwuODgyLC45NDU3OCwuODgyLC44NTE1OCwuOTM4NTksLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC44OTU5MSwuODU0NCwuOTA1NjEsLjk0Mzk5LC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuODAwOTQsLjk0MjE5LC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwxLDEsLjg2ODIyLC45NjAxNywuODY4MjIsLjk2MDE3LC44Mzg2NCwuODI0MjQsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwxLjAzMDc1LC44Mzg2NCwuODI0MjQsLjgxNDAyLDEuMDI3MzgsLjcyOCwxLjAyMTc1LDEsMSwuOTEyLC43OTQ3NSwxLjAzMDc1LDEsMSwuNzk0NzUsLjgzOTExLC43OTQ3NSwuNjYyNjYsLjgwNTUzLDEuMDY2NzYsLjg3NTE0LC45NjAxNywxLDEsLjg3NTE0LC45NjAxNywuODY4NjUsLjg3Mzk2LC45NjAxNywuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NTg4LC45Mzg1OSwuODY3LC44NDc1OSwuNzI0MjEsLjk1NDkzLDEsMSwuNzI0MjEsLjk1NDkzLC42OTg2NiwuNzQ2LC42OTg2NiwuNzQ2LDEsMSwuNjk4NjYsLjc0NiwxLDEsLjc3NTk4LC44ODQxNywuNzc1OTgsMS4xMjY1OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODc4MzIsLjk3OSwuNzc1MTIsLjg4MiwuNzc1MTIsLjg1NjIsLjgzLC44NTYyLC44MywuODU2MiwuODMsMSwuODg0NjUsLjg1MTU4LC45Mzg1OSwuNzczLC44MDc1LC44NTc1MSwuODU2MiwxLDEsLjc3NTk4LDEuMTI2NTgsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUzMTMsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4wODEwNiwxLjAzOTAxLC44NTE1OCwuNzcwMjUsLjYyMjY0LC43NjQ2LC42NTM1MSwuODYwMjYsLjY5NDYxLC44OTk0NywxLjAzMDc1LC44NTE1OCwuNzc4MTIsLjc2NDQ5LC44ODgzNiwuNzA0NjYsLjg1NjIsLjg2ODIyLC44NTg4LC44Mzg2NCwuNzcyMTIsLjg1MzA4LC45MzYzNywuODc1MTQsLjgyMzUyLC44NTg4LC44NTcwMSwuNzYwMTMsLjg5MDU4LC43NzU5OCwuODE1NiwuODI1NjUsLjc4MTEyLC43Nzg5OSwuODkzODYsLjgzODY0LC44MTU2LC45NDg2LC45MjM4OCwuOTYxODYsMS4wMzA3NSwuOTExMjMsLjk0ODYsLjkzMjk4LC44NzgsLjkzOTQyLC45MjM4OCwuODQ1OTYsLjk2MTg2LC45NTExOSwxLjAzMDc1LC45MjIsLjg4Nzg3LC45NTgyOSwuODgsLjkzNTU5LC45Mzg1OSwuNzg4MTUsLjkzNzU4LDEsLjg5MjE3LDEuMDM3MzcsLjkxMTIzLC45Mzk2OSwuNzc0ODcsLjg1NzY5LC44Njc5OSwxLjAzMDc1LC45MTEyMywuOTM4NTksLjkxMTIzLC44Njc5OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC44NzMyMSwuODczMjEsLjg3MzIxLDEsMS4wMjcsMS4wMjcsMS4wMjcsLjg2ODQ3LC44Njg0NywuNzkxMjEsMSwxLjEyNCwxLDEsLjczNTcyLC43MzU3MiwxLDEsLjg1MDM0LDEsMSwxLDEsLjg4NDY1LDEsMSwxLC42NjksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0ODI4LDEsLjc0OTQ4LC43NTE4NywxLjAyMDU4LC45ODM5MSwxLjAyMTE5LDEsMSwxLjA2MjMzLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDUyMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSx0Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNzYzMDUsLjgyNzg0LC45NDkzNSwuODkzNjQsLjkyMjQxLC44OTA3MywuOTA3MDYsLjk4NDcyLC44NTI4MywuODUyODMsMS4wNjY0LDEuMDIwNTgsLjc0NTA1LC45MjE5LC43NDUwNSwxLjIzNDU2LC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuNzQ1MDUsLjc0NTA1LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MzAwMiwuNzI2MDEsLjkxNzU1LC44MTI2LC44MDMxNCwuOTIyMjIsLjczNzY0LC43OTcyNiwuODMwNTEsLjkwMjg0LC44NjAyMywuNzQsLjgxMjYsLjg0ODY5LC45NjUxOCwuOTExMTUsLjg4NTgsLjc5NzYxLC44ODU4LC43NDQ5OCwuNzM5MTQsLjgxMzYzLC44OTU5MSwuODM2NTksLjg5NjMzLC44NTYwOCwuODExMSwuOTA1MzEsMS4wMjIyLDEuMjI3MzYsMS4wMjIyLDEuMjcwMTQsLjg5OTAzLC45MDA4OCwuODY2NjcsMS4wMjMxLC44OTYsMS4wMTQxMSwuOTAwODMsMS4wNTA5OSwxLjAwNTEyLC45OTc5MywxLjA1MzI2LDEuMDkzNzcsLjkzOCwxLjA2MjI2LDEuMDAxMTksLjk5NzkzLC45ODcxNCwxLjAyMzEsMS4wMTIzMSwuOTgxOTYsLjc5MiwxLjE5MTM3LC45OTA3NCwuOTYyLDEuMDE5MTUsLjkyNiwuOTQyLC44NTYsLjg1MDM0LC45MjAwNiwuODUwMzQsMS4wMjA1OCwuNjkwNjcsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjAwNiwuOTMzMiwuOTAwODgsLjkxODgyLC45MzQ4NCwuNzUzMzksMS4wMjA1OCwuNTY4NjYsLjU0MzI0LC43OTUxOSwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTUzMjUsLjc0NTA1LC45MDA4OCwxLC45NzE5OCwuNzUzMzksLjkxMDA5LC45MTAwOSwuOTEwMDksLjY2NDY2LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC43ODgsLjgwMzE0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC43Mzc2NCwuODYwMjMsLjg2MDIzLC44NjAyMywuODYwMjMsLjkyOTE1LC45MTExNSwuODg1OCwuODg1OCwuODg1OCwuODg1OCwuODg1OCwxLjAyMDU4LC44ODU4LC44OTU5MSwuODk1OTEsLjg5NTkxLC44OTU5MSwuODExMSwuNzk2MTEsLjg5NzEzLC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjkzNiwuODk2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuODQyMjQsLjg0MjI0LC44NDIyNCwuODQyMjQsLjk3Mjc2LC45OTc5MywuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsLjk4NzE0LDEuMDg1OTUsLjg5ODc2LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45OTA3NCwuOTQyLDEuMDIzMSwuOTQyLC45MTc1NSwuODY2NjcsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC45MjIyMiwuOTMzNzIsLjkyOTE1LDEuMDE0MTEsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLDEsMSwuOTAyODQsLjk5NzkzLC45MDk3NiwuOTk3OTMsLjg2MDIzLC44NDIyNCwuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLDEuMDUzMjYsLjg2MDIzLC44NDIyNCwuODI4NzMsMS4wNzQ2OSwuNzQsMS4wOTM3NywxLDEsLjkzOCwuODQ4NjksMS4wNjIyNiwxLDEsLjg0ODY5LC44MzcwNCwuODQ4NjksLjgxNDQxLC44NTU4OCwxLjA4OTI3LC45MTExNSwuOTk3OTMsMSwxLC45MTExNSwuOTk3OTMsLjkxODg3LC45MDk5MSwuOTk3OTMsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODg1OCwuOTg3MTQsLjg5NCwuOTE0MzQsLjc0NDk4LC45ODE5NiwxLDEsLjc0NDk4LC45ODE5NiwuNzM5MTQsLjc5MiwuNzM5MTQsLjc5MiwxLDEsLjczOTE0LC43OTIsMSwxLC44MTM2MywuOTA0LC44MTM2MywxLjE5MTM3LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTYzMywxLjAxOTE1LC44MTExLC45NDIsLjgxMTEsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsMSwuOTIyNDEsLjkxNzU1LC44NjY2NywuNzg4LC44NjkzNiwuODg1OCwuODk4NzYsMSwxLC44MTM2MywxLjE5MTM3LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDM4OCwxLjAzOTAxLC45MjEzOCwuNzgxMDUsLjcxNTQsLjg2MTY5LC44MDUxMywuOTQwMDcsLjgyNTI4LC45ODYxMiwxLjA2MjI2LC45MTc1NSwuODEyNiwuODE4ODQsLjkyODE5LC43Mzc2NCwuOTA1MzEsLjkwMjg0LC44ODU4LC44NjAyMywuODEyNiwuOTExNzIsLjk2NTE4LC45MTExNSwuODMwODksLjg4NTgsLjg3NzkxLC43OTc2MSwuODkyOTcsLjgxMzYzLC44ODE1NywuODk5OTIsLjg1NjA4LC44MTk5MiwuOTQzMDcsLjg2MDIzLC44ODE1NywuOTUzMDgsLjk4Njk5LC45OTc5MywxLjA2MjI2LC45NTgxNywuOTUzMDgsLjk3MzU4LC45MjgsLjk4MDg4LC45ODY5OSwuOTI3NjEsLjk5NzkzLC45NjAxNywxLjA2MjI2LC45ODYsLjk0NCwuOTU5NzgsLjkzOCwuOTY3MDUsLjk4NzE0LC44MDQ0MiwuOTg5NzIsMSwuODk3NjIsMS4wNDU1MiwuOTU4MTcsLjk5MDA3LC44NzA2NCwuOTE4NzksLjg4ODg4LDEuMDYyMjYsLjk1ODE3LC45ODcxNCwuOTU4MTcsLjg4ODg4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuOTIxOSwxLC44OTkwMywxLDEsMSwuOTMxNzMsLjkzMTczLC45MzE3MywxLDEuMDYzMDQsMS4wNjMwNCwxLjA2OTA0LC44OTkwMywuODk5MDMsLjgwNTQ5LDEsMS4xNTYsMSwxLC43NjU3NSwuNzY1NzUsMSwxLC43MjQ1OCwxLDEsMSwxLC45MjI0MSwxLDEsMSwuNjE5LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNzI1NywxLC43NDcwNSwuNzExMTksMS4wMjA1OCwxLjAyNCwxLjAyMTE5LDEsMSwxLjE1MzYsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTYzOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0Lk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TZWdvZXVpUmVndWxhck1ldHJpY3M9dC5TZWdvZXVpUmVndWxhckZhY3RvcnM9dC5TZWdvZXVpSXRhbGljTWV0cmljcz10LlNlZ29ldWlJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRGYWN0b3JzPXZvaWQgMCx0LlNlZ29ldWlCb2xkRmFjdG9ycz1bMS43NjczOCwxLDEsLjk5Mjk3LC45ODI0LDEuMDQwMTYsMS4wNjQ5NywxLjAzNDI0LC45NzUyOSwxLjE3NjQ3LDEuMjMyMDMsMS4xMDg1LDEuMTA4NSwxLjE2OTM5LDEuMjEwNywuOTc1NCwxLjIxNDA4LC45NzU0LDEuNTk1NzgsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwuODEzNzgsLjgxMzc4LDEuMjEwNywxLjIxMDcsMS4yMTA3LC43MTcwMywuOTc4NDcsLjk3MzYzLC44ODc3NiwuODY0MSwxLjAyMDk2LC43OTc5NSwuODUxMzIsLjkxNCwxLjA2MDg1LDEuMTQwNiwuODAwNywuODk4NTgsLjgzNjkzLDEuMTQ4ODksMS4wOTM5OCwuOTc0ODksLjkyMDk0LC45NzQ4OSwuOTAzOTksLjg0MDQxLC45NTkyMywxLjAwMTM1LDEsMS4wNjQ2NywuOTgyNDMsLjkwOTk2LC45OTM2MSwxLjEwODUsMS41Njk0MiwxLjEwODUsMS4yMTA3LC43NDYyNywuOTQyODIsLjk2NzUyLDEuMDE1MTksLjg2MzA0LDEuMDEzNTksLjk3Mjc4LDEuMTUxMDMsMS4wMTM1OSwuOTg1NjEsMS4wMjI4NSwxLjAyMjg1LDEuMDA1MjcsMS4wMjI4NSwxLjAzMDIsLjk5MDQxLDEuMDAwOCwxLjAxNTE5LDEuMDEzNTksMS4wMjI1OCwuNzkxMDQsMS4xNjg2MiwuOTkwNDEsLjk3NDU0LDEuMDI1MTEsLjk5Mjk4LC45Njc1MiwuOTU4MDEsLjk0ODU2LDEuMTY1NzksLjk0ODU2LDEuMjEwNywuOTgyNCwxLjAzNDI0LDEuMDM0MjQsMSwxLjAzNDI0LDEuMTY1NzksLjg3MjcsMS4zODcxLDEuMTg2MjIsMS4xMDgxOCwxLjA0NDc4LDEuMjEwNywxLjE4NjIyLC43NTE1NSwuOTQ5OTQsMS4yODgyNiwxLjIxNDA4LDEuMjE0MDgsLjkxMDU2LDEsLjkxNTcyLC45NzU0LC42NDY2MywxLjE4MzI4LDEuMjQ4NjYsMS4wNDQ3OCwxLjE0MTY5LDEuMTU3NDksMS4xNzM4OSwuNzE3MDMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjkzNTA2LC44NjQxLC43OTc5NSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wMjA5NiwxLjA5Mzk4LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsMS4yMTA3LC45NzQ4OSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MDk5NiwuOTIwOTQsMS4wMjc5OCwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTMxMzYsLjg2MzA0LC45NzI3OCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LC45NzEyMiwuOTkwNDEsMSwxLDEsMSwxLDEuMjg4MjYsMS4wMDA4LC45OTA0MSwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTY3NTIsMS4wMTUxOSwuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LDEuMDIwOTYsMS4wMzA1NywxLjAyMDk2LDEuMDM1MTcsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LDEsMSwxLjA2MDg1LC45ODU2MSwxLjA2MDg1LDEuMDA4NzksMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsLjk3MTM4LDEuMDg2OTIsLjgwMDcsMS4wMjI4NSwxLDEsMS4wMDUyNywuODM2OTMsMS4wMjI4NSwxLDEsLjgzNjkzLC45NDU1LC44MzY5MywuOTA0MTgsLjgzNjkzLDEuMTMwMDUsMS4wOTM5OCwuOTkwNDEsMSwxLDEuMDkzOTgsLjk5MDQxLC45NjY5MiwxLjA5MjUxLC45OTA0MSwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTM5OTQsLjk3OTMxLC45MDM5OSwxLjAyMjU4LDEsMSwuOTAzOTksMS4wMjI1OCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LDEsMSwuOTU5MjMsMS4wNzAzNCwuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwuOTA5OTYsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsMS4wNzczMywxLjAzNDI0LC45NzM2MywuOTY3NTIsLjkzNTA2LC45MzEzNiwuOTc0ODksMS4wMDA4LDEsMSwuOTU5MjMsMS4xNjg2MiwxLjE1MTAzLDEuMTUxMDMsMS4wMTE3MywxLjAzOTU5LC43NTk1MywuODEzNzgsLjc5OTEyLDEuMTUxMDMsMS4yMTk5NCwuOTUxNjEsLjg3ODE1LDEuMDExNDksLjgxNTI1LC43Njc2LC45ODE2NywxLjAxMTM0LDEuMDI1NDYsLjg0MDk3LDEuMDMwODksMS4xODEwMiwuOTczNjMsLjg4Nzc2LC44NTEzNCwuOTc4MjYsLjc5Nzk1LC45OTM2MSwxLjA2MDg1LC45NzQ4OSwxLjE0MDYsLjg5ODU4LDEuMDM4OCwxLjE0ODg5LDEuMDkzOTgsLjg2MDM5LC45NzQ4OSwxLjA1OTUsLjkyMDk0LC45NDc5MywuOTU5MjMsLjkwOTk2LC45OTM0NiwuOTgyNDMsMS4wMjExMiwuOTU0OTMsMS4xNDA2LC45MDk5NiwxLjAzNTc0LDEuMDI1OTcsMS4wMDA4LDEuMTgxMDIsMS4wNjYyOCwxLjAzNTc0LDEuMDE5MiwxLjAxOTMyLDEuMDA4ODYsLjk3NTMxLDEuMDEwNiwxLjAwMDgsMS4xMzE4OSwxLjE4MTAyLDEuMDIyNzcsLjk4NjgzLDEuMDAxNiwuOTk1NjEsMS4wNzIzNywxLjAwMDgsLjkwNDM0LC45OTkyMSwuOTM4MDMsLjg5NjUsMS4yMzA4NSwxLjA2NjI4LDEuMDQ5ODMsLjk2MjY4LDEuMDQ5OSwuOTg0MzksMS4xODEwMiwxLjA2NjI4LDEuMDAwOCwxLjA2NjI4LC45ODQzOSwuNzk3OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTQ2NiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTcyNzgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMjA2NSwxLDEsMSwxLDEsMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLDEsMS4yMTQwOCwuODk5MDMsMSwxLC43NTE1NSwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43MzA0NywuNzMwNDcsMS4yMDY0MiwuOTEyMTEsMS4yNTYzNSwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMTI0NTQsLjkzNTAzLDEuMDM0MjQsMS4xOTY4NywxLjAzNDI0LDEsMSwxLC43NzEsMSwxLDEuMTU3NDksMS4xNTc0OSwxLjE1NzQ5LDEuMTA5NDgsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4xNjg5NywxLC45NjA4NSwuOTAxMzcsMS4yMTA3LDEuMTg0MTYsMS4xMzk3MywuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTE3MiwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4ODc0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4wOTE5MywxLjA5MTkzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LlNlZ29ldWlCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjAzOTU5LDEuMDQwMTYsMS4wMjgwOSwxLjAzNiwuOTc2MzksMS4xMDk1MywxLjIzMjAzLDEuMTExNDQsMS4xMTE0NCwxLjE2OTM5LDEuMjEyMzcsLjk3NTQsMS4yMTI2MSwuOTc1NCwxLjU5NzU0LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LC44MTM3OCwuODEzNzgsMS4yMTIzNywxLjIxMjM3LDEuMjEyMzcsLjczNTQxLC45Nzg0NywuOTczNjMsLjg5NzIzLC44Nzg5NywxLjA0MjYsLjc5NDI5LC44NTI5MiwuOTExNDksMS4wNTgxNSwxLjE0MDYsLjc5NjMxLC45MDEyOCwuODM4NTMsMS4wNDM5NiwxLjEwNjE1LC45NzU1MiwuOTQ0MzYsLjk3NTUyLC44ODY0MSwuODA1MjcsLjk2MDgzLDEuMDAxMzUsMSwxLjA2Nzc3LC45ODE3LC45MTE0MiwuOTkzNjEsMS4xMTE0NCwxLjU3MjkzLDEuMTExNDQsMS4yMTIzNywuNzQ2MjcsMS4zMTgxOCwxLjA2NTg1LC45NzA0MiwuODMwNTUsLjk3MDQyLC45MzUwMywxLjEyNjEsLjk3MDQyLC45NzkyMiwxLjE0MjM2LC45NDU1MiwxLjAxMDU0LDEuMTQyMzYsMS4wMjQ3MSwuOTc5MjIsLjk0MTY1LC45NzA0MiwuOTcwNDIsMS4wMjc2LC43ODkyOSwxLjEyNjEsLjk3OTIyLC45NTg3NCwxLjAyMTk3LC45ODUwNywuOTY3NTIsLjk3MTY4LC45NTEwNywxLjE2NTc5LC45NTEwNywxLjIxMjM3LDEuMDM5NTksMS4wMzYsMS4wMzYsMSwxLjAzNiwxLjE2NTc5LC44NzM1NywxLjMxODE4LDEuMTg3NTQsMS4yNjc4MSwxLjA1MzU2LDEuMjEyMzcsMS4xODYyMiwuNzk0ODcsLjk0OTk0LDEuMjkwMDQsMS4yNDA0NywxLjI0MDQ3LDEuMzE4MTgsMSwuOTE0ODQsLjk3NTQsMS4zMTgxOCwxLjEzNDksMS4yNDg2NiwxLjA1MzU2LDEuMTM5MzQsMS4xNTU3NCwxLjE3Mzg5LC43MzU0MSwuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTQzODUsLjg3ODk3LC43OTQyOSwuNzk0MjksLjc5NDI5LC43OTQyOSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wNDI2LDEuMTA2MTUsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwxLjIxMjM3LC45NzU1MiwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MTE0MiwuOTQ0MzYsLjk4NzIxLDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LC45NjcwNSwuODMwNTUsLjkzNTAzLC45MzUwMywuOTM1MDMsLjkzNTAzLDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsLjkzMTI1LC45NzkyMiwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LDEuMjkwMDQsLjk0MTY1LC45NzkyMiwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTY3NTIsLjk3MDQyLC45Njc1MiwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LDEuMDQyNiwxLjAwMzMsMS4wNDI2LC45NzA0MiwuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsMSwxLDEuMDU4MTUsLjk3OTIyLDEuMDU4MTUsLjk3OTIyLDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LC45NzQ0MSwxLjA0MzAyLC43OTYzMSwxLjAxNTgyLDEsMSwxLjAxMDU0LC44Mzg1MywxLjE0MjM2LDEsMSwuODM4NTMsMS4wOTEyNSwuODM4NTMsLjkwNDE4LC44Mzg1MywxLjE5NTA4LDEuMTA2MTUsLjk3OTIyLDEsMSwxLjEwNjE1LC45NzkyMiwxLjAxMDM0LDEuMTA0NjYsLjk3OTIyLC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45MTYwMiwuOTE5ODEsLjg4NjQxLDEuMDI3NiwxLDEsLjg4NjQxLDEuMDI3NiwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LDEsMSwuOTYwODMsMS4wNTQwMywuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwuOTExNDIsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsMS4yMzE5OSwxLjAzNiwuOTczNjMsMS4wNjU4NSwuOTQzODUsLjk2NzA1LC45NzU1MiwuOTQxNjUsMSwxLC45NjA4MywxLjEyNjEsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsLjk1MTYxLDEuMjcxMjYsMS4wMDgxMSwuODMyODQsLjc3NzAyLC45OTEzNywuOTUyNTMsMS4wMzQ3LC44NjE0MiwxLjA3MjA1LDEuMTQyMzYsLjk3MzYzLC44OTcyMywuODY4NjksMS4wOTgxOCwuNzk0MjksLjk5MzYxLDEuMDU4MTUsLjk3NTUyLDEuMTQwNiwuOTAxMjgsMS4wNjY2MiwxLjA0Mzk2LDEuMTA2MTUsLjg0OTE4LC45NzU1MiwxLjA0Njk0LC45NDQzNiwuOTgwMTUsLjk2MDgzLC45MTE0MiwxLjAwMzU2LC45ODE3LDEuMDE5NDUsLjk4OTk5LDEuMTQwNiwuOTExNDIsMS4wNDk2MSwuOTg5OCwxLjAwNjM5LDEuMTQyMzYsMS4wNzUxNCwxLjA0OTYxLC45OTYwNywxLjAyODk3LDEuMDA4LC45ODk4LC45NTEzNCwxLjAwNjM5LDEuMTExMjEsMS4xNDIzNiwxLjAwNTE4LC45Nzk4MSwxLjAyMTg2LDEsMS4wODU3OCwuOTQxNjUsLjk5MzE0LC45ODM4NywuOTMwMjgsLjkzMzc3LDEuMzUxMjUsMS4wNzUxNCwxLjEwNjg3LC45MzQ5MSwxLjA0MjMyLDEuMDAzNTEsMS4xNDIzNiwxLjA3NTE0LC45NDE2NSwxLjA3NTE0LDEuMDAzNTEsLjc5NDI5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDkwOTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkzNTAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NjYwOSwxLDEsMSwxLDEsMSwxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLDEsMS4yMTI2MSwuODk5MDMsMSwxLC43NTE1NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43Mjk1OSwuNzI5NTksMS4yMDUwMiwuOTE0MDYsMS4yNjUxNCwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMDkxMjUsLjkzMzI3LDEuMDMzMzYsMS4xNjU0MSwxLjAzNiwxLDEsMSwuNzcxLDEsMSwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LC44NjM2NCwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYyMjQsMSwxLDEuMTY3OTgsMSwuOTYwODUsLjkwMDY4LDEuMjEyMzcsMS4xODQxNiwxLjEzOTA0LC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMzM5LDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg3NzUsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEzMjY5LDEuMTMyNjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfSx0LlNlZ29ldWlJdGFsaWNGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTg5NDYsMS4xNDc2MywxLjA1MzY1LDEuMDYyMzQsLjk2OTI3LC45MjU4NiwxLjE1MzczLDEuMTg0MTQsLjkxMzQ5LC45MTM0OSwxLjA3NDAzLDEuMTczMDgsLjc4MzgzLDEuMjAwODgsLjc4MzgzLDEuNDI1MzEsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODM4MywuNzgzODMsMS4xNzMwOCwxLjE3MzA4LDEuMTczMDgsLjc3MzQ5LC45NDU2NSwuOTQ3MjksLjg1OTQ0LC44ODUwNiwuOTg1OCwuNzQ4MTcsLjgwMDE2LC44ODQ0OSwuOTgwMzksLjk1NzgyLC42OTIzOCwuODk4OTgsLjgzMjMxLC45ODE4MywxLjAzOTg5LC45NjkyNCwuODYyMzcsLjk2OTI0LC44MDU5NSwuNzQ1MjQsLjg2MDkxLC45NTQwMiwuOTQxNDMsLjk4NDQ4LC44ODU4LC44MzA4OSwuOTMyODUsMS4wOTQ5LDEuMzkwMTYsMS4wOTQ5LDEuNDU5OTQsLjc0NjI3LDEuMDQ4MzksLjk3NDU0LC45NzQ1NCwuODcyMDcsLjk3NDU0LC44NzUzMywxLjA2MTUxLC45NzQ1NCwxLjAwMTc2LDEuMTY0ODQsMS4wODEzMiwuOTgwNDcsMS4xNjQ4NCwxLjAyOTg5LDEuMDEwNTQsLjk2MjI1LC45NzQ1NCwuOTc0NTQsMS4wNjU5OCwuNzkwMDQsMS4xNjM0NCwxLjAwMzUxLC45NDYyOSwuOTk3MywuOTEwMTYsLjk2Nzc3LC45MDQzLC45MTA4MiwuOTI0ODEsLjkxMDgyLDEuMTczMDgsLjk1NzQ4LC45NjkyNywuOTY5MjcsMSwuOTY5MjcsLjkyNDgxLC44MDU5NywxLjA0ODM5LDEuMjMzOTMsMS4xNzgxLC45MjQ1LDEuMTczMDgsMS4yMDgwOCwuNjMyMTgsLjk0MjYxLDEuMjQ4MjIsMS4wOTk3MSwxLjA5OTcxLDEuMDQ4MzksMSwuODUyNzMsLjc4MDMyLDEuMDQ4MzksMS4wOTk3MSwxLjIyMzI2LC45MjQ1LDEuMDk4MzYsMS4xMzUyNSwxLjE1MjIyLC43MDQyNCwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuODU0OTgsLjg4NTA2LC43NDgxNywuNzQ4MTcsLjc0ODE3LC43NDgxNywuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk4NTgsMS4wMzk4OSwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTczMDgsLjk2OTI0LC45NTQwMiwuOTU0MDIsLjk1NDAyLC45NTQwMiwuODMwODksLjg2MjM3LC44ODQwOSwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTI5MTYsLjg3MjA3LC44NzUzMywuODc1MzMsLjg3NTMzLC44NzUzMywuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTMxNDYsLjkzODU0LDEuMDEwNTQsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LC45NjIyNSwxLjI0ODIyLC44NzYxLDEuMDAzNTEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsLjk2Nzc3LC45NzQ1NCwuOTY3NzcsLjk0NzI5LC45NzQ1NCwuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuOTg1OCwuOTUzOTEsLjk4NTgsLjk3NDU0LC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuODg0NDksLjk3NDU0LC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwxLDEsLjk4MDM5LDEuMDAxNzYsLjk4MDM5LDEuMDAxNzYsLjk1NzgyLC45MzE0NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLDEuMTY0ODQsLjk1NzgyLC45MzE0NiwuODQ0MjEsMS4xMjc2MSwuNjkyMzgsMS4wODEzMiwxLDEsLjk4MDQ3LC44MzIzMSwxLjE2NDg0LDEsMSwuODQ3MjMsMS4wNDg2MSwuODQ3MjMsLjc4NzU1LC44MzIzMSwxLjIzNzM2LDEuMDM5ODksMS4wMTA1NCwxLDEsMS4wMzk4OSwxLjAxMDU0LC45ODU3LDEuMDM4NDksMS4wMTA1NCwuOTY5MjQsLjk2MjI1LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTIzODMsLjkwMTcxLC44MDU5NSwxLjA2NTk4LDEsMSwuODA1OTUsMS4wNjU5OCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LDEsMSwuODYwOTEsMS4wMjc1OSwuODU3NzEsMS4xNjM0NCwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTg0NDgsLjk5NzMsLjgzMDg5LC45Njc3NywuODMwODksLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywuOTMyODUsLjkwNDMsMS4zMTg2OCwuOTY5MjcsLjk0NzI5LC45NzQ1NCwuODU0OTgsLjkyOTE2LC45NjkyNCwuODc2MSwxLDEsLjg2MDkxLDEuMTYzNDQsMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksLjgxOTY1LC44MTk2NSwuOTQ3MjksLjc4MDMyLC43MTAyMiwuOTA4ODMsLjg0MTcxLC45OTg3NywuNzc1OTYsMS4wNTczNCwxLjIsLjk0NzI5LC44NTk0NCwuODI3OTEsLjk2MDcsLjc0ODE3LC45MzI4NSwuOTgwMzksLjk2OTI0LC45NTc4MiwuODk4OTgsLjk4MzE2LC45ODE4MywxLjAzOTg5LC43ODYxNCwuOTY5MjQsLjk3NjQyLC44NjIzNywuODYwNzUsLjg2MDkxLC44MzA4OSwuOTAwODIsLjg4NTgsLjk3Mjk2LDEuMDEyODQsLjk1NzgyLC44MzA4OSwxLjA5NzYsMS4wNCwxLjAzMzQyLDEuMiwxLjA2NzUsMS4wOTc2LC45ODIwNSwxLjAzODA5LDEuMDUwOTcsMS4wNCwuOTUzNjQsMS4wMzM0MiwxLjA1NDAxLDEuMiwxLjAyMTQ4LDEuMDExOSwxLjA0NzI0LDEuMDEyNywxLjAyNzMyLC45NjIyNSwuODk2NSwuOTc3ODMsLjkzNTc0LC45NDgxOCwxLjMwNjc5LDEuMDY3NSwxLjExODI2LC45OTgyMSwxLjA1NTcsMS4wMzI2LDEuMiwxLjA2NzUsLjk2MjI1LDEuMDY3NSwxLjAzMjYsLjc0ODE3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDM3NTQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3NTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45ODcwNSwxLDEsMSwxLDEsMSwuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwuOTQ5NDUsMS4xMjMxNywxLjEyMzE3LDEuMTIzMTcsLjY3NjAzLC42NzYwMywxLjE1NjIxLC43MzU4NCwxLjIxMTkxLDEuMjIxMzUsMS4wNjQ4MywuOTQ4NjgsLjk0ODY4LC45NTk5NiwxLjI0NjMzLDEsMS4wNzQ5NywuODc3MDksLjk2OTI3LDEuMDE0NzMsLjk2OTI3LDEsMSwxLC43NzI5NSwxLDEsMS4wOTgzNiwxLjA5ODM2LDEuMDk4MzYsMS4wMTUyMiwuODYzMjEsLjk0NDM0LC44NjQ5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjQzOCwxLjE3MzA4LDEuMTg0MTYsMS4xNDU4OSwuNjk4MjUsLjk3NjIyLDEuOTY3OTEsMS4yNDgyMiwxLjI0ODIyLDEuMTczMDgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xNzk4NCwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA3NDIsMS4xMDc0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5TZWdvZXVpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpUmVndWxhckZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODU5NCwxLjAyMjg1LDEuMTA0NTQsMS4wNjIzNCwuOTY5MjcsLjkyMDM3LDEuMTk5ODUsMS4yMDQ2LC45MDYxNiwuOTA2MTYsMS4wNzE1MiwxLjE3MTQsLjc4MDMyLDEuMjAwODgsLjc4MDMyLDEuNDAyNDYsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODAzMiwuNzgwMzIsMS4xNzE0LDEuMTcxNCwxLjE3MTQsLjgwNTk3LC45NDA4NCwuOTY3MDYsLjg1OTQ0LC44NTczNCwuOTcwOTMsLjc1ODQyLC43OTkzNiwuODgxOTgsLjk4MzEsLjk1NzgyLC43MTM4NywuODY5NjksLjg0NjM2LDEuMDc3OTYsMS4wMzU4NCwuOTY5MjQsLjgzOTY4LC45NjkyNCwuODI4MjYsLjc5NjQ5LC44NTc3MSwuOTUxMzIsLjkzMTE5LC45ODk2NSwuODg0MzMsLjgyODcsLjkzMzY1LDEuMDg2MTIsMS4zNjM4LDEuMDg2MTIsMS40NTc4NiwuNzQ2MjcsLjgwNDk5LC45MTQ4NCwxLjA1NzA3LC45MjM4MywxLjA1ODgyLC45NDAzLDEuMTI2NTQsMS4wNTg4MiwxLjAxNzU2LDEuMDkwMTEsMS4wOTAxMSwuOTk0MTQsMS4wOTAxMSwxLjAzNCwxLjAxNzU2LDEuMDUzNTYsMS4wNTcwNywxLjA1ODgyLDEuMDQzOTksLjg0ODYzLDEuMjE5NjgsMS4wMTc1NiwuOTU4MDEsMS4wMDA2OCwuOTE3OTcsLjk2Nzc3LC45MDQzLC45MDM1MSwuOTIxMDUsLjkwMzUxLDEuMTcxNCwuODUzMzcsLjk2OTI3LC45NjkyNywuOTk5MTIsLjk2OTI3LC45MjEwNSwuODA1OTcsMS4yNDM0LDEuMjA4MDgsMS4wNTkzNywuOTA5NTcsMS4xNzE0LDEuMjA4MDgsLjc1MTU1LC45NDI2MSwxLjI0NjQ0LDEuMDk5NzEsMS4wOTk3MSwuODQ3NTEsMSwuODUyNzMsLjc4MDMyLC42MTU4NCwxLjA1NDI1LDEuMTc5MTQsLjkwOTU3LDEuMDg2NjUsMS4xMTU5MywxLjE0MTY5LC43MzM4MSwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuODYwMzUsLjg1NzM0LC43NTg0MiwuNzU4NDIsLjc1ODQyLC43NTg0MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk3MDkzLDEuMDM1ODQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MTQsLjk2OTI0LC45NTEzMiwuOTUxMzIsLjk1MTMyLC45NTEzMiwuODI4NywuODM5NjgsLjg5MDQ5LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MzU3NSwuOTIzODMsLjk0MDMsLjk0MDMsLjk0MDMsLjk0MDMsLjg3MTcsLjg3MTcsLjg3MTcsLjg3MTcsMS4wMDUyNywxLjAxNzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjI0NjQ0LC45NTkyMywxLjAxNzU2LDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LC45Njc3NywxLjA1NzA3LC45Njc3NywuOTY3MDYsLjkxNDg0LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC45NzA5MywxLjA5NjksLjk3MDkzLDEuMDU4ODIsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwxLDEsLjk4MzEsMS4wMTc1NiwuOTgzMSwxLjAxNzU2LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLC44NzE3LC45NTc4MiwxLjA5MDExLC45NTc4MiwuODcxNywuODQ3ODQsMS4xMTU1MSwuNzEzODcsMS4wOTAxMSwxLDEsLjk5NDE0LC44NDYzNiwxLjA5MDExLDEsMSwuODQ2MzYsMS4wNTM2LC44NDYzNiwuOTQyOTgsLjg0NjM2LDEuMjMyOTcsMS4wMzU4NCwxLjAxNzU2LDEsMSwxLjAzNTg0LDEuMDE3NTYsMS4wMDMyMywxLjAzNDQ0LDEuMDE3NTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjkzMDY2LC45ODI5MywuODI4MjYsMS4wNDM5OSwxLDEsLjgyODI2LDEuMDQzOTksLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywxLDEsLjg1NzcxLDEuMTczMTgsLjg1NzcxLDEuMjE5NjgsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LC44Mjg3LC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsLjkzMzY1LC45MDQzLDEuMDg1NzEsLjk2OTI3LC45NjcwNiwuOTE0ODQsLjg2MDM1LC45MzU3NSwuOTY5MjQsLjk1OTIzLDEsMSwuODU3NzEsMS4yMTk2OCwxLjExNDM3LDEuMTE0MzcsLjkzMTA5LC45MTIwMiwuNjA0MTEsLjg0MTY0LC41NTU3MiwxLjAxMTczLC45NzM2MSwuODE4MTgsLjgxODE4LC45NjYzNSwuNzgwMzIsLjcyNzI3LC45MjM2NiwuOTg2MDEsMS4wMzQwNSwuNzc5NjgsMS4wOTc5OSwxLjIsLjk2NzA2LC44NTk0NCwuODU2MzgsLjk2NDkxLC43NTg0MiwuOTMzNjUsLjk4MzEsLjk2OTI0LC45NTc4MiwuODY5NjksLjk0MTUyLDEuMDc3OTYsMS4wMzU4NCwuNzg0MzcsLjk2OTI0LC45ODcxNSwuODM5NjgsLjgzNDkxLC44NTc3MSwuODI4NywuOTQ0OTIsLjg4NDMzLC45Mjg3LDEuMDA5OCwuOTU3ODIsLjgyODcsMS4wNjI1LC45ODI0OCwxLjAzNDI0LDEuMiwxLjAxMDcxLDEuMDYyNSwuOTUyNDYsMS4wMzgwOSwxLjA0OTEyLC45ODI0OCwxLjAwMjIxLDEuMDM0MjQsMS4wNTQ0MywxLjIsMS4wNDc4NSwuOTk2MDksMS4wMDE2OSwxLjA1MTc2LC45OTM0NiwxLjA1MzU2LC45MDg3LDEuMDMwMDQsLjk1NTQyLC45MzExNywxLjIzMzYyLDEuMDEwNzEsMS4wNzgzMSwxLjAyNTEyLDEuMDUyMDUsMS4wMzUwMiwxLjIsMS4wMTA3MSwxLjA1MzU2LDEuMDEwNzEsMS4wMzUwMiwuNzU4NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzcxOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0MDIxLDEsMSwxLDEsMSwxLC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC44Mjg3LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wMzA3NywxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjEzMTk2LDEuMTMxOTYsMS4xMzE5NiwuNjc0MjgsLjY3NDI4LDEuMTYwMzksLjczMjkxLDEuMjA5OTYsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44Nzc5NiwuOTY5MjcsMS4wMTUxOCwuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjEwNTM5LDEuMTA1MzksMS4xMTM1OCwxLjA2OTY3LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjUwNywxLjE3MTQsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njk3LDEuMjQ4MjIsMS4yNDgyMiwxLjE3MjM4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTgwODMsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwOTM4LDEuMTA5MzgsMSwxLDEsMS4wNTQyNSwxLjA5OTcxLDEuMDk5NzEsMS4wOTk3MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvc3RTY3JpcHRFdmFsdWF0b3I9dC5Qb3N0U2NyaXB0Q29tcGlsZXI9dC5QREZGdW5jdGlvbkZhY3Rvcnk9dm9pZCAwLHQuaXNQREZGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdDtpZigib2JqZWN0IiE9PWcoZSkpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIG4uRGljdCl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9O3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE4Nyksbz1yKDEzNikscz1yKDE4OCk7ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZihlKTtpZih0KXt2YXIgYT1mKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWcodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9ZnVuY3Rpb24gaChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gcChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3AoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIHAoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWcoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1nKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gbShlLHQscil7cmV0dXJuIHQmJnkoZS5wcm90b3R5cGUsdCksciYmeShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQueHJlZixuPXQuaXNFdmFsU3VwcG9ydGVkLGE9dm9pZCAwPT09bnx8bjt2KHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT1hfXJldHVybiBtKGUsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlKHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm46ZSBpbnN0YW5jZW9mIG4uUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7cmV0dXJuIHRoaXMuX2NhY2hlKGUscikscn19LHtrZXk6ImNyZWF0ZUZyb21BcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplIGluc3RhbmNlb2Ygbi5SZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTtyZXR1cm4gdGhpcy5fY2FjaGUoZSxyKSxyfX0se2tleToiZ2V0Q2FjaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihlIGluc3RhbmNlb2Ygbi5SZWY/dD1lOmUgaW5zdGFuY2VvZiBuLkRpY3Q/dD1lLm9iaklkOmUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJih0PWUuZGljdCYmZS5kaWN0Lm9iaklkKSx0KXt2YXIgcj10aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYodCk7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH19LHtrZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ1BERkZ1bmN0aW9uRmFjdG9yeS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkRnVuY3Rpb24iIGFyZ3VtZW50LicpO3ZhciByO2UgaW5zdGFuY2VvZiBuLlJlZj9yPWU6ZSBpbnN0YW5jZW9mIG4uRGljdD9yPWUub2JqSWQ6ZSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmKHI9ZS5kaWN0JiZlLmRpY3Qub2JqSWQpLHImJnRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5zZXQobnVsbCxyLHQpfX0se2tleToiX2xvY2FsRnVuY3Rpb25DYWNoZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9sb2NhbEZ1bmN0aW9uQ2FjaGUiLG5ldyBzLkxvY2FsRnVuY3Rpb25DYWNoZSl9fV0pLGV9KCk7ZnVuY3Rpb24gdyhlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZS5sZW5ndGgscj0wO3I8dDtyKyspaWYoIm51bWJlciIhPXR5cGVvZiBlW3JdKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGE9MDthPHQ7YSsrKW5bYV09K2VbYV07cmV0dXJuIG59cmV0dXJuIGV9dC5QREZGdW5jdGlvbkZhY3Rvcnk9Yjt2YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2KHRoaXMsZSl9cmV0dXJuIG0oZSxudWxsLFt7a2V5OiJnZXRTYW1wbGVBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvPTE7Zm9yKGE9MCxpPWUubGVuZ3RoO2E8aTthKyspbyo9ZVthXTtvKj10O3ZhciBzPW5ldyBBcnJheShvKSxjPTAsdT0wLGw9MS8oTWF0aC5wb3coMixyKS0xKSxmPW4uZ2V0Qnl0ZXMoKG8qcis3KS84KSxoPTA7Zm9yKGE9MDthPG87YSsrKXtmb3IoO2M8cjspdTw8PTgsdXw9ZltoKytdLGMrPTg7Yy09cixzW2FdPSh1Pj5jKSpsLHUmPSgxPDxjKS0xfXJldHVybiBzfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuaXNFdmFsU3VwcG9ydGVkLG49ZS5mbixpPW4uZGljdHx8bjtzd2l0Y2goaS5nZXQoIkZ1bmN0aW9uVHlwZSIpKXtjYXNlIDA6cmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm4sZGljdDppfSk7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixkaWN0Oml9KTtjYXNlIDM6cmV0dXJuIHRoaXMuY29uc3RydWN0U3RpY2hlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGRpY3Q6aX0pO2Nhc2UgNDpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0KHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46bixkaWN0Oml9KX10aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uIil9fSx7a2V5OiJwYXJzZUFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZm5PYmo7aWYoIUFycmF5LmlzQXJyYXkobikpcmV0dXJuIHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjpufSk7dmFyIGEsaT1bXSxvPWgobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlO2kucHVzaCh0aGlzLnBhcnNlKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46dC5mZXRjaElmUmVmKHMpfSkpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBhPTAsbz1pLmxlbmd0aDthPG87YSsrKWlbYV0oZSx0LHIsbithKX19fSx7a2V5OiJjb25zdHJ1Y3RTYW1wbGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7dmFyIHQ9ZS5mbixyPWUuZGljdDtmdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVtdLG49MCxhPTA7YTx0O2ErPTIpcltuKytdPVtlW2FdLGVbYSsxXV07cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQscixuLGEpe3JldHVybiBuKyhhLW4pLyhyLXQpKihlLXQpfXZhciBvPXcoci5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhyLmdldEFycmF5KCJSYW5nZSIpKTtpZighb3x8IXMpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiBvciByYW5nZSIpO3ZhciBjPW8ubGVuZ3RoLzIsdT1zLmxlbmd0aC8yO289bihvKSxzPW4ocyk7dmFyIGw9dyhyLmdldEFycmF5KCJTaXplIikpLGY9ci5nZXQoIkJpdHNQZXJTYW1wbGUiKSxoPXIuZ2V0KCJPcmRlciIpfHwxOzEhPT1oJiYoMCxhLmluZm8pKCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogIitoKTt2YXIgZD13KHIuZ2V0QXJyYXkoIkVuY29kZSIpKTtpZihkKWQ9bihkKTtlbHNle2Q9W107Zm9yKHZhciBwPTA7cDxjOysrcClkLnB1c2goWzAsbFtwXS0xXSl9dmFyIGc9dyhyLmdldEFycmF5KCJEZWNvZGUiKSk7Zz1nP24oZyk6czt2YXIgdj10aGlzLmdldFNhbXBsZUFycmF5KGwsdSxmLHQpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxmLGg9MTw8YyxwPW5ldyBGbG9hdDY0QXJyYXkoaCkseT1uZXcgVWludDMyQXJyYXkoaCk7Zm9yKGY9MDtmPGg7ZisrKXBbZl09MTt2YXIgbT11LGI9MTtmb3IoYT0wO2E8YzsrK2Epe3ZhciB3PW9bYV1bMF0saz1vW2FdWzFdLFM9aShNYXRoLm1pbihNYXRoLm1heChlW3QrYV0sdyksayksdyxrLGRbYV1bMF0sZFthXVsxXSkseD1sW2FdLE89KFM9TWF0aC5taW4oTWF0aC5tYXgoUywwKSx4LTEpKTx4LTE/TWF0aC5mbG9vcihTKTpTLTEsQT1PKzEtUyxDPVMtTyxGPU8qbSxQPUYrbTtmb3IoZj0wO2Y8aDtmKyspZiZiPyhwW2ZdKj1DLHlbZl0rPVApOihwW2ZdKj1BLHlbZl0rPUYpO20qPXgsYjw8PTF9Zm9yKGY9MDtmPHU7KytmKXt2YXIgVD0wO2ZvcihhPTA7YTxoO2ErKylUKz12W3lbYV0rZl0qcFthXTtUPWkoVCwwLDEsZ1tmXVswXSxnW2ZdWzFdKSxyW24rZl09TWF0aC5taW4oTWF0aC5tYXgoVCxzW2ZdWzBdKSxzW2ZdWzFdKX19fX0se2tleToiY29uc3RydWN0SW50ZXJwb2xhdGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7Zm9yKHZhciB0PWUuZGljdCxyPXcodC5nZXRBcnJheSgiQzAiKSl8fFswXSxuPXcodC5nZXRBcnJheSgiQzEiKSl8fFsxXSxhPXQuZ2V0KCJOIiksaT1bXSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWkucHVzaChuW29dLXJbb10pO3ZhciBjPWkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlLHQsbixvKXtmb3IodmFyIHM9MT09PWE/ZVt0XTpNYXRoLnBvdyhlW3RdLGEpLHU9MDt1PGM7Kyt1KW5bbyt1XT1yW3VdK3MqaVt1XX19fSx7a2V5OiJjb25zdHJ1Y3RTdGljaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZGljdCxpPXcobi5nZXRBcnJheSgiRG9tYWluIikpO2lmKCFpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyBkb21haW4iKTtpZigxIT1pLmxlbmd0aC8yKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uIik7dmFyIG8scz1bXSxjPWgobi5nZXQoIkZ1bmN0aW9ucyIpKTt0cnl7Zm9yKGMucygpOyEobz1jLm4oKSkuZG9uZTspe3ZhciB1PW8udmFsdWU7cy5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjp0LmZldGNoSWZSZWYodSl9KSl9fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXZhciBsPXcobi5nZXRBcnJheSgiQm91bmRzIikpLGY9dyhuLmdldEFycmF5KCJFbmNvZGUiKSksZD1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxvPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT5yP2U9cjplPHQmJihlPXQpLGV9KGVbdF0saVswXSxpWzFdKSxjPWwubGVuZ3RoO2ZvcihhPTA7YTxjJiYhKG88bFthXSk7KythKTt2YXIgdT1pWzBdO2E+MCYmKHU9bFthLTFdKTt2YXIgaD1pWzFdO2E8bC5sZW5ndGgmJihoPWxbYV0pO3ZhciBwPWZbMiphXSxnPWZbMiphKzFdO2RbMF09dT09PWg/cDpwKyhvLXUpKihnLXApLyhoLXUpLHNbYV0oZCwwLHIsbil9fX0se2tleToiY29uc3RydWN0UG9zdFNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS54cmVmO3ZhciB0PWUuaXNFdmFsU3VwcG9ydGVkLHI9ZS5mbixuPWUuZGljdCxvPXcobi5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhuLmdldEFycmF5KCJSYW5nZSIpKTtpZighbyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gZG9tYWluLiIpO2lmKCFzKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyByYW5nZS4iKTt2YXIgYz1uZXcgaS5Qb3N0U2NyaXB0TGV4ZXIociksdT1uZXcgaS5Qb3N0U2NyaXB0UGFyc2VyKGMpLnBhcnNlKCk7aWYodCYmYS5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBsPShuZXcgUikuY29tcGlsZSh1LG8scyk7aWYobClyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIsbCl9KDAsYS5pbmZvKSgiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTt2YXIgZj1zLmxlbmd0aD4+MSxoPW8ubGVuZ3RoPj4xLGQ9bmV3IHgodSkscD1PYmplY3QuY3JlYXRlKG51bGwpLGc9ODE5Mix2PW5ldyBGbG9hdDMyQXJyYXkoaCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbz0iIixjPXY7Zm9yKGE9MDthPGg7YSsrKWk9ZVt0K2FdLGNbYV09aSxvKz1pKyJfIjt2YXIgdT1wW29dO2lmKHZvaWQgMD09PXUpe3ZhciBsPW5ldyBGbG9hdDMyQXJyYXkoZikseT1kLmV4ZWN1dGUoYyksbT15Lmxlbmd0aC1mO2ZvcihhPTA7YTxmO2ErKyl7aT15W20rYV07dmFyIGI9c1syKmFdOyhpPGJ8fGk+KGI9c1syKmErMV0pKSYmKGk9YiksbFthXT1pfWc+MCYmKGctLSxwW29dPWwpLHIuc2V0KGwsbil9ZWxzZSByLnNldCh1LG4pfX19XSksZX0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2KHRoaXMsZSksdGhpcy5zdGFjaz10P0FycmF5LmZyb20odCk6W119cmV0dXJuIG0oZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGg+PWUuTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO3RoaXMuc3RhY2sucHVzaCh0KX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YWNrLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgdW5kZXJmbG93LiIpO3JldHVybiB0aGlzLnN0YWNrLnBvcCgpfX0se2tleToiY29weSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGgrdD49ZS5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Zm9yKHZhciByPXRoaXMuc3RhY2ssbj1yLmxlbmd0aC10LGE9dC0xO2E+PTA7YS0tLG4rKylyLnB1c2gocltuXSl9fSx7a2V5OiJpbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZS0xXSl9fSx7a2V5OiJyb2xsIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLnN0YWNrLG49ci5sZW5ndGgtZSxhPXIubGVuZ3RoLTEsaT1uKyh0LU1hdGguZmxvb3IodC9lKSplKSxvPW4scz1hO288cztvKysscy0tKXt2YXIgYz1yW29dO3Jbb109cltzXSxyW3NdPWN9Zm9yKHZhciB1PW4sbD1pLTE7dTxsO3UrKyxsLS0pe3ZhciBmPXJbdV07clt1XT1yW2xdLHJbbF09Zn1mb3IodmFyIGg9aSxkPWE7aDxkO2grKyxkLS0pe3ZhciBwPXJbaF07cltoXT1yW2RdLHJbZF09cH19fV0sW3trZXk6Ik1BWF9TVEFDS19TSVpFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiTUFYX1NUQUNLX1NJWkUiLDEwMCl9fV0pLGV9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMub3BlcmF0b3JzPXR9cmV0dXJuIG0oZSxbe2tleToiZXhlY3V0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixpPW5ldyBTKGUpLG89MCxzPXRoaXMub3BlcmF0b3JzLGM9cy5sZW5ndGg7bzxjOylpZigibnVtYmVyIiE9dHlwZW9mKHQ9c1tvKytdKSlzd2l0Y2godCl7Y2FzZSJqeiI6bj1pLnBvcCgpLChyPWkucG9wKCkpfHwobz1uKTticmVhaztjYXNlImoiOm89cj1pLnBvcCgpO2JyZWFrO2Nhc2UiYWJzIjpyPWkucG9wKCksaS5wdXNoKE1hdGguYWJzKHIpKTticmVhaztjYXNlImFkZCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocituKTticmVhaztjYXNlImFuZCI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHImJm4pOmkucHVzaChyJm4pO2JyZWFrO2Nhc2UiYXRhbiI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmF0YW4ocikpO2JyZWFrO2Nhc2UiYml0c2hpZnQiOm49aS5wb3AoKSwocj1pLnBvcCgpKT4wP2kucHVzaChyPDxuKTppLnB1c2gocj4+bik7YnJlYWs7Y2FzZSJjZWlsaW5nIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY2VpbChyKSk7YnJlYWs7Y2FzZSJjb3B5IjpyPWkucG9wKCksaS5jb3B5KHIpO2JyZWFrO2Nhc2UiY29zIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY29zKHIpKTticmVhaztjYXNlImN2aSI6cj0wfGkucG9wKCksaS5wdXNoKHIpO2JyZWFrO2Nhc2UiY3ZyIjpicmVhaztjYXNlImRpdiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci9uKTticmVhaztjYXNlImR1cCI6aS5jb3B5KDEpO2JyZWFrO2Nhc2UiZXEiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI9PT1uKTticmVhaztjYXNlImV4Y2giOmkucm9sbCgyLDEpO2JyZWFrO2Nhc2UiZXhwIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChNYXRoLnBvdyhyLG4pKTticmVhaztjYXNlImZhbHNlIjppLnB1c2goITEpO2JyZWFrO2Nhc2UiZmxvb3IiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5mbG9vcihyKSk7YnJlYWs7Y2FzZSJnZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj49bik7YnJlYWs7Y2FzZSJndCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj5uKTticmVhaztjYXNlImlkaXYiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIvbnwwKTticmVhaztjYXNlImluZGV4IjpyPWkucG9wKCksaS5pbmRleChyKTticmVhaztjYXNlImxlIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyPD1uKTticmVhaztjYXNlImxuIjpyPWkucG9wKCksaS5wdXNoKE1hdGgubG9nKHIpKTticmVhaztjYXNlImxvZyI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmxvZyhyKS9NYXRoLkxOMTApO2JyZWFrO2Nhc2UibHQiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI8bik7YnJlYWs7Y2FzZSJtb2QiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIlbik7YnJlYWs7Y2FzZSJtdWwiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIqbik7YnJlYWs7Y2FzZSJuZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gociE9PW4pO2JyZWFrO2Nhc2UibmVnIjpyPWkucG9wKCksaS5wdXNoKC1yKTticmVhaztjYXNlIm5vdCI6ImJvb2xlYW4iPT10eXBlb2Yocj1pLnBvcCgpKT9pLnB1c2goIXIpOmkucHVzaCh+cik7YnJlYWs7Y2FzZSJvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHJ8fG4pOmkucHVzaChyfG4pO2JyZWFrO2Nhc2UicG9wIjppLnBvcCgpO2JyZWFrO2Nhc2Uicm9sbCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnJvbGwocixuKTticmVhaztjYXNlInJvdW5kIjpyPWkucG9wKCksaS5wdXNoKE1hdGgucm91bmQocikpO2JyZWFrO2Nhc2Uic2luIjpyPWkucG9wKCksaS5wdXNoKE1hdGguc2luKHIpKTticmVhaztjYXNlInNxcnQiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5zcXJ0KHIpKTticmVhaztjYXNlInN1YiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci1uKTticmVhaztjYXNlInRydWUiOmkucHVzaCghMCk7YnJlYWs7Y2FzZSJ0cnVuY2F0ZSI6cj0ocj1pLnBvcCgpKTwwP01hdGguY2VpbChyKTpNYXRoLmZsb29yKHIpLGkucHVzaChyKTticmVhaztjYXNlInhvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHIhPT1uKTppLnB1c2gocl5uKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIG9wZXJhdG9yICIuY29uY2F0KHQpKX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gaS5zdGFja319XSksZX0oKTt0LlBvc3RTY3JpcHRFdmFsdWF0b3I9eDt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMudHlwZT10fXJldHVybiBtKGUsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXsoMCxhLnVucmVhY2hhYmxlKSgiYWJzdHJhY3QgbWV0aG9kIil9fV0pLGV9KCksQT1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJhcmdzIikpLmluZGV4PWUsaS5taW49bixpLm1heD1hLGl9cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRBcmd1bWVudCh0aGlzKX19XSkscn0oTyksQz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB2KHRoaXMsciksKG49dC5jYWxsKHRoaXMsImxpdGVyYWwiKSkubnVtYmVyPWUsbi5taW49ZSxuLm1heD1lLG59cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1dKSxyfShPKSxGPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSxvKXt2YXIgcztyZXR1cm4gdih0aGlzLHIpLChzPXQuY2FsbCh0aGlzLCJiaW5hcnkiKSkub3A9ZSxzLmFyZzE9bixzLmFyZzI9YSxzLm1pbj1pLHMubWF4PW8sc31yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19XSkscn0oTyksUD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHYodGhpcyxyKSwoYT10LmNhbGwodGhpcywibWF4IikpLmFyZz1lLGEubWluPWUubWluLGEubWF4PW4sYX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdE1pbih0aGlzKX19XSkscn0oTyksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJ2YXIiKSkuaW5kZXg9ZSxpLm1pbj1uLGkubWF4PWEsaX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdFZhcmlhYmxlKHRoaXMpfX1dKSxyfShPKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJkZWZpbml0aW9uIikpLnZhcmlhYmxlPWUsYS5hcmc9bixhfXJldHVybiBtKHIsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXtlLnZpc2l0VmFyaWFibGVEZWZpbml0aW9uKHRoaXMpfX1dKSxyfShPKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3YodGhpcyxlKSx0aGlzLnBhcnRzPVtdfXJldHVybiBtKGUsW3trZXk6InZpc2l0QXJndW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgiTWF0aC5tYXgoIixlLm1pbiwiLCBNYXRoLm1pbigiLGUubWF4LCIsIHNyY1tzcmNPZmZzZXQgKyAiLGUuaW5kZXgsIl0pKSIpfX0se2tleToidmlzaXRWYXJpYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2IixlLmluZGV4KX19LHtrZXk6InZpc2l0TGl0ZXJhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKGUubnVtYmVyKX19LHtrZXk6InZpc2l0QmluYXJ5T3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIigiKSxlLmFyZzEudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgIixlLm9wLCIgIiksZS5hcmcyLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiKSIpfX0se2tleToidmlzaXRWYXJpYWJsZURlZmluaXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgidmFyICIpLGUudmFyaWFibGUudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgPSAiKSxlLmFyZy52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIjsiKX19LHtrZXk6InZpc2l0TWluIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWluKCIpLGUuYXJnLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiLCAiLGUubWF4LCIpIil9fSx7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJ0cy5qb2luKCIiKX19XSksZX0oKTtmdW5jdGlvbiBqKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBDKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgRigiKyIsZSx0LGUubWluK3QubWluLGUubWF4K3QubWF4KX1mdW5jdGlvbiBNKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBDKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEMoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fXZhciByPU1hdGgubWluKGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KSxuPU1hdGgubWF4KGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KTtyZXR1cm4gbmV3IEYoIioiLGUsdCxyLG4pfWZ1bmN0aW9uIF8oZSx0KXtpZigibGl0ZXJhbCI9PT10LnR5cGUpe2lmKDA9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyLXQubnVtYmVyKX1yZXR1cm4iYmluYXJ5Ij09PXQudHlwZSYmIi0iPT09dC5vcCYmImxpdGVyYWwiPT09ZS50eXBlJiYxPT09ZS5udW1iZXImJiJsaXRlcmFsIj09PXQuYXJnMS50eXBlJiYxPT09dC5hcmcxLm51bWJlcj90LmFyZzI6bmV3IEYoIi0iLGUsdCxlLm1pbi10Lm1heCxlLm1heC10Lm1pbil9ZnVuY3Rpb24gTChlLHQpe3JldHVybiBlLm1pbj49dD9uZXcgQyh0KTplLm1heDw9dD9lOm5ldyBQKGUsdCl9dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dih0aGlzLGUpfXJldHVybiBtKGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG4sYSxpLG8scyxjLHUsbCxmPVtdLGg9W10sZz10Lmxlbmd0aD4+MSx2PXIubGVuZ3RoPj4xLHk9MCxtPTA7bTxnO20rKylmLnB1c2gobmV3IEEobSx0WzIqbV0sdFsyKm0rMV0pKTtmb3IodmFyIGI9MCx3PWUubGVuZ3RoO2I8dztiKyspaWYoIm51bWJlciIhPXR5cGVvZihsPWVbYl0pKXN3aXRjaChsKXtjYXNlImFkZCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtvPWYucG9wKCksaT1mLnBvcCgpLGYucHVzaChqKGksbykpO2JyZWFrO2Nhc2UiY3ZyIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2JyZWFrO2Nhc2UibXVsIjppZihmLmxlbmd0aDwyKXJldHVybiBudWxsO289Zi5wb3AoKSxpPWYucG9wKCksZi5wdXNoKE0oaSxvKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7bz1mLnBvcCgpLGk9Zi5wb3AoKSxmLnB1c2goXyhpLG8pKTticmVhaztjYXNlImV4Y2giOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7cz1mLnBvcCgpLGM9Zi5wb3AoKSxmLnB1c2gocyxjKTticmVhaztjYXNlInBvcCI6aWYoZi5sZW5ndGg8MSlyZXR1cm4gbnVsbDtmLnBvcCgpO2JyZWFrO2Nhc2UiaW5kZXgiOmlmKGYubGVuZ3RoPDEpcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiIT09KGk9Zi5wb3AoKSkudHlwZSlyZXR1cm4gbnVsbDtpZigobj1pLm51bWJlcik8MHx8IU51bWJlci5pc0ludGVnZXIobil8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiPT09KHM9ZltmLmxlbmd0aC1uLTFdKS50eXBlfHwidmFyIj09PXMudHlwZSl7Zi5wdXNoKHMpO2JyZWFrfXU9bmV3IFQoeSsrLHMubWluLHMubWF4KSxmW2YubGVuZ3RoLW4tMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2UiZHVwIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2lmKCJudW1iZXIiPT10eXBlb2YgZVtiKzFdJiYiZ3QiPT09ZVtiKzJdJiZlW2IrM109PT1iKzcmJiJqeiI9PT1lW2IrNF0mJiJwb3AiPT09ZVtiKzVdJiZlW2IrNl09PT1lW2IrMV0pe2k9Zi5wb3AoKSxmLnB1c2goTChpLGVbYisxXSkpLGIrPTY7YnJlYWt9aWYoImxpdGVyYWwiPT09KHM9Zi5hdCgtMSkpLnR5cGV8fCJ2YXIiPT09cy50eXBlKXtmLnB1c2gocyk7YnJlYWt9dT1uZXcgVCh5Kysscy5taW4scy5tYXgpLGZbZi5sZW5ndGgtMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2Uicm9sbCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtpZihvPWYucG9wKCksaT1mLnBvcCgpLCJsaXRlcmFsIiE9PW8udHlwZXx8ImxpdGVyYWwiIT09aS50eXBlKXJldHVybiBudWxsO2lmKGE9by5udW1iZXIsKG49aS5udW1iZXIpPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIoYSl8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoMD09KGE9KGElbituKSVuKSlicmVhaztmLnB1c2guYXBwbHkoZixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShrPWYuc3BsaWNlKGYubGVuZ3RoLW4sbi1hKSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oayl8fGQoayl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9ZWxzZSBmLnB1c2gobmV3IEMobCkpO3ZhciBrO2lmKGYubGVuZ3RoIT09dilyZXR1cm4gbnVsbDtmb3IodmFyIFM9W10seD0wLE89aDt4PE8ubGVuZ3RoO3grKyl7dmFyIEY9T1t4XSxQPW5ldyBFO0YudmlzaXQoUCksUy5wdXNoKFAudG9TdHJpbmcoKSl9Zm9yKHZhciBSPTAsTj1mLmxlbmd0aDtSPE47UisrKXt2YXIgRD1mW1JdLEI9bmV3IEU7RC52aXNpdChCKTt2YXIgVT1yWzIqUl0sJD1yWzIqUisxXSxYPVtCLnRvU3RyaW5nKCldO1U+RC5taW4mJihYLnVuc2hpZnQoIk1hdGgubWF4KCIsVSwiLCAiKSxYLnB1c2goIikiKSksJDxELm1heCYmKFgudW5zaGlmdCgiTWF0aC5taW4oIiwkLCIsICIpLFgucHVzaCgiKSIpKSxYLnVuc2hpZnQoImRlc3RbZGVzdE9mZnNldCArICIsUiwiXSA9ICIpLFgucHVzaCgiOyIpLFMucHVzaChYLmpvaW4oIiIpKX1yZXR1cm4gUy5qb2luKCJcbiIpfX1dKSxlfSgpO3QuUG9zdFNjcmlwdENvbXBpbGVyPVJ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qb3N0U2NyaXB0UGFyc2VyPXQuUG9zdFNjcmlwdExleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG8oZSl9ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB1KGUsdCxyKXtyZXR1cm4gdCYmYyhlLnByb3RvdHlwZSx0KSxyJiZjKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMubGV4ZXI9dCx0aGlzLm9wZXJhdG9ycz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5wcmV2PW51bGx9cmV0dXJuIHUoZSxbe2tleToibmV4dFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJldj10aGlzLnRva2VuLHRoaXMudG9rZW49dGhpcy5sZXhlci5nZXRUb2tlbigpfX0se2tleToiYWNjZXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2tlbi50eXBlPT09ZSYmKHRoaXMubmV4dFRva2VuKCksITApfX0se2tleToiZXhwZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmFjY2VwdChlKSlyZXR1cm4hMDt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICIuY29uY2F0KHRoaXMudG9rZW4udHlwZSwiIGV4cGVjdGVkICIpLmNvbmNhdChlLCIuIikpfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuKCksdGhpcy5leHBlY3QoZi5MQlJBQ0UpLHRoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLm9wZXJhdG9yc319LHtrZXk6InBhcnNlQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDs7KWlmKHRoaXMuYWNjZXB0KGYuTlVNQkVSKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZSBpZih0aGlzLmFjY2VwdChmLk9QRVJBVE9SKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZXtpZighdGhpcy5hY2NlcHQoZi5MQlJBQ0UpKXJldHVybjt0aGlzLnBhcnNlQ29uZGl0aW9uKCl9fX0se2tleToicGFyc2VDb25kaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO2lmKHRoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKSx0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdChmLlJCUkFDRSksdGhpcy5hY2NlcHQoZi5JRikpdGhpcy5vcGVyYXRvcnNbZV09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW2UrMV09Imp6IjtlbHNle2lmKCF0aGlzLmFjY2VwdChmLkxCUkFDRSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLiIpO3ZhciB0PXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dmFyIHI9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLmV4cGVjdChmLklGRUxTRSksdGhpcy5vcGVyYXRvcnNbdF09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW3QrMV09ImoiLHRoaXMub3BlcmF0b3JzW2VdPXIsdGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifX19XSksZX0oKTt0LlBvc3RTY3JpcHRQYXJzZXI9bDt2YXIgZj17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ModGhpcyxlKSx0aGlzLnR5cGU9dCx0aGlzLnZhbHVlPXJ9cmV0dXJuIHUoZSxudWxsLFt7a2V5OiJvcENhY2hlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3BDYWNoZSIsT2JqZWN0LmNyZWF0ZShudWxsKSl9fSx7a2V5OiJnZXRPcGVyYXRvciIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUub3BDYWNoZVt0XXx8KGUub3BDYWNoZVt0XT1uZXcgZShmLk9QRVJBVE9SLHQpKX19LHtrZXk6IkxCUkFDRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkxCUkFDRSIsbmV3IGUoZi5MQlJBQ0UsInsiKSl9fSx7a2V5OiJSQlJBQ0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJSQlJBQ0UiLG5ldyBlKGYuUkJSQUNFLCJ9IikpfX0se2tleToiSUYiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRiIsbmV3IGUoZi5JRiwiSUYiKSl9fSx7a2V5OiJJRkVMU0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRkVMU0UiLG5ldyBlKGYuSUZFTFNFLCJJRkVMU0UiKSl9fV0pLGV9KCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5uZXh0Q2hhcigpLHRoaXMuc3RyQnVmPVtdfXJldHVybiB1KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6ImdldFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxpLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gbmV3IGgoZi5OVU1CRVIsdGhpcy5nZXROdW1iZXIoKSk7Y2FzZSAxMjM6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxoLkxCUkFDRTtjYXNlIDEyNTpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGguUkJSQUNFfXZhciByPXRoaXMuc3RyQnVmO2ZvcihyLmxlbmd0aD0wLHJbMF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYodD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyKTspci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO3ZhciBuPXIuam9pbigiIik7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJpZiI6cmV0dXJuIGguSUY7Y2FzZSJpZmVsc2UiOnJldHVybiBoLklGRUxTRTtkZWZhdWx0OnJldHVybiBoLmdldE9wZXJhdG9yKG4pfX19LHtrZXk6ImdldE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnRDaGFyLHQ9dGhpcy5zdHJCdWY7Zm9yKHQubGVuZ3RoPTAsdFswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJihlPj00OCYmZTw9NTd8fDQ1PT09ZXx8NDY9PT1lKTspdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3ZhciByPXBhcnNlRmxvYXQodC5qb2luKCIiKSk7aWYoaXNOYU4ocikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAiLmNvbmNhdChyKSk7cmV0dXJuIHJ9fV0pLGV9KCk7dC5Qb3N0U2NyaXB0TGV4ZXI9ZH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPXQuTG9jYWxJbWFnZUNhY2hlPXQuTG9jYWxHU3RhdGVDYWNoZT10LkxvY2FsRnVuY3Rpb25DYWNoZT10LkxvY2FsQ29sb3JTcGFjZUNhY2hlPXQuR2xvYmFsSW1hZ2VDYWNoZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KTtmdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0scyhlLHQpfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49dShlKTtpZih0KXt2YXIgYT11KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWwodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbChlKX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1sKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWwoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiB0JiZoKGUucHJvdG90eXBlLHQpLHImJmgoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlTG9jYWxDYWNoZS4iKSx0aGlzLl9vbmx5UmVmcz0hMD09PSh0JiZ0Lm9ubHlSZWZzKSx0aGlzLl9vbmx5UmVmc3x8KHRoaXMuX25hbWVSZWZNYXA9bmV3IE1hcCx0aGlzLl9pbWFnZU1hcD1uZXcgTWFwKSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6ImdldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fb25seVJlZnMmJigwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgYGdldEJ5TmFtZWAgbWV0aG9kLiIpO3ZhciB0PXRoaXMuX25hbWVSZWZNYXAuZ2V0KGUpO3JldHVybiB0P3RoaXMuZ2V0QnlSZWYodCk6dGhpcy5faW1hZ2VNYXAuZ2V0KGUpfHxudWxsfX0se2tleToiZ2V0QnlSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbWFnZUNhY2hlLmdldChlKXx8bnVsbH19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNldGAgY2FsbGVkLiIpfX1dKSxlfSgpLGc9ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBmKHRoaXMsciksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsSW1hZ2VDYWNoZT1nO3ZhciB2PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gZih0aGlzLHIpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBkKHIsW3trZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiBudWxsIT09ZSYmdGhpcy5fbmFtZVJlZk1hcC5zZXQoZSx0KSx2b2lkIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQscil9dGhpcy5faW1hZ2VNYXAuaGFzKGUpfHx0aGlzLl9pbWFnZU1hcC5zZXQoZSxyKX19XSkscn0ocCk7dC5Mb2NhbENvbG9yU3BhY2VDYWNoZT12O3ZhciB5PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx7b25seVJlZnM6ITB9KX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsRnVuY3Rpb25DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9eTt2YXIgbT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGYodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsR1N0YXRlQ2FjaGU9bTt2YXIgYj1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMse29ubHlSZWZzOiEwfSl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZT1iO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLl9yZWZDYWNoZT1uZXcgYS5SZWZTZXRDYWNoZSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6Il9ieXRlU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD0wLHI9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX0odGhpcy5faW1hZ2VDYWNoZSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXQrPWUudmFsdWUuYnl0ZVNpemV9Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHR9fSx7a2V5OiJfY2FjaGVMaW1pdFJlYWNoZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPGUuTUlOX0lNQUdFU19UT19DQUNIRXx8dGhpcy5fYnl0ZVNpemU8ZS5NQVhfQllURV9TSVpFKX19LHtrZXk6InNob3VsZENhY2hlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtyZXR1cm4hKChuP24uc2l6ZSsobi5oYXMocik/MDoxKToxKTxlLk5VTV9QQUdFU19USFJFU0hPTER8fCF0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSYmdGhpcy5fY2FjaGVMaW1pdFJlYWNoZWQpfX0se2tleToiYWRkUGFnZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3JlZkNhY2hlLmdldChlKTtyfHwocj1uZXcgU2V0LHRoaXMuX3JlZkNhY2hlLnB1dChlLHIpKSxyLmFkZCh0KX19LHtrZXk6ImFkZEJ5dGVTaXplIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO3ImJihyLmJ5dGVTaXplfHwoci5ieXRlU2l6ZT10KSl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtpZighbilyZXR1cm4gbnVsbDtpZihuLnNpemU8ZS5OVU1fUEFHRVNfVEhSRVNIT0xEKXJldHVybiBudWxsO3ZhciBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHQpO3JldHVybiBhPyhuLmFkZChyKSxhKTpudWxsfX0se2tleToic2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fcmVmQ2FjaGUuaGFzKGUpKXRocm93IG5ldyBFcnJvcignR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gZXhwZWN0ZWQgImFkZFBhZ2VJbmRleCIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8KHRoaXMuX2NhY2hlTGltaXRSZWFjaGVkPygwLG4ud2FybikoIkdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGNhY2hlIGxpbWl0IHJlYWNoZWQuIik6dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLl9yZWZDYWNoZS5jbGVhcigpLHRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKX19XSxbe2tleToiTlVNX1BBR0VTX1RIUkVTSE9MRCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk5VTV9QQUdFU19USFJFU0hPTEQiLDIpfX0se2tleToiTUlOX0lNQUdFU19UT19DQUNIRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1JTl9JTUFHRVNfVE9fQ0FDSEUiLDEwKX19LHtrZXk6Ik1BWF9CWVRFX1NJWkUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfQllURV9TSVpFIiw0ZTcpfX1dKSxlfSgpO3QuR2xvYmFsSW1hZ2VDYWNoZT13fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYmlkaT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTEscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLHA9ITAsZz1lLmxlbmd0aDtpZigwPT09Z3x8cilyZXR1cm4gZihlLHAscik7aC5sZW5ndGg9ZyxkLmxlbmd0aD1nO3ZhciB2LHksbT0wO2Zvcih2PTA7djxnOysrdil7aFt2XT1lLmNoYXJBdCh2KTt2YXIgYj1lLmNoYXJDb2RlQXQodiksdz0iTCI7Yjw9MjU1P3c9YVtiXToxNDI0PD1iJiZiPD0xNTI0P3c9IlIiOjE1MzY8PWImJmI8PTE3OTE/KHc9aVsyNTUmYl0pfHwoMCxuLndhcm4pKCJCaWRpOiBpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyICIrYi50b1N0cmluZygxNikpOjE3OTI8PWImJmI8PTIyMjAmJih3PSJBTCIpLCJSIiE9PXcmJiJBTCIhPT13JiYiQU4iIT09d3x8bSsrLGRbdl09d31pZigwPT09bSlyZXR1cm4gZihlLHA9ITApOy0xPT09dCYmKG0vZzwuMyYmZz40PyhwPSEwLHQ9MCk6KHA9ITEsdD0xKSk7dmFyIGs9W107Zm9yKHY9MDt2PGc7Kyt2KWtbdl09dDt2YXIgUyx4PW8odCk/IlIiOiJMIixPPXgsQT1PLEM9Tztmb3Iodj0wO3Y8ZzsrK3YpIk5TTSI9PT1kW3ZdP2Rbdl09QzpDPWRbdl07Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iQUwiPT09Qz8iQU4iOiJFTiI6IlIiIT09UyYmIkwiIT09UyYmIkFMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdikiQUwiPT09KFM9ZFt2XSkmJihkW3ZdPSJSIik7Zm9yKHY9MTt2PGctMTsrK3YpIkVTIj09PWRbdl0mJiJFTiI9PT1kW3YtMV0mJiJFTiI9PT1kW3YrMV0mJihkW3ZdPSJFTiIpLCJDUyIhPT1kW3ZdfHwiRU4iIT09ZFt2LTFdJiYiQU4iIT09ZFt2LTFdfHxkW3YrMV0hPT1kW3YtMV18fChkW3ZdPWRbdi0xXSk7Zm9yKHY9MDt2PGc7Kyt2KWlmKCJFTiI9PT1kW3ZdKXtmb3IodmFyIEY9di0xO0Y+PTAmJiJFVCI9PT1kW0ZdOy0tRilkW0ZdPSJFTiI7Zm9yKHZhciBQPXYrMTtQPGcmJiJFVCI9PT1kW1BdOysrUClkW1BdPSJFTiJ9Zm9yKHY9MDt2PGc7Kyt2KSJXUyIhPT0oUz1kW3ZdKSYmIkVTIiE9PVMmJiJFVCIhPT1TJiYiQ1MiIT09U3x8KGRbdl09Ik9OIik7Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iTCI9PT1DPyJMIjoiRU4iOiJSIiE9PVMmJiJMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdilpZigiT04iPT09ZFt2XSl7dmFyIFQ9YyhkLHYrMSwiT04iKSxJPU87dj4wJiYoST1kW3YtMV0pO3ZhciBFPUE7VCsxPGcmJihFPWRbVCsxXSksIkwiIT09SSYmKEk9IlIiKSwiTCIhPT1FJiYoRT0iUiIpLEk9PT1FJiZ1KGQsdixULEkpLHY9VC0xfWZvcih2PTA7djxnOysrdikiT04iPT09ZFt2XSYmKGRbdl09eCk7Zm9yKHY9MDt2PGc7Kyt2KVM9ZFt2XSxzKGtbdl0pPyJSIj09PVM/a1t2XSs9MToiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0yKToiTCIhPT1TJiYiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0xKTt2YXIgaixNPS0xLF89OTk7Zm9yKHY9MCx5PWsubGVuZ3RoO3Y8eTsrK3YpTTwoaj1rW3ZdKSYmKE09aiksXz5qJiZvKGopJiYoXz1qKTtmb3Ioaj1NO2o+PV87LS1qKXt2YXIgTD0tMTtmb3Iodj0wLHk9ay5sZW5ndGg7djx5OysrdilrW3ZdPGo/TD49MCYmKGwoaCxMLHYpLEw9LTEpOkw8MCYmKEw9dik7TD49MCYmbChoLEwsay5sZW5ndGgpfWZvcih2PTAseT1oLmxlbmd0aDt2PHk7Kyt2KXt2YXIgUj1oW3ZdOyI8IiE9PVImJiI+IiE9PVJ8fChoW3ZdPSIiKX1yZXR1cm4gZihoLmpvaW4oIiIpLHApfTt2YXIgbj1yKDIpLGE9WyJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJTIiwiQiIsIlMiLCJXUyIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkIiLCJCIiwiUyIsIldTIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJFUyIsIkNTIiwiRVMiLCJDUyIsIkNTIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJDUyIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQ1MiLCJPTiIsIkVUIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiT04iLCJPTiIsIkJOIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFTiIsIkVOIiwiT04iLCJMIiwiT04iLCJPTiIsIk9OIiwiRU4iLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCJdLGk9WyJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJPTiIsIk9OIiwiQUwiLCJFVCIsIkVUIiwiQUwiLCJDUyIsIkFMIiwiT04iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCIiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkVUIiwiQU4iLCJBTiIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIl07ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMCE9KDEmZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gMD09KDEmZSl9ZnVuY3Rpb24gYyhlLHQscil7dmFyIG4sYTtmb3Iobj10LGE9ZS5sZW5ndGg7bjxhOysrbilpZihlW25dIT09cilyZXR1cm4gbjtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCxyLG4pe2Zvcih2YXIgYT10O2E8cjsrK2EpZVthXT1ufWZ1bmN0aW9uIGwoZSx0LHIpe2Zvcih2YXIgbj10LGE9ci0xO248YTsrK24sLS1hKXt2YXIgaT1lW25dO2Vbbl09ZVthXSxlW2FdPWl9fWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj0ibHRyIjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXT9yPSJ0dGIiOnR8fChyPSJydGwiKSx7c3RyOmUsZGlyOnJ9fXZhciBoPVtdLGQ9W119LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigyKTtmdW5jdGlvbiBhKGUpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxhKGUpfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxjPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuaDE9dD80Mjk0OTY3Mjk1JnQ6byx0aGlzLmgyPXQ/NDI5NDk2NzI5NSZ0Om99dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt0PW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpLHI9MDtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTthKyspe3ZhciBvPWUuY2hhckNvZGVBdChhKTtvPD0yNTU/dFtyKytdPW86KHRbcisrXT1vPj4+OCx0W3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKGUpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KHQ9ZS5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGw9ci00KnUsZj1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCx1KSxoPTAsZD0wLHA9dGhpcy5oMSxnPXRoaXMuaDIsdj0zNDMyOTE4MzUzLHk9NDYxODQ1OTA3LG09MTE2MDEsYj0xMzcxNSx3PTA7dzx1O3crKykxJnc/cD01KihwPShwXj1oPShoPShoPShoPWZbd10pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2Omc9NSooZz0oZ149ZD0oZD0oZD0oZD1mW3ddKSp2JnN8ZCptJmMpPDwxNXxkPj4+MTcpKnkmc3xkKmImYyk8PDEzfGc+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goaD0wLGwpe2Nhc2UgMzpoXj10WzQqdSsyXTw8MTY7Y2FzZSAyOmhePXRbNCp1KzFdPDw4O2Nhc2UgMTpoPShoPShoPShoXj10WzQqdV0pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjLDEmdT9wXj1oOmdePWh9dGhpcy5oMT1wLHRoaXMuaDI9Z319LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmgxLHQ9dGhpcy5oMjtyZXR1cm4gZT0zOTgxODA2Nzk3KihlXj10Pj4+MSkmc3wzNjA0NSplJmMsZT00NDQ5ODQ0MDMqKGVePSh0PTQyODM1NDM1MTEqdCZzfCgyOTUwMTYzNzk3Kih0PDwxNnxlPj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSplJmMsKChlXj0odD0zMzAxODgyMzY2KnQmc3woMzEyMDQzNzg5MyoodDw8MTZ8ZT4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsodD4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NdXJtdXJIYXNoM182ND11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuT3BlcmF0b3JMaXN0PXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyhlLHQpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHMoZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYyhlKX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1jKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0LHIsbixhKXtmb3IodmFyIGk9ZSxvPTAscz10Lmxlbmd0aC0xO288cztvKyspe3ZhciBjPXRbb107aT1pW2NdfHwoaVtjXT1bXSl9aVt0LmF0KC0xKV09e2NoZWNrRm46cixpdGVyYXRlRm46bixwcm9jZXNzRm46YX19dmFyIGQ9W107aChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxuLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTpyZXR1cm4gclt0XT09PW4uT1BTLnRyYW5zZm9ybTtjYXNlIDI6cmV0dXJuIHJbdF09PT1uLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDtjYXNlIDM6cmV0dXJuIHJbdF09PT1uLk9QUy5yZXN0b3JlfXRocm93IG5ldyBFcnJvcigiaXRlcmF0ZUlubGluZUltYWdlR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwyMDApO2lmKHU8MTApcmV0dXJuIHQtKHQtbyklNDtmb3IodmFyIGw9MCxmPVtdLGg9MCxkPTEscD0xLGc9MDtnPHU7ZysrKXt2YXIgdj1hW3MrKGc8PDIpXSx5PWFbYysoZzw8MildWzBdO2QreS53aWR0aD4xZTMmJihsPU1hdGgubWF4KGwsZCkscCs9aCsyLGQ9MCxoPTApLGYucHVzaCh7dHJhbnNmb3JtOnYseDpkLHk6cCx3Onkud2lkdGgsaDp5LmhlaWdodH0pLGQrPXkud2lkdGgrMixoPU1hdGgubWF4KGgseS5oZWlnaHQpfWZvcih2YXIgbT1NYXRoLm1heChsLGQpKzEsYj1wK2grMSx3PW5ldyBVaW50OEFycmF5KG0qYio0KSxrPW08PDIsUz0wO1M8dTtTKyspe3ZhciB4PWFbYysoUzw8MildWzBdLmRhdGEsTz1mW1NdLnc8PDIsQT0wLEM9ZltTXS54K2ZbU10ueSptPDwyO3cuc2V0KHguc3ViYXJyYXkoMCxPKSxDLWspO2Zvcih2YXIgRj0wLFA9ZltTXS5oO0Y8UDtGKyspdy5zZXQoeC5zdWJhcnJheShBLEErTyksQyksQSs9TyxDKz1rO2Zvcih3LnNldCh4LnN1YmFycmF5KEEtTyxBKSxDKTtDPj0wOyl4W0MtNF09eFtDXSx4W0MtM109eFtDKzFdLHhbQy0yXT14W0MrMl0seFtDLTFdPXhbQyszXSx4W0MrT109eFtDK08tNF0seFtDK08rMV09eFtDK08tM10seFtDK08rMl09eFtDK08tMl0seFtDK08rM109eFtDK08tMV0sQy09a31yZXR1cm4gci5zcGxpY2Uobyw0KnUsbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW3t3aWR0aDptLGhlaWdodDpiLGtpbmQ6bi5JbWFnZUtpbmQuUkdCQV8zMkJQUCxkYXRhOnd9LGZdKSxvKzF9KSksaChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Qsbi5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiByW3RdPT09bi5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiByW3RdPT09bi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gclt0XT09PW4uT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5mbG9vcigodC1vKS80KTtpZih1PDEwKXJldHVybiB0LSh0LW8pJTQ7dmFyIGwsZixoPSExLGQ9YVtjXVswXSxwPWFbc11bMF0sZz1hW3NdWzFdLHY9YVtzXVsyXSx5PWFbc11bM107aWYoZz09PXYpe2g9ITAsbD1zKzQ7Zm9yKHZhciBtPWMrNCxiPTE7Yjx1O2IrKyxsKz00LG0rPTQpaWYoZj1hW2xdLGFbbV1bMF0hPT1kfHxmWzBdIT09cHx8ZlsxXSE9PWd8fGZbMl0hPT12fHxmWzNdIT09eSl7YjwxMD9oPSExOnU9YjticmVha319aWYoaCl7dT1NYXRoLm1pbih1LDFlMyk7dmFyIHc9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2w9cztmb3IodmFyIGs9MDtrPHU7aysrLGwrPTQpZj1hW2xdLHdbazw8MV09Zls0XSx3WzErKGs8PDEpXT1mWzVdO3Iuc3BsaWNlKG8sNCp1LG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KnUsW2QscCxnLHYseSx3XSl9ZWxzZXt1PU1hdGgubWluKHUsMTAwKTtmb3IodmFyIFM9W10seD0wO3g8dTt4Kyspe2Y9YVtzKyh4PDwyKV07dmFyIE89YVtjKyh4PDwyKV1bMF07Uy5wdXNoKHtkYXRhOk8uZGF0YSx3aWR0aDpPLndpZHRoLGhlaWdodDpPLmhlaWdodCxpbnRlcnBvbGF0ZTpPLmludGVycG9sYXRlLGNvdW50Ok8uY291bnQsdHJhbnNmb3JtOmZ9KX1yLnNwbGljZShvLDQqdSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW1NdKX1yZXR1cm4gbysxfSkpLGgoZCxbbi5PUFMuc2F2ZSxuLk9QUy50cmFuc2Zvcm0sbi5PUFMucGFpbnRJbWFnZVhPYmplY3Qsbi5PUFMucmVzdG9yZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXJnc0FycmF5LHI9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFtyXVsxXSYmMD09PXRbcl1bMl19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxpPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTppZihyW3RdIT09bi5PUFMudHJhbnNmb3JtKXJldHVybiExO3ZhciBvPWUuaUN1cnItMixzPWFbb11bMF0sYz1hW29dWzNdO3JldHVybiBhW3RdWzBdPT09cyYmMD09PWFbdF1bMV0mJjA9PT1hW3RdWzJdJiZhW3RdWzNdPT09YztjYXNlIDI6aWYoclt0XSE9PW4uT1BTLnBhaW50SW1hZ2VYT2JqZWN0KXJldHVybiExO3ZhciB1PWFbZS5pQ3Vyci0xXVswXTtyZXR1cm4gYVt0XVswXT09PXU7Y2FzZSAzOnJldHVybiByW3RdPT09bi5PUFMucmVzdG9yZX10aHJvdyBuZXcgRXJyb3IoIml0ZXJhdGVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICIuY29uY2F0KGkpKX0pLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixvPWktMyxzPWktMixjPWFbaS0xXVswXSx1PWFbc11bMF0sbD1hW3NdWzNdLGY9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwxZTMpO2lmKGY8MylyZXR1cm4gdC0odC1vKSU0O2Zvcih2YXIgaD1uZXcgRmxvYXQzMkFycmF5KDIqZiksZD1zLHA9MDtwPGY7cCsrLGQrPTQpe3ZhciBnPWFbZF07aFtwPDwxXT1nWzRdLGhbMSsocDw8MSldPWdbNV19dmFyIHY9W2MsdSxsLGhdO3JldHVybiByLnNwbGljZShvLDQqZixuLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KmYsdiksbysxfSkpLGgoZCxbbi5PUFMuYmVnaW5UZXh0LG4uT1BTLnNldEZvbnQsbi5PUFMuc2V0VGV4dE1hdHJpeCxuLk9QUy5zaG93VGV4dCxuLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9KHQtKGUuaUN1cnItNCkpJTU7c3dpdGNoKGkpe2Nhc2UgMDpyZXR1cm4gclt0XT09PW4uT1BTLmJlZ2luVGV4dDtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy5zZXRGb250O2Nhc2UgMjpyZXR1cm4gclt0XT09PW4uT1BTLnNldFRleHRNYXRyaXg7Y2FzZSAzOmlmKHJbdF0hPT1uLk9QUy5zaG93VGV4dClyZXR1cm4hMTt2YXIgbz1lLmlDdXJyLTMscz1hW29dWzBdLGM9YVtvXVsxXTtyZXR1cm4gYVt0XVswXT09PXMmJmFbdF1bMV09PT1jO2Nhc2UgNDpyZXR1cm4gclt0XT09PW4uT1BTLmVuZFRleHR9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAiLmNvbmNhdChpKSl9KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxhPWUuaUN1cnIsaT1hLTQsbz1hLTMscz1hLTIsYz1hLTEsdT1hLGw9bltvXVswXSxmPW5bb11bMV0saD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LWkpLzUpLDFlMyk7aWYoaDwzKXJldHVybiB0LSh0LWkpJTU7dmFyIGQ9aTtpPj00JiZyW2ktNF09PT1yW29dJiZyW2ktM109PT1yW3NdJiZyW2ktMl09PT1yW2NdJiZyW2ktMV09PT1yW3VdJiZuW2ktNF1bMF09PT1sJiZuW2ktNF1bMV09PT1mJiYoaCsrLGQtPTUpO2Zvcih2YXIgcD1kKzQsZz0xO2c8aDtnKyspci5zcGxpY2UocCwzKSxuLnNwbGljZShwLDMpLHArPTI7cmV0dXJuIHArMX0pKTt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMucXVldWU9dH1yZXR1cm4gZihlLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKSx0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpLHRoaXMuX29wdGltaXplKCl9fSx7a2V5OiJmbHVzaCIsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLGV9KCksZz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShhLGUpO3ZhciB0LHIsbj0odD1hLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1zKHQpO2lmKHIpe3ZhciBhPXModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Yyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGEoZSl7dmFyIHQ7cmV0dXJuIHUodGhpcyxhKSwodD1uLmNhbGwodGhpcyxlKSkuc3RhdGU9bnVsbCx0LmNvbnRleHQ9e2lDdXJyOjAsZm5BcnJheTplLmZuQXJyYXksYXJnc0FycmF5OmUuYXJnc0FycmF5fSx0Lm1hdGNoPW51bGwsdC5sYXN0UHJvY2Vzc2VkPTAsdH1yZXR1cm4gZihhLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5xdWV1ZS5mbkFycmF5LHQ9dGhpcy5sYXN0UHJvY2Vzc2VkLHI9ZS5sZW5ndGgsbj10aGlzLnN0YXRlLGE9dGhpcy5tYXRjaDtpZihufHxhfHx0KzEhPT1yfHxkW2VbdF1dKXtmb3IodmFyIGk9dGhpcy5jb250ZXh0O3Q8cjspe2lmKGEpe2lmKCgwLGEuaXRlcmF0ZUZuKShpLHQpKXt0Kys7Y29udGludWV9aWYodD0oMCxhLnByb2Nlc3NGbikoaSx0KzEpLGE9bnVsbCxuPW51bGwsdD49KHI9ZS5sZW5ndGgpKWJyZWFrfShuPShufHxkKVtlW3RdXSkmJiFBcnJheS5pc0FycmF5KG4pPyhpLmlDdXJyPXQsdCsrLCFuLmNoZWNrRm58fCgwLG4uY2hlY2tGbikoaSk/KGE9bixuPW51bGwpOm49bnVsbCk6dCsrfXRoaXMuc3RhdGU9bix0aGlzLm1hdGNoPWEsdGhpcy5sYXN0UHJvY2Vzc2VkPXR9ZWxzZSB0aGlzLmxhc3RQcm9jZXNzZWQ9cn19LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe2Zvcig7dGhpcy5tYXRjaDspe3ZhciBlPXRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7dGhpcy5sYXN0UHJvY2Vzc2VkPSgwLHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsZSksdGhpcy5tYXRjaD1udWxsLHRoaXMuc3RhdGU9bnVsbCx0aGlzLl9vcHRpbWl6ZSgpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhdGU9bnVsbCx0aGlzLm1hdGNoPW51bGwsdGhpcy5sYXN0UHJvY2Vzc2VkPTB9fV0pLGF9KHApLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt1KHRoaXMsZSksdGhpcy5fc3RyZWFtU2luaz1yLHRoaXMuZm5BcnJheT1bXSx0aGlzLmFyZ3NBcnJheT1bXSwhcnx8dCZuLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUP3RoaXMub3B0aW1pemVyPW5ldyBwKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBnKHRoaXMpLHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5fdG90YWxMZW5ndGg9MCx0aGlzLndlaWdodD0wLHRoaXMuX3Jlc29sdmVkPXI/bnVsbDpQcm9taXNlLnJlc29sdmUoKX1yZXR1cm4gZihlLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9fSx7a2V5OiJyZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fX0se2tleToidG90YWxMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH19LHtrZXk6ImFkZE9wIix2YWx1ZTpmdW5jdGlvbih0LHIpe3RoaXMub3B0aW1pemVyLnB1c2godCxyKSx0aGlzLndlaWdodCsrLHRoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFfHx0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFX0FCT1VUJiYodD09PW4uT1BTLnJlc3RvcmV8fHQ9PT1uLk9QUy5lbmRUZXh0KSkmJnRoaXMuZmx1c2goKX19LHtrZXk6ImFkZEltYWdlT3BzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dm9pZCAwIT09ciYmdGhpcy5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixyXSksdGhpcy5hZGRPcChlLHQpLHZvaWQgMCE9PXImJnRoaXMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSl9fSx7a2V5OiJhZGREZXBlbmRlbmN5Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRlcGVuZGVuY2llcy5oYXMoZSl8fCh0aGlzLmRlcGVuZGVuY2llcy5hZGQoZSksdGhpcy5hZGRPcChuLk9QUy5kZXBlbmRlbmN5LFtlXSkpfX0se2tleToiYWRkRGVwZW5kZW5jaWVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWEoZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO3RoaXMuYWRkRGVwZW5kZW5jeShuKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9fX0se2tleToiYWRkT3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZSl7dmFyIHIsaT1hKHQuZGVwZW5kZW5jaWVzKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1mb3IodmFyIHM9MCxjPXQubGVuZ3RoO3M8YztzKyspdGhpcy5hZGRPcCh0LmZuQXJyYXlbc10sdC5hcmdzQXJyYXlbc10pfWVsc2UoMCxuLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX19LHtrZXk6Il90cmFuc2ZlcnMiLGdldDpmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXRoaXMuZm5BcnJheSxyPXRoaXMuYXJnc0FycmF5LGE9dGhpcy5sZW5ndGgsaT0wO2k8YTtpKyspc3dpdGNoKHRbaV0pe2Nhc2Ugbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6Y2FzZSBuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOmNhc2Ugbi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OnZhciBvPXJbaV1bMF07IW8uY2FjaGVkJiZvLmRhdGEmJm8uZGF0YS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmZS5wdXNoKG8uZGF0YS5idWZmZXIpfXJldHVybiBlfX0se2tleToiZmx1c2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMub3B0aW1pemVyLmZsdXNoKCk7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPXIsdGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGFzdENodW5rOmUsc2VwYXJhdGVBbm5vdHM6dCxsZW5ndGg6cn0sMSx0aGlzLl90cmFuc2ZlcnMpLHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCksdGhpcy5mbkFycmF5Lmxlbmd0aD0wLHRoaXMuYXJnc0FycmF5Lmxlbmd0aD0wLHRoaXMud2VpZ2h0PTAsdGhpcy5vcHRpbWl6ZXIucmVzZXQoKX19XSxbe2tleToiQ0hVTktfU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkNIVU5LX1NJWkUiLDFlMyl9fSx7a2V5OiJDSFVOS19TSVpFX0FCT1VUIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiQ0hVTktfU0laRV9BQk9VVCIsdGhpcy5DSFVOS19TSVpFLTUpfX1dKSxlfSgpO3QuT3BlcmF0b3JMaXN0PXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTkzKSxpPXIoMTM2KSxvPXIoMTQzKSxzPXIoMTQ4KSxjPXIoMTU2KSx1PXIoMTU5KSxsPXIoMTM0KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWYoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscixuKXtyZXR1cm4oZT10K2Uqcik8MD9lPTA6ZT5uJiYoZT1uKSxlfWZ1bmN0aW9uIHYoZSx0LHIsbixhLGkpe3ZhciBvLHM9YSppO289dDw9OD9uZXcgVWludDhBcnJheShzKTp0PD0xNj9uZXcgVWludDE2QXJyYXkocyk6bmV3IFVpbnQzMkFycmF5KHMpO3ZhciBjLHUsbCxmLGg9ci9hLGQ9bi9pLHA9MCxnPW5ldyBVaW50MTZBcnJheShhKSx2PXI7Zm9yKGM9MDtjPGE7YysrKWdbY109TWF0aC5mbG9vcihjKmgpO2ZvcihjPTA7YzxpO2MrKylmb3IobD1NYXRoLmZsb29yKGMqZCkqdix1PTA7dTxhO3UrKylmPWwrZ1t1XSxvW3ArK109ZVtmXTtyZXR1cm4gb312YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLGE9dC5yZXMscz10LmltYWdlLGM9dC5pc0lubGluZSxmPXZvaWQgMCE9PWMmJmMsaD10LnNtYXNrLGQ9dm9pZCAwPT09aD9udWxsOmgscD10Lm1hc2ssZz12b2lkIDA9PT1wP251bGw6cCx2PXQuaXNNYXNrLHk9dm9pZCAwIT09diYmdixtPXQucGRmRnVuY3Rpb25GYWN0b3J5LGI9dC5sb2NhbENvbG9yU3BhY2VDYWNoZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmltYWdlPXM7dmFyIHcsaz1zLmRpY3QsUz1rLmdldCgiRiIsIkZpbHRlciIpO2lmKFMgaW5zdGFuY2VvZiBsLk5hbWUpdz1TLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KFMpKXt2YXIgeD1yLmZldGNoSWZSZWYoU1swXSk7eCBpbnN0YW5jZW9mIGwuTmFtZSYmKHc9eC5uYW1lKX1zd2l0Y2godyl7Y2FzZSJKUFhEZWNvZGUiOnZhciBPPW5ldyB1LkpweEltYWdlO08ucGFyc2VJbWFnZVByb3BlcnRpZXMocy5zdHJlYW0pLHMuc3RyZWFtLnJlc2V0KCkscy53aWR0aD1PLndpZHRoLHMuaGVpZ2h0PU8uaGVpZ2h0LHMuYml0c1BlckNvbXBvbmVudD1PLmJpdHNQZXJDb21wb25lbnQscy5udW1Db21wcz1PLmNvbXBvbmVudHNDb3VudDticmVhaztjYXNlIkpCSUcyRGVjb2RlIjpzLmJpdHNQZXJDb21wb25lbnQ9MSxzLm51bUNvbXBzPTF9dmFyIEE9ay5nZXQoIlciLCJXaWR0aCIpLEM9ay5nZXQoIkgiLCJIZWlnaHQiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHMud2lkdGgpJiZzLndpZHRoPjAmJk51bWJlci5pc0ludGVnZXIocy5oZWlnaHQpJiZzLmhlaWdodD4wJiYocy53aWR0aCE9PUF8fHMuaGVpZ2h0IT09QykmJigoMCxuLndhcm4pKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpLEE9cy53aWR0aCxDPXMuaGVpZ2h0KSxBPDF8fEM8MSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBpbWFnZSB3aWR0aDogIi5jb25jYXQoQSwiIG9yIGhlaWdodDogIikuY29uY2F0KEMpKTt0aGlzLndpZHRoPUEsdGhpcy5oZWlnaHQ9Qyx0aGlzLmludGVycG9sYXRlPWsuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSx0aGlzLmltYWdlTWFzaz1rLmdldCgiSU0iLCJJbWFnZU1hc2siKXx8ITEsdGhpcy5tYXR0ZT1rLmdldCgiTWF0dGUiKXx8ITE7dmFyIEY9cy5iaXRzUGVyQ29tcG9uZW50O2lmKCFGJiYhKEY9ay5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKSkpe2lmKCF0aGlzLmltYWdlTWFzayl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6ICIuY29uY2F0KHRoaXMuaW1hZ2VNYXNrKSk7Rj0xfWlmKHRoaXMuYnBjPUYsIXRoaXMuaW1hZ2VNYXNrKXt2YXIgUD1rLmdldFJhdygiQ1MiKXx8ay5nZXRSYXcoIkNvbG9yU3BhY2UiKTtpZighUClzd2l0Y2goKDAsbi5pbmZvKSgiSlBYIGltYWdlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgY29sb3Igc3BhY2VzKSIpLHMubnVtQ29tcHMpe2Nhc2UgMTpQPWwuTmFtZS5nZXQoIkRldmljZUdyYXkiKTticmVhaztjYXNlIDM6UD1sLk5hbWUuZ2V0KCJEZXZpY2VSR0IiKTticmVhaztjYXNlIDQ6UD1sLk5hbWUuZ2V0KCJEZXZpY2VDTVlLIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkpQWCBpbWFnZXMgd2l0aCAiLmNvbmNhdChzLm51bUNvbXBzLCIgY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLiIpKX10aGlzLmNvbG9yU3BhY2U9by5Db2xvclNwYWNlLnBhcnNlKHtjczpQLHhyZWY6cixyZXNvdXJjZXM6Zj9hOm51bGwscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pLHRoaXMubnVtQ29tcHM9dGhpcy5jb2xvclNwYWNlLm51bUNvbXBzfWlmKHRoaXMuZGVjb2RlPWsuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKSx0aGlzLm5lZWRzRGVjb2RlPSExLHRoaXMuZGVjb2RlJiYodGhpcy5jb2xvclNwYWNlJiYhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSxGKXx8eSYmIW8uQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsMSkpKXt0aGlzLm5lZWRzRGVjb2RlPSEwO3ZhciBUPSgxPDxGKS0xO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzPVtdLHRoaXMuZGVjb2RlQWRkZW5kcz1bXTtmb3IodmFyIEk9dGhpcy5jb2xvclNwYWNlJiYiSW5kZXhlZCI9PT10aGlzLmNvbG9yU3BhY2UubmFtZSxFPTAsaj0wO0U8dGhpcy5kZWNvZGUubGVuZ3RoO0UrPTIsKytqKXt2YXIgTT10aGlzLmRlY29kZVtFXSxfPXRoaXMuZGVjb2RlW0UrMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbal09ST8oXy1NKS9UOl8tTSx0aGlzLmRlY29kZUFkZGVuZHNbal09ST9NOlQqTX19ZD90aGlzLnNtYXNrPW5ldyBlKHt4cmVmOnIscmVzOmEsaW1hZ2U6ZCxpc0lubGluZTpmLHBkZkZ1bmN0aW9uRmFjdG9yeTptLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmJ9KTpnJiYoZyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9nLmRpY3QuZ2V0KCJJTSIsIkltYWdlTWFzayIpP3RoaXMubWFzaz1uZXcgZSh7eHJlZjpyLHJlczphLGltYWdlOmcsaXNJbmxpbmU6Zixpc01hc2s6ITAscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pOigwLG4ud2FybikoIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKTp0aGlzLm1hc2s9Zyl9dmFyIHQscixmLHksbTtyZXR1cm4gdD1lLHI9W3trZXk6ImRyYXdXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMud2lkdGgsdGhpcy5zbWFzayYmdGhpcy5zbWFzay53aWR0aHx8MCx0aGlzLm1hc2smJnRoaXMubWFzay53aWR0aHx8MCl9fSx7a2V5OiJkcmF3SGVpZ2h0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsdGhpcy5zbWFzayYmdGhpcy5zbWFzay5oZWlnaHR8fDAsdGhpcy5tYXNrJiZ0aGlzLm1hc2suaGVpZ2h0fHwwKX19LHtrZXk6ImRlY29kZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMuYnBjLGE9dGhpcy5udW1Db21wcyxpPXRoaXMuZGVjb2RlQWRkZW5kcyxvPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLHM9KDE8PG4pLTE7aWYoMSE9PW4pe3ZhciBjPTA7Zm9yKHQ9MCxyPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7dDxyO3QrKylmb3IodmFyIHU9MDt1PGE7dSsrKWVbY109ZyhlW2NdLGlbdV0sb1t1XSxzKSxjKyt9ZWxzZSBmb3IodD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyllW3RdPSshZVt0XX19LHtrZXk6ImdldENvbXBvbmVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnBjO2lmKDg9PT10KXJldHVybiBlO3ZhciByLG49dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LGk9dGhpcy5udW1Db21wcyxvPW4qYSppLHM9MDtyPXQ8PTg/bmV3IFVpbnQ4QXJyYXkobyk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KG8pOm5ldyBVaW50MzJBcnJheShvKTt2YXIgYyx1LGw9bippLGY9KDE8PHQpLTEsaD0wO2lmKDE9PT10KWZvcih2YXIgZCxwLGcsdj0wO3Y8YTt2Kyspe2ZvcihwPWgrKC04JmwpLGc9aCtsO2g8cDspdT1lW3MrK10scltoXT11Pj43JjEscltoKzFdPXU+PjYmMSxyW2grMl09dT4+NSYxLHJbaCszXT11Pj40JjEscltoKzRdPXU+PjMmMSxyW2grNV09dT4+MiYxLHJbaCs2XT11Pj4xJjEscltoKzddPTEmdSxoKz04O2lmKGg8Zylmb3IodT1lW3MrK10sZD0xMjg7aDxnOylyW2grK109KyEhKHUmZCksZD4+PTF9ZWxzZXt2YXIgeT0wO2Zvcih1PTAsaD0wLGM9bztoPGM7KytoKXtmb3IoaCVsPT0wJiYodT0wLHk9MCk7eTx0Oyl1PXU8PDh8ZVtzKytdLHkrPTg7dmFyIG09eS10LGI9dT4+bTtiPDA/Yj0wOmI+ZiYmKGI9ZikscltoXT1iLHUmPSgxPDxtKS0xLHk9bX19cmV0dXJuIHJ9fSx7a2V5OiJmaWxsT3BhY2l0eSIsdmFsdWU6ZnVuY3Rpb24odCxyLGEsaSxvKXt2YXIgcyxjLHUsbCxmLGgsZD10aGlzLnNtYXNrLHA9dGhpcy5tYXNrO2lmKGQpYz1kLndpZHRoLHU9ZC5oZWlnaHQscz1uZXcgVWludDhDbGFtcGVkQXJyYXkoYyp1KSxkLmZpbGxHcmF5QnVmZmVyKHMpLGM9PT1yJiZ1PT09YXx8KHM9dihzLGQuYnBjLGMsdSxyLGEpKTtlbHNlIGlmKHApaWYocCBpbnN0YW5jZW9mIGUpe2ZvcihjPXAud2lkdGgsdT1wLmhlaWdodCxzPW5ldyBVaW50OENsYW1wZWRBcnJheShjKnUpLHAubnVtQ29tcHM9MSxwLmZpbGxHcmF5QnVmZmVyKHMpLGw9MCxmPWMqdTtsPGY7KytsKXNbbF09MjU1LXNbbF07Yz09PXImJnU9PT1hfHwocz12KHMscC5icGMsYyx1LHIsYSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkocCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gbWFzayBmb3JtYXQuIik7cz1uZXcgVWludDhDbGFtcGVkQXJyYXkociphKTt2YXIgZz10aGlzLm51bUNvbXBzO2ZvcihsPTAsZj1yKmE7bDxmOysrbCl7dmFyIHk9MCxtPWwqZztmb3IoaD0wO2g8ZzsrK2gpe3ZhciBiPW9bbStoXSx3PTIqaDtpZihiPHBbd118fGI+cFt3KzFdKXt5PTI1NTticmVha319c1tsXT15fX1pZihzKWZvcihsPTAsaD0zLGY9cippO2w8ZjsrK2wsaCs9NCl0W2hdPXNbbF07ZWxzZSBmb3IobD0wLGg9MyxmPXIqaTtsPGY7KytsLGgrPTQpdFtoXT0yNTV9fSx7a2V5OiJ1bmRvUHJlYmxlbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLm1hdHRlO2lmKG4pZm9yKHZhciBhPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IobiwwKSxpPWFbMF0sbz1hWzFdLHM9YVsyXSxjPXQqcio0LHU9MDt1PGM7dSs9NCl7dmFyIGw9ZVt1KzNdO2lmKDAhPT1sKXt2YXIgZj0yNTUvbDtlW3VdPShlW3VdLWkpKmYraSxlW3UrMV09KGVbdSsxXS1vKSpmK28sZVt1KzJdPShlW3UrMl0tcykqZitzfWVsc2UgZVt1XT0yNTUsZVt1KzFdPTI1NSxlW3UrMl09MjU1fX19LHtrZXk6ImNyZWF0ZUltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9dGhpcy5kcmF3V2lkdGgscj10aGlzLmRyYXdIZWlnaHQsYT17d2lkdGg6dCxoZWlnaHQ6cixpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlLGtpbmQ6MCxkYXRhOm51bGx9LGk9dGhpcy5udW1Db21wcyxvPXRoaXMud2lkdGgscz10aGlzLmhlaWdodCx1PXRoaXMuYnBjLGw9byppKnUrNz4+MztpZighZSl7dmFyIGY7aWYoIkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT11P2Y9bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PXV8fHRoaXMubmVlZHNEZWNvZGV8fChmPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCksZiYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJnQ9PT1vJiZyPT09cyl7aWYoYS5raW5kPWYsYS5kYXRhPXRoaXMuZ2V0SW1hZ2VCeXRlcyhzKmwse30pLHRoaXMubmVlZHNEZWNvZGUpeygwLG4uYXNzZXJ0KShmPT09bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2Zvcih2YXIgaD1hLmRhdGEsZD0wLHA9aC5sZW5ndGg7ZDxwO2QrKyloW2RdXj0yNTV9cmV0dXJuIGF9aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIGMuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2spe3ZhciBnPXMqbDtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6Zyo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gYS5raW5kPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCxhLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKGcse2RyYXdXaWR0aDp0LGRyYXdIZWlnaHQ6cixmb3JjZVJHQjohMH0pLGF9fX12YXIgdix5LG09dGhpcy5nZXRJbWFnZUJ5dGVzKHMqbCx7aW50ZXJuYWw6ITB9KSxiPTB8bS5sZW5ndGgvbCpyL3Msdz10aGlzLmdldENvbXBvbmVudHMobSk7cmV0dXJuIGV8fHRoaXMuc21hc2t8fHRoaXMubWFzaz8oYS5raW5kPW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFAsYS5kYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KnIqNCksdj0xLHk9ITAsdGhpcy5maWxsT3BhY2l0eShhLmRhdGEsdCxyLGIsdykpOihhLmtpbmQ9bi5JbWFnZUtpbmQuUkdCXzI0QlBQLGEuZGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCpyKjMpLHY9MCx5PSExKSx0aGlzLm5lZWRzRGVjb2RlJiZ0aGlzLmRlY29kZUJ1ZmZlcih3KSx0aGlzLmNvbG9yU3BhY2UuZmlsbFJnYihhLmRhdGEsbyxzLHQscixiLHUsdyx2KSx5JiZ0aGlzLnVuZG9QcmVibGVuZChhLmRhdGEsdCxiKSxhfX0se2tleToiZmlsbEdyYXlCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlJlYWRpbmcgZ3JheSBzY2FsZSBmcm9tIGEgY29sb3IgaW1hZ2U6ICIuY29uY2F0KHQpKTt2YXIgcixhLGk9dGhpcy53aWR0aCxvPXRoaXMuaGVpZ2h0LHM9dGhpcy5icGMsYz1pKnQqcys3Pj4zLHU9dGhpcy5nZXRJbWFnZUJ5dGVzKG8qYyx7aW50ZXJuYWw6ITB9KSxsPXRoaXMuZ2V0Q29tcG9uZW50cyh1KTtpZigxIT09cyl7dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIobCksYT1pKm87dmFyIGY9MjU1LygoMTw8cyktMSk7Zm9yKHI9MDtyPGE7KytyKWVbcl09ZipsW3JdfWVsc2UgaWYoYT1pKm8sdGhpcy5uZWVkc0RlY29kZSlmb3Iocj0wO3I8YTsrK3IpZVtyXT1sW3JdLTEmMjU1O2Vsc2UgZm9yKHI9MDtyPGE7KytyKWVbcl09MjU1Ji1sW3JdfX0se2tleToiZ2V0SW1hZ2VCeXRlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmRyYXdXaWR0aCxhPXQuZHJhd0hlaWdodCxpPXQuZm9yY2VSR0Isbz12b2lkIDAhPT1pJiZpLGM9dC5pbnRlcm5hbCx1PXZvaWQgMCE9PWMmJmM7dGhpcy5pbWFnZS5yZXNldCgpLHRoaXMuaW1hZ2UuZHJhd1dpZHRoPXJ8fHRoaXMud2lkdGgsdGhpcy5pbWFnZS5kcmF3SGVpZ2h0PWF8fHRoaXMuaGVpZ2h0LHRoaXMuaW1hZ2UuZm9yY2VSR0I9ISFvO3ZhciBsPXRoaXMuaW1hZ2UuZ2V0Qnl0ZXMoZSk7cmV0dXJuIHV8fHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBzLkRlY29kZVN0cmVhbT9sOigoMCxuLmFzc2VydCkobCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksJ1BERkltYWdlLmdldEltYWdlQnl0ZXM6IFVuc3VwcG9ydGVkICJpbWFnZUJ5dGVzIiB0eXBlLicpLG5ldyBVaW50OEFycmF5KGwpKX19XSxmPVt7a2V5OiJidWlsZEltYWdlIix2YWx1ZTooeT1oKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgYSxvLHMsYyx1LGwsZixkLHAsZyx2LHk7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gYT1yLnhyZWYsbz1yLnJlcyxzPXIuaW1hZ2UsYz1yLmlzSW5saW5lLHU9dm9pZCAwIT09YyYmYyxsPXIucGRmRnVuY3Rpb25GYWN0b3J5LGY9ci5sb2NhbENvbG9yU3BhY2VDYWNoZSxkPXMscD1udWxsLGc9bnVsbCx2PXMuZGljdC5nZXQoIlNNYXNrIikseT1zLmRpY3QuZ2V0KCJNYXNrIiksdj92IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtP3A9djooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvU01hc2sgZm9ybWF0LiIpOnkmJih5IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KHkpP2c9eTooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvTWFzayBmb3JtYXQuIikpLHQuYWJydXB0KCJyZXR1cm4iLG5ldyBlKHt4cmVmOmEscmVzOm8saW1hZ2U6ZCxpc0lubGluZTp1LHNtYXNrOnAsbWFzazpnLHBkZkZ1bmN0aW9uRmFjdG9yeTpsLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSksbT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXkuYXBwbHkoZSx0KTtmdW5jdGlvbiBpKGUpe2QoYSxyLG4saSxvLCJuZXh0IixlKX1mdW5jdGlvbiBvKGUpe2QoYSxyLG4saSxvLCJ0aHJvdyIsZSl9aSh2b2lkIDApfSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY3JlYXRlUmF3TWFzayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPWUuaW1nQXJyYXksYT1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PShhKzc+PjMpKmksbD1uLmJ5dGVMZW5ndGg7aWYoIW98fHMmJnUhPT1sP3M/KCh0PW5ldyBVaW50OEFycmF5KHUpKS5zZXQobiksdC5maWxsKDI1NSxsKSk6dD1uZXcgVWludDhBcnJheShuKTp0PW4scylmb3Iocj0wO3I8bDtyKyspdFtyXV49MjU1O3JldHVybntkYXRhOnQsd2lkdGg6YSxoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpjfX19LHtrZXk6ImNyZWF0ZU1hc2siLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW1nQXJyYXkscj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PWUuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsbD12b2lkIDA9PT11fHx1LGY9MT09PXImJjE9PT1pJiZzPT09KDA9PT10Lmxlbmd0aHx8ISEoMTI4JnRbMF0pKTtpZihmKXJldHVybntpc1NpbmdsZU9wYXF1ZVBpeGVsOmZ9O2lmKGwmJm4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe3ZhciBoPW5ldyBPZmZzY3JlZW5DYW52YXMocixpKSxkPWguZ2V0Q29udGV4dCgiMmQiKSxwPWQuY3JlYXRlSW1hZ2VEYXRhKHIsaSk7cmV0dXJuKDAsYS5hcHBseU1hc2tJbWFnZURhdGEpKHtzcmM6dCxkZXN0OnAuZGF0YSx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6c30pLGQucHV0SW1hZ2VEYXRhKHAsMCwwKSx7ZGF0YTpudWxsLHdpZHRoOnIsaGVpZ2h0OmksaW50ZXJwb2xhdGU6YyxiaXRtYXA6aC50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX19cmV0dXJuIHRoaXMuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6dCx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6cyxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpvLGludGVycG9sYXRlOmN9KX19XSxyJiZwKHQucHJvdG90eXBlLHIpLGYmJnAodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuUERGSW1hZ2U9eX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFwcGx5TWFza0ltYWdlRGF0YT1mdW5jdGlvbihlKXt2YXIgdCxyPWUuc3JjLGk9ZS5zcmNQb3Msbz12b2lkIDA9PT1pPzA6aSxzPWUuZGVzdCxjPWUuZGVzdFBvcyx1PXZvaWQgMD09PWM/MDpjLGw9ZS53aWR0aCxmPWUuaGVpZ2h0LGg9ZS5pbnZlcnNlRGVjb2RlLGQ9dm9pZCAwIT09aCYmaCxwPW4uRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUsZz1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0PWQ/WzAscF06W3AsMF0pfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLDIpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSwyKTp2b2lkIDB9fSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpLHY9Z1swXSx5PWdbMV0sbT1sPj4zLGI9NyZsLHc9ci5sZW5ndGg7cz1uZXcgVWludDMyQXJyYXkocy5idWZmZXIpO2Zvcih2YXIgaz0wO2s8ZjtrKyspe2Zvcih2YXIgUz1vK207bzxTO28rKyl7dmFyIHg9bzx3P3Jbb106MjU1O3NbdSsrXT0xMjgmeD95OnYsc1t1KytdPTY0Jng/eTp2LHNbdSsrXT0zMiZ4P3k6dixzW3UrK109MTYmeD95OnYsc1t1KytdPTgmeD95OnYsc1t1KytdPTQmeD95OnYsc1t1KytdPTImeD95OnYsc1t1KytdPTEmeD95OnZ9aWYoMCE9PWIpZm9yKHZhciBPPW88dz9yW28rK106MjU1LEE9MDtBPGI7QSsrKXNbdSsrXT1PJjE8PDctQT95OnZ9cmV0dXJue3NyY1BvczpvLGRlc3RQb3M6dX19O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmluY3JlbWVudGFsVXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3JpZ2luYWxEYXRhLHI9ZS54cmVmSW5mbyxzPWUubmV3UmVmcyx1PWUueHJlZixoPXZvaWQgMD09PXU/bnVsbDp1LGc9ZS5oYXNYZmEsdj12b2lkIDAhPT1nJiZnLGI9ZS54ZmFEYXRhc2V0c1JlZix3PXZvaWQgMD09PWI/bnVsbDpiLGs9ZS5oYXNYZmFEYXRhc2V0c0VudHJ5LFM9dm9pZCAwIT09ayYmayx4PWUubmVlZEFwcGVhcmFuY2VzLE89ZS5hY3JvRm9ybVJlZixBPXZvaWQgMD09PU8/bnVsbDpPLEM9ZS5hY3JvRm9ybSxGPXZvaWQgMD09PUM/bnVsbDpDLFA9ZS54ZmFEYXRhLFQ9dm9pZCAwPT09UD9udWxsOlA7KGZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuYWNyb0Zvcm0saT1lLmFjcm9Gb3JtUmVmLG89ZS5oYXNYZmEscz1lLmhhc1hmYURhdGFzZXRzRW50cnksYz1lLnhmYURhdGFzZXRzUmVmLHU9ZS5uZWVkQXBwZWFyYW5jZXMsZj1lLm5ld1JlZnM7aWYoIW98fHN8fGN8fCgwLG4ud2FybikoIlhGQSAtIENhbm5vdCBzYXZlIGl0IiksdXx8byYmYyl7dmFyIGgscD1uZXcgYS5EaWN0KHQpLGc9bChyLmdldEtleXMoKSk7dHJ5e2ZvcihnLnMoKTshKGg9Zy5uKCkpLmRvbmU7KXt2YXIgdj1oLnZhbHVlO3Auc2V0KHYsci5nZXRSYXcodikpfX1jYXRjaChlKXtnLmUoZSl9ZmluYWxseXtnLmYoKX1pZihvJiYhcyl7dmFyIHk9ci5nZXQoIlhGQSIpLnNsaWNlKCk7eS5zcGxpY2UoMiwwLCJkYXRhc2V0cyIpLHkuc3BsaWNlKDMsMCxjKSxwLnNldCgiWEZBIix5KX11JiZwLnNldCgiTmVlZEFwcGVhcmFuY2VzIiwhMCk7dmFyIG09dC5lbmNyeXB0LGI9bnVsbDttJiYoYj1tLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShpLm51bSxpLmdlbikpO3ZhciB3PVtdO2QoaSxwLHcsYiksZi5wdXNoKHtyZWY6aSxkYXRhOncuam9pbigiIil9KX19KSh7eHJlZjpoLGFjcm9Gb3JtOkYsYWNyb0Zvcm1SZWY6QSxoYXNYZmE6dixoYXNYZmFEYXRhc2V0c0VudHJ5OlMseGZhRGF0YXNldHNSZWY6dyxuZWVkQXBwZWFyYW5jZXM6eCxuZXdSZWZzOnN9KSx2JiZmdW5jdGlvbihlKXt2YXIgdD1lLnhmYURhdGEscj1lLnhmYURhdGFzZXRzUmVmLGE9ZS5uZXdSZWZzLHM9ZS54cmVmO251bGw9PT10JiYodD1mdW5jdGlvbihlLHQpe3ZhciByLGE9bmV3IG8uU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpLHM9bCh0KTt0cnl7Zm9yKHMucygpOyEocj1zLm4oKSkuZG9uZTspe3ZhciBjPXIudmFsdWUueGZhO2lmKGMpe3ZhciB1PWMucGF0aCxmPWMudmFsdWU7aWYodSl7dmFyIGg9YS5kb2N1bWVudEVsZW1lbnQuc2VhcmNoTm9kZSgoMCxpLnBhcnNlWEZBUGF0aCkodSksMCk7aD9BcnJheS5pc0FycmF5KGYpP2guY2hpbGROb2Rlcz1mLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBvLlNpbXBsZURPTU5vZGUoInZhbHVlIixlKX0pKTpoLmNoaWxkTm9kZXM9W25ldyBvLlNpbXBsZURPTU5vZGUoIiN0ZXh0IixmKV06KDAsbi53YXJuKSgiTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICIuY29uY2F0KHUpKX19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgZD1bXTtyZXR1cm4gYS5kb2N1bWVudEVsZW1lbnQuZHVtcChkKSxkLmpvaW4oIiIpfShzLmZldGNoSWZSZWYocikuZ2V0U3RyaW5nKCksYSkpO3ZhciBjPXMuZW5jcnlwdDtjJiYodD1jLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShyLm51bSxyLmdlbikuZW5jcnlwdFN0cmluZyh0KSk7dmFyIHU9IiIuY29uY2F0KHIubnVtLCIgIikuY29uY2F0KHIuZ2VuLCIgb2JqXG4iKSsiPDwgL1R5cGUgL0VtYmVkZGVkRmlsZSAvTGVuZ3RoICIuY29uY2F0KHQubGVuZ3RoLCI+Plxuc3RyZWFtXG4iKSt0KyJcbmVuZHN0cmVhbVxuZW5kb2JqXG4iO2EucHVzaCh7cmVmOnIsZGF0YTp1fSl9KHt4ZmFEYXRhOlQseGZhRGF0YXNldHNSZWY6dyxuZXdSZWZzOnMseHJlZjpofSk7dmFyIEksRSxqPW5ldyBhLkRpY3QobnVsbCksTT1yLm5ld1JlZixfPXQuYXQoLTEpOzEwPT09X3x8MTM9PT1fPyhJPVtdLEU9dC5sZW5ndGgpOihJPVsiXG4iXSxFPXQubGVuZ3RoKzEpLGouc2V0KCJTaXplIixNLm51bSsxKSxqLnNldCgiUHJldiIsci5zdGFydFhSZWYpLGouc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYUmVmIikpLG51bGwhPT1yLnJvb3RSZWYmJmouc2V0KCJSb290IixyLnJvb3RSZWYpLG51bGwhPT1yLmluZm9SZWYmJmouc2V0KCJJbmZvIixyLmluZm9SZWYpLG51bGwhPT1yLmVuY3J5cHRSZWYmJmouc2V0KCJFbmNyeXB0IixyLmVuY3J5cHRSZWYpLHMucHVzaCh7cmVmOk0sZGF0YToiIn0pO3ZhciBMLFI9W1swLDEsNjU1MzVdXSxOPVswLDFdLEQ9MCxCPWwocz1zLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVmLm51bS10LnJlZi5udW19KSkpO3RyeXtmb3IoQi5zKCk7IShMPUIubigpKS5kb25lOyl7dmFyIFU9TC52YWx1ZSwkPVUucmVmLFg9VS5kYXRhO0Q9TWF0aC5tYXgoRCxFKSxSLnB1c2goWzEsRSxNYXRoLm1pbigkLmdlbiw2NTUzNSldKSxFKz1YLmxlbmd0aCxOLnB1c2goJC5udW0sMSksSS5wdXNoKFgpfX1jYXRjaChlKXtCLmUoZSl9ZmluYWxseXtCLmYoKX1pZihqLnNldCgiSW5kZXgiLE4pLEFycmF5LmlzQXJyYXkoci5maWxlSWRzKSYmci5maWxlSWRzLmxlbmd0aD4wKXt2YXIgSD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLmZsb29yKERhdGUubm93KCkvMWUzKSxhPXQuZmlsZW5hbWV8fCIiLGk9W3IudG9TdHJpbmcoKSxhLGUudG9TdHJpbmcoKV0sbz1pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLHM9MCx1PU9iamVjdC52YWx1ZXModC5pbmZvKTtzPHUubGVuZ3RoO3MrKyl7dmFyIGw9dVtzXTtpLnB1c2gobCksbys9bC5sZW5ndGh9Zm9yKHZhciBmPW5ldyBVaW50OEFycmF5KG8pLGg9MCxkPTAscD1pO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1wW2RdO20oZyxoLGYpLGgrPWcubGVuZ3RofXJldHVybigwLG4uYnl0ZXNUb1N0cmluZykoKDAsYy5jYWxjdWxhdGVNRDUpKGYpKX0oRSxyKTtqLnNldCgiSUQiLFtyLmZpbGVJZHNbMF0sSF0pfXZhciBxPVsxLE1hdGguY2VpbChNYXRoLmxvZzIoRCkvOCksMl0sRz0ocVswXStxWzFdK3FbMl0pKlIubGVuZ3RoO2ouc2V0KCJXIixxKSxqLnNldCgiTGVuZ3RoIixHKSxJLnB1c2goIiIuY29uY2F0KE0ubnVtLCIgIikuY29uY2F0KE0uZ2VuLCIgb2JqXG4iKSkscChqLEksbnVsbCksSS5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgej1JLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLFc9IlxuZW5kc3RyZWFtXG5lbmRvYmpcbnN0YXJ0eHJlZlxuIi5jb25jYXQoRSwiXG4lJUVPRlxuIiksVj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCt6K0crVy5sZW5ndGgpO1Yuc2V0KHQpO3ZhciBZLEssSj10Lmxlbmd0aCxaPWwoSSk7dHJ5e2ZvcihaLnMoKTshKFk9Wi5uKCkpLmRvbmU7KXt2YXIgUT1ZLnZhbHVlO20oUSxKLFYpLEorPVEubGVuZ3RofX1jYXRjaChlKXtaLmUoZSl9ZmluYWxseXtaLmYoKX1mb3IodmFyIGVlPTAsdGU9UjtlZTx0ZS5sZW5ndGg7ZWUrKyl7dmFyIHJlPSgzLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KEs9dGVbZWVdKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwzIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KEspfHxmKEssMyl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksbmU9cmVbMF0sYWU9cmVbMV0saWU9cmVbMl07Sj15KG5lLHFbMF0sSixWKSxKPXkoYWUscVsxXSxKLFYpLEo9eShpZSxxWzJdLEosVil9cmV0dXJuIG0oVyxKLFYpLFZ9LHQud3JpdGVEaWN0PXAsdC53cml0ZU9iamVjdD1kO3ZhciBuPXIoMiksYT1yKDEzNCksaT1yKDEzNSksbz1yKDE5NSkscz1yKDEzNiksYz1yKDE5Nik7ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sdShlKX1mdW5jdGlvbiBsKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBoKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gaChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGQoZSx0LHIsbil7ci5wdXNoKCIiLmNvbmNhdChlLm51bSwiICIpLmNvbmNhdChlLmdlbiwiIG9ialxuIikpLHQgaW5zdGFuY2VvZiBhLkRpY3Q/cCh0LHIsbik6dCBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSYmZyh0LHIsbiksci5wdXNoKCJcbmVuZG9ialxuIil9ZnVuY3Rpb24gcChlLHQscil7dC5wdXNoKCI8PCIpO3ZhciBuLGE9bChlLmdldEtleXMoKSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO3QucHVzaCgiIC8iLmNvbmNhdCgoMCxpLmVzY2FwZVBERk5hbWUpKG8pLCIgIikpLHYoZS5nZXRSYXcobyksdCxyKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9dC5wdXNoKCI+PiIpfWZ1bmN0aW9uIGcoZSx0LHIpe3AoZS5kaWN0LHQsciksdC5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgbj1lLmdldFN0cmluZygpO251bGwhPT1yJiYobj1yLmVuY3J5cHRTdHJpbmcobikpLHQucHVzaChuLCJcbmVuZHN0cmVhbSIpfWZ1bmN0aW9uIHYoZSx0LHIpe2UgaW5zdGFuY2VvZiBhLk5hbWU/dC5wdXNoKCIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShlLm5hbWUpKSk6ZSBpbnN0YW5jZW9mIGEuUmVmP3QucHVzaCgiIi5jb25jYXQoZS5udW0sIiAiKS5jb25jYXQoZS5nZW4sIiBSIikpOkFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24oZSx0LHIpe3QucHVzaCgiWyIpO3ZhciBuLGE9ITAsaT1sKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTthP2E9ITE6dC5wdXNoKCIgIiksdihvLHQscil9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXQucHVzaCgiXSIpfShlLHQscik6InN0cmluZyI9PXR5cGVvZiBlPyhudWxsIT09ciYmKGU9ci5lbmNyeXB0U3RyaW5nKGUpKSx0LnB1c2goIigiLmNvbmNhdCgoMCxpLmVzY2FwZVN0cmluZykoZSksIikiKSkpOiJudW1iZXIiPT10eXBlb2YgZT90LnB1c2goKDAsaS5udW1iZXJUb1N0cmluZykoZSkpOiJib29sZWFuIj09dHlwZW9mIGU/dC5wdXNoKGUudG9TdHJpbmcoKSk6ZSBpbnN0YW5jZW9mIGEuRGljdD9wKGUsdCxyKTplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtP2coZSx0LHIpOm51bGw9PT1lP3QucHVzaCgibnVsbCIpOigwLG4ud2FybikoIlVuaGFuZGxlZCB2YWx1ZSBpbiB3cml0ZXI6ICIuY29uY2F0KHUoZSksIiwgcGxlYXNlIGZpbGUgYSBidWcuIikpfWZ1bmN0aW9uIHkoZSx0LHIsbil7Zm9yKHZhciBhPXQrci0xO2E+ci0xO2EtLSluW2FdPTI1NSZlLGU+Pj04O3JldHVybiByK3R9ZnVuY3Rpb24gbShlLHQscil7Zm9yKHZhciBuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXJbdCtuXT0yNTUmZS5jaGFyQ29kZUF0KG4pfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhNTFBhcnNlckVycm9yQ29kZT10LlhNTFBhcnNlckJhc2U9dC5TaW1wbGVYTUxQYXJzZXI9dC5TaW1wbGVET01Ob2RlPXZvaWQgMDt2YXIgbj1yKDEzNSk7ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYShlLHQpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGkoZSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9YyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxjKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBjKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB1KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dShlLHQpOnZvaWQgMH19ZnVuY3Rpb24gdShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGwoZSl9ZnVuY3Rpb24gZihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1sKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgcD17Tm9FcnJvcjowLEVuZE9mRG9jdW1lbnQ6LTEsVW50ZXJtaW5hdGVkQ2RhdDotMixVbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbjotMyxVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246LTQsVW50ZXJtaW5hdGVkQ29tbWVudDotNSxNYWxmb3JtZWRFbGVtZW50Oi02LE91dE9mTWVtb3J5Oi03LFVudGVybWluYXRlZEF0dHJpYnV0ZVZhbHVlOi04LFVudGVybWluYXRlZEVsZW1lbnQ6LTksRWxlbWVudE5ldmVyQmVndW46LTEwfTtmdW5jdGlvbiBnKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4iICI9PT1yfHwiXG4iPT09cnx8IlxyIj09PXJ8fCJcdCI9PT1yfXQuWE1MUGFyc2VyRXJyb3JDb2RlPXA7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6Il9yZXNvbHZlRW50aXRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGUucmVwbGFjZSgvJihbXjtdKyk7L2csKGZ1bmN0aW9uKGUscil7aWYoIiN4Ij09PXIuc3Vic3RyaW5nKDAsMikpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHIuc3Vic3RyaW5nKDIpLDE2KSk7aWYoIiMiPT09ci5zdWJzdHJpbmcoMCwxKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoci5zdWJzdHJpbmcoMSksMTApKTtzd2l0Y2gocil7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UicXVvdCI6cmV0dXJuJyInO2Nhc2UiYXBvcyI6cmV0dXJuIicifXJldHVybiB0Lm9uUmVzb2x2ZUVudGl0eShyKX0pKX19LHtrZXk6Il9wYXJzZUNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj10O2Z1bmN0aW9uIGEoKXtmb3IoO248ZS5sZW5ndGgmJmcoZSxuKTspKytufWZvcig7bjxlLmxlbmd0aCYmIWcoZSxuKSYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXTspKytuO3ZhciBpPWUuc3Vic3RyaW5nKHQsbik7Zm9yKGEoKTtuPGUubGVuZ3RoJiYiPiIhPT1lW25dJiYiLyIhPT1lW25dJiYiPyIhPT1lW25dOyl7YSgpO2Zvcih2YXIgbyxzPSIiO248ZS5sZW5ndGgmJiFnKGUsbikmJiI9IiE9PWVbbl07KXMrPWVbbl0sKytuO2lmKGEoKSwiPSIhPT1lW25dKXJldHVybiBudWxsOysrbixhKCk7dmFyIGM9ZVtuXTtpZignIichPT1jJiYiJyIhPT1jKXJldHVybiBudWxsO3ZhciB1PWUuaW5kZXhPZihjLCsrbik7aWYodTwwKXJldHVybiBudWxsO289ZS5zdWJzdHJpbmcobix1KSxyLnB1c2goe25hbWU6cyx2YWx1ZTp0aGlzLl9yZXNvbHZlRW50aXRpZXMobyl9KSxuPXUrMSxhKCl9cmV0dXJue25hbWU6aSxhdHRyaWJ1dGVzOnIscGFyc2VkOm4tdH19fSx7a2V5OiJfcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQ7cjxlLmxlbmd0aCYmIWcoZSxyKSYmIj4iIT09ZVtyXSYmIj8iIT09ZVtyXSYmIi8iIT09ZVtyXTspKytyO3ZhciBuPWUuc3Vic3RyaW5nKHQscik7IWZ1bmN0aW9uKCl7Zm9yKDtyPGUubGVuZ3RoJiZnKGUscik7KSsrcn0oKTtmb3IodmFyIGE9cjtyPGUubGVuZ3RoJiYoIj8iIT09ZVtyXXx8Ij4iIT09ZVtyKzFdKTspKytyO3JldHVybntuYW1lOm4sdmFsdWU6ZS5zdWJzdHJpbmcoYSxyKSxwYXJzZWQ6ci10fX19LHtrZXk6InBhcnNlWG1sIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOyl7dmFyIHI9dDtpZigiPCI9PT1lW3RdKXt2YXIgbj12b2lkIDA7c3dpdGNoKGVbKytyXSl7Y2FzZSIvIjppZigrK3IsKG49ZS5pbmRleE9mKCI+IixyKSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhyLG4pKSxyPW4rMTticmVhaztjYXNlIj8iOisrcjt2YXIgYT10aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHIpO2lmKCI/PiIhPT1lLnN1YnN0cmluZyhyK2EucGFyc2VkLHIrYS5wYXJzZWQrMikpcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO3RoaXMub25QaShhLm5hbWUsYS52YWx1ZSkscis9YS5wYXJzZWQrMjticmVhaztjYXNlIiEiOmlmKCItLSI9PT1lLnN1YnN0cmluZyhyKzEsciszKSl7aWYoKG49ZS5pbmRleE9mKCItLVx4M2UiLHIrMykpPDApcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkQ29tbWVudCk7dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcociszLG4pKSxyPW4rM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXtpZigobj1lLmluZGV4T2YoIl1dPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRDZGF0KTt0aGlzLm9uQ2RhdGEoZS5zdWJzdHJpbmcocis4LG4pKSxyPW4rM31lbHNle2lmKCJET0NUWVBFIiE9PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciBpPWUuaW5kZXhPZigiWyIscis4KSxvPSExO2lmKChuPWUuaW5kZXhPZigiPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO2lmKGk+MCYmbj5pKXtpZigobj1lLmluZGV4T2YoIl0+IixyKzgpKTwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7bz0hMH12YXIgcz1lLnN1YnN0cmluZyhyKzgsbisobz8xOjApKTt0aGlzLm9uRG9jdHlwZShzKSxyPW4rKG8/MjoxKX1icmVhaztkZWZhdWx0OnZhciBjPXRoaXMuX3BhcnNlQ29udGVudChlLHIpO2lmKG51bGw9PT1jKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciB1PSExO2lmKCIvPiI9PT1lLnN1YnN0cmluZyhyK2MucGFyc2VkLHIrYy5wYXJzZWQrMikpdT0hMDtlbHNlIGlmKCI+IiE9PWUuc3Vic3RyaW5nKHIrYy5wYXJzZWQscitjLnBhcnNlZCsxKSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uQmVnaW5FbGVtZW50KGMubmFtZSxjLmF0dHJpYnV0ZXMsdSkscis9Yy5wYXJzZWQrKHU/MjoxKX19ZWxzZXtmb3IoO3I8ZS5sZW5ndGgmJiI8IiE9PWVbcl07KXIrKzt2YXIgbD1lLnN1YnN0cmluZyh0LHIpO3RoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyhsKSl9dD1yfX19LHtrZXk6Im9uUmVzb2x2ZUVudGl0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIiYiLmNvbmNhdChlLCI7Iil9fSx7a2V5OiJvblBpIix2YWx1ZTpmdW5jdGlvbihlLHQpe319LHtrZXk6Im9uQ29tbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25DZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25Eb2N0eXBlIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvblRleHQiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6Im9uQmVnaW5FbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7fX0se2tleToib25FbmRFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt9fV0pLGV9KCk7dC5YTUxQYXJzZXJCYXNlPXY7dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubm9kZU5hbWU9dCx0aGlzLm5vZGVWYWx1ZT1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwYXJlbnROb2RlIix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pfXJldHVybiBkKGUsW3trZXk6ImZpcnN0Q2hpbGQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlc1swXX19LHtrZXk6Im5leHRTaWJsaW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZihlKXt2YXIgdD1lLmluZGV4T2YodGhpcyk7aWYoLTEhPT10KXJldHVybiBlW3QrMV19fX0se2tleToidGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbigiIik6dGhpcy5ub2RlVmFsdWV8fCIifX0se2tleToiY2hpbGRyZW4iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN8fFtdfX0se2tleToiaGFzQ2hpbGROb2RlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzJiZ0aGlzLmNoaWxkTm9kZXMubGVuZ3RoPjB9fSx7a2V5OiJzZWFyY2hOb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHQ+PWUubGVuZ3RoKXJldHVybiB0aGlzO2Zvcih2YXIgcj1lW3RdLG49W10sYT10aGlzOzspe2lmKHIubmFtZT09PWEubm9kZU5hbWUpe2lmKDAhPT1yLnBvcyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO3ZhciBpLGM9MCx1PW8ocyhuLnBvcCgpLDEpWzBdLmNoaWxkTm9kZXMpO3RyeXtmb3IodS5zKCk7IShpPXUubigpKS5kb25lOyl7dmFyIGw9aS52YWx1ZTtpZihyLm5hbWU9PT1sLm5vZGVOYW1lKXtpZihjPT09ci5wb3MpcmV0dXJuIGwuc2VhcmNoTm9kZShlLHQrMSk7YysrfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJuIGEuc2VhcmNoTm9kZShlLHQrMSl9dmFyIGY9YS5zZWFyY2hOb2RlKGUsdCsxKTtpZihudWxsIT09ZilyZXR1cm4gZn1pZihhLmNoaWxkTm9kZXMmJjAhPT1hLmNoaWxkTm9kZXMubGVuZ3RoKW4ucHVzaChbYSwwXSksYT1hLmNoaWxkTm9kZXNbMF07ZWxzZXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKDswIT09bi5sZW5ndGg7KXt2YXIgaD1zKG4ucG9wKCksMiksZD1oWzBdLHA9aFsxXSsxO2lmKHA8ZC5jaGlsZE5vZGVzLmxlbmd0aCl7bi5wdXNoKFtkLHBdKSxhPWQuY2hpbGROb2Rlc1twXTticmVha319aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsfX19fSx7a2V5OiJkdW1wIix2YWx1ZTpmdW5jdGlvbihlKXtpZigiI3RleHQiIT09dGhpcy5ub2RlTmFtZSl7aWYoZS5wdXNoKCI8Ii5jb25jYXQodGhpcy5ub2RlTmFtZSkpLHRoaXMuYXR0cmlidXRlcyl7dmFyIHQscj1vKHRoaXMuYXR0cmlidXRlcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlO2UucHVzaCgiICIuY29uY2F0KGEubmFtZSwnPSInKS5jb25jYXQoKDAsbi5lbmNvZGVUb1htbFN0cmluZykoYS52YWx1ZSksJyInKSl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX1pZih0aGlzLmhhc0NoaWxkTm9kZXMoKSl7ZS5wdXNoKCI+Iik7dmFyIGkscz1vKHRoaXMuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KWkudmFsdWUuZHVtcChlKX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1lLnB1c2goIjwvIi5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKX1lbHNlIHRoaXMubm9kZVZhbHVlP2UucHVzaCgiPiIuY29uY2F0KCgwLG4uZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKSwiPC8iKS5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKTplLnB1c2goIi8+Iil9ZWxzZSBlLnB1c2goKDAsbi5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpKX19XSksZX0oKTt0LlNpbXBsZURPTU5vZGU9eTt2YXIgbT1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYShlLHQpfShjLGUpO3ZhciB0LHIsbj0odD1jLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1pKHQpO2lmKHIpe3ZhciBhPWkodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGMoZSl7dmFyIHQscj1lLmhhc0F0dHJpYnV0ZXMsYT12b2lkIDAhPT1yJiZyLGk9ZS5sb3dlckNhc2VOYW1lLG89dm9pZCAwIT09aSYmaTtyZXR1cm4gZih0aGlzLGMpLCh0PW4uY2FsbCh0aGlzKSkuX2N1cnJlbnRGcmFnbWVudD1udWxsLHQuX3N0YWNrPW51bGwsdC5fZXJyb3JDb2RlPXAuTm9FcnJvcix0Ll9oYXNBdHRyaWJ1dGVzPWEsdC5fbG93ZXJDYXNlTmFtZT1vLHR9cmV0dXJuIGQoYyxbe2tleToicGFyc2VGcm9tU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W10sdGhpcy5fc3RhY2s9W10sdGhpcy5fZXJyb3JDb2RlPXAuTm9FcnJvcix0aGlzLnBhcnNlWG1sKGUpLHRoaXMuX2Vycm9yQ29kZT09PXAuTm9FcnJvcil7dmFyIHQ9cyh0aGlzLl9jdXJyZW50RnJhZ21lbnQsMSlbMF07aWYodClyZXR1cm57ZG9jdW1lbnRFbGVtZW50OnR9fX19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZighZyhlLHQpKXJldHVybiExO3JldHVybiEwfShlKSl7dmFyIHQ9bmV3IHkoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX19fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgeSgiI3RleHQiLGUpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHQpfX0se2tleToib25CZWdpbkVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9sb3dlckNhc2VOYW1lJiYoZT1lLnRvTG93ZXJDYXNlKCkpO3ZhciBuPW5ldyB5KGUpO24uY2hpbGROb2Rlcz1bXSx0aGlzLl9oYXNBdHRyaWJ1dGVzJiYobi5hdHRyaWJ1dGVzPXQpLHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG4pLHJ8fCh0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCksdGhpcy5fY3VycmVudEZyYWdtZW50PW4uY2hpbGROb2Rlcyl9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107dmFyIHQ9dGhpcy5fY3VycmVudEZyYWdtZW50LmF0KC0xKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPW8odC5jaGlsZE5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5wYXJlbnROb2RlPXR9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHR9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9lcnJvckNvZGU9ZX19XSksY30odik7dC5TaW1wbGVYTUxQYXJzZXI9bX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbGN1bGF0ZVNIQTI1Nj10LmNhbGN1bGF0ZU1ENT10LlBERjIwPXQuUERGMTc9dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PXQuQVJDRm91ckNpcGhlcj10LkFFUzI1NkNpcGhlcj10LkFFUzEyOENpcGhlcj12b2lkIDAsdC5jYWxjdWxhdGVTSEEzODQ9ayx0LmNhbGN1bGF0ZVNIQTUxMj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTk3KTtmdW5jdGlvbiBvKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnMoZSx0KX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj11KGUpO2lmKHQpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxsKGUpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWwoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1sKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09bChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLmE9MCx0aGlzLmI9MDtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMjU2KSxuPXQubGVuZ3RoLGE9MDthPDI1NjsrK2EpclthXT1hO2Zvcih2YXIgaT0wLG89MDtpPDI1NjsrK2kpe3ZhciBzPXJbaV07bz1vK3MrdFtpJW5dJjI1NSxyW2ldPXJbb10scltvXT1zfXRoaXMucz1yfXJldHVybiBkKGUsW3trZXk6ImVuY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuYSxyPXRoaXMuYixuPXRoaXMucyxhPWUubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkoYSksbz0wO288YTsrK28pe3ZhciBzPW5bdD10KzEmMjU1XSxjPW5bcj1yK3MmMjU1XTtuW3RdPWMsbltyXT1zLGlbb109ZVtvXV5uW3MrYyYyNTVdfXJldHVybiB0aGlzLmE9dCx0aGlzLmI9cixpfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fV0pLGV9KCk7dC5BUkNGb3VyQ2lwaGVyPXA7dmFyIGcsdix5PShnPW5ldyBVaW50OEFycmF5KFs3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjFdKSx2PW5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LC0zODk1NjQ1ODYsNjA2MTA1ODE5LC0xMDQ0NTI1MzMwLC0xNzY0MTg4OTcsMTIwMDA4MDQyNiwtMTQ3MzIzMTM0MSwtNDU3MDU5ODMsMTc3MDAzNTQxNiwtMTk1ODQxNDQxNywtNDIwNjMsLTE5OTA0MDQxNjIsMTgwNDYwMzY4MiwtNDAzNDExMDEsLTE1MDIwMDIyOTAsMTIzNjUzNTMyOSwtMTY1Nzk2NTEwLC0xMDY5NTAxNjMyLDY0MzcxNzcxMywtMzczODk3MzAyLC03MDE1NTg2OTEsMzgwMTYwODMsLTY2MDQ3ODMzNSwtNDA1NTM3ODQ4LDU2ODQ0NjQzOCwtMTAxOTgwMzY5MCwtMTg3MzYzOTYxLDExNjM1MzE1MDEsLTE0NDQ2ODE0NjcsLTUxNDAzNzg0LDE3MzUzMjg0NzMsLTE5MjY2MDc3MzQsLTM3ODU1OCwtMjAyMjU3NDQ2MywxODM5MDMwNTYyLC0zNTMwOTU1NiwtMTUzMDk5MjA2MCwxMjcyODkzMzUzLC0xNTU0OTc2MzIsLTEwOTQ3MzA2NDAsNjgxMjc5MTc0LC0zNTg1MzcyMjIsLTcyMjUyMTk3OSw3NjAyOTE4OSwtNjQwMzY0NDg3LC00MjE4MTU4MzUsNTMwNzQyNTIwLC05OTUzMzg2NTEsLTE5ODYzMDg0NCwxMTI2ODkxNDE1LC0xNDE2MzU0OTA1LC01NzQzNDA1NSwxNzAwNDg1NTcxLC0xODk0OTg2NjA2LC0xMDUxNTIzLC0yMDU0OTIyNzk5LDE4NzMzMTMzNTksLTMwNjExNzQ0LC0xNTYwMTk4MzgwLDEzMDkxNTE2NDksLTE0NTUyMzA3MCwtMTEyMDIxMDM3OSw3MTg3ODcyNTksLTM0MzQ4NTU1MV0pLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9MTczMjU4NDE5MyxvPS0yNzE3MzM4Nzkscz0tMTczMjU4NDE5NCxjPTI3MTczMzg3OCx1PXIrNzImLTY0LGw9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKG49MDtuPHI7KytuKWxbbl09ZVt0KytdO2xbbisrXT0xMjg7Zm9yKHZhciBmPXUtODtuPGY7KWxbbisrXT0wO2xbbisrXT1yPDwzJjI1NSxsW24rK109cj4+NSYyNTUsbFtuKytdPXI+PjEzJjI1NSxsW24rK109cj4+MjEmMjU1LGxbbisrXT1yPj4+MjkmMjU1LGxbbisrXT0wLGxbbisrXT0wLGxbbisrXT0wO3ZhciBoPW5ldyBJbnQzMkFycmF5KDE2KTtmb3Iobj0wO248dTspe2ZvcihhPTA7YTwxNjsrK2Esbis9NCloW2FdPWxbbl18bFtuKzFdPDw4fGxbbisyXTw8MTZ8bFtuKzNdPDwyNDt2YXIgZD1pLHA9byx5PXMsbT1jLGI9dm9pZCAwLHc9dm9pZCAwO2ZvcihhPTA7YTw2NDsrK2Epe2E8MTY/KGI9cCZ5fH5wJm0sdz1hKTphPDMyPyhiPW0mcHx+bSZ5LHc9NSphKzEmMTUpOmE8NDg/KGI9cF55Xm0sdz0zKmErNSYxNSk6KGI9eV4ocHx+bSksdz03KmEmMTUpO3ZhciBrPW0sUz1kK2IrdlthXStoW3ddfDAseD1nW2FdO209eSx5PXAscD1wKyhTPDx4fFM+Pj4zMi14KXwwLGQ9a31pPWkrZHwwLG89bytwfDAscz1zK3l8MCxjPWMrbXwwfXJldHVybiBuZXcgVWludDhBcnJheShbMjU1JmksaT4+OCYyNTUsaT4+MTYmMjU1LGk+Pj4yNCYyNTUsMjU1Jm8sbz4+OCYyNTUsbz4+MTYmMjU1LG8+Pj4yNCYyNTUsMjU1JnMscz4+OCYyNTUscz4+MTYmMjU1LHM+Pj4yNCYyNTUsMjU1JmMsYz4+OCYyNTUsYz4+MTYmMjU1LGM+Pj4yNCYyNTVdKX0pO3QuY2FsY3VsYXRlTUQ1PXk7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMuaGlnaD0wfHQsdGhpcy5sb3c9MHxyfXJldHVybiBkKGUsW3trZXk6ImFuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoJj1lLmhpZ2gsdGhpcy5sb3cmPWUubG93fX0se2tleToieG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmhpZ2hePWUuaGlnaCx0aGlzLmxvd149ZS5sb3d9fSx7a2V5OiJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdofD1lLmhpZ2gsdGhpcy5sb3d8PWUubG93fX0se2tleToic2hpZnRSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT49MzI/KHRoaXMubG93PXRoaXMuaGlnaD4+PmUtMzJ8MCx0aGlzLmhpZ2g9MCk6KHRoaXMubG93PXRoaXMubG93Pj4+ZXx0aGlzLmhpZ2g8PDMyLWUsdGhpcy5oaWdoPXRoaXMuaGlnaD4+PmV8MCl9fSx7a2V5OiJzaGlmdExlZnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2U+PTMyPyh0aGlzLmhpZ2g9dGhpcy5sb3c8PGUtMzIsdGhpcy5sb3c9MCk6KHRoaXMuaGlnaD10aGlzLmhpZ2g8PGV8dGhpcy5sb3c+Pj4zMi1lLHRoaXMubG93PDw9ZSl9fSx7a2V5OiJyb3RhdGVSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscjszMiZlPyhyPXRoaXMubG93LHQ9dGhpcy5oaWdoKToodD10aGlzLmxvdyxyPXRoaXMuaGlnaCksZSY9MzEsdGhpcy5sb3c9dD4+PmV8cjw8MzItZSx0aGlzLmhpZ2g9cj4+PmV8dDw8MzItZX19LHtrZXk6Im5vdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaCx0aGlzLmxvdz1+dGhpcy5sb3d9fSx7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSh0aGlzLmxvdz4+PjApKyhlLmxvdz4+PjApLHI9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihyKz0xKSx0aGlzLmxvdz0wfHQsdGhpcy5oaWdoPTB8cn19LHtrZXk6ImNvcHlUbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NSxlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTUsZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTUsZVt0KzNdPTI1NSZ0aGlzLmhpZ2gsZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1LGVbdCs1XT10aGlzLmxvdz4+MTYmMjU1LGVbdCs2XT10aGlzLmxvdz4+OCYyNTUsZVt0KzddPTI1NSZ0aGlzLmxvd319LHtrZXk6ImFzc2lnbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoPWUuaGlnaCx0aGlzLmxvdz1lLmxvd319XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIHQoZSx0LHIpe3JldHVybiBlJnRefmUmcn1mdW5jdGlvbiByKGUsdCxyKXtyZXR1cm4gZSZ0XmUmcl50JnJ9ZnVuY3Rpb24gbih0KXtyZXR1cm4gZSh0LDIpXmUodCwxMyleZSh0LDIyKX1mdW5jdGlvbiBhKHQpe3JldHVybiBlKHQsNileZSh0LDExKV5lKHQsMjUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUodCw3KV5lKHQsMTgpXnQ+Pj4zfXZhciBvPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoPTE3NzkwMzM3MDMsZD0zMTQ0MTM0Mjc3LHA9MTAxMzkwNDI0MixnPTI3NzM0ODA3NjIsdj0xMzU5ODkzMTE5LHk9MjYwMDgyMjkyNCxtPTUyODczNDYzNSxiPTE1NDE0NTkyMjUsdz02NCpNYXRoLmNlaWwoKHUrOSkvNjQpLGs9bmV3IFVpbnQ4QXJyYXkodyk7Zm9yKGw9MDtsPHU7KytsKWtbbF09c1tjKytdO2tbbCsrXT0xMjg7Zm9yKHZhciBTPXctODtsPFM7KWtbbCsrXT0wO2tbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT11Pj4+MjkmMjU1LGtbbCsrXT11Pj4yMSYyNTUsa1tsKytdPXU+PjEzJjI1NSxrW2wrK109dT4+NSYyNTUsa1tsKytdPXU8PDMmMjU1O3ZhciB4LE89bmV3IFVpbnQzMkFycmF5KDY0KTtmb3IobD0wO2w8dzspe2ZvcihmPTA7ZjwxNjsrK2YpT1tmXT1rW2xdPDwyNHxrW2wrMV08PDE2fGtbbCsyXTw8OHxrW2wrM10sbCs9NDtmb3IoZj0xNjtmPDY0OysrZilPW2ZdPTB8KGUoeD1PW2YtMl0sMTcpXmUoeCwxOSleeD4+PjEwKStPW2YtN10raShPW2YtMTVdKStPW2YtMTZdO3ZhciBBPWgsQz1kLEY9cCxQPWcsVD12LEk9eSxFPW0saj1iLE09dm9pZCAwLF89dm9pZCAwO2ZvcihmPTA7Zjw2NDsrK2YpTT1qK2EoVCkrdChULEksRSkrb1tmXStPW2ZdLF89bihBKStyKEEsQyxGKSxqPUUsRT1JLEk9VCxUPVArTXwwLFA9RixGPUMsQz1BLEE9TStffDA7aD1oK0F8MCxkPWQrQ3wwLHA9cCtGfDAsZz1nK1B8MCx2PXYrVHwwLHk9eStJfDAsbT1tK0V8MCxiPWIranwwfXJldHVybiBuZXcgVWludDhBcnJheShbaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaCxkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHA+PjI0JjI1NSxwPj4xNiYyNTUscD4+OCYyNTUsMjU1JnAsZz4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyx2Pj4yNCYyNTUsdj4+MTYmMjU1LHY+PjgmMjU1LDI1NSZ2LHk+PjI0JjI1NSx5Pj4xNiYyNTUseT4+OCYyNTUsMjU1JnksbT4+MjQmMjU1LG0+PjE2JjI1NSxtPj44JjI1NSwyNTUmbSxiPj4yNCYyNTUsYj4+MTYmMjU1LGI+PjgmMjU1LDI1NSZiXSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PWI7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5ub3QoKSxhLmFuZChuKSxlLnhvcihhKX1mdW5jdGlvbiB0KGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5hbmQobiksZS54b3IoYSksYS5hc3NpZ24ociksYS5hbmQobiksZS54b3IoYSl9ZnVuY3Rpb24gcihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgyOCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzNCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzOSksZS54b3Iocil9ZnVuY3Rpb24gbihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxNCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgxOCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCg0MSksZS54b3Iocil9ZnVuY3Rpb24gYShlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxKSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDgpLGUueG9yKHIpLHIuYXNzaWduKHQpLHIuc2hpZnRSaWdodCg3KSxlLnhvcihyKX1mdW5jdGlvbiBpKGUsdCxyKXtlLmFzc2lnbih0KSxlLnJvdGF0ZVJpZ2h0KDE5KSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDYxKSxlLnhvcihyKSxyLmFzc2lnbih0KSxyLnNoaWZ0UmlnaHQoNiksZS54b3Iocil9dmFyIG89W25ldyBtKDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksbmV3IG0oMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBtKDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSksbmV3IG0oMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxuZXcgbSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IG0oMTUwODk3MDk5MywzMDUzODM0MjY1KSxuZXcgbSgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLG5ldyBtKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IG0oMzYyNDM4MTA4MCwyNzM0ODgzMzk0KSxuZXcgbSgzMTA1OTg0MDEsMTE2NDk5NjU0MiksbmV3IG0oNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBtKDE0MjY4ODE5ODcsMzU5MDMwNDk5NCksbmV3IG0oMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxuZXcgbSgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IG0oMjYxNDg4ODEwMyw2MzM4MDMzMTcpLG5ldyBtKDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksbmV3IG0oMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgbSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksbmV3IG0oMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLG5ldyBtKDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgbSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksbmV3IG0oMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxuZXcgbSgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBtKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksbmV3IG0oMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxuZXcgbSgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IG0oMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxuZXcgbSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLG5ldyBtKDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IG0oMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxuZXcgbSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksbmV3IG0oMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IG0oNjY2MzA3MjA1LDExODgxNzk5NjQpLG5ldyBtKDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxuZXcgbSgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBtKDEzOTYxODIyOTEsMjY0MzgzMzgyMyksbmV3IG0oMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxuZXcgbSgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBtKDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksbmV3IG0oMjQ1Njk1NjAzNywzNDQwNzc2MjcpLG5ldyBtKDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IG0oMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxuZXcgbSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLG5ldyBtKDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgbSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLG5ldyBtKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksbmV3IG0oNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgbSgyNzU0MjMzNDQsODUxMTY5NzIwKSxuZXcgbSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksbmV3IG0oNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBtKDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxuZXcgbSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksbmV3IG0oOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBtKDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksbmV3IG0oMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxuZXcgbSgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBtKDE5NTU1NjIyMjIsMTU3NTk5MDAxMiksbmV3IG0oMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxuZXcgbSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBtKDIzNjE4NTI0MjQsNDQyNzc2MDQ0KSxuZXcgbSgyNDI4NDM2NDc0LDU5MzY5ODM0NCksbmV3IG0oMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgbSgzMjA0MDMxNDc5LDI5OTkzNTE1NzMpLG5ldyBtKDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksbmV3IG0oMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgbSgzNTE1MjY3MjcxLDU2NjI4MDcxMSksbmV3IG0oMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxuZXcgbSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBtKDExNjQxODQ3NCwxOTE0MTM4NTU0KSxuZXcgbSgxNzQyOTI0MjEsMjczMTA1NTI3MCksbmV3IG0oMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBtKDQ2MDM5MzI2OSwzMjA2MjAzMTUpLG5ldyBtKDY4NTQ3MTczMyw1ODc0OTY4MzYpLG5ldyBtKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgbSgxMDE3MDM2Mjk4LDM2NTU0MzEwMCksbmV3IG0oMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxuZXcgbSgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBtKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksbmV3IG0oMTYwNzE2NzkxNSw5ODcxNjc0NjgpLG5ldyBtKDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoLGQscCxnLHYseSxiPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Yj8obD1uZXcgbSgzNDE4MDcwMzY1LDMyMzgzNzEwMzIpLGY9bmV3IG0oMTY1NDI3MDI1MCw5MTQxNTA2NjMpLGg9bmV3IG0oMjQzODUyOTM3MCw4MTI3MDI5OTkpLGQ9bmV3IG0oMzU1NDYyMzYwLDQxNDQ5MTI2OTcpLHA9bmV3IG0oMTczMTQwNTQxNSw0MjkwNzc1ODU3KSxnPW5ldyBtKDIzOTQxODAyMzEsMTc1MDYwMzAyNSksdj1uZXcgbSgzNjc1MDA4NTI1LDE2OTQwNzY4MzkpLHk9bmV3IG0oMTIwMzA2MjgxMywzMjA0MDc1NDI4KSk6KGw9bmV3IG0oMTc3OTAzMzcwMyw0MDg5MjM1NzIwKSxmPW5ldyBtKDMxNDQxMzQyNzcsMjIyNzg3MzU5NSksaD1uZXcgbSgxMDEzOTA0MjQyLDQyNzExNzU3MjMpLGQ9bmV3IG0oMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KSxwPW5ldyBtKDEzNTk4OTMxMTksMjkxNzU2NTEzNyksZz1uZXcgbSgyNjAwODIyOTI0LDcyNTUxMTE5OSksdj1uZXcgbSg1Mjg3MzQ2MzUsNDIxNTM4OTU0NykseT1uZXcgbSgxNTQxNDU5MjI1LDMyNzAzMzIwOSkpO3ZhciB3LGssUz0xMjgqTWF0aC5jZWlsKCh1KzE3KS8xMjgpLHg9bmV3IFVpbnQ4QXJyYXkoUyk7Zm9yKHc9MDt3PHU7Kyt3KXhbd109c1tjKytdO3hbdysrXT0xMjg7Zm9yKHZhciBPPVMtMTY7dzxPOyl4W3crK109MDt4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109dT4+PjI5JjI1NSx4W3crK109dT4+MjEmMjU1LHhbdysrXT11Pj4xMyYyNTUseFt3KytdPXU+PjUmMjU1LHhbdysrXT11PDwzJjI1NTt2YXIgQT1uZXcgQXJyYXkoODApO2Zvcih3PTA7dzw4MDt3KyspQVt3XT1uZXcgbSgwLDApO3ZhciBDLEYsUD1uZXcgbSgwLDApLFQ9bmV3IG0oMCwwKSxJPW5ldyBtKDAsMCksRT1uZXcgbSgwLDApLGo9bmV3IG0oMCwwKSxNPW5ldyBtKDAsMCksXz1uZXcgbSgwLDApLEw9bmV3IG0oMCwwKSxSPW5ldyBtKDAsMCksTj1uZXcgbSgwLDApLEQ9bmV3IG0oMCwwKSxCPW5ldyBtKDAsMCk7Zm9yKHc9MDt3PFM7KXtmb3Ioaz0wO2s8MTY7KytrKUFba10uaGlnaD14W3ddPDwyNHx4W3crMV08PDE2fHhbdysyXTw8OHx4W3crM10sQVtrXS5sb3c9eFt3KzRdPDwyNHx4W3crNV08PDE2fHhbdys2XTw8OHx4W3crN10sdys9ODtmb3Ioaz0xNjtrPDgwOysraylpKEM9QVtrXSxBW2stMl0sQiksQy5hZGQoQVtrLTddKSxhKEQsQVtrLTE1XSxCKSxDLmFkZChEKSxDLmFkZChBW2stMTZdKTtmb3IoUC5hc3NpZ24obCksVC5hc3NpZ24oZiksSS5hc3NpZ24oaCksRS5hc3NpZ24oZCksai5hc3NpZ24ocCksTS5hc3NpZ24oZyksXy5hc3NpZ24odiksTC5hc3NpZ24oeSksaz0wO2s8ODA7KytrKVIuYXNzaWduKEwpLG4oRCxqLEIpLFIuYWRkKEQpLGUoRCxqLE0sXyxCKSxSLmFkZChEKSxSLmFkZChvW2tdKSxSLmFkZChBW2tdKSxyKE4sUCxCKSx0KEQsUCxULEksQiksTi5hZGQoRCksQz1MLEw9XyxfPU0sTT1qLEUuYWRkKFIpLGo9RSxFPUksST1ULFQ9UCxDLmFzc2lnbihSKSxDLmFkZChOKSxQPUM7bC5hZGQoUCksZi5hZGQoVCksaC5hZGQoSSksZC5hZGQoRSkscC5hZGQoaiksZy5hZGQoTSksdi5hZGQoXykseS5hZGQoTCl9cmV0dXJuIGI/KEY9bmV3IFVpbnQ4QXJyYXkoNDgpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSk6KEY9bmV3IFVpbnQ4QXJyYXkoNjQpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSx2LmNvcHlUbyhGLDQ4KSx5LmNvcHlUbyhGLDU2KSksRn19KCk7ZnVuY3Rpb24gayhlLHQscil7cmV0dXJuIHcoZSx0LHIsITApfXQuY2FsY3VsYXRlU0hBNTEyPXc7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImRlY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19XSksZX0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuIiksdGhpcy5fcz1uZXcgVWludDhBcnJheShbOTksMTI0LDExOSwxMjMsMjQyLDEwNywxMTEsMTk3LDQ4LDEsMTAzLDQzLDI1NCwyMTUsMTcxLDExOCwyMDIsMTMwLDIwMSwxMjUsMjUwLDg5LDcxLDI0MCwxNzMsMjEyLDE2MiwxNzUsMTU2LDE2NCwxMTQsMTkyLDE4MywyNTMsMTQ3LDM4LDU0LDYzLDI0NywyMDQsNTIsMTY1LDIyOSwyNDEsMTEzLDIxNiw0OSwyMSw0LDE5OSwzNSwxOTUsMjQsMTUwLDUsMTU0LDcsMTgsMTI4LDIyNiwyMzUsMzksMTc4LDExNyw5LDEzMSw0NCwyNiwyNywxMTAsOTAsMTYwLDgyLDU5LDIxNCwxNzksNDEsMjI3LDQ3LDEzMiw4MywyMDksMCwyMzcsMzIsMjUyLDE3Nyw5MSwxMDYsMjAzLDE5MCw1Nyw3NCw3Niw4OCwyMDcsMjA4LDIzOSwxNzAsMjUxLDY3LDc3LDUxLDEzMyw2OSwyNDksMiwxMjcsODAsNjAsMTU5LDE2OCw4MSwxNjMsNjQsMTQzLDE0NiwxNTcsNTYsMjQ1LDE4OCwxODIsMjE4LDMzLDE2LDI1NSwyNDMsMjEwLDIwNSwxMiwxOSwyMzYsOTUsMTUxLDY4LDIzLDE5NiwxNjcsMTI2LDYxLDEwMCw5MywyNSwxMTUsOTYsMTI5LDc5LDIyMCwzNCw0MiwxNDQsMTM2LDcwLDIzOCwxODQsMjAsMjIyLDk0LDExLDIxOSwyMjQsNTAsNTgsMTAsNzMsNiwzNiw5MiwxOTQsMjExLDE3Miw5OCwxNDUsMTQ5LDIyOCwxMjEsMjMxLDIwMCw1NSwxMDksMTQxLDIxMyw3OCwxNjksMTA4LDg2LDI0NCwyMzQsMTAxLDEyMiwxNzQsOCwxODYsMTIwLDM3LDQ2LDI4LDE2NiwxODAsMTk4LDIzMiwyMjEsMTE2LDMxLDc1LDE4OSwxMzksMTM4LDExMiw2MiwxODEsMTAyLDcyLDMsMjQ2LDE0LDk3LDUzLDg3LDE4NSwxMzQsMTkzLDI5LDE1OCwyMjUsMjQ4LDE1MiwxNywxMDUsMjE3LDE0MiwxNDgsMTU1LDMwLDEzNSwyMzMsMjA2LDg1LDQwLDIyMywxNDAsMTYxLDEzNywxMywxOTEsMjMwLDY2LDEwNCw2NSwxNTMsNDUsMTUsMTc2LDg0LDE4NywyMl0pLHRoaXMuX2ludl9zPW5ldyBVaW50OEFycmF5KFs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSksdGhpcy5fbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pLHRoaXMuX21peENvbD1uZXcgVWludDhBcnJheSgyNTYpO2Zvcih2YXIgdD0wO3Q8MjU2O3QrKyl0aGlzLl9taXhDb2xbdF09dDwxMjg/dDw8MTp0PDwxXjI3O3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KSx0aGlzLmJ1ZmZlclBvc2l0aW9uPTB9cmV0dXJuIGQoZSxbe2tleToiX2V4cGFuZEtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfX0se2tleToiX2RlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9bmV3IFVpbnQ4QXJyYXkoMTYpO2kuc2V0KGUpO2Zvcih2YXIgbz0wLHM9dGhpcy5fa2V5U2l6ZTtvPDE2OysrbywrK3MpaVtvXV49dFtzXTtmb3IodmFyIGM9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7Yz49MTstLWMpe3I9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHU9MDt1PDE2OysrdSlpW3VdPXRoaXMuX2ludl9zW2lbdV1dO2Zvcih2YXIgbD0wLGY9MTYqYztsPDE2OysrbCwrK2YpaVtsXV49dFtmXTtmb3IodmFyIGg9MDtoPDE2O2grPTQpe3ZhciBkPXRoaXMuX21peFtpW2hdXSxwPXRoaXMuX21peFtpW2grMV1dLGc9dGhpcy5fbWl4W2lbaCsyXV0sdj10aGlzLl9taXhbaVtoKzNdXTtyPWRecD4+PjhecDw8MjReZz4+PjE2Xmc8PDE2XnY+Pj4yNF52PDw4LGlbaF09cj4+PjI0JjI1NSxpW2grMV09cj4+MTYmMjU1LGlbaCsyXT1yPj44JjI1NSxpW2grM109MjU1JnJ9fXI9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHk9MDt5PDE2OysreSlpW3ldPXRoaXMuX2ludl9zW2lbeV1dLGlbeV1ePXRbeV07cmV0dXJuIGl9fSx7a2V5OiJfZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT10aGlzLl9zLG89bmV3IFVpbnQ4QXJyYXkoMTYpO28uc2V0KGUpO2Zvcih2YXIgcz0wO3M8MTY7KytzKW9bc11ePXRbc107Zm9yKHZhciBjPTE7Yzx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247YysrKXtmb3IodmFyIHU9MDt1PDE2OysrdSlvW3VdPWlbb1t1XV07YT1vWzFdLG9bMV09b1s1XSxvWzVdPW9bOV0sb1s5XT1vWzEzXSxvWzEzXT1hLGE9b1syXSxuPW9bNl0sb1syXT1vWzEwXSxvWzZdPW9bMTRdLG9bMTBdPWEsb1sxNF09bixhPW9bM10sbj1vWzddLHI9b1sxMV0sb1szXT1vWzE1XSxvWzddPWEsb1sxMV09bixvWzE1XT1yO2Zvcih2YXIgbD0wO2w8MTY7bCs9NCl7dmFyIGY9b1tsKzBdLGg9b1tsKzFdLGQ9b1tsKzJdLHA9b1tsKzNdO3I9Zl5oXmRecCxvW2wrMF1ePXJedGhpcy5fbWl4Q29sW2ZeaF0sb1tsKzFdXj1yXnRoaXMuX21peENvbFtoXmRdLG9bbCsyXV49cl50aGlzLl9taXhDb2xbZF5wXSxvW2wrM11ePXJedGhpcy5fbWl4Q29sW3BeZl19Zm9yKHZhciBnPTAsdj0xNipjO2c8MTY7KytnLCsrdilvW2ddXj10W3ZdfWZvcih2YXIgeT0wO3k8MTY7Kyt5KW9beV09aVtvW3ldXTthPW9bMV0sb1sxXT1vWzVdLG9bNV09b1s5XSxvWzldPW9bMTNdLG9bMTNdPWEsYT1vWzJdLG49b1s2XSxvWzJdPW9bMTBdLG9bNl09b1sxNF0sb1sxMF09YSxvWzE0XT1uLGE9b1szXSxuPW9bN10scj1vWzExXSxvWzNdPW9bMTVdLG9bN109YSxvWzExXT1uLG9bMTVdPXI7Zm9yKHZhciBtPTAsYj10aGlzLl9rZXlTaXplO208MTY7KyttLCsrYilvW21dXj10W2JdO3JldHVybiBvfX0se2tleToiX2RlY3J5cHRCbG9jazIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uLGk9W10sbz10aGlzLml2LHM9MDtzPHI7KytzKWlmKG5bYV09ZVtzXSwhKCsrYTwxNikpe2Zvcih2YXIgYz10aGlzLl9kZWNyeXB0KG4sdGhpcy5fa2V5KSx1PTA7dTwxNjsrK3UpY1t1XV49b1t1XTtvPW4saS5wdXNoKGMpLG49bmV3IFVpbnQ4QXJyYXkoMTYpLGE9MH1pZih0aGlzLmJ1ZmZlcj1uLHRoaXMuYnVmZmVyTGVuZ3RoPWEsdGhpcy5pdj1vLDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIGw9MTYqaS5sZW5ndGg7aWYodCl7dmFyIGY9aS5hdCgtMSksaD1mWzE1XTtpZihoPD0xNil7Zm9yKHZhciBkPTE1LHA9MTYtaDtkPj1wOy0tZClpZihmW2RdIT09aCl7aD0wO2JyZWFrfWwtPWgsaVtpLmxlbmd0aC0xXT1mLnN1YmFycmF5KDAsMTYtaCl9fWZvcih2YXIgZz1uZXcgVWludDhBcnJheShsKSx2PTAseT0wLG09aS5sZW5ndGg7djxtOysrdix5Kz0xNilnLnNldChpW3ZdLHkpO3JldHVybiBnfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLG49ZS5sZW5ndGgsYT10aGlzLmJ1ZmZlcixpPXRoaXMuYnVmZmVyUG9zaXRpb247aWYocil0aGlzLml2PXI7ZWxzZXtmb3IodmFyIG89MDtpPDE2JiZvPG47KytvLCsraSlhW2ldPWVbb107aWYoaTwxNilyZXR1cm4gdGhpcy5idWZmZXJMZW5ndGg9aSxuZXcgVWludDhBcnJheSgwKTt0aGlzLml2PWEsZT1lLnN1YmFycmF5KDE2KX1yZXR1cm4gdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5kZWNyeXB0QmxvY2s9dGhpcy5fZGVjcnlwdEJsb2NrMix0aGlzLmRlY3J5cHRCbG9jayhlLHQpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aCxuPXRoaXMuYnVmZmVyLGE9dGhpcy5idWZmZXJQb3NpdGlvbixpPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKHZhciBvPTA7bzxyOysrbylpZihuW2FdPWVbb10sISgrK2E8MTYpKXtmb3IodmFyIHM9MDtzPDE2OysrcyluW3NdXj10W3NdO3ZhciBjPXRoaXMuX2VuY3J5cHQobix0aGlzLl9rZXkpO3Q9YyxpLnB1c2goYyksbj1uZXcgVWludDhBcnJheSgxNiksYT0wfWlmKHRoaXMuYnVmZmVyPW4sdGhpcy5idWZmZXJMZW5ndGg9YSx0aGlzLml2PXQsMD09PWkubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtmb3IodmFyIHU9MTYqaS5sZW5ndGgsbD1uZXcgVWludDhBcnJheSh1KSxmPTAsaD0wLGQ9aS5sZW5ndGg7ZjxkOysrZixoKz0xNilsLnNldChpW2ZdLGgpO3JldHVybiBsfX1dKSxlfSgpLE89ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzKSkuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMCxuLl9rZXlTaXplPTE2MCxuLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSksbi5fa2V5PW4uX2V4cGFuZEtleShlKSxufXJldHVybiBkKHIsW3trZXk6Il9leHBhbmRLZXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Mscj10aGlzLl9yY29uLG49bmV3IFVpbnQ4QXJyYXkoMTc2KTtuLnNldChlKTtmb3IodmFyIGE9MTYsaT0xO2E8MTc2OysraSl7dmFyIG89blthLTNdLHM9blthLTJdLGM9blthLTFdLHU9blthLTRdO289dFtvXSxzPXRbc10sYz10W2NdLHU9dFt1XSxvXj1yW2ldO2Zvcih2YXIgbD0wO2w8NDsrK2wpblthXT1vXj1uW2EtMTZdLG5bKythXT1zXj1uW2EtMTZdLG5bKythXT1jXj1uW2EtMTZdLG5bKythXT11Xj1uW2EtMTZdLGErK31yZXR1cm4gbn19XSkscn0oeCk7dC5BRVMxMjhDaXBoZXI9Tzt2YXIgQT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMpKS5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0LG4uX2tleVNpemU9MjI0LG4uX2tleT1uLl9leHBhbmRLZXkoZSksbn1yZXR1cm4gZChyLFt7a2V5OiJfZXhwYW5kS2V5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zLHI9bmV3IFVpbnQ4QXJyYXkoMjQwKTtyLnNldChlKTtmb3IodmFyIG4sYSxpLG8scz0xLGM9MzIsdT0xO2M8MjQwOysrdSl7YyUzMj09MTY/KG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSk6YyUzMj09MCYmKG49cltjLTNdLGE9cltjLTJdLGk9cltjLTFdLG89cltjLTRdLG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSxuXj1zLChzPDw9MSk+PTI1NiYmKHM9MjU1JigyN15zKSkpO2Zvcih2YXIgbD0wO2w8NDsrK2wpcltjXT1uXj1yW2MtMzJdLHJbKytjXT1hXj1yW2MtMzJdLHJbKytjXT1pXj1yW2MtMzJdLHJbKytjXT1vXj1yW2MtMzJdLGMrK31yZXR1cm4gcn19XSkscn0oeCk7dC5BRVMyNTZDaXBoZXI9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKSxpLnNldCh0LGUubGVuZ3RoKSxpLnNldChyLGUubGVuZ3RoK3QubGVuZ3RoKTt2YXIgbz1iKGksMCxpLmxlbmd0aCk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJjaGVja1VzZXJQYXNzd29yZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2Euc2V0KGUsMCksYS5zZXQodCxlLmxlbmd0aCk7dmFyIGk9YihhLDAsYS5sZW5ndGgpO3JldHVybigwLG4uaXNBcnJheUVxdWFsKShpLHIpfX0se2tleToiZ2V0T3duZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTthLnNldChlLDApLGEuc2V0KHQsZS5sZW5ndGgpLGEuc2V0KHIsZS5sZW5ndGgrdC5sZW5ndGgpO3ZhciBpPWIoYSwwLGEubGVuZ3RoKTtyZXR1cm4gbmV3IEEoaSkuZGVjcnlwdEJsb2NrKG4sITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19LHtrZXk6ImdldFVzZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApLG4uc2V0KHQsZS5sZW5ndGgpO3ZhciBhPWIobiwwLG4ubGVuZ3RoKTtyZXR1cm4gbmV3IEEoYSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19XSksZX0oKTt0LlBERjE3PUM7dmFyIEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXtmb3IodmFyIG49Yih0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLGE9WzBdLGk9MDtpPDY0fHxhLmF0KC0xKT5pLTMyOyl7dmFyIG89ZS5sZW5ndGgrbi5sZW5ndGgrci5sZW5ndGgscz1uZXcgVWludDhBcnJheShvKSxjPTA7cy5zZXQoZSxjKSxjKz1lLmxlbmd0aCxzLnNldChuLGMpLGMrPW4ubGVuZ3RoLHMuc2V0KHIsYyk7Zm9yKHZhciB1PW5ldyBVaW50OEFycmF5KDY0Km8pLGw9MCxmPTA7bDw2NDtsKyssZis9byl1LnNldChzLGYpO3ZhciBoPShhPW5ldyBPKG4uc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQodSxuLnN1YmFycmF5KDE2LDMyKSkpLnNsaWNlKDAsMTYpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCklMzswPT09aD9uPWIoYSwwLGEubGVuZ3RoKToxPT09aD9uPWsoYSwwLGEubGVuZ3RoKToyPT09aCYmKG49dyhhLDAsYS5sZW5ndGgpKSxpKyt9cmV0dXJuIG4uc3ViYXJyYXkoMCwzMil9cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KX1yZXR1cm4gZCh0LFt7a2V5OiJoYXNoIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUodCxyLG4pfX0se2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSxpKXt2YXIgbz1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCs1Nik7by5zZXQodCwwKSxvLnNldChyLHQubGVuZ3RoKSxvLnNldChhLHQubGVuZ3RoK3IubGVuZ3RoKTt2YXIgcz1lKHQsbyxhKTtyZXR1cm4oMCxuLmlzQXJyYXlFcXVhbCkocyxpKX19LHtrZXk6ImNoZWNrVXNlclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7aS5zZXQodCwwKSxpLnNldChyLHQubGVuZ3RoKTt2YXIgbz1lKHQsaSxbXSk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJnZXRPd25lcktleSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrNTYpO2kuc2V0KHQsMCksaS5zZXQocix0Lmxlbmd0aCksaS5zZXQobix0Lmxlbmd0aCtyLmxlbmd0aCk7dmFyIG89ZSh0LGksbik7cmV0dXJuIG5ldyBBKG8pLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fSx7a2V5OiJnZXRVc2VyS2V5Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGE9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7YS5zZXQodCwwKSxhLnNldChyLHQubGVuZ3RoKTt2YXIgaT1lKHQsYSxbXSk7cmV0dXJuIG5ldyBBKGkpLmRlY3J5cHRCbG9jayhuLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fV0pLHR9KCl9KCk7dC5QREYyMD1GO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2YodGhpcyxlKSx0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yPXQsdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3Rvcj1yfXJldHVybiBkKGUsW3trZXk6ImNyZWF0ZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IGkuRGVjcnlwdFN0cmVhbShlLHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVjcnlwdEJsb2NrKGUsdCl9KSl9fSx7a2V5OiJkZWNyeXB0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcixyPSgwLG4uc3RyaW5nVG9CeXRlcykoZSk7cmV0dXJuIHI9dC5kZWNyeXB0QmxvY2sociwhMCksKDAsbi5ieXRlc1RvU3RyaW5nKShyKX19LHtrZXk6ImVuY3J5cHRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yO2lmKHQgaW5zdGFuY2VvZiB4KXt2YXIgcj0xNi1lLmxlbmd0aCUxNjtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLnJlcGVhdChyKTt2YXIgYT1uZXcgVWludDhBcnJheSgxNik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhKTtlbHNlIGZvcih2YXIgaT0wO2k8MTY7aSsrKWFbaV09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7dmFyIG89KDAsbi5zdHJpbmdUb0J5dGVzKShlKTtvPXQuZW5jcnlwdChvLGEpO3ZhciBzPW5ldyBVaW50OEFycmF5KDE2K28ubGVuZ3RoKTtyZXR1cm4gcy5zZXQoYSkscy5zZXQobywxNiksKDAsbi5ieXRlc1RvU3RyaW5nKShzKX12YXIgYz0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO3JldHVybiBjPXQuZW5jcnlwdChjKSwoMCxuLmJ5dGVzVG9TdHJpbmcpKGMpfX1dKSxlfSgpLFQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHQodCxyLG4sYSxpLG8scyxjKXt2YXIgdSxsLGY9NDArbi5sZW5ndGgrdC5sZW5ndGgsaD1uZXcgVWludDhBcnJheShmKSxkPTA7aWYocilmb3IobD1NYXRoLm1pbigzMixyLmxlbmd0aCk7ZDxsOysrZCloW2RdPXJbZF07Zm9yKHU9MDtkPDMyOyloW2QrK109ZVt1KytdO2Zvcih1PTAsbD1uLmxlbmd0aDt1PGw7Kyt1KWhbZCsrXT1uW3VdO2ZvcihoW2QrK109MjU1JmksaFtkKytdPWk+PjgmMjU1LGhbZCsrXT1pPj4xNiYyNTUsaFtkKytdPWk+Pj4yNCYyNTUsdT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTtvPj00JiYhYyYmKGhbZCsrXT0yNTUsaFtkKytdPTI1NSxoW2QrK109MjU1LGhbZCsrXT0yNTUpO3ZhciBnPXkoaCwwLGQpLHY9cz4+MztpZihvPj0zKWZvcih1PTA7dTw1MDsrK3UpZz15KGcsMCx2KTt2YXIgbSxiPWcuc3ViYXJyYXkoMCx2KTtpZihvPj0zKXtmb3IoZD0wO2Q8MzI7KytkKWhbZF09ZVtkXTtmb3IodT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTttPW5ldyBwKGIpLmVuY3J5cHRCbG9jayh5KGgsMCxkKSksbD1iLmxlbmd0aDt2YXIgdz1uZXcgVWludDhBcnJheShsKTtmb3IodT0xO3U8PTE5OysrdSl7Zm9yKHZhciBrPTA7azxsOysrayl3W2tdPWJba11edTttPW5ldyBwKHcpLmVuY3J5cHRCbG9jayhtKX1mb3IodT0wLGw9bS5sZW5ndGg7dTxsOysrdSlpZihhW3VdIT09bVt1XSlyZXR1cm4gbnVsbH1lbHNlIGZvcih1PTAsbD0obT1uZXcgcChiKS5lbmNyeXB0QmxvY2soZSkpLmxlbmd0aDt1PGw7Kyt1KWlmKGFbdV0hPT1tW3VdKXJldHVybiBudWxsO3JldHVybiBifXZhciByPWEuTmFtZS5nZXQoIklkZW50aXR5Iik7ZnVuY3Rpb24gaShlLHQscil7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrOSksbz1yLmxlbmd0aDtmb3Iobj0wO248bzsrK24paVtuXT1yW25dO3JldHVybiBpW24rK109MjU1JmUsaVtuKytdPWU+PjgmMjU1LGlbbisrXT1lPj4xNiYyNTUsaVtuKytdPTI1NSZ0LGlbbisrXT10Pj44JjI1NSxhJiYoaVtuKytdPTExNSxpW24rK109NjUsaVtuKytdPTEwOCxpW24rK109ODQpLHkoaSwwLG4pLnN1YmFycmF5KDAsTWF0aC5taW4oci5sZW5ndGgrNSwxNikpfWZ1bmN0aW9uIG8oZSx0LHIsbyxzKXtpZighKHQgaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNyeXB0IGZpbHRlciBuYW1lLiIpO3ZhciBjLHU9ZS5nZXQodC5uYW1lKTtpZihudWxsIT11JiYoYz11LmdldCgiQ0ZNIikpLCFjfHwiTm9uZSI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTfTtpZigiVjIiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcChpKHIsbyxzLCExKSl9O2lmKCJBRVNWMiI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPKGkocixvLHMsITApKX07aWYoIkFFU1YzIj09PWMubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEocyl9O3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoaSxvLGMpe2YodGhpcyxzKTt2YXIgdT1pLmdldCgiRmlsdGVyIik7aWYoISgwLGEuaXNOYW1lKSh1LCJTdGFuZGFyZCIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPXUubmFtZSx0aGlzLmRpY3Q9aTt2YXIgbD1pLmdldCgiViIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHwxIT09bCYmMiE9PWwmJjQhPT1sJiY1IT09bCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0iKTt0aGlzLmFsZ29yaXRobT1sO3ZhciBoPWkuZ2V0KCJMZW5ndGgiKTtpZighaClpZihsPD0zKWg9NDA7ZWxzZXt2YXIgZD1pLmdldCgiQ0YiKSxnPWkuZ2V0KCJTdG1GIik7aWYoZCBpbnN0YW5jZW9mIGEuRGljdCYmZyBpbnN0YW5jZW9mIGEuTmFtZSl7ZC5zdXBwcmVzc0VuY3J5cHRpb249ITA7dmFyIHY9ZC5nZXQoZy5uYW1lKTsoaD12JiZ2LmdldCgiTGVuZ3RoIil8fDEyOCk8NDAmJihoPDw9Myl9fWlmKCFOdW1iZXIuaXNJbnRlZ2VyKGgpfHxoPDQwfHxoJTghPTApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBtPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMCwzMiksYj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsMzIpLHc9aS5nZXQoIlAiKSxrPWkuZ2V0KCJSIiksUz0oND09PWx8fDU9PT1sKSYmITEhPT1pLmdldCgiRW5jcnlwdE1ldGFkYXRhIik7dGhpcy5lbmNyeXB0TWV0YWRhdGE9Uzt2YXIgeCxPLEE9KDAsbi5zdHJpbmdUb0J5dGVzKShvKTtpZihjKXtpZig2PT09ayl0cnl7Yz0oMCxuLnV0ZjhTdHJpbmdUb1N0cmluZykoYyl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTogVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLiIpfXg9KDAsbi5zdHJpbmdUb0J5dGVzKShjKX1pZig1IT09bClPPXQoQSx4LG0sYix3LGssaCxTKTtlbHNle3ZhciBQPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMzIsNDApLFQ9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiTyIpKS5zdWJhcnJheSg0MCw0OCksST0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsNDgpLEU9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSgzMiw0MCksaj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDQwLDQ4KSxNPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk9FIikpLF89KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVUUiKSk7KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiUGVybXMiKSksTz1mdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyx1LGwsZil7aWYodCl7dmFyIGg9TWF0aC5taW4oMTI3LHQubGVuZ3RoKTt0PXQuc3ViYXJyYXkoMCxoKX1lbHNlIHQ9W107dmFyIGQ7cmV0dXJuKGQ9Nj09PWU/bmV3IEY6bmV3IEMpLmNoZWNrVXNlclBhc3N3b3JkKHQscyxvKT9kLmdldFVzZXJLZXkodCxjLGwpOnQubGVuZ3RoJiZkLmNoZWNrT3duZXJQYXNzd29yZCh0LG4saSxyKT9kLmdldE93bmVyS2V5KHQsYSxpLHUpOm51bGx9KGsseCxtLFAsVCxJLGIsRSxqLE0sXyl9aWYoIU8mJiFjKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJObyBwYXNzd29yZCBnaXZlbiIsbi5QYXNzd29yZFJlc3BvbnNlcy5ORUVEX1BBU1NXT1JEKTtpZighTyYmYyl7dmFyIEw9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KDMyKSxvPTAscz1NYXRoLm1pbigzMix0Lmxlbmd0aCk7bzxzOysrbylpW29dPXRbb107Zm9yKHZhciBjPTA7bzwzMjspaVtvKytdPWVbYysrXTt2YXIgdSxsPXkoaSwwLG8pLGY9YT4+MztpZihuPj0zKWZvcihjPTA7Yzw1MDsrK2MpbD15KGwsMCxsLmxlbmd0aCk7aWYobj49Myl7dT1yO3ZhciBoPW5ldyBVaW50OEFycmF5KGYpO2ZvcihjPTE5O2M+PTA7Yy0tKXtmb3IodmFyIGQ9MDtkPGY7KytkKWhbZF09bFtkXV5jO3U9bmV3IHAoaCkuZW5jcnlwdEJsb2NrKHUpfX1lbHNlIHU9bmV3IHAobC5zdWJhcnJheSgwLGYpKS5lbmNyeXB0QmxvY2socik7cmV0dXJuIHV9KHgsbSxrLGgpO089dChBLEwsbSxiLHcsayxoLFMpfWlmKCFPKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJJbmNvcnJlY3QgUGFzc3dvcmQiLG4uUGFzc3dvcmRSZXNwb25zZXMuSU5DT1JSRUNUX1BBU1NXT1JEKTtpZih0aGlzLmVuY3J5cHRpb25LZXk9TyxsPj00KXt2YXIgUj1pLmdldCgiQ0YiKTtSIGluc3RhbmNlb2YgYS5EaWN0JiYoUi5zdXBwcmVzc0VuY3J5cHRpb249ITApLHRoaXMuY2Y9Uix0aGlzLnN0bWY9aS5nZXQoIlN0bUYiKXx8cix0aGlzLnN0cmY9aS5nZXQoIlN0ckYiKXx8cix0aGlzLmVmZj1pLmdldCgiRUZGIil8fHRoaXMuc3RtZn19cmV0dXJuIGQocyxbe2tleToiY3JlYXRlQ2lwaGVyVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKDQ9PT10aGlzLmFsZ29yaXRobXx8NT09PXRoaXMuYWxnb3JpdGhtKXJldHVybiBuZXcgUChvKHRoaXMuY2YsdGhpcy5zdHJmLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpLG8odGhpcy5jZix0aGlzLnN0bWYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSkpO3ZhciByPWkoZSx0LHRoaXMuZW5jcnlwdGlvbktleSwhMSksbj1mdW5jdGlvbigpe3JldHVybiBuZXcgcChyKX07cmV0dXJuIG5ldyBQKG4sbil9fV0pLHN9KCk7cmV0dXJuIHN9KCk7dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PVR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWNyeXB0U3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmRlY3J5cHQ9cixuLm5leHRDaHVuaz1udWxsLG4uaW5pdGlhbGl6ZWQ9ITEsbn1yZXR1cm4gdD1sLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5pbml0aWFsaXplZD9lPXRoaXMubmV4dENodW5rOihlPXRoaXMuc3RyLmdldEJ5dGVzKDUxMiksdGhpcy5pbml0aWFsaXplZD0hMCksZSYmMCE9PWUubGVuZ3RoKXt0aGlzLm5leHRDaHVuaz10aGlzLnN0ci5nZXRCeXRlcyg1MTIpO3ZhciB0PXRoaXMubmV4dENodW5rJiZ0aGlzLm5leHRDaHVuay5sZW5ndGg+MDtlPSgwLHRoaXMuZGVjcnlwdCkoZSwhdCk7dmFyIHI9dGhpcy5idWZmZXJMZW5ndGgsbj1yK2UubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKG4pLnNldChlLHIpLHRoaXMuYnVmZmVyTGVuZ3RoPW59ZWxzZSB0aGlzLmVvZj0hMH19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5EZWNyeXB0U3RyZWFtPXN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DYXRhbG9nPXZvaWQgMDt2YXIgbj1yKDEzNSksYT1yKDIpLGk9cigxMzQpLG89cigxOTkpLHM9cigxMzYpLGM9cigyMDApLHU9cigxNDMpLGw9cigyMDEpLGY9cigxODgpLGg9cigyMDIpLGQ9cigyMDMpO2Z1bmN0aW9uIHAoZSl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHAoZSl9ZnVuY3Rpb24gZygpe2c9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gdihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7dihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7dihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9dyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gdyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gayhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2soZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGsoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBTKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PXAoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1wKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09cChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24geChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuRGljdCYmKGU9ZS5nZXQoIkQiKSksQXJyYXkuaXNBcnJheShlKT9lOm51bGx9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnhyZWY9cix0aGlzLl9jYXREaWN0PXIuZ2V0Q2F0YWxvZ09iaigpLCEodGhpcy5fY2F0RGljdCBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy50b3BsZXZlbFBhZ2VzRGljdCx0aGlzLl9hY3R1YWxOdW1QYWdlcz1udWxsLHRoaXMuZm9udENhY2hlPW5ldyBpLlJlZlNldENhY2hlLHRoaXMuYnVpbHRJbkNNYXBDYWNoZT1uZXcgTWFwLHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW5ldyBNYXAsdGhpcy5nbG9iYWxJbWFnZUNhY2hlPW5ldyBmLkdsb2JhbEltYWdlQ2FjaGUsdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGUsdGhpcy5wYWdlSW5kZXhDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZSx0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9bmV3IGkuUmVmU2V0fXZhciB0LHIsdixPLEEsQyxGO3JldHVybiB0PWUscj1be2tleToidmVyc2lvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlZlcnNpb24iKTtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXtpZihuLlBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KGUubmFtZSkpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZlcnNpb24iLGUubmFtZSk7KDAsYS53YXJuKSgiSW52YWxpZCBQREYgY2F0YWxvZyB2ZXJzaW9uOiAiLmNvbmNhdChlLm5hbWUpKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmVyc2lvbiIsbnVsbCl9fSx7a2V5OiJsYW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJsYW5nIiwic3RyaW5nIj09dHlwZW9mIGU/KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZSk6bnVsbCl9fSx7a2V5OiJuZWVkc1JlbmRlcmluZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5lZWRzUmVuZGVyaW5nIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm5lZWRzUmVuZGVyaW5nIiwiYm9vbGVhbiI9PXR5cGVvZiBlJiZlKX19LHtrZXk6ImNvbGxlY3Rpb24iLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e3ZhciB0PXRoaXMuX2NhdERpY3QuZ2V0KCJDb2xsZWN0aW9uIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZW50cnk7IGFzc3VtaW5nIG5vIGNvbGxlY3Rpb24gaXMgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY29sbGVjdGlvbiIsZSl9fSx7a2V5OiJhY3JvRm9ybSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIkFjcm9Gb3JtIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIEFjcm9Gb3JtIGVudHJ5OyBhc3N1bWluZyBubyBmb3JtcyBhcmUgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiYWNyb0Zvcm0iLGUpfX0se2tleToiYWNyb0Zvcm1SZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJBY3JvRm9ybSIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJhY3JvRm9ybVJlZiIsZSBpbnN0YW5jZW9mIGkuUmVmP2U6bnVsbCl9fSx7a2V5OiJtZXRhZGF0YSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIk1ldGFkYXRhIik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsbnVsbCk7dmFyIHQ9bnVsbDt0cnl7dmFyIHI9ISh0aGlzLnhyZWYuZW5jcnlwdCYmdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKSxvPXRoaXMueHJlZi5mZXRjaChlLHIpO2lmKG8gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0mJm8uZGljdCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGM9by5kaWN0LmdldCgiVHlwZSIpLHU9by5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCgwLGkuaXNOYW1lKShjLCJNZXRhZGF0YSIpJiYoMCxpLmlzTmFtZSkodSwiWE1MIikpe3ZhciBsPSgwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShvLmdldFN0cmluZygpKTtsJiYodD1uZXcgaC5NZXRhZGF0YVBhcnNlcihsKS5zZXJpYWxpemFibGUpfX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLmluZm8pKCdTa2lwcGluZyBpbnZhbGlkIE1ldGFkYXRhOiAiJy5jb25jYXQoZSwnIi4nKSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIix0KX19LHtrZXk6Im1hcmtJbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRNYXJrSW5mbygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtYXJrSW5mbyIsZSl9fSx7a2V5OiJfcmVhZE1hcmtJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJNYXJrSW5mbyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9e01hcmtlZDohMSxVc2VyUHJvcGVydGllczohMSxTdXNwZWN0czohMX07Zm9yKHZhciByIGluIHQpe3ZhciBuPWUuZ2V0KHIpOyJib29sZWFuIj09dHlwZW9mIG4mJih0W3JdPW4pfXJldHVybiB0fX0se2tleToic3RydWN0VHJlZVJvb3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFN0cnVjdFRyZWVSb290KCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJzdHJ1Y3RUcmVlUm9vdCIsZSl9fSx7a2V5OiJfcmVhZFN0cnVjdFRyZWVSb290Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJTdHJ1Y3RUcmVlUm9vdCIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9bmV3IGQuU3RydWN0VHJlZVJvb3QoZSk7cmV0dXJuIHQuaW5pdCgpLHR9fSx7a2V5OiJ0b3BsZXZlbFBhZ2VzRGljdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfX0se2tleToiZG9jdW1lbnRPdXRsaW5lIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9fSx7a2V5OiJfcmVhZERvY3VtZW50T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2lmKCEoKHQ9dC5nZXRSYXcoIkZpcnN0IikpaW5zdGFuY2VvZiBpLlJlZikpcmV0dXJuIG51bGw7dmFyIHI9e2l0ZW1zOltdfSxuPVt7b2JqOnQscGFyZW50OnJ9XSxvPW5ldyBpLlJlZlNldDtvLnB1dCh0KTtmb3IodmFyIHM9dGhpcy54cmVmLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO24ubGVuZ3RoPjA7KXt2YXIgbD1uLnNoaWZ0KCksZj1zLmZldGNoSWZSZWYobC5vYmopO2lmKG51bGwhPT1mKXtpZighZi5oYXMoIlRpdGxlIikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLiIpO3ZhciBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O2UucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6ZixyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOnRoaXMuYXR0YWNobWVudHN9KTt2YXIgZD1mLmdldCgiVGl0bGUiKSxwPWYuZ2V0KCJGIil8fDAsZz1mLmdldEFycmF5KCJDIiksdj1mLmdldCgiQ291bnQiKSx5PWM7IUFycmF5LmlzQXJyYXkoZyl8fDMhPT1nLmxlbmd0aHx8MD09PWdbMF0mJjA9PT1nWzFdJiYwPT09Z1syXXx8KHk9dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihnLDApKTt2YXIgbT17YWN0aW9uOmguYWN0aW9uLGF0dGFjaG1lbnQ6aC5hdHRhY2htZW50LGRlc3Q6aC5kZXN0LHVybDpoLnVybCx1bnNhZmVVcmw6aC51bnNhZmVVcmwsbmV3V2luZG93OmgubmV3V2luZG93LHNldE9DR1N0YXRlOmguc2V0T0NHU3RhdGUsdGl0bGU6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZCksY29sb3I6eSxjb3VudDpOdW1iZXIuaXNJbnRlZ2VyKHYpP3Y6dm9pZCAwLGJvbGQ6ISEoMiZwKSxpdGFsaWM6ISEoMSZwKSxpdGVtczpbXX07bC5wYXJlbnQuaXRlbXMucHVzaChtKSwodD1mLmdldFJhdygiRmlyc3QiKSlpbnN0YW5jZW9mIGkuUmVmJiYhby5oYXModCkmJihuLnB1c2goe29iajp0LHBhcmVudDptfSksby5wdXQodCkpLCh0PWYuZ2V0UmF3KCJOZXh0IikpaW5zdGFuY2VvZiBpLlJlZiYmIW8uaGFzKHQpJiYobi5wdXNoKHtvYmo6dCxwYXJlbnQ6bC5wYXJlbnR9KSxvLnB1dCh0KSl9fXJldHVybiByLml0ZW1zLmxlbmd0aD4wP3IuaXRlbXM6bnVsbH19LHtrZXk6InBlcm1pc3Npb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQZXJtaXNzaW9ucygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBlcm1pc3Npb25zIixlKX19LHtrZXk6Il9yZWFkUGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJFbmNyeXB0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz1NYXRoLnBvdygyLDMyKTt2YXIgcj1bXTtmb3IodmFyIG4gaW4gYS5QZXJtaXNzaW9uRmxhZyl7dmFyIG89YS5QZXJtaXNzaW9uRmxhZ1tuXTt0Jm8mJnIucHVzaChvKX1yZXR1cm4gcn19LHtrZXk6Im9wdGlvbmFsQ29udGVudENvbmZpZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9DUHJvcGVydGllcyIpO2lmKCF0KXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO3ZhciByPXQuZ2V0KCJEIik7aWYoIXIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7dmFyIG89dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShvKSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTt2YXIgcyxjPVtdLHU9W10sbD1iKG8pO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZihmIGluc3RhbmNlb2YgaS5SZWYpe3UucHVzaChmKTt2YXIgaD10aGlzLnhyZWYuZmV0Y2hJZlJlZihmKTtjLnB1c2goe2lkOmYudG9TdHJpbmcoKSxuYW1lOiJzdHJpbmciPT10eXBlb2YgaC5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiTmFtZSIpKTpudWxsLGludGVudDoic3RyaW5nIj09dHlwZW9mIGguZ2V0KCJJbnRlbnQiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiSW50ZW50IikpOm51bGx9KX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfShlPXRoaXMuX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcocix1KSkuZ3JvdXBzPWN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogIi5jb25jYXQoZSkpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLGUpfX0se2tleToiX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihlKXt2YXIgcj1bXTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbixhPWIoZSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28gaW5zdGFuY2VvZiBpLlJlZiYmdC5pbmNsdWRlcyhvKSYmci5wdXNoKG8udG9TdHJpbmcoKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfX1yZXR1cm4gcn1mdW5jdGlvbiBuKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO3ZhciBuLGE9W10scz1iKGUpO3RyeXtmb3Iocy5zKCk7IShuPXMubigpKS5kb25lOyl7dmFyIHU9bi52YWx1ZTtpZih1IGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXModSkpYy5wdXQodSksYS5wdXNoKHUudG9TdHJpbmcoKSk7ZWxzZXt2YXIgbD1vKHUscik7bCYmYS5wdXNoKGwpfX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYocj4wKXJldHVybiBhO3ZhciBmLGg9W10sZD1iKHQpO3RyeXtmb3IoZC5zKCk7IShmPWQubigpKS5kb25lOyl7dmFyIHA9Zi52YWx1ZTtjLmhhcyhwKXx8aC5wdXNoKHAudG9TdHJpbmcoKSl9fWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfXJldHVybiBoLmxlbmd0aCYmYS5wdXNoKHtuYW1lOm51bGwsb3JkZXI6aH0pLGF9ZnVuY3Rpb24gbyhlLHQpe2lmKCsrdD51KXJldHVybigwLGEud2FybikoInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLiIpLG51bGw7dmFyIHI9cy5mZXRjaElmUmVmKGUpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBudWxsO3ZhciBpPXMuZmV0Y2hJZlJlZihyWzBdKTtpZigic3RyaW5nIiE9dHlwZW9mIGkpcmV0dXJuIG51bGw7dmFyIG89bihyLnNsaWNlKDEpLHQpO3JldHVybiBvJiZvLmxlbmd0aD97bmFtZTooMCxhLnN0cmluZ1RvUERGU3RyaW5nKShpKSxvcmRlcjpvfTpudWxsfXZhciBzPXRoaXMueHJlZixjPW5ldyBpLlJlZlNldCx1PTEwO3JldHVybntuYW1lOiJzdHJpbmciPT10eXBlb2YgZS5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiTmFtZSIpKTpudWxsLGNyZWF0b3I6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiQ3JlYXRvciIpPygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJDcmVhdG9yIikpOm51bGwsYmFzZVN0YXRlOmUuZ2V0KCJCYXNlU3RhdGUiKWluc3RhbmNlb2YgaS5OYW1lP2UuZ2V0KCJCYXNlU3RhdGUiKS5uYW1lOm51bGwsb246cihlLmdldCgiT04iKSksb2ZmOnIoZS5nZXQoIk9GRiIpKSxvcmRlcjpuKGUuZ2V0KCJPcmRlciIpKSxncm91cHM6bnVsbH19fSx7a2V5OiJzZXRBY3R1YWxOdW1QYWdlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1lfX0se2tleToiaGFzQWN0dWFsTnVtUGFnZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWN0dWFsTnVtUGFnZXN9fSx7a2V5OiJfcGFnZXNDb3VudCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoIkNvdW50Iik7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9wYWdlc0NvdW50IixlKX19LHtrZXk6Im51bVBhZ2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBY3R1YWxOdW1QYWdlcz90aGlzLl9hY3R1YWxOdW1QYWdlczp0aGlzLl9wYWdlc0NvdW50fX0se2tleToiZGVzdGluYXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkRGVzdHMoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZSBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByLG49YihlLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT14KHNbMV0pO3UmJih0WygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGMpXT11KX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9fWVsc2UgZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuPXgocik7biYmKHRbZV09bil9KSk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRlc3RpbmF0aW9ucyIsdCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZERlc3RzKCk7aWYodCBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByPXgodC5nZXQoZSkpO2lmKHIpcmV0dXJuIHI7dmFyIG49dGhpcy5kZXN0aW5hdGlvbnNbZV07aWYobilyZXR1cm4oMCxhLndhcm4pKCdGb3VuZCAiJy5jb25jYXQoZSwnIiBhdCBhbiBpbmNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIE5hbWVUcmVlLicpKSxufWVsc2UgaWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIHM9eCh0LmdldChlKSk7aWYocylyZXR1cm4gc31yZXR1cm4gbnVsbH19LHtrZXk6Il9yZWFkRGVzdHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGUmJmUuaGFzKCJEZXN0cyIpP25ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJEZXN0cyIpLHRoaXMueHJlZik6dGhpcy5fY2F0RGljdC5oYXMoIkRlc3RzIik/dGhpcy5fY2F0RGljdC5nZXQoIkRlc3RzIik6dm9pZCAwfX0se2tleToicGFnZUxhYmVscyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGFnZUxhYmVscygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYWJlbHMiLGUpfX0se2tleToiX3JlYWRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKSxyPW51bGwscz0iIixjPW5ldyBvLk51bWJlclRyZWUoZSx0aGlzLnhyZWYpLmdldEFsbCgpLHU9IiIsbD0xLGY9MCxoPXRoaXMubnVtUGFnZXM7ZjxoO2YrKyl7dmFyIGQ9Yy5nZXQoZik7aWYodm9pZCAwIT09ZCl7aWYoIShkIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYoZC5oYXMoIlR5cGUiKSYmISgwLGkuaXNOYW1lKShkLmdldCgiVHlwZSIpLCJQYWdlTGFiZWwiKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0eXBlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2lmKGQuaGFzKCJTIikpe3ZhciBwPWQuZ2V0KCJTIik7aWYoIShwIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdHlsZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtyPXAubmFtZX1lbHNlIHI9bnVsbDtpZihkLmhhcygiUCIpKXt2YXIgZz1kLmdldCgiUCIpO2lmKCJzdHJpbmciIT10eXBlb2YgZyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBwcmVmaXggaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7cz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShnKX1lbHNlIHM9IiI7aWYoZC5oYXMoIlN0Iikpe3ZhciB2PWQuZ2V0KCJTdCIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih2KSYmdj49MSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgc3RhcnQgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7bD12fWVsc2UgbD0xfXN3aXRjaChyKXtjYXNlIkQiOnU9bDticmVhaztjYXNlIlIiOmNhc2UiciI6dT0oMCxuLnRvUm9tYW5OdW1lcmFscykobCwiciI9PT1yKTticmVhaztjYXNlIkEiOmNhc2UiYSI6dmFyIHk9ImEiPT09cj85Nzo2NSxtPWwtMTt1PVN0cmluZy5mcm9tQ2hhckNvZGUoeSttJTI2KS5yZXBlYXQoTWF0aC5mbG9vcihtLzI2KSsxKTticmVhaztkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoJ0ludmFsaWQgc3R5bGUgIicuY29uY2F0KHIsJyIgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJykpO3U9IiJ9dFtmXT1zK3UsbCsrfXJldHVybiB0fX0se2tleToicGFnZUxheW91dCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VMYXlvdXQiKSx0PSIiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTaW5nbGVQYWdlIjpjYXNlIk9uZUNvbHVtbiI6Y2FzZSJUd29Db2x1bW5MZWZ0IjpjYXNlIlR3b0NvbHVtblJpZ2h0IjpjYXNlIlR3b1BhZ2VMZWZ0IjpjYXNlIlR3b1BhZ2VSaWdodCI6dD1lLm5hbWV9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYXlvdXQiLHQpfX0se2tleToicGFnZU1vZGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTW9kZSIpLHQ9IlVzZU5vbmUiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJGdWxsU2NyZWVuIjpjYXNlIlVzZU9DIjpjYXNlIlVzZUF0dGFjaG1lbnRzIjp0PWUubmFtZX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywicGFnZU1vZGUiLHQpfX0se2tleToidmlld2VyUHJlZmVyZW5jZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLl9jYXREaWN0LmdldCgiVmlld2VyUHJlZmVyZW5jZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsbnVsbCk7dmFyIHIsbj1udWxsLG89Yih0LmdldEtleXMoKSk7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlLGM9dC5nZXQocyksdT12b2lkIDA7c3dpdGNoKHMpe2Nhc2UiSGlkZVRvb2xiYXIiOmNhc2UiSGlkZU1lbnViYXIiOmNhc2UiSGlkZVdpbmRvd1VJIjpjYXNlIkZpdFdpbmRvdyI6Y2FzZSJDZW50ZXJXaW5kb3ciOmNhc2UiRGlzcGxheURvY1RpdGxlIjpjYXNlIlBpY2tUcmF5QnlQREZTaXplIjoiYm9vbGVhbiI9PXR5cGVvZiBjJiYodT1jKTticmVhaztjYXNlIk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIlVzZU9DIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9IlVzZU5vbmUifWJyZWFrO2Nhc2UiRGlyZWN0aW9uIjppZihjIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChjLm5hbWUpe2Nhc2UiTDJSIjpjYXNlIlIyTCI6dT1jLm5hbWU7YnJlYWs7ZGVmYXVsdDp1PSJMMlIifWJyZWFrO2Nhc2UiVmlld0FyZWEiOmNhc2UiVmlld0NsaXAiOmNhc2UiUHJpbnRBcmVhIjpjYXNlIlByaW50Q2xpcCI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIk1lZGlhQm94IjpjYXNlIkNyb3BCb3giOmNhc2UiQmxlZWRCb3giOmNhc2UiVHJpbUJveCI6Y2FzZSJBcnRCb3giOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQ3JvcEJveCJ9YnJlYWs7Y2FzZSJQcmludFNjYWxpbmciOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJOb25lIjpjYXNlIkFwcERlZmF1bHQiOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQXBwRGVmYXVsdCJ9YnJlYWs7Y2FzZSJEdXBsZXgiOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJTaW1wbGV4IjpjYXNlIkR1cGxleEZsaXBTaG9ydEVkZ2UiOmNhc2UiRHVwbGV4RmxpcExvbmdFZGdlIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9Ik5vbmUifWJyZWFrO2Nhc2UiUHJpbnRQYWdlUmFuZ2UiOkFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJTI9PTAmJmMuZXZlcnkoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih0KSYmdD4wJiYoMD09PXJ8fHQ+PW5bci0xXSkmJnQ8PWUubnVtUGFnZXN9KSkmJih1PWMpO2JyZWFrO2Nhc2UiTnVtQ29waWVzIjpOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPjAmJih1PWMpO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiSWdub3Jpbmcgbm9uLXN0YW5kYXJkIGtleSBpbiBWaWV3ZXJQcmVmZXJlbmNlczogIi5jb25jYXQocywiLiIpKTtjb250aW51ZX12b2lkIDAhPT11PyhufHwobj1PYmplY3QuY3JlYXRlKG51bGwpKSxuW3NdPXUpOigwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICcpLmNvbmNhdChjLCIuIikpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLG4pfX0se2tleToib3BlbkFjdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIG49bmV3IGkuRGljdCh0aGlzLnhyZWYpO24uc2V0KCJBIix0KTt2YXIgbz17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtlLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0Om4scmVzdWx0T2JqOm99KSxBcnJheS5pc0FycmF5KG8uZGVzdCk/ci5kZXN0PW8uZGVzdDpvLmFjdGlvbiYmKHIuYWN0aW9uPW8uYWN0aW9uKX1lbHNlIEFycmF5LmlzQXJyYXkodCkmJihyLmRlc3Q9dCk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wZW5BY3Rpb24iLCgwLGEub2JqZWN0U2l6ZSkocik+MD9yOm51bGwpfX0se2tleToiYXR0YWNobWVudHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpLHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXt2YXIgcixuPWIobmV3IG8uTmFtZVRyZWUoZS5nZXRSYXcoIkVtYmVkZGVkRmlsZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdLGY9bmV3IGwuRmlsZVNwZWModSx0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpLHRbKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyldPWYuc2VyaWFsaXphYmxlfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImF0dGFjaG1lbnRzIix0KX19LHtrZXk6InhmYUltYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIiksdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJYRkFJbWFnZXMiKSl7dmFyIHIsbj1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdO3R8fCh0PW5ldyBpLkRpY3QodGhpcy54cmVmKSksdC5zZXQoKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyksdSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywieGZhSW1hZ2VzIix0KX19LHtrZXk6Il9jb2xsZWN0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKSx0PW51bGw7ZnVuY3Rpb24gcihlLHIpe2lmKHIgaW5zdGFuY2VvZiBpLkRpY3QmJigwLGkuaXNOYW1lKShyLmdldCgiUyIpLCJKYXZhU2NyaXB0Iikpe3ZhciBuPXIuZ2V0KCJKUyIpO2lmKG4gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pbj1uLmdldFN0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBuKXJldHVybjtudWxsPT09dCYmKHQ9bmV3IE1hcCksbj0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShuKS5yZXBsYWNlKC9cdTAwMDAvZywiIiksdC5zZXQoZSxuKX19aWYoZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5oYXMoIkphdmFTY3JpcHQiKSl7dmFyIG4sYz1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJKYXZhU2NyaXB0IiksdGhpcy54cmVmKS5nZXRBbGwoKSk7dHJ5e2ZvcihjLnMoKTshKG49Yy5uKCkpLmRvbmU7KXt2YXIgdT1tKG4udmFsdWUsMiksbD11WzBdLGY9dVsxXTtyKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGwpLGYpfX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX19dmFyIGg9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTtyZXR1cm4gaCYmcigiT3BlbkFjdGlvbiIsaCksdH19LHtrZXk6ImphdmFTY3JpcHQiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiamF2YVNjcmlwdCIsdD9mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBrKGUpfShlPXQudmFsdWVzKCkpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHx3KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpOm51bGwpfX0se2tleToianNBY3Rpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpLHQ9KDAsbi5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMuX2NhdERpY3QsYS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSk7aWYoZSl7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHIsaT1iKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89bShyLnZhbHVlLDIpLHM9b1swXSxjPW9bMV07cyBpbiB0P3Rbc10ucHVzaChjKTp0W3NdPVtjXX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLHQpfX0se2tleToiZm9udEZhbGxiYWNrIix2YWx1ZTooRj15KGcoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG87cmV0dXJuIGcoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgMjpuPWUuc2VudCxhPWIobiksZS5wcmV2PTQsYS5zKCk7Y2FzZSA2OmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTM7YnJlYWt9aWYoKG89aS52YWx1ZSkubG9hZGVkTmFtZSE9PXQpe2UubmV4dD0xMTticmVha31yZXR1cm4gby5mYWxsYmFjayhyKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMTplLm5leHQ9NjticmVhaztjYXNlIDEzOmUubmV4dD0xODticmVhaztjYXNlIDE1OmUucHJldj0xNSxlLnQwPWUuY2F0Y2goNCksYS5lKGUudDApO2Nhc2UgMTg6cmV0dXJuIGUucHJldj0xOCxhLmYoKSxlLmZpbmlzaCgxOCk7Y2FzZSAyMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzQsMTUsMTgsMjFdXSl9KSkpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNsZWFudXAiLHZhbHVlOihDPXkoZygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sYSxpPWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PWkubGVuZ3RoPjAmJnZvaWQgMCE9PWlbMF0mJmlbMF0sKDAsYy5jbGVhckdsb2JhbENhY2hlcykoKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIodCksdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKSx0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCksdGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCksZS5uZXh0PTgsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgODpyPWUuc2VudCxuPWIocik7dHJ5e2ZvcihuLnMoKTshKGE9bi5uKCkpLmRvbmU7KWRlbGV0ZSBhLnZhbHVlLmRpY3QuY2FjaGVLZXl9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dGhpcy5mb250Q2FjaGUuY2xlYXIoKSx0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuY2xlYXIoKSx0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlRGljdCIsdmFsdWU6KEE9eShnKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLG8scyxjLHUsbCxmLGgsZCxwLHYseSxtLGIsdztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnI9W3RoaXMudG9wbGV2ZWxQYWdlc0RpY3RdLG49bmV3IGkuUmVmU2V0LChvPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpKWluc3RhbmNlb2YgaS5SZWYmJm4ucHV0KG8pLHM9dGhpcy54cmVmLGM9dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsdT10aGlzLnBhZ2VJbmRleENhY2hlLGw9MDtjYXNlIDY6aWYoIXIubGVuZ3RoKXtlLm5leHQ9Njc7YnJlYWt9aWYoISgoZj1yLnBvcCgpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9MzQ7YnJlYWt9aWYoISgoaD1jLmdldChmKSk+PTAmJmwraDw9dCkpe2UubmV4dD0xMzticmVha31yZXR1cm4gbCs9aCxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgMTM6aWYoIW4uaGFzKGYpKXtlLm5leHQ9MTU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2VzIHRyZWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlLiIpO2Nhc2UgMTU6cmV0dXJuIG4ucHV0KGYpLGUubmV4dD0xOCxzLmZldGNoQXN5bmMoZik7Y2FzZSAxODppZighKChkPWUuc2VudClpbnN0YW5jZW9mIGkuRGljdCkpe2UubmV4dD0zMjticmVha31pZighKChwPWQuZ2V0UmF3KCJUeXBlIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5uZXh0PTI0LHMuZmV0Y2hBc3luYyhwKTtjYXNlIDI0OnA9ZS5zZW50O2Nhc2UgMjU6aWYoISgwLGkuaXNOYW1lKShwLCJQYWdlIikmJmQuaGFzKCJLaWRzIikpe2UubmV4dD0zMjticmVha31pZihjLmhhcyhmKXx8Yy5wdXQoZiwxKSx1LmhhcyhmKXx8dS5wdXQoZixsKSxsIT09dCl7ZS5uZXh0PTMwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbZCxmXSk7Y2FzZSAzMDpyZXR1cm4gbCsrLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzMjpyZXR1cm4gci5wdXNoKGQpLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzNDppZihmIGluc3RhbmNlb2YgaS5EaWN0KXtlLm5leHQ9MzY7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTtjYXNlIDM2OmlmKHY9Zi5vYmpJZCwhKCh5PWYuZ2V0UmF3KCJDb3VudCIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUubmV4dD00MSxzLmZldGNoQXN5bmMoeSk7Y2FzZSA0MTp5PWUuc2VudDtjYXNlIDQyOmlmKCEoTnVtYmVyLmlzSW50ZWdlcih5KSYmeT49MCkpe2UubmV4dD00NzticmVha31pZih2JiYhYy5oYXModikmJmMucHV0KHYseSksIShsK3k8PXQpKXtlLm5leHQ9NDc7YnJlYWt9cmV0dXJuIGwrPXksZS5hYnJ1cHQoImNvbnRpbnVlIiw2KTtjYXNlIDQ3OmlmKCEoKG09Zi5nZXRSYXcoIktpZHMiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUyO2JyZWFrfXJldHVybiBlLm5leHQ9NTEscy5mZXRjaEFzeW5jKG0pO2Nhc2UgNTE6bT1lLnNlbnQ7Y2FzZSA1MjppZihBcnJheS5pc0FycmF5KG0pKXtlLm5leHQ9NjQ7YnJlYWt9aWYoISgoYj1mLmdldFJhdygiVHlwZSIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NTg7YnJlYWt9cmV0dXJuIGUubmV4dD01NyxzLmZldGNoQXN5bmMoYik7Y2FzZSA1NzpiPWUuc2VudDtjYXNlIDU4OmlmKCEoMCxpLmlzTmFtZSkoYiwiUGFnZSIpJiZmLmhhcygiS2lkcyIpKXtlLm5leHQ9NjM7YnJlYWt9aWYobCE9PXQpe2UubmV4dD02MTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsW2YsbnVsbF0pO2Nhc2UgNjE6cmV0dXJuIGwrKyxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgNjM6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIik7Y2FzZSA2NDpmb3Iodz1tLmxlbmd0aC0xO3c+PTA7dy0tKXIucHVzaChtW3ddKTtlLm5leHQ9NjticmVhaztjYXNlIDY3OnRocm93IG5ldyBFcnJvcigiUGFnZSBpbmRleCAiLmNvbmNhdCh0LCIgbm90IGZvdW5kLiIpKTtjYXNlIDY4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIEEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFsbFBhZ2VEaWN0cyIsdmFsdWU6KE89eShnKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4PWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnA9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIG4uWFJlZkVudHJ5RXhjZXB0aW9uJiYhdCl0aHJvdyBlO3QmJnImJjA9PT1oJiYoKDAsYS53YXJuKSgnZ2V0QWxsUGFnZURpY3RzIC0gU2tpcHBpbmcgaW52YWxpZCBmaXJzdCBwYWdlOiAiJy5jb25jYXQoZSwnIi4nKSksZT1pLkRpY3QuZW1wdHkpLHUuc2V0KGgrKyxbZSxudWxsXSl9LGQ9ZnVuY3Rpb24oZSx0KXt0JiYhZi5oYXModCkmJmYucHV0KHQsaCksdS5zZXQoaCsrLFtlLHRdKX0sdD14Lmxlbmd0aD4wJiZ2b2lkIDAhPT14WzBdJiZ4WzBdLHI9dGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzLG89W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0scz1uZXcgaS5SZWZTZXQsKGM9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIikpaW5zdGFuY2VvZiBpLlJlZiYmcy5wdXQoYyksdT1uZXcgTWFwLGw9dGhpcy54cmVmLGY9dGhpcy5wYWdlSW5kZXhDYWNoZSxoPTA7Y2FzZSAxMDppZighKG8ubGVuZ3RoPjApKXtlLm5leHQ9NzA7YnJlYWt9aWYodj1vLmF0KC0xKSx5PXYuY3VycmVudE5vZGUsbT12LnBvc0luS2lkcywhKChiPXkuZ2V0UmF3KCJLaWRzIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5wcmV2PTE1LGUubmV4dD0xOCxsLmZldGNoQXN5bmMoYik7Y2FzZSAxODpiPWUuc2VudCxlLm5leHQ9MjU7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gZS5wcmV2PTIxLGUudDA9ZS5jYXRjaCgxNSkscChlLnQwKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDI1OmlmKEFycmF5LmlzQXJyYXkoYikpe2UubmV4dD0yODticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAyODppZighKG0+PWIubGVuZ3RoKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBvLnBvcCgpLGUuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgMzE6aWYodz1iW21dLGs9dm9pZCAwLCEodyBpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUwO2JyZWFrfWlmKCFzLmhhcyh3KSl7ZS5uZXh0PTM3O2JyZWFrfXJldHVybiBwKG5ldyBhLkZvcm1hdEVycm9yKCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAzNzpyZXR1cm4gcy5wdXQodyksZS5wcmV2PTM4LGUubmV4dD00MSxsLmZldGNoQXN5bmModyk7Y2FzZSA0MTprPWUuc2VudCxlLm5leHQ9NDg7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gZS5wcmV2PTQ0LGUudDE9ZS5jYXRjaCgzOCkscChlLnQxKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDQ4OmUubmV4dD01MTticmVhaztjYXNlIDUwOms9dztjYXNlIDUxOmlmKGsgaW5zdGFuY2VvZiBpLkRpY3Qpe2UubmV4dD01NDticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDU0OmlmKCEoKFM9ay5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTY2O2JyZWFrfXJldHVybiBlLnByZXY9NTYsZS5uZXh0PTU5LGwuZmV0Y2hBc3luYyhTKTtjYXNlIDU5OlM9ZS5zZW50LGUubmV4dD02NjticmVhaztjYXNlIDYyOnJldHVybiBlLnByZXY9NjIsZS50Mj1lLmNhdGNoKDU2KSxwKGUudDIpLGUuYWJydXB0KCJicmVhayIsNzApO2Nhc2UgNjY6KDAsaS5pc05hbWUpKFMsIlBhZ2UiKXx8IWsuaGFzKCJLaWRzIik/ZChrLHcgaW5zdGFuY2VvZiBpLlJlZj93Om51bGwpOm8ucHVzaCh7Y3VycmVudE5vZGU6ayxwb3NJbktpZHM6MH0pLHYucG9zSW5LaWRzKyssZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNzA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHUpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxNSwyMV0sWzM4LDQ0XSxbNTYsNjJdXSl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KGUpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShyKTt2YXIgbj10aGlzLnhyZWYsbz0wO3JldHVybiBmdW5jdGlvbiByKHMpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcixvPTA7cmV0dXJuIG4uZmV0Y2hBc3luYyh0KS50aGVuKChmdW5jdGlvbihuKXtpZigoMCxpLmlzUmVmc0VxdWFsKSh0LGUpJiYhKDAsaS5pc0RpY3QpKG4sIlBhZ2UiKSYmIShuIGluc3RhbmNlb2YgaS5EaWN0JiYhbi5oYXMoIlR5cGUiKSYmbi5oYXMoIkNvbnRlbnRzIikpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJUaGUgcmVmZXJlbmNlIGRvZXMgbm90IHBvaW50IHRvIGEgL1BhZ2UgZGljdGlvbmFyeS4iKTtpZighbilyZXR1cm4gbnVsbDtpZighKG4gaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybiByPW4uZ2V0UmF3KCJQYXJlbnQiKSxuLmdldEFzeW5jKCJQYXJlbnQiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIGUuZ2V0QXN5bmMoIktpZHMiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgcyxjPVtdLHU9ITEsbD1iKGUpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZighKGYgaW5zdGFuY2VvZiBpLlJlZikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIktpZCBtdXN0IGJlIGEgcmVmZXJlbmNlLiIpO2lmKCgwLGkuaXNSZWZzRXF1YWwpKGYsdCkpe3U9ITA7YnJlYWt9Yy5wdXNoKG4uZmV0Y2hBc3luYyhmKS50aGVuKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtlLmhhcygiQ291bnQiKT9vKz1lLmdldCgiQ291bnQiKTpvKyt9KSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1pZighdSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwoYykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bbyxyXX0pKX0pKX0ocykudGhlbigoZnVuY3Rpb24obil7aWYoIW4pcmV0dXJuIHQucGFnZUluZGV4Q2FjaGUucHV0KGUsbyksbzt2YXIgYT1tKG4sMiksaT1hWzBdLHM9YVsxXTtyZXR1cm4gbys9aSxyKHMpfSkpfShlKX19LHtrZXk6ImJhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJVUkkiKTtpZihlIGluc3RhbmNlb2YgaS5EaWN0KXt2YXIgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9KDAsYS5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0LG51bGwse3RyeUNvbnZlcnRFbmNvZGluZzohMH0pO2lmKHIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLHIuaHJlZil9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJiYXNlVXJsIixudWxsKX19XSx2PVt7a2V5OiJwYXJzZURlc3REaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRlc3REaWN0O2lmKHQgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciByPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiPT09cChyKSl7dmFyIG8sYyx1PWUuZG9jQmFzZVVybHx8bnVsbCxsPWUuZG9jQXR0YWNobWVudHN8fG51bGwsZj10LmdldCgiQSIpO2lmKGYgaW5zdGFuY2VvZiBpLkRpY3R8fCh0LmhhcygiRGVzdCIpP2Y9dC5nZXQoIkRlc3QiKTooZj10LmdldCgiQUEiKSlpbnN0YW5jZW9mIGkuRGljdCYmKGYuaGFzKCJEIik/Zj1mLmdldCgiRCIpOmYuaGFzKCJVIikmJihmPWYuZ2V0KCJVIikpKSksZiBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGg9Zi5nZXQoIlMiKTtpZighKGggaW5zdGFuY2VvZiBpLk5hbWUpKXJldHVybiB2b2lkKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogSW52YWxpZCB0eXBlIGluIEFjdGlvbiBkaWN0aW9uYXJ5LiIpO3ZhciBkPWgubmFtZTtzd2l0Y2goZCl7Y2FzZSJSZXNldEZvcm0iOnZhciBnLHY9Zi5nZXQoIkZsYWdzIikseT0wPT0oMSYoIm51bWJlciI9PXR5cGVvZiB2P3Y6MCkpLG09W10sdz1bXSxrPWIoZi5nZXQoIkZpZWxkcyIpfHxbXSk7dHJ5e2ZvcihrLnMoKTshKGc9ay5uKCkpLmRvbmU7KXt2YXIgUz1nLnZhbHVlO1MgaW5zdGFuY2VvZiBpLlJlZj93LnB1c2goUy50b1N0cmluZygpKToic3RyaW5nIj09dHlwZW9mIFMmJm0ucHVzaCgoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShTKSl9fWNhdGNoKGUpe2suZShlKX1maW5hbGx5e2suZigpfXIucmVzZXRGb3JtPXtmaWVsZHM6bSxyZWZzOncsaW5jbHVkZTp5fTticmVhaztjYXNlIlVSSSI6KG89Zi5nZXQoIlVSSSIpKWluc3RhbmNlb2YgaS5OYW1lJiYobz0iLyIrby5uYW1lKTticmVhaztjYXNlIkdvVG8iOmM9Zi5nZXQoIkQiKTticmVhaztjYXNlIkxhdW5jaCI6Y2FzZSJHb1RvUiI6dmFyIHg9Zi5nZXQoIkYiKTt4IGluc3RhbmNlb2YgaS5EaWN0P289eC5nZXQoIkYiKXx8bnVsbDoic3RyaW5nIj09dHlwZW9mIHgmJihvPXgpO3ZhciBPPWYuZ2V0KCJEIik7aWYoTyYmKE8gaW5zdGFuY2VvZiBpLk5hbWUmJihPPU8ubmFtZSksInN0cmluZyI9PXR5cGVvZiBvKSl7dmFyIEE9by5zcGxpdCgiIyIpWzBdOyJzdHJpbmciPT10eXBlb2YgTz9vPUErIiMiK086QXJyYXkuaXNBcnJheShPKSYmKG89QSsiIyIrSlNPTi5zdHJpbmdpZnkoTykpfXZhciBDPWYuZ2V0KCJOZXdXaW5kb3ciKTsiYm9vbGVhbiI9PXR5cGVvZiBDJiYoci5uZXdXaW5kb3c9Qyk7YnJlYWs7Y2FzZSJHb1RvRSI6dmFyIEYsUD1mLmdldCgiVCIpO2lmKGwmJlAgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBUPVAuZ2V0KCJSIiksST1QLmdldCgiTiIpOygwLGkuaXNOYW1lKShULCJDIikmJiJzdHJpbmciPT10eXBlb2YgSSYmKEY9bFsoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShJKV0pfUY/ci5hdHRhY2htZW50PUY6KDAsYS53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuaW1wbGVtZW50ZWQgIkdvVG9FIiBhY3Rpb24uJyk7YnJlYWs7Y2FzZSJOYW1lZCI6dmFyIEU9Zi5nZXQoIk4iKTtFIGluc3RhbmNlb2YgaS5OYW1lJiYoci5hY3Rpb249RS5uYW1lKTticmVhaztjYXNlIlNldE9DR1N0YXRlIjp2YXIgaj1mLmdldCgiU3RhdGUiKSxNPWYuZ2V0KCJQcmVzZXJ2ZVJCIik7aWYoIUFycmF5LmlzQXJyYXkoail8fDA9PT1qLmxlbmd0aClicmVhazt2YXIgXyxMPVtdLFI9YihqKTt0cnl7Zm9yKFIucygpOyEoXz1SLm4oKSkuZG9uZTspe3ZhciBOPV8udmFsdWU7aWYoTiBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goTi5uYW1lKXtjYXNlIk9OIjpjYXNlIk9GRiI6Y2FzZSJUb2dnbGUiOkwucHVzaChOLm5hbWUpfWVsc2UgTiBpbnN0YW5jZW9mIGkuUmVmJiZMLnB1c2goTi50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9aWYoTC5sZW5ndGghPT1qLmxlbmd0aClicmVhaztyLnNldE9DR1N0YXRlPXtzdGF0ZTpMLHByZXNlcnZlUkI6ImJvb2xlYW4iIT10eXBlb2YgTXx8TX07YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijp2YXIgRCxCPWYuZ2V0KCJKUyIpO0IgaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0/RD1CLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgQiYmKEQ9Qik7dmFyIFU9RCYmKDAsbi5yZWNvdmVySnNVUkwpKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKEQpKTtpZihVKXtvPVUudXJsLHIubmV3V2luZG93PVUubmV3V2luZG93O2JyZWFrfWRlZmF1bHQ6aWYoIkphdmFTY3JpcHQiPT09ZHx8IlN1Ym1pdEZvcm0iPT09ZClicmVhazsoMCxhLndhcm4pKCdwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5zdXBwb3J0ZWQgYWN0aW9uOiAiJy5jb25jYXQoZCwnIi4nKSl9fWVsc2UgdC5oYXMoIkRlc3QiKSYmKGM9dC5nZXQoIkRlc3QiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBvKXt2YXIgJD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKG8sdSx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pOyQmJihyLnVybD0kLmhyZWYpLHIudW5zYWZlVXJsPW99YyYmKGMgaW5zdGFuY2VvZiBpLk5hbWUmJihjPWMubmFtZSksInN0cmluZyI9PXR5cGVvZiBjP3IuZGVzdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTpBcnJheS5pc0FycmF5KGMpJiYoci5kZXN0PWMpKX1lbHNlKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogYHJlc3VsdE9iamAgbXVzdCBiZSBhbiBvYmplY3QuIil9ZWxzZSgwLGEud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IGBkZXN0RGljdGAgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIil9fV0sciYmUyh0LnByb3RvdHlwZSxyKSx2JiZTKHQsdiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkNhdGFsb2c9T30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk51bWJlclRyZWU9dC5OYW1lVHJlZT12b2lkIDA7dmFyIG49cigxMzQpLGE9cigyKTtmdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJm8oZSx0KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxvKGUsdCl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1jKGUpO2lmKHQpe3ZhciBhPWModGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09dSh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX1mdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09dShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXUobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT11KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBwKGUsdCxyKXtyZXR1cm4gdCYmZChlLnByb3RvdHlwZSx0KSxyJiZkKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2godGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIE5hbWVPck51bWJlclRyZWUuIiksdGhpcy5yb290PXQsdGhpcy54cmVmPXIsdGhpcy5fdHlwZT1ufXJldHVybiBwKGUsW3trZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7dmFyIHQ9dGhpcy54cmVmLHI9bmV3IG4uUmVmU2V0O3IucHV0KHRoaXMucm9vdCk7Zm9yKHZhciBpPVt0aGlzLnJvb3RdO2kubGVuZ3RoPjA7KXt2YXIgbz10LmZldGNoSWZSZWYoaS5zaGlmdCgpKTtpZihvIGluc3RhbmNlb2Ygbi5EaWN0KWlmKG8uaGFzKCJLaWRzIikpe3ZhciBzPW8uZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkocykpY29udGludWU7dmFyIGMsdT1sKHMpO3RyeXtmb3IodS5zKCk7IShjPXUubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZihyLmhhcyhmKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcignRHVwbGljYXRlIGVudHJ5IGluICInLmNvbmNhdCh0aGlzLl90eXBlLCciIHRyZWUuJykpO2kucHVzaChmKSxyLnB1dChmKX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9fWVsc2V7dmFyIGg9by5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IodmFyIGQ9MCxwPWgubGVuZ3RoO2Q8cDtkKz0yKWUuc2V0KHQuZmV0Y2hJZlJlZihoW2RdKSx0LmZldGNoSWZSZWYoaFtkKzFdKSl9fXJldHVybiBlfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZighdGhpcy5yb290KXJldHVybiBudWxsO2Zvcih2YXIgdD10aGlzLnhyZWYscj10LmZldGNoSWZSZWYodGhpcy5yb290KSxuPTA7ci5oYXMoIktpZHMiKTspe2lmKCsrbj4xMClyZXR1cm4oMCxhLndhcm4pKCdTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIicuY29uY2F0KHRoaXMuX3R5cGUsJyIgdHJlZS4nKSksbnVsbDt2YXIgaT1yLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBudWxsO2Zvcih2YXIgbz0wLHM9aS5sZW5ndGgtMTtvPD1zOyl7dmFyIGM9bytzPj4xLHU9dC5mZXRjaElmUmVmKGlbY10pLGw9dS5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGxbMF0pKXM9Yy0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihsWzFdKSkpe3I9dTticmVha31vPWMrMX19aWYobz5zKXJldHVybiBudWxsfXZhciBmPXIuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKHZhciBoPTAsZD1mLmxlbmd0aC0yO2g8PWQ7KXt2YXIgcD1oK2Q+PjEsZz1wKygxJnApLHY9dC5mZXRjaElmUmVmKGZbZ10pO2lmKGU8dilkPWctMjtlbHNle2lmKCEoZT52KSlyZXR1cm4gdC5mZXRjaElmUmVmKGZbZysxXSk7aD1nKzJ9fXJldHVybiBudWxsfX1dKSxlfSgpLHY9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOYW1lcyIpfXJldHVybiBwKHIpfShnKTt0Lk5hbWVUcmVlPXY7dmFyIHk9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOdW1zIil9cmV0dXJuIHAocil9KGcpO3QuTnVtYmVyVHJlZT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2xlYXJHbG9iYWxDYWNoZXM9ZnVuY3Rpb24oKXsoMCxuLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpLCgwLGEuY2xlYXJVbmljb2RlQ2FjaGVzKSgpfTt2YXIgbj1yKDEzNCksYT1yKDE2OSl9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWxlU3BlYz12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTM0KTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLmhhcygiVUYiKT9lLmdldCgiVUYiKTplLmhhcygiRiIpP2UuZ2V0KCJGIik6ZS5oYXMoIlVuaXgiKT9lLmdldCgiVW5peCIpOmUuaGFzKCJNYWMiKT9lLmdldCgiTWFjIik6ZS5oYXMoIkRPUyIpP2UuZ2V0KCJET1MiKTpudWxsfXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHQgaW5zdGFuY2VvZiBpLkRpY3QmJih0aGlzLnhyZWY9cix0aGlzLnJvb3Q9dCx0LmhhcygiRlMiKSYmKHRoaXMuZnM9dC5nZXQoIkZTIikpLHRoaXMuZGVzY3JpcHRpb249dC5oYXMoIkRlc2MiKT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh0LmdldCgiRGVzYyIpKToiIix0LmhhcygiUkYiKSYmKDAsbi53YXJuKSgiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIiksdGhpcy5jb250ZW50QXZhaWxhYmxlPSEwLHQuaGFzKCJFRiIpfHwodGhpcy5jb250ZW50QXZhaWxhYmxlPSExLCgwLG4ud2FybikoIk5vbi1lbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIikpKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZmlsZW5hbWUmJnRoaXMucm9vdCl7dmFyIGU9Yyh0aGlzLnJvb3QpfHwidW5uYW1lZCI7dGhpcy5fZmlsZW5hbWU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSkucmVwbGFjZSgvXFxcXC9nLCJcXCIpLnJlcGxhY2UoL1xcXC8vZywiLyIpLnJlcGxhY2UoL1xcL2csIi8iKX1yZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJjb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jb250ZW50QXZhaWxhYmxlKXJldHVybiBudWxsOyF0aGlzLmNvbnRlbnRSZWYmJnRoaXMucm9vdCYmKHRoaXMuY29udGVudFJlZj1jKHRoaXMucm9vdC5nZXQoIkVGIikpKTt2YXIgZT1udWxsO2lmKHRoaXMuY29udGVudFJlZil7dmFyIHQ9dGhpcy54cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTt0IGluc3RhbmNlb2YgYS5CYXNlU3RyZWFtP2U9dC5nZXRCeXRlcygpOigwLG4ud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpfWVsc2UoMCxuLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnQiKTtyZXR1cm4gZX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuRmlsZVNwZWM9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1ldGFkYXRhUGFyc2VyPXZvaWQgMDt2YXIgbj1yKDE5NSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1vKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGkscz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBzKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gcyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdD10aGlzLl9yZXBhaXIodCk7dmFyIHI9bmV3IG4uU2ltcGxlWE1MUGFyc2VyKHtsb3dlckNhc2VOYW1lOiEwfSkucGFyc2VGcm9tU3RyaW5nKHQpO3RoaXMuX21ldGFkYXRhTWFwPW5ldyBNYXAsdGhpcy5fZGF0YT10LHImJnRoaXMuX3BhcnNlKHIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX3JlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXltePF0rLywiIikucmVwbGFjZSgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQucmVwbGFjZSgvXFwoWzAtM10pKFswLTddKShbMC03XSkvZywoZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjQqdCs4KnIrMSpuKX0pKS5yZXBsYWNlKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UiYXBvcyI6cmV0dXJuIiciO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJxdW90IjpyZXR1cm4nIid9dGhyb3cgbmV3IEVycm9yKCJfcmVwYWlyOiAiLmNvbmNhdCh0LCIgaXNuJ3QgZGVmaW5lZC4iKSl9KSksbj1bXSxhPTAsaT1yLmxlbmd0aDthPGk7YSs9Mil7dmFyIG89MjU2KnIuY2hhckNvZGVBdChhKStyLmNoYXJDb2RlQXQoYSsxKTtvPj0zMiYmbzwxMjcmJjYwIT09byYmNjIhPT1vJiYzOCE9PW8/bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobykpOm4ucHVzaCgiJiN4IisoNjU1MzYrbykudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSsiOyIpfXJldHVybiI+IituLmpvaW4oIiIpfSkpfX0se2tleToiX2dldFNlcXVlbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lO3JldHVybiJyZGY6YmFnIiE9PXQmJiJyZGY6c2VxIiE9PXQmJiJyZGY6YWx0IiE9PXQ/bnVsbDplLmNoaWxkTm9kZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4icmRmOmxpIj09PWUubm9kZU5hbWV9KSl9fSx7a2V5OiJfcGFyc2VBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNDaGlsZE5vZGVzKCkpe3ZhciB0PShuPWUuY2hpbGROb2RlcyxhPTEsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0obixhKXx8byhuLGEpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpWzBdLHI9dGhpcy5fZ2V0U2VxdWVuY2UodCl8fFtdO3RoaXMuX21ldGFkYXRhTWFwLnNldChlLm5vZGVOYW1lLHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudC50cmltKCl9KSkpfXZhciBuLGF9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9jdW1lbnRFbGVtZW50O2lmKCJyZGY6cmRmIiE9PXQubm9kZU5hbWUpZm9yKHQ9dC5maXJzdENoaWxkO3QmJiJyZGY6cmRmIiE9PXQubm9kZU5hbWU7KXQ9dC5uZXh0U2libGluZztpZih0JiYicmRmOnJkZiI9PT10Lm5vZGVOYW1lJiZ0Lmhhc0NoaWxkTm9kZXMoKSl7dmFyIHIsbj1pKHQuY2hpbGROb2Rlcyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO2lmKCJyZGY6ZGVzY3JpcHRpb24iPT09YS5ub2RlTmFtZSl7dmFyIG8scz1pKGEuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9Yy5ub2RlTmFtZTtzd2l0Y2godSl7Y2FzZSIjdGV4dCI6Y29udGludWU7Y2FzZSJkYzpjcmVhdG9yIjpjYXNlImRjOnN1YmplY3QiOnRoaXMuX3BhcnNlQXJyYXkoYyk7Y29udGludWV9dGhpcy5fbWV0YWRhdGFNYXAuc2V0KHUsYy50ZXh0Q29udGVudC50cmltKCkpfX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX19fX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2VkRGF0YTp0aGlzLl9tZXRhZGF0YU1hcCxyYXdEYXRhOnRoaXMuX2RhdGF9fX1dKSYmYyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuTWV0YWRhdGFQYXJzZXI9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cnVjdFRyZWVSb290PXQuU3RydWN0VHJlZVBhZ2U9dm9pZCAwO3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE5OSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGg9IlBBR0VfQ09OVEVOVCIsZD0iU1RSRUFNX0NPTlRFTlQiLHA9Ik9CSkVDVCIsZz0iRUxFTUVOVCIsdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMuZGljdD10LHRoaXMucm9sZU1hcD1uZXcgTWFwfXJldHVybiBmKGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZWFkUm9sZU1hcCgpfX0se2tleToicmVhZFJvbGVNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZGljdC5nZXQoIlJvbGVNYXAiKTt0IGluc3RhbmNlb2Ygbi5EaWN0JiZ0LmZvckVhY2goKGZ1bmN0aW9uKHQscil7ciBpbnN0YW5jZW9mIG4uTmFtZSYmZS5yb2xlTWFwLnNldCh0LHIubmFtZSl9KSl9fV0pLGV9KCk7dC5TdHJ1Y3RUcmVlUm9vdD12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnRyZWU9dCx0aGlzLmRpY3Q9cix0aGlzLmtpZHM9W10sdGhpcy5wYXJzZUtpZHMoKX1yZXR1cm4gZihlLFt7a2V5OiJyb2xlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRpY3QuZ2V0KCJTIiksdD1lIGluc3RhbmNlb2Ygbi5OYW1lP2UubmFtZToiIixyPXRoaXMudHJlZS5yb290O3JldHVybiByLnJvbGVNYXAuaGFzKHQpP3Iucm9sZU1hcC5nZXQodCk6dH19LHtrZXk6InBhcnNlS2lkcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1udWxsLHQ9dGhpcy5kaWN0LmdldFJhdygiUGciKTt0IGluc3RhbmNlb2Ygbi5SZWYmJihlPXQudG9TdHJpbmcoKSk7dmFyIHI9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLGk9byhyKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsYz10aGlzLnBhcnNlS2lkKGUscyk7YyYmdGhpcy5raWRzLnB1c2goYyl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX1lbHNle3ZhciB1PXRoaXMucGFyc2VLaWQoZSxyKTt1JiZ0aGlzLmtpZHMucHVzaCh1KX19fSx7a2V5OiJwYXJzZUtpZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IG0oe3R5cGU6aCxtY2lkOnQscGFnZU9iaklkOmV9KTt2YXIgcj1udWxsO2lmKHQgaW5zdGFuY2VvZiBuLlJlZj9yPXRoaXMuZGljdC54cmVmLmZldGNoKHQpOnQgaW5zdGFuY2VvZiBuLkRpY3QmJihyPXQpLCFyKXJldHVybiBudWxsO3ZhciBhPXIuZ2V0UmF3KCJQZyIpO2EgaW5zdGFuY2VvZiBuLlJlZiYmKGU9YS50b1N0cmluZygpKTt2YXIgaT1yLmdldCgiVHlwZSIpaW5zdGFuY2VvZiBuLk5hbWU/ci5nZXQoIlR5cGUiKS5uYW1lOm51bGw7cmV0dXJuIk1DUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpkLHJlZk9iaklkOnIuZ2V0UmF3KCJTdG0iKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIlN0bSIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZSxtY2lkOnIuZ2V0KCJNQ0lEIil9KToiT0JKUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpwLHJlZk9iaklkOnIuZ2V0UmF3KCJPYmoiKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIk9iaiIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZX0pOm5ldyBtKHt0eXBlOmcsZGljdDpyfSl9fV0pLGV9KCksbT1mKChmdW5jdGlvbiBlKHQpe3ZhciByPXQudHlwZSxuPXQuZGljdCxhPXZvaWQgMD09PW4/bnVsbDpuLGk9dC5tY2lkLG89dm9pZCAwPT09aT9udWxsOmkscz10LnBhZ2VPYmpJZCxjPXZvaWQgMD09PXM/bnVsbDpzLGw9dC5yZWZPYmpJZCxmPXZvaWQgMD09PWw/bnVsbDpsO3UodGhpcyxlKSx0aGlzLnR5cGU9cix0aGlzLmRpY3Q9YSx0aGlzLm1jaWQ9byx0aGlzLnBhZ2VPYmpJZD1jLHRoaXMucmVmT2JqSWQ9Zix0aGlzLnBhcmVudE5vZGU9bnVsbH0pKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnJvb3Q9dCx0aGlzLnJvb3REaWN0PXQ/dC5kaWN0Om51bGwsdGhpcy5wYWdlRGljdD1yLHRoaXMubm9kZXM9W119cmV0dXJuIGYoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5yb290JiZ0aGlzLnJvb3REaWN0KXt2YXIgZT10aGlzLnJvb3REaWN0LmdldCgiUGFyZW50VHJlZSIpO2lmKGUpe3ZhciB0PXRoaXMucGFnZURpY3QuZ2V0KCJTdHJ1Y3RQYXJlbnRzIik7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSl7dmFyIHI9bmV3IGkuTnVtYmVyVHJlZShlLHRoaXMucm9vdERpY3QueHJlZikuZ2V0KHQpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLHM9bmV3IE1hcCxjPW8ocik7dHJ5e2ZvcihjLnMoKTshKGE9Yy5uKCkpLmRvbmU7KXt2YXIgdT1hLnZhbHVlO3UgaW5zdGFuY2VvZiBuLlJlZiYmdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaCh1KSxzKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19fX19LHtrZXk6ImFkZE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7aWYocj40MClyZXR1cm4oMCxhLndhcm4pKCJTdHJ1Y3RUcmVlIE1BWF9ERVBUSCByZWFjaGVkLiIpLG51bGw7aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO3ZhciBpPW5ldyB5KHRoaXMsZSk7dC5zZXQoZSxpKTt2YXIgcz1lLmdldCgiUCIpO2lmKCFzfHwoMCxuLmlzTmFtZSkocy5nZXQoIlR5cGUiKSwiU3RydWN0VHJlZVJvb3QiKSlyZXR1cm4gdGhpcy5hZGRUb3BMZXZlbE5vZGUoZSxpKXx8dC5kZWxldGUoZSksaTt2YXIgYz10aGlzLmFkZE5vZGUocyx0LHIrMSk7aWYoIWMpcmV0dXJuIGk7dmFyIHUsbD0hMSxmPW8oYy5raWRzKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aC50eXBlPT09ZyYmaC5kaWN0PT09ZSYmKGgucGFyZW50Tm9kZT1pLGw9ITApfX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX1yZXR1cm4gbHx8dC5kZWxldGUoZSksaX19LHtrZXk6ImFkZFRvcExldmVsTm9kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnJvb3REaWN0LmdldCgiSyIpO2lmKCFyKXJldHVybiExO2lmKHIgaW5zdGFuY2VvZiBuLkRpY3QpcmV0dXJuIHIub2JqSWQ9PT1lLm9iaklkJiYodGhpcy5ub2Rlc1swXT10LCEwKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4hMDtmb3IodmFyIGE9ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO28mJm8udG9TdHJpbmcoKT09PWUub2JqSWQmJih0aGlzLm5vZGVzW2ldPXQsYT0hMCl9cmV0dXJuIGF9fSx7a2V5OiJzZXJpYWxpemFibGUiLGdldDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtpZihuPjQwKSgwLGEud2FybikoIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTtlbHNle3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7aS5yb2xlPXQucm9sZSxpLmNoaWxkcmVuPVtdLHIuY2hpbGRyZW4ucHVzaChpKTt2YXIgcz10LmRpY3QuZ2V0KCJBbHQiKTsic3RyaW5nIj09dHlwZW9mIHMmJihpLmFsdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShzKSk7dmFyIGM9dC5kaWN0LmdldCgiTGFuZyIpOyJzdHJpbmciPT10eXBlb2YgYyYmKGkubGFuZz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKSk7dmFyIHUsbD1vKHQua2lkcyk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlLHY9Zi50eXBlPT09Zz9mLnBhcmVudE5vZGU6bnVsbDt2P2UodixpLG4rMSk6Zi50eXBlPT09aHx8Zi50eXBlPT09ZD9pLmNoaWxkcmVuLnB1c2goe3R5cGU6ImNvbnRlbnQiLGlkOiJwYWdlIi5jb25jYXQoZi5wYWdlT2JqSWQsIl9tY2lkIikuY29uY2F0KGYubWNpZCl9KTpmLnR5cGU9PT1wJiZpLmNoaWxkcmVuLnB1c2goe3R5cGU6Im9iamVjdCIsaWQ6Zi5yZWZPYmpJZH0pfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX19fXZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7dC5jaGlsZHJlbj1bXSx0LnJvbGU9IlJvb3QiO3ZhciByLG49byh0aGlzLm5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aSYmZShpLHQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19XSksZX0oKTt0LlN0cnVjdFRyZWVQYWdlPWJ9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk9iamVjdExvYWRlcj12b2lkIDA7dmFyIGE9cigxMzQpLGk9cigxMzYpLG89cigxMzUpLHM9cigyKTtmdW5jdGlvbiBjKCl7Yz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LGE9T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LG89aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHM9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIix1PWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2woe30sIiIpfWNhdGNoKGUpe2w9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGYoZSx0LHIsbil7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYobnx8W10pO3JldHVybiBhKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gaChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1mO3ZhciBkPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2woeSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixvKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bChlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gaShhLG8scyxjKXt2YXIgdT1oKGVbYV0sZSxvKTtpZigidGhyb3ciIT09dS50eXBlKXt2YXIgbD11LmFyZyxmPWwudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1uKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2koIm5leHQiLGUscyxjKX0pLChmdW5jdGlvbihlKXtpKCJ0aHJvdyIsZSxzLGMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXtsLnZhbHVlPWUscyhsKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gaSgidGhyb3ciLGUscyxjKX0pKX1jKHUuYXJnKX12YXIgbzthKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7aShlLHIsdCxuKX0pKX1yZXR1cm4gbz1vP28udGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1kKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9aChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1kKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxkO3ZhciBhPWgobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxkO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGQpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbb107aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LGEodywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLGEodiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9bCh2LHUsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixsKGUsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxsKFMucHJvdG90eXBlLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGYodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxsKHcsdSwiR2VuZXJhdG9yIiksbCh3LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbCh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxkKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGR9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxkfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxkfX0sZX1mdW5jdGlvbiB1KGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXt1KGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXt1KGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBkKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQpe2lmKGUgaW5zdGFuY2VvZiBhLkRpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSllPWUuZGljdC5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybjt2YXIgcixuLG89aChlKTt0cnl7Zm9yKG8ucygpOyEocj1vLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7KChuPXMpaW5zdGFuY2VvZiBhLlJlZnx8biBpbnN0YW5jZW9mIGEuRGljdHx8biBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShuKSkmJnQucHVzaChzKX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9fXZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5kaWN0PXQsdGhpcy5rZXlzPXIsdGhpcy54cmVmPW4sdGhpcy5yZWZTZXQ9bnVsbH12YXIgdCxyLG4sdTtyZXR1cm4gdD1lLHI9W3trZXk6ImxvYWQiLHZhbHVlOih1PWwoYygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4saSxvLHMsdTtyZXR1cm4gYygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHZvaWQgMCk7Y2FzZSAyOnQ9dGhpcy5rZXlzLHI9dGhpcy5kaWN0LHRoaXMucmVmU2V0PW5ldyBhLlJlZlNldCxuPVtdLGk9aCh0KTt0cnl7Zm9yKGkucygpOyEobz1pLm4oKSkuZG9uZTspcz1vLnZhbHVlLHZvaWQgMCE9PSh1PXIuZ2V0UmF3KHMpKSYmbi5wdXNoKHUpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl93YWxrKG4pKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfd2FsayIsdmFsdWU6KG49bChjKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLHUsbCxmLGQsZyx2LHksbSxiLHc7cmV0dXJuIGMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPVtdLG49W107Y2FzZSAyOmlmKCF0Lmxlbmd0aCl7ZS5uZXh0PTQ4O2JyZWFrfWlmKCEoKHU9dC5wb3AoKSlpbnN0YW5jZW9mIGEuUmVmKSl7ZS5uZXh0PTIxO2JyZWFrfWlmKCF0aGlzLnJlZlNldC5oYXModSkpe2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDIpO2Nhc2UgNzplLnByZXY9Nyx0aGlzLnJlZlNldC5wdXQodSksdT10aGlzLnhyZWYuZmV0Y2godSksZS5uZXh0PTIxO2JyZWFrO2Nhc2UgMTI6aWYoZS5wcmV2PTEyLGUudDA9ZS5jYXRjaCg3KSxlLnQwIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTE5O2JyZWFrfXJldHVybigwLHMud2FybikoJ09iamVjdExvYWRlci5fd2FsayAtIHJlcXVlc3RpbmcgYWxsIGRhdGE6ICInLmNvbmNhdChlLnQwLCciLicpKSx0aGlzLnJlZlNldD1udWxsLGw9dGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLGUuYWJydXB0KCJyZXR1cm4iLGwucmVxdWVzdEFsbENodW5rcygpKTtjYXNlIDE5OnIucHVzaCh1KSxuLnB1c2goe2JlZ2luOmUudDAuYmVnaW4sZW5kOmUudDAuZW5kfSk7Y2FzZSAyMTppZighKHUgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pKXtlLm5leHQ9NDU7YnJlYWt9aWYoIShmPXUuZ2V0QmFzZVN0cmVhbXMoKSkpe2UubmV4dD00NTticmVha31kPSExLGc9aChmKSxlLnByZXY9MjYsZy5zKCk7Y2FzZSAyODppZigodj1nLm4oKSkuZG9uZSl7ZS5uZXh0PTM2O2JyZWFrfWlmKCEoeT12LnZhbHVlKS5pc0RhdGFMb2FkZWQpe2UubmV4dD0zMjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiwzNCk7Y2FzZSAzMjpkPSEwLG4ucHVzaCh7YmVnaW46eS5zdGFydCxlbmQ6eS5lbmR9KTtjYXNlIDM0OmUubmV4dD0yODticmVhaztjYXNlIDM2OmUubmV4dD00MTticmVhaztjYXNlIDM4OmUucHJldj0zOCxlLnQxPWUuY2F0Y2goMjYpLGcuZShlLnQxKTtjYXNlIDQxOnJldHVybiBlLnByZXY9NDEsZy5mKCksZS5maW5pc2goNDEpO2Nhc2UgNDQ6ZCYmci5wdXNoKHUpO2Nhc2UgNDU6cCh1LHQpLGUubmV4dD0yO2JyZWFrO2Nhc2UgNDg6aWYoIW4ubGVuZ3RoKXtlLm5leHQ9NTQ7YnJlYWt9cmV0dXJuIGUubmV4dD01MSx0aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhuKTtjYXNlIDUxOm09aChyKTt0cnl7Zm9yKG0ucygpOyEoYj1tLm4oKSkuZG9uZTspKHc9Yi52YWx1ZSlpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnJlZlNldC5yZW1vdmUodyl9Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3dhbGsocikpO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucmVmU2V0PW51bGwsZS5hYnJ1cHQoInJldHVybiIsdm9pZCAwKTtjYXNlIDU2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbNywxMl0sWzI2LDM4LDQxLDQ0XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dLHImJmYodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9iamVjdExvYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWEZBRmFjdG9yeT12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTApLGk9cigyMTYpLG89cigyMTQpLHM9cigyMDcpLGM9cigyKSx1PXIoMjE3KSxsPXIoMjI3KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7ZD1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP3QucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBwKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtwKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtwKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKTt0cnl7dGhpcy5yb290PShuZXcgdS5YRkFQYXJzZXIpLnBhcnNlKGUuX2NyZWF0ZURvY3VtZW50KHQpKTt2YXIgcj1uZXcgYS5CaW5kZXIodGhpcy5yb290KTt0aGlzLmZvcm09ci5iaW5kKCksdGhpcy5kYXRhSGFuZGxlcj1uZXcgaS5EYXRhSGFuZGxlcih0aGlzLnJvb3Qsci5nZXREYXRhKCkpLHRoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS50ZW1wbGF0ZT10aGlzLmZvcm19Y2F0Y2goZSl7KDAsYy53YXJuKSgiWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgYW5kIGJpbmRpbmc6ICIuY29uY2F0KGUpKX19dmFyIHQscixmLHAseSxtO3JldHVybiB0PWUscj1be2tleToiaXNWYWxpZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290JiZ0aGlzLmZvcm19fSx7a2V5OiJfY3JlYXRlUGFnZXNIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5mb3JtW24uJHRvUGFnZXNdKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3NldFRpbWVvdXQoKGZ1bmN0aW9uIG4oKXt0cnl7dmFyIGE9ZS5uZXh0KCk7YS5kb25lP3QoYS52YWx1ZSk6c2V0VGltZW91dChuLDApfWNhdGNoKGUpe3IoZSl9fSksMCl9KSl9fSx7a2V5OiJfY3JlYXRlUGFnZXMiLHZhbHVlOihtPWcoZCgpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gZCgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLnByZXY9MCxlLm5leHQ9Myx0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO2Nhc2UgMzp0aGlzLnBhZ2VzPWUuc2VudCx0aGlzLmRpbXM9dGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlcy5zdHlsZSxyPXQud2lkdGgsbj10LmhlaWdodDtyZXR1cm5bMCwwLHBhcnNlSW50KHIpLHBhcnNlSW50KG4pXX0pKSxlLm5leHQ9MTA7YnJlYWs7Y2FzZSA3OmUucHJldj03LGUudDA9ZS5jYXRjaCgwKSwoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAiLmNvbmNhdChlLnQwKSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzAsN11dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZ2V0Qm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpbXNbZV19fSx7a2V5OiJnZXROdW1QYWdlcyIsdmFsdWU6KHk9ZyhkKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBkKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5wYWdlcyl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUubmV4dD0zLHRoaXMuX2NyZWF0ZVBhZ2VzKCk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLmRpbXMubGVuZ3RoKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJzZXRJbWFnZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS5pbWFnZXM9ZX19LHtrZXk6InNldEZvbnRzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcj1uZXcgby5Gb250RmluZGVyKGUpO3ZhciB0LHI9W10sYT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fSh0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcyk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2k9KDAscy5zdHJpcFF1b3RlcykoaSksdGhpcy5mb3JtW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuZmluZChpKXx8ci5wdXNoKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm4gci5sZW5ndGg+MD9yOm51bGx9fSx7a2V5OiJhcHBlbmRGb250cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5hZGQoZSx0KX19LHtrZXk6ImdldFBhZ2VzIix2YWx1ZToocD1nKGQoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIGQoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZih0aGlzLnBhZ2VzKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5uZXh0PTMsdGhpcy5fY3JlYXRlUGFnZXMoKTtjYXNlIDM6cmV0dXJuIHQ9dGhpcy5wYWdlcyx0aGlzLnBhZ2VzPW51bGwsZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfX1dLGY9W3trZXk6Il9jcmVhdGVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19fSx7a2V5OiJnZXRSaWNoVGV4dEFzSHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7dmFyIHQ9bmV3IHUuWEZBUGFyc2VyKGwuWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbbi4kbm9kZU5hbWVdKSl7dmFyIHI9bC5YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtyW24uJGFwcGVuZENoaWxkXSh0KSx0PXJ9dmFyIGE9dFtuLiR0b0hUTUxdKCk7aWYoIWEuc3VjY2VzcylyZXR1cm4gbnVsbDt2YXIgaT1hLmh0bWwsbz1pLmF0dHJpYnV0ZXM7cmV0dXJuIG8mJihvLmNsYXNzJiYoby5jbGFzcz1vLmNsYXNzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuc3RhcnRzV2l0aCgieGZhIil9KSkpLG8uZGlyPSJhdXRvIikse2h0bWw6aSxzdHI6dFtuLiR0ZXh0XSgpfX1jYXRjaChlKXsoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiByaWNoIHRleHQ6ICIuY29uY2F0KGUpKX1yZXR1cm4gbnVsbH19XSxyJiZ2KHQucHJvdG90eXBlLHIpLGYmJnYodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWEZBRmFjdG9yeT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWG1sT2JqZWN0PXQuWEZBT2JqZWN0QXJyYXk9dC5YRkFPYmplY3Q9dC5YRkFBdHRyaWJ1dGU9dC5TdHJpbmdPYmplY3Q9dC5PcHRpb25PYmplY3Q9dC5PcHRpb24xMD10Lk9wdGlvbjAxPXQuSW50ZWdlck9iamVjdD10LkNvbnRlbnRPYmplY3Q9dC4kdWlkPXQuJHRvU3R5bGU9dC4kdG9TdHJpbmc9dC4kdG9QYWdlcz10LiR0b0hUTUw9dC4kdGV4dD10LiR0YWJJbmRleD10LiRzZXRWYWx1ZT10LiRzZXRTZXRBdHRyaWJ1dGVzPXQuJHNldElkPXQuJHNlYXJjaE5vZGU9dC4kcm9vdD10LiRyZXNvbHZlUHJvdG90eXBlcz10LiRyZW1vdmVDaGlsZD10LiRwdXNoUGFyYT10LiRwdXNoR2x5cGhzPXQuJHBvcFBhcmE9dC4kb25UZXh0PXQuJG9uQ2hpbGRDaGVjaz10LiRvbkNoaWxkPXQuJG5zQXR0cmlidXRlcz10LiRub2RlTmFtZT10LiRuYW1lc3BhY2VJZD10LiRpc1VzYWJsZT10LiRpc1RyYW5zcGFyZW50PXQuJGlzVGhlcmVNb3JlV2lkdGg9dC4kaXNTcGxpdHRhYmxlPXQuJGlzTnNBZ25vc3RpYz10LiRpc0Rlc2NlbmRlbnQ9dC4kaXNEYXRhVmFsdWU9dC4kaXNDREFUQVhtbD10LiRpc0JpbmRhYmxlPXQuJGluc2VydEF0PXQuJGluZGV4T2Y9dC4kaWRzPXQuJGhhc1NldHRhYmxlVmFsdWU9dC4kZ2xvYmFsRGF0YT10LiRnZXRUZW1wbGF0ZVJvb3Q9dC4kZ2V0U3ViZm9ybVBhcmVudD10LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdD10LiRnZXRQYXJlbnQ9dC4kZ2V0TmV4dFBhZ2U9dC4kZ2V0RXh0cmE9dC4kZ2V0RGF0YVZhbHVlPXQuJGdldENvbnRhaW5lZENoaWxkcmVuPXQuJGdldENoaWxkcmVuQnlOYW1lSXQ9dC4kZ2V0Q2hpbGRyZW5CeU5hbWU9dC4kZ2V0Q2hpbGRyZW5CeUNsYXNzPXQuJGdldENoaWxkcmVuPXQuJGdldEF2YWlsYWJsZVNwYWNlPXQuJGdldEF0dHJpYnV0ZXM9dC4kZ2V0QXR0cmlidXRlSXQ9dC4kZmx1c2hIVE1MPXQuJGZpbmFsaXplPXQuJGV4dHJhPXQuJGR1bXA9dC4kZGF0YT10LiRjb250ZW50PXQuJGNvbnN1bWVkPXQuJGNsb25lPXQuJGNsZWFudXA9dC4kY2xlYW5QYWdlPXQuJGNsZWFuPXQuJGNoaWxkcmVuVG9IVE1MPXQuJGFwcGVuZENoaWxkPXQuJGFkZEhUTUw9dC4kYWNjZXB0V2hpdGVzcGFjZT12b2lkIDA7dmFyIG49cigyMDcpLGE9cigyKSxpPXIoMTM1KSxvPXIoMjA4KSxzPXIoMjA5KTtmdW5jdGlvbiBjKCl7cmV0dXJuIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1wKGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZChlKX0odGhpcyxyKX19ZnVuY3Rpb24gZChlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoKXt2PWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIGg/dDpoLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGY9e307ZnVuY3Rpb24gaCgpe31mdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz1wLnByb3RvdHlwZT1oLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGY9dS52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PWcoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWYpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWYpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGY7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGY7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZik6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxmKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGQucHJvdG90eXBlPXAsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnAsY29uZmlndXJhYmxlOiEwfSksbihwLCJjb25zdHJ1Y3RvciIse3ZhbHVlOmQsY29uZmlndXJhYmxlOiEwfSksZC5kaXNwbGF5TmFtZT1jKHAscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWR8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHApOihlLl9fcHJvdG9fXz1wLGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGYpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZn0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGZ9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGZ9fSxlfWZ1bmN0aW9uIHkoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPW0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIG0oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGIoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9iKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBiKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGsoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWcobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1nKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBTKGUsdCxyKXtyZXR1cm4gdCYmayhlLnByb3RvdHlwZSx0KSxyJiZrKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgeD1TeW1ib2woKTt0LiRhY2NlcHRXaGl0ZXNwYWNlPXg7dmFyIE89U3ltYm9sKCk7dC4kYWRkSFRNTD1PO3ZhciBBPVN5bWJvbCgpO3QuJGFwcGVuZENoaWxkPUE7dmFyIEM9U3ltYm9sKCk7dC4kY2hpbGRyZW5Ub0hUTUw9Qzt2YXIgRj1TeW1ib2woKTt0LiRjbGVhbj1GO3ZhciBQPVN5bWJvbCgpO3QuJGNsZWFuUGFnZT1QO3ZhciBUPVN5bWJvbCgpO3QuJGNsZWFudXA9VDt2YXIgST1TeW1ib2woKTt0LiRjbG9uZT1JO3ZhciBFPVN5bWJvbCgpO3QuJGNvbnN1bWVkPUU7dmFyIGo9U3ltYm9sKCJjb250ZW50Iik7dC4kY29udGVudD1qO3ZhciBNPVN5bWJvbCgiZGF0YSIpO3QuJGRhdGE9TTt2YXIgXz1TeW1ib2woKTt0LiRkdW1wPV87dmFyIEw9U3ltYm9sKCJleHRyYSIpO3QuJGV4dHJhPUw7dmFyIFI9U3ltYm9sKCk7dC4kZmluYWxpemU9Ujt2YXIgTj1TeW1ib2woKTt0LiRmbHVzaEhUTUw9Tjt2YXIgRD1TeW1ib2woKTt0LiRnZXRBdHRyaWJ1dGVJdD1EO3ZhciBCPVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZXM9Qjt2YXIgVT1TeW1ib2woKTt0LiRnZXRBdmFpbGFibGVTcGFjZT1VO3ZhciAkPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlDbGFzcz0kO3ZhciBYPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlOYW1lPVg7dmFyIEg9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD1IO3ZhciBxPVN5bWJvbCgpO3QuJGdldERhdGFWYWx1ZT1xO3ZhciBHPVN5bWJvbCgpO3QuJGdldEV4dHJhPUc7dmFyIHo9U3ltYm9sKCk7dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9ejt2YXIgVz1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbj1XO3ZhciBWPVN5bWJvbCgpO3QuJGdldENvbnRhaW5lZENoaWxkcmVuPVY7dmFyIFk9U3ltYm9sKCk7dC4kZ2V0TmV4dFBhZ2U9WTt2YXIgSz1TeW1ib2woKTt0LiRnZXRTdWJmb3JtUGFyZW50PUs7dmFyIEo9U3ltYm9sKCk7dC4kZ2V0UGFyZW50PUo7dmFyIFo9U3ltYm9sKCk7dC4kZ2V0VGVtcGxhdGVSb290PVo7dmFyIFE9U3ltYm9sKCk7dC4kZ2xvYmFsRGF0YT1RO3ZhciBlZT1TeW1ib2woKTt0LiRoYXNTZXR0YWJsZVZhbHVlPWVlO3ZhciB0ZT1TeW1ib2woKTt0LiRpZHM9dGU7dmFyIHJlPVN5bWJvbCgpO3QuJGluZGV4T2Y9cmU7dmFyIG5lPVN5bWJvbCgpO3QuJGluc2VydEF0PW5lO3ZhciBhZT1TeW1ib2woKTt0LiRpc0NEQVRBWG1sPWFlO3ZhciBpZT1TeW1ib2woKTt0LiRpc0JpbmRhYmxlPWllO3ZhciBvZT1TeW1ib2woKTt0LiRpc0RhdGFWYWx1ZT1vZTt2YXIgc2U9U3ltYm9sKCk7dC4kaXNEZXNjZW5kZW50PXNlO3ZhciBjZT1TeW1ib2woKTt0LiRpc05zQWdub3N0aWM9Y2U7dmFyIHVlPVN5bWJvbCgpO3QuJGlzU3BsaXR0YWJsZT11ZTt2YXIgbGU9U3ltYm9sKCk7dC4kaXNUaGVyZU1vcmVXaWR0aD1sZTt2YXIgZmU9U3ltYm9sKCk7dC4kaXNUcmFuc3BhcmVudD1mZTt2YXIgaGU9U3ltYm9sKCk7dC4kaXNVc2FibGU9aGU7dmFyIGRlPVN5bWJvbCgpLHBlPVN5bWJvbCgibmFtZXNwYWNlSWQiKTt0LiRuYW1lc3BhY2VJZD1wZTt2YXIgZ2U9U3ltYm9sKCJub2RlTmFtZSIpO3QuJG5vZGVOYW1lPWdlO3ZhciB2ZT1TeW1ib2woKTt0LiRuc0F0dHJpYnV0ZXM9dmU7dmFyIHllPVN5bWJvbCgpO3QuJG9uQ2hpbGQ9eWU7dmFyIG1lPVN5bWJvbCgpO3QuJG9uQ2hpbGRDaGVjaz1tZTt2YXIgYmU9U3ltYm9sKCk7dC4kb25UZXh0PWJlO3ZhciB3ZT1TeW1ib2woKTt0LiRwdXNoR2x5cGhzPXdlO3ZhciBrZT1TeW1ib2woKTt0LiRwb3BQYXJhPWtlO3ZhciBTZT1TeW1ib2woKTt0LiRwdXNoUGFyYT1TZTt2YXIgeGU9U3ltYm9sKCk7dC4kcmVtb3ZlQ2hpbGQ9eGU7dmFyIE9lPVN5bWJvbCgicm9vdCIpO3QuJHJvb3Q9T2U7dmFyIEFlPVN5bWJvbCgpO3QuJHJlc29sdmVQcm90b3R5cGVzPUFlO3ZhciBDZT1TeW1ib2woKTt0LiRzZWFyY2hOb2RlPUNlO3ZhciBGZT1TeW1ib2woKTt0LiRzZXRJZD1GZTt2YXIgUGU9U3ltYm9sKCk7dC4kc2V0U2V0QXR0cmlidXRlcz1QZTt2YXIgVGU9U3ltYm9sKCk7dC4kc2V0VmFsdWU9VGU7dmFyIEllPVN5bWJvbCgpO3QuJHRhYkluZGV4PUllO3ZhciBFZT1TeW1ib2woKTt0LiR0ZXh0PUVlO3ZhciBqZT1TeW1ib2woKTt0LiR0b1BhZ2VzPWplO3ZhciBNZT1TeW1ib2woKTt0LiR0b0hUTUw9TWU7dmFyIF9lPVN5bWJvbCgpO3QuJHRvU3RyaW5nPV9lO3ZhciBMZT1TeW1ib2woKTt0LiR0b1N0eWxlPUxlO3ZhciBSZT1TeW1ib2woInVpZCIpO3QuJHVpZD1SZTt2YXIgTmU9U3ltYm9sKCksRGU9U3ltYm9sKCksQmU9U3ltYm9sKCksVWU9U3ltYm9sKCJfY2hpbGRyZW4iKSwkZT1TeW1ib2woKSxYZT1TeW1ib2woKSxIZT1TeW1ib2woKSxxZT1TeW1ib2woKSxHZT1TeW1ib2woKSx6ZT1TeW1ib2woKSxXZT1TeW1ib2woKSxWZT1TeW1ib2woKSxZZT1TeW1ib2woKSxLZT1TeW1ib2woInBhcmVudCIpLEplPVN5bWJvbCgpLFplPVN5bWJvbCgpLFFlPVN5bWJvbCgpLGV0PTAsdHQ9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQscnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt3KHRoaXMsZSksdGhpc1twZV09dCx0aGlzW2dlXT1yLHRoaXNbV2VdPW4sdGhpc1tLZV09bnVsbCx0aGlzW1VlXT1bXSx0aGlzW1JlXT0iIi5jb25jYXQocikuY29uY2F0KGV0KyspLHRoaXNbUV09bnVsbH1yZXR1cm4gUyhlLFt7a2V5OnllLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzW1dlXXx8IXRoaXNbbWVdKGUpKXJldHVybiExO3ZhciB0PWVbZ2VdLHI9dGhpc1t0XTtpZighKHIgaW5zdGFuY2VvZiBudCkpcmV0dXJuIG51bGwhPT1yJiZ0aGlzW3hlXShyKSx0aGlzW3RdPWUsdGhpc1tBXShlKSwhMDtpZihyLnB1c2goZSkpcmV0dXJuIHRoaXNbQV0oZSksITA7dmFyIG49IiI7cmV0dXJuIHRoaXMuaWQ/bj0iIChpZDogIi5jb25jYXQodGhpcy5pZCwiKSIpOnRoaXMubmFtZSYmKG49IiAobmFtZTogIi5jb25jYXQodGhpcy5uYW1lLCIgIikuY29uY2F0KHRoaXMuaC52YWx1ZSwiKSIpKSwoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdCh0aGlzW2dlXSwnIicpLmNvbmNhdChuLCcgaGFzIGFscmVhZHkgZW5vdWdoICInKS5jb25jYXQodCwnIiEnKSksITF9fSx7a2V5Om1lLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KGVbZ2VdKSYmZVtwZV09PT10aGlzW3BlXX19LHtrZXk6Y2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6eCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTphZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTppZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTprZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGFyYSYmdGhpc1taXSgpW0xdLnBhcmFTdGFjay5wb3AoKX19LHtrZXk6U2UsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW1pdKClbTF0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKX19LHtrZXk6RmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pZCYmdGhpc1twZV09PT1vLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCYmZS5zZXQodGhpcy5pZCx0aGlzKX19LHtrZXk6Wix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW1FdLnRlbXBsYXRlfX0se2tleTp1ZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpBLHZhbHVlOmZ1bmN0aW9uKGUpe2VbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaChlKSwhZVtRXSYmdGhpc1tRXSYmKGVbUV09dGhpc1tRXSl9fSx7a2V5OnhlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbVWVdLmluZGV4T2YoZSk7dGhpc1tVZV0uc3BsaWNlKHQsMSl9fSx7a2V5OmVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoInZhbHVlIil9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleTpGLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzW1dlXSx0aGlzW1RdJiYoZS5jbGVhbih0aGlzW1RdKSxkZWxldGUgdGhpc1tUXSl9fSx7a2V5OnJlLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW1VlXS5pbmRleE9mKGUpfX0se2tleTpuZSx2YWx1ZTpmdW5jdGlvbihlLHQpe3RbS2VdPXRoaXMsdGhpc1tVZV0uc3BsaWNlKGUsMCx0KSwhdFtRXSYmdGhpc1tRXSYmKHRbUV09dGhpc1tRXSl9fSx7a2V5OmZlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubmFtZX19LHtrZXk6ZGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIn19LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXNbVWVdLmxlbmd0aD90aGlzW2pdOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbRWVdKCl9KSkuam9pbigiIil9fSx7a2V5OkJlLGdldDpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZighdC5fYXR0cmlidXRlcyl7dmFyIHIsbj10Ll9hdHRyaWJ1dGVzPW5ldyBTZXQsaT15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7aWYobnVsbD09PXRoaXNbb118fHRoaXNbb11pbnN0YW5jZW9mIGV8fHRoaXNbb11pbnN0YW5jZW9mIG50KWJyZWFrO24uYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsQmUsdC5fYXR0cmlidXRlcyl9fSx7a2V5OnNlLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZSlyZXR1cm4hMDt0PXRbSl0oKX1yZXR1cm4hMX19LHtrZXk6Six2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0tlXX19LHtrZXk6Syx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0pdKCl9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW2VdOnRoaXNbVWVdfX0se2tleTpfLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzW2pdJiYodC4kY29udGVudD10aGlzW2pdKTt2YXIgcixuPXkoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZSxpPXRoaXNbYV07bnVsbCE9PWkmJihpIGluc3RhbmNlb2YgZT90W2FdPWlbX10oKTppIGluc3RhbmNlb2YgbnQ/aS5pc0VtcHR5KCl8fCh0W2FdPWkuZHVtcCgpKTp0W2FdPWkpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19LHtrZXk6TGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LHtrZXk6TWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5IVE1MUmVzdWx0LkVNUFRZfX0se2tleTpWLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6dD15KHRoaXNbV10oKSksZS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtlLm5leHQ9OTticmVha31yZXR1cm4gbj1yLnZhbHVlLGUubmV4dD03LG47Y2FzZSA3OmUubmV4dD0zO2JyZWFrO2Nhc2UgOTplLm5leHQ9MTQ7YnJlYWs7Y2FzZSAxMTplLnByZXY9MTEsZS50MD1lLmNhdGNoKDEpLHQuZShlLnQwKTtjYXNlIDE0OnJldHVybiBlLnByZXY9MTQsdC5mKCksZS5maW5pc2goMTQpO2Nhc2UgMTc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxLDExLDE0LDE3XV0pfSkpfSx7a2V5OnFlLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOm49eSh0aGlzW1ZdKCkpLGUucHJldj0xLG4ucygpO2Nhc2UgMzppZigoYT1uLm4oKSkuZG9uZSl7ZS5uZXh0PTEzO2JyZWFrfWlmKGk9YS52YWx1ZSx0JiZyIT09dC5oYXMoaVtnZV0pKXtlLm5leHQ9MTE7YnJlYWt9cmV0dXJuIG89dGhpc1tVXSgpLChzPWlbTWVdKG8pKS5zdWNjZXNzfHwodGhpc1tMXS5mYWlsaW5nTm9kZT1pKSxlLm5leHQ9MTEscztjYXNlIDExOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTM6ZS5uZXh0PTE4O2JyZWFrO2Nhc2UgMTU6ZS5wcmV2PTE1LGUudDA9ZS5jYXRjaCgxKSxuLmUoZS50MCk7Y2FzZSAxODpyZXR1cm4gZS5wcmV2PTE4LG4uZigpLGUuZmluaXNoKDE4KTtjYXNlIDIxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNSwxOCwyMV1dKX0pKX0se2tleTpOLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSx7a2V5Ok8sdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzW0xdLmNoaWxkcmVuLnB1c2goZSl9fSx7a2V5OlUsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OkMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maWx0ZXIscj12b2lkIDA9PT10P251bGw6dCxhPWUuaW5jbHVkZSxpPXZvaWQgMD09PWF8fGE7aWYodGhpc1tMXS5nZW5lcmF0b3Ipe3ZhciBvPXRoaXNbVV0oKSxzPXRoaXNbTF0uZmFpbGluZ05vZGVbTWVdKG8pO2lmKCFzLnN1Y2Nlc3MpcmV0dXJuIHM7cy5odG1sJiZ0aGlzW09dKHMuaHRtbCxzLmJib3gpLGRlbGV0ZSB0aGlzW0xdLmZhaWxpbmdOb2RlfWVsc2UgdGhpc1tMXS5nZW5lcmF0b3I9dGhpc1txZV0ocixpKTtmb3IoOzspe3ZhciBjPXRoaXNbTF0uZ2VuZXJhdG9yLm5leHQoKTtpZihjLmRvbmUpYnJlYWs7dmFyIHU9Yy52YWx1ZTtpZighdS5zdWNjZXNzKXJldHVybiB1O3UuaHRtbCYmdGhpc1tPXSh1Lmh0bWwsdS5iYm94KX1yZXR1cm4gdGhpc1tMXS5nZW5lcmF0b3I9bnVsbCxuLkhUTUxSZXN1bHQuRU1QVFl9fSx7a2V5OlBlLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXNbWmVdPW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpfX0se2tleTp6ZSx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbQmVdLG49dGhpc1taZV07cmV0dXJuKHQ9ZSxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBiKGUpfSh0KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8bSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gci5oYXMoZSkmJiFuLmhhcyhlKX0pKX19LHtrZXk6QWUsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFNldCxuPXkodGhpc1tVZV0pO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl0LnZhbHVlW0plXShlLHIpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19LHtrZXk6SmUsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzW0dlXShlLHQpO3I/dGhpc1tOZV0ocixlLHQpOnRoaXNbQWVdKGUsdCl9fSx7a2V5OkdlLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy51c2Usbj10aGlzLnVzZWhyZWY7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPW51bGwsbz1udWxsLGM9bnVsbCx1PXI7aWYobj8odT1uLG4uc3RhcnRzV2l0aCgiI3NvbSgiKSYmbi5lbmRzV2l0aCgiKSIpP289bi5zbGljZSg1LG4ubGVuZ3RoLTEpOm4uc3RhcnRzV2l0aCgiLiNzb20oIikmJm4uZW5kc1dpdGgoIikiKT9vPW4uc2xpY2UoNixuLmxlbmd0aC0xKTpuLnN0YXJ0c1dpdGgoIiMiKT9jPW4uc2xpY2UoMSk6bi5zdGFydHNXaXRoKCIuIyIpJiYoYz1uLnNsaWNlKDIpKSk6ci5zdGFydHNXaXRoKCIjIik/Yz1yLnNsaWNlKDEpOm89cix0aGlzLnVzZT10aGlzLnVzZWhyZWY9IiIsYz9pPWUuZ2V0KGMpOihpPSgwLHMuc2VhcmNoTm9kZSkoZS5nZXQoT2UpLHRoaXMsbywhMCwhMSkpJiYoaT1pWzBdKSwhaSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICIuY29uY2F0KHUsIi4iKSksbnVsbDtpZihpW2dlXSE9PXRoaXNbZ2VdKXJldHVybigwLGEud2FybikoIlhGQSAtIEluY29tcGF0aWJsZSBwcm90b3R5cGU6ICIuY29uY2F0KGlbZ2VdLCIgIT09ICIpLmNvbmNhdCh0aGlzW2dlXSwiLiIpKSxudWxsO2lmKHQuaGFzKGkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpLG51bGw7dC5hZGQoaSk7dmFyIGw9aVtHZV0oZSx0KTtyZXR1cm4gbCYmaVtOZV0obCxlLHQpLGlbQWVdKGUsdCksdC5kZWxldGUoaSksaX19LHtrZXk6TmUsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHIuaGFzKGUpKSgwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO2Vsc2V7IXRoaXNbal0mJmVbal0mJih0aGlzW2pdPWVbal0pLG5ldyBTZXQocikuYWRkKGUpO3ZhciBuLGk9eSh0aGlzW3plXShlW1plXSkpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTt0aGlzW29dPWVbb10sdGhpc1taZV0mJnRoaXNbWmVdLmFkZChvKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9dmFyIHMsYz15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7aWYoIXRoaXNbQmVdLmhhcyh1KSl7dmFyIGw9dGhpc1t1XSxmPWVbdV07aWYobCBpbnN0YW5jZW9mIG50KXt2YXIgaCxkPXkobFtVZV0pO3RyeXtmb3IoZC5zKCk7IShoPWQubigpKS5kb25lOyloLnZhbHVlW0plXSh0LHIpfWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfWZvcih2YXIgcD1sW1VlXS5sZW5ndGgsZz1mW1VlXS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9ZVtVZV1bcF1bSV0oKTtpZighbC5wdXNoKHYpKWJyZWFrO3ZbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaCh2KSx2W0plXSh0LHIpfX1lbHNlIGlmKG51bGw9PT1sKXtpZihudWxsIT09Zil7dmFyIG09ZltJXSgpO21bS2VdPXRoaXMsdGhpc1t1XT1tLHRoaXNbVWVdLnB1c2gobSksbVtKZV0odCxyKX19ZWxzZSBsW0FlXSh0LHIpLGYmJmxbTmVdKGYsdCxyKX19fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfX19fSx7a2V5OkksdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxyPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKSxuPXkoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO3RyeXtyW2ldPXRoaXNbaV19Y2F0Y2goZSl7KDAsYS5zaGFkb3cpKHIsaSx0aGlzW2ldKX19fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJbUmVdPSIiLmNvbmNhdChyW2dlXSkuY29uY2F0KGV0KyspLHJbVWVdPVtdO3ZhciBvLHM9eShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlO2lmKHRoaXNbQmVdLmhhcyhjKSlyW2NdPWVbJGVdKHRoaXNbY10pO2Vsc2V7dmFyIHU9dGhpc1tjXTtyW2NdPXUgaW5zdGFuY2VvZiBudD9uZXcgbnQodVtWZV0pOm51bGx9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgbCxmPXkodGhpc1tVZV0pO3RyeXtmb3IoZi5zKCk7IShsPWYubigpKS5kb25lOyl7dmFyIGg9bC52YWx1ZSxkPWhbZ2VdLHA9aFtJXSgpO3JbVWVdLnB1c2gocCkscFtLZV09cixudWxsPT09cltkXT9yW2RdPXA6cltkXVtVZV0ucHVzaChwKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9cmV0dXJuIHJ9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW1VlXS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2dlXT09PWV9KSk6dGhpc1tVZV19fSx7a2V5OiQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZV19fSx7a2V5OlgsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiBBcnJheS5mcm9tKHRoaXNbSF0oZSx0LHIpKX19LHtrZXk6SCx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiB2KCkubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGEpe2Zvcig7Oylzd2l0Y2goYS5wcmV2PWEubmV4dCl7Y2FzZSAwOmlmKCJwYXJlbnQiIT09ZSl7YS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGEubmV4dD0zLHJbS2VdO2Nhc2UgMzpyZXR1cm4gYS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDppPXkocltVZV0pLGEucHJldj01LGkucygpO2Nhc2UgNzppZigobz1pLm4oKSkuZG9uZSl7YS5uZXh0PTE5O2JyZWFrfWlmKChzPW8udmFsdWUpW2dlXSE9PWUpe2EubmV4dD0xMjticmVha31yZXR1cm4gYS5uZXh0PTEyLHM7Y2FzZSAxMjppZihzLm5hbWUhPT1lKXthLm5leHQ9MTU7YnJlYWt9cmV0dXJuIGEubmV4dD0xNSxzO2Nhc2UgMTU6aWYoIXQmJiFzW2ZlXSgpKXthLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGEuZGVsZWdhdGVZaWVsZChzW0hdKGUsdCwhMSksInQwIiwxNyk7Y2FzZSAxNzphLm5leHQ9NzticmVhaztjYXNlIDE5OmEubmV4dD0yNDticmVhaztjYXNlIDIxOmEucHJldj0yMSxhLnQxPWEuY2F0Y2goNSksaS5lKGEudDEpO2Nhc2UgMjQ6cmV0dXJuIGEucHJldj0yNCxpLmYoKSxhLmZpbmlzaCgyNCk7Y2FzZSAyNzppZighbnx8IXJbQmVdLmhhcyhlKSl7YS5uZXh0PTMwO2JyZWFrfXJldHVybiBhLm5leHQ9MzAsbmV3IGF0KHIsZSxyW2VdKTtjYXNlIDMwOmNhc2UiZW5kIjpyZXR1cm4gYS5zdG9wKCl9fSksYSxudWxsLFtbNSwyMSwyNCwyN11dKX0pKSgpfX1dLFt7a2V5OiRlLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVskZV0odCl9KSk6Im9iamVjdCI9PT1nKHQpJiZudWxsIT09dD9PYmplY3QuYXNzaWduKHt9LHQpOnR9fV0pLGV9KCk7dC5YRkFPYmplY3Q9cnQ7dmFyIG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxLzA7dyh0aGlzLGUpLHRoaXNbVmVdPXQsdGhpc1tVZV09W119cmV0dXJuIFMoZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbVWVdLmxlbmd0aDw9dGhpc1tWZV0/KHRoaXNbVWVdLnB1c2goZSksITApOigoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdChlW2dlXSwnIiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAnKS5jb25jYXQodGhpc1tWZV0sIiBjaGlsZHJlbiIpKSwhMSl9fSx7a2V5OiJpc0VtcHR5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpc1tVZV0ubGVuZ3RofX0se2tleToiZHVtcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXNbVWVdLmxlbmd0aD90aGlzW1VlXVswXVtfXSgpOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbX10oKX0pKX19LHtrZXk6SSx2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBlKHRoaXNbVmVdKTtyZXR1cm4gdFtVZV09dGhpc1tVZV0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtJXSgpfSkpLHR9fSx7a2V5OiJjaGlsZHJlbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVWVdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tVZV0ubGVuZ3RoPTB9fV0pLGV9KCk7dC5YRkFPYmplY3RBcnJheT1udDt2YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt3KHRoaXMsZSksdGhpc1tLZV09dCx0aGlzW2dlXT1yLHRoaXNbal09bix0aGlzW0VdPSExLHRoaXNbUmVdPSJhdHRyaWJ1dGUiLmNvbmNhdChldCsrKX1yZXR1cm4gUyhlLFt7a2V5OkosdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tLZV19fSx7a2V5Om9lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXX19LHtrZXk6c2UsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbS2VdPT09ZXx8dGhpc1tLZV1bc2VdKGUpfX1dKSxlfSgpO3QuWEZBQXR0cmlidXRlPWF0O3ZhciBpdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGEsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYodyh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsbikpW2pdPSIiLGFbWGVdPW51bGwsIiN0ZXh0IiE9PW4pe3ZhciBvPW5ldyBNYXA7YVtEZV09bztmb3IodmFyIHM9MCxjPU9iamVjdC5lbnRyaWVzKGkpO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD11KGNbc10sMiksZj1sWzBdLGg9bFsxXTtvLnNldChmLG5ldyBhdChkKGEpLGYsaCkpfWlmKGkuaGFzT3duUHJvcGVydHkodmUpKXt2YXIgcD1pW3ZlXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09cCYmKCJkYXRhR3JvdXAiPT09cD9hW1hlXT0hMToiZGF0YVZhbHVlIj09PXAmJihhW1hlXT0hMCkpfX1yZXR1cm4gYVtFXT0hMSxhfXJldHVybiBTKHIsW3trZXk6X2UsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tnZV07aWYoIiN0ZXh0IiE9PXQpe3ZhciByPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKSh0KSxuPXRoaXNbcGVdPT09dHQ/InhmYToiOiIiO2UucHVzaCgiPCIuY29uY2F0KG4pLmNvbmNhdChyKSk7dmFyIG8scz15KHRoaXNbRGVdLmVudHJpZXMoKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz11KG8udmFsdWUsMiksbD1jWzBdLGY9Y1sxXSxoPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKShsKTtlLnB1c2goIiAiLmNvbmNhdChoLCc9IicpLmNvbmNhdCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKShmW2pdKSwnIicpKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYobnVsbCE9PXRoaXNbWGVdJiYodGhpc1tYZV0/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpLHRoaXNbal18fDAhPT10aGlzW1VlXS5sZW5ndGgpe2lmKGUucHVzaCgiPiIpLHRoaXNbal0pInN0cmluZyI9PXR5cGVvZiB0aGlzW2pdP2UucHVzaCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2pdKSk6dGhpc1tqXVtfZV0oZSk7ZWxzZXt2YXIgZCxwPXkodGhpc1tVZV0pO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOylkLnZhbHVlW19lXShlKX1jYXRjaChlKXtwLmUoZSl9ZmluYWxseXtwLmYoKX19ZS5wdXNoKCI8LyIuY29uY2F0KG4pLmNvbmNhdChyLCI+IikpfWVsc2UgZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKCgwLGkuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXNbal0pKX19LHtrZXk6eWUsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpc1tqXSl7dmFyIHQ9bmV3IHIodGhpc1twZV0sIiN0ZXh0Iik7dGhpc1tBXSh0KSx0W2pdPXRoaXNbal0sdGhpc1tqXT0iIn1yZXR1cm4gdGhpc1tBXShlKSwhMH19LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbal0mJnRoaXNbVWVdLmxlbmd0aD4wKXt2YXIgZT1uZXcgcih0aGlzW3BlXSwiI3RleHQiKTt0aGlzW0FdKGUpLGVbal09dGhpc1tqXSxkZWxldGUgdGhpc1tqXX19fSx7a2V5Ok1lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiN0ZXh0Ij09PXRoaXNbZ2VdP24uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tqXX0pOm4uSFRNTFJlc3VsdC5FTVBUWX19LHtrZXk6Vyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBlP3RoaXNbVWVdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHRbZ2VdPT09ZX0pKTp0aGlzW1VlXX19LHtrZXk6Qix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0RlXX19LHtrZXk6JCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzW0RlXS5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDp0aGlzW1ddKGUpfX0se2tleTpILHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXNbRGVdLmdldChlKSkpe28ubmV4dD00O2JyZWFrfXJldHVybiBvLm5leHQ9NCxyO2Nhc2UgNDpuPXkodGhpc1tVZV0pLG8ucHJldj01LG4ucygpO2Nhc2UgNzppZigoYT1uLm4oKSkuZG9uZSl7by5uZXh0PTE2O2JyZWFrfWlmKChpPWEudmFsdWUpW2dlXSE9PWUpe28ubmV4dD0xMjticmVha31yZXR1cm4gby5uZXh0PTEyLGk7Y2FzZSAxMjppZighdCl7by5uZXh0PTE0O2JyZWFrfXJldHVybiBvLmRlbGVnYXRlWWllbGQoaVtIXShlLHQpLCJ0MCIsMTQpO2Nhc2UgMTQ6by5uZXh0PTc7YnJlYWs7Y2FzZSAxNjpvLm5leHQ9MjE7YnJlYWs7Y2FzZSAxODpvLnByZXY9MTgsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDIxOnJldHVybiBvLnByZXY9MjEsbi5mKCksby5maW5pc2goMjEpO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE4LDIxLDI0XV0pfSkpfSx7a2V5OkQsdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk7cmV0dXJuIHYoKS53cmFwKChmdW5jdGlvbihvKXtmb3IoOzspc3dpdGNoKG8ucHJldj1vLm5leHQpe2Nhc2UgMDppZighKHI9dGhpc1tEZV0uZ2V0KGUpKXx8dCYmcltFXSl7by5uZXh0PTQ7YnJlYWt9cmV0dXJuIG8ubmV4dD00LHI7Y2FzZSA0Om49eSh0aGlzW1VlXSksby5wcmV2PTUsbi5zKCk7Y2FzZSA3OmlmKChhPW4ubigpKS5kb25lKXtvLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGk9YS52YWx1ZSxvLmRlbGVnYXRlWWllbGQoaVtEXShlLHQpLCJ0MCIsMTApO2Nhc2UgMTA6by5uZXh0PTc7YnJlYWs7Y2FzZSAxMjpvLm5leHQ9MTc7YnJlYWs7Y2FzZSAxNDpvLnByZXY9MTQsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDE3OnJldHVybiBvLnByZXY9MTcsbi5mKCksby5maW5pc2goMTcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE0LDE3LDIwXV0pfSkpfSx7a2V5OnosdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGksbztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmE9eSh0aGlzW1VlXSksZS5wcmV2PTEsYS5zKCk7Y2FzZSAzOmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTI7YnJlYWt9aWYoKG89aS52YWx1ZSlbZ2VdIT09dHx8biYmb1tFXSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD04LG87Y2FzZSA4OmlmKCFyKXtlLm5leHQ9MTA7YnJlYWt9cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChvW3pdKHQscixuKSwidDAiLDEwKTtjYXNlIDEwOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTI6ZS5uZXh0PTE3O2JyZWFrO2Nhc2UgMTQ6ZS5wcmV2PTE0LGUudDE9ZS5jYXRjaCgxKSxhLmUoZS50MSk7Y2FzZSAxNzpyZXR1cm4gZS5wcmV2PTE3LGEuZigpLGUuZmluaXNoKDE3KTtjYXNlIDIwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNCwxNywyMF1dKX0pKX0se2tleTpvZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpc1tYZV0/MD09PXRoaXNbVWVdLmxlbmd0aHx8dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ6dGhpc1tYZV19fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXNbWGVdPzA9PT10aGlzW1VlXS5sZW5ndGg/dGhpc1tqXS50cmltKCk6dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/dGhpc1tVZV1bMF1bRWVdKCkudHJpbSgpOm51bGw6dGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6Xyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW3BlXSksdGhpc1tqXSYmKHQuJGNvbnRlbnQ9dGhpc1tqXSksdC4kbmFtZT10aGlzW2dlXSx0LmNoaWxkcmVuPVtdO3ZhciByLG49eSh0aGlzW1VlXSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO3QuY2hpbGRyZW4ucHVzaChhW19dKGUpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dC5hdHRyaWJ1dGVzPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIGksbz15KHRoaXNbRGVdKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPXUoaS52YWx1ZSwyKSxjPXNbMF0sbD1zWzFdO3QuYXR0cmlidXRlc1tjXT1sW2pdfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdH19XSkscn0ocnQpO3QuWG1sT2JqZWN0PWl0O3ZhciBvdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHcodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLG4pKVtqXT0iIixhfXJldHVybiBTKHIsW3trZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe319XSkscn0ocnQpO3QuQ29udGVudE9iamVjdD1vdDt2YXIgc3Q9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHcodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlLG4pKVtZZV09YSxpfXJldHVybiBTKHIsW3trZXk6Uix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpc1tqXT0oMCxuLmdldEtleXdvcmQpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbWWVdWzBdLHZhbGlkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlW1llXS5pbmNsdWRlcyh0KX19KX19LHtrZXk6Rix2YWx1ZTpmdW5jdGlvbihlKXtjKHAoci5wcm90b3R5cGUpLEYsdGhpcykuY2FsbCh0aGlzLGUpLGRlbGV0ZSB0aGlzW1llXX19XSkscn0ob3QpO3QuT3B0aW9uT2JqZWN0PXN0O3ZhciBjdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHcodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUyhyLFt7a2V5OlIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2pdPXRoaXNbal0udHJpbSgpfX1dKSxyfShvdCk7dC5TdHJpbmdPYmplY3Q9Y3Q7dmFyIHV0PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSl7dmFyIG87cmV0dXJuIHcodGhpcyxyKSwobz10LmNhbGwodGhpcyxlLG4pKVtIZV09YSxvW1FlXT1pLG99cmV0dXJuIFMocixbe2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tqXT0oMCxuLmdldEludGVnZXIpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbSGVdLHZhbGlkYXRlOnRoaXNbUWVdfSl9fSx7a2V5OkYsdmFsdWU6ZnVuY3Rpb24oZSl7YyhwKHIucHJvdG90eXBlKSxGLHRoaXMpLmNhbGwodGhpcyxlKSxkZWxldGUgdGhpc1tIZV0sZGVsZXRlIHRoaXNbUWVdfX1dKSxyfShvdCk7dC5JbnRlZ2VyT2JqZWN0PXV0O3ZhciBsdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7cmV0dXJuIHcodGhpcyxyKSx0LmNhbGwodGhpcyxlLG4sMCwoZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfSkpfXJldHVybiBTKHIpfSh1dCk7dC5PcHRpb24wMT1sdDt2YXIgZnQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiB3KHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLDEsKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZX0pKX1yZXR1cm4gUyhyKX0odXQpO3QuT3B0aW9uMTA9ZnR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkhUTUxSZXN1bHQ9dm9pZCAwLHQuZ2V0QkJveD1mdW5jdGlvbihlKXt2YXIgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgcj1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSwiLTEiKX0pKTtpZihyLmxlbmd0aDw0fHxyWzJdPDB8fHJbM108MClyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgbj1vKHIsNCk7cmV0dXJue3g6blswXSx5Om5bMV0sd2lkdGg6blsyXSxoZWlnaHQ6blszXX19LHQuZ2V0Q29sb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9byhhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WzAsMCwwXSwzKSxyPXRbMF0sbj10WzFdLGE9dFsyXTtpZighZSlyZXR1cm57cixnOm4sYjphfTt2YXIgaT1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KDAscGFyc2VJbnQoZS50cmltKCksMTApKSwyNTUpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpPzA6ZX0pKTtpZihpLmxlbmd0aDwzKXJldHVybntyLGc6bixiOmF9O3ZhciBzPW8oaSwzKTtyZXR1cm57cjpyPXNbMF0sZzpuPXNbMV0sYjphPXNbMl19fSx0LmdldEZsb2F0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKGEpJiZuKGEpP2E6cn0sdC5nZXRJbnRlZ2VyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlSW50KHQsMTApO3JldHVybiFpc05hTihhKSYmbihhKT9hOnJ9LHQuZ2V0S2V5d29yZD1sLHQuZ2V0TWVhc3VyZW1lbnQ9Zix0LmdldFJhdGlvPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybntudW06MSxkZW46MX07dmFyIHQ9ZS50cmltKCkuc3BsaXQoL1xzKjpccyovKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUZsb2F0KGUpfSkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKGUpfSkpO2lmKDE9PT10Lmxlbmd0aCYmdC5wdXNoKDEpLDA9PT10Lmxlbmd0aClyZXR1cm57bnVtOjEsZGVuOjF9O3ZhciByPW8odCwyKTtyZXR1cm57bnVtOnJbMF0sZGVuOnJbMV19fSx0LmdldFJlbGV2YW50PWZ1bmN0aW9uKGUpe3JldHVybiBlP2UudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntleGNsdWRlZDoiLSI9PT1lWzBdLHZpZXduYW1lOmUuc3Vic3RyaW5nKDEpfX0pKTpbXX0sdC5nZXRTdHJpbmdPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0WzBdLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmluY2x1ZGVzKGUpfX0pfSx0LnN0cmlwUXVvdGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJyk/ZS5zbGljZSgxLGUubGVuZ3RoLTEpOmV9O3ZhciBhPXIoMik7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgYz17cHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNtOmZ1bmN0aW9uKGUpe3JldHVybiBlLzIuNTQqNzJ9LG1tOmZ1bmN0aW9uKGUpe3JldHVybiBlLzI1LjQqNzJ9LGluOmZ1bmN0aW9uKGUpe3JldHVybiA3MiplfSxweDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LHU9LyhbKy1dP1xkK1wuP1xkKikoLiopLztmdW5jdGlvbiBsKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtyZXR1cm4gdCYmbih0PXQudHJpbSgpKT90OnJ9ZnVuY3Rpb24gZihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IjAiO2lmKHQ9dHx8IjAiLCFlKXJldHVybiBmKHQpO3ZhciByPWUudHJpbSgpLm1hdGNoKHUpO2lmKCFyKXJldHVybiBmKHQpO3ZhciBuPW8ociwzKSxhPW5bMV0saT1uWzJdLHM9cGFyc2VGbG9hdChhKTtpZihpc05hTihzKSlyZXR1cm4gZih0KTtpZigwPT09cylyZXR1cm4gMDt2YXIgbD1jW2ldO3JldHVybiBsP2wocyk6c312YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zdWNjZXNzPXQsdGhpcy5odG1sPXIsdGhpcy5iYm94PW4sdGhpcy5icmVha05vZGU9YX12YXIgdCxyLG47cmV0dXJuIHQ9ZSxuPVt7a2V5OiJGQUlMVVJFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRkFJTFVSRSIsbmV3IGUoITEsbnVsbCxudWxsLG51bGwpKX19LHtrZXk6IkVNUFRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRU1QVFkiLG5ldyBlKCEwLG51bGwsbnVsbCxudWxsKSl9fSx7a2V5OiJicmVha05vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSghMSxudWxsLG51bGwsdCl9fSx7a2V5OiJzdWNjZXNzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUoITAsdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxudWxsKX19XSwocj1be2tleToiaXNCcmVhayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYnJlYWtOb2RlfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxuJiZpKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkhUTUxSZXN1bHQ9aH0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VJZHM9dC4kYnVpbGRYRkFPYmplY3Q9dm9pZCAwO3ZhciByPVN5bWJvbCgpO3QuJGJ1aWxkWEZBT2JqZWN0PXIsdC5OYW1lc3BhY2VJZHM9e2NvbmZpZzp7aWQ6MCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hjaS8iKX19LGNvbm5lY3Rpb25TZXQ6e2lkOjEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9fSxkYXRhc2V0czp7aWQ6MixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLyIpfX0sZm9ybTp7aWQ6MyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1mb3JtLyIpfX0sbG9jYWxlU2V0OntpZDo0LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9fSxwZGY6e2lkOjUsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi8iPT09ZX19LHNpZ25hdHVyZTp7aWQ6NixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI9PT1lfX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXNvdXJjZS1zZXQvIil9fSxzdHlsZXNoZWV0OntpZDo4LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPT09ZX19LHRlbXBsYXRlOntpZDo5LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXRlbXBsYXRlLyIpfX0seGRjOntpZDoxMCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX19LHhkcDp7aWQ6MTEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyI9PT1lfX0seGZkZjp7aWQ6MTIsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGZkZi8iPT09ZX19LHhodG1sOntpZDoxMyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfX0seG1wbWV0YTp7aWQ6MTQsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS8iPT09ZX19fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZURhdGFOb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT15KHIpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3BlcmF0b3I9PT1kLmRvdERvdH0pKSlyZXR1cm4gbnVsbDt2YXIgbz1wLmdldChhWzBdLm5hbWUpLHM9MDtvPyhlPW8oZSx0KSxzPTEpOmU9dHx8ZTtmb3IodmFyIGM9YS5sZW5ndGg7czxjO3MrKyl7dmFyIHU9YVtzXSxsPXUubmFtZSxmPXUub3BlcmF0b3IsaD11LmluZGV4O2lmKCFpc0Zpbml0ZShoKSlyZXR1cm4gYVtzXS5pbmRleD0wLG0oZSxhLnNsaWNlKHMpKTt2YXIgZz12b2lkIDA7c3dpdGNoKGYpe2Nhc2UgZC5kb3Q6Zz1lW24uJGdldENoaWxkcmVuQnlOYW1lXShsLCExKTticmVhaztjYXNlIGQuZG90RG90Omc9ZVtuLiRnZXRDaGlsZHJlbkJ5TmFtZV0obCwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6Zz0oZz1lW24uJGdldENoaWxkcmVuQnlDbGFzc10obCkpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P2cuY2hpbGRyZW46W2ddfWlmKDA9PT1nLmxlbmd0aClyZXR1cm4gbShlLGEuc2xpY2UocykpO2lmKCEoaDxnLmxlbmd0aCkpcmV0dXJuIGFbc10uaW5kZXg9aC1nLmxlbmd0aCxtKGUsYS5zbGljZShzKSk7dmFyIHY9Z1toXTtpZighKHYgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gQ2Fubm90IGNyZWF0ZSBhIG5vZGUuIiksbnVsbDtlPXZ9cmV0dXJuIG51bGx9LHQuc2VhcmNoTm9kZT1mdW5jdGlvbihlLHQscil7dmFyIGE9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxpPXkociwhKGFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYyx1PXAuZ2V0KGlbMF0ubmFtZSksbD0wO3U/KGM9ITAsZT1bdShlLHQpXSxsPTEpOihjPW51bGw9PT10LGU9W3R8fGVdKTtmb3IodmFyIGY9ZnVuY3Rpb24ocil7dmFyIHMsdT1pW2xdLGY9dS5uYW1lLGg9dS5jYWNoZU5hbWUscD11Lm9wZXJhdG9yLHY9dS5pbmRleCx5PVtdLG09byhlKTt0cnl7Zm9yKG0ucygpOyEocz1tLm4oKSkuZG9uZTspe3ZhciBiPXMudmFsdWU7aWYoYiBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXt2YXIgdz12b2lkIDAsaz12b2lkIDA7aWYoYSYmKChrPWcuZ2V0KGIpKXx8KGs9bmV3IE1hcCxnLnNldChiLGspKSx3PWsuZ2V0KGgpKSwhdyl7c3dpdGNoKHApe2Nhc2UgZC5kb3Q6dz1iW24uJGdldENoaWxkcmVuQnlOYW1lXShmLCExKTticmVhaztjYXNlIGQuZG90RG90Onc9YltuLiRnZXRDaGlsZHJlbkJ5TmFtZV0oZiwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6dz0odz1iW24uJGdldENoaWxkcmVuQnlDbGFzc10oZikpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P3cuY2hpbGRyZW46W3ddfWEmJmsuc2V0KGgsdyl9dy5sZW5ndGg+MCYmeS5wdXNoKHcpfX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9aWYoMD09PXkubGVuZ3RoJiYhYyYmMD09PWwpe3ZhciBTPXRbbi4kZ2V0UGFyZW50XSgpO3JldHVybih0PVMpPyhsPS0xLGU9W3RdLCJjb250aW51ZSIpOnt2Om51bGx9fWU9aXNGaW5pdGUodik/eS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2PGUubGVuZ3RofSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdl19KSk6eS5mbGF0KCl9LGg9aS5sZW5ndGg7bDxoO2wrKyl7dmFyIHY9ZigpO2lmKCJjb250aW51ZSIhPT12JiYib2JqZWN0Ij09PXModikpcmV0dXJuIHYudn1yZXR1cm4gMD09PWUubGVuZ3RoP251bGw6ZX07dmFyIG49cigyMDYpLGE9cigyMDgpLGk9cigyKTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gdShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2woZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGwoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgZj0vXlteLltdKy8saD0vXlteXF1dKy8sZD17ZG90OjAsZG90RG90OjEsZG90SGFzaDoyLGRvdEJyYWNrZXQ6Myxkb3RQYXJlbjo0fSxwPW5ldyBNYXAoW1siJGRhdGEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmV9XSxbIiRyZWNvcmQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW24uJGdldENoaWxkcmVuXSgpWzBdfV0sWyIkdGVtcGxhdGUiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGVtcGxhdGV9XSxbIiRjb25uZWN0aW9uU2V0IixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbm5lY3Rpb25TZXR9XSxbIiRmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmZvcm19XSxbIiRsYXlvdXQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGF5b3V0fV0sWyIkaG9zdCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ob3N0fV0sWyIkZGF0YVdpbmRvdyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kYXRhV2luZG93fV0sWyIkZXZlbnQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZXZlbnR9XSxbIiEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHN9XSxbIiR4ZmEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9XSxbInhmYSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX1dLFsiJCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH1dXSksZz1uZXcgV2Vha01hcCx2PWEuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2Z1bmN0aW9uIHkoZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLG49ZS5tYXRjaChmKTtpZighbilyZXR1cm4gbnVsbDtmb3IodmFyIGEsbz1jKG4sMSlbMF0scz1be25hbWU6byxjYWNoZU5hbWU6Ii4iK28saW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGwsb3BlcmF0b3I6ZC5kb3R9XSx1PW8ubGVuZ3RoO3U8ZS5sZW5ndGg7KXt2YXIgbD11O2lmKCJbIiE9PWUuY2hhckF0KHUrKykpe3ZhciBwPXZvaWQgMDtzd2l0Y2goZS5jaGFyQXQodSkpe2Nhc2UiLiI6aWYoIXQpcmV0dXJuIG51bGw7dSsrLHA9ZC5kb3REb3Q7YnJlYWs7Y2FzZSIjIjp1KysscD1kLmRvdEhhc2g7YnJlYWs7Y2FzZSJbIjppZihyKXJldHVybigwLGkud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuIiksbnVsbDtwPWQuZG90QnJhY2tldDticmVhaztjYXNlIigiOmlmKHIpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBKYXZhU2NyaXB0IHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpLG51bGw7cD1kLmRvdFBhcmVuO2JyZWFrO2RlZmF1bHQ6cD1kLmRvdH1pZighKG49ZS5zbGljZSh1KS5tYXRjaChmKSkpYnJlYWs7dSs9KG89YyhuLDEpWzBdKS5sZW5ndGgscy5wdXNoKHtuYW1lOm8sY2FjaGVOYW1lOmUuc2xpY2UobCx1KSxvcGVyYXRvcjpwLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsfSl9ZWxzZXtpZighKG49ZS5zbGljZSh1KS5tYXRjaChoKSkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpLG51bGw7cy5hdCgtMSkuaW5kZXg9IioiPT09KGE9KGE9blswXSkudHJpbSgpKT8xLzA6cGFyc2VJbnQoYSwxMCl8fDAsdSs9blswXS5sZW5ndGgrMX19cmV0dXJuIHN9ZnVuY3Rpb24gbShlLHQpe3ZhciByLGE9bnVsbCxpPW8odCk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXtmb3IodmFyIHM9ci52YWx1ZSxjPXMubmFtZSx1PXMuaW5kZXgsbD0wLGY9aXNGaW5pdGUodSk/dTowO2w8PWY7bCsrKXt2YXIgaD1lW24uJG5hbWVzcGFjZUlkXT09PXY/LTE6ZVtuLiRuYW1lc3BhY2VJZF07YT1uZXcgbi5YbWxPYmplY3QoaCxjKSxlW24uJGFwcGVuZENoaWxkXShhKX1lPWF9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpbmRlcj12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTEpLGk9cigyMDkpLG89cigyMDgpLHM9cigyKTtmdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZihlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZihlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gaChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2goZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHA9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gZyhlKXt2YXIgdD1uZXcgYS5UZXh0KHt9KTtyZXR1cm4gdFtuLiRjb250ZW50XT1lLHR9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucm9vdD10LHRoaXMuZGF0YXNldHM9dC5kYXRhc2V0cyx0LmRhdGFzZXRzJiZ0LmRhdGFzZXRzLmRhdGE/dGhpcy5kYXRhPXQuZGF0YXNldHMuZGF0YTp0aGlzLmRhdGE9bmV3IG4uWG1sT2JqZWN0KG8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkLCJkYXRhIiksdGhpcy5lbXB0eU1lcmdlPTA9PT10aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCkubGVuZ3RoLHRoaXMucm9vdC5mb3JtPXRoaXMuZm9ybT10LnRlbXBsYXRlW24uJGNsb25lXSgpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX2lzQ29uc3VtZURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHlNZXJnZSYmdGhpcy5fbWVyZ2VNb2RlfX0se2tleToiX2lzTWF0Y2hUZW1wbGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faXNDb25zdW1lRGF0YSgpfX0se2tleToiYmluZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmluZEVsZW1lbnQodGhpcy5mb3JtLHRoaXMuZGF0YSksdGhpcy5mb3JtfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0se2tleToiX2JpbmRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKGVbbi4kZGF0YV09dCxlW24uJGhhc1NldHRhYmxlVmFsdWVdKCkpaWYodFtuLiRpc0RhdGFWYWx1ZV0oKSl7dmFyIGk9dFtuLiRnZXREYXRhVmFsdWVdKCk7ZVtuLiRzZXRWYWx1ZV0oZyhpKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgYS5GaWVsZCYmZS51aSYmZS51aS5jaG9pY2VMaXN0JiYibXVsdGlTZWxlY3QiPT09ZS51aS5jaG9pY2VMaXN0Lm9wZW4pe3ZhciBvPXRbbi4kZ2V0Q2hpbGRyZW5dKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRjb250ZW50XS50cmltKCl9KSkuam9pbigiXG4iKTtlW24uJHNldFZhbHVlXShnKG8pKX1lbHNlIHRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKDAscy53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpO2Vsc2UhdFtuLiRpc0RhdGFWYWx1ZV0oKXx8dGhpcy5faXNNYXRjaFRlbXBsYXRlKCk/dGhpcy5fYmluZEVsZW1lbnQoZSx0KTooMCxzLndhcm4pKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIil9fSx7a2V5OiJfZmluZERhdGFCeU5hbWVUb0NvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybiBudWxsO2Zvcih2YXIgaSxzLGM9MDtjPDM7YysrKXtmb3IoaT1yW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCExLCEwKTtzPWkubmV4dCgpLnZhbHVlOylpZih0PT09c1tuLiRpc0RhdGFWYWx1ZV0oKSlyZXR1cm4gcztpZihyW24uJG5hbWVzcGFjZUlkXT09PW8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkJiYiZGF0YSI9PT1yW24uJG5vZGVOYW1lXSlicmVhaztyPXJbbi4kZ2V0UGFyZW50XSgpfXJldHVybiBhJiYoKHM9KGk9dGhpcy5kYXRhW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCEwLCExKSkubmV4dCgpLnZhbHVlKXx8KHM9KGk9dGhpcy5kYXRhW24uJGdldEF0dHJpYnV0ZUl0XShlLCEwKSkubmV4dCgpLnZhbHVlKSYmc1tuLiRpc0RhdGFWYWx1ZV0oKSk/czpudWxsfX0se2tleToiX3NldFByb3BlcnRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoZS5oYXNPd25Qcm9wZXJ0eSgic2V0UHJvcGVydHkiKSl7dmFyIHIsbz1sKGUuc2V0UHJvcGVydHkuY2hpbGRyZW4pO3RyeXtmb3Ioby5zKCk7IShyPW8ubigpKS5kb25lOyl7dmFyIGM9ci52YWx1ZSxmPWMucmVmLGg9Yy50YXJnZXQ7aWYoIWMuY29ubmVjdGlvbiYmZil7dmFyIGQ9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxmLCExLCExKTtpZihkKXt2YXIgcD11KGQsMSlbMF07aWYocFtuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YSkpe3ZhciBnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LGUsaCwhMSwhMSk7aWYoZyl7dmFyIHY9dShnLDEpWzBdO2lmKHZbbi4kaXNEZXNjZW5kZW50XShlKSl7dmFyIHk9dltuLiRnZXRQYXJlbnRdKCk7aWYodiBpbnN0YW5jZW9mIGEuU2V0UHJvcGVydHl8fHkgaW5zdGFuY2VvZiBhLlNldFByb3BlcnR5KSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBzZXRQcm9wZXJ0eSBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuIik7ZWxzZSBpZih2IGluc3RhbmNlb2YgYS5CaW5kSXRlbXN8fHkgaW5zdGFuY2VvZiBhLkJpbmRJdGVtcykoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtlbHNle3ZhciBtPXBbbi4kdGV4dF0oKSxiPXZbbi4kbm9kZU5hbWVdO2lmKHYgaW5zdGFuY2VvZiBuLlhGQUF0dHJpYnV0ZSl7dmFyIHc9T2JqZWN0LmNyZWF0ZShudWxsKTt3W2JdPW07dmFyIGs9UmVmbGVjdC5jb25zdHJ1Y3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKHkpLmNvbnN0cnVjdG9yLFt3XSk7eVtiXT1rW2JdfWVsc2Ugdi5oYXNPd25Qcm9wZXJ0eShuLiRjb250ZW50KT8odltuLiRkYXRhXT1wLHZbbi4kY29udGVudF09bSx2W24uJGZpbmFsaXplXSgpKTooMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIG5vZGUgdG8gdXNlIGluIHNldFByb3BlcnR5Iil9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogIi5jb25jYXQoaCwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlOiBtdXN0IGJlIGEgZGF0YSBub2RlLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoZiwiLiIpKX19fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfX19fSx7a2V5OiJfYmluZEl0ZW1zIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUuaGFzT3duUHJvcGVydHkoIml0ZW1zIikmJmUuaGFzT3duUHJvcGVydHkoImJpbmRJdGVtcyIpJiYhZS5iaW5kSXRlbXMuaXNFbXB0eSgpKXt2YXIgcixvPWwoZS5pdGVtcy5jaGlsZHJlbik7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlO2Vbbi4kcmVtb3ZlQ2hpbGRdKGMpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1lLml0ZW1zLmNsZWFyKCk7dmFyIGY9bmV3IGEuSXRlbXMoe30pLGg9bmV3IGEuSXRlbXMoe30pO2Vbbi4kYXBwZW5kQ2hpbGRdKGYpLGUuaXRlbXMucHVzaChmKSxlW24uJGFwcGVuZENoaWxkXShoKSxlLml0ZW1zLnB1c2goaCk7dmFyIGQscD1sKGUuYmluZEl0ZW1zLmNoaWxkcmVuKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LnJlZixtPXYubGFiZWxSZWYsYj12LnZhbHVlUmVmO2lmKCF2LmNvbm5lY3Rpb24mJnkpe3ZhciB3PSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQseSwhMSwhMSk7aWYodyl7dmFyIGssUz1sKHcpO3RyeXtmb3IoUy5zKCk7IShrPVMubigpKS5kb25lOyl7dmFyIHg9ay52YWx1ZTtpZih4W24uJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpe3ZhciBPPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHgsbSwhMCwhMSk7aWYoTyl7dmFyIEE9dShPLDEpWzBdO2lmKEFbbi4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7dmFyIEM9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QseCxiLCEwLCExKTtpZihDKXt2YXIgRj11KEMsMSlbMF07aWYoRltuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXt2YXIgUD1nKEFbbi4kdGV4dF0oKSksVD1nKEZbbi4kdGV4dF0oKSk7ZltuLiRhcHBlbmRDaGlsZF0oUCksZi50ZXh0LnB1c2goUCksaFtuLiRhcHBlbmRDaGlsZF0oVCksaC50ZXh0LnB1c2goVCl9ZWxzZSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCB2YWx1ZTogIi5jb25jYXQoYiwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBsYWJlbDogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIGxhYmVsOiAiLmNvbmNhdChtLCIuIikpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZiAoIi5jb25jYXQoeSwiKTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpKX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoeSwiLiIpKX19fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfX19fSx7a2V5OiJfYmluZE9jY3VycmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE7aWYodC5sZW5ndGg+MSYmKChhPWVbbi4kY2xvbmVdKCkpW24uJHJlbW92ZUNoaWxkXShhLm9jY3VyKSxhLm9jY3VyPW51bGwpLHRoaXMuX2JpbmRWYWx1ZShlLHRbMF0sciksdGhpcy5fc2V0UHJvcGVydGllcyhlLHRbMF0pLHRoaXMuX2JpbmRJdGVtcyhlLHRbMF0pLDEhPT10Lmxlbmd0aClmb3IodmFyIGk9ZVtuLiRnZXRQYXJlbnRdKCksbz1lW24uJG5vZGVOYW1lXSxzPWlbbi4kaW5kZXhPZl0oZSksYz0xLHU9dC5sZW5ndGg7Yzx1O2MrKyl7dmFyIGw9dFtjXSxmPWFbbi4kY2xvbmVdKCk7aVtvXS5wdXNoKGYpLGlbbi4kaW5zZXJ0QXRdKHMrYyxmKSx0aGlzLl9iaW5kVmFsdWUoZixsLHIpLHRoaXMuX3NldFByb3BlcnRpZXMoZixsKSx0aGlzLl9iaW5kSXRlbXMoZixsKX19fSx7a2V5OiJfY3JlYXRlT2NjdXJyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZW1wdHlNZXJnZSl7dmFyIHQ9ZS5vY2N1cjtpZih0JiYhKHQuaW5pdGlhbDw9MSkpe3ZhciByPWVbbi4kZ2V0UGFyZW50XSgpLGE9ZVtuLiRub2RlTmFtZV07aWYoclthXWluc3RhbmNlb2Ygbi5YRkFPYmplY3RBcnJheSl7dmFyIGk7aT1lLm5hbWU/clthXS5jaGlsZHJlbi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWU9PT1lLm5hbWV9KSkubGVuZ3RoOnJbYV0uY2hpbGRyZW4ubGVuZ3RoO3ZhciBvPXJbbi4kaW5kZXhPZl0oZSkrMSxzPXQuaW5pdGlhbC1pO2lmKHMpe3ZhciBjPWVbbi4kY2xvbmVdKCk7Y1tuLiRyZW1vdmVDaGlsZF0oYy5vY2N1ciksYy5vY2N1cj1udWxsLHJbYV0ucHVzaChjKSxyW24uJGluc2VydEF0XShvLGMpO2Zvcih2YXIgdT0xO3U8czt1Kyspe3ZhciBsPWNbbi4kY2xvbmVdKCk7clthXS5wdXNoKGwpLHJbbi4kaW5zZXJ0QXRdKG8rdSxsKX19fX19fX0se2tleToiX2dldE9jY3VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLHI9ZS5vY2N1cjtpZighcnx8IXQpcmV0dXJuWzEsMV07dmFyIG49LTE9PT1yLm1heD8xLzA6ci5tYXg7cmV0dXJuW3IubWluLG5dfX0se2tleToiX3NldEFuZEJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc2V0UHJvcGVydGllcyhlLHQpLHRoaXMuX2JpbmRJdGVtcyhlLHQpLHRoaXMuX2JpbmRFbGVtZW50KGUsdCl9fSx7a2V5OiJfYmluZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7dmFyIGEsbz1sKGVbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioby5zKCk7IShhPW8ubigpKS5kb25lOyl7dmFyIGM9YS52YWx1ZTtpZighY1tuLiRkYXRhXSlpZih2b2lkIDAhPT10aGlzLl9tZXJnZU1vZGV8fCJzdWJmb3JtIiE9PWNbbi4kbm9kZU5hbWVdKXtpZihjW24uJGlzQmluZGFibGVdKCkpe3ZhciBmPSExLGg9bnVsbCxkPW51bGwsZz1udWxsO2lmKGMuYmluZCl7c3dpdGNoKGMuYmluZC5tYXRjaCl7Y2FzZSJub25lIjp0aGlzLl9zZXRBbmRCaW5kKGMsdCk7Y29udGludWU7Y2FzZSJnbG9iYWwiOmY9ITA7YnJlYWs7Y2FzZSJkYXRhUmVmIjppZighYy5iaW5kLnJlZil7KDAscy53YXJuKSgiWEZBIC0gcmVmIGlzIGVtcHR5IGluIG5vZGUgIi5jb25jYXQoY1tuLiRub2RlTmFtZV0sIi4iKSksdGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWQ9Yy5iaW5kLnJlZn1jLmJpbmQucGljdHVyZSYmKGg9Yy5iaW5kLnBpY3R1cmVbbi4kY29udGVudF0pfXZhciB2PXUodGhpcy5fZ2V0T2NjdXJJbmZvKGMpLDIpLHk9dlswXSxtPXZbMV07aWYoZCl7aWYobnVsbD09PShnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsZCwhMCwhMSkpKXtpZighKGc9KDAsaS5jcmVhdGVEYXRhTm9kZSkodGhpcy5kYXRhLHQsZCkpKWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKGdbbi4kY29uc3VtZWRdPSEwKSx0aGlzLl9zZXRBbmRCaW5kKGMsZyk7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYoZz1nLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWVbbi4kY29uc3VtZWRdfSkpKSxnLmxlbmd0aD5tP2c9Zy5zbGljZSgwLG0pOjA9PT1nLmxlbmd0aCYmKGc9bnVsbCksZyYmdGhpcy5faXNDb25zdW1lRGF0YSgpJiZnLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Vbbi4kY29uc3VtZWRdPSEwfSkpfWVsc2V7aWYoIWMubmFtZSl7dGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWlmKHRoaXMuX2lzQ29uc3VtZURhdGEoKSl7Zm9yKHZhciBiPVtdO2IubGVuZ3RoPG07KXt2YXIgdz10aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShjLm5hbWUsY1tuLiRoYXNTZXR0YWJsZVZhbHVlXSgpLHQsZik7aWYoIXcpYnJlYWs7d1tuLiRjb25zdW1lZF09ITAsYi5wdXNoKHcpfWc9Yi5sZW5ndGg+MD9iOm51bGx9ZWxzZXtpZighKGc9dFtuLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oYy5uYW1lLCExLHRoaXMuZW1wdHlNZXJnZSkubmV4dCgpLnZhbHVlKSl7aWYoMD09PXkpe3IucHVzaChjKTtjb250aW51ZX12YXIgaz10W24uJG5hbWVzcGFjZUlkXT09PXA/LTE6dFtuLiRuYW1lc3BhY2VJZF07Zz1jW24uJGRhdGFdPW5ldyBuLlhtbE9iamVjdChrLGMubmFtZSksdGhpcy5lbXB0eU1lcmdlJiYoZ1tuLiRjb25zdW1lZF09ITApLHRbbi4kYXBwZW5kQ2hpbGRdKGcpLHRoaXMuX3NldEFuZEJpbmQoYyxnKTtjb250aW51ZX10aGlzLmVtcHR5TWVyZ2UmJihnW24uJGNvbnN1bWVkXT0hMCksZz1bZ119fWc/dGhpcy5fYmluZE9jY3VycmVuY2VzKGMsZyxoKTp5PjA/dGhpcy5fc2V0QW5kQmluZChjLHQpOnIucHVzaChjKX19ZWxzZXt0aGlzLl9tZXJnZU1vZGU9ImNvbnN1bWVEYXRhIj09PWMubWVyZ2VNb2RlO3ZhciBTPXRbbi4kZ2V0Q2hpbGRyZW5dKCk7aWYoUy5sZW5ndGg+MCl0aGlzLl9iaW5kT2NjdXJyZW5jZXMoYyxbU1swXV0sbnVsbCk7ZWxzZSBpZih0aGlzLmVtcHR5TWVyZ2Upe3ZhciB4PXRbbi4kbmFtZXNwYWNlSWRdPT09cD8tMTp0W24uJG5hbWVzcGFjZUlkXSxPPWNbbi4kZGF0YV09bmV3IG4uWG1sT2JqZWN0KHgsYy5uYW1lfHwicm9vdCIpO3Rbbi4kYXBwZW5kQ2hpbGRdKE8pLHRoaXMuX2JpbmRFbGVtZW50KGMsTyl9fX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9ci5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRnZXRQYXJlbnRdKClbbi4kcmVtb3ZlQ2hpbGRdKGUpfSkpfX1dKSYmZCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQmluZGVyPXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5WYWx1ZT10LlRleHQ9dC5UZW1wbGF0ZU5hbWVzcGFjZT10LlRlbXBsYXRlPXQuU2V0UHJvcGVydHk9dC5JdGVtcz10LkZpZWxkPXQuQmluZEl0ZW1zPXZvaWQgMDt2YXIgbj1yKDIwNiksYT1yKDIwOCksaT1yKDIxMiksbz1yKDIxMykscz1yKDIwNyksYz1yKDIpLHU9cigyMTQpLGw9cigxMzUpLGY9cigyMDkpO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGgoZSl9ZnVuY3Rpb24gZCgpe3JldHVybiBkPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ayhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8QShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1oKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWgoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmIoZSx0KX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxiKGUsdCl9ZnVuY3Rpb24gdyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1rKGUpO2lmKHQpe3ZhciBhPWsodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gayhlKXtyZXR1cm4gaz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sayhlKX1mdW5jdGlvbiBTKCl7Uz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBmPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fXZhciB2PXt9O2ModixpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShQKFtdKSkpO20mJm0hPT10JiZyLmNhbGwobSxpKSYmKHY9bSk7dmFyIGI9Zy5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiB3KGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBrKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxmPXUudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1oKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1mKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1mKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxmO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxmO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGYpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZil9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBwLnByb3RvdHlwZT1nLG4oYiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLHAuZGlzcGxheU5hbWU9YyhnLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1wfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSxnKTooZS5fX3Byb3RvX189ZyxjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx3KGsucHJvdG90eXBlKSxjKGsucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPWssZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBrKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sdyhiKSxjKGIscywiR2VuZXJhdG9yIiksYyhiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyhiLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxmKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGZ9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxmfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxmfX0sZX12YXIgeD1TKCkubWFyayhMKTtmdW5jdGlvbiBPKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1BKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBBKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBDKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gQyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBGPWEuTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkLFA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixUPS9eSChcZCspJC8sST1uZXcgU2V0KFsiaW1hZ2UvZ2lmIiwiaW1hZ2UvanBlZyIsImltYWdlL2pwZyIsImltYWdlL3BqcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvYXBuZyIsImltYWdlL3gtcG5nIiwiaW1hZ2UvYm1wIiwiaW1hZ2UveC1tcy1ibXAiLCJpbWFnZS90aWZmIiwiaW1hZ2UvdGlmIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pLEU9W1tbNjYsNzddLCJpbWFnZS9ibXAiXSxbWzI1NSwyMTYsMjU1XSwiaW1hZ2UvanBlZyJdLFtbNzMsNzMsNDIsMF0sImltYWdlL3RpZmYiXSxbWzc3LDc3LDAsNDJdLCJpbWFnZS90aWZmIl0sW1s3MSw3Myw3MCw1Niw1Nyw5N10sImltYWdlL2dpZiJdLFtbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSwiaW1hZ2UvcG5nIl1dO2Z1bmN0aW9uIGooZSl7aWYoIWV8fCFlLmJvcmRlcilyZXR1cm57dzowLGg6MH07dmFyIHQ9ZS5ib3JkZXJbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/e3c6dC53aWR0aHNbMF0rdC53aWR0aHNbMl0rdC5pbnNldHNbMF0rdC5pbnNldHNbMl0saDp0LndpZHRoc1sxXSt0LndpZHRoc1szXSt0Lmluc2V0c1sxXSt0Lmluc2V0c1szXX06e3c6MCxoOjB9fWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGUubWFyZ2luJiYoZS5tYXJnaW4udG9wSW5zZXR8fGUubWFyZ2luLnJpZ2h0SW5zZXR8fGUubWFyZ2luLmJvdHRvbUluc2V0fHxlLm1hcmdpbi5sZWZ0SW5zZXQpfWZ1bmN0aW9uIF8oZSx0KXtpZighZS52YWx1ZSl7dmFyIHI9bmV3IFZ0KHt9KTtlW24uJGFwcGVuZENoaWxkXShyKSxlLnZhbHVlPXJ9ZS52YWx1ZVtuLiRzZXRWYWx1ZV0odCl9ZnVuY3Rpb24gTChlKXt2YXIgdCxyLGE7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihpKXtmb3IoOzspc3dpdGNoKGkucHJldj1pLm5leHQpe2Nhc2UgMDp0PU8oZVtuLiRnZXRDaGlsZHJlbl0oKSksaS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtpLm5leHQ9MTI7YnJlYWt9aWYoISgoYT1yLnZhbHVlKWluc3RhbmNlb2YgX3QpKXtpLm5leHQ9ODticmVha31yZXR1cm4gaS5kZWxlZ2F0ZVlpZWxkKGFbbi4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCksInQwIiw3KTtjYXNlIDc6cmV0dXJuIGkuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgODpyZXR1cm4gaS5uZXh0PTEwLGE7Y2FzZSAxMDppLm5leHQ9MzticmVhaztjYXNlIDEyOmkubmV4dD0xNzticmVhaztjYXNlIDE0OmkucHJldj0xNCxpLnQxPWkuY2F0Y2goMSksdC5lKGkudDEpO2Nhc2UgMTc6cmV0dXJuIGkucHJldj0xNyx0LmYoKSxpLmZpbmlzaCgxNyk7Y2FzZSAyMDpjYXNlImVuZCI6cmV0dXJuIGkuc3RvcCgpfX0pLHgsbnVsbCxbWzEsMTQsMTcsMjBdXSl9ZnVuY3Rpb24gUihlKXtyZXR1cm4gZS52YWxpZGF0ZSYmImVycm9yIj09PWUudmFsaWRhdGUubnVsbFRlc3R9ZnVuY3Rpb24gTihlKXtmb3IoO2U7KXtpZighZS50cmF2ZXJzYWwpcmV0dXJuIHZvaWQoZVtuLiR0YWJJbmRleF09ZVtuLiRnZXRQYXJlbnRdKClbbi4kdGFiSW5kZXhdKTtpZihlW24uJHRhYkluZGV4XSlyZXR1cm47dmFyIHQscj1udWxsLGE9TyhlLnRyYXZlcnNhbFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2lmKCJuZXh0Ij09PWkub3BlcmF0aW9uKXtyPWk7YnJlYWt9fX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1pZighcnx8IXIucmVmKXJldHVybiB2b2lkKGVbbi4kdGFiSW5kZXhdPWVbbi4kZ2V0UGFyZW50XSgpW24uJHRhYkluZGV4XSk7dmFyIG89ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCk7ZVtuLiR0YWJJbmRleF09KytvW24uJHRhYkluZGV4XTt2YXIgcz1vW24uJHNlYXJjaE5vZGVdKHIucmVmLGUpO2lmKCFzKXJldHVybjtlPXNbMF19fWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmFzc2lzdDtpZihyKXt2YXIgYT1yW24uJHRvSFRNTF0oKTthJiYodC50aXRsZT1hKTt2YXIgaT1yLnJvbGUubWF0Y2goVCk7aWYoaSl7dmFyIG89aVsxXTt0LnJvbGU9ImhlYWRpbmciLHRbImFyaWEtbGV2ZWwiXT1vfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle3ZhciBzPWVbbi4kZ2V0UGFyZW50XSgpOyJyb3ciPT09cy5sYXlvdXQmJihzLmFzc2lzdCYmIlRIIj09PXMuYXNzaXN0LnJvbGU/dC5yb2xlPSJjb2x1bW5oZWFkZXIiOnQucm9sZT0iY2VsbCIpfX1mdW5jdGlvbiBCKGUpe2lmKCFlLmFzc2lzdClyZXR1cm4gbnVsbDt2YXIgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrW24uJGNvbnRlbnRdP3Quc3BlYWtbbi4kY29udGVudF06dC50b29sVGlwP3QudG9vbFRpcFtuLiRjb250ZW50XTpudWxsfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOlt7bmFtZToic3BhbiIsYXR0cmlidXRlczp7c3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sdmFsdWU6ZX1dfSl9ZnVuY3Rpb24gJChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTtudWxsPT09dFtuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGUmJih0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT1lLHRbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCl9ZnVuY3Rpb24gWChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTt0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT09PWUmJih0W24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEpfWZ1bmN0aW9uIEgoZSl7aWYoZVtuLiRleHRyYV0pcmV0dXJuITE7aWYoZVtuLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSwiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7dmFyIHQ9ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCkscj1udWxsO2lmKGUudGFyZ2V0KXtpZighKHI9dFtuLiRzZWFyY2hOb2RlXShlLnRhcmdldCxlW24uJGdldFBhcmVudF0oKSkpKXJldHVybiExO3I9clswXX12YXIgYT10W24uJGV4dHJhXSxpPWEuY3VycmVudFBhZ2VBcmVhLG89YS5jdXJyZW50Q29udGVudEFyZWE7aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSlyZXR1cm4gciBpbnN0YW5jZW9mIGR0fHwocj1udWxsKSxlLnN0YXJ0TmV3PyhlW24uJGV4dHJhXS50YXJnZXQ9cnx8aSwhMCk6ISghcnx8cj09PWl8fChlW24uJGV4dHJhXS50YXJnZXQ9ciwwKSk7ciBpbnN0YW5jZW9mIHBlfHwocj1udWxsKTt2YXIgcyxjPXImJnJbbi4kZ2V0UGFyZW50XSgpLHU9YztpZihlLnN0YXJ0TmV3KWlmKHIpe3ZhciBsPWMuY29udGVudEFyZWEuY2hpbGRyZW4sZj1sLmluZGV4T2YobyksaD1sLmluZGV4T2Yocik7LTEhPT1mJiZmPGgmJih1PW51bGwpLHM9aC0xfWVsc2Ugcz1pLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yobyk7ZWxzZXtpZighcnx8cj09PW8pcmV0dXJuITE7cz1jLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YociktMSx1PWM9PT1pP251bGw6Y31yZXR1cm4gZVtuLiRleHRyYV0udGFyZ2V0PXUsZVtuLiRleHRyYV0uaW5kZXg9cywhMH1mdW5jdGlvbiBxKGUsdCxyKXt2YXIgYT1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxpPWFbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSxvPXRbbi4kZ2V0U3ViZm9ybVBhcmVudF07dFtuLiRnZXRTdWJmb3JtUGFyZW50XT1mdW5jdGlvbigpe3JldHVybiBlfSxhW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7dmFyIHM9dFtuLiR0b0hUTUxdKHIpO2Vbbi4kYWRkSFRNTF0ocy5odG1sLHMuYmJveCksYVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWksdFtuLiRnZXRTdWJmb3JtUGFyZW50XT1vfXZhciBHPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJhcHBlYXJhbmNlRmlsdGVyIikpLmlkPWUuaWR8fCIiLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImFyYyIsITApKS5jaXJjdWxhcj0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuY2lyY3VsYXIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaGFuZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4uc3RhcnRBbmdsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLnN0YXJ0QW5nbGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksbi5zd2VlcEFuZ2xlPSgwLHMuZ2V0RmxvYXQpKHtkYXRhOmUuc3dlZXBBbmdsZSxkZWZhdWx0VmFsdWU6MzYwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVkZ2U9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmVkZ2V8fG5ldyBBZSh7fSkscj10W24uJHRvU3R5bGVdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuZmlsbCYmInZpc2libGUiPT09dGhpcy5maWxsLnByZXNlbmNlP09iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbbi4kdG9TdHlsZV0oKSk6YS5maWxsPSJ0cmFuc3BhcmVudCIsYS5zdHJva2VXaWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykoInZpc2libGUiPT09dC5wcmVzZW5jZT90LnRoaWNrbmVzczowKSxhLnN0cm9rZT1yLmNvbG9yO3ZhciBpPXt4bWxuczpQLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9fTtpZigzNjA9PT10aGlzLnN3ZWVwQW5nbGUpZT17bmFtZToiZWxsaXBzZSIsYXR0cmlidXRlczp7eG1sbnM6UCxjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTphfX07ZWxzZXt2YXIgYz10aGlzLnN0YXJ0QW5nbGUqTWF0aC5QSS8xODAsdT10aGlzLnN3ZWVwQW5nbGUqTWF0aC5QSS8xODAsbD10aGlzLnN3ZWVwQW5nbGU+MTgwPzE6MCxmPTUwKigxK01hdGguY29zKGMpKSxoPTUwKigxLU1hdGguc2luKGMpKSxkPTUwKigxK01hdGguY29zKGMrdSkpLHA9NTAqKDEtTWF0aC5zaW4oYyt1KSk7ZT17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6UCxkOiJNICIuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIEEgNTAgNTAgMCAiKS5jb25jYXQobCwiIDAgIikuY29uY2F0KGQsIiAiKS5jb25jYXQocCksdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOmF9fSxPYmplY3QuYXNzaWduKGkse3ZpZXdCb3g6IjAgMCAxMDAgMTAwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfXZhciBnPXtuYW1lOiJzdmciLGNoaWxkcmVuOltlXSxhdHRyaWJ1dGVzOml9O3JldHVybiBNKHRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbZ119KTooZy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoZykpfX1dKSxyfShuLlhGQU9iamVjdCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiYXJlYSIsITApKS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9cCh0LDQpLGE9clswXSxpPXJbMV0sbz1yWzJdLHM9clszXTt0aGlzW24uJGV4dHJhXS53aWR0aD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS53aWR0aCxhK28pLHRoaXNbbi4kZXh0cmFdLmhlaWdodD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS5oZWlnaHQsaStzKSx0aGlzW24uJGV4dHJhXS5jaGlsZHJlbi5wdXNoKGUpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5hdmFpbGFibGVTcGFjZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywicG9zaXRpb24iKSxyPXtzdHlsZTp0LGlkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUFyZWEiXX07KDAsby5pc1ByaW50T25seSkodGhpcykmJnIuY2xhc3MucHVzaCgieGZhUHJpbnRPbmx5IiksdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSk7dmFyIGE9W107dGhpc1tuLiRleHRyYV09e2NoaWxkcmVuOmEsd2lkdGg6MCxoZWlnaHQ6MCxhdmFpbGFibGVTcGFjZTplfTt2YXIgaT10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwiZXhjbEdyb3VwIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSksaW5jbHVkZTohMH0pO2lmKCFpLnN1Y2Nlc3MpcmV0dXJuIGkuaXNCcmVhaygpP2k6KGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRSk7dC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpc1tuLiRleHRyYV0ud2lkdGgpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzW24uJGV4dHJhXS5oZWlnaHQpO3ZhciBjPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6cixjaGlsZHJlbjphfSx1PVt0aGlzLngsdGhpcy55LHRoaXNbbi4kZXh0cmFdLndpZHRoLHRoaXNbbi4kZXh0cmFdLmhlaWdodF07cmV0dXJuIGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuc3VjY2VzcyhjLHUpfX1dKSxyfShuLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYXNzaXN0IiwhMCkpLmlkPWUuaWR8fCIiLG4ucm9sZT1lLnJvbGV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNwZWFrPW51bGwsbi50b29sVGlwPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvb2xUaXAmJnRoaXMudG9vbFRpcFtuLiRjb250ZW50XT90aGlzLnRvb2xUaXBbbi4kY29udGVudF06bnVsbH19XSkscn0obi5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJhcmNvZGUiLCEwKSkuY2hhckVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS5jaGFyRW5jb2Rpbmc/ZS5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxuLmNoZWNrc3VtPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmNoZWNrc3VtLFsibm9uZSIsIjFtb2QxMCIsIjFtb2QxMF8xbW9kMTEiLCIybW9kMTAiLCJhdXRvIl0pLG4uZGF0YUNvbHVtbkNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhQ29sdW1uQ291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZGF0YUxlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YUxlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5kYXRhUHJlcD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhUHJlcCxbIm5vbmUiLCJmbGF0ZUNvbXByZXNzIl0pLG4uZGF0YVJvd0NvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhUm93Q291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZW5kQ2hhcj1lLmVuZENoYXJ8fCIiLG4uZXJyb3JDb3JyZWN0aW9uTGV2ZWw9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmVycm9yQ29ycmVjdGlvbkxldmVsLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9OH19KSxuLmlkPWUuaWR8fCIiLG4ubW9kdWxlSGVpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlSGVpZ2h0LCI1bW0iKSxuLm1vZHVsZVdpZHRoPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlV2lkdGgsIjAuMjVtbSIpLG4ucHJpbnRDaGVja0RpZ2l0PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wcmludENoZWNrRGlnaXQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4ucm93Q29sdW1uUmF0aW89KDAscy5nZXRSYXRpbykoZS5yb3dDb2x1bW5SYXRpbyksbi5zdGFydENoYXI9ZS5zdGFydENoYXJ8fCIiLG4udGV4dExvY2F0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRleHRMb2NhdGlvbixbImJlbG93IiwiYWJvdmUiLCJhYm92ZUVtYmVkZGVkIiwiYmVsb3dFbWJlZGRlZCIsIm5vbmUiXSksbi50cnVuY2F0ZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudHJ1bmNhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlP2UudHlwZS50b0xvd2VyQ2FzZSgpOiIiLFsiYXp0ZWMiLCJjb2RhYmFyIiwiY29kZTJvZjVpbmR1c3RyaWFsIiwiY29kZTJvZjVpbnRlcmxlYXZlZCIsImNvZGUyb2Y1bWF0cml4IiwiY29kZTJvZjVzdGFuZGFyZCIsImNvZGUzb2Y5IiwiY29kZTNvZjlleHRlbmRlZCIsImNvZGUxMSIsImNvZGU0OSIsImNvZGU5MyIsImNvZGUxMjgiLCJjb2RlMTI4YSIsImNvZGUxMjhiIiwiY29kZTEyOGMiLCJjb2RlMTI4c3NjYyIsImRhdGFtYXRyaXgiLCJlYW44IiwiZWFuOGFkZDIiLCJlYW44YWRkNSIsImVhbjEzIiwiZWFuMTNhZGQyIiwiZWFuMTNhZGQ1IiwiZWFuMTNwd2NkIiwiZmltIiwibG9nbWFycyIsIm1heGljb2RlIiwibXNpIiwicGRmNDE3IiwicGRmNDE3bWFjcm8iLCJwbGVzc2V5IiwicG9zdGF1c2N1c3QyIiwicG9zdGF1c2N1c3QzIiwicG9zdGF1c3JlcGx5cGFpZCIsInBvc3RhdXNzdGFuZGFyZCIsInBvc3R1a3JtNHNjYyIsInBvc3R1c2RwYmMiLCJwb3N0dXNpbWIiLCJwb3N0dXNzdGFuZGFyZCIsInBvc3R1czV6aXAiLCJxcmNvZGUiLCJyZmlkIiwicnNzMTQiLCJyc3MxNGV4cGFuZGVkIiwicnNzMTRsaW1pdGVkIiwicnNzMTRzdGFja2VkIiwicnNzMTRzdGFja2Vkb21uaSIsInJzczE0dHJ1bmNhdGVkIiwidGVsZXBlbiIsInVjYzEyOCIsInVjYzEyOHJhbmRvbSIsInVjYzEyOHNzY2MiLCJ1cGNhIiwidXBjYWFkZDIiLCJ1cGNhYWRkNSIsInVwY2Fwd2NkIiwidXBjZSIsInVwY2VhZGQyIiwidXBjZWFkZDUiLCJ1cGNlYW4yIiwidXBjZWFuNSIsInVwc21heGljb2RlIl0pLG4udXBzTW9kZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS51cHNNb2RlLFsidXNDYXJyaWVyIiwiaW50ZXJuYXRpb25hbENhcnJpZXIiLCJzZWN1cmVTeW1ib2wiLCJzdGFuZGFyZFN5bWJvbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53aWRlTmFycm93UmF0aW89KDAscy5nZXRSYXRpbykoZS53aWRlTmFycm93UmF0aW8pLG4uZW5jcnlwdD1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJpbmQiLCEwKSkubWF0Y2g9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWF0Y2gsWyJvbmNlIiwiZGF0YVJlZiIsImdsb2JhbCIsIm5vbmUiXSksbi5yZWY9ZS5yZWZ8fCIiLG4ucGljdHVyZT1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJiaW5kSXRlbXMiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuQmluZEl0ZW1zPUo7dmFyIFo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJvb2tlbmQiKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksUT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYm9vbGVhbiIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSgxPT09dGhpc1tuLiRjb250ZW50XT8iMSI6IjAiKX19XSkscn0obi5PcHRpb24wMSksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImJvcmRlciIsITApKS5icmVhaz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5icmVhayxbImNsb3NlIiwib3BlbiJdKSxhLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY29ybmVyPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZWRnZT1uZXcgbi5YRkFPYmplY3RBcnJheSg0KSxhLmV4dHJhcz1udWxsLGEuZmlsbD1udWxsLGEubWFyZ2luPW51bGwsYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4uc2xpY2UoKTtpZihlLmxlbmd0aDw0KWZvcih2YXIgdD1lLmF0KC0xKXx8bmV3IEFlKHt9KSxyPWUubGVuZ3RoO3I8NDtyKyspZS5wdXNoKHQpO3ZhciBhPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50aGlja25lc3N9KSksaT1bMCwwLDAsMF07dGhpcy5tYXJnaW4mJihpWzBdPXRoaXMubWFyZ2luLnRvcEluc2V0LGlbMV09dGhpcy5tYXJnaW4ucmlnaHRJbnNldCxpWzJdPXRoaXMubWFyZ2luLmJvdHRvbUluc2V0LGlbM109dGhpcy5tYXJnaW4ubGVmdEluc2V0KSx0aGlzW24uJGV4dHJhXT17d2lkdGhzOmEsaW5zZXRzOmksZWRnZXM6ZX19cmV0dXJuIHRoaXNbbi4kZXh0cmFdfX0se2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRFeHRyYV0oKS5lZGdlcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kdG9TdHlsZV0oKTtyZXR1cm4gdC5jb2xvcj10LmNvbG9yfHwiIzAwMDAwMCIsdH0pKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5tYXJnaW4mJk9iamVjdC5hc3NpZ24odCx0aGlzLm1hcmdpbltuLiR0b1N0eWxlXSgpKSx0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZSYmT2JqZWN0LmFzc2lnbih0LHRoaXMuZmlsbFtuLiR0b1N0eWxlXSgpKSx0aGlzLmNvcm5lci5jaGlsZHJlbi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUucmFkaXVzfSkpKXt2YXIgcj10aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlW24uJHRvU3R5bGVdKCl9KSk7aWYoMj09PXIubGVuZ3RofHwzPT09ci5sZW5ndGgpZm9yKHZhciBhPXIuYXQoLTEpLGk9ci5sZW5ndGg7aTw0O2krKylyLnB1c2goYSk7dC5ib3JkZXJSYWRpdXM9ci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJhZGl1c30pKS5qb2luKCIgIil9c3dpdGNoKHRoaXMucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjpjYXNlImhpZGRlbiI6dC5ib3JkZXJTdHlsZT0iIjticmVhaztjYXNlImluYWN0aXZlIjp0LmJvcmRlclN0eWxlPSJub25lIjticmVhaztkZWZhdWx0OnQuYm9yZGVyU3R5bGU9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0eWxlfSkpLmpvaW4oIiAiKX1yZXR1cm4gdC5ib3JkZXJXaWR0aD1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUud2lkdGh9KSkuam9pbigiICIpLHQuYm9yZGVyQ29sb3I9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbG9yfSkpLmpvaW4oIiAiKSx0fX1dKSxyfShuLlhGQU9iamVjdCksdGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJyZWFrIiwhMCkpLmFmdGVyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFmdGVyLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiLCJwYWdlRXZlbiIsInBhZ2VPZGQiXSksbi5hZnRlclRhcmdldD1lLmFmdGVyVGFyZ2V0fHwiIixuLmJlZm9yZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5iZWZvcmUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKSxuLmJlZm9yZVRhcmdldD1lLmJlZm9yZVRhcmdldHx8IiIsbi5ib29rZW5kTGVhZGVyPWUuYm9va2VuZExlYWRlcnx8IiIsbi5ib29rZW5kVHJhaWxlcj1lLmJvb2tlbmRUcmFpbGVyfHwiIixuLmlkPWUuaWR8fCIiLG4ub3ZlcmZsb3dMZWFkZXI9ZS5vdmVyZmxvd0xlYWRlcnx8IiIsbi5vdmVyZmxvd1RhcmdldD1lLm92ZXJmbG93VGFyZ2V0fHwiIixuLm92ZXJmbG93VHJhaWxlcj1lLm92ZXJmbG93VHJhaWxlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxyZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtBZnRlciIsITApKS5pZD1lLmlkfHwiIixuLmxlYWRlcj1lLmxlYWRlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRhcmdldFR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudGFyZ2V0VHlwZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl0pLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxuZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtCZWZvcmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4uc3RhcnROZXc9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi50YXJnZXRUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKSxuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW24uJGV4dHJhXT17fSxzLkhUTUxSZXN1bHQuRkFJTFVSRX19XSkscn0obi5YRkFPYmplY3QpLGFlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJidXR0b24iLCEwKSkuaGlnaGxpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhpZ2hsaWdodCxbImludmVydGVkIiwibm9uZSIsIm91dGxpbmUiLCJwdXNoIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxhPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0saT1PKHIuZXZlbnQuY2hpbGRyZW4pO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZTtpZigiY2xpY2siPT09Yy5hY3Rpdml0eSYmYy5zY3JpcHQpe3ZhciB1PSgwLGwucmVjb3ZlckpzVVJMKShjLnNjcmlwdFtuLiRjb250ZW50XSk7aWYodSl7dmFyIGY9KDAsby5maXhVUkwpKHUudXJsKTtmJiZhLmNoaWxkcmVuLnB1c2goe25hbWU6ImEiLGF0dHJpYnV0ZXM6e2lkOiJsaW5rIit0aGlzW24uJHVpZF0saHJlZjpmLG5ld1dpbmRvdzp1Lm5ld1dpbmRvdyxjbGFzczpbInhmYUxpbmsiXSxzdHlsZTp7fX0sY2hpbGRyZW46W119KX19fX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3MoYSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxpZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FsY3VsYXRlIiwhMCkpLmlkPWUuaWR8fCIiLG4ub3ZlcnJpZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3ZlcnJpZGUsWyJkaXNhYmxlZCIsImVycm9yIiwiaWdub3JlIiwid2FybmluZyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLm1lc3NhZ2U9bnVsbCxuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxvZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FwdGlvbiIsITApKS5pZD1lLmlkfHwiIixuLnBsYWNlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wbGFjZW1lbnQsWyJsZWZ0IiwiYm90dG9tIiwiaW5saW5lIiwicmlnaHQiLCJ0b3AiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJlc2VydmU9TWF0aC5jZWlsKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmVzZXJ2ZSkpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4uZm9udD1udWxsLG4ubWFyZ2luPW51bGwsbi5wYXJhPW51bGwsbi52YWx1ZT1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kZ2V0RXh0cmEsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQ7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0PXRoaXMucmVzZXJ2ZTw9MD90OnRoaXMucmVzZXJ2ZTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnI9dGhpcy5yZXNlcnZlPD0wP3I6dGhpcy5yZXNlcnZlfXRoaXNbbi4kZXh0cmFdPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyx7d2lkdGg6dCxoZWlnaHQ6cn0pfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnZhbHVlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpc1tuLiRwdXNoUGFyYV0oKTt2YXIgdD10aGlzLnZhbHVlW24uJHRvSFRNTF0oZSkuaHRtbDtpZighdClyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgcj10aGlzLnJlc2VydmU7aWYodGhpcy5yZXNlcnZlPD0wKXt2YXIgYT10aGlzW24uJGdldEV4dHJhXShlKSxpPWEudyxjPWEuaDtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnRoaXMucmVzZXJ2ZT1pO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPWN9fXZhciB1PVtdOyJzdHJpbmciPT10eXBlb2YgdD91LnB1c2goe25hbWU6IiN0ZXh0Iix2YWx1ZTp0fSk6dS5wdXNoKHQpO3ZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsIm1hcmdpbiIsInZpc2liaWxpdHkiKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6dGhpcy5yZXNlcnZlPjAmJihsLndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJlc2VydmUpKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT4wJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmVzZXJ2ZSkpfXJldHVybigwLG8uc2V0UGFyYSkodGhpcyxudWxsLHQpLHRoaXNbbi4kcG9wUGFyYV0oKSx0aGlzLnJlc2VydmU9cixzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTpsLGNsYXNzOlsieGZhQ2FwdGlvbiJdfSxjaGlsZHJlbjp1fSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxjZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGVzIiwhMCkpLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi5pZD1lLmlkfHwiIixuLnVybD1lLnVybHx8IiIsbi51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVuY3J5cHRpb249bnVsbCxuLmlzc3VlcnM9bnVsbCxuLmtleVVzYWdlPW51bGwsbi5vaWRzPW51bGwsbi5zaWduaW5nPW51bGwsbi5zdWJqZWN0RE5zPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjaGVja0J1dHRvbiIsITApKS5pZD1lLmlkfHwiIixuLm1hcms9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWFyayxbImRlZmF1bHQiLCJjaGVjayIsImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiXSksbi5zaGFwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaGFwZSxbInNxdWFyZSIsInJvdW5kIl0pLG4uc2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnNpemUsIjEwcHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT0oMCxvLnRvU3R5bGUpKCJtYXJnaW4iKSxjPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNpemUpO2kud2lkdGg9aS5oZWlnaHQ9Yzt2YXIgdSxsPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxmPWwuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiZsLml0ZW1zLmNoaWxkcmVuWzBdW24uJHRvSFRNTF0oKS5odG1sfHxbXSxoPXtvbjoodm9pZCAwIT09ZlswXT9mWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1mWzFdP2ZbMV06Im9mZiIpLnRvU3RyaW5nKCl9LGQ9KGwudmFsdWUmJmwudmFsdWVbbi4kdGV4dF0oKXx8Im9mZiIpPT09aC5vbnx8dm9pZCAwLHA9bFtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGc9bFtuLiR1aWRdO3AgaW5zdGFuY2VvZiBSZT8oYT1wW24uJHVpZF0sdD0icmFkaW8iLHI9InhmYVJhZGlvIix1PXBbbi4kZGF0YV0mJnBbbi4kZGF0YV1bbi4kdWlkXXx8cFtuLiR1aWRdKToodD0iY2hlY2tib3giLHI9InhmYUNoZWNrYm94Iix1PWxbbi4kZGF0YV0mJmxbbi4kZGF0YV1bbi4kdWlkXXx8bFtuLiR1aWRdKTt2YXIgdj17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltyXSxzdHlsZTppLGZpZWxkSWQ6ZyxkYXRhSWQ6dSx0eXBlOnQsY2hlY2tlZDpkLHhmYU9uOmgub24seGZhT2ZmOmgub2ZmLCJhcmlhLWxhYmVsIjpCKGwpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBhJiYodi5hdHRyaWJ1dGVzLm5hbWU9YSksUihsKSYmKHYuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHYuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt2XX0pfX1dKSxyfShuLlhGQU9iamVjdCksbGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNob2ljZUxpc3QiLCEwKSkuY29tbWl0T249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5vcGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKSxuLnRleHRFbnRyeT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxvLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9ci5mb250JiZyLmZvbnQuc2l6ZXx8MTAsaT17Zm9udFNpemU6ImNhbGMoIi5jb25jYXQoYSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpfSxjPVtdO2lmKHIuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoPjApe3ZhciB1PXIuaXRlbXMsbD0wLGY9MDsyPT09dS5jaGlsZHJlbi5sZW5ndGgmJihmPTEtKGw9dS5jaGlsZHJlblswXS5zYXZlKSk7Zm9yKHZhciBoPXUuY2hpbGRyZW5bbF1bbi4kdG9IVE1MXSgpLmh0bWwsZD11LmNoaWxkcmVuW2ZdW24uJHRvSFRNTF0oKS5odG1sLHA9ITEsZz1yLnZhbHVlJiZyLnZhbHVlW24uJHRleHRdKCl8fCIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kyspe3ZhciBtPXtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e3ZhbHVlOmRbdl18fGhbdl0sc3R5bGU6aX0sdmFsdWU6aFt2XX07ZFt2XT09PWcmJihtLmF0dHJpYnV0ZXMuc2VsZWN0ZWQ9cD0hMCksYy5wdXNoKG0pfXB8fGMuc3BsaWNlKDAsMCx7bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOntoaWRkZW46ITAsc2VsZWN0ZWQ6ITB9LHZhbHVlOiIgIn0pfXZhciBiPXtjbGFzczpbInhmYVNlbGVjdCJdLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX07cmV0dXJuIFIocikmJihiWyJhcmlhLXJlcXVpcmVkIl09ITAsYi5yZXF1aXJlZD0hMCksIm11bHRpU2VsZWN0Ij09PXRoaXMub3BlbiYmKGIubXVsdGlwbGU9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbe25hbWU6InNlbGVjdCIsY2hpbGRyZW46YyxhdHRyaWJ1dGVzOmJ9XX0pfX1dKSxyfShuLlhGQU9iamVjdCksZmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbG9yIiwhMCkpLmNTcGFjZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jU3BhY2UsWyJTUkdCIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4udmFsdWU9ZS52YWx1ZT8oMCxzLmdldENvbG9yKShlLnZhbHVlKToiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZT9jLlV0aWwubWFrZUhleENvbG9yKHRoaXMudmFsdWUucix0aGlzLnZhbHVlLmcsdGhpcy52YWx1ZS5iKTpudWxsfX1dKSxyfShuLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbWIiKSkuaWQ9ZS5pZHx8IiIsbi5udW1iZXJPZkNlbGxzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5udW1iZXJPZkNlbGxzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksZGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbm5lY3QiLCEwKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uaWQ9ZS5pZHx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udXNhZ2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudXNhZ2UsWyJleHBvcnRBbmRJbXBvcnQiLCJleHBvcnRPbmx5IiwiaW1wb3J0T25seSJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5waWN0dXJlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb250ZW50QXJlYSIsITApKS5oPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KSxuLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxuLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxuLmRlc2M9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2xlZnQ6KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueCksdG9wOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnkpLHdpZHRoOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLncpLGhlaWdodDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5oKX0scj1bInhmYUNvbnRlbnRhcmVhIl07cmV0dXJuKDAsby5pc1ByaW50T25seSkodGhpcykmJnIucHVzaCgieGZhUHJpbnRPbmx5Iikscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7c3R5bGU6dCxjbGFzczpyLGlkOnRoaXNbbi4kdWlkXX19KX19XSkscn0obi5YRkFPYmplY3QpLGdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb3JuZXIiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5pbnZlcnRlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uam9pbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5qb2luLFsic3F1YXJlIiwicm91bmQiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJhZGl1cz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl1cyksbi5zdHJva2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKSxuLnRoaWNrbmVzcz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtyZXR1cm4gZS5yYWRpdXM9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJzcXVhcmUiPT09dGhpcy5qb2luPzA6dGhpcy5yYWRpdXMpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZSIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRjb250ZW50XS50cmltKCk7dGhpc1tuLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSh0aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCkseWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRhdGVUaW1lIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKTt0aGlzW24uJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKHRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxtZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZVRpbWVFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGlja2VyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnBpY2tlcixbImhvc3QiLCJub25lIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOnJbbi4kdWlkXSxkYXRhSWQ6cltuLiRkYXRhXSYmcltuLiRkYXRhXVtuLiR1aWRdfHxyW24uJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBSKHIpJiYoYS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITAsYS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwKSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2FdfSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxiZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGVjaW1hbCIpKS5mcmFjRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mcmFjRGlnaXRzLGRlZmF1bHRWYWx1ZToyLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4uaWQ9ZS5pZHx8IiIsbi5sZWFkRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZWFkRGlnaXRzLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLHdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJkZWZhdWx0VWkiLCEwKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLGtlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkZXNjIiwhMCkpLmlkPWUuaWR8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksU2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRpZ2VzdE1ldGhvZCIsWyIiLCJTSEExIiwiU0hBMjU2IiwiU0hBNTEyIiwiUklQRU1EMTYwIl0pKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5PcHRpb25PYmplY3QpLHhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkaWdlc3RNZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5kaWdlc3RNZXRob2Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLE9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkcmF3IiwhMCkpLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubG9jYWxlPWUubG9jYWxlfHwiIixhLm1heEg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKSxhLm1heFc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKSxhLm1pbkg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKSxhLm1pblc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKSxhLm5hbWU9ZS5uYW1lfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS5yb3RhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSU5MD09MH19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5ib3JkZXI9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5wYXJhPW51bGwsYS50cmF2ZXJzYWw9bnVsbCxhLnVpPW51bGwsYS52YWx1ZT1udWxsLGEuc2V0UHJvcGVydHk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe18odGhpcyxlKX0pKX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7KDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciB0PXRoaXMudyxyPXRoaXMuaCxhPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyxlKSxjPWEudyx1PWEuaCxsPWEuaXNCcm9rZW47aWYoYyYmIiI9PT10aGlzLncpe2lmKGwmJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7dGhpcy53PWN9aWYodSYmIiI9PT10aGlzLmgmJih0aGlzLmg9dSksJCh0aGlzKSwhKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtYKHRoaXMpO3ZhciBmPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsImhBbGlnbiIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsImJvcmRlciIsIm1hcmdpbiIpOygwLG8uc2V0TWluTWF4RGltZW5zaW9ucykodGhpcyxmKSxmLm1hcmdpbiYmKGYucGFkZGluZz1mLm1hcmdpbixkZWxldGUgZi5tYXJnaW4pO3ZhciBoPVsieGZhRHJhdyJdO3RoaXMuZm9udCYmaC5wdXNoKCJ4ZmFGb250IiksKDAsby5pc1ByaW50T25seSkodGhpcykmJmgucHVzaCgieGZhUHJpbnRPbmx5Iik7dmFyIGQ9e3N0eWxlOmYsaWQ6dGhpc1tuLiR1aWRdLGNsYXNzOmh9O3RoaXMubmFtZSYmKGQueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBwPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZCxjaGlsZHJlbjpbXX07RCh0aGlzLGQpO3ZhciBnPSgwLG8uY29tcHV0ZUJib3gpKHRoaXMscCxlKSx2PXRoaXMudmFsdWU/dGhpcy52YWx1ZVtuLiR0b0hUTUxdKGUpLmh0bWw6bnVsbDtyZXR1cm4gbnVsbD09PXY/KHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxvLmNyZWF0ZVdyYXBwZXIpKHRoaXMscCksZykpOihwLmNoaWxkcmVuLnB1c2godiksKDAsby5zZXRQYXJhKSh0aGlzLGYsdiksdGhpcy53PXQsdGhpcy5oPXIsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxwKSxnKSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxBZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZWRnZSIsITApKS5jYXA9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY2FwLFsic3F1YXJlIiwiYnV0dCIsInJvdW5kIl0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnN0cm9rZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zdHJva2UsWyJzb2xpZCIsImRhc2hEb3QiLCJkYXNoRG90RG90IiwiZGFzaGVkIiwiZG90dGVkIiwiZW1ib3NzZWQiLCJldGNoZWQiLCJsb3dlcmVkIiwicmFpc2VkIl0pLG4udGhpY2tuZXNzPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudGhpY2tuZXNzLCIwLjVwdCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywidmlzaWJpbGl0eSIpO2lmKE9iamVjdC5hc3NpZ24oZSx7bGluZWNhcDp0aGlzLmNhcCx3aWR0aDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50aGlja25lc3MpLGNvbG9yOnRoaXMuY29sb3I/dGhpcy5jb2xvcltuLiR0b1N0eWxlXSgpOiIjMDAwMDAwIixzdHlsZToiIn0pLCJ2aXNpYmxlIiE9PXRoaXMucHJlc2VuY2UpZS5zdHlsZT0ibm9uZSI7ZWxzZSBzd2l0Y2godGhpcy5zdHJva2Upe2Nhc2Uic29saWQiOmUuc3R5bGU9InNvbGlkIjticmVhaztjYXNlImRhc2hEb3QiOmNhc2UiZGFzaERvdERvdCI6Y2FzZSJkYXNoZWQiOmUuc3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmUuc3R5bGU9ImRvdHRlZCI7YnJlYWs7Y2FzZSJlbWJvc3NlZCI6ZS5zdHlsZT0icmlkZ2UiO2JyZWFrO2Nhc2UiZXRjaGVkIjplLnN0eWxlPSJncm9vdmUiO2JyZWFrO2Nhc2UibG93ZXJlZCI6ZS5zdHlsZT0iaW5zZXQiO2JyZWFrO2Nhc2UicmFpc2VkIjplLnN0eWxlPSJvdXRzZXQifXJldHVybiBlfX1dKSxyfShuLlhGQU9iamVjdCksQ2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImVuY29kaW5nIixbImFkYmUueDUwOS5yc2Ffc2hhMSIsImFkYmUucGtjczcuZGV0YWNoZWQiLCJhZGJlLnBrY3M3LnNoYTEiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksRmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY29kaW5ncyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0IiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNlcnRpZmljYXRlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFRlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0RGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJlbmNyeXB0IiwiZGVjcnlwdCJdKSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZmlsdGVyPW51bGwsbi5tYW5pZmVzdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxJZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZW5jcnlwdGlvbiIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0aW9uTWV0aG9kIixbIiIsIkFFUzI1Ni1DQkMiLCJUUklQTEVERVMtQ0JDIiwiQUVTMTI4LUNCQyIsIkFFUzE5Mi1DQkMiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksamU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY3J5cHRpb25NZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5lbmNyeXB0aW9uTWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxNZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZXZlbnQiLCEwKSkuYWN0aXZpdHk9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYWN0aXZpdHksWyJjbGljayIsImNoYW5nZSIsImRvY0Nsb3NlIiwiZG9jUmVhZHkiLCJlbnRlciIsImV4aXQiLCJmdWxsIiwiaW5kZXhDaGFuZ2UiLCJpbml0aWFsaXplIiwibW91c2VEb3duIiwibW91c2VFbnRlciIsIm1vdXNlRXhpdCIsIm1vdXNlVXAiLCJwb3N0RXhlY3V0ZSIsInBvc3RPcGVuIiwicG9zdFByaW50IiwicG9zdFNhdmUiLCJwb3N0U2lnbiIsInBvc3RTdWJtaXQiLCJwcmVFeGVjdXRlIiwicHJlT3BlbiIsInByZVByaW50IiwicHJlU2F2ZSIsInByZVNpZ24iLCJwcmVTdWJtaXQiLCJyZWFkeSIsInZhbGlkYXRpb25TdGF0ZSJdKSxuLmlkPWUuaWR8fCIiLG4ubGlzdGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxpc3RlbixbInJlZk9ubHkiLCJyZWZBbmREZXNjZW5kZW50cyJdKSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5lbmNyeXB0RGF0YT1udWxsLG4uZXhlY3V0ZT1udWxsLG4uc2NyaXB0PW51bGwsbi5zaWduRGF0YT1udWxsLG4uc3VibWl0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLF9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJleERhdGEiKSkuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiIsbi5ocmVmPWUuaHJlZnx8IiIsbi5pZD1lLmlkfHwiIixuLm1heExlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubWF4TGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49LTF9fSksbi5uYW1lPWUubmFtZXx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsibm9uZSIsImJhc2U2NCIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRpc0NEQVRBWG1sLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlfX0se2tleTpuLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybigidGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJmVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWR8fCJ0ZXh0L3htbCI9PT10aGlzLmNvbnRlbnRUeXBlKSYmKHRoaXNbbi4kY29udGVudF09ZSwhMCl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJnRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XVtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5Db250ZW50T2JqZWN0KSxMZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXhPYmplY3QiLCEwKSkuYXJjaGl2ZT1lLmFyY2hpdmV8fCIiLGEuY2xhc3NJZD1lLmNsYXNzSWR8fCIiLGEuY29kZUJhc2U9ZS5jb2RlQmFzZXx8IiIsYS5jb2RlVHlwZT1lLmNvZGVUeXBlfHwiIixhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJleGNsR3JvdXAiLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIixhLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubGF5b3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSksYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLnc9ZS53PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiIsYS54PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0IiksYS55PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0IiksYS5hc3Npc3Q9bnVsbCxhLmJpbmQ9bnVsbCxhLmJvcmRlcj1udWxsLGEuY2FsY3VsYXRlPW51bGwsYS5jYXB0aW9uPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS52YWxpZGF0ZT1udWxsLGEuY29ubmVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV2ZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmllbGQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0LHI9Tyh0aGlzLmZpZWxkLmNoaWxkcmVuKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7aWYoIWEudmFsdWUpe3ZhciBpPW5ldyBWdCh7fSk7YVtuLiRhcHBlbmRDaGlsZF0oaSksYS52YWx1ZT1pfWEudmFsdWVbbi4kc2V0VmFsdWVdKGUpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSl9LHtrZXk6bi4kaXNUaGVyZU1vcmVXaWR0aCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW24uJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kaXNUaGVyZU1vcmVXaWR0aF0oKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iik/KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITEsITEpOiEoZS5sYXlvdXQmJmUubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMCE9PWVbbi4kZXh0cmFdLm51bWJlckluTGluZXx8KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITAsMCkpKX19LHtrZXk6bi4kZmx1c2hIVE1MLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5mbHVzaEhUTUwpKHRoaXMpfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9fSx7a2V5Om4uJGdldEF2YWlsYWJsZVNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5nZXRBdmFpbGFibGVTcGFjZSkodGhpcyl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtpZihOKHRoaXMpLCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTsoMCxvLmZpeERpbWVuc2lvbnMpKHRoaXMpO3ZhciB0PVtdLHI9e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbXX07KDAsby5zZXRBY2Nlc3MpKHRoaXMsci5jbGFzcyksdGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKSxPYmplY3QuYXNzaWduKHRoaXNbbi4kZXh0cmFdLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6cixhdHRlbXB0OjAsbGluZTpudWxsLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO3ZhciBhPXRoaXNbbi4kaXNTcGxpdHRhYmxlXSgpO2lmKGF8fCQodGhpcyksISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXJldHVybiBzLkhUTUxSZXN1bHQuRkFJTFVSRTt2YXIgYz1uZXcgU2V0KFsiZmllbGQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgdT10aGlzW24uJGdldFN1YmZvcm1QYXJlbnRdKCkuY29sdW1uV2lkdGhzO0FycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoPjAmJih0aGlzW24uJGV4dHJhXS5jb2x1bW5XaWR0aHM9dSx0aGlzW24uJGV4dHJhXS5jdXJyZW50Q29sdW1uPTApfXZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksZj1bInhmYUV4Y2xncm91cCJdLGg9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aCYmZi5wdXNoKGgpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZmLnB1c2goInhmYVByaW50T25seSIpLHIuc3R5bGU9bCxyLmNsYXNzPWYsdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSksdGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGQ9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQscD1kPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PHA7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtkJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgZz10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmMsaW5jbHVkZTohMH0pO2lmKGcuc3VjY2VzcylicmVhaztpZihnLmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLGc7aWYoZCYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiF0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PXA7YnJlYWt9fWlmKHRoaXNbbi4kcG9wUGFyYV0oKSxhfHxYKHRoaXMpLHRoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9PT1wKXJldHVybiBhfHxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIHY9MCx5PTA7dGhpcy5tYXJnaW4mJih2PXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0LHk9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBtPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLndpZHRoK3YsdGhpcy53fHwwKSxiPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLmhlaWdodCt5LHRoaXMuaHx8MCksdz1bdGhpcy54LHRoaXMueSxtLGJdOyIiPT09dGhpcy53JiYobC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykobSkpLCIiPT09dGhpcy5oJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKGIpKTt2YXIgaz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOnIsY2hpbGRyZW46dH07cmV0dXJuIEQodGhpcyxyKSxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLGspLHcpfX1dKSxyfShuLlhGQU9iamVjdCksTmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImV4ZWN1dGUiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uZXhlY3V0ZVR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZXhlY3V0ZVR5cGUsWyJpbXBvcnQiLCJyZW1lcmdlIl0pLG4uaWQ9ZS5pZHx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXh0cmFzIiwhMCkpLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXh0cmFzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksQmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImZpZWxkIiwhMCkpLmFjY2Vzcz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKSxhLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiIsYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5oPWUuaD8oMCxzLmdldE1lYXN1cmVtZW50KShlLmgpOiIiLGEuaEFsaWduPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEucm90YXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUlOTA9PTB9fSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEudz1lLnc/KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KToiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmFzc2lzdD1udWxsLGEuYmluZD1udWxsLGEuYm9yZGVyPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEuZm9ybWF0PW51bGwsYS5pdGVtcz1uZXcgbi5YRkFPYmplY3RBcnJheSgyKSxhLmtlZXA9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS51aT1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhbHVlPW51bGwsYS5iaW5kSXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb25uZWN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKE4odGhpcyksIXRoaXMudWkpe3ZhciB0O3N3aXRjaCh0aGlzLnVpPW5ldyB6dCh7fSksdGhpcy51aVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKHRoaXMudWkpLHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6dD1uZXcgVXQoe30pLHRoaXMudWkudGV4dEVkaXQ9dDticmVhaztjYXNlIDE6dD1uZXcgdWUoe30pLHRoaXMudWkuY2hlY2tCdXR0b249dDticmVhaztjYXNlIDI6dD1uZXcgbGUoe30pLHRoaXMudWkuY2hvaWNlTGlzdD10fXRoaXMudWlbbi4kYXBwZW5kQ2hpbGRdKHQpfWlmKCF0aGlzLnVpfHwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpcy5jYXB0aW9uJiZkZWxldGUgdGhpcy5jYXB0aW9uW24uJGV4dHJhXSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciByPXRoaXMuY2FwdGlvbj90aGlzLmNhcHRpb25bbi4kdG9IVE1MXShlKS5odG1sOm51bGwsYT10aGlzLncsYz10aGlzLmgsbD0wLGY9MDt0aGlzLm1hcmdpbiYmKGw9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsZj10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIGg9bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe3ZhciBkPW51bGwsZz1udWxsLHY9MCx5PTA7aWYodGhpcy51aS5jaGVja0J1dHRvbil2PXk9dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7dmFyIG09KDAsby5sYXlvdXROb2RlKSh0aGlzLGUpLGI9bS53LHc9bS5oO251bGwhPT1iPyh2PWIseT13KTp5PSgwLHUuZ2V0TWV0cmljcykodGhpcy5mb250LCEwKS5saW5lTm9HYXB9aWYodis9KGg9aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKSkudyx5Kz1oLmgsdGhpcy5jYXB0aW9uKXt2YXIgaz10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLFM9ay53LHg9ay5oO2lmKGsuaXNCcm9rZW4mJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7c3dpdGNoKGQ9UyxnPXgsdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6ZCs9djticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmcrPXl9fWVsc2UgZD12LGc9eTtkJiYiIj09PXRoaXMudyYmKGQrPWwsdGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPGQ/ZDp0aGlzLm1pblcpKSxnJiYiIj09PXRoaXMuaCYmKGcrPWYsdGhpcy5oPU1hdGgubWluKHRoaXMubWF4SDw9MD8xLzA6dGhpcy5tYXhILHRoaXMubWluSCsxPGc/Zzp0aGlzLm1pbkgpKX1pZih0aGlzW24uJHBvcFBhcmFdKCksKDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gdGhpcy53PWEsdGhpcy5oPWMsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5GQUlMVVJFO1godGhpcyk7dmFyIE89KDAsby50b1N0eWxlKSh0aGlzLCJmb250IiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsInByZXNlbmNlIiwibWFyZ2luIiwiaEFsaWduIik7KDAsby5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLE8pO3ZhciBBPVsieGZhRmllbGQiXTt0aGlzLmZvbnQmJkEucHVzaCgieGZhRm9udCIpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZBLnB1c2goInhmYVByaW50T25seSIpO3ZhciBDPXtzdHlsZTpPLGlkOnRoaXNbbi4kdWlkXSxjbGFzczpBfTtPLm1hcmdpbiYmKE8ucGFkZGluZz1PLm1hcmdpbixkZWxldGUgTy5tYXJnaW4pLCgwLG8uc2V0QWNjZXNzKSh0aGlzLEEpLHRoaXMubmFtZSYmKEMueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBGPVtdLFA9e25hbWU6ImRpdiIsYXR0cmlidXRlczpDLGNoaWxkcmVuOkZ9O0QodGhpcyxDKTt2YXIgVD10aGlzLmJvcmRlcj90aGlzLmJvcmRlcltuLiR0b1N0eWxlXSgpOm51bGwsST0oMCxvLmNvbXB1dGVCYm94KSh0aGlzLFAsZSksRT10aGlzLnVpW24uJHRvSFRNTF0oKS5odG1sO2lmKCFFKXJldHVybiBPYmplY3QuYXNzaWduKE8sVCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO3RoaXNbbi4kdGFiSW5kZXhdJiYoRS5jaGlsZHJlbiYmRS5jaGlsZHJlblswXT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1tuLiR0YWJJbmRleF06RS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbbi4kdGFiSW5kZXhdKSxFLmF0dHJpYnV0ZXMuc3R5bGV8fChFLmF0dHJpYnV0ZXMuc3R5bGU9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIE09bnVsbDtpZih0aGlzLnVpLmJ1dHRvbj8oMT09PUUuY2hpbGRyZW4ubGVuZ3RoJiYoTT1wKEUuY2hpbGRyZW4uc3BsaWNlKDAsMSksMSlbMF0pLE9iamVjdC5hc3NpZ24oRS5hdHRyaWJ1dGVzLnN0eWxlLFQpKTpPYmplY3QuYXNzaWduKE8sVCksRi5wdXNoKEUpLHRoaXMudmFsdWUpaWYodGhpcy51aS5pbWFnZUVkaXQpRS5jaGlsZHJlbi5wdXNoKHRoaXMudmFsdWVbbi4kdG9IVE1MXSgpLmh0bWwpO2Vsc2UgaWYoIXRoaXMudWkuYnV0dG9uKXt2YXIgXz0iIjtpZih0aGlzLnZhbHVlLmV4RGF0YSlfPXRoaXMudmFsdWUuZXhEYXRhW24uJHRleHRdKCk7ZWxzZSBpZih0aGlzLnZhbHVlLnRleHQpXz10aGlzLnZhbHVlLnRleHRbbi4kZ2V0RXh0cmFdKCk7ZWxzZXt2YXIgTD10aGlzLnZhbHVlW24uJHRvSFRNTF0oKS5odG1sO251bGwhPT1MJiYoXz1MLmNoaWxkcmVuWzBdLnZhbHVlKX10aGlzLnVpLnRleHRFZGl0JiZ0aGlzLnZhbHVlLnRleHQmJnRoaXMudmFsdWUudGV4dC5tYXhDaGFycyYmKEUuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5tYXhMZW5ndGg9dGhpcy52YWx1ZS50ZXh0Lm1heENoYXJzKSxfJiYodGhpcy51aS5udW1lcmljRWRpdCYmKF89cGFyc2VGbG9hdChfKSxfPWlzTmFOKF8pPyIiOl8udG9TdHJpbmcoKSksInRleHRhcmVhIj09PUUuY2hpbGRyZW5bMF0ubmFtZT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGV4dENvbnRlbnQ9XzpFLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudmFsdWU9Xyl9aWYoIXRoaXMudWkuaW1hZ2VFZGl0JiZFLmNoaWxkcmVuJiZFLmNoaWxkcmVuWzBdJiZ0aGlzLmgpe2g9aHx8aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKTt2YXIgUj0wO2lmKHRoaXMuY2FwdGlvbiYmWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSl7KFI9dGhpcy5jYXB0aW9uLnJlc2VydmUpPD0wJiYoUj10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLmgpO3ZhciBCPXRoaXMuaC1SLWYtaC5oO0UuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKEIpfWVsc2UgRS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0iMTAwJSJ9aWYoTSYmRS5jaGlsZHJlbi5wdXNoKE0pLCFyKXJldHVybiBFLmF0dHJpYnV0ZXMuY2xhc3MmJkUuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0IiksdGhpcy53PWEsdGhpcy5oPWMscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO2lmKHRoaXMudWkuYnV0dG9uKXJldHVybiBPLnBhZGRpbmcmJmRlbGV0ZSBPLnBhZGRpbmcsImRpdiI9PT1yLm5hbWUmJihyLm5hbWU9InNwYW4iKSxFLmNoaWxkcmVuLnB1c2gocikscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoUCxJKTtzd2l0Y2godGhpcy51aS5jaGVja0J1dHRvbiYmKHIuYXR0cmlidXRlcy5jbGFzc1swXT0ieGZhQ2FwdGlvbkZvckNoZWNrQnV0dG9uIiksRS5hdHRyaWJ1dGVzLmNsYXNzfHwoRS5hdHRyaWJ1dGVzLmNsYXNzPVtdKSxFLmNoaWxkcmVuLnNwbGljZSgwLDAsciksdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlImlubGluZSI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTticmVhaztjYXNlInJpZ2h0IjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhUmlnaHQiKTticmVhaztjYXNlInRvcCI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVRvcCIpO2JyZWFrO2Nhc2UiYm90dG9tIjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhQm90dG9tIil9cmV0dXJuIHRoaXMudz1hLHRoaXMuaD1jLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxQKSxJKX19XSkscn0obi5YRkFPYmplY3QpO3QuRmllbGQ9QmU7dmFyIFVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmaWxsIiwhMCkpLmlkPWUuaWR8fCIiLG4ucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG4ubGluZWFyPW51bGwsbi5wYXR0ZXJuPW51bGwsbi5yYWRpYWw9bnVsbCxuLnNvbGlkPW51bGwsbi5zdGlwcGxlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PWVbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxyPU9iamVjdC5jcmVhdGUobnVsbCksYT0iY29sb3IiLGk9YTtlIGluc3RhbmNlb2YgZWUmJihhPSJiYWNrZ3JvdW5kLWNvbG9yIixpPSJiYWNrZ3JvdW5kIix0IGluc3RhbmNlb2YgenQmJihyLmJhY2tncm91bmRDb2xvcj0id2hpdGUiKSksKGUgaW5zdGFuY2VvZiB4dHx8ZSBpbnN0YW5jZW9mIHopJiYoYT1pPSJmaWxsIixyLmZpbGw9IndoaXRlIik7dmFyIG8scz1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBjPW8udmFsdWU7aWYoImV4dHJhcyIhPT1jJiYiY29sb3IiIT09Yyl7dmFyIHU9dGhpc1tjXTtpZih1IGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBsPXVbbi4kdG9TdHlsZV0odGhpcy5jb2xvcik7cmV0dXJuIGwmJihyW2wuc3RhcnRzV2l0aCgiIyIpP2E6aV09bCkscn19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1pZih0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLnZhbHVlKXt2YXIgZj10aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk7cltmLnN0YXJ0c1dpdGgoIiMiKT9hOmldPWZ9cmV0dXJuIHJ9fV0pLHJ9KG4uWEZBT2JqZWN0KSwkZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZmlsdGVyIiwhMCkpLmFkZFJldm9jYXRpb25JbmZvPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFkZFJldm9jYXRpb25JbmZvLFsiIiwicmVxdWlyZWQiLCJvcHRpb25hbCIsIm5vbmUiXSksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52ZXJzaW9uPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6bi52ZXJzaW9uLGRlZmF1bHRWYWx1ZTo1LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD01fX0pLG4uYXBwZWFyYW5jZUZpbHRlcj1udWxsLG4uY2VydGlmaWNhdGVzPW51bGwsbi5kaWdlc3RNZXRob2RzPW51bGwsbi5lbmNvZGluZ3M9bnVsbCxuLmVuY3J5cHRpb25NZXRob2RzPW51bGwsbi5oYW5kbGVyPW51bGwsbi5sb2NrRG9jdW1lbnQ9bnVsbCxuLm1kcD1udWxsLG4ucmVhc29ucz1udWxsLG4udGltZVN0YW1wPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmbG9hdCIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmb250IiwhMCkpLmJhc2VsaW5lU2hpZnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5iYXNlbGluZVNoaWZ0KSxuLmZvbnRIb3Jpem9udGFsU2NhbGU9KDAscy5nZXRGbG9hdCkoe2RhdGE6ZS5mb250SG9yaXpvbnRhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5mb250VmVydGljYWxTY2FsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLmZvbnRWZXJ0aWNhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5pZD1lLmlkfHwiIixuLmtlcm5pbmdNb2RlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmtlcm5pbmdNb2RlLFsibm9uZSIsInBhaXIiXSksbi5sZXR0ZXJTcGFjaW5nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGV0dGVyU3BhY2luZywiMCIpLG4ubGluZVRocm91Z2g9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxpbmVUaHJvdWdoLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZXx8Mj09PWV9fSksbi5saW5lVGhyb3VnaFBlcmlvZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5saW5lVGhyb3VnaFBlcmlvZCxbImFsbCIsIndvcmQiXSksbi5vdmVybGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3ZlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfHwyPT09ZX19KSxuLm92ZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm92ZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKSxuLnBvc3R1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucG9zdHVyZSxbIm5vcm1hbCIsIml0YWxpYyJdKSxuLnNpemU9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaXplLCIxMHB0Iiksbi50eXBlZmFjZT1lLnR5cGVmYWNlfHwiQ291cmllciIsbi51bmRlcmxpbmU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnVuZGVybGluZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDI9PT1lfX0pLG4udW5kZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnVuZGVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4ud2VpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLndlaWdodCxbIm5vcm1hbCIsImJvbGQiXSksbi5leHRyYXM9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kY2xlYW4sdmFsdWU6ZnVuY3Rpb24oZSl7ZChrKHIucHJvdG90eXBlKSxuLiRjbGVhbix0aGlzKS5jYWxsKHRoaXMsZSksdGhpc1tuLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZCh0aGlzLnR5cGVmYWNlKX19LHtrZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywiZmlsbCIpLHQ9ZS5jb2xvcjtyZXR1cm4gdCYmKCIjMDAwMDAwIj09PXQ/ZGVsZXRlIGUuY29sb3I6dC5zdGFydHNXaXRoKCIjIil8fChlLmJhY2tncm91bmQ9dCxlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IixlLmNvbG9yPSJ0cmFuc3BhcmVudCIpKSx0aGlzLmJhc2VsaW5lU2hpZnQmJihlLnZlcnRpY2FsQWxpZ249KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuYmFzZWxpbmVTaGlmdCkpLGUuZm9udEtlcm5pbmc9Im5vbmUiPT09dGhpcy5rZXJuaW5nTW9kZT8ibm9uZSI6Im5vcm1hbCIsZS5sZXR0ZXJTcGFjaW5nPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxldHRlclNwYWNpbmcpLDAhPT10aGlzLmxpbmVUaHJvdWdoJiYoZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIiwyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLDAhPT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvbj0ib3ZlcmxpbmUiLDI9PT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKSksZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlLGUuZm9udFNpemU9KDAsby5tZWFzdXJlVG9TdHJpbmcpKC45OSp0aGlzLnNpemUpLCgwLG8uc2V0Rm9udEZhbWlseSkodGhpcyx0aGlzLHRoaXNbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixlKSwwIT09dGhpcy51bmRlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiLDI9PT10aGlzLnVuZGVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLGUuZm9udFdlaWdodD10aGlzLndlaWdodCxlfX1dKSxyfShuLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImZvcm1hdCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLnBpY3R1cmU9bnVsbCxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksR2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImhhbmRsZXIiKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCksemU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImh5cGhlbmF0aW9uIikpLmV4Y2x1ZGVBbGxDYXBzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlQWxsQ2FwcyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5leGNsdWRlSW5pdGlhbENhcD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUluaXRpYWxDYXAsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaHlwaGVuYXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5oeXBoZW5hdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wdXNoQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnB1c2hDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnJlbWFpbkNoYXJhY3RlckNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yZW1haW5DaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53b3JkQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLndvcmRDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Nyx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksV2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImltYWdlIikpLmFzcGVjdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSksbi5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIixuLmhyZWY9ZS5ocmVmfHwiIixuLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRlbnRUeXBlJiYhSS5oYXModGhpcy5jb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO3ZhciBlPXRoaXNbbi4kZ2xvYmFsRGF0YV0uaW1hZ2VzJiZ0aGlzW24uJGdsb2JhbERhdGFdLmltYWdlcy5nZXQodGhpcy5ocmVmKTtpZighZSYmKHRoaXMuaHJlZnx8IXRoaXNbbi4kY29udGVudF0pKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoZXx8ImJhc2U2NCIhPT10aGlzLnRyYW5zZmVyRW5jb2Rpbmd8fChlPSgwLGMuc3RyaW5nVG9CeXRlcykoYXRvYih0aGlzW24uJGNvbnRlbnRdKSkpLCFlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoIXRoaXMuY29udGVudFR5cGUpe2Zvcih2YXIgdD0wLHI9RTt0PHIubGVuZ3RoO3QrKyl7dmFyIGE9cChyW3RdLDIpLGk9YVswXSxvPWFbMV07aWYoZS5sZW5ndGg+aS5sZW5ndGgmJmkuZXZlcnkoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9PT1lW3JdfSkpKXt0aGlzLmNvbnRlbnRUeXBlPW87YnJlYWt9fWlmKCF0aGlzLmNvbnRlbnRUeXBlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFl9dmFyIHUsbD1uZXcgQmxvYihbZV0se3R5cGU6dGhpcy5jb250ZW50VHlwZX0pO3N3aXRjaCh0aGlzLmFzcGVjdCl7Y2FzZSJmaXQiOmNhc2UiYWN0dWFsIjpicmVhaztjYXNlImhlaWdodCI6dT17aGVpZ2h0OiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifTticmVhaztjYXNlIm5vbmUiOnU9e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uid2lkdGgiOnU9e3dpZHRoOiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifX12YXIgZj10aGlzW24uJGdldFBhcmVudF0oKTtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImltZyIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFJbWFnZSJdLHN0eWxlOnUsc3JjOlVSTC5jcmVhdGVPYmplY3RVUkwobCksYWx0OmY/QihmW24uJGdldFBhcmVudF0oKSk6bnVsbH19KX19XSkscn0obi5TdHJpbmdPYmplY3QpLFZlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJpbWFnZUVkaXQiLCEwKSkuZGF0YT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhLFsibGluayIsImVtYmVkIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9zLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShuLlhGQU9iamVjdCksWWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImludGVnZXIiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXBhcnNlSW50KHRoaXNbbi4kY29udGVudF0udHJpbSgpLDEwKTt0aGlzW24uJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKG51bGwhPT10aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksS2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImlzc3VlcnMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmNlcnRpZmljYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiaXRlbXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlZj1lLnJlZnx8IiIsYS5zYXZlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5zYXZlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5ib29sZWFuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGVjaW1hbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1PKHRoaXNbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTt0LnB1c2goYVtuLiR0ZXh0XSgpKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfX1dKSxyfShuLlhGQU9iamVjdCk7dC5JdGVtcz1KZTt2YXIgWmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjt5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwia2VlcCIsITApKS5pZD1lLmlkfHwiIjt2YXIgYT1bIm5vbmUiLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl07cmV0dXJuIG4uaW50YWN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmludGFjdCxhKSxuLm5leHQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubmV4dCxhKSxuLnByZXZpb3VzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXZpb3VzLGEpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxRZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3kodGhpcyxyKTt2YXIgYT1bIiIsInllcyIsIm5vIl07cmV0dXJuKG49dC5jYWxsKHRoaXMsRiwia2V5VXNhZ2UiKSkuY3JsU2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jcmxTaWduLGEpLG4uZGF0YUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhRW5jaXBoZXJtZW50LGEpLG4uZGVjaXBoZXJPbmx5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmRlY2lwaGVyT25seSxhKSxuLmRpZ2l0YWxTaWduYXR1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZGlnaXRhbFNpZ25hdHVyZSxhKSxuLmVuY2lwaGVyT25seT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5lbmNpcGhlck9ubHksYSksbi5pZD1lLmlkfHwiIixuLmtleUFncmVlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlBZ3JlZW1lbnQsYSksbi5rZXlDZXJ0U2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlDZXJ0U2lnbixhKSxuLmtleUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlFbmNpcGhlcm1lbnQsYSksbi5ub25SZXB1ZGlhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ub25SZXB1ZGlhdGlvbixhKSxuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxldD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibGluZSIsITApKS5oYW5kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5zbG9wZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zbG9wZSxbIlxcIiwiLyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5lZGdlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGk9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGM9dGhpcy5lZGdlfHxuZXcgQWUoe30pLHU9Y1tuLiR0b1N0eWxlXSgpLGw9T2JqZWN0LmNyZWF0ZShudWxsKSxmPSJ2aXNpYmxlIj09PWMucHJlc2VuY2U/Yy50aGlja25lc3M6MDtsLnN0cm9rZVdpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShmKSxsLnN0cm9rZT11LmNvbG9yO3ZhciBoPSIxMDAlIixkPSIxMDAlIjtpLnc8PWY/KGU9IjUwJSIsdD0wLHI9IjUwJSIsYT0iMTAwJSIsaD1sLnN0cm9rZVdpZHRoKTppLmg8PWY/KGU9MCx0PSI1MCUiLHI9IjEwMCUiLGE9IjUwJSIsZD1sLnN0cm9rZVdpZHRoKToiXFwiPT09dGhpcy5zbG9wZT8oZT0wLHQ9MCxyPSIxMDAlIixhPSIxMDAlIik6KGU9MCx0PSIxMDAlIixyPSIxMDAlIixhPTApO3ZhciBwPXtuYW1lOiJzdmciLGNoaWxkcmVuOlt7bmFtZToibGluZSIsYXR0cmlidXRlczp7eG1sbnM6UCx4MTplLHkxOnQseDI6cix5MjphLHN0eWxlOmx9fV0sYXR0cmlidXRlczp7eG1sbnM6UCx3aWR0aDpoLGhlaWdodDpkLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9fX07cmV0dXJuIE0oaSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbcF19KToocC5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MocCkpfX1dKSxyfShuLlhGQU9iamVjdCksdHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxpbmVhciIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvUmlnaHQiLCJ0b0JvdHRvbSIsInRvTGVmdCIsInRvVG9wIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLnR5cGUucmVwbGFjZSgvKFtSQkxUXSkvLCIgJDEiKS50b0xvd2VyQ2FzZSgpLHI9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiO3JldHVybiJsaW5lYXItZ3JhZGllbnQoIi5jb25jYXQodCwiLCAiKS5jb25jYXQoZSwiLCAiKS5jb25jYXQociwiKSIpfX1dKSxyfShuLlhGQU9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxvY2tEb2N1bWVudCIpKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09KDAscy5nZXRTdHJpbmdPcHRpb24pKHRoaXNbbi4kY29udGVudF0sWyJhdXRvIiwiMCIsIjEiXSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksbnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsIm1hbmlmZXN0IiwhMCkpLmFjdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY3Rpb24sWyJpbmNsdWRlIiwiYWxsIiwiZXhjbHVkZSJdKSxhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEucmVmPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxhdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibWFyZ2luIiwhMCkpLmJvdHRvbUluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuYm90dG9tSW5zZXQsIjAiKSxuLmlkPWUuaWR8fCIiLG4ubGVmdEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGVmdEluc2V0LCIwIiksbi5yaWdodEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmlnaHRJbnNldCwiMCIpLG4udG9wSW5zZXQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS50b3BJbnNldCwiMCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue21hcmdpbjooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50b3BJbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJpZ2h0SW5zZXQpKyIgIisoMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5ib3R0b21JbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxlZnRJbnNldCl9fX1dKSxyfShuLlhGQU9iamVjdCksaXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1kcCIpKS5pZD1lLmlkfHwiIixuLnBlcm1pc3Npb25zPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wZXJtaXNzaW9ucyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDM9PT1lfX0pLG4uc2lnbmF0dXJlVHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaWduYXR1cmVUeXBlLFsiZmlsbGVyIiwiYXV0aG9yIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1lZGl1bSIpKS5pZD1lLmlkfHwiIixuLmltYWdpbmdCQm94PSgwLHMuZ2V0QkJveCkoZS5pbWFnaW5nQkJveCksbi5sb25nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubG9uZyksbi5vcmllbnRhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcmllbnRhdGlvbixbInBvcnRyYWl0IiwibGFuZHNjYXBlIl0pLG4uc2hvcnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaG9ydCksbi5zdG9jaz1lLnN0b2NrfHwiIixuLnRyYXlJbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmF5SW4sWyJhdXRvIiwiZGVsZWdhdGUiLCJwYWdlRnJvbnQiXSksbi50cmF5T3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlPdXQsWyJhdXRvIiwiZGVsZWdhdGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxzdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwibWVzc2FnZSIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxjdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibnVtZXJpY0VkaXQiLCEwKSkuaFNjcm9sbFBvbGljeT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5jb21iPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIikscj10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCksYT17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOkIociksImFyaWEtcmVxdWlyZWQiOiExfX07cmV0dXJuIFIocikmJihhLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMCxhLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbYV19KX19XSkscn0obi5YRkFPYmplY3QpLHV0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvY2N1ciIsITApKS5pZD1lLmlkfHwiIixuLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pOiIiLG4ubWF4PSIiIT09ZS5tYXg/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KToiIixuLm1pbj0iIiE9PWUubWluPygwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5taW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSk6IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGNsZWFuLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIGR0fHxlIGluc3RhbmNlb2YgcHQ/MDoxKSwiIj09PXRoaXMubWF4JiYodGhpcy5tYXg9IiI9PT10P2UgaW5zdGFuY2VvZiBkdHx8ZSBpbnN0YW5jZW9mIHB0Py0xOjE6dGhpcy5taW4pLC0xIT09dGhpcy5tYXgmJnRoaXMubWF4PHRoaXMubWluJiYodGhpcy5tYXg9dGhpcy5taW4pLCIiPT09dGhpcy5pbml0aWFsJiYodGhpcy5pbml0aWFsPWUgaW5zdGFuY2VvZiBEdD8xOnRoaXMubWluKX19XSkscn0obi5YRkFPYmplY3QpLGx0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvaWQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxmdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwib2lkcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEub2lkPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxodD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwib3ZlcmZsb3ciKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PXRoaXNbbi4kZ2V0VGVtcGxhdGVSb290XSgpLHI9dFtuLiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCxlKSxhPXRbbi4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsZSksaT10W24uJHNlYXJjaE5vZGVdKHRoaXMudHJhaWxlcixlKTt0aGlzW24uJGV4dHJhXT17dGFyZ2V0OnImJnJbMF18fG51bGwsbGVhZGVyOmEmJmFbMF18fG51bGwsdHJhaWxlcjppJiZpWzBdfHxudWxsLGFkZExlYWRlcjohMSxhZGRUcmFpbGVyOiExfX1yZXR1cm4gdGhpc1tuLiRleHRyYV19fV0pLHJ9KG4uWEZBT2JqZWN0KSxkdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicGFnZUFyZWEiLCEwKSkuYmxhbmtPck5vdEJsYW5rPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmJsYW5rT3JOb3RCbGFuayxbImFueSIsImJsYW5rIiwibm90QmxhbmsiXSksYS5pZD1lLmlkfHwiIixhLmluaXRpYWxOdW1iZXI9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWxOdW1iZXIsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5uYW1lPWUubmFtZXx8IiIsYS5udW1iZXJlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyZWQsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5vZGRPckV2ZW49KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub2RkT3JFdmVuLFsiYW55IiwiZXZlbiIsIm9kZCJdKSxhLnBhZ2VQb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wYWdlUG9zaXRpb24sWyJhbnkiLCJmaXJzdCIsImxhc3QiLCJvbmx5IiwicmVzdCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEubWVkaXVtPW51bGwsYS5vY2N1cj1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbnRlbnRBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZHJhdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNVc2FibGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuLiRleHRyYV0/IXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4Oih0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0sITApfX0se2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLiRleHRyYV19fSx7a2V5Om4uJGdldE5leHRQYWdlLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0pO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW24uJGlzVXNhYmxlXSgpPyh0aGlzW24uJGV4dHJhXS5udW1iZXJPZlVzZSs9MSx0aGlzKTplW24uJGdldE5leHRQYWdlXSgpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5zcGFjZXx8e3dpZHRoOjAsaGVpZ2h0OjB9fX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPXtudW1iZXJPZlVzZToxfSk7dmFyIGU9W107dGhpc1tuLiRleHRyYV0uY2hpbGRyZW49ZTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRoaXMubWVkaXVtJiZ0aGlzLm1lZGl1bS5zaG9ydCYmdGhpcy5tZWRpdW0ubG9uZyl7aWYodC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0uc2hvcnQpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1lZGl1bS5sb25nKSx0aGlzW24uJGV4dHJhXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0uc2hvcnQsaGVpZ2h0OnRoaXMubWVkaXVtLmxvbmd9LCJsYW5kc2NhcGUiPT09dGhpcy5tZWRpdW0ub3JpZW50YXRpb24pe3ZhciByPXQud2lkdGg7dC53aWR0aD10LmhlaWdodCx0LmhlaWdodD1yLHRoaXNbbi4kZXh0cmFdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5sb25nLGhlaWdodDp0aGlzLm1lZGl1bS5zaG9ydH19fWVsc2UoMCxjLndhcm4pKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtyZXR1cm4gdGhpc1tuLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiYXJlYSIsImRyYXciLCJmaWVsZCIsInN1YmZvcm0iXSksaW5jbHVkZTohMH0pLHRoaXNbbi4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6bmV3IFNldChbImNvbnRlbnRBcmVhIl0pLGluY2x1ZGU6ITB9KSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjplLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUGFnZSJdLGlkOnRoaXNbbi4kdWlkXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1dKSxyfShuLlhGQU9iamVjdCkscHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInBhZ2VTZXQiLCEwKSkuZHVwbGV4SW1wb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZXh0cmFzPW51bGwsYS5vY2N1cj1udWxsLGEucGFnZUFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYWdlU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PU8odGhpcy5wYWdlQXJlYS5jaGlsZHJlbik7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWVbbi4kY2xlYW5QYWdlXSgpfWNhdGNoKGUpe3QuZShlKX1maW5hbGx5e3QuZigpfXZhciByLGE9Tyh0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOylyLnZhbHVlW24uJGNsZWFuUGFnZV0oKX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX19fSx7a2V5Om4uJGlzVXNhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4fX0se2tleTpuLiRnZXROZXh0UGFnZSx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbbi4kZXh0cmFdfHwodGhpc1tuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4Oi0xLHBhZ2VTZXRJbmRleDotMX0pLCJvcmRlcmVkT2NjdXJyZW5jZSI9PT10aGlzLnJlbGF0aW9uKXtpZih0aGlzW24uJGV4dHJhXS5wYWdlSW5kZXgrMTx0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4Kz0xLHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4XVtuLiRnZXROZXh0UGFnZV0oKTtpZih0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrMTx0aGlzLnBhZ2VTZXQuY2hpbGRyZW4ubGVuZ3RoKXJldHVybiB0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrPTEsdGhpcy5wYWdlU2V0LmNoaWxkcmVuW3RoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleF1bbi4kZ2V0TmV4dFBhZ2VdKCk7aWYodGhpc1tuLiRpc1VzYWJsZV0oKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTEsdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4PS0xLHRoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleD0tMSx0aGlzW24uJGdldE5leHRQYWdlXSgpO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlIGluc3RhbmNlb2Ygcj9lW24uJGdldE5leHRQYWdlXSgpOih0aGlzW24uJGNsZWFuUGFnZV0oKSx0aGlzW24uJGdldE5leHRQYWdlXSgpKX12YXIgdD10aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFnZU51bWJlcixhPXQlMj09MD8iZXZlbiI6Im9kZCIsaT0wPT09dD8iZmlyc3QiOiJyZXN0IixvPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub2RkT3JFdmVuPT09YSYmZS5wYWdlUG9zaXRpb249PT1pfSkpO3JldHVybiBvfHwoKG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiZlLnBhZ2VQb3NpdGlvbj09PWl9KSkpP286KG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiYiYW55Ij09PWUucGFnZVBvc2l0aW9ufSkpKXx8dGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxndD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFyYSIsITApKS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4ubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5saW5lSGVpZ2h0LCIwcHQiKToiIixuLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luTGVmdCwiMHB0Iik6IiIsbi5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiLG4ub3JwaGFucz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnByZXNlcnZlPWUucHJlc2VydmV8fCIiLG4ucmFkaXhPZmZzZXQ9ZS5yYWRpeE9mZnNldD8oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl4T2Zmc2V0LCIwcHQiKToiIixuLnNwYWNlQWJvdmU9ZS5zcGFjZUFib3ZlPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuc3BhY2VBYm92ZSwiMHB0Iik6IiIsbi5zcGFjZUJlbG93PWUuc3BhY2VCZWxvdz8oMCxzLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQmVsb3csIjBwdCIpOiIiLG4udGFiRGVmYXVsdD1lLnRhYkRlZmF1bHQ/KDAscy5nZXRNZWFzdXJlbWVudCkobi50YWJEZWZhdWx0KToiIixuLnRhYlN0b3BzPShlLnRhYlN0b3BzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMj09MT8oMCxzLmdldE1lYXN1cmVtZW50KShlKTplfSkpLG4udGV4dEluZGVudD1lLnRleHRJbmRlbnQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS50ZXh0SW5kZW50LCIwcHQiKToiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52QWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudkFsaWduLFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLG4ud2lkb3dzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS53aWRvd3MsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5oeXBoZW5hdGlvbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9KDAsby50b1N0eWxlKSh0aGlzLCJoQWxpZ24iKTtyZXR1cm4iIiE9PXRoaXMubWFyZ2luTGVmdCYmKGUucGFkZGluZ0xlZnQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luTGVmdCkpLCIiIT09dGhpcy5tYXJnaW5SaWdodCYmKGUucGFkZGluZ2lnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luUmlnaHQpKSwiIiE9PXRoaXMuc3BhY2VBYm92ZSYmKGUucGFkZGluZ1RvcD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUFib3ZlKSksIiIhPT10aGlzLnNwYWNlQmVsb3cmJihlLnBhZGRpbmdCb3R0b209KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VCZWxvdykpLCIiIT09dGhpcy50ZXh0SW5kZW50JiYoZS50ZXh0SW5kZW50PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRleHRJbmRlbnQpLCgwLG8uZml4VGV4dEluZGVudCkoZSkpLHRoaXMubGluZUhlaWdodD4wJiYoZS5saW5lSGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxpbmVIZWlnaHQpKSwiIiE9PXRoaXMudGFiRGVmYXVsdCYmKGUudGFiU2l6ZT0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KSksdGhpcy50YWJTdG9wcy5sZW5ndGgsdGhpcy5oeXBoZW5hdGF0aW9uJiZPYmplY3QuYXNzaWduKGUsdGhpcy5oeXBoZW5hdGF0aW9uW24uJHRvU3R5bGVdKCkpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFzc3dvcmRFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx5dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGF0dGVybiIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbImNyb3NzSGF0Y2giLCJjcm9zc0RpYWdvbmFsIiwiZGlhZ29uYWxMZWZ0IiwiZGlhZ29uYWxSaWdodCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lP2Vbbi4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7dmFyIHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiLHI9InJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLGE9IiIuY29uY2F0KGUsIiwiKS5jb25jYXQoZSwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCgxMCwicHgiKTtzd2l0Y2godGhpcy50eXBlKXtjYXNlImNyb3NzSGF0Y2giOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpICIpLmNvbmNhdChyLCIodG8gcmlnaHQsIikuY29uY2F0KGEsIikiKTtjYXNlImNyb3NzRGlhZ29uYWwiOnJldHVybiIiLmNvbmNhdChyLCIoNDVkZWcsIikuY29uY2F0KGEsIikgIikuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImRpYWdvbmFsTGVmdCI6cmV0dXJuIiIuY29uY2F0KHIsIig0NWRlZywiKS5jb25jYXQoYSwiKSIpO2Nhc2UiZGlhZ29uYWxSaWdodCI6cmV0dXJuIiIuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImhvcml6b250YWwiOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpIik7Y2FzZSJ2ZXJ0aWNhbCI6cmV0dXJuIiIuY29uY2F0KHIsIih0byByaWdodCwiKS5jb25jYXQoYSwiKSIpfXJldHVybiIifX1dKSxyfShuLlhGQU9iamVjdCksbXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInBpY3R1cmUiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxidD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicHJvdG8iLCEwKSkuYXBwZWFyYW5jZUZpbHRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyYz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5hc3Npc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5iYXJjb2RlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYmluZEl0ZW1zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYm9va2VuZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5ib3JkZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVhaz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJ1dHRvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhbGN1bGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhcHRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jZXJ0aWZpY2F0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNlcnRpZmljYXRlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNoZWNrQnV0dG9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY2hvaWNlTGlzdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbG9yPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY29tYj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb250ZW50QXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvcm5lcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWZhdWx0VWk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZXNjPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNvZGluZ3M9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0aW9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdGlvbk1ldGhvZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmVuY3J5cHRpb25NZXRob2RzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4ZWN1dGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leHRyYXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWVsZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpbGw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWx0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZvbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mb3JtYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5oYW5kbGVyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaHlwaGVuYXRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pc3N1ZXJzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5rZWVwPW5ldyBuLlhGQU9iamVjdEFycmF5LGEua2V5VXNhZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5saW5lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubGluZWFyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubG9ja0RvY3VtZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEubWFuaWZlc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tYXJnaW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZHA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZWRpdW09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZXNzYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubnVtZXJpY0VkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vY2N1cj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZHM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vdmVyZmxvdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhZ2VBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGFnZVNldD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhcmE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXNzd29yZEVkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXR0ZXJuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGljdHVyZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJhZGlhbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbnM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWN0YW5nbGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWY9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zY3JpcHQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmF0dXJlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmluZz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNvbGlkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3BlYWs9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdGlwcGxlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE5zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3VibWl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRleHRFZGl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWVTdGFtcD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRvb2xUaXA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnVpPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudmFsaWRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS52YWx1ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnZhcmlhYmxlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksd3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInJhZGlhbCIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvRWRnZSIsInRvQ2VudGVyIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbbi4kdG9TdHlsZV0oKToiIzAwMDAwMCIscj0idG9FZGdlIj09PXRoaXMudHlwZT8iIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0KToiIi5jb25jYXQodCwiLCIpLmNvbmNhdChlKTtyZXR1cm4icmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCBjZW50ZXIsICIuY29uY2F0KHIsIikiKX19XSkscn0obi5YRkFPYmplY3QpLGt0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWFzb24iKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxTdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVhc29ucyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEucmVhc29uPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx4dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVjdGFuZ2xlIiwhMCkpLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5jb3JuZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXkoNCksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZmlsbD1udWxsLGF9cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuZWRnZS5jaGlsZHJlblswXTpuZXcgQWUoe30pLHQ9ZVtuLiR0b1N0eWxlXSgpLHI9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZT9PYmplY3QuYXNzaWduKHIsdGhpcy5maWxsW24uJHRvU3R5bGVdKCkpOnIuZmlsbD0idHJhbnNwYXJlbnQiLHIuc3Ryb2tlV2lkdGg9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCksci5zdHJva2U9dC5jb2xvcjt2YXIgYT0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyBnZSh7fSkpW24uJHRvU3R5bGVdKCksaT17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6InJlY3QiLGF0dHJpYnV0ZXM6e3htbG5zOlAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIseDowLHk6MCxyeDphLnJhZGl1cyxyeTphLnJhZGl1cyxzdHlsZTpyfX1dLGF0dHJpYnV0ZXM6e3htbG5zOlAsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fTtyZXR1cm4gTSh0aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCkpP3MuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2ldfSk6KGkuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuSFRNTFJlc3VsdC5zdWNjZXNzKGkpKX19XSkscn0obi5YRkFPYmplY3QpLE90PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWYiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxBdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2NyaXB0IikpLmJpbmRpbmc9ZS5iaW5kaW5nfHwiIixuLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxDdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2V0UHJvcGVydHkiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ucmVmPWUucmVmfHwiIixuLnRhcmdldD1lLnRhcmdldHx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuU2V0UHJvcGVydHk9Q3Q7dmFyIEZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduRGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJzaWduIiwiY2xlYXIiLCJ2ZXJpZnkiXSksbi5yZWY9ZS5yZWZ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5maWx0ZXI9bnVsbCxuLm1hbmlmZXN0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFB0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduYXR1cmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJQREYxLjMiLCJQREYxLjYiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLmZpbHRlcj1udWxsLG4ubWFuaWZlc3Q9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxUdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic2lnbmluZyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzb2xpZCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT9lW24uJHRvU3R5bGVdKCk6IiNGRkZGRkYifX1dKSxyfShuLlhGQU9iamVjdCksRXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInNwZWFrIikpLmRpc2FibGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRpc2FibGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmlvcml0eT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmlvcml0eSxbImN1c3RvbSIsImNhcHRpb24iLCJuYW1lIiwidG9vbFRpcCJdKSxuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxqdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3RpcHBsZSIsITApKS5pZD1lLmlkfHwiIixuLnJhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJhdGUsZGVmYXVsdFZhbHVlOjUwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0xMDB9fSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmF0ZS8xMDA7cmV0dXJuIGMuVXRpbC5tYWtlSGV4Q29sb3IoTWF0aC5yb3VuZChlLnZhbHVlLnIqKDEtdCkrdGhpcy52YWx1ZS5yKnQpLE1hdGgucm91bmQoZS52YWx1ZS5nKigxLXQpK3RoaXMudmFsdWUuZyp0KSxNYXRoLnJvdW5kKGUudmFsdWUuYiooMS10KSt0aGlzLnZhbHVlLmIqdCkpfX1dKSxyfShuLlhGQU9iamVjdCksTXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInN1YmZvcm0iLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWxsb3dNYWNybz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dNYWNybyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiItMSI9PT1lPy0xOigwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpfSkpLGEuaD1lLmg/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5oKToiIixhLmhBbGlnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pLGEuaWQ9ZS5pZHx8IiIsYS5sYXlvdXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKSxhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5tZXJnZU1vZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWVyZ2VNb2RlLFsiY29uc3VtZURhdGEiLCJtYXRjaFRlbXBsYXRlIl0pLGEubWluSD0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpLGEubWluVz0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpLGEubmFtZT1lLm5hbWV8fCIiLGEucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksYS5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxhLnJlc3RvcmVTdGF0ZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5yZXN0b3JlU3RhdGUsWyJtYW51YWwiLCJhdXRvIl0pLGEuc2NvcGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NvcGUsWyJuYW1lIiwibm9uZSJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5iaW5kPW51bGwsYS5ib29rZW5kPW51bGwsYS5ib3JkZXI9bnVsbCxhLmJyZWFrPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5vY2N1cj1udWxsLGEub3ZlcmZsb3c9bnVsbCxhLnBhZ2VTZXQ9bnVsbCxhLnBhcmE9bnVsbCxhLnRyYXZlcnNhbD1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhcmlhYmxlcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kcmF3PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucHJvdG89bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJmb3JtU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRnZXRTdWJmb3JtUGFyZW50LHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBfdD9lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk6ZX19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRpc1RoZXJlTW9yZVdpZHRoLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJnRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT4wfHx0aGlzW24uJGdldFBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpfX0se2tleTpuLiRnZXRDb250YWluZWRDaGlsZHJlbix2YWx1ZTpTKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChMKHRoaXMpLCJ0MCIsMSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKX0se2tleTpuLiRmbHVzaEhUTUwsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9fSx7a2V5Om4uJGFkZEhUTUwsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxpLmFkZEhUTUwpKHRoaXMsZSx0KX19LHtrZXk6bi4kZ2V0QXZhaWxhYmxlU3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmdldEF2YWlsYWJsZVNwYWNlKSh0aGlzKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iil8fHRoaXMua2VlcCYmIm5vbmUiIT09dGhpcy5rZWVwLmludGFjdD8odGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMSwhMSk6IShlLmxheW91dCYmZS5sYXlvdXQuZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtuLiRleHRyYV0ubnVtYmVySW5MaW5lfHwodGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMCwwKSkpfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSx0aGlzLmJyZWFrKXtpZigiYXV0byIhPT10aGlzLmJyZWFrLmFmdGVyfHwiIiE9PXRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQpe3ZhciB0PW5ldyByZSh7dGFyZ2V0VHlwZTp0aGlzLmJyZWFrLmFmdGVyLHRhcmdldDp0aGlzLmJyZWFrLmFmdGVyVGFyZ2V0LHN0YXJ0TmV3OnRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKX0pO3Rbbi4kZ2xvYmFsRGF0YV09dGhpc1tuLiRnbG9iYWxEYXRhXSx0aGlzW24uJGFwcGVuZENoaWxkXSh0KSx0aGlzLmJyZWFrQWZ0ZXIucHVzaCh0KX1pZigiYXV0byIhPT10aGlzLmJyZWFrLmJlZm9yZXx8IiIhPT10aGlzLmJyZWFrLmJlZm9yZVRhcmdldCl7dmFyIHI9bmV3IG5lKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtyW24uJGdsb2JhbERhdGFdPXRoaXNbbi4kZ2xvYmFsRGF0YV0sdGhpc1tuLiRhcHBlbmRDaGlsZF0ociksdGhpcy5icmVha0JlZm9yZS5wdXNoKHIpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7dmFyIGE9bmV3IGh0KHt0YXJnZXQ6dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCxsZWFkZXI6dGhpcy5icmVhay5vdmVyZmxvd0xlYWRlcix0cmFpbGVyOnRoaXMuYnJlYWsub3ZlcmZsb3dUcmFpbGVyfSk7YVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKGEpLHRoaXMub3ZlcmZsb3cucHVzaChhKX10aGlzW24uJHJlbW92ZUNoaWxkXSh0aGlzLmJyZWFrKSx0aGlzLmJyZWFrPW51bGx9aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO2lmKCh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD4xfHx0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPjEpJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIGJyZWFrQmVmb3JlIG9yIGJyZWFrQWZ0ZXIgaW4gc3ViZm9ybXM6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgdT10aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO2lmKEgodSkpcmV0dXJuIHMuSFRNTFJlc3VsdC5icmVha05vZGUodSl9aWYodGhpc1tuLiRleHRyYV0mJnRoaXNbbi4kZXh0cmFdLmFmdGVyQnJlYWtBZnRlcilyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZOygwLG8uZml4RGltZW5zaW9ucykodGhpcyk7dmFyIGw9W10sZj17aWQ6dGhpc1tuLiR1aWRdLGNsYXNzOltdfTsoMCxvLnNldEFjY2VzcykodGhpcyxmLmNsYXNzKSx0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPU9iamVjdC5jcmVhdGUobnVsbCkpLE9iamVjdC5hc3NpZ24odGhpc1tuLiRleHRyYV0se2NoaWxkcmVuOmwsbGluZTpudWxsLGF0dHJpYnV0ZXM6ZixhdHRlbXB0OjAsbnVtYmVySW5MaW5lOjAsYXZhaWxhYmxlU3BhY2U6e3dpZHRoOk1hdGgubWluKHRoaXMud3x8MS8wLGUud2lkdGgpLGhlaWdodDpNYXRoLm1pbih0aGlzLmh8fDEvMCxlLmhlaWdodCl9LHdpZHRoOjAsaGVpZ2h0OjAscHJldkhlaWdodDowLGN1cnJlbnRXaWR0aDowfSk7dmFyIGg9dGhpc1tuLiRnZXRUZW1wbGF0ZVJvb3RdKCksZD1oW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUscD10aGlzW24uJGlzU3BsaXR0YWJsZV0oKTtpZihwfHwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIGc9bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZXhjbEdyb3VwIiwiZmllbGQiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciB2PXRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKS5jb2x1bW5XaWR0aHM7QXJyYXkuaXNBcnJheSh2KSYmdi5sZW5ndGg+MCYmKHRoaXNbbi4kZXh0cmFdLmNvbHVtbldpZHRocz12LHRoaXNbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW49MCl9dmFyIHk9KDAsby50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxtPVsieGZhU3ViZm9ybSJdLGI9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aWYoYiYmbS5wdXNoKGIpLGYuc3R5bGU9eSxmLmNsYXNzPW0sdGhpcy5uYW1lJiYoZi54ZmFOYW1lPXRoaXMubmFtZSksdGhpcy5vdmVyZmxvdyl7dmFyIHc9dGhpcy5vdmVyZmxvd1tuLiRnZXRFeHRyYV0oKTt3LmFkZExlYWRlciYmKHcuYWRkTGVhZGVyPSExLHEodGhpcyx3LmxlYWRlcixlKSl9dGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGs9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsUz1rPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PFM7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtrJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgeD10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmcsaW5jbHVkZTohMH0pO2lmKHguc3VjY2VzcylicmVhaztpZih4LmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHg7aWYoayYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiFoW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9UzticmVha319aWYodGhpc1tuLiRwb3BQYXJhXSgpLHB8fFgodGhpcyksaFtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWQsdGhpc1tuLiRleHRyYV0uYXR0ZW1wdD09PVMpcmV0dXJuIHRoaXMub3ZlcmZsb3cmJih0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPXRoaXMub3ZlcmZsb3cpLHB8fGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtpZih0aGlzLm92ZXJmbG93KXt2YXIgTz10aGlzLm92ZXJmbG93W24uJGdldEV4dHJhXSgpO08uYWRkVHJhaWxlciYmKE8uYWRkVHJhaWxlcj0hMSxxKHRoaXMsTy50cmFpbGVyLGUpKX12YXIgQT0wLEM9MDt0aGlzLm1hcmdpbiYmKEE9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsQz10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIEY9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0ud2lkdGgrQSx0aGlzLnd8fDApLFA9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0uaGVpZ2h0K0MsdGhpcy5ofHwwKSxUPVt0aGlzLngsdGhpcy55LEYsUF07aWYoIiI9PT10aGlzLncmJih5LndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShGKSksIiI9PT10aGlzLmgmJih5LmhlaWdodD0oMCxvLm1lYXN1cmVUb1N0cmluZykoUCkpLCgiMHB4Ij09PXkud2lkdGh8fCIwcHgiPT09eS5oZWlnaHQpJiYwPT09bC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgST17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmYsY2hpbGRyZW46bH07RCh0aGlzLGYpO3ZhciBFPXMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxJKSxUKTtpZih0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgaj10aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW5bMF07aWYoSChqKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyPUUscy5IVE1MUmVzdWx0LmJyZWFrTm9kZShqKX1yZXR1cm4gZGVsZXRlIHRoaXNbbi4kZXh0cmFdLEV9fV0pLHJ9KG4uWEZBT2JqZWN0KSxfdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViZm9ybVNldCIsITApKS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2tlbmQ9bnVsbCxhLmJyZWFrPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm9jY3VyPW51bGwsYS5vdmVyZmxvdz1udWxsLGEuYnJlYWtBZnRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQmVmb3JlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGdldFN1YmZvcm1QYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7IShlIGluc3RhbmNlb2YgTXQpOyllPWVbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlfX0se2tleTpuLiRpc0JpbmRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fV0pLHJ9KG4uWEZBT2JqZWN0KSxMdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3ViamVjdEROIikpLmRlbGltaXRlcj1lLmRlbGltaXRlcnx8IiwiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09bmV3IE1hcCh0aGlzW24uJGNvbnRlbnRdLnNwbGl0KHRoaXMuZGVsaW1pdGVyKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybihlPWUuc3BsaXQoIj0iLDIpKVswXT1lWzBdLnRyaW0oKSxlfSkpKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxSdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViamVjdEROcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuc3ViamVjdEROPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxOdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3VibWl0IiwhMCkpLmVtYmVkUERGPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5lbWJlZFBERixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5mb3JtYXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsieGRwIiwiZm9ybWRhdGEiLCJwZGYiLCJ1cmxlbmNvZGVkIiwieGZkIiwieG1sIl0pLGEuaWQ9ZS5pZHx8IiIsYS50YXJnZXQ9ZS50YXJnZXR8fCIiLGEudGV4dEVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS50ZXh0RW5jb2Rpbmc/ZS50ZXh0RW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS54ZHBDb250ZW50PWUueGRwQ29udGVudHx8IiIsYS5lbmNyeXB0PW51bGwsYS5lbmNyeXB0RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwidGVtcGxhdGUiLCEwKSkuYmFzZVByb2ZpbGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYmFzZVByb2ZpbGUsWyJmdWxsIiwiaW50ZXJhY3RpdmVGb3JtcyJdKSxhLmV4dHJhcz1udWxsLGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXswPT09dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCYmKDAsYy53YXJuKSgiWEZBIC0gTm8gc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZS4iKSx0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0yJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXNbbi4kdGFiSW5kZXhdPTVlM319LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNlYXJjaE5vZGUsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdGFydHNXaXRoKCIjIik/W3RoaXNbbi4kaWRzXS5nZXQoZS5zbGljZSgxKSldOigwLGYuc2VhcmNoTm9kZSkodGhpcyx0LGUsITAsITApfX0se2tleTpuLiR0b1BhZ2VzLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixhLGksbyx1LGwsZixkLHAsZyx2LHksbSxiLHcsaz10aGlzO3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfSkpO2Nhc2UgMjp0aGlzW24uJGV4dHJhXT17b3ZlcmZsb3dOb2RlOm51bGwsZmlyc3RVbnNwbGl0dGFibGU6bnVsbCxjdXJyZW50Q29udGVudEFyZWE6bnVsbCxjdXJyZW50UGFnZUFyZWE6bnVsbCxub0xheW91dEZhaWx1cmU6ITEscGFnZU51bWJlcjoxLHBhZ2VQb3NpdGlvbjoiZmlyc3QiLG9kZE9yRXZlbjoib2RkIixibGFua09yTm90Qmxhbms6Im5vbkJsYW5rIixwYXJhU3RhY2s6W119LCh0PXRoaXMuc3ViZm9ybS5jaGlsZHJlblswXSkucGFnZVNldFtuLiRjbGVhblBhZ2VdKCkscj10LnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW4sYT17bmFtZToiZGl2IixjaGlsZHJlbjpbXX0saT1udWxsLG89bnVsbCx1PW51bGwsdC5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTE/KG89dC5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0xJiZ0LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xPyhvPXQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LmJyZWFrJiZ0LmJyZWFrLmJlZm9yZVRhcmdldD8obz10LmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpOnQuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJnQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhayYmdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLmJlZm9yZVRhcmdldCYmKG89dC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpLG8mJihsPXRoaXNbbi4kc2VhcmNoTm9kZV0odSxvW24uJGdldFBhcmVudF0oKSkpaW5zdGFuY2VvZiBkdCYmKGk9bCxvW24uJGV4dHJhXT17fSksaXx8KGk9clswXSksaVtuLiRleHRyYV09e251bWJlck9mVXNlOjF9LChmPWlbbi4kZ2V0UGFyZW50XSgpKVtuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4OmYucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKSxwYWdlU2V0SW5kZXg6MH0scD1udWxsLGc9bnVsbCx2PSEwLHk9MCxtPTAsYj1TKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciByLG8scyx1LGwsZixoLGIsdyx4LE8sQSxDLEYsUDtyZXR1cm4gUygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHYpe2UubmV4dD03O2JyZWFrfWlmKGEuY2hpbGRyZW4ucG9wKCksMyE9Kyt5KXtlLm5leHQ9NTticmVha31yZXR1cm4oMCxjLndhcm4pKCJYRkEgLSBTb21ldGhpbmcgZ29lcyB3cm9uZzogcGxlYXNlIGZpbGUgYSBidWcuIiksZS5hYnJ1cHQoInJldHVybiIse3Y6YX0pO2Nhc2UgNTplLm5leHQ9ODticmVhaztjYXNlIDc6eT0wO2Nhc2UgODpkPW51bGwsa1tuLiRleHRyYV0uY3VycmVudFBhZ2VBcmVhPWkscj1pW24uJHRvSFRNTF0oKS5odG1sLGEuY2hpbGRyZW4ucHVzaChyKSxwJiYoa1tuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwLHIuY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oaVtuLiRleHRyYV0uc3BhY2UpLmh0bWwpLHA9bnVsbCksZyYmKGtbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCxyLmNoaWxkcmVuLnB1c2goZ1tuLiR0b0hUTUxdKGlbbi4kZXh0cmFdLnNwYWNlKS5odG1sKSxnPW51bGwpLG89aS5jb250ZW50QXJlYS5jaGlsZHJlbixzPXIuY2hpbGRyZW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKCJ4ZmFDb250ZW50YXJlYSIpfSkpLHY9ITEsa1tuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbCxrW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEsdT1mdW5jdGlvbihlKXt2YXIgcj10W24uJGZsdXNoSFRNTF0oKTtyJiYodj12fHxyLmNoaWxkcmVuJiYwIT09ci5jaGlsZHJlbi5sZW5ndGgsc1tlXS5jaGlsZHJlbi5wdXNoKHIpKX0sbD1tLGY9by5sZW5ndGg7Y2FzZSAyMTppZighKGw8Zikpe2UubmV4dD01NjticmVha31pZihoPWtbbi4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYT1vW2xdLGI9e3dpZHRoOmgudyxoZWlnaHQ6aC5ofSxtPTAscCYmKHNbbF0uY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oYikuaHRtbCkscD1udWxsKSxnJiYoc1tsXS5jaGlsZHJlbi5wdXNoKGdbbi4kdG9IVE1MXShiKS5odG1sKSxnPW51bGwpLCEodz10W24uJHRvSFRNTF0oYikpLnN1Y2Nlc3Mpe2UubmV4dD0zMTticmVha31yZXR1cm4gdy5odG1sPyh2PXZ8fHcuaHRtbC5jaGlsZHJlbiYmMCE9PXcuaHRtbC5jaGlsZHJlbi5sZW5ndGgsc1tsXS5jaGlsZHJlbi5wdXNoKHcuaHRtbCkpOiF2JiZhLmNoaWxkcmVuLmxlbmd0aD4xJiZhLmNoaWxkcmVuLnBvcCgpLGUuYWJydXB0KCJyZXR1cm4iLHt2OmF9KTtjYXNlIDMxOmlmKCF3LmlzQnJlYWsoKSl7ZS5uZXh0PTQwO2JyZWFrfWlmKHg9dy5icmVha05vZGUsdShsKSwiYXV0byIhPT14LnRhcmdldFR5cGUpe2UubmV4dD0zNjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw1Myk7Y2FzZSAzNjpyZXR1cm4geC5sZWFkZXImJihwPShwPWtbbi4kc2VhcmNoTm9kZV0oeC5sZWFkZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9wWzBdOm51bGwpLHgudHJhaWxlciYmKGc9KGc9a1tuLiRzZWFyY2hOb2RlXSh4LnRyYWlsZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9nWzBdOm51bGwpLCJwYWdlQXJlYSI9PT14LnRhcmdldFR5cGU/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LGw9MS8wKTp4W24uJGV4dHJhXS50YXJnZXQ/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LG09eFtuLiRleHRyYV0uaW5kZXgrMSxsPTEvMCk6bD14W24uJGV4dHJhXS5pbmRleCxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDQwOmlmKCFrW24uJGV4dHJhXS5vdmVyZmxvd05vZGUpe2UubmV4dD01MjticmVha31yZXR1cm4gTz1rW24uJGV4dHJhXS5vdmVyZmxvd05vZGUsa1tuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPW51bGwsQT1PW24uJGdldEV4dHJhXSgpLEM9QS50YXJnZXQsQS5hZGRMZWFkZXI9bnVsbCE9PUEubGVhZGVyLEEuYWRkVHJhaWxlcj1udWxsIT09QS50cmFpbGVyLHUobCksRj1sLGw9MS8wLEMgaW5zdGFuY2VvZiBkdD9kPUM6QyBpbnN0YW5jZW9mIHBlJiYoLTEhPT0oUD1vLmluZGV4T2YoQykpP1A+Rj9sPVAtMTptPVA6KGQ9Q1tuLiRnZXRQYXJlbnRdKCksbT1kLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoQykpKSxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDUyOnUobCk7Y2FzZSA1MzpsKyssZS5uZXh0PTIxO2JyZWFrO2Nhc2UgNTY6cmV0dXJuIGtbbi4kZXh0cmFdLnBhZ2VOdW1iZXIrPTEsZCYmKGRbbi4kaXNVc2FibGVdKCk/ZFtuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTE6ZD1udWxsKSxpPWR8fGlbbi4kZ2V0TmV4dFBhZ2VdKCksZS5uZXh0PTYxLG51bGw7Y2FzZSA2MTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpO2Nhc2UgMjI6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChiKCksInQwIiwyNCk7Y2FzZSAyNDppZigib2JqZWN0IiE9PWgodz1lLnQwKSl7ZS5uZXh0PTI3O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix3LnYpO2Nhc2UgMjc6ZS5uZXh0PTIyO2JyZWFrO2Nhc2UgMjk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfV0pLHJ9KG4uWEZBT2JqZWN0KTt0LlRlbXBsYXRlPUR0O3ZhciBCdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dCIpKS5pZD1lLmlkfHwiIixuLm1heENoYXJzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXhDaGFycyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRhY2NlcHRXaGl0ZXNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/KHRoaXNbbi4kY29udGVudF09ZSwhMCk6KCgwLGMud2FybikoIlhGQSAtIEludmFsaWQgY29udGVudCBpbiBUZXh0OiAiLmNvbmNhdChlW24uJG5vZGVOYW1lXSwiLiIpKSwhMSl9fSx7a2V5Om4uJG9uVGV4dCx2YWx1ZTpmdW5jdGlvbihlKXt0aGlzW24uJGNvbnRlbnRdaW5zdGFuY2VvZiBuLlhGQU9iamVjdHx8ZChrKHIucHJvdG90eXBlKSxuLiRvblRleHQsdGhpcykuY2FsbCh0aGlzLGUpfX0se2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpeyJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSYmKHRoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS5yZXBsYWNlKC9cclxuL2csIlxuIikpfX0se2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI5XHUyMDI4XG5dLykucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0JiZlLnB1c2godCksZX0pLFtdKS5qb2luKCJcbiIpOnRoaXNbbi4kY29udGVudF1bbi4kdGV4dF0oKX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSl7dmFyIHQ9VSh0aGlzW24uJGNvbnRlbnRdKS5odG1sO3JldHVybiB0aGlzW24uJGNvbnRlbnRdLmluY2x1ZGVzKCJcdTIwMjkiKT8odC5uYW1lPSJkaXYiLHQuY2hpbGRyZW49W10sdGhpc1tuLiRjb250ZW50XS5zcGxpdCgiXHUyMDI5IikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvW1x1MjAyOFxuXS8pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSksZX0pLFtdKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNoaWxkcmVuLnB1c2goe25hbWU6InAiLGNoaWxkcmVuOmV9KX0pKSk6L1tcdTIwMjhcbl0vLnRlc3QodGhpc1tuLiRjb250ZW50XSkmJih0Lm5hbWU9ImRpdiIsdC5jaGlsZHJlbj1bXSx0aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI4XG5dLykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jaGlsZHJlbi5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTplfSx7bmFtZToiYnIifSl9KSkpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfXJldHVybiB0aGlzW24uJGNvbnRlbnRdW24uJHRvSFRNTF0oZSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCk7dC5UZXh0PUJ0O3ZhciBVdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dEVkaXQiLCEwKSkuYWxsb3dSaWNoVGV4dD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5oU2Nyb2xsUG9saWN5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSksbi5pZD1lLmlkfHwiIixuLm11bHRpTGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubXVsdGlMaW5lLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV8fDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnZTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudlNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIiksYT10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPWEgaW5zdGFuY2VvZiBPZT8xOjApLHQ9MT09PXRoaXMubXVsdGlMaW5lP3tuYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlczp7ZGF0YUlkOmFbbi4kZGF0YV0mJmFbbi4kZGF0YV1bbi4kdWlkXXx8YVtuLiR1aWRdLGZpZWxkSWQ6YVtuLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6ciwiYXJpYS1sYWJlbCI6QihhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTp7bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGRhdGFJZDphW24uJGRhdGFdJiZhW24uJGRhdGFdW24uJHVpZF18fGFbbi4kdWlkXSxmaWVsZElkOmFbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnIsImFyaWEtbGFiZWwiOkIoYSksImFyaWEtcmVxdWlyZWQiOiExfX0sUihhKSYmKHQuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHQuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt0XX0pfX1dKSxyfShuLlhGQU9iamVjdCksJHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXNbbi4kY29udGVudF0udHJpbSgpO3RoaXNbbi4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFUodGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLlN0cmluZ09iamVjdCksWHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWVTdGFtcCIpKS5pZD1lLmlkfHwiIixuLnNlcnZlcj1lLnNlcnZlcnx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksSHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRvb2xUaXAiKSkuaWQ9ZS5pZHx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCkscXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInRyYXZlcnNhbCIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5leHRyYXM9bnVsbCxhLnRyYXZlcnNlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxHdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidHJhdmVyc2UiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5vcGVyYXRpb249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKSxuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6Im5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZXJhdGlvbn19LHtrZXk6bi4kaXNUcmFuc3BhcmVudCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX1dKSxyfShuLlhGQU9iamVjdCksenQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInVpIiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ucGljdHVyZT1udWxsLG4uYmFyY29kZT1udWxsLG4uYnV0dG9uPW51bGwsbi5jaGVja0J1dHRvbj1udWxsLG4uY2hvaWNlTGlzdD1udWxsLG4uZGF0ZVRpbWVFZGl0PW51bGwsbi5kZWZhdWx0VWk9bnVsbCxuLmltYWdlRWRpdD1udWxsLG4ubnVtZXJpY0VkaXQ9bnVsbCxuLnBhc3N3b3JkRWRpdD1udWxsLG4uc2lnbmF0dXJlPW51bGwsbi50ZXh0RWRpdD1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXNbbi4kZXh0cmFdKXt2YXIgZSx0PU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3IodC5zKCk7IShlPXQubigpKS5kb25lOyl7dmFyIHI9ZS52YWx1ZTtpZigiZXh0cmFzIiE9PXImJiJwaWN0dXJlIiE9PXIpe3ZhciBhPXRoaXNbcl07aWYoYSBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXJldHVybiB0aGlzW24uJGV4dHJhXT1hLGF9fX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX10aGlzW24uJGV4dHJhXT1udWxsfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/dFtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpLFd0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWxpZGF0ZSIsITApKS5mb3JtYXRUZXN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKSxuLmlkPWUuaWR8fCIiLG4ubnVsbFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKSxuLnNjcmlwdFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ubWVzc2FnZT1udWxsLG4ucGljdHVyZT1udWxsLG4uc2NyaXB0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWx1ZSIsITApKS5pZD1lLmlkfHwiIixuLm92ZXJyaWRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5vdmVycmlkZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5hcmM9bnVsbCxuLmJvb2xlYW49bnVsbCxuLmRhdGU9bnVsbCxuLmRhdGVUaW1lPW51bGwsbi5kZWNpbWFsPW51bGwsbi5leERhdGE9bnVsbCxuLmZsb2F0PW51bGwsbi5pbWFnZT1udWxsLG4uaW50ZWdlcj1udWxsLG4ubGluZT1udWxsLG4ucmVjdGFuZ2xlPW51bGwsbi50ZXh0PW51bGwsbi50aW1lPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0UGFyZW50XSgpO2lmKHQgaW5zdGFuY2VvZiBCZSYmdC51aSYmdC51aS5pbWFnZUVkaXQpcmV0dXJuIHRoaXMuaW1hZ2V8fCh0aGlzLmltYWdlPW5ldyBXZSh7fSksdGhpc1tuLiRhcHBlbmRDaGlsZF0odGhpcy5pbWFnZSkpLHZvaWQodGhpcy5pbWFnZVtuLiRjb250ZW50XT1lW24uJGNvbnRlbnRdKTt2YXIgcj1lW24uJG5vZGVOYW1lXTtpZihudWxsPT09dGhpc1tyXSl7dmFyIGEsaT1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBvPWEudmFsdWUscz10aGlzW29dO3MgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCYmKHRoaXNbb109bnVsbCx0aGlzW24uJHJlbW92ZUNoaWxkXShzKSl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXNbZVtuLiRub2RlTmFtZV1dPWUsdGhpc1tuLiRhcHBlbmRDaGlsZF0oZSl9ZWxzZSB0aGlzW3JdW24uJGNvbnRlbnRdPWVbbi4kY29udGVudF19KSl9LHtrZXk6bi4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuZXhEYXRhKXJldHVybiJzdHJpbmciPT10eXBlb2YgdGhpcy5leERhdGFbbi4kY29udGVudF0/dGhpcy5leERhdGFbbi4kY29udGVudF0udHJpbSgpOnRoaXMuZXhEYXRhW24uJGNvbnRlbnRdW24uJHRleHRdKCkudHJpbSgpO3ZhciBlLHQ9TyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KXt2YXIgcj1lLnZhbHVlO2lmKCJpbWFnZSIhPT1yKXt2YXIgYT10aGlzW3JdO2lmKGEgaW5zdGFuY2VvZiBuLlhGQU9iamVjdClyZXR1cm4oYVtuLiRjb250ZW50XXx8IiIpLnRvU3RyaW5nKCkudHJpbSgpfX19Y2F0Y2goZSl7dC5lKGUpfWZpbmFsbHl7dC5mKCl9cmV0dXJuIG51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIGE9dGhpc1t0LnZhbHVlXTtpZihhIGluc3RhbmNlb2Ygbi5YRkFPYmplY3QpcmV0dXJuIGFbbi4kdG9IVE1MXShlKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpO3QuVmFsdWU9VnQ7dmFyIFl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJ2YXJpYWJsZXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW50ZWdlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm1hbmlmZXN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2NyaXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19XSkscn0obi5YRkFPYmplY3QpLEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3kodGhpcyxlKX1yZXR1cm4gdihlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXt2YXIgYT1lW3RdKHIpO3JldHVybiBhW24uJHNldFNldEF0dHJpYnV0ZXNdKHIpLGF9fX0se2tleToiYXBwZWFyYW5jZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHKGUpfX0se2tleToiYXJjIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHooZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFcoZSl9fSx7a2V5OiJhc3Npc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImJhcmNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWShlKX19LHtrZXk6ImJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImJpbmRJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKKGUpfX0se2tleToiYm9va2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiYm9vbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRKGUpfX0se2tleToiYm9yZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiYnJlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJicmVha0FmdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiYnJlYWtCZWZvcmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbmUoZSl9fSx7a2V5OiJidXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYWUoZSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJjYXB0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG9lKGUpfX0se2tleToiY2VydGlmaWNhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgc2UoZSl9fSx7a2V5OiJjZXJ0aWZpY2F0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJjaGVja0J1dHRvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1ZShlKX19LHtrZXk6ImNob2ljZUxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJjb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImNvbWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJjb25uZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGRlKGUpfX0se2tleToiY29udGVudEFyZWEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJjb3JuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ2UoZSl9fSx7a2V5OiJkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZlKGUpfX0se2tleToiZGF0ZVRpbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJkYXRlVGltZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbWUoZSl9fSx7a2V5OiJkZWNpbWFsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGJlKGUpfX0se2tleToiZGVmYXVsdFVpIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdlKGUpfX0se2tleToiZGVzYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBTZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeGUoZSl9fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE9lKGUpfX0se2tleToiZWRnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IENlKGUpfX0se2tleToiZW5jb2RpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZlKGUpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQZShlKX19LHtrZXk6ImVuY3J5cHREYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJZShlKX19LHtrZXk6ImVuY3J5cHRpb25NZXRob2QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRWUoZSl9fSx7a2V5OiJlbmNyeXB0aW9uTWV0aG9kcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6ImV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToiZXhEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF9lKGUpfX0se2tleToiZXhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTGUoZSl9fSx7a2V5OiJleGNsR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJleGVjdXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToiZXh0cmFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToiZmllbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQmUoZSl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToiZmlsdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToiZmxvYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWGUoZSl9fSx7a2V5OiJmb250Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEhlKGUpfX0se2tleToiZm9ybWF0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHFlKGUpfX0se2tleToiaGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHZShlKX19LHtrZXk6Imh5cGhlbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToiaW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgV2UoZSl9fSx7a2V5OiJpbWFnZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVmUoZSl9fSx7a2V5OiJpbnRlZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFllKGUpfX0se2tleToiaXNzdWVycyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBLZShlKX19LHtrZXk6Iml0ZW1zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEplKGUpfX0se2tleToia2VlcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaZShlKX19LHtrZXk6ImtleVVzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFFlKGUpfX0se2tleToibGluZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBldChlKX19LHtrZXk6ImxpbmVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0dChlKX19LHtrZXk6ImxvY2tEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBydChlKX19LHtrZXk6Im1hbmlmZXN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG50KGUpfX0se2tleToibWFyZ2luIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToibWRwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToibWVkaXVtIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG90KGUpfX0se2tleToibWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6Im51bWVyaWNFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToib2NjdXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJvaWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJvaWRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZ0KGUpfX0se2tleToib3ZlcmZsb3ciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaHQoZSl9fSx7a2V5OiJwYWdlQXJlYSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InBhZ2VTZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJwYXJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGd0KGUpfX0se2tleToicGFzc3dvcmRFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZ0KGUpfX0se2tleToicGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5dChlKX19LHtrZXk6InBpY3R1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJwcm90byIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBidChlKX19LHtrZXk6InJhZGlhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3dChlKX19LHtrZXk6InJlYXNvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrdChlKX19LHtrZXk6InJlYXNvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJyZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJyZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgT3QoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQXQoZSl9fSx7a2V5OiJzZXRQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDdChlKX19LHtrZXk6InNpZ25EYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZ0KGUpfX0se2tleToic2lnbmF0dXJlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToic2lnbmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUdChlKX19LHtrZXk6InNvbGlkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToic3BlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRXQoZSl9fSx7a2V5OiJzdGlwcGxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGp0KGUpfX0se2tleToic3ViZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNdChlKX19LHtrZXk6InN1YmZvcm1TZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJzdWJqZWN0RE4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTHQoZSl9fSx7a2V5OiJzdWJqZWN0RE5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToic3VibWl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE50KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ0ZXh0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJ0KGUpfX0se2tleToidGV4dEVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVXQoZSl9fSx7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToidGltZVN0YW1wIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFh0KGUpfX0se2tleToidG9vbFRpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InRyYXZlcnNhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InRyYXZlcnNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEd0KGUpfX0se2tleToidWkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgenQoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19LHtrZXk6InZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFZ0KGUpfX0se2tleToidmFyaWFibGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFl0KGUpfX1dKSxlfSgpO3QuVGVtcGxhdGVOYW1lc3BhY2U9S3R9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hZGRIVE1MPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1lW24uJGV4dHJhXSx1PXMuYXZhaWxhYmxlU3BhY2UsbD1pKHIsNCksZj1sWzBdLGg9bFsxXSxkPWxbMl0scD1sWzNdO3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6cy53aWR0aD1NYXRoLm1heChzLndpZHRoLGYrZCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQsaCtwKSxzLmNoaWxkcmVuLnB1c2godCk7YnJlYWs7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6cy5saW5lJiYxIT09cy5hdHRlbXB0fHwocy5saW5lPWMoZSxbXSkscy5jaGlsZHJlbi5wdXNoKHMubGluZSkscy5udW1iZXJJbkxpbmU9MCkscy5udW1iZXJJbkxpbmUrPTEscy5saW5lLmNoaWxkcmVuLnB1c2godCksMD09PXMuYXR0ZW1wdD8ocy5jdXJyZW50V2lkdGgrPWQscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQscy5wcmV2SGVpZ2h0K3ApKToocy5jdXJyZW50V2lkdGg9ZCxzLnByZXZIZWlnaHQ9cy5oZWlnaHQscy5oZWlnaHQrPXAscy5hdHRlbXB0PTApLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aCxzLmN1cnJlbnRXaWR0aCk7YnJlYWs7Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpzLmNoaWxkcmVuLnB1c2godCkscy53aWR0aCs9ZCxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxwKTt2YXIgZyx2PSgwLGEubWVhc3VyZVRvU3RyaW5nKShzLmhlaWdodCkseT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9byhlKSkpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19KHMuY2hpbGRyZW4pO3RyeXtmb3IoeS5zKCk7IShnPXkubigpKS5kb25lOylnLnZhbHVlLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PXZ9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9YnJlYWs7Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cy53aWR0aD1NYXRoLm1pbih1LndpZHRoLE1hdGgubWF4KHMud2lkdGgsZCkpLHMuaGVpZ2h0Kz1wLHMuY2hpbGRyZW4ucHVzaCh0KX19LHQuY2hlY2tEaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09PWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSlyZXR1cm4hMDtpZigwPT09ZS53fHwwPT09ZS5oKXJldHVybiEwO3ZhciByPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKSxhPXJbbi4kZXh0cmFdJiZyW24uJGV4dHJhXS5hdHRlbXB0fHwwLG89aShmdW5jdGlvbihlKXt2YXIgdCxyLG49IiI9PT1lLnc/TmFOOmUudyxhPSIiPT09ZS5oP05hTjplLmgsaT0wLG89MDtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOmk9bi8yLG89YTticmVhaztjYXNlImJvdHRvbUxlZnQiOmk9MCxvPWE7YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6aT1uLG89YTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6aT1uLzIsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0IjppPTAsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6aT1uLG89YS8yO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjppPW4vMixvPTA7YnJlYWs7Y2FzZSJ0b3BSaWdodCI6aT1uLG89MH1zd2l0Y2goZS5yb3RhdGV8fDApe2Nhc2UgMDp0PS1pLHI9LW87YnJlYWs7Y2FzZSA5MDp0PS1vLHI9aTt2YXIgcz1bYSwtbl07bj1zWzBdLGE9c1sxXTticmVhaztjYXNlIDE4MDp0PWkscj1vO3ZhciBjPVstbiwtYV07bj1jWzBdLGE9Y1sxXTticmVhaztjYXNlIDI3MDp0PW8scj0taTt2YXIgdT1bLWEsbl07bj11WzBdLGE9dVsxXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxuKSxlLnkrcitNYXRoLm1pbigwLGEpLE1hdGguYWJzKG4pLE1hdGguYWJzKGEpXX0oZSksNCkscz1vWzFdLGM9b1syXSx1PW9bM107c3dpdGNoKHIubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWE/ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT8iIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTI6dC53aWR0aD4yOiEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fDA9PT1yW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJnQuaGVpZ2h0PjI6dC53aWR0aD4yKTohIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIj09PWUud3x8TWF0aC5yb3VuZChjLXQud2lkdGgpPD0yfHwhcltuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKSYmdC5oZWlnaHQ+MjtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm4hIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCgiIj09PWUuaHx8ZVtuLiRpc1NwbGl0dGFibGVdKCk/KCIiPT09ZS53fHxNYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fCFyW24uJGlzVGhlcmVNb3JlV2lkdGhdKCkpJiZ0LmhlaWdodD4yOk1hdGgucm91bmQodS10LmhlaWdodCk8PTIpO2Nhc2UicG9zaXRpb24iOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodStzLXQuaGVpZ2h0KTw9Mnx8dStzPmVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWEuaDtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodS10LmhlaWdodCk8PTI7ZGVmYXVsdDpyZXR1cm4hMH19LHQuZmx1c2hIVE1MPWZ1bmN0aW9uKGUpe2lmKCFlW24uJGV4dHJhXSlyZXR1cm4gbnVsbDt2YXIgdD17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmVbbi4kZXh0cmFdLmF0dHJpYnV0ZXMsY2hpbGRyZW46ZVtuLiRleHRyYV0uY2hpbGRyZW59O2lmKGVbbi4kZXh0cmFdLmZhaWxpbmdOb2RlKXt2YXIgcj1lW24uJGV4dHJhXS5mYWlsaW5nTm9kZVtuLiRmbHVzaEhUTUxdKCk7ciYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goYyhlLFtyXSkpOnQuY2hpbGRyZW4ucHVzaChyKSl9cmV0dXJuIDA9PT10LmNoaWxkcmVuLmxlbmd0aD9udWxsOnR9LHQuZ2V0QXZhaWxhYmxlU3BhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuLiRleHRyYV0uYXZhaWxhYmxlU3BhY2Uscj1lLm1hcmdpbj9lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldDowLGE9ZS5tYXJnaW4/ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ6MDtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09ZVtuLiRleHRyYV0uYXR0ZW1wdD97d2lkdGg6dC53aWR0aC1hLWVbbi4kZXh0cmFdLmN1cnJlbnRXaWR0aCxoZWlnaHQ6dC5oZWlnaHQtci1lW24uJGV4dHJhXS5wcmV2SGVpZ2h0fTp7d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm57d2lkdGg6ZVtuLiRleHRyYV0uY29sdW1uV2lkdGhzLnNsaWNlKGVbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSkpLGhlaWdodDp0LmhlaWdodC1hfTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm57d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07ZGVmYXVsdDpyZXR1cm4gdH19O3ZhciBuPXIoMjA2KSxhPXIoMjEzKTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fG8oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe3JldHVybntuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsibHItdGIiPT09ZS5sYXlvdXQ/InhmYUxyIjoieGZhUmwiXX0sY2hpbGRyZW46dH19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29tcHV0ZUJib3g9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhO2lmKCIiIT09ZS53JiYiIiE9PWUuaClhPVtlLngsZS55LGUudyxlLmhdO2Vsc2V7aWYoIXIpcmV0dXJuIG51bGw7dmFyIGk9ZS53O2lmKCIiPT09aSl7aWYoMD09PWUubWF4Vyl7dmFyIG89ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2k9InBvc2l0aW9uIj09PW8ubGF5b3V0JiYiIiE9PW8udz8wOmUubWluV31lbHNlIGk9TWF0aC5taW4oZS5tYXhXLHIud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD11KGkpfXZhciBzPWUuaDtpZigiIj09PXMpe2lmKDA9PT1lLm1heEgpe3ZhciBjPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtzPSJwb3NpdGlvbiI9PT1jLmxheW91dCYmIiIhPT1jLmg/MDplLm1pbkh9ZWxzZSBzPU1hdGgubWluKGUubWF4SCxyLmhlaWdodCk7dC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD11KHMpfWE9W2UueCxlLnksaSxzXX1yZXR1cm4gYX0sdC5jcmVhdGVXcmFwcGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5hdHRyaWJ1dGVzLGE9ci5zdHlsZSxpPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhV3JhcHBlciJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOltdfTtpZihyLmNsYXNzLnB1c2goInhmYVdyYXBwZWQiKSxlLmJvcmRlcil7dmFyIG8scyxjPWUuYm9yZGVyW24uJGV4dHJhXSx1PWMud2lkdGhzLGw9Yy5pbnNldHMsZj1sWzBdLGQ9bFszXSxwPWxbMF0rbFsyXSxnPWxbMV0rbFszXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpmLT11WzBdLzIsZC09dVszXS8yLG89ImNhbGMoMTAwJSArICIuY29uY2F0KCh1WzFdK3VbM10pLzItZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQoKHVbMF0rdVsyXSkvMi1wLCJweCkiKTticmVhaztjYXNlImxlZnQiOmYtPXVbMF0sZC09dVszXSxvPSJjYWxjKDEwMCUgKyAiLmNvbmNhdCh1WzFdK3VbM10tZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQodVswXSt1WzJdLXAsInB4KSIpO2JyZWFrO2Nhc2UicmlnaHQiOm89Zz8iY2FsYygxMDAlIC0gIi5jb25jYXQoZywicHgpIik6IjEwMCUiLHM9cD8iY2FsYygxMDAlIC0gIi5jb25jYXQocCwicHgpIik6IjEwMCUifXZhciB2PVsieGZhQm9yZGVyIl07aChlLmJvcmRlcikmJnYucHVzaCgieGZhUHJpbnRPbmx5Iik7Zm9yKHZhciB5PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOnYsc3R5bGU6e3RvcDoiIi5jb25jYXQoZiwicHgiKSxsZWZ0OiIiLmNvbmNhdChkLCJweCIpLHdpZHRoOm8saGVpZ2h0OnN9fSxjaGlsZHJlbjpbXX0sbT0wLGI9WyJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyU3R5bGUiXTttPGIubGVuZ3RoO20rKyl7dmFyIHc9YlttXTt2b2lkIDAhPT1hW3ddJiYoeS5hdHRyaWJ1dGVzLnN0eWxlW3ddPWFbd10sZGVsZXRlIGFbd10pfWkuY2hpbGRyZW4ucHVzaCh5LHQpfWVsc2UgaS5jaGlsZHJlbi5wdXNoKHQpO2Zvcih2YXIgaz0wLFM9WyJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENsaXAiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtT3JpZ2luIiwidmlzaWJpbGl0eSJdO2s8Uy5sZW5ndGg7aysrKXt2YXIgeD1TW2tdO3ZvaWQgMCE9PWFbeF0mJihpLmF0dHJpYnV0ZXMuc3R5bGVbeF09YVt4XSxkZWxldGUgYVt4XSl9cmV0dXJuImFic29sdXRlIj09PWEucG9zaXRpb24/aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI6aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZGVsZXRlIGEucG9zaXRpb24sYS5hbGlnblNlbGYmJihpLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPWEuYWxpZ25TZWxmLGRlbGV0ZSBhLmFsaWduU2VsZiksaX0sdC5maXhEaW1lbnNpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZih0LmxheW91dCYmdC5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgcixhPXRbbi4kZXh0cmFdLGk9ZS5jb2xTcGFuO3I9LTE9PT1pP2EuY29sdW1uV2lkdGhzLnNsaWNlKGEuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKTphLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4sYS5jdXJyZW50Q29sdW1uK2kpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksaXNOYU4ocil8fChlLnc9cil9dC5sYXlvdXQmJiJwb3NpdGlvbiIhPT10LmxheW91dCYmKGUueD1lLnk9MCksInRhYmxlIj09PWUubGF5b3V0JiYiIj09PWUudyYmQXJyYXkuaXNBcnJheShlLmNvbHVtbldpZHRocykmJihlLnc9ZS5jb2x1bW5XaWR0aHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSl9LHQuZml4VGV4dEluZGVudD1mdW5jdGlvbihlKXt2YXIgdD0oMCxpLmdldE1lYXN1cmVtZW50KShlLnRleHRJbmRlbnQsIjBweCIpO2lmKCEodD49MCkpe3ZhciByPSJwYWRkaW5nIisoImxlZnQiPT0oInJpZ2h0Ij09PWUudGV4dEFsaWduPyJyaWdodCI6ImxlZnQiKT8iTGVmdCI6IlJpZ2h0Iiksbj0oMCxpLmdldE1lYXN1cmVtZW50KShlW3JdLCIwcHgiKTtlW3JdPSIiLmNvbmNhdChuLXQsInB4Iil9fSx0LmZpeFVSTD1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUsbnVsbCx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO3JldHVybiB0P3QuaHJlZjpudWxsfSx0LmlzUHJpbnRPbmx5PWgsdC5sYXlvdXRDbGFzcz1mdW5jdGlvbihlKXtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UicG9zaXRpb24iOmRlZmF1bHQ6cmV0dXJuInhmYVBvc2l0aW9uIjtjYXNlImxyLXRiIjpyZXR1cm4ieGZhTHJUYiI7Y2FzZSJybC1yb3ciOnJldHVybiJ4ZmFSbFJvdyI7Y2FzZSJybC10YiI6cmV0dXJuInhmYVJsVGIiO2Nhc2Uicm93IjpyZXR1cm4ieGZhUm93IjtjYXNlInRhYmxlIjpyZXR1cm4ieGZhVGFibGUiO2Nhc2UidGIiOnJldHVybiJ4ZmFUYiJ9fSx0LmxheW91dE5vZGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsLGE9bnVsbCxpPSExO2lmKCghZS53fHwhZS5oKSYmZS52YWx1ZSl7dmFyIG89MCxzPTA7ZS5tYXJnaW4mJihvPWUubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0LHM9ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBjPW51bGwsdT1udWxsO2UucGFyYSYmKHU9T2JqZWN0LmNyZWF0ZShudWxsKSxjPSIiPT09ZS5wYXJhLmxpbmVIZWlnaHQ/bnVsbDplLnBhcmEubGluZUhlaWdodCx1LnRvcD0iIj09PWUucGFyYS5zcGFjZUFib3ZlPzA6ZS5wYXJhLnNwYWNlQWJvdmUsdS5ib3R0b209IiI9PT1lLnBhcmEuc3BhY2VCZWxvdz8wOmUucGFyYS5zcGFjZUJlbG93LHUubGVmdD0iIj09PWUucGFyYS5tYXJnaW5MZWZ0PzA6ZS5wYXJhLm1hcmdpbkxlZnQsdS5yaWdodD0iIj09PWUucGFyYS5tYXJnaW5SaWdodD8wOmUucGFyYS5tYXJnaW5SaWdodCk7dmFyIGw9ZS5mb250O2lmKCFsKWZvcih2YXIgaD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxkPWVbbi4kZ2V0UGFyZW50XSgpO2QmJmQhPT1oOyl7aWYoZC5mb250KXtsPWQuZm9udDticmVha31kPWRbbi4kZ2V0UGFyZW50XSgpfXZhciBwPShlLnd8fHQud2lkdGgpLW8sZz1lW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI7aWYoZS52YWx1ZS5leERhdGEmJmUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdJiYidGV4dC9odG1sIj09PWUudmFsdWUuZXhEYXRhLmNvbnRlbnRUeXBlKXt2YXIgdj1mKGUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdLGwsdSxjLGcscCk7YT12LndpZHRoLHI9di5oZWlnaHQsaT12LmlzQnJva2VufWVsc2V7dmFyIHk9ZS52YWx1ZVtuLiR0ZXh0XSgpO2lmKHkpe3ZhciBtPWYoeSxsLHUsYyxnLHApO2E9bS53aWR0aCxyPW0uaGVpZ2h0LGk9bS5pc0Jyb2tlbn19bnVsbD09PWF8fGUud3x8KGErPW8pLG51bGw9PT1yfHxlLmh8fChyKz1zKX1yZXR1cm57dzphLGg6cixpc0Jyb2tlbjppfX0sdC5tZWFzdXJlVG9TdHJpbmc9dSx0LnNldEFjY2Vzcz1mdW5jdGlvbihlLHQpe3N3aXRjaChlLmFjY2Vzcyl7Y2FzZSJub25JbnRlcmFjdGl2ZSI6dC5wdXNoKCJ4ZmFOb25JbnRlcmFjdGl2ZSIpO2JyZWFrO2Nhc2UicmVhZE9ubHkiOnQucHVzaCgieGZhUmVhZE9ubHkiKTticmVhaztjYXNlInByb3RlY3RlZCI6dC5wdXNoKCJ4ZmFEaXNhYmxlZCIpfX0sdC5zZXRGb250RmFtaWx5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHIpe3ZhciBhPSgwLGkuc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpO24uZm9udEZhbWlseT0nIicuY29uY2F0KGEsJyInKTt2YXIgcz1yLmZpbmQoYSk7aWYocyl7dmFyIGM9cy5yZWd1bGFyLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHk7YyE9PWEmJihuLmZvbnRGYW1pbHk9JyInLmNvbmNhdChjLCciJykpO3ZhciB1PWQodCk7aWYodSYmIiIhPT11LmxpbmVIZWlnaHQpcmV0dXJuO2lmKG4ubGluZUhlaWdodClyZXR1cm47dmFyIGw9KDAsby5zZWxlY3RGb250KShlLHMpO2wmJihuLmxpbmVIZWlnaHQ9TWF0aC5tYXgoMS4yLGwubGluZUhlaWdodCkpfX1lbHNlIGRlbGV0ZSBuLmZvbnRGYW1pbHl9LHQuc2V0TWluTWF4RGltZW5zaW9ucz1mdW5jdGlvbihlLHQpeyJwb3NpdGlvbiI9PT1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCkubGF5b3V0JiYoZS5taW5XPjAmJih0Lm1pbldpZHRoPXUoZS5taW5XKSksZS5tYXhXPjAmJih0Lm1heFdpZHRoPXUoZS5tYXhXKSksZS5taW5IPjAmJih0Lm1pbkhlaWdodD11KGUubWluSCkpLGUubWF4SD4wJiYodC5tYXhIZWlnaHQ9dShlLm1heEgpKSl9LHQuc2V0UGFyYT1mdW5jdGlvbihlLHQscil7aWYoci5hdHRyaWJ1dGVzLmNsYXNzJiZyLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSl7dCYmKCIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKSwiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKSk7dmFyIGE9ZChlKTtpZihhKXt2YXIgaT1yLmF0dHJpYnV0ZXMuc3R5bGU7c3dpdGNoKGkuZGlzcGxheT0iZmxleCIsaS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGEudkFsaWduKXtjYXNlInRvcCI6aS5qdXN0aWZ5Q29udGVudD0ic3RhcnQiO2JyZWFrO2Nhc2UiYm90dG9tIjppLmp1c3RpZnlDb250ZW50PSJlbmQiO2JyZWFrO2Nhc2UibWlkZGxlIjppLmp1c3RpZnlDb250ZW50PSJjZW50ZXIifWZvcih2YXIgbz1hW24uJHRvU3R5bGVdKCkscz0wLHU9T2JqZWN0LmVudHJpZXMobyk7czx1Lmxlbmd0aDtzKyspe3ZhciBsPSgyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHA9dVtzXSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7Zm9yKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShwKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsMik6dm9pZCAwfX0ocCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksZj1sWzBdLGg9bFsxXTtmIGluIGl8fChpW2ZdPWgpfX19dmFyIHB9LHQudG9TdHlsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkocj4xP3ItMTowKSxvPTE7bzxyO28rKylpW28tMV09YXJndW1lbnRzW29dO2Zvcih2YXIgcz0wLGM9aTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXSxmPWVbdV07aWYobnVsbCE9PWYpaWYobC5oYXNPd25Qcm9wZXJ0eSh1KSlsW3VdKGUsdCk7ZWxzZSBpZihmIGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBoPWZbbi4kdG9TdHlsZV0oKTtoP09iamVjdC5hc3NpZ24odCxoKTooMCxhLndhcm4pKCIoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICIuY29uY2F0KHUsIiBub3QgaW1wbGVtZW50ZWQgeWV0IikpfX1yZXR1cm4gdH07dmFyIG49cigyMDYpLGE9cigyKSxpPXIoMjA3KSxvPXIoMjE0KSxzPXIoMjE1KTtmdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/IjBweCI6TnVtYmVyLmlzSW50ZWdlcihlKT8iIi5jb25jYXQoZSwicHgiKToiIi5jb25jYXQoZS50b0ZpeGVkKDIpLCJweCIpfXZhciBsPXthbmNob3JUeXBlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKHImJighci5sYXlvdXR8fCJwb3NpdGlvbiI9PT1yLmxheW91dCkpc3dpdGNoKCJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKSxlLmFuY2hvclR5cGUpe2Nhc2UiYm90dG9tQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC0xMDAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkiO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLDApIjticmVhaztjYXNlInRvcFJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwwKSJ9fSxkaW1lbnNpb25zOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGE9ZS53LGk9ZS5oO2lmKHIubGF5b3V0JiZyLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciBvLHM9cltuLiRleHRyYV0sYz1lLmNvbFNwYW47LTE9PT1jPyhvPXMuY29sdW1uV2lkdGhzLnNsaWNlKHMuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSxzLmN1cnJlbnRDb2x1bW49MCk6KG89cy5jb2x1bW5XaWR0aHMuc2xpY2Uocy5jdXJyZW50Q29sdW1uLHMuY3VycmVudENvbHVtbitjKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApLHMuY3VycmVudENvbHVtbj0ocy5jdXJyZW50Q29sdW1uK2UuY29sU3Bhbiklcy5jb2x1bW5XaWR0aHMubGVuZ3RoKSxpc05hTihvKXx8KGE9ZS53PW8pfXQud2lkdGg9IiIhPT1hP3UoYSk6ImF1dG8iLHQuaGVpZ2h0PSIiIT09aT91KGkpOiJhdXRvIn0scG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgcj1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk7ciYmci5sYXlvdXQmJiJwb3NpdGlvbiIhPT1yLmxheW91dHx8KHQucG9zaXRpb249ImFic29sdXRlIix0LmxlZnQ9dShlLngpLHQudG9wPXUoZS55KSl9LHJvdGF0ZTpmdW5jdGlvbihlLHQpe2Uucm90YXRlJiYoInRyYW5zZm9ybSJpbiB0fHwodC50cmFuc2Zvcm09IiIpLHQudHJhbnNmb3JtKz0icm90YXRlKC0iLmNvbmNhdChlLnJvdGF0ZSwiZGVnKSIpLHQudHJhbnNmb3JtT3JpZ2luPSJ0b3AgbGVmdCIpfSxwcmVzZW5jZTpmdW5jdGlvbihlLHQpe3N3aXRjaChlLnByZXNlbmNlKXtjYXNlImludmlzaWJsZSI6dC52aXNpYmlsaXR5PSJoaWRkZW4iO2JyZWFrO2Nhc2UiaGlkZGVuIjpjYXNlImluYWN0aXZlIjp0LmRpc3BsYXk9Im5vbmUifX0saEFsaWduOmZ1bmN0aW9uKGUsdCl7aWYoInBhcmEiPT09ZVtuLiRub2RlTmFtZV0pc3dpdGNoKGUuaEFsaWduKXtjYXNlImp1c3RpZnlBbGwiOnQudGV4dEFsaWduPSJqdXN0aWZ5LWFsbCI7YnJlYWs7Y2FzZSJyYWRpeCI6dC50ZXh0QWxpZ249ImxlZnQiO2JyZWFrO2RlZmF1bHQ6dC50ZXh0QWxpZ249ZS5oQWxpZ259ZWxzZSBzd2l0Y2goZS5oQWxpZ24pe2Nhc2UibGVmdCI6dC5hbGlnblNlbGY9InN0YXJ0IjticmVhaztjYXNlImNlbnRlciI6dC5hbGlnblNlbGY9ImNlbnRlciI7YnJlYWs7Y2FzZSJyaWdodCI6dC5hbGlnblNlbGY9ImVuZCJ9fSxtYXJnaW46ZnVuY3Rpb24oZSx0KXtlLm1hcmdpbiYmKHQubWFyZ2luPWUubWFyZ2luW24uJHRvU3R5bGVdKCkubWFyZ2luKX19O2Z1bmN0aW9uIGYoZSx0LHIsYSxpLG8pe3ZhciBjPW5ldyBzLlRleHRNZWFzdXJlKHQscixhLGkpO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9jLmFkZFN0cmluZyhlKTplW24uJHB1c2hHbHlwaHNdKGMpLGMuY29tcHV0ZShvKX1mdW5jdGlvbiBoKGUpe3JldHVybiBlLnJlbGV2YW50Lmxlbmd0aD4wJiYhZS5yZWxldmFudFswXS5leGNsdWRlZCYmInByaW50Ij09PWUucmVsZXZhbnRbMF0udmlld25hbWV9ZnVuY3Rpb24gZChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFyYVN0YWNrO3JldHVybiB0Lmxlbmd0aD90LmF0KC0xKTpudWxsfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnRGaW5kZXI9dm9pZCAwLHQuZ2V0TWV0cmljcz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9bnVsbDtpZihlKXt2YXIgaT0oMCxhLnN0cmlwUXVvdGVzKShlLnR5cGVmYWNlKSxvPWVbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKGkpO3I9ZChlLG8pfWlmKCFyKXJldHVybntsaW5lSGVpZ2h0OjEyLGxpbmVHYXA6MixsaW5lTm9HYXA6MTB9O3ZhciBzPWUuc2l6ZXx8MTAsYz1yLmxpbmVIZWlnaHQ/TWF0aC5tYXgodD8wOjEuMixyLmxpbmVIZWlnaHQpOjEuMix1PXZvaWQgMD09PXIubGluZUdhcD8uMjpyLmxpbmVHYXA7cmV0dXJue2xpbmVIZWlnaHQ6YypzLGxpbmVHYXA6dSpzLGxpbmVOb0dhcDpNYXRoLm1heCgxLGMtdSkqc319LHQuc2VsZWN0Rm9udD1kO3ZhciBuPXIoMjA2KSxhPXIoMjA3KSxpPXIoMik7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXUoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1vKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09byhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PW8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmZvbnRzPW5ldyBNYXAsdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMud2FybmVkPW5ldyBTZXQsdGhpcy5kZWZhdWx0Rm9udD1udWxsLHRoaXMuYWRkKHQpfXZhciB0LHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsbj1jKGUpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGE9dC52YWx1ZTt0aGlzLmFkZFBkZkZvbnQoYSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBpLG89Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPWkudmFsdWU7cy5yZWd1bGFyfHwocy5yZWd1bGFyPXMuaXRhbGljfHxzLmJvbGR8fHMuYm9sZGl0YWxpYyl9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfWlmKHImJjAhPT1yLnNpemUpe3ZhciB1LGw9dGhpcy5mb250cy5nZXQoIlBkZkpTLUZhbGxiYWNrLVBkZkpTLVhGQSIpLGY9YyhyKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7dGhpcy5mb250cy5zZXQoaCxsKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9fX19LHtrZXk6ImFkZFBkZkZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY3NzRm9udEluZm8scj10LmZvbnRGYW1pbHksbj10aGlzLmZvbnRzLmdldChyKTtufHwobj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZm9udHMuc2V0KHIsbiksdGhpcy5kZWZhdWx0Rm9udHx8KHRoaXMuZGVmYXVsdEZvbnQ9bikpO3ZhciBhPSIiLGk9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP2E9aT49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjppPj03MDAmJihhPSJib2xkIiksYXx8KChlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWUmJmUucHNOYW1lLmluY2x1ZGVzKCJCb2xkIikpJiYoYT0iYm9sZCIpLChlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lJiYoZS5wc05hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLnBzTmFtZS5lbmRzV2l0aCgiSXQiKSkpJiYoYSs9Iml0YWxpYyIpKSxhfHwoYT0icmVndWxhciIpLG5bYV09ZX19LHtrZXk6ImdldERlZmF1bHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdEZvbnR9fSx7a2V5OiJmaW5kIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLHI9dGhpcy5mb250cy5nZXQoZSl8fHRoaXMuY2FjaGUuZ2V0KGUpO2lmKHIpcmV0dXJuIHI7dmFyIG49Lyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpLGE9ZS5yZXBsYWNlKG4sIiIpO2lmKHI9dGhpcy5mb250cy5nZXQoYSkpcmV0dXJuIHRoaXMuY2FjaGUuc2V0KGUscikscjthPWEudG9Mb3dlckNhc2UoKTt2YXIgbyx1PVtdLGw9Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihsLnMoKTshKG89bC5uKCkpLmRvbmU7KXt2YXIgZj1zKG8udmFsdWUsMiksaD1mWzBdLGQ9ZlsxXTtoLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goZCl9fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfWlmKDA9PT11Lmxlbmd0aCl7dmFyIHAsZz1jKHRoaXMuZm9udHMuZW50cmllcygpKTt0cnl7Zm9yKGcucygpOyEocD1nLm4oKSkuZG9uZTspe3ZhciB2PXMocC52YWx1ZSwyKVsxXTt2LnJlZ3VsYXIubmFtZSYmdi5yZWd1bGFyLm5hbWUucmVwbGFjZShuLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYSkmJnUucHVzaCh2KX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9fWlmKDA9PT11Lmxlbmd0aCl7YT1hLnJlcGxhY2UoL3BzbXR8bXQvZ2ksIiIpO3ZhciB5LG09Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj1zKHkudmFsdWUsMiksdz1iWzBdLGs9YlsxXTt3LnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goayl9fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfX1pZigwPT09dS5sZW5ndGgpe3ZhciBTLHg9Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7Ty5yZWd1bGFyLm5hbWUmJk8ucmVndWxhci5uYW1lLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goTyl9fWNhdGNoKGUpe3guZShlKX1maW5hbGx5e3guZigpfX1yZXR1cm4gdS5sZW5ndGg+PTE/KDEhPT11Lmxlbmd0aCYmdCYmKDAsaS53YXJuKSgiWEZBIC0gVG9vIG1hbnkgY2hvaWNlcyB0byBndWVzcyB0aGUgY29ycmVjdCBmb250OiAiLmNvbmNhdChlKSksdGhpcy5jYWNoZS5zZXQoZSx1WzBdKSx1WzBdKToodCYmIXRoaXMud2FybmVkLmhhcyhlKSYmKHRoaXMud2FybmVkLmFkZChlKSwoMCxpLndhcm4pKCJYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogIi5jb25jYXQoZSkpKSxudWxsKX19XSxyJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7ZnVuY3Rpb24gZChlLHQpe3JldHVybiJpdGFsaWMiPT09ZS5wb3N0dXJlPyJib2xkIj09PWUud2VpZ2h0P3QuYm9sZGl0YWxpYzp0Lml0YWxpYzoiYm9sZCI9PT1lLndlaWdodD90LmJvbGQ6dC5yZWd1bGFyfXQuRm9udEZpbmRlcj1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGV4dE1lYXN1cmU9dm9pZCAwO3ZhciBuPXIoMjE0KTtmdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBpKGUpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxpKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8cyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1pKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsYSxpKXtpZih1KHRoaXMsZSksdGhpcy5saW5lSGVpZ2h0PWEsdGhpcy5wYXJhTWFyZ2luPXJ8fHt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MH0sIXQpe3ZhciBzPW8odGhpcy5kZWZhdWx0Rm9udChpKSwyKTtyZXR1cm4gdGhpcy5wZGZGb250PXNbMF0sdm9pZCh0aGlzLnhmYUZvbnQ9c1sxXSl9dGhpcy54ZmFGb250PXt0eXBlZmFjZTp0LnR5cGVmYWNlLHBvc3R1cmU6dC5wb3N0dXJlLHdlaWdodDp0LndlaWdodCxzaXplOnQuc2l6ZSxsZXR0ZXJTcGFjaW5nOnQubGV0dGVyU3BhY2luZ307dmFyIGM9aS5maW5kKHQudHlwZWZhY2UpO2lmKCFjKXt2YXIgbD1vKHRoaXMuZGVmYXVsdEZvbnQoaSksMik7cmV0dXJuIHRoaXMucGRmRm9udD1sWzBdLHZvaWQodGhpcy54ZmFGb250PWxbMV0pfWlmKHRoaXMucGRmRm9udD0oMCxuLnNlbGVjdEZvbnQpKHQsYyksIXRoaXMucGRmRm9udCl7dmFyIGY9byh0aGlzLmRlZmF1bHRGb250KGkpLDIpO3RoaXMucGRmRm9udD1mWzBdLHRoaXMueGZhRm9udD1mWzFdfX1yZXR1cm4gZihlLFt7a2V5OiJkZWZhdWx0Rm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maW5kKCJIZWx2ZXRpY2EiLCExKXx8ZS5maW5kKCJNeXJpYWQgUHJvIiwhMSl8fGUuZmluZCgiQXJpYWwiLCExKXx8ZS5nZXREZWZhdWx0KCk7aWYodCYmdC5yZWd1bGFyKXt2YXIgcj10LnJlZ3VsYXI7cmV0dXJuW3Ise3R5cGVmYWNlOnIuY3NzRm9udEluZm8uZm9udEZhbWlseSxwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfXJldHVybltudWxsLHt0eXBlZmFjZToiQ291cmllciIscG9zdHVyZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc2l6ZToxMCxsZXR0ZXJTcGFjaW5nOjB9XX19XSksZX0oKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixhKXt1KHRoaXMsZSksdGhpcy5mb250RmluZGVyPWEsdGhpcy5zdGFjaz1bbmV3IGgodCxyLG4sYSldfXJldHVybiBmKGUsW3trZXk6InB1c2hEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMuc3RhY2suYXQoLTEpLGE9MCxpPVsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXTthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtlW29dfHwoZVtvXT1uLnhmYUZvbnRbb10pfWZvcih2YXIgcz0wLGM9WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXTtpc05hTih0W3VdKSYmKHRbdV09bi5wYXJhTWFyZ2luW3VdKX12YXIgbD1uZXcgaChlLHQscnx8bi5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7bC5wZGZGb250fHwobC5wZGZGb250PW4ucGRmRm9udCksdGhpcy5zdGFjay5wdXNoKGwpfX0se2tleToicG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0YWNrLnBvcCgpfX0se2tleToidG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fV0pLGV9KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7dSh0aGlzLGUpLHRoaXMuZ2x5cGhzPVtdLHRoaXMuZm9udFNlbGVjdG9yPW5ldyBkKHQscixuLGEpLHRoaXMuZXh0cmFIZWlnaHQ9MH1yZXR1cm4gZihlLFt7a2V5OiJwdXNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuZm9udFNlbGVjdG9yLnB1c2hEYXRhKGUsdCxyKX19LHtrZXk6InBvcEZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZvbnRTZWxlY3Rvci5wb3BGb250KCl9fSx7a2V5OiJhZGRQYXJhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTt0aGlzLmV4dHJhSGVpZ2h0Kz1lLnBhcmFNYXJnaW4udG9wK2UucGFyYU1hcmdpbi5ib3R0b219fSx7a2V5OiJhZGRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKSxyPXQueGZhRm9udC5zaXplO2lmKHQucGRmRm9udCl7dmFyIG4saT10LnhmYUZvbnQubGV0dGVyU3BhY2luZyxvPXQucGRmRm9udCxzPW8ubGluZUhlaWdodHx8MS4yLGM9dC5saW5lSGVpZ2h0fHxNYXRoLm1heCgxLjIscykqcix1PXMtKHZvaWQgMD09PW8ubGluZUdhcD8uMjpvLmxpbmVHYXApLGw9TWF0aC5tYXgoMSx1KSpyLGY9ci8xZTMsaD1vLmRlZmF1bHRXaWR0aHx8by5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGgsZD1hKGUuc3BsaXQoL1tcdTIwMjlcbl0vKSk7dHJ5e2ZvcihkLnMoKTshKG49ZC5uKCkpLmRvbmU7KXt2YXIgcCxnPW4udmFsdWUsdj1vLmVuY29kZVN0cmluZyhnKS5qb2luKCIiKSx5PWEoby5jaGFyc1RvR2x5cGhzKHYpKTt0cnl7Zm9yKHkucygpOyEocD15Lm4oKSkuZG9uZTspe3ZhciBtPXAudmFsdWUsYj1tLndpZHRofHxoO3RoaXMuZ2x5cGhzLnB1c2goW2IqZitpLGMsbCxtLnVuaWNvZGUsITFdKX19Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtkLmUoZSl9ZmluYWxseXtkLmYoKX10aGlzLmdseXBocy5wb3AoKX1lbHNle3ZhciB3LGs9YShlLnNwbGl0KC9bXHUyMDI5XG5dLykpO3RyeXtmb3Ioay5zKCk7ISh3PWsubigpKS5kb25lOyl7dmFyIFMseD1hKHcudmFsdWUuc3BsaXQoIiIpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7dGhpcy5nbHlwaHMucHVzaChbciwxLjIqcixyLE8sITFdKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtrLmUoZSl9ZmluYWxseXtrLmYoKX10aGlzLmdseXBocy5wb3AoKX19fX0se2tleToiY29tcHV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLHI9MCxuPTAsYT0wLGk9MCxzPTAsYz0hMSx1PSEwLGw9MCxmPXRoaXMuZ2x5cGhzLmxlbmd0aDtsPGY7bCsrKXt2YXIgaD1vKHRoaXMuZ2x5cGhzW2xdLDUpLGQ9aFswXSxwPWhbMV0sZz1oWzJdLHY9IiAiPT09aFszXSx5PXU/ZzpwO2hbNF0/KG49TWF0aC5tYXgobixpKSxpPTAsYSs9cyxzPXksdD0tMSxyPTAsdT0hMSk6dj9pK2Q+ZT8obj1NYXRoLm1heChuLGkpLGk9MCxhKz1zLHM9eSx0PS0xLHI9MCxjPSEwLHU9ITEpOihzPU1hdGgubWF4KHkscykscj1pLGkrPWQsdD1sKTppK2Q+ZT8oYSs9cyxzPXksLTEhPT10PyhsPXQsbj1NYXRoLm1heChuLHIpLGk9MCx0PS0xLHI9MCk6KG49TWF0aC5tYXgobixpKSxpPWQpLGM9ITAsdT0hMSk6KGkrPWQscz1NYXRoLm1heCh5LHMpKX1yZXR1cm57d2lkdGg6MS4wMioobj1NYXRoLm1heChuLGkpKSxoZWlnaHQ6YSs9cyt0aGlzLmV4dHJhSGVpZ2h0LGlzQnJva2VuOmN9fX1dKSxlfSgpO3QuVGV4dE1lYXN1cmU9cH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFIYW5kbGVyPXZvaWQgMDt2YXIgbj1yKDIwNik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT1yLHRoaXMuZGF0YXNldD10LmRhdGFzZXRzfHxudWxsfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W1stMSx0aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCldXTt0Lmxlbmd0aD4wOyl7dmFyIHI9dC5hdCgtMSksYT1vKHIsMikscz1hWzBdLGM9YVsxXTtpZihzKzEhPT1jLmxlbmd0aCl7dmFyIHU9Y1srK3JbMF1dLGw9ZS5nZXQodVtuLiR1aWRdKTtpZihsKXVbbi4kc2V0VmFsdWVdKGwpO2Vsc2V7dmFyIGYsaD1pKHVbbi4kZ2V0QXR0cmlidXRlc10oKS52YWx1ZXMoKSk7dHJ5e2ZvcihoLnMoKTshKGY9aC5uKCkpLmRvbmU7KXt2YXIgZD1mLnZhbHVlLHA9ZS5nZXQoZFtuLiR1aWRdKTtpZihwKXtkW24uJHNldFZhbHVlXShwKTticmVha319fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX12YXIgZz11W24uJGdldENoaWxkcmVuXSgpO2cubGVuZ3RoPjAmJnQucHVzaChbLTEsZ10pfWVsc2UgdC5wb3AoKX12YXIgdj1bJzx4ZmE6ZGF0YXNldHMgeG1sbnM6eGZhPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLzEuMC8iPiddO2lmKHRoaXMuZGF0YXNldCl7dmFyIHksbT1pKHRoaXMuZGF0YXNldFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj15LnZhbHVlOyJkYXRhIiE9PWJbbi4kbm9kZU5hbWVdJiZiW24uJHRvU3RyaW5nXSh2KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9fXJldHVybiB0aGlzLmRhdGFbbi4kdG9TdHJpbmddKHYpLHYucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iiksdi5qb2luKCIiKX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkRhdGFIYW5kbGVyPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhGQVBhcnNlcj12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigxOTUpLG89cigyMTgpLHM9cigyKTtmdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGgoZSx0KX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZoKGUsdCl9KHYsZSk7dmFyIHQscixsLHAsZz0obD12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1kKGwpO2lmKHApe3ZhciByPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoKXt2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwoZT1nLmNhbGwodGhpcykpLl9idWlsZGVyPW5ldyBvLkJ1aWxkZXIodCksZS5fc3RhY2s9W10sZS5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fSxlLl9pZHM9bmV3IE1hcCxlLl9jdXJyZW50PWUuX2J1aWxkZXIuYnVpbGRSb290KGUuX2lkcyksZS5fZXJyb3JDb2RlPWkuWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IsZS5fd2hpdGVSZWdleD0vXlxzKyQvLGUuX25ic3BzPS9ceGEwKy9nLGUuX3JpY2hUZXh0PXIsZX1yZXR1cm4gdD12LChyPVt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5wYXJzZVhtbChlKSx0aGlzLl9lcnJvckNvZGU9PT1pLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKXJldHVybiB0aGlzLl9jdXJyZW50W2EuJGZpbmFsaXplXSgpLHRoaXMuX2N1cnJlbnQuZWxlbWVudH19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UodGhpcy5fbmJzcHMsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKDEpKyIgIn0pKSx0aGlzLl9yaWNoVGV4dHx8dGhpcy5fY3VycmVudFthLiRhY2NlcHRXaGl0ZXNwYWNlXSgpP3RoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLHRoaXMuX3JpY2hUZXh0KTp0aGlzLl93aGl0ZVJlZ2V4LnRlc3QoZSl8fHRoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLnRyaW0oKSl9fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9jdXJyZW50W2EuJG9uVGV4dF0oZSl9fSx7a2V5OiJfbWtBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG49bnVsbCxpPW51bGwsbz1PYmplY3QuY3JlYXRlKHt9KSxjPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXt2YXIgbD1yLnZhbHVlLGY9bC5uYW1lLGg9bC52YWx1ZTtpZigieG1sbnMiPT09ZiluPygwLHMud2FybikoIlhGQSAtIG11bHRpcGxlIG5hbWVzcGFjZSBkZWZpbml0aW9uIGluIDwiLmNvbmNhdCh0LCI+IikpOm49aDtlbHNlIGlmKGYuc3RhcnRzV2l0aCgieG1sbnM6Iikpe3ZhciBkPWYuc3Vic3RyaW5nKDYpO2l8fChpPVtdKSxpLnB1c2goe3ByZWZpeDpkLHZhbHVlOmh9KX1lbHNle3ZhciBwPWYuaW5kZXhPZigiOiIpO2lmKC0xPT09cClvW2ZdPWg7ZWxzZXt2YXIgZz1vW2EuJG5zQXR0cmlidXRlc107Z3x8KGc9b1thLiRuc0F0dHJpYnV0ZXNdPU9iamVjdC5jcmVhdGUobnVsbCkpO3ZhciB2PVtmLnNsaWNlKDAscCksZi5zbGljZShwKzEpXSx5PXZbMF0sbT12WzFdLGI9Z1t5XTtifHwoYj1nW3ldPU9iamVjdC5jcmVhdGUobnVsbCkpLGJbbV09aH19fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm5bbixpLG9dfX0se2tleToiX2dldE5hbWVBbmRQcmVmaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1yP1tlLG51bGxdOltlLnN1YnN0cmluZyhyKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxyKV19fSx7a2V5OiJvbkJlZ2luRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWModGhpcy5fbWtBdHRyaWJ1dGVzKHQsZSksMyksaT1uWzBdLG89blsxXSxzPW5bMl0sdT1jKHRoaXMuX2dldE5hbWVBbmRQcmVmaXgoZSx0aGlzLl9idWlsZGVyLmlzTnNBZ25vc3RpYygpKSwyKSxsPXVbMF0sZj11WzFdLGg9dGhpcy5fYnVpbGRlci5idWlsZCh7bnNQcmVmaXg6ZixuYW1lOmwsYXR0cmlidXRlczpzLG5hbWVzcGFjZTppLHByZWZpeGVzOm99KTtpZihoW2EuJGdsb2JhbERhdGFdPXRoaXMuX2dsb2JhbERhdGEscilyZXR1cm4gaFthLiRmaW5hbGl6ZV0oKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKGgpJiZoW2EuJHNldElkXSh0aGlzLl9pZHMpLHZvaWQgaFthLiRjbGVhbl0odGhpcy5fYnVpbGRlcik7dGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50KSx0aGlzLl9jdXJyZW50PWh9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnQ7aWYodFthLiRpc0NEQVRBWG1sXSgpJiYic3RyaW5nIj09dHlwZW9mIHRbYS4kY29udGVudF0pe3ZhciByPW5ldyB2O3IuX2dsb2JhbERhdGE9dGhpcy5fZ2xvYmFsRGF0YTt2YXIgbj1yLnBhcnNlKHRbYS4kY29udGVudF0pO3RbYS4kY29udGVudF09bnVsbCx0W2EuJG9uQ2hpbGRdKG4pfXRbYS4kZmluYWxpemVdKCksdGhpcy5fY3VycmVudD10aGlzLl9zdGFjay5wb3AoKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKHQpJiZ0W2EuJHNldElkXSh0aGlzLl9pZHMpLHRbYS4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpfX0se2tleToib25FcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZXJyb3JDb2RlPWV9fV0pJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHZ9KGkuWE1MUGFyc2VyQmFzZSk7dC5YRkFQYXJzZXI9cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQnVpbGRlcj12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpLG89cigyMTkpLHM9cigyMTEpLGM9cigyMjgpLHU9cigyKTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGYoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGYoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBoKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBnKGUsdCxyKXtyZXR1cm4gdCYmcChlLnByb3RvdHlwZSx0KSxyJiZwKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB2KCl7cmV0dXJuIHY9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT13KGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZtKGUsdCl9ZnVuY3Rpb24gbShlLHQpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbShlLHQpfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9dyhlKTtpZih0KXt2YXIgaT13KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHcoZSl7cmV0dXJuIHc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHcoZSl9dmFyIGs9ZnVuY3Rpb24oZSl7eShyLGUpO3ZhciB0PWIocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLC0xLCJyb290IixPYmplY3QuY3JlYXRlKG51bGwpKSkuZWxlbWVudD1udWxsLG5baS4kaWRzXT1lLG59cmV0dXJuIGcocixbe2tleTppLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVsZW1lbnQ9ZSwhMH19LHtrZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2KHcoci5wcm90b3R5cGUpLGkuJGZpbmFsaXplLHRoaXMpLmNhbGwodGhpcyksdGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2Ygcy5UZW1wbGF0ZSYmKHRoaXNbaS4kaWRzXS5zZXQoaS4kcm9vdCx0aGlzLmVsZW1lbnQpLHRoaXMuZWxlbWVudC50ZW1wbGF0ZVtpLiRyZXNvbHZlUHJvdG90eXBlc10odGhpc1tpLiRpZHNdKSx0aGlzLmVsZW1lbnQudGVtcGxhdGVbaS4kaWRzXT10aGlzW2kuJGlkc10pfX1dKSxyfShpLlhGQU9iamVjdCksUz1mdW5jdGlvbihlKXt5KHIsZSk7dmFyIHQ9YihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGQodGhpcyxyKSx0LmNhbGwodGhpcywtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1yZXR1cm4gZyhyLFt7a2V5OmkuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fV0pLHJ9KGkuWEZBT2JqZWN0KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7ZCh0aGlzLGUpLHRoaXMuX25hbWVzcGFjZVN0YWNrPVtdLHRoaXMuX25zQWdub3N0aWNMZXZlbD0wLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzPW5ldyBNYXAsdGhpcy5fbmFtZXNwYWNlcz1uZXcgTWFwLHRoaXMuX25leHROc0lkPU1hdGgubWF4LmFwcGx5KE1hdGgsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gaChlKX0odD1PYmplY3QudmFsdWVzKGEuTmFtZXNwYWNlSWRzKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSkpKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8Zih0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdGhpcy5fY3VycmVudE5hbWVzcGFjZT1yfHxuZXcgYy5Vbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfXJldHVybiBnKGUsW3trZXk6ImJ1aWxkUm9vdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubnNQcmVmaXgscj1lLm5hbWUsbj1lLmF0dHJpYnV0ZXMscz1lLm5hbWVzcGFjZSxjPWUucHJlZml4ZXMsdT1udWxsIT09cztpZih1JiYodGhpcy5fbmFtZXNwYWNlU3RhY2sucHVzaCh0aGlzLl9jdXJyZW50TmFtZXNwYWNlKSx0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX3NlYXJjaE5hbWVzcGFjZShzKSksYyYmdGhpcy5fYWRkTmFtZXNwYWNlUHJlZml4KGMpLG4uaGFzT3duUHJvcGVydHkoaS4kbnNBdHRyaWJ1dGVzKSl7Zm9yKHZhciBmPW8uTmFtZXNwYWNlU2V0VXAuZGF0YXNldHMsaD1uW2kuJG5zQXR0cmlidXRlc10sZD1udWxsLHA9MCxnPU9iamVjdC5lbnRyaWVzKGgpO3A8Zy5sZW5ndGg7cCsrKXt2YXIgdj1sKGdbcF0sMikseT12WzBdLG09dlsxXTtpZih0aGlzLl9nZXROYW1lc3BhY2VUb1VzZSh5KT09PWYpe2Q9e3hmYTptfTticmVha319ZD9uW2kuJG5zQXR0cmlidXRlc109ZDpkZWxldGUgbltpLiRuc0F0dHJpYnV0ZXNdfXZhciBiPXRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKHQpLHc9YiYmYlthLiRidWlsZFhGQU9iamVjdF0ocixuKXx8bmV3IFM7cmV0dXJuIHdbaS4kaXNOc0Fnbm9zdGljXSgpJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwrKywodXx8Y3x8d1tpLiRpc05zQWdub3N0aWNdKCkpJiYod1tpLiRjbGVhbnVwXT17aGFzTmFtZXNwYWNlOnUscHJlZml4ZXM6Yyxuc0Fnbm9zdGljOndbaS4kaXNOc0Fnbm9zdGljXSgpfSksd319LHtrZXk6ImlzTnNBZ25vc3RpYyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbnNBZ25vc3RpY0xldmVsPjB9fSx7a2V5OiJfc2VhcmNoTmFtZXNwYWNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lc3BhY2VzLmdldChlKTtpZih0KXJldHVybiB0O2Zvcih2YXIgcj0wLG49T2JqZWN0LmVudHJpZXMoYS5OYW1lc3BhY2VJZHMpO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1sKG5bcl0sMikscz1pWzBdO2lmKCgwLGlbMV0uY2hlY2spKGUpKXtpZih0PW8uTmFtZXNwYWNlU2V0VXBbc10pcmV0dXJuIHRoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCksdDticmVha319cmV0dXJuIHQ9bmV3IGMuVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKSx0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpLHR9fSx7a2V5OiJfYWRkTmFtZXNwYWNlUHJlZml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlLGE9bi5wcmVmaXgsaT1uLnZhbHVlLG89dGhpcy5fc2VhcmNoTmFtZXNwYWNlKGkpLHM9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGEpO3N8fChzPVtdLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldChhLHMpKSxzLnB1c2gobyl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19LHtrZXk6Il9nZXROYW1lc3BhY2VUb1VzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXMuX2N1cnJlbnROYW1lc3BhY2U7dmFyIHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO3JldHVybiB0JiZ0Lmxlbmd0aD4wP3QuYXQoLTEpOigoMCx1Lndhcm4pKCJVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICIuY29uY2F0KGUsIi4iKSksbnVsbCl9fSx7a2V5OiJjbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFzTmFtZXNwYWNlLG49ZS5wcmVmaXhlcyxhPWUubnNBZ25vc3RpYztyJiYodGhpcy5fY3VycmVudE5hbWVzcGFjZT10aGlzLl9uYW1lc3BhY2VTdGFjay5wb3AoKSksbiYmbi5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lLnByZWZpeDt0Ll9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocikucG9wKCl9KSksYSYmdGhpcy5fbnNBZ25vc3RpY0xldmVsLS19fV0pLGV9KCk7dC5CdWlsZGVyPXh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VTZXRVcD12b2lkIDA7dmFyIG49cigyMjApLGE9cigyMjEpLGk9cigyMjIpLG89cigyMjMpLHM9cigyMjQpLGM9cigyMjUpLHU9cigyMTEpLGw9cigyMjYpLGY9cigyMjcpLGg9e2NvbmZpZzpuLkNvbmZpZ05hbWVzcGFjZSxjb25uZWN0aW9uOmEuQ29ubmVjdGlvblNldE5hbWVzcGFjZSxkYXRhc2V0czppLkRhdGFzZXRzTmFtZXNwYWNlLGxvY2FsZVNldDpvLkxvY2FsZVNldE5hbWVzcGFjZSxzaWduYXR1cmU6cy5TaWduYXR1cmVOYW1lc3BhY2Usc3R5bGVzaGVldDpjLlN0eWxlc2hlZXROYW1lc3BhY2UsdGVtcGxhdGU6dS5UZW1wbGF0ZU5hbWVzcGFjZSx4ZHA6bC5YZHBOYW1lc3BhY2UseGh0bWw6Zi5YaHRtbE5hbWVzcGFjZX07dC5OYW1lc3BhY2VTZXRVcD1ofSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db25maWdOYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gdCYmdShlLnByb3RvdHlwZSx0KSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9YS5OYW1lc3BhY2VJZHMuY29uZmlnLmlkLHk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFjcm9iYXQiLCEwKSkuYWNyb2JhdDc9bnVsbCxuLmF1dG9TYXZlPW51bGwsbi5jb21tb249bnVsbCxuLnZhbGlkYXRlPW51bGwsbi52YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcz1udWxsLG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhY3JvYmF0NyIsITApKS5keW5hbWljUmVuZGVyPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLGI9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNDb25zb2xlIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNEZWJ1Z2dlciIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRTaWxlbnRQcmludCIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxTPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx4PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGp1c3REYXRhIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMTApLE89ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLDAsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD04fSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFnZW50IiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5jb21tb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFsd2F5c0VtYmVkIil9cmV0dXJuIGwocil9KGkuQ29udGVudE9iamVjdCksRj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiYW1kIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhcmVhIikpLmxldmVsPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZXZlbCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MSYmZTw9M319KSxuLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbIiIsImJhcmNvZGUiLCJjb3JlaW5pdCIsImRldmljZURyaXZlciIsImZvbnQiLCJnZW5lcmFsIiwibGF5b3V0IiwibWVyZ2UiLCJzY3JpcHQiLCJzaWduYXR1cmUiLCJzb3VyY2VTZXQiLCJ0ZW1wbGF0ZUNhY2hlIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdHRyaWJ1dGVzIixbInByZXNlcnZlIiwiZGVsZWdhdGUiLCJpZ25vcmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdXRvU2F2ZSIsWyJkaXNhYmxlZCIsImVuYWJsZWQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxFPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiYXNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJiYXRjaE91dHB1dCIpKS5mb3JtYXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsibm9uZSIsImNvbmNhdCIsInppcCIsInppcENvbXByZXNzIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiZWhhdmlvck92ZXJyaWRlIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09bmV3IE1hcCh0aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcygiOiIpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoIjoiLDIpfSkpKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjYWNoZSIsITApKS50ZW1wbGF0ZUNhY2hlPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNoYW5nZSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxSPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21tb24iLCEwKSkuZGF0YT1udWxsLG4ubG9jYWxlPW51bGwsbi5sb2NhbGVTZXQ9bnVsbCxuLm1lc3NhZ2luZz1udWxsLG4uc3VwcHJlc3NCYW5uZXI9bnVsbCxuLnRlbXBsYXRlPW51bGwsbi52YWxpZGF0aW9uTWVzc2FnaW5nPW51bGwsbi52ZXJzaW9uQ29udHJvbD1udWxsLG4ubG9nPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxOPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21wcmVzcyIpKS5zY29wZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbImltYWdlT25seSIsImRvY3VtZW50Il0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxEPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29tcHJlc3NPYmplY3RTdHJlYW0iKX1yZXR1cm4gbChyKX0oaS5PcHRpb24xMCksVT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29tcHJlc3Npb24iLCEwKSkuY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlPW51bGwsbi5jb21wcmVzc09iamVjdFN0cmVhbT1udWxsLG4ubGV2ZWw9bnVsbCxuLnR5cGU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29uZmlnIiwhMCkpLmFjcm9iYXQ9bnVsbCxuLnByZXNlbnQ9bnVsbCxuLnRyYWNlPW51bGwsbi5hZ2VudD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29uZm9ybWFuY2UiLFsiQSIsIkIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxIPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb250ZW50Q29weSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxxPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb3BpZXMiLDEsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNyZWF0b3IiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImN1cnJlbnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxXPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJkYXRhIiwhMCkpLmFkanVzdERhdGE9bnVsbCxuLmF0dHJpYnV0ZXM9bnVsbCxuLmluY3JlbWVudGFsTG9hZD1udWxsLG4ub3V0cHV0WFNMPW51bGwsbi5yYW5nZT1udWxsLG4ucmVjb3JkPW51bGwsbi5zdGFydE5vZGU9bnVsbCxuLnVyaT1udWxsLG4ud2luZG93PW51bGwsbi54c2w9bnVsbCxuLmV4Y2x1ZGVOUz1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnRyYW5zZm9ybT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZGVidWciLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImRlZmF1bHRUeXBlZmFjZSIpKS53cml0aW5nU2NyaXB0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLndyaXRpbmdTY3JpcHQsWyIqIiwiQXJhYmljIiwiQ3lyaWxsaWMiLCJFYXN0RXVyb3BlYW5Sb21hbiIsIkdyZWVrIiwiSGVicmV3IiwiSmFwYW5lc2UiLCJLb3JlYW4iLCJSb21hbiIsIlNpbXBsaWZpZWRDaGluZXNlIiwiVGhhaSIsIlRyYWRpdGlvbmFsQ2hpbmVzZSIsIlZpZXRuYW1lc2UiXSksbn1yZXR1cm4gbChyKX0oaS5Db250ZW50T2JqZWN0KSxLPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkZXN0aW5hdGlvbiIsWyJwZGYiLCJwY2wiLCJwcyIsIndlYkNsaWVudCIsInpwbCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImRvY3VtZW50QXNzZW1ibHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksWj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZHJpdmVyIiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5mb250SW5mbz1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImR1cGxleE9wdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4RmxpcExvbmdFZGdlIiwiZHVwbGV4RmxpcFNob3J0RWRnZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkeW5hbWljUmVuZGVyIixbImZvcmJpZGRlbiIsInJlcXVpcmVkIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksdGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVtYmVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLHJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmNyeXB0Iil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLG5lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJlbmNyeXB0aW9uIiwhMCkpLmVuY3J5cHQ9bnVsbCxuLmVuY3J5cHRpb25MZXZlbD1udWxsLG4ucGVybWlzc2lvbnM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVuY3J5cHRpb25MZXZlbCIsWyI0MGJpdCIsIjEyOGJpdCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmZvcmNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxvZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZXF1YXRlIikpLmZvcmNlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5mb3JjZSxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9fSksbi5mcm9tPWUuZnJvbXx8IiIsbi50bz1lLnRvfHwiIixufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksc2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImVxdWF0ZVJhbmdlIikpLmZyb209ZS5mcm9tfHwiIixuLnRvPWUudG98fCIiLG4uX3VuaWNvZGVSYW5nZT1lLnVuaWNvZGVSYW5nZXx8IiIsbn1yZXR1cm4gbChyLFt7a2V5OiJ1bmljb2RlUmFuZ2UiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj0vVVwrKFswLTlhLWZBLUZdKykvLG49ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0odGhpcy5fdW5pY29kZVJhbmdlLnNwbGl0KCIsIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTsxPT09KGE9YS5zcGxpdCgiLSIsMikubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKHIpO3JldHVybiB0P3BhcnNlSW50KHRbMV0sMTYpOjB9KSkpLmxlbmd0aCYmYS5wdXNoKGFbMF0pLHQucHVzaChhKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsInVuaWNvZGVSYW5nZSIsdCl9fV0pLHJ9KGkuWEZBT2JqZWN0KSxjZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZbImNhbGN1bGF0ZSIsImNsb3NlIiwiZW50ZXIiLCJleGl0IiwiaW5pdGlhbGl6ZSIsInJlYWR5IiwidmFsaWRhdGUiXS5pbmNsdWRlcyhlKX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSx1ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZU5TIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxsZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZmxpcExhYmVsIixbInVzZVByaW50ZXJTZXR0aW5nIiwib24iLCJvZmYiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxmZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZm9udEluZm8iLCEwKSkuZW1iZWQ9bnVsbCxuLm1hcD1udWxsLG4uc3Vic2V0QmVsb3c9bnVsbCxuLmFsd2F5c0VtYmVkPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZGVmYXVsdFR5cGVmYWNlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ubmV2ZXJFbWJlZD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImZvcm1GaWVsZEZpbGxpbmciKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksZGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImdyb3VwUGFyZW50Iil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxwZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaWZFbXB0eSIsWyJkYXRhVmFsdWUiLCJkYXRhR3JvdXAiLCJpZ25vcmUiLCJyZW1vdmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxnZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaW5jbHVkZVhEUENvbnRlbnQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJpbmNyZW1lbnRhbExvYWQiLFsibm9uZSIsImZvcndhcmRPbmx5Il0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkseWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImluY3JlbWVudGFsTWVyZ2UiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksbWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImludGVyYWN0aXZlIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLGJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJqb2ciLFsidXNlUHJpbnRlclNldHRpbmciLCJub25lIiwicGFnZVNldCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsYWJlbFByaW50ZXIiLCEwKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsienBsIiwiZHBsIiwiaXBsIiwidGNwbCJdKSxuLmJhdGNoT3V0cHV0PW51bGwsbi5mbGlwTGFiZWw9bnVsbCxuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksa2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxheW91dCIsWyJwYWdpbmF0ZSIsInBhbmVsIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksU2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxldmVsIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT4wfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLHhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsaW5lYXJpemVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE9lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEFlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGVTZXQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLENlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsb2ciLCEwKSkubW9kZT1udWxsLG4udGhyZXNob2xkPW51bGwsbi50bz1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtYXAiLCEwKSkuZXF1YXRlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZXF1YXRlUmFuZ2U9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtZWRpdW1JbmZvIiwhMCkpLm1hcD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwibWVzc2FnZSIsITApKS5tc2dJZD1udWxsLG4uc2V2ZXJpdHk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm1lc3NhZ2luZyIsITApKS5tZXNzYWdlPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxFZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kZSIsWyJhcHBlbmQiLCJvdmVyd3JpdGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxqZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kaWZ5QW5ub3RzIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE1lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJtc2dJZCIsMSwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksX2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIm5hbWVBdHRyIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxMZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibmV2ZXJFbWJlZCIpfXJldHVybiBsKHIpfShpLkNvbnRlbnRPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJudW1iZXJPZkNvcGllcyIsbnVsbCwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTImJmU8PTV9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksTmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm9wZW5BY3Rpb24iLCEwKSkuZGVzdGluYXRpb249bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksRGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm91dHB1dCIsITApKS50bz1udWxsLG4udHlwZT1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdXRwdXRCaW4iKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLFVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJvdXRwdXRYU0wiLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCRlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdmVycHJpbnQiLFsibm9uZSIsImJvdGgiLCJkcmF3IiwiZmllbGQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxYZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFja2V0cyIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXsiKiIhPT10aGlzW2kuJGNvbnRlbnRdJiYodGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm5bImNvbmZpZyIsImRhdGFzZXRzIiwidGVtcGxhdGUiLCJ4ZmRmIiwieHNsdCJdLmluY2x1ZGVzKGUpfSkpKX19XSkscn0oaS5TdHJpbmdPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwYWdlT2Zmc2V0IikpLng9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLngsZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLnk9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnksZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBhZ2VSYW5nZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpLHQ9W10scj0wLG49ZS5sZW5ndGg7cjxuO3IrPTIpdC5wdXNoKGUuc2xpY2UocixyKzIpKTt0aGlzW2kuJGNvbnRlbnRdPXR9fV0pLHJ9KGkuU3RyaW5nT2JqZWN0KSxHZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4U2hvcnRFZGdlIiwiZHVwbGV4TG9uZ0VkZ2UiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx6ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbk92ZXJyaWRlIixbIm5vbmUiLCJmb3JjZUR1cGxleCIsImZvcmNlRHVwbGV4TG9uZ0VkZ2UiLCJmb3JjZUR1cGxleFNob3J0RWRnZSIsImZvcmNlU2ltcGxleCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLFdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwYXJ0IiwxLChmdW5jdGlvbihlKXtyZXR1cm4hMX0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxWZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwicGNsIiwhMCkpLm5hbWU9ZS5uYW1lfHwiIixuLmJhdGNoT3V0cHV0PW51bGwsbi5mb250SW5mbz1udWxsLG4uam9nPW51bGwsbi5tZWRpdW1JbmZvPW51bGwsbi5vdXRwdXRCaW49bnVsbCxuLnBhZ2VPZmZzZXQ9bnVsbCxuLnN0YXBsZT1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwZGYiLCEwKSkubmFtZT1lLm5hbWV8fCIiLG4uYWRvYmVFeHRlbnNpb25MZXZlbD1udWxsLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmNvbXByZXNzaW9uPW51bGwsbi5jcmVhdG9yPW51bGwsbi5lbmNyeXB0aW9uPW51bGwsbi5mb250SW5mbz1udWxsLG4uaW50ZXJhY3RpdmU9bnVsbCxuLmxpbmVhcml6ZWQ9bnVsbCxuLm9wZW5BY3Rpb249bnVsbCxuLnBkZmE9bnVsbCxuLnByb2R1Y2VyPW51bGwsbi5yZW5kZXJQb2xpY3k9bnVsbCxuLnNjcmlwdE1vZGVsPW51bGwsbi5zaWxlbnRQcmludD1udWxsLG4uc3VibWl0Rm9ybWF0PW51bGwsbi50YWdnZWQ9bnVsbCxuLnZlcnNpb249bnVsbCxuLnZpZXdlclByZWZlcmVuY2VzPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksS2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBkZmEiLCEwKSkuYW1kPW51bGwsbi5jb25mb3JtYW5jZT1udWxsLG4uaW5jbHVkZVhEUENvbnRlbnQ9bnVsbCxuLnBhcnQ9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBlcm1pc3Npb25zIiwhMCkpLmFjY2Vzc2libGVDb250ZW50PW51bGwsbi5jaGFuZ2U9bnVsbCxuLmNvbnRlbnRDb3B5PW51bGwsbi5kb2N1bWVudEFzc2VtYmx5PW51bGwsbi5mb3JtRmllbGRGaWxsaW5nPW51bGwsbi5tb2RpZnlBbm5vdHM9bnVsbCxuLnBsYWludGV4dE1ldGFkYXRhPW51bGwsbi5wcmludD1udWxsLG4ucHJpbnRIaWdoUXVhbGl0eT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxaZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGlja1RyYXlCeVBERlNpemUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksUWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBpY3R1cmUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwbGFpbnRleHRNZXRhZGF0YSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx0dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJlc2VuY2UiLFsicHJlc2VydmUiLCJkaXNzb2x2ZSIsImRpc3NvbHZlU3RydWN0dXJlIiwiaWdub3JlIiwicmVtb3ZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInByZXNlbnQiLCEwKSkuYmVoYXZpb3JPdmVycmlkZT1udWxsLG4uY2FjaGU9bnVsbCxuLmNvbW1vbj1udWxsLG4uY29waWVzPW51bGwsbi5kZXN0aW5hdGlvbj1udWxsLG4uaW5jcmVtZW50YWxNZXJnZT1udWxsLG4ubGF5b3V0PW51bGwsbi5vdXRwdXQ9bnVsbCxuLm92ZXJwcmludD1udWxsLG4ucGFnaW5hdGlvbj1udWxsLG4ucGFnaW5hdGlvbk92ZXJyaWRlPW51bGwsbi5zY3JpcHQ9bnVsbCxuLnZhbGlkYXRlPW51bGwsbi54ZHA9bnVsbCxuLmRyaXZlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLmxhYmVsUHJpbnRlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBjbD1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBkZj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBzPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ud2ViQ2xpZW50PW5ldyBpLlhGQU9iamVjdEFycmF5LG4uenBsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxudD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJpbnQiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksYXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50SGlnaFF1YWxpdHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksaXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50U2NhbGluZyIsWyJhcHBkZWZhdWx0Iiwibm9TY2FsaW5nIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50ZXJOYW1lIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxzdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJvZHVjZXIiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGN0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwcyIsITApKS5uYW1lPWUubmFtZXx8IiIsbi5iYXRjaE91dHB1dD1udWxsLG4uZm9udEluZm89bnVsbCxuLmpvZz1udWxsLG4ubWVkaXVtSW5mbz1udWxsLG4ub3V0cHV0QmluPW51bGwsbi5zdGFwbGU9bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx1dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmFuZ2UiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiLSIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUudHJpbSgpLDEwKX0pKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4oZSl9KSl9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubGVuZ3RoJiZlLnB1c2goZVswXSksZX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxsdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVjb3JkIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCk7dmFyIGU9cGFyc2VJbnQodGhpc1tpLiRjb250ZW50XSwxMCk7IWlzTmFOKGUpJiZlPj0wJiYodGhpc1tpLiRjb250ZW50XT1lKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxmdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVsZXZhbnQiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLyl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksaHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmFtZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLCh0aGlzW2kuJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbaS4kY29udGVudF0pKSYmKDAscy53YXJuKSgiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lIil9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksZHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmRlclBvbGljeSIsWyJzZXJ2ZXIiLCJjbGllbnQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxwdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicnVuU2NyaXB0cyIsWyJib3RoIiwiY2xpZW50Iiwibm9uZSIsInNlcnZlciJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzY3JpcHQiLCEwKSkuY3VycmVudFBhZ2U9bnVsbCxuLmV4Y2x1ZGU9bnVsbCxuLnJ1blNjcmlwdHM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksdnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInNjcmlwdE1vZGVsIixbIlhGQSIsIm5vbmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx5dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic2V2ZXJpdHkiLFsiaWdub3JlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsInRyYWNlIiwid2FybmluZyJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLG10PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzaWxlbnRQcmludCIsITApKS5hZGRTaWxlbnRQcmludD1udWxsLG4ucHJpbnRlck5hbWU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInN0YXBsZSIpKS5tb2RlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm1vZGUsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx3dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnROb2RlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxrdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4hMH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxTdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3VibWl0Rm9ybWF0IixbImh0bWwiLCJkZWxlZ2F0ZSIsImZkZiIsInhtbCIsInBkZiJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJtaXRVcmwiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLE90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJzZXRCZWxvdyIsMTAwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9MTAwfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEF0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdXBwcmVzc0Jhbm5lciIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxDdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGFnZ2VkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLEZ0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZSIsITApKS5iYXNlPW51bGwsbi5yZWxldmFudD1udWxsLG4uc3RhcnRQYWdlPW51bGwsbi51cmk9bnVsbCxuLnhzbD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxQdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGhyZXNob2xkIixbInRyYWNlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsIndhcm5pbmciXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxUdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidG8iLFsibnVsbCIsIm1lbW9yeSIsInN0ZGVyciIsInN0ZG91dCIsInN5c3RlbSIsInVyaSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEl0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZUNhY2hlIikpLm1heEVudHJpZXM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heEVudHJpZXMsZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0cmFjZSIsITApKS5hcmVhPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxqdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwidHJhbnNmb3JtIiwhMCkpLmdyb3VwUGFyZW50PW51bGwsbi5pZkVtcHR5PW51bGwsbi5uYW1lQXR0cj1udWxsLG4ucGljdHVyZT1udWxsLG4ucHJlc2VuY2U9bnVsbCxuLnJlbmFtZT1udWxsLG4ud2hpdGVzcGFjZT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidHlwZSIsWyJub25lIiwiYXNjaWk4NSIsImFzY2lpSGV4IiwiY2NpdHRmYXgiLCJmbGF0ZSIsImx6dyIsInJ1bkxlbmd0aCIsIm5hdGl2ZSIsInhkcCIsIm1lcmdlZFhEUCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLF90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ1cmkiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEx0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ2YWxpZGF0ZSIsWyJwcmVTdWJtaXQiLCJwcmVQcmludCIsInByZUV4ZWN1dGUiLCJwcmVTYXZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksUnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuWyJkb2NSZWFkeSIsInBvc3RTaWduIl0uaW5jbHVkZXMoZSl9KSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksTnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRpb25NZXNzYWdpbmciLFsiYWxsTWVzc2FnZXNJbmRpdmlkdWFsbHkiLCJhbGxNZXNzYWdlc1RvZ2V0aGVyIiwiZmlyc3RNZXNzYWdlT25seSIsIm5vTWVzc2FnZXMiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxEdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidmVyc2lvbiIsWyIxLjciLCIxLjYiLCIxLjUiLCIxLjQiLCIxLjMiLCIxLjIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxCdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiVmVyc2lvbkNvbnRyb2wiKSkub3V0cHV0QmVsb3c9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3V0cHV0QmVsb3csWyJ3YXJuIiwiZXJyb3IiLCJ1cGRhdGUiXSksbi5zb3VyY2VBYm92ZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zb3VyY2VBYm92ZSxbIndhcm4iLCJlcnJvciJdKSxuLnNvdXJjZUJlbG93PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUJlbG93LFsidXBkYXRlIiwibWFpbnRhaW4iXSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApKS5BREJFX0pTQ29uc29sZT1udWxsLG4uQURCRV9KU0RlYnVnZ2VyPW51bGwsbi5hZGRWaWV3ZXJQcmVmZXJlbmNlcz1udWxsLG4uZHVwbGV4T3B0aW9uPW51bGwsbi5lbmZvcmNlPW51bGwsbi5udW1iZXJPZkNvcGllcz1udWxsLG4ucGFnZVJhbmdlPW51bGwsbi5waWNrVHJheUJ5UERGU2l6ZT1udWxsLG4ucHJpbnRTY2FsaW5nPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCR0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ3ZWJDbGllbnQiLCEwKSkubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIixuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIndoaXRlc3BhY2UiLFsicHJlc2VydmUiLCJsdHJpbSIsIm5vcm1hbGl6ZSIsInJ0cmltIiwidHJpbSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ3aW5kb3ciKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpO2Uuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSkpP3RoaXNbaS4kY29udGVudF09WzAsMF06KDE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pLHRoaXNbaS4kY29udGVudF09ZSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCkscXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInhkYyIsITApKS51cmk9bmV3IGkuWEZBT2JqZWN0QXJyYXksbi54c2w9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ4ZHAiLCEwKSkucGFja2V0cz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx6dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwieHNsIiwhMCkpLmRlYnVnPW51bGwsbi51cmk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksV3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInpwbCIsITApKS5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmZsaXBMYWJlbD1udWxsLG4uZm9udEluZm89bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxWdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGwoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImFjcm9iYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeShlKX19LHtrZXk6ImFjcm9iYXQ3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG0oZSl9fSx7a2V5OiJBREJFX0pTQ29uc29sZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiQURCRV9KU0RlYnVnZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJhZGRTaWxlbnRQcmludCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYWRkVmlld2VyUHJlZmVyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6ImFkanVzdERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTyhlKX19LHtrZXk6ImFnZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fSx7a2V5OiJhbHdheXNFbWJlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToiYW1kIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEYoZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFAoZSl9fSx7a2V5OiJhdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJhdXRvU2F2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJKGUpfX0se2tleToiYmFzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFKGUpfX0se2tleToiYmF0Y2hPdXRwdXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaihlKX19LHtrZXk6ImJlaGF2aW9yT3ZlcnJpZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTShlKX19LHtrZXk6ImNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJjaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTChlKX19LHtrZXk6ImNvbW1vbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSKGUpfX0se2tleToiY29tcHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTihlKX19LHtrZXk6ImNvbXByZXNzTG9naWNhbFN0cnVjdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEKGUpfX0se2tleToiY29tcHJlc3NPYmplY3RTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihlKX19LHtrZXk6ImNvbXByZXNzaW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFUoZSl9fSx7a2V5OiJjb25maWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgJChlKX19LHtrZXk6ImNvbmZvcm1hbmNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFgoZSl9fSx7a2V5OiJjb250ZW50Q29weSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIKGUpfX0se2tleToiY29waWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHEoZSl9fSx7a2V5OiJjcmVhdG9yIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEcoZSl9fSx7a2V5OiJjdXJyZW50UGFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6KGUpfX0se2tleToiZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXKGUpfX0se2tleToiZGVidWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImRlZmF1bHRUeXBlZmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZKGUpfX0se2tleToiZGVzdGluYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImRvY3VtZW50QXNzZW1ibHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSihlKX19LHtrZXk6ImRyaXZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiZHVwbGV4T3B0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFEoZSl9fSx7a2V5OiJkeW5hbWljUmVuZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiZW1iZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuZShlKX19LHtrZXk6ImVuY3J5cHRpb25MZXZlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhZShlKX19LHtrZXk6ImVuZm9yY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJlcXVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb2UoZSl9fSx7a2V5OiJlcXVhdGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzZShlKX19LHtrZXk6ImV4Y2x1ZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJleGNsdWRlTlMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdWUoZSl9fSx7a2V5OiJmbGlwTGFiZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJmb250SW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImZvcm1GaWVsZEZpbGxpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJncm91cFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkZShlKX19LHtrZXk6ImlmRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJpbmNsdWRlWERQQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnZShlKX19LHtrZXk6ImluY3JlbWVudGFsTG9hZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2ZShlKX19LHtrZXk6ImluY3JlbWVudGFsTWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJpbnRlcmFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtZShlKX19LHtrZXk6ImpvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiZShlKX19LHtrZXk6ImxhYmVsUHJpbnRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3ZShlKX19LHtrZXk6ImxheW91dCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImxldmVsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFNlKGUpfX0se2tleToibGluZWFyaXplZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB4ZShlKX19LHtrZXk6ImxvY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPZShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImxvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDZShlKX19LHtrZXk6Im1hcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBGZShlKX19LHtrZXk6Im1lZGl1bUluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUGUoZSl9fSx7a2V5OiJtZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToibWVzc2FnaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEllKGUpfX0se2tleToibW9kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFZShlKX19LHtrZXk6Im1vZGlmeUFubm90cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6Im1zZ0lkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToibmFtZUF0dHIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX2UoZSl9fSx7a2V5OiJuZXZlckVtYmVkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IExlKGUpfX0se2tleToibnVtYmVyT2ZDb3BpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJvcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToib3V0cHV0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToib3V0cHV0QmluIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJlKGUpfX0se2tleToib3V0cHV0WFNMIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToib3ZlcnByaW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToicGFja2V0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYZShlKX19LHtrZXk6InBhZ2VPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSGUoZSl9fSx7a2V5OiJwYWdlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcWUoZSl9fSx7a2V5OiJwYWdpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEdlKGUpfX0se2tleToicGFnaW5hdGlvbk92ZXJyaWRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToicGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXZShlKX19LHtrZXk6InBjbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBWZShlKX19LHtrZXk6InBkZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZZShlKX19LHtrZXk6InBkZmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgS2UoZSl9fSx7a2V5OiJwZXJtaXNzaW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKZShlKX19LHtrZXk6InBpY2tUcmF5QnlQREZTaXplIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFplKGUpfX0se2tleToicGljdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRZShlKX19LHtrZXk6InBsYWludGV4dE1ldGFkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGV0KGUpfX0se2tleToicHJlc2VuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdHQoZSl9fSx7a2V5OiJwcmVzZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJ0KGUpfX0se2tleToicHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbnQoZSl9fSx7a2V5OiJwcmludEhpZ2hRdWFsaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToicHJpbnRTY2FsaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToicHJpbnRlck5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb3QoZSl9fSx7a2V5OiJwcm9kdWNlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6InBzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToicmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJyZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJyZWxldmFudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmdChlKX19LHtrZXk6InJlbmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBodChlKX19LHtrZXk6InJlbmRlclBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InJ1blNjcmlwdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ3QoZSl9fSx7a2V5OiJzY3JpcHRNb2RlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2dChlKX19LHtrZXk6InNldmVyaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHl0KGUpfX0se2tleToic2lsZW50UHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJzdGFwbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYnQoZSl9fSx7a2V5OiJzdGFydE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd3QoZSl9fSx7a2V5OiJzdGFydFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcga3QoZSl9fSx7a2V5OiJzdWJtaXRGb3JtYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJzdWJtaXRVcmwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJzdWJzZXRCZWxvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPdChlKX19LHtrZXk6InN1cHByZXNzQmFubmVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEF0KGUpfX0se2tleToidGFnZ2VkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEN0KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRnQoZSl9fSx7a2V5OiJ0ZW1wbGF0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToidGhyZXNob2xkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToidG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVHQoZSl9fSx7a2V5OiJ0cmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFdChlKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqdChlKX19LHtrZXk6InR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTXQoZSl9fSx7a2V5OiJ1cmkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMdChlKX19LHtrZXk6InZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToidmFsaWRhdGlvbk1lc3NhZ2luZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOdChlKX19LHtrZXk6InZlcnNpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ2ZXJzaW9uQ29udHJvbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBCdChlKX19LHtrZXk6InZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFV0KGUpfX0se2tleToid2ViQ2xpZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToid2hpdGVzcGFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYdChlKX19LHtrZXk6IndpbmRvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InhkYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InhkcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHdChlKX19LHtrZXk6InhzbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6dChlKX19LHtrZXk6InpwbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19XSksZX0oKTt0LkNvbmZpZ05hbWVzcGFjZT1WdH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCxyKXtyZXR1cm4gdCYmbyhlLnByb3RvdHlwZSx0KSxyJiZvKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbChlLHQpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9aChlKTtpZih0KXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9dmFyIGQ9YS5OYW1lc3BhY2VJZHMuY29ubmVjdGlvblNldC5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJjb25uZWN0aW9uU2V0IiwhMCkpLndzZGxDb25uZWN0aW9uPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ueG1sQ29ubmVjdGlvbj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnhzZENvbm5lY3Rpb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gcyhyKX0oaS5YRkFPYmplY3QpLGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsImVmZmVjdGl2ZUlucHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksdj1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZWZmZWN0aXZlT3V0cHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCkseT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwib3BlcmF0aW9uIikpLmlkPWUuaWR8fCIiLG4uaW5wdXQ9ZS5pbnB1dHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5vdXRwdXQ9ZS5vdXRwdXR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksbT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwicm9vdEVsZW1lbnQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxiPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJzb2FwQWN0aW9uIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksdz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwic29hcEFkZHJlc3MiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ1cmkiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ3c2RsQWRkcmVzcyIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gcyhyKX0oaS5TdHJpbmdPYmplY3QpLHg9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsIndzZGxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5lZmZlY3RpdmVJbnB1dFBvbGljeT1udWxsLG4uZWZmZWN0aXZlT3V0cHV0UG9saWN5PW51bGwsbi5vcGVyYXRpb249bnVsbCxuLnNvYXBBY3Rpb249bnVsbCxuLnNvYXBBZGRyZXNzPW51bGwsbi53c2RsQWRkcmVzcz1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ4bWxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51cmk9bnVsbCxufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksQT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwieHNkQ29ubmVjdGlvbiIsITApKS5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4ucm9vdEVsZW1lbnQ9bnVsbCxuLnVyaT1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2ModGhpcyxlKX1yZXR1cm4gcyhlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXJldHVybiBlW3RdKHIpfX0se2tleToiY29ubmVjdGlvblNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBwKGUpfX0se2tleToiZWZmZWN0aXZlSW5wdXRQb2xpY3kiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZyhlKX19LHtrZXk6ImVmZmVjdGl2ZU91dHB1dFBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2KGUpfX0se2tleToib3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHkoZSl9fSx7a2V5OiJyb290RWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtKGUpfX0se2tleToic29hcEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToic29hcEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdyhlKX19LHtrZXk6InVyaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToid3NkbEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6IndzZGxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHgoZSl9fSx7a2V5OiJ4bWxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJ4c2RDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fV0pLGV9KCk7dC5Db25uZWN0aW9uU2V0TmFtZXNwYWNlPUN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFzZXRzTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwNiksaT1yKDIwOCk7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1pLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8odGhpcyxyKSx0LmNhbGwodGhpcyxkLCJkYXRhIixlKX1yZXR1cm4gYyhyLFt7a2V5OmEuJGlzTnNBZ25vc3RpYyx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX1dKSxyfShhLlhtbE9iamVjdCksZz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBvKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZGF0YXNldHMiLCEwKSkuZGF0YT1udWxsLG4uU2lnbmF0dXJlPW51bGwsbn1yZXR1cm4gYyhyLFt7a2V5OmEuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVthLiRub2RlTmFtZV07KCJkYXRhIj09PXQmJmVbYS4kbmFtZXNwYWNlSWRdPT09ZHx8IlNpZ25hdHVyZSI9PT10JiZlW2EuJG5hbWVzcGFjZUlkXT09PWkuTmFtZXNwYWNlSWRzLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpLHRoaXNbYS4kYXBwZW5kQ2hpbGRdKGUpfX1dKSxyfShhLlhGQU9iamVjdCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmkuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImRhdGFzZXRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGcoZSl9fSx7a2V5OiJkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHAoZSl9fV0pLGV9KCk7dC5EYXRhc2V0c05hbWVzcGFjZT12fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Mb2NhbGVTZXROYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWQoZSk7aWYodCl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWEuTmFtZXNwYWNlSWRzLmxvY2FsZVNldC5pZCxnPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjYWxlbmRhclN5bWJvbHMiLCEwKSkubmFtZT0iZ3JlZ29yaWFuIixuLmRheU5hbWVzPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG4uZXJhTmFtZXM9bnVsbCxuLm1lcmlkaWVtTmFtZXM9bnVsbCxuLm1vbnRoTmFtZXM9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLHY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImN1cnJlbmN5U3ltYm9sIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSx5PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjdXJyZW5jeVN5bWJvbHMiLCEwKSkuY3VycmVuY3lTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMyksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLG09ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLGI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJucyIsITApKS5kYXRlUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF0ZVRpbWVTeW1ib2xzIil9cmV0dXJuIGMocil9KGkuQ29udGVudE9iamVjdCksaz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF5Iil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJkYXlOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLmRheT1uZXcgaS5YRkFPYmplY3RBcnJheSg3KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCkseD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZXJhIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJlcmFOYW1lcyIsITApKS5lcmE9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEE9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZSIsITApKS5kZXNjPWUuZGVzY3x8IiIsbi5uYW1lPSJpc29uYW1lIixuLmNhbGVuZGFyU3ltYm9scz1udWxsLG4uY3VycmVuY3lTeW1ib2xzPW51bGwsbi5kYXRlUGF0dGVybnM9bnVsbCxuLmRhdGVUaW1lU3ltYm9scz1udWxsLG4ubnVtYmVyUGF0dGVybnM9bnVsbCxuLm51bWJlclN5bWJvbHM9bnVsbCxuLnRpbWVQYXR0ZXJucz1udWxsLG4udHlwZUZhY2VzPW51bGwsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZVNldCIsITApKS5sb2NhbGU9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLHAsIm1lcmlkaWVtIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJtZXJpZGllbU5hbWVzIiwhMCkpLm1lcmlkaWVtPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxwLCJtb250aCIpfXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksST1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibW9udGhOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLm1vbnRoPW5ldyBpLlhGQU9iamVjdEFycmF5KDEyKSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksRT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyUGF0dGVybiIpKS5uYW1lPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJQYXR0ZXJucyIsITApKS5udW1iZXJQYXR0ZXJuPW5ldyBpLlhGQU9iamVjdEFycmF5KDQpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJTeW1ib2wiKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZGVjaW1hbCIsImdyb3VwaW5nIiwicGVyY2VudCIsIm1pbnVzIiwiemVybyJdKSxufXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksXz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyU3ltYm9scyIsITApKS5udW1iZXJTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoNSksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLFI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJucyIsITApKS50aW1lUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksTj1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwidHlwZUZhY2UiLCEwKSkubmFtZT0iInxlLm5hbWUsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInR5cGVGYWNlcyIsITApKS50eXBlRmFjZT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt1KHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImNhbGVuZGFyU3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnKGUpfX0se2tleToiY3VycmVuY3lTeW1ib2wiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdihlKX19LHtrZXk6ImN1cnJlbmN5U3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5KGUpfX0se2tleToiZGF0ZVBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbShlKX19LHtrZXk6ImRhdGVQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiZGF0ZVRpbWVTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJkYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgayhlKX19LHtrZXk6ImRheU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFMoZSl9fSx7a2V5OiJlcmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImVyYU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJsb2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToibWVyaWRpZW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRihlKX19LHtrZXk6Im1lcmlkaWVtTmFtZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUChlKX19LHtrZXk6Im1vbnRoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJtb250aE5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqKGUpfX0se2tleToibnVtYmVyU3ltYm9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE0oZSl9fSx7a2V5OiJudW1iZXJTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJ0aW1lUGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToidGltZVBhdHRlcm5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFIoZSl9fSx7a2V5OiJ0eXBlRmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOKGUpfX0se2tleToidHlwZUZhY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fV0pLGV9KCk7dC5Mb2NhbGVTZXROYW1lc3BhY2U9Qn0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2lnbmF0dXJlTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zaWduYXR1cmUuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGModGhpcyxpKSxhLmNhbGwodGhpcyxmLCJzaWduYXR1cmUiLCEwKX1yZXR1cm4gcyhpKX0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBzKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJzaWduYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlNpZ25hdHVyZU5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHlsZXNoZWV0TmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zdHlsZXNoZWV0LmlkLGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9bCh0KTtpZihyKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBjKHRoaXMsaSksYS5jYWxsKHRoaXMsZiwic3R5bGVzaGVldCIsITApfXJldHVybiBzKGkpfShpLlhGQU9iamVjdCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtjKHRoaXMsZSl9cmV0dXJuIHMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6InN0eWxlc2hlZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlN0eWxlc2hlZXROYW1lc3BhY2U9ZH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWGRwTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy54ZHAuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShoLGUpO3ZhciB0LHIscz0odD1oLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGgoZSl7dmFyIHQ7cmV0dXJuIG8odGhpcyxoKSwodD1zLmNhbGwodGhpcyxmLCJ4ZHAiLCEwKSkudXVpZD1lLnV1aWR8fCIiLHQudGltZVN0YW1wPWUudGltZVN0YW1wfHwiIix0LmNvbmZpZz1udWxsLHQuY29ubmVjdGlvblNldD1udWxsLHQuZGF0YXNldHM9bnVsbCx0LmxvY2FsZVNldD1udWxsLHQuc3R5bGVzaGVldD1uZXcgaS5YRkFPYmplY3RBcnJheSx0LnRlbXBsYXRlPW51bGwsdH1yZXR1cm4gYyhoLFt7a2V5OmkuJG9uQ2hpbGRDaGVjayx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hLk5hbWVzcGFjZUlkc1tlW2kuJG5vZGVOYW1lXV07cmV0dXJuIHQmJmVbaS4kbmFtZXNwYWNlSWRdPT09dC5pZH19XSksaH0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpfXJldHVybiBjKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJ4ZHAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlhkcE5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YaHRtbE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigyMDgpLG89cigyMTMpLHM9cigyMDcpO2Z1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIHQmJnUoZS5wcm90b3R5cGUsdCksciYmdShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gZigpe3JldHVybiBmPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ZyhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGgoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZChlLHQpfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGQoZSx0KX1mdW5jdGlvbiBwKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWcoZSk7aWYodCl7dmFyIGk9Zyh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8bShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24geShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9bShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gbShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgdz1pLk5hbWVzcGFjZUlkcy54aHRtbC5pZCxrPVN5bWJvbCgpLFM9bmV3IFNldChbImNvbG9yIiwiZm9udCIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtd2VpZ2h0IiwibWFyZ2luIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsImxldHRlci1zcGFjaW5nIiwibGluZS1oZWlnaHQiLCJvcnBoYW5zIiwicGFnZS1icmVhay1hZnRlciIsInBhZ2UtYnJlYWstYmVmb3JlIiwicGFnZS1icmVhay1pbnNpZGUiLCJ0YWItaW50ZXJ2YWwiLCJ0YWItc3RvcCIsInRleHQtYWxpZ24iLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LWluZGVudCIsInZlcnRpY2FsLWFsaWduIiwid2lkb3dzIiwia2VybmluZy1tb2RlIiwieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZSIsInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIiwieGZhLXNwYWNlcnVuIiwieGZhLXRhYi1zdG9wcyJdKSx4PW5ldyBNYXAoW1sicGFnZS1icmVhay1hZnRlciIsImJyZWFrQWZ0ZXIiXSxbInBhZ2UtYnJlYWstYmVmb3JlIiwiYnJlYWtCZWZvcmUiXSxbInBhZ2UtYnJlYWstaW5zaWRlIiwiYnJlYWtJbnNpZGUiXSxbImtlcm5pbmctbW9kZSIsZnVuY3Rpb24oZSl7cmV0dXJuIm5vbmUiPT09ZT8ibm9uZSI6Im5vcm1hbCJ9XSxbInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLGZ1bmN0aW9uKGUpe3JldHVybiJzY2FsZVgoIi5jb25jYXQoTWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpLCIpIil9XSxbInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIixmdW5jdGlvbihlKXtyZXR1cm4ic2NhbGVZKCIuY29uY2F0KE1hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQoZSkvMTAwKSkudG9GaXhlZCgyKSwiKSIpfV0sWyJ4ZmEtc3BhY2VydW4iLCIiXSxbInhmYS10YWItc3RvcHMiLCIiXSxbImZvbnQtc2l6ZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10LmZvbnRTaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpLCgwLG8ubWVhc3VyZVRvU3RyaW5nKSguOTkqZSl9XSxbImxldHRlci1zcGFjaW5nIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJsaW5lLWhlaWdodCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tYm90dG9tIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tbGVmdCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luLXJpZ2h0IixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tdG9wIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJ0ZXh0LWluZGVudCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsiZm9udC1mYW1pbHkiLGZ1bmN0aW9uKGUpe3JldHVybiBlfV0sWyJ2ZXJ0aWNhbC1hbGlnbiIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dXSksTz0vXHMrL2csQT0vW1xyXG5dKy9nLEM9L1xyXG4/L2c7ZnVuY3Rpb24gRihlLHQscil7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gbjt2YXIgaSxjPU9iamVjdC5jcmVhdGUobnVsbCksdT15KGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2Zvcih1LnMoKTshKGk9dS5uKCkpLmRvbmU7KXt2YXIgbD12KGkudmFsdWUsMiksZj1sWzBdLGg9bFsxXSxkPXguZ2V0KGYpO2lmKCIiIT09ZCl7dmFyIHA9aDtkJiYocD0ic3RyaW5nIj09dHlwZW9mIGQ/ZDpkKGgsYykpLGYuZW5kc1dpdGgoInNjYWxlIik/bi50cmFuc2Zvcm0/bi50cmFuc2Zvcm09IiIuY29uY2F0KG5bZl0sIiAiKS5jb25jYXQocCk6bi50cmFuc2Zvcm09cDpuW2YucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSkpXT1wfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9aWYobi5mb250RmFtaWx5JiYoMCxvLnNldEZvbnRGYW1pbHkpKHt0eXBlZmFjZTpuLmZvbnRGYW1pbHksd2VpZ2h0Om4uZm9udFdlaWdodHx8Im5vcm1hbCIscG9zdHVyZTpuLmZvbnRTdHlsZXx8Im5vcm1hbCIsc2l6ZTpjLmZvbnRTaXplfHwwfSx0LHRbYS4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixuKSxyJiZuLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09bi52ZXJ0aWNhbEFsaWduJiZuLmZvbnRTaXplKXt2YXIgZz0oMCxzLmdldE1lYXN1cmVtZW50KShuLmZvbnRTaXplKTtuLmZvbnRTaXplPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSguNTgzKmcpLG4udmVydGljYWxBbGlnbj0oMCxvLm1lYXN1cmVUb1N0cmluZykoTWF0aC5zaWduKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKG4udmVydGljYWxBbGlnbikpKmcqLjMzMyl9cmV0dXJuIHImJm4uZm9udFNpemUmJihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KG4uZm9udFNpemUsIiAqIHZhcigtLXNjYWxlLWZhY3RvcikpIikpLCgwLG8uZml4VGV4dEluZGVudCkobiksbn12YXIgUD1uZXcgU2V0KFsiYm9keSIsImh0bWwiXSksVD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIGModGhpcyxyKSwoYT10LmNhbGwodGhpcyx3LG4pKVtrXT0hMSxhLnN0eWxlPWUuc3R5bGV8fCIiLGF9cmV0dXJuIGwocixbe2tleTphLiRjbGVhbix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtmKGcoci5wcm90b3R5cGUpLGEuJGNsZWFuLHRoaXMpLmNhbGwodGhpcyxlKSx0aGlzLnN0eWxlPSh0PXRoaXMpLnN0eWxlP3Quc3R5bGUudHJpbSgpLnNwbGl0KC9ccyo7XHMqLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvXHMqOlxzKi8sMil9KSkuZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgcj12KGUsMiksbj1yWzBdLGk9clsxXTtyZXR1cm4iZm9udC1mYW1pbHkiPT09biYmdFthLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZChpKSxTLmhhcyhuKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmpvaW4oIjoiKX0pKS5qb2luKCI7Iik6IiJ9fSx7a2V5OmEuJGFjY2VwdFdoaXRlc3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hUC5oYXModGhpc1thLiRub2RlTmFtZV0pfX0se2tleTphLiRvblRleHQsdmFsdWU6ZnVuY3Rpb24oZSl7YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXT90aGlzW2tdPSEwOihlPWUucmVwbGFjZShBLCIiKSx0aGlzLnN0eWxlLmluY2x1ZGVzKCJ4ZmEtc3BhY2VydW46eWVzIil8fChlPWUucmVwbGFjZShPLCIgIikpKSxlJiYodGhpc1thLiRjb250ZW50XSs9ZSl9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPXt0b3A6TmFOLGJvdHRvbTpOYU4sbGVmdDpOYU4scmlnaHQ6TmFOfSxvPW51bGwsYz15KHRoaXMuc3R5bGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2ZvcihjLnMoKTshKHQ9Yy5uKCkpLmRvbmU7KXt2YXIgdT12KHQudmFsdWUsMiksbD11WzBdLGY9dVsxXTtzd2l0Y2gobCl7Y2FzZSJmb250LWZhbWlseSI6bi50eXBlZmFjZT0oMCxzLnN0cmlwUXVvdGVzKShmKTticmVhaztjYXNlImZvbnQtc2l6ZSI6bi5zaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UiZm9udC13ZWlnaHQiOm4ud2VpZ2h0PWY7YnJlYWs7Y2FzZSJmb250LXN0eWxlIjpuLnBvc3R1cmU9ZjticmVhaztjYXNlImxldHRlci1zcGFjaW5nIjpuLmxldHRlclNwYWNpbmc9KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4iOnZhciBoPWYuc3BsaXQoLyBcdC8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAscy5nZXRNZWFzdXJlbWVudCkoZSl9KSk7c3dpdGNoKGgubGVuZ3RoKXtjYXNlIDE6aS50b3A9aS5ib3R0b209aS5sZWZ0PWkucmlnaHQ9aFswXTticmVhaztjYXNlIDI6aS50b3A9aS5ib3R0b209aFswXSxpLmxlZnQ9aS5yaWdodD1oWzFdO2JyZWFrO2Nhc2UgMzppLnRvcD1oWzBdLGkuYm90dG9tPWhbMl0saS5sZWZ0PWkucmlnaHQ9aFsxXTticmVhaztjYXNlIDQ6aS50b3A9aFswXSxpLmxlZnQ9aFsxXSxpLmJvdHRvbT1oWzJdLGkucmlnaHQ9aFszXX1icmVhaztjYXNlIm1hcmdpbi10b3AiOmkudG9wPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLWJvdHRvbSI6aS5ib3R0b209KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4tbGVmdCI6aS5sZWZ0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLXJpZ2h0IjppLnJpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibGluZS1oZWlnaHQiOm89KDAscy5nZXRNZWFzdXJlbWVudCkoZil9fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1pZihlLnB1c2hEYXRhKG4saSxvKSx0aGlzW2EuJGNvbnRlbnRdKWUuYWRkU3RyaW5nKHRoaXNbYS4kY29udGVudF0pO2Vsc2V7dmFyIGQscD15KHRoaXNbYS4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTsiI3RleHQiIT09Z1thLiRub2RlTmFtZV0/Z1thLiRwdXNoR2x5cGhzXShlKTplLmFkZFN0cmluZyhnW2EuJGNvbnRlbnRdKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fXImJmUucG9wRm9udCgpfX0se2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1bXTtyZXR1cm4gdGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnJ9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwIT09ci5sZW5ndGh8fHRoaXNbYS4kY29udGVudF0/KHQ9dGhpc1trXT90aGlzW2EuJGNvbnRlbnRdP3RoaXNbYS4kY29udGVudF0ucmVwbGFjZShDLCJcbiIpOnZvaWQgMDp0aGlzW2EuJGNvbnRlbnRdfHx2b2lkIDAscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6dGhpc1thLiRub2RlTmFtZV0sYXR0cmlidXRlczp7aHJlZjp0aGlzLmhyZWYsc3R5bGU6Rih0aGlzLnN0eWxlLHRoaXMsdGhpc1trXSl9LGNoaWxkcmVuOnIsdmFsdWU6dH0pKTpzLkhUTUxSZXN1bHQuRU1QVFl9fV0pLHJ9KGEuWG1sT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxlLCJhIikpLmhyZWY9KDAsby5maXhVUkwpKGUuaHJlZil8fCIiLG59cmV0dXJuIGwocil9KFQpLEU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImIiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wdXNoRm9udCh7d2VpZ2h0OiJib2xkIn0pLGYoZyhyLnByb3RvdHlwZSksYS4kcHVzaEdseXBocyx0aGlzKS5jYWxsKHRoaXMsZSksZS5wb3BGb250KCl9fV0pLHJ9KFQpLGo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImJvZHkiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1mKGcoci5wcm90b3R5cGUpLGEuJHRvSFRNTCx0aGlzKS5jYWxsKHRoaXMsZSksbj10Lmh0bWw7cmV0dXJuIG4/KG4ubmFtZT0iZGl2IixuLmF0dHJpYnV0ZXMuY2xhc3M9WyJ4ZmFSaWNoIl0sdCk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShUKSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJiciIpfXJldHVybiBsKHIsW3trZXk6YS4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJcbiJ9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5hZGRTdHJpbmcoIlxuIil9fSx7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImJyIn0pfX1dKSxyfShUKSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJodG1sIil9cmV0dXJuIGwocixbe2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYodGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnR9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwPT09dC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSx2YWx1ZTp0aGlzW2EuJGNvbnRlbnRdfHwiIn0pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIHI9dFswXTtpZihyLmF0dHJpYnV0ZXMmJnIuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhyKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19XSkscn0oVCksTD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiaSIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtlLnB1c2hGb250KHtwb3N0dXJlOiJpdGFsaWMifSksZihnKHIucHJvdG90eXBlKSxhLiRwdXNoR2x5cGhzLHRoaXMpLmNhbGwodGhpcyxlKSxlLnBvcEZvbnQoKX19XSkscn0oVCksUj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwibGkiKX1yZXR1cm4gbChyKX0oVCksTj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwib2wiKX1yZXR1cm4gbChyKX0oVCksRD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwicCIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtmKGcoci5wcm90b3R5cGUpLGEuJHB1c2hHbHlwaHMsdGhpcykuY2FsbCh0aGlzLGUsITEpLGUuYWRkU3RyaW5nKCJcbiIpLGUuYWRkUGFyYSgpLGUucG9wRm9udCgpfX0se2tleTphLiR0ZXh0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYS4kZ2V0UGFyZW50XSgpW2EuJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcyk6ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcykrIlxuIn19XSkscn0oVCksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3BhbiIpfXJldHVybiBsKHIpfShUKSxVPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJzdWIiKX1yZXR1cm4gbChyKX0oVCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3VwIil9cmV0dXJuIGwocil9KFQpLFg9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsInVsIil9cmV0dXJuIGwocil9KFQpLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBsKGUsbnVsbCxbe2tleTppLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJiIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJib2R5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGooZSl9fSx7a2V5OiJiciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNKGUpfX0se2tleToiaHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBfKGUpfX0se2tleToiaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToibGkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUihlKX19LHtrZXk6Im9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE4oZSl9fSx7a2V5OiJwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fSx7a2V5OiJzcGFuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEIoZSl9fSx7a2V5OiJzdWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVShlKX19LHtrZXk6InN1cCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyAkKGUpfX0se2tleToidWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWChlKX19XSksZX0oKTt0LlhodG1sTmFtZXNwYWNlPUh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgbj1yKDIwOCksYT1yKDIwNik7ZnVuY3Rpb24gaShlKXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0saShlKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWkoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1pKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aShhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMubmFtZXNwYWNlSWQ9dH12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6bi4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGEuWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsZSx0KX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LlVua25vd25OYW1lc3BhY2U9c30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGF0YXNldFJlYWRlcj12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTk1KTtmdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoKXtyZXR1cm4gbD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oZSx0KXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSYmbnVsbCE9PShlPWgoZSkpOyk7cmV0dXJuIGV9KGUsdCk7aWYobil7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpO3JldHVybiBhLmdldD9hLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9lOnIpOmEudmFsdWV9fSxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX1mdW5jdGlvbiBkKGUpe3RyeXtyZXR1cm4oMCxhLnN0cmluZ1RvVVRGOFN0cmluZykoZSl9Y2F0Y2godCl7cmV0dXJuKDAsYS53YXJuKSgnVVRGLTggZGVjb2RpbmcgZmFpbGVkOiAiJy5jb25jYXQodCwnIi4nKSksZX19dmFyIHA9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9aCh0KTtpZihyKXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3ZhciB0O3JldHVybiBzKHRoaXMsaSksKHQ9YS5jYWxsKHRoaXMsZSkpLm5vZGU9bnVsbCx0fXJldHVybiB1KGksW3trZXk6Im9uRW5kRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bChoKGkucHJvdG90eXBlKSwib25FbmRFbGVtZW50Iix0aGlzKS5jYWxsKHRoaXMsZSk7aWYodCYmInhmYTpkYXRhc2V0cyI9PT1lKXRocm93IHRoaXMubm9kZT10LG5ldyBFcnJvcigiQWJvcnRpbmcgRGF0YXNldFhNTFBhcnNlci4iKX19XSksaX0oby5TaW1wbGVYTUxQYXJzZXIpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKHModGhpcyxlKSx0LmRhdGFzZXRzKXRoaXMubm9kZT1uZXcgby5TaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcodC5kYXRhc2V0cykuZG9jdW1lbnRFbGVtZW50O2Vsc2V7dmFyIHI9bmV3IHAoe2hhc0F0dHJpYnV0ZXM6ITB9KTt0cnl7ci5wYXJzZUZyb21TdHJpbmcodFsieGRwOnhkcCJdKX1jYXRjaChlKXt9dGhpcy5ub2RlPXIubm9kZX19cmV0dXJuIHUoZSxbe2tleToiZ2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLm5vZGV8fCFlKXJldHVybiIiO3ZhciB0PXRoaXMubm9kZS5zZWFyY2hOb2RlKCgwLGkucGFyc2VYRkFQYXRoKShlKSwwKTtpZighdClyZXR1cm4iIjt2YXIgcj10LmZpcnN0Q2hpbGQ7cmV0dXJuIHImJiJ2YWx1ZSI9PT1yLm5vZGVOYW1lP3QuY2hpbGRyZW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZChlLnRleHRDb250ZW50KX0pKTpkKHQudGV4dENvbnRlbnQpfX1dKSxlfSgpO3QuRGF0YXNldFJlYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWFJlZj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTQ2KSxzPXIoMTM2KSxjPXIoMTk2KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoKXtsPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciBsPWMuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXUoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGYoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBoKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe2YoaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2YoaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBwKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cChlLHQpOnZvaWQgMH19KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5wZGZNYW5hZ2VyPXIsdGhpcy5lbnRyaWVzPVtdLHRoaXMueHJlZnN0bXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9jYWNoZU1hcD1uZXcgTWFwLHRoaXMuX3BlbmRpbmdSZWZzPW5ldyBhLlJlZlNldCx0aGlzLnN0YXRzPW5ldyBpLkRvY1N0YXRzKHIubXNnSGFuZGxlciksdGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT1udWxsLHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsfXZhciB0LHIsdSxmO3JldHVybiB0PWUscj1be2tleToiZ2V0TmV3UGVyc2lzdGVudFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSl7bnVsbD09PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0mJih0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO3ZhciB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKztyZXR1cm4gdGhpcy5fY2FjaGVNYXAuc2V0KHQsZSksYS5SZWYuZ2V0KHQsMCl9fSx7a2V5OiJnZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0mJih0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09dGhpcy5lbnRyaWVzLmxlbmd0aHx8MSksYS5SZWYuZ2V0KHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSsrLDApfX0se2tleToicmVzZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGx9fSx7a2V5OiJzZXRTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RhcnRYUmVmUXVldWU9W2VdfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG89YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtvPygoMCxuLndhcm4pKCJJbmRleGluZyBhbGwgUERGIG9iamVjdHMiKSxlPXRoaXMuaW5kZXhPYmplY3RzKCkpOmU9dGhpcy5yZWFkWFJlZigpLGUuYXNzaWduWHJlZih0aGlzKSx0aGlzLnRyYWlsZXI9ZTt0cnl7dD1lLmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHQgaW5zdGFuY2VvZiBhLkRpY3Qpe3ZhciBzPWUuZ2V0KCJJRCIpLHU9cyYmcy5sZW5ndGg/c1swXToiIjt0LnN1cHByZXNzRW5jcnlwdGlvbj0hMCx0aGlzLmVuY3J5cHQ9bmV3IGMuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSh0LHUsdGhpcy5wZGZNYW5hZ2VyLnBhc3N3b3JkKX10cnl7cj1lLmdldCgiUm9vdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlJvb3QiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHIgaW5zdGFuY2VvZiBhLkRpY3QpdHJ5e2lmKHIuZ2V0KCJQYWdlcyIpaW5zdGFuY2VvZiBhLkRpY3QpcmV0dXJuIHZvaWQodGhpcy5yb290PXIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlBhZ2VzIiByZWZlcmVuY2U6ICInLmNvbmNhdChlLCciLicpKX1pZighbyl0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247dGhyb3cgbmV3IG4uSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBSb290IHJlZmVyZW5jZS4iKX19LHtrZXk6InByb2Nlc3NYUmVmVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpeyJ0YWJsZVN0YXRlImluIHRoaXN8fCh0aGlzLnRhYmxlU3RhdGU9e2VudHJ5TnVtOjAsc3RyZWFtUG9zOmUubGV4ZXIuc3RyZWFtLnBvcyxwYXJzZXJCdWYxOmUuYnVmMSxwYXJzZXJCdWYyOmUuYnVmMn0pO3ZhciB0PXRoaXMucmVhZFhSZWZUYWJsZShlKTtpZighKDAsYS5pc0NtZCkodCwidHJhaWxlciIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO3ZhciByPWUuZ2V0T2JqKCk7aWYociBpbnN0YW5jZW9mIGEuRGljdHx8IXIuZGljdHx8KHI9ci5kaWN0KSwhKHIgaW5zdGFuY2VvZiBhLkRpY3QpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnkiKTtyZXR1cm4gZGVsZXRlIHRoaXMudGFibGVTdGF0ZSxyfX0se2tleToicmVhZFhSZWZUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxleGVyLnN0cmVhbSxpPXRoaXMudGFibGVTdGF0ZTtmb3Ioci5wb3M9aS5zdHJlYW1Qb3MsZS5idWYxPWkucGFyc2VyQnVmMSxlLmJ1ZjI9aS5wYXJzZXJCdWYyOzspe2lmKCEoImZpcnN0RW50cnlOdW0iaW4gaSl8fCEoImVudHJ5Q291bnQiaW4gaSkpe2lmKCgwLGEuaXNDbWQpKHQ9ZS5nZXRPYmooKSwidHJhaWxlciIpKWJyZWFrO2kuZmlyc3RFbnRyeU51bT10LGkuZW50cnlDb3VudD1lLmdldE9iaigpfXZhciBvPWkuZmlyc3RFbnRyeU51bSxzPWkuZW50cnlDb3VudDtpZighTnVtYmVyLmlzSW50ZWdlcihvKXx8IU51bWJlci5pc0ludGVnZXIocykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IodmFyIGM9aS5lbnRyeU51bTtjPHM7YysrKXtpLnN0cmVhbVBvcz1yLnBvcyxpLmVudHJ5TnVtPWMsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyO3ZhciB1PXt9O3Uub2Zmc2V0PWUuZ2V0T2JqKCksdS5nZW49ZS5nZXRPYmooKTt2YXIgbD1lLmdldE9iaigpO2lmKGwgaW5zdGFuY2VvZiBhLkNtZClzd2l0Y2gobC5jbWQpe2Nhc2UiZiI6dS5mcmVlPSEwO2JyZWFrO2Nhc2UibiI6dS51bmNvbXByZXNzZWQ9ITB9aWYoIU51bWJlci5pc0ludGVnZXIodS5vZmZzZXQpfHwhTnVtYmVyLmlzSW50ZWdlcih1Lmdlbil8fCF1LmZyZWUmJiF1LnVuY29tcHJlc3NlZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICIuY29uY2F0KG8sIiwgIikuY29uY2F0KHMpKTswPT09YyYmdS5mcmVlJiYxPT09byYmKG89MCksdGhpcy5lbnRyaWVzW2Mrb118fCh0aGlzLmVudHJpZXNbYytvXT11KX1pLmVudHJ5TnVtPTAsaS5zdHJlYW1Qb3M9ci5wb3MsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyLGRlbGV0ZSBpLmZpcnN0RW50cnlOdW0sZGVsZXRlIGkuZW50cnlDb3VudH1pZih0aGlzLmVudHJpZXNbMF0mJiF0aGlzLmVudHJpZXNbMF0uZnJlZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB1bmV4cGVjdGVkIGZpcnN0IG9iamVjdCIpO3JldHVybiB0fX0se2tleToicHJvY2Vzc1hSZWZTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCEoInN0cmVhbVN0YXRlImluIHRoaXMpKXt2YXIgdD1lLmRpY3Qscj10LmdldCgiVyIpLG49dC5nZXQoIkluZGV4Iik7bnx8KG49WzAsdC5nZXQoIlNpemUiKV0pLHRoaXMuc3RyZWFtU3RhdGU9e2VudHJ5UmFuZ2VzOm4sYnl0ZVdpZHRoczpyLGVudHJ5TnVtOjAsc3RyZWFtUG9zOmUucG9zfX1yZXR1cm4gdGhpcy5yZWFkWFJlZlN0cmVhbShlKSxkZWxldGUgdGhpcy5zdHJlYW1TdGF0ZSxlLmRpY3R9fSx7a2V5OiJyZWFkWFJlZlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHJlYW1TdGF0ZTtlLnBvcz10LnN0cmVhbVBvcztmb3IodmFyIHI9ZCh0LmJ5dGVXaWR0aHMsMyksYT1yWzBdLGk9clsxXSxvPXJbMl0scz10LmVudHJ5UmFuZ2VzO3MubGVuZ3RoPjA7KXt2YXIgYz1kKHMsMiksdT1jWzBdLGw9Y1sxXTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiByYW5nZSBmaWVsZHM6ICIuY29uY2F0KHUsIiwgIikuY29uY2F0KGwpKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IU51bWJlci5pc0ludGVnZXIoaSl8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogIi5jb25jYXQodSwiLCAiKS5jb25jYXQobCkpO2Zvcih2YXIgZj10LmVudHJ5TnVtO2Y8bDsrK2Ype3QuZW50cnlOdW09Zix0LnN0cmVhbVBvcz1lLnBvcztmb3IodmFyIGg9MCxwPTAsZz0wLHY9MDt2PGE7Kyt2KXt2YXIgeT1lLmdldEJ5dGUoKTtpZigtMT09PXkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy4iKTtoPWg8PDh8eX0wPT09YSYmKGg9MSk7Zm9yKHZhciBtPTA7bTxpOysrbSl7dmFyIGI9ZS5nZXRCeXRlKCk7aWYoLTE9PT1iKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtwPXA8PDh8Yn1mb3IodmFyIHc9MDt3PG87Kyt3KXt2YXIgaz1lLmdldEJ5dGUoKTtpZigtMT09PWspdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtnPWc8PDh8a312YXIgUz17fTtzd2l0Y2goUy5vZmZzZXQ9cCxTLmdlbj1nLGgpe2Nhc2UgMDpTLmZyZWU9ITA7YnJlYWs7Y2FzZSAxOlMudW5jb21wcmVzc2VkPSEwO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogIi5jb25jYXQoaCkpfXRoaXMuZW50cmllc1t1K2ZdfHwodGhpcy5lbnRyaWVzW3UrZl09Uyl9dC5lbnRyeU51bT0wLHQuc3RyZWFtUG9zPWUucG9zLHMuc3BsaWNlKDAsMil9fX0se2tleToiaW5kZXhPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIHI9IiIsbj1lW3RdOzEwIT09biYmMTMhPT1uJiY2MCE9PW4mJiEoKyt0Pj1lLmxlbmd0aCk7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUobiksbj1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHQoZSx0LHIpe2Zvcih2YXIgbj1yLmxlbmd0aCxhPWUubGVuZ3RoLGk9MDt0PGE7KXtmb3IodmFyIG89MDtvPG4mJmVbdCtvXT09PXJbb107KSsrbztpZihvPj1uKWJyZWFrO3QrKyxpKyt9cmV0dXJuIGl9dmFyIHI9L1xiKGVuZG9ianxcZCtccytcZCtccytvYmp8eHJlZnx0cmFpbGVyKVxiL2cscz0vXGIoc3RhcnR4cmVmfFxkK1xzK1xkK1xzK29iailcYi9nLGM9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLHU9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSksbD1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLGY9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTAsdGhpcy5fY2FjaGVNYXAuY2xlYXIoKTt2YXIgaD10aGlzLnN0cmVhbTtoLnBvcz0wO2Zvcih2YXIgZCxwLGc9aC5nZXRCeXRlcygpLHY9KDAsbi5ieXRlc1RvU3RyaW5nKShnKSx5PWcubGVuZ3RoLG09aC5zdGFydCxiPVtdLHc9W107bTx5Oyl7dmFyIGs9Z1ttXTtpZig5IT09ayYmMTAhPT1rJiYxMyE9PWsmJjMyIT09aylpZigzNyE9PWspe3ZhciBTPWUoZyxtKSx4PXZvaWQgMDtpZihTLnN0YXJ0c1dpdGgoInhyZWYiKSYmKDQ9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbNF0pKSltKz10KGcsbSx1KSxiLnB1c2gobSksbSs9dChnLG0sbCk7ZWxzZSBpZih4PWMuZXhlYyhTKSl7dmFyIE89MHx4WzFdLEE9MHx4WzJdLEM9bStTLmxlbmd0aCxGPXZvaWQgMCxQPSExO2lmKHRoaXMuZW50cmllc1tPXSl7aWYodGhpcy5lbnRyaWVzW09dLmdlbj09PUEpdHJ5e25ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoaC5tYWtlU3ViU3RyZWFtKEMpKX0pLmdldE9iaigpLFA9ITB9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIGkuUGFyc2VyRU9GRXhjZXB0aW9uPygwLG4ud2FybikoImluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCIuY29uY2F0KFMsJyk6ICInKS5jb25jYXQoZSwnIi4nKSk6UD0hMH19ZWxzZSBQPSEwO1AmJih0aGlzLmVudHJpZXNbT109e29mZnNldDptLWguc3RhcnQsZ2VuOkEsdW5jb21wcmVzc2VkOiEwfSksci5sYXN0SW5kZXg9Qzt2YXIgVD1yLmV4ZWModik7VD8oRj1yLmxhc3RJbmRleCsxLW0sImVuZG9iaiIhPT1UWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoVFsxXSwnIiBpbnNpZGUgb2YgYW5vdGhlciAib2JqIiwgJykrJ2NhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLicpLEYtPVRbMV0ubGVuZ3RoKzEpKTpGPXktbTt2YXIgST1nLnN1YmFycmF5KG0sbStGKSxFPXQoSSwwLGYpO0U8RiYmSVtFKzVdPDY0JiYody5wdXNoKG0taC5zdGFydCksdGhpcy54cmVmc3Rtc1ttLWguc3RhcnRdPTEpLG0rPUZ9ZWxzZSBpZihTLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbN10pKSl7Yi5wdXNoKG0pO3ZhciBqPW0rUy5sZW5ndGgsTT12b2lkIDA7cy5sYXN0SW5kZXg9ajt2YXIgXz1zLmV4ZWModik7Xz8oTT1zLmxhc3RJbmRleCsxLW0sInN0YXJ0eHJlZiIhPT1fWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoX1sxXSwnIiBhZnRlciAidHJhaWxlciIsICcpKydjYXVzZWQgYnkgbWlzc2luZyAic3RhcnR4cmVmIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxNLT1fWzFdLmxlbmd0aCsxKSk6TT15LW0sbSs9TX1lbHNlIG0rPVMubGVuZ3RoKzF9ZWxzZSBkb3tpZigrK20+PXkpYnJlYWs7az1nW21dfXdoaWxlKDEwIT09ayYmMTMhPT1rKTtlbHNlKyttfWZvcih2YXIgTD0wLFI9dztMPFIubGVuZ3RoO0wrKyl7dmFyIE49UltMXTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goTiksdGhpcy5yZWFkWFJlZighMCl9Zm9yKHZhciBEPTAsQj1bXS5jb25jYXQoYixbImdlbmVyYXRpb25GYWxsYmFjayJdLGIpO0Q8Qi5sZW5ndGg7RCsrKXt2YXIgVT1CW0RdO2lmKCJnZW5lcmF0aW9uRmFsbGJhY2siIT09VSl7aC5wb3M9VTt2YXIgJD1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGgpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSksWD0kLmdldE9iaigpO2lmKCgwLGEuaXNDbWQpKFgsInRyYWlsZXIiKSl7dmFyIEg9JC5nZXRPYmooKTtpZihIIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcT0hMTt0cnl7dmFyIEc9SC5nZXQoIlJvb3QiKTtpZighKEcgaW5zdGFuY2VvZiBhLkRpY3QpKWNvbnRpbnVlO3ZhciB6PUcuZ2V0KCJQYWdlcyIpO2lmKCEoeiBpbnN0YW5jZW9mIGEuRGljdCkpY29udGludWU7dmFyIFc9ei5nZXQoIkNvdW50Iik7TnVtYmVyLmlzSW50ZWdlcihXKSYmKHE9ITApfWNhdGNoKGUpe3A9ZTtjb250aW51ZX1pZihxJiZILmhhcygiSUQiKSlyZXR1cm4gSDtkPUh9fX1lbHNle2lmKCFwKWJyZWFrO3RoaXMuX2dlbmVyYXRpb25GYWxsYmFjaz0hMH19aWYoZClyZXR1cm4gZDtpZih0aGlzLnRvcERpY3QpcmV0dXJuIHRoaXMudG9wRGljdDt0aHJvdyBuZXcgbi5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuIil9fSx7a2V5OiJyZWFkWFJlZiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PXRoaXMuc3RyZWFtLHI9bmV3IFNldDt0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aDspe3RyeXt2YXIgYz10aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO2lmKHIuaGFzKGMpKXsoMCxuLndhcm4pKCJyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLiIpLHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtjb250aW51ZX1yLmFkZChjKSx0LnBvcz1jK3Quc3RhcnQ7dmFyIHU9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcih0KSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksbD11LmdldE9iaigpLGY9dm9pZCAwO2lmKCgwLGEuaXNDbWQpKGwsInhyZWYiKSl7aWYoZj10aGlzLnByb2Nlc3NYUmVmVGFibGUodSksdGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWYpLGw9Zi5nZXQoIlhSZWZTdG0iKSxOdW1iZXIuaXNJbnRlZ2VyKGwpKXt2YXIgaD1sO2ggaW4gdGhpcy54cmVmc3Rtc3x8KHRoaXMueHJlZnN0bXNbaF09MSx0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goaCkpfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih1LmdldE9iaigpKSYmKDAsYS5pc0NtZCkodS5nZXRPYmooKSwib2JqIikmJihsPXUuZ2V0T2JqKCkpaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7aWYoZj10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGwpLHRoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1mKSwhZil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1sPWYuZ2V0KCJQcmV2IiksTnVtYmVyLmlzSW50ZWdlcihsKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobCk6bCBpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobC5udW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbn19LHtrZXk6ImdldEVudHJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmVudHJpZXNbZV07cmV0dXJuIHQmJiF0LmZyZWUmJnQub2Zmc2V0P3Q6bnVsbH19LHtrZXk6ImZldGNoSWZSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07cmV0dXJuIGUgaW5zdGFuY2VvZiBhLlJlZj90aGlzLmZldGNoKGUsdCk6ZX19LHtrZXk6ImZldGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKCEoZSBpbnN0YW5jZW9mIGEuUmVmKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7dmFyIHI9ZS5udW0saT10aGlzLl9jYWNoZU1hcC5nZXQocik7aWYodm9pZCAwIT09aSlyZXR1cm4gaSBpbnN0YW5jZW9mIGEuRGljdCYmIWkub2JqSWQmJihpLm9iaklkPWUudG9TdHJpbmcoKSksaTt2YXIgbz10aGlzLmdldEVudHJ5KHIpO2lmKG51bGw9PT1vKXJldHVybiB0aGlzLl9jYWNoZU1hcC5zZXQocixvKSxvO2lmKHRoaXMuX3BlbmRpbmdSZWZzLmhhcyhlKSlyZXR1cm4gdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpLCgwLG4ud2FybikoIklnbm9yaW5nIGNpcmN1bGFyIHJlZmVyZW5jZTogIi5jb25jYXQoZSwiLiIpKSxhLkNJUkNVTEFSX1JFRjt0aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e289by51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLG8sdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxvLHQpLHRoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aHJvdyB0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSksdH1yZXR1cm4gbyBpbnN0YW5jZW9mIGEuRGljdD9vLm9iaklkPWUudG9TdHJpbmcoKTpvIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYoby5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSksb319LHtrZXk6ImZldGNoVW5jb21wcmVzc2VkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYz1lLmdlbix1PWUubnVtO2lmKHQuZ2VuIT09Yyl7dmFyIGw9IkluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICIuY29uY2F0KGUpO2lmKHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayYmdC5nZW48YylyZXR1cm4oMCxuLndhcm4pKGwpLHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQoYS5SZWYuZ2V0KHUsdC5nZW4pLHQscik7dGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKGwpfXZhciBmPXRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0odC5vZmZzZXQrdGhpcy5zdHJlYW0uc3RhcnQpLGg9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcihmKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksZD1oLmdldE9iaigpLHA9aC5nZXRPYmooKSxnPWguZ2V0T2JqKCk7aWYoZCE9PXV8fHAhPT1jfHwhKGcgaW5zdGFuY2VvZiBhLkNtZCkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpO2lmKCJvYmoiIT09Zy5jbWQpe2lmKGcuY21kLnN0YXJ0c1dpdGgoIm9iaiIpJiYodT1wYXJzZUludChnLmNtZC5zdWJzdHJpbmcoMyksMTApLCFOdW1iZXIuaXNOYU4odSkpKXJldHVybiB1O3Rocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbigiQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKX1yZXR1cm4odD10aGlzLmVuY3J5cHQmJiFyP2guZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odSxjKSk6aC5nZXRPYmooKSlpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KHUsdCksdH19LHtrZXk6ImZldGNoQ29tcHJlc3NlZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10Lm9mZnNldCxjPXRoaXMuZmV0Y2goYS5SZWYuZ2V0KHIsMCkpO2lmKCEoYyBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImJhZCBPYmpTdG0gc3RyZWFtIik7dmFyIHU9Yy5kaWN0LmdldCgiRmlyc3QiKSxsPWMuZGljdC5nZXQoIk4iKTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbSIpO2Zvcih2YXIgZj1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGMpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSxoPW5ldyBBcnJheShsKSxkPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCl7dmFyIGc9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihnKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdChnKSk7dmFyIHY9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcih2KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdCh2KSk7aFtwXT1nLGRbcF09dn1mb3IodmFyIHk9KGMuc3RhcnR8fDApK3UsbT1uZXcgQXJyYXkobCksYj0wO2I8bDsrK2Ipe3ZhciB3PWI8bC0xP2RbYisxXS1kW2JdOnZvaWQgMDtpZih3PDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtLiIpO3ZhciBrPShmPW5ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoYy5tYWtlU3ViU3RyZWFtKHkrZFtiXSx3LGMuZGljdCkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSkuZ2V0T2JqKCk7aWYobVtiXT1rLCEoayBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpe3ZhciBTPWhbYl0seD10aGlzLmVudHJpZXNbU107eCYmeC5vZmZzZXQ9PT1yJiZ4Lmdlbj09PWImJnRoaXMuX2NhY2hlTWFwLnNldChTLGspfX1pZih2b2lkIDA9PT0odD1tW3QuZ2VuXSkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKGNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKTtyZXR1cm4gdH19LHtrZXk6ImZldGNoSWZSZWZBc3luYyIsdmFsdWU6KGY9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoISh0IGluc3RhbmNlb2YgYS5SZWYpKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5mZXRjaEFzeW5jKHQscikpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hBc3luYyIsdmFsdWU6KHU9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2godCxyKSk7Y2FzZSA0OmlmKGUucHJldj00LGUudDA9ZS5jYXRjaCgwKSxlLnQwIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCx0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGUudDAuYmVnaW4sZS50MC5lbmQpO2Nhc2UgMTA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2hBc3luYyh0LHIpKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw0XV0pfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRDYXRhbG9nT2JqIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9fV0sciYmZyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWFJlZj12fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixjPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8sYyl7dmFyIHU9aChlW25dLGUsaSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8sYyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLG8obCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8sYyl9KSl9Yyh1LmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodix1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LHUsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gaShlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1zKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSl7c3dpdGNoKGUgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKGUpJiZudWxsIT09ZXx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksZS5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKGUubWVzc2FnZSxlLnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3ZhciBhPXRoaXM7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zb3VyY2VOYW1lPXQsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZT09PWEuc291cmNlTmFtZSlpZih0LnN0cmVhbSlhLl9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KTtlbHNlIGlmKHQuY2FsbGJhY2spe3ZhciByPXQuY2FsbGJhY2tJZCxpPWEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PXQuY2FsbGJhY2spaS5yZXNvbHZlKHQuZGF0YSk7ZWxzZXtpZigyIT09dC5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2kucmVqZWN0KGModC5yZWFzb24pKX19ZWxzZXt2YXIgbz1hLmFjdGlvbkhhbmRsZXJbdC5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KHQuYWN0aW9uKSk7aWYodC5jYWxsYmFja0lkKXt2YXIgcz1hLnNvdXJjZU5hbWUsdT10LnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uobyh0LmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihlKXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTplfSl9KSwoZnVuY3Rpb24oZSl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLHJlYXNvbjpjKGUpfSl9KSl9ZWxzZSB0LnN0cmVhbUlkP2EuX2NyZWF0ZVN0cmVhbVNpbmsodCk6byh0LmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIHQscixzLHU7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYocltlXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KGUsJyInKSk7cltlXT10fX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246ZSxkYXRhOnR9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5jYWxsYmFja0lkKyssaT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbYV09aTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6YSxkYXRhOnR9LHIpfWNhdGNoKGUpe2kucmVqZWN0KGUpfXJldHVybiBpLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIGk9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxsPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBjPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6YyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246ZSxzdHJlYW1JZDpvLGRhdGE6dCxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxhKSxjLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gaS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD10LGwucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSksdC5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciB0PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD10LGkuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpjKGUpfSksdC5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbihlKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgYz10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sYz4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo0LHN0cmVhbUlkOnQsY2h1bms6ZX0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGkucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjMsc3RyZWFtSWQ6dH0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW3RdKX0sZXJyb3I6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsaS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NSxzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW3RdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QocyhlLmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06OCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo4LHN0cmVhbUlkOnQscmVhc29uOmMoZSl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxzPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIDg6ZS5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNzplLnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZlLmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9ZS5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ZShzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo3LHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjcsc3RyZWFtSWQ6dCxyZWFzb246YyhlKX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUoZS5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihjKGUucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLHQpO2JyZWFrO2Nhc2UgMjplLnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGMoZS5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt0KHMub25DYW5jZWwmJnMub25DYW5jZWwoYyhlLnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjIsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06MixzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QoYyhlLnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbdF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9YSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW3Quc3RhcnRDYWxsJiZ0LnN0YXJ0Q2FsbC5wcm9taXNlLHQucHVsbENhbGwmJnQucHVsbENhbGwucHJvbWlzZSx0LmNhbmNlbENhbGwmJnQuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXMuYXBwbHkoZSx0KTtmdW5jdGlvbiBvKGUpe2koYSxyLG4sbyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2koYSxyLG4sbyxjLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NZXNzYWdlSGFuZGxlcj11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGV29ya2VyU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsYz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGwoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7bCh7fSwiIil9Y2F0Y2goZSl7bD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307bCh5LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLG8pJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtsKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLGMpe3ZhciB1PWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBsPXUuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXMoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLGMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8sYyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLGMpfSkpfWModS5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtvXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1sKHYsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGwoZSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGwoUy5wcm90b3R5cGUsYywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGwodyx1LCJHZW5lcmF0b3IiKSxsKHcsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxsKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGkoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBvPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKGUpe2kobyxuLGEscyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2kobyxuLGEscyxjLCJ0aHJvdyIsZSl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGYoZSxbe2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZXb3JrZXJTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4iKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1uZXcgZCh0aGlzLl9tc2dIYW5kbGVyKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBwKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTtyZXR1cm4gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXImJnRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChlKTt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl0LnZhbHVlLmNhbmNlbChlKX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19fV0pLGV9KCk7dC5QREZXb3JrZXJTdHJlYW09aDt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dGhpczt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO3ZhciBuPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJlYWRlciIpO3RoaXMuX3JlYWRlcj1uLmdldFJlYWRlcigpLHRoaXMuX2hlYWRlcnNSZWFkeT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiUmVhZGVySGVhZGVyc1JlYWR5IikudGhlbigoZnVuY3Rpb24oZSl7ci5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ZS5pc1N0cmVhbWluZ1N1cHBvcnRlZCxyLl9pc1JhbmdlU3VwcG9ydGVkPWUuaXNSYW5nZVN1cHBvcnRlZCxyLl9jb250ZW50TGVuZ3RoPWUuY29udGVudExlbmd0aH0pKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOih0PW8oYSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSAyOmlmKHQ9ZS5zZW50LHI9dC52YWx1ZSwhdC5kb25lKXtlLm5leHQ9NzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6ci5idWZmZXIsZG9uZTohMX0pO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19XSksZX0oKSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dSh0aGlzLGUpLHRoaXMuX21zZ0hhbmRsZXI9bix0aGlzLm9uUHJvZ3Jlc3M9bnVsbDt2YXIgYT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSYW5nZVJlYWRlciIse2JlZ2luOnQsZW5kOnJ9KTt0aGlzLl9yZWFkZXI9YS5nZXRSZWFkZXIoKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJyZWFkIix2YWx1ZToodD1vKGEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgMjppZih0PWUuc2VudCxyPXQudmFsdWUsIXQuZG9uZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnIuYnVmZmVyLGRvbmU6ITF9KTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fV0pLGV9KCl9XSx0PXt9O2Z1bmN0aW9uIHIobil7dmFyIGE9dFtuXTtpZih2b2lkIDAhPT1hKXJldHVybiBhLmV4cG9ydHM7dmFyIGk9dFtuXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbbl0oaSxpLmV4cG9ydHMsciksaS5leHBvcnRzfXIuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KXIubyh0LG4pJiYhci5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0sci5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxyLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBuPXt9O3JldHVybigoKT0+e3ZhciBlPW47T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJXb3JrZXJNZXNzYWdlSGFuZGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuV29ya2VyTWVzc2FnZUhhbmRsZXJ9fSk7dmFyIHQ9cigxKX0pKCksbn0pKCksIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciIsW10sdCk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPXQoKTplWyJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIiXT1lLnBkZmpzV29ya2VyPXQoKTs=",K="LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgcGRmLmpzLkxJQ0VOU0UudHh0ICovCnZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9LHJvb3QsZmFjdG9yeTtyb290PWdsb2JhbFRoaXMsZmFjdG9yeT0oKT0+KCgpPT57dmFyIF9fd2VicGFja19tb2R1bGVzX189WywodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGkodCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaSh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gYSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBvKHQpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxvKHQpfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1vKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gZSYmcyh0LnByb3RvdHlwZSxlKSxyJiZzKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiB1KHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZoKHQsZSl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0saCh0LGUpfWZ1bmN0aW9uIGYodCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZCh0KTtpZihlKXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW8oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGQodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVmVyYm9zaXR5TGV2ZWw9ZS5VdGlsPWUuVW5rbm93bkVycm9yRXhjZXB0aW9uPWUuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPWUuVU5TVVBQT1JURURfRkVBVFVSRVM9ZS5UZXh0UmVuZGVyaW5nTW9kZT1lLlN0cmVhbVR5cGU9ZS5SZW5kZXJpbmdJbnRlbnRGbGFnPWUuUGVybWlzc2lvbkZsYWc9ZS5QYXNzd29yZFJlc3BvbnNlcz1lLlBhc3N3b3JkRXhjZXB0aW9uPWUuUGFnZUFjdGlvbkV2ZW50VHlwZT1lLk9QUz1lLk1pc3NpbmdQREZFeGNlcHRpb249ZS5MSU5FX0ZBQ1RPUj1lLkxJTkVfREVTQ0VOVF9GQUNUT1I9ZS5JbnZhbGlkUERGRXhjZXB0aW9uPWUuSW1hZ2VLaW5kPWUuSURFTlRJVFlfTUFUUklYPWUuRm9ybWF0RXJyb3I9ZS5Gb250VHlwZT1lLkZlYXR1cmVUZXN0PWUuRk9OVF9JREVOVElUWV9NQVRSSVg9ZS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT1lLkNNYXBDb21wcmVzc2lvblR5cGU9ZS5CYXNlRXhjZXB0aW9uPWUuQkFTRUxJTkVfRkFDVE9SPWUuQW5ub3RhdGlvblR5cGU9ZS5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9ZS5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9ZS5Bbm5vdGF0aW9uUmVwbHlUeXBlPWUuQW5ub3RhdGlvbk1vZGU9ZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9ZS5Bbm5vdGF0aW9uRmxhZz1lLkFubm90YXRpb25GaWVsZEZsYWc9ZS5Bbm5vdGF0aW9uRWRpdG9yVHlwZT1lLkFubm90YXRpb25FZGl0b3JQcmVmaXg9ZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT1lLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9ZS5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPWUuQWJvcnRFeGNlcHRpb249dm9pZCAwLGUuYXJyYXlCeXRlTGVuZ3RoPVQsZS5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDE9PT1lJiZ0WzBdaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiB0WzBdO2Zvcih2YXIgcj0wLG49MDtuPGU7bisrKXIrPVQodFtuXSk7Zm9yKHZhciBpPTAsYT1uZXcgVWludDhBcnJheShyKSxvPTA7bzxlO28rKyl7dmFyIHM9dFtvXTtzIGluc3RhbmNlb2YgVWludDhBcnJheXx8KHM9InN0cmluZyI9PXR5cGVvZiBzP1Aocyk6bmV3IFVpbnQ4QXJyYXkocykpO3ZhciBsPXMuYnl0ZUxlbmd0aDthLnNldChzLGkpLGkrPWx9cmV0dXJuIGF9LGUuYXNzZXJ0PWZ1bmN0aW9uKHQsZSl7dHx8bShlKX0sZS5ieXRlc1RvU3RyaW5nPWZ1bmN0aW9uKHQpeyJvYmplY3QiPT09byh0KSYmbnVsbCE9PXQmJnZvaWQgMCE9PXQubGVuZ3RofHxtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7dmFyIGU9dC5sZW5ndGgscj04MTkyO2lmKGU8cilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpO2Zvcih2YXIgbj1bXSxpPTA7aTxlO2krPXIpe3ZhciBhPU1hdGgubWluKGkrcixlKSxzPXQuc3ViYXJyYXkoaSxhKTtuLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHMpKX1yZXR1cm4gbi5qb2luKCIiKX0sZS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eT1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksZT0hMTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldHRsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX19KSx0LnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dC5yZXNvbHZlPWZ1bmN0aW9uKHQpe2U9ITAscih0KX0sdC5yZWplY3Q9ZnVuY3Rpb24odCl7ZT0hMCxuKHQpfX0pKSx0fSxlLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighdClyZXR1cm4gbnVsbDt0cnl7aWYociYmInN0cmluZyI9PXR5cGVvZiB0KXtpZihyLmFkZERlZmF1bHRQcm90b2NvbCYmdC5zdGFydHNXaXRoKCJ3d3cuIikpe3ZhciBuPXQubWF0Y2goL1wuL2cpO24mJm4ubGVuZ3RoPj0yJiYodD0iaHR0cDovLyIuY29uY2F0KHQpKX1pZihyLnRyeUNvbnZlcnRFbmNvZGluZyl0cnl7dD1SKHQpfWNhdGNoKHQpe319dmFyIGk9ZT9uZXcgVVJMKHQsZSk6bmV3IFVSTCh0KTtpZihmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtzd2l0Y2godC5wcm90b2NvbCl7Y2FzZSJodHRwOiI6Y2FzZSJodHRwczoiOmNhc2UiZnRwOiI6Y2FzZSJtYWlsdG86IjpjYXNlInRlbDoiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fShpKSlyZXR1cm4gaX1jYXRjaCh0KXt9cmV0dXJuIG51bGx9LGUuZ2V0TW9kaWZpY2F0aW9uRGF0ZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuZXcgRGF0ZTtyZXR1cm5bdC5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksKHQuZ2V0VVRDTW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIildLmpvaW4oIiIpfSxlLmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHZ9LGUuaW5mbz1mdW5jdGlvbih0KXt2Pj1wLklORk9TJiZjb25zb2xlLmxvZygiSW5mbzogIi5jb25jYXQodCkpfSxlLmlzQXJyYXlCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PT1vKHQpJiZudWxsIT09dCYmdm9pZCAwIT09dC5ieXRlTGVuZ3RofSxlLmlzQXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfSxlLm9iamVjdEZyb21NYXA9ZnVuY3Rpb24odCl7dmFyIGUscixuPU9iamVjdC5jcmVhdGUobnVsbCksYT1mdW5jdGlvbih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9aSh0KSkpe3ImJih0PXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsbD0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIHM9dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7bD0hMCxvPXR9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IG99fX19KHQpO3RyeXtmb3IoYS5zKCk7IShlPWEubigpKS5kb25lOyl7dmFyIG89KHI9ZS52YWx1ZSwyLGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHIpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2ZvcihhPShyPXIuY2FsbCh0KSkubmV4dCwwOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0ocil8fGkociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSxzPW9bMF0sbD1vWzFdO25bc109bH19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIG59LGUub2JqZWN0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RofSxlLnNldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKHQpe051bWJlci5pc0ludGVnZXIodCkmJih2PXQpfSxlLnNoYWRvdz1nLGUuc3RyaW5nMzI9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9LGUuc3RyaW5nVG9CeXRlcz1QLGUuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU7aWYodFswXT49IsOvIiYmKCLDviI9PT10WzBdJiYiw78iPT09dFsxXT9lPSJ1dGYtMTZiZSI6IsO/Ij09PXRbMF0mJiLDviI9PT10WzFdP2U9InV0Zi0xNmxlIjoiw68iPT09dFswXSYmIsK7Ij09PXRbMV0mJiLCvyI9PT10WzJdJiYoZT0idXRmLTgiKSxlKSl0cnl7dmFyIHI9bmV3IFRleHREZWNvZGVyKGUse2ZhdGFsOiEwfSksbj1QKHQpO3JldHVybiByLmRlY29kZShuKX1jYXRjaCh0KXt5KCdzdHJpbmdUb1BERlN0cmluZzogIicuY29uY2F0KHQsJyIuJykpfWZvcih2YXIgaT1bXSxhPTAsbz10Lmxlbmd0aDthPG87YSsrKXt2YXIgcz1NW3QuY2hhckNvZGVBdChhKV07aS5wdXNoKHM/U3RyaW5nLmZyb21DaGFyQ29kZShzKTp0LmNoYXJBdChhKSl9cmV0dXJuIGkuam9pbigiIil9LGUuc3RyaW5nVG9VVEY4U3RyaW5nPVIsZS51bnJlYWNoYWJsZT1tLGUudXRmOFN0cmluZ1RvU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodCkpfSxlLndhcm49eSxnbG9iYWxUaGlzLl9wZGZqc0NvbXBhdGliaWxpdHlDaGVja2VkfHwoZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZD0hMCxyKDIpKSxlLklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdLGUuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXSxlLkxJTkVfRkFDVE9SPTEuMzUsZS5MSU5FX0RFU0NFTlRfRkFDVE9SPS4zNSxlLkJBU0VMSU5FX0ZBQ1RPUj0uMjU5MjU5MjU5MjU5MjU5MjQsZS5SZW5kZXJpbmdJbnRlbnRGbGFnPXtBTlk6MSxESVNQTEFZOjIsUFJJTlQ6NCxTQVZFOjgsQU5OT1RBVElPTlNfRk9STVM6MTYsQU5OT1RBVElPTlNfU1RPUkFHRTozMixBTk5PVEFUSU9OU19ESVNBQkxFOjY0LE9QTElTVDoyNTZ9LGUuQW5ub3RhdGlvbk1vZGU9e0RJU0FCTEU6MCxFTkFCTEU6MSxFTkFCTEVfRk9STVM6MixFTkFCTEVfU1RPUkFHRTozfSxlLkFubm90YXRpb25FZGl0b3JQcmVmaXg9InBkZmpzX2ludGVybmFsX2VkaXRvcl8iLGUuQW5ub3RhdGlvbkVkaXRvclR5cGU9e0RJU0FCTEU6LTEsTk9ORTowLEZSRUVURVhUOjMsSU5LOjE1fSxlLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXtGUkVFVEVYVF9TSVpFOjEsRlJFRVRFWFRfQ09MT1I6MixGUkVFVEVYVF9PUEFDSVRZOjMsSU5LX0NPTE9SOjExLElOS19USElDS05FU1M6MTIsSU5LX09QQUNJVFk6MTN9LGUuUGVybWlzc2lvbkZsYWc9e1BSSU5UOjQsTU9ESUZZX0NPTlRFTlRTOjgsQ09QWToxNixNT0RJRllfQU5OT1RBVElPTlM6MzIsRklMTF9JTlRFUkFDVElWRV9GT1JNUzoyNTYsQ09QWV9GT1JfQUNDRVNTSUJJTElUWTo1MTIsQVNTRU1CTEU6MTAyNCxQUklOVF9ISUdIX1FVQUxJVFk6MjA0OH0sZS5UZXh0UmVuZGVyaW5nTW9kZT17RklMTDowLFNUUk9LRToxLEZJTExfU1RST0tFOjIsSU5WSVNJQkxFOjMsRklMTF9BRERfVE9fUEFUSDo0LFNUUk9LRV9BRERfVE9fUEFUSDo1LEZJTExfU1RST0tFX0FERF9UT19QQVRIOjYsQUREX1RPX1BBVEg6NyxGSUxMX1NUUk9LRV9NQVNLOjMsQUREX1RPX1BBVEhfRkxBRzo0fSxlLkltYWdlS2luZD17R1JBWVNDQUxFXzFCUFA6MSxSR0JfMjRCUFA6MixSR0JBXzMyQlBQOjN9LGUuQW5ub3RhdGlvblR5cGU9e1RFWFQ6MSxMSU5LOjIsRlJFRVRFWFQ6MyxMSU5FOjQsU1FVQVJFOjUsQ0lSQ0xFOjYsUE9MWUdPTjo3LFBPTFlMSU5FOjgsSElHSExJR0hUOjksVU5ERVJMSU5FOjEwLFNRVUlHR0xZOjExLFNUUklLRU9VVDoxMixTVEFNUDoxMyxDQVJFVDoxNCxJTks6MTUsUE9QVVA6MTYsRklMRUFUVEFDSE1FTlQ6MTcsU09VTkQ6MTgsTU9WSUU6MTksV0lER0VUOjIwLFNDUkVFTjoyMSxQUklOVEVSTUFSSzoyMixUUkFQTkVUOjIzLFdBVEVSTUFSSzoyNCxUSFJFRUQ6MjUsUkVEQUNUOjI2fSxlLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZT17TUFSS0VEOiJNYXJrZWQiLFJFVklFVzoiUmV2aWV3In0sZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9e01BUktFRDoiTWFya2VkIixVTk1BUktFRDoiVW5tYXJrZWQifSxlLkFubm90YXRpb25SZXZpZXdTdGF0ZT17QUNDRVBURUQ6IkFjY2VwdGVkIixSRUpFQ1RFRDoiUmVqZWN0ZWQiLENBTkNFTExFRDoiQ2FuY2VsbGVkIixDT01QTEVURUQ6IkNvbXBsZXRlZCIsTk9ORToiTm9uZSJ9LGUuQW5ub3RhdGlvblJlcGx5VHlwZT17R1JPVVA6Ikdyb3VwIixSRVBMWToiUiJ9LGUuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9LGUuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH0sZS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fSxlLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9e0U6Ik1vdXNlIEVudGVyIixYOiJNb3VzZSBFeGl0IixEOiJNb3VzZSBEb3duIixVOiJNb3VzZSBVcCIsRm86IkZvY3VzIixCbDoiQmx1ciIsUE86IlBhZ2VPcGVuIixQQzoiUGFnZUNsb3NlIixQVjoiUGFnZVZpc2libGUiLFBJOiJQYWdlSW52aXNpYmxlIixLOiJLZXlzdHJva2UiLEY6IkZvcm1hdCIsVjoiVmFsaWRhdGUiLEM6IkNhbGN1bGF0ZSJ9LGUuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9e1dDOiJXaWxsQ2xvc2UiLFdTOiJXaWxsU2F2ZSIsRFM6IkRpZFNhdmUiLFdQOiJXaWxsUHJpbnQiLERQOiJEaWRQcmludCJ9LGUuUGFnZUFjdGlvbkV2ZW50VHlwZT17TzoiUGFnZU9wZW4iLEM6IlBhZ2VDbG9zZSJ9LGUuU3RyZWFtVHlwZT17VU5LTk9XTjoiVU5LTk9XTiIsRkxBVEU6IkZMQVRFIixMWlc6IkxaVyIsRENUOiJEQ1QiLEpQWDoiSlBYIixKQklHOiJKQklHIixBODU6IkE4NSIsQUhYOiJBSFgiLENDRjoiQ0NGIixSTFg6IlJMWCJ9LGUuRm9udFR5cGU9e1VOS05PV046IlVOS05PV04iLFRZUEUxOiJUWVBFMSIsVFlQRTFTVEFOREFSRDoiVFlQRTFTVEFOREFSRCIsVFlQRTFDOiJUWVBFMUMiLENJREZPTlRUWVBFMDoiQ0lERk9OVFRZUEUwIixDSURGT05UVFlQRTBDOiJDSURGT05UVFlQRTBDIixUUlVFVFlQRToiVFJVRVRZUEUiLENJREZPTlRUWVBFMjoiQ0lERk9OVFRZUEUyIixUWVBFMzoiVFlQRTMiLE9QRU5UWVBFOiJPUEVOVFlQRSIsVFlQRTA6IlRZUEUwIixNTVRZUEUxOiJNTVRZUEUxIn07dmFyIHA9e0VSUk9SUzowLFdBUk5JTkdTOjEsSU5GT1M6NX07ZS5WZXJib3NpdHlMZXZlbD1wLGUuQ01hcENvbXByZXNzaW9uVHlwZT17Tk9ORTowLEJJTkFSWToxfSxlLk9QUz17ZGVwZW5kZW5jeToxLHNldExpbmVXaWR0aDoyLHNldExpbmVDYXA6MyxzZXRMaW5lSm9pbjo0LHNldE1pdGVyTGltaXQ6NSxzZXREYXNoOjYsc2V0UmVuZGVyaW5nSW50ZW50Ojcsc2V0RmxhdG5lc3M6OCxzZXRHU3RhdGU6OSxzYXZlOjEwLHJlc3RvcmU6MTEsdHJhbnNmb3JtOjEyLG1vdmVUbzoxMyxsaW5lVG86MTQsY3VydmVUbzoxNSxjdXJ2ZVRvMjoxNixjdXJ2ZVRvMzoxNyxjbG9zZVBhdGg6MTgscmVjdGFuZ2xlOjE5LHN0cm9rZToyMCxjbG9zZVN0cm9rZToyMSxmaWxsOjIyLGVvRmlsbDoyMyxmaWxsU3Ryb2tlOjI0LGVvRmlsbFN0cm9rZToyNSxjbG9zZUZpbGxTdHJva2U6MjYsY2xvc2VFT0ZpbGxTdHJva2U6MjcsZW5kUGF0aDoyOCxjbGlwOjI5LGVvQ2xpcDozMCxiZWdpblRleHQ6MzEsZW5kVGV4dDozMixzZXRDaGFyU3BhY2luZzozMyxzZXRXb3JkU3BhY2luZzozNCxzZXRIU2NhbGU6MzUsc2V0TGVhZGluZzozNixzZXRGb250OjM3LHNldFRleHRSZW5kZXJpbmdNb2RlOjM4LHNldFRleHRSaXNlOjM5LG1vdmVUZXh0OjQwLHNldExlYWRpbmdNb3ZlVGV4dDo0MSxzZXRUZXh0TWF0cml4OjQyLG5leHRMaW5lOjQzLHNob3dUZXh0OjQ0LHNob3dTcGFjZWRUZXh0OjQ1LG5leHRMaW5lU2hvd1RleHQ6NDYsbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6NDcsc2V0Q2hhcldpZHRoOjQ4LHNldENoYXJXaWR0aEFuZEJvdW5kczo0OSxzZXRTdHJva2VDb2xvclNwYWNlOjUwLHNldEZpbGxDb2xvclNwYWNlOjUxLHNldFN0cm9rZUNvbG9yOjUyLHNldFN0cm9rZUNvbG9yTjo1MyxzZXRGaWxsQ29sb3I6NTQsc2V0RmlsbENvbG9yTjo1NSxzZXRTdHJva2VHcmF5OjU2LHNldEZpbGxHcmF5OjU3LHNldFN0cm9rZVJHQkNvbG9yOjU4LHNldEZpbGxSR0JDb2xvcjo1OSxzZXRTdHJva2VDTVlLQ29sb3I6NjAsc2V0RmlsbENNWUtDb2xvcjo2MSxzaGFkaW5nRmlsbDo2MixiZWdpbklubGluZUltYWdlOjYzLGJlZ2luSW1hZ2VEYXRhOjY0LGVuZElubGluZUltYWdlOjY1LHBhaW50WE9iamVjdDo2NixtYXJrUG9pbnQ6NjcsbWFya1BvaW50UHJvcHM6NjgsYmVnaW5NYXJrZWRDb250ZW50OjY5LGJlZ2luTWFya2VkQ29udGVudFByb3BzOjcwLGVuZE1hcmtlZENvbnRlbnQ6NzEsYmVnaW5Db21wYXQ6NzIsZW5kQ29tcGF0OjczLHBhaW50Rm9ybVhPYmplY3RCZWdpbjo3NCxwYWludEZvcm1YT2JqZWN0RW5kOjc1LGJlZ2luR3JvdXA6NzYsZW5kR3JvdXA6NzcsYmVnaW5Bbm5vdGF0aW9uOjgwLGVuZEFubm90YXRpb246ODEscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfSxlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXtmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNpZ25hdHVyZXM6InNpZ25hdHVyZXMiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixlcnJvclRpbGluZ1BhdHRlcm46ImVycm9yVGlsaW5nUGF0dGVybiIsZXJyb3JFeHRHU3RhdGU6ImVycm9yRXh0R1N0YXRlIixlcnJvclhPYmplY3Q6ImVycm9yWE9iamVjdCIsZXJyb3JGb250TG9hZFR5cGUzOiJlcnJvckZvbnRMb2FkVHlwZTMiLGVycm9yRm9udFN0YXRlOiJlcnJvckZvbnRTdGF0ZSIsZXJyb3JGb250TWlzc2luZzoiZXJyb3JGb250TWlzc2luZyIsZXJyb3JGb250VHJhbnNsYXRlOiJlcnJvckZvbnRUcmFuc2xhdGUiLGVycm9yQ29sb3JTcGFjZToiZXJyb3JDb2xvclNwYWNlIixlcnJvck9wZXJhdG9yTGlzdDoiZXJyb3JPcGVyYXRvckxpc3QiLGVycm9yRm9udFRvVW5pY29kZToiZXJyb3JGb250VG9Vbmljb2RlIixlcnJvckZvbnRMb2FkTmF0aXZlOiJlcnJvckZvbnRMb2FkTmF0aXZlIixlcnJvckZvbnRCdWlsZFBhdGg6ImVycm9yRm9udEJ1aWxkUGF0aCIsZXJyb3JGb250R2V0UGF0aDoiZXJyb3JGb250R2V0UGF0aCIsZXJyb3JNYXJrZWRDb250ZW50OiJlcnJvck1hcmtlZENvbnRlbnQiLGVycm9yQ29udGVudFN1YlN0cmVhbToiZXJyb3JDb250ZW50U3ViU3RyZWFtIn0sZS5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt2YXIgdj1wLldBUk5JTkdTO2Z1bmN0aW9uIHkodCl7dj49cC5XQVJOSU5HUyYmY29uc29sZS5sb2coIldhcm5pbmc6ICIuY29uY2F0KHQpKX1mdW5jdGlvbiBtKHQpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6IW4sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiExfSkscn12YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt0aGlzLmNvbnN0cnVjdG9yPT09dCYmbSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUV4Y2VwdGlvbi4iKSx0aGlzLm1lc3NhZ2U9ZSx0aGlzLm5hbWU9cn1yZXR1cm4gdC5wcm90b3R5cGU9bmV3IEVycm9yLHQuY29uc3RydWN0b3I9dCx0fSgpO2UuQmFzZUV4Y2VwdGlvbj1iO3ZhciBfPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlBhc3N3b3JkRXhjZXB0aW9uIikpLmNvZGU9bixpfXJldHVybiBsKHIpfShiKTtlLlBhc3N3b3JkRXhjZXB0aW9uPV87dmFyIHc9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0LG4pe3ZhciBpO3JldHVybiB1KHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiVW5rbm93bkVycm9yRXhjZXB0aW9uIikpLmRldGFpbHM9bixpfXJldHVybiBsKHIpfShiKTtlLlVua25vd25FcnJvckV4Y2VwdGlvbj13O3ZhciBBPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJJbnZhbGlkUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuSW52YWxpZFBERkV4Y2VwdGlvbj1BO3ZhciBrPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJNaXNzaW5nUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuTWlzc2luZ1BERkV4Y2VwdGlvbj1rO3ZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiIpKS5zdGF0dXM9bixpfXJldHVybiBsKHIpfShiKTtlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1TO3ZhciB4PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJGb3JtYXRFcnJvciIpfXJldHVybiBsKHIpfShiKTtlLkZvcm1hdEVycm9yPXg7dmFyIEU9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdSh0aGlzLHIpLGUuY2FsbCh0aGlzLHQsIkFib3J0RXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2Z1bmN0aW9uIFAodCl7InN0cmluZyIhPXR5cGVvZiB0JiZtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IFVpbnQ4QXJyYXkoZSksbj0wO248ZTsrK24pcltuXT0yNTUmdC5jaGFyQ29kZUF0KG4pO3JldHVybiByfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHZvaWQgMCE9PXQubGVuZ3RoP3QubGVuZ3RoOnZvaWQgMCE9PXQuYnl0ZUxlbmd0aD90LmJ5dGVMZW5ndGg6dm9pZCBtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBhcnJheUJ5dGVMZW5ndGgiKX1lLkFib3J0RXhjZXB0aW9uPUU7dmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToiaXNMaXR0bGVFbmRpYW4iLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzTGl0dGxlRW5kaWFuIiwoKHQ9bmV3IFVpbnQ4QXJyYXkoNCkpWzBdPTEsMT09PW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciwwLDEpWzBdKSk7dmFyIHR9fSx7a2V5OiJpc0V2YWxTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbigiIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpKX19LHtrZXk6ImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfX0se2tleToicGxhdGZvcm0iLGdldDpmdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yP2codGhpcywicGxhdGZvcm0iLHtpc1dpbjohMSxpc01hYzohMX0pOmcodGhpcywicGxhdGZvcm0iLHtpc1dpbjpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIldpbiIpLGlzTWFjOm5hdmlnYXRvci5wbGF0Zm9ybS5pbmNsdWRlcygiTWFjIil9KX19XSksdH0oKTtlLkZlYXR1cmVUZXN0PUM7dmFyIE89bihBcnJheSgyNTYpLmtleXMoKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfSkpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToibWFrZUhleENvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIiMiLmNvbmNhdChPW3RdKS5jb25jYXQoT1tlXSkuY29uY2F0KE9bcl0pfX0se2tleToic2NhbGVNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI7dFswXT8odFswXTwwJiYocj1lWzBdLGVbMF09ZVsxXSxlWzFdPXIpLGVbMF0qPXRbMF0sZVsxXSo9dFswXSx0WzNdPDAmJihyPWVbMl0sZVsyXT1lWzNdLGVbM109ciksZVsyXSo9dFszXSxlWzNdKj10WzNdKToocj1lWzBdLGVbMF09ZVsyXSxlWzJdPXIscj1lWzFdLGVbMV09ZVszXSxlWzNdPXIsdFsxXTwwJiYocj1lWzJdLGVbMl09ZVszXSxlWzNdPXIpLGVbMl0qPXRbMV0sZVszXSo9dFsxXSx0WzJdPDAmJihyPWVbMF0sZVswXT1lWzFdLGVbMV09ciksZVswXSo9dFsyXSxlWzFdKj10WzJdKSxlWzBdKz10WzRdLGVbMV0rPXRbNF0sZVsyXSs9dFs1XSxlWzNdKz10WzVdfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdKmVbMF0rdFsyXSplWzFdLHRbMV0qZVswXSt0WzNdKmVbMV0sdFswXSplWzJdK3RbMl0qZVszXSx0WzFdKmVbMl0rdFszXSplWzNdLHRbMF0qZVs0XSt0WzJdKmVbNV0rdFs0XSx0WzFdKmVbNF0rdFszXSplWzVdK3RbNV1dfX0se2tleToiYXBwbHlUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0qZVswXSt0WzFdKmVbMl0rZVs0XSx0WzBdKmVbMV0rdFsxXSplWzNdK2VbNV1dfX0se2tleToiYXBwbHlJbnZlcnNlVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuWyh0WzBdKmVbM10tdFsxXSplWzJdK2VbMl0qZVs1XS1lWzRdKmVbM10pL3IsKC10WzBdKmVbMV0rdFsxXSplWzBdK2VbNF0qZVsxXS1lWzVdKmVbMF0pL3JdfX0se2tleToiZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUscil7dmFyIG49dC5hcHBseVRyYW5zZm9ybShlLHIpLGk9dC5hcHBseVRyYW5zZm9ybShlLnNsaWNlKDIsNCksciksYT10LmFwcGx5VHJhbnNmb3JtKFtlWzBdLGVbM11dLHIpLG89dC5hcHBseVRyYW5zZm9ybShbZVsyXSxlWzFdXSxyKTtyZXR1cm5bTWF0aC5taW4oblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5taW4oblsxXSxpWzFdLGFbMV0sb1sxXSksTWF0aC5tYXgoblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5tYXgoblsxXSxpWzFdLGFbMV0sb1sxXSldfX0se2tleToiaW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bdFszXS9lLC10WzFdL2UsLXRbMl0vZSx0WzBdL2UsKHRbMl0qdFs1XS10WzRdKnRbM10pL2UsKHRbNF0qdFsxXS10WzVdKnRbMF0pL2VdfX0se2tleToic2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVt0WzBdLHRbMl0sdFsxXSx0WzNdXSxyPXRbMF0qZVswXSt0WzFdKmVbMl0sbj10WzBdKmVbMV0rdFsxXSplWzNdLGk9dFsyXSplWzBdK3RbM10qZVsyXSxhPXRbMl0qZVsxXSt0WzNdKmVbM10sbz0ocithKS8yLHM9TWF0aC5zcXJ0KE1hdGgucG93KHIrYSwyKS00KihyKmEtaSpuKSkvMixsPW8rc3x8MSx1PW8tc3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydCh1KV19fSx7a2V5OiJub3JtYWxpemVSZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKDApO3JldHVybiB0WzBdPnRbMl0mJihlWzBdPXRbMl0sZVsyXT10WzBdKSx0WzFdPnRbM10mJihlWzFdPXRbM10sZVszXT10WzFdKSxlfX0se2tleToiaW50ZXJzZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgubWF4KE1hdGgubWluKHRbMF0sdFsyXSksTWF0aC5taW4oZVswXSxlWzJdKSksbj1NYXRoLm1pbihNYXRoLm1heCh0WzBdLHRbMl0pLE1hdGgubWF4KGVbMF0sZVsyXSkpO2lmKHI+bilyZXR1cm4gbnVsbDt2YXIgaT1NYXRoLm1heChNYXRoLm1pbih0WzFdLHRbM10pLE1hdGgubWluKGVbMV0sZVszXSkpLGE9TWF0aC5taW4oTWF0aC5tYXgodFsxXSx0WzNdKSxNYXRoLm1heChlWzFdLGVbM10pKTtyZXR1cm4gaT5hP251bGw6W3IsaSxuLGFdfX0se2tleToiYmV6aWVyQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGksYSxvLHMsbCl7Zm9yKHZhciB1LGMsaCxmLGQscCx2LHksbT1bXSxnPVtbXSxbXV0sYj0wO2I8MjsrK2IpaWYoMD09PWI/KGM9Nip0LTEyKnIrNiphLHU9LTMqdCs5KnItOSphKzMqcyxoPTMqci0zKnQpOihjPTYqZS0xMippKzYqbyx1PS0zKmUrOSppLTkqbyszKmwsaD0zKmktMyplKSxNYXRoLmFicyh1KTwxZS0xMil7aWYoTWF0aC5hYnMoYyk8MWUtMTIpY29udGludWU7MDwoZj0taC9jKSYmZjwxJiZtLnB1c2goZil9ZWxzZSB2PWMqYy00KmgqdSx5PU1hdGguc3FydCh2KSx2PDB8fCgwPChkPSgtYyt5KS8oMip1KSkmJmQ8MSYmbS5wdXNoKGQpLDA8KHA9KC1jLXkpLygyKnUpKSYmcDwxJiZtLnB1c2gocCkpO2Zvcih2YXIgXyx3PW0ubGVuZ3RoLEE9dzt3LS07KV89MS0oZj1tW3ddKSxnWzBdW3ddPV8qXypfKnQrMypfKl8qZipyKzMqXypmKmYqYStmKmYqZipzLGdbMV1bd109XypfKl8qZSszKl8qXypmKmkrMypfKmYqZipvK2YqZipmKmw7cmV0dXJuIGdbMF1bQV09dCxnWzFdW0FdPWUsZ1swXVtBKzFdPXMsZ1sxXVtBKzFdPWwsZ1swXS5sZW5ndGg9Z1sxXS5sZW5ndGg9QSsyLFtNYXRoLm1pbi5hcHBseShNYXRoLG4oZ1swXSkpLE1hdGgubWluLmFwcGx5KE1hdGgsbihnWzFdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKGdbMF0pKSxNYXRoLm1heC5hcHBseShNYXRoLG4oZ1sxXSkpXX19XSksdH0oKTtlLlV0aWw9Rjt2YXIgTT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzI4LDcxMSw3MTAsNzI5LDczMyw3MzEsNzMwLDczMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MjI2LDgyMjQsODIyNSw4MjMwLDgyMTIsODIxMSw0MDIsODI2MCw4MjQ5LDgyNTAsODcyMiw4MjQwLDgyMjIsODIyMCw4MjIxLDgyMTYsODIxNyw4MjE4LDg0ODIsNjQyNTcsNjQyNTgsMzIxLDMzOCwzNTIsMzc2LDM4MSwzMDUsMzIyLDMzOSwzNTMsMzgyLDAsODM2NF07ZnVuY3Rpb24gUih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh0KSl9fSwodCxlLHIpPT57dmFyIG49cigzKTshZ2xvYmFsVGhpcy5idG9hJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5idG9hPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiaW5hcnkiKS50b1N0cmluZygiYmFzZTY0Iil9KSwhZ2xvYmFsVGhpcy5hdG9iJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5hdG9iPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiYXNlNjQiKS50b1N0cmluZygiYmluYXJ5Iil9KSwhZ2xvYmFsVGhpcy5ET01NYXRyaXgmJm4uaXNOb2RlSlMmJihnbG9iYWxUaGlzLkRPTU1hdHJpeD1yZXF1aXJlKCJjYW52YXMiKS5ET01NYXRyaXgpLCFnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbT1yZXF1aXJlKCJ3ZWItc3RyZWFtcy1wb2x5ZmlsbC9kaXN0L3BvbnlmaWxsLmpzIikuUmVhZGFibGVTdHJlYW0pLEFycmF5LnByb3RvdHlwZS5hdHx8cig0KSxVaW50OEFycmF5LnByb3RvdHlwZS5hdHx8cig3OCksZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmV8fHIoODgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuaXNOb2RlSlM9dm9pZCAwO3ZhciBuPSEoIm9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBwcm9jZXNzPyJ1bmRlZmluZWQiOnIocHJvY2VzcykpfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKTtlLmlzTm9kZUpTPW59LCh0LGUscik9PntyKDUpO3ZhciBuPXIoNzcpO3QuZXhwb3J0cz1uKCJBcnJheSIsImF0Iil9LCh0LGUscik9Pnt2YXIgbj1yKDYpLGk9cig0MyksYT1yKDY3KSxvPXIoNjUpLHM9cig3Mik7bih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHthdDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLHI9YShlKSxuPW8odCkscz1uPj0wP246cituO3JldHVybiBzPDB8fHM+PXI/dm9pZCAwOmVbc119fSkscygiYXQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDgpLmYsYT1yKDQ3KSxvPXIoNTEpLHM9cig0MSksbD1yKDU5KSx1PXIoNzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsaCxmLGQscD10LnRhcmdldCx2PXQuZ2xvYmFsLHk9dC5zdGF0O2lmKHI9dj9uOnk/bltwXXx8cyhwLHt9KToobltwXXx8e30pLnByb3RvdHlwZSlmb3IoYyBpbiBlKXtpZihmPWVbY10saD10LmRvbnRDYWxsR2V0U2V0PyhkPWkocixjKSkmJmQudmFsdWU6cltjXSwhdSh2P2M6cCsoeT8iLiI6IiMiKStjLHQuZm9yY2VkKSYmdm9pZCAwIT09aCl7aWYodHlwZW9mIGY9PXR5cGVvZiBoKWNvbnRpbnVlO2woZixoKX0odC5zaGFtfHxoJiZoLnNoYW0pJiZhKGYsInNoYW0iLCEwKSxvKHIsYyxmLHQpfX19LHQ9Pnt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5NYXRoPT1NYXRoJiZ0fTt0LmV4cG9ydHM9ZSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxlKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxlKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGUoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cigxMSksYT1yKDEzKSxvPXIoMTQpLHM9cigxNSksbD1yKDIxKSx1PXIoNDIpLGM9cig0NSksaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1uP2g6ZnVuY3Rpb24odCxlKXtpZih0PXModCksZT1sKGUpLGMpdHJ5e3JldHVybiBoKHQsZSl9Y2F0Y2godCl7fWlmKHUodCxlKSlyZXR1cm4gbyghaShhLmYsdCxlKSx0W2VdKX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKX0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7dC5leHBvcnRzPW4/aS5iaW5kKGkpOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoaSxhcmd1bWVudHMpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0Lmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKX0sKHQsZSk9Pnt2YXIgcj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1uJiYhci5jYWxsKHsxOjJ9LDEpO2UuZj1pP2Z1bmN0aW9uKHQpe3ZhciBlPW4odGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06cn0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LCh0LGUscik9Pnt2YXIgbj1yKDE2KSxpPXIoMTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbihpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMTApLGE9cigxOCksbz1PYmplY3Qscz1uKCIiLnNwbGl0KTt0LmV4cG9ydHM9aSgoZnVuY3Rpb24oKXtyZXR1cm4hbygieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT1hKHQpP3ModCwiIik6byh0KX06b30sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLGE9aS5jYWxsLG89biYmaS5iaW5kLmJpbmQoYSxhKTt0LmV4cG9ydHM9bj9vOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KHQsYXJndW1lbnRzKX19fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1uKHt9LnRvU3RyaW5nKSxhPW4oIiIuc2xpY2UpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpLDgsLTEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjApLGk9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXRocm93IGkoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9fSx0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjIpLGk9cigyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCwic3RyaW5nIik7cmV0dXJuIGkoZSk/ZTplKyIifX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigyMyksYT1yKDI2KSxvPXIoMzMpLHM9cigzNiksbD1yKDM3KSx1PVR5cGVFcnJvcixjPWwoInRvUHJpbWl0aXZlIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWkodCl8fGEodCkpcmV0dXJuIHQ7dmFyIHIsbD1vKHQsYyk7aWYobCl7aWYodm9pZCAwPT09ZSYmKGU9ImRlZmF1bHQiKSxyPW4obCx0LGUpLCFpKHIpfHxhKHIpKXJldHVybiByO3Rocm93IHUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIikscyh0LGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjQpLGk9cigyNSksYT1pLmFsbDt0LmV4cG9ydHM9aS5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDpuKHQpfHx0PT09YX06ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10Om4odCl9fSwodCxlLHIpPT57dmFyIG49cigyNSksaT1uLmFsbDt0LmV4cG9ydHM9bi5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fHx0PT09aX06ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9fSx0PT57dmFyIGU9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLHI9dm9pZCAwPT09ZSYmdm9pZCAwIT09ZTt0LmV4cG9ydHM9e2FsbDplLElTX0hUTUxEREE6cn19LCh0LGUscik9Pnt2YXIgbj1yKDI3KSxpPXIoMjQpLGE9cigyOCksbz1yKDI5KSxzPU9iamVjdDt0LmV4cG9ydHM9bz9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3ZhciBlPW4oIlN5bWJvbCIpO3JldHVybiBpKGUpJiZhKGUucHJvdG90eXBlLHModCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyhyPW5bdF0saShyKT9yOnZvaWQgMCk6blt0XSYmblt0XVtlXTt2YXIgcn19LCh0LGUscik9Pnt2YXIgbj1yKDE3KTt0LmV4cG9ydHM9bih7fS5pc1Byb3RvdHlwZU9mKX0sKHQsZSxyKT0+e3ZhciBuPXIoMzApO3QuZXhwb3J0cz1uJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwodCxlLHIpPT57dmFyIG49cigzMSksaT1yKDEwKTt0LmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhaSgoZnVuY3Rpb24oKXt2YXIgdD1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZuJiZuPDQxfSkpfSwodCxlLHIpPT57dmFyIG4saSxhPXIoNyksbz1yKDMyKSxzPWEucHJvY2VzcyxsPWEuRGVubyx1PXMmJnMudmVyc2lvbnN8fGwmJmwudmVyc2lvbixjPXUmJnUudjg7YyYmKGk9KG49Yy5zcGxpdCgiLiIpKVswXT4wJiZuWzBdPDQ/MTorKG5bMF0rblsxXSkpLCFpJiZvJiYoIShuPW8ubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxuWzFdPj03NCkmJihuPW8ubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihpPStuWzFdKSx0LmV4cG9ydHM9aX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpO3QuZXhwb3J0cz1uKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiJ9LCh0LGUscik9Pnt2YXIgbj1yKDM0KSxpPXIoMjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRbZV07cmV0dXJuIGkocik/dm9pZCAwOm4ocil9fSwodCxlLHIpPT57dmFyIG49cigyNCksaT1yKDM1KSxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobih0KSlyZXR1cm4gdDt0aHJvdyBhKGkodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfX0sdD0+e3ZhciBlPVN0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBlKHQpfWNhdGNoKHQpe3JldHVybiJPYmplY3QifX19LCh0LGUscik9Pnt2YXIgbj1yKDExKSxpPXIoMjQpLGE9cigyMyksbz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscztpZigic3RyaW5nIj09PWUmJmkocj10LnRvU3RyaW5nKSYmIWEocz1uKHIsdCkpKXJldHVybiBzO2lmKGkocj10LnZhbHVlT2YpJiYhYShzPW4ocix0KSkpcmV0dXJuIHM7aWYoInN0cmluZyIhPT1lJiZpKHI9dC50b1N0cmluZykmJiFhKHM9bihyLHQpKSlyZXR1cm4gczt0aHJvdyBvKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigzOCksYT1yKDQyKSxvPXIoNDQpLHM9cigzMCksbD1yKDI5KSx1PWkoIndrcyIpLGM9bi5TeW1ib2wsaD1jJiZjLmZvcixmPWw/YzpjJiZjLndpdGhvdXRTZXR0ZXJ8fG87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHUsdCl8fCFzJiYic3RyaW5nIiE9dHlwZW9mIHVbdF0pe3ZhciBlPSJTeW1ib2wuIit0O3MmJmEoYyx0KT91W3RdPWNbdF06dVt0XT1sJiZoP2goZSk6ZihlKX1yZXR1cm4gdVt0XX19LCh0LGUscik9Pnt2YXIgbj1yKDM5KSxpPXIoNDApOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVt0XXx8KGlbdF09dm9pZCAwIT09ZT9lOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMjYuMSIsbW9kZTpuPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4yNi4xL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSl9LHQ9Pnt0LmV4cG9ydHM9ITF9LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cig0MSksYT0iX19jb3JlLWpzX3NoYXJlZF9fIixvPW5bYV18fGkoYSx7fSk7dC5leHBvcnRzPW99LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtpKG4sdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChyKXtuW3RdPWV9cmV0dXJuIGV9fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDQzKSxhPW4oe30uaGFzT3duUHJvcGVydHkpO3QuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCksZSl9fSwodCxlLHIpPT57dmFyIG49cigxOSksaT1PYmplY3Q7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9MCxhPU1hdGgucmFuZG9tKCksbz1uKDEuLnRvU3RyaW5nKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrbygrK2krYSwzNil9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApLGE9cig0Nik7dC5leHBvcnRzPSFuJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGEoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDIzKSxhPW4uZG9jdW1lbnQsbz1pKGEpJiZpKGEuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2EuY3JlYXRlRWxlbWVudCh0KTp7fX19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9bj9mdW5jdGlvbih0LGUscil7cmV0dXJuIGkuZih0LGUsYSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0NSksYT1yKDQ5KSxvPXIoNTApLHM9cigyMSksbD1UeXBlRXJyb3IsdT1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGg9ImVudW1lcmFibGUiLGY9ImNvbmZpZ3VyYWJsZSIsZD0id3JpdGFibGUiO2UuZj1uP2E/ZnVuY3Rpb24odCxlLHIpe2lmKG8odCksZT1zKGUpLG8ociksImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJwcm90b3R5cGUiPT09ZSYmInZhbHVlImluIHImJmQgaW4gciYmIXJbZF0pe3ZhciBuPWModCxlKTtuJiZuW2RdJiYodFtlXT1yLnZhbHVlLHI9e2NvbmZpZ3VyYWJsZTpmIGluIHI/cltmXTpuW2ZdLGVudW1lcmFibGU6aCBpbiByP3JbaF06bltoXSx3cml0YWJsZTohMX0pfXJldHVybiB1KHQsZSxyKX06dTpmdW5jdGlvbih0LGUscil7aWYobyh0KSxlPXMoZSksbyhyKSxpKXRyeXtyZXR1cm4gdSh0LGUscil9Y2F0Y2godCl7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IGwoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIHImJih0W2VdPXIudmFsdWUpLHR9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApO3QuZXhwb3J0cz1uJiZpKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMjMpLGk9U3RyaW5nLGE9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXJldHVybiB0O3Rocm93IGEoaSh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoNDgpLGE9cig1Miksbz1yKDQxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7c3x8KHM9e30pO3ZhciBsPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6ZTtpZihuKHIpJiZhKHIsdSxzKSxzLmdsb2JhbClsP3RbZV09cjpvKGUscik7ZWxzZXt0cnl7cy51bnNhZmU/dFtlXSYmKGw9ITApOmRlbGV0ZSB0W2VdfWNhdGNoKHQpe31sP3RbZV09cjppLmYodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApLGk9cigyNCksYT1yKDQyKSxvPXIoOSkscz1yKDUzKS5DT05GSUdVUkFCTEUsbD1yKDU0KSx1PXIoNTUpLGM9dS5lbmZvcmNlLGg9dS5nZXQsZj1PYmplY3QuZGVmaW5lUHJvcGVydHksZD1vJiYhbigoZnVuY3Rpb24oKXtyZXR1cm4gOCE9PWYoKGZ1bmN0aW9uKCl7fSksImxlbmd0aCIse3ZhbHVlOjh9KS5sZW5ndGh9KSkscD1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIiksdj10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJTeW1ib2woIj09PVN0cmluZyhlKS5zbGljZSgwLDcpJiYoZT0iWyIrU3RyaW5nKGUpLnJlcGxhY2UoL15TeW1ib2xcKChbXildKilcKS8sIiQxIikrIl0iKSxyJiZyLmdldHRlciYmKGU9ImdldCAiK2UpLHImJnIuc2V0dGVyJiYoZT0ic2V0ICIrZSksKCFhKHQsIm5hbWUiKXx8cyYmdC5uYW1lIT09ZSkmJihvP2YodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSk6dC5uYW1lPWUpLGQmJnImJmEociwiYXJpdHkiKSYmdC5sZW5ndGghPT1yLmFyaXR5JiZmKHQsImxlbmd0aCIse3ZhbHVlOnIuYXJpdHl9KTt0cnl7ciYmYShyLCJjb25zdHJ1Y3RvciIpJiZyLmNvbnN0cnVjdG9yP28mJmYodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KTp0LnByb3RvdHlwZSYmKHQucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2godCl7fXZhciBuPWModCk7cmV0dXJuIGEobiwic291cmNlIil8fChuLnNvdXJjZT1wLmpvaW4oInN0cmluZyI9PXR5cGVvZiBlP2U6IiIpKSx0fTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9digoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzKSYmaCh0aGlzKS5zb3VyY2V8fGwodGhpcyl9KSwidG9TdHJpbmciKX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQyKSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxvPW4mJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1pKGEsIm5hbWUiKSxsPXMmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsdT1zJiYoIW58fG4mJm8oYSwibmFtZSIpLmNvbmZpZ3VyYWJsZSk7dC5leHBvcnRzPXtFWElTVFM6cyxQUk9QRVI6bCxDT05GSUdVUkFCTEU6dX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMjQpLGE9cig0MCksbz1uKEZ1bmN0aW9uLnRvU3RyaW5nKTtpKGEuaW5zcGVjdFNvdXJjZSl8fChhLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9KSx0LmV4cG9ydHM9YS5pbnNwZWN0U291cmNlfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig1Nikscz1yKDcpLGw9cigyMyksdT1yKDQ3KSxjPXIoNDIpLGg9cig0MCksZj1yKDU3KSxkPXIoNTgpLHA9Ik9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIix2PXMuVHlwZUVycm9yLHk9cy5XZWFrTWFwO2lmKG98fGguc3RhdGUpe3ZhciBtPWguc3RhdGV8fChoLnN0YXRlPW5ldyB5KTttLmdldD1tLmdldCxtLmhhcz1tLmhhcyxtLnNldD1tLnNldCxuPWZ1bmN0aW9uKHQsZSl7aWYobS5oYXModCkpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCxtLnNldCh0LGUpLGV9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIG0uZ2V0KHQpfHx7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gbS5oYXModCl9fWVsc2V7dmFyIGc9Zigic3RhdGUiKTtkW2ddPSEwLG49ZnVuY3Rpb24odCxlKXtpZihjKHQsZykpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCx1KHQsZyxlKSxlfSxpPWZ1bmN0aW9uKHQpe3JldHVybiBjKHQsZyk/dFtnXTp7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gYyh0LGcpfX10LmV4cG9ydHM9e3NldDpuLGdldDppLGhhczphLGVuZm9yY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/aSh0KTpuKHQse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByO2lmKCFsKGUpfHwocj1pKGUpKS50eXBlIT09dCl0aHJvdyB2KCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIHJ9fX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigyNCksYT1uLldlYWtNYXA7dC5leHBvcnRzPWkoYSkmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoYSkpfSwodCxlLHIpPT57dmFyIG49cigzOCksaT1yKDQ0KSxhPW4oImtleXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFbdF18fChhW3RdPWkodCkpfX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cig2MCksYT1yKDgpLG89cig0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIHM9aShlKSxsPW8uZix1PWEuZixjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBoPXNbY107bih0LGgpfHxyJiZuKHIsaCl8fGwodCxoLHUoZSxoKSl9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cigxNyksYT1yKDYxKSxvPXIoNzApLHM9cig1MCksbD1pKFtdLmNvbmNhdCk7dC5leHBvcnRzPW4oIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPWEuZihzKHQpKSxyPW8uZjtyZXR1cm4gcj9sKGUscih0KSk6ZX19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gbih0LGkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9cig0MiksYT1yKDE1KSxvPXIoNjMpLmluZGV4T2Yscz1yKDU4KSxsPW4oW10ucHVzaCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1hKHQpLHU9MCxjPVtdO2ZvcihyIGluIG4pIWkocyxyKSYmaShuLHIpJiZsKGMscik7Zm9yKDtlLmxlbmd0aD51OylpKG4scj1lW3UrK10pJiYofm8oYyxyKXx8bChjLHIpKTtyZXR1cm4gY319LCh0LGUscik9Pnt2YXIgbj1yKDE1KSxpPXIoNjQpLGE9cig2Nyksbz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG8pe3ZhciBzLGw9bihlKSx1PWEobCksYz1pKG8sdSk7aWYodCYmciE9cil7Zm9yKDt1PmM7KWlmKChzPWxbYysrXSkhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+YztjKyspaWYoKHR8fGMgaW4gbCkmJmxbY109PT1yKXJldHVybiB0fHxjfHwwO3JldHVybiF0JiYtMX19O3QuZXhwb3J0cz17aW5jbHVkZXM6byghMCksaW5kZXhPZjpvKCExKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWF4LGE9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KTtyZXR1cm4gcjwwP2kocitlLDApOmEocixlKX19LCh0LGUscik9Pnt2YXIgbj1yKDY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGUhPWV8fDA9PT1lPzA6bihlKX19LHQ9Pnt2YXIgZT1NYXRoLmNlaWwscj1NYXRoLmZsb29yO3QuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXt2YXIgbj0rdDtyZXR1cm4obj4wP3I6ZSkobil9fSwodCxlLHIpPT57dmFyIG49cig2OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQubGVuZ3RoKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP2kobih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sdD0+e3QuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSwodCxlKT0+e2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDI0KSxhPS8jfFwucHJvdG90eXBlXC4vLG89ZnVuY3Rpb24odCxlKXt2YXIgcj1sW3ModCldO3JldHVybiByPT1jfHxyIT11JiYoaShlKT9uKGUpOiEhZSl9LHM9by5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKGEsIi4iKS50b0xvd2VyQ2FzZSgpfSxsPW8uZGF0YT17fSx1PW8uTkFUSVZFPSJOIixjPW8uUE9MWUZJTEw9IlAiO3QuZXhwb3J0cz1vfSwodCxlLHIpPT57dmFyIG49cigzNyksaT1yKDczKSxhPXIoNDgpLmYsbz1uKCJ1bnNjb3BhYmxlcyIpLHM9QXJyYXkucHJvdG90eXBlO251bGw9PXNbb10mJmEocyxvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6aShudWxsKX0pLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtzW29dW3RdPSEwfX0sKHQsZSxyKT0+e3ZhciBuLGk9cig1MCksYT1yKDc0KSxvPXIoNjkpLHM9cig1OCksbD1yKDc2KSx1PXIoNDYpLGM9cig1NyksaD0icHJvdG90eXBlIixmPSJzY3JpcHQiLGQ9YygiSUVfUFJPVE8iKSxwPWZ1bmN0aW9uKCl7fSx2PWZ1bmN0aW9uKHQpe3JldHVybiI8IitmKyI+Iit0KyI8LyIrZisiPiJ9LHk9ZnVuY3Rpb24odCl7dC53cml0ZSh2KCIiKSksdC5jbG9zZSgpO3ZhciBlPXQucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gdD1udWxsLGV9LG09ZnVuY3Rpb24oKXt0cnl7bj1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaCh0KXt9dmFyIHQsZSxyO209InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJm4/eShuKTooZT11KCJpZnJhbWUiKSxyPSJqYXZhIitmKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGwuYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKHIpLCh0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUodigiZG9jdW1lbnQuRj1PYmplY3QiKSksdC5jbG9zZSgpLHQuRik6eShuKTtmb3IodmFyIGk9by5sZW5ndGg7aS0tOylkZWxldGUgbVtoXVtvW2ldXTtyZXR1cm4gbSgpfTtzW2RdPSEwLHQuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8ocFtoXT1pKHQpLHI9bmV3IHAscFtoXT1udWxsLHJbZF09dCk6cj1tKCksdm9pZCAwPT09ZT9yOmEuZihyLGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQ5KSxhPXIoNDgpLG89cig1MCkscz1yKDE1KSxsPXIoNzUpO2UuZj1uJiYhaT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe28odCk7Zm9yKHZhciByLG49cyhlKSxpPWwoZSksdT1pLmxlbmd0aCxjPTA7dT5jOylhLmYodCxyPWlbYysrXSxuW3JdKTtyZXR1cm4gdH19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpKX19LCh0LGUscik9Pnt2YXIgbj1yKDI3KTt0LmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuW3RdLnByb3RvdHlwZVtlXSl9fSwodCxlLHIpPT57cig3OSl9LCh0LGUscik9Pnt2YXIgbj1yKDgwKSxpPXIoNjcpLGE9cig2NSksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzKSxyPWkoZSksbj1hKHQpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDplW3NdfSkpfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig4MSkscz1yKDkpLGw9cig3KSx1PXIoMjQpLGM9cigyMyksaD1yKDQyKSxmPXIoODIpLGQ9cigzNSkscD1yKDQ3KSx2PXIoNTEpLHk9cig0OCkuZixtPXIoMjgpLGc9cig4NCksYj1yKDg2KSxfPXIoMzcpLHc9cig0NCksQT1yKDU1KSxrPUEuZW5mb3JjZSxTPUEuZ2V0LHg9bC5JbnQ4QXJyYXksRT14JiZ4LnByb3RvdHlwZSxQPWwuVWludDhDbGFtcGVkQXJyYXksVD1QJiZQLnByb3RvdHlwZSxDPXgmJmcoeCksTz1FJiZnKEUpLEY9T2JqZWN0LnByb3RvdHlwZSxNPWwuVHlwZUVycm9yLFI9XygidG9TdHJpbmdUYWciKSxJPXcoIlRZUEVEX0FSUkFZX1RBRyIpLGo9IlR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsTD1vJiYhIWImJiJPcGVyYSIhPT1mKGwub3BlcmEpLEQ9ITEsTj17SW50OEFycmF5OjEsVWludDhBcnJheToxLFVpbnQ4Q2xhbXBlZEFycmF5OjEsSW50MTZBcnJheToyLFVpbnQxNkFycmF5OjIsSW50MzJBcnJheTo0LFVpbnQzMkFycmF5OjQsRmxvYXQzMkFycmF5OjQsRmxvYXQ2NEFycmF5Ojh9LFU9e0JpZ0ludDY0QXJyYXk6OCxCaWdVaW50NjRBcnJheTo4fSxXPWZ1bmN0aW9uKHQpe3ZhciBlPWcodCk7aWYoYyhlKSl7dmFyIHI9UyhlKTtyZXR1cm4gciYmaChyLGopP3Jbal06VyhlKX19LEc9ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4gaChOLGUpfHxoKFUsZSl9O2ZvcihuIGluIE4pKGE9KGk9bFtuXSkmJmkucHJvdG90eXBlKT9rKGEpW2pdPWk6TD0hMTtmb3IobiBpbiBVKShhPShpPWxbbl0pJiZpLnByb3RvdHlwZSkmJihrKGEpW2pdPWkpO2lmKCghTHx8IXUoQyl8fEM9PT1GdW5jdGlvbi5wcm90b3R5cGUpJiYoQz1mdW5jdGlvbigpe3Rocm93IE0oIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LEwpKWZvcihuIGluIE4pbFtuXSYmYihsW25dLEMpO2lmKCghTHx8IU98fE89PT1GKSYmKE89Qy5wcm90b3R5cGUsTCkpZm9yKG4gaW4gTilsW25dJiZiKGxbbl0ucHJvdG90eXBlLE8pO2lmKEwmJmcoVCkhPT1PJiZiKFQsTykscyYmIWgoTyxSKSlmb3IobiBpbiBEPSEwLHkoTyxSLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzKT90aGlzW0ldOnZvaWQgMH19KSxOKWxbbl0mJnAobFtuXSxJLG4pO3QuZXhwb3J0cz17TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpMLFRZUEVEX0FSUkFZX1RBRzpEJiZJLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKEcodCkpcmV0dXJuIHQ7dGhyb3cgTSgiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LGFUeXBlZEFycmF5Q29uc3RydWN0b3I6ZnVuY3Rpb24odCl7aWYodSh0KSYmKCFifHxtKEMsdCkpKXJldHVybiB0O3Rocm93IE0oZCh0KSsiIGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIil9LGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6ZnVuY3Rpb24odCxlLHIsbil7aWYocyl7aWYocilmb3IodmFyIGkgaW4gTil7dmFyIGE9bFtpXTtpZihhJiZoKGEucHJvdG90eXBlLHQpKXRyeXtkZWxldGUgYS5wcm90b3R5cGVbdF19Y2F0Y2gocil7dHJ5e2EucHJvdG90eXBlW3RdPWV9Y2F0Y2godCl7fX19T1t0XSYmIXJ8fHYoTyx0LHI/ZTpMJiZFW3RdfHxlLG4pfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihzKXtpZihiKXtpZihyKWZvcihuIGluIE4paWYoKGk9bFtuXSkmJmgoaSx0KSl0cnl7ZGVsZXRlIGlbdF19Y2F0Y2godCl7fWlmKENbdF0mJiFyKXJldHVybjt0cnl7cmV0dXJuIHYoQyx0LHI/ZTpMJiZDW3RdfHxlKX1jYXRjaCh0KXt9fWZvcihuIGluIE4pIShpPWxbbl0pfHxpW3RdJiYhcnx8dihpLHQsZSl9fSxnZXRUeXBlZEFycmF5Q29uc3RydWN0b3I6Vyxpc1ZpZXc6ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4iRGF0YVZpZXciPT09ZXx8aChOLGUpfHxoKFUsZSl9LGlzVHlwZWRBcnJheTpHLFR5cGVkQXJyYXk6QyxUeXBlZEFycmF5UHJvdG90eXBlOk99fSx0PT57dC5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgRGF0YVZpZXd9LCh0LGUscik9Pnt2YXIgbj1yKDgzKSxpPXIoMjQpLGE9cigxOCksbz1yKDM3KSgidG9TdHJpbmdUYWciKSxzPU9iamVjdCxsPSJBcmd1bWVudHMiPT1hKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPW4/YTpmdW5jdGlvbih0KXt2YXIgZSxyLG47cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yocj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fShlPXModCksbykpP3I6bD9hKGUpOiJPYmplY3QiPT0obj1hKGUpKSYmaShlLmNhbGxlZSk/IkFyZ3VtZW50cyI6bn19LCh0LGUscik9Pnt2YXIgbj17fTtuW3IoMzcpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhuKX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cigyNCksYT1yKDQzKSxvPXIoNTcpLHM9cig4NSksbD1vKCJJRV9QUk9UTyIpLHU9T2JqZWN0LGM9dS5wcm90b3R5cGU7dC5leHBvcnRzPXM/dS5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXt2YXIgZT1hKHQpO2lmKG4oZSxsKSlyZXR1cm4gZVtsXTt2YXIgcj1lLmNvbnN0cnVjdG9yO3JldHVybiBpKHIpJiZlIGluc3RhbmNlb2Ygcj9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgdT9jOm51bGx9fSwodCxlLHIpPT57dmFyIG49cigxMCk7dC5leHBvcnRzPSFuKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyB0KSE9PXQucHJvdG90eXBlfSkpfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDUwKSxhPXIoODcpO3QuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgdCxlPSExLHI9e307dHJ5eyh0PW4oT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpKShyLFtdKSxlPXIgaW5zdGFuY2VvZiBBcnJheX1jYXRjaCh0KXt9cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGkociksYShuKSxlP3QocixuKTpyLl9fcHJvdG9fXz1uLHJ9fSgpOnZvaWQgMCl9LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPVN0cmluZyxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0fHxuKHQpKXJldHVybiB0O3Rocm93IGEoIkNhbid0IHNldCAiK2kodCkrIiBhcyBhIHByb3RvdHlwZSIpfX0sKHQsZSxyKT0+e3IoODkpLHIoOTYpLHIoOTgpLHIoMTIxKSxyKDEyMyk7dmFyIG49cigxMzIpO3QuZXhwb3J0cz1uLnN0cnVjdHVyZWRDbG9uZX0sKHQsZSxyKT0+e3ZhciBuPXIoMTUpLGk9cig3MiksYT1yKDkwKSxvPXIoNTUpLHM9cig0OCkuZixsPXIoOTEpLHU9cig5NSksYz1yKDM5KSxoPXIoOSksZj0iQXJyYXkgSXRlcmF0b3IiLGQ9by5zZXQscD1vLmdldHRlckZvcihmKTt0LmV4cG9ydHM9bChBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe2QodGhpcyx7dHlwZTpmLHRhcmdldDpuKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLGU9dC50YXJnZXQscj10LmtpbmQsbj10LmluZGV4Kys7cmV0dXJuIWV8fG4+PWUubGVuZ3RoPyh0LnRhcmdldD12b2lkIDAsdSh2b2lkIDAsITApKTp1KCJrZXlzIj09cj9uOiJ2YWx1ZXMiPT1yP2Vbbl06W24sZVtuXV0sITEpfSksInZhbHVlcyIpO3ZhciB2PWEuQXJndW1lbnRzPWEuQXJyYXk7aWYoaSgia2V5cyIpLGkoInZhbHVlcyIpLGkoImVudHJpZXMiKSwhYyYmaCYmInZhbHVlcyIhPT12Lm5hbWUpdHJ5e3ModiwibmFtZSIse3ZhbHVlOiJ2YWx1ZXMifSl9Y2F0Y2godCl7fX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDExKSxhPXIoMzkpLG89cig1Mykscz1yKDI0KSxsPXIoOTIpLHU9cig4NCksYz1yKDg2KSxoPXIoOTQpLGY9cig0NyksZD1yKDUxKSxwPXIoMzcpLHY9cig5MCkseT1yKDkzKSxtPW8uUFJPUEVSLGc9by5DT05GSUdVUkFCTEUsYj15Lkl0ZXJhdG9yUHJvdG90eXBlLF89eS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLHc9cCgiaXRlcmF0b3IiKSxBPSJrZXlzIixrPSJ2YWx1ZXMiLFM9ImVudHJpZXMiLHg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scCx5LEUpe2wocixlLG8pO3ZhciBQLFQsQyxPPWZ1bmN0aW9uKHQpe2lmKHQ9PT1wJiZqKXJldHVybiBqO2lmKCFfJiZ0IGluIFIpcmV0dXJuIFJbdF07c3dpdGNoKHQpe2Nhc2UgQTpjYXNlIGs6Y2FzZSBTOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyl9fSxGPWUrIiBJdGVyYXRvciIsTT0hMSxSPXQucHJvdG90eXBlLEk9Ult3XXx8UlsiQEBpdGVyYXRvciJdfHxwJiZSW3BdLGo9IV8mJkl8fE8ocCksTD0iQXJyYXkiPT1lJiZSLmVudHJpZXN8fEk7aWYoTCYmKFA9dShMLmNhbGwobmV3IHQpKSkhPT1PYmplY3QucHJvdG90eXBlJiZQLm5leHQmJihhfHx1KFApPT09Ynx8KGM/YyhQLGIpOnMoUFt3XSl8fGQoUCx3LHgpKSxoKFAsRiwhMCwhMCksYSYmKHZbRl09eCkpLG0mJnA9PWsmJkkmJkkubmFtZSE9PWsmJighYSYmZz9mKFIsIm5hbWUiLGspOihNPSEwLGo9ZnVuY3Rpb24oKXtyZXR1cm4gaShJLHRoaXMpfSkpLHApaWYoVD17dmFsdWVzOk8oayksa2V5czp5P2o6TyhBKSxlbnRyaWVzOk8oUyl9LEUpZm9yKEMgaW4gVCkoX3x8TXx8IShDIGluIFIpKSYmZChSLEMsVFtDXSk7ZWxzZSBuKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6X3x8TX0sVCk7cmV0dXJuIGEmJiFFfHxSW3ddPT09anx8ZChSLHcsaix7bmFtZTpwfSksdltlXT1qLFR9fSwodCxlLHIpPT57dmFyIG49cig5MykuSXRlcmF0b3JQcm90b3R5cGUsaT1yKDczKSxhPXIoMTQpLG89cig5NCkscz1yKDkwKSxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXt2YXIgYz1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1pKG4se25leHQ6YSgrIXUscil9KSxvKHQsYywhMSwhMCksc1tjXT1sLHR9fSwodCxlLHIpPT57dmFyIG4saSxhLG89cigxMCkscz1yKDI0KSxsPXIoMjMpLHU9cig3MyksYz1yKDg0KSxoPXIoNTEpLGY9cigzNyksZD1yKDM5KSxwPWYoIml0ZXJhdG9yIiksdj0hMTtbXS5rZXlzJiYoIm5leHQiaW4oYT1bXS5rZXlzKCkpPyhpPWMoYyhhKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKG49aSk6dj0hMCksIWwobil8fG8oKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIG5bcF0uY2FsbCh0KSE9PXR9KSk/bj17fTpkJiYobj11KG4pKSxzKG5bcF0pfHxoKG4scCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOm4sQlVHR1lfU0FGQVJJX0lURVJBVE9SUzp2fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDQyKSxhPXIoMzcpKCJ0b1N0cmluZ1RhZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dCYmIXImJih0PXQucHJvdG90eXBlKSx0JiYhaSh0LGEpJiZuKHQsYSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LHQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6dCxkb25lOmV9fX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig1MSksYT1yKDk3KTtufHxpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixhLHt1bnNhZmU6ITB9KX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig4Mik7dC5leHBvcnRzPW4/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK2kodGhpcykrIl0ifX0sKHQsZSxyKT0+e3IoOTkpfSwodCxlLHIpPT57cigxMDApKCJNYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDcpLGE9cigxNyksbz1yKDcxKSxzPXIoNTEpLGw9cigxMDEpLHU9cigxMDgpLGM9cigxMTUpLGg9cigyNCksZj1yKDIwKSxkPXIoMjMpLHA9cigxMCksdj1yKDExNikseT1yKDk0KSxtPXIoMTE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBnPS0xIT09dC5pbmRleE9mKCJNYXAiKSxiPS0xIT09dC5pbmRleE9mKCJXZWFrIiksXz1nPyJzZXQiOiJhZGQiLHc9aVt0XSxBPXcmJncucHJvdG90eXBlLGs9dyxTPXt9LHg9ZnVuY3Rpb24odCl7dmFyIGU9YShBW3RdKTtzKEEsdCwiYWRkIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLDA9PT10PzA6dCksdGhpc306ImRlbGV0ZSI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShiJiYhZCh0KSkmJmUodGhpcywwPT09dD8wOnQpfToiZ2V0Ij09dD9mdW5jdGlvbih0KXtyZXR1cm4gYiYmIWQodCk/dm9pZCAwOmUodGhpcywwPT09dD8wOnQpfToiaGFzIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKGImJiFkKHQpKSYmZSh0aGlzLDA9PT10PzA6dCl9OmZ1bmN0aW9uKHQscil7cmV0dXJuIGUodGhpcywwPT09dD8wOnQsciksdGhpc30pfTtpZihvKHQsIWgodyl8fCEoYnx8QS5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IHcpLmVudHJpZXMoKS5uZXh0KCl9KSkpKSlrPXIuZ2V0Q29uc3RydWN0b3IoZSx0LGcsXyksbC5lbmFibGUoKTtlbHNlIGlmKG8odCwhMCkpe3ZhciBFPW5ldyBrLFA9RVtfXShiP3t9Oi0wLDEpIT1FLFQ9cCgoZnVuY3Rpb24oKXtFLmhhcygxKX0pKSxDPXYoKGZ1bmN0aW9uKHQpe25ldyB3KHQpfSkpLE89IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyB3LGU9NTtlLS07KXRbX10oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSkpO0N8fCgoaz1lKChmdW5jdGlvbih0LGUpe2ModCxBKTt2YXIgcj1tKG5ldyB3LHQsayk7cmV0dXJuIGYoZSl8fHUoZSxyW19dLHt0aGF0OnIsQVNfRU5UUklFUzpnfSkscn0pKSkucHJvdG90eXBlPUEsQS5jb25zdHJ1Y3Rvcj1rKSwoVHx8TykmJih4KCJkZWxldGUiKSx4KCJoYXMiKSxnJiZ4KCJnZXQiKSksKE98fFApJiZ4KF8pLGImJkEuY2xlYXImJmRlbGV0ZSBBLmNsZWFyfXJldHVybiBTW3RdPWssbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDprIT13fSxTKSx5KGssdCksYnx8ci5zZXRTdHJvbmcoayx0LGcpLGt9fSwodCxlLHIpPT57dmFyIG49cig2KSxpPXIoMTcpLGE9cig1OCksbz1yKDIzKSxzPXIoNDIpLGw9cig0OCkuZix1PXIoNjEpLGM9cigxMDIpLGg9cigxMDUpLGY9cig0NCksZD1yKDEwNykscD0hMSx2PWYoIm1ldGEiKSx5PTAsbT1mdW5jdGlvbih0KXtsKHQsdix7dmFsdWU6e29iamVjdElEOiJPIit5Kyssd2Vha0RhdGE6e319fSl9LGc9dC5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXtnLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgdD11LmYsZT1pKFtdLnNwbGljZSkscj17fTtyW3ZdPTEsdChyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQociksaT0wLGE9bi5sZW5ndGg7aTxhO2krKylpZihuW2ldPT09dil7ZShuLGksMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6Yy5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6KCJzdHJpbmciPT10eXBlb2YgdD8iUyI6IlAiKSt0O2lmKCFzKHQsdikpe2lmKCFoKHQpKXJldHVybiJGIjtpZighZSlyZXR1cm4iRSI7bSh0KX1yZXR1cm4gdFt2XS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighcyh0LHYpKXtpZighaCh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTttKHQpfXJldHVybiB0W3ZdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gZCYmcCYmaCh0KSYmIXModCx2KSYmbSh0KSx0fX07YVt2XT0hMH0sKHQsZSxyKT0+e3ZhciBuPXIoMTgpLGk9cigxNSksYT1yKDYxKS5mLG89cigxMDMpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gcyYmIldpbmRvdyI9PW4odCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhKHQpfWNhdGNoKHQpe3JldHVybiBvKHMpfX0odCk6YShpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDY0KSxpPXIoNjcpLGE9cigxMDQpLG89QXJyYXkscz1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbD1pKHQpLHU9bihlLGwpLGM9bih2b2lkIDA9PT1yP2w6cixsKSxoPW8ocyhjLXUsMCkpLGY9MDt1PGM7dSsrLGYrKylhKGgsZix0W3VdKTtyZXR1cm4gaC5sZW5ndGg9ZixofX0sKHQsZSxyKT0+e3ZhciBuPXIoMjEpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPW4oZSk7byBpbiB0P2kuZih0LG8sYSgwLHIpKTp0W29dPXJ9fSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDIzKSxhPXIoMTgpLG89cigxMDYpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxsPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTt0LmV4cG9ydHM9bHx8bz9mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighb3x8IkFycmF5QnVmZmVyIiE9YSh0KSkmJighc3x8cyh0KSl9OnN9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciB0PW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKHQpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYSIse3ZhbHVlOjh9KX19KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwOSksaT1yKDExKSxhPXIoNTApLG89cigzNSkscz1yKDExMSksbD1yKDY3KSx1PXIoMjgpLGM9cigxMTIpLGg9cigxMTMpLGY9cigxMTQpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfSx2PXAucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHksbSxnLGIsXyx3LEEsaz1yJiZyLnRoYXQsUz0hKCFyfHwhci5BU19FTlRSSUVTKSx4PSEoIXJ8fCFyLklTX1JFQ09SRCksRT0hKCFyfHwhci5JU19JVEVSQVRPUiksUD0hKCFyfHwhci5JTlRFUlJVUFRFRCksVD1uKGUsayksQz1mdW5jdGlvbih0KXtyZXR1cm4geSYmZih5LCJub3JtYWwiLHQpLG5ldyBwKCEwLHQpfSxPPWZ1bmN0aW9uKHQpe3JldHVybiBTPyhhKHQpLFA/VCh0WzBdLHRbMV0sQyk6VCh0WzBdLHRbMV0pKTpQP1QodCxDKTpUKHQpfTtpZih4KXk9dC5pdGVyYXRvcjtlbHNlIGlmKEUpeT10O2Vsc2V7aWYoIShtPWgodCkpKXRocm93IGQobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMobSkpe2ZvcihnPTAsYj1sKHQpO2I+ZztnKyspaWYoKF89Tyh0W2ddKSkmJnUodixfKSlyZXR1cm4gXztyZXR1cm4gbmV3IHAoITEpfXk9Yyh0LG0pfWZvcih3PXg/dC5uZXh0OnkubmV4dDshKEE9aSh3LHkpKS5kb25lOyl7dHJ5e189TyhBLnZhbHVlKX1jYXRjaCh0KXtmKHksInRocm93Iix0KX1pZigib2JqZWN0Ij09dHlwZW9mIF8mJl8mJnUodixfKSlyZXR1cm4gX31yZXR1cm4gbmV3IHAoITEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEwKSxpPXIoMzQpLGE9cigxMiksbz1uKG4uYmluZCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCksdm9pZCAwPT09ZT90OmE/byh0LGUpOmZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LCh0LGUscik9Pnt2YXIgbj1yKDE4KSxpPXIoMTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiRnVuY3Rpb24iPT09bih0KSlyZXR1cm4gaSh0KX19LCh0LGUscik9Pnt2YXIgbj1yKDM3KSxpPXIoOTApLGE9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihpLkFycmF5PT09dHx8b1thXT09PXQpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigzNCksYT1yKDUwKSxvPXIoMzUpLHM9cigxMTMpLGw9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKHQpOmU7aWYoaShyKSlyZXR1cm4gYShuKHIsdCkpO3Rocm93IGwobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKHQsZSxyKT0+e3ZhciBuPXIoODIpLGk9cigzMyksYT1yKDIwKSxvPXIoOTApLHM9cigzNykoIml0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiBpKHQscyl8fGkodCwiQEBpdGVyYXRvciIpfHxvW24odCldfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig1MCksYT1yKDMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHM7aSh0KTt0cnl7aWYoIShvPWEodCwicmV0dXJuIikpKXtpZigidGhyb3ciPT09ZSl0aHJvdyByO3JldHVybiByfW89bihvLHQpfWNhdGNoKHQpe3M9ITAsbz10fWlmKCJ0aHJvdyI9PT1lKXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBpKG8pLHJ9fSwodCxlLHIpPT57dmFyIG49cigyOCksaT1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYobihlLHQpKXJldHVybiB0O3Rocm93IGkoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwodCxlLHIpPT57dmFyIG49cigzNykoIml0ZXJhdG9yIiksaT0hMTt0cnl7dmFyIGE9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFhKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtpPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFpKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgYT17fTthW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSx0KGEpfWNhdGNoKHQpe31yZXR1cm4gcn19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoMjMpLGE9cig4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzO3JldHVybiBhJiZuKG89ZS5jb25zdHJ1Y3RvcikmJm8hPT1yJiZpKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmEodCxzKSx0fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDczKSxhPXIoMTE5KSxvPXIoMTA5KSxzPXIoMTE1KSxsPXIoMjApLHU9cigxMDgpLGM9cig5MSksaD1yKDk1KSxmPXIoMTIwKSxkPXIoOSkscD1yKDEwMSkuZmFzdEtleSx2PXIoNTUpLHk9di5zZXQsbT12LmdldHRlckZvcjt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxyLGMpe3ZhciBoPXQoKGZ1bmN0aW9uKHQsbil7cyh0LGYpLHkodCx7dHlwZTplLGluZGV4OmkobnVsbCksZmlyc3Q6dm9pZCAwLGxhc3Q6dm9pZCAwLHNpemU6MH0pLGR8fCh0LnNpemU9MCksbChuKXx8dShuLHRbY10se3RoYXQ6dCxBU19FTlRSSUVTOnJ9KX0pKSxmPWgucHJvdG90eXBlLHY9bShlKSxnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dih0KSxvPWIodCxlKTtyZXR1cm4gbz9vLnZhbHVlPXI6KGEubGFzdD1vPXtpbmRleDppPXAoZSwhMCksa2V5OmUsdmFsdWU6cixwcmV2aW91czpuPWEubGFzdCxuZXh0OnZvaWQgMCxyZW1vdmVkOiExfSxhLmZpcnN0fHwoYS5maXJzdD1vKSxuJiYobi5uZXh0PW8pLGQ/YS5zaXplKys6dC5zaXplKyssIkYiIT09aSYmKGEuaW5kZXhbaV09bykpLHR9LGI9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXYodCksaT1wKGUpO2lmKCJGIiE9PWkpcmV0dXJuIG4uaW5kZXhbaV07Zm9yKHI9bi5maXJzdDtyO3I9ci5uZXh0KWlmKHIua2V5PT1lKXJldHVybiByfTtyZXR1cm4gYShmLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD12KHRoaXMpLGU9dC5pbmRleCxyPXQuZmlyc3Q7cjspci5yZW1vdmVkPSEwLHIucHJldmlvdXMmJihyLnByZXZpb3VzPXIucHJldmlvdXMubmV4dD12b2lkIDApLGRlbGV0ZSBlW3IuaW5kZXhdLHI9ci5uZXh0O3QuZmlyc3Q9dC5sYXN0PXZvaWQgMCxkP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXYoZSksbj1iKGUsdCk7aWYobil7dmFyIGk9bi5uZXh0LGE9bi5wcmV2aW91cztkZWxldGUgci5pbmRleFtuLmluZGV4XSxuLnJlbW92ZWQ9ITAsYSYmKGEubmV4dD1pKSxpJiYoaS5wcmV2aW91cz1hKSxyLmZpcnN0PT1uJiYoci5maXJzdD1pKSxyLmxhc3Q9PW4mJihyLmxhc3Q9YSksZD9yLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIW59LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dih0aGlzKSxuPW8odCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7ZT1lP2UubmV4dDpyLmZpcnN0Oylmb3IobihlLnZhbHVlLGUua2V5LHRoaXMpO2UmJmUucmVtb3ZlZDspZT1lLnByZXZpb3VzfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISFiKHRoaXMsdCl9fSksYShmLHI/e2dldDpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBnKHRoaXMsMD09PXQ/MDp0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLHQ9MD09PXQ/MDp0LHQpfX0pLGQmJm4oZiwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB2KHRoaXMpLnNpemV9fSksaH0sc2V0U3Ryb25nOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lKyIgSXRlcmF0b3IiLGk9bShlKSxhPW0obik7Yyh0LGUsKGZ1bmN0aW9uKHQsZSl7eSh0aGlzLHt0eXBlOm4sdGFyZ2V0OnQsc3RhdGU6aSh0KSxraW5kOmUsbGFzdDp2b2lkIDB9KX0pLChmdW5jdGlvbigpe2Zvcih2YXIgdD1hKHRoaXMpLGU9dC5raW5kLHI9dC5sYXN0O3ImJnIucmVtb3ZlZDspcj1yLnByZXZpb3VzO3JldHVybiB0LnRhcmdldCYmKHQubGFzdD1yPXI/ci5uZXh0OnQuc3RhdGUuZmlyc3QpP2goImtleXMiPT1lP3Iua2V5OiJ2YWx1ZXMiPT1lP3IudmFsdWU6W3Iua2V5LHIudmFsdWVdLCExKToodC50YXJnZXQ9dm9pZCAwLGgodm9pZCAwLCEwKSl9KSxyPyJlbnRyaWVzIjoidmFsdWVzIiwhciwhMCksZihlKX19fSwodCxlLHIpPT57dmFyIG49cig1MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGkgaW4gZSluKHQsaSxlW2ldLHIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cig0OCksYT1yKDM3KSxvPXIoOSkscz1hKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1pLmY7byYmZSYmIWVbc10mJnIoZSxzLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwodCxlLHIpPT57cigxMjIpfSwodCxlLHIpPT57cigxMDApKCJTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuLGk9cigzOSksYT1yKDYpLG89cig3KSxzPXIoMjcpLGw9cigxNyksdT1yKDEwKSxjPXIoNDQpLGg9cigyNCksZj1yKDEyNCksZD1yKDIwKSxwPXIoMjMpLHY9cigyNikseT1yKDEwOCksbT1yKDUwKSxnPXIoODIpLGI9cig0MiksXz1yKDEwNCksdz1yKDQ3KSxBPXIoNjcpLGs9cigxMjUpLFM9cigxMjYpLHg9cigxMjgpLEU9cigzMSksUD1yKDEyOSksVD1yKDEzMCksQz1yKDEzMSksTz1vLk9iamVjdCxGPW8uRGF0ZSxNPW8uRXJyb3IsUj1vLkV2YWxFcnJvcixJPW8uUmFuZ2VFcnJvcixqPW8uUmVmZXJlbmNlRXJyb3IsTD1vLlN5bnRheEVycm9yLEQ9by5UeXBlRXJyb3IsTj1vLlVSSUVycm9yLFU9by5QZXJmb3JtYW5jZU1hcmssVz1vLldlYkFzc2VtYmx5LEc9VyYmVy5Db21waWxlRXJyb3J8fE0sQj1XJiZXLkxpbmtFcnJvcnx8TSxxPVcmJlcuUnVudGltZUVycm9yfHxNLEg9cygiRE9NRXhjZXB0aW9uIiksej1zKCJTZXQiKSxWPXMoIk1hcCIpLFg9Vi5wcm90b3R5cGUsWT1sKFguaGFzKSxLPWwoWC5nZXQpLEo9bChYLnNldCksUT1sKHoucHJvdG90eXBlLmFkZCksJD1zKCJPYmplY3QiLCJrZXlzIiksWj1sKFtdLnB1c2gpLHR0PWwoKCEwKS52YWx1ZU9mKSxldD1sKDEuLnZhbHVlT2YpLHJ0PWwoIiIudmFsdWVPZiksbnQ9bChGLnByb3RvdHlwZS5nZXRUaW1lKSxpdD1jKCJzdHJ1Y3R1cmVkQ2xvbmUiKSxhdD0iRGF0YUNsb25lRXJyb3IiLG90PSJUcmFuc2ZlcnJpbmciLHN0PWZ1bmN0aW9uKHQpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciBlPW5ldyBvLlNldChbN10pLHI9dChlKSxuPXQoTyg3KSk7cmV0dXJuIHI9PWV8fCFyLmhhcyg3KXx8Im9iamVjdCIhPXR5cGVvZiBufHw3IT1ufSkpJiZ0fSxsdD1mdW5jdGlvbih0LGUpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciByPW5ldyBlLG49dCh7YTpyLGI6cn0pO3JldHVybiEobiYmbi5hPT09bi5iJiZuLmEgaW5zdGFuY2VvZiBlJiZuLmEuc3RhY2s9PT1yLnN0YWNrKX0pKX0sdXQ9by5zdHJ1Y3R1cmVkQ2xvbmUsY3Q9aXx8IWx0KHV0LE0pfHwhbHQodXQsSCl8fChuPXV0LCEhdSgoZnVuY3Rpb24oKXt2YXIgdD1uKG5ldyBvLkFnZ3JlZ2F0ZUVycm9yKFsxXSxpdCx7Y2F1c2U6M30pKTtyZXR1cm4iQWdncmVnYXRlRXJyb3IiIT10Lm5hbWV8fDEhPXQuZXJyb3JzWzBdfHx0Lm1lc3NhZ2UhPWl0fHwzIT10LmNhdXNlfSkpKSxodD0hdXQmJnN0KChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFUoaXQse2RldGFpbDp0fSkuZGV0YWlsfSkpLGZ0PXN0KHV0KXx8aHQsZHQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEgoIlVuY2xvbmVhYmxlIHR5cGU6ICIrdCxhdCl9LHB0PWZ1bmN0aW9uKHQsZSl7dGhyb3cgbmV3IEgoKGV8fCJDbG9uaW5nIikrIiBvZiAiK3QrIiBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiB0aGlzIGVuZ2luZSIsYXQpfSx2dD1mdW5jdGlvbih0LGUpe2lmKHYodCkmJmR0KCJTeW1ib2wiKSwhcCh0KSlyZXR1cm4gdDtpZihlKXtpZihZKGUsdCkpcmV0dXJuIEsoZSx0KX1lbHNlIGU9bmV3IFY7dmFyIHIsbixpLGEsbCx1LGMsZixkLHksbT1nKHQpLGs9ITE7c3dpdGNoKG0pe2Nhc2UiQXJyYXkiOmk9W10saz0hMDticmVhaztjYXNlIk9iamVjdCI6aT17fSxrPSEwO2JyZWFrO2Nhc2UiTWFwIjppPW5ldyBWLGs9ITA7YnJlYWs7Y2FzZSJTZXQiOmk9bmV3IHosaz0hMDticmVhaztjYXNlIlJlZ0V4cCI6aT1uZXcgUmVnRXhwKHQuc291cmNlLFModCkpO2JyZWFrO2Nhc2UiRXJyb3IiOnN3aXRjaChuPXQubmFtZSl7Y2FzZSJBZ2dyZWdhdGVFcnJvciI6aT1zKCJBZ2dyZWdhdGVFcnJvciIpKFtdKTticmVhaztjYXNlIkV2YWxFcnJvciI6aT1SKCk7YnJlYWs7Y2FzZSJSYW5nZUVycm9yIjppPUkoKTticmVhaztjYXNlIlJlZmVyZW5jZUVycm9yIjppPWooKTticmVhaztjYXNlIlN5bnRheEVycm9yIjppPUwoKTticmVhaztjYXNlIlR5cGVFcnJvciI6aT1EKCk7YnJlYWs7Y2FzZSJVUklFcnJvciI6aT1OKCk7YnJlYWs7Y2FzZSJDb21waWxlRXJyb3IiOmk9RygpO2JyZWFrO2Nhc2UiTGlua0Vycm9yIjppPUIoKTticmVhaztjYXNlIlJ1bnRpbWVFcnJvciI6aT1xKCk7YnJlYWs7ZGVmYXVsdDppPU0oKX1rPSEwO2JyZWFrO2Nhc2UiRE9NRXhjZXB0aW9uIjppPW5ldyBIKHQubWVzc2FnZSx0Lm5hbWUpLGs9ITA7YnJlYWs7Y2FzZSJEYXRhVmlldyI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJCaWdJbnQ2NEFycmF5IjpjYXNlIkJpZ1VpbnQ2NEFycmF5IjpyPW9bbV0scChyKXx8cHQobSksaT1uZXcgcih2dCh0LmJ1ZmZlcixlKSx0LmJ5dGVPZmZzZXQsIkRhdGFWaWV3Ij09PW0/dC5ieXRlTGVuZ3RoOnQubGVuZ3RoKTticmVhaztjYXNlIkRPTVF1YWQiOnRyeXtpPW5ldyBET01RdWFkKHZ0KHQucDEsZSksdnQodC5wMixlKSx2dCh0LnAzLGUpLHZ0KHQucDQsZSkpfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7Y2FzZSJGaWxlTGlzdCI6aWYoYT1mdW5jdGlvbigpe3ZhciB0O3RyeXt0PW5ldyBvLkRhdGFUcmFuc2Zlcn1jYXRjaChlKXt0cnl7dD1uZXcgby5DbGlwYm9hcmRFdmVudCgiIikuY2xpcGJvYXJkRGF0YX1jYXRjaCh0KXt9fXJldHVybiB0JiZ0Lml0ZW1zJiZ0LmZpbGVzP3Q6bnVsbH0oKSl7Zm9yKGw9MCx1PUEodCk7bDx1O2wrKylhLml0ZW1zLmFkZCh2dCh0W2xdLGUpKTtpPWEuZmlsZXN9ZWxzZSBmdD9pPWZ0KHQpOnB0KG0pO2JyZWFrO2Nhc2UiSW1hZ2VEYXRhIjp0cnl7aT1uZXcgSW1hZ2VEYXRhKHZ0KHQuZGF0YSxlKSx0LndpZHRoLHQuaGVpZ2h0LHtjb2xvclNwYWNlOnQuY29sb3JTcGFjZX0pfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7ZGVmYXVsdDppZihmdClpPWZ0KHQpO2Vsc2Ugc3dpdGNoKG0pe2Nhc2UiQmlnSW50IjppPU8odC52YWx1ZU9mKCkpO2JyZWFrO2Nhc2UiQm9vbGVhbiI6aT1PKHR0KHQpKTticmVhaztjYXNlIk51bWJlciI6aT1PKGV0KHQpKTticmVhaztjYXNlIlN0cmluZyI6aT1PKHJ0KHQpKTticmVhaztjYXNlIkRhdGUiOmk9bmV3IEYobnQodCkpO2JyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOihyPW8uRGF0YVZpZXcpfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZXx8cHQobSk7dHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlKWk9dC5zbGljZSgwKTtlbHNlIGZvcih1PXQuYnl0ZUxlbmd0aCxpPW5ldyBBcnJheUJ1ZmZlcih1KSxkPW5ldyByKHQpLHk9bmV3IHIoaSksbD0wO2w8dTtsKyspeS5zZXRVaW50OChsLGQuZ2V0VWludDgobCkpfWNhdGNoKHQpe3Rocm93IG5ldyBIKCJBcnJheUJ1ZmZlciBpcyBkZXRhY2hlZCIsYXQpfWJyZWFrO2Nhc2UiU2hhcmVkQXJyYXlCdWZmZXIiOmk9dDticmVhaztjYXNlIkJsb2IiOnRyeXtpPXQuc2xpY2UoMCx0LnNpemUsdC50eXBlKX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTVBvaW50IjpjYXNlIkRPTVBvaW50UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21Qb2ludD9yLmZyb21Qb2ludCh0KTpuZXcgcih0LngsdC55LHQueix0LncpfWNhdGNoKHQpe3B0KG0pfWJyZWFrO2Nhc2UiRE9NUmVjdCI6Y2FzZSJET01SZWN0UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21SZWN0P3IuZnJvbVJlY3QodCk6bmV3IHIodC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTU1hdHJpeCI6Y2FzZSJET01NYXRyaXhSZWFkT25seSI6cj1vW21dO3RyeXtpPXIuZnJvbU1hdHJpeD9yLmZyb21NYXRyaXgodCk6bmV3IHIodCl9Y2F0Y2godCl7cHQobSl9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6aCh0LmNsb25lKXx8cHQobSk7dHJ5e2k9dC5jbG9uZSgpfWNhdGNoKHQpe2R0KG0pfWJyZWFrO2Nhc2UiRmlsZSI6dHJ5e2k9bmV3IEZpbGUoW3RdLHQubmFtZSx0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkNyb3BUYXJnZXQiOmNhc2UiQ3J5cHRvS2V5IjpjYXNlIkZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUZpbGVIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUhhbmRsZSI6Y2FzZSJHUFVDb21waWxhdGlvbkluZm8iOmNhc2UiR1BVQ29tcGlsYXRpb25NZXNzYWdlIjpjYXNlIkltYWdlQml0bWFwIjpjYXNlIlJUQ0NlcnRpZmljYXRlIjpjYXNlIldlYkFzc2VtYmx5Lk1vZHVsZSI6cHQobSk7ZGVmYXVsdDpkdChtKX19aWYoSihlLHQsaSksaylzd2l0Y2gobSl7Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmZvcihjPSQodCksbD0wLHU9QShjKTtsPHU7bCsrKWY9Y1tsXSxfKGksZix2dCh0W2ZdLGUpKTticmVhaztjYXNlIk1hcCI6dC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe0ooaSx2dChyLGUpLHZ0KHQsZSkpfSkpO2JyZWFrO2Nhc2UiU2V0Ijp0LmZvckVhY2goKGZ1bmN0aW9uKHQpe1EoaSx2dCh0LGUpKX0pKTticmVhaztjYXNlIkVycm9yIjp3KGksIm1lc3NhZ2UiLHZ0KHQubWVzc2FnZSxlKSksYih0LCJjYXVzZSIpJiZ3KGksImNhdXNlIix2dCh0LmNhdXNlLGUpKSwiQWdncmVnYXRlRXJyb3IiPT1uJiYoaS5lcnJvcnM9dnQodC5lcnJvcnMsZSkpO2Nhc2UiRE9NRXhjZXB0aW9uIjp4JiZ3KGksInN0YWNrIix2dCh0LnN0YWNrLGUpKX1yZXR1cm4gaX0seXQ9dXQmJiF1KChmdW5jdGlvbigpe2lmKFQmJkU+OTJ8fEMmJkU+OTR8fFAmJkU+OTcpcmV0dXJuITE7dmFyIHQ9bmV3IEFycmF5QnVmZmVyKDgpLGU9dXQodCx7dHJhbnNmZXI6W3RdfSk7cmV0dXJuIDAhPXQuYnl0ZUxlbmd0aHx8OCE9ZS5ieXRlTGVuZ3RofSkpO2Eoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLHNoYW06IXl0LGZvcmNlZDpjdH0se3N0cnVjdHVyZWRDbG9uZTpmdW5jdGlvbih0KXt2YXIgZSxyPWsoYXJndW1lbnRzLmxlbmd0aCwxKT4xJiYhZChhcmd1bWVudHNbMV0pP20oYXJndW1lbnRzWzFdKTp2b2lkIDAsbj1yP3IudHJhbnNmZXI6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1uJiZmdW5jdGlvbih0LGUpe2lmKCFwKHQpKXRocm93IEQoIlRyYW5zZmVyIG9wdGlvbiBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgc2VxdWVuY2UiKTt2YXIgcj1bXTt5KHQsKGZ1bmN0aW9uKHQpe1oocixtKHQpKX0pKTt2YXIgbixpLGEscyxsLHUsYz0wLGQ9QShyKTtpZih5dClmb3Iocz11dChyLHt0cmFuc2ZlcjpyfSk7YzxkOylKKGUscltjXSxzW2MrK10pO2Vsc2UgZm9yKDtjPGQ7KXtpZihuPXJbYysrXSxZKGUsbikpdGhyb3cgbmV3IEgoIkR1cGxpY2F0ZSB0cmFuc2ZlcmFibGUiLGF0KTtzd2l0Y2goaT1nKG4pKXtjYXNlIkltYWdlQml0bWFwIjphPW8uT2Zmc2NyZWVuQ2FudmFzLGYoYSl8fHB0KGksb3QpO3RyeXsodT1uZXcgYShuLndpZHRoLG4uaGVpZ2h0KSkuZ2V0Q29udGV4dCgiYml0bWFwcmVuZGVyZXIiKS50cmFuc2ZlckZyb21JbWFnZUJpdG1hcChuKSxsPXUudHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXVkaW9EYXRhIjpjYXNlIlZpZGVvRnJhbWUiOmgobi5jbG9uZSkmJmgobi5jbG9zZSl8fHB0KGksb3QpO3RyeXtsPW4uY2xvbmUoKSxuLmNsb3NlKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOmNhc2UiTWVkaWFTb3VyY2VIYW5kbGUiOmNhc2UiTWVzc2FnZVBvcnQiOmNhc2UiT2Zmc2NyZWVuQ2FudmFzIjpjYXNlIlJlYWRhYmxlU3RyZWFtIjpjYXNlIlRyYW5zZm9ybVN0cmVhbSI6Y2FzZSJXcml0YWJsZVN0cmVhbSI6cHQoaSxvdCl9aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgSCgiVGhpcyBvYmplY3QgY2Fubm90IGJlIHRyYW5zZmVycmVkOiAiK2ksYXQpO0ooZSxuLGwpfX0obixlPW5ldyBWKSx2dCh0LGUpfX0pfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDEwKSxhPXIoMjQpLG89cig4Mikscz1yKDI3KSxsPXIoNTQpLHU9ZnVuY3Rpb24oKXt9LGM9W10saD1zKCJSZWZsZWN0IiwiY29uc3RydWN0IiksZj0vXlxzKig/OmNsYXNzfGZ1bmN0aW9uKVxiLyxkPW4oZi5leGVjKSxwPSFmLmV4ZWModSksdj1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIGgodSxjLHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX0seT1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTtzd2l0Y2gobyh0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gcHx8ISFkKGYsbCh0KSl9Y2F0Y2godCl7cmV0dXJuITB9fTt5LnNoYW09ITAsdC5leHBvcnRzPSFofHxpKChmdW5jdGlvbigpe3ZhciB0O3JldHVybiB2KHYuY2FsbCl8fCF2KE9iamVjdCl8fCF2KChmdW5jdGlvbigpe3Q9ITB9KSl8fHR9KSk/eTp2fSx0PT57dmFyIGU9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2lmKHQ8cil0aHJvdyBlKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig0MiksYT1yKDI4KSxvPXIoMTI3KSxzPVJlZ0V4cC5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PWV8fCJmbGFncyJpbiBzfHxpKHQsImZsYWdzIil8fCFhKHMsdCk/ZTpuKG8sdCl9fSwodCxlLHIpPT57dmFyIG49cig1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKSxlPSIiO3JldHVybiB0Lmhhc0luZGljZXMmJihlKz0iZCIpLHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnVuaWNvZGVTZXRzJiYoZSs9InYiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKSxpPXIoMTQpO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1FcnJvcigiYSIpO3JldHVybiEoInN0YWNrImluIHQpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN0YWNrIixpKDEsNykpLDchPT10LnN0YWNrKX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMTMwKSxpPXIoMTMxKTt0LmV4cG9ydHM9IW4mJiFpJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudH0sdD0+e3QuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIERlbm8mJkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9ufSwodCxlLHIpPT57dmFyIG49cigxOCksaT1yKDcpO3QuZXhwb3J0cz0icHJvY2VzcyI9PW4oaS5wcm9jZXNzKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyk7dC5leHBvcnRzPW59LChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd19wZGZqc19yZXF1aXJlX18pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGV4cG9ydHMuYnVpbGQ9ZXhwb3J0cy5SZW5kZXJUYXNrPWV4cG9ydHMuUERGV29ya2VyVXRpbD1leHBvcnRzLlBERldvcmtlcj1leHBvcnRzLlBERlBhZ2VQcm94eT1leHBvcnRzLlBERkRvY3VtZW50UHJveHk9ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPWV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0PWV4cG9ydHMuTG9vcGJhY2tQb3J0PWV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWV4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9ZXhwb3J0cy5EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwLGV4cG9ydHMuZ2V0RG9jdW1lbnQ9Z2V0RG9jdW1lbnQsZXhwb3J0cy5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeT1zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSxleHBvcnRzLnZlcnNpb249dm9pZCAwO3ZhciBfdXRpbD1fX3dfcGRmanNfcmVxdWlyZV9fKDEpLF9hbm5vdGF0aW9uX3N0b3JhZ2U9X193X3BkZmpzX3JlcXVpcmVfXygxMzQpLF9kaXNwbGF5X3V0aWxzPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxfZm9udF9sb2FkZXI9X193X3BkZmpzX3JlcXVpcmVfXygxNDApLF9jYW52YXM9X193X3BkZmpzX3JlcXVpcmVfXygxNDEpLF93b3JrZXJfb3B0aW9ucz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NCksX2lzX25vZGU9X193X3BkZmpzX3JlcXVpcmVfXygzKSxfbWVzc2FnZV9oYW5kbGVyPV9fd19wZGZqc19yZXF1aXJlX18oMTQ1KSxfbWV0YWRhdGE9X193X3BkZmpzX3JlcXVpcmVfXygxNDYpLF9vcHRpb25hbF9jb250ZW50X2NvbmZpZz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NyksX3RyYW5zcG9ydF9zdHJlYW09X193X3BkZmpzX3JlcXVpcmVfXygxNDgpLF94ZmFfdGV4dD1fX3dfcGRmanNfcmVxdWlyZV9fKDE0OSk7ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHQsZSl7X2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheSh0KXtyZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5KHQpfHxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCl8fF9ub25JdGVyYWJsZVNwcmVhZCgpfWZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBfYXJyYXlMaWtlVG9BcnJheSh0KX1mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCl7X3JlZ2VuZXJhdG9yUnVudGltZT1mdW5jdGlvbigpe3JldHVybiB0fTt2YXIgdD17fSxlPU9iamVjdC5wcm90b3R5cGUscj1lLmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbih0LGUscil7dFtlXT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGE9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e2woe30sIiIpfWNhdGNoKHQpe2w9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXJ9fWZ1bmN0aW9uIHUodCxlLHIsaSl7dmFyIGE9ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBmP2U6ZixvPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpLHM9bmV3IHgoaXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp3KHQscixzKX0pLG99ZnVuY3Rpb24gYyh0LGUscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxyKX19Y2F0Y2godCl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6dH19fXQud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIGYoKXt9ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBwKCl7fXZhciB2PXt9O2wodixhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShFKFtdKSkpO20mJm0hPT1lJiZyLmNhbGwobSxhKSYmKHY9bSk7dmFyIGc9cC5wcm90b3R5cGU9Zi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiBiKHQpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7bCh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBfKHQsZSl7ZnVuY3Rpb24gaShuLGEsbyxzKXt2YXIgbD1jKHRbbl0sdCxhKTtpZigidGhyb3ciIT09bC50eXBlKXt2YXIgdT1sLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1fdHlwZW9mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP2UucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe2koIm5leHQiLHQsbyxzKX0pLChmdW5jdGlvbih0KXtpKCJ0aHJvdyIsdCxvLHMpfSkpOmUucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsbyh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gaSgidGhyb3ciLHQsbyxzKX0pKX1zKGwuYXJnKX12YXIgYTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsbil7aSh0LHIsZSxuKX0pKX1yZXR1cm4gYT1hP2EudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihpLGEpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1pKXRocm93IGE7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9aSxyLmFyZz1hOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9QShvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGw9Yyh0LGUscik7aWYoIm5vcm1hbCI9PT1sLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsbC5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpsLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWwudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1sLmFyZyl9fX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9ZS5tZXRob2Qsbj10Lml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIGUuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmdC5pdGVyYXRvci5yZXR1cm4mJihlLm1ldGhvZD0icmV0dXJuIixlLmFyZz12b2lkIDAsQSh0LGUpLCJ0aHJvdyI9PT1lLm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBpPWMobix0Lml0ZXJhdG9yLGUuYXJnKTtpZigidGhyb3ciPT09aS50eXBlKXJldHVybiBlLm1ldGhvZD0idGhyb3ciLGUuYXJnPWkuYXJnLGUuZGVsZWdhdGU9bnVsbCxoO3ZhciBhPWkuYXJnO3JldHVybiBhP2EuZG9uZT8oZVt0LnJlc3VsdE5hbWVdPWEudmFsdWUsZS5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PWUubWV0aG9kJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksZS5kZWxlZ2F0ZT1udWxsLGgpOmE6KGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxlLmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gayh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPSJub3JtYWwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiB4KHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSx0LmZvckVhY2goayx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBFKHQpe2lmKHQpe3ZhciBlPXRbYV07aWYoZSlyZXR1cm4gZS5jYWxsKHQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiBlKCl7Zm9yKDsrK248dC5sZW5ndGg7KWlmKHIuY2FsbCh0LG4pKXJldHVybiBlLnZhbHVlPXRbbl0sZS5kb25lPSExLGU7cmV0dXJuIGUudmFsdWU9dm9pZCAwLGUuZG9uZT0hMCxlfTtyZXR1cm4gaS5uZXh0PWl9fXJldHVybntuZXh0OlB9fWZ1bmN0aW9uIFAoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBkLnByb3RvdHlwZT1wLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLG4ocCwiY29uc3RydWN0b3IiLHt2YWx1ZTpkLGNvbmZpZ3VyYWJsZTohMH0pLGQuZGlzcGxheU5hbWU9bChwLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1kfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxwKToodC5fX3Byb3RvX189cCxsKHQscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxiKF8ucHJvdG90eXBlKSxsKF8ucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPV8sdC5hc3luYz1mdW5jdGlvbihlLHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPVByb21pc2UpO3ZhciBvPW5ldyBfKHUoZSxyLG4saSksYSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTpvLm5leHQoKX0pKX0sYihnKSxsKGcscywiR2VuZXJhdG9yIiksbChnLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbChnLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh0KSxyPVtdO2Zvcih2YXIgbiBpbiBlKXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gdCgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gdC52YWx1ZT1uLHQuZG9uZT0hMSx0fXJldHVybiB0LmRvbmU9ITAsdH19LHQudmFsdWVzPUUseC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOngscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChTKSwhdClmb3IodmFyIGUgaW4gdGhpcykidCI9PT1lLmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsZSkmJiFpc05hTigrZS5zbGljZSgxKSkmJih0aGlzW2VdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgZT10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9dCxlLm5leHQ9cixuJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksISFufWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxvPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGEsImNhdGNoTG9jIiksbD1yLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHMmJmwpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGk9dGhpcy50cnlFbnRyaWVzW25dO2lmKGkudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChpLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxpLmZpbmFsbHlMb2Mpe3ZhciBhPWk7YnJlYWt9fWEmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZhLnRyeUxvYzw9ZSYmZTw9YS5maW5hbGx5TG9jJiYoYT1udWxsKTt2YXIgbz1hP2EuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPXQsby5hcmc9ZSxhPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWEuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLGh9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksUyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBpPW4uYXJnO1Mocil9cmV0dXJuIGl9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpFKHQpLHJlc3VsdE5hbWU6ZSxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sdH1mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2sodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsX3RvUHJvcGVydHlLZXkobi5rZXkpLG4pfX1mdW5jdGlvbiBfY3JlYXRlQ2xhc3ModCxlLHIpe3JldHVybiBlJiZfZGVmaW5lUHJvcGVydGllcyh0LnByb3RvdHlwZSxlKSxyJiZfZGVmaW5lUHJvcGVydGllcyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCl7dmFyIGU9X3RvUHJpbWl0aXZlKHQsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09X3R5cGVvZihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBfdG9QcmltaXRpdmUodCxlKXtpZigib2JqZWN0IiE9PV90eXBlb2YodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09X3R5cGVvZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWU/U3RyaW5nOk51bWJlcikodCl9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModCxlLHIpe19jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHQsZSxyKXtyZXR1cm4gX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQsX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHQsZSl7cmV0dXJuIF9jbGFzc0FwcGx5RGVzY3JpcHRvckdldCh0LF9jbGFzc0V4dHJhY3RGaWVsZERlc2NyaXB0b3IodCxlLCJnZXQiKSl9ZnVuY3Rpb24gX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjU2V0KHQsZSxyLG4pe3JldHVybiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNBY2Nlc3ModCxlKSxfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3Iociwic2V0IiksX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQscixuKSxufWZ1bmN0aW9uIF9jbGFzc0FwcGx5RGVzY3JpcHRvclNldCh0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19ZnVuY3Rpb24gX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LGUscil7cmV0dXJuIF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0FjY2Vzcyh0LGUpLF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0ZpZWxkRGVzY3JpcHRvcihyLCJnZXQiKSxfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxyKX1mdW5jdGlvbiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3IodCxlKXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2UrIiBwcml2YXRlIHN0YXRpYyBmaWVsZCBiZWZvcmUgaXRzIGRlY2xhcmF0aW9uIil9ZnVuY3Rpb24gX2NsYXNzQ2hlY2tQcml2YXRlU3RhdGljQWNjZXNzKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX1mdW5jdGlvbiBfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfWZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcCh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKHQpe2FzeW5jR2VuZXJhdG9yU3RlcChhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YXN5bmNHZW5lcmF0b3JTdGVwKGEsbixpLG8scywidGhyb3ciLHQpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkodCxlKXtyZXR1cm4gX2FycmF5V2l0aEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5TGltaXQodCxlKXx8X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQsZSl8fF9ub25JdGVyYWJsZVJlc3QoKX1mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX1mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/X2FycmF5TGlrZVRvQXJyYXkodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXModCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH1mdW5jdGlvbiBfdHlwZW9mKHQpe3JldHVybiBfdHlwZW9mPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxfdHlwZW9mKHQpfXZhciBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU9NjU1MzYsUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUPTEwMCxEZWZhdWx0Q2FudmFzRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DYW52YXNGYWN0b3J5O2V4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9RGVmYXVsdENhbnZhc0ZhY3Rvcnk7dmFyIERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeTtleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk7dmFyIERlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxjcmVhdGVQREZOZXR3b3JrU3RyZWFtO2lmKGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxfaXNfbm9kZS5pc05vZGVKUyl7dmFyIF9yZXF1aXJlPV9fd19wZGZqc19yZXF1aXJlX18oMTUwKSxOb2RlQ2FudmFzRmFjdG9yeT1fcmVxdWlyZS5Ob2RlQ2FudmFzRmFjdG9yeSxOb2RlQ01hcFJlYWRlckZhY3Rvcnk9X3JlcXVpcmUuTm9kZUNNYXBSZWFkZXJGYWN0b3J5LE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fcmVxdWlyZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7ZXhwb3J0cy5EZWZhdWx0Q2FudmFzRmFjdG9yeT1EZWZhdWx0Q2FudmFzRmFjdG9yeT1Ob2RlQ2FudmFzRmFjdG9yeSxleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9Tm9kZUNNYXBSZWFkZXJGYWN0b3J5LGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnl9ZnVuY3Rpb24gc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkodCl7Y3JlYXRlUERGTmV0d29ya1N0cmVhbT10fWZ1bmN0aW9uIGdldERvY3VtZW50KHQpe3ZhciBlLHI9bmV3IFBERkRvY3VtZW50TG9hZGluZ1Rhc2s7aWYoInN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgVVJMKWU9e3VybDp0fTtlbHNlIGlmKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKHQpKWU9e2RhdGE6dH07ZWxzZSBpZih0IGluc3RhbmNlb2YgUERGRGF0YVJhbmdlVHJhbnNwb3J0KWU9e3JhbmdlOnR9O2Vsc2V7aWYoIm9iamVjdCIhPT1fdHlwZW9mKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgaW4gZ2V0RG9jdW1lbnQsIG5lZWQgZWl0aGVyIHN0cmluZywgVVJMLCBUeXBlZEFycmF5LCBvciBwYXJhbWV0ZXIgb2JqZWN0LiIpO2lmKCF0LnVybCYmIXQuZGF0YSYmIXQucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhcmFtZXRlciBvYmplY3Q6IG5lZWQgZWl0aGVyIC5kYXRhLCAucmFuZ2Ugb3IgLnVybCIpO2U9dH12YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9bnVsbCxhPW51bGw7Zm9yKHZhciBvIGluIGUpe3ZhciBzPWVbb107c3dpdGNoKG8pe2Nhc2UidXJsIjppZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl0cnl7bltvXT1uZXcgVVJMKHMsd2luZG93LmxvY2F0aW9uKS5ocmVmO2NvbnRpbnVlfWNhdGNoKHQpeygwLF91dGlsLndhcm4pKCdDYW5ub3QgY3JlYXRlIHZhbGlkIFVSTDogIicuY29uY2F0KHQsJyIuJykpfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBzfHxzIGluc3RhbmNlb2YgVVJMKXtuW29dPXMudG9TdHJpbmcoKTtjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIHVybCBkYXRhOiBlaXRoZXIgc3RyaW5nIG9yIFVSTC1vYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIHVybCBwcm9wZXJ0eS4iKTtjYXNlInJhbmdlIjppPXM7Y29udGludWU7Y2FzZSJ3b3JrZXIiOmE9cztjb250aW51ZTtjYXNlImRhdGEiOmlmKF9pc19ub2RlLmlzTm9kZUpTJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJ1ZmZlciYmcyBpbnN0YW5jZW9mIEJ1ZmZlciluW29dPW5ldyBVaW50OEFycmF5KHMpO2Vsc2V7aWYocyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpYnJlYWs7aWYoInN0cmluZyI9PXR5cGVvZiBzKW5bb109KDAsX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7ZWxzZSBpZigib2JqZWN0IiE9PV90eXBlb2Yocyl8fG51bGw9PT1zfHxpc05hTihzLmxlbmd0aCkpe2lmKCEoMCxfdXRpbC5pc0FycmF5QnVmZmVyKShzKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIGJpbmFyeSBkYXRhOiBlaXRoZXIgVHlwZWRBcnJheSwgc3RyaW5nLCBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgZGF0YSBwcm9wZXJ0eS4iKTtuW29dPW5ldyBVaW50OEFycmF5KHMpfWVsc2UgbltvXT1uZXcgVWludDhBcnJheShzKX1jb250aW51ZX1uW29dPXN9aWYobi5DTWFwUmVhZGVyRmFjdG9yeT1uLkNNYXBSZWFkZXJGYWN0b3J5fHxEZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnksbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1uLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5fHxEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnksbi5pZ25vcmVFcnJvcnM9ITAhPT1uLnN0b3BBdEVycm9ycyxuLmZvbnRFeHRyYVByb3BlcnRpZXM9ITA9PT1uLmZvbnRFeHRyYVByb3BlcnRpZXMsbi5wZGZCdWc9ITA9PT1uLnBkZkJ1ZyxuLmVuYWJsZVhmYT0hMD09PW4uZW5hYmxlWGZhLCghTnVtYmVyLmlzSW50ZWdlcihuLnJhbmdlQ2h1bmtTaXplKXx8bi5yYW5nZUNodW5rU2l6ZTwxKSYmKG4ucmFuZ2VDaHVua1NpemU9REVGQVVMVF9SQU5HRV9DSFVOS19TSVpFKSwoInN0cmluZyIhPXR5cGVvZiBuLmRvY0Jhc2VVcmx8fCgwLF9kaXNwbGF5X3V0aWxzLmlzRGF0YVNjaGVtZSkobi5kb2NCYXNlVXJsKSkmJihuLmRvY0Jhc2VVcmw9bnVsbCksKCFOdW1iZXIuaXNJbnRlZ2VyKG4ubWF4SW1hZ2VTaXplKXx8bi5tYXhJbWFnZVNpemU8LTEpJiYobi5tYXhJbWFnZVNpemU9LTEpLCJzdHJpbmciIT10eXBlb2Ygbi5jTWFwVXJsJiYobi5jTWFwVXJsPW51bGwpLCJzdHJpbmciIT10eXBlb2Ygbi5zdGFuZGFyZEZvbnREYXRhVXJsJiYobi5zdGFuZGFyZEZvbnREYXRhVXJsPW51bGwpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlV29ya2VyRmV0Y2gmJihuLnVzZVdvcmtlckZldGNoPW4uQ01hcFJlYWRlckZhY3Rvcnk9PT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeSYmbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT09PV9kaXNwbGF5X3V0aWxzLkRPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzRXZhbFN1cHBvcnRlZCYmKG4uaXNFdmFsU3VwcG9ydGVkPSEwKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkJiYobi5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD0hX2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUZvbnRGYWNlJiYobi5kaXNhYmxlRm9udEZhY2U9X2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlU3lzdGVtRm9udHMmJihuLnVzZVN5c3RlbUZvbnRzPSFfaXNfbm9kZS5pc05vZGVKUyYmIW4uZGlzYWJsZUZvbnRGYWNlKSwib2JqZWN0Ij09PV90eXBlb2Yobi5vd25lckRvY3VtZW50KSYmbnVsbCE9PW4ub3duZXJEb2N1bWVudHx8KG4ub3duZXJEb2N1bWVudD1nbG9iYWxUaGlzLmRvY3VtZW50KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVSYW5nZSYmKG4uZGlzYWJsZVJhbmdlPSExKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVTdHJlYW0mJihuLmRpc2FibGVTdHJlYW09ITEpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUF1dG9GZXRjaCYmKG4uZGlzYWJsZUF1dG9GZXRjaD0hMSksKDAsX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKG4udmVyYm9zaXR5KSwhYSl7dmFyIGw9e3ZlcmJvc2l0eTpuLnZlcmJvc2l0eSxwb3J0Ol93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnR9O2E9bC5wb3J0P1BERldvcmtlci5mcm9tUG9ydChsKTpuZXcgUERGV29ya2VyKGwpLHIuX3dvcmtlcj1hfXZhciB1PXIuZG9jSWQ7cmV0dXJuIGEucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHQ9X2ZldGNoRG9jdW1lbnQoYSxuLGksdSksZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dmFyIGU7aT9lPW5ldyBfdHJhbnNwb3J0X3N0cmVhbS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtsZW5ndGg6bi5sZW5ndGgsaW5pdGlhbERhdGE6bi5pbml0aWFsRGF0YSxwcm9ncmVzc2l2ZURvbmU6bi5wcm9ncmVzc2l2ZURvbmUsY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6bi5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSxkaXNhYmxlUmFuZ2U6bi5kaXNhYmxlUmFuZ2UsZGlzYWJsZVN0cmVhbTpuLmRpc2FibGVTdHJlYW19LGkpOm4uZGF0YXx8KGU9Y3JlYXRlUERGTmV0d29ya1N0cmVhbSh7dXJsOm4udXJsLGxlbmd0aDpuLmxlbmd0aCxodHRwSGVhZGVyczpuLmh0dHBIZWFkZXJzLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFscyxyYW5nZUNodW5rU2l6ZTpuLnJhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpuLmRpc2FibGVSYW5nZSxkaXNhYmxlU3RyZWFtOm4uZGlzYWJsZVN0cmVhbX0pKSx0KGUpfSkpO3JldHVybiBQcm9taXNlLmFsbChbdCxlXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9X3NsaWNlZFRvQXJyYXkodCwyKSxpPWVbMF0sbz1lWzFdO2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHM9bmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIodSxpLGEucG9ydCksbD1uZXcgV29ya2VyVHJhbnNwb3J0KHMscixvLG4pO3IuX3RyYW5zcG9ydD1sLHMuc2VuZCgiUmVhZHkiLG51bGwpfSkpfSkpLmNhdGNoKHIuX2NhcGFiaWxpdHkucmVqZWN0KSxyfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50KHQsZSxyLG4pe3JldHVybiBfZmV0Y2hEb2N1bWVudDIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50Migpe3JldHVybihfZmV0Y2hEb2N1bWVudDI9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighZS5kZXN0cm95ZWQpe3QubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQiKTtjYXNlIDI6cmV0dXJuIG4mJihyLmxlbmd0aD1uLmxlbmd0aCxyLmluaXRpYWxEYXRhPW4uaW5pdGlhbERhdGEsci5wcm9ncmVzc2l2ZURvbmU9bi5wcm9ncmVzc2l2ZURvbmUsci5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZT1uLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lKSx0Lm5leHQ9NSxlLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RG9jUmVxdWVzdCIse2RvY0lkOmksYXBpVmVyc2lvbjoiMy4yLjAiLGRhdGE6ci5kYXRhLHBhc3N3b3JkOnIucGFzc3dvcmQsZGlzYWJsZUF1dG9GZXRjaDpyLmRpc2FibGVBdXRvRmV0Y2gscmFuZ2VDaHVua1NpemU6ci5yYW5nZUNodW5rU2l6ZSxsZW5ndGg6ci5sZW5ndGgsZG9jQmFzZVVybDpyLmRvY0Jhc2VVcmwsZW5hYmxlWGZhOnIuZW5hYmxlWGZhLGV2YWx1YXRvck9wdGlvbnM6e21heEltYWdlU2l6ZTpyLm1heEltYWdlU2l6ZSxkaXNhYmxlRm9udEZhY2U6ci5kaXNhYmxlRm9udEZhY2UsaWdub3JlRXJyb3JzOnIuaWdub3JlRXJyb3JzLGlzRXZhbFN1cHBvcnRlZDpyLmlzRXZhbFN1cHBvcnRlZCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpyLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGZvbnRFeHRyYVByb3BlcnRpZXM6ci5mb250RXh0cmFQcm9wZXJ0aWVzLHVzZVN5c3RlbUZvbnRzOnIudXNlU3lzdGVtRm9udHMsY01hcFVybDpyLnVzZVdvcmtlckZldGNoP3IuY01hcFVybDpudWxsLHN0YW5kYXJkRm9udERhdGFVcmw6ci51c2VXb3JrZXJGZXRjaD9yLnN0YW5kYXJkRm9udERhdGFVcmw6bnVsbH19KTtjYXNlIDU6aWYoYT10LnNlbnQsci5kYXRhJiYoci5kYXRhPW51bGwpLCFlLmRlc3Ryb3llZCl7dC5uZXh0PTk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpO2Nhc2UgOTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsYSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBfb25VbnN1cHBvcnRlZEZlYXR1cmU9bmV3IFdlYWtNYXAsUERGRG9jdW1lbnRMb2FkaW5nVGFzaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5fY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXI9bnVsbCx0aGlzLmRvY0lkPSJkIi5jb25jYXQoKF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNTZXQodCx0LF9kb2NJZCwoZT1fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfZG9jSWQpLHI9ZSsrLGUpKSxyKSksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5vblBhc3N3b3JkPW51bGwsdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJvblVuc3VwcG9ydGVkRmVhdHVyZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9vblVuc3VwcG9ydGVkRmVhdHVyZSl9LHNldDpmdW5jdGlvbih0KXsoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50TG9hZGluZ1Rhc2sgb25VbnN1cHBvcnRlZEZlYXR1cmUgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHQpfX0se2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOihlPV9hc3luY1RvR2VuZXJhdG9yKF9yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGU7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5kZXN0cm95ZWQ9ITAsdC5uZXh0PTMsbnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZGVzdHJveSgpO2Nhc2UgMzp0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXImJih0aGlzLl93b3JrZXIuZGVzdHJveSgpLHRoaXMuX3dvcmtlcj1udWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCk7ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPVBERkRvY3VtZW50TG9hZGluZ1Rhc2s7dmFyIF9kb2NJZD17d3JpdGFibGU6ITAsdmFsdWU6MH0sUERGRGF0YVJhbmdlVHJhbnNwb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmxlbmd0aD1lLHRoaXMuaW5pdGlhbERhdGE9cix0aGlzLnByb2dyZXNzaXZlRG9uZT1uLHRoaXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9aSx0aGlzLl9yYW5nZUxpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc0xpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnM9W10sdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzPVtdLHRoaXMuX3JlYWR5Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFkZFJhbmdlTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2godCl9fSx7a2V5OiJhZGRQcm9ncmVzc0xpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycy5wdXNoKHQpfX0se2tleToib25EYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9yYW5nZUxpc3RlbmVycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KSgwLHIudmFsdWUpKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25EYXRhUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciBuLGk9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoci5fcHJvZ3Jlc3NMaXN0ZW5lcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOykoMCxuLnZhbHVlKSh0LGUpfWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX0pKX19LHtrZXk6Im9uRGF0YVByb2dyZXNzaXZlUmVhZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciByLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspKDAsci52YWx1ZSkodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fSkpfX0se2tleToib25EYXRhUHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXt2YXIgZSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHQuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KSgwLGUudmFsdWUpKCl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fSkpfX0se2tleToidHJhbnNwb3J0UmVhZHkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6InJlcXVlc3REYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsX3V0aWwudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgUERGRGF0YVJhbmdlVHJhbnNwb3J0LnJlcXVlc3REYXRhUmFuZ2UiKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe319XSksdH0oKTtleHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydD1QREZEYXRhUmFuZ2VUcmFuc3BvcnQ7dmFyIFBERkRvY3VtZW50UHJveHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7X2NsYXNzQ2FsbENoZWNrKHRoaXMsdCksdGhpcy5fcGRmSW5mbz1lLHRoaXMuX3RyYW5zcG9ydD1yfXJldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToiYW5ub3RhdGlvblN0b3JhZ2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuYW5ub3RhdGlvblN0b3JhZ2V9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BkZkluZm8ubnVtUGFnZXN9fSx7a2V5OiJmaW5nZXJwcmludHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wZGZJbmZvLmZpbmdlcnByaW50c319LHtrZXk6InN0YXRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50UHJveHkgc3RhdHMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5fdHJhbnNwb3J0LnN0YXRzfX0se2tleToiaXNQdXJlWGZhIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImlzUHVyZVhmYSIsISF0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpfX0se2tleToiYWxsWGZhSHRtbCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZSh0KX19LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSW5kZXgodCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKX19LHtrZXk6ImdldERlc3RpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERlc3RpbmF0aW9uKHQpfX0se2tleToiZ2V0UGFnZUxhYmVscyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKX19LHtrZXk6ImdldFBhZ2VMYXlvdXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlTGF5b3V0KCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCl9fSx7a2V5OiJnZXRWaWV3ZXJQcmVmZXJlbmNlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFZpZXdlclByZWZlcmVuY2VzKCl9fSx7a2V5OiJnZXRPcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3BlbkFjdGlvbigpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpfX0se2tleToiZ2V0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERvY0pTQWN0aW9ucygpfX0se2tleToiZ2V0T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE91dGxpbmUoKX19LHtrZXk6ImdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpfX0se2tleToiZ2V0UGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQZXJtaXNzaW9ucygpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNZXRhZGF0YSgpfX0se2tleToiZ2V0TWFya0luZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNYXJrSW5mbygpfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKX19LHtrZXk6InNhdmVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnNhdmVEb2N1bWVudCgpfX0se2tleToiZ2V0RG93bmxvYWRJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKHR8fHRoaXMuaXNQdXJlWGZhKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGluZ1Rhc2suZGVzdHJveSgpfX0se2tleToibG9hZGluZ1BhcmFtcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5sb2FkaW5nUGFyYW1zfX0se2tleToibG9hZGluZ1Rhc2siLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1Rhc2t9fSx7a2V5OiJnZXRGaWVsZE9iamVjdHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRGaWVsZE9iamVjdHMoKX19LHtrZXk6Imhhc0pTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lmhhc0pTQWN0aW9ucygpfX0se2tleToiZ2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldENhbGN1bGF0aW9uT3JkZXJJZHMoKX19XSksdH0oKTtleHBvcnRzLlBERkRvY3VtZW50UHJveHk9UERGRG9jdW1lbnRQcm94eTt2YXIgUERGUGFnZVByb3h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSYmYXJndW1lbnRzWzRdO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLHRoaXMuX3BhZ2VJbmRleD1lLHRoaXMuX3BhZ2VJbmZvPXIsdGhpcy5fb3duZXJEb2N1bWVudD1pLHRoaXMuX3RyYW5zcG9ydD1uLHRoaXMuX3N0YXRzPWE/bmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcjpudWxsLHRoaXMuX3BkZkJ1Zz1hLHRoaXMuY29tbW9uT2Jqcz1uLmNvbW1vbk9ianMsdGhpcy5vYmpzPW5ldyBQREZPYmplY3RzLHRoaXMuX2JpdG1hcHM9bmV3IFNldCx0aGlzLmNsZWFudXBBZnRlclJlbmRlcj0hMSx0aGlzLnBlbmRpbmdDbGVhbnVwPSExLHRoaXMuX2ludGVudFN0YXRlcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExfXZhciBlO3JldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToicGFnZU51bWJlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmRleCsxfX0se2tleToicm90YXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucm90YXRlfX0se2tleToicmVmIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucmVmfX0se2tleToidXNlclVuaXQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdH19LHtrZXk6InZpZXciLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby52aWV3fX0se2tleToiZ2V0Vmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGU9dC5zY2FsZSxyPXQucm90YXRpb24sbj12b2lkIDA9PT1yP3RoaXMucm90YXRlOnIsaT10Lm9mZnNldFgsYT12b2lkIDA9PT1pPzA6aSxvPXQub2Zmc2V0WSxzPXZvaWQgMD09PW8/MDpvLGw9dC5kb250RmxpcCx1PXZvaWQgMCE9PWwmJmw7cmV0dXJuIG5ldyBfZGlzcGxheV91dGlscy5QYWdlVmlld3BvcnQoe3ZpZXdCb3g6dGhpcy52aWV3LHNjYWxlOmUscm90YXRpb246bixvZmZzZXRYOmEsb2Zmc2V0WTpzLGRvbnRGbGlwOnV9KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLmludGVudCxlPXZvaWQgMD09PXQ/ImRpc3BsYXkiOnQscj10aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KGUpO3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0QW5ub3RhdGlvbnModGhpcy5fcGFnZUluZGV4LHIucmVuZGVyaW5nSW50ZW50KX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VKU0FjdGlvbnModGhpcy5fcGFnZUluZGV4KX19LHtrZXk6ImlzUHVyZVhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJpc1B1cmVYZmEiLCEhdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhKX19LHtrZXk6ImdldFhmYSIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZTtyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIiwobnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2hpbGRyZW5bdGhpcy5fcGFnZUluZGV4XSl8fG51bGwpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMsaT10LmNhbnZhc0NvbnRleHQsYT10LnZpZXdwb3J0LG89dC5pbnRlbnQscz12b2lkIDA9PT1vPyJkaXNwbGF5IjpvLGw9dC5hbm5vdGF0aW9uTW9kZSx1PXZvaWQgMD09PWw/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmwsYz10LnRyYW5zZm9ybSxoPXZvaWQgMD09PWM/bnVsbDpjLGY9dC5jYW52YXNGYWN0b3J5LGQ9dm9pZCAwPT09Zj9udWxsOmYscD10LmJhY2tncm91bmQsdj12b2lkIDA9PT1wP251bGw6cCx5PXQub3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSxtPXZvaWQgMD09PXk/bnVsbDp5LGc9dC5hbm5vdGF0aW9uQ2FudmFzTWFwLGI9dm9pZCAwPT09Zz9udWxsOmcsXz10LnBhZ2VDb2xvcnMsdz12b2lkIDA9PT1fP251bGw6XyxBPXQucHJpbnRBbm5vdGF0aW9uU3RvcmFnZSxrPXZvaWQgMD09PUE/bnVsbDpBO251bGw9PT0oZT10aGlzLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiT3ZlcmFsbCIpO3ZhciBTPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQocyx1LGspO3RoaXMucGVuZGluZ0NsZWFudXA9ITEsbXx8KG09dGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpKTt2YXIgeD10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KFMuY2FjaGVLZXkpO3h8fCh4PU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5faW50ZW50U3RhdGVzLnNldChTLmNhY2hlS2V5LHgpKSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQmJihjbGVhclRpbWVvdXQoeC5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCk7dmFyIEUsUD1kfHxuZXcgRGVmYXVsdENhbnZhc0ZhY3Rvcnkoe293bmVyRG9jdW1lbnQ6dGhpcy5fb3duZXJEb2N1bWVudH0pLFQ9ISEoUy5yZW5kZXJpbmdJbnRlbnQmX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7eC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5fHwoeC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShFPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09RXx8RS50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KFMpKTt2YXIgQz1mdW5jdGlvbih0KXt2YXIgZSxyO3gucmVuZGVyVGFza3MuZGVsZXRlKE8pLChuLmNsZWFudXBBZnRlclJlbmRlcnx8VCkmJihuLnBlbmRpbmdDbGVhbnVwPSEwKSxuLl90cnlDbGVhbnVwKCksdD8oTy5jYXBhYmlsaXR5LnJlamVjdCh0KSxuLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6eCxyZWFzb246dCBpbnN0YW5jZW9mIEVycm9yP3Q6bmV3IEVycm9yKHQpfSkpOk8uY2FwYWJpbGl0eS5yZXNvbHZlKCksbnVsbD09PShlPW4uX3N0YXRzKXx8dm9pZCAwPT09ZXx8ZS50aW1lRW5kKCJSZW5kZXJpbmciKSxudWxsPT09KHI9bi5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIk92ZXJhbGwiKX0sTz1uZXcgSW50ZXJuYWxSZW5kZXJUYXNrKHtjYWxsYmFjazpDLHBhcmFtczp7Y2FudmFzQ29udGV4dDppLHZpZXdwb3J0OmEsdHJhbnNmb3JtOmgsYmFja2dyb3VuZDp2fSxvYmpzOnRoaXMub2Jqcyxjb21tb25PYmpzOnRoaXMuY29tbW9uT2Jqcyxhbm5vdGF0aW9uQ2FudmFzTWFwOmIsb3BlcmF0b3JMaXN0Ongub3BlcmF0b3JMaXN0LHBhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsY2FudmFzRmFjdG9yeTpQLHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZTohVCxwZGZCdWc6dGhpcy5fcGRmQnVnLHBhZ2VDb2xvcnM6d30pOygocj14KS5yZW5kZXJUYXNrc3x8KHIucmVuZGVyVGFza3M9bmV3IFNldCkpLmFkZChPKTt2YXIgRj1PLnRhc2s7cmV0dXJuIFByb21pc2UuYWxsKFt4LmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZSxtXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGUscj1fc2xpY2VkVG9BcnJheSh0LDIpLGk9clswXSxhPXJbMV07bi5wZW5kaW5nQ2xlYW51cD9DKCk6KG51bGw9PT0oZT1uLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiUmVuZGVyaW5nIiksTy5pbml0aWFsaXplR3JhcGhpY3Moe3RyYW5zcGFyZW5jeTppLG9wdGlvbmFsQ29udGVudENvbmZpZzphfSksTy5vcGVyYXRvckxpc3RDaGFuZ2VkKCkpfSkpLmNhdGNoKEMpLEZ9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGk9bi5pbnRlbnQsYT12b2lkIDA9PT1pPyJkaXNwbGF5IjppLG89bi5hbm5vdGF0aW9uTW9kZSxzPXZvaWQgMD09PW8/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOm8sbD1uLnByaW50QW5ub3RhdGlvblN0b3JhZ2UsdT12b2lkIDA9PT1sP251bGw6bCxjPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQoYSxzLHUsITApLGg9dGhpcy5faW50ZW50U3RhdGVzLmdldChjLmNhY2hlS2V5KTtyZXR1cm4gaHx8KGg9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbnRlbnRTdGF0ZXMuc2V0KGMuY2FjaGVLZXksaCkpLGgub3BMaXN0UmVhZENhcGFiaWxpdHl8fCgodD1PYmplY3QuY3JlYXRlKG51bGwpKS5vcGVyYXRvckxpc3RDaGFuZ2VkPWZ1bmN0aW9uKCl7aC5vcGVyYXRvckxpc3QubGFzdENodW5rJiYoaC5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKGgub3BlcmF0b3JMaXN0KSxoLnJlbmRlclRhc2tzLmRlbGV0ZSh0KSl9LGgub3BMaXN0UmVhZENhcGFiaWxpdHk9KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksKChlPWgpLnJlbmRlclRhc2tzfHwoZS5yZW5kZXJUYXNrcz1uZXcgU2V0KSkuYWRkKHQpLGgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShyPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09cnx8ci50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KGMpKSxoLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJzdHJlYW1UZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10LmRpc2FibGVDb21iaW5lVGV4dEl0ZW1zLHI9dm9pZCAwIT09ZSYmZSxuPXQuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT12b2lkIDAhPT1uJiZuO3JldHVybiB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFRleHRDb250ZW50Iix7cGFnZUluZGV4OnRoaXMuX3BhZ2VJbmRleCxjb21iaW5lVGV4dEl0ZW1zOiEwIT09cixpbmNsdWRlTWFya2VkQ29udGVudDohMD09PWl9LHtoaWdoV2F0ZXJNYXJrOjEwMCxzaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lml0ZW1zLmxlbmd0aH19KX19LHtrZXk6ImdldFRleHRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZih0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpcmV0dXJuIHRoaXMuZ2V0WGZhKCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIF94ZmFfdGV4dC5YZmFUZXh0LnRleHRDb250ZW50KHQpfSkpO3ZhciBlPXRoaXMuc3RyZWFtVGV4dENvbnRlbnQodCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZ2V0UmVhZGVyKCksaT17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9OyFmdW5jdGlvbiBlKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24ocil7dmFyIG4sYT1yLnZhbHVlO3IuZG9uZT90KGkpOihPYmplY3QuYXNzaWduKGkuc3R5bGVzLGEuc3R5bGVzKSwobj1pLml0ZW1zKS5wdXNoLmFwcGx5KG4sX3RvQ29uc3VtYWJsZUFycmF5KGEuaXRlbXMpKSxlKCkpfSkscil9KCl9KSl9fSx7a2V5OiJnZXRTdHJ1Y3RUcmVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0U3RydWN0VHJlZSh0aGlzLl9wYWdlSW5kZXgpfX0se2tleToiX2Rlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITA7dmFyIHQsZT1bXSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcy52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO2lmKHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtpbnRlbnRTdGF0ZTpuLHJlYXNvbjpuZXcgRXJyb3IoIlBhZ2Ugd2FzIGRlc3Ryb3llZC4iKSxmb3JjZTohMH0pLCFuLm9wTGlzdFJlYWRDYXBhYmlsaXR5KXt2YXIgaSxhPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG4ucmVuZGVyVGFza3MpO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOyl7dmFyIG89aS52YWx1ZTtlLnB1c2goby5jb21wbGV0ZWQpLG8uY2FuY2VsKCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMub2Jqcy5jbGVhcigpO3ZhciBzLGw9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXMudmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtsLmUodCl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsUHJvbWlzZS5hbGwoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGVuZGluZ0NsZWFudXA9ITAsdGhpcy5fdHJ5Q2xlYW51cCh0KX19LHtrZXk6Il90cnlDbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMucGVuZGluZ0NsZWFudXApcmV0dXJuITE7dmFyIGUscj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9pbnRlbnRTdGF0ZXMudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPW4ucmVuZGVyVGFza3MsYT1uLm9wZXJhdG9yTGlzdDtpZihpLnNpemU+MHx8IWEubGFzdENodW5rKXJldHVybiExfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9pbnRlbnRTdGF0ZXMuY2xlYXIoKSx0aGlzLm9ianMuY2xlYXIoKSx0JiZ0aGlzLl9zdGF0cyYmKHRoaXMuX3N0YXRzPW5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIpO3ZhciBvLHM9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KW8udmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsITB9fSx7a2V5OiJfc3RhcnRSZW5kZXJQYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByLG4saT10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGUpO2kmJihudWxsPT09KHI9dGhpcy5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIlBhZ2UgUmVxdWVzdCIpLG51bGw9PT0obj1pLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpfHx2b2lkIDA9PT1ufHxuLnJlc29sdmUodCkpfX0se2tleToiX3JlbmRlclBhZ2VDaHVuayIsdmFsdWU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZS5vcGVyYXRvckxpc3QuZm5BcnJheS5wdXNoKHQuZm5BcnJheVtyXSksZS5vcGVyYXRvckxpc3QuYXJnc0FycmF5LnB1c2godC5hcmdzQXJyYXlbcl0pO2Uub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz10Lmxhc3RDaHVuayxlLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cz10LnNlcGFyYXRlQW5ub3RzO3ZhciBpLGE9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5yZW5kZXJUYXNrcyk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUub3BlcmF0b3JMaXN0Q2hhbmdlZCgpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXQubGFzdENodW5rJiZ0aGlzLl90cnlDbGVhbnVwKCl9fSx7a2V5OiJfcHVtcE9wZXJhdG9yTGlzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucmVuZGVyaW5nSW50ZW50LG49dC5jYWNoZUtleSxpPXQuYW5ub3RhdGlvblN0b3JhZ2VNYXAsYT10aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldE9wZXJhdG9yTGlzdCIse3BhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsaW50ZW50OnIsY2FjaGVLZXk6bixhbm5vdGF0aW9uU3RvcmFnZTppfSkuZ2V0UmVhZGVyKCksbz10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KG4pO28uc3RyZWFtUmVhZGVyPWEsZnVuY3Rpb24gdCgpe2EucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBuPXIudmFsdWU7ci5kb25lP28uc3RyZWFtUmVhZGVyPW51bGw6ZS5fdHJhbnNwb3J0LmRlc3Ryb3llZHx8KGUuX3JlbmRlclBhZ2VDaHVuayhuLG8pLHQoKSl9KSwoZnVuY3Rpb24odCl7aWYoby5zdHJlYW1SZWFkZXI9bnVsbCwhZS5fdHJhbnNwb3J0LmRlc3Ryb3llZCl7aWYoby5vcGVyYXRvckxpc3Qpe28ub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz0hMDt2YXIgcixuPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8ucmVuZGVyVGFza3MpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLm9wZXJhdG9yTGlzdENoYW5nZWQoKX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLl90cnlDbGVhbnVwKCl9aWYoby5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KW8uZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QodCk7ZWxzZXtpZighby5vcExpc3RSZWFkQ2FwYWJpbGl0eSl0aHJvdyB0O28ub3BMaXN0UmVhZENhcGFiaWxpdHkucmVqZWN0KHQpfX19KSl9KCl9fSx7a2V5OiJfYWJvcnRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10LmludGVudFN0YXRlLG49dC5yZWFzb24saT10LmZvcmNlLGE9dm9pZCAwIT09aSYmaTtpZihyLnN0cmVhbVJlYWRlcil7aWYoci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHIuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCksci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0PW51bGwpLCFhKXtpZihyLnJlbmRlclRhc2tzLnNpemU+MClyZXR1cm47aWYobiBpbnN0YW5jZW9mIF9kaXNwbGF5X3V0aWxzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbil7dmFyIG89UkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUO3JldHVybiBuLmV4dHJhRGVsYXk+MCYmbi5leHRyYURlbGF5PDFlMyYmKG8rPW4uZXh0cmFEZWxheSksdm9pZChyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCxlLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6cixyZWFzb246bixmb3JjZTohMH0pfSksbykpfX1pZihyLnN0cmVhbVJlYWRlci5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKG4ubWVzc2FnZSkpLmNhdGNoKChmdW5jdGlvbigpe30pKSxyLnN0cmVhbVJlYWRlcj1udWxsLCF0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKXt2YXIgcyxsPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgdT1fc2xpY2VkVG9BcnJheShzLnZhbHVlLDIpLGM9dVswXTtpZih1WzFdPT09cil7dGhpcy5faW50ZW50U3RhdGVzLmRlbGV0ZShjKTticmVha319fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfXRoaXMuY2xlYW51cCgpfX19fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRzfX1dKSx0fSgpO2V4cG9ydHMuUERGUGFnZVByb3h5PVBERlBhZ2VQcm94eTt2YXIgX2xpc3RlbmVycz1uZXcgV2Vha01hcCxfZGVmZXJyZWQ9bmV3IFdlYWtNYXAsTG9vcGJhY2tQb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2xpc3RlbmVycyx7d3JpdGFibGU6ITAsdmFsdWU6W119KSxfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLF9kZWZlcnJlZCx7d3JpdGFibGU6ITAsdmFsdWU6UHJvbWlzZS5yZXNvbHZlKCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6InBvc3RNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj17ZGF0YTpzdHJ1Y3R1cmVkQ2xvbmUodCxlKX07X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2RlZmVycmVkKS50aGVuKChmdW5jdGlvbigpe3ZhciB0LGU9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHIsX2xpc3RlbmVycykpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmNhbGwocixuKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19KSl9fSx7a2V5OiJhZGRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLnB1c2goZSl9fSx7a2V5OiJyZW1vdmVFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLmluZGV4T2YoZSk7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykuc3BsaWNlKHIsMSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykubGVuZ3RoPTB9fV0pLHR9KCk7ZXhwb3J0cy5Mb29wYmFja1BvcnQ9TG9vcGJhY2tQb3J0O3ZhciBQREZXb3JrZXJVdGlsPXtpc1dvcmtlckRpc2FibGVkOiExLGZhbGxiYWNrV29ya2VyU3JjOm51bGwsZmFrZVdvcmtlcklkOjB9O2lmKGV4cG9ydHMuUERGV29ya2VyVXRpbD1QREZXb3JrZXJVdGlsLF9pc19ub2RlLmlzTm9kZUpTJiYiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSlQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITAsUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz0iLi9wZGYud29ya2VyLmpzIjtlbHNlIGlmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQ/InVuZGVmaW5lZCI6X3R5cGVvZihkb2N1bWVudCkpKXt2YXIgX2RvY3VtZW50LF9kb2N1bWVudCRjdXJyZW50U2NyaSxwZGZqc0ZpbGVQYXRoPW51bGw9PT0oX2RvY3VtZW50PWRvY3VtZW50KXx8dm9pZCAwPT09X2RvY3VtZW50fHxudWxsPT09KF9kb2N1bWVudCRjdXJyZW50U2NyaT1fZG9jdW1lbnQuY3VycmVudFNjcmlwdCl8fHZvaWQgMD09PV9kb2N1bWVudCRjdXJyZW50U2NyaT92b2lkIDA6X2RvY3VtZW50JGN1cnJlbnRTY3JpLnNyYztwZGZqc0ZpbGVQYXRoJiYoUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz1wZGZqc0ZpbGVQYXRoLnJlcGxhY2UoLyhcLig/Om1pblwuKT9qcykoXD8uKik/JC9pLCIud29ya2VyJDEkMiIpKX1QREZXb3JrZXJVdGlsLmlzU2FtZU9yaWdpbj1mdW5jdGlvbih0LGUpe3ZhciByO3RyeXtpZighKHI9bmV3IFVSTCh0KSkub3JpZ2lufHwibnVsbCI9PT1yLm9yaWdpbilyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX12YXIgbj1uZXcgVVJMKGUscik7cmV0dXJuIHIub3JpZ2luPT09bi5vcmlnaW59LFBERldvcmtlclV0aWwuY3JlYXRlQ0ROV3JhcHBlcj1mdW5jdGlvbih0KXt2YXIgZT0naW1wb3J0U2NyaXB0cygiJy5jb25jYXQodCwnIik7Jyk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2VdKSl9O3ZhciBQREZXb3JrZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQREZXb3JrZXIoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10Lm5hbWUscj12b2lkIDA9PT1lP251bGw6ZSxuPXQucG9ydCxpPXZvaWQgMD09PW4/bnVsbDpuLGE9dC52ZXJib3NpdHksbz12b2lkIDA9PT1hPygwLF91dGlsLmdldFZlcmJvc2l0eUxldmVsKSgpOmE7aWYoX2NsYXNzQ2FsbENoZWNrKHRoaXMsUERGV29ya2VyKSxpJiZfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KFBERldvcmtlcixQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXMoaSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgUERGV29ya2VyIHBlciBwb3J0LiIpO2lmKHRoaXMubmFtZT1yLHRoaXMuZGVzdHJveWVkPSExLHRoaXMudmVyYm9zaXR5PW8sdGhpcy5fcmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl93ZWJXb3JrZXI9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsLGkpcmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoUERGV29ya2VyLFBERldvcmtlcixfd29ya2VyUG9ydHMpLnNldChpLHRoaXMpLHZvaWQgdGhpcy5faW5pdGlhbGl6ZUZyb21Qb3J0KGkpO3RoaXMuX2luaXRpYWxpemUoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKFBERldvcmtlcixbe2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToicG9ydCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcnR9fSx7a2V5OiJtZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2VIYW5kbGVyfX0se2tleToiX2luaXRpYWxpemVGcm9tUG9ydCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fcG9ydD10LHRoaXMuX21lc3NhZ2VIYW5kbGVyPW5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKCJtYWluIiwid29ya2VyIix0KSx0aGlzLl9tZXNzYWdlSGFuZGxlci5vbigicmVhZHkiLChmdW5jdGlvbigpe30pKSx0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpLHRoaXMuX21lc3NhZ2VIYW5kbGVyLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0aGlzLnZlcmJvc2l0eX0pfX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighUERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkJiYhUERGV29ya2VyLl9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIpe3ZhciBlPVBERldvcmtlci53b3JrZXJTcmM7dHJ5e1BERldvcmtlclV0aWwuaXNTYW1lT3JpZ2luKHdpbmRvdy5sb2NhdGlvbi5ocmVmLGUpfHwoZT1QREZXb3JrZXJVdGlsLmNyZWF0ZUNETldyYXBwZXIobmV3IFVSTChlLHdpbmRvdy5sb2NhdGlvbikuaHJlZikpO3ZhciByPW5ldyBXb3JrZXIoZSksbj1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcigibWFpbiIsIndvcmtlciIsciksaT1mdW5jdGlvbigpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4uZGVzdHJveSgpLHIudGVybWluYXRlKCksdC5kZXN0cm95ZWQ/dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpOnQuX3NldHVwRmFrZVdvcmtlcigpfSxhPWZ1bmN0aW9uKCl7dC5fd2ViV29ya2VyfHxpKCl9O3IuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4ub24oInRlc3QiLChmdW5jdGlvbihlKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZD9pKCk6ZT8odC5fbWVzc2FnZUhhbmRsZXI9bix0Ll9wb3J0PXIsdC5fd2ViV29ya2VyPXIsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxuLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pKToodC5fc2V0dXBGYWtlV29ya2VyKCksbi5kZXN0cm95KCksci50ZXJtaW5hdGUoKSl9KSksbi5vbigicmVhZHkiLChmdW5jdGlvbihlKXtpZihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZClpKCk7ZWxzZSB0cnl7bygpfWNhdGNoKGUpe3QuX3NldHVwRmFrZVdvcmtlcigpfX0pKTt2YXIgbz1mdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5O24uc2VuZCgidGVzdCIsdCxbdC5idWZmZXJdKX07cmV0dXJuIHZvaWQgbygpfWNhdGNoKHQpeygwLF91dGlsLmluZm8pKCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLiIpfX10aGlzLl9zZXR1cEZha2VXb3JrZXIoKX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWR8fCgoMCxfdXRpbC53YXJuKSgiU2V0dGluZyB1cCBmYWtlIHdvcmtlci4iKSxQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITApLFBERldvcmtlci5fc2V0dXBGYWtlV29ya2VyR2xvYmFsLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHQuZGVzdHJveWVkKXQuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTtlbHNle3ZhciByPW5ldyBMb29wYmFja1BvcnQ7dC5fcG9ydD1yO3ZhciBuPSJmYWtlIi5jb25jYXQoUERGV29ya2VyVXRpbC5mYWtlV29ya2VySWQrKyksaT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuKyJfd29ya2VyIixuLHIpO2Uuc2V0dXAoaSxyKTt2YXIgYT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuLG4rIl93b3JrZXIiLHIpO3QuX21lc3NhZ2VIYW5kbGVyPWEsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxhLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoJ1NldHRpbmcgdXAgZmFrZSB3b3JrZXIgZmFpbGVkOiAiJy5jb25jYXQoZS5tZXNzYWdlLCciLicpKSl9KSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3dlYldvcmtlciYmKHRoaXMuX3dlYldvcmtlci50ZXJtaW5hdGUoKSx0aGlzLl93ZWJXb3JrZXI9bnVsbCksX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldChQREZXb3JrZXIsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZGVsZXRlKHRoaXMuX3BvcnQpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlciYmKHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKSx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsKX19XSxbe2tleToiZnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG51bGw9PXR8fCF0LnBvcnQpdGhyb3cgbmV3IEVycm9yKCJQREZXb3JrZXIuZnJvbVBvcnQgLSBpbnZhbGlkIG1ldGhvZCBzaWduYXR1cmUuIik7cmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodGhpcyxQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXModC5wb3J0KT9fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHRoaXMsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZ2V0KHQucG9ydCk6bmV3IFBERldvcmtlcih0KX19LHtrZXk6IndvcmtlclNyYyIsZ2V0OmZ1bmN0aW9uKCl7aWYoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKXJldHVybiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7aWYobnVsbCE9PVBERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmMpcmV0dXJuIF9pc19ub2RlLmlzTm9kZUpTfHwoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgnTm8gIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjIiBzcGVjaWZpZWQuJyksUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYzt0aHJvdyBuZXcgRXJyb3IoJ05vICJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyIgc3BlY2lmaWVkLicpfX0se2tleToiX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3ZhciB0O3JldHVybihudWxsPT09KHQ9Z2xvYmFsVGhpcy5wZGZqc1dvcmtlcil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuV29ya2VyTWVzc2FnZUhhbmRsZXIpfHxudWxsfWNhdGNoKHQpe3JldHVybiBudWxsfX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXJHbG9iYWwiLGdldDpmdW5jdGlvbiBnZXQoKXt2YXIgX3RoaXMxMD10aGlzLGxvYWRlcj1mdW5jdGlvbigpe3ZhciBfcmVmMTU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIF9jYWxsZWUzKCl7dmFyIG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcix3b3JrZXI7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKXtmb3IoOzspc3dpdGNoKF9jb250ZXh0My5wcmV2PV9jb250ZXh0My5uZXh0KXtjYXNlIDA6aWYobWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyPV90aGlzMTAuX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciwhbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyKXtfY29udGV4dDMubmV4dD0zO2JyZWFrfXJldHVybiBfY29udGV4dDMuYWJydXB0KCJyZXR1cm4iLG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcik7Y2FzZSAzOmlmKCFfaXNfbm9kZS5pc05vZGVKU3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHJlcXVpcmUpe19jb250ZXh0My5uZXh0PTY7YnJlYWt9cmV0dXJuIHdvcmtlcj1ldmFsKCJyZXF1aXJlIikoX3RoaXMxMC53b3JrZXJTcmMpLF9jb250ZXh0My5hYnJ1cHQoInJldHVybiIsd29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyKTtjYXNlIDY6cmV0dXJuIF9jb250ZXh0My5uZXh0PTgsKDAsX2Rpc3BsYXlfdXRpbHMubG9hZFNjcmlwdCkoX3RoaXMxMC53b3JrZXJTcmMpO2Nhc2UgODpyZXR1cm4gX2NvbnRleHQzLmFicnVwdCgicmV0dXJuIix3aW5kb3cucGRmanNXb3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXIpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIF9jb250ZXh0My5zdG9wKCl9fSksX2NhbGxlZTMpfSkpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gX3JlZjE1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJfc2V0dXBGYWtlV29ya2VyR2xvYmFsIixsb2FkZXIoKSl9fV0pLFBERldvcmtlcn0oKTtleHBvcnRzLlBERldvcmtlcj1QREZXb3JrZXI7dmFyIF93b3JrZXJQb3J0cz17d3JpdGFibGU6ITAsdmFsdWU6bmV3IFdlYWtNYXB9LF9kb2NTdGF0cz1uZXcgV2Vha01hcCxfcGFnZUNhY2hlPW5ldyBXZWFrTWFwLF9wYWdlUHJvbWlzZXM9bmV3IFdlYWtNYXAsX21ldGFkYXRhUHJvbWlzZT1uZXcgV2Vha01hcCxXb3JrZXJUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuLGkpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2RvY1N0YXRzLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZUNhY2hlLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZVByb21pc2VzLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfbWV0YWRhdGFQcm9taXNlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5tZXNzYWdlSGFuZGxlcj1lLHRoaXMubG9hZGluZ1Rhc2s9cix0aGlzLmNvbW1vbk9ianM9bmV3IFBERk9iamVjdHMsdGhpcy5mb250TG9hZGVyPW5ldyBfZm9udF9sb2FkZXIuRm9udExvYWRlcih7b25VbnN1cHBvcnRlZEZlYXR1cmU6dGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSxvd25lckRvY3VtZW50Omkub3duZXJEb2N1bWVudCxzdHlsZUVsZW1lbnQ6aS5zdHlsZUVsZW1lbnR9KSx0aGlzLl9wYXJhbXM9aSxpLnVzZVdvcmtlckZldGNofHwodGhpcy5DTWFwUmVhZGVyRmFjdG9yeT1uZXcgaS5DTWFwUmVhZGVyRmFjdG9yeSh7YmFzZVVybDppLmNNYXBVcmwsaXNDb21wcmVzc2VkOmkuY01hcFBhY2tlZH0pLHRoaXMuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9bmV3IGkuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnkoe2Jhc2VVcmw6aS5zdGFuZGFyZEZvbnREYXRhVXJsfSkpLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVzdHJveUNhcGFiaWxpdHk9bnVsbCx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHk9bnVsbCx0aGlzLl9uZXR3b3JrU3RyZWFtPW4sdGhpcy5fZnVsbFJlYWRlcj1udWxsLHRoaXMuX2xhc3RQcm9ncmVzcz1udWxsLHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKX12YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFubm90YXRpb25TdG9yYWdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImFubm90YXRpb25TdG9yYWdlIixuZXcgX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZSl9fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9kb2NTdGF0cyl9fSx7a2V5OiJnZXRSZW5kZXJpbmdJbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEUscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10saT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVksYT1udWxsO3N3aXRjaCh0KXtjYXNlImFueSI6aT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWTticmVhaztjYXNlImRpc3BsYXkiOmJyZWFrO2Nhc2UicHJpbnQiOmk9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVDticmVhaztkZWZhdWx0OigwLF91dGlsLndhcm4pKCJnZXRSZW5kZXJpbmdJbnRlbnQgLSBpbnZhbGlkIGludGVudDogIi5jb25jYXQodCkpfXN3aXRjaChlKXtjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkRJU0FCTEU6aSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFO2JyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmJyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX0ZPUk1TOmkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVM7YnJlYWs7Y2FzZSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEVfU1RPUkFHRTphPSgoaSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19TVE9SQUdFKSZfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UJiZyIGluc3RhbmNlb2YgX2Fubm90YXRpb25fc3RvcmFnZS5QcmludEFubm90YXRpb25TdG9yYWdlP3I6dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSkuc2VyaWFsaXphYmxlO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwud2FybikoImdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgYW5ub3RhdGlvbk1vZGU6ICIuY29uY2F0KGUpKX1yZXR1cm4gbiYmKGkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUKSx7cmVuZGVyaW5nSW50ZW50OmksY2FjaGVLZXk6IiIuY29uY2F0KGksIl8iKS5jb25jYXQoX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZS5nZXRIYXNoKGEpKSxhbm5vdGF0aW9uU3RvcmFnZU1hcDphfX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5KXJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkmJnRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCBkdXJpbmcgb25QYXNzd29yZCBjYWxsYmFjayIpKTt2YXIgZSxyPVtdLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtyLnB1c2goaS5fZGVzdHJveSgpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfcGFnZVByb21pc2VzKS5jbGVhcigpLHRoaXMuaGFzT3duUHJvcGVydHkoImFubm90YXRpb25TdG9yYWdlIikmJnRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO3ZhciBhPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJUZXJtaW5hdGUiLG51bGwpO3JldHVybiByLnB1c2goYSksUHJvbWlzZS5hbGwocikudGhlbigoZnVuY3Rpb24oKXt0LmNvbW1vbk9ianMuY2xlYXIoKSx0LmZvbnRMb2FkZXIuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfbWV0YWRhdGFQcm9taXNlLG51bGwpLHQuX2dldEZpZWxkT2JqZWN0c1Byb21pc2U9bnVsbCx0Ll9oYXNKU0FjdGlvbnNQcm9taXNlPW51bGwsdC5fbmV0d29ya1N0cmVhbSYmdC5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSksdC5tZXNzYWdlSGFuZGxlciYmKHQubWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpLHQubWVzc2FnZUhhbmRsZXI9bnVsbCksdC5kZXN0cm95Q2FwYWJpbGl0eS5yZXNvbHZlKCl9KSx0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToic2V0dXBNZXNzYWdlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5tZXNzYWdlSGFuZGxlcixyPXRoaXMubG9hZGluZ1Rhc2s7ZS5vbigiR2V0UmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJlYWRlciAtIG5vIGBJUERGU3RyZWFtYCBpbnN0YW5jZSBhdmFpbGFibGUuIiksdC5fZnVsbFJlYWRlcj10Ll9uZXR3b3JrU3RyZWFtLmdldEZ1bGxSZWFkZXIoKSx0Ll9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7dC5fbGFzdFByb2dyZXNzPXtsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS50b3RhbH19LHIub25QdWxsPWZ1bmN0aW9uKCl7dC5fZnVsbFJlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSZWFkZXIgLSBleHBlY3RlZCBhbiBBcnJheUJ1ZmZlci4iKSxyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoZSksMSxbZV0pKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ci5lcnJvcih0KX0pKX0sci5vbkNhbmNlbD1mdW5jdGlvbihlKXt0Ll9mdWxsUmVhZGVyLmNhbmNlbChlKSxyLnJlYWR5LmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5kZXN0cm95ZWQpdGhyb3cgZX0pKX19KSksZS5vbigiUmVhZGVySGVhZGVyc1JlYWR5IiwoZnVuY3Rpb24oZSl7dmFyIG49KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksaT10Ll9mdWxsUmVhZGVyO3JldHVybiBpLmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe3ZhciBlO2kuaXNTdHJlYW1pbmdTdXBwb3J0ZWQmJmkuaXNSYW5nZVN1cHBvcnRlZHx8KHQuX2xhc3RQcm9ncmVzcyYmKG51bGw9PT0oZT1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwocix0Ll9sYXN0UHJvZ3Jlc3MpKSxpLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXIub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbChyLHtsb2FkZWQ6dC5sb2FkZWQsdG90YWw6dC50b3RhbH0pfSksbi5yZXNvbHZlKHtpc1N0cmVhbWluZ1N1cHBvcnRlZDppLmlzU3RyZWFtaW5nU3VwcG9ydGVkLGlzUmFuZ2VTdXBwb3J0ZWQ6aS5pc1JhbmdlU3VwcG9ydGVkLGNvbnRlbnRMZW5ndGg6aS5jb250ZW50TGVuZ3RofSl9KSxuLnJlamVjdCksbi5wcm9taXNlfSkpLGUub24oIkdldFJhbmdlUmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS4iKTt2YXIgbj10Ll9uZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGUuYmVnaW4sZS5lbmQpO24/KHIub25QdWxsPWZ1bmN0aW9uKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSYW5nZVJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLiIpLHIuZW5xdWV1ZShuZXcgVWludDhBcnJheShlKSwxLFtlXSkpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyLmVycm9yKHQpfSkpfSxyLm9uQ2FuY2VsPWZ1bmN0aW9uKGUpe24uY2FuY2VsKGUpLHIucmVhZHkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCF0LmRlc3Ryb3llZCl0aHJvdyBlfSkpfSk6ci5jbG9zZSgpfSkpLGUub24oIkdldERvYyIsKGZ1bmN0aW9uKGUpe3ZhciBuPWUucGRmSW5mbzt0Ll9udW1QYWdlcz1uLm51bVBhZ2VzLHQuX2h0bWxGb3JYZmE9bi5odG1sRm9yWGZhLGRlbGV0ZSBuLmh0bWxGb3JYZmEsci5fY2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBQREZEb2N1bWVudFByb3h5KG4sdCkpfSkpLGUub24oIkRvY0V4Y2VwdGlvbiIsKGZ1bmN0aW9uKHQpe3ZhciBlO3N3aXRjaCh0Lm5hbWUpe2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOmU9bmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2JyZWFrO2Nhc2UiSW52YWxpZFBERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjplPW5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24odC5tZXNzYWdlLHQuc3RhdHVzKTticmVhaztjYXNlIlVua25vd25FcnJvckV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LmRldGFpbHMpO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwudW5yZWFjaGFibGUpKCJEb2NFeGNlcHRpb24gLSBleHBlY3RlZCBhIHZhbGlkIEVycm9yLiIpfXIuX2NhcGFiaWxpdHkucmVqZWN0KGUpfSkpLGUub24oIlBhc3N3b3JkUmVxdWVzdCIsKGZ1bmN0aW9uKGUpe2lmKHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyLm9uUGFzc3dvcmQpdHJ5e3Iub25QYXNzd29yZCgoZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIEVycm9yP3QuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QoZSk6dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlc29sdmUoe3Bhc3N3b3JkOmV9KX0pLGUuY29kZSl9Y2F0Y2goZSl7dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChlKX1lbHNlIHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpKTtyZXR1cm4gdC5fcGFzc3dvcmRDYXBhYmlsaXR5LnByb21pc2V9KSksZS5vbigiRGF0YUxvYWRlZCIsKGZ1bmN0aW9uKGUpe3ZhciBuO251bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubGVuZ3RoLHRvdGFsOmUubGVuZ3RofSksdC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUoZSl9KSksZS5vbigiU3RhcnRSZW5kZXJQYWdlIiwoZnVuY3Rpb24oZSl7dC5kZXN0cm95ZWR8fF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0LF9wYWdlQ2FjaGUpLmdldChlLnBhZ2VJbmRleCkuX3N0YXJ0UmVuZGVyUGFnZShlLnRyYW5zcGFyZW5jeSxlLmNhY2hlS2V5KX0pKSxlLm9uKCJjb21tb25vYmoiLChmdW5jdGlvbihyKXt2YXIgbixpPV9zbGljZWRUb0FycmF5KHIsMyksYT1pWzBdLG89aVsxXSxzPWlbMl07aWYoIXQuZGVzdHJveWVkJiYhdC5jb21tb25PYmpzLmhhcyhhKSlzd2l0Y2gobyl7Y2FzZSJGb250Ijp2YXIgbD10Ll9wYXJhbXM7aWYoImVycm9yImluIHMpe3ZhciB1PXMuZXJyb3I7KDAsX3V0aWwud2FybikoIkVycm9yIGR1cmluZyBmb250IGxvYWRpbmc6ICIuY29uY2F0KHUpKSx0LmNvbW1vbk9ianMucmVzb2x2ZShhLHUpO2JyZWFrfXZhciBjPW51bGw7bC5wZGZCdWcmJm51bGwhPT0obj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpJiZ2b2lkIDAhPT1uJiZuLmVuYWJsZWQmJihjPXtyZWdpc3RlckZvbnQ6ZnVuY3Rpb24odCxlKXtnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IuZm9udEFkZGVkKHQsZSl9fSk7dmFyIGg9bmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChzLHtpc0V2YWxTdXBwb3J0ZWQ6bC5pc0V2YWxTdXBwb3J0ZWQsZGlzYWJsZUZvbnRGYWNlOmwuZGlzYWJsZUZvbnRGYWNlLGlnbm9yZUVycm9yczpsLmlnbm9yZUVycm9ycyxvblVuc3VwcG9ydGVkRmVhdHVyZTp0Ll9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHQpLGZvbnRSZWdpc3RyeTpjfSk7dC5mb250TG9hZGVyLmJpbmQoaCkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlbmRXaXRoUHJvbWlzZSgiRm9udEZhbGxiYWNrIix7aWQ6YX0pfSkpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7IWwuZm9udEV4dHJhUHJvcGVydGllcyYmaC5kYXRhJiYoaC5kYXRhPW51bGwpLHQuY29tbW9uT2Jqcy5yZXNvbHZlKGEsaCl9KSk7YnJlYWs7Y2FzZSJGb250UGF0aCI6Y2FzZSJJbWFnZSI6dC5jb21tb25PYmpzLnJlc29sdmUoYSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiR290IHVua25vd24gY29tbW9uIG9iamVjdCB0eXBlICIuY29uY2F0KG8pKX19KSksZS5vbigib2JqIiwoZnVuY3Rpb24oZSl7dmFyIHI9X3NsaWNlZFRvQXJyYXkoZSw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxvPXJbM107aWYoIXQuZGVzdHJveWVkKXt2YXIgcz1fY2xhc3NQcml2YXRlRmllbGRHZXQodCxfcGFnZUNhY2hlKS5nZXQoaSk7aWYoIXMub2Jqcy5oYXMobikpc3dpdGNoKGEpe2Nhc2UiSW1hZ2UiOmlmKHMub2Jqcy5yZXNvbHZlKG4sbyksbyl7dmFyIGw7aWYoby5iaXRtYXApe3ZhciB1PW8uYml0bWFwO2w9by53aWR0aCpvLmhlaWdodCo0LHMuX2JpdG1hcHMuYWRkKHUpfWVsc2V7dmFyIGM7bD0obnVsbD09PShjPW8uZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMubGVuZ3RoKXx8MH1sPjhlNiYmKHMuY2xlYW51cEFmdGVyUmVuZGVyPSEwKX1icmVhaztjYXNlIlBhdHRlcm4iOnMub2Jqcy5yZXNvbHZlKG4sbyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkdvdCB1bmtub3duIG9iamVjdCB0eXBlICIuY29uY2F0KGEpKX19fSkpLGUub24oIkRvY1Byb2dyZXNzIiwoZnVuY3Rpb24oZSl7dmFyIG47dC5kZXN0cm95ZWR8fG51bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubG9hZGVkLHRvdGFsOmUudG90YWx9KX0pKSxlLm9uKCJEb2NTdGF0cyIsKGZ1bmN0aW9uKGUpe3QuZGVzdHJveWVkfHxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfZG9jU3RhdHMsT2JqZWN0LmZyZWV6ZSh7c3RyZWFtVHlwZXM6T2JqZWN0LmZyZWV6ZShlLnN0cmVhbVR5cGVzKSxmb250VHlwZXM6T2JqZWN0LmZyZWV6ZShlLmZvbnRUeXBlcyl9KSl9KSksZS5vbigiVW5zdXBwb3J0ZWRGZWF0dXJlIix0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpKSxlLm9uKCJGZXRjaEJ1aWx0SW5DTWFwIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuQ01hcFJlYWRlckZhY3Rvcnk/dC5DTWFwUmVhZGVyRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNNYXBSZWFkZXJGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSksZS5vbigiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk/dC5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIlN0YW5kYXJkRm9udERhdGFGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSl9fSx7a2V5OiJfb25VbnN1cHBvcnRlZEZlYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10LmZlYXR1cmVJZDt0aGlzLmRlc3Ryb3llZHx8bnVsbD09PShlPShyPXRoaXMubG9hZGluZ1Rhc2spLm9uVW5zdXBwb3J0ZWRGZWF0dXJlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHIsbil9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGF0YSIsbnVsbCl9fSx7a2V5OiJzYXZlRG9jdW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7cmV0dXJuIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2l6ZTw9MCYmKDAsX3V0aWwud2FybikoInNhdmVEb2N1bWVudCBjYWxsZWQgd2hpbGUgYGFubm90YXRpb25TdG9yYWdlYCBpcyBlbXB0eSwgcGxlYXNlIHVzZSB0aGUgZ2V0RGF0YS1tZXRob2QgaW5zdGVhZC4iKSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiU2F2ZURvY3VtZW50Iix7aXNQdXJlWGZhOiEhdGhpcy5faHRtbEZvclhmYSxudW1QYWdlczp0aGlzLl9udW1QYWdlcyxhbm5vdGF0aW9uU3RvcmFnZTp0aGlzLmFubm90YXRpb25TdG9yYWdlLnNlcmlhbGl6YWJsZSxmaWxlbmFtZTpudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZWFkZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmZpbGVuYW1lKSYmdm9pZCAwIT09dD90Om51bGx9KS5maW5hbGx5KChmdW5jdGlvbigpe3IuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpfSkpfX0se2tleToiZ2V0UGFnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDw9MHx8dD50aGlzLl9udW1QYWdlcylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJJbnZhbGlkIHBhZ2UgcmVxdWVzdC4iKSk7dmFyIHI9dC0xLG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VQcm9taXNlcykuZ2V0KHIpO2lmKG4pcmV0dXJuIG47dmFyIGk9dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2UiLHtwYWdlSW5kZXg6cn0pLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKGUuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVHJhbnNwb3J0IGRlc3Ryb3llZCIpO3ZhciBuPW5ldyBQREZQYWdlUHJveHkocix0LGUsZS5fcGFyYW1zLm93bmVyRG9jdW1lbnQsZS5fcGFyYW1zLnBkZkJ1Zyk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChlLF9wYWdlQ2FjaGUpLnNldChyLG4pLG59KSk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9wYWdlUHJvbWlzZXMpLnNldChyLGkpLGl9fSx7a2V5OiJnZXRQYWdlSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiIT09X3R5cGVvZih0KXx8bnVsbD09PXR8fCFOdW1iZXIuaXNJbnRlZ2VyKHQubnVtKXx8dC5udW08MHx8IU51bWJlci5pc0ludGVnZXIodC5nZW4pfHx0LmdlbjwwP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBwYWdlSW5kZXggcmVxdWVzdC4iKSk6dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VJbmRleCIse251bTp0Lm51bSxnZW46dC5nZW59KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0QW5ub3RhdGlvbnMiLHtwYWdlSW5kZXg6dCxpbnRlbnQ6ZX0pfX0se2tleToiZ2V0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlfHwodGhpcy5fZ2V0RmllbGRPYmplY3RzUHJvbWlzZT10aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RmllbGRPYmplY3RzIixudWxsKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0pTQWN0aW9uc1Byb21pc2V8fCh0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJIYXNKU0FjdGlvbnMiLG51bGwpKX19LHtrZXk6ImdldENhbGN1bGF0aW9uT3JkZXJJZHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKX19LHtrZXk6ImdldERlc3RpbmF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERlc3RpbmF0aW9ucyIsbnVsbCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LiIpKTp0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGVzdGluYXRpb24iLHtpZDp0fSl9fSx7a2V5OiJnZXRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxhYmVscyIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTGF5b3V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxheW91dCIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VNb2RlIixudWxsKX19LHtrZXk6ImdldFZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLG51bGwpfX0se2tleToiZ2V0T3BlbkFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE9wZW5BY3Rpb24iLG51bGwpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRBdHRhY2htZW50cyIsbnVsbCl9fSx7a2V5OiJnZXRKYXZhU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0SmF2YVNjcmlwdCIsbnVsbCl9fSx7a2V5OiJnZXREb2NKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXREb2NKU0FjdGlvbnMiLG51bGwpfX0se2tleToiZ2V0UGFnZUpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlSlNBY3Rpb25zIix7cGFnZUluZGV4OnR9KX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0U3RydWN0VHJlZSIse3BhZ2VJbmRleDp0fSl9fSx7a2V5OiJnZXRPdXRsaW5lIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0T3V0bGluZSIsbnVsbCl9fSx7a2V5OiJnZXRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnLk9wdGlvbmFsQ29udGVudENvbmZpZyh0KX0pKX19LHtrZXk6ImdldFBlcm1pc3Npb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGVybWlzc2lvbnMiLG51bGwpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSl8fF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9tZXRhZGF0YVByb21pc2UsdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1ldGFkYXRhIixudWxsKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcixuLGksYTtyZXR1cm57aW5mbzplWzBdLG1ldGFkYXRhOmVbMV0/bmV3IF9tZXRhZGF0YS5NZXRhZGF0YShlWzFdKTpudWxsLGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lOm51bGwhPT0ocj1udWxsPT09KG49dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PW4/dm9pZCAwOm4uZmlsZW5hbWUpJiZ2b2lkIDAhPT1yP3I6bnVsbCxjb250ZW50TGVuZ3RoOm51bGwhPT0oaT1udWxsPT09KGE9dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29udGVudExlbmd0aCkmJnZvaWQgMCE9PWk/aTpudWxsfX0pKSl9fSx7a2V5OiJnZXRNYXJrSW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1hcmtJbmZvIixudWxsKX19LHtrZXk6InN0YXJ0Q2xlYW51cCIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxhPWFyZ3VtZW50cztyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKGU9YS5sZW5ndGg+MCYmdm9pZCAwIT09YVswXSYmYVswXSwhdGhpcy5kZXN0cm95ZWQpe3QubmV4dD0zO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOnJldHVybiB0Lm5leHQ9NSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiQ2xlYW51cCIsbnVsbCk7Y2FzZSA1OnI9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpLHQucHJldj02LHIucygpO2Nhc2UgODppZigobj1yLm4oKSkuZG9uZSl7dC5uZXh0PTE1O2JyZWFrfWlmKChpPW4udmFsdWUpLmNsZWFudXAoKSl7dC5uZXh0PTEzO2JyZWFrfXRocm93IG5ldyBFcnJvcigic3RhcnRDbGVhbnVwOiBQYWdlICIuY29uY2F0KGkucGFnZU51bWJlciwiIGlzIGN1cnJlbnRseSByZW5kZXJpbmcuIikpO2Nhc2UgMTM6dC5uZXh0PTg7YnJlYWs7Y2FzZSAxNTp0Lm5leHQ9MjA7YnJlYWs7Y2FzZSAxNzp0LnByZXY9MTcsdC50MD10LmNhdGNoKDYpLHIuZSh0LnQwKTtjYXNlIDIwOnJldHVybiB0LnByZXY9MjAsci5mKCksdC5maW5pc2goMjApO2Nhc2UgMjM6dGhpcy5jb21tb25PYmpzLmNsZWFyKCksZXx8dGhpcy5mb250TG9hZGVyLmNsZWFyKCksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSxudWxsKSx0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlPW51bGwsdGhpcy5faGFzSlNBY3Rpb25zUHJvbWlzZT1udWxsO2Nhc2UgMjg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s2LDE3LDIwLDIzXV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJsb2FkaW5nUGFyYW1zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJhbXM7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJsb2FkaW5nUGFyYW1zIix7ZGlzYWJsZUF1dG9GZXRjaDp0LmRpc2FibGVBdXRvRmV0Y2gsZW5hYmxlWGZhOnQuZW5hYmxlWGZhfSl9fV0pLHR9KCksX29ianM9bmV3IFdlYWtNYXAsX2Vuc3VyZU9iaj1uZXcgV2Vha1NldCxQREZPYmplY3RzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLF9lbnN1cmVPYmopLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29ianMse3dyaXRhYmxlOiEwLHZhbHVlOk9iamVjdC5jcmVhdGUobnVsbCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYoZSl7dmFyIHI9X2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLF9lbnN1cmVPYmosX2Vuc3VyZU9iajIpLmNhbGwodGhpcyx0KTtyZXR1cm4gci5jYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZShyLmRhdGEpfSkpLG51bGx9dmFyIG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO2lmKG51bGw9PW58fCFuLmNhcGFiaWxpdHkuc2V0dGxlZCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVlc3Rpbmcgb2JqZWN0IHRoYXQgaXNuJ3QgcmVzb2x2ZWQgeWV0ICIuY29uY2F0KHQsIi4iKSk7cmV0dXJuIG4uZGF0YX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO3JldHVybihudWxsPT1lP3ZvaWQgMDplLmNhcGFiaWxpdHkuc2V0dGxlZCl8fCExfX0se2tleToicmVzb2x2ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1fY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsX2Vuc3VyZU9iaixfZW5zdXJlT2JqMikuY2FsbCh0aGlzLHQpO3IuZGF0YT1lLHIuY2FwYWJpbGl0eS5yZXNvbHZlKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXtfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcyxfb2JqcyxPYmplY3QuY3JlYXRlKG51bGwpKX19XSksdH0oKTtmdW5jdGlvbiBfZW5zdXJlT2JqMih0KXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdfHwoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdPXtjYXBhYmlsaXR5OigwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGRhdGE6bnVsbH0pfXZhciBfaW50ZXJuYWxSZW5kZXJUYXNrPW5ldyBXZWFrTWFwLFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2ludGVybmFsUmVuZGVyVGFzayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2ssZSksdGhpcy5vbkNvbnRpbnVlPW51bGx9cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJwcm9taXNlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2ludGVybmFsUmVuZGVyVGFzaykuY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLmNhbmNlbChudWxsLHQpfX0se2tleToic2VwYXJhdGVBbm5vdHMiLGdldDpmdW5jdGlvbigpe3ZhciB0PV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cztpZighdClyZXR1cm4hMTt2YXIgZT1fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfaW50ZXJuYWxSZW5kZXJUYXNrKS5hbm5vdGF0aW9uQ2FudmFzTWFwO3JldHVybiB0LmZvcm18fHQuY2FudmFzJiYobnVsbD09ZT92b2lkIDA6ZS5zaXplKT4wfX1dKSx0fSgpO2V4cG9ydHMuUmVuZGVyVGFzaz1SZW5kZXJUYXNrO3ZhciBJbnRlcm5hbFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUuY2FsbGJhY2ssbj1lLnBhcmFtcyxpPWUub2JqcyxhPWUuY29tbW9uT2JqcyxvPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxzPWUub3BlcmF0b3JMaXN0LGw9ZS5wYWdlSW5kZXgsdT1lLmNhbnZhc0ZhY3RvcnksYz1lLnVzZVJlcXVlc3RBbmltYXRpb25GcmFtZSxoPXZvaWQgMCE9PWMmJmMsZj1lLnBkZkJ1ZyxkPXZvaWQgMCE9PWYmJmYscD1lLnBhZ2VDb2xvcnMsdj12b2lkIDA9PT1wP251bGw6cDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmNhbGxiYWNrPXIsdGhpcy5wYXJhbXM9bix0aGlzLm9ianM9aSx0aGlzLmNvbW1vbk9ianM9YSx0aGlzLmFubm90YXRpb25DYW52YXNNYXA9byx0aGlzLm9wZXJhdG9yTGlzdElkeD1udWxsLHRoaXMub3BlcmF0b3JMaXN0PXMsdGhpcy5fcGFnZUluZGV4PWwsdGhpcy5jYW52YXNGYWN0b3J5PXUsdGhpcy5fcGRmQnVnPWQsdGhpcy5wYWdlQ29sb3JzPXYsdGhpcy5ydW5uaW5nPSExLHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrPW51bGwsdGhpcy5ncmFwaGljc1JlYWR5PSExLHRoaXMuX3VzZVJlcXVlc3RBbmltYXRpb25GcmFtZT0hMD09PWgmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LHRoaXMuY2FuY2VsbGVkPSExLHRoaXMuY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnRhc2s9bmV3IFJlbmRlclRhc2sodGhpcyksdGhpcy5fY2FuY2VsQm91bmQ9dGhpcy5jYW5jZWwuYmluZCh0aGlzKSx0aGlzLl9jb250aW51ZUJvdW5kPXRoaXMuX2NvbnRpbnVlLmJpbmQodGhpcyksdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQ9dGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyksdGhpcy5fbmV4dEJvdW5kPXRoaXMuX25leHQuYmluZCh0aGlzKSx0aGlzLl9jYW52YXM9bi5jYW52YXNDb250ZXh0LmNhbnZhc312YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImNvbXBsZXRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FwYWJpbGl0eS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKX19LHtrZXk6ImluaXRpYWxpemVHcmFwaGljcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHIsbixpPWUudHJhbnNwYXJlbmN5LGE9dm9pZCAwIT09aSYmaSxvPWUub3B0aW9uYWxDb250ZW50Q29uZmlnO2lmKCF0aGlzLmNhbmNlbGxlZCl7aWYodGhpcy5fY2FudmFzKXtpZihfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmhhcyh0aGlzLl9jYW52YXMpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuIFVzZSBkaWZmZXJlbnQgY2FudmFzIG9yIGVuc3VyZSBwcmV2aW91cyBvcGVyYXRpb25zIHdlcmUgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC4iKTtfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmFkZCh0aGlzLl9jYW52YXMpfXRoaXMuX3BkZkJ1ZyYmbnVsbCE9PShyPWdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXIpJiZ2b2lkIDAhPT1yJiZyLmVuYWJsZWQmJih0aGlzLnN0ZXBwZXI9Z2xvYmFsVGhpcy5TdGVwcGVyTWFuYWdlci5jcmVhdGUodGhpcy5fcGFnZUluZGV4KSx0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCksdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50PXRoaXMuc3RlcHBlci5nZXROZXh0QnJlYWtQb2ludCgpKTt2YXIgcz10aGlzLnBhcmFtcyxsPXMuY2FudmFzQ29udGV4dCx1PXMudmlld3BvcnQsYz1zLnRyYW5zZm9ybSxoPXMuYmFja2dyb3VuZDt0aGlzLmdmeD1uZXcgX2NhbnZhcy5DYW52YXNHcmFwaGljcyhsLHRoaXMuY29tbW9uT2Jqcyx0aGlzLm9ianMsdGhpcy5jYW52YXNGYWN0b3J5LHtvcHRpb25hbENvbnRlbnRDb25maWc6b30sdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwLHRoaXMucGFnZUNvbG9ycyksdGhpcy5nZnguYmVnaW5EcmF3aW5nKHt0cmFuc2Zvcm06Yyx2aWV3cG9ydDp1LHRyYW5zcGFyZW5jeTphLGJhY2tncm91bmQ6aH0pLHRoaXMub3BlcmF0b3JMaXN0SWR4PTAsdGhpcy5ncmFwaGljc1JlYWR5PSEwLG51bGw9PT0obj10aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayl8fHZvaWQgMD09PW58fG4uY2FsbCh0aGlzKX19fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3RoaXMucnVubmluZz0hMSx0aGlzLmNhbmNlbGxlZD0hMCxudWxsPT09KGU9dGhpcy5nZngpfHx2b2lkIDA9PT1lfHxlLmVuZERyYXdpbmcoKSx0aGlzLl9jYW52YXMmJl9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodCx0LF9jYW52YXNJblVzZSkuZGVsZXRlKHRoaXMuX2NhbnZhcyksdGhpcy5jYWxsYmFjayhyfHxuZXcgX2Rpc3BsYXlfdXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uKCJSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlICIuY29uY2F0KHRoaXMuX3BhZ2VJbmRleCsxKSwiY2FudmFzIixuKSl9fSx7a2V5OiJvcGVyYXRvckxpc3RDaGFuZ2VkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3RoaXMuZ3JhcGhpY3NSZWFkeT8obnVsbD09PSh0PXRoaXMuc3RlcHBlcil8fHZvaWQgMD09PXR8fHQudXBkYXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0KSx0aGlzLnJ1bm5pbmd8fHRoaXMuX2NvbnRpbnVlKCkpOnRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrfHwodGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2s9dGhpcy5fY29udGludWVCb3VuZCl9fSx7a2V5OiJfY29udGludWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ydW5uaW5nPSEwLHRoaXMuY2FuY2VsbGVkfHwodGhpcy50YXNrLm9uQ29udGludWU/dGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpOnRoaXMuX3NjaGVkdWxlTmV4dCgpKX19LHtrZXk6Il9zY2hlZHVsZU5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXt0Ll9uZXh0Qm91bmQoKS5jYXRjaCh0Ll9jYW5jZWxCb3VuZCl9KSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbih0aGlzLl9uZXh0Qm91bmQpLmNhdGNoKHRoaXMuX2NhbmNlbEJvdW5kKX19LHtrZXk6Il9uZXh0Iix2YWx1ZTooZT1fYXN5bmNUb0dlbmVyYXRvcihfcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuY2FuY2VsbGVkKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjp0aGlzLm9wZXJhdG9yTGlzdElkeD10aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LHRoaXMub3BlcmF0b3JMaXN0SWR4LHRoaXMuX2NvbnRpbnVlQm91bmQsdGhpcy5zdGVwcGVyKSx0aGlzLm9wZXJhdG9yTGlzdElkeD09PXRoaXMub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5sZW5ndGgmJih0aGlzLnJ1bm5pbmc9ITEsdGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rJiYodGhpcy5nZnguZW5kRHJhd2luZygpLHRoaXMuX2NhbnZhcyYmX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LHQsX2NhbnZhc0luVXNlKS5kZWxldGUodGhpcy5fY2FudmFzKSx0aGlzLmNhbGxiYWNrKCkpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCksX2NhbnZhc0luVXNlPXt3cml0YWJsZTohMCx2YWx1ZTpuZXcgV2Vha1NldH0sdmVyc2lvbj0iMy4yLjAiO2V4cG9ydHMudmVyc2lvbj12ZXJzaW9uO3ZhciBidWlsZD0iIjtleHBvcnRzLmJ1aWxkPWJ1aWxkfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QcmludEFubm90YXRpb25TdG9yYWdlPWUuQW5ub3RhdGlvblN0b3JhZ2U9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNSksbz1yKDEzOSk7ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0scyh0LGUpfWZ1bmN0aW9uIGwodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LHUodCl9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUscil7Zyh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gZyh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx3KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwodCk6ZS52YWx1ZX0odCx3KHQsZSwiZ2V0IikpfWZ1bmN0aW9uIHcodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIityKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQodCl9dmFyIEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrU2V0LHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIGU7cCh0aGlzLHQpLGcodGhpcyxlPVMpLGUuYWRkKHRoaXMpLG0odGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLG0odGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdGhpcy5vblNldE1vZGlmaWVkPW51bGwsdGhpcy5vblJlc2V0TW9kaWZpZWQ9bnVsbCx0aGlzLm9uQW5ub3RhdGlvbkVkaXRvcj1udWxsfXJldHVybiB5KHQsW3trZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV8odGhpcyxrKS5nZXQodCk7cmV0dXJuIHZvaWQgMD09PXI/ZTpPYmplY3QuYXNzaWduKGUscil9fSx7a2V5OiJnZXRSYXdWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIF8odGhpcyxrKS5nZXQodCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKF8odGhpcyxrKS5kZWxldGUodCksMD09PV8odGhpcyxrKS5zaXplJiZ0aGlzLnJlc2V0TW9kaWZpZWQoKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3Ipe3ZhciBlLHI9aChfKHRoaXMsaykudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOylpZihlLnZhbHVlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yKXJldHVybn1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLm9uQW5ub3RhdGlvbkVkaXRvcihudWxsKX19fSx7a2V5OiJzZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1fKHRoaXMsaykuZ2V0KHQpLG49ITE7aWYodm9pZCAwIT09cilmb3IodmFyIGk9MCxvPU9iamVjdC5lbnRyaWVzKGUpO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1jKG9baV0sMiksbD1zWzBdLHU9c1sxXTtyW2xdIT09dSYmKG49ITAscltsXT11KX1lbHNlIG49ITAsXyh0aGlzLGspLnNldCh0LGUpO24mJmZ1bmN0aW9uKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfSh0aGlzLFMsRSkuY2FsbCh0aGlzKSxlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3ImJnRoaXMub25Bbm5vdGF0aW9uRWRpdG9yKGUuY29uc3RydWN0b3IuX3R5cGUpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gXyh0aGlzLGspLmhhcyh0KX19LHtrZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLGspLnNpemU+MD8oMCxpLm9iamVjdEZyb21NYXApKF8odGhpcyxrKSk6bnVsbH19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMsaykuc2l6ZX19LHtrZXk6InJlc2V0TW9kaWZpZWQiLHZhbHVlOmZ1bmN0aW9uKCl7Xyh0aGlzLEEpJiYoYih0aGlzLEEsITEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uUmVzZXRNb2RpZmllZCYmdGhpcy5vblJlc2V0TW9kaWZpZWQoKSl9fSx7a2V5OiJwcmludCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUKHRoaXMpfX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtpZigwPT09Xyh0aGlzLGspLnNpemUpcmV0dXJuIG51bGw7dmFyIHQsZT1uZXcgTWFwLHI9aChfKHRoaXMsaykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIG49Yyh0LnZhbHVlLDIpLGk9blswXSxvPW5bMV0scz1vIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yP28uc2VyaWFsaXplKCk6bztzJiZlLnNldChpLHMpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gZX19XSxbe2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIiI7dmFyIGUscj1uZXcgby5NdXJtdXJIYXNoM182NCxuPWgodCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1jKGUudmFsdWUsMiksYT1pWzBdLHM9aVsxXTtyLnVwZGF0ZSgiIi5jb25jYXQoYSwiOiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShzKSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gci5oZXhkaWdlc3QoKX19XSksdH0oKTtmdW5jdGlvbiBFKCl7Xyh0aGlzLEEpfHwoYih0aGlzLEEsITApLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uU2V0TW9kaWZpZWQmJnRoaXMub25TZXRNb2RpZmllZCgpKX1lLkFubm90YXRpb25TdG9yYWdlPXg7dmFyIFA9bmV3IFdlYWtNYXAsVD1mdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmcyh0LGUpfShvLHQpO3ZhciBlLHIsYT0oZT1vLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIHQsaT11KGUpO2lmKHIpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7dD1SZWZsZWN0LmNvbnN0cnVjdChpLGFyZ3VtZW50cyxhKX1lbHNlIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09bihlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gbCh0KX0odGhpcyx0KX0pO2Z1bmN0aW9uIG8odCl7dmFyIGU7cmV0dXJuIHAodGhpcyxvKSxtKGwoZT1hLmNhbGwodGhpcykpLFAse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxiKGwoZSksUCxzdHJ1Y3R1cmVkQ2xvbmUodC5zZXJpYWxpemFibGUpKSxlfXJldHVybiB5KG8sW3trZXk6InByaW50IixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIFByaW50QW5ub3RhdGlvblN0b3JhZ2UucHJpbnQiKX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcyxQKX19XSksb30oeCk7ZS5QcmludEFubm90YXRpb25TdG9yYWdlPVR9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkFubm90YXRpb25FZGl0b3I9dm9pZCAwO3ZhciBpPXIoMTM2KSxhPXIoMSk7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGMobi5rZXkpLG4pfX1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4oZT1jKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIGModCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGgodCxlLHIpeyFmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LHAodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHAodCxlLCJnZXQiKSl9ZnVuY3Rpb24gcCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgdj1uZXcgV2Vha01hcCx5PW5ldyBXZWFrTWFwLG09bmV3IFdlYWtNYXAsZz1uZXcgV2Vha01hcCxiPW5ldyBXZWFrTWFwLF89bmV3IFdlYWtNYXAsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksaCh0aGlzLHYse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNpbi5iaW5kKHRoaXMpfSksaCh0aGlzLHkse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNvdXQuYmluZCh0aGlzKX0pLGgodGhpcyxtLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxnLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxiLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHUodGhpcywiX3VpTWFuYWdlciIsbnVsbCksaCh0aGlzLF8se3dyaXRhYmxlOiEwLHZhbHVlOnQuX3pJbmRleCsrfSksdGhpcy5jb25zdHJ1Y3Rvcj09PXQmJigwLGEudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBBbm5vdGF0aW9uRWRpdG9yLiIpLHRoaXMucGFyZW50PWUucGFyZW50LHRoaXMuaWQ9ZS5pZCx0aGlzLndpZHRoPXRoaXMuaGVpZ2h0PW51bGwsdGhpcy5wYWdlSW5kZXg9ZS5wYXJlbnQucGFnZUluZGV4LHRoaXMubmFtZT1lLm5hbWUsdGhpcy5kaXY9bnVsbCx0aGlzLl91aU1hbmFnZXI9ZS51aU1hbmFnZXI7dmFyIHI9dGhpcy5wYXJlbnQudmlld3BvcnQsbj1yLnJvdGF0aW9uLGk9ci5yYXdEaW1zLHM9aS5wYWdlV2lkdGgsbD1pLnBhZ2VIZWlnaHQsYz1pLnBhZ2VYLGY9aS5wYWdlWTt0aGlzLnJvdGF0aW9uPW4sdGhpcy5wYWdlRGltZW5zaW9ucz1bcyxsXSx0aGlzLnBhZ2VUcmFuc2xhdGlvbj1bYyxmXTt2YXIgZD1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxwPWRbMF0sdz1kWzFdO3RoaXMueD1lLngvcCx0aGlzLnk9ZS55L3csdGhpcy5pc0F0dGFjaGVkVG9ET009ITF9dmFyIGUscixuO3JldHVybiBlPXQsbj1be2tleToiX2RlZmF1bHRMaW5lQ29sb3IiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfZGVmYXVsdExpbmVDb2xvciIsdGhpcy5fY29sb3JNYW5hZ2VyLmdldEhleENvZGUoIkNhbnZhc1RleHQiKSl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyB0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7cGFyZW50OmUsaWQ6ZS5nZXROZXh0SWQoKSx1aU1hbmFnZXI6cn0pO24ucm90YXRpb249dC5yb3RhdGlvbjt2YXIgaT1vKG4ucGFnZURpbWVuc2lvbnMsMiksYT1pWzBdLHM9aVsxXSxsPW8obi5nZXRSZWN0SW5DdXJyZW50Q29vcmRzKHQucmVjdCxzKSw0KSx1PWxbMF0sYz1sWzFdLGg9bFsyXSxmPWxbM107cmV0dXJuIG4ueD11L2Esbi55PWMvcyxuLndpZHRoPWgvYSxuLmhlaWdodD1mL3Msbn19XSwocj1be2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3VpTWFuYWdlci5hZGRDb21tYW5kcyh0KX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci5jdXJyZW50TGF5ZXJ9fSx7a2V5OiJzZXRJbkJhY2tncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PTB9fSx7a2V5OiJzZXRJbkZvcmVncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PWQodGhpcyxfKX19LHtrZXk6InNldFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24odCl7bnVsbCE9PXQmJih0aGlzLnBhZ2VJbmRleD10LnBhZ2VJbmRleCx0aGlzLnBhZ2VEaW1lbnNpb25zPXQucGFnZURpbWVuc2lvbnMpLHRoaXMucGFyZW50PXR9fSx7a2V5OiJmb2N1c2luIix2YWx1ZTpmdW5jdGlvbih0KXtkKHRoaXMsbSk/Zih0aGlzLG0sITEpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpfX0se2tleToiZm9jdXNvdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXt2YXIgcj10LnJlbGF0ZWRUYXJnZXQ7bnVsbCE9ciYmci5jbG9zZXN0KCIjIi5jb25jYXQodGhpcy5pZCkpfHwodC5wcmV2ZW50RGVmYXVsdCgpLG51bGwhPT0oZT10aGlzLnBhcmVudCkmJnZvaWQgMCE9PWUmJmUuaXNNdWx0aXBsZVNlbGVjdGlvbnx8dGhpcy5jb21taXRPclJlbW92ZSgpKX19fSx7a2V5OiJjb21taXRPclJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkoKT90aGlzLnJlbW92ZSgpOnRoaXMuY29tbWl0KCl9fSx7a2V5OiJjb21taXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9fSx7a2V5OiJhZGRUb0Fubm90YXRpb25TdG9yYWdlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3VpTWFuYWdlci5hZGRUb0Fubm90YXRpb25TdG9yYWdlKHRoaXMpfX0se2tleToiZHJhZ3N0YXJ0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudC5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zdGFydFg9dC5jbGllbnRYLWUueCx0aGlzLnN0YXJ0WT10LmNsaWVudFktZS55LHQuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHRoaXMuaWQpLHQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUifX0se2tleToic2V0QXQiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8odGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxzPWlbMV0sbD1vKHRoaXMuc2NyZWVuVG9QYWdlVHJhbnNsYXRpb24ocixuKSwyKTtyPWxbMF0sbj1sWzFdLHRoaXMueD0odCtyKS9hLHRoaXMueT0oZStuKS9zLHRoaXMuZGl2LnN0eWxlLmxlZnQ9IiIuY29uY2F0KDEwMCp0aGlzLngsIiUiKSx0aGlzLmRpdi5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCp0aGlzLnksIiUiKX19LHtrZXk6InRyYW5zbGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdLGE9byh0aGlzLnNjcmVlblRvUGFnZVRyYW5zbGF0aW9uKHQsZSksMik7dD1hWzBdLGU9YVsxXSx0aGlzLngrPXQvbix0aGlzLnkrPWUvaSx0aGlzLmRpdi5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqdGhpcy54LCIlIiksdGhpcy5kaXYuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqdGhpcy55LCIlIil9fSx7a2V5OiJzY3JlZW5Ub1BhZ2VUcmFuc2xhdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5wYXJlbnRSb3RhdGlvbil7Y2FzZSA5MDpyZXR1cm5bZSwtdF07Y2FzZSAxODA6cmV0dXJuWy10LC1lXTtjYXNlIDI3MDpyZXR1cm5bLWUsdF07ZGVmYXVsdDpyZXR1cm5bdCxlXX19fSx7a2V5OiJwYXJlbnRTY2FsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGV9fSx7a2V5OiJwYXJlbnRSb3RhdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yb3RhdGlvbn19LHtrZXk6InBhcmVudERpbWVuc2lvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGUsZT1vKHRoaXMucGFnZURpbWVuc2lvbnMsMik7cmV0dXJuW2VbMF0qdCxlWzFdKnRdfX0se2tleToic2V0RGltcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdO3RoaXMuZGl2LnN0eWxlLndpZHRoPSIiLmNvbmNhdCgxMDAqdC9uLCIlIiksdGhpcy5kaXYuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZS9pLCIlIil9fSx7a2V5OiJmaXhEaW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGl2LnN0eWxlLGU9dC5oZWlnaHQscj10LndpZHRoLG49ci5lbmRzV2l0aCgiJSIpLGk9ZS5lbmRzV2l0aCgiJSIpO2lmKCFufHwhaSl7dmFyIGE9byh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscz1hWzBdLGw9YVsxXTtufHwodC53aWR0aD0iIi5jb25jYXQoMTAwKnBhcnNlRmxvYXQocikvcywiJSIpKSxpfHwodC5oZWlnaHQ9IiIuY29uY2F0KDEwMCpwYXJzZUZsb2F0KGUpL2wsIiUiKSl9fX0se2tleToiZ2V0SW5pdGlhbFRyYW5zbGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblswLDBdfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiZGF0YS1lZGl0b3Itcm90YXRpb24iLCgzNjAtdGhpcy5yb3RhdGlvbiklMzYwKSx0aGlzLmRpdi5jbGFzc05hbWU9dGhpcy5uYW1lLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuaWQpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLDApLHRoaXMuc2V0SW5Gb3JlZ3JvdW5kKCksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKTt2YXIgdD1vKHRoaXMuZ2V0SW5pdGlhbFRyYW5zbGF0aW9uKCksMiksZT10WzBdLHI9dFsxXTtyZXR1cm4gdGhpcy50cmFuc2xhdGUoZSxyKSwoMCxpLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnc3RhcnQiLCJwb2ludGVyZG93biJdKSx0aGlzLmRpdn19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjOzAhPT10LmJ1dHRvbnx8dC5jdHJsS2V5JiZlP3QucHJldmVudERlZmF1bHQoKToodC5jdHJsS2V5JiYhZXx8dC5zaGlmdEtleXx8dC5tZXRhS2V5JiZlP3RoaXMucGFyZW50LnRvZ2dsZVNlbGVjdGVkKHRoaXMpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLGYodGhpcyxtLCEwKSl9fSx7a2V5OiJnZXRSZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFyZW50U2NhbGUsbj1vKHRoaXMucGFnZURpbWVuc2lvbnMsMiksaT1uWzBdLGE9blsxXSxzPW8odGhpcy5wYWdlVHJhbnNsYXRpb24sMiksbD1zWzBdLHU9c1sxXSxjPXQvcixoPWUvcixmPXRoaXMueCppLGQ9dGhpcy55KmEscD10aGlzLndpZHRoKmksdj10aGlzLmhlaWdodCphO3N3aXRjaCh0aGlzLnJvdGF0aW9uKXtjYXNlIDA6cmV0dXJuW2YrYytsLGEtZC1oLXYrdSxmK2MrcCtsLGEtZC1oK3VdO2Nhc2UgOTA6cmV0dXJuW2YraCtsLGEtZCtjK3UsZitoK3YrbCxhLWQrYytwK3VdO2Nhc2UgMTgwOnJldHVybltmLWMtcCtsLGEtZCtoK3UsZi1jK2wsYS1kK2grdit1XTtjYXNlIDI3MDpyZXR1cm5bZi1oLXYrbCxhLWQtYy1wK3UsZi1oK2wsYS1kLWMrdV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19fSx7a2V5OiJnZXRSZWN0SW5DdXJyZW50Q29vcmRzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW8odCw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxzPXJbM10sbD1hLW4sdT1zLWk7c3dpdGNoKHRoaXMucm90YXRpb24pe2Nhc2UgMDpyZXR1cm5bbixlLXMsbCx1XTtjYXNlIDkwOnJldHVybltuLGUtaSx1LGxdO2Nhc2UgMTgwOnJldHVyblthLGUtaSxsLHVdO2Nhc2UgMjcwOnJldHVyblthLGUtcyx1LGxdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdGF0aW9uIil9fX0se2tleToib25jZUFkZGVkIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtmKHRoaXMsYiwhMCl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zih0aGlzLGIsITEpfX0se2tleToiaXNJbkVkaXRNb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkKHRoaXMsYil9fSx7a2V5OiJzaG91bGRHZXRLZXlib2FyZEV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6Im5lZWRzVG9CZVJlYnVpbHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2JiYhdGhpcy5pc0F0dGFjaGVkVG9ET019fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O251bGw9PT0odD10aGlzLmRpdil8fHZvaWQgMD09PXR8fHQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxhLnVucmVhY2hhYmxlKSgiQW4gZWRpdG9yIG11c3QgYmUgc2VyaWFsaXphYmxlIil9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKSx0aGlzLmlzRW1wdHkoKXx8dGhpcy5jb21taXQoKSx0aGlzLnBhcmVudC5yZW1vdmUodGhpcyl9fSx7a2V5OiJzZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe319LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImVuYWJsZUVkaXRpbmciLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImlzRWRpdGluZyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcyxnKX0sc2V0OmZ1bmN0aW9uKHQpe2YodGhpcyxnLHQpLHQ/KHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLHRoaXMucGFyZW50LnNldEFjdGl2ZUVkaXRvcih0aGlzKSk6dGhpcy5wYXJlbnQuc2V0QWN0aXZlRWRpdG9yKG51bGwpfX1dKSYmbChlLnByb3RvdHlwZSxyKSxuJiZsKGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLkFubm90YXRpb25FZGl0b3I9dyx1KHcsIl9jb2xvck1hbmFnZXIiLG5ldyBpLkNvbG9yTWFuYWdlciksdSh3LCJfekluZGV4IiwxKX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuS2V5Ym9hcmRNYW5hZ2VyPWUuQ29tbWFuZE1hbmFnZXI9ZS5Db2xvck1hbmFnZXI9ZS5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyPXZvaWQgMCxlLmJpbmRFdmVudHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9XyhyKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7ZS5hZGRFdmVudExpc3RlbmVyKGEsdFthXS5iaW5kKHQpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fSxlLm9wYWNpdHlUb0hleD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLm1pbigyNTUsTWF0aC5tYXgoMSwyNTUqdCkpKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEEodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHx3KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybihlPXAoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx3KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7eSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGModCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHAobi5rZXkpLG4pfX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBwKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiB2KHQsZSxyKXt5KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB5KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LGIodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gYih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj13KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiB3KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBBKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gQSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciBrPW5ldyBXZWFrTWFwLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpLHYodGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTowfSl9cmV0dXJuIGQodCxbe2tleToiZ2V0SWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4iIi5jb25jYXQoaS5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4KS5jb25jYXQoKG0odGhpcyxrLCh0PWcodGhpcyxrKSxlPXQrKyx0KSksZSkpfX1dKSx0fSgpLHg9bmV3IFdlYWtNYXAsRT1uZXcgV2Vha01hcCxQPW5ldyBXZWFrTWFwLFQ9bmV3IFdlYWtNYXAsQz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTI4O2godGhpcyx0KSx2KHRoaXMseCx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx2KHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx2KHRoaXMsUCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdih0aGlzLFQse3dyaXRhYmxlOiEwLHZhbHVlOi0xfSksbSh0aGlzLFAsZSl9cmV0dXJuIGQodCxbe2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmNtZCxyPXQudW5kbyxuPXQubXVzdEV4ZWMsaT10LnR5cGUsYT12b2lkIDA9PT1pP05hTjppLG89dC5vdmVyd3JpdGVJZlNhbWVUeXBlLHM9dm9pZCAwIT09byYmbyxsPXQua2VlcFVuZG8sdT12b2lkIDAhPT1sJiZsO2lmKG4mJmUoKSwhZyh0aGlzLEUpKXt2YXIgYz17Y21kOmUsdW5kbzpyLHR5cGU6YX07aWYoLTE9PT1nKHRoaXMsVCkpcmV0dXJuIGcodGhpcyx4KS5sZW5ndGg+MCYmKGcodGhpcyx4KS5sZW5ndGg9MCksbSh0aGlzLFQsMCksdm9pZCBnKHRoaXMseCkucHVzaChjKTtpZihzJiZnKHRoaXMseClbZyh0aGlzLFQpXS50eXBlPT09YSlyZXR1cm4gdSYmKGMudW5kbz1nKHRoaXMseClbZyh0aGlzLFQpXS51bmRvKSx2b2lkKGcodGhpcyx4KVtnKHRoaXMsVCldPWMpO3ZhciBoPWcodGhpcyxUKSsxO2g9PT1nKHRoaXMsUCk/Zyh0aGlzLHgpLnNwbGljZSgwLDEpOihtKHRoaXMsVCxoKSxoPGcodGhpcyx4KS5sZW5ndGgmJmcodGhpcyx4KS5zcGxpY2UoaCkpLGcodGhpcyx4KS5wdXNoKGMpfX19LHtrZXk6InVuZG8iLHZhbHVlOmZ1bmN0aW9uKCl7LTEhPT1nKHRoaXMsVCkmJihtKHRoaXMsRSwhMCksZyh0aGlzLHgpW2codGhpcyxUKV0udW5kbygpLG0odGhpcyxFLCExKSxtKHRoaXMsVCxnKHRoaXMsVCktMSkpfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xJiYobSh0aGlzLFQsZyh0aGlzLFQpKzEpLG0odGhpcyxFLCEwKSxnKHRoaXMseClbZyh0aGlzLFQpXS5jbWQoKSxtKHRoaXMsRSwhMSkpfX0se2tleToiaGFzU29tZXRoaW5nVG9VbmRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybi0xIT09Zyh0aGlzLFQpfX0se2tleToiaGFzU29tZXRoaW5nVG9SZWRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXttKHRoaXMseCxudWxsKX19XSksdH0oKTtlLkNvbW1hbmRNYW5hZ2VyPUM7dmFyIE89bmV3IFdlYWtTZXQsRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHUodGhpcyxPKSx0aGlzLmJ1ZmZlcj1bXSx0aGlzLmNhbGxiYWNrcz1uZXcgTWFwLHRoaXMuYWxsS2V5cz1uZXcgU2V0O3ZhciByLG49aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYyxhPV8oZSk7dHJ5e2ZvcihhLnMoKTshKHI9YS5uKCkpLmRvbmU7KXt2YXIgbyxzPWwoci52YWx1ZSwyKSxjPXNbMF0sZj1zWzFdLGQ9XyhjKTt0cnl7Zm9yKGQucygpOyEobz1kLm4oKSkuZG9uZTspe3ZhciBwPW8udmFsdWUsdj1wLnN0YXJ0c1dpdGgoIm1hYysiKTtuJiZ2Pyh0aGlzLmNhbGxiYWNrcy5zZXQocC5zbGljZSg0KSxmKSx0aGlzLmFsbEtleXMuYWRkKHAuc3BsaXQoIisiKS5hdCgtMSkpKTpufHx2fHwodGhpcy5jYWxsYmFja3Muc2V0KHAsZiksdGhpcy5hbGxLZXlzLmFkZChwLnNwbGl0KCIrIikuYXQoLTEpKSl9fWNhdGNoKHQpe2QuZSh0KX1maW5hbGx5e2QuZigpfX19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9fXJldHVybiBkKHQsW3trZXk6ImV4ZWMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5hbGxLZXlzLmhhcyhlLmtleSkpe3ZhciByPXRoaXMuY2FsbGJhY2tzLmdldChjKHRoaXMsTyxNKS5jYWxsKHRoaXMsZSkpO3ImJihyLmJpbmQodCkoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9fX1dKSx0fSgpO2Z1bmN0aW9uIE0odCl7dC5hbHRLZXkmJnRoaXMuYnVmZmVyLnB1c2goImFsdCIpLHQuY3RybEtleSYmdGhpcy5idWZmZXIucHVzaCgiY3RybCIpLHQubWV0YUtleSYmdGhpcy5idWZmZXIucHVzaCgibWV0YSIpLHQuc2hpZnRLZXkmJnRoaXMuYnVmZmVyLnB1c2goInNoaWZ0IiksdGhpcy5idWZmZXIucHVzaCh0LmtleSk7dmFyIGU9dGhpcy5idWZmZXIuam9pbigiKyIpO3JldHVybiB0aGlzLmJ1ZmZlci5sZW5ndGg9MCxlfWUuS2V5Ym9hcmRNYW5hZ2VyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpfXJldHVybiBkKHQsW3trZXk6Il9jb2xvcnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PW5ldyBNYXAoW1siQ2FudmFzVGV4dCIsbnVsbF0sWyJDYW52YXMiLG51bGxdXSk7cmV0dXJuKDAsYS5nZXRDb2xvclZhbHVlcykodCksKDAsaS5zaGFkb3cpKHRoaXMsIl9jb2xvcnMiLHQpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHI9KDAsYS5nZXRSR0IpKGUpO2lmKCF3aW5kb3cubWF0Y2hNZWRpYSgiKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSkiKS5tYXRjaGVzKXJldHVybiByO3ZhciBuLGk9Xyh0aGlzLl9jb2xvcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bChuLnZhbHVlLDIpLHM9b1swXTtpZihvWzFdLmV2ZXJ5KChmdW5jdGlvbih0LGUpe3JldHVybiB0PT09cltlXX0pKSlyZXR1cm4gdC5fY29sb3JzTWFwcGluZy5nZXQocyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfXJldHVybiByfX0se2tleToiZ2V0SGV4Q29kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29sb3JzLmdldCh0KTtyZXR1cm4gZT9pLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxvKGUpKTp0fX1dKSx0fSgpO2UuQ29sb3JNYW5hZ2VyPVIscyhSLCJfY29sb3JzTWFwcGluZyIsbmV3IE1hcChbWyJDYW52YXNUZXh0IixbMCwwLDBdXSxbIkNhbnZhcyIsWzI1NSwyNTUsMjU1XV1dKSk7dmFyIEk9bmV3IFdlYWtNYXAsaj1uZXcgV2Vha01hcCxMPW5ldyBXZWFrTWFwLEQ9bmV3IFdlYWtNYXAsTj1uZXcgV2Vha01hcCxVPW5ldyBXZWFrTWFwLFc9bmV3IFdlYWtNYXAsRz1uZXcgV2Vha01hcCxCPW5ldyBXZWFrTWFwLHE9bmV3IFdlYWtNYXAsSD1uZXcgV2Vha01hcCx6PW5ldyBXZWFrTWFwLFY9bmV3IFdlYWtNYXAsWD1uZXcgV2Vha01hcCxZPW5ldyBXZWFrTWFwLEs9bmV3IFdlYWtNYXAsSj1uZXcgV2Vha01hcCxRPW5ldyBXZWFrTWFwLCQ9bmV3IFdlYWtNYXAsWj1uZXcgV2Vha01hcCx0dD1uZXcgV2Vha01hcCxldD1uZXcgV2Vha01hcCxydD1uZXcgV2Vha01hcCxudD1uZXcgV2Vha1NldCxpdD1uZXcgV2Vha1NldCxhdD1uZXcgV2Vha1NldCxvdD1uZXcgV2Vha1NldCxzdD1uZXcgV2Vha1NldCxsdD1uZXcgV2Vha1NldCx1dD1uZXcgV2Vha1NldCxjdD1uZXcgV2Vha1NldCxodD1uZXcgV2Vha1NldCxmdD1uZXcgV2Vha1NldCxkdD1uZXcgV2Vha1NldCxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe2godGhpcyx0KSx1KHRoaXMsZHQpLHUodGhpcyxmdCksdSh0aGlzLGh0KSx1KHRoaXMsY3QpLHUodGhpcyx1dCksdSh0aGlzLGx0KSx1KHRoaXMsc3QpLHUodGhpcyxvdCksdSh0aGlzLGF0KSx1KHRoaXMsaXQpLHUodGhpcyxudCksdih0aGlzLEkse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsaix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHYodGhpcyxMLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdih0aGlzLEQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsTix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEN9KSx2KHRoaXMsVSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLHYodGhpcyxXLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdih0aGlzLEcse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBTZXR9KSx2KHRoaXMsQix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLHYodGhpcyxxLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgU30pLHYodGhpcyxILHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHYodGhpcyx6LHt3cml0YWJsZTohMCx2YWx1ZTppLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkV9KSx2KHRoaXMsVix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFNldH0pLHYodGhpcyxYLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmNvcHkuYmluZCh0aGlzKX0pLHYodGhpcyxZLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmN1dC5iaW5kKHRoaXMpfSksdih0aGlzLEsse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMucGFzdGUuYmluZCh0aGlzKX0pLHYodGhpcyxKLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmtleWRvd24uYmluZCh0aGlzKX0pLHYodGhpcyxRLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uRWRpdGluZ0FjdGlvbi5iaW5kKHRoaXMpfSksdih0aGlzLCQse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMub25QYWdlQ2hhbmdpbmcuYmluZCh0aGlzKX0pLHYodGhpcyxaLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uU2NhbGVDaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLHR0LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uUm90YXRpb25DaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLGV0LHt3cml0YWJsZTohMCx2YWx1ZTp7aXNFZGl0aW5nOiExLGlzRW1wdHk6ITAsaGFzU29tZXRoaW5nVG9VbmRvOiExLGhhc1NvbWV0aGluZ1RvUmVkbzohMSxoYXNTZWxlY3RlZEVkaXRvcjohMX19KSx2KHRoaXMscnQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxtKHRoaXMscnQsZSksbSh0aGlzLEIsciksZyh0aGlzLEIpLl9vbigiZWRpdGluZ2FjdGlvbiIsZyh0aGlzLFEpKSxnKHRoaXMsQikuX29uKCJwYWdlY2hhbmdpbmciLGcodGhpcywkKSksZyh0aGlzLEIpLl9vbigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29uKCJyb3RhdGlvbmNoYW5naW5nIixnKHRoaXMsdHQpKSxtKHRoaXMsRCxuKSx0aGlzLnZpZXdQYXJhbWV0ZXJzPXtyZWFsU2NhbGU6YS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMscm90YXRpb246MH19cmV0dXJuIGQodCxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXtjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksZyh0aGlzLEIpLl9vZmYoImVkaXRpbmdhY3Rpb24iLGcodGhpcyxRKSksZyh0aGlzLEIpLl9vZmYoInBhZ2VjaGFuZ2luZyIsZyh0aGlzLCQpKSxnKHRoaXMsQikuX29mZigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29mZigicm90YXRpb25jaGFuZ2luZyIsZyh0aGlzLHR0KSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGVzdHJveSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxMKS5jbGVhcigpLGcodGhpcyxqKS5jbGVhcigpLGcodGhpcyxHKS5jbGVhcigpLG0odGhpcyxJLG51bGwpLGcodGhpcyxWKS5jbGVhcigpLGcodGhpcyxOKS5kZXN0cm95KCl9fSx7a2V5OiJvblBhZ2VDaGFuZ2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5wYWdlTnVtYmVyO20odGhpcyxVLGUtMSl9fSx7a2V5OiJmb2N1c01haW5Db250YWluZXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zyh0aGlzLHJ0KS5mb2N1cygpfX0se2tleToiYWRkU2hvdWxkUmVzY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEcpLmFkZCh0KX19LHtrZXk6InJlbW92ZVNob3VsZFJlc2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxHKS5kZWxldGUodCl9fSx7a2V5OiJvblNjYWxlQ2hhbmdpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2NhbGU7dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucmVhbFNjYWxlPWUqYS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFM7dmFyIHIsbj1fKGcodGhpcyxHKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUub25TY2FsZUNoYW5naW5nKCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25Sb3RhdGlvbkNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnBhZ2VzUm90YXRpb247dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucm90YXRpb249ZX19LHtrZXk6ImFkZFRvQW5ub3RhdGlvblN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3QuaXNFbXB0eSgpfHwhZyh0aGlzLEQpfHxnKHRoaXMsRCkuaGFzKHQuaWQpfHxnKHRoaXMsRCkuc2V0VmFsdWUodC5pZCx0KX19LHtrZXk6ImNvcHkiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQucHJldmVudERlZmF1bHQoKSxnKHRoaXMsSSkmJmcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpLHRoaXMuaGFzU2VsZWN0aW9uKXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsVikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLmlzRW1wdHkoKXx8ci5wdXNoKGkuc2VyaWFsaXplKCkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX0wIT09ci5sZW5ndGgmJnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJhcHBsaWNhdGlvbi9wZGZqcyIsSlNPTi5zdHJpbmdpZnkocikpfX19LHtrZXk6ImN1dCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jb3B5KHQpLHRoaXMuZGVsZXRlKCl9fSx7a2V5OiJwYXN0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9dC5jbGlwYm9hcmREYXRhLmdldERhdGEoImFwcGxpY2F0aW9uL3BkZmpzIik7aWYocil7dHJ5e3I9SlNPTi5wYXJzZShyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCgwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX1pZihBcnJheS5pc0FycmF5KHIpKXt0aGlzLnVuc2VsZWN0QWxsKCk7dmFyIG49Zyh0aGlzLEwpLmdldChnKHRoaXMsVSkpO3RyeXt2YXIgYSxvPVtdLHM9XyhyKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1uLmRlc2VyaWFsaXplKGwpO2lmKCF1KXJldHVybjtvLnB1c2godSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9bzt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTtjKGUsaHQsa3QpLmNhbGwoZSxuKX1jKGUsZHQseHQpLmNhbGwoZSxvKX0sdW5kbzpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9bzt0PGUubGVuZ3RoO3QrKyllW3RdLnJlbW92ZSgpfSxtdXN0RXhlYzohMH0pfWNhdGNoKHQpeygwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX19fX19LHtrZXk6ImtleWRvd24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByO251bGwhPT0ocj10aGlzLmdldEFjdGl2ZSgpKSYmdm9pZCAwIT09ciYmci5zaG91bGRHZXRLZXlib2FyZEV2ZW50cygpfHx0Ll9rZXlib2FyZE1hbmFnZXIuZXhlYyh0aGlzLGUpfX0se2tleToib25FZGl0aW5nQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtbInVuZG8iLCJyZWRvIiwiZGVsZXRlIiwic2VsZWN0QWxsIl0uaW5jbHVkZXModC5uYW1lKSYmdGhpc1t0Lm5hbWVdKCl9fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q/KGModGhpcyxudCx2dCkuY2FsbCh0aGlzKSxjKHRoaXMsYXQsbXQpLmNhbGwodGhpcyksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2lzRWRpdGluZzpnKHRoaXMseikhPT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyksaGFzU29tZXRoaW5nVG9VbmRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1VuZG8oKSxoYXNTb21ldGhpbmdUb1JlZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvUmVkbygpLGhhc1NlbGVjdGVkRWRpdG9yOiExfSkpOihjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksYyh0aGlzLG90LGd0KS5jYWxsKHRoaXMpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtpc0VkaXRpbmc6ITF9KSl9fSx7a2V5OiJyZWdpc3RlckVkaXRvclR5cGVzIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZyh0aGlzLFcpKXttKHRoaXMsVyx0KTt2YXIgZSxyPV8oZyh0aGlzLFcpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7Yyh0aGlzLGx0LF90KS5jYWxsKHRoaXMsbi5kZWZhdWx0UHJvcGVydGllc1RvVXBkYXRlKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX19LHtrZXk6ImdldElkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMscSkuZ2V0SWQoKX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcyxMKS5nZXQoZyh0aGlzLFUpKX19LHtrZXk6ImN1cnJlbnRQYWdlSW5kZXgiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVSl9fSx7a2V5OiJhZGRMYXllciIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEwpLnNldCh0LnBhZ2VJbmRleCx0KSxnKHRoaXMsSCk/dC5lbmFibGUoKTp0LmRpc2FibGUoKX19LHtrZXk6InJlbW92ZUxheWVyIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsTCkuZGVsZXRlKHQucGFnZUluZGV4KX19LHtrZXk6InVwZGF0ZU1vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG0odGhpcyx6LHQpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUpdGhpcy5zZXRFZGl0aW5nU3RhdGUoITEpLGModGhpcyxjdCxBdCkuY2FsbCh0aGlzKTtlbHNle3RoaXMuc2V0RWRpdGluZ1N0YXRlKCEwKSxjKHRoaXMsdXQsd3QpLmNhbGwodGhpcyk7dmFyIGUscj1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUudXBkYXRlTW9kZSh0KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fX0se2tleToidXBkYXRlVG9vbGJhciIsdmFsdWU6ZnVuY3Rpb24odCl7dCE9PWcodGhpcyx6KSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJzd2l0Y2hhbm5vdGF0aW9uZWRpdG9ybW9kZSIse3NvdXJjZTp0aGlzLG1vZGU6dH0pfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKGcodGhpcyxXKSl7dmFyIHIsbj1fKGcodGhpcyxWKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUudXBkYXRlUGFyYW1zKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9dmFyIGksYT1fKGcodGhpcyxXKSk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUudXBkYXRlRGVmYXVsdFBhcmFtcyh0LGUpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fSx7a2V5OiJnZXRFZGl0b3JzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLnBhZ2VJbmRleD09PXQmJnIucHVzaChpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fSx7a2V5OiJnZXRFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsaikuZ2V0KHQpfX0se2tleToiYWRkRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsaikuc2V0KHQuaWQsdCl9fSx7a2V5OiJyZW1vdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2codGhpcyxqKS5kZWxldGUodC5pZCksdGhpcy51bnNlbGVjdCh0KSxudWxsPT09KGU9Zyh0aGlzLEQpKXx8dm9pZCAwPT09ZXx8ZS5yZW1vdmUodC5pZCl9fSx7a2V5OiJzZXRBY3RpdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxJKSE9PXQmJihtKHRoaXMsSSx0KSx0JiZjKHRoaXMsbHQsX3QpLmNhbGwodGhpcyx0LnByb3BlcnRpZXNUb1VwZGF0ZSkpfX0se2tleToidG9nZ2xlU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKGcodGhpcyxWKS5oYXModCkpcmV0dXJuIGcodGhpcyxWKS5kZWxldGUodCksdC51bnNlbGVjdCgpLHZvaWQgYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NlbGVjdGVkRWRpdG9yOnRoaXMuaGFzU2VsZWN0aW9ufSk7Zyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7biE9PXQmJm4udW5zZWxlY3QoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9Zyh0aGlzLFYpLmNsZWFyKCksZyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6ImlzU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsVikuaGFzKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3QudW5zZWxlY3QoKSxnKHRoaXMsVikuZGVsZXRlKHQpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjp0aGlzLmhhc1NlbGVjdGlvbn0pfX0se2tleToiaGFzU2VsZWN0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PWcodGhpcyxWKS5zaXplfX0se2tleToidW5kbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikudW5kbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvVW5kbygpLGhhc1NvbWV0aGluZ1RvUmVkbzohMCxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikucmVkbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86ITAsaGFzU29tZXRoaW5nVG9SZWRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1JlZG8oKSxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxOKS5hZGQodCksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NvbWV0aGluZ1RvVW5kbzohMCxoYXNTb21ldGhpbmdUb1JlZG86ITEsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyl9KX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuY29tbWl0T3JSZW1vdmUoKSx0aGlzLmhhc1NlbGVjdGlvbil7dmFyIGU9byhnKHRoaXMsVikpO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe3ZhciB0LHI9XyhlKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspdC52YWx1ZS5yZW1vdmUoKX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19LHVuZG86ZnVuY3Rpb24oKXt2YXIgcixuPV8oZSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2ModCxodCxrdCkuY2FsbCh0LGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19LG11c3RFeGVjOiEwfSl9fX0se2tleToiY29tbWl0T3JSZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PWcodGhpcyxJKSl8fHZvaWQgMD09PXR8fHQuY29tbWl0T3JSZW1vdmUoKX19LHtrZXk6InNlbGVjdEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS5jb21taXQoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1jKHRoaXMsZHQseHQpLmNhbGwodGhpcyxnKHRoaXMsaikudmFsdWVzKCkpfX0se2tleToidW5zZWxlY3RBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoZyh0aGlzLEkpKWcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpO2Vsc2UgaWYoMCE9PWcodGhpcyxWKS5zaXplKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS51bnNlbGVjdCgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxWKS5jbGVhcigpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjohMX0pfX19LHtrZXk6ImlzQWN0aXZlIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLEkpPT09dH19LHtrZXk6ImdldEFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLEkpfX0se2tleToiZ2V0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLHopfX1dKSx0fSgpO2Z1bmN0aW9uIHZ0KCl7Zyh0aGlzLHJ0KS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIHl0KCl7Zyh0aGlzLHJ0KS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIG10KCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsZyh0aGlzLFgpKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjdXQiLGcodGhpcyxZKSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicGFzdGUiLGcodGhpcyxLKSl9ZnVuY3Rpb24gZ3QoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb3B5IixnKHRoaXMsWCkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImN1dCIsZyh0aGlzLFkpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwYXN0ZSIsZyh0aGlzLEspKX1mdW5jdGlvbiBidCh0KXt2YXIgZT10aGlzO09iamVjdC5lbnRyaWVzKHQpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciByPWwodCwyKSxuPXJbMF0saT1yWzFdO3JldHVybiBnKGUsZXQpW25dIT09aX0pKSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9yc3RhdGVzY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6T2JqZWN0LmFzc2lnbihnKHRoaXMsZXQpLHQpfSl9ZnVuY3Rpb24gX3QodCl7Zyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9ycGFyYW1zY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6dH0pfWZ1bmN0aW9uIHd0KCl7aWYoIWcodGhpcyxIKSl7bSh0aGlzLEgsITApO3ZhciB0LGU9XyhnKHRoaXMsTCkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24gQXQoKXtpZih0aGlzLnVuc2VsZWN0QWxsKCksZyh0aGlzLEgpKXttKHRoaXMsSCwhMSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGlzYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24ga3QodCl7dmFyIGU9Zyh0aGlzLEwpLmdldCh0LnBhZ2VJbmRleCk7ZT9lLmFkZE9yUmVidWlsZCh0KTp0aGlzLmFkZEVkaXRvcih0KX1mdW5jdGlvbiBTdCgpe2lmKDA9PT1nKHRoaXMsaikuc2l6ZSlyZXR1cm4hMDtpZigxPT09Zyh0aGlzLGopLnNpemUpe3ZhciB0LGU9XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOylyZXR1cm4gdC52YWx1ZS5pc0VtcHR5KCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fXJldHVybiExfWZ1bmN0aW9uIHh0KHQpe2codGhpcyxWKS5jbGVhcigpO3ZhciBlLHI9Xyh0KTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7bi5pc0VtcHR5KCl8fChnKHRoaXMsVikuYWRkKG4pLG4uc2VsZWN0KCkpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1jKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX1lLkFubm90YXRpb25FZGl0b3JVSU1hbmFnZXI9cHQscyhwdCwiX2tleWJvYXJkTWFuYWdlciIsbmV3IEYoW1tbImN0cmwrYSIsIm1hYyttZXRhK2EiXSxwdC5wcm90b3R5cGUuc2VsZWN0QWxsXSxbWyJjdHJsK3oiLCJtYWMrbWV0YSt6Il0scHQucHJvdG90eXBlLnVuZG9dLFtbImN0cmwreSIsImN0cmwrc2hpZnQrWiIsIm1hYyttZXRhK3NoaWZ0K1oiXSxwdC5wcm90b3R5cGUucmVkb10sW1siQmFja3NwYWNlIiwiYWx0K0JhY2tzcGFjZSIsImN0cmwrQmFja3NwYWNlIiwic2hpZnQrQmFja3NwYWNlIiwibWFjK0JhY2tzcGFjZSIsIm1hYythbHQrQmFja3NwYWNlIiwibWFjK2N0cmwrQmFja3NwYWNlIiwiRGVsZXRlIiwiY3RybCtEZWxldGUiLCJzaGlmdCtEZWxldGUiXSxwdC5wcm90b3R5cGUuZGVsZXRlXSxbWyJFc2NhcGUiLCJtYWMrRXNjYXBlIl0scHQucHJvdG90eXBlLnVuc2VsZWN0QWxsXV0pKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlN0YXRUaW1lcj1lLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbj1lLlBpeGVsc1BlckluY2g9ZS5QYWdlVmlld3BvcnQ9ZS5QREZEYXRlU3RyaW5nPWUuRE9NU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5ET01TVkdGYWN0b3J5PWUuRE9NQ2FudmFzRmFjdG9yeT1lLkRPTUNNYXBSZWFkZXJGYWN0b3J5PWUuQW5ub3RhdGlvblByZWZpeD12b2lkIDAsZS5kZXByZWNhdGVkPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKCJEZXByZWNhdGVkIEFQSSB1c2FnZTogIit0KX0sZS5nZXRDb2xvclZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7ZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5kKGUpO3ZhciByLG49cyh0LmtleXMoKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2Uuc3R5bGUuY29sb3I9aTt2YXIgYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5jb2xvcjt0LnNldChpLEkoYSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLnJlbW92ZSgpfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUcmFuc2Zvcm0oKTtyZXR1cm5bZS5hLGUuYixlLmMsZS5kLGUuZSxlLmZdfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VHJhbnNmb3JtKCkuaW52ZXJ0U2VsZigpO3JldHVybltlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZl19LGUuZ2V0RmlsZW5hbWVGcm9tVXJsPWZ1bmN0aW9uKHQpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpe3ZhciBlPXQuc3BsaXQoL1sjP10vLDEpO3Q9KDEsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0ocj1lKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQsMDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwxIT09cy5sZW5ndGgpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHIpfHxsKHIsMSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSlbMF19dmFyIHI7cmV0dXJuIHQuc3Vic3RyaW5nKHQubGFzdEluZGV4T2YoIi8iKSsxKX0sZS5nZXRQZGZGaWxlbmFtZUZyb21Vcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJkb2N1bWVudC5wZGYiO2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gZTtpZihDKHQpKXJldHVybigwLGkud2FybikoJ2dldFBkZkZpbGVuYW1lRnJvbVVybDogaWdub3JlICJkYXRhOiItVVJMIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLicpLGU7dmFyIHI9L1teLz8jPV0rXC5wZGZcYig/IS4qXC5wZGZcYikvaSxuPS9eKD86KD86W146XSs6KT9cL1wvW14vXSspPyhbXj8jXSopKFw/W14jXSopPygjLiopPyQvLmV4ZWModCksYT1yLmV4ZWMoblsxXSl8fHIuZXhlYyhuWzJdKXx8ci5leGVjKG5bM10pO2lmKGEmJihhPWFbMF0pLmluY2x1ZGVzKCIlIikpdHJ5e2E9ci5leGVjKGRlY29kZVVSSUNvbXBvbmVudChhKSlbMF19Y2F0Y2godCl7fXJldHVybiBhfHxlfSxlLmdldFJHQj1JLGUuZ2V0WGZhUGFnZVZpZXdwb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zY2FsZSxuPXZvaWQgMD09PXI/MTpyLGk9ZS5yb3RhdGlvbixhPXZvaWQgMD09PWk/MDppLG89dC5hdHRyaWJ1dGVzLnN0eWxlLHM9by53aWR0aCxsPW8uaGVpZ2h0LHU9WzAsMCxwYXJzZUludChzKSxwYXJzZUludChsKV07cmV0dXJuIG5ldyBQKHt2aWV3Qm94OnUsc2NhbGU6bixyb3RhdGlvbjphfSl9LGUuaXNEYXRhU2NoZW1lPUMsZS5pc1BkZkZpbGU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYvXC5wZGYkL2kudGVzdCh0KX0sZS5pc1ZhbGlkRmV0Y2hVcmw9TSxlLmxvYWRTY3JpcHQ9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aS5zcmM9dCxpLm9ubG9hZD1mdW5jdGlvbih0KXtlJiZpLnJlbW92ZSgpLHIodCl9LGkub25lcnJvcj1mdW5jdGlvbigpe24obmV3IEVycm9yKCJDYW5ub3QgbG9hZCBzY3JpcHQgYXQ6ICIuY29uY2F0KGkuc3JjKSkpfSwoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmQoaSl9KSl9LGUuc2V0TGF5ZXJEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPSEoYXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pfHxhcmd1bWVudHNbM107aWYoZSBpbnN0YW5jZW9mIFApe3ZhciBpPWUucmF3RGltcyxhPWkucGFnZVdpZHRoLG89aS5wYWdlSGVpZ2h0LHM9dC5zdHlsZSxsPSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChhLCJweCkiKSx1PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChvLCJweCkiKTtyJiZlLnJvdGF0aW9uJTE4MCE9MD8ocy53aWR0aD11LHMuaGVpZ2h0PWwpOihzLndpZHRoPWwscy5oZWlnaHQ9dSl9biYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsZS5yb3RhdGlvbil9O3ZhciBuPXIoMTM4KSxpPXIoMSk7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxzPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIscykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLHMsbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09byhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LHMsbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQscyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LHMoYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LHMsbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W3NdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbyh0KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKHQpO2lmKGUpe3ZhciBpPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09byhlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fSh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0scCh0KX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxiKG4ua2V5KSxuKX19ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybihlPWIoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gYih0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW8oZSk/ZTpTdHJpbmcoZSl9ZS5Bbm5vdGF0aW9uUHJlZml4PSJwZGZqc19pbnRlcm5hbF9pZF8iO3ZhciBfPXkoKGZ1bmN0aW9uIHQoKXttKHRoaXMsdCl9KSk7ZS5QaXhlbHNQZXJJbmNoPV8sZyhfLCJDU1MiLDk2KSxnKF8sIlBERiIsNzIpLGcoXywiUERGX1RPX0NTU19VTklUUyIsXy5DU1MvXy5QREYpO3ZhciB3PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXt2YXIgdCxuPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtyZXR1cm4gbSh0aGlzLHIpLCh0PWUuY2FsbCh0aGlzKSkuX2RvY3VtZW50PWksdH1yZXR1cm4geShyLFt7a2V5OiJfY3JlYXRlQ2FudmFzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiByLndpZHRoPXQsci5oZWlnaHQ9ZSxyfX1dKSxyfShuLkJhc2VDYW52YXNGYWN0b3J5KTtmdW5jdGlvbiBBKHQpe3JldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrKCl7dmFyIHQ7cmV0dXJuIHQ9YSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsbixvPWFyZ3VtZW50cztyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9by5sZW5ndGg+MSYmdm9pZCAwIT09b1sxXSYmb1sxXSwhTShlLGRvY3VtZW50LmJhc2VVUkkpKXt0Lm5leHQ9MjE7YnJlYWt9cmV0dXJuIHQubmV4dD00LGZldGNoKGUpO2Nhc2UgNDppZigobj10LnNlbnQpLm9rKXt0Lm5leHQ9NzticmVha310aHJvdyBuZXcgRXJyb3Iobi5zdGF0dXNUZXh0KTtjYXNlIDc6aWYoIXIpe3QubmV4dD0xNTticmVha31yZXR1cm4gdC50MT1VaW50OEFycmF5LHQubmV4dD0xMSxuLmFycmF5QnVmZmVyKCk7Y2FzZSAxMTp0LnQyPXQuc2VudCx0LnQwPW5ldyB0LnQxKHQudDIpLHQubmV4dD0yMDticmVhaztjYXNlIDE1OnJldHVybiB0LnQzPWkuc3RyaW5nVG9CeXRlcyx0Lm5leHQ9MTgsbi50ZXh0KCk7Y2FzZSAxODp0LnQ0PXQuc2VudCx0LnQwPSgwLHQudDMpKHQudDQpO2Nhc2UgMjA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQudDApO2Nhc2UgMjE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe3ZhciBhPW5ldyBYTUxIdHRwUmVxdWVzdDthLm9wZW4oIkdFVCIsZSwhMCksciYmKGEucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIpLGEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoYS5yZWFkeVN0YXRlPT09WE1MSHR0cFJlcXVlc3QuRE9ORSl7dmFyIGU7aWYoKDIwMD09PWEuc3RhdHVzfHwwPT09YS5zdGF0dXMpJiYociYmYS5yZXNwb25zZT9lPW5ldyBVaW50OEFycmF5KGEucmVzcG9uc2UpOiFyJiZhLnJlc3BvbnNlVGV4dCYmKGU9KDAsaS5zdHJpbmdUb0J5dGVzKShhLnJlc3BvbnNlVGV4dCkpLGUpKXJldHVybiB2b2lkIHQoZSk7bihuZXcgRXJyb3IoYS5zdGF0dXNUZXh0KSl9fSxhLnNlbmQobnVsbCl9KSkpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSxrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9LGsuYXBwbHkodGhpcyxhcmd1bWVudHMpfWUuRE9NQ2FudmFzRmFjdG9yeT13O3ZhciBTPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEEodCx0aGlzLmlzQ29tcHJlc3NlZCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJue2NNYXBEYXRhOnQsY29tcHJlc3Npb25UeXBlOmV9fSkpfX1dKSxyfShuLkJhc2VDTWFwUmVhZGVyRmFjdG9yeSk7ZS5ET01DTWFwUmVhZGVyRmFjdG9yeT1TO3ZhciB4PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBKHQsITApfX1dKSxyfShuLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT14O3ZhciBFPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0KX19XSkscn0obi5CYXNlU1ZHRmFjdG9yeSk7ZS5ET01TVkdGYWN0b3J5PUU7dmFyIFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUudmlld0JveCxuPWUuc2NhbGUsaT1lLnJvdGF0aW9uLGE9ZS5vZmZzZXRYLG89dm9pZCAwPT09YT8wOmEscz1lLm9mZnNldFksbD12b2lkIDA9PT1zPzA6cyx1PWUuZG9udEZsaXAsYz12b2lkIDAhPT11JiZ1O20odGhpcyx0KSx0aGlzLnZpZXdCb3g9cix0aGlzLnNjYWxlPW4sdGhpcy5yb3RhdGlvbj1pLHRoaXMub2Zmc2V0WD1vLHRoaXMub2Zmc2V0WT1sO3ZhciBoLGYsZCxwLHYseSxnLGIsXz0oclsyXStyWzBdKS8yLHc9KHJbM10rclsxXSkvMjtzd2l0Y2goKGklPTM2MCk8MCYmKGkrPTM2MCksaSl7Y2FzZSAxODA6aD0tMSxmPTAsZD0wLHA9MTticmVhaztjYXNlIDkwOmg9MCxmPTEsZD0xLHA9MDticmVhaztjYXNlIDI3MDpoPTAsZj0tMSxkPS0xLHA9MDticmVhaztjYXNlIDA6aD0xLGY9MCxkPTAscD0tMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiUGFnZVZpZXdwb3J0OiBJbnZhbGlkIHJvdGF0aW9uLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAgZGVncmVlcy4iKX1jJiYoZD0tZCxwPS1wKSwwPT09aD8odj1NYXRoLmFicyh3LXJbMV0pKm4rbyx5PU1hdGguYWJzKF8tclswXSkqbitsLGc9KHJbM10tclsxXSkqbixiPShyWzJdLXJbMF0pKm4pOih2PU1hdGguYWJzKF8tclswXSkqbitvLHk9TWF0aC5hYnMody1yWzFdKSpuK2wsZz0oclsyXS1yWzBdKSpuLGI9KHJbM10tclsxXSkqbiksdGhpcy50cmFuc2Zvcm09W2gqbixmKm4sZCpuLHAqbix2LWgqbipfLWQqbip3LHktZipuKl8tcCpuKnddLHRoaXMud2lkdGg9Zyx0aGlzLmhlaWdodD1ifXJldHVybiB5KHQsW3trZXk6InJhd0RpbXMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMudmlld0JveDtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywicmF3RGltcyIse3BhZ2VXaWR0aDp0WzJdLXRbMF0scGFnZUhlaWdodDp0WzNdLXRbMV0scGFnZVg6dFswXSxwYWdlWTp0WzFdfSl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30scj1lLnNjYWxlLG49dm9pZCAwPT09cj90aGlzLnNjYWxlOnIsaT1lLnJvdGF0aW9uLGE9dm9pZCAwPT09aT90aGlzLnJvdGF0aW9uOmksbz1lLm9mZnNldFgscz12b2lkIDA9PT1vP3RoaXMub2Zmc2V0WDpvLGw9ZS5vZmZzZXRZLHU9dm9pZCAwPT09bD90aGlzLm9mZnNldFk6bCxjPWUuZG9udEZsaXAsaD12b2lkIDAhPT1jJiZjO3JldHVybiBuZXcgdCh7dmlld0JveDp0aGlzLnZpZXdCb3guc2xpY2UoKSxzY2FsZTpuLHJvdGF0aW9uOmEsb2Zmc2V0WDpzLG9mZnNldFk6dSxkb250RmxpcDpofSl9fSx7a2V5OiJjb252ZXJ0VG9WaWV3cG9ydFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3QsZV0sdGhpcy50cmFuc2Zvcm0pfX0se2tleToiY29udmVydFRvVmlld3BvcnRSZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWkuVXRpbC5hcHBseVRyYW5zZm9ybShbdFswXSx0WzFdXSx0aGlzLnRyYW5zZm9ybSkscj1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFszXV0sdGhpcy50cmFuc2Zvcm0pO3JldHVybltlWzBdLGVbMV0sclswXSxyWzFdXX19LHtrZXk6ImNvbnZlcnRUb1BkZlBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlJbnZlcnNlVHJhbnNmb3JtKFt0LGVdLHRoaXMudHJhbnNmb3JtKX19XSksdH0oKTtlLlBhZ2VWaWV3cG9ydD1QO3ZhciBUPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO3JldHVybiBtKHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIikpLnR5cGU9bixpLmV4dHJhRGVsYXk9YSxpfXJldHVybiB5KHIpfShpLkJhc2VFeGNlcHRpb24pO2Z1bmN0aW9uIEModCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MDtyPGUmJiIiPT09dFtyXS50cmltKCk7KXIrKztyZXR1cm4iZGF0YToiPT09dC5zdWJzdHJpbmcocixyKzUpLnRvTG93ZXJDYXNlKCl9ZS5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249VDt2YXIgTyxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe20odGhpcyx0KSxnKHRoaXMsInN0YXJ0ZWQiLE9iamVjdC5jcmVhdGUobnVsbCkpLGcodGhpcywidGltZXMiLFtdKX1yZXR1cm4geSh0LFt7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZCYmKDAsaS53YXJuKSgiVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAiLmNvbmNhdCh0KSksdGhpcy5zdGFydGVkW3RdPURhdGUubm93KCl9fSx7a2V5OiJ0aW1lRW5kIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZHx8KDAsaS53YXJuKSgiVGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZm9yICIuY29uY2F0KHQpKSx0aGlzLnRpbWVzLnB1c2goe25hbWU6dCxzdGFydDp0aGlzLnN0YXJ0ZWRbdF0sZW5kOkRhdGUubm93KCl9KSxkZWxldGUgdGhpcy5zdGFydGVkW3RdfX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZT1bXSxyPTAsbj1zKHRoaXMudGltZXMpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZS5uYW1lO3I9TWF0aC5tYXgoaS5sZW5ndGgscil9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXZhciBhLG89cyh0aGlzLnRpbWVzKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1sLm5hbWUsYz1sLnN0YXJ0LGg9bC5lbmQ7ZS5wdXNoKCIiLmNvbmNhdCh1LnBhZEVuZChyKSwiICIpLmNvbmNhdChoLWMsIm1zXG4iKSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiBlLmpvaW4oIiIpfX1dKSx0fSgpO2Z1bmN0aW9uIE0odCxlKXt0cnl7dmFyIHI9KGU/bmV3IFVSTCh0LGUpOm5ldyBVUkwodCkpLnByb3RvY29sO3JldHVybiJodHRwOiI9PT1yfHwiaHR0cHM6Ij09PXJ9Y2F0Y2godCl7cmV0dXJuITF9fWUuU3RhdFRpbWVyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bSh0aGlzLHQpfXJldHVybiB5KHQsbnVsbCxbe2tleToidG9EYXRlT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdHx8InN0cmluZyIhPXR5cGVvZiB0KXJldHVybiBudWxsO098fChPPW5ldyBSZWdFeHAoIl5EOihcXGR7NH0pKFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFtafCt8LV0pPyhcXGR7Mn0pPyc/KFxcZHsyfSk/Jz8iKSk7dmFyIGU9Ty5leGVjKHQpO2lmKCFlKXJldHVybiBudWxsO3ZhciByPXBhcnNlSW50KGVbMV0sMTApLG49cGFyc2VJbnQoZVsyXSwxMCk7bj1uPj0xJiZuPD0xMj9uLTE6MDt2YXIgaT1wYXJzZUludChlWzNdLDEwKTtpPWk+PTEmJmk8PTMxP2k6MTt2YXIgYT1wYXJzZUludChlWzRdLDEwKTthPWE+PTAmJmE8PTIzP2E6MDt2YXIgbz1wYXJzZUludChlWzVdLDEwKTtvPW8+PTAmJm88PTU5P286MDt2YXIgcz1wYXJzZUludChlWzZdLDEwKTtzPXM+PTAmJnM8PTU5P3M6MDt2YXIgbD1lWzddfHwiWiIsdT1wYXJzZUludChlWzhdLDEwKTt1PXU+PTAmJnU8PTIzP3U6MDt2YXIgYz1wYXJzZUludChlWzldLDEwKXx8MDtyZXR1cm4gYz1jPj0wJiZjPD01OT9jOjAsIi0iPT09bD8oYSs9dSxvKz1jKToiKyI9PT1sJiYoYS09dSxvLT1jKSxuZXcgRGF0ZShEYXRlLlVUQyhyLG4saSxhLG8scykpfX1dKSx0fSgpO2Z1bmN0aW9uIEkodCl7aWYodC5zdGFydHNXaXRoKCIjIikpe3ZhciBlPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpO3JldHVyblsoMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZV19cmV0dXJuIHQuc3RhcnRzV2l0aCgicmdiKCIpP3Quc2xpY2UoNCwtMSkuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KX0pKTp0LnN0YXJ0c1dpdGgoInJnYmEoIik/dC5zbGljZSg1LC0xKS5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQpfSkpLnNsaWNlKDAsMyk6KCgwLGkud2FybikoJ05vdCBhIHZhbGlkIGNvbG9yIGZvcm1hdDogIicuY29uY2F0KHQsJyInKSksWzAsMCwwXSl9ZS5QREZEYXRlU3RyaW5nPVJ9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5CYXNlU1ZHRmFjdG9yeT1lLkJhc2VDYW52YXNGYWN0b3J5PWUuQmFzZUNNYXBSZWFkZXJGYWN0b3J5PXZvaWQgMDt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkoKXtpPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLGwpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PXMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8sbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLGwpfSkpfWwodS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe2EobyxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EobyxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PXModCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1zKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09cyhpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIGUmJnUodC5wcm90b3R5cGUsZSksciYmdSh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNhbnZhc0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHQ8PTB8fGU8PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbnZhcyBzaXplIik7dmFyIHI9dGhpcy5fY3JlYXRlQ2FudmFzKHQsZSk7cmV0dXJue2NhbnZhczpyLGNvbnRleHQ6ci5nZXRDb250ZXh0KCIyZCIpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbih0LGUscil7aWYoIXQuY2FudmFzKXRocm93IG5ldyBFcnJvcigiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWQiKTtpZihlPD0wfHxyPD0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjYW52YXMgc2l6ZSIpO3QuY2FudmFzLndpZHRoPWUsdC5jYW52YXMuaGVpZ2h0PXJ9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5jYW52YXMpdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgaXMgbm90IHNwZWNpZmllZCIpO3QuY2FudmFzLndpZHRoPTAsdC5jYW52YXMuaGVpZ2h0PTAsdC5jYW52YXM9bnVsbCx0LmNvbnRleHQ9bnVsbH19LHtrZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2NyZWF0ZUNhbnZhc2AgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZUNhbnZhc0ZhY3Rvcnk9aDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnIsYT1lLmlzQ29tcHJlc3NlZCxvPXZvaWQgMCE9PWEmJmE7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNNYXBSZWFkZXJGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pLHRoaXMuaXNDb21wcmVzc2VkPW99dmFyIGU7cmV0dXJuIGModCxbe2tleToiZmV0Y2giLHZhbHVlOihlPW8oaSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsYSxvLHM9dGhpcztyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9ZS5uYW1lLHRoaXMuYmFzZVVybCl7dC5uZXh0PTM7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdUaGUgQ01hcCAiYmFzZVVybCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB0aGUgImNNYXBVcmwiIGFuZCAiY01hcFBhY2tlZCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpO2Nhc2UgMzppZihyKXt0Lm5leHQ9NTticmVha310aHJvdyBuZXcgRXJyb3IoIkNNYXAgbmFtZSBtdXN0IGJlIHNwZWNpZmllZC4iKTtjYXNlIDU6cmV0dXJuIGE9dGhpcy5iYXNlVXJsK3IrKHRoaXMuaXNDb21wcmVzc2VkPyIuYmNtYXAiOiIiKSxvPXRoaXMuaXNDb21wcmVzc2VkP24uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlk6bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUsdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKGEsbykuY2F0Y2goKGZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGxvYWQgIi5jb25jYXQocy5pc0NvbXByZXNzZWQ/ImJpbmFyeSAiOiIiLCJDTWFwIGF0OiAiKS5jb25jYXQoYSkpfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBfZmV0Y2hEYXRhYCBjYWxsZWQuIil9fV0pLHR9KCk7ZS5CYXNlQ01hcFJlYWRlckZhY3Rvcnk9Zjt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnI7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pfXZhciBlO3JldHVybiBjKHQsW3trZXk6ImZldGNoIix2YWx1ZTooZT1vKGkoKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLG47cmV0dXJuIGkoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihyPWUuZmlsZW5hbWUsdGhpcy5iYXNlVXJsKXt0Lm5leHQ9MzticmVha310aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdGFuZGFyZCBmb250ICJiYXNlVXJsIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQsIGVuc3VyZSB0aGF0IHRoZSAic3RhbmRhcmRGb250RGF0YVVybCIgQVBJIHBhcmFtZXRlciBpcyBwcm92aWRlZC4nKTtjYXNlIDM6aWYocil7dC5uZXh0PTU7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJGb250IGZpbGVuYW1lIG11c3QgYmUgc3BlY2lmaWVkLiIpO2Nhc2UgNTpyZXR1cm4gbj0iIi5jb25jYXQodGhpcy5iYXNlVXJsKS5jb25jYXQociksdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKG4pLmNhdGNoKChmdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBsb2FkIGZvbnQgZGF0YSBhdDogIi5jb25jYXQobikpfSkpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2ZldGNoRGF0YWAgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNWR0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYodDw9MHx8ZTw9MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgU1ZHIGRpbWVuc2lvbnMiKTt2YXIgbj10aGlzLl9jcmVhdGVTVkcoInN2ZzpzdmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxyfHwobi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiIi5jb25jYXQodCwicHgiKSksbi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIiIuY29uY2F0KGUsInB4IikpKSxuLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxuLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiLmNvbmNhdCh0LCIgIikuY29uY2F0KGUpKSxufX0se2tleToiY3JlYXRlRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTVkcgZWxlbWVudCB0eXBlIik7cmV0dXJuIHRoaXMuX2NyZWF0ZVNWRyh0KX19LHtrZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYF9jcmVhdGVTVkdgIGNhbGxlZC4iKX19XSksdH0oKTtlLkJhc2VTVkdGYWN0b3J5PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigxKTtmdW5jdGlvbiBpKHQpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxpKHQpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09aSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1pKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxsPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuaDE9ZT80Mjk0OTY3Mjk1JmU6byx0aGlzLmgyPWU/NDI5NDk2NzI5NSZlOm99dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtlPW5ldyBVaW50OEFycmF5KDIqdC5sZW5ndGgpLHI9MDtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspe3ZhciBvPXQuY2hhckNvZGVBdChpKTtvPD0yNTU/ZVtyKytdPW86KGVbcisrXT1vPj4+OCxlW3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKHQpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KGU9dC5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGM9ci00KnUsaD1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCx1KSxmPTAsZD0wLHA9dGhpcy5oMSx2PXRoaXMuaDIseT0zNDMyOTE4MzUzLG09NDYxODQ1OTA3LGc9MTE2MDEsYj0xMzcxNSxfPTA7Xzx1O18rKykxJl8/cD01KihwPShwXj1mPShmPShmPShmPWhbX10pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2OnY9NSoodj0odl49ZD0oZD0oZD0oZD1oW19dKSp5JnN8ZCpnJmwpPDwxNXxkPj4+MTcpKm0mc3xkKmImbCk8PDEzfHY+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goZj0wLGMpe2Nhc2UgMzpmXj1lWzQqdSsyXTw8MTY7Y2FzZSAyOmZePWVbNCp1KzFdPDw4O2Nhc2UgMTpmPShmPShmPShmXj1lWzQqdV0pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsLDEmdT9wXj1mOnZePWZ9dGhpcy5oMT1wLHRoaXMuaDI9dn19LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmgxLGU9dGhpcy5oMjtyZXR1cm4gdD0zOTgxODA2Nzk3Kih0Xj1lPj4+MSkmc3wzNjA0NSp0JmwsdD00NDQ5ODQ0MDMqKHRePShlPTQyODM1NDM1MTEqZSZzfCgyOTUwMTYzNzk3KihlPDwxNnx0Pj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSp0JmwsKCh0Xj0oZT0zMzAxODgyMzY2KmUmc3woMzEyMDQzNzg5MyooZTw8MTZ8dD4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsoZT4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZhKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NdXJtdXJIYXNoM182ND11fSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRm9udExvYWRlcj1lLkZvbnRGYWNlT2JqZWN0PXZvaWQgMDt2YXIgbj1yKDEpLGk9cigzKTtmdW5jdGlvbiBhKHQpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxhKHQpfWZ1bmN0aW9uIG8oKXtvPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30scz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLHMpJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sbyxzLGwpe3ZhciB1PWYodFtuXSx0LG8pO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWEoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxzLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LHMsbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxzKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxzLGwpfSkpfWwodS5hcmcpfXZhciBvO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBvPW8/by50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtzXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWEodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuIGUmJmgodC5wcm90b3R5cGUsZSksciYmaCh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUub25VbnN1cHBvcnRlZEZlYXR1cmUsbj1lLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtlLnN0eWxlRWxlbWVudCxjKHRoaXMsdCksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmU9cix0aGlzLl9kb2N1bWVudD1pLHRoaXMubmF0aXZlRm9udEZhY2VzPVtdLHRoaXMuc3R5bGVFbGVtZW50PW51bGwsdGhpcy5sb2FkaW5nUmVxdWVzdHM9W10sdGhpcy5sb2FkVGVzdEZvbnRJZD0wfXZhciBlLHI7cmV0dXJuIGYodCxbe2tleToiYWRkTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubmF0aXZlRm9udEZhY2VzLnB1c2godCksdGhpcy5fZG9jdW1lbnQuZm9udHMuYWRkKHQpfX0se2tleToiaW5zZXJ0UnVsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zdHlsZUVsZW1lbnR8fCh0aGlzLnN0eWxlRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZCh0aGlzLnN0eWxlRWxlbWVudCkpO3ZhciBlPXRoaXMuc3R5bGVFbGVtZW50LnNoZWV0O2UuaW5zZXJ0UnVsZSh0LGUuY3NzUnVsZXMubGVuZ3RoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0LGU9bCh0aGlzLm5hdGl2ZUZvbnRGYWNlcyk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3RoaXMuX2RvY3VtZW50LmZvbnRzLmRlbGV0ZShyKX19Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9dGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoPTAsdGhpcy5zdHlsZUVsZW1lbnQmJih0aGlzLnN0eWxlRWxlbWVudC5yZW1vdmUoKSx0aGlzLnN0eWxlRWxlbWVudD1udWxsKX19LHtrZXk6ImJpbmQiLHZhbHVlOihlPW8oKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLGksYT10aGlzO3JldHVybiBvKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIWUuYXR0YWNoZWQmJiFlLm1pc3NpbmdGaWxlKXt0Lm5leHQ9MjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjppZihlLmF0dGFjaGVkPSEwLCF0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpe3QubmV4dD0xOTticmVha31pZighKHI9ZS5jcmVhdGVOYXRpdmVGb250RmFjZSgpKSl7dC5uZXh0PTE4O2JyZWFrfXJldHVybiB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKHIpLHQucHJldj03LHQubmV4dD0xMCxyLmxvYWRlZDtjYXNlIDEwOnQubmV4dD0xODticmVhaztjYXNlIDEyOnRocm93IHQucHJldj0xMix0LnQwPXQuY2F0Y2goNyksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udExvYWROYXRpdmV9KSwoMCxuLndhcm4pKCJGYWlsZWQgdG8gbG9hZCBmb250ICciLmNvbmNhdChyLmZhbWlseSwiJzogJyIpLmNvbmNhdCh0LnQwLCInLiIpKSxlLmRpc2FibGVGb250RmFjZT0hMCx0LnQwO2Nhc2UgMTg6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE5OmlmKCEoaT1lLmNyZWF0ZUZvbnRGYWNlUnVsZSgpKSl7dC5uZXh0PTI2O2JyZWFrfWlmKHRoaXMuaW5zZXJ0UnVsZShpKSwhdGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCl7dC5uZXh0PTI0O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyNDpyZXR1cm4gdC5uZXh0PTI2LG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXt2YXIgcj1hLl9xdWV1ZUxvYWRpbmdDYWxsYmFjayh0KTthLl9wcmVwYXJlRm9udExvYWRFdmVudChlLHIpfSkpO2Nhc2UgMjY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s3LDEyXV0pfSkpLHI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixpKXt2YXIgYT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyh0KXtzKGEsbixpLG8sbCwibmV4dCIsdCl9ZnVuY3Rpb24gbCh0KXtzKGEsbixpLG8sbCwidGhyb3ciLHQpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0LGU9IShudWxsPT09KHQ9dGhpcy5fZG9jdW1lbnQpfHx2b2lkIDA9PT10fHwhdC5mb250cyk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGUpfX0se2tleToiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PSExO3JldHVybihpLmlzTm9kZUpTfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL01vemlsbGFcLzUuMC4qP3J2OlxkKy4qPyBHZWNrby8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkmJih0PSEwKSwoMCxuLnNoYWRvdykodGhpcywiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLHQpfX0se2tleToiX3F1ZXVlTG9hZGluZ0NhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRpbmdSZXF1ZXN0cyxyPXtkb25lOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7Zm9yKCgwLG4uYXNzZXJ0KSghci5kb25lLCJjb21wbGV0ZVJlcXVlc3QoKSBjYW5ub3QgYmUgY2FsbGVkIHR3aWNlLiIpLHIuZG9uZT0hMDtlLmxlbmd0aD4wJiZlWzBdLmRvbmU7KXt2YXIgdD1lLnNoaWZ0KCk7c2V0VGltZW91dCh0LmNhbGxiYWNrLDApfX0sY2FsbGJhY2s6dH07cmV0dXJuIGUucHVzaChyKSxyfX0se2tleToiX2xvYWRUZXN0Rm9udCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9YXRvYigiVDFSVVR3QUxBSUFBQXdBd1EwWkdJREh0Wmc0QUFBT1lBQUFBZ1VaR1ZFMWxrelp3QUFBRUhBQUFBQnhIUkVWR0FCUUFGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQUFMd0FBQUEyYUdobFlRZGtBK29BQUFEMEFBQUFKR2h0ZEhnRDZBQUFBQUFFV0FBQUFBWnRZWGh3QUFKUUFBQUFBUmdBQUFBR2JtRnRaVmptZEg0QUFBR0FBQUFBc1hCdmMzVC9oZ0F6QUFBRGVBQUFBQ0FBQVFBQUFBRUFBTFpSRnNSZkR6ejFBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRDZBQUFBQUFENkFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQVVBQUFBZ0FBQUFRRDZBSDBBQVVBQUFLS0Fyd0FBQUNNQW9vQ3ZBQUFBZUFBTVFFQ0FBQUNBQVlKQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFGQm1SV1FBd0FBdUFDNERJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQUFBRUFBUUFBQUFFQUFBQUFBQUlBQVFBQUFBRUFBQUFBQUFNQUFRQUFBQUVBQUFBQUFBUUFBUUFBQUFFQUFBQUFBQVVBQVFBQUFBRUFBQUFBQUFZQUFRQUFBQU1BQVFRSkFBQUFBZ0FCQUFNQUFRUUpBQUVBQWdBQkFBTUFBUVFKQUFJQUFnQUJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWUFBQUFBQUFBQXdBQUFBTUFBQUFjQUFFQUFBQUFBRHdBQXdBQkFBQUFIQUFFQUNBQUFBQUVBQVFBQVFBQUFDNy8vd0FBQUM3Ly8vL1RBQUVBQUFBQUFBQUJCZ0FBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQUFBQUFBRC9nd0F5QUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBUUVBQUVCQVFKWUFBRUJBU0g0RHdENEd3SEVBdmdjQS9nWEJJd01BWXVMK256NXRRWGtENWozQ0JMbkVRQUNBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90M0RvdjZmQUg2ZkFUK2ZQcDgrbndIRG9zTUN2bTFDdm0xREF6NmZCUUFBQUFBQUFBQkFBQUFBTW1KYnpFQUFBQUF6Z1RqRlFBQUFBRE9CT1FwQUFFQUFBQUFBQUFBREFBVUFBUUFBQUFCQUFBQUFnQUJBQUFBQUFBQUFBQUQ2QUFBQUFBQUFBPT0iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2xvYWRUZXN0Rm9udCIsdCl9fSx7a2V5OiJfcHJlcGFyZUZvbnRMb2FkRXZlbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0LmNoYXJDb2RlQXQoZSk8PDI0fHQuY2hhckNvZGVBdChlKzEpPDwxNnx0LmNoYXJDb2RlQXQoZSsyKTw8OHwyNTUmdC5jaGFyQ29kZUF0KGUrMyl9ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm4gdC5zdWJzdHJpbmcoMCxlKStuK3Quc3Vic3RyaW5nKGUrcil9dmFyIGEsbyxzPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Mud2lkdGg9MSxzLmhlaWdodD0xO3ZhciBsPXMuZ2V0Q29udGV4dCgiMmQiKSx1PTAsYz0ibHQiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKSxoPXRoaXMuX2xvYWRUZXN0Rm9udCxmPTE0ODIxODQ3OTIsZD1yKGg9aShoLDk3NixjLmxlbmd0aCxjKSwxNik7Zm9yKGE9MCxvPWMubGVuZ3RoLTM7YTxvO2ErPTQpZD1kLWYrcihjLGEpfDA7YTxjLmxlbmd0aCYmKGQ9ZC1mK3IoYysiWFhYIixhKXwwKSxoPWkoaCwxNiw0LCgwLG4uc3RyaW5nMzIpKGQpKTt2YXIgcD0idXJsKGRhdGE6Zm9udC9vcGVudHlwZTtiYXNlNjQsIi5jb25jYXQoYnRvYShoKSwiKTsiKSx2PSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQoYywnIjtzcmM6JykuY29uY2F0KHAsIn0iKTt0aGlzLmluc2VydFJ1bGUodik7dmFyIHk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7eS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHkuc3R5bGUud2lkdGg9eS5zdHlsZS5oZWlnaHQ9IjEwcHgiLHkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix5LnN0eWxlLnRvcD15LnN0eWxlLmxlZnQ9IjBweCI7Zm9yKHZhciBtPTAsZz1bdC5sb2FkZWROYW1lLGNdO208Zy5sZW5ndGg7bSsrKXt2YXIgYj1nW21dLF89dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO18udGV4dENvbnRlbnQ9IkhpIixfLnN0eWxlLmZvbnRGYW1pbHk9Yix5LmFwcGVuZChfKX10aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZCh5KSxmdW5jdGlvbiB0KGUscil7aWYoKyt1PjMwKXJldHVybigwLG4ud2FybikoIkxvYWQgdGVzdCBmb250IG5ldmVyIGxvYWRlZC4iKSx2b2lkIHIoKTtsLmZvbnQ9IjMwcHggIitlLGwuZmlsbFRleHQoIi4iLDAsMjApLGwuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGFbM10+MD9yKCk6c2V0VGltZW91dCh0LmJpbmQobnVsbCxlLHIpKX0oYywoZnVuY3Rpb24oKXt5LnJlbW92ZSgpLGUuY29tcGxldGUoKX0pKX19XSksdH0oKTtlLkZvbnRMb2FkZXI9ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgbj1yLmlzRXZhbFN1cHBvcnRlZCxpPXZvaWQgMD09PW58fG4sYT1yLmRpc2FibGVGb250RmFjZSxvPXZvaWQgMCE9PWEmJmEscz1yLmlnbm9yZUVycm9ycyxsPXZvaWQgMCE9PXMmJnMsdT1yLm9uVW5zdXBwb3J0ZWRGZWF0dXJlLGg9ci5mb250UmVnaXN0cnksZj12b2lkIDA9PT1oP251bGw6aDtmb3IodmFyIGQgaW4gYyh0aGlzLHQpLHRoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlKXRoaXNbZF09ZVtkXTt0aGlzLmlzRXZhbFN1cHBvcnRlZD0hMSE9PWksdGhpcy5kaXNhYmxlRm9udEZhY2U9ITA9PT1vLHRoaXMuaWdub3JlRXJyb3JzPSEwPT09bCx0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZT11LHRoaXMuZm9udFJlZ2lzdHJ5PWZ9cmV0dXJuIGYodCxbe2tleToiY3JlYXRlTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDtpZih0aGlzLmNzc0ZvbnRJbmZvKXt2YXIgcj17d2VpZ2h0OnRoaXMuY3NzRm9udEluZm8uZm9udFdlaWdodH07dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKHIuc3R5bGU9Im9ibGlxdWUgIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSwiZGVnIikpLGU9bmV3IEZvbnRGYWNlKHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSx0aGlzLmRhdGEscil9ZWxzZSBlPW5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsdGhpcy5kYXRhLHt9KTtyZXR1cm4gbnVsbD09PSh0PXRoaXMuZm9udFJlZ2lzdHJ5KXx8dm9pZCAwPT09dHx8dC5yZWdpc3RlckZvbnQodGhpcyksZX19LHtrZXk6ImNyZWF0ZUZvbnRGYWNlUnVsZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDt2YXIgZSxyPSgwLG4uYnl0ZXNUb1N0cmluZykodGhpcy5kYXRhKSxpPSJ1cmwoZGF0YToiLmNvbmNhdCh0aGlzLm1pbWV0eXBlLCI7YmFzZTY0LCIpLmNvbmNhdChidG9hKHIpLCIpOyIpO2lmKHRoaXMuY3NzRm9udEluZm8pe3ZhciBhPSJmb250LXdlaWdodDogIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0LCI7Iik7dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKGErPSJmb250LXN0eWxlOiBvYmxpcXVlICIuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uaXRhbGljQW5nbGUsImRlZzsiKSksZT0nQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6IicuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSwnIjsnKS5jb25jYXQoYSwic3JjOiIpLmNvbmNhdChpLCJ9Iil9ZWxzZSBlPSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQodGhpcy5sb2FkZWROYW1lLCciO3NyYzonKS5jb25jYXQoaSwifSIpO3JldHVybiBudWxsPT09KHQ9dGhpcy5mb250UmVnaXN0cnkpfHx2b2lkIDA9PT10fHx0LnJlZ2lzdGVyRm9udCh0aGlzLGkpLGV9fSx7a2V5OiJnZXRQYXRoR2VuZXJhdG9yIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbZV0pcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV07dmFyIHI7dHJ5e3I9dC5nZXQodGhpcy5sb2FkZWROYW1lKyJfcGF0aF8iK2UpfWNhdGNoKHQpe2lmKCF0aGlzLmlnbm9yZUVycm9ycyl0aHJvdyB0O3JldHVybiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7ZmVhdHVyZUlkOm4uVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250R2V0UGF0aH0pLCgwLG4ud2FybikoJ2dldFBhdGhHZW5lcmF0b3IgLSBpZ25vcmluZyBjaGFyYWN0ZXI6ICInLmNvbmNhdCh0LCciLicpKSx0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7fX1pZih0aGlzLmlzRXZhbFN1cHBvcnRlZCYmbi5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBpLGE9W10sbz1sKHIpO3RyeXtmb3Ioby5zKCk7IShpPW8ubigpKS5kb25lOyl7dmFyIHM9aS52YWx1ZSx1PXZvaWQgMCE9PXMuYXJncz9zLmFyZ3Muam9pbigiLCIpOiIiO2EucHVzaCgiYy4iLHMuY21kLCIoIix1LCIpO1xuIil9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPW5ldyBGdW5jdGlvbigiYyIsInNpemUiLGEuam9pbigiIikpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT1sKHIpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTsic2NhbGUiPT09YS5jbWQmJihhLmFyZ3M9W2UsLWVdKSx0W2EuY21kXS5hcHBseSh0LGEuYXJncyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX19fV0pLHR9KCk7ZS5Gb250RmFjZU9iamVjdD1wfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ2FudmFzR3JhcGhpY3M9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDE0Miksbz1yKDE0Mykscz1yKDMpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGQodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9Zih0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz00MDk2LGI9cy5pc05vZGVKUyYmInVuZGVmaW5lZCI9PXR5cGVvZiBQYXRoMkQ/LTE6MWUzLF89MTYsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dih0aGlzLHQpLHRoaXMuY2FudmFzRmFjdG9yeT1lLHRoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtyZXR1cm4gdm9pZCAwIT09dGhpcy5jYWNoZVt0XT8obj10aGlzLmNhY2hlW3RdLHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChuLGUscikpOihuPXRoaXMuY2FudmFzRmFjdG9yeS5jcmVhdGUoZSxyKSx0aGlzLmNhY2hlW3RdPW4pLG59fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmNhY2hlW3RdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuY2FjaGUpe3ZhciBlPXRoaXMuY2FjaGVbdF07dGhpcy5jYW52YXNGYWN0b3J5LmRlc3Ryb3koZSksZGVsZXRlIHRoaXMuY2FjaGVbdF19fX1dKSx0fSgpO2Z1bmN0aW9uIEEodCxlLHIsbixhLG8scyxsLHUsYyl7dmFyIGY9aCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpLDYpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWZbNF0sZz1mWzVdO2lmKDA9PT1wJiYwPT09dil7dmFyIGI9cypkK20sXz1NYXRoLnJvdW5kKGIpLHc9bCp5K2csQT1NYXRoLnJvdW5kKHcpLGs9KHMrdSkqZCttLFM9TWF0aC5hYnMoTWF0aC5yb3VuZChrKS1fKXx8MSx4PShsK2MpKnkrZyxFPU1hdGguYWJzKE1hdGgucm91bmQoeCktQSl8fDE7cmV0dXJuIHQuc2V0VHJhbnNmb3JtKE1hdGguc2lnbihkKSwwLDAsTWF0aC5zaWduKHkpLF8sQSksdC5kcmF3SW1hZ2UoZSxyLG4sYSxvLDAsMCxTLEUpLHQuc2V0VHJhbnNmb3JtKGQscCx2LHksbSxnKSxbUyxFXX1pZigwPT09ZCYmMD09PXkpe3ZhciBQPWwqdittLFQ9TWF0aC5yb3VuZChQKSxDPXMqcCtnLE89TWF0aC5yb3VuZChDKSxGPShsK2MpKnYrbSxNPU1hdGguYWJzKE1hdGgucm91bmQoRiktVCl8fDEsUj0ocyt1KSpwK2csST1NYXRoLmFicyhNYXRoLnJvdW5kKFIpLU8pfHwxO3JldHVybiB0LnNldFRyYW5zZm9ybSgwLE1hdGguc2lnbihwKSxNYXRoLnNpZ24odiksMCxULE8pLHQuZHJhd0ltYWdlKGUscixuLGEsbywwLDAsSSxNKSx0LnNldFRyYW5zZm9ybShkLHAsdix5LG0sZyksW0ksTV19cmV0dXJuIHQuZHJhd0ltYWdlKGUscixuLGEsbyxzLGwsdSxjKSxbTWF0aC5oeXBvdChkLHApKnUsTWF0aC5oeXBvdCh2LHkpKmNdfXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3YodGhpcyx0KSx0aGlzLmFscGhhSXNTaGFwZT0hMSx0aGlzLmZvbnRTaXplPTAsdGhpcy5mb250U2l6ZVNjYWxlPTEsdGhpcy50ZXh0TWF0cml4PW4uSURFTlRJVFlfTUFUUklYLHRoaXMudGV4dE1hdHJpeFNjYWxlPTEsdGhpcy5mb250TWF0cml4PW4uRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy54PTAsdGhpcy55PTAsdGhpcy5saW5lWD0wLHRoaXMubGluZVk9MCx0aGlzLmNoYXJTcGFjaW5nPTAsdGhpcy53b3JkU3BhY2luZz0wLHRoaXMudGV4dEhTY2FsZT0xLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMudGV4dFJpc2U9MCx0aGlzLmZpbGxDb2xvcj0iIzAwMDAwMCIsdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5wYXR0ZXJuRmlsbD0hMSx0aGlzLmZpbGxBbHBoYT0xLHRoaXMuc3Ryb2tlQWxwaGE9MSx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuYWN0aXZlU01hc2s9bnVsbCx0aGlzLnRyYW5zZmVyTWFwcz1udWxsLHRoaXMuc3RhcnROZXdQYXRoQW5kQ2xpcEJveChbMCwwLGUscl0pfXJldHVybiBtKHQsW3trZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIHQuY2xpcEJveD10aGlzLmNsaXBCb3guc2xpY2UoKSx0fX0se2tleToic2V0Q3VycmVudFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMueD10LHRoaXMueT1lfX0se2tleToidXBkYXRlUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWgobi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlLHJdLHQpLDIpO2U9aVswXSxyPWlbMV0sdGhpcy5taW5YPU1hdGgubWluKHRoaXMubWluWCxlKSx0aGlzLm1pblk9TWF0aC5taW4odGhpcy5taW5ZLHIpLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZSksdGhpcy5tYXhZPU1hdGgubWF4KHRoaXMubWF4WSxyKX19LHtrZXk6InVwZGF0ZVJlY3RNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKGUsdCksaT1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oZS5zbGljZSgyKSx0KTt0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLHJbMF0saVswXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxyWzFdLGlbMV0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsclswXSxpWzBdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLHJbMV0saVsxXSl9fSx7a2V5OiJ1cGRhdGVTY2FsaW5nUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtuLlV0aWwuc2NhbGVNaW5NYXgodCxlKSx0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLGVbMF0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZVsxXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxlWzJdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLGVbM10pfX0se2tleToidXBkYXRlQ3VydmVQYXRoTWluTWF4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpLGEsbyxzLGwsdSxjKXt2YXIgaD1uLlV0aWwuYmV6aWVyQm91bmRpbmdCb3goZSxyLGksYSxvLHMsbCx1KTtpZihjKXJldHVybiBjWzBdPU1hdGgubWluKGNbMF0saFswXSxoWzJdKSxjWzFdPU1hdGgubWF4KGNbMV0saFswXSxoWzJdKSxjWzJdPU1hdGgubWluKGNbMl0saFsxXSxoWzNdKSx2b2lkKGNbM109TWF0aC5tYXgoY1szXSxoWzFdLGhbM10pKTt0aGlzLnVwZGF0ZVJlY3RNaW5NYXgodCxoKX19LHtrZXk6ImdldFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1bdGhpcy5taW5YLHRoaXMubWluWSx0aGlzLm1heFgsdGhpcy5tYXhZXTtpZih0PT09YS5QYXRoVHlwZS5TVFJPS0Upe2V8fCgwLG4udW5yZWFjaGFibGUpKCJTdHJva2UgYm91bmRpbmcgYm94IG11c3QgaW5jbHVkZSB0cmFuc2Zvcm0uIik7dmFyIGk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpLG89aVswXSp0aGlzLmxpbmVXaWR0aC8yLHM9aVsxXSp0aGlzLmxpbmVXaWR0aC8yO3JbMF0tPW8sclsxXS09cyxyWzJdKz1vLHJbM10rPXN9cmV0dXJuIHJ9fSx7a2V5OiJ1cGRhdGVDbGlwRnJvbVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bi5VdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsdGhpcy5nZXRQYXRoQm91bmRpbmdCb3goKSk7dGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KHR8fFswLDAsMCwwXSl9fSx7a2V5OiJpc0VtcHR5Q2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW5YPT09MS8wfX0se2tleToic3RhcnROZXdQYXRoQW5kQ2xpcEJveCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jbGlwQm94PXQsdGhpcy5taW5YPTEvMCx0aGlzLm1pblk9MS8wLHRoaXMubWF4WD0wLHRoaXMubWF4WT0wfX0se2tleToiZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuIG4uVXRpbC5pbnRlcnNlY3QodGhpcy5jbGlwQm94LHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KHQsZSkpfX1dKSx0fSgpO2Z1bmN0aW9uIFModCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlRGF0YSYmZSBpbnN0YW5jZW9mIEltYWdlRGF0YSl0LnB1dEltYWdlRGF0YShlLDAsMCk7ZWxzZXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZD1lLmhlaWdodCxwPWUud2lkdGgsdj1kJV8seT0oZC12KS9fLG09MD09PXY/eTp5KzEsZz10LmNyZWF0ZUltYWdlRGF0YShwLF8pLGI9MCx3PWUuZGF0YSxBPWcuZGF0YTtpZihyKXN3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnU9clswXSxjPXJbMF0saD1yWzBdLGY9clswXTticmVhaztjYXNlIDQ6dT1yWzBdLGM9clsxXSxoPXJbMl0sZj1yWzNdfWlmKGUua2luZD09PW4uSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKXt2YXIgaz13LmJ5dGVMZW5ndGgsUz1uZXcgVWludDMyQXJyYXkoQS5idWZmZXIsMCxBLmJ5dGVMZW5ndGg+PjIpLHg9Uy5sZW5ndGgsRT1wKzc+PjMsUD00Mjk0OTY3Mjk1LFQ9bi5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NTtpZihmJiYyNTU9PT1mWzBdJiYwPT09ZlsyNTVdKXt2YXIgQz1bVCxQXTtQPUNbMF0sVD1DWzFdfWZvcihhPTA7YTxtO2ErKyl7Zm9yKHM9YTx5P186dixpPTAsbz0wO288cztvKyspe2Zvcih2YXIgTz1rLWIsRj0wLE09Tz5FP3A6OCpPLTcsUj0tOCZNLEk9MCxqPTA7RjxSO0YrPTgpaj13W2IrK10sU1tpKytdPTEyOCZqP1A6VCxTW2krK109NjQmaj9QOlQsU1tpKytdPTMyJmo/UDpULFNbaSsrXT0xNiZqP1A6VCxTW2krK109OCZqP1A6VCxTW2krK109NCZqP1A6VCxTW2krK109MiZqP1A6VCxTW2krK109MSZqP1A6VDtmb3IoO0Y8TTtGKyspMD09PUkmJihqPXdbYisrXSxJPTEyOCksU1tpKytdPWomST9QOlQsST4+PTF9Zm9yKDtpPHg7KVNbaSsrXT0wO3QucHV0SW1hZ2VEYXRhKGcsMCxhKl8pfX1lbHNlIGlmKGUua2luZD09PW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFApe3ZhciBMPSEhKHV8fGN8fGgpO2ZvcihvPTAsbD1wKl8qNCxhPTA7YTx5O2ErKyl7aWYoQS5zZXQody5zdWJhcnJheShiLGIrbCkpLGIrPWwsTClmb3IodmFyIEQ9MDtEPGw7RCs9NCl1JiYoQVtEKzBdPXVbQVtEKzBdXSksYyYmKEFbRCsxXT1jW0FbRCsxXV0pLGgmJihBW0QrMl09aFtBW0QrMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsbyksbys9X31pZihhPG0pe2lmKGw9cCp2KjQsQS5zZXQody5zdWJhcnJheShiLGIrbCkpLEwpZm9yKHZhciBOPTA7TjxsO04rPTQpdSYmKEFbTiswXT11W0FbTiswXV0pLGMmJihBW04rMV09Y1tBW04rMV1dKSxoJiYoQVtOKzJdPWhbQVtOKzJdXSk7dC5wdXRJbWFnZURhdGEoZywwLG8pfX1lbHNle2lmKGUua2luZCE9PW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCl0aHJvdyBuZXcgRXJyb3IoImJhZCBpbWFnZSBraW5kOiAiLmNvbmNhdChlLmtpbmQpKTt2YXIgVT0hISh1fHxjfHxoKTtmb3IobD1wKihzPV8pLGE9MDthPG07YSsrKXtmb3IoYT49eSYmKGw9cCoocz12KSksaT0wLG89bDtvLS07KUFbaSsrXT13W2IrK10sQVtpKytdPXdbYisrXSxBW2krK109d1tiKytdLEFbaSsrXT0yNTU7aWYoVSlmb3IodmFyIFc9MDtXPGk7Vys9NCl1JiYoQVtXKzBdPXVbQVtXKzBdXSksYyYmKEFbVysxXT1jW0FbVysxXV0pLGgmJihBW1crMl09aFtBW1crMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsYSpfKX19fX1mdW5jdGlvbiB4KHQsZSl7aWYoZS5iaXRtYXApdC5kcmF3SW1hZ2UoZS5iaXRtYXAsMCwwKTtlbHNlIGZvcih2YXIgcj1lLmhlaWdodCxuPWUud2lkdGgsaT1yJV8sYT0oci1pKS9fLHM9MD09PWk/YTphKzEsbD10LmNyZWF0ZUltYWdlRGF0YShuLF8pLHU9MCxjPWUuZGF0YSxoPWwuZGF0YSxmPTA7ZjxzO2YrKyl7dmFyIGQ9ZjxhP186aTt1PSgwLG8uYXBwbHlNYXNrSW1hZ2VEYXRhKSh7c3JjOmMsc3JjUG9zOnUsZGVzdDpoLHdpZHRoOm4saGVpZ2h0OmR9KS5zcmNQb3MsdC5wdXRJbWFnZURhdGEobCwwLGYqXyl9fWZ1bmN0aW9uIEUodCxlKXtmb3IodmFyIHI9MCxuPVsic3Ryb2tlU3R5bGUiLCJmaWxsU3R5bGUiLCJmaWxsUnVsZSIsImdsb2JhbEFscGhhIiwibGluZVdpZHRoIiwibGluZUNhcCIsImxpbmVKb2luIiwibWl0ZXJMaW1pdCIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImZvbnQiXTtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTt2b2lkIDAhPT10W2ldJiYoZVtpXT10W2ldKX12b2lkIDAhPT10LnNldExpbmVEYXNoJiYoZS5zZXRMaW5lRGFzaCh0LmdldExpbmVEYXNoKCkpLGUubGluZURhc2hPZmZzZXQ9dC5saW5lRGFzaE9mZnNldCl9ZnVuY3Rpb24gUCh0LGUpe3Quc3Ryb2tlU3R5bGU9dC5maWxsU3R5bGU9ZXx8IiMwMDAwMDAiLHQuZmlsbFJ1bGU9Im5vbnplcm8iLHQuZ2xvYmFsQWxwaGE9MSx0LmxpbmVXaWR0aD0xLHQubGluZUNhcD0iYnV0dCIsdC5saW5lSm9pbj0ibWl0ZXIiLHQubWl0ZXJMaW1pdD0xMCx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuZm9udD0iMTBweCBzYW5zLXNlcmlmIix2b2lkIDAhPT10LnNldExpbmVEYXNoJiYodC5zZXRMaW5lRGFzaChbXSksdC5saW5lRGFzaE9mZnNldD0wKX1mdW5jdGlvbiBUKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTM7YTxpO2ErPTQpe3ZhciBvPXRbYV07aWYoMD09PW8pdFthLTNdPWUsdFthLTJdPXIsdFthLTFdPW47ZWxzZSBpZihvPDI1NSl7dmFyIHM9MjU1LW87dFthLTNdPXRbYS0zXSpvK2Uqcz4+OCx0W2EtMl09dFthLTJdKm8rcipzPj44LHRbYS0xXT10W2EtMV0qbytuKnM+Pjh9fX1mdW5jdGlvbiBDKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT0zO2k8bjtpKz00KXt2YXIgYT1yP3JbdFtpXV06dFtpXTtlW2ldPWVbaV0qYSouMDAzOTIxNTY4NjI3NDUwOTh8MH19ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MztpPG47aSs9NCl7dmFyIGE9NzcqdFtpLTNdKzE1Mip0W2ktMl0rMjgqdFtpLTFdO2VbaV09cj9lW2ldKnJbYT4+OF0+Pjg6ZVtpXSphPj4xNn19ZnVuY3Rpb24gRih0LGUpe3ZhciByPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0KTtyWzBdPU1hdGguZnJvdW5kKHJbMF0pLHJbMV09TWF0aC5mcm91bmQoclsxXSk7dmFyIGE9TWF0aC5mcm91bmQoKGdsb2JhbFRoaXMuZGV2aWNlUGl4ZWxSYXRpb3x8MSkqaS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMpO3JldHVybiB2b2lkIDAhPT1lP2U6clswXTw9YXx8clsxXTw9YX12YXIgTT1bImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdLFI9WyJtaXRlciIsInJvdW5kIiwiYmV2ZWwiXSxJPXt9LGo9e30sTD1uZXcgV2Vha1NldCxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpLGEsbyxzKXt2YXIgbCx1LGM9YS5vcHRpb25hbENvbnRlbnRDb25maWcsaD1hLm1hcmtlZENvbnRlbnRTdGFjayxmPXZvaWQgMD09PWg/bnVsbDpoO3YodGhpcyx0KSxmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KGw9dGhpcyx1PUwpLHUuYWRkKGwpLHRoaXMuY3R4PWUsdGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnN0YXRlU3RhY2s9W10sdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMucGVuZGluZ0VPRmlsbD0hMSx0aGlzLnJlcz1udWxsLHRoaXMueG9ianM9bnVsbCx0aGlzLmNvbW1vbk9ianM9cix0aGlzLm9ianM9bix0aGlzLmNhbnZhc0ZhY3Rvcnk9aSx0aGlzLmdyb3VwU3RhY2s9W10sdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm09bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjaz1bXSx0aGlzLmdyb3VwTGV2ZWw9MCx0aGlzLnNtYXNrU3RhY2s9W10sdGhpcy5zbWFza0NvdW50ZXI9MCx0aGlzLnRlbXBTTWFzaz1udWxsLHRoaXMuc3VzcGVuZGVkQ3R4PW51bGwsdGhpcy5jb250ZW50VmlzaWJsZT0hMCx0aGlzLm1hcmtlZENvbnRlbnRTdGFjaz1mfHxbXSx0aGlzLm9wdGlvbmFsQ29udGVudENvbmZpZz1jLHRoaXMuY2FjaGVkQ2FudmFzZXM9bmV3IHcodGhpcy5jYW52YXNGYWN0b3J5KSx0aGlzLmNhY2hlZFBhdHRlcm5zPW5ldyBNYXAsdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwPW8sdGhpcy52aWV3cG9ydFNjYWxlPTEsdGhpcy5vdXRwdXRTY2FsZVg9MSx0aGlzLm91dHB1dFNjYWxlWT0xLHRoaXMuYmFja2dyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmJhY2tncm91bmQpfHxudWxsLHRoaXMuZm9yZWdyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmZvcmVncm91bmQpfHxudWxsLHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmc9bnVsbCx0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwsdGhpcy5fY2FjaGVkQml0bWFwc01hcD1uZXcgTWFwfXJldHVybiBtKHQsW3trZXk6ImdldE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3RhcnRzV2l0aCgiZ18iKT90aGlzLmNvbW1vbk9ianMuZ2V0KHQpOnRoaXMub2Jqcy5nZXQodCk6ZX19LHtrZXk6ImJlZ2luRHJhd2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXQudHJhbnNmb3JtLGE9dC52aWV3cG9ydCxvPXQudHJhbnNwYXJlbmN5LHM9dm9pZCAwIT09byYmbyx1PXQuYmFja2dyb3VuZCxjPXZvaWQgMD09PXU/bnVsbDp1LGY9dGhpcy5jdHguY2FudmFzLndpZHRoLGQ9dGhpcy5jdHguY2FudmFzLmhlaWdodCxwPWN8fCIjZmZmZmZmIjtpZih0aGlzLmN0eC5zYXZlKCksdGhpcy5mb3JlZ3JvdW5kQ29sb3ImJnRoaXMuYmFja2dyb3VuZENvbG9yKXt0aGlzLmN0eC5maWxsU3R5bGU9dGhpcy5mb3JlZ3JvdW5kQ29sb3I7dmFyIHY9dGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO3RoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcjt2YXIgeSxtLGc9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO2lmKHRoaXMuY3R4LmZpbGxTdHlsZT1wLHk9InN0cmluZyI9PXR5cGVvZihtPXRoaXMuY3R4LmZpbGxTdHlsZSkmJi9eI1swLTlBLUZhLWZdezZ9JC8udGVzdChtKSwiIzAwMDAwMCI9PT12JiYiI2ZmZmZmZiI9PT1nfHx2PT09Z3x8IXkpdGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbDtlbHNle3ZhciBiPWgoKDAsaS5nZXRSR0IpKG0pLDMpLF89YlswXSx3PWJbMV0sQT1iWzJdLGs9ZnVuY3Rpb24odCl7cmV0dXJuKHQvPTI1NSk8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9LFM9TWF0aC5yb3VuZCguMjEyNiprKF8pKy43MTUyKmsodykrLjA3MjIqayhBKSk7dGhpcy5zZWxlY3RDb2xvcj1mdW5jdGlvbih0LGUscil7dmFyIG49LjIxMjYqayh0KSsuNzE1MiprKGUpKy4wNzIyKmsocik7cmV0dXJuIE1hdGgucm91bmQobik9PT1TP2c6dn19fWlmKHRoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcnx8cCx0aGlzLmN0eC5maWxsUmVjdCgwLDAsZixkKSx0aGlzLmN0eC5yZXN0b3JlKCkscyl7dmFyIHgsRT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygidHJhbnNwYXJlbnQiLGYsZCk7dGhpcy5jb21wb3NpdGVDdHg9dGhpcy5jdHgsdGhpcy50cmFuc3BhcmVudENhbnZhcz1FLmNhbnZhcyx0aGlzLmN0eD1FLmNvbnRleHQsdGhpcy5jdHguc2F2ZSgpLCh4PXRoaXMuY3R4KS50cmFuc2Zvcm0uYXBwbHkoeCxsKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jb21wb3NpdGVDdHgpKSl9dGhpcy5jdHguc2F2ZSgpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpLG4mJigocj10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KHIsbChuKSksdGhpcy5vdXRwdXRTY2FsZVg9blswXSx0aGlzLm91dHB1dFNjYWxlWT1uWzBdKSwoZT10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KGUsbChhLnRyYW5zZm9ybSkpLHRoaXMudmlld3BvcnRTY2FsZT1hLnNjYWxlLHRoaXMuYmFzZVRyYW5zZm9ybT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KX19LHtrZXk6ImV4ZWN1dGVPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuYXJnc0FycmF5LG89dC5mbkFycmF5LHM9ZXx8MCxsPWEubGVuZ3RoO2lmKGw9PT1zKXJldHVybiBzO2Zvcih2YXIgdSxoPWwtcz4xMCYmImZ1bmN0aW9uIj09dHlwZW9mIHIsZj1oP0RhdGUubm93KCkrMTU6MCxkPTAscD10aGlzLmNvbW1vbk9ianMsdj10aGlzLm9ianM7Oyl7aWYodm9pZCAwIT09aSYmcz09PWkubmV4dEJyZWFrUG9pbnQpcmV0dXJuIGkuYnJlYWtJdChzLHIpLHM7aWYoKHU9b1tzXSkhPT1uLk9QUy5kZXBlbmRlbmN5KXRoaXNbdV0uYXBwbHkodGhpcyxhW3NdKTtlbHNle3ZhciB5LG09YyhhW3NdKTt0cnl7Zm9yKG0ucygpOyEoeT1tLm4oKSkuZG9uZTspe3ZhciBnPXkudmFsdWUsYj1nLnN0YXJ0c1dpdGgoImdfIik/cDp2O2lmKCFiLmhhcyhnKSlyZXR1cm4gYi5nZXQoZyxyKSxzfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19aWYoKytzPT09bClyZXR1cm4gcztpZihoJiYrK2Q+MTApe2lmKERhdGUubm93KCk+ZilyZXR1cm4gcigpLHM7ZD0wfX19fSx7a2V5OiJlbmREcmF3aW5nIix2YWx1ZTpmdW5jdGlvbigpe3UodGhpcyxMLE4pLmNhbGwodGhpcyksdGhpcy5jYWNoZWRDYW52YXNlcy5jbGVhcigpLHRoaXMuY2FjaGVkUGF0dGVybnMuY2xlYXIoKTt2YXIgdCxlPWModGhpcy5fY2FjaGVkQml0bWFwc01hcC52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcixuPXQudmFsdWUsaT1jKG4udmFsdWVzKCkpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTsidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZhIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQmJihhLndpZHRoPWEuaGVpZ2h0PTApfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1uLmNsZWFyKCl9fWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfXRoaXMuX2NhY2hlZEJpdG1hcHNNYXAuY2xlYXIoKX19LHtrZXk6Il9zY2FsZUltYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9dC53aWR0aCxhPXQuaGVpZ2h0LG89TWF0aC5tYXgoTWF0aC5oeXBvdChlWzBdLGVbMV0pLDEpLHM9TWF0aC5tYXgoTWF0aC5oeXBvdChlWzJdLGVbM10pLDEpLGw9aSx1PWEsYz0icHJlc2NhbGUxIjtvPjImJmw+MXx8cz4yJiZ1PjE7KXt2YXIgaD1sLGY9dTtvPjImJmw+MSYmKG8vPWwvKGg9TWF0aC5jZWlsKGwvMikpKSxzPjImJnU+MSYmKHMvPXUvKGY9TWF0aC5jZWlsKHUvMikpKSwobj0ocj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhjLGgsZikpLmNvbnRleHQpLmNsZWFyUmVjdCgwLDAsaCxmKSxuLmRyYXdJbWFnZSh0LDAsMCxsLHUsMCwwLGgsZiksdD1yLmNhbnZhcyxsPWgsdT1mLGM9InByZXNjYWxlMSI9PT1jPyJwcmVzY2FsZTIiOiJwcmVzY2FsZTEifXJldHVybntpbWc6dCxwYWludFdpZHRoOmwscGFpbnRIZWlnaHQ6dX19fSx7a2V5OiJfY3JlYXRlTWFza0NhbnZhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixvLHMsdT10aGlzLmN0eCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXRoaXMuY3VycmVudC5maWxsQ29sb3IsZD10aGlzLmN1cnJlbnQucGF0dGVybkZpbGwscD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHUpO2lmKCh0LmJpdG1hcHx8dC5kYXRhKSYmdC5jb3VudD4xKXt2YXIgdj10LmJpdG1hcHx8dC5kYXRhLmJ1ZmZlcjtyPUpTT04uc3RyaW5naWZ5KGQ/cDpbcC5zbGljZSgwLDQpLGZdKSwoZT10aGlzLl9jYWNoZWRCaXRtYXBzTWFwLmdldCh2KSl8fChlPW5ldyBNYXAsdGhpcy5fY2FjaGVkQml0bWFwc01hcC5zZXQodixlKSk7dmFyIHk9ZS5nZXQocik7aWYoeSYmIWQpcmV0dXJue2NhbnZhczp5LG9mZnNldFg6TWF0aC5yb3VuZChNYXRoLm1pbihwWzBdLHBbMl0pK3BbNF0pLG9mZnNldFk6TWF0aC5yb3VuZChNYXRoLm1pbihwWzFdLHBbM10pK3BbNV0pfTtvPXl9b3x8eCgocz10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsYyxoKSkuY29udGV4dCx0KTt2YXIgbT1uLlV0aWwudHJhbnNmb3JtKHAsWzEvYywwLDAsLTEvaCwwLDBdKTttPW4uVXRpbC50cmFuc2Zvcm0obSxbMSwwLDAsMSwwLC1oXSk7dmFyIGc9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFswLDBdLG0pLGI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtjLGhdLG0pLF89bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2dbMF0sZ1sxXSxiWzBdLGJbMV1dKSx3PU1hdGgucm91bmQoX1syXS1fWzBdKXx8MSxrPU1hdGgucm91bmQoX1szXS1fWzFdKXx8MSxTPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJmaWxsQ2FudmFzIix3LGspLEU9Uy5jb250ZXh0LFA9TWF0aC5taW4oZ1swXSxiWzBdKSxUPU1hdGgubWluKGdbMV0sYlsxXSk7RS50cmFuc2xhdGUoLVAsLVQpLEUudHJhbnNmb3JtLmFwcGx5KEUsbChtKSksb3x8KG89KG89dGhpcy5fc2NhbGVJbWFnZShzLmNhbnZhcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSkpLmltZyxlJiZkJiZlLnNldChyLG8pKSxFLmltYWdlU21vb3RoaW5nRW5hYmxlZD1GKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkoRSksdC5pbnRlcnBvbGF0ZSksQShFLG8sMCwwLG8ud2lkdGgsby5oZWlnaHQsMCwwLGMsaCksRS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiI7dmFyIEM9bi5VdGlsLnRyYW5zZm9ybSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSxbMSwwLDAsMSwtUCwtVF0pO3JldHVybiBFLmZpbGxTdHlsZT1kP2YuZ2V0UGF0dGVybih1LHRoaXMsQyxhLlBhdGhUeXBlLkZJTEwpOmYsRS5maWxsUmVjdCgwLDAsYyxoKSxlJiYhZCYmKHRoaXMuY2FjaGVkQ2FudmFzZXMuZGVsZXRlKCJmaWxsQ2FudmFzIiksZS5zZXQocixTLmNhbnZhcykpLHtjYW52YXM6Uy5jYW52YXMsb2Zmc2V0WDpNYXRoLnJvdW5kKFApLG9mZnNldFk6TWF0aC5yb3VuZChUKX19fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3QhPT10aGlzLmN1cnJlbnQubGluZVdpZHRoJiYodGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsKSx0aGlzLmN1cnJlbnQubGluZVdpZHRoPXQsdGhpcy5jdHgubGluZVdpZHRoPXR9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN0eC5saW5lQ2FwPU1bdF19fSx7a2V5OiJzZXRMaW5lSm9pbiIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdHgubGluZUpvaW49Ult0XX19LHtrZXk6InNldE1pdGVyTGltaXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3R4Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldERhc2giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jdHg7dm9pZCAwIT09ci5zZXRMaW5lRGFzaCYmKHIuc2V0TGluZURhc2godCksci5saW5lRGFzaE9mZnNldD1lKX19LHtrZXk6InNldFJlbmRlcmluZ0ludGVudCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0RmxhdG5lc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe319LHtrZXk6InNldEdTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1jKHQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49aChlLnZhbHVlLDIpLGk9blswXSxhPW5bMV07c3dpdGNoKGkpe2Nhc2UiTFciOnRoaXMuc2V0TGluZVdpZHRoKGEpO2JyZWFrO2Nhc2UiTEMiOnRoaXMuc2V0TGluZUNhcChhKTticmVhaztjYXNlIkxKIjp0aGlzLnNldExpbmVKb2luKGEpO2JyZWFrO2Nhc2UiTUwiOnRoaXMuc2V0TWl0ZXJMaW1pdChhKTticmVhaztjYXNlIkQiOnRoaXMuc2V0RGFzaChhWzBdLGFbMV0pO2JyZWFrO2Nhc2UiUkkiOnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KGEpO2JyZWFrO2Nhc2UiRkwiOnRoaXMuc2V0RmxhdG5lc3MoYSk7YnJlYWs7Y2FzZSJGb250Ijp0aGlzLnNldEZvbnQoYVswXSxhWzFdKTticmVhaztjYXNlIkNBIjp0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9YTticmVhaztjYXNlImNhIjp0aGlzLmN1cnJlbnQuZmlsbEFscGhhPWEsdGhpcy5jdHguZ2xvYmFsQWxwaGE9YTticmVhaztjYXNlIkJNIjp0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YTticmVhaztjYXNlIlNNYXNrIjp0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s9YT90aGlzLnRlbXBTTWFzazpudWxsLHRoaXMudGVtcFNNYXNrPW51bGwsdGhpcy5jaGVja1NNYXNrU3RhdGUoKTticmVhaztjYXNlIlRSIjp0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzPWF9fX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fSx7a2V5OiJpblNNYXNrTW9kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnN1c3BlbmRlZEN0eH19LHtrZXk6ImNoZWNrU01hc2tTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluU01hc2tNb2RlO3RoaXMuY3VycmVudC5hY3RpdmVTTWFzayYmIXQ/dGhpcy5iZWdpblNNYXNrTW9kZSgpOiF0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2smJnQmJnRoaXMuZW5kU01hc2tNb2RlKCl9fSx7a2V5OiJiZWdpblNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmluU01hc2tNb2RlKXRocm93IG5ldyBFcnJvcigiYmVnaW5TTWFza01vZGUgY2FsbGVkIHdoaWxlIGFscmVhZHkgaW4gc21hc2sgbW9kZSIpO3ZhciB0PXRoaXMuY3R4LmNhbnZhcy53aWR0aCxlPXRoaXMuY3R4LmNhbnZhcy5oZWlnaHQscj0ic21hc2tHcm91cEF0Iit0aGlzLmdyb3VwTGV2ZWwsbj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhyLHQsZSk7dGhpcy5zdXNwZW5kZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9bi5jb250ZXh0O3ZhciBhPXRoaXMuY3R4O2Euc2V0VHJhbnNmb3JtLmFwcGx5KGEsbCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuc3VzcGVuZGVkQ3R4KSkpLEUodGhpcy5zdXNwZW5kZWRDdHgsYSksZnVuY3Rpb24odCxlKXtpZih0Ll9yZW1vdmVNaXJyb3JpbmcpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IGlzIGFscmVhZHkgZm9yd2FyZGluZyBvcGVyYXRpb25zLiIpO3QuX19vcmlnaW5hbFNhdmU9dC5zYXZlLHQuX19vcmlnaW5hbFJlc3RvcmU9dC5yZXN0b3JlLHQuX19vcmlnaW5hbFJvdGF0ZT10LnJvdGF0ZSx0Ll9fb3JpZ2luYWxTY2FsZT10LnNjYWxlLHQuX19vcmlnaW5hbFRyYW5zbGF0ZT10LnRyYW5zbGF0ZSx0Ll9fb3JpZ2luYWxUcmFuc2Zvcm09dC50cmFuc2Zvcm0sdC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtPXQuc2V0VHJhbnNmb3JtLHQuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtPXQucmVzZXRUcmFuc2Zvcm0sdC5fX29yaWdpbmFsQ2xpcD10LmNsaXAsdC5fX29yaWdpbmFsTW92ZVRvPXQubW92ZVRvLHQuX19vcmlnaW5hbExpbmVUbz10LmxpbmVUbyx0Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvPXQuYmV6aWVyQ3VydmVUbyx0Ll9fb3JpZ2luYWxSZWN0PXQucmVjdCx0Ll9fb3JpZ2luYWxDbG9zZVBhdGg9dC5jbG9zZVBhdGgsdC5fX29yaWdpbmFsQmVnaW5QYXRoPXQuYmVnaW5QYXRoLHQuX3JlbW92ZU1pcnJvcmluZz1mdW5jdGlvbigpe3Quc2F2ZT10Ll9fb3JpZ2luYWxTYXZlLHQucmVzdG9yZT10Ll9fb3JpZ2luYWxSZXN0b3JlLHQucm90YXRlPXQuX19vcmlnaW5hbFJvdGF0ZSx0LnNjYWxlPXQuX19vcmlnaW5hbFNjYWxlLHQudHJhbnNsYXRlPXQuX19vcmlnaW5hbFRyYW5zbGF0ZSx0LnRyYW5zZm9ybT10Ll9fb3JpZ2luYWxUcmFuc2Zvcm0sdC5zZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtLHQucmVzZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0sdC5jbGlwPXQuX19vcmlnaW5hbENsaXAsdC5tb3ZlVG89dC5fX29yaWdpbmFsTW92ZVRvLHQubGluZVRvPXQuX19vcmlnaW5hbExpbmVUbyx0LmJlemllckN1cnZlVG89dC5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyx0LnJlY3Q9dC5fX29yaWdpbmFsUmVjdCx0LmNsb3NlUGF0aD10Ll9fb3JpZ2luYWxDbG9zZVBhdGgsdC5iZWdpblBhdGg9dC5fX29yaWdpbmFsQmVnaW5QYXRoLGRlbGV0ZSB0Ll9yZW1vdmVNaXJyb3Jpbmd9LHQuc2F2ZT1mdW5jdGlvbigpe2Uuc2F2ZSgpLHRoaXMuX19vcmlnaW5hbFNhdmUoKX0sdC5yZXN0b3JlPWZ1bmN0aW9uKCl7ZS5yZXN0b3JlKCksdGhpcy5fX29yaWdpbmFsUmVzdG9yZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbih0LHIpe2UudHJhbnNsYXRlKHQsciksdGhpcy5fX29yaWdpbmFsVHJhbnNsYXRlKHQscil9LHQuc2NhbGU9ZnVuY3Rpb24odCxyKXtlLnNjYWxlKHQsciksdGhpcy5fX29yaWdpbmFsU2NhbGUodCxyKX0sdC50cmFuc2Zvcm09ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UudHJhbnNmb3JtKHQscixuLGksYSxvKSx0aGlzLl9fb3JpZ2luYWxUcmFuc2Zvcm0odCxyLG4saSxhLG8pfSx0LnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LHIsbixpLGEsbyl7ZS5zZXRUcmFuc2Zvcm0odCxyLG4saSxhLG8pLHRoaXMuX19vcmlnaW5hbFNldFRyYW5zZm9ybSh0LHIsbixpLGEsbyl9LHQucmVzZXRUcmFuc2Zvcm09ZnVuY3Rpb24oKXtlLnJlc2V0VHJhbnNmb3JtKCksdGhpcy5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0oKX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7ZS5yb3RhdGUodCksdGhpcy5fX29yaWdpbmFsUm90YXRlKHQpfSx0LmNsaXA9ZnVuY3Rpb24odCl7ZS5jbGlwKHQpLHRoaXMuX19vcmlnaW5hbENsaXAodCl9LHQubW92ZVRvPWZ1bmN0aW9uKHQscil7ZS5tb3ZlVG8odCxyKSx0aGlzLl9fb3JpZ2luYWxNb3ZlVG8odCxyKX0sdC5saW5lVG89ZnVuY3Rpb24odCxyKXtlLmxpbmVUbyh0LHIpLHRoaXMuX19vcmlnaW5hbExpbmVUbyh0LHIpfSx0LmJlemllckN1cnZlVG89ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UuYmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyksdGhpcy5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyl9LHQucmVjdD1mdW5jdGlvbih0LHIsbixpKXtlLnJlY3QodCxyLG4saSksdGhpcy5fX29yaWdpbmFsUmVjdCh0LHIsbixpKX0sdC5jbG9zZVBhdGg9ZnVuY3Rpb24oKXtlLmNsb3NlUGF0aCgpLHRoaXMuX19vcmlnaW5hbENsb3NlUGF0aCgpfSx0LmJlZ2luUGF0aD1mdW5jdGlvbigpe2UuYmVnaW5QYXRoKCksdGhpcy5fX29yaWdpbmFsQmVnaW5QYXRoKCl9fShhLHRoaXMuc3VzcGVuZGVkQ3R4KSx0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKX19LHtrZXk6ImVuZFNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pblNNYXNrTW9kZSl0aHJvdyBuZXcgRXJyb3IoImVuZFNNYXNrTW9kZSBjYWxsZWQgd2hpbGUgbm90IGluIHNtYXNrIG1vZGUiKTt0aGlzLmN0eC5fcmVtb3ZlTWlycm9yaW5nKCksRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5jdHg9dGhpcy5zdXNwZW5kZWRDdHgsdGhpcy5zdXNwZW5kZWRDdHg9bnVsbH19LHtrZXk6ImNvbXBvc2UiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayl7dD8odFswXT1NYXRoLmZsb29yKHRbMF0pLHRbMV09TWF0aC5mbG9vcih0WzFdKSx0WzJdPU1hdGguY2VpbCh0WzJdKSx0WzNdPU1hdGguY2VpbCh0WzNdKSk6dD1bMCwwLHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0XTt2YXIgZT10aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s7KGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5bMF0sYT1uWzFdLG89blsyXS1pLHM9blszXS1hOzAhPT1vJiYwIT09cyYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLHUsYyl7dmFyIGgsZj0hIWEsZD1mP2FbMF06MCxwPWY/YVsxXTowLHY9Zj9hWzJdOjA7aD0iTHVtaW5vc2l0eSI9PT1pP086Qztmb3IodmFyIHk9TWF0aC5taW4obixNYXRoLmNlaWwoMTA0ODU3Ni9yKSksbT0wO208bjttKz15KXt2YXIgZz1NYXRoLm1pbih5LG4tbSksYj10LmdldEltYWdlRGF0YShzLXUsbSsobC1jKSxyLGcpLF89ZS5nZXRJbWFnZURhdGEocyxtK2wscixnKTtmJiZUKGIuZGF0YSxkLHAsdiksaChiLmRhdGEsXy5kYXRhLG8pLGUucHV0SW1hZ2VEYXRhKF8scyxtK2wpfX0oZS5jb250ZXh0LHIsbyxzLGUuc3VidHlwZSxlLmJhY2tkcm9wLGUudHJhbnNmZXJNYXAsaSxhLGUub2Zmc2V0WCxlLm9mZnNldFkpLHQuc2F2ZSgpLHQuZ2xvYmFsQWxwaGE9MSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0LmRyYXdJbWFnZShyLmNhbnZhcywwLDApLHQucmVzdG9yZSgpKX0pKHRoaXMuc3VzcGVuZGVkQ3R4LGUsdGhpcy5jdHgsdCksdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguY2xlYXJSZWN0KDAsMCx0aGlzLmN0eC5jYW52YXMud2lkdGgsdGhpcy5jdHguY2FudmFzLmhlaWdodCksdGhpcy5jdHgucmVzdG9yZSgpfX19LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pblNNYXNrTW9kZT8oRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5zdXNwZW5kZWRDdHguc2F2ZSgpKTp0aGlzLmN0eC5zYXZlKCk7dmFyIHQ9dGhpcy5jdXJyZW50O3RoaXMuc3RhdGVTdGFjay5wdXNoKHQpLHRoaXMuY3VycmVudD10LmNsb25lKCl9fSx7a2V5OiJyZXN0b3JlIix2YWx1ZTpmdW5jdGlvbigpezA9PT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiZ0aGlzLmluU01hc2tNb2RlJiZ0aGlzLmVuZFNNYXNrTW9kZSgpLDAhPT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiYodGhpcy5jdXJyZW50PXRoaXMuc3RhdGVTdGFjay5wb3AoKSx0aGlzLmluU01hc2tNb2RlPyh0aGlzLnN1c3BlbmRlZEN0eC5yZXN0b3JlKCksRSh0aGlzLnN1c3BlbmRlZEN0eCx0aGlzLmN0eCkpOnRoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLmNoZWNrU01hc2tTdGF0ZSgpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY3R4LnRyYW5zZm9ybSh0LGUscixuLGksYSksdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsLHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9bnVsbH19LHtrZXk6ImNvbnN0cnVjdFBhdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGEsbyxzPXRoaXMuY3R4LGw9dGhpcy5jdXJyZW50LHU9bC54LGM9bC55LGg9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShzKSxmPTA9PT1oWzBdJiYwPT09aFszXXx8MD09PWhbMV0mJjA9PT1oWzJdLGQ9Zj9yLnNsaWNlKDApOm51bGwscD0wLHY9MCx5PXQubGVuZ3RoO3A8eTtwKyspc3dpdGNoKDB8dFtwXSl7Y2FzZSBuLk9QUy5yZWN0YW5nbGU6dT1lW3YrK10sYz1lW3YrK107dmFyIG09ZVt2KytdLGc9ZVt2KytdLGI9dSttLF89YytnO3MubW92ZVRvKHUsYyksMD09PW18fDA9PT1nP3MubGluZVRvKGIsXyk6KHMubGluZVRvKGIsYykscy5saW5lVG8oYixfKSxzLmxpbmVUbyh1LF8pKSxmfHxsLnVwZGF0ZVJlY3RNaW5NYXgoaCxbdSxjLGIsX10pLHMuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSBuLk9QUy5tb3ZlVG86dT1lW3YrK10sYz1lW3YrK10scy5tb3ZlVG8odSxjKSxmfHxsLnVwZGF0ZVBhdGhNaW5NYXgoaCx1LGMpO2JyZWFrO2Nhc2Ugbi5PUFMubGluZVRvOnU9ZVt2KytdLGM9ZVt2KytdLHMubGluZVRvKHUsYyksZnx8bC51cGRhdGVQYXRoTWluTWF4KGgsdSxjKTticmVhaztjYXNlIG4uT1BTLmN1cnZlVG86YT11LG89Yyx1PWVbdis0XSxjPWVbdis1XSxzLmJlemllckN1cnZlVG8oZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sdSxjLGQpLHYrPTY7YnJlYWs7Y2FzZSBuLk9QUy5jdXJ2ZVRvMjphPXUsbz1jLHMuYmV6aWVyQ3VydmVUbyh1LGMsZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSksbC51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoaCxhLG8sdSxjLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sZCksdT1lW3YrMl0sYz1lW3YrM10sdis9NDticmVhaztjYXNlIG4uT1BTLmN1cnZlVG8zOmE9dSxvPWMsdT1lW3YrMl0sYz1lW3YrM10scy5iZXppZXJDdXJ2ZVRvKGVbdl0sZVt2KzFdLHUsYyx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLHUsYyx1LGMsZCksdis9NDticmVhaztjYXNlIG4uT1BTLmNsb3NlUGF0aDpzLmNsb3NlUGF0aCgpfWYmJmwudXBkYXRlU2NhbGluZ1BhdGhNaW5NYXgoaCxkKSxsLnNldEN1cnJlbnRQb2ludCh1LGMpfX0se2tleToiY2xvc2VQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY3R4LmNsb3NlUGF0aCgpfX0se2tleToic3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5zdHJva2VBbHBoYSx0aGlzLmNvbnRlbnRWaXNpYmxlJiYoIm9iamVjdCI9PT1wKHIpJiZudWxsIT1yJiZyLmdldFBhdHRlcm4/KGUuc2F2ZSgpLGUuc3Ryb2tlU3R5bGU9ci5nZXRQYXR0ZXJuKGUsdGhpcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKSxhLlBhdGhUeXBlLlNUUk9LRSksdGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCExKSxlLnJlc3RvcmUoKSk6dGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCEwKSksdCYmdGhpcy5jb25zdW1lUGF0aCh0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpKSxlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5maWxsQWxwaGF9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5maWxsQ29sb3Isbj0hMTt0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwmJihlLnNhdmUoKSxlLmZpbGxTdHlsZT1yLmdldFBhdHRlcm4oZSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKGUpLGEuUGF0aFR5cGUuRklMTCksbj0hMCk7dmFyIG89dGhpcy5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goKTt0aGlzLmNvbnRlbnRWaXNpYmxlJiZudWxsIT09byYmKHRoaXMucGVuZGluZ0VPRmlsbD8oZS5maWxsKCJldmVub2RkIiksdGhpcy5wZW5kaW5nRU9GaWxsPSExKTplLmZpbGwoKSksbiYmZS5yZXN0b3JlKCksdCYmdGhpcy5jb25zdW1lUGF0aChvKX19LHtrZXk6ImVvRmlsbCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZmlsbCghMSksdGhpcy5zdHJva2UoITEpLHRoaXMuY29uc3VtZVBhdGgoKX19LHtrZXk6ImVvRmlsbFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0VPRmlsbD0hMCx0aGlzLmNsb3NlUGF0aCgpLHRoaXMuZmlsbFN0cm9rZSgpfX0se2tleToiZW5kUGF0aCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN1bWVQYXRoKCl9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0NsaXA9SX19LHtrZXk6ImVvQ2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdDbGlwPWp9fSx7a2V5OiJiZWdpblRleHQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVgsdGhpcy5jdXJyZW50LnRleHRNYXRyaXhTY2FsZT0xLHRoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wLHRoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBlbmRpbmdUZXh0UGF0aHMsZT10aGlzLmN0eDtpZih2b2lkIDAhPT10KXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpO3ZhciByLG49Yyh0KTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zZXRUcmFuc2Zvcm0uYXBwbHkoZSxsKGkudHJhbnNmb3JtKSksZS50cmFuc2xhdGUoaS54LGkueSksaS5hZGRUb1BhdGgoZSxpLmZvbnRTaXplKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9ZS5yZXN0b3JlKCksZS5jbGlwKCksZS5iZWdpblBhdGgoKSxkZWxldGUgdGhpcy5wZW5kaW5nVGV4dFBhdGhzfWVsc2UgZS5iZWdpblBhdGgoKX19LHtrZXk6InNldENoYXJTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuY2hhclNwYWNpbmc9dH19LHtrZXk6InNldFdvcmRTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9dH19LHtrZXk6InNldEhTY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRIU2NhbGU9dC8xMDB9fSx7a2V5OiJzZXRMZWFkaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGVhZGluZz0tdH19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21tb25PYmpzLmdldCh0KSxpPXRoaXMuY3VycmVudDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGZpbmQgZm9udCBmb3IgIi5jb25jYXQodCkpO2lmKGkuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsMCE9PWkuZm9udE1hdHJpeFswXSYmMCE9PWkuZm9udE1hdHJpeFszXXx8KDAsbi53YXJuKSgiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCAiK3QpLGU8MD8oZT0tZSxpLmZvbnREaXJlY3Rpb249LTEpOmkuZm9udERpcmVjdGlvbj0xLHRoaXMuY3VycmVudC5mb250PXIsdGhpcy5jdXJyZW50LmZvbnRTaXplPWUsIXIuaXNUeXBlM0ZvbnQpe3ZhciBhPXIubG9hZGVkTmFtZXx8InNhbnMtc2VyaWYiLG89Im5vcm1hbCI7ci5ibGFjaz9vPSI5MDAiOnIuYm9sZCYmKG89ImJvbGQiKTt2YXIgcz1yLml0YWxpYz8iaXRhbGljIjoibm9ybWFsIixsPSciJy5jb25jYXQoYSwnIiwgJykuY29uY2F0KHIuZmFsbGJhY2tOYW1lKSx1PWU7ZTwxNj91PTE2OmU+MTAwJiYodT0xMDApLHRoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlPWUvdSx0aGlzLmN0eC5mb250PSIiLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiAiKS5jb25jYXQodSwicHggIikuY29uY2F0KGwpfX19LHtrZXk6InNldFRleHRSZW5kZXJpbmdNb2RlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGU9dH19LHtrZXk6InNldFRleHRSaXNlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJpc2U9dH19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWCs9dCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVkrPWV9fSx7a2V5OiJzZXRMZWFkaW5nTW92ZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRMZWFkaW5nKC1lKSx0aGlzLm1vdmVUZXh0KHQsZSl9fSx7a2V5OiJzZXRUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9W3QsZSxyLG4saSxhXSx0aGlzLmN1cnJlbnQudGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSx0aGlzLmN1cnJlbnQueD10aGlzLmN1cnJlbnQubGluZVg9MCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVk9MH19LHtrZXk6Im5leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubW92ZVRleHQoMCx0aGlzLmN1cnJlbnQubGVhZGluZyl9fSx7a2V5OiJwYWludENoYXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM9dGhpcy5jdHgsdT10aGlzLmN1cnJlbnQsYz11LmZvbnQsaD11LnRleHRSZW5kZXJpbmdNb2RlLGY9dS5mb250U2l6ZS91LmZvbnRTaXplU2NhbGUsZD1oJm4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSyxwPSEhKGgmbi5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKSx2PXUucGF0dGVybkZpbGwmJiFjLm1pc3NpbmdGaWxlOyhjLmRpc2FibGVGb250RmFjZXx8cHx8dikmJihvPWMuZ2V0UGF0aEdlbmVyYXRvcih0aGlzLmNvbW1vbk9ianMsdCkpLGMuZGlzYWJsZUZvbnRGYWNlfHx2PyhzLnNhdmUoKSxzLnRyYW5zbGF0ZShlLHIpLHMuYmVnaW5QYXRoKCksbyhzLGYpLGEmJnMuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbChhKSksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuZmlsbCgpLGQhPT1uLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuc3Ryb2tlKCkscy5yZXN0b3JlKCkpOihkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5maWxsVGV4dCh0LGUsciksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5zdHJva2VUZXh0KHQsZSxyKSkscCYmKHRoaXMucGVuZGluZ1RleHRQYXRoc3x8KHRoaXMucGVuZGluZ1RleHRQYXRocz1bXSkpLnB1c2goe3RyYW5zZm9ybTooMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHMpLHg6ZSx5OnIsZm9udFNpemU6ZixhZGRUb1BhdGg6b30pfX0se2tleToiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCIsMTAsMTApLmNvbnRleHQ7dC5zY2FsZSgxLjUsMSksdC5maWxsVGV4dCgiSSIsMCwxMCk7Zm9yKHZhciBlPXQuZ2V0SW1hZ2VEYXRhKDAsMCwxMCwxMCkuZGF0YSxyPSExLGk9MztpPGUubGVuZ3RoO2krPTQpaWYoZVtpXT4wJiZlW2ldPDI1NSl7cj0hMDticmVha31yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLHIpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udDtpZihyLmlzVHlwZTNGb250KXJldHVybiB0aGlzLnNob3dUeXBlM1RleHQodCk7dmFyIG89ZS5mb250U2l6ZTtpZigwIT09byl7dmFyIHMsdT10aGlzLmN0eCxoPWUuZm9udFNpemVTY2FsZSxmPWUuY2hhclNwYWNpbmcsZD1lLndvcmRTcGFjaW5nLHA9ZS5mb250RGlyZWN0aW9uLHY9ZS50ZXh0SFNjYWxlKnAseT10Lmxlbmd0aCxtPXIudmVydGljYWwsZz1tPzE6LTEsYj1yLmRlZmF1bHRWTWV0cmljcyxfPW8qZS5mb250TWF0cml4WzBdLHc9ZS50ZXh0UmVuZGVyaW5nTW9kZT09PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmIXIuZGlzYWJsZUZvbnRGYWNlJiYhZS5wYXR0ZXJuRmlsbDtpZih1LnNhdmUoKSx1LnRyYW5zZm9ybS5hcHBseSh1LGwoZS50ZXh0TWF0cml4KSksdS50cmFuc2xhdGUoZS54LGUueStlLnRleHRSaXNlKSxwPjA/dS5zY2FsZSh2LC0xKTp1LnNjYWxlKHYsMSksZS5wYXR0ZXJuRmlsbCl7dS5zYXZlKCk7dmFyIEE9ZS5maWxsQ29sb3IuZ2V0UGF0dGVybih1LHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkodSksYS5QYXRoVHlwZS5GSUxMKTtzPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodSksdS5yZXN0b3JlKCksdS5maWxsU3R5bGU9QX12YXIgaz1lLmxpbmVXaWR0aCxTPWUudGV4dE1hdHJpeFNjYWxlO2lmKDA9PT1TfHwwPT09ayl7dmFyIHg9ZS50ZXh0UmVuZGVyaW5nTW9kZSZuLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7eCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZ4IT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8KGs9dGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpfWVsc2Ugay89UztpZigxIT09aCYmKHUuc2NhbGUoaCxoKSxrLz1oKSx1LmxpbmVXaWR0aD1rLHIuaXNJbnZhbGlkUERGanNGb250KXt2YXIgRSxQPVtdLFQ9MCxDPWModCk7dHJ5e2ZvcihDLnMoKTshKEU9Qy5uKCkpLmRvbmU7KXt2YXIgTz1FLnZhbHVlO1AucHVzaChPLnVuaWNvZGUpLFQrPU8ud2lkdGh9fWNhdGNoKHQpe0MuZSh0KX1maW5hbGx5e0MuZigpfXJldHVybiB1LmZpbGxUZXh0KFAuam9pbigiIiksMCwwKSxlLngrPVQqXyp2LHUucmVzdG9yZSgpLHZvaWQgdGhpcy5jb21wb3NlKCl9dmFyIEYsTT0wO2ZvcihGPTA7Rjx5OysrRil7dmFyIFI9dFtGXTtpZigibnVtYmVyIiE9dHlwZW9mIFIpe3ZhciBJPSExLGo9KFIuaXNTcGFjZT9kOjApK2YsTD1SLmZvbnRDaGFyLEQ9Ui5hY2NlbnQsTj12b2lkIDAsVT12b2lkIDAsVz1SLndpZHRoO2lmKG0pe3ZhciBHPVIudm1ldHJpY3x8YixCPS0oUi52bWV0cmljP0dbMV06LjUqVykqXyxxPUdbMl0qXztXPUc/LUdbMF06VyxOPUIvaCxVPShNK3EpL2h9ZWxzZSBOPU0vaCxVPTA7aWYoci5yZW1lYXN1cmUmJlc+MCl7dmFyIEg9MWUzKnUubWVhc3VyZVRleHQoTCkud2lkdGgvbypoO2lmKFc8SCYmdGhpcy5pc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCl7dmFyIHo9Vy9IO0k9ITAsdS5zYXZlKCksdS5zY2FsZSh6LDEpLE4vPXp9ZWxzZSBXIT09SCYmKE4rPShXLUgpLzJlMypvL2gpfWlmKHRoaXMuY29udGVudFZpc2libGUmJihSLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSlpZih3JiYhRCl1LmZpbGxUZXh0KEwsTixVKTtlbHNlIGlmKHRoaXMucGFpbnRDaGFyKEwsTixVLHMpLEQpe3ZhciBWPU4rbypELm9mZnNldC54L2gsWD1VLW8qRC5vZmZzZXQueS9oO3RoaXMucGFpbnRDaGFyKEQuZm9udENoYXIsVixYLHMpfU0rPW0/VypfLWoqcDpXKl8raipwLEkmJnUucmVzdG9yZSgpfWVsc2UgTSs9ZypSKm8vMWUzfW0/ZS55LT1NOmUueCs9TSp2LHUucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InNob3dUeXBlM1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG89dGhpcy5jdHgscz10aGlzLmN1cnJlbnQsdT1zLmZvbnQsYz1zLmZvbnRTaXplLGg9cy5mb250RGlyZWN0aW9uLGY9dS52ZXJ0aWNhbD8xOi0xLGQ9cy5jaGFyU3BhY2luZyxwPXMud29yZFNwYWNpbmcsdj1zLnRleHRIU2NhbGUqaCx5PXMuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWCxtPXQubGVuZ3RoO2lmKHMudGV4dFJlbmRlcmluZ01vZGUhPT1uLlRleHRSZW5kZXJpbmdNb2RlLklOVklTSUJMRSYmMCE9PWMpe2Zvcih0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsLG8uc2F2ZSgpLG8udHJhbnNmb3JtLmFwcGx5KG8sbChzLnRleHRNYXRyaXgpKSxvLnRyYW5zbGF0ZShzLngscy55KSxvLnNjYWxlKHYsaCksZT0wO2U8bTsrK2UpaWYoIm51bWJlciIhPXR5cGVvZihyPXRbZV0pKXt2YXIgZz0oci5pc1NwYWNlP3A6MCkrZCxiPXUuY2hhclByb2NPcGVyYXRvckxpc3Rbci5vcGVyYXRvckxpc3RJZF07Yj8odGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMucHJvY2Vzc2luZ1R5cGUzPXIsdGhpcy5zYXZlKCksby5zY2FsZShjLGMpLG8udHJhbnNmb3JtLmFwcGx5KG8sbCh5KSksdGhpcy5leGVjdXRlT3BlcmF0b3JMaXN0KGIpLHRoaXMucmVzdG9yZSgpKSxpPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbci53aWR0aCwwXSx5KVswXSpjK2csby50cmFuc2xhdGUoaSwwKSxzLngrPWkqdik6KDAsbi53YXJuKSgnVHlwZTMgY2hhcmFjdGVyICInLmNvbmNhdChyLm9wZXJhdG9yTGlzdElkLCciIGlzIG5vdCBhdmFpbGFibGUuJykpfWVsc2UgYT1mKnIqYy8xZTMsdGhpcy5jdHgudHJhbnNsYXRlKGEsMCkscy54Kz1hKnY7by5yZXN0b3JlKCksdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbH19fSx7a2V5OiJzZXRDaGFyV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToic2V0Q2hhcldpZHRoQW5kQm91bmRzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdHgucmVjdChyLG4saS1yLGEtbiksdGhpcy5jdHguY2xpcCgpLHRoaXMuZW5kUGF0aCgpfX0se2tleToiZ2V0Q29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcztpZigiVGlsaW5nUGF0dGVybiI9PT1lWzBdKXt2YXIgbz1lWzFdLHM9dGhpcy5iYXNlVHJhbnNmb3JtfHwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxsPXtjcmVhdGVDYW52YXNHcmFwaGljczpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSxuLmNvbW1vbk9ianMsbi5vYmpzLG4uY2FudmFzRmFjdG9yeSx7b3B0aW9uYWxDb250ZW50Q29uZmlnOm4ub3B0aW9uYWxDb250ZW50Q29uZmlnLG1hcmtlZENvbnRlbnRTdGFjazpuLm1hcmtlZENvbnRlbnRTdGFja30pfX07cj1uZXcgYS5UaWxpbmdQYXR0ZXJuKGUsbyx0aGlzLmN0eCxsLHMpfWVsc2Ugcj10aGlzLl9nZXRQYXR0ZXJuKGVbMV0sZVsyXSk7cmV0dXJuIHJ9fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPXRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKX19LHtrZXk6InNldEZpbGxDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LmZpbGxDb2xvcj10aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyksdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsPSEwfX0se2tleToic2V0U3Ryb2tlUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LnN0cm9rZVN0eWxlPWEsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWF9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LmZpbGxTdHlsZT1hLHRoaXMuY3VycmVudC5maWxsQ29sb3I9YSx0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw9ITF9fSx7a2V5OiJfZ2V0UGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJucy5oYXModCk/ZT10aGlzLmNhY2hlZFBhdHRlcm5zLmdldCh0KTooZT0oMCxhLmdldFNoYWRpbmdQYXR0ZXJuKSh0aGlzLm9ianMuZ2V0KHQpKSx0aGlzLmNhY2hlZFBhdHRlcm5zLnNldCh0LGUpKSxyJiYoZS5tYXRyaXg9ciksZX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmN0eDt0aGlzLnNhdmUoKTt2YXIgcj10aGlzLl9nZXRQYXR0ZXJuKHQpO2UuZmlsbFN0eWxlPXIuZ2V0UGF0dGVybihlLHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoZSksYS5QYXRoVHlwZS5TSEFESU5HKTt2YXIgbz0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKTtpZihvKXt2YXIgcz1lLmNhbnZhcyxsPXMud2lkdGgsdT1zLmhlaWdodCxjPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCwwXSxvKSxoPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCx1XSxvKSxmPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCwwXSxvKSxkPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCx1XSxvKSxwPU1hdGgubWluKGNbMF0saFswXSxmWzBdLGRbMF0pLHY9TWF0aC5taW4oY1sxXSxoWzFdLGZbMV0sZFsxXSkseT1NYXRoLm1heChjWzBdLGhbMF0sZlswXSxkWzBdKSxtPU1hdGgubWF4KGNbMV0saFsxXSxmWzFdLGRbMV0pO3RoaXMuY3R4LmZpbGxSZWN0KHAsdix5LXAsbS12KX1lbHNlIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLC0xZTEwLDJlMTAsMmUxMCk7dGhpcy5jb21wb3NlKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpLHRoaXMucmVzdG9yZSgpfX19LHtrZXk6ImJlZ2luSW5saW5lSW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlIil9fSx7a2V5OiJiZWdpbkltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhIil9fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuc2F2ZSgpLHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKSxBcnJheS5pc0FycmF5KHQpJiY2PT09dC5sZW5ndGgmJnRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbCh0KSksdGhpcy5iYXNlVHJhbnNmb3JtPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpLGUpKXt2YXIgcj1lWzJdLWVbMF0sbj1lWzNdLWVbMV07dGhpcy5jdHgucmVjdChlWzBdLGVbMV0scixuKSx0aGlzLmN1cnJlbnQudXBkYXRlUmVjdE1pbk1heCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxlKSx0aGlzLmNsaXAoKSx0aGlzLmVuZFBhdGgoKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0RW5kIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGVudFZpc2libGUmJih0aGlzLnJlc3RvcmUoKSx0aGlzLmJhc2VUcmFuc2Zvcm09dGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sucG9wKCkpfX0se2tleToiYmVnaW5Hcm91cCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5jb250ZW50VmlzaWJsZSl7dGhpcy5zYXZlKCksdGhpcy5pblNNYXNrTW9kZSYmKHRoaXMuZW5kU01hc2tNb2RlKCksdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrPW51bGwpO3ZhciBlPXRoaXMuY3R4O3QuaXNvbGF0ZWR8fCgwLG4uaW5mbykoIlRPRE86IFN1cHBvcnQgbm9uLWlzb2xhdGVkIGdyb3Vwcy4iKSx0Lmtub2Nrb3V0JiYoMCxuLndhcm4pKCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC4iKTt2YXIgcj0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGUpO2lmKHQubWF0cml4JiZlLnRyYW5zZm9ybS5hcHBseShlLGwodC5tYXRyaXgpKSwhdC5iYm94KXRocm93IG5ldyBFcnJvcigiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLiIpO3ZhciBhPW4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LmJib3gsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSksbz1bMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodF07YT1uLlV0aWwuaW50ZXJzZWN0KGEsbyl8fFswLDAsMCwwXTt2YXIgcz1NYXRoLmZsb29yKGFbMF0pLHU9TWF0aC5mbG9vcihhWzFdKSxjPU1hdGgubWF4KE1hdGguY2VpbChhWzJdKS1zLDEpLGg9TWF0aC5tYXgoTWF0aC5jZWlsKGFbM10pLXUsMSksZj0xLGQ9MTtjPmcmJihmPWMvZyxjPWcpLGg+ZyYmKGQ9aC9nLGg9ZyksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3goWzAsMCxjLGhdKTt2YXIgcD0iZ3JvdXBBdCIrdGhpcy5ncm91cExldmVsO3Quc21hc2smJihwKz0iX3NtYXNrXyIrdGhpcy5zbWFza0NvdW50ZXIrKyUyKTt2YXIgdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhwLGMsaCkseT12LmNvbnRleHQ7eS5zY2FsZSgxL2YsMS9kKSx5LnRyYW5zbGF0ZSgtcywtdSkseS50cmFuc2Zvcm0uYXBwbHkoeSxsKHIpKSx0LnNtYXNrP3RoaXMuc21hc2tTdGFjay5wdXNoKHtjYW52YXM6di5jYW52YXMsY29udGV4dDp5LG9mZnNldFg6cyxvZmZzZXRZOnUsc2NhbGVYOmYsc2NhbGVZOmQsc3VidHlwZTp0LnNtYXNrLnN1YnR5cGUsYmFja2Ryb3A6dC5zbWFzay5iYWNrZHJvcCx0cmFuc2Zlck1hcDp0LnNtYXNrLnRyYW5zZmVyTWFwfHxudWxsLHN0YXJ0VHJhbnNmb3JtSW52ZXJzZTpudWxsfSk6KGUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxlLnRyYW5zbGF0ZShzLHUpLGUuc2NhbGUoZixkKSxlLnNhdmUoKSksRShlLHkpLHRoaXMuY3R4PXksdGhpcy5zZXRHU3RhdGUoW1siQk0iLCJzb3VyY2Utb3ZlciJdLFsiY2EiLDFdLFsiQ0EiLDFdXSksdGhpcy5ncm91cFN0YWNrLnB1c2goZSksdGhpcy5ncm91cExldmVsKyt9fX0se2tleToiZW5kR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3RoaXMuZ3JvdXBMZXZlbC0tO3ZhciBlPXRoaXMuY3R4LHI9dGhpcy5ncm91cFN0YWNrLnBvcCgpO2lmKHRoaXMuY3R4PXIsdGhpcy5jdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExLHQuc21hc2spdGhpcy50ZW1wU01hc2s9dGhpcy5zbWFza1N0YWNrLnBvcCgpLHRoaXMucmVzdG9yZSgpO2Vsc2V7dmFyIGE7dGhpcy5jdHgucmVzdG9yZSgpO3ZhciBvPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpO3RoaXMucmVzdG9yZSgpLHRoaXMuY3R4LnNhdmUoKSwoYT10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KGEsbChvKSk7dmFyIHM9bi5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0XSxvKTt0aGlzLmN0eC5kcmF3SW1hZ2UoZS5jYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy5jb21wb3NlKHMpfX19fSx7a2V5OiJiZWdpbkFubm90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM7aWYodSh0aGlzLEwsTikuY2FsbCh0aGlzKSxQKHRoaXMuY3R4LHRoaXMuZm9yZWdyb3VuZENvbG9yKSx0aGlzLmN0eC5zYXZlKCksdGhpcy5zYXZlKCksdGhpcy5iYXNlVHJhbnNmb3JtJiYocz10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbCh0aGlzLmJhc2VUcmFuc2Zvcm0pKSxBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGgpe3ZhciBjPWVbMl0tZVswXSxmPWVbM10tZVsxXTtpZihvJiZ0aGlzLmFubm90YXRpb25DYW52YXNNYXApeyhyPXIuc2xpY2UoKSlbNF0tPWVbMF0scls1XS09ZVsxXSwoZT1lLnNsaWNlKCkpWzBdPWVbMV09MCxlWzJdPWMsZVszXT1mO3ZhciBkPWgobi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpKSwyKSxwPWRbMF0sdj1kWzFdLHk9dGhpcy52aWV3cG9ydFNjYWxlLG09TWF0aC5jZWlsKGMqdGhpcy5vdXRwdXRTY2FsZVgqeSksZz1NYXRoLmNlaWwoZip0aGlzLm91dHB1dFNjYWxlWSp5KTt0aGlzLmFubm90YXRpb25DYW52YXM9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZShtLGcpO3ZhciBiPXRoaXMuYW5ub3RhdGlvbkNhbnZhcyxfPWIuY2FudmFzLHc9Yi5jb250ZXh0O3RoaXMuYW5ub3RhdGlvbkNhbnZhc01hcC5zZXQodCxfKSx0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9dyx0aGlzLmN0eC5zZXRUcmFuc2Zvcm0ocCwwLDAsLXYsMCxmKnYpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpfWVsc2UgUCh0aGlzLmN0eCx0aGlzLmZvcmVncm91bmRDb2xvciksdGhpcy5jdHgucmVjdChlWzBdLGVbMV0sYyxmKSx0aGlzLmN0eC5jbGlwKCksdGhpcy5lbmRQYXRoKCl9dGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLGwocikpLHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbChhKSl9fSx7a2V5OiJlbmRBbm5vdGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYW5ub3RhdGlvbkNhbnZhcyYmKHRoaXMuY3R4PXRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eCxkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzLnNhdmVkQ3R4LGRlbGV0ZSB0aGlzLmFubm90YXRpb25DYW52YXMpfX0se2tleToicGFpbnRJbWFnZU1hc2tYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10LmNvdW50Oyh0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KSkuY291bnQ9ZTt2YXIgcj10aGlzLmN0eCxuPXRoaXMucHJvY2Vzc2luZ1R5cGUzO2lmKG4mJih2b2lkIDA9PT1uLmNvbXBpbGVkJiYobi5jb21waWxlZD1mdW5jdGlvbih0KXt2YXIgZT10LndpZHRoLHI9dC5oZWlnaHQ7aWYoZT5ifHxyPmIpcmV0dXJuIG51bGw7dmFyIG4saSxhLG8scz1uZXcgVWludDhBcnJheShbMCwyLDQsMCwxLDAsNSw0LDgsMTAsMCw4LDAsMiwxLDBdKSxsPWUrMSx1PW5ldyBVaW50OEFycmF5KGwqKHIrMSkpLGg9ZSs3Ji04LGY9bmV3IFVpbnQ4QXJyYXkoaCpyKSxkPTAscD1jKHQuZGF0YSk7dHJ5e2ZvcihwLnMoKTshKG89cC5uKCkpLmRvbmU7KWZvcih2YXIgdj1vLnZhbHVlLHk9MTI4O3k+MDspZltkKytdPXYmeT8wOjI1NSx5Pj49MX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX12YXIgbT0wO2ZvcigwIT09ZltkPTBdJiYodVswXT0xLCsrbSksaT0xO2k8ZTtpKyspZltkXSE9PWZbZCsxXSYmKHVbaV09ZltkXT8yOjEsKyttKSxkKys7Zm9yKDAhPT1mW2RdJiYodVtpXT0yLCsrbSksbj0xO248cjtuKyspe2E9bipsLGZbKGQ9bipoKS1oXSE9PWZbZF0mJih1W2FdPWZbZF0/MTo4LCsrbSk7dmFyIGc9KGZbZF0/NDowKSsoZltkLWhdPzg6MCk7Zm9yKGk9MTtpPGU7aSsrKXNbZz0oZz4+MikrKGZbZCsxXT80OjApKyhmW2QtaCsxXT84OjApXSYmKHVbYStpXT1zW2ddLCsrbSksZCsrO2lmKGZbZC1oXSE9PWZbZF0mJih1W2EraV09ZltkXT8yOjQsKyttKSxtPjFlMylyZXR1cm4gbnVsbH1mb3IoYT1uKmwsMCE9PWZbZD1oKihyLTEpXSYmKHVbYV09OCwrK20pLGk9MTtpPGU7aSsrKWZbZF0hPT1mW2QrMV0mJih1W2EraV09ZltkXT80OjgsKyttKSxkKys7aWYoMCE9PWZbZF0mJih1W2EraV09NCwrK20pLG0+MWUzKXJldHVybiBudWxsO3ZhciBfPW5ldyBJbnQzMkFycmF5KFswLGwsLTEsMCwtbCwwLDAsMCwxXSksdz1uZXcgUGF0aDJEO2ZvcihuPTA7bSYmbjw9cjtuKyspe2Zvcih2YXIgQT1uKmwsaz1BK2U7QTxrJiYhdVtBXTspQSsrO2lmKEEhPT1rKXt3Lm1vdmVUbyhBJWwsbik7dmFyIFM9QSx4PXVbQV07ZG97dmFyIEU9X1t4XTtkb3tBKz1FfXdoaWxlKCF1W0FdKTt2YXIgUD11W0FdOzUhPT1QJiYxMCE9PVA/KHg9UCx1W0FdPTApOih4PVAmNTEqeD4+NCx1W0FdJj14Pj4yfHg8PDIpLHcubGluZVRvKEElbCxBL2x8MCksdVtBXXx8LS1tfXdoaWxlKFMhPT1BKTstLW59fXJldHVybiBmPW51bGwsdT1udWxsLGZ1bmN0aW9uKHQpe3Quc2F2ZSgpLHQuc2NhbGUoMS9lLC0xL3IpLHQudHJhbnNsYXRlKDAsLXIpLHQuZmlsbCh3KSx0LmJlZ2luUGF0aCgpLHQucmVzdG9yZSgpfX0odCkpLG4uY29tcGlsZWQpKW4uY29tcGlsZWQocik7ZWxzZXt2YXIgaT10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpLGE9aS5jYW52YXM7ci5zYXZlKCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHIuZHJhd0ltYWdlKGEsaS5vZmZzZXRYLGkub2Zmc2V0WSksci5yZXN0b3JlKCksdGhpcy5jb21wb3NlKCl9fX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTp2b2lkIDAscz1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOnZvaWQgMDtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KTt2YXIgbD10aGlzLmN0eDtsLnNhdmUoKTt2YXIgdT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGwpO2wudHJhbnNmb3JtKGUscixhLG8sMCwwKTt2YXIgYz10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpO2wuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYy5vZmZzZXRYLXVbNF0sYy5vZmZzZXRZLXVbNV0pO2Zvcih2YXIgZj0wLGQ9cy5sZW5ndGg7ZjxkO2YrPTIpe3ZhciBwPW4uVXRpbC50cmFuc2Zvcm0odSxbZSxyLGEsbyxzW2ZdLHNbZisxXV0pLHY9aChuLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0scCksMikseT12WzBdLG09dlsxXTtsLmRyYXdJbWFnZShjLmNhbnZhcyx5LG0pfWwucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZSxyPXRoaXMuY3R4LG49dGhpcy5jdXJyZW50LmZpbGxDb2xvcixvPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxzPWModCk7dHJ5e2ZvcihzLnMoKTshKGU9cy5uKCkpLmRvbmU7KXt2YXIgdT1lLnZhbHVlLGg9dS5kYXRhLGY9dS53aWR0aCxkPXUuaGVpZ2h0LHA9dS50cmFuc2Zvcm0sdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsZixkKSx5PXYuY29udGV4dDt5LnNhdmUoKSx4KHksdGhpcy5nZXRPYmplY3QoaCx1KSkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIseS5maWxsU3R5bGU9bz9uLmdldFBhdHRlcm4oeSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKHIpLGEuUGF0aFR5cGUuRklMTCk6bix5LmZpbGxSZWN0KDAsMCxmLGQpLHkucmVzdG9yZSgpLHIuc2F2ZSgpLHIudHJhbnNmb3JtLmFwcGx5KHIsbChwKSksci5zY2FsZSgxLC0xKSxBKHIsdi5jYW52YXMsMCwwLGYsZCwwLC0xLDEsMSksci5yZXN0b3JlKCl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmdldE9iamVjdCh0KTtlP3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSk6KDAsbi53YXJuKSgiRGVwZW5kZW50IGltYWdlIGlzbid0IHJlYWR5IHlldCIpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpKXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgYT10aGlzLmdldE9iamVjdCh0KTtpZihhKXtmb3IodmFyIG89YS53aWR0aCxzPWEuaGVpZ2h0LGw9W10sdT0wLGM9aS5sZW5ndGg7dTxjO3UrPTIpbC5wdXNoKHt0cmFuc2Zvcm06W2UsMCwwLHIsaVt1XSxpW3UrMV1dLHg6MCx5OjAsdzpvLGg6c30pO3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cChhLGwpfWVsc2UoMCxuLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iil9fX0se2tleToicGFpbnRJbmxpbmVJbWFnZVhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciBlLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGE9dGhpcy5jdHg7aWYodGhpcy5zYXZlKCksYS5zY2FsZSgxL3IsLTEvbiksImZ1bmN0aW9uIj09dHlwZW9mIEhUTUxFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fCF0LmRhdGEpZT10O2Vsc2V7dmFyIG89dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixyLG4pO1Moby5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyksZT1vLmNhbnZhc312YXIgcz10aGlzLl9zY2FsZUltYWdlKGUsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoYSkpO2EuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPUYoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShhKSx0LmludGVycG9sYXRlKSxBKGEscy5pbWcsMCwwLHMucGFpbnRXaWR0aCxzLnBhaW50SGVpZ2h0LDAsLW4scixuKSx0aGlzLmNvbXBvc2UoKSx0aGlzLnJlc3RvcmUoKX19fSx7a2V5OiJwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciByPXRoaXMuY3R4LG49dC53aWR0aCxpPXQuaGVpZ2h0LGE9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixuLGkpO1MoYS5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyk7dmFyIG8scz1jKGUpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIHU9by52YWx1ZTtyLnNhdmUoKSxyLnRyYW5zZm9ybS5hcHBseShyLGwodS50cmFuc2Zvcm0pKSxyLnNjYWxlKDEsLTEpLEEocixhLmNhbnZhcyx1LngsdS55LHUudyx1LmgsMCwtMSwxLDEpLHIucmVzdG9yZSgpfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX10aGlzLmNvbXBvc2UoKX19fSx7a2V5OiJwYWludFNvbGlkQ29sb3JJbWFnZU1hc2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuY3R4LmZpbGxSZWN0KDAsMCwxLDEpLHRoaXMuY29tcG9zZSgpKX19LHtrZXk6Im1hcmtQb2ludCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToibWFya1BvaW50UHJvcHMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToiYmVnaW5NYXJrZWRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOiEwfSl9fSx7a2V5OiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXsiT0MiPT09dD90aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOnRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShlKX0pOnRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe3Zpc2libGU6ITB9KSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiZW5kTWFya2VkQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wb3AoKSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiYmVnaW5Db21wYXQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiZW5kQ29tcGF0Iix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImNvbnN1bWVQYXRoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQuaXNFbXB0eUNsaXAoKTt0aGlzLnBlbmRpbmdDbGlwJiZ0aGlzLmN1cnJlbnQudXBkYXRlQ2xpcEZyb21QYXRoKCksdGhpcy5wZW5kaW5nQ2xpcHx8dGhpcy5jb21wb3NlKHQpO3ZhciByPXRoaXMuY3R4O3RoaXMucGVuZGluZ0NsaXAmJihlfHwodGhpcy5wZW5kaW5nQ2xpcD09PWo/ci5jbGlwKCJldmVub2RkIik6ci5jbGlwKCkpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3godGhpcy5jdXJyZW50LmNsaXBCb3gpLHIuYmVnaW5QYXRoKCl9fSx7a2V5OiJnZXRTaW5nbGVQaXhlbFdpZHRoIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoKXt2YXIgdD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KTtpZigwPT09dFsxXSYmMD09PXRbMl0pdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD0xL01hdGgubWluKE1hdGguYWJzKHRbMF0pLE1hdGguYWJzKHRbM10pKTtlbHNle3ZhciBlPU1hdGguYWJzKHRbMF0qdFszXS10WzJdKnRbMV0pLHI9TWF0aC5oeXBvdCh0WzBdLHRbMl0pLG49TWF0aC5oeXBvdCh0WzFdLHRbM10pO3RoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9TWF0aC5tYXgocixuKS9lfX1yZXR1cm4gdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aH19LHtrZXk6ImdldFNjYWxlRm9yU3Ryb2tpbmciLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmcpe3ZhciB0LGUscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCk7aWYoMD09PW5bMV0mJjA9PT1uWzJdKXt2YXIgYT1NYXRoLmFicyhuWzBdKSxvPU1hdGguYWJzKG5bM10pO2lmKDA9PT1yKXQ9MS9hLGU9MS9vO2Vsc2V7dmFyIHM9YSpyLGw9bypyO3Q9czwxPzEvczoxLGU9bDwxPzEvbDoxfX1lbHNle3ZhciB1PU1hdGguYWJzKG5bMF0qblszXS1uWzJdKm5bMV0pLGM9TWF0aC5oeXBvdChuWzBdLG5bMV0pLGg9TWF0aC5oeXBvdChuWzJdLG5bM10pO2lmKDA9PT1yKXQ9aC91LGU9Yy91O2Vsc2V7dmFyIGY9cip1O3Q9aD5mP2gvZjoxLGU9Yz5mP2MvZjoxfX10aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPVt0LGVdfXJldHVybiB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nfX0se2tleToicmVzY2FsZUFuZFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdHgscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49aCh0aGlzLmdldFNjYWxlRm9yU3Ryb2tpbmcoKSwyKSxhPW5bMF0sbz1uWzFdO2lmKGUubGluZVdpZHRoPXJ8fDEsMSE9PWF8fDEhPT1vKXt2YXIgcyx1LGM7dCYmKHM9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSx1PWUuZ2V0TGluZURhc2goKS5zbGljZSgpLGM9ZS5saW5lRGFzaE9mZnNldCksZS5zY2FsZShhLG8pO3ZhciBmPU1hdGgubWF4KGEsbyk7ZS5zZXRMaW5lRGFzaChlLmdldExpbmVEYXNoKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9mfSkpKSxlLmxpbmVEYXNoT2Zmc2V0Lz1mLGUuc3Ryb2tlKCksdCYmKGUuc2V0VHJhbnNmb3JtLmFwcGx5KGUsbChzKSksZS5zZXRMaW5lRGFzaCh1KSxlLmxpbmVEYXNoT2Zmc2V0PWMpfWVsc2UgZS5zdHJva2UoKX19LHtrZXk6ImlzQ29udGVudFZpc2libGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubWFya2VkQ29udGVudFN0YWNrLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKCF0aGlzLm1hcmtlZENvbnRlbnRTdGFja1t0XS52aXNpYmxlKXJldHVybiExO3JldHVybiEwfX1dKSx0fSgpO2Z1bmN0aW9uIE4oKXtmb3IoO3RoaXMuc3RhdGVTdGFjay5sZW5ndGh8fHRoaXMuaW5TTWFza01vZGU7KXRoaXMucmVzdG9yZSgpO3RoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLnRyYW5zcGFyZW50Q2FudmFzJiYodGhpcy5jdHg9dGhpcy5jb21wb3NpdGVDdHgsdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMudHJhbnNwYXJlbnRDYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy50cmFuc3BhcmVudENhbnZhcz1udWxsKX1mb3IodmFyIFUgaW4gZS5DYW52YXNHcmFwaGljcz1ELG4uT1BTKXZvaWQgMCE9PUQucHJvdG90eXBlW1VdJiYoRC5wcm90b3R5cGVbbi5PUFNbVV1dPUQucHJvdG90eXBlW1VdKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlRpbGluZ1BhdHRlcm49ZS5QYXRoVHlwZT12b2lkIDAsZS5nZXRTaGFkaW5nUGF0dGVybj1mdW5jdGlvbih0KXtzd2l0Y2godFswXSl7Y2FzZSJSYWRpYWxBeGlhbCI6cmV0dXJuIG5ldyB3KHQpO2Nhc2UiTWVzaCI6cmV0dXJuIG5ldyBTKHQpO2Nhc2UiRHVtbXkiOnJldHVybiBuZXcgeH10aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSVIgdHlwZTogIi5jb25jYXQodFswXSkpfTt2YXIgbj1yKDEpLGk9cigxMzcpLGE9cigzKTtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB1KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8bCh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmaCh0LGUpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LGgodCxlKX1mdW5jdGlvbiBmKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQodCk7aWYoZSl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGkpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1wKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxkKHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz17RklMTDoiRmlsbCIsU1RST0tFOiJTdHJva2UiLFNIQURJTkc6IlNoYWRpbmcifTtmdW5jdGlvbiBiKHQsZSl7aWYoZSYmIWEuaXNOb2RlSlMpe3ZhciByPWVbMl0tZVswXSxuPWVbM10tZVsxXSxpPW5ldyBQYXRoMkQ7aS5yZWN0KGVbMF0sZVsxXSxyLG4pLHQuY2xpcChpKX19ZS5QYXRoVHlwZT1nO3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3YodGhpcyx0KSx0aGlzLmNvbnN0cnVjdG9yPT09dCYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTaGFkaW5nUGF0dGVybi4iKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldFBhdHRlcm5gIGNhbGxlZC4iKX19XSksdH0oKSx3PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl90eXBlPXRbMV0sbi5fYmJveD10WzJdLG4uX2NvbG9yU3RvcHM9dFszXSxuLl9wMD10WzRdLG4uX3AxPXRbNV0sbi5fcjA9dFs2XSxuLl9yMT10WzddLG4ubWF0cml4PW51bGwsbn1yZXR1cm4gbShyLFt7a2V5OiJfY3JlYXRlR3JhZGllbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlOyJheGlhbCI9PT10aGlzLl90eXBlP2U9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0aGlzLl9wMFswXSx0aGlzLl9wMFsxXSx0aGlzLl9wMVswXSx0aGlzLl9wMVsxXSk6InJhZGlhbCI9PT10aGlzLl90eXBlJiYoZT10LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHRoaXMuX3AwWzBdLHRoaXMuX3AwWzFdLHRoaXMuX3IwLHRoaXMuX3AxWzBdLHRoaXMuX3AxWzFdLHRoaXMuX3IxKSk7dmFyIHIsbj1zKHRoaXMuX2NvbG9yU3RvcHMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9ci52YWx1ZTtlLmFkZENvbG9yU3RvcChpWzBdLGlbMV0pfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gZX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzO2lmKGE9PT1nLlNUUk9LRXx8YT09PWcuRklMTCl7dmFyIGw9ZS5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goYSwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKXx8WzAsMCwwLDBdLHU9TWF0aC5jZWlsKGxbMl0tbFswXSl8fDEsYz1NYXRoLmNlaWwobFszXS1sWzFdKXx8MSxoPWUuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIix1LGMsITApLGY9aC5jb250ZXh0O2YuY2xlYXJSZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYuYmVnaW5QYXRoKCksZi5yZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYudHJhbnNsYXRlKC1sWzBdLC1sWzFdKSxyPW4uVXRpbC50cmFuc2Zvcm0ocixbMSwwLDAsMSxsWzBdLGxbMV1dKSxmLnRyYW5zZm9ybS5hcHBseShmLG8oZS5iYXNlVHJhbnNmb3JtKSksdGhpcy5tYXRyaXgmJmYudHJhbnNmb3JtLmFwcGx5KGYsbyh0aGlzLm1hdHJpeCkpLGIoZix0aGlzLl9iYm94KSxmLmZpbGxTdHlsZT10aGlzLl9jcmVhdGVHcmFkaWVudChmKSxmLmZpbGwoKSxzPXQuY3JlYXRlUGF0dGVybihoLmNhbnZhcywibm8tcmVwZWF0Iik7dmFyIGQ9bmV3IERPTU1hdHJpeChyKTtzLnNldFRyYW5zZm9ybShkKX1lbHNlIGIodCx0aGlzLl9iYm94KSxzPXRoaXMuX2NyZWF0ZUdyYWRpZW50KHQpO3JldHVybiBzfX1dKSxyfShfKTtmdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsdT1lLmNvb3JkcyxjPWUuY29sb3JzLGg9dC5kYXRhLGY9NCp0LndpZHRoO3VbcisxXT51W24rMV0mJihsPXIscj1uLG49bCxsPWEsYT1vLG89bCksdVtuKzFdPnVbaSsxXSYmKGw9bixuPWksaT1sLGw9byxvPXMscz1sKSx1W3IrMV0+dVtuKzFdJiYobD1yLHI9bixuPWwsbD1hLGE9byxvPWwpO3ZhciBkPSh1W3JdK2Uub2Zmc2V0WCkqZS5zY2FsZVgscD0odVtyKzFdK2Uub2Zmc2V0WSkqZS5zY2FsZVksdj0odVtuXStlLm9mZnNldFgpKmUuc2NhbGVYLHk9KHVbbisxXStlLm9mZnNldFkpKmUuc2NhbGVZLG09KHVbaV0rZS5vZmZzZXRYKSplLnNjYWxlWCxnPSh1W2krMV0rZS5vZmZzZXRZKSplLnNjYWxlWTtpZighKHA+PWcpKWZvcih2YXIgYixfLHcsQSxrLFMseCxFLFA9Y1thXSxUPWNbYSsxXSxDPWNbYSsyXSxPPWNbb10sRj1jW28rMV0sTT1jW28rMl0sUj1jW3NdLEk9Y1tzKzFdLGo9Y1tzKzJdLEw9TWF0aC5yb3VuZChwKSxEPU1hdGgucm91bmQoZyksTj1MO048PUQ7TisrKXtpZihOPHkpe3ZhciBVO2I9ZC0oZC12KSooVT1OPHA/MDoocC1OKS8ocC15KSksXz1QLShQLU8pKlUsdz1ULShULUYpKlUsQT1DLShDLU0pKlV9ZWxzZXt2YXIgVztiPXYtKHYtbSkqKFc9Tj5nPzE6eT09PWc/MDooeS1OKS8oeS1nKSksXz1PLShPLVIpKlcsdz1GLShGLUkpKlcsQT1NLShNLWopKld9dmFyIEc9dm9pZCAwO2s9ZC0oZC1tKSooRz1OPHA/MDpOPmc/MToocC1OKS8ocC1nKSksUz1QLShQLVIpKkcseD1ULShULUkpKkcsRT1DLShDLWopKkc7Zm9yKHZhciBCPU1hdGgucm91bmQoTWF0aC5taW4oYixrKSkscT1NYXRoLnJvdW5kKE1hdGgubWF4KGIsaykpLEg9ZipOKzQqQix6PUI7ejw9cTt6KyspKEc9KGIteikvKGItaykpPDA/Rz0wOkc+MSYmKEc9MSksaFtIKytdPV8tKF8tUykqR3wwLGhbSCsrXT13LSh3LXgpKkd8MCxoW0grK109QS0oQS1FKSpHfDAsaFtIKytdPTI1NX19ZnVuY3Rpb24gayh0LGUscil7dmFyIG4saSxhPWUuY29vcmRzLG89ZS5jb2xvcnM7c3dpdGNoKGUudHlwZSl7Y2FzZSJsYXR0aWNlIjp2YXIgcz1lLnZlcnRpY2VzUGVyUm93LGw9TWF0aC5mbG9vcihhLmxlbmd0aC9zKS0xLHU9cy0xO2ZvcihuPTA7bjxsO24rKylmb3IodmFyIGM9bipzLGg9MDtoPHU7aCsrLGMrKylBKHQscixhW2NdLGFbYysxXSxhW2Mrc10sb1tjXSxvW2MrMV0sb1tjK3NdKSxBKHQscixhW2MrcysxXSxhW2MrMV0sYVtjK3NdLG9bYytzKzFdLG9bYysxXSxvW2Mrc10pO2JyZWFrO2Nhc2UidHJpYW5nbGVzIjpmb3Iobj0wLGk9YS5sZW5ndGg7bjxpO24rPTMpQSh0LHIsYVtuXSxhW24rMV0sYVtuKzJdLG9bbl0sb1tuKzFdLG9bbisyXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgZmlndXJlIil9fXZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl9jb29yZHM9dFsyXSxuLl9jb2xvcnM9dFszXSxuLl9maWd1cmVzPXRbNF0sbi5fYm91bmRzPXRbNV0sbi5fYmJveD10WzddLG4uX2JhY2tncm91bmQ9dFs4XSxuLm1hdHJpeD1udWxsLG59cmV0dXJuIG0ocixbe2tleToiX2NyZWF0ZU1lc2hDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1swXSksaT1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1sxXSksYT1NYXRoLmNlaWwodGhpcy5fYm91bmRzWzJdKS1uLG89TWF0aC5jZWlsKHRoaXMuX2JvdW5kc1szXSktaSxsPU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhhKnRbMF0qMS4xKSksM2UzKSx1PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhvKnRbMV0qMS4xKSksM2UzKSxjPWEvbCxoPW8vdSxmPXtjb29yZHM6dGhpcy5fY29vcmRzLGNvbG9yczp0aGlzLl9jb2xvcnMsb2Zmc2V0WDotbixvZmZzZXRZOi1pLHNjYWxlWDoxL2Msc2NhbGVZOjEvaH0sZD1sKzQscD11KzQsdj1yLmdldENhbnZhcygibWVzaCIsZCxwLCExKSx5PXYuY29udGV4dCxtPXkuY3JlYXRlSW1hZ2VEYXRhKGwsdSk7aWYoZSlmb3IodmFyIGc9bS5kYXRhLGI9MCxfPWcubGVuZ3RoO2I8XztiKz00KWdbYl09ZVswXSxnW2IrMV09ZVsxXSxnW2IrMl09ZVsyXSxnW2IrM109MjU1O3ZhciB3LEE9cyh0aGlzLl9maWd1cmVzKTt0cnl7Zm9yKEEucygpOyEodz1BLm4oKSkuZG9uZTspayhtLHcudmFsdWUsZil9Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9cmV0dXJuIHkucHV0SW1hZ2VEYXRhKG0sMiwyKSx7Y2FudmFzOnYuY2FudmFzLG9mZnNldFg6bi0yKmMsb2Zmc2V0WTppLTIqaCxzY2FsZVg6YyxzY2FsZVk6aH19fSx7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0LGUscixhKXt2YXIgcztpZihiKHQsdGhpcy5fYmJveCksYT09PWcuU0hBRElORylzPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKTtlbHNlIGlmKHM9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgpe3ZhciBsPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7cz1bc1swXSpsWzBdLHNbMV0qbFsxXV19dmFyIHU9dGhpcy5fY3JlYXRlTWVzaENhbnZhcyhzLGE9PT1nLlNIQURJTkc/bnVsbDp0aGlzLl9iYWNrZ3JvdW5kLGUuY2FjaGVkQ2FudmFzZXMpO3JldHVybiBhIT09Zy5TSEFESU5HJiYodC5zZXRUcmFuc2Zvcm0uYXBwbHkodCxvKGUuYmFzZVRyYW5zZm9ybSkpLHRoaXMubWF0cml4JiZ0LnRyYW5zZm9ybS5hcHBseSh0LG8odGhpcy5tYXRyaXgpKSksdC50cmFuc2xhdGUodS5vZmZzZXRYLHUub2Zmc2V0WSksdC5zY2FsZSh1LnNjYWxlWCx1LnNjYWxlWSksdC5jcmVhdGVQYXR0ZXJuKHUuY2FudmFzLCJuby1yZXBlYXQiKX19XSkscn0oXykseD1mdW5jdGlvbih0KXtjKHIsdCk7dmFyIGU9ZihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHYodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbShyLFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJob3RwaW5rIn19XSkscn0oXyksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4saSxhKXt2KHRoaXMsdCksdGhpcy5vcGVyYXRvckxpc3Q9ZVsyXSx0aGlzLm1hdHJpeD1lWzNdfHxbMSwwLDAsMSwwLDBdLHRoaXMuYmJveD1lWzRdLHRoaXMueHN0ZXA9ZVs1XSx0aGlzLnlzdGVwPWVbNl0sdGhpcy5wYWludFR5cGU9ZVs3XSx0aGlzLnRpbGluZ1R5cGU9ZVs4XSx0aGlzLmNvbG9yPXIsdGhpcy5jdHg9bix0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeT1pLHRoaXMuYmFzZVRyYW5zZm9ybT1hfXJldHVybiBtKHQsW3trZXk6ImNyZWF0ZVBhdHRlcm5DYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3BlcmF0b3JMaXN0LHI9dGhpcy5iYm94LGE9dGhpcy54c3RlcCxvPXRoaXMueXN0ZXAscz10aGlzLnBhaW50VHlwZSxsPXRoaXMudGlsaW5nVHlwZSx1PXRoaXMuY29sb3IsYz10aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeTsoMCxuLmluZm8pKCJUaWxpbmdUeXBlOiAiK2wpO3ZhciBoPXJbMF0sZj1yWzFdLGQ9clsyXSxwPXJbM10sdj1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5tYXRyaXgpLHk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSksbT1bdlswXSp5WzBdLHZbMV0qeVsxXV0sZz10aGlzLmdldFNpemVBbmRTY2FsZShhLHRoaXMuY3R4LmNhbnZhcy53aWR0aCxtWzBdKSxiPXRoaXMuZ2V0U2l6ZUFuZFNjYWxlKG8sdGhpcy5jdHguY2FudmFzLmhlaWdodCxtWzFdKSxfPXQuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIixnLnNpemUsYi5zaXplLCEwKSx3PV8uY29udGV4dCxBPWMuY3JlYXRlQ2FudmFzR3JhcGhpY3Modyk7QS5ncm91cExldmVsPXQuZ3JvdXBMZXZlbCx0aGlzLnNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChBLHMsdSk7dmFyIGs9aCxTPWYseD1kLEU9cDtyZXR1cm4gaDwwJiYoaz0wLHgrPU1hdGguYWJzKGgpKSxmPDAmJihTPTAsRSs9TWF0aC5hYnMoZikpLHcudHJhbnNsYXRlKC1nLnNjYWxlKmssLWIuc2NhbGUqUyksQS50cmFuc2Zvcm0oZy5zY2FsZSwwLDAsYi5zY2FsZSwwLDApLHcuc2F2ZSgpLHRoaXMuY2xpcEJib3goQSxrLFMseCxFKSxBLmJhc2VUcmFuc2Zvcm09KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShBLmN0eCksQS5leGVjdXRlT3BlcmF0b3JMaXN0KGUpLEEuZW5kRHJhd2luZygpLHtjYW52YXM6Xy5jYW52YXMsc2NhbGVYOmcuc2NhbGUsc2NhbGVZOmIuc2NhbGUsb2Zmc2V0WDprLG9mZnNldFk6U319fSx7a2V5OiJnZXRTaXplQW5kU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUscixuKXtlPU1hdGguYWJzKGUpO3ZhciBpPU1hdGgubWF4KHQuTUFYX1BBVFRFUk5fU0laRSxyKSxhPU1hdGguY2VpbChlKm4pO3JldHVybiBhPj1pP2E9aTpuPWEvZSx7c2NhbGU6bixzaXplOmF9fX0se2tleToiY2xpcEJib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89bi1lLHM9YS1yO3QuY3R4LnJlY3QoZSxyLG8scyksdC5jdXJyZW50LnVwZGF0ZVJlY3RNaW5NYXgoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0LmN0eCksW2UscixuLGFdKSx0LmNsaXAoKSx0LmVuZFBhdGgoKX19LHtrZXk6InNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuY3R4LGE9dC5jdXJyZW50O3N3aXRjaChlKXtjYXNlIDE6dmFyIG89dGhpcy5jdHg7aS5maWxsU3R5bGU9by5maWxsU3R5bGUsaS5zdHJva2VTdHlsZT1vLnN0cm9rZVN0eWxlLGEuZmlsbENvbG9yPW8uZmlsbFN0eWxlLGEuc3Ryb2tlQ29sb3I9by5zdHJva2VTdHlsZTticmVhaztjYXNlIDI6dmFyIHM9bi5VdGlsLm1ha2VIZXhDb2xvcihyWzBdLHJbMV0sclsyXSk7aS5maWxsU3R5bGU9cyxpLnN0cm9rZVN0eWxlPXMsYS5maWxsQ29sb3I9cyxhLnN0cm9rZUNvbG9yPXM7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgcGFpbnQgdHlwZTogIi5jb25jYXQoZSkpfX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXI7aSE9PWcuU0hBRElORyYmKGE9bi5VdGlsLnRyYW5zZm9ybShhLGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgmJihhPW4uVXRpbC50cmFuc2Zvcm0oYSx0aGlzLm1hdHJpeCkpKTt2YXIgbz10aGlzLmNyZWF0ZVBhdHRlcm5DYW52YXMoZSkscz1uZXcgRE9NTWF0cml4KGEpO3M9KHM9cy50cmFuc2xhdGUoby5vZmZzZXRYLG8ub2Zmc2V0WSkpLnNjYWxlKDEvby5zY2FsZVgsMS9vLnNjYWxlWSk7dmFyIGw9dC5jcmVhdGVQYXR0ZXJuKG8uY2FudmFzLCJyZXBlYXQiKTtyZXR1cm4gbC5zZXRUcmFuc2Zvcm0ocyksbH19XSxbe2tleToiTUFYX1BBVFRFUk5fU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1BWF9QQVRURVJOX1NJWkUiLDNlMyl9fV0pLHR9KCk7ZS5UaWxpbmdQYXR0ZXJuPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5hcHBseU1hc2tJbWFnZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNyYyxhPXQuc3JjUG9zLG89dm9pZCAwPT09YT8wOmEscz10LmRlc3QsbD10LmRlc3RQb3MsdT12b2lkIDA9PT1sPzA6bCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXQuaW52ZXJzZURlY29kZSxkPXZvaWQgMCE9PWYmJmYscD1uLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuPzQyNzgxOTAwODA6MjU1LHY9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0oZT1kP1swLHBdOltwLDBdKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQ7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGkodCwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKHQsMik6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSx5PXZbMF0sbT12WzFdLGc9Yz4+MyxiPTcmYyxfPXIubGVuZ3RoO3M9bmV3IFVpbnQzMkFycmF5KHMuYnVmZmVyKTtmb3IodmFyIHc9MDt3PGg7dysrKXtmb3IodmFyIEE9bytnO288QTtvKyspe3ZhciBrPW88Xz9yW29dOjI1NTtzW3UrK109MTI4Jms/bTp5LHNbdSsrXT02NCZrP206eSxzW3UrK109MzImaz9tOnksc1t1KytdPTE2Jms/bTp5LHNbdSsrXT04Jms/bTp5LHNbdSsrXT00Jms/bTp5LHNbdSsrXT0yJms/bTp5LHNbdSsrXT0xJms/bTp5fWlmKDAhPT1iKWZvcih2YXIgUz1vPF8/cltvKytdOjI1NSx4PTA7eDxiO3grKylzW3UrK109UyYxPDw3LXg/bTp5fXJldHVybntzcmNQb3M6byxkZXN0UG9zOnV9fTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuR2xvYmFsV29ya2VyT3B0aW9ucz12b2lkIDA7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtlLkdsb2JhbFdvcmtlck9wdGlvbnM9cixyLndvcmtlclBvcnQ9dm9pZCAwPT09ci53b3JrZXJQb3J0P251bGw6ci53b3JrZXJQb3J0LHIud29ya2VyU3JjPXZvaWQgMD09PXIud29ya2VyU3JjPyIiOnIud29ya2VyU3JjfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMSk7ZnVuY3Rpb24gaSgpe2k9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsbykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8sbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09cyhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8sbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LG8oYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8sbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W29dO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1zKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCl7c3dpdGNoKHQgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKHQpJiZudWxsIT09dHx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksdC5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24odC5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKHQubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHQubWVzc2FnZSx0LnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24odC5tZXNzYWdlLHQuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPXRoaXM7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5zb3VyY2VOYW1lPWUsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhO2lmKGUudGFyZ2V0TmFtZT09PWkuc291cmNlTmFtZSlpZihlLnN0cmVhbSlpLl9wcm9jZXNzU3RyZWFtTWVzc2FnZShlKTtlbHNlIGlmKGUuY2FsbGJhY2spe3ZhciByPWUuY2FsbGJhY2tJZCxhPWkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PWUuY2FsbGJhY2spYS5yZXNvbHZlKGUuZGF0YSk7ZWxzZXtpZigyIT09ZS5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2EucmVqZWN0KGwoZS5yZWFzb24pKX19ZWxzZXt2YXIgbz1pLmFjdGlvbkhhbmRsZXJbZS5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KGUuYWN0aW9uKSk7aWYoZS5jYWxsYmFja0lkKXt2YXIgcz1pLnNvdXJjZU5hbWUsdT1lLnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QobyhlLmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbih0KXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDplLmNhbGxiYWNrSWQsZGF0YTp0fSl9KSwoZnVuY3Rpb24odCl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6ZS5jYWxsYmFja0lkLHJlYXNvbjpsKHQpfSl9KSl9ZWxzZSBlLnN0cmVhbUlkP2kuX2NyZWF0ZVN0cmVhbVNpbmsoZSk6byhlLmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIGUscixzLHU7cmV0dXJuIGU9dCxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYoclt0XSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KHQsJyInKSk7clt0XT1lfX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246dCxkYXRhOmV9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5jYWxsYmFja0lkKyssYT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbaV09YTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjp0LGNhbGxiYWNrSWQ6aSxkYXRhOmV9LHIpfWNhdGNoKHQpe2EucmVqZWN0KHQpfXJldHVybiBhLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxjPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBsPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6bCxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246dCxzdHJlYW1JZDpvLGRhdGE6ZSxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxpKSxsLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24odCl7dmFyIGU9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD1lLGMucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTp0LmRlc2lyZWRTaXplfSksZS5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciBlPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD1lLGEuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpsKHQpfSksZS5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlclt0LmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbih0KXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgbD10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sbD4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo0LHN0cmVhbUlkOmUsY2h1bms6dH0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGEucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjMsc3RyZWFtSWQ6ZX0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW2VdKX0sZXJyb3I6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsYS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NSxzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6dC5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW2VdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uocyh0LmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06OCxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbih0KXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo4LHN0cmVhbUlkOmUscmVhc29uOmwodCl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1tlXSxzPXRoaXMuc3RyZWFtU2lua3NbZV07c3dpdGNoKHQuc3RyZWFtKXtjYXNlIDg6dC5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNzp0LnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NyxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZ0LmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9dC5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo3LHN0cmVhbUlkOmUsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKHQpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjcsc3RyZWFtSWQ6ZSxyZWFzb246bCh0KX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUodC5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihsKHQucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLGUpO2JyZWFrO2Nhc2UgMjp0LnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGwodC5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbihlKXtlKHMub25DYW5jZWwmJnMub25DYW5jZWwobCh0LnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjIsc3RyZWFtSWQ6ZSxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24odCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06MixzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QobCh0LnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbZV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9aSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW2Uuc3RhcnRDYWxsJiZlLnN0YXJ0Q2FsbC5wcm9taXNlLGUucHVsbENhbGwmJmUucHVsbENhbGwucHJvbWlzZSxlLmNhbmNlbENhbGwmJmUuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBpPXMuYXBwbHkodCxlKTtmdW5jdGlvbiBvKHQpe2EoaSxyLG4sbyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EoaSxyLG4sbyxsLCJ0aHJvdyIsdCl9byh2b2lkIDApfSkpfSxmdW5jdGlvbih0LGUpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NZXNzYWdlSGFuZGxlcj11fSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NZXRhZGF0YT12b2lkIDA7dmFyIGk9cigxKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24gbyh0LGUscil7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHUodCxlLCJnZXQiKSl9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx1KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiB1KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBjPW5ldyBXZWFrTWFwLGg9bmV3IFdlYWtNYXAsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5wYXJzZWREYXRhLG49ZS5yYXdEYXRhOyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLG8odGhpcyxjLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxvKHRoaXMsaCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksbCh0aGlzLGMsciksbCh0aGlzLGgsbil9dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcyxoKX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGwhPT0oZT1zKHRoaXMsYykuZ2V0KHQpKSYmdm9pZCAwIT09ZT9lOm51bGx9fSx7a2V5OiJnZXRBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5vYmplY3RGcm9tTWFwKShzKHRoaXMsYykpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyh0aGlzLGMpLmhhcyh0KX19XSkmJmEoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLk1ldGFkYXRhPWZ9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLk9wdGlvbmFsQ29udGVudENvbmZpZz12b2lkIDA7dmFyIGk9cigxKSxhPXIoMTM5KTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1zKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgYX19fX1mdW5jdGlvbiBzKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBsKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZSYmaCh0LnByb3RvdHlwZSxlKSxyJiZoKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBkKHQsZSxyKXtwKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBwKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LG0odCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LG0odCxlLCJnZXQiKSl9ZnVuY3Rpb24gbSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgZz1TeW1ib2woIklOVEVSTkFMIiksYj1uZXcgV2Vha01hcCxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2ModGhpcyx0KSxkKHRoaXMsYix7d3JpdGFibGU6ITAsdmFsdWU6ITB9KSx0aGlzLm5hbWU9ZSx0aGlzLmludGVudD1yfXJldHVybiBmKHQsW3trZXk6InZpc2libGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsYil9fSx7a2V5OiJfc2V0VmlzaWJsZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0IT09ZyYmKDAsaS51bnJlYWNoYWJsZSkoIkludGVybmFsIG1ldGhvZCBgX3NldFZpc2libGVgIGNhbGxlZC4iKSx2KHRoaXMsYixlKX19XSksdH0oKSx3PW5ldyBXZWFrTWFwLEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrTWFwLHg9bmV3IFdlYWtTZXQsRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7aWYoYyh0aGlzLHQpLHAodGhpcyxyPXgpLHIuYWRkKHRoaXMpLGQodGhpcyx3LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZCh0aGlzLEEse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxkKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGQodGhpcyxTLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5uYW1lPW51bGwsdGhpcy5jcmVhdG9yPW51bGwsbnVsbCE9PWUpe3RoaXMubmFtZT1lLm5hbWUsdGhpcy5jcmVhdG9yPWUuY3JlYXRvcix2KHRoaXMsUyxlLm9yZGVyKTt2YXIgbixpPW8oZS5ncm91cHMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTt5KHRoaXMsQSkuc2V0KGEuaWQsbmV3IF8oYS5uYW1lLGEuaW50ZW50KSl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfWlmKCJPRkYiPT09ZS5iYXNlU3RhdGUpe3ZhciBzLGw9byh5KHRoaXMsQSkudmFsdWVzKCkpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOylzLnZhbHVlLl9zZXRWaXNpYmxlKGcsITEpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX12YXIgdSxoPW8oZS5vbik7dHJ5e2ZvcihoLnMoKTshKHU9aC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO3kodGhpcyxBKS5nZXQoZikuX3NldFZpc2libGUoZywhMCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXZhciBtLGI9byhlLm9mZik7dHJ5e2ZvcihiLnMoKTshKG09Yi5uKCkpLmRvbmU7KXt2YXIgRT1tLnZhbHVlO3kodGhpcyxBKS5nZXQoRSkuX3NldFZpc2libGUoZywhMSl9fWNhdGNoKHQpe2IuZSh0KX1maW5hbGx5e2IuZigpfXYodGhpcyxrLHRoaXMuZ2V0SGFzaCgpKX19cmV0dXJuIGYodCxbe2tleToiaXNWaXNpYmxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09eSh0aGlzLEEpLnNpemUpcmV0dXJuITA7aWYoIXQpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZGVmaW5lZC4iKSwhMDtpZigiT0NHIj09PXQudHlwZSlyZXR1cm4geSh0aGlzLEEpLmhhcyh0LmlkKT95KHRoaXMsQSkuZ2V0KHQuaWQpLnZpc2libGU6KCgwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh0LmlkKSksITApO2lmKCJPQ01EIj09PXQudHlwZSl7aWYodC5leHByZXNzaW9uKXJldHVybiB1KHRoaXMseCxQKS5jYWxsKHRoaXMsdC5leHByZXNzaW9uKTtpZighdC5wb2xpY3l8fCJBbnlPbiI9PT10LnBvbGljeSl7dmFyIGUscj1vKHQuaWRzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobikpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KG4pKSwhMDtpZih5KHRoaXMsQSkuZ2V0KG4pLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXJldHVybiExfWlmKCJBbGxPbiI9PT10LnBvbGljeSl7dmFyIGEscz1vKHQuaWRzKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobCkpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KGwpKSwhMDtpZigheSh0aGlzLEEpLmdldChsKS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4hMH1pZigiQW55T2ZmIj09PXQucG9saWN5KXt2YXIgYyxoPW8odC5pZHMpO3RyeXtmb3IoaC5zKCk7IShjPWgubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZigheSh0aGlzLEEpLmhhcyhmKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoZikpLCEwO2lmKCF5KHRoaXMsQSkuZ2V0KGYpLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiExfWlmKCJBbGxPZmYiPT09dC5wb2xpY3kpe3ZhciBkLHA9byh0Lmlkcyk7dHJ5e2ZvcihwLnMoKTshKGQ9cC5uKCkpLmRvbmU7KXt2YXIgdj1kLnZhbHVlO2lmKCF5KHRoaXMsQSkuaGFzKHYpKXJldHVybigwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh2KSksITA7aWYoeSh0aGlzLEEpLmdldCh2KS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX1yZXR1cm4hMH1yZXR1cm4oMCxpLndhcm4pKCJVbmtub3duIG9wdGlvbmFsIGNvbnRlbnQgcG9saWN5ICIuY29uY2F0KHQucG9saWN5LCIuIikpLCEwfXJldHVybigwLGkud2FybikoIlVua25vd24gZ3JvdXAgdHlwZSAiLmNvbmNhdCh0LnR5cGUsIi4iKSksITB9fSx7a2V5OiJzZXRWaXNpYmlsaXR5Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3kodGhpcyxBKS5oYXModCk/KHkodGhpcyxBKS5nZXQodCkuX3NldFZpc2libGUoZywhIWUpLHYodGhpcyx3LG51bGwpKTooMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQodCkpfX0se2tleToiaGFzSW5pdGlhbFZpc2liaWxpdHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhhc2goKT09PXkodGhpcyxrKX19LHtrZXk6ImdldE9yZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT95KHRoaXMsUyk/eSh0aGlzLFMpLnNsaWNlKCk6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbCh0KX0odD15KHRoaXMsQSkua2V5cygpKXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8cyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKTpudWxsO3ZhciB0fX0se2tleToiZ2V0R3JvdXBzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT4wPygwLGkub2JqZWN0RnJvbU1hcCkoeSh0aGlzLEEpKTpudWxsfX0se2tleToiZ2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHRoaXMsQSkuZ2V0KHQpfHxudWxsfX0se2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihudWxsIT09eSh0aGlzLHcpKXJldHVybiB5KHRoaXMsdyk7dmFyIHQsZSxyLG49bmV3IGEuTXVybXVySGFzaDNfNjQsaT1vKHkodGhpcyxBKSk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbD0oZT10LnZhbHVlLHI9MixmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fShlKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlLHIpfHxzKGUscil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdT1sWzBdLGM9bFsxXTtuLnVwZGF0ZSgiIi5jb25jYXQodSwiOiIpLmNvbmNhdChjLnZpc2libGUpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIHYodGhpcyx3LG4uaGV4ZGlnZXN0KCkpfX1dKSx0fSgpO2Z1bmN0aW9uIFAodCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwyKXJldHVybiEwO2Zvcih2YXIgcj10WzBdLG49MTtuPGU7bisrKXt2YXIgYT10W25dLG89dm9pZCAwO2lmKEFycmF5LmlzQXJyYXkoYSkpbz11KHRoaXMseCxQKS5jYWxsKHRoaXMsYSk7ZWxzZXtpZigheSh0aGlzLEEpLmhhcyhhKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoYSkpLCEwO289eSh0aGlzLEEpLmdldChhKS52aXNpYmxlfXN3aXRjaChyKXtjYXNlIkFuZCI6aWYoIW8pcmV0dXJuITE7YnJlYWs7Y2FzZSJPciI6aWYobylyZXR1cm4hMDticmVhaztjYXNlIk5vdCI6cmV0dXJuIW87ZGVmYXVsdDpyZXR1cm4hMH19cmV0dXJuIkFuZCI9PT1yfWUuT3B0aW9uYWxDb250ZW50Q29uZmlnPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxMzcpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBjKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1sKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgaT10aGlzO2godGhpcyx0KSwoMCxuLmFzc2VydCkociwnUERGRGF0YVRyYW5zcG9ydFN0cmVhbSAtIG1pc3NpbmcgcmVxdWlyZWQgInBkZkRhdGFSYW5nZVRyYW5zcG9ydCIgYXJndW1lbnQuJyksdGhpcy5fcXVldWVkQ2h1bmtzPVtdLHRoaXMuX3Byb2dyZXNzaXZlRG9uZT1lLnByb2dyZXNzaXZlRG9uZXx8ITEsdGhpcy5fY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9ZS5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZXx8bnVsbDt2YXIgYT1lLmluaXRpYWxEYXRhO2lmKChudWxsPT1hP3ZvaWQgMDphLmxlbmd0aCk+MCl7dmFyIG89bmV3IFVpbnQ4QXJyYXkoYSkuYnVmZmVyO3RoaXMuX3F1ZXVlZENodW5rcy5wdXNoKG8pfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydD1yLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFlLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hZS5kaXNhYmxlUmFuZ2UsdGhpcy5fY29udGVudExlbmd0aD1lLmxlbmd0aCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVhZGVycz1bXSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUmFuZ2VMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblJlY2VpdmVEYXRhKHtiZWdpbjp0LGNodW5rOmV9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblByb2dyZXNzKHtsb2FkZWQ6dCx0b3RhbDplfSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKChmdW5jdGlvbih0KXtpLl9vblJlY2VpdmVEYXRhKHtjaHVuazp0fSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlRG9uZUxpc3RlbmVyKChmdW5jdGlvbigpe2kuX29uUHJvZ3Jlc3NpdmVEb25lKCl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LnRyYW5zcG9ydFJlYWR5KCl9cmV0dXJuIGQodCxbe2tleToiX29uUmVjZWl2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQuY2h1bmspLmJ1ZmZlcjtpZih2b2lkIDA9PT10LmJlZ2luKXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyP3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGUpOnRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGUpO2Vsc2V7dmFyIHI9dGhpcy5fcmFuZ2VSZWFkZXJzLnNvbWUoKGZ1bmN0aW9uKHIpe3JldHVybiByLl9iZWdpbj09PXQuYmVnaW4mJihyLl9lbnF1ZXVlKGUpLCEwKX0pKTsoMCxuLmFzc2VydCkociwiX29uUmVjZWl2ZURhdGEgLSBubyBgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyYCBpbnN0YW5jZSBmb3VuZC4iKX19fSx7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk7dm9pZCAwPT09dC50b3RhbD9udWxsPT09KGU9dGhpcy5fcmFuZ2VSZWFkZXJzWzBdKXx8dm9pZCAwPT09ZXx8bnVsbD09PShyPWUub25Qcm9ncmVzcyl8fHZvaWQgMD09PXJ8fHIuY2FsbChlLHtsb2FkZWQ6dC5sb2FkZWR9KTpudWxsPT09KG49dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1ufHxudWxsPT09KGk9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09aXx8aS5jYWxsKG4se2xvYWRlZDp0LmxvYWRlZCx0b3RhbDp0LnRvdGFsfSl9fSx7a2V5OiJfb25Qcm9ncmVzc2l2ZURvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09dHx8dC5wcm9ncmVzc2l2ZURvbmUoKSx0aGlzLl9wcm9ncmVzc2l2ZURvbmU9ITB9fSx7a2V5OiJfcmVtb3ZlUmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JhbmdlUmVhZGVycy5pbmRleE9mKHQpO2U+PTAmJnRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGRGF0YVRyYW5zcG9ydFN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3ZhciB0PXRoaXMuX3F1ZXVlZENodW5rcztyZXR1cm4gdGhpcy5fcXVldWVkQ2h1bmtzPW51bGwsbmV3IHYodGhpcyx0LHRoaXMuX3Byb2dyZXNzaXZlRG9uZSx0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSl9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IHkodGhpcyx0LGUpO3JldHVybiB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZSh0LGUpLHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCk7dmFyIHIsbj11KHRoaXMuX3JhbmdlUmVhZGVycy5zbGljZSgwKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUuY2FuY2VsKHQpfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpfX1dKSx0fSgpO2UuUERGRGF0YVRyYW5zcG9ydFN0cmVhbT1wO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtoKHRoaXMsdCksdGhpcy5fc3RyZWFtPWUsdGhpcy5fZG9uZT1ufHwhMSx0aGlzLl9maWxlbmFtZT0oMCxpLmlzUGRmRmlsZSkoYSk/YTpudWxsLHRoaXMuX3F1ZXVlZENodW5rcz1yfHxbXSx0aGlzLl9sb2FkZWQ9MDt2YXIgbyxzPXUodGhpcy5fcXVldWVkQ2h1bmtzKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWU7dGhpcy5fbG9hZGVkKz1sLmJ5dGVMZW5ndGh9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX2hlYWRlcnNSZWFkeT1Qcm9taXNlLnJlc29sdmUoKSxlLl9mdWxsUmVxdWVzdFJlYWRlcj10aGlzLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lfHwodGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVua3MucHVzaCh0KSx0aGlzLl9sb2FkZWQrPXQuYnl0ZUxlbmd0aCl9fSx7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJmaWxlbmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cmVhbS5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJlYW0uX2NvbnRlbnRMZW5ndGh9fSx7a2V5OiJyZWFkIix2YWx1ZTooZT1zKGEoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGUscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCEodGhpcy5fcXVldWVkQ2h1bmtzLmxlbmd0aD4wKSl7dC5uZXh0PTM7YnJlYWt9cmV0dXJuIGU9dGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCksdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmUsZG9uZTohMX0pO2Nhc2UgMzppZighdGhpcy5fZG9uZSl7dC5uZXh0PTU7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNTpyZXR1cm4gcj0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3JlcXVlc3RzLnB1c2gociksdC5hYnJ1cHQoInJldHVybiIsci5wcm9taXNlKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITA7dmFyIGUscj11KHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wfX0se2tleToicHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RvbmV8fCh0aGlzLl9kb25lPSEwKX19XSksdH0oKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX3N0cmVhbT1lLHRoaXMuX2JlZ2luPXIsdGhpcy5fZW5kPW4sdGhpcy5fcXVldWVkQ2h1bms9bnVsbCx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5fZG9uZSl7aWYoMD09PXRoaXMuX3JlcXVlc3RzLmxlbmd0aCl0aGlzLl9xdWV1ZWRDaHVuaz10O2Vsc2V7dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTt2YXIgZSxyPXUodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9dGhpcy5fZG9uZT0hMCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NDticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDQ6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDY6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lPSEwO3ZhciBlLHI9dSh0aGlzLl9yZXF1ZXN0cyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUucmVzb2x2ZSh7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9yZXF1ZXN0cy5sZW5ndGg9MCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX1dKSx0fSgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9ZnVuY3Rpb24gbih0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIG49dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBpPW4uY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1yKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5YZmFUZXh0PXZvaWQgMDt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToidGV4dENvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9e2l0ZW1zOnIsc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9O3JldHVybiBmdW5jdGlvbiBlKGkpe3ZhciBhO2lmKGkpe3ZhciBvPW51bGwscz1pLm5hbWU7aWYoIiN0ZXh0Ij09PXMpbz1pLnZhbHVlO2Vsc2V7aWYoIXQuc2hvdWxkQnVpbGRUZXh0KHMpKXJldHVybjtudWxsIT1pJiZudWxsIT09KGE9aS5hdHRyaWJ1dGVzKSYmdm9pZCAwIT09YSYmYS50ZXh0Q29udGVudD9vPWkuYXR0cmlidXRlcy50ZXh0Q29udGVudDppLnZhbHVlJiYobz1pLnZhbHVlKX1pZihudWxsIT09byYmci5wdXNoKHtzdHI6b30pLGkuY2hpbGRyZW4pe3ZhciBsLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBuKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bih0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIGk9MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gaT49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbaSsrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gcz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLG89dH0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgb319fX0oaS5jaGlsZHJlbik7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWUobC52YWx1ZSl9Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9fX19KGUpLGl9fSx7a2V5OiJzaG91bGRCdWlsZFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEoInRleHRhcmVhIj09PXR8fCJpbnB1dCI9PT10fHwib3B0aW9uIj09PXR8fCJzZWxlY3QiPT09dCl9fV0sbnVsbCYmaShlLnByb3RvdHlwZSxudWxsKSxyJiZpKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYVRleHQ9YX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWUuTm9kZUNhbnZhc0ZhY3Rvcnk9ZS5Ob2RlQ01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwO3ZhciBpPXIoMTM4KTtmdW5jdGlvbiBhKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBlJiZvKHQucHJvdG90eXBlLGUpLHImJm8odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGwodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmdSh0LGUpfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LHUodCxlKX1mdW5jdGlvbiBjKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixpPWgodCk7aWYoZSl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGksYXJndW1lbnRzLGEpfWVsc2Ugcj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBoKHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxoKHQpfXZhciBmPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXtyZXF1aXJlKCJmcyIpLnJlYWRGaWxlKHQsKGZ1bmN0aW9uKHQsbil7IXQmJm4/ZShuZXcgVWludDhBcnJheShuKSk6cihuZXcgRXJyb3IodCkpfSkpfSkpfSxkPWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJlcXVpcmUoImNhbnZhcyIpLmNyZWF0ZUNhbnZhcyh0LGUpfX1dKSxyfShpLkJhc2VDYW52YXNGYWN0b3J5KTtlLk5vZGVDYW52YXNGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24odCl7bChyLHQpO3ZhciBlPWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBhKHRoaXMsciksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHMocixbe2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0KS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57Y01hcERhdGE6dCxjb21wcmVzc2lvblR5cGU6ZX19KSl9fV0pLHJ9KGkuQmFzZUNNYXBSZWFkZXJGYWN0b3J5KTtlLk5vZGVDTWFwUmVhZGVyRmFjdG9yeT1wO3ZhciB2PWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmKHQpfX1dKSxyfShpLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9dn0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVGV4dExheWVyUmVuZGVyVGFzaz12b2lkIDAsZS5yZW5kZXJUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dC50ZXh0Q29udGVudFNvdXJjZXx8IXQudGV4dENvbnRlbnQmJiF0LnRleHRDb250ZW50U3RyZWFtfHwoKDAsYS5kZXByZWNhdGVkKSgiVGhlIFRleHRMYXllclJlbmRlciBgdGV4dENvbnRlbnRgL2B0ZXh0Q29udGVudFN0cmVhbWAgcGFyYW1ldGVycyB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSwgcGxlYXNlIHVzZSBgdGV4dENvbnRlbnRTb3VyY2VgIGluc3RlYWQuIiksdC50ZXh0Q29udGVudFNvdXJjZT10LnRleHRDb250ZW50fHx0LnRleHRDb250ZW50U3RyZWFtKTt2YXIgZT1uZXcgcCh0KTtyZXR1cm4gZS5fcmVuZGVyKCksZX0sZS51cGRhdGVUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250YWluZXIscj10LnZpZXdwb3J0LG49dC50ZXh0RGl2cyxpPXQudGV4dERpdlByb3BlcnRpZXMsbz10LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGw9dC5tdXN0Um90YXRlLHU9dm9pZCAwPT09bHx8bCxjPXQubXVzdFJlc2NhbGUsZj12b2lkIDA9PT1jfHxjO2lmKHUmJigwLGEuc2V0TGF5ZXJEaW1lbnNpb25zKShlLHtyb3RhdGlvbjpyLnJvdGF0aW9ufSksZil7dmFyIHAsdj1oKDAsbykseT17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpyLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6dn0sbT1zKG4pO3RyeXtmb3IobS5zKCk7IShwPW0ubigpKS5kb25lOyl7dmFyIGc9cC52YWx1ZTt5LnByb3BlcnRpZXM9aS5nZXQoZykseS5kaXY9ZyxkKHkpfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19fTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2wodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciB1PTMwLGM9bmV3IE1hcDtmdW5jdGlvbiBoKHQsZSl7dmFyIHI7aWYoZSYmaS5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZClyPW5ldyBPZmZzY3JlZW5DYW52YXModCx0KS5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSk7ZWxzZXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLndpZHRoPW4uaGVpZ2h0PXQscj1uLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITF9KX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksYT17YW5nbGU6MCxjYW52YXNXaWR0aDowLGhhc1RleHQ6IiIhPT1lLnN0cixoYXNFT0w6ZS5oYXNFT0wsZm9udFNpemU6MH07dC5fdGV4dERpdnMucHVzaChuKTt2YXIgbz1pLlV0aWwudHJhbnNmb3JtKHQuX3RyYW5zZm9ybSxlLnRyYW5zZm9ybSkscz1NYXRoLmF0YW4yKG9bMV0sb1swXSksbD1yW2UuZm9udE5hbWVdO2wudmVydGljYWwmJihzKz1NYXRoLlBJLzIpO3ZhciBmLGQscD1NYXRoLmh5cG90KG9bMl0sb1szXSksdj1wKmZ1bmN0aW9uKHQsZSl7dmFyIHI9Yy5nZXQodCk7aWYocilyZXR1cm4gcjt2YXIgbj1oKHUsZSk7bi5mb250PSIiLmNvbmNhdCh1LCJweCAiKS5jb25jYXQodCk7dmFyIGk9bi5tZWFzdXJlVGV4dCgiIiksYT1pLmZvbnRCb3VuZGluZ0JveEFzY2VudCxvPU1hdGguYWJzKGkuZm9udEJvdW5kaW5nQm94RGVzY2VudCk7aWYoYSl7dmFyIHM9YS8oYStvKTtyZXR1cm4gYy5zZXQodCxzKSxuLmNhbnZhcy53aWR0aD1uLmNhbnZhcy5oZWlnaHQ9MCxzfW4uc3Ryb2tlU3R5bGU9InJlZCIsbi5jbGVhclJlY3QoMCwwLHUsdSksbi5zdHJva2VUZXh0KCJnIiwwLDApO3ZhciBsPW4uZ2V0SW1hZ2VEYXRhKDAsMCx1LHUpLmRhdGE7bz0wO2Zvcih2YXIgZj1sLmxlbmd0aC0xLTM7Zj49MDtmLT00KWlmKGxbZl0+MCl7bz1NYXRoLmNlaWwoZi80L3UpO2JyZWFrfW4uY2xlYXJSZWN0KDAsMCx1LHUpLG4uc3Ryb2tlVGV4dCgiQSIsMCx1KSxhPTA7Zm9yKHZhciBkPTAscD0obD1uLmdldEltYWdlRGF0YSgwLDAsdSx1KS5kYXRhKS5sZW5ndGg7ZDxwO2QrPTQpaWYobFtkXT4wKXthPXUtTWF0aC5mbG9vcihkLzQvdSk7YnJlYWt9aWYobi5jYW52YXMud2lkdGg9bi5jYW52YXMuaGVpZ2h0PTAsYSl7dmFyIHY9YS8oYStvKTtyZXR1cm4gYy5zZXQodCx2KSx2fXJldHVybiBjLnNldCh0LC44KSwuOH0obC5mb250RmFtaWx5LHQuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKTswPT09cz8oZj1vWzRdLGQ9b1s1XS12KTooZj1vWzRdK3YqTWF0aC5zaW4ocyksZD1vWzVdLXYqTWF0aC5jb3MocykpO3ZhciB5PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikqIixtPW4uc3R5bGU7dC5fY29udGFpbmVyPT09dC5fcm9vdENvbnRhaW5lcj8obS5sZWZ0PSIiLmNvbmNhdCgoMTAwKmYvdC5fcGFnZVdpZHRoKS50b0ZpeGVkKDIpLCIlIiksbS50b3A9IiIuY29uY2F0KCgxMDAqZC90Ll9wYWdlSGVpZ2h0KS50b0ZpeGVkKDIpLCIlIikpOihtLmxlZnQ9IiIuY29uY2F0KHkpLmNvbmNhdChmLnRvRml4ZWQoMiksInB4KSIpLG0udG9wPSIiLmNvbmNhdCh5KS5jb25jYXQoZC50b0ZpeGVkKDIpLCJweCkiKSksbS5mb250U2l6ZT0iIi5jb25jYXQoeSkuY29uY2F0KHAudG9GaXhlZCgyKSwicHgpIiksbS5mb250RmFtaWx5PWwuZm9udEZhbWlseSxhLmZvbnRTaXplPXAsbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKSxuLnRleHRDb250ZW50PWUuc3RyLG4uZGlyPWUuZGlyLHQuX2ZvbnRJbnNwZWN0b3JFbmFibGVkJiYobi5kYXRhc2V0LmZvbnROYW1lPWUuZm9udE5hbWUpLDAhPT1zJiYoYS5hbmdsZT1zKigxODAvTWF0aC5QSSkpO3ZhciBnPSExO2lmKGUuc3RyLmxlbmd0aD4xKWc9ITA7ZWxzZSBpZigiICIhPT1lLnN0ciYmZS50cmFuc2Zvcm1bMF0hPT1lLnRyYW5zZm9ybVszXSl7dmFyIGI9TWF0aC5hYnMoZS50cmFuc2Zvcm1bMF0pLF89TWF0aC5hYnMoZS50cmFuc2Zvcm1bM10pO2IhPT1fJiZNYXRoLm1heChiLF8pL01hdGgubWluKGIsXyk+MS41JiYoZz0hMCl9ZyYmKGEuY2FudmFzV2lkdGg9bC52ZXJ0aWNhbD9lLmhlaWdodDplLndpZHRoKSx0Ll90ZXh0RGl2UHJvcGVydGllcy5zZXQobixhKSx0Ll9pc1JlYWRhYmxlU3RyZWFtJiZ0Ll9sYXlvdXRUZXh0KG4pfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXYscj10LnNjYWxlLG49dC5wcm9wZXJ0aWVzLGk9dC5jdHgsYT10LnByZXZGb250U2l6ZSxvPXQucHJldkZvbnRGYW1pbHkscz1lLnN0eWxlLGw9IiI7aWYoMCE9PW4uY2FudmFzV2lkdGgmJm4uaGFzVGV4dCl7dmFyIHU9cy5mb250RmFtaWx5LGM9bi5jYW52YXNXaWR0aCxoPW4uZm9udFNpemU7YT09PWgmJm89PT11fHwoaS5mb250PSIiLmNvbmNhdChoKnIsInB4ICIpLmNvbmNhdCh1KSx0LnByZXZGb250U2l6ZT1oLHQucHJldkZvbnRGYW1pbHk9dSk7dmFyIGY9aS5tZWFzdXJlVGV4dChlLnRleHRDb250ZW50KS53aWR0aDtmPjAmJihsPSJzY2FsZVgoIi5jb25jYXQoYypyL2YsIikiKSl9MCE9PW4uYW5nbGUmJihsPSJyb3RhdGUoIi5jb25jYXQobi5hbmdsZSwiZGVnKSAiKS5jb25jYXQobCkpLGwubGVuZ3RoPjAmJihzLnRyYW5zZm9ybT1sKX12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbj10aGlzLG89ZS50ZXh0Q29udGVudFNvdXJjZSxzPWUuY29udGFpbmVyLGw9ZS52aWV3cG9ydCx1PWUudGV4dERpdnMsYz1lLnRleHREaXZQcm9wZXJ0aWVzLGY9ZS50ZXh0Q29udGVudEl0ZW1zU3RyLGQ9ZS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLl90ZXh0Q29udGVudFNvdXJjZT1vLHRoaXMuX2lzUmVhZGFibGVTdHJlYW09byBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtLHRoaXMuX2NvbnRhaW5lcj10aGlzLl9yb290Q29udGFpbmVyPXMsdGhpcy5fdGV4dERpdnM9dXx8W10sdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0cj1mfHxbXSx0aGlzLl9mb250SW5zcGVjdG9yRW5hYmxlZD0hKG51bGw9PT0ocj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpfHx2b2lkIDA9PT1yfHwhci5lbmFibGVkKSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl90ZXh0RGl2UHJvcGVydGllcz1jfHxuZXcgV2Vha01hcCx0aGlzLl9jYW5jZWxlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fbGF5b3V0VGV4dFBhcmFtcz17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpsLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6aCgwLGQpfTt2YXIgcD1sLnJhd0RpbXMsdj1wLnBhZ2VXaWR0aCx5PXAucGFnZUhlaWdodCxtPXAucGFnZVgsZz1wLnBhZ2VZO3RoaXMuX3RyYW5zZm9ybT1bMSwwLDAsLTEsLW0sZyt5XSx0aGlzLl9wYWdlV2lkdGg9dix0aGlzLl9wYWdlSGVpZ2h0PXksKDAsYS5zZXRMYXllckRpbWVuc2lvbnMpKHMsbCksdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlLmZpbmFsbHkoKGZ1bmN0aW9uKCl7bi5fbGF5b3V0VGV4dFBhcmFtcz1udWxsfSkpLmNhdGNoKChmdW5jdGlvbigpe30pKX12YXIgZSxyO3JldHVybiBlPXQsKHI9W3trZXk6InByb21pc2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsZWQ9ITAsdGhpcy5fcmVhZGVyJiYodGhpcy5fcmVhZGVyLmNhbmNlbChuZXcgaS5BYm9ydEV4Y2VwdGlvbigiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLiIpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSksdGhpcy5fcmVhZGVyPW51bGwpLHRoaXMuX2NhcGFiaWxpdHkucmVqZWN0KG5ldyBpLkFib3J0RXhjZXB0aW9uKCJUZXh0TGF5ZXIgdGFzayBjYW5jZWxsZWQuIikpfX0se2tleToiX3Byb2Nlc3NJdGVtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXModCk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKHZvaWQgMCE9PWkuc3RyKXRoaXMuX3RleHRDb250ZW50SXRlbXNTdHIucHVzaChpLnN0ciksZih0aGlzLGksZSk7ZWxzZSBpZigiYmVnaW5NYXJrZWRDb250ZW50UHJvcHMiPT09aS50eXBlfHwiYmVnaW5NYXJrZWRDb250ZW50Ij09PWkudHlwZSl7dmFyIGE9dGhpcy5fY29udGFpbmVyO3RoaXMuX2NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcmtlZENvbnRlbnQiKSxudWxsIT09aS5pZCYmdGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiaWQiLCIiLmNvbmNhdChpLmlkKSksYS5hcHBlbmQodGhpcy5fY29udGFpbmVyKX1lbHNlImVuZE1hcmtlZENvbnRlbnQiPT09aS50eXBlJiYodGhpcy5fY29udGFpbmVyPXRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToiX2xheW91dFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xheW91dFRleHRQYXJhbXMucHJvcGVydGllcz10aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQodCk7aWYodGhpcy5fbGF5b3V0VGV4dFBhcmFtcy5kaXY9dCxkKHRoaXMuX2xheW91dFRleHRQYXJhbXMpLGUuaGFzVGV4dCYmdGhpcy5fY29udGFpbmVyLmFwcGVuZCh0KSxlLmhhc0VPTCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTtyLnNldEF0dHJpYnV0ZSgicm9sZSIsInByZXNlbnRhdGlvbiIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmQocil9fX0se2tleToiX3JlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5faXNSZWFkYWJsZVN0cmVhbSl0aGlzLl9yZWFkZXI9dGhpcy5fdGV4dENvbnRlbnRTb3VyY2UuZ2V0UmVhZGVyKCksZnVuY3Rpb24gbigpe3QuX3JlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oaSl7dmFyIGE9aS52YWx1ZTtpLmRvbmU/ZS5yZXNvbHZlKCk6KE9iamVjdC5hc3NpZ24ocixhLnN0eWxlcyksdC5fcHJvY2Vzc0l0ZW1zKGEuaXRlbXMsciksbigpKX0pLGUucmVqZWN0KX0oKTtlbHNle2lmKCF0aGlzLl90ZXh0Q29udGVudFNvdXJjZSl0aHJvdyBuZXcgRXJyb3IoJ05vICJ0ZXh0Q29udGVudFNvdXJjZSIgcGFyYW1ldGVyIHNwZWNpZmllZC4nKTt2YXIgbj10aGlzLl90ZXh0Q29udGVudFNvdXJjZSxhPW4uaXRlbXMsbz1uLnN0eWxlczt0aGlzLl9wcm9jZXNzSXRlbXMoYSxvKSxlLnJlc29sdmUoKX1lLnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyPW51bGwsZnVuY3Rpb24odCl7aWYoIXQuX2NhbmNlbGVkKXt2YXIgZT10Ll90ZXh0RGl2cyxyPXQuX2NhcGFiaWxpdHk7aWYoZS5sZW5ndGg+MWU1KXIucmVzb2x2ZSgpO2Vsc2V7aWYoIXQuX2lzUmVhZGFibGVTdHJlYW0pe3ZhciBuLGk9cyhlKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7dC5fbGF5b3V0VGV4dChhKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fXIucmVzb2x2ZSgpfX19KHQpfSksdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QpfX1dKSYmbyhlLnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fSgpO2UuVGV4dExheWVyUmVuZGVyVGFzaz1wfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDE1Mykscz1yKDE1NCksbD1yKDEzNyk7ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGModCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKHQsZSk6dm9pZCAwfX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxkKG4ua2V5KSxuKX19ZnVuY3Rpb24gZih0LGUpe3YodCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBkKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBwKHQsZSxyKXt2KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB2KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB5KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gZyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCxiKHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBiKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBfLHcsQT1uZXcgV2Vha01hcCxrPW5ldyBXZWFrTWFwLFM9bmV3IFdlYWtNYXAseD1uZXcgV2Vha01hcCxFPW5ldyBXZWFrTWFwLFA9bmV3IFdlYWtNYXAsVD1uZXcgV2Vha01hcCxDPW5ldyBXZWFrTWFwLE89bmV3IFdlYWtTZXQsRj1uZXcgV2Vha1NldCxNPW5ldyBXZWFrU2V0LFI9bmV3IFdlYWtTZXQsST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksZih0aGlzLFIpLGYodGhpcyxNKSxmKHRoaXMsRiksZih0aGlzLE8pLHAodGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxwKHRoaXMsUyx7d3JpdGFibGU6ITAsdmFsdWU6dGhpcy5wb2ludGVydXAuYmluZCh0aGlzKX0pLHAodGhpcyx4LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLnBvaW50ZXJkb3duLmJpbmQodGhpcyl9KSxwKHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHAodGhpcyxQLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxULHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0Ll9pbml0aWFsaXplZHx8KHQuX2luaXRpYWxpemVkPSEwLG8uRnJlZVRleHRFZGl0b3IuaW5pdGlhbGl6ZShlLmwxMG4pLHMuSW5rRWRpdG9yLmluaXRpYWxpemUoZS5sMTBuKSksZS51aU1hbmFnZXIucmVnaXN0ZXJFZGl0b3JUeXBlcyhbby5GcmVlVGV4dEVkaXRvcixzLklua0VkaXRvcl0pLGcodGhpcyxDLGUudWlNYW5hZ2VyKSx0aGlzLnBhZ2VJbmRleD1lLnBhZ2VJbmRleCx0aGlzLmRpdj1lLmRpdixnKHRoaXMsQSxlLmFjY2Vzc2liaWxpdHlNYW5hZ2VyKSxtKHRoaXMsQykuYWRkTGF5ZXIodGhpcyl9dmFyIGUscjtyZXR1cm4gZT10LHI9W3trZXk6InVwZGF0ZVRvb2xiYXIiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51cGRhdGVUb29sYmFyKHQpfX0se2tleToidXBkYXRlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bSh0aGlzLEMpLmdldE1vZGUoKTt5KHRoaXMsUixOKS5jYWxsKHRoaXMpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8odGhpcy5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMSksdGhpcy5kaXNhYmxlQ2xpY2soKSk6dGhpcy5lbmFibGVDbGljaygpLG0odGhpcyxDKS51bnNlbGVjdEFsbCgpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImZyZWVUZXh0RWRpdGluZyIsdD09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImlua0VkaXRpbmciLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSyl9fSx7a2V5OiJhZGRJbmtFZGl0b3JJZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodHx8bSh0aGlzLEMpLmdldE1vZGUoKT09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LKXtpZighdCl7dmFyIGUscj11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlO2lmKG4uaXNFbXB0eSgpKXJldHVybiB2b2lkIG4uc2V0SW5CYWNrZ3JvdW5kKCl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX15KHRoaXMsTSxEKS5jYWxsKHRoaXMse29mZnNldFg6MCxvZmZzZXRZOjB9KS5zZXRJbkJhY2tncm91bmQoKX19fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS5zZXRFZGl0aW5nU3RhdGUodCl9fSx7a2V5OiJhZGRDb21tYW5kcyIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLmFkZENvbW1hbmRzKHQpfX0se2tleToiZW5hYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZUVkaXRpbmcoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19fSx7a2V5OiJkaXNhYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmRpc2FibGVFZGl0aW5nKCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fX0se2tleToic2V0QWN0aXZlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuZ2V0QWN0aXZlKCkhPT10JiZtKHRoaXMsQykuc2V0QWN0aXZlRWRpdG9yKHQpfX0se2tleToiZW5hYmxlQ2xpY2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLG0odGhpcyx4KSksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixtKHRoaXMsUykpfX0se2tleToiZGlzYWJsZUNsaWNrIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixtKHRoaXMseCkpLHRoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsbSh0aGlzLFMpKX19LHtrZXk6ImF0dGFjaCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEUpLnNldCh0LmlkLHQpfX0se2tleToiZGV0YWNoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTttKHRoaXMsRSkuZGVsZXRlKHQuaWQpLG51bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLnJlbW92ZVBvaW50ZXJJblRleHRMYXllcih0LmNvbnRlbnREaXYpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO20odGhpcyxDKS5yZW1vdmVFZGl0b3IodCksdGhpcy5kZXRhY2godCksdC5kaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIsc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmRpdi5zdHlsZS5kaXNwbGF5PSIiLHQuZGl2LnJlbW92ZSgpLHQuaXNBdHRhY2hlZFRvRE9NPSExLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5JiZtKGUsQykuZm9jdXNNYWluQ29udGFpbmVyKCl9KSwwKSxtKHRoaXMsVCl8fHRoaXMuYWRkSW5rRWRpdG9ySWZOZWVkZWQoITEpfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXtpZih5KHRoaXMsTyxqKS5jYWxsKHRoaXMsdCksbSh0aGlzLEMpLmFkZEVkaXRvcih0KSx0aGlzLmF0dGFjaCh0KSwhdC5pc0F0dGFjaGVkVG9ET00pe3ZhciBlPXQucmVuZGVyKCk7dGhpcy5kaXYuYXBwZW5kKGUpLHQuaXNBdHRhY2hlZFRvRE9NPSEwfXRoaXMubW92ZUVkaXRvckluRE9NKHQpLHQub25jZUFkZGVkKCksbSh0aGlzLEMpLmFkZFRvQW5ub3RhdGlvblN0b3JhZ2UodCl9fSx7a2V5OiJtb3ZlRWRpdG9ySW5ET00iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLm1vdmVFbGVtZW50SW5ET00odGhpcy5kaXYsdC5kaXYsdC5jb250ZW50RGl2LCEwKX19LHtrZXk6ImFkZE9yUmVidWlsZCIsdmFsdWU6ZnVuY3Rpb24odCl7dC5uZWVkc1RvQmVSZWJ1aWx0KCk/dC5yZWJ1aWxkKCk6dGhpcy5hZGQodCl9fSx7a2V5OiJhZGRBTmV3RWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITB9KX19LHtrZXk6ImFkZFVuZG9hYmxlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITF9KX19LHtrZXk6ImdldE5leHRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLEMpLmdldElkKCl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuYW5ub3RhdGlvblR5cGUpe2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDpyZXR1cm4gby5GcmVlVGV4dEVkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKTtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOnJldHVybiBzLklua0VkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKX1yZXR1cm4gbnVsbH19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuc2V0U2VsZWN0ZWQodCl9fSx7a2V5OiJ0b2dnbGVTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLnRvZ2dsZVNlbGVjdGVkKHQpfX0se2tleToiaXNTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odGhpcyxDKS5pc1NlbGVjdGVkKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51bnNlbGVjdCh0KX19LHtrZXk6InBvaW50ZXJ1cCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYzswIT09dC5idXR0b258fHQuY3RybEtleSYmZXx8dC50YXJnZXQ9PT10aGlzLmRpdiYmbSh0aGlzLFApJiYoZyh0aGlzLFAsITEpLG0odGhpcyxrKT95KHRoaXMsTSxEKS5jYWxsKHRoaXMsdCk6Zyh0aGlzLGssITApKX19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1pLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjO2lmKCEoMCE9PXQuYnV0dG9ufHx0LmN0cmxLZXkmJmUpJiZ0LnRhcmdldD09PXRoaXMuZGl2KXtnKHRoaXMsUCwhMCk7dmFyIHI9bSh0aGlzLEMpLmdldEFjdGl2ZSgpO2codGhpcyxrLCFyfHxyLmlzRW1wdHkoKSl9fX0se2tleToiZHJvcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgidGV4dC9wbGFpbiIpLHI9bSh0aGlzLEMpLmdldEVkaXRvcihlKTtpZihyKXt0LnByZXZlbnREZWZhdWx0KCksdC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSIseSh0aGlzLE8saikuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5jbGllbnRYLW4ueCxhPXQuY2xpZW50WS1uLnk7ci50cmFuc2xhdGUoaS1yLnN0YXJ0WCxhLXIuc3RhcnRZKSx0aGlzLm1vdmVFZGl0b3JJbkRPTShyKSxyLmRpdi5mb2N1cygpfX19LHtrZXk6ImRyYWdvdmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0OyhudWxsPT09KHQ9bSh0aGlzLEMpLmdldEFjdGl2ZSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5wYXJlbnQpPT09dGhpcyYmbSh0aGlzLEMpLnNldEFjdGl2ZUVkaXRvcihudWxsKTt2YXIgZSxyPXUobSh0aGlzLEUpLnZhbHVlcygpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuLGk9ZS52YWx1ZTtudWxsPT09KG49bSh0aGlzLEEpKXx8dm9pZCAwPT09bnx8bi5yZW1vdmVQb2ludGVySW5UZXh0TGF5ZXIoaS5jb250ZW50RGl2KSxpLnNldFBhcmVudChudWxsKSxpLmlzQXR0YWNoZWRUb0RPTT0hMSxpLmRpdi5yZW1vdmUoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5kaXY9bnVsbCxtKHRoaXMsRSkuY2xlYXIoKSxtKHRoaXMsQykucmVtb3ZlTGF5ZXIodGhpcyl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmlld3BvcnQ7dGhpcy52aWV3cG9ydD1lLCgwLGwuc2V0TGF5ZXJEaW1lbnNpb25zKSh0aGlzLmRpdixlKSwoMCxhLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnb3ZlciIsImRyb3AiXSk7dmFyIHIsbj11KG0odGhpcyxDKS5nZXRFZGl0b3JzKHRoaXMucGFnZUluZGV4KSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO3RoaXMuYWRkKGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX10aGlzLnVwZGF0ZU1vZGUoKX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC52aWV3cG9ydDttKHRoaXMsQykuY29tbWl0T3JSZW1vdmUoKSx0aGlzLnZpZXdwb3J0PWUsKDAsbC5zZXRMYXllckRpbWVuc2lvbnMpKHRoaXMuZGl2LHtyb3RhdGlvbjplLnJvdGF0aW9ufSksdGhpcy51cGRhdGVNb2RlKCl9fSx7a2V5OiJwYWdlRGltZW5zaW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52aWV3cG9ydC5yYXdEaW1zO3JldHVyblt0LnBhZ2VXaWR0aCx0LnBhZ2VIZWlnaHRdfX1dLHImJmgoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtmdW5jdGlvbiBqKHQpe3ZhciBlO3QucGFyZW50IT09dGhpcyYmKHRoaXMuYXR0YWNoKHQpLG51bGw9PT0oZT10LnBhcmVudCl8fHZvaWQgMD09PWV8fGUuZGV0YWNoKHQpLHQuc2V0UGFyZW50KHRoaXMpLHQuZGl2JiZ0LmlzQXR0YWNoZWRUb0RPTSYmKHQuZGl2LnJlbW92ZSgpLHRoaXMuZGl2LmFwcGVuZCh0LmRpdikpKX1mdW5jdGlvbiBMKHQpe3N3aXRjaChtKHRoaXMsQykuZ2V0TW9kZSgpKXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBvLkZyZWVUZXh0RWRpdG9yKHQpO2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6cmV0dXJuIG5ldyBzLklua0VkaXRvcih0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEKHQpe3ZhciBlPXRoaXMuZ2V0TmV4dElkKCkscj15KHRoaXMsRixMKS5jYWxsKHRoaXMse3BhcmVudDp0aGlzLGlkOmUseDp0Lm9mZnNldFgseTp0Lm9mZnNldFksdWlNYW5hZ2VyOm0odGhpcyxDKX0pO3JldHVybiByJiZ0aGlzLmFkZChyKSxyfWZ1bmN0aW9uIE4oKXtnKHRoaXMsVCwhMCk7dmFyIHQsZT11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3IuaXNFbXB0eSgpJiZyLnJlbW92ZSgpfX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1nKHRoaXMsVCwhMSl9ZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9SSxfPUksKHc9ZCh3PSJfaW5pdGlhbGl6ZWQiKSlpbiBfP09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLHcse3ZhbHVlOmZhbHNlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6X1t3XT1mYWxzZX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRnJlZVRleHRFZGl0b3I9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDEzNSk7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9dSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx1KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gYyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/aChPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2IodCxlLHJbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOmgoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXyhuLmtleSksbil9fWZ1bmN0aW9uIHAoKXtyZXR1cm4gcD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PW0odCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSxwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSx2KHQsZSl9ZnVuY3Rpb24geSh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sbSh0KX1mdW5jdGlvbiBnKHQsZSl7QSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGIodCxlLHIpe3JldHVybihlPV8oZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gXyh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW4oZSk/ZTpTdHJpbmcoZSl9ZnVuY3Rpb24gdyh0LGUscil7QSh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gQSh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKHQpOmUudmFsdWV9KHQsRSh0LGUsImdldCIpKX1mdW5jdGlvbiBTKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19KHQsRSh0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gRSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgUD1uZXcgV2Vha01hcCxUPW5ldyBXZWFrTWFwLEM9bmV3IFdlYWtNYXAsTz1uZXcgV2Vha01hcCxGPW5ldyBXZWFrTWFwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha1NldCxEPW5ldyBXZWFrU2V0LE49bmV3IFdlYWtTZXQsVT1uZXcgV2Vha1NldCxXPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZ2KHQsZSl9KEUsdCk7dmFyIGUscixoLGIsXyxBPShiPUUsXz1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgdCxlPW0oYik7aWYoXyl7dmFyIHI9bSh0aGlzKS5jb25zdHJ1Y3Rvcjt0PVJlZmxlY3QuY29uc3RydWN0KGUsYXJndW1lbnRzLHIpfWVsc2UgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiB5KHQpfSh0aGlzLHQpfSk7ZnVuY3Rpb24gRSh0KXt2YXIgZTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxFKSxnKHkoZT1BLmNhbGwodGhpcyxmKGYoe30sdCkse30se25hbWU6ImZyZWVUZXh0RWRpdG9yIn0pKSksVSksZyh5KGUpLE4pLGcoeShlKSxEKSxnKHkoZSksTCksdyh5KGUpLFAse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Qmx1ci5iaW5kKHkoZSkpfSksdyh5KGUpLFQse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Rm9jdXMuYmluZCh5KGUpKX0pLHcoeShlKSxDLHt3cml0YWJsZTohMCx2YWx1ZTplLmVkaXRvckRpdklucHV0LmJpbmQoeShlKSl9KSx3KHkoZSksTyx7d3JpdGFibGU6ITAsdmFsdWU6ZS5lZGl0b3JEaXZLZXlkb3duLmJpbmQoeShlKSl9KSx3KHkoZSksRix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdyh5KGUpLE0se3dyaXRhYmxlOiEwLHZhbHVlOiIifSksdyh5KGUpLFIse3dyaXRhYmxlOiEwLHZhbHVlOiIiLmNvbmNhdChlLmlkLCItZWRpdG9yIil9KSx3KHkoZSksSSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx3KHkoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkseCh5KGUpLEYsdC5jb2xvcnx8RS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLHgoeShlKSxqLHQuZm9udFNpemV8fEUuX2RlZmF1bHRGb250U2l6ZSksZX1yZXR1cm4gZT1FLGg9W3trZXk6ImluaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2wxMG5Qcm9taXNlPW5ldyBNYXAoWyJmcmVlX3RleHQyX2RlZmF1bHRfY29udGVudCIsImVkaXRvcl9mcmVlX3RleHQyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSk7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO3RoaXMuX2ludGVybmFsUGFkZGluZz1wYXJzZUZsb2F0KGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1mcmVldGV4dC1wYWRkaW5nIikpfX0se2tleToidXBkYXRlRGVmYXVsdFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkU6RS5fZGVmYXVsdEZvbnRTaXplPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOkUuX2RlZmF1bHRDb2xvcj1lfX19LHtrZXk6ImRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLEUuX2RlZmF1bHRGb250U2l6ZV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1IsRS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3JdXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4sYT1wKG0oRSksImRlc2VyaWFsaXplIix0aGlzKS5jYWxsKHRoaXMsdCxlLHIpO3JldHVybiB4KGEsaix0LmZvbnRTaXplKSx4KGEsRixpLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBjKHQpfShuPXQuY29sb3IpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KG4pfHx1KG4pfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSkseChhLE0sdC52YWx1ZSksYX19XSwocj1be2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRTpTKHRoaXMsTCxHKS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOlModGhpcyxELEIpLmNhbGwodGhpcyxlKX19fSx7a2V5OiJwcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLGsodGhpcyxqKV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isayh0aGlzLEYpXV19fSx7a2V5OiJnZXRJbml0aWFsVHJhbnNsYXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnRTY2FsZTtyZXR1cm5bLUUuX2ludGVybmFsUGFkZGluZyp0LC0oRS5faW50ZXJuYWxQYWRkaW5nK2sodGhpcyxqKSkqdF19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3AobShFLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5pc0F0dGFjaGVkVG9ET018fHRoaXMucGFyZW50LmFkZCh0aGlzKSl9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpfHwodGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCExKSx0aGlzLnBhcmVudC51cGRhdGVUb29sYmFyKGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHAobShFLnByb3RvdHlwZSksImVuYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QucmVtb3ZlKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwLHRoaXMuZGl2LmRyYWdnYWJsZT0hMSx0aGlzLmRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLHRoaXMuZWRpdG9yRGl2LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGsodGhpcyxPKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGsodGhpcyxUKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsayh0aGlzLFApKSx0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsayh0aGlzLEMpKSl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0luRWRpdE1vZGUoKSYmKHRoaXMucGFyZW50LnNldEVkaXRpbmdTdGF0ZSghMCkscChtKEUucHJvdG90eXBlKSwiZGlzYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSExLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixrKHRoaXMsUikpLHRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixrKHRoaXMsTykpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixrKHRoaXMsVCkpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGsodGhpcyxQKSksdGhpcy5lZGl0b3JEaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGsodGhpcyxDKSksdGhpcy5kaXYuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmlzRWRpdGluZz0hMSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7cChtKEUucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHQudGFyZ2V0IT09dGhpcy5lZGl0b3JEaXYmJnRoaXMuZWRpdG9yRGl2LmZvY3VzKCl9fSx7a2V5OiJvbmNlQWRkZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53aWR0aHx8KHRoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpKX19LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZWRpdG9yRGl2fHwiIj09PXRoaXMuZWRpdG9yRGl2LmlubmVyVGV4dC50cmltKCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCEwKSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikscChtKEUucHJvdG90eXBlKSwicmVtb3ZlIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiY29tbWl0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNJbkVkaXRNb2RlKCkmJihwKG0oRS5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksayh0aGlzLEkpfHwoeCh0aGlzLEksITApLHRoaXMucGFyZW50LmFkZFVuZG9hYmxlRWRpdG9yKHRoaXMpKSx0aGlzLmRpc2FibGVFZGl0TW9kZSgpLHgodGhpcyxNLFModGhpcyxOLHEpLmNhbGwodGhpcykudHJpbUVuZCgpKSxTKHRoaXMsVSxIKS5jYWxsKHRoaXMpKX19LHtrZXk6InNob3VsZEdldEtleWJvYXJkRXZlbnRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5FZGl0TW9kZSgpfX0se2tleToiZGJsY2xpY2siLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpfX0se2tleToia2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT10aGlzLmRpdiYmIkVudGVyIj09PXQua2V5JiYodGhpcy5lbmFibGVFZGl0TW9kZSgpLHRoaXMuZWRpdG9yRGl2LmZvY3VzKCkpfX0se2tleToiZWRpdG9yRGl2S2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7RS5fa2V5Ym9hcmRNYW5hZ2VyLmV4ZWModGhpcyx0KX19LHtrZXk6ImVkaXRvckRpdkZvY3VzIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmlzRWRpdGluZz0hMH19LHtrZXk6ImVkaXRvckRpdkJsdXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuaXNFZGl0aW5nPSExfX0se2tleToiZWRpdG9yRGl2SW5wdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJmcmVlVGV4dEVkaXRpbmciLHRoaXMuaXNFbXB0eSgpKX19LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsImNvbW1lbnQiKSx0aGlzLmVkaXRvckRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIil9fSx7a2V5OiJlbmFibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsInRleHRib3giKSx0aGlzLmVkaXRvckRpdi5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIiwhMCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkscChtKEUucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMuZWRpdG9yRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWRpdG9yRGl2LmNsYXNzTmFtZT0iaW50ZXJuYWwiLHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgiaWQiLGsodGhpcyxSKSksdGhpcy5lbmFibGVFZGl0aW5nKCksRS5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfZnJlZV90ZXh0Ml9hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KX0pKSxFLl9sMTBuUHJvbWlzZS5nZXQoImZyZWVfdGV4dDJfZGVmYXVsdF9jb250ZW50IikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJkZWZhdWx0LWNvbnRlbnQiLHQpfSkpLHRoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZT0hMDt2YXIgbj10aGlzLmVkaXRvckRpdi5zdHlsZTtpZihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGsodGhpcyxqKSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpLG4uY29sb3I9ayh0aGlzLEYpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLmVkaXRvckRpdiksdGhpcy5vdmVybGF5RGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJvdmVybGF5IiwiZW5hYmxlZCIpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLm92ZXJsYXlEaXYpLCgwLGEuYmluZEV2ZW50cykodGhpcyx0aGlzLmRpdixbImRibGNsaWNrIiwia2V5ZG93biJdKSx0aGlzLndpZHRoKXt2YXIgaT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWlbMF0sdT1pWzFdO3RoaXMuc2V0QXQodCpvLGUqdSx0aGlzLndpZHRoKm8sdGhpcy5oZWlnaHQqdSk7dmFyIGMsaD1zKGsodGhpcyxNKS5zcGxpdCgiXG4iKSk7dHJ5e2ZvcihoLnMoKTshKGM9aC5uKCkpLmRvbmU7KXt2YXIgZj1jLnZhbHVlLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5hcHBlbmQoZj9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKSx0aGlzLmVkaXRvckRpdi5hcHBlbmQoZCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGU9ITF9ZWxzZSB0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwO3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvckRpdn19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD1FLl9pbnRlcm5hbFBhZGRpbmcqdGhpcy5wYXJlbnRTY2FsZSxlPXRoaXMuZ2V0UmVjdCh0LHQpLHI9by5Bbm5vdGF0aW9uRWRpdG9yLl9jb2xvck1hbmFnZXIuY29udmVydCh0aGlzLmlzQXR0YWNoZWRUb0RPTT9nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWRpdG9yRGl2KS5jb2xvcjprKHRoaXMsRikpO3JldHVybnthbm5vdGF0aW9uVHlwZTppLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhULGNvbG9yOnIsZm9udFNpemU6ayh0aGlzLGopLHZhbHVlOmsodGhpcyxNKSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscmVjdDplLHJvdGF0aW9uOnRoaXMucm90YXRpb259fX1dKSYmZChlLnByb3RvdHlwZSxyKSxoJiZkKGUsaCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksRX0oby5Bbm5vdGF0aW9uRWRpdG9yKTtmdW5jdGlvbiBHKHQpe3ZhciBlPXRoaXMscj1mdW5jdGlvbih0KXtlLmVkaXRvckRpdi5zdHlsZS5mb250U2l6ZT0iY2FsYygiLmNvbmNhdCh0LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIiksZS50cmFuc2xhdGUoMCwtKHQtayhlLGopKSplLnBhcmVudFNjYWxlKSx4KGUsaix0KSxTKGUsVSxIKS5jYWxsKGUpfSxuPWsodGhpcyxqKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyKHQpfSx1bmRvOmZ1bmN0aW9uKCl7cihuKX0sbXVzdEV4ZWM6ITAsdHlwZTppLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkUsb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIEIodCl7dmFyIGU9dGhpcyxyPWsodGhpcyxGKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXt4KGUsRixlLmVkaXRvckRpdi5zdHlsZS5jb2xvcj10KX0sdW5kbzpmdW5jdGlvbigpe3goZSxGLGUuZWRpdG9yRGl2LnN0eWxlLmNvbG9yPXIpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIHEoKXt2YXIgdD10aGlzLmVkaXRvckRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVkaXRvckRpdi5pbm5lclRleHQ7dmFyIGUscj1bXSxuPXModCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1lLnZhbHVlO3IucHVzaChpLmlubmVyVGV4dC5yZXBsYWNlKC9cclxuP3xcbi8sIiIpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIuam9pbigiXG4iKX1mdW5jdGlvbiBIKCl7dmFyIHQsZT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxyPWVbMF0sbj1lWzFdO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXQ9dGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt2YXIgaT10aGlzLmN1cnJlbnRMYXllcixhPXRoaXMuZGl2LG89YS5zdHlsZS5kaXNwbGF5O2Euc3R5bGUuZGlzcGxheT0iaGlkZGVuIixpLmRpdi5hcHBlbmQodGhpcy5kaXYpLHQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhLnJlbW92ZSgpLGEuc3R5bGUuZGlzcGxheT1vfXRoaXMud2lkdGg9dC53aWR0aC9yLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0L259ZS5GcmVlVGV4dEVkaXRvcj1XLGIoVywiX2ZyZWVUZXh0RGVmYXVsdENvbnRlbnQiLCIiKSxiKFcsIl9sMTBuUHJvbWlzZSIsdm9pZCAwKSxiKFcsIl9pbnRlcm5hbFBhZGRpbmciLDApLGIoVywiX2RlZmF1bHRDb2xvciIsbnVsbCksYihXLCJfZGVmYXVsdEZvbnRTaXplIiwxMCksYihXLCJfa2V5Ym9hcmRNYW5hZ2VyIixuZXcgYS5LZXlib2FyZE1hbmFnZXIoW1tbImN0cmwrRW50ZXIiLCJtYWMrbWV0YStFbnRlciIsIkVzY2FwZSIsIm1hYytFc2NhcGUiXSxXLnByb3RvdHlwZS5jb21taXRPclJlbW92ZV1dKSksYihXLCJfdHlwZSIsImZyZWV0ZXh0Iil9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLklua0VkaXRvcj12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImZpdEN1cnZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5maXRDdXJ2ZX19KTt2YXIgaT1yKDEpLGE9cigxMzUpLG89cigxNTUpLHM9cigxMzYpO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWgodCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGYodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxoKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8aCh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaCh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZih0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2YodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGYodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYobj1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP2QoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXt3KHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpkKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSkpfXJldHVybiB0fWZ1bmN0aW9uIHYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEEobi5rZXkpLG4pfX1mdW5jdGlvbiB5KCl7cmV0dXJuIHk9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkmJm51bGwhPT0odD1iKHQpKTspO3JldHVybiB0fSh0LGUpO2lmKG4pe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKTtyZXR1cm4gaS5nZXQ/aS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/dDpyKTppLnZhbHVlfX0seS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbSh0LGUpfWZ1bmN0aW9uIGcodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGIodCl9ZnVuY3Rpb24gXyh0LGUpe1ModCxlKSxlLmFkZCh0KX1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4oZT1BKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIEEodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGsodCxlLHIpe1ModCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIFModCxlKXtpZihlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKHQhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgc3RhdGljIGFjY2VzcyBvZiB3cm9uZyBwcm92ZW5hbmNlIil9KHQsZSkscn1mdW5jdGlvbiBFKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LFQodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LFQodCxlLCJnZXQiKSl9ZnVuY3Rpb24gVCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBDKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfXZhciBPPTE2LEY9MTAwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha01hcCxEPW5ldyBXZWFrTWFwLE49bmV3IFdlYWtNYXAsVT1uZXcgV2Vha01hcCxXPW5ldyBXZWFrTWFwLEc9bmV3IFdlYWtNYXAsQj1uZXcgV2Vha01hcCxxPW5ldyBXZWFrTWFwLEg9bmV3IFdlYWtNYXAsej1uZXcgV2Vha01hcCxWPW5ldyBXZWFrU2V0LFg9bmV3IFdlYWtTZXQsWT1uZXcgV2Vha1NldCxLPW5ldyBXZWFrU2V0LEo9bmV3IFdlYWtTZXQsUT1uZXcgV2Vha1NldCwkPW5ldyBXZWFrU2V0LFo9bmV3IFdlYWtTZXQsdHQ9bmV3IFdlYWtTZXQsZXQ9bmV3IFdlYWtTZXQscnQ9bmV3IFdlYWtTZXQsbnQ9bmV3IFdlYWtTZXQsaXQ9bmV3IFdlYWtTZXQsYXQ9bmV3IFdlYWtTZXQsb3Q9bmV3IFdlYWtTZXQsc3Q9bmV3IFdlYWtTZXQsbHQ9bmV3IFdlYWtTZXQsdXQ9bmV3IFdlYWtTZXQsY3Q9bmV3IFdlYWtTZXQsaHQ9bmV3IFdlYWtTZXQsZnQ9bmV3IFdlYWtTZXQsZHQ9bmV3IFdlYWtTZXQscHQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJm0odCxlKX0oZCx0KTt2YXIgZSxyLG8scyxoLGY9KHM9ZCxoPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciB0LGU9YihzKTtpZihoKXt2YXIgcj1iKHRoaXMpLmNvbnN0cnVjdG9yO3Q9UmVmbGVjdC5jb25zdHJ1Y3QoZSxhcmd1bWVudHMscil9ZWxzZSB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW4oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGcodCl9KHRoaXMsdCl9KTtmdW5jdGlvbiBkKHQpe3ZhciBlO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGQpLF8oZyhlPWYuY2FsbCh0aGlzLHAocCh7fSx0KSx7fSx7bmFtZToiaW5rRWRpdG9yIn0pKSksZHQpLF8oZyhlKSxmdCksXyhnKGUpLGh0KSxfKGcoZSksY3QpLF8oZyhlKSx1dCksXyhnKGUpLGx0KSxfKGcoZSksc3QpLF8oZyhlKSxvdCksXyhnKGUpLGF0KSxfKGcoZSksaXQpLF8oZyhlKSxudCksXyhnKGUpLHJ0KSxfKGcoZSksZXQpLF8oZyhlKSx0dCksXyhnKGUpLFopLF8oZyhlKSwkKSxfKGcoZSksUSksXyhnKGUpLEopLF8oZyhlKSxLKSxfKGcoZSksWSksXyhnKGUpLFgpLF8oZyhlKSxWKSxrKGcoZSksTSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSxSLHt3cml0YWJsZTohMCx2YWx1ZTowfSksayhnKGUpLEkse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVybW92ZS5iaW5kKGcoZSkpfSksayhnKGUpLEwse3dyaXRhYmxlOiEwLHZhbHVlOmUuY2FudmFzUG9pbnRlcmxlYXZlLmJpbmQoZyhlKSl9KSxrKGcoZSksRCx7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVydXAuYmluZChnKGUpKX0pLGsoZyhlKSxOLHt3cml0YWJsZTohMCx2YWx1ZTplLmNhbnZhc1BvaW50ZXJkb3duLmJpbmQoZyhlKSl9KSxrKGcoZSksVSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksVyx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksRyx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGsoZyhlKSxCLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksayhnKGUpLHEse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksSCx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSx6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZS5jb2xvcj10LmNvbG9yfHxudWxsLGUudGhpY2tuZXNzPXQudGhpY2tuZXNzfHxudWxsLGUub3BhY2l0eT10Lm9wYWNpdHl8fG51bGwsZS5wYXRocz1bXSxlLmJlemllclBhdGgyRD1bXSxlLmN1cnJlbnRQYXRoPVtdLGUuc2NhbGVGYWN0b3I9MSxlLnRyYW5zbGF0aW9uWD1lLnRyYW5zbGF0aW9uWT0wLGUueD0wLGUueT0wLGV9cmV0dXJuIGU9ZCxvPVt7a2V5OiJpbml0aWFsaXplIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9sMTBuUHJvbWlzZT1uZXcgTWFwKFsiZWRpdG9yX2lua19jYW52YXNfYXJpYV9sYWJlbCIsImVkaXRvcl9pbmsyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSl9fSx7a2V5OiJ1cGRhdGVEZWZhdWx0UGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUzpkLl9kZWZhdWx0VGhpY2tuZXNzPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUjpkLl9kZWZhdWx0Q29sb3I9ZTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFk6ZC5fZGVmYXVsdE9wYWNpdHk9ZS8xMDB9fX0se2tleToiZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW1tpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1MsZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCpkLl9kZWZhdWx0T3BhY2l0eSldXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG49eShiKGQpLCJkZXNlcmlhbGl6ZSIsdGhpcykuY2FsbCh0aGlzLHQsZSxyKTtuLnRoaWNrbmVzcz10LnRoaWNrbmVzcyxuLmNvbG9yPWkuVXRpbC5tYWtlSGV4Q29sb3IuYXBwbHkoaS5VdGlsLHUodC5jb2xvcikpLG4ub3BhY2l0eT10Lm9wYWNpdHk7dmFyIGE9YyhuLnBhZ2VEaW1lbnNpb25zLDIpLG89YVswXSxzPWFbMV0saD1uLndpZHRoKm8sZj1uLmhlaWdodCpzLHA9bi5wYXJlbnRTY2FsZSx2PXQudGhpY2tuZXNzLzI7RShuLE0saC9mKSxFKG4sVSwhMCksRShuLHEsTWF0aC5yb3VuZChoKSksRShuLEgsTWF0aC5yb3VuZChmKSk7dmFyIG0sZz1sKHQucGF0aHMpO3RyeXtmb3IoZy5zKCk7IShtPWcubigpKS5kb25lOyl7dmFyIF89bS52YWx1ZS5iZXppZXIsdz1bXTtuLnBhdGhzLnB1c2godyk7Zm9yKHZhciBBPXAqKF9bMF0tdiksaz1wKihmLV9bMV0tdiksUz0yLFA9Xy5sZW5ndGg7UzxQO1MrPTYpe3ZhciBUPXAqKF9bU10tdiksRj1wKihmLV9bUysxXS12KSxqPXAqKF9bUysyXS12KSxMPXAqKGYtX1tTKzNdLXYpLEQ9cCooX1tTKzRdLXYpLE49cCooZi1fW1MrNV0tdik7dy5wdXNoKFtbQSxrXSxbVCxGXSxbaixMXSxbRCxOXV0pLEE9RCxrPU59dmFyIFc9eCh0aGlzLGQsT3QpLmNhbGwodGhpcyx3KTtuLmJlemllclBhdGgyRC5wdXNoKFcpfX1jYXRjaCh0KXtnLmUodCl9ZmluYWxseXtnLmYoKX12YXIgRz1DKG4sY3QsSXQpLmNhbGwobik7cmV0dXJuIEUobixJLE1hdGgubWF4KE8sR1syXS1HWzBdKSksRShuLFIsTWF0aC5tYXgoTyxHWzNdLUdbMV0pKSxDKG4sYXQsVHQpLmNhbGwobixoLGYpLG59fV0sKHI9W3trZXk6InVwZGF0ZVBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1M6Qyh0aGlzLFYsdnQpLmNhbGwodGhpcyxlKTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SOkModGhpcyxYLHl0KS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19PUEFDSVRZOkModGhpcyxZLG10KS5jYWxsKHRoaXMsZSl9fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm5bW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyx0aGlzLnRoaWNrbmVzc3x8ZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLHRoaXMuY29sb3J8fGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCoobnVsbCE9PSh0PXRoaXMub3BhY2l0eSkmJnZvaWQgMCE9PXQ/dDpkLl9kZWZhdWx0T3BhY2l0eSkpXV19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3koYihkLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5jYW52YXN8fChDKHRoaXMscnQseHQpLmNhbGwodGhpcyksQyh0aGlzLG50LEV0KS5jYWxsKHRoaXMpKSx0aGlzLmlzQXR0YWNoZWRUb0RPTXx8KHRoaXMucGFyZW50LmFkZCh0aGlzKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcykpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuY2FudmFzJiYodGhpcy5pc0VtcHR5KCl8fHRoaXMuY29tbWl0KCksdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMuaGVpZ2h0PTAsdGhpcy5jYW52YXMucmVtb3ZlKCksdGhpcy5jYW52YXM9bnVsbCxQKHRoaXMsQikuZGlzY29ubmVjdCgpLEUodGhpcyxCLG51bGwpLHkoYihkLnByb3RvdHlwZSksInJlbW92ZSIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJzZXRQYXJlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpeyF0aGlzLnBhcmVudCYmdD90aGlzLl91aU1hbmFnZXIucmVtb3ZlU2hvdWxkUmVzY2FsZSh0aGlzKTp0aGlzLnBhcmVudCYmbnVsbD09PXQmJnRoaXMuX3VpTWFuYWdlci5hZGRTaG91bGRSZXNjYWxlKHRoaXMpLHkoYihkLnByb3RvdHlwZSksInNldFBhcmVudCIsdGhpcykuY2FsbCh0aGlzLHQpfX0se2tleToib25TY2FsZUNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV0sbj10aGlzLndpZHRoKmUsaT10aGlzLmhlaWdodCpyO3RoaXMuc2V0RGltZW5zaW9ucyhuLGkpfX0se2tleToiZW5hYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7UCh0aGlzLFUpfHxudWxsPT09dGhpcy5jYW52YXN8fCh5KGIoZC5wcm90b3R5cGUpLCJlbmFibGVFZGl0TW9kZSIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6ImRpc2FibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpJiZudWxsIT09dGhpcy5jYW52YXMmJih5KGIoZC5wcm90b3R5cGUpLCJkaXNhYmxlRWRpdE1vZGUiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5kaXYuZHJhZ2dhYmxlPSF0aGlzLmlzRW1wdHkoKSx0aGlzLmRpdi5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0aW5nIiksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6Im9uY2VBZGRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpdi5kcmFnZ2FibGU9IXRoaXMuaXNFbXB0eSgpfX0se2tleToiaXNFbXB0eSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMucGF0aHMubGVuZ3RofHwxPT09dGhpcy5wYXRocy5sZW5ndGgmJjA9PT10aGlzLnBhdGhzWzBdLmxlbmd0aH19LHtrZXk6ImNvbW1pdCIsdmFsdWU6ZnVuY3Rpb24oKXtQKHRoaXMsVSl8fCh5KGIoZC5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5kaXNhYmxlRWRpdE1vZGUoKSx0aGlzLnNldEluRm9yZWdyb3VuZCgpLEUodGhpcyxVLCEwKSx0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJkaXNhYmxlZCIpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzLCEwKSx0aGlzLnBhcmVudC5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMCksdGhpcy5wYXJlbnQubW92ZUVkaXRvckluRE9NKHRoaXMpLHRoaXMuZGl2LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7eShiKGQucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHRoaXMuZW5hYmxlRWRpdE1vZGUoKX19LHtrZXk6ImNhbnZhc1BvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJiFQKHRoaXMsVSkmJih0aGlzLnNldEluRm9yZWdyb3VuZCgpLCJtb3VzZSIhPT10LnR5cGUmJnRoaXMuZGl2LmZvY3VzKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksQyh0aGlzLFEsX3QpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybW92ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSxDKHRoaXMsJCx3dCkuY2FsbCh0aGlzLHQub2Zmc2V0WCx0Lm9mZnNldFkpfX0se2tleToiY2FudmFzUG9pbnRlcnVwIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJjAhPT10aGlzLmN1cnJlbnRQYXRoLmxlbmd0aCYmKHQuc3RvcFByb3BhZ2F0aW9uKCksQyh0aGlzLGV0LFN0KS5jYWxsKHRoaXMsdCksdGhpcy5zZXRJbkJhY2tncm91bmQoKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybGVhdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe0ModGhpcyxldCxTdCkuY2FsbCh0aGlzLHQpLHRoaXMuc2V0SW5CYWNrZ3JvdW5kKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkseShiKGQucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLGQuX2wxMG5Qcm9taXNlLmdldCgiZWRpdG9yX2luazJfYXJpYV9sYWJlbCIpLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBudWxsPT09KGU9ci5kaXYpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCl9KSk7dmFyIG49YyhDKHRoaXMsSyxndCkuY2FsbCh0aGlzKSw0KSxpPW5bMF0sYT1uWzFdLG89blsyXSxzPW5bM107aWYodGhpcy5zZXRBdChpLGEsMCwwKSx0aGlzLnNldERpbXMobyxzKSxDKHRoaXMscnQseHQpLmNhbGwodGhpcyksdGhpcy53aWR0aCl7dmFyIGw9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMiksdT1sWzBdLGg9bFsxXTt0aGlzLnNldEF0KHQqdSxlKmgsdGhpcy53aWR0aCp1LHRoaXMuaGVpZ2h0KmgpLEUodGhpcyxXLCEwKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksdGhpcy5zZXREaW1zKHRoaXMud2lkdGgqdSx0aGlzLmhlaWdodCpoKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksQyh0aGlzLGR0LER0KS5jYWxsKHRoaXMpLHRoaXMuZGl2LmNsYXNzTGlzdC5hZGQoImRpc2FibGVkIil9ZWxzZSB0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJlZGl0aW5nIiksdGhpcy5lbmFibGVFZGl0TW9kZSgpO3JldHVybiBDKHRoaXMsbnQsRXQpLmNhbGwodGhpcyksdGhpcy5kaXZ9fSx7a2V5OiJzZXREaW1lbnNpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucm91bmQodCksbj1NYXRoLnJvdW5kKGUpO2lmKFAodGhpcyxxKSE9PXJ8fFAodGhpcyxIKSE9PW4pe0UodGhpcyxxLHIpLEUodGhpcyxILG4pLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsUCh0aGlzLE0pJiZNYXRoLmFicyhQKHRoaXMsTSktdC9lKT4uMDEmJihlPU1hdGguY2VpbCh0L1AodGhpcyxNKSksdGhpcy5zZXREaW1zKHQsZSkpO3ZhciBpPWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxvPWlbMV07dGhpcy53aWR0aD10L2EsdGhpcy5oZWlnaHQ9ZS9vLFAodGhpcyxVKSYmQyh0aGlzLGF0LFR0KS5jYWxsKHRoaXMsdCxlKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD10aGlzLmdldFJlY3QoMCwwKSxlPXRoaXMucm90YXRpb24lMTgwPT0wP3RbM10tdFsxXTp0WzJdLXRbMF0scj1hLkFubm90YXRpb25FZGl0b3IuX2NvbG9yTWFuYWdlci5jb252ZXJ0KHRoaXMuY3R4LnN0cm9rZVN0eWxlKTtyZXR1cm57YW5ub3RhdGlvblR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkssY29sb3I6cix0aGlja25lc3M6dGhpcy50aGlja25lc3Msb3BhY2l0eTp0aGlzLm9wYWNpdHkscGF0aHM6Qyh0aGlzLHN0LEZ0KS5jYWxsKHRoaXMsdGhpcy5zY2FsZUZhY3Rvci90aGlzLnBhcmVudFNjYWxlLHRoaXMudHJhbnNsYXRpb25YLHRoaXMudHJhbnNsYXRpb25ZLGUpLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxyZWN0OnQscm90YXRpb246dGhpcy5yb3RhdGlvbn19fV0pJiZ2KGUucHJvdG90eXBlLHIpLG8mJnYoZSxvKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxkfShhLkFubm90YXRpb25FZGl0b3IpO2Z1bmN0aW9uIHZ0KHQpe3ZhciBlPXRoaXMscj10aGlzLnRoaWNrbmVzczt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLnRoaWNrbmVzcz10LEMoZSxmdCxMdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UudGhpY2tuZXNzPXIsQyhlLGZ0LEx0KS5jYWxsKGUpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24geXQodCl7dmFyIGU9dGhpcyxyPXRoaXMuY29sb3I7dGhpcy5hZGRDb21tYW5kcyh7Y21kOmZ1bmN0aW9uKCl7ZS5jb2xvcj10LEMoZSx0dCxrdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UuY29sb3I9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIG10KHQpe3ZhciBlPXRoaXM7dC89MTAwO3ZhciByPXRoaXMub3BhY2l0eTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLm9wYWNpdHk9dCxDKGUsdHQsa3QpLmNhbGwoZSl9LHVuZG86ZnVuY3Rpb24oKXtlLm9wYWNpdHk9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24gZ3QoKXt2YXIgdD10aGlzLnBhcmVudFJvdGF0aW9uLGU9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscj1lWzBdLG49ZVsxXTtzd2l0Y2godCl7Y2FzZSA5MDpyZXR1cm5bMCxuLG4scl07Y2FzZSAxODA6cmV0dXJuW3IsbixyLG5dO2Nhc2UgMjcwOnJldHVybltyLDAsbixyXTtkZWZhdWx0OnJldHVyblswLDAscixuXX19ZnVuY3Rpb24gYnQoKXt2YXIgdD10aGlzLmN0eCxlPXRoaXMuY29sb3Iscj10aGlzLm9wYWNpdHksbj10aGlzLnRoaWNrbmVzcyxpPXRoaXMucGFyZW50U2NhbGUsYT10aGlzLnNjYWxlRmFjdG9yO3QubGluZVdpZHRoPW4qaS9hLHQubGluZUNhcD0icm91bmQiLHQubGluZUpvaW49InJvdW5kIix0Lm1pdGVyTGltaXQ9MTAsdC5zdHJva2VTdHlsZT0iIi5jb25jYXQoZSkuY29uY2F0KCgwLHMub3BhY2l0eVRvSGV4KShyKSl9ZnVuY3Rpb24gX3QodCxlKXt2YXIgcixuPXRoaXM7dGhpcy5pc0VkaXRpbmc9ITAsUCh0aGlzLFcpfHwoRSh0aGlzLFcsITApLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSx0aGlzLnRoaWNrbmVzc3x8KHRoaXMudGhpY2tuZXNzPXB0Ll9kZWZhdWx0VGhpY2tuZXNzKSx0aGlzLmNvbG9yfHwodGhpcy5jb2xvcj1wdC5fZGVmYXVsdENvbG9yfHxhLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLG51bGwhPT0ocj10aGlzLm9wYWNpdHkpJiZ2b2lkIDAhPT1yfHwodGhpcy5vcGFjaXR5PXB0Ll9kZWZhdWx0T3BhY2l0eSkpLHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsbnVsbCksQyh0aGlzLEosYnQpLmNhbGwodGhpcyksdGhpcy5jdHguYmVnaW5QYXRoKCksdGhpcy5jdHgubW92ZVRvKHQsZSksRSh0aGlzLHosKGZ1bmN0aW9uKCl7dmFyIHQ7UChuLHopJiYoUChuLEcpJiYobi5pc0VtcHR5KCk/KG4uY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksbi5jdHguY2xlYXJSZWN0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpKTpDKG4sdHQsa3QpLmNhbGwobiksKHQ9bi5jdHgpLmxpbmVUby5hcHBseSh0LHUoUChuLEcpKSksRShuLEcsbnVsbCksbi5jdHguc3Ryb2tlKCkpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUChuLHopKSl9KSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShQKHRoaXMseikpfWZ1bmN0aW9uIHd0KHQsZSl7dmFyIHI9Yyh0aGlzLmN1cnJlbnRQYXRoLmF0KC0xKSwyKSxuPXJbMF0saT1yWzFdO3Q9PT1uJiZlPT09aXx8KHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsW3QsZV0pKX1mdW5jdGlvbiBBdCh0LGUpe3ZhciByPXRoaXM7dGhpcy5jdHguY2xvc2VQYXRoKCksRSh0aGlzLHosbnVsbCksdD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuY2FudmFzLndpZHRoKSxlPU1hdGgubWluKE1hdGgubWF4KGUsMCksdGhpcy5jYW52YXMuaGVpZ2h0KTt2YXIgbixpPWModGhpcy5jdXJyZW50UGF0aC5hdCgtMSksMiksYT1pWzBdLHM9aVsxXTtpZih0PT09YSYmZT09PXN8fHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksMSE9PXRoaXMuY3VycmVudFBhdGgubGVuZ3RoKW49KDAsby5maXRDdXJ2ZSkodGhpcy5jdXJyZW50UGF0aCwzMCxudWxsKTtlbHNle3ZhciBsPVt0LGVdO249W1tsLGwuc2xpY2UoKSxsLnNsaWNlKCksbF1dfXZhciB1PXgocHQscHQsT3QpLmNhbGwocHQsbik7dGhpcy5jdXJyZW50UGF0aC5sZW5ndGg9MCx0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyLnBhdGhzLnB1c2gobiksci5iZXppZXJQYXRoMkQucHVzaCh1KSxyLnJlYnVpbGQoKX0sdW5kbzpmdW5jdGlvbigpe3IucGF0aHMucG9wKCksci5iZXppZXJQYXRoMkQucG9wKCksMD09PXIucGF0aHMubGVuZ3RoP3IucmVtb3ZlKCk6KHIuY2FudmFzfHwoQyhyLHJ0LHh0KS5jYWxsKHIpLEMocixudCxFdCkuY2FsbChyKSksQyhyLGZ0LEx0KS5jYWxsKHIpKX0sbXVzdEV4ZWM6ITB9KX1mdW5jdGlvbiBrdCgpe2lmKHRoaXMuaXNFbXB0eSgpKUModGhpcyxvdCxDdCkuY2FsbCh0aGlzKTtlbHNle0ModGhpcyxKLGJ0KS5jYWxsKHRoaXMpO3ZhciB0PXRoaXMuY2FudmFzLGU9dGhpcy5jdHg7ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGUuY2xlYXJSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyk7dmFyIHIsbj1sKHRoaXMuYmV6aWVyUGF0aDJEKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zdHJva2UoaSl9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfX19ZnVuY3Rpb24gU3QodCl7Qyh0aGlzLFosQXQpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSx0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksdGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9ZnVuY3Rpb24geHQoKXt2YXIgdD10aGlzO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD0wLHRoaXMuY2FudmFzLmNsYXNzTmFtZT0iaW5rRWRpdG9yQ2FudmFzIixwdC5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfaW5rX2NhbnZhc19hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj10LmNhbnZhcyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX0pKSx0aGlzLmRpdi5hcHBlbmQodGhpcy5jYW52YXMpLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIil9ZnVuY3Rpb24gRXQoKXt2YXIgdD10aGlzLGU9bnVsbDtFKHRoaXMsQixuZXcgUmVzaXplT2JzZXJ2ZXIoKGZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uY29udGVudFJlY3Q7bi53aWR0aCYmbi5oZWlnaHQmJihudWxsIT09ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmZpeERpbXMoKSxlPW51bGx9KSxGKSx0LnNldERpbWVuc2lvbnMobi53aWR0aCxuLmhlaWdodCkpfSkpKSxQKHRoaXMsQikub2JzZXJ2ZSh0aGlzLmRpdil9ZnVuY3Rpb24gUHQoKXtpZihQKHRoaXMsVykpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV07dGhpcy5jYW52YXMud2lkdGg9TWF0aC5jZWlsKHRoaXMud2lkdGgqZSksdGhpcy5jYW52YXMuaGVpZ2h0PU1hdGguY2VpbCh0aGlzLmhlaWdodCpyKSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyl9fWZ1bmN0aW9uIFR0KHQsZSl7dmFyIHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpLG49KHQtcikvUCh0aGlzLEkpLGk9KGUtcikvUCh0aGlzLFIpO3RoaXMuc2NhbGVGYWN0b3I9TWF0aC5taW4obixpKX1mdW5jdGlvbiBDdCgpe3ZhciB0PUModGhpcyxodCxqdCkuY2FsbCh0aGlzKS8yO3RoaXMuY3R4LnNldFRyYW5zZm9ybSh0aGlzLnNjYWxlRmFjdG9yLDAsMCx0aGlzLnNjYWxlRmFjdG9yLHRoaXMudHJhbnNsYXRpb25YKnRoaXMuc2NhbGVGYWN0b3IrdCx0aGlzLnRyYW5zbGF0aW9uWSp0aGlzLnNjYWxlRmFjdG9yK3QpfWZ1bmN0aW9uIE90KHQpe2Zvcih2YXIgZT1uZXcgUGF0aDJELHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe3ZhciBpPWModFtyXSw0KSxhPWlbMF0sbz1pWzFdLHM9aVsyXSxsPWlbM107MD09PXImJmUubW92ZVRvLmFwcGx5KGUsdShhKSksZS5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX1yZXR1cm4gZX1mdW5jdGlvbiBGdCh0LGUscixuKXt2YXIgaSxhLG8scz1bXSx1PXRoaXMudGhpY2tuZXNzLzIsaD1sKHRoaXMucGF0aHMpO3RyeXtmb3IoaC5zKCk7IShvPWgubigpKS5kb25lOyl7dmFyIGY9by52YWx1ZTtpPVtdLGE9W107Zm9yKHZhciBkPTAscD1mLmxlbmd0aDtkPHA7ZCsrKXt2YXIgdj1jKGZbZF0sNCkseT12WzBdLG09dlsxXSxnPXZbMl0sYj12WzNdLF89dCooeVswXStlKSt1LHc9bi10Kih5WzFdK3IpLXUsQT10KihtWzBdK2UpK3Usaz1uLXQqKG1bMV0rciktdSxTPXQqKGdbMF0rZSkrdSx4PW4tdCooZ1sxXStyKS11LEU9dCooYlswXStlKSt1LFA9bi10KihiWzFdK3IpLXU7MD09PWQmJihpLnB1c2goXyx3KSxhLnB1c2goXyx3KSksaS5wdXNoKEEsayxTLHgsRSxQKSxDKHRoaXMsbHQsTXQpLmNhbGwodGhpcyxfLHcsQSxrLFMseCxFLFAsNCxhKX1zLnB1c2goe2JlemllcjppLHBvaW50czphfSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiBzfWZ1bmN0aW9uIE10KHQsZSxyLG4saSxhLG8scyxsLHUpe2lmKEModGhpcyx1dCxSdCkuY2FsbCh0aGlzLHQsZSxyLG4saSxhLG8scykpdS5wdXNoKG8scyk7ZWxzZXtmb3IodmFyIGM9MTtjPGwtMTtjKyspe3ZhciBoPWMvbCxmPTEtaCxkPWgqdCtmKnIscD1oKmUrZipuLHY9aCpyK2YqaSx5PWgqbitmKmE7ZD1oKihkPWgqZCtmKnYpK2YqKHY9aCp2K2YqKGgqaStmKm8pKSxwPWgqKHA9aCpwK2YqeSkrZiooeT1oKnkrZiooaCphK2YqcykpLHUucHVzaChkLHApfXUucHVzaChvLHMpfX1mdW5jdGlvbiBSdCh0LGUscixuLGksYSxvLHMpe3ZhciBsPU1hdGgucG93KDMqci0yKnQtbywyKSx1PU1hdGgucG93KDMqbi0yKmUtcywyKSxjPU1hdGgucG93KDMqaS10LTIqbywyKSxoPU1hdGgucG93KDMqYS1lLTIqcywyKTtyZXR1cm4gTWF0aC5tYXgobCxjKStNYXRoLm1heCh1LGgpPD0xMH1mdW5jdGlvbiBJdCgpe3ZhciB0LGU9MS8wLHI9LTEvMCxuPTEvMCxhPS0xLzAsbz1sKHRoaXMucGF0aHMpO3RyeXtmb3Ioby5zKCk7ISh0PW8ubigpKS5kb25lOyl7dmFyIHMsaD1sKHQudmFsdWUpO3RyeXtmb3IoaC5zKCk7IShzPWgubigpKS5kb25lOyl7dmFyIGY9YyhzLnZhbHVlLDQpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWkuVXRpbC5iZXppZXJCb3VuZGluZ0JveC5hcHBseShpLlV0aWwsdShkKS5jb25jYXQodShwKSx1KHYpLHUoeSkpKTtlPU1hdGgubWluKGUsbVswXSksbj1NYXRoLm1pbihuLG1bMV0pLHI9TWF0aC5tYXgocixtWzJdKSxhPU1hdGgubWF4KGEsbVszXSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9cmV0dXJuW2UsbixyLGFdfWZ1bmN0aW9uIGp0KCl7cmV0dXJuIFAodGhpcyxVKT9NYXRoLmNlaWwodGhpcy50aGlja25lc3MqdGhpcy5wYXJlbnRTY2FsZSk6MH1mdW5jdGlvbiBMdCgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMuaXNFbXB0eSgpKWlmKFAodGhpcyxVKSl7dmFyIGU9Qyh0aGlzLGN0LEl0KS5jYWxsKHRoaXMpLHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpO0UodGhpcyxJLE1hdGgubWF4KE8sZVsyXS1lWzBdKSksRSh0aGlzLFIsTWF0aC5tYXgoTyxlWzNdLWVbMV0pKTt2YXIgbj1NYXRoLmNlaWwocitQKHRoaXMsSSkqdGhpcy5zY2FsZUZhY3RvciksaT1NYXRoLmNlaWwocitQKHRoaXMsUikqdGhpcy5zY2FsZUZhY3RvciksYT1jKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWFbMF0scz1hWzFdO3RoaXMud2lkdGg9bi9vLHRoaXMuaGVpZ2h0PWkvcyxFKHRoaXMsTSxuL2kpLEModGhpcyxkdCxEdCkuY2FsbCh0aGlzKTt2YXIgbD10aGlzLnRyYW5zbGF0aW9uWCx1PXRoaXMudHJhbnNsYXRpb25ZO3RoaXMudHJhbnNsYXRpb25YPS1lWzBdLHRoaXMudHJhbnNsYXRpb25ZPS1lWzFdLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksRSh0aGlzLHEsbiksRSh0aGlzLEgsaSksdGhpcy5zZXREaW1zKG4saSk7dmFyIGg9dD9yL3RoaXMuc2NhbGVGYWN0b3IvMjowO3RoaXMudHJhbnNsYXRlKGwtdGhpcy50cmFuc2xhdGlvblgtaCx1LXRoaXMudHJhbnNsYXRpb25ZLWgpfWVsc2UgQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpfWZ1bmN0aW9uIER0KCl7dmFyIHQ9dGhpcy5kaXYuc3R5bGU7UCh0aGlzLE0pPj0xPyh0Lm1pbkhlaWdodD0iIi5jb25jYXQoTywicHgiKSx0Lm1pbldpZHRoPSIiLmNvbmNhdChNYXRoLnJvdW5kKFAodGhpcyxNKSpPKSwicHgiKSk6KHQubWluV2lkdGg9IiIuY29uY2F0KE8sInB4IiksdC5taW5IZWlnaHQ9IiIuY29uY2F0KE1hdGgucm91bmQoTy9QKHRoaXMsTSkpLCJweCIpKX1lLklua0VkaXRvcj1wdCx3KHB0LCJfZGVmYXVsdENvbG9yIixudWxsKSx3KHB0LCJfZGVmYXVsdE9wYWNpdHkiLDEpLHcocHQsIl9kZWZhdWx0VGhpY2tuZXNzIiwxKSx3KHB0LCJfbDEwblByb21pc2UiLHZvaWQgMCksdyhwdCwiX3R5cGUiLCJpbmsiKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmZpdEN1cnZlPXZvaWQgMDt2YXIgbj1yKDE1Nik7ZS5maXRDdXJ2ZT1ufSx0PT57ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sZSh0KX1mdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbih0LHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQscil7aWYoIm9iamVjdCIhPT1lKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZShpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PWUoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBlJiZuKHQucHJvdG90eXBlLGUpLHImJm4odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8byh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIG8scyxoLGYsZCxwLHksbSxnLGIsXyx3LEE7aWYoMj09PXQubGVuZ3RoKXJldHVybiB3PXYudmVjdG9yTGVuKHYuc3VidHJhY3QodFswXSx0WzFdKSkvMyxbbz1bdFswXSx2LmFkZEFycmF5cyh0WzBdLHYubXVsSXRlbXMoZSx3KSksdi5hZGRBcnJheXModFsxXSx2Lm11bEl0ZW1zKHIsdykpLHRbMV1dXTtzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7ZT1hP3Irdi52ZWN0b3JMZW4odi5zdWJ0cmFjdCh0LG4pKTowLGkucHVzaChlKSxyPWUsbj10fSkpLGk9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L3J9KSl9KHQpO3ZhciBrPWEodSh0LHMscyxlLHIsaSksMyk7aWYobz1rWzBdLGY9a1sxXSxwPWtbMl0sMD09PWZ8fGY8bilyZXR1cm5bb107aWYoZjxuKm4pZm9yKGg9cyxkPWYseT1wLEE9MDtBPDIwO0ErKyl7dmFyIFM9YSh1KHQscyxoPWMobyx0LGgpLGUscixpKSwzKTtpZihvPVNbMF0sZj1TWzFdLHA9U1syXSxmPG4pcmV0dXJuW29dO2lmKHA9PT15KXt2YXIgeD1mL2Q7aWYoeD4uOTk5OSYmeDwxLjAwMDEpYnJlYWt9ZD1mLHk9cH1pZihfPVtdLChtPXYuc3VidHJhY3QodFtwLTFdLHRbcCsxXSkpLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR9KSkpe3ZhciBFPVstKG09di5zdWJ0cmFjdCh0W3AtMV0sdFtwXSkpWzFdLG1bMF1dO21bMF09RVswXSxtWzFdPUVbMV19cmV0dXJuIGc9di5ub3JtYWxpemUobSksYj12Lm11bEl0ZW1zKGcsLTEpLChfPV8uY29uY2F0KGwodC5zbGljZSgwLHArMSksZSxnLG4saSkpKS5jb25jYXQobCh0LnNsaWNlKHApLGIscixuLGkpKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxvKXt2YXIgcyxsLHU7cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZCxwLG0sZyxiLF8sdyxBLGs9dFswXSxTPXRbdC5sZW5ndGgtMV07Zm9yKGk9W2ssbnVsbCxudWxsLFNdLGE9di56ZXJvc19YeDJ4MihlLmxlbmd0aCksZz0wLGI9ZS5sZW5ndGg7ZzxiO2crKylBPTEtKHc9ZVtnXSksKG89YVtnXSlbMF09di5tdWxJdGVtcyhyLDMqdyooQSpBKSksb1sxXT12Lm11bEl0ZW1zKG4sMypBKih3KncpKTtmb3Iocz1bWzAsMF0sWzAsMF1dLGw9WzAsMF0sZz0wLGI9dC5sZW5ndGg7ZzxiO2crKyl3PWVbZ10sbz1hW2ddLHNbMF1bMF0rPXYuZG90KG9bMF0sb1swXSksc1swXVsxXSs9di5kb3Qob1swXSxvWzFdKSxzWzFdWzBdKz12LmRvdChvWzBdLG9bMV0pLHNbMV1bMV0rPXYuZG90KG9bMV0sb1sxXSksXz12LnN1YnRyYWN0KHRbZ10seS5xKFtrLGssUyxTXSx3KSksbFswXSs9di5kb3Qob1swXSxfKSxsWzFdKz12LmRvdChvWzFdLF8pO3JldHVybiB1PXNbMF1bMF0qc1sxXVsxXS1zWzFdWzBdKnNbMF1bMV0sYz1zWzBdWzBdKmxbMV0tc1sxXVswXSpsWzBdLGg9bFswXSpzWzFdWzFdLWxbMV0qc1swXVsxXSxkPTA9PT11PzA6Yy91LChmPTA9PT11PzA6aC91KTwocD0xZS02KihtPXYudmVjdG9yTGVuKHYuc3VidHJhY3QoayxTKSkpKXx8ZDxwPyhpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLG0vMykpLGlbMl09di5hZGRBcnJheXMoUyx2Lm11bEl0ZW1zKG4sbS8zKSkpOihpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLGYpKSxpWzJdPXYuYWRkQXJyYXlzKFMsdi5tdWxJdGVtcyhuLGQpKSksaX0odCxyLG4saSk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCx1LGM7aT0wLGE9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKTt2YXIgaD1mKGUsMTApO2ZvcihzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXU9dFtzXSxjPWQoMCxyW3NdLGgsMTApLChuPShvPXYuc3VidHJhY3QoeS5xKGUsYyksdSkpWzBdKm9bMF0rb1sxXSpvWzFdKT5pJiYoaT1uLGE9cyk7cmV0dXJuW2ksYV19KHQscyxlKSxoPWEoYywyKTtyZXR1cm4gbD1oWzBdLHU9aFsxXSxvJiZvKHtiZXo6cyxwb2ludHM6dCxwYXJhbXM6ZSxtYXhFcnI6bCxtYXhQb2ludDp1fSksW3MsbCx1XX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGgodCxlW25dLHIpfSkpfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXYuc3VidHJhY3QoeS5xKHQsciksZSksaT15LnFwcmltZSh0LHIpLGE9di5tdWxNYXRyaXgobixpKSxvPXYuc3VtKHYuc3F1YXJlSXRlbXMoaSkpKzIqdi5tdWxNYXRyaXgobix5LnFwcmltZXByaW1lKHQscikpO3JldHVybiAwPT09bz9yOnItYS9vfXZhciBmPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49WzBdLGk9dFswXSxhPTAsbz0xO288PWU7bysrKXI9eS5xKHQsby9lKSxhKz12LnZlY3Rvckxlbih2LnN1YnRyYWN0KHIsaSkpLG4ucHVzaChhKSxpPXI7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9hfSkpfTtmdW5jdGlvbiBkKHQsZSxyLG4pe2lmKGU8MClyZXR1cm4gMDtpZihlPjEpcmV0dXJuIDE7Zm9yKHZhciBpLGEsbyxzLGw9MTtsPD1uO2wrKylpZihlPD1yW2xdKXtvPShsLTEpL24sYT1sL24scz0oZS0oaT1yW2wtMV0pKS8ocltsXS1pKSooYS1vKStvO2JyZWFrfXJldHVybiBzfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdi5ub3JtYWxpemUodi5zdWJ0cmFjdCh0LGUpKX12YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyKHRoaXMsdCl9cmV0dXJuIGkodCxudWxsLFt7a2V5OiJ6ZXJvc19YeDJ4MiIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3QtLTspZS5wdXNoKFswLDBdKTtyZXR1cm4gZX19LHtrZXk6Im11bEl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pKX19LHtrZXk6Im11bE1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdCtyKmVbbl19KSwwKX19LHtrZXk6InN1YnRyYWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC1lW3JdfSkpfX0se2tleToiYWRkQXJyYXlzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlW3JdfSkpfX0se2tleToiYWRkSXRlbXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdCtlfSkpfX0se2tleToic3VtIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKX19LHtrZXk6ImRvdCIsdmFsdWU6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5tdWxNYXRyaXgoZSxyKX19LHtrZXk6InZlY3RvckxlbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguaHlwb3QuYXBwbHkoTWF0aCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBzKHQpfShlPXQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KGUpfHxvKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKTt2YXIgZX19LHtrZXk6ImRpdkl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQvZX0pKX19LHtrZXk6InNxdWFyZUl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KnR9KSl9fSx7a2V5OiJub3JtYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdkl0ZW1zKHQsdGhpcy52ZWN0b3JMZW4odCkpfX1dKSx0fSgpLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cih0aGlzLHQpfXJldHVybiBpKHQsbnVsbCxbe2tleToicSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHRbMF0scipyKnIpLGk9di5tdWxJdGVtcyh0WzFdLDMqcipyKmUpLGE9di5tdWxJdGVtcyh0WzJdLDMqciplKmUpLG89di5tdWxJdGVtcyh0WzNdLGUqZSplKTtyZXR1cm4gdi5hZGRBcnJheXModi5hZGRBcnJheXMobixpKSx2LmFkZEFycmF5cyhhLG8pKX19LHtrZXk6InFwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsxXSx0WzBdKSwzKnIqciksaT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsyXSx0WzFdKSw2KnIqZSksYT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFszXSx0WzJdKSwzKmUqZSk7cmV0dXJuIHYuYWRkQXJyYXlzKHYuYWRkQXJyYXlzKG4saSksYSl9fSx7a2V5OiJxcHJpbWVwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5hZGRBcnJheXModi5tdWxJdGVtcyh2LmFkZEFycmF5cyh2LnN1YnRyYWN0KHRbMl0sdi5tdWxJdGVtcyh0WzFdLDIpKSx0WzBdKSw2KigxLWUpKSx2Lm11bEl0ZW1zKHYuYWRkQXJyYXlzKHYuc3VidHJhY3QodFszXSx2Lm11bEl0ZW1zKHRbMl0sMikpLHRbMV0pLDYqZSkpfX1dKSx0fSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7aWYodC5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighQXJyYXkuaXNBcnJheShlKXx8ZS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHR9KSl8fGUubGVuZ3RoIT09dFswXS5sZW5ndGgpdGhyb3cgRXJyb3IoIkVhY2ggcG9pbnQgc2hvdWxkIGJlIGFuIGFycmF5IG9mIG51bWJlcnMuIEVhY2ggcG9pbnQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgYW1vdW50IG9mIG51bWJlcnMuIil9KSksKHQ9dC5maWx0ZXIoKGZ1bmN0aW9uKGUscil7cmV0dXJuIDA9PT1yfHwhZS5ldmVyeSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PXRbci0xXVtuXX0pKX0pKSkubGVuZ3RoPDIpcmV0dXJuW107dmFyIG49dC5sZW5ndGgsaT1wKHRbMV0sdFswXSksYT1wKHRbbi0yXSx0W24tMV0pO3JldHVybiBsKHQsaSxhLGUscil9LHQuZXhwb3J0cy5maXRDdWJpYz1sLHQuZXhwb3J0cy5jcmVhdGVUYW5nZW50PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uTGF5ZXI9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDEzNCksbz1yKDE1OCkscz1yKDE1OSk7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX0odCxlKSxyfWZ1bmN0aW9uIHUoKXtyZXR1cm4gdT0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PXYodCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB3KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Xyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj12KHQpO2lmKGUpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09QShlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gcCh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sdih0KX1mdW5jdGlvbiB5KHQsZSl7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBtKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPV8odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8Xyh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gXyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3codCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHcodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe3JldHVybiBBPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxBKHQpfWZ1bmN0aW9uIGsodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBTKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxFKG4ua2V5KSxuKX19ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIGUmJlModC5wcm90b3R5cGUsZSksciYmUyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gRSh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09QSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PUEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PUEoZSk/ZTpTdHJpbmcoZSl9dmFyIFA9MWUzLFQ9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gQyh0KXtyZXR1cm57d2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19fXZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2sodGhpcyx0KX1yZXR1cm4geCh0LG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuZGF0YS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBuLkFubm90YXRpb25UeXBlLkxJTks6cmV0dXJuIG5ldyBJKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5URVhUOnJldHVybiBuZXcgVyh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuV0lER0VUOnN3aXRjaCh0LmRhdGEuZmllbGRUeXBlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IEIodCk7Y2FzZSJCdG4iOnJldHVybiB0LmRhdGEucmFkaW9CdXR0b24/bmV3IEgodCk6dC5kYXRhLmNoZWNrQm94P25ldyBxKHQpOm5ldyB6KHQpO2Nhc2UiQ2giOnJldHVybiBuZXcgVih0KX1yZXR1cm4gbmV3IEcodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlBPUFVQOnJldHVybiBuZXcgWCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBLKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5MSU5FOnJldHVybiBuZXcgSih0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuU1FVQVJFOnJldHVybiBuZXcgUSh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOnJldHVybiBuZXcgJCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU6cmV0dXJuIG5ldyBaKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5DQVJFVDpyZXR1cm4gbmV3IGV0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5JTks6cmV0dXJuIG5ldyBydCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUdPTjpyZXR1cm4gbmV3IHR0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6cmV0dXJuIG5ldyBudCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOnJldHVybiBuZXcgaXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNRVUlHR0xZOnJldHVybiBuZXcgYXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDpyZXR1cm4gbmV3IG90KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5TVEFNUDpyZXR1cm4gbmV3IHN0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDpyZXR1cm4gbmV3IGx0KHQpO2RlZmF1bHQ6cmV0dXJuIG5ldyBGKHQpfX19XSksdH0oKSxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1yLmlzUmVuZGVyYWJsZSxpPXZvaWQgMCE9PW4mJm4sYT1yLmlnbm9yZUJvcmRlcixvPXZvaWQgMCE9PWEmJmEscz1yLmNyZWF0ZVF1YWRyaWxhdGVyYWxzLGw9dm9pZCAwIT09cyYmcztrKHRoaXMsdCksdGhpcy5pc1JlbmRlcmFibGU9aSx0aGlzLmRhdGE9ZS5kYXRhLHRoaXMubGF5ZXI9ZS5sYXllcix0aGlzLnBhZ2U9ZS5wYWdlLHRoaXMudmlld3BvcnQ9ZS52aWV3cG9ydCx0aGlzLmxpbmtTZXJ2aWNlPWUubGlua1NlcnZpY2UsdGhpcy5kb3dubG9hZE1hbmFnZXI9ZS5kb3dubG9hZE1hbmFnZXIsdGhpcy5pbWFnZVJlc291cmNlc1BhdGg9ZS5pbWFnZVJlc291cmNlc1BhdGgsdGhpcy5yZW5kZXJGb3Jtcz1lLnJlbmRlckZvcm1zLHRoaXMuc3ZnRmFjdG9yeT1lLnN2Z0ZhY3RvcnksdGhpcy5hbm5vdGF0aW9uU3RvcmFnZT1lLmFubm90YXRpb25TdG9yYWdlLHRoaXMuZW5hYmxlU2NyaXB0aW5nPWUuZW5hYmxlU2NyaXB0aW5nLHRoaXMuaGFzSlNBY3Rpb25zPWUuaGFzSlNBY3Rpb25zLHRoaXMuX2ZpZWxkT2JqZWN0cz1lLmZpZWxkT2JqZWN0cyxpJiYodGhpcy5jb250YWluZXI9dGhpcy5fY3JlYXRlQ29udGFpbmVyKG8pKSxsJiYodGhpcy5xdWFkcmlsYXRlcmFscz10aGlzLl9jcmVhdGVRdWFkcmlsYXRlcmFscyhvKSl9cmV0dXJuIHgodCxbe2tleToiX2NyZWF0ZUNvbnRhaW5lciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGU9dGhpcy5kYXRhLHI9dGhpcy5wYWdlLGk9dGhpcy52aWV3cG9ydCxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iKTthLnNldEF0dHJpYnV0ZSgiZGF0YS1hbm5vdGF0aW9uLWlkIixlLmlkKTt2YXIgbz1pLnJhd0RpbXMscz1vLnBhZ2VXaWR0aCxsPW8ucGFnZUhlaWdodCx1PW8ucGFnZVgsYz1vLnBhZ2VZLGg9QyhlLnJlY3QpLGY9aC53aWR0aCxkPWguaGVpZ2h0LHA9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2UucmVjdFswXSxyLnZpZXdbM10tZS5yZWN0WzFdK3Iudmlld1sxXSxlLnJlY3RbMl0sci52aWV3WzNdLWUucmVjdFszXStyLnZpZXdbMV1dKTtpZighdCYmZS5ib3JkZXJTdHlsZS53aWR0aD4wKXthLnN0eWxlLmJvcmRlcldpZHRoPSIiLmNvbmNhdChlLmJvcmRlclN0eWxlLndpZHRoLCJweCIpO3ZhciB2PWUuYm9yZGVyU3R5bGUuaG9yaXpvbnRhbENvcm5lclJhZGl1cyx5PWUuYm9yZGVyU3R5bGUudmVydGljYWxDb3JuZXJSYWRpdXM7aWYodj4wfHx5PjApe3ZhciBtPSJjYWxjKCIuY29uY2F0KHYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkgLyBjYWxjKCIpLmNvbmNhdCh5LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIik7YS5zdHlsZS5ib3JkZXJSYWRpdXM9bX1lbHNlIGlmKHRoaXMgaW5zdGFuY2VvZiBIKXt2YXIgZz0iY2FsYygiLmNvbmNhdChmLCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIC8gY2FsYygiKS5jb25jYXQoZCwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpO2Euc3R5bGUuYm9yZGVyUmFkaXVzPWd9c3dpdGNoKGUuYm9yZGVyU3R5bGUuc3R5bGUpe2Nhc2Ugbi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOmEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ6YS5zdHlsZS5ib3JkZXJTdHlsZT0iZGFzaGVkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEOigwLG4ud2FybikoIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBiZXZlbGVkIik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ6KDAsbi53YXJuKSgiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGluc2V0Iik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOmEuc3R5bGUuYm9yZGVyQm90dG9tU3R5bGU9InNvbGlkIn12YXIgYj1lLmJvcmRlckNvbG9yfHxudWxsO2I/YS5zdHlsZS5ib3JkZXJDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8YlswXSwwfGJbMV0sMHxiWzJdKTphLnN0eWxlLmJvcmRlcldpZHRoPTB9YS5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqKHBbMF0tdSkvcywiJSIpLGEuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqKHBbMV0tYykvbCwiJSIpO3ZhciBfPWUucm90YXRpb247cmV0dXJuIGUuaGFzT3duQ2FudmFzfHwwPT09Xz8oYS5zdHlsZS53aWR0aD0iIi5jb25jYXQoMTAwKmYvcywiJSIpLGEuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZC9sLCIlIikpOnRoaXMuc2V0Um90YXRpb24oXyxhKSxhfX0se2tleToic2V0Um90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5jb250YWluZXIsaT10aGlzLnZpZXdwb3J0LnJhd0RpbXMsYT1pLnBhZ2VXaWR0aCxvPWkucGFnZUhlaWdodCxzPUModGhpcy5kYXRhLnJlY3QpLGw9cy53aWR0aCx1PXMuaGVpZ2h0O3QlMTgwPT0wPyhlPTEwMCpsL2Escj0xMDAqdS9vKTooZT0xMDAqdS9hLHI9MTAwKmwvbyksbi5zdHlsZS53aWR0aD0iIi5jb25jYXQoZSwiJSIpLG4uc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChyLCIlIiksbi5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsKDM2MC10KSUzNjApfX0se2tleToiX2NvbW1vbkFjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5kZXRhaWxbdF07ci50YXJnZXQuc3R5bGVbZV09by5Db2xvckNvbnZlcnRlcnNbIiIuY29uY2F0KG5bMF0sIl9IVE1MIildKG4uc2xpY2UoMSkpfTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2NvbW1vbkFjdGlvbnMiLHtkaXNwbGF5OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLmRpc3BsYXklMj09MTt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PXI/ImhpZGRlbiI6InZpc2libGUiLHQuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodC5kYXRhLmlkLHtoaWRkZW46cixwcmludDowPT09ZS5kZXRhaWwuZGlzcGxheXx8Mz09PWUuZGV0YWlsLmRpc3BsYXl9KX0scHJpbnQ6ZnVuY3Rpb24oZSl7dC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3ByaW50OmUuZGV0YWlsLnByaW50fSl9LGhpZGRlbjpmdW5jdGlvbihlKXt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PWUuZGV0YWlsLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIsdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse2hpZGRlbjplLmRldGFpbC5oaWRkZW59KX0sZm9jdXM6ZnVuY3Rpb24odCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gdC50YXJnZXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITF9KX0pLDApfSx1c2VyTmFtZTpmdW5jdGlvbih0KXt0LnRhcmdldC50aXRsZT10LmRldGFpbC51c2VyTmFtZX0scmVhZG9ubHk6ZnVuY3Rpb24odCl7dC5kZXRhaWwucmVhZG9ubHk/dC50YXJnZXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpOnQudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgicmVhZG9ubHkiKX0scmVxdWlyZWQ6ZnVuY3Rpb24oZSl7dC5fc2V0UmVxdWlyZWQoZS50YXJnZXQsZS5kZXRhaWwucmVxdWlyZWQpfSxiZ0NvbG9yOmZ1bmN0aW9uKHQpe2UoImJnQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLHQpfSxmaWxsQ29sb3I6ZnVuY3Rpb24odCl7ZSgiZmlsbENvbG9yIiwiYmFja2dyb3VuZENvbG9yIix0KX0sZmdDb2xvcjpmdW5jdGlvbih0KXtlKCJmZ0NvbG9yIiwiY29sb3IiLHQpfSx0ZXh0Q29sb3I6ZnVuY3Rpb24odCl7ZSgidGV4dENvbG9yIiwiY29sb3IiLHQpfSxib3JkZXJDb2xvcjpmdW5jdGlvbih0KXtlKCJib3JkZXJDb2xvciIsImJvcmRlckNvbG9yIix0KX0sc3Ryb2tlQ29sb3I6ZnVuY3Rpb24odCl7ZSgic3Ryb2tlQ29sb3IiLCJib3JkZXJDb2xvciIsdCl9LHJvdGF0aW9uOmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLnJvdGF0aW9uO3Quc2V0Um90YXRpb24ociksdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3JvdGF0aW9uOnJ9KX19KX19LHtrZXk6Il9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbW1vbkFjdGlvbnMsbj0wLGk9T2JqZWN0LmtleXMoZS5kZXRhaWwpO248aS5sZW5ndGg7bisrKXt2YXIgYT1pW25dLG89dFthXXx8clthXTtudWxsPT1vfHxvKGUpfX19LHtrZXk6Il9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5lbmFibGVTY3JpcHRpbmcpe3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2UuZ2V0UmF3VmFsdWUodGhpcy5kYXRhLmlkKTtpZihlKWZvcih2YXIgcj10aGlzLl9jb21tb25BY3Rpb25zLG49MCxpPU9iamVjdC5lbnRyaWVzKGUpO248aS5sZW5ndGg7bisrKXt2YXIgYT1iKGlbbl0sMiksbz1hWzBdLHM9YVsxXSxsPXJbb107bCYmKGwoe2RldGFpbDp7W29dOnN9LHRhcmdldDp0fSksZGVsZXRlIGVbb10pfX19fSx7a2V5OiJfY3JlYXRlUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5kYXRhLnF1YWRQb2ludHMpcmV0dXJuIG51bGw7dmFyIGUscj1bXSxuPXRoaXMuZGF0YS5yZWN0LGk9Zyh0aGlzLmRhdGEucXVhZFBvaW50cyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgYT1lLnZhbHVlO3RoaXMuZGF0YS5yZWN0PVthWzJdLngsYVsyXS55LGFbMV0ueCxhWzFdLnldLHIucHVzaCh0aGlzLl9jcmVhdGVDb250YWluZXIodCkpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdGhpcy5kYXRhLnJlY3Q9bixyfX0se2tleToiX2NyZWF0ZVBvcHVwIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY29udGFpbmVyO3RoaXMucXVhZHJpbGF0ZXJhbHMmJih0PXR8fHRoaXMucXVhZHJpbGF0ZXJhbHMscj10aGlzLnF1YWRyaWxhdGVyYWxzWzBdKSx0fHwoKHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmNsYXNzTmFtZT0icG9wdXBUcmlnZ2VyQXJlYSIsci5hcHBlbmQodCkpO3ZhciBuPW5ldyBZKHtjb250YWluZXI6cix0cmlnZ2VyOnQsY29sb3I6ZS5jb2xvcix0aXRsZU9iajplLnRpdGxlT2JqLG1vZGlmaWNhdGlvbkRhdGU6ZS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOmUuY29udGVudHNPYmoscmljaFRleHQ6ZS5yaWNoVGV4dCxoaWRlV3JhcHBlcjohMH0pLnJlbmRlcigpO24uc3R5bGUubGVmdD0iMTAwJSIsci5hcHBlbmQobil9fSx7a2V5OiJfcmVuZGVyUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI9Zyh0aGlzLnF1YWRyaWxhdGVyYWxzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5jbGFzc05hbWU9dH1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdGhpcy5xdWFkcmlsYXRlcmFsc319LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBBbm5vdGF0aW9uRWxlbWVudC5yZW5kZXJgIGNhbGxlZCIpfX0se2tleToiX2dldEVsZW1lbnRzQnlOYW1lIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPVtdO2lmKHRoaXMuX2ZpZWxkT2JqZWN0cyl7dmFyIGk9dGhpcy5fZmllbGRPYmplY3RzW3RdO2lmKGkpe3ZhciBhLG89ZyhpKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsbD1zLnBhZ2UsdT1zLmlkLGM9cy5leHBvcnRWYWx1ZXM7aWYoLTEhPT1sJiZ1IT09ZSl7dmFyIGg9InN0cmluZyI9PXR5cGVvZiBjP2M6bnVsbCxmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KHUsJyJdJykpOyFmfHxULmhhcyhmKT9yLnB1c2goe2lkOnUsZXhwb3J0VmFsdWU6aCxkb21FbGVtZW50OmZ9KTooMCxuLndhcm4pKCJfZ2V0RWxlbWVudHNCeU5hbWUgLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdCh1KSl9fX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX19cmV0dXJuIHJ9dmFyIGQscD1nKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHQpKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LmV4cG9ydFZhbHVlLG09di5nZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIpO20hPT1lJiZULmhhcyh2KSYmci5wdXNoKHtpZDptLGV4cG9ydFZhbHVlOnksZG9tRWxlbWVudDp2fSl9fWNhdGNoKHQpe3AuZSh0KX1maW5hbGx5e3AuZigpfXJldHVybiByfX1dKSx0fSgpLE09bmV3IFdlYWtTZXQsUj1uZXcgV2Vha1NldCxJPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gayh0aGlzLHIpLHkocChuPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMCxpZ25vcmVCb3JkZXI6IShudWxsPT1pfHwhaS5pZ25vcmVCb3JkZXIpLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSkpLFIpLHkocChuKSxNKSxuLmlzVG9vbHRpcE9ubHk9dC5kYXRhLmlzVG9vbHRpcE9ubHksbn1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dGhpcy5saW5rU2VydmljZSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIix0LmlkKTt2YXIgbj0hMTtyZXR1cm4gdC51cmw/KGUuYWRkTGlua0F0dHJpYnV0ZXMocix0LnVybCx0Lm5ld1dpbmRvdyksbj0hMCk6dC5hY3Rpb24/KHRoaXMuX2JpbmROYW1lZEFjdGlvbihyLHQuYWN0aW9uKSxuPSEwKTp0LmF0dGFjaG1lbnQ/KHRoaXMuX2JpbmRBdHRhY2htZW50KHIsdC5hdHRhY2htZW50KSxuPSEwKTp0LnNldE9DR1N0YXRlPyhtKHRoaXMsUixMKS5jYWxsKHRoaXMscix0LnNldE9DR1N0YXRlKSxuPSEwKTp0LmRlc3Q/KHRoaXMuX2JpbmRMaW5rKHIsdC5kZXN0KSxuPSEwKToodC5hY3Rpb25zJiYodC5hY3Rpb25zLkFjdGlvbnx8dC5hY3Rpb25zWyJNb3VzZSBVcCJdfHx0LmFjdGlvbnNbIk1vdXNlIERvd24iXSkmJnRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKHRoaXMuX2JpbmRKU0FjdGlvbihyLHQpLG49ITApLHQucmVzZXRGb3JtPyh0aGlzLl9iaW5kUmVzZXRGb3JtQWN0aW9uKHIsdC5yZXNldEZvcm0pLG49ITApOnRoaXMuaXNUb29sdGlwT25seSYmIW4mJih0aGlzLl9iaW5kTGluayhyLCIiKSxuPSEwKSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygibGlua0Fubm90YXRpb24iKS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIG49MD09PWU/cjpyLmNsb25lTm9kZSgpO3JldHVybiB0LmFwcGVuZChuKSx0fSkpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmtBbm5vdGF0aW9uIixuJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXIpfX0se2tleToiX2JpbmRMaW5rIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0RGVzdGluYXRpb25IYXNoKGUpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiBlJiZyLmxpbmtTZXJ2aWNlLmdvVG9EZXN0aW5hdGlvbihlKSwhMX0sKGV8fCIiPT09ZSkmJm0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZE5hbWVkQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSx0Lm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5saW5rU2VydmljZS5leGVjdXRlTmFtZWRBY3Rpb24oZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEF0dGFjaG1lbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5kb3dubG9hZE1hbmFnZXIpfHx2b2lkIDA9PT10fHx0Lm9wZW5PckRvd25sb2FkRGF0YShyLmNvbnRhaW5lcixlLmNvbnRlbnQsZS5maWxlbmFtZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEpTQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTtmb3IodmFyIG49bmV3IE1hcChbWyJBY3Rpb24iLCJvbmNsaWNrIl0sWyJNb3VzZSBVcCIsIm9ubW91c2V1cCJdLFsiTW91c2UgRG93biIsIm9ubW91c2Vkb3duIl1dKSxpPWZ1bmN0aW9uKCl7dmFyIGk9b1thXSxzPW4uZ2V0KGkpO2lmKCFzKXJldHVybiJjb250aW51ZSI7dFtzXT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PXR8fHQuZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLHtzb3VyY2U6cixkZXRhaWw6e2lkOmUuaWQsbmFtZTppfX0pLCExfX0sYT0wLG89T2JqZWN0LmtleXMoZS5hY3Rpb25zKTthPG8ubGVuZ3RoO2ErKylpKCk7dC5vbmNsaWNrfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxtKHRoaXMsTSxqKS5jYWxsKHRoaXMpfX0se2tleToiX2JpbmRSZXNldEZvcm1BY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxpPXQub25jbGljaztpZihpfHwodC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSksbSh0aGlzLE0saikuY2FsbCh0aGlzKSwhdGhpcy5fZmllbGRPYmplY3RzKXJldHVybigwLG4ud2FybikoJ19iaW5kUmVzZXRGb3JtQWN0aW9uIC0gInJlc2V0Rm9ybSIgYWN0aW9uIG5vdCBzdXBwb3J0ZWQsIGVuc3VyZSB0aGF0IHRoZSBgZmllbGRPYmplY3RzYCBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQuJyksdm9pZChpfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSk7dC5vbmNsaWNrPWZ1bmN0aW9uKCl7bnVsbD09aXx8aSgpO3ZhciB0PWUuZmllbGRzLGE9ZS5yZWZzLG89ZS5pbmNsdWRlLHM9W107aWYoMCE9PXQubGVuZ3RofHwwIT09YS5sZW5ndGgpe3ZhciBsLHU9bmV3IFNldChhKSxoPWcodCk7dHJ5e2ZvcihoLnMoKTshKGw9aC5uKCkpLmRvbmU7KXt2YXIgZixkPWwudmFsdWUscD1nKHIuX2ZpZWxkT2JqZWN0c1tkXXx8W10pO3RyeXtmb3IocC5zKCk7IShmPXAubigpKS5kb25lOyl7dmFyIHY9Zi52YWx1ZS5pZDt1LmFkZCh2KX19Y2F0Y2godCl7cC5lKHQpfWZpbmFsbHl7cC5mKCl9fX1jYXRjaCh0KXtoLmUodCl9ZmluYWxseXtoLmYoKX1mb3IodmFyIHk9MCxtPU9iamVjdC52YWx1ZXMoci5fZmllbGRPYmplY3RzKTt5PG0ubGVuZ3RoO3krKyl7dmFyIGIsXz1nKG1beV0pO3RyeXtmb3IoXy5zKCk7IShiPV8ubigpKS5kb25lOyl7dmFyIHc9Yi52YWx1ZTt1Lmhhcyh3LmlkKT09PW8mJnMucHVzaCh3KX19Y2F0Y2godCl7Xy5lKHQpfWZpbmFsbHl7Xy5mKCl9fX1lbHNlIGZvcih2YXIgQT0wLGs9T2JqZWN0LnZhbHVlcyhyLl9maWVsZE9iamVjdHMpO0E8ay5sZW5ndGg7QSsrKXt2YXIgUz1rW0FdO3MucHVzaC5hcHBseShzLGMoUykpfWZvcih2YXIgeCxFPXIuYW5ub3RhdGlvblN0b3JhZ2UsUD1bXSxDPTAsTz1zO0M8Ty5sZW5ndGg7QysrKXt2YXIgRj1PW0NdLE09Ri5pZDtzd2l0Y2goUC5wdXNoKE0pLEYudHlwZSl7Y2FzZSJ0ZXh0Ijp2YXIgUj1GLmRlZmF1bHRWYWx1ZXx8IiI7RS5zZXRWYWx1ZShNLHt2YWx1ZTpSfSk7YnJlYWs7Y2FzZSJjaGVja2JveCI6Y2FzZSJyYWRpb2J1dHRvbiI6dmFyIEk9Ri5kZWZhdWx0VmFsdWU9PT1GLmV4cG9ydFZhbHVlcztFLnNldFZhbHVlKE0se3ZhbHVlOkl9KTticmVhaztjYXNlImNvbWJvYm94IjpjYXNlImxpc3Rib3giOnZhciBqPUYuZGVmYXVsdFZhbHVlfHwiIjtFLnNldFZhbHVlKE0se3ZhbHVlOmp9KTticmVhaztkZWZhdWx0OmNvbnRpbnVlfXZhciBMPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KE0sJyJdJykpO0wmJihULmhhcyhMKT9MLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNldGZvcm0iKSk6KDAsbi53YXJuKSgiX2JpbmRSZXNldEZvcm1BY3Rpb24gLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdChNKSkpfXJldHVybiByLmVuYWJsZVNjcmlwdGluZyYmKG51bGw9PT0oeD1yLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09eHx8eC5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTpyLGRldGFpbDp7aWQ6ImFwcCIsaWRzOlAsbmFtZToiUmVzZXRGb3JtIn19KSksITF9fX1dKSxyfShGKTtmdW5jdGlvbiBqKCl7dGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCJkYXRhLWludGVybmFsLWxpbmsiLCIiKX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiByLmxpbmtTZXJ2aWNlLmV4ZWN1dGVTZXRPQ0dTdGF0ZShlKSwhMX0sbSh0aGlzLE0saikuY2FsbCh0aGlzKX12YXIgRCxOLFUsVz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm99KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ0ZXh0QW5ub3RhdGlvbiI7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIHQuc3JjPXRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoKyJhbm5vdGF0aW9uLSIrdGhpcy5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSsiLnN2ZyIsdC5hbHQ9Ilt7e3R5cGV9fSBBbm5vdGF0aW9uXSIsdC5kYXRhc2V0LmwxMG5JZD0idGV4dF9hbm5vdGF0aW9uX3R5cGUiLHQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7dHlwZTp0aGlzLmRhdGEubmFtZX0pLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAodCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZCh0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksRz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGsodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJih0aGlzLmNvbnRhaW5lci50aXRsZT10aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KSx0aGlzLmNvbnRhaW5lcn19LHtrZXk6Il9nZXRLZXlNb2RpZmllciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9bi5GZWF0dXJlVGVzdC5wbGF0Zm9ybSxyPWUuaXNXaW4saT1lLmlzTWFjO3JldHVybiByJiZ0LmN0cmxLZXl8fGkmJnQubWV0YUtleX19LHtrZXk6Il9zZXRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2UuaW5jbHVkZXMoIm1vdXNlIik/dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpLHNoaWZ0OnQuc2hpZnRLZXksbW9kaWZpZXI6aS5fZ2V0S2V5TW9kaWZpZXIodCl9fSl9KSk6dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpfX0pfSkpfX0se2tleToiX3NldEV2ZW50TGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saT1nKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGEsbz1iKG4udmFsdWUsMikscz1vWzBdLGw9b1sxXTsoIkFjdGlvbiI9PT1sfHxudWxsIT09KGE9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT1hJiZhW2xdKSYmdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcih0LHMsbCxyKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fX0se2tleToiX3NldEJhY2tncm91bmRDb2xvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcnx8bnVsbDt0LnN0eWxlLmJhY2tncm91bmRDb2xvcj1udWxsPT09ZT8idHJhbnNwYXJlbnQiOm4uVXRpbC5tYWtlSGV4Q29sb3IoZVswXSxlWzFdLGVbMl0pfX0se2tleToiX3NldFRleHRTdHlsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRDb2xvcixpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemV8fDksYT10LnN0eWxlLG89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMTAqdCkvMTB9O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpe3ZhciBzPU1hdGguYWJzKHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLTIpLGw9cy8oTWF0aC5yb3VuZChzLyhuLkxJTkVfRkFDVE9SKmkpKXx8MSk7ZT1NYXRoLm1pbihpLG8obC9uLkxJTkVfRkFDVE9SKSl9ZWxzZXt2YXIgdT1NYXRoLmFicyh0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXS0yKTtlPU1hdGgubWluKGksbyh1L24uTElORV9GQUNUT1IpKX1hLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGUsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkiKSxhLmNvbG9yPW4uVXRpbC5tYWtlSGV4Q29sb3IoclswXSxyWzFdLHJbMl0pLG51bGwhPT10aGlzLmRhdGEudGV4dEFsaWdubWVudCYmKGEudGV4dEFsaWduPVsibGVmdCIsImNlbnRlciIsInJpZ2h0Il1bdGhpcy5kYXRhLnRleHRBbGlnbm1lbnRdKX19LHtrZXk6Il9zZXRSZXF1aXJlZCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtlP3Quc2V0QXR0cmlidXRlKCJyZXF1aXJlZCIsITApOnQucmVtb3ZlQXR0cmlidXRlKCJyZXF1aXJlZCIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIixlKX19XSkscn0oRiksQj1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe2sodGhpcyxyKTt2YXIgbj10LnJlbmRlckZvcm1zfHwhdC5kYXRhLmhhc0FwcGVhcmFuY2UmJiEhdC5kYXRhLmZpZWxkVmFsdWU7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpufSl9cmV0dXJuIHgocixbe2tleToic2V0UHJvcGVydHlPblNpYmxpbmdzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Usbz1nKHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKHQubmFtZSx0LmlkKSk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz1pLnZhbHVlO3MuZG9tRWxlbWVudCYmKHMuZG9tRWxlbWVudFtlXT1yKSxhLnNldFZhbHVlKHMuaWQse1tuXTpyfSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZDt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InRleHRXaWRnZXRBbm5vdGF0aW9uIjt2YXIgbj1udWxsO2lmKHRoaXMucmVuZGVyRm9ybXMpe3ZhciBpPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxhPWkuZm9ybWF0dGVkVmFsdWV8fGkudmFsdWV8fCIiLG89ZS5nZXRWYWx1ZShyLHtjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbn0pLmNoYXJMaW1pdDtvJiZhLmxlbmd0aD5vJiYoYT1hLnNsaWNlKDAsbykpO3ZhciBzPXt1c2VyVmFsdWU6YSxmb3JtYXR0ZWRWYWx1ZTpudWxsLGxhc3RDb21taXR0ZWRWYWx1ZTpudWxsLGNvbW1pdEtleToxfTt0aGlzLmRhdGEubXVsdGlMaW5lPygobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpKS50ZXh0Q29udGVudD1hLHRoaXMuZGF0YS5kb05vdFNjcm9sbCYmKG4uc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSk6KChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnR5cGU9InRleHQiLG4uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYSksdGhpcy5kYXRhLmRvTm90U2Nyb2xsJiYobi5zdHlsZS5vdmVyZmxvd1g9ImhpZGRlbiIpKSxULmFkZChuKSxuLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixyKSxuLmRpc2FibGVkPXRoaXMuZGF0YS5yZWFkT25seSxuLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxuLnRhYkluZGV4PVAsdGhpcy5fc2V0UmVxdWlyZWQobix0aGlzLmRhdGEucmVxdWlyZWQpLG8mJihuLm1heExlbmd0aD1vKSxuLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24oaSl7ZS5zZXRWYWx1ZShyLHt2YWx1ZTppLnRhcmdldC52YWx1ZX0pLHQuc2V0UHJvcGVydHlPblNpYmxpbmdzKG4sInZhbHVlIixpLnRhcmdldC52YWx1ZSwidmFsdWUiKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLGk9bnVsbCE9PShyPXQuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSkmJnZvaWQgMCE9PXI/cjoiIjtuLnZhbHVlPXMudXNlclZhbHVlPWkscy5mb3JtYXR0ZWRWYWx1ZT1udWxsfSkpO3ZhciBsPWZ1bmN0aW9uKHQpe3ZhciBlPXMuZm9ybWF0dGVkVmFsdWU7bnVsbCE9ZSYmKHQudGFyZ2V0LnZhbHVlPWUpLHQudGFyZ2V0LnNjcm9sbExlZnQ9MH07aWYodGhpcy5lbmFibGVTY3JpcHRpbmcmJnRoaXMuaGFzSlNBY3Rpb25zKXt2YXIgdTtuLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7cy51c2VyVmFsdWUmJihlLnZhbHVlPXMudXNlclZhbHVlKSxzLmxhc3RDb21taXR0ZWRWYWx1ZT1lLnZhbHVlLHMuY29tbWl0S2V5PTF9KSksbi5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBpPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtzLnVzZXJWYWx1ZT1udWxsIT09KG49dC5kZXRhaWwudmFsdWUpJiZ2b2lkIDAhPT1uP246IiIsZS5zZXRWYWx1ZShyLHt2YWx1ZTpzLnVzZXJWYWx1ZS50b1N0cmluZygpfSksdC50YXJnZXQudmFsdWU9cy51c2VyVmFsdWV9LGZvcm1hdHRlZFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXQuZGV0YWlsLmZvcm1hdHRlZFZhbHVlO3MuZm9ybWF0dGVkVmFsdWU9bixudWxsIT1uJiZ0LnRhcmdldCE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJih0LnRhcmdldC52YWx1ZT1uKSxlLnNldFZhbHVlKHIse2Zvcm1hdHRlZFZhbHVlOm59KX0sc2VsUmFuZ2U6ZnVuY3Rpb24odCl7dmFyIGU7KGU9dC50YXJnZXQpLnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KGUsYyh0LmRldGFpbC5zZWxSYW5nZSkpfSxjaGFyTGltaXQ6ZnVuY3Rpb24obil7dmFyIGksYT1uLmRldGFpbC5jaGFyTGltaXQsbz1uLnRhcmdldDtpZigwIT09YSl7by5zZXRBdHRyaWJ1dGUoIm1heExlbmd0aCIsYSk7dmFyIGw9cy51c2VyVmFsdWU7IWx8fGwubGVuZ3RoPD1hfHwobD1sLnNsaWNlKDAsYSksby52YWx1ZT1zLnVzZXJWYWx1ZT1sLGUuc2V0VmFsdWUocix7dmFsdWU6bH0pLG51bGw9PT0oaT10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09aXx8aS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmwsd2lsbENvbW1pdDohMCxjb21taXRLZXk6MSxzZWxTdGFydDpvLnNlbGVjdGlvblN0YXJ0LHNlbEVuZDpvLnNlbGVjdGlvbkVuZH19KSl9ZWxzZSBvLnJlbW92ZUF0dHJpYnV0ZSgibWF4TGVuZ3RoIil9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goaSxuKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLChmdW5jdGlvbihlKXt2YXIgbjtzLmNvbW1pdEtleT0xO3ZhciBpPS0xO2lmKCJFc2NhcGUiPT09ZS5rZXk/aT0wOiJFbnRlciIhPT1lLmtleXx8dC5kYXRhLm11bHRpTGluZT8iVGFiIj09PWUua2V5JiYocy5jb21taXRLZXk9Myk6aT0yLC0xIT09aSl7dmFyIGE9ZS50YXJnZXQudmFsdWU7cy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1hJiYocy5sYXN0Q29tbWl0dGVkVmFsdWU9YSxzLnVzZXJWYWx1ZT1hLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmEsd2lsbENvbW1pdDohMCxjb21taXRLZXk6aSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKX19KSk7dmFyIGg9bDtsPW51bGwsbi5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoZnVuY3Rpb24oZSl7aWYoZS5yZWxhdGVkVGFyZ2V0KXt2YXIgbixpPWUudGFyZ2V0LnZhbHVlO3MudXNlclZhbHVlPWkscy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1pJiYobnVsbD09PShuPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1ufHxuLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6aSx3aWxsQ29tbWl0OiEwLGNvbW1pdEtleTpzLmNvbW1pdEtleSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKSxoKGUpfX0pKSxudWxsIT09KHU9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT11JiZ1LktleXN0cm9rZSYmbi5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsKGZ1bmN0aW9uKGUpe3ZhciBuO3MubGFzdENvbW1pdHRlZFZhbHVlPW51bGw7dmFyIGk9ZS5kYXRhLGE9ZS50YXJnZXQsbz1hLnZhbHVlLGw9YS5zZWxlY3Rpb25TdGFydCx1PWEuc2VsZWN0aW9uRW5kLGM9bCxoPXU7c3dpdGNoKGUuaW5wdXRUeXBlKXtjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6dmFyIGY9by5zdWJzdHJpbmcoMCxsKS5tYXRjaCgvXHcqW15cd10qJC8pO2YmJihjLT1mWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJkZWxldGVXb3JkRm9yd2FyZCI6dmFyIGQ9by5zdWJzdHJpbmcobCkubWF0Y2goL15bXlx3XSpcdyovKTtkJiYoaCs9ZFswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEJhY2t3YXJkIjpsPT09dSYmKGMtPTEpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEZvcndhcmQiOmw9PT11JiYoaCs9MSl9ZS5wcmV2ZW50RGVmYXVsdCgpLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOm8sY2hhbmdlOml8fCIiLHdpbGxDb21taXQ6ITEsc2VsU3RhcnQ6YyxzZWxFbmQ6aH19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhuLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXV0sKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC52YWx1ZX0pKX1pZihsJiZuLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGwpLHRoaXMuZGF0YS5jb21iKXt2YXIgZj0odGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0pL287bi5jbGFzc0xpc3QuYWRkKCJjb21iIiksbi5zdHlsZS5sZXR0ZXJTcGFjaW5nPSJjYWxjKCIuY29uY2F0KGYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSAtIDFjaCkiKX19ZWxzZShuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS50ZXh0Q29udGVudD10aGlzLmRhdGEuZmllbGRWYWx1ZSxuLnN0eWxlLnZlcnRpY2FsQWxpZ249Im1pZGRsZSIsbi5zdHlsZS5kaXNwbGF5PSJ0YWJsZS1jZWxsIjtyZXR1cm4gdGhpcy5fc2V0VGV4dFN0eWxlKG4pLHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihuKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQobiksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHE9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTp0LnJlbmRlckZvcm1zfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmFubm90YXRpb25TdG9yYWdlLHI9dGhpcy5kYXRhLG49ci5pZCxpPWUuZ2V0VmFsdWUobix7dmFsdWU6ci5leHBvcnRWYWx1ZT09PXIuZmllbGRWYWx1ZX0pLnZhbHVlOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9Ik9mZiIhPT1pLGUuc2V0VmFsdWUobix7dmFsdWU6aX0pKSx0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gY2hlY2tCb3giO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIFQuYWRkKGEpLGEuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLG4pLGEuZGlzYWJsZWQ9ci5yZWFkT25seSx0aGlzLl9zZXRSZXF1aXJlZChhLHRoaXMuZGF0YS5yZXF1aXJlZCksYS50eXBlPSJjaGVja2JveCIsYS5uYW1lPXIuZmllbGROYW1lLGkmJmEuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwhMCksYS5zZXRBdHRyaWJ1dGUoImV4cG9ydFZhbHVlIixyLmV4cG9ydFZhbHVlKSxhLnRhYkluZGV4PVAsYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLChmdW5jdGlvbihpKXt2YXIgYSxvPWkudGFyZ2V0LHM9by5uYW1lLGw9by5jaGVja2VkLHU9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShzLG4pKTt0cnl7Zm9yKHUucygpOyEoYT11Lm4oKSkuZG9uZTspe3ZhciBjPWEudmFsdWUsaD1sJiZjLmV4cG9ydFZhbHVlPT09ci5leHBvcnRWYWx1ZTtjLmRvbUVsZW1lbnQmJihjLmRvbUVsZW1lbnQuY2hlY2tlZD1oKSxlLnNldFZhbHVlKGMuaWQse3ZhbHVlOmh9KX19Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9ZS5zZXRWYWx1ZShuLHt2YWx1ZTpsfSl9KSksYS5hZGRFdmVudExpc3RlbmVyKCJyZXNldGZvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHRGaWVsZFZhbHVlfHwiT2ZmIjt0LnRhcmdldC5jaGVja2VkPWU9PT1yLmV4cG9ydFZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKGEuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLChmdW5jdGlvbihyKXt2YXIgaT17dmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQuY2hlY2tlZD0iT2ZmIiE9PXQuZGV0YWlsLnZhbHVlLGUuc2V0VmFsdWUobix7dmFsdWU6dC50YXJnZXQuY2hlY2tlZH0pfX07dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGkscil9KSksdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoYSxbWyJjaGFuZ2UiLCJWYWxpZGF0ZSJdLFsiY2hhbmdlIiwiQWN0aW9uIl0sWyJmb2N1cyIsIkZvY3VzIl0sWyJibHVyIiwiQmx1ciJdLFsibW91c2Vkb3duIiwiTW91c2UgRG93biJdLFsibW91c2VlbnRlciIsIk1vdXNlIEVudGVyIl0sWyJtb3VzZWxlYXZlIiwiTW91c2UgRXhpdCJdLFsibW91c2V1cCIsIk1vdXNlIFVwIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSksdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKGEpLHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRyksSD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3JldHVybiBrKHRoaXMsciksZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnQucmVuZGVyRm9ybXN9KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gcmFkaW9CdXR0b24iO3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uscj10aGlzLmRhdGEsbj1yLmlkLGk9ZS5nZXRWYWx1ZShuLHt2YWx1ZTpyLmZpZWxkVmFsdWU9PT1yLmJ1dHRvblZhbHVlfSkudmFsdWU7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1pIT09ci5idXR0b25WYWx1ZSxlLnNldFZhbHVlKG4se3ZhbHVlOml9KSk7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtpZihULmFkZChhKSxhLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixuKSxhLmRpc2FibGVkPXIucmVhZE9ubHksdGhpcy5fc2V0UmVxdWlyZWQoYSx0aGlzLmRhdGEucmVxdWlyZWQpLGEudHlwZT0icmFkaW8iLGEubmFtZT1yLmZpZWxkTmFtZSxpJiZhLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsITApLGEudGFiSW5kZXg9UCxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHIpe3ZhciBpLGE9ci50YXJnZXQsbz1hLm5hbWUscz1hLmNoZWNrZWQsbD1nKHQuX2dldEVsZW1lbnRzQnlOYW1lKG8sbikpO3RyeXtmb3IobC5zKCk7IShpPWwubigpKS5kb25lOyl7dmFyIHU9aS52YWx1ZTtlLnNldFZhbHVlKHUuaWQse3ZhbHVlOiExfSl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfWUuc2V0VmFsdWUobix7dmFsdWU6c30pfSkpLGEuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9ci5kZWZhdWx0RmllbGRWYWx1ZTt0LnRhcmdldC5jaGVja2VkPW51bGwhPWUmJmU9PT1yLmJ1dHRvblZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyl7dmFyIG89ci5idXR0b25WYWx1ZTthLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24ocil7dmFyIGk9e3ZhbHVlOmZ1bmN0aW9uKHIpe3ZhciBpLGE9bz09PXIuZGV0YWlsLnZhbHVlLHM9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShyLnRhcmdldC5uYW1lKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgbD1pLnZhbHVlLHU9YSYmbC5pZD09PW47bC5kb21FbGVtZW50JiYobC5kb21FbGVtZW50LmNoZWNrZWQ9dSksZS5zZXRWYWx1ZShsLmlkLHt2YWx1ZTp1fSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfX19O3QuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChpLHIpfSkpLHRoaXMuX3NldEV2ZW50TGlzdGVuZXJzKGEsW1siY2hhbmdlIiwiVmFsaWRhdGUiXSxbImNoYW5nZSIsIkFjdGlvbiJdLFsiZm9jdXMiLCJGb2N1cyJdLFsiYmx1ciIsIkJsdXIiXSxbIm1vdXNlZG93biIsIk1vdXNlIERvd24iXSxbIm1vdXNlZW50ZXIiLCJNb3VzZSBFbnRlciJdLFsibW91c2VsZWF2ZSIsIk1vdXNlIEV4aXQiXSxbIm1vdXNldXAiLCJNb3VzZSBVcCJdXSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNoZWNrZWR9KSl9cmV0dXJuIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihhKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lnbm9yZUJvcmRlcjp0LmRhdGEuaGFzQXBwZWFyYW5jZX0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dSh2KHIucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpO2UuY2xhc3NOYW1lPSJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHB1c2hCdXR0b24iLHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJihlLnRpdGxlPXRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpO3ZhciBuPWUubGFzdENoaWxkO3JldHVybiB0aGlzLmVuYWJsZVNjcmlwdGluZyYmdGhpcy5oYXNKU0FjdGlvbnMmJm4mJih0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSxuLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24oZSl7dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KHt9LGUpfSkpKSxlfX1dKSxyfShJKSxWPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGsodGhpcyxyKSxlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6dC5yZW5kZXJGb3Jtc30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iY2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZCxuPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO1QuYWRkKGkpLGkuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLHIpLGkuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5LHRoaXMuX3NldFJlcXVpcmVkKGksdGhpcy5kYXRhLnJlcXVpcmVkKSxpLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxpLnRhYkluZGV4PVA7dmFyIGE9dGhpcy5kYXRhLmNvbWJvJiZ0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg+MDt0aGlzLmRhdGEuY29tYm98fChpLnNpemU9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoLHRoaXMuZGF0YS5tdWx0aVNlbGVjdCYmKGkubXVsdGlwbGU9ITApKSxpLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLG49dC5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGE9ZyhpLm9wdGlvbnMpO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvLnNlbGVjdGVkPW8udmFsdWU9PT1ufX1jYXRjaCh0KXthLmUodCl9ZmluYWxseXthLmYoKX19KSk7dmFyIG8scz1nKHRoaXMuZGF0YS5vcHRpb25zKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWUsdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTt1LnRleHRDb250ZW50PWwuZGlzcGxheVZhbHVlLHUudmFsdWU9bC5leHBvcnRWYWx1ZSxuLnZhbHVlLmluY2x1ZGVzKGwuZXhwb3J0VmFsdWUpJiYodS5zZXRBdHRyaWJ1dGUoInNlbGVjdGVkIiwhMCksYT0hMSksaS5hcHBlbmQodSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXZhciBjPW51bGw7aWYoYSl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7aC52YWx1ZT0iICIsaC5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsITApLGguc2V0QXR0cmlidXRlKCJzZWxlY3RlZCIsITApLGkucHJlcGVuZChoKSxjPWZ1bmN0aW9uKCl7aC5yZW1vdmUoKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IixjKSxjPW51bGx9LGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGMpfXZhciBmPWZ1bmN0aW9uKHQpe3ZhciBlPXQ/InZhbHVlIjoidGV4dENvbnRlbnQiLHI9aS5vcHRpb25zO3JldHVybiBpLm11bHRpcGxlP0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RlZH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2VdfSkpOi0xPT09ci5zZWxlY3RlZEluZGV4P251bGw6cltyLnNlbGVjdGVkSW5kZXhdW2VdfSxkPWYoITEpLHA9ZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQub3B0aW9ucztyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5VmFsdWU6dC50ZXh0Q29udGVudCxleHBvcnRWYWx1ZTp0LnZhbHVlfX0pKX07cmV0dXJuIHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucz8oaS5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBhPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtudWxsPT09KG49Yyl8fHZvaWQgMD09PW58fG4oKTt2YXIgYSxvPXQuZGV0YWlsLnZhbHVlLHM9bmV3IFNldChBcnJheS5pc0FycmF5KG8pP286W29dKSxsPWcoaS5vcHRpb25zKTt0cnl7Zm9yKGwucygpOyEoYT1sLm4oKSkuZG9uZTspe3ZhciB1PWEudmFsdWU7dS5zZWxlY3RlZD1zLmhhcyh1LnZhbHVlKX19Y2F0Y2godCl7bC5lKHQpfWZpbmFsbHl7bC5mKCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKX0pLGQ9ZighMSl9LG11bHRpcGxlU2VsZWN0aW9uOmZ1bmN0aW9uKHQpe2kubXVsdGlwbGU9ITB9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgbj1pLm9wdGlvbnMsYT10LmRldGFpbC5yZW1vdmU7aWYoblthXS5zZWxlY3RlZD0hMSxpLnJlbW92ZShhKSxuLmxlbmd0aD4wKXt2YXIgbz1BcnJheS5wcm90b3R5cGUuZmluZEluZGV4LmNhbGwobiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0ZWR9KSk7LTE9PT1vJiYoblswXS5zZWxlY3RlZD0hMCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKSxpdGVtczpwKHQpfSksZD1mKCExKX0sY2xlYXI6ZnVuY3Rpb24odCl7Zm9yKDswIT09aS5sZW5ndGg7KWkucmVtb3ZlKDApO2Uuc2V0VmFsdWUocix7dmFsdWU6bnVsbCxpdGVtczpbXX0pLGQ9ZighMSl9LGluc2VydDpmdW5jdGlvbih0KXt2YXIgbj10LmRldGFpbC5pbnNlcnQsYT1uLmluZGV4LG89bi5kaXNwbGF5VmFsdWUscz1uLmV4cG9ydFZhbHVlLGw9aS5jaGlsZHJlblthXSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpO3UudGV4dENvbnRlbnQ9byx1LnZhbHVlPXMsbD9sLmJlZm9yZSh1KTppLmFwcGVuZCh1KSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpdGVtczpmdW5jdGlvbih0KXtmb3IodmFyIG49dC5kZXRhaWwuaXRlbXM7MCE9PWkubGVuZ3RoOylpLnJlbW92ZSgwKTt2YXIgYSxvPWcobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlLGw9cy5kaXNwbGF5VmFsdWUsdT1zLmV4cG9ydFZhbHVlLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Yy50ZXh0Q29udGVudD1sLGMudmFsdWU9dSxpLmFwcGVuZChjKX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9aS5vcHRpb25zLmxlbmd0aD4wJiYoaS5vcHRpb25zWzBdLnNlbGVjdGVkPSEwKSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpbmRpY2VzOmZ1bmN0aW9uKHQpe3ZhciBuLGk9bmV3IFNldCh0LmRldGFpbC5pbmRpY2VzKSxhPWcodC50YXJnZXQub3B0aW9ucyk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28uc2VsZWN0ZWQ9aS5oYXMoby5pbmRleCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfWUuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KSxkPWYoITEpfSxlZGl0YWJsZTpmdW5jdGlvbih0KXt0LnRhcmdldC5kaXNhYmxlZD0hdC5kZXRhaWwuZWRpdGFibGV9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYSxuKX0pKSxpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24obil7dmFyIGksYT1mKCEwKTtlLnNldFZhbHVlKHIse3ZhbHVlOmF9KSxuLnByZXZlbnREZWZhdWx0KCksbnVsbD09PShpPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1pfHxpLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6ZCxjaGFuZ2VFeDphLHdpbGxDb21taXQ6ITEsY29tbWl0S2V5OjEsa2V5RG93bjohMX19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhpLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXSxbImlucHV0IiwiQWN0aW9uIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSk6aS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe2Uuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KX0pKSx0aGlzLmRhdGEuY29tYm8mJnRoaXMuX3NldFRleHRTdHlsZShpKSx0aGlzLl9zZXRCYWNrZ3JvdW5kQ29sb3IoaSksdGhpcy5fc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlMoaSksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShHKSxYPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhO2sodGhpcyxyKTt2YXIgbz10LmRhdGEscz0hci5JR05PUkVfVFlQRVMuaGFzKG8ucGFyZW50VHlwZSkmJiEhKG51bGwhPT0obj1vLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT1vLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT1vLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybiBlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6c30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InBvcHVwQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5sYXllci5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdCh0aGlzLmRhdGEucGFyZW50SWQsJyJdJykpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5jb250YWluZXI7dmFyIGU9bmV3IFkoe2NvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcix0cmlnZ2VyOkFycmF5LmZyb20odCksY29sb3I6dGhpcy5kYXRhLmNvbG9yLHRpdGxlT2JqOnRoaXMuZGF0YS50aXRsZU9iaixtb2RpZmljYXRpb25EYXRlOnRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOnRoaXMuZGF0YS5jb250ZW50c09iaixyaWNoVGV4dDp0aGlzLmRhdGEucmljaFRleHR9KSxyPXRoaXMucGFnZSxpPW4uVXRpbC5ub3JtYWxpemVSZWN0KFt0aGlzLmRhdGEucGFyZW50UmVjdFswXSxyLnZpZXdbM10tdGhpcy5kYXRhLnBhcmVudFJlY3RbMV0rci52aWV3WzFdLHRoaXMuZGF0YS5wYXJlbnRSZWN0WzJdLHIudmlld1szXS10aGlzLmRhdGEucGFyZW50UmVjdFszXStyLnZpZXdbMV1dKSxhPWlbMF0rdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0tdGhpcy5kYXRhLnBhcmVudFJlY3RbMF0sbz1pWzFdLHM9dGhpcy52aWV3cG9ydC5yYXdEaW1zLGw9cy5wYWdlV2lkdGgsdT1zLnBhZ2VIZWlnaHQsYz1zLnBhZ2VYLGg9cy5wYWdlWTtyZXR1cm4gdGhpcy5jb250YWluZXIuc3R5bGUubGVmdD0iIi5jb25jYXQoMTAwKihhLWMpL2wsIiUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCooby1oKS91LCIlIiksdGhpcy5jb250YWluZXIuYXBwZW5kKGUucmVuZGVyKCkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKTtEPVgsTj0iSUdOT1JFX1RZUEVTIixVPW5ldyBTZXQoWyJMaW5lIiwiU3F1YXJlIiwiQ2lyY2xlIiwiUG9seUxpbmUiLCJQb2x5Z29uIiwiSW5rIl0pLChOPUUoTikpaW4gRD9PYmplY3QuZGVmaW5lUHJvcGVydHkoRCxOLHt2YWx1ZTpVLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6RFtOXT1VO3ZhciBZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtrKHRoaXMsdCksdGhpcy5jb250YWluZXI9ZS5jb250YWluZXIsdGhpcy50cmlnZ2VyPWUudHJpZ2dlcix0aGlzLmNvbG9yPWUuY29sb3IsdGhpcy50aXRsZU9iaj1lLnRpdGxlT2JqLHRoaXMubW9kaWZpY2F0aW9uRGF0ZT1lLm1vZGlmaWNhdGlvbkRhdGUsdGhpcy5jb250ZW50c09iaj1lLmNvbnRlbnRzT2JqLHRoaXMucmljaFRleHQ9ZS5yaWNoVGV4dCx0aGlzLmhpZGVXcmFwcGVyPWUuaGlkZVdyYXBwZXJ8fCExLHRoaXMucGlubmVkPSExfXJldHVybiB4KHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5jbGFzc05hbWU9InBvcHVwV3JhcHBlciIsdGhpcy5oaWRlRWxlbWVudD10aGlzLmhpZGVXcmFwcGVyP3I6dGhpcy5jb250YWluZXIsdGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9InBvcHVwIjt2YXIgbz10aGlzLmNvbG9yO2lmKG8pe3ZhciBsPS43KigyNTUtb1swXSkrb1swXSx1PS43KigyNTUtb1sxXSkrb1sxXSxjPS43KigyNTUtb1syXSkrb1syXTthLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8bCwwfHUsMHxjKX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIpO2guZGlyPXRoaXMudGl0bGVPYmouZGlyLGgudGV4dENvbnRlbnQ9dGhpcy50aXRsZU9iai5zdHIsYS5hcHBlbmQoaCk7dmFyIGY9aS5QREZEYXRlU3RyaW5nLnRvRGF0ZU9iamVjdCh0aGlzLm1vZGlmaWNhdGlvbkRhdGUpO2lmKGYpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtkLmNsYXNzTmFtZT0icG9wdXBEYXRlIixkLnRleHRDb250ZW50PSJ7e2RhdGV9fSwge3t0aW1lfX0iLGQuZGF0YXNldC5sMTBuSWQ9ImFubm90YXRpb25fZGF0ZV9zdHJpbmciLGQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7ZGF0ZTpmLnRvTG9jYWxlRGF0ZVN0cmluZygpLHRpbWU6Zi50b0xvY2FsZVRpbWVTdHJpbmcoKX0pLGEuYXBwZW5kKGQpfWlmKG51bGw9PT0odD10aGlzLnJpY2hUZXh0KXx8dm9pZCAwPT09dHx8IXQuc3RyfHxudWxsIT09KGU9dGhpcy5jb250ZW50c09iaikmJnZvaWQgMCE9PWUmJmUuc3RyJiZ0aGlzLmNvbnRlbnRzT2JqLnN0ciE9PXRoaXMucmljaFRleHQuc3RyKXt2YXIgcD10aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzT2JqKTthLmFwcGVuZChwKX1lbHNlIHMuWGZhTGF5ZXIucmVuZGVyKHt4ZmFIdG1sOnRoaXMucmljaFRleHQuaHRtbCxpbnRlbnQ6InJpY2hUZXh0IixkaXY6YX0pLGEubGFzdENoaWxkLmNsYXNzTmFtZT0icmljaFRleHQgcG9wdXBDb250ZW50IjtBcnJheS5pc0FycmF5KHRoaXMudHJpZ2dlcil8fCh0aGlzLnRyaWdnZXI9W3RoaXMudHJpZ2dlcl0pO3ZhciB2LHk9Zyh0aGlzLnRyaWdnZXIpO3RyeXtmb3IoeS5zKCk7ISh2PXkubigpKS5kb25lOyl7dmFyIG09di52YWx1ZTttLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl90b2dnbGUuYmluZCh0aGlzKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHRoaXMuX3Nob3cuYmluZCh0aGlzLCExKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcy5faGlkZS5iaW5kKHRoaXMsITEpKX19Y2F0Y2godCl7eS5lKHQpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hpZGUuYmluZCh0aGlzLCEwKSksci5hcHBlbmQoYSkscn19LHtrZXk6Il9mb3JtYXRDb250ZW50cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHIscj10LmRpcixuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtuLmNsYXNzTmFtZT0icG9wdXBDb250ZW50IixuLmRpcj1yO2Zvcih2YXIgaT1lLnNwbGl0KC8oPzpcclxuP3xcbikvKSxhPTAsbz1pLmxlbmd0aDthPG87KythKXt2YXIgcz1pW2FdO24uYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKSxhPG8tMSYmbi5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSl9cmV0dXJuIG59fSx7a2V5OiJfdG9nZ2xlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGlubmVkP3RoaXMuX2hpZGUoITApOnRoaXMuX3Nob3coITApfX0se2tleToiX3Nob3ciLHZhbHVlOmZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSYmKHRoaXMucGlubmVkPSEwKSx0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiYmKHRoaXMuaGlkZUVsZW1lbnQuaGlkZGVuPSExLHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleD1wYXJzZUludCh0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXgpKzFlMyl9fSx7a2V5OiJfaGlkZSIsdmFsdWU6ZnVuY3Rpb24oKXsoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSkmJih0aGlzLnBpbm5lZD0hMSksdGhpcy5oaWRlRWxlbWVudC5oaWRkZW58fHRoaXMucGlubmVkfHwodGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITAsdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4PXBhcnNlSW50KHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleCktMWUzKX19XSksdH0oKSxLPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLnRleHRDb250ZW50PXQuZGF0YS50ZXh0Q29udGVudCxvfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZyZWVUZXh0QW5ub3RhdGlvbiIsdGhpcy50ZXh0Q29udGVudCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImFubm90YXRpb25UZXh0Q29udGVudCIsdC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjb21tZW50Iik7dmFyIGUscj1nKHRoaXMudGV4dENvbnRlbnQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtpLnRleHRDb250ZW50PW4sdC5hcHBlbmQoaSl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuY29udGFpbmVyLmFwcGVuZCh0KX1yZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLEo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmVBbm5vdGF0aW9uIjt2YXIgdD10aGlzLmRhdGEsZT1DKHQucmVjdCkscj1lLndpZHRoLG49ZS5oZWlnaHQsaT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHIsbiwhMCksYT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmxpbmUiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIngxIix0LnJlY3RbMl0tdC5saW5lQ29vcmRpbmF0ZXNbMF0pLGEuc2V0QXR0cmlidXRlKCJ5MSIsdC5yZWN0WzNdLXQubGluZUNvb3JkaW5hdGVzWzFdKSxhLnNldEF0dHJpYnV0ZSgieDIiLHQucmVjdFsyXS10LmxpbmVDb29yZGluYXRlc1syXSksYS5zZXRBdHRyaWJ1dGUoInkyIix0LnJlY3RbM10tdC5saW5lQ29vcmRpbmF0ZXNbM10pLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHQuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGEuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxpLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoaSksdGhpcy5fY3JlYXRlUG9wdXAoYSx0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksUT1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1YXJlQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5kYXRhLGU9Qyh0LnJlY3QpLHI9ZS53aWR0aCxuPWUuaGVpZ2h0LGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShyLG4sITApLGE9dC5ib3JkZXJTdHlsZS53aWR0aCxvPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZSgieCIsYS8yKSxvLnNldEF0dHJpYnV0ZSgieSIsYS8yKSxvLnNldEF0dHJpYnV0ZSgid2lkdGgiLHItYSksby5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbi1hKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixhfHwxKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwidHJhbnNwYXJlbnQiKSxvLnNldEF0dHJpYnV0ZSgiZmlsbCIsInRyYW5zcGFyZW50IiksaS5hcHBlbmQobyksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuX2NyZWF0ZVBvcHVwKG8sdCksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLCQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImNpcmNsZUFubm90YXRpb24iO3ZhciB0PXRoaXMuZGF0YSxlPUModC5yZWN0KSxyPWUud2lkdGgsbj1lLmhlaWdodCxpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUocixuLCEwKSxhPXQuYm9yZGVyU3R5bGUud2lkdGgsbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmVsbGlwc2UiKTtyZXR1cm4gby5zZXRBdHRyaWJ1dGUoImN4IixyLzIpLG8uc2V0QXR0cmlidXRlKCJjeSIsbi8yKSxvLnNldEF0dHJpYnV0ZSgicngiLHIvMi1hLzIpLG8uc2V0QXR0cmlidXRlKCJyeSIsbi8yLWEvMiksby5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsYXx8MSksby5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50Iiksby5zZXRBdHRyaWJ1dGUoImZpbGwiLCJ0cmFuc3BhcmVudCIpLGkuYXBwZW5kKG8pLHRoaXMuY29udGFpbmVyLmFwcGVuZChpKSx0aGlzLl9jcmVhdGVQb3B1cChvLHQpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxaPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLmNvbnRhaW5lckNsYXNzTmFtZT0icG9seWxpbmVBbm5vdGF0aW9uIixvLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWxpbmUiLG99cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT10aGlzLmNvbnRhaW5lckNsYXNzTmFtZTt2YXIgdCxlPXRoaXMuZGF0YSxyPUMoZS5yZWN0KSxuPXIud2lkdGgsaT1yLmhlaWdodCxhPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUobixpLCEwKSxvPVtdLHM9ZyhlLnZlcnRpY2VzKTt0cnl7Zm9yKHMucygpOyEodD1zLm4oKSkuZG9uZTspe3ZhciBsPXQudmFsdWUsdT1sLngtZS5yZWN0WzBdLGM9ZS5yZWN0WzNdLWwueTtvLnB1c2godSsiLCIrYyl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfW89by5qb2luKCIgIik7dmFyIGg9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7cmV0dXJuIGguc2V0QXR0cmlidXRlKCJwb2ludHMiLG8pLGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGguc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGguc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxhLmFwcGVuZChoKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5fY3JlYXRlUG9wdXAoaCxlKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksdHQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbjtyZXR1cm4gayh0aGlzLHIpLChuPWUuY2FsbCh0aGlzLHQpKS5jb250YWluZXJDbGFzc05hbWU9InBvbHlnb25Bbm5vdGF0aW9uIixuLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWdvbiIsbn1yZXR1cm4geChyKX0oWiksZXQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJjYXJldEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxydD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYSxvO2sodGhpcyxyKTt2YXIgcz0hISh0LmRhdGEuaGFzUG9wdXB8fG51bGwhPT0obj10LmRhdGEudGl0bGVPYmopJiZ2b2lkIDAhPT1uJiZuLnN0cnx8bnVsbCE9PShpPXQuZGF0YS5jb250ZW50c09iaikmJnZvaWQgMCE9PWkmJmkuc3RyfHxudWxsIT09KGE9dC5kYXRhLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybihvPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpzLGlnbm9yZUJvcmRlcjohMH0pKS5jb250YWluZXJDbGFzc05hbWU9Imlua0Fubm90YXRpb24iLG8uc3ZnRWxlbWVudE5hbWU9InN2Zzpwb2x5bGluZSIsb31yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO3ZhciB0LGU9dGhpcy5kYXRhLHI9QyhlLnJlY3QpLG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShuLGksITApLG89ZyhlLmlua0xpc3RzKTt0cnl7Zm9yKG8ucygpOyEodD1vLm4oKSkuZG9uZTspe3ZhciBzLGw9dC52YWx1ZSx1PVtdLGM9ZyhsKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciBoPXMudmFsdWUsZj1oLngtZS5yZWN0WzBdLGQ9ZS5yZWN0WzNdLWgueTt1LnB1c2goIiIuY29uY2F0KGYsIiwiKS5jb25jYXQoZCkpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX11PXUuam9pbigiICIpO3ZhciBwPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpO3Auc2V0QXR0cmlidXRlKCJwb2ludHMiLHUpLHAuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLHAuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLHAuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSx0aGlzLl9jcmVhdGVQb3B1cChwLGUpLGEuYXBwZW5kKHApfX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdGhpcy5jb250YWluZXIuYXBwZW5kKGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxudD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJoaWdobGlnaHRBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iaGlnaGxpZ2h0QW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxpdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJ1bmRlcmxpbmVBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0idW5kZXJsaW5lQW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxhdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJzcXVpZ2dseUFubm90YXRpb24iKToodGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzcXVpZ2dseUFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksb3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMCxjcmVhdGVRdWFkcmlsYXRlcmFsczohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygic3RyaWtlb3V0QW5ub3RhdGlvbiIpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InN0cmlrZW91dEFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksc3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzdGFtcEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxsdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGE7ayh0aGlzLHIpO3ZhciBvPShhPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMH0pKS5kYXRhLmZpbGUscz1vLmZpbGVuYW1lLGw9by5jb250ZW50O3JldHVybiBhLmZpbGVuYW1lPSgwLGkuZ2V0RmlsZW5hbWVGcm9tVXJsKShzLCEwKSxhLmNvbnRlbnQ9bCxudWxsPT09KG49YS5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PW58fG4uZGlzcGF0Y2goImZpbGVhdHRhY2htZW50YW5ub3RhdGlvbiIse3NvdXJjZTpwKGEpLGZpbGVuYW1lOnMsY29udGVudDpsfSksYX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyO3JldHVybiB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiIsdGhpcy5kYXRhLmhhc0FwcGVhcmFuY2U/cj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKToocj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSkuc3JjPSIiLmNvbmNhdCh0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCwiYW5ub3RhdGlvbi0iKS5jb25jYXQoL3BhcGVyY2xpcC9pLnRlc3QodGhpcy5kYXRhLm5hbWUpPyJwYXBlcmNsaXAiOiJwdXNocGluIiwiLnN2ZyIpLHIuY2xhc3NOYW1lPSJwb3B1cFRyaWdnZXJBcmVhIixyLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIix0aGlzLl9kb3dubG9hZC5iaW5kKHRoaXMpKSwhdGhpcy5kYXRhLmhhc1BvcHVwJiYobnVsbCE9PSh0PXRoaXMuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PXQmJnQuc3RyfHxudWxsIT09KGU9dGhpcy5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09ZSYmZS5zdHJ8fHRoaXMuZGF0YS5yaWNoVGV4dCkmJnRoaXMuX2NyZWF0ZVBvcHVwKHIsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXJ9fSx7a2V5OiJfZG93bmxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZG93bmxvYWRNYW5hZ2VyKXx8dm9pZCAwPT09dHx8dC5vcGVuT3JEb3dubG9hZERhdGEodGhpcy5jb250YWluZXIsdGhpcy5jb250ZW50LHRoaXMuZmlsZW5hbWUpfX1dKSxyfShGKSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtrKHRoaXMsdCl9cmV0dXJuIHgodCxudWxsLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbnMsbz1lLmRpdixzPWUudmlld3BvcnQsdT1lLmFjY2Vzc2liaWxpdHlNYW5hZ2VyOygwLGkuc2V0TGF5ZXJEaW1lbnNpb25zKShvLHMpO3ZhciBjLGg9e2RhdGE6bnVsbCxsYXllcjpvLHBhZ2U6ZS5wYWdlLHZpZXdwb3J0OnMsbGlua1NlcnZpY2U6ZS5saW5rU2VydmljZSxkb3dubG9hZE1hbmFnZXI6ZS5kb3dubG9hZE1hbmFnZXIsaW1hZ2VSZXNvdXJjZXNQYXRoOmUuaW1hZ2VSZXNvdXJjZXNQYXRofHwiIixyZW5kZXJGb3JtczohMSE9PWUucmVuZGVyRm9ybXMsc3ZnRmFjdG9yeTpuZXcgaS5ET01TVkdGYWN0b3J5LGFubm90YXRpb25TdG9yYWdlOmUuYW5ub3RhdGlvblN0b3JhZ2V8fG5ldyBhLkFubm90YXRpb25TdG9yYWdlLGVuYWJsZVNjcmlwdGluZzohMD09PWUuZW5hYmxlU2NyaXB0aW5nLGhhc0pTQWN0aW9uczplLmhhc0pTQWN0aW9ucyxmaWVsZE9iamVjdHM6ZS5maWVsZE9iamVjdHN9LGY9MCxkPWcocik7dHJ5e2ZvcihkLnMoKTshKGM9ZC5uKCkpLmRvbmU7KXt2YXIgcD1jLnZhbHVlO2lmKHAuYW5ub3RhdGlvblR5cGUhPT1uLkFubm90YXRpb25UeXBlLlBPUFVQKXt2YXIgdj1DKHAucmVjdCkseT12LndpZHRoLG09di5oZWlnaHQ7aWYoeTw9MHx8bTw9MCljb250aW51ZX1oLmRhdGE9cDt2YXIgYj1PLmNyZWF0ZShoKTtpZihiLmlzUmVuZGVyYWJsZSl7dmFyIF89Yi5yZW5kZXIoKTtpZihwLmhpZGRlbiYmKF8uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIiksQXJyYXkuaXNBcnJheShfKSl7dmFyIHcsQT1nKF8pO3RyeXtmb3IoQS5zKCk7ISh3PUEubigpKS5kb25lOyl7dmFyIGs9dy52YWx1ZTtrLnN0eWxlLnpJbmRleD1mKyssbCh0LHQsY3QpLmNhbGwodCxrLHAuaWQsbyx1KX19Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9fWVsc2UgXy5zdHlsZS56SW5kZXg9ZisrLGIgaW5zdGFuY2VvZiBYP28ucHJlcGVuZChfKTpsKHQsdCxjdCkuY2FsbCh0LF8scC5pZCxvLHUpfX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9bCh0aGlzLHQsaHQpLmNhbGwodGhpcyxvLGUuYW5ub3RhdGlvbkNhbnZhc01hcCl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxuPWUuZGl2LGE9ZS52aWV3cG9ydDsoMCxpLnNldExheWVyRGltZW5zaW9ucykobix7cm90YXRpb246YS5yb3RhdGlvbn0pLGwodGhpcyx0LGh0KS5jYWxsKHRoaXMsbixyKSxuLmhpZGRlbj0hMX19XSksdH0oKTtmdW5jdGlvbiBjdCh0LGUscixuKXt2YXIgYT10LmZpcnN0Q2hpbGR8fHQ7YS5pZD0iIi5jb25jYXQoaS5Bbm5vdGF0aW9uUHJlZml4KS5jb25jYXQoZSksci5hcHBlbmQodCksbnVsbD09bnx8bi5tb3ZlRWxlbWVudEluRE9NKHIsdCxhLCExKX1mdW5jdGlvbiBodCh0LGUpe2lmKGUpe3ZhciByLG49ZyhlKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPWIoci52YWx1ZSwyKSxhPWlbMF0sbz1pWzFdLHM9dC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdChhLCciXScpKTtpZihzKXt2YXIgbD1zLmZpcnN0Q2hpbGQ7bD8iQ0FOVkFTIj09PWwubm9kZU5hbWU/bC5yZXBsYWNlV2l0aChvKTpsLmJlZm9yZShvKTpzLmFwcGVuZChvKX19fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfWUuY2xlYXIoKX19ZS5Bbm5vdGF0aW9uTGF5ZXI9dXR9LCh0LGUpPT57ZnVuY3Rpb24gcih0KXtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scih0KX1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBpKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aSh0LGUpOnZvaWQgMH19KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBpKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1yKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PXIoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIG8odCl7cmV0dXJuIE1hdGguZmxvb3IoMjU1Kk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ29sb3JDb252ZXJ0ZXJzPXZvaWQgMDt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToiQ01ZS19HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsNCkscj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVyblsiRyIsMS1NYXRoLm1pbigxLC4zKnIrLjU5KmErLjExKmkrbyldfX0se2tleToiR19DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm5bIkNNWUsiLDAsMCwwLDEtbih0LDEpWzBdXX19LHtrZXk6IkdfUkdCIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMSlbMF07cmV0dXJuWyJSR0IiLGUsZSxlXX19LHtrZXk6IkdfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9byhuKHQsMSlbMF0pO3JldHVybiIjIi5jb25jYXQoZSkuY29uY2F0KGUpLmNvbmNhdChlKX19LHtrZXk6IlJHQl9HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMyk7cmV0dXJuWyJHIiwuMyplWzBdKy41OSplWzFdKy4xMSplWzJdXX19LHtrZXk6IlJHQl9IVE1MIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj1lWzBdLGk9ZVsxXSxhPWVbMl0scz1vKHIpLGw9byhpKSx1PW8oYSk7cmV0dXJuIiMiLmNvbmNhdChzKS5jb25jYXQobCkuY29uY2F0KHUpfX0se2tleToiVF9IVE1MIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIjMDAwMDAwMDAifX0se2tleToiQ01ZS19SR0IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW4odCw0KSxyPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuWyJSR0IiLDEtTWF0aC5taW4oMSxyK28pLDEtTWF0aC5taW4oMSxhK28pLDEtTWF0aC5taW4oMSxpK28pXX19LHtrZXk6IkNNWUtfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5DTVlLX1JHQih0KS5zbGljZSgxKTtyZXR1cm4gdGhpcy5SR0JfSFRNTChlKX19LHtrZXk6IlJHQl9DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj0xLWVbMF0saT0xLWVbMV0sYT0xLWVbMl07cmV0dXJuWyJDTVlLIixyLGksYSxNYXRoLm1pbihyLGksYSldfX1dLG51bGwmJmEoZS5wcm90b3R5cGUsbnVsbCksciYmYShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5Db2xvckNvbnZlcnRlcnM9c30sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlhmYUxheWVyPXZvaWQgMDt2YXIgbj1yKDE0OSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0saSh0KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fHModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPXModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLGw9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe2w9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBhfX19fWZ1bmN0aW9uIHModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGwodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBsKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1pKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpfXZhciBlLHI7cmV0dXJuIGU9dCxyPVt7a2V5OiJzZXR1cFN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bi5nZXRWYWx1ZShlLHt2YWx1ZTpudWxsfSk7c3dpdGNoKHIubmFtZSl7Y2FzZSJ0ZXh0YXJlYSI6aWYobnVsbCE9PWEudmFsdWUmJih0LnRleHRDb250ZW50PWEudmFsdWUpLCJwcmludCI9PT1pKWJyZWFrO3QuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLChmdW5jdGlvbih0KXtuLnNldFZhbHVlKGUse3ZhbHVlOnQudGFyZ2V0LnZhbHVlfSl9KSk7YnJlYWs7Y2FzZSJpbnB1dCI6aWYoInJhZGlvIj09PXIuYXR0cmlidXRlcy50eXBlfHwiY2hlY2tib3giPT09ci5hdHRyaWJ1dGVzLnR5cGUpe2lmKGEudmFsdWU9PT1yLmF0dHJpYnV0ZXMueGZhT24/dC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCEwKTphLnZhbHVlPT09ci5hdHRyaWJ1dGVzLnhmYU9mZiYmdC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSwicHJpbnQiPT09aSlicmVhazt0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQuY2hlY2tlZD90LnRhcmdldC5nZXRBdHRyaWJ1dGUoInhmYU9uIik6dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJ4ZmFPZmYiKX0pfSkpfWVsc2V7aWYobnVsbCE9PWEudmFsdWUmJnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYS52YWx1ZSksInByaW50Ij09PWkpYnJlYWs7dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQudmFsdWV9KX0pKX1icmVhaztjYXNlInNlbGVjdCI6aWYobnVsbCE9PWEudmFsdWUpe3ZhciBzLGw9byhyLmNoaWxkcmVuKTt0cnl7Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7dS5hdHRyaWJ1dGVzLnZhbHVlPT09YS52YWx1ZSYmKHUuYXR0cmlidXRlcy5zZWxlY3RlZD0hMCl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX10LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24odCl7dmFyIHI9dC50YXJnZXQub3B0aW9ucyxpPS0xPT09ci5zZWxlY3RlZEluZGV4PyIiOnJbci5zZWxlY3RlZEluZGV4XS52YWx1ZTtuLnNldFZhbHVlKGUse3ZhbHVlOml9KX0pKX19fSx7a2V5OiJzZXRBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10Lmh0bWwscj10LmVsZW1lbnQsbj10LnN0b3JhZ2UsaT12b2lkIDA9PT1uP251bGw6bixvPXQuaW50ZW50LHM9dC5saW5rU2VydmljZSxsPXIuYXR0cmlidXRlcyx1PWUgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudDsicmFkaW8iPT09bC50eXBlJiYobC5uYW1lPSIiLmNvbmNhdChsLm5hbWUsIi0iKS5jb25jYXQobykpO2Zvcih2YXIgYz0wLGg9T2JqZWN0LmVudHJpZXMobCk7YzxoLmxlbmd0aDtjKyspe3ZhciBmPWEoaFtjXSwyKSxkPWZbMF0scD1mWzFdO2lmKG51bGwhPXApc3dpdGNoKGQpe2Nhc2UiY2xhc3MiOnAubGVuZ3RoJiZlLnNldEF0dHJpYnV0ZShkLHAuam9pbigiICIpKTticmVhaztjYXNlImRhdGFJZCI6YnJlYWs7Y2FzZSJpZCI6ZS5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIscCk7YnJlYWs7Y2FzZSJzdHlsZSI6T2JqZWN0LmFzc2lnbihlLnN0eWxlLHApO2JyZWFrO2Nhc2UidGV4dENvbnRlbnQiOmUudGV4dENvbnRlbnQ9cDticmVhaztkZWZhdWx0OighdXx8ImhyZWYiIT09ZCYmIm5ld1dpbmRvdyIhPT1kKSYmZS5zZXRBdHRyaWJ1dGUoZCxwKX19dSYmcy5hZGRMaW5rQXR0cmlidXRlcyhlLGwuaHJlZixsLm5ld1dpbmRvdyksaSYmbC5kYXRhSWQmJnRoaXMuc2V0dXBTdG9yYWdlKGUsbC5kYXRhSWQscixpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5hbm5vdGF0aW9uU3RvcmFnZSxyPXQubGlua1NlcnZpY2UsaT10LnhmYUh0bWwscz10LmludGVudHx8ImRpc3BsYXkiLGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2kuYXR0cmlidXRlcyYmdGhpcy5zZXRBdHRyaWJ1dGVzKHtodG1sOmwsZWxlbWVudDppLGludGVudDpzLGxpbmtTZXJ2aWNlOnJ9KTt2YXIgdT1bW2ksLTEsbF1dLGM9dC5kaXY7aWYoYy5hcHBlbmQobCksdC52aWV3cG9ydCl7dmFyIGg9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTtjLnN0eWxlLnRyYW5zZm9ybT1ofSJyaWNoVGV4dCIhPT1zJiZjLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ4ZmFMYXllciB4ZmFGb250Iik7Zm9yKHZhciBmPVtdO3UubGVuZ3RoPjA7KXt2YXIgZCxwLHY9YSh1LmF0KC0xKSwzKSx5PXZbMF0sbT12WzFdLGc9dlsyXTtpZihtKzEhPT15LmNoaWxkcmVuLmxlbmd0aCl7dmFyIGI9eS5jaGlsZHJlblsrK3UuYXQoLTEpWzFdXTtpZihudWxsIT09Yil7dmFyIF89Yi5uYW1lO2lmKCIjdGV4dCIhPT1fKXt2YXIgdz12b2lkIDA7aWYodz1udWxsIT09KGQ9YikmJnZvaWQgMCE9PWQmJm51bGwhPT0ocD1kLmF0dHJpYnV0ZXMpJiZ2b2lkIDAhPT1wJiZwLnhtbG5zP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhiLmF0dHJpYnV0ZXMueG1sbnMsXyk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChfKSxnLmFwcGVuZCh3KSxiLmF0dHJpYnV0ZXMmJnRoaXMuc2V0QXR0cmlidXRlcyh7aHRtbDp3LGVsZW1lbnQ6YixzdG9yYWdlOmUsaW50ZW50OnMsbGlua1NlcnZpY2U6cn0pLGIuY2hpbGRyZW4mJmIuY2hpbGRyZW4ubGVuZ3RoPjApdS5wdXNoKFtiLC0xLHddKTtlbHNlIGlmKGIudmFsdWUpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIudmFsdWUpO24uWGZhVGV4dC5zaG91bGRCdWlsZFRleHQoXykmJmYucHVzaChBKSx3LmFwcGVuZChBKX19ZWxzZXt2YXIgaz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiLnZhbHVlKTtmLnB1c2goayksZy5hcHBlbmQoayl9fX1lbHNlIHUucG9wKCl9dmFyIFMseD1vKGMucXVlcnlTZWxlY3RvckFsbCgiLnhmYU5vbkludGVyYWN0aXZlIGlucHV0LCAueGZhTm9uSW50ZXJhY3RpdmUgdGV4dGFyZWEiKSk7dHJ5e2Zvcih4LnMoKTshKFM9eC5uKCkpLmRvbmU7KVMudmFsdWUuc2V0QXR0cmlidXRlKCJyZWFkT25seSIsITApfWNhdGNoKHQpe3guZSh0KX1maW5hbGx5e3guZigpfXJldHVybnt0ZXh0RGl2czpmfX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTt0LmRpdi5zdHlsZS50cmFuc2Zvcm09ZSx0LmRpdi5oaWRkZW49ITF9fV0sbnVsbCYmdShlLnByb3RvdHlwZSxudWxsKSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYUxheWVyPWN9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlNWR0dyYXBoaWNzPXZvaWQgMDt2YXIgaT1yKDEzNyksYT1yKDEpLG89cigzKTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBoKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Yyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGgodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBoKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiBlJiZmKHQucHJvdG90eXBlLGUpLHImJmYodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgdj1kKChmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLCgwLGEudW5yZWFjaGFibGUpKCJOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzIil9KSk7ZS5TVkdHcmFwaGljcz12O3ZhciB5PWZ1bmN0aW9uKHQpe2lmKE51bWJlci5pc0ludGVnZXIodCkpcmV0dXJuIHQudG9TdHJpbmcoKTt2YXIgZT10LnRvRml4ZWQoMTApLHI9ZS5sZW5ndGgtMTtpZigiMCIhPT1lW3JdKXJldHVybiBlO2Rve3ItLX13aGlsZSgiMCI9PT1lW3JdKTtyZXR1cm4gZS5zdWJzdHJpbmcoMCwiLiI9PT1lW3JdP3I6cisxKX0sbT1mdW5jdGlvbih0KXtpZigwPT09dFs0XSYmMD09PXRbNV0pe2lmKDA9PT10WzFdJiYwPT09dFsyXSlyZXR1cm4gMT09PXRbMF0mJjE9PT10WzNdPyIiOiJzY2FsZSgiLmNvbmNhdCh5KHRbMF0pLCIgIikuY29uY2F0KHkodFszXSksIikiKTtpZih0WzBdPT09dFszXSYmdFsxXT09PS10WzJdKXt2YXIgZT0xODAqTWF0aC5hY29zKHRbMF0pL01hdGguUEk7cmV0dXJuInJvdGF0ZSgiLmNvbmNhdCh5KGUpLCIpIil9fWVsc2UgaWYoMT09PXRbMF0mJjA9PT10WzFdJiYwPT09dFsyXSYmMT09PXRbM10pcmV0dXJuInRyYW5zbGF0ZSgiLmNvbmNhdCh5KHRbNF0pLCIgIikuY29uY2F0KHkodFs1XSksIikiKTtyZXR1cm4ibWF0cml4KCIuY29uY2F0KHkodFswXSksIiAiKS5jb25jYXQoeSh0WzFdKSwiICIpLmNvbmNhdCh5KHRbMl0pLCIgIikuY29uY2F0KHkodFszXSksIiAiKS5jb25jYXQoeSh0WzRdKSwiICIpKyIiLmNvbmNhdCh5KHRbNV0pLCIpIil9LGc9Im5vcm1hbCIsYj0ibm9ybWFsIixfPSIjMDAwMDAwIix3PVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0sQT1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLGs9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihVUkwuY3JlYXRlT2JqZWN0VVJMJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJiFyKXJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSx7dHlwZTplfSkpO2Zvcih2YXIgbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGk9ImRhdGE6Ii5jb25jYXQoZSwiO2Jhc2U2NCwiKSxhPTAsbz10Lmxlbmd0aDthPG87YSs9Myl7dmFyIHM9MjU1JnRbYV0sbD0yNTUmdFthKzFdLHU9MjU1JnRbYSsyXTtpKz1uW3M+PjJdK25bKDMmcyk8PDR8bD4+NF0rblthKzE8bz8oMTUmbCk8PDJ8dT4+Njo2NF0rblthKzI8bz82MyZ1OjY0XX1yZXR1cm4gaX0sUz1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSksZT1uZXcgSW50MzJBcnJheSgyNTYpLHI9MDtyPDI1NjtyKyspe2Zvcih2YXIgbj1yLGk9MDtpPDg7aSsrKW49MSZuPzM5ODgyOTIzODRebj4+MSYyMTQ3NDgzNjQ3Om4+PjEmMjE0NzQ4MzY0NztlW3JdPW59ZnVuY3Rpb24gcyh0LHIsbixpKXt2YXIgYT1pLG89ci5sZW5ndGg7blthXT1vPj4yNCYyNTUsblthKzFdPW8+PjE2JjI1NSxuW2ErMl09bz4+OCYyNTUsblthKzNdPTI1NSZvLG5bYSs9NF09MjU1JnQuY2hhckNvZGVBdCgwKSxuW2ErMV09MjU1JnQuY2hhckNvZGVBdCgxKSxuW2ErMl09MjU1JnQuY2hhckNvZGVBdCgyKSxuW2ErM109MjU1JnQuY2hhckNvZGVBdCgzKSxhKz00LG4uc2V0KHIsYSk7dmFyIHM9ZnVuY3Rpb24odCxyLG4pe2Zvcih2YXIgaT0tMSxhPXI7YTxuO2ErKyl7dmFyIG89MjU1JihpXnRbYV0pO2k9aT4+PjheZVtvXX1yZXR1cm4tMV5pfShuLGkrNCxhKz1yLmxlbmd0aCk7blthXT1zPj4yNCYyNTUsblthKzFdPXM+PjE2JjI1NSxuW2ErMl09cz4+OCYyNTUsblthKzNdPTI1NSZzfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgscj02NTUzNSxuPU1hdGguY2VpbChlL3IpLGk9bmV3IFVpbnQ4QXJyYXkoMitlKzUqbis0KSxhPTA7aVthKytdPTEyMCxpW2ErK109MTU2O2Zvcih2YXIgbz0wO2U+cjspaVthKytdPTAsaVthKytdPTI1NSxpW2ErK109MjU1LGlbYSsrXT0wLGlbYSsrXT0wLGkuc2V0KHQuc3ViYXJyYXkobyxvK3IpLGEpLGErPXIsbys9cixlLT1yO2lbYSsrXT0xLGlbYSsrXT0yNTUmZSxpW2ErK109ZT4+OCYyNTUsaVthKytdPTI1NSZ+ZSxpW2ErK109KDY1NTM1Jn5lKT4+OCYyNTUsaS5zZXQodC5zdWJhcnJheShvKSxhKSxhKz10Lmxlbmd0aC1vO3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MSxpPTAsYT0wO2E8cjsrK2EpaT0oaSsobj0obisoMjU1JnRbYV0pKSU2NTUyMSkpJTY1NTIxO3JldHVybiBpPDwxNnxufSh0LDAsdC5sZW5ndGgpO3JldHVybiBpW2ErK109cz4+MjQmMjU1LGlbYSsrXT1zPj4xNiYyNTUsaVthKytdPXM+PjgmMjU1LGlbYSsrXT0yNTUmcyxpfXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe3ZhciB1LGMsaCxmPWUud2lkdGgsZD1lLmhlaWdodCxwPWUuZGF0YTtzd2l0Y2gocil7Y2FzZSBhLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpjPTAsdT0xLGg9Zis3Pj4zO2JyZWFrO2Nhc2UgYS5JbWFnZUtpbmQuUkdCXzI0QlBQOmM9Mix1PTgsaD0zKmY7YnJlYWs7Y2FzZSBhLkltYWdlS2luZC5SR0JBXzMyQlBQOmM9Nix1PTgsaD00KmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0Iil9Zm9yKHZhciB2PW5ldyBVaW50OEFycmF5KCgxK2gpKmQpLHk9MCxtPTAsZz0wO2c8ZDsrK2cpdlt5KytdPTAsdi5zZXQocC5zdWJhcnJheShtLG0raCkseSksbSs9aCx5Kz1oO2lmKHI9PT1hLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCYmaSl7eT0wO2Zvcih2YXIgYj0wO2I8ZDtiKyspe3krKztmb3IodmFyIF89MDtfPGg7XysrKXZbeSsrXV49MjU1fX12YXIgdz1uZXcgVWludDhBcnJheShbZj4+MjQmMjU1LGY+PjE2JjI1NSxmPj44JjI1NSwyNTUmZixkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHUsYywwLDAsMF0pLEE9ZnVuY3Rpb24odCl7aWYoIW8uaXNOb2RlSlMpcmV0dXJuIGwodCk7dHJ5e3ZhciBlO2U9cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKT49OD90OkJ1ZmZlci5mcm9tKHQpO3ZhciByPXJlcXVpcmUoInpsaWIiKS5kZWZsYXRlU3luYyhlLHtsZXZlbDo5fSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBVaW50OEFycmF5P3I6bmV3IFVpbnQ4QXJyYXkocil9Y2F0Y2godCl7KDAsYS53YXJuKSgiTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6ICIrdCl9cmV0dXJuIGwodCl9KHYpLFM9dC5sZW5ndGgrMzYrdy5sZW5ndGgrQS5sZW5ndGgseD1uZXcgVWludDhBcnJheShTKSxFPTA7cmV0dXJuIHguc2V0KHQsRSkscygiSUhEUiIsdyx4LEUrPXQubGVuZ3RoKSxzKCJJREFUQSIsQSx4LEUrPTEyK3cubGVuZ3RoKSxFKz0xMitBLmxlbmd0aCxzKCJJRU5EIixuZXcgVWludDhBcnJheSgwKSx4LEUpLGsoeCwiaW1hZ2UvcG5nIixuKX0oZSx2b2lkIDA9PT1lLmtpbmQ/YS5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6ZS5raW5kLHIsbil9fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLHRoaXMuZm9udFNpemVTY2FsZT0xLHRoaXMuZm9udFdlaWdodD1iLHRoaXMuZm9udFNpemU9MCx0aGlzLnRleHRNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwsdGhpcy50ZXh0TWF0cml4U2NhbGU9MSx0aGlzLng9MCx0aGlzLnk9MCx0aGlzLmxpbmVYPTAsdGhpcy5saW5lWT0wLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wLHRoaXMuZmlsbENvbG9yPV8sdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5maWxsQWxwaGE9MSx0aGlzLnN0cm9rZUFscGhhPTEsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmxpbmVKb2luPSIiLHRoaXMubGluZUNhcD0iIix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLmRhc2hBcnJheT1bXSx0aGlzLmRhc2hQaGFzZT0wLHRoaXMuZGVwZW5kZW5jaWVzPVtdLHRoaXMuYWN0aXZlQ2xpcFVybD1udWxsLHRoaXMuY2xpcEdyb3VwPW51bGwsdGhpcy5tYXNrSWQ9IiJ9cmV0dXJuIGQodCxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fSx7a2V5OiJzZXRDdXJyZW50UG9pbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9fV0pLHR9KCksRT0wLFA9MCxUPTA7ZS5TVkdHcmFwaGljcz12PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Zm9yKHZhciBvIGluIHAodGhpcyx0KSwoMCxpLmRlcHJlY2F0ZWQpKCJUaGUgU1ZHIGJhY2stZW5kIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGFuZCAqbWF5KiBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5zdmdGYWN0b3J5PW5ldyBpLkRPTVNWR0ZhY3RvcnksdGhpcy5jdXJyZW50PW5ldyB4LHRoaXMudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHRoaXMudHJhbnNmb3JtU3RhY2s9W10sdGhpcy5leHRyYVN0YWNrPVtdLHRoaXMuY29tbW9uT2Jqcz1lLHRoaXMub2Jqcz1yLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLnBlbmRpbmdFT0ZpbGw9ITEsdGhpcy5lbWJlZEZvbnRzPSExLHRoaXMuZW1iZWRkZWRGb250cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY3NzU3R5bGU9bnVsbCx0aGlzLmZvcmNlRGF0YVNjaGVtYT0hIW4sdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmc9W10sYS5PUFMpdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmdbYS5PUFNbb11dPW99cmV0dXJuIGQodCxbe2tleToiZ2V0T2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zdGFydHNXaXRoKCJnXyIpP3RoaXMuY29tbW9uT2Jqcy5nZXQodCk6dGhpcy5vYmpzLmdldCh0KTplfX0se2tleToic2F2ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy50cmFuc2Zvcm1NYXRyaXgpO3ZhciB0PXRoaXMuY3VycmVudDt0aGlzLmV4dHJhU3RhY2sucHVzaCh0KSx0aGlzLmN1cnJlbnQ9dC5jbG9uZSgpfX0se2tleToicmVzdG9yZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybU1hdHJpeD10aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpLHRoaXMuY3VycmVudD10aGlzLmV4dHJhU3RhY2sucG9wKCksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMudGdycD1udWxsfX0se2tleToiZ3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2F2ZSgpLHRoaXMuZXhlY3V0ZU9wVHJlZSh0KSx0aGlzLnJlc3RvcmUoKX19LHtrZXk6ImxvYWREZXBlbmRlbmNpZXMiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9dC5mbkFycmF5LG49dC5hcmdzQXJyYXksaT0wLG89ci5sZW5ndGg7aTxvO2krKylpZihyW2ldPT09YS5PUFMuZGVwZW5kZW5jeSl7dmFyIHMsbD11KG5baV0pO3RyeXt2YXIgYz1mdW5jdGlvbigpe3ZhciB0PXMudmFsdWUscj10LnN0YXJ0c1dpdGgoImdfIik/ZS5jb21tb25PYmpzOmUub2JqcyxuPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtyLmdldCh0LGUpfSkpO2UuY3VycmVudC5kZXBlbmRlbmNpZXMucHVzaChuKX07Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspYygpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX1yZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcyl9fSx7a2V5OiJ0cmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgcz1bdCxlLHIsbixpLG9dO3RoaXMudHJhbnNmb3JtTWF0cml4PWEuVXRpbC50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgscyksdGhpcy50Z3JwPW51bGx9fSx7a2V5OiJnZXRTVkciLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLnZpZXdwb3J0PWU7dmFyIG49dGhpcy5faW5pdGlhbGl6ZShlKTtyZXR1cm4gdGhpcy5sb2FkRGVwZW5kZW5jaWVzKHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHIudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHIuZXhlY3V0ZU9wVHJlZShyLmNvbnZlcnRPcExpc3QodCkpLG59KSl9fSx7a2V5OiJjb252ZXJ0T3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fb3BlcmF0b3JJZE1hcHBpbmcscj10LmFyZ3NBcnJheSxuPXQuZm5BcnJheSxpPVtdLGE9MCxvPW4ubGVuZ3RoO2E8bzthKyspe3ZhciBzPW5bYV07aS5wdXNoKHtmbklkOnMsZm46ZVtzXSxhcmdzOnJbYV19KX1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXSxuPVtdLGk9dSh0KTt0cnl7Zm9yKGkucygpOyEoZT1pLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWU7InNhdmUiIT09YS5mbj8icmVzdG9yZSI9PT1hLmZuP3I9bi5wb3AoKTpyLnB1c2goYSk6KHIucHVzaCh7Zm5JZDo5MixmbjoiZ3JvdXAiLGl0ZW1zOltdfSksbi5wdXNoKHIpLHI9ci5hdCgtMSkuaXRlbXMpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcn0oaSl9fSx7a2V5OiJleGVjdXRlT3BUcmVlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlLGk9bi5mbixvPW4uZm5JZCxzPW4uYXJncztzd2l0Y2goMHxvKXtjYXNlIGEuT1BTLmJlZ2luVGV4dDp0aGlzLmJlZ2luVGV4dCgpO2JyZWFrO2Nhc2UgYS5PUFMuZGVwZW5kZW5jeTpicmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6dGhpcy5zZXRMZWFkaW5nKHMpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGVhZGluZ01vdmVUZXh0OnRoaXMuc2V0TGVhZGluZ01vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGb250OnRoaXMuc2V0Rm9udChzKTticmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmNhc2UgYS5PUFMuc2hvd1NwYWNlZFRleHQ6dGhpcy5zaG93VGV4dChzWzBdKTticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6dGhpcy5lbmRUZXh0KCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDp0aGlzLm1vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRDaGFyU3BhY2luZzp0aGlzLnNldENoYXJTcGFjaW5nKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6dGhpcy5zZXRXb3JkU3BhY2luZyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEhTY2FsZTp0aGlzLnNldEhTY2FsZShzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRNYXRyaXg6dGhpcy5zZXRUZXh0TWF0cml4KHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRSaXNlOnRoaXMuc2V0VGV4dFJpc2Uoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTp0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZVdpZHRoOnRoaXMuc2V0TGluZVdpZHRoKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZUpvaW46dGhpcy5zZXRMaW5lSm9pbihzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldExpbmVDYXA6dGhpcy5zZXRMaW5lQ2FwKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TWl0ZXJMaW1pdDp0aGlzLnNldE1pdGVyTGltaXQoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsUkdCQ29sb3I6dGhpcy5zZXRGaWxsUkdCQ29sb3Ioc1swXSxzWzFdLHNbMl0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6dGhpcy5zZXRTdHJva2VSR0JDb2xvcihzWzBdLHNbMV0sc1syXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvck46dGhpcy5zZXRTdHJva2VDb2xvck4ocyk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOnRoaXMuc2V0RmlsbENvbG9yTihzKTticmVhaztjYXNlIGEuT1BTLnNoYWRpbmdGaWxsOnRoaXMuc2hhZGluZ0ZpbGwoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXREYXNoOnRoaXMuc2V0RGFzaChzWzBdLHNbMV0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50OnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0RmxhdG5lc3M6dGhpcy5zZXRGbGF0bmVzcyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEdTdGF0ZTp0aGlzLnNldEdTdGF0ZShzWzBdKTticmVhaztjYXNlIGEuT1BTLmZpbGw6dGhpcy5maWxsKCk7YnJlYWs7Y2FzZSBhLk9QUy5lb0ZpbGw6dGhpcy5lb0ZpbGwoKTticmVhaztjYXNlIGEuT1BTLnN0cm9rZTp0aGlzLnN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuZmlsbFN0cm9rZTp0aGlzLmZpbGxTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmVvRmlsbFN0cm9rZTp0aGlzLmVvRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xpcDp0aGlzLmNsaXAoIm5vbnplcm8iKTticmVhaztjYXNlIGEuT1BTLmVvQ2xpcDp0aGlzLmNsaXAoImV2ZW5vZGQiKTticmVhaztjYXNlIGEuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazp0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO2JyZWFrO2Nhc2UgYS5PUFMucGFpbnRJbWFnZVhPYmplY3Q6dGhpcy5wYWludEltYWdlWE9iamVjdChzWzBdKTticmVhaztjYXNlIGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OnRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6dGhpcy5wYWludEltYWdlTWFza1hPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW46dGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oc1swXSxzWzFdKTticmVhaztjYXNlIGEuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQ6dGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7YnJlYWs7Y2FzZSBhLk9QUy5jbG9zZVBhdGg6dGhpcy5jbG9zZVBhdGgoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlU3Ryb2tlOnRoaXMuY2xvc2VTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlRmlsbFN0cm9rZTp0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VFT0ZpbGxTdHJva2U6dGhpcy5jbG9zZUVPRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmU6dGhpcy5uZXh0TGluZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMudHJhbnNmb3JtKHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLmNvbnN0cnVjdFBhdGg6dGhpcy5jb25zdHJ1Y3RQYXRoKHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5lbmRQYXRoOnRoaXMuZW5kUGF0aCgpO2JyZWFrO2Nhc2UgOTI6dGhpcy5ncm91cChuLml0ZW1zKTticmVhaztkZWZhdWx0OigwLGEud2FybikoIlVuaW1wbGVtZW50ZWQgb3BlcmF0b3IgIi5jb25jYXQoaSkpfX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX0se2tleToic2V0V29yZFNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC53b3JkU3BhY2luZz10fX0se2tleToic2V0Q2hhclNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5jaGFyU3BhY2luZz10fX0se2tleToibmV4dExpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5tb3ZlVGV4dCgwLHRoaXMuY3VycmVudC5sZWFkaW5nKX19LHtrZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmN1cnJlbnQ7by50ZXh0TWF0cml4PW8ubGluZU1hdHJpeD1bdCxlLHIsbixpLGFdLG8udGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSxvLng9by5saW5lWD0wLG8ueT1vLmxpbmVZPTAsby54Y29vcmRzPVtdLG8ueWNvb3Jkcz1bXSxvLnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSxvLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtZmFtaWx5IixvLmZvbnRGYW1pbHkpLG8udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zaXplIiwiIi5jb25jYXQoeShvLmZvbnRTaXplKSwicHgiKSksby50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1vLnkpKSxvLnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0Iiksby50eHRFbGVtZW50LmFwcGVuZChvLnRzcGFuKX19LHtrZXk6ImJlZ2luVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC54PXQubGluZVg9MCx0Lnk9dC5saW5lWT0wLHQudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWCx0LmxpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdC50ZXh0TWF0cml4U2NhbGU9MSx0LnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSx0LnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0IiksdC50eHRncnA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpnIiksdC54Y29vcmRzPVtdLHQueWNvb3Jkcz1bXX19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY3VycmVudDtyLng9ci5saW5lWCs9dCxyLnk9ci5saW5lWSs9ZSxyLnhjb29yZHM9W10sci55Y29vcmRzPVtdLHIudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHIudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLHIuZm9udEZhbWlseSksci50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLCIiLmNvbmNhdCh5KHIuZm9udFNpemUpLCJweCIpKSxyLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLXIueSkpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udCxuPWUuZm9udFNpemU7aWYoMCE9PW4pe3ZhciBpLG89ZS5mb250U2l6ZVNjYWxlLHM9ZS5jaGFyU3BhY2luZyxsPWUud29yZFNwYWNpbmcsYz1lLmZvbnREaXJlY3Rpb24saD1lLnRleHRIU2NhbGUqYyxmPXIudmVydGljYWwsZD1mPzE6LTEscD1yLmRlZmF1bHRWTWV0cmljcyx2PW4qZS5mb250TWF0cml4WzBdLHc9MCxBPXUodCk7dHJ5e2ZvcihBLnMoKTshKGk9QS5uKCkpLmRvbmU7KXt2YXIgaz1pLnZhbHVlO2lmKG51bGwhPT1rKWlmKCJudW1iZXIiIT10eXBlb2Ygayl7dmFyIFM9KGsuaXNTcGFjZT9sOjApK3MseD1rLmZvbnRDaGFyLEU9dm9pZCAwLFA9dm9pZCAwLFQ9ay53aWR0aDtpZihmKXt2YXIgQz12b2lkIDAsTz1rLnZtZXRyaWN8fHA7Qz0tKEM9ay52bWV0cmljP09bMV06LjUqVCkqdjt2YXIgRj1PWzJdKnY7VD1PPy1PWzBdOlQsRT1DL28sUD0odytGKS9vfWVsc2UgRT13L28sUD0wOyhrLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSYmKGUueGNvb3Jkcy5wdXNoKGUueCtFKSxmJiZlLnljb29yZHMucHVzaCgtZS55K1ApLGUudHNwYW4udGV4dENvbnRlbnQrPXgpLHcrPWY/VCp2LVMqYzpUKnYrUypjfWVsc2Ugdys9ZCprKm4vMWUzO2Vsc2Ugdys9YypsfX1jYXRjaCh0KXtBLmUodCl9ZmluYWxseXtBLmYoKX1lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLGUueGNvb3Jkcy5tYXAoeSkuam9pbigiICIpKSxmP2UudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZS55Y29vcmRzLm1hcCh5KS5qb2luKCIgIikpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIseSgtZS55KSksZj9lLnktPXc6ZS54Kz13KmgsZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtc2l6ZSIsIiIuY29uY2F0KHkoZS5mb250U2l6ZSksInB4IikpLGUuZm9udFN0eWxlIT09ZyYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXN0eWxlIixlLmZvbnRTdHlsZSksZS5mb250V2VpZ2h0IT09YiYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KTt2YXIgTT1lLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztpZihNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMfHxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRT8oZS5maWxsQ29sb3IhPT1fJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLGUuZmlsbENvbG9yKSxlLmZpbGxBbHBoYTwxJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsZS5maWxsQWxwaGEpKTplLnRleHRSZW5kZXJpbmdNb2RlPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSD9lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJ0cmFuc3BhcmVudCIpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0V8fE09PT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKXt2YXIgUj0xLyhlLnRleHRNYXRyaXhTY2FsZXx8MSk7dGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhlLnRzcGFuLFIpfXZhciBJPWUudGV4dE1hdHJpeDswIT09ZS50ZXh0UmlzZSYmKChJPUkuc2xpY2UoKSlbNV0rPWUudGV4dFJpc2UpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCIiLmNvbmNhdChtKEkpLCIgc2NhbGUoIikuY29uY2F0KHkoaCksIiwgLTEpIikpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxlLnR4dEVsZW1lbnQuYXBwZW5kKGUudHNwYW4pLGUudHh0Z3JwLmFwcGVuZChlLnR4dEVsZW1lbnQpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGUudHh0RWxlbWVudCl9fX0se2tleToic2V0TGVhZGluZ01vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2V0TGVhZGluZygtZSksdGhpcy5tb3ZlVGV4dCh0LGUpfX0se2tleToiYWRkRm9udFN0eWxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5kYXRhKXRocm93IG5ldyBFcnJvcignYWRkRm9udFN0eWxlOiBObyBmb250IGRhdGEgYXZhaWxhYmxlLCBlbnN1cmUgdGhhdCB0aGUgImZvbnRFeHRyYVByb3BlcnRpZXMiIEFQSSBwYXJhbWV0ZXIgaXMgc2V0LicpO3RoaXMuY3NzU3R5bGV8fCh0aGlzLmNzc1N0eWxlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6c3R5bGUiKSx0aGlzLmNzc1N0eWxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInR5cGUiLCJ0ZXh0L2NzcyIpLHRoaXMuZGVmcy5hcHBlbmQodGhpcy5jc3NTdHlsZSkpO3ZhciBlPWsodC5kYXRhLHQubWltZXR5cGUsdGhpcy5mb3JjZURhdGFTY2hlbWEpO3RoaXMuY3NzU3R5bGUudGV4dENvbnRlbnQrPSdAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6ICInLmNvbmNhdCh0LmxvYWRlZE5hbWUsJyI7JykrIiBzcmM6IHVybCgiLmNvbmNhdChlLCIpOyB9XG4iKX19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPXRoaXMuY29tbW9uT2Jqcy5nZXQodFswXSksbj10WzFdO2UuZm9udD1yLCF0aGlzLmVtYmVkRm9udHN8fHIubWlzc2luZ0ZpbGV8fHRoaXMuZW1iZWRkZWRGb250c1tyLmxvYWRlZE5hbWVdfHwodGhpcy5hZGRGb250U3R5bGUociksdGhpcy5lbWJlZGRlZEZvbnRzW3IubG9hZGVkTmFtZV09ciksZS5mb250TWF0cml4PXIuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWDt2YXIgaT0ibm9ybWFsIjtyLmJsYWNrP2k9IjkwMCI6ci5ib2xkJiYoaT0iYm9sZCIpO3ZhciBvPXIuaXRhbGljPyJpdGFsaWMiOiJub3JtYWwiO248MD8obj0tbixlLmZvbnREaXJlY3Rpb249LTEpOmUuZm9udERpcmVjdGlvbj0xLGUuZm9udFNpemU9bixlLmZvbnRGYW1pbHk9ci5sb2FkZWROYW1lLGUuZm9udFdlaWdodD1pLGUuZm9udFN0eWxlPW8sZS50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1lLnkpKSxlLnhjb29yZHM9W10sZS55Y29vcmRzPVtdfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuY3VycmVudDtlLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyYmbnVsbCE9PSh0PWUudHh0RWxlbWVudCkmJnZvaWQgMCE9PXQmJnQuaGFzQ2hpbGROb2RlcygpJiYoZS5lbGVtZW50PWUudHh0RWxlbWVudCx0aGlzLmNsaXAoIm5vbnplcm8iKSx0aGlzLmVuZFBhdGgoKSl9fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q+MCYmKHRoaXMuY3VycmVudC5saW5lV2lkdGg9dCl9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGluZUNhcD13W3RdfX0se2tleToic2V0TGluZUpvaW4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5saW5lSm9pbj1BW3RdfX0se2tleToic2V0TWl0ZXJMaW1pdCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldFN0cm9rZUFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9dH19LHtrZXk6InNldFN0cm9rZVJHQkNvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpfX0se2tleToic2V0RmlsbEFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbEFscGhhPXR9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpLHRoaXMuY3VycmVudC50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksdGhpcy5jdXJyZW50Lnhjb29yZHM9W10sdGhpcy5jdXJyZW50Lnljb29yZHM9W119fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5zdHJva2VDb2xvcj10aGlzLl9tYWtlQ29sb3JOX1BhdHRlcm4odCl9fSx7a2V5OiJzZXRGaWxsQ29sb3JOIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPXRoaXMuX21ha2VDb2xvck5fUGF0dGVybih0KX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnZpZXdwb3J0LndpZHRoLHI9dGhpcy52aWV3cG9ydC5oZWlnaHQsbj1hLlV0aWwuaW52ZXJzZVRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCksaT1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0sbiksbz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAscl0sbikscz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2UsMF0sbiksbD1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2Uscl0sbiksdT1NYXRoLm1pbihpWzBdLG9bMF0sc1swXSxsWzBdKSxjPU1hdGgubWluKGlbMV0sb1sxXSxzWzFdLGxbMV0pLGg9TWF0aC5tYXgoaVswXSxvWzBdLHNbMF0sbFswXSksZj1NYXRoLm1heChpWzFdLG9bMV0sc1sxXSxsWzFdKSxkPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2Quc2V0QXR0cmlidXRlTlMobnVsbCwieCIsdSksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixjKSxkLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixoLXUpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixmLWMpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpKSx0aGlzLmN1cnJlbnQuZmlsbEFscGhhPDEmJmQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1vcGFjaXR5Iix0aGlzLmN1cnJlbnQuZmlsbEFscGhhKSx0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChkKX19LHtrZXk6Il9tYWtlQ29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJUaWxpbmdQYXR0ZXJuIj09PXRbMF0/dGhpcy5fbWFrZVRpbGluZ1BhdHRlcm4odCk6dGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpfX0se2tleToiX21ha2VUaWxpbmdQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10WzFdLHI9dFsyXSxuPXRbM118fGEuSURFTlRJVFlfTUFUUklYLGk9bCh0WzRdLDQpLG89aVswXSx1PWlbMV0sYz1pWzJdLGg9aVszXSxmPXRbNV0sZD10WzZdLHA9dFs3XSx2PSJzaGFkaW5nIi5jb25jYXQoVCsrKSx5PWwoYS5VdGlsLm5vcm1hbGl6ZVJlY3QoW10uY29uY2F0KHMoYS5VdGlsLmFwcGx5VHJhbnNmb3JtKFtvLHVdLG4pKSxzKGEuVXRpbC5hcHBseVRyYW5zZm9ybShbYyxoXSxuKSkpKSw0KSxtPXlbMF0sZz15WzFdLGI9eVsyXSxfPXlbM10sdz1sKGEuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShuKSwyKSxBPWYqd1swXSxrPWQqd1sxXSxTPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0dGVybiIpO1Muc2V0QXR0cmlidXRlTlMobnVsbCwiaWQiLHYpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwicGF0dGVyblVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixBKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsayksUy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiIi5jb25jYXQobSkpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIiIuY29uY2F0KGcpKTt2YXIgeD10aGlzLnN2ZyxFPXRoaXMudHJhbnNmb3JtTWF0cml4LFA9dGhpcy5jdXJyZW50LmZpbGxDb2xvcixDPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcixPPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoYi1tLF8tZyk7aWYodGhpcy5zdmc9Tyx0aGlzLnRyYW5zZm9ybU1hdHJpeD1uLDI9PT1wKXt2YXIgRj1hLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGEuVXRpbCxzKGUpKTt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPUYsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUZ9cmV0dXJuIHRoaXMuZXhlY3V0ZU9wVHJlZSh0aGlzLmNvbnZlcnRPcExpc3QocikpLHRoaXMuc3ZnPXgsdGhpcy50cmFuc2Zvcm1NYXRyaXg9RSx0aGlzLmN1cnJlbnQuZmlsbENvbG9yPVAsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUMsUy5hcHBlbmQoTy5jaGlsZE5vZGVzWzBdKSx0aGlzLmRlZnMuYXBwZW5kKFMpLCJ1cmwoIyIuY29uY2F0KHYsIikiKX19LHtrZXk6Il9tYWtlU2hhZGluZ1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIHQmJih0PXRoaXMub2Jqcy5nZXQodCkpLHRbMF0pe2Nhc2UiUmFkaWFsQXhpYWwiOnZhciBlLHI9InNoYWRpbmciLmNvbmNhdChUKyspLG49dFszXTtzd2l0Y2godFsxXSl7Y2FzZSJheGlhbCI6dmFyIGk9dFs0XSxvPXRbNV07KGU9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpsaW5lYXJHcmFkaWVudCIpKS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsciksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJncmFkaWVudFVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngxIixpWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkxIixpWzFdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngyIixvWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkyIixvWzFdKTticmVhaztjYXNlInJhZGlhbCI6dmFyIHM9dFs0XSxsPXRbNV0sYz10WzZdLGg9dFs3XTsoZT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJhZGlhbEdyYWRpZW50IikpLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixyKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLGxbMF0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLGxbMV0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsaCksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeCIsc1swXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeSIsc1sxXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmciIsYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gUmFkaWFsQXhpYWwgdHlwZTogIi5jb25jYXQodFsxXSkpfXZhciBmLGQ9dShuKTt0cnl7Zm9yKGQucygpOyEoZj1kLm4oKSkuZG9uZTspe3ZhciBwPWYudmFsdWUsdj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnN0b3AiKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsIm9mZnNldCIscFswXSksdi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdG9wLWNvbG9yIixwWzFdKSxlLmFwcGVuZCh2KX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9cmV0dXJuIHRoaXMuZGVmcy5hcHBlbmQoZSksInVybCgjIi5jb25jYXQociwiKSIpO2Nhc2UiTWVzaCI6cmV0dXJuKDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBwYXR0ZXJuIE1lc2giKSxudWxsO2Nhc2UiRHVtbXkiOnJldHVybiJob3RwaW5rIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBJUiB0eXBlOiAiLmNvbmNhdCh0WzBdKSl9fX0se2tleToic2V0RGFzaCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLmN1cnJlbnQuZGFzaEFycmF5PXQsdGhpcy5jdXJyZW50LmRhc2hQaGFzZT1lfX0se2tleToiY29uc3RydWN0UGF0aCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuY3VycmVudCxpPW4ueCxvPW4ueSxzPVtdLGw9MCxjPXUodCk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXN3aXRjaCgwfHIudmFsdWUpe2Nhc2UgYS5PUFMucmVjdGFuZ2xlOmk9ZVtsKytdLG89ZVtsKytdO3ZhciBoPWVbbCsrXSxmPWVbbCsrXSxkPWkraCxwPW8rZjtzLnB1c2goIk0iLHkoaSkseShvKSwiTCIseShkKSx5KG8pLCJMIix5KGQpLHkocCksIkwiLHkoaSkseShwKSwiWiIpO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmk9ZVtsKytdLG89ZVtsKytdLHMucHVzaCgiTSIseShpKSx5KG8pKTticmVhaztjYXNlIGEuT1BTLmxpbmVUbzppPWVbbCsrXSxvPWVbbCsrXSxzLnB1c2goIkwiLHkoaSkseShvKSk7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvOmk9ZVtsKzRdLG89ZVtsKzVdLHMucHVzaCgiQyIseShlW2xdKSx5KGVbbCsxXSkseShlW2wrMl0pLHkoZVtsKzNdKSx5KGkpLHkobykpLGwrPTY7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvMjpzLnB1c2goIkMiLHkoaSkseShvKSx5KGVbbF0pLHkoZVtsKzFdKSx5KGVbbCsyXSkseShlW2wrM10pKSxpPWVbbCsyXSxvPWVbbCszXSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY3VydmVUbzM6aT1lW2wrMl0sbz1lW2wrM10scy5wdXNoKCJDIix5KGVbbF0pLHkoZVtsKzFdKSx5KGkpLHkobykseShpKSx5KG8pKSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VQYXRoOnMucHVzaCgiWiIpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX1zPXMuam9pbigiICIpLG4ucGF0aCYmdC5sZW5ndGg+MCYmdFswXSE9PWEuT1BTLnJlY3RhbmdsZSYmdFswXSE9PWEuT1BTLm1vdmVUbz9zPW4ucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIikrczoobi5wYXRoPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0aCIpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKG4ucGF0aCkpLG4ucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIixzKSxuLnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxuLmVsZW1lbnQ9bi5wYXRoLG4uc2V0Q3VycmVudFBvaW50KGksbyl9fSx7a2V5OiJlbmRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VycmVudDtpZih0LnBhdGg9bnVsbCx0aGlzLnBlbmRpbmdDbGlwKWlmKHQuZWxlbWVudCl7dmFyIGU9ImNsaXBwYXRoIi5jb25jYXQoRSsrKSxyPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6Y2xpcFBhdGgiKTtyLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixlKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO3ZhciBuPXQuZWxlbWVudC5jbG9uZU5vZGUoITApO2lmKCJldmVub2RkIj09PXRoaXMucGVuZGluZ0NsaXA/bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJldmVub2RkIik6bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJub256ZXJvIiksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHIuYXBwZW5kKG4pLHRoaXMuZGVmcy5hcHBlbmQociksdC5hY3RpdmVDbGlwVXJsKXt0LmNsaXBHcm91cD1udWxsO3ZhciBpLGE9dSh0aGlzLmV4dHJhU3RhY2spO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOylpLnZhbHVlLmNsaXBHcm91cD1udWxsfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXIuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIix0LmFjdGl2ZUNsaXBVcmwpfXQuYWN0aXZlQ2xpcFVybD0idXJsKCMiLmNvbmNhdChlLCIpIiksdGhpcy50Z3JwPW51bGx9ZWxzZSB0aGlzLnBlbmRpbmdDbGlwPW51bGx9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnBlbmRpbmdDbGlwPXR9fSx7a2V5OiJjbG9zZVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O2lmKHQucGF0aCl7dmFyIGU9IiIuY29uY2F0KHQucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiksIloiKTt0LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsZSl9fX0se2tleToic2V0TGVhZGluZyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LmxlYWRpbmc9LXR9fSx7a2V5OiJzZXRUZXh0UmlzZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSaXNlPXR9fSx7a2V5OiJzZXRUZXh0UmVuZGVyaW5nTW9kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlPXR9fSx7a2V5OiJzZXRIU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPXQvMTAwfX0se2tleToic2V0UmVuZGVyaW5nSW50ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt9fSx7a2V5OiJzZXRGbGF0bmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1sKGUudmFsdWUsMiksaT1uWzBdLG89blsxXTtzd2l0Y2goaSl7Y2FzZSJMVyI6dGhpcy5zZXRMaW5lV2lkdGgobyk7YnJlYWs7Y2FzZSJMQyI6dGhpcy5zZXRMaW5lQ2FwKG8pO2JyZWFrO2Nhc2UiTEoiOnRoaXMuc2V0TGluZUpvaW4obyk7YnJlYWs7Y2FzZSJNTCI6dGhpcy5zZXRNaXRlckxpbWl0KG8pO2JyZWFrO2Nhc2UiRCI6dGhpcy5zZXREYXNoKG9bMF0sb1sxXSk7YnJlYWs7Y2FzZSJSSSI6dGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQobyk7YnJlYWs7Y2FzZSJGTCI6dGhpcy5zZXRGbGF0bmVzcyhvKTticmVhaztjYXNlIkZvbnQiOnRoaXMuc2V0Rm9udChvKTticmVhaztjYXNlIkNBIjp0aGlzLnNldFN0cm9rZUFscGhhKG8pO2JyZWFrO2Nhc2UiY2EiOnRoaXMuc2V0RmlsbEFscGhhKG8pO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIuY29uY2F0KGkpKX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX19LHtrZXk6ImZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O3QuZWxlbWVudCYmKHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIix0LmZpbGxDb2xvciksdC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsdC5maWxsQWxwaGEpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6InN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC5lbGVtZW50JiYodGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyh0LmVsZW1lbnQpLHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6Il9zZXRTdHJva2VBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPXRoaXMuY3VycmVudCxuPXIuZGFzaEFycmF5OzEhPT1lJiZuLmxlbmd0aD4wJiYobj1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUqdH0pKSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UiLHIuc3Ryb2tlQ29sb3IpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW9wYWNpdHkiLHIuc3Ryb2tlQWxwaGEpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW1pdGVybGltaXQiLHkoci5taXRlckxpbWl0KSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtbGluZWNhcCIsci5saW5lQ2FwKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1saW5lam9pbiIsci5saW5lSm9pbiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLHkoZSpyLmxpbmVXaWR0aCkrInB4IiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtZGFzaGFycmF5IixuLm1hcCh5KS5qb2luKCIgIikpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLWRhc2hvZmZzZXQiLHkoZSpyLmRhc2hQaGFzZSkrInB4Iil9fSx7a2V5OiJlb0ZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3Ryb2tlKCksdGhpcy5maWxsKCl9fSx7a2V5OiJlb0ZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5lb0ZpbGxTdHJva2UoKX19LHtrZXk6InBhaW50U29saWRDb2xvckltYWdlTWFzayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJlY3QiKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLCIwIiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IiwiMCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIxcHgiKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsIjFweCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5jdXJyZW50LmZpbGxDb2xvciksdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmQodCl9fSx7a2V5OiJwYWludEltYWdlWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodCk7ZT90aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGUpOigwLGEud2FybikoIkRlcGVuZGVudCBpbWFnZSB3aXRoIG9iamVjdCBJRCAiLmNvbmNhdCh0LCIgaXMgbm90IHJlYWR5IHlldCIpKX19LHtrZXk6InBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPVModCx0aGlzLmZvcmNlRGF0YVNjaGVtYSwhIWUpLGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIseShuKSksdGhpcy5jdXJyZW50LmVsZW1lbnQ9YSx0aGlzLmNsaXAoIm5vbnplcm8iKTt2YXIgbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmltYWdlIik7by5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmhyZWYiLGkpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLW4pKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwic2NhbGUoIi5jb25jYXQoeSgxL3IpLCIgIikuY29uY2F0KHkoLTEvbiksIikiKSksZT9lLmFwcGVuZChvKTp0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChvKX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodC5kYXRhLHQpO2lmKGUuYml0bWFwKSgwLGEud2FybikoInBhaW50SW1hZ2VNYXNrWE9iamVjdDogSW1hZ2VCaXRtYXAgc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQsIGVuc3VyZSB0aGF0IHRoZSBgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWRgIEFQSSBwYXJhbWV0ZXIgaXMgZGlzYWJsZWQuIik7ZWxzZXt2YXIgcj10aGlzLmN1cnJlbnQsbj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1yLmZpbGxDb2xvcjtyLm1hc2tJZD0ibWFzayIuY29uY2F0KFArKyk7dmFyIHM9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzptYXNrIik7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsci5tYXNrSWQpO3ZhciBsPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2wuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxsLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLCIwIiksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIseShuKSksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLHkoaSkpLGwuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsbyksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJtYXNrIiwidXJsKCMiLmNvbmNhdChyLm1hc2tJZCwiKSIpKSx0aGlzLmRlZnMuYXBwZW5kKHMpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGwpLHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSxzKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSYmNj09PXQubGVuZ3RoJiZ0aGlzLnRyYW5zZm9ybSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSksZSl7dmFyIHI9ZVsyXS1lWzBdLG49ZVszXS1lWzFdLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixlWzBdKSxpLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLGVbMV0pLGkuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLHkocikpLGkuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKSx0aGlzLmN1cnJlbnQuZWxlbWVudD1pLHRoaXMuY2xpcCgibm9uemVybyIpLHRoaXMuZW5kUGF0aCgpfX19LHtrZXk6InBhaW50Rm9ybVhPYmplY3RFbmQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodC53aWR0aCx0LmhlaWdodCkscj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmRlZnMiKTtlLmFwcGVuZChyKSx0aGlzLmRlZnM9cjt2YXIgbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLG0odC50cmFuc2Zvcm0pKSxlLmFwcGVuZChuKSx0aGlzLnN2Zz1uLGV9fSx7a2V5OiJfZW5zdXJlQ2xpcEdyb3VwIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsImNsaXAtcGF0aCIsdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmwpLHRoaXMuc3ZnLmFwcGVuZCh0KSx0aGlzLmN1cnJlbnQuY2xpcEdyb3VwPXR9cmV0dXJuIHRoaXMuY3VycmVudC5jbGlwR3JvdXB9fSx7a2V5OiJfZW5zdXJlVHJhbnNmb3JtR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGdycHx8KHRoaXMudGdycD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKSx0aGlzLnRncnAuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIixtKHRoaXMudHJhbnNmb3JtTWF0cml4KSksdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmw/dGhpcy5fZW5zdXJlQ2xpcEdyb3VwKCkuYXBwZW5kKHRoaXMudGdycCk6dGhpcy5zdmcuYXBwZW5kKHRoaXMudGdycCkpLHRoaXMudGdycH19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERk5vZGVTdHJlYW09dm9pZCAwO3ZhciBuPXIoMSksaT1yKDE2Mik7ZnVuY3Rpb24gYSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZvKHQsZSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbyh0LGUpfWZ1bmN0aW9uIHModCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49bCh0KTtpZihlKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PWYoZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGwodCl9ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxhPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtsKHt9LCIiKX1jYXRjaCh0KXtsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGgodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9Yzt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtsKG0sYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsYSkmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2wodCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8scyl7dmFyIGw9aCh0W25dLHQsYSk7aWYoInRocm93IiE9PWwudHlwZSl7dmFyIHU9bC5hcmcsYz11LnZhbHVlO3JldHVybiBjJiYib2JqZWN0Ij09ZihjKSYmci5jYWxsKGMsIl9fYXdhaXQiKT9lLnJlc29sdmUoYy5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8scyl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxzKX0pKTplLnJlc29sdmUoYykudGhlbigoZnVuY3Rpb24odCl7dS52YWx1ZT10LG8odSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8scyl9KSl9cyhsLmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWgodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1oKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W2FdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWwoeSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksbCh0LHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksbChBLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShjKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksbChfLHMsIkdlbmVyYXRvciIpLGwoXyxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIGYodCl7cmV0dXJuIGY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGYodCl9ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWYodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09ZihpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIG09cmVxdWlyZSgiZnMiKSxnPXJlcXVpcmUoImh0dHAiKSxiPXJlcXVpcmUoImh0dHBzIiksXz1yZXF1aXJlKCJ1cmwiKSx3PS9eZmlsZTpcL1wvXC9bYS16QS1aXTpcLy8sQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbjtwKHRoaXMsdCksdGhpcy5zb3VyY2U9ZSx0aGlzLnVybD0ocj1lLnVybCwiZmlsZToiPT09KG49Xy5wYXJzZShyKSkucHJvdG9jb2x8fG4uaG9zdD9uOi9eW2Etel06Wy9cXF0vaS50ZXN0KHIpP18ucGFyc2UoImZpbGU6Ly8vIi5jb25jYXQocikpOihuLmhvc3R8fChuLnByb3RvY29sPSJmaWxlOiIpLG4pKSx0aGlzLmlzSHR0cD0iaHR0cDoiPT09dGhpcy51cmwucHJvdG9jb2x8fCJodHRwczoiPT09dGhpcy51cmwucHJvdG9jb2wsdGhpcy5pc0ZzVXJsPSJmaWxlOiI9PT10aGlzLnVybC5wcm90b2NvbCx0aGlzLmh0dHBIZWFkZXJzPXRoaXMuaXNIdHRwJiZlLmh0dHBIZWFkZXJzfHx7fSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIHkodCxbe2tleToiX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9PSh0PW51bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWU/dm9pZCAwOmUuX2xvYWRlZCkmJnZvaWQgMCE9PXQ/dDowfX0se2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZOb2RlU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9dGhpcy5pc0ZzVXJsP25ldyBUKHRoaXMpOm5ldyBFKHRoaXMpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfX0se2tleToiZ2V0UmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoZTw9dGhpcy5fcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybiBudWxsO3ZhciByPXRoaXMuaXNGc1VybD9uZXcgQyh0aGlzLHQsZSk6bmV3IFAodGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZOb2RlU3RyZWFtPUE7dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3AodGhpcyx0KSx0aGlzLl91cmw9ZS51cmwsdGhpcy5fZG9uZT0hMSx0aGlzLl9zdG9yZWRFcnJvcj1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsO3ZhciByPWUuc291cmNlO3RoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fbG9hZGVkPTAsdGhpcy5fZmlsZW5hbWU9bnVsbCx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX3JhbmdlQ2h1bmtTaXplPXIucmFuZ2VDaHVua1NpemUsdGhpcy5fcmFuZ2VDaHVua1NpemV8fHRoaXMuX2Rpc2FibGVSYW5nZXx8KHRoaXMuX2Rpc2FibGVSYW5nZT0hMCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSFyLmRpc2FibGVSYW5nZSx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faGVhZGVyc0NhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSksaT1uZXcgVWludDhBcnJheShyKS5idWZmZXIsdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmksZG9uZTohMX0pO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRhYmxlU3RyZWFtP3RoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodCk6dGhpcy5fZXJyb3IodCl9fSx7a2V5OiJfZXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPXQsdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX3NldFJlYWRhYmxlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3JlYWRhYmxlU3RyZWFtPXQsdC5vbigicmVhZGFibGUiLChmdW5jdGlvbigpe2UuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlbmQiLChmdW5jdGlvbigpe3QuZGVzdHJveSgpLGUuX2RvbmU9ITAsZS5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfSkpLHQub24oImVycm9yIiwoZnVuY3Rpb24odCl7ZS5fZXJyb3IodCl9KSksIXRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZ0aGlzLl9lcnJvcihuZXcgbi5BYm9ydEV4Y2VwdGlvbigic3RyZWFtaW5nIGlzIGRpc2FibGVkIikpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtwKHRoaXMsdCksdGhpcy5fdXJsPWUudXJsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9bnVsbCx0aGlzLm9uUHJvZ3Jlc3M9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dmFyIHI9ZS5zb3VyY2U7dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLGk9bmV3IFVpbnQ4QXJyYXkocikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTppLGRvbmU6ITF9KTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9yZWFkYWJsZVN0cmVhbT90aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHQpOnRoaXMuX2Vycm9yKHQpfX0se2tleToiX2Vycm9yIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9zdG9yZWRFcnJvcj10LHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6Il9zZXRSZWFkYWJsZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkYWJsZVN0cmVhbT10LHQub24oInJlYWRhYmxlIiwoZnVuY3Rpb24oKXtlLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCl9KSksdC5vbigiZW5kIiwoZnVuY3Rpb24oKXt0LmRlc3Ryb3koKSxlLl9kb25lPSEwLGUuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe2UuX2Vycm9yKHQpfSkpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKTtmdW5jdGlvbiB4KHQsZSl7cmV0dXJue3Byb3RvY29sOnQucHJvdG9jb2wsYXV0aDp0LmF1dGgsaG9zdDp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGg6dC5wYXRoLG1ldGhvZDoiR0VUIixoZWFkZXJzOmV9fXZhciBFPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGE7cCh0aGlzLHIpO3ZhciBvPWZ1bmN0aW9uKGUpe2lmKDQwND09PWUuc3RhdHVzQ29kZSl7dmFyIHI9bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicuY29uY2F0KGEuX3VybCwnIi4nKSk7cmV0dXJuIGEuX3N0b3JlZEVycm9yPXIsdm9pZCBhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3Qocil9YS5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpLGEuX3NldFJlYWRhYmxlU3RyZWFtKGUpO3ZhciBvPWZ1bmN0aW9uKHQpe3JldHVybiBhLl9yZWFkYWJsZVN0cmVhbS5oZWFkZXJzW3QudG9Mb3dlckNhc2UoKV19LHM9KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOm8saXNIdHRwOnQuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOmEuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTphLl9kaXNhYmxlUmFuZ2V9KSxsPXMuYWxsb3dSYW5nZVJlcXVlc3RzLHU9cy5zdWdnZXN0ZWRMZW5ndGg7YS5faXNSYW5nZVN1cHBvcnRlZD1sLGEuX2NvbnRlbnRMZW5ndGg9dXx8YS5fY29udGVudExlbmd0aCxhLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKG8pfTtyZXR1cm4oYT1lLmNhbGwodGhpcyx0KSkuX3JlcXVlc3Q9bnVsbCwiaHR0cDoiPT09YS5fdXJsLnByb3RvY29sP2EuX3JlcXVlc3Q9Zy5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pOmEuX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pLGEuX3JlcXVlc3Qub24oImVycm9yIiwoZnVuY3Rpb24odCl7YS5fc3RvcmVkRXJyb3I9dCxhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QodCl9KSksYS5fcmVxdWVzdC5lbmQoKSxhfXJldHVybiB5KHIpfShrKSxQPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxpLGEpe3ZhciBvO2Zvcih2YXIgcyBpbiBwKHRoaXMsciksKG89ZS5jYWxsKHRoaXMsdCkpLl9odHRwSGVhZGVycz17fSx0Lmh0dHBIZWFkZXJzKXt2YXIgbD10Lmh0dHBIZWFkZXJzW3NdO3ZvaWQgMCE9PWwmJihvLl9odHRwSGVhZGVyc1tzXT1sKX1vLl9odHRwSGVhZGVycy5SYW5nZT0iYnl0ZXM9Ii5jb25jYXQoaSwiLSIpLmNvbmNhdChhLTEpO3ZhciB1PWZ1bmN0aW9uKHQpe2lmKDQwNCE9PXQuc3RhdHVzQ29kZSlvLl9zZXRSZWFkYWJsZVN0cmVhbSh0KTtlbHNle3ZhciBlPW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChvLl91cmwsJyIuJykpO28uX3N0b3JlZEVycm9yPWV9fTtyZXR1cm4gby5fcmVxdWVzdD1udWxsLCJodHRwOiI9PT1vLl91cmwucHJvdG9jb2w/by5fcmVxdWVzdD1nLnJlcXVlc3QoeChvLl91cmwsby5faHR0cEhlYWRlcnMpLHUpOm8uX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoby5fdXJsLG8uX2h0dHBIZWFkZXJzKSx1KSxvLl9yZXF1ZXN0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe28uX3N0b3JlZEVycm9yPXR9KSksby5fcmVxdWVzdC5lbmQoKSxvfXJldHVybiB5KHIpfShTKSxUPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGk7cCh0aGlzLHIpLGk9ZS5jYWxsKHRoaXMsdCk7dmFyIGE9ZGVjb2RlVVJJQ29tcG9uZW50KGkuX3VybC5wYXRoKTtyZXR1cm4gdy50ZXN0KGkuX3VybC5ocmVmKSYmKGE9YS5yZXBsYWNlKC9eXC8vLCIiKSksbS5sc3RhdChhLChmdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIkVOT0VOVCI9PT10LmNvZGUmJih0PW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChhLCciLicpKSksaS5fc3RvcmVkRXJyb3I9dCx2b2lkIGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCh0KTtpLl9jb250ZW50TGVuZ3RoPWUuc2l6ZSxpLl9zZXRSZWFkYWJsZVN0cmVhbShtLmNyZWF0ZVJlYWRTdHJlYW0oYSkpLGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxpfXJldHVybiB5KHIpfShrKSxDPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxuLGkpe3ZhciBhO3AodGhpcyxyKSxhPWUuY2FsbCh0aGlzLHQpO3ZhciBvPWRlY29kZVVSSUNvbXBvbmVudChhLl91cmwucGF0aCk7cmV0dXJuIHcudGVzdChhLl91cmwuaHJlZikmJihvPW8ucmVwbGFjZSgvXlwvLywiIikpLGEuX3NldFJlYWRhYmxlU3RyZWFtKG0uY3JlYXRlUmVhZFN0cmVhbShvLHtzdGFydDpuLGVuZDppLTF9KSksYX1yZXR1cm4geShyKX0oUyl9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQwND09PXR8fDA9PT10JiZlLnN0YXJ0c1dpdGgoImZpbGU6Iik/bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicrZSsnIi4nKTpuZXcgbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgiLmNvbmNhdCh0LCcpIHdoaWxlIHJldHJpZXZpbmcgUERGICInKS5jb25jYXQoZSwnIi4nKSx0KX0sZS5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQoIkNvbnRlbnQtRGlzcG9zaXRpb24iKTtpZihlKXt2YXIgcj0oMCxpLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcikoZSk7aWYoci5pbmNsdWRlcygiJSIpKXRyeXtyPWRlY29kZVVSSUNvbXBvbmVudChyKX1jYXRjaCh0KXt9aWYoKDAsYS5pc1BkZkZpbGUpKHIpKXJldHVybiByfXJldHVybiBudWxsfSxlLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0UmVzcG9uc2VIZWFkZXIscj10LmlzSHR0cCxuPXQucmFuZ2VDaHVua1NpemUsaT10LmRpc2FibGVSYW5nZSxhPXthbGxvd1JhbmdlUmVxdWVzdHM6ITEsc3VnZ2VzdGVkTGVuZ3RoOnZvaWQgMH0sbz1wYXJzZUludChlKCJDb250ZW50LUxlbmd0aCIpLDEwKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihvKT8oYS5zdWdnZXN0ZWRMZW5ndGg9byxvPD0yKm58fGl8fCFyfHwiYnl0ZXMiIT09ZSgiQWNjZXB0LVJhbmdlcyIpfHwiaWRlbnRpdHkiIT09KGUoIkNvbnRlbnQtRW5jb2RpbmciKXx8ImlkZW50aXR5Iil8fChhLmFsbG93UmFuZ2VSZXF1ZXN0cz0hMCksYSk6YX0sZS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzPWZ1bmN0aW9uKHQpe3JldHVybiAyMDA9PT10fHwyMDY9PT10fTt2YXIgbj1yKDEpLGk9cigxNjMpLGE9cigxMzcpfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPSEwLHI9cygiZmlsZW5hbWVcXCoiLCJpIikuZXhlYyh0KTtpZihyKXt2YXIgYT1jKHI9clsxXSk7cmV0dXJuIHUoYT1mKGE9aChhPXVuZXNjYXBlKGEpKSkpfWlmKHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbj1zKCJmaWxlbmFtZVxcKigoPyEwXFxkKVxcZCspKFxcKj8pIiwiaWciKTtudWxsIT09KGU9bi5leGVjKHQpKTspe3ZhciBhPWkoZSw0KSxvPWFbMV0sbD1hWzJdLHU9YVszXTtpZigobz1wYXJzZUludChvLDEwKSlpbiByKXtpZigwPT09bylicmVha31lbHNlIHJbb109W2wsdV19Zm9yKHZhciBmPVtdLGQ9MDtkPHIubGVuZ3RoJiZkIGluIHI7KytkKXt2YXIgcD1pKHJbZF0sMiksdj1wWzBdLHk9cFsxXTt5PWMoeSksdiYmKHk9dW5lc2NhcGUoeSksMD09PWQmJih5PWgoeSkpKSxmLnB1c2goeSl9cmV0dXJuIGYuam9pbigiIil9KHQpKXJldHVybiB1KGYocikpO2lmKHI9cygiZmlsZW5hbWUiLCJpIikuZXhlYyh0KSl7dmFyIG89YyhyPXJbMV0pO3JldHVybiB1KG89ZihvKSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefDspXFxzKiIrdCsnXFxzKj1cXHMqKFteIjtcXHNdW147XFxzXSp8Iig/OlteIlxcXFxdfFxcXFwiPykrIj8pJyxlKX1mdW5jdGlvbiBsKHQscil7aWYodCl7aWYoIS9eW1x4MDAtXHhGRl0rJC8udGVzdChyKSlyZXR1cm4gcjt0cnl7dmFyIGk9bmV3IFRleHREZWNvZGVyKHQse2ZhdGFsOiEwfSksYT0oMCxuLnN0cmluZ1RvQnl0ZXMpKHIpO3I9aS5kZWNvZGUoYSksZT0hMX1jYXRjaCh0KXt9fXJldHVybiByfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGUmJi9bXHg4MC1ceGZmXS8udGVzdCh0KSYmKHQ9bCgidXRmLTgiLHQpLGUmJih0PWwoImlzby04ODU5LTEiLHQpKSksdH1mdW5jdGlvbiBjKHQpe2lmKHQuc3RhcnRzV2l0aCgnIicpKXtmb3IodmFyIGU9dC5zbGljZSgxKS5zcGxpdCgnXFwiJykscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLmluZGV4T2YoJyInKTstMSE9PW4mJihlW3JdPWVbcl0uc2xpY2UoMCxuKSxlLmxlbmd0aD1yKzEpLGVbcl09ZVtyXS5yZXBsYWNlKC9cXCguKS9nLCIkMSIpfXQ9ZS5qb2luKCciJyl9cmV0dXJuIHR9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmluZGV4T2YoIiciKTtyZXR1cm4tMT09PWU/dDpsKHQuc2xpY2UoMCxlKSx0LnNsaWNlKGUrMSkucmVwbGFjZSgvXlteJ10qJy8sIiIpKX1mdW5jdGlvbiBmKHQpe3JldHVybiF0LnN0YXJ0c1dpdGgoIj0/Iil8fC9bXHgwMC1ceDE5XHg4MC1ceGZmXS8udGVzdCh0KT90OnQucmVwbGFjZSgvPVw/KFtcdy1dKilcPyhbUXFCYl0pXD8oKD86W14/XXxcPyg/IT0pKSopXD89L2csKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJxIj09PXJ8fCJRIj09PXIpcmV0dXJuIGwoZSxuPShuPW4ucmVwbGFjZSgvXy9nLCIgIikpLnJlcGxhY2UoLz0oWzAtOWEtZkEtRl17Mn0pL2csKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZSwxNikpfSkpKTt0cnl7bj1hdG9iKG4pfWNhdGNoKHQpe31yZXR1cm4gbChlLG4pfSkpfXJldHVybiIifTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGEodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9hKHQsZSk6dm9pZCAwfX0odCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZOZXR3b3JrU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGw9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHUodCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7dSh7fSwiIil9Y2F0Y2godCl7dT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307dShtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXt1KHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciBsPWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT1sLnR5cGUpe3ZhciB1PWwuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe3UudmFsdWU9dCxvKHUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXMobC5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT11KHksbCwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LHUodCxsLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLHUoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLHUoXyxsLCJHZW5lcmF0b3IiKSx1KF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx1KF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCl7cmV0dXJuIGM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGModCl9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09Yyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1jKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2godGhpcyx0KSx0aGlzLnVybD1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZSksdGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmci5odHRwSGVhZGVyc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLndpdGhDcmVkZW50aWFscz1yLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5nZXRYaHI9ci5nZXRYaHJ8fGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdGhpcy5jdXJyWGhySWQ9MCx0aGlzLnBlbmRpbmdSZXF1ZXN0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBkKHQsW3trZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtiZWdpbjp0LGVuZDplfTtmb3IodmFyIGkgaW4gciluW2ldPXJbaV07cmV0dXJuIHRoaXMucmVxdWVzdChuKX19LHtrZXk6InJlcXVlc3RGdWxsIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHQpfX0se2tleToicmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRYaHIoKSxyPXRoaXMuY3VyclhocklkKyssbj10aGlzLnBlbmRpbmdSZXF1ZXN0c1tyXT17eGhyOmV9O2Zvcih2YXIgaSBpbiBlLm9wZW4oIkdFVCIsdGhpcy51cmwsICEwKSxlLndpdGhDcmVkZW50aWFscz10aGlzLndpdGhDcmVkZW50aWFscyx0aGlzLmh0dHBIZWFkZXJzKXt2YXIgYT10aGlzLmh0dHBIZWFkZXJzW2ldO3ZvaWQgMCE9PWEmJmUuc2V0UmVxdWVzdEhlYWRlcihpLGEpfXJldHVybiB0aGlzLmlzSHR0cCYmImJlZ2luImluIHQmJiJlbmQiaW4gdD8oZS5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIuY29uY2F0KHQuYmVnaW4sIi0iKS5jb25jYXQodC5lbmQtMSkpLG4uZXhwZWN0ZWRTdGF0dXM9MjA2KTpuLmV4cGVjdGVkU3RhdHVzPTIwMCxlLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHQub25FcnJvciYmKGUub25lcnJvcj1mdW5jdGlvbihyKXt0Lm9uRXJyb3IoZS5zdGF0dXMpfSksZS5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyxyKSxlLm9ucHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyxyKSxuLm9uSGVhZGVyc1JlY2VpdmVkPXQub25IZWFkZXJzUmVjZWl2ZWQsbi5vbkRvbmU9dC5vbkRvbmUsbi5vbkVycm9yPXQub25FcnJvcixuLm9uUHJvZ3Jlc3M9dC5vblByb2dyZXNzLGUuc2VuZChudWxsKSxyfX0se2tleToib25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMucGVuZGluZ1JlcXVlc3RzW3RdO24mJihudWxsPT09KHI9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09cnx8ci5jYWxsKG4sZSkpfX0se2tleToib25TdGF0ZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XTtpZihyKXt2YXIgaT1yLnhocjtpZihpLnJlYWR5U3RhdGU+PTImJnIub25IZWFkZXJzUmVjZWl2ZWQmJihyLm9uSGVhZGVyc1JlY2VpdmVkKCksZGVsZXRlIHIub25IZWFkZXJzUmVjZWl2ZWQpLDQ9PT1pLnJlYWR5U3RhdGUmJnQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpaWYoZGVsZXRlIHRoaXMucGVuZGluZ1JlcXVlc3RzW3RdLDA9PT1pLnN0YXR1cyYmdGhpcy5pc0h0dHApe3ZhciBhO251bGw9PT0oYT1yLm9uRXJyb3IpfHx2b2lkIDA9PT1hfHxhLmNhbGwocixpLnN0YXR1cyl9ZWxzZXt2YXIgbz1pLnN0YXR1c3x8MjAwO2lmKDIwMD09PW8mJjIwNj09PXIuZXhwZWN0ZWRTdGF0dXN8fG89PT1yLmV4cGVjdGVkU3RhdHVzKXt2YXIgcz1mdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlO3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9lOigwLG4uc3RyaW5nVG9CeXRlcykoZSkuYnVmZmVyfShpKTtpZigyMDY9PT1vKXt2YXIgbD1pLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVJhbmdlIiksdT0vYnl0ZXMgKFxkKyktKFxkKylcLyhcZCspLy5leGVjKGwpO3Iub25Eb25lKHtiZWdpbjpwYXJzZUludCh1WzFdLDEwKSxjaHVuazpzfSl9ZWxzZSBpZihzKXIub25Eb25lKHtiZWdpbjowLGNodW5rOnN9KTtlbHNle3ZhciBjO251bGw9PT0oYz1yLm9uRXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwocixpLnN0YXR1cyl9fWVsc2V7dmFyIGg7bnVsbD09PShoPXIub25FcnJvcil8fHZvaWQgMD09PWh8fGguY2FsbChyLGkuc3RhdHVzKX19fX19LHtrZXk6ImdldFJlcXVlc3RYaHIiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XS54aHJ9fSx7a2V5OiJpc1BlbmRpbmdSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0c319LHtrZXk6ImFib3J0UmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wZW5kaW5nUmVxdWVzdHNbdF0ueGhyO2RlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XSxlLmFib3J0KCl9fV0pLHR9KCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHRoaXMuX3NvdXJjZT1lLHRoaXMuX21hbmFnZXI9bmV3IHAoZS51cmwse2h0dHBIZWFkZXJzOmUuaHR0cEhlYWRlcnMsd2l0aENyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzfSksdGhpcy5fcmFuZ2VDaHVua1NpemU9ZS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGQodCxbe2tleToiX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YodCk7ZT49MCYmdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGTmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyB5KHRoaXMuX21hbmFnZXIsdGhpcy5fc291cmNlKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW5ldyBtKHRoaXMuX21hbmFnZXIsdCxlKTtyZXR1cm4gci5vbkNsb3NlZD10aGlzLl9vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZC5iaW5kKHRoaXMpLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyKSxyfX0se2tleToiY2FuY2VsQWxsUmVxdWVzdHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpO3ZhciByLG49bCh0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5jYW5jZWwodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX1dKSx0fSgpO2UuUERGTmV0d29ya1N0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2godGhpcyx0KSx0aGlzLl9tYW5hZ2VyPWU7dmFyIGk9e29uSGVhZGVyc1JlY2VpdmVkOnRoaXMuX29uSGVhZGVyc1JlY2VpdmVkLmJpbmQodGhpcyksb25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ci51cmwsdGhpcy5fZnVsbFJlcXVlc3RJZD1lLnJlcXVlc3RGdWxsKGkpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fcmFuZ2VDaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2NhY2hlZENodW5rcz1bXSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMuX3N0b3JlZEVycm9yPXZvaWQgMCx0aGlzLl9maWxlbmFtZT1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9vbkhlYWRlcnNSZWNlaXZlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mdWxsUmVxdWVzdElkLGU9dGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0UmVzcG9uc2VIZWFkZXIodCl9LG49KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOnIsaXNIdHRwOnRoaXMuX21hbmFnZXIuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnRoaXMuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTp0aGlzLl9kaXNhYmxlUmFuZ2V9KSxhPW4uYWxsb3dSYW5nZVJlcXVlc3RzLG89bi5zdWdnZXN0ZWRMZW5ndGg7YSYmKHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ITApLHRoaXMuX2NvbnRlbnRMZW5ndGg9b3x8dGhpcy5fY29udGVudExlbmd0aCx0aGlzLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKHIpLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHQpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX29uRG9uZSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodCYmKHRoaXMuX3JlcXVlc3RzLmxlbmd0aD4wP3RoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6dC5jaHVuayxkb25lOiExfSk6dGhpcy5fY2FjaGVkQ2h1bmtzLnB1c2godC5jaHVuaykpLHRoaXMuX2RvbmU9ITAsISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9fX0se2tleToiX29uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPSgwLGkuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikodCx0aGlzLl91cmwpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVqZWN0KHRoaXMuX3N0b3JlZEVycm9yKTt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcil9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aD0wfX0se2tleToiX29uUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnQubG9hZGVkLHRvdGFsOnQubGVuZ3RoQ29tcHV0YWJsZT90LnRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KX19LHtrZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImhlYWRlcnNSZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYoISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt0Lm5leHQ9NTticmVha31yZXR1cm4gZT10aGlzLl9jYWNoZWRDaHVua3Muc2hpZnQoKSx0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6ZSxkb25lOiExfSk7Y2FzZSA1OmlmKCF0aGlzLl9kb25lKXt0Lm5leHQ9NzticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiByPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVxdWVzdHMucHVzaChyKSx0LmFicnVwdCgicmV0dXJuIixyLnByb21pc2UpO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITAsdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QodCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKSYmdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbH19XSksdH0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX21hbmFnZXI9ZTt2YXIgaT17b25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ZS51cmwsdGhpcy5fcmVxdWVzdElkPWUucmVxdWVzdFJhbmdlKHIsbixpKSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMub25DbG9zZWQ9bnVsbH12YXIgZTtyZXR1cm4gZCh0LFt7a2V5OiJfY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMub25DbG9zZWQpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcyx0aGlzKX19LHtrZXk6Il9vbkRvbmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2h1bms7dGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTplLGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVuaz1lLHRoaXMuX2RvbmU9ITA7dmFyIHIsbj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX2Nsb3NlKCl9fSx7a2V5OiJfb25FcnJvciIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fc3RvcmVkRXJyb3I9KDAsaS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKSh0LHRoaXMuX3VybCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX3F1ZXVlZENodW5rPW51bGx9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8bnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dC5sb2FkZWR9KX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYobnVsbD09PXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NjticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDY6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD04O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDg6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fZG9uZT0hMDt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCksdGhpcy5fY2xvc2UoKX19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERkZldGNoU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxpPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1sKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWwoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIGYodCxlLHIpe3JldHVybiBlJiZoKHQucHJvdG90eXBlLGUpLHImJmgodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybnttZXRob2Q6IkdFVCIsaGVhZGVyczp0LHNpZ25hbDpyLnNpZ25hbCxtb2RlOiJjb3JzIixjcmVkZW50aWFsczplPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4iLHJlZGlyZWN0OiJmb2xsb3cifX1mdW5jdGlvbiBwKHQpe3ZhciBlPW5ldyBIZWFkZXJzO2Zvcih2YXIgciBpbiB0KXt2YXIgbj10W3JdO3ZvaWQgMCE9PW4mJmUuYXBwZW5kKHIsbil9cmV0dXJuIGV9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2ModGhpcyx0KSx0aGlzLnNvdXJjZT1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZS51cmwpLHRoaXMuaHR0cEhlYWRlcnM9dGhpcy5pc0h0dHAmJmUuaHR0cEhlYWRlcnN8fHt9LHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGwsdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1yZXR1cm4gZih0LFt7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJnZXRGdWxsUmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybigwLG4uYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IHkodGhpcyksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXJ9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IG0odGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZGZXRjaFN0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9maWxlbmFtZT1udWxsO3ZhciBhPWUuc291cmNlO3RoaXMuX3dpdGhDcmVkZW50aWFscz1hLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5fY29udGVudExlbmd0aD1hLmxlbmd0aCx0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX2Rpc2FibGVSYW5nZT1hLmRpc2FibGVSYW5nZXx8ITEsdGhpcy5fcmFuZ2VDaHVua1NpemU9YS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hYS5kaXNhYmxlU3RyZWFtLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9IWEuZGlzYWJsZVJhbmdlLHRoaXMuX2hlYWRlcnM9cCh0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpO3ZhciBvPWEudXJsO2ZldGNoKG8sZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLG8pO3IuX3JlYWRlcj10LmJvZHkuZ2V0UmVhZGVyKCksci5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO3ZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiB0LmhlYWRlcnMuZ2V0KGUpfSxhPSgwLGkudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjplLGlzSHR0cDpyLl9zdHJlYW0uaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnIuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpyLl9kaXNhYmxlUmFuZ2V9KSxzPWEuYWxsb3dSYW5nZVJlcXVlc3RzLGw9YS5zdWdnZXN0ZWRMZW5ndGg7ci5faXNSYW5nZVN1cHBvcnRlZD1zLHIuX2NvbnRlbnRMZW5ndGg9bHx8ci5fY29udGVudExlbmd0aCxyLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGUpLCFyLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCYmci5faXNSYW5nZVN1cHBvcnRlZCYmci5jYW5jZWwobmV3IG4uQWJvcnRFeGNlcHRpb24oIlN0cmVhbWluZyBpcyBkaXNhYmxlZC4iKSl9KSkuY2F0Y2godGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KSx0aGlzLm9uUHJvZ3Jlc3M9bnVsbH12YXIgZTtyZXR1cm4gZih0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9cyhhKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsbixpLG87cmV0dXJuIGEoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtjYXNlIDI6cmV0dXJuIHQubmV4dD00LHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSA0OmlmKHI9dC5zZW50LG49ci52YWx1ZSwhKGk9ci5kb25lKSl7dC5uZXh0PTk7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpuLGRvbmU6aX0pO2Nhc2UgOTpyZXR1cm4gdGhpcy5fbG9hZGVkKz1uLmJ5dGVMZW5ndGgsbnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dGhpcy5fbG9hZGVkLHRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KSxvPW5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcix0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6byxkb25lOiExfSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX3JlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpLHRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX1dKSx0fSgpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixhKXt2YXIgbz10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MDt2YXIgcz1lLnNvdXJjZTt0aGlzLl93aXRoQ3JlZGVudGlhbHM9cy53aXRoQ3JlZGVudGlhbHN8fCExLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXMuZGlzYWJsZVN0cmVhbSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9oZWFkZXJzPXAodGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzKSx0aGlzLl9oZWFkZXJzLmFwcGVuZCgiUmFuZ2UiLCJieXRlcz0iLmNvbmNhdChyLCItIikuY29uY2F0KGEtMSkpO3ZhciBsPXMudXJsO2ZldGNoKGwsZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLGwpO28uX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKSxvLl9yZWFkZXI9dC5ib2R5LmdldFJlYWRlcigpfSkpLmNhdGNoKHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIGYodCxbe2tleToiaXNTdHJlYW1pbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxvO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCx0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgNDppZihyPXQuc2VudCxuPXIudmFsdWUsIShpPXIuZG9uZSkpe3QubmV4dD05O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6bixkb25lOml9KTtjYXNlIDk6cmV0dXJuIHRoaXMuX2xvYWRlZCs9bi5ieXRlTGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLG89bmV3IFVpbnQ4QXJyYXkobikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpvLGRvbmU6ITF9KTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fcmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCksdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCl9fV0pLHR9KCl9XSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX193X3BkZmpzX3JlcXVpcmVfXyh0KXt2YXIgZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gZS5leHBvcnRzO3ZhciByPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1t0XT17ZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bdF0ocixyLmV4cG9ydHMsX193X3BkZmpzX3JlcXVpcmVfXyksci5leHBvcnRzfXZhciBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXz17fTtyZXR1cm4oKCk9Pnt2YXIgdD1fX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXztPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFib3J0RXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5BYm9ydEV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvckxheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvclR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25FZGl0b3JUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uTGF5ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkFubm90YXRpb25MYXllcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbk1vZGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25Nb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDTWFwQ29tcHJlc3Npb25UeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5DTWFwQ29tcHJlc3Npb25UeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHbG9iYWxXb3JrZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5HbG9iYWxXb3JrZXJPcHRpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnZhbGlkUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5JbnZhbGlkUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNaXNzaW5nUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5NaXNzaW5nUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPUFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLk9QU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUERGRGF0YVJhbmdlVHJhbnNwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5QREZEYXRhUmFuZ2VUcmFuc3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERkRhdGVTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlBERkRhdGVTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERldvcmtlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUERGV29ya2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQYXNzd29yZFJlc3BvbnNlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuUGFzc3dvcmRSZXNwb25zZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBlcm1pc3Npb25GbGFnIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5QZXJtaXNzaW9uRmxhZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGl4ZWxzUGVySW5jaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uUGl4ZWxzUGVySW5jaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNWR0dyYXBoaWNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5TVkdHcmFwaGljc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVU5TVVBQT1JURURfRkVBVFVSRVMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVXRpbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuVXRpbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVmVyYm9zaXR5TGV2ZWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlZlcmJvc2l0eUxldmVsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJYZmFMYXllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguWGZhTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImJ1aWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5idWlsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVWYWxpZEFic29sdXRlVXJsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVWYWxpZEFic29sdXRlVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXREb2N1bWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0RG9jdW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEZpbGVuYW1lRnJvbVVybCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0RmlsZW5hbWVGcm9tVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRQZGZGaWxlbmFtZUZyb21VcmwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldFBkZkZpbGVuYW1lRnJvbVVybH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0WGZhUGFnZVZpZXdwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRYZmFQYWdlVmlld3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzRGF0YVNjaGVtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uaXNEYXRhU2NoZW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1BkZkZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmlzUGRmRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9hZFNjcmlwdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ubG9hZFNjcmlwdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVuZGVyVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5yZW5kZXJUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldExheWVyRGltZW5zaW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0TGF5ZXJEaW1lbnNpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFkb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLnNoYWRvd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXBkYXRlVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS51cGRhdGVUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZlcnNpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnZlcnNpb259fSk7dmFyIGU9X193X3BkZmpzX3JlcXVpcmVfXygxKSxyPV9fd19wZGZqc19yZXF1aXJlX18oMTMzKSxuPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxpPV9fd19wZGZqc19yZXF1aXJlX18oMTUxKSxhPV9fd19wZGZqc19yZXF1aXJlX18oMTUyKSxvPV9fd19wZGZqc19yZXF1aXJlX18oMTM2KSxzPV9fd19wZGZqc19yZXF1aXJlX18oMTU3KSxsPV9fd19wZGZqc19yZXF1aXJlX18oMTQ0KSx1PV9fd19wZGZqc19yZXF1aXJlX18oMyksYz1fX3dfcGRmanNfcmVxdWlyZV9fKDE2MCksaD1fX3dfcGRmanNfcmVxdWlyZV9fKDE1OSk7aWYodS5pc05vZGVKUyl7dmFyIGY9X193X3BkZmpzX3JlcXVpcmVfXygxNjEpLlBERk5vZGVTdHJlYW07KDAsci5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSkoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZih0KX0pKX1lbHNle3ZhciBkPV9fd19wZGZqc19yZXF1aXJlX18oMTY0KS5QREZOZXR3b3JrU3RyZWFtLHA9X193X3BkZmpzX3JlcXVpcmVfXygxNjUpLlBERkZldGNoU3RyZWFtOygwLHIuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkpKChmdW5jdGlvbih0KXtyZXR1cm4oMCxuLmlzVmFsaWRGZXRjaFVybCkodC51cmwpP25ldyBwKHQpOm5ldyBkKHQpfSkpfX0pKCksX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZmFjdG9yeSgpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJwZGZqcy1kaXN0L2J1aWxkL3BkZiIsW10sZmFjdG9yeSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09ZmFjdG9yeSgpOnJvb3RbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09cm9vdC5wZGZqc0xpYj1mYWN0b3J5KCk7",M=`data:text/javascript;base64,${K}`,a=`data:text/javascript;base64,${x}`;class T{constructor(Z,l={},m={}){X(this,"container",null);X(this,"wrapper",null);X(this,"wrapperMain",null);X(this,"options",{});X(this,"requestOptions",{});X(this,"pdfDocument",null);this.container=Z,this.options={staticFileUrl:"https://unpkg.com/pdfjs-dist@3.1.81/",...l},this.requestOptions=m,this.createWrapper()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-pdf",this.wrapper.setAttribute("style","text-align: center;overflow-y: auto;"),this.container.appendChild(this.wrapper)}createWrapperMain(){this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-pdf-wrapper",this.wrapperMain.setAttribute("style","background: gray; padding: 30px 0;position: relative;"),this.wrapper.appendChild(this.wrapperMain)}createCanvas(Z){let l=this.wrapperMain.querySelectorAll("canvas");if(l[Z-1])return[l[Z-1],l[Z-1].getContext("2d")];const m=document.createElement("canvas");return m.setAttribute("style","width:100%"),this.wrapperMain.appendChild(m),[m,m.getContext("2d")]}installPdfScript(){return h(M).then(()=>{window.pdfjsLib.GlobalWorkerOptions.workerSrc=a})}checkPdfLib(){return window.pdfjsLib?Promise.resolve():this.installPdfScript()}getDocument(Z){return window.pdfjsLib.getDocument({url:u(Z),httpHeaders:this.requestOptions&&this.requestOptions.headers,withCredentials:this.requestOptions&&this.requestOptions.withCredentials,cMapUrl:`${this.options.staticFileUrl.endsWith("/")?this.options.staticFileUrl:this.options.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...p(this.options,["width","staticFileUrl"])}).promise}renderSinglePage(Z){return this.pdfDocument.getPage(Z).then(l=>{const m=l.getViewport({scale:2}),b=window.devicePixelRatio||1;let[G,i]=this.createCanvas(Z);G.width=Math.floor(m.width*b),G.height=Math.floor(m.height*b);let c=Math.floor(m.width),W=Math.floor(m.height);if(this.options.width){let I=this.options.width/c;c=Math.floor(this.options.width),W=Math.floor(W*I)}let Y=this.wrapperMain.getBoundingClientRect().width-20;if(c>Y){let I=Y/c;c=Math.floor(Y),W=Math.floor(W*I)}G.style.width=c+"px",G.style.height=W+"px";const L=b!==1?[b,0,0,b,0,0]:null;return l.render({canvasContext:i,transform:L,viewport:m}).promise.then(()=>{if(this.pdfDocument.numPages>Z)return this.renderSinglePage(Z+1)})})}renderPage(){if(!this.wrapperMain)this.createWrapperMain();else{let Z=this.wrapperMain.querySelectorAll("canvas");if(Z.length>this.pdfDocument.numPages)for(let l=Z.length-1;l>=this.pdfDocument.numPages;l--)this.wrapperMain.removeChild(Z[l])}return this.renderSinglePage(1)}clearAllCanvas(){this.wrapperMain&&(this.wrapper.removeChild(this.wrapperMain),this.wrapperMain=null)}setOptions(Z){this.options=Z}setRequestOptions(Z){this.requestOptions=Z}preview(Z){return new Promise((l,m)=>{if(!Z){this.clearAllCanvas(),m(new Error("预览地址不能为空"));return}this.checkPdfLib().then(b=>{this.getDocument(Z).then(G=>{this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=G,this.renderPage().then(i=>{l()}).catch(i=>{this.clearAllCanvas(),m(i)})}).catch(G=>{this.clearAllCanvas(),m(G)})}).catch(b=>{this.clearAllCanvas(),m(b)})})}rerender(){return this.renderPage().then(Z=>Promise.resolve()).catch(Z=>(this.clearAllCanvas(),Promise.reject(Z)))}save(Z){this.pdfDocument&&this.pdfDocument._transport&&this.pdfDocument._transport.getData().then(l=>{s(Z||`js-preview-pdf-${new Date().getTime()}.pdf`,l.buffer)})}destroy(){this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options={},this.requestOptions={},this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=null}}function C(d,Z,l){return new T(d,Z,l)}const H={init:C},n={__name:"JsPdfDemo",setup(d){const Z=J(null);return S(()=>{window.myPdfPreview=H.init(Z.value),window.myPdfPreview.preview("/vue-office/examples/dist/static/test-files/test.pdf").then(l=>{console.log("excel preview done",window.myPdfPreview)}).catch(l=>{console.log("err",l)})}),(l,m)=>(R(),N("div",{ref_key:"dom",ref:Z,style:{height:"calc(100vh - 50px)"}},null,512))}};export{n as default}; diff --git a/examples/dist/assets/PdfDemo-64ba1228.js b/examples/dist/assets/PdfDemo-64ba1228.js new file mode 100644 index 0000000..3385be7 --- /dev/null +++ b/examples/dist/assets/PdfDemo-64ba1228.js @@ -0,0 +1,3 @@ +import{g as j,d as M,l as R}from"./url-de9b02cf.js";import{o as L}from"./omit-4f9f5d5d.js";import{d as D,_ as N,r as b,h as B,o as U,w as X,a as g,c as m,F as H,k as $,l as q,m as G,e as W,f as z,g as V,u as Y}from"./index-58cbfcf0.js";import{P as K,u as C}from"./PreviewWrapper-1c0384a3.js";const J=`/*! For license information please see worker.js.LICENSE.txt */ +var e,t;e=globalThis,t=()=>(()=>{var e=[,(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WorkerTask=t.WorkerMessageHandler=void 0;var n=r(2),a=r(134),i=r(135),o=r(137),s=r(200),c=r(194),u=r(4),l=r(231),f=r(232);function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function d(){}function p(){}function g(){}var v={};c(v,i,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(P([])));m&&m!==t&&r.call(m,i)&&(v=m);var w=g.prototype=d.prototype=Object.create(v);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==b(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function d(e,t){return y(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||g(e,t)||p()}function p(){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 g(e,t){if(e){if("string"==typeof e)return v(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?v(e,t):void 0}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(f);try{var m=function(){var e=d(h.value,2),t=e[0],n=e[1];l.push(r.getPage(t).then((function(e){var r=new x("Save (editor): page ".concat(t));return e.saveNewAnnotations(E,r,n).finally((function(){_(r)}))})))};for(v.s();!(h=v.n()).done;)m()}catch(e){v.e(e)}finally{v.f()}}if(t)l.push(r.serializeXfaData(s));else for(var b=function(e){l.push(r.getPage(e).then((function(t){var r=new x("Save: page ".concat(e));return t.save(E,r,s).finally((function(){_(r)}))})))},w=0;w=n.VerbosityLevel.INFOS?Date.now():0;r.getOperatorList({handler:E,sink:t,task:i,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage}).then((function(e){_(i),o&&(0,n.info)("page=".concat(a+1," - getOperatorList: time=")+"".concat(Date.now()-o,"ms, len=").concat(e.length)),t.close()}),(function(e){_(i),i.terminated||t.error(e)}))}))})),E.on("GetTextContent",(function(e,t){var a=e.pageIndex;r.getPage(a).then((function(r){var i=new x("GetTextContent: page "+a);M(i);var o=k>=n.VerbosityLevel.INFOS?Date.now():0;r.extractTextContent({handler:E,task:i,sink:t,includeMarkedContent:e.includeMarkedContent,combineTextItems:e.combineTextItems}).then((function(){_(i),o&&(0,n.info)("page=".concat(a+1," - getTextContent: time=")+"".concat(Date.now()-o,"ms")),t.close()}),(function(e){_(i),i.terminated||t.error(e)}))}))})),E.on("GetStructTree",(function(e){return r.getPage(e.pageIndex).then((function(e){return r.ensure(e,"getStructTree")}))})),E.on("FontFallback",(function(e){return r.fontFallback(e.id,E)})),E.on("Cleanup",(function(e){return r.cleanup(!0)})),E.on("Terminate",(function(e){v=!0;var t=[];if(r){r.terminate(new n.AbortException("Worker was terminated."));var a=r.cleanup();t.push(a),r=null}else(0,s.clearGlobalCaches)();b&&b(new n.AbortException("Worker was terminated."));for(var i=0,o=w;i{function n(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!e)return null;try{if(r&&"string"==typeof e){if(r.addDefaultProtocol&&e.startsWith("www.")){var n=e.match(/\\./g);n&&n.length>=2&&(e="http://".concat(e))}if(r.tryConvertEncoding)try{e=M(e)}catch(e){}}var a=t?new URL(e,t):new URL(e);if(function(e){if(!e)return!1;switch(e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(a))return a}catch(e){}return null},t.getModificationDate=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date;return[e.getUTCFullYear().toString(),(e.getUTCMonth()+1).toString().padStart(2,"0"),e.getUTCDate().toString().padStart(2,"0"),e.getUTCHours().toString().padStart(2,"0"),e.getUTCMinutes().toString().padStart(2,"0"),e.getUTCSeconds().toString().padStart(2,"0")].join("")},t.getVerbosityLevel=function(){return g},t.info=function(e){g>=p.INFOS&&console.log("Info: ".concat(e))},t.isArrayBuffer=function(e){return"object"===o(e)&&null!==e&&void 0!==e.byteLength},t.isArrayEqual=function(e,t){if(e.length!==t.length)return!1;for(var r=0,n=e.length;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}(e);try{for(i.s();!(t=i.n()).done;){var o=(r=t.value,2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{for(i=(r=r.call(e)).next,0;!(c=(n=i.call(r)).done)&&(s.push(n.value),2!==s.length);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(r)||a(r,2)||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.")}()),s=o[0],c=o[1];n[s]=c}}catch(e){i.e(e)}finally{i.f()}return n},t.objectSize=function(e){return Object.keys(e).length},t.setVerbosityLevel=function(e){Number.isInteger(e)&&(g=e)},t.shadow=m,t.string32=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},t.stringToBytes=F,t.stringToPDFString=function(e){var t;if(e[0]>="ï"&&("þ"===e[0]&&"ÿ"===e[1]?t="utf-16be":"ÿ"===e[0]&&"þ"===e[1]?t="utf-16le":"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(t="utf-8"),t))try{var r=new TextDecoder(t,{fatal:!0}),n=F(e);return r.decode(n)}catch(e){v('stringToPDFString: "'.concat(e,'".'))}for(var a=[],i=0,o=e.length;i=p.WARNINGS&&console.log("Warning: ".concat(e))}function y(e){throw new Error(e)}function m(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!0,writable:!1}),r}var b=function(){function e(t,r){this.constructor===e&&y("Cannot initialize BaseException."),this.message=t,this.name=r}return e.prototype=new Error,e.constructor=e,e}();t.BaseException=b;var w=function(e){l(r,e);var t=h(r);function r(e,n){var a;return u(this,r),(a=t.call(this,e,"PasswordException")).code=n,a}return c(r)}(b);t.PasswordException=w;var k=function(e){l(r,e);var t=h(r);function r(e,n){var a;return u(this,r),(a=t.call(this,e,"UnknownErrorException")).details=n,a}return c(r)}(b);t.UnknownErrorException=k;var S=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"InvalidPDFException")}return c(r)}(b);t.InvalidPDFException=S;var x=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"MissingPDFException")}return c(r)}(b);t.MissingPDFException=x;var O=function(e){l(r,e);var t=h(r);function r(e,n){var a;return u(this,r),(a=t.call(this,e,"UnexpectedResponseException")).status=n,a}return c(r)}(b);t.UnexpectedResponseException=O;var A=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"FormatError")}return c(r)}(b);t.FormatError=A;var C=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"AbortException")}return c(r)}(b);function F(e){"string"!=typeof e&&y("Invalid argument for stringToBytes");for(var t=e.length,r=new Uint8Array(t),n=0;ne[2]&&(t[0]=e[2],t[2]=e[0]),e[1]>e[3]&&(t[1]=e[3],t[3]=e[1]),t}},{key:"intersect",value:function(e,t){var r=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),n=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(r>n)return null;var a=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),i=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return a>i?null:[r,a,n,i]}},{key:"bezierBoundingBox",value:function(e,t,r,a,i,o,s,c){for(var u,l,f,h,d,p,g,v,y=[],m=[[],[]],b=0;b<2;++b)if(0===b?(l=6*e-12*r+6*i,u=-3*e+9*r-9*i+3*s,f=3*r-3*e):(l=6*t-12*a+6*o,u=-3*t+9*a-9*o+3*c,f=3*a-3*t),Math.abs(u)<1e-12){if(Math.abs(l)<1e-12)continue;0<(h=-f/l)&&h<1&&y.push(h)}else g=l*l-4*f*u,v=Math.sqrt(g),g<0||(0<(d=(-l+v)/(2*u))&&d<1&&y.push(d),0<(p=(-l-v)/(2*u))&&p<1&&y.push(p));for(var w,k=y.length,S=k;k--;)w=1-(h=y[k]),m[0][k]=w*w*w*e+3*w*w*h*r+3*w*h*h*i+h*h*h*s,m[1][k]=w*w*w*t+3*w*w*h*a+3*w*h*h*o+h*h*h*c;return m[0][S]=e,m[1][S]=t,m[0][S+1]=s,m[1][S+1]=c,m[0].length=m[1].length=S+2,[Math.min.apply(Math,n(m[0])),Math.min.apply(Math,n(m[1])),Math.max.apply(Math,n(m[0])),Math.max.apply(Math,n(m[1]))]}}]),e}();t.Util=E;var j=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function M(e){return decodeURIComponent(escape(e))}},(e,t,r)=>{var n=r(4);!globalThis.btoa&&n.isNodeJS&&(globalThis.btoa=function(e){return Buffer.from(e,"binary").toString("base64")}),!globalThis.atob&&n.isNodeJS&&(globalThis.atob=function(e){return Buffer.from(e,"base64").toString("binary")}),!globalThis.DOMMatrix&&n.isNodeJS&&(globalThis.DOMMatrix=require("canvas").DOMMatrix),!globalThis.ReadableStream&&n.isNodeJS&&(globalThis.ReadableStream=require("web-streams-polyfill/dist/ponyfill.js").ReadableStream),Array.prototype.at||r(5),Uint8Array.prototype.at||r(79),globalThis.structuredClone||r(89)},(e,t)=>{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.isNodeJS=void 0;var n=!("object"!==("undefined"==typeof process?"undefined":r(process))||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type);t.isNodeJS=n},(e,t,r)=>{r(6);var n=r(78);e.exports=n("Array","at")},(e,t,r)=>{var n=r(7),a=r(44),i=r(68),o=r(66),s=r(73);n({target:"Array",proto:!0},{at:function(e){var t=a(this),r=i(t),n=o(e),s=n>=0?n:r+n;return s<0||s>=r?void 0:t[s]}}),s("at")},(e,t,r)=>{var n=r(8),a=r(9).f,i=r(48),o=r(52),s=r(42),c=r(60),u=r(72);e.exports=function(e,t){var r,l,f,h,d,p=e.target,g=e.global,v=e.stat;if(r=g?n:v?n[p]||s(p,{}):(n[p]||{}).prototype)for(l in t){if(h=t[l],f=e.dontCallGetSet?(d=a(r,l))&&d.value:r[l],!u(g?l:p+(v?".":"#")+l,e.forced)&&void 0!==f){if(typeof h==typeof f)continue;c(h,f)}(e.sham||f&&f.sham)&&i(h,"sham",!0),o(r,l,h,e)}}},e=>{var t=function(e){return e&&e.Math==Math&&e};e.exports=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof global&&global)||function(){return this}()||Function("return this")()},(e,t,r)=>{var n=r(10),a=r(12),i=r(14),o=r(15),s=r(16),c=r(22),u=r(43),l=r(46),f=Object.getOwnPropertyDescriptor;t.f=n?f:function(e,t){if(e=s(e),t=c(t),l)try{return f(e,t)}catch(e){}if(u(e,t))return o(!a(i.f,e,t),e[t])}},(e,t,r)=>{var n=r(11);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},(e,t,r)=>{var n=r(13),a=Function.prototype.call;e.exports=n?a.bind(a):function(){return a.apply(a,arguments)}},(e,t,r)=>{var n=r(11);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},(e,t)=>{var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,a=n&&!r.call({1:2},1);t.f=a?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},(e,t,r)=>{var n=r(17),a=r(20);e.exports=function(e){return n(a(e))}},(e,t,r)=>{var n=r(18),a=r(11),i=r(19),o=Object,s=n("".split);e.exports=a((function(){return!o("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?s(e,""):o(e)}:o},(e,t,r)=>{var n=r(13),a=Function.prototype,i=a.call,o=n&&a.bind.bind(i,i);e.exports=n?o:function(e){return function(){return i.apply(e,arguments)}}},(e,t,r)=>{var n=r(18),a=n({}.toString),i=n("".slice);e.exports=function(e){return i(a(e),8,-1)}},(e,t,r)=>{var n=r(21),a=TypeError;e.exports=function(e){if(n(e))throw a("Can't call method on "+e);return e}},e=>{e.exports=function(e){return null==e}},(e,t,r)=>{var n=r(23),a=r(27);e.exports=function(e){var t=n(e,"string");return a(t)?t:t+""}},(e,t,r)=>{var n=r(12),a=r(24),i=r(27),o=r(34),s=r(37),c=r(38),u=TypeError,l=c("toPrimitive");e.exports=function(e,t){if(!a(e)||i(e))return e;var r,c=o(e,l);if(c){if(void 0===t&&(t="default"),r=n(c,e,t),!a(r)||i(r))return r;throw u("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},(e,t,r)=>{var n=r(25),a=r(26),i=a.all;e.exports=a.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:n(e)||e===i}:function(e){return"object"==typeof e?null!==e:n(e)}},(e,t,r)=>{var n=r(26),a=n.all;e.exports=n.IS_HTMLDDA?function(e){return"function"==typeof e||e===a}:function(e){return"function"==typeof e}},e=>{var t="object"==typeof document&&document.all,r=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:r}},(e,t,r)=>{var n=r(28),a=r(25),i=r(29),o=r(30),s=Object;e.exports=o?function(e){return"symbol"==typeof e}:function(e){var t=n("Symbol");return a(t)&&i(t.prototype,s(e))}},(e,t,r)=>{var n=r(8),a=r(25);e.exports=function(e,t){return arguments.length<2?(r=n[e],a(r)?r:void 0):n[e]&&n[e][t];var r}},(e,t,r)=>{var n=r(18);e.exports=n({}.isPrototypeOf)},(e,t,r)=>{var n=r(31);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},(e,t,r)=>{var n=r(32),a=r(11);e.exports=!!Object.getOwnPropertySymbols&&!a((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},(e,t,r)=>{var n,a,i=r(8),o=r(33),s=i.process,c=i.Deno,u=s&&s.versions||c&&c.version,l=u&&u.v8;l&&(a=(n=l.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!a&&o&&(!(n=o.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\\/(\\d+)/))&&(a=+n[1]),e.exports=a},(e,t,r)=>{var n=r(28);e.exports=n("navigator","userAgent")||""},(e,t,r)=>{var n=r(35),a=r(21);e.exports=function(e,t){var r=e[t];return a(r)?void 0:n(r)}},(e,t,r)=>{var n=r(25),a=r(36),i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not a function")}},e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},(e,t,r)=>{var n=r(12),a=r(25),i=r(24),o=TypeError;e.exports=function(e,t){var r,s;if("string"===t&&a(r=e.toString)&&!i(s=n(r,e)))return s;if(a(r=e.valueOf)&&!i(s=n(r,e)))return s;if("string"!==t&&a(r=e.toString)&&!i(s=n(r,e)))return s;throw o("Can't convert object to primitive value")}},(e,t,r)=>{var n=r(8),a=r(39),i=r(43),o=r(45),s=r(31),c=r(30),u=a("wks"),l=n.Symbol,f=l&&l.for,h=c?l:l&&l.withoutSetter||o;e.exports=function(e){if(!i(u,e)||!s&&"string"!=typeof u[e]){var t="Symbol."+e;s&&i(l,e)?u[e]=l[e]:u[e]=c&&f?f(t):h(t)}return u[e]}},(e,t,r)=>{var n=r(40),a=r(41);(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.26.1",mode:n?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})},e=>{e.exports=!1},(e,t,r)=>{var n=r(8),a=r(42),i="__core-js_shared__",o=n[i]||a(i,{});e.exports=o},(e,t,r)=>{var n=r(8),a=Object.defineProperty;e.exports=function(e,t){try{a(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},(e,t,r)=>{var n=r(18),a=r(44),i=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(a(e),t)}},(e,t,r)=>{var n=r(20),a=Object;e.exports=function(e){return a(n(e))}},(e,t,r)=>{var n=r(18),a=0,i=Math.random(),o=n(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+o(++a+i,36)}},(e,t,r)=>{var n=r(10),a=r(11),i=r(47);e.exports=!n&&!a((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},(e,t,r)=>{var n=r(8),a=r(24),i=n.document,o=a(i)&&a(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},(e,t,r)=>{var n=r(10),a=r(49),i=r(15);e.exports=n?function(e,t,r){return a.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},(e,t,r)=>{var n=r(10),a=r(46),i=r(50),o=r(51),s=r(22),c=TypeError,u=Object.defineProperty,l=Object.getOwnPropertyDescriptor,f="enumerable",h="configurable",d="writable";t.f=n?i?function(e,t,r){if(o(e),t=s(t),o(r),"function"==typeof e&&"prototype"===t&&"value"in r&&d in r&&!r[d]){var n=l(e,t);n&&n[d]&&(e[t]=r.value,r={configurable:h in r?r[h]:n[h],enumerable:f in r?r[f]:n[f],writable:!1})}return u(e,t,r)}:u:function(e,t,r){if(o(e),t=s(t),o(r),a)try{return u(e,t,r)}catch(e){}if("get"in r||"set"in r)throw c("Accessors not supported");return"value"in r&&(e[t]=r.value),e}},(e,t,r)=>{var n=r(10),a=r(11);e.exports=n&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},(e,t,r)=>{var n=r(24),a=String,i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not an object")}},(e,t,r)=>{var n=r(25),a=r(49),i=r(53),o=r(42);e.exports=function(e,t,r,s){s||(s={});var c=s.enumerable,u=void 0!==s.name?s.name:t;if(n(r)&&i(r,u,s),s.global)c?e[t]=r:o(t,r);else{try{s.unsafe?e[t]&&(c=!0):delete e[t]}catch(e){}c?e[t]=r:a.f(e,t,{value:r,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},(e,t,r)=>{var n=r(11),a=r(25),i=r(43),o=r(10),s=r(54).CONFIGURABLE,c=r(55),u=r(56),l=u.enforce,f=u.get,h=Object.defineProperty,d=o&&!n((function(){return 8!==h((function(){}),"length",{value:8}).length})),p=String(String).split("String"),g=e.exports=function(e,t,r){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\\(([^)]*)\\)/,"$1")+"]"),r&&r.getter&&(t="get "+t),r&&r.setter&&(t="set "+t),(!i(e,"name")||s&&e.name!==t)&&(o?h(e,"name",{value:t,configurable:!0}):e.name=t),d&&r&&i(r,"arity")&&e.length!==r.arity&&h(e,"length",{value:r.arity});try{r&&i(r,"constructor")&&r.constructor?o&&h(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=l(e);return i(n,"source")||(n.source=p.join("string"==typeof t?t:"")),e};Function.prototype.toString=g((function(){return a(this)&&f(this).source||c(this)}),"toString")},(e,t,r)=>{var n=r(10),a=r(43),i=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,s=a(i,"name"),c=s&&"something"===function(){}.name,u=s&&(!n||n&&o(i,"name").configurable);e.exports={EXISTS:s,PROPER:c,CONFIGURABLE:u}},(e,t,r)=>{var n=r(18),a=r(25),i=r(41),o=n(Function.toString);a(i.inspectSource)||(i.inspectSource=function(e){return o(e)}),e.exports=i.inspectSource},(e,t,r)=>{var n,a,i,o=r(57),s=r(8),c=r(24),u=r(48),l=r(43),f=r(41),h=r(58),d=r(59),p="Object already initialized",g=s.TypeError,v=s.WeakMap;if(o||f.state){var y=f.state||(f.state=new v);y.get=y.get,y.has=y.has,y.set=y.set,n=function(e,t){if(y.has(e))throw g(p);return t.facade=e,y.set(e,t),t},a=function(e){return y.get(e)||{}},i=function(e){return y.has(e)}}else{var m=h("state");d[m]=!0,n=function(e,t){if(l(e,m))throw g(p);return t.facade=e,u(e,m,t),t},a=function(e){return l(e,m)?e[m]:{}},i=function(e){return l(e,m)}}e.exports={set:n,get:a,has:i,enforce:function(e){return i(e)?a(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!c(t)||(r=a(t)).type!==e)throw g("Incompatible receiver, "+e+" required");return r}}}},(e,t,r)=>{var n=r(8),a=r(25),i=n.WeakMap;e.exports=a(i)&&/native code/.test(String(i))},(e,t,r)=>{var n=r(39),a=r(45),i=n("keys");e.exports=function(e){return i[e]||(i[e]=a(e))}},e=>{e.exports={}},(e,t,r)=>{var n=r(43),a=r(61),i=r(9),o=r(49);e.exports=function(e,t,r){for(var s=a(t),c=o.f,u=i.f,l=0;l{var n=r(28),a=r(18),i=r(62),o=r(71),s=r(51),c=a([].concat);e.exports=n("Reflect","ownKeys")||function(e){var t=i.f(s(e)),r=o.f;return r?c(t,r(e)):t}},(e,t,r)=>{var n=r(63),a=r(70).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,a)}},(e,t,r)=>{var n=r(18),a=r(43),i=r(16),o=r(64).indexOf,s=r(59),c=n([].push);e.exports=function(e,t){var r,n=i(e),u=0,l=[];for(r in n)!a(s,r)&&a(n,r)&&c(l,r);for(;t.length>u;)a(n,r=t[u++])&&(~o(l,r)||c(l,r));return l}},(e,t,r)=>{var n=r(16),a=r(65),i=r(68),o=function(e){return function(t,r,o){var s,c=n(t),u=i(c),l=a(o,u);if(e&&r!=r){for(;u>l;)if((s=c[l++])!=s)return!0}else for(;u>l;l++)if((e||l in c)&&c[l]===r)return e||l||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},(e,t,r)=>{var n=r(66),a=Math.max,i=Math.min;e.exports=function(e,t){var r=n(e);return r<0?a(r+t,0):i(r,t)}},(e,t,r)=>{var n=r(67);e.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},e=>{var t=Math.ceil,r=Math.floor;e.exports=Math.trunc||function(e){var n=+e;return(n>0?r:t)(n)}},(e,t,r)=>{var n=r(69);e.exports=function(e){return n(e.length)}},(e,t,r)=>{var n=r(66),a=Math.min;e.exports=function(e){return e>0?a(n(e),9007199254740991):0}},e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},(e,t)=>{t.f=Object.getOwnPropertySymbols},(e,t,r)=>{var n=r(11),a=r(25),i=/#|\\.prototype\\./,o=function(e,t){var r=c[s(e)];return r==l||r!=u&&(a(t)?n(t):!!t)},s=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=o.data={},u=o.NATIVE="N",l=o.POLYFILL="P";e.exports=o},(e,t,r)=>{var n=r(38),a=r(74),i=r(49).f,o=n("unscopables"),s=Array.prototype;null==s[o]&&i(s,o,{configurable:!0,value:a(null)}),e.exports=function(e){s[o][e]=!0}},(e,t,r)=>{var n,a=r(51),i=r(75),o=r(70),s=r(59),c=r(77),u=r(47),l=r(58),f="prototype",h="script",d=l("IE_PROTO"),p=function(){},g=function(e){return"<"+h+">"+e+""},v=function(e){e.write(g("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{n=new ActiveXObject("htmlfile")}catch(e){}var e,t,r;y="undefined"!=typeof document?document.domain&&n?v(n):(t=u("iframe"),r="java"+h+":",t.style.display="none",c.appendChild(t),t.src=String(r),(e=t.contentWindow.document).open(),e.write(g("document.F=Object")),e.close(),e.F):v(n);for(var a=o.length;a--;)delete y[f][o[a]];return y()};s[d]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(p[f]=a(e),r=new p,p[f]=null,r[d]=e):r=y(),void 0===t?r:i.f(r,t)}},(e,t,r)=>{var n=r(10),a=r(50),i=r(49),o=r(51),s=r(16),c=r(76);t.f=n&&!a?Object.defineProperties:function(e,t){o(e);for(var r,n=s(t),a=c(t),u=a.length,l=0;u>l;)i.f(e,r=a[l++],n[r]);return e}},(e,t,r)=>{var n=r(63),a=r(70);e.exports=Object.keys||function(e){return n(e,a)}},(e,t,r)=>{var n=r(28);e.exports=n("document","documentElement")},(e,t,r)=>{var n=r(8),a=r(18);e.exports=function(e,t){return a(n[e].prototype[t])}},(e,t,r)=>{r(80)},(e,t,r)=>{var n=r(81),a=r(68),i=r(66),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("at",(function(e){var t=o(this),r=a(t),n=i(e),s=n>=0?n:r+n;return s<0||s>=r?void 0:t[s]}))},(e,t,r)=>{var n,a,i,o=r(82),s=r(10),c=r(8),u=r(25),l=r(24),f=r(43),h=r(83),d=r(36),p=r(48),g=r(52),v=r(49).f,y=r(29),m=r(85),b=r(87),w=r(38),k=r(45),S=r(56),x=S.enforce,O=S.get,A=c.Int8Array,C=A&&A.prototype,F=c.Uint8ClampedArray,P=F&&F.prototype,T=A&&m(A),I=C&&m(C),E=Object.prototype,j=c.TypeError,M=w("toStringTag"),_=k("TYPED_ARRAY_TAG"),L="TypedArrayConstructor",R=o&&!!b&&"Opera"!==h(c.opera),N=!1,D={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},B={BigInt64Array:8,BigUint64Array:8},U=function(e){var t=m(e);if(l(t)){var r=O(t);return r&&f(r,L)?r[L]:U(t)}},$=function(e){if(!l(e))return!1;var t=h(e);return f(D,t)||f(B,t)};for(n in D)(i=(a=c[n])&&a.prototype)?x(i)[L]=a:R=!1;for(n in B)(i=(a=c[n])&&a.prototype)&&(x(i)[L]=a);if((!R||!u(T)||T===Function.prototype)&&(T=function(){throw j("Incorrect invocation")},R))for(n in D)c[n]&&b(c[n],T);if((!R||!I||I===E)&&(I=T.prototype,R))for(n in D)c[n]&&b(c[n].prototype,I);if(R&&m(P)!==I&&b(P,I),s&&!f(I,M))for(n in N=!0,v(I,M,{get:function(){return l(this)?this[_]:void 0}}),D)c[n]&&p(c[n],_,n);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:R,TYPED_ARRAY_TAG:N&&_,aTypedArray:function(e){if($(e))return e;throw j("Target is not a typed array")},aTypedArrayConstructor:function(e){if(u(e)&&(!b||y(T,e)))return e;throw j(d(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,r,n){if(s){if(r)for(var a in D){var i=c[a];if(i&&f(i.prototype,e))try{delete i.prototype[e]}catch(r){try{i.prototype[e]=t}catch(e){}}}I[e]&&!r||g(I,e,r?t:R&&C[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,r){var n,a;if(s){if(b){if(r)for(n in D)if((a=c[n])&&f(a,e))try{delete a[e]}catch(e){}if(T[e]&&!r)return;try{return g(T,e,r?t:R&&T[e]||t)}catch(e){}}for(n in D)!(a=c[n])||a[e]&&!r||g(a,e,t)}},getTypedArrayConstructor:U,isView:function(e){if(!l(e))return!1;var t=h(e);return"DataView"===t||f(D,t)||f(B,t)},isTypedArray:$,TypedArray:T,TypedArrayPrototype:I}},e=>{e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},(e,t,r)=>{var n=r(84),a=r(25),i=r(19),o=r(38)("toStringTag"),s=Object,c="Arguments"==i(function(){return arguments}());e.exports=n?i:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=s(e),o))?r:c?i(t):"Object"==(n=i(t))&&a(t.callee)?"Arguments":n}},(e,t,r)=>{var n={};n[r(38)("toStringTag")]="z",e.exports="[object z]"===String(n)},(e,t,r)=>{var n=r(43),a=r(25),i=r(44),o=r(58),s=r(86),c=o("IE_PROTO"),u=Object,l=u.prototype;e.exports=s?u.getPrototypeOf:function(e){var t=i(e);if(n(t,c))return t[c];var r=t.constructor;return a(r)&&t instanceof r?r.prototype:t instanceof u?l:null}},(e,t,r)=>{var n=r(11);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},(e,t,r)=>{var n=r(18),a=r(51),i=r(88);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=n(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(r,[]),t=r instanceof Array}catch(e){}return function(r,n){return a(r),i(n),t?e(r,n):r.__proto__=n,r}}():void 0)},(e,t,r)=>{var n=r(25),a=String,i=TypeError;e.exports=function(e){if("object"==typeof e||n(e))return e;throw i("Can't set "+a(e)+" as a prototype")}},(e,t,r)=>{r(90),r(97),r(99),r(122),r(124);var n=r(133);e.exports=n.structuredClone},(e,t,r)=>{var n=r(16),a=r(73),i=r(91),o=r(56),s=r(49).f,c=r(92),u=r(96),l=r(40),f=r(10),h="Array Iterator",d=o.set,p=o.getterFor(h);e.exports=c(Array,"Array",(function(e,t){d(this,{type:h,target:n(e),index:0,kind:t})}),(function(){var e=p(this),t=e.target,r=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,u(void 0,!0)):u("keys"==r?n:"values"==r?t[n]:[n,t[n]],!1)}),"values");var g=i.Arguments=i.Array;if(a("keys"),a("values"),a("entries"),!l&&f&&"values"!==g.name)try{s(g,"name",{value:"values"})}catch(e){}},e=>{e.exports={}},(e,t,r)=>{var n=r(7),a=r(12),i=r(40),o=r(54),s=r(25),c=r(93),u=r(85),l=r(87),f=r(95),h=r(48),d=r(52),p=r(38),g=r(91),v=r(94),y=o.PROPER,m=o.CONFIGURABLE,b=v.IteratorPrototype,w=v.BUGGY_SAFARI_ITERATORS,k=p("iterator"),S="keys",x="values",O="entries",A=function(){return this};e.exports=function(e,t,r,o,p,v,C){c(r,t,o);var F,P,T,I=function(e){if(e===p&&L)return L;if(!w&&e in M)return M[e];switch(e){case S:case x:case O:return function(){return new r(this,e)}}return function(){return new r(this)}},E=t+" Iterator",j=!1,M=e.prototype,_=M[k]||M["@@iterator"]||p&&M[p],L=!w&&_||I(p),R="Array"==t&&M.entries||_;if(R&&(F=u(R.call(new e)))!==Object.prototype&&F.next&&(i||u(F)===b||(l?l(F,b):s(F[k])||d(F,k,A)),f(F,E,!0,!0),i&&(g[E]=A)),y&&p==x&&_&&_.name!==x&&(!i&&m?h(M,"name",x):(j=!0,L=function(){return a(_,this)})),p)if(P={values:I(x),keys:v?L:I(S),entries:I(O)},C)for(T in P)(w||j||!(T in M))&&d(M,T,P[T]);else n({target:t,proto:!0,forced:w||j},P);return i&&!C||M[k]===L||d(M,k,L,{name:p}),g[t]=L,P}},(e,t,r)=>{var n=r(94).IteratorPrototype,a=r(74),i=r(15),o=r(95),s=r(91),c=function(){return this};e.exports=function(e,t,r,u){var l=t+" Iterator";return e.prototype=a(n,{next:i(+!u,r)}),o(e,l,!1,!0),s[l]=c,e}},(e,t,r)=>{var n,a,i,o=r(11),s=r(25),c=r(24),u=r(74),l=r(85),f=r(52),h=r(38),d=r(40),p=h("iterator"),g=!1;[].keys&&("next"in(i=[].keys())?(a=l(l(i)))!==Object.prototype&&(n=a):g=!0),!c(n)||o((function(){var e={};return n[p].call(e)!==e}))?n={}:d&&(n=u(n)),s(n[p])||f(n,p,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:g}},(e,t,r)=>{var n=r(49).f,a=r(43),i=r(38)("toStringTag");e.exports=function(e,t,r){e&&!r&&(e=e.prototype),e&&!a(e,i)&&n(e,i,{configurable:!0,value:t})}},e=>{e.exports=function(e,t){return{value:e,done:t}}},(e,t,r)=>{var n=r(84),a=r(52),i=r(98);n||a(Object.prototype,"toString",i,{unsafe:!0})},(e,t,r)=>{var n=r(84),a=r(83);e.exports=n?{}.toString:function(){return"[object "+a(this)+"]"}},(e,t,r)=>{r(100)},(e,t,r)=>{r(101)("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(119))},(e,t,r)=>{var n=r(7),a=r(8),i=r(18),o=r(72),s=r(52),c=r(102),u=r(109),l=r(116),f=r(25),h=r(21),d=r(24),p=r(11),g=r(117),v=r(95),y=r(118);e.exports=function(e,t,r){var m=-1!==e.indexOf("Map"),b=-1!==e.indexOf("Weak"),w=m?"set":"add",k=a[e],S=k&&k.prototype,x=k,O={},A=function(e){var t=i(S[e]);s(S,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(b&&!d(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return b&&!d(e)?void 0:t(this,0===e?0:e)}:"has"==e?function(e){return!(b&&!d(e))&&t(this,0===e?0:e)}:function(e,r){return t(this,0===e?0:e,r),this})};if(o(e,!f(k)||!(b||S.forEach&&!p((function(){(new k).entries().next()})))))x=r.getConstructor(t,e,m,w),c.enable();else if(o(e,!0)){var C=new x,F=C[w](b?{}:-0,1)!=C,P=p((function(){C.has(1)})),T=g((function(e){new k(e)})),I=!b&&p((function(){for(var e=new k,t=5;t--;)e[w](t,t);return!e.has(-0)}));T||((x=t((function(e,t){l(e,S);var r=y(new k,e,x);return h(t)||u(t,r[w],{that:r,AS_ENTRIES:m}),r}))).prototype=S,S.constructor=x),(P||I)&&(A("delete"),A("has"),m&&A("get")),(I||F)&&A(w),b&&S.clear&&delete S.clear}return O[e]=x,n({global:!0,constructor:!0,forced:x!=k},O),v(x,e),b||r.setStrong(x,e,m),x}},(e,t,r)=>{var n=r(7),a=r(18),i=r(59),o=r(24),s=r(43),c=r(49).f,u=r(62),l=r(103),f=r(106),h=r(45),d=r(108),p=!1,g=h("meta"),v=0,y=function(e){c(e,g,{value:{objectID:"O"+v++,weakData:{}}})},m=e.exports={enable:function(){m.enable=function(){},p=!0;var e=u.f,t=a([].splice),r={};r[g]=1,e(r).length&&(u.f=function(r){for(var n=e(r),a=0,i=n.length;a{var n=r(19),a=r(16),i=r(62).f,o=r(104),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return s&&"Window"==n(e)?function(e){try{return i(e)}catch(e){return o(s)}}(e):i(a(e))}},(e,t,r)=>{var n=r(65),a=r(68),i=r(105),o=Array,s=Math.max;e.exports=function(e,t,r){for(var c=a(e),u=n(t,c),l=n(void 0===r?c:r,c),f=o(s(l-u,0)),h=0;u{var n=r(22),a=r(49),i=r(15);e.exports=function(e,t,r){var o=n(t);o in e?a.f(e,o,i(0,r)):e[o]=r}},(e,t,r)=>{var n=r(11),a=r(24),i=r(19),o=r(107),s=Object.isExtensible,c=n((function(){s(1)}));e.exports=c||o?function(e){return!!a(e)&&(!o||"ArrayBuffer"!=i(e))&&(!s||s(e))}:s},(e,t,r)=>{var n=r(11);e.exports=n((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},(e,t,r)=>{var n=r(11);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},(e,t,r)=>{var n=r(110),a=r(12),i=r(51),o=r(36),s=r(112),c=r(68),u=r(29),l=r(113),f=r(114),h=r(115),d=TypeError,p=function(e,t){this.stopped=e,this.result=t},g=p.prototype;e.exports=function(e,t,r){var v,y,m,b,w,k,S,x=r&&r.that,O=!(!r||!r.AS_ENTRIES),A=!(!r||!r.IS_RECORD),C=!(!r||!r.IS_ITERATOR),F=!(!r||!r.INTERRUPTED),P=n(t,x),T=function(e){return v&&h(v,"normal",e),new p(!0,e)},I=function(e){return O?(i(e),F?P(e[0],e[1],T):P(e[0],e[1])):F?P(e,T):P(e)};if(A)v=e.iterator;else if(C)v=e;else{if(!(y=f(e)))throw d(o(e)+" is not iterable");if(s(y)){for(m=0,b=c(e);b>m;m++)if((w=I(e[m]))&&u(g,w))return w;return new p(!1)}v=l(e,y)}for(k=A?e.next:v.next;!(S=a(k,v)).done;){try{w=I(S.value)}catch(e){h(v,"throw",e)}if("object"==typeof w&&w&&u(g,w))return w}return new p(!1)}},(e,t,r)=>{var n=r(111),a=r(35),i=r(13),o=n(n.bind);e.exports=function(e,t){return a(e),void 0===t?e:i?o(e,t):function(){return e.apply(t,arguments)}}},(e,t,r)=>{var n=r(19),a=r(18);e.exports=function(e){if("Function"===n(e))return a(e)}},(e,t,r)=>{var n=r(38),a=r(91),i=n("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(a.Array===e||o[i]===e)}},(e,t,r)=>{var n=r(12),a=r(35),i=r(51),o=r(36),s=r(114),c=TypeError;e.exports=function(e,t){var r=arguments.length<2?s(e):t;if(a(r))return i(n(r,e));throw c(o(e)+" is not iterable")}},(e,t,r)=>{var n=r(83),a=r(34),i=r(21),o=r(91),s=r(38)("iterator");e.exports=function(e){if(!i(e))return a(e,s)||a(e,"@@iterator")||o[n(e)]}},(e,t,r)=>{var n=r(12),a=r(51),i=r(34);e.exports=function(e,t,r){var o,s;a(e);try{if(!(o=i(e,"return"))){if("throw"===t)throw r;return r}o=n(o,e)}catch(e){s=!0,o=e}if("throw"===t)throw r;if(s)throw o;return a(o),r}},(e,t,r)=>{var n=r(29),a=TypeError;e.exports=function(e,t){if(n(t,e))return e;throw a("Incorrect invocation")}},(e,t,r)=>{var n=r(38)("iterator"),a=!1;try{var i=0,o={next:function(){return{done:!!i++}},return:function(){a=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!a)return!1;var r=!1;try{var i={};i[n]=function(){return{next:function(){return{done:r=!0}}}},e(i)}catch(e){}return r}},(e,t,r)=>{var n=r(25),a=r(24),i=r(87);e.exports=function(e,t,r){var o,s;return i&&n(o=t.constructor)&&o!==r&&a(s=o.prototype)&&s!==r.prototype&&i(e,s),e}},(e,t,r)=>{var n=r(49).f,a=r(74),i=r(120),o=r(110),s=r(116),c=r(21),u=r(109),l=r(92),f=r(96),h=r(121),d=r(10),p=r(102).fastKey,g=r(56),v=g.set,y=g.getterFor;e.exports={getConstructor:function(e,t,r,l){var f=e((function(e,n){s(e,h),v(e,{type:t,index:a(null),first:void 0,last:void 0,size:0}),d||(e.size=0),c(n)||u(n,e[l],{that:e,AS_ENTRIES:r})})),h=f.prototype,g=y(t),m=function(e,t,r){var n,a,i=g(e),o=b(e,t);return o?o.value=r:(i.last=o={index:a=p(t,!0),key:t,value:r,previous:n=i.last,next:void 0,removed:!1},i.first||(i.first=o),n&&(n.next=o),d?i.size++:e.size++,"F"!==a&&(i.index[a]=o)),e},b=function(e,t){var r,n=g(e),a=p(t);if("F"!==a)return n.index[a];for(r=n.first;r;r=r.next)if(r.key==t)return r};return i(h,{clear:function(){for(var e=g(this),t=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete t[r.index],r=r.next;e.first=e.last=void 0,d?e.size=0:this.size=0},delete:function(e){var t=this,r=g(t),n=b(t,e);if(n){var a=n.next,i=n.previous;delete r.index[n.index],n.removed=!0,i&&(i.next=a),a&&(a.previous=i),r.first==n&&(r.first=a),r.last==n&&(r.last=i),d?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=g(this),n=o(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!b(this,e)}}),i(h,r?{get:function(e){var t=b(this,e);return t&&t.value},set:function(e,t){return m(this,0===e?0:e,t)}}:{add:function(e){return m(this,e=0===e?0:e,e)}}),d&&n(h,"size",{get:function(){return g(this).size}}),f},setStrong:function(e,t,r){var n=t+" Iterator",a=y(t),i=y(n);l(e,t,(function(e,t){v(this,{type:n,target:e,state:a(e),kind:t,last:void 0})}),(function(){for(var e=i(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?f("keys"==t?r.key:"values"==t?r.value:[r.key,r.value],!1):(e.target=void 0,f(void 0,!0))}),r?"entries":"values",!r,!0),h(t)}}},(e,t,r)=>{var n=r(52);e.exports=function(e,t,r){for(var a in t)n(e,a,t[a],r);return e}},(e,t,r)=>{var n=r(28),a=r(49),i=r(38),o=r(10),s=i("species");e.exports=function(e){var t=n(e),r=a.f;o&&t&&!t[s]&&r(t,s,{configurable:!0,get:function(){return this}})}},(e,t,r)=>{r(123)},(e,t,r)=>{r(101)("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(119))},(e,t,r)=>{var n,a=r(40),i=r(7),o=r(8),s=r(28),c=r(18),u=r(11),l=r(45),f=r(25),h=r(125),d=r(21),p=r(24),g=r(27),v=r(109),y=r(51),m=r(83),b=r(43),w=r(105),k=r(48),S=r(68),x=r(126),O=r(127),A=r(129),C=r(32),F=r(130),P=r(131),T=r(132),I=o.Object,E=o.Date,j=o.Error,M=o.EvalError,_=o.RangeError,L=o.ReferenceError,R=o.SyntaxError,N=o.TypeError,D=o.URIError,B=o.PerformanceMark,U=o.WebAssembly,$=U&&U.CompileError||j,X=U&&U.LinkError||j,H=U&&U.RuntimeError||j,q=s("DOMException"),G=s("Set"),z=s("Map"),W=z.prototype,V=c(W.has),Y=c(W.get),K=c(W.set),J=c(G.prototype.add),Z=s("Object","keys"),Q=c([].push),ee=c((!0).valueOf),te=c(1..valueOf),re=c("".valueOf),ne=c(E.prototype.getTime),ae=l("structuredClone"),ie="DataCloneError",oe="Transferring",se=function(e){return!u((function(){var t=new o.Set([7]),r=e(t),n=e(I(7));return r==t||!r.has(7)||"object"!=typeof n||7!=n}))&&e},ce=function(e,t){return!u((function(){var r=new t,n=e({a:r,b:r});return!(n&&n.a===n.b&&n.a instanceof t&&n.a.stack===r.stack)}))},ue=o.structuredClone,le=a||!ce(ue,j)||!ce(ue,q)||(n=ue,!!u((function(){var e=n(new o.AggregateError([1],ae,{cause:3}));return"AggregateError"!=e.name||1!=e.errors[0]||e.message!=ae||3!=e.cause}))),fe=!ue&&se((function(e){return new B(ae,{detail:e}).detail})),he=se(ue)||fe,de=function(e){throw new q("Uncloneable type: "+e,ie)},pe=function(e,t){throw new q((t||"Cloning")+" of "+e+" cannot be properly polyfilled in this engine",ie)},ge=function(e,t){if(g(e)&&de("Symbol"),!p(e))return e;if(t){if(V(t,e))return Y(t,e)}else t=new z;var r,n,a,i,c,u,l,h,d,v,y=m(e),x=!1;switch(y){case"Array":a=[],x=!0;break;case"Object":a={},x=!0;break;case"Map":a=new z,x=!0;break;case"Set":a=new G,x=!0;break;case"RegExp":a=new RegExp(e.source,O(e));break;case"Error":switch(n=e.name){case"AggregateError":a=s("AggregateError")([]);break;case"EvalError":a=M();break;case"RangeError":a=_();break;case"ReferenceError":a=L();break;case"SyntaxError":a=R();break;case"TypeError":a=N();break;case"URIError":a=D();break;case"CompileError":a=$();break;case"LinkError":a=X();break;case"RuntimeError":a=H();break;default:a=j()}x=!0;break;case"DOMException":a=new q(e.message,e.name),x=!0;break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":r=o[y],p(r)||pe(y),a=new r(ge(e.buffer,t),e.byteOffset,"DataView"===y?e.byteLength:e.length);break;case"DOMQuad":try{a=new DOMQuad(ge(e.p1,t),ge(e.p2,t),ge(e.p3,t),ge(e.p4,t))}catch(t){he?a=he(e):pe(y)}break;case"FileList":if(i=function(){var e;try{e=new o.DataTransfer}catch(t){try{e=new o.ClipboardEvent("").clipboardData}catch(e){}}return e&&e.items&&e.files?e:null}()){for(c=0,u=S(e);c92||T&&C>94||F&&C>97)return!1;var e=new ArrayBuffer(8),t=ue(e,{transfer:[e]});return 0!=e.byteLength||8!=t.byteLength}));i({global:!0,enumerable:!0,sham:!ve,forced:le},{structuredClone:function(e){var t,r=x(arguments.length,1)>1&&!d(arguments[1])?y(arguments[1]):void 0,n=r?r.transfer:void 0;return void 0!==n&&function(e,t){if(!p(e))throw N("Transfer option cannot be converted to a sequence");var r=[];v(e,(function(e){Q(r,y(e))}));var n,a,i,s,c,u,l=0,d=S(r);if(ve)for(s=ue(r,{transfer:r});l{var n=r(18),a=r(11),i=r(25),o=r(83),s=r(28),c=r(55),u=function(){},l=[],f=s("Reflect","construct"),h=/^\\s*(?:class|function)\\b/,d=n(h.exec),p=!h.exec(u),g=function(e){if(!i(e))return!1;try{return f(u,l,e),!0}catch(e){return!1}},v=function(e){if(!i(e))return!1;switch(o(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return p||!!d(h,c(e))}catch(e){return!0}};v.sham=!0,e.exports=!f||a((function(){var e;return g(g.call)||!g(Object)||!g((function(){e=!0}))||e}))?v:g},e=>{var t=TypeError;e.exports=function(e,r){if(e{var n=r(12),a=r(43),i=r(29),o=r(128),s=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in s||a(e,"flags")||!i(s,e)?t:n(o,e)}},(e,t,r)=>{var n=r(51);e.exports=function(){var e=n(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},(e,t,r)=>{var n=r(11),a=r(15);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",a(1,7)),7!==e.stack)}))},(e,t,r)=>{var n=r(131),a=r(132);e.exports=!n&&!a&&"object"==typeof window&&"object"==typeof document},e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},(e,t,r)=>{var n=r(19),a=r(8);e.exports="process"==n(a.process)},(e,t,r)=>{var n=r(8);e.exports=n},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.RefSetCache=t.RefSet=t.Ref=t.Name=t.EOF=t.Dict=t.Cmd=t.CIRCULAR_REF=void 0,t.clearPrimitiveCaches=function(){b._clearCache(),y._clearCache(),x._clearCache()},t.isCmd=function(e,t){return e instanceof b&&(void 0===t||e.cmd===t)},t.isDict=function(e,t){return e instanceof k&&(void 0===t||C(e.get("Type"),t))},t.isName=C,t.isRefsEqual=function(e,t){return e.num===t.num&&e.gen===t.gen};var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||s(e,t)||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 o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function l(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:null;f(this,e),this._map=Object.create(null),this.xref=t,this.objId=null,this.suppressEncryption=!1,this.__nonSerializable__=w}var t,r;return d(e,[{key:"assignXref",value:function(e){this.xref=e}},{key:"size",get:function(){return Object.keys(this._map).length}},{key:"get",value:function(e,t,r){var n=this._map[e];return void 0===n&&void 0!==t&&void 0===(n=this._map[t])&&void 0!==r&&(n=this._map[r]),n instanceof x&&this.xref?this.xref.fetch(n,this.suppressEncryption):n}},{key:"getAsync",value:(t=u().mark((function e(t,r,n){var a;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0===(a=this._map[t])&&void 0!==r&&void 0===(a=this._map[r])&&void 0!==n&&(a=this._map[n]),!(a instanceof x&&this.xref)){e.next=4;break}return e.abrupt("return",this.xref.fetchAsync(a,this.suppressEncryption));case 4:return e.abrupt("return",a);case 5:case"end":return e.stop()}}),e,this)})),r=function(){var e=this,r=arguments;return new Promise((function(n,a){var i=t.apply(e,r);function o(e){l(i,n,a,o,s,"next",e)}function s(e){l(i,n,a,o,s,"throw",e)}o(void 0)}))},function(e,t,n){return r.apply(this,arguments)})},{key:"getArray",value:function(e,t,r){var n=this._map[e];if(void 0===n&&void 0!==t&&void 0===(n=this._map[t])&&void 0!==r&&(n=this._map[r]),n instanceof x&&this.xref&&(n=this.xref.fetch(n,this.suppressEncryption)),Array.isArray(n))for(var a=0,i=(n=n.slice()).length;a0&&(u._map[S]=A)}else u._map[S]=x[0]}}catch(e){w.e(e)}finally{w.f()}return l.clear(),u.size>0?u:e.empty}}]),e}();t.Dict=k;var S,x=(S=Object.create(null),function(){function e(t,r){f(this,e),this.num=t,this.gen=r}return d(e,[{key:"toString",value:function(){return 0===this.gen?"".concat(this.num,"R"):"".concat(this.num,"R").concat(this.gen)}}],[{key:"get",value:function(t,r){var n=0===r?"".concat(t,"R"):"".concat(t,"R").concat(r);return S[n]||(S[n]=new e(t,r))}},{key:"_clearCache",value:function(){S=Object.create(null)}}]),e}());t.Ref=x;var O=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;f(this,t),this._set=new Set(e&&e._set)}return d(t,[{key:"has",value:function(e){return this._set.has(e.toString())}},{key:"put",value:function(e){this._set.add(e.toString())}},{key:"remove",value:function(e){this._set.delete(e.toString())}},{key:Symbol.iterator,value:function(){return this._set.values()}},{key:"clear",value:function(){this._set.clear()}}]),t}();t.RefSet=O;var A=function(e){function t(){f(this,t),this._map=new Map}return d(t,[{key:"size",get:function(){return this._map.size}},{key:"get",value:function(e){return this._map.get(e.toString())}},{key:"has",value:function(e){return this._map.has(e.toString())}},{key:"put",value:function(e,t){this._map.set(e.toString(),t)}},{key:"putAlias",value:function(e,t){this._map.set(e.toString(),this.get(t))}},{key:Symbol.iterator,value:function(){return this._map.values()}},{key:"clear",value:function(){this._map.clear()}}]),t}();function C(e,t){return e instanceof y&&(void 0===t||e.name===t)}t.RefSetCache=A},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XRefParseException=t.XRefEntryException=t.ParserEOFException=t.PDF_VERSION_REGEXP=t.MissingDataException=t.DocStats=void 0,t.collectActions=function(e,t,r){var n=Object.create(null),o=S({dict:t,key:"AA",stopWhenFound:!1});if(o)for(var c=o.length-1;c>=0;c--){var u=o[c];if(u instanceof i.Dict){var l,f=s(u.getKeys());try{for(f.s();!(l=f.n()).done;){var h=l.value,d=r[h];if(d){var p=u.getRaw(h),g=new i.RefSet,v=[];O(p,e,v,g),v.length>0&&(n[d]=v)}}}catch(e){f.e(e)}finally{f.f()}}}if(t.has("A")){var y=[];O(t.get("A"),e,y,new i.RefSet),y.length>0&&(n.Action=y)}return(0,a.objectSize)(n)>0?n:null},t.encodeToXmlString=function(e){for(var t=[],r=0,n=0,a=e.length;n55295&&(i<57344||i>65533)&&n++,r=n+1}return 0===t.length?e:(r126||35===i||40===i||41===i||60===i||62===i||91===i||93===i||123===i||125===i||47===i||37===i)&&(r0?n:null},t.getRotationMatrix=function(e,t,r){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,r];case 270:return[0,-1,1,0,0,r];default:throw new Error("Invalid rotation")}},t.isAscii=function(e){return/^[\\x00-\\x7F]*$/.test(e)},t.isWhiteSpace=function(e){return 32===e||9===e||13===e||10===e},t.log2=function(e){return e<=0?0:Math.ceil(Math.log2(e))},t.numberToString=function(e){if(Number.isInteger(e))return e.toString();var t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)},t.parseXFAPath=function(e){var t=/(.+)\\[(\\d+)\\]$/;return e.split(".").map((function(e){var r=e.match(t);return r?{name:r[1],pos:parseInt(r[2],10)}:{name:e,pos:0}}))},t.readInt8=function(e,t){return e[t]<<24>>24},t.readUint16=function(e,t){return e[t]<<8|e[t+1]},t.readUint32=function(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0},t.recoverJsURL=function(e){var t=new RegExp("^\\\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").split(".").join("\\\\.")+")\\\\((?:'|\\")([^'\\"]*)(?:'|\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))","i").exec(e);if(t&&t[2]){var r=t[2],n=!1;return"true"===t[3]&&"app.launchURL"===t[1]&&(n=!0),{url:r,newWindow:n}}return null},t.stringToUTF16HexString=function(e){for(var t=[],r=0,n=e.length;r>8&255).toString(16).padStart(2,"0"),(255&a).toString(16).padStart(2,"0"))}return t.join("")},t.stringToUTF16String=function(e){var t=[];arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&t.push("þÿ");for(var r=0,n=e.length;r>8&255),String.fromCharCode(255&a))}return t.join("")},t.toRomanNumerals=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,a.assert)(Number.isInteger(e)&&e>0,"The number should be a positive integer.");for(var r,n=[];e>=1e3;)e-=1e3,n.push("M");r=e/100|0,e%=100,n.push(x[r]),r=e/10|0,e%=10,n.push(x[10+r]),n.push(x[20+e]);var i=n.join("");return t?i.toLowerCase():i},t.validateCSSFont=function(e){var t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),r=e.fontFamily,n=e.fontWeight,i=e.italicAngle;if(/^".*"$/.test(r)){if(/[^\\\\]"/.test(r.slice(1,r.length-1)))return(0,a.warn)('XFA - FontFamily contains some unescaped ": '.concat(r,".")),!1}else if(/^'.*'$/.test(r)){if(/[^\\\\]'/.test(r.slice(1,r.length-1)))return(0,a.warn)("XFA - FontFamily contains some unescaped ': ".concat(r,".")),!1}else{var o,c=s(r.split(/[ \\t]+/));try{for(c.s();!(o=c.n()).done;){var u=o.value;if(/^(\\d|(-(\\d|-)))/.test(u)||!/^[\\w-\\\\]+$/.test(u))return(0,a.warn)("XFA - FontFamily contains some invalid : ".concat(r,".")),!1}}catch(e){c.e(e)}finally{c.f()}}var l=n?n.toString():"";e.fontWeight=t.has(l)?l:"400";var f=parseFloat(i);return e.italicAngle=isNaN(f)||f<-90||f>90?"14":i.toString(),!0};var a=r(2),i=r(134),o=r(136);function s(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=c(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function c(e,t){if(e){if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseStream=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.NetworkPdfManager=t.LocalPdfManager=void 0;var n=r(2),a=r(138),i=r(135),o=r(140),s=r(139);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=h(e);if(t){var a=h(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===d(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return f(e)}(this,r)}}function f(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function p(){p=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=h.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==d(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function g(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function v(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){g(i,n,a,o,s,"next",e)}function s(e){g(i,n,a,o,s,"throw",e)}o(void 0)}))}}function y(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m(e,t){for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];return this.pdfDocument.cleanup(e)}},{key:"ensure",value:(t=v(p().mark((function e(t,r,a){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(0,n.unreachable)("Abstract method \`ensure\` called");case 1:case"end":return e.stop()}}),e)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"requestRange",value:function(e,t){(0,n.unreachable)("Abstract method \`requestRange\` called")}},{key:"requestLoadedStream",value:function(){(0,n.unreachable)("Abstract method \`requestLoadedStream\` called")}},{key:"sendProgressiveData",value:function(e){(0,n.unreachable)("Abstract method \`sendProgressiveData\` called")}},{key:"updatePassword",value:function(e){this._password=e}},{key:"terminate",value:function(e){(0,n.unreachable)("Abstract method \`terminate\` called")}}]),e}(),S=function(e){c(n,e);var t,r=l(n);function n(e,t,a,i,c,u,l){var h;y(this,n),(h=r.call(this))._docId=e,h._password=a,h._docBaseUrl=w(l),h.msgHandler=i,h.evaluatorOptions=c,h.enableXfa=u;var d=new s.Stream(t);return h.pdfDocument=new o.PDFDocument(f(h),d),h._loadedStreamPromise=Promise.resolve(d),h}return b(n,[{key:"ensure",value:(t=v(p().mark((function e(t,r,n){var a;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("function"!=typeof(a=t[r])){e.next=3;break}return e.abrupt("return",a.apply(t,n));case 3:return e.abrupt("return",a);case 4:case"end":return e.stop()}}),e)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"requestRange",value:function(e,t){return Promise.resolve()}},{key:"requestLoadedStream",value:function(){return this._loadedStreamPromise}},{key:"terminate",value:function(e){}}]),n}(k);t.LocalPdfManager=S;var x=function(e){c(n,e);var t,r=l(n);function n(e,t,i,s,c,u){var l;return y(this,n),(l=r.call(this))._docId=e,l._password=i.password,l._docBaseUrl=w(u),l.msgHandler=i.msgHandler,l.evaluatorOptions=s,l.enableXfa=c,l.streamManager=new a.ChunkedStreamManager(t,{msgHandler:i.msgHandler,length:i.length,disableAutoFetch:i.disableAutoFetch,rangeChunkSize:i.rangeChunkSize}),l.pdfDocument=new o.PDFDocument(f(l),l.streamManager.getStream()),l}return b(n,[{key:"ensure",value:(t=v(p().mark((function e(t,r,n){var a;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,"function"!=typeof(a=t[r])){e.next=4;break}return e.abrupt("return",a.apply(t,n));case 4:return e.abrupt("return",a);case 7:if(e.prev=7,e.t0=e.catch(0),e.t0 instanceof i.MissingDataException){e.next=11;break}throw e.t0;case 11:return e.next=13,this.requestRange(e.t0.begin,e.t0.end);case 13:return e.abrupt("return",this.ensure(t,r,n));case 14:case"end":return e.stop()}}),e,this,[[0,7]])}))),function(e,r,n){return t.apply(this,arguments)})},{key:"requestRange",value:function(e,t){return this.streamManager.requestRange(e,t)}},{key:"requestLoadedStream",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.streamManager.requestAllChunks(e)}},{key:"sendProgressiveData",value:function(e){this.streamManager.onReceiveData({chunk:e})}},{key:"terminate",value:function(e){this.streamManager.abort(e)}}]),n}(k);t.NetworkPdfManager=x},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ChunkedStreamManager=t.ChunkedStream=void 0;var a=r(2),i=r(135);function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.end?this.numChunks:Math.floor(t/this.chunkSize),a=r;athis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new i.MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}}},{key:"ensureRange",value:function(e,t){if(!(e>=t||t<=this.progressiveDataLength)){var r=Math.floor(e/this.chunkSize);if(!(r>this.numChunks))for(var n=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks),a=r;a=this.end?-1:(e>=this.progressiveDataLength&&this.ensureByte(e),this.bytes[this.pos++])}},{key:"getBytes",value:function(e){var t=this.bytes,r=this.pos,n=this.end;if(!e)return n>this.progressiveDataLength&&this.ensureRange(r,n),t.subarray(r,n);var a=r+e;return a>n&&(a=n),a>this.progressiveDataLength&&this.ensureRange(r,a),this.pos=a,t.subarray(r,a)}},{key:"getByteRange",value:function(e,t){return e<0&&(e=0),t>this.end&&(t=this.end),t>this.progressiveDataLength&&this.ensureRange(e,t),this.bytes.subarray(e,t)}},{key:"makeSubStream",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;function n(){}t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e),n.prototype=Object.create(this),n.prototype.getMissingChunks=function(){for(var e=this.chunkSize,t=Math.floor(this.start/e),r=Math.floor((this.end-1)/e)+1,n=[],a=t;a0&&void 0!==arguments[0]&&arguments[0])){var e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}},{key:"_requestChunks",value:function(e){var t=this,r=this.currRequestId++,n=new Set;this._chunksNeededByRequest.set(r,n);var i,s=o(e);try{for(s.s();!(i=s.n()).done;){var c=i.value;this.stream.hasChunk(c)||n.add(c)}}catch(e){s.e(e)}finally{s.f()}if(0===n.size)return Promise.resolve();var u=(0,a.createPromiseCapability)();this._promisesByRequest.set(r,u);var l,f=[],h=o(n);try{for(h.s();!(l=h.n()).done;){var d=l.value,p=this._requestsByChunk.get(d);p||(p=[],this._requestsByChunk.set(d,p),f.push(d)),p.push(r)}}catch(e){h.e(e)}finally{h.f()}if(f.length>0){var g,v=o(this.groupChunks(f));try{for(v.s();!(g=v.n()).done;){var y=g.value,m=y.beginChunk*this.chunkSize,b=Math.min(y.endChunk*this.chunkSize,this.length);this.sendRequest(m,b).catch(u.reject)}}catch(e){v.e(e)}finally{v.f()}}return u.promise.catch((function(e){if(!t.aborted)throw e}))}},{key:"getStream",value:function(){return this.stream}},{key:"requestRange",value:function(e,t){t=Math.min(t,this.length);for(var r=this.getBeginChunk(e),n=this.getEndChunk(t),a=[],i=r;i0&&void 0!==arguments[0]?arguments[0]:[]);try{for(r.s();!(e=r.n()).done;)for(var n=e.value,a=this.getBeginChunk(n.begin),i=this.getEndChunk(n.end),s=a;s=0&&n+1!==o&&(t.push({beginChunk:r,endChunk:n+1}),r=o),a+1===e.length&&t.push({beginChunk:r,endChunk:o+1}),n=o}return t}},{key:"onProgress",value:function(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}},{key:"onReceiveData",value:function(e){var t=e.chunk,r=void 0===e.begin,n=r?this.progressiveDataLength:e.begin,a=n+t.byteLength,i=Math.floor(n/this.chunkSize),s=a0||c.push(d)}}catch(e){h.e(e)}finally{h.f()}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){var g;if(1===this.stream.numChunksLoaded){var v=this.stream.numChunks-1;this.stream.hasChunk(v)||(g=v)}else g=this.stream.nextEmptyChunk(s);Number.isInteger(g)&&this._requestChunks([g])}for(var y=0,m=c;y{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.StringStream=t.Stream=t.NullStream=void 0;var a=r(136),i=r(2);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r=this.end?-1:this.bytes[this.pos++]}},{key:"getBytes",value:function(e){var t=this.bytes,r=this.pos,n=this.end;if(!e)return t.subarray(r,n);var a=r+e;return a>n&&(a=n),this.pos=a,t.subarray(r,a)}},{key:"getByteRange",value:function(e,t){return e<0&&(e=0),t>this.end&&(t=this.end),this.bytes.subarray(e,t)}},{key:"reset",value:function(){this.pos=this.start}},{key:"moveStart",value:function(){this.start=this.pos}},{key:"makeSubStream",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return new r(this.bytes.buffer,e,t,n)}}]),r}(a.BaseStream);t.Stream=d;var p=function(e){u(r,e);var t=f(r);function r(e){return o(this,r),t.call(this,(0,i.stringToBytes)(e))}return c(r)}(d);t.StringStream=p;var g=function(e){u(r,e);var t=f(r);function r(){return o(this,r),t.call(this,new Uint8Array(0))}return c(r)}(d);t.NullStream=g},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Page=t.PDFDocument=void 0;var n=r(141),a=r(2),i=r(135),o=r(134),s=r(180),c=r(136),u=r(196),l=r(198),f=r(200),h=r(229),d=r(146),p=r(139),g=r(204),v=r(191),y=r(144),m=r(148),b=r(203),w=r(194),k=r(205),S=r(230);function x(e){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x(e)}function O(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||P(e,t)||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 A(){A=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:k(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function p(){}var g={};c(g,i,(function(){return this}));var v=Object.getPrototypeOf,y=v&&v(v(P([])));y&&y!==t&&r.call(y,i)&&(g=y);var m=p.prototype=h.prototype=Object.create(g);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==x(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function k(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function C(e){return function(e){if(Array.isArray(e))return T(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||P(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function F(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=P(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function P(e,t){if(e){if("string"==typeof e)return T(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?T(e,t):void 0}}function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]&&arguments[1],r=(0,i.getInheritableProperty)({dict:this.pageDict,key:e,getArray:t,stopWhenFound:!1});return Array.isArray(r)?1!==r.length&&r[0]instanceof o.Dict?o.Dict.merge({xref:this.xref,dictArray:r}):r[0]:r}},{key:"content",get:function(){return this.pageDict.getArray("Contents")}},{key:"resources",get:function(){var e=this._getInheritableProperty("Resources");return(0,a.shadow)(this,"resources",e instanceof o.Dict?e:o.Dict.empty)}},{key:"_getBoundingBox",value:function(e){if(this.xfaData)return this.xfaData.bbox;var t=this._getInheritableProperty(e,!0);if(Array.isArray(t)&&4===t.length){if((t=a.Util.normalizeRect(t))[2]-t[0]>0&&t[3]-t[1]>0)return t;(0,a.warn)("Empty, or invalid, /".concat(e," entry."))}return null}},{key:"mediaBox",get:function(){return(0,a.shadow)(this,"mediaBox",this._getBoundingBox("MediaBox")||N)}},{key:"cropBox",get:function(){return(0,a.shadow)(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}},{key:"userUnit",get:function(){var e=this.pageDict.get("UserUnit");return("number"!=typeof e||e<=0)&&(e=1),(0,a.shadow)(this,"userUnit",e)}},{key:"view",get:function(){var e=this.cropBox,t=this.mediaBox;if(e!==t&&!(0,a.isArrayEqual)(e,t)){var r=a.Util.intersect(e,t);if(r&&r[2]-r[0]>0&&r[3]-r[1]>0)return(0,a.shadow)(this,"view",r);(0,a.warn)("Empty /CropBox and /MediaBox intersection.")}return(0,a.shadow)(this,"view",t)}},{key:"rotate",get:function(){var e=this._getInheritableProperty("Rotate")||0;return e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360),(0,a.shadow)(this,"rotate",e)}},{key:"_onSubStreamError",value:function(e,t,r){if(this.evaluatorOptions.ignoreErrors)return e.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorContentSubStream}),void(0,a.warn)("getContentStream - ignoring sub-stream (".concat(r,'): "').concat(t,'".'));throw t}},{key:"getContentStream",value:function(e){var t=this;return this.pdfManager.ensure(this,"content").then((function(r){return r instanceof c.BaseStream?r:Array.isArray(r)?new m.StreamsSequenceStream(r,t._onSubStreamError.bind(t,e)):new p.NullStream}))}},{key:"xfaData",get:function(){return(0,a.shadow)(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}},{key:"saveNewAnnotations",value:(s=E(A().mark((function e(t,r,a){var i,o,s,c,u,l,f,h,d,p,g;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.xfaFactory){e.next=2;break}throw new Error("XFA: Cannot save new annotations.");case 2:return i=new y.PartialEvaluator({xref:this.xref,handler:t,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions}),o=this.pageDict,s=this.annotations.slice(),e.next=7,n.AnnotationFactory.saveNewAnnotations(i,r,a);case 7:c=e.sent,u=F(c.annotations);try{for(u.s();!(l=u.n()).done;)f=l.value.ref,s.push(f)}catch(e){u.e(e)}finally{u.f()}return h=o.get("Annots"),o.set("Annots",s),d=[],p=null,this.xref.encrypt&&(p=this.xref.encrypt.createCipherTransform(this.ref.num,this.ref.gen)),(0,w.writeObject)(this.ref,o,d,p),h&&o.set("Annots",h),(g=c.dependencies).push.apply(g,[{ref:this.ref,data:d.join("")}].concat(C(c.annotations))),e.abrupt("return",g);case 20:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return s.apply(this,arguments)})},{key:"save",value:function(e,t,r){var n=new y.PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions});return this._parsedAnnotations.then((function(e){var i,o=[],s=F(e);try{for(s.s();!(i=s.n()).done;){var c=i.value;c.mustBePrinted(r)&&o.push(c.save(n,t,r).catch((function(e){return(0,a.warn)("save - ignoring annotation data during "+'"'.concat(t.name,'" task: "').concat(e,'".')),null})))}}catch(e){s.e(e)}finally{s.f()}return Promise.all(o).then((function(e){return e.filter((function(e){return!!e}))}))}))}},{key:"loadResources",value:function(e){var t=this;return this.resourcesPromise||(this.resourcesPromise=this.pdfManager.ensure(this,"resources")),this.resourcesPromise.then((function(){return new g.ObjectLoader(t.resources,e,t.xref).load()}))}},{key:"getOperatorList",value:function(e){var t=this,r=e.handler,o=e.sink,s=e.task,c=e.intent,u=e.cacheKey,l=e.annotationStorage,f=void 0===l?null:l,h=this.getContentStream(r),d=this.loadResources(["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"]),p=new y.PartialEvaluator({xref:this.xref,handler:r,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions}),g=this.xfaFactory?null:(0,i.getNewAnnotationsMap)(f),m=Promise.resolve(null);if(g){var b=g.get(this.pageIndex);b&&(m=n.AnnotationFactory.printNewAnnotations(p,s,b))}var w=Promise.all([h,d]).then((function(e){var n=O(e,1)[0],a=new v.OperatorList(c,o);return r.send("StartRenderPage",{transparency:p.hasBlendModes(t.resources,t.nonBlendModesSet),pageIndex:t.pageIndex,cacheKey:u}),p.getOperatorList({stream:n,task:s,resources:t.resources,operatorList:a}).then((function(){return a}))}));return Promise.all([w,this._parsedAnnotations,m]).then((function(e){var t=O(e,3),r=t[0],n=t[1],i=t[2];if(i&&(n=n.concat(i)),0===n.length||c&a.RenderingIntentFlag.ANNOTATIONS_DISABLE)return r.flush(!0),{length:r.totalLength};var o,u=!!(c&a.RenderingIntentFlag.ANNOTATIONS_FORMS),l=!!(c&a.RenderingIntentFlag.ANY),h=!!(c&a.RenderingIntentFlag.DISPLAY),d=!!(c&a.RenderingIntentFlag.PRINT),g=[],v=F(n);try{for(v.s();!(o=v.n()).done;){var y=o.value;(l||h&&y.mustBeViewed(f)||d&&y.mustBePrinted(f))&&g.push(y.getOperatorList(p,s,c,u,f).catch((function(e){return(0,a.warn)("getOperatorList - ignoring annotation data during "+'"'.concat(s.name,'" task: "').concat(e,'".')),{opList:null,separateForm:!1,separateCanvas:!1}})))}}catch(e){v.e(e)}finally{v.f()}return Promise.all(g).then((function(e){var t,n=!1,a=!1,i=F(e);try{for(i.s();!(t=i.n()).done;){var o=t.value,s=o.opList,c=o.separateForm,u=o.separateCanvas;r.addOpList(s),c&&(n=c),u&&(a=u)}}catch(e){i.e(e)}finally{i.f()}return r.flush(!0,{form:n,canvas:a}),{length:r.totalLength}}))}))}},{key:"extractTextContent",value:function(e){var t=this,r=e.handler,n=e.task,a=e.includeMarkedContent,i=e.sink,o=e.combineTextItems,s=this.getContentStream(r),c=this.loadResources(["ExtGState","Font","Properties","XObject"]);return Promise.all([s,c]).then((function(e){var s=O(e,1)[0];return new y.PartialEvaluator({xref:t.xref,handler:r,pageIndex:t.pageIndex,idFactory:t._localIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalImageCache:t.globalImageCache,options:t.evaluatorOptions}).getTextContent({stream:s,task:n,resources:t.resources,includeMarkedContent:a,combineTextItems:o,sink:i,viewBox:t.view})}))}},{key:"getStructTree",value:(r=E(A().mark((function e(){var t,r;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.pdfManager.ensureCatalog("structTreeRoot");case 2:if(t=e.sent){e.next=5;break}return e.abrupt("return",null);case 5:return e.next=7,this.pdfManager.ensure(this,"_parseStructTree",[t]);case 7:return r=e.sent,e.abrupt("return",r.serializable);case 9:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"_parseStructTree",value:function(e){var t=new b.StructTreePage(e,this.pageDict);return t.parse(),t}},{key:"getAnnotationsData",value:(t=E(A().mark((function e(t,r,n){var i,o,s,c,u,l,f,h,d,p,g;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._parsedAnnotations;case 2:if(0!==(i=e.sent).length){e.next=5;break}return e.abrupt("return",[]);case 5:o=[],s=[],u=!!(n&a.RenderingIntentFlag.ANY),l=!!(n&a.RenderingIntentFlag.DISPLAY),f=!!(n&a.RenderingIntentFlag.PRINT),h=F(i);try{for(h.s();!(d=h.n()).done;)p=d.value,((g=u||l&&p.viewable)||f&&p.printable)&&s.push(p.data),p.hasTextContent&&g&&(c||(c=new y.PartialEvaluator({xref:this.xref,handler:t,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions})),o.push(p.extractTextContent(c,r,this.view).catch((function(e){(0,a.warn)('getAnnotationsData - ignoring textContent during "'.concat(r.name,'" task: "').concat(e,'".'))}))))}catch(e){h.e(e)}finally{h.f()}return e.next=12,Promise.all(o);case 12:return e.abrupt("return",s);case 13:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"annotations",get:function(){var e=this._getInheritableProperty("Annots");return(0,a.shadow)(this,"annotations",Array.isArray(e)?e:[])}},{key:"_parsedAnnotations",get:function(){var e=this,t=this.pdfManager.ensure(this,"annotations").then((function(){var t,r=[],i=F(e.annotations);try{for(i.s();!(t=i.n()).done;){var o=t.value;r.push(n.AnnotationFactory.create(e.xref,o,e.pdfManager,e._localIdFactory,!1).catch((function(e){return(0,a.warn)('_parsedAnnotations: "'.concat(e,'".')),null})))}}catch(e){i.e(e)}finally{i.f()}return Promise.all(r).then((function(e){if(0===e.length)return e;var t,r,a=[],i=F(e);try{for(i.s();!(r=i.n()).done;){var o=r.value;o&&(o instanceof n.PopupAnnotation?(t||(t=[]),t.push(o)):a.push(o))}}catch(e){i.e(e)}finally{i.f()}return t&&a.push.apply(a,C(t)),a}))}));return(0,a.shadow)(this,"_parsedAnnotations",t)}},{key:"jsActions",get:function(){var e=(0,i.collectActions)(this.xref,this.pageDict,a.PageActionEventType);return(0,a.shadow)(this,"jsActions",e)}}]),e}();t.Page=D;var B=new Uint8Array([37,80,68,70,45]),U=new Uint8Array([115,116,97,114,116,120,114,101,102]),$=new Uint8Array([101,110,100,111,98,106]);function X(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1024,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=t.length,i=e.peekBytes(r),o=i.length-a;if(o<=0)return!1;if(n)for(var s=a-1,c=i.length-1;c>=s;){for(var u=0;u=a)return e.pos+=c-s,!0;c--}else for(var l=0;l<=o;){for(var f=0;f=a)return e.pos+=l,!0;l++}return!1}var H=function(){function e(t,r){if(_(this,e),r.length<=0)throw new a.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=t,this.stream=r,this.xref=new S.XRef(r,t),this._pagePromises=new Map,this._version=null;var n={font:0};this._globalIdFactory=function(){function e(){_(this,e)}return R(e,null,[{key:"getDocId",value:function(){return"g_".concat(t.docId)}},{key:"createFontId",value:function(){return"f".concat(++n.font)}},{key:"createObjId",value:function(){(0,a.unreachable)("Abstract method \`createObjId\` called.")}},{key:"getPageObjId",value:function(){(0,a.unreachable)("Abstract method \`getPageObjId\` called.")}}]),e}()}var t,r,p,m,b,w,C,P;return R(e,[{key:"parse",value:function(e){this.xref.parse(e),this.catalog=new l.Catalog(this.pdfManager,this.xref)}},{key:"linearization",get:function(){var e=null;try{e=d.Linearization.create(this.stream)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,a.info)(e)}return(0,a.shadow)(this,"linearization",e)}},{key:"startXRef",get:function(){var e=this.stream,t=0;if(this.linearization)e.reset(),X(e,$)&&(t=e.pos+6-e.start);else{for(var r=U.length,n=!1,o=e.end;!n&&o>0;)(o-=1024-r)<0&&(o=0),e.pos=o,n=X(e,U,1024,!0);if(n){var s;e.skip(9);do{s=e.getByte()}while((0,i.isWhiteSpace)(s));for(var c="";s>=32&&s<=57;)c+=String.fromCharCode(s),s=e.getByte();t=parseInt(c,10),isNaN(t)&&(t=0)}}return(0,a.shadow)(this,"startXRef",t)}},{key:"checkHeader",value:function(){var e=this.stream;if(e.reset(),X(e,B)){e.moveStart(),e.skip(B.length);for(var t,r="";(t=e.getByte())>32&&r.length<7;)r+=String.fromCharCode(t);i.PDF_VERSION_REGEXP.test(r)?this._version=r:(0,a.warn)("Invalid PDF header version: ".concat(r))}}},{key:"parseStartXRef",value:function(){this.xref.setStartXRef(this.startXRef)}},{key:"numPages",get:function(){var e;return e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages,(0,a.shadow)(this,"numPages",e)}},{key:"_hasOnlyDocumentSignatures",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return!!Array.isArray(e)&&e.every((function(e){if(!((e=t.xref.fetchIfRef(e))instanceof o.Dict))return!1;if(e.has("Kids"))return++r>10?((0,a.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"),!1):t._hasOnlyDocumentSignatures(e.get("Kids"),r);var n=(0,o.isName)(e.get("FT"),"Sig"),i=e.get("Rect"),s=Array.isArray(i)&&i.every((function(e){return 0===e}));return n&&s}))}},{key:"_xfaStreams",get:function(){var e=this.catalog.acroForm;if(!e)return null;var t=e.get("XFA"),r={"xdp:xdp":"",template:"",datasets:"",config:"",connectionSet:"",localeSet:"",stylesheet:"","/xdp:xdp":""};if(t instanceof c.BaseStream&&!t.isEmpty)return r["xdp:xdp"]=t,r;if(!Array.isArray(t)||0===t.length)return null;for(var n=0,a=t.length;n0;e.hasFields=n;var o=t.get("XFA");e.hasXfa=Array.isArray(o)&&o.length>0||o instanceof c.BaseStream&&!o.isEmpty;var s=!!(1&t.get("SigFlags")),u=s&&this._hasOnlyDocumentSignatures(r);e.hasAcroForm=n&&!u,e.hasSignatures=s}catch(e){if(e instanceof i.MissingDataException)throw e;(0,a.warn)('Cannot fetch form information: "'.concat(e,'".'))}return(0,a.shadow)(this,"formInfo",e)}},{key:"documentInfo",get:function(){var e,t={PDFFormatVersion:this.version,Language:this.catalog.lang,EncryptFilterName:this.xref.encrypt?this.xref.encrypt.filterName:null,IsLinearized:!!this.linearization,IsAcroFormPresent:this.formInfo.hasAcroForm,IsXFAPresent:this.formInfo.hasXfa,IsCollectionPresent:!!this.catalog.collection,IsSignaturesPresent:this.formInfo.hasSignatures};try{e=this.xref.trailer.get("Info")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,a.info)("The document information dictionary is invalid.")}if(!(e instanceof o.Dict))return(0,a.shadow)(this,"documentInfo",t);var r,n=F(e.getKeys());try{for(n.s();!(r=n.n()).done;){var s=r.value,c=e.get(s);switch(s){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof c){t[s]=(0,a.stringToPDFString)(c);continue}break;case"Trapped":if(c instanceof o.Name){t[s]=c;continue}break;default:var u=void 0;switch(x(c)){case"string":u=(0,a.stringToPDFString)(c);break;case"number":case"boolean":u=c;break;default:c instanceof o.Name&&(u=c)}if(void 0===u){(0,a.warn)('Bad value, for custom key "'.concat(s,'", in Info: ').concat(c,"."));continue}t.Custom||(t.Custom=Object.create(null)),t.Custom[s]=u;continue}(0,a.warn)('Bad value, for key "'.concat(s,'", in Info: ').concat(c,"."))}}catch(e){n.e(e)}finally{n.f()}return(0,a.shadow)(this,"documentInfo",t)}},{key:"fingerprints",get:function(){function e(e){return"string"==typeof e&&e.length>0&&"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"!==e}function t(e){var t,r=[],n=F(e);try{for(n.s();!(t=n.n()).done;){var a=t.value.toString(16);r.push(a.padStart(2,"0"))}}catch(e){n.e(e)}finally{n.f()}return r.join("")}var r,n,i=this.xref.trailer.get("ID");return Array.isArray(i)&&e(i[0])?(r=(0,a.stringToBytes)(i[0]),i[1]!==i[0]&&e(i[1])&&(n=(0,a.stringToBytes)(i[1]))):r=(0,u.calculateMD5)(this.stream.getByteRange(0,1024),0,1024),(0,a.shadow)(this,"fingerprints",[t(r),n?t(n):null])}},{key:"_getLinearizationPage",value:(b=E(A().mark((function e(t){var r,n,i,s,c,u;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.catalog,n=this.linearization,i=this.xref,s=o.Ref.get(n.objectNumberFirst,0),e.prev=2,e.next=5,i.fetchAsync(s);case 5:if(!((c=e.sent)instanceof o.Dict)){e.next=16;break}if(!((u=c.getRaw("Type"))instanceof o.Ref)){e.next=12;break}return e.next=11,i.fetchAsync(u);case 11:u=e.sent;case 12:if(!(0,o.isName)(u,"Page")&&(c.has("Type")||c.has("Kids"))){e.next=16;break}return r.pageKidsCountCache.has(s)||r.pageKidsCountCache.put(s,1),r.pageIndexCache.has(s)||r.pageIndexCache.put(s,0),e.abrupt("return",[c,s]);case 16:throw new a.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.");case 19:return e.prev=19,e.t0=e.catch(2),(0,a.warn)('_getLinearizationPage: "'.concat(e.t0.message,'".')),e.abrupt("return",r.getPageDict(t));case 23:case"end":return e.stop()}}),e,this,[[2,19]])}))),function(e){return b.apply(this,arguments)})},{key:"getPage",value:function(e){var t=this,r=this._pagePromises.get(e);if(r)return r;var n,a=this.catalog,i=this.linearization,s=this.xfaFactory;return n=(n=s?Promise.resolve([o.Dict.empty,null]):i&&i.pageFirst===e?this._getLinearizationPage(e):a.getPageDict(e)).then((function(r){var n=O(r,2),i=n[0],o=n[1];return new D({pdfManager:t.pdfManager,xref:t.xref,pageIndex:e,pageDict:i,ref:o,globalIdFactory:t._globalIdFactory,fontCache:a.fontCache,builtInCMapCache:a.builtInCMapCache,standardFontDataCache:a.standardFontDataCache,globalImageCache:a.globalImageCache,nonBlendModesSet:a.nonBlendModesSet,xfaFactory:s})})),this._pagePromises.set(e,n),n}},{key:"checkFirstPage",value:(m=E(A().mark((function e(){var t=arguments;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(t.length>0&&void 0!==t[0]&&t[0])){e.next=3;break}return e.abrupt("return");case 3:return e.prev=3,e.next=6,this.getPage(0);case 6:e.next=15;break;case 8:if(e.prev=8,e.t0=e.catch(3),!(e.t0 instanceof i.XRefEntryException)){e.next=15;break}return this._pagePromises.delete(0),e.next=14,this.cleanup();case 14:throw new i.XRefParseException;case 15:case"end":return e.stop()}}),e,this,[[3,8]])}))),function(){return m.apply(this,arguments)})},{key:"checkLastPage",value:(p=E(A().mark((function e(){var t,r,n,o,s,c,u,l,f,h,d,p,g,v=arguments;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=v.length>0&&void 0!==v[0]&&v[0],r=this.catalog,n=this.pdfManager,r.setActualNumPages(),e.prev=3,e.next=6,Promise.all([n.ensureDoc("xfaFactory"),n.ensureDoc("linearization"),n.ensureCatalog("numPages")]);case 6:if(!this.xfaFactory){e.next=10;break}return e.abrupt("return");case 10:o=this.linearization?this.linearization.numPages:r.numPages;case 11:if(Number.isInteger(o)){e.next=15;break}throw new a.FormatError("Page count is not an integer.");case 15:if(!(o<=1)){e.next=17;break}return e.abrupt("return");case 17:return e.next=19,this.getPage(o-1);case 19:e.next=44;break;case 21:return e.prev=21,e.t0=e.catch(3),this._pagePromises.delete(o-1),e.next=26,this.cleanup();case 26:if(!(e.t0 instanceof i.XRefEntryException)||t){e.next=28;break}throw new i.XRefParseException;case 28:return(0,a.warn)("checkLastPage - invalid /Pages tree /Count: ".concat(o,".")),e.prev=29,e.next=32,r.getAllPageDicts(t);case 32:s=e.sent,e.next=41;break;case 35:if(e.prev=35,e.t1=e.catch(29),!(e.t1 instanceof i.XRefEntryException)||t){e.next=39;break}throw new i.XRefParseException;case 39:return r.setActualNumPages(1),e.abrupt("return");case 41:c=F(s);try{for(c.s();!(u=c.n()).done;)l=O(u.value,2),f=l[0],h=O(l[1],2),d=h[0],p=h[1],g=void 0,d instanceof Error?(g=Promise.reject(d)).catch((function(){})):g=Promise.resolve(new D({pdfManager:n,xref:this.xref,pageIndex:f,pageDict:d,ref:p,globalIdFactory:this._globalIdFactory,fontCache:r.fontCache,builtInCMapCache:r.builtInCMapCache,standardFontDataCache:r.standardFontDataCache,globalImageCache:r.globalImageCache,nonBlendModesSet:r.nonBlendModesSet,xfaFactory:null})),this._pagePromises.set(f,g)}catch(e){c.e(e)}finally{c.f()}r.setActualNumPages(s.size);case 44:case"end":return e.stop()}}),e,this,[[3,21],[29,35]])}))),function(){return p.apply(this,arguments)})},{key:"fontFallback",value:function(e,t){return this.catalog.fontFallback(e,t)}},{key:"cleanup",value:(r=E(A().mark((function e(){var t,r=arguments;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=r.length>0&&void 0!==r[0]&&r[0],e.abrupt("return",this.catalog?this.catalog.cleanup(t):(0,f.clearGlobalCaches)());case 2:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"_collectFieldObjects",value:function(e,t,r){var i=this.xref.fetchIfRef(t);if(i.has("T")){var o=(0,a.stringToPDFString)(i.get("T"));e=""===e?o:"".concat(e,".").concat(o)}if(r.has(e)||r.set(e,[]),r.get(e).push(n.AnnotationFactory.create(this.xref,t,this.pdfManager,this._localIdFactory,!0).then((function(e){return e&&e.getFieldObject()})).catch((function(e){return(0,a.warn)('_collectFieldObjects: "'.concat(e,'".')),null}))),i.has("Kids")){var s,c=F(i.get("Kids"));try{for(c.s();!(s=c.n()).done;){var u=s.value;this._collectFieldObjects(e,u,r)}}catch(e){c.e(e)}finally{c.f()}}}},{key:"fieldObjects",get:function(){if(!this.formInfo.hasFields)return(0,a.shadow)(this,"fieldObjects",Promise.resolve(null));var e,t=Object.create(null),r=new Map,n=F(this.catalog.acroForm.get("Fields"));try{for(n.s();!(e=n.n()).done;){var i=e.value;this._collectFieldObjects("",i,r)}}catch(e){n.e(e)}finally{n.f()}var o,s=[],c=F(r);try{var u=function(){var e=O(o.value,2),r=e[0],n=e[1];s.push(Promise.all(n).then((function(e){(e=e.filter((function(e){return!!e}))).length>0&&(t[r]=e)})))};for(c.s();!(o=c.n()).done;)u()}catch(e){c.e(e)}finally{c.f()}return(0,a.shadow)(this,"fieldObjects",Promise.all(s).then((function(){return t})))}},{key:"hasJSActions",get:function(){var e=this.pdfManager.ensureDoc("_parseHasJSActions");return(0,a.shadow)(this,"hasJSActions",e)}},{key:"_parseHasJSActions",value:(t=E(A().mark((function e(){var t,r,n,a;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);case 2:if(t=e.sent,r=O(t,2),n=r[0],a=r[1],!n){e.next=8;break}return e.abrupt("return",!0);case 8:if(!a){e.next=10;break}return e.abrupt("return",Object.values(a).some((function(e){return e.some((function(e){return null!==e.actions}))})));case 10:return e.abrupt("return",!1);case 11:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"calculationOrderIds",get:function(){var e=this.catalog.acroForm;if(!e||!e.has("CO"))return(0,a.shadow)(this,"calculationOrderIds",null);var t=e.get("CO");if(!Array.isArray(t)||0===t.length)return(0,a.shadow)(this,"calculationOrderIds",null);var r,n=[],i=F(t);try{for(i.s();!(r=i.n()).done;){var s=r.value;s instanceof o.Ref&&n.push(s.toString())}}catch(e){i.e(e)}finally{i.f()}return 0===n.length?(0,a.shadow)(this,"calculationOrderIds",null):(0,a.shadow)(this,"calculationOrderIds",n)}}]),e}();t.PDFDocument=H},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PopupAnnotation=t.MarkupAnnotation=t.AnnotationFactory=t.AnnotationBorderStyle=t.Annotation=void 0,t.getQuadPoints=D;var n=r(2),a=r(135),i=r(142),o=r(134),s=r(194),c=r(136),u=r(189),l=r(198),f=r(143),h=r(201),d=r(204),p=r(191),g=r(139),v=r(205);function y(){return y="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=x(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:r):a.value}},y.apply(this,arguments)}function m(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&b(e,t)}function b(e,t){return b=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},b(e,t)}function w(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=x(e);if(t){var a=x(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return k(this,r)}}function k(e,t){if(t&&("object"===O(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return S(e)}function S(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function x(e){return x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},x(e)}function O(e){return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},O(e)}function A(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=I(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function C(){C=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:k(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function p(){}var g={};c(g,i,(function(){return this}));var v=Object.getPrototypeOf,y=v&&v(v(P([])));y&&y!==t&&r.call(y,i)&&(g=y);var m=p.prototype=h.prototype=Object.create(g);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==O(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function k(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function A(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),A(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;A(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function F(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function P(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){F(i,n,a,o,s,"next",e)}function s(e){F(i,n,a,o,s,"throw",e)}o(void 0)}))}}function T(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||I(e,t)||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 I(e,t){if(e){if("string"==typeof e)return E(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?E(e,t):void 0}}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r5&&void 0!==arguments[5]?arguments[5]:null,u=arguments.length>6?arguments[6]:void 0,l=arguments.length>7?arguments[7]:void 0,f=arguments.length>8&&void 0!==arguments[8]?arguments[8]:-1,h=e.fetchIfRef(t);if(h instanceof o.Dict){var d=t instanceof o.Ref?t.toString():"annot_".concat(i.createObjId()),p=h.get("Subtype");p=p instanceof o.Name?p.name:null;var g=s instanceof o.Dict?s:o.Dict.empty,v={xref:e,ref:t,dict:h,subtype:p,id:d,pdfManager:r,acroForm:g,attachments:c,xfaDatasets:u,collectFields:l,needAppearances:!l&&!0===g.get("NeedAppearances"),pageIndex:f,isOffscreenCanvasSupported:n.FeatureTest.isOffscreenCanvasSupported&&r.evaluatorOptions.isOffscreenCanvasSupported};switch(p){case"Link":return new Y(v);case"Text":return new V(v);case"Widget":var y=(0,a.getInheritableProperty)({dict:h,key:"FT"});switch(y=y instanceof o.Name?y.name:null){case"Tx":return new q(v);case"Btn":return new G(v);case"Ch":return new z(v);case"Sig":return new W(v)}return(0,n.warn)('Unimplemented widget field type "'.concat(y,'", ')+"falling back to base field type."),new H(v);case"Popup":return new K(v);case"FreeText":return new J(v);case"Line":return new Z(v);case"Square":return new Q(v);case"Circle":return new ee(v);case"PolyLine":return new te(v);case"Polygon":return new re(v);case"Caret":return new ne(v);case"Ink":return new ae(v);case"Highlight":return new ie(v);case"Underline":return new oe(v);case"Squiggly":return new se(v);case"StrikeOut":return new ce(v);case"Stamp":return new ue(v);case"FileAttachment":return new le(v);default:return l||(p?(0,n.warn)('Unimplemented annotation type "'.concat(p,'", ')+"falling back to base annotation."):(0,n.warn)("Annotation is missing the required /Subtype.")),new U(v)}}}},{key:"_getPageIndex",value:(i=P(C().mark((function e(t,r,a){var i,s,c;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,t.fetchIfRefAsync(r);case 3:if((i=e.sent)instanceof o.Dict){e.next=6;break}return e.abrupt("return",-1);case 6:if((s=i.getRaw("P"))instanceof o.Ref){e.next=9;break}return e.abrupt("return",-1);case 9:return e.next=11,a.ensureCatalog("getPageIndex",[s]);case 11:return c=e.sent,e.abrupt("return",c);case 15:return e.prev=15,e.t0=e.catch(0),(0,n.warn)('_getPageIndex: "'.concat(e.t0,'".')),e.abrupt("return",-1);case 19:case"end":return e.stop()}}),e,null,[[0,15]])}))),function(e,t,r){return i.apply(this,arguments)})},{key:"saveNewAnnotations",value:(r=P(C().mark((function e(t,r,a){var i,c,u,l,f,h,d,p,g;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=t.xref,u=[],l=[],f=A(a),e.prev=4,f.s();case 6:if((h=f.n()).done){e.next=17;break}d=h.value,e.t0=d.annotationType,e.next=e.t0===n.AnnotationEditorType.FREETEXT?11:e.t0===n.AnnotationEditorType.INK?14:15;break;case 11:return c||((p=new o.Dict(i)).set("BaseFont",o.Name.get("Helvetica")),p.set("Type",o.Name.get("Font")),p.set("Subtype",o.Name.get("Type1")),p.set("Encoding",o.Name.get("WinAnsiEncoding")),g=[],c=i.getNewTemporaryRef(),(0,s.writeObject)(c,p,g,null),u.push({ref:c,data:g.join("")})),l.push(J.createNewAnnotation(i,d,u,{evaluator:t,task:r,baseFontRef:c})),e.abrupt("break",15);case 14:l.push(ae.createNewAnnotation(i,d,u));case 15:e.next=6;break;case 17:e.next=22;break;case 19:e.prev=19,e.t1=e.catch(4),f.e(e.t1);case 22:return e.prev=22,f.f(),e.finish(22);case 25:return e.next=27,Promise.all(l);case 27:return e.t2=e.sent,e.t3=u,e.abrupt("return",{annotations:e.t2,dependencies:e.t3});case 30:case"end":return e.stop()}}),e,null,[[4,19,22,25]])}))),function(e,t,n){return r.apply(this,arguments)})},{key:"printNewAnnotations",value:(t=P(C().mark((function e(t,r,a){var i,o,s,c,u,l;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a){e.next=2;break}return e.abrupt("return",null);case 2:i=t.xref,o=[],s=n.FeatureTest.isOffscreenCanvasSupported&&t.options.isOffscreenCanvasSupported,c=A(a),e.prev=6,c.s();case 8:if((u=c.n()).done){e.next=19;break}l=u.value,e.t0=l.annotationType,e.next=e.t0===n.AnnotationEditorType.FREETEXT?13:e.t0===n.AnnotationEditorType.INK?15:17;break;case 13:return o.push(J.createNewPrintAnnotation(i,l,{evaluator:t,task:r,isOffscreenCanvasSupported:s})),e.abrupt("break",17);case 15:return o.push(ae.createNewPrintAnnotation(i,l,{isOffscreenCanvasSupported:s})),e.abrupt("break",17);case 17:e.next=8;break;case 19:e.next=24;break;case 21:e.prev=21,e.t1=e.catch(6),c.e(e.t1);case 24:return e.prev=24,c.f(),e.finish(24);case 27:return e.abrupt("return",Promise.all(o));case 28:case"end":return e.stop()}}),e,null,[[6,21,24,27]])}))),function(e,r,n){return t.apply(this,arguments)})}]),e}();function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Uint8ClampedArray(3);if(!Array.isArray(e))return t;var r=t||new Uint8ClampedArray(3);switch(e.length){case 0:return null;case 1:return f.ColorSpace.singletons.gray.getRgbItem(e,0,r,0),r;case 3:return f.ColorSpace.singletons.rgb.getRgbItem(e,0,r,0),r;case 4:return f.ColorSpace.singletons.cmyk.getRgbItem(e,0,r,0),r;default:return t}}function N(e){return Array.from(e,(function(e){return e/255}))}function D(e,t){var r=e.getArray("QuadPoints");if(!Array.isArray(r)||0===r.length||r.length%8>0)return null;for(var n=[],a=0,i=r.length/8;at[2]||ct[3]))return null;n.push([{x:o,y:u},{x:s,y:u},{x:o,y:c},{x:s,y:c}])}return n}function B(e,t,r){var a=T(n.Util.getAxialAlignedBoundingBox(t,r),4),i=a[0],o=a[1],s=a[2],c=a[3];if(i===s||o===c)return[1,0,0,1,e[0],e[1]];var u=(e[2]-e[0])/(s-i),l=(e[3]-e[1])/(c-o);return[u,0,0,l,e[0]-i*u,e[1]-o*l]}t.AnnotationFactory=L;var U=function(){function e(t){j(this,e);var r=t.dict,i=t.xref;this.setTitle(r.get("T")),this.setContents(r.get("Contents")),this.setModificationDate(r.get("M")),this.setFlags(r.get("F")),this.setRectangle(r.getArray("Rect")),this.setColor(r.getArray("C")),this.setBorderStyle(r),this.setAppearance(r),this.setOptionalContent(r);var s=r.get("MK");if(this.setBorderAndBackgroundColors(s),this.setRotation(s),this._streams=[],this.appearance&&this._streams.push(this.appearance),this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:t.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:t.subtype,hasOwnCanvas:!1},t.collectFields){var c=r.get("Kids");if(Array.isArray(c)){var u,l=[],f=A(c);try{for(f.s();!(u=f.n()).done;){var h=u.value;h instanceof o.Ref&&l.push(h.toString())}}catch(e){f.e(e)}finally{f.f()}0!==l.length&&(this.data.kidIds=l)}this.data.actions=(0,a.collectActions)(i,r,n.AnnotationActionEventType),this.data.fieldName=this._constructFieldName(r),this.data.pageIndex=t.pageIndex}this._isOffscreenCanvasSupported=t.isOffscreenCanvasSupported,this._fallbackFontDict=null,this._needAppearances=!1}var t,r,s;return _(e,[{key:"_hasFlag",value:function(e,t){return!!(e&t)}},{key:"_isViewable",value:function(e){return!this._hasFlag(e,n.AnnotationFlag.INVISIBLE)&&!this._hasFlag(e,n.AnnotationFlag.NOVIEW)}},{key:"_isPrintable",value:function(e){return this._hasFlag(e,n.AnnotationFlag.PRINT)&&!this._hasFlag(e,n.AnnotationFlag.INVISIBLE)}},{key:"mustBeViewed",value:function(e){var t=e&&e.get(this.data.id);return t&&void 0!==t.hidden?!t.hidden:this.viewable&&!this._hasFlag(this.flags,n.AnnotationFlag.HIDDEN)}},{key:"mustBePrinted",value:function(e){var t=e&&e.get(this.data.id);return t&&void 0!==t.print?t.print:this.printable}},{key:"viewable",get:function(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}},{key:"printable",get:function(){return null!==this.data.quadPoints&&0!==this.flags&&this._isPrintable(this.flags)}},{key:"_parseStringHelper",value:function(e){var t="string"==typeof e?(0,n.stringToPDFString)(e):"";return{str:t,dir:t&&"rtl"===(0,u.bidi)(t).dir?"rtl":"ltr"}}},{key:"setDefaultAppearance",value:function(e){var t=(0,a.getInheritableProperty)({dict:e.dict,key:"DA"})||e.acroForm.get("DA");this._defaultAppearance="string"==typeof t?t:"",this.data.defaultAppearanceData=(0,i.parseDefaultAppearance)(this._defaultAppearance)}},{key:"setTitle",value:function(e){this._title=this._parseStringHelper(e)}},{key:"setContents",value:function(e){this._contents=this._parseStringHelper(e)}},{key:"setModificationDate",value:function(e){this.modificationDate="string"==typeof e?e:null}},{key:"setFlags",value:function(e){this.flags=Number.isInteger(e)&&e>0?e:0}},{key:"hasFlag",value:function(e){return this._hasFlag(this.flags,e)}},{key:"setRectangle",value:function(e){Array.isArray(e)&&4===e.length?this.rectangle=n.Util.normalizeRect(e):this.rectangle=[0,0,0,0]}},{key:"setColor",value:function(e){this.color=R(e)}},{key:"setLineEndings",value:function(e){if(this.lineEndings=["None","None"],Array.isArray(e)&&2===e.length)for(var t=0;t<2;t++){var r=e[t];if(r instanceof o.Name)switch(r.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=r.name;continue}(0,n.warn)("Ignoring invalid lineEnding: ".concat(r))}}},{key:"setRotation",value:function(e){if(this.rotation=0,e instanceof o.Dict){var t=e.get("R")||0;Number.isInteger(t)&&0!==t&&((t%=360)<0&&(t+=360),t%90==0&&(this.rotation=t))}}},{key:"setBorderAndBackgroundColors",value:function(e){e instanceof o.Dict?(this.borderColor=R(e.getArray("BC"),null),this.backgroundColor=R(e.getArray("BG"),null)):this.borderColor=this.backgroundColor=null}},{key:"setBorderStyle",value:function(e){if(this.borderStyle=new $,e instanceof o.Dict)if(e.has("BS")){var t=e.get("BS"),r=t.get("Type");r&&!(0,o.isName)(r,"Border")||(this.borderStyle.setWidth(t.get("W"),this.rectangle),this.borderStyle.setStyle(t.get("S")),this.borderStyle.setDashArray(t.getArray("D")))}else if(e.has("Border")){var n=e.getArray("Border");Array.isArray(n)&&n.length>=3&&(this.borderStyle.setHorizontalCornerRadius(n[0]),this.borderStyle.setVerticalCornerRadius(n[1]),this.borderStyle.setWidth(n[2],this.rectangle),4===n.length&&this.borderStyle.setDashArray(n[3],!0))}else this.borderStyle.setWidth(0)}},{key:"setAppearance",value:function(e){this.appearance=null;var t=e.get("AP");if(t instanceof o.Dict){var r=t.get("N");if(r instanceof c.BaseStream)this.appearance=r;else if(r instanceof o.Dict){var n=e.get("AS");n instanceof o.Name&&r.has(n.name)&&(this.appearance=r.get(n.name))}}}},{key:"setOptionalContent",value:function(e){this.oc=null;var t=e.get("OC");t instanceof o.Name?(0,n.warn)("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof o.Dict&&(this.oc=t)}},{key:"loadResources",value:function(e,t){return t.dict.getAsync("Resources").then((function(t){if(t)return new d.ObjectLoader(t,e,t.xref).load().then((function(){return t}))}))}},{key:"getOperatorList",value:(s=P(C().mark((function e(t,r,a,i,s){var c,u,l,f,h,d,v,y,m,b;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=this.data,u=this.appearance,l=!!(this.data.hasOwnCanvas&&a&n.RenderingIntentFlag.DISPLAY),u){e.next=8;break}if(l){e.next=6;break}return e.abrupt("return",{opList:new p.OperatorList,separateForm:!1,separateCanvas:!1});case 6:(u=new g.StringStream("")).dict=new o.Dict;case 8:return f=u.dict,e.next=11,this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"],u);case 11:if(h=e.sent,d=f.getArray("BBox")||[0,0,1,1],v=f.getArray("Matrix")||[1,0,0,1,0,0],y=B(c.rect,d,v),m=new p.OperatorList,!this.oc){e.next=20;break}return e.next=19,t.parseMarkedContentProps(this.oc,null);case 19:b=e.sent;case 20:return void 0!==b&&m.addOp(n.OPS.beginMarkedContentProps,["OC",b]),m.addOp(n.OPS.beginAnnotation,[c.id,c.rect,y,v,l]),e.next=24,t.getOperatorList({stream:u,task:r,resources:h,operatorList:m,fallbackFontDict:this._fallbackFontDict});case 24:return m.addOp(n.OPS.endAnnotation,[]),void 0!==b&&m.addOp(n.OPS.endMarkedContent,[]),this.reset(),e.abrupt("return",{opList:m,separateForm:!1,separateCanvas:l});case 28:case"end":return e.stop()}}),e,this)}))),function(e,t,r,n,a){return s.apply(this,arguments)})},{key:"save",value:(r=P(C().mark((function e(t,r,n){return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",null);case 1:case"end":return e.stop()}}),e)}))),function(e,t,n){return r.apply(this,arguments)})},{key:"hasTextContent",get:function(){return!1}},{key:"extractTextContent",value:(t=P(C().mark((function e(t,r,n){var a,i,o,s;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.appearance){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,this.loadResources(["ExtGState","Font","Properties","XObject"],this.appearance);case 4:return a=e.sent,i=[],o=[],s={desiredSize:Math.Infinity,ready:!0,enqueue:function(e,t){var r,n=A(e.items);try{for(n.s();!(r=n.n()).done;){var a=r.value;o.push(a.str),a.hasEOL&&(i.push(o.join("")),o.length=0)}}catch(e){n.e(e)}finally{n.f()}}},e.next=10,t.getTextContent({stream:this.appearance,task:r,resources:a,includeMarkedContent:!0,combineTextItems:!0,sink:s,viewBox:n});case 10:this.reset(),o.length&&i.push(o.join("")),i.length>0&&(this.data.textContent=i);case 13:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"getFieldObject",value:function(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}},{key:"reset",value:function(){var e,t=A(this._streams);try{for(t.s();!(e=t.n()).done;)e.value.reset()}catch(e){t.e(e)}finally{t.f()}}},{key:"_constructFieldName",value:function(e){if(!e.has("T")&&!e.has("Parent"))return(0,n.warn)("Unknown field name, falling back to empty field name."),"";if(!e.has("Parent"))return(0,n.stringToPDFString)(e.get("T"));var t=[];e.has("T")&&t.unshift((0,n.stringToPDFString)(e.get("T")));var r=e,a=new o.RefSet;for(e.objId&&a.put(e.objId);r.has("Parent")&&(r=r.get("Parent"))instanceof o.Dict&&(!r.objId||!a.has(r.objId));)r.objId&&a.put(r.objId),r.has("T")&&t.unshift((0,n.stringToPDFString)(r.get("T")));return t.join(".")}}]),e}();t.Annotation=U;var $=function(){function e(){j(this,e),this.width=1,this.style=n.AnnotationBorderStyleType.SOLID,this.dashArray=[3],this.horizontalCornerRadius=0,this.verticalCornerRadius=0}return _(e,[{key:"setWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0,0];if(e instanceof o.Name)this.width=0;else if("number"==typeof e){if(e>0){var r=(t[2]-t[0])/2,a=(t[3]-t[1])/2;r>0&&a>0&&(e>r||e>a)&&((0,n.warn)("AnnotationBorderStyle.setWidth - ignoring width: ".concat(e)),e=1)}this.width=e}}},{key:"setStyle",value:function(e){if(e instanceof o.Name)switch(e.name){case"S":this.style=n.AnnotationBorderStyleType.SOLID;break;case"D":this.style=n.AnnotationBorderStyleType.DASHED;break;case"B":this.style=n.AnnotationBorderStyleType.BEVELED;break;case"I":this.style=n.AnnotationBorderStyleType.INSET;break;case"U":this.style=n.AnnotationBorderStyleType.UNDERLINE}}},{key:"setDashArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Array.isArray(e)&&e.length>0){var r,n=!0,a=!0,i=A(e);try{for(i.s();!(r=i.n()).done;){var s=r.value;if(!(+s>=0)){n=!1;break}s>0&&(a=!1)}}catch(e){i.e(e)}finally{i.f()}n&&!a?(this.dashArray=e,t&&this.setStyle(o.Name.get("D"))):this.width=0}else e&&(this.width=0)}},{key:"setHorizontalCornerRadius",value:function(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}},{key:"setVerticalCornerRadius",value:function(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}]),e}();t.AnnotationBorderStyle=$;var X=function(e){m(i,e);var t,r,a=w(i);function i(e){var t;j(this,i),t=a.call(this,e);var r=e.dict;if(r.has("IRT")){var s=r.getRaw("IRT");t.data.inReplyTo=s instanceof o.Ref?s.toString():null;var c=r.get("RT");t.data.replyType=c instanceof o.Name?c.name:n.AnnotationReplyType.REPLY}if(t.data.replyType===n.AnnotationReplyType.GROUP){var u=r.get("IRT");t.setTitle(u.get("T")),t.data.titleObj=t._title,t.setContents(u.get("Contents")),t.data.contentsObj=t._contents,u.has("CreationDate")?(t.setCreationDate(u.get("CreationDate")),t.data.creationDate=t.creationDate):t.data.creationDate=null,u.has("M")?(t.setModificationDate(u.get("M")),t.data.modificationDate=t.modificationDate):t.data.modificationDate=null,t.data.hasPopup=u.has("Popup"),u.has("C")?(t.setColor(u.getArray("C")),t.data.color=t.color):t.data.color=null}else t.data.titleObj=t._title,t.setCreationDate(r.get("CreationDate")),t.data.creationDate=t.creationDate,t.data.hasPopup=r.has("Popup"),r.has("C")||(t.data.color=null);return r.has("RC")&&(t.data.richText=v.XFAFactory.getRichTextAsHtml(r.get("RC"))),t}return _(i,[{key:"setCreationDate",value:function(e){this.creationDate="string"==typeof e?e:null}},{key:"_setDefaultAppearance",value:function(e){var t=e.xref,r=e.extra,n=e.strokeColor,a=e.fillColor,i=e.blendMode,s=e.strokeAlpha,c=e.fillAlpha,u=e.pointsCallback,l=Number.MAX_VALUE,f=Number.MAX_VALUE,h=Number.MIN_VALUE,d=Number.MIN_VALUE,p=["q"];r&&p.push(r),n&&p.push("".concat(n[0]," ").concat(n[1]," ").concat(n[2]," RG")),a&&p.push("".concat(a[0]," ").concat(a[1]," ").concat(a[2]," rg"));var v=this.data.quadPoints;v||(v=[[{x:this.rectangle[0],y:this.rectangle[3]},{x:this.rectangle[2],y:this.rectangle[3]},{x:this.rectangle[0],y:this.rectangle[1]},{x:this.rectangle[2],y:this.rectangle[1]}]]);var y,m=A(v);try{for(m.s();!(y=m.n()).done;){var b=T(u(p,y.value),4),w=b[0],k=b[1],S=b[2],x=b[3];l=Math.min(l,w),h=Math.max(h,k),f=Math.min(f,S),d=Math.max(d,x)}}catch(e){m.e(e)}finally{m.f()}p.push("Q");var O=new o.Dict(t),C=new o.Dict(t);C.set("Subtype",o.Name.get("Form"));var F=new g.StringStream(p.join(" "));F.dict=C,O.set("Fm0",F);var P=new o.Dict(t);i&&P.set("BM",o.Name.get(i)),"number"==typeof s&&P.set("CA",s),"number"==typeof c&&P.set("ca",c);var I=new o.Dict(t);I.set("GS0",P);var E=new o.Dict(t);E.set("ExtGState",I),E.set("XObject",O);var j=new o.Dict(t);j.set("Resources",E);var M=this.data.rect=[l,f,h,d];j.set("BBox",M),this.appearance=new g.StringStream("/GS0 gs /Fm0 Do"),this.appearance.dict=j,this._streams.push(this.appearance,F)}}],[{key:"createNewAnnotation",value:(r=P(C().mark((function e(t,r,n,a){var i,o,c,u,l,f,h;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=t.getNewTemporaryRef(),e.next=3,this.createNewAppearanceStream(r,t,a);case 3:return o=e.sent,c=[],o?(l=t.getNewTemporaryRef(),u=this.createNewDict(r,t,{apRef:l}),f=t.encrypt?t.encrypt.createCipherTransform(l.num,l.gen):null,(0,s.writeObject)(l,o,c,f),n.push({ref:l,data:c.join("")})):u=this.createNewDict(r,t,{}),c.length=0,h=t.encrypt?t.encrypt.createCipherTransform(i.num,i.gen):null,(0,s.writeObject)(i,u,c,h),e.abrupt("return",{ref:i,data:c.join("")});case 10:case"end":return e.stop()}}),e,this)}))),function(e,t,n,a){return r.apply(this,arguments)})},{key:"createNewPrintAnnotation",value:(t=P(C().mark((function e(t,r,n){var a,i;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.createNewAppearanceStream(r,t,n);case 2:return a=e.sent,i=this.createNewDict(r,t,{ap:a}),e.abrupt("return",new this.prototype.constructor({dict:i,xref:t,isOffscreenCanvasSupported:n.isOffscreenCanvasSupported}));case 5:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})}]),i}(U);t.MarkupAnnotation=X;var H=function(e){m(f,e);var t,r,c,u,l=w(f);function f(e){var t;j(this,f),t=l.call(this,e);var r=e.dict,i=e.xref,s=t.data;t.ref=e.ref,t._needAppearances=e.needAppearances,s.annotationType=n.AnnotationType.WIDGET,void 0===s.fieldName&&(s.fieldName=t._constructFieldName(r)),void 0===s.actions&&(s.actions=(0,a.collectActions)(i,r,n.AnnotationActionEventType));var c=(0,a.getInheritableProperty)({dict:r,key:"V",getArray:!0});s.fieldValue=t._decodeFormValue(c);var u=(0,a.getInheritableProperty)({dict:r,key:"DV",getArray:!0});if(s.defaultFieldValue=t._decodeFormValue(u),void 0===c&&e.xfaDatasets){var h=t._title.str;h&&(t._hasValueFromXFA=!0,s.fieldValue=c=e.xfaDatasets.getValue(h))}void 0===c&&null!==s.defaultFieldValue&&(s.fieldValue=s.defaultFieldValue),s.alternativeText=(0,n.stringToPDFString)(r.get("TU")||""),t.setDefaultAppearance(e),s.hasAppearance=t._needAppearances&&void 0!==s.fieldValue&&null!==s.fieldValue||s.hasAppearance;var d=(0,a.getInheritableProperty)({dict:r,key:"FT"});s.fieldType=d instanceof o.Name?d.name:null;var p=(0,a.getInheritableProperty)({dict:r,key:"DR"}),g=e.acroForm.get("DR"),v=t.appearance&&t.appearance.dict.get("Resources");return t._fieldResources={localResources:p,acroFormResources:g,appearanceResources:v,mergedResources:o.Dict.merge({xref:i,dictArray:[p,v,g],mergeSubDicts:!0})},s.fieldFlags=(0,a.getInheritableProperty)({dict:r,key:"Ff"}),(!Number.isInteger(s.fieldFlags)||s.fieldFlags<0)&&(s.fieldFlags=0),s.readOnly=t.hasFieldFlag(n.AnnotationFieldFlag.READONLY),s.required=t.hasFieldFlag(n.AnnotationFieldFlag.REQUIRED),s.hidden=t._hasFlag(s.annotationFlags,n.AnnotationFlag.HIDDEN),t}return _(f,[{key:"_decodeFormValue",value:function(e){return Array.isArray(e)?e.filter((function(e){return"string"==typeof e})).map((function(e){return(0,n.stringToPDFString)(e)})):e instanceof o.Name?(0,n.stringToPDFString)(e.name):"string"==typeof e?(0,n.stringToPDFString)(e):null}},{key:"hasFieldFlag",value:function(e){return!!(this.data.fieldFlags&e)}},{key:"getRotationMatrix",value:function(e){var t=e?e.get(this.data.id):void 0,r=t&&t.rotation;if(void 0===r&&(r=this.rotation),0===r)return n.IDENTITY_MATRIX;var i=this.data.rect[2]-this.data.rect[0],o=this.data.rect[3]-this.data.rect[1];return(0,a.getRotationMatrix)(r,i,o)}},{key:"getBorderAndBackgroundAppearances",value:function(e){var t=e?e.get(this.data.id):void 0,r=t&&t.rotation;if(void 0===r&&(r=this.rotation),!this.backgroundColor&&!this.borderColor)return"";var n=this.data.rect[2]-this.data.rect[0],a=this.data.rect[3]-this.data.rect[1],o=0===r||180===r?"0 0 ".concat(n," ").concat(a," re"):"0 0 ".concat(a," ").concat(n," re"),s="";if(this.backgroundColor&&(s="".concat((0,i.getPdfColor)(this.backgroundColor,!0)," ").concat(o," f ")),this.borderColor){var c=this.borderStyle.width||1;s+="".concat(c," w ").concat((0,i.getPdfColor)(this.borderColor,!1)," ").concat(o," S ")}return s}},{key:"getOperatorList",value:(u=P(C().mark((function e(t,r,a,i,o){var s,c,u,l,h,d,v;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!i||this instanceof W){e.next=2;break}return e.abrupt("return",{opList:new p.OperatorList,separateForm:!0,separateCanvas:!1});case 2:if(this._hasText){e.next=4;break}return e.abrupt("return",y(x(f.prototype),"getOperatorList",this).call(this,t,r,a,i,o));case 4:return e.next=6,this._getAppearance(t,r,a,o);case 6:if(s=e.sent,!this.appearance||null!==s){e.next=9;break}return e.abrupt("return",y(x(f.prototype),"getOperatorList",this).call(this,t,r,a,i,o));case 9:if(c=new p.OperatorList,this._defaultAppearance&&null!==s){e.next=12;break}return e.abrupt("return",{opList:c,separateForm:!1,separateCanvas:!1});case 12:if(u=[1,0,0,1,0,0],l=[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]],h=B(this.data.rect,l,u),!this.oc){e.next=19;break}return e.next=18,t.parseMarkedContentProps(this.oc,null);case 18:d=e.sent;case 19:return void 0!==d&&c.addOp(n.OPS.beginMarkedContentProps,["OC",d]),c.addOp(n.OPS.beginAnnotation,[this.data.id,this.data.rect,h,this.getRotationMatrix(o),!1]),v=new g.StringStream(s),e.next=24,t.getOperatorList({stream:v,task:r,resources:this._fieldResources.mergedResources,operatorList:c});case 24:return c.addOp(n.OPS.endAnnotation,[]),void 0!==d&&c.addOp(n.OPS.endMarkedContent,[]),e.abrupt("return",{opList:c,separateForm:!1,separateCanvas:!1});case 27:case"end":return e.stop()}}),e,this)}))),function(e,t,r,n,a){return u.apply(this,arguments)})},{key:"_getMKDict",value:function(e){var t=new o.Dict(null);return e&&t.set("R",e),this.borderColor&&t.set("BC",N(this.borderColor)),this.backgroundColor&&t.set("BG",N(this.backgroundColor)),t.size>0?t:null}},{key:"save",value:(c=P(C().mark((function e(t,r,i){var c,u,l,f,h,d,p,v,y,m,b,w,k,S,x,O,F,P,T,I,E,j,M,_,L,R=this;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=i?i.get(this.data.id):void 0,u=c&&c.value,l=c&&c.rotation,u!==this.data.fieldValue&&void 0!==u){e.next=7;break}if(this._hasValueFromXFA||void 0!==l){e.next=6;break}return e.abrupt("return",null);case 6:u=u||this.data.fieldValue;case 7:if(void 0!==l||this._hasValueFromXFA||!Array.isArray(u)||!Array.isArray(this.data.fieldValue)||u.length!==this.data.fieldValue.length||!u.every((function(e,t){return e===R.data.fieldValue[t]}))){e.next=9;break}return e.abrupt("return",null);case 9:if(void 0===l&&(l=this.rotation),f=null,this._needAppearances){e.next=19;break}return e.next=14,this._getAppearance(t,r,n.RenderingIntentFlag.SAVE,i);case 14:if(null!==(f=e.sent)){e.next=17;break}return e.abrupt("return",null);case 17:e.next=19;break;case 19:if(h=!1,f&&f.needAppearances&&(h=!0,f=null),d=t.xref,(p=d.fetchIfRef(this.ref))instanceof o.Dict){e.next=25;break}return e.abrupt("return",null);case 25:v=new o.Dict(d),y=A(p.getKeys());try{for(y.s();!(m=y.n()).done;)"AP"!==(b=m.value)&&v.set(b,p.getRaw(b))}catch(e){y.e(e)}finally{y.f()}return w={path:(0,n.stringToPDFString)(v.get("T")||""),value:u},k=function(e){return(0,a.isAscii)(e)?e:(0,a.stringToUTF16String)(e,!0)},v.set("V",Array.isArray(u)?u.map(k):k(u)),(S=this._getMKDict(l))&&v.set("MK",S),x=d.encrypt,O=x?x.createCipherTransform(this.ref.num,this.ref.gen):null,F=[],P=[{ref:this.ref,data:"",xfa:w,needAppearances:h}],null!==f&&(T=d.getNewTemporaryRef(),I=new o.Dict(d),v.set("AP",I),I.set("N",T),E=null,x&&(E=x.createCipherTransform(T.num,T.gen),f=E.encryptString(f)),j=this._getSaveFieldResources(d),M=new g.StringStream(f),(_=M.dict=new o.Dict(d)).set("Length",f.length),_.set("Subtype",o.Name.get("Form")),_.set("Resources",j),_.set("BBox",[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]]),(L=this.getRotationMatrix(i))!==n.IDENTITY_MATRIX&&_.set("Matrix",L),(0,s.writeObject)(T,M,F,E),P.push({ref:T,data:F.join(""),xfa:null,needAppearances:!1}),F.length=0),v.set("M","D:".concat((0,n.getModificationDate)())),(0,s.writeObject)(this.ref,v,F,O),P[0].data=F.join(""),e.abrupt("return",P);case 42:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return c.apply(this,arguments)})},{key:"_getAppearance",value:(r=P(C().mark((function e(t,r,o,s){var c,u,l,h,d,p,g,v,y,m,b,w,k,S,x,O,F,P,I,E,j,M,_,L,R,N,D,B,U,$,X,H,q,G,z,W,V,Y,K,J,Z,Q,ee,te;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.hasFieldFlag(n.AnnotationFieldFlag.PASSWORD)){e.next=3;break}return e.abrupt("return",null);case 3:if((c=s?s.get(this.data.id):void 0)&&(u=c.formattedValue||c.value,l=c.rotation),void 0!==l||void 0!==u||this._needAppearances){e.next=8;break}if(this._hasValueFromXFA&&!this.appearance){e.next=8;break}return e.abrupt("return",null);case 8:if(h=this.getBorderAndBackgroundAppearances(s),void 0!==u){e.next=13;break}if(u=this.data.fieldValue){e.next=13;break}return e.abrupt("return","/Tx BMC q ".concat(h,"Q EMC"));case 13:if(Array.isArray(u)&&1===u.length&&(u=u[0]),(0,n.assert)("string"==typeof u,"Expected \`value\` to be a string."),this.data.combo?(d=this.data.options.find((function(e){var t=e.exportValue;return u===t}))||this.data.options[0],u=d&&d.displayValue||""):u=u.trim(),""!==u){e.next=18;break}return e.abrupt("return","/Tx BMC q ".concat(h,"Q EMC"));case 18:return void 0===l&&(l=this.rotation),p=-1,this.data.multiLine?(g=u.split(/\\r\\n?|\\n/).map((function(e){return e.normalize("NFC")})),p=g.length):g=[u.replace(/\\r\\n?|\\n/,"").normalize("NFC")],v=1,y=2,m=this.data.rect[3]-this.data.rect[1],b=this.data.rect[2]-this.data.rect[0],90!==l&&270!==l||(b=(w=[m,b])[0],m=w[1]),this._defaultAppearance||(this.data.defaultAppearanceData=(0,i.parseDefaultAppearance)(this._defaultAppearance="/Helvetica 0 Tf 0 g")),e.next=29,f._getFontData(t,r,this.data.defaultAppearanceData,this._fieldResources.mergedResources);case 29:k=e.sent,F=[],P=!1,I=A(g);try{for(I.s();!(E=I.n()).done;)j=E.value,(M=k.encodeString(j)).length>1&&(P=!0),F.push(M.join(""))}catch(e){I.e(e)}finally{I.f()}if(!(P&&o&n.RenderingIntentFlag.SAVE)){e.next=36;break}return e.abrupt("return",{needAppearances:!0});case 36:if(!P||!this._isOffscreenCanvasSupported){e.next=58;break}if(_=this.data.comb?"monospace":"sans-serif",L=new i.FakeUnicodeFont(t.xref,_),R=L.createFontResources(g.join("")),N=R.getRaw("Font"),this._fieldResources.mergedResources.has("Font")){D=this._fieldResources.mergedResources.get("Font"),B=A(N.getKeys());try{for(B.s();!(U=B.n()).done;)$=U.value,D.set($,N.getRaw($))}catch(e){B.e(e)}finally{B.f()}}else this._fieldResources.mergedResources.set("Font",N);return X=L.fontName.name,e.next=45,f._getFontData(t,r,{fontName:X,fontSize:0},R);case 45:for(k=e.sent,H=0,q=F.length;H2)){e.next=75;break}return e.abrupt("return","/Tx BMC q ".concat(h,"BT ")+S+" 1 0 0 1 ".concat((0,a.numberToString)(y)," ").concat((0,a.numberToString)(Q)," Tm (").concat((0,a.escapeString)(F[0]),") Tj")+" ET Q EMC");case 75:return ee={shift:0},te=this._renderText(F[0],k,x,b,Z,ee,y,Q),e.abrupt("return","/Tx BMC q ".concat(h,"BT ")+S+" 1 0 0 1 0 0 Tm ".concat(te)+" ET Q EMC");case 78:case"end":return e.stop()}}),e,this)}))),function(e,t,n,a){return r.apply(this,arguments)})},{key:"_getTextWidth",value:function(e,t){return t.charsToGlyphs(e).reduce((function(e,t){return e+t.width}),0)/1e3}},{key:"_computeFontSize",value:function(e,t,r,a,o){var s=this,c=this.data.defaultAppearanceData.fontSize,u=(c||12)*n.LINE_FACTOR,l=Math.round(e/u);if(!c){var f=function(e){return Math.floor(100*e)/100};if(-1===o){var h=this._getTextWidth(r,a);c=f(Math.min(e/n.LINE_FACTOR,h>t?t/h:1/0)),l=1}else{var d,p=r.split(/\\r\\n?|\\n/),g=[],v=A(p);try{for(v.s();!(d=v.n()).done;){var y=d.value,m=a.encodeString(y).join(""),b=a.charsToGlyphs(m),w=a.getCharPositions(m);g.push({line:m,glyphs:b,positions:w})}}catch(e){v.e(e)}finally{v.f()}var k=function(r){for(var n=0,i=0,o=g;ie)return!0}return!1};for(l=Math.max(l,o);k(c=f((u=e/l)/n.LINE_FACTOR));)l++}var S=this.data.defaultAppearanceData,x=S.fontName,O=S.fontColor;this._defaultAppearance=(0,i.createDefaultAppearance)({fontSize:c,fontName:x,fontColor:O})}return[this._defaultAppearance,c,e/l]}},{key:"_renderText",value:function(e,t,r,n,i,o,s,c){var u;u=1===i?(n-this._getTextWidth(e,t)*r)/2:2===i?n-this._getTextWidth(e,t)*r-s:s;var l=(0,a.numberToString)(u-o.shift);return o.shift=u,c=(0,a.numberToString)(c),"".concat(l," ").concat(c," Td (").concat((0,a.escapeString)(e),") Tj")}},{key:"_getSaveFieldResources",value:function(e){var t=this._fieldResources,r=t.localResources,n=t.appearanceResources,a=t.acroFormResources,i=this.data.defaultAppearanceData&&this.data.defaultAppearanceData.fontName;if(!i)return r||o.Dict.empty;for(var s=0,c=[r,n];s2)&&(s=null),i.data.textAlignment=s;var c=(0,a.getInheritableProperty)({dict:o,key:"MaxLen"});return(!Number.isInteger(c)||c<0)&&(c=0),i.data.maxLen=c,i.data.multiLine=i.hasFieldFlag(n.AnnotationFieldFlag.MULTILINE),i.data.comb=i.hasFieldFlag(n.AnnotationFieldFlag.COMB)&&!i.hasFieldFlag(n.AnnotationFieldFlag.MULTILINE)&&!i.hasFieldFlag(n.AnnotationFieldFlag.PASSWORD)&&!i.hasFieldFlag(n.AnnotationFieldFlag.FILESELECT)&&0!==i.data.maxLen,i.data.doNotScroll=i.hasFieldFlag(n.AnnotationFieldFlag.DONOTSCROLL),i}return _(r,[{key:"_getCombAppearance",value:function(e,t,r,n,i,o,s,c,u,l,f){var h,d=i/this.data.maxLen,p=this.getBorderAndBackgroundAppearances(f),g=[],v=A(t.getCharPositions(r));try{for(v.s();!(h=v.n()).done;){var y=T(h.value,2),m=y[0],b=y[1];g.push("(".concat((0,a.escapeString)(r.substring(m,b)),") Tj"))}}catch(e){v.e(e)}finally{v.f()}var w=g.join(" ".concat((0,a.numberToString)(d)," 0 Td "));return"/Tx BMC q ".concat(p,"BT ")+e+" 1 0 0 1 ".concat((0,a.numberToString)(s)," ").concat((0,a.numberToString)(c+u)," Tm ").concat(w)+" ET Q EMC"}},{key:"_getMultilineAppearance",value:function(e,t,r,n,i,o,s,c,u,l,f,h){for(var d=[],p=i-2*c,g={shift:0},v=0,y=t.length;v4&&void 0!==arguments[4]?arguments[4]:{};e=a.line||e;var i=a.glyphs||t.charsToGlyphs(e);if(i.length<=1)return[e];for(var o=a.positions||t.getCharPositions(e),s=r/1e3,c=[],u=-1,l=-1,f=-1,h=0,d=0,p=0,g=i.length;pn?(c.push(e.substring(h,y)),h=y,d=w,u=-1,f=-1):(d+=w,u=y,l=m,f=p):d+w>n?-1!==u?(c.push(e.substring(h,l)),h=l,p=f+1,u=-1,d=0):(c.push(e.substring(h,y)),h=y,d=w):d+=w}return h0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}},{key:"_getAppearance",value:(t=P(C().mark((function e(t,r,a,s){var c,u,l,f,h,d,p,g,v,m,b,w,k,S,O,F,P,I,E,j,M,_,L,R,N,D,B,U,$,X,q,G,z,W,V,Y,K;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.data.combo){e.next=2;break}return e.abrupt("return",y(x(o.prototype),"_getAppearance",this).call(this,t,r,a,s));case 2:if((l=s?s.get(this.data.id):void 0)&&(u=l.rotation,c=l.value),void 0!==u||void 0!==c||this._needAppearances){e.next=6;break}return e.abrupt("return",null);case 6:for(void 0===c?c=this.data.fieldValue:Array.isArray(c)||(c=[c]),f=1,h=2,d=this.data.rect[3]-this.data.rect[1],p=this.data.rect[2]-this.data.rect[0],90!==u&&270!==u||(p=(g=[d,p])[0],d=g[1]),v=this.data.options.length,m=[],b=0;bP&&(P=_,I=M)}catch(e){E.e(e)}finally{E.f()}L=this._computeFontSize(F,p-2*h,I,k,-1),R=T(L,2),S=R[0],O=R[1]}if(N=O*n.LINE_FACTOR,D=(N-O)/2,B=Math.floor(d/N),1===m.length?($=m[0],U=$-$%B):U=m.length?m[0]:0,X=Math.min(U+B+1,v),q=["/Tx BMC q","1 1 ".concat(p," ").concat(d," re W n")],m.length){q.push("0.600006 0.756866 0.854904 rg"),G=A(m);try{for(G.s();!(z=G.n()).done;)W=z.value,U<=W&&W1)){e.next=25;break}return e.abrupt("return",null);case 25:D=B.join(""),L.push(D),U=0,$=w.charsToGlyphs(D),X=A($);try{for(X.s();!(q=X.n()).done;)G=q.value,U+=G.width*M}catch(e){X.e(e)}finally{X.f()}_=Math.max(_,U);case 32:e.next=20;break;case 34:e.next=39;break;case 36:e.prev=36,e.t0=e.catch(18),R.e(e.t0);case 39:return e.prev=39,R.f(),e.finish(39);case 42:for(z=1,_>P&&(z=P/_),W=1,V=n.LINE_FACTOR*h,Y=n.LINE_DESCENT_FACTOR*h,(K=V*j.length)>I&&(W=I/K),J=Math.min(z,W),Z=h*J,Q=["q","0 0 ".concat((0,a.numberToString)(P)," ").concat((0,a.numberToString)(I)," re W n"),"BT","1 0 0 1 0 ".concat((0,a.numberToString)(I+Y)," Tm 0 Tc ").concat((0,i.getPdfColor)(f,!0)),"/Helv ".concat((0,a.numberToString)(Z)," Tf")],ee=(0,a.numberToString)(V),te=0,re=L;te{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.FakeUnicodeFont=void 0,t.createDefaultAppearance=function(e){var t=e.fontSize,r=e.fontName,n=e.fontColor;return"/".concat((0,i.escapePDFName)(r)," ").concat(t," Tf ").concat(w(n,!0))},t.getPdfColor=w,t.parseDefaultAppearance=function(e){return new b(e).parse()};var a=r(134),i=r(135),o=r(2),s=r(143),c=r(144),u=r(139);function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=h(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||h(e,t)||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 h(e,t){if(e){if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,t):void 0}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&(t.fontSize=u);break;case o.OPS.setFillRGBColor:s.ColorSpace.singletons.rgb.getRgbItem(n,0,t.fontColor,0);break;case o.OPS.setFillGray:s.ColorSpace.singletons.gray.getRgbItem(n,0,t.fontColor,0);break;case o.OPS.setFillColorSpace:s.ColorSpace.singletons.cmyk.getRgbItem(n,0,t.fontColor,0)}}}catch(e){(0,o.warn)('parseDefaultAppearance - ignoring errors: "'.concat(e,'".'))}return t}}]),c}(c.EvaluatorPreprocessor);function w(e,t){if(e[0]===e[1]&&e[1]===e[2]){var r=e[0]/255;return"".concat((0,i.numberToString)(r)," ").concat(t?"g":"G")}return Array.from(e,(function(e){return(0,i.numberToString)(e/255)})).join(" ")+" ".concat(t?"rg":"RG")}var k=function(){function e(t,r){p(this,e),this.xref=t,this.widths=null,this.firstChar=1/0,this.lastChar=-1/0,this.fontFamily=r;var n=new OffscreenCanvas(1,1);this.ctxMeasure=n.getContext("2d"),e._fontNameId||(e._fontNameId=1),this.fontName=a.Name.get("InvalidPDFjsFont_".concat(r,"_").concat(e._fontNameId++))}return v(e,[{key:"toUnicodeRef",get:function(){if(!e._toUnicodeRef){var t=e.toUnicodeStream=new u.StringStream("/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo\\n<< /Registry (Adobe)\\n/Ordering (UCS) /Supplement 0 >> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000> \\nendcodespacerange\\n1 beginbfrange\\n<0000> <0000>\\nendbfrange\\nendcmap CMapName currentdict /CMap defineresource pop end end"),r=new a.Dict(this.xref);t.dict=r,r.set("Length",346),e._toUnicodeRef=this.xref.getNewPersistentRef(t)}return e._toUnicodeRef}},{key:"fontDescriptorRef",get:function(){if(!e._fontDescriptorRef){var t=new a.Dict(this.xref);t.set("Type",a.Name.get("FontDescriptor")),t.set("FontName",this.fontName),t.set("FontFamily","MyriadPro Regular"),t.set("FontBBox",[0,0,0,0]),t.set("FontStretch",a.Name.get("Normal")),t.set("FontWeight",400),t.set("ItalicAngle",0),e._fontDescriptorRef=this.xref.getNewPersistentRef(t)}return e._fontDescriptorRef}},{key:"descendantFontRef",get:function(){var e=new a.Dict(this.xref);e.set("BaseFont",this.fontName),e.set("Type",a.Name.get("Font")),e.set("Subtype",a.Name.get("CIDFontType0")),e.set("CIDToGIDMap",a.Name.get("Identity")),e.set("FirstChar",this.firstChar),e.set("LastChar",this.lastChar),e.set("FontDescriptor",this.fontDescriptorRef),e.set("DW",1e3);var t,r,n=[],i=null,o=null,s=l((r=this.widths.entries(),function(e){if(Array.isArray(e))return d(e)}(r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||h(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).sort());try{for(s.s();!(t=s.n()).done;){var c=f(t.value,2),u=c[0],p=c[1];i?u===i+o.length?o.push(p):(n.push(i,o),i=u,o=[p]):(i=u,o=[p])}}catch(e){s.e(e)}finally{s.f()}i&&n.push(i,o),e.set("W",n);var g=new a.Dict(this.xref);return g.set("Ordering","Identity"),g.set("Registry","Adobe"),g.set("Supplement",0),e.set("CIDSystemInfo",g),this.xref.getNewPersistentRef(e)}},{key:"baseFontRef",get:function(){var e=new a.Dict(this.xref);return e.set("BaseFont",this.fontName),e.set("Type",a.Name.get("Font")),e.set("Subtype",a.Name.get("Type0")),e.set("Encoding",a.Name.get("Identity-H")),e.set("DescendantFonts",[this.descendantFontRef]),e.set("ToUnicode",this.toUnicodeRef),this.xref.getNewPersistentRef(e)}},{key:"resources",get:function(){var e=new a.Dict(this.xref),t=new a.Dict(this.xref);return t.set(this.fontName.name,this.baseFontRef),e.set("Font",t),e}},{key:"_createContext",value:function(){return this.widths=new Map,this.ctxMeasure.font="1000px ".concat(this.fontFamily),this.ctxMeasure}},{key:"createFontResources",value:function(e){var t,r=this._createContext(),n=l(e.split(/\\r\\n?|\\n/));try{for(n.s();!(t=n.n()).done;){var a,i=l(t.value.split(""));try{for(i.s();!(a=i.n()).done;){var o=a.value,s=o.charCodeAt(0);if(!this.widths.has(s)){var c=r.measureText(o),u=Math.ceil(c.width);this.widths.set(s,u),this.firstChar=Math.min(s,this.firstChar),this.lastChar=Math.max(s,this.lastChar)}}}catch(e){i.e(e)}finally{i.f()}}}catch(e){n.e(e)}finally{n.f()}return this.resources}},{key:"createAppearance",value:function(e,t,r,n,s){var c,h=this._createContext(),d=[],p=-1/0,g=l(e.split(/\\r\\n?|\\n/));try{for(g.s();!(c=g.n()).done;){var v=c.value;d.push(v);var y=h.measureText(v).width;p=Math.max(p,y);var m,b=l(v.split(""));try{for(b.s();!(m=b.n()).done;){var k=m.value,S=k.charCodeAt(0),x=this.widths.get(S);if(void 0===x){var O=h.measureText(k);x=Math.ceil(O.width),this.widths.set(S,x),this.firstChar=Math.min(S,this.firstChar),this.lastChar=Math.max(S,this.lastChar)}}}catch(e){b.e(e)}finally{b.f()}}}catch(e){g.e(e)}finally{g.f()}p*=n/1e3;var A=f(t,4),C=A[0],F=A[1],P=A[2]-C,T=A[3]-F;if(r%180!=0){var I=[T,P];P=I[0],T=I[1]}var E=1;p>P&&(E=P/p);var j=1,M=o.LINE_FACTOR*n,_=o.LINE_DESCENT_FACTOR*n,L=M*d.length;L>T&&(j=T/L);for(var R=n*Math.min(E,j),N=["q","0 0 ".concat((0,i.numberToString)(P)," ").concat((0,i.numberToString)(T)," re W n"),"BT","1 0 0 1 0 ".concat((0,i.numberToString)(T+_)," Tm 0 Tc ").concat(w(s,!0)),"/".concat(this.fontName.name," ").concat((0,i.numberToString)(R)," Tf")],D=(0,i.numberToString)(M),B=0,U=d;B Tj"))}N.push("ET","Q");var X=N.join("\\n"),H=new a.Dict(this.xref);if(H.set("Subtype",a.Name.get("Form")),H.set("Type",a.Name.get("XObject")),H.set("BBox",[0,0,P,T]),H.set("Length",X.length),H.set("Resources",this.resources),r){var q=(0,i.getRotationMatrix)(r,P,T);H.set("Matrix",q)}var G=new u.StringStream(X);return G.dict=H,G}}]),e}();t.FakeUnicodeFont=k},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSpace=void 0;var n=r(2),a=r(134),i=r(136),o=r(135);function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}function u(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=l(e);if(t){var a=l(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===f(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function l(e){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},l(e)}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var d={};function p(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==f(h)&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(h).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function d(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(e,t){for(var r=0;rf&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){for(var d=o<=8?new Uint8Array(f):new Uint16Array(f),p=0;p2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3?arguments[3]:void 0;if((e=t.fetchIfRef(e))instanceof a.Name)switch(e.name){case"G":case"DeviceGray":return this.singletons.gray;case"RGB":case"DeviceRGB":return this.singletons.rgb;case"CMYK":case"DeviceCMYK":return this.singletons.cmyk;case"Pattern":return new b(null);default:if(r instanceof a.Dict){var o=r.get("ColorSpace");if(o instanceof a.Dict){var s=o.get(e.name);if(s){if(s instanceof a.Name)return this._parse(s,t,r,i);e=s;break}}}throw new n.FormatError("Unrecognized ColorSpace: ".concat(e.name))}if(Array.isArray(e)){var c,u,l,f,h,d,p=t.fetchIfRef(e[0]).name;switch(p){case"G":case"DeviceGray":return this.singletons.gray;case"RGB":case"DeviceRGB":return this.singletons.rgb;case"CMYK":case"DeviceCMYK":return this.singletons.cmyk;case"CalGray":return f=(c=t.fetchIfRef(e[1])).getArray("WhitePoint"),h=c.getArray("BlackPoint"),d=c.get("Gamma"),new O(f,h,d);case"CalRGB":f=(c=t.fetchIfRef(e[1])).getArray("WhitePoint"),h=c.getArray("BlackPoint"),d=c.getArray("Gamma");var g=c.getArray("Matrix");return new A(f,h,d,g);case"ICCBased":var v=t.fetchIfRef(e[1]).dict;u=v.get("N");var y=v.get("Alternate");if(y){var k=this._parse(y,t,r,i);if(k.numComps===u)return k;(0,n.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===u)return this.singletons.gray;if(3===u)return this.singletons.rgb;if(4===u)return this.singletons.cmyk;break;case"Pattern":return(l=e[1]||null)&&(l=this._parse(l,t,r,i)),new b(l);case"I":case"Indexed":l=this._parse(e[1],t,r,i);var S=t.fetchIfRef(e[2])+1,x=t.fetchIfRef(e[3]);return new w(l,S,x);case"Separation":case"DeviceN":var F=t.fetchIfRef(e[1]);u=Array.isArray(F)?F.length:1,l=this._parse(e[2],t,r,i);var P=i.create(e[3]);return new m(u,l,P);case"Lab":f=(c=t.fetchIfRef(e[1])).getArray("WhitePoint"),h=c.getArray("BlackPoint");var T=c.getArray("Range");return new C(f,h,T);default:throw new n.FormatError("Unimplemented ColorSpace object: ".concat(p))}}throw new n.FormatError("Unrecognized ColorSpace object: ".concat(e))}},{key:"isDefaultDecode",value:function(e,t){if(!Array.isArray(e))return!0;if(2*t!==e.length)return(0,n.warn)("The decode map is not the correct length"),!0;for(var r=0,a=e.length;r=.99554525?1:d(0,1,1.055*Math.pow(e,1/2.4)-.055)}function d(e,t,r){return Math.max(e,Math.min(t,r))}function g(e){return e<0?-g(-e):e>8?Math.pow((e+16)/116,3):e*l}function m(n,s,u,l,p,v){var y=d(0,1,s[u]*v),m=d(0,1,s[u+1]*v),b=d(0,1,s[u+2]*v),w=1===y?1:Math.pow(y,n.GR),k=1===m?1:Math.pow(m,n.GG),S=1===b?1:Math.pow(b,n.GB),x=n.MXA*w+n.MXB*k+n.MXC*S,O=n.MYA*w+n.MYB*k+n.MYC*S,A=n.MZA*w+n.MZB*k+n.MZC*S,C=o;C[0]=x,C[1]=O,C[2]=A;var F=c;!function(r,n,a){if(1===r[0]&&1===r[2])return a[0]=n[0],a[1]=n[1],void(a[2]=n[2]);var o=a;f(e,n,o);var s=i;!function(e,t,r){r[0]=1*t[0]/e[0],r[1]=1*t[1]/e[1],r[2]=1*t[2]/e[2]}(r,o,s),f(t,s,a)}(n.whitePoint,C,F);var P=o;!function(e,t,r){if(0===e[0]&&0===e[1]&&0===e[2])return r[0]=t[0],r[1]=t[1],void(r[2]=t[2]);var n=g(0),a=(1-n)/(1-g(e[0])),i=1-a,o=(1-n)/(1-g(e[1])),s=1-o,c=(1-n)/(1-g(e[2])),u=1-c;r[0]=t[0]*a+i,r[1]=t[1]*o+s,r[2]=t[2]*c+u}(n.blackPoint,F,P);var T=c;!function(r,n,a){var o=a;f(e,n,o);var s=i;!function(e,t,r){r[0]=.95047*t[0]/e[0],r[1]=1*t[1]/e[1],r[2]=1.08883*t[2]/e[2]}(r,o,s),f(t,s,a)}(a,P,T);var I=o;f(r,T,I),l[p]=255*h(I[0]),l[p+1]=255*h(I[1]),l[p+2]=255*h(I[2])}return function(e){s(r,e);var t=u(r);function r(e,a,i,o){var s;if(p(this,r),s=t.call(this,"CalRGB",3),!e)throw new n.FormatError("WhitePoint missing - required for color space CalRGB");a=a||new Float32Array(3),i=i||new Float32Array([1,1,1]),o=o||new Float32Array([1,0,0,0,1,0,0,0,1]);var c=e[0],u=e[1],l=e[2];s.whitePoint=e;var f=a[0],h=a[1],d=a[2];if(s.blackPoint=a,s.GR=i[0],s.GG=i[1],s.GB=i[2],s.MXA=o[0],s.MYA=o[1],s.MZA=o[2],s.MXB=o[3],s.MYB=o[4],s.MZB=o[5],s.MXC=o[6],s.MYC=o[7],s.MZC=o[8],c<0||l<0||1!==u)throw new n.FormatError("Invalid WhitePoint components for ".concat(s.name)+", no fallback available");return(f<0||h<0||d<0)&&((0,n.info)("Invalid BlackPoint for ".concat(s.name," [").concat(f,", ").concat(h,", ").concat(d,"], ")+"falling back to default."),s.blackPoint=new Float32Array(3)),(s.GR<0||s.GG<0||s.GB<0)&&((0,n.info)("Invalid Gamma [".concat(s.GR,", ").concat(s.GG,", ").concat(s.GB,"] for ")+"".concat(s.name,", falling back to default.")),s.GR=s.GG=s.GB=1),s}return v(r,[{key:"getRgbItem",value:function(e,t,r,n){m(this,e,t,r,n,1)}},{key:"getRgbBuffer",value:function(e,t,r,n,a,i,o){for(var s=1/((1<=6/29?Math.pow(e,3):108/841*(e-4/29)}function t(e,t,r,n){return r+e*(n-r)/t}function r(r,n,a,i,o,s){var c=n[a],u=n[a+1],l=n[a+2];!1!==i&&(c=t(c,i,0,100),u=t(u,i,r.amin,r.amax),l=t(l,i,r.bmin,r.bmax)),u>r.amax?u=r.amax:ur.bmax?l=r.bmax:lo.amax||o.bmin>o.bmax)&&((0,n.info)("Invalid Range, falling back to defaults"),o.amin=-100,o.amax=100,o.bmin=-100,o.bmax=100),o}return v(a,[{key:"getRgbItem",value:function(e,t,n,a){r(this,e,t,!1,n,a)}},{key:"getRgbBuffer",value:function(e,t,n,a,i,o,s){for(var c=(1<{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.PartialEvaluator=t.EvaluatorPreprocessor=void 0;var a=r(2),i=r(145),o=r(134),s=r(163),c=r(167),u=r(166),l=r(170),f=r(179),h=r(180),d=r(171),p=r(186),g=r(146),v=r(188),y=r(139),m=r(136),b=r(189),w=r(143),k=r(148),S=r(168),x=r(135),O=r(174),A=r(169),C=r(190),F=r(191),P=r(192);function T(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||D(e,t)||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 I(e){return function(e){if(Array.isArray(e))return B(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||D(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(){E=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),s=new C(n||[]);return a(o,"_invoke",{value:S(e,r,s)}),o}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var h={};function d(){}function p(){}function g(){}var v={};u(v,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(F([])));m&&m!==t&&r.call(m,o)&&(v=m);var b=g.prototype=d.prototype=Object.create(v);function w(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function k(e,t){function i(a,o,s,c){var u=f(e[a],e,o);if("throw"!==u.type){var l=u.arg,h=l.value;return h&&"object"==n(h)&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){i("next",e,s,c)}),(function(e){i("throw",e,s,c)})):t.resolve(h).then((function(e){l.value=e,s(l)}),(function(e){return i("throw",e,s,c)}))}c(u.arg)}var o;a(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){i(e,r,t,n)}))}return o=o?o.then(n,n):n()}})}function S(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=x(o,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=f(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===h)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function x(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,x(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var a=f(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,h;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function A(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function F(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),A(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;A(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:F(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},e}function j(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function M(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){j(i,n,a,o,s,"next",e)}function s(e){j(i,n,a,o,s,"throw",e)}o(void 0)}))}}function _(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function L(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function D(e,t){if(e){if("string"==typeof e)return B(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?B(e,t):void 0}}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]&&arguments[1];if(Array.isArray(e)){var r,n=N(e);try{for(n.s();!(r=n.n()).done;){var i=X(r.value,!0);if(i)return i}}catch(e){n.e(e)}finally{n.f()}return(0,a.warn)("Unsupported blend mode Array: ".concat(e)),"source-over"}if(!(e instanceof o.Name))return t?null:"source-over";switch(e.name){case"Normal":case"Compatible":return"source-over";case"Multiply":return"multiply";case"Screen":return"screen";case"Overlay":return"overlay";case"Darken":return"darken";case"Lighten":return"lighten";case"ColorDodge":return"color-dodge";case"ColorBurn":return"color-burn";case"HardLight":return"hard-light";case"SoftLight":return"soft-light";case"Difference":return"difference";case"Exclusion":return"exclusion";case"Hue":return"hue";case"Saturation":return"saturation";case"Color":return"color";case"Luminosity":return"luminosity"}return t?null:((0,a.warn)("Unsupported blend mode: ".concat(e.name)),"source-over")}function H(e){e.fn===a.OPS.paintImageMaskXObject&&e.args[0]&&e.args[0].count>0&&e.args[0].count++}var q=function(){function e(){_(this,e),this.reset()}return R(e,[{key:"check",value:function(){return!(++this.checked0&&void 0!==arguments[0]?arguments[0]:null,t=Object.create(this);return t.options=Object.assign(Object.create(null),this.options,e),t}},{key:"hasBlendModes",value:function(e,t){if(!(e instanceof o.Dict))return!1;if(e.objId&&t.has(e.objId))return!1;var r=new o.RefSet(t);e.objId&&r.put(e.objId);for(var n=[e],i=this.xref;n.length;){var s=n.shift(),c=s.get("ExtGState");if(c instanceof o.Dict){var u,l=N(c.getRawValues());try{for(l.s();!(u=l.n()).done;){var f=u.value;if(f instanceof o.Ref){if(r.has(f))continue;try{f=i.fetch(f)}catch(e){r.put(f),(0,a.info)('hasBlendModes - ignoring ExtGState: "'.concat(e,'".'));continue}}if(f instanceof o.Dict){f.objId&&r.put(f.objId);var h=f.get("BM");if(h instanceof o.Name){if("Normal"!==h.name)return!0}else if(void 0!==h&&Array.isArray(h)){var d,p=N(h);try{for(p.s();!(d=p.n()).done;){var g=d.value;if(g instanceof o.Name&&"Normal"!==g.name)return!0}}catch(e){p.e(e)}finally{p.f()}}}}}catch(e){l.e(e)}finally{l.f()}}var v=s.get("XObject");if(v instanceof o.Dict){var y,b=N(v.getRawValues());try{for(b.s();!(y=b.n()).done;){var w=y.value;if(w instanceof o.Ref){if(r.has(w))continue;try{w=i.fetch(w)}catch(e){r.put(w),(0,a.info)('hasBlendModes - ignoring XObject: "'.concat(e,'".'));continue}}if(w instanceof m.BaseStream){w.dict.objId&&r.put(w.dict.objId);var k=w.dict.get("Resources");k instanceof o.Dict&&(k.objId&&r.has(k.objId)||(n.push(k),k.objId&&r.put(k.objId)))}}}catch(e){b.e(e)}finally{b.f()}}}var S,x=N(r);try{for(x.s();!(S=x.n()).done;){var O=S.value;t.put(O)}}catch(e){x.e(e)}finally{x.f()}return!1}},{key:"fetchBuiltInCMap",value:(D=M(E().mark((function e(t){var r,n,i,o;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r=this.builtInCMapCache.get(t))){e.next=3;break}return e.abrupt("return",r);case 3:if(null===this.options.cMapUrl){e.next=19;break}return i="".concat(this.options.cMapUrl).concat(t,".bcmap"),e.next=7,fetch(i);case 7:if((o=e.sent).ok){e.next=10;break}throw new Error('fetchBuiltInCMap: failed to fetch file "'.concat(i,'" with "').concat(o.statusText,'".'));case 10:return e.t0=Uint8Array,e.next=13,o.arrayBuffer();case 13:e.t1=e.sent,e.t2=new e.t0(e.t1),e.t3=a.CMapCompressionType.BINARY,n={cMapData:e.t2,compressionType:e.t3},e.next=22;break;case 19:return e.next=21,this.handler.sendWithPromise("FetchBuiltInCMap",{name:t});case 21:n=e.sent;case 22:return n.compressionType!==a.CMapCompressionType.NONE&&this.builtInCMapCache.set(t,n),e.abrupt("return",n);case 24:case"end":return e.stop()}}),e,this)}))),function(e){return D.apply(this,arguments)})},{key:"fetchStandardFontData",value:(L=M(E().mark((function e(t){var r,n,i,o,s,c;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r=this.standardFontDataCache.get(t))){e.next=3;break}return e.abrupt("return",new y.Stream(r));case 3:if(!this.options.useSystemFonts||"Symbol"===t||"ZapfDingbats"===t){e.next=5;break}return e.abrupt("return",null);case 5:if(n=(0,l.getFontNameToFileMap)(),i=n[t],null===this.options.standardFontDataUrl){e.next=20;break}return s="".concat(this.options.standardFontDataUrl).concat(i),e.next=10,fetch(s);case 10:if((c=e.sent).ok){e.next=15;break}(0,a.warn)('fetchStandardFontData: failed to fetch file "'.concat(s,'" with "').concat(c.statusText,'".')),e.next=18;break;case 15:return e.next=17,c.arrayBuffer();case 17:o=e.sent;case 18:e.next=29;break;case 20:return e.prev=20,e.next=23,this.handler.sendWithPromise("FetchStandardFontData",{filename:i});case 23:o=e.sent,e.next=29;break;case 26:e.prev=26,e.t0=e.catch(20),(0,a.warn)('fetchStandardFontData: failed to fetch file "'.concat(i,'" with "').concat(e.t0,'".'));case 29:if(o){e.next=31;break}return e.abrupt("return",null);case 31:return this.standardFontDataCache.set(t,o),e.abrupt("return",new y.Stream(o));case 33:case"end":return e.stop()}}),e,this,[[20,26]])}))),function(e){return L.apply(this,arguments)})},{key:"buildFormXObject",value:(j=M(E().mark((function e(t,r,n,i,s,c,u){var l,f,h,d,p,g,v,y,m,b,k;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(l=r.dict,f=l.getArray("Matrix"),h=l.getArray("BBox"),h=Array.isArray(h)&&4===h.length?a.Util.normalizeRect(h):null,!l.has("OC")){e.next=8;break}return e.next=7,this.parseMarkedContentProps(l.get("OC"),t);case 7:d=e.sent;case 8:if(void 0!==d&&i.addOp(a.OPS.beginMarkedContentProps,["OC",d]),!(g=l.get("Group"))){e.next=29;break}if(p={matrix:f,bbox:h,smask:n,isolated:!1,knockout:!1},v=g.get("S"),y=null,!(0,o.isName)(v,"Transparency")){e.next=27;break}if(p.isolated=g.get("I")||!1,p.knockout=g.get("K")||!1,!g.has("CS")){e.next=27;break}if(m=g.getRaw("CS"),!(b=w.ColorSpace.getCached(m,this.xref,u))){e.next=24;break}y=b,e.next=27;break;case 24:return e.next=26,this.parseColorSpace({cs:m,resources:t,localColorSpaceCache:u});case 26:y=e.sent;case 27:n&&n.backdrop&&(y=y||w.ColorSpace.singletons.rgb,n.backdrop=y.getRgb(n.backdrop,0)),i.addOp(a.OPS.beginGroup,[p]);case 29:return k=g?[f,null]:[f,h],i.addOp(a.OPS.paintFormXObjectBegin,k),e.abrupt("return",this.getOperatorList({stream:r,task:s,resources:l.get("Resources")||t,operatorList:i,initialState:c}).then((function(){i.addOp(a.OPS.paintFormXObjectEnd,[]),g&&i.addOp(a.OPS.endGroup,[p]),void 0!==d&&i.addOp(a.OPS.endMarkedContent,[])})));case 32:case"end":return e.stop()}}),e,this)}))),function(e,t,r,n,a,i,o){return j.apply(this,arguments)})},{key:"_sendImgData",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t?[t.bitmap||t.data.buffer]:null;return this.parsingType3Font||r?this.handler.send("commonobj",[e,"Image",t],n):this.handler.send("obj",[e,this.pageIndex,"Image",t],n)}},{key:"buildPaintImageXObject",value:(x=M(E().mark((function e(t){var r,n,i,o,s,c,u,l,f,h,d,p,g,v,y,m,b,w,S,x,O,A,C,F,T,I,j,M=this;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t.resources,n=t.image,i=t.isInline,o=void 0!==i&&i,s=t.operatorList,c=t.cacheKey,u=t.localImageCache,l=t.localColorSpaceCache,f=n.dict,h=f.objId,d=f.get("W","Width"),p=f.get("H","Height"),d&&"number"==typeof d&&p&&"number"==typeof p){e.next=8;break}return(0,a.warn)("Image dimensions are missing, or not numbers."),e.abrupt("return");case 8:if(!(-1!==(g=this.options.maxImageSize)&&d*p>g)){e.next=15;break}if(v="Image exceeded maximum allowed size and was removed.",!this.options.ignoreErrors){e.next=14;break}return(0,a.warn)(v),e.abrupt("return");case 14:throw new Error(v);case 15:if(!f.has("OC")){e.next=19;break}return e.next=18,this.parseMarkedContentProps(f.get("OC"),r);case 18:y=e.sent;case 19:if(!f.get("IM","ImageMask")){e.next=44;break}if(w=f.get("I","Interpolate"),S=d+7>>3,x=n.getBytes(S*p),O=f.getArray("D","Decode"),!this.parsingType3Font){e.next=32;break}return(m=P.PDFImage.createRawMask({imgArray:x,width:d,height:p,imageIsFromDecodeStream:n instanceof k.DecodeStream,inverseDecode:!!O&&O[0]>0,interpolate:w})).cached=!!c,b=[m],s.addImageOps(a.OPS.paintImageMaskXObject,b,y),c&&u.set(c,h,{fn:a.OPS.paintImageMaskXObject,args:b,optionalContent:y}),e.abrupt("return");case 32:if(!(m=P.PDFImage.createMask({imgArray:x,width:d,height:p,imageIsFromDecodeStream:n instanceof k.DecodeStream,inverseDecode:!!O&&O[0]>0,interpolate:w,isOffscreenCanvasSupported:this.options.isOffscreenCanvasSupported})).isSingleOpaquePixel){e.next=37;break}return s.addImageOps(a.OPS.paintSolidColorImageMask,[],y),c&&u.set(c,h,{fn:a.OPS.paintSolidColorImageMask,args:[],optionalContent:y}),e.abrupt("return");case 37:return A="mask_".concat(this.idFactory.createObjId()),s.addDependency(A),this._sendImgData(A,m),b=[{data:A,width:m.width,height:m.height,interpolate:m.interpolate,count:1}],s.addImageOps(a.OPS.paintImageMaskXObject,b,y),c&&u.set(c,h,{fn:a.OPS.paintImageMaskXObject,args:b,optionalContent:y}),e.abrupt("return");case 44:if(C=f.get("SM","SMask")||!1,F=f.get("Mask")||!1,!o||C||F||!(d+p<200)){e.next=52;break}return T=new P.PDFImage({xref:this.xref,res:r,image:n,isInline:o,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:l}),m=T.createImageData(!0),s.addImageOps(a.OPS.paintInlineImageXObject,[m],y),e.abrupt("return");case 52:I="img_".concat(this.idFactory.createObjId()),j=!1,this.parsingType3Font?I="".concat(this.idFactory.getDocId(),"_type3_").concat(I):h&&(j=this.globalImageCache.shouldCache(h,this.pageIndex))&&(I="".concat(this.idFactory.getDocId(),"_").concat(I)),s.addDependency(I),b=[I,d,p],P.PDFImage.buildImage({xref:this.xref,res:r,image:n,isInline:o,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:l}).then((function(e){return m=e.createImageData(!1),c&&h&&j&&M.globalImageCache.addByteSize(h,m.data.length),M._sendImgData(I,m,j)})).catch((function(e){return(0,a.warn)('Unable to decode image "'.concat(I,'": "').concat(e,'".')),M._sendImgData(I,null,j)})),s.addImageOps(a.OPS.paintImageXObject,b,y),c&&(u.set(c,h,{fn:a.OPS.paintImageXObject,args:b,optionalContent:y}),h&&((0,a.assert)(!o,"Cannot cache an inline image globally."),this.globalImageCache.addPageIndex(h,this.pageIndex),j&&this.globalImageCache.setData(h,{objId:I,fn:a.OPS.paintImageXObject,args:b,optionalContent:y,byteSize:0})));case 59:case"end":return e.stop()}}),e,this)}))),function(e){return x.apply(this,arguments)})},{key:"handleSMask",value:function(e,t,r,n,a,i){var o=e.get("G"),s={subtype:e.get("S").name,backdrop:e.get("BC")},c=e.get("TR");if((0,p.isPDFFunction)(c)){for(var u=this._pdfFunctionFactory.create(c),l=new Uint8Array(256),f=new Float32Array(1),h=0;h<256;h++)f[0]=h/255,u(f,0,f,0),l[h]=255*f[0]|0;s.transferMap=l}return this.buildFormXObject(t,o,s,r,n,a.state.clone(),i)}},{key:"handleTransferFunction",value:function(e){var t;if(Array.isArray(e))t=e;else{if(!(0,p.isPDFFunction)(e))return null;t=[e]}var r,n=[],a=0,i=0,s=N(t);try{for(s.s();!(r=s.n()).done;){var c=r.value,u=this.xref.fetchIfRef(c);if(a++,(0,o.isName)(u,"Identity"))n.push(null);else{if(!(0,p.isPDFFunction)(u))return null;for(var l=this._pdfFunctionFactory.create(u),f=new Uint8Array(256),h=new Float32Array(1),d=0;d<256;d++)h[0]=d/255,l(h,0,h,0),f[d]=255*h[0]|0;n.push(f),i++}}}catch(e){s.e(e)}finally{s.f()}return 1!==a&&4!==a||0===i?null:n}},{key:"handleTilingType",value:function(e,t,r,n,i,s,c,u){var l=this,h=new F.OperatorList,d=o.Dict.merge({xref:this.xref,dictArray:[i.get("Resources"),r]});return this.getOperatorList({stream:n,task:c,resources:d,operatorList:h}).then((function(){var r=h.getIR(),n=(0,f.getTilingPatternIR)(r,i,t);s.addDependencies(h.dependencies),s.addOp(e,n),i.objId&&u.set(null,i.objId,{operatorListIR:r,dict:i})})).catch((function(e){if(!(e instanceof a.AbortException)){if(l.options.ignoreErrors)return l.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorTilingPattern}),void(0,a.warn)('handleTilingType - ignoring pattern: "'.concat(e,'".'));throw e}}))}},{key:"handleSetFont",value:function(e,t,r,n,i,c){var u=this,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,f=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=t&&t[0]instanceof o.Name?t[0].name:null;return this.loadFont(h,r,e,l,f).then((function(t){return t.font.isType3Font?t.loadType3Data(u,e,i).then((function(){return n.addDependencies(t.type3Dependencies),t})).catch((function(e){return u.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontLoadType3}),new z({loadedName:"g_font_error",font:new s.ErrorFont("Type3 font load error: ".concat(e)),dict:t.font,evaluatorOptions:u.options})})):t})).then((function(e){return c.font=e.font,e.send(u.handler),e.loadedName}))}},{key:"handleText",value:function(t,r){var n=r.font,i=n.charsToGlyphs(t);return n.data&&(r.textRenderingMode&a.TextRenderingMode.ADD_TO_PATH_FLAG||"Pattern"===r.fillColorSpace.name||n.disableFontFace||this.options.disableFontFace)&&e.buildFontPaths(n,i,this.handler,this.options),i}},{key:"ensureStateFont",value:function(e){if(!e.font){var t=new a.FormatError("Missing setFont (Tf) operator before text rendering operator.");if(this.options.ignoreErrors)return this.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontState}),void(0,a.warn)('ensureStateFont: "'.concat(t,'".'));throw t}}},{key:"setGState",value:(g=M(E().mark((function e(t){var r,n,i,s,c,u,l,f,h,d,p,g,v,y,m,b=this;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=t.resources,n=t.gState,i=t.operatorList,s=t.cacheKey,c=t.task,u=t.stateManager,l=t.localGStateCache,f=t.localColorSpaceCache,h=n.objId,d=!0,p=[],g=Promise.resolve(),v=N(n.getKeys());try{for(m=function(){var e=y.value,t=n.get(e);switch(e){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":p.push([e,t]);break;case"Font":d=!1,g=g.then((function(){return b.handleSetFont(r,null,t[0],i,c,u.state).then((function(r){i.addDependency(r),p.push([e,[r,t[1]]])}))}));break;case"BM":p.push([e,X(t)]);break;case"SMask":if((0,o.isName)(t,"None")){p.push([e,!1]);break}t instanceof o.Dict?(d=!1,g=g.then((function(){return b.handleSMask(t,r,i,c,u,f)})),p.push([e,!0])):(0,a.warn)("Unsupported SMask type");break;case"TR":var s=b.handleTransferFunction(t);p.push([e,s]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":(0,a.info)("graphic state operator "+e);break;default:(0,a.info)("Unknown graphic state operator "+e)}},v.s();!(y=v.n()).done;)m()}catch(e){v.e(e)}finally{v.f()}return e.abrupt("return",g.then((function(){p.length>0&&i.addOp(a.OPS.setGState,[p]),d&&l.set(s,h,p)})));case 8:case"end":return e.stop()}}),e)}))),function(e){return g.apply(this,arguments)})},{key:"loadFont",value:function(t,r,n){var i,u=this,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,h=function(){var e=M(E().mark((function e(){return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new z({loadedName:"g_font_error",font:new s.ErrorFont('Font "'.concat(t,'" is not available.')),dict:r,evaluatorOptions:u.options}));case 1:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),d=this.xref;if(r)r instanceof o.Ref&&(i=r);else{var p=n.get("Font");p&&(i=p.getRaw(t))}if(!i){var g='Font "'.concat(t||r&&r.toString(),'" is not available');if(!this.options.ignoreErrors&&!this.parsingType3Font)return(0,a.warn)("".concat(g,".")),h();this.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontMissing}),(0,a.warn)("".concat(g," -- attempting to fallback to a default font.")),i=l||e.fallbackFontDict}if(this.parsingType3Font&&this.type3FontRefs.has(i))return h();if(this.fontCache.has(i))return this.fontCache.get(i);if(!((r=d.fetchIfRef(i))instanceof o.Dict))return h();if(r.cacheKey&&this.fontCache.has(r.cacheKey))return this.fontCache.get(r.cacheKey);var v,y=(0,a.createPromiseCapability)();try{(v=this.preEvaluateFont(r)).cssFontInfo=f}catch(e){return(0,a.warn)('loadFont - preEvaluateFont failed: "'.concat(e,'".')),h()}var m,b=v,w=b.descriptor,k=b.hash,S=i instanceof o.Ref;if(S&&(m="f".concat(i.toString())),k&&w instanceof o.Dict){w.fontAliases||(w.fontAliases=Object.create(null));var x=w.fontAliases;if(x[k]){var O=x[k].aliasRef;if(S&&O&&this.fontCache.has(O))return this.fontCache.putAlias(i,O),this.fontCache.get(i)}else x[k]={fontID:this.idFactory.createFontId()};S&&(x[k].aliasRef=i),m=x[k].fontID}return S?this.fontCache.put(i,y.promise):(m||(m=this.idFactory.createFontId()),r.cacheKey="cacheKey_".concat(m),this.fontCache.put(r.cacheKey,y.promise)),(0,a.assert)(m&&m.startsWith("f"),'The "fontID" must be (correctly) defined.'),r.loadedName="".concat(this.idFactory.getDocId(),"_").concat(m),this.translateFont(v).then((function(e){void 0!==e.fontType&&d.stats.addFontType(e.fontType),y.resolve(new z({loadedName:r.loadedName,font:e,dict:r,evaluatorOptions:u.options}))})).catch((function(e){u.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontTranslate}),(0,a.warn)('loadFont - translateFont failed: "'.concat(e,'".'));try{var t=w&&w.get("FontFile3"),n=t&&t.get("Subtype"),i=(0,c.getFontType)(v.type,n&&n.name);void 0!==i&&d.stats.addFontType(i)}catch(e){}y.resolve(new z({loadedName:r.loadedName,font:new s.ErrorFont(e instanceof Error?e.message:e),dict:r,evaluatorOptions:u.options}))})),y.promise}},{key:"buildPath",value:function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=e.length-1;if(r||(r=[]),i<0||e.fnArray[i]!==a.OPS.constructPath){var o;switch(n&&((0,a.warn)('Encountered path operator "'.concat(t,'" inside of a text object.')),e.addOp(a.OPS.save,null)),t){case a.OPS.rectangle:var s=r[0]+r[2],c=r[1]+r[3];o=[Math.min(r[0],s),Math.max(r[0],s),Math.min(r[1],c),Math.max(r[1],c)];break;case a.OPS.moveTo:case a.OPS.lineTo:o=[r[0],r[0],r[1],r[1]];break;default:o=[1/0,-1/0,1/0,-1/0]}e.addOp(a.OPS.constructPath,[[t],r,o]),n&&e.addOp(a.OPS.restore,null)}else{var u,l=e.argsArray[i];l[0].push(t),(u=l[1]).push.apply(u,I(r));var f=l[2];switch(t){case a.OPS.rectangle:var h=r[0]+r[2],d=r[1]+r[3];f[0]=Math.min(f[0],r[0],h),f[1]=Math.max(f[1],r[0],h),f[2]=Math.min(f[2],r[1],d),f[3]=Math.max(f[3],r[1],d);break;case a.OPS.moveTo:case a.OPS.lineTo:f[0]=Math.min(f[0],r[0]),f[1]=Math.max(f[1],r[0]),f[2]=Math.min(f[2],r[1]),f[3]=Math.max(f[3],r[1])}}}},{key:"parseColorSpace",value:function(e){var t=this,r=e.cs,n=e.resources,i=e.localColorSpaceCache;return w.ColorSpace.parseAsync({cs:r,xref:this.xref,resources:n,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:i}).catch((function(e){if(e instanceof a.AbortException)return null;if(t.options.ignoreErrors)return t.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorColorSpace}),(0,a.warn)('parseColorSpace - ignoring ColorSpace: "'.concat(e,'".')),null;throw e}))}},{key:"parseShading",value:function(e){var t=e.shading,r=e.resources,n=e.localColorSpaceCache,a=e.localShadingPatternCache,i=a.get(t);if(!i){var o=f.Pattern.parseShading(t,this.xref,r,this.handler,this._pdfFunctionFactory,n).getIR();i="pattern_".concat(this.idFactory.createObjId()),a.set(t,i),this.handler.send("obj",[i,this.pageIndex,"Pattern",o])}return i}},{key:"handleColorN",value:function(e,t,r,n,i,s,c,u,l,h){var d=r.pop();if(d instanceof o.Name){var p=i.getRaw(d.name),g=p instanceof o.Ref&&l.getByRef(p);if(g)try{var v=n.base?n.base.getRgb(r,0):null,y=(0,f.getTilingPatternIR)(g.operatorListIR,g.dict,v);return void e.addOp(t,y)}catch(e){}var b=this.xref.fetchIfRef(p);if(b){var w=b instanceof m.BaseStream?b.dict:b,k=w.get("PatternType");if(1===k){var S=n.base?n.base.getRgb(r,0):null;return this.handleTilingType(t,S,s,b,w,e,c,l)}if(2===k){var x=w.get("Shading"),O=w.getArray("Matrix"),A=this.parseShading({shading:x,resources:s,localColorSpaceCache:u,localShadingPatternCache:h});return void e.addOp(t,["Shading",A,O])}throw new a.FormatError("Unknown PatternType: ".concat(k))}}throw new a.FormatError("Unknown PatternName: ".concat(d))}},{key:"_parseVisibilityExpression",value:function(e,t,r){if(++t>10)(0,a.warn)("Visibility expression is too deeply nested");else{var n=e.length,i=this.xref.fetchIfRef(e[0]);if(!(n<2)&&i instanceof o.Name){switch(i.name){case"And":case"Or":case"Not":r.push(i.name);break;default:return void(0,a.warn)("Invalid operator ".concat(i.name," in visibility expression"))}for(var s=1;s0)){e.next=22;break}return e.abrupt("return",{type:"OCMD",expression:u});case 22:if(l=n.get("OCGs"),!(Array.isArray(l)||l instanceof o.Dict)){e.next=29;break}if(f=[],Array.isArray(l)){h=N(l);try{for(h.s();!(d=h.n()).done;)p=d.value,f.push(p.toString())}catch(e){h.e(e)}finally{h.f()}}else f.push(l.objId);return e.abrupt("return",{type:s,ids:f,policy:n.get("P")instanceof o.Name?n.get("P").name:null,expression:null});case 29:if(!(l instanceof o.Ref)){e.next=31;break}return e.abrupt("return",{type:s,id:l.toString()});case 31:return e.abrupt("return",null);case 32:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"getOperatorList",value:function(e){var t=this,r=e.stream,n=e.task,i=e.resources,s=e.operatorList,c=e.initialState,u=void 0===c?null:c,l=e.fallbackFontDict,f=void 0===l?null:l;if(i=i||o.Dict.empty,u=u||new Y,!s)throw new Error('getOperatorList: missing "operatorList" parameter');var h=this,d=this.xref,p=!1,g=new v.LocalImageCache,y=new v.LocalColorSpaceCache,b=new v.LocalGStateCache,k=new v.LocalTilingPatternCache,S=new Map,x=i.get("XObject")||o.Dict.empty,O=i.get("Pattern")||o.Dict.empty,A=new W(u),C=new K(r,d,A),F=new q;function P(e){for(var t=0,r=C.savedStatesDepth;t0&&s.addOp(a.OPS.setGState,[Q]),_=null;continue}}return void c(new Promise((function(e,t){if(!j)throw new a.FormatError("GState must be referred to by name.");var r=i.get("ExtGState");if(!(r instanceof o.Dict))throw new a.FormatError("ExtGState should be a dictionary.");var c=r.get(E);if(!(c instanceof o.Dict))throw new a.FormatError("GState should be a dictionary.");h.setGState({resources:i,gState:c,operatorList:s,cacheKey:E,task:n,stateManager:A,localGStateCache:b,localColorSpaceCache:y}).then(e,t)})).catch((function(e){if(!(e instanceof a.AbortException)){if(h.options.ignoreErrors)return h.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorExtGState}),void(0,a.warn)('getOperatorList - ignoring ExtGState: "'.concat(e,'".'));throw e}})));case a.OPS.moveTo:case a.OPS.lineTo:case a.OPS.curveTo:case a.OPS.curveTo2:case a.OPS.curveTo3:case a.OPS.closePath:case a.OPS.rectangle:h.buildPath(s,L,_,p);continue;case a.OPS.markPoint:case a.OPS.markPointProps:case a.OPS.beginCompat:case a.OPS.endCompat:continue;case a.OPS.beginMarkedContentProps:if(!(_[0]instanceof o.Name)){(0,a.warn)("Expected name for beginMarkedContentProps arg0=".concat(_[0]));continue}if("OC"===_[0].name)return void c(h.parseMarkedContentProps(_[1],i).then((function(e){s.addOp(a.OPS.beginMarkedContentProps,["OC",e])})).catch((function(e){if(!(e instanceof a.AbortException)){if(h.options.ignoreErrors)return h.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorMarkedContent}),void(0,a.warn)('getOperatorList - ignoring beginMarkedContentProps: "'.concat(e,'".'));throw e}})));_=[_[0].name,_[1]instanceof o.Dict?_[1].get("MCID"):null];break;case a.OPS.beginMarkedContent:case a.OPS.endMarkedContent:default:if(null!==_){for(l=0,v=_.length;l0&&(t[3]*=r*P.fontMatrix[3])}return a.Util.transform(P.ctm,a.Util.transform(P.textMatrix,t))}function G(){if(x.initialized)return x;var e=P,t=e.font,r=e.loadedName;g.has(r)||(g.add(r),S.styles[r]={fontFamily:t.fallbackName,ascent:t.ascent,descent:t.descent,vertical:t.vertical}),x.fontName=r;var n=x.transform=H();t.vertical?(x.width=x.totalWidth=Math.hypot(n[0],n[1]),x.height=x.totalHeight=0,x.vertical=!0):(x.width=x.totalWidth=0,x.height=x.totalHeight=Math.hypot(n[2],n[3]),x.vertical=!1);var a=Math.hypot(P.textLineMatrix[0],P.textLineMatrix[1]),i=Math.hypot(P.ctm[0],P.ctm[1]);return x.textAdvanceScale=i*a,x.trackingSpaceMin=P.fontSize*I,x.notASpace=P.fontSize*E,x.negativeSpaceMax=P.fontSize*j,x.spaceInFlowMin=P.fontSize*M,x.spaceInFlowMax=P.fontSize*_,x.hasEOL=!1,x.initialized=!0,x}function z(){if(x.initialized){var e=Math.hypot(P.textLineMatrix[0],P.textLineMatrix[1]),t=Math.hypot(P.ctm[0],P.ctm[1])*e;t!==x.textAdvanceScale&&(x.vertical?(x.totalHeight+=x.height*x.textAdvanceScale,x.height=0):(x.totalWidth+=x.width*x.textAdvanceScale,x.width=0),x.textAdvanceScale=t)}}function Y(e,t){return L.loadFont(e,t,i).then((function(e){return e.font.isType3Font?e.loadType3Data(L,i,n).catch((function(){})).then((function(){return e})):e})).then((function(e){P.loadedName=e.loadedName,P.font=e.font,P.fontMatrix=e.font.fontMatrix||a.FONT_IDENTITY_MATRIX}))}function J(e,t,r){var n=Math.hypot(r[0],r[1]);return[(r[0]*e+r[1]*t)/n,(r[2]*e+r[3]*t)/n]}function Z(){var e=H(),t=e[4],r=e[5],n=t-y[0],a=r-y[1];if(n<0||n>y[2]||a<0||a>y[3])return!1;if(!l||!P.font||!x.prevTransform)return!0;var i=x.prevTransform[4],o=x.prevTransform[5];if(i===t&&o===r)return!0;var s=-1;switch(e[0]&&0===e[1]&&0===e[2]?s=e[0]>0?0:180:e[1]&&0===e[0]&&0===e[3]&&(s=e[1]>0?90:270),s){case 0:break;case 90:var c=[r,t];t=c[0],r=c[1];var u=[o,i];i=u[0],o=u[1];break;case 180:var f=[-t,-r,-i,-o];t=f[0],r=f[1],i=f[2],o=f[3];break;case 270:var h=[-r,-t];t=h[0],r=h[1];var d=[-o,-i];i=d[0],o=d[1];break;default:var p=T(J(t,r,e),2);t=p[0],r=p[1];var g=T(J(i,o,x.prevTransform),2);i=g[0],o=g[1]}if(P.font.vertical){var v=(o-r)/x.textAdvanceScale,m=t-i,b=Math.sign(x.height);return v.5*x.width?(ee(),!0):(F(),re(),!0):Math.abs(m)>x.width?(ee(),!0):(v<=b*x.notASpace&&F(),v<=b*x.trackingSpaceMin?x.height+=v:te(v,x.prevTransform,b)||(0===x.str.length?(F(),S.items.push({str:" ",dir:"ltr",width:0,height:Math.abs(v),transform:x.prevTransform,fontName:x.fontName,hasEOL:!1})):x.height+=v),!0)}var w=(t-i)/x.textAdvanceScale,k=r-o,O=Math.sign(x.width);return w.5*x.height?(ee(),!0):(F(),re(),!0):Math.abs(k)>x.height?(ee(),!0):(w<=O*x.notASpace&&F(),w<=O*x.trackingSpaceMin?x.width+=w:te(w,x.prevTransform,O)||(0===x.str.length?(F(),S.items.push({str:" ",dir:"ltr",width:Math.abs(w),height:0,transform:x.prevTransform,fontName:x.fontName,hasEOL:!1})):x.width+=w),!0)}function Q(e){var t=e.chars,r=e.extraSpacing,n=P.font;if(t)for(var a=n.charsToGlyphs(t),i=P.fontMatrix[0]*P.fontSize,o=0,s=a.length;o0&&void 0!==arguments[0]&&arguments[0],t=S.items.length;0!==t&&(e&&t<10||(d.enqueue(S,t),S.items=[],S.styles=Object.create(null)))}var ae=new q;return new Promise((function e(t,r){var s=function(n){ne(!0),Promise.all([n,d.ready]).then((function(){try{e(t,r)}catch(e){r(e)}}),r)};n.ensureNotTerminated(),ae.reset();for(var u,f={},p=[];!(u=ae.check())&&(p.length=0,f.args=p,X.read(f));){P=c.state;var v=f.fn;switch(p=f.args,0|v){case a.OPS.setFont:var b=p[0].name,w=p[1];if(P.font&&b===P.fontName&&w===P.fontSize)break;return re(),P.fontName=b,P.fontSize=w,void s(Y(b,null));case a.OPS.setTextRise:P.textRise=p[0];break;case a.OPS.setHScale:P.textHScale=p[0]/100;break;case a.OPS.setLeading:P.leading=p[0];break;case a.OPS.moveText:P.translateTextLineMatrix(p[0],p[1]),P.textMatrix=P.textLineMatrix.slice();break;case a.OPS.setLeadingMoveText:P.leading=-p[1],P.translateTextLineMatrix(p[0],p[1]),P.textMatrix=P.textLineMatrix.slice();break;case a.OPS.nextLine:P.carriageReturn();break;case a.OPS.setTextMatrix:P.setTextMatrix(p[0],p[1],p[2],p[3],p[4],p[5]),P.setTextLineMatrix(p[0],p[1],p[2],p[3],p[4],p[5]),z();break;case a.OPS.setCharSpacing:P.charSpacing=p[0];break;case a.OPS.setWordSpacing:P.wordSpacing=p[0];break;case a.OPS.beginText:P.textMatrix=a.IDENTITY_MATRIX.slice(),P.textLineMatrix=a.IDENTITY_MATRIX.slice();break;case a.OPS.showSpacedText:if(!c.state.font){L.ensureStateFont(c.state);continue}for(var x=(P.font.vertical?1:-1)*P.fontSize/1e3,O=p[0],A=0,C=O.length;A0){var E=N.join("");N.length=0,Q({chars:E,extraSpacing:0})}break;case a.OPS.showText:if(!c.state.font){L.ensureStateFont(c.state);continue}Q({chars:p[0],extraSpacing:0});break;case a.OPS.nextLineShowText:if(!c.state.font){L.ensureStateFont(c.state);continue}P.carriageReturn(),Q({chars:p[0],extraSpacing:0});break;case a.OPS.nextLineSetSpacingShowText:if(!c.state.font){L.ensureStateFont(c.state);continue}P.wordSpacing=p[0],P.charSpacing=p[1],P.carriageReturn(),Q({chars:p[2],extraSpacing:0});break;case a.OPS.paintXObject:re(),D||(D=i.get("XObject")||o.Dict.empty);var j=p[0]instanceof o.Name,M=p[0].name;if(j&&B.getByName(M))break;return void s(new Promise((function(e,t){if(!j)throw new a.FormatError("XObject must be referred to by name.");var r=D.getRaw(M);if(r instanceof o.Ref){if(B.getByRef(r))return void e();if(L.globalImageCache.getData(r,L.pageIndex))return void e();r=R.fetch(r)}if(!(r instanceof m.BaseStream))throw new a.FormatError("XObject should be a stream");var s=r.dict.get("Subtype");if(!(s instanceof o.Name))throw new a.FormatError("XObject should have a Name subtype");if("Form"!==s.name)return B.set(M,r.dict.objId,!0),void e();var u=c.state.clone(),f=new W(u),p=r.dict.getArray("Matrix");Array.isArray(p)&&6===p.length&&f.transform(p),ne();var v={enqueueInvoked:!1,enqueue:function(e,t){this.enqueueInvoked=!0,d.enqueue(e,t)},get desiredSize(){return d.desiredSize},get ready(){return d.ready}};L.getTextContent({stream:r,task:n,resources:r.dict.get("Resources")||i,stateManager:f,combineTextItems:l,includeMarkedContent:h,sink:v,seenStyles:g,viewBox:y,markedContentData:k}).then((function(){v.enqueueInvoked||B.set(M,r.dict.objId,!0),e()}),t)})).catch((function(e){if(!(e instanceof a.AbortException)){if(!L.options.ignoreErrors)throw e;(0,a.warn)('getTextContent - ignoring XObject: "'.concat(e,'".'))}})));case a.OPS.setGState:if(j=p[0]instanceof o.Name,M=p[0].name,j&&U.getByName(M))break;return void s(new Promise((function(e,t){if(!j)throw new a.FormatError("GState must be referred to by name.");var r=i.get("ExtGState");if(!(r instanceof o.Dict))throw new a.FormatError("ExtGState should be a dictionary.");var n=r.get(M);if(!(n instanceof o.Dict))throw new a.FormatError("GState should be a dictionary.");var s=n.get("Font");if(!s)return U.set(M,n.objId,!0),void e();re(),P.fontName=null,P.fontSize=s[1],Y(null,s[0]).then(e,t)})).catch((function(e){if(!(e instanceof a.AbortException)){if(!L.options.ignoreErrors)throw e;(0,a.warn)('getTextContent - ignoring ExtGState: "'.concat(e,'".'))}})));case a.OPS.beginMarkedContent:re(),h&&(k.level++,S.items.push({type:"beginMarkedContent",tag:p[0]instanceof o.Name?p[0].name:null}));break;case a.OPS.beginMarkedContentProps:if(re(),h){k.level++;var _=null;p[1]instanceof o.Dict&&(_=p[1].get("MCID")),S.items.push({type:"beginMarkedContentProps",id:Number.isInteger(_)?"".concat(L.idFactory.getPageObjId(),"_mcid").concat(_):null,tag:p[0]instanceof o.Name?p[0].name:null})}break;case a.OPS.endMarkedContent:if(re(),h){if(0===k.level)break;k.level--,S.items.push({type:"endMarkedContent"})}}if(S.items.length>=d.desiredSize){u=!0;break}}u?s($):(re(),ne(),t())})).catch((function(e){if(!(e instanceof a.AbortException)){if(t.options.ignoreErrors)return(0,a.warn)('getTextContent - ignoring errors during "'.concat(n.name,'" ')+'task: "'.concat(e,'".')),re(),void ne();throw e}}))}},{key:"extractDataStructures",value:function(e,t,r){var n,i=this,s=this.xref,l=this.readToUnicode(r.toUnicode||e.get("ToUnicode")||t.get("ToUnicode"));if(r.composite){var f=e.get("CIDSystemInfo");f instanceof o.Dict&&(r.cidSystemInfo={registry:(0,a.stringToPDFString)(f.get("Registry")),ordering:(0,a.stringToPDFString)(f.get("Ordering")),supplement:f.get("Supplement")});try{var h=e.get("CIDToGIDMap");h instanceof m.BaseStream&&(n=h.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;(0,a.warn)('extractDataStructures - ignoring CIDToGIDMap data: "'.concat(e,'".'))}}var d,p=[],g=null;if(e.has("Encoding")){if((d=e.get("Encoding"))instanceof o.Dict){if(g=(g=d.get("BaseEncoding"))instanceof o.Name?g.name:null,d.has("Differences")){var v,y=0,b=N(d.get("Differences"));try{for(b.s();!(v=b.n()).done;){var w=v.value,k=s.fetchIfRef(w);if("number"==typeof k)y=k;else{if(!(k instanceof o.Name))throw new a.FormatError("Invalid entry in 'Differences' array: ".concat(k));p[y++]=k.name}}}catch(e){b.e(e)}finally{b.f()}}}else if(d instanceof o.Name)g=d.name;else{var S="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new a.FormatError(S);(0,a.warn)(S)}"MacRomanEncoding"!==g&&"MacExpertEncoding"!==g&&"WinAnsiEncoding"!==g&&(g=null)}if(g)r.defaultEncoding=(0,u.getEncoding)(g);else{var x=!!(r.flags&c.FontFlags.Symbolic),O=!!(r.flags&c.FontFlags.Nonsymbolic);d=u.StandardEncoding,"TrueType"!==r.type||O||(d=u.WinAnsiEncoding),x&&(d=u.MacRomanEncoding,r.file&&!r.isInternalFont||(/Symbol/i.test(r.name)?d=u.SymbolSetEncoding:/Dingbats|Wingdings/i.test(r.name)&&(d=u.ZapfDingbatsEncoding))),r.defaultEncoding=d}return r.differences=p,r.baseEncodingName=g,r.hasEncoding=!!g||p.length>0,r.dict=e,l.then((function(e){return r.toUnicode=e,i.buildToUnicode(r)})).then((function(e){return r.toUnicode=e,n&&(r.cidToGidMap=i.readCidToGidMap(n,e)),r}))}},{key:"_simpleFontToUnicode",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,a.assert)(!e.composite,"Must be a simple font.");var r=[],n=e.defaultEncoding.slice(),i=e.baseEncodingName,o=e.differences;for(var s in o){var c=o[s];".notdef"!==c&&(n[s]=c)}var l=(0,S.getGlyphsUnicode)();for(var f in n){var h=n[f];if(""!==h){var d=l[h];if(void 0===d){var p=0;switch(h[0]){case"G":3===h.length&&(p=parseInt(h.substring(1),16));break;case"g":5===h.length&&(p=parseInt(h.substring(1),16));break;case"C":case"c":if(h.length>=3&&h.length<=4){var g=h.substring(1);if(t){p=parseInt(g,16);break}if(p=+g,Number.isNaN(p)&&Number.isInteger(parseInt(g,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":-1!==(d=(0,A.getUnicodeForGlyph)(h,l))&&(p=d)}if(p>0&&p<=1114111&&Number.isInteger(p)){if(i&&p===+f){var v=(0,u.getEncoding)(i);if(v&&(h=v[f])){r[f]=String.fromCharCode(l[h]);continue}}r[f]=String.fromCodePoint(p)}}else r[f]=String.fromCharCode(d)}}return r}},{key:"buildToUnicode",value:(r=M(E().mark((function e(t){var r,n,s,c,u,l;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.hasIncludedToUnicodeMap=!!t.toUnicode&&t.toUnicode.length>0,!t.hasIncludedToUnicodeMap){e.next=4;break}return!t.composite&&t.hasEncoding&&(t.fallbackToUnicode=this._simpleFontToUnicode(t)),e.abrupt("return",t.toUnicode);case 4:if(t.composite){e.next=6;break}return e.abrupt("return",new d.ToUnicodeMap(this._simpleFontToUnicode(t)));case 6:if(!t.composite||(!t.cMap.builtInCMap||t.cMap instanceof i.IdentityCMap)&&("Adobe"!==t.cidSystemInfo.registry||"GB1"!==t.cidSystemInfo.ordering&&"CNS1"!==t.cidSystemInfo.ordering&&"Japan1"!==t.cidSystemInfo.ordering&&"Korea1"!==t.cidSystemInfo.ordering)){e.next=15;break}return r=t.cidSystemInfo,n=r.registry,s=r.ordering,c=o.Name.get("".concat(n,"-").concat(s,"-UCS2")),e.next=11,i.CMapFactory.create({encoding:c,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});case 11:return u=e.sent,l=[],t.cMap.forEach((function(e,t){if(t>65535)throw new a.FormatError("Max size of CID is 65,535");var r=u.lookup(t);r&&(l[e]=String.fromCharCode((r.charCodeAt(0)<<8)+r.charCodeAt(1)))})),e.abrupt("return",new d.ToUnicodeMap(l));case 15:return e.abrupt("return",new d.IdentityToUnicodeMap(t.firstChar,t.lastChar));case 16:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"readToUnicode",value:function(e){var t=this;return e?e instanceof o.Name?i.CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}).then((function(e){return e instanceof i.IdentityCMap?new d.IdentityToUnicodeMap(0,65535):new d.ToUnicodeMap(e.getMap())})):e instanceof m.BaseStream?i.CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}).then((function(e){if(e instanceof i.IdentityCMap)return new d.IdentityToUnicodeMap(0,65535);var t=new Array(e.length);return e.forEach((function(e,r){if("number"!=typeof r){for(var n=[],a=0;a>1;(0!==i||t.has(o))&&(r[o]=i)}return r}},{key:"extractWidths",value:function(e,t,r){var n,a,i,s,u,l,f,h,d=this.xref,p=[],g=0,v=[];if(r.composite){if(g=e.has("DW")?e.get("DW"):1e3,h=e.get("W"))for(a=0,i=h.length;a1&&void 0!==arguments[1]?arguments[1]:NaN,r=a.Util.normalizeRect(e.argsArray[0].slice(2)),n=r[2]-r[0],i=r[3]-r[1],o=Math.hypot(n,i);0===n||0===i?(e.fnArray.splice(0,1),e.argsArray.splice(0,1)):(0===t||Math.round(o/t)>=10)&&(this._bbox||(this._bbox=[1/0,1/0,-1/0,-1/0]),this._bbox[0]=Math.min(this._bbox[0],r[0]),this._bbox[1]=Math.min(this._bbox[1],r[1]),this._bbox[2]=Math.max(this._bbox[2],r[2]),this._bbox[3]=Math.max(this._bbox[3],r[3]));for(var s=0,c=e.length;s0&&void 0!==arguments[0]?arguments[0]:new Y;_(this,e),this.state=t,this.stateStack=[]}return R(e,[{key:"save",value:function(){var e=this.state;this.stateStack.push(this.state),this.state=e.clone()}},{key:"restore",value:function(){var e=this.stateStack.pop();e&&(this.state=e)}},{key:"transform",value:function(e){this.state.ctm=a.Util.transform(this.state.ctm,e)}}]),e}(),V=function(){function e(){_(this,e),this.ctm=new Float32Array(a.IDENTITY_MATRIX),this.fontName=null,this.fontSize=0,this.loadedName=null,this.font=null,this.fontMatrix=a.FONT_IDENTITY_MATRIX,this.textMatrix=a.IDENTITY_MATRIX.slice(),this.textLineMatrix=a.IDENTITY_MATRIX.slice(),this.charSpacing=0,this.wordSpacing=0,this.leading=0,this.textHScale=1,this.textRise=0}return R(e,[{key:"setTextMatrix",value:function(e,t,r,n,a,i){var o=this.textMatrix;o[0]=e,o[1]=t,o[2]=r,o[3]=n,o[4]=a,o[5]=i}},{key:"setTextLineMatrix",value:function(e,t,r,n,a,i){var o=this.textLineMatrix;o[0]=e,o[1]=t,o[2]=r,o[3]=n,o[4]=a,o[5]=i}},{key:"translateTextMatrix",value:function(e,t){var r=this.textMatrix;r[4]=r[0]*e+r[2]*t+r[4],r[5]=r[1]*e+r[3]*t+r[5]}},{key:"translateTextLineMatrix",value:function(e,t){var r=this.textLineMatrix;r[4]=r[0]*e+r[2]*t+r[4],r[5]=r[1]*e+r[3]*t+r[5]}},{key:"carriageReturn",value:function(){this.translateTextLineMatrix(0,-this.leading),this.textMatrix=this.textLineMatrix.slice()}},{key:"clone",value:function(){var e=Object.create(this);return e.textMatrix=this.textMatrix.slice(),e.textLineMatrix=this.textLineMatrix.slice(),e.fontMatrix=this.fontMatrix.slice(),e}}]),e}(),Y=function(){function e(){_(this,e),this.ctm=new Float32Array(a.IDENTITY_MATRIX),this.font=null,this.textRenderingMode=a.TextRenderingMode.FILL,this.fillColorSpace=w.ColorSpace.singletons.gray,this.strokeColorSpace=w.ColorSpace.singletons.gray}return R(e,[{key:"clone",value:function(){return Object.create(this)}}]),e}(),K=function(){function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new W;_(this,e),this.parser=new g.Parser({lexer:new g.Lexer(t,e.opMap),xref:r}),this.stateManager=n,this.nonProcessedArgs=[],this._isPathOp=!1,this._numInvalidPathOPS=0}return R(e,[{key:"savedStatesDepth",get:function(){return this.stateManager.stateStack.length}},{key:"read",value:function(t){for(var r=t.args;;){var n=this.parser.getObj();if(n instanceof o.Cmd){var i=n.cmd,s=e.opMap[i];if(!s){(0,a.warn)('Unknown command "'.concat(i,'".'));continue}var c=s.id,u=s.numArgs,l=null!==r?r.length:0;if(this._isPathOp||(this._numInvalidPathOPS=0),this._isPathOp=c>=a.OPS.moveTo&&c<=a.OPS.endPath,s.variableArgs)l>u&&(0,a.info)("Command ".concat(i,": expected [0, ").concat(u,"] args, ")+"but received ".concat(l," args."));else{if(l!==u){for(var f=this.nonProcessedArgs;l>u;)f.push(r.shift()),l--;for(;le.MAX_INVALID_PATH_OPS)throw new a.FormatError("Invalid ".concat(h));(0,a.warn)("Skipping ".concat(h)),null!==r&&(r.length=0);continue}}return this.preprocessCommand(c,r),t.fn=c,t.args=r,!0}if(n===o.EOF)return!1;if(null!==n&&(null===r&&(r=[]),r.push(n),r.length>33))throw new a.FormatError("Too many arguments")}}},{key:"preprocessCommand",value:function(e,t){switch(0|e){case a.OPS.save:this.stateManager.save();break;case a.OPS.restore:this.stateManager.restore();break;case a.OPS.transform:this.stateManager.transform(t)}}}],[{key:"opMap",get:function(){var e=(0,x.getLookupTableFactory)((function(e){e.w={id:a.OPS.setLineWidth,numArgs:1,variableArgs:!1},e.J={id:a.OPS.setLineCap,numArgs:1,variableArgs:!1},e.j={id:a.OPS.setLineJoin,numArgs:1,variableArgs:!1},e.M={id:a.OPS.setMiterLimit,numArgs:1,variableArgs:!1},e.d={id:a.OPS.setDash,numArgs:2,variableArgs:!1},e.ri={id:a.OPS.setRenderingIntent,numArgs:1,variableArgs:!1},e.i={id:a.OPS.setFlatness,numArgs:1,variableArgs:!1},e.gs={id:a.OPS.setGState,numArgs:1,variableArgs:!1},e.q={id:a.OPS.save,numArgs:0,variableArgs:!1},e.Q={id:a.OPS.restore,numArgs:0,variableArgs:!1},e.cm={id:a.OPS.transform,numArgs:6,variableArgs:!1},e.m={id:a.OPS.moveTo,numArgs:2,variableArgs:!1},e.l={id:a.OPS.lineTo,numArgs:2,variableArgs:!1},e.c={id:a.OPS.curveTo,numArgs:6,variableArgs:!1},e.v={id:a.OPS.curveTo2,numArgs:4,variableArgs:!1},e.y={id:a.OPS.curveTo3,numArgs:4,variableArgs:!1},e.h={id:a.OPS.closePath,numArgs:0,variableArgs:!1},e.re={id:a.OPS.rectangle,numArgs:4,variableArgs:!1},e.S={id:a.OPS.stroke,numArgs:0,variableArgs:!1},e.s={id:a.OPS.closeStroke,numArgs:0,variableArgs:!1},e.f={id:a.OPS.fill,numArgs:0,variableArgs:!1},e.F={id:a.OPS.fill,numArgs:0,variableArgs:!1},e["f*"]={id:a.OPS.eoFill,numArgs:0,variableArgs:!1},e.B={id:a.OPS.fillStroke,numArgs:0,variableArgs:!1},e["B*"]={id:a.OPS.eoFillStroke,numArgs:0,variableArgs:!1},e.b={id:a.OPS.closeFillStroke,numArgs:0,variableArgs:!1},e["b*"]={id:a.OPS.closeEOFillStroke,numArgs:0,variableArgs:!1},e.n={id:a.OPS.endPath,numArgs:0,variableArgs:!1},e.W={id:a.OPS.clip,numArgs:0,variableArgs:!1},e["W*"]={id:a.OPS.eoClip,numArgs:0,variableArgs:!1},e.BT={id:a.OPS.beginText,numArgs:0,variableArgs:!1},e.ET={id:a.OPS.endText,numArgs:0,variableArgs:!1},e.Tc={id:a.OPS.setCharSpacing,numArgs:1,variableArgs:!1},e.Tw={id:a.OPS.setWordSpacing,numArgs:1,variableArgs:!1},e.Tz={id:a.OPS.setHScale,numArgs:1,variableArgs:!1},e.TL={id:a.OPS.setLeading,numArgs:1,variableArgs:!1},e.Tf={id:a.OPS.setFont,numArgs:2,variableArgs:!1},e.Tr={id:a.OPS.setTextRenderingMode,numArgs:1,variableArgs:!1},e.Ts={id:a.OPS.setTextRise,numArgs:1,variableArgs:!1},e.Td={id:a.OPS.moveText,numArgs:2,variableArgs:!1},e.TD={id:a.OPS.setLeadingMoveText,numArgs:2,variableArgs:!1},e.Tm={id:a.OPS.setTextMatrix,numArgs:6,variableArgs:!1},e["T*"]={id:a.OPS.nextLine,numArgs:0,variableArgs:!1},e.Tj={id:a.OPS.showText,numArgs:1,variableArgs:!1},e.TJ={id:a.OPS.showSpacedText,numArgs:1,variableArgs:!1},e["'"]={id:a.OPS.nextLineShowText,numArgs:1,variableArgs:!1},e['"']={id:a.OPS.nextLineSetSpacingShowText,numArgs:3,variableArgs:!1},e.d0={id:a.OPS.setCharWidth,numArgs:2,variableArgs:!1},e.d1={id:a.OPS.setCharWidthAndBounds,numArgs:6,variableArgs:!1},e.CS={id:a.OPS.setStrokeColorSpace,numArgs:1,variableArgs:!1},e.cs={id:a.OPS.setFillColorSpace,numArgs:1,variableArgs:!1},e.SC={id:a.OPS.setStrokeColor,numArgs:4,variableArgs:!0},e.SCN={id:a.OPS.setStrokeColorN,numArgs:33,variableArgs:!0},e.sc={id:a.OPS.setFillColor,numArgs:4,variableArgs:!0},e.scn={id:a.OPS.setFillColorN,numArgs:33,variableArgs:!0},e.G={id:a.OPS.setStrokeGray,numArgs:1,variableArgs:!1},e.g={id:a.OPS.setFillGray,numArgs:1,variableArgs:!1},e.RG={id:a.OPS.setStrokeRGBColor,numArgs:3,variableArgs:!1},e.rg={id:a.OPS.setFillRGBColor,numArgs:3,variableArgs:!1},e.K={id:a.OPS.setStrokeCMYKColor,numArgs:4,variableArgs:!1},e.k={id:a.OPS.setFillCMYKColor,numArgs:4,variableArgs:!1},e.sh={id:a.OPS.shadingFill,numArgs:1,variableArgs:!1},e.BI={id:a.OPS.beginInlineImage,numArgs:0,variableArgs:!1},e.ID={id:a.OPS.beginImageData,numArgs:0,variableArgs:!1},e.EI={id:a.OPS.endInlineImage,numArgs:1,variableArgs:!1},e.Do={id:a.OPS.paintXObject,numArgs:1,variableArgs:!1},e.MP={id:a.OPS.markPoint,numArgs:1,variableArgs:!1},e.DP={id:a.OPS.markPointProps,numArgs:2,variableArgs:!1},e.BMC={id:a.OPS.beginMarkedContent,numArgs:1,variableArgs:!1},e.BDC={id:a.OPS.beginMarkedContentProps,numArgs:2,variableArgs:!1},e.EMC={id:a.OPS.endMarkedContent,numArgs:0,variableArgs:!1},e.BX={id:a.OPS.beginCompat,numArgs:0,variableArgs:!1},e.EX={id:a.OPS.endCompat,numArgs:0,variableArgs:!1},e.BM=null,e.BD=null,e.true=null,e.fa=null,e.fal=null,e.fals=null,e.false=null,e.nu=null,e.nul=null,e.null=null}));return(0,a.shadow)(this,"opMap",e())}},{key:"MAX_INVALID_PATH_OPS",get:function(){return(0,a.shadow)(this,"MAX_INVALID_PATH_OPS",10)}}]),e}();t.EvaluatorPreprocessor=K},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.IdentityCMap=t.CMapFactory=t.CMap=void 0;var n=r(2),a=r(134),i=r(136),o=r(146),s=r(135),c=r(139);function u(){u=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function l(e,t,r,a){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var h={};function d(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=d.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=f(e[n],e,i);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==p(l)&&r.call(l,"__await")?t.resolve(l.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(l).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=f(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===h)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var a=f(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,h;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},e}function l(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function f(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){l(i,n,a,o,s,"next",e)}function s(e){l(i,n,a,o,s,"throw",e)}o(void 0)}))}}function h(e,t){return h=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},h(e,t)}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];g(this,e),this.codespaceRanges=[[],[],[],[]],this.numCodespaceRanges=0,this._map=[],this.name="",this.vertical=!1,this.useCMap=null,this.builtInCMap=t}return y(e,[{key:"addCodespaceRange",value:function(e,t,r){this.codespaceRanges[e-1].push(t,r),this.numCodespaceRanges++}},{key:"mapCidRange",value:function(e,t,r){if(t-e>b)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=r++}},{key:"mapBfRange",value:function(e,t,r){if(t-e>b)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");for(var n=r.length-1;e<=t;){this._map[e++]=r;var a=r.charCodeAt(n)+1;r=a>255?r.substring(0,n-1)+String.fromCharCode(r.charCodeAt(n-1)+1)+"\\0":r.substring(0,n)+String.fromCharCode(a)}}},{key:"mapBfRangeToArray",value:function(e,t,r){if(t-e>b)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");for(var n=r.length,a=0;e<=t&&a>>0;for(var s=a[i],c=0,u=s.length;c=l&&n<=f)return r.charcode=n,void(r.length=i+1)}}r.charcode=0,r.length=1}},{key:"getCharCodeLength",value:function(e){for(var t=this.codespaceRanges,r=0,n=t.length;r=s&&e<=c)return r+1}return 1}},{key:"length",get:function(){return this._map.length}},{key:"isIdentityCMap",get:function(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(var e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}]),e}();t.CMap=w;var k=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&h(e,t)}(i,e);var t,r,a=(t=i,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=d(t);if(r){var a=d(this).constructor;e=Reflect.construct(n,arguments,a)}else e=n.apply(this,arguments);return function(e,t){if(t&&("object"===p(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function i(e,t){var r;return g(this,i),(r=a.call(this)).vertical=e,r.addCodespaceRange(t,0,65535),r}return y(i,[{key:"mapCidRange",value:function(e,t,r){(0,n.unreachable)("should not call mapCidRange")}},{key:"mapBfRange",value:function(e,t,r){(0,n.unreachable)("should not call mapBfRange")}},{key:"mapBfRangeToArray",value:function(e,t,r){(0,n.unreachable)("should not call mapBfRangeToArray")}},{key:"mapOne",value:function(e,t){(0,n.unreachable)("should not call mapCidOne")}},{key:"lookup",value:function(e){return Number.isInteger(e)&&e<=65535?e:void 0}},{key:"contains",value:function(e){return Number.isInteger(e)&&e<=65535}},{key:"forEach",value:function(e){for(var t=0;t<=65535;t++)e(t,t)}},{key:"charCodeOf",value:function(e){return Number.isInteger(e)&&e<=65535?e:-1}},{key:"getMap",value:function(){for(var e=new Array(65536),t=0;t<=65535;t++)e[t]=t;return e}},{key:"length",get:function(){return 65536}},{key:"isIdentityCMap",get:function(){(0,n.unreachable)("should not access .isIdentityCMap")}}]),i}(w);t.IdentityCMap=k;var S=function(){function e(e,t){for(var r=0,n=0;n<=t;n++)r=r<<8|e[n];return r>>>0}function t(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode.apply(null,e.subarray(0,t+1))}function r(e,t,r){for(var n=0,a=r;a>=0;a--)n+=e[a]+t[a],e[a]=255&n,n>>=8}function a(e,t){for(var r=1,n=t;n>=0&&r>0;n--)r+=e[n],e[n]=255&r,r>>=8}var i=16,o=function(){function e(t){g(this,e),this.buffer=t,this.pos=0,this.end=t.length,this.tmpBuf=new Uint8Array(19)}return y(e,[{key:"readByte",value:function(){return this.pos>=this.end?-1:this.buffer[this.pos++]}},{key:"readNumber",value:function(){var e,t=0;do{var r=this.readByte();if(r<0)throw new n.FormatError("unexpected EOF in bcmap");e=!(128&r),t=t<<7|127&r}while(!e);return t}},{key:"readSigned",value:function(){var e=this.readNumber();return 1&e?~(e>>>1):e>>>1}},{key:"readHex",value:function(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1)),this.pos+=t+1}},{key:"readHexNumber",value:function(e,t){var r,a=this.tmpBuf,i=0;do{var o=this.readByte();if(o<0)throw new n.FormatError("unexpected EOF in bcmap");r=!(128&o),a[i++]=127&o}while(!r);for(var s=t,c=0,u=0;s>=0;){for(;u<8&&a.length>0;)c|=a[--i]<>=8,u-=8}}},{key:"readHexSigned",value:function(e,t){this.readHexNumber(e,t);for(var r=1&e[t]?255:0,n=0,a=0;a<=t;a++)n=(1&n)<<8|e[a],e[a]=n>>1^r}},{key:"readString",value:function(){for(var e=this.readNumber(),t="",r=0;r=0)){n.next=68;break}if(7!=(k=w>>5)){n.next=20;break}n.t0=31&w,n.next=0===n.t0?15:1===n.t0?17:19;break;case 15:return f.readString(),n.abrupt("break",19);case 17:return d=f.readString(),n.abrupt("break",19);case 19:return n.abrupt("continue",9);case 20:if(S=!!(16&w),!(1+(x=15&w)>i)){n.next=24;break}throw new Error("BinaryCMapReader.process: Invalid dataSize.");case 24:O=1,A=f.readNumber(),n.t1=k,n.next=0===n.t1?29:1===n.t1?35:2===n.t1?41:3===n.t1?46:4===n.t1?53:5===n.t1?58:65;break;case 29:for(f.readHex(p,x),f.readHexNumber(g,x),r(g,p,x),c.addCodespaceRange(x+1,e(p,x),e(g,x)),C=1;C>>0}function t(e){if("string"!=typeof e)throw new n.FormatError("Malformed CMap: expected string.")}function r(e){if(!Number.isInteger(e))throw new n.FormatError("Malformed CMap: expected int.")}function l(r,n){for(;;){var i=n.getObj();if(i===a.EOF)break;if((0,a.isCmd)(i,"endbfchar"))return;t(i);var o=e(i);t(i=n.getObj());var s=i;r.mapOne(o,s)}}function h(r,i){for(;;){var o=i.getObj();if(o===a.EOF)break;if((0,a.isCmd)(o,"endbfrange"))return;t(o);var s=e(o);t(o=i.getObj());var c=e(o);if(o=i.getObj(),Number.isInteger(o)||"string"==typeof o){var u=Number.isInteger(o)?String.fromCharCode(o):o;r.mapBfRange(s,c,u)}else{if(!(0,a.isCmd)(o,"["))break;o=i.getObj();for(var l=[];!(0,a.isCmd)(o,"]")&&o!==a.EOF;)l.push(o),o=i.getObj();r.mapBfRangeToArray(s,c,l)}}throw new n.FormatError("Invalid bf range.")}function d(n,i){for(;;){var o=i.getObj();if(o===a.EOF)break;if((0,a.isCmd)(o,"endcidchar"))return;t(o);var s=e(o);r(o=i.getObj());var c=o;n.mapOne(s,c)}}function p(n,i){for(;;){var o=i.getObj();if(o===a.EOF)break;if((0,a.isCmd)(o,"endcidrange"))return;t(o);var s=e(o);t(o=i.getObj());var c=e(o);r(o=i.getObj());var u=o;n.mapCidRange(s,c,u)}}function g(t,r){for(;;){var i=r.getObj();if(i===a.EOF)break;if((0,a.isCmd)(i,"endcodespacerange"))return;if("string"!=typeof i)break;var o=e(i);if("string"!=typeof(i=r.getObj()))break;var s=e(i);t.addCodespaceRange(i.length,o,s)}throw new n.FormatError("Invalid codespace range.")}function v(e,t){var r=t.getObj();Number.isInteger(r)&&(e.vertical=!!r)}function y(e,t){var r=t.getObj();r instanceof a.Name&&(e.name=r.name)}function b(e,t,r,n){return x.apply(this,arguments)}function x(){return(x=f(u().mark((function e(t,r,i,o){var c,f,m;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=1,(m=r.getObj())!==a.EOF){e.next=7;break}return e.abrupt("break",39);case 7:if(!(m instanceof a.Name)){e.next=12;break}"WMode"===m.name?v(t,r):"CMapName"===m.name&&y(t,r),c=m,e.next=29;break;case 12:if(!(m instanceof a.Cmd)){e.next=29;break}e.t0=m.cmd,e.next="endcmap"===e.t0?16:"usecmap"===e.t0?17:"begincodespacerange"===e.t0?19:"beginbfchar"===e.t0?21:"begincidchar"===e.t0?23:"beginbfrange"===e.t0?25:"begincidrange"===e.t0?27:29;break;case 16:return e.abrupt("break",39);case 17:return c instanceof a.Name&&(f=c.name),e.abrupt("break",29);case 19:return g(t,r),e.abrupt("break",29);case 21:return l(t,r),e.abrupt("break",29);case 23:return d(t,r),e.abrupt("break",29);case 25:return h(t,r),e.abrupt("break",29);case 27:return p(t,r),e.abrupt("break",29);case 29:e.next=37;break;case 31:if(e.prev=31,e.t1=e.catch(1),!(e.t1 instanceof s.MissingDataException)){e.next=35;break}throw e.t1;case 35:return(0,n.warn)("Invalid cMap data: "+e.t1),e.abrupt("continue",0);case 37:e.next=0;break;case 39:if(!o&&f&&(o=f),!o){e.next=42;break}return e.abrupt("return",O(t,i,o));case 42:return e.abrupt("return",t);case 43:case"end":return e.stop()}}),e,null,[[1,31]])})))).apply(this,arguments)}function O(e,t,r){return A.apply(this,arguments)}function A(){return(A=f(u().mark((function e(t,r,n){var a,i;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,C(n,r);case 2:if(t.useCMap=e.sent,0===t.numCodespaceRanges){for(a=t.useCMap.codespaceRanges,i=0;i{Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=t.Linearization=t.Lexer=void 0;var n=r(2),a=r(134),i=r(135),o=r(147),s=r(149),c=r(150),u=r(152),l=r(153),f=r(156),h=r(158),d=r(160),p=r(139),g=r(161),v=r(162);function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function m(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function b(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:null,t=this.buf1;if(this.shift(),t instanceof a.Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":for(var r=[];!(0,a.isCmd)(this.buf1,"]")&&this.buf1!==a.EOF;)r.push(this.getObj(e));if(this.buf1===a.EOF){if(this.recoveryMode)return r;throw new i.ParserEOFException("End of file inside array.")}return this.shift(),r;case"<<":for(var o=new a.Dict(this.xref);!(0,a.isCmd)(this.buf1,">>")&&this.buf1!==a.EOF;)if(this.buf1 instanceof a.Name){var s=this.buf1.name;if(this.shift(),this.buf1===a.EOF)break;o.set(s,this.getObj(e))}else(0,n.info)("Malformed dictionary: key must be a name object"),this.shift();if(this.buf1===a.EOF){if(this.recoveryMode)return o;throw new i.ParserEOFException("End of file inside dictionary.")}return(0,a.isCmd)(this.buf2,"stream")?this.allowStreams?this.makeStream(o,e):o:(this.shift(),o);default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&(0,a.isCmd)(this.buf2,"R")){var c=a.Ref.get(t,this.buf1);return this.shift(),this.shift(),c}return t}return"string"==typeof t&&e?e.decryptString(t):t}},{key:"findDefaultInlineStreamEnd",value:function(e){for(var t,r,o=this.lexer,s=e.pos,c=0;-1!==(t=e.getByte());)if(0===c)c=69===t?1:0;else if(1===c)c=73===t?2:0;else if(32===t||10===t||13===t){r=e.pos;for(var u=e.peekBytes(10),l=0,f=u.length;l127)){c=0;break}if(2!==c)continue;if(o.knownCommands){var h=o.peekObj();h instanceof a.Cmd&&!o.knownCommands[h.cmd]&&(c=0)}else(0,n.warn)("findDefaultInlineStreamEnd - \`lexer.knownCommands\` is undefined.");if(2===c)break}else c=0;-1===t&&((0,n.warn)("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker"),r&&((0,n.warn)('... trying to recover by using the last "EI" occurrence.'),e.skip(-(e.pos-r))));var d=4;return e.skip(-d),t=e.peekByte(),e.skip(d),(0,i.isWhiteSpace)(t)||d--,e.pos-d-s}},{key:"findDCTDecodeInlineStreamEnd",value:function(e){for(var t,r,a=e.pos,i=!1;-1!==(t=e.getByte());)if(255===t){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:(r=e.getUint16())>2?e.skip(r-2):e.skip(-2)}if(i)break}var o=e.pos-a;return-1===t?((0,n.warn)("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."),e.skip(-o),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),o)}},{key:"findASCII85DecodeInlineStreamEnd",value:function(e){for(var t,r=e.pos;-1!==(t=e.getByte());)if(126===t){var a=e.pos;for(t=e.peekByte();(0,i.isWhiteSpace)(t);)e.skip(),t=e.peekByte();if(62===t){e.skip();break}if(e.pos>a){var o=e.peekBytes(2);if(69===o[0]&&73===o[1])break}}var s=e.pos-r;return-1===t?((0,n.warn)("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."),e.skip(-s),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),s)}},{key:"findASCIIHexDecodeInlineStreamEnd",value:function(e){for(var t,r=e.pos;-1!==(t=e.getByte())&&62!==t;);var a=e.pos-r;return-1===t?((0,n.warn)("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."),e.skip(-a),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),a)}},{key:"inlineStreamSkipEI",value:function(e){for(var t,r=0;-1!==(t=e.getByte());)if(0===r)r=69===t?1:0;else if(1===r)r=73===t?2:0;else if(2===r)break}},{key:"makeInlineImage",value:function(e){for(var t,r=this.lexer,i=r.stream,o=Object.create(null);!(0,a.isCmd)(this.buf1,"ID")&&this.buf1!==a.EOF;){if(!(this.buf1 instanceof a.Name))throw new n.FormatError("Dictionary key must be a name object");var s=this.buf1.name;if(this.shift(),this.buf1===a.EOF)break;o[s]=this.getObj(e)}-1!==r.beginInlineImagePos&&(t=i.pos-r.beginInlineImagePos);var c,u=this.xref.fetchIfRef(o.F||o.Filter);if(u instanceof a.Name)c=u.name;else if(Array.isArray(u)){var l=this.xref.fetchIfRef(u[0]);l instanceof a.Name&&(c=l.name)}var f,h,d=i.pos;switch(c){case"DCT":case"DCTDecode":f=this.findDCTDecodeInlineStreamEnd(i);break;case"A85":case"ASCII85Decode":f=this.findASCII85DecodeInlineStreamEnd(i);break;case"AHx":case"ASCIIHexDecode":f=this.findASCIIHexDecodeInlineStreamEnd(i);break;default:f=this.findDefaultInlineStreamEnd(i)}if(f<1e3&&t>0){var p=i.pos;i.pos=r.beginInlineImagePos,h=function(e){for(var t=[],r=e.length,n=0;n=n)return r.pos+=o,r.pos-e;o++}r.pos+=i}return-1}},{key:"makeStream",value:function(e,t){var r=this.lexer,o=r.stream;r.skipToNextLine();var s=o.pos-1,c=e.get("Length");if(Number.isInteger(c)||((0,n.info)('Bad length "'.concat(c&&c.toString(),'" in stream.')),c=0),o.pos=s+c,r.nextChar(),this.tryShift()&&(0,a.isCmd)(this.buf2,"endstream"))this.shift();else{var u=new Uint8Array([101,110,100,115,116,114,101,97,109]),l=this._findStreamLength(s,u);if(l<0){for(var f=1;f<=1;f++){var h=u.length-f,d=u.slice(0,h),p=this._findStreamLength(s,d);if(p>=0){var g=o.peekBytes(h+1)[h];if(!(0,i.isWhiteSpace)(g))break;(0,n.info)('Found "'.concat((0,n.bytesToString)(d),'" when ')+"searching for endstream command."),l=p;break}}if(l<0)throw new n.FormatError("Missing endstream command.")}c=l,r.nextChar(),this.shift(),this.shift()}return this.shift(),o=o.makeSubStream(s,c,e),t&&(o=t.createStream(o,c)),(o=this.filter(o,e,c)).dict=e,o}},{key:"filter",value:function(e,t,r){var i=t.get("F","Filter"),o=t.get("DP","DecodeParms");if(i instanceof a.Name)return Array.isArray(o)&&(0,n.warn)("/DecodeParms should not be an Array, when /Filter is a Name."),this.makeFilter(e,i.name,r,o);var s=r;if(Array.isArray(i))for(var c=i,u=o,l=0,f=c.length;l=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}var O=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;m(this,e),this.stream=t,this.nextChar(),this.strBuf=[],this.knownCommands=r,this._hexStringNumWarn=0,this.beginInlineImagePos=-1}return w(e,[{key:"nextChar",value:function(){return this.currentChar=this.stream.getByte()}},{key:"peekChar",value:function(){return this.stream.peekByte()}},{key:"getNumber",value:function(){var e=this.currentChar,t=!1,r=0,a=0;if(45===e?(a=-1,45===(e=this.nextChar())&&(e=this.nextChar())):43===e&&(a=1,e=this.nextChar()),10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e&&(r=10,e=this.nextChar()),e<48||e>57){var o="Invalid number: ".concat(String.fromCharCode(e)," (charCode ").concat(e,")");if((0,i.isWhiteSpace)(e)||-1===e)return(0,n.info)('Lexer.getNumber - "'.concat(o,'".')),0;throw new n.FormatError(o)}a=a||1;for(var s=e-48,c=0,u=1;(e=this.nextChar())>=0;)if(e>=48&&e<=57){var l=e-48;t?c=10*c+l:(0!==r&&(r*=10),s=10*s+l)}else if(46===e){if(0!==r)break;r=1}else if(45===e)(0,n.warn)("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;if(43===(e=this.peekChar())||45===e)u=45===e?-1:1,this.nextChar();else if(e<48||e>57)break;t=!0}return 0!==r&&(s/=r),t&&(s*=Math.pow(10,u*c)),a*s}},{key:"getString",value:function(){var e=1,t=!1,r=this.strBuf;r.length=0;for(var a=this.nextChar();;){var i=!1;switch(0|a){case-1:(0,n.warn)("Unterminated string"),t=!0;break;case 40:++e,r.push("(");break;case 41:0==--e?(this.nextChar(),t=!0):r.push(")");break;case 92:switch(a=this.nextChar()){case-1:(0,n.warn)("Unterminated string"),t=!0;break;case 110:r.push("\\n");break;case 114:r.push("\\r");break;case 116:r.push("\\t");break;case 98:r.push("\\b");break;case 102:r.push("\\f");break;case 92:case 40:case 41:r.push(String.fromCharCode(a));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:var o=15&a;i=!0,(a=this.nextChar())>=48&&a<=55&&(o=(o<<3)+(15&a),(a=this.nextChar())>=48&&a<=55&&(i=!1,o=(o<<3)+(15&a))),r.push(String.fromCharCode(o));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:r.push(String.fromCharCode(a))}break;default:r.push(String.fromCharCode(a))}if(t)break;i||(a=this.nextChar())}return r.join("")}},{key:"getName",value:function(){var e,t,r=this.strBuf;for(r.length=0;(e=this.nextChar())>=0&&!S[e];)if(35===e){if(e=this.nextChar(),S[e]){(0,n.warn)("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number."),r.push("#");break}var i=x(e);if(-1!==i){t=e;var o=x(e=this.nextChar());if(-1===o){if((0,n.warn)("Lexer_getName: Illegal digit (".concat(String.fromCharCode(e),") ")+"in hexadecimal number."),r.push("#",String.fromCharCode(t)),S[e])break;r.push(String.fromCharCode(e));continue}r.push(String.fromCharCode(i<<4|o))}else r.push("#",String.fromCharCode(e))}else r.push(String.fromCharCode(e));return r.length>127&&(0,n.warn)("Name token is longer than allowed by the spec: ".concat(r.length)),a.Name.get(r.join(""))}},{key:"_hexStringWarn",value:function(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5||(0,n.warn)("getHexString - ignoring invalid character: ".concat(e)):(0,n.warn)("getHexString - ignoring additional invalid characters.")}},{key:"getHexString",value:function(){var e=this.strBuf;e.length=0;var t,r,a=this.currentChar,i=!0;for(this._hexStringNumWarn=0;;){if(a<0){(0,n.warn)("Unterminated hex string");break}if(62===a){this.nextChar();break}if(1!==S[a]){if(i){if(-1===(t=x(a))){this._hexStringWarn(a),a=this.nextChar();continue}}else{if(-1===(r=x(a))){this._hexStringWarn(a),a=this.nextChar();continue}e.push(String.fromCharCode(t<<4|r))}i=!i,a=this.nextChar()}else a=this.nextChar()}return e.join("")}},{key:"getObj",value:function(){for(var e=!1,t=this.currentChar;;){if(t<0)return a.EOF;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==S[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:return this.nextChar(),a.Cmd.get("[");case 93:return this.nextChar(),a.Cmd.get("]");case 60:return 60===(t=this.nextChar())?(this.nextChar(),a.Cmd.get("<<")):this.getHexString();case 62:return 62===(t=this.nextChar())?(this.nextChar(),a.Cmd.get(">>")):a.Cmd.get(">");case 123:return this.nextChar(),a.Cmd.get("{");case 125:return this.nextChar(),a.Cmd.get("}");case 41:throw this.nextChar(),new n.FormatError("Illegal character: ".concat(t))}var r=String.fromCharCode(t);if(t<32||t>127){var i=this.peekChar();if(i>=32&&i<=127)return this.nextChar(),a.Cmd.get(r)}for(var o=this.knownCommands,s=o&&void 0!==o[r];(t=this.nextChar())>=0&&!S[t];){var c=r+String.fromCharCode(t);if(s&&void 0===o[c])break;if(128===r.length)throw new n.FormatError("Command token too long: ".concat(r.length));r=c,s=o&&void 0!==o[r]}return"true"===r||"false"!==r&&("null"===r?null:("BI"===r&&(this.beginInlineImagePos=this.stream.pos),a.Cmd.get(r)))}},{key:"peekObj",value:function(){var e,t=this.stream.pos,r=this.currentChar,a=this.beginInlineImagePos;try{e=this.getObj()}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)("peekObj: ".concat(e))}return this.stream.pos=t,this.currentChar=r,this.beginInlineImagePos=a,e}},{key:"skipToNextLine",value:function(){for(var e=this.currentChar;e>=0;){if(13===e){10===(e=this.nextChar())&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}]),e}();t.Lexer=O;var A=function(){function e(){m(this,e)}return w(e,null,[{key:"create",value:function(e){function t(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.get(t);if(Number.isInteger(n)&&(r?n>=0:n>0))return n;throw new Error('The "'.concat(t,'" parameter in the linearization ')+"dictionary is invalid.")}var r,n,i=new k({lexer:new O(e),xref:null}),o=i.getObj(),s=i.getObj(),c=i.getObj(),u=i.getObj();if(!(Number.isInteger(o)&&Number.isInteger(s)&&(0,a.isCmd)(c,"obj")&&u instanceof a.Dict&&"number"==typeof(r=u.get("Linearized"))&&r>0))return null;if((n=t(u,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:n,hints:function(e){var t,r=e.get("H");if(Array.isArray(r)&&(2===(t=r.length)||4===t)){for(var n=0;n0))throw new Error("Hint (".concat(n,") in the linearization dictionary is invalid."))}return r}throw new Error("Hint array in the linearization dictionary is invalid.")}(u),objectNumberFirst:t(u,"O"),endFirst:t(u,"E"),numPages:t(u,"N"),mainXRefEntriesOffset:t(u,"T"),pageFirst:u.has("P")?t(u,"P",!0):0}}}]),e}();t.Linearization=A},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Ascii85Stream=void 0;var a=r(148),i=r(135);function o(e,t){for(var r=0;r=0;--n)r[a+n]=255&s,s>>=8}}else this.eof=!0}}])&&o(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),f}(a.DecodeStream);t.Ascii85Stream=u},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.StreamsSequenceStream=t.DecodeStream=void 0;var a=r(136),i=r(139);function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);rn&&(t=n)}else{for(;!this.eof;)this.readBlock();t=this.bufferLength}return this.pos=t,this.buffer.subarray(r,t)}},{key:"reset",value:function(){this.pos=0}},{key:"makeSubStream",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(void 0===t)for(;!this.eof;)this.readBlock();else for(var n=e+t;this.bufferLength<=n&&!this.eof;)this.readBlock();return new i.Stream(this.buffer,e,t,r)}},{key:"getBaseStreams",value:function(){return this.str?this.str.getBaseStreams():null}}]),r}(a.BaseStream);t.DecodeStream=y;var m=function(e){h(r,e);var t=p(r);function r(e){var n,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;u(this,r);var i,s=0,c=o(e);try{for(c.s();!(i=c.n()).done;){var l=i.value;s+=l instanceof y?l._rawMinBufferLength:l.length}}catch(e){c.e(e)}finally{c.f()}return(n=t.call(this,s)).streams=e,n._onError=a,n}return f(r,[{key:"readBlock",value:function(){var e=this.streams;if(0!==e.length){var t,r=e.shift();try{t=r.getBytes()}catch(e){if(this._onError)return void this._onError(e,r.dict&&r.dict.objId);throw e}var n=this.bufferLength,a=n+t.length;this.ensureBuffer(a).set(t,n),this.bufferLength=a}else this.eof=!0}},{key:"getBaseStreams",value:function(){var e,t,r=[],n=o(this.streams);try{for(n.s();!(e=n.n()).done;){var a=e.value.getBaseStreams();a&&r.push.apply(r,function(e){if(Array.isArray(e))return c(e)}(t=a)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||s(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())}}catch(e){n.e(e)}finally{n.f()}return r.length>0?r:null}}]),r}(y);t.StreamsSequenceStream=m},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>1,n=this.ensureBuffer(this.bufferLength+r),i=this.bufferLength,o=this.firstDigit,s=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return a(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}(e);try{for(s.s();!(t=s.n()).done;){var c=t.value,u=void 0;if(c>=48&&c<=57)u=15&c;else{if(!(c>=65&&c<=70||c>=97&&c<=102)){if(62===c){this.eof=!0;break}continue}u=9+(15&c)}o<0?o=u:(n[i++]=o<<4|u,o=-1)}}catch(e){s.e(e)}finally{s.f()}o>=0&&this.eof&&(n[i++]=o<<4,o=-1),this.firstDigit=o,this.bufferLength=i}else this.eof=!0}}])&&i(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),f}(r(148).DecodeStream);t.AsciiHexStream=c},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CCITTFaxStream=void 0;var a=r(151),i=r(148),o=r(134);function s(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.CCITTFaxDecoder=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{};if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t||"function"!=typeof t.next)throw new Error('CCITTFaxDecoder - invalid "source" parameter.');this.source=t,this.eof=!1,this.encoding=r.K||0,this.eoline=r.EndOfLine||!1,this.byteAlign=r.EncodedByteAlign||!1,this.columns=r.Columns||1728,this.rows=r.Rows||0;var n,a=r.EndOfBlock;for(null==a&&(a=!0),this.eoblock=a,this.black=r.BlackIs1||!1,this.codingLine=new Uint32Array(this.columns+1),this.refLine=new Uint32Array(this.columns+2),this.codingLine[0]=this.columns,this.codingPos=0,this.row=0,this.nextLine2D=this.encoding<0,this.inputBits=0,this.inputBuf=0,this.outputBits=0,this.rowsDone=!1;0===(n=this._lookBits(12));)this._eatBits(1);1===n&&this._eatBits(12),this.encoding>0&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1))}var t,r;return t=e,(r=[{key:"readNextChar",value:function(){if(this.eof)return-1;var e,t,r,a,i,s=this.refLine,c=this.codingLine,u=this.columns;if(0===this.outputBits){if(this.rowsDone&&(this.eof=!0),this.eof)return-1;var l,f,h;if(this.err=!1,this.nextLine2D){for(a=0;c[a]=64);do{f+=h=this._getWhiteCode()}while(h>=64)}else{do{l+=h=this._getWhiteCode()}while(h>=64);do{f+=h=this._getBlackCode()}while(h>=64)}for(this._addPixels(c[this.codingPos]+l,t),c[this.codingPos]0?--e:++e;s[e]<=c[this.codingPos]&&s[e]0?--e:++e;s[e]<=c[this.codingPos]&&s[e]0?--e:++e;s[e]<=c[this.codingPos]&&s[e]=64);else do{l+=h=this._getWhiteCode()}while(h>=64);this._addPixels(c[this.codingPos]+l,t),t^=1}var d=!1;if(this.byteAlign&&(this.inputBits&=-8),this.eoblock||this.row!==this.rows-1){if(l=this._lookBits(12),this.eoline)for(;l!==o&&1!==l;)this._eatBits(1),l=this._lookBits(12);else for(;0===l;)this._eatBits(1),l=this._lookBits(12);1===l?(this._eatBits(12),d=!0):l===o&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1)),this.eoblock&&d&&this.byteAlign){if(1===(l=this._lookBits(12))){if(this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1)),this.encoding>=0)for(a=0;a<4;++a)1!==(l=this._lookBits(12))&&(0,n.info)("bad rtc code: "+l),this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){if((l=this._lookBits(13))===o)return this.eof=!0,-1;if(l>>1==1)break;this._eatBits(1)}this._eatBits(12),this.encoding>0&&(this._eatBits(1),this.nextLine2D=!(1&l))}c[0]>0?this.outputBits=c[this.codingPos=0]:this.outputBits=c[this.codingPos=1],this.row++}if(this.outputBits>=8)i=1&this.codingPos?0:255,this.outputBits-=8,0===this.outputBits&&c[this.codingPos]r?(i<<=r,1&this.codingPos||(i|=255>>8-r),this.outputBits-=r,r=0):(i<<=this.outputBits,1&this.codingPos||(i|=255>>8-this.outputBits),r-=this.outputBits,this.outputBits=0,c[this.codingPos]0&&(i<<=r,r=0))}while(r)}return this.black&&(i^=255),i}},{key:"_addPixels",value:function(e,t){var r=this.codingLine,a=this.codingPos;e>r[a]&&(e>this.columns&&((0,n.info)("row is wrong length"),this.err=!0,e=this.columns),1&a^t&&++a,r[a]=e),this.codingPos=a}},{key:"_addPixelsNeg",value:function(e,t){var r=this.codingLine,a=this.codingPos;if(e>r[a])e>this.columns&&((0,n.info)("row is wrong length"),this.err=!0,e=this.columns),1&a^t&&++a,r[a]=e;else if(e0&&e=a){var c=r[s-a];if(c[0]===i)return this._eatBits(i),[!0,c[1],!0]}}return[!1,0,!1]}},{key:"_getTwoDimCode",value:function(){var e,t=0;if(this.eoblock){if(t=this._lookBits(7),(e=s[t])&&e[0]>0)return this._eatBits(e[0]),e[1]}else{var r=this._findTableCode(1,7,s);if(r[0]&&r[2])return r[1]}return(0,n.info)("Bad two dim code"),o}},{key:"_getWhiteCode",value:function(){var e,t=0;if(this.eoblock){if((t=this._lookBits(12))===o)return 1;if((e=t>>5==0?c[t]:u[t>>3])[0]>0)return this._eatBits(e[0]),e[1]}else{var r=this._findTableCode(1,9,u);if(r[0])return r[1];if((r=this._findTableCode(11,12,c))[0])return r[1]}return(0,n.info)("bad white code"),this._eatBits(1),1}},{key:"_getBlackCode",value:function(){var e,t;if(this.eoblock){if((e=this._lookBits(13))===o)return 1;if((t=e>>7==0?l[e]:e>>9==0&&e>>7!=0?f[(e>>1)-64]:h[e>>7])[0]>0)return this._eatBits(t[0]),t[1]}else{var r=this._findTableCode(2,6,h);if(r[0])return r[1];if((r=this._findTableCode(7,12,f,64))[0])return r[1];if((r=this._findTableCode(10,13,l))[0])return r[1]}return(0,n.info)("bad black code"),this._eatBits(1),1}},{key:"_lookBits",value:function(e){for(var t;this.inputBits>16-e;this.inputBuf=this.inputBuf<<8|t,this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}},{key:"_eatBits",value:function(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}])&&i(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.CCITTFaxDecoder=d},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.FlateStream=void 0;var a=r(148),i=r(2);function o(e,t){for(var r=0;r>e,this.codeSize=n-=e,t}},{key:"getCode",value:function(e){for(var t,r=this.str,n=e[0],a=e[1],o=this.codeSize,s=this.codeBuf;o>16,l=65535&c;if(u<1||o>u,this.codeSize=o-u,l}},{key:"generateHuffmanTable",value:function(e){var t,r=e.length,n=0;for(t=0;tn&&(n=e[t]);for(var a=1<>=1;for(t=l;t>=1)){var a,o;if(1===n)a=h,o=d;else{if(2!==n)throw new i.FormatError("Unknown block type in flate stream");var s,c=this.getBits(5)+257,p=this.getBits(5)+1,g=this.getBits(4)+4,v=new Uint8Array(u.length);for(s=0;s0;)S[s++]=w}a=this.generateHuffmanTable(S.subarray(0,c)),o=this.generateHuffmanTable(S.subarray(c,k))}for(var A=(e=this.buffer)?e.length:0,C=this.bufferLength;;){var F=this.getCode(a);if(F<256)C+1>=A&&(A=(e=this.ensureBuffer(C+1)).length),e[C++]=F;else{if(256===F)return void(this.bufferLength=C);var P=(F=l[F-=257])>>16;P>0&&(P=this.getBits(P)),t=(65535&F)+P,F=this.getCode(o),(P=(F=f[F])>>16)>0&&(P=this.getBits(P));var T=(65535&F)+P;C+t>=A&&(A=(e=this.ensureBuffer(C+t)).length);for(var I=0;I{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Jbig2Stream=void 0;var a=r(136),i=r(148),o=r(134),s=r(154),c=r(2);function u(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Jbig2Image=void 0;var a=r(2),i=r(135),o=r(155),s=r(151);function c(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=l(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function l(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>>0}var o=i(1),s=i(1)?i(1)?i(1)?i(1)?i(1)?i(32)+4436:i(12)+340:i(8)+84:i(6)+20:i(4)+4:i(2);return 0===o?s:s>0?-s:null}function k(e,t,r){for(var n=e.getContexts("IAID"),a=1,i=0;i=E&&C=j)for(U=U<<1&v,f=0;f=0&&P=0&&(T=R[F][P])&&(U|=T<=e?M<<=1:M=M<<1|S[E][j];for(l=0;l=w||j<0||j>=b?M<<=1:M=M<<1|n[E][j];var _=x.readBit(A,M);T[I]=_}}return S}function T(e,t,r,n,a,i,o,s,c,u,l,f,h,d,p,g,v,m,b){if(e&&t)throw new y("refinement with Huffman is not supported");var S,x,O=[];for(S=0;S1&&(j=e?b.readBits(m):w(F,"IAIT",C));var M=o*T+j,_=e?d.symbolIDTable.decode(b):k(F,C,c),L=t&&(e?b.readBit():w(F,"IARI",C)),R=s[_],N=R[0].length,D=R.length;if(L){var B=w(F,"IARDW",C),U=w(F,"IARDH",C);R=P(N+=B,D+=U,p,R,(B>>1)+w(F,"IARDX",C),(U>>1)+w(F,"IARDY",C),!1,g,v)}var $=M-(1&f?0:D-1),X=E-(2&f?N-1:0),H=void 0,q=void 0,G=void 0;if(u){for(H=0;H>5&7,u=[31&s],l=t+6;if(7===s){c=536870911&(0,i.readUint32)(e,l-1),l+=3;var f=c+7>>3;for(u[0]=e[l++];--f>0;)u.push(e[l++])}else if(5===s||6===s)throw new y("invalid referred-to flags");r.retainBits=u;var h=4;r.number<=256?h=1:r.number<=65536&&(h=2);var d,p,g=[];for(d=0;d>>24&255,w[3]=m.height>>16&255,w[4]=m.height>>8&255,w[5]=255&m.height,d=l,p=e.length;d>2&3,f.huffmanDWSelector=h>>4&3,f.bitmapSizeSelector=h>>6&1,f.aggregationInstancesSelector=h>>7&1,f.bitmapCodingContextUsed=!!(256&h),f.bitmapCodingContextRetained=!!(512&h),f.template=h>>10&3,f.refinementTemplate=h>>12&1,l+=2,!f.huffman){for(o=0===f.template?4:1,n=[],a=0;a>2&3,d.stripSize=1<>4&3,d.transposed=!!(64&p),d.combinationOperator=p>>7&3,d.defaultPixelValue=p>>9&1,d.dsOffset=p<<17>>27,d.refinementTemplate=p>>15&1,d.huffman){var g=(0,i.readUint16)(c,l);l+=2,d.huffmanFS=3&g,d.huffmanDS=g>>2&3,d.huffmanDT=g>>4&3,d.huffmanRefinementDW=g>>6&3,d.huffmanRefinementDH=g>>8&3,d.huffmanRefinementDX=g>>10&3,d.huffmanRefinementDY=g>>12&3,d.huffmanRefinementSizeSelector=!!(16384&g)}if(d.refinement&&!d.refinementTemplate){for(n=[],a=0;a<2;a++)n.push({x:(0,i.readInt8)(c,l),y:(0,i.readInt8)(c,l+1)}),l+=2;d.refinementAt=n}d.numberOfSymbolInstances=(0,i.readUint32)(c,l),l+=4,r=[d,s.referredTo,c,l,u];break;case 16:var v={},m=c[l++];v.mmr=!!(1&m),v.template=m>>1&3,v.patternWidth=c[l++],v.patternHeight=c[l++],v.maxPatternIndex=(0,i.readUint32)(c,l),l+=4,r=[v,s.number,c,l,u];break;case 22:case 23:var b={};b.info=j(c,l),l+=M;var w=c[l++];b.mmr=!!(1&w),b.template=w>>1&3,b.enableSkip=!!(8&w),b.combinationOperator=w>>4&7,b.defaultPixelValue=w>>7&1,b.gridWidth=(0,i.readUint32)(c,l),l+=4,b.gridHeight=(0,i.readUint32)(c,l),l+=4,b.gridOffsetX=4294967295&(0,i.readUint32)(c,l),l+=4,b.gridOffsetY=4294967295&(0,i.readUint32)(c,l),l+=4,b.gridVectorX=(0,i.readUint16)(c,l),l+=2,b.gridVectorY=(0,i.readUint16)(c,l),l+=2,r=[b,s.referredTo,c,l,u];break;case 38:case 39:var k={};k.info=j(c,l),l+=M;var S=c[l++];if(k.mmr=!!(1&S),k.template=S>>1&3,k.prediction=!!(8&S),!k.mmr){for(o=0===k.template?4:1,n=[],a=0;a>2&1,x.combinationOperator=O>>3&3,x.requiresBuffer=!!(32&O),x.combinationOperatorOverride=!!(64&O),r=[x];break;case 49:case 50:case 51:case 62:break;case 53:r=[s.number,c,l,u];break;default:throw new y("segment type ".concat(s.typeName,"(").concat(s.type,") is not implemented"))}var A="on"+s.typeName;A in t&&t[A].apply(t,r)}function L(e,t){for(var r=0,n=e.length;r>3,r=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&r.fill(255),this.buffer=r}},{key:"drawBitmap",value:function(e,t){var r,n,a,i,o=this.currentPageInfo,s=e.width,c=e.height,u=o.width+7>>3,l=o.combinationOperatorOverride?e.combinationOperator:o.combinationOperator,f=this.buffer,h=128>>(7&e.x),d=e.y*u+(e.x>>3);switch(l){case 0:for(r=0;r>=1)||(a=128,i++);d+=u}break;case 2:for(r=0;r>=1)||(a=128,i++);d+=u}break;default:throw new y("operator ".concat(l," is not supported"))}}},{key:"onImmediateGenericRegion",value:function(e,t,r,n){var a=e.info,i=new b(t,r,n),o=F(e.mmr,a.width,a.height,e.template,e.prediction,null,e.at,i);this.drawBitmap(a,o)}},{key:"onImmediateLosslessGenericRegion",value:function(){this.onImmediateGenericRegion.apply(this,arguments)}},{key:"onSymbolDictionary",value:function(e,t,r,n,a,o){var s,l;e.huffman&&(s=function(e,t,r){var n,a,i,o=0;switch(e.huffmanDHSelector){case 0:case 1:n=$(e.huffmanDHSelector+4);break;case 3:n=H(o,t,r),o++;break;default:throw new y("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:a=$(e.huffmanDWSelector+2);break;case 3:a=H(o,t,r),o++;break;default:throw new y("invalid Huffman DW selector")}return e.bitmapSizeSelector?(i=H(o,t,r),o++):i=$(1),{tableDeltaHeight:n,tableDeltaWidth:a,tableBitmapSize:i,tableAggregateInstances:e.aggregationInstancesSelector?H(o,t,r):$(1)}}(e,r,this.customTables),l=new X(n,a,o));var f=this.symbols;f||(this.symbols=f={});var h,d=[],p=u(r);try{for(p.s();!(h=p.n()).done;){var g=f[h.value];g&&d.push.apply(d,c(g))}}catch(e){p.e(e)}finally{p.f()}var v=new b(n,a,o);f[t]=function(e,t,r,n,a,o,s,c,u,l,f,h){if(e&&t)throw new y("symbol refinement with Huffman is not supported");var d,p,g=[],v=0,m=(0,i.log2)(r.length+n),b=f.decoder,S=f.contextCache;for(e&&(d=$(1),p=[],m=Math.max(m,1));g.length1)I=T(e,t,x,v,0,E,1,r.concat(g),m,0,0,1,0,o,u,l,f,0,h);else{var j=k(S,b,m),M=w(S,"IARDX",b),_=w(S,"IARDY",b);I=P(x,v,u,j=32){var f=void 0,h=void 0,d=void 0;switch(l){case 32:if(0===u)throw new y("no previous value in symbol ID table");h=a.readBits(2)+3,f=i[u-1].prefixLength;break;case 33:h=a.readBits(3)+3,f=0;break;case 34:h=a.readBits(7)+11,f=0;break;default:throw new y("invalid code length in symbol ID table")}for(d=0;d=0;v--)T=e?G(P,u,l,!0):F(!1,u,l,r,!1,null,C,g),B[v]=T;for(I=0;I=0;m--)M|=(j^=B[m][I][E])<>8,(L=f+I*p+E*d>>8)>=0&&L+x<=n&&R>=0&&R+O<=a)for(v=0;v=a))for(D=w[$],N=_[v],m=0;m=0&&U>1&7),f=1+(o>>4&7),h=[],d=s;do{n=u.readBits(l),a=u.readBits(f),h.push(new N([d,n,a,0])),d+=1<>r&1;if(r<=0)this.children[n]=new e(t);else{var a=this.children[n];a||(this.children[n]=a=new e(null)),a.buildTree(t,r-1)}}},{key:"decodeNode",value:function(e){if(this.isLeaf){if(this.isOOB)return null;var t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}var r=this.children[e.readBit()];if(!r)throw new y("invalid Huffman data");return r.decodeNode(e)}}]),e}(),B=function(){function e(t,r){p(this,e),r||this.assignPrefixCodes(t),this.rootNode=new D(null);for(var n=0,a=t.length;n0&&this.rootNode.buildTree(i,i.prefixLength-1)}}return d(e,[{key:"decode",value:function(e){return this.rootNode.decodeNode(e)}},{key:"assignPrefixCodes",value:function(e){for(var t=e.length,r=0,n=0;n=this.end)throw new y("end of data while reading bit");this.currentByte=this.data[this.position++],this.shift=7}var e=this.currentByte>>this.shift&1;return this.shift--,e}},{key:"readBits",value:function(e){var t,r=0;for(t=e-1;t>=0;t--)r|=this.readBit()<=this.end?-1:this.data[this.position++]}}]),e}();function H(e,t,r){for(var n=0,a=0,i=t.length;a>h&1,h--}if(n&&!u)for(var p=0;p<5&&-1!==o.readNextChar();p++);return c}var z=function(){function e(){p(this,e)}return d(e,[{key:"parseChunks",value:function(e){return function(e){for(var t=new R,r=0,n=e.length;r{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(e,t){for(var n=0;n>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}var t,r;return t=e,(r=[{key:"byteIn",value:function(){var e=this.data,t=this.bp;255===e[t]?e[t+1]>143?(this.clow+=65280,this.ct=8):(t++,this.clow+=e[t]<<9,this.ct=7,this.bp=t):(t++,this.clow+=t65535&&(this.chigh+=this.clow>>16,this.clow&=65535)}},{key:"readBit",value:function(e,t){var r,n=e[t]>>1,i=1&e[t],o=a[n],s=o.qe,c=this.a-s;if(this.chigh>15&1,this.clow=this.clow<<1&65535,this.ct--}while(0==(32768&c));return this.a=c,e[t]=n<<1|i,r}}])&&n(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.ArithmeticDecoder=i},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.JpegStream=void 0;var a=r(148),i=r(134),o=r(157),s=r(2);function c(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.JpegImage=void 0;var n=r(2),a=r(135);function i(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&!e[i-1];)i--;var o,s=[{children:[],index:0}],c=s[0];for(r=0;r0;)c=s.pop();for(c.index++,s.push(c);s.length<=r;)s.push(o={children:[],index:0}),c.children[c.index]=o.children,c=o;a++}r+19&&void 0!==arguments[9]&&arguments[9],d=r.mcusPerLine,p=r.progressive,b=t,w=0,k=0;function S(){if(k>0)return k--,w>>k&1;if(255===(w=e[t++])){var n=e[t++];if(n){if(220===n&&h){t+=2;var i=(0,a.readUint16)(e,t);if(t+=2,i>0&&i!==r.scanLines)throw new v("Found DNL marker (0xFFDC) while parsing scan data",i)}else if(217===n){if(h){var o=I*(8===r.precision?8:0);if(o>0&&Math.round(r.scanLines/o)>=5)throw new v("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect \`scanLines\` parameter",o)}throw new y("Found EOI marker (0xFFD9) while parsing scan data")}throw new g("unexpected marker ".concat((w<<8|n).toString(16)))}}return k=7,w>>>7}function x(e){for(var t=e;;){switch(s(t=t[S()])){case"number":return t;case"object":continue}throw new g("invalid huffman sequence")}}function O(e){for(var t=0;e>0;)t=t<<1|S(),e--;return t}function A(e){if(1===e)return 1===S()?1:-1;var t=O(e);return t>=1<0)F--;else for(var r=c,n=u;r<=n;){var a=x(e.huffmanTableAC),i=15&a,o=a>>4;if(0!==i){var s=m[r+=o];e.blockData[t+s]=A(i)*(1<>4,0==(r=15&n))o<15?(F=O(o)+(1<>4;if(0!==o){var c=m[a+=s];e.blockData[t+c]=A(o),a++}else{if(s<15)break;a+=16}}};var $,X,H,q,G=0;for(X=1===U?i[0].blocksPerLine*i[0].blocksPerColumn:d*r.mcusPerColumn;G<=X;){var z=o?Math.min(X-G,o):X;if(z>0){for(L=0;L0?"unexpected":"excessive";(0,n.warn)("decodeScan - ".concat(W," MCU data, current marker is: ").concat($.invalid)),t=$.offset}if(!($.marker>=65488&&$.marker<=65495))break;t+=2}return t-b}function I(e,t,r){var n,a,i,o,s,c,u,l,f,h,d,p,v,y,m,F,P,T=e.quantizationTable,I=e.blockData;if(!T)throw new g("missing required Quantization Table.");for(var E=0;E<64;E+=8)f=I[t+E],h=I[t+E+1],d=I[t+E+2],p=I[t+E+3],v=I[t+E+4],y=I[t+E+5],m=I[t+E+6],F=I[t+E+7],f*=T[E],0!=(h|d|p|v|y|m|F)?(h*=T[E+1],d*=T[E+2],p*=T[E+3],v*=T[E+4],y*=T[E+5],m*=T[E+6],F*=T[E+7],a=(n=(n=A*f+128>>8)+(a=A*v+128>>8)+1>>1)-a,P=(i=d)*O+(o=m)*x+128>>8,i=i*x-o*O+128>>8,u=(s=(s=C*(h-F)+128>>8)+(u=y<<4)+1>>1)-u,c=(l=(l=C*(h+F)+128>>8)+(c=p<<4)+1>>1)-c,o=(n=n+(o=P)+1>>1)-o,i=(a=a+i+1>>1)-i,P=s*S+l*k+2048>>12,s=s*k-l*S+2048>>12,l=P,P=c*w+u*b+2048>>12,c=c*b-u*w+2048>>12,u=P,r[E]=n+l,r[E+7]=n-l,r[E+1]=a+u,r[E+6]=a-u,r[E+2]=i+c,r[E+5]=i-c,r[E+3]=o+s,r[E+4]=o-s):(P=A*f+512>>10,r[E]=P,r[E+1]=P,r[E+2]=P,r[E+3]=P,r[E+4]=P,r[E+5]=P,r[E+6]=P,r[E+7]=P);for(var j=0;j<8;++j)f=r[j],0!=((h=r[j+8])|(d=r[j+16])|(p=r[j+24])|(v=r[j+32])|(y=r[j+40])|(m=r[j+48])|(F=r[j+56]))?(a=(n=4112+((n=A*f+2048>>12)+(a=A*v+2048>>12)+1>>1))-a,P=(i=d)*O+(o=m)*x+2048>>12,i=i*x-o*O+2048>>12,o=P,u=(s=(s=C*(h-F)+2048>>12)+(u=y)+1>>1)-u,c=(l=(l=C*(h+F)+2048>>12)+(c=p)+1>>1)-c,P=s*S+l*k+2048>>12,s=s*k-l*S+2048>>12,l=P,P=c*w+u*b+2048>>12,c=c*b-u*w+2048>>12,(f=(n=n+o+1>>1)+l)<16?f=0:f>=4080?f=255:f>>=4,(h=(a=a+i+1>>1)+(u=P))<16?h=0:h>=4080?h=255:h>>=4,(d=(i=a-i)+c)<16?d=0:d>=4080?d=255:d>>=4,(p=(o=n-o)+s)<16?p=0:p>=4080?p=255:p>>=4,(v=o-s)<16?v=0:v>=4080?v=255:v>>=4,(y=i-c)<16?y=0:y>=4080?y=255:y>>=4,(m=a-u)<16?m=0:m>=4080?m=255:m>>=4,(F=n-l)<16?F=0:F>=4080?F=255:F>>=4,I[t+j]=f,I[t+j+8]=h,I[t+j+16]=d,I[t+j+24]=p,I[t+j+32]=v,I[t+j+40]=y,I[t+j+48]=m,I[t+j+56]=F):(P=(P=A*f+8192>>14)<-2040?0:P>=2024?255:P+2056>>4,I[t+j]=P,I[t+j+8]=P,I[t+j+16]=P,I[t+j+24]=P,I[t+j+32]=P,I[t+j+40]=P,I[t+j+48]=P,I[t+j+56]=P)}function E(e,t){for(var r=t.blocksPerLine,n=t.blocksPerColumn,a=new Int16Array(64),i=0;i2&&void 0!==arguments[2]?arguments[2]:t,n=e.length-1,i=r=n)return null;var o=(0,a.readUint16)(e,t);if(o>=65472&&o<=65534)return{invalid:null,marker:o,offset:t};for(var s=(0,a.readUint16)(e,i);!(s>=65472&&s<=65534);){if(++i>=n)return null;s=(0,a.readUint16)(e,i)}return{invalid:o.toString(16),marker:s,offset:i}}var M=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.decodeTransform,n=void 0===r?null:r,a=t.colorTransform,i=void 0===a?-1:a;l(this,e),this._decodeTransform=n,this._colorTransform=i}return u(e,[{key:"parse",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).dnlScanLines,r=void 0===t?null:t;function o(){var t=(0,a.readUint16)(e,l),r=(l+=2)+t-2,i=j(e,r,l);i&&i.invalid&&((0,n.warn)("readDataBlock - incorrect length, current marker is: "+i.invalid),r=i.offset);var o=e.subarray(l,r);return l+=o.length,o}function s(e){var t,r=Math.ceil(e.samplesPerLine/8/e.maxH),n=Math.ceil(e.scanLines/8/e.maxV),a=i(e.components);try{for(a.s();!(t=a.n()).done;){var o=t.value,s=Math.ceil(Math.ceil(e.samplesPerLine/8)*o.h/e.maxH),c=Math.ceil(Math.ceil(e.scanLines/8)*o.v/e.maxV),u=r*o.h,l=n*o.v*64*(u+1);o.blockData=new Int16Array(l),o.blocksPerLine=s,o.blocksPerColumn=c}}catch(e){a.e(e)}finally{a.f()}e.mcusPerLine=r,e.mcusPerColumn=n}var c,u,l=0,f=null,h=null,d=0,p=[],b=[],w=[],k=(0,a.readUint16)(e,l);if(l+=2,65496!==k)throw new g("SOI not found");k=(0,a.readUint16)(e,l),l+=2;e:for(;65497!==k;){var S=void 0,x=void 0,O=void 0;switch(k){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var A=o();65504===k&&74===A[0]&&70===A[1]&&73===A[2]&&70===A[3]&&0===A[4]&&(f={version:{major:A[5],minor:A[6]},densityUnits:A[7],xDensity:A[8]<<8|A[9],yDensity:A[10]<<8|A[11],thumbWidth:A[12],thumbHeight:A[13],thumbData:A.subarray(14,14+3*A[12]*A[13])}),65518===k&&65===A[0]&&100===A[1]&&111===A[2]&&98===A[3]&&101===A[4]&&(h={version:A[5]<<8|A[6],flags0:A[7]<<8|A[8],flags1:A[9]<<8|A[10],transformCode:A[11]});break;case 65499:for(var C=(0,a.readUint16)(e,l)+(l+=2)-2;l>4==0)for(x=0;x<64;x++)I[m[x]]=e[l++];else{if(P>>4!=1)throw new g("DQT - invalid table spec");for(x=0;x<64;x++)I[m[x]]=(0,a.readUint16)(e,l),l+=2}p[15&P]=I}break;case 65472:case 65473:case 65474:if(c)throw new g("Only single frame JPEGs supported");l+=2,(c={}).extended=65473===k,c.progressive=65474===k,c.precision=e[l++];var M=(0,a.readUint16)(e,l);l+=2,c.scanLines=r||M,c.samplesPerLine=(0,a.readUint16)(e,l),l+=2,c.components=[],c.componentIds={};var _=e[l++],L=0,R=0;for(S=0;S<_;S++){var N=e[l],D=e[l+1]>>4,B=15&e[l+1];L>4==0?w:b)[15&X]=F(H,G)}break;case 65501:l+=2,u=(0,a.readUint16)(e,l),l+=2;break;case 65498:var z=1==++d&&!r;l+=2;var W=e[l++],V=[];for(S=0;S>4],J.huffmanTableAC=b[15&Z],V.push(J)}var Q=e[l++],ee=e[l++],te=e[l++];try{var re=T(e,l,c,V,u,Q,ee,te>>4,15&te,z);l+=re}catch(t){if(t instanceof v)return(0,n.warn)("".concat(t.message," -- attempting to re-parse the JPEG image.")),this.parse(e,{dnlScanLines:t.scanLines});if(t instanceof y){(0,n.warn)("".concat(t.message," -- ignoring the rest of the image data."));break e}throw t}break;case 65500:l+=4;break;case 65535:255!==e[l]&&l--;break;default:var ne=j(e,l-2,l-3);if(ne&&ne.invalid){(0,n.warn)("JpegImage.parse - unexpected data, current marker is: "+ne.invalid),l=ne.offset;break}if(!ne||l>=e.length-1){(0,n.warn)("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new g("JpegImage.parse - unknown marker: "+k.toString(16))}k=(0,a.readUint16)(e,l),l+=2}this.width=c.samplesPerLine,this.height=c.scanLines,this.jfif=f,this.adobe=h,this.components=[];var ae,ie=i(c.components);try{for(ie.s();!(ae=ie.n()).done;){var oe=ae.value,se=p[oe.quantizationId];se&&(oe.quantizationTable=se),this.components.push({index:oe.index,output:E(0,oe),scaleX:oe.h/c.maxH,scaleY:oe.v/c.maxV,blocksPerLine:oe.blocksPerLine,blocksPerColumn:oe.blocksPerColumn})}}catch(e){ie.e(e)}finally{ie.f()}this.numComponents=this.components.length}},{key:"_getLinearizedBlockData",value:function(e,t){var r,n,a,i,o,s,c,u,l,f,h,d,p=arguments.length>2&&void 0!==arguments[2]&&arguments[2],g=this.width/e,v=this.height/t,y=0,m=this.components.length,b=e*t*m,w=new Uint8ClampedArray(b),k=new Uint32Array(e),S=4294967288;for(c=0;c>8)+x[l+1];return w}},{key:"_isColorConversionNeeded",get:function(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}},{key:"_convertYccToRgb",value:function(e){for(var t,r,n,a=0,i=e.length;a4)throw new g("Unsupported color mode");var c=this._getLinearizedBlockData(t,r,s);if(1===this.numComponents&&a){var u,l=new Uint8ClampedArray(3*c.length),f=0,h=i(c);try{for(h.s();!(u=h.n()).done;){var d=u.value;l[f++]=d,l[f++]=d,l[f++]=d}}catch(e){h.e(e)}finally{h.f()}return l}if(3===this.numComponents&&this._isColorConversionNeeded)return this._convertYccToRgb(c);if(4===this.numComponents){if(this._isColorConversionNeeded)return a?this._convertYcckToRgb(c):this._convertYcckToCmyk(c);if(a)return this._convertCmykToRgb(c)}return c}}]),e}();t.JpegImage=M},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.JpxStream=void 0;var a=r(148),i=r(159),o=r(2);function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.JpxImage=void 0;var a=r(2),i=r(135),o=r(155);function s(e,t){for(var r=0;r>24&255,s>>16&255,s>>8&255,255&s);(0,a.warn)("Unsupported header type ".concat(s," (").concat(h,")."))}u&&(r+=c)}else this.parseCodestream(e,0,e.length)}},{key:"parseImageProperties",value:function(e){for(var t=e.getByte();t>=0;)if(65361==(t<<8|(t=e.getByte()))){e.skip(4);var r=e.getInt32()>>>0,n=e.getInt32()>>>0,a=e.getInt32()>>>0,i=e.getInt32()>>>0;e.skip(16);var o=e.getUint16();return this.width=r-a,this.height=n-i,this.componentsCount=o,void(this.bitsPerComponent=8)}throw new p("No size marker found in JPX stream")}},{key:"parseCodestream",value:function(e,t,r){var n={},o=!1;try{for(var s=t;s+1>5,h=[];l>3,A.mu=0):(A.epsilon=e[l]>>3,A.mu=(7&e[l])<<8|e[l+1],l+=2),h.push(A)}O.SPqcds=h,n.mainHeader?n.QCD=O:(n.currentTile.QCD=O,n.currentTile.QCC=[]);break;case 65373:u=(0,i.readUint16)(e,s);var C={};l=s+2;var F=void 0;switch(n.SIZ.Csiz<257?F=e[l++]:(F=(0,i.readUint16)(e,l),l+=2),31&(f=e[l++])){case 0:d=8,g=!0;break;case 1:d=16,g=!1;break;case 2:d=16,g=!0;break;default:throw new Error("Invalid SQcd value "+f)}for(C.noQuantization=8===d,C.scalarExpounded=g,C.guardBits=f>>5,h=[];l>3,P.mu=0):(P.epsilon=e[l]>>3,P.mu=(7&e[l])<<8|e[l+1],l+=2),h.push(P)}C.SPqcds=h,n.mainHeader?n.QCC[F]=C:n.currentTile.QCC[F]=C;break;case 65362:u=(0,i.readUint16)(e,s);var T={};l=s+2;var j=e[l++];T.entropyCoderWithCustomPrecincts=!!(1&j),T.sopMarkerUsed=!!(2&j),T.ephMarkerUsed=!!(4&j),T.progressionOrder=e[l++],T.layersCount=(0,i.readUint16)(e,l),l+=2,T.multipleComponentTransform=e[l++],T.decompositionLevelsCount=e[l++],T.xcb=2+(15&e[l++]),T.ycb=2+(15&e[l++]);var L=e[l++];if(T.selectiveArithmeticCodingBypass=!!(1&L),T.resetContextProbabilities=!!(2&L),T.terminationOnEachCodingPass=!!(4&L),T.verticallyStripe=!!(8&L),T.predictableTermination=!!(16&L),T.segmentationSymbolUsed=!!(32&L),T.reversibleTransformation=e[l++],T.entropyCoderWithCustomPrecincts){for(var R=[];l>4})}T.precinctsSizes=R}var D=[];T.selectiveArithmeticCodingBypass&&D.push("selectiveArithmeticCodingBypass"),T.terminationOnEachCodingPass&&D.push("terminationOnEachCodingPass"),T.verticallyStripe&&D.push("verticallyStripe"),T.predictableTermination&&D.push("predictableTermination"),D.length>0&&(o=!0,(0,a.warn)("JPX: Unsupported COD options (".concat(D.join(", "),")."))),n.mainHeader?n.COD=T:(n.currentTile.COD=T,n.currentTile.COC=[]);break;case 65424:u=(0,i.readUint16)(e,s),(v={}).index=(0,i.readUint16)(e,s+2),v.length=(0,i.readUint32)(e,s+4),v.dataEnd=v.length+s-2,v.partIndex=e[s+8],v.partsCount=e[s+9],n.mainHeader=!1,0===v.partIndex&&(v.COD=n.COD,v.COC=n.COC.slice(0),v.QCD=n.QCD,v.QCC=n.QCC.slice(0)),n.currentTile=v;break;case 65427:0===(v=n.currentTile).partIndex&&(_(n,v.index),I(n)),E(n,e,s,u=v.dataEnd-s);break;case 65363:(0,a.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented.");case 65365:case 65367:case 65368:case 65380:u=(0,i.readUint16)(e,s);break;default:throw new Error("Unknown codestream code: "+c.toString(16))}s+=u}}catch(e){if(o||this.failOnCorruptedImage)throw new p(e.message);(0,a.warn)('JPX: Trying to recover from: "'.concat(e.message,'".'))}this.tiles=function(e){for(var t=e.SIZ,r=e.components,n=t.Csiz,a=[],i=0,o=e.tiles.length;i>2);f[g++]=P+w>>d,f[g++]=P>>d,f[g++]=P+b>>d}else for(v=0;v>d,f[g++]=m-.34413*b-.71414*w>>d,f[g++]=m+1.772*b>>d;if(k)for(v=0,g=3;v>d}else for(var T=0;T>d,g+=n}a.push(h)}return a}(n),this.width=n.SIZ.Xsiz-n.SIZ.XOsiz,this.height=n.SIZ.Ysiz-n.SIZ.YOsiz,this.componentsCount=n.SIZ.Csiz}}]),e}();function y(e,t){e.x0=Math.ceil(t.XOsiz/e.XRsiz),e.x1=Math.ceil(t.Xsiz/e.XRsiz),e.y0=Math.ceil(t.YOsiz/e.YRsiz),e.y1=Math.ceil(t.Ysiz/e.YRsiz),e.width=e.x1-e.x0,e.height=e.y1-e.y0}function m(e,t){for(var r,n=e.SIZ,a=[],i=Math.ceil((n.Xsiz-n.XTOsiz)/n.XTsiz),o=Math.ceil((n.Ysiz-n.YTOsiz)/n.YTsiz),s=0;s0?Math.min(n.xcb,a.PPx-1):Math.min(n.xcb,a.PPx),a.ycb_=r>0?Math.min(n.ycb,a.PPy-1):Math.min(n.ycb,a.PPy),a}function w(e,t,r){var n=1<t.trx0?Math.ceil(t.trx1/n)-Math.floor(t.trx0/n):0,u=t.try1>t.try0?Math.ceil(t.try1/a)-Math.floor(t.try0/a):0,l=c*u;t.precinctParameters={precinctWidth:n,precinctHeight:a,numprecinctswide:c,numprecinctshigh:u,numprecincts:l,precinctWidthInSubband:o,precinctHeightInSubband:s}}function k(e,t,r){var n,a,i,o,s=r.xcb_,c=r.ycb_,u=1<>s,h=t.tby0>>c,d=t.tbx1+u-1>>s,p=t.tby1+l-1>>c,g=t.resolution.precinctParameters,v=[],y=[];for(a=h;am.cbxMax&&(m.cbxMax=n),am.cbyMax&&(m.cbyMax=a)):y[o]=m={cbxMin:n,cbyMin:a,cbxMax:n,cbyMax:a},i.precinct=m}t.codeblockParameters={codeblockWidth:s,codeblockHeight:c,numcodeblockwide:d-f+1,numcodeblockhigh:p-h+1},t.codeblocks=v,t.precincts=y}function S(e,t,r){for(var n=[],a=e.subbands,i=0,o=a.length;ie.codingStyleParameters.decompositionLevelsCount)){for(var t=e.resolutions[u],r=t.precinctParameters.numprecincts;fe.codingStyleParameters.decompositionLevelsCount)){for(var t=e.resolutions[c],r=t.precinctParameters.numprecincts;fe.codingStyleParameters.decompositionLevelsCount)){var i=e.resolutions[r],o=i.precinctParameters.numprecincts;if(!(a>=o)){for(;t=0;--v){var y=c.resolutions[v],m=g*y.precinctParameters.precinctWidth,b=g*y.precinctParameters.precinctHeight;f=Math.min(f,m),h=Math.min(h,b),d=Math.max(d,y.precinctParameters.numprecinctswide),p=Math.max(p,y.precinctParameters.numprecinctshigh),l[v]={width:m,height:b},g<<=1}r=Math.min(r,f),n=Math.min(n,h),a=Math.max(a,d),i=Math.max(i,p),o[s]={resolutions:l,minWidth:f,minHeight:h,maxNumWide:d,maxNumHigh:p}}return{components:o,minWidth:r,minHeight:n,maxNumWide:a,maxNumHigh:i}}function I(e){for(var t=e.SIZ,r=e.currentTile.index,n=e.tiles[r],a=t.Csiz,i=0;i>>(s-=e)&(1<0;){var $=S.shift();void 0===(x=$.codeblock).data&&(x.data=[]),x.data.push({data:t,start:r+o,end:r+o+$.dataLength,codingpasses:$.codingpasses}),o+=$.dataLength}}}return o}function j(e,t,r,n,a,i,s,c,u){for(var l=n.tbx0,f=n.tby0,h=n.tbx1-n.tbx0,d=n.codeblocks,p="H"===n.type.charAt(0)?1:0,g="H"===n.type.charAt(1)?t:0,v=0,y=d.length;v=i?B:B*(1<0?1-m:0));var F=b.subbands[x],P=g[F.type];j(S,w,0,F,d?1:Math.pow(2,h+P-C)*(1+A/2048),u+C-1,d,l,f)}v.push({width:w,height:k,items:S})}var T=p.calculate(v,n.tcx0,n.tcy0);return{left:n.tcx0,top:n.tcy0,width:T.width,height:T.height,items:T.items}}function _(e,t){for(var r=e.SIZ.Csiz,n=e.tiles[t],a=0;a>=1,t>>=1,n++}n--,(r=this.levels[n]).items[r.index]=a,this.currentLevel=n,delete this.value}},{key:"incrementValue",value:function(){var e=this.levels[this.currentLevel];e.items[e.index]++}},{key:"nextLevel",value:function(){var e=this.currentLevel,t=this.levels[e],r=t.items[t.index];return--e<0?(this.value=r,!1):(this.currentLevel=e,(t=this.levels[e]).items[t.index]=r,!0)}}]),e}(),U=function(){function e(t,r,n){u(this,e);var a=(0,i.log2)(Math.max(t,r))+1;this.levels=[];for(var o=0;or)return this.currentLevel=n,this.propagateValues(),!1;e>>=1,t>>=1,n++}return this.currentLevel=n-1,!0}},{key:"incrementValue",value:function(e){var t=this.levels[this.currentLevel];t.items[t.index]=e+1,this.propagateValues()}},{key:"propagateValues",value:function(){for(var e=this.currentLevel,t=this.levels[e],r=t.items[t.index];--e>=0;)(t=this.levels[e]).items[t.index]=r}},{key:"nextLevel",value:function(){var e=this.currentLevel,t=this.levels[e],r=t.items[t.index];return t.items[t.index]=255,!(--e<0||(this.currentLevel=e,(t=this.levels[e]).items[t.index]=r,0))}}]),e}(),$=(L=17,R=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),N=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),D=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]),function(){function e(t,r,n,a,i){var o;u(this,e),this.width=t,this.height=r,o="HH"===n?D:"HL"===n?N:R,this.contextLabelTable=o;var s,c=t*r;this.neighborsSignificance=new Uint8Array(c),this.coefficentsSign=new Uint8Array(c),s=i>14?new Uint32Array(c):i>6?new Uint16Array(c):new Uint8Array(c),this.coefficentsMagnitude=s,this.processingFlags=new Uint8Array(c);var l=new Uint8Array(c);if(0!==a)for(var f=0;f0,c=t+10&&(n=r-i,s&&(a[n-1]+=16),c&&(a[n+1]+=16),a[n]+=4),e+1=r)break;if(o[h]&=-2,!n[h]&&i[h]){var g=c[i[h]];if(e.readBit(s,g)){var v=this.decodeSignBit(p,f,h);a[h]=v,n[h]=1,this.setNeighborsSignificance(p,f,h),o[h]|=2}u[h]++,o[h]|=1}}}},{key:"decodeSignBit",value:function(e,t,r){var n,a,i,o,s,c,u=this.width,l=this.height,f=this.coefficentsMagnitude,h=this.coefficentsSign;o=t>0&&0!==f[r-1],t+10&&0!==f[r-u],e+1=0?(s=9+n,c=this.decoder.readBit(this.contexts,s)):(s=9-n,c=1^this.decoder.readBit(this.contexts,s)),c}},{key:"runMagnitudeRefinementPass",value:function(){for(var e,t=this.decoder,r=this.width,n=this.height,a=this.coefficentsMagnitude,i=this.neighborsSignificance,o=this.contexts,s=this.bitsDecoded,c=this.processingFlags,u=r*n,l=4*r,f=0;f>1,c=-1.586134342059924,u=-.052980118572961,l=.882911075530934,f=.443506852043971,h=1.230174104914001;for(n=(t|=0)-3,a=s+4;a--;n+=2)e[n]*=.8128930661159609;for(i=f*e[(n=t-2)-1],a=s+3;a--&&(o=f*e[n+1],e[n]=h*e[n]-i-o,a--);n+=2)i=f*e[(n+=2)+1],e[n]=h*e[n]-i-o;for(i=l*e[(n=t-1)-1],a=s+2;a--&&(o=l*e[n+1],e[n]-=i+o,a--);n+=2)i=l*e[(n+=2)+1],e[n]-=i+o;for(i=u*e[(n=t)-1],a=s+1;a--&&(o=u*e[n+1],e[n]-=i+o,a--);n+=2)i=u*e[(n+=2)+1],e[n]-=i+o;if(0!==s)for(i=c*e[(n=t+1)-1],a=s;a--&&(o=c*e[n+1],e[n]-=i+o,a--);n+=2)i=c*e[(n+=2)+1],e[n]-=i+o}}]),r}(X),q=function(e){l(r,e);var t=h(r);function r(){return u(this,r),t.apply(this,arguments)}return c(r,[{key:"filter",value:function(e,t,r){var n,a,i=r>>1;for(n=t|=0,a=i+1;a--;n+=2)e[n]-=e[n-1]+e[n+1]+2>>2;for(n=t+1,a=i;a--;n+=2)e[n]+=e[n-1]+e[n+1]>>1}}]),r}(X)},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){for(var r=0;r>>t&(1<0;if(y<256)h[0]=y,d=1;else{if(!(y>=258)){if(256===y){l=9,o=258,d=0;continue}this.eof=!0,delete this.lzwState;break}if(y=0;t--)h[t]=s[r],r=u[r];else h[d++]=h[0]}if(m&&(u[o]=f,c[o]=c[f]+1,s[o]=h[0],l=++o+i&o+i-1?l:0|Math.min(Math.log(o+i)/.6931471805599453+1,12)),f=y,n<(p+=d)){do{n+=512}while(n{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.PredictorStream=void 0;var a=r(148),i=r(134),o=r(2);function s(e,t){for(var r=0;r15))throw new o.FormatError("Unsupported predictor: ".concat(a));n.readBlock=2===a?n.readBlockTiff:n.readBlockPng,n.str=e,n.dict=e.dict;var s=n.colors=r.get("Colors")||1,c=n.bits=r.get("BPC","BitsPerComponent")||8,f=n.columns=r.get("Columns")||1;return n.pixBytes=s*c+7>>3,n.rowBytes=f*s*c+7>>3,u(n,l(n))}return t=d,(r=[{key:"readBlockTiff",value:function(){var e=this.rowBytes,t=this.bufferLength,r=this.ensureBuffer(t+e),n=this.bits,a=this.colors,i=this.str.getBytes(e);if(this.eof=!i.length,!this.eof){var o,s=0,c=0,u=0,l=0,f=t;if(1===n&&1===a)for(o=0;o>1,h^=h>>2,s=(1&(h^=h>>4))<<7,r[f++]=h}else if(8===n){for(o=0;o>8&255,r[f++]=255&p}}else{var g=new Uint8Array(a+1),v=(1<>u-n)&v,u-=n,c=c<=8&&(r[m++]=c>>l-8&255,l-=8);l>0&&(r[m++]=(c<<8-l)+(s&(1<<8-l)-1))}this.bufferLength+=e}}},{key:"readBlockPng",value:function(){var e=this.rowBytes,t=this.pixBytes,r=this.str.getByte(),n=this.str.getBytes(e);if(this.eof=!n.length,!this.eof){var a=this.bufferLength,i=this.ensureBuffer(a+e),s=i.subarray(a-e,a);0===s.length&&(s=new Uint8Array(e));var c,u,l,f=a;switch(r){case 0:for(c=0;c>1)+n[c];for(;c>1)+n[c]&255,f++;break;case 4:for(c=0;c{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){for(var r=0;r0){var a=this.str.getBytes(n);t.set(a,r),r+=n}}else{n=257-n;var i=e[1];t=this.ensureBuffer(r+n+1);for(var o=0;o{Object.defineProperty(t,"__esModule",{value:!0}),t.Font=t.ErrorFont=void 0;var n=r(2),a=r(164),i=r(167),o=r(169),s=r(168),c=r(166),u=r(170),l=r(171),f=r(172),h=r(173),d=r(174),p=r(175),g=r(145),v=r(176),y=r(135),m=r(139),b=r(177);function w(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||S(e,t)||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 k(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=S(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function S(e,t){if(e){if("string"==typeof e)return x(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?x(e,t):void 0}}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&e.toUnicode.amend(t)}}var _=function(){function e(t,r,n,a,i,o,s,c,u){A(this,e),this.originalCharCode=t,this.fontChar=r,this.unicode=n,this.accent=a,this.width=i,this.vmetric=o,this.operatorListId=s,this.isSpace=c,this.isInFont=u}return F(e,[{key:"category",get:function(){return(0,n.shadow)(this,"category",(0,o.getCharUnicodeCategory)(this.unicode),!0)}},{key:"normalizedUnicode",get:function(){return(0,n.shadow)(this,"normalizedUnicode",(0,o.reverseIfRtl)(e._NormalizedUnicodes[this.unicode]||this.unicode),!0)}}],[{key:"_NormalizedUnicodes",get:function(){return(0,n.shadow)(this,"_NormalizedUnicodes",(0,o.getNormalizedUnicodes)())}}]),e}();function L(e,t){return(e<<8)+t}function R(e,t,r){e[t+1]=r,e[t]=r>>>8}function N(e,t){var r=(e<<8)+t;return 32768&r?r-65536:r}function D(e){return String.fromCharCode(e>>8&255,255&e)}function B(e){return e>32767?e=32767:e<-32768&&(e=-32768),String.fromCharCode(e>>8&255,255&e)}function U(e){var t=e.peekBytes(4);return"ttcf"===(0,n.bytesToString)(t)}function $(e,t){for(var r in t)e[+r]=t[r]}function X(e,t,r){for(var n,a=[],i=0,s=e.length;i2&&void 0!==arguments[2]&&arguments[2];switch(t.length){case 1:return t.charCodeAt(0);case 2:return t.charCodeAt(0)<<8|t.charCodeAt(1)}var a="Unsupported CID string (charCode ".concat(e,'): "').concat(t,'".');if(r)throw new n.FormatError(a);return(0,n.warn)(a),t}function q(e,t,r,a){var i=Object.create(null),o=new Map,s=[],c=new Set,u=0,l=P[u][0],f=l,h=P[u][1];for(var d in e){var p=e[d|=0];if(t(p)){if(f>h){if(++u>=P.length){(0,n.warn)("Ran out of space in font private use area.");break}f=P[u][0],h=P[u][1]}var g=f++;0===p&&(p=r);var v=a.get(d);"string"==typeof v&&(v=v.codePointAt(0)),v&&v=r||n.push({fontCharCode:0|a,glyphId:e[a]});if(t){var i,o=k(t);try{for(o.s();!(i=o.n()).done;){var s=w(i.value,2),c=s[0],u=s[1];u>=r||n.push({fontCharCode:c,glyphId:u})}}catch(e){o.e(e)}finally{o.f()}}0===n.length&&n.push({fontCharCode:0,glyphId:0}),n.sort((function(e,t){return e.fontCharCode-t.fontCharCode}));for(var l=[],f=n.length,h=0;h65535?2:1,l="\\0\\0"+D(u)+"\\0\\0"+(0,n.string32)(4+8*u);for(a=c.length-1;a>=0&&!(c[a][0]<=65535);--a);var f=a+1;c[a][0]<65535&&65535===c[a][1]&&(c[a][1]=65534);var h,d,p,g,y=c[a][1]<65535?1:0,m=f+y,b=v.OpenTypeFileBuilder.getSearchParams(m,2),S="",x="",O="",A="",C="",F=0;for(a=0,i=f;a0&&(x+="ÿÿ",S+="ÿÿ",O+="\\0",A+="\\0\\0");var I="\\0\\0"+D(2*m)+D(b.range)+D(b.entry)+D(b.rangeShift)+x+"\\0\\0"+S+O+A+C,E="",j="";if(u>1){for(l+="\\0\\0\\n"+(0,n.string32)(4+8*u+4+I.length),E="",a=0,i=c.length;a(f|=0)||!u)&&(u=f),l 123 are reserved for internal usage");c|=1<65535&&(l=65535)}else u=0,l=255;var d=e.bbox||[0,0,0,0],p=r.unitsPerEm||1/(e.fontMatrix||n.FONT_IDENTITY_MATRIX)[0],g=e.ascentScaled?1:p/T,v=r.ascent||Math.round(g*(e.ascent||d[3])),y=r.descent||Math.round(g*(e.descent||d[1]));y>0&&e.descent>0&&d[1]<0&&(y=-y);var m=r.yMax||v,b=-r.yMin||-y;return"\\0$ô\\0\\0\\0Š»\\0\\0\\0ŒŠ»\\0\\0ß\\x001\\0\\0\\0\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+(0,n.string32)(a)+(0,n.string32)(i)+(0,n.string32)(s)+(0,n.string32)(c)+"*21*"+D(e.italicAngle?1:0)+D(u||e.firstChar)+D(l||e.lastChar)+D(v)+D(y)+"\\0d"+D(m)+D(b)+"\\0\\0\\0\\0\\0\\0\\0\\0"+D(e.xHeight)+D(e.capHeight)+D(0)+D(u||e.firstChar)+"\\0"}function W(e){var t=Math.floor(e.italicAngle*Math.pow(2,16));return"\\0\\0\\0"+(0,n.string32)(t)+"\\0\\0\\0\\0"+(0,n.string32)(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"}function V(e){return e.replace(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function Y(e,t){t||(t=[[],[]]);var r,n,a,i,o,s=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||V(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],c=[];for(r=0,n=s.length;r=1&&t[3]>=1&&t[3]<=4}(e)?s?(r="CIDFontType0",a="CIDFontType0C"):(r="MMType1"===i?"MMType1":"Type1",a="Type1C"):((0,n.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."),r=i,a=o),[r,a]}(r,a),2);d=m[0],p=m[1],d===this.type&&p===this.subtype||(0,n.info)("Inconsistent font file Type/SubType, expected: "+"".concat(this.type,"/").concat(this.subtype," but found: ").concat(d,"/").concat(p,"."));try{switch(d){case"MMType1":(0,n.info)("MMType1 font ("+t+"), falling back to Type1.");case"Type1":case"CIDFontType0":this.mimetype="font/opentype";var S="Type1C"===p||"CIDFontType0C"===p?new f.CFFFont(r,a):new b.Type1Font(t,r,a);j(a),v=this.convert(t,S,a);break;case"OpenType":case"TrueType":case"CIDFontType2":this.mimetype="font/opentype",v=this.checkAndRepair(t,r,a),this.isOpenType&&(j(a),d="OpenType");break;default:throw new n.FormatError("Font ".concat(d," is not supported"))}}catch(e){return(0,n.warn)(e),void this.fallbackToSystemFont(a)}M(a),this.data=v,this.fontType=(0,i.getFontType)(d,p,a.isStandardFont),this.fontMatrix=a.fontMatrix,this.widths=a.widths,this.defaultWidth=a.defaultWidth,this.toUnicode=a.toUnicode,this.seacMap=a.seacMap}else{for(var x=0;x<256;x++)this.toFontChar[x]=this.differences[x]||a.defaultEncoding[x];this.fontType=n.FontType.TYPE3}}return F(e,[{key:"renderer",get:function(){var e=h.FontRendererFactory.create(this,i.SEAC_ANALYSIS_ENABLED);return(0,n.shadow)(this,"renderer",e)}},{key:"exportData",value:function(){var e,t,r,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?[].concat(I,E):I,a=Object.create(null),i=k(n);try{for(i.s();!(r=i.n()).done;)void 0!==(t=this[e=r.value])&&(a[e]=t)}catch(e){i.e(e)}finally{i.f()}return a}},{key:"fallbackToSystemFont",value:function(e){var t=this;this.missingFile=!0;var r=this.name,a=this.type,f=this.subtype,h=(0,i.normalizeFontName)(r),p=(0,u.getStdFontMap)(),g=(0,u.getNonStdFontMap)(),v=!!p[h],y=!(!g[h]||!p[g[h]]);h=p[h]||g[h]||h;var m=(0,d.getFontBasicMetrics)()[h];m&&(isNaN(this.ascent)&&(this.ascent=m.ascent/T),isNaN(this.descent)&&(this.descent=m.descent/T),isNaN(this.capHeight)&&(this.capHeight=m.capHeight/T)),this.bold=/bold/gi.test(h),this.italic=/oblique|italic/gi.test(h),this.black=/Black/g.test(r);var b=/Narrow/g.test(r);if(this.remeasure=(!v||b)&&Object.keys(this.widths).length>0,(v||y)&&"CIDFontType2"===a&&this.cidEncoding.startsWith("Identity-")){var w=e.cidToGidMap,k=[];if($(k,(0,u.getGlyphMapForStandardFonts)()),/Arial-?Black/i.test(r)?$(k,(0,u.getSupplementalGlyphMapForArialBlack)()):/Calibri/i.test(r)&&$(k,(0,u.getSupplementalGlyphMapForCalibri)()),w){for(var S in k){var x=k[S];void 0!==w[x]&&(k[+S]=w[x])}w.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof l.IdentityToUnicodeMap&&this.toUnicode.forEach((function(e,t){var r=k[e];void 0===w[r]&&(k[+e]=t)}))}this.toUnicode instanceof l.IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){k[+e]=t})),this.toFontChar=k,this.toUnicode=new l.ToUnicodeMap(k)}else if(/Symbol/i.test(h))this.toFontChar=X(c.SymbolSetEncoding,(0,s.getGlyphsUnicode)(),this.differences);else if(/Dingbats/i.test(h))/Wingdings/i.test(r)&&(0,n.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats."),this.toFontChar=X(c.ZapfDingbatsEncoding,(0,s.getDingbatsGlyphsUnicode)(),this.differences);else if(v){var O=X(this.defaultEncoding,(0,s.getGlyphsUnicode)(),this.differences);"CIDFontType2"!==a||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof l.IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){O[+e]=t})),this.toFontChar=O}else{var A=(0,s.getGlyphsUnicode)(),C=[];this.toUnicode.forEach((function(e,r){if(!t.composite){var n=t.differences[e]||t.defaultEncoding[e],a=(0,o.getUnicodeForGlyph)(n,A);-1!==a&&(r=a)}C[+e]=r})),this.composite&&this.toUnicode instanceof l.IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(r)&&$(C,(0,u.getGlyphMapForStandardFonts)()),this.toFontChar=C}M(e),this.loadedName=h.split("-")[0],this.fontType=(0,i.getFontType)(a,f,e.isStandardFont)}},{key:"checkAndRepair",value:function(e,t,r){var o=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function u(e,t){var r=Object.create(null);r["OS/2"]=null,r.cmap=null,r.head=null,r.hhea=null,r.hmtx=null,r.maxp=null,r.name=null,r.post=null;for(var n=0;n>>0,n=e.getInt32()>>>0,a=e.getInt32()>>>0,i=e.pos;e.pos=e.start||0,e.skip(n);var o=e.getBytes(a);return e.pos=i,"head"===t&&(o[8]=o[9]=o[10]=o[11]=0,o[17]|=32),{tag:t,checksum:r,length:a,offset:n,data:o}}function d(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function y(e,t,r,n,a,i){var o={length:0,sizeOfInstructions:0};if(r-t<=12)return o;var s=e.subarray(t,r),c=N(s[0],s[1]);if(c<0)return R(s,0,c=-1),n.set(s,a),o.length=s.length,o;var u,l=10,f=0;for(u=0;us.length?o:!i&&d>0?(n.set(s.subarray(0,h),a),n.set([0,0],a+h),n.set(s.subarray(p,k),a+h+2),k-=d,s.length-k>3&&(k=k+3&-4),o.length=k,o):s.length-k>3?(k=k+3&-4,n.set(s.subarray(0,k),a),o.length=k,o):(n.set(s,a),o.length=s.length,o)}function b(e){var r=(t.start||0)+e.offset;t.pos=r;var n=[[],[]],a=e.length,i=r+a;if(0!==t.getUint16()||a<6)return n;var o,s,c=t.getUint16(),u=t.getUint16(),l=[];for(o=0;oi)){t.pos=d;var p=h.name;if(h.encoding){for(var g="",v=0,y=h.length;v0&&(u+=k-1)}}else(v||m)&&((0,n.warn)("TT: nested FDEFs not allowed"),g=!0),v=!0,f=u,o=h.pop(),t.functionsDefined[o]={data:c,i:u};else if(!v&&!m)if(o=h.at(-1),isNaN(o))(0,n.info)("TT: CALL empty stack (or invalid entry).");else if(t.functionsUsed[o]=!0,o in t.functionsStackDeltas){var S=h.length+t.functionsStackDeltas[o];if(S<0)return(0,n.warn)("TT: CALL invalid functions stack delta."),void(t.hintsValid=!1);h.length=S}else if(o in t.functionsDefined&&!p.includes(o)){if(d.push({data:c,i:u,stackTop:h.length-1}),p.push(o),!(s=t.functionsDefined[o]))return(0,n.warn)("TT: CALL non-existent function"),void(t.hintsValid=!1);c=s.data,u=s.i}if(!v&&!m){var x=0;for(w<=142?x=A[w]:w>=192&&w<=223?x=-1:w>=224&&(x=-2),w>=113&&w<=117&&(a=h.pop(),isNaN(a)||(x=2*-a));x<0&&h.length>0;)h.pop(),x++;for(;x>0;)h.push(NaN),x--}}t.tooComplexToFollowFunctions=g;var O=[c];u>c.length&&O.push(new Uint8Array(u-c.length)),f>l&&((0,n.warn)("TT: complementing a missing function tail"),O.push(new Uint8Array([34,45]))),function(e,t){if(t.length>1){var r,n,a=0;for(r=0,n=t.length;r>>0,o=[],s=0;s>>0);var c={ttcTag:t,majorVersion:r,minorVersion:a,numFonts:i,offsetTable:o};switch(r){case 1:return c;case 2:return c.dsigTag=e.getInt32()>>>0,c.dsigLength=e.getInt32()>>>0,c.dsigOffset=e.getInt32()>>>0,c}throw new n.FormatError("Invalid TrueType Collection majorVersion: ".concat(r,"."))}(e),i=a.numFonts,o=a.offsetTable,s=t.split("+"),c=0;c0||!(r.cMap instanceof g.IdentityCMap));if("OTTO"===w.version&&!T||!S.head||!S.hhea||!S.maxp||!S.post)return O=new m.Stream(S["CFF "].data),x=new f.CFFFont(O,r),j(r),this.convert(e,x,r);delete S.glyf,delete S.loca,delete S.fpgm,delete S.prep,delete S["cvt "],this.isOpenType=!0}if(!S.maxp)throw new n.FormatError('Required "maxp" table is not found');t.pos=(t.start||0)+S.maxp.offset;var I=t.getInt32(),E=t.getUint16();if(r.scaleFactors&&r.scaleFactors.length===E&&P){var M=r.scaleFactors,_=L(S.head.data[50],S.head.data[51]),D=new p.GlyfTable({glyfTable:S.glyf.data,isGlyphLocationsLong:_,locaTable:S.loca.data,numGlyphs:E});D.scale(M);var B=D.write(),$=B.glyf,X=B.loca,V=B.isLocationLong;S.glyf.data=$,S.loca.data=X,V!==!!_&&(S.head.data[50]=0,S.head.data[51]=V?1:0);for(var K=S.hmtx.data,J=0;J>8&255,K[Z+1]=255&Q,R(K,Z+2,Math.round(M[J]*N(K[Z+2],K[Z+3])))}}var ee=E+1,te=!0;ee>65535&&(te=!1,ee=E,(0,n.warn)("Not enough space in glyfs to duplicate first glyph."));var re=0,ne=0;I>=65536&&S.maxp.length>=22&&(t.pos+=8,t.getUint16()>2&&(S.maxp.data[14]=0,S.maxp.data[15]=2),t.pos+=4,re=t.getUint16(),t.pos+=4,ne=t.getUint16()),S.maxp.data[4]=ee>>8,S.maxp.data[5]=255ⅇvar ae=function(e,t,r,a){var i={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};if(e&&C(e,i),t&&C(t,i),e&&function(e,t){if(!e.tooComplexToFollowFunctions){if(e.functionsDefined.length>t)return(0,n.warn)("TT: more functions defined than expected"),void(e.hintsValid=!1);for(var r=0,a=e.functionsUsed.length;rt)return(0,n.warn)("TT: invalid function id: "+r),void(e.hintsValid=!1);if(e.functionsUsed[r]&&!e.functionsDefined[r])return(0,n.warn)("TT: undefined function: "+r),void(e.hintsValid=!1)}}}(i,a),r&&1&r.length){var o=new Uint8Array(r.length+1);o.set(r.data),r.data=o}return i.hintsValid}(S.fpgm,S.prep,S["cvt "],re);if(ae||(delete S.fpgm,delete S.prep,delete S["cvt "]),function(e,t,r,a,i,o){if(t){e.pos=(e.start||0)+t.offset,e.pos+=4,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2;var s=e.getUint16();e.pos+=8,e.pos+=2;var c=e.getUint16();0!==s&&(2&L(a.data[44],a.data[45])||(t.data[22]=0,t.data[23]=0)),c>i&&((0,n.info)("The numOfMetrics (".concat(c,") should not be ")+"greater than the numGlyphs (".concat(i,").")),c=i,t.data[34]=(65280&c)>>8,t.data[35]=255&c);var u=i-c-(r.length-4*c>>1);if(u>0){var l=new Uint8Array(r.length+2*u);l.set(r.data),o&&(l[r.length]=r.data[2],l[r.length+1]=r.data[3]),r.data=l}}else r&&(r.data=null)}(t,S.hhea,S.hmtx,S.head,ee,te),!S.head)throw new n.FormatError('Required "head" table is not found');!function(e,t,r){var a=e.data,i=(a[0]<<24)+(a[1]<<16)+(a[2]<<8)+a[3];i>>16!=1&&((0,n.info)("Attempting to fix invalid version in head table: "+i),a[0]=0,a[1]=1,a[2]=0,a[3]=0);var o=L(a[50],a[51]);if(o<0||o>1){(0,n.info)("Attempting to fix invalid indexToLocFormat in head table: "+o);var s=t+1;if(r===s<<1)a[50]=0,a[51]=0;else{if(r!==s<<2)throw new n.FormatError("Could not fix indexToLocFormat: "+o);a[50]=0,a[51]=1}}}(S.head,E,P?S.loca.length:0);var ie=Object.create(null);if(P){var oe=L(S.head.data[50],S.head.data[51]),se=function(e,t,r,n,a,i,o){var s,c,u;n?(s=4,c=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]},u=function(e,t,r){e[t]=r>>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r}):(s=2,c=function(e,t){return e[t]<<9|e[t+1]<<1},u=function(e,t,r){e[t]=r>>9&255,e[t+1]=r>>1&255});var l=i?r+1:r,f=s*(1+l),h=new Uint8Array(f);h.set(e.data.subarray(0,f)),e.data=h;var d,p,g=t.data,v=g.length,m=new Uint8Array(v),b=[];for(d=0,p=0;dv&&(w=v),b.push({index:d,offset:w,endOffset:0})}for(b.sort((function(e,t){return e.offset-t.offset})),d=0;do&&(o=F.sizeOfInstructions),u(h,p,C+=P)}if(0===C){var T=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(d=0,p=s;dI+C?t.data=m.subarray(0,I+C):(t.data=new Uint8Array(I+C),t.data.set(m.subarray(0,C))),t.data.set(m.subarray(0,I),C),u(e.data,h.length-s,C+I)}else t.data=m.subarray(0,C);return{missingGlyphs:A,maxSizeOfInstructions:o}}(S.loca,S.glyf,E,oe,ae,te,ne);ie=se.missingGlyphs,I>=65536&&S.maxp.length>=22&&(S.maxp.data[26]=se.maxSizeOfInstructions>>8,S.maxp.data[27]=255&se.maxSizeOfInstructions)}if(!S.hhea)throw new n.FormatError('Required "hhea" table is not found');0===S.hhea.data[10]&&0===S.hhea.data[11]&&(S.hhea.data[10]=255,S.hhea.data[11]=255);var ce={unitsPerEm:L(S.head.data[18],S.head.data[19]),yMax:L(S.head.data[42],S.head.data[43]),yMin:N(S.head.data[38],S.head.data[39]),ascent:N(S.hhea.data[4],S.hhea.data[5]),descent:N(S.hhea.data[6],S.hhea.data[7]),lineGap:N(S.hhea.data[8],S.hhea.data[9])};this.ascent=ce.ascent/ce.unitsPerEm,this.descent=ce.descent/ce.unitsPerEm,this.lineGap=ce.lineGap/ce.unitsPerEm,this.cssFontInfo&&this.cssFontInfo.lineHeight?(this.lineHeight=this.cssFontInfo.metrics.lineHeight,this.lineGap=this.cssFontInfo.metrics.lineGap):this.lineHeight=this.ascent-this.descent+this.lineGap,S.post&&function(e,r,a){var o=(t.start||0)+e.offset;t.pos=o;var s,c=o+e.length,u=t.getInt32();t.skip(28);var l,f=!0;switch(u){case 65536:s=i.MacStandardGlyphOrdering;break;case 131072:var h=t.getUint16();if(h!==a){f=!1;break}var d=[];for(l=0;l=32768){f=!1;break}d.push(p)}if(!f)break;for(var g=[],v=[];t.pos65535)throw new n.FormatError("Max size of CID is 65,535");var r=-1;he?r=t:void 0!==fe[t]&&(r=fe[t]),r>=0&&r>>0,p=!1;if(!s||s.platformId!==f||s.encodingId!==h){if(0!==f||0!==h&&1!==h&&3!==h)if(1===f&&0===h)p=!0;else if(3!==f||1!==h||!a&&s){if(r&&3===f&&0===h){p=!0;var g=!0;if(l>3;x.push(C),O=Math.max(C,O)}for(var F=[],P=0;P<=O;P++)F.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:N(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(var T=0;T<256;T++)if(0===x[T])t.pos=F[0].idRangePos+2*T,m=t.getUint16(),k.push({charCode:T,glyphId:m});else{var I=F[x[T]];for(y=0;y>1;t.skip(6);var M,_=[];for(M=0;M>1)-(j-M),i.offsetIndex=R,D=Math.max(D,R+i.end-i.start+1)):i.offsetIndex=-1}var U=[];for(y=0;y>>0;for(y=0;y>>0,V=t.getInt32()>>>0,Y=t.getInt32()>>>0,K=W;K<=V;K++)k.push({charCode:K,glyphId:Y++})}k.sort((function(e,t){return e.charCode-t.charCode}));for(var J=1;J=61440&&_e<=61695&&(_e&=255),ue[_e]=Me.glyphId}}catch(e){je.e(e)}finally{je.f()}}if(r.glyphNames&&(ye.length||this.differences.length))for(var Le=0;Le<256;++Le)if(me||void 0===ue[Le]){var Re=this.differences[Le]||ye[Le];if(Re){var Ne=r.glyphNames.indexOf(Re);Ne>0&&le(Ne)&&(ue[Le]=Ne)}}}0===ue.length&&(ue[0]=0);var De=ee-1;if(te||(De=0),!r.cssFontInfo){var Be=q(ue,le,De,this.toUnicode);this.toFontChar=Be.toFontChar,S.cmap={tag:"cmap",data:G(Be.charCodeToGlyphId,Be.toUnicodeExtraMap,ee)},S["OS/2"]&&function(e,t){t.pos=(t.start||0)+e.offset;var r=t.getUint16();t.skip(60);var n=t.getUint16();return!(r<4&&768&n||t.getUint16()>t.getUint16()||(t.skip(6),0===t.getUint16()||(e.data[8]=e.data[9]=0,0)))}(S["OS/2"],t)||(S["OS/2"]={tag:"OS/2",data:z(r,Be.charCodeToGlyphId,ce)})}if(!P)try{O=new m.Stream(S["CFF "].data),(x=new a.CFFParser(O,r,i.SEAC_ANALYSIS_ENABLED).parse()).duplicateFirstGlyph();var Ue=new a.CFFCompiler(x);S["CFF "].data=Ue.compile()}catch(e){(0,n.warn)("Failed to compile font "+r.loadedName)}if(S.name){var $e=b(S.name);S.name.data=Y(e,$e),this.psName=$e[0][6]||null}else S.name={tag:"name",data:Y(this.name)};var Xe=new v.OpenTypeFileBuilder(w.version);for(var He in S)Xe.addTable(He,S[He].data);return Xe.toArray()}},{key:"convert",value:function(e,t,r){r.fixedPitch=!1,r.builtInEncoding&&function(e,t){if(!e.isInternalFont&&!(e.hasIncludedToUnicodeMap||t===e.defaultEncoding||e.toUnicode instanceof l.IdentityToUnicodeMap)){var r=[],n=(0,s.getGlyphsUnicode)();for(var a in t)if(!e.hasEncoding||0!==e.differences.length&&void 0===e.differences[a]){var i=t[a],c=(0,o.getUnicodeForGlyph)(i,n);-1!==c&&(r[a]=String.fromCharCode(c))}r.length>0&&e.toUnicode.amend(r)}}(r,r.builtInEncoding);var a=1;t instanceof f.CFFFont&&(a=t.numGlyphs-1);var u=t.getGlyphMapping(r),h=null,d=u,p=null;r.cssFontInfo||(h=q(u,t.hasGlyphId.bind(t),a,this.toUnicode),this.toFontChar=h.toFontChar,d=h.charCodeToGlyphId,p=h.toUnicodeExtraMap);var g=t.numGlyphs;function y(e,t){var r=null;for(var n in e)t===e[n]&&(r||(r=[]),r.push(0|n));return r}function m(e,t){for(var r in e)if(t===e[r])return 0|r;return h.charCodeToGlyphId[h.nextAvailableFontCharCode]=t,h.nextAvailableFontCharCode++}var b=t.seacs;if(h&&i.SEAC_ANALYSIS_ENABLED&&b&&b.length){var w=r.fontMatrix||n.FONT_IDENTITY_MATRIX,S=t.getCharset(),x=Object.create(null);for(var O in b){var A=b[O|=0],C=c.StandardEncoding[A[2]],F=c.StandardEncoding[A[3]],P=S.indexOf(C),T=S.indexOf(F);if(!(P<0||T<0)){var I={x:A[0]*w[0]+A[1]*w[2]+w[4],y:A[0]*w[1]+A[1]*w[3]+w[5]},E=y(u,O);if(E){var j,M=k(E);try{for(M.s();!(j=M.n()).done;){var _=j.value,L=h.charCodeToGlyphId,R=m(L,P),N=m(L,T);x[_]={baseFontCharCode:R,accentFontCharCode:N,accentOffset:I}}}catch(e){M.e(e)}finally{M.f()}}}}r.seacMap=x}var U=1/(r.fontMatrix||n.FONT_IDENTITY_MATRIX)[0],$=new v.OpenTypeFileBuilder("OTTO");return $.addTable("CFF ",t.data),$.addTable("OS/2",z(r,d)),$.addTable("cmap",G(d,p,g)),$.addTable("head","\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0_<õ\\0\\0"+B(U)+"\\0\\0\\0\\0ž\\v~'\\0\\0\\0\\0ž\\v~'\\0\\0"+B(r.descent)+"ÿ"+B(r.ascent)+D(r.italicAngle?2:0)+"\\0\\0\\0\\0\\0\\0\\0"),$.addTable("hhea","\\0\\0\\0"+B(r.ascent)+B(r.descent)+"\\0\\0ÿÿ\\0\\0\\0\\0\\0\\0"+B(r.capHeight)+B(Math.tan(r.italicAngle)*r.xHeight)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"+D(g)),$.addTable("hmtx",function(){for(var e=t.charstrings,r=t.cff?t.cff.widths:null,n="\\0\\0\\0\\0",a=1,i=g;a1&&void 0!==arguments[1]&&arguments[1],s=this._glyphCache[e];if(s&&s.isSpace===i)return s;var c=e;this.cMap&&this.cMap.contains(e)&&"string"==typeof(c=this.cMap.lookup(e))&&(c=H(e,c)),"number"!=typeof(r=this.widths[c])&&(r=this.defaultWidth);var u=this.vmetrics&&this.vmetrics[c],l=this.toUnicode.get(e)||e;"number"==typeof l&&(l=String.fromCharCode(l));var f=void 0!==this.toFontChar[e];if(t=this.toFontChar[e]||e,this.missingFile){var h=this.differences[e]||this.defaultEncoding[e];".notdef"!==h&&""!==h||"Type1"!==this.type||(t=32),t=(0,o.mapSpecialUnicodeValues)(t)}this.isType3Font&&(a=t);var d=null;if(this.seacMap&&this.seacMap[e]){f=!0;var p=this.seacMap[e];t=p.baseFontCharCode,d={fontChar:String.fromCodePoint(p.accentFontCharCode),offset:p.accentOffset}}var g="";return"number"==typeof t&&(t<=1114111?g=String.fromCodePoint(t):(0,n.warn)("charToGlyph - invalid fontCharCode: ".concat(t))),s=new _(e,g,l,d,r,u,a,i,f),this._glyphCache[e]=s}},{key:"charsToGlyphs",value:function(e){var t=this._charsCache[e];if(t)return t;if(t=[],this.cMap)for(var r=Object.create(null),n=e.length,a=0;a55295&&(c<57344||c>65533)&&o++,this.toUnicode){var u=i(c);if(-1!==u){a()&&(r.push(n.join("")),n.length=0);for(var f=(this.cMap?this.cMap.getCharCodeLength(u):1)-1;f>=0;f--)n.push(String.fromCharCode(u>>8*f&255));continue}}a()||(r.push(n.join("")),n.length=0),n.push(String.fromCodePoint(c))}return r.push(n.join("")),r}}]),e}();t.Font=K;var J=function(){function e(t){A(this,e),this.error=t,this.loadedName="g_font_error",this.missingFile=!0}return F(e,[{key:"charsToGlyphs",value:function(){return[]}},{key:"encodeString",value:function(e){return[e]}},{key:"exportData",value:function(){return{error:this.error}}}]),e}();t.ErrorFont=J},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CFFTopDict=t.CFFStrings=t.CFFStandardStrings=t.CFFPrivateDict=t.CFFParser=t.CFFIndex=t.CFFHeader=t.CFFFDSelect=t.CFFCompiler=t.CFFCharset=t.CFF=void 0;var n=r(2),a=r(165),i=r(166);function o(e){return function(e){if(Array.isArray(e))return p(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||d(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}function u(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=l(e);if(t){var a=l(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===f(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function l(e){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},l(e)}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function d(e,t){if(e){if("string"==typeof e)return p(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=t)throw new n.FormatError("Invalid CFF header");0!==r&&((0,n.info)("cff data is shifted"),e=e.subarray(r),this.bytes=e);var a=e[0],i=e[1],o=e[2],s=e[3];return{obj:new x(a,i,o,s),endPos:o}}},{key:"parseDict",value:function(e){var t=0;var r,a=[],i=[];t=0;for(var o=e.length;t>4,s=15&i;if(15===o)break;if(r+=n[o],15===s)break;r+=n[s]}return parseFloat(r)}():28===r?r=((r=e[t++])<<24|e[t++]<<16)>>16:29===r?r=(r=(r=(r=e[t++])<<8|e[t++])<<8|e[t++])<<8|e[t++]:r>=32&&r<=246?r-139:r>=247&&r<=250?256*(r-247)+e[t++]+108:r>=251&&r<=254?-256*(r-251)-e[t++]-108:((0,n.warn)('CFFParser_parseDict: "'+r+'" is a reserved command.'),NaN)))}return i}},{key:"parseIndex",value:function(e){var t,r,n=new A,a=this.bytes,i=a[e++]<<8|a[e++],o=[],s=e;if(0!==i){var c=a[e++],u=e+(i+1)*c-1;for(t=0,r=i+1;t10)return!1;for(var i=e.stackSize,o=e.stack,s=t.length,c=0;c>16,c+=2,i++;else if(14===u){if(i>=4&&(i-=4,this.seacAnalysisEnabled))return e.seac=o.slice(i,i+4),!1;l=b[u]}else if(u>=32&&u<=246)o[i]=u-139,i++;else if(u>=247&&u<=254)o[i]=u<251?(u-247<<8)+t[c]+108:-(u-251<<8)-t[c]-108,c++,i++;else if(255===u)o[i]=(t[c]<<24|t[c+1]<<16|t[c+2]<<8|t[c+3])/65536,c+=4,i++;else if(19===u||20===u)e.hints+=i>>1,c+=e.hints+7>>3,i%=2,l=b[u];else{if(10===u||29===u){var h=void 0;if(!(h=10===u?r:a))return l=b[u],(0,n.warn)("Missing subrsIndex for "+l.id),!1;var d=32768;h.count<1240?d=107:h.count<33900&&(d=1131);var p=o[--i]+d;if(p<0||p>=h.count||isNaN(p))return l=b[u],(0,n.warn)("Out of bounds subrIndex for "+l.id),!1;if(e.stackSize=i,e.callDepth++,!this.parseCharString(e,h.get(p),r,a))return!1;e.callDepth--,i=e.stackSize;continue}if(11===u)return e.stackSize=i,!0;if(0===u&&c===t.length)t[c-1]=14,l=b[14];else{if(9===u){t.copyWithin(c-1,c,-1),c-=1,s-=1;continue}l=b[u]}}if(l){if(l.stem&&(e.hints+=i>>1,3===u||23===u?e.hasVStems=!0:!e.hasVStems||1!==u&&18!==u||((0,n.warn)("CFF stem hints are in wrong order"),t[c-1]=1===u?3:23)),"min"in l&&!e.undefStack&&i=2&&l.stem?i%=2:i>1&&(0,n.warn)("Found too many parameters for stack-clearing command"),i>0&&(e.width=o[i-1])),"stackDelta"in l?("stackFn"in l&&l.stackFn(o,i),i+=l.stackDelta):l.stackClearing?i=0:l.resetStack?(i=0,e.undefStack=!1):l.undefStack&&(i=0,e.undefStack=!0,e.firstStackClearing=!1)}}return s=o.length&&((0,n.warn)("Invalid fd index for glyph index."),p=!1),p&&(g=(v=o[y].privateDict).subrsIndex)}else r&&(g=r);if(p&&(p=this.parseCharString(d,h,g,a)),null!==d.width){var m=v.getByName("nominalWidthX");u[f]=m+d.width}else{var b=v.getByName("defaultWidthX");u[f]=b}null!==d.seac&&(c[f]=d.seac),p||t.set(f,new Uint8Array([14]))}return{charStrings:t,seacs:c,widths:u}}},{key:"emptyPrivateDictionary",value:function(e){var t=this.createDict(I,[],e.strings);e.setByKey(18,[0,0]),e.privateDict=t}},{key:"parsePrivateDict",value:function(e){if(e.hasName("Private")){var t=e.getByName("Private");if(Array.isArray(t)&&2===t.length){var r=t[0],n=t[1];if(0===r||n>=this.bytes.length)this.emptyPrivateDictionary(e);else{var a=n+r,i=this.bytes.subarray(n,a),o=this.parseDict(i),s=this.createDict(I,o,e.strings);if(e.privateDict=s,s.getByName("Subrs")){var c=s.getByName("Subrs"),u=n+c;if(0===c||u>=this.bytes.length)this.emptyPrivateDictionary(e);else{var l=this.parseIndex(u);s.subrsIndex=l.obj}}}}else e.removeByName("Private")}else this.emptyPrivateDictionary(e)}},{key:"parseCharsets",value:function(e,t,r,i){if(0===e)return new j(!0,E.ISO_ADOBE,a.ISOAdobeCharset);if(1===e)return new j(!0,E.EXPERT,a.ExpertCharset);if(2===e)return new j(!0,E.EXPERT_SUBSET,a.ExpertSubsetCharset);var o,s,c,u=this.bytes,l=e,f=u[e++],h=[i?0:".notdef"];switch(t-=1,f){case 0:for(c=0;c=65535)(0,n.warn)("Not enough space in charstrings to duplicate first glyph.");else{var e=this.charStrings.get(0);this.charStrings.add(e),this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}}},{key:"hasGlyphId",value:function(e){return!(e<0||e>=this.charStrings.count)&&this.charStrings.get(e).length>0}}]),e}();t.CFF=S;var x=y((function e(t,r,n,a){g(this,e),this.major=t,this.minor=r,this.hdrSize=n,this.offSize=a}));t.CFFHeader=x;var O=function(){function e(){g(this,e),this.strings=[]}return y(e,[{key:"get",value:function(e){return e>=0&&e<=390?m[e]:e-391<=this.strings.length?this.strings[e-391]:m[0]}},{key:"getSID",value:function(e){var t=m.indexOf(e);return-1!==t?t:-1!==(t=this.strings.indexOf(e))?t+391:-1}},{key:"add",value:function(e){this.strings.push(e)}},{key:"count",get:function(){return this.strings.length}}]),e}();t.CFFStrings=O;var A=function(){function e(){g(this,e),this.objects=[],this.length=0}return y(e,[{key:"add",value:function(e){this.length+=e.length,this.objects.push(e)}},{key:"set",value:function(e,t){this.length+=t.length-this.objects[e].length,this.objects[e]=t}},{key:"get",value:function(e){return this.objects[e]}},{key:"count",get:function(){return this.objects.length}}]),e}();t.CFFIndex=A;var C=function(){function e(t,r){g(this,e),this.keyToNameMap=t.keyToNameMap,this.nameToKeyMap=t.nameToKeyMap,this.defaults=t.defaults,this.types=t.types,this.opcodes=t.opcodes,this.order=t.order,this.strings=r,this.values=Object.create(null)}return y(e,[{key:"setByKey",value:function(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;var r,a=h(t);try{for(a.s();!(r=a.n()).done;){var i=r.value;if(isNaN(i))return(0,n.warn)('Invalid CFFDict value: "'.concat(t,'" for key "').concat(e,'".')),!0}}catch(e){a.e(e)}finally{a.f()}var o=this.types[e];return"num"!==o&&"sid"!==o&&"offset"!==o||(t=t[0]),this.values[e]=t,!0}},{key:"setByName",value:function(e,t){if(!(e in this.nameToKeyMap))throw new n.FormatError('Invalid dictionary name "'.concat(e,'"'));this.values[this.nameToKeyMap[e]]=t}},{key:"hasName",value:function(e){return this.nameToKeyMap[e]in this.values}},{key:"getByName",value:function(e){if(!(e in this.nameToKeyMap))throw new n.FormatError("Invalid dictionary name ".concat(e,'"'));var t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}},{key:"removeByName",value:function(e){delete this.values[this.nameToKeyMap[e]]}}],[{key:"createTables",value:function(e){var t,r={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]},n=h(e);try{for(n.s();!(t=n.n()).done;){var a=t.value,i=Array.isArray(a[0])?(a[0][0]<<8)+a[0][1]:a[0];r.keyToNameMap[i]=a[1],r.nameToKeyMap[a[1]]=i,r.types[i]=a[2],r.defaults[i]=a[3],r.opcodes[i]=Array.isArray(a[0])?a[0]:[a[0]],r.order.push(i)}}catch(e){n.e(e)}finally{n.f()}return r}}]),e}(),F=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]],P=function(e){s(r,e);var t=u(r);function r(e){var n;return g(this,r),(n=t.call(this,r.tables,e)).privateDict=null,n}return y(r,null,[{key:"tables",get:function(){return(0,n.shadow)(this,"tables",this.createTables(F))}}]),r}(C);t.CFFTopDict=P;var T=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]],I=function(e){s(r,e);var t=u(r);function r(e){var n;return g(this,r),(n=t.call(this,r.tables,e)).subrsIndex=null,n}return y(r,null,[{key:"tables",get:function(){return(0,n.shadow)(this,"tables",this.createTables(T))}}]),r}(C);t.CFFPrivateDict=I;var E={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},j=y((function e(t,r,n,a){g(this,e),this.predefined=t,this.format=r,this.charset=n,this.raw=a}));t.CFFCharset=j;var M=y((function e(t,r,n,a){g(this,e),this.predefined=t,this.format=r,this.encoding=n,this.raw=a})),_=function(){function e(t,r){g(this,e),this.format=t,this.fdSelect=r}return y(e,[{key:"getFDIndex",value:function(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}]),e}();t.CFFFDSelect=_;var L=function(){function e(){g(this,e),this.offsets=Object.create(null)}return y(e,[{key:"isTracking",value:function(e){return e in this.offsets}},{key:"track",value:function(e,t){if(e in this.offsets)throw new n.FormatError("Already tracking location of ".concat(e));this.offsets[e]=t}},{key:"offset",value:function(e){for(var t in this.offsets)this.offsets[t]+=e}},{key:"setEntryLocation",value:function(e,t,r){if(!(e in this.offsets))throw new n.FormatError("Not tracking location of ".concat(e));for(var a=r.data,i=this.offsets[e],o=0,s=t.length;o>24&255,a[l]=d>>16&255,a[f]=d>>8&255,a[h]=255&d}}}]),e}(),R=function(){function e(t){g(this,e),this.cff=t}return y(e,[{key:"compile",value:function(){var e=this.cff,t={data:[],length:0,add:function(e){this.data=this.data.concat(e),this.length=this.data.length}},r=this.compileHeader(e.header);t.add(r);var a=this.compileNameIndex(e.names);if(t.add(a),e.isCIDFont&&e.topDict.hasName("FontMatrix")){var i=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");var o,s=h(e.fdArray);try{for(s.s();!(o=s.n()).done;){var c=o.value,u=i.slice(0);c.hasName("FontMatrix")&&(u=n.Util.transform(u,c.getByName("FontMatrix"))),c.setByName("FontMatrix",u)}}catch(e){s.e(e)}finally{s.f()}}var l=e.topDict.getByName("XUID");l&&l.length>16&&e.topDict.removeByName("XUID"),e.topDict.setByName("charset",0);var f=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(f.output);var d=f.trackers[0],p=this.compileStringIndex(e.strings.strings);t.add(p);var g=this.compileIndex(e.globalSubrIndex);if(t.add(g),e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)d.setEntryLocation("Encoding",[e.encoding.format],t);else{var v=this.compileEncoding(e.encoding);d.setEntryLocation("Encoding",[t.length],t),t.add(v)}var y=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);d.setEntryLocation("charset",[t.length],t),t.add(y);var m=this.compileCharStrings(e.charStrings);if(d.setEntryLocation("CharStrings",[t.length],t),t.add(m),e.isCIDFont){d.setEntryLocation("FDSelect",[t.length],t);var b=this.compileFDSelect(e.fdSelect);t.add(b),f=this.compileTopDicts(e.fdArray,t.length,!0),d.setEntryLocation("FDArray",[t.length],t),t.add(f.output);var w=f.trackers;this.compilePrivateDicts(e.fdArray,w,t)}return this.compilePrivateDicts([e.topDict],[d],t),t.add([0]),t.data}},{key:"encodeNumber",value:function(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}},{key:"encodeFloat",value:function(t){var r=t.toString(),n=e.EncodeFloatRegExp.exec(r);if(n){var a=parseFloat("1e"+((n[2]?+n[2]:0)+n[1].length));r=(Math.round(t*a)/a).toString()}var i,o,s="";for(i=0,o=r.length;i=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e]}},{key:"compileHeader",value:function(e){return[e.major,e.minor,4,e.offSize]}},{key:"compileNameIndex",value:function(e){var t,r=new A,a=h(e);try{for(a.s();!(t=a.n()).done;){for(var i=t.value,o=Math.min(i.length,127),s=new Array(o),c=0;c"~"||"["===u||"]"===u||"("===u||")"===u||"{"===u||"}"===u||"<"===u||">"===u||"/"===u||"%"===u)&&(u="_"),s[c]=u}""===(s=s.join(""))&&(s="Bad_Font_Name"),r.add((0,n.stringToBytes)(s))}}catch(e){a.e(e)}finally{a.f()}return this.compileIndex(r)}},{key:"compileTopDicts",value:function(e,t,r){var n,a=[],i=new A,o=h(e);try{for(o.s();!(n=o.n()).done;){var s=n.value;r&&(s.removeByName("CIDFontVersion"),s.removeByName("CIDFontRevision"),s.removeByName("CIDFontType"),s.removeByName("CIDCount"),s.removeByName("UIDBase"));var c=new L,u=this.compileDict(s,c);a.push(c),i.add(u),c.offset(t)}}catch(e){o.e(e)}finally{o.f()}return{trackers:a,output:i=this.compileIndex(i,a)}}},{key:"compilePrivateDicts",value:function(e,t,r){for(var a=0,i=e.length;a>8&255,255&o]);else{(i=new Uint8Array(1+2*o))[0]=0;for(var s=0,c=e.charset.length,u=!1,l=1;l>8&255,i[l+1]=255&f}}return this.compileTypedArray(i)}},{key:"compileEncoding",value:function(e){return this.compileTypedArray(e.raw)}},{key:"compileFDSelect",value:function(e){var t,r,n=e.format;switch(n){case 0:for((t=new Uint8Array(1+e.fdSelect.length))[0]=n,r=0;r>8&255,255&r,o),a=o)}var s=(i.length-3)/3;i[1]=s>>8&255,i[2]=255&s,i.push(r>>8&255,255&r),t=new Uint8Array(i)}return this.compileTypedArray(t)}},{key:"compileTypedArray",value:function(e){for(var t=[],r=0,n=e.length;r1&&void 0!==arguments[1]?arguments[1]:[],r=e.objects,n=r.length;if(0===n)return[0,0];var a,i,s=[n>>8&255,255&n],c=1;for(a=0;a>8&255,255&u):3===i?s.push(u>>16&255,u>>8&255,255&u):s.push(u>>>24&255,u>>16&255,u>>8&255,255&u),r[a]&&(u+=r[a].length);for(a=0;a{Object.defineProperty(t,"__esModule",{value:!0}),t.ISOAdobeCharset=t.ExpertSubsetCharset=t.ExpertCharset=void 0,t.ISOAdobeCharset=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],t.ExpertCharset=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],t.ExpertSubsetCharset=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"]},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ZapfDingbatsEncoding=t.WinAnsiEncoding=t.SymbolSetEncoding=t.StandardEncoding=t.MacRomanEncoding=t.ExpertEncoding=void 0,t.getEncoding=function(e){switch(e){case"WinAnsiEncoding":return o;case"StandardEncoding":return i;case"MacRomanEncoding":return a;case"SymbolSetEncoding":return s;case"ZapfDingbatsEncoding":return c;case"ExpertEncoding":return r;case"MacExpertEncoding":return n;default:return null}};var r=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"];t.ExpertEncoding=r;var n=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],a=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"];t.MacRomanEncoding=a;var i=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""];t.StandardEncoding=i;var o=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"];t.WinAnsiEncoding=o;var s=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""];t.SymbolSetEncoding=s;var c=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];t.ZapfDingbatsEncoding=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SEAC_ANALYSIS_ENABLED=t.MacStandardGlyphOrdering=t.FontFlags=void 0,t.getFontType=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];switch(e){case"Type1":return r?n.FontType.TYPE1STANDARD:"Type1C"===t?n.FontType.TYPE1C:n.FontType.TYPE1;case"CIDFontType0":return"CIDFontType0C"===t?n.FontType.CIDFONTTYPE0C:n.FontType.CIDFONTTYPE0;case"OpenType":return n.FontType.OPENTYPE;case"TrueType":return n.FontType.TRUETYPE;case"CIDFontType2":return n.FontType.CIDFONTTYPE2;case"MMType1":return n.FontType.MMTYPE1;case"Type0":return n.FontType.TYPE0;default:return n.FontType.UNKNOWN}},t.normalizeFontName=function(e){return e.replace(/[,_]/g,"-").replace(/\\s/g,"")},t.recoverGlyphName=c,t.type1FontGlyphMapping=function(e,t,r){var n,o,u,l=Object.create(null),f=!!(e.flags&s.Symbolic);if(e.isInternalFont)for(u=t,o=0;o=0?n:0;else if(e.baseEncodingName)for(u=(0,a.getEncoding)(e.baseEncodingName),o=0;o=0?n:0;else if(f)for(o in t)l[o]=t[o];else for(u=a.StandardEncoding,o=0;o=0?n:0;var h,d=e.differences;if(d)for(o in d){var p=d[o];if(-1===(n=r.indexOf(p))){h||(h=(0,i.getGlyphsUnicode)());var g=c(p,h);g!==p&&(n=r.indexOf(g))}l[o]=n>=0?n:0}return l};var n=r(2),a=r(166),i=r(168),o=r(169);t.SEAC_ANALYSIS_ENABLED=!0;var s={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144};function c(e,t){if(void 0!==t[e])return e;var r=(0,o.getUnicodeForGlyph)(e,t);if(-1!==r)for(var a in t)if(t[a]===r)return a;return(0,n.info)("Unable to recover a standard glyph name for: "+e),e}t.FontFlags=s,t.MacStandardGlyphOrdering=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"]},(e,t,r)=>{r.r(t),r.d(t,{getDingbatsGlyphsUnicode:()=>i,getGlyphsUnicode:()=>a});var n=r(135);const a=(0,n.getArrayLookupTableFactory)((function(){return["A",65,"AE",198,"AEacute",508,"AEmacron",482,"AEsmall",63462,"Aacute",193,"Aacutesmall",63457,"Abreve",258,"Abreveacute",7854,"Abrevecyrillic",1232,"Abrevedotbelow",7862,"Abrevegrave",7856,"Abrevehookabove",7858,"Abrevetilde",7860,"Acaron",461,"Acircle",9398,"Acircumflex",194,"Acircumflexacute",7844,"Acircumflexdotbelow",7852,"Acircumflexgrave",7846,"Acircumflexhookabove",7848,"Acircumflexsmall",63458,"Acircumflextilde",7850,"Acute",63177,"Acutesmall",63412,"Acyrillic",1040,"Adblgrave",512,"Adieresis",196,"Adieresiscyrillic",1234,"Adieresismacron",478,"Adieresissmall",63460,"Adotbelow",7840,"Adotmacron",480,"Agrave",192,"Agravesmall",63456,"Ahookabove",7842,"Aiecyrillic",1236,"Ainvertedbreve",514,"Alpha",913,"Alphatonos",902,"Amacron",256,"Amonospace",65313,"Aogonek",260,"Aring",197,"Aringacute",506,"Aringbelow",7680,"Aringsmall",63461,"Asmall",63329,"Atilde",195,"Atildesmall",63459,"Aybarmenian",1329,"B",66,"Bcircle",9399,"Bdotaccent",7682,"Bdotbelow",7684,"Becyrillic",1041,"Benarmenian",1330,"Beta",914,"Bhook",385,"Blinebelow",7686,"Bmonospace",65314,"Brevesmall",63220,"Bsmall",63330,"Btopbar",386,"C",67,"Caarmenian",1342,"Cacute",262,"Caron",63178,"Caronsmall",63221,"Ccaron",268,"Ccedilla",199,"Ccedillaacute",7688,"Ccedillasmall",63463,"Ccircle",9400,"Ccircumflex",264,"Cdot",266,"Cdotaccent",266,"Cedillasmall",63416,"Chaarmenian",1353,"Cheabkhasiancyrillic",1212,"Checyrillic",1063,"Chedescenderabkhasiancyrillic",1214,"Chedescendercyrillic",1206,"Chedieresiscyrillic",1268,"Cheharmenian",1347,"Chekhakassiancyrillic",1227,"Cheverticalstrokecyrillic",1208,"Chi",935,"Chook",391,"Circumflexsmall",63222,"Cmonospace",65315,"Coarmenian",1361,"Csmall",63331,"D",68,"DZ",497,"DZcaron",452,"Daarmenian",1332,"Dafrican",393,"Dcaron",270,"Dcedilla",7696,"Dcircle",9401,"Dcircumflexbelow",7698,"Dcroat",272,"Ddotaccent",7690,"Ddotbelow",7692,"Decyrillic",1044,"Deicoptic",1006,"Delta",8710,"Deltagreek",916,"Dhook",394,"Dieresis",63179,"DieresisAcute",63180,"DieresisGrave",63181,"Dieresissmall",63400,"Digammagreek",988,"Djecyrillic",1026,"Dlinebelow",7694,"Dmonospace",65316,"Dotaccentsmall",63223,"Dslash",272,"Dsmall",63332,"Dtopbar",395,"Dz",498,"Dzcaron",453,"Dzeabkhasiancyrillic",1248,"Dzecyrillic",1029,"Dzhecyrillic",1039,"E",69,"Eacute",201,"Eacutesmall",63465,"Ebreve",276,"Ecaron",282,"Ecedillabreve",7708,"Echarmenian",1333,"Ecircle",9402,"Ecircumflex",202,"Ecircumflexacute",7870,"Ecircumflexbelow",7704,"Ecircumflexdotbelow",7878,"Ecircumflexgrave",7872,"Ecircumflexhookabove",7874,"Ecircumflexsmall",63466,"Ecircumflextilde",7876,"Ecyrillic",1028,"Edblgrave",516,"Edieresis",203,"Edieresissmall",63467,"Edot",278,"Edotaccent",278,"Edotbelow",7864,"Efcyrillic",1060,"Egrave",200,"Egravesmall",63464,"Eharmenian",1335,"Ehookabove",7866,"Eightroman",8551,"Einvertedbreve",518,"Eiotifiedcyrillic",1124,"Elcyrillic",1051,"Elevenroman",8554,"Emacron",274,"Emacronacute",7702,"Emacrongrave",7700,"Emcyrillic",1052,"Emonospace",65317,"Encyrillic",1053,"Endescendercyrillic",1186,"Eng",330,"Enghecyrillic",1188,"Enhookcyrillic",1223,"Eogonek",280,"Eopen",400,"Epsilon",917,"Epsilontonos",904,"Ercyrillic",1056,"Ereversed",398,"Ereversedcyrillic",1069,"Escyrillic",1057,"Esdescendercyrillic",1194,"Esh",425,"Esmall",63333,"Eta",919,"Etarmenian",1336,"Etatonos",905,"Eth",208,"Ethsmall",63472,"Etilde",7868,"Etildebelow",7706,"Euro",8364,"Ezh",439,"Ezhcaron",494,"Ezhreversed",440,"F",70,"Fcircle",9403,"Fdotaccent",7710,"Feharmenian",1366,"Feicoptic",996,"Fhook",401,"Fitacyrillic",1138,"Fiveroman",8548,"Fmonospace",65318,"Fourroman",8547,"Fsmall",63334,"G",71,"GBsquare",13191,"Gacute",500,"Gamma",915,"Gammaafrican",404,"Gangiacoptic",1002,"Gbreve",286,"Gcaron",486,"Gcedilla",290,"Gcircle",9404,"Gcircumflex",284,"Gcommaaccent",290,"Gdot",288,"Gdotaccent",288,"Gecyrillic",1043,"Ghadarmenian",1346,"Ghemiddlehookcyrillic",1172,"Ghestrokecyrillic",1170,"Gheupturncyrillic",1168,"Ghook",403,"Gimarmenian",1331,"Gjecyrillic",1027,"Gmacron",7712,"Gmonospace",65319,"Grave",63182,"Gravesmall",63328,"Gsmall",63335,"Gsmallhook",667,"Gstroke",484,"H",72,"H18533",9679,"H18543",9642,"H18551",9643,"H22073",9633,"HPsquare",13259,"Haabkhasiancyrillic",1192,"Hadescendercyrillic",1202,"Hardsigncyrillic",1066,"Hbar",294,"Hbrevebelow",7722,"Hcedilla",7720,"Hcircle",9405,"Hcircumflex",292,"Hdieresis",7718,"Hdotaccent",7714,"Hdotbelow",7716,"Hmonospace",65320,"Hoarmenian",1344,"Horicoptic",1e3,"Hsmall",63336,"Hungarumlaut",63183,"Hungarumlautsmall",63224,"Hzsquare",13200,"I",73,"IAcyrillic",1071,"IJ",306,"IUcyrillic",1070,"Iacute",205,"Iacutesmall",63469,"Ibreve",300,"Icaron",463,"Icircle",9406,"Icircumflex",206,"Icircumflexsmall",63470,"Icyrillic",1030,"Idblgrave",520,"Idieresis",207,"Idieresisacute",7726,"Idieresiscyrillic",1252,"Idieresissmall",63471,"Idot",304,"Idotaccent",304,"Idotbelow",7882,"Iebrevecyrillic",1238,"Iecyrillic",1045,"Ifraktur",8465,"Igrave",204,"Igravesmall",63468,"Ihookabove",7880,"Iicyrillic",1048,"Iinvertedbreve",522,"Iishortcyrillic",1049,"Imacron",298,"Imacroncyrillic",1250,"Imonospace",65321,"Iniarmenian",1339,"Iocyrillic",1025,"Iogonek",302,"Iota",921,"Iotaafrican",406,"Iotadieresis",938,"Iotatonos",906,"Ismall",63337,"Istroke",407,"Itilde",296,"Itildebelow",7724,"Izhitsacyrillic",1140,"Izhitsadblgravecyrillic",1142,"J",74,"Jaarmenian",1345,"Jcircle",9407,"Jcircumflex",308,"Jecyrillic",1032,"Jheharmenian",1355,"Jmonospace",65322,"Jsmall",63338,"K",75,"KBsquare",13189,"KKsquare",13261,"Kabashkircyrillic",1184,"Kacute",7728,"Kacyrillic",1050,"Kadescendercyrillic",1178,"Kahookcyrillic",1219,"Kappa",922,"Kastrokecyrillic",1182,"Kaverticalstrokecyrillic",1180,"Kcaron",488,"Kcedilla",310,"Kcircle",9408,"Kcommaaccent",310,"Kdotbelow",7730,"Keharmenian",1364,"Kenarmenian",1343,"Khacyrillic",1061,"Kheicoptic",998,"Khook",408,"Kjecyrillic",1036,"Klinebelow",7732,"Kmonospace",65323,"Koppacyrillic",1152,"Koppagreek",990,"Ksicyrillic",1134,"Ksmall",63339,"L",76,"LJ",455,"LL",63167,"Lacute",313,"Lambda",923,"Lcaron",317,"Lcedilla",315,"Lcircle",9409,"Lcircumflexbelow",7740,"Lcommaaccent",315,"Ldot",319,"Ldotaccent",319,"Ldotbelow",7734,"Ldotbelowmacron",7736,"Liwnarmenian",1340,"Lj",456,"Ljecyrillic",1033,"Llinebelow",7738,"Lmonospace",65324,"Lslash",321,"Lslashsmall",63225,"Lsmall",63340,"M",77,"MBsquare",13190,"Macron",63184,"Macronsmall",63407,"Macute",7742,"Mcircle",9410,"Mdotaccent",7744,"Mdotbelow",7746,"Menarmenian",1348,"Mmonospace",65325,"Msmall",63341,"Mturned",412,"Mu",924,"N",78,"NJ",458,"Nacute",323,"Ncaron",327,"Ncedilla",325,"Ncircle",9411,"Ncircumflexbelow",7754,"Ncommaaccent",325,"Ndotaccent",7748,"Ndotbelow",7750,"Nhookleft",413,"Nineroman",8552,"Nj",459,"Njecyrillic",1034,"Nlinebelow",7752,"Nmonospace",65326,"Nowarmenian",1350,"Nsmall",63342,"Ntilde",209,"Ntildesmall",63473,"Nu",925,"O",79,"OE",338,"OEsmall",63226,"Oacute",211,"Oacutesmall",63475,"Obarredcyrillic",1256,"Obarreddieresiscyrillic",1258,"Obreve",334,"Ocaron",465,"Ocenteredtilde",415,"Ocircle",9412,"Ocircumflex",212,"Ocircumflexacute",7888,"Ocircumflexdotbelow",7896,"Ocircumflexgrave",7890,"Ocircumflexhookabove",7892,"Ocircumflexsmall",63476,"Ocircumflextilde",7894,"Ocyrillic",1054,"Odblacute",336,"Odblgrave",524,"Odieresis",214,"Odieresiscyrillic",1254,"Odieresissmall",63478,"Odotbelow",7884,"Ogoneksmall",63227,"Ograve",210,"Ogravesmall",63474,"Oharmenian",1365,"Ohm",8486,"Ohookabove",7886,"Ohorn",416,"Ohornacute",7898,"Ohorndotbelow",7906,"Ohorngrave",7900,"Ohornhookabove",7902,"Ohorntilde",7904,"Ohungarumlaut",336,"Oi",418,"Oinvertedbreve",526,"Omacron",332,"Omacronacute",7762,"Omacrongrave",7760,"Omega",8486,"Omegacyrillic",1120,"Omegagreek",937,"Omegaroundcyrillic",1146,"Omegatitlocyrillic",1148,"Omegatonos",911,"Omicron",927,"Omicrontonos",908,"Omonospace",65327,"Oneroman",8544,"Oogonek",490,"Oogonekmacron",492,"Oopen",390,"Oslash",216,"Oslashacute",510,"Oslashsmall",63480,"Osmall",63343,"Ostrokeacute",510,"Otcyrillic",1150,"Otilde",213,"Otildeacute",7756,"Otildedieresis",7758,"Otildesmall",63477,"P",80,"Pacute",7764,"Pcircle",9413,"Pdotaccent",7766,"Pecyrillic",1055,"Peharmenian",1354,"Pemiddlehookcyrillic",1190,"Phi",934,"Phook",420,"Pi",928,"Piwrarmenian",1363,"Pmonospace",65328,"Psi",936,"Psicyrillic",1136,"Psmall",63344,"Q",81,"Qcircle",9414,"Qmonospace",65329,"Qsmall",63345,"R",82,"Raarmenian",1356,"Racute",340,"Rcaron",344,"Rcedilla",342,"Rcircle",9415,"Rcommaaccent",342,"Rdblgrave",528,"Rdotaccent",7768,"Rdotbelow",7770,"Rdotbelowmacron",7772,"Reharmenian",1360,"Rfraktur",8476,"Rho",929,"Ringsmall",63228,"Rinvertedbreve",530,"Rlinebelow",7774,"Rmonospace",65330,"Rsmall",63346,"Rsmallinverted",641,"Rsmallinvertedsuperior",694,"S",83,"SF010000",9484,"SF020000",9492,"SF030000",9488,"SF040000",9496,"SF050000",9532,"SF060000",9516,"SF070000",9524,"SF080000",9500,"SF090000",9508,"SF100000",9472,"SF110000",9474,"SF190000",9569,"SF200000",9570,"SF210000",9558,"SF220000",9557,"SF230000",9571,"SF240000",9553,"SF250000",9559,"SF260000",9565,"SF270000",9564,"SF280000",9563,"SF360000",9566,"SF370000",9567,"SF380000",9562,"SF390000",9556,"SF400000",9577,"SF410000",9574,"SF420000",9568,"SF430000",9552,"SF440000",9580,"SF450000",9575,"SF460000",9576,"SF470000",9572,"SF480000",9573,"SF490000",9561,"SF500000",9560,"SF510000",9554,"SF520000",9555,"SF530000",9579,"SF540000",9578,"Sacute",346,"Sacutedotaccent",7780,"Sampigreek",992,"Scaron",352,"Scarondotaccent",7782,"Scaronsmall",63229,"Scedilla",350,"Schwa",399,"Schwacyrillic",1240,"Schwadieresiscyrillic",1242,"Scircle",9416,"Scircumflex",348,"Scommaaccent",536,"Sdotaccent",7776,"Sdotbelow",7778,"Sdotbelowdotaccent",7784,"Seharmenian",1357,"Sevenroman",8550,"Shaarmenian",1351,"Shacyrillic",1064,"Shchacyrillic",1065,"Sheicoptic",994,"Shhacyrillic",1210,"Shimacoptic",1004,"Sigma",931,"Sixroman",8549,"Smonospace",65331,"Softsigncyrillic",1068,"Ssmall",63347,"Stigmagreek",986,"T",84,"Tau",932,"Tbar",358,"Tcaron",356,"Tcedilla",354,"Tcircle",9417,"Tcircumflexbelow",7792,"Tcommaaccent",354,"Tdotaccent",7786,"Tdotbelow",7788,"Tecyrillic",1058,"Tedescendercyrillic",1196,"Tenroman",8553,"Tetsecyrillic",1204,"Theta",920,"Thook",428,"Thorn",222,"Thornsmall",63486,"Threeroman",8546,"Tildesmall",63230,"Tiwnarmenian",1359,"Tlinebelow",7790,"Tmonospace",65332,"Toarmenian",1337,"Tonefive",444,"Tonesix",388,"Tonetwo",423,"Tretroflexhook",430,"Tsecyrillic",1062,"Tshecyrillic",1035,"Tsmall",63348,"Twelveroman",8555,"Tworoman",8545,"U",85,"Uacute",218,"Uacutesmall",63482,"Ubreve",364,"Ucaron",467,"Ucircle",9418,"Ucircumflex",219,"Ucircumflexbelow",7798,"Ucircumflexsmall",63483,"Ucyrillic",1059,"Udblacute",368,"Udblgrave",532,"Udieresis",220,"Udieresisacute",471,"Udieresisbelow",7794,"Udieresiscaron",473,"Udieresiscyrillic",1264,"Udieresisgrave",475,"Udieresismacron",469,"Udieresissmall",63484,"Udotbelow",7908,"Ugrave",217,"Ugravesmall",63481,"Uhookabove",7910,"Uhorn",431,"Uhornacute",7912,"Uhorndotbelow",7920,"Uhorngrave",7914,"Uhornhookabove",7916,"Uhorntilde",7918,"Uhungarumlaut",368,"Uhungarumlautcyrillic",1266,"Uinvertedbreve",534,"Ukcyrillic",1144,"Umacron",362,"Umacroncyrillic",1262,"Umacrondieresis",7802,"Umonospace",65333,"Uogonek",370,"Upsilon",933,"Upsilon1",978,"Upsilonacutehooksymbolgreek",979,"Upsilonafrican",433,"Upsilondieresis",939,"Upsilondieresishooksymbolgreek",980,"Upsilonhooksymbol",978,"Upsilontonos",910,"Uring",366,"Ushortcyrillic",1038,"Usmall",63349,"Ustraightcyrillic",1198,"Ustraightstrokecyrillic",1200,"Utilde",360,"Utildeacute",7800,"Utildebelow",7796,"V",86,"Vcircle",9419,"Vdotbelow",7806,"Vecyrillic",1042,"Vewarmenian",1358,"Vhook",434,"Vmonospace",65334,"Voarmenian",1352,"Vsmall",63350,"Vtilde",7804,"W",87,"Wacute",7810,"Wcircle",9420,"Wcircumflex",372,"Wdieresis",7812,"Wdotaccent",7814,"Wdotbelow",7816,"Wgrave",7808,"Wmonospace",65335,"Wsmall",63351,"X",88,"Xcircle",9421,"Xdieresis",7820,"Xdotaccent",7818,"Xeharmenian",1341,"Xi",926,"Xmonospace",65336,"Xsmall",63352,"Y",89,"Yacute",221,"Yacutesmall",63485,"Yatcyrillic",1122,"Ycircle",9422,"Ycircumflex",374,"Ydieresis",376,"Ydieresissmall",63487,"Ydotaccent",7822,"Ydotbelow",7924,"Yericyrillic",1067,"Yerudieresiscyrillic",1272,"Ygrave",7922,"Yhook",435,"Yhookabove",7926,"Yiarmenian",1349,"Yicyrillic",1031,"Yiwnarmenian",1362,"Ymonospace",65337,"Ysmall",63353,"Ytilde",7928,"Yusbigcyrillic",1130,"Yusbigiotifiedcyrillic",1132,"Yuslittlecyrillic",1126,"Yuslittleiotifiedcyrillic",1128,"Z",90,"Zaarmenian",1334,"Zacute",377,"Zcaron",381,"Zcaronsmall",63231,"Zcircle",9423,"Zcircumflex",7824,"Zdot",379,"Zdotaccent",379,"Zdotbelow",7826,"Zecyrillic",1047,"Zedescendercyrillic",1176,"Zedieresiscyrillic",1246,"Zeta",918,"Zhearmenian",1338,"Zhebrevecyrillic",1217,"Zhecyrillic",1046,"Zhedescendercyrillic",1174,"Zhedieresiscyrillic",1244,"Zlinebelow",7828,"Zmonospace",65338,"Zsmall",63354,"Zstroke",437,"a",97,"aabengali",2438,"aacute",225,"aadeva",2310,"aagujarati",2694,"aagurmukhi",2566,"aamatragurmukhi",2622,"aarusquare",13059,"aavowelsignbengali",2494,"aavowelsigndeva",2366,"aavowelsigngujarati",2750,"abbreviationmarkarmenian",1375,"abbreviationsigndeva",2416,"abengali",2437,"abopomofo",12570,"abreve",259,"abreveacute",7855,"abrevecyrillic",1233,"abrevedotbelow",7863,"abrevegrave",7857,"abrevehookabove",7859,"abrevetilde",7861,"acaron",462,"acircle",9424,"acircumflex",226,"acircumflexacute",7845,"acircumflexdotbelow",7853,"acircumflexgrave",7847,"acircumflexhookabove",7849,"acircumflextilde",7851,"acute",180,"acutebelowcmb",791,"acutecmb",769,"acutecomb",769,"acutedeva",2388,"acutelowmod",719,"acutetonecmb",833,"acyrillic",1072,"adblgrave",513,"addakgurmukhi",2673,"adeva",2309,"adieresis",228,"adieresiscyrillic",1235,"adieresismacron",479,"adotbelow",7841,"adotmacron",481,"ae",230,"aeacute",509,"aekorean",12624,"aemacron",483,"afii00208",8213,"afii08941",8356,"afii10017",1040,"afii10018",1041,"afii10019",1042,"afii10020",1043,"afii10021",1044,"afii10022",1045,"afii10023",1025,"afii10024",1046,"afii10025",1047,"afii10026",1048,"afii10027",1049,"afii10028",1050,"afii10029",1051,"afii10030",1052,"afii10031",1053,"afii10032",1054,"afii10033",1055,"afii10034",1056,"afii10035",1057,"afii10036",1058,"afii10037",1059,"afii10038",1060,"afii10039",1061,"afii10040",1062,"afii10041",1063,"afii10042",1064,"afii10043",1065,"afii10044",1066,"afii10045",1067,"afii10046",1068,"afii10047",1069,"afii10048",1070,"afii10049",1071,"afii10050",1168,"afii10051",1026,"afii10052",1027,"afii10053",1028,"afii10054",1029,"afii10055",1030,"afii10056",1031,"afii10057",1032,"afii10058",1033,"afii10059",1034,"afii10060",1035,"afii10061",1036,"afii10062",1038,"afii10063",63172,"afii10064",63173,"afii10065",1072,"afii10066",1073,"afii10067",1074,"afii10068",1075,"afii10069",1076,"afii10070",1077,"afii10071",1105,"afii10072",1078,"afii10073",1079,"afii10074",1080,"afii10075",1081,"afii10076",1082,"afii10077",1083,"afii10078",1084,"afii10079",1085,"afii10080",1086,"afii10081",1087,"afii10082",1088,"afii10083",1089,"afii10084",1090,"afii10085",1091,"afii10086",1092,"afii10087",1093,"afii10088",1094,"afii10089",1095,"afii10090",1096,"afii10091",1097,"afii10092",1098,"afii10093",1099,"afii10094",1100,"afii10095",1101,"afii10096",1102,"afii10097",1103,"afii10098",1169,"afii10099",1106,"afii10100",1107,"afii10101",1108,"afii10102",1109,"afii10103",1110,"afii10104",1111,"afii10105",1112,"afii10106",1113,"afii10107",1114,"afii10108",1115,"afii10109",1116,"afii10110",1118,"afii10145",1039,"afii10146",1122,"afii10147",1138,"afii10148",1140,"afii10192",63174,"afii10193",1119,"afii10194",1123,"afii10195",1139,"afii10196",1141,"afii10831",63175,"afii10832",63176,"afii10846",1241,"afii299",8206,"afii300",8207,"afii301",8205,"afii57381",1642,"afii57388",1548,"afii57392",1632,"afii57393",1633,"afii57394",1634,"afii57395",1635,"afii57396",1636,"afii57397",1637,"afii57398",1638,"afii57399",1639,"afii57400",1640,"afii57401",1641,"afii57403",1563,"afii57407",1567,"afii57409",1569,"afii57410",1570,"afii57411",1571,"afii57412",1572,"afii57413",1573,"afii57414",1574,"afii57415",1575,"afii57416",1576,"afii57417",1577,"afii57418",1578,"afii57419",1579,"afii57420",1580,"afii57421",1581,"afii57422",1582,"afii57423",1583,"afii57424",1584,"afii57425",1585,"afii57426",1586,"afii57427",1587,"afii57428",1588,"afii57429",1589,"afii57430",1590,"afii57431",1591,"afii57432",1592,"afii57433",1593,"afii57434",1594,"afii57440",1600,"afii57441",1601,"afii57442",1602,"afii57443",1603,"afii57444",1604,"afii57445",1605,"afii57446",1606,"afii57448",1608,"afii57449",1609,"afii57450",1610,"afii57451",1611,"afii57452",1612,"afii57453",1613,"afii57454",1614,"afii57455",1615,"afii57456",1616,"afii57457",1617,"afii57458",1618,"afii57470",1607,"afii57505",1700,"afii57506",1662,"afii57507",1670,"afii57508",1688,"afii57509",1711,"afii57511",1657,"afii57512",1672,"afii57513",1681,"afii57514",1722,"afii57519",1746,"afii57534",1749,"afii57636",8362,"afii57645",1470,"afii57658",1475,"afii57664",1488,"afii57665",1489,"afii57666",1490,"afii57667",1491,"afii57668",1492,"afii57669",1493,"afii57670",1494,"afii57671",1495,"afii57672",1496,"afii57673",1497,"afii57674",1498,"afii57675",1499,"afii57676",1500,"afii57677",1501,"afii57678",1502,"afii57679",1503,"afii57680",1504,"afii57681",1505,"afii57682",1506,"afii57683",1507,"afii57684",1508,"afii57685",1509,"afii57686",1510,"afii57687",1511,"afii57688",1512,"afii57689",1513,"afii57690",1514,"afii57694",64298,"afii57695",64299,"afii57700",64331,"afii57705",64287,"afii57716",1520,"afii57717",1521,"afii57718",1522,"afii57723",64309,"afii57793",1460,"afii57794",1461,"afii57795",1462,"afii57796",1467,"afii57797",1464,"afii57798",1463,"afii57799",1456,"afii57800",1458,"afii57801",1457,"afii57802",1459,"afii57803",1474,"afii57804",1473,"afii57806",1465,"afii57807",1468,"afii57839",1469,"afii57841",1471,"afii57842",1472,"afii57929",700,"afii61248",8453,"afii61289",8467,"afii61352",8470,"afii61573",8236,"afii61574",8237,"afii61575",8238,"afii61664",8204,"afii63167",1645,"afii64937",701,"agrave",224,"agujarati",2693,"agurmukhi",2565,"ahiragana",12354,"ahookabove",7843,"aibengali",2448,"aibopomofo",12574,"aideva",2320,"aiecyrillic",1237,"aigujarati",2704,"aigurmukhi",2576,"aimatragurmukhi",2632,"ainarabic",1593,"ainfinalarabic",65226,"aininitialarabic",65227,"ainmedialarabic",65228,"ainvertedbreve",515,"aivowelsignbengali",2504,"aivowelsigndeva",2376,"aivowelsigngujarati",2760,"akatakana",12450,"akatakanahalfwidth",65393,"akorean",12623,"alef",1488,"alefarabic",1575,"alefdageshhebrew",64304,"aleffinalarabic",65166,"alefhamzaabovearabic",1571,"alefhamzaabovefinalarabic",65156,"alefhamzabelowarabic",1573,"alefhamzabelowfinalarabic",65160,"alefhebrew",1488,"aleflamedhebrew",64335,"alefmaddaabovearabic",1570,"alefmaddaabovefinalarabic",65154,"alefmaksuraarabic",1609,"alefmaksurafinalarabic",65264,"alefmaksurainitialarabic",65267,"alefmaksuramedialarabic",65268,"alefpatahhebrew",64302,"alefqamatshebrew",64303,"aleph",8501,"allequal",8780,"alpha",945,"alphatonos",940,"amacron",257,"amonospace",65345,"ampersand",38,"ampersandmonospace",65286,"ampersandsmall",63270,"amsquare",13250,"anbopomofo",12578,"angbopomofo",12580,"angbracketleft",12296,"angbracketright",12297,"angkhankhuthai",3674,"angle",8736,"anglebracketleft",12296,"anglebracketleftvertical",65087,"anglebracketright",12297,"anglebracketrightvertical",65088,"angleleft",9001,"angleright",9002,"angstrom",8491,"anoteleia",903,"anudattadeva",2386,"anusvarabengali",2434,"anusvaradeva",2306,"anusvaragujarati",2690,"aogonek",261,"apaatosquare",13056,"aparen",9372,"apostrophearmenian",1370,"apostrophemod",700,"apple",63743,"approaches",8784,"approxequal",8776,"approxequalorimage",8786,"approximatelyequal",8773,"araeaekorean",12686,"araeakorean",12685,"arc",8978,"arighthalfring",7834,"aring",229,"aringacute",507,"aringbelow",7681,"arrowboth",8596,"arrowdashdown",8675,"arrowdashleft",8672,"arrowdashright",8674,"arrowdashup",8673,"arrowdblboth",8660,"arrowdbldown",8659,"arrowdblleft",8656,"arrowdblright",8658,"arrowdblup",8657,"arrowdown",8595,"arrowdownleft",8601,"arrowdownright",8600,"arrowdownwhite",8681,"arrowheaddownmod",709,"arrowheadleftmod",706,"arrowheadrightmod",707,"arrowheadupmod",708,"arrowhorizex",63719,"arrowleft",8592,"arrowleftdbl",8656,"arrowleftdblstroke",8653,"arrowleftoverright",8646,"arrowleftwhite",8678,"arrowright",8594,"arrowrightdblstroke",8655,"arrowrightheavy",10142,"arrowrightoverleft",8644,"arrowrightwhite",8680,"arrowtableft",8676,"arrowtabright",8677,"arrowup",8593,"arrowupdn",8597,"arrowupdnbse",8616,"arrowupdownbase",8616,"arrowupleft",8598,"arrowupleftofdown",8645,"arrowupright",8599,"arrowupwhite",8679,"arrowvertex",63718,"asciicircum",94,"asciicircummonospace",65342,"asciitilde",126,"asciitildemonospace",65374,"ascript",593,"ascriptturned",594,"asmallhiragana",12353,"asmallkatakana",12449,"asmallkatakanahalfwidth",65383,"asterisk",42,"asteriskaltonearabic",1645,"asteriskarabic",1645,"asteriskmath",8727,"asteriskmonospace",65290,"asterisksmall",65121,"asterism",8258,"asuperior",63209,"asymptoticallyequal",8771,"at",64,"atilde",227,"atmonospace",65312,"atsmall",65131,"aturned",592,"aubengali",2452,"aubopomofo",12576,"audeva",2324,"augujarati",2708,"augurmukhi",2580,"aulengthmarkbengali",2519,"aumatragurmukhi",2636,"auvowelsignbengali",2508,"auvowelsigndeva",2380,"auvowelsigngujarati",2764,"avagrahadeva",2365,"aybarmenian",1377,"ayin",1506,"ayinaltonehebrew",64288,"ayinhebrew",1506,"b",98,"babengali",2476,"backslash",92,"backslashmonospace",65340,"badeva",2348,"bagujarati",2732,"bagurmukhi",2604,"bahiragana",12400,"bahtthai",3647,"bakatakana",12496,"bar",124,"barmonospace",65372,"bbopomofo",12549,"bcircle",9425,"bdotaccent",7683,"bdotbelow",7685,"beamedsixteenthnotes",9836,"because",8757,"becyrillic",1073,"beharabic",1576,"behfinalarabic",65168,"behinitialarabic",65169,"behiragana",12409,"behmedialarabic",65170,"behmeeminitialarabic",64671,"behmeemisolatedarabic",64520,"behnoonfinalarabic",64621,"bekatakana",12505,"benarmenian",1378,"bet",1489,"beta",946,"betasymbolgreek",976,"betdagesh",64305,"betdageshhebrew",64305,"bethebrew",1489,"betrafehebrew",64332,"bhabengali",2477,"bhadeva",2349,"bhagujarati",2733,"bhagurmukhi",2605,"bhook",595,"bihiragana",12403,"bikatakana",12499,"bilabialclick",664,"bindigurmukhi",2562,"birusquare",13105,"blackcircle",9679,"blackdiamond",9670,"blackdownpointingtriangle",9660,"blackleftpointingpointer",9668,"blackleftpointingtriangle",9664,"blacklenticularbracketleft",12304,"blacklenticularbracketleftvertical",65083,"blacklenticularbracketright",12305,"blacklenticularbracketrightvertical",65084,"blacklowerlefttriangle",9699,"blacklowerrighttriangle",9698,"blackrectangle",9644,"blackrightpointingpointer",9658,"blackrightpointingtriangle",9654,"blacksmallsquare",9642,"blacksmilingface",9787,"blacksquare",9632,"blackstar",9733,"blackupperlefttriangle",9700,"blackupperrighttriangle",9701,"blackuppointingsmalltriangle",9652,"blackuppointingtriangle",9650,"blank",9251,"blinebelow",7687,"block",9608,"bmonospace",65346,"bobaimaithai",3610,"bohiragana",12412,"bokatakana",12508,"bparen",9373,"bqsquare",13251,"braceex",63732,"braceleft",123,"braceleftbt",63731,"braceleftmid",63730,"braceleftmonospace",65371,"braceleftsmall",65115,"bracelefttp",63729,"braceleftvertical",65079,"braceright",125,"bracerightbt",63742,"bracerightmid",63741,"bracerightmonospace",65373,"bracerightsmall",65116,"bracerighttp",63740,"bracerightvertical",65080,"bracketleft",91,"bracketleftbt",63728,"bracketleftex",63727,"bracketleftmonospace",65339,"bracketlefttp",63726,"bracketright",93,"bracketrightbt",63739,"bracketrightex",63738,"bracketrightmonospace",65341,"bracketrighttp",63737,"breve",728,"brevebelowcmb",814,"brevecmb",774,"breveinvertedbelowcmb",815,"breveinvertedcmb",785,"breveinverteddoublecmb",865,"bridgebelowcmb",810,"bridgeinvertedbelowcmb",826,"brokenbar",166,"bstroke",384,"bsuperior",63210,"btopbar",387,"buhiragana",12406,"bukatakana",12502,"bullet",8226,"bulletinverse",9688,"bulletoperator",8729,"bullseye",9678,"c",99,"caarmenian",1390,"cabengali",2458,"cacute",263,"cadeva",2330,"cagujarati",2714,"cagurmukhi",2586,"calsquare",13192,"candrabindubengali",2433,"candrabinducmb",784,"candrabindudeva",2305,"candrabindugujarati",2689,"capslock",8682,"careof",8453,"caron",711,"caronbelowcmb",812,"caroncmb",780,"carriagereturn",8629,"cbopomofo",12568,"ccaron",269,"ccedilla",231,"ccedillaacute",7689,"ccircle",9426,"ccircumflex",265,"ccurl",597,"cdot",267,"cdotaccent",267,"cdsquare",13253,"cedilla",184,"cedillacmb",807,"cent",162,"centigrade",8451,"centinferior",63199,"centmonospace",65504,"centoldstyle",63394,"centsuperior",63200,"chaarmenian",1401,"chabengali",2459,"chadeva",2331,"chagujarati",2715,"chagurmukhi",2587,"chbopomofo",12564,"cheabkhasiancyrillic",1213,"checkmark",10003,"checyrillic",1095,"chedescenderabkhasiancyrillic",1215,"chedescendercyrillic",1207,"chedieresiscyrillic",1269,"cheharmenian",1395,"chekhakassiancyrillic",1228,"cheverticalstrokecyrillic",1209,"chi",967,"chieuchacirclekorean",12919,"chieuchaparenkorean",12823,"chieuchcirclekorean",12905,"chieuchkorean",12618,"chieuchparenkorean",12809,"chochangthai",3594,"chochanthai",3592,"chochingthai",3593,"chochoethai",3596,"chook",392,"cieucacirclekorean",12918,"cieucaparenkorean",12822,"cieuccirclekorean",12904,"cieuckorean",12616,"cieucparenkorean",12808,"cieucuparenkorean",12828,"circle",9675,"circlecopyrt",169,"circlemultiply",8855,"circleot",8857,"circleplus",8853,"circlepostalmark",12342,"circlewithlefthalfblack",9680,"circlewithrighthalfblack",9681,"circumflex",710,"circumflexbelowcmb",813,"circumflexcmb",770,"clear",8999,"clickalveolar",450,"clickdental",448,"clicklateral",449,"clickretroflex",451,"club",9827,"clubsuitblack",9827,"clubsuitwhite",9831,"cmcubedsquare",13220,"cmonospace",65347,"cmsquaredsquare",13216,"coarmenian",1409,"colon",58,"colonmonetary",8353,"colonmonospace",65306,"colonsign",8353,"colonsmall",65109,"colontriangularhalfmod",721,"colontriangularmod",720,"comma",44,"commaabovecmb",787,"commaaboverightcmb",789,"commaaccent",63171,"commaarabic",1548,"commaarmenian",1373,"commainferior",63201,"commamonospace",65292,"commareversedabovecmb",788,"commareversedmod",701,"commasmall",65104,"commasuperior",63202,"commaturnedabovecmb",786,"commaturnedmod",699,"compass",9788,"congruent",8773,"contourintegral",8750,"control",8963,"controlACK",6,"controlBEL",7,"controlBS",8,"controlCAN",24,"controlCR",13,"controlDC1",17,"controlDC2",18,"controlDC3",19,"controlDC4",20,"controlDEL",127,"controlDLE",16,"controlEM",25,"controlENQ",5,"controlEOT",4,"controlESC",27,"controlETB",23,"controlETX",3,"controlFF",12,"controlFS",28,"controlGS",29,"controlHT",9,"controlLF",10,"controlNAK",21,"controlNULL",0,"controlRS",30,"controlSI",15,"controlSO",14,"controlSOT",2,"controlSTX",1,"controlSUB",26,"controlSYN",22,"controlUS",31,"controlVT",11,"copyright",169,"copyrightsans",63721,"copyrightserif",63193,"cornerbracketleft",12300,"cornerbracketlefthalfwidth",65378,"cornerbracketleftvertical",65089,"cornerbracketright",12301,"cornerbracketrighthalfwidth",65379,"cornerbracketrightvertical",65090,"corporationsquare",13183,"cosquare",13255,"coverkgsquare",13254,"cparen",9374,"cruzeiro",8354,"cstretched",663,"curlyand",8911,"curlyor",8910,"currency",164,"cyrBreve",63185,"cyrFlex",63186,"cyrbreve",63188,"cyrflex",63189,"d",100,"daarmenian",1380,"dabengali",2470,"dadarabic",1590,"dadeva",2342,"dadfinalarabic",65214,"dadinitialarabic",65215,"dadmedialarabic",65216,"dagesh",1468,"dageshhebrew",1468,"dagger",8224,"daggerdbl",8225,"dagujarati",2726,"dagurmukhi",2598,"dahiragana",12384,"dakatakana",12480,"dalarabic",1583,"dalet",1491,"daletdagesh",64307,"daletdageshhebrew",64307,"dalethebrew",1491,"dalfinalarabic",65194,"dammaarabic",1615,"dammalowarabic",1615,"dammatanaltonearabic",1612,"dammatanarabic",1612,"danda",2404,"dargahebrew",1447,"dargalefthebrew",1447,"dasiapneumatacyrilliccmb",1157,"dblGrave",63187,"dblanglebracketleft",12298,"dblanglebracketleftvertical",65085,"dblanglebracketright",12299,"dblanglebracketrightvertical",65086,"dblarchinvertedbelowcmb",811,"dblarrowleft",8660,"dblarrowright",8658,"dbldanda",2405,"dblgrave",63190,"dblgravecmb",783,"dblintegral",8748,"dbllowline",8215,"dbllowlinecmb",819,"dbloverlinecmb",831,"dblprimemod",698,"dblverticalbar",8214,"dblverticallineabovecmb",782,"dbopomofo",12553,"dbsquare",13256,"dcaron",271,"dcedilla",7697,"dcircle",9427,"dcircumflexbelow",7699,"dcroat",273,"ddabengali",2465,"ddadeva",2337,"ddagujarati",2721,"ddagurmukhi",2593,"ddalarabic",1672,"ddalfinalarabic",64393,"dddhadeva",2396,"ddhabengali",2466,"ddhadeva",2338,"ddhagujarati",2722,"ddhagurmukhi",2594,"ddotaccent",7691,"ddotbelow",7693,"decimalseparatorarabic",1643,"decimalseparatorpersian",1643,"decyrillic",1076,"degree",176,"dehihebrew",1453,"dehiragana",12391,"deicoptic",1007,"dekatakana",12487,"deleteleft",9003,"deleteright",8998,"delta",948,"deltaturned",397,"denominatorminusonenumeratorbengali",2552,"dezh",676,"dhabengali",2471,"dhadeva",2343,"dhagujarati",2727,"dhagurmukhi",2599,"dhook",599,"dialytikatonos",901,"dialytikatonoscmb",836,"diamond",9830,"diamondsuitwhite",9826,"dieresis",168,"dieresisacute",63191,"dieresisbelowcmb",804,"dieresiscmb",776,"dieresisgrave",63192,"dieresistonos",901,"dihiragana",12386,"dikatakana",12482,"dittomark",12291,"divide",247,"divides",8739,"divisionslash",8725,"djecyrillic",1106,"dkshade",9619,"dlinebelow",7695,"dlsquare",13207,"dmacron",273,"dmonospace",65348,"dnblock",9604,"dochadathai",3598,"dodekthai",3604,"dohiragana",12393,"dokatakana",12489,"dollar",36,"dollarinferior",63203,"dollarmonospace",65284,"dollaroldstyle",63268,"dollarsmall",65129,"dollarsuperior",63204,"dong",8363,"dorusquare",13094,"dotaccent",729,"dotaccentcmb",775,"dotbelowcmb",803,"dotbelowcomb",803,"dotkatakana",12539,"dotlessi",305,"dotlessj",63166,"dotlessjstrokehook",644,"dotmath",8901,"dottedcircle",9676,"doubleyodpatah",64287,"doubleyodpatahhebrew",64287,"downtackbelowcmb",798,"downtackmod",725,"dparen",9375,"dsuperior",63211,"dtail",598,"dtopbar",396,"duhiragana",12389,"dukatakana",12485,"dz",499,"dzaltone",675,"dzcaron",454,"dzcurl",677,"dzeabkhasiancyrillic",1249,"dzecyrillic",1109,"dzhecyrillic",1119,"e",101,"eacute",233,"earth",9793,"ebengali",2447,"ebopomofo",12572,"ebreve",277,"ecandradeva",2317,"ecandragujarati",2701,"ecandravowelsigndeva",2373,"ecandravowelsigngujarati",2757,"ecaron",283,"ecedillabreve",7709,"echarmenian",1381,"echyiwnarmenian",1415,"ecircle",9428,"ecircumflex",234,"ecircumflexacute",7871,"ecircumflexbelow",7705,"ecircumflexdotbelow",7879,"ecircumflexgrave",7873,"ecircumflexhookabove",7875,"ecircumflextilde",7877,"ecyrillic",1108,"edblgrave",517,"edeva",2319,"edieresis",235,"edot",279,"edotaccent",279,"edotbelow",7865,"eegurmukhi",2575,"eematragurmukhi",2631,"efcyrillic",1092,"egrave",232,"egujarati",2703,"eharmenian",1383,"ehbopomofo",12573,"ehiragana",12360,"ehookabove",7867,"eibopomofo",12575,"eight",56,"eightarabic",1640,"eightbengali",2542,"eightcircle",9319,"eightcircleinversesansserif",10129,"eightdeva",2414,"eighteencircle",9329,"eighteenparen",9349,"eighteenperiod",9369,"eightgujarati",2798,"eightgurmukhi",2670,"eighthackarabic",1640,"eighthangzhou",12328,"eighthnotebeamed",9835,"eightideographicparen",12839,"eightinferior",8328,"eightmonospace",65304,"eightoldstyle",63288,"eightparen",9339,"eightperiod",9359,"eightpersian",1784,"eightroman",8567,"eightsuperior",8312,"eightthai",3672,"einvertedbreve",519,"eiotifiedcyrillic",1125,"ekatakana",12456,"ekatakanahalfwidth",65396,"ekonkargurmukhi",2676,"ekorean",12628,"elcyrillic",1083,"element",8712,"elevencircle",9322,"elevenparen",9342,"elevenperiod",9362,"elevenroman",8570,"ellipsis",8230,"ellipsisvertical",8942,"emacron",275,"emacronacute",7703,"emacrongrave",7701,"emcyrillic",1084,"emdash",8212,"emdashvertical",65073,"emonospace",65349,"emphasismarkarmenian",1371,"emptyset",8709,"enbopomofo",12579,"encyrillic",1085,"endash",8211,"endashvertical",65074,"endescendercyrillic",1187,"eng",331,"engbopomofo",12581,"enghecyrillic",1189,"enhookcyrillic",1224,"enspace",8194,"eogonek",281,"eokorean",12627,"eopen",603,"eopenclosed",666,"eopenreversed",604,"eopenreversedclosed",606,"eopenreversedhook",605,"eparen",9376,"epsilon",949,"epsilontonos",941,"equal",61,"equalmonospace",65309,"equalsmall",65126,"equalsuperior",8316,"equivalence",8801,"erbopomofo",12582,"ercyrillic",1088,"ereversed",600,"ereversedcyrillic",1101,"escyrillic",1089,"esdescendercyrillic",1195,"esh",643,"eshcurl",646,"eshortdeva",2318,"eshortvowelsigndeva",2374,"eshreversedloop",426,"eshsquatreversed",645,"esmallhiragana",12359,"esmallkatakana",12455,"esmallkatakanahalfwidth",65386,"estimated",8494,"esuperior",63212,"eta",951,"etarmenian",1384,"etatonos",942,"eth",240,"etilde",7869,"etildebelow",7707,"etnahtafoukhhebrew",1425,"etnahtafoukhlefthebrew",1425,"etnahtahebrew",1425,"etnahtalefthebrew",1425,"eturned",477,"eukorean",12641,"euro",8364,"evowelsignbengali",2503,"evowelsigndeva",2375,"evowelsigngujarati",2759,"exclam",33,"exclamarmenian",1372,"exclamdbl",8252,"exclamdown",161,"exclamdownsmall",63393,"exclammonospace",65281,"exclamsmall",63265,"existential",8707,"ezh",658,"ezhcaron",495,"ezhcurl",659,"ezhreversed",441,"ezhtail",442,"f",102,"fadeva",2398,"fagurmukhi",2654,"fahrenheit",8457,"fathaarabic",1614,"fathalowarabic",1614,"fathatanarabic",1611,"fbopomofo",12552,"fcircle",9429,"fdotaccent",7711,"feharabic",1601,"feharmenian",1414,"fehfinalarabic",65234,"fehinitialarabic",65235,"fehmedialarabic",65236,"feicoptic",997,"female",9792,"ff",64256,"f_f",64256,"ffi",64259,"f_f_i",64259,"ffl",64260,"f_f_l",64260,"fi",64257,"f_i",64257,"fifteencircle",9326,"fifteenparen",9346,"fifteenperiod",9366,"figuredash",8210,"filledbox",9632,"filledrect",9644,"finalkaf",1498,"finalkafdagesh",64314,"finalkafdageshhebrew",64314,"finalkafhebrew",1498,"finalmem",1501,"finalmemhebrew",1501,"finalnun",1503,"finalnunhebrew",1503,"finalpe",1507,"finalpehebrew",1507,"finaltsadi",1509,"finaltsadihebrew",1509,"firsttonechinese",713,"fisheye",9673,"fitacyrillic",1139,"five",53,"fivearabic",1637,"fivebengali",2539,"fivecircle",9316,"fivecircleinversesansserif",10126,"fivedeva",2411,"fiveeighths",8541,"fivegujarati",2795,"fivegurmukhi",2667,"fivehackarabic",1637,"fivehangzhou",12325,"fiveideographicparen",12836,"fiveinferior",8325,"fivemonospace",65301,"fiveoldstyle",63285,"fiveparen",9336,"fiveperiod",9356,"fivepersian",1781,"fiveroman",8564,"fivesuperior",8309,"fivethai",3669,"fl",64258,"f_l",64258,"florin",402,"fmonospace",65350,"fmsquare",13209,"fofanthai",3615,"fofathai",3613,"fongmanthai",3663,"forall",8704,"four",52,"fourarabic",1636,"fourbengali",2538,"fourcircle",9315,"fourcircleinversesansserif",10125,"fourdeva",2410,"fourgujarati",2794,"fourgurmukhi",2666,"fourhackarabic",1636,"fourhangzhou",12324,"fourideographicparen",12835,"fourinferior",8324,"fourmonospace",65300,"fournumeratorbengali",2551,"fouroldstyle",63284,"fourparen",9335,"fourperiod",9355,"fourpersian",1780,"fourroman",8563,"foursuperior",8308,"fourteencircle",9325,"fourteenparen",9345,"fourteenperiod",9365,"fourthai",3668,"fourthtonechinese",715,"fparen",9377,"fraction",8260,"franc",8355,"g",103,"gabengali",2455,"gacute",501,"gadeva",2327,"gafarabic",1711,"gaffinalarabic",64403,"gafinitialarabic",64404,"gafmedialarabic",64405,"gagujarati",2711,"gagurmukhi",2583,"gahiragana",12364,"gakatakana",12460,"gamma",947,"gammalatinsmall",611,"gammasuperior",736,"gangiacoptic",1003,"gbopomofo",12557,"gbreve",287,"gcaron",487,"gcedilla",291,"gcircle",9430,"gcircumflex",285,"gcommaaccent",291,"gdot",289,"gdotaccent",289,"gecyrillic",1075,"gehiragana",12370,"gekatakana",12466,"geometricallyequal",8785,"gereshaccenthebrew",1436,"gereshhebrew",1523,"gereshmuqdamhebrew",1437,"germandbls",223,"gershayimaccenthebrew",1438,"gershayimhebrew",1524,"getamark",12307,"ghabengali",2456,"ghadarmenian",1394,"ghadeva",2328,"ghagujarati",2712,"ghagurmukhi",2584,"ghainarabic",1594,"ghainfinalarabic",65230,"ghaininitialarabic",65231,"ghainmedialarabic",65232,"ghemiddlehookcyrillic",1173,"ghestrokecyrillic",1171,"gheupturncyrillic",1169,"ghhadeva",2394,"ghhagurmukhi",2650,"ghook",608,"ghzsquare",13203,"gihiragana",12366,"gikatakana",12462,"gimarmenian",1379,"gimel",1490,"gimeldagesh",64306,"gimeldageshhebrew",64306,"gimelhebrew",1490,"gjecyrillic",1107,"glottalinvertedstroke",446,"glottalstop",660,"glottalstopinverted",662,"glottalstopmod",704,"glottalstopreversed",661,"glottalstopreversedmod",705,"glottalstopreversedsuperior",740,"glottalstopstroke",673,"glottalstopstrokereversed",674,"gmacron",7713,"gmonospace",65351,"gohiragana",12372,"gokatakana",12468,"gparen",9378,"gpasquare",13228,"gradient",8711,"grave",96,"gravebelowcmb",790,"gravecmb",768,"gravecomb",768,"gravedeva",2387,"gravelowmod",718,"gravemonospace",65344,"gravetonecmb",832,"greater",62,"greaterequal",8805,"greaterequalorless",8923,"greatermonospace",65310,"greaterorequivalent",8819,"greaterorless",8823,"greateroverequal",8807,"greatersmall",65125,"gscript",609,"gstroke",485,"guhiragana",12368,"guillemotleft",171,"guillemotright",187,"guilsinglleft",8249,"guilsinglright",8250,"gukatakana",12464,"guramusquare",13080,"gysquare",13257,"h",104,"haabkhasiancyrillic",1193,"haaltonearabic",1729,"habengali",2489,"hadescendercyrillic",1203,"hadeva",2361,"hagujarati",2745,"hagurmukhi",2617,"haharabic",1581,"hahfinalarabic",65186,"hahinitialarabic",65187,"hahiragana",12399,"hahmedialarabic",65188,"haitusquare",13098,"hakatakana",12495,"hakatakanahalfwidth",65418,"halantgurmukhi",2637,"hamzaarabic",1569,"hamzalowarabic",1569,"hangulfiller",12644,"hardsigncyrillic",1098,"harpoonleftbarbup",8636,"harpoonrightbarbup",8640,"hasquare",13258,"hatafpatah",1458,"hatafpatah16",1458,"hatafpatah23",1458,"hatafpatah2f",1458,"hatafpatahhebrew",1458,"hatafpatahnarrowhebrew",1458,"hatafpatahquarterhebrew",1458,"hatafpatahwidehebrew",1458,"hatafqamats",1459,"hatafqamats1b",1459,"hatafqamats28",1459,"hatafqamats34",1459,"hatafqamatshebrew",1459,"hatafqamatsnarrowhebrew",1459,"hatafqamatsquarterhebrew",1459,"hatafqamatswidehebrew",1459,"hatafsegol",1457,"hatafsegol17",1457,"hatafsegol24",1457,"hatafsegol30",1457,"hatafsegolhebrew",1457,"hatafsegolnarrowhebrew",1457,"hatafsegolquarterhebrew",1457,"hatafsegolwidehebrew",1457,"hbar",295,"hbopomofo",12559,"hbrevebelow",7723,"hcedilla",7721,"hcircle",9431,"hcircumflex",293,"hdieresis",7719,"hdotaccent",7715,"hdotbelow",7717,"he",1492,"heart",9829,"heartsuitblack",9829,"heartsuitwhite",9825,"hedagesh",64308,"hedageshhebrew",64308,"hehaltonearabic",1729,"heharabic",1607,"hehebrew",1492,"hehfinalaltonearabic",64423,"hehfinalalttwoarabic",65258,"hehfinalarabic",65258,"hehhamzaabovefinalarabic",64421,"hehhamzaaboveisolatedarabic",64420,"hehinitialaltonearabic",64424,"hehinitialarabic",65259,"hehiragana",12408,"hehmedialaltonearabic",64425,"hehmedialarabic",65260,"heiseierasquare",13179,"hekatakana",12504,"hekatakanahalfwidth",65421,"hekutaarusquare",13110,"henghook",615,"herutusquare",13113,"het",1495,"hethebrew",1495,"hhook",614,"hhooksuperior",689,"hieuhacirclekorean",12923,"hieuhaparenkorean",12827,"hieuhcirclekorean",12909,"hieuhkorean",12622,"hieuhparenkorean",12813,"hihiragana",12402,"hikatakana",12498,"hikatakanahalfwidth",65419,"hiriq",1460,"hiriq14",1460,"hiriq21",1460,"hiriq2d",1460,"hiriqhebrew",1460,"hiriqnarrowhebrew",1460,"hiriqquarterhebrew",1460,"hiriqwidehebrew",1460,"hlinebelow",7830,"hmonospace",65352,"hoarmenian",1392,"hohipthai",3627,"hohiragana",12411,"hokatakana",12507,"hokatakanahalfwidth",65422,"holam",1465,"holam19",1465,"holam26",1465,"holam32",1465,"holamhebrew",1465,"holamnarrowhebrew",1465,"holamquarterhebrew",1465,"holamwidehebrew",1465,"honokhukthai",3630,"hookabovecomb",777,"hookcmb",777,"hookpalatalizedbelowcmb",801,"hookretroflexbelowcmb",802,"hoonsquare",13122,"horicoptic",1001,"horizontalbar",8213,"horncmb",795,"hotsprings",9832,"house",8962,"hparen",9379,"hsuperior",688,"hturned",613,"huhiragana",12405,"huiitosquare",13107,"hukatakana",12501,"hukatakanahalfwidth",65420,"hungarumlaut",733,"hungarumlautcmb",779,"hv",405,"hyphen",45,"hypheninferior",63205,"hyphenmonospace",65293,"hyphensmall",65123,"hyphensuperior",63206,"hyphentwo",8208,"i",105,"iacute",237,"iacyrillic",1103,"ibengali",2439,"ibopomofo",12583,"ibreve",301,"icaron",464,"icircle",9432,"icircumflex",238,"icyrillic",1110,"idblgrave",521,"ideographearthcircle",12943,"ideographfirecircle",12939,"ideographicallianceparen",12863,"ideographiccallparen",12858,"ideographiccentrecircle",12965,"ideographicclose",12294,"ideographiccomma",12289,"ideographiccommaleft",65380,"ideographiccongratulationparen",12855,"ideographiccorrectcircle",12963,"ideographicearthparen",12847,"ideographicenterpriseparen",12861,"ideographicexcellentcircle",12957,"ideographicfestivalparen",12864,"ideographicfinancialcircle",12950,"ideographicfinancialparen",12854,"ideographicfireparen",12843,"ideographichaveparen",12850,"ideographichighcircle",12964,"ideographiciterationmark",12293,"ideographiclaborcircle",12952,"ideographiclaborparen",12856,"ideographicleftcircle",12967,"ideographiclowcircle",12966,"ideographicmedicinecircle",12969,"ideographicmetalparen",12846,"ideographicmoonparen",12842,"ideographicnameparen",12852,"ideographicperiod",12290,"ideographicprintcircle",12958,"ideographicreachparen",12867,"ideographicrepresentparen",12857,"ideographicresourceparen",12862,"ideographicrightcircle",12968,"ideographicsecretcircle",12953,"ideographicselfparen",12866,"ideographicsocietyparen",12851,"ideographicspace",12288,"ideographicspecialparen",12853,"ideographicstockparen",12849,"ideographicstudyparen",12859,"ideographicsunparen",12848,"ideographicsuperviseparen",12860,"ideographicwaterparen",12844,"ideographicwoodparen",12845,"ideographiczero",12295,"ideographmetalcircle",12942,"ideographmooncircle",12938,"ideographnamecircle",12948,"ideographsuncircle",12944,"ideographwatercircle",12940,"ideographwoodcircle",12941,"ideva",2311,"idieresis",239,"idieresisacute",7727,"idieresiscyrillic",1253,"idotbelow",7883,"iebrevecyrillic",1239,"iecyrillic",1077,"ieungacirclekorean",12917,"ieungaparenkorean",12821,"ieungcirclekorean",12903,"ieungkorean",12615,"ieungparenkorean",12807,"igrave",236,"igujarati",2695,"igurmukhi",2567,"ihiragana",12356,"ihookabove",7881,"iibengali",2440,"iicyrillic",1080,"iideva",2312,"iigujarati",2696,"iigurmukhi",2568,"iimatragurmukhi",2624,"iinvertedbreve",523,"iishortcyrillic",1081,"iivowelsignbengali",2496,"iivowelsigndeva",2368,"iivowelsigngujarati",2752,"ij",307,"ikatakana",12452,"ikatakanahalfwidth",65394,"ikorean",12643,"ilde",732,"iluyhebrew",1452,"imacron",299,"imacroncyrillic",1251,"imageorapproximatelyequal",8787,"imatragurmukhi",2623,"imonospace",65353,"increment",8710,"infinity",8734,"iniarmenian",1387,"integral",8747,"integralbottom",8993,"integralbt",8993,"integralex",63733,"integraltop",8992,"integraltp",8992,"intersection",8745,"intisquare",13061,"invbullet",9688,"invcircle",9689,"invsmileface",9787,"iocyrillic",1105,"iogonek",303,"iota",953,"iotadieresis",970,"iotadieresistonos",912,"iotalatin",617,"iotatonos",943,"iparen",9380,"irigurmukhi",2674,"ismallhiragana",12355,"ismallkatakana",12451,"ismallkatakanahalfwidth",65384,"issharbengali",2554,"istroke",616,"isuperior",63213,"iterationhiragana",12445,"iterationkatakana",12541,"itilde",297,"itildebelow",7725,"iubopomofo",12585,"iucyrillic",1102,"ivowelsignbengali",2495,"ivowelsigndeva",2367,"ivowelsigngujarati",2751,"izhitsacyrillic",1141,"izhitsadblgravecyrillic",1143,"j",106,"jaarmenian",1393,"jabengali",2460,"jadeva",2332,"jagujarati",2716,"jagurmukhi",2588,"jbopomofo",12560,"jcaron",496,"jcircle",9433,"jcircumflex",309,"jcrossedtail",669,"jdotlessstroke",607,"jecyrillic",1112,"jeemarabic",1580,"jeemfinalarabic",65182,"jeeminitialarabic",65183,"jeemmedialarabic",65184,"jeharabic",1688,"jehfinalarabic",64395,"jhabengali",2461,"jhadeva",2333,"jhagujarati",2717,"jhagurmukhi",2589,"jheharmenian",1403,"jis",12292,"jmonospace",65354,"jparen",9381,"jsuperior",690,"k",107,"kabashkircyrillic",1185,"kabengali",2453,"kacute",7729,"kacyrillic",1082,"kadescendercyrillic",1179,"kadeva",2325,"kaf",1499,"kafarabic",1603,"kafdagesh",64315,"kafdageshhebrew",64315,"kaffinalarabic",65242,"kafhebrew",1499,"kafinitialarabic",65243,"kafmedialarabic",65244,"kafrafehebrew",64333,"kagujarati",2709,"kagurmukhi",2581,"kahiragana",12363,"kahookcyrillic",1220,"kakatakana",12459,"kakatakanahalfwidth",65398,"kappa",954,"kappasymbolgreek",1008,"kapyeounmieumkorean",12657,"kapyeounphieuphkorean",12676,"kapyeounpieupkorean",12664,"kapyeounssangpieupkorean",12665,"karoriisquare",13069,"kashidaautoarabic",1600,"kashidaautonosidebearingarabic",1600,"kasmallkatakana",12533,"kasquare",13188,"kasraarabic",1616,"kasratanarabic",1613,"kastrokecyrillic",1183,"katahiraprolongmarkhalfwidth",65392,"kaverticalstrokecyrillic",1181,"kbopomofo",12558,"kcalsquare",13193,"kcaron",489,"kcedilla",311,"kcircle",9434,"kcommaaccent",311,"kdotbelow",7731,"keharmenian",1412,"kehiragana",12369,"kekatakana",12465,"kekatakanahalfwidth",65401,"kenarmenian",1391,"kesmallkatakana",12534,"kgreenlandic",312,"khabengali",2454,"khacyrillic",1093,"khadeva",2326,"khagujarati",2710,"khagurmukhi",2582,"khaharabic",1582,"khahfinalarabic",65190,"khahinitialarabic",65191,"khahmedialarabic",65192,"kheicoptic",999,"khhadeva",2393,"khhagurmukhi",2649,"khieukhacirclekorean",12920,"khieukhaparenkorean",12824,"khieukhcirclekorean",12906,"khieukhkorean",12619,"khieukhparenkorean",12810,"khokhaithai",3586,"khokhonthai",3589,"khokhuatthai",3587,"khokhwaithai",3588,"khomutthai",3675,"khook",409,"khorakhangthai",3590,"khzsquare",13201,"kihiragana",12365,"kikatakana",12461,"kikatakanahalfwidth",65399,"kiroguramusquare",13077,"kiromeetorusquare",13078,"kirosquare",13076,"kiyeokacirclekorean",12910,"kiyeokaparenkorean",12814,"kiyeokcirclekorean",12896,"kiyeokkorean",12593,"kiyeokparenkorean",12800,"kiyeoksioskorean",12595,"kjecyrillic",1116,"klinebelow",7733,"klsquare",13208,"kmcubedsquare",13222,"kmonospace",65355,"kmsquaredsquare",13218,"kohiragana",12371,"kohmsquare",13248,"kokaithai",3585,"kokatakana",12467,"kokatakanahalfwidth",65402,"kooposquare",13086,"koppacyrillic",1153,"koreanstandardsymbol",12927,"koroniscmb",835,"kparen",9382,"kpasquare",13226,"ksicyrillic",1135,"ktsquare",13263,"kturned",670,"kuhiragana",12367,"kukatakana",12463,"kukatakanahalfwidth",65400,"kvsquare",13240,"kwsquare",13246,"l",108,"labengali",2482,"lacute",314,"ladeva",2354,"lagujarati",2738,"lagurmukhi",2610,"lakkhangyaothai",3653,"lamaleffinalarabic",65276,"lamalefhamzaabovefinalarabic",65272,"lamalefhamzaaboveisolatedarabic",65271,"lamalefhamzabelowfinalarabic",65274,"lamalefhamzabelowisolatedarabic",65273,"lamalefisolatedarabic",65275,"lamalefmaddaabovefinalarabic",65270,"lamalefmaddaaboveisolatedarabic",65269,"lamarabic",1604,"lambda",955,"lambdastroke",411,"lamed",1500,"lameddagesh",64316,"lameddageshhebrew",64316,"lamedhebrew",1500,"lamfinalarabic",65246,"lamhahinitialarabic",64714,"laminitialarabic",65247,"lamjeeminitialarabic",64713,"lamkhahinitialarabic",64715,"lamlamhehisolatedarabic",65010,"lammedialarabic",65248,"lammeemhahinitialarabic",64904,"lammeeminitialarabic",64716,"largecircle",9711,"lbar",410,"lbelt",620,"lbopomofo",12556,"lcaron",318,"lcedilla",316,"lcircle",9435,"lcircumflexbelow",7741,"lcommaaccent",316,"ldot",320,"ldotaccent",320,"ldotbelow",7735,"ldotbelowmacron",7737,"leftangleabovecmb",794,"lefttackbelowcmb",792,"less",60,"lessequal",8804,"lessequalorgreater",8922,"lessmonospace",65308,"lessorequivalent",8818,"lessorgreater",8822,"lessoverequal",8806,"lesssmall",65124,"lezh",622,"lfblock",9612,"lhookretroflex",621,"lira",8356,"liwnarmenian",1388,"lj",457,"ljecyrillic",1113,"ll",63168,"lladeva",2355,"llagujarati",2739,"llinebelow",7739,"llladeva",2356,"llvocalicbengali",2529,"llvocalicdeva",2401,"llvocalicvowelsignbengali",2531,"llvocalicvowelsigndeva",2403,"lmiddletilde",619,"lmonospace",65356,"lmsquare",13264,"lochulathai",3628,"logicaland",8743,"logicalnot",172,"logicalnotreversed",8976,"logicalor",8744,"lolingthai",3621,"longs",383,"lowlinecenterline",65102,"lowlinecmb",818,"lowlinedashed",65101,"lozenge",9674,"lparen",9383,"lslash",322,"lsquare",8467,"lsuperior",63214,"ltshade",9617,"luthai",3622,"lvocalicbengali",2444,"lvocalicdeva",2316,"lvocalicvowelsignbengali",2530,"lvocalicvowelsigndeva",2402,"lxsquare",13267,"m",109,"mabengali",2478,"macron",175,"macronbelowcmb",817,"macroncmb",772,"macronlowmod",717,"macronmonospace",65507,"macute",7743,"madeva",2350,"magujarati",2734,"magurmukhi",2606,"mahapakhhebrew",1444,"mahapakhlefthebrew",1444,"mahiragana",12414,"maichattawalowleftthai",63637,"maichattawalowrightthai",63636,"maichattawathai",3659,"maichattawaupperleftthai",63635,"maieklowleftthai",63628,"maieklowrightthai",63627,"maiekthai",3656,"maiekupperleftthai",63626,"maihanakatleftthai",63620,"maihanakatthai",3633,"maitaikhuleftthai",63625,"maitaikhuthai",3655,"maitholowleftthai",63631,"maitholowrightthai",63630,"maithothai",3657,"maithoupperleftthai",63629,"maitrilowleftthai",63634,"maitrilowrightthai",63633,"maitrithai",3658,"maitriupperleftthai",63632,"maiyamokthai",3654,"makatakana",12510,"makatakanahalfwidth",65423,"male",9794,"mansyonsquare",13127,"maqafhebrew",1470,"mars",9794,"masoracirclehebrew",1455,"masquare",13187,"mbopomofo",12551,"mbsquare",13268,"mcircle",9436,"mcubedsquare",13221,"mdotaccent",7745,"mdotbelow",7747,"meemarabic",1605,"meemfinalarabic",65250,"meeminitialarabic",65251,"meemmedialarabic",65252,"meemmeeminitialarabic",64721,"meemmeemisolatedarabic",64584,"meetorusquare",13133,"mehiragana",12417,"meizierasquare",13182,"mekatakana",12513,"mekatakanahalfwidth",65426,"mem",1502,"memdagesh",64318,"memdageshhebrew",64318,"memhebrew",1502,"menarmenian",1396,"merkhahebrew",1445,"merkhakefulahebrew",1446,"merkhakefulalefthebrew",1446,"merkhalefthebrew",1445,"mhook",625,"mhzsquare",13202,"middledotkatakanahalfwidth",65381,"middot",183,"mieumacirclekorean",12914,"mieumaparenkorean",12818,"mieumcirclekorean",12900,"mieumkorean",12609,"mieumpansioskorean",12656,"mieumparenkorean",12804,"mieumpieupkorean",12654,"mieumsioskorean",12655,"mihiragana",12415,"mikatakana",12511,"mikatakanahalfwidth",65424,"minus",8722,"minusbelowcmb",800,"minuscircle",8854,"minusmod",727,"minusplus",8723,"minute",8242,"miribaarusquare",13130,"mirisquare",13129,"mlonglegturned",624,"mlsquare",13206,"mmcubedsquare",13219,"mmonospace",65357,"mmsquaredsquare",13215,"mohiragana",12418,"mohmsquare",13249,"mokatakana",12514,"mokatakanahalfwidth",65427,"molsquare",13270,"momathai",3617,"moverssquare",13223,"moverssquaredsquare",13224,"mparen",9384,"mpasquare",13227,"mssquare",13235,"msuperior",63215,"mturned",623,"mu",181,"mu1",181,"muasquare",13186,"muchgreater",8811,"muchless",8810,"mufsquare",13196,"mugreek",956,"mugsquare",13197,"muhiragana",12416,"mukatakana",12512,"mukatakanahalfwidth",65425,"mulsquare",13205,"multiply",215,"mumsquare",13211,"munahhebrew",1443,"munahlefthebrew",1443,"musicalnote",9834,"musicalnotedbl",9835,"musicflatsign",9837,"musicsharpsign",9839,"mussquare",13234,"muvsquare",13238,"muwsquare",13244,"mvmegasquare",13241,"mvsquare",13239,"mwmegasquare",13247,"mwsquare",13245,"n",110,"nabengali",2472,"nabla",8711,"nacute",324,"nadeva",2344,"nagujarati",2728,"nagurmukhi",2600,"nahiragana",12394,"nakatakana",12490,"nakatakanahalfwidth",65413,"napostrophe",329,"nasquare",13185,"nbopomofo",12555,"nbspace",160,"ncaron",328,"ncedilla",326,"ncircle",9437,"ncircumflexbelow",7755,"ncommaaccent",326,"ndotaccent",7749,"ndotbelow",7751,"nehiragana",12397,"nekatakana",12493,"nekatakanahalfwidth",65416,"newsheqelsign",8362,"nfsquare",13195,"ngabengali",2457,"ngadeva",2329,"ngagujarati",2713,"ngagurmukhi",2585,"ngonguthai",3591,"nhiragana",12435,"nhookleft",626,"nhookretroflex",627,"nieunacirclekorean",12911,"nieunaparenkorean",12815,"nieuncieuckorean",12597,"nieuncirclekorean",12897,"nieunhieuhkorean",12598,"nieunkorean",12596,"nieunpansioskorean",12648,"nieunparenkorean",12801,"nieunsioskorean",12647,"nieuntikeutkorean",12646,"nihiragana",12395,"nikatakana",12491,"nikatakanahalfwidth",65414,"nikhahitleftthai",63641,"nikhahitthai",3661,"nine",57,"ninearabic",1641,"ninebengali",2543,"ninecircle",9320,"ninecircleinversesansserif",10130,"ninedeva",2415,"ninegujarati",2799,"ninegurmukhi",2671,"ninehackarabic",1641,"ninehangzhou",12329,"nineideographicparen",12840,"nineinferior",8329,"ninemonospace",65305,"nineoldstyle",63289,"nineparen",9340,"nineperiod",9360,"ninepersian",1785,"nineroman",8568,"ninesuperior",8313,"nineteencircle",9330,"nineteenparen",9350,"nineteenperiod",9370,"ninethai",3673,"nj",460,"njecyrillic",1114,"nkatakana",12531,"nkatakanahalfwidth",65437,"nlegrightlong",414,"nlinebelow",7753,"nmonospace",65358,"nmsquare",13210,"nnabengali",2467,"nnadeva",2339,"nnagujarati",2723,"nnagurmukhi",2595,"nnnadeva",2345,"nohiragana",12398,"nokatakana",12494,"nokatakanahalfwidth",65417,"nonbreakingspace",160,"nonenthai",3603,"nonuthai",3609,"noonarabic",1606,"noonfinalarabic",65254,"noonghunnaarabic",1722,"noonghunnafinalarabic",64415,"nooninitialarabic",65255,"noonjeeminitialarabic",64722,"noonjeemisolatedarabic",64587,"noonmedialarabic",65256,"noonmeeminitialarabic",64725,"noonmeemisolatedarabic",64590,"noonnoonfinalarabic",64653,"notcontains",8716,"notelement",8713,"notelementof",8713,"notequal",8800,"notgreater",8815,"notgreaternorequal",8817,"notgreaternorless",8825,"notidentical",8802,"notless",8814,"notlessnorequal",8816,"notparallel",8742,"notprecedes",8832,"notsubset",8836,"notsucceeds",8833,"notsuperset",8837,"nowarmenian",1398,"nparen",9385,"nssquare",13233,"nsuperior",8319,"ntilde",241,"nu",957,"nuhiragana",12396,"nukatakana",12492,"nukatakanahalfwidth",65415,"nuktabengali",2492,"nuktadeva",2364,"nuktagujarati",2748,"nuktagurmukhi",2620,"numbersign",35,"numbersignmonospace",65283,"numbersignsmall",65119,"numeralsigngreek",884,"numeralsignlowergreek",885,"numero",8470,"nun",1504,"nundagesh",64320,"nundageshhebrew",64320,"nunhebrew",1504,"nvsquare",13237,"nwsquare",13243,"nyabengali",2462,"nyadeva",2334,"nyagujarati",2718,"nyagurmukhi",2590,"o",111,"oacute",243,"oangthai",3629,"obarred",629,"obarredcyrillic",1257,"obarreddieresiscyrillic",1259,"obengali",2451,"obopomofo",12571,"obreve",335,"ocandradeva",2321,"ocandragujarati",2705,"ocandravowelsigndeva",2377,"ocandravowelsigngujarati",2761,"ocaron",466,"ocircle",9438,"ocircumflex",244,"ocircumflexacute",7889,"ocircumflexdotbelow",7897,"ocircumflexgrave",7891,"ocircumflexhookabove",7893,"ocircumflextilde",7895,"ocyrillic",1086,"odblacute",337,"odblgrave",525,"odeva",2323,"odieresis",246,"odieresiscyrillic",1255,"odotbelow",7885,"oe",339,"oekorean",12634,"ogonek",731,"ogonekcmb",808,"ograve",242,"ogujarati",2707,"oharmenian",1413,"ohiragana",12362,"ohookabove",7887,"ohorn",417,"ohornacute",7899,"ohorndotbelow",7907,"ohorngrave",7901,"ohornhookabove",7903,"ohorntilde",7905,"ohungarumlaut",337,"oi",419,"oinvertedbreve",527,"okatakana",12458,"okatakanahalfwidth",65397,"okorean",12631,"olehebrew",1451,"omacron",333,"omacronacute",7763,"omacrongrave",7761,"omdeva",2384,"omega",969,"omega1",982,"omegacyrillic",1121,"omegalatinclosed",631,"omegaroundcyrillic",1147,"omegatitlocyrillic",1149,"omegatonos",974,"omgujarati",2768,"omicron",959,"omicrontonos",972,"omonospace",65359,"one",49,"onearabic",1633,"onebengali",2535,"onecircle",9312,"onecircleinversesansserif",10122,"onedeva",2407,"onedotenleader",8228,"oneeighth",8539,"onefitted",63196,"onegujarati",2791,"onegurmukhi",2663,"onehackarabic",1633,"onehalf",189,"onehangzhou",12321,"oneideographicparen",12832,"oneinferior",8321,"onemonospace",65297,"onenumeratorbengali",2548,"oneoldstyle",63281,"oneparen",9332,"oneperiod",9352,"onepersian",1777,"onequarter",188,"oneroman",8560,"onesuperior",185,"onethai",3665,"onethird",8531,"oogonek",491,"oogonekmacron",493,"oogurmukhi",2579,"oomatragurmukhi",2635,"oopen",596,"oparen",9386,"openbullet",9702,"option",8997,"ordfeminine",170,"ordmasculine",186,"orthogonal",8735,"oshortdeva",2322,"oshortvowelsigndeva",2378,"oslash",248,"oslashacute",511,"osmallhiragana",12361,"osmallkatakana",12457,"osmallkatakanahalfwidth",65387,"ostrokeacute",511,"osuperior",63216,"otcyrillic",1151,"otilde",245,"otildeacute",7757,"otildedieresis",7759,"oubopomofo",12577,"overline",8254,"overlinecenterline",65098,"overlinecmb",773,"overlinedashed",65097,"overlinedblwavy",65100,"overlinewavy",65099,"overscore",175,"ovowelsignbengali",2507,"ovowelsigndeva",2379,"ovowelsigngujarati",2763,"p",112,"paampssquare",13184,"paasentosquare",13099,"pabengali",2474,"pacute",7765,"padeva",2346,"pagedown",8671,"pageup",8670,"pagujarati",2730,"pagurmukhi",2602,"pahiragana",12401,"paiyannoithai",3631,"pakatakana",12497,"palatalizationcyrilliccmb",1156,"palochkacyrillic",1216,"pansioskorean",12671,"paragraph",182,"parallel",8741,"parenleft",40,"parenleftaltonearabic",64830,"parenleftbt",63725,"parenleftex",63724,"parenleftinferior",8333,"parenleftmonospace",65288,"parenleftsmall",65113,"parenleftsuperior",8317,"parenlefttp",63723,"parenleftvertical",65077,"parenright",41,"parenrightaltonearabic",64831,"parenrightbt",63736,"parenrightex",63735,"parenrightinferior",8334,"parenrightmonospace",65289,"parenrightsmall",65114,"parenrightsuperior",8318,"parenrighttp",63734,"parenrightvertical",65078,"partialdiff",8706,"paseqhebrew",1472,"pashtahebrew",1433,"pasquare",13225,"patah",1463,"patah11",1463,"patah1d",1463,"patah2a",1463,"patahhebrew",1463,"patahnarrowhebrew",1463,"patahquarterhebrew",1463,"patahwidehebrew",1463,"pazerhebrew",1441,"pbopomofo",12550,"pcircle",9439,"pdotaccent",7767,"pe",1508,"pecyrillic",1087,"pedagesh",64324,"pedageshhebrew",64324,"peezisquare",13115,"pefinaldageshhebrew",64323,"peharabic",1662,"peharmenian",1402,"pehebrew",1508,"pehfinalarabic",64343,"pehinitialarabic",64344,"pehiragana",12410,"pehmedialarabic",64345,"pekatakana",12506,"pemiddlehookcyrillic",1191,"perafehebrew",64334,"percent",37,"percentarabic",1642,"percentmonospace",65285,"percentsmall",65130,"period",46,"periodarmenian",1417,"periodcentered",183,"periodhalfwidth",65377,"periodinferior",63207,"periodmonospace",65294,"periodsmall",65106,"periodsuperior",63208,"perispomenigreekcmb",834,"perpendicular",8869,"perthousand",8240,"peseta",8359,"pfsquare",13194,"phabengali",2475,"phadeva",2347,"phagujarati",2731,"phagurmukhi",2603,"phi",966,"phi1",981,"phieuphacirclekorean",12922,"phieuphaparenkorean",12826,"phieuphcirclekorean",12908,"phieuphkorean",12621,"phieuphparenkorean",12812,"philatin",632,"phinthuthai",3642,"phisymbolgreek",981,"phook",421,"phophanthai",3614,"phophungthai",3612,"phosamphaothai",3616,"pi",960,"pieupacirclekorean",12915,"pieupaparenkorean",12819,"pieupcieuckorean",12662,"pieupcirclekorean",12901,"pieupkiyeokkorean",12658,"pieupkorean",12610,"pieupparenkorean",12805,"pieupsioskiyeokkorean",12660,"pieupsioskorean",12612,"pieupsiostikeutkorean",12661,"pieupthieuthkorean",12663,"pieuptikeutkorean",12659,"pihiragana",12404,"pikatakana",12500,"pisymbolgreek",982,"piwrarmenian",1411,"plus",43,"plusbelowcmb",799,"pluscircle",8853,"plusminus",177,"plusmod",726,"plusmonospace",65291,"plussmall",65122,"plussuperior",8314,"pmonospace",65360,"pmsquare",13272,"pohiragana",12413,"pointingindexdownwhite",9759,"pointingindexleftwhite",9756,"pointingindexrightwhite",9758,"pointingindexupwhite",9757,"pokatakana",12509,"poplathai",3611,"postalmark",12306,"postalmarkface",12320,"pparen",9387,"precedes",8826,"prescription",8478,"primemod",697,"primereversed",8245,"product",8719,"projective",8965,"prolongedkana",12540,"propellor",8984,"propersubset",8834,"propersuperset",8835,"proportion",8759,"proportional",8733,"psi",968,"psicyrillic",1137,"psilipneumatacyrilliccmb",1158,"pssquare",13232,"puhiragana",12407,"pukatakana",12503,"pvsquare",13236,"pwsquare",13242,"q",113,"qadeva",2392,"qadmahebrew",1448,"qafarabic",1602,"qaffinalarabic",65238,"qafinitialarabic",65239,"qafmedialarabic",65240,"qamats",1464,"qamats10",1464,"qamats1a",1464,"qamats1c",1464,"qamats27",1464,"qamats29",1464,"qamats33",1464,"qamatsde",1464,"qamatshebrew",1464,"qamatsnarrowhebrew",1464,"qamatsqatanhebrew",1464,"qamatsqatannarrowhebrew",1464,"qamatsqatanquarterhebrew",1464,"qamatsqatanwidehebrew",1464,"qamatsquarterhebrew",1464,"qamatswidehebrew",1464,"qarneyparahebrew",1439,"qbopomofo",12561,"qcircle",9440,"qhook",672,"qmonospace",65361,"qof",1511,"qofdagesh",64327,"qofdageshhebrew",64327,"qofhebrew",1511,"qparen",9388,"quarternote",9833,"qubuts",1467,"qubuts18",1467,"qubuts25",1467,"qubuts31",1467,"qubutshebrew",1467,"qubutsnarrowhebrew",1467,"qubutsquarterhebrew",1467,"qubutswidehebrew",1467,"question",63,"questionarabic",1567,"questionarmenian",1374,"questiondown",191,"questiondownsmall",63423,"questiongreek",894,"questionmonospace",65311,"questionsmall",63295,"quotedbl",34,"quotedblbase",8222,"quotedblleft",8220,"quotedblmonospace",65282,"quotedblprime",12318,"quotedblprimereversed",12317,"quotedblright",8221,"quoteleft",8216,"quoteleftreversed",8219,"quotereversed",8219,"quoteright",8217,"quoterightn",329,"quotesinglbase",8218,"quotesingle",39,"quotesinglemonospace",65287,"r",114,"raarmenian",1404,"rabengali",2480,"racute",341,"radeva",2352,"radical",8730,"radicalex",63717,"radoverssquare",13230,"radoverssquaredsquare",13231,"radsquare",13229,"rafe",1471,"rafehebrew",1471,"ragujarati",2736,"ragurmukhi",2608,"rahiragana",12425,"rakatakana",12521,"rakatakanahalfwidth",65431,"ralowerdiagonalbengali",2545,"ramiddlediagonalbengali",2544,"ramshorn",612,"ratio",8758,"rbopomofo",12566,"rcaron",345,"rcedilla",343,"rcircle",9441,"rcommaaccent",343,"rdblgrave",529,"rdotaccent",7769,"rdotbelow",7771,"rdotbelowmacron",7773,"referencemark",8251,"reflexsubset",8838,"reflexsuperset",8839,"registered",174,"registersans",63720,"registerserif",63194,"reharabic",1585,"reharmenian",1408,"rehfinalarabic",65198,"rehiragana",12428,"rekatakana",12524,"rekatakanahalfwidth",65434,"resh",1512,"reshdageshhebrew",64328,"reshhebrew",1512,"reversedtilde",8765,"reviahebrew",1431,"reviamugrashhebrew",1431,"revlogicalnot",8976,"rfishhook",638,"rfishhookreversed",639,"rhabengali",2525,"rhadeva",2397,"rho",961,"rhook",637,"rhookturned",635,"rhookturnedsuperior",693,"rhosymbolgreek",1009,"rhotichookmod",734,"rieulacirclekorean",12913,"rieulaparenkorean",12817,"rieulcirclekorean",12899,"rieulhieuhkorean",12608,"rieulkiyeokkorean",12602,"rieulkiyeoksioskorean",12649,"rieulkorean",12601,"rieulmieumkorean",12603,"rieulpansioskorean",12652,"rieulparenkorean",12803,"rieulphieuphkorean",12607,"rieulpieupkorean",12604,"rieulpieupsioskorean",12651,"rieulsioskorean",12605,"rieulthieuthkorean",12606,"rieultikeutkorean",12650,"rieulyeorinhieuhkorean",12653,"rightangle",8735,"righttackbelowcmb",793,"righttriangle",8895,"rihiragana",12426,"rikatakana",12522,"rikatakanahalfwidth",65432,"ring",730,"ringbelowcmb",805,"ringcmb",778,"ringhalfleft",703,"ringhalfleftarmenian",1369,"ringhalfleftbelowcmb",796,"ringhalfleftcentered",723,"ringhalfright",702,"ringhalfrightbelowcmb",825,"ringhalfrightcentered",722,"rinvertedbreve",531,"rittorusquare",13137,"rlinebelow",7775,"rlongleg",636,"rlonglegturned",634,"rmonospace",65362,"rohiragana",12429,"rokatakana",12525,"rokatakanahalfwidth",65435,"roruathai",3619,"rparen",9389,"rrabengali",2524,"rradeva",2353,"rragurmukhi",2652,"rreharabic",1681,"rrehfinalarabic",64397,"rrvocalicbengali",2528,"rrvocalicdeva",2400,"rrvocalicgujarati",2784,"rrvocalicvowelsignbengali",2500,"rrvocalicvowelsigndeva",2372,"rrvocalicvowelsigngujarati",2756,"rsuperior",63217,"rtblock",9616,"rturned",633,"rturnedsuperior",692,"ruhiragana",12427,"rukatakana",12523,"rukatakanahalfwidth",65433,"rupeemarkbengali",2546,"rupeesignbengali",2547,"rupiah",63197,"ruthai",3620,"rvocalicbengali",2443,"rvocalicdeva",2315,"rvocalicgujarati",2699,"rvocalicvowelsignbengali",2499,"rvocalicvowelsigndeva",2371,"rvocalicvowelsigngujarati",2755,"s",115,"sabengali",2488,"sacute",347,"sacutedotaccent",7781,"sadarabic",1589,"sadeva",2360,"sadfinalarabic",65210,"sadinitialarabic",65211,"sadmedialarabic",65212,"sagujarati",2744,"sagurmukhi",2616,"sahiragana",12373,"sakatakana",12469,"sakatakanahalfwidth",65403,"sallallahoualayhewasallamarabic",65018,"samekh",1505,"samekhdagesh",64321,"samekhdageshhebrew",64321,"samekhhebrew",1505,"saraaathai",3634,"saraaethai",3649,"saraaimaimalaithai",3652,"saraaimaimuanthai",3651,"saraamthai",3635,"saraathai",3632,"saraethai",3648,"saraiileftthai",63622,"saraiithai",3637,"saraileftthai",63621,"saraithai",3636,"saraothai",3650,"saraueeleftthai",63624,"saraueethai",3639,"saraueleftthai",63623,"sarauethai",3638,"sarauthai",3640,"sarauuthai",3641,"sbopomofo",12569,"scaron",353,"scarondotaccent",7783,"scedilla",351,"schwa",601,"schwacyrillic",1241,"schwadieresiscyrillic",1243,"schwahook",602,"scircle",9442,"scircumflex",349,"scommaaccent",537,"sdotaccent",7777,"sdotbelow",7779,"sdotbelowdotaccent",7785,"seagullbelowcmb",828,"second",8243,"secondtonechinese",714,"section",167,"seenarabic",1587,"seenfinalarabic",65202,"seeninitialarabic",65203,"seenmedialarabic",65204,"segol",1462,"segol13",1462,"segol1f",1462,"segol2c",1462,"segolhebrew",1462,"segolnarrowhebrew",1462,"segolquarterhebrew",1462,"segoltahebrew",1426,"segolwidehebrew",1462,"seharmenian",1405,"sehiragana",12379,"sekatakana",12475,"sekatakanahalfwidth",65406,"semicolon",59,"semicolonarabic",1563,"semicolonmonospace",65307,"semicolonsmall",65108,"semivoicedmarkkana",12444,"semivoicedmarkkanahalfwidth",65439,"sentisquare",13090,"sentosquare",13091,"seven",55,"sevenarabic",1639,"sevenbengali",2541,"sevencircle",9318,"sevencircleinversesansserif",10128,"sevendeva",2413,"seveneighths",8542,"sevengujarati",2797,"sevengurmukhi",2669,"sevenhackarabic",1639,"sevenhangzhou",12327,"sevenideographicparen",12838,"seveninferior",8327,"sevenmonospace",65303,"sevenoldstyle",63287,"sevenparen",9338,"sevenperiod",9358,"sevenpersian",1783,"sevenroman",8566,"sevensuperior",8311,"seventeencircle",9328,"seventeenparen",9348,"seventeenperiod",9368,"seventhai",3671,"sfthyphen",173,"shaarmenian",1399,"shabengali",2486,"shacyrillic",1096,"shaddaarabic",1617,"shaddadammaarabic",64609,"shaddadammatanarabic",64606,"shaddafathaarabic",64608,"shaddakasraarabic",64610,"shaddakasratanarabic",64607,"shade",9618,"shadedark",9619,"shadelight",9617,"shademedium",9618,"shadeva",2358,"shagujarati",2742,"shagurmukhi",2614,"shalshelethebrew",1427,"shbopomofo",12565,"shchacyrillic",1097,"sheenarabic",1588,"sheenfinalarabic",65206,"sheeninitialarabic",65207,"sheenmedialarabic",65208,"sheicoptic",995,"sheqel",8362,"sheqelhebrew",8362,"sheva",1456,"sheva115",1456,"sheva15",1456,"sheva22",1456,"sheva2e",1456,"shevahebrew",1456,"shevanarrowhebrew",1456,"shevaquarterhebrew",1456,"shevawidehebrew",1456,"shhacyrillic",1211,"shimacoptic",1005,"shin",1513,"shindagesh",64329,"shindageshhebrew",64329,"shindageshshindot",64300,"shindageshshindothebrew",64300,"shindageshsindot",64301,"shindageshsindothebrew",64301,"shindothebrew",1473,"shinhebrew",1513,"shinshindot",64298,"shinshindothebrew",64298,"shinsindot",64299,"shinsindothebrew",64299,"shook",642,"sigma",963,"sigma1",962,"sigmafinal",962,"sigmalunatesymbolgreek",1010,"sihiragana",12375,"sikatakana",12471,"sikatakanahalfwidth",65404,"siluqhebrew",1469,"siluqlefthebrew",1469,"similar",8764,"sindothebrew",1474,"siosacirclekorean",12916,"siosaparenkorean",12820,"sioscieuckorean",12670,"sioscirclekorean",12902,"sioskiyeokkorean",12666,"sioskorean",12613,"siosnieunkorean",12667,"siosparenkorean",12806,"siospieupkorean",12669,"siostikeutkorean",12668,"six",54,"sixarabic",1638,"sixbengali",2540,"sixcircle",9317,"sixcircleinversesansserif",10127,"sixdeva",2412,"sixgujarati",2796,"sixgurmukhi",2668,"sixhackarabic",1638,"sixhangzhou",12326,"sixideographicparen",12837,"sixinferior",8326,"sixmonospace",65302,"sixoldstyle",63286,"sixparen",9337,"sixperiod",9357,"sixpersian",1782,"sixroman",8565,"sixsuperior",8310,"sixteencircle",9327,"sixteencurrencydenominatorbengali",2553,"sixteenparen",9347,"sixteenperiod",9367,"sixthai",3670,"slash",47,"slashmonospace",65295,"slong",383,"slongdotaccent",7835,"smileface",9786,"smonospace",65363,"sofpasuqhebrew",1475,"softhyphen",173,"softsigncyrillic",1100,"sohiragana",12381,"sokatakana",12477,"sokatakanahalfwidth",65407,"soliduslongoverlaycmb",824,"solidusshortoverlaycmb",823,"sorusithai",3625,"sosalathai",3624,"sosothai",3595,"sosuathai",3626,"space",32,"spacehackarabic",32,"spade",9824,"spadesuitblack",9824,"spadesuitwhite",9828,"sparen",9390,"squarebelowcmb",827,"squarecc",13252,"squarecm",13213,"squarediagonalcrosshatchfill",9641,"squarehorizontalfill",9636,"squarekg",13199,"squarekm",13214,"squarekmcapital",13262,"squareln",13265,"squarelog",13266,"squaremg",13198,"squaremil",13269,"squaremm",13212,"squaremsquared",13217,"squareorthogonalcrosshatchfill",9638,"squareupperlefttolowerrightfill",9639,"squareupperrighttolowerleftfill",9640,"squareverticalfill",9637,"squarewhitewithsmallblack",9635,"srsquare",13275,"ssabengali",2487,"ssadeva",2359,"ssagujarati",2743,"ssangcieuckorean",12617,"ssanghieuhkorean",12677,"ssangieungkorean",12672,"ssangkiyeokkorean",12594,"ssangnieunkorean",12645,"ssangpieupkorean",12611,"ssangsioskorean",12614,"ssangtikeutkorean",12600,"ssuperior",63218,"sterling",163,"sterlingmonospace",65505,"strokelongoverlaycmb",822,"strokeshortoverlaycmb",821,"subset",8834,"subsetnotequal",8842,"subsetorequal",8838,"succeeds",8827,"suchthat",8715,"suhiragana",12377,"sukatakana",12473,"sukatakanahalfwidth",65405,"sukunarabic",1618,"summation",8721,"sun",9788,"superset",8835,"supersetnotequal",8843,"supersetorequal",8839,"svsquare",13276,"syouwaerasquare",13180,"t",116,"tabengali",2468,"tackdown",8868,"tackleft",8867,"tadeva",2340,"tagujarati",2724,"tagurmukhi",2596,"taharabic",1591,"tahfinalarabic",65218,"tahinitialarabic",65219,"tahiragana",12383,"tahmedialarabic",65220,"taisyouerasquare",13181,"takatakana",12479,"takatakanahalfwidth",65408,"tatweelarabic",1600,"tau",964,"tav",1514,"tavdages",64330,"tavdagesh",64330,"tavdageshhebrew",64330,"tavhebrew",1514,"tbar",359,"tbopomofo",12554,"tcaron",357,"tccurl",680,"tcedilla",355,"tcheharabic",1670,"tchehfinalarabic",64379,"tchehinitialarabic",64380,"tchehmedialarabic",64381,"tcircle",9443,"tcircumflexbelow",7793,"tcommaaccent",355,"tdieresis",7831,"tdotaccent",7787,"tdotbelow",7789,"tecyrillic",1090,"tedescendercyrillic",1197,"teharabic",1578,"tehfinalarabic",65174,"tehhahinitialarabic",64674,"tehhahisolatedarabic",64524,"tehinitialarabic",65175,"tehiragana",12390,"tehjeeminitialarabic",64673,"tehjeemisolatedarabic",64523,"tehmarbutaarabic",1577,"tehmarbutafinalarabic",65172,"tehmedialarabic",65176,"tehmeeminitialarabic",64676,"tehmeemisolatedarabic",64526,"tehnoonfinalarabic",64627,"tekatakana",12486,"tekatakanahalfwidth",65411,"telephone",8481,"telephoneblack",9742,"telishagedolahebrew",1440,"telishaqetanahebrew",1449,"tencircle",9321,"tenideographicparen",12841,"tenparen",9341,"tenperiod",9361,"tenroman",8569,"tesh",679,"tet",1496,"tetdagesh",64312,"tetdageshhebrew",64312,"tethebrew",1496,"tetsecyrillic",1205,"tevirhebrew",1435,"tevirlefthebrew",1435,"thabengali",2469,"thadeva",2341,"thagujarati",2725,"thagurmukhi",2597,"thalarabic",1584,"thalfinalarabic",65196,"thanthakhatlowleftthai",63640,"thanthakhatlowrightthai",63639,"thanthakhatthai",3660,"thanthakhatupperleftthai",63638,"theharabic",1579,"thehfinalarabic",65178,"thehinitialarabic",65179,"thehmedialarabic",65180,"thereexists",8707,"therefore",8756,"theta",952,"theta1",977,"thetasymbolgreek",977,"thieuthacirclekorean",12921,"thieuthaparenkorean",12825,"thieuthcirclekorean",12907,"thieuthkorean",12620,"thieuthparenkorean",12811,"thirteencircle",9324,"thirteenparen",9344,"thirteenperiod",9364,"thonangmonthothai",3601,"thook",429,"thophuthaothai",3602,"thorn",254,"thothahanthai",3607,"thothanthai",3600,"thothongthai",3608,"thothungthai",3606,"thousandcyrillic",1154,"thousandsseparatorarabic",1644,"thousandsseparatorpersian",1644,"three",51,"threearabic",1635,"threebengali",2537,"threecircle",9314,"threecircleinversesansserif",10124,"threedeva",2409,"threeeighths",8540,"threegujarati",2793,"threegurmukhi",2665,"threehackarabic",1635,"threehangzhou",12323,"threeideographicparen",12834,"threeinferior",8323,"threemonospace",65299,"threenumeratorbengali",2550,"threeoldstyle",63283,"threeparen",9334,"threeperiod",9354,"threepersian",1779,"threequarters",190,"threequartersemdash",63198,"threeroman",8562,"threesuperior",179,"threethai",3667,"thzsquare",13204,"tihiragana",12385,"tikatakana",12481,"tikatakanahalfwidth",65409,"tikeutacirclekorean",12912,"tikeutaparenkorean",12816,"tikeutcirclekorean",12898,"tikeutkorean",12599,"tikeutparenkorean",12802,"tilde",732,"tildebelowcmb",816,"tildecmb",771,"tildecomb",771,"tildedoublecmb",864,"tildeoperator",8764,"tildeoverlaycmb",820,"tildeverticalcmb",830,"timescircle",8855,"tipehahebrew",1430,"tipehalefthebrew",1430,"tippigurmukhi",2672,"titlocyrilliccmb",1155,"tiwnarmenian",1407,"tlinebelow",7791,"tmonospace",65364,"toarmenian",1385,"tohiragana",12392,"tokatakana",12488,"tokatakanahalfwidth",65412,"tonebarextrahighmod",741,"tonebarextralowmod",745,"tonebarhighmod",742,"tonebarlowmod",744,"tonebarmidmod",743,"tonefive",445,"tonesix",389,"tonetwo",424,"tonos",900,"tonsquare",13095,"topatakthai",3599,"tortoiseshellbracketleft",12308,"tortoiseshellbracketleftsmall",65117,"tortoiseshellbracketleftvertical",65081,"tortoiseshellbracketright",12309,"tortoiseshellbracketrightsmall",65118,"tortoiseshellbracketrightvertical",65082,"totaothai",3605,"tpalatalhook",427,"tparen",9391,"trademark",8482,"trademarksans",63722,"trademarkserif",63195,"tretroflexhook",648,"triagdn",9660,"triaglf",9668,"triagrt",9658,"triagup",9650,"ts",678,"tsadi",1510,"tsadidagesh",64326,"tsadidageshhebrew",64326,"tsadihebrew",1510,"tsecyrillic",1094,"tsere",1461,"tsere12",1461,"tsere1e",1461,"tsere2b",1461,"tserehebrew",1461,"tserenarrowhebrew",1461,"tserequarterhebrew",1461,"tserewidehebrew",1461,"tshecyrillic",1115,"tsuperior",63219,"ttabengali",2463,"ttadeva",2335,"ttagujarati",2719,"ttagurmukhi",2591,"tteharabic",1657,"ttehfinalarabic",64359,"ttehinitialarabic",64360,"ttehmedialarabic",64361,"tthabengali",2464,"tthadeva",2336,"tthagujarati",2720,"tthagurmukhi",2592,"tturned",647,"tuhiragana",12388,"tukatakana",12484,"tukatakanahalfwidth",65410,"tusmallhiragana",12387,"tusmallkatakana",12483,"tusmallkatakanahalfwidth",65391,"twelvecircle",9323,"twelveparen",9343,"twelveperiod",9363,"twelveroman",8571,"twentycircle",9331,"twentyhangzhou",21316,"twentyparen",9351,"twentyperiod",9371,"two",50,"twoarabic",1634,"twobengali",2536,"twocircle",9313,"twocircleinversesansserif",10123,"twodeva",2408,"twodotenleader",8229,"twodotleader",8229,"twodotleadervertical",65072,"twogujarati",2792,"twogurmukhi",2664,"twohackarabic",1634,"twohangzhou",12322,"twoideographicparen",12833,"twoinferior",8322,"twomonospace",65298,"twonumeratorbengali",2549,"twooldstyle",63282,"twoparen",9333,"twoperiod",9353,"twopersian",1778,"tworoman",8561,"twostroke",443,"twosuperior",178,"twothai",3666,"twothirds",8532,"u",117,"uacute",250,"ubar",649,"ubengali",2441,"ubopomofo",12584,"ubreve",365,"ucaron",468,"ucircle",9444,"ucircumflex",251,"ucircumflexbelow",7799,"ucyrillic",1091,"udattadeva",2385,"udblacute",369,"udblgrave",533,"udeva",2313,"udieresis",252,"udieresisacute",472,"udieresisbelow",7795,"udieresiscaron",474,"udieresiscyrillic",1265,"udieresisgrave",476,"udieresismacron",470,"udotbelow",7909,"ugrave",249,"ugujarati",2697,"ugurmukhi",2569,"uhiragana",12358,"uhookabove",7911,"uhorn",432,"uhornacute",7913,"uhorndotbelow",7921,"uhorngrave",7915,"uhornhookabove",7917,"uhorntilde",7919,"uhungarumlaut",369,"uhungarumlautcyrillic",1267,"uinvertedbreve",535,"ukatakana",12454,"ukatakanahalfwidth",65395,"ukcyrillic",1145,"ukorean",12636,"umacron",363,"umacroncyrillic",1263,"umacrondieresis",7803,"umatragurmukhi",2625,"umonospace",65365,"underscore",95,"underscoredbl",8215,"underscoremonospace",65343,"underscorevertical",65075,"underscorewavy",65103,"union",8746,"universal",8704,"uogonek",371,"uparen",9392,"upblock",9600,"upperdothebrew",1476,"upsilon",965,"upsilondieresis",971,"upsilondieresistonos",944,"upsilonlatin",650,"upsilontonos",973,"uptackbelowcmb",797,"uptackmod",724,"uragurmukhi",2675,"uring",367,"ushortcyrillic",1118,"usmallhiragana",12357,"usmallkatakana",12453,"usmallkatakanahalfwidth",65385,"ustraightcyrillic",1199,"ustraightstrokecyrillic",1201,"utilde",361,"utildeacute",7801,"utildebelow",7797,"uubengali",2442,"uudeva",2314,"uugujarati",2698,"uugurmukhi",2570,"uumatragurmukhi",2626,"uuvowelsignbengali",2498,"uuvowelsigndeva",2370,"uuvowelsigngujarati",2754,"uvowelsignbengali",2497,"uvowelsigndeva",2369,"uvowelsigngujarati",2753,"v",118,"vadeva",2357,"vagujarati",2741,"vagurmukhi",2613,"vakatakana",12535,"vav",1493,"vavdagesh",64309,"vavdagesh65",64309,"vavdageshhebrew",64309,"vavhebrew",1493,"vavholam",64331,"vavholamhebrew",64331,"vavvavhebrew",1520,"vavyodhebrew",1521,"vcircle",9445,"vdotbelow",7807,"vecyrillic",1074,"veharabic",1700,"vehfinalarabic",64363,"vehinitialarabic",64364,"vehmedialarabic",64365,"vekatakana",12537,"venus",9792,"verticalbar",124,"verticallineabovecmb",781,"verticallinebelowcmb",809,"verticallinelowmod",716,"verticallinemod",712,"vewarmenian",1406,"vhook",651,"vikatakana",12536,"viramabengali",2509,"viramadeva",2381,"viramagujarati",2765,"visargabengali",2435,"visargadeva",2307,"visargagujarati",2691,"vmonospace",65366,"voarmenian",1400,"voicediterationhiragana",12446,"voicediterationkatakana",12542,"voicedmarkkana",12443,"voicedmarkkanahalfwidth",65438,"vokatakana",12538,"vparen",9393,"vtilde",7805,"vturned",652,"vuhiragana",12436,"vukatakana",12532,"w",119,"wacute",7811,"waekorean",12633,"wahiragana",12431,"wakatakana",12527,"wakatakanahalfwidth",65436,"wakorean",12632,"wasmallhiragana",12430,"wasmallkatakana",12526,"wattosquare",13143,"wavedash",12316,"wavyunderscorevertical",65076,"wawarabic",1608,"wawfinalarabic",65262,"wawhamzaabovearabic",1572,"wawhamzaabovefinalarabic",65158,"wbsquare",13277,"wcircle",9446,"wcircumflex",373,"wdieresis",7813,"wdotaccent",7815,"wdotbelow",7817,"wehiragana",12433,"weierstrass",8472,"wekatakana",12529,"wekorean",12638,"weokorean",12637,"wgrave",7809,"whitebullet",9702,"whitecircle",9675,"whitecircleinverse",9689,"whitecornerbracketleft",12302,"whitecornerbracketleftvertical",65091,"whitecornerbracketright",12303,"whitecornerbracketrightvertical",65092,"whitediamond",9671,"whitediamondcontainingblacksmalldiamond",9672,"whitedownpointingsmalltriangle",9663,"whitedownpointingtriangle",9661,"whiteleftpointingsmalltriangle",9667,"whiteleftpointingtriangle",9665,"whitelenticularbracketleft",12310,"whitelenticularbracketright",12311,"whiterightpointingsmalltriangle",9657,"whiterightpointingtriangle",9655,"whitesmallsquare",9643,"whitesmilingface",9786,"whitesquare",9633,"whitestar",9734,"whitetelephone",9743,"whitetortoiseshellbracketleft",12312,"whitetortoiseshellbracketright",12313,"whiteuppointingsmalltriangle",9653,"whiteuppointingtriangle",9651,"wihiragana",12432,"wikatakana",12528,"wikorean",12639,"wmonospace",65367,"wohiragana",12434,"wokatakana",12530,"wokatakanahalfwidth",65382,"won",8361,"wonmonospace",65510,"wowaenthai",3623,"wparen",9394,"wring",7832,"wsuperior",695,"wturned",653,"wynn",447,"x",120,"xabovecmb",829,"xbopomofo",12562,"xcircle",9447,"xdieresis",7821,"xdotaccent",7819,"xeharmenian",1389,"xi",958,"xmonospace",65368,"xparen",9395,"xsuperior",739,"y",121,"yaadosquare",13134,"yabengali",2479,"yacute",253,"yadeva",2351,"yaekorean",12626,"yagujarati",2735,"yagurmukhi",2607,"yahiragana",12420,"yakatakana",12516,"yakatakanahalfwidth",65428,"yakorean",12625,"yamakkanthai",3662,"yasmallhiragana",12419,"yasmallkatakana",12515,"yasmallkatakanahalfwidth",65388,"yatcyrillic",1123,"ycircle",9448,"ycircumflex",375,"ydieresis",255,"ydotaccent",7823,"ydotbelow",7925,"yeharabic",1610,"yehbarreearabic",1746,"yehbarreefinalarabic",64431,"yehfinalarabic",65266,"yehhamzaabovearabic",1574,"yehhamzaabovefinalarabic",65162,"yehhamzaaboveinitialarabic",65163,"yehhamzaabovemedialarabic",65164,"yehinitialarabic",65267,"yehmedialarabic",65268,"yehmeeminitialarabic",64733,"yehmeemisolatedarabic",64600,"yehnoonfinalarabic",64660,"yehthreedotsbelowarabic",1745,"yekorean",12630,"yen",165,"yenmonospace",65509,"yeokorean",12629,"yeorinhieuhkorean",12678,"yerahbenyomohebrew",1450,"yerahbenyomolefthebrew",1450,"yericyrillic",1099,"yerudieresiscyrillic",1273,"yesieungkorean",12673,"yesieungpansioskorean",12675,"yesieungsioskorean",12674,"yetivhebrew",1434,"ygrave",7923,"yhook",436,"yhookabove",7927,"yiarmenian",1397,"yicyrillic",1111,"yikorean",12642,"yinyang",9775,"yiwnarmenian",1410,"ymonospace",65369,"yod",1497,"yoddagesh",64313,"yoddageshhebrew",64313,"yodhebrew",1497,"yodyodhebrew",1522,"yodyodpatahhebrew",64287,"yohiragana",12424,"yoikorean",12681,"yokatakana",12520,"yokatakanahalfwidth",65430,"yokorean",12635,"yosmallhiragana",12423,"yosmallkatakana",12519,"yosmallkatakanahalfwidth",65390,"yotgreek",1011,"yoyaekorean",12680,"yoyakorean",12679,"yoyakthai",3618,"yoyingthai",3597,"yparen",9396,"ypogegrammeni",890,"ypogegrammenigreekcmb",837,"yr",422,"yring",7833,"ysuperior",696,"ytilde",7929,"yturned",654,"yuhiragana",12422,"yuikorean",12684,"yukatakana",12518,"yukatakanahalfwidth",65429,"yukorean",12640,"yusbigcyrillic",1131,"yusbigiotifiedcyrillic",1133,"yuslittlecyrillic",1127,"yuslittleiotifiedcyrillic",1129,"yusmallhiragana",12421,"yusmallkatakana",12517,"yusmallkatakanahalfwidth",65389,"yuyekorean",12683,"yuyeokorean",12682,"yyabengali",2527,"yyadeva",2399,"z",122,"zaarmenian",1382,"zacute",378,"zadeva",2395,"zagurmukhi",2651,"zaharabic",1592,"zahfinalarabic",65222,"zahinitialarabic",65223,"zahiragana",12374,"zahmedialarabic",65224,"zainarabic",1586,"zainfinalarabic",65200,"zakatakana",12470,"zaqefgadolhebrew",1429,"zaqefqatanhebrew",1428,"zarqahebrew",1432,"zayin",1494,"zayindagesh",64310,"zayindageshhebrew",64310,"zayinhebrew",1494,"zbopomofo",12567,"zcaron",382,"zcircle",9449,"zcircumflex",7825,"zcurl",657,"zdot",380,"zdotaccent",380,"zdotbelow",7827,"zecyrillic",1079,"zedescendercyrillic",1177,"zedieresiscyrillic",1247,"zehiragana",12380,"zekatakana",12476,"zero",48,"zeroarabic",1632,"zerobengali",2534,"zerodeva",2406,"zerogujarati",2790,"zerogurmukhi",2662,"zerohackarabic",1632,"zeroinferior",8320,"zeromonospace",65296,"zerooldstyle",63280,"zeropersian",1776,"zerosuperior",8304,"zerothai",3664,"zerowidthjoiner",65279,"zerowidthnonjoiner",8204,"zerowidthspace",8203,"zeta",950,"zhbopomofo",12563,"zhearmenian",1386,"zhebrevecyrillic",1218,"zhecyrillic",1078,"zhedescendercyrillic",1175,"zhedieresiscyrillic",1245,"zihiragana",12376,"zikatakana",12472,"zinorhebrew",1454,"zlinebelow",7829,"zmonospace",65370,"zohiragana",12382,"zokatakana",12478,"zparen",9397,"zretroflexhook",656,"zstroke",438,"zuhiragana",12378,"zukatakana",12474,".notdef",0,"angbracketleftbig",9001,"angbracketleftBig",9001,"angbracketleftbigg",9001,"angbracketleftBigg",9001,"angbracketrightBig",9002,"angbracketrightbig",9002,"angbracketrightBigg",9002,"angbracketrightbigg",9002,"arrowhookleft",8618,"arrowhookright",8617,"arrowlefttophalf",8636,"arrowleftbothalf",8637,"arrownortheast",8599,"arrownorthwest",8598,"arrowrighttophalf",8640,"arrowrightbothalf",8641,"arrowsoutheast",8600,"arrowsouthwest",8601,"backslashbig",8726,"backslashBig",8726,"backslashBigg",8726,"backslashbigg",8726,"bardbl",8214,"bracehtipdownleft",65079,"bracehtipdownright",65079,"bracehtipupleft",65080,"bracehtipupright",65080,"braceleftBig",123,"braceleftbig",123,"braceleftbigg",123,"braceleftBigg",123,"bracerightBig",125,"bracerightbig",125,"bracerightbigg",125,"bracerightBigg",125,"bracketleftbig",91,"bracketleftBig",91,"bracketleftbigg",91,"bracketleftBigg",91,"bracketrightBig",93,"bracketrightbig",93,"bracketrightbigg",93,"bracketrightBigg",93,"ceilingleftbig",8968,"ceilingleftBig",8968,"ceilingleftBigg",8968,"ceilingleftbigg",8968,"ceilingrightbig",8969,"ceilingrightBig",8969,"ceilingrightbigg",8969,"ceilingrightBigg",8969,"circledotdisplay",8857,"circledottext",8857,"circlemultiplydisplay",8855,"circlemultiplytext",8855,"circleplusdisplay",8853,"circleplustext",8853,"contintegraldisplay",8750,"contintegraltext",8750,"coproductdisplay",8720,"coproducttext",8720,"floorleftBig",8970,"floorleftbig",8970,"floorleftbigg",8970,"floorleftBigg",8970,"floorrightbig",8971,"floorrightBig",8971,"floorrightBigg",8971,"floorrightbigg",8971,"hatwide",770,"hatwider",770,"hatwidest",770,"intercal",7488,"integraldisplay",8747,"integraltext",8747,"intersectiondisplay",8898,"intersectiontext",8898,"logicalanddisplay",8743,"logicalandtext",8743,"logicalordisplay",8744,"logicalortext",8744,"parenleftBig",40,"parenleftbig",40,"parenleftBigg",40,"parenleftbigg",40,"parenrightBig",41,"parenrightbig",41,"parenrightBigg",41,"parenrightbigg",41,"prime",8242,"productdisplay",8719,"producttext",8719,"radicalbig",8730,"radicalBig",8730,"radicalBigg",8730,"radicalbigg",8730,"radicalbt",8730,"radicaltp",8730,"radicalvertex",8730,"slashbig",47,"slashBig",47,"slashBigg",47,"slashbigg",47,"summationdisplay",8721,"summationtext",8721,"tildewide",732,"tildewider",732,"tildewidest",732,"uniondisplay",8899,"unionmultidisplay",8846,"unionmultitext",8846,"unionsqdisplay",8852,"unionsqtext",8852,"uniontext",8899,"vextenddouble",8741,"vextendsingle",8739]})),i=(0,n.getArrayLookupTableFactory)((function(){return["space",32,"a1",9985,"a2",9986,"a202",9987,"a3",9988,"a4",9742,"a5",9990,"a119",9991,"a118",9992,"a117",9993,"a11",9755,"a12",9758,"a13",9996,"a14",9997,"a15",9998,"a16",9999,"a105",1e4,"a17",10001,"a18",10002,"a19",10003,"a20",10004,"a21",10005,"a22",10006,"a23",10007,"a24",10008,"a25",10009,"a26",10010,"a27",10011,"a28",10012,"a6",10013,"a7",10014,"a8",10015,"a9",10016,"a10",10017,"a29",10018,"a30",10019,"a31",10020,"a32",10021,"a33",10022,"a34",10023,"a35",9733,"a36",10025,"a37",10026,"a38",10027,"a39",10028,"a40",10029,"a41",10030,"a42",10031,"a43",10032,"a44",10033,"a45",10034,"a46",10035,"a47",10036,"a48",10037,"a49",10038,"a50",10039,"a51",10040,"a52",10041,"a53",10042,"a54",10043,"a55",10044,"a56",10045,"a57",10046,"a58",10047,"a59",10048,"a60",10049,"a61",10050,"a62",10051,"a63",10052,"a64",10053,"a65",10054,"a66",10055,"a67",10056,"a68",10057,"a69",10058,"a70",10059,"a71",9679,"a72",10061,"a73",9632,"a74",10063,"a203",10064,"a75",10065,"a204",10066,"a76",9650,"a77",9660,"a78",9670,"a79",10070,"a81",9687,"a82",10072,"a83",10073,"a84",10074,"a97",10075,"a98",10076,"a99",10077,"a100",10078,"a101",10081,"a102",10082,"a103",10083,"a104",10084,"a106",10085,"a107",10086,"a108",10087,"a112",9827,"a111",9830,"a110",9829,"a109",9824,"a120",9312,"a121",9313,"a122",9314,"a123",9315,"a124",9316,"a125",9317,"a126",9318,"a127",9319,"a128",9320,"a129",9321,"a130",10102,"a131",10103,"a132",10104,"a133",10105,"a134",10106,"a135",10107,"a136",10108,"a137",10109,"a138",10110,"a139",10111,"a140",10112,"a141",10113,"a142",10114,"a143",10115,"a144",10116,"a145",10117,"a146",10118,"a147",10119,"a148",10120,"a149",10121,"a150",10122,"a151",10123,"a152",10124,"a153",10125,"a154",10126,"a155",10127,"a156",10128,"a157",10129,"a158",10130,"a159",10131,"a160",10132,"a161",8594,"a163",8596,"a164",8597,"a196",10136,"a165",10137,"a192",10138,"a166",10139,"a167",10140,"a168",10141,"a169",10142,"a170",10143,"a171",10144,"a172",10145,"a173",10146,"a162",10147,"a174",10148,"a175",10149,"a176",10150,"a177",10151,"a178",10152,"a179",10153,"a193",10154,"a180",10155,"a199",10156,"a181",10157,"a200",10158,"a182",10159,"a201",10161,"a183",10162,"a184",10163,"a197",10164,"a185",10165,"a194",10166,"a198",10167,"a186",10168,"a195",10169,"a187",10170,"a188",10171,"a189",10172,"a190",10173,"a191",10174,"a89",10088,"a90",10089,"a93",10090,"a94",10091,"a91",10092,"a92",10093,"a205",10094,"a85",10095,"a206",10096,"a86",10097,"a87",10098,"a88",10099,"a95",10100,"a96",10101,".notdef",0]}))},(e,t,r)=>{r.r(t),r.d(t,{clearUnicodeCaches:()=>p,getCharUnicodeCategory:()=>d,getNormalizedUnicodes:()=>u,getUnicodeForGlyph:()=>o,getUnicodeRangeFor:()=>c,mapSpecialUnicodeValues:()=>i,reverseIfRtl:()=>l});var n=r(135);const a=(0,n.getLookupTableFactory)((function(e){e[63721]=169,e[63193]=169,e[63720]=174,e[63194]=174,e[63722]=8482,e[63195]=8482,e[63729]=9127,e[63730]=9128,e[63731]=9129,e[63740]=9131,e[63741]=9132,e[63742]=9133,e[63726]=9121,e[63727]=9122,e[63728]=9123,e[63737]=9124,e[63738]=9125,e[63739]=9126,e[63723]=9115,e[63724]=9116,e[63725]=9117,e[63734]=9118,e[63735]=9119,e[63736]=9120}));function i(e){return e>=65520&&e<=65535?0:e>=62976&&e<=63743?a()[e]||e:173===e?45:e}function o(e,t){let r=t[e];if(void 0!==r)return r;if(!e)return-1;if("u"===e[0]){const t=e.length;let n;if(7===t&&"n"===e[1]&&"i"===e[2])n=e.substring(3);else{if(!(t>=5&&t<=7))return-1;n=e.substring(1)}if(n===n.toUpperCase()&&(r=parseInt(n,16),r>=0))return r}return-1}const s=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function c(e){for(let t=0,r=s.length;t=r.begin&&e=t.begin&&e=t.begin&&e=0;n--)r.push(e[n]);return r.join("")}const f=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),h=new Map;function d(e){const t=h.get(e);if(t)return t;const r=e.match(f),n={isWhitespace:!(!r||!r[1]),isZeroWidthDiacritic:!(!r||!r[2]),isInvisibleFormatMark:!(!r||!r[3])};return h.set(e,n),n}function p(){h.clear()}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getSerifFonts=t.getNonStdFontMap=t.getGlyphMapForStandardFonts=t.getFontNameToFileMap=void 0,t.getStandardFontName=function(e){var t=(0,a.normalizeFontName)(e);return i()[t]},t.getSymbolsFonts=t.getSupplementalGlyphMapForCalibri=t.getSupplementalGlyphMapForArialBlack=t.getStdFontMap=void 0;var n=r(135),a=r(167),i=(0,n.getLookupTableFactory)((function(e){e["Times-Roman"]="Times-Roman",e.Helvetica="Helvetica",e.Courier="Courier",e.Symbol="Symbol",e["Times-Bold"]="Times-Bold",e["Helvetica-Bold"]="Helvetica-Bold",e["Courier-Bold"]="Courier-Bold",e.ZapfDingbats="ZapfDingbats",e["Times-Italic"]="Times-Italic",e["Helvetica-Oblique"]="Helvetica-Oblique",e["Courier-Oblique"]="Courier-Oblique",e["Times-BoldItalic"]="Times-BoldItalic",e["Helvetica-BoldOblique"]="Helvetica-BoldOblique",e["Courier-BoldOblique"]="Courier-BoldOblique",e.ArialNarrow="Helvetica",e["ArialNarrow-Bold"]="Helvetica-Bold",e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique",e["ArialNarrow-Italic"]="Helvetica-Oblique",e.ArialBlack="Helvetica",e["ArialBlack-Bold"]="Helvetica-Bold",e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique",e["ArialBlack-Italic"]="Helvetica-Oblique",e["Arial-Black"]="Helvetica",e["Arial-Black-Bold"]="Helvetica-Bold",e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Black-Italic"]="Helvetica-Oblique",e.Arial="Helvetica",e["Arial-Bold"]="Helvetica-Bold",e["Arial-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Italic"]="Helvetica-Oblique",e.ArialMT="Helvetica",e["Arial-BoldItalicMT"]="Helvetica-BoldOblique",e["Arial-BoldMT"]="Helvetica-Bold",e["Arial-ItalicMT"]="Helvetica-Oblique",e.ArialUnicodeMS="Helvetica",e["ArialUnicodeMS-Bold"]="Helvetica-Bold",e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique",e["ArialUnicodeMS-Italic"]="Helvetica-Oblique",e["Courier-BoldItalic"]="Courier-BoldOblique",e["Courier-Italic"]="Courier-Oblique",e.CourierNew="Courier",e["CourierNew-Bold"]="Courier-Bold",e["CourierNew-BoldItalic"]="Courier-BoldOblique",e["CourierNew-Italic"]="Courier-Oblique",e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique",e["CourierNewPS-BoldMT"]="Courier-Bold",e["CourierNewPS-ItalicMT"]="Courier-Oblique",e.CourierNewPSMT="Courier",e["Helvetica-BoldItalic"]="Helvetica-BoldOblique",e["Helvetica-Italic"]="Helvetica-Oblique",e["Symbol-Bold"]="Symbol",e["Symbol-BoldItalic"]="Symbol",e["Symbol-Italic"]="Symbol",e.TimesNewRoman="Times-Roman",e["TimesNewRoman-Bold"]="Times-Bold",e["TimesNewRoman-BoldItalic"]="Times-BoldItalic",e["TimesNewRoman-Italic"]="Times-Italic",e.TimesNewRomanPS="Times-Roman",e["TimesNewRomanPS-Bold"]="Times-Bold",e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic",e["TimesNewRomanPS-BoldMT"]="Times-Bold",e["TimesNewRomanPS-Italic"]="Times-Italic",e["TimesNewRomanPS-ItalicMT"]="Times-Italic",e.TimesNewRomanPSMT="Times-Roman",e["TimesNewRomanPSMT-Bold"]="Times-Bold",e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPSMT-Italic"]="Times-Italic"}));t.getStdFontMap=i;var o=(0,n.getLookupTableFactory)((function(e){e.Courier="FoxitFixed.pfb",e["Courier-Bold"]="FoxitFixedBold.pfb",e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb",e["Courier-Oblique"]="FoxitFixedItalic.pfb",e.Helvetica="FoxitSans.pfb",e["Helvetica-Bold"]="FoxitSansBold.pfb",e["Helvetica-BoldOblique"]="FoxitSansBoldItalic.pfb",e["Helvetica-Oblique"]="FoxitSansItalic.pfb",e["Times-Roman"]="FoxitSerif.pfb",e["Times-Bold"]="FoxitSerifBold.pfb",e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb",e["Times-Italic"]="FoxitSerifItalic.pfb",e.Symbol="FoxitSymbol.pfb",e.ZapfDingbats="FoxitDingbats.pfb",e["LiberationSans-Regular"]="LiberationSans-Regular.ttf",e["LiberationSans-Bold"]="LiberationSans-Bold.ttf",e["LiberationSans-Italic"]="LiberationSans-Italic.ttf",e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"}));t.getFontNameToFileMap=o;var s=(0,n.getLookupTableFactory)((function(e){e.Calibri="Helvetica",e["Calibri-Bold"]="Helvetica-Bold",e["Calibri-BoldItalic"]="Helvetica-BoldOblique",e["Calibri-Italic"]="Helvetica-Oblique",e.CenturyGothic="Helvetica",e["CenturyGothic-Bold"]="Helvetica-Bold",e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique",e["CenturyGothic-Italic"]="Helvetica-Oblique",e.ComicSansMS="Comic Sans MS",e["ComicSansMS-Bold"]="Comic Sans MS-Bold",e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic",e["ComicSansMS-Italic"]="Comic Sans MS-Italic",e["ItcSymbol-Bold"]="Helvetica-Bold",e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique",e["ItcSymbol-Book"]="Helvetica",e["ItcSymbol-BookItalic"]="Helvetica-Oblique",e["ItcSymbol-Medium"]="Helvetica",e["ItcSymbol-MediumItalic"]="Helvetica-Oblique",e.LucidaConsole="Courier",e["LucidaConsole-Bold"]="Courier-Bold",e["LucidaConsole-BoldItalic"]="Courier-BoldOblique",e["LucidaConsole-Italic"]="Courier-Oblique",e["LucidaSans-Demi"]="Helvetica-Bold",e["MS-Gothic"]="MS Gothic",e["MS-Gothic-Bold"]="MS Gothic-Bold",e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic",e["MS-Gothic-Italic"]="MS Gothic-Italic",e["MS-Mincho"]="MS Mincho",e["MS-Mincho-Bold"]="MS Mincho-Bold",e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic",e["MS-Mincho-Italic"]="MS Mincho-Italic",e["MS-PGothic"]="MS PGothic",e["MS-PGothic-Bold"]="MS PGothic-Bold",e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic",e["MS-PGothic-Italic"]="MS PGothic-Italic",e["MS-PMincho"]="MS PMincho",e["MS-PMincho-Bold"]="MS PMincho-Bold",e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic",e["MS-PMincho-Italic"]="MS PMincho-Italic",e.NuptialScript="Times-Italic",e.SegoeUISymbol="Helvetica",e.Wingdings="ZapfDingbats",e["Wingdings-Regular"]="ZapfDingbats"}));t.getNonStdFontMap=s;var c=(0,n.getLookupTableFactory)((function(e){e["Adobe Jenson"]=!0,e["Adobe Text"]=!0,e.Albertus=!0,e.Aldus=!0,e.Alexandria=!0,e.Algerian=!0,e["American Typewriter"]=!0,e.Antiqua=!0,e.Apex=!0,e.Arno=!0,e.Aster=!0,e.Aurora=!0,e.Baskerville=!0,e.Bell=!0,e.Bembo=!0,e["Bembo Schoolbook"]=!0,e.Benguiat=!0,e["Berkeley Old Style"]=!0,e["Bernhard Modern"]=!0,e["Berthold City"]=!0,e.Bodoni=!0,e["Bauer Bodoni"]=!0,e["Book Antiqua"]=!0,e.Bookman=!0,e["Bordeaux Roman"]=!0,e["Californian FB"]=!0,e.Calisto=!0,e.Calvert=!0,e.Capitals=!0,e.Cambria=!0,e.Cartier=!0,e.Caslon=!0,e.Catull=!0,e.Centaur=!0,e["Century Old Style"]=!0,e["Century Schoolbook"]=!0,e.Chaparral=!0,e["Charis SIL"]=!0,e.Cheltenham=!0,e["Cholla Slab"]=!0,e.Clarendon=!0,e.Clearface=!0,e.Cochin=!0,e.Colonna=!0,e["Computer Modern"]=!0,e["Concrete Roman"]=!0,e.Constantia=!0,e["Cooper Black"]=!0,e.Corona=!0,e.Ecotype=!0,e.Egyptienne=!0,e.Elephant=!0,e.Excelsior=!0,e.Fairfield=!0,e["FF Scala"]=!0,e.Folkard=!0,e.Footlight=!0,e.FreeSerif=!0,e["Friz Quadrata"]=!0,e.Garamond=!0,e.Gentium=!0,e.Georgia=!0,e.Gloucester=!0,e["Goudy Old Style"]=!0,e["Goudy Schoolbook"]=!0,e["Goudy Pro Font"]=!0,e.Granjon=!0,e["Guardian Egyptian"]=!0,e.Heather=!0,e.Hercules=!0,e["High Tower Text"]=!0,e.Hiroshige=!0,e["Hoefler Text"]=!0,e["Humana Serif"]=!0,e.Imprint=!0,e["Ionic No. 5"]=!0,e.Janson=!0,e.Joanna=!0,e.Korinna=!0,e.Lexicon=!0,e.LiberationSerif=!0,e["Liberation Serif"]=!0,e["Linux Libertine"]=!0,e.Literaturnaya=!0,e.Lucida=!0,e["Lucida Bright"]=!0,e.Melior=!0,e.Memphis=!0,e.Miller=!0,e.Minion=!0,e.Modern=!0,e["Mona Lisa"]=!0,e["Mrs Eaves"]=!0,e["MS Serif"]=!0,e["Museo Slab"]=!0,e["New York"]=!0,e["Nimbus Roman"]=!0,e["NPS Rawlinson Roadway"]=!0,e.NuptialScript=!0,e.Palatino=!0,e.Perpetua=!0,e.Plantin=!0,e["Plantin Schoolbook"]=!0,e.Playbill=!0,e["Poor Richard"]=!0,e["Rawlinson Roadway"]=!0,e.Renault=!0,e.Requiem=!0,e.Rockwell=!0,e.Roman=!0,e["Rotis Serif"]=!0,e.Sabon=!0,e.Scala=!0,e.Seagull=!0,e.Sistina=!0,e.Souvenir=!0,e.STIX=!0,e["Stone Informal"]=!0,e["Stone Serif"]=!0,e.Sylfaen=!0,e.Times=!0,e.Trajan=!0,e["Trinité"]=!0,e["Trump Mediaeval"]=!0,e.Utopia=!0,e["Vale Type"]=!0,e["Bitstream Vera"]=!0,e["Vera Serif"]=!0,e.Versailles=!0,e.Wanted=!0,e.Weiss=!0,e["Wide Latin"]=!0,e.Windsor=!0,e.XITS=!0}));t.getSerifFonts=c;var u=(0,n.getLookupTableFactory)((function(e){e.Dingbats=!0,e.Symbol=!0,e.ZapfDingbats=!0}));t.getSymbolsFonts=u;var l=(0,n.getLookupTableFactory)((function(e){e[2]=10,e[3]=32,e[4]=33,e[5]=34,e[6]=35,e[7]=36,e[8]=37,e[9]=38,e[10]=39,e[11]=40,e[12]=41,e[13]=42,e[14]=43,e[15]=44,e[16]=45,e[17]=46,e[18]=47,e[19]=48,e[20]=49,e[21]=50,e[22]=51,e[23]=52,e[24]=53,e[25]=54,e[26]=55,e[27]=56,e[28]=57,e[29]=58,e[30]=894,e[31]=60,e[32]=61,e[33]=62,e[34]=63,e[35]=64,e[36]=65,e[37]=66,e[38]=67,e[39]=68,e[40]=69,e[41]=70,e[42]=71,e[43]=72,e[44]=73,e[45]=74,e[46]=75,e[47]=76,e[48]=77,e[49]=78,e[50]=79,e[51]=80,e[52]=81,e[53]=82,e[54]=83,e[55]=84,e[56]=85,e[57]=86,e[58]=87,e[59]=88,e[60]=89,e[61]=90,e[62]=91,e[63]=92,e[64]=93,e[65]=94,e[66]=95,e[67]=96,e[68]=97,e[69]=98,e[70]=99,e[71]=100,e[72]=101,e[73]=102,e[74]=103,e[75]=104,e[76]=105,e[77]=106,e[78]=107,e[79]=108,e[80]=109,e[81]=110,e[82]=111,e[83]=112,e[84]=113,e[85]=114,e[86]=115,e[87]=116,e[88]=117,e[89]=118,e[90]=119,e[91]=120,e[92]=121,e[93]=122,e[94]=123,e[95]=124,e[96]=125,e[97]=126,e[98]=196,e[99]=197,e[100]=199,e[101]=201,e[102]=209,e[103]=214,e[104]=220,e[105]=225,e[106]=224,e[107]=226,e[108]=228,e[109]=227,e[110]=229,e[111]=231,e[112]=233,e[113]=232,e[114]=234,e[115]=235,e[116]=237,e[117]=236,e[118]=238,e[119]=239,e[120]=241,e[121]=243,e[122]=242,e[123]=244,e[124]=246,e[125]=245,e[126]=250,e[127]=249,e[128]=251,e[129]=252,e[130]=8224,e[131]=176,e[132]=162,e[133]=163,e[134]=167,e[135]=8226,e[136]=182,e[137]=223,e[138]=174,e[139]=169,e[140]=8482,e[141]=180,e[142]=168,e[143]=8800,e[144]=198,e[145]=216,e[146]=8734,e[147]=177,e[148]=8804,e[149]=8805,e[150]=165,e[151]=181,e[152]=8706,e[153]=8721,e[154]=8719,e[156]=8747,e[157]=170,e[158]=186,e[159]=8486,e[160]=230,e[161]=248,e[162]=191,e[163]=161,e[164]=172,e[165]=8730,e[166]=402,e[167]=8776,e[168]=8710,e[169]=171,e[170]=187,e[171]=8230,e[179]=8220,e[180]=8221,e[181]=8216,e[182]=8217,e[200]=193,e[203]=205,e[210]=218,e[223]=711,e[224]=321,e[225]=322,e[226]=352,e[227]=353,e[228]=381,e[229]=382,e[233]=221,e[234]=253,e[252]=263,e[253]=268,e[254]=269,e[258]=258,e[260]=260,e[261]=261,e[265]=280,e[266]=281,e[267]=282,e[268]=283,e[269]=313,e[275]=323,e[276]=324,e[278]=328,e[283]=344,e[284]=345,e[285]=346,e[286]=347,e[292]=367,e[295]=377,e[296]=378,e[298]=380,e[305]=963,e[306]=964,e[307]=966,e[308]=8215,e[309]=8252,e[310]=8319,e[311]=8359,e[312]=8592,e[313]=8593,e[337]=9552,e[493]=1039,e[494]=1040,e[672]=1488,e[673]=1489,e[674]=1490,e[675]=1491,e[676]=1492,e[677]=1493,e[678]=1494,e[679]=1495,e[680]=1496,e[681]=1497,e[682]=1498,e[683]=1499,e[684]=1500,e[685]=1501,e[686]=1502,e[687]=1503,e[688]=1504,e[689]=1505,e[690]=1506,e[691]=1507,e[692]=1508,e[693]=1509,e[694]=1510,e[695]=1511,e[696]=1512,e[697]=1513,e[698]=1514,e[705]=1524,e[706]=8362,e[710]=64288,e[711]=64298,e[759]=1617,e[761]=1776,e[763]=1778,e[775]=1652,e[777]=1764,e[778]=1780,e[779]=1781,e[780]=1782,e[782]=771,e[783]=64726,e[786]=8363,e[788]=8532,e[790]=768,e[791]=769,e[792]=768,e[795]=803,e[797]=64336,e[798]=64337,e[799]=64342,e[800]=64343,e[801]=64344,e[802]=64345,e[803]=64362,e[804]=64363,e[805]=64364,e[2424]=7821,e[2425]=7822,e[2426]=7823,e[2427]=7824,e[2428]=7825,e[2429]=7826,e[2430]=7827,e[2433]=7682,e[2678]=8045,e[2679]=8046,e[2830]=1552,e[2838]=686,e[2840]=751,e[2842]=753,e[2843]=754,e[2844]=755,e[2846]=757,e[2856]=767,e[2857]=848,e[2858]=849,e[2862]=853,e[2863]=854,e[2864]=855,e[2865]=861,e[2866]=862,e[2906]=7460,e[2908]=7462,e[2909]=7463,e[2910]=7464,e[2912]=7466,e[2913]=7467,e[2914]=7468,e[2916]=7470,e[2917]=7471,e[2918]=7472,e[2920]=7474,e[2921]=7475,e[2922]=7476,e[2924]=7478,e[2925]=7479,e[2926]=7480,e[2928]=7482,e[2929]=7483,e[2930]=7484,e[2932]=7486,e[2933]=7487,e[2934]=7488,e[2936]=7490,e[2937]=7491,e[2938]=7492,e[2940]=7494,e[2941]=7495,e[2942]=7496,e[2944]=7498,e[2946]=7500,e[2948]=7502,e[2950]=7504,e[2951]=7505,e[2952]=7506,e[2954]=7508,e[2955]=7509,e[2956]=7510,e[2958]=7512,e[2959]=7513,e[2960]=7514,e[2962]=7516,e[2963]=7517,e[2964]=7518,e[2966]=7520,e[2967]=7521,e[2968]=7522,e[2970]=7524,e[2971]=7525,e[2972]=7526,e[2974]=7528,e[2975]=7529,e[2976]=7530,e[2978]=1537,e[2979]=1538,e[2980]=1539,e[2982]=1549,e[2983]=1551,e[2984]=1552,e[2986]=1554,e[2987]=1555,e[2988]=1556,e[2990]=1623,e[2991]=1624,e[2995]=1775,e[2999]=1791,e[3002]=64290,e[3003]=64291,e[3004]=64292,e[3006]=64294,e[3007]=64295,e[3008]=64296,e[3011]=1900,e[3014]=8223,e[3015]=8244,e[3017]=7532,e[3018]=7533,e[3019]=7534,e[3075]=7590,e[3076]=7591,e[3079]=7594,e[3080]=7595,e[3083]=7598,e[3084]=7599,e[3087]=7602,e[3088]=7603,e[3091]=7606,e[3092]=7607,e[3095]=7610,e[3096]=7611,e[3099]=7614,e[3100]=7615,e[3103]=7618,e[3104]=7619,e[3107]=8337,e[3108]=8338,e[3116]=1884,e[3119]=1885,e[3120]=1885,e[3123]=1886,e[3124]=1886,e[3127]=1887,e[3128]=1887,e[3131]=1888,e[3132]=1888,e[3135]=1889,e[3136]=1889,e[3139]=1890,e[3140]=1890,e[3143]=1891,e[3144]=1891,e[3147]=1892,e[3148]=1892,e[3153]=580,e[3154]=581,e[3157]=584,e[3158]=585,e[3161]=588,e[3162]=589,e[3165]=891,e[3166]=892,e[3169]=1274,e[3170]=1275,e[3173]=1278,e[3174]=1279,e[3181]=7622,e[3182]=7623,e[3282]=11799,e[3316]=578,e[3379]=42785,e[3393]=1159,e[3416]=8377}));t.getGlyphMapForStandardFonts=l;var f=(0,n.getLookupTableFactory)((function(e){e[227]=322,e[264]=261,e[291]=346}));t.getSupplementalGlyphMapForArialBlack=f;var h=(0,n.getLookupTableFactory)((function(e){e[1]=32,e[4]=65,e[5]=192,e[6]=193,e[9]=196,e[17]=66,e[18]=67,e[21]=268,e[24]=68,e[28]=69,e[29]=200,e[30]=201,e[32]=282,e[38]=70,e[39]=71,e[44]=72,e[47]=73,e[48]=204,e[49]=205,e[58]=74,e[60]=75,e[62]=76,e[68]=77,e[69]=78,e[75]=79,e[76]=210,e[80]=214,e[87]=80,e[89]=81,e[90]=82,e[92]=344,e[94]=83,e[97]=352,e[100]=84,e[104]=85,e[109]=220,e[115]=86,e[116]=87,e[121]=88,e[122]=89,e[124]=221,e[127]=90,e[129]=381,e[258]=97,e[259]=224,e[260]=225,e[263]=228,e[268]=261,e[271]=98,e[272]=99,e[273]=263,e[275]=269,e[282]=100,e[286]=101,e[287]=232,e[288]=233,e[290]=283,e[295]=281,e[296]=102,e[336]=103,e[346]=104,e[349]=105,e[350]=236,e[351]=237,e[361]=106,e[364]=107,e[367]=108,e[371]=322,e[373]=109,e[374]=110,e[381]=111,e[382]=242,e[383]=243,e[386]=246,e[393]=112,e[395]=113,e[396]=114,e[398]=345,e[400]=115,e[401]=347,e[403]=353,e[410]=116,e[437]=117,e[442]=252,e[448]=118,e[449]=119,e[454]=120,e[455]=121,e[457]=253,e[460]=122,e[462]=382,e[463]=380,e[853]=44,e[855]=58,e[856]=46,e[876]=47,e[878]=45,e[882]=45,e[894]=40,e[895]=41,e[896]=91,e[897]=93,e[923]=64,e[1004]=48,e[1005]=49,e[1006]=50,e[1007]=51,e[1008]=52,e[1009]=53,e[1010]=54,e[1011]=55,e[1012]=56,e[1013]=57,e[1081]=37,e[1085]=43,e[1086]=45}));t.getSupplementalGlyphMapForCalibri=h},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ToUnicodeMap=t.IdentityToUnicodeMap=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:[];i(this,e),this._map=t}return s(e,[{key:"length",get:function(){return this._map.length}},{key:"forEach",value:function(e){for(var t in this._map)e(t,this._map[t].charCodeAt(0))}},{key:"has",value:function(e){return void 0!==this._map[e]}},{key:"get",value:function(e){return this._map[e]}},{key:"charCodeOf",value:function(e){var t=this._map;if(t.length<=65536)return t.indexOf(e);for(var r in t)if(t[r]===e)return 0|r;return-1}},{key:"amend",value:function(e){for(var t in e)this._map[t]=e[t]}}]),e}();t.ToUnicodeMap=c;var u=function(){function e(t,r){i(this,e),this.firstChar=t,this.lastChar=r}return s(e,[{key:"length",get:function(){return this.lastChar+1-this.firstChar}},{key:"forEach",value:function(e){for(var t=this.firstChar,r=this.lastChar;t<=r;t++)e(t,t)}},{key:"has",value:function(e){return this.firstChar<=e&&e<=this.lastChar}},{key:"get",value:function(e){if(this.firstChar<=e&&e<=this.lastChar)return String.fromCharCode(e)}},{key:"charCodeOf",value:function(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1}},{key:"amend",value:function(e){(0,n.unreachable)("Should not call amend()")}}]),e}();t.IdentityToUnicodeMap=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CFFFont=void 0;var n=r(164),a=r(167),i=r(2);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){for(var r=0;r0){c=Object.create(null);for(var l=0,f=i.length;l=0){var c=n[s];c&&(i[o]=c)}}i.length>0&&(this.properties.builtInEncoding=i)}}}])&&s(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.CFFFont=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FontRendererFactory=void 0;var n=r(2),a=r(164),i=r(168),o=r(166),s=r(139);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=f(e);if(t){var a=f(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===h(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function p(e,t){for(var r=0;r>>0}function y(e,t){return e[t]<<8|e[t+1]}function m(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function b(e,t){return e[t]<<24>>24}function w(e,t){return m(e,t)/16384}function k(e){var t=e.length,r=32768;return t<1240?r=107:t<33900&&(r=1131),r}function S(e,t,r){var a,i,o,s=1===y(e,t+2)?v(e,t+8):v(e,t+16),c=y(e,t+s);if(4===c){y(e,t+s+2);var u=y(e,t+s+6)>>1;for(i=t+s+14,a=[],o=0;o>1;r0;)P.push({flags:o})}for(x=0;x>1,g=!0;break;case 4:f+=u.pop(),i(l,f),g=!0;break;case 5:for(;u.length>0;)l+=u.shift(),f+=u.shift(),s(l,f);break;case 6:for(;u.length>0&&(s(l+=u.shift(),f),0!==u.length);)f+=u.shift(),s(l,f);break;case 7:for(;u.length>0&&(f+=u.shift(),s(l,f),0!==u.length);)s(l+=u.shift(),f);break;case 8:for(;u.length>0;)y=l+u.shift(),b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+u.shift(),c(y,b,m,w,l,f);break;case 10:if(A=u.pop(),F=null,r.isCFFCIDFont){var P=r.fdSelect.getFDIndex(a);if(P>=0&&PMath.abs(f-j)?l+=u.shift():f+=u.shift(),c(y,b,m,w,l,f);break;default:throw new n.FormatError("unknown operator: 12 ".concat(v))}break;case 14:if(u.length>=4){var M=u.pop(),_=u.pop();f=u.pop(),l=u.pop(),t.push({cmd:"save"},{cmd:"translate",args:[l,f]});var L=O(r.cmap,String.fromCharCode(r.glyphNameMap[o.StandardEncoding[M]]));C(r.glyphs[L.glyphId],t,r,L.glyphId),t.push({cmd:"restore"}),L=O(r.cmap,String.fromCharCode(r.glyphNameMap[o.StandardEncoding[_]])),C(r.glyphs[L.glyphId],t,r,L.glyphId)}return;case 19:case 20:p+=(h+=u.length>>1)+7>>3,g=!0;break;case 21:f+=u.pop(),i(l+=u.pop(),f),g=!0;break;case 22:i(l+=u.pop(),f),g=!0;break;case 24:for(;u.length>2;)y=l+u.shift(),b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+u.shift(),c(y,b,m,w,l,f);l+=u.shift(),f+=u.shift(),s(l,f);break;case 25:for(;u.length>6;)l+=u.shift(),f+=u.shift(),s(l,f);y=l+u.shift(),b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+u.shift(),c(y,b,m,w,l,f);break;case 26:for(u.length%2&&(l+=u.shift());u.length>0;)y=l,b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m,f=w+u.shift(),c(y,b,m,w,l,f);break;case 27:for(u.length%2&&(f+=u.shift());u.length>0;)c(y=l+u.shift(),b=f,m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w);break;case 28:u.push((d[p]<<24|d[p+1]<<16)>>16),p+=2;break;case 29:A=u.pop()+r.gsubrsBias,(F=r.gsubrs[A])&&e(F);break;case 30:for(;u.length>0&&(y=l,b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+(1===u.length?u.shift():0),c(y,b,m,w,l,f),0!==u.length);)y=l+u.shift(),b=f,m=y+u.shift(),w=b+u.shift(),f=w+u.shift(),c(y,b,m,w,l=m+(1===u.length?u.shift():0),f);break;case 31:for(;u.length>0&&(y=l+u.shift(),b=f,m=y+u.shift(),w=b+u.shift(),f=w+u.shift(),c(y,b,m,w,l=m+(1===u.length?u.shift():0),f),0!==u.length);)y=l,b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+(1===u.length?u.shift():0),c(y,b,m,w,l,f);break;default:if(v<32)throw new n.FormatError("unknown operator: ".concat(v));v<247?u.push(v-139):v<251?u.push(256*(v-247)+d[p++]+108):v<255?u.push(256*-(v-251)-d[p++]-108):(u.push((d[p]<<24|d[p+1]<<16|d[p+2]<<8|d[p+3])/65536),p+=4)}g&&(u.length=0)}}(e)}var F=[],P=function(){function e(t){d(this,e),this.constructor===e&&(0,n.unreachable)("Cannot initialize CompiledFont."),this.fontMatrix=t,this.compiledGlyphs=Object.create(null),this.compiledCharCodeToGlyphId=Object.create(null)}return g(e,[{key:"getPathJs",value:function(e){var t=O(this.cmap,e),r=t.charCode,n=t.glyphId,a=this.compiledGlyphs[n];if(!a)try{a=this.compileGlyph(this.glyphs[n],n),this.compiledGlyphs[n]=a}catch(e){throw this.compiledGlyphs[n]=F,void 0===this.compiledCharCodeToGlyphId[r]&&(this.compiledCharCodeToGlyphId[r]=n),e}return void 0===this.compiledCharCodeToGlyphId[r]&&(this.compiledCharCodeToGlyphId[r]=n),a}},{key:"compileGlyph",value:function(e,t){if(!e||0===e.length||14===e[0])return F;var r=this.fontMatrix;if(this.isCFFCIDFont){var a=this.fdSelect.getFDIndex(t);a>=0&&a{Object.defineProperty(t,"__esModule",{value:!0}),t.getMetrics=t.getFontBasicMetrics=void 0;var n=r(135),a=(0,n.getLookupTableFactory)((function(e){e.Courier=600,e["Courier-Bold"]=600,e["Courier-BoldOblique"]=600,e["Courier-Oblique"]=600,e.Helvetica=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=278,e.quotedbl=355,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=667,e.quoteright=222,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=278,e.semicolon=278,e.less=584,e.equal=584,e.greater=584,e.question=556,e.at=1015,e.A=667,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=500,e.K=667,e.L=556,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=278,e.backslash=278,e.bracketright=278,e.asciicircum=469,e.underscore=556,e.quoteleft=222,e.a=556,e.b=556,e.c=500,e.d=556,e.e=556,e.f=278,e.g=556,e.h=556,e.i=222,e.j=222,e.k=500,e.l=222,e.m=833,e.n=556,e.o=556,e.p=556,e.q=556,e.r=333,e.s=500,e.t=278,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=500,e.braceleft=334,e.bar=260,e.braceright=334,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=191,e.quotedblleft=333,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=537,e.bullet=350,e.quotesinglbase=222,e.quotedblbase=333,e.quotedblright=333,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=556,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=222,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=556,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=667,e.aacute=556,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=500,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=500,e.aring=556,e.Ncommaaccent=722,e.lacute=222,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=500,e.scedilla=500,e.iacute=278,e.lozenge=471,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=556,e.Amacron=667,e.rcaron=333,e.ccedilla=500,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=643,e.Umacron=722,e.uring=556,e.threesuperior=333,e.Ograve=778,e.Agrave=667,e.Abreve=667,e.multiply=584,e.uacute=556,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=500,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=260,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=333,e.omacron=556,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=222,e.tcaron=317,e.eogonek=556,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=556,e.zacute=500,e.iogonek=222,e.Oacute=778,e.oacute=556,e.amacron=556,e.sacute=500,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=333,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=556,e.Eogonek=667,e.dcroat=556,e.threequarters=834,e.Scedilla=667,e.lcaron=299,e.Kcommaaccent=667,e.Lacute=556,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=556,e.onehalf=834,e.lessequal=549,e.ocircumflex=556,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=556,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=556,e.Ccaron=722,e.ugrave=556,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=556,e.Rcommaaccent=722,e.Lcommaaccent=556,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=500,e.minus=584,e.Icircumflex=278,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=584,e.odieresis=556,e.udieresis=556,e.notequal=549,e.gcommaaccent=556,e.eth=556,e.zcaron=500,e.ncommaaccent=556,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-Bold"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=333,e.quotedbl=474,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=722,e.quoteright=278,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=333,e.semicolon=333,e.less=584,e.equal=584,e.greater=584,e.question=611,e.at=975,e.A=722,e.B=722,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=556,e.K=722,e.L=611,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=584,e.underscore=556,e.quoteleft=278,e.a=556,e.b=611,e.c=556,e.d=611,e.e=556,e.f=333,e.g=611,e.h=611,e.i=278,e.j=278,e.k=556,e.l=278,e.m=889,e.n=611,e.o=611,e.p=611,e.q=611,e.r=389,e.s=556,e.t=333,e.u=611,e.v=556,e.w=778,e.x=556,e.y=556,e.z=500,e.braceleft=389,e.bar=280,e.braceright=389,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=238,e.quotedblleft=500,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=611,e.fl=611,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=556,e.bullet=350,e.quotesinglbase=278,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=611,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=278,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=611,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=722,e.aacute=556,e.Ucircumflex=722,e.yacute=556,e.scommaaccent=556,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=611,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=556,e.aring=556,e.Ncommaaccent=722,e.lacute=278,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=556,e.scedilla=556,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=611,e.acircumflex=556,e.Amacron=722,e.rcaron=389,e.ccedilla=556,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=743,e.Umacron=722,e.uring=611,e.threesuperior=333,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=584,e.uacute=611,e.Tcaron=611,e.partialdiff=494,e.ydieresis=556,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=556,e.nacute=611,e.umacron=611,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=280,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=611,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=389,e.eogonek=556,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=556,e.zacute=500,e.iogonek=278,e.Oacute=778,e.oacute=611,e.amacron=556,e.sacute=556,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=611,e.twosuperior=333,e.Odieresis=778,e.mu=611,e.igrave=278,e.ohungarumlaut=611,e.Eogonek=667,e.dcroat=611,e.threequarters=834,e.Scedilla=667,e.lcaron=400,e.Kcommaaccent=722,e.Lacute=611,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=611,e.onehalf=834,e.lessequal=549,e.ocircumflex=611,e.ntilde=611,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=611,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=611,e.Ccaron=722,e.ugrave=611,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=611,e.Rcommaaccent=722,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=556,e.minus=584,e.Icircumflex=278,e.ncaron=611,e.tcommaaccent=333,e.logicalnot=584,e.odieresis=611,e.udieresis=611,e.notequal=549,e.gcommaaccent=611,e.eth=611,e.zcaron=500,e.ncommaaccent=611,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-BoldOblique"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=333,e.quotedbl=474,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=722,e.quoteright=278,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=333,e.semicolon=333,e.less=584,e.equal=584,e.greater=584,e.question=611,e.at=975,e.A=722,e.B=722,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=556,e.K=722,e.L=611,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=584,e.underscore=556,e.quoteleft=278,e.a=556,e.b=611,e.c=556,e.d=611,e.e=556,e.f=333,e.g=611,e.h=611,e.i=278,e.j=278,e.k=556,e.l=278,e.m=889,e.n=611,e.o=611,e.p=611,e.q=611,e.r=389,e.s=556,e.t=333,e.u=611,e.v=556,e.w=778,e.x=556,e.y=556,e.z=500,e.braceleft=389,e.bar=280,e.braceright=389,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=238,e.quotedblleft=500,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=611,e.fl=611,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=556,e.bullet=350,e.quotesinglbase=278,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=611,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=278,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=611,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=722,e.aacute=556,e.Ucircumflex=722,e.yacute=556,e.scommaaccent=556,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=611,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=556,e.aring=556,e.Ncommaaccent=722,e.lacute=278,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=556,e.scedilla=556,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=611,e.acircumflex=556,e.Amacron=722,e.rcaron=389,e.ccedilla=556,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=743,e.Umacron=722,e.uring=611,e.threesuperior=333,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=584,e.uacute=611,e.Tcaron=611,e.partialdiff=494,e.ydieresis=556,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=556,e.nacute=611,e.umacron=611,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=280,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=611,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=389,e.eogonek=556,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=556,e.zacute=500,e.iogonek=278,e.Oacute=778,e.oacute=611,e.amacron=556,e.sacute=556,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=611,e.twosuperior=333,e.Odieresis=778,e.mu=611,e.igrave=278,e.ohungarumlaut=611,e.Eogonek=667,e.dcroat=611,e.threequarters=834,e.Scedilla=667,e.lcaron=400,e.Kcommaaccent=722,e.Lacute=611,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=611,e.onehalf=834,e.lessequal=549,e.ocircumflex=611,e.ntilde=611,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=611,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=611,e.Ccaron=722,e.ugrave=611,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=611,e.Rcommaaccent=722,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=556,e.minus=584,e.Icircumflex=278,e.ncaron=611,e.tcommaaccent=333,e.logicalnot=584,e.odieresis=611,e.udieresis=611,e.notequal=549,e.gcommaaccent=611,e.eth=611,e.zcaron=500,e.ncommaaccent=611,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-Oblique"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=278,e.quotedbl=355,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=667,e.quoteright=222,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=278,e.semicolon=278,e.less=584,e.equal=584,e.greater=584,e.question=556,e.at=1015,e.A=667,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=500,e.K=667,e.L=556,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=278,e.backslash=278,e.bracketright=278,e.asciicircum=469,e.underscore=556,e.quoteleft=222,e.a=556,e.b=556,e.c=500,e.d=556,e.e=556,e.f=278,e.g=556,e.h=556,e.i=222,e.j=222,e.k=500,e.l=222,e.m=833,e.n=556,e.o=556,e.p=556,e.q=556,e.r=333,e.s=500,e.t=278,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=500,e.braceleft=334,e.bar=260,e.braceright=334,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=191,e.quotedblleft=333,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=537,e.bullet=350,e.quotesinglbase=222,e.quotedblbase=333,e.quotedblright=333,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=556,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=222,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=556,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=667,e.aacute=556,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=500,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=500,e.aring=556,e.Ncommaaccent=722,e.lacute=222,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=500,e.scedilla=500,e.iacute=278,e.lozenge=471,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=556,e.Amacron=667,e.rcaron=333,e.ccedilla=500,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=643,e.Umacron=722,e.uring=556,e.threesuperior=333,e.Ograve=778,e.Agrave=667,e.Abreve=667,e.multiply=584,e.uacute=556,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=500,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=260,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=333,e.omacron=556,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=222,e.tcaron=317,e.eogonek=556,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=556,e.zacute=500,e.iogonek=222,e.Oacute=778,e.oacute=556,e.amacron=556,e.sacute=500,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=333,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=556,e.Eogonek=667,e.dcroat=556,e.threequarters=834,e.Scedilla=667,e.lcaron=299,e.Kcommaaccent=667,e.Lacute=556,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=556,e.onehalf=834,e.lessequal=549,e.ocircumflex=556,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=556,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=556,e.Ccaron=722,e.ugrave=556,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=556,e.Rcommaaccent=722,e.Lcommaaccent=556,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=500,e.minus=584,e.Icircumflex=278,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=584,e.odieresis=556,e.udieresis=556,e.notequal=549,e.gcommaaccent=556,e.eth=556,e.zcaron=500,e.ncommaaccent=556,e.onesuperior=333,e.imacron=278,e.Euro=556})),e.Symbol=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.universal=713,e.numbersign=500,e.existential=549,e.percent=833,e.ampersand=778,e.suchthat=439,e.parenleft=333,e.parenright=333,e.asteriskmath=500,e.plus=549,e.comma=250,e.minus=549,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=278,e.semicolon=278,e.less=549,e.equal=549,e.greater=549,e.question=444,e.congruent=549,e.Alpha=722,e.Beta=667,e.Chi=722,e.Delta=612,e.Epsilon=611,e.Phi=763,e.Gamma=603,e.Eta=722,e.Iota=333,e.theta1=631,e.Kappa=722,e.Lambda=686,e.Mu=889,e.Nu=722,e.Omicron=722,e.Pi=768,e.Theta=741,e.Rho=556,e.Sigma=592,e.Tau=611,e.Upsilon=690,e.sigma1=439,e.Omega=768,e.Xi=645,e.Psi=795,e.Zeta=611,e.bracketleft=333,e.therefore=863,e.bracketright=333,e.perpendicular=658,e.underscore=500,e.radicalex=500,e.alpha=631,e.beta=549,e.chi=549,e.delta=494,e.epsilon=439,e.phi=521,e.gamma=411,e.eta=603,e.iota=329,e.phi1=603,e.kappa=549,e.lambda=549,e.mu=576,e.nu=521,e.omicron=549,e.pi=549,e.theta=521,e.rho=549,e.sigma=603,e.tau=439,e.upsilon=576,e.omega1=713,e.omega=686,e.xi=493,e.psi=686,e.zeta=494,e.braceleft=480,e.bar=200,e.braceright=480,e.similar=549,e.Euro=750,e.Upsilon1=620,e.minute=247,e.lessequal=549,e.fraction=167,e.infinity=713,e.florin=500,e.club=753,e.diamond=753,e.heart=753,e.spade=753,e.arrowboth=1042,e.arrowleft=987,e.arrowup=603,e.arrowright=987,e.arrowdown=603,e.degree=400,e.plusminus=549,e.second=411,e.greaterequal=549,e.multiply=549,e.proportional=713,e.partialdiff=494,e.bullet=460,e.divide=549,e.notequal=549,e.equivalence=549,e.approxequal=549,e.ellipsis=1e3,e.arrowvertex=603,e.arrowhorizex=1e3,e.carriagereturn=658,e.aleph=823,e.Ifraktur=686,e.Rfraktur=795,e.weierstrass=987,e.circlemultiply=768,e.circleplus=768,e.emptyset=823,e.intersection=768,e.union=768,e.propersuperset=713,e.reflexsuperset=713,e.notsubset=713,e.propersubset=713,e.reflexsubset=713,e.element=713,e.notelement=713,e.angle=768,e.gradient=713,e.registerserif=790,e.copyrightserif=790,e.trademarkserif=890,e.product=823,e.radical=549,e.dotmath=250,e.logicalnot=713,e.logicaland=603,e.logicalor=603,e.arrowdblboth=1042,e.arrowdblleft=987,e.arrowdblup=603,e.arrowdblright=987,e.arrowdbldown=603,e.lozenge=494,e.angleleft=329,e.registersans=790,e.copyrightsans=790,e.trademarksans=786,e.summation=713,e.parenlefttp=384,e.parenleftex=384,e.parenleftbt=384,e.bracketlefttp=384,e.bracketleftex=384,e.bracketleftbt=384,e.bracelefttp=494,e.braceleftmid=494,e.braceleftbt=494,e.braceex=494,e.angleright=329,e.integral=274,e.integraltp=686,e.integralex=686,e.integralbt=686,e.parenrighttp=384,e.parenrightex=384,e.parenrightbt=384,e.bracketrighttp=384,e.bracketrightex=384,e.bracketrightbt=384,e.bracerighttp=494,e.bracerightmid=494,e.bracerightbt=494,e.apple=790})),e["Times-Roman"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=408,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=564,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=278,e.semicolon=278,e.less=564,e.equal=564,e.greater=564,e.question=444,e.at=921,e.A=722,e.B=667,e.C=667,e.D=722,e.E=611,e.F=556,e.G=722,e.H=722,e.I=333,e.J=389,e.K=722,e.L=611,e.M=889,e.N=722,e.O=722,e.P=556,e.Q=722,e.R=667,e.S=556,e.T=611,e.U=722,e.V=722,e.W=944,e.X=722,e.Y=722,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=469,e.underscore=500,e.quoteleft=333,e.a=444,e.b=500,e.c=444,e.d=500,e.e=444,e.f=333,e.g=500,e.h=500,e.i=278,e.j=278,e.k=500,e.l=278,e.m=778,e.n=500,e.o=500,e.p=500,e.q=500,e.r=333,e.s=389,e.t=278,e.u=500,e.v=500,e.w=722,e.x=500,e.y=500,e.z=444,e.braceleft=480,e.bar=200,e.braceright=480,e.asciitilde=541,e.exclamdown=333,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=180,e.quotedblleft=444,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=453,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=444,e.quotedblright=444,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=444,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=889,e.ordfeminine=276,e.Lslash=611,e.Oslash=722,e.OE=889,e.ordmasculine=310,e.ae=667,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=500,e.Idieresis=333,e.eacute=444,e.abreve=444,e.uhungarumlaut=500,e.ecaron=444,e.Ydieresis=722,e.divide=564,e.Yacute=722,e.Acircumflex=722,e.aacute=444,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=444,e.Uacute=722,e.uogonek=500,e.Edieresis=611,e.Dcroat=722,e.commaaccent=250,e.copyright=760,e.Emacron=611,e.ccaron=444,e.aring=444,e.Ncommaaccent=722,e.lacute=278,e.agrave=444,e.Tcommaaccent=611,e.Cacute=667,e.atilde=444,e.Edotaccent=611,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=471,e.Rcaron=667,e.Gcommaaccent=722,e.ucircumflex=500,e.acircumflex=444,e.Amacron=722,e.rcaron=333,e.ccedilla=444,e.Zdotaccent=611,e.Thorn=556,e.Omacron=722,e.Racute=667,e.Sacute=556,e.dcaron=588,e.Umacron=722,e.uring=500,e.threesuperior=300,e.Ograve=722,e.Agrave=722,e.Abreve=722,e.multiply=564,e.uacute=500,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=611,e.adieresis=444,e.edieresis=444,e.cacute=444,e.nacute=500,e.umacron=500,e.Ncaron=722,e.Iacute=333,e.plusminus=564,e.brokenbar=200,e.registered=760,e.Gbreve=722,e.Idotaccent=333,e.summation=600,e.Egrave=611,e.racute=333,e.omacron=500,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=326,e.eogonek=444,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=444,e.zacute=444,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=444,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=500,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=611,e.dcroat=500,e.threequarters=750,e.Scedilla=556,e.lcaron=344,e.Kcommaaccent=722,e.Lacute=611,e.trademark=980,e.edotaccent=444,e.Igrave=333,e.Imacron=333,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=500,e.Uhungarumlaut=722,e.Eacute=611,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=500,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=667,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=722,e.zdotaccent=444,e.Ecaron=611,e.Iogonek=333,e.kcommaaccent=500,e.minus=564,e.Icircumflex=333,e.ncaron=500,e.tcommaaccent=278,e.logicalnot=564,e.odieresis=500,e.udieresis=500,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=444,e.ncommaaccent=500,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-Bold"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=555,e.numbersign=500,e.dollar=500,e.percent=1e3,e.ampersand=833,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=570,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=570,e.equal=570,e.greater=570,e.question=500,e.at=930,e.A=722,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=778,e.I=389,e.J=500,e.K=778,e.L=667,e.M=944,e.N=722,e.O=778,e.P=611,e.Q=778,e.R=722,e.S=556,e.T=667,e.U=722,e.V=722,e.W=1e3,e.X=722,e.Y=722,e.Z=667,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=581,e.underscore=500,e.quoteleft=333,e.a=500,e.b=556,e.c=444,e.d=556,e.e=444,e.f=333,e.g=500,e.h=556,e.i=278,e.j=333,e.k=556,e.l=278,e.m=833,e.n=556,e.o=500,e.p=556,e.q=556,e.r=444,e.s=389,e.t=333,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=444,e.braceleft=394,e.bar=220,e.braceright=394,e.asciitilde=520,e.exclamdown=333,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=278,e.quotedblleft=500,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=540,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=300,e.Lslash=667,e.Oslash=778,e.OE=1e3,e.ordmasculine=330,e.ae=722,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=556,e.Idieresis=389,e.eacute=444,e.abreve=500,e.uhungarumlaut=556,e.ecaron=444,e.Ydieresis=722,e.divide=570,e.Yacute=722,e.Acircumflex=722,e.aacute=500,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=747,e.Emacron=667,e.ccaron=444,e.aring=500,e.Ncommaaccent=722,e.lacute=278,e.agrave=500,e.Tcommaaccent=667,e.Cacute=722,e.atilde=500,e.Edotaccent=667,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=500,e.Amacron=722,e.rcaron=444,e.ccedilla=444,e.Zdotaccent=667,e.Thorn=611,e.Omacron=778,e.Racute=722,e.Sacute=556,e.dcaron=672,e.Umacron=722,e.uring=556,e.threesuperior=300,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=570,e.uacute=556,e.Tcaron=667,e.partialdiff=494,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=389,e.plusminus=570,e.brokenbar=220,e.registered=747,e.Gbreve=778,e.Idotaccent=389,e.summation=600,e.Egrave=667,e.racute=444,e.omacron=500,e.Zacute=667,e.Zcaron=667,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=416,e.eogonek=444,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=444,e.zacute=444,e.iogonek=278,e.Oacute=778,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=300,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=667,e.dcroat=556,e.threequarters=750,e.Scedilla=556,e.lcaron=394,e.Kcommaaccent=778,e.Lacute=667,e.trademark=1e3,e.edotaccent=444,e.Igrave=389,e.Imacron=389,e.Lcaron=667,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=778,e.degree=400,e.ograve=500,e.Ccaron=722,e.ugrave=556,e.radical=549,e.Dcaron=722,e.rcommaaccent=444,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=722,e.Lcommaaccent=667,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=444,e.Ecaron=667,e.Iogonek=389,e.kcommaaccent=556,e.minus=570,e.Icircumflex=389,e.ncaron=556,e.tcommaaccent=333,e.logicalnot=570,e.odieresis=500,e.udieresis=556,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=444,e.ncommaaccent=556,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-BoldItalic"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=389,e.quotedbl=555,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=570,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=570,e.equal=570,e.greater=570,e.question=500,e.at=832,e.A=667,e.B=667,e.C=667,e.D=722,e.E=667,e.F=667,e.G=722,e.H=778,e.I=389,e.J=500,e.K=667,e.L=611,e.M=889,e.N=722,e.O=722,e.P=611,e.Q=722,e.R=667,e.S=556,e.T=611,e.U=722,e.V=667,e.W=889,e.X=667,e.Y=611,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=570,e.underscore=500,e.quoteleft=333,e.a=500,e.b=500,e.c=444,e.d=500,e.e=444,e.f=333,e.g=500,e.h=556,e.i=278,e.j=278,e.k=500,e.l=278,e.m=778,e.n=556,e.o=500,e.p=500,e.q=500,e.r=389,e.s=389,e.t=278,e.u=556,e.v=444,e.w=667,e.x=500,e.y=444,e.z=389,e.braceleft=348,e.bar=220,e.braceright=348,e.asciitilde=570,e.exclamdown=389,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=278,e.quotedblleft=500,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=500,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=944,e.ordfeminine=266,e.Lslash=611,e.Oslash=722,e.OE=944,e.ordmasculine=300,e.ae=722,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=500,e.Idieresis=389,e.eacute=444,e.abreve=500,e.uhungarumlaut=556,e.ecaron=444,e.Ydieresis=611,e.divide=570,e.Yacute=611,e.Acircumflex=667,e.aacute=500,e.Ucircumflex=722,e.yacute=444,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=747,e.Emacron=667,e.ccaron=444,e.aring=500,e.Ncommaaccent=722,e.lacute=278,e.agrave=500,e.Tcommaaccent=611,e.Cacute=667,e.atilde=500,e.Edotaccent=667,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=494,e.Rcaron=667,e.Gcommaaccent=722,e.ucircumflex=556,e.acircumflex=500,e.Amacron=667,e.rcaron=389,e.ccedilla=444,e.Zdotaccent=611,e.Thorn=611,e.Omacron=722,e.Racute=667,e.Sacute=556,e.dcaron=608,e.Umacron=722,e.uring=556,e.threesuperior=300,e.Ograve=722,e.Agrave=667,e.Abreve=667,e.multiply=570,e.uacute=556,e.Tcaron=611,e.partialdiff=494,e.ydieresis=444,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=389,e.plusminus=570,e.brokenbar=220,e.registered=747,e.Gbreve=722,e.Idotaccent=389,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=500,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=366,e.eogonek=444,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=444,e.zacute=389,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=576,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=667,e.dcroat=500,e.threequarters=750,e.Scedilla=556,e.lcaron=382,e.Kcommaaccent=667,e.Lacute=611,e.trademark=1e3,e.edotaccent=444,e.Igrave=389,e.Imacron=389,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=556,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=667,e.Lcommaaccent=611,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=722,e.zdotaccent=389,e.Ecaron=667,e.Iogonek=389,e.kcommaaccent=500,e.minus=606,e.Icircumflex=389,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=606,e.odieresis=500,e.udieresis=556,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=389,e.ncommaaccent=556,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-Italic"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=420,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=675,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=675,e.equal=675,e.greater=675,e.question=500,e.at=920,e.A=611,e.B=611,e.C=667,e.D=722,e.E=611,e.F=611,e.G=722,e.H=722,e.I=333,e.J=444,e.K=667,e.L=556,e.M=833,e.N=667,e.O=722,e.P=611,e.Q=722,e.R=611,e.S=500,e.T=556,e.U=722,e.V=611,e.W=833,e.X=611,e.Y=556,e.Z=556,e.bracketleft=389,e.backslash=278,e.bracketright=389,e.asciicircum=422,e.underscore=500,e.quoteleft=333,e.a=500,e.b=500,e.c=444,e.d=500,e.e=444,e.f=278,e.g=500,e.h=500,e.i=278,e.j=278,e.k=444,e.l=278,e.m=722,e.n=500,e.o=500,e.p=500,e.q=500,e.r=389,e.s=389,e.t=278,e.u=500,e.v=444,e.w=667,e.x=444,e.y=444,e.z=389,e.braceleft=400,e.bar=275,e.braceright=400,e.asciitilde=541,e.exclamdown=389,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=214,e.quotedblleft=556,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=523,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=556,e.quotedblright=556,e.guillemotright=500,e.ellipsis=889,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=889,e.AE=889,e.ordfeminine=276,e.Lslash=556,e.Oslash=722,e.OE=944,e.ordmasculine=310,e.ae=667,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=667,e.germandbls=500,e.Idieresis=333,e.eacute=444,e.abreve=500,e.uhungarumlaut=500,e.ecaron=444,e.Ydieresis=556,e.divide=675,e.Yacute=556,e.Acircumflex=611,e.aacute=500,e.Ucircumflex=722,e.yacute=444,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=500,e.Edieresis=611,e.Dcroat=722,e.commaaccent=250,e.copyright=760,e.Emacron=611,e.ccaron=444,e.aring=500,e.Ncommaaccent=667,e.lacute=278,e.agrave=500,e.Tcommaaccent=556,e.Cacute=667,e.atilde=500,e.Edotaccent=611,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=471,e.Rcaron=611,e.Gcommaaccent=722,e.ucircumflex=500,e.acircumflex=500,e.Amacron=611,e.rcaron=389,e.ccedilla=444,e.Zdotaccent=556,e.Thorn=611,e.Omacron=722,e.Racute=611,e.Sacute=500,e.dcaron=544,e.Umacron=722,e.uring=500,e.threesuperior=300,e.Ograve=722,e.Agrave=611,e.Abreve=611,e.multiply=675,e.uacute=500,e.Tcaron=556,e.partialdiff=476,e.ydieresis=444,e.Nacute=667,e.icircumflex=278,e.Ecircumflex=611,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=500,e.umacron=500,e.Ncaron=667,e.Iacute=333,e.plusminus=675,e.brokenbar=275,e.registered=760,e.Gbreve=722,e.Idotaccent=333,e.summation=600,e.Egrave=611,e.racute=389,e.omacron=500,e.Zacute=556,e.Zcaron=556,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=300,e.eogonek=444,e.Uogonek=722,e.Aacute=611,e.Adieresis=611,e.egrave=444,e.zacute=389,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=500,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=611,e.dcroat=500,e.threequarters=750,e.Scedilla=500,e.lcaron=300,e.Kcommaaccent=667,e.Lacute=556,e.trademark=980,e.edotaccent=444,e.Igrave=333,e.Imacron=333,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=500,e.Uhungarumlaut=722,e.Eacute=611,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=500,e.Scommaaccent=500,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=500,e.radical=453,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=667,e.otilde=500,e.Rcommaaccent=611,e.Lcommaaccent=556,e.Atilde=611,e.Aogonek=611,e.Aring=611,e.Otilde=722,e.zdotaccent=389,e.Ecaron=611,e.Iogonek=333,e.kcommaaccent=444,e.minus=675,e.Icircumflex=333,e.ncaron=500,e.tcommaaccent=278,e.logicalnot=675,e.odieresis=500,e.udieresis=500,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=389,e.ncommaaccent=500,e.onesuperior=300,e.imacron=278,e.Euro=500})),e.ZapfDingbats=(0,n.getLookupTableFactory)((function(e){e.space=278,e.a1=974,e.a2=961,e.a202=974,e.a3=980,e.a4=719,e.a5=789,e.a119=790,e.a118=791,e.a117=690,e.a11=960,e.a12=939,e.a13=549,e.a14=855,e.a15=911,e.a16=933,e.a105=911,e.a17=945,e.a18=974,e.a19=755,e.a20=846,e.a21=762,e.a22=761,e.a23=571,e.a24=677,e.a25=763,e.a26=760,e.a27=759,e.a28=754,e.a6=494,e.a7=552,e.a8=537,e.a9=577,e.a10=692,e.a29=786,e.a30=788,e.a31=788,e.a32=790,e.a33=793,e.a34=794,e.a35=816,e.a36=823,e.a37=789,e.a38=841,e.a39=823,e.a40=833,e.a41=816,e.a42=831,e.a43=923,e.a44=744,e.a45=723,e.a46=749,e.a47=790,e.a48=792,e.a49=695,e.a50=776,e.a51=768,e.a52=792,e.a53=759,e.a54=707,e.a55=708,e.a56=682,e.a57=701,e.a58=826,e.a59=815,e.a60=789,e.a61=789,e.a62=707,e.a63=687,e.a64=696,e.a65=689,e.a66=786,e.a67=787,e.a68=713,e.a69=791,e.a70=785,e.a71=791,e.a72=873,e.a73=761,e.a74=762,e.a203=762,e.a75=759,e.a204=759,e.a76=892,e.a77=892,e.a78=788,e.a79=784,e.a81=438,e.a82=138,e.a83=277,e.a84=415,e.a97=392,e.a98=392,e.a99=668,e.a100=668,e.a89=390,e.a90=390,e.a93=317,e.a94=317,e.a91=276,e.a92=276,e.a205=509,e.a85=509,e.a206=410,e.a86=410,e.a87=234,e.a88=234,e.a95=334,e.a96=334,e.a101=732,e.a102=544,e.a103=544,e.a104=910,e.a106=667,e.a107=760,e.a108=760,e.a112=776,e.a111=595,e.a110=694,e.a109=626,e.a120=788,e.a121=788,e.a122=788,e.a123=788,e.a124=788,e.a125=788,e.a126=788,e.a127=788,e.a128=788,e.a129=788,e.a130=788,e.a131=788,e.a132=788,e.a133=788,e.a134=788,e.a135=788,e.a136=788,e.a137=788,e.a138=788,e.a139=788,e.a140=788,e.a141=788,e.a142=788,e.a143=788,e.a144=788,e.a145=788,e.a146=788,e.a147=788,e.a148=788,e.a149=788,e.a150=788,e.a151=788,e.a152=788,e.a153=788,e.a154=788,e.a155=788,e.a156=788,e.a157=788,e.a158=788,e.a159=788,e.a160=894,e.a161=838,e.a163=1016,e.a164=458,e.a196=748,e.a165=924,e.a192=748,e.a166=918,e.a167=927,e.a168=928,e.a169=928,e.a170=834,e.a171=873,e.a172=828,e.a173=924,e.a162=924,e.a174=917,e.a175=930,e.a176=931,e.a177=463,e.a178=883,e.a179=836,e.a193=836,e.a180=867,e.a199=867,e.a181=696,e.a200=696,e.a182=874,e.a201=874,e.a183=760,e.a184=946,e.a197=771,e.a185=865,e.a194=771,e.a198=888,e.a186=967,e.a195=888,e.a187=831,e.a188=873,e.a189=927,e.a190=970,e.a191=918}))}));t.getMetrics=a;var i=(0,n.getLookupTableFactory)((function(e){e.Courier={ascent:629,descent:-157,capHeight:562,xHeight:-426},e["Courier-Bold"]={ascent:629,descent:-157,capHeight:562,xHeight:439},e["Courier-Oblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426},e["Courier-BoldOblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426},e.Helvetica={ascent:718,descent:-207,capHeight:718,xHeight:523},e["Helvetica-Bold"]={ascent:718,descent:-207,capHeight:718,xHeight:532},e["Helvetica-Oblique"]={ascent:718,descent:-207,capHeight:718,xHeight:523},e["Helvetica-BoldOblique"]={ascent:718,descent:-207,capHeight:718,xHeight:532},e["Times-Roman"]={ascent:683,descent:-217,capHeight:662,xHeight:450},e["Times-Bold"]={ascent:683,descent:-217,capHeight:676,xHeight:461},e["Times-Italic"]={ascent:683,descent:-217,capHeight:653,xHeight:441},e["Times-BoldItalic"]={ascent:683,descent:-217,capHeight:669,xHeight:462},e.Symbol={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN},e.ZapfDingbats={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN}}));t.getFontBasicMetrics=i},(e,t)=>{function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||i(e,t)||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 n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=i(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}function i(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r131070,n=r?4:2,i=new DataView(new ArrayBuffer((this.glyphs.length+1)*n));r?i.setUint32(0,0):i.setUint16(0,0);var o,s=0,c=0,u=a(this.glyphs);try{for(u.s();!(o=u.n()).done;)s=(s+=o.value.write(s,t))+3&-4,c+=n,r?i.setUint32(c,s):i.setUint16(c,s>>1)}catch(e){u.e(e)}finally{u.f()}return{isLocationLong:r,loca:new Uint8Array(i.buffer),glyf:new Uint8Array(t.buffer)}}},{key:"scale",value:function(e){for(var t=0,r=this.glyphs.length;t255?t+=2:f>0&&(t+=1),r=u,(f=Math.abs(l-n))>255?t+=2:f>0&&(t+=1),n=l}}}catch(e){i.e(e)}finally{i.f()}return t}},{key:"write",value:function(e,t){var r,n=e,i=[],o=[],s=[],c=0,u=0,l=a(this.contours);try{for(l.s();!(r=l.n()).done;){for(var f=r.value,h=0,d=f.xCoordinates.length;h=0?18:2,i.push(y)):i.push(v)}c=g;var m=f.yCoordinates[h];if(0==(v=m-u))p|=32,o.push(0);else{var b=Math.abs(v);b<=255?(p|=v>=0?36:4,o.push(b)):o.push(v)}u=m,s.push(p)}t.setUint16(e,i.length-1),e+=2}}catch(e){l.e(e)}finally{l.f()}t.setUint16(e,this.instructions.length),e+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e),e+=this.instructions.length);for(var w=0,k=s;w=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2),e}},{key:"write",value:function(e,t){var r=e;return 2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1),t.setUint16(e,this.flags),t.setUint16(e+2,this.glyphIndex),e+=4,1&this.flags?(2&this.flags?(t.setInt16(e,this.argument1),t.setInt16(e+2,this.argument2)):(t.setUint16(e,this.argument1),t.setUint16(e+2,this.argument2)),e+=4):(t.setUint8(e,this.argument1),t.setUint8(e+1,this.argument2),e+=2),256&this.flags&&(t.setUint16(e,this.instructions.length),e+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e),e+=this.instructions.length)),e-r}},{key:"scale",value:function(e,t){}}],[{key:"parse",value:function(t,r){var n,a,i=t,o=[],s=r.getUint16(t),c=r.getUint16(t+2);t+=4,1&s?(2&s?(n=r.getInt16(t),a=r.getInt16(t+2)):(n=r.getUint16(t),a=r.getUint16(t+2)),t+=4,s^=1):(2&s?(n=r.getInt8(t),a=r.getInt8(t+1)):(n=r.getUint8(t),a=r.getUint8(t+1)),t+=2),8&s?(o.push(r.getUint16(t)),t+=2):64&s?(o.push(r.getUint16(t),r.getUint16(t+2)),t+=4):128&s&&(o.push(r.getUint16(t),r.getUint16(t+2),r.getUint16(t+4),r.getUint16(t+6)),t+=8);var u=null;if(256&s){var l=r.getUint16(t);t+=2,u=new Uint8Array(r).slice(t,t+l),t+=l}return[t-i,new e({flags:s,glyphIndex:c,argument1:n,argument2:a,transf:o,instructions:u})]}}]),e}()},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.OpenTypeFileBuilder=void 0;var a=r(135),i=r(2);function o(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r>8&255,e[t+1]=255&r}function u(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r}function l(e,t,r){if(r instanceof Uint8Array)e.set(r,t);else if("string"==typeof r)for(var n=0,a=r.length;n=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}(r);try{for(o.s();!(i=o.n()).done;){var c=i.value;e[t++]=255&c}}catch(e){o.e(e)}finally{o.f()}}}var f=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.sfnt=t,this.tables=Object.create(null)}var t,r,n;return t=e,n=[{key:"getSearchParams",value:function(e,t){for(var r=1,n=0;(r^e)>r;)r<<=1,n++;var a=r*t;return{range:a,entry:n,rangeShift:t*e-a}}}],(r=[{key:"toArray",value:function(){var t=this.sfnt,r=this.tables,n=Object.keys(r);n.sort();var o,s,f,h,d,p=n.length,g=12+16*p,v=[g];for(o=0;o>>0,v.push(g);var y=new Uint8Array(g);for(o=0;o>>0;u(y,g+4,b),u(y,g+8,v[o]),u(y,g+12,r[d].length),g+=16}return y}},{key:"addTable",value:function(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}}])&&o(t.prototype,r),n&&o(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.OpenTypeFileBuilder=f},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Type1Font=void 0;var n=r(164),a=r(2),i=r(167),o=r(135),s=r(139),c=r(178);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=a){for(s+=u;s=0&&(o[l]=s);return(0,i.type1FontGlyphMapping)(e,o,c)}},{key:"hasGlyphId",value:function(e){return!(e<0||e>=this.numGlyphs)&&(0===e||this.charstrings[e-1].charstring.length>0)}},{key:"getSeacs",value:function(e){for(var t=[],r=0,n=e.length;r0;b--)m[b]-=m[b-1];g.setByName(y,m)}}o.topDict.privateDict=g;var w=new n.CFFIndex;for(u=0,l=a.length;u{Object.defineProperty(t,"__esModule",{value:!0}),t.Type1Parser=void 0;var n=r(166),a=r(135),i=r(139),o=r(2);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);ri)return!0;for(var o=i-e,s=o;s>8&255,255&u):(u=65536*u|0,this.output.push(255,u>>24&255,u>>16&255,u>>8&255,255&u))}return(n=this.output).push.apply(n,function(e){if(Array.isArray(e))return c(e)}(a=t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(a)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),r?this.stack.splice(o,e):this.stack.length=0,!1}}]),e}();function O(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function A(e,t,r){if(r>=e.length)return new Uint8Array(0);var n,a,i=0|t;for(n=0;n>8,i=52845*(c+i)+22719&65535}return s}function C(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}var F=function(){function e(t,r,n){if(u(this,e),r){var o=t.getBytes(),s=!((O(o[0])||(0,a.isWhiteSpace)(o[0]))&&O(o[1])&&O(o[2])&&O(o[3])&&O(o[4])&&O(o[5])&&O(o[6])&&O(o[7]));t=new i.Stream(s?A(o,55665,4):function(e,t,r){var n,a,i=55665,o=e.length,s=new Uint8Array(o>>>1);for(n=0,a=0;n>8,i=52845*(l+i)+22719&65535}}}return s.slice(4,a)}(o))}this.seacAnalysisEnabled=!!n,this.stream=t,this.nextChar()}return f(e,[{key:"readNumberArray",value:function(){this.getToken();for(var e=[];;){var t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}},{key:"readNumber",value:function(){var e=this.getToken();return parseFloat(e||0)}},{key:"readInt",value:function(){var e=this.getToken();return 0|parseInt(e||0,10)}},{key:"readBoolean",value:function(){return"true"===this.getToken()?1:0}},{key:"nextChar",value:function(){return this.currentChar=this.stream.getByte()}},{key:"prevChar",value:function(){return this.stream.skip(-2),this.currentChar=this.stream.getByte()}},{key:"getToken",value:function(){for(var e=!1,t=this.currentChar;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!(0,a.isWhiteSpace)(t))break;t=this.nextChar()}if(C(t))return this.nextChar(),String.fromCharCode(t);var r="";do{r+=String.fromCharCode(t),t=this.nextChar()}while(t>=0&&!(0,a.isWhiteSpace)(t)&&!C(t));return r}},{key:"readCharStrings",value:function(e,t){return-1===t?e:A(e,4330,t)}},{key:"extractFontProgram",value:function(e){var t=this.stream,r=[],n=[],a=Object.create(null);a.lenIV=4;for(var i,o,s,c,u={subrs:[],charstrings:[],properties:{privateData:a}};null!==(i=this.getToken());)if("/"===i)switch(i=this.getToken()){case"CharStrings":for(this.getToken(),this.getToken(),this.getToken(),this.getToken();null!==(i=this.getToken())&&"end"!==i;)if("/"===i){var l=this.getToken();o=this.readInt(),this.getToken(),s=o>0?t.getBytes(o):new Uint8Array(0),c=u.properties.privateData.lenIV;var f=this.readCharStrings(s,c);this.nextChar(),"noaccess"===(i=this.getToken())?this.getToken():"/"===i&&this.prevChar(),n.push({glyph:l,encoded:f})}break;case"Subrs":for(this.readInt(),this.getToken();"dup"===this.getToken();){var h=this.readInt();o=this.readInt(),this.getToken(),s=o>0?t.getBytes(o):new Uint8Array(0),c=u.properties.privateData.lenIV;var d=this.readCharStrings(s,c);this.nextChar(),"noaccess"===(i=this.getToken())&&this.getToken(),r[h]=d}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":var p=this.readNumberArray();p.length>0&&p.length;break;case"StemSnapH":case"StemSnapV":u.properties.privateData[i]=this.readNumberArray();break;case"StdHW":case"StdVW":u.properties.privateData[i]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":case"ExpansionFactor":u.properties.privateData[i]=this.readNumber();break;case"ForceBold":u.properties.privateData[i]=this.readBoolean()}for(var g=0,v=n;g-1&&void 0===e.widths[A]&&A>=e.firstChar&&A<=e.lastChar&&(e.widths[A]=w.width)}}return u}},{key:"extractFontHeader",value:function(e){for(var t;null!==(t=this.getToken());)if("/"===t)switch(t=this.getToken()){case"FontMatrix":var r=this.readNumberArray();e.fontMatrix=r;break;case"Encoding":var a=this.getToken(),i=void 0;if(/^\\d+$/.test(a)){i=[];var o=0|parseInt(a,10);this.getToken();for(var s=0;s{Object.defineProperty(t,"__esModule",{value:!0}),t.Pattern=void 0,t.getTilingPatternIR=function(e,t,r){var a=t.getArray("Matrix"),i=n.Util.normalizeRect(t.getArray("BBox")),o=t.get("XStep"),s=t.get("YStep"),c=t.get("PaintType"),u=t.get("TilingType");if(i[2]-i[0]==0||i[3]-i[1]==0)throw new n.FormatError("Invalid getTilingPatternIR /BBox array: [".concat(i,"]."));return["TilingPattern",r,e,a,i,o,s,c,u]};var n=r(2),a=r(136),i=r(143),o=r(135);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=v||j<=0)return(0,n.info)("Bad shading domain."),f(l);for(var _,L=new Float32Array(h.numComps),R=new Float32Array(1),N=0;N<=10;N++){R[0]=g+N*j,E(R,0,L,0),_=h.getRgb(L,0);var D=n.Util.makeHexColor(_[0],_[1],_[2]);M.push([N/10,D])}var B="transparent";return e.has("Background")&&(_=h.getRgb(e.get("Background"),0),B=n.Util.makeHexColor(_[0],_[1],_[2])),m||(M.unshift([0,B]),M[1][0]+=b.SMALL_NUMBER),w||(M.at(-1)[0]-=b.SMALL_NUMBER,M.push([1,B])),l.colorStops=M,l}return v(r,[{key:"getIR",value:function(){var e,t,r,a,i,o=this.coordsArr,s=this.shadingType;return 2===s?(t=[o[0],o[1]],r=[o[2],o[3]],a=null,i=null,e="axial"):3===s?(t=[o[0],o[1]],r=[o[3],o[4]],a=o[2],i=o[5],e="radial"):(0,n.unreachable)("getPattern type unknown: ".concat(s)),["RadialAxial",e,this.bbox,this.colorStops,t,r,a,i]}}]),r}(b),k=function(){function e(t,r){p(this,e),this.stream=t,this.context=r,this.buffer=0,this.bufferLength=0;var n=r.numComps;this.tmpCompsBuf=new Float32Array(n);var a=r.colorSpace.numComps;this.tmpCsCompsBuf=r.colorFn?new Float32Array(a):this.tmpCompsBuf}return v(e,[{key:"hasData",get:function(){if(this.stream.end)return this.stream.pos0)return!0;var e=this.stream.getByte();return!(e<0||(this.buffer=e,this.bufferLength=8,0))}},{key:"readBits",value:function(e){var t=this.buffer,r=this.bufferLength;if(32===e){if(0===r)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();var n=this.stream.getByte();return this.buffer=n&(1<>r)>>>0}if(8===e&&0===r)return this.stream.getByte();for(;r>r}},{key:"align",value:function(){this.buffer=0,this.bufferLength=0}},{key:"readFlag",value:function(){return this.readBits(this.context.bitsPerFlag)}},{key:"readCoordinate",value:function(){var e=this.context.bitsPerCoordinate,t=this.readBits(e),r=this.readBits(e),n=this.context.decode,a=e<32?1/((1<o?o:e,t=t>s?s:t,r=r{Object.defineProperty(t,"__esModule",{value:!0}),t.getXfaFontDict=function(e){var t=function(e){var t=g(e);if(!t)return null;var r,n=t.baseWidths,a=t.baseMapping,i=t.factors;r=i?n.map((function(e,t){return e*i[t]})):n;var o,s,c=-2,u=[],l=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=h(e))){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(a.map((function(e,t){return[e,t]})).sort((function(e,t){return f(e,1)[0]-f(t,1)[0]})));try{for(l.s();!(s=l.n()).done;){var d=f(s.value,2),p=d[0],v=d[1];-1!==p&&(p===c+1?(o.push(r[v]),c+=1):(c=p,o=[r[v]],u.push(p,o)))}}catch(e){l.e(e)}finally{l.f()}return u}(e),r=new a.Dict(null);r.set("BaseFont",a.Name.get(e)),r.set("Type",a.Name.get("Font")),r.set("Subtype",a.Name.get("CIDFontType2")),r.set("Encoding",a.Name.get("Identity-H")),r.set("CIDToGIDMap",a.Name.get("Identity")),r.set("W",t),r.set("FirstChar",t[0]),r.set("LastChar",t.at(-2)+t.at(-1).length-1);var n=new a.Dict(null);r.set("FontDescriptor",n);var i=new a.Dict(null);return i.set("Ordering","Identity"),i.set("Registry","Adobe"),i.set("Supplement",0),r.set("CIDSystemInfo",i),r},t.getXfaFontName=g;var n=r(181),a=r(134),i=r(182),o=r(183),s=r(184),c=r(185),u=r(135),l=r(167);function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||h(e,t)||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 h(e,t){if(e){if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,t):void 0}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.CalibriRegularMetrics=t.CalibriRegularFactors=t.CalibriItalicMetrics=t.CalibriItalicFactors=t.CalibriBoldMetrics=t.CalibriBoldItalicMetrics=t.CalibriBoldItalicFactors=t.CalibriBoldFactors=void 0,t.CalibriBoldFactors=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.54657,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.73293,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.9121,.86943,.79795,.88198,.77958,.70864,.81055,.90399,.88653,.96017,.82577,.77892,.78257,.97507,1.54657,.97507,.85284,.89552,.90176,.88762,.8785,.75241,.8785,.90518,.95015,.77618,.8785,.88401,.91916,.86304,.88401,.91488,.8785,.8801,.8785,.8785,.91343,.7173,1.04106,.8785,.85075,.95794,.82616,.85162,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.12401,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.73293,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.9121,.86943,.86943,.86943,.86943,.86943,.85284,.87508,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.88762,.88762,.88762,.88762,.88762,.88762,.8715,.75241,.90518,.90518,.90518,.90518,.88401,.88401,.88401,.88401,.8785,.8785,.8801,.8801,.8801,.8801,.8801,.90747,.89049,.8785,.8785,.8785,.8785,.85162,.8785,.85162,.83908,.88762,.83908,.88762,.83908,.88762,.73293,.75241,.73293,.75241,.73293,.75241,.73293,.75241,.87289,.83016,.88506,.93125,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.81921,.77618,.81921,.77618,.81921,.77618,1,1,.87356,.8785,.91075,.89608,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76229,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.79468,.91926,.88175,.70823,.94903,.9121,.8785,1,1,.9121,.8785,.87802,.88656,.8785,.86943,.8801,.86943,.8801,.86943,.8801,.87402,.89291,.77958,.91343,1,1,.77958,.91343,.70864,.7173,.70864,.7173,.70864,.7173,.70864,.7173,1,1,.81055,.75841,.81055,1.06452,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.96017,.95794,.77892,.85162,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.88762,.77539,.8715,.87508,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70674,.98387,.94721,1.33431,1.45894,.95161,1.06303,.83908,.80352,.57184,.6965,.56289,.82001,.56029,.81235,1.02988,.83908,.7762,.68156,.80367,.73133,.78257,.87356,.86943,.95958,.75727,.89019,1.04924,.9121,.7648,.86943,.87356,.79795,.78275,.81055,.77892,.9762,.82577,.99819,.84896,.95958,.77892,.96108,1.01407,.89049,1.02988,.94211,.96108,.8936,.84021,.87842,.96399,.79109,.89049,1.00813,1.02988,.86077,.87445,.92099,.84723,.86513,.8801,.75638,.85714,.78216,.79586,.87965,.94211,.97747,.78287,.97926,.84971,1.02988,.94211,.8801,.94211,.84971,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90264,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.90518,1,1,1,1,1,1,1,1,1,1,1,1,.90548,1,1,1,1,1,1,.96017,.95794,.96017,.95794,.96017,.95794,.77892,.85162,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.92794,.87012,.87012,.87012,.89552,.89552,1.42259,.71143,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.93835,.83406,.91133,.84107,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90527,1.81055,.90527,1.81055,1.31006,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriBoldMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriBoldItalicFactors=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.56239,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.71805,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.90872,.85938,.79795,.87068,.77958,.69766,.81055,.90399,.88653,.96068,.82577,.77892,.78257,.97507,1.529,.97507,.85284,.89552,.90176,.94908,.86411,.74012,.86411,.88323,.95015,.86411,.86331,.88401,.91916,.86304,.88401,.9039,.86331,.86331,.86411,.86411,.90464,.70852,1.04106,.86331,.84372,.95794,.82616,.84548,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.19129,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.71805,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.90872,.85938,.85938,.85938,.85938,.85938,.85284,.87068,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.94908,.94908,.94908,.94908,.94908,.94908,.85887,.74012,.88323,.88323,.88323,.88323,.88401,.88401,.88401,.88401,.8785,.86331,.86331,.86331,.86331,.86331,.86331,.90747,.89049,.86331,.86331,.86331,.86331,.84548,.86411,.84548,.83908,.94908,.83908,.94908,.83908,.94908,.71805,.74012,.71805,.74012,.71805,.74012,.71805,.74012,.87289,.79538,.88506,.92726,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.81921,.86411,.81921,.86411,.81921,.86411,1,1,.87356,.86331,.91075,.8777,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76467,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.77312,.91926,.88175,.70823,.94903,.90872,.86331,1,1,.90872,.86331,.86906,.88116,.86331,.85938,.86331,.85938,.86331,.85938,.86331,.87402,.86549,.77958,.90464,1,1,.77958,.90464,.69766,.70852,.69766,.70852,.69766,.70852,.69766,.70852,1,1,.81055,.75841,.81055,1.06452,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.96068,.95794,.77892,.84548,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.94908,.77539,.85887,.87068,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70088,.98387,.94721,1.33431,1.45894,.95161,1.48387,.83908,.80352,.57118,.6965,.56347,.79179,.55853,.80346,1.02988,.83908,.7762,.67174,.86036,.73133,.78257,.87356,.86441,.95958,.75727,.89019,1.04924,.90872,.74889,.85938,.87891,.79795,.7957,.81055,.77892,.97447,.82577,.97466,.87179,.95958,.77892,.94252,.95612,.8753,1.02988,.92733,.94252,.87411,.84021,.8728,.95612,.74081,.8753,1.02189,1.02988,.84814,.87445,.91822,.84723,.85668,.86331,.81344,.87581,.76422,.82046,.96057,.92733,.99375,.78022,.95452,.86015,1.02988,.92733,.86331,.92733,.86015,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90631,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.88323,1,1,1,1,1,1,1,1,1,1,1,1,.85174,1,1,1,1,1,1,.96068,.95794,.96068,.95794,.96068,.95794,.77892,.84548,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.89807,.87012,.87012,.87012,.89552,.89552,1.42259,.71094,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.92972,.83406,.91133,.83326,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90616,1.81055,.90527,1.81055,1.3107,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriBoldItalicMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriItalicFactors=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39543,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.72346,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89249,.84118,.77452,.85374,.75186,.67789,.79776,.88844,.85066,.94309,.77818,.7306,.76659,1.10369,1.38313,1.10369,1.06139,.89552,.8739,.9245,.9245,.83203,.9245,.85865,1.09842,.9245,.9245,1.03297,1.07692,.90918,1.03297,.94959,.9245,.92274,.9245,.9245,1.02933,.77832,1.20562,.9245,.8916,.98986,.86621,.89453,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.16359,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.72346,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89249,.84118,.84118,.84118,.84118,.84118,.85284,.84557,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.9245,.9245,.9245,.9245,.9245,.9245,.84843,.83203,.85865,.85865,.85865,.85865,.82601,.82601,.82601,.82601,.94469,.9245,.92274,.92274,.92274,.92274,.92274,.90747,.86651,.9245,.9245,.9245,.9245,.89453,.9245,.89453,.8675,.9245,.8675,.9245,.8675,.9245,.72346,.83203,.72346,.83203,.72346,.83203,.72346,.83203,.85193,.8875,.86477,.99034,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.81105,.9245,.81105,.9245,.81105,.9245,1,1,.86275,.9245,.90872,.93591,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77896,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.9375,.98156,.93407,.77261,1.11429,.89249,.9245,1,1,.89249,.9245,.92534,.86698,.9245,.84118,.92274,.84118,.92274,.84118,.92274,.8667,.86291,.75186,1.02933,1,1,.75186,1.02933,.67789,.77832,.67789,.77832,.67789,.77832,.67789,.77832,1,1,.79776,.97655,.79776,1.23023,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.94309,.98986,.7306,.89453,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.9245,.76318,.84843,.84557,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67009,.96334,.93695,1.35191,1.40909,.95161,1.48387,.8675,.90861,.6192,.7363,.64824,.82411,.56321,.85696,1.23516,.8675,.81552,.7286,.84134,.73206,.76659,.86275,.84369,.90685,.77892,.85871,1.02638,.89249,.75828,.84118,.85984,.77452,.76466,.79776,.7306,.90782,.77818,.903,.87291,.90685,.7306,.99058,1.03667,.94635,1.23516,.9849,.99058,.92393,.8916,.942,1.03667,.75026,.94635,1.0297,1.23516,.90918,.94048,.98217,.89746,.84153,.92274,.82507,.88832,.84438,.88178,1.03525,.9849,1.00225,.78086,.97248,.89404,1.23516,.9849,.92274,.9849,.89404,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.89693,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.85865,1,1,1,1,1,1,1,1,1,1,1,1,.90933,1,1,1,1,1,1,.94309,.98986,.94309,.98986,.94309,.98986,.7306,.89453,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.68994,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.97858,.82616,.91133,.83437,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90572,1.81055,.90749,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85284,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriItalicMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriRegularFactors=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39016,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.73834,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89385,.85122,.77452,.86503,.75186,.68887,.79776,.88844,.85066,.94258,.77818,.7306,.76659,1.10369,1.39016,1.10369,1.06139,.89552,.8739,.86128,.94469,.8457,.94469,.89464,1.09842,.84636,.94469,1.03297,1.07692,.90918,1.03297,.95897,.94469,.9482,.94469,.94469,1.04692,.78223,1.20562,.94469,.90332,.98986,.86621,.90527,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.08707,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.73834,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89385,.85122,.85122,.85122,.85122,.85122,.85284,.85311,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.86128,.86128,.86128,.86128,.86128,.86128,.8693,.8457,.89464,.89464,.89464,.89464,.82601,.82601,.82601,.82601,.94469,.94469,.9482,.9482,.9482,.9482,.9482,.90747,.86651,.94469,.94469,.94469,.94469,.90527,.94469,.90527,.8675,.86128,.8675,.86128,.8675,.86128,.73834,.8457,.73834,.8457,.73834,.8457,.73834,.8457,.85193,.92454,.86477,.9921,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.81105,.84636,.81105,.84636,.81105,.84636,1,1,.86275,.94469,.90872,.95786,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77741,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.90452,.98156,1.11842,.77261,1.11429,.89385,.94469,1,1,.89385,.94469,.95877,.86901,.94469,.85122,.9482,.85122,.9482,.85122,.9482,.8667,.90016,.75186,1.04692,1,1,.75186,1.04692,.68887,.78223,.68887,.78223,.68887,.78223,.68887,.78223,1,1,.79776,.92188,.79776,1.23023,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.94258,.98986,.7306,.90527,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.86128,.76318,.8693,.85311,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67742,.96334,.93695,1.35191,1.40909,.95161,1.48387,.86686,.90861,.62267,.74359,.65649,.85498,.56963,.88254,1.23516,.8675,.81552,.75443,.84503,.73206,.76659,.86275,.85122,.90685,.77892,.85746,1.02638,.89385,.75657,.85122,.86275,.77452,.74171,.79776,.7306,.95165,.77818,.89772,.88831,.90685,.7306,.98142,1.02191,.96576,1.23516,.99018,.98142,.9236,.89258,.94035,1.02191,.78848,.96576,.9561,1.23516,.90918,.92578,.95424,.89746,.83969,.9482,.80113,.89442,.85208,.86155,.98022,.99018,1.00452,.81209,.99247,.89181,1.23516,.99018,.9482,.99018,.89181,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.88844,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89464,1,1,1,1,1,1,1,1,1,1,1,1,.96766,1,1,1,1,1,1,.94258,.98986,.94258,.98986,.94258,.98986,.7306,.90527,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.69043,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.99331,.82616,.91133,.84286,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90527,1.81055,.90527,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1.07185,.99413,.96334,1.08065,1,1,1,1,1,1,1,1,1,1,1],t.CalibriRegularMetrics={lineHeight:1.2207,lineGap:.2207}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.HelveticaRegularMetrics=t.HelveticaRegularFactors=t.HelveticaItalicMetrics=t.HelveticaItalicFactors=t.HelveticaBoldMetrics=t.HelveticaBoldItalicMetrics=t.HelveticaBoldItalicFactors=t.HelveticaBoldFactors=void 0,t.HelveticaBoldFactors=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.03374,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.00042,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.03828,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00034,.99977,1,.99997,1.00026,1.00078,1.00036,.99973,1.00013,1.0006,.99977,.99977,.99988,.85148,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,1.00069,1.00022,.99977,1.00001,.99984,1.00026,1.00001,1.00024,1.00001,.9999,1,1.0006,1.00001,1.00041,.99962,1.00026,1.0006,.99995,1.00041,.99942,.99973,.99927,1.00082,.99902,1.00026,1.00087,1.0006,1.00069,.99973,.99867,.99973,.9993,1.00026,1.00049,1.00056,1,.99988,.99935,.99995,.99954,1.00055,.99945,1.00032,1.0006,.99995,1.00026,.99995,1.00032,1.00001,1.00008,.99971,1.00019,.9994,1.00001,1.0006,1.00044,.99973,1.00023,1.00047,1,.99942,.99561,.99989,1.00035,.99977,1.00035,.99977,1.00019,.99944,1.00001,1.00021,.99926,1.00035,1.00035,.99942,1.00048,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.99989,1.00057,1.00001,.99936,1.00052,1.00012,.99996,1.00043,1,1.00035,.9994,.99976,1.00035,.99973,1.00052,1.00041,1.00119,1.00037,.99973,1.00002,.99986,1.00041,1.00041,.99902,.9996,1.00034,.99999,1.00026,.99999,1.00026,.99973,1.00052,.99973,1,.99973,1.00041,1.00075,.9994,1.0003,.99999,1,1.00041,.99955,1,.99915,.99973,.99973,1.00026,1.00119,.99955,.99973,1.0006,.99911,1.0006,1.00026,.99972,1.00026,.99902,1.00041,.99973,.99999,1,1,1.00038,1.0005,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,1.00047,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaBoldMetrics={lineHeight:1.2,lineGap:.2},t.HelveticaBoldItalicFactors=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.0044,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99971,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.01011,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99977,1,1,1.00026,.99969,.99972,.99981,.9998,1.0006,.99977,.99977,1.00022,.91155,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,.99966,1.00022,1.00032,1.00001,.99944,1.00026,1.00001,.99968,1.00001,1.00047,1,1.0006,1.00001,.99981,1.00101,1.00026,1.0006,.99948,.99981,1.00064,.99973,.99942,1.00101,1.00061,1.00026,1.00069,1.0006,1.00014,.99973,1.01322,.99973,1.00065,1.00026,1.00012,.99923,1,1.00064,1.00076,.99948,1.00055,1.00063,1.00007,.99943,1.0006,.99948,1.00026,.99948,.99943,1.00001,1.00001,1.00029,1.00038,1.00035,1.00001,1.0006,1.0006,.99973,.99978,1.00001,1.00057,.99989,.99967,.99964,.99967,.99977,.99999,.99977,1.00038,.99977,1.00001,.99973,1.00066,.99967,.99967,1.00041,.99998,.99999,.99977,1.00022,.99967,1.00001,.99977,1.00026,.99964,1.00031,1.00001,.99999,.99999,1,1.00023,1,1,.99999,1.00035,1.00001,.99999,.99973,.99977,.99999,1.00058,.99973,.99973,.99955,.9995,1.00026,1.00026,1.00032,.99989,1.00034,.99999,1.00026,1.00026,1.00026,.99973,.45998,.99973,1.00026,.99973,1.00001,.99999,.99982,.99994,.99996,1,1.00042,1.00044,1.00029,1.00023,.99973,.99973,1.00026,.99949,1.00002,.99973,1.0006,1.0006,1.0006,.99975,1.00026,1.00026,1.00032,.98685,.99973,1.00026,1,1,.99966,1.00044,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1,.99973,.99971,.99978,1,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00098,1,1,1,1.00049,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaBoldItalicMetrics={lineHeight:1.35,lineGap:.2},t.HelveticaItalicFactors=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.0288,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,.99946,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.06311,.99973,1.00024,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,1.00041,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.89547,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00001,1,1.00054,.99977,1.00084,1.00007,.99973,1.00013,.99924,1.00001,1.00001,.99945,.91221,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00001,.99999,.99977,.99933,1.00022,1.00054,1.00001,1.00065,1.00026,1.00001,1.0001,1.00001,1.00052,1,1.0006,1.00001,.99945,.99897,.99968,.99924,1.00036,.99945,.99949,1,1.0006,.99897,.99918,.99968,.99911,.99924,1,.99962,1.01487,1,1.0005,.99973,1.00012,1.00043,1,.99995,.99994,1.00036,.99947,1.00019,1.00063,1.00025,.99924,1.00036,.99973,1.00036,1.00025,1.00001,1.00001,1.00027,1.0001,1.00068,1.00001,1.0006,1.0006,1,1.00008,.99957,.99972,.9994,.99954,.99975,1.00051,1.00001,1.00019,1.00001,1.0001,.99986,1.00001,1.00001,1.00038,.99954,.99954,.9994,1.00066,.99999,.99977,1.00022,1.00054,1.00001,.99977,1.00026,.99975,1.0001,1.00001,.99993,.9995,.99955,1.00016,.99978,.99974,1.00019,1.00022,.99955,1.00053,.99973,1.00089,1.00005,.99967,1.00048,.99973,1.00002,1.00034,.99973,.99973,.99964,1.00006,1.00066,.99947,.99973,.98894,.99973,1,.44898,1,.99946,1,1.00039,1.00082,.99991,.99991,.99985,1.00022,1.00023,1.00061,1.00006,.99966,.99973,.99973,.99973,1.00019,1.0008,1,.99924,.99924,.99924,.99983,1.00044,.99973,.99964,.98332,1,.99973,1,1,.99962,.99895,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,1.00423,.99925,.99999,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00049,1,1.00245,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,1.00003,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaItalicMetrics={lineHeight:1.35,lineGap:.2},t.HelveticaRegularFactors=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.04596,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,1.00019,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.02572,.99973,1.00005,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,.99999,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.84533,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99928,1,.99977,1.00013,1.00055,.99947,.99945,.99941,.99924,1.00001,1.00001,1.0004,.91621,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00005,.99999,.99977,1.00015,1.00022,.99977,1.00001,.99973,1.00026,1.00001,1.00019,1.00001,.99946,1,1.0006,1.00001,.99978,1.00045,.99973,.99924,1.00023,.99978,.99966,1,1.00065,1.00045,1.00019,.99973,.99973,.99924,1,1,.96499,1,1.00055,.99973,1.00008,1.00027,1,.9997,.99995,1.00023,.99933,1.00019,1.00015,1.00031,.99924,1.00023,.99973,1.00023,1.00031,1.00001,.99928,1.00029,1.00092,1.00035,1.00001,1.0006,1.0006,1,.99988,.99975,1,1.00082,.99561,.9996,1.00035,1.00001,.99962,1.00001,1.00092,.99964,1.00001,.99963,.99999,1.00035,1.00035,1.00082,.99962,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.9996,.99967,1.00001,1.00034,1.00074,1.00054,1.00053,1.00063,.99971,.99962,1.00035,.99975,.99977,.99973,1.00043,.99953,1.0007,.99915,.99973,1.00008,.99892,1.00073,1.00073,1.00114,.99915,1.00073,.99955,.99973,1.00092,.99973,1,.99998,1,1.0003,1,1.00043,1.00001,.99969,1.0003,1,1.00035,1.00001,.9995,1,1.00092,.99973,.99973,.99973,1.0007,.9995,1,.99924,1.0006,.99924,.99972,1.00062,.99973,1.00114,1.00073,1,.99955,1,1,1.00047,.99968,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,.99925,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaRegularMetrics={lineHeight:1.2,lineGap:.2}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LiberationSansRegularWidths=t.LiberationSansRegularMapping=t.LiberationSansItalicWidths=t.LiberationSansItalicMapping=t.LiberationSansBoldWidths=t.LiberationSansBoldMapping=t.LiberationSansBoldItalicWidths=t.LiberationSansBoldItalicMapping=void 0,t.LiberationSansBoldWidths=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,719,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,785,556,556,278,722,556,556,611,278,611,278,611,385,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,465,722,333,853,906,474,825,927,838,278,722,722,601,719,667,611,722,778,278,722,667,833,722,644,778,722,667,600,611,667,821,667,809,802,278,667,615,451,611,278,582,615,610,556,606,475,460,611,541,278,558,556,612,556,445,611,766,619,520,684,446,582,715,576,753,845,278,582,611,582,845,667,669,885,567,711,667,278,276,556,1094,1062,875,610,722,622,719,722,719,722,567,712,667,904,626,719,719,610,702,833,722,778,719,667,722,611,622,854,667,730,703,1005,1019,870,979,719,711,1031,719,556,618,615,417,635,556,709,497,615,615,500,635,740,604,611,604,611,556,490,556,875,556,615,581,833,844,729,854,615,552,854,583,556,556,611,417,552,556,278,281,278,969,906,611,500,615,556,604,778,611,487,447,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1094,556,885,489,1115,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],t.LiberationSansBoldMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansBoldItalicWidths=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,740,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,782,556,556,278,722,556,556,611,278,611,278,611,396,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,333,722,333,854,906,473,844,930,847,278,722,722,610,671,667,611,722,778,278,722,667,833,722,657,778,718,667,590,611,667,822,667,829,781,278,667,620,479,611,278,591,620,621,556,610,479,492,611,558,278,566,556,603,556,450,611,712,605,532,664,409,591,704,578,773,834,278,591,611,591,834,667,667,886,614,719,667,278,278,556,1094,1042,854,622,719,677,719,722,708,722,614,722,667,927,643,719,719,615,687,833,722,778,719,667,722,611,677,781,667,729,708,979,989,854,1e3,708,719,1042,729,556,619,604,534,618,556,736,510,611,611,507,622,740,604,611,611,611,556,889,556,885,556,646,583,889,935,707,854,594,552,865,589,556,556,611,469,563,556,278,278,278,969,906,611,507,619,556,611,778,611,575,467,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1104,556,885,516,1146,1e3,768,600,834,834,834,834,999,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],t.LiberationSansBoldItalicMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansItalicWidths=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,625,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,733,444,500,222,667,500,500,556,222,556,222,556,281,556,400,556,222,722,556,722,556,722,556,615,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,354,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,789,846,389,794,865,775,222,667,667,570,671,667,611,722,778,278,667,667,833,722,648,778,725,667,600,611,667,837,667,831,761,278,667,570,439,555,222,550,570,571,500,556,439,463,555,542,222,500,492,548,500,447,556,670,573,486,603,374,550,652,546,728,779,222,550,556,550,779,667,667,843,544,708,667,278,278,500,1066,982,844,589,715,639,724,667,651,667,544,704,667,917,614,715,715,589,686,833,722,778,725,667,722,611,639,795,667,727,673,920,923,805,886,651,694,1022,682,556,562,522,493,553,556,688,465,556,556,472,564,686,550,556,556,556,500,833,500,835,500,572,518,830,851,621,736,526,492,752,534,556,556,556,378,496,500,222,222,222,910,828,556,472,565,500,556,778,556,492,339,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1083,1e3,768,600,834,834,834,834,1e3,500,998,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,584,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],t.LiberationSansItalicMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansRegularWidths=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,615,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,735,444,500,222,667,500,500,556,222,556,222,556,292,556,334,556,222,722,556,722,556,722,556,604,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,375,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,784,838,384,774,855,752,222,667,667,551,668,667,611,722,778,278,667,668,833,722,650,778,722,667,618,611,667,798,667,835,748,278,667,578,446,556,222,547,578,575,500,557,446,441,556,556,222,500,500,576,500,448,556,690,569,482,617,395,547,648,525,713,781,222,547,556,547,781,667,667,865,542,719,667,278,278,500,1057,1010,854,583,722,635,719,667,656,667,542,677,667,923,604,719,719,583,656,833,722,778,719,667,722,611,635,760,667,740,667,917,938,792,885,656,719,1010,722,556,573,531,365,583,556,669,458,559,559,438,583,688,552,556,542,556,500,458,500,823,500,573,521,802,823,625,719,521,510,750,542,556,556,556,365,510,500,222,278,222,906,812,556,438,559,500,552,778,556,489,411,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1073,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],t.LiberationSansRegularMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MyriadProRegularMetrics=t.MyriadProRegularFactors=t.MyriadProItalicMetrics=t.MyriadProItalicFactors=t.MyriadProBoldMetrics=t.MyriadProBoldItalicMetrics=t.MyriadProBoldItalicFactors=t.MyriadProBoldFactors=void 0,t.MyriadProBoldFactors=[1.36898,1,1,.72706,.80479,.83734,.98894,.99793,.9897,.93884,.86209,.94292,.94292,1.16661,1.02058,.93582,.96694,.93582,1.19137,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.78076,.78076,1.02058,1.02058,1.02058,.72851,.78966,.90838,.83637,.82391,.96376,.80061,.86275,.8768,.95407,1.0258,.73901,.85022,.83655,1.0156,.95546,.92179,.87107,.92179,.82114,.8096,.89713,.94438,.95353,.94083,.91905,.90406,.9446,.94292,1.18777,.94292,1.02058,.89903,.90088,.94938,.97898,.81093,.97571,.94938,1.024,.9577,.95933,.98621,1.0474,.97455,.98981,.9672,.95933,.9446,.97898,.97407,.97646,.78036,1.10208,.95442,.95298,.97579,.9332,.94039,.938,.80687,1.01149,.80687,1.02058,.80479,.99793,.99793,.99793,.99793,1.01149,1.00872,.90088,.91882,1.0213,.8361,1.02058,.62295,.54324,.89022,1.08595,1,1,.90088,1,.97455,.93582,.90088,1,1.05686,.8361,.99642,.99642,.99642,.72851,.90838,.90838,.90838,.90838,.90838,.90838,.868,.82391,.80061,.80061,.80061,.80061,1.0258,1.0258,1.0258,1.0258,.97484,.95546,.92179,.92179,.92179,.92179,.92179,1.02058,.92179,.94438,.94438,.94438,.94438,.90406,.86958,.98225,.94938,.94938,.94938,.94938,.94938,.94938,.9031,.81093,.94938,.94938,.94938,.94938,.98621,.98621,.98621,.98621,.93969,.95933,.9446,.9446,.9446,.9446,.9446,1.08595,.9446,.95442,.95442,.95442,.95442,.94039,.97898,.94039,.90838,.94938,.90838,.94938,.90838,.94938,.82391,.81093,.82391,.81093,.82391,.81093,.82391,.81093,.96376,.84313,.97484,.97571,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.8768,.9577,.8768,.9577,.8768,.9577,1,1,.95407,.95933,.97069,.95933,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,.887,1.01591,.73901,1.0474,1,1,.97455,.83655,.98981,1,1,.83655,.73977,.83655,.73903,.84638,1.033,.95546,.95933,1,1,.95546,.95933,.8271,.95417,.95933,.92179,.9446,.92179,.9446,.92179,.9446,.936,.91964,.82114,.97646,1,1,.82114,.97646,.8096,.78036,.8096,.78036,1,1,.8096,.78036,1,1,.89713,.77452,.89713,1.10208,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94083,.97579,.90406,.94039,.90406,.9446,.938,.9446,.938,.9446,.938,1,.99793,.90838,.94938,.868,.9031,.92179,.9446,1,1,.89713,1.10208,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90989,.9358,.91945,.83181,.75261,.87992,.82976,.96034,.83689,.97268,1.0078,.90838,.83637,.8019,.90157,.80061,.9446,.95407,.92436,1.0258,.85022,.97153,1.0156,.95546,.89192,.92179,.92361,.87107,.96318,.89713,.93704,.95638,.91905,.91709,.92796,1.0258,.93704,.94836,1.0373,.95933,1.0078,.95871,.94836,.96174,.92601,.9498,.98607,.95776,.95933,1.05453,1.0078,.98275,.9314,.95617,.91701,1.05993,.9446,.78367,.9553,1,.86832,1.0128,.95871,.99394,.87548,.96361,.86774,1.0078,.95871,.9446,.95871,.86774,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.94083,.97579,.94083,.97579,.94083,.97579,.90406,.94039,.96694,1,.89903,1,1,1,.93582,.93582,.93582,1,.908,.908,.918,.94219,.94219,.96544,1,1.285,1,1,.81079,.81079,1,1,.74854,1,1,1,1,.99793,1,1,1,.65,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.17173,1,.80535,.76169,1.02058,1.0732,1.05486,1,1,1.30692,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.16161,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProBoldMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProBoldItalicFactors=[1.36898,1,1,.66227,.80779,.81625,.97276,.97276,.97733,.92222,.83266,.94292,.94292,1.16148,1.02058,.93582,.96694,.93582,1.17337,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.78076,.78076,1.02058,1.02058,1.02058,.71541,.76813,.85576,.80591,.80729,.94299,.77512,.83655,.86523,.92222,.98621,.71743,.81698,.79726,.98558,.92222,.90637,.83809,.90637,.80729,.76463,.86275,.90699,.91605,.9154,.85308,.85458,.90531,.94292,1.21296,.94292,1.02058,.89903,1.18616,.99613,.91677,.78216,.91677,.90083,.98796,.9135,.92168,.95381,.98981,.95298,.95381,.93459,.92168,.91513,.92004,.91677,.95077,.748,1.04502,.91677,.92061,.94236,.89544,.89364,.9,.80687,.8578,.80687,1.02058,.80779,.97276,.97276,.97276,.97276,.8578,.99973,1.18616,.91339,1.08074,.82891,1.02058,.55509,.71526,.89022,1.08595,1,1,1.18616,1,.96736,.93582,1.18616,1,1.04864,.82711,.99043,.99043,.99043,.71541,.85576,.85576,.85576,.85576,.85576,.85576,.845,.80729,.77512,.77512,.77512,.77512,.98621,.98621,.98621,.98621,.95961,.92222,.90637,.90637,.90637,.90637,.90637,1.02058,.90251,.90699,.90699,.90699,.90699,.85458,.83659,.94951,.99613,.99613,.99613,.99613,.99613,.99613,.85811,.78216,.90083,.90083,.90083,.90083,.95381,.95381,.95381,.95381,.9135,.92168,.91513,.91513,.91513,.91513,.91513,1.08595,.91677,.91677,.91677,.91677,.91677,.89364,.92332,.89364,.85576,.99613,.85576,.99613,.85576,.99613,.80729,.78216,.80729,.78216,.80729,.78216,.80729,.78216,.94299,.76783,.95961,.91677,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.86523,.9135,.86523,.9135,.86523,.9135,1,1,.92222,.92168,.92222,.92168,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.86036,.97096,.71743,.98981,1,1,.95298,.79726,.95381,1,1,.79726,.6894,.79726,.74321,.81691,1.0006,.92222,.92168,1,1,.92222,.92168,.79464,.92098,.92168,.90637,.91513,.90637,.91513,.90637,.91513,.909,.87514,.80729,.95077,1,1,.80729,.95077,.76463,.748,.76463,.748,1,1,.76463,.748,1,1,.86275,.72651,.86275,1.04502,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.9154,.94236,.85458,.89364,.85458,.90531,.9,.90531,.9,.90531,.9,1,.97276,.85576,.99613,.845,.85811,.90251,.91677,1,1,.86275,1.04502,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.00899,1.30628,.85576,.80178,.66862,.7927,.69323,.88127,.72459,.89711,.95381,.85576,.80591,.7805,.94729,.77512,.90531,.92222,.90637,.98621,.81698,.92655,.98558,.92222,.85359,.90637,.90976,.83809,.94523,.86275,.83509,.93157,.85308,.83392,.92346,.98621,.83509,.92886,.91324,.92168,.95381,.90646,.92886,.90557,.86847,.90276,.91324,.86842,.92168,.99531,.95381,.9224,.85408,.92699,.86847,1.0051,.91513,.80487,.93481,1,.88159,1.05214,.90646,.97355,.81539,.89398,.85923,.95381,.90646,.91513,.90646,.85923,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9154,.94236,.9154,.94236,.9154,.94236,.85458,.89364,.96694,1,.89903,1,1,1,.91782,.91782,.91782,1,.896,.896,.896,.9332,.9332,.95973,1,1.26,1,1,.80479,.80178,1,1,.85633,1,1,1,1,.97276,1,1,1,.698,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.14542,1,.79199,.78694,1.02058,1.03493,1.05486,1,1,1.23026,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.20006,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProBoldItalicMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProItalicFactors=[1.36898,1,1,.65507,.84943,.85639,.88465,.88465,.86936,.88307,.86948,.85283,.85283,1.06383,1.02058,.75945,.9219,.75945,1.17337,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.75945,.75945,1.02058,1.02058,1.02058,.69046,.70926,.85158,.77812,.76852,.89591,.70466,.76125,.80094,.86822,.83864,.728,.77212,.79475,.93637,.87514,.8588,.76013,.8588,.72421,.69866,.77598,.85991,.80811,.87832,.78112,.77512,.8562,1.0222,1.18417,1.0222,1.27014,.89903,1.15012,.93859,.94399,.846,.94399,.81453,1.0186,.94219,.96017,1.03075,1.02175,.912,1.03075,.96998,.96017,.93859,.94399,.94399,.95493,.746,1.12658,.94578,.91,.979,.882,.882,.83,.85034,.83537,.85034,1.02058,.70869,.88465,.88465,.88465,.88465,.83537,.90083,1.15012,.9161,.94565,.73541,1.02058,.53609,.69353,.79519,1.08595,1,1,1.15012,1,.91974,.75945,1.15012,1,.9446,.73361,.9005,.9005,.9005,.62864,.85158,.85158,.85158,.85158,.85158,.85158,.773,.76852,.70466,.70466,.70466,.70466,.83864,.83864,.83864,.83864,.90561,.87514,.8588,.8588,.8588,.8588,.8588,1.02058,.85751,.85991,.85991,.85991,.85991,.77512,.76013,.88075,.93859,.93859,.93859,.93859,.93859,.93859,.8075,.846,.81453,.81453,.81453,.81453,.82424,.82424,.82424,.82424,.9278,.96017,.93859,.93859,.93859,.93859,.93859,1.08595,.8562,.94578,.94578,.94578,.94578,.882,.94578,.882,.85158,.93859,.85158,.93859,.85158,.93859,.76852,.846,.76852,.846,.76852,.846,.76852,.846,.89591,.8544,.90561,.94399,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.80094,.94219,.80094,.94219,.80094,.94219,1,1,.86822,.96017,.86822,.96017,.83864,.82424,.83864,.82424,.83864,.82424,.83864,1.03075,.83864,.82424,.81402,1.02738,.728,1.02175,1,1,.912,.79475,1.03075,1,1,.79475,.83911,.79475,.66266,.80553,1.06676,.87514,.96017,1,1,.87514,.96017,.86865,.87396,.96017,.8588,.93859,.8588,.93859,.8588,.93859,.867,.84759,.72421,.95493,1,1,.72421,.95493,.69866,.746,.69866,.746,1,1,.69866,.746,1,1,.77598,.88417,.77598,1.12658,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.87832,.979,.77512,.882,.77512,.8562,.83,.8562,.83,.8562,.83,1,.88465,.85158,.93859,.773,.8075,.85751,.8562,1,1,.77598,1.12658,1.15012,1.15012,1.15012,1.15012,1.15012,1.15313,1.15012,1.15012,1.15012,1.08106,1.03901,.85158,.77025,.62264,.7646,.65351,.86026,.69461,.89947,1.03075,.85158,.77812,.76449,.88836,.70466,.8562,.86822,.8588,.83864,.77212,.85308,.93637,.87514,.82352,.8588,.85701,.76013,.89058,.77598,.8156,.82565,.78112,.77899,.89386,.83864,.8156,.9486,.92388,.96186,1.03075,.91123,.9486,.93298,.878,.93942,.92388,.84596,.96186,.95119,1.03075,.922,.88787,.95829,.88,.93559,.93859,.78815,.93758,1,.89217,1.03737,.91123,.93969,.77487,.85769,.86799,1.03075,.91123,.93859,.91123,.86799,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87832,.979,.87832,.979,.87832,.979,.77512,.882,.9219,1,.89903,1,1,1,.87321,.87321,.87321,1,1.027,1.027,1.027,.86847,.86847,.79121,1,1.124,1,1,.73572,.73572,1,1,.85034,1,1,1,1,.88465,1,1,1,.669,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.04828,1,.74948,.75187,1.02058,.98391,1.02119,1,1,1.06233,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05233,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProItalicMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProRegularFactors=[1.36898,1,1,.76305,.82784,.94935,.89364,.92241,.89073,.90706,.98472,.85283,.85283,1.0664,1.02058,.74505,.9219,.74505,1.23456,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.74505,.74505,1.02058,1.02058,1.02058,.73002,.72601,.91755,.8126,.80314,.92222,.73764,.79726,.83051,.90284,.86023,.74,.8126,.84869,.96518,.91115,.8858,.79761,.8858,.74498,.73914,.81363,.89591,.83659,.89633,.85608,.8111,.90531,1.0222,1.22736,1.0222,1.27014,.89903,.90088,.86667,1.0231,.896,1.01411,.90083,1.05099,1.00512,.99793,1.05326,1.09377,.938,1.06226,1.00119,.99793,.98714,1.0231,1.01231,.98196,.792,1.19137,.99074,.962,1.01915,.926,.942,.856,.85034,.92006,.85034,1.02058,.69067,.92241,.92241,.92241,.92241,.92006,.9332,.90088,.91882,.93484,.75339,1.02058,.56866,.54324,.79519,1.08595,1,1,.90088,1,.95325,.74505,.90088,1,.97198,.75339,.91009,.91009,.91009,.66466,.91755,.91755,.91755,.91755,.91755,.91755,.788,.80314,.73764,.73764,.73764,.73764,.86023,.86023,.86023,.86023,.92915,.91115,.8858,.8858,.8858,.8858,.8858,1.02058,.8858,.89591,.89591,.89591,.89591,.8111,.79611,.89713,.86667,.86667,.86667,.86667,.86667,.86667,.86936,.896,.90083,.90083,.90083,.90083,.84224,.84224,.84224,.84224,.97276,.99793,.98714,.98714,.98714,.98714,.98714,1.08595,.89876,.99074,.99074,.99074,.99074,.942,1.0231,.942,.91755,.86667,.91755,.86667,.91755,.86667,.80314,.896,.80314,.896,.80314,.896,.80314,.896,.92222,.93372,.92915,1.01411,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.83051,1.00512,.83051,1.00512,.83051,1.00512,1,1,.90284,.99793,.90976,.99793,.86023,.84224,.86023,.84224,.86023,.84224,.86023,1.05326,.86023,.84224,.82873,1.07469,.74,1.09377,1,1,.938,.84869,1.06226,1,1,.84869,.83704,.84869,.81441,.85588,1.08927,.91115,.99793,1,1,.91115,.99793,.91887,.90991,.99793,.8858,.98714,.8858,.98714,.8858,.98714,.894,.91434,.74498,.98196,1,1,.74498,.98196,.73914,.792,.73914,.792,1,1,.73914,.792,1,1,.81363,.904,.81363,1.19137,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89633,1.01915,.8111,.942,.8111,.90531,.856,.90531,.856,.90531,.856,1,.92241,.91755,.86667,.788,.86936,.8858,.89876,1,1,.81363,1.19137,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90388,1.03901,.92138,.78105,.7154,.86169,.80513,.94007,.82528,.98612,1.06226,.91755,.8126,.81884,.92819,.73764,.90531,.90284,.8858,.86023,.8126,.91172,.96518,.91115,.83089,.8858,.87791,.79761,.89297,.81363,.88157,.89992,.85608,.81992,.94307,.86023,.88157,.95308,.98699,.99793,1.06226,.95817,.95308,.97358,.928,.98088,.98699,.92761,.99793,.96017,1.06226,.986,.944,.95978,.938,.96705,.98714,.80442,.98972,1,.89762,1.04552,.95817,.99007,.87064,.91879,.88888,1.06226,.95817,.98714,.95817,.88888,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89633,1.01915,.89633,1.01915,.89633,1.01915,.8111,.942,.9219,1,.89903,1,1,1,.93173,.93173,.93173,1,1.06304,1.06304,1.06904,.89903,.89903,.80549,1,1.156,1,1,.76575,.76575,1,1,.72458,1,1,1,1,.92241,1,1,1,.619,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.07257,1,.74705,.71119,1.02058,1.024,1.02119,1,1,1.1536,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05638,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProRegularMetrics={lineHeight:1.2,lineGap:.2}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SegoeuiRegularMetrics=t.SegoeuiRegularFactors=t.SegoeuiItalicMetrics=t.SegoeuiItalicFactors=t.SegoeuiBoldMetrics=t.SegoeuiBoldItalicMetrics=t.SegoeuiBoldItalicFactors=t.SegoeuiBoldFactors=void 0,t.SegoeuiBoldFactors=[1.76738,1,1,.99297,.9824,1.04016,1.06497,1.03424,.97529,1.17647,1.23203,1.1085,1.1085,1.16939,1.2107,.9754,1.21408,.9754,1.59578,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,.81378,.81378,1.2107,1.2107,1.2107,.71703,.97847,.97363,.88776,.8641,1.02096,.79795,.85132,.914,1.06085,1.1406,.8007,.89858,.83693,1.14889,1.09398,.97489,.92094,.97489,.90399,.84041,.95923,1.00135,1,1.06467,.98243,.90996,.99361,1.1085,1.56942,1.1085,1.2107,.74627,.94282,.96752,1.01519,.86304,1.01359,.97278,1.15103,1.01359,.98561,1.02285,1.02285,1.00527,1.02285,1.0302,.99041,1.0008,1.01519,1.01359,1.02258,.79104,1.16862,.99041,.97454,1.02511,.99298,.96752,.95801,.94856,1.16579,.94856,1.2107,.9824,1.03424,1.03424,1,1.03424,1.16579,.8727,1.3871,1.18622,1.10818,1.04478,1.2107,1.18622,.75155,.94994,1.28826,1.21408,1.21408,.91056,1,.91572,.9754,.64663,1.18328,1.24866,1.04478,1.14169,1.15749,1.17389,.71703,.97363,.97363,.97363,.97363,.97363,.97363,.93506,.8641,.79795,.79795,.79795,.79795,1.1406,1.1406,1.1406,1.1406,1.02096,1.09398,.97426,.97426,.97426,.97426,.97426,1.2107,.97489,1.00135,1.00135,1.00135,1.00135,.90996,.92094,1.02798,.96752,.96752,.96752,.96752,.96752,.96752,.93136,.86304,.97278,.97278,.97278,.97278,1.02285,1.02285,1.02285,1.02285,.97122,.99041,1,1,1,1,1,1.28826,1.0008,.99041,.99041,.99041,.99041,.96752,1.01519,.96752,.97363,.96752,.97363,.96752,.97363,.96752,.8641,.86304,.8641,.86304,.8641,.86304,.8641,.86304,1.02096,1.03057,1.02096,1.03517,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.914,1.01359,.914,1.01359,.914,1.01359,1,1,1.06085,.98561,1.06085,1.00879,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,.97138,1.08692,.8007,1.02285,1,1,1.00527,.83693,1.02285,1,1,.83693,.9455,.83693,.90418,.83693,1.13005,1.09398,.99041,1,1,1.09398,.99041,.96692,1.09251,.99041,.97489,1.0008,.97489,1.0008,.97489,1.0008,.93994,.97931,.90399,1.02258,1,1,.90399,1.02258,.84041,.79104,.84041,.79104,.84041,.79104,.84041,.79104,1,1,.95923,1.07034,.95923,1.16862,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.06467,1.02511,.90996,.96752,.90996,.99361,.95801,.99361,.95801,.99361,.95801,1.07733,1.03424,.97363,.96752,.93506,.93136,.97489,1.0008,1,1,.95923,1.16862,1.15103,1.15103,1.01173,1.03959,.75953,.81378,.79912,1.15103,1.21994,.95161,.87815,1.01149,.81525,.7676,.98167,1.01134,1.02546,.84097,1.03089,1.18102,.97363,.88776,.85134,.97826,.79795,.99361,1.06085,.97489,1.1406,.89858,1.0388,1.14889,1.09398,.86039,.97489,1.0595,.92094,.94793,.95923,.90996,.99346,.98243,1.02112,.95493,1.1406,.90996,1.03574,1.02597,1.0008,1.18102,1.06628,1.03574,1.0192,1.01932,1.00886,.97531,1.0106,1.0008,1.13189,1.18102,1.02277,.98683,1.0016,.99561,1.07237,1.0008,.90434,.99921,.93803,.8965,1.23085,1.06628,1.04983,.96268,1.0499,.98439,1.18102,1.06628,1.0008,1.06628,.98439,.79795,1,1,1,1,1,1,1,1,1,1,1,1,1.09466,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.97278,1,1,1,1,1,1,1,1,1,1,1,1,1.02065,1,1,1,1,1,1,1.06467,1.02511,1.06467,1.02511,1.06467,1.02511,.90996,.96752,1,1.21408,.89903,1,1,.75155,1.04394,1.04394,1.04394,1.04394,.98633,.98633,.98633,.73047,.73047,1.20642,.91211,1.25635,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.12454,.93503,1.03424,1.19687,1.03424,1,1,1,.771,1,1,1.15749,1.15749,1.15749,1.10948,.86279,.94434,.86279,.94434,.86182,1,1,1.16897,1,.96085,.90137,1.2107,1.18416,1.13973,.69825,.9716,2.10339,1.29004,1.29004,1.21172,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18874,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.09193,1.09193,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiBoldMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiBoldItalicFactors=[1.76738,1,1,.98946,1.03959,1.04016,1.02809,1.036,.97639,1.10953,1.23203,1.11144,1.11144,1.16939,1.21237,.9754,1.21261,.9754,1.59754,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,.81378,.81378,1.21237,1.21237,1.21237,.73541,.97847,.97363,.89723,.87897,1.0426,.79429,.85292,.91149,1.05815,1.1406,.79631,.90128,.83853,1.04396,1.10615,.97552,.94436,.97552,.88641,.80527,.96083,1.00135,1,1.06777,.9817,.91142,.99361,1.11144,1.57293,1.11144,1.21237,.74627,1.31818,1.06585,.97042,.83055,.97042,.93503,1.1261,.97042,.97922,1.14236,.94552,1.01054,1.14236,1.02471,.97922,.94165,.97042,.97042,1.0276,.78929,1.1261,.97922,.95874,1.02197,.98507,.96752,.97168,.95107,1.16579,.95107,1.21237,1.03959,1.036,1.036,1,1.036,1.16579,.87357,1.31818,1.18754,1.26781,1.05356,1.21237,1.18622,.79487,.94994,1.29004,1.24047,1.24047,1.31818,1,.91484,.9754,1.31818,1.1349,1.24866,1.05356,1.13934,1.15574,1.17389,.73541,.97363,.97363,.97363,.97363,.97363,.97363,.94385,.87897,.79429,.79429,.79429,.79429,1.1406,1.1406,1.1406,1.1406,1.0426,1.10615,.97552,.97552,.97552,.97552,.97552,1.21237,.97552,1.00135,1.00135,1.00135,1.00135,.91142,.94436,.98721,1.06585,1.06585,1.06585,1.06585,1.06585,1.06585,.96705,.83055,.93503,.93503,.93503,.93503,1.14236,1.14236,1.14236,1.14236,.93125,.97922,.94165,.94165,.94165,.94165,.94165,1.29004,.94165,.97922,.97922,.97922,.97922,.96752,.97042,.96752,.97363,1.06585,.97363,1.06585,.97363,1.06585,.87897,.83055,.87897,.83055,.87897,.83055,.87897,.83055,1.0426,1.0033,1.0426,.97042,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.91149,.97042,.91149,.97042,.91149,.97042,1,1,1.05815,.97922,1.05815,.97922,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,.97441,1.04302,.79631,1.01582,1,1,1.01054,.83853,1.14236,1,1,.83853,1.09125,.83853,.90418,.83853,1.19508,1.10615,.97922,1,1,1.10615,.97922,1.01034,1.10466,.97922,.97552,.94165,.97552,.94165,.97552,.94165,.91602,.91981,.88641,1.0276,1,1,.88641,1.0276,.80527,.78929,.80527,.78929,.80527,.78929,.80527,.78929,1,1,.96083,1.05403,.95923,1.16862,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.06777,1.02197,.91142,.96752,.91142,.99361,.97168,.99361,.97168,.99361,.97168,1.23199,1.036,.97363,1.06585,.94385,.96705,.97552,.94165,1,1,.96083,1.1261,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,.95161,1.27126,1.00811,.83284,.77702,.99137,.95253,1.0347,.86142,1.07205,1.14236,.97363,.89723,.86869,1.09818,.79429,.99361,1.05815,.97552,1.1406,.90128,1.06662,1.04396,1.10615,.84918,.97552,1.04694,.94436,.98015,.96083,.91142,1.00356,.9817,1.01945,.98999,1.1406,.91142,1.04961,.9898,1.00639,1.14236,1.07514,1.04961,.99607,1.02897,1.008,.9898,.95134,1.00639,1.11121,1.14236,1.00518,.97981,1.02186,1,1.08578,.94165,.99314,.98387,.93028,.93377,1.35125,1.07514,1.10687,.93491,1.04232,1.00351,1.14236,1.07514,.94165,1.07514,1.00351,.79429,1,1,1,1,1,1,1,1,1,1,1,1,1.09097,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.93503,1,1,1,1,1,1,1,1,1,1,1,1,.96609,1,1,1,1,1,1,1.06777,1.02197,1.06777,1.02197,1.06777,1.02197,.91142,.96752,1,1.21261,.89903,1,1,.75155,1.04745,1.04745,1.04745,1.04394,.98633,.98633,.98633,.72959,.72959,1.20502,.91406,1.26514,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.09125,.93327,1.03336,1.16541,1.036,1,1,1,.771,1,1,1.15574,1.15574,1.15574,1.15574,.86364,.94434,.86279,.94434,.86224,1,1,1.16798,1,.96085,.90068,1.21237,1.18416,1.13904,.69825,.9716,2.10339,1.29004,1.29004,1.21339,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18775,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.13269,1.13269,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiBoldItalicMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiItalicFactors=[1.76738,1,1,.98946,1.14763,1.05365,1.06234,.96927,.92586,1.15373,1.18414,.91349,.91349,1.07403,1.17308,.78383,1.20088,.78383,1.42531,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78383,.78383,1.17308,1.17308,1.17308,.77349,.94565,.94729,.85944,.88506,.9858,.74817,.80016,.88449,.98039,.95782,.69238,.89898,.83231,.98183,1.03989,.96924,.86237,.96924,.80595,.74524,.86091,.95402,.94143,.98448,.8858,.83089,.93285,1.0949,1.39016,1.0949,1.45994,.74627,1.04839,.97454,.97454,.87207,.97454,.87533,1.06151,.97454,1.00176,1.16484,1.08132,.98047,1.16484,1.02989,1.01054,.96225,.97454,.97454,1.06598,.79004,1.16344,1.00351,.94629,.9973,.91016,.96777,.9043,.91082,.92481,.91082,1.17308,.95748,.96927,.96927,1,.96927,.92481,.80597,1.04839,1.23393,1.1781,.9245,1.17308,1.20808,.63218,.94261,1.24822,1.09971,1.09971,1.04839,1,.85273,.78032,1.04839,1.09971,1.22326,.9245,1.09836,1.13525,1.15222,.70424,.94729,.94729,.94729,.94729,.94729,.94729,.85498,.88506,.74817,.74817,.74817,.74817,.95782,.95782,.95782,.95782,.9858,1.03989,.96924,.96924,.96924,.96924,.96924,1.17308,.96924,.95402,.95402,.95402,.95402,.83089,.86237,.88409,.97454,.97454,.97454,.97454,.97454,.97454,.92916,.87207,.87533,.87533,.87533,.87533,.93146,.93146,.93146,.93146,.93854,1.01054,.96225,.96225,.96225,.96225,.96225,1.24822,.8761,1.00351,1.00351,1.00351,1.00351,.96777,.97454,.96777,.94729,.97454,.94729,.97454,.94729,.97454,.88506,.87207,.88506,.87207,.88506,.87207,.88506,.87207,.9858,.95391,.9858,.97454,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.88449,.97454,.88449,.97454,.88449,.97454,1,1,.98039,1.00176,.98039,1.00176,.95782,.93146,.95782,.93146,.95782,.93146,.95782,1.16484,.95782,.93146,.84421,1.12761,.69238,1.08132,1,1,.98047,.83231,1.16484,1,1,.84723,1.04861,.84723,.78755,.83231,1.23736,1.03989,1.01054,1,1,1.03989,1.01054,.9857,1.03849,1.01054,.96924,.96225,.96924,.96225,.96924,.96225,.92383,.90171,.80595,1.06598,1,1,.80595,1.06598,.74524,.79004,.74524,.79004,.74524,.79004,.74524,.79004,1,1,.86091,1.02759,.85771,1.16344,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.98448,.9973,.83089,.96777,.83089,.93285,.9043,.93285,.9043,.93285,.9043,1.31868,.96927,.94729,.97454,.85498,.92916,.96924,.8761,1,1,.86091,1.16344,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,.81965,.81965,.94729,.78032,.71022,.90883,.84171,.99877,.77596,1.05734,1.2,.94729,.85944,.82791,.9607,.74817,.93285,.98039,.96924,.95782,.89898,.98316,.98183,1.03989,.78614,.96924,.97642,.86237,.86075,.86091,.83089,.90082,.8858,.97296,1.01284,.95782,.83089,1.0976,1.04,1.03342,1.2,1.0675,1.0976,.98205,1.03809,1.05097,1.04,.95364,1.03342,1.05401,1.2,1.02148,1.0119,1.04724,1.0127,1.02732,.96225,.8965,.97783,.93574,.94818,1.30679,1.0675,1.11826,.99821,1.0557,1.0326,1.2,1.0675,.96225,1.0675,1.0326,.74817,1,1,1,1,1,1,1,1,1,1,1,1,1.03754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87533,1,1,1,1,1,1,1,1,1,1,1,1,.98705,1,1,1,1,1,1,.98448,.9973,.98448,.9973,.98448,.9973,.83089,.96777,1,1.20088,.89903,1,1,.75155,.94945,.94945,.94945,.94945,1.12317,1.12317,1.12317,.67603,.67603,1.15621,.73584,1.21191,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87709,.96927,1.01473,.96927,1,1,1,.77295,1,1,1.09836,1.09836,1.09836,1.01522,.86321,.94434,.8649,.94434,.86182,1,1,1.083,1,.91578,.86438,1.17308,1.18416,1.14589,.69825,.97622,1.96791,1.24822,1.24822,1.17308,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.17984,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10742,1.10742,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiItalicMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiRegularFactors=[1.76738,1,1,.98594,1.02285,1.10454,1.06234,.96927,.92037,1.19985,1.2046,.90616,.90616,1.07152,1.1714,.78032,1.20088,.78032,1.40246,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78032,.78032,1.1714,1.1714,1.1714,.80597,.94084,.96706,.85944,.85734,.97093,.75842,.79936,.88198,.9831,.95782,.71387,.86969,.84636,1.07796,1.03584,.96924,.83968,.96924,.82826,.79649,.85771,.95132,.93119,.98965,.88433,.8287,.93365,1.08612,1.3638,1.08612,1.45786,.74627,.80499,.91484,1.05707,.92383,1.05882,.9403,1.12654,1.05882,1.01756,1.09011,1.09011,.99414,1.09011,1.034,1.01756,1.05356,1.05707,1.05882,1.04399,.84863,1.21968,1.01756,.95801,1.00068,.91797,.96777,.9043,.90351,.92105,.90351,1.1714,.85337,.96927,.96927,.99912,.96927,.92105,.80597,1.2434,1.20808,1.05937,.90957,1.1714,1.20808,.75155,.94261,1.24644,1.09971,1.09971,.84751,1,.85273,.78032,.61584,1.05425,1.17914,.90957,1.08665,1.11593,1.14169,.73381,.96706,.96706,.96706,.96706,.96706,.96706,.86035,.85734,.75842,.75842,.75842,.75842,.95782,.95782,.95782,.95782,.97093,1.03584,.96924,.96924,.96924,.96924,.96924,1.1714,.96924,.95132,.95132,.95132,.95132,.8287,.83968,.89049,.91484,.91484,.91484,.91484,.91484,.91484,.93575,.92383,.9403,.9403,.9403,.9403,.8717,.8717,.8717,.8717,1.00527,1.01756,1.05356,1.05356,1.05356,1.05356,1.05356,1.24644,.95923,1.01756,1.01756,1.01756,1.01756,.96777,1.05707,.96777,.96706,.91484,.96706,.91484,.96706,.91484,.85734,.92383,.85734,.92383,.85734,.92383,.85734,.92383,.97093,1.0969,.97093,1.05882,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.88198,1.05882,.88198,1.05882,.88198,1.05882,1,1,.9831,1.01756,.9831,1.01756,.95782,.8717,.95782,.8717,.95782,.8717,.95782,1.09011,.95782,.8717,.84784,1.11551,.71387,1.09011,1,1,.99414,.84636,1.09011,1,1,.84636,1.0536,.84636,.94298,.84636,1.23297,1.03584,1.01756,1,1,1.03584,1.01756,1.00323,1.03444,1.01756,.96924,1.05356,.96924,1.05356,.96924,1.05356,.93066,.98293,.82826,1.04399,1,1,.82826,1.04399,.79649,.84863,.79649,.84863,.79649,.84863,.79649,.84863,1,1,.85771,1.17318,.85771,1.21968,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.98965,1.00068,.8287,.96777,.8287,.93365,.9043,.93365,.9043,.93365,.9043,1.08571,.96927,.96706,.91484,.86035,.93575,.96924,.95923,1,1,.85771,1.21968,1.11437,1.11437,.93109,.91202,.60411,.84164,.55572,1.01173,.97361,.81818,.81818,.96635,.78032,.72727,.92366,.98601,1.03405,.77968,1.09799,1.2,.96706,.85944,.85638,.96491,.75842,.93365,.9831,.96924,.95782,.86969,.94152,1.07796,1.03584,.78437,.96924,.98715,.83968,.83491,.85771,.8287,.94492,.88433,.9287,1.0098,.95782,.8287,1.0625,.98248,1.03424,1.2,1.01071,1.0625,.95246,1.03809,1.04912,.98248,1.00221,1.03424,1.05443,1.2,1.04785,.99609,1.00169,1.05176,.99346,1.05356,.9087,1.03004,.95542,.93117,1.23362,1.01071,1.07831,1.02512,1.05205,1.03502,1.2,1.01071,1.05356,1.01071,1.03502,.75842,1,1,1,1,1,1,1,1,1,1,1,1,1.03719,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9403,1,1,1,1,1,1,1,1,1,1,1,1,1.04021,1,1,1,1,1,1,.98965,1.00068,.98965,1.00068,.98965,1.00068,.8287,.96777,1,1.20088,.89903,1,1,.75155,1.03077,1.03077,1.03077,1.03077,1.13196,1.13196,1.13196,.67428,.67428,1.16039,.73291,1.20996,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87796,.96927,1.01518,.96927,1,1,1,.77295,1,1,1.10539,1.10539,1.11358,1.06967,.86279,.94434,.86279,.94434,.86182,1,1,1.083,1,.91578,.86507,1.1714,1.18416,1.14589,.69825,.97622,1.9697,1.24822,1.24822,1.17238,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18083,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10938,1.10938,1,1,1,1.05425,1.09971,1.09971,1.09971,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiRegularMetrics={lineHeight:1.33008,lineGap:0}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PostScriptEvaluator=t.PostScriptCompiler=t.PDFFunctionFactory=void 0,t.isPDFFunction=function(e){var t;if("object"!==g(e))return!1;if(e instanceof n.Dict)t=e;else{if(!(e instanceof o.BaseStream))return!1;t=e.dict}return t.has("FunctionType")};var n=r(134),a=r(2),i=r(187),o=r(136),s=r(188);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=f(e);if(t){var a=f(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===g(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function h(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function d(e,t){if(e){if("string"==typeof e)return p(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>c)*l,u&=(1<r?e=r:e0&&(u=l[a-1]);var h=i[1];a>1,h=o.length>>1,d=new x(u),p=Object.create(null),g=8192,v=new Float32Array(h);return function(e,t,r,n){var a,i,o="",c=v;for(a=0;a(b=s[2*a+1]))&&(i=b),l[a]=i}g>0&&(g--,p[o]=l),r.set(l,n)}else r.set(u,n)}}}]),e}(),S=function(){function e(t){v(this,e),this.stack=t?Array.from(t):[]}return m(e,[{key:"push",value:function(t){if(this.stack.length>=e.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(t)}},{key:"pop",value:function(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}},{key:"copy",value:function(t){if(this.stack.length+t>=e.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");for(var r=this.stack,n=r.length-t,a=t-1;a>=0;a--,n++)r.push(r[n])}},{key:"index",value:function(e){this.push(this.stack[this.stack.length-e-1])}},{key:"roll",value:function(e,t){for(var r=this.stack,n=r.length-e,a=r.length-1,i=n+(t-Math.floor(t/e)*e),o=n,s=a;o0?i.push(r<>n);break;case"ceiling":r=i.pop(),i.push(Math.ceil(r));break;case"copy":r=i.pop(),i.copy(r);break;case"cos":r=i.pop(),i.push(Math.cos(r));break;case"cvi":r=0|i.pop(),i.push(r);break;case"cvr":break;case"div":n=i.pop(),r=i.pop(),i.push(r/n);break;case"dup":i.copy(1);break;case"eq":n=i.pop(),r=i.pop(),i.push(r===n);break;case"exch":i.roll(2,1);break;case"exp":n=i.pop(),r=i.pop(),i.push(Math.pow(r,n));break;case"false":i.push(!1);break;case"floor":r=i.pop(),i.push(Math.floor(r));break;case"ge":n=i.pop(),r=i.pop(),i.push(r>=n);break;case"gt":n=i.pop(),r=i.pop(),i.push(r>n);break;case"idiv":n=i.pop(),r=i.pop(),i.push(r/n|0);break;case"index":r=i.pop(),i.index(r);break;case"le":n=i.pop(),r=i.pop(),i.push(r<=n);break;case"ln":r=i.pop(),i.push(Math.log(r));break;case"log":r=i.pop(),i.push(Math.log(r)/Math.LN10);break;case"lt":n=i.pop(),r=i.pop(),i.push(r=t?new C(t):e.max<=t?e:new P(e,t)}var R=function(){function e(){v(this,e)}return m(e,[{key:"compile",value:function(e,t,r){for(var n,a,i,o,s,c,u,l,f=[],h=[],g=t.length>>1,v=r.length>>1,y=0,m=0;mD.min&&(X.unshift("Math.max(",U,", "),X.push(")")),${Object.defineProperty(t,"__esModule",{value:!0}),t.PostScriptParser=t.PostScriptLexer=void 0;var n=r(2),a=r(134),i=r(135);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var r=0;r=0&&(t>=65&&t<=90||t>=97&&t<=122);)r.push(String.fromCharCode(t));var n=r.join("");switch(n.toLowerCase()){case"if":return h.IF;case"ifelse":return h.IFELSE;default:return h.getOperator(n)}}},{key:"getNumber",value:function(){var e=this.currentChar,t=this.strBuf;for(t.length=0,t[0]=String.fromCharCode(e);(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));var r=parseFloat(t.join(""));if(isNaN(r))throw new n.FormatError("Invalid floating point number: ".concat(r));return r}}]),e}();t.PostScriptLexer=d},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LocalTilingPatternCache=t.LocalImageCache=t.LocalGStateCache=t.LocalFunctionCache=t.LocalColorSpaceCache=t.GlobalImageCache=void 0;var n=r(2),a=r(134);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e)throw new Error('LocalImageCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;return this._nameRefMap.set(e,t),void this._imageCache.put(t,r)}this._imageMap.has(e)||this._imageMap.set(e,r)}}]),r}(p);t.LocalImageCache=g;var v=function(e){o(r,e);var t=c(r);function r(){return f(this,r),t.apply(this,arguments)}return d(r,[{key:"set",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e&&!t)throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');if(t){if(this._imageCache.has(t))return;return null!==e&&this._nameRefMap.set(e,t),void this._imageCache.put(t,r)}this._imageMap.has(e)||this._imageMap.set(e,r)}}]),r}(p);t.LocalColorSpaceCache=v;var y=function(e){o(r,e);var t=c(r);function r(e){return f(this,r),t.call(this,{onlyRefs:!0})}return d(r,[{key:"set",value:function(){var e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;if(!e)throw new Error('LocalFunctionCache.set - expected "ref" argument.');this._imageCache.has(e)||this._imageCache.put(e,t)}}]),r}(p);t.LocalFunctionCache=y;var m=function(e){o(r,e);var t=c(r);function r(){return f(this,r),t.apply(this,arguments)}return d(r,[{key:"set",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e)throw new Error('LocalGStateCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;return this._nameRefMap.set(e,t),void this._imageCache.put(t,r)}this._imageMap.has(e)||this._imageMap.set(e,r)}}]),r}(p);t.LocalGStateCache=m;var b=function(e){o(r,e);var t=c(r);function r(e){return f(this,r),t.call(this,{onlyRefs:!0})}return d(r,[{key:"set",value:function(){var e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;if(!e)throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');this._imageCache.has(e)||this._imageCache.put(e,t)}}]),r}(p);t.LocalTilingPatternCache=b;var w=function(){function e(){f(this,e),this._refCache=new a.RefSetCache,this._imageCache=new a.RefSetCache}return d(e,[{key:"_byteSize",get:function(){var e,t=0,r=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}(this._imageCache);try{for(r.s();!(e=r.n()).done;)t+=e.value.byteSize}catch(e){r.e(e)}finally{r.f()}return t}},{key:"_cacheLimitReached",get:function(){return!(this._imageCache.size0&&void 0!==arguments[0]&&arguments[0]||this._refCache.clear(),this._imageCache.clear()}}],[{key:"NUM_PAGES_THRESHOLD",get:function(){return(0,n.shadow)(this,"NUM_PAGES_THRESHOLD",2)}},{key:"MIN_IMAGES_TO_CACHE",get:function(){return(0,n.shadow)(this,"MIN_IMAGES_TO_CACHE",10)}},{key:"MAX_BYTE_SIZE",get:function(){return(0,n.shadow)(this,"MAX_BYTE_SIZE",4e7)}}]),e}();t.GlobalImageCache=w},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.bidi=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],p=!0,g=e.length;if(0===g||r)return f(e,p,r);h.length=g,d.length=g;var v,y,m=0;for(v=0;v4?(p=!0,t=0):(p=!1,t=1));var k=[];for(v=0;v=0&&"ET"===d[F];--F)d[F]="EN";for(var P=v+1;P0&&(I=d[v-1]);var E=A;T+1j&&o(j)&&(_=j);for(j=M;j>=_;--j){var L=-1;for(v=0,y=k.length;v=0&&(l(h,L,v),L=-1):L<0&&(L=v);L>=0&&l(h,L,k.length)}for(v=0,y=h.length;v"!==R||(h[v]="")}return f(h.join(""),p)};var n=r(2),a=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],i=["AN","AN","AN","AN","AN","AN","ON","ON","AL","ET","ET","AL","CS","AL","ON","ON","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","ON","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","NSM","NSM","ON","NSM","NSM","NSM","NSM","AL","AL","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","AL","AL","AL","AL","AL","AL"];function o(e){return 0!=(1&e)}function s(e){return 0==(1&e)}function c(e,t,r){var n,a;for(n=t,a=e.length;n2&&void 0!==arguments[2]&&arguments[2]?r="ttb":t||(r="rtl"),{str:e,dir:r}}var h=[],d=[]},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MurmurHash3_64=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r>>8,t[r++]=255&o)}}else{if(!(0,n.isArrayBuffer)(e))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");r=(t=e.slice()).byteLength}for(var u=r>>2,l=r-4*u,f=new Uint32Array(t.buffer,0,u),h=0,d=0,p=this.h1,g=this.h2,v=3432918353,y=461845907,m=11601,b=13715,w=0;w>>17)*y&s|h*b&c)<<13|p>>>19)+3864292196:g=5*(g=(g^=d=(d=(d=(d=f[w])*v&s|d*m&c)<<15|d>>>17)*y&s|d*b&c)<<13|g>>>19)+3864292196;switch(h=0,l){case 3:h^=t[4*u+2]<<16;case 2:h^=t[4*u+1]<<8;case 1:h=(h=(h=(h^=t[4*u])*v&s|h*m&c)<<15|h>>>17)*y&s|h*b&c,1&u?p^=h:g^=h}this.h1=p,this.h2=g}},{key:"hexdigest",value:function(){var e=this.h1,t=this.h2;return e=3981806797*(e^=t>>>1)&s|36045*e&c,e=444984403*(e^=(t=4283543511*t&s|(2950163797*(t<<16|e>>>16)&s)>>>16)>>>1)&s|60499*e&c,((e^=(t=3301882366*t&s|(3120437893*(t<<16|e>>>16)&s)>>>16)>>>1)>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}])&&i(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.MurmurHash3_64=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OperatorList=void 0;var n=r(2);function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1e3&&(l=Math.max(l,d),p+=h+2,d=0,h=0),f.push({transform:v,x:d,y:p,w:y.width,h:y.height}),d+=y.width+2,h=Math.max(h,y.height)}for(var m=Math.max(l,d)+1,b=p+h+1,w=new Uint8Array(m*b*4),k=m<<2,S=0;S=0;)x[C-4]=x[C],x[C-3]=x[C+1],x[C-2]=x[C+2],x[C-1]=x[C+3],x[C+O]=x[C+O-4],x[C+O+1]=x[C+O-3],x[C+O+2]=x[C+O-2],x[C+O+3]=x[C+O-1],C-=k}return r.splice(o,4*u,n.OPS.paintInlineImageXObjectGroup),a.splice(o,4*u,[{width:m,height:b,kind:n.ImageKind.RGBA_32BPP,data:w},f]),o+1})),h(d,[n.OPS.save,n.OPS.transform,n.OPS.paintImageMaskXObject,n.OPS.restore],null,(function(e,t){var r=e.fnArray,a=(t-(e.iCurr-3))%4;switch(a){case 0:return r[t]===n.OPS.save;case 1:return r[t]===n.OPS.transform;case 2:return r[t]===n.OPS.paintImageMaskXObject;case 3:return r[t]===n.OPS.restore}throw new Error("iterateImageMaskGroup - invalid pos: ".concat(a))}),(function(e,t){var r=e.fnArray,a=e.argsArray,i=e.iCurr,o=i-3,s=i-2,c=i-1,u=Math.floor((t-o)/4);if(u<10)return t-(t-o)%4;var l,f,h=!1,d=a[c][0],p=a[s][0],g=a[s][1],v=a[s][2],y=a[s][3];if(g===v){h=!0,l=s+4;for(var m=c+4,b=1;b=4&&r[i-4]===r[o]&&r[i-3]===r[s]&&r[i-2]===r[c]&&r[i-1]===r[u]&&n[i-4][0]===l&&n[i-4][1]===f&&(h++,d-=5);for(var p=d+4,g=1;g=(r=e.length))break}(n=(n||d)[e[t]])&&!Array.isArray(n)?(i.iCurr=t,t++,!n.checkFn||(0,n.checkFn)(i)?(a=n,n=null):n=null):t++}this.state=n,this.match=a,this.lastProcessed=t}else this.lastProcessed=r}},{key:"flush",value:function(){for(;this.match;){var e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e),this.match=null,this.state=null,this._optimize()}}},{key:"reset",value:function(){this.state=null,this.match=null,this.lastProcessed=0}}]),a}(p),v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1?arguments[1]:void 0;u(this,e),this._streamSink=r,this.fnArray=[],this.argsArray=[],!r||t&n.RenderingIntentFlag.OPLIST?this.optimizer=new p(this):this.optimizer=new g(this),this.dependencies=new Set,this._totalLength=0,this.weight=0,this._resolved=r?null:Promise.resolve()}return f(e,[{key:"length",get:function(){return this.argsArray.length}},{key:"ready",get:function(){return this._resolved||this._streamSink.ready}},{key:"totalLength",get:function(){return this._totalLength+this.length}},{key:"addOp",value:function(t,r){this.optimizer.push(t,r),this.weight++,this._streamSink&&(this.weight>=e.CHUNK_SIZE||this.weight>=e.CHUNK_SIZE_ABOUT&&(t===n.OPS.restore||t===n.OPS.endText))&&this.flush()}},{key:"addImageOps",value:function(e,t,r){void 0!==r&&this.addOp(n.OPS.beginMarkedContentProps,["OC",r]),this.addOp(e,t),void 0!==r&&this.addOp(n.OPS.endMarkedContent,[])}},{key:"addDependency",value:function(e){this.dependencies.has(e)||(this.dependencies.add(e),this.addOp(n.OPS.dependency,[e]))}},{key:"addDependencies",value:function(e){var t,r=a(e);try{for(r.s();!(t=r.n()).done;){var n=t.value;this.addDependency(n)}}catch(e){r.e(e)}finally{r.f()}}},{key:"addOpList",value:function(t){if(t instanceof e){var r,i=a(t.dependencies);try{for(i.s();!(r=i.n()).done;){var o=r.value;this.dependencies.add(o)}}catch(e){i.e(e)}finally{i.f()}for(var s=0,c=t.length;s0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.optimizer.flush();var r=this.length;this._totalLength+=r,this._streamSink.enqueue({fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:e,separateAnnots:t,length:r},1,this._transfers),this.dependencies.clear(),this.fnArray.length=0,this.argsArray.length=0,this.weight=0,this.optimizer.reset()}}],[{key:"CHUNK_SIZE",get:function(){return(0,n.shadow)(this,"CHUNK_SIZE",1e3)}},{key:"CHUNK_SIZE_ABOUT",get:function(){return(0,n.shadow)(this,"CHUNK_SIZE_ABOUT",this.CHUNK_SIZE-5)}}]),e}();t.OperatorList=v},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFImage=void 0;var n=r(2),a=r(193),i=r(136),o=r(143),s=r(148),c=r(156),u=r(159),l=r(134);function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var d={};function p(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==f(h)&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(h).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function d(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function p(e,t){for(var r=0;rn&&(e=n),e}function v(e,t,r,n,a,i){var o,s=a*i;o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);var c,u,l,f,h=r/a,d=n/i,p=0,g=new Uint16Array(a),v=r;for(c=0;c0&&Number.isInteger(s.height)&&s.height>0&&(s.width!==A||s.height!==C)&&((0,n.warn)("PDFImage - using the Width/Height of the image data, rather than the image dictionary."),A=s.width,C=s.height),A<1||C<1)throw new n.FormatError("Invalid image width: ".concat(A," or height: ").concat(C));this.width=A,this.height=C,this.interpolate=k.get("I","Interpolate"),this.imageMask=k.get("IM","ImageMask")||!1,this.matte=k.get("Matte")||!1;var F=s.bitsPerComponent;if(!F&&!(F=k.get("BPC","BitsPerComponent"))){if(!this.imageMask)throw new n.FormatError("Bits per component missing in image: ".concat(this.imageMask));F=1}if(this.bpc=F,!this.imageMask){var P=k.getRaw("CS")||k.getRaw("ColorSpace");if(!P)switch((0,n.info)("JPX images (which do not require color spaces)"),s.numComps){case 1:P=l.Name.get("DeviceGray");break;case 3:P=l.Name.get("DeviceRGB");break;case 4:P=l.Name.get("DeviceCMYK");break;default:throw new Error("JPX images with ".concat(s.numComps," color components not supported."))}this.colorSpace=o.ColorSpace.parse({cs:P,xref:r,resources:f?a:null,pdfFunctionFactory:m,localColorSpaceCache:b}),this.numComps=this.colorSpace.numComps}if(this.decode=k.getArray("D","Decode"),this.needsDecode=!1,this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,F)||y&&!o.ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;var T=(1<>7&1,r[h+1]=u>>6&1,r[h+2]=u>>5&1,r[h+3]=u>>4&1,r[h+4]=u>>3&1,r[h+5]=u>>2&1,r[h+6]=u>>1&1,r[h+7]=1&u,h+=8;if(h>=1}else{var y=0;for(u=0,h=0,c=o;h>m;b<0?b=0:b>f&&(b=f),r[h]=b,u&=(1<p[w+1]){y=255;break}}s[l]=y}}if(s)for(l=0,h=3,f=r*i;l0&&void 0!==arguments[0]&&arguments[0],t=this.drawWidth,r=this.drawHeight,a={width:t,height:r,interpolate:this.interpolate,kind:0,data:null},i=this.numComps,o=this.width,s=this.height,u=this.bpc,l=o*i*u+7>>3;if(!e){var f;if("DeviceGray"===this.colorSpace.name&&1===u?f=n.ImageKind.GRAYSCALE_1BPP:"DeviceRGB"!==this.colorSpace.name||8!==u||this.needsDecode||(f=n.ImageKind.RGB_24BPP),f&&!this.smask&&!this.mask&&t===o&&r===s){if(a.kind=f,a.data=this.getImageBytes(s*l,{}),this.needsDecode){(0,n.assert)(f===n.ImageKind.GRAYSCALE_1BPP,"PDFImage.createImageData: The image must be grayscale.");for(var h=a.data,d=0,p=h.length;d>3,u=this.getImageBytes(o*c,{internal:!0}),l=this.getComponents(u);if(1!==s){this.needsDecode&&this.decodeBuffer(l),a=i*o;var f=255/((1<>3)*i,l=n.byteLength;if(!o||s&&u!==l?s?((t=new Uint8Array(u)).set(n),t.fill(255,l)):t=new Uint8Array(n):t=n,s)for(r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.applyMaskImageData=function(e){var t,r=e.src,i=e.srcPos,o=void 0===i?0:i,s=e.dest,c=e.destPos,u=void 0===c?0:c,l=e.width,f=e.height,h=e.inverseDecode,d=void 0!==h&&h,p=n.FeatureTest.isLittleEndian?4278190080:255,g=function(e){if(Array.isArray(e))return e}(t=d?[0,p]:[p,0])||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{for(i=(r=r.call(e)).next;!(c=(n=i.call(r)).done)&&(s.push(n.value),2!==s.length);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(t)||function(e,t){if(e){if("string"==typeof e)return a(e,2);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,2):void 0}}(t)||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.")}(),v=g[0],y=g[1],m=l>>3,b=7&l,w=r.length;s=new Uint32Array(s.buffer);for(var k=0;ke.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.incrementalUpdate=function(e){var t=e.originalData,r=e.xrefInfo,s=e.newRefs,u=e.xref,h=void 0===u?null:u,g=e.hasXfa,v=void 0!==g&&g,b=e.xfaDatasetsRef,w=void 0===b?null:b,k=e.hasXfaDatasetsEntry,S=void 0!==k&&k,x=e.needAppearances,O=e.acroFormRef,A=void 0===O?null:O,C=e.acroForm,F=void 0===C?null:C,P=e.xfaData,T=void 0===P?null:P;(function(e){var t=e.xref,r=e.acroForm,i=e.acroFormRef,o=e.hasXfa,s=e.hasXfaDatasetsEntry,c=e.xfaDatasetsRef,u=e.needAppearances,f=e.newRefs;if(!o||s||c||(0,n.warn)("XFA - Cannot save it"),u||o&&c){var h,p=new a.Dict(t),g=l(r.getKeys());try{for(g.s();!(h=g.n()).done;){var v=h.value;p.set(v,r.getRaw(v))}}catch(e){g.e(e)}finally{g.f()}if(o&&!s){var y=r.get("XFA").slice();y.splice(2,0,"datasets"),y.splice(3,0,c),p.set("XFA",y)}u&&p.set("NeedAppearances",!0);var m=t.encrypt,b=null;m&&(b=m.createCipherTransform(i.num,i.gen));var w=[];d(i,p,w,b),f.push({ref:i,data:w.join("")})}})({xref:h,acroForm:F,acroFormRef:A,hasXfa:v,hasXfaDatasetsEntry:S,xfaDatasetsRef:w,needAppearances:x,newRefs:s}),v&&function(e){var t=e.xfaData,r=e.xfaDatasetsRef,a=e.newRefs,s=e.xref;null===t&&(t=function(e,t){var r,a=new o.SimpleXMLParser({hasAttributes:!0}).parseFromString(e),s=l(t);try{for(s.s();!(r=s.n()).done;){var c=r.value.xfa;if(c){var u=c.path,f=c.value;if(u){var h=a.documentElement.searchNode((0,i.parseXFAPath)(u),0);h?Array.isArray(f)?h.childNodes=f.map((function(e){return new o.SimpleDOMNode("value",e)})):h.childNodes=[new o.SimpleDOMNode("#text",f)]:(0,n.warn)("Node not found for path: ".concat(u))}}}}catch(e){s.e(e)}finally{s.f()}var d=[];return a.documentElement.dump(d),d.join("")}(s.fetchIfRef(r).getString(),a));var c=s.encrypt;c&&(t=c.createCipherTransform(r.num,r.gen).encryptString(t));var u="".concat(r.num," ").concat(r.gen," obj\\n")+"<< /Type /EmbeddedFile /Length ".concat(t.length,">>\\nstream\\n")+t+"\\nendstream\\nendobj\\n";a.push({ref:r,data:u})}({xfaData:T,xfaDatasetsRef:w,newRefs:s,xref:h});var I,E,j=new a.Dict(null),M=r.newRef,_=t.at(-1);10===_||13===_?(I=[],E=t.length):(I=["\\n"],E=t.length+1),j.set("Size",M.num+1),j.set("Prev",r.startXRef),j.set("Type",a.Name.get("XRef")),null!==r.rootRef&&j.set("Root",r.rootRef),null!==r.infoRef&&j.set("Info",r.infoRef),null!==r.encryptRef&&j.set("Encrypt",r.encryptRef),s.push({ref:M,data:""});var L,R=[[0,1,65535]],N=[0,1],D=0,B=l(s=s.sort((function(e,t){return e.ref.num-t.ref.num})));try{for(B.s();!(L=B.n()).done;){var U=L.value,$=U.ref,X=U.data;D=Math.max(D,E),R.push([1,E,Math.min($.gen,65535)]),E+=X.length,N.push($.num,1),I.push(X)}}catch(e){B.e(e)}finally{B.f()}if(j.set("Index",N),Array.isArray(r.fileIds)&&r.fileIds.length>0){var H=function(e,t){for(var r=Math.floor(Date.now()/1e3),a=t.filename||"",i=[r.toString(),a,e.toString()],o=i.reduce((function(e,t){return e+t.length}),0),s=0,u=Object.values(t.info);s=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){if(e){if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>")}function g(e,t,r){p(e.dict,t,r),t.push(" stream\\n");var n=e.getString();null!==r&&(n=r.encryptString(n)),t.push(n,"\\nendstream")}function v(e,t,r){e instanceof a.Name?t.push("/".concat((0,i.escapePDFName)(e.name))):e instanceof a.Ref?t.push("".concat(e.num," ").concat(e.gen," R")):Array.isArray(e)?function(e,t,r){t.push("[");var n,a=!0,i=l(e);try{for(i.s();!(n=i.n()).done;){var o=n.value;a?a=!1:t.push(" "),v(o,t,r)}}catch(e){i.e(e)}finally{i.f()}t.push("]")}(e,t,r):"string"==typeof e?(null!==r&&(e=r.encryptString(e)),t.push("(".concat((0,i.escapeString)(e),")"))):"number"==typeof e?t.push((0,i.numberToString)(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof a.Dict?p(e,t,r):e instanceof s.BaseStream?g(e,t,r):null===e?t.push("null"):(0,n.warn)("Unhandled value in writer: ".concat(u(e),", please file a bug."))}function y(e,t,r,n){for(var a=t+r-1;a>r-1;a--)n[a]=255&e,e>>=8;return r+t}function m(e,t,r){for(var n=0,a=e.length;n{Object.defineProperty(t,"__esModule",{value:!0}),t.XMLParserErrorCode=t.XMLParserBase=t.SimpleXMLParser=t.SimpleDOMNode=void 0;var n=r(135);function a(e,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},a(e,t)}function i(e){return i=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},i(e)}function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=c(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||c(e,t)||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 c(e,t){if(e){if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r";case"amp":return"&";case"quot":return'"';case"apos":return"'"}return t.onResolveEntity(r)}))}},{key:"_parseContent",value:function(e,t){var r=[],n=t;function a(){for(;n"!==e[n]&&"/"!==e[n];)++n;var i=e.substring(t,n);for(a();n"!==e[n]&&"/"!==e[n]&&"?"!==e[n];){a();for(var o,s="";n"!==e[r]&&"?"!==e[r]&&"/"!==e[r];)++r;var n=e.substring(t,r);!function(){for(;r"!==e[r+1]);)++r;return{name:n,value:e.substring(a,r),parsed:r-t}}},{key:"parseXml",value:function(e){for(var t=0;t",r))<0)return void this.onError(p.UnterminatedElement);this.onEndElement(e.substring(r,n)),r=n+1;break;case"?":++r;var a=this._parseProcessingInstruction(e,r);if("?>"!==e.substring(r+a.parsed,r+a.parsed+2))return void this.onError(p.UnterminatedXmlDeclaration);this.onPi(a.name,a.value),r+=a.parsed+2;break;case"!":if("--"===e.substring(r+1,r+3)){if((n=e.indexOf("--\\x3e",r+3))<0)return void this.onError(p.UnterminatedComment);this.onComment(e.substring(r+3,n)),r=n+3}else if("[CDATA["===e.substring(r+1,r+8)){if((n=e.indexOf("]]>",r+8))<0)return void this.onError(p.UnterminatedCdat);this.onCdata(e.substring(r+8,n)),r=n+3}else{if("DOCTYPE"!==e.substring(r+1,r+8))return void this.onError(p.MalformedElement);var i=e.indexOf("[",r+8),o=!1;if((n=e.indexOf(">",r+8))<0)return void this.onError(p.UnterminatedDoctypeDeclaration);if(i>0&&n>i){if((n=e.indexOf("]>",r+8))<0)return void this.onError(p.UnterminatedDoctypeDeclaration);o=!0}var s=e.substring(r+8,n+(o?1:0));this.onDoctype(s),r=n+(o?2:1)}break;default:var c=this._parseContent(e,r);if(null===c)return void this.onError(p.MalformedElement);var u=!1;if("/>"===e.substring(r+c.parsed,r+c.parsed+2))u=!0;else if(">"!==e.substring(r+c.parsed,r+c.parsed+1))return void this.onError(p.UnterminatedElement);this.onBeginElement(c.name,c.attributes,u),r+=c.parsed+(u?2:1)}}else{for(;r0}},{key:"searchNode",value:function(e,t){if(t>=e.length)return this;for(var r=e[t],n=[],a=this;;){if(r.name===a.nodeName){if(0!==r.pos){if(0===n.length)return null;var i,c=0,u=o(s(n.pop(),1)[0].childNodes);try{for(u.s();!(i=u.n()).done;){var l=i.value;if(r.name===l.nodeName){if(c===r.pos)return l.searchNode(e,t+1);c++}}}catch(e){u.e(e)}finally{u.f()}return a.searchNode(e,t+1)}var f=a.searchNode(e,t+1);if(null!==f)return f}if(a.childNodes&&0!==a.childNodes.length)n.push([a,0]),a=a.childNodes[0];else{if(0===n.length)return null;for(;0!==n.length;){var h=s(n.pop(),2),d=h[0],p=h[1]+1;if(p");var i,s=o(this.childNodes);try{for(s.s();!(i=s.n()).done;)i.value.dump(e)}catch(e){s.e(e)}finally{s.f()}e.push(""))}else this.nodeValue?e.push(">".concat((0,n.encodeToXmlString)(this.nodeValue),"")):e.push("/>")}else e.push((0,n.encodeToXmlString)(this.nodeValue))}}]),e}();t.SimpleDOMNode=y;var m=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&a(e,t)}(c,e);var t,r,n=(t=c,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=i(t);if(r){var a=i(this).constructor;e=Reflect.construct(n,arguments,a)}else e=n.apply(this,arguments);return function(e,t){if(t&&("object"===l(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function c(e){var t,r=e.hasAttributes,a=void 0!==r&&r,i=e.lowerCaseName,o=void 0!==i&&i;return f(this,c),(t=n.call(this))._currentFragment=null,t._stack=null,t._errorCode=p.NoError,t._hasAttributes=a,t._lowerCaseName=o,t}return d(c,[{key:"parseFromString",value:function(e){if(this._currentFragment=[],this._stack=[],this._errorCode=p.NoError,this.parseXml(e),this._errorCode===p.NoError){var t=s(this._currentFragment,1)[0];if(t)return{documentElement:t}}}},{key:"onText",value:function(e){if(!function(e){for(var t=0,r=e.length;t{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateSHA256=t.calculateMD5=t.PDF20=t.PDF17=t.CipherTransformFactory=t.ARCFourCipher=t.AES256Cipher=t.AES128Cipher=void 0,t.calculateSHA384=k,t.calculateSHA512=void 0;var n=r(2),a=r(134),i=r(197);function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}function s(e,t){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s(e,t)}function c(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=u(e);if(t){var a=u(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===l(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function u(e){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},u(e)}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){for(var r=0;r>5&255,l[n++]=r>>13&255,l[n++]=r>>21&255,l[n++]=r>>>29&255,l[n++]=0,l[n++]=0,l[n++]=0;var h=new Int32Array(16);for(n=0;n>>32-x)|0,d=k}i=i+d|0,o=o+p|0,s=s+y|0,c=c+m|0}return new Uint8Array([255&i,i>>8&255,i>>16&255,i>>>24&255,255&o,o>>8&255,o>>16&255,o>>>24&255,255&s,s>>8&255,s>>16&255,s>>>24&255,255&c,c>>8&255,c>>16&255,c>>>24&255])});t.calculateMD5=y;var m=function(){function e(t,r){f(this,e),this.high=0|t,this.low=0|r}return d(e,[{key:"and",value:function(e){this.high&=e.high,this.low&=e.low}},{key:"xor",value:function(e){this.high^=e.high,this.low^=e.low}},{key:"or",value:function(e){this.high|=e.high,this.low|=e.low}},{key:"shiftRight",value:function(e){e>=32?(this.low=this.high>>>e-32|0,this.high=0):(this.low=this.low>>>e|this.high<<32-e,this.high=this.high>>>e|0)}},{key:"shiftLeft",value:function(e){e>=32?(this.high=this.low<>>32-e,this.low<<=e)}},{key:"rotateRight",value:function(e){var t,r;32&e?(r=this.low,t=this.high):(t=this.low,r=this.high),e&=31,this.low=t>>>e|r<<32-e,this.high=r>>>e|t<<32-e}},{key:"not",value:function(){this.high=~this.high,this.low=~this.low}},{key:"add",value:function(e){var t=(this.low>>>0)+(e.low>>>0),r=(this.high>>>0)+(e.high>>>0);t>4294967295&&(r+=1),this.low=0|t,this.high=0|r}},{key:"copyTo",value:function(e,t){e[t]=this.high>>>24&255,e[t+1]=this.high>>16&255,e[t+2]=this.high>>8&255,e[t+3]=255&this.high,e[t+4]=this.low>>>24&255,e[t+5]=this.low>>16&255,e[t+6]=this.low>>8&255,e[t+7]=255&this.low}},{key:"assign",value:function(e){this.high=e.high,this.low=e.low}}]),e}(),b=function(){function e(e,t){return e>>>t|e<<32-t}function t(e,t,r){return e&t^~e&r}function r(e,t,r){return e&t^e&r^t&r}function n(t){return e(t,2)^e(t,13)^e(t,22)}function a(t){return e(t,6)^e(t,11)^e(t,25)}function i(t){return e(t,7)^e(t,18)^t>>>3}var o=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];return function(s,c,u){var l,f,h=1779033703,d=3144134277,p=1013904242,g=2773480762,v=1359893119,y=2600822924,m=528734635,b=1541459225,w=64*Math.ceil((u+9)/64),k=new Uint8Array(w);for(l=0;l>>29&255,k[l++]=u>>21&255,k[l++]=u>>13&255,k[l++]=u>>5&255,k[l++]=u<<3&255;var x,O=new Uint32Array(64);for(l=0;l>>10)+O[f-7]+i(O[f-15])+O[f-16];var A=h,C=d,F=p,P=g,T=v,I=y,E=m,j=b,M=void 0,_=void 0;for(f=0;f<64;++f)M=j+a(T)+t(T,I,E)+o[f]+O[f],_=n(A)+r(A,C,F),j=E,E=I,I=T,T=P+M|0,P=F,F=C,C=A,A=M+_|0;h=h+A|0,d=d+C|0,p=p+F|0,g=g+P|0,v=v+T|0,y=y+I|0,m=m+E|0,b=b+j|0}return new Uint8Array([h>>24&255,h>>16&255,h>>8&255,255&h,d>>24&255,d>>16&255,d>>8&255,255&d,p>>24&255,p>>16&255,p>>8&255,255&p,g>>24&255,g>>16&255,g>>8&255,255&g,v>>24&255,v>>16&255,v>>8&255,255&v,y>>24&255,y>>16&255,y>>8&255,255&y,m>>24&255,m>>16&255,m>>8&255,255&m,b>>24&255,b>>16&255,b>>8&255,255&b])}}();t.calculateSHA256=b;var w=function(){function e(e,t,r,n,a){e.assign(t),e.and(r),a.assign(t),a.not(),a.and(n),e.xor(a)}function t(e,t,r,n,a){e.assign(t),e.and(r),a.assign(t),a.and(n),e.xor(a),a.assign(r),a.and(n),e.xor(a)}function r(e,t,r){e.assign(t),e.rotateRight(28),r.assign(t),r.rotateRight(34),e.xor(r),r.assign(t),r.rotateRight(39),e.xor(r)}function n(e,t,r){e.assign(t),e.rotateRight(14),r.assign(t),r.rotateRight(18),e.xor(r),r.assign(t),r.rotateRight(41),e.xor(r)}function a(e,t,r){e.assign(t),e.rotateRight(1),r.assign(t),r.rotateRight(8),e.xor(r),r.assign(t),r.shiftRight(7),e.xor(r)}function i(e,t,r){e.assign(t),e.rotateRight(19),r.assign(t),r.rotateRight(61),e.xor(r),r.assign(t),r.shiftRight(6),e.xor(r)}var o=[new m(1116352408,3609767458),new m(1899447441,602891725),new m(3049323471,3964484399),new m(3921009573,2173295548),new m(961987163,4081628472),new m(1508970993,3053834265),new m(2453635748,2937671579),new m(2870763221,3664609560),new m(3624381080,2734883394),new m(310598401,1164996542),new m(607225278,1323610764),new m(1426881987,3590304994),new m(1925078388,4068182383),new m(2162078206,991336113),new m(2614888103,633803317),new m(3248222580,3479774868),new m(3835390401,2666613458),new m(4022224774,944711139),new m(264347078,2341262773),new m(604807628,2007800933),new m(770255983,1495990901),new m(1249150122,1856431235),new m(1555081692,3175218132),new m(1996064986,2198950837),new m(2554220882,3999719339),new m(2821834349,766784016),new m(2952996808,2566594879),new m(3210313671,3203337956),new m(3336571891,1034457026),new m(3584528711,2466948901),new m(113926993,3758326383),new m(338241895,168717936),new m(666307205,1188179964),new m(773529912,1546045734),new m(1294757372,1522805485),new m(1396182291,2643833823),new m(1695183700,2343527390),new m(1986661051,1014477480),new m(2177026350,1206759142),new m(2456956037,344077627),new m(2730485921,1290863460),new m(2820302411,3158454273),new m(3259730800,3505952657),new m(3345764771,106217008),new m(3516065817,3606008344),new m(3600352804,1432725776),new m(4094571909,1467031594),new m(275423344,851169720),new m(430227734,3100823752),new m(506948616,1363258195),new m(659060556,3750685593),new m(883997877,3785050280),new m(958139571,3318307427),new m(1322822218,3812723403),new m(1537002063,2003034995),new m(1747873779,3602036899),new m(1955562222,1575990012),new m(2024104815,1125592928),new m(2227730452,2716904306),new m(2361852424,442776044),new m(2428436474,593698344),new m(2756734187,3733110249),new m(3204031479,2999351573),new m(3329325298,3815920427),new m(3391569614,3928383900),new m(3515267271,566280711),new m(3940187606,3454069534),new m(4118630271,4000239992),new m(116418474,1914138554),new m(174292421,2731055270),new m(289380356,3203993006),new m(460393269,320620315),new m(685471733,587496836),new m(852142971,1086792851),new m(1017036298,365543100),new m(1126000580,2618297676),new m(1288033470,3409855158),new m(1501505948,4234509866),new m(1607167915,987167468),new m(1816402316,1246189591)];return function(s,c,u){var l,f,h,d,p,g,v,y,b=arguments.length>3&&void 0!==arguments[3]&&arguments[3];b?(l=new m(3418070365,3238371032),f=new m(1654270250,914150663),h=new m(2438529370,812702999),d=new m(355462360,4144912697),p=new m(1731405415,4290775857),g=new m(2394180231,1750603025),v=new m(3675008525,1694076839),y=new m(1203062813,3204075428)):(l=new m(1779033703,4089235720),f=new m(3144134277,2227873595),h=new m(1013904242,4271175723),d=new m(2773480762,1595750129),p=new m(1359893119,2917565137),g=new m(2600822924,725511199),v=new m(528734635,4215389547),y=new m(1541459225,327033209));var w,k,S=128*Math.ceil((u+17)/128),x=new Uint8Array(S);for(w=0;w>>29&255,x[w++]=u>>21&255,x[w++]=u>>13&255,x[w++]=u>>5&255,x[w++]=u<<3&255;var A=new Array(80);for(w=0;w<80;w++)A[w]=new m(0,0);var C,F,P=new m(0,0),T=new m(0,0),I=new m(0,0),E=new m(0,0),j=new m(0,0),M=new m(0,0),_=new m(0,0),L=new m(0,0),R=new m(0,0),N=new m(0,0),D=new m(0,0),B=new m(0,0);for(w=0;w=1;--c){r=i[13],i[13]=i[9],i[9]=i[5],i[5]=i[1],i[1]=r,r=i[14],n=i[10],i[14]=i[6],i[10]=i[2],i[6]=r,i[2]=n,r=i[15],n=i[11],a=i[7],i[15]=i[3],i[11]=r,i[7]=n,i[3]=a;for(var u=0;u<16;++u)i[u]=this._inv_s[i[u]];for(var l=0,f=16*c;l<16;++l,++f)i[l]^=t[f];for(var h=0;h<16;h+=4){var d=this._mix[i[h]],p=this._mix[i[h+1]],g=this._mix[i[h+2]],v=this._mix[i[h+3]];r=d^p>>>8^p<<24^g>>>16^g<<16^v>>>24^v<<8,i[h]=r>>>24&255,i[h+1]=r>>16&255,i[h+2]=r>>8&255,i[h+3]=255&r}}r=i[13],i[13]=i[9],i[9]=i[5],i[5]=i[1],i[1]=r,r=i[14],n=i[10],i[14]=i[6],i[10]=i[2],i[6]=r,i[2]=n,r=i[15],n=i[11],a=i[7],i[15]=i[3],i[11]=r,i[7]=n,i[3]=a;for(var y=0;y<16;++y)i[y]=this._inv_s[i[y]],i[y]^=t[y];return i}},{key:"_encrypt",value:function(e,t){var r,n,a,i=this._s,o=new Uint8Array(16);o.set(e);for(var s=0;s<16;++s)o[s]^=t[s];for(var c=1;c=p;--d)if(f[d]!==h){h=0;break}l-=h,i[i.length-1]=f.subarray(0,16-h)}}for(var g=new Uint8Array(l),v=0,y=0,m=i.length;v2&&void 0!==arguments[2]?arguments[2]:null,n=e.length,a=this.buffer,i=this.bufferPosition;if(r)this.iv=r;else{for(var o=0;i<16&&o=256&&(s=255&(27^s)));for(var l=0;l<4;++l)r[c]=n^=r[c-32],r[++c]=a^=r[c-32],r[++c]=i^=r[c-32],r[++c]=o^=r[c-32],c++}return r}}]),r}(x);t.AES256Cipher=A;var C=function(){function e(){f(this,e)}return d(e,[{key:"checkOwnerPassword",value:function(e,t,r,a){var i=new Uint8Array(e.length+56);i.set(e,0),i.set(t,e.length),i.set(r,e.length+t.length);var o=b(i,0,i.length);return(0,n.isArrayEqual)(o,a)}},{key:"checkUserPassword",value:function(e,t,r){var a=new Uint8Array(e.length+8);a.set(e,0),a.set(t,e.length);var i=b(a,0,a.length);return(0,n.isArrayEqual)(i,r)}},{key:"getOwnerKey",value:function(e,t,r,n){var a=new Uint8Array(e.length+56);a.set(e,0),a.set(t,e.length),a.set(r,e.length+t.length);var i=b(a,0,a.length);return new A(i).decryptBlock(n,!1,new Uint8Array(16))}},{key:"getUserKey",value:function(e,t,r){var n=new Uint8Array(e.length+8);n.set(e,0),n.set(t,e.length);var a=b(n,0,n.length);return new A(a).decryptBlock(r,!1,new Uint8Array(16))}}]),e}();t.PDF17=C;var F=function(){function e(e,t,r){for(var n=b(t,0,t.length).subarray(0,32),a=[0],i=0;i<64||a.at(-1)>i-32;){var o=e.length+n.length+r.length,s=new Uint8Array(o),c=0;s.set(e,c),c+=e.length,s.set(n,c),c+=n.length,s.set(r,c);for(var u=new Uint8Array(64*o),l=0,f=0;l<64;l++,f+=o)u.set(s,f);var h=(a=new O(n.subarray(0,16)).encrypt(u,n.subarray(16,32))).slice(0,16).reduce((function(e,t){return e+t}),0)%3;0===h?n=b(a,0,a.length):1===h?n=k(a,0,a.length):2===h&&(n=w(a,0,a.length)),i++}return n.subarray(0,32)}return function(){function t(){f(this,t)}return d(t,[{key:"hash",value:function(t,r,n){return e(t,r,n)}},{key:"checkOwnerPassword",value:function(t,r,a,i){var o=new Uint8Array(t.length+56);o.set(t,0),o.set(r,t.length),o.set(a,t.length+r.length);var s=e(t,o,a);return(0,n.isArrayEqual)(s,i)}},{key:"checkUserPassword",value:function(t,r,a){var i=new Uint8Array(t.length+8);i.set(t,0),i.set(r,t.length);var o=e(t,i,[]);return(0,n.isArrayEqual)(o,a)}},{key:"getOwnerKey",value:function(t,r,n,a){var i=new Uint8Array(t.length+56);i.set(t,0),i.set(r,t.length),i.set(n,t.length+r.length);var o=e(t,i,n);return new A(o).decryptBlock(a,!1,new Uint8Array(16))}},{key:"getUserKey",value:function(t,r,n){var a=new Uint8Array(t.length+8);a.set(t,0),a.set(r,t.length);var i=e(t,a,[]);return new A(i).decryptBlock(n,!1,new Uint8Array(16))}}]),t}()}();t.PDF20=F;var P=function(){function e(t,r){f(this,e),this.StringCipherConstructor=t,this.StreamCipherConstructor=r}return d(e,[{key:"createStream",value:function(e,t){var r=new this.StreamCipherConstructor;return new i.DecryptStream(e,t,(function(e,t){return r.decryptBlock(e,t)}))}},{key:"decryptString",value:function(e){var t=new this.StringCipherConstructor,r=(0,n.stringToBytes)(e);return r=t.decryptBlock(r,!0),(0,n.bytesToString)(r)}},{key:"encryptString",value:function(e){var t=new this.StringCipherConstructor;if(t instanceof x){var r=16-e.length%16;e+=String.fromCharCode(r).repeat(r);var a=new Uint8Array(16);if("undefined"!=typeof crypto)crypto.getRandomValues(a);else for(var i=0;i<16;i++)a[i]=Math.floor(256*Math.random());var o=(0,n.stringToBytes)(e);o=t.encrypt(o,a);var s=new Uint8Array(16+o.length);return s.set(a),s.set(o,16),(0,n.bytesToString)(s)}var c=(0,n.stringToBytes)(e);return c=t.encrypt(c),(0,n.bytesToString)(c)}}]),e}(),T=function(){var e=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);function t(t,r,n,a,i,o,s,c){var u,l,f=40+n.length+t.length,h=new Uint8Array(f),d=0;if(r)for(l=Math.min(32,r.length);d>8&255,h[d++]=i>>16&255,h[d++]=i>>>24&255,u=0,l=t.length;u=4&&!c&&(h[d++]=255,h[d++]=255,h[d++]=255,h[d++]=255);var g=y(h,0,d),v=s>>3;if(o>=3)for(u=0;u<50;++u)g=y(g,0,v);var m,b=g.subarray(0,v);if(o>=3){for(d=0;d<32;++d)h[d]=e[d];for(u=0,l=t.length;u3&&void 0!==arguments[3]&&arguments[3],i=new Uint8Array(r.length+9),o=r.length;for(n=0;n>8&255,i[n++]=e>>16&255,i[n++]=255&t,i[n++]=t>>8&255,a&&(i[n++]=115,i[n++]=65,i[n++]=108,i[n++]=84),y(i,0,n).subarray(0,Math.min(r.length+5,16))}function o(e,t,r,o,s){if(!(t instanceof a.Name))throw new n.FormatError("Invalid crypt filter name.");var c,u=e.get(t.name);if(null!=u&&(c=u.get("CFM")),!c||"None"===c.name)return function(){return new S};if("V2"===c.name)return function(){return new p(i(r,o,s,!1))};if("AESV2"===c.name)return function(){return new O(i(r,o,s,!0))};if("AESV3"===c.name)return function(){return new A(s)};throw new n.FormatError("Unknown crypto method")}var s=function(){function s(i,o,c){f(this,s);var u=i.get("Filter");if(!(0,a.isName)(u,"Standard"))throw new n.FormatError("unknown encryption method");this.filterName=u.name,this.dict=i;var l=i.get("V");if(!Number.isInteger(l)||1!==l&&2!==l&&4!==l&&5!==l)throw new n.FormatError("unsupported encryption algorithm");this.algorithm=l;var h=i.get("Length");if(!h)if(l<=3)h=40;else{var d=i.get("CF"),g=i.get("StmF");if(d instanceof a.Dict&&g instanceof a.Name){d.suppressEncryption=!0;var v=d.get(g.name);(h=v&&v.get("Length")||128)<40&&(h<<=3)}}if(!Number.isInteger(h)||h<40||h%8!=0)throw new n.FormatError("invalid key length");var m=(0,n.stringToBytes)(i.get("O")).subarray(0,32),b=(0,n.stringToBytes)(i.get("U")).subarray(0,32),w=i.get("P"),k=i.get("R"),S=(4===l||5===l)&&!1!==i.get("EncryptMetadata");this.encryptMetadata=S;var x,O,A=(0,n.stringToBytes)(o);if(c){if(6===k)try{c=(0,n.utf8StringToString)(c)}catch(e){(0,n.warn)("CipherTransformFactory: Unable to convert UTF8 encoded password.")}x=(0,n.stringToBytes)(c)}if(5!==l)O=t(A,x,m,b,w,k,h,S);else{var P=(0,n.stringToBytes)(i.get("O")).subarray(32,40),T=(0,n.stringToBytes)(i.get("O")).subarray(40,48),I=(0,n.stringToBytes)(i.get("U")).subarray(0,48),E=(0,n.stringToBytes)(i.get("U")).subarray(32,40),j=(0,n.stringToBytes)(i.get("U")).subarray(40,48),M=(0,n.stringToBytes)(i.get("OE")),_=(0,n.stringToBytes)(i.get("UE"));(0,n.stringToBytes)(i.get("Perms")),O=function(e,t,r,n,a,i,o,s,c,u,l,f){if(t){var h=Math.min(127,t.length);t=t.subarray(0,h)}else t=[];var d;return(d=6===e?new F:new C).checkUserPassword(t,s,o)?d.getUserKey(t,c,l):t.length&&d.checkOwnerPassword(t,n,i,r)?d.getOwnerKey(t,a,i,u):null}(k,x,m,P,T,I,b,E,j,M,_)}if(!O&&!c)throw new n.PasswordException("No password given",n.PasswordResponses.NEED_PASSWORD);if(!O&&c){var L=function(t,r,n,a){for(var i=new Uint8Array(32),o=0,s=Math.min(32,t.length);o>3;if(n>=3)for(c=0;c<50;++c)l=y(l,0,l.length);if(n>=3){u=r;var h=new Uint8Array(f);for(c=19;c>=0;c--){for(var d=0;d=4){var R=i.get("CF");R instanceof a.Dict&&(R.suppressEncryption=!0),this.cf=R,this.stmf=i.get("StmF")||r,this.strf=i.get("StrF")||r,this.eff=i.get("EFF")||this.stmf}}return d(s,[{key:"createCipherTransform",value:function(e,t){if(4===this.algorithm||5===this.algorithm)return new P(o(this.cf,this.strf,e,t,this.encryptionKey),o(this.cf,this.stmf,e,t,this.encryptionKey));var r=i(e,t,this.encryptionKey,!1),n=function(){return new p(r)};return new P(n,n)}}]),s}();return s}();t.CipherTransformFactory=T},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){for(var r=0;r0;e=(0,this.decrypt)(e,!t);var r=this.bufferLength,n=r+e.length;this.ensureBuffer(n).set(e,r),this.bufferLength=n}else this.eof=!0}}])&&a(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),l}(r(148).DecodeStream);t.DecryptStream=s},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Catalog=void 0;var n=r(135),a=r(2),i=r(134),o=r(199),s=r(136),c=r(200),u=r(143),l=r(201),f=r(188),h=r(202),d=r(203);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function g(){g=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=h.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==p(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function v(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function y(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){v(i,n,a,o,s,"next",e)}function s(e){v(i,n,a,o,s,"throw",e)}o(void 0)}))}}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||w(e,t)||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 b(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=w(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function w(e,t){if(e){if("string"==typeof e)return k(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?k(e,t):void 0}}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&(e=t)}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)("Cannot fetch Collection entry; assuming no collection is present.")}return(0,a.shadow)(this,"collection",e)}},{key:"acroForm",get:function(){var e=null;try{var t=this._catDict.get("AcroForm");t instanceof i.Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)("Cannot fetch AcroForm entry; assuming no forms are present.")}return(0,a.shadow)(this,"acroForm",e)}},{key:"acroFormRef",get:function(){var e=this._catDict.getRaw("AcroForm");return(0,a.shadow)(this,"acroFormRef",e instanceof i.Ref?e:null)}},{key:"metadata",get:function(){var e=this._catDict.getRaw("Metadata");if(!(e instanceof i.Ref))return(0,a.shadow)(this,"metadata",null);var t=null;try{var r=!(this.xref.encrypt&&this.xref.encrypt.encryptMetadata),o=this.xref.fetch(e,r);if(o instanceof s.BaseStream&&o.dict instanceof i.Dict){var c=o.dict.get("Type"),u=o.dict.get("Subtype");if((0,i.isName)(c,"Metadata")&&(0,i.isName)(u,"XML")){var l=(0,a.stringToUTF8String)(o.getString());l&&(t=new h.MetadataParser(l).serializable)}}}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)('Skipping invalid Metadata: "'.concat(e,'".'))}return(0,a.shadow)(this,"metadata",t)}},{key:"markInfo",get:function(){var e=null;try{e=this._readMarkInfo()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read mark info.")}return(0,a.shadow)(this,"markInfo",e)}},{key:"_readMarkInfo",value:function(){var e=this._catDict.get("MarkInfo");if(!(e instanceof i.Dict))return null;var t={Marked:!1,UserProperties:!1,Suspects:!1};for(var r in t){var n=e.get(r);"boolean"==typeof n&&(t[r]=n)}return t}},{key:"structTreeRoot",get:function(){var e=null;try{e=this._readStructTreeRoot()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable read to structTreeRoot info.")}return(0,a.shadow)(this,"structTreeRoot",e)}},{key:"_readStructTreeRoot",value:function(){var e=this._catDict.get("StructTreeRoot");if(!(e instanceof i.Dict))return null;var t=new d.StructTreeRoot(e);return t.init(),t}},{key:"toplevelPagesDict",get:function(){var e=this._catDict.get("Pages");if(!(e instanceof i.Dict))throw new a.FormatError("Invalid top-level pages dictionary.");return(0,a.shadow)(this,"toplevelPagesDict",e)}},{key:"documentOutline",get:function(){var e=null;try{e=this._readDocumentOutline()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read document outline.")}return(0,a.shadow)(this,"documentOutline",e)}},{key:"_readDocumentOutline",value:function(){var t=this._catDict.get("Outlines");if(!(t instanceof i.Dict))return null;if(!((t=t.getRaw("First"))instanceof i.Ref))return null;var r={items:[]},n=[{obj:t,parent:r}],o=new i.RefSet;o.put(t);for(var s=this.xref,c=new Uint8ClampedArray(3);n.length>0;){var l=n.shift(),f=s.fetchIfRef(l.obj);if(null!==f){if(!f.has("Title"))throw new a.FormatError("Invalid outline item encountered.");var h={url:null,dest:null,action:null};e.parseDestDictionary({destDict:f,resultObj:h,docBaseUrl:this.pdfManager.docBaseUrl,docAttachments:this.attachments});var d=f.get("Title"),p=f.get("F")||0,g=f.getArray("C"),v=f.get("Count"),y=c;!Array.isArray(g)||3!==g.length||0===g[0]&&0===g[1]&&0===g[2]||(y=u.ColorSpace.singletons.rgb.getRgb(g,0));var m={action:h.action,attachment:h.attachment,dest:h.dest,url:h.url,unsafeUrl:h.unsafeUrl,newWindow:h.newWindow,setOCGState:h.setOCGState,title:(0,a.stringToPDFString)(d),color:y,count:Number.isInteger(v)?v:void 0,bold:!!(2&p),italic:!!(1&p),items:[]};l.parent.items.push(m),(t=f.getRaw("First"))instanceof i.Ref&&!o.has(t)&&(n.push({obj:t,parent:m}),o.put(t)),(t=f.getRaw("Next"))instanceof i.Ref&&!o.has(t)&&(n.push({obj:t,parent:l.parent}),o.put(t))}}return r.items.length>0?r.items:null}},{key:"permissions",get:function(){var e=null;try{e=this._readPermissions()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read permissions.")}return(0,a.shadow)(this,"permissions",e)}},{key:"_readPermissions",value:function(){var e=this.xref.trailer.get("Encrypt");if(!(e instanceof i.Dict))return null;var t=e.get("P");if("number"!=typeof t)return null;t+=Math.pow(2,32);var r=[];for(var n in a.PermissionFlag){var o=a.PermissionFlag[n];t&o&&r.push(o)}return r}},{key:"optionalContentConfig",get:function(){var e=null;try{var t=this._catDict.get("OCProperties");if(!t)return(0,a.shadow)(this,"optionalContentConfig",null);var r=t.get("D");if(!r)return(0,a.shadow)(this,"optionalContentConfig",null);var o=t.get("OCGs");if(!Array.isArray(o))return(0,a.shadow)(this,"optionalContentConfig",null);var s,c=[],u=[],l=b(o);try{for(l.s();!(s=l.n()).done;){var f=s.value;if(f instanceof i.Ref){u.push(f);var h=this.xref.fetchIfRef(f);c.push({id:f.toString(),name:"string"==typeof h.get("Name")?(0,a.stringToPDFString)(h.get("Name")):null,intent:"string"==typeof h.get("Intent")?(0,a.stringToPDFString)(h.get("Intent")):null})}}}catch(e){l.e(e)}finally{l.f()}(e=this._readOptionalContentConfig(r,u)).groups=c}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read optional content config: ".concat(e))}return(0,a.shadow)(this,"optionalContentConfig",e)}},{key:"_readOptionalContentConfig",value:function(e,t){function r(e){var r=[];if(Array.isArray(e)){var n,a=b(e);try{for(a.s();!(n=a.n()).done;){var o=n.value;o instanceof i.Ref&&t.includes(o)&&r.push(o.toString())}}catch(e){a.e(e)}finally{a.f()}}return r}function n(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!Array.isArray(e))return null;var n,a=[],s=b(e);try{for(s.s();!(n=s.n()).done;){var u=n.value;if(u instanceof i.Ref&&t.includes(u))c.put(u),a.push(u.toString());else{var l=o(u,r);l&&a.push(l)}}}catch(e){s.e(e)}finally{s.f()}if(r>0)return a;var f,h=[],d=b(t);try{for(d.s();!(f=d.n()).done;){var p=f.value;c.has(p)||h.push(p.toString())}}catch(e){d.e(e)}finally{d.f()}return h.length&&a.push({name:null,order:h}),a}function o(e,t){if(++t>u)return(0,a.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."),null;var r=s.fetchIfRef(e);if(!Array.isArray(r))return null;var i=s.fetchIfRef(r[0]);if("string"!=typeof i)return null;var o=n(r.slice(1),t);return o&&o.length?{name:(0,a.stringToPDFString)(i),order:o}:null}var s=this.xref,c=new i.RefSet,u=10;return{name:"string"==typeof e.get("Name")?(0,a.stringToPDFString)(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?(0,a.stringToPDFString)(e.get("Creator")):null,baseState:e.get("BaseState")instanceof i.Name?e.get("BaseState").name:null,on:r(e.get("ON")),off:r(e.get("OFF")),order:n(e.get("Order")),groups:null}}},{key:"setActualNumPages",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this._actualNumPages=e}},{key:"hasActualNumPages",get:function(){return null!==this._actualNumPages}},{key:"_pagesCount",get:function(){var e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new a.FormatError("Page count in top-level pages dictionary is not an integer.");return(0,a.shadow)(this,"_pagesCount",e)}},{key:"numPages",get:function(){return this.hasActualNumPages?this._actualNumPages:this._pagesCount}},{key:"destinations",get:function(){var e=this._readDests(),t=Object.create(null);if(e instanceof o.NameTree){var r,n=b(e.getAll());try{for(n.s();!(r=n.n()).done;){var s=m(r.value,2),c=s[0],u=x(s[1]);u&&(t[(0,a.stringToPDFString)(c)]=u)}}catch(e){n.e(e)}finally{n.f()}}else e instanceof i.Dict&&e.forEach((function(e,r){var n=x(r);n&&(t[e]=n)}));return(0,a.shadow)(this,"destinations",t)}},{key:"getDestination",value:function(e){var t=this._readDests();if(t instanceof o.NameTree){var r=x(t.get(e));if(r)return r;var n=this.destinations[e];if(n)return(0,a.warn)('Found "'.concat(e,'" at an incorrect position in the NameTree.')),n}else if(t instanceof i.Dict){var s=x(t.get(e));if(s)return s}return null}},{key:"_readDests",value:function(){var e=this._catDict.get("Names");return e&&e.has("Dests")?new o.NameTree(e.getRaw("Dests"),this.xref):this._catDict.has("Dests")?this._catDict.get("Dests"):void 0}},{key:"pageLabels",get:function(){var e=null;try{e=this._readPageLabels()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read page labels.")}return(0,a.shadow)(this,"pageLabels",e)}},{key:"_readPageLabels",value:function(){var e=this._catDict.getRaw("PageLabels");if(!e)return null;for(var t=new Array(this.numPages),r=null,s="",c=new o.NumberTree(e,this.xref).getAll(),u="",l=1,f=0,h=this.numPages;f=1))throw new a.FormatError("Invalid start in PageLabel dictionary.");l=v}else l=1}switch(r){case"D":u=l;break;case"R":case"r":u=(0,n.toRomanNumerals)(l,"r"===r);break;case"A":case"a":var y="a"===r?97:65,m=l-1;u=String.fromCharCode(y+m%26).repeat(Math.floor(m/26)+1);break;default:if(r)throw new a.FormatError('Invalid style "'.concat(r,'" in PageLabel dictionary.'));u=""}t[f]=s+u,l++}return t}},{key:"pageLayout",get:function(){var e=this._catDict.get("PageLayout"),t="";if(e instanceof i.Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return(0,a.shadow)(this,"pageLayout",t)}},{key:"pageMode",get:function(){var e=this._catDict.get("PageMode"),t="UseNone";if(e instanceof i.Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return(0,a.shadow)(this,"pageMode",t)}},{key:"viewerPreferences",get:function(){var e=this,t=this._catDict.get("ViewerPreferences");if(!(t instanceof i.Dict))return(0,a.shadow)(this,"viewerPreferences",null);var r,n=null,o=b(t.getKeys());try{for(o.s();!(r=o.n()).done;){var s=r.value,c=t.get(s),u=void 0;switch(s){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof c&&(u=c);break;case"NonFullScreenPageMode":if(c instanceof i.Name)switch(c.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":u=c.name;break;default:u="UseNone"}break;case"Direction":if(c instanceof i.Name)switch(c.name){case"L2R":case"R2L":u=c.name;break;default:u="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(c instanceof i.Name)switch(c.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":u=c.name;break;default:u="CropBox"}break;case"PrintScaling":if(c instanceof i.Name)switch(c.name){case"None":case"AppDefault":u=c.name;break;default:u="AppDefault"}break;case"Duplex":if(c instanceof i.Name)switch(c.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":u=c.name;break;default:u="None"}break;case"PrintPageRange":Array.isArray(c)&&c.length%2==0&&c.every((function(t,r,n){return Number.isInteger(t)&&t>0&&(0===r||t>=n[r-1])&&t<=e.numPages}))&&(u=c);break;case"NumCopies":Number.isInteger(c)&&c>0&&(u=c);break;default:(0,a.warn)("Ignoring non-standard key in ViewerPreferences: ".concat(s,"."));continue}void 0!==u?(n||(n=Object.create(null)),n[s]=u):(0,a.warn)('Bad value, for key "'.concat(s,'", in ViewerPreferences: ').concat(c,"."))}}catch(e){o.e(e)}finally{o.f()}return(0,a.shadow)(this,"viewerPreferences",n)}},{key:"openAction",get:function(){var t=this._catDict.get("OpenAction"),r=Object.create(null);if(t instanceof i.Dict){var n=new i.Dict(this.xref);n.set("A",t);var o={url:null,dest:null,action:null};e.parseDestDictionary({destDict:n,resultObj:o}),Array.isArray(o.dest)?r.dest=o.dest:o.action&&(r.action=o.action)}else Array.isArray(t)&&(r.dest=t);return(0,a.shadow)(this,"openAction",(0,a.objectSize)(r)>0?r:null)}},{key:"attachments",get:function(){var e=this._catDict.get("Names"),t=null;if(e instanceof i.Dict&&e.has("EmbeddedFiles")){var r,n=b(new o.NameTree(e.getRaw("EmbeddedFiles"),this.xref).getAll());try{for(n.s();!(r=n.n()).done;){var s=m(r.value,2),c=s[0],u=s[1],f=new l.FileSpec(u,this.xref);t||(t=Object.create(null)),t[(0,a.stringToPDFString)(c)]=f.serializable}}catch(e){n.e(e)}finally{n.f()}}return(0,a.shadow)(this,"attachments",t)}},{key:"xfaImages",get:function(){var e=this._catDict.get("Names"),t=null;if(e instanceof i.Dict&&e.has("XFAImages")){var r,n=b(new o.NameTree(e.getRaw("XFAImages"),this.xref).getAll());try{for(n.s();!(r=n.n()).done;){var s=m(r.value,2),c=s[0],u=s[1];t||(t=new i.Dict(this.xref)),t.set((0,a.stringToPDFString)(c),u)}}catch(e){n.e(e)}finally{n.f()}}return(0,a.shadow)(this,"xfaImages",t)}},{key:"_collectJavaScript",value:function(){var e=this._catDict.get("Names"),t=null;function r(e,r){if(r instanceof i.Dict&&(0,i.isName)(r.get("S"),"JavaScript")){var n=r.get("JS");if(n instanceof s.BaseStream)n=n.getString();else if("string"!=typeof n)return;null===t&&(t=new Map),n=(0,a.stringToPDFString)(n).replace(/\\u0000/g,""),t.set(e,n)}}if(e instanceof i.Dict&&e.has("JavaScript")){var n,c=b(new o.NameTree(e.getRaw("JavaScript"),this.xref).getAll());try{for(c.s();!(n=c.n()).done;){var u=m(n.value,2),l=u[0],f=u[1];r((0,a.stringToPDFString)(l),f)}}catch(e){c.e(e)}finally{c.f()}}var h=this._catDict.get("OpenAction");return h&&r("OpenAction",h),t}},{key:"javaScript",get:function(){var e,t=this._collectJavaScript();return(0,a.shadow)(this,"javaScript",t?function(e){if(Array.isArray(e))return k(e)}(e=t.values())||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||w(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}():null)}},{key:"jsActions",get:function(){var e=this._collectJavaScript(),t=(0,n.collectActions)(this.xref,this._catDict,a.DocumentActionEventType);if(e){t||(t=Object.create(null));var r,i=b(e);try{for(i.s();!(r=i.n()).done;){var o=m(r.value,2),s=o[0],c=o[1];s in t?t[s].push(c):t[s]=[c]}}catch(e){i.e(e)}finally{i.f()}}return(0,a.shadow)(this,"jsActions",t)}},{key:"fontFallback",value:(F=y(g().mark((function e(t,r){var n,a,i,o;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all(this.fontCache);case 2:n=e.sent,a=b(n),e.prev=4,a.s();case 6:if((i=a.n()).done){e.next=13;break}if((o=i.value).loadedName!==t){e.next=11;break}return o.fallback(r),e.abrupt("return");case 11:e.next=6;break;case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(4),a.e(e.t0);case 18:return e.prev=18,a.f(),e.finish(18);case 21:case"end":return e.stop()}}),e,this,[[4,15,18,21]])}))),function(e,t){return F.apply(this,arguments)})},{key:"cleanup",value:(C=y(g().mark((function e(){var t,r,n,a,i=arguments;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=i.length>0&&void 0!==i[0]&&i[0],(0,c.clearGlobalCaches)(),this.globalImageCache.clear(t),this.pageKidsCountCache.clear(),this.pageIndexCache.clear(),this.nonBlendModesSet.clear(),e.next=8,Promise.all(this.fontCache);case 8:r=e.sent,n=b(r);try{for(n.s();!(a=n.n()).done;)delete a.value.dict.cacheKey}catch(e){n.e(e)}finally{n.f()}this.fontCache.clear(),this.builtInCMapCache.clear(),this.standardFontDataCache.clear();case 14:case"end":return e.stop()}}),e,this)}))),function(){return C.apply(this,arguments)})},{key:"getPageDict",value:(A=y(g().mark((function e(t){var r,n,o,s,c,u,l,f,h,d,p,v,y,m,b,w;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=[this.toplevelPagesDict],n=new i.RefSet,(o=this._catDict.getRaw("Pages"))instanceof i.Ref&&n.put(o),s=this.xref,c=this.pageKidsCountCache,u=this.pageIndexCache,l=0;case 6:if(!r.length){e.next=67;break}if(!((f=r.pop())instanceof i.Ref)){e.next=34;break}if(!((h=c.get(f))>=0&&l+h<=t)){e.next=13;break}return l+=h,e.abrupt("continue",6);case 13:if(!n.has(f)){e.next=15;break}throw new a.FormatError("Pages tree contains circular reference.");case 15:return n.put(f),e.next=18,s.fetchAsync(f);case 18:if(!((d=e.sent)instanceof i.Dict)){e.next=32;break}if(!((p=d.getRaw("Type"))instanceof i.Ref)){e.next=25;break}return e.next=24,s.fetchAsync(p);case 24:p=e.sent;case 25:if(!(0,i.isName)(p,"Page")&&d.has("Kids")){e.next=32;break}if(c.has(f)||c.put(f,1),u.has(f)||u.put(f,l),l!==t){e.next=30;break}return e.abrupt("return",[d,f]);case 30:return l++,e.abrupt("continue",6);case 32:return r.push(d),e.abrupt("continue",6);case 34:if(f instanceof i.Dict){e.next=36;break}throw new a.FormatError("Page dictionary kid reference points to wrong type of object.");case 36:if(v=f.objId,!((y=f.getRaw("Count"))instanceof i.Ref)){e.next=42;break}return e.next=41,s.fetchAsync(y);case 41:y=e.sent;case 42:if(!(Number.isInteger(y)&&y>=0)){e.next=47;break}if(v&&!c.has(v)&&c.put(v,y),!(l+y<=t)){e.next=47;break}return l+=y,e.abrupt("continue",6);case 47:if(!((m=f.getRaw("Kids"))instanceof i.Ref)){e.next=52;break}return e.next=51,s.fetchAsync(m);case 51:m=e.sent;case 52:if(Array.isArray(m)){e.next=64;break}if(!((b=f.getRaw("Type"))instanceof i.Ref)){e.next=58;break}return e.next=57,s.fetchAsync(b);case 57:b=e.sent;case 58:if(!(0,i.isName)(b,"Page")&&f.has("Kids")){e.next=63;break}if(l!==t){e.next=61;break}return e.abrupt("return",[f,null]);case 61:return l++,e.abrupt("continue",6);case 63:throw new a.FormatError("Page dictionary kids object is not an array.");case 64:for(w=m.length-1;w>=0;w--)r.push(m[w]);e.next=6;break;case 67:throw new Error("Page index ".concat(t," not found."));case 68:case"end":return e.stop()}}),e,this)}))),function(e){return A.apply(this,arguments)})},{key:"getAllPageDicts",value:(O=y(g().mark((function e(){var t,r,o,s,c,u,l,f,h,d,p,v,y,m,b,w,k,S,x=arguments;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:p=function(e){if(e instanceof n.XRefEntryException&&!t)throw e;t&&r&&0===h&&((0,a.warn)('getAllPageDicts - Skipping invalid first page: "'.concat(e,'".')),e=i.Dict.empty),u.set(h++,[e,null])},d=function(e,t){t&&!f.has(t)&&f.put(t,h),u.set(h++,[e,t])},t=x.length>0&&void 0!==x[0]&&x[0],r=this.pdfManager.evaluatorOptions.ignoreErrors,o=[{currentNode:this.toplevelPagesDict,posInKids:0}],s=new i.RefSet,(c=this._catDict.getRaw("Pages"))instanceof i.Ref&&s.put(c),u=new Map,l=this.xref,f=this.pageIndexCache,h=0;case 10:if(!(o.length>0)){e.next=70;break}if(v=o.at(-1),y=v.currentNode,m=v.posInKids,!((b=y.getRaw("Kids"))instanceof i.Ref)){e.next=25;break}return e.prev=15,e.next=18,l.fetchAsync(b);case 18:b=e.sent,e.next=25;break;case 21:return e.prev=21,e.t0=e.catch(15),p(e.t0),e.abrupt("break",70);case 25:if(Array.isArray(b)){e.next=28;break}return p(new a.FormatError("Page dictionary kids object is not an array.")),e.abrupt("break",70);case 28:if(!(m>=b.length)){e.next=31;break}return o.pop(),e.abrupt("continue",10);case 31:if(w=b[m],k=void 0,!(w instanceof i.Ref)){e.next=50;break}if(!s.has(w)){e.next=37;break}return p(new a.FormatError("Pages tree contains circular reference.")),e.abrupt("break",70);case 37:return s.put(w),e.prev=38,e.next=41,l.fetchAsync(w);case 41:k=e.sent,e.next=48;break;case 44:return e.prev=44,e.t1=e.catch(38),p(e.t1),e.abrupt("break",70);case 48:e.next=51;break;case 50:k=w;case 51:if(k instanceof i.Dict){e.next=54;break}return p(new a.FormatError("Page dictionary kid reference points to wrong type of object.")),e.abrupt("break",70);case 54:if(!((S=k.getRaw("Type"))instanceof i.Ref)){e.next=66;break}return e.prev=56,e.next=59,l.fetchAsync(S);case 59:S=e.sent,e.next=66;break;case 62:return e.prev=62,e.t2=e.catch(56),p(e.t2),e.abrupt("break",70);case 66:(0,i.isName)(S,"Page")||!k.has("Kids")?d(k,w instanceof i.Ref?w:null):o.push({currentNode:k,posInKids:0}),v.posInKids++,e.next=10;break;case 70:return e.abrupt("return",u);case 71:case"end":return e.stop()}}),e,this,[[15,21],[38,44],[56,62]])}))),function(){return O.apply(this,arguments)})},{key:"getPageIndex",value:function(e){var t=this,r=this.pageIndexCache.get(e);if(void 0!==r)return Promise.resolve(r);var n=this.xref,o=0;return function r(s){return function(t){var r,o=0;return n.fetchAsync(t).then((function(n){if((0,i.isRefsEqual)(t,e)&&!(0,i.isDict)(n,"Page")&&!(n instanceof i.Dict&&!n.has("Type")&&n.has("Contents")))throw new a.FormatError("The reference does not point to a /Page dictionary.");if(!n)return null;if(!(n instanceof i.Dict))throw new a.FormatError("Node must be a dictionary.");return r=n.getRaw("Parent"),n.getAsync("Parent")})).then((function(e){if(!e)return null;if(!(e instanceof i.Dict))throw new a.FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;var s,c=[],u=!1,l=b(e);try{for(l.s();!(s=l.n()).done;){var f=s.value;if(!(f instanceof i.Ref))throw new a.FormatError("Kid must be a reference.");if((0,i.isRefsEqual)(f,t)){u=!0;break}c.push(n.fetchAsync(f).then((function(e){if(!(e instanceof i.Dict))throw new a.FormatError("Kid node must be a dictionary.");e.has("Count")?o+=e.get("Count"):o++})))}}catch(e){l.e(e)}finally{l.f()}if(!u)throw new a.FormatError("Kid reference not found in parent's kids.");return Promise.all(c).then((function(){return[o,r]}))}))}(s).then((function(n){if(!n)return t.pageIndexCache.put(e,o),o;var a=m(n,2),i=a[0],s=a[1];return o+=i,r(s)}))}(e)}},{key:"baseUrl",get:function(){var e=this._catDict.get("URI");if(e instanceof i.Dict){var t=e.get("Base");if("string"==typeof t){var r=(0,a.createValidAbsoluteUrl)(t,null,{tryConvertEncoding:!0});if(r)return(0,a.shadow)(this,"baseUrl",r.href)}}return(0,a.shadow)(this,"baseUrl",null)}}],v=[{key:"parseDestDictionary",value:function(e){var t=e.destDict;if(t instanceof i.Dict){var r=e.resultObj;if("object"===p(r)){var o,c,u=e.docBaseUrl||null,l=e.docAttachments||null,f=t.get("A");if(f instanceof i.Dict||(t.has("Dest")?f=t.get("Dest"):(f=t.get("AA"))instanceof i.Dict&&(f.has("D")?f=f.get("D"):f.has("U")&&(f=f.get("U")))),f instanceof i.Dict){var h=f.get("S");if(!(h instanceof i.Name))return void(0,a.warn)("parseDestDictionary: Invalid type in Action dictionary.");var d=h.name;switch(d){case"ResetForm":var g,v=f.get("Flags"),y=0==(1&("number"==typeof v?v:0)),m=[],w=[],k=b(f.get("Fields")||[]);try{for(k.s();!(g=k.n()).done;){var S=g.value;S instanceof i.Ref?w.push(S.toString()):"string"==typeof S&&m.push((0,a.stringToPDFString)(S))}}catch(e){k.e(e)}finally{k.f()}r.resetForm={fields:m,refs:w,include:y};break;case"URI":(o=f.get("URI"))instanceof i.Name&&(o="/"+o.name);break;case"GoTo":c=f.get("D");break;case"Launch":case"GoToR":var x=f.get("F");x instanceof i.Dict?o=x.get("F")||null:"string"==typeof x&&(o=x);var O=f.get("D");if(O&&(O instanceof i.Name&&(O=O.name),"string"==typeof o)){var A=o.split("#")[0];"string"==typeof O?o=A+"#"+O:Array.isArray(O)&&(o=A+"#"+JSON.stringify(O))}var C=f.get("NewWindow");"boolean"==typeof C&&(r.newWindow=C);break;case"GoToE":var F,P=f.get("T");if(l&&P instanceof i.Dict){var T=P.get("R"),I=P.get("N");(0,i.isName)(T,"C")&&"string"==typeof I&&(F=l[(0,a.stringToPDFString)(I)])}F?r.attachment=F:(0,a.warn)('parseDestDictionary - unimplemented "GoToE" action.');break;case"Named":var E=f.get("N");E instanceof i.Name&&(r.action=E.name);break;case"SetOCGState":var j=f.get("State"),M=f.get("PreserveRB");if(!Array.isArray(j)||0===j.length)break;var _,L=[],R=b(j);try{for(R.s();!(_=R.n()).done;){var N=_.value;if(N instanceof i.Name)switch(N.name){case"ON":case"OFF":case"Toggle":L.push(N.name)}else N instanceof i.Ref&&L.push(N.toString())}}catch(e){R.e(e)}finally{R.f()}if(L.length!==j.length)break;r.setOCGState={state:L,preserveRB:"boolean"!=typeof M||M};break;case"JavaScript":var D,B=f.get("JS");B instanceof s.BaseStream?D=B.getString():"string"==typeof B&&(D=B);var U=D&&(0,n.recoverJsURL)((0,a.stringToPDFString)(D));if(U){o=U.url,r.newWindow=U.newWindow;break}default:if("JavaScript"===d||"SubmitForm"===d)break;(0,a.warn)('parseDestDictionary - unsupported action: "'.concat(d,'".'))}}else t.has("Dest")&&(c=t.get("Dest"));if("string"==typeof o){var $=(0,a.createValidAbsoluteUrl)(o,u,{addDefaultProtocol:!0,tryConvertEncoding:!0});$&&(r.url=$.href),r.unsafeUrl=o}c&&(c instanceof i.Name&&(c=c.name),"string"==typeof c?r.dest=(0,a.stringToPDFString)(c):Array.isArray(c)&&(r.dest=c))}else(0,a.warn)("parseDestDictionary: \`resultObj\` must be an object.")}else(0,a.warn)("parseDestDictionary: \`destDict\` must be a dictionary.")}}],r&&S(t.prototype,r),v&&S(t,v),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Catalog=O},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NumberTree=t.NameTree=void 0;var n=r(134),a=r(2);function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&o(e,t)}function o(e,t){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},o(e,t)}function s(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=c(e);if(t){var a=c(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===u(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0;){var o=t.fetchIfRef(i.shift());if(o instanceof n.Dict)if(o.has("Kids")){var s=o.get("Kids");if(!Array.isArray(s))continue;var c,u=l(s);try{for(u.s();!(c=u.n()).done;){var f=c.value;if(r.has(f))throw new a.FormatError('Duplicate entry in "'.concat(this._type,'" tree.'));i.push(f),r.put(f)}}catch(e){u.e(e)}finally{u.f()}}else{var h=o.get(this._type);if(Array.isArray(h))for(var d=0,p=h.length;d10)return(0,a.warn)('Search depth limit reached for "'.concat(this._type,'" tree.')),null;var i=r.get("Kids");if(!Array.isArray(i))return null;for(var o=0,s=i.length-1;o<=s;){var c=o+s>>1,u=t.fetchIfRef(i[c]),l=u.get("Limits");if(et.fetchIfRef(l[1]))){r=u;break}o=c+1}}if(o>s)return null}var f=r.get(this._type);if(Array.isArray(f))for(var h=0,d=f.length-2;h<=d;){var p=h+d>>1,g=p+(1&p),v=t.fetchIfRef(f[g]);if(ev))return t.fetchIfRef(f[g+1]);h=g+2}}return null}}]),e}(),v=function(e){i(r,e);var t=s(r);function r(e,n){return h(this,r),t.call(this,e,n,"Names")}return p(r)}(g);t.NameTree=v;var y=function(e){i(r,e);var t=s(r);function r(e,n){return h(this,r),t.call(this,e,n,"Nums")}return p(r)}(g);t.NumberTree=y},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.clearGlobalCaches=function(){(0,n.clearPrimitiveCaches)(),(0,a.clearUnicodeCaches)()};var n=r(134),a=r(169)},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FileSpec=void 0;var n=r(2),a=r(136),i=r(134);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataParser=void 0;var n=r(195);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=o(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function o(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\\\\376\\\\377([^<]+)/g,(function(e,t){for(var r=t.replace(/\\\\([0-3])([0-7])([0-7])/g,(function(e,t,r,n){return String.fromCharCode(64*t+8*r+1*n)})).replace(/&(amp|apos|gt|lt|quot);/g,(function(e,t){switch(t){case"amp":return"&";case"apos":return"'";case"gt":return">";case"lt":return"<";case"quot":return'"'}throw new Error("_repair: ".concat(t," isn't defined."))})),n=[],a=0,i=r.length;a=32&&o<127&&60!==o&&62!==o&&38!==o?n.push(String.fromCharCode(o)):n.push("&#x"+(65536+o).toString(16).substring(1)+";")}return">"+n.join("")}))}},{key:"_getSequence",value:function(e){var t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter((function(e){return"rdf:li"===e.nodeName}))}},{key:"_parseArray",value:function(e){if(e.hasChildNodes()){var t=(n=e.childNodes,a=1,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(n,a)||o(n,a)||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.")}())[0],r=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,r.map((function(e){return e.textContent.trim()})))}var n,a}},{key:"_parse",value:function(e){var t=e.documentElement;if("rdf:rdf"!==t.nodeName)for(t=t.firstChild;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling;if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes()){var r,n=i(t.childNodes);try{for(n.s();!(r=n.n()).done;){var a=r.value;if("rdf:description"===a.nodeName){var o,s=i(a.childNodes);try{for(s.s();!(o=s.n()).done;){var c=o.value,u=c.nodeName;switch(u){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(c);continue}this._metadataMap.set(u,c.textContent.trim())}}catch(e){s.e(e)}finally{s.f()}}}}catch(e){n.e(e)}finally{n.f()}}}},{key:"serializable",get:function(){return{parsedData:this._metadataMap,rawData:this._data}}}])&&c(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.MetadataParser=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.StructTreeRoot=t.StructTreePage=void 0;var n=r(134),a=r(2),i=r(199);function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]?arguments[2]:0;if(r>40)return(0,a.warn)("StructTree MAX_DEPTH reached."),null;if(t.has(e))return t.get(e);var i=new y(this,e);t.set(e,i);var s=e.get("P");if(!s||(0,n.isName)(s.get("Type"),"StructTreeRoot"))return this.addTopLevelNode(e,i)||t.delete(e),i;var c=this.addNode(s,t,r+1);if(!c)return i;var u,l=!1,f=o(c.kids);try{for(f.s();!(u=f.n()).done;){var h=u.value;h.type===g&&h.dict===e&&(h.parentNode=i,l=!0)}}catch(e){f.e(e)}finally{f.f()}return l||t.delete(e),i}},{key:"addTopLevelNode",value:function(e,t){var r=this.rootDict.get("K");if(!r)return!1;if(r instanceof n.Dict)return r.objId===e.objId&&(this.nodes[0]=t,!0);if(!Array.isArray(r))return!0;for(var a=!1,i=0;i2&&void 0!==arguments[2]?arguments[2]:0;if(n>40)(0,a.warn)("StructTree too deep to be fully serialized.");else{var i=Object.create(null);i.role=t.role,i.children=[],r.children.push(i);var s=t.dict.get("Alt");"string"==typeof s&&(i.alt=(0,a.stringToPDFString)(s));var c=t.dict.get("Lang");"string"==typeof c&&(i.lang=(0,a.stringToPDFString)(c));var u,l=o(t.kids);try{for(l.s();!(u=l.n()).done;){var f=u.value,v=f.type===g?f.parentNode:null;v?e(v,i,n+1):f.type===h||f.type===d?i.children.push({type:"content",id:"page".concat(f.pageObjId,"_mcid").concat(f.mcid)}):f.type===p&&i.children.push({type:"object",id:f.refObjId})}}catch(e){l.e(e)}finally{l.f()}}}var t=Object.create(null);t.children=[],t.role="Root";var r,n=o(this.nodes);try{for(n.s();!(r=n.n()).done;){var i=r.value;i&&e(i,t)}}catch(e){n.e(e)}finally{n.f()}return t}}]),e}();t.StructTreePage=b},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ObjectLoader=void 0;var a=r(134),i=r(136),o=r(135),s=r(2);function c(){c=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,n){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(n||[]);return a(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};l(y,o,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,o)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function i(a,o,s,c){var u=h(e[a],e,o);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==n(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){i("next",e,s,c)}),(function(e){i("throw",e,s,c)})):t.resolve(f).then((function(e){l.value=e,s(l)}),(function(e){return i("throw",e,s,c)}))}c(u.arg)}var o;a(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){i(e,r,t,n)}))}return o=o?o.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function u(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function l(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){u(i,n,a,o,s,"next",e)}function s(e){u(i,n,a,o,s,"throw",e)}o(void 0)}))}}function f(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.XFAFactory=void 0;var n=r(206),a=r(210),i=r(216),o=r(214),s=r(207),c=r(2),u=r(217),l=r(227);function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},e}function p(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function g(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){p(i,n,a,o,s,"next",e)}function s(e){p(i,n,a,o,s,"throw",e)}o(void 0)}))}}function v(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(this.form[n.$globalData].usedTypefaces);try{for(a.s();!(t=a.n()).done;){var i=t.value;i=(0,s.stripQuotes)(i),this.form[n.$globalData].fontFinder.find(i)||r.push(i)}}catch(e){a.e(e)}finally{a.f()}return r.length>0?r:null}},{key:"appendFonts",value:function(e,t){this.form[n.$globalData].fontFinder.add(e,t)}},{key:"getPages",value:(p=g(d().mark((function e(){var t;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.pages){e.next=3;break}return e.next=3,this._createPages();case 3:return t=this.pages,this.pages=null,e.abrupt("return",t);case 6:case"end":return e.stop()}}),e,this)}))),function(){return p.apply(this,arguments)})},{key:"serializeData",value:function(e){return this.dataHandler.serialize(e)}}],f=[{key:"_createDocument",value:function(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}},{key:"getRichTextAsHtml",value:function(e){if(!e||"string"!=typeof e)return null;try{var t=new u.XFAParser(l.XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[n.$nodeName])){var r=l.XhtmlNamespace.body({});r[n.$appendChild](t),t=r}var a=t[n.$toHTML]();if(!a.success)return null;var i=a.html,o=i.attributes;return o&&(o.class&&(o.class=o.class.filter((function(e){return!e.startsWith("xfa")}))),o.dir="auto"),{html:i,str:t[n.$text]()}}catch(e){(0,c.warn)("XFA - an error occurred during parsing of rich text: ".concat(e))}return null}}],r&&v(t.prototype,r),f&&v(t,f),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.XFAFactory=y},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XmlObject=t.XFAObjectArray=t.XFAObject=t.XFAAttribute=t.StringObject=t.OptionObject=t.Option10=t.Option01=t.IntegerObject=t.ContentObject=t.$uid=t.$toStyle=t.$toString=t.$toPages=t.$toHTML=t.$text=t.$tabIndex=t.$setValue=t.$setSetAttributes=t.$setId=t.$searchNode=t.$root=t.$resolvePrototypes=t.$removeChild=t.$pushPara=t.$pushGlyphs=t.$popPara=t.$onText=t.$onChildCheck=t.$onChild=t.$nsAttributes=t.$nodeName=t.$namespaceId=t.$isUsable=t.$isTransparent=t.$isThereMoreWidth=t.$isSplittable=t.$isNsAgnostic=t.$isDescendent=t.$isDataValue=t.$isCDATAXml=t.$isBindable=t.$insertAt=t.$indexOf=t.$ids=t.$hasSettableValue=t.$globalData=t.$getTemplateRoot=t.$getSubformParent=t.$getRealChildrenByNameIt=t.$getParent=t.$getNextPage=t.$getExtra=t.$getDataValue=t.$getContainedChildren=t.$getChildrenByNameIt=t.$getChildrenByName=t.$getChildrenByClass=t.$getChildren=t.$getAvailableSpace=t.$getAttributes=t.$getAttributeIt=t.$flushHTML=t.$finalize=t.$extra=t.$dump=t.$data=t.$content=t.$consumed=t.$clone=t.$cleanup=t.$cleanPage=t.$clean=t.$childrenToHTML=t.$appendChild=t.$addHTML=t.$acceptWhitespace=void 0;var n=r(207),a=r(2),i=r(135),o=r(208),s=r(209);function c(){return c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=p(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:r):a.value}},c.apply(this,arguments)}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||m(e,t)||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 l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f(e,t)}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function h(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=p(e);if(t){var a=p(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===g(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return d(e)}(this,r)}}function d(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},p(e)}function g(e){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},g(e)}function v(){v=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function p(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=p.prototype=h.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==g(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function y(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=m(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function m(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]&&arguments[2];w(this,e),this[pe]=t,this[ge]=r,this[We]=n,this[Ke]=null,this[Ue]=[],this[Re]="".concat(r).concat(et++),this[Q]=null}return S(e,[{key:ye,value:function(e){if(!this[We]||!this[me](e))return!1;var t=e[ge],r=this[t];if(!(r instanceof nt))return null!==r&&this[xe](r),this[t]=e,this[A](e),!0;if(r.push(e))return this[A](e),!0;var n="";return this.id?n=" (id: ".concat(this.id,")"):this.name&&(n=" (name: ".concat(this.name," ").concat(this.h.value,")")),(0,a.warn)('XFA - node "'.concat(this[ge],'"').concat(n,' has already enough "').concat(t,'"!')),!1}},{key:me,value:function(e){return this.hasOwnProperty(e[ge])&&e[pe]===this[pe]}},{key:ce,value:function(){return!1}},{key:x,value:function(){return!1}},{key:ae,value:function(){return!1}},{key:ie,value:function(){return!1}},{key:ke,value:function(){this.para&&this[Z]()[L].paraStack.pop()}},{key:Se,value:function(){this[Z]()[L].paraStack.push(this.para)}},{key:Fe,value:function(e){this.id&&this[pe]===o.NamespaceIds.template.id&&e.set(this.id,this)}},{key:Z,value:function(){return this[Q].template}},{key:ue,value:function(){return!1}},{key:le,value:function(){return!1}},{key:A,value:function(e){e[Ke]=this,this[Ue].push(e),!e[Q]&&this[Q]&&(e[Q]=this[Q])}},{key:xe,value:function(e){var t=this[Ue].indexOf(e);this[Ue].splice(t,1)}},{key:ee,value:function(){return this.hasOwnProperty("value")}},{key:Te,value:function(e){}},{key:be,value:function(e){}},{key:R,value:function(){}},{key:F,value:function(e){delete this[We],this[T]&&(e.clean(this[T]),delete this[T])}},{key:re,value:function(e){return this[Ue].indexOf(e)}},{key:ne,value:function(e,t){t[Ke]=this,this[Ue].splice(e,0,t),!t[Q]&&this[Q]&&(t[Q]=this[Q])}},{key:fe,value:function(){return!this.name}},{key:de,value:function(){return""}},{key:Ee,value:function(){return 0===this[Ue].length?this[j]:this[Ue].map((function(e){return e[Ee]()})).join("")}},{key:Be,get:function(){var t=Object.getPrototypeOf(this);if(!t._attributes){var r,n=t._attributes=new Set,i=y(Object.getOwnPropertyNames(this));try{for(i.s();!(r=i.n()).done;){var o=r.value;if(null===this[o]||this[o]instanceof e||this[o]instanceof nt)break;n.add(o)}}catch(e){i.e(e)}finally{i.f()}}return(0,a.shadow)(this,Be,t._attributes)}},{key:se,value:function(e){for(var t=this;t;){if(t===e)return!0;t=t[J]()}return!1}},{key:J,value:function(){return this[Ke]}},{key:K,value:function(){return this[J]()}},{key:W,value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e?this[e]:this[Ue]}},{key:_,value:function(){var t=Object.create(null);this[j]&&(t.$content=this[j]);var r,n=y(Object.getOwnPropertyNames(this));try{for(n.s();!(r=n.n()).done;){var a=r.value,i=this[a];null!==i&&(i instanceof e?t[a]=i[_]():i instanceof nt?i.isEmpty()||(t[a]=i.dump()):t[a]=i)}}catch(e){n.e(e)}finally{n.f()}return t}},{key:Le,value:function(){return null}},{key:Me,value:function(){return n.HTMLResult.EMPTY}},{key:V,value:v().mark((function e(){var t,r,n;return v().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=y(this[W]()),e.prev=1,t.s();case 3:if((r=t.n()).done){e.next=9;break}return n=r.value,e.next=7,n;case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),t.e(e.t0);case 14:return e.prev=14,t.f(),e.finish(14);case 17:case"end":return e.stop()}}),e,this,[[1,11,14,17]])}))},{key:qe,value:v().mark((function e(t,r){var n,a,i,o,s;return v().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=y(this[V]()),e.prev=1,n.s();case 3:if((a=n.n()).done){e.next=13;break}if(i=a.value,t&&r!==t.has(i[ge])){e.next=11;break}return o=this[U](),(s=i[Me](o)).success||(this[L].failingNode=i),e.next=11,s;case 11:e.next=3;break;case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(1),n.e(e.t0);case 18:return e.prev=18,n.f(),e.finish(18);case 21:case"end":return e.stop()}}),e,this,[[1,15,18,21]])}))},{key:N,value:function(){return null}},{key:O,value:function(e,t){this[L].children.push(e)}},{key:U,value:function(){}},{key:C,value:function(e){var t=e.filter,r=void 0===t?null:t,a=e.include,i=void 0===a||a;if(this[L].generator){var o=this[U](),s=this[L].failingNode[Me](o);if(!s.success)return s;s.html&&this[O](s.html,s.bbox),delete this[L].failingNode}else this[L].generator=this[qe](r,i);for(;;){var c=this[L].generator.next();if(c.done)break;var u=c.value;if(!u.success)return u;u.html&&this[O](u.html,u.bbox)}return this[L].generator=null,n.HTMLResult.EMPTY}},{key:Pe,value:function(e){this[Ze]=new Set(Object.keys(e))}},{key:ze,value:function(e){var t,r=this[Be],n=this[Ze];return(t=e,function(e){if(Array.isArray(e))return b(e)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||m(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).filter((function(e){return r.has(e)&&!n.has(e)}))}},{key:Ae,value:function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set,n=y(this[Ue]);try{for(n.s();!(t=n.n()).done;)t.value[Je](e,r)}catch(e){n.e(e)}finally{n.f()}}},{key:Je,value:function(e,t){var r=this[Ge](e,t);r?this[Ne](r,e,t):this[Ae](e,t)}},{key:Ge,value:function(e,t){var r=this.use,n=this.usehref;if(!r&&!n)return null;var i=null,o=null,c=null,u=r;if(n?(u=n,n.startsWith("#som(")&&n.endsWith(")")?o=n.slice(5,n.length-1):n.startsWith(".#som(")&&n.endsWith(")")?o=n.slice(6,n.length-1):n.startsWith("#")?c=n.slice(1):n.startsWith(".#")&&(c=n.slice(2))):r.startsWith("#")?c=r.slice(1):o=r,this.use=this.usehref="",c?i=e.get(c):(i=(0,s.searchNode)(e.get(Oe),this,o,!0,!1))&&(i=i[0]),!i)return(0,a.warn)("XFA - Invalid prototype reference: ".concat(u,".")),null;if(i[ge]!==this[ge])return(0,a.warn)("XFA - Incompatible prototype: ".concat(i[ge]," !== ").concat(this[ge],".")),null;if(t.has(i))return(0,a.warn)("XFA - Cycle detected in prototypes use."),null;t.add(i);var l=i[Ge](e,t);return l&&i[Ne](l,e,t),i[Ae](e,t),t.delete(i),i}},{key:Ne,value:function(e,t,r){if(r.has(e))(0,a.warn)("XFA - Cycle detected in prototypes use.");else{!this[j]&&e[j]&&(this[j]=e[j]),new Set(r).add(e);var n,i=y(this[ze](e[Ze]));try{for(i.s();!(n=i.n()).done;){var o=n.value;this[o]=e[o],this[Ze]&&this[Ze].add(o)}}catch(e){i.e(e)}finally{i.f()}var s,c=y(Object.getOwnPropertyNames(this));try{for(c.s();!(s=c.n()).done;){var u=s.value;if(!this[Be].has(u)){var l=this[u],f=e[u];if(l instanceof nt){var h,d=y(l[Ue]);try{for(d.s();!(h=d.n()).done;)h.value[Je](t,r)}catch(e){d.e(e)}finally{d.f()}for(var p=l[Ue].length,g=f[Ue].length;p0&&void 0!==arguments[0]?arguments[0]:null;return e?this[Ue].filter((function(t){return t[ge]===e})):this[Ue]}},{key:$,value:function(e){return this[e]}},{key:X,value:function(e,t){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return Array.from(this[H](e,t,r))}},{key:H,value:function(e,t){var r=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return v().mark((function a(){var i,o,s;return v().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if("parent"!==e){a.next=4;break}return a.next=3,r[Ke];case 3:return a.abrupt("return");case 4:i=y(r[Ue]),a.prev=5,i.s();case 7:if((o=i.n()).done){a.next=19;break}if((s=o.value)[ge]!==e){a.next=12;break}return a.next=12,s;case 12:if(s.name!==e){a.next=15;break}return a.next=15,s;case 15:if(!t&&!s[fe]()){a.next=17;break}return a.delegateYield(s[H](e,t,!1),"t0",17);case 17:a.next=7;break;case 19:a.next=24;break;case 21:a.prev=21,a.t1=a.catch(5),i.e(a.t1);case 24:return a.prev=24,i.f(),a.finish(24);case 27:if(!n||!r[Be].has(e)){a.next=30;break}return a.next=30,new at(r,e,r[e]);case 30:case"end":return a.stop()}}),a,null,[[5,21,24,27]])}))()}}],[{key:$e,value:function(t){return Array.isArray(t)?t.map((function(t){return e[$e](t)})):"object"===g(t)&&null!==t?Object.assign({},t):t}}]),e}();t.XFAObject=rt;var nt=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0;w(this,e),this[Ve]=t,this[Ue]=[]}return S(e,[{key:"push",value:function(e){return this[Ue].length<=this[Ve]?(this[Ue].push(e),!0):((0,a.warn)('XFA - node "'.concat(e[ge],'" accepts no more than ').concat(this[Ve]," children")),!1)}},{key:"isEmpty",value:function(){return 0===this[Ue].length}},{key:"dump",value:function(){return 1===this[Ue].length?this[Ue][0][_]():this[Ue].map((function(e){return e[_]()}))}},{key:I,value:function(){var t=new e(this[Ve]);return t[Ue]=this[Ue].map((function(e){return e[I]()})),t}},{key:"children",get:function(){return this[Ue]}},{key:"clear",value:function(){this[Ue].length=0}}]),e}();t.XFAObjectArray=nt;var at=function(){function e(t,r,n){w(this,e),this[Ke]=t,this[ge]=r,this[j]=n,this[E]=!1,this[Re]="attribute".concat(et++)}return S(e,[{key:J,value:function(){return this[Ke]}},{key:oe,value:function(){return!0}},{key:q,value:function(){return this[j].trim()}},{key:Te,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){e=e.value||"",this[j]=e.toString()}))},{key:Ee,value:function(){return this[j]}},{key:se,value:function(e){return this[Ke]===e||this[Ke][se](e)}}]),e}();t.XFAAttribute=at;var it=function(e){l(r,e);var t=h(r);function r(e,n){var a,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(w(this,r),(a=t.call(this,e,n))[j]="",a[Xe]=null,"#text"!==n){var o=new Map;a[De]=o;for(var s=0,c=Object.entries(i);s"),this[j])"string"==typeof this[j]?e.push((0,i.encodeToXmlString)(this[j])):this[j][_e](e);else{var d,p=y(this[Ue]);try{for(p.s();!(d=p.n()).done;)d.value[_e](e)}catch(e){p.e(e)}finally{p.f()}}e.push(""))}else e.push("/>")}else e.push((0,i.encodeToXmlString)(this[j]))}},{key:ye,value:function(e){if(this[j]){var t=new r(this[pe],"#text");this[A](t),t[j]=this[j],this[j]=""}return this[A](e),!0}},{key:be,value:function(e){this[j]+=e}},{key:R,value:function(){if(this[j]&&this[Ue].length>0){var e=new r(this[pe],"#text");this[A](e),e[j]=this[j],delete this[j]}}},{key:Me,value:function(){return"#text"===this[ge]?n.HTMLResult.success({name:"#text",value:this[j]}):n.HTMLResult.EMPTY}},{key:W,value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e?this[Ue].filter((function(t){return t[ge]===e})):this[Ue]}},{key:B,value:function(){return this[De]}},{key:$,value:function(e){var t=this[De].get(e);return void 0!==t?t:this[W](e)}},{key:H,value:v().mark((function(e,t){var r,n,a,i;return v().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(!(r=this[De].get(e))){o.next=4;break}return o.next=4,r;case 4:n=y(this[Ue]),o.prev=5,n.s();case 7:if((a=n.n()).done){o.next=16;break}if((i=a.value)[ge]!==e){o.next=12;break}return o.next=12,i;case 12:if(!t){o.next=14;break}return o.delegateYield(i[H](e,t),"t0",14);case 14:o.next=7;break;case 16:o.next=21;break;case 18:o.prev=18,o.t1=o.catch(5),n.e(o.t1);case 21:return o.prev=21,n.f(),o.finish(21);case 24:case"end":return o.stop()}}),r,this,[[5,18,21,24]])}))},{key:D,value:v().mark((function(e,t){var r,n,a,i;return v().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(!(r=this[De].get(e))||t&&r[E]){o.next=4;break}return o.next=4,r;case 4:n=y(this[Ue]),o.prev=5,n.s();case 7:if((a=n.n()).done){o.next=12;break}return i=a.value,o.delegateYield(i[D](e,t),"t0",10);case 10:o.next=7;break;case 12:o.next=17;break;case 14:o.prev=14,o.t1=o.catch(5),n.e(o.t1);case 17:return o.prev=17,n.f(),o.finish(17);case 20:case"end":return o.stop()}}),r,this,[[5,14,17,20]])}))},{key:z,value:v().mark((function e(t,r,n){var a,i,o;return v().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:a=y(this[Ue]),e.prev=1,a.s();case 3:if((i=a.n()).done){e.next=12;break}if((o=i.value)[ge]!==t||n&&o[E]){e.next=8;break}return e.next=8,o;case 8:if(!r){e.next=10;break}return e.delegateYield(o[z](t,r,n),"t0",10);case 10:e.next=3;break;case 12:e.next=17;break;case 14:e.prev=14,e.t1=e.catch(1),a.e(e.t1);case 17:return e.prev=17,a.f(),e.finish(17);case 20:case"end":return e.stop()}}),e,this,[[1,14,17,20]])}))},{key:oe,value:function(){return null===this[Xe]?0===this[Ue].length||this[Ue][0][pe]===o.NamespaceIds.xhtml.id:this[Xe]}},{key:q,value:function(){return null===this[Xe]?0===this[Ue].length?this[j].trim():this[Ue][0][pe]===o.NamespaceIds.xhtml.id?this[Ue][0][Ee]().trim():null:this[j].trim()}},{key:Te,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){e=e.value||"",this[j]=e.toString()}))},{key:_,value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=Object.create(null);e&&(t.$ns=this[pe]),this[j]&&(t.$content=this[j]),t.$name=this[ge],t.children=[];var r,n=y(this[Ue]);try{for(n.s();!(r=n.n()).done;){var a=r.value;t.children.push(a[_](e))}}catch(e){n.e(e)}finally{n.f()}t.attributes=Object.create(null);var i,o=y(this[De]);try{for(o.s();!(i=o.n()).done;){var s=u(i.value,2),c=s[0],l=s[1];t.attributes[c]=l[j]}}catch(e){o.e(e)}finally{o.f()}return t}}]),r}(rt);t.XmlObject=it;var ot=function(e){l(r,e);var t=h(r);function r(e,n){var a;return w(this,r),(a=t.call(this,e,n))[j]="",a}return S(r,[{key:be,value:function(e){this[j]+=e}},{key:R,value:function(){}}]),r}(rt);t.ContentObject=ot;var st=function(e){l(r,e);var t=h(r);function r(e,n,a){var i;return w(this,r),(i=t.call(this,e,n))[Ye]=a,i}return S(r,[{key:R,value:function(){var e=this;this[j]=(0,n.getKeyword)({data:this[j],defaultValue:this[Ye][0],validate:function(t){return e[Ye].includes(t)}})}},{key:F,value:function(e){c(p(r.prototype),F,this).call(this,e),delete this[Ye]}}]),r}(ot);t.OptionObject=st;var ct=function(e){l(r,e);var t=h(r);function r(){return w(this,r),t.apply(this,arguments)}return S(r,[{key:R,value:function(){this[j]=this[j].trim()}}]),r}(ot);t.StringObject=ct;var ut=function(e){l(r,e);var t=h(r);function r(e,n,a,i){var o;return w(this,r),(o=t.call(this,e,n))[He]=a,o[Qe]=i,o}return S(r,[{key:R,value:function(){this[j]=(0,n.getInteger)({data:this[j],defaultValue:this[He],validate:this[Qe]})}},{key:F,value:function(e){c(p(r.prototype),F,this).call(this,e),delete this[He],delete this[Qe]}}]),r}(ot);t.IntegerObject=ut;var lt=function(e){l(r,e);var t=h(r);function r(e,n){return w(this,r),t.call(this,e,n,0,(function(e){return 1===e}))}return S(r)}(ut);t.Option01=lt;var ft=function(e){l(r,e);var t=h(r);function r(e,n){return w(this,r),t.call(this,e,n,1,(function(e){return 0===e}))}return S(r)}(ut);t.Option10=ft},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.HTMLResult=void 0,t.getBBox=function(e){var t=-1;if(!e)return{x:t,y:t,width:t,height:t};var r=e.trim().split(/\\s*,\\s*/).map((function(e){return f(e,"-1")}));if(r.length<4||r[2]<0||r[3]<0)return{x:t,y:t,width:t,height:t};var n=o(r,4);return{x:n[0],y:n[1],width:n[2],height:n[3]}},t.getColor=function(e){var t=o(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0],3),r=t[0],n=t[1],a=t[2];if(!e)return{r,g:n,b:a};var i=e.trim().split(/\\s*,\\s*/).map((function(e){return Math.min(Math.max(0,parseInt(e.trim(),10)),255)})).map((function(e){return isNaN(e)?0:e}));if(i.length<3)return{r,g:n,b:a};var s=o(i,3);return{r:r=s[0],g:n=s[1],b:a=s[2]}},t.getFloat=function(e){var t=e.data,r=e.defaultValue,n=e.validate;if(!t)return r;t=t.trim();var a=parseFloat(t);return!isNaN(a)&&n(a)?a:r},t.getInteger=function(e){var t=e.data,r=e.defaultValue,n=e.validate;if(!t)return r;t=t.trim();var a=parseInt(t,10);return!isNaN(a)&&n(a)?a:r},t.getKeyword=l,t.getMeasurement=f,t.getRatio=function(e){if(!e)return{num:1,den:1};var t=e.trim().split(/\\s*:\\s*/).map((function(e){return parseFloat(e)})).filter((function(e){return!isNaN(e)}));if(1===t.length&&t.push(1),0===t.length)return{num:1,den:1};var r=o(t,2);return{num:r[0],den:r[1]}},t.getRelevant=function(e){return e?e.trim().split(/\\s+/).map((function(e){return{excluded:"-"===e[0],viewname:e.substring(1)}})):[]},t.getStringOption=function(e,t){return l({data:e,defaultValue:t[0],validate:function(e){return t.includes(e)}})},t.stripQuotes=function(e){return e.startsWith("'")||e.startsWith('"')?e.slice(1,e.length-1):e};var a=r(2);function i(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:"0";if(t=t||"0",!e)return f(t);var r=e.trim().match(u);if(!r)return f(t);var n=o(r,3),a=n[1],i=n[2],s=parseFloat(a);if(isNaN(s))return f(t);if(0===s)return 0;var l=c[i];return l?l(s):s}var h=function(){function e(t,r,n,a){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.success=t,this.html=r,this.bbox=n,this.breakNode=a}var t,r,n;return t=e,n=[{key:"FAILURE",get:function(){return(0,a.shadow)(this,"FAILURE",new e(!1,null,null,null))}},{key:"EMPTY",get:function(){return(0,a.shadow)(this,"EMPTY",new e(!0,null,null,null))}},{key:"breakNode",value:function(t){return new e(!1,null,null,t)}},{key:"success",value:function(t){return new e(!0,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,null)}}],(r=[{key:"isBreak",value:function(){return!!this.breakNode}}])&&i(t.prototype,r),n&&i(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.HTMLResult=h},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NamespaceIds=t.$buildXFAObject=void 0;var r=Symbol();t.$buildXFAObject=r,t.NamespaceIds={config:{id:0,check:function(e){return e.startsWith("http://www.xfa.org/schema/xci/")}},connectionSet:{id:1,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")}},datasets:{id:2,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-data/")}},form:{id:3,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-form/")}},localeSet:{id:4,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")}},pdf:{id:5,check:function(e){return"http://ns.adobe.com/xdp/pdf/"===e}},signature:{id:6,check:function(e){return"http://www.w3.org/2000/09/xmldsig#"===e}},sourceSet:{id:7,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-source-set/")}},stylesheet:{id:8,check:function(e){return"http://www.w3.org/1999/XSL/Transform"===e}},template:{id:9,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-template/")}},xdc:{id:10,check:function(e){return e.startsWith("http://www.xfa.org/schema/xdc/")}},xdp:{id:11,check:function(e){return"http://ns.adobe.com/xdp/"===e}},xfdf:{id:12,check:function(e){return"http://ns.adobe.com/xfdf/"===e}},xhtml:{id:13,check:function(e){return"http://www.w3.org/1999/xhtml"===e}},xmpmeta:{id:14,check:function(e){return"http://ns.adobe.com/xmpmeta/"===e}}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDataNode=function(e,t,r){var a=y(r);if(!a)return null;if(a.some((function(e){return e.operator===d.dotDot})))return null;var o=p.get(a[0].name),s=0;o?(e=o(e,t),s=1):e=t||e;for(var c=a.length;s4&&void 0!==arguments[4])||arguments[4],i=y(r,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);if(!i)return null;var c,u=p.get(i[0].name),l=0;u?(c=!0,e=[u(e,t)],l=1):(c=null===t,e=[t||e]);for(var f=function(r){var s,u=i[l],f=u.name,h=u.cacheName,p=u.operator,v=u.index,y=[],m=o(e);try{for(m.s();!(s=m.n()).done;){var b=s.value;if(b instanceof n.XFAObject){var w=void 0,k=void 0;if(a&&((k=g.get(b))||(k=new Map,g.set(b,k)),w=k.get(h)),!w){switch(p){case d.dot:w=b[n.$getChildrenByName](f,!1);break;case d.dotDot:w=b[n.$getChildrenByName](f,!0);break;case d.dotHash:w=(w=b[n.$getChildrenByClass](f))instanceof n.XFAObjectArray?w.children:[w]}a&&k.set(h,w)}w.length>0&&y.push(w)}}}catch(e){m.e(e)}finally{m.f()}if(0===y.length&&!c&&0===l){var S=t[n.$getParent]();return(t=S)?(l=-1,e=[t],"continue"):{v:null}}e=isFinite(v)?y.filter((function(e){return v=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||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 u(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2])||arguments[2],n=e.match(f);if(!n)return null;for(var a,o=c(n,1)[0],s=[{name:o,cacheName:"."+o,index:0,js:null,formCalc:null,operator:d.dot}],u=o.length;u{Object.defineProperty(t,"__esModule",{value:!0}),t.Binder=void 0;var n=r(206),a=r(211),i=r(209),o=r(208),s=r(2);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||f(e,t)||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 l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=f(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){if(e){if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&((a=e[n.$clone]())[n.$removeChild](a.occur),a.occur=null),this._bindValue(e,t[0],r),this._setProperties(e,t[0]),this._bindItems(e,t[0]),1!==t.length)for(var i=e[n.$getParent](),o=e[n.$nodeName],s=i[n.$indexOf](e),c=1,u=t.length;cm?g=g.slice(0,m):0===g.length&&(g=null),g&&this._isConsumeData()&&g.forEach((function(e){e[n.$consumed]=!0}))}else{if(!c.name){this._setAndBind(c,t);continue}if(this._isConsumeData()){for(var b=[];b.length0?b:null}else{if(!(g=t[n.$getRealChildrenByNameIt](c.name,!1,this.emptyMerge).next().value)){if(0===y){r.push(c);continue}var k=t[n.$namespaceId]===p?-1:t[n.$namespaceId];g=c[n.$data]=new n.XmlObject(k,c.name),this.emptyMerge&&(g[n.$consumed]=!0),t[n.$appendChild](g),this._setAndBind(c,g);continue}this.emptyMerge&&(g[n.$consumed]=!0),g=[g]}}g?this._bindOccurrences(c,g,h):y>0?this._setAndBind(c,t):r.push(c)}}else{this._mergeMode="consumeData"===c.mergeMode;var S=t[n.$getChildren]();if(S.length>0)this._bindOccurrences(c,[S[0]],null);else if(this.emptyMerge){var x=t[n.$namespaceId]===p?-1:t[n.$namespaceId],O=c[n.$data]=new n.XmlObject(x,c.name||"root");t[n.$appendChild](O),this._bindElement(c,O)}}}}catch(e){o.e(e)}finally{o.f()}r.forEach((function(e){return e[n.$getParent]()[n.$removeChild](e)}))}}])&&d(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Binder=v},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Value=t.Text=t.TemplateNamespace=t.Template=t.SetProperty=t.Items=t.Field=t.BindItems=void 0;var n=r(206),a=r(208),i=r(212),o=r(213),s=r(207),c=r(2),u=r(214),l=r(135),f=r(209);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(){return d="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=k(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:r):a.value}},d.apply(this,arguments)}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||A(e,t)||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 g(e,t){for(var r=0;r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}var x=S().mark(L);function O(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=A(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function A(e,t){if(e){if("string"==typeof e)return C(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?C(e,t):void 0}}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r180?1:0,f=50*(1+Math.cos(c)),h=50*(1-Math.sin(c)),d=50*(1+Math.cos(c+u)),p=50*(1-Math.sin(c+u));e={name:"path",attributes:{xmlns:P,d:"M ".concat(f," ").concat(h," A 50 50 0 ").concat(l," 0 ").concat(d," ").concat(p),vectorEffect:"non-scaling-stroke",style:a}},Object.assign(i,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}var g={name:"svg",children:[e],attributes:i};return M(this[n.$getParent]()[n.$getParent]())?s.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[g]}):(g.attributes.style.position="absolute",s.HTMLResult.success(g))}}]),r}(n.XFAObject),W=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"area",!0)).colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.id=e.id||"",a.name=e.name||"",a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.desc=null,a.extras=null,a.area=new n.XFAObjectArray,a.draw=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.exclGroup=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a}return v(r,[{key:n.$getContainedChildren,value:S().mark((function e(){return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(L(this),"t0",1);case 1:case"end":return e.stop()}}),e,this)}))},{key:n.$isTransparent,value:function(){return!0}},{key:n.$isBindable,value:function(){return!0}},{key:n.$addHTML,value:function(e,t){var r=p(t,4),a=r[0],i=r[1],o=r[2],s=r[3];this[n.$extra].width=Math.max(this[n.$extra].width,a+o),this[n.$extra].height=Math.max(this[n.$extra].height,i+s),this[n.$extra].children.push(e)}},{key:n.$getAvailableSpace,value:function(){return this[n.$extra].availableSpace}},{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"position"),r={style:t,id:this[n.$uid],class:["xfaArea"]};(0,o.isPrintOnly)(this)&&r.class.push("xfaPrintOnly"),this.name&&(r.xfaName=this.name);var a=[];this[n.$extra]={children:a,width:0,height:0,availableSpace:e};var i=this[n.$childrenToHTML]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!i.success)return i.isBreak()?i:(delete this[n.$extra],s.HTMLResult.FAILURE);t.width=(0,o.measureToString)(this[n.$extra].width),t.height=(0,o.measureToString)(this[n.$extra].height);var c={name:"div",attributes:r,children:a},u=[this.x,this.y,this[n.$extra].width,this[n.$extra].height];return delete this[n.$extra],s.HTMLResult.success(c,u)}}]),r}(n.XFAObject),V=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"assist",!0)).id=e.id||"",n.role=e.role||"",n.use=e.use||"",n.usehref=e.usehref||"",n.speak=null,n.toolTip=null,n}return v(r,[{key:n.$toHTML,value:function(){return this.toolTip&&this.toolTip[n.$content]?this.toolTip[n.$content]:null}}]),r}(n.XFAObject),Y=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"barcode",!0)).charEncoding=(0,s.getKeyword)({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:function(e){return["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)}}),n.checksum=(0,s.getStringOption)(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]),n.dataColumnCount=(0,s.getInteger)({data:e.dataColumnCount,defaultValue:-1,validate:function(e){return e>=0}}),n.dataLength=(0,s.getInteger)({data:e.dataLength,defaultValue:-1,validate:function(e){return e>=0}}),n.dataPrep=(0,s.getStringOption)(e.dataPrep,["none","flateCompress"]),n.dataRowCount=(0,s.getInteger)({data:e.dataRowCount,defaultValue:-1,validate:function(e){return e>=0}}),n.endChar=e.endChar||"",n.errorCorrectionLevel=(0,s.getInteger)({data:e.errorCorrectionLevel,defaultValue:-1,validate:function(e){return e>=0&&e<=8}}),n.id=e.id||"",n.moduleHeight=(0,s.getMeasurement)(e.moduleHeight,"5mm"),n.moduleWidth=(0,s.getMeasurement)(e.moduleWidth,"0.25mm"),n.printCheckDigit=(0,s.getInteger)({data:e.printCheckDigit,defaultValue:0,validate:function(e){return 1===e}}),n.rowColumnRatio=(0,s.getRatio)(e.rowColumnRatio),n.startChar=e.startChar||"",n.textLocation=(0,s.getStringOption)(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]),n.truncate=(0,s.getInteger)({data:e.truncate,defaultValue:0,validate:function(e){return 1===e}}),n.type=(0,s.getStringOption)(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]),n.upsMode=(0,s.getStringOption)(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]),n.use=e.use||"",n.usehref=e.usehref||"",n.wideNarrowRatio=(0,s.getRatio)(e.wideNarrowRatio),n.encrypt=null,n.extras=null,n}return v(r)}(n.XFAObject),K=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"bind",!0)).match=(0,s.getStringOption)(e.match,["once","dataRef","global","none"]),n.ref=e.ref||"",n.picture=null,n}return v(r)}(n.XFAObject),J=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"bindItems")).connection=e.connection||"",n.labelRef=e.labelRef||"",n.ref=e.ref||"",n.valueRef=e.valueRef||"",n}return v(r)}(n.XFAObject);t.BindItems=J;var Z=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"bookend")).id=e.id||"",n.leader=e.leader||"",n.trailer=e.trailer||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),Q=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"boolean")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$toHTML,value:function(e){return U(1===this[n.$content]?"1":"0")}}]),r}(n.Option01),ee=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"border",!0)).break=(0,s.getStringOption)(e.break,["close","open"]),a.hand=(0,s.getStringOption)(e.hand,["even","left","right"]),a.id=e.id||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.corner=new n.XFAObjectArray(4),a.edge=new n.XFAObjectArray(4),a.extras=null,a.fill=null,a.margin=null,a}return v(r,[{key:n.$getExtra,value:function(){if(!this[n.$extra]){var e=this.edge.children.slice();if(e.length<4)for(var t=e.at(-1)||new Ae({}),r=e.length;r<4;r++)e.push(t);var a=e.map((function(e){return e.thickness})),i=[0,0,0,0];this.margin&&(i[0]=this.margin.topInset,i[1]=this.margin.rightInset,i[2]=this.margin.bottomInset,i[3]=this.margin.leftInset),this[n.$extra]={widths:a,insets:i,edges:e}}return this[n.$extra]}},{key:n.$toStyle,value:function(){var e=this[n.$getExtra]().edges.map((function(e){var t=e[n.$toStyle]();return t.color=t.color||"#000000",t})),t=Object.create(null);if(this.margin&&Object.assign(t,this.margin[n.$toStyle]()),this.fill&&"visible"===this.fill.presence&&Object.assign(t,this.fill[n.$toStyle]()),this.corner.children.some((function(e){return 0!==e.radius}))){var r=this.corner.children.map((function(e){return e[n.$toStyle]()}));if(2===r.length||3===r.length)for(var a=r.at(-1),i=r.length;i<4;i++)r.push(a);t.borderRadius=r.map((function(e){return e.radius})).join(" ")}switch(this.presence){case"invisible":case"hidden":t.borderStyle="";break;case"inactive":t.borderStyle="none";break;default:t.borderStyle=e.map((function(e){return e.style})).join(" ")}return t.borderWidth=e.map((function(e){return e.width})).join(" "),t.borderColor=e.map((function(e){return e.color})).join(" "),t}}]),r}(n.XFAObject),te=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"break",!0)).after=(0,s.getStringOption)(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]),n.afterTarget=e.afterTarget||"",n.before=(0,s.getStringOption)(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]),n.beforeTarget=e.beforeTarget||"",n.bookendLeader=e.bookendLeader||"",n.bookendTrailer=e.bookendTrailer||"",n.id=e.id||"",n.overflowLeader=e.overflowLeader||"",n.overflowTarget=e.overflowTarget||"",n.overflowTrailer=e.overflowTrailer||"",n.startNew=(0,s.getInteger)({data:e.startNew,defaultValue:0,validate:function(e){return 1===e}}),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r)}(n.XFAObject),re=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"breakAfter",!0)).id=e.id||"",n.leader=e.leader||"",n.startNew=(0,s.getInteger)({data:e.startNew,defaultValue:0,validate:function(e){return 1===e}}),n.target=e.target||"",n.targetType=(0,s.getStringOption)(e.targetType,["auto","contentArea","pageArea"]),n.trailer=e.trailer||"",n.use=e.use||"",n.usehref=e.usehref||"",n.script=null,n}return v(r)}(n.XFAObject),ne=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"breakBefore",!0)).id=e.id||"",n.leader=e.leader||"",n.startNew=(0,s.getInteger)({data:e.startNew,defaultValue:0,validate:function(e){return 1===e}}),n.target=e.target||"",n.targetType=(0,s.getStringOption)(e.targetType,["auto","contentArea","pageArea"]),n.trailer=e.trailer||"",n.use=e.use||"",n.usehref=e.usehref||"",n.script=null,n}return v(r,[{key:n.$toHTML,value:function(e){return this[n.$extra]={},s.HTMLResult.FAILURE}}]),r}(n.XFAObject),ae=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"button",!0)).highlight=(0,s.getStringOption)(e.highlight,["inverted","none","outline","push"]),n.id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t,r=this[n.$getParent]()[n.$getParent](),a={name:"button",attributes:{id:this[n.$uid],class:["xfaButton"],style:{}},children:[]},i=O(r.event.children);try{for(i.s();!(t=i.n()).done;){var c=t.value;if("click"===c.activity&&c.script){var u=(0,l.recoverJsURL)(c.script[n.$content]);if(u){var f=(0,o.fixURL)(u.url);f&&a.children.push({name:"a",attributes:{id:"link"+this[n.$uid],href:f,newWindow:u.newWindow,class:["xfaLink"],style:{}},children:[]})}}}}catch(e){i.e(e)}finally{i.f()}return s.HTMLResult.success(a)}}]),r}(n.XFAObject),ie=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"calculate",!0)).id=e.id||"",n.override=(0,s.getStringOption)(e.override,["disabled","error","ignore","warning"]),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.message=null,n.script=null,n}return v(r)}(n.XFAObject),oe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"caption",!0)).id=e.id||"",n.placement=(0,s.getStringOption)(e.placement,["left","bottom","inline","right","top"]),n.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),n.reserve=Math.ceil((0,s.getMeasurement)(e.reserve)),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.font=null,n.margin=null,n.para=null,n.value=null,n}return v(r,[{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){_(this,e)}))},{key:n.$getExtra,value:function(e){if(!this[n.$extra]){var t=e.width,r=e.height;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":r=this.reserve<=0?r:this.reserve}this[n.$extra]=(0,o.layoutNode)(this,{width:t,height:r})}return this[n.$extra]}},{key:n.$toHTML,value:function(e){if(!this.value)return s.HTMLResult.EMPTY;this[n.$pushPara]();var t=this.value[n.$toHTML](e).html;if(!t)return this[n.$popPara](),s.HTMLResult.EMPTY;var r=this.reserve;if(this.reserve<=0){var a=this[n.$getExtra](e),i=a.w,c=a.h;switch(this.placement){case"left":case"right":case"inline":this.reserve=i;break;case"top":case"bottom":this.reserve=c}}var u=[];"string"==typeof t?u.push({name:"#text",value:t}):u.push(t);var l=(0,o.toStyle)(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(l.width=(0,o.measureToString)(this.reserve));break;case"top":case"bottom":this.reserve>0&&(l.height=(0,o.measureToString)(this.reserve))}return(0,o.setPara)(this,null,t),this[n.$popPara](),this.reserve=r,s.HTMLResult.success({name:"div",attributes:{style:l,class:["xfaCaption"]},children:u})}}]),r}(n.XFAObject),se=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"certificate")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),ce=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"certificates",!0)).credentialServerPolicy=(0,s.getStringOption)(e.credentialServerPolicy,["optional","required"]),n.id=e.id||"",n.url=e.url||"",n.urlPolicy=e.urlPolicy||"",n.use=e.use||"",n.usehref=e.usehref||"",n.encryption=null,n.issuers=null,n.keyUsage=null,n.oids=null,n.signing=null,n.subjectDNs=null,n}return v(r)}(n.XFAObject),ue=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"checkButton",!0)).id=e.id||"",n.mark=(0,s.getStringOption)(e.mark,["default","check","circle","cross","diamond","square","star"]),n.shape=(0,s.getStringOption)(e.shape,["square","round"]),n.size=(0,s.getMeasurement)(e.size,"10pt"),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t,r,a,i=(0,o.toStyle)("margin"),c=(0,o.measureToString)(this.size);i.width=i.height=c;var u,l=this[n.$getParent]()[n.$getParent](),f=l.items.children.length&&l.items.children[0][n.$toHTML]().html||[],h={on:(void 0!==f[0]?f[0]:"on").toString(),off:(void 0!==f[1]?f[1]:"off").toString()},d=(l.value&&l.value[n.$text]()||"off")===h.on||void 0,p=l[n.$getSubformParent](),g=l[n.$uid];p instanceof Re?(a=p[n.$uid],t="radio",r="xfaRadio",u=p[n.$data]&&p[n.$data][n.$uid]||p[n.$uid]):(t="checkbox",r="xfaCheckbox",u=l[n.$data]&&l[n.$data][n.$uid]||l[n.$uid]);var v={name:"input",attributes:{class:[r],style:i,fieldId:g,dataId:u,type:t,checked:d,xfaOn:h.on,xfaOff:h.off,"aria-label":B(l),"aria-required":!1}};return a&&(v.attributes.name=a),R(l)&&(v.attributes["aria-required"]=!0,v.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[v]})}}]),r}(n.XFAObject),le=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"choiceList",!0)).commitOn=(0,s.getStringOption)(e.commitOn,["select","exit"]),n.id=e.id||"",n.open=(0,s.getStringOption)(e.open,["userControl","always","multiSelect","onEntry"]),n.textEntry=(0,s.getInteger)({data:e.textEntry,defaultValue:0,validate:function(e){return 1===e}}),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"border","margin"),r=this[n.$getParent]()[n.$getParent](),a=r.font&&r.font.size||10,i={fontSize:"calc(".concat(a,"px * var(--scale-factor))")},c=[];if(r.items.children.length>0){var u=r.items,l=0,f=0;2===u.children.length&&(f=1-(l=u.children[0].save));for(var h=u.children[l][n.$toHTML]().html,d=u.children[f][n.$toHTML]().html,p=!1,g=r.value&&r.value[n.$text]()||"",v=0,y=h.length;v=0}}),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),de=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"connect",!0)).connection=e.connection||"",n.id=e.id||"",n.ref=e.ref||"",n.usage=(0,s.getStringOption)(e.usage,["exportAndImport","exportOnly","importOnly"]),n.use=e.use||"",n.usehref=e.usehref||"",n.picture=null,n}return v(r)}(n.XFAObject),pe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"contentArea",!0)).h=(0,s.getMeasurement)(e.h),n.id=e.id||"",n.name=e.name||"",n.relevant=(0,s.getRelevant)(e.relevant),n.use=e.use||"",n.usehref=e.usehref||"",n.w=(0,s.getMeasurement)(e.w),n.x=(0,s.getMeasurement)(e.x,"0pt"),n.y=(0,s.getMeasurement)(e.y,"0pt"),n.desc=null,n.extras=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t={left:(0,o.measureToString)(this.x),top:(0,o.measureToString)(this.y),width:(0,o.measureToString)(this.w),height:(0,o.measureToString)(this.h)},r=["xfaContentarea"];return(0,o.isPrintOnly)(this)&&r.push("xfaPrintOnly"),s.HTMLResult.success({name:"div",children:[],attributes:{style:t,class:r,id:this[n.$uid]}})}}]),r}(n.XFAObject),ge=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"corner",!0)).id=e.id||"",n.inverted=(0,s.getInteger)({data:e.inverted,defaultValue:0,validate:function(e){return 1===e}}),n.join=(0,s.getStringOption)(e.join,["square","round"]),n.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),n.radius=(0,s.getMeasurement)(e.radius),n.stroke=(0,s.getStringOption)(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),n.thickness=(0,s.getMeasurement)(e.thickness,"0.5pt"),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"visibility");return e.radius=(0,o.measureToString)("square"===this.join?0:this.radius),e}}]),r}(n.XFAObject),ve=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"date")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}},{key:n.$toHTML,value:function(e){return U(this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),ye=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"dateTime")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}},{key:n.$toHTML,value:function(e){return U(this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),me=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"dateTimeEdit",!0)).hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.picker=(0,s.getStringOption)(e.picker,["host","none"]),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.comb=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"border","font","margin"),r=this[n.$getParent]()[n.$getParent](),a={name:"input",attributes:{type:"text",fieldId:r[n.$uid],dataId:r[n.$data]&&r[n.$data][n.$uid]||r[n.$uid],class:["xfaTextfield"],style:t,"aria-label":B(r),"aria-required":!1}};return R(r)&&(a.attributes["aria-required"]=!0,a.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}]),r}(n.XFAObject),be=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"decimal")).fracDigits=(0,s.getInteger)({data:e.fracDigits,defaultValue:2,validate:function(e){return!0}}),n.id=e.id||"",n.leadDigits=(0,s.getInteger)({data:e.leadDigits,defaultValue:-1,validate:function(e){return!0}}),n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=parseFloat(this[n.$content].trim());this[n.$content]=isNaN(e)?null:e}},{key:n.$toHTML,value:function(e){return U(null!==this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),we=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"defaultUi",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r)}(n.XFAObject),ke=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"desc",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Se=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"])).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.OptionObject),xe=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"digestMethods",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.digestMethod=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Oe=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"draw",!0)).anchorType=(0,s.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),a.colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.locale=e.locale||"",a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.rotate=(0,s.getInteger)({data:e.rotate,defaultValue:0,validate:function(e){return e%90==0}}),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.border=null,a.caption=null,a.desc=null,a.extras=null,a.font=null,a.keep=null,a.margin=null,a.para=null,a.traversal=null,a.ui=null,a.value=null,a.setProperty=new n.XFAObjectArray,a}return v(r,[{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){_(this,e)}))},{key:n.$toHTML,value:function(e){if(N(this),"hidden"===this.presence||"inactive"===this.presence)return s.HTMLResult.EMPTY;(0,o.fixDimensions)(this),this[n.$pushPara]();var t=this.w,r=this.h,a=(0,o.layoutNode)(this,e),c=a.w,u=a.h,l=a.isBroken;if(c&&""===this.w){if(l&&this[n.$getSubformParent]()[n.$isThereMoreWidth]())return this[n.$popPara](),s.HTMLResult.FAILURE;this.w=c}if(u&&""===this.h&&(this.h=u),$(this),!(0,i.checkDimensions)(this,e))return this.w=t,this.h=r,this[n.$popPara](),s.HTMLResult.FAILURE;X(this);var f=(0,o.toStyle)(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");(0,o.setMinMaxDimensions)(this,f),f.margin&&(f.padding=f.margin,delete f.margin);var h=["xfaDraw"];this.font&&h.push("xfaFont"),(0,o.isPrintOnly)(this)&&h.push("xfaPrintOnly");var d={style:f,id:this[n.$uid],class:h};this.name&&(d.xfaName=this.name);var p={name:"div",attributes:d,children:[]};D(this,d);var g=(0,o.computeBbox)(this,p,e),v=this.value?this.value[n.$toHTML](e).html:null;return null===v?(this.w=t,this.h=r,this[n.$popPara](),s.HTMLResult.success((0,o.createWrapper)(this,p),g)):(p.children.push(v),(0,o.setPara)(this,f,v),this.w=t,this.h=r,this[n.$popPara](),s.HTMLResult.success((0,o.createWrapper)(this,p),g))}}]),r}(n.XFAObject),Ae=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"edge",!0)).cap=(0,s.getStringOption)(e.cap,["square","butt","round"]),n.id=e.id||"",n.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),n.stroke=(0,s.getStringOption)(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),n.thickness=(0,s.getMeasurement)(e.thickness,"0.5pt"),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"visibility");if(Object.assign(e,{linecap:this.cap,width:(0,o.measureToString)(this.thickness),color:this.color?this.color[n.$toStyle]():"#000000",style:""}),"visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}]),r}(n.XFAObject),Ce=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"])).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.OptionObject),Fe=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"encodings",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.encoding=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Pe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encrypt",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.certificate=null,n}return v(r)}(n.XFAObject),Te=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encryptData",!0)).id=e.id||"",n.operation=(0,s.getStringOption)(e.operation,["encrypt","decrypt"]),n.target=e.target||"",n.use=e.use||"",n.usehref=e.usehref||"",n.filter=null,n.manifest=null,n}return v(r)}(n.XFAObject),Ie=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"encryption",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.certificate=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Ee=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"])).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.OptionObject),je=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"encryptionMethods",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.encryptionMethod=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Me=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"event",!0)).activity=(0,s.getStringOption)(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]),n.id=e.id||"",n.listen=(0,s.getStringOption)(e.listen,["refOnly","refAndDescendents"]),n.name=e.name||"",n.ref=e.ref||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.encryptData=null,n.execute=null,n.script=null,n.signData=null,n.submit=null,n}return v(r)}(n.XFAObject),_e=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"exData")).contentType=e.contentType||"",n.href=e.href||"",n.id=e.id||"",n.maxLength=(0,s.getInteger)({data:e.maxLength,defaultValue:-1,validate:function(e){return e>=-1}}),n.name=e.name||"",n.rid=e.rid||"",n.transferEncoding=(0,s.getStringOption)(e.transferEncoding,["none","base64","package"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$isCDATAXml,value:function(){return"text/html"===this.contentType}},{key:n.$onChild,value:function(e){return("text/html"===this.contentType&&e[n.$namespaceId]===a.NamespaceIds.xhtml.id||"text/xml"===this.contentType)&&(this[n.$content]=e,!0)}},{key:n.$toHTML,value:function(e){return"text/html"===this.contentType&&this[n.$content]?this[n.$content][n.$toHTML](e):s.HTMLResult.EMPTY}}]),r}(n.ContentObject),Le=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"exObject",!0)).archive=e.archive||"",a.classId=e.classId||"",a.codeBase=e.codeBase||"",a.codeType=e.codeType||"",a.id=e.id||"",a.name=e.name||"",a.use=e.use||"",a.usehref=e.usehref||"",a.extras=null,a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Re=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"exclGroup",!0)).access=(0,s.getStringOption)(e.access,["open","nonInteractive","protected","readOnly"]),a.accessKey=e.accessKey||"",a.anchorType=(0,s.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),a.colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.layout=(0,s.getStringOption)(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.bind=null,a.border=null,a.calculate=null,a.caption=null,a.desc=null,a.extras=null,a.margin=null,a.para=null,a.traversal=null,a.validate=null,a.connect=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a}return v(r,[{key:n.$isBindable,value:function(){return!0}},{key:n.$hasSettableValue,value:function(){return!0}},{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){var t,r=O(this.field.children);try{for(r.s();!(t=r.n()).done;){var a=t.value;if(!a.value){var i=new Vt({});a[n.$appendChild](i),a.value=i}a.value[n.$setValue](e)}}catch(e){r.e(e)}finally{r.f()}}))},{key:n.$isThereMoreWidth,value:function(){return this.layout.endsWith("-tb")&&0===this[n.$extra].attempt&&this[n.$extra].numberInLine>0||this[n.$getParent]()[n.$isThereMoreWidth]()}},{key:n.$isSplittable,value:function(){var e=this[n.$getSubformParent]();return!!e[n.$isSplittable]()&&(void 0!==this[n.$extra]._isSplittable?this[n.$extra]._isSplittable:"position"===this.layout||this.layout.includes("row")?(this[n.$extra]._isSplittable=!1,!1):!(e.layout&&e.layout.endsWith("-tb")&&0!==e[n.$extra].numberInLine||(this[n.$extra]._isSplittable=!0,0)))}},{key:n.$flushHTML,value:function(){return(0,i.flushHTML)(this)}},{key:n.$addHTML,value:function(e,t){(0,i.addHTML)(this,e,t)}},{key:n.$getAvailableSpace,value:function(){return(0,i.getAvailableSpace)(this)}},{key:n.$toHTML,value:function(e){if(N(this),"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return s.HTMLResult.EMPTY;(0,o.fixDimensions)(this);var t=[],r={id:this[n.$uid],class:[]};(0,o.setAccess)(this,r.class),this[n.$extra]||(this[n.$extra]=Object.create(null)),Object.assign(this[n.$extra],{children:t,attributes:r,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});var a=this[n.$isSplittable]();if(a||$(this),!(0,i.checkDimensions)(this,e))return s.HTMLResult.FAILURE;var c=new Set(["field"]);if(this.layout.includes("row")){var u=this[n.$getSubformParent]().columnWidths;Array.isArray(u)&&u.length>0&&(this[n.$extra].columnWidths=u,this[n.$extra].currentColumn=0)}var l=(0,o.toStyle)(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),f=["xfaExclgroup"],h=(0,o.layoutClass)(this);h&&f.push(h),(0,o.isPrintOnly)(this)&&f.push("xfaPrintOnly"),r.style=l,r.class=f,this.name&&(r.xfaName=this.name),this[n.$pushPara]();for(var d="lr-tb"===this.layout||"rl-tb"===this.layout,p=d?2:1;this[n.$extra].attempt=1||-1===e}}),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.locale=e.locale||"",a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.rotate=(0,s.getInteger)({data:e.rotate,defaultValue:0,validate:function(e){return e%90==0}}),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.bind=null,a.border=null,a.calculate=null,a.caption=null,a.desc=null,a.extras=null,a.font=null,a.format=null,a.items=new n.XFAObjectArray(2),a.keep=null,a.margin=null,a.para=null,a.traversal=null,a.ui=null,a.validate=null,a.value=null,a.bindItems=new n.XFAObjectArray,a.connect=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a}return v(r,[{key:n.$isBindable,value:function(){return!0}},{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){_(this,e)}))},{key:n.$toHTML,value:function(e){if(N(this),!this.ui){var t;switch(this.ui=new zt({}),this.ui[n.$globalData]=this[n.$globalData],this[n.$appendChild](this.ui),this.items.children.length){case 0:t=new Ut({}),this.ui.textEdit=t;break;case 1:t=new ue({}),this.ui.checkButton=t;break;case 2:t=new le({}),this.ui.choiceList=t}this.ui[n.$appendChild](t)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return s.HTMLResult.EMPTY;this.caption&&delete this.caption[n.$extra],this[n.$pushPara]();var r=this.caption?this.caption[n.$toHTML](e).html:null,a=this.w,c=this.h,l=0,f=0;this.margin&&(l=this.margin.leftInset+this.margin.rightInset,f=this.margin.topInset+this.margin.bottomInset);var h=null;if(""===this.w||""===this.h){var d=null,g=null,v=0,y=0;if(this.ui.checkButton)v=y=this.ui.checkButton.size;else{var m=(0,o.layoutNode)(this,e),b=m.w,w=m.h;null!==b?(v=b,y=w):y=(0,u.getMetrics)(this.font,!0).lineNoGap}if(v+=(h=j(this.ui[n.$getExtra]())).w,y+=h.h,this.caption){var k=this.caption[n.$getExtra](e),S=k.w,x=k.h;if(k.isBroken&&this[n.$getSubformParent]()[n.$isThereMoreWidth]())return this[n.$popPara](),s.HTMLResult.FAILURE;switch(d=S,g=x,this.caption.placement){case"left":case"right":case"inline":d+=v;break;case"top":case"bottom":g+=y}}else d=v,g=y;d&&""===this.w&&(d+=l,this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1=1&&e<=5}}),n.appearanceFilter=null,n.certificates=null,n.digestMethods=null,n.encodings=null,n.encryptionMethods=null,n.handler=null,n.lockDocument=null,n.mdp=null,n.reasons=null,n.timeStamp=null,n}return v(r)}(n.XFAObject),Xe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"float")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=parseFloat(this[n.$content].trim());this[n.$content]=isNaN(e)?null:e}},{key:n.$toHTML,value:function(e){return U(null!==this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),He=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"font",!0)).baselineShift=(0,s.getMeasurement)(e.baselineShift),n.fontHorizontalScale=(0,s.getFloat)({data:e.fontHorizontalScale,defaultValue:100,validate:function(e){return e>=0}}),n.fontVerticalScale=(0,s.getFloat)({data:e.fontVerticalScale,defaultValue:100,validate:function(e){return e>=0}}),n.id=e.id||"",n.kerningMode=(0,s.getStringOption)(e.kerningMode,["none","pair"]),n.letterSpacing=(0,s.getMeasurement)(e.letterSpacing,"0"),n.lineThrough=(0,s.getInteger)({data:e.lineThrough,defaultValue:0,validate:function(e){return 1===e||2===e}}),n.lineThroughPeriod=(0,s.getStringOption)(e.lineThroughPeriod,["all","word"]),n.overline=(0,s.getInteger)({data:e.overline,defaultValue:0,validate:function(e){return 1===e||2===e}}),n.overlinePeriod=(0,s.getStringOption)(e.overlinePeriod,["all","word"]),n.posture=(0,s.getStringOption)(e.posture,["normal","italic"]),n.size=(0,s.getMeasurement)(e.size,"10pt"),n.typeface=e.typeface||"Courier",n.underline=(0,s.getInteger)({data:e.underline,defaultValue:0,validate:function(e){return 1===e||2===e}}),n.underlinePeriod=(0,s.getStringOption)(e.underlinePeriod,["all","word"]),n.use=e.use||"",n.usehref=e.usehref||"",n.weight=(0,s.getStringOption)(e.weight,["normal","bold"]),n.extras=null,n.fill=null,n}return v(r,[{key:n.$clean,value:function(e){d(k(r.prototype),n.$clean,this).call(this,e),this[n.$globalData].usedTypefaces.add(this.typeface)}},{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"fill"),t=e.color;return t&&("#000000"===t?delete e.color:t.startsWith("#")||(e.background=t,e.backgroundClip="text",e.color="transparent")),this.baselineShift&&(e.verticalAlign=(0,o.measureToString)(this.baselineShift)),e.fontKerning="none"===this.kerningMode?"none":"normal",e.letterSpacing=(0,o.measureToString)(this.letterSpacing),0!==this.lineThrough&&(e.textDecoration="line-through",2===this.lineThrough&&(e.textDecorationStyle="double")),0!==this.overline&&(e.textDecoration="overline",2===this.overline&&(e.textDecorationStyle="double")),e.fontStyle=this.posture,e.fontSize=(0,o.measureToString)(.99*this.size),(0,o.setFontFamily)(this,this,this[n.$globalData].fontFinder,e),0!==this.underline&&(e.textDecoration="underline",2===this.underline&&(e.textDecorationStyle="double")),e.fontWeight=this.weight,e}}]),r}(n.XFAObject),qe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"format",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.picture=null,n}return v(r)}(n.XFAObject),Ge=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"handler")).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),ze=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"hyphenation")).excludeAllCaps=(0,s.getInteger)({data:e.excludeAllCaps,defaultValue:0,validate:function(e){return 1===e}}),n.excludeInitialCap=(0,s.getInteger)({data:e.excludeInitialCap,defaultValue:0,validate:function(e){return 1===e}}),n.hyphenate=(0,s.getInteger)({data:e.hyphenate,defaultValue:0,validate:function(e){return 1===e}}),n.id=e.id||"",n.pushCharacterCount=(0,s.getInteger)({data:e.pushCharacterCount,defaultValue:3,validate:function(e){return e>=0}}),n.remainCharacterCount=(0,s.getInteger)({data:e.remainCharacterCount,defaultValue:3,validate:function(e){return e>=0}}),n.use=e.use||"",n.usehref=e.usehref||"",n.wordCharacterCount=(0,s.getInteger)({data:e.wordCharacterCount,defaultValue:7,validate:function(e){return e>=0}}),n}return v(r)}(n.XFAObject),We=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"image")).aspect=(0,s.getStringOption)(e.aspect,["fit","actual","height","none","width"]),n.contentType=e.contentType||"",n.href=e.href||"",n.id=e.id||"",n.name=e.name||"",n.transferEncoding=(0,s.getStringOption)(e.transferEncoding,["base64","none","package"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$toHTML,value:function(){if(this.contentType&&!I.has(this.contentType.toLowerCase()))return s.HTMLResult.EMPTY;var e=this[n.$globalData].images&&this[n.$globalData].images.get(this.href);if(!e&&(this.href||!this[n.$content]))return s.HTMLResult.EMPTY;if(e||"base64"!==this.transferEncoding||(e=(0,c.stringToBytes)(atob(this[n.$content]))),!e)return s.HTMLResult.EMPTY;if(!this.contentType){for(var t=0,r=E;ti.length&&i.every((function(t,r){return t===e[r]}))){this.contentType=o;break}}if(!this.contentType)return s.HTMLResult.EMPTY}var u,l=new Blob([e],{type:this.contentType});switch(this.aspect){case"fit":case"actual":break;case"height":u={height:"100%",objectFit:"fill"};break;case"none":u={width:"100%",height:"100%",objectFit:"fill"};break;case"width":u={width:"100%",objectFit:"fill"}}var f=this[n.$getParent]();return s.HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:u,src:URL.createObjectURL(l),alt:f?B(f[n.$getParent]()):null}})}}]),r}(n.StringObject),Ve=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"imageEdit",!0)).data=(0,s.getStringOption)(e.data,["link","embed"]),n.id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){return"embed"===this.data?s.HTMLResult.success({name:"div",children:[],attributes:{}}):s.HTMLResult.EMPTY}}]),r}(n.XFAObject),Ye=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"integer")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=parseInt(this[n.$content].trim(),10);this[n.$content]=isNaN(e)?null:e}},{key:n.$toHTML,value:function(e){return U(null!==this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),Ke=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"issuers",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.certificate=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Je=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"items",!0)).id=e.id||"",a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.ref=e.ref||"",a.save=(0,s.getInteger)({data:e.save,defaultValue:0,validate:function(e){return 1===e}}),a.use=e.use||"",a.usehref=e.usehref||"",a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r,[{key:n.$toHTML,value:function(){var e,t=[],r=O(this[n.$getChildren]());try{for(r.s();!(e=r.n()).done;){var a=e.value;t.push(a[n.$text]())}}catch(e){r.e(e)}finally{r.f()}return s.HTMLResult.success(t)}}]),r}(n.XFAObject);t.Items=Je;var Ze=function(e){m(r,e);var t=w(r);function r(e){var n;y(this,r),(n=t.call(this,F,"keep",!0)).id=e.id||"";var a=["none","contentArea","pageArea"];return n.intact=(0,s.getStringOption)(e.intact,a),n.next=(0,s.getStringOption)(e.next,a),n.previous=(0,s.getStringOption)(e.previous,a),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r)}(n.XFAObject),Qe=function(e){m(r,e);var t=w(r);function r(e){var n;y(this,r);var a=["","yes","no"];return(n=t.call(this,F,"keyUsage")).crlSign=(0,s.getStringOption)(e.crlSign,a),n.dataEncipherment=(0,s.getStringOption)(e.dataEncipherment,a),n.decipherOnly=(0,s.getStringOption)(e.decipherOnly,a),n.digitalSignature=(0,s.getStringOption)(e.digitalSignature,a),n.encipherOnly=(0,s.getStringOption)(e.encipherOnly,a),n.id=e.id||"",n.keyAgreement=(0,s.getStringOption)(e.keyAgreement,a),n.keyCertSign=(0,s.getStringOption)(e.keyCertSign,a),n.keyEncipherment=(0,s.getStringOption)(e.keyEncipherment,a),n.nonRepudiation=(0,s.getStringOption)(e.nonRepudiation,a),n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),et=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"line",!0)).hand=(0,s.getStringOption)(e.hand,["even","left","right"]),n.id=e.id||"",n.slope=(0,s.getStringOption)(e.slope,["\\\\","/"]),n.use=e.use||"",n.usehref=e.usehref||"",n.edge=null,n}return v(r,[{key:n.$toHTML,value:function(){var e,t,r,a,i=this[n.$getParent]()[n.$getParent](),c=this.edge||new Ae({}),u=c[n.$toStyle](),l=Object.create(null),f="visible"===c.presence?c.thickness:0;l.strokeWidth=(0,o.measureToString)(f),l.stroke=u.color;var h="100%",d="100%";i.w<=f?(e="50%",t=0,r="50%",a="100%",h=l.strokeWidth):i.h<=f?(e=0,t="50%",r="100%",a="50%",d=l.strokeWidth):"\\\\"===this.slope?(e=0,t=0,r="100%",a="100%"):(e=0,t="100%",r="100%",a=0);var p={name:"svg",children:[{name:"line",attributes:{xmlns:P,x1:e,y1:t,x2:r,y2:a,style:l}}],attributes:{xmlns:P,width:h,height:d,style:{overflow:"visible"}}};return M(i)?s.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[p]}):(p.attributes.style.position="absolute",s.HTMLResult.success(p))}}]),r}(n.XFAObject),tt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"linear",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["toRight","toBottom","toLeft","toTop"]),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){e=e?e[n.$toStyle]():"#FFFFFF";var t=this.type.replace(/([RBLT])/," $1").toLowerCase(),r=this.color?this.color[n.$toStyle]():"#000000";return"linear-gradient(".concat(t,", ").concat(e,", ").concat(r,")")}}]),r}(n.XFAObject),rt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"lockDocument")).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){this[n.$content]=(0,s.getStringOption)(this[n.$content],["auto","0","1"])}}]),r}(n.ContentObject),nt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"manifest",!0)).action=(0,s.getStringOption)(e.action,["include","all","exclude"]),a.id=e.id||"",a.name=e.name||"",a.use=e.use||"",a.usehref=e.usehref||"",a.extras=null,a.ref=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),at=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"margin",!0)).bottomInset=(0,s.getMeasurement)(e.bottomInset,"0"),n.id=e.id||"",n.leftInset=(0,s.getMeasurement)(e.leftInset,"0"),n.rightInset=(0,s.getMeasurement)(e.rightInset,"0"),n.topInset=(0,s.getMeasurement)(e.topInset,"0"),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(){return{margin:(0,o.measureToString)(this.topInset)+" "+(0,o.measureToString)(this.rightInset)+" "+(0,o.measureToString)(this.bottomInset)+" "+(0,o.measureToString)(this.leftInset)}}}]),r}(n.XFAObject),it=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"mdp")).id=e.id||"",n.permissions=(0,s.getInteger)({data:e.permissions,defaultValue:2,validate:function(e){return 1===e||3===e}}),n.signatureType=(0,s.getStringOption)(e.signatureType,["filler","author"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),ot=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"medium")).id=e.id||"",n.imagingBBox=(0,s.getBBox)(e.imagingBBox),n.long=(0,s.getMeasurement)(e.long),n.orientation=(0,s.getStringOption)(e.orientation,["portrait","landscape"]),n.short=(0,s.getMeasurement)(e.short),n.stock=e.stock||"",n.trayIn=(0,s.getStringOption)(e.trayIn,["auto","delegate","pageFront"]),n.trayOut=(0,s.getStringOption)(e.trayOut,["auto","delegate"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),st=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"message",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.text=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),ct=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"numericEdit",!0)).hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.comb=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"border","font","margin"),r=this[n.$getParent]()[n.$getParent](),a={name:"input",attributes:{type:"text",fieldId:r[n.$uid],dataId:r[n.$data]&&r[n.$data][n.$uid]||r[n.$uid],class:["xfaTextfield"],style:t,"aria-label":B(r),"aria-required":!1}};return R(r)&&(a.attributes["aria-required"]=!0,a.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}]),r}(n.XFAObject),ut=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"occur",!0)).id=e.id||"",n.initial=""!==e.initial?(0,s.getInteger)({data:e.initial,defaultValue:"",validate:function(e){return!0}}):"",n.max=""!==e.max?(0,s.getInteger)({data:e.max,defaultValue:1,validate:function(e){return!0}}):"",n.min=""!==e.min?(0,s.getInteger)({data:e.min,defaultValue:1,validate:function(e){return!0}}):"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$clean,value:function(){var e=this[n.$getParent](),t=this.min;""===this.min&&(this.min=e instanceof dt||e instanceof pt?0:1),""===this.max&&(this.max=""===t?e instanceof dt||e instanceof pt?-1:1:this.min),-1!==this.max&&this.max=0}}),n.preserve=e.preserve||"",n.radixOffset=e.radixOffset?(0,s.getMeasurement)(e.radixOffset,"0pt"):"",n.spaceAbove=e.spaceAbove?(0,s.getMeasurement)(e.spaceAbove,"0pt"):"",n.spaceBelow=e.spaceBelow?(0,s.getMeasurement)(e.spaceBelow,"0pt"):"",n.tabDefault=e.tabDefault?(0,s.getMeasurement)(n.tabDefault):"",n.tabStops=(e.tabStops||"").trim().split(/\\s+/).map((function(e,t){return t%2==1?(0,s.getMeasurement)(e):e})),n.textIndent=e.textIndent?(0,s.getMeasurement)(e.textIndent,"0pt"):"",n.use=e.use||"",n.usehref=e.usehref||"",n.vAlign=(0,s.getStringOption)(e.vAlign,["top","bottom","middle"]),n.widows=(0,s.getInteger)({data:e.widows,defaultValue:0,validate:function(e){return e>=0}}),n.hyphenation=null,n}return v(r,[{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"hAlign");return""!==this.marginLeft&&(e.paddingLeft=(0,o.measureToString)(this.marginLeft)),""!==this.marginRight&&(e.paddingight=(0,o.measureToString)(this.marginRight)),""!==this.spaceAbove&&(e.paddingTop=(0,o.measureToString)(this.spaceAbove)),""!==this.spaceBelow&&(e.paddingBottom=(0,o.measureToString)(this.spaceBelow)),""!==this.textIndent&&(e.textIndent=(0,o.measureToString)(this.textIndent),(0,o.fixTextIndent)(e)),this.lineHeight>0&&(e.lineHeight=(0,o.measureToString)(this.lineHeight)),""!==this.tabDefault&&(e.tabSize=(0,o.measureToString)(this.tabDefault)),this.tabStops.length,this.hyphenatation&&Object.assign(e,this.hyphenatation[n.$toStyle]()),e}}]),r}(n.XFAObject),vt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"passwordEdit",!0)).hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.passwordChar=e.passwordChar||"*",n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r)}(n.XFAObject),yt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"pattern",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){e=e?e[n.$toStyle]():"#FFFFFF";var t=this.color?this.color[n.$toStyle]():"#000000",r="repeating-linear-gradient",a="".concat(e,",").concat(e," ").concat(5,"px,").concat(t," ").concat(5,"px,").concat(t," ").concat(10,"px");switch(this.type){case"crossHatch":return"".concat(r,"(to top,").concat(a,") ").concat(r,"(to right,").concat(a,")");case"crossDiagonal":return"".concat(r,"(45deg,").concat(a,") ").concat(r,"(-45deg,").concat(a,")");case"diagonalLeft":return"".concat(r,"(45deg,").concat(a,")");case"diagonalRight":return"".concat(r,"(-45deg,").concat(a,")");case"horizontal":return"".concat(r,"(to top,").concat(a,")");case"vertical":return"".concat(r,"(to right,").concat(a,")")}return""}}]),r}(n.XFAObject),mt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"picture")).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),bt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"proto",!0)).appearanceFilter=new n.XFAObjectArray,a.arc=new n.XFAObjectArray,a.area=new n.XFAObjectArray,a.assist=new n.XFAObjectArray,a.barcode=new n.XFAObjectArray,a.bindItems=new n.XFAObjectArray,a.bookend=new n.XFAObjectArray,a.boolean=new n.XFAObjectArray,a.border=new n.XFAObjectArray,a.break=new n.XFAObjectArray,a.breakAfter=new n.XFAObjectArray,a.breakBefore=new n.XFAObjectArray,a.button=new n.XFAObjectArray,a.calculate=new n.XFAObjectArray,a.caption=new n.XFAObjectArray,a.certificate=new n.XFAObjectArray,a.certificates=new n.XFAObjectArray,a.checkButton=new n.XFAObjectArray,a.choiceList=new n.XFAObjectArray,a.color=new n.XFAObjectArray,a.comb=new n.XFAObjectArray,a.connect=new n.XFAObjectArray,a.contentArea=new n.XFAObjectArray,a.corner=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.dateTimeEdit=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.defaultUi=new n.XFAObjectArray,a.desc=new n.XFAObjectArray,a.digestMethod=new n.XFAObjectArray,a.digestMethods=new n.XFAObjectArray,a.draw=new n.XFAObjectArray,a.edge=new n.XFAObjectArray,a.encoding=new n.XFAObjectArray,a.encodings=new n.XFAObjectArray,a.encrypt=new n.XFAObjectArray,a.encryptData=new n.XFAObjectArray,a.encryption=new n.XFAObjectArray,a.encryptionMethod=new n.XFAObjectArray,a.encryptionMethods=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.exclGroup=new n.XFAObjectArray,a.execute=new n.XFAObjectArray,a.extras=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.fill=new n.XFAObjectArray,a.filter=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.font=new n.XFAObjectArray,a.format=new n.XFAObjectArray,a.handler=new n.XFAObjectArray,a.hyphenation=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.imageEdit=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.issuers=new n.XFAObjectArray,a.items=new n.XFAObjectArray,a.keep=new n.XFAObjectArray,a.keyUsage=new n.XFAObjectArray,a.line=new n.XFAObjectArray,a.linear=new n.XFAObjectArray,a.lockDocument=new n.XFAObjectArray,a.manifest=new n.XFAObjectArray,a.margin=new n.XFAObjectArray,a.mdp=new n.XFAObjectArray,a.medium=new n.XFAObjectArray,a.message=new n.XFAObjectArray,a.numericEdit=new n.XFAObjectArray,a.occur=new n.XFAObjectArray,a.oid=new n.XFAObjectArray,a.oids=new n.XFAObjectArray,a.overflow=new n.XFAObjectArray,a.pageArea=new n.XFAObjectArray,a.pageSet=new n.XFAObjectArray,a.para=new n.XFAObjectArray,a.passwordEdit=new n.XFAObjectArray,a.pattern=new n.XFAObjectArray,a.picture=new n.XFAObjectArray,a.radial=new n.XFAObjectArray,a.reason=new n.XFAObjectArray,a.reasons=new n.XFAObjectArray,a.rectangle=new n.XFAObjectArray,a.ref=new n.XFAObjectArray,a.script=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a.signData=new n.XFAObjectArray,a.signature=new n.XFAObjectArray,a.signing=new n.XFAObjectArray,a.solid=new n.XFAObjectArray,a.speak=new n.XFAObjectArray,a.stipple=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a.subjectDN=new n.XFAObjectArray,a.subjectDNs=new n.XFAObjectArray,a.submit=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.textEdit=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a.timeStamp=new n.XFAObjectArray,a.toolTip=new n.XFAObjectArray,a.traversal=new n.XFAObjectArray,a.traverse=new n.XFAObjectArray,a.ui=new n.XFAObjectArray,a.validate=new n.XFAObjectArray,a.value=new n.XFAObjectArray,a.variables=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),wt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"radial",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["toEdge","toCenter"]),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){e=e?e[n.$toStyle]():"#FFFFFF";var t=this.color?this.color[n.$toStyle]():"#000000",r="toEdge"===this.type?"".concat(e,",").concat(t):"".concat(t,",").concat(e);return"radial-gradient(circle at center, ".concat(r,")")}}]),r}(n.XFAObject),kt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"reason")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),St=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"reasons",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.reason=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),xt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"rectangle",!0)).hand=(0,s.getStringOption)(e.hand,["even","left","right"]),a.id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.corner=new n.XFAObjectArray(4),a.edge=new n.XFAObjectArray(4),a.fill=null,a}return v(r,[{key:n.$toHTML,value:function(){var e=this.edge.children.length?this.edge.children[0]:new Ae({}),t=e[n.$toStyle](),r=Object.create(null);this.fill&&"visible"===this.fill.presence?Object.assign(r,this.fill[n.$toStyle]()):r.fill="transparent",r.strokeWidth=(0,o.measureToString)("visible"===e.presence?e.thickness:0),r.stroke=t.color;var a=(this.corner.children.length?this.corner.children[0]:new ge({}))[n.$toStyle](),i={name:"svg",children:[{name:"rect",attributes:{xmlns:P,width:"100%",height:"100%",x:0,y:0,rx:a.radius,ry:a.radius,style:r}}],attributes:{xmlns:P,style:{overflow:"visible"},width:"100%",height:"100%"}};return M(this[n.$getParent]()[n.$getParent]())?s.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[i]}):(i.attributes.style.position="absolute",s.HTMLResult.success(i))}}]),r}(n.XFAObject),Ot=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"ref")).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),At=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"script")).binding=e.binding||"",n.contentType=e.contentType||"",n.id=e.id||"",n.name=e.name||"",n.runAt=(0,s.getStringOption)(e.runAt,["client","both","server"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),Ct=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"setProperty")).connection=e.connection||"",n.ref=e.ref||"",n.target=e.target||"",n}return v(r)}(n.XFAObject);t.SetProperty=Ct;var Ft=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"signData",!0)).id=e.id||"",n.operation=(0,s.getStringOption)(e.operation,["sign","clear","verify"]),n.ref=e.ref||"",n.target=e.target||"",n.use=e.use||"",n.usehref=e.usehref||"",n.filter=null,n.manifest=null,n}return v(r)}(n.XFAObject),Pt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"signature",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["PDF1.3","PDF1.6"]),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.filter=null,n.manifest=null,n.margin=null,n}return v(r)}(n.XFAObject),Tt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"signing",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.certificate=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),It=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"solid",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){return e?e[n.$toStyle]():"#FFFFFF"}}]),r}(n.XFAObject),Et=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"speak")).disable=(0,s.getInteger)({data:e.disable,defaultValue:0,validate:function(e){return 1===e}}),n.id=e.id||"",n.priority=(0,s.getStringOption)(e.priority,["custom","caption","name","toolTip"]),n.rid=e.rid||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),jt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"stipple",!0)).id=e.id||"",n.rate=(0,s.getInteger)({data:e.rate,defaultValue:50,validate:function(e){return e>=0&&e<=100}}),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){var t=this.rate/100;return c.Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}]),r}(n.XFAObject),Mt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"subform",!0)).access=(0,s.getStringOption)(e.access,["open","nonInteractive","protected","readOnly"]),a.allowMacro=(0,s.getInteger)({data:e.allowMacro,defaultValue:0,validate:function(e){return 1===e}}),a.anchorType=(0,s.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),a.colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.columnWidths=(e.columnWidths||"").trim().split(/\\s+/).map((function(e){return"-1"===e?-1:(0,s.getMeasurement)(e)})),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.layout=(0,s.getStringOption)(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),a.locale=e.locale||"",a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.mergeMode=(0,s.getStringOption)(e.mergeMode,["consumeData","matchTemplate"]),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.restoreState=(0,s.getStringOption)(e.restoreState,["manual","auto"]),a.scope=(0,s.getStringOption)(e.scope,["name","none"]),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.bind=null,a.bookend=null,a.border=null,a.break=null,a.calculate=null,a.desc=null,a.extras=null,a.keep=null,a.margin=null,a.occur=null,a.overflow=null,a.pageSet=null,a.para=null,a.traversal=null,a.validate=null,a.variables=null,a.area=new n.XFAObjectArray,a.breakAfter=new n.XFAObjectArray,a.breakBefore=new n.XFAObjectArray,a.connect=new n.XFAObjectArray,a.draw=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.exclGroup=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.proto=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a}return v(r,[{key:n.$getSubformParent,value:function(){var e=this[n.$getParent]();return e instanceof _t?e[n.$getSubformParent]():e}},{key:n.$isBindable,value:function(){return!0}},{key:n.$isThereMoreWidth,value:function(){return this.layout.endsWith("-tb")&&0===this[n.$extra].attempt&&this[n.$extra].numberInLine>0||this[n.$getParent]()[n.$isThereMoreWidth]()}},{key:n.$getContainedChildren,value:S().mark((function e(){return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(L(this),"t0",1);case 1:case"end":return e.stop()}}),e,this)}))},{key:n.$flushHTML,value:function(){return(0,i.flushHTML)(this)}},{key:n.$addHTML,value:function(e,t){(0,i.addHTML)(this,e,t)}},{key:n.$getAvailableSpace,value:function(){return(0,i.getAvailableSpace)(this)}},{key:n.$isSplittable,value:function(){var e=this[n.$getSubformParent]();return!!e[n.$isSplittable]()&&(void 0!==this[n.$extra]._isSplittable?this[n.$extra]._isSplittable:"position"===this.layout||this.layout.includes("row")||this.keep&&"none"!==this.keep.intact?(this[n.$extra]._isSplittable=!1,!1):!(e.layout&&e.layout.endsWith("-tb")&&0!==e[n.$extra].numberInLine||(this[n.$extra]._isSplittable=!0,0)))}},{key:n.$toHTML,value:function(e){if(N(this),this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){var t=new re({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});t[n.$globalData]=this[n.$globalData],this[n.$appendChild](t),this.breakAfter.push(t)}if("auto"!==this.break.before||""!==this.break.beforeTarget){var r=new ne({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});r[n.$globalData]=this[n.$globalData],this[n.$appendChild](r),this.breakBefore.push(r)}if(""!==this.break.overflowTarget){var a=new ht({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});a[n.$globalData]=this[n.$globalData],this[n.$appendChild](a),this.overflow.push(a)}this[n.$removeChild](this.break),this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return s.HTMLResult.EMPTY;if((this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&(0,c.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug."),this.breakBefore.children.length>=1){var u=this.breakBefore.children[0];if(H(u))return s.HTMLResult.breakNode(u)}if(this[n.$extra]&&this[n.$extra].afterBreakAfter)return s.HTMLResult.EMPTY;(0,o.fixDimensions)(this);var l=[],f={id:this[n.$uid],class:[]};(0,o.setAccess)(this,f.class),this[n.$extra]||(this[n.$extra]=Object.create(null)),Object.assign(this[n.$extra],{children:l,line:null,attributes:f,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});var h=this[n.$getTemplateRoot](),d=h[n.$extra].noLayoutFailure,p=this[n.$isSplittable]();if(p||$(this),!(0,i.checkDimensions)(this,e))return s.HTMLResult.FAILURE;var g=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){var v=this[n.$getSubformParent]().columnWidths;Array.isArray(v)&&v.length>0&&(this[n.$extra].columnWidths=v,this[n.$extra].currentColumn=0)}var y=(0,o.toStyle)(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),m=["xfaSubform"],b=(0,o.layoutClass)(this);if(b&&m.push(b),f.style=y,f.class=m,this.name&&(f.xfaName=this.name),this.overflow){var w=this.overflow[n.$getExtra]();w.addLeader&&(w.addLeader=!1,q(this,w.leader,e))}this[n.$pushPara]();for(var k="lr-tb"===this.layout||"rl-tb"===this.layout,S=k?2:1;this[n.$extra].attempt=1){var j=this.breakAfter.children[0];if(H(j))return this[n.$extra].afterBreakAfter=E,s.HTMLResult.breakNode(j)}return delete this[n.$extra],E}}]),r}(n.XFAObject),_t=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"subformSet",!0)).id=e.id||"",a.name=e.name||"",a.relation=(0,s.getStringOption)(e.relation,["ordered","choice","unordered"]),a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.bookend=null,a.break=null,a.desc=null,a.extras=null,a.occur=null,a.overflow=null,a.breakAfter=new n.XFAObjectArray,a.breakBefore=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a}return v(r,[{key:n.$getContainedChildren,value:S().mark((function e(){return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(L(this),"t0",1);case 1:case"end":return e.stop()}}),e,this)}))},{key:n.$getSubformParent,value:function(){for(var e=this[n.$getParent]();!(e instanceof Mt);)e=e[n.$getParent]();return e}},{key:n.$isBindable,value:function(){return!0}}]),r}(n.XFAObject),Lt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"subjectDN")).delimiter=e.delimiter||",",n.id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){this[n.$content]=new Map(this[n.$content].split(this.delimiter).map((function(e){return(e=e.split("=",2))[0]=e[0].trim(),e})))}}]),r}(n.ContentObject),Rt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"subjectDNs",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.subjectDN=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Nt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"submit",!0)).embedPDF=(0,s.getInteger)({data:e.embedPDF,defaultValue:0,validate:function(e){return 1===e}}),a.format=(0,s.getStringOption)(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]),a.id=e.id||"",a.target=e.target||"",a.textEncoding=(0,s.getKeyword)({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:function(e){return["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)}}),a.use=e.use||"",a.usehref=e.usehref||"",a.xdpContent=e.xdpContent||"",a.encrypt=null,a.encryptData=new n.XFAObjectArray,a.signData=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Dt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"template",!0)).baseProfile=(0,s.getStringOption)(e.baseProfile,["full","interactiveForms"]),a.extras=null,a.subform=new n.XFAObjectArray,a}return v(r,[{key:n.$finalize,value:function(){0===this.subform.children.length&&(0,c.warn)("XFA - No subforms in template node."),this.subform.children.length>=2&&(0,c.warn)("XFA - Several subforms in template node: please file a bug."),this[n.$tabIndex]=5e3}},{key:n.$isSplittable,value:function(){return!0}},{key:n.$searchNode,value:function(e,t){return e.startsWith("#")?[this[n.$ids].get(e.slice(1))]:(0,f.searchNode)(this,t,e,!0,!0)}},{key:n.$toPages,value:S().mark((function e(){var t,r,a,i,o,u,l,f,d,p,g,v,y,m,b,w,k=this;return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.subform.children.length){e.next=2;break}return e.abrupt("return",s.HTMLResult.success({name:"div",children:[]}));case 2:this[n.$extra]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]},(t=this.subform.children[0]).pageSet[n.$cleanPage](),r=t.pageSet.pageArea.children,a={name:"div",children:[]},i=null,o=null,u=null,t.breakBefore.children.length>=1?(o=t.breakBefore.children[0],u=o.target):t.subform.children.length>=1&&t.subform.children[0].breakBefore.children.length>=1?(o=t.subform.children[0].breakBefore.children[0],u=o.target):t.break&&t.break.beforeTarget?(o=t.break,u=o.beforeTarget):t.subform.children.length>=1&&t.subform.children[0].break&&t.subform.children[0].break.beforeTarget&&(o=t.subform.children[0].break,u=o.beforeTarget),o&&(l=this[n.$searchNode](u,o[n.$getParent]()))instanceof dt&&(i=l,o[n.$extra]={}),i||(i=r[0]),i[n.$extra]={numberOfUse:1},(f=i[n.$getParent]())[n.$extra]={numberOfUse:1,pageIndex:f.pageArea.children.indexOf(i),pageSetIndex:0},p=null,g=null,v=!0,y=0,m=0,b=S().mark((function e(){var r,o,s,u,l,f,h,b,w,x,O,A,C,F,P;return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(v){e.next=7;break}if(a.children.pop(),3!=++y){e.next=5;break}return(0,c.warn)("XFA - Something goes wrong: please file a bug."),e.abrupt("return",{v:a});case 5:e.next=8;break;case 7:y=0;case 8:d=null,k[n.$extra].currentPageArea=i,r=i[n.$toHTML]().html,a.children.push(r),p&&(k[n.$extra].noLayoutFailure=!0,r.children.push(p[n.$toHTML](i[n.$extra].space).html),p=null),g&&(k[n.$extra].noLayoutFailure=!0,r.children.push(g[n.$toHTML](i[n.$extra].space).html),g=null),o=i.contentArea.children,s=r.children.filter((function(e){return e.attributes.class.includes("xfaContentarea")})),v=!1,k[n.$extra].firstUnsplittable=null,k[n.$extra].noLayoutFailure=!1,u=function(e){var r=t[n.$flushHTML]();r&&(v=v||r.children&&0!==r.children.length,s[e].children.push(r))},l=m,f=o.length;case 21:if(!(l1&&a.children.pop(),e.abrupt("return",{v:a});case 31:if(!w.isBreak()){e.next=40;break}if(x=w.breakNode,u(l),"auto"!==x.targetType){e.next=36;break}return e.abrupt("continue",53);case 36:return x.leader&&(p=(p=k[n.$searchNode](x.leader,x[n.$getParent]()))?p[0]:null),x.trailer&&(g=(g=k[n.$searchNode](x.trailer,x[n.$getParent]()))?g[0]:null),"pageArea"===x.targetType?(d=x[n.$extra].target,l=1/0):x[n.$extra].target?(d=x[n.$extra].target,m=x[n.$extra].index+1,l=1/0):l=x[n.$extra].index,e.abrupt("continue",53);case 40:if(!k[n.$extra].overflowNode){e.next=52;break}return O=k[n.$extra].overflowNode,k[n.$extra].overflowNode=null,A=O[n.$getExtra](),C=A.target,A.addLeader=null!==A.leader,A.addTrailer=null!==A.trailer,u(l),F=l,l=1/0,C instanceof dt?d=C:C instanceof pe&&(-1!==(P=o.indexOf(C))?P>F?l=P-1:m=P:(d=C[n.$getParent](),m=d.contentArea.children.indexOf(C))),e.abrupt("continue",53);case 52:u(l);case 53:l++,e.next=21;break;case 56:return k[n.$extra].pageNumber+=1,d&&(d[n.$isUsable]()?d[n.$extra].numberOfUse+=1:d=null),i=d||i[n.$getNextPage](),e.next=61,null;case 61:case"end":return e.stop()}}),e)}));case 22:return e.delegateYield(b(),"t0",24);case 24:if("object"!==h(w=e.t0)){e.next=27;break}return e.abrupt("return",w.v);case 27:e.next=22;break;case 29:case"end":return e.stop()}}),e,this)}))}]),r}(n.XFAObject);t.Template=Dt;var Bt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"text")).id=e.id||"",n.maxChars=(0,s.getInteger)({data:e.maxChars,defaultValue:0,validate:function(e){return e>=0}}),n.name=e.name||"",n.rid=e.rid||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$acceptWhitespace,value:function(){return!0}},{key:n.$onChild,value:function(e){return e[n.$namespaceId]===a.NamespaceIds.xhtml.id?(this[n.$content]=e,!0):((0,c.warn)("XFA - Invalid content in Text: ".concat(e[n.$nodeName],".")),!1)}},{key:n.$onText,value:function(e){this[n.$content]instanceof n.XFAObject||d(k(r.prototype),n.$onText,this).call(this,e)}},{key:n.$finalize,value:function(){"string"==typeof this[n.$content]&&(this[n.$content]=this[n.$content].replace(/\\r\\n/g,"\\n"))}},{key:n.$getExtra,value:function(){return"string"==typeof this[n.$content]?this[n.$content].split(/[\\u2029\\u2028\\n]/).reduce((function(e,t){return t&&e.push(t),e}),[]).join("\\n"):this[n.$content][n.$text]()}},{key:n.$toHTML,value:function(e){if("string"==typeof this[n.$content]){var t=U(this[n.$content]).html;return this[n.$content].includes("\\u2029")?(t.name="div",t.children=[],this[n.$content].split("\\u2029").map((function(e){return e.split(/[\\u2028\\n]/).reduce((function(e,t){return e.push({name:"span",value:t},{name:"br"}),e}),[])})).forEach((function(e){t.children.push({name:"p",children:e})}))):/[\\u2028\\n]/.test(this[n.$content])&&(t.name="div",t.children=[],this[n.$content].split(/[\\u2028\\n]/).forEach((function(e){t.children.push({name:"span",value:e},{name:"br"})}))),s.HTMLResult.success(t)}return this[n.$content][n.$toHTML](e)}}]),r}(n.ContentObject);t.Text=Bt;var Ut=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"textEdit",!0)).allowRichText=(0,s.getInteger)({data:e.allowRichText,defaultValue:0,validate:function(e){return 1===e}}),n.hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.multiLine=(0,s.getInteger)({data:e.multiLine,defaultValue:"",validate:function(e){return 0===e||1===e}}),n.use=e.use||"",n.usehref=e.usehref||"",n.vScrollPolicy=(0,s.getStringOption)(e.vScrollPolicy,["auto","off","on"]),n.border=null,n.comb=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t,r=(0,o.toStyle)(this,"border","font","margin"),a=this[n.$getParent]()[n.$getParent]();return""===this.multiLine&&(this.multiLine=a instanceof Oe?1:0),t=1===this.multiLine?{name:"textarea",attributes:{dataId:a[n.$data]&&a[n.$data][n.$uid]||a[n.$uid],fieldId:a[n.$uid],class:["xfaTextfield"],style:r,"aria-label":B(a),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:a[n.$data]&&a[n.$data][n.$uid]||a[n.$uid],fieldId:a[n.$uid],class:["xfaTextfield"],style:r,"aria-label":B(a),"aria-required":!1}},R(a)&&(t.attributes["aria-required"]=!0,t.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[t]})}}]),r}(n.XFAObject),$t=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"time")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}},{key:n.$toHTML,value:function(e){return U(this[n.$content]?this[n.$content].toString():"")}}]),r}(n.StringObject),Xt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"timeStamp")).id=e.id||"",n.server=e.server||"",n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),Ht=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"toolTip")).id=e.id||"",n.rid=e.rid||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),qt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"traversal",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.extras=null,a.traverse=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Gt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"traverse",!0)).id=e.id||"",n.operation=(0,s.getStringOption)(e.operation,["next","back","down","first","left","right","up"]),n.ref=e.ref||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.script=null,n}return v(r,[{key:"name",get:function(){return this.operation}},{key:n.$isTransparent,value:function(){return!1}}]),r}(n.XFAObject),zt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"ui",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.picture=null,n.barcode=null,n.button=null,n.checkButton=null,n.choiceList=null,n.dateTimeEdit=null,n.defaultUi=null,n.imageEdit=null,n.numericEdit=null,n.passwordEdit=null,n.signature=null,n.textEdit=null,n}return v(r,[{key:n.$getExtra,value:function(){if(void 0===this[n.$extra]){var e,t=O(Object.getOwnPropertyNames(this));try{for(t.s();!(e=t.n()).done;){var r=e.value;if("extras"!==r&&"picture"!==r){var a=this[r];if(a instanceof n.XFAObject)return this[n.$extra]=a,a}}}catch(e){t.e(e)}finally{t.f()}this[n.$extra]=null}return this[n.$extra]}},{key:n.$toHTML,value:function(e){var t=this[n.$getExtra]();return t?t[n.$toHTML](e):s.HTMLResult.EMPTY}}]),r}(n.XFAObject),Wt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"validate",!0)).formatTest=(0,s.getStringOption)(e.formatTest,["warning","disabled","error"]),n.id=e.id||"",n.nullTest=(0,s.getStringOption)(e.nullTest,["disabled","error","warning"]),n.scriptTest=(0,s.getStringOption)(e.scriptTest,["error","disabled","warning"]),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.message=null,n.picture=null,n.script=null,n}return v(r)}(n.XFAObject),Vt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"value",!0)).id=e.id||"",n.override=(0,s.getInteger)({data:e.override,defaultValue:0,validate:function(e){return 1===e}}),n.relevant=(0,s.getRelevant)(e.relevant),n.use=e.use||"",n.usehref=e.usehref||"",n.arc=null,n.boolean=null,n.date=null,n.dateTime=null,n.decimal=null,n.exData=null,n.float=null,n.image=null,n.integer=null,n.line=null,n.rectangle=null,n.text=null,n.time=null,n}return v(r,[{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){var t=this[n.$getParent]();if(t instanceof Be&&t.ui&&t.ui.imageEdit)return this.image||(this.image=new We({}),this[n.$appendChild](this.image)),void(this.image[n.$content]=e[n.$content]);var r=e[n.$nodeName];if(null===this[r]){var a,i=O(Object.getOwnPropertyNames(this));try{for(i.s();!(a=i.n()).done;){var o=a.value,s=this[o];s instanceof n.XFAObject&&(this[o]=null,this[n.$removeChild](s))}}catch(e){i.e(e)}finally{i.f()}this[e[n.$nodeName]]=e,this[n.$appendChild](e)}else this[r][n.$content]=e[n.$content]}))},{key:n.$text,value:function(){if(this.exData)return"string"==typeof this.exData[n.$content]?this.exData[n.$content].trim():this.exData[n.$content][n.$text]().trim();var e,t=O(Object.getOwnPropertyNames(this));try{for(t.s();!(e=t.n()).done;){var r=e.value;if("image"!==r){var a=this[r];if(a instanceof n.XFAObject)return(a[n.$content]||"").toString().trim()}}}catch(e){t.e(e)}finally{t.f()}return null}},{key:n.$toHTML,value:function(e){var t,r=O(Object.getOwnPropertyNames(this));try{for(r.s();!(t=r.n()).done;){var a=this[t.value];if(a instanceof n.XFAObject)return a[n.$toHTML](e)}}catch(e){r.e(e)}finally{r.f()}return s.HTMLResult.EMPTY}}]),r}(n.XFAObject);t.Value=Vt;var Yt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"variables",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.manifest=new n.XFAObjectArray,a.script=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r,[{key:n.$isTransparent,value:function(){return!0}}]),r}(n.XFAObject),Kt=function(){function e(){y(this,e)}return v(e,null,[{key:a.$buildXFAObject,value:function(t,r){if(e.hasOwnProperty(t)){var a=e[t](r);return a[n.$setSetAttributes](r),a}}},{key:"appearanceFilter",value:function(e){return new G(e)}},{key:"arc",value:function(e){return new z(e)}},{key:"area",value:function(e){return new W(e)}},{key:"assist",value:function(e){return new V(e)}},{key:"barcode",value:function(e){return new Y(e)}},{key:"bind",value:function(e){return new K(e)}},{key:"bindItems",value:function(e){return new J(e)}},{key:"bookend",value:function(e){return new Z(e)}},{key:"boolean",value:function(e){return new Q(e)}},{key:"border",value:function(e){return new ee(e)}},{key:"break",value:function(e){return new te(e)}},{key:"breakAfter",value:function(e){return new re(e)}},{key:"breakBefore",value:function(e){return new ne(e)}},{key:"button",value:function(e){return new ae(e)}},{key:"calculate",value:function(e){return new ie(e)}},{key:"caption",value:function(e){return new oe(e)}},{key:"certificate",value:function(e){return new se(e)}},{key:"certificates",value:function(e){return new ce(e)}},{key:"checkButton",value:function(e){return new ue(e)}},{key:"choiceList",value:function(e){return new le(e)}},{key:"color",value:function(e){return new fe(e)}},{key:"comb",value:function(e){return new he(e)}},{key:"connect",value:function(e){return new de(e)}},{key:"contentArea",value:function(e){return new pe(e)}},{key:"corner",value:function(e){return new ge(e)}},{key:"date",value:function(e){return new ve(e)}},{key:"dateTime",value:function(e){return new ye(e)}},{key:"dateTimeEdit",value:function(e){return new me(e)}},{key:"decimal",value:function(e){return new be(e)}},{key:"defaultUi",value:function(e){return new we(e)}},{key:"desc",value:function(e){return new ke(e)}},{key:"digestMethod",value:function(e){return new Se(e)}},{key:"digestMethods",value:function(e){return new xe(e)}},{key:"draw",value:function(e){return new Oe(e)}},{key:"edge",value:function(e){return new Ae(e)}},{key:"encoding",value:function(e){return new Ce(e)}},{key:"encodings",value:function(e){return new Fe(e)}},{key:"encrypt",value:function(e){return new Pe(e)}},{key:"encryptData",value:function(e){return new Te(e)}},{key:"encryption",value:function(e){return new Ie(e)}},{key:"encryptionMethod",value:function(e){return new Ee(e)}},{key:"encryptionMethods",value:function(e){return new je(e)}},{key:"event",value:function(e){return new Me(e)}},{key:"exData",value:function(e){return new _e(e)}},{key:"exObject",value:function(e){return new Le(e)}},{key:"exclGroup",value:function(e){return new Re(e)}},{key:"execute",value:function(e){return new Ne(e)}},{key:"extras",value:function(e){return new De(e)}},{key:"field",value:function(e){return new Be(e)}},{key:"fill",value:function(e){return new Ue(e)}},{key:"filter",value:function(e){return new $e(e)}},{key:"float",value:function(e){return new Xe(e)}},{key:"font",value:function(e){return new He(e)}},{key:"format",value:function(e){return new qe(e)}},{key:"handler",value:function(e){return new Ge(e)}},{key:"hyphenation",value:function(e){return new ze(e)}},{key:"image",value:function(e){return new We(e)}},{key:"imageEdit",value:function(e){return new Ve(e)}},{key:"integer",value:function(e){return new Ye(e)}},{key:"issuers",value:function(e){return new Ke(e)}},{key:"items",value:function(e){return new Je(e)}},{key:"keep",value:function(e){return new Ze(e)}},{key:"keyUsage",value:function(e){return new Qe(e)}},{key:"line",value:function(e){return new et(e)}},{key:"linear",value:function(e){return new tt(e)}},{key:"lockDocument",value:function(e){return new rt(e)}},{key:"manifest",value:function(e){return new nt(e)}},{key:"margin",value:function(e){return new at(e)}},{key:"mdp",value:function(e){return new it(e)}},{key:"medium",value:function(e){return new ot(e)}},{key:"message",value:function(e){return new st(e)}},{key:"numericEdit",value:function(e){return new ct(e)}},{key:"occur",value:function(e){return new ut(e)}},{key:"oid",value:function(e){return new lt(e)}},{key:"oids",value:function(e){return new ft(e)}},{key:"overflow",value:function(e){return new ht(e)}},{key:"pageArea",value:function(e){return new dt(e)}},{key:"pageSet",value:function(e){return new pt(e)}},{key:"para",value:function(e){return new gt(e)}},{key:"passwordEdit",value:function(e){return new vt(e)}},{key:"pattern",value:function(e){return new yt(e)}},{key:"picture",value:function(e){return new mt(e)}},{key:"proto",value:function(e){return new bt(e)}},{key:"radial",value:function(e){return new wt(e)}},{key:"reason",value:function(e){return new kt(e)}},{key:"reasons",value:function(e){return new St(e)}},{key:"rectangle",value:function(e){return new xt(e)}},{key:"ref",value:function(e){return new Ot(e)}},{key:"script",value:function(e){return new At(e)}},{key:"setProperty",value:function(e){return new Ct(e)}},{key:"signData",value:function(e){return new Ft(e)}},{key:"signature",value:function(e){return new Pt(e)}},{key:"signing",value:function(e){return new Tt(e)}},{key:"solid",value:function(e){return new It(e)}},{key:"speak",value:function(e){return new Et(e)}},{key:"stipple",value:function(e){return new jt(e)}},{key:"subform",value:function(e){return new Mt(e)}},{key:"subformSet",value:function(e){return new _t(e)}},{key:"subjectDN",value:function(e){return new Lt(e)}},{key:"subjectDNs",value:function(e){return new Rt(e)}},{key:"submit",value:function(e){return new Nt(e)}},{key:"template",value:function(e){return new Dt(e)}},{key:"text",value:function(e){return new Bt(e)}},{key:"textEdit",value:function(e){return new Ut(e)}},{key:"time",value:function(e){return new $t(e)}},{key:"timeStamp",value:function(e){return new Xt(e)}},{key:"toolTip",value:function(e){return new Ht(e)}},{key:"traversal",value:function(e){return new qt(e)}},{key:"traverse",value:function(e){return new Gt(e)}},{key:"ui",value:function(e){return new zt(e)}},{key:"validate",value:function(e){return new Wt(e)}},{key:"value",value:function(e){return new Vt(e)}},{key:"variables",value:function(e){return new Yt(e)}}]),e}();t.TemplateNamespace=Kt},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addHTML=function(e,t,r){var s=e[n.$extra],u=s.availableSpace,l=i(r,4),f=l[0],h=l[1],d=l[2],p=l[3];switch(e.layout){case"position":s.width=Math.max(s.width,f+d),s.height=Math.max(s.height,h+p),s.children.push(t);break;case"lr-tb":case"rl-tb":s.line&&1!==s.attempt||(s.line=c(e,[]),s.children.push(s.line),s.numberInLine=0),s.numberInLine+=1,s.line.children.push(t),0===s.attempt?(s.currentWidth+=d,s.height=Math.max(s.height,s.prevHeight+p)):(s.currentWidth=d,s.prevHeight=s.height,s.height+=p,s.attempt=0),s.width=Math.max(s.width,s.currentWidth);break;case"rl-row":case"row":s.children.push(t),s.width+=d,s.height=Math.max(s.height,p);var g,v=(0,a.measureToString)(s.height),y=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=o(e))){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}(s.children);try{for(y.s();!(g=y.n()).done;)g.value.attributes.style.height=v}catch(e){y.e(e)}finally{y.f()}break;case"table":case"tb":s.width=Math.min(u.width,Math.max(s.width,d)),s.height+=p,s.children.push(t)}},t.checkDimensions=function(e,t){if(null===e[n.$getTemplateRoot]()[n.$extra].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;var r=e[n.$getSubformParent](),a=r[n.$extra]&&r[n.$extra].attempt||0,o=i(function(e){var t,r,n=""===e.w?NaN:e.w,a=""===e.h?NaN:e.h,i=0,o=0;switch(e.anchorType||""){case"bottomCenter":i=n/2,o=a;break;case"bottomLeft":i=0,o=a;break;case"bottomRight":i=n,o=a;break;case"middleCenter":i=n/2,o=a/2;break;case"middleLeft":i=0,o=a/2;break;case"middleRight":i=n,o=a/2;break;case"topCenter":i=n/2,o=0;break;case"topRight":i=n,o=0}switch(e.rotate||0){case 0:t=-i,r=-o;break;case 90:t=-o,r=i;var s=[a,-n];n=s[0],a=s[1];break;case 180:t=i,r=o;var c=[-n,-a];n=c[0],a=c[1];break;case 270:t=o,r=-i;var u=[-a,n];n=u[0],a=u[1]}return[e.x+t+Math.min(0,n),e.y+r+Math.min(0,a),Math.abs(n),Math.abs(a)]}(e),4),s=o[1],c=o[2],u=o[3];switch(r.layout){case"lr-tb":case"rl-tb":return 0===a?e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure?""!==e.w?Math.round(c-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(u-t.height)>2)&&(""!==e.w?Math.round(c-t.width)<=2||0===r[n.$extra].numberInLine&&t.height>2:t.width>2):!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||!(""!==e.h&&Math.round(u-t.height)>2)&&(""===e.w||Math.round(c-t.width)<=2||!r[n.$isThereMoreWidth]())&&t.height>2;case"table":case"tb":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||(""===e.h||e[n.$isSplittable]()?(""===e.w||Math.round(c-t.width)<=2||!r[n.$isThereMoreWidth]())&&t.height>2:Math.round(u-t.height)<=2);case"position":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||""===e.h||Math.round(u+s-t.height)<=2||u+s>e[n.$getTemplateRoot]()[n.$extra].currentContentArea.h;case"rl-row":case"row":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||""===e.h||Math.round(u-t.height)<=2;default:return!0}},t.flushHTML=function(e){if(!e[n.$extra])return null;var t={name:"div",attributes:e[n.$extra].attributes,children:e[n.$extra].children};if(e[n.$extra].failingNode){var r=e[n.$extra].failingNode[n.$flushHTML]();r&&(e.layout.endsWith("-tb")?t.children.push(c(e,[r])):t.children.push(r))}return 0===t.children.length?null:t},t.getAvailableSpace=function(e){var t=e[n.$extra].availableSpace,r=e.margin?e.margin.topInset+e.margin.bottomInset:0,a=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[n.$extra].attempt?{width:t.width-a-e[n.$extra].currentWidth,height:t.height-r-e[n.$extra].prevHeight}:{width:t.width-a,height:t.height-r-e[n.$extra].height};case"rl-row":case"row":return{width:e[n.$extra].columnWidths.slice(e[n.$extra].currentColumn).reduce((function(e,t){return e+t})),height:t.height-a};case"table":case"tb":return{width:t.width-a,height:t.height-r-e[n.$extra].height};default:return t}};var n=r(206),a=r(213);function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||o(e,t)||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 o(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.computeBbox=function(e,t,r){var a;if(""!==e.w&&""!==e.h)a=[e.x,e.y,e.w,e.h];else{if(!r)return null;var i=e.w;if(""===i){if(0===e.maxW){var o=e[n.$getSubformParent]();i="position"===o.layout&&""!==o.w?0:e.minW}else i=Math.min(e.maxW,r.width);t.attributes.style.width=u(i)}var s=e.h;if(""===s){if(0===e.maxH){var c=e[n.$getSubformParent]();s="position"===c.layout&&""!==c.h?0:e.minH}else s=Math.min(e.maxH,r.height);t.attributes.style.height=u(s)}a=[e.x,e.y,i,s]}return a},t.createWrapper=function(e,t){var r=t.attributes,a=r.style,i={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};if(r.class.push("xfaWrapped"),e.border){var o,s,c=e.border[n.$extra],u=c.widths,l=c.insets,f=l[0],d=l[3],p=l[0]+l[2],g=l[1]+l[3];switch(e.border.hand){case"even":f-=u[0]/2,d-=u[3]/2,o="calc(100% + ".concat((u[1]+u[3])/2-g,"px)"),s="calc(100% + ".concat((u[0]+u[2])/2-p,"px)");break;case"left":f-=u[0],d-=u[3],o="calc(100% + ".concat(u[1]+u[3]-g,"px)"),s="calc(100% + ".concat(u[0]+u[2]-p,"px)");break;case"right":o=g?"calc(100% - ".concat(g,"px)"):"100%",s=p?"calc(100% - ".concat(p,"px)"):"100%"}var v=["xfaBorder"];h(e.border)&&v.push("xfaPrintOnly");for(var y={name:"div",attributes:{class:v,style:{top:"".concat(f,"px"),left:"".concat(d,"px"),width:o,height:s}},children:[]},m=0,b=["border","borderWidth","borderColor","borderRadius","borderStyle"];m=0)){var r="padding"+("left"==("right"===e.textAlign?"right":"left")?"Left":"Right"),n=(0,i.getMeasurement)(e[r],"0px");e[r]="".concat(n-t,"px")}},t.fixURL=function(e){var t=(0,a.createValidAbsoluteUrl)(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null},t.isPrintOnly=h,t.layoutClass=function(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}},t.layoutNode=function(e,t){var r=null,a=null,i=!1;if((!e.w||!e.h)&&e.value){var o=0,s=0;e.margin&&(o=e.margin.leftInset+e.margin.rightInset,s=e.margin.topInset+e.margin.bottomInset);var c=null,u=null;e.para&&(u=Object.create(null),c=""===e.para.lineHeight?null:e.para.lineHeight,u.top=""===e.para.spaceAbove?0:e.para.spaceAbove,u.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow,u.left=""===e.para.marginLeft?0:e.para.marginLeft,u.right=""===e.para.marginRight?0:e.para.marginRight);var l=e.font;if(!l)for(var h=e[n.$getTemplateRoot](),d=e[n.$getParent]();d&&d!==h;){if(d.font){l=d.font;break}d=d[n.$getParent]()}var p=(e.w||t.width)-o,g=e[n.$globalData].fontFinder;if(e.value.exData&&e.value.exData[n.$content]&&"text/html"===e.value.exData.contentType){var v=f(e.value.exData[n.$content],l,u,c,g,p);a=v.width,r=v.height,i=v.isBroken}else{var y=e.value[n.$text]();if(y){var m=f(y,l,u,c,g,p);a=m.width,r=m.height,i=m.isBroken}}null===a||e.w||(a+=o),null===r||e.h||(r+=s)}return{w:a,h:r,isBroken:i}},t.measureToString=u,t.setAccess=function(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}},t.setFontFamily=function(e,t,r,n){if(r){var a=(0,i.stripQuotes)(e.typeface);n.fontFamily='"'.concat(a,'"');var s=r.find(a);if(s){var c=s.regular.cssFontInfo.fontFamily;c!==a&&(n.fontFamily='"'.concat(c,'"'));var u=d(t);if(u&&""!==u.lineHeight)return;if(n.lineHeight)return;var l=(0,o.selectFont)(e,s);l&&(n.lineHeight=Math.max(1.2,l.lineHeight))}}else delete n.fontFamily},t.setMinMaxDimensions=function(e,t){"position"===e[n.$getSubformParent]().layout&&(e.minW>0&&(t.minWidth=u(e.minW)),e.maxW>0&&(t.maxWidth=u(e.maxW)),e.minH>0&&(t.minHeight=u(e.minH)),e.maxH>0&&(t.maxHeight=u(e.maxH)))},t.setPara=function(e,t,r){if(r.attributes.class&&r.attributes.class.includes("xfaRich")){t&&(""===e.h&&(t.height="auto"),""===e.w&&(t.width="auto"));var a=d(e);if(a){var i=r.attributes.style;switch(i.display="flex",i.flexDirection="column",a.vAlign){case"top":i.justifyContent="start";break;case"bottom":i.justifyContent="end";break;case"middle":i.justifyContent="center"}for(var o=a[n.$toStyle](),s=0,u=Object.entries(o);s1?r-1:0),o=1;oe.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function d(e){var t=e[n.$getTemplateRoot]()[n.$extra].paraStack;return t.length?t.at(-1):null}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FontFinder=void 0,t.getMetrics=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=null;if(e){var i=(0,a.stripQuotes)(e.typeface),o=e[n.$globalData].fontFinder.find(i);r=d(e,o)}if(!r)return{lineHeight:12,lineGap:2,lineNoGap:10};var s=e.size||10,c=r.lineHeight?Math.max(t?0:1.2,r.lineHeight):1.2,u=void 0===r.lineGap?.2:r.lineGap;return{lineHeight:c*s,lineGap:u*s,lineNoGap:Math.max(1,c-u)*s}},t.selectFont=d;var n=r(206),a=r(207),i=r(2);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||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 c(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=u(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function u(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:null,n=c(e);try{for(n.s();!(t=n.n()).done;){var a=t.value;this.addPdfFont(a)}}catch(e){n.e(e)}finally{n.f()}var i,o=c(this.fonts.values());try{for(o.s();!(i=o.n()).done;){var s=i.value;s.regular||(s.regular=s.italic||s.bold||s.bolditalic)}}catch(e){o.e(e)}finally{o.f()}if(r&&0!==r.size){var u,l=this.fonts.get("PdfJS-Fallback-PdfJS-XFA"),f=c(r);try{for(f.s();!(u=f.n()).done;){var h=u.value;this.fonts.set(h,l)}}catch(e){f.e(e)}finally{f.f()}}}},{key:"addPdfFont",value:function(e){var t=e.cssFontInfo,r=t.fontFamily,n=this.fonts.get(r);n||(n=Object.create(null),this.fonts.set(r,n),this.defaultFont||(this.defaultFont=n));var a="",i=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?a=i>=700?"bolditalic":"italic":i>=700&&(a="bold"),a||((e.name.includes("Bold")||e.psName&&e.psName.includes("Bold"))&&(a="bold"),(e.name.includes("Italic")||e.name.endsWith("It")||e.psName&&(e.psName.includes("Italic")||e.psName.endsWith("It")))&&(a+="italic")),a||(a="regular"),n[a]=e}},{key:"getDefault",value:function(){return this.defaultFont}},{key:"find",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this.fonts.get(e)||this.cache.get(e);if(r)return r;var n=/,|-|_| |bolditalic|bold|italic|regular|it/gi,a=e.replace(n,"");if(r=this.fonts.get(a))return this.cache.set(e,r),r;a=a.toLowerCase();var o,u=[],l=c(this.fonts.entries());try{for(l.s();!(o=l.n()).done;){var f=s(o.value,2),h=f[0],d=f[1];h.replace(n,"").toLowerCase().startsWith(a)&&u.push(d)}}catch(e){l.e(e)}finally{l.f()}if(0===u.length){var p,g=c(this.fonts.entries());try{for(g.s();!(p=g.n()).done;){var v=s(p.value,2)[1];v.regular.name&&v.regular.name.replace(n,"").toLowerCase().startsWith(a)&&u.push(v)}}catch(e){g.e(e)}finally{g.f()}}if(0===u.length){a=a.replace(/psmt|mt/gi,"");var y,m=c(this.fonts.entries());try{for(m.s();!(y=m.n()).done;){var b=s(y.value,2),w=b[0],k=b[1];w.replace(n,"").toLowerCase().startsWith(a)&&u.push(k)}}catch(e){m.e(e)}finally{m.f()}}if(0===u.length){var S,x=c(this.fonts.values());try{for(x.s();!(S=x.n()).done;){var O=S.value;O.regular.name&&O.regular.name.replace(n,"").toLowerCase().startsWith(a)&&u.push(O)}}catch(e){x.e(e)}finally{x.f()}}return u.length>=1?(1!==u.length&&t&&(0,i.warn)("XFA - Too many choices to guess the correct font: ".concat(e)),this.cache.set(e,u[0]),u[0]):(t&&!this.warned.has(e)&&(this.warned.add(e),(0,i.warn)("XFA - Cannot find the font: ".concat(e))),null)}}],r&&f(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function d(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}t.FontFinder=h},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TextMeasure=void 0;var n=r(214);function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||s(e,t)||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 s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);re?(n=Math.max(n,i),i=0,a+=s,s=y,t=-1,r=0,c=!0,u=!1):(s=Math.max(y,s),r=i,i+=d,t=l):i+d>e?(a+=s,s=y,-1!==t?(l=t,n=Math.max(n,r),i=0,t=-1,r=0):(n=Math.max(n,i),i=d),c=!0,u=!1):(i+=d,s=Math.max(y,s))}return{width:1.02*(n=Math.max(n,i)),height:a+=s+this.extraHeight,isBroken:c}}}]),e}();t.TextMeasure=p},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DataHandler=void 0;var n=r(206);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||s(e,t)||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 s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0;){var r=t.at(-1),a=o(r,2),s=a[0],c=a[1];if(s+1!==c.length){var u=c[++r[0]],l=e.get(u[n.$uid]);if(l)u[n.$setValue](l);else{var f,h=i(u[n.$getAttributes]().values());try{for(h.s();!(f=h.n()).done;){var d=f.value,p=e.get(d[n.$uid]);if(p){d[n.$setValue](p);break}}}catch(e){h.e(e)}finally{h.f()}}var g=u[n.$getChildren]();g.length>0&&t.push([-1,g])}else t.pop()}var v=[''];if(this.dataset){var y,m=i(this.dataset[n.$getChildren]());try{for(m.s();!(y=m.n()).done;){var b=y.value;"data"!==b[n.$nodeName]&&b[n.$toString](v)}}catch(e){m.e(e)}finally{m.f()}}return this.data[n.$toString](v),v.push(""),v.join("")}}])&&u(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.DataHandler=l},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XFAParser=void 0;var a=r(206),i=r(195),o=r(218),s=r(2);function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||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 u(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,v),(e=g.call(this))._builder=new o.Builder(t),e._stack=[],e._globalData={usedTypefaces:new Set},e._ids=new Map,e._current=e._builder.buildRoot(e._ids),e._errorCode=i.XMLParserErrorCode.NoError,e._whiteRegex=/^\\s+$/,e._nbsps=/\\xa0+/g,e._richText=r,e}return t=v,(r=[{key:"parse",value:function(e){if(this.parseXml(e),this._errorCode===i.XMLParserErrorCode.NoError)return this._current[a.$finalize](),this._current.element}},{key:"onText",value:function(e){e=e.replace(this._nbsps,(function(e){return e.slice(1)+" "})),this._richText||this._current[a.$acceptWhitespace]()?this._current[a.$onText](e,this._richText):this._whiteRegex.test(e)||this._current[a.$onText](e.trim())}},{key:"onCdata",value:function(e){this._current[a.$onText](e)}},{key:"_mkAttributes",value:function(e,t){var r,n=null,i=null,o=Object.create({}),c=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=u(e))){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(e);try{for(c.s();!(r=c.n()).done;){var l=r.value,f=l.name,h=l.value;if("xmlns"===f)n?(0,s.warn)("XFA - multiple namespace definition in <".concat(t,">")):n=h;else if(f.startsWith("xmlns:")){var d=f.substring(6);i||(i=[]),i.push({prefix:d,value:h})}else{var p=f.indexOf(":");if(-1===p)o[f]=h;else{var g=o[a.$nsAttributes];g||(g=o[a.$nsAttributes]=Object.create(null));var v=[f.slice(0,p),f.slice(p+1)],y=v[0],m=v[1],b=g[y];b||(b=g[y]=Object.create(null)),b[m]=h}}}}catch(e){c.e(e)}finally{c.f()}return[n,i,o]}},{key:"_getNameAndPrefix",value:function(e,t){var r=e.indexOf(":");return-1===r?[e,null]:[e.substring(r+1),t?"":e.substring(0,r)]}},{key:"onBeginElement",value:function(e,t,r){var n=c(this._mkAttributes(t,e),3),i=n[0],o=n[1],s=n[2],u=c(this._getNameAndPrefix(e,this._builder.isNsAgnostic()),2),l=u[0],f=u[1],h=this._builder.build({nsPrefix:f,name:l,attributes:s,namespace:i,prefixes:o});if(h[a.$globalData]=this._globalData,r)return h[a.$finalize](),this._current[a.$onChild](h)&&h[a.$setId](this._ids),void h[a.$clean](this._builder);this._stack.push(this._current),this._current=h}},{key:"onEndElement",value:function(e){var t=this._current;if(t[a.$isCDATAXml]()&&"string"==typeof t[a.$content]){var r=new v;r._globalData=this._globalData;var n=r.parse(t[a.$content]);t[a.$content]=null,t[a.$onChild](n)}t[a.$finalize](),this._current=this._stack.pop(),this._current[a.$onChild](t)&&t[a.$setId](this._ids),t[a.$clean](this._builder)}},{key:"onError",value:function(e){this._errorCode=e}}])&&f(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),v}(i.XMLParserBase);t.XFAParser=p},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Builder=void 0;var a=r(208),i=r(206),o=r(219),s=r(211),c=r(228),u=r(2);function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||f(e,t)||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 f(e,t){if(e){if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:null;d(this,e),this._namespaceStack=[],this._nsAgnosticLevel=0,this._namespacePrefixes=new Map,this._namespaces=new Map,this._nextNsId=Math.max.apply(Math,function(e){if(Array.isArray(e))return h(e)}(t=Object.values(a.NamespaceIds).map((function(e){return e.id})))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||f(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),this._currentNamespace=r||new c.UnknownNamespace(++this._nextNsId)}return g(e,[{key:"buildRoot",value:function(e){return new k(e)}},{key:"build",value:function(e){var t=e.nsPrefix,r=e.name,n=e.attributes,s=e.namespace,c=e.prefixes,u=null!==s;if(u&&(this._namespaceStack.push(this._currentNamespace),this._currentNamespace=this._searchNamespace(s)),c&&this._addNamespacePrefix(c),n.hasOwnProperty(i.$nsAttributes)){for(var f=o.NamespaceSetUp.datasets,h=n[i.$nsAttributes],d=null,p=0,g=Object.entries(h);p0}},{key:"_searchNamespace",value:function(e){var t=this._namespaces.get(e);if(t)return t;for(var r=0,n=Object.entries(a.NamespaceIds);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(e);try{for(r.s();!(t=r.n()).done;){var n=t.value,a=n.prefix,i=n.value,o=this._searchNamespace(i),s=this._namespacePrefixes.get(a);s||(s=[],this._namespacePrefixes.set(a,s)),s.push(o)}}catch(e){r.e(e)}finally{r.f()}}},{key:"_getNamespaceToUse",value:function(e){if(!e)return this._currentNamespace;var t=this._namespacePrefixes.get(e);return t&&t.length>0?t.at(-1):((0,u.warn)("Unknown namespace prefix: ".concat(e,".")),null)}},{key:"clean",value:function(e){var t=this,r=e.hasNamespace,n=e.prefixes,a=e.nsAgnostic;r&&(this._currentNamespace=this._namespaceStack.pop()),n&&n.forEach((function(e){var r=e.prefix;t._namespacePrefixes.get(r).pop()})),a&&this._nsAgnosticLevel--}}]),e}();t.Builder=x},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NamespaceSetUp=void 0;var n=r(220),a=r(221),i=r(222),o=r(223),s=r(224),c=r(225),u=r(211),l=r(226),f=r(227),h={config:n.ConfigNamespace,connection:a.ConnectionSetNamespace,datasets:i.DatasetsNamespace,localeSet:o.LocaleSetNamespace,signature:s.SignatureNamespace,stylesheet:c.StylesheetNamespace,template:u.TemplateNamespace,xdp:l.XdpNamespace,xhtml:f.XhtmlNamespace};t.NamespaceSetUp=h},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ConfigNamespace=void 0;var a=r(208),i=r(206),o=r(207),s=r(2);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=1&&e<=8}))}return l(r)}(i.IntegerObject),A=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"agent",!0)).name=e.name?e.name.trim():"",n.common=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),C=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"alwaysEmbed")}return l(r)}(i.ContentObject),F=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"amd")}return l(r)}(i.StringObject),P=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"area")).level=(0,o.getInteger)({data:e.level,defaultValue:0,validate:function(e){return e>=1&&e<=3}}),n.name=(0,o.getStringOption)(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"]),n}return l(r)}(i.XFAObject),T=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"attributes",["preserve","delegate","ignore"])}return l(r)}(i.OptionObject),I=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"autoSave",["disabled","enabled"])}return l(r)}(i.OptionObject),E=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"base")}return l(r)}(i.StringObject),j=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"batchOutput")).format=(0,o.getStringOption)(e.format,["none","concat","zip","zipCompress"]),n}return l(r)}(i.XFAObject),M=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"behaviorOverride")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=new Map(this[i.$content].trim().split(/\\s+/).filter((function(e){return e.includes(":")})).map((function(e){return e.split(":",2)})))}}]),r}(i.ContentObject),_=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"cache",!0)).templateCache=null,n}return l(r)}(i.XFAObject),L=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"change")}return l(r)}(i.Option01),R=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"common",!0)).data=null,n.locale=null,n.localeSet=null,n.messaging=null,n.suppressBanner=null,n.template=null,n.validationMessaging=null,n.versionControl=null,n.log=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),N=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"compress")).scope=(0,o.getStringOption)(e.scope,["imageOnly","document"]),n}return l(r)}(i.XFAObject),D=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"compressLogicalStructure")}return l(r)}(i.Option01),B=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"compressObjectStream")}return l(r)}(i.Option10),U=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"compression",!0)).compressLogicalStructure=null,n.compressObjectStream=null,n.level=null,n.type=null,n}return l(r)}(i.XFAObject),$=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"config",!0)).acrobat=null,n.present=null,n.trace=null,n.agent=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),X=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"conformance",["A","B"])}return l(r)}(i.OptionObject),H=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"contentCopy")}return l(r)}(i.Option01),q=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"copies",1,(function(e){return e>=1}))}return l(r)}(i.IntegerObject),G=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"creator")}return l(r)}(i.StringObject),z=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"currentPage",0,(function(e){return e>=0}))}return l(r)}(i.IntegerObject),W=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"data",!0)).adjustData=null,n.attributes=null,n.incrementalLoad=null,n.outputXSL=null,n.range=null,n.record=null,n.startNode=null,n.uri=null,n.window=null,n.xsl=null,n.excludeNS=new i.XFAObjectArray,n.transform=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),V=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"debug",!0)).uri=null,n}return l(r)}(i.XFAObject),Y=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"defaultTypeface")).writingScript=(0,o.getStringOption)(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"]),n}return l(r)}(i.ContentObject),K=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"destination",["pdf","pcl","ps","webClient","zpl"])}return l(r)}(i.OptionObject),J=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"documentAssembly")}return l(r)}(i.Option01),Z=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"driver",!0)).name=e.name?e.name.trim():"",n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),Q=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}return l(r)}(i.OptionObject),ee=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"dynamicRender",["forbidden","required"])}return l(r)}(i.OptionObject),te=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"embed")}return l(r)}(i.Option01),re=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"encrypt")}return l(r)}(i.Option01),ne=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"encryption",!0)).encrypt=null,n.encryptionLevel=null,n.permissions=null,n}return l(r)}(i.XFAObject),ae=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"encryptionLevel",["40bit","128bit"])}return l(r)}(i.OptionObject),ie=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"enforce")}return l(r)}(i.StringObject),oe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"equate")).force=(0,o.getInteger)({data:e.force,defaultValue:1,validate:function(e){return 0===e}}),n.from=e.from||"",n.to=e.to||"",n}return l(r)}(i.XFAObject),se=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"equateRange")).from=e.from||"",n.to=e.to||"",n._unicodeRange=e.unicodeRange||"",n}return l(r,[{key:"unicodeRange",get:function(){var e,t=[],r=/U\\+([0-9a-fA-F]+)/,n=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(this._unicodeRange.split(",").map((function(e){return e.trim()})).filter((function(e){return!!e})));try{for(n.s();!(e=n.n()).done;){var a=e.value;1===(a=a.split("-",2).map((function(e){var t=e.match(r);return t?parseInt(t[1],16):0}))).length&&a.push(a[0]),t.push(a)}}catch(e){n.e(e)}finally{n.f()}return(0,s.shadow)(this,"unicodeRange",t)}}]),r}(i.XFAObject),ce=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"exclude")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim().split(/\\s+/).filter((function(e){return e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e)}))}}]),r}(i.ContentObject),ue=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"excludeNS")}return l(r)}(i.StringObject),le=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"flipLabel",["usePrinterSetting","on","off"])}return l(r)}(i.OptionObject),fe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"fontInfo",!0)).embed=null,n.map=null,n.subsetBelow=null,n.alwaysEmbed=new i.XFAObjectArray,n.defaultTypeface=new i.XFAObjectArray,n.neverEmbed=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),he=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"formFieldFilling")}return l(r)}(i.Option01),de=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"groupParent")}return l(r)}(i.StringObject),pe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}return l(r)}(i.OptionObject),ge=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"includeXDPContent")}return l(r)}(i.StringObject),ve=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"incrementalLoad",["none","forwardOnly"])}return l(r)}(i.OptionObject),ye=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"incrementalMerge")}return l(r)}(i.Option01),me=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"interactive")}return l(r)}(i.Option01),be=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"jog",["usePrinterSetting","none","pageSet"])}return l(r)}(i.OptionObject),we=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"labelPrinter",!0)).name=(0,o.getStringOption)(e.name,["zpl","dpl","ipl","tcpl"]),n.batchOutput=null,n.flipLabel=null,n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),ke=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"layout",["paginate","panel"])}return l(r)}(i.OptionObject),Se=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"level",0,(function(e){return e>0}))}return l(r)}(i.IntegerObject),xe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"linearized")}return l(r)}(i.Option01),Oe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"locale")}return l(r)}(i.StringObject),Ae=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"localeSet")}return l(r)}(i.StringObject),Ce=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"log",!0)).mode=null,n.threshold=null,n.to=null,n.uri=null,n}return l(r)}(i.XFAObject),Fe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"map",!0)).equate=new i.XFAObjectArray,n.equateRange=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),Pe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"mediumInfo",!0)).map=null,n}return l(r)}(i.XFAObject),Te=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"message",!0)).msgId=null,n.severity=null,n}return l(r)}(i.XFAObject),Ie=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"messaging",!0)).message=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),Ee=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"mode",["append","overwrite"])}return l(r)}(i.OptionObject),je=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"modifyAnnots")}return l(r)}(i.Option01),Me=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"msgId",1,(function(e){return e>=1}))}return l(r)}(i.IntegerObject),_e=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"nameAttr")}return l(r)}(i.StringObject),Le=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"neverEmbed")}return l(r)}(i.ContentObject),Re=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"numberOfCopies",null,(function(e){return e>=2&&e<=5}))}return l(r)}(i.IntegerObject),Ne=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"openAction",!0)).destination=null,n}return l(r)}(i.XFAObject),De=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"output",!0)).to=null,n.type=null,n.uri=null,n}return l(r)}(i.XFAObject),Be=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"outputBin")}return l(r)}(i.StringObject),Ue=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"outputXSL",!0)).uri=null,n}return l(r)}(i.XFAObject),$e=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"overprint",["none","both","draw","field"])}return l(r)}(i.OptionObject),Xe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"packets")}return l(r,[{key:i.$finalize,value:function(){"*"!==this[i.$content]&&(this[i.$content]=this[i.$content].trim().split(/\\s+/).filter((function(e){return["config","datasets","template","xfdf","xslt"].includes(e)})))}}]),r}(i.StringObject),He=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"pageOffset")).x=(0,o.getInteger)({data:e.x,defaultValue:"useXDCSetting",validate:function(e){return!0}}),n.y=(0,o.getInteger)({data:e.y,defaultValue:"useXDCSetting",validate:function(e){return!0}}),n}return l(r)}(i.XFAObject),qe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"pageRange")}return l(r,[{key:i.$finalize,value:function(){for(var e=this[i.$content].trim().split(/\\s+/).map((function(e){return parseInt(e,10)})),t=[],r=0,n=e.length;r=0&&(this[i.$content]=e)}}]),r}(i.ContentObject),ft=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"relevant")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim().split(/\\s+/)}}]),r}(i.ContentObject),ht=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"rename")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim(),(this[i.$content].toLowerCase().startsWith("xml")||new RegExp("[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*","u").test(this[i.$content]))&&(0,s.warn)("XFA - Rename: invalid XFA name")}}]),r}(i.ContentObject),dt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"renderPolicy",["server","client"])}return l(r)}(i.OptionObject),pt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"runScripts",["both","client","none","server"])}return l(r)}(i.OptionObject),gt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"script",!0)).currentPage=null,n.exclude=null,n.runScripts=null,n}return l(r)}(i.XFAObject),vt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"scriptModel",["XFA","none"])}return l(r)}(i.OptionObject),yt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"severity",["ignore","error","information","trace","warning"])}return l(r)}(i.OptionObject),mt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"silentPrint",!0)).addSilentPrint=null,n.printerName=null,n}return l(r)}(i.XFAObject),bt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"staple")).mode=(0,o.getStringOption)(e.mode,["usePrinterSetting","on","off"]),n}return l(r)}(i.XFAObject),wt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"startNode")}return l(r)}(i.StringObject),kt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"startPage",0,(function(e){return!0}))}return l(r)}(i.IntegerObject),St=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"submitFormat",["html","delegate","fdf","xml","pdf"])}return l(r)}(i.OptionObject),xt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"submitUrl")}return l(r)}(i.StringObject),Ot=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"subsetBelow",100,(function(e){return e>=0&&e<=100}))}return l(r)}(i.IntegerObject),At=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"suppressBanner")}return l(r)}(i.Option01),Ct=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"tagged")}return l(r)}(i.Option01),Ft=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"template",!0)).base=null,n.relevant=null,n.startPage=null,n.uri=null,n.xsl=null,n}return l(r)}(i.XFAObject),Pt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"threshold",["trace","error","information","warning"])}return l(r)}(i.OptionObject),Tt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"to",["null","memory","stderr","stdout","system","uri"])}return l(r)}(i.OptionObject),It=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"templateCache")).maxEntries=(0,o.getInteger)({data:e.maxEntries,defaultValue:5,validate:function(e){return e>=0}}),n}return l(r)}(i.XFAObject),Et=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"trace",!0)).area=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),jt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"transform",!0)).groupParent=null,n.ifEmpty=null,n.nameAttr=null,n.picture=null,n.presence=null,n.rename=null,n.whitespace=null,n}return l(r)}(i.XFAObject),Mt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}return l(r)}(i.OptionObject),_t=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"uri")}return l(r)}(i.StringObject),Lt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"validate",["preSubmit","prePrint","preExecute","preSave"])}return l(r)}(i.OptionObject),Rt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"validateApprovalSignatures")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim().split(/\\s+/).filter((function(e){return["docReady","postSign"].includes(e)}))}}]),r}(i.ContentObject),Nt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}return l(r)}(i.OptionObject),Dt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}return l(r)}(i.OptionObject),Bt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"VersionControl")).outputBelow=(0,o.getStringOption)(e.outputBelow,["warn","error","update"]),n.sourceAbove=(0,o.getStringOption)(e.sourceAbove,["warn","error"]),n.sourceBelow=(0,o.getStringOption)(e.sourceBelow,["update","maintain"]),n}return l(r)}(i.XFAObject),Ut=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"viewerPreferences",!0)).ADBE_JSConsole=null,n.ADBE_JSDebugger=null,n.addViewerPreferences=null,n.duplexOption=null,n.enforce=null,n.numberOfCopies=null,n.pageRange=null,n.pickTrayByPDFSize=null,n.printScaling=null,n}return l(r)}(i.XFAObject),$t=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"webClient",!0)).name=e.name?e.name.trim():"",n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),Xt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}return l(r)}(i.OptionObject),Ht=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"window")}return l(r,[{key:i.$finalize,value:function(){var e=this[i.$content].trim().split(/\\s*,\\s*/,2).map((function(e){return parseInt(e,10)}));e.some((function(e){return isNaN(e)}))?this[i.$content]=[0,0]:(1===e.length&&e.push(e[0]),this[i.$content]=e)}}]),r}(i.ContentObject),qt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"xdc",!0)).uri=new i.XFAObjectArray,n.xsl=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),Gt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"xdp",!0)).packets=null,n}return l(r)}(i.XFAObject),zt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"xsl",!0)).debug=null,n.uri=null,n}return l(r)}(i.XFAObject),Wt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"zpl",!0)).name=e.name?e.name.trim():"",n.batchOutput=null,n.flipLabel=null,n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),Vt=function(){function e(){f(this,e)}return l(e,null,[{key:a.$buildXFAObject,value:function(t,r){if(e.hasOwnProperty(t))return e[t](r)}},{key:"acrobat",value:function(e){return new y(e)}},{key:"acrobat7",value:function(e){return new m(e)}},{key:"ADBE_JSConsole",value:function(e){return new b(e)}},{key:"ADBE_JSDebugger",value:function(e){return new w(e)}},{key:"addSilentPrint",value:function(e){return new k(e)}},{key:"addViewerPreferences",value:function(e){return new S(e)}},{key:"adjustData",value:function(e){return new x(e)}},{key:"adobeExtensionLevel",value:function(e){return new O(e)}},{key:"agent",value:function(e){return new A(e)}},{key:"alwaysEmbed",value:function(e){return new C(e)}},{key:"amd",value:function(e){return new F(e)}},{key:"area",value:function(e){return new P(e)}},{key:"attributes",value:function(e){return new T(e)}},{key:"autoSave",value:function(e){return new I(e)}},{key:"base",value:function(e){return new E(e)}},{key:"batchOutput",value:function(e){return new j(e)}},{key:"behaviorOverride",value:function(e){return new M(e)}},{key:"cache",value:function(e){return new _(e)}},{key:"change",value:function(e){return new L(e)}},{key:"common",value:function(e){return new R(e)}},{key:"compress",value:function(e){return new N(e)}},{key:"compressLogicalStructure",value:function(e){return new D(e)}},{key:"compressObjectStream",value:function(e){return new B(e)}},{key:"compression",value:function(e){return new U(e)}},{key:"config",value:function(e){return new $(e)}},{key:"conformance",value:function(e){return new X(e)}},{key:"contentCopy",value:function(e){return new H(e)}},{key:"copies",value:function(e){return new q(e)}},{key:"creator",value:function(e){return new G(e)}},{key:"currentPage",value:function(e){return new z(e)}},{key:"data",value:function(e){return new W(e)}},{key:"debug",value:function(e){return new V(e)}},{key:"defaultTypeface",value:function(e){return new Y(e)}},{key:"destination",value:function(e){return new K(e)}},{key:"documentAssembly",value:function(e){return new J(e)}},{key:"driver",value:function(e){return new Z(e)}},{key:"duplexOption",value:function(e){return new Q(e)}},{key:"dynamicRender",value:function(e){return new ee(e)}},{key:"embed",value:function(e){return new te(e)}},{key:"encrypt",value:function(e){return new re(e)}},{key:"encryption",value:function(e){return new ne(e)}},{key:"encryptionLevel",value:function(e){return new ae(e)}},{key:"enforce",value:function(e){return new ie(e)}},{key:"equate",value:function(e){return new oe(e)}},{key:"equateRange",value:function(e){return new se(e)}},{key:"exclude",value:function(e){return new ce(e)}},{key:"excludeNS",value:function(e){return new ue(e)}},{key:"flipLabel",value:function(e){return new le(e)}},{key:"fontInfo",value:function(e){return new fe(e)}},{key:"formFieldFilling",value:function(e){return new he(e)}},{key:"groupParent",value:function(e){return new de(e)}},{key:"ifEmpty",value:function(e){return new pe(e)}},{key:"includeXDPContent",value:function(e){return new ge(e)}},{key:"incrementalLoad",value:function(e){return new ve(e)}},{key:"incrementalMerge",value:function(e){return new ye(e)}},{key:"interactive",value:function(e){return new me(e)}},{key:"jog",value:function(e){return new be(e)}},{key:"labelPrinter",value:function(e){return new we(e)}},{key:"layout",value:function(e){return new ke(e)}},{key:"level",value:function(e){return new Se(e)}},{key:"linearized",value:function(e){return new xe(e)}},{key:"locale",value:function(e){return new Oe(e)}},{key:"localeSet",value:function(e){return new Ae(e)}},{key:"log",value:function(e){return new Ce(e)}},{key:"map",value:function(e){return new Fe(e)}},{key:"mediumInfo",value:function(e){return new Pe(e)}},{key:"message",value:function(e){return new Te(e)}},{key:"messaging",value:function(e){return new Ie(e)}},{key:"mode",value:function(e){return new Ee(e)}},{key:"modifyAnnots",value:function(e){return new je(e)}},{key:"msgId",value:function(e){return new Me(e)}},{key:"nameAttr",value:function(e){return new _e(e)}},{key:"neverEmbed",value:function(e){return new Le(e)}},{key:"numberOfCopies",value:function(e){return new Re(e)}},{key:"openAction",value:function(e){return new Ne(e)}},{key:"output",value:function(e){return new De(e)}},{key:"outputBin",value:function(e){return new Be(e)}},{key:"outputXSL",value:function(e){return new Ue(e)}},{key:"overprint",value:function(e){return new $e(e)}},{key:"packets",value:function(e){return new Xe(e)}},{key:"pageOffset",value:function(e){return new He(e)}},{key:"pageRange",value:function(e){return new qe(e)}},{key:"pagination",value:function(e){return new Ge(e)}},{key:"paginationOverride",value:function(e){return new ze(e)}},{key:"part",value:function(e){return new We(e)}},{key:"pcl",value:function(e){return new Ve(e)}},{key:"pdf",value:function(e){return new Ye(e)}},{key:"pdfa",value:function(e){return new Ke(e)}},{key:"permissions",value:function(e){return new Je(e)}},{key:"pickTrayByPDFSize",value:function(e){return new Ze(e)}},{key:"picture",value:function(e){return new Qe(e)}},{key:"plaintextMetadata",value:function(e){return new et(e)}},{key:"presence",value:function(e){return new tt(e)}},{key:"present",value:function(e){return new rt(e)}},{key:"print",value:function(e){return new nt(e)}},{key:"printHighQuality",value:function(e){return new at(e)}},{key:"printScaling",value:function(e){return new it(e)}},{key:"printerName",value:function(e){return new ot(e)}},{key:"producer",value:function(e){return new st(e)}},{key:"ps",value:function(e){return new ct(e)}},{key:"range",value:function(e){return new ut(e)}},{key:"record",value:function(e){return new lt(e)}},{key:"relevant",value:function(e){return new ft(e)}},{key:"rename",value:function(e){return new ht(e)}},{key:"renderPolicy",value:function(e){return new dt(e)}},{key:"runScripts",value:function(e){return new pt(e)}},{key:"script",value:function(e){return new gt(e)}},{key:"scriptModel",value:function(e){return new vt(e)}},{key:"severity",value:function(e){return new yt(e)}},{key:"silentPrint",value:function(e){return new mt(e)}},{key:"staple",value:function(e){return new bt(e)}},{key:"startNode",value:function(e){return new wt(e)}},{key:"startPage",value:function(e){return new kt(e)}},{key:"submitFormat",value:function(e){return new St(e)}},{key:"submitUrl",value:function(e){return new xt(e)}},{key:"subsetBelow",value:function(e){return new Ot(e)}},{key:"suppressBanner",value:function(e){return new At(e)}},{key:"tagged",value:function(e){return new Ct(e)}},{key:"template",value:function(e){return new Ft(e)}},{key:"templateCache",value:function(e){return new It(e)}},{key:"threshold",value:function(e){return new Pt(e)}},{key:"to",value:function(e){return new Tt(e)}},{key:"trace",value:function(e){return new Et(e)}},{key:"transform",value:function(e){return new jt(e)}},{key:"type",value:function(e){return new Mt(e)}},{key:"uri",value:function(e){return new _t(e)}},{key:"validate",value:function(e){return new Lt(e)}},{key:"validateApprovalSignatures",value:function(e){return new Rt(e)}},{key:"validationMessaging",value:function(e){return new Nt(e)}},{key:"version",value:function(e){return new Dt(e)}},{key:"versionControl",value:function(e){return new Bt(e)}},{key:"viewerPreferences",value:function(e){return new Ut(e)}},{key:"webClient",value:function(e){return new $t(e)}},{key:"whitespace",value:function(e){return new Xt(e)}},{key:"window",value:function(e){return new Ht(e)}},{key:"xdc",value:function(e){return new qt(e)}},{key:"xdp",value:function(e){return new Gt(e)}},{key:"xsl",value:function(e){return new zt(e)}},{key:"zpl",value:function(e){return new Wt(e)}}]),e}();t.ConfigNamespace=Vt},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ConnectionSetNamespace=void 0;var a=r(208),i=r(206);function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.DatasetsNamespace=void 0;var a=r(206),i=r(208);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleSetNamespace=void 0;var a=r(208),i=r(206),o=r(207);function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.SignatureNamespace=void 0;var a=r(208),i=r(206);function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.StylesheetNamespace=void 0;var a=r(208),i=r(206);function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XdpNamespace=void 0;var a=r(208),i=r(206);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XhtmlNamespace=void 0;var a=r(206),i=r(208),o=r(213),s=r(207);function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function m(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]&&arguments[1]?this[k]=!0:(e=e.replace(A,""),this.style.includes("xfa-spacerun:yes")||(e=e.replace(O," "))),e&&(this[a.$content]+=e)}},{key:a.$pushGlyphs,value:function(e){var t,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=Object.create(null),i={top:NaN,bottom:NaN,left:NaN,right:NaN},o=null,c=y(this.style.split(";").map((function(e){return e.split(":",2)})));try{for(c.s();!(t=c.n()).done;){var u=v(t.value,2),l=u[0],f=u[1];switch(l){case"font-family":n.typeface=(0,s.stripQuotes)(f);break;case"font-size":n.size=(0,s.getMeasurement)(f);break;case"font-weight":n.weight=f;break;case"font-style":n.posture=f;break;case"letter-spacing":n.letterSpacing=(0,s.getMeasurement)(f);break;case"margin":var h=f.split(/ \\t/).map((function(e){return(0,s.getMeasurement)(e)}));switch(h.length){case 1:i.top=i.bottom=i.left=i.right=h[0];break;case 2:i.top=i.bottom=h[0],i.left=i.right=h[1];break;case 3:i.top=h[0],i.bottom=h[2],i.left=i.right=h[1];break;case 4:i.top=h[0],i.left=h[1],i.bottom=h[2],i.right=h[3]}break;case"margin-top":i.top=(0,s.getMeasurement)(f);break;case"margin-bottom":i.bottom=(0,s.getMeasurement)(f);break;case"margin-left":i.left=(0,s.getMeasurement)(f);break;case"margin-right":i.right=(0,s.getMeasurement)(f);break;case"line-height":o=(0,s.getMeasurement)(f)}}}catch(e){c.e(e)}finally{c.f()}if(e.pushData(n,i,o),this[a.$content])e.addString(this[a.$content]);else{var d,p=y(this[a.$getChildren]());try{for(p.s();!(d=p.n()).done;){var g=d.value;"#text"!==g[a.$nodeName]?g[a.$pushGlyphs](e):e.addString(g[a.$content])}}catch(e){p.e(e)}finally{p.f()}}r&&e.popFont()}},{key:a.$toHTML,value:function(e){var t,r=[];return this[a.$extra]={children:r},this[a.$childrenToHTML]({}),0!==r.length||this[a.$content]?(t=this[k]?this[a.$content]?this[a.$content].replace(C,"\\n"):void 0:this[a.$content]||void 0,s.HTMLResult.success({name:this[a.$nodeName],attributes:{href:this.href,style:F(this.style,this,this[k])},children:r,value:t})):s.HTMLResult.EMPTY}}]),r}(a.XmlObject),I=function(e){h(r,e);var t=p(r);function r(e){var n;return c(this,r),(n=t.call(this,e,"a")).href=(0,o.fixURL)(e.href)||"",n}return l(r)}(T),E=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"b")}return l(r,[{key:a.$pushGlyphs,value:function(e){e.pushFont({weight:"bold"}),f(g(r.prototype),a.$pushGlyphs,this).call(this,e),e.popFont()}}]),r}(T),j=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"body")}return l(r,[{key:a.$toHTML,value:function(e){var t=f(g(r.prototype),a.$toHTML,this).call(this,e),n=t.html;return n?(n.name="div",n.attributes.class=["xfaRich"],t):s.HTMLResult.EMPTY}}]),r}(T),M=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"br")}return l(r,[{key:a.$text,value:function(){return"\\n"}},{key:a.$pushGlyphs,value:function(e){e.addString("\\n")}},{key:a.$toHTML,value:function(e){return s.HTMLResult.success({name:"br"})}}]),r}(T),_=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"html")}return l(r,[{key:a.$toHTML,value:function(e){var t=[];if(this[a.$extra]={children:t},this[a.$childrenToHTML]({}),0===t.length)return s.HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[a.$content]||""});if(1===t.length){var r=t[0];if(r.attributes&&r.attributes.class.includes("xfaRich"))return s.HTMLResult.success(r)}return s.HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}]),r}(T),L=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"i")}return l(r,[{key:a.$pushGlyphs,value:function(e){e.pushFont({posture:"italic"}),f(g(r.prototype),a.$pushGlyphs,this).call(this,e),e.popFont()}}]),r}(T),R=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"li")}return l(r)}(T),N=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"ol")}return l(r)}(T),D=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"p")}return l(r,[{key:a.$pushGlyphs,value:function(e){f(g(r.prototype),a.$pushGlyphs,this).call(this,e,!1),e.addString("\\n"),e.addPara(),e.popFont()}},{key:a.$text,value:function(){return this[a.$getParent]()[a.$getChildren]().at(-1)===this?f(g(r.prototype),a.$text,this).call(this):f(g(r.prototype),a.$text,this).call(this)+"\\n"}}]),r}(T),B=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"span")}return l(r)}(T),U=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"sub")}return l(r)}(T),$=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"sup")}return l(r)}(T),X=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"ul")}return l(r)}(T),H=function(){function e(){c(this,e)}return l(e,null,[{key:i.$buildXFAObject,value:function(t,r){if(e.hasOwnProperty(t))return e[t](r)}},{key:"a",value:function(e){return new I(e)}},{key:"b",value:function(e){return new E(e)}},{key:"body",value:function(e){return new j(e)}},{key:"br",value:function(e){return new M(e)}},{key:"html",value:function(e){return new _(e)}},{key:"i",value:function(e){return new L(e)}},{key:"li",value:function(e){return new R(e)}},{key:"ol",value:function(e){return new N(e)}},{key:"p",value:function(e){return new D(e)}},{key:"span",value:function(e){return new B(e)}},{key:"sub",value:function(e){return new U(e)}},{key:"sup",value:function(e){return new $(e)}},{key:"ul",value:function(e){return new X(e)}}]),e}();t.XhtmlNamespace=H},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnknownNamespace=void 0;var n=r(208),a=r(206);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.DatasetReader=void 0;var a=r(2),i=r(135),o=r(195);function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.XRef=void 0;var n=r(2),a=r(134),i=r(135),o=r(146),s=r(136),c=r(196);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(){l=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function f(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=h(e[n],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==u(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){l.value=e,o(l)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function f(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function h(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){f(i,n,a,o,s,"next",e)}function s(e){f(i,n,a,o,s,"throw",e)}o(void 0)}))}}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}(e,t)||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 p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]&&arguments[0];o?((0,n.warn)("Indexing all PDF objects"),e=this.indexObjects()):e=this.readXRef(),e.assignXref(this),this.trailer=e;try{t=e.get("Encrypt")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('XRef.parse - Invalid "Encrypt" reference: "'.concat(e,'".'))}if(t instanceof a.Dict){var s=e.get("ID"),u=s&&s.length?s[0]:"";t.suppressEncryption=!0,this.encrypt=new c.CipherTransformFactory(t,u,this.pdfManager.password)}try{r=e.get("Root")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('XRef.parse - Invalid "Root" reference: "'.concat(e,'".'))}if(r instanceof a.Dict)try{if(r.get("Pages")instanceof a.Dict)return void(this.root=r)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('XRef.parse - Invalid "Pages" reference: "'.concat(e,'".'))}if(!o)throw new i.XRefParseException;throw new n.InvalidPDFException("Invalid Root reference.")}},{key:"processXRefTable",value:function(e){"tableState"in this||(this.tableState={entryNum:0,streamPos:e.lexer.stream.pos,parserBuf1:e.buf1,parserBuf2:e.buf2});var t=this.readXRefTable(e);if(!(0,a.isCmd)(t,"trailer"))throw new n.FormatError("Invalid XRef table: could not find trailer dictionary");var r=e.getObj();if(r instanceof a.Dict||!r.dict||(r=r.dict),!(r instanceof a.Dict))throw new n.FormatError("Invalid XRef table: could not parse trailer dictionary");return delete this.tableState,r}},{key:"readXRefTable",value:function(e){var t,r=e.lexer.stream,i=this.tableState;for(r.pos=i.streamPos,e.buf1=i.parserBuf1,e.buf2=i.parserBuf2;;){if(!("firstEntryNum"in i)||!("entryCount"in i)){if((0,a.isCmd)(t=e.getObj(),"trailer"))break;i.firstEntryNum=t,i.entryCount=e.getObj()}var o=i.firstEntryNum,s=i.entryCount;if(!Number.isInteger(o)||!Number.isInteger(s))throw new n.FormatError("Invalid XRef table: wrong types in subsection header");for(var c=i.entryNum;c0;){var c=d(s,2),u=c[0],l=c[1];if(!Number.isInteger(u)||!Number.isInteger(l))throw new n.FormatError("Invalid XRef range fields: ".concat(u,", ").concat(l));if(!Number.isInteger(a)||!Number.isInteger(i)||!Number.isInteger(o))throw new n.FormatError("Invalid XRef entry fields length: ".concat(u,", ").concat(l));for(var f=t.entryNum;f=e.length);)r+=String.fromCharCode(n),n=e[t];return r}function t(e,t,r){for(var n=r.length,a=e.length,i=0;t=n)break;t++,i++}return i}var r=/\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer)\\b/g,s=/\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g,c=/^(\\d+)\\s+(\\d+)\\s+obj\\b/,u=new Uint8Array([116,114,97,105,108,101,114]),l=new Uint8Array([115,116,97,114,116,120,114,101,102]),f=new Uint8Array([47,88,82,101,102]);this.entries.length=0,this._cacheMap.clear();var h=this.stream;h.pos=0;for(var d,p,g=h.getBytes(),v=(0,n.bytesToString)(g),y=g.length,m=h.start,b=[],w=[];m=y)break;k=g[m]}while(10!==k&&13!==k);else++m}for(var L=0,R=w;L0&&void 0!==arguments[0]&&arguments[0],t=this.stream,r=new Set;this.startXRefQueue.length;){try{var c=this.startXRefQueue[0];if(r.has(c)){(0,n.warn)("readXRef - skipping XRef table since it was already parsed."),this.startXRefQueue.shift();continue}r.add(c),t.pos=c+t.start;var u=new o.Parser({lexer:new o.Lexer(t),xref:this,allowStreams:!0}),l=u.getObj(),f=void 0;if((0,a.isCmd)(l,"xref")){if(f=this.processXRefTable(u),this.topDict||(this.topDict=f),l=f.get("XRefStm"),Number.isInteger(l)){var h=l;h in this.xrefstms||(this.xrefstms[h]=1,this.startXRefQueue.push(h))}}else{if(!Number.isInteger(l))throw new n.FormatError("Invalid XRef stream header");if(!(Number.isInteger(u.getObj())&&(0,a.isCmd)(u.getObj(),"obj")&&(l=u.getObj())instanceof s.BaseStream))throw new n.FormatError("Invalid XRef stream");if(f=this.processXRefStream(l),this.topDict||(this.topDict=f),!f)throw new n.FormatError("Failed to read XRef stream")}l=f.get("Prev"),Number.isInteger(l)?this.startXRefQueue.push(l):l instanceof a.Ref&&this.startXRefQueue.push(l.num)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.info)("(while reading XRef): "+e)}this.startXRefQueue.shift()}if(this.topDict)return this.topDict;if(!e)throw new i.XRefParseException}},{key:"getEntry",value:function(e){var t=this.entries[e];return t&&!t.free&&t.offset?t:null}},{key:"fetchIfRef",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e instanceof a.Ref?this.fetch(e,t):e}},{key:"fetch",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!(e instanceof a.Ref))throw new Error("ref object is not a reference");var r=e.num,i=this._cacheMap.get(r);if(void 0!==i)return i instanceof a.Dict&&!i.objId&&(i.objId=e.toString()),i;var o=this.getEntry(r);if(null===o)return this._cacheMap.set(r,o),o;if(this._pendingRefs.has(e))return this._pendingRefs.remove(e),(0,n.warn)("Ignoring circular reference: ".concat(e,".")),a.CIRCULAR_REF;this._pendingRefs.put(e);try{o=o.uncompressed?this.fetchUncompressed(e,o,t):this.fetchCompressed(e,o,t),this._pendingRefs.remove(e)}catch(t){throw this._pendingRefs.remove(e),t}return o instanceof a.Dict?o.objId=e.toString():o instanceof s.BaseStream&&(o.dict.objId=e.toString()),o}},{key:"fetchUncompressed",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],c=e.gen,u=e.num;if(t.gen!==c){var l="Inconsistent generation in XRef: ".concat(e);if(this._generationFallback&&t.gen{Object.defineProperty(t,"__esModule",{value:!0}),t.MessageHandler=void 0;var n=r(2);function a(){a=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};l(y,o,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,o)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,c){var u=h(e[n],e,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==s(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,c)}),(function(e){a("throw",e,o,c)})):t.resolve(f).then((function(e){l.value=e,o(l)}),(function(e){return a("throw",e,o,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function i(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function o(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:1,s=arguments.length>2?arguments[2]:void 0;if(!this.isCancelled){var c=this.desiredSize;this.desiredSize-=o,c>0&&this.desiredSize<=0&&(this.sinkCapability=(0,n.createPromiseCapability)(),this.ready=this.sinkCapability.promise),i.postMessage({sourceName:r,targetName:a,stream:4,streamId:t,chunk:e},s)}},close:function(){this.isCancelled||(this.isCancelled=!0,i.postMessage({sourceName:r,targetName:a,stream:3,streamId:t}),delete o.streamSinks[t])},error:function(e){(0,n.assert)(e instanceof Error,"error must have a valid reason"),this.isCancelled||(this.isCancelled=!0,i.postMessage({sourceName:r,targetName:a,stream:5,streamId:t,reason:c(e)}))},sinkCapability:(0,n.createPromiseCapability)(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};u.sinkCapability.resolve(),u.ready=u.sinkCapability.promise,this.streamSinks[t]=u,new Promise((function(t){t(s(e.data,u))})).then((function(){i.postMessage({sourceName:r,targetName:a,stream:8,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:r,targetName:a,stream:8,streamId:t,reason:c(e)})}))}},{key:"_processStreamMessage",value:function(e){var t=e.streamId,r=this.sourceName,a=e.sourceName,i=this.comObj,o=this.streamControllers[t],s=this.streamSinks[t];switch(e.stream){case 8:e.success?o.startCall.resolve():o.startCall.reject(c(e.reason));break;case 7:e.success?o.pullCall.resolve():o.pullCall.reject(c(e.reason));break;case 6:if(!s){i.postMessage({sourceName:r,targetName:a,stream:7,streamId:t,success:!0});break}s.desiredSize<=0&&e.desiredSize>0&&s.sinkCapability.resolve(),s.desiredSize=e.desiredSize,new Promise((function(e){e(s.onPull&&s.onPull())})).then((function(){i.postMessage({sourceName:r,targetName:a,stream:7,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:r,targetName:a,stream:7,streamId:t,reason:c(e)})}));break;case 4:if((0,n.assert)(o,"enqueue should have stream controller"),o.isClosed)break;o.controller.enqueue(e.chunk);break;case 3:if((0,n.assert)(o,"close should have stream controller"),o.isClosed)break;o.isClosed=!0,o.controller.close(),this._deleteStreamController(o,t);break;case 5:(0,n.assert)(o,"error should have stream controller"),o.controller.error(c(e.reason)),this._deleteStreamController(o,t);break;case 2:e.success?o.cancelCall.resolve():o.cancelCall.reject(c(e.reason)),this._deleteStreamController(o,t);break;case 1:if(!s)break;new Promise((function(t){t(s.onCancel&&s.onCancel(c(e.reason)))})).then((function(){i.postMessage({sourceName:r,targetName:a,stream:2,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:r,targetName:a,stream:2,streamId:t,reason:c(e)})})),s.sinkCapability.reject(c(e.reason)),s.isCancelled=!0,delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}},{key:"_deleteStreamController",value:(s=a().mark((function e(t,r){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.allSettled([t.startCall&&t.startCall.promise,t.pullCall&&t.pullCall.promise,t.cancelCall&&t.cancelCall.promise]);case 2:delete this.streamControllers[r];case 3:case"end":return e.stop()}}),e,this)})),u=function(){var e=this,t=arguments;return new Promise((function(r,n){var a=s.apply(e,t);function o(e){i(a,r,n,o,c,"next",e)}function c(e){i(a,r,n,o,c,"throw",e)}o(void 0)}))},function(e,t){return u.apply(this,arguments)})},{key:"destroy",value:function(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}],r&&o(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.MessageHandler=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFWorkerStream=void 0;var n=r(2);function a(){a=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};l(y,o,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,o)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,c){var u=h(e[n],e,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==s(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,c)}),(function(e){a("throw",e,o,c)})):t.resolve(f).then((function(e){l.value=e,o(l)}),(function(e){return a("throw",e,o,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function i(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function o(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function s(e){i(o,n,a,s,c,"next",e)}function c(e){i(o,n,a,s,c,"throw",e)}s(void 0)}))}}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(this._rangeRequestReaders.slice(0));try{for(r.s();!(t=r.n()).done;)t.value.cancel(e)}catch(e){r.e(e)}finally{r.f()}}}]),e}();t.PDFWorkerStream=h;var d=function(){function e(t){var r=this;u(this,e),this._msgHandler=t,this.onProgress=null,this._contentLength=null,this._isRangeSupported=!1,this._isStreamingSupported=!1;var n=this._msgHandler.sendWithStream("GetReader");this._reader=n.getReader(),this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then((function(e){r._isStreamingSupported=e.isStreamingSupported,r._isRangeSupported=e.isRangeSupported,r._contentLength=e.contentLength}))}var t;return f(e,[{key:"headersReady",get:function(){return this._headersReady}},{key:"contentLength",get:function(){return this._contentLength}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"read",value:(t=o(a().mark((function e(){var t,r;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._reader.read();case 2:if(t=e.sent,r=t.value,!t.done){e.next=7;break}return e.abrupt("return",{value:void 0,done:!0});case 7:return e.abrupt("return",{value:r.buffer,done:!1});case 8:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"cancel",value:function(e){this._reader.cancel(e)}}]),e}(),p=function(){function e(t,r,n){u(this,e),this._msgHandler=n,this.onProgress=null;var a=this._msgHandler.sendWithStream("GetRangeReader",{begin:t,end:r});this._reader=a.getReader()}var t;return f(e,[{key:"isStreamingSupported",get:function(){return!1}},{key:"read",value:(t=o(a().mark((function e(){var t,r;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._reader.read();case 2:if(t=e.sent,r=t.value,!t.done){e.next=7;break}return e.abrupt("return",{value:void 0,done:!0});case 7:return e.abrupt("return",{value:r.buffer,done:!1});case 8:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"cancel",value:function(e){this._reader.cancel(e)}}]),e}()}],t={};function r(n){var a=t[n];if(void 0!==a)return a.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{var e=n;Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"WorkerMessageHandler",{enumerable:!0,get:function(){return t.WorkerMessageHandler}});var t=r(1)})(),n})(),"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("pdfjs-dist/build/pdf.worker",[],t):"object"==typeof exports?exports["pdfjs-dist/build/pdf.worker"]=t():e["pdfjs-dist/build/pdf.worker"]=e.pdfjsWorker=t();`,Z=`/*! For license information please see pdf.js.LICENSE.txt */ +var __webpack_exports__={},root,factory;root=globalThis,factory=()=>(()=>{var __webpack_modules__=[,(t,e,r)=>{function n(t){return function(t){if(Array.isArray(t))return a(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||i(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(t,e){if(t){if("string"==typeof t)return a(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(t,e):void 0}}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!t)return null;try{if(r&&"string"==typeof t){if(r.addDefaultProtocol&&t.startsWith("www.")){var n=t.match(/\\./g);n&&n.length>=2&&(t="http://".concat(t))}if(r.tryConvertEncoding)try{t=R(t)}catch(t){}}var i=e?new URL(t,e):new URL(t);if(function(t){if(!t)return!1;switch(t.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(i))return i}catch(t){}return null},e.getModificationDate=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date;return[t.getUTCFullYear().toString(),(t.getUTCMonth()+1).toString().padStart(2,"0"),t.getUTCDate().toString().padStart(2,"0"),t.getUTCHours().toString().padStart(2,"0"),t.getUTCMinutes().toString().padStart(2,"0"),t.getUTCSeconds().toString().padStart(2,"0")].join("")},e.getVerbosityLevel=function(){return v},e.info=function(t){v>=p.INFOS&&console.log("Info: ".concat(t))},e.isArrayBuffer=function(t){return"object"===o(t)&&null!==t&&void 0!==t.byteLength},e.isArrayEqual=function(t,e){if(t.length!==e.length)return!1;for(var r=0,n=t.length;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==r.return||r.return()}finally{if(l)throw o}}}}(t);try{for(a.s();!(e=a.n()).done;){var o=(r=e.value,2,function(t){if(Array.isArray(t))return t}(r)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{for(a=(r=r.call(t)).next,0;!(l=(n=a.call(r)).done)&&(s.push(n.value),2!==s.length);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(r)||i(r,2)||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.")}()),s=o[0],l=o[1];n[s]=l}}catch(t){a.e(t)}finally{a.f()}return n},e.objectSize=function(t){return Object.keys(t).length},e.setVerbosityLevel=function(t){Number.isInteger(t)&&(v=t)},e.shadow=g,e.string32=function(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,255&t)},e.stringToBytes=P,e.stringToPDFString=function(t){var e;if(t[0]>="ï"&&("þ"===t[0]&&"ÿ"===t[1]?e="utf-16be":"ÿ"===t[0]&&"þ"===t[1]?e="utf-16le":"ï"===t[0]&&"»"===t[1]&&"¿"===t[2]&&(e="utf-8"),e))try{var r=new TextDecoder(e,{fatal:!0}),n=P(t);return r.decode(n)}catch(t){y('stringToPDFString: "'.concat(t,'".'))}for(var i=[],a=0,o=t.length;a=p.WARNINGS&&console.log("Warning: ".concat(t))}function m(t){throw new Error(t)}function g(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return Object.defineProperty(t,e,{value:r,enumerable:!n,configurable:!0,writable:!1}),r}var b=function(){function t(e,r){this.constructor===t&&m("Cannot initialize BaseException."),this.message=e,this.name=r}return t.prototype=new Error,t.constructor=t,t}();e.BaseException=b;var _=function(t){c(r,t);var e=f(r);function r(t,n){var i;return u(this,r),(i=e.call(this,t,"PasswordException")).code=n,i}return l(r)}(b);e.PasswordException=_;var w=function(t){c(r,t);var e=f(r);function r(t,n){var i;return u(this,r),(i=e.call(this,t,"UnknownErrorException")).details=n,i}return l(r)}(b);e.UnknownErrorException=w;var A=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"InvalidPDFException")}return l(r)}(b);e.InvalidPDFException=A;var k=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"MissingPDFException")}return l(r)}(b);e.MissingPDFException=k;var S=function(t){c(r,t);var e=f(r);function r(t,n){var i;return u(this,r),(i=e.call(this,t,"UnexpectedResponseException")).status=n,i}return l(r)}(b);e.UnexpectedResponseException=S;var x=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"FormatError")}return l(r)}(b);e.FormatError=x;var E=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"AbortException")}return l(r)}(b);function P(t){"string"!=typeof t&&m("Invalid argument for stringToBytes");for(var e=t.length,r=new Uint8Array(e),n=0;nt[2]&&(e[0]=t[2],e[2]=t[0]),t[1]>t[3]&&(e[1]=t[3],e[3]=t[1]),e}},{key:"intersect",value:function(t,e){var r=Math.max(Math.min(t[0],t[2]),Math.min(e[0],e[2])),n=Math.min(Math.max(t[0],t[2]),Math.max(e[0],e[2]));if(r>n)return null;var i=Math.max(Math.min(t[1],t[3]),Math.min(e[1],e[3])),a=Math.min(Math.max(t[1],t[3]),Math.max(e[1],e[3]));return i>a?null:[r,i,n,a]}},{key:"bezierBoundingBox",value:function(t,e,r,i,a,o,s,l){for(var u,c,h,f,d,p,v,y,m=[],g=[[],[]],b=0;b<2;++b)if(0===b?(c=6*t-12*r+6*a,u=-3*t+9*r-9*a+3*s,h=3*r-3*t):(c=6*e-12*i+6*o,u=-3*e+9*i-9*o+3*l,h=3*i-3*e),Math.abs(u)<1e-12){if(Math.abs(c)<1e-12)continue;0<(f=-h/c)&&f<1&&m.push(f)}else v=c*c-4*h*u,y=Math.sqrt(v),v<0||(0<(d=(-c+y)/(2*u))&&d<1&&m.push(d),0<(p=(-c-y)/(2*u))&&p<1&&m.push(p));for(var _,w=m.length,A=w;w--;)_=1-(f=m[w]),g[0][w]=_*_*_*t+3*_*_*f*r+3*_*f*f*a+f*f*f*s,g[1][w]=_*_*_*e+3*_*_*f*i+3*_*f*f*o+f*f*f*l;return g[0][A]=t,g[1][A]=e,g[0][A+1]=s,g[1][A+1]=l,g[0].length=g[1].length=A+2,[Math.min.apply(Math,n(g[0])),Math.min.apply(Math,n(g[1])),Math.max.apply(Math,n(g[0])),Math.max.apply(Math,n(g[1]))]}}]),t}();e.Util=F;var M=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function R(t){return decodeURIComponent(escape(t))}},(t,e,r)=>{var n=r(3);!globalThis.btoa&&n.isNodeJS&&(globalThis.btoa=function(t){return Buffer.from(t,"binary").toString("base64")}),!globalThis.atob&&n.isNodeJS&&(globalThis.atob=function(t){return Buffer.from(t,"base64").toString("binary")}),!globalThis.DOMMatrix&&n.isNodeJS&&(globalThis.DOMMatrix=require("canvas").DOMMatrix),!globalThis.ReadableStream&&n.isNodeJS&&(globalThis.ReadableStream=require("web-streams-polyfill/dist/ponyfill.js").ReadableStream),Array.prototype.at||r(4),Uint8Array.prototype.at||r(78),globalThis.structuredClone||r(88)},(t,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.isNodeJS=void 0;var n=!("object"!==("undefined"==typeof process?"undefined":r(process))||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type);e.isNodeJS=n},(t,e,r)=>{r(5);var n=r(77);t.exports=n("Array","at")},(t,e,r)=>{var n=r(6),i=r(43),a=r(67),o=r(65),s=r(72);n({target:"Array",proto:!0},{at:function(t){var e=i(this),r=a(e),n=o(t),s=n>=0?n:r+n;return s<0||s>=r?void 0:e[s]}}),s("at")},(t,e,r)=>{var n=r(7),i=r(8).f,a=r(47),o=r(51),s=r(41),l=r(59),u=r(71);t.exports=function(t,e){var r,c,h,f,d,p=t.target,v=t.global,y=t.stat;if(r=v?n:y?n[p]||s(p,{}):(n[p]||{}).prototype)for(c in e){if(f=e[c],h=t.dontCallGetSet?(d=i(r,c))&&d.value:r[c],!u(v?c:p+(y?".":"#")+c,t.forced)&&void 0!==h){if(typeof f==typeof h)continue;l(f,h)}(t.sham||h&&h.sham)&&a(f,"sham",!0),o(r,c,f,t)}}},t=>{var e=function(t){return t&&t.Math==Math&&t};t.exports=e("object"==typeof globalThis&&globalThis)||e("object"==typeof window&&window)||e("object"==typeof self&&self)||e("object"==typeof global&&global)||function(){return this}()||Function("return this")()},(t,e,r)=>{var n=r(9),i=r(11),a=r(13),o=r(14),s=r(15),l=r(21),u=r(42),c=r(45),h=Object.getOwnPropertyDescriptor;e.f=n?h:function(t,e){if(t=s(t),e=l(e),c)try{return h(t,e)}catch(t){}if(u(t,e))return o(!i(a.f,t,e),t[e])}},(t,e,r)=>{var n=r(10);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},(t,e,r)=>{var n=r(12),i=Function.prototype.call;t.exports=n?i.bind(i):function(){return i.apply(i,arguments)}},(t,e,r)=>{var n=r(10);t.exports=!n((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},(t,e)=>{var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,i=n&&!r.call({1:2},1);e.f=i?function(t){var e=n(this,t);return!!e&&e.enumerable}:r},t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},(t,e,r)=>{var n=r(16),i=r(19);t.exports=function(t){return n(i(t))}},(t,e,r)=>{var n=r(17),i=r(10),a=r(18),o=Object,s=n("".split);t.exports=i((function(){return!o("z").propertyIsEnumerable(0)}))?function(t){return"String"==a(t)?s(t,""):o(t)}:o},(t,e,r)=>{var n=r(12),i=Function.prototype,a=i.call,o=n&&i.bind.bind(a,a);t.exports=n?o:function(t){return function(){return a.apply(t,arguments)}}},(t,e,r)=>{var n=r(17),i=n({}.toString),a=n("".slice);t.exports=function(t){return a(i(t),8,-1)}},(t,e,r)=>{var n=r(20),i=TypeError;t.exports=function(t){if(n(t))throw i("Can't call method on "+t);return t}},t=>{t.exports=function(t){return null==t}},(t,e,r)=>{var n=r(22),i=r(26);t.exports=function(t){var e=n(t,"string");return i(e)?e:e+""}},(t,e,r)=>{var n=r(11),i=r(23),a=r(26),o=r(33),s=r(36),l=r(37),u=TypeError,c=l("toPrimitive");t.exports=function(t,e){if(!i(t)||a(t))return t;var r,l=o(t,c);if(l){if(void 0===e&&(e="default"),r=n(l,t,e),!i(r)||a(r))return r;throw u("Can't convert object to primitive value")}return void 0===e&&(e="number"),s(t,e)}},(t,e,r)=>{var n=r(24),i=r(25),a=i.all;t.exports=i.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:n(t)||t===a}:function(t){return"object"==typeof t?null!==t:n(t)}},(t,e,r)=>{var n=r(25),i=n.all;t.exports=n.IS_HTMLDDA?function(t){return"function"==typeof t||t===i}:function(t){return"function"==typeof t}},t=>{var e="object"==typeof document&&document.all,r=void 0===e&&void 0!==e;t.exports={all:e,IS_HTMLDDA:r}},(t,e,r)=>{var n=r(27),i=r(24),a=r(28),o=r(29),s=Object;t.exports=o?function(t){return"symbol"==typeof t}:function(t){var e=n("Symbol");return i(e)&&a(e.prototype,s(t))}},(t,e,r)=>{var n=r(7),i=r(24);t.exports=function(t,e){return arguments.length<2?(r=n[t],i(r)?r:void 0):n[t]&&n[t][e];var r}},(t,e,r)=>{var n=r(17);t.exports=n({}.isPrototypeOf)},(t,e,r)=>{var n=r(30);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},(t,e,r)=>{var n=r(31),i=r(10);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},(t,e,r)=>{var n,i,a=r(7),o=r(32),s=a.process,l=a.Deno,u=s&&s.versions||l&&l.version,c=u&&u.v8;c&&(i=(n=c.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&o&&(!(n=o.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\\/(\\d+)/))&&(i=+n[1]),t.exports=i},(t,e,r)=>{var n=r(27);t.exports=n("navigator","userAgent")||""},(t,e,r)=>{var n=r(34),i=r(20);t.exports=function(t,e){var r=t[e];return i(r)?void 0:n(r)}},(t,e,r)=>{var n=r(24),i=r(35),a=TypeError;t.exports=function(t){if(n(t))return t;throw a(i(t)+" is not a function")}},t=>{var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},(t,e,r)=>{var n=r(11),i=r(24),a=r(23),o=TypeError;t.exports=function(t,e){var r,s;if("string"===e&&i(r=t.toString)&&!a(s=n(r,t)))return s;if(i(r=t.valueOf)&&!a(s=n(r,t)))return s;if("string"!==e&&i(r=t.toString)&&!a(s=n(r,t)))return s;throw o("Can't convert object to primitive value")}},(t,e,r)=>{var n=r(7),i=r(38),a=r(42),o=r(44),s=r(30),l=r(29),u=i("wks"),c=n.Symbol,h=c&&c.for,f=l?c:c&&c.withoutSetter||o;t.exports=function(t){if(!a(u,t)||!s&&"string"!=typeof u[t]){var e="Symbol."+t;s&&a(c,t)?u[t]=c[t]:u[t]=l&&h?h(e):f(e)}return u[t]}},(t,e,r)=>{var n=r(39),i=r(40);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.26.1",mode:n?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})},t=>{t.exports=!1},(t,e,r)=>{var n=r(7),i=r(41),a="__core-js_shared__",o=n[a]||i(a,{});t.exports=o},(t,e,r)=>{var n=r(7),i=Object.defineProperty;t.exports=function(t,e){try{i(n,t,{value:e,configurable:!0,writable:!0})}catch(r){n[t]=e}return e}},(t,e,r)=>{var n=r(17),i=r(43),a=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return a(i(t),e)}},(t,e,r)=>{var n=r(19),i=Object;t.exports=function(t){return i(n(t))}},(t,e,r)=>{var n=r(17),i=0,a=Math.random(),o=n(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++i+a,36)}},(t,e,r)=>{var n=r(9),i=r(10),a=r(46);t.exports=!n&&!i((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},(t,e,r)=>{var n=r(7),i=r(23),a=n.document,o=i(a)&&i(a.createElement);t.exports=function(t){return o?a.createElement(t):{}}},(t,e,r)=>{var n=r(9),i=r(48),a=r(14);t.exports=n?function(t,e,r){return i.f(t,e,a(1,r))}:function(t,e,r){return t[e]=r,t}},(t,e,r)=>{var n=r(9),i=r(45),a=r(49),o=r(50),s=r(21),l=TypeError,u=Object.defineProperty,c=Object.getOwnPropertyDescriptor,h="enumerable",f="configurable",d="writable";e.f=n?a?function(t,e,r){if(o(t),e=s(e),o(r),"function"==typeof t&&"prototype"===e&&"value"in r&&d in r&&!r[d]){var n=c(t,e);n&&n[d]&&(t[e]=r.value,r={configurable:f in r?r[f]:n[f],enumerable:h in r?r[h]:n[h],writable:!1})}return u(t,e,r)}:u:function(t,e,r){if(o(t),e=s(e),o(r),i)try{return u(t,e,r)}catch(t){}if("get"in r||"set"in r)throw l("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},(t,e,r)=>{var n=r(9),i=r(10);t.exports=n&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},(t,e,r)=>{var n=r(23),i=String,a=TypeError;t.exports=function(t){if(n(t))return t;throw a(i(t)+" is not an object")}},(t,e,r)=>{var n=r(24),i=r(48),a=r(52),o=r(41);t.exports=function(t,e,r,s){s||(s={});var l=s.enumerable,u=void 0!==s.name?s.name:e;if(n(r)&&a(r,u,s),s.global)l?t[e]=r:o(e,r);else{try{s.unsafe?t[e]&&(l=!0):delete t[e]}catch(t){}l?t[e]=r:i.f(t,e,{value:r,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return t}},(t,e,r)=>{var n=r(10),i=r(24),a=r(42),o=r(9),s=r(53).CONFIGURABLE,l=r(54),u=r(55),c=u.enforce,h=u.get,f=Object.defineProperty,d=o&&!n((function(){return 8!==f((function(){}),"length",{value:8}).length})),p=String(String).split("String"),v=t.exports=function(t,e,r){"Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\\(([^)]*)\\)/,"$1")+"]"),r&&r.getter&&(e="get "+e),r&&r.setter&&(e="set "+e),(!a(t,"name")||s&&t.name!==e)&&(o?f(t,"name",{value:e,configurable:!0}):t.name=e),d&&r&&a(r,"arity")&&t.length!==r.arity&&f(t,"length",{value:r.arity});try{r&&a(r,"constructor")&&r.constructor?o&&f(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var n=c(t);return a(n,"source")||(n.source=p.join("string"==typeof e?e:"")),t};Function.prototype.toString=v((function(){return i(this)&&h(this).source||l(this)}),"toString")},(t,e,r)=>{var n=r(9),i=r(42),a=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,s=i(a,"name"),l=s&&"something"===function(){}.name,u=s&&(!n||n&&o(a,"name").configurable);t.exports={EXISTS:s,PROPER:l,CONFIGURABLE:u}},(t,e,r)=>{var n=r(17),i=r(24),a=r(40),o=n(Function.toString);i(a.inspectSource)||(a.inspectSource=function(t){return o(t)}),t.exports=a.inspectSource},(t,e,r)=>{var n,i,a,o=r(56),s=r(7),l=r(23),u=r(47),c=r(42),h=r(40),f=r(57),d=r(58),p="Object already initialized",v=s.TypeError,y=s.WeakMap;if(o||h.state){var m=h.state||(h.state=new y);m.get=m.get,m.has=m.has,m.set=m.set,n=function(t,e){if(m.has(t))throw v(p);return e.facade=t,m.set(t,e),e},i=function(t){return m.get(t)||{}},a=function(t){return m.has(t)}}else{var g=f("state");d[g]=!0,n=function(t,e){if(c(t,g))throw v(p);return e.facade=t,u(t,g,e),e},i=function(t){return c(t,g)?t[g]:{}},a=function(t){return c(t,g)}}t.exports={set:n,get:i,has:a,enforce:function(t){return a(t)?i(t):n(t,{})},getterFor:function(t){return function(e){var r;if(!l(e)||(r=i(e)).type!==t)throw v("Incompatible receiver, "+t+" required");return r}}}},(t,e,r)=>{var n=r(7),i=r(24),a=n.WeakMap;t.exports=i(a)&&/native code/.test(String(a))},(t,e,r)=>{var n=r(38),i=r(44),a=n("keys");t.exports=function(t){return a[t]||(a[t]=i(t))}},t=>{t.exports={}},(t,e,r)=>{var n=r(42),i=r(60),a=r(8),o=r(48);t.exports=function(t,e,r){for(var s=i(e),l=o.f,u=a.f,c=0;c{var n=r(27),i=r(17),a=r(61),o=r(70),s=r(50),l=i([].concat);t.exports=n("Reflect","ownKeys")||function(t){var e=a.f(s(t)),r=o.f;return r?l(e,r(t)):e}},(t,e,r)=>{var n=r(62),i=r(69).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},(t,e,r)=>{var n=r(17),i=r(42),a=r(15),o=r(63).indexOf,s=r(58),l=n([].push);t.exports=function(t,e){var r,n=a(t),u=0,c=[];for(r in n)!i(s,r)&&i(n,r)&&l(c,r);for(;e.length>u;)i(n,r=e[u++])&&(~o(c,r)||l(c,r));return c}},(t,e,r)=>{var n=r(15),i=r(64),a=r(67),o=function(t){return function(e,r,o){var s,l=n(e),u=a(l),c=i(o,u);if(t&&r!=r){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((t||c in l)&&l[c]===r)return t||c||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},(t,e,r)=>{var n=r(65),i=Math.max,a=Math.min;t.exports=function(t,e){var r=n(t);return r<0?i(r+e,0):a(r,e)}},(t,e,r)=>{var n=r(66);t.exports=function(t){var e=+t;return e!=e||0===e?0:n(e)}},t=>{var e=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){var n=+t;return(n>0?r:e)(n)}},(t,e,r)=>{var n=r(68);t.exports=function(t){return n(t.length)}},(t,e,r)=>{var n=r(65),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},t=>{t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},(t,e)=>{e.f=Object.getOwnPropertySymbols},(t,e,r)=>{var n=r(10),i=r(24),a=/#|\\.prototype\\./,o=function(t,e){var r=l[s(t)];return r==c||r!=u&&(i(e)?n(e):!!e)},s=o.normalize=function(t){return String(t).replace(a,".").toLowerCase()},l=o.data={},u=o.NATIVE="N",c=o.POLYFILL="P";t.exports=o},(t,e,r)=>{var n=r(37),i=r(73),a=r(48).f,o=n("unscopables"),s=Array.prototype;null==s[o]&&a(s,o,{configurable:!0,value:i(null)}),t.exports=function(t){s[o][t]=!0}},(t,e,r)=>{var n,i=r(50),a=r(74),o=r(69),s=r(58),l=r(76),u=r(46),c=r(57),h="prototype",f="script",d=c("IE_PROTO"),p=function(){},v=function(t){return"<"+f+">"+t+""},y=function(t){t.write(v("")),t.close();var e=t.parentWindow.Object;return t=null,e},m=function(){try{n=new ActiveXObject("htmlfile")}catch(t){}var t,e,r;m="undefined"!=typeof document?document.domain&&n?y(n):(e=u("iframe"),r="java"+f+":",e.style.display="none",l.appendChild(e),e.src=String(r),(t=e.contentWindow.document).open(),t.write(v("document.F=Object")),t.close(),t.F):y(n);for(var i=o.length;i--;)delete m[h][o[i]];return m()};s[d]=!0,t.exports=Object.create||function(t,e){var r;return null!==t?(p[h]=i(t),r=new p,p[h]=null,r[d]=t):r=m(),void 0===e?r:a.f(r,e)}},(t,e,r)=>{var n=r(9),i=r(49),a=r(48),o=r(50),s=r(15),l=r(75);e.f=n&&!i?Object.defineProperties:function(t,e){o(t);for(var r,n=s(e),i=l(e),u=i.length,c=0;u>c;)a.f(t,r=i[c++],n[r]);return t}},(t,e,r)=>{var n=r(62),i=r(69);t.exports=Object.keys||function(t){return n(t,i)}},(t,e,r)=>{var n=r(27);t.exports=n("document","documentElement")},(t,e,r)=>{var n=r(7),i=r(17);t.exports=function(t,e){return i(n[t].prototype[e])}},(t,e,r)=>{r(79)},(t,e,r)=>{var n=r(80),i=r(67),a=r(65),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("at",(function(t){var e=o(this),r=i(e),n=a(t),s=n>=0?n:r+n;return s<0||s>=r?void 0:e[s]}))},(t,e,r)=>{var n,i,a,o=r(81),s=r(9),l=r(7),u=r(24),c=r(23),h=r(42),f=r(82),d=r(35),p=r(47),v=r(51),y=r(48).f,m=r(28),g=r(84),b=r(86),_=r(37),w=r(44),A=r(55),k=A.enforce,S=A.get,x=l.Int8Array,E=x&&x.prototype,P=l.Uint8ClampedArray,T=P&&P.prototype,C=x&&g(x),O=E&&g(E),F=Object.prototype,M=l.TypeError,R=_("toStringTag"),I=w("TYPED_ARRAY_TAG"),j="TypedArrayConstructor",L=o&&!!b&&"Opera"!==f(l.opera),D=!1,N={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},U={BigInt64Array:8,BigUint64Array:8},W=function(t){var e=g(t);if(c(e)){var r=S(e);return r&&h(r,j)?r[j]:W(e)}},G=function(t){if(!c(t))return!1;var e=f(t);return h(N,e)||h(U,e)};for(n in N)(a=(i=l[n])&&i.prototype)?k(a)[j]=i:L=!1;for(n in U)(a=(i=l[n])&&i.prototype)&&(k(a)[j]=i);if((!L||!u(C)||C===Function.prototype)&&(C=function(){throw M("Incorrect invocation")},L))for(n in N)l[n]&&b(l[n],C);if((!L||!O||O===F)&&(O=C.prototype,L))for(n in N)l[n]&&b(l[n].prototype,O);if(L&&g(T)!==O&&b(T,O),s&&!h(O,R))for(n in D=!0,y(O,R,{get:function(){return c(this)?this[I]:void 0}}),N)l[n]&&p(l[n],I,n);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:L,TYPED_ARRAY_TAG:D&&I,aTypedArray:function(t){if(G(t))return t;throw M("Target is not a typed array")},aTypedArrayConstructor:function(t){if(u(t)&&(!b||m(C,t)))return t;throw M(d(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,r,n){if(s){if(r)for(var i in N){var a=l[i];if(a&&h(a.prototype,t))try{delete a.prototype[t]}catch(r){try{a.prototype[t]=e}catch(t){}}}O[t]&&!r||v(O,t,r?e:L&&E[t]||e,n)}},exportTypedArrayStaticMethod:function(t,e,r){var n,i;if(s){if(b){if(r)for(n in N)if((i=l[n])&&h(i,t))try{delete i[t]}catch(t){}if(C[t]&&!r)return;try{return v(C,t,r?e:L&&C[t]||e)}catch(t){}}for(n in N)!(i=l[n])||i[t]&&!r||v(i,t,e)}},getTypedArrayConstructor:W,isView:function(t){if(!c(t))return!1;var e=f(t);return"DataView"===e||h(N,e)||h(U,e)},isTypedArray:G,TypedArray:C,TypedArrayPrototype:O}},t=>{t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},(t,e,r)=>{var n=r(83),i=r(24),a=r(18),o=r(37)("toStringTag"),s=Object,l="Arguments"==a(function(){return arguments}());t.exports=n?a:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=s(t),o))?r:l?a(e):"Object"==(n=a(e))&&i(e.callee)?"Arguments":n}},(t,e,r)=>{var n={};n[r(37)("toStringTag")]="z",t.exports="[object z]"===String(n)},(t,e,r)=>{var n=r(42),i=r(24),a=r(43),o=r(57),s=r(85),l=o("IE_PROTO"),u=Object,c=u.prototype;t.exports=s?u.getPrototypeOf:function(t){var e=a(t);if(n(e,l))return e[l];var r=e.constructor;return i(r)&&e instanceof r?r.prototype:e instanceof u?c:null}},(t,e,r)=>{var n=r(10);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},(t,e,r)=>{var n=r(17),i=r(50),a=r(87);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,r={};try{(t=n(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(r,[]),e=r instanceof Array}catch(t){}return function(r,n){return i(r),a(n),e?t(r,n):r.__proto__=n,r}}():void 0)},(t,e,r)=>{var n=r(24),i=String,a=TypeError;t.exports=function(t){if("object"==typeof t||n(t))return t;throw a("Can't set "+i(t)+" as a prototype")}},(t,e,r)=>{r(89),r(96),r(98),r(121),r(123);var n=r(132);t.exports=n.structuredClone},(t,e,r)=>{var n=r(15),i=r(72),a=r(90),o=r(55),s=r(48).f,l=r(91),u=r(95),c=r(39),h=r(9),f="Array Iterator",d=o.set,p=o.getterFor(f);t.exports=l(Array,"Array",(function(t,e){d(this,{type:f,target:n(t),index:0,kind:e})}),(function(){var t=p(this),e=t.target,r=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,u(void 0,!0)):u("keys"==r?n:"values"==r?e[n]:[n,e[n]],!1)}),"values");var v=a.Arguments=a.Array;if(i("keys"),i("values"),i("entries"),!c&&h&&"values"!==v.name)try{s(v,"name",{value:"values"})}catch(t){}},t=>{t.exports={}},(t,e,r)=>{var n=r(6),i=r(11),a=r(39),o=r(53),s=r(24),l=r(92),u=r(84),c=r(86),h=r(94),f=r(47),d=r(51),p=r(37),v=r(90),y=r(93),m=o.PROPER,g=o.CONFIGURABLE,b=y.IteratorPrototype,_=y.BUGGY_SAFARI_ITERATORS,w=p("iterator"),A="keys",k="values",S="entries",x=function(){return this};t.exports=function(t,e,r,o,p,y,E){l(r,e,o);var P,T,C,O=function(t){if(t===p&&j)return j;if(!_&&t in R)return R[t];switch(t){case A:case k:case S:return function(){return new r(this,t)}}return function(){return new r(this)}},F=e+" Iterator",M=!1,R=t.prototype,I=R[w]||R["@@iterator"]||p&&R[p],j=!_&&I||O(p),L="Array"==e&&R.entries||I;if(L&&(P=u(L.call(new t)))!==Object.prototype&&P.next&&(a||u(P)===b||(c?c(P,b):s(P[w])||d(P,w,x)),h(P,F,!0,!0),a&&(v[F]=x)),m&&p==k&&I&&I.name!==k&&(!a&&g?f(R,"name",k):(M=!0,j=function(){return i(I,this)})),p)if(T={values:O(k),keys:y?j:O(A),entries:O(S)},E)for(C in T)(_||M||!(C in R))&&d(R,C,T[C]);else n({target:e,proto:!0,forced:_||M},T);return a&&!E||R[w]===j||d(R,w,j,{name:p}),v[e]=j,T}},(t,e,r)=>{var n=r(93).IteratorPrototype,i=r(73),a=r(14),o=r(94),s=r(90),l=function(){return this};t.exports=function(t,e,r,u){var c=e+" Iterator";return t.prototype=i(n,{next:a(+!u,r)}),o(t,c,!1,!0),s[c]=l,t}},(t,e,r)=>{var n,i,a,o=r(10),s=r(24),l=r(23),u=r(73),c=r(84),h=r(51),f=r(37),d=r(39),p=f("iterator"),v=!1;[].keys&&("next"in(a=[].keys())?(i=c(c(a)))!==Object.prototype&&(n=i):v=!0),!l(n)||o((function(){var t={};return n[p].call(t)!==t}))?n={}:d&&(n=u(n)),s(n[p])||h(n,p,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:v}},(t,e,r)=>{var n=r(48).f,i=r(42),a=r(37)("toStringTag");t.exports=function(t,e,r){t&&!r&&(t=t.prototype),t&&!i(t,a)&&n(t,a,{configurable:!0,value:e})}},t=>{t.exports=function(t,e){return{value:t,done:e}}},(t,e,r)=>{var n=r(83),i=r(51),a=r(97);n||i(Object.prototype,"toString",a,{unsafe:!0})},(t,e,r)=>{var n=r(83),i=r(82);t.exports=n?{}.toString:function(){return"[object "+i(this)+"]"}},(t,e,r)=>{r(99)},(t,e,r)=>{r(100)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r(118))},(t,e,r)=>{var n=r(6),i=r(7),a=r(17),o=r(71),s=r(51),l=r(101),u=r(108),c=r(115),h=r(24),f=r(20),d=r(23),p=r(10),v=r(116),y=r(94),m=r(117);t.exports=function(t,e,r){var g=-1!==t.indexOf("Map"),b=-1!==t.indexOf("Weak"),_=g?"set":"add",w=i[t],A=w&&w.prototype,k=w,S={},x=function(t){var e=a(A[t]);s(A,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(b&&!d(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return b&&!d(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(b&&!d(t))&&e(this,0===t?0:t)}:function(t,r){return e(this,0===t?0:t,r),this})};if(o(t,!h(w)||!(b||A.forEach&&!p((function(){(new w).entries().next()})))))k=r.getConstructor(e,t,g,_),l.enable();else if(o(t,!0)){var E=new k,P=E[_](b?{}:-0,1)!=E,T=p((function(){E.has(1)})),C=v((function(t){new w(t)})),O=!b&&p((function(){for(var t=new w,e=5;e--;)t[_](e,e);return!t.has(-0)}));C||((k=e((function(t,e){c(t,A);var r=m(new w,t,k);return f(e)||u(e,r[_],{that:r,AS_ENTRIES:g}),r}))).prototype=A,A.constructor=k),(T||O)&&(x("delete"),x("has"),g&&x("get")),(O||P)&&x(_),b&&A.clear&&delete A.clear}return S[t]=k,n({global:!0,constructor:!0,forced:k!=w},S),y(k,t),b||r.setStrong(k,t,g),k}},(t,e,r)=>{var n=r(6),i=r(17),a=r(58),o=r(23),s=r(42),l=r(48).f,u=r(61),c=r(102),h=r(105),f=r(44),d=r(107),p=!1,v=f("meta"),y=0,m=function(t){l(t,v,{value:{objectID:"O"+y++,weakData:{}}})},g=t.exports={enable:function(){g.enable=function(){},p=!0;var t=u.f,e=i([].splice),r={};r[v]=1,t(r).length&&(u.f=function(r){for(var n=t(r),i=0,a=n.length;i{var n=r(18),i=r(15),a=r(61).f,o=r(103),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&"Window"==n(t)?function(t){try{return a(t)}catch(t){return o(s)}}(t):a(i(t))}},(t,e,r)=>{var n=r(64),i=r(67),a=r(104),o=Array,s=Math.max;t.exports=function(t,e,r){for(var l=i(t),u=n(e,l),c=n(void 0===r?l:r,l),h=o(s(c-u,0)),f=0;u{var n=r(21),i=r(48),a=r(14);t.exports=function(t,e,r){var o=n(e);o in t?i.f(t,o,a(0,r)):t[o]=r}},(t,e,r)=>{var n=r(10),i=r(23),a=r(18),o=r(106),s=Object.isExtensible,l=n((function(){s(1)}));t.exports=l||o?function(t){return!!i(t)&&(!o||"ArrayBuffer"!=a(t))&&(!s||s(t))}:s},(t,e,r)=>{var n=r(10);t.exports=n((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},(t,e,r)=>{var n=r(10);t.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},(t,e,r)=>{var n=r(109),i=r(11),a=r(50),o=r(35),s=r(111),l=r(67),u=r(28),c=r(112),h=r(113),f=r(114),d=TypeError,p=function(t,e){this.stopped=t,this.result=e},v=p.prototype;t.exports=function(t,e,r){var y,m,g,b,_,w,A,k=r&&r.that,S=!(!r||!r.AS_ENTRIES),x=!(!r||!r.IS_RECORD),E=!(!r||!r.IS_ITERATOR),P=!(!r||!r.INTERRUPTED),T=n(e,k),C=function(t){return y&&f(y,"normal",t),new p(!0,t)},O=function(t){return S?(a(t),P?T(t[0],t[1],C):T(t[0],t[1])):P?T(t,C):T(t)};if(x)y=t.iterator;else if(E)y=t;else{if(!(m=h(t)))throw d(o(t)+" is not iterable");if(s(m)){for(g=0,b=l(t);b>g;g++)if((_=O(t[g]))&&u(v,_))return _;return new p(!1)}y=c(t,m)}for(w=x?t.next:y.next;!(A=i(w,y)).done;){try{_=O(A.value)}catch(t){f(y,"throw",t)}if("object"==typeof _&&_&&u(v,_))return _}return new p(!1)}},(t,e,r)=>{var n=r(110),i=r(34),a=r(12),o=n(n.bind);t.exports=function(t,e){return i(t),void 0===e?t:a?o(t,e):function(){return t.apply(e,arguments)}}},(t,e,r)=>{var n=r(18),i=r(17);t.exports=function(t){if("Function"===n(t))return i(t)}},(t,e,r)=>{var n=r(37),i=r(90),a=n("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[a]===t)}},(t,e,r)=>{var n=r(11),i=r(34),a=r(50),o=r(35),s=r(113),l=TypeError;t.exports=function(t,e){var r=arguments.length<2?s(t):e;if(i(r))return a(n(r,t));throw l(o(t)+" is not iterable")}},(t,e,r)=>{var n=r(82),i=r(33),a=r(20),o=r(90),s=r(37)("iterator");t.exports=function(t){if(!a(t))return i(t,s)||i(t,"@@iterator")||o[n(t)]}},(t,e,r)=>{var n=r(11),i=r(50),a=r(33);t.exports=function(t,e,r){var o,s;i(t);try{if(!(o=a(t,"return"))){if("throw"===e)throw r;return r}o=n(o,t)}catch(t){s=!0,o=t}if("throw"===e)throw r;if(s)throw o;return i(o),r}},(t,e,r)=>{var n=r(28),i=TypeError;t.exports=function(t,e){if(n(e,t))return t;throw i("Incorrect invocation")}},(t,e,r)=>{var n=r(37)("iterator"),i=!1;try{var a=0,o={next:function(){return{done:!!a++}},return:function(){i=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var a={};a[n]=function(){return{next:function(){return{done:r=!0}}}},t(a)}catch(t){}return r}},(t,e,r)=>{var n=r(24),i=r(23),a=r(86);t.exports=function(t,e,r){var o,s;return a&&n(o=e.constructor)&&o!==r&&i(s=o.prototype)&&s!==r.prototype&&a(t,s),t}},(t,e,r)=>{var n=r(48).f,i=r(73),a=r(119),o=r(109),s=r(115),l=r(20),u=r(108),c=r(91),h=r(95),f=r(120),d=r(9),p=r(101).fastKey,v=r(55),y=v.set,m=v.getterFor;t.exports={getConstructor:function(t,e,r,c){var h=t((function(t,n){s(t,f),y(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),d||(t.size=0),l(n)||u(n,t[c],{that:t,AS_ENTRIES:r})})),f=h.prototype,v=m(e),g=function(t,e,r){var n,i,a=v(t),o=b(t,e);return o?o.value=r:(a.last=o={index:i=p(e,!0),key:e,value:r,previous:n=a.last,next:void 0,removed:!1},a.first||(a.first=o),n&&(n.next=o),d?a.size++:t.size++,"F"!==i&&(a.index[i]=o)),t},b=function(t,e){var r,n=v(t),i=p(e);if("F"!==i)return n.index[i];for(r=n.first;r;r=r.next)if(r.key==e)return r};return a(f,{clear:function(){for(var t=v(this),e=t.index,r=t.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete e[r.index],r=r.next;t.first=t.last=void 0,d?t.size=0:this.size=0},delete:function(t){var e=this,r=v(e),n=b(e,t);if(n){var i=n.next,a=n.previous;delete r.index[n.index],n.removed=!0,a&&(a.next=i),i&&(i.previous=a),r.first==n&&(r.first=i),r.last==n&&(r.last=a),d?r.size--:e.size--}return!!n},forEach:function(t){for(var e,r=v(this),n=o(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:r.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!b(this,t)}}),a(f,r?{get:function(t){var e=b(this,t);return e&&e.value},set:function(t,e){return g(this,0===t?0:t,e)}}:{add:function(t){return g(this,t=0===t?0:t,t)}}),d&&n(f,"size",{get:function(){return v(this).size}}),h},setStrong:function(t,e,r){var n=e+" Iterator",i=m(e),a=m(n);c(t,e,(function(t,e){y(this,{type:n,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=a(this),e=t.kind,r=t.last;r&&r.removed;)r=r.previous;return t.target&&(t.last=r=r?r.next:t.state.first)?h("keys"==e?r.key:"values"==e?r.value:[r.key,r.value],!1):(t.target=void 0,h(void 0,!0))}),r?"entries":"values",!r,!0),f(e)}}},(t,e,r)=>{var n=r(51);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},(t,e,r)=>{var n=r(27),i=r(48),a=r(37),o=r(9),s=a("species");t.exports=function(t){var e=n(t),r=i.f;o&&e&&!e[s]&&r(e,s,{configurable:!0,get:function(){return this}})}},(t,e,r)=>{r(122)},(t,e,r)=>{r(100)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r(118))},(t,e,r)=>{var n,i=r(39),a=r(6),o=r(7),s=r(27),l=r(17),u=r(10),c=r(44),h=r(24),f=r(124),d=r(20),p=r(23),v=r(26),y=r(108),m=r(50),g=r(82),b=r(42),_=r(104),w=r(47),A=r(67),k=r(125),S=r(126),x=r(128),E=r(31),P=r(129),T=r(130),C=r(131),O=o.Object,F=o.Date,M=o.Error,R=o.EvalError,I=o.RangeError,j=o.ReferenceError,L=o.SyntaxError,D=o.TypeError,N=o.URIError,U=o.PerformanceMark,W=o.WebAssembly,G=W&&W.CompileError||M,B=W&&W.LinkError||M,q=W&&W.RuntimeError||M,H=s("DOMException"),z=s("Set"),V=s("Map"),X=V.prototype,Y=l(X.has),K=l(X.get),J=l(X.set),Q=l(z.prototype.add),$=s("Object","keys"),Z=l([].push),tt=l((!0).valueOf),et=l(1..valueOf),rt=l("".valueOf),nt=l(F.prototype.getTime),it=c("structuredClone"),at="DataCloneError",ot="Transferring",st=function(t){return!u((function(){var e=new o.Set([7]),r=t(e),n=t(O(7));return r==e||!r.has(7)||"object"!=typeof n||7!=n}))&&t},lt=function(t,e){return!u((function(){var r=new e,n=t({a:r,b:r});return!(n&&n.a===n.b&&n.a instanceof e&&n.a.stack===r.stack)}))},ut=o.structuredClone,ct=i||!lt(ut,M)||!lt(ut,H)||(n=ut,!!u((function(){var t=n(new o.AggregateError([1],it,{cause:3}));return"AggregateError"!=t.name||1!=t.errors[0]||t.message!=it||3!=t.cause}))),ht=!ut&&st((function(t){return new U(it,{detail:t}).detail})),ft=st(ut)||ht,dt=function(t){throw new H("Uncloneable type: "+t,at)},pt=function(t,e){throw new H((e||"Cloning")+" of "+t+" cannot be properly polyfilled in this engine",at)},vt=function(t,e){if(v(t)&&dt("Symbol"),!p(t))return t;if(e){if(Y(e,t))return K(e,t)}else e=new V;var r,n,i,a,l,u,c,f,d,y,m=g(t),k=!1;switch(m){case"Array":i=[],k=!0;break;case"Object":i={},k=!0;break;case"Map":i=new V,k=!0;break;case"Set":i=new z,k=!0;break;case"RegExp":i=new RegExp(t.source,S(t));break;case"Error":switch(n=t.name){case"AggregateError":i=s("AggregateError")([]);break;case"EvalError":i=R();break;case"RangeError":i=I();break;case"ReferenceError":i=j();break;case"SyntaxError":i=L();break;case"TypeError":i=D();break;case"URIError":i=N();break;case"CompileError":i=G();break;case"LinkError":i=B();break;case"RuntimeError":i=q();break;default:i=M()}k=!0;break;case"DOMException":i=new H(t.message,t.name),k=!0;break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":r=o[m],p(r)||pt(m),i=new r(vt(t.buffer,e),t.byteOffset,"DataView"===m?t.byteLength:t.length);break;case"DOMQuad":try{i=new DOMQuad(vt(t.p1,e),vt(t.p2,e),vt(t.p3,e),vt(t.p4,e))}catch(e){ft?i=ft(t):pt(m)}break;case"FileList":if(a=function(){var t;try{t=new o.DataTransfer}catch(e){try{t=new o.ClipboardEvent("").clipboardData}catch(t){}}return t&&t.items&&t.files?t:null}()){for(l=0,u=A(t);l92||C&&E>94||P&&E>97)return!1;var t=new ArrayBuffer(8),e=ut(t,{transfer:[t]});return 0!=t.byteLength||8!=e.byteLength}));a({global:!0,enumerable:!0,sham:!yt,forced:ct},{structuredClone:function(t){var e,r=k(arguments.length,1)>1&&!d(arguments[1])?m(arguments[1]):void 0,n=r?r.transfer:void 0;return void 0!==n&&function(t,e){if(!p(t))throw D("Transfer option cannot be converted to a sequence");var r=[];y(t,(function(t){Z(r,m(t))}));var n,i,a,s,l,u,c=0,d=A(r);if(yt)for(s=ut(r,{transfer:r});c{var n=r(17),i=r(10),a=r(24),o=r(82),s=r(27),l=r(54),u=function(){},c=[],h=s("Reflect","construct"),f=/^\\s*(?:class|function)\\b/,d=n(f.exec),p=!f.exec(u),v=function(t){if(!a(t))return!1;try{return h(u,c,t),!0}catch(t){return!1}},y=function(t){if(!a(t))return!1;switch(o(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return p||!!d(f,l(t))}catch(t){return!0}};y.sham=!0,t.exports=!h||i((function(){var t;return v(v.call)||!v(Object)||!v((function(){t=!0}))||t}))?y:v},t=>{var e=TypeError;t.exports=function(t,r){if(t{var n=r(11),i=r(42),a=r(28),o=r(127),s=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in s||i(t,"flags")||!a(s,t)?e:n(o,t)}},(t,e,r)=>{var n=r(50);t.exports=function(){var t=n(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.unicodeSets&&(e+="v"),t.sticky&&(e+="y"),e}},(t,e,r)=>{var n=r(10),i=r(14);t.exports=!n((function(){var t=Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",i(1,7)),7!==t.stack)}))},(t,e,r)=>{var n=r(130),i=r(131);t.exports=!n&&!i&&"object"==typeof window&&"object"==typeof document},t=>{t.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},(t,e,r)=>{var n=r(18),i=r(7);t.exports="process"==n(i.process)},(t,e,r)=>{var n=r(7);t.exports=n},(__unused_webpack_module,exports,__w_pdfjs_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.build=exports.RenderTask=exports.PDFWorkerUtil=exports.PDFWorker=exports.PDFPageProxy=exports.PDFDocumentProxy=exports.PDFDocumentLoadingTask=exports.PDFDataRangeTransport=exports.LoopbackPort=exports.DefaultStandardFontDataFactory=exports.DefaultCanvasFactory=exports.DefaultCMapReaderFactory=void 0,exports.getDocument=getDocument,exports.setPDFNetworkStreamFactory=setPDFNetworkStreamFactory,exports.version=void 0;var _util=__w_pdfjs_require__(1),_annotation_storage=__w_pdfjs_require__(134),_display_utils=__w_pdfjs_require__(137),_font_loader=__w_pdfjs_require__(140),_canvas=__w_pdfjs_require__(141),_worker_options=__w_pdfjs_require__(144),_is_node=__w_pdfjs_require__(3),_message_handler=__w_pdfjs_require__(145),_metadata=__w_pdfjs_require__(146),_optional_content_config=__w_pdfjs_require__(147),_transport_stream=__w_pdfjs_require__(148),_xfa_text=__w_pdfjs_require__(149);function _classPrivateMethodInitSpec(t,e){_checkPrivateRedeclaration(t,e),e.add(t)}function _classPrivateMethodGet(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function _toConsumableArray(t){return _arrayWithoutHoles(t)||_iterableToArray(t)||_unsupportedIterableToArray(t)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function _arrayWithoutHoles(t){if(Array.isArray(t))return _arrayLikeToArray(t)}function _createForOfIteratorHelper(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=_unsupportedIterableToArray(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function _regeneratorRuntime(){_regeneratorRuntime=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function l(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,r){return t[e]=r}}function u(t,e,r,i){var a=e&&e.prototype instanceof f?e:f,o=Object.create(a.prototype),s=new x(i||[]);return n(o,"_invoke",{value:w(t,r,s)}),o}function c(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var h={};function f(){}function d(){}function p(){}var v={};l(v,a,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(E([])));m&&m!==e&&r.call(m,a)&&(v=m);var g=p.prototype=f.prototype=Object.create(v);function b(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function _(t,e){function i(n,a,o,s){var l=c(t[n],t,a);if("throw"!==l.type){var u=l.arg,h=u.value;return h&&"object"==_typeof(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,s)}))}s(l.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function w(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=A(o,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=c(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===h)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function A(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,A(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var i=c(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,h;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,h):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,h)}function k(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function x(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(k,this),this.reset(!0)}function E(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),S(r),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;S(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:E(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},t}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;_classCallCheck(this,t),this.length=e,this.initialData=r,this.progressiveDone=n,this.contentDispositionFilename=i,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._progressiveDoneListeners=[],this._readyCapability=(0,_util.createPromiseCapability)()}return _createClass(t,[{key:"addRangeListener",value:function(t){this._rangeListeners.push(t)}},{key:"addProgressListener",value:function(t){this._progressListeners.push(t)}},{key:"addProgressiveReadListener",value:function(t){this._progressiveReadListeners.push(t)}},{key:"addProgressiveDoneListener",value:function(t){this._progressiveDoneListeners.push(t)}},{key:"onDataRange",value:function(t,e){var r,n=_createForOfIteratorHelper(this._rangeListeners);try{for(n.s();!(r=n.n()).done;)(0,r.value)(t,e)}catch(t){n.e(t)}finally{n.f()}}},{key:"onDataProgress",value:function(t,e){var r=this;this._readyCapability.promise.then((function(){var n,i=_createForOfIteratorHelper(r._progressListeners);try{for(i.s();!(n=i.n()).done;)(0,n.value)(t,e)}catch(t){i.e(t)}finally{i.f()}}))}},{key:"onDataProgressiveRead",value:function(t){var e=this;this._readyCapability.promise.then((function(){var r,n=_createForOfIteratorHelper(e._progressiveReadListeners);try{for(n.s();!(r=n.n()).done;)(0,r.value)(t)}catch(t){n.e(t)}finally{n.f()}}))}},{key:"onDataProgressiveDone",value:function(){var t=this;this._readyCapability.promise.then((function(){var e,r=_createForOfIteratorHelper(t._progressiveDoneListeners);try{for(r.s();!(e=r.n()).done;)(0,e.value)()}catch(t){r.e(t)}finally{r.f()}}))}},{key:"transportReady",value:function(){this._readyCapability.resolve()}},{key:"requestDataRange",value:function(t,e){(0,_util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange")}},{key:"abort",value:function(){}}]),t}();exports.PDFDataRangeTransport=PDFDataRangeTransport;var PDFDocumentProxy=function(){function t(e,r){_classCallCheck(this,t),this._pdfInfo=e,this._transport=r}return _createClass(t,[{key:"annotationStorage",get:function(){return this._transport.annotationStorage}},{key:"numPages",get:function(){return this._pdfInfo.numPages}},{key:"fingerprints",get:function(){return this._pdfInfo.fingerprints}},{key:"stats",get:function(){return(0,_display_utils.deprecated)("The PDFDocumentProxy stats property will be removed in the future."),this._transport.stats}},{key:"isPureXfa",get:function(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}},{key:"allXfaHtml",get:function(){return this._transport._htmlForXfa}},{key:"getPage",value:function(t){return this._transport.getPage(t)}},{key:"getPageIndex",value:function(t){return this._transport.getPageIndex(t)}},{key:"getDestinations",value:function(){return this._transport.getDestinations()}},{key:"getDestination",value:function(t){return this._transport.getDestination(t)}},{key:"getPageLabels",value:function(){return this._transport.getPageLabels()}},{key:"getPageLayout",value:function(){return this._transport.getPageLayout()}},{key:"getPageMode",value:function(){return this._transport.getPageMode()}},{key:"getViewerPreferences",value:function(){return this._transport.getViewerPreferences()}},{key:"getOpenAction",value:function(){return this._transport.getOpenAction()}},{key:"getAttachments",value:function(){return this._transport.getAttachments()}},{key:"getJavaScript",value:function(){return this._transport.getJavaScript()}},{key:"getJSActions",value:function(){return this._transport.getDocJSActions()}},{key:"getOutline",value:function(){return this._transport.getOutline()}},{key:"getOptionalContentConfig",value:function(){return this._transport.getOptionalContentConfig()}},{key:"getPermissions",value:function(){return this._transport.getPermissions()}},{key:"getMetadata",value:function(){return this._transport.getMetadata()}},{key:"getMarkInfo",value:function(){return this._transport.getMarkInfo()}},{key:"getData",value:function(){return this._transport.getData()}},{key:"saveDocument",value:function(){return this._transport.saveDocument()}},{key:"getDownloadInfo",value:function(){return this._transport.downloadInfoCapability.promise}},{key:"cleanup",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._transport.startCleanup(t||this.isPureXfa)}},{key:"destroy",value:function(){return this.loadingTask.destroy()}},{key:"loadingParams",get:function(){return this._transport.loadingParams}},{key:"loadingTask",get:function(){return this._transport.loadingTask}},{key:"getFieldObjects",value:function(){return this._transport.getFieldObjects()}},{key:"hasJSActions",value:function(){return this._transport.hasJSActions()}},{key:"getCalculationOrderIds",value:function(){return this._transport.getCalculationOrderIds()}}]),t}();exports.PDFDocumentProxy=PDFDocumentProxy;var PDFPageProxy=function(){function t(e,r,n,i){var a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];_classCallCheck(this,t),this._pageIndex=e,this._pageInfo=r,this._ownerDocument=i,this._transport=n,this._stats=a?new _display_utils.StatTimer:null,this._pdfBug=a,this.commonObjs=n.commonObjs,this.objs=new PDFObjects,this._bitmaps=new Set,this.cleanupAfterRender=!1,this.pendingCleanup=!1,this._intentStates=new Map,this.destroyed=!1}var e;return _createClass(t,[{key:"pageNumber",get:function(){return this._pageIndex+1}},{key:"rotate",get:function(){return this._pageInfo.rotate}},{key:"ref",get:function(){return this._pageInfo.ref}},{key:"userUnit",get:function(){return this._pageInfo.userUnit}},{key:"view",get:function(){return this._pageInfo.view}},{key:"getViewport",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.scale,r=t.rotation,n=void 0===r?this.rotate:r,i=t.offsetX,a=void 0===i?0:i,o=t.offsetY,s=void 0===o?0:o,l=t.dontFlip,u=void 0!==l&&l;return new _display_utils.PageViewport({viewBox:this.view,scale:e,rotation:n,offsetX:a,offsetY:s,dontFlip:u})}},{key:"getAnnotations",value:function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).intent,e=void 0===t?"display":t,r=this._transport.getRenderingIntent(e);return this._transport.getAnnotations(this._pageIndex,r.renderingIntent)}},{key:"getJSActions",value:function(){return this._transport.getPageJSActions(this._pageIndex)}},{key:"isPureXfa",get:function(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}},{key:"getXfa",value:(e=_asyncToGenerator(_regeneratorRuntime().mark((function t(){var e;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(null===(e=this._transport._htmlForXfa)||void 0===e?void 0:e.children[this._pageIndex])||null);case 1:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"render",value:function(t){var e,r,n=this,i=t.canvasContext,a=t.viewport,o=t.intent,s=void 0===o?"display":o,l=t.annotationMode,u=void 0===l?_util.AnnotationMode.ENABLE:l,c=t.transform,h=void 0===c?null:c,f=t.canvasFactory,d=void 0===f?null:f,p=t.background,v=void 0===p?null:p,y=t.optionalContentConfigPromise,m=void 0===y?null:y,g=t.annotationCanvasMap,b=void 0===g?null:g,_=t.pageColors,w=void 0===_?null:_,A=t.printAnnotationStorage,k=void 0===A?null:A;null===(e=this._stats)||void 0===e||e.time("Overall");var S=this._transport.getRenderingIntent(s,u,k);this.pendingCleanup=!1,m||(m=this._transport.getOptionalContentConfig());var x=this._intentStates.get(S.cacheKey);x||(x=Object.create(null),this._intentStates.set(S.cacheKey,x)),x.streamReaderCancelTimeout&&(clearTimeout(x.streamReaderCancelTimeout),x.streamReaderCancelTimeout=null);var E,P=d||new DefaultCanvasFactory({ownerDocument:this._ownerDocument}),T=!!(S.renderingIntent&_util.RenderingIntentFlag.PRINT);x.displayReadyCapability||(x.displayReadyCapability=(0,_util.createPromiseCapability)(),x.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},null===(E=this._stats)||void 0===E||E.time("Page Request"),this._pumpOperatorList(S));var C=function(t){var e,r;x.renderTasks.delete(O),(n.cleanupAfterRender||T)&&(n.pendingCleanup=!0),n._tryCleanup(),t?(O.capability.reject(t),n._abortOperatorList({intentState:x,reason:t instanceof Error?t:new Error(t)})):O.capability.resolve(),null===(e=n._stats)||void 0===e||e.timeEnd("Rendering"),null===(r=n._stats)||void 0===r||r.timeEnd("Overall")},O=new InternalRenderTask({callback:C,params:{canvasContext:i,viewport:a,transform:h,background:v},objs:this.objs,commonObjs:this.commonObjs,annotationCanvasMap:b,operatorList:x.operatorList,pageIndex:this._pageIndex,canvasFactory:P,useRequestAnimationFrame:!T,pdfBug:this._pdfBug,pageColors:w});((r=x).renderTasks||(r.renderTasks=new Set)).add(O);var F=O.task;return Promise.all([x.displayReadyCapability.promise,m]).then((function(t){var e,r=_slicedToArray(t,2),i=r[0],a=r[1];n.pendingCleanup?C():(null===(e=n._stats)||void 0===e||e.time("Rendering"),O.initializeGraphics({transparency:i,optionalContentConfig:a}),O.operatorListChanged())})).catch(C),F}},{key:"getOperatorList",value:function(){var t,e,r,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=n.intent,a=void 0===i?"display":i,o=n.annotationMode,s=void 0===o?_util.AnnotationMode.ENABLE:o,l=n.printAnnotationStorage,u=void 0===l?null:l,c=this._transport.getRenderingIntent(a,s,u,!0),h=this._intentStates.get(c.cacheKey);return h||(h=Object.create(null),this._intentStates.set(c.cacheKey,h)),h.opListReadCapability||((t=Object.create(null)).operatorListChanged=function(){h.operatorList.lastChunk&&(h.opListReadCapability.resolve(h.operatorList),h.renderTasks.delete(t))},h.opListReadCapability=(0,_util.createPromiseCapability)(),((e=h).renderTasks||(e.renderTasks=new Set)).add(t),h.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},null===(r=this._stats)||void 0===r||r.time("Page Request"),this._pumpOperatorList(c)),h.opListReadCapability.promise}},{key:"streamTextContent",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.disableCombineTextItems,r=void 0!==e&&e,n=t.includeMarkedContent,i=void 0!==n&&n;return this._transport.messageHandler.sendWithStream("GetTextContent",{pageIndex:this._pageIndex,combineTextItems:!0!==r,includeMarkedContent:!0===i},{highWaterMark:100,size:function(t){return t.items.length}})}},{key:"getTextContent",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this._transport._htmlForXfa)return this.getXfa().then((function(t){return _xfa_text.XfaText.textContent(t)}));var e=this.streamTextContent(t);return new Promise((function(t,r){var n=e.getReader(),i={items:[],styles:Object.create(null)};!function e(){n.read().then((function(r){var n,a=r.value;r.done?t(i):(Object.assign(i.styles,a.styles),(n=i.items).push.apply(n,_toConsumableArray(a.items)),e())}),r)}()}))}},{key:"getStructTree",value:function(){return this._transport.getStructTree(this._pageIndex)}},{key:"_destroy",value:function(){this.destroyed=!0;var t,e=[],r=_createForOfIteratorHelper(this._intentStates.values());try{for(r.s();!(t=r.n()).done;){var n=t.value;if(this._abortOperatorList({intentState:n,reason:new Error("Page was destroyed."),force:!0}),!n.opListReadCapability){var i,a=_createForOfIteratorHelper(n.renderTasks);try{for(a.s();!(i=a.n()).done;){var o=i.value;e.push(o.completed),o.cancel()}}catch(t){a.e(t)}finally{a.f()}}}}catch(t){r.e(t)}finally{r.f()}this.objs.clear();var s,l=_createForOfIteratorHelper(this._bitmaps);try{for(l.s();!(s=l.n()).done;)s.value.close()}catch(t){l.e(t)}finally{l.f()}return this._bitmaps.clear(),this.pendingCleanup=!1,Promise.all(e)}},{key:"cleanup",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.pendingCleanup=!0,this._tryCleanup(t)}},{key:"_tryCleanup",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.pendingCleanup)return!1;var e,r=_createForOfIteratorHelper(this._intentStates.values());try{for(r.s();!(e=r.n()).done;){var n=e.value,i=n.renderTasks,a=n.operatorList;if(i.size>0||!a.lastChunk)return!1}}catch(t){r.e(t)}finally{r.f()}this._intentStates.clear(),this.objs.clear(),t&&this._stats&&(this._stats=new _display_utils.StatTimer);var o,s=_createForOfIteratorHelper(this._bitmaps);try{for(s.s();!(o=s.n()).done;)o.value.close()}catch(t){s.e(t)}finally{s.f()}return this._bitmaps.clear(),this.pendingCleanup=!1,!0}},{key:"_startRenderPage",value:function(t,e){var r,n,i=this._intentStates.get(e);i&&(null===(r=this._stats)||void 0===r||r.timeEnd("Page Request"),null===(n=i.displayReadyCapability)||void 0===n||n.resolve(t))}},{key:"_renderPageChunk",value:function(t,e){for(var r=0,n=t.length;r0)return;if(n instanceof _display_utils.RenderingCancelledException){var o=RENDERING_CANCELLED_TIMEOUT;return n.extraDelay>0&&n.extraDelay<1e3&&(o+=n.extraDelay),void(r.streamReaderCancelTimeout=setTimeout((function(){r.streamReaderCancelTimeout=null,e._abortOperatorList({intentState:r,reason:n,force:!0})}),o))}}if(r.streamReader.cancel(new _util.AbortException(n.message)).catch((function(){})),r.streamReader=null,!this._transport.destroyed){var s,l=_createForOfIteratorHelper(this._intentStates);try{for(l.s();!(s=l.n()).done;){var u=_slicedToArray(s.value,2),c=u[0];if(u[1]===r){this._intentStates.delete(c);break}}}catch(t){l.e(t)}finally{l.f()}this.cleanup()}}}},{key:"stats",get:function(){return this._stats}}]),t}();exports.PDFPageProxy=PDFPageProxy;var _listeners=new WeakMap,_deferred=new WeakMap,LoopbackPort=function(){function t(){_classCallCheck(this,t),_classPrivateFieldInitSpec(this,_listeners,{writable:!0,value:[]}),_classPrivateFieldInitSpec(this,_deferred,{writable:!0,value:Promise.resolve()})}return _createClass(t,[{key:"postMessage",value:function(t,e){var r=this,n={data:structuredClone(t,e)};_classPrivateFieldGet(this,_deferred).then((function(){var t,e=_createForOfIteratorHelper(_classPrivateFieldGet(r,_listeners));try{for(e.s();!(t=e.n()).done;)t.value.call(r,n)}catch(t){e.e(t)}finally{e.f()}}))}},{key:"addEventListener",value:function(t,e){_classPrivateFieldGet(this,_listeners).push(e)}},{key:"removeEventListener",value:function(t,e){var r=_classPrivateFieldGet(this,_listeners).indexOf(e);_classPrivateFieldGet(this,_listeners).splice(r,1)}},{key:"terminate",value:function(){_classPrivateFieldGet(this,_listeners).length=0}}]),t}();exports.LoopbackPort=LoopbackPort;var PDFWorkerUtil={isWorkerDisabled:!1,fallbackWorkerSrc:null,fakeWorkerId:0};if(exports.PDFWorkerUtil=PDFWorkerUtil,_is_node.isNodeJS&&"function"==typeof require)PDFWorkerUtil.isWorkerDisabled=!0,PDFWorkerUtil.fallbackWorkerSrc="./pdf.worker.js";else if("object"===("undefined"==typeof document?"undefined":_typeof(document))){var _document,_document$currentScri,pdfjsFilePath=null===(_document=document)||void 0===_document||null===(_document$currentScri=_document.currentScript)||void 0===_document$currentScri?void 0:_document$currentScri.src;pdfjsFilePath&&(PDFWorkerUtil.fallbackWorkerSrc=pdfjsFilePath.replace(/(\\.(?:min\\.)?js)(\\?.*)?$/i,".worker$1$2"))}PDFWorkerUtil.isSameOrigin=function(t,e){var r;try{if(!(r=new URL(t)).origin||"null"===r.origin)return!1}catch(t){return!1}var n=new URL(e,r);return r.origin===n.origin},PDFWorkerUtil.createCDNWrapper=function(t){var e='importScripts("'.concat(t,'");');return URL.createObjectURL(new Blob([e]))};var PDFWorker=function(){function PDFWorker(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.name,r=void 0===e?null:e,n=t.port,i=void 0===n?null:n,a=t.verbosity,o=void 0===a?(0,_util.getVerbosityLevel)():a;if(_classCallCheck(this,PDFWorker),i&&_classStaticPrivateFieldSpecGet(PDFWorker,PDFWorker,_workerPorts).has(i))throw new Error("Cannot use more than one PDFWorker per port.");if(this.name=r,this.destroyed=!1,this.verbosity=o,this._readyCapability=(0,_util.createPromiseCapability)(),this._port=null,this._webWorker=null,this._messageHandler=null,i)return _classStaticPrivateFieldSpecGet(PDFWorker,PDFWorker,_workerPorts).set(i,this),void this._initializeFromPort(i);this._initialize()}return _createClass(PDFWorker,[{key:"promise",get:function(){return this._readyCapability.promise}},{key:"port",get:function(){return this._port}},{key:"messageHandler",get:function(){return this._messageHandler}},{key:"_initializeFromPort",value:function(t){this._port=t,this._messageHandler=new _message_handler.MessageHandler("main","worker",t),this._messageHandler.on("ready",(function(){})),this._readyCapability.resolve(),this._messageHandler.send("configure",{verbosity:this.verbosity})}},{key:"_initialize",value:function(){var t=this;if(!PDFWorkerUtil.isWorkerDisabled&&!PDFWorker._mainThreadWorkerMessageHandler){var e=PDFWorker.workerSrc;try{PDFWorkerUtil.isSameOrigin(window.location.href,e)||(e=PDFWorkerUtil.createCDNWrapper(new URL(e,window.location).href));var r=new Worker(e),n=new _message_handler.MessageHandler("main","worker",r),i=function(){r.removeEventListener("error",a),n.destroy(),r.terminate(),t.destroyed?t._readyCapability.reject(new Error("Worker was destroyed")):t._setupFakeWorker()},a=function(){t._webWorker||i()};r.addEventListener("error",a),n.on("test",(function(e){r.removeEventListener("error",a),t.destroyed?i():e?(t._messageHandler=n,t._port=r,t._webWorker=r,t._readyCapability.resolve(),n.send("configure",{verbosity:t.verbosity})):(t._setupFakeWorker(),n.destroy(),r.terminate())})),n.on("ready",(function(e){if(r.removeEventListener("error",a),t.destroyed)i();else try{o()}catch(e){t._setupFakeWorker()}}));var o=function(){var t=new Uint8Array;n.send("test",t,[t.buffer])};return void o()}catch(t){(0,_util.info)("The worker has been disabled.")}}this._setupFakeWorker()}},{key:"_setupFakeWorker",value:function(){var t=this;PDFWorkerUtil.isWorkerDisabled||((0,_util.warn)("Setting up fake worker."),PDFWorkerUtil.isWorkerDisabled=!0),PDFWorker._setupFakeWorkerGlobal.then((function(e){if(t.destroyed)t._readyCapability.reject(new Error("Worker was destroyed"));else{var r=new LoopbackPort;t._port=r;var n="fake".concat(PDFWorkerUtil.fakeWorkerId++),i=new _message_handler.MessageHandler(n+"_worker",n,r);e.setup(i,r);var a=new _message_handler.MessageHandler(n,n+"_worker",r);t._messageHandler=a,t._readyCapability.resolve(),a.send("configure",{verbosity:t.verbosity})}})).catch((function(e){t._readyCapability.reject(new Error('Setting up fake worker failed: "'.concat(e.message,'".')))}))}},{key:"destroy",value:function(){this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),_classStaticPrivateFieldSpecGet(PDFWorker,PDFWorker,_workerPorts).delete(this._port),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}}],[{key:"fromPort",value:function(t){if(null==t||!t.port)throw new Error("PDFWorker.fromPort - invalid method signature.");return _classStaticPrivateFieldSpecGet(this,PDFWorker,_workerPorts).has(t.port)?_classStaticPrivateFieldSpecGet(this,PDFWorker,_workerPorts).get(t.port):new PDFWorker(t)}},{key:"workerSrc",get:function(){if(_worker_options.GlobalWorkerOptions.workerSrc)return _worker_options.GlobalWorkerOptions.workerSrc;if(null!==PDFWorkerUtil.fallbackWorkerSrc)return _is_node.isNodeJS||(0,_display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'),PDFWorkerUtil.fallbackWorkerSrc;throw new Error('No "GlobalWorkerOptions.workerSrc" specified.')}},{key:"_mainThreadWorkerMessageHandler",get:function(){try{var t;return(null===(t=globalThis.pdfjsWorker)||void 0===t?void 0:t.WorkerMessageHandler)||null}catch(t){return null}}},{key:"_setupFakeWorkerGlobal",get:function get(){var _this10=this,loader=function(){var _ref15=_asyncToGenerator(_regeneratorRuntime().mark((function _callee3(){var mainWorkerMessageHandler,worker;return _regeneratorRuntime().wrap((function _callee3$(_context3){for(;;)switch(_context3.prev=_context3.next){case 0:if(mainWorkerMessageHandler=_this10._mainThreadWorkerMessageHandler,!mainWorkerMessageHandler){_context3.next=3;break}return _context3.abrupt("return",mainWorkerMessageHandler);case 3:if(!_is_node.isNodeJS||"function"!=typeof require){_context3.next=6;break}return worker=eval("require")(_this10.workerSrc),_context3.abrupt("return",worker.WorkerMessageHandler);case 6:return _context3.next=8,(0,_display_utils.loadScript)(_this10.workerSrc);case 8:return _context3.abrupt("return",window.pdfjsWorker.WorkerMessageHandler);case 9:case"end":return _context3.stop()}}),_callee3)})));return function(){return _ref15.apply(this,arguments)}}();return(0,_util.shadow)(this,"_setupFakeWorkerGlobal",loader())}}]),PDFWorker}();exports.PDFWorker=PDFWorker;var _workerPorts={writable:!0,value:new WeakMap},_docStats=new WeakMap,_pageCache=new WeakMap,_pagePromises=new WeakMap,_metadataPromise=new WeakMap,WorkerTransport=function(){function t(e,r,n,i){_classCallCheck(this,t),_classPrivateFieldInitSpec(this,_docStats,{writable:!0,value:null}),_classPrivateFieldInitSpec(this,_pageCache,{writable:!0,value:new Map}),_classPrivateFieldInitSpec(this,_pagePromises,{writable:!0,value:new Map}),_classPrivateFieldInitSpec(this,_metadataPromise,{writable:!0,value:null}),this.messageHandler=e,this.loadingTask=r,this.commonObjs=new PDFObjects,this.fontLoader=new _font_loader.FontLoader({onUnsupportedFeature:this._onUnsupportedFeature.bind(this),ownerDocument:i.ownerDocument,styleElement:i.styleElement}),this._params=i,i.useWorkerFetch||(this.CMapReaderFactory=new i.CMapReaderFactory({baseUrl:i.cMapUrl,isCompressed:i.cMapPacked}),this.StandardFontDataFactory=new i.StandardFontDataFactory({baseUrl:i.standardFontDataUrl})),this.destroyed=!1,this.destroyCapability=null,this._passwordCapability=null,this._networkStream=n,this._fullReader=null,this._lastProgress=null,this.downloadInfoCapability=(0,_util.createPromiseCapability)(),this.setupMessageHandler()}var e;return _createClass(t,[{key:"annotationStorage",get:function(){return(0,_util.shadow)(this,"annotationStorage",new _annotation_storage.AnnotationStorage)}},{key:"stats",get:function(){return _classPrivateFieldGet(this,_docStats)}},{key:"getRenderingIntent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_util.AnnotationMode.ENABLE,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=_util.RenderingIntentFlag.DISPLAY,a=null;switch(t){case"any":i=_util.RenderingIntentFlag.ANY;break;case"display":break;case"print":i=_util.RenderingIntentFlag.PRINT;break;default:(0,_util.warn)("getRenderingIntent - invalid intent: ".concat(t))}switch(e){case _util.AnnotationMode.DISABLE:i+=_util.RenderingIntentFlag.ANNOTATIONS_DISABLE;break;case _util.AnnotationMode.ENABLE:break;case _util.AnnotationMode.ENABLE_FORMS:i+=_util.RenderingIntentFlag.ANNOTATIONS_FORMS;break;case _util.AnnotationMode.ENABLE_STORAGE:a=((i+=_util.RenderingIntentFlag.ANNOTATIONS_STORAGE)&_util.RenderingIntentFlag.PRINT&&r instanceof _annotation_storage.PrintAnnotationStorage?r:this.annotationStorage).serializable;break;default:(0,_util.warn)("getRenderingIntent - invalid annotationMode: ".concat(e))}return n&&(i+=_util.RenderingIntentFlag.OPLIST),{renderingIntent:i,cacheKey:"".concat(i,"_").concat(_annotation_storage.AnnotationStorage.getHash(a)),annotationStorageMap:a}}},{key:"destroy",value:function(){var t=this;if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=(0,_util.createPromiseCapability)(),this._passwordCapability&&this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));var e,r=[],n=_createForOfIteratorHelper(_classPrivateFieldGet(this,_pageCache).values());try{for(n.s();!(e=n.n()).done;){var i=e.value;r.push(i._destroy())}}catch(t){n.e(t)}finally{n.f()}_classPrivateFieldGet(this,_pageCache).clear(),_classPrivateFieldGet(this,_pagePromises).clear(),this.hasOwnProperty("annotationStorage")&&this.annotationStorage.resetModified();var a=this.messageHandler.sendWithPromise("Terminate",null);return r.push(a),Promise.all(r).then((function(){t.commonObjs.clear(),t.fontLoader.clear(),_classPrivateFieldSet(t,_metadataPromise,null),t._getFieldObjectsPromise=null,t._hasJSActionsPromise=null,t._networkStream&&t._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")),t.messageHandler&&(t.messageHandler.destroy(),t.messageHandler=null),t.destroyCapability.resolve()}),this.destroyCapability.reject),this.destroyCapability.promise}},{key:"setupMessageHandler",value:function(){var t=this,e=this.messageHandler,r=this.loadingTask;e.on("GetReader",(function(e,r){(0,_util.assert)(t._networkStream,"GetReader - no \`IPDFStream\` instance available."),t._fullReader=t._networkStream.getFullReader(),t._fullReader.onProgress=function(e){t._lastProgress={loaded:e.loaded,total:e.total}},r.onPull=function(){t._fullReader.read().then((function(t){var e=t.value;t.done?r.close():((0,_util.assert)((0,_util.isArrayBuffer)(e),"GetReader - expected an ArrayBuffer."),r.enqueue(new Uint8Array(e),1,[e]))})).catch((function(t){r.error(t)}))},r.onCancel=function(e){t._fullReader.cancel(e),r.ready.catch((function(e){if(!t.destroyed)throw e}))}})),e.on("ReaderHeadersReady",(function(e){var n=(0,_util.createPromiseCapability)(),i=t._fullReader;return i.headersReady.then((function(){var e;i.isStreamingSupported&&i.isRangeSupported||(t._lastProgress&&(null===(e=r.onProgress)||void 0===e||e.call(r,t._lastProgress)),i.onProgress=function(t){var e;null===(e=r.onProgress)||void 0===e||e.call(r,{loaded:t.loaded,total:t.total})}),n.resolve({isStreamingSupported:i.isStreamingSupported,isRangeSupported:i.isRangeSupported,contentLength:i.contentLength})}),n.reject),n.promise})),e.on("GetRangeReader",(function(e,r){(0,_util.assert)(t._networkStream,"GetRangeReader - no \`IPDFStream\` instance available.");var n=t._networkStream.getRangeReader(e.begin,e.end);n?(r.onPull=function(){n.read().then((function(t){var e=t.value;t.done?r.close():((0,_util.assert)((0,_util.isArrayBuffer)(e),"GetRangeReader - expected an ArrayBuffer."),r.enqueue(new Uint8Array(e),1,[e]))})).catch((function(t){r.error(t)}))},r.onCancel=function(e){n.cancel(e),r.ready.catch((function(e){if(!t.destroyed)throw e}))}):r.close()})),e.on("GetDoc",(function(e){var n=e.pdfInfo;t._numPages=n.numPages,t._htmlForXfa=n.htmlForXfa,delete n.htmlForXfa,r._capability.resolve(new PDFDocumentProxy(n,t))})),e.on("DocException",(function(t){var e;switch(t.name){case"PasswordException":e=new _util.PasswordException(t.message,t.code);break;case"InvalidPDFException":e=new _util.InvalidPDFException(t.message);break;case"MissingPDFException":e=new _util.MissingPDFException(t.message);break;case"UnexpectedResponseException":e=new _util.UnexpectedResponseException(t.message,t.status);break;case"UnknownErrorException":e=new _util.UnknownErrorException(t.message,t.details);break;default:(0,_util.unreachable)("DocException - expected a valid Error.")}r._capability.reject(e)})),e.on("PasswordRequest",(function(e){if(t._passwordCapability=(0,_util.createPromiseCapability)(),r.onPassword)try{r.onPassword((function(e){e instanceof Error?t._passwordCapability.reject(e):t._passwordCapability.resolve({password:e})}),e.code)}catch(e){t._passwordCapability.reject(e)}else t._passwordCapability.reject(new _util.PasswordException(e.message,e.code));return t._passwordCapability.promise})),e.on("DataLoaded",(function(e){var n;null===(n=r.onProgress)||void 0===n||n.call(r,{loaded:e.length,total:e.length}),t.downloadInfoCapability.resolve(e)})),e.on("StartRenderPage",(function(e){t.destroyed||_classPrivateFieldGet(t,_pageCache).get(e.pageIndex)._startRenderPage(e.transparency,e.cacheKey)})),e.on("commonobj",(function(r){var n,i=_slicedToArray(r,3),a=i[0],o=i[1],s=i[2];if(!t.destroyed&&!t.commonObjs.has(a))switch(o){case"Font":var l=t._params;if("error"in s){var u=s.error;(0,_util.warn)("Error during font loading: ".concat(u)),t.commonObjs.resolve(a,u);break}var c=null;l.pdfBug&&null!==(n=globalThis.FontInspector)&&void 0!==n&&n.enabled&&(c={registerFont:function(t,e){globalThis.FontInspector.fontAdded(t,e)}});var h=new _font_loader.FontFaceObject(s,{isEvalSupported:l.isEvalSupported,disableFontFace:l.disableFontFace,ignoreErrors:l.ignoreErrors,onUnsupportedFeature:t._onUnsupportedFeature.bind(t),fontRegistry:c});t.fontLoader.bind(h).catch((function(t){return e.sendWithPromise("FontFallback",{id:a})})).finally((function(){!l.fontExtraProperties&&h.data&&(h.data=null),t.commonObjs.resolve(a,h)}));break;case"FontPath":case"Image":t.commonObjs.resolve(a,s);break;default:throw new Error("Got unknown common object type ".concat(o))}})),e.on("obj",(function(e){var r=_slicedToArray(e,4),n=r[0],i=r[1],a=r[2],o=r[3];if(!t.destroyed){var s=_classPrivateFieldGet(t,_pageCache).get(i);if(!s.objs.has(n))switch(a){case"Image":if(s.objs.resolve(n,o),o){var l;if(o.bitmap){var u=o.bitmap;l=o.width*o.height*4,s._bitmaps.add(u)}else{var c;l=(null===(c=o.data)||void 0===c?void 0:c.length)||0}l>8e6&&(s.cleanupAfterRender=!0)}break;case"Pattern":s.objs.resolve(n,o);break;default:throw new Error("Got unknown object type ".concat(a))}}})),e.on("DocProgress",(function(e){var n;t.destroyed||null===(n=r.onProgress)||void 0===n||n.call(r,{loaded:e.loaded,total:e.total})})),e.on("DocStats",(function(e){t.destroyed||_classPrivateFieldSet(t,_docStats,Object.freeze({streamTypes:Object.freeze(e.streamTypes),fontTypes:Object.freeze(e.fontTypes)}))})),e.on("UnsupportedFeature",this._onUnsupportedFeature.bind(this)),e.on("FetchBuiltInCMap",(function(e){return t.destroyed?Promise.reject(new Error("Worker was destroyed.")):t.CMapReaderFactory?t.CMapReaderFactory.fetch(e):Promise.reject(new Error("CMapReaderFactory not initialized, see the \`useWorkerFetch\` parameter."))})),e.on("FetchStandardFontData",(function(e){return t.destroyed?Promise.reject(new Error("Worker was destroyed.")):t.StandardFontDataFactory?t.StandardFontDataFactory.fetch(e):Promise.reject(new Error("StandardFontDataFactory not initialized, see the \`useWorkerFetch\` parameter."))}))}},{key:"_onUnsupportedFeature",value:function(t){var e,r,n=t.featureId;this.destroyed||null===(e=(r=this.loadingTask).onUnsupportedFeature)||void 0===e||e.call(r,n)}},{key:"getData",value:function(){return this.messageHandler.sendWithPromise("GetData",null)}},{key:"saveDocument",value:function(){var t,e,r=this;return this.annotationStorage.size<=0&&(0,_util.warn)("saveDocument called while \`annotationStorage\` is empty, please use the getData-method instead."),this.messageHandler.sendWithPromise("SaveDocument",{isPureXfa:!!this._htmlForXfa,numPages:this._numPages,annotationStorage:this.annotationStorage.serializable,filename:null!==(t=null===(e=this._fullReader)||void 0===e?void 0:e.filename)&&void 0!==t?t:null}).finally((function(){r.annotationStorage.resetModified()}))}},{key:"getPage",value:function(t){var e=this;if(!Number.isInteger(t)||t<=0||t>this._numPages)return Promise.reject(new Error("Invalid page request."));var r=t-1,n=_classPrivateFieldGet(this,_pagePromises).get(r);if(n)return n;var i=this.messageHandler.sendWithPromise("GetPage",{pageIndex:r}).then((function(t){if(e.destroyed)throw new Error("Transport destroyed");var n=new PDFPageProxy(r,t,e,e._params.ownerDocument,e._params.pdfBug);return _classPrivateFieldGet(e,_pageCache).set(r,n),n}));return _classPrivateFieldGet(this,_pagePromises).set(r,i),i}},{key:"getPageIndex",value:function(t){return"object"!==_typeof(t)||null===t||!Number.isInteger(t.num)||t.num<0||!Number.isInteger(t.gen)||t.gen<0?Promise.reject(new Error("Invalid pageIndex request.")):this.messageHandler.sendWithPromise("GetPageIndex",{num:t.num,gen:t.gen})}},{key:"getAnnotations",value:function(t,e){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:t,intent:e})}},{key:"getFieldObjects",value:function(){return this._getFieldObjectsPromise||(this._getFieldObjectsPromise=this.messageHandler.sendWithPromise("GetFieldObjects",null))}},{key:"hasJSActions",value:function(){return this._hasJSActionsPromise||(this._hasJSActionsPromise=this.messageHandler.sendWithPromise("HasJSActions",null))}},{key:"getCalculationOrderIds",value:function(){return this.messageHandler.sendWithPromise("GetCalculationOrderIds",null)}},{key:"getDestinations",value:function(){return this.messageHandler.sendWithPromise("GetDestinations",null)}},{key:"getDestination",value:function(t){return"string"!=typeof t?Promise.reject(new Error("Invalid destination request.")):this.messageHandler.sendWithPromise("GetDestination",{id:t})}},{key:"getPageLabels",value:function(){return this.messageHandler.sendWithPromise("GetPageLabels",null)}},{key:"getPageLayout",value:function(){return this.messageHandler.sendWithPromise("GetPageLayout",null)}},{key:"getPageMode",value:function(){return this.messageHandler.sendWithPromise("GetPageMode",null)}},{key:"getViewerPreferences",value:function(){return this.messageHandler.sendWithPromise("GetViewerPreferences",null)}},{key:"getOpenAction",value:function(){return this.messageHandler.sendWithPromise("GetOpenAction",null)}},{key:"getAttachments",value:function(){return this.messageHandler.sendWithPromise("GetAttachments",null)}},{key:"getJavaScript",value:function(){return this.messageHandler.sendWithPromise("GetJavaScript",null)}},{key:"getDocJSActions",value:function(){return this.messageHandler.sendWithPromise("GetDocJSActions",null)}},{key:"getPageJSActions",value:function(t){return this.messageHandler.sendWithPromise("GetPageJSActions",{pageIndex:t})}},{key:"getStructTree",value:function(t){return this.messageHandler.sendWithPromise("GetStructTree",{pageIndex:t})}},{key:"getOutline",value:function(){return this.messageHandler.sendWithPromise("GetOutline",null)}},{key:"getOptionalContentConfig",value:function(){return this.messageHandler.sendWithPromise("GetOptionalContentConfig",null).then((function(t){return new _optional_content_config.OptionalContentConfig(t)}))}},{key:"getPermissions",value:function(){return this.messageHandler.sendWithPromise("GetPermissions",null)}},{key:"getMetadata",value:function(){var t=this;return _classPrivateFieldGet(this,_metadataPromise)||_classPrivateFieldSet(this,_metadataPromise,this.messageHandler.sendWithPromise("GetMetadata",null).then((function(e){var r,n,i,a;return{info:e[0],metadata:e[1]?new _metadata.Metadata(e[1]):null,contentDispositionFilename:null!==(r=null===(n=t._fullReader)||void 0===n?void 0:n.filename)&&void 0!==r?r:null,contentLength:null!==(i=null===(a=t._fullReader)||void 0===a?void 0:a.contentLength)&&void 0!==i?i:null}})))}},{key:"getMarkInfo",value:function(){return this.messageHandler.sendWithPromise("GetMarkInfo",null)}},{key:"startCleanup",value:(e=_asyncToGenerator(_regeneratorRuntime().mark((function t(){var e,r,n,i,a=arguments;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e=a.length>0&&void 0!==a[0]&&a[0],!this.destroyed){t.next=3;break}return t.abrupt("return");case 3:return t.next=5,this.messageHandler.sendWithPromise("Cleanup",null);case 5:r=_createForOfIteratorHelper(_classPrivateFieldGet(this,_pageCache).values()),t.prev=6,r.s();case 8:if((n=r.n()).done){t.next=15;break}if((i=n.value).cleanup()){t.next=13;break}throw new Error("startCleanup: Page ".concat(i.pageNumber," is currently rendering."));case 13:t.next=8;break;case 15:t.next=20;break;case 17:t.prev=17,t.t0=t.catch(6),r.e(t.t0);case 20:return t.prev=20,r.f(),t.finish(20);case 23:this.commonObjs.clear(),e||this.fontLoader.clear(),_classPrivateFieldSet(this,_metadataPromise,null),this._getFieldObjectsPromise=null,this._hasJSActionsPromise=null;case 28:case"end":return t.stop()}}),t,this,[[6,17,20,23]])}))),function(){return e.apply(this,arguments)})},{key:"loadingParams",get:function(){var t=this._params;return(0,_util.shadow)(this,"loadingParams",{disableAutoFetch:t.disableAutoFetch,enableXfa:t.enableXfa})}}]),t}(),_objs=new WeakMap,_ensureObj=new WeakSet,PDFObjects=function(){function t(){_classCallCheck(this,t),_classPrivateMethodInitSpec(this,_ensureObj),_classPrivateFieldInitSpec(this,_objs,{writable:!0,value:Object.create(null)})}return _createClass(t,[{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e){var r=_classPrivateMethodGet(this,_ensureObj,_ensureObj2).call(this,t);return r.capability.promise.then((function(){return e(r.data)})),null}var n=_classPrivateFieldGet(this,_objs)[t];if(null==n||!n.capability.settled)throw new Error("Requesting object that isn't resolved yet ".concat(t,"."));return n.data}},{key:"has",value:function(t){var e=_classPrivateFieldGet(this,_objs)[t];return(null==e?void 0:e.capability.settled)||!1}},{key:"resolve",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=_classPrivateMethodGet(this,_ensureObj,_ensureObj2).call(this,t);r.data=e,r.capability.resolve()}},{key:"clear",value:function(){_classPrivateFieldSet(this,_objs,Object.create(null))}}]),t}();function _ensureObj2(t){return _classPrivateFieldGet(this,_objs)[t]||(_classPrivateFieldGet(this,_objs)[t]={capability:(0,_util.createPromiseCapability)(),data:null})}var _internalRenderTask=new WeakMap,RenderTask=function(){function t(e){_classCallCheck(this,t),_classPrivateFieldInitSpec(this,_internalRenderTask,{writable:!0,value:null}),_classPrivateFieldSet(this,_internalRenderTask,e),this.onContinue=null}return _createClass(t,[{key:"promise",get:function(){return _classPrivateFieldGet(this,_internalRenderTask).capability.promise}},{key:"cancel",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;_classPrivateFieldGet(this,_internalRenderTask).cancel(null,t)}},{key:"separateAnnots",get:function(){var t=_classPrivateFieldGet(this,_internalRenderTask).operatorList.separateAnnots;if(!t)return!1;var e=_classPrivateFieldGet(this,_internalRenderTask).annotationCanvasMap;return t.form||t.canvas&&(null==e?void 0:e.size)>0}}]),t}();exports.RenderTask=RenderTask;var InternalRenderTask=function(){function t(e){var r=e.callback,n=e.params,i=e.objs,a=e.commonObjs,o=e.annotationCanvasMap,s=e.operatorList,l=e.pageIndex,u=e.canvasFactory,c=e.useRequestAnimationFrame,h=void 0!==c&&c,f=e.pdfBug,d=void 0!==f&&f,p=e.pageColors,v=void 0===p?null:p;_classCallCheck(this,t),this.callback=r,this.params=n,this.objs=i,this.commonObjs=a,this.annotationCanvasMap=o,this.operatorListIdx=null,this.operatorList=s,this._pageIndex=l,this.canvasFactory=u,this._pdfBug=d,this.pageColors=v,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this._useRequestAnimationFrame=!0===h&&"undefined"!=typeof window,this.cancelled=!1,this.capability=(0,_util.createPromiseCapability)(),this.task=new RenderTask(this),this._cancelBound=this.cancel.bind(this),this._continueBound=this._continue.bind(this),this._scheduleNextBound=this._scheduleNext.bind(this),this._nextBound=this._next.bind(this),this._canvas=n.canvasContext.canvas}var e;return _createClass(t,[{key:"completed",get:function(){return this.capability.promise.catch((function(){}))}},{key:"initializeGraphics",value:function(e){var r,n,i=e.transparency,a=void 0!==i&&i,o=e.optionalContentConfig;if(!this.cancelled){if(this._canvas){if(_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).has(this._canvas))throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.");_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).add(this._canvas)}this._pdfBug&&null!==(r=globalThis.StepperManager)&&void 0!==r&&r.enabled&&(this.stepper=globalThis.StepperManager.create(this._pageIndex),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());var s=this.params,l=s.canvasContext,u=s.viewport,c=s.transform,h=s.background;this.gfx=new _canvas.CanvasGraphics(l,this.commonObjs,this.objs,this.canvasFactory,{optionalContentConfig:o},this.annotationCanvasMap,this.pageColors),this.gfx.beginDrawing({transform:c,viewport:u,transparency:a,background:h}),this.operatorListIdx=0,this.graphicsReady=!0,null===(n=this.graphicsReadyCallback)||void 0===n||n.call(this)}}},{key:"cancel",value:function(){var e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.running=!1,this.cancelled=!0,null===(e=this.gfx)||void 0===e||e.endDrawing(),this._canvas&&_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).delete(this._canvas),this.callback(r||new _display_utils.RenderingCancelledException("Rendering cancelled, page ".concat(this._pageIndex+1),"canvas",n))}},{key:"operatorListChanged",value:function(){var t;this.graphicsReady?(null===(t=this.stepper)||void 0===t||t.updateOperatorList(this.operatorList),this.running||this._continue()):this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound)}},{key:"_continue",value:function(){this.running=!0,this.cancelled||(this.task.onContinue?this.task.onContinue(this._scheduleNextBound):this._scheduleNext())}},{key:"_scheduleNext",value:function(){var t=this;this._useRequestAnimationFrame?window.requestAnimationFrame((function(){t._nextBound().catch(t._cancelBound)})):Promise.resolve().then(this._nextBound).catch(this._cancelBound)}},{key:"_next",value:(e=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.cancelled){e.next=2;break}return e.abrupt("return");case 2:this.operatorListIdx=this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continueBound,this.stepper),this.operatorListIdx===this.operatorList.argsArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(),this._canvas&&_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).delete(this._canvas),this.callback()));case 4:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})}]),t}(),_canvasInUse={writable:!0,value:new WeakSet},version="3.2.0";exports.version=version;var build="";exports.build=build},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.PrintAnnotationStorage=e.AnnotationStorage=void 0;var i=r(1),a=r(135),o=r(139);function s(t,e){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},s(t,e)}function l(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||f(t,e)||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 h(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=f(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function f(t,e){if(t){if("string"==typeof t)return d(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(t,e):void 0}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0?(0,i.objectFromMap)(_(this,k)):null}},{key:"size",get:function(){return _(this,k).size}},{key:"resetModified",value:function(){_(this,A)&&(b(this,A,!1),"function"==typeof this.onResetModified&&this.onResetModified())}},{key:"print",get:function(){return new T(this)}},{key:"serializable",get:function(){if(0===_(this,k).size)return null;var t,e=new Map,r=h(_(this,k));try{for(r.s();!(t=r.n()).done;){var n=c(t.value,2),i=n[0],o=n[1],s=o instanceof a.AnnotationEditor?o.serialize():o;s&&e.set(i,s)}}catch(t){r.e(t)}finally{r.f()}return e}}],[{key:"getHash",value:function(t){if(!t)return"";var e,r=new o.MurmurHash3_64,n=h(t);try{for(n.s();!(e=n.n()).done;){var i=c(e.value,2),a=i[0],s=i[1];r.update("".concat(a,":").concat(JSON.stringify(s)))}}catch(t){n.e(t)}finally{n.f()}return r.hexdigest()}}]),t}();function E(){_(this,A)||(b(this,A,!0),"function"==typeof this.onSetModified&&this.onSetModified())}e.AnnotationStorage=x;var P=new WeakMap,T=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&s(t,e)}(o,t);var e,r,a=(e=o,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,i=u(e);if(r){var a=u(this).constructor;t=Reflect.construct(i,arguments,a)}else t=i.apply(this,arguments);return function(t,e){if(e&&("object"===n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return l(t)}(this,t)});function o(t){var e;return p(this,o),m(l(e=a.call(this)),P,{writable:!0,value:null}),b(l(e),P,structuredClone(t.serializable)),e}return y(o,[{key:"print",get:function(){(0,i.unreachable)("Should not call PrintAnnotationStorage.print")}},{key:"serializable",get:function(){return _(this,P)}}]),o}(x);e.PrintAnnotationStorage=T},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.AnnotationEditor=void 0;var i=r(136),a=r(1);function o(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||function(t,e){if(t){if("string"==typeof t)return s(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(t,e):void 0}}(t,e)||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 s(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.KeyboardManager=e.CommandManager=e.ColorManager=e.AnnotationEditorUIManager=void 0,e.bindEvents=function(t,e,r){var n,i=_(r);try{for(i.s();!(n=i.n()).done;){var a=n.value;e.addEventListener(a,t[a].bind(t))}}catch(t){i.e(t)}finally{i.f()}},e.opacityToHex=function(t){return Math.round(Math.min(255,Math.max(1,255*t))).toString(16).padStart(2,"0")};var i=r(1),a=r(137);function o(t){return function(t){if(Array.isArray(t))return A(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||w(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e,r){return(e=p(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||w(t,e)||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 u(t,e){y(t,e),e.add(t)}function c(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function f(t,e){for(var r=0;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function w(t,e){if(t){if("string"==typeof t)return A(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?A(t,e):void 0}}function A(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:128;h(this,t),v(this,x,{writable:!0,value:[]}),v(this,E,{writable:!0,value:!1}),v(this,P,{writable:!0,value:void 0}),v(this,T,{writable:!0,value:-1}),m(this,P,e)}return d(t,[{key:"add",value:function(t){var e=t.cmd,r=t.undo,n=t.mustExec,i=t.type,a=void 0===i?NaN:i,o=t.overwriteIfSameType,s=void 0!==o&&o,l=t.keepUndo,u=void 0!==l&&l;if(n&&e(),!g(this,E)){var c={cmd:e,undo:r,type:a};if(-1===g(this,T))return g(this,x).length>0&&(g(this,x).length=0),m(this,T,0),void g(this,x).push(c);if(s&&g(this,x)[g(this,T)].type===a)return u&&(c.undo=g(this,x)[g(this,T)].undo),void(g(this,x)[g(this,T)]=c);var h=g(this,T)+1;h===g(this,P)?g(this,x).splice(0,1):(m(this,T,h),h{Object.defineProperty(e,"__esModule",{value:!0}),e.StatTimer=e.RenderingCancelledException=e.PixelsPerInch=e.PageViewport=e.PDFDateString=e.DOMStandardFontDataFactory=e.DOMSVGFactory=e.DOMCanvasFactory=e.DOMCMapReaderFactory=e.AnnotationPrefix=void 0,e.deprecated=function(t){console.log("Deprecated API usage: "+t)},e.getColorValues=function(t){var e=document.createElement("span");e.style.visibility="hidden",document.body.append(e);var r,n=s(t.keys());try{for(n.s();!(r=n.n()).done;){var i=r.value;e.style.color=i;var a=window.getComputedStyle(e).color;t.set(i,I(a))}}catch(t){n.e(t)}finally{n.f()}e.remove()},e.getCurrentTransform=function(t){var e=t.getTransform();return[e.a,e.b,e.c,e.d,e.e,e.f]},e.getCurrentTransformInverse=function(t){var e=t.getTransform().invertSelf();return[e.a,e.b,e.c,e.d,e.e,e.f]},e.getFilenameFromUrl=function(t){if(!(arguments.length>1&&void 0!==arguments[1]&&arguments[1])){var e=t.split(/[#?]/,1);t=(1,function(t){if(Array.isArray(t))return t}(r=e)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{for(a=(r=r.call(t)).next,0;!(l=(n=a.call(r)).done)&&(s.push(n.value),1!==s.length);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(r)||l(r,1)||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.")}())[0]}var r;return t.substring(t.lastIndexOf("/")+1)},e.getPdfFilenameFromUrl=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"document.pdf";if("string"!=typeof t)return e;if(C(t))return(0,i.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'),e;var r=/[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i,n=/^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/.exec(t),a=r.exec(n[1])||r.exec(n[2])||r.exec(n[3]);if(a&&(a=a[0]).includes("%"))try{a=r.exec(decodeURIComponent(a))[0]}catch(t){}return a||e},e.getRGB=I,e.getXfaPageViewport=function(t,e){var r=e.scale,n=void 0===r?1:r,i=e.rotation,a=void 0===i?0:i,o=t.attributes.style,s=o.width,l=o.height,u=[0,0,parseInt(s),parseInt(l)];return new P({viewBox:u,scale:n,rotation:a})},e.isDataScheme=C,e.isPdfFile=function(t){return"string"==typeof t&&/\\.pdf$/i.test(t)},e.isValidFetchUrl=M,e.loadScript=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((function(r,n){var i=document.createElement("script");i.src=t,i.onload=function(t){e&&i.remove(),r(t)},i.onerror=function(){n(new Error("Cannot load script at: ".concat(i.src)))},(document.head||document.documentElement).append(i)}))},e.setLayerDimensions=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(e instanceof P){var i=e.rawDims,a=i.pageWidth,o=i.pageHeight,s=t.style,l="calc(var(--scale-factor) * ".concat(a,"px)"),u="calc(var(--scale-factor) * ".concat(o,"px)");r&&e.rotation%180!=0?(s.width=u,s.height=l):(s.width=l,s.height=u)}n&&t.setAttribute("data-main-rotation",e.rotation)};var n=r(138),i=r(1);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",l=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,s,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,s)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,s,l){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==o(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,s,l)}),(function(t){i("throw",t,s,l)})):e.resolve(h).then((function(t){c.value=t,s(c)}),(function(t){return i("throw",t,s,l)}))}l(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=l(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:{}).ownerDocument,i=void 0===n?globalThis.document:n;return m(this,r),(t=e.call(this))._document=i,t}return y(r,[{key:"_createCanvas",value:function(t,e){var r=this._document.createElement("canvas");return r.width=t,r.height=e,r}}]),r}(n.BaseCanvasFactory);function A(t){return k.apply(this,arguments)}function k(){var t;return t=a().mark((function t(e){var r,n,o=arguments;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=o.length>1&&void 0!==o[1]&&o[1],!M(e,document.baseURI)){t.next=21;break}return t.next=4,fetch(e);case 4:if((n=t.sent).ok){t.next=7;break}throw new Error(n.statusText);case 7:if(!r){t.next=15;break}return t.t1=Uint8Array,t.next=11,n.arrayBuffer();case 11:t.t2=t.sent,t.t0=new t.t1(t.t2),t.next=20;break;case 15:return t.t3=i.stringToBytes,t.next=18,n.text();case 18:t.t4=t.sent,t.t0=(0,t.t3)(t.t4);case 20:return t.abrupt("return",t.t0);case 21:return t.abrupt("return",new Promise((function(t,n){var a=new XMLHttpRequest;a.open("GET",e,!0),r&&(a.responseType="arraybuffer"),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE){var e;if((200===a.status||0===a.status)&&(r&&a.response?e=new Uint8Array(a.response):!r&&a.responseText&&(e=(0,i.stringToBytes)(a.responseText)),e))return void t(e);n(new Error(a.statusText))}},a.send(null)})));case 22:case"end":return t.stop()}}),t)})),k=function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function o(t){c(a,n,i,o,s,"next",t)}function s(t){c(a,n,i,o,s,"throw",t)}o(void 0)}))},k.apply(this,arguments)}e.DOMCanvasFactory=w;var S=function(t){h(r,t);var e=d(r);function r(){return m(this,r),e.apply(this,arguments)}return y(r,[{key:"_fetchData",value:function(t,e){return A(t,this.isCompressed).then((function(t){return{cMapData:t,compressionType:e}}))}}]),r}(n.BaseCMapReaderFactory);e.DOMCMapReaderFactory=S;var x=function(t){h(r,t);var e=d(r);function r(){return m(this,r),e.apply(this,arguments)}return y(r,[{key:"_fetchData",value:function(t){return A(t,!0)}}]),r}(n.BaseStandardFontDataFactory);e.DOMStandardFontDataFactory=x;var E=function(t){h(r,t);var e=d(r);function r(){return m(this,r),e.apply(this,arguments)}return y(r,[{key:"_createSVG",value:function(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}}]),r}(n.BaseSVGFactory);e.DOMSVGFactory=E;var P=function(){function t(e){var r=e.viewBox,n=e.scale,i=e.rotation,a=e.offsetX,o=void 0===a?0:a,s=e.offsetY,l=void 0===s?0:s,u=e.dontFlip,c=void 0!==u&&u;m(this,t),this.viewBox=r,this.scale=n,this.rotation=i,this.offsetX=o,this.offsetY=l;var h,f,d,p,v,y,g,b,_=(r[2]+r[0])/2,w=(r[3]+r[1])/2;switch((i%=360)<0&&(i+=360),i){case 180:h=-1,f=0,d=0,p=1;break;case 90:h=0,f=1,d=1,p=0;break;case 270:h=0,f=-1,d=-1,p=0;break;case 0:h=1,f=0,d=0,p=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}c&&(d=-d,p=-p),0===h?(v=Math.abs(w-r[1])*n+o,y=Math.abs(_-r[0])*n+l,g=(r[3]-r[1])*n,b=(r[2]-r[0])*n):(v=Math.abs(_-r[0])*n+o,y=Math.abs(w-r[1])*n+l,g=(r[2]-r[0])*n,b=(r[3]-r[1])*n),this.transform=[h*n,f*n,d*n,p*n,v-h*n*_-d*n*w,y-f*n*_-p*n*w],this.width=g,this.height=b}return y(t,[{key:"rawDims",get:function(){var t=this.viewBox;return(0,i.shadow)(this,"rawDims",{pageWidth:t[2]-t[0],pageHeight:t[3]-t[1],pageX:t[0],pageY:t[1]})}},{key:"clone",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.scale,n=void 0===r?this.scale:r,i=e.rotation,a=void 0===i?this.rotation:i,o=e.offsetX,s=void 0===o?this.offsetX:o,l=e.offsetY,u=void 0===l?this.offsetY:l,c=e.dontFlip,h=void 0!==c&&c;return new t({viewBox:this.viewBox.slice(),scale:n,rotation:a,offsetX:s,offsetY:u,dontFlip:h})}},{key:"convertToViewportPoint",value:function(t,e){return i.Util.applyTransform([t,e],this.transform)}},{key:"convertToViewportRectangle",value:function(t){var e=i.Util.applyTransform([t[0],t[1]],this.transform),r=i.Util.applyTransform([t[2],t[3]],this.transform);return[e[0],e[1],r[0],r[1]]}},{key:"convertToPdfPoint",value:function(t,e){return i.Util.applyInverseTransform([t,e],this.transform)}}]),t}();e.PageViewport=P;var T=function(t){h(r,t);var e=d(r);function r(t,n){var i,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return m(this,r),(i=e.call(this,t,"RenderingCancelledException")).type=n,i.extraDelay=a,i}return y(r)}(i.BaseException);function C(t){for(var e=t.length,r=0;r=1&&n<=12?n-1:0;var i=parseInt(e[3],10);i=i>=1&&i<=31?i:1;var a=parseInt(e[4],10);a=a>=0&&a<=23?a:0;var o=parseInt(e[5],10);o=o>=0&&o<=59?o:0;var s=parseInt(e[6],10);s=s>=0&&s<=59?s:0;var l=e[7]||"Z",u=parseInt(e[8],10);u=u>=0&&u<=23?u:0;var c=parseInt(e[9],10)||0;return c=c>=0&&c<=59?c:0,"-"===l?(a+=u,o+=c):"+"===l&&(a-=u,o-=c),new Date(Date.UTC(r,n,i,a,o,s))}}]),t}();function I(t){if(t.startsWith("#")){var e=parseInt(t.slice(1),16);return[(16711680&e)>>16,(65280&e)>>8,255&e]}return t.startsWith("rgb(")?t.slice(4,-1).split(",").map((function(t){return parseInt(t)})):t.startsWith("rgba(")?t.slice(5,-1).split(",").map((function(t){return parseInt(t)})).slice(0,3):((0,i.warn)('Not a valid color format: "'.concat(t,'"')),[0,0,0])}e.PDFDateString=R},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.BaseStandardFontDataFactory=e.BaseSVGFactory=e.BaseCanvasFactory=e.BaseCMapReaderFactory=void 0;var n=r(1);function i(){i=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,l){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==s(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,l)}),(function(t){i("throw",t,o,l)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,l)}))}l(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function a(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function o(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var o=t.apply(e,r);function s(t){a(o,n,i,s,l,"next",t)}function l(t){a(o,n,i,s,l,"throw",t)}s(void 0)}))}}function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function u(t,e){for(var r=0;r2&&void 0!==arguments[2]&&arguments[2];if(t<=0||e<=0)throw new Error("Invalid SVG dimensions");var n=this._createSVG("svg:svg");return n.setAttribute("version","1.1"),r||(n.setAttribute("width","".concat(t,"px")),n.setAttribute("height","".concat(e,"px"))),n.setAttribute("preserveAspectRatio","none"),n.setAttribute("viewBox","0 0 ".concat(t," ").concat(e)),n}},{key:"createElement",value:function(t){if("string"!=typeof t)throw new Error("Invalid SVG element type");return this._createSVG(t)}},{key:"_createSVG",value:function(t){(0,n.unreachable)("Abstract method \`_createSVG\` called.")}}]),t}();e.BaseSVGFactory=p},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.MurmurHash3_64=void 0;var n=r(1);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(t,e){for(var r=0;r>>8,e[r++]=255&o)}}else{if(!(0,n.isArrayBuffer)(t))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");r=(e=t.slice()).byteLength}for(var u=r>>2,c=r-4*u,h=new Uint32Array(e.buffer,0,u),f=0,d=0,p=this.h1,v=this.h2,y=3432918353,m=461845907,g=11601,b=13715,_=0;_>>17)*m&s|f*b&l)<<13|p>>>19)+3864292196:v=5*(v=(v^=d=(d=(d=(d=h[_])*y&s|d*g&l)<<15|d>>>17)*m&s|d*b&l)<<13|v>>>19)+3864292196;switch(f=0,c){case 3:f^=e[4*u+2]<<16;case 2:f^=e[4*u+1]<<8;case 1:f=(f=(f=(f^=e[4*u])*y&s|f*g&l)<<15|f>>>17)*m&s|f*b&l,1&u?p^=f:v^=f}this.h1=p,this.h2=v}},{key:"hexdigest",value:function(){var t=this.h1,e=this.h2;return t=3981806797*(t^=e>>>1)&s|36045*t&l,t=444984403*(t^=(e=4283543511*e&s|(2950163797*(e<<16|t>>>16)&s)>>>16)>>>1)&s|60499*t&l,((t^=(e=3301882366*e&s|(3120437893*(e<<16|t>>>16)&s)>>>16)>>>1)>>>0).toString(16).padStart(8,"0")+(e>>>0).toString(16).padStart(8,"0")}}])&&a(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.MurmurHash3_64=u},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FontLoader=e.FontFaceObject=void 0;var n=r(1),i=r(3);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function o(){o=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",l=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,s,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,s)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,o,s,l){var u=f(t[n],t,o);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==a(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,s,l)}),(function(t){i("throw",t,s,l)})):e.resolve(h).then((function(t){c.value=t,s(c)}),(function(t){return i("throw",t,s,l)}))}l(u.arg)}var o;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return o=o?o.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function s(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function l(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&e[0].done;){var t=e.shift();setTimeout(t.callback,0)}},callback:t};return e.push(r),r}},{key:"_loadTestFont",get:function(){var t=atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");return(0,n.shadow)(this,"_loadTestFont",t)}},{key:"_prepareFontLoadEvent",value:function(t,e){function r(t,e){return t.charCodeAt(e)<<24|t.charCodeAt(e+1)<<16|t.charCodeAt(e+2)<<8|255&t.charCodeAt(e+3)}function i(t,e,r,n){return t.substring(0,e)+n+t.substring(e+r)}var a,o,s=this._document.createElement("canvas");s.width=1,s.height=1;var l=s.getContext("2d"),u=0,c="lt".concat(Date.now()).concat(this.loadTestFontId++),h=this._loadTestFont,f=1482184792,d=r(h=i(h,976,c.length,c),16);for(a=0,o=c.length-3;a30)return(0,n.warn)("Load test font never loaded."),void r();l.font="30px "+e,l.fillText(".",0,20),l.getImageData(0,0,1,1).data[3]>0?r():setTimeout(t.bind(null,e,r))}(c,(function(){y.remove(),e.complete()}))}}]),t}();e.FontLoader=d;var p=function(){function t(e,r){var n=r.isEvalSupported,i=void 0===n||n,a=r.disableFontFace,o=void 0!==a&&a,s=r.ignoreErrors,l=void 0!==s&&s,u=r.onUnsupportedFeature,h=r.fontRegistry,f=void 0===h?null:h;for(var d in c(this,t),this.compiledGlyphs=Object.create(null),e)this[d]=e[d];this.isEvalSupported=!1!==i,this.disableFontFace=!0===o,this.ignoreErrors=!0===l,this._onUnsupportedFeature=u,this.fontRegistry=f}return f(t,[{key:"createNativeFontFace",value:function(){var t,e;if(!this.data||this.disableFontFace)return null;if(this.cssFontInfo){var r={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(r.style="oblique ".concat(this.cssFontInfo.italicAngle,"deg")),e=new FontFace(this.cssFontInfo.fontFamily,this.data,r)}else e=new FontFace(this.loadedName,this.data,{});return null===(t=this.fontRegistry)||void 0===t||t.registerFont(this),e}},{key:"createFontFaceRule",value:function(){var t;if(!this.data||this.disableFontFace)return null;var e,r=(0,n.bytesToString)(this.data),i="url(data:".concat(this.mimetype,";base64,").concat(btoa(r),");");if(this.cssFontInfo){var a="font-weight: ".concat(this.cssFontInfo.fontWeight,";");this.cssFontInfo.italicAngle&&(a+="font-style: oblique ".concat(this.cssFontInfo.italicAngle,"deg;")),e='@font-face {font-family:"'.concat(this.cssFontInfo.fontFamily,'";').concat(a,"src:").concat(i,"}")}else e='@font-face {font-family:"'.concat(this.loadedName,'";src:').concat(i,"}");return null===(t=this.fontRegistry)||void 0===t||t.registerFont(this,i),e}},{key:"getPathGenerator",value:function(t,e){if(void 0!==this.compiledGlyphs[e])return this.compiledGlyphs[e];var r;try{r=t.get(this.loadedName+"_path_"+e)}catch(t){if(!this.ignoreErrors)throw t;return this._onUnsupportedFeature({featureId:n.UNSUPPORTED_FEATURES.errorFontGetPath}),(0,n.warn)('getPathGenerator - ignoring character: "'.concat(t,'".')),this.compiledGlyphs[e]=function(t,e){}}if(this.isEvalSupported&&n.FeatureTest.isEvalSupported){var i,a=[],o=l(r);try{for(o.s();!(i=o.n()).done;){var s=i.value,u=void 0!==s.args?s.args.join(","):"";a.push("c.",s.cmd,"(",u,");\\n")}}catch(t){o.e(t)}finally{o.f()}return this.compiledGlyphs[e]=new Function("c","size",a.join(""))}return this.compiledGlyphs[e]=function(t,e){var n,i=l(r);try{for(i.s();!(n=i.n()).done;){var a=n.value;"scale"===a.cmd&&(a.args=[e,-e]),t[a.cmd].apply(t,a.args)}}catch(t){i.e(t)}finally{i.f()}}}}]),t}();e.FontFaceObject=p},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CanvasGraphics=void 0;var n=r(1),i=r(137),a=r(142),o=r(143),s=r(3);function l(t){return function(t){if(Array.isArray(t))return d(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||f(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function c(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=f(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function h(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||f(t,e)||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 f(t,e){if(t){if("string"==typeof t)return d(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(t,e):void 0}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:a.PathType.FILL,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=[this.minX,this.minY,this.maxX,this.maxY];if(t===a.PathType.STROKE){e||(0,n.unreachable)("Stroke bounding box must include transform.");var i=n.Util.singularValueDecompose2dScale(e),o=i[0]*this.lineWidth/2,s=i[1]*this.lineWidth/2;r[0]-=o,r[1]-=s,r[2]+=o,r[3]+=s}return r}},{key:"updateClipFromPath",value:function(){var t=n.Util.intersect(this.clipBox,this.getPathBoundingBox());this.startNewPathAndClipBox(t||[0,0,0,0])}},{key:"isEmptyClip",value:function(){return this.minX===1/0}},{key:"startNewPathAndClipBox",value:function(t){this.clipBox=t,this.minX=1/0,this.minY=1/0,this.maxX=0,this.maxY=0}},{key:"getClippedPathBoundingBox",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.PathType.FILL,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return n.Util.intersect(this.clipBox,this.getPathBoundingBox(t,e))}}]),t}();function S(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if("undefined"!=typeof ImageData&&e instanceof ImageData)t.putImageData(e,0,0);else{var i,a,o,s,l,u,c,h,f,d=e.height,p=e.width,v=d%_,y=(d-v)/_,m=0===v?y:y+1,g=t.createImageData(p,_),b=0,w=e.data,A=g.data;if(r)switch(r.length){case 1:u=r[0],c=r[0],h=r[0],f=r[0];break;case 4:u=r[0],c=r[1],h=r[2],f=r[3]}if(e.kind===n.ImageKind.GRAYSCALE_1BPP){var k=w.byteLength,S=new Uint32Array(A.buffer,0,A.byteLength>>2),x=S.length,E=p+7>>3,P=4294967295,T=n.FeatureTest.isLittleEndian?4278190080:255;if(f&&255===f[0]&&0===f[255]){var C=[T,P];P=C[0],T=C[1]}for(a=0;aE?p:8*O-7,R=-8&M,I=0,j=0;F>=1}for(;i=y&&(l=p*(s=v)),i=0,o=l;o--;)A[i++]=w[b++],A[i++]=w[b++],A[i++]=w[b++],A[i++]=255;if(U)for(var W=0;W>8,t[a-2]=t[a-2]*o+r*s>>8,t[a-1]=t[a-1]*o+n*s>>8}}}function C(t,e,r){for(var n=t.length,i=3;i>8]>>8:e[i]*a>>16}}function F(t,e){var r=n.Util.singularValueDecompose2dScale(t);r[0]=Math.fround(r[0]),r[1]=Math.fround(r[1]);var a=Math.fround((globalThis.devicePixelRatio||1)*i.PixelsPerInch.PDF_TO_CSS_UNITS);return void 0!==e?e:r[0]<=a||r[1]<=a}var M=["butt","round","square"],R=["miter","round","bevel"],I={},j={},L=new WeakSet,D=function(){function t(e,r,n,i,a,o,s){var l,u,c=a.optionalContentConfig,h=a.markedContentStack,f=void 0===h?null:h;v(this,t),function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}(l=this,u=L),u.add(l),this.ctx=e,this.current=new k(this.ctx.canvas.width,this.ctx.canvas.height),this.stateStack=[],this.pendingClip=null,this.pendingEOFill=!1,this.res=null,this.xobjs=null,this.commonObjs=r,this.objs=n,this.canvasFactory=i,this.groupStack=[],this.processingType3=null,this.baseTransform=null,this.baseTransformStack=[],this.groupLevel=0,this.smaskStack=[],this.smaskCounter=0,this.tempSMask=null,this.suspendedCtx=null,this.contentVisible=!0,this.markedContentStack=f||[],this.optionalContentConfig=c,this.cachedCanvases=new w(this.canvasFactory),this.cachedPatterns=new Map,this.annotationCanvasMap=o,this.viewportScale=1,this.outputScaleX=1,this.outputScaleY=1,this.backgroundColor=(null==s?void 0:s.background)||null,this.foregroundColor=(null==s?void 0:s.foreground)||null,this._cachedScaleForStroking=null,this._cachedGetSinglePixelWidth=null,this._cachedBitmapsMap=new Map}return m(t,[{key:"getObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return"string"==typeof t?t.startsWith("g_")?this.commonObjs.get(t):this.objs.get(t):e}},{key:"beginDrawing",value:function(t){var e,r,n=t.transform,a=t.viewport,o=t.transparency,s=void 0!==o&&o,u=t.background,c=void 0===u?null:u,f=this.ctx.canvas.width,d=this.ctx.canvas.height,p=c||"#ffffff";if(this.ctx.save(),this.foregroundColor&&this.backgroundColor){this.ctx.fillStyle=this.foregroundColor;var v=this.foregroundColor=this.ctx.fillStyle;this.ctx.fillStyle=this.backgroundColor;var y,m,g=this.backgroundColor=this.ctx.fillStyle;if(this.ctx.fillStyle=p,y="string"==typeof(m=this.ctx.fillStyle)&&/^#[0-9A-Fa-f]{6}$/.test(m),"#000000"===v&&"#ffffff"===g||v===g||!y)this.foregroundColor=this.backgroundColor=null;else{var b=h((0,i.getRGB)(m),3),_=b[0],w=b[1],A=b[2],k=function(t){return(t/=255)<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)},S=Math.round(.2126*k(_)+.7152*k(w)+.0722*k(A));this.selectColor=function(t,e,r){var n=.2126*k(t)+.7152*k(e)+.0722*k(r);return Math.round(n)===S?g:v}}}if(this.ctx.fillStyle=this.backgroundColor||p,this.ctx.fillRect(0,0,f,d),this.ctx.restore(),s){var x,E=this.cachedCanvases.getCanvas("transparent",f,d);this.compositeCtx=this.ctx,this.transparentCanvas=E.canvas,this.ctx=E.context,this.ctx.save(),(x=this.ctx).transform.apply(x,l((0,i.getCurrentTransform)(this.compositeCtx)))}this.ctx.save(),P(this.ctx,this.foregroundColor),n&&((r=this.ctx).transform.apply(r,l(n)),this.outputScaleX=n[0],this.outputScaleY=n[0]),(e=this.ctx).transform.apply(e,l(a.transform)),this.viewportScale=a.scale,this.baseTransform=(0,i.getCurrentTransform)(this.ctx)}},{key:"executeOperatorList",value:function(t,e,r,i){var a=t.argsArray,o=t.fnArray,s=e||0,l=a.length;if(l===s)return s;for(var u,h=l-s>10&&"function"==typeof r,f=h?Date.now()+15:0,d=0,p=this.commonObjs,v=this.objs;;){if(void 0!==i&&s===i.nextBreakPoint)return i.breakIt(s,r),s;if((u=o[s])!==n.OPS.dependency)this[u].apply(this,a[s]);else{var y,m=c(a[s]);try{for(m.s();!(y=m.n()).done;){var g=y.value,b=g.startsWith("g_")?p:v;if(!b.has(g))return b.get(g,r),s}}catch(t){m.e(t)}finally{m.f()}}if(++s===l)return s;if(h&&++d>10){if(Date.now()>f)return r(),s;d=0}}}},{key:"endDrawing",value:function(){u(this,L,N).call(this),this.cachedCanvases.clear(),this.cachedPatterns.clear();var t,e=c(this._cachedBitmapsMap.values());try{for(e.s();!(t=e.n()).done;){var r,n=t.value,i=c(n.values());try{for(i.s();!(r=i.n()).done;){var a=r.value;"undefined"!=typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement&&(a.width=a.height=0)}}catch(t){i.e(t)}finally{i.f()}n.clear()}}catch(t){e.e(t)}finally{e.f()}this._cachedBitmapsMap.clear()}},{key:"_scaleImage",value:function(t,e){for(var r,n,i=t.width,a=t.height,o=Math.max(Math.hypot(e[0],e[1]),1),s=Math.max(Math.hypot(e[2],e[3]),1),l=i,u=a,c="prescale1";o>2&&l>1||s>2&&u>1;){var h=l,f=u;o>2&&l>1&&(o/=l/(h=Math.ceil(l/2))),s>2&&u>1&&(s/=u/(f=Math.ceil(u/2))),(n=(r=this.cachedCanvases.getCanvas(c,h,f)).context).clearRect(0,0,h,f),n.drawImage(t,0,0,l,u,0,0,h,f),t=r.canvas,l=h,u=f,c="prescale1"===c?"prescale2":"prescale1"}return{img:t,paintWidth:l,paintHeight:u}}},{key:"_createMaskCanvas",value:function(t){var e,r,o,s,u=this.ctx,c=t.width,h=t.height,f=this.current.fillColor,d=this.current.patternFill,p=(0,i.getCurrentTransform)(u);if((t.bitmap||t.data)&&t.count>1){var v=t.bitmap||t.data.buffer;r=JSON.stringify(d?p:[p.slice(0,4),f]),(e=this._cachedBitmapsMap.get(v))||(e=new Map,this._cachedBitmapsMap.set(v,e));var y=e.get(r);if(y&&!d)return{canvas:y,offsetX:Math.round(Math.min(p[0],p[2])+p[4]),offsetY:Math.round(Math.min(p[1],p[3])+p[5])};o=y}o||x((s=this.cachedCanvases.getCanvas("maskCanvas",c,h)).context,t);var m=n.Util.transform(p,[1/c,0,0,-1/h,0,0]);m=n.Util.transform(m,[1,0,0,1,0,-h]);var g=n.Util.applyTransform([0,0],m),b=n.Util.applyTransform([c,h],m),_=n.Util.normalizeRect([g[0],g[1],b[0],b[1]]),w=Math.round(_[2]-_[0])||1,k=Math.round(_[3]-_[1])||1,S=this.cachedCanvases.getCanvas("fillCanvas",w,k),E=S.context,P=Math.min(g[0],b[0]),T=Math.min(g[1],b[1]);E.translate(-P,-T),E.transform.apply(E,l(m)),o||(o=(o=this._scaleImage(s.canvas,(0,i.getCurrentTransformInverse)(E))).img,e&&d&&e.set(r,o)),E.imageSmoothingEnabled=F((0,i.getCurrentTransform)(E),t.interpolate),A(E,o,0,0,o.width,o.height,0,0,c,h),E.globalCompositeOperation="source-in";var C=n.Util.transform((0,i.getCurrentTransformInverse)(E),[1,0,0,1,-P,-T]);return E.fillStyle=d?f.getPattern(u,this,C,a.PathType.FILL):f,E.fillRect(0,0,c,h),e&&!d&&(this.cachedCanvases.delete("fillCanvas"),e.set(r,S.canvas)),{canvas:S.canvas,offsetX:Math.round(P),offsetY:Math.round(T)}}},{key:"setLineWidth",value:function(t){t!==this.current.lineWidth&&(this._cachedScaleForStroking=null),this.current.lineWidth=t,this.ctx.lineWidth=t}},{key:"setLineCap",value:function(t){this.ctx.lineCap=M[t]}},{key:"setLineJoin",value:function(t){this.ctx.lineJoin=R[t]}},{key:"setMiterLimit",value:function(t){this.ctx.miterLimit=t}},{key:"setDash",value:function(t,e){var r=this.ctx;void 0!==r.setLineDash&&(r.setLineDash(t),r.lineDashOffset=e)}},{key:"setRenderingIntent",value:function(t){}},{key:"setFlatness",value:function(t){}},{key:"setGState",value:function(t){var e,r=c(t);try{for(r.s();!(e=r.n()).done;){var n=h(e.value,2),i=n[0],a=n[1];switch(i){case"LW":this.setLineWidth(a);break;case"LC":this.setLineCap(a);break;case"LJ":this.setLineJoin(a);break;case"ML":this.setMiterLimit(a);break;case"D":this.setDash(a[0],a[1]);break;case"RI":this.setRenderingIntent(a);break;case"FL":this.setFlatness(a);break;case"Font":this.setFont(a[0],a[1]);break;case"CA":this.current.strokeAlpha=a;break;case"ca":this.current.fillAlpha=a,this.ctx.globalAlpha=a;break;case"BM":this.ctx.globalCompositeOperation=a;break;case"SMask":this.current.activeSMask=a?this.tempSMask:null,this.tempSMask=null,this.checkSMaskState();break;case"TR":this.current.transferMaps=a}}}catch(t){r.e(t)}finally{r.f()}}},{key:"inSMaskMode",get:function(){return!!this.suspendedCtx}},{key:"checkSMaskState",value:function(){var t=this.inSMaskMode;this.current.activeSMask&&!t?this.beginSMaskMode():!this.current.activeSMask&&t&&this.endSMaskMode()}},{key:"beginSMaskMode",value:function(){if(this.inSMaskMode)throw new Error("beginSMaskMode called while already in smask mode");var t=this.ctx.canvas.width,e=this.ctx.canvas.height,r="smaskGroupAt"+this.groupLevel,n=this.cachedCanvases.getCanvas(r,t,e);this.suspendedCtx=this.ctx,this.ctx=n.context;var a=this.ctx;a.setTransform.apply(a,l((0,i.getCurrentTransform)(this.suspendedCtx))),E(this.suspendedCtx,a),function(t,e){if(t._removeMirroring)throw new Error("Context is already forwarding operations.");t.__originalSave=t.save,t.__originalRestore=t.restore,t.__originalRotate=t.rotate,t.__originalScale=t.scale,t.__originalTranslate=t.translate,t.__originalTransform=t.transform,t.__originalSetTransform=t.setTransform,t.__originalResetTransform=t.resetTransform,t.__originalClip=t.clip,t.__originalMoveTo=t.moveTo,t.__originalLineTo=t.lineTo,t.__originalBezierCurveTo=t.bezierCurveTo,t.__originalRect=t.rect,t.__originalClosePath=t.closePath,t.__originalBeginPath=t.beginPath,t._removeMirroring=function(){t.save=t.__originalSave,t.restore=t.__originalRestore,t.rotate=t.__originalRotate,t.scale=t.__originalScale,t.translate=t.__originalTranslate,t.transform=t.__originalTransform,t.setTransform=t.__originalSetTransform,t.resetTransform=t.__originalResetTransform,t.clip=t.__originalClip,t.moveTo=t.__originalMoveTo,t.lineTo=t.__originalLineTo,t.bezierCurveTo=t.__originalBezierCurveTo,t.rect=t.__originalRect,t.closePath=t.__originalClosePath,t.beginPath=t.__originalBeginPath,delete t._removeMirroring},t.save=function(){e.save(),this.__originalSave()},t.restore=function(){e.restore(),this.__originalRestore()},t.translate=function(t,r){e.translate(t,r),this.__originalTranslate(t,r)},t.scale=function(t,r){e.scale(t,r),this.__originalScale(t,r)},t.transform=function(t,r,n,i,a,o){e.transform(t,r,n,i,a,o),this.__originalTransform(t,r,n,i,a,o)},t.setTransform=function(t,r,n,i,a,o){e.setTransform(t,r,n,i,a,o),this.__originalSetTransform(t,r,n,i,a,o)},t.resetTransform=function(){e.resetTransform(),this.__originalResetTransform()},t.rotate=function(t){e.rotate(t),this.__originalRotate(t)},t.clip=function(t){e.clip(t),this.__originalClip(t)},t.moveTo=function(t,r){e.moveTo(t,r),this.__originalMoveTo(t,r)},t.lineTo=function(t,r){e.lineTo(t,r),this.__originalLineTo(t,r)},t.bezierCurveTo=function(t,r,n,i,a,o){e.bezierCurveTo(t,r,n,i,a,o),this.__originalBezierCurveTo(t,r,n,i,a,o)},t.rect=function(t,r,n,i){e.rect(t,r,n,i),this.__originalRect(t,r,n,i)},t.closePath=function(){e.closePath(),this.__originalClosePath()},t.beginPath=function(){e.beginPath(),this.__originalBeginPath()}}(a,this.suspendedCtx),this.setGState([["BM","source-over"],["ca",1],["CA",1]])}},{key:"endSMaskMode",value:function(){if(!this.inSMaskMode)throw new Error("endSMaskMode called while not in smask mode");this.ctx._removeMirroring(),E(this.ctx,this.suspendedCtx),this.ctx=this.suspendedCtx,this.suspendedCtx=null}},{key:"compose",value:function(t){if(this.current.activeSMask){t?(t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.ceil(t[2]),t[3]=Math.ceil(t[3])):t=[0,0,this.ctx.canvas.width,this.ctx.canvas.height];var e=this.current.activeSMask;(function(t,e,r,n){var i=n[0],a=n[1],o=n[2]-i,s=n[3]-a;0!==o&&0!==s&&(function(t,e,r,n,i,a,o,s,l,u,c){var h,f=!!a,d=f?a[0]:0,p=f?a[1]:0,v=f?a[2]:0;h="Luminosity"===i?O:C;for(var y=Math.min(n,Math.ceil(1048576/r)),m=0;m0&&void 0!==arguments[0])||arguments[0],e=this.ctx,r=this.current.strokeColor;e.globalAlpha=this.current.strokeAlpha,this.contentVisible&&("object"===p(r)&&null!=r&&r.getPattern?(e.save(),e.strokeStyle=r.getPattern(e,this,(0,i.getCurrentTransformInverse)(e),a.PathType.STROKE),this.rescaleAndStroke(!1),e.restore()):this.rescaleAndStroke(!0)),t&&this.consumePath(this.current.getClippedPathBoundingBox()),e.globalAlpha=this.current.fillAlpha}},{key:"closeStroke",value:function(){this.closePath(),this.stroke()}},{key:"fill",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=this.ctx,r=this.current.fillColor,n=!1;this.current.patternFill&&(e.save(),e.fillStyle=r.getPattern(e,this,(0,i.getCurrentTransformInverse)(e),a.PathType.FILL),n=!0);var o=this.current.getClippedPathBoundingBox();this.contentVisible&&null!==o&&(this.pendingEOFill?(e.fill("evenodd"),this.pendingEOFill=!1):e.fill()),n&&e.restore(),t&&this.consumePath(o)}},{key:"eoFill",value:function(){this.pendingEOFill=!0,this.fill()}},{key:"fillStroke",value:function(){this.fill(!1),this.stroke(!1),this.consumePath()}},{key:"eoFillStroke",value:function(){this.pendingEOFill=!0,this.fillStroke()}},{key:"closeFillStroke",value:function(){this.closePath(),this.fillStroke()}},{key:"closeEOFillStroke",value:function(){this.pendingEOFill=!0,this.closePath(),this.fillStroke()}},{key:"endPath",value:function(){this.consumePath()}},{key:"clip",value:function(){this.pendingClip=I}},{key:"eoClip",value:function(){this.pendingClip=j}},{key:"beginText",value:function(){this.current.textMatrix=n.IDENTITY_MATRIX,this.current.textMatrixScale=1,this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}},{key:"endText",value:function(){var t=this.pendingTextPaths,e=this.ctx;if(void 0!==t){e.save(),e.beginPath();var r,n=c(t);try{for(n.s();!(r=n.n()).done;){var i=r.value;e.setTransform.apply(e,l(i.transform)),e.translate(i.x,i.y),i.addToPath(e,i.fontSize)}}catch(t){n.e(t)}finally{n.f()}e.restore(),e.clip(),e.beginPath(),delete this.pendingTextPaths}else e.beginPath()}},{key:"setCharSpacing",value:function(t){this.current.charSpacing=t}},{key:"setWordSpacing",value:function(t){this.current.wordSpacing=t}},{key:"setHScale",value:function(t){this.current.textHScale=t/100}},{key:"setLeading",value:function(t){this.current.leading=-t}},{key:"setFont",value:function(t,e){var r=this.commonObjs.get(t),i=this.current;if(!r)throw new Error("Can't find font for ".concat(t));if(i.fontMatrix=r.fontMatrix||n.FONT_IDENTITY_MATRIX,0!==i.fontMatrix[0]&&0!==i.fontMatrix[3]||(0,n.warn)("Invalid font matrix for font "+t),e<0?(e=-e,i.fontDirection=-1):i.fontDirection=1,this.current.font=r,this.current.fontSize=e,!r.isType3Font){var a=r.loadedName||"sans-serif",o="normal";r.black?o="900":r.bold&&(o="bold");var s=r.italic?"italic":"normal",l='"'.concat(a,'", ').concat(r.fallbackName),u=e;e<16?u=16:e>100&&(u=100),this.current.fontSizeScale=e/u,this.ctx.font="".concat(s," ").concat(o," ").concat(u,"px ").concat(l)}}},{key:"setTextRenderingMode",value:function(t){this.current.textRenderingMode=t}},{key:"setTextRise",value:function(t){this.current.textRise=t}},{key:"moveText",value:function(t,e){this.current.x=this.current.lineX+=t,this.current.y=this.current.lineY+=e}},{key:"setLeadingMoveText",value:function(t,e){this.setLeading(-e),this.moveText(t,e)}},{key:"setTextMatrix",value:function(t,e,r,n,i,a){this.current.textMatrix=[t,e,r,n,i,a],this.current.textMatrixScale=Math.hypot(t,e),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}},{key:"nextLine",value:function(){this.moveText(0,this.current.leading)}},{key:"paintChar",value:function(t,e,r,a){var o,s=this.ctx,u=this.current,c=u.font,h=u.textRenderingMode,f=u.fontSize/u.fontSizeScale,d=h&n.TextRenderingMode.FILL_STROKE_MASK,p=!!(h&n.TextRenderingMode.ADD_TO_PATH_FLAG),v=u.patternFill&&!c.missingFile;(c.disableFontFace||p||v)&&(o=c.getPathGenerator(this.commonObjs,t)),c.disableFontFace||v?(s.save(),s.translate(e,r),s.beginPath(),o(s,f),a&&s.setTransform.apply(s,l(a)),d!==n.TextRenderingMode.FILL&&d!==n.TextRenderingMode.FILL_STROKE||s.fill(),d!==n.TextRenderingMode.STROKE&&d!==n.TextRenderingMode.FILL_STROKE||s.stroke(),s.restore()):(d!==n.TextRenderingMode.FILL&&d!==n.TextRenderingMode.FILL_STROKE||s.fillText(t,e,r),d!==n.TextRenderingMode.STROKE&&d!==n.TextRenderingMode.FILL_STROKE||s.strokeText(t,e,r)),p&&(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:(0,i.getCurrentTransform)(s),x:e,y:r,fontSize:f,addToPath:o})}},{key:"isFontSubpixelAAEnabled",get:function(){var t=this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled",10,10).context;t.scale(1.5,1),t.fillText("I",0,10);for(var e=t.getImageData(0,0,10,10).data,r=!1,i=3;i0&&e[i]<255){r=!0;break}return(0,n.shadow)(this,"isFontSubpixelAAEnabled",r)}},{key:"showText",value:function(t){var e=this.current,r=e.font;if(r.isType3Font)return this.showType3Text(t);var o=e.fontSize;if(0!==o){var s,u=this.ctx,h=e.fontSizeScale,f=e.charSpacing,d=e.wordSpacing,p=e.fontDirection,v=e.textHScale*p,y=t.length,m=r.vertical,g=m?1:-1,b=r.defaultVMetrics,_=o*e.fontMatrix[0],w=e.textRenderingMode===n.TextRenderingMode.FILL&&!r.disableFontFace&&!e.patternFill;if(u.save(),u.transform.apply(u,l(e.textMatrix)),u.translate(e.x,e.y+e.textRise),p>0?u.scale(v,-1):u.scale(v,1),e.patternFill){u.save();var A=e.fillColor.getPattern(u,this,(0,i.getCurrentTransformInverse)(u),a.PathType.FILL);s=(0,i.getCurrentTransform)(u),u.restore(),u.fillStyle=A}var k=e.lineWidth,S=e.textMatrixScale;if(0===S||0===k){var x=e.textRenderingMode&n.TextRenderingMode.FILL_STROKE_MASK;x!==n.TextRenderingMode.STROKE&&x!==n.TextRenderingMode.FILL_STROKE||(k=this.getSinglePixelWidth())}else k/=S;if(1!==h&&(u.scale(h,h),k/=h),u.lineWidth=k,r.isInvalidPDFjsFont){var E,P=[],T=0,C=c(t);try{for(C.s();!(E=C.n()).done;){var O=E.value;P.push(O.unicode),T+=O.width}}catch(t){C.e(t)}finally{C.f()}return u.fillText(P.join(""),0,0),e.x+=T*_*v,u.restore(),void this.compose()}var F,M=0;for(F=0;F0){var H=1e3*u.measureText(L).width/o*h;if(W1&&void 0!==arguments[1]?arguments[1]:null;return this.cachedPatterns.has(t)?e=this.cachedPatterns.get(t):(e=(0,a.getShadingPattern)(this.objs.get(t)),this.cachedPatterns.set(t,e)),r&&(e.matrix=r),e}},{key:"shadingFill",value:function(t){if(this.contentVisible){var e=this.ctx;this.save();var r=this._getPattern(t);e.fillStyle=r.getPattern(e,this,(0,i.getCurrentTransformInverse)(e),a.PathType.SHADING);var o=(0,i.getCurrentTransformInverse)(e);if(o){var s=e.canvas,l=s.width,u=s.height,c=n.Util.applyTransform([0,0],o),h=n.Util.applyTransform([0,u],o),f=n.Util.applyTransform([l,0],o),d=n.Util.applyTransform([l,u],o),p=Math.min(c[0],h[0],f[0],d[0]),v=Math.min(c[1],h[1],f[1],d[1]),y=Math.max(c[0],h[0],f[0],d[0]),m=Math.max(c[1],h[1],f[1],d[1]);this.ctx.fillRect(p,v,y-p,m-v)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.compose(this.current.getClippedPathBoundingBox()),this.restore()}}},{key:"beginInlineImage",value:function(){(0,n.unreachable)("Should not call beginInlineImage")}},{key:"beginImageData",value:function(){(0,n.unreachable)("Should not call beginImageData")}},{key:"paintFormXObjectBegin",value:function(t,e){if(this.contentVisible&&(this.save(),this.baseTransformStack.push(this.baseTransform),Array.isArray(t)&&6===t.length&&this.transform.apply(this,l(t)),this.baseTransform=(0,i.getCurrentTransform)(this.ctx),e)){var r=e[2]-e[0],n=e[3]-e[1];this.ctx.rect(e[0],e[1],r,n),this.current.updateRectMinMax((0,i.getCurrentTransform)(this.ctx),e),this.clip(),this.endPath()}}},{key:"paintFormXObjectEnd",value:function(){this.contentVisible&&(this.restore(),this.baseTransform=this.baseTransformStack.pop())}},{key:"beginGroup",value:function(t){if(this.contentVisible){this.save(),this.inSMaskMode&&(this.endSMaskMode(),this.current.activeSMask=null);var e=this.ctx;t.isolated||(0,n.info)("TODO: Support non-isolated groups."),t.knockout&&(0,n.warn)("Knockout groups not supported.");var r=(0,i.getCurrentTransform)(e);if(t.matrix&&e.transform.apply(e,l(t.matrix)),!t.bbox)throw new Error("Bounding box is required.");var a=n.Util.getAxialAlignedBoundingBox(t.bbox,(0,i.getCurrentTransform)(e)),o=[0,0,e.canvas.width,e.canvas.height];a=n.Util.intersect(a,o)||[0,0,0,0];var s=Math.floor(a[0]),u=Math.floor(a[1]),c=Math.max(Math.ceil(a[2])-s,1),h=Math.max(Math.ceil(a[3])-u,1),f=1,d=1;c>g&&(f=c/g,c=g),h>g&&(d=h/g,h=g),this.current.startNewPathAndClipBox([0,0,c,h]);var p="groupAt"+this.groupLevel;t.smask&&(p+="_smask_"+this.smaskCounter++%2);var v=this.cachedCanvases.getCanvas(p,c,h),y=v.context;y.scale(1/f,1/d),y.translate(-s,-u),y.transform.apply(y,l(r)),t.smask?this.smaskStack.push({canvas:v.canvas,context:y,offsetX:s,offsetY:u,scaleX:f,scaleY:d,subtype:t.smask.subtype,backdrop:t.smask.backdrop,transferMap:t.smask.transferMap||null,startTransformInverse:null}):(e.setTransform(1,0,0,1,0,0),e.translate(s,u),e.scale(f,d),e.save()),E(e,y),this.ctx=y,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(e),this.groupLevel++}}},{key:"endGroup",value:function(t){if(this.contentVisible){this.groupLevel--;var e=this.ctx,r=this.groupStack.pop();if(this.ctx=r,this.ctx.imageSmoothingEnabled=!1,t.smask)this.tempSMask=this.smaskStack.pop(),this.restore();else{var a;this.ctx.restore();var o=(0,i.getCurrentTransform)(this.ctx);this.restore(),this.ctx.save(),(a=this.ctx).setTransform.apply(a,l(o));var s=n.Util.getAxialAlignedBoundingBox([0,0,e.canvas.width,e.canvas.height],o);this.ctx.drawImage(e.canvas,0,0),this.ctx.restore(),this.compose(s)}}}},{key:"beginAnnotation",value:function(t,e,r,a,o){var s;if(u(this,L,N).call(this),P(this.ctx,this.foregroundColor),this.ctx.save(),this.save(),this.baseTransform&&(s=this.ctx).setTransform.apply(s,l(this.baseTransform)),Array.isArray(e)&&4===e.length){var c=e[2]-e[0],f=e[3]-e[1];if(o&&this.annotationCanvasMap){(r=r.slice())[4]-=e[0],r[5]-=e[1],(e=e.slice())[0]=e[1]=0,e[2]=c,e[3]=f;var d=h(n.Util.singularValueDecompose2dScale((0,i.getCurrentTransform)(this.ctx)),2),p=d[0],v=d[1],y=this.viewportScale,m=Math.ceil(c*this.outputScaleX*y),g=Math.ceil(f*this.outputScaleY*y);this.annotationCanvas=this.canvasFactory.create(m,g);var b=this.annotationCanvas,_=b.canvas,w=b.context;this.annotationCanvasMap.set(t,_),this.annotationCanvas.savedCtx=this.ctx,this.ctx=w,this.ctx.setTransform(p,0,0,-v,0,f*v),P(this.ctx,this.foregroundColor)}else P(this.ctx,this.foregroundColor),this.ctx.rect(e[0],e[1],c,f),this.ctx.clip(),this.endPath()}this.current=new k(this.ctx.canvas.width,this.ctx.canvas.height),this.transform.apply(this,l(r)),this.transform.apply(this,l(a))}},{key:"endAnnotation",value:function(){this.annotationCanvas&&(this.ctx=this.annotationCanvas.savedCtx,delete this.annotationCanvas.savedCtx,delete this.annotationCanvas)}},{key:"paintImageMaskXObject",value:function(t){if(this.contentVisible){var e=t.count;(t=this.getObject(t.data,t)).count=e;var r=this.ctx,n=this.processingType3;if(n&&(void 0===n.compiled&&(n.compiled=function(t){var e=t.width,r=t.height;if(e>b||r>b)return null;var n,i,a,o,s=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),l=e+1,u=new Uint8Array(l*(r+1)),h=e+7&-8,f=new Uint8Array(h*r),d=0,p=c(t.data);try{for(p.s();!(o=p.n()).done;)for(var v=o.value,y=128;y>0;)f[d++]=v&y?0:255,y>>=1}catch(t){p.e(t)}finally{p.f()}var m=0;for(0!==f[d=0]&&(u[0]=1,++m),i=1;i>2)+(f[d+1]?4:0)+(f[d-h+1]?8:0)]&&(u[a+i]=s[g],++m),d++;if(f[d-h]!==f[d]&&(u[a+i]=f[d]?2:4,++m),m>1e3)return null}for(a=n*l,0!==f[d=h*(r-1)]&&(u[a]=8,++m),i=1;i1e3)return null;var _=new Int32Array([0,l,-1,0,-l,0,0,0,1]),w=new Path2D;for(n=0;m&&n<=r;n++){for(var A=n*l,k=A+e;A>4,u[A]&=x>>2|x<<2),w.lineTo(A%l,A/l|0),u[A]||--m}while(S!==A);--n}}return f=null,u=null,function(t){t.save(),t.scale(1/e,-1/r),t.translate(0,-r),t.fill(w),t.beginPath(),t.restore()}}(t)),n.compiled))n.compiled(r);else{var i=this._createMaskCanvas(t),a=i.canvas;r.save(),r.setTransform(1,0,0,1,0,0),r.drawImage(a,i.offsetX,i.offsetY),r.restore(),this.compose()}}}},{key:"paintImageMaskXObjectRepeat",value:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4?arguments[4]:void 0,s=arguments.length>5?arguments[5]:void 0;if(this.contentVisible){t=this.getObject(t.data,t);var l=this.ctx;l.save();var u=(0,i.getCurrentTransform)(l);l.transform(e,r,a,o,0,0);var c=this._createMaskCanvas(t);l.setTransform(1,0,0,1,c.offsetX-u[4],c.offsetY-u[5]);for(var f=0,d=s.length;ff?h/f:1,e=c>f?c/f:1}}this._cachedScaleForStroking=[t,e]}return this._cachedScaleForStroking}},{key:"rescaleAndStroke",value:function(t){var e=this.ctx,r=this.current.lineWidth,n=h(this.getScaleForStroking(),2),a=n[0],o=n[1];if(e.lineWidth=r||1,1!==a||1!==o){var s,u,c;t&&(s=(0,i.getCurrentTransform)(e),u=e.getLineDash().slice(),c=e.lineDashOffset),e.scale(a,o);var f=Math.max(a,o);e.setLineDash(e.getLineDash().map((function(t){return t/f}))),e.lineDashOffset/=f,e.stroke(),t&&(e.setTransform.apply(e,l(s)),e.setLineDash(u),e.lineDashOffset=c)}else e.stroke()}},{key:"isContentVisible",value:function(){for(var t=this.markedContentStack.length-1;t>=0;t--)if(!this.markedContentStack[t].visible)return!1;return!0}}]),t}();function N(){for(;this.stateStack.length||this.inSMaskMode;)this.restore();this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null)}for(var U in e.CanvasGraphics=D,n.OPS)void 0!==D.prototype[U]&&(D.prototype[n.OPS[U]]=D.prototype[U])},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.TilingPattern=e.PathType=void 0,e.getShadingPattern=function(t){switch(t[0]){case"RadialAxial":return new w(t);case"Mesh":return new S(t);case"Dummy":return new x}throw new Error("Unknown IR type: ".concat(t[0]))};var n=r(1),i=r(137),a=r(3);function o(t){return function(t){if(Array.isArray(t))return u(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||l(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=l(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);ru[n+1]&&(l=r,r=n,n=l,l=a,a=o,o=l),u[n+1]>u[i+1]&&(l=n,n=i,i=l,l=o,o=s,s=l),u[r+1]>u[n+1]&&(l=r,r=n,n=l,l=a,a=o,o=l);var d=(u[r]+e.offsetX)*e.scaleX,p=(u[r+1]+e.offsetY)*e.scaleY,v=(u[n]+e.offsetX)*e.scaleX,y=(u[n+1]+e.offsetY)*e.scaleY,m=(u[i]+e.offsetX)*e.scaleX,g=(u[i+1]+e.offsetY)*e.scaleY;if(!(p>=g))for(var b,_,w,A,k,S,x,E,P=c[a],T=c[a+1],C=c[a+2],O=c[o],F=c[o+1],M=c[o+2],R=c[s],I=c[s+1],j=c[s+2],L=Math.round(p),D=Math.round(g),N=L;N<=D;N++){if(Ng?1:y===g?0:(y-N)/(y-g)),_=O-(O-R)*W,w=F-(F-I)*W,A=M-(M-j)*W}var G=void 0;k=d-(d-m)*(G=Ng?1:(p-N)/(p-g)),S=P-(P-R)*G,x=T-(T-I)*G,E=C-(C-j)*G;for(var B=Math.round(Math.min(b,k)),q=Math.round(Math.max(b,k)),H=f*N+4*B,z=B;z<=q;z++)(G=(b-z)/(b-k))<0?G=0:G>1&&(G=1),h[H++]=_-(_-S)*G|0,h[H++]=w-(w-x)*G|0,h[H++]=A-(A-E)*G|0,h[H++]=255}}function k(t,e,r){var n,i,a=e.coords,o=e.colors;switch(e.type){case"lattice":var s=e.verticesPerRow,l=Math.floor(a.length/s)-1,u=s-1;for(n=0;n=i?a=i:n=a/e,{scale:n,size:a}}},{key:"clipBbox",value:function(t,e,r,n,a){var o=n-e,s=a-r;t.ctx.rect(e,r,o,s),t.current.updateRectMinMax((0,i.getCurrentTransform)(t.ctx),[e,r,n,a]),t.clip(),t.endPath()}},{key:"setFillAndStrokeStyleToContext",value:function(t,e,r){var i=t.ctx,a=t.current;switch(e){case 1:var o=this.ctx;i.fillStyle=o.fillStyle,i.strokeStyle=o.strokeStyle,a.fillColor=o.fillStyle,a.strokeColor=o.strokeStyle;break;case 2:var s=n.Util.makeHexColor(r[0],r[1],r[2]);i.fillStyle=s,i.strokeStyle=s,a.fillColor=s,a.strokeColor=s;break;default:throw new n.FormatError("Unsupported paint type: ".concat(e))}}},{key:"getPattern",value:function(t,e,r,i){var a=r;i!==g.SHADING&&(a=n.Util.transform(a,e.baseTransform),this.matrix&&(a=n.Util.transform(a,this.matrix)));var o=this.createPatternCanvas(e),s=new DOMMatrix(a);s=(s=s.translate(o.offsetX,o.offsetY)).scale(1/o.scaleX,1/o.scaleY);var l=t.createPattern(o.canvas,"repeat");return l.setTransform(s),l}}],[{key:"MAX_PATTERN_SIZE",get:function(){return(0,n.shadow)(this,"MAX_PATTERN_SIZE",3e3)}}]),t}();e.TilingPattern=E},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.applyMaskImageData=function(t){var e,r=t.src,a=t.srcPos,o=void 0===a?0:a,s=t.dest,l=t.destPos,u=void 0===l?0:l,c=t.width,h=t.height,f=t.inverseDecode,d=void 0!==f&&f,p=n.FeatureTest.isLittleEndian?4278190080:255,v=function(t){if(Array.isArray(t))return t}(e=d?[0,p]:[p,0])||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{for(a=(r=r.call(t)).next;!(l=(n=a.call(r)).done)&&(s.push(n.value),2!==s.length);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(e)||function(t,e){if(t){if("string"==typeof t)return i(t,2);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,2):void 0}}(e)||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.")}(),y=v[0],m=v[1],g=c>>3,b=7&c,_=r.length;s=new Uint32Array(s.buffer);for(var w=0;wt.length)&&(e=t.length);for(var r=0,n=new Array(e);r{Object.defineProperty(e,"__esModule",{value:!0}),e.GlobalWorkerOptions=void 0;var r=Object.create(null);e.GlobalWorkerOptions=r,r.workerPort=void 0===r.workerPort?null:r.workerPort,r.workerSrc=void 0===r.workerSrc?"":r.workerSrc},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.MessageHandler=void 0;var n=r(1);function i(){i=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,l){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==s(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,l)}),(function(t){i("throw",t,o,l)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,l)}))}l(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function a(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function o(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:1,s=arguments.length>2?arguments[2]:void 0;if(!this.isCancelled){var l=this.desiredSize;this.desiredSize-=o,l>0&&this.desiredSize<=0&&(this.sinkCapability=(0,n.createPromiseCapability)(),this.ready=this.sinkCapability.promise),a.postMessage({sourceName:r,targetName:i,stream:4,streamId:e,chunk:t},s)}},close:function(){this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:r,targetName:i,stream:3,streamId:e}),delete o.streamSinks[e])},error:function(t){(0,n.assert)(t instanceof Error,"error must have a valid reason"),this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:r,targetName:i,stream:5,streamId:e,reason:l(t)}))},sinkCapability:(0,n.createPromiseCapability)(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:t.desiredSize,ready:null};u.sinkCapability.resolve(),u.ready=u.sinkCapability.promise,this.streamSinks[e]=u,new Promise((function(e){e(s(t.data,u))})).then((function(){a.postMessage({sourceName:r,targetName:i,stream:8,streamId:e,success:!0})}),(function(t){a.postMessage({sourceName:r,targetName:i,stream:8,streamId:e,reason:l(t)})}))}},{key:"_processStreamMessage",value:function(t){var e=t.streamId,r=this.sourceName,i=t.sourceName,a=this.comObj,o=this.streamControllers[e],s=this.streamSinks[e];switch(t.stream){case 8:t.success?o.startCall.resolve():o.startCall.reject(l(t.reason));break;case 7:t.success?o.pullCall.resolve():o.pullCall.reject(l(t.reason));break;case 6:if(!s){a.postMessage({sourceName:r,targetName:i,stream:7,streamId:e,success:!0});break}s.desiredSize<=0&&t.desiredSize>0&&s.sinkCapability.resolve(),s.desiredSize=t.desiredSize,new Promise((function(t){t(s.onPull&&s.onPull())})).then((function(){a.postMessage({sourceName:r,targetName:i,stream:7,streamId:e,success:!0})}),(function(t){a.postMessage({sourceName:r,targetName:i,stream:7,streamId:e,reason:l(t)})}));break;case 4:if((0,n.assert)(o,"enqueue should have stream controller"),o.isClosed)break;o.controller.enqueue(t.chunk);break;case 3:if((0,n.assert)(o,"close should have stream controller"),o.isClosed)break;o.isClosed=!0,o.controller.close(),this._deleteStreamController(o,e);break;case 5:(0,n.assert)(o,"error should have stream controller"),o.controller.error(l(t.reason)),this._deleteStreamController(o,e);break;case 2:t.success?o.cancelCall.resolve():o.cancelCall.reject(l(t.reason)),this._deleteStreamController(o,e);break;case 1:if(!s)break;new Promise((function(e){e(s.onCancel&&s.onCancel(l(t.reason)))})).then((function(){a.postMessage({sourceName:r,targetName:i,stream:2,streamId:e,success:!0})}),(function(t){a.postMessage({sourceName:r,targetName:i,stream:2,streamId:e,reason:l(t)})})),s.sinkCapability.reject(l(t.reason)),s.isCancelled=!0,delete this.streamSinks[e];break;default:throw new Error("Unexpected stream case")}}},{key:"_deleteStreamController",value:(s=i().mark((function t(e,r){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.allSettled([e.startCall&&e.startCall.promise,e.pullCall&&e.pullCall.promise,e.cancelCall&&e.cancelCall.promise]);case 2:delete this.streamControllers[r];case 3:case"end":return t.stop()}}),t,this)})),u=function(){var t=this,e=arguments;return new Promise((function(r,n){var i=s.apply(t,e);function o(t){a(i,r,n,o,l,"next",t)}function l(t){a(i,r,n,o,l,"throw",t)}o(void 0)}))},function(t,e){return u.apply(this,arguments)})},{key:"destroy",value:function(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}],r&&o(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.MessageHandler=u},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Metadata=void 0;var i=r(1);function a(t,e){for(var r=0;r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.OptionalContentConfig=void 0;var i=r(1),a=r(139);function o(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=s(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){l=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(l)throw a}}}}function s(t,e){if(t){if("string"==typeof t)return l(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(t,e):void 0}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1])||arguments[1];y(this,A).has(t)?(y(this,A).get(t)._setVisible(g,!!e),v(this,w,null)):(0,i.warn)("Optional content group not found: ".concat(t))}},{key:"hasInitialVisibility",get:function(){return this.getHash()===y(this,k)}},{key:"getOrder",value:function(){return y(this,A).size?y(this,S)?y(this,S).slice():function(t){if(Array.isArray(t))return l(t)}(t=y(this,A).keys())||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||s(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}():null;var t}},{key:"getGroups",value:function(){return y(this,A).size>0?(0,i.objectFromMap)(y(this,A)):null}},{key:"getGroup",value:function(t){return y(this,A).get(t)||null}},{key:"getHash",value:function(){if(null!==y(this,w))return y(this,w);var t,e,r,n=new a.MurmurHash3_64,i=o(y(this,A));try{for(i.s();!(t=i.n()).done;){var l=(e=t.value,r=2,function(t){if(Array.isArray(t))return t}(e)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(e,r)||s(e,r)||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.")}()),u=l[0],c=l[1];n.update("".concat(u,":").concat(c.visible))}}catch(t){i.e(t)}finally{i.f()}return v(this,w,n.hexdigest())}}]),t}();function P(t){var e=t.length;if(e<2)return!0;for(var r=t[0],n=1;n{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFDataTransportStream=void 0;var n=r(1),i=r(137);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==l(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,s)}))}s(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function s(t){o(a,n,i,s,l,"next",t)}function l(t){o(a,n,i,s,l,"throw",t)}s(void 0)}))}}function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function u(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return c(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0){var o=new Uint8Array(a).buffer;this._queuedChunks.push(o)}this._pdfDataRangeTransport=r,this._isStreamingSupported=!e.disableStream,this._isRangeSupported=!e.disableRange,this._contentLength=e.length,this._fullRequestReader=null,this._rangeReaders=[],this._pdfDataRangeTransport.addRangeListener((function(t,e){i._onReceiveData({begin:t,chunk:e})})),this._pdfDataRangeTransport.addProgressListener((function(t,e){i._onProgress({loaded:t,total:e})})),this._pdfDataRangeTransport.addProgressiveReadListener((function(t){i._onReceiveData({chunk:t})})),this._pdfDataRangeTransport.addProgressiveDoneListener((function(){i._onProgressiveDone()})),this._pdfDataRangeTransport.transportReady()}return d(t,[{key:"_onReceiveData",value:function(t){var e=new Uint8Array(t.chunk).buffer;if(void 0===t.begin)this._fullRequestReader?this._fullRequestReader._enqueue(e):this._queuedChunks.push(e);else{var r=this._rangeReaders.some((function(r){return r._begin===t.begin&&(r._enqueue(e),!0)}));(0,n.assert)(r,"_onReceiveData - no \`PDFDataTransportStreamRangeReader\` instance found.")}}},{key:"_progressiveDataLength",get:function(){var t,e;return null!==(t=null===(e=this._fullRequestReader)||void 0===e?void 0:e._loaded)&&void 0!==t?t:0}},{key:"_onProgress",value:function(t){var e,r,n,i;void 0===t.total?null===(e=this._rangeReaders[0])||void 0===e||null===(r=e.onProgress)||void 0===r||r.call(e,{loaded:t.loaded}):null===(n=this._fullRequestReader)||void 0===n||null===(i=n.onProgress)||void 0===i||i.call(n,{loaded:t.loaded,total:t.total})}},{key:"_onProgressiveDone",value:function(){var t;null===(t=this._fullRequestReader)||void 0===t||t.progressiveDone(),this._progressiveDone=!0}},{key:"_removeRangeReader",value:function(t){var e=this._rangeReaders.indexOf(t);e>=0&&this._rangeReaders.splice(e,1)}},{key:"getFullReader",value:function(){(0,n.assert)(!this._fullRequestReader,"PDFDataTransportStream.getFullReader can only be called once.");var t=this._queuedChunks;return this._queuedChunks=null,new v(this,t,this._progressiveDone,this._contentDispositionFilename)}},{key:"getRangeReader",value:function(t,e){if(e<=this._progressiveDataLength)return null;var r=new y(this,t,e);return this._pdfDataRangeTransport.requestDataRange(t,e),this._rangeReaders.push(r),r}},{key:"cancelAllRequests",value:function(t){var e;null===(e=this._fullRequestReader)||void 0===e||e.cancel(t);var r,n=u(this._rangeReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}this._pdfDataRangeTransport.abort()}}]),t}();e.PDFDataTransportStream=p;var v=function(){function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;h(this,t),this._stream=e,this._done=n||!1,this._filename=(0,i.isPdfFile)(a)?a:null,this._queuedChunks=r||[],this._loaded=0;var o,s=u(this._queuedChunks);try{for(s.s();!(o=s.n()).done;){var l=o.value;this._loaded+=l.byteLength}}catch(t){s.e(t)}finally{s.f()}this._requests=[],this._headersReady=Promise.resolve(),e._fullRequestReader=this,this.onProgress=null}var e;return d(t,[{key:"_enqueue",value:function(t){this._done||(this._requests.length>0?this._requests.shift().resolve({value:t,done:!1}):this._queuedChunks.push(t),this._loaded+=t.byteLength)}},{key:"headersReady",get:function(){return this._headersReady}},{key:"filename",get:function(){return this._filename}},{key:"isRangeSupported",get:function(){return this._stream._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._stream._isStreamingSupported}},{key:"contentLength",get:function(){return this._stream._contentLength}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(this._queuedChunks.length>0)){t.next=3;break}return e=this._queuedChunks.shift(),t.abrupt("return",{value:e,done:!1});case 3:if(!this._done){t.next=5;break}return t.abrupt("return",{value:void 0,done:!0});case 5:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 8:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0;var e,r=u(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0}},{key:"progressiveDone",value:function(){this._done||(this._done=!0)}}]),t}(),y=function(){function t(e,r,n){h(this,t),this._stream=e,this._begin=r,this._end=n,this._queuedChunk=null,this._requests=[],this._done=!1,this.onProgress=null}var e;return d(t,[{key:"_enqueue",value:function(t){if(!this._done){if(0===this._requests.length)this._queuedChunk=t;else{this._requests.shift().resolve({value:t,done:!1});var e,r=u(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0}this._done=!0,this._stream._removeRangeReader(this)}}},{key:"isStreamingSupported",get:function(){return!1}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._queuedChunk){t.next=4;break}return e=this._queuedChunk,this._queuedChunk=null,t.abrupt("return",{value:e,done:!1});case 4:if(!this._done){t.next=6;break}return t.abrupt("return",{value:void 0,done:!0});case 6:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 9:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0;var e,r=u(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._stream._removeRangeReader(this)}}]),t}()},(t,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==r.return||r.return()}finally{if(l)throw o}}}}(i.children);try{for(u.s();!(l=u.n()).done;)e(l.value)}catch(t){u.e(t)}finally{u.f()}}}}(e),i}},{key:"shouldBuildText",value:function(t){return!("textarea"===t||"input"===t||"option"===t||"select"===t)}}],null&&i(e.prototype,null),r&&i(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.XfaText=a},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.NodeStandardFontDataFactory=e.NodeCanvasFactory=e.NodeCMapReaderFactory=void 0;var i=r(138);function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.TextLayerRenderTask=void 0,e.renderTextLayer=function(t){t.textContentSource||!t.textContent&&!t.textContentStream||((0,a.deprecated)("The TextLayerRender \`textContent\`/\`textContentStream\` parameters will be removed in the future, please use \`textContentSource\` instead."),t.textContentSource=t.textContent||t.textContentStream);var e=new p(t);return e._render(),e},e.updateTextLayer=function(t){var e=t.container,r=t.viewport,n=t.textDivs,i=t.textDivProperties,o=t.isOffscreenCanvasSupported,l=t.mustRotate,u=void 0===l||l,c=t.mustRescale,f=void 0===c||c;if(u&&(0,a.setLayerDimensions)(e,{rotation:r.rotation}),f){var p,v=h(0,o),y={prevFontSize:null,prevFontFamily:null,div:null,scale:r.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:v},m=s(n);try{for(m.s();!(p=m.n()).done;){var g=p.value;y.properties=i.get(g),y.div=g,d(y)}}catch(t){m.e(t)}finally{m.f()}}};var i=r(1),a=r(137);function o(t,e){for(var r=0;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=0;f-=4)if(l[f]>0){o=Math.ceil(f/4/u);break}n.clearRect(0,0,u,u),n.strokeText("A",0,u),a=0;for(var d=0,p=(l=n.getImageData(0,0,u,u).data).length;d0){a=u-Math.floor(d/4/u);break}if(n.canvas.width=n.canvas.height=0,a){var v=a/(a+o);return c.set(t,v),v}return c.set(t,.8),.8}(l.fontFamily,t._isOffscreenCanvasSupported);0===s?(f=o[4],d=o[5]-v):(f=o[4]+v*Math.sin(s),d=o[5]-v*Math.cos(s));var y="calc(var(--scale-factor)*",m=n.style;t._container===t._rootContainer?(m.left="".concat((100*f/t._pageWidth).toFixed(2),"%"),m.top="".concat((100*d/t._pageHeight).toFixed(2),"%")):(m.left="".concat(y).concat(f.toFixed(2),"px)"),m.top="".concat(y).concat(d.toFixed(2),"px)")),m.fontSize="".concat(y).concat(p.toFixed(2),"px)"),m.fontFamily=l.fontFamily,a.fontSize=p,n.setAttribute("role","presentation"),n.textContent=e.str,n.dir=e.dir,t._fontInspectorEnabled&&(n.dataset.fontName=e.fontName),0!==s&&(a.angle=s*(180/Math.PI));var g=!1;if(e.str.length>1)g=!0;else if(" "!==e.str&&e.transform[0]!==e.transform[3]){var b=Math.abs(e.transform[0]),_=Math.abs(e.transform[3]);b!==_&&Math.max(b,_)/Math.min(b,_)>1.5&&(g=!0)}g&&(a.canvasWidth=l.vertical?e.height:e.width),t._textDivProperties.set(n,a),t._isReadableStream&&t._layoutText(n)}function d(t){var e=t.div,r=t.scale,n=t.properties,i=t.ctx,a=t.prevFontSize,o=t.prevFontFamily,s=e.style,l="";if(0!==n.canvasWidth&&n.hasText){var u=s.fontFamily,c=n.canvasWidth,h=n.fontSize;a===h&&o===u||(i.font="".concat(h*r,"px ").concat(u),t.prevFontSize=h,t.prevFontFamily=u);var f=i.measureText(e.textContent).width;f>0&&(l="scaleX(".concat(c*r/f,")"))}0!==n.angle&&(l="rotate(".concat(n.angle,"deg) ").concat(l)),l.length>0&&(s.transform=l)}var p=function(){function t(e){var r,n=this,o=e.textContentSource,s=e.container,l=e.viewport,u=e.textDivs,c=e.textDivProperties,f=e.textContentItemsStr,d=e.isOffscreenCanvasSupported;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._textContentSource=o,this._isReadableStream=o instanceof ReadableStream,this._container=this._rootContainer=s,this._textDivs=u||[],this._textContentItemsStr=f||[],this._fontInspectorEnabled=!(null===(r=globalThis.FontInspector)||void 0===r||!r.enabled),this._reader=null,this._textDivProperties=c||new WeakMap,this._canceled=!1,this._capability=(0,i.createPromiseCapability)(),this._layoutTextParams={prevFontSize:null,prevFontFamily:null,div:null,scale:l.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:h(0,d)};var p=l.rawDims,v=p.pageWidth,y=p.pageHeight,m=p.pageX,g=p.pageY;this._transform=[1,0,0,-1,-m,g+y],this._pageWidth=v,this._pageHeight=y,(0,a.setLayerDimensions)(s,l),this._capability.promise.finally((function(){n._layoutTextParams=null})).catch((function(){}))}var e,r;return e=t,(r=[{key:"promise",get:function(){return this._capability.promise}},{key:"cancel",value:function(){this._canceled=!0,this._reader&&(this._reader.cancel(new i.AbortException("TextLayer task cancelled.")).catch((function(){})),this._reader=null),this._capability.reject(new i.AbortException("TextLayer task cancelled."))}},{key:"_processItems",value:function(t,e){var r,n=s(t);try{for(n.s();!(r=n.n()).done;){var i=r.value;if(void 0!==i.str)this._textContentItemsStr.push(i.str),f(this,i,e);else if("beginMarkedContentProps"===i.type||"beginMarkedContent"===i.type){var a=this._container;this._container=document.createElement("span"),this._container.classList.add("markedContent"),null!==i.id&&this._container.setAttribute("id","".concat(i.id)),a.append(this._container)}else"endMarkedContent"===i.type&&(this._container=this._container.parentNode)}}catch(t){n.e(t)}finally{n.f()}}},{key:"_layoutText",value:function(t){var e=this._layoutTextParams.properties=this._textDivProperties.get(t);if(this._layoutTextParams.div=t,d(this._layoutTextParams),e.hasText&&this._container.append(t),e.hasEOL){var r=document.createElement("br");r.setAttribute("role","presentation"),this._container.append(r)}}},{key:"_render",value:function(){var t=this,e=(0,i.createPromiseCapability)(),r=Object.create(null);if(this._isReadableStream)this._reader=this._textContentSource.getReader(),function n(){t._reader.read().then((function(i){var a=i.value;i.done?e.resolve():(Object.assign(r,a.styles),t._processItems(a.items,r),n())}),e.reject)}();else{if(!this._textContentSource)throw new Error('No "textContentSource" parameter specified.');var n=this._textContentSource,a=n.items,o=n.styles;this._processItems(a,o),e.resolve()}e.promise.then((function(){r=null,function(t){if(!t._canceled){var e=t._textDivs,r=t._capability;if(e.length>1e5)r.resolve();else{if(!t._isReadableStream){var n,i=s(e);try{for(i.s();!(n=i.n()).done;){var a=n.value;t._layoutText(a)}}catch(t){i.e(t)}finally{i.f()}}r.resolve()}}}(t)}),this._capability.reject)}}])&&o(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.TextLayerRenderTask=p},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.AnnotationEditorLayer=void 0;var i=r(1),a=r(136),o=r(153),s=r(154),l=r(137);function u(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return c(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:m(this,C).getMode();y(this,R,N).call(this),t===i.AnnotationEditorType.INK?(this.addInkEditorIfNeeded(!1),this.disableClick()):this.enableClick(),m(this,C).unselectAll(),this.div.classList.toggle("freeTextEditing",t===i.AnnotationEditorType.FREETEXT),this.div.classList.toggle("inkEditing",t===i.AnnotationEditorType.INK)}},{key:"addInkEditorIfNeeded",value:function(t){if(t||m(this,C).getMode()===i.AnnotationEditorType.INK){if(!t){var e,r=u(m(this,E).values());try{for(r.s();!(e=r.n()).done;){var n=e.value;if(n.isEmpty())return void n.setInBackground()}}catch(t){r.e(t)}finally{r.f()}}y(this,M,D).call(this,{offsetX:0,offsetY:0}).setInBackground()}}},{key:"setEditingState",value:function(t){m(this,C).setEditingState(t)}},{key:"addCommands",value:function(t){m(this,C).addCommands(t)}},{key:"enable",value:function(){this.div.style.pointerEvents="auto";var t,e=u(m(this,E).values());try{for(e.s();!(t=e.n()).done;)t.value.enableEditing()}catch(t){e.e(t)}finally{e.f()}}},{key:"disable",value:function(){this.div.style.pointerEvents="none";var t,e=u(m(this,E).values());try{for(e.s();!(t=e.n()).done;)t.value.disableEditing()}catch(t){e.e(t)}finally{e.f()}}},{key:"setActiveEditor",value:function(t){m(this,C).getActive()!==t&&m(this,C).setActiveEditor(t)}},{key:"enableClick",value:function(){this.div.addEventListener("pointerdown",m(this,x)),this.div.addEventListener("pointerup",m(this,S))}},{key:"disableClick",value:function(){this.div.removeEventListener("pointerdown",m(this,x)),this.div.removeEventListener("pointerup",m(this,S))}},{key:"attach",value:function(t){m(this,E).set(t.id,t)}},{key:"detach",value:function(t){var e;m(this,E).delete(t.id),null===(e=m(this,A))||void 0===e||e.removePointerInTextLayer(t.contentDiv)}},{key:"remove",value:function(t){var e=this;m(this,C).removeEditor(t),this.detach(t),t.div.style.display="none",setTimeout((function(){t.div.style.display="",t.div.remove(),t.isAttachedToDOM=!1,document.activeElement===document.body&&m(e,C).focusMainContainer()}),0),m(this,T)||this.addInkEditorIfNeeded(!1)}},{key:"add",value:function(t){if(y(this,O,j).call(this,t),m(this,C).addEditor(t),this.attach(t),!t.isAttachedToDOM){var e=t.render();this.div.append(e),t.isAttachedToDOM=!0}this.moveEditorInDOM(t),t.onceAdded(),m(this,C).addToAnnotationStorage(t)}},{key:"moveEditorInDOM",value:function(t){var e;null===(e=m(this,A))||void 0===e||e.moveElementInDOM(this.div,t.div,t.contentDiv,!0)}},{key:"addOrRebuild",value:function(t){t.needsToBeRebuilt()?t.rebuild():this.add(t)}},{key:"addANewEditor",value:function(t){var e=this;this.addCommands({cmd:function(){e.addOrRebuild(t)},undo:function(){t.remove()},mustExec:!0})}},{key:"addUndoableEditor",value:function(t){var e=this;this.addCommands({cmd:function(){e.addOrRebuild(t)},undo:function(){t.remove()},mustExec:!1})}},{key:"getNextId",value:function(){return m(this,C).getId()}},{key:"deserialize",value:function(t){switch(t.annotationType){case i.AnnotationEditorType.FREETEXT:return o.FreeTextEditor.deserialize(t,this,m(this,C));case i.AnnotationEditorType.INK:return s.InkEditor.deserialize(t,this,m(this,C))}return null}},{key:"setSelected",value:function(t){m(this,C).setSelected(t)}},{key:"toggleSelected",value:function(t){m(this,C).toggleSelected(t)}},{key:"isSelected",value:function(t){return m(this,C).isSelected(t)}},{key:"unselect",value:function(t){m(this,C).unselect(t)}},{key:"pointerup",value:function(t){var e=i.FeatureTest.platform.isMac;0!==t.button||t.ctrlKey&&e||t.target===this.div&&m(this,P)&&(g(this,P,!1),m(this,k)?y(this,M,D).call(this,t):g(this,k,!0))}},{key:"pointerdown",value:function(t){var e=i.FeatureTest.platform.isMac;if(!(0!==t.button||t.ctrlKey&&e)&&t.target===this.div){g(this,P,!0);var r=m(this,C).getActive();g(this,k,!r||r.isEmpty())}}},{key:"drop",value:function(t){var e=t.dataTransfer.getData("text/plain"),r=m(this,C).getEditor(e);if(r){t.preventDefault(),t.dataTransfer.dropEffect="move",y(this,O,j).call(this,r);var n=this.div.getBoundingClientRect(),i=t.clientX-n.x,a=t.clientY-n.y;r.translate(i-r.startX,a-r.startY),this.moveEditorInDOM(r),r.div.focus()}}},{key:"dragover",value:function(t){t.preventDefault()}},{key:"destroy",value:function(){var t;(null===(t=m(this,C).getActive())||void 0===t?void 0:t.parent)===this&&m(this,C).setActiveEditor(null);var e,r=u(m(this,E).values());try{for(r.s();!(e=r.n()).done;){var n,i=e.value;null===(n=m(this,A))||void 0===n||n.removePointerInTextLayer(i.contentDiv),i.setParent(null),i.isAttachedToDOM=!1,i.div.remove()}}catch(t){r.e(t)}finally{r.f()}this.div=null,m(this,E).clear(),m(this,C).removeLayer(this)}},{key:"render",value:function(t){var e=t.viewport;this.viewport=e,(0,l.setLayerDimensions)(this.div,e),(0,a.bindEvents)(this,this.div,["dragover","drop"]);var r,n=u(m(this,C).getEditors(this.pageIndex));try{for(n.s();!(r=n.n()).done;){var i=r.value;this.add(i)}}catch(t){n.e(t)}finally{n.f()}this.updateMode()}},{key:"update",value:function(t){var e=t.viewport;m(this,C).commitOrRemove(),this.viewport=e,(0,l.setLayerDimensions)(this.div,{rotation:e.rotation}),this.updateMode()}},{key:"pageDimensions",get:function(){var t=this.viewport.rawDims;return[t.pageWidth,t.pageHeight]}}],r&&h(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();function j(t){var e;t.parent!==this&&(this.attach(t),null===(e=t.parent)||void 0===e||e.detach(t),t.setParent(this),t.div&&t.isAttachedToDOM&&(t.div.remove(),this.div.append(t.div)))}function L(t){switch(m(this,C).getMode()){case i.AnnotationEditorType.FREETEXT:return new o.FreeTextEditor(t);case i.AnnotationEditorType.INK:return new s.InkEditor(t)}return null}function D(t){var e=this.getNextId(),r=y(this,F,L).call(this,{parent:this,id:e,x:t.offsetX,y:t.offsetY,uiManager:m(this,C)});return r&&this.add(r),r}function N(){g(this,T,!0);var t,e=u(m(this,E).values());try{for(e.s();!(t=e.n()).done;){var r=t.value;r.isEmpty()&&r.remove()}}catch(t){e.e(t)}finally{e.f()}g(this,T,!1)}e.AnnotationEditorLayer=I,_=I,(w=d(w="_initialized"))in _?Object.defineProperty(_,w,{value:false,enumerable:!0,configurable:!0,writable:!0}):_[w]=false},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.FreeTextEditor=void 0;var i=r(1),a=r(136),o=r(135);function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=u(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||u(t,e)||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 u(t,e){if(t){if("string"==typeof t)return c(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.InkEditor=void 0,Object.defineProperty(e,"fitCurve",{enumerable:!0,get:function(){return o.fitCurve}});var i=r(1),a=r(135),o=r(155),s=r(136);function l(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=h(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function u(t){return function(t){if(Array.isArray(t))return f(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||h(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||h(t,e)||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 h(t,e){if(t){if("string"==typeof t)return f(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(t,e):void 0}}function f(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r.01&&(e=Math.ceil(t/P(this,M)),this.setDims(t,e));var i=c(this.parentDimensions,2),a=i[0],o=i[1];this.width=t/a,this.height=e/o,P(this,U)&&C(this,at,Tt).call(this,t,e),C(this,it,Pt).call(this),C(this,tt,kt).call(this),this.canvas.style.visibility="visible"}}},{key:"serialize",value:function(){if(this.isEmpty())return null;var t=this.getRect(0,0),e=this.rotation%180==0?t[3]-t[1]:t[2]-t[0],r=a.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);return{annotationType:i.AnnotationEditorType.INK,color:r,thickness:this.thickness,opacity:this.opacity,paths:C(this,st,Ft).call(this,this.scaleFactor/this.parentScale,this.translationX,this.translationY,e),pageIndex:this.pageIndex,rect:t,rotation:this.rotation}}}])&&v(e.prototype,r),o&&v(e,o),Object.defineProperty(e,"prototype",{writable:!1}),d}(a.AnnotationEditor);function vt(t){var e=this,r=this.thickness;this.addCommands({cmd:function(){e.thickness=t,C(e,ft,Lt).call(e)},undo:function(){e.thickness=r,C(e,ft,Lt).call(e)},mustExec:!0,type:i.AnnotationEditorParamsType.INK_THICKNESS,overwriteIfSameType:!0,keepUndo:!0})}function yt(t){var e=this,r=this.color;this.addCommands({cmd:function(){e.color=t,C(e,tt,kt).call(e)},undo:function(){e.color=r,C(e,tt,kt).call(e)},mustExec:!0,type:i.AnnotationEditorParamsType.INK_COLOR,overwriteIfSameType:!0,keepUndo:!0})}function mt(t){var e=this;t/=100;var r=this.opacity;this.addCommands({cmd:function(){e.opacity=t,C(e,tt,kt).call(e)},undo:function(){e.opacity=r,C(e,tt,kt).call(e)},mustExec:!0,type:i.AnnotationEditorParamsType.INK_OPACITY,overwriteIfSameType:!0,keepUndo:!0})}function gt(){var t=this.parentRotation,e=c(this.parentDimensions,2),r=e[0],n=e[1];switch(t){case 90:return[0,n,n,r];case 180:return[r,n,r,n];case 270:return[r,0,n,r];default:return[0,0,r,n]}}function bt(){var t=this.ctx,e=this.color,r=this.opacity,n=this.thickness,i=this.parentScale,a=this.scaleFactor;t.lineWidth=n*i/a,t.lineCap="round",t.lineJoin="round",t.miterLimit=10,t.strokeStyle="".concat(e).concat((0,s.opacityToHex)(r))}function _t(t,e){var r,n=this;this.isEditing=!0,P(this,W)||(E(this,W,!0),C(this,it,Pt).call(this),this.thickness||(this.thickness=pt._defaultThickness),this.color||(this.color=pt._defaultColor||a.AnnotationEditor._defaultLineColor),null!==(r=this.opacity)&&void 0!==r||(this.opacity=pt._defaultOpacity)),this.currentPath.push([t,e]),E(this,G,null),C(this,J,bt).call(this),this.ctx.beginPath(),this.ctx.moveTo(t,e),E(this,z,(function(){var t;P(n,z)&&(P(n,G)&&(n.isEmpty()?(n.ctx.setTransform(1,0,0,1,0,0),n.ctx.clearRect(0,0,n.canvas.width,n.canvas.height)):C(n,tt,kt).call(n),(t=n.ctx).lineTo.apply(t,u(P(n,G))),E(n,G,null),n.ctx.stroke()),window.requestAnimationFrame(P(n,z)))})),window.requestAnimationFrame(P(this,z))}function wt(t,e){var r=c(this.currentPath.at(-1),2),n=r[0],i=r[1];t===n&&e===i||(this.currentPath.push([t,e]),E(this,G,[t,e]))}function At(t,e){var r=this;this.ctx.closePath(),E(this,z,null),t=Math.min(Math.max(t,0),this.canvas.width),e=Math.min(Math.max(e,0),this.canvas.height);var n,i=c(this.currentPath.at(-1),2),a=i[0],s=i[1];if(t===a&&e===s||this.currentPath.push([t,e]),1!==this.currentPath.length)n=(0,o.fitCurve)(this.currentPath,30,null);else{var l=[t,e];n=[[l,l.slice(),l.slice(),l]]}var u=x(pt,pt,Ot).call(pt,n);this.currentPath.length=0,this.addCommands({cmd:function(){r.paths.push(n),r.bezierPath2D.push(u),r.rebuild()},undo:function(){r.paths.pop(),r.bezierPath2D.pop(),0===r.paths.length?r.remove():(r.canvas||(C(r,rt,xt).call(r),C(r,nt,Et).call(r)),C(r,ft,Lt).call(r))},mustExec:!0})}function kt(){if(this.isEmpty())C(this,ot,Ct).call(this);else{C(this,J,bt).call(this);var t=this.canvas,e=this.ctx;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,t.width,t.height),C(this,ot,Ct).call(this);var r,n=l(this.bezierPath2D);try{for(n.s();!(r=n.n()).done;){var i=r.value;e.stroke(i)}}catch(t){n.e(t)}finally{n.f()}}}function St(t){C(this,Z,At).call(this,t.offsetX,t.offsetY),this.canvas.removeEventListener("pointerleave",P(this,L)),this.canvas.removeEventListener("pointermove",P(this,j)),this.addToAnnotationStorage()}function xt(){var t=this;this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=0,this.canvas.className="inkEditorCanvas",pt._l10nPromise.get("editor_ink_canvas_aria_label").then((function(e){var r;return null===(r=t.canvas)||void 0===r?void 0:r.setAttribute("aria-label",e)})),this.div.append(this.canvas),this.ctx=this.canvas.getContext("2d")}function Et(){var t=this,e=null;E(this,B,new ResizeObserver((function(r){var n=r[0].contentRect;n.width&&n.height&&(null!==e&&clearTimeout(e),e=setTimeout((function(){t.fixDims(),e=null}),F),t.setDimensions(n.width,n.height))}))),P(this,B).observe(this.div)}function Pt(){if(P(this,W)){var t=c(this.parentDimensions,2),e=t[0],r=t[1];this.canvas.width=Math.ceil(this.width*e),this.canvas.height=Math.ceil(this.height*r),C(this,ot,Ct).call(this)}}function Tt(t,e){var r=C(this,ht,jt).call(this),n=(t-r)/P(this,I),i=(e-r)/P(this,R);this.scaleFactor=Math.min(n,i)}function Ct(){var t=C(this,ht,jt).call(this)/2;this.ctx.setTransform(this.scaleFactor,0,0,this.scaleFactor,this.translationX*this.scaleFactor+t,this.translationY*this.scaleFactor+t)}function Ot(t){for(var e=new Path2D,r=0,n=t.length;r0&&void 0!==arguments[0]&&arguments[0];if(!this.isEmpty())if(P(this,U)){var e=C(this,ct,It).call(this),r=C(this,ht,jt).call(this);E(this,I,Math.max(O,e[2]-e[0])),E(this,R,Math.max(O,e[3]-e[1]));var n=Math.ceil(r+P(this,I)*this.scaleFactor),i=Math.ceil(r+P(this,R)*this.scaleFactor),a=c(this.parentDimensions,2),o=a[0],s=a[1];this.width=n/o,this.height=i/s,E(this,M,n/i),C(this,dt,Dt).call(this);var l=this.translationX,u=this.translationY;this.translationX=-e[0],this.translationY=-e[1],C(this,it,Pt).call(this),C(this,tt,kt).call(this),E(this,q,n),E(this,H,i),this.setDims(n,i);var h=t?r/this.scaleFactor/2:0;this.translate(l-this.translationX-h,u-this.translationY-h)}else C(this,tt,kt).call(this)}function Dt(){var t=this.div.style;P(this,M)>=1?(t.minHeight="".concat(O,"px"),t.minWidth="".concat(Math.round(P(this,M)*O),"px")):(t.minWidth="".concat(O,"px"),t.minHeight="".concat(Math.round(O/P(this,M)),"px"))}e.InkEditor=pt,w(pt,"_defaultColor",null),w(pt,"_defaultOpacity",1),w(pt,"_defaultThickness",1),w(pt,"_l10nPromise",void 0),w(pt,"_type","ink")},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.fitCurve=void 0;var n=r(156);e.fitCurve=n},t=>{function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,r){for(var n=0;nt.length)&&(e=t.length);for(var r=0,n=new Array(e);r.9999&&x<1.0001)break}d=f,y=p}if(_=[],(m=v.subtract(t[p-1],t[p+1])).every((function(t){return 0===t}))){var E=[-(m=v.subtract(t[p-1],t[p]))[1],m[0]];m[0]=E[0],m[1]=E[1]}return g=v.normalize(m),b=v.mulItems(g,-1),(_=_.concat(l(t.slice(0,p+1),e,g,n,i))).concat(l(t.slice(p),b,r,n,i))}function u(t,e,r,n,i,o){var s,l,u;s=function(t,e,r,n){var i,a,o,s,l,u,c,h,f,d,p,m,g,b,_,w,A,k=t[0],S=t[t.length-1];for(i=[k,null,null,S],a=v.zeros_Xx2x2(e.length),g=0,b=e.length;gi&&(i=n,a=s);return[i,a]}(t,s,e),h=a(c,2);return l=h[0],u=h[1],o&&o({bez:s,points:t,params:e,maxErr:l,maxPoint:u}),[s,l,u]}function c(t,e,r){return r.map((function(r,n){return h(t,e[n],r)}))}function h(t,e,r){var n=v.subtract(y.q(t,r),e),i=y.qprime(t,r),a=v.mulMatrix(n,i),o=v.sum(v.squareItems(i))+2*v.mulMatrix(n,y.qprimeprime(t,r));return 0===o?r:r-a/o}var f=function(t,e){for(var r,n=[0],i=t[0],a=0,o=1;o<=e;o++)r=y.q(t,o/e),a+=v.vectorLen(v.subtract(r,i)),n.push(a),i=r;return n.map((function(t){return t/a}))};function d(t,e,r,n){if(e<0)return 0;if(e>1)return 1;for(var i,a,o,s,l=1;l<=n;l++)if(e<=r[l]){o=(l-1)/n,a=l/n,s=(e-(i=r[l-1]))/(r[l]-i)*(a-o)+o;break}return s}function p(t,e){return v.normalize(v.subtract(t,e))}var v=function(){function t(){r(this,t)}return i(t,null,[{key:"zeros_Xx2x2",value:function(t){for(var e=[];t--;)e.push([0,0]);return e}},{key:"mulItems",value:function(t,e){return t.map((function(t){return t*e}))}},{key:"mulMatrix",value:function(t,e){return t.reduce((function(t,r,n){return t+r*e[n]}),0)}},{key:"subtract",value:function(t,e){return t.map((function(t,r){return t-e[r]}))}},{key:"addArrays",value:function(t,e){return t.map((function(t,r){return t+e[r]}))}},{key:"addItems",value:function(t,e){return t.map((function(t){return t+e}))}},{key:"sum",value:function(t){return t.reduce((function(t,e){return t+e}))}},{key:"dot",value:function(e,r){return t.mulMatrix(e,r)}},{key:"vectorLen",value:function(t){return Math.hypot.apply(Math,function(t){if(Array.isArray(t))return s(t)}(e=t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());var e}},{key:"divItems",value:function(t,e){return t.map((function(t){return t/e}))}},{key:"squareItems",value:function(t){return t.map((function(t){return t*t}))}},{key:"normalize",value:function(t){return this.divItems(t,this.vectorLen(t))}}]),t}(),y=function(){function t(){r(this,t)}return i(t,null,[{key:"q",value:function(t,e){var r=1-e,n=v.mulItems(t[0],r*r*r),i=v.mulItems(t[1],3*r*r*e),a=v.mulItems(t[2],3*r*e*e),o=v.mulItems(t[3],e*e*e);return v.addArrays(v.addArrays(n,i),v.addArrays(a,o))}},{key:"qprime",value:function(t,e){var r=1-e,n=v.mulItems(v.subtract(t[1],t[0]),3*r*r),i=v.mulItems(v.subtract(t[2],t[1]),6*r*e),a=v.mulItems(v.subtract(t[3],t[2]),3*e*e);return v.addArrays(v.addArrays(n,i),a)}},{key:"qprimeprime",value:function(t,e){return v.addArrays(v.mulItems(v.addArrays(v.subtract(t[2],v.mulItems(t[1],2)),t[0]),6*(1-e)),v.mulItems(v.addArrays(v.subtract(t[3],v.mulItems(t[2],2)),t[1]),6*e))}}]),t}();t.exports=function(t,e,r){if(!Array.isArray(t))throw new TypeError("First argument should be an array");if(t.forEach((function(e){if(!Array.isArray(e)||e.some((function(t){return"number"!=typeof t}))||e.length!==t[0].length)throw Error("Each point should be an array of numbers. Each point should have the same amount of numbers.")})),(t=t.filter((function(e,r){return 0===r||!e.every((function(e,n){return e===t[r-1][n]}))}))).length<2)return[];var n=t.length,i=p(t[1],t[0]),a=p(t[n-2],t[n-1]);return l(t,i,a,e,r)},t.exports.fitCubic=l,t.exports.createTangent=p},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AnnotationLayer=void 0;var n=r(1),i=r(137),a=r(134),o=r(158),s=r(159);function l(t,e,r){return function(t,e){if(t!==e)throw new TypeError("Private static access of wrong provenance")}(t,e),r}function u(){return u="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=v(t)););return t}(t,e);if(n){var i=Object.getOwnPropertyDescriptor(n,e);return i.get?i.get.call(arguments.length<3?t:r):i.value}},u.apply(this,arguments)}function c(t){return function(t){if(Array.isArray(t))return w(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||_(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&f(t,e)}function f(t,e){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},f(t,e)}function d(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=v(t);if(e){var i=v(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return function(t,e){if(e&&("object"===A(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return p(t)}(this,r)}}function p(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function v(t){return v=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},v(t)}function y(t,e){!function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}(t,e),e.add(t)}function m(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function g(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=_(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function b(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||_(t,e)||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 _(t,e){if(t){if("string"==typeof t)return w(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?w(t,e):void 0}}function w(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:{},n=r.isRenderable,i=void 0!==n&&n,a=r.ignoreBorder,o=void 0!==a&&a,s=r.createQuadrilaterals,l=void 0!==s&&s;k(this,t),this.isRenderable=i,this.data=e.data,this.layer=e.layer,this.page=e.page,this.viewport=e.viewport,this.linkService=e.linkService,this.downloadManager=e.downloadManager,this.imageResourcesPath=e.imageResourcesPath,this.renderForms=e.renderForms,this.svgFactory=e.svgFactory,this.annotationStorage=e.annotationStorage,this.enableScripting=e.enableScripting,this.hasJSActions=e.hasJSActions,this._fieldObjects=e.fieldObjects,i&&(this.container=this._createContainer(o)),l&&(this.quadrilaterals=this._createQuadrilaterals(o))}return x(t,[{key:"_createContainer",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.data,r=this.page,i=this.viewport,a=document.createElement("section");a.setAttribute("data-annotation-id",e.id);var o=i.rawDims,s=o.pageWidth,l=o.pageHeight,u=o.pageX,c=o.pageY,h=C(e.rect),f=h.width,d=h.height,p=n.Util.normalizeRect([e.rect[0],r.view[3]-e.rect[1]+r.view[1],e.rect[2],r.view[3]-e.rect[3]+r.view[1]]);if(!t&&e.borderStyle.width>0){a.style.borderWidth="".concat(e.borderStyle.width,"px");var v=e.borderStyle.horizontalCornerRadius,y=e.borderStyle.verticalCornerRadius;if(v>0||y>0){var m="calc(".concat(v,"px * var(--scale-factor)) / calc(").concat(y,"px * var(--scale-factor))");a.style.borderRadius=m}else if(this instanceof H){var g="calc(".concat(f,"px * var(--scale-factor)) / calc(").concat(d,"px * var(--scale-factor))");a.style.borderRadius=g}switch(e.borderStyle.style){case n.AnnotationBorderStyleType.SOLID:a.style.borderStyle="solid";break;case n.AnnotationBorderStyleType.DASHED:a.style.borderStyle="dashed";break;case n.AnnotationBorderStyleType.BEVELED:(0,n.warn)("Unimplemented border style: beveled");break;case n.AnnotationBorderStyleType.INSET:(0,n.warn)("Unimplemented border style: inset");break;case n.AnnotationBorderStyleType.UNDERLINE:a.style.borderBottomStyle="solid"}var b=e.borderColor||null;b?a.style.borderColor=n.Util.makeHexColor(0|b[0],0|b[1],0|b[2]):a.style.borderWidth=0}a.style.left="".concat(100*(p[0]-u)/s,"%"),a.style.top="".concat(100*(p[1]-c)/l,"%");var _=e.rotation;return e.hasOwnCanvas||0===_?(a.style.width="".concat(100*f/s,"%"),a.style.height="".concat(100*d/l,"%")):this.setRotation(_,a),a}},{key:"setRotation",value:function(t){var e,r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.container,i=this.viewport.rawDims,a=i.pageWidth,o=i.pageHeight,s=C(this.data.rect),l=s.width,u=s.height;t%180==0?(e=100*l/a,r=100*u/o):(e=100*u/a,r=100*l/o),n.style.width="".concat(e,"%"),n.style.height="".concat(r,"%"),n.setAttribute("data-main-rotation",(360-t)%360)}},{key:"_commonActions",get:function(){var t=this,e=function(t,e,r){var n=r.detail[t];r.target.style[e]=o.ColorConverters["".concat(n[0],"_HTML")](n.slice(1))};return(0,n.shadow)(this,"_commonActions",{display:function(e){var r=e.detail.display%2==1;t.container.style.visibility=r?"hidden":"visible",t.annotationStorage.setValue(t.data.id,{hidden:r,print:0===e.detail.display||3===e.detail.display})},print:function(e){t.annotationStorage.setValue(t.data.id,{print:e.detail.print})},hidden:function(e){t.container.style.visibility=e.detail.hidden?"hidden":"visible",t.annotationStorage.setValue(t.data.id,{hidden:e.detail.hidden})},focus:function(t){setTimeout((function(){return t.target.focus({preventScroll:!1})}),0)},userName:function(t){t.target.title=t.detail.userName},readonly:function(t){t.detail.readonly?t.target.setAttribute("readonly",""):t.target.removeAttribute("readonly")},required:function(e){t._setRequired(e.target,e.detail.required)},bgColor:function(t){e("bgColor","backgroundColor",t)},fillColor:function(t){e("fillColor","backgroundColor",t)},fgColor:function(t){e("fgColor","color",t)},textColor:function(t){e("textColor","color",t)},borderColor:function(t){e("borderColor","borderColor",t)},strokeColor:function(t){e("strokeColor","borderColor",t)},rotation:function(e){var r=e.detail.rotation;t.setRotation(r),t.annotationStorage.setValue(t.data.id,{rotation:r})}})}},{key:"_dispatchEventFromSandbox",value:function(t,e){for(var r=this._commonActions,n=0,i=Object.keys(e.detail);n0&&void 0!==arguments[0]&&arguments[0];if(!this.data.quadPoints)return null;var e,r=[],n=this.data.rect,i=g(this.data.quadPoints);try{for(i.s();!(e=i.n()).done;){var a=e.value;this.data.rect=[a[2].x,a[2].y,a[1].x,a[1].y],r.push(this._createContainer(t))}}catch(t){i.e(t)}finally{i.f()}return this.data.rect=n,r}},{key:"_createPopup",value:function(t,e){var r=this.container;this.quadrilaterals&&(t=t||this.quadrilaterals,r=this.quadrilaterals[0]),t||((t=document.createElement("div")).className="popupTriggerArea",r.append(t));var n=new Y({container:r,trigger:t,color:e.color,titleObj:e.titleObj,modificationDate:e.modificationDate,contentsObj:e.contentsObj,richText:e.richText,hideWrapper:!0}).render();n.style.left="100%",r.append(n)}},{key:"_renderQuadrilaterals",value:function(t){var e,r=g(this.quadrilaterals);try{for(r.s();!(e=r.n()).done;)e.value.className=t}catch(t){r.e(t)}finally{r.f()}return this.quadrilaterals}},{key:"render",value:function(){(0,n.unreachable)("Abstract method \`AnnotationElement.render\` called")}},{key:"_getElementsByName",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=[];if(this._fieldObjects){var i=this._fieldObjects[t];if(i){var a,o=g(i);try{for(o.s();!(a=o.n()).done;){var s=a.value,l=s.page,u=s.id,c=s.exportValues;if(-1!==l&&u!==e){var h="string"==typeof c?c:null,f=document.querySelector('[data-element-id="'.concat(u,'"]'));!f||T.has(f)?r.push({id:u,exportValue:h,domElement:f}):(0,n.warn)("_getElementsByName - element not allowed: ".concat(u))}}}catch(t){o.e(t)}finally{o.f()}}return r}var d,p=g(document.getElementsByName(t));try{for(p.s();!(d=p.n()).done;){var v=d.value,y=v.exportValue,m=v.getAttribute("data-element-id");m!==e&&T.has(v)&&r.push({id:m,exportValue:y,domElement:v})}}catch(t){p.e(t)}finally{p.f()}return r}}]),t}(),M=new WeakSet,R=new WeakSet,I=function(t){h(r,t);var e=d(r);function r(t){var n,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return k(this,r),y(p(n=e.call(this,t,{isRenderable:!0,ignoreBorder:!(null==i||!i.ignoreBorder),createQuadrilaterals:!0})),R),y(p(n),M),n.isTooltipOnly=t.data.isTooltipOnly,n}return x(r,[{key:"render",value:function(){var t=this.data,e=this.linkService,r=document.createElement("a");r.setAttribute("data-element-id",t.id);var n=!1;return t.url?(e.addLinkAttributes(r,t.url,t.newWindow),n=!0):t.action?(this._bindNamedAction(r,t.action),n=!0):t.attachment?(this._bindAttachment(r,t.attachment),n=!0):t.setOCGState?(m(this,R,L).call(this,r,t.setOCGState),n=!0):t.dest?(this._bindLink(r,t.dest),n=!0):(t.actions&&(t.actions.Action||t.actions["Mouse Up"]||t.actions["Mouse Down"])&&this.enableScripting&&this.hasJSActions&&(this._bindJSAction(r,t),n=!0),t.resetForm?(this._bindResetFormAction(r,t.resetForm),n=!0):this.isTooltipOnly&&!n&&(this._bindLink(r,""),n=!0)),this.quadrilaterals?this._renderQuadrilaterals("linkAnnotation").map((function(t,e){var n=0===e?r:r.cloneNode();return t.append(n),t})):(this.container.className="linkAnnotation",n&&this.container.append(r),this.container)}},{key:"_bindLink",value:function(t,e){var r=this;t.href=this.linkService.getDestinationHash(e),t.onclick=function(){return e&&r.linkService.goToDestination(e),!1},(e||""===e)&&m(this,M,j).call(this)}},{key:"_bindNamedAction",value:function(t,e){var r=this;t.href=this.linkService.getAnchorUrl(""),t.onclick=function(){return r.linkService.executeNamedAction(e),!1},m(this,M,j).call(this)}},{key:"_bindAttachment",value:function(t,e){var r=this;t.href=this.linkService.getAnchorUrl(""),t.onclick=function(){var t;return null===(t=r.downloadManager)||void 0===t||t.openOrDownloadData(r.container,e.content,e.filename),!1},m(this,M,j).call(this)}},{key:"_bindJSAction",value:function(t,e){var r=this;t.href=this.linkService.getAnchorUrl("");for(var n=new Map([["Action","onclick"],["Mouse Up","onmouseup"],["Mouse Down","onmousedown"]]),i=function(){var i=o[a],s=n.get(i);if(!s)return"continue";t[s]=function(){var t;return null===(t=r.linkService.eventBus)||void 0===t||t.dispatch("dispatcheventinsandbox",{source:r,detail:{id:e.id,name:i}}),!1}},a=0,o=Object.keys(e.actions);ao&&(a=a.slice(0,o));var s={userValue:a,formattedValue:null,lastCommittedValue:null,commitKey:1};this.data.multiLine?((n=document.createElement("textarea")).textContent=a,this.data.doNotScroll&&(n.style.overflowY="hidden")):((n=document.createElement("input")).type="text",n.setAttribute("value",a),this.data.doNotScroll&&(n.style.overflowX="hidden")),T.add(n),n.setAttribute("data-element-id",r),n.disabled=this.data.readOnly,n.name=this.data.fieldName,n.tabIndex=P,this._setRequired(n,this.data.required),o&&(n.maxLength=o),n.addEventListener("input",(function(i){e.setValue(r,{value:i.target.value}),t.setPropertyOnSiblings(n,"value",i.target.value,"value")})),n.addEventListener("resetform",(function(e){var r,i=null!==(r=t.data.defaultFieldValue)&&void 0!==r?r:"";n.value=s.userValue=i,s.formattedValue=null}));var l=function(t){var e=s.formattedValue;null!=e&&(t.target.value=e),t.target.scrollLeft=0};if(this.enableScripting&&this.hasJSActions){var u;n.addEventListener("focus",(function(t){var e=t.target;s.userValue&&(e.value=s.userValue),s.lastCommittedValue=e.value,s.commitKey=1})),n.addEventListener("updatefromsandbox",(function(n){var i={value:function(t){var n;s.userValue=null!==(n=t.detail.value)&&void 0!==n?n:"",e.setValue(r,{value:s.userValue.toString()}),t.target.value=s.userValue},formattedValue:function(t){var n=t.detail.formattedValue;s.formattedValue=n,null!=n&&t.target!==document.activeElement&&(t.target.value=n),e.setValue(r,{formattedValue:n})},selRange:function(t){var e;(e=t.target).setSelectionRange.apply(e,c(t.detail.selRange))},charLimit:function(n){var i,a=n.detail.charLimit,o=n.target;if(0!==a){o.setAttribute("maxLength",a);var l=s.userValue;!l||l.length<=a||(l=l.slice(0,a),o.value=s.userValue=l,e.setValue(r,{value:l}),null===(i=t.linkService.eventBus)||void 0===i||i.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:l,willCommit:!0,commitKey:1,selStart:o.selectionStart,selEnd:o.selectionEnd}}))}else o.removeAttribute("maxLength")}};t._dispatchEventFromSandbox(i,n)})),n.addEventListener("keydown",(function(e){var n;s.commitKey=1;var i=-1;if("Escape"===e.key?i=0:"Enter"!==e.key||t.data.multiLine?"Tab"===e.key&&(s.commitKey=3):i=2,-1!==i){var a=e.target.value;s.lastCommittedValue!==a&&(s.lastCommittedValue=a,s.userValue=a,null===(n=t.linkService.eventBus)||void 0===n||n.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:a,willCommit:!0,commitKey:i,selStart:e.target.selectionStart,selEnd:e.target.selectionEnd}}))}}));var h=l;l=null,n.addEventListener("blur",(function(e){if(e.relatedTarget){var n,i=e.target.value;s.userValue=i,s.lastCommittedValue!==i&&(null===(n=t.linkService.eventBus)||void 0===n||n.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:i,willCommit:!0,commitKey:s.commitKey,selStart:e.target.selectionStart,selEnd:e.target.selectionEnd}})),h(e)}})),null!==(u=this.data.actions)&&void 0!==u&&u.Keystroke&&n.addEventListener("beforeinput",(function(e){var n;s.lastCommittedValue=null;var i=e.data,a=e.target,o=a.value,l=a.selectionStart,u=a.selectionEnd,c=l,h=u;switch(e.inputType){case"deleteWordBackward":var f=o.substring(0,l).match(/\\w*[^\\w]*$/);f&&(c-=f[0].length);break;case"deleteWordForward":var d=o.substring(l).match(/^[^\\w]*\\w*/);d&&(h+=d[0].length);break;case"deleteContentBackward":l===u&&(c-=1);break;case"deleteContentForward":l===u&&(h+=1)}e.preventDefault(),null===(n=t.linkService.eventBus)||void 0===n||n.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:o,change:i||"",willCommit:!1,selStart:c,selEnd:h}})})),this._setEventListeners(n,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(function(t){return t.target.value}))}if(l&&n.addEventListener("blur",l),this.data.comb){var f=(this.data.rect[2]-this.data.rect[0])/o;n.classList.add("comb"),n.style.letterSpacing="calc(".concat(f,"px * var(--scale-factor) - 1ch)")}}else(n=document.createElement("div")).textContent=this.data.fieldValue,n.style.verticalAlign="middle",n.style.display="table-cell";return this._setTextStyle(n),this._setBackgroundColor(n),this._setDefaultPropertiesFromJS(n),this.container.append(n),this.container}}]),r}(G),q=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{isRenderable:t.renderForms})}return x(r,[{key:"render",value:function(){var t=this,e=this.annotationStorage,r=this.data,n=r.id,i=e.getValue(n,{value:r.exportValue===r.fieldValue}).value;"string"==typeof i&&(i="Off"!==i,e.setValue(n,{value:i})),this.container.className="buttonWidgetAnnotation checkBox";var a=document.createElement("input");return T.add(a),a.setAttribute("data-element-id",n),a.disabled=r.readOnly,this._setRequired(a,this.data.required),a.type="checkbox",a.name=r.fieldName,i&&a.setAttribute("checked",!0),a.setAttribute("exportValue",r.exportValue),a.tabIndex=P,a.addEventListener("change",(function(i){var a,o=i.target,s=o.name,l=o.checked,u=g(t._getElementsByName(s,n));try{for(u.s();!(a=u.n()).done;){var c=a.value,h=l&&c.exportValue===r.exportValue;c.domElement&&(c.domElement.checked=h),e.setValue(c.id,{value:h})}}catch(t){u.e(t)}finally{u.f()}e.setValue(n,{value:l})})),a.addEventListener("resetform",(function(t){var e=r.defaultFieldValue||"Off";t.target.checked=e===r.exportValue})),this.enableScripting&&this.hasJSActions&&(a.addEventListener("updatefromsandbox",(function(r){var i={value:function(t){t.target.checked="Off"!==t.detail.value,e.setValue(n,{value:t.target.checked})}};t._dispatchEventFromSandbox(i,r)})),this._setEventListeners(a,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(function(t){return t.target.checked}))),this._setBackgroundColor(a),this._setDefaultPropertiesFromJS(a),this.container.append(a),this.container}}]),r}(G),H=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{isRenderable:t.renderForms})}return x(r,[{key:"render",value:function(){var t=this;this.container.className="buttonWidgetAnnotation radioButton";var e=this.annotationStorage,r=this.data,n=r.id,i=e.getValue(n,{value:r.fieldValue===r.buttonValue}).value;"string"==typeof i&&(i=i!==r.buttonValue,e.setValue(n,{value:i}));var a=document.createElement("input");if(T.add(a),a.setAttribute("data-element-id",n),a.disabled=r.readOnly,this._setRequired(a,this.data.required),a.type="radio",a.name=r.fieldName,i&&a.setAttribute("checked",!0),a.tabIndex=P,a.addEventListener("change",(function(r){var i,a=r.target,o=a.name,s=a.checked,l=g(t._getElementsByName(o,n));try{for(l.s();!(i=l.n()).done;){var u=i.value;e.setValue(u.id,{value:!1})}}catch(t){l.e(t)}finally{l.f()}e.setValue(n,{value:s})})),a.addEventListener("resetform",(function(t){var e=r.defaultFieldValue;t.target.checked=null!=e&&e===r.buttonValue})),this.enableScripting&&this.hasJSActions){var o=r.buttonValue;a.addEventListener("updatefromsandbox",(function(r){var i={value:function(r){var i,a=o===r.detail.value,s=g(t._getElementsByName(r.target.name));try{for(s.s();!(i=s.n()).done;){var l=i.value,u=a&&l.id===n;l.domElement&&(l.domElement.checked=u),e.setValue(l.id,{value:u})}}catch(t){s.e(t)}finally{s.f()}}};t._dispatchEventFromSandbox(i,r)})),this._setEventListeners(a,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(function(t){return t.target.checked}))}return this._setBackgroundColor(a),this._setDefaultPropertiesFromJS(a),this.container.append(a),this.container}}]),r}(G),z=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{ignoreBorder:t.data.hasAppearance})}return x(r,[{key:"render",value:function(){var t=this,e=u(v(r.prototype),"render",this).call(this);e.className="buttonWidgetAnnotation pushButton",this.data.alternativeText&&(e.title=this.data.alternativeText);var n=e.lastChild;return this.enableScripting&&this.hasJSActions&&n&&(this._setDefaultPropertiesFromJS(n),n.addEventListener("updatefromsandbox",(function(e){t._dispatchEventFromSandbox({},e)}))),e}}]),r}(I),V=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{isRenderable:t.renderForms})}return x(r,[{key:"render",value:function(){var t=this;this.container.className="choiceWidgetAnnotation";var e=this.annotationStorage,r=this.data.id,n=e.getValue(r,{value:this.data.fieldValue}),i=document.createElement("select");T.add(i),i.setAttribute("data-element-id",r),i.disabled=this.data.readOnly,this._setRequired(i,this.data.required),i.name=this.data.fieldName,i.tabIndex=P;var a=this.data.combo&&this.data.options.length>0;this.data.combo||(i.size=this.data.options.length,this.data.multiSelect&&(i.multiple=!0)),i.addEventListener("resetform",(function(e){var r,n=t.data.defaultFieldValue,a=g(i.options);try{for(a.s();!(r=a.n()).done;){var o=r.value;o.selected=o.value===n}}catch(t){a.e(t)}finally{a.f()}}));var o,s=g(this.data.options);try{for(s.s();!(o=s.n()).done;){var l=o.value,u=document.createElement("option");u.textContent=l.displayValue,u.value=l.exportValue,n.value.includes(l.exportValue)&&(u.setAttribute("selected",!0),a=!1),i.append(u)}}catch(t){s.e(t)}finally{s.f()}var c=null;if(a){var h=document.createElement("option");h.value=" ",h.setAttribute("hidden",!0),h.setAttribute("selected",!0),i.prepend(h),c=function(){h.remove(),i.removeEventListener("input",c),c=null},i.addEventListener("input",c)}var f=function(t){var e=t?"value":"textContent",r=i.options;return i.multiple?Array.prototype.filter.call(r,(function(t){return t.selected})).map((function(t){return t[e]})):-1===r.selectedIndex?null:r[r.selectedIndex][e]},d=f(!1),p=function(t){var e=t.target.options;return Array.prototype.map.call(e,(function(t){return{displayValue:t.textContent,exportValue:t.value}}))};return this.enableScripting&&this.hasJSActions?(i.addEventListener("updatefromsandbox",(function(n){var a={value:function(t){var n;null===(n=c)||void 0===n||n();var a,o=t.detail.value,s=new Set(Array.isArray(o)?o:[o]),l=g(i.options);try{for(l.s();!(a=l.n()).done;){var u=a.value;u.selected=s.has(u.value)}}catch(t){l.e(t)}finally{l.f()}e.setValue(r,{value:f(!0)}),d=f(!1)},multipleSelection:function(t){i.multiple=!0},remove:function(t){var n=i.options,a=t.detail.remove;if(n[a].selected=!1,i.remove(a),n.length>0){var o=Array.prototype.findIndex.call(n,(function(t){return t.selected}));-1===o&&(n[0].selected=!0)}e.setValue(r,{value:f(!0),items:p(t)}),d=f(!1)},clear:function(t){for(;0!==i.length;)i.remove(0);e.setValue(r,{value:null,items:[]}),d=f(!1)},insert:function(t){var n=t.detail.insert,a=n.index,o=n.displayValue,s=n.exportValue,l=i.children[a],u=document.createElement("option");u.textContent=o,u.value=s,l?l.before(u):i.append(u),e.setValue(r,{value:f(!0),items:p(t)}),d=f(!1)},items:function(t){for(var n=t.detail.items;0!==i.length;)i.remove(0);var a,o=g(n);try{for(o.s();!(a=o.n()).done;){var s=a.value,l=s.displayValue,u=s.exportValue,c=document.createElement("option");c.textContent=l,c.value=u,i.append(c)}}catch(t){o.e(t)}finally{o.f()}i.options.length>0&&(i.options[0].selected=!0),e.setValue(r,{value:f(!0),items:p(t)}),d=f(!1)},indices:function(t){var n,i=new Set(t.detail.indices),a=g(t.target.options);try{for(a.s();!(n=a.n()).done;){var o=n.value;o.selected=i.has(o.index)}}catch(t){a.e(t)}finally{a.f()}e.setValue(r,{value:f(!0)}),d=f(!1)},editable:function(t){t.target.disabled=!t.detail.editable}};t._dispatchEventFromSandbox(a,n)})),i.addEventListener("input",(function(n){var i,a=f(!0);e.setValue(r,{value:a}),n.preventDefault(),null===(i=t.linkService.eventBus)||void 0===i||i.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:d,changeEx:a,willCommit:!1,commitKey:1,keyDown:!1}})})),this._setEventListeners(i,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"],["input","Action"]],(function(t){return t.target.checked}))):i.addEventListener("input",(function(t){e.setValue(r,{value:f(!0)})})),this.data.combo&&this._setTextStyle(i),this._setBackgroundColor(i),this._setDefaultPropertiesFromJS(i),this.container.append(i),this.container}}]),r}(G),X=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=t.data,s=!r.IGNORE_TYPES.has(o.parentType)&&!!(null!==(n=o.titleObj)&&void 0!==n&&n.str||null!==(i=o.contentsObj)&&void 0!==i&&i.str||null!==(a=o.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:s})}return x(r,[{key:"render",value:function(){this.container.className="popupAnnotation";var t=this.layer.querySelectorAll('[data-annotation-id="'.concat(this.data.parentId,'"]'));if(0===t.length)return this.container;var e=new Y({container:this.container,trigger:Array.from(t),color:this.data.color,titleObj:this.data.titleObj,modificationDate:this.data.modificationDate,contentsObj:this.data.contentsObj,richText:this.data.richText}),r=this.page,i=n.Util.normalizeRect([this.data.parentRect[0],r.view[3]-this.data.parentRect[1]+r.view[1],this.data.parentRect[2],r.view[3]-this.data.parentRect[3]+r.view[1]]),a=i[0]+this.data.parentRect[2]-this.data.parentRect[0],o=i[1],s=this.viewport.rawDims,l=s.pageWidth,u=s.pageHeight,c=s.pageX,h=s.pageY;return this.container.style.left="".concat(100*(a-c)/l,"%"),this.container.style.top="".concat(100*(o-h)/u,"%"),this.container.append(e.render()),this.container}}]),r}(F);D=X,N="IGNORE_TYPES",U=new Set(["Line","Square","Circle","PolyLine","Polygon","Ink"]),(N=E(N))in D?Object.defineProperty(D,N,{value:U,enumerable:!0,configurable:!0,writable:!0}):D[N]=U;var Y=function(){function t(e){k(this,t),this.container=e.container,this.trigger=e.trigger,this.color=e.color,this.titleObj=e.titleObj,this.modificationDate=e.modificationDate,this.contentsObj=e.contentsObj,this.richText=e.richText,this.hideWrapper=e.hideWrapper||!1,this.pinned=!1}return x(t,[{key:"render",value:function(){var t,e,r=document.createElement("div");r.className="popupWrapper",this.hideElement=this.hideWrapper?r:this.container,this.hideElement.hidden=!0;var a=document.createElement("div");a.className="popup";var o=this.color;if(o){var l=.7*(255-o[0])+o[0],u=.7*(255-o[1])+o[1],c=.7*(255-o[2])+o[2];a.style.backgroundColor=n.Util.makeHexColor(0|l,0|u,0|c)}var h=document.createElement("h1");h.dir=this.titleObj.dir,h.textContent=this.titleObj.str,a.append(h);var f=i.PDFDateString.toDateObject(this.modificationDate);if(f){var d=document.createElement("span");d.className="popupDate",d.textContent="{{date}}, {{time}}",d.dataset.l10nId="annotation_date_string",d.dataset.l10nArgs=JSON.stringify({date:f.toLocaleDateString(),time:f.toLocaleTimeString()}),a.append(d)}if(null===(t=this.richText)||void 0===t||!t.str||null!==(e=this.contentsObj)&&void 0!==e&&e.str&&this.contentsObj.str!==this.richText.str){var p=this._formatContents(this.contentsObj);a.append(p)}else s.XfaLayer.render({xfaHtml:this.richText.html,intent:"richText",div:a}),a.lastChild.className="richText popupContent";Array.isArray(this.trigger)||(this.trigger=[this.trigger]);var v,y=g(this.trigger);try{for(y.s();!(v=y.n()).done;){var m=v.value;m.addEventListener("click",this._toggle.bind(this)),m.addEventListener("mouseover",this._show.bind(this,!1)),m.addEventListener("mouseout",this._hide.bind(this,!1))}}catch(t){y.e(t)}finally{y.f()}return a.addEventListener("click",this._hide.bind(this,!0)),r.append(a),r}},{key:"_formatContents",value:function(t){var e=t.str,r=t.dir,n=document.createElement("p");n.className="popupContent",n.dir=r;for(var i=e.split(/(?:\\r\\n?|\\n)/),a=0,o=i.length;a0&&void 0!==arguments[0]&&arguments[0]&&(this.pinned=!0),this.hideElement.hidden&&(this.hideElement.hidden=!1,this.container.style.zIndex=parseInt(this.container.style.zIndex)+1e3)}},{key:"_hide",value:function(){(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.pinned=!1),this.hideElement.hidden||this.pinned||(this.hideElement.hidden=!0,this.container.style.zIndex=parseInt(this.container.style.zIndex)-1e3)}}]),t}(),K=function(t){h(r,t);var e=d(r);function r(t){var n,i,a,o;k(this,r);var s=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return(o=e.call(this,t,{isRenderable:s,ignoreBorder:!0})).textContent=t.data.textContent,o}return x(r,[{key:"render",value:function(){if(this.container.className="freeTextAnnotation",this.textContent){var t=document.createElement("div");t.className="annotationTextContent",t.setAttribute("role","comment");var e,r=g(this.textContent);try{for(r.s();!(e=r.n()).done;){var n=e.value,i=document.createElement("span");i.textContent=n,t.append(i)}}catch(t){r.e(t)}finally{r.f()}this.container.append(t)}return this.data.hasPopup||this._createPopup(null,this.data),this.container}}]),r}(F),J=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){this.container.className="lineAnnotation";var t=this.data,e=C(t.rect),r=e.width,n=e.height,i=this.svgFactory.create(r,n,!0),a=this.svgFactory.createElement("svg:line");return a.setAttribute("x1",t.rect[2]-t.lineCoordinates[0]),a.setAttribute("y1",t.rect[3]-t.lineCoordinates[1]),a.setAttribute("x2",t.rect[2]-t.lineCoordinates[2]),a.setAttribute("y2",t.rect[3]-t.lineCoordinates[3]),a.setAttribute("stroke-width",t.borderStyle.width||1),a.setAttribute("stroke","transparent"),a.setAttribute("fill","transparent"),i.append(a),this.container.append(i),this._createPopup(a,t),this.container}}]),r}(F),Q=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){this.container.className="squareAnnotation";var t=this.data,e=C(t.rect),r=e.width,n=e.height,i=this.svgFactory.create(r,n,!0),a=t.borderStyle.width,o=this.svgFactory.createElement("svg:rect");return o.setAttribute("x",a/2),o.setAttribute("y",a/2),o.setAttribute("width",r-a),o.setAttribute("height",n-a),o.setAttribute("stroke-width",a||1),o.setAttribute("stroke","transparent"),o.setAttribute("fill","transparent"),i.append(o),this.container.append(i),this._createPopup(o,t),this.container}}]),r}(F),$=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){this.container.className="circleAnnotation";var t=this.data,e=C(t.rect),r=e.width,n=e.height,i=this.svgFactory.create(r,n,!0),a=t.borderStyle.width,o=this.svgFactory.createElement("svg:ellipse");return o.setAttribute("cx",r/2),o.setAttribute("cy",n/2),o.setAttribute("rx",r/2-a/2),o.setAttribute("ry",n/2-a/2),o.setAttribute("stroke-width",a||1),o.setAttribute("stroke","transparent"),o.setAttribute("fill","transparent"),i.append(o),this.container.append(i),this._createPopup(o,t),this.container}}]),r}(F),Z=function(t){h(r,t);var e=d(r);function r(t){var n,i,a,o;k(this,r);var s=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return(o=e.call(this,t,{isRenderable:s,ignoreBorder:!0})).containerClassName="polylineAnnotation",o.svgElementName="svg:polyline",o}return x(r,[{key:"render",value:function(){this.container.className=this.containerClassName;var t,e=this.data,r=C(e.rect),n=r.width,i=r.height,a=this.svgFactory.create(n,i,!0),o=[],s=g(e.vertices);try{for(s.s();!(t=s.n()).done;){var l=t.value,u=l.x-e.rect[0],c=e.rect[3]-l.y;o.push(u+","+c)}}catch(t){s.e(t)}finally{s.f()}o=o.join(" ");var h=this.svgFactory.createElement(this.svgElementName);return h.setAttribute("points",o),h.setAttribute("stroke-width",e.borderStyle.width||1),h.setAttribute("stroke","transparent"),h.setAttribute("fill","transparent"),a.append(h),this.container.append(a),this._createPopup(h,e),this.container}}]),r}(F),tt=function(t){h(r,t);var e=d(r);function r(t){var n;return k(this,r),(n=e.call(this,t)).containerClassName="polygonAnnotation",n.svgElementName="svg:polygon",n}return x(r)}(Z),et=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){return this.container.className="caretAnnotation",this.data.hasPopup||this._createPopup(null,this.data),this.container}}]),r}(F),rt=function(t){h(r,t);var e=d(r);function r(t){var n,i,a,o;k(this,r);var s=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return(o=e.call(this,t,{isRenderable:s,ignoreBorder:!0})).containerClassName="inkAnnotation",o.svgElementName="svg:polyline",o}return x(r,[{key:"render",value:function(){this.container.className=this.containerClassName;var t,e=this.data,r=C(e.rect),n=r.width,i=r.height,a=this.svgFactory.create(n,i,!0),o=g(e.inkLists);try{for(o.s();!(t=o.n()).done;){var s,l=t.value,u=[],c=g(l);try{for(c.s();!(s=c.n()).done;){var h=s.value,f=h.x-e.rect[0],d=e.rect[3]-h.y;u.push("".concat(f,",").concat(d))}}catch(t){c.e(t)}finally{c.f()}u=u.join(" ");var p=this.svgFactory.createElement(this.svgElementName);p.setAttribute("points",u),p.setAttribute("stroke-width",e.borderStyle.width||1),p.setAttribute("stroke","transparent"),p.setAttribute("fill","transparent"),this._createPopup(p,e),a.append(p)}}catch(t){o.e(t)}finally{o.f()}return this.container.append(a),this.container}}]),r}(F),nt=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("highlightAnnotation"):(this.container.className="highlightAnnotation",this.container)}}]),r}(F),it=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("underlineAnnotation"):(this.container.className="underlineAnnotation",this.container)}}]),r}(F),at=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("squigglyAnnotation"):(this.container.className="squigglyAnnotation",this.container)}}]),r}(F),ot=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("strikeoutAnnotation"):(this.container.className="strikeoutAnnotation",this.container)}}]),r}(F),st=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){return this.container.className="stampAnnotation",this.data.hasPopup||this._createPopup(null,this.data),this.container}}]),r}(F),lt=function(t){h(r,t);var e=d(r);function r(t){var n,a;k(this,r);var o=(a=e.call(this,t,{isRenderable:!0})).data.file,s=o.filename,l=o.content;return a.filename=(0,i.getFilenameFromUrl)(s,!0),a.content=l,null===(n=a.linkService.eventBus)||void 0===n||n.dispatch("fileattachmentannotation",{source:p(a),filename:s,content:l}),a}return x(r,[{key:"render",value:function(){var t,e,r;return this.container.className="fileAttachmentAnnotation",this.data.hasAppearance?r=document.createElement("div"):(r=document.createElement("img")).src="".concat(this.imageResourcesPath,"annotation-").concat(/paperclip/i.test(this.data.name)?"paperclip":"pushpin",".svg"),r.className="popupTriggerArea",r.addEventListener("dblclick",this._download.bind(this)),!this.data.hasPopup&&(null!==(t=this.data.titleObj)&&void 0!==t&&t.str||null!==(e=this.data.contentsObj)&&void 0!==e&&e.str||this.data.richText)&&this._createPopup(r,this.data),this.container.append(r),this.container}},{key:"_download",value:function(){var t;null===(t=this.downloadManager)||void 0===t||t.openOrDownloadData(this.container,this.content,this.filename)}}]),r}(F),ut=function(){function t(){k(this,t)}return x(t,null,[{key:"render",value:function(e){var r=e.annotations,o=e.div,s=e.viewport,u=e.accessibilityManager;(0,i.setLayerDimensions)(o,s);var c,h={data:null,layer:o,page:e.page,viewport:s,linkService:e.linkService,downloadManager:e.downloadManager,imageResourcesPath:e.imageResourcesPath||"",renderForms:!1!==e.renderForms,svgFactory:new i.DOMSVGFactory,annotationStorage:e.annotationStorage||new a.AnnotationStorage,enableScripting:!0===e.enableScripting,hasJSActions:e.hasJSActions,fieldObjects:e.fieldObjects},f=0,d=g(r);try{for(d.s();!(c=d.n()).done;){var p=c.value;if(p.annotationType!==n.AnnotationType.POPUP){var v=C(p.rect),y=v.width,m=v.height;if(y<=0||m<=0)continue}h.data=p;var b=O.create(h);if(b.isRenderable){var _=b.render();if(p.hidden&&(_.style.visibility="hidden"),Array.isArray(_)){var w,A=g(_);try{for(A.s();!(w=A.n()).done;){var k=w.value;k.style.zIndex=f++,l(t,t,ct).call(t,k,p.id,o,u)}}catch(t){A.e(t)}finally{A.f()}}else _.style.zIndex=f++,b instanceof X?o.prepend(_):l(t,t,ct).call(t,_,p.id,o,u)}}}catch(t){d.e(t)}finally{d.f()}l(this,t,ht).call(this,o,e.annotationCanvasMap)}},{key:"update",value:function(e){var r=e.annotationCanvasMap,n=e.div,a=e.viewport;(0,i.setLayerDimensions)(n,{rotation:a.rotation}),l(this,t,ht).call(this,n,r),n.hidden=!1}}]),t}();function ct(t,e,r,n){var a=t.firstChild||t;a.id="".concat(i.AnnotationPrefix).concat(e),r.append(t),null==n||n.moveElementInDOM(r,t,a,!1)}function ht(t,e){if(e){var r,n=g(e);try{for(n.s();!(r=n.n()).done;){var i=b(r.value,2),a=i[0],o=i[1],s=t.querySelector('[data-annotation-id="'.concat(a,'"]'));if(s){var l=s.firstChild;l?"CANVAS"===l.nodeName?l.replaceWith(o):l.before(o):s.append(o)}}}catch(t){n.e(t)}finally{n.f()}e.clear()}}e.AnnotationLayer=ut},(t,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||function(t,e){if(t){if("string"==typeof t)return i(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,e):void 0}}(t,e)||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 i(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r{Object.defineProperty(e,"__esModule",{value:!0}),e.XfaLayer=void 0;var n=r(149);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||s(t,e)||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 o(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=s(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){l=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(l)throw a}}}}function s(t,e){if(t){if("string"==typeof t)return l(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(t,e):void 0}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0;){var d,p,v=a(u.at(-1),3),y=v[0],m=v[1],g=v[2];if(m+1!==y.children.length){var b=y.children[++u.at(-1)[1]];if(null!==b){var _=b.name;if("#text"!==_){var w=void 0;if(w=null!==(d=b)&&void 0!==d&&null!==(p=d.attributes)&&void 0!==p&&p.xmlns?document.createElementNS(b.attributes.xmlns,_):document.createElement(_),g.append(w),b.attributes&&this.setAttributes({html:w,element:b,storage:e,intent:s,linkService:r}),b.children&&b.children.length>0)u.push([b,-1,w]);else if(b.value){var A=document.createTextNode(b.value);n.XfaText.shouldBuildText(_)&&f.push(A),w.append(A)}}else{var k=document.createTextNode(b.value);f.push(k),g.append(k)}}}else u.pop()}var S,x=o(c.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"));try{for(x.s();!(S=x.n()).done;)S.value.setAttribute("readOnly",!0)}catch(t){x.e(t)}finally{x.f()}return{textDivs:f}}},{key:"update",value:function(t){var e="matrix(".concat(t.viewport.transform.join(","),")");t.div.style.transform=e,t.div.hidden=!1}}],null&&u(e.prototype,null),r&&u(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.XfaLayer=c},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.SVGGraphics=void 0;var i=r(137),a=r(1),o=r(3);function s(t){return function(t){if(Array.isArray(t))return h(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||c(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||c(t,e)||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 u(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=c(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function c(t,e){if(t){if("string"==typeof t)return h(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(t,e):void 0}}function h(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(URL.createObjectURL&&"undefined"!=typeof Blob&&!r)return URL.createObjectURL(new Blob([t],{type:e}));for(var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i="data:".concat(e,";base64,"),a=0,o=t.length;a>2]+n[(3&s)<<4|l>>4]+n[a+1>6:64]+n[a+2>1&2147483647:n>>1&2147483647;e[r]=n}function s(t,r,n,i){var a=i,o=r.length;n[a]=o>>24&255,n[a+1]=o>>16&255,n[a+2]=o>>8&255,n[a+3]=255&o,n[a+=4]=255&t.charCodeAt(0),n[a+1]=255&t.charCodeAt(1),n[a+2]=255&t.charCodeAt(2),n[a+3]=255&t.charCodeAt(3),a+=4,n.set(r,a);var s=function(t,r,n){for(var i=-1,a=r;a>>8^e[o]}return-1^i}(n,i+4,a+=r.length);n[a]=s>>24&255,n[a+1]=s>>16&255,n[a+2]=s>>8&255,n[a+3]=255&s}function l(t){var e=t.length,r=65535,n=Math.ceil(e/r),i=new Uint8Array(2+e+5*n+4),a=0;i[a++]=120,i[a++]=156;for(var o=0;e>r;)i[a++]=0,i[a++]=255,i[a++]=255,i[a++]=0,i[a++]=0,i.set(t.subarray(o,o+r),a),a+=r,o+=r,e-=r;i[a++]=1,i[a++]=255&e,i[a++]=e>>8&255,i[a++]=255&~e,i[a++]=(65535&~e)>>8&255,i.set(t.subarray(o),a),a+=t.length-o;var s=function(t,e,r){for(var n=1,i=0,a=0;a>24&255,i[a++]=s>>16&255,i[a++]=s>>8&255,i[a++]=255&s,i}return function(e,r,n){return function(e,r,n,i){var u,c,h,f=e.width,d=e.height,p=e.data;switch(r){case a.ImageKind.GRAYSCALE_1BPP:c=0,u=1,h=f+7>>3;break;case a.ImageKind.RGB_24BPP:c=2,u=8,h=3*f;break;case a.ImageKind.RGBA_32BPP:c=6,u=8,h=4*f;break;default:throw new Error("invalid format")}for(var v=new Uint8Array((1+h)*d),y=0,m=0,g=0;g>24&255,f>>16&255,f>>8&255,255&f,d>>24&255,d>>16&255,d>>8&255,255&d,u,c,0,0,0]),A=function(t){if(!o.isNodeJS)return l(t);try{var e;e=parseInt(process.versions.node)>=8?t:Buffer.from(t);var r=require("zlib").deflateSync(e,{level:9});return r instanceof Uint8Array?r:new Uint8Array(r)}catch(t){(0,a.warn)("Not compressing PNG because zlib.deflateSync is unavailable: "+t)}return l(t)}(v),S=t.length+36+w.length+A.length,x=new Uint8Array(S),E=0;return x.set(t,E),s("IHDR",w,x,E+=t.length),s("IDATA",A,x,E+=12+w.length),E+=12+A.length,s("IEND",new Uint8Array(0),x,E),k(x,"image/png",n)}(e,void 0===e.kind?a.ImageKind.GRAYSCALE_1BPP:e.kind,r,n)}}(),x=function(){function t(){p(this,t),this.fontSizeScale=1,this.fontWeight=b,this.fontSize=0,this.textMatrix=a.IDENTITY_MATRIX,this.fontMatrix=a.FONT_IDENTITY_MATRIX,this.leading=0,this.textRenderingMode=a.TextRenderingMode.FILL,this.textMatrixScale=1,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=_,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}return d(t,[{key:"clone",value:function(){return Object.create(this)}},{key:"setCurrentPoint",value:function(t,e){this.x=t,this.y=e}}]),t}(),E=0,P=0,T=0;e.SVGGraphics=v=function(){function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var o in p(this,t),(0,i.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."),this.svgFactory=new i.DOMSVGFactory,this.current=new x,this.transformMatrix=a.IDENTITY_MATRIX,this.transformStack=[],this.extraStack=[],this.commonObjs=e,this.objs=r,this.pendingClip=null,this.pendingEOFill=!1,this.embedFonts=!1,this.embeddedFonts=Object.create(null),this.cssStyle=null,this.forceDataSchema=!!n,this._operatorIdMapping=[],a.OPS)this._operatorIdMapping[a.OPS[o]]=o}return d(t,[{key:"getObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return"string"==typeof t?t.startsWith("g_")?this.commonObjs.get(t):this.objs.get(t):e}},{key:"save",value:function(){this.transformStack.push(this.transformMatrix);var t=this.current;this.extraStack.push(t),this.current=t.clone()}},{key:"restore",value:function(){this.transformMatrix=this.transformStack.pop(),this.current=this.extraStack.pop(),this.pendingClip=null,this.tgrp=null}},{key:"group",value:function(t){this.save(),this.executeOpTree(t),this.restore()}},{key:"loadDependencies",value:function(t){for(var e=this,r=t.fnArray,n=t.argsArray,i=0,o=r.length;i0&&(this.current.lineWidth=t)}},{key:"setLineCap",value:function(t){this.current.lineCap=w[t]}},{key:"setLineJoin",value:function(t){this.current.lineJoin=A[t]}},{key:"setMiterLimit",value:function(t){this.current.miterLimit=t}},{key:"setStrokeAlpha",value:function(t){this.current.strokeAlpha=t}},{key:"setStrokeRGBColor",value:function(t,e,r){this.current.strokeColor=a.Util.makeHexColor(t,e,r)}},{key:"setFillAlpha",value:function(t){this.current.fillAlpha=t}},{key:"setFillRGBColor",value:function(t,e,r){this.current.fillColor=a.Util.makeHexColor(t,e,r),this.current.tspan=this.svgFactory.createElement("svg:tspan"),this.current.xcoords=[],this.current.ycoords=[]}},{key:"setStrokeColorN",value:function(t){this.current.strokeColor=this._makeColorN_Pattern(t)}},{key:"setFillColorN",value:function(t){this.current.fillColor=this._makeColorN_Pattern(t)}},{key:"shadingFill",value:function(t){var e=this.viewport.width,r=this.viewport.height,n=a.Util.inverseTransform(this.transformMatrix),i=a.Util.applyTransform([0,0],n),o=a.Util.applyTransform([0,r],n),s=a.Util.applyTransform([e,0],n),l=a.Util.applyTransform([e,r],n),u=Math.min(i[0],o[0],s[0],l[0]),c=Math.min(i[1],o[1],s[1],l[1]),h=Math.max(i[0],o[0],s[0],l[0]),f=Math.max(i[1],o[1],s[1],l[1]),d=this.svgFactory.createElement("svg:rect");d.setAttributeNS(null,"x",u),d.setAttributeNS(null,"y",c),d.setAttributeNS(null,"width",h-u),d.setAttributeNS(null,"height",f-c),d.setAttributeNS(null,"fill",this._makeShadingPattern(t)),this.current.fillAlpha<1&&d.setAttributeNS(null,"fill-opacity",this.current.fillAlpha),this._ensureTransformGroup().append(d)}},{key:"_makeColorN_Pattern",value:function(t){return"TilingPattern"===t[0]?this._makeTilingPattern(t):this._makeShadingPattern(t)}},{key:"_makeTilingPattern",value:function(t){var e=t[1],r=t[2],n=t[3]||a.IDENTITY_MATRIX,i=l(t[4],4),o=i[0],u=i[1],c=i[2],h=i[3],f=t[5],d=t[6],p=t[7],v="shading".concat(T++),y=l(a.Util.normalizeRect([].concat(s(a.Util.applyTransform([o,u],n)),s(a.Util.applyTransform([c,h],n)))),4),m=y[0],g=y[1],b=y[2],_=y[3],w=l(a.Util.singularValueDecompose2dScale(n),2),A=f*w[0],k=d*w[1],S=this.svgFactory.createElement("svg:pattern");S.setAttributeNS(null,"id",v),S.setAttributeNS(null,"patternUnits","userSpaceOnUse"),S.setAttributeNS(null,"width",A),S.setAttributeNS(null,"height",k),S.setAttributeNS(null,"x","".concat(m)),S.setAttributeNS(null,"y","".concat(g));var x=this.svg,E=this.transformMatrix,P=this.current.fillColor,C=this.current.strokeColor,O=this.svgFactory.create(b-m,_-g);if(this.svg=O,this.transformMatrix=n,2===p){var F=a.Util.makeHexColor.apply(a.Util,s(e));this.current.fillColor=F,this.current.strokeColor=F}return this.executeOpTree(this.convertOpList(r)),this.svg=x,this.transformMatrix=E,this.current.fillColor=P,this.current.strokeColor=C,S.append(O.childNodes[0]),this.defs.append(S),"url(#".concat(v,")")}},{key:"_makeShadingPattern",value:function(t){switch("string"==typeof t&&(t=this.objs.get(t)),t[0]){case"RadialAxial":var e,r="shading".concat(T++),n=t[3];switch(t[1]){case"axial":var i=t[4],o=t[5];(e=this.svgFactory.createElement("svg:linearGradient")).setAttributeNS(null,"id",r),e.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),e.setAttributeNS(null,"x1",i[0]),e.setAttributeNS(null,"y1",i[1]),e.setAttributeNS(null,"x2",o[0]),e.setAttributeNS(null,"y2",o[1]);break;case"radial":var s=t[4],l=t[5],c=t[6],h=t[7];(e=this.svgFactory.createElement("svg:radialGradient")).setAttributeNS(null,"id",r),e.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),e.setAttributeNS(null,"cx",l[0]),e.setAttributeNS(null,"cy",l[1]),e.setAttributeNS(null,"r",h),e.setAttributeNS(null,"fx",s[0]),e.setAttributeNS(null,"fy",s[1]),e.setAttributeNS(null,"fr",c);break;default:throw new Error("Unknown RadialAxial type: ".concat(t[1]))}var f,d=u(n);try{for(d.s();!(f=d.n()).done;){var p=f.value,v=this.svgFactory.createElement("svg:stop");v.setAttributeNS(null,"offset",p[0]),v.setAttributeNS(null,"stop-color",p[1]),e.append(v)}}catch(t){d.e(t)}finally{d.f()}return this.defs.append(e),"url(#".concat(r,")");case"Mesh":return(0,a.warn)("Unimplemented pattern Mesh"),null;case"Dummy":return"hotpink";default:throw new Error("Unknown IR type: ".concat(t[0]))}}},{key:"setDash",value:function(t,e){this.current.dashArray=t,this.current.dashPhase=e}},{key:"constructPath",value:function(t,e){var r,n=this.current,i=n.x,o=n.y,s=[],l=0,c=u(t);try{for(c.s();!(r=c.n()).done;)switch(0|r.value){case a.OPS.rectangle:i=e[l++],o=e[l++];var h=e[l++],f=e[l++],d=i+h,p=o+f;s.push("M",y(i),y(o),"L",y(d),y(o),"L",y(d),y(p),"L",y(i),y(p),"Z");break;case a.OPS.moveTo:i=e[l++],o=e[l++],s.push("M",y(i),y(o));break;case a.OPS.lineTo:i=e[l++],o=e[l++],s.push("L",y(i),y(o));break;case a.OPS.curveTo:i=e[l+4],o=e[l+5],s.push("C",y(e[l]),y(e[l+1]),y(e[l+2]),y(e[l+3]),y(i),y(o)),l+=6;break;case a.OPS.curveTo2:s.push("C",y(i),y(o),y(e[l]),y(e[l+1]),y(e[l+2]),y(e[l+3])),i=e[l+2],o=e[l+3],l+=4;break;case a.OPS.curveTo3:i=e[l+2],o=e[l+3],s.push("C",y(e[l]),y(e[l+1]),y(i),y(o),y(i),y(o)),l+=4;break;case a.OPS.closePath:s.push("Z")}}catch(t){c.e(t)}finally{c.f()}s=s.join(" "),n.path&&t.length>0&&t[0]!==a.OPS.rectangle&&t[0]!==a.OPS.moveTo?s=n.path.getAttributeNS(null,"d")+s:(n.path=this.svgFactory.createElement("svg:path"),this._ensureTransformGroup().append(n.path)),n.path.setAttributeNS(null,"d",s),n.path.setAttributeNS(null,"fill","none"),n.element=n.path,n.setCurrentPoint(i,o)}},{key:"endPath",value:function(){var t=this.current;if(t.path=null,this.pendingClip)if(t.element){var e="clippath".concat(E++),r=this.svgFactory.createElement("svg:clipPath");r.setAttributeNS(null,"id",e),r.setAttributeNS(null,"transform",m(this.transformMatrix));var n=t.element.cloneNode(!0);if("evenodd"===this.pendingClip?n.setAttributeNS(null,"clip-rule","evenodd"):n.setAttributeNS(null,"clip-rule","nonzero"),this.pendingClip=null,r.append(n),this.defs.append(r),t.activeClipUrl){t.clipGroup=null;var i,a=u(this.extraStack);try{for(a.s();!(i=a.n()).done;)i.value.clipGroup=null}catch(t){a.e(t)}finally{a.f()}r.setAttributeNS(null,"clip-path",t.activeClipUrl)}t.activeClipUrl="url(#".concat(e,")"),this.tgrp=null}else this.pendingClip=null}},{key:"clip",value:function(t){this.pendingClip=t}},{key:"closePath",value:function(){var t=this.current;if(t.path){var e="".concat(t.path.getAttributeNS(null,"d"),"Z");t.path.setAttributeNS(null,"d",e)}}},{key:"setLeading",value:function(t){this.current.leading=-t}},{key:"setTextRise",value:function(t){this.current.textRise=t}},{key:"setTextRenderingMode",value:function(t){this.current.textRenderingMode=t}},{key:"setHScale",value:function(t){this.current.textHScale=t/100}},{key:"setRenderingIntent",value:function(t){}},{key:"setFlatness",value:function(t){}},{key:"setGState",value:function(t){var e,r=u(t);try{for(r.s();!(e=r.n()).done;){var n=l(e.value,2),i=n[0],o=n[1];switch(i){case"LW":this.setLineWidth(o);break;case"LC":this.setLineCap(o);break;case"LJ":this.setLineJoin(o);break;case"ML":this.setMiterLimit(o);break;case"D":this.setDash(o[0],o[1]);break;case"RI":this.setRenderingIntent(o);break;case"FL":this.setFlatness(o);break;case"Font":this.setFont(o);break;case"CA":this.setStrokeAlpha(o);break;case"ca":this.setFillAlpha(o);break;default:(0,a.warn)("Unimplemented graphic state operator ".concat(i))}}}catch(t){r.e(t)}finally{r.f()}}},{key:"fill",value:function(){var t=this.current;t.element&&(t.element.setAttributeNS(null,"fill",t.fillColor),t.element.setAttributeNS(null,"fill-opacity",t.fillAlpha),this.endPath())}},{key:"stroke",value:function(){var t=this.current;t.element&&(this._setStrokeAttributes(t.element),t.element.setAttributeNS(null,"fill","none"),this.endPath())}},{key:"_setStrokeAttributes",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=this.current,n=r.dashArray;1!==e&&n.length>0&&(n=n.map((function(t){return e*t}))),t.setAttributeNS(null,"stroke",r.strokeColor),t.setAttributeNS(null,"stroke-opacity",r.strokeAlpha),t.setAttributeNS(null,"stroke-miterlimit",y(r.miterLimit)),t.setAttributeNS(null,"stroke-linecap",r.lineCap),t.setAttributeNS(null,"stroke-linejoin",r.lineJoin),t.setAttributeNS(null,"stroke-width",y(e*r.lineWidth)+"px"),t.setAttributeNS(null,"stroke-dasharray",n.map(y).join(" ")),t.setAttributeNS(null,"stroke-dashoffset",y(e*r.dashPhase)+"px")}},{key:"eoFill",value:function(){var t;null===(t=this.current.element)||void 0===t||t.setAttributeNS(null,"fill-rule","evenodd"),this.fill()}},{key:"fillStroke",value:function(){this.stroke(),this.fill()}},{key:"eoFillStroke",value:function(){var t;null===(t=this.current.element)||void 0===t||t.setAttributeNS(null,"fill-rule","evenodd"),this.fillStroke()}},{key:"closeStroke",value:function(){this.closePath(),this.stroke()}},{key:"closeFillStroke",value:function(){this.closePath(),this.fillStroke()}},{key:"closeEOFillStroke",value:function(){this.closePath(),this.eoFillStroke()}},{key:"paintSolidColorImageMask",value:function(){var t=this.svgFactory.createElement("svg:rect");t.setAttributeNS(null,"x","0"),t.setAttributeNS(null,"y","0"),t.setAttributeNS(null,"width","1px"),t.setAttributeNS(null,"height","1px"),t.setAttributeNS(null,"fill",this.current.fillColor),this._ensureTransformGroup().append(t)}},{key:"paintImageXObject",value:function(t){var e=this.getObject(t);e?this.paintInlineImageXObject(e):(0,a.warn)("Dependent image with object ID ".concat(t," is not ready yet"))}},{key:"paintInlineImageXObject",value:function(t,e){var r=t.width,n=t.height,i=S(t,this.forceDataSchema,!!e),a=this.svgFactory.createElement("svg:rect");a.setAttributeNS(null,"x","0"),a.setAttributeNS(null,"y","0"),a.setAttributeNS(null,"width",y(r)),a.setAttributeNS(null,"height",y(n)),this.current.element=a,this.clip("nonzero");var o=this.svgFactory.createElement("svg:image");o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",i),o.setAttributeNS(null,"x","0"),o.setAttributeNS(null,"y",y(-n)),o.setAttributeNS(null,"width",y(r)+"px"),o.setAttributeNS(null,"height",y(n)+"px"),o.setAttributeNS(null,"transform","scale(".concat(y(1/r)," ").concat(y(-1/n),")")),e?e.append(o):this._ensureTransformGroup().append(o)}},{key:"paintImageMaskXObject",value:function(t){var e=this.getObject(t.data,t);if(e.bitmap)(0,a.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, ensure that the \`isOffscreenCanvasSupported\` API parameter is disabled.");else{var r=this.current,n=e.width,i=e.height,o=r.fillColor;r.maskId="mask".concat(P++);var s=this.svgFactory.createElement("svg:mask");s.setAttributeNS(null,"id",r.maskId);var l=this.svgFactory.createElement("svg:rect");l.setAttributeNS(null,"x","0"),l.setAttributeNS(null,"y","0"),l.setAttributeNS(null,"width",y(n)),l.setAttributeNS(null,"height",y(i)),l.setAttributeNS(null,"fill",o),l.setAttributeNS(null,"mask","url(#".concat(r.maskId,")")),this.defs.append(s),this._ensureTransformGroup().append(l),this.paintInlineImageXObject(e,s)}}},{key:"paintFormXObjectBegin",value:function(t,e){if(Array.isArray(t)&&6===t.length&&this.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e){var r=e[2]-e[0],n=e[3]-e[1],i=this.svgFactory.createElement("svg:rect");i.setAttributeNS(null,"x",e[0]),i.setAttributeNS(null,"y",e[1]),i.setAttributeNS(null,"width",y(r)),i.setAttributeNS(null,"height",y(n)),this.current.element=i,this.clip("nonzero"),this.endPath()}}},{key:"paintFormXObjectEnd",value:function(){}},{key:"_initialize",value:function(t){var e=this.svgFactory.create(t.width,t.height),r=this.svgFactory.createElement("svg:defs");e.append(r),this.defs=r;var n=this.svgFactory.createElement("svg:g");return n.setAttributeNS(null,"transform",m(t.transform)),e.append(n),this.svg=n,e}},{key:"_ensureClipGroup",value:function(){if(!this.current.clipGroup){var t=this.svgFactory.createElement("svg:g");t.setAttributeNS(null,"clip-path",this.current.activeClipUrl),this.svg.append(t),this.current.clipGroup=t}return this.current.clipGroup}},{key:"_ensureTransformGroup",value:function(){return this.tgrp||(this.tgrp=this.svgFactory.createElement("svg:g"),this.tgrp.setAttributeNS(null,"transform",m(this.transformMatrix)),this.current.activeClipUrl?this._ensureClipGroup().append(this.tgrp):this.svg.append(this.tgrp)),this.tgrp}}]),t}()},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFNodeStream=void 0;var n=r(1),i=r(162);function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&o(t,e)}function o(t,e){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},o(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=l(t);if(e){var i=l(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return function(t,e){if(e&&("object"===f(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(this,r)}}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function u(){u=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function l(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,r){return t[e]=r}}function c(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function h(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=c;var d={};function p(){}function v(){}function y(){}var m={};l(m,a,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,a)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var l=h(t[n],t,a);if("throw"!==l.type){var u=l.arg,c=u.value;return c&&"object"==f(c)&&r.call(c,"__await")?e.resolve(c.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(c).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,s)}))}s(l.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=h(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=h(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function c(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function h(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function o(t){c(a,n,i,o,s,"next",t)}function s(t){c(a,n,i,o,s,"throw",t)}o(void 0)}))}}function f(t){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f(t)}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}(this._rangeRequestReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}}}]),t}();e.PDFNodeStream=A;var k=function(){function t(e){p(this,t),this._url=e.url,this._done=!1,this._storedError=null,this.onProgress=null;var r=e.source;this._contentLength=r.length,this._loaded=0,this._filename=null,this._disableRange=r.disableRange||!1,this._rangeChunkSize=r.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._isStreamingSupported=!r.disableStream,this._isRangeSupported=!r.disableRange,this._readableStream=null,this._readCapability=(0,n.createPromiseCapability)(),this._headersCapability=(0,n.createPromiseCapability)()}var e;return y(t,[{key:"headersReady",get:function(){return this._headersCapability.promise}},{key:"filename",get:function(){return this._filename}},{key:"contentLength",get:function(){return this._contentLength}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=h(u().mark((function t(){var e,r,i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._readCapability.promise;case 2:if(!this._done){t.next=4;break}return t.abrupt("return",{value:void 0,done:!0});case 4:if(!this._storedError){t.next=6;break}throw this._storedError;case 6:if(null!==(r=this._readableStream.read())){t.next=10;break}return this._readCapability=(0,n.createPromiseCapability)(),t.abrupt("return",this.read());case 10:return this._loaded+=r.length,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded,total:this._contentLength}),i=new Uint8Array(r).buffer,t.abrupt("return",{value:i,done:!1});case 14:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._readableStream?this._readableStream.destroy(t):this._error(t)}},{key:"_error",value:function(t){this._storedError=t,this._readCapability.resolve()}},{key:"_setReadableStream",value:function(t){var e=this;this._readableStream=t,t.on("readable",(function(){e._readCapability.resolve()})),t.on("end",(function(){t.destroy(),e._done=!0,e._readCapability.resolve()})),t.on("error",(function(t){e._error(t)})),!this._isStreamingSupported&&this._isRangeSupported&&this._error(new n.AbortException("streaming is disabled")),this._storedError&&this._readableStream.destroy(this._storedError)}}]),t}(),S=function(){function t(e){p(this,t),this._url=e.url,this._done=!1,this._storedError=null,this.onProgress=null,this._loaded=0,this._readableStream=null,this._readCapability=(0,n.createPromiseCapability)();var r=e.source;this._isStreamingSupported=!r.disableStream}var e;return y(t,[{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=h(u().mark((function t(){var e,r,i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._readCapability.promise;case 2:if(!this._done){t.next=4;break}return t.abrupt("return",{value:void 0,done:!0});case 4:if(!this._storedError){t.next=6;break}throw this._storedError;case 6:if(null!==(r=this._readableStream.read())){t.next=10;break}return this._readCapability=(0,n.createPromiseCapability)(),t.abrupt("return",this.read());case 10:return this._loaded+=r.length,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded}),i=new Uint8Array(r).buffer,t.abrupt("return",{value:i,done:!1});case 14:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._readableStream?this._readableStream.destroy(t):this._error(t)}},{key:"_error",value:function(t){this._storedError=t,this._readCapability.resolve()}},{key:"_setReadableStream",value:function(t){var e=this;this._readableStream=t,t.on("readable",(function(){e._readCapability.resolve()})),t.on("end",(function(){t.destroy(),e._done=!0,e._readCapability.resolve()})),t.on("error",(function(t){e._error(t)})),this._storedError&&this._readableStream.destroy(this._storedError)}}]),t}();function x(t,e){return{protocol:t.protocol,auth:t.auth,host:t.hostname,port:t.port,path:t.path,method:"GET",headers:e}}var E=function(t){a(r,t);var e=s(r);function r(t){var a;p(this,r);var o=function(e){if(404===e.statusCode){var r=new n.MissingPDFException('Missing PDF "'.concat(a._url,'".'));return a._storedError=r,void a._headersCapability.reject(r)}a._headersCapability.resolve(),a._setReadableStream(e);var o=function(t){return a._readableStream.headers[t.toLowerCase()]},s=(0,i.validateRangeRequestCapabilities)({getResponseHeader:o,isHttp:t.isHttp,rangeChunkSize:a._rangeChunkSize,disableRange:a._disableRange}),l=s.allowRangeRequests,u=s.suggestedLength;a._isRangeSupported=l,a._contentLength=u||a._contentLength,a._filename=(0,i.extractFilenameFromHeader)(o)};return(a=e.call(this,t))._request=null,"http:"===a._url.protocol?a._request=g.request(x(a._url,t.httpHeaders),o):a._request=b.request(x(a._url,t.httpHeaders),o),a._request.on("error",(function(t){a._storedError=t,a._headersCapability.reject(t)})),a._request.end(),a}return y(r)}(k),P=function(t){a(r,t);var e=s(r);function r(t,i,a){var o;for(var s in p(this,r),(o=e.call(this,t))._httpHeaders={},t.httpHeaders){var l=t.httpHeaders[s];void 0!==l&&(o._httpHeaders[s]=l)}o._httpHeaders.Range="bytes=".concat(i,"-").concat(a-1);var u=function(t){if(404!==t.statusCode)o._setReadableStream(t);else{var e=new n.MissingPDFException('Missing PDF "'.concat(o._url,'".'));o._storedError=e}};return o._request=null,"http:"===o._url.protocol?o._request=g.request(x(o._url,o._httpHeaders),u):o._request=b.request(x(o._url,o._httpHeaders),u),o._request.on("error",(function(t){o._storedError=t})),o._request.end(),o}return y(r)}(S),T=function(t){a(r,t);var e=s(r);function r(t){var i;p(this,r),i=e.call(this,t);var a=decodeURIComponent(i._url.path);return w.test(i._url.href)&&(a=a.replace(/^\\//,"")),m.lstat(a,(function(t,e){if(t)return"ENOENT"===t.code&&(t=new n.MissingPDFException('Missing PDF "'.concat(a,'".'))),i._storedError=t,void i._headersCapability.reject(t);i._contentLength=e.size,i._setReadableStream(m.createReadStream(a)),i._headersCapability.resolve()})),i}return y(r)}(k),C=function(t){a(r,t);var e=s(r);function r(t,n,i){var a;p(this,r),a=e.call(this,t);var o=decodeURIComponent(a._url.path);return w.test(a._url.href)&&(o=o.replace(/^\\//,"")),a._setReadableStream(m.createReadStream(o,{start:n,end:i-1})),a}return y(r)}(S)},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.createResponseStatusError=function(t,e){return 404===t||0===t&&e.startsWith("file:")?new n.MissingPDFException('Missing PDF "'+e+'".'):new n.UnexpectedResponseException("Unexpected server response (".concat(t,') while retrieving PDF "').concat(e,'".'),t)},e.extractFilenameFromHeader=function(t){var e=t("Content-Disposition");if(e){var r=(0,i.getFilenameFromContentDispositionHeader)(e);if(r.includes("%"))try{r=decodeURIComponent(r)}catch(t){}if((0,a.isPdfFile)(r))return r}return null},e.validateRangeRequestCapabilities=function(t){var e=t.getResponseHeader,r=t.isHttp,n=t.rangeChunkSize,i=t.disableRange,a={allowRangeRequests:!1,suggestedLength:void 0},o=parseInt(e("Content-Length"),10);return Number.isInteger(o)?(a.suggestedLength=o,o<=2*n||i||!r||"bytes"!==e("Accept-Ranges")||"identity"!==(e("Content-Encoding")||"identity")||(a.allowRangeRequests=!0),a):a},e.validateResponseStatus=function(t){return 200===t||206===t};var n=r(1),i=r(163),a=r(137)},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.getFilenameFromContentDispositionHeader=function(t){var e=!0,r=s("filename\\\\*","i").exec(t);if(r){var a=c(r=r[1]);return u(a=f(a=h(a=unescape(a))))}if(r=function(t){for(var e,r=[],n=s("filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)","ig");null!==(e=n.exec(t));){var a=i(e,4),o=a[1],l=a[2],u=a[3];if((o=parseInt(o,10))in r){if(0===o)break}else r[o]=[l,u]}for(var f=[],d=0;dt.length)&&(e=t.length);for(var r=0,n=new Array(e);r{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFNetworkStream=void 0;var n=r(1),i=r(162);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};u(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var l=f(t[n],t,a);if("throw"!==l.type){var u=l.arg,h=u.value;return h&&"object"==c(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,s)}))}s(l.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function s(t){o(a,n,i,s,l,"next",t)}function l(t){o(a,n,i,s,l,"throw",t)}s(void 0)}))}}function l(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:{};h(this,t),this.url=e,this.isHttp=/^https?:/i.test(e),this.httpHeaders=this.isHttp&&r.httpHeaders||Object.create(null),this.withCredentials=r.withCredentials||!1,this.getXhr=r.getXhr||function(){return new XMLHttpRequest},this.currXhrId=0,this.pendingRequests=Object.create(null)}return d(t,[{key:"requestRange",value:function(t,e,r){var n={begin:t,end:e};for(var i in r)n[i]=r[i];return this.request(n)}},{key:"requestFull",value:function(t){return this.request(t)}},{key:"request",value:function(t){var e=this.getXhr(),r=this.currXhrId++,n=this.pendingRequests[r]={xhr:e};for(var i in e.open("GET",this.url, !0),e.withCredentials=this.withCredentials,this.httpHeaders){var a=this.httpHeaders[i];void 0!==a&&e.setRequestHeader(i,a)}return this.isHttp&&"begin"in t&&"end"in t?(e.setRequestHeader("Range","bytes=".concat(t.begin,"-").concat(t.end-1)),n.expectedStatus=206):n.expectedStatus=200,e.responseType="arraybuffer",t.onError&&(e.onerror=function(r){t.onError(e.status)}),e.onreadystatechange=this.onStateChange.bind(this,r),e.onprogress=this.onProgress.bind(this,r),n.onHeadersReceived=t.onHeadersReceived,n.onDone=t.onDone,n.onError=t.onError,n.onProgress=t.onProgress,e.send(null),r}},{key:"onProgress",value:function(t,e){var r,n=this.pendingRequests[t];n&&(null===(r=n.onProgress)||void 0===r||r.call(n,e))}},{key:"onStateChange",value:function(t,e){var r=this.pendingRequests[t];if(r){var i=r.xhr;if(i.readyState>=2&&r.onHeadersReceived&&(r.onHeadersReceived(),delete r.onHeadersReceived),4===i.readyState&&t in this.pendingRequests)if(delete this.pendingRequests[t],0===i.status&&this.isHttp){var a;null===(a=r.onError)||void 0===a||a.call(r,i.status)}else{var o=i.status||200;if(200===o&&206===r.expectedStatus||o===r.expectedStatus){var s=function(t){var e=t.response;return"string"!=typeof e?e:(0,n.stringToBytes)(e).buffer}(i);if(206===o){var l=i.getResponseHeader("Content-Range"),u=/bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(l);r.onDone({begin:parseInt(u[1],10),chunk:s})}else if(s)r.onDone({begin:0,chunk:s});else{var c;null===(c=r.onError)||void 0===c||c.call(r,i.status)}}else{var h;null===(h=r.onError)||void 0===h||h.call(r,i.status)}}}}},{key:"getRequestXhr",value:function(t){return this.pendingRequests[t].xhr}},{key:"isPendingRequest",value:function(t){return t in this.pendingRequests}},{key:"abortRequest",value:function(t){var e=this.pendingRequests[t].xhr;delete this.pendingRequests[t],e.abort()}}]),t}(),v=function(){function t(e){h(this,t),this._source=e,this._manager=new p(e.url,{httpHeaders:e.httpHeaders,withCredentials:e.withCredentials}),this._rangeChunkSize=e.rangeChunkSize,this._fullRequestReader=null,this._rangeRequestReaders=[]}return d(t,[{key:"_onRangeRequestReaderClosed",value:function(t){var e=this._rangeRequestReaders.indexOf(t);e>=0&&this._rangeRequestReaders.splice(e,1)}},{key:"getFullReader",value:function(){return(0,n.assert)(!this._fullRequestReader,"PDFNetworkStream.getFullReader can only be called once."),this._fullRequestReader=new y(this._manager,this._source),this._fullRequestReader}},{key:"getRangeReader",value:function(t,e){var r=new m(this._manager,t,e);return r.onClosed=this._onRangeRequestReaderClosed.bind(this),this._rangeRequestReaders.push(r),r}},{key:"cancelAllRequests",value:function(t){var e;null===(e=this._fullRequestReader)||void 0===e||e.cancel(t);var r,n=l(this._rangeRequestReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}}}]),t}();e.PDFNetworkStream=v;var y=function(){function t(e,r){h(this,t),this._manager=e;var i={onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=r.url,this._fullRequestId=e.requestFull(i),this._headersReceivedCapability=(0,n.createPromiseCapability)(),this._disableRange=r.disableRange||!1,this._contentLength=r.length,this._rangeChunkSize=r.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._isStreamingSupported=!1,this._isRangeSupported=!1,this._cachedChunks=[],this._requests=[],this._done=!1,this._storedError=void 0,this._filename=null,this.onProgress=null}var e;return d(t,[{key:"_onHeadersReceived",value:function(){var t=this._fullRequestId,e=this._manager.getRequestXhr(t),r=function(t){return e.getResponseHeader(t)},n=(0,i.validateRangeRequestCapabilities)({getResponseHeader:r,isHttp:this._manager.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange}),a=n.allowRangeRequests,o=n.suggestedLength;a&&(this._isRangeSupported=!0),this._contentLength=o||this._contentLength,this._filename=(0,i.extractFilenameFromHeader)(r),this._isRangeSupported&&this._manager.abortRequest(t),this._headersReceivedCapability.resolve()}},{key:"_onDone",value:function(t){if(t&&(this._requests.length>0?this._requests.shift().resolve({value:t.chunk,done:!1}):this._cachedChunks.push(t.chunk)),this._done=!0,!(this._cachedChunks.length>0)){var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0}}},{key:"_onError",value:function(t){this._storedError=(0,i.createResponseStatusError)(t,this._url),this._headersReceivedCapability.reject(this._storedError);var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.reject(this._storedError)}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._cachedChunks.length=0}},{key:"_onProgress",value:function(t){var e;null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:t.loaded,total:t.lengthComputable?t.total:this._contentLength})}},{key:"filename",get:function(){return this._filename}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"contentLength",get:function(){return this._contentLength}},{key:"headersReady",get:function(){return this._headersReceivedCapability.promise}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._storedError){t.next=2;break}throw this._storedError;case 2:if(!(this._cachedChunks.length>0)){t.next=5;break}return e=this._cachedChunks.shift(),t.abrupt("return",{value:e,done:!1});case 5:if(!this._done){t.next=7;break}return t.abrupt("return",{value:void 0,done:!0});case 7:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 10:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0,this._headersReceivedCapability.reject(t);var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._manager.isPendingRequest(this._fullRequestId)&&this._manager.abortRequest(this._fullRequestId),this._fullRequestReader=null}}]),t}(),m=function(){function t(e,r,n){h(this,t),this._manager=e;var i={onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=e.url,this._requestId=e.requestRange(r,n,i),this._requests=[],this._queuedChunk=null,this._done=!1,this._storedError=void 0,this.onProgress=null,this.onClosed=null}var e;return d(t,[{key:"_close",value:function(){var t;null===(t=this.onClosed)||void 0===t||t.call(this,this)}},{key:"_onDone",value:function(t){var e=t.chunk;this._requests.length>0?this._requests.shift().resolve({value:e,done:!1}):this._queuedChunk=e,this._done=!0;var r,n=l(this._requests);try{for(n.s();!(r=n.n()).done;)r.value.resolve({value:void 0,done:!0})}catch(t){n.e(t)}finally{n.f()}this._requests.length=0,this._close()}},{key:"_onError",value:function(t){this._storedError=(0,i.createResponseStatusError)(t,this._url);var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.reject(this._storedError)}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._queuedChunk=null}},{key:"_onProgress",value:function(t){var e;this.isStreamingSupported||null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:t.loaded})}},{key:"isStreamingSupported",get:function(){return!1}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._storedError){t.next=2;break}throw this._storedError;case 2:if(null===this._queuedChunk){t.next=6;break}return e=this._queuedChunk,this._queuedChunk=null,t.abrupt("return",{value:e,done:!1});case 6:if(!this._done){t.next=8;break}return t.abrupt("return",{value:void 0,done:!0});case 8:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 11:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0;var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._manager.isPendingRequest(this._requestId)&&this._manager.abortRequest(this._requestId),this._close()}}]),t}()},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFFetchStream=void 0;var n=r(1),i=r(162);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==l(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,s)}))}s(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function s(t){o(a,n,i,s,l,"next",t)}function l(t){o(a,n,i,s,l,"throw",t)}s(void 0)}))}}function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}(this._rangeRequestReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}}}]),t}();e.PDFFetchStream=v;var y=function(){function t(e){var r=this;c(this,t),this._stream=e,this._reader=null,this._loaded=0,this._filename=null;var a=e.source;this._withCredentials=a.withCredentials||!1,this._contentLength=a.length,this._headersCapability=(0,n.createPromiseCapability)(),this._disableRange=a.disableRange||!1,this._rangeChunkSize=a.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._abortController=new AbortController,this._isStreamingSupported=!a.disableStream,this._isRangeSupported=!a.disableRange,this._headers=p(this._stream.httpHeaders);var o=a.url;fetch(o,d(this._headers,this._withCredentials,this._abortController)).then((function(t){if(!(0,i.validateResponseStatus)(t.status))throw(0,i.createResponseStatusError)(t.status,o);r._reader=t.body.getReader(),r._headersCapability.resolve();var e=function(e){return t.headers.get(e)},a=(0,i.validateRangeRequestCapabilities)({getResponseHeader:e,isHttp:r._stream.isHttp,rangeChunkSize:r._rangeChunkSize,disableRange:r._disableRange}),s=a.allowRangeRequests,l=a.suggestedLength;r._isRangeSupported=s,r._contentLength=l||r._contentLength,r._filename=(0,i.extractFilenameFromHeader)(e),!r._isStreamingSupported&&r._isRangeSupported&&r.cancel(new n.AbortException("Streaming is disabled."))})).catch(this._headersCapability.reject),this.onProgress=null}var e;return f(t,[{key:"headersReady",get:function(){return this._headersCapability.promise}},{key:"filename",get:function(){return this._filename}},{key:"contentLength",get:function(){return this._contentLength}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=s(a().mark((function t(){var e,r,n,i,o;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._headersCapability.promise;case 2:return t.next=4,this._reader.read();case 4:if(r=t.sent,n=r.value,!(i=r.done)){t.next=9;break}return t.abrupt("return",{value:n,done:i});case 9:return this._loaded+=n.byteLength,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded,total:this._contentLength}),o=new Uint8Array(n).buffer,t.abrupt("return",{value:o,done:!1});case 13:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){var e;null===(e=this._reader)||void 0===e||e.cancel(t),this._abortController.abort()}}]),t}(),m=function(){function t(e,r,a){var o=this;c(this,t),this._stream=e,this._reader=null,this._loaded=0;var s=e.source;this._withCredentials=s.withCredentials||!1,this._readCapability=(0,n.createPromiseCapability)(),this._isStreamingSupported=!s.disableStream,this._abortController=new AbortController,this._headers=p(this._stream.httpHeaders),this._headers.append("Range","bytes=".concat(r,"-").concat(a-1));var l=s.url;fetch(l,d(this._headers,this._withCredentials,this._abortController)).then((function(t){if(!(0,i.validateResponseStatus)(t.status))throw(0,i.createResponseStatusError)(t.status,l);o._readCapability.resolve(),o._reader=t.body.getReader()})).catch(this._readCapability.reject),this.onProgress=null}var e;return f(t,[{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=s(a().mark((function t(){var e,r,n,i,o;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._readCapability.promise;case 2:return t.next=4,this._reader.read();case 4:if(r=t.sent,n=r.value,!(i=r.done)){t.next=9;break}return t.abrupt("return",{value:n,done:i});case 9:return this._loaded+=n.byteLength,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded}),o=new Uint8Array(n).buffer,t.abrupt("return",{value:o,done:!1});case 13:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){var e;null===(e=this._reader)||void 0===e||e.cancel(t),this._abortController.abort()}}]),t}()}],__webpack_module_cache__={};function __w_pdfjs_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var r=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t](r,r.exports,__w_pdfjs_require__),r.exports}var __nested_webpack_exports__={};return(()=>{var t=__nested_webpack_exports__;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"AbortException",{enumerable:!0,get:function(){return e.AbortException}}),Object.defineProperty(t,"AnnotationEditorLayer",{enumerable:!0,get:function(){return a.AnnotationEditorLayer}}),Object.defineProperty(t,"AnnotationEditorParamsType",{enumerable:!0,get:function(){return e.AnnotationEditorParamsType}}),Object.defineProperty(t,"AnnotationEditorType",{enumerable:!0,get:function(){return e.AnnotationEditorType}}),Object.defineProperty(t,"AnnotationEditorUIManager",{enumerable:!0,get:function(){return o.AnnotationEditorUIManager}}),Object.defineProperty(t,"AnnotationLayer",{enumerable:!0,get:function(){return s.AnnotationLayer}}),Object.defineProperty(t,"AnnotationMode",{enumerable:!0,get:function(){return e.AnnotationMode}}),Object.defineProperty(t,"CMapCompressionType",{enumerable:!0,get:function(){return e.CMapCompressionType}}),Object.defineProperty(t,"GlobalWorkerOptions",{enumerable:!0,get:function(){return l.GlobalWorkerOptions}}),Object.defineProperty(t,"InvalidPDFException",{enumerable:!0,get:function(){return e.InvalidPDFException}}),Object.defineProperty(t,"MissingPDFException",{enumerable:!0,get:function(){return e.MissingPDFException}}),Object.defineProperty(t,"OPS",{enumerable:!0,get:function(){return e.OPS}}),Object.defineProperty(t,"PDFDataRangeTransport",{enumerable:!0,get:function(){return r.PDFDataRangeTransport}}),Object.defineProperty(t,"PDFDateString",{enumerable:!0,get:function(){return n.PDFDateString}}),Object.defineProperty(t,"PDFWorker",{enumerable:!0,get:function(){return r.PDFWorker}}),Object.defineProperty(t,"PasswordResponses",{enumerable:!0,get:function(){return e.PasswordResponses}}),Object.defineProperty(t,"PermissionFlag",{enumerable:!0,get:function(){return e.PermissionFlag}}),Object.defineProperty(t,"PixelsPerInch",{enumerable:!0,get:function(){return n.PixelsPerInch}}),Object.defineProperty(t,"RenderingCancelledException",{enumerable:!0,get:function(){return n.RenderingCancelledException}}),Object.defineProperty(t,"SVGGraphics",{enumerable:!0,get:function(){return c.SVGGraphics}}),Object.defineProperty(t,"UNSUPPORTED_FEATURES",{enumerable:!0,get:function(){return e.UNSUPPORTED_FEATURES}}),Object.defineProperty(t,"UnexpectedResponseException",{enumerable:!0,get:function(){return e.UnexpectedResponseException}}),Object.defineProperty(t,"Util",{enumerable:!0,get:function(){return e.Util}}),Object.defineProperty(t,"VerbosityLevel",{enumerable:!0,get:function(){return e.VerbosityLevel}}),Object.defineProperty(t,"XfaLayer",{enumerable:!0,get:function(){return h.XfaLayer}}),Object.defineProperty(t,"build",{enumerable:!0,get:function(){return r.build}}),Object.defineProperty(t,"createPromiseCapability",{enumerable:!0,get:function(){return e.createPromiseCapability}}),Object.defineProperty(t,"createValidAbsoluteUrl",{enumerable:!0,get:function(){return e.createValidAbsoluteUrl}}),Object.defineProperty(t,"getDocument",{enumerable:!0,get:function(){return r.getDocument}}),Object.defineProperty(t,"getFilenameFromUrl",{enumerable:!0,get:function(){return n.getFilenameFromUrl}}),Object.defineProperty(t,"getPdfFilenameFromUrl",{enumerable:!0,get:function(){return n.getPdfFilenameFromUrl}}),Object.defineProperty(t,"getXfaPageViewport",{enumerable:!0,get:function(){return n.getXfaPageViewport}}),Object.defineProperty(t,"isDataScheme",{enumerable:!0,get:function(){return n.isDataScheme}}),Object.defineProperty(t,"isPdfFile",{enumerable:!0,get:function(){return n.isPdfFile}}),Object.defineProperty(t,"loadScript",{enumerable:!0,get:function(){return n.loadScript}}),Object.defineProperty(t,"renderTextLayer",{enumerable:!0,get:function(){return i.renderTextLayer}}),Object.defineProperty(t,"setLayerDimensions",{enumerable:!0,get:function(){return n.setLayerDimensions}}),Object.defineProperty(t,"shadow",{enumerable:!0,get:function(){return e.shadow}}),Object.defineProperty(t,"updateTextLayer",{enumerable:!0,get:function(){return i.updateTextLayer}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return r.version}});var e=__w_pdfjs_require__(1),r=__w_pdfjs_require__(133),n=__w_pdfjs_require__(137),i=__w_pdfjs_require__(151),a=__w_pdfjs_require__(152),o=__w_pdfjs_require__(136),s=__w_pdfjs_require__(157),l=__w_pdfjs_require__(144),u=__w_pdfjs_require__(3),c=__w_pdfjs_require__(160),h=__w_pdfjs_require__(159);if(u.isNodeJS){var f=__w_pdfjs_require__(161).PDFNodeStream;(0,r.setPDFNetworkStreamFactory)((function(t){return new f(t)}))}else{var d=__w_pdfjs_require__(164).PDFNetworkStream,p=__w_pdfjs_require__(165).PDFFetchStream;(0,r.setPDFNetworkStreamFactory)((function(t){return(0,n.isValidFetchUrl)(t.url)?new p(t):new d(t)}))}})(),__nested_webpack_exports__})(),"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("pdfjs-dist/build/pdf",[],factory):"object"==typeof exports?exports["pdfjs-dist/build/pdf"]=factory():root["pdfjs-dist/build/pdf"]=root.pdfjsLib=factory();`;function Q(e){var t,r,s,n,a;for(t="",s=e.length,r=0;r=1&&n<=127?t+=e.charAt(r):n>2047?(a=224|n>>12&15,t+=String.fromCharCode(a),a=128|n>>6&63,t+=String.fromCharCode(a),a=128|n>>0&63,t+=String.fromCharCode(a)):(a=192|n>>6&31,t+=String.fromCharCode(a),a=128|n>>0&63,t+=String.fromCharCode(a));return t}var u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function ee(e){var t,r,s,n,a,i;for(s=e.length,r=0,t="";r>2),t+=u.charAt((n&3)<<4),t+="==";break}if(a=e.charCodeAt(r++),r==s){t+=u.charAt(n>>2),t+=u.charAt((n&3)<<4|(a&240)>>4),t+=u.charAt((a&15)<<2),t+="=";break}i=e.charCodeAt(r++),t+=u.charAt(n>>2),t+=u.charAt((n&3)<<4|(a&240)>>4),t+=u.charAt((a&15)<<2|(i&192)>>6),t+=u.charAt(i&63)}return t}function _(e){return ee(Q(e))}const te=`data:text/javascript;base64,${_(Z)}`,re=`data:text/javascript;base64,${_(J)}`,ne=D({name:"VueOfficePdf",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},staticFileUrl:{type:String,default:"https://unpkg.com/pdfjs-dist@3.1.81/"},options:{type:Object,default:()=>({})}},emits:["rendered","error"],setup(e,{emit:t}){let r=null,s=null;const n=b(null),a=b([]),i=b(0),k=5;B(()=>{r!==null&&(r.destroy(),r=null,s=null)});function S(){return R(te).then(()=>{if(window.pdfjsLib)window.pdfjsLib.GlobalWorkerOptions.workerSrc=re;else return Promise.reject("window.pdfjsLib未找到")})}function A(){return window.pdfjsLib?Promise.resolve():S()}function O(){if(!e.src){i.value=0;return}s=window.pdfjsLib.getDocument({url:j(e.src),httpHeaders:e.requestOptions&&e.requestOptions.headers,withCredentials:e.requestOptions&&e.requestOptions.withCredentials,cMapUrl:`${e.staticFileUrl.endsWith("/")?e.staticFileUrl:e.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...L(e.options,["width"])}),s.promise.then(o=>{r&&r.destroy(),r=o,i.value=e.options.lazy?Math.min(r.numPages,k):r.numPages,setTimeout(()=>{y(1)})}).catch(o=>{t("error",o)})}function P(o){if(!e.options.lazy)return;const{scrollTop:l,scrollHeight:f,clientHeight:h}=o.target;if(l+h>=f){if(i.value>=r.numPages)return;let c=i.value;i.value=Math.min(r.numPages,c+k),i.value>c&&y(c+1)}}function y(o){r.getPage(o).then(l=>{const f=l.getViewport({scale:2}),h=window.devicePixelRatio||1,c=a.value[o-1],F=c.getContext("2d");c.width=Math.floor(f.width*h),c.height=Math.floor(f.height*h);let d=Math.floor(f.width),p=Math.floor(f.height);if(e.options.width){let v=e.options.width/d;d=Math.floor(e.options.width),p=Math.floor(p*v)}let x=n.value.getBoundingClientRect().width-20;if(d>x){let v=x/d;d=Math.floor(x),p=Math.floor(p*v)}c.style.width=d+"px",c.style.height=p+"px";const I=h!==1?[h,0,0,h,0,0]:null;l.render({canvasContext:F,transform:I,viewport:f}).promise.then(()=>{i.value>o?y(o+1):t("rendered")}).catch(v=>{t("error",v)})}).catch(l=>{t("error",l)})}function E(){y(1)}U(()=>{e.src&&A().then(O).catch(o=>{console.warn(o)})}),X(()=>e.src,()=>{A().then(O).catch(o=>{console.warn(o)})});function T(o){r&&r._transport&&r._transport.getData().then(l=>{M(o||`vue-office-pdf-${new Date().getTime()}.pdf`,l.buffer)})}return{wrapperRef:n,rootRef:a,numPages:i,save:T,onScrollPdf:P,rerender:E}}}),ae={key:0,ref:"wrapperRef",class:"vue-office-pdf-wrapper",style:{background:"gray",padding:"30px 0",position:"relative"}};function ie(e,t,r,s,n,a){return g(),m("div",{class:"vue-office-pdf",ref:"vue-office-pdf",style:{"text-align":"center","overflow-y":"auto"},onScroll:t[0]||(t[0]=(...i)=>e.onScrollPdf&&e.onScrollPdf(...i))},[e.numPages?(g(),m("div",ae,[(g(!0),m(H,null,$(e.numPages,i=>(g(),m("canvas",{ref_for:!0,ref:"rootRef",key:i,style:{width:"100%"}}))),128)),q(e.$slots,"default")],512)):G("",!0)],544)}const w=N(ne,[["render",ie]]);w.install=function(e){e.component(w.name,w)};const fe={__name:"PdfDemo",setup(e){function t(){C.hideLoading()}function r(i){console.log("出差",i),C.hideLoading()}const s=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.pdf",n=b();window.docxRef=n;const a={headers:{"component-name":"VueOfficePdf"}};return(i,k)=>(g(),W(K,{accept:".pdf",placeholder:"请输入pdf文件地址","default-src":s},{default:z(S=>[V(Y(w),{ref_key:"docxRef",ref:n,src:S.src,style:{flex:"1",height:"0"},options:{lazy:!0},"request-options":a,onRendered:t,onError:r},null,8,["src"])]),_:1}))}};export{fe as default}; diff --git a/examples/dist/assets/PdfDemo-d966f1fa.js b/examples/dist/assets/PdfDemo-d966f1fa.js new file mode 100644 index 0000000..f5c4b13 --- /dev/null +++ b/examples/dist/assets/PdfDemo-d966f1fa.js @@ -0,0 +1,3 @@ +import{g as j,d as M,l as R}from"./url-de9b02cf.js";import{o as L}from"./omit-a65afa34.js";import{d as D,_ as N,r as b,h as B,o as U,w as X,a as g,c as m,F as H,k as $,l as q,m as G,e as W,f as z,g as V,u as Y}from"./index-5d373288.js";import{P as K,u as C}from"./PreviewWrapper-a5ea54f2.js";const J=`/*! For license information please see worker.js.LICENSE.txt */ +var e,t;e=globalThis,t=()=>(()=>{var e=[,(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WorkerTask=t.WorkerMessageHandler=void 0;var n=r(2),a=r(134),i=r(135),o=r(137),s=r(200),c=r(194),u=r(4),l=r(231),f=r(232);function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function d(){}function p(){}function g(){}var v={};c(v,i,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(P([])));m&&m!==t&&r.call(m,i)&&(v=m);var w=g.prototype=d.prototype=Object.create(v);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==b(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function d(e,t){return y(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||g(e,t)||p()}function p(){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 g(e,t){if(e){if("string"==typeof e)return v(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?v(e,t):void 0}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(f);try{var m=function(){var e=d(h.value,2),t=e[0],n=e[1];l.push(r.getPage(t).then((function(e){var r=new x("Save (editor): page ".concat(t));return e.saveNewAnnotations(E,r,n).finally((function(){_(r)}))})))};for(v.s();!(h=v.n()).done;)m()}catch(e){v.e(e)}finally{v.f()}}if(t)l.push(r.serializeXfaData(s));else for(var b=function(e){l.push(r.getPage(e).then((function(t){var r=new x("Save: page ".concat(e));return t.save(E,r,s).finally((function(){_(r)}))})))},w=0;w=n.VerbosityLevel.INFOS?Date.now():0;r.getOperatorList({handler:E,sink:t,task:i,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage}).then((function(e){_(i),o&&(0,n.info)("page=".concat(a+1," - getOperatorList: time=")+"".concat(Date.now()-o,"ms, len=").concat(e.length)),t.close()}),(function(e){_(i),i.terminated||t.error(e)}))}))})),E.on("GetTextContent",(function(e,t){var a=e.pageIndex;r.getPage(a).then((function(r){var i=new x("GetTextContent: page "+a);M(i);var o=k>=n.VerbosityLevel.INFOS?Date.now():0;r.extractTextContent({handler:E,task:i,sink:t,includeMarkedContent:e.includeMarkedContent,combineTextItems:e.combineTextItems}).then((function(){_(i),o&&(0,n.info)("page=".concat(a+1," - getTextContent: time=")+"".concat(Date.now()-o,"ms")),t.close()}),(function(e){_(i),i.terminated||t.error(e)}))}))})),E.on("GetStructTree",(function(e){return r.getPage(e.pageIndex).then((function(e){return r.ensure(e,"getStructTree")}))})),E.on("FontFallback",(function(e){return r.fontFallback(e.id,E)})),E.on("Cleanup",(function(e){return r.cleanup(!0)})),E.on("Terminate",(function(e){v=!0;var t=[];if(r){r.terminate(new n.AbortException("Worker was terminated."));var a=r.cleanup();t.push(a),r=null}else(0,s.clearGlobalCaches)();b&&b(new n.AbortException("Worker was terminated."));for(var i=0,o=w;i{function n(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!e)return null;try{if(r&&"string"==typeof e){if(r.addDefaultProtocol&&e.startsWith("www.")){var n=e.match(/\\./g);n&&n.length>=2&&(e="http://".concat(e))}if(r.tryConvertEncoding)try{e=M(e)}catch(e){}}var a=t?new URL(e,t):new URL(e);if(function(e){if(!e)return!1;switch(e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(a))return a}catch(e){}return null},t.getModificationDate=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date;return[e.getUTCFullYear().toString(),(e.getUTCMonth()+1).toString().padStart(2,"0"),e.getUTCDate().toString().padStart(2,"0"),e.getUTCHours().toString().padStart(2,"0"),e.getUTCMinutes().toString().padStart(2,"0"),e.getUTCSeconds().toString().padStart(2,"0")].join("")},t.getVerbosityLevel=function(){return g},t.info=function(e){g>=p.INFOS&&console.log("Info: ".concat(e))},t.isArrayBuffer=function(e){return"object"===o(e)&&null!==e&&void 0!==e.byteLength},t.isArrayEqual=function(e,t){if(e.length!==t.length)return!1;for(var r=0,n=e.length;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}(e);try{for(i.s();!(t=i.n()).done;){var o=(r=t.value,2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{for(i=(r=r.call(e)).next,0;!(c=(n=i.call(r)).done)&&(s.push(n.value),2!==s.length);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(r)||a(r,2)||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.")}()),s=o[0],c=o[1];n[s]=c}}catch(e){i.e(e)}finally{i.f()}return n},t.objectSize=function(e){return Object.keys(e).length},t.setVerbosityLevel=function(e){Number.isInteger(e)&&(g=e)},t.shadow=m,t.string32=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},t.stringToBytes=F,t.stringToPDFString=function(e){var t;if(e[0]>="ï"&&("þ"===e[0]&&"ÿ"===e[1]?t="utf-16be":"ÿ"===e[0]&&"þ"===e[1]?t="utf-16le":"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(t="utf-8"),t))try{var r=new TextDecoder(t,{fatal:!0}),n=F(e);return r.decode(n)}catch(e){v('stringToPDFString: "'.concat(e,'".'))}for(var a=[],i=0,o=e.length;i=p.WARNINGS&&console.log("Warning: ".concat(e))}function y(e){throw new Error(e)}function m(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!0,writable:!1}),r}var b=function(){function e(t,r){this.constructor===e&&y("Cannot initialize BaseException."),this.message=t,this.name=r}return e.prototype=new Error,e.constructor=e,e}();t.BaseException=b;var w=function(e){l(r,e);var t=h(r);function r(e,n){var a;return u(this,r),(a=t.call(this,e,"PasswordException")).code=n,a}return c(r)}(b);t.PasswordException=w;var k=function(e){l(r,e);var t=h(r);function r(e,n){var a;return u(this,r),(a=t.call(this,e,"UnknownErrorException")).details=n,a}return c(r)}(b);t.UnknownErrorException=k;var S=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"InvalidPDFException")}return c(r)}(b);t.InvalidPDFException=S;var x=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"MissingPDFException")}return c(r)}(b);t.MissingPDFException=x;var O=function(e){l(r,e);var t=h(r);function r(e,n){var a;return u(this,r),(a=t.call(this,e,"UnexpectedResponseException")).status=n,a}return c(r)}(b);t.UnexpectedResponseException=O;var A=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"FormatError")}return c(r)}(b);t.FormatError=A;var C=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"AbortException")}return c(r)}(b);function F(e){"string"!=typeof e&&y("Invalid argument for stringToBytes");for(var t=e.length,r=new Uint8Array(t),n=0;ne[2]&&(t[0]=e[2],t[2]=e[0]),e[1]>e[3]&&(t[1]=e[3],t[3]=e[1]),t}},{key:"intersect",value:function(e,t){var r=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),n=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(r>n)return null;var a=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),i=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return a>i?null:[r,a,n,i]}},{key:"bezierBoundingBox",value:function(e,t,r,a,i,o,s,c){for(var u,l,f,h,d,p,g,v,y=[],m=[[],[]],b=0;b<2;++b)if(0===b?(l=6*e-12*r+6*i,u=-3*e+9*r-9*i+3*s,f=3*r-3*e):(l=6*t-12*a+6*o,u=-3*t+9*a-9*o+3*c,f=3*a-3*t),Math.abs(u)<1e-12){if(Math.abs(l)<1e-12)continue;0<(h=-f/l)&&h<1&&y.push(h)}else g=l*l-4*f*u,v=Math.sqrt(g),g<0||(0<(d=(-l+v)/(2*u))&&d<1&&y.push(d),0<(p=(-l-v)/(2*u))&&p<1&&y.push(p));for(var w,k=y.length,S=k;k--;)w=1-(h=y[k]),m[0][k]=w*w*w*e+3*w*w*h*r+3*w*h*h*i+h*h*h*s,m[1][k]=w*w*w*t+3*w*w*h*a+3*w*h*h*o+h*h*h*c;return m[0][S]=e,m[1][S]=t,m[0][S+1]=s,m[1][S+1]=c,m[0].length=m[1].length=S+2,[Math.min.apply(Math,n(m[0])),Math.min.apply(Math,n(m[1])),Math.max.apply(Math,n(m[0])),Math.max.apply(Math,n(m[1]))]}}]),e}();t.Util=E;var j=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function M(e){return decodeURIComponent(escape(e))}},(e,t,r)=>{var n=r(4);!globalThis.btoa&&n.isNodeJS&&(globalThis.btoa=function(e){return Buffer.from(e,"binary").toString("base64")}),!globalThis.atob&&n.isNodeJS&&(globalThis.atob=function(e){return Buffer.from(e,"base64").toString("binary")}),!globalThis.DOMMatrix&&n.isNodeJS&&(globalThis.DOMMatrix=require("canvas").DOMMatrix),!globalThis.ReadableStream&&n.isNodeJS&&(globalThis.ReadableStream=require("web-streams-polyfill/dist/ponyfill.js").ReadableStream),Array.prototype.at||r(5),Uint8Array.prototype.at||r(79),globalThis.structuredClone||r(89)},(e,t)=>{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.isNodeJS=void 0;var n=!("object"!==("undefined"==typeof process?"undefined":r(process))||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type);t.isNodeJS=n},(e,t,r)=>{r(6);var n=r(78);e.exports=n("Array","at")},(e,t,r)=>{var n=r(7),a=r(44),i=r(68),o=r(66),s=r(73);n({target:"Array",proto:!0},{at:function(e){var t=a(this),r=i(t),n=o(e),s=n>=0?n:r+n;return s<0||s>=r?void 0:t[s]}}),s("at")},(e,t,r)=>{var n=r(8),a=r(9).f,i=r(48),o=r(52),s=r(42),c=r(60),u=r(72);e.exports=function(e,t){var r,l,f,h,d,p=e.target,g=e.global,v=e.stat;if(r=g?n:v?n[p]||s(p,{}):(n[p]||{}).prototype)for(l in t){if(h=t[l],f=e.dontCallGetSet?(d=a(r,l))&&d.value:r[l],!u(g?l:p+(v?".":"#")+l,e.forced)&&void 0!==f){if(typeof h==typeof f)continue;c(h,f)}(e.sham||f&&f.sham)&&i(h,"sham",!0),o(r,l,h,e)}}},e=>{var t=function(e){return e&&e.Math==Math&&e};e.exports=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof global&&global)||function(){return this}()||Function("return this")()},(e,t,r)=>{var n=r(10),a=r(12),i=r(14),o=r(15),s=r(16),c=r(22),u=r(43),l=r(46),f=Object.getOwnPropertyDescriptor;t.f=n?f:function(e,t){if(e=s(e),t=c(t),l)try{return f(e,t)}catch(e){}if(u(e,t))return o(!a(i.f,e,t),e[t])}},(e,t,r)=>{var n=r(11);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},(e,t,r)=>{var n=r(13),a=Function.prototype.call;e.exports=n?a.bind(a):function(){return a.apply(a,arguments)}},(e,t,r)=>{var n=r(11);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},(e,t)=>{var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,a=n&&!r.call({1:2},1);t.f=a?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},(e,t,r)=>{var n=r(17),a=r(20);e.exports=function(e){return n(a(e))}},(e,t,r)=>{var n=r(18),a=r(11),i=r(19),o=Object,s=n("".split);e.exports=a((function(){return!o("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?s(e,""):o(e)}:o},(e,t,r)=>{var n=r(13),a=Function.prototype,i=a.call,o=n&&a.bind.bind(i,i);e.exports=n?o:function(e){return function(){return i.apply(e,arguments)}}},(e,t,r)=>{var n=r(18),a=n({}.toString),i=n("".slice);e.exports=function(e){return i(a(e),8,-1)}},(e,t,r)=>{var n=r(21),a=TypeError;e.exports=function(e){if(n(e))throw a("Can't call method on "+e);return e}},e=>{e.exports=function(e){return null==e}},(e,t,r)=>{var n=r(23),a=r(27);e.exports=function(e){var t=n(e,"string");return a(t)?t:t+""}},(e,t,r)=>{var n=r(12),a=r(24),i=r(27),o=r(34),s=r(37),c=r(38),u=TypeError,l=c("toPrimitive");e.exports=function(e,t){if(!a(e)||i(e))return e;var r,c=o(e,l);if(c){if(void 0===t&&(t="default"),r=n(c,e,t),!a(r)||i(r))return r;throw u("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},(e,t,r)=>{var n=r(25),a=r(26),i=a.all;e.exports=a.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:n(e)||e===i}:function(e){return"object"==typeof e?null!==e:n(e)}},(e,t,r)=>{var n=r(26),a=n.all;e.exports=n.IS_HTMLDDA?function(e){return"function"==typeof e||e===a}:function(e){return"function"==typeof e}},e=>{var t="object"==typeof document&&document.all,r=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:r}},(e,t,r)=>{var n=r(28),a=r(25),i=r(29),o=r(30),s=Object;e.exports=o?function(e){return"symbol"==typeof e}:function(e){var t=n("Symbol");return a(t)&&i(t.prototype,s(e))}},(e,t,r)=>{var n=r(8),a=r(25);e.exports=function(e,t){return arguments.length<2?(r=n[e],a(r)?r:void 0):n[e]&&n[e][t];var r}},(e,t,r)=>{var n=r(18);e.exports=n({}.isPrototypeOf)},(e,t,r)=>{var n=r(31);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},(e,t,r)=>{var n=r(32),a=r(11);e.exports=!!Object.getOwnPropertySymbols&&!a((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},(e,t,r)=>{var n,a,i=r(8),o=r(33),s=i.process,c=i.Deno,u=s&&s.versions||c&&c.version,l=u&&u.v8;l&&(a=(n=l.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!a&&o&&(!(n=o.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\\/(\\d+)/))&&(a=+n[1]),e.exports=a},(e,t,r)=>{var n=r(28);e.exports=n("navigator","userAgent")||""},(e,t,r)=>{var n=r(35),a=r(21);e.exports=function(e,t){var r=e[t];return a(r)?void 0:n(r)}},(e,t,r)=>{var n=r(25),a=r(36),i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not a function")}},e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},(e,t,r)=>{var n=r(12),a=r(25),i=r(24),o=TypeError;e.exports=function(e,t){var r,s;if("string"===t&&a(r=e.toString)&&!i(s=n(r,e)))return s;if(a(r=e.valueOf)&&!i(s=n(r,e)))return s;if("string"!==t&&a(r=e.toString)&&!i(s=n(r,e)))return s;throw o("Can't convert object to primitive value")}},(e,t,r)=>{var n=r(8),a=r(39),i=r(43),o=r(45),s=r(31),c=r(30),u=a("wks"),l=n.Symbol,f=l&&l.for,h=c?l:l&&l.withoutSetter||o;e.exports=function(e){if(!i(u,e)||!s&&"string"!=typeof u[e]){var t="Symbol."+e;s&&i(l,e)?u[e]=l[e]:u[e]=c&&f?f(t):h(t)}return u[e]}},(e,t,r)=>{var n=r(40),a=r(41);(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.26.1",mode:n?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})},e=>{e.exports=!1},(e,t,r)=>{var n=r(8),a=r(42),i="__core-js_shared__",o=n[i]||a(i,{});e.exports=o},(e,t,r)=>{var n=r(8),a=Object.defineProperty;e.exports=function(e,t){try{a(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},(e,t,r)=>{var n=r(18),a=r(44),i=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(a(e),t)}},(e,t,r)=>{var n=r(20),a=Object;e.exports=function(e){return a(n(e))}},(e,t,r)=>{var n=r(18),a=0,i=Math.random(),o=n(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+o(++a+i,36)}},(e,t,r)=>{var n=r(10),a=r(11),i=r(47);e.exports=!n&&!a((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},(e,t,r)=>{var n=r(8),a=r(24),i=n.document,o=a(i)&&a(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},(e,t,r)=>{var n=r(10),a=r(49),i=r(15);e.exports=n?function(e,t,r){return a.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},(e,t,r)=>{var n=r(10),a=r(46),i=r(50),o=r(51),s=r(22),c=TypeError,u=Object.defineProperty,l=Object.getOwnPropertyDescriptor,f="enumerable",h="configurable",d="writable";t.f=n?i?function(e,t,r){if(o(e),t=s(t),o(r),"function"==typeof e&&"prototype"===t&&"value"in r&&d in r&&!r[d]){var n=l(e,t);n&&n[d]&&(e[t]=r.value,r={configurable:h in r?r[h]:n[h],enumerable:f in r?r[f]:n[f],writable:!1})}return u(e,t,r)}:u:function(e,t,r){if(o(e),t=s(t),o(r),a)try{return u(e,t,r)}catch(e){}if("get"in r||"set"in r)throw c("Accessors not supported");return"value"in r&&(e[t]=r.value),e}},(e,t,r)=>{var n=r(10),a=r(11);e.exports=n&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},(e,t,r)=>{var n=r(24),a=String,i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not an object")}},(e,t,r)=>{var n=r(25),a=r(49),i=r(53),o=r(42);e.exports=function(e,t,r,s){s||(s={});var c=s.enumerable,u=void 0!==s.name?s.name:t;if(n(r)&&i(r,u,s),s.global)c?e[t]=r:o(t,r);else{try{s.unsafe?e[t]&&(c=!0):delete e[t]}catch(e){}c?e[t]=r:a.f(e,t,{value:r,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},(e,t,r)=>{var n=r(11),a=r(25),i=r(43),o=r(10),s=r(54).CONFIGURABLE,c=r(55),u=r(56),l=u.enforce,f=u.get,h=Object.defineProperty,d=o&&!n((function(){return 8!==h((function(){}),"length",{value:8}).length})),p=String(String).split("String"),g=e.exports=function(e,t,r){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\\(([^)]*)\\)/,"$1")+"]"),r&&r.getter&&(t="get "+t),r&&r.setter&&(t="set "+t),(!i(e,"name")||s&&e.name!==t)&&(o?h(e,"name",{value:t,configurable:!0}):e.name=t),d&&r&&i(r,"arity")&&e.length!==r.arity&&h(e,"length",{value:r.arity});try{r&&i(r,"constructor")&&r.constructor?o&&h(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=l(e);return i(n,"source")||(n.source=p.join("string"==typeof t?t:"")),e};Function.prototype.toString=g((function(){return a(this)&&f(this).source||c(this)}),"toString")},(e,t,r)=>{var n=r(10),a=r(43),i=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,s=a(i,"name"),c=s&&"something"===function(){}.name,u=s&&(!n||n&&o(i,"name").configurable);e.exports={EXISTS:s,PROPER:c,CONFIGURABLE:u}},(e,t,r)=>{var n=r(18),a=r(25),i=r(41),o=n(Function.toString);a(i.inspectSource)||(i.inspectSource=function(e){return o(e)}),e.exports=i.inspectSource},(e,t,r)=>{var n,a,i,o=r(57),s=r(8),c=r(24),u=r(48),l=r(43),f=r(41),h=r(58),d=r(59),p="Object already initialized",g=s.TypeError,v=s.WeakMap;if(o||f.state){var y=f.state||(f.state=new v);y.get=y.get,y.has=y.has,y.set=y.set,n=function(e,t){if(y.has(e))throw g(p);return t.facade=e,y.set(e,t),t},a=function(e){return y.get(e)||{}},i=function(e){return y.has(e)}}else{var m=h("state");d[m]=!0,n=function(e,t){if(l(e,m))throw g(p);return t.facade=e,u(e,m,t),t},a=function(e){return l(e,m)?e[m]:{}},i=function(e){return l(e,m)}}e.exports={set:n,get:a,has:i,enforce:function(e){return i(e)?a(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!c(t)||(r=a(t)).type!==e)throw g("Incompatible receiver, "+e+" required");return r}}}},(e,t,r)=>{var n=r(8),a=r(25),i=n.WeakMap;e.exports=a(i)&&/native code/.test(String(i))},(e,t,r)=>{var n=r(39),a=r(45),i=n("keys");e.exports=function(e){return i[e]||(i[e]=a(e))}},e=>{e.exports={}},(e,t,r)=>{var n=r(43),a=r(61),i=r(9),o=r(49);e.exports=function(e,t,r){for(var s=a(t),c=o.f,u=i.f,l=0;l{var n=r(28),a=r(18),i=r(62),o=r(71),s=r(51),c=a([].concat);e.exports=n("Reflect","ownKeys")||function(e){var t=i.f(s(e)),r=o.f;return r?c(t,r(e)):t}},(e,t,r)=>{var n=r(63),a=r(70).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,a)}},(e,t,r)=>{var n=r(18),a=r(43),i=r(16),o=r(64).indexOf,s=r(59),c=n([].push);e.exports=function(e,t){var r,n=i(e),u=0,l=[];for(r in n)!a(s,r)&&a(n,r)&&c(l,r);for(;t.length>u;)a(n,r=t[u++])&&(~o(l,r)||c(l,r));return l}},(e,t,r)=>{var n=r(16),a=r(65),i=r(68),o=function(e){return function(t,r,o){var s,c=n(t),u=i(c),l=a(o,u);if(e&&r!=r){for(;u>l;)if((s=c[l++])!=s)return!0}else for(;u>l;l++)if((e||l in c)&&c[l]===r)return e||l||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},(e,t,r)=>{var n=r(66),a=Math.max,i=Math.min;e.exports=function(e,t){var r=n(e);return r<0?a(r+t,0):i(r,t)}},(e,t,r)=>{var n=r(67);e.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},e=>{var t=Math.ceil,r=Math.floor;e.exports=Math.trunc||function(e){var n=+e;return(n>0?r:t)(n)}},(e,t,r)=>{var n=r(69);e.exports=function(e){return n(e.length)}},(e,t,r)=>{var n=r(66),a=Math.min;e.exports=function(e){return e>0?a(n(e),9007199254740991):0}},e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},(e,t)=>{t.f=Object.getOwnPropertySymbols},(e,t,r)=>{var n=r(11),a=r(25),i=/#|\\.prototype\\./,o=function(e,t){var r=c[s(e)];return r==l||r!=u&&(a(t)?n(t):!!t)},s=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=o.data={},u=o.NATIVE="N",l=o.POLYFILL="P";e.exports=o},(e,t,r)=>{var n=r(38),a=r(74),i=r(49).f,o=n("unscopables"),s=Array.prototype;null==s[o]&&i(s,o,{configurable:!0,value:a(null)}),e.exports=function(e){s[o][e]=!0}},(e,t,r)=>{var n,a=r(51),i=r(75),o=r(70),s=r(59),c=r(77),u=r(47),l=r(58),f="prototype",h="script",d=l("IE_PROTO"),p=function(){},g=function(e){return"<"+h+">"+e+""},v=function(e){e.write(g("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{n=new ActiveXObject("htmlfile")}catch(e){}var e,t,r;y="undefined"!=typeof document?document.domain&&n?v(n):(t=u("iframe"),r="java"+h+":",t.style.display="none",c.appendChild(t),t.src=String(r),(e=t.contentWindow.document).open(),e.write(g("document.F=Object")),e.close(),e.F):v(n);for(var a=o.length;a--;)delete y[f][o[a]];return y()};s[d]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(p[f]=a(e),r=new p,p[f]=null,r[d]=e):r=y(),void 0===t?r:i.f(r,t)}},(e,t,r)=>{var n=r(10),a=r(50),i=r(49),o=r(51),s=r(16),c=r(76);t.f=n&&!a?Object.defineProperties:function(e,t){o(e);for(var r,n=s(t),a=c(t),u=a.length,l=0;u>l;)i.f(e,r=a[l++],n[r]);return e}},(e,t,r)=>{var n=r(63),a=r(70);e.exports=Object.keys||function(e){return n(e,a)}},(e,t,r)=>{var n=r(28);e.exports=n("document","documentElement")},(e,t,r)=>{var n=r(8),a=r(18);e.exports=function(e,t){return a(n[e].prototype[t])}},(e,t,r)=>{r(80)},(e,t,r)=>{var n=r(81),a=r(68),i=r(66),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("at",(function(e){var t=o(this),r=a(t),n=i(e),s=n>=0?n:r+n;return s<0||s>=r?void 0:t[s]}))},(e,t,r)=>{var n,a,i,o=r(82),s=r(10),c=r(8),u=r(25),l=r(24),f=r(43),h=r(83),d=r(36),p=r(48),g=r(52),v=r(49).f,y=r(29),m=r(85),b=r(87),w=r(38),k=r(45),S=r(56),x=S.enforce,O=S.get,A=c.Int8Array,C=A&&A.prototype,F=c.Uint8ClampedArray,P=F&&F.prototype,T=A&&m(A),I=C&&m(C),E=Object.prototype,j=c.TypeError,M=w("toStringTag"),_=k("TYPED_ARRAY_TAG"),L="TypedArrayConstructor",R=o&&!!b&&"Opera"!==h(c.opera),N=!1,D={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},B={BigInt64Array:8,BigUint64Array:8},U=function(e){var t=m(e);if(l(t)){var r=O(t);return r&&f(r,L)?r[L]:U(t)}},$=function(e){if(!l(e))return!1;var t=h(e);return f(D,t)||f(B,t)};for(n in D)(i=(a=c[n])&&a.prototype)?x(i)[L]=a:R=!1;for(n in B)(i=(a=c[n])&&a.prototype)&&(x(i)[L]=a);if((!R||!u(T)||T===Function.prototype)&&(T=function(){throw j("Incorrect invocation")},R))for(n in D)c[n]&&b(c[n],T);if((!R||!I||I===E)&&(I=T.prototype,R))for(n in D)c[n]&&b(c[n].prototype,I);if(R&&m(P)!==I&&b(P,I),s&&!f(I,M))for(n in N=!0,v(I,M,{get:function(){return l(this)?this[_]:void 0}}),D)c[n]&&p(c[n],_,n);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:R,TYPED_ARRAY_TAG:N&&_,aTypedArray:function(e){if($(e))return e;throw j("Target is not a typed array")},aTypedArrayConstructor:function(e){if(u(e)&&(!b||y(T,e)))return e;throw j(d(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,r,n){if(s){if(r)for(var a in D){var i=c[a];if(i&&f(i.prototype,e))try{delete i.prototype[e]}catch(r){try{i.prototype[e]=t}catch(e){}}}I[e]&&!r||g(I,e,r?t:R&&C[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,r){var n,a;if(s){if(b){if(r)for(n in D)if((a=c[n])&&f(a,e))try{delete a[e]}catch(e){}if(T[e]&&!r)return;try{return g(T,e,r?t:R&&T[e]||t)}catch(e){}}for(n in D)!(a=c[n])||a[e]&&!r||g(a,e,t)}},getTypedArrayConstructor:U,isView:function(e){if(!l(e))return!1;var t=h(e);return"DataView"===t||f(D,t)||f(B,t)},isTypedArray:$,TypedArray:T,TypedArrayPrototype:I}},e=>{e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},(e,t,r)=>{var n=r(84),a=r(25),i=r(19),o=r(38)("toStringTag"),s=Object,c="Arguments"==i(function(){return arguments}());e.exports=n?i:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=s(e),o))?r:c?i(t):"Object"==(n=i(t))&&a(t.callee)?"Arguments":n}},(e,t,r)=>{var n={};n[r(38)("toStringTag")]="z",e.exports="[object z]"===String(n)},(e,t,r)=>{var n=r(43),a=r(25),i=r(44),o=r(58),s=r(86),c=o("IE_PROTO"),u=Object,l=u.prototype;e.exports=s?u.getPrototypeOf:function(e){var t=i(e);if(n(t,c))return t[c];var r=t.constructor;return a(r)&&t instanceof r?r.prototype:t instanceof u?l:null}},(e,t,r)=>{var n=r(11);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},(e,t,r)=>{var n=r(18),a=r(51),i=r(88);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=n(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(r,[]),t=r instanceof Array}catch(e){}return function(r,n){return a(r),i(n),t?e(r,n):r.__proto__=n,r}}():void 0)},(e,t,r)=>{var n=r(25),a=String,i=TypeError;e.exports=function(e){if("object"==typeof e||n(e))return e;throw i("Can't set "+a(e)+" as a prototype")}},(e,t,r)=>{r(90),r(97),r(99),r(122),r(124);var n=r(133);e.exports=n.structuredClone},(e,t,r)=>{var n=r(16),a=r(73),i=r(91),o=r(56),s=r(49).f,c=r(92),u=r(96),l=r(40),f=r(10),h="Array Iterator",d=o.set,p=o.getterFor(h);e.exports=c(Array,"Array",(function(e,t){d(this,{type:h,target:n(e),index:0,kind:t})}),(function(){var e=p(this),t=e.target,r=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,u(void 0,!0)):u("keys"==r?n:"values"==r?t[n]:[n,t[n]],!1)}),"values");var g=i.Arguments=i.Array;if(a("keys"),a("values"),a("entries"),!l&&f&&"values"!==g.name)try{s(g,"name",{value:"values"})}catch(e){}},e=>{e.exports={}},(e,t,r)=>{var n=r(7),a=r(12),i=r(40),o=r(54),s=r(25),c=r(93),u=r(85),l=r(87),f=r(95),h=r(48),d=r(52),p=r(38),g=r(91),v=r(94),y=o.PROPER,m=o.CONFIGURABLE,b=v.IteratorPrototype,w=v.BUGGY_SAFARI_ITERATORS,k=p("iterator"),S="keys",x="values",O="entries",A=function(){return this};e.exports=function(e,t,r,o,p,v,C){c(r,t,o);var F,P,T,I=function(e){if(e===p&&L)return L;if(!w&&e in M)return M[e];switch(e){case S:case x:case O:return function(){return new r(this,e)}}return function(){return new r(this)}},E=t+" Iterator",j=!1,M=e.prototype,_=M[k]||M["@@iterator"]||p&&M[p],L=!w&&_||I(p),R="Array"==t&&M.entries||_;if(R&&(F=u(R.call(new e)))!==Object.prototype&&F.next&&(i||u(F)===b||(l?l(F,b):s(F[k])||d(F,k,A)),f(F,E,!0,!0),i&&(g[E]=A)),y&&p==x&&_&&_.name!==x&&(!i&&m?h(M,"name",x):(j=!0,L=function(){return a(_,this)})),p)if(P={values:I(x),keys:v?L:I(S),entries:I(O)},C)for(T in P)(w||j||!(T in M))&&d(M,T,P[T]);else n({target:t,proto:!0,forced:w||j},P);return i&&!C||M[k]===L||d(M,k,L,{name:p}),g[t]=L,P}},(e,t,r)=>{var n=r(94).IteratorPrototype,a=r(74),i=r(15),o=r(95),s=r(91),c=function(){return this};e.exports=function(e,t,r,u){var l=t+" Iterator";return e.prototype=a(n,{next:i(+!u,r)}),o(e,l,!1,!0),s[l]=c,e}},(e,t,r)=>{var n,a,i,o=r(11),s=r(25),c=r(24),u=r(74),l=r(85),f=r(52),h=r(38),d=r(40),p=h("iterator"),g=!1;[].keys&&("next"in(i=[].keys())?(a=l(l(i)))!==Object.prototype&&(n=a):g=!0),!c(n)||o((function(){var e={};return n[p].call(e)!==e}))?n={}:d&&(n=u(n)),s(n[p])||f(n,p,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:g}},(e,t,r)=>{var n=r(49).f,a=r(43),i=r(38)("toStringTag");e.exports=function(e,t,r){e&&!r&&(e=e.prototype),e&&!a(e,i)&&n(e,i,{configurable:!0,value:t})}},e=>{e.exports=function(e,t){return{value:e,done:t}}},(e,t,r)=>{var n=r(84),a=r(52),i=r(98);n||a(Object.prototype,"toString",i,{unsafe:!0})},(e,t,r)=>{var n=r(84),a=r(83);e.exports=n?{}.toString:function(){return"[object "+a(this)+"]"}},(e,t,r)=>{r(100)},(e,t,r)=>{r(101)("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(119))},(e,t,r)=>{var n=r(7),a=r(8),i=r(18),o=r(72),s=r(52),c=r(102),u=r(109),l=r(116),f=r(25),h=r(21),d=r(24),p=r(11),g=r(117),v=r(95),y=r(118);e.exports=function(e,t,r){var m=-1!==e.indexOf("Map"),b=-1!==e.indexOf("Weak"),w=m?"set":"add",k=a[e],S=k&&k.prototype,x=k,O={},A=function(e){var t=i(S[e]);s(S,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(b&&!d(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return b&&!d(e)?void 0:t(this,0===e?0:e)}:"has"==e?function(e){return!(b&&!d(e))&&t(this,0===e?0:e)}:function(e,r){return t(this,0===e?0:e,r),this})};if(o(e,!f(k)||!(b||S.forEach&&!p((function(){(new k).entries().next()})))))x=r.getConstructor(t,e,m,w),c.enable();else if(o(e,!0)){var C=new x,F=C[w](b?{}:-0,1)!=C,P=p((function(){C.has(1)})),T=g((function(e){new k(e)})),I=!b&&p((function(){for(var e=new k,t=5;t--;)e[w](t,t);return!e.has(-0)}));T||((x=t((function(e,t){l(e,S);var r=y(new k,e,x);return h(t)||u(t,r[w],{that:r,AS_ENTRIES:m}),r}))).prototype=S,S.constructor=x),(P||I)&&(A("delete"),A("has"),m&&A("get")),(I||F)&&A(w),b&&S.clear&&delete S.clear}return O[e]=x,n({global:!0,constructor:!0,forced:x!=k},O),v(x,e),b||r.setStrong(x,e,m),x}},(e,t,r)=>{var n=r(7),a=r(18),i=r(59),o=r(24),s=r(43),c=r(49).f,u=r(62),l=r(103),f=r(106),h=r(45),d=r(108),p=!1,g=h("meta"),v=0,y=function(e){c(e,g,{value:{objectID:"O"+v++,weakData:{}}})},m=e.exports={enable:function(){m.enable=function(){},p=!0;var e=u.f,t=a([].splice),r={};r[g]=1,e(r).length&&(u.f=function(r){for(var n=e(r),a=0,i=n.length;a{var n=r(19),a=r(16),i=r(62).f,o=r(104),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return s&&"Window"==n(e)?function(e){try{return i(e)}catch(e){return o(s)}}(e):i(a(e))}},(e,t,r)=>{var n=r(65),a=r(68),i=r(105),o=Array,s=Math.max;e.exports=function(e,t,r){for(var c=a(e),u=n(t,c),l=n(void 0===r?c:r,c),f=o(s(l-u,0)),h=0;u{var n=r(22),a=r(49),i=r(15);e.exports=function(e,t,r){var o=n(t);o in e?a.f(e,o,i(0,r)):e[o]=r}},(e,t,r)=>{var n=r(11),a=r(24),i=r(19),o=r(107),s=Object.isExtensible,c=n((function(){s(1)}));e.exports=c||o?function(e){return!!a(e)&&(!o||"ArrayBuffer"!=i(e))&&(!s||s(e))}:s},(e,t,r)=>{var n=r(11);e.exports=n((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},(e,t,r)=>{var n=r(11);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},(e,t,r)=>{var n=r(110),a=r(12),i=r(51),o=r(36),s=r(112),c=r(68),u=r(29),l=r(113),f=r(114),h=r(115),d=TypeError,p=function(e,t){this.stopped=e,this.result=t},g=p.prototype;e.exports=function(e,t,r){var v,y,m,b,w,k,S,x=r&&r.that,O=!(!r||!r.AS_ENTRIES),A=!(!r||!r.IS_RECORD),C=!(!r||!r.IS_ITERATOR),F=!(!r||!r.INTERRUPTED),P=n(t,x),T=function(e){return v&&h(v,"normal",e),new p(!0,e)},I=function(e){return O?(i(e),F?P(e[0],e[1],T):P(e[0],e[1])):F?P(e,T):P(e)};if(A)v=e.iterator;else if(C)v=e;else{if(!(y=f(e)))throw d(o(e)+" is not iterable");if(s(y)){for(m=0,b=c(e);b>m;m++)if((w=I(e[m]))&&u(g,w))return w;return new p(!1)}v=l(e,y)}for(k=A?e.next:v.next;!(S=a(k,v)).done;){try{w=I(S.value)}catch(e){h(v,"throw",e)}if("object"==typeof w&&w&&u(g,w))return w}return new p(!1)}},(e,t,r)=>{var n=r(111),a=r(35),i=r(13),o=n(n.bind);e.exports=function(e,t){return a(e),void 0===t?e:i?o(e,t):function(){return e.apply(t,arguments)}}},(e,t,r)=>{var n=r(19),a=r(18);e.exports=function(e){if("Function"===n(e))return a(e)}},(e,t,r)=>{var n=r(38),a=r(91),i=n("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(a.Array===e||o[i]===e)}},(e,t,r)=>{var n=r(12),a=r(35),i=r(51),o=r(36),s=r(114),c=TypeError;e.exports=function(e,t){var r=arguments.length<2?s(e):t;if(a(r))return i(n(r,e));throw c(o(e)+" is not iterable")}},(e,t,r)=>{var n=r(83),a=r(34),i=r(21),o=r(91),s=r(38)("iterator");e.exports=function(e){if(!i(e))return a(e,s)||a(e,"@@iterator")||o[n(e)]}},(e,t,r)=>{var n=r(12),a=r(51),i=r(34);e.exports=function(e,t,r){var o,s;a(e);try{if(!(o=i(e,"return"))){if("throw"===t)throw r;return r}o=n(o,e)}catch(e){s=!0,o=e}if("throw"===t)throw r;if(s)throw o;return a(o),r}},(e,t,r)=>{var n=r(29),a=TypeError;e.exports=function(e,t){if(n(t,e))return e;throw a("Incorrect invocation")}},(e,t,r)=>{var n=r(38)("iterator"),a=!1;try{var i=0,o={next:function(){return{done:!!i++}},return:function(){a=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!a)return!1;var r=!1;try{var i={};i[n]=function(){return{next:function(){return{done:r=!0}}}},e(i)}catch(e){}return r}},(e,t,r)=>{var n=r(25),a=r(24),i=r(87);e.exports=function(e,t,r){var o,s;return i&&n(o=t.constructor)&&o!==r&&a(s=o.prototype)&&s!==r.prototype&&i(e,s),e}},(e,t,r)=>{var n=r(49).f,a=r(74),i=r(120),o=r(110),s=r(116),c=r(21),u=r(109),l=r(92),f=r(96),h=r(121),d=r(10),p=r(102).fastKey,g=r(56),v=g.set,y=g.getterFor;e.exports={getConstructor:function(e,t,r,l){var f=e((function(e,n){s(e,h),v(e,{type:t,index:a(null),first:void 0,last:void 0,size:0}),d||(e.size=0),c(n)||u(n,e[l],{that:e,AS_ENTRIES:r})})),h=f.prototype,g=y(t),m=function(e,t,r){var n,a,i=g(e),o=b(e,t);return o?o.value=r:(i.last=o={index:a=p(t,!0),key:t,value:r,previous:n=i.last,next:void 0,removed:!1},i.first||(i.first=o),n&&(n.next=o),d?i.size++:e.size++,"F"!==a&&(i.index[a]=o)),e},b=function(e,t){var r,n=g(e),a=p(t);if("F"!==a)return n.index[a];for(r=n.first;r;r=r.next)if(r.key==t)return r};return i(h,{clear:function(){for(var e=g(this),t=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete t[r.index],r=r.next;e.first=e.last=void 0,d?e.size=0:this.size=0},delete:function(e){var t=this,r=g(t),n=b(t,e);if(n){var a=n.next,i=n.previous;delete r.index[n.index],n.removed=!0,i&&(i.next=a),a&&(a.previous=i),r.first==n&&(r.first=a),r.last==n&&(r.last=i),d?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=g(this),n=o(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!b(this,e)}}),i(h,r?{get:function(e){var t=b(this,e);return t&&t.value},set:function(e,t){return m(this,0===e?0:e,t)}}:{add:function(e){return m(this,e=0===e?0:e,e)}}),d&&n(h,"size",{get:function(){return g(this).size}}),f},setStrong:function(e,t,r){var n=t+" Iterator",a=y(t),i=y(n);l(e,t,(function(e,t){v(this,{type:n,target:e,state:a(e),kind:t,last:void 0})}),(function(){for(var e=i(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?f("keys"==t?r.key:"values"==t?r.value:[r.key,r.value],!1):(e.target=void 0,f(void 0,!0))}),r?"entries":"values",!r,!0),h(t)}}},(e,t,r)=>{var n=r(52);e.exports=function(e,t,r){for(var a in t)n(e,a,t[a],r);return e}},(e,t,r)=>{var n=r(28),a=r(49),i=r(38),o=r(10),s=i("species");e.exports=function(e){var t=n(e),r=a.f;o&&t&&!t[s]&&r(t,s,{configurable:!0,get:function(){return this}})}},(e,t,r)=>{r(123)},(e,t,r)=>{r(101)("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(119))},(e,t,r)=>{var n,a=r(40),i=r(7),o=r(8),s=r(28),c=r(18),u=r(11),l=r(45),f=r(25),h=r(125),d=r(21),p=r(24),g=r(27),v=r(109),y=r(51),m=r(83),b=r(43),w=r(105),k=r(48),S=r(68),x=r(126),O=r(127),A=r(129),C=r(32),F=r(130),P=r(131),T=r(132),I=o.Object,E=o.Date,j=o.Error,M=o.EvalError,_=o.RangeError,L=o.ReferenceError,R=o.SyntaxError,N=o.TypeError,D=o.URIError,B=o.PerformanceMark,U=o.WebAssembly,$=U&&U.CompileError||j,X=U&&U.LinkError||j,H=U&&U.RuntimeError||j,q=s("DOMException"),G=s("Set"),z=s("Map"),W=z.prototype,V=c(W.has),Y=c(W.get),K=c(W.set),J=c(G.prototype.add),Z=s("Object","keys"),Q=c([].push),ee=c((!0).valueOf),te=c(1..valueOf),re=c("".valueOf),ne=c(E.prototype.getTime),ae=l("structuredClone"),ie="DataCloneError",oe="Transferring",se=function(e){return!u((function(){var t=new o.Set([7]),r=e(t),n=e(I(7));return r==t||!r.has(7)||"object"!=typeof n||7!=n}))&&e},ce=function(e,t){return!u((function(){var r=new t,n=e({a:r,b:r});return!(n&&n.a===n.b&&n.a instanceof t&&n.a.stack===r.stack)}))},ue=o.structuredClone,le=a||!ce(ue,j)||!ce(ue,q)||(n=ue,!!u((function(){var e=n(new o.AggregateError([1],ae,{cause:3}));return"AggregateError"!=e.name||1!=e.errors[0]||e.message!=ae||3!=e.cause}))),fe=!ue&&se((function(e){return new B(ae,{detail:e}).detail})),he=se(ue)||fe,de=function(e){throw new q("Uncloneable type: "+e,ie)},pe=function(e,t){throw new q((t||"Cloning")+" of "+e+" cannot be properly polyfilled in this engine",ie)},ge=function(e,t){if(g(e)&&de("Symbol"),!p(e))return e;if(t){if(V(t,e))return Y(t,e)}else t=new z;var r,n,a,i,c,u,l,h,d,v,y=m(e),x=!1;switch(y){case"Array":a=[],x=!0;break;case"Object":a={},x=!0;break;case"Map":a=new z,x=!0;break;case"Set":a=new G,x=!0;break;case"RegExp":a=new RegExp(e.source,O(e));break;case"Error":switch(n=e.name){case"AggregateError":a=s("AggregateError")([]);break;case"EvalError":a=M();break;case"RangeError":a=_();break;case"ReferenceError":a=L();break;case"SyntaxError":a=R();break;case"TypeError":a=N();break;case"URIError":a=D();break;case"CompileError":a=$();break;case"LinkError":a=X();break;case"RuntimeError":a=H();break;default:a=j()}x=!0;break;case"DOMException":a=new q(e.message,e.name),x=!0;break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":r=o[y],p(r)||pe(y),a=new r(ge(e.buffer,t),e.byteOffset,"DataView"===y?e.byteLength:e.length);break;case"DOMQuad":try{a=new DOMQuad(ge(e.p1,t),ge(e.p2,t),ge(e.p3,t),ge(e.p4,t))}catch(t){he?a=he(e):pe(y)}break;case"FileList":if(i=function(){var e;try{e=new o.DataTransfer}catch(t){try{e=new o.ClipboardEvent("").clipboardData}catch(e){}}return e&&e.items&&e.files?e:null}()){for(c=0,u=S(e);c92||T&&C>94||F&&C>97)return!1;var e=new ArrayBuffer(8),t=ue(e,{transfer:[e]});return 0!=e.byteLength||8!=t.byteLength}));i({global:!0,enumerable:!0,sham:!ve,forced:le},{structuredClone:function(e){var t,r=x(arguments.length,1)>1&&!d(arguments[1])?y(arguments[1]):void 0,n=r?r.transfer:void 0;return void 0!==n&&function(e,t){if(!p(e))throw N("Transfer option cannot be converted to a sequence");var r=[];v(e,(function(e){Q(r,y(e))}));var n,a,i,s,c,u,l=0,d=S(r);if(ve)for(s=ue(r,{transfer:r});l{var n=r(18),a=r(11),i=r(25),o=r(83),s=r(28),c=r(55),u=function(){},l=[],f=s("Reflect","construct"),h=/^\\s*(?:class|function)\\b/,d=n(h.exec),p=!h.exec(u),g=function(e){if(!i(e))return!1;try{return f(u,l,e),!0}catch(e){return!1}},v=function(e){if(!i(e))return!1;switch(o(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return p||!!d(h,c(e))}catch(e){return!0}};v.sham=!0,e.exports=!f||a((function(){var e;return g(g.call)||!g(Object)||!g((function(){e=!0}))||e}))?v:g},e=>{var t=TypeError;e.exports=function(e,r){if(e{var n=r(12),a=r(43),i=r(29),o=r(128),s=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in s||a(e,"flags")||!i(s,e)?t:n(o,e)}},(e,t,r)=>{var n=r(51);e.exports=function(){var e=n(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},(e,t,r)=>{var n=r(11),a=r(15);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",a(1,7)),7!==e.stack)}))},(e,t,r)=>{var n=r(131),a=r(132);e.exports=!n&&!a&&"object"==typeof window&&"object"==typeof document},e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},(e,t,r)=>{var n=r(19),a=r(8);e.exports="process"==n(a.process)},(e,t,r)=>{var n=r(8);e.exports=n},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.RefSetCache=t.RefSet=t.Ref=t.Name=t.EOF=t.Dict=t.Cmd=t.CIRCULAR_REF=void 0,t.clearPrimitiveCaches=function(){b._clearCache(),y._clearCache(),x._clearCache()},t.isCmd=function(e,t){return e instanceof b&&(void 0===t||e.cmd===t)},t.isDict=function(e,t){return e instanceof k&&(void 0===t||C(e.get("Type"),t))},t.isName=C,t.isRefsEqual=function(e,t){return e.num===t.num&&e.gen===t.gen};var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||s(e,t)||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 o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function l(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:null;f(this,e),this._map=Object.create(null),this.xref=t,this.objId=null,this.suppressEncryption=!1,this.__nonSerializable__=w}var t,r;return d(e,[{key:"assignXref",value:function(e){this.xref=e}},{key:"size",get:function(){return Object.keys(this._map).length}},{key:"get",value:function(e,t,r){var n=this._map[e];return void 0===n&&void 0!==t&&void 0===(n=this._map[t])&&void 0!==r&&(n=this._map[r]),n instanceof x&&this.xref?this.xref.fetch(n,this.suppressEncryption):n}},{key:"getAsync",value:(t=u().mark((function e(t,r,n){var a;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0===(a=this._map[t])&&void 0!==r&&void 0===(a=this._map[r])&&void 0!==n&&(a=this._map[n]),!(a instanceof x&&this.xref)){e.next=4;break}return e.abrupt("return",this.xref.fetchAsync(a,this.suppressEncryption));case 4:return e.abrupt("return",a);case 5:case"end":return e.stop()}}),e,this)})),r=function(){var e=this,r=arguments;return new Promise((function(n,a){var i=t.apply(e,r);function o(e){l(i,n,a,o,s,"next",e)}function s(e){l(i,n,a,o,s,"throw",e)}o(void 0)}))},function(e,t,n){return r.apply(this,arguments)})},{key:"getArray",value:function(e,t,r){var n=this._map[e];if(void 0===n&&void 0!==t&&void 0===(n=this._map[t])&&void 0!==r&&(n=this._map[r]),n instanceof x&&this.xref&&(n=this.xref.fetch(n,this.suppressEncryption)),Array.isArray(n))for(var a=0,i=(n=n.slice()).length;a0&&(u._map[S]=A)}else u._map[S]=x[0]}}catch(e){w.e(e)}finally{w.f()}return l.clear(),u.size>0?u:e.empty}}]),e}();t.Dict=k;var S,x=(S=Object.create(null),function(){function e(t,r){f(this,e),this.num=t,this.gen=r}return d(e,[{key:"toString",value:function(){return 0===this.gen?"".concat(this.num,"R"):"".concat(this.num,"R").concat(this.gen)}}],[{key:"get",value:function(t,r){var n=0===r?"".concat(t,"R"):"".concat(t,"R").concat(r);return S[n]||(S[n]=new e(t,r))}},{key:"_clearCache",value:function(){S=Object.create(null)}}]),e}());t.Ref=x;var O=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;f(this,t),this._set=new Set(e&&e._set)}return d(t,[{key:"has",value:function(e){return this._set.has(e.toString())}},{key:"put",value:function(e){this._set.add(e.toString())}},{key:"remove",value:function(e){this._set.delete(e.toString())}},{key:Symbol.iterator,value:function(){return this._set.values()}},{key:"clear",value:function(){this._set.clear()}}]),t}();t.RefSet=O;var A=function(e){function t(){f(this,t),this._map=new Map}return d(t,[{key:"size",get:function(){return this._map.size}},{key:"get",value:function(e){return this._map.get(e.toString())}},{key:"has",value:function(e){return this._map.has(e.toString())}},{key:"put",value:function(e,t){this._map.set(e.toString(),t)}},{key:"putAlias",value:function(e,t){this._map.set(e.toString(),this.get(t))}},{key:Symbol.iterator,value:function(){return this._map.values()}},{key:"clear",value:function(){this._map.clear()}}]),t}();function C(e,t){return e instanceof y&&(void 0===t||e.name===t)}t.RefSetCache=A},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XRefParseException=t.XRefEntryException=t.ParserEOFException=t.PDF_VERSION_REGEXP=t.MissingDataException=t.DocStats=void 0,t.collectActions=function(e,t,r){var n=Object.create(null),o=S({dict:t,key:"AA",stopWhenFound:!1});if(o)for(var c=o.length-1;c>=0;c--){var u=o[c];if(u instanceof i.Dict){var l,f=s(u.getKeys());try{for(f.s();!(l=f.n()).done;){var h=l.value,d=r[h];if(d){var p=u.getRaw(h),g=new i.RefSet,v=[];O(p,e,v,g),v.length>0&&(n[d]=v)}}}catch(e){f.e(e)}finally{f.f()}}}if(t.has("A")){var y=[];O(t.get("A"),e,y,new i.RefSet),y.length>0&&(n.Action=y)}return(0,a.objectSize)(n)>0?n:null},t.encodeToXmlString=function(e){for(var t=[],r=0,n=0,a=e.length;n55295&&(i<57344||i>65533)&&n++,r=n+1}return 0===t.length?e:(r126||35===i||40===i||41===i||60===i||62===i||91===i||93===i||123===i||125===i||47===i||37===i)&&(r0?n:null},t.getRotationMatrix=function(e,t,r){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,r];case 270:return[0,-1,1,0,0,r];default:throw new Error("Invalid rotation")}},t.isAscii=function(e){return/^[\\x00-\\x7F]*$/.test(e)},t.isWhiteSpace=function(e){return 32===e||9===e||13===e||10===e},t.log2=function(e){return e<=0?0:Math.ceil(Math.log2(e))},t.numberToString=function(e){if(Number.isInteger(e))return e.toString();var t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)},t.parseXFAPath=function(e){var t=/(.+)\\[(\\d+)\\]$/;return e.split(".").map((function(e){var r=e.match(t);return r?{name:r[1],pos:parseInt(r[2],10)}:{name:e,pos:0}}))},t.readInt8=function(e,t){return e[t]<<24>>24},t.readUint16=function(e,t){return e[t]<<8|e[t+1]},t.readUint32=function(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0},t.recoverJsURL=function(e){var t=new RegExp("^\\\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").split(".").join("\\\\.")+")\\\\((?:'|\\")([^'\\"]*)(?:'|\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))","i").exec(e);if(t&&t[2]){var r=t[2],n=!1;return"true"===t[3]&&"app.launchURL"===t[1]&&(n=!0),{url:r,newWindow:n}}return null},t.stringToUTF16HexString=function(e){for(var t=[],r=0,n=e.length;r>8&255).toString(16).padStart(2,"0"),(255&a).toString(16).padStart(2,"0"))}return t.join("")},t.stringToUTF16String=function(e){var t=[];arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&t.push("þÿ");for(var r=0,n=e.length;r>8&255),String.fromCharCode(255&a))}return t.join("")},t.toRomanNumerals=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,a.assert)(Number.isInteger(e)&&e>0,"The number should be a positive integer.");for(var r,n=[];e>=1e3;)e-=1e3,n.push("M");r=e/100|0,e%=100,n.push(x[r]),r=e/10|0,e%=10,n.push(x[10+r]),n.push(x[20+e]);var i=n.join("");return t?i.toLowerCase():i},t.validateCSSFont=function(e){var t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),r=e.fontFamily,n=e.fontWeight,i=e.italicAngle;if(/^".*"$/.test(r)){if(/[^\\\\]"/.test(r.slice(1,r.length-1)))return(0,a.warn)('XFA - FontFamily contains some unescaped ": '.concat(r,".")),!1}else if(/^'.*'$/.test(r)){if(/[^\\\\]'/.test(r.slice(1,r.length-1)))return(0,a.warn)("XFA - FontFamily contains some unescaped ': ".concat(r,".")),!1}else{var o,c=s(r.split(/[ \\t]+/));try{for(c.s();!(o=c.n()).done;){var u=o.value;if(/^(\\d|(-(\\d|-)))/.test(u)||!/^[\\w-\\\\]+$/.test(u))return(0,a.warn)("XFA - FontFamily contains some invalid : ".concat(r,".")),!1}}catch(e){c.e(e)}finally{c.f()}}var l=n?n.toString():"";e.fontWeight=t.has(l)?l:"400";var f=parseFloat(i);return e.italicAngle=isNaN(f)||f<-90||f>90?"14":i.toString(),!0};var a=r(2),i=r(134),o=r(136);function s(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=c(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function c(e,t){if(e){if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseStream=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.NetworkPdfManager=t.LocalPdfManager=void 0;var n=r(2),a=r(138),i=r(135),o=r(140),s=r(139);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=h(e);if(t){var a=h(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===d(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return f(e)}(this,r)}}function f(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function p(){p=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=h.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==d(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function g(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function v(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){g(i,n,a,o,s,"next",e)}function s(e){g(i,n,a,o,s,"throw",e)}o(void 0)}))}}function y(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m(e,t){for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];return this.pdfDocument.cleanup(e)}},{key:"ensure",value:(t=v(p().mark((function e(t,r,a){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(0,n.unreachable)("Abstract method \`ensure\` called");case 1:case"end":return e.stop()}}),e)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"requestRange",value:function(e,t){(0,n.unreachable)("Abstract method \`requestRange\` called")}},{key:"requestLoadedStream",value:function(){(0,n.unreachable)("Abstract method \`requestLoadedStream\` called")}},{key:"sendProgressiveData",value:function(e){(0,n.unreachable)("Abstract method \`sendProgressiveData\` called")}},{key:"updatePassword",value:function(e){this._password=e}},{key:"terminate",value:function(e){(0,n.unreachable)("Abstract method \`terminate\` called")}}]),e}(),S=function(e){c(n,e);var t,r=l(n);function n(e,t,a,i,c,u,l){var h;y(this,n),(h=r.call(this))._docId=e,h._password=a,h._docBaseUrl=w(l),h.msgHandler=i,h.evaluatorOptions=c,h.enableXfa=u;var d=new s.Stream(t);return h.pdfDocument=new o.PDFDocument(f(h),d),h._loadedStreamPromise=Promise.resolve(d),h}return b(n,[{key:"ensure",value:(t=v(p().mark((function e(t,r,n){var a;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("function"!=typeof(a=t[r])){e.next=3;break}return e.abrupt("return",a.apply(t,n));case 3:return e.abrupt("return",a);case 4:case"end":return e.stop()}}),e)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"requestRange",value:function(e,t){return Promise.resolve()}},{key:"requestLoadedStream",value:function(){return this._loadedStreamPromise}},{key:"terminate",value:function(e){}}]),n}(k);t.LocalPdfManager=S;var x=function(e){c(n,e);var t,r=l(n);function n(e,t,i,s,c,u){var l;return y(this,n),(l=r.call(this))._docId=e,l._password=i.password,l._docBaseUrl=w(u),l.msgHandler=i.msgHandler,l.evaluatorOptions=s,l.enableXfa=c,l.streamManager=new a.ChunkedStreamManager(t,{msgHandler:i.msgHandler,length:i.length,disableAutoFetch:i.disableAutoFetch,rangeChunkSize:i.rangeChunkSize}),l.pdfDocument=new o.PDFDocument(f(l),l.streamManager.getStream()),l}return b(n,[{key:"ensure",value:(t=v(p().mark((function e(t,r,n){var a;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,"function"!=typeof(a=t[r])){e.next=4;break}return e.abrupt("return",a.apply(t,n));case 4:return e.abrupt("return",a);case 7:if(e.prev=7,e.t0=e.catch(0),e.t0 instanceof i.MissingDataException){e.next=11;break}throw e.t0;case 11:return e.next=13,this.requestRange(e.t0.begin,e.t0.end);case 13:return e.abrupt("return",this.ensure(t,r,n));case 14:case"end":return e.stop()}}),e,this,[[0,7]])}))),function(e,r,n){return t.apply(this,arguments)})},{key:"requestRange",value:function(e,t){return this.streamManager.requestRange(e,t)}},{key:"requestLoadedStream",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.streamManager.requestAllChunks(e)}},{key:"sendProgressiveData",value:function(e){this.streamManager.onReceiveData({chunk:e})}},{key:"terminate",value:function(e){this.streamManager.abort(e)}}]),n}(k);t.NetworkPdfManager=x},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ChunkedStreamManager=t.ChunkedStream=void 0;var a=r(2),i=r(135);function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.end?this.numChunks:Math.floor(t/this.chunkSize),a=r;athis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new i.MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}}},{key:"ensureRange",value:function(e,t){if(!(e>=t||t<=this.progressiveDataLength)){var r=Math.floor(e/this.chunkSize);if(!(r>this.numChunks))for(var n=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks),a=r;a=this.end?-1:(e>=this.progressiveDataLength&&this.ensureByte(e),this.bytes[this.pos++])}},{key:"getBytes",value:function(e){var t=this.bytes,r=this.pos,n=this.end;if(!e)return n>this.progressiveDataLength&&this.ensureRange(r,n),t.subarray(r,n);var a=r+e;return a>n&&(a=n),a>this.progressiveDataLength&&this.ensureRange(r,a),this.pos=a,t.subarray(r,a)}},{key:"getByteRange",value:function(e,t){return e<0&&(e=0),t>this.end&&(t=this.end),t>this.progressiveDataLength&&this.ensureRange(e,t),this.bytes.subarray(e,t)}},{key:"makeSubStream",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;function n(){}t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e),n.prototype=Object.create(this),n.prototype.getMissingChunks=function(){for(var e=this.chunkSize,t=Math.floor(this.start/e),r=Math.floor((this.end-1)/e)+1,n=[],a=t;a0&&void 0!==arguments[0]&&arguments[0])){var e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}},{key:"_requestChunks",value:function(e){var t=this,r=this.currRequestId++,n=new Set;this._chunksNeededByRequest.set(r,n);var i,s=o(e);try{for(s.s();!(i=s.n()).done;){var c=i.value;this.stream.hasChunk(c)||n.add(c)}}catch(e){s.e(e)}finally{s.f()}if(0===n.size)return Promise.resolve();var u=(0,a.createPromiseCapability)();this._promisesByRequest.set(r,u);var l,f=[],h=o(n);try{for(h.s();!(l=h.n()).done;){var d=l.value,p=this._requestsByChunk.get(d);p||(p=[],this._requestsByChunk.set(d,p),f.push(d)),p.push(r)}}catch(e){h.e(e)}finally{h.f()}if(f.length>0){var g,v=o(this.groupChunks(f));try{for(v.s();!(g=v.n()).done;){var y=g.value,m=y.beginChunk*this.chunkSize,b=Math.min(y.endChunk*this.chunkSize,this.length);this.sendRequest(m,b).catch(u.reject)}}catch(e){v.e(e)}finally{v.f()}}return u.promise.catch((function(e){if(!t.aborted)throw e}))}},{key:"getStream",value:function(){return this.stream}},{key:"requestRange",value:function(e,t){t=Math.min(t,this.length);for(var r=this.getBeginChunk(e),n=this.getEndChunk(t),a=[],i=r;i0&&void 0!==arguments[0]?arguments[0]:[]);try{for(r.s();!(e=r.n()).done;)for(var n=e.value,a=this.getBeginChunk(n.begin),i=this.getEndChunk(n.end),s=a;s=0&&n+1!==o&&(t.push({beginChunk:r,endChunk:n+1}),r=o),a+1===e.length&&t.push({beginChunk:r,endChunk:o+1}),n=o}return t}},{key:"onProgress",value:function(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}},{key:"onReceiveData",value:function(e){var t=e.chunk,r=void 0===e.begin,n=r?this.progressiveDataLength:e.begin,a=n+t.byteLength,i=Math.floor(n/this.chunkSize),s=a0||c.push(d)}}catch(e){h.e(e)}finally{h.f()}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){var g;if(1===this.stream.numChunksLoaded){var v=this.stream.numChunks-1;this.stream.hasChunk(v)||(g=v)}else g=this.stream.nextEmptyChunk(s);Number.isInteger(g)&&this._requestChunks([g])}for(var y=0,m=c;y{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.StringStream=t.Stream=t.NullStream=void 0;var a=r(136),i=r(2);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r=this.end?-1:this.bytes[this.pos++]}},{key:"getBytes",value:function(e){var t=this.bytes,r=this.pos,n=this.end;if(!e)return t.subarray(r,n);var a=r+e;return a>n&&(a=n),this.pos=a,t.subarray(r,a)}},{key:"getByteRange",value:function(e,t){return e<0&&(e=0),t>this.end&&(t=this.end),this.bytes.subarray(e,t)}},{key:"reset",value:function(){this.pos=this.start}},{key:"moveStart",value:function(){this.start=this.pos}},{key:"makeSubStream",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return new r(this.bytes.buffer,e,t,n)}}]),r}(a.BaseStream);t.Stream=d;var p=function(e){u(r,e);var t=f(r);function r(e){return o(this,r),t.call(this,(0,i.stringToBytes)(e))}return c(r)}(d);t.StringStream=p;var g=function(e){u(r,e);var t=f(r);function r(){return o(this,r),t.call(this,new Uint8Array(0))}return c(r)}(d);t.NullStream=g},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Page=t.PDFDocument=void 0;var n=r(141),a=r(2),i=r(135),o=r(134),s=r(180),c=r(136),u=r(196),l=r(198),f=r(200),h=r(229),d=r(146),p=r(139),g=r(204),v=r(191),y=r(144),m=r(148),b=r(203),w=r(194),k=r(205),S=r(230);function x(e){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x(e)}function O(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||P(e,t)||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 A(){A=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:k(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function p(){}var g={};c(g,i,(function(){return this}));var v=Object.getPrototypeOf,y=v&&v(v(P([])));y&&y!==t&&r.call(y,i)&&(g=y);var m=p.prototype=h.prototype=Object.create(g);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==x(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function k(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function C(e){return function(e){if(Array.isArray(e))return T(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||P(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function F(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=P(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function P(e,t){if(e){if("string"==typeof e)return T(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?T(e,t):void 0}}function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]&&arguments[1],r=(0,i.getInheritableProperty)({dict:this.pageDict,key:e,getArray:t,stopWhenFound:!1});return Array.isArray(r)?1!==r.length&&r[0]instanceof o.Dict?o.Dict.merge({xref:this.xref,dictArray:r}):r[0]:r}},{key:"content",get:function(){return this.pageDict.getArray("Contents")}},{key:"resources",get:function(){var e=this._getInheritableProperty("Resources");return(0,a.shadow)(this,"resources",e instanceof o.Dict?e:o.Dict.empty)}},{key:"_getBoundingBox",value:function(e){if(this.xfaData)return this.xfaData.bbox;var t=this._getInheritableProperty(e,!0);if(Array.isArray(t)&&4===t.length){if((t=a.Util.normalizeRect(t))[2]-t[0]>0&&t[3]-t[1]>0)return t;(0,a.warn)("Empty, or invalid, /".concat(e," entry."))}return null}},{key:"mediaBox",get:function(){return(0,a.shadow)(this,"mediaBox",this._getBoundingBox("MediaBox")||N)}},{key:"cropBox",get:function(){return(0,a.shadow)(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}},{key:"userUnit",get:function(){var e=this.pageDict.get("UserUnit");return("number"!=typeof e||e<=0)&&(e=1),(0,a.shadow)(this,"userUnit",e)}},{key:"view",get:function(){var e=this.cropBox,t=this.mediaBox;if(e!==t&&!(0,a.isArrayEqual)(e,t)){var r=a.Util.intersect(e,t);if(r&&r[2]-r[0]>0&&r[3]-r[1]>0)return(0,a.shadow)(this,"view",r);(0,a.warn)("Empty /CropBox and /MediaBox intersection.")}return(0,a.shadow)(this,"view",t)}},{key:"rotate",get:function(){var e=this._getInheritableProperty("Rotate")||0;return e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360),(0,a.shadow)(this,"rotate",e)}},{key:"_onSubStreamError",value:function(e,t,r){if(this.evaluatorOptions.ignoreErrors)return e.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorContentSubStream}),void(0,a.warn)("getContentStream - ignoring sub-stream (".concat(r,'): "').concat(t,'".'));throw t}},{key:"getContentStream",value:function(e){var t=this;return this.pdfManager.ensure(this,"content").then((function(r){return r instanceof c.BaseStream?r:Array.isArray(r)?new m.StreamsSequenceStream(r,t._onSubStreamError.bind(t,e)):new p.NullStream}))}},{key:"xfaData",get:function(){return(0,a.shadow)(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}},{key:"saveNewAnnotations",value:(s=E(A().mark((function e(t,r,a){var i,o,s,c,u,l,f,h,d,p,g;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.xfaFactory){e.next=2;break}throw new Error("XFA: Cannot save new annotations.");case 2:return i=new y.PartialEvaluator({xref:this.xref,handler:t,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions}),o=this.pageDict,s=this.annotations.slice(),e.next=7,n.AnnotationFactory.saveNewAnnotations(i,r,a);case 7:c=e.sent,u=F(c.annotations);try{for(u.s();!(l=u.n()).done;)f=l.value.ref,s.push(f)}catch(e){u.e(e)}finally{u.f()}return h=o.get("Annots"),o.set("Annots",s),d=[],p=null,this.xref.encrypt&&(p=this.xref.encrypt.createCipherTransform(this.ref.num,this.ref.gen)),(0,w.writeObject)(this.ref,o,d,p),h&&o.set("Annots",h),(g=c.dependencies).push.apply(g,[{ref:this.ref,data:d.join("")}].concat(C(c.annotations))),e.abrupt("return",g);case 20:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return s.apply(this,arguments)})},{key:"save",value:function(e,t,r){var n=new y.PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions});return this._parsedAnnotations.then((function(e){var i,o=[],s=F(e);try{for(s.s();!(i=s.n()).done;){var c=i.value;c.mustBePrinted(r)&&o.push(c.save(n,t,r).catch((function(e){return(0,a.warn)("save - ignoring annotation data during "+'"'.concat(t.name,'" task: "').concat(e,'".')),null})))}}catch(e){s.e(e)}finally{s.f()}return Promise.all(o).then((function(e){return e.filter((function(e){return!!e}))}))}))}},{key:"loadResources",value:function(e){var t=this;return this.resourcesPromise||(this.resourcesPromise=this.pdfManager.ensure(this,"resources")),this.resourcesPromise.then((function(){return new g.ObjectLoader(t.resources,e,t.xref).load()}))}},{key:"getOperatorList",value:function(e){var t=this,r=e.handler,o=e.sink,s=e.task,c=e.intent,u=e.cacheKey,l=e.annotationStorage,f=void 0===l?null:l,h=this.getContentStream(r),d=this.loadResources(["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"]),p=new y.PartialEvaluator({xref:this.xref,handler:r,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions}),g=this.xfaFactory?null:(0,i.getNewAnnotationsMap)(f),m=Promise.resolve(null);if(g){var b=g.get(this.pageIndex);b&&(m=n.AnnotationFactory.printNewAnnotations(p,s,b))}var w=Promise.all([h,d]).then((function(e){var n=O(e,1)[0],a=new v.OperatorList(c,o);return r.send("StartRenderPage",{transparency:p.hasBlendModes(t.resources,t.nonBlendModesSet),pageIndex:t.pageIndex,cacheKey:u}),p.getOperatorList({stream:n,task:s,resources:t.resources,operatorList:a}).then((function(){return a}))}));return Promise.all([w,this._parsedAnnotations,m]).then((function(e){var t=O(e,3),r=t[0],n=t[1],i=t[2];if(i&&(n=n.concat(i)),0===n.length||c&a.RenderingIntentFlag.ANNOTATIONS_DISABLE)return r.flush(!0),{length:r.totalLength};var o,u=!!(c&a.RenderingIntentFlag.ANNOTATIONS_FORMS),l=!!(c&a.RenderingIntentFlag.ANY),h=!!(c&a.RenderingIntentFlag.DISPLAY),d=!!(c&a.RenderingIntentFlag.PRINT),g=[],v=F(n);try{for(v.s();!(o=v.n()).done;){var y=o.value;(l||h&&y.mustBeViewed(f)||d&&y.mustBePrinted(f))&&g.push(y.getOperatorList(p,s,c,u,f).catch((function(e){return(0,a.warn)("getOperatorList - ignoring annotation data during "+'"'.concat(s.name,'" task: "').concat(e,'".')),{opList:null,separateForm:!1,separateCanvas:!1}})))}}catch(e){v.e(e)}finally{v.f()}return Promise.all(g).then((function(e){var t,n=!1,a=!1,i=F(e);try{for(i.s();!(t=i.n()).done;){var o=t.value,s=o.opList,c=o.separateForm,u=o.separateCanvas;r.addOpList(s),c&&(n=c),u&&(a=u)}}catch(e){i.e(e)}finally{i.f()}return r.flush(!0,{form:n,canvas:a}),{length:r.totalLength}}))}))}},{key:"extractTextContent",value:function(e){var t=this,r=e.handler,n=e.task,a=e.includeMarkedContent,i=e.sink,o=e.combineTextItems,s=this.getContentStream(r),c=this.loadResources(["ExtGState","Font","Properties","XObject"]);return Promise.all([s,c]).then((function(e){var s=O(e,1)[0];return new y.PartialEvaluator({xref:t.xref,handler:r,pageIndex:t.pageIndex,idFactory:t._localIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalImageCache:t.globalImageCache,options:t.evaluatorOptions}).getTextContent({stream:s,task:n,resources:t.resources,includeMarkedContent:a,combineTextItems:o,sink:i,viewBox:t.view})}))}},{key:"getStructTree",value:(r=E(A().mark((function e(){var t,r;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.pdfManager.ensureCatalog("structTreeRoot");case 2:if(t=e.sent){e.next=5;break}return e.abrupt("return",null);case 5:return e.next=7,this.pdfManager.ensure(this,"_parseStructTree",[t]);case 7:return r=e.sent,e.abrupt("return",r.serializable);case 9:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"_parseStructTree",value:function(e){var t=new b.StructTreePage(e,this.pageDict);return t.parse(),t}},{key:"getAnnotationsData",value:(t=E(A().mark((function e(t,r,n){var i,o,s,c,u,l,f,h,d,p,g;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._parsedAnnotations;case 2:if(0!==(i=e.sent).length){e.next=5;break}return e.abrupt("return",[]);case 5:o=[],s=[],u=!!(n&a.RenderingIntentFlag.ANY),l=!!(n&a.RenderingIntentFlag.DISPLAY),f=!!(n&a.RenderingIntentFlag.PRINT),h=F(i);try{for(h.s();!(d=h.n()).done;)p=d.value,((g=u||l&&p.viewable)||f&&p.printable)&&s.push(p.data),p.hasTextContent&&g&&(c||(c=new y.PartialEvaluator({xref:this.xref,handler:t,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions})),o.push(p.extractTextContent(c,r,this.view).catch((function(e){(0,a.warn)('getAnnotationsData - ignoring textContent during "'.concat(r.name,'" task: "').concat(e,'".'))}))))}catch(e){h.e(e)}finally{h.f()}return e.next=12,Promise.all(o);case 12:return e.abrupt("return",s);case 13:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"annotations",get:function(){var e=this._getInheritableProperty("Annots");return(0,a.shadow)(this,"annotations",Array.isArray(e)?e:[])}},{key:"_parsedAnnotations",get:function(){var e=this,t=this.pdfManager.ensure(this,"annotations").then((function(){var t,r=[],i=F(e.annotations);try{for(i.s();!(t=i.n()).done;){var o=t.value;r.push(n.AnnotationFactory.create(e.xref,o,e.pdfManager,e._localIdFactory,!1).catch((function(e){return(0,a.warn)('_parsedAnnotations: "'.concat(e,'".')),null})))}}catch(e){i.e(e)}finally{i.f()}return Promise.all(r).then((function(e){if(0===e.length)return e;var t,r,a=[],i=F(e);try{for(i.s();!(r=i.n()).done;){var o=r.value;o&&(o instanceof n.PopupAnnotation?(t||(t=[]),t.push(o)):a.push(o))}}catch(e){i.e(e)}finally{i.f()}return t&&a.push.apply(a,C(t)),a}))}));return(0,a.shadow)(this,"_parsedAnnotations",t)}},{key:"jsActions",get:function(){var e=(0,i.collectActions)(this.xref,this.pageDict,a.PageActionEventType);return(0,a.shadow)(this,"jsActions",e)}}]),e}();t.Page=D;var B=new Uint8Array([37,80,68,70,45]),U=new Uint8Array([115,116,97,114,116,120,114,101,102]),$=new Uint8Array([101,110,100,111,98,106]);function X(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1024,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=t.length,i=e.peekBytes(r),o=i.length-a;if(o<=0)return!1;if(n)for(var s=a-1,c=i.length-1;c>=s;){for(var u=0;u=a)return e.pos+=c-s,!0;c--}else for(var l=0;l<=o;){for(var f=0;f=a)return e.pos+=l,!0;l++}return!1}var H=function(){function e(t,r){if(_(this,e),r.length<=0)throw new a.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=t,this.stream=r,this.xref=new S.XRef(r,t),this._pagePromises=new Map,this._version=null;var n={font:0};this._globalIdFactory=function(){function e(){_(this,e)}return R(e,null,[{key:"getDocId",value:function(){return"g_".concat(t.docId)}},{key:"createFontId",value:function(){return"f".concat(++n.font)}},{key:"createObjId",value:function(){(0,a.unreachable)("Abstract method \`createObjId\` called.")}},{key:"getPageObjId",value:function(){(0,a.unreachable)("Abstract method \`getPageObjId\` called.")}}]),e}()}var t,r,p,m,b,w,C,P;return R(e,[{key:"parse",value:function(e){this.xref.parse(e),this.catalog=new l.Catalog(this.pdfManager,this.xref)}},{key:"linearization",get:function(){var e=null;try{e=d.Linearization.create(this.stream)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,a.info)(e)}return(0,a.shadow)(this,"linearization",e)}},{key:"startXRef",get:function(){var e=this.stream,t=0;if(this.linearization)e.reset(),X(e,$)&&(t=e.pos+6-e.start);else{for(var r=U.length,n=!1,o=e.end;!n&&o>0;)(o-=1024-r)<0&&(o=0),e.pos=o,n=X(e,U,1024,!0);if(n){var s;e.skip(9);do{s=e.getByte()}while((0,i.isWhiteSpace)(s));for(var c="";s>=32&&s<=57;)c+=String.fromCharCode(s),s=e.getByte();t=parseInt(c,10),isNaN(t)&&(t=0)}}return(0,a.shadow)(this,"startXRef",t)}},{key:"checkHeader",value:function(){var e=this.stream;if(e.reset(),X(e,B)){e.moveStart(),e.skip(B.length);for(var t,r="";(t=e.getByte())>32&&r.length<7;)r+=String.fromCharCode(t);i.PDF_VERSION_REGEXP.test(r)?this._version=r:(0,a.warn)("Invalid PDF header version: ".concat(r))}}},{key:"parseStartXRef",value:function(){this.xref.setStartXRef(this.startXRef)}},{key:"numPages",get:function(){var e;return e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages,(0,a.shadow)(this,"numPages",e)}},{key:"_hasOnlyDocumentSignatures",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return!!Array.isArray(e)&&e.every((function(e){if(!((e=t.xref.fetchIfRef(e))instanceof o.Dict))return!1;if(e.has("Kids"))return++r>10?((0,a.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"),!1):t._hasOnlyDocumentSignatures(e.get("Kids"),r);var n=(0,o.isName)(e.get("FT"),"Sig"),i=e.get("Rect"),s=Array.isArray(i)&&i.every((function(e){return 0===e}));return n&&s}))}},{key:"_xfaStreams",get:function(){var e=this.catalog.acroForm;if(!e)return null;var t=e.get("XFA"),r={"xdp:xdp":"",template:"",datasets:"",config:"",connectionSet:"",localeSet:"",stylesheet:"","/xdp:xdp":""};if(t instanceof c.BaseStream&&!t.isEmpty)return r["xdp:xdp"]=t,r;if(!Array.isArray(t)||0===t.length)return null;for(var n=0,a=t.length;n0;e.hasFields=n;var o=t.get("XFA");e.hasXfa=Array.isArray(o)&&o.length>0||o instanceof c.BaseStream&&!o.isEmpty;var s=!!(1&t.get("SigFlags")),u=s&&this._hasOnlyDocumentSignatures(r);e.hasAcroForm=n&&!u,e.hasSignatures=s}catch(e){if(e instanceof i.MissingDataException)throw e;(0,a.warn)('Cannot fetch form information: "'.concat(e,'".'))}return(0,a.shadow)(this,"formInfo",e)}},{key:"documentInfo",get:function(){var e,t={PDFFormatVersion:this.version,Language:this.catalog.lang,EncryptFilterName:this.xref.encrypt?this.xref.encrypt.filterName:null,IsLinearized:!!this.linearization,IsAcroFormPresent:this.formInfo.hasAcroForm,IsXFAPresent:this.formInfo.hasXfa,IsCollectionPresent:!!this.catalog.collection,IsSignaturesPresent:this.formInfo.hasSignatures};try{e=this.xref.trailer.get("Info")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,a.info)("The document information dictionary is invalid.")}if(!(e instanceof o.Dict))return(0,a.shadow)(this,"documentInfo",t);var r,n=F(e.getKeys());try{for(n.s();!(r=n.n()).done;){var s=r.value,c=e.get(s);switch(s){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof c){t[s]=(0,a.stringToPDFString)(c);continue}break;case"Trapped":if(c instanceof o.Name){t[s]=c;continue}break;default:var u=void 0;switch(x(c)){case"string":u=(0,a.stringToPDFString)(c);break;case"number":case"boolean":u=c;break;default:c instanceof o.Name&&(u=c)}if(void 0===u){(0,a.warn)('Bad value, for custom key "'.concat(s,'", in Info: ').concat(c,"."));continue}t.Custom||(t.Custom=Object.create(null)),t.Custom[s]=u;continue}(0,a.warn)('Bad value, for key "'.concat(s,'", in Info: ').concat(c,"."))}}catch(e){n.e(e)}finally{n.f()}return(0,a.shadow)(this,"documentInfo",t)}},{key:"fingerprints",get:function(){function e(e){return"string"==typeof e&&e.length>0&&"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"!==e}function t(e){var t,r=[],n=F(e);try{for(n.s();!(t=n.n()).done;){var a=t.value.toString(16);r.push(a.padStart(2,"0"))}}catch(e){n.e(e)}finally{n.f()}return r.join("")}var r,n,i=this.xref.trailer.get("ID");return Array.isArray(i)&&e(i[0])?(r=(0,a.stringToBytes)(i[0]),i[1]!==i[0]&&e(i[1])&&(n=(0,a.stringToBytes)(i[1]))):r=(0,u.calculateMD5)(this.stream.getByteRange(0,1024),0,1024),(0,a.shadow)(this,"fingerprints",[t(r),n?t(n):null])}},{key:"_getLinearizationPage",value:(b=E(A().mark((function e(t){var r,n,i,s,c,u;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.catalog,n=this.linearization,i=this.xref,s=o.Ref.get(n.objectNumberFirst,0),e.prev=2,e.next=5,i.fetchAsync(s);case 5:if(!((c=e.sent)instanceof o.Dict)){e.next=16;break}if(!((u=c.getRaw("Type"))instanceof o.Ref)){e.next=12;break}return e.next=11,i.fetchAsync(u);case 11:u=e.sent;case 12:if(!(0,o.isName)(u,"Page")&&(c.has("Type")||c.has("Kids"))){e.next=16;break}return r.pageKidsCountCache.has(s)||r.pageKidsCountCache.put(s,1),r.pageIndexCache.has(s)||r.pageIndexCache.put(s,0),e.abrupt("return",[c,s]);case 16:throw new a.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.");case 19:return e.prev=19,e.t0=e.catch(2),(0,a.warn)('_getLinearizationPage: "'.concat(e.t0.message,'".')),e.abrupt("return",r.getPageDict(t));case 23:case"end":return e.stop()}}),e,this,[[2,19]])}))),function(e){return b.apply(this,arguments)})},{key:"getPage",value:function(e){var t=this,r=this._pagePromises.get(e);if(r)return r;var n,a=this.catalog,i=this.linearization,s=this.xfaFactory;return n=(n=s?Promise.resolve([o.Dict.empty,null]):i&&i.pageFirst===e?this._getLinearizationPage(e):a.getPageDict(e)).then((function(r){var n=O(r,2),i=n[0],o=n[1];return new D({pdfManager:t.pdfManager,xref:t.xref,pageIndex:e,pageDict:i,ref:o,globalIdFactory:t._globalIdFactory,fontCache:a.fontCache,builtInCMapCache:a.builtInCMapCache,standardFontDataCache:a.standardFontDataCache,globalImageCache:a.globalImageCache,nonBlendModesSet:a.nonBlendModesSet,xfaFactory:s})})),this._pagePromises.set(e,n),n}},{key:"checkFirstPage",value:(m=E(A().mark((function e(){var t=arguments;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(t.length>0&&void 0!==t[0]&&t[0])){e.next=3;break}return e.abrupt("return");case 3:return e.prev=3,e.next=6,this.getPage(0);case 6:e.next=15;break;case 8:if(e.prev=8,e.t0=e.catch(3),!(e.t0 instanceof i.XRefEntryException)){e.next=15;break}return this._pagePromises.delete(0),e.next=14,this.cleanup();case 14:throw new i.XRefParseException;case 15:case"end":return e.stop()}}),e,this,[[3,8]])}))),function(){return m.apply(this,arguments)})},{key:"checkLastPage",value:(p=E(A().mark((function e(){var t,r,n,o,s,c,u,l,f,h,d,p,g,v=arguments;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=v.length>0&&void 0!==v[0]&&v[0],r=this.catalog,n=this.pdfManager,r.setActualNumPages(),e.prev=3,e.next=6,Promise.all([n.ensureDoc("xfaFactory"),n.ensureDoc("linearization"),n.ensureCatalog("numPages")]);case 6:if(!this.xfaFactory){e.next=10;break}return e.abrupt("return");case 10:o=this.linearization?this.linearization.numPages:r.numPages;case 11:if(Number.isInteger(o)){e.next=15;break}throw new a.FormatError("Page count is not an integer.");case 15:if(!(o<=1)){e.next=17;break}return e.abrupt("return");case 17:return e.next=19,this.getPage(o-1);case 19:e.next=44;break;case 21:return e.prev=21,e.t0=e.catch(3),this._pagePromises.delete(o-1),e.next=26,this.cleanup();case 26:if(!(e.t0 instanceof i.XRefEntryException)||t){e.next=28;break}throw new i.XRefParseException;case 28:return(0,a.warn)("checkLastPage - invalid /Pages tree /Count: ".concat(o,".")),e.prev=29,e.next=32,r.getAllPageDicts(t);case 32:s=e.sent,e.next=41;break;case 35:if(e.prev=35,e.t1=e.catch(29),!(e.t1 instanceof i.XRefEntryException)||t){e.next=39;break}throw new i.XRefParseException;case 39:return r.setActualNumPages(1),e.abrupt("return");case 41:c=F(s);try{for(c.s();!(u=c.n()).done;)l=O(u.value,2),f=l[0],h=O(l[1],2),d=h[0],p=h[1],g=void 0,d instanceof Error?(g=Promise.reject(d)).catch((function(){})):g=Promise.resolve(new D({pdfManager:n,xref:this.xref,pageIndex:f,pageDict:d,ref:p,globalIdFactory:this._globalIdFactory,fontCache:r.fontCache,builtInCMapCache:r.builtInCMapCache,standardFontDataCache:r.standardFontDataCache,globalImageCache:r.globalImageCache,nonBlendModesSet:r.nonBlendModesSet,xfaFactory:null})),this._pagePromises.set(f,g)}catch(e){c.e(e)}finally{c.f()}r.setActualNumPages(s.size);case 44:case"end":return e.stop()}}),e,this,[[3,21],[29,35]])}))),function(){return p.apply(this,arguments)})},{key:"fontFallback",value:function(e,t){return this.catalog.fontFallback(e,t)}},{key:"cleanup",value:(r=E(A().mark((function e(){var t,r=arguments;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=r.length>0&&void 0!==r[0]&&r[0],e.abrupt("return",this.catalog?this.catalog.cleanup(t):(0,f.clearGlobalCaches)());case 2:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"_collectFieldObjects",value:function(e,t,r){var i=this.xref.fetchIfRef(t);if(i.has("T")){var o=(0,a.stringToPDFString)(i.get("T"));e=""===e?o:"".concat(e,".").concat(o)}if(r.has(e)||r.set(e,[]),r.get(e).push(n.AnnotationFactory.create(this.xref,t,this.pdfManager,this._localIdFactory,!0).then((function(e){return e&&e.getFieldObject()})).catch((function(e){return(0,a.warn)('_collectFieldObjects: "'.concat(e,'".')),null}))),i.has("Kids")){var s,c=F(i.get("Kids"));try{for(c.s();!(s=c.n()).done;){var u=s.value;this._collectFieldObjects(e,u,r)}}catch(e){c.e(e)}finally{c.f()}}}},{key:"fieldObjects",get:function(){if(!this.formInfo.hasFields)return(0,a.shadow)(this,"fieldObjects",Promise.resolve(null));var e,t=Object.create(null),r=new Map,n=F(this.catalog.acroForm.get("Fields"));try{for(n.s();!(e=n.n()).done;){var i=e.value;this._collectFieldObjects("",i,r)}}catch(e){n.e(e)}finally{n.f()}var o,s=[],c=F(r);try{var u=function(){var e=O(o.value,2),r=e[0],n=e[1];s.push(Promise.all(n).then((function(e){(e=e.filter((function(e){return!!e}))).length>0&&(t[r]=e)})))};for(c.s();!(o=c.n()).done;)u()}catch(e){c.e(e)}finally{c.f()}return(0,a.shadow)(this,"fieldObjects",Promise.all(s).then((function(){return t})))}},{key:"hasJSActions",get:function(){var e=this.pdfManager.ensureDoc("_parseHasJSActions");return(0,a.shadow)(this,"hasJSActions",e)}},{key:"_parseHasJSActions",value:(t=E(A().mark((function e(){var t,r,n,a;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);case 2:if(t=e.sent,r=O(t,2),n=r[0],a=r[1],!n){e.next=8;break}return e.abrupt("return",!0);case 8:if(!a){e.next=10;break}return e.abrupt("return",Object.values(a).some((function(e){return e.some((function(e){return null!==e.actions}))})));case 10:return e.abrupt("return",!1);case 11:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"calculationOrderIds",get:function(){var e=this.catalog.acroForm;if(!e||!e.has("CO"))return(0,a.shadow)(this,"calculationOrderIds",null);var t=e.get("CO");if(!Array.isArray(t)||0===t.length)return(0,a.shadow)(this,"calculationOrderIds",null);var r,n=[],i=F(t);try{for(i.s();!(r=i.n()).done;){var s=r.value;s instanceof o.Ref&&n.push(s.toString())}}catch(e){i.e(e)}finally{i.f()}return 0===n.length?(0,a.shadow)(this,"calculationOrderIds",null):(0,a.shadow)(this,"calculationOrderIds",n)}}]),e}();t.PDFDocument=H},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PopupAnnotation=t.MarkupAnnotation=t.AnnotationFactory=t.AnnotationBorderStyle=t.Annotation=void 0,t.getQuadPoints=D;var n=r(2),a=r(135),i=r(142),o=r(134),s=r(194),c=r(136),u=r(189),l=r(198),f=r(143),h=r(201),d=r(204),p=r(191),g=r(139),v=r(205);function y(){return y="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=x(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:r):a.value}},y.apply(this,arguments)}function m(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&b(e,t)}function b(e,t){return b=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},b(e,t)}function w(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=x(e);if(t){var a=x(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return k(this,r)}}function k(e,t){if(t&&("object"===O(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return S(e)}function S(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function x(e){return x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},x(e)}function O(e){return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},O(e)}function A(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=I(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function C(){C=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:k(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function p(){}var g={};c(g,i,(function(){return this}));var v=Object.getPrototypeOf,y=v&&v(v(P([])));y&&y!==t&&r.call(y,i)&&(g=y);var m=p.prototype=h.prototype=Object.create(g);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==O(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function k(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function A(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),A(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;A(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function F(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function P(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){F(i,n,a,o,s,"next",e)}function s(e){F(i,n,a,o,s,"throw",e)}o(void 0)}))}}function T(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||I(e,t)||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 I(e,t){if(e){if("string"==typeof e)return E(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?E(e,t):void 0}}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r5&&void 0!==arguments[5]?arguments[5]:null,u=arguments.length>6?arguments[6]:void 0,l=arguments.length>7?arguments[7]:void 0,f=arguments.length>8&&void 0!==arguments[8]?arguments[8]:-1,h=e.fetchIfRef(t);if(h instanceof o.Dict){var d=t instanceof o.Ref?t.toString():"annot_".concat(i.createObjId()),p=h.get("Subtype");p=p instanceof o.Name?p.name:null;var g=s instanceof o.Dict?s:o.Dict.empty,v={xref:e,ref:t,dict:h,subtype:p,id:d,pdfManager:r,acroForm:g,attachments:c,xfaDatasets:u,collectFields:l,needAppearances:!l&&!0===g.get("NeedAppearances"),pageIndex:f,isOffscreenCanvasSupported:n.FeatureTest.isOffscreenCanvasSupported&&r.evaluatorOptions.isOffscreenCanvasSupported};switch(p){case"Link":return new Y(v);case"Text":return new V(v);case"Widget":var y=(0,a.getInheritableProperty)({dict:h,key:"FT"});switch(y=y instanceof o.Name?y.name:null){case"Tx":return new q(v);case"Btn":return new G(v);case"Ch":return new z(v);case"Sig":return new W(v)}return(0,n.warn)('Unimplemented widget field type "'.concat(y,'", ')+"falling back to base field type."),new H(v);case"Popup":return new K(v);case"FreeText":return new J(v);case"Line":return new Z(v);case"Square":return new Q(v);case"Circle":return new ee(v);case"PolyLine":return new te(v);case"Polygon":return new re(v);case"Caret":return new ne(v);case"Ink":return new ae(v);case"Highlight":return new ie(v);case"Underline":return new oe(v);case"Squiggly":return new se(v);case"StrikeOut":return new ce(v);case"Stamp":return new ue(v);case"FileAttachment":return new le(v);default:return l||(p?(0,n.warn)('Unimplemented annotation type "'.concat(p,'", ')+"falling back to base annotation."):(0,n.warn)("Annotation is missing the required /Subtype.")),new U(v)}}}},{key:"_getPageIndex",value:(i=P(C().mark((function e(t,r,a){var i,s,c;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,t.fetchIfRefAsync(r);case 3:if((i=e.sent)instanceof o.Dict){e.next=6;break}return e.abrupt("return",-1);case 6:if((s=i.getRaw("P"))instanceof o.Ref){e.next=9;break}return e.abrupt("return",-1);case 9:return e.next=11,a.ensureCatalog("getPageIndex",[s]);case 11:return c=e.sent,e.abrupt("return",c);case 15:return e.prev=15,e.t0=e.catch(0),(0,n.warn)('_getPageIndex: "'.concat(e.t0,'".')),e.abrupt("return",-1);case 19:case"end":return e.stop()}}),e,null,[[0,15]])}))),function(e,t,r){return i.apply(this,arguments)})},{key:"saveNewAnnotations",value:(r=P(C().mark((function e(t,r,a){var i,c,u,l,f,h,d,p,g;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=t.xref,u=[],l=[],f=A(a),e.prev=4,f.s();case 6:if((h=f.n()).done){e.next=17;break}d=h.value,e.t0=d.annotationType,e.next=e.t0===n.AnnotationEditorType.FREETEXT?11:e.t0===n.AnnotationEditorType.INK?14:15;break;case 11:return c||((p=new o.Dict(i)).set("BaseFont",o.Name.get("Helvetica")),p.set("Type",o.Name.get("Font")),p.set("Subtype",o.Name.get("Type1")),p.set("Encoding",o.Name.get("WinAnsiEncoding")),g=[],c=i.getNewTemporaryRef(),(0,s.writeObject)(c,p,g,null),u.push({ref:c,data:g.join("")})),l.push(J.createNewAnnotation(i,d,u,{evaluator:t,task:r,baseFontRef:c})),e.abrupt("break",15);case 14:l.push(ae.createNewAnnotation(i,d,u));case 15:e.next=6;break;case 17:e.next=22;break;case 19:e.prev=19,e.t1=e.catch(4),f.e(e.t1);case 22:return e.prev=22,f.f(),e.finish(22);case 25:return e.next=27,Promise.all(l);case 27:return e.t2=e.sent,e.t3=u,e.abrupt("return",{annotations:e.t2,dependencies:e.t3});case 30:case"end":return e.stop()}}),e,null,[[4,19,22,25]])}))),function(e,t,n){return r.apply(this,arguments)})},{key:"printNewAnnotations",value:(t=P(C().mark((function e(t,r,a){var i,o,s,c,u,l;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a){e.next=2;break}return e.abrupt("return",null);case 2:i=t.xref,o=[],s=n.FeatureTest.isOffscreenCanvasSupported&&t.options.isOffscreenCanvasSupported,c=A(a),e.prev=6,c.s();case 8:if((u=c.n()).done){e.next=19;break}l=u.value,e.t0=l.annotationType,e.next=e.t0===n.AnnotationEditorType.FREETEXT?13:e.t0===n.AnnotationEditorType.INK?15:17;break;case 13:return o.push(J.createNewPrintAnnotation(i,l,{evaluator:t,task:r,isOffscreenCanvasSupported:s})),e.abrupt("break",17);case 15:return o.push(ae.createNewPrintAnnotation(i,l,{isOffscreenCanvasSupported:s})),e.abrupt("break",17);case 17:e.next=8;break;case 19:e.next=24;break;case 21:e.prev=21,e.t1=e.catch(6),c.e(e.t1);case 24:return e.prev=24,c.f(),e.finish(24);case 27:return e.abrupt("return",Promise.all(o));case 28:case"end":return e.stop()}}),e,null,[[6,21,24,27]])}))),function(e,r,n){return t.apply(this,arguments)})}]),e}();function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Uint8ClampedArray(3);if(!Array.isArray(e))return t;var r=t||new Uint8ClampedArray(3);switch(e.length){case 0:return null;case 1:return f.ColorSpace.singletons.gray.getRgbItem(e,0,r,0),r;case 3:return f.ColorSpace.singletons.rgb.getRgbItem(e,0,r,0),r;case 4:return f.ColorSpace.singletons.cmyk.getRgbItem(e,0,r,0),r;default:return t}}function N(e){return Array.from(e,(function(e){return e/255}))}function D(e,t){var r=e.getArray("QuadPoints");if(!Array.isArray(r)||0===r.length||r.length%8>0)return null;for(var n=[],a=0,i=r.length/8;at[2]||ct[3]))return null;n.push([{x:o,y:u},{x:s,y:u},{x:o,y:c},{x:s,y:c}])}return n}function B(e,t,r){var a=T(n.Util.getAxialAlignedBoundingBox(t,r),4),i=a[0],o=a[1],s=a[2],c=a[3];if(i===s||o===c)return[1,0,0,1,e[0],e[1]];var u=(e[2]-e[0])/(s-i),l=(e[3]-e[1])/(c-o);return[u,0,0,l,e[0]-i*u,e[1]-o*l]}t.AnnotationFactory=L;var U=function(){function e(t){j(this,e);var r=t.dict,i=t.xref;this.setTitle(r.get("T")),this.setContents(r.get("Contents")),this.setModificationDate(r.get("M")),this.setFlags(r.get("F")),this.setRectangle(r.getArray("Rect")),this.setColor(r.getArray("C")),this.setBorderStyle(r),this.setAppearance(r),this.setOptionalContent(r);var s=r.get("MK");if(this.setBorderAndBackgroundColors(s),this.setRotation(s),this._streams=[],this.appearance&&this._streams.push(this.appearance),this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:t.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:t.subtype,hasOwnCanvas:!1},t.collectFields){var c=r.get("Kids");if(Array.isArray(c)){var u,l=[],f=A(c);try{for(f.s();!(u=f.n()).done;){var h=u.value;h instanceof o.Ref&&l.push(h.toString())}}catch(e){f.e(e)}finally{f.f()}0!==l.length&&(this.data.kidIds=l)}this.data.actions=(0,a.collectActions)(i,r,n.AnnotationActionEventType),this.data.fieldName=this._constructFieldName(r),this.data.pageIndex=t.pageIndex}this._isOffscreenCanvasSupported=t.isOffscreenCanvasSupported,this._fallbackFontDict=null,this._needAppearances=!1}var t,r,s;return _(e,[{key:"_hasFlag",value:function(e,t){return!!(e&t)}},{key:"_isViewable",value:function(e){return!this._hasFlag(e,n.AnnotationFlag.INVISIBLE)&&!this._hasFlag(e,n.AnnotationFlag.NOVIEW)}},{key:"_isPrintable",value:function(e){return this._hasFlag(e,n.AnnotationFlag.PRINT)&&!this._hasFlag(e,n.AnnotationFlag.INVISIBLE)}},{key:"mustBeViewed",value:function(e){var t=e&&e.get(this.data.id);return t&&void 0!==t.hidden?!t.hidden:this.viewable&&!this._hasFlag(this.flags,n.AnnotationFlag.HIDDEN)}},{key:"mustBePrinted",value:function(e){var t=e&&e.get(this.data.id);return t&&void 0!==t.print?t.print:this.printable}},{key:"viewable",get:function(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}},{key:"printable",get:function(){return null!==this.data.quadPoints&&0!==this.flags&&this._isPrintable(this.flags)}},{key:"_parseStringHelper",value:function(e){var t="string"==typeof e?(0,n.stringToPDFString)(e):"";return{str:t,dir:t&&"rtl"===(0,u.bidi)(t).dir?"rtl":"ltr"}}},{key:"setDefaultAppearance",value:function(e){var t=(0,a.getInheritableProperty)({dict:e.dict,key:"DA"})||e.acroForm.get("DA");this._defaultAppearance="string"==typeof t?t:"",this.data.defaultAppearanceData=(0,i.parseDefaultAppearance)(this._defaultAppearance)}},{key:"setTitle",value:function(e){this._title=this._parseStringHelper(e)}},{key:"setContents",value:function(e){this._contents=this._parseStringHelper(e)}},{key:"setModificationDate",value:function(e){this.modificationDate="string"==typeof e?e:null}},{key:"setFlags",value:function(e){this.flags=Number.isInteger(e)&&e>0?e:0}},{key:"hasFlag",value:function(e){return this._hasFlag(this.flags,e)}},{key:"setRectangle",value:function(e){Array.isArray(e)&&4===e.length?this.rectangle=n.Util.normalizeRect(e):this.rectangle=[0,0,0,0]}},{key:"setColor",value:function(e){this.color=R(e)}},{key:"setLineEndings",value:function(e){if(this.lineEndings=["None","None"],Array.isArray(e)&&2===e.length)for(var t=0;t<2;t++){var r=e[t];if(r instanceof o.Name)switch(r.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=r.name;continue}(0,n.warn)("Ignoring invalid lineEnding: ".concat(r))}}},{key:"setRotation",value:function(e){if(this.rotation=0,e instanceof o.Dict){var t=e.get("R")||0;Number.isInteger(t)&&0!==t&&((t%=360)<0&&(t+=360),t%90==0&&(this.rotation=t))}}},{key:"setBorderAndBackgroundColors",value:function(e){e instanceof o.Dict?(this.borderColor=R(e.getArray("BC"),null),this.backgroundColor=R(e.getArray("BG"),null)):this.borderColor=this.backgroundColor=null}},{key:"setBorderStyle",value:function(e){if(this.borderStyle=new $,e instanceof o.Dict)if(e.has("BS")){var t=e.get("BS"),r=t.get("Type");r&&!(0,o.isName)(r,"Border")||(this.borderStyle.setWidth(t.get("W"),this.rectangle),this.borderStyle.setStyle(t.get("S")),this.borderStyle.setDashArray(t.getArray("D")))}else if(e.has("Border")){var n=e.getArray("Border");Array.isArray(n)&&n.length>=3&&(this.borderStyle.setHorizontalCornerRadius(n[0]),this.borderStyle.setVerticalCornerRadius(n[1]),this.borderStyle.setWidth(n[2],this.rectangle),4===n.length&&this.borderStyle.setDashArray(n[3],!0))}else this.borderStyle.setWidth(0)}},{key:"setAppearance",value:function(e){this.appearance=null;var t=e.get("AP");if(t instanceof o.Dict){var r=t.get("N");if(r instanceof c.BaseStream)this.appearance=r;else if(r instanceof o.Dict){var n=e.get("AS");n instanceof o.Name&&r.has(n.name)&&(this.appearance=r.get(n.name))}}}},{key:"setOptionalContent",value:function(e){this.oc=null;var t=e.get("OC");t instanceof o.Name?(0,n.warn)("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof o.Dict&&(this.oc=t)}},{key:"loadResources",value:function(e,t){return t.dict.getAsync("Resources").then((function(t){if(t)return new d.ObjectLoader(t,e,t.xref).load().then((function(){return t}))}))}},{key:"getOperatorList",value:(s=P(C().mark((function e(t,r,a,i,s){var c,u,l,f,h,d,v,y,m,b;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=this.data,u=this.appearance,l=!!(this.data.hasOwnCanvas&&a&n.RenderingIntentFlag.DISPLAY),u){e.next=8;break}if(l){e.next=6;break}return e.abrupt("return",{opList:new p.OperatorList,separateForm:!1,separateCanvas:!1});case 6:(u=new g.StringStream("")).dict=new o.Dict;case 8:return f=u.dict,e.next=11,this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"],u);case 11:if(h=e.sent,d=f.getArray("BBox")||[0,0,1,1],v=f.getArray("Matrix")||[1,0,0,1,0,0],y=B(c.rect,d,v),m=new p.OperatorList,!this.oc){e.next=20;break}return e.next=19,t.parseMarkedContentProps(this.oc,null);case 19:b=e.sent;case 20:return void 0!==b&&m.addOp(n.OPS.beginMarkedContentProps,["OC",b]),m.addOp(n.OPS.beginAnnotation,[c.id,c.rect,y,v,l]),e.next=24,t.getOperatorList({stream:u,task:r,resources:h,operatorList:m,fallbackFontDict:this._fallbackFontDict});case 24:return m.addOp(n.OPS.endAnnotation,[]),void 0!==b&&m.addOp(n.OPS.endMarkedContent,[]),this.reset(),e.abrupt("return",{opList:m,separateForm:!1,separateCanvas:l});case 28:case"end":return e.stop()}}),e,this)}))),function(e,t,r,n,a){return s.apply(this,arguments)})},{key:"save",value:(r=P(C().mark((function e(t,r,n){return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",null);case 1:case"end":return e.stop()}}),e)}))),function(e,t,n){return r.apply(this,arguments)})},{key:"hasTextContent",get:function(){return!1}},{key:"extractTextContent",value:(t=P(C().mark((function e(t,r,n){var a,i,o,s;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.appearance){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,this.loadResources(["ExtGState","Font","Properties","XObject"],this.appearance);case 4:return a=e.sent,i=[],o=[],s={desiredSize:Math.Infinity,ready:!0,enqueue:function(e,t){var r,n=A(e.items);try{for(n.s();!(r=n.n()).done;){var a=r.value;o.push(a.str),a.hasEOL&&(i.push(o.join("")),o.length=0)}}catch(e){n.e(e)}finally{n.f()}}},e.next=10,t.getTextContent({stream:this.appearance,task:r,resources:a,includeMarkedContent:!0,combineTextItems:!0,sink:s,viewBox:n});case 10:this.reset(),o.length&&i.push(o.join("")),i.length>0&&(this.data.textContent=i);case 13:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"getFieldObject",value:function(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}},{key:"reset",value:function(){var e,t=A(this._streams);try{for(t.s();!(e=t.n()).done;)e.value.reset()}catch(e){t.e(e)}finally{t.f()}}},{key:"_constructFieldName",value:function(e){if(!e.has("T")&&!e.has("Parent"))return(0,n.warn)("Unknown field name, falling back to empty field name."),"";if(!e.has("Parent"))return(0,n.stringToPDFString)(e.get("T"));var t=[];e.has("T")&&t.unshift((0,n.stringToPDFString)(e.get("T")));var r=e,a=new o.RefSet;for(e.objId&&a.put(e.objId);r.has("Parent")&&(r=r.get("Parent"))instanceof o.Dict&&(!r.objId||!a.has(r.objId));)r.objId&&a.put(r.objId),r.has("T")&&t.unshift((0,n.stringToPDFString)(r.get("T")));return t.join(".")}}]),e}();t.Annotation=U;var $=function(){function e(){j(this,e),this.width=1,this.style=n.AnnotationBorderStyleType.SOLID,this.dashArray=[3],this.horizontalCornerRadius=0,this.verticalCornerRadius=0}return _(e,[{key:"setWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0,0];if(e instanceof o.Name)this.width=0;else if("number"==typeof e){if(e>0){var r=(t[2]-t[0])/2,a=(t[3]-t[1])/2;r>0&&a>0&&(e>r||e>a)&&((0,n.warn)("AnnotationBorderStyle.setWidth - ignoring width: ".concat(e)),e=1)}this.width=e}}},{key:"setStyle",value:function(e){if(e instanceof o.Name)switch(e.name){case"S":this.style=n.AnnotationBorderStyleType.SOLID;break;case"D":this.style=n.AnnotationBorderStyleType.DASHED;break;case"B":this.style=n.AnnotationBorderStyleType.BEVELED;break;case"I":this.style=n.AnnotationBorderStyleType.INSET;break;case"U":this.style=n.AnnotationBorderStyleType.UNDERLINE}}},{key:"setDashArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Array.isArray(e)&&e.length>0){var r,n=!0,a=!0,i=A(e);try{for(i.s();!(r=i.n()).done;){var s=r.value;if(!(+s>=0)){n=!1;break}s>0&&(a=!1)}}catch(e){i.e(e)}finally{i.f()}n&&!a?(this.dashArray=e,t&&this.setStyle(o.Name.get("D"))):this.width=0}else e&&(this.width=0)}},{key:"setHorizontalCornerRadius",value:function(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}},{key:"setVerticalCornerRadius",value:function(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}]),e}();t.AnnotationBorderStyle=$;var X=function(e){m(i,e);var t,r,a=w(i);function i(e){var t;j(this,i),t=a.call(this,e);var r=e.dict;if(r.has("IRT")){var s=r.getRaw("IRT");t.data.inReplyTo=s instanceof o.Ref?s.toString():null;var c=r.get("RT");t.data.replyType=c instanceof o.Name?c.name:n.AnnotationReplyType.REPLY}if(t.data.replyType===n.AnnotationReplyType.GROUP){var u=r.get("IRT");t.setTitle(u.get("T")),t.data.titleObj=t._title,t.setContents(u.get("Contents")),t.data.contentsObj=t._contents,u.has("CreationDate")?(t.setCreationDate(u.get("CreationDate")),t.data.creationDate=t.creationDate):t.data.creationDate=null,u.has("M")?(t.setModificationDate(u.get("M")),t.data.modificationDate=t.modificationDate):t.data.modificationDate=null,t.data.hasPopup=u.has("Popup"),u.has("C")?(t.setColor(u.getArray("C")),t.data.color=t.color):t.data.color=null}else t.data.titleObj=t._title,t.setCreationDate(r.get("CreationDate")),t.data.creationDate=t.creationDate,t.data.hasPopup=r.has("Popup"),r.has("C")||(t.data.color=null);return r.has("RC")&&(t.data.richText=v.XFAFactory.getRichTextAsHtml(r.get("RC"))),t}return _(i,[{key:"setCreationDate",value:function(e){this.creationDate="string"==typeof e?e:null}},{key:"_setDefaultAppearance",value:function(e){var t=e.xref,r=e.extra,n=e.strokeColor,a=e.fillColor,i=e.blendMode,s=e.strokeAlpha,c=e.fillAlpha,u=e.pointsCallback,l=Number.MAX_VALUE,f=Number.MAX_VALUE,h=Number.MIN_VALUE,d=Number.MIN_VALUE,p=["q"];r&&p.push(r),n&&p.push("".concat(n[0]," ").concat(n[1]," ").concat(n[2]," RG")),a&&p.push("".concat(a[0]," ").concat(a[1]," ").concat(a[2]," rg"));var v=this.data.quadPoints;v||(v=[[{x:this.rectangle[0],y:this.rectangle[3]},{x:this.rectangle[2],y:this.rectangle[3]},{x:this.rectangle[0],y:this.rectangle[1]},{x:this.rectangle[2],y:this.rectangle[1]}]]);var y,m=A(v);try{for(m.s();!(y=m.n()).done;){var b=T(u(p,y.value),4),w=b[0],k=b[1],S=b[2],x=b[3];l=Math.min(l,w),h=Math.max(h,k),f=Math.min(f,S),d=Math.max(d,x)}}catch(e){m.e(e)}finally{m.f()}p.push("Q");var O=new o.Dict(t),C=new o.Dict(t);C.set("Subtype",o.Name.get("Form"));var F=new g.StringStream(p.join(" "));F.dict=C,O.set("Fm0",F);var P=new o.Dict(t);i&&P.set("BM",o.Name.get(i)),"number"==typeof s&&P.set("CA",s),"number"==typeof c&&P.set("ca",c);var I=new o.Dict(t);I.set("GS0",P);var E=new o.Dict(t);E.set("ExtGState",I),E.set("XObject",O);var j=new o.Dict(t);j.set("Resources",E);var M=this.data.rect=[l,f,h,d];j.set("BBox",M),this.appearance=new g.StringStream("/GS0 gs /Fm0 Do"),this.appearance.dict=j,this._streams.push(this.appearance,F)}}],[{key:"createNewAnnotation",value:(r=P(C().mark((function e(t,r,n,a){var i,o,c,u,l,f,h;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=t.getNewTemporaryRef(),e.next=3,this.createNewAppearanceStream(r,t,a);case 3:return o=e.sent,c=[],o?(l=t.getNewTemporaryRef(),u=this.createNewDict(r,t,{apRef:l}),f=t.encrypt?t.encrypt.createCipherTransform(l.num,l.gen):null,(0,s.writeObject)(l,o,c,f),n.push({ref:l,data:c.join("")})):u=this.createNewDict(r,t,{}),c.length=0,h=t.encrypt?t.encrypt.createCipherTransform(i.num,i.gen):null,(0,s.writeObject)(i,u,c,h),e.abrupt("return",{ref:i,data:c.join("")});case 10:case"end":return e.stop()}}),e,this)}))),function(e,t,n,a){return r.apply(this,arguments)})},{key:"createNewPrintAnnotation",value:(t=P(C().mark((function e(t,r,n){var a,i;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.createNewAppearanceStream(r,t,n);case 2:return a=e.sent,i=this.createNewDict(r,t,{ap:a}),e.abrupt("return",new this.prototype.constructor({dict:i,xref:t,isOffscreenCanvasSupported:n.isOffscreenCanvasSupported}));case 5:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})}]),i}(U);t.MarkupAnnotation=X;var H=function(e){m(f,e);var t,r,c,u,l=w(f);function f(e){var t;j(this,f),t=l.call(this,e);var r=e.dict,i=e.xref,s=t.data;t.ref=e.ref,t._needAppearances=e.needAppearances,s.annotationType=n.AnnotationType.WIDGET,void 0===s.fieldName&&(s.fieldName=t._constructFieldName(r)),void 0===s.actions&&(s.actions=(0,a.collectActions)(i,r,n.AnnotationActionEventType));var c=(0,a.getInheritableProperty)({dict:r,key:"V",getArray:!0});s.fieldValue=t._decodeFormValue(c);var u=(0,a.getInheritableProperty)({dict:r,key:"DV",getArray:!0});if(s.defaultFieldValue=t._decodeFormValue(u),void 0===c&&e.xfaDatasets){var h=t._title.str;h&&(t._hasValueFromXFA=!0,s.fieldValue=c=e.xfaDatasets.getValue(h))}void 0===c&&null!==s.defaultFieldValue&&(s.fieldValue=s.defaultFieldValue),s.alternativeText=(0,n.stringToPDFString)(r.get("TU")||""),t.setDefaultAppearance(e),s.hasAppearance=t._needAppearances&&void 0!==s.fieldValue&&null!==s.fieldValue||s.hasAppearance;var d=(0,a.getInheritableProperty)({dict:r,key:"FT"});s.fieldType=d instanceof o.Name?d.name:null;var p=(0,a.getInheritableProperty)({dict:r,key:"DR"}),g=e.acroForm.get("DR"),v=t.appearance&&t.appearance.dict.get("Resources");return t._fieldResources={localResources:p,acroFormResources:g,appearanceResources:v,mergedResources:o.Dict.merge({xref:i,dictArray:[p,v,g],mergeSubDicts:!0})},s.fieldFlags=(0,a.getInheritableProperty)({dict:r,key:"Ff"}),(!Number.isInteger(s.fieldFlags)||s.fieldFlags<0)&&(s.fieldFlags=0),s.readOnly=t.hasFieldFlag(n.AnnotationFieldFlag.READONLY),s.required=t.hasFieldFlag(n.AnnotationFieldFlag.REQUIRED),s.hidden=t._hasFlag(s.annotationFlags,n.AnnotationFlag.HIDDEN),t}return _(f,[{key:"_decodeFormValue",value:function(e){return Array.isArray(e)?e.filter((function(e){return"string"==typeof e})).map((function(e){return(0,n.stringToPDFString)(e)})):e instanceof o.Name?(0,n.stringToPDFString)(e.name):"string"==typeof e?(0,n.stringToPDFString)(e):null}},{key:"hasFieldFlag",value:function(e){return!!(this.data.fieldFlags&e)}},{key:"getRotationMatrix",value:function(e){var t=e?e.get(this.data.id):void 0,r=t&&t.rotation;if(void 0===r&&(r=this.rotation),0===r)return n.IDENTITY_MATRIX;var i=this.data.rect[2]-this.data.rect[0],o=this.data.rect[3]-this.data.rect[1];return(0,a.getRotationMatrix)(r,i,o)}},{key:"getBorderAndBackgroundAppearances",value:function(e){var t=e?e.get(this.data.id):void 0,r=t&&t.rotation;if(void 0===r&&(r=this.rotation),!this.backgroundColor&&!this.borderColor)return"";var n=this.data.rect[2]-this.data.rect[0],a=this.data.rect[3]-this.data.rect[1],o=0===r||180===r?"0 0 ".concat(n," ").concat(a," re"):"0 0 ".concat(a," ").concat(n," re"),s="";if(this.backgroundColor&&(s="".concat((0,i.getPdfColor)(this.backgroundColor,!0)," ").concat(o," f ")),this.borderColor){var c=this.borderStyle.width||1;s+="".concat(c," w ").concat((0,i.getPdfColor)(this.borderColor,!1)," ").concat(o," S ")}return s}},{key:"getOperatorList",value:(u=P(C().mark((function e(t,r,a,i,o){var s,c,u,l,h,d,v;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!i||this instanceof W){e.next=2;break}return e.abrupt("return",{opList:new p.OperatorList,separateForm:!0,separateCanvas:!1});case 2:if(this._hasText){e.next=4;break}return e.abrupt("return",y(x(f.prototype),"getOperatorList",this).call(this,t,r,a,i,o));case 4:return e.next=6,this._getAppearance(t,r,a,o);case 6:if(s=e.sent,!this.appearance||null!==s){e.next=9;break}return e.abrupt("return",y(x(f.prototype),"getOperatorList",this).call(this,t,r,a,i,o));case 9:if(c=new p.OperatorList,this._defaultAppearance&&null!==s){e.next=12;break}return e.abrupt("return",{opList:c,separateForm:!1,separateCanvas:!1});case 12:if(u=[1,0,0,1,0,0],l=[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]],h=B(this.data.rect,l,u),!this.oc){e.next=19;break}return e.next=18,t.parseMarkedContentProps(this.oc,null);case 18:d=e.sent;case 19:return void 0!==d&&c.addOp(n.OPS.beginMarkedContentProps,["OC",d]),c.addOp(n.OPS.beginAnnotation,[this.data.id,this.data.rect,h,this.getRotationMatrix(o),!1]),v=new g.StringStream(s),e.next=24,t.getOperatorList({stream:v,task:r,resources:this._fieldResources.mergedResources,operatorList:c});case 24:return c.addOp(n.OPS.endAnnotation,[]),void 0!==d&&c.addOp(n.OPS.endMarkedContent,[]),e.abrupt("return",{opList:c,separateForm:!1,separateCanvas:!1});case 27:case"end":return e.stop()}}),e,this)}))),function(e,t,r,n,a){return u.apply(this,arguments)})},{key:"_getMKDict",value:function(e){var t=new o.Dict(null);return e&&t.set("R",e),this.borderColor&&t.set("BC",N(this.borderColor)),this.backgroundColor&&t.set("BG",N(this.backgroundColor)),t.size>0?t:null}},{key:"save",value:(c=P(C().mark((function e(t,r,i){var c,u,l,f,h,d,p,v,y,m,b,w,k,S,x,O,F,P,T,I,E,j,M,_,L,R=this;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=i?i.get(this.data.id):void 0,u=c&&c.value,l=c&&c.rotation,u!==this.data.fieldValue&&void 0!==u){e.next=7;break}if(this._hasValueFromXFA||void 0!==l){e.next=6;break}return e.abrupt("return",null);case 6:u=u||this.data.fieldValue;case 7:if(void 0!==l||this._hasValueFromXFA||!Array.isArray(u)||!Array.isArray(this.data.fieldValue)||u.length!==this.data.fieldValue.length||!u.every((function(e,t){return e===R.data.fieldValue[t]}))){e.next=9;break}return e.abrupt("return",null);case 9:if(void 0===l&&(l=this.rotation),f=null,this._needAppearances){e.next=19;break}return e.next=14,this._getAppearance(t,r,n.RenderingIntentFlag.SAVE,i);case 14:if(null!==(f=e.sent)){e.next=17;break}return e.abrupt("return",null);case 17:e.next=19;break;case 19:if(h=!1,f&&f.needAppearances&&(h=!0,f=null),d=t.xref,(p=d.fetchIfRef(this.ref))instanceof o.Dict){e.next=25;break}return e.abrupt("return",null);case 25:v=new o.Dict(d),y=A(p.getKeys());try{for(y.s();!(m=y.n()).done;)"AP"!==(b=m.value)&&v.set(b,p.getRaw(b))}catch(e){y.e(e)}finally{y.f()}return w={path:(0,n.stringToPDFString)(v.get("T")||""),value:u},k=function(e){return(0,a.isAscii)(e)?e:(0,a.stringToUTF16String)(e,!0)},v.set("V",Array.isArray(u)?u.map(k):k(u)),(S=this._getMKDict(l))&&v.set("MK",S),x=d.encrypt,O=x?x.createCipherTransform(this.ref.num,this.ref.gen):null,F=[],P=[{ref:this.ref,data:"",xfa:w,needAppearances:h}],null!==f&&(T=d.getNewTemporaryRef(),I=new o.Dict(d),v.set("AP",I),I.set("N",T),E=null,x&&(E=x.createCipherTransform(T.num,T.gen),f=E.encryptString(f)),j=this._getSaveFieldResources(d),M=new g.StringStream(f),(_=M.dict=new o.Dict(d)).set("Length",f.length),_.set("Subtype",o.Name.get("Form")),_.set("Resources",j),_.set("BBox",[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]]),(L=this.getRotationMatrix(i))!==n.IDENTITY_MATRIX&&_.set("Matrix",L),(0,s.writeObject)(T,M,F,E),P.push({ref:T,data:F.join(""),xfa:null,needAppearances:!1}),F.length=0),v.set("M","D:".concat((0,n.getModificationDate)())),(0,s.writeObject)(this.ref,v,F,O),P[0].data=F.join(""),e.abrupt("return",P);case 42:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return c.apply(this,arguments)})},{key:"_getAppearance",value:(r=P(C().mark((function e(t,r,o,s){var c,u,l,h,d,p,g,v,y,m,b,w,k,S,x,O,F,P,I,E,j,M,_,L,R,N,D,B,U,$,X,H,q,G,z,W,V,Y,K,J,Z,Q,ee,te;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.hasFieldFlag(n.AnnotationFieldFlag.PASSWORD)){e.next=3;break}return e.abrupt("return",null);case 3:if((c=s?s.get(this.data.id):void 0)&&(u=c.formattedValue||c.value,l=c.rotation),void 0!==l||void 0!==u||this._needAppearances){e.next=8;break}if(this._hasValueFromXFA&&!this.appearance){e.next=8;break}return e.abrupt("return",null);case 8:if(h=this.getBorderAndBackgroundAppearances(s),void 0!==u){e.next=13;break}if(u=this.data.fieldValue){e.next=13;break}return e.abrupt("return","/Tx BMC q ".concat(h,"Q EMC"));case 13:if(Array.isArray(u)&&1===u.length&&(u=u[0]),(0,n.assert)("string"==typeof u,"Expected \`value\` to be a string."),this.data.combo?(d=this.data.options.find((function(e){var t=e.exportValue;return u===t}))||this.data.options[0],u=d&&d.displayValue||""):u=u.trim(),""!==u){e.next=18;break}return e.abrupt("return","/Tx BMC q ".concat(h,"Q EMC"));case 18:return void 0===l&&(l=this.rotation),p=-1,this.data.multiLine?(g=u.split(/\\r\\n?|\\n/).map((function(e){return e.normalize("NFC")})),p=g.length):g=[u.replace(/\\r\\n?|\\n/,"").normalize("NFC")],v=1,y=2,m=this.data.rect[3]-this.data.rect[1],b=this.data.rect[2]-this.data.rect[0],90!==l&&270!==l||(b=(w=[m,b])[0],m=w[1]),this._defaultAppearance||(this.data.defaultAppearanceData=(0,i.parseDefaultAppearance)(this._defaultAppearance="/Helvetica 0 Tf 0 g")),e.next=29,f._getFontData(t,r,this.data.defaultAppearanceData,this._fieldResources.mergedResources);case 29:k=e.sent,F=[],P=!1,I=A(g);try{for(I.s();!(E=I.n()).done;)j=E.value,(M=k.encodeString(j)).length>1&&(P=!0),F.push(M.join(""))}catch(e){I.e(e)}finally{I.f()}if(!(P&&o&n.RenderingIntentFlag.SAVE)){e.next=36;break}return e.abrupt("return",{needAppearances:!0});case 36:if(!P||!this._isOffscreenCanvasSupported){e.next=58;break}if(_=this.data.comb?"monospace":"sans-serif",L=new i.FakeUnicodeFont(t.xref,_),R=L.createFontResources(g.join("")),N=R.getRaw("Font"),this._fieldResources.mergedResources.has("Font")){D=this._fieldResources.mergedResources.get("Font"),B=A(N.getKeys());try{for(B.s();!(U=B.n()).done;)$=U.value,D.set($,N.getRaw($))}catch(e){B.e(e)}finally{B.f()}}else this._fieldResources.mergedResources.set("Font",N);return X=L.fontName.name,e.next=45,f._getFontData(t,r,{fontName:X,fontSize:0},R);case 45:for(k=e.sent,H=0,q=F.length;H2)){e.next=75;break}return e.abrupt("return","/Tx BMC q ".concat(h,"BT ")+S+" 1 0 0 1 ".concat((0,a.numberToString)(y)," ").concat((0,a.numberToString)(Q)," Tm (").concat((0,a.escapeString)(F[0]),") Tj")+" ET Q EMC");case 75:return ee={shift:0},te=this._renderText(F[0],k,x,b,Z,ee,y,Q),e.abrupt("return","/Tx BMC q ".concat(h,"BT ")+S+" 1 0 0 1 0 0 Tm ".concat(te)+" ET Q EMC");case 78:case"end":return e.stop()}}),e,this)}))),function(e,t,n,a){return r.apply(this,arguments)})},{key:"_getTextWidth",value:function(e,t){return t.charsToGlyphs(e).reduce((function(e,t){return e+t.width}),0)/1e3}},{key:"_computeFontSize",value:function(e,t,r,a,o){var s=this,c=this.data.defaultAppearanceData.fontSize,u=(c||12)*n.LINE_FACTOR,l=Math.round(e/u);if(!c){var f=function(e){return Math.floor(100*e)/100};if(-1===o){var h=this._getTextWidth(r,a);c=f(Math.min(e/n.LINE_FACTOR,h>t?t/h:1/0)),l=1}else{var d,p=r.split(/\\r\\n?|\\n/),g=[],v=A(p);try{for(v.s();!(d=v.n()).done;){var y=d.value,m=a.encodeString(y).join(""),b=a.charsToGlyphs(m),w=a.getCharPositions(m);g.push({line:m,glyphs:b,positions:w})}}catch(e){v.e(e)}finally{v.f()}var k=function(r){for(var n=0,i=0,o=g;ie)return!0}return!1};for(l=Math.max(l,o);k(c=f((u=e/l)/n.LINE_FACTOR));)l++}var S=this.data.defaultAppearanceData,x=S.fontName,O=S.fontColor;this._defaultAppearance=(0,i.createDefaultAppearance)({fontSize:c,fontName:x,fontColor:O})}return[this._defaultAppearance,c,e/l]}},{key:"_renderText",value:function(e,t,r,n,i,o,s,c){var u;u=1===i?(n-this._getTextWidth(e,t)*r)/2:2===i?n-this._getTextWidth(e,t)*r-s:s;var l=(0,a.numberToString)(u-o.shift);return o.shift=u,c=(0,a.numberToString)(c),"".concat(l," ").concat(c," Td (").concat((0,a.escapeString)(e),") Tj")}},{key:"_getSaveFieldResources",value:function(e){var t=this._fieldResources,r=t.localResources,n=t.appearanceResources,a=t.acroFormResources,i=this.data.defaultAppearanceData&&this.data.defaultAppearanceData.fontName;if(!i)return r||o.Dict.empty;for(var s=0,c=[r,n];s2)&&(s=null),i.data.textAlignment=s;var c=(0,a.getInheritableProperty)({dict:o,key:"MaxLen"});return(!Number.isInteger(c)||c<0)&&(c=0),i.data.maxLen=c,i.data.multiLine=i.hasFieldFlag(n.AnnotationFieldFlag.MULTILINE),i.data.comb=i.hasFieldFlag(n.AnnotationFieldFlag.COMB)&&!i.hasFieldFlag(n.AnnotationFieldFlag.MULTILINE)&&!i.hasFieldFlag(n.AnnotationFieldFlag.PASSWORD)&&!i.hasFieldFlag(n.AnnotationFieldFlag.FILESELECT)&&0!==i.data.maxLen,i.data.doNotScroll=i.hasFieldFlag(n.AnnotationFieldFlag.DONOTSCROLL),i}return _(r,[{key:"_getCombAppearance",value:function(e,t,r,n,i,o,s,c,u,l,f){var h,d=i/this.data.maxLen,p=this.getBorderAndBackgroundAppearances(f),g=[],v=A(t.getCharPositions(r));try{for(v.s();!(h=v.n()).done;){var y=T(h.value,2),m=y[0],b=y[1];g.push("(".concat((0,a.escapeString)(r.substring(m,b)),") Tj"))}}catch(e){v.e(e)}finally{v.f()}var w=g.join(" ".concat((0,a.numberToString)(d)," 0 Td "));return"/Tx BMC q ".concat(p,"BT ")+e+" 1 0 0 1 ".concat((0,a.numberToString)(s)," ").concat((0,a.numberToString)(c+u)," Tm ").concat(w)+" ET Q EMC"}},{key:"_getMultilineAppearance",value:function(e,t,r,n,i,o,s,c,u,l,f,h){for(var d=[],p=i-2*c,g={shift:0},v=0,y=t.length;v4&&void 0!==arguments[4]?arguments[4]:{};e=a.line||e;var i=a.glyphs||t.charsToGlyphs(e);if(i.length<=1)return[e];for(var o=a.positions||t.getCharPositions(e),s=r/1e3,c=[],u=-1,l=-1,f=-1,h=0,d=0,p=0,g=i.length;pn?(c.push(e.substring(h,y)),h=y,d=w,u=-1,f=-1):(d+=w,u=y,l=m,f=p):d+w>n?-1!==u?(c.push(e.substring(h,l)),h=l,p=f+1,u=-1,d=0):(c.push(e.substring(h,y)),h=y,d=w):d+=w}return h0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}},{key:"_getAppearance",value:(t=P(C().mark((function e(t,r,a,s){var c,u,l,f,h,d,p,g,v,m,b,w,k,S,O,F,P,I,E,j,M,_,L,R,N,D,B,U,$,X,q,G,z,W,V,Y,K;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.data.combo){e.next=2;break}return e.abrupt("return",y(x(o.prototype),"_getAppearance",this).call(this,t,r,a,s));case 2:if((l=s?s.get(this.data.id):void 0)&&(u=l.rotation,c=l.value),void 0!==u||void 0!==c||this._needAppearances){e.next=6;break}return e.abrupt("return",null);case 6:for(void 0===c?c=this.data.fieldValue:Array.isArray(c)||(c=[c]),f=1,h=2,d=this.data.rect[3]-this.data.rect[1],p=this.data.rect[2]-this.data.rect[0],90!==u&&270!==u||(p=(g=[d,p])[0],d=g[1]),v=this.data.options.length,m=[],b=0;bP&&(P=_,I=M)}catch(e){E.e(e)}finally{E.f()}L=this._computeFontSize(F,p-2*h,I,k,-1),R=T(L,2),S=R[0],O=R[1]}if(N=O*n.LINE_FACTOR,D=(N-O)/2,B=Math.floor(d/N),1===m.length?($=m[0],U=$-$%B):U=m.length?m[0]:0,X=Math.min(U+B+1,v),q=["/Tx BMC q","1 1 ".concat(p," ").concat(d," re W n")],m.length){q.push("0.600006 0.756866 0.854904 rg"),G=A(m);try{for(G.s();!(z=G.n()).done;)W=z.value,U<=W&&W1)){e.next=25;break}return e.abrupt("return",null);case 25:D=B.join(""),L.push(D),U=0,$=w.charsToGlyphs(D),X=A($);try{for(X.s();!(q=X.n()).done;)G=q.value,U+=G.width*M}catch(e){X.e(e)}finally{X.f()}_=Math.max(_,U);case 32:e.next=20;break;case 34:e.next=39;break;case 36:e.prev=36,e.t0=e.catch(18),R.e(e.t0);case 39:return e.prev=39,R.f(),e.finish(39);case 42:for(z=1,_>P&&(z=P/_),W=1,V=n.LINE_FACTOR*h,Y=n.LINE_DESCENT_FACTOR*h,(K=V*j.length)>I&&(W=I/K),J=Math.min(z,W),Z=h*J,Q=["q","0 0 ".concat((0,a.numberToString)(P)," ").concat((0,a.numberToString)(I)," re W n"),"BT","1 0 0 1 0 ".concat((0,a.numberToString)(I+Y)," Tm 0 Tc ").concat((0,i.getPdfColor)(f,!0)),"/Helv ".concat((0,a.numberToString)(Z)," Tf")],ee=(0,a.numberToString)(V),te=0,re=L;te{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.FakeUnicodeFont=void 0,t.createDefaultAppearance=function(e){var t=e.fontSize,r=e.fontName,n=e.fontColor;return"/".concat((0,i.escapePDFName)(r)," ").concat(t," Tf ").concat(w(n,!0))},t.getPdfColor=w,t.parseDefaultAppearance=function(e){return new b(e).parse()};var a=r(134),i=r(135),o=r(2),s=r(143),c=r(144),u=r(139);function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=h(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||h(e,t)||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 h(e,t){if(e){if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,t):void 0}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&(t.fontSize=u);break;case o.OPS.setFillRGBColor:s.ColorSpace.singletons.rgb.getRgbItem(n,0,t.fontColor,0);break;case o.OPS.setFillGray:s.ColorSpace.singletons.gray.getRgbItem(n,0,t.fontColor,0);break;case o.OPS.setFillColorSpace:s.ColorSpace.singletons.cmyk.getRgbItem(n,0,t.fontColor,0)}}}catch(e){(0,o.warn)('parseDefaultAppearance - ignoring errors: "'.concat(e,'".'))}return t}}]),c}(c.EvaluatorPreprocessor);function w(e,t){if(e[0]===e[1]&&e[1]===e[2]){var r=e[0]/255;return"".concat((0,i.numberToString)(r)," ").concat(t?"g":"G")}return Array.from(e,(function(e){return(0,i.numberToString)(e/255)})).join(" ")+" ".concat(t?"rg":"RG")}var k=function(){function e(t,r){p(this,e),this.xref=t,this.widths=null,this.firstChar=1/0,this.lastChar=-1/0,this.fontFamily=r;var n=new OffscreenCanvas(1,1);this.ctxMeasure=n.getContext("2d"),e._fontNameId||(e._fontNameId=1),this.fontName=a.Name.get("InvalidPDFjsFont_".concat(r,"_").concat(e._fontNameId++))}return v(e,[{key:"toUnicodeRef",get:function(){if(!e._toUnicodeRef){var t=e.toUnicodeStream=new u.StringStream("/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo\\n<< /Registry (Adobe)\\n/Ordering (UCS) /Supplement 0 >> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000> \\nendcodespacerange\\n1 beginbfrange\\n<0000> <0000>\\nendbfrange\\nendcmap CMapName currentdict /CMap defineresource pop end end"),r=new a.Dict(this.xref);t.dict=r,r.set("Length",346),e._toUnicodeRef=this.xref.getNewPersistentRef(t)}return e._toUnicodeRef}},{key:"fontDescriptorRef",get:function(){if(!e._fontDescriptorRef){var t=new a.Dict(this.xref);t.set("Type",a.Name.get("FontDescriptor")),t.set("FontName",this.fontName),t.set("FontFamily","MyriadPro Regular"),t.set("FontBBox",[0,0,0,0]),t.set("FontStretch",a.Name.get("Normal")),t.set("FontWeight",400),t.set("ItalicAngle",0),e._fontDescriptorRef=this.xref.getNewPersistentRef(t)}return e._fontDescriptorRef}},{key:"descendantFontRef",get:function(){var e=new a.Dict(this.xref);e.set("BaseFont",this.fontName),e.set("Type",a.Name.get("Font")),e.set("Subtype",a.Name.get("CIDFontType0")),e.set("CIDToGIDMap",a.Name.get("Identity")),e.set("FirstChar",this.firstChar),e.set("LastChar",this.lastChar),e.set("FontDescriptor",this.fontDescriptorRef),e.set("DW",1e3);var t,r,n=[],i=null,o=null,s=l((r=this.widths.entries(),function(e){if(Array.isArray(e))return d(e)}(r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||h(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).sort());try{for(s.s();!(t=s.n()).done;){var c=f(t.value,2),u=c[0],p=c[1];i?u===i+o.length?o.push(p):(n.push(i,o),i=u,o=[p]):(i=u,o=[p])}}catch(e){s.e(e)}finally{s.f()}i&&n.push(i,o),e.set("W",n);var g=new a.Dict(this.xref);return g.set("Ordering","Identity"),g.set("Registry","Adobe"),g.set("Supplement",0),e.set("CIDSystemInfo",g),this.xref.getNewPersistentRef(e)}},{key:"baseFontRef",get:function(){var e=new a.Dict(this.xref);return e.set("BaseFont",this.fontName),e.set("Type",a.Name.get("Font")),e.set("Subtype",a.Name.get("Type0")),e.set("Encoding",a.Name.get("Identity-H")),e.set("DescendantFonts",[this.descendantFontRef]),e.set("ToUnicode",this.toUnicodeRef),this.xref.getNewPersistentRef(e)}},{key:"resources",get:function(){var e=new a.Dict(this.xref),t=new a.Dict(this.xref);return t.set(this.fontName.name,this.baseFontRef),e.set("Font",t),e}},{key:"_createContext",value:function(){return this.widths=new Map,this.ctxMeasure.font="1000px ".concat(this.fontFamily),this.ctxMeasure}},{key:"createFontResources",value:function(e){var t,r=this._createContext(),n=l(e.split(/\\r\\n?|\\n/));try{for(n.s();!(t=n.n()).done;){var a,i=l(t.value.split(""));try{for(i.s();!(a=i.n()).done;){var o=a.value,s=o.charCodeAt(0);if(!this.widths.has(s)){var c=r.measureText(o),u=Math.ceil(c.width);this.widths.set(s,u),this.firstChar=Math.min(s,this.firstChar),this.lastChar=Math.max(s,this.lastChar)}}}catch(e){i.e(e)}finally{i.f()}}}catch(e){n.e(e)}finally{n.f()}return this.resources}},{key:"createAppearance",value:function(e,t,r,n,s){var c,h=this._createContext(),d=[],p=-1/0,g=l(e.split(/\\r\\n?|\\n/));try{for(g.s();!(c=g.n()).done;){var v=c.value;d.push(v);var y=h.measureText(v).width;p=Math.max(p,y);var m,b=l(v.split(""));try{for(b.s();!(m=b.n()).done;){var k=m.value,S=k.charCodeAt(0),x=this.widths.get(S);if(void 0===x){var O=h.measureText(k);x=Math.ceil(O.width),this.widths.set(S,x),this.firstChar=Math.min(S,this.firstChar),this.lastChar=Math.max(S,this.lastChar)}}}catch(e){b.e(e)}finally{b.f()}}}catch(e){g.e(e)}finally{g.f()}p*=n/1e3;var A=f(t,4),C=A[0],F=A[1],P=A[2]-C,T=A[3]-F;if(r%180!=0){var I=[T,P];P=I[0],T=I[1]}var E=1;p>P&&(E=P/p);var j=1,M=o.LINE_FACTOR*n,_=o.LINE_DESCENT_FACTOR*n,L=M*d.length;L>T&&(j=T/L);for(var R=n*Math.min(E,j),N=["q","0 0 ".concat((0,i.numberToString)(P)," ").concat((0,i.numberToString)(T)," re W n"),"BT","1 0 0 1 0 ".concat((0,i.numberToString)(T+_)," Tm 0 Tc ").concat(w(s,!0)),"/".concat(this.fontName.name," ").concat((0,i.numberToString)(R)," Tf")],D=(0,i.numberToString)(M),B=0,U=d;B Tj"))}N.push("ET","Q");var X=N.join("\\n"),H=new a.Dict(this.xref);if(H.set("Subtype",a.Name.get("Form")),H.set("Type",a.Name.get("XObject")),H.set("BBox",[0,0,P,T]),H.set("Length",X.length),H.set("Resources",this.resources),r){var q=(0,i.getRotationMatrix)(r,P,T);H.set("Matrix",q)}var G=new u.StringStream(X);return G.dict=H,G}}]),e}();t.FakeUnicodeFont=k},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSpace=void 0;var n=r(2),a=r(134),i=r(136),o=r(135);function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}function u(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=l(e);if(t){var a=l(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===f(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function l(e){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},l(e)}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var d={};function p(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==f(h)&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(h).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function d(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(e,t){for(var r=0;rf&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){for(var d=o<=8?new Uint8Array(f):new Uint16Array(f),p=0;p2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3?arguments[3]:void 0;if((e=t.fetchIfRef(e))instanceof a.Name)switch(e.name){case"G":case"DeviceGray":return this.singletons.gray;case"RGB":case"DeviceRGB":return this.singletons.rgb;case"CMYK":case"DeviceCMYK":return this.singletons.cmyk;case"Pattern":return new b(null);default:if(r instanceof a.Dict){var o=r.get("ColorSpace");if(o instanceof a.Dict){var s=o.get(e.name);if(s){if(s instanceof a.Name)return this._parse(s,t,r,i);e=s;break}}}throw new n.FormatError("Unrecognized ColorSpace: ".concat(e.name))}if(Array.isArray(e)){var c,u,l,f,h,d,p=t.fetchIfRef(e[0]).name;switch(p){case"G":case"DeviceGray":return this.singletons.gray;case"RGB":case"DeviceRGB":return this.singletons.rgb;case"CMYK":case"DeviceCMYK":return this.singletons.cmyk;case"CalGray":return f=(c=t.fetchIfRef(e[1])).getArray("WhitePoint"),h=c.getArray("BlackPoint"),d=c.get("Gamma"),new O(f,h,d);case"CalRGB":f=(c=t.fetchIfRef(e[1])).getArray("WhitePoint"),h=c.getArray("BlackPoint"),d=c.getArray("Gamma");var g=c.getArray("Matrix");return new A(f,h,d,g);case"ICCBased":var v=t.fetchIfRef(e[1]).dict;u=v.get("N");var y=v.get("Alternate");if(y){var k=this._parse(y,t,r,i);if(k.numComps===u)return k;(0,n.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===u)return this.singletons.gray;if(3===u)return this.singletons.rgb;if(4===u)return this.singletons.cmyk;break;case"Pattern":return(l=e[1]||null)&&(l=this._parse(l,t,r,i)),new b(l);case"I":case"Indexed":l=this._parse(e[1],t,r,i);var S=t.fetchIfRef(e[2])+1,x=t.fetchIfRef(e[3]);return new w(l,S,x);case"Separation":case"DeviceN":var F=t.fetchIfRef(e[1]);u=Array.isArray(F)?F.length:1,l=this._parse(e[2],t,r,i);var P=i.create(e[3]);return new m(u,l,P);case"Lab":f=(c=t.fetchIfRef(e[1])).getArray("WhitePoint"),h=c.getArray("BlackPoint");var T=c.getArray("Range");return new C(f,h,T);default:throw new n.FormatError("Unimplemented ColorSpace object: ".concat(p))}}throw new n.FormatError("Unrecognized ColorSpace object: ".concat(e))}},{key:"isDefaultDecode",value:function(e,t){if(!Array.isArray(e))return!0;if(2*t!==e.length)return(0,n.warn)("The decode map is not the correct length"),!0;for(var r=0,a=e.length;r=.99554525?1:d(0,1,1.055*Math.pow(e,1/2.4)-.055)}function d(e,t,r){return Math.max(e,Math.min(t,r))}function g(e){return e<0?-g(-e):e>8?Math.pow((e+16)/116,3):e*l}function m(n,s,u,l,p,v){var y=d(0,1,s[u]*v),m=d(0,1,s[u+1]*v),b=d(0,1,s[u+2]*v),w=1===y?1:Math.pow(y,n.GR),k=1===m?1:Math.pow(m,n.GG),S=1===b?1:Math.pow(b,n.GB),x=n.MXA*w+n.MXB*k+n.MXC*S,O=n.MYA*w+n.MYB*k+n.MYC*S,A=n.MZA*w+n.MZB*k+n.MZC*S,C=o;C[0]=x,C[1]=O,C[2]=A;var F=c;!function(r,n,a){if(1===r[0]&&1===r[2])return a[0]=n[0],a[1]=n[1],void(a[2]=n[2]);var o=a;f(e,n,o);var s=i;!function(e,t,r){r[0]=1*t[0]/e[0],r[1]=1*t[1]/e[1],r[2]=1*t[2]/e[2]}(r,o,s),f(t,s,a)}(n.whitePoint,C,F);var P=o;!function(e,t,r){if(0===e[0]&&0===e[1]&&0===e[2])return r[0]=t[0],r[1]=t[1],void(r[2]=t[2]);var n=g(0),a=(1-n)/(1-g(e[0])),i=1-a,o=(1-n)/(1-g(e[1])),s=1-o,c=(1-n)/(1-g(e[2])),u=1-c;r[0]=t[0]*a+i,r[1]=t[1]*o+s,r[2]=t[2]*c+u}(n.blackPoint,F,P);var T=c;!function(r,n,a){var o=a;f(e,n,o);var s=i;!function(e,t,r){r[0]=.95047*t[0]/e[0],r[1]=1*t[1]/e[1],r[2]=1.08883*t[2]/e[2]}(r,o,s),f(t,s,a)}(a,P,T);var I=o;f(r,T,I),l[p]=255*h(I[0]),l[p+1]=255*h(I[1]),l[p+2]=255*h(I[2])}return function(e){s(r,e);var t=u(r);function r(e,a,i,o){var s;if(p(this,r),s=t.call(this,"CalRGB",3),!e)throw new n.FormatError("WhitePoint missing - required for color space CalRGB");a=a||new Float32Array(3),i=i||new Float32Array([1,1,1]),o=o||new Float32Array([1,0,0,0,1,0,0,0,1]);var c=e[0],u=e[1],l=e[2];s.whitePoint=e;var f=a[0],h=a[1],d=a[2];if(s.blackPoint=a,s.GR=i[0],s.GG=i[1],s.GB=i[2],s.MXA=o[0],s.MYA=o[1],s.MZA=o[2],s.MXB=o[3],s.MYB=o[4],s.MZB=o[5],s.MXC=o[6],s.MYC=o[7],s.MZC=o[8],c<0||l<0||1!==u)throw new n.FormatError("Invalid WhitePoint components for ".concat(s.name)+", no fallback available");return(f<0||h<0||d<0)&&((0,n.info)("Invalid BlackPoint for ".concat(s.name," [").concat(f,", ").concat(h,", ").concat(d,"], ")+"falling back to default."),s.blackPoint=new Float32Array(3)),(s.GR<0||s.GG<0||s.GB<0)&&((0,n.info)("Invalid Gamma [".concat(s.GR,", ").concat(s.GG,", ").concat(s.GB,"] for ")+"".concat(s.name,", falling back to default.")),s.GR=s.GG=s.GB=1),s}return v(r,[{key:"getRgbItem",value:function(e,t,r,n){m(this,e,t,r,n,1)}},{key:"getRgbBuffer",value:function(e,t,r,n,a,i,o){for(var s=1/((1<=6/29?Math.pow(e,3):108/841*(e-4/29)}function t(e,t,r,n){return r+e*(n-r)/t}function r(r,n,a,i,o,s){var c=n[a],u=n[a+1],l=n[a+2];!1!==i&&(c=t(c,i,0,100),u=t(u,i,r.amin,r.amax),l=t(l,i,r.bmin,r.bmax)),u>r.amax?u=r.amax:ur.bmax?l=r.bmax:lo.amax||o.bmin>o.bmax)&&((0,n.info)("Invalid Range, falling back to defaults"),o.amin=-100,o.amax=100,o.bmin=-100,o.bmax=100),o}return v(a,[{key:"getRgbItem",value:function(e,t,n,a){r(this,e,t,!1,n,a)}},{key:"getRgbBuffer",value:function(e,t,n,a,i,o,s){for(var c=(1<{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.PartialEvaluator=t.EvaluatorPreprocessor=void 0;var a=r(2),i=r(145),o=r(134),s=r(163),c=r(167),u=r(166),l=r(170),f=r(179),h=r(180),d=r(171),p=r(186),g=r(146),v=r(188),y=r(139),m=r(136),b=r(189),w=r(143),k=r(148),S=r(168),x=r(135),O=r(174),A=r(169),C=r(190),F=r(191),P=r(192);function T(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||D(e,t)||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 I(e){return function(e){if(Array.isArray(e))return B(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||D(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(){E=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),s=new C(n||[]);return a(o,"_invoke",{value:S(e,r,s)}),o}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var h={};function d(){}function p(){}function g(){}var v={};u(v,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(F([])));m&&m!==t&&r.call(m,o)&&(v=m);var b=g.prototype=d.prototype=Object.create(v);function w(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function k(e,t){function i(a,o,s,c){var u=f(e[a],e,o);if("throw"!==u.type){var l=u.arg,h=l.value;return h&&"object"==n(h)&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){i("next",e,s,c)}),(function(e){i("throw",e,s,c)})):t.resolve(h).then((function(e){l.value=e,s(l)}),(function(e){return i("throw",e,s,c)}))}c(u.arg)}var o;a(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){i(e,r,t,n)}))}return o=o?o.then(n,n):n()}})}function S(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=x(o,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=f(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===h)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function x(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,x(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var a=f(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,h;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function A(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function F(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),A(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;A(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:F(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},e}function j(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function M(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){j(i,n,a,o,s,"next",e)}function s(e){j(i,n,a,o,s,"throw",e)}o(void 0)}))}}function _(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function L(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function D(e,t){if(e){if("string"==typeof e)return B(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?B(e,t):void 0}}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]&&arguments[1];if(Array.isArray(e)){var r,n=N(e);try{for(n.s();!(r=n.n()).done;){var i=X(r.value,!0);if(i)return i}}catch(e){n.e(e)}finally{n.f()}return(0,a.warn)("Unsupported blend mode Array: ".concat(e)),"source-over"}if(!(e instanceof o.Name))return t?null:"source-over";switch(e.name){case"Normal":case"Compatible":return"source-over";case"Multiply":return"multiply";case"Screen":return"screen";case"Overlay":return"overlay";case"Darken":return"darken";case"Lighten":return"lighten";case"ColorDodge":return"color-dodge";case"ColorBurn":return"color-burn";case"HardLight":return"hard-light";case"SoftLight":return"soft-light";case"Difference":return"difference";case"Exclusion":return"exclusion";case"Hue":return"hue";case"Saturation":return"saturation";case"Color":return"color";case"Luminosity":return"luminosity"}return t?null:((0,a.warn)("Unsupported blend mode: ".concat(e.name)),"source-over")}function H(e){e.fn===a.OPS.paintImageMaskXObject&&e.args[0]&&e.args[0].count>0&&e.args[0].count++}var q=function(){function e(){_(this,e),this.reset()}return R(e,[{key:"check",value:function(){return!(++this.checked0&&void 0!==arguments[0]?arguments[0]:null,t=Object.create(this);return t.options=Object.assign(Object.create(null),this.options,e),t}},{key:"hasBlendModes",value:function(e,t){if(!(e instanceof o.Dict))return!1;if(e.objId&&t.has(e.objId))return!1;var r=new o.RefSet(t);e.objId&&r.put(e.objId);for(var n=[e],i=this.xref;n.length;){var s=n.shift(),c=s.get("ExtGState");if(c instanceof o.Dict){var u,l=N(c.getRawValues());try{for(l.s();!(u=l.n()).done;){var f=u.value;if(f instanceof o.Ref){if(r.has(f))continue;try{f=i.fetch(f)}catch(e){r.put(f),(0,a.info)('hasBlendModes - ignoring ExtGState: "'.concat(e,'".'));continue}}if(f instanceof o.Dict){f.objId&&r.put(f.objId);var h=f.get("BM");if(h instanceof o.Name){if("Normal"!==h.name)return!0}else if(void 0!==h&&Array.isArray(h)){var d,p=N(h);try{for(p.s();!(d=p.n()).done;){var g=d.value;if(g instanceof o.Name&&"Normal"!==g.name)return!0}}catch(e){p.e(e)}finally{p.f()}}}}}catch(e){l.e(e)}finally{l.f()}}var v=s.get("XObject");if(v instanceof o.Dict){var y,b=N(v.getRawValues());try{for(b.s();!(y=b.n()).done;){var w=y.value;if(w instanceof o.Ref){if(r.has(w))continue;try{w=i.fetch(w)}catch(e){r.put(w),(0,a.info)('hasBlendModes - ignoring XObject: "'.concat(e,'".'));continue}}if(w instanceof m.BaseStream){w.dict.objId&&r.put(w.dict.objId);var k=w.dict.get("Resources");k instanceof o.Dict&&(k.objId&&r.has(k.objId)||(n.push(k),k.objId&&r.put(k.objId)))}}}catch(e){b.e(e)}finally{b.f()}}}var S,x=N(r);try{for(x.s();!(S=x.n()).done;){var O=S.value;t.put(O)}}catch(e){x.e(e)}finally{x.f()}return!1}},{key:"fetchBuiltInCMap",value:(D=M(E().mark((function e(t){var r,n,i,o;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r=this.builtInCMapCache.get(t))){e.next=3;break}return e.abrupt("return",r);case 3:if(null===this.options.cMapUrl){e.next=19;break}return i="".concat(this.options.cMapUrl).concat(t,".bcmap"),e.next=7,fetch(i);case 7:if((o=e.sent).ok){e.next=10;break}throw new Error('fetchBuiltInCMap: failed to fetch file "'.concat(i,'" with "').concat(o.statusText,'".'));case 10:return e.t0=Uint8Array,e.next=13,o.arrayBuffer();case 13:e.t1=e.sent,e.t2=new e.t0(e.t1),e.t3=a.CMapCompressionType.BINARY,n={cMapData:e.t2,compressionType:e.t3},e.next=22;break;case 19:return e.next=21,this.handler.sendWithPromise("FetchBuiltInCMap",{name:t});case 21:n=e.sent;case 22:return n.compressionType!==a.CMapCompressionType.NONE&&this.builtInCMapCache.set(t,n),e.abrupt("return",n);case 24:case"end":return e.stop()}}),e,this)}))),function(e){return D.apply(this,arguments)})},{key:"fetchStandardFontData",value:(L=M(E().mark((function e(t){var r,n,i,o,s,c;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r=this.standardFontDataCache.get(t))){e.next=3;break}return e.abrupt("return",new y.Stream(r));case 3:if(!this.options.useSystemFonts||"Symbol"===t||"ZapfDingbats"===t){e.next=5;break}return e.abrupt("return",null);case 5:if(n=(0,l.getFontNameToFileMap)(),i=n[t],null===this.options.standardFontDataUrl){e.next=20;break}return s="".concat(this.options.standardFontDataUrl).concat(i),e.next=10,fetch(s);case 10:if((c=e.sent).ok){e.next=15;break}(0,a.warn)('fetchStandardFontData: failed to fetch file "'.concat(s,'" with "').concat(c.statusText,'".')),e.next=18;break;case 15:return e.next=17,c.arrayBuffer();case 17:o=e.sent;case 18:e.next=29;break;case 20:return e.prev=20,e.next=23,this.handler.sendWithPromise("FetchStandardFontData",{filename:i});case 23:o=e.sent,e.next=29;break;case 26:e.prev=26,e.t0=e.catch(20),(0,a.warn)('fetchStandardFontData: failed to fetch file "'.concat(i,'" with "').concat(e.t0,'".'));case 29:if(o){e.next=31;break}return e.abrupt("return",null);case 31:return this.standardFontDataCache.set(t,o),e.abrupt("return",new y.Stream(o));case 33:case"end":return e.stop()}}),e,this,[[20,26]])}))),function(e){return L.apply(this,arguments)})},{key:"buildFormXObject",value:(j=M(E().mark((function e(t,r,n,i,s,c,u){var l,f,h,d,p,g,v,y,m,b,k;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(l=r.dict,f=l.getArray("Matrix"),h=l.getArray("BBox"),h=Array.isArray(h)&&4===h.length?a.Util.normalizeRect(h):null,!l.has("OC")){e.next=8;break}return e.next=7,this.parseMarkedContentProps(l.get("OC"),t);case 7:d=e.sent;case 8:if(void 0!==d&&i.addOp(a.OPS.beginMarkedContentProps,["OC",d]),!(g=l.get("Group"))){e.next=29;break}if(p={matrix:f,bbox:h,smask:n,isolated:!1,knockout:!1},v=g.get("S"),y=null,!(0,o.isName)(v,"Transparency")){e.next=27;break}if(p.isolated=g.get("I")||!1,p.knockout=g.get("K")||!1,!g.has("CS")){e.next=27;break}if(m=g.getRaw("CS"),!(b=w.ColorSpace.getCached(m,this.xref,u))){e.next=24;break}y=b,e.next=27;break;case 24:return e.next=26,this.parseColorSpace({cs:m,resources:t,localColorSpaceCache:u});case 26:y=e.sent;case 27:n&&n.backdrop&&(y=y||w.ColorSpace.singletons.rgb,n.backdrop=y.getRgb(n.backdrop,0)),i.addOp(a.OPS.beginGroup,[p]);case 29:return k=g?[f,null]:[f,h],i.addOp(a.OPS.paintFormXObjectBegin,k),e.abrupt("return",this.getOperatorList({stream:r,task:s,resources:l.get("Resources")||t,operatorList:i,initialState:c}).then((function(){i.addOp(a.OPS.paintFormXObjectEnd,[]),g&&i.addOp(a.OPS.endGroup,[p]),void 0!==d&&i.addOp(a.OPS.endMarkedContent,[])})));case 32:case"end":return e.stop()}}),e,this)}))),function(e,t,r,n,a,i,o){return j.apply(this,arguments)})},{key:"_sendImgData",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t?[t.bitmap||t.data.buffer]:null;return this.parsingType3Font||r?this.handler.send("commonobj",[e,"Image",t],n):this.handler.send("obj",[e,this.pageIndex,"Image",t],n)}},{key:"buildPaintImageXObject",value:(x=M(E().mark((function e(t){var r,n,i,o,s,c,u,l,f,h,d,p,g,v,y,m,b,w,S,x,O,A,C,F,T,I,j,M=this;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t.resources,n=t.image,i=t.isInline,o=void 0!==i&&i,s=t.operatorList,c=t.cacheKey,u=t.localImageCache,l=t.localColorSpaceCache,f=n.dict,h=f.objId,d=f.get("W","Width"),p=f.get("H","Height"),d&&"number"==typeof d&&p&&"number"==typeof p){e.next=8;break}return(0,a.warn)("Image dimensions are missing, or not numbers."),e.abrupt("return");case 8:if(!(-1!==(g=this.options.maxImageSize)&&d*p>g)){e.next=15;break}if(v="Image exceeded maximum allowed size and was removed.",!this.options.ignoreErrors){e.next=14;break}return(0,a.warn)(v),e.abrupt("return");case 14:throw new Error(v);case 15:if(!f.has("OC")){e.next=19;break}return e.next=18,this.parseMarkedContentProps(f.get("OC"),r);case 18:y=e.sent;case 19:if(!f.get("IM","ImageMask")){e.next=44;break}if(w=f.get("I","Interpolate"),S=d+7>>3,x=n.getBytes(S*p),O=f.getArray("D","Decode"),!this.parsingType3Font){e.next=32;break}return(m=P.PDFImage.createRawMask({imgArray:x,width:d,height:p,imageIsFromDecodeStream:n instanceof k.DecodeStream,inverseDecode:!!O&&O[0]>0,interpolate:w})).cached=!!c,b=[m],s.addImageOps(a.OPS.paintImageMaskXObject,b,y),c&&u.set(c,h,{fn:a.OPS.paintImageMaskXObject,args:b,optionalContent:y}),e.abrupt("return");case 32:if(!(m=P.PDFImage.createMask({imgArray:x,width:d,height:p,imageIsFromDecodeStream:n instanceof k.DecodeStream,inverseDecode:!!O&&O[0]>0,interpolate:w,isOffscreenCanvasSupported:this.options.isOffscreenCanvasSupported})).isSingleOpaquePixel){e.next=37;break}return s.addImageOps(a.OPS.paintSolidColorImageMask,[],y),c&&u.set(c,h,{fn:a.OPS.paintSolidColorImageMask,args:[],optionalContent:y}),e.abrupt("return");case 37:return A="mask_".concat(this.idFactory.createObjId()),s.addDependency(A),this._sendImgData(A,m),b=[{data:A,width:m.width,height:m.height,interpolate:m.interpolate,count:1}],s.addImageOps(a.OPS.paintImageMaskXObject,b,y),c&&u.set(c,h,{fn:a.OPS.paintImageMaskXObject,args:b,optionalContent:y}),e.abrupt("return");case 44:if(C=f.get("SM","SMask")||!1,F=f.get("Mask")||!1,!o||C||F||!(d+p<200)){e.next=52;break}return T=new P.PDFImage({xref:this.xref,res:r,image:n,isInline:o,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:l}),m=T.createImageData(!0),s.addImageOps(a.OPS.paintInlineImageXObject,[m],y),e.abrupt("return");case 52:I="img_".concat(this.idFactory.createObjId()),j=!1,this.parsingType3Font?I="".concat(this.idFactory.getDocId(),"_type3_").concat(I):h&&(j=this.globalImageCache.shouldCache(h,this.pageIndex))&&(I="".concat(this.idFactory.getDocId(),"_").concat(I)),s.addDependency(I),b=[I,d,p],P.PDFImage.buildImage({xref:this.xref,res:r,image:n,isInline:o,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:l}).then((function(e){return m=e.createImageData(!1),c&&h&&j&&M.globalImageCache.addByteSize(h,m.data.length),M._sendImgData(I,m,j)})).catch((function(e){return(0,a.warn)('Unable to decode image "'.concat(I,'": "').concat(e,'".')),M._sendImgData(I,null,j)})),s.addImageOps(a.OPS.paintImageXObject,b,y),c&&(u.set(c,h,{fn:a.OPS.paintImageXObject,args:b,optionalContent:y}),h&&((0,a.assert)(!o,"Cannot cache an inline image globally."),this.globalImageCache.addPageIndex(h,this.pageIndex),j&&this.globalImageCache.setData(h,{objId:I,fn:a.OPS.paintImageXObject,args:b,optionalContent:y,byteSize:0})));case 59:case"end":return e.stop()}}),e,this)}))),function(e){return x.apply(this,arguments)})},{key:"handleSMask",value:function(e,t,r,n,a,i){var o=e.get("G"),s={subtype:e.get("S").name,backdrop:e.get("BC")},c=e.get("TR");if((0,p.isPDFFunction)(c)){for(var u=this._pdfFunctionFactory.create(c),l=new Uint8Array(256),f=new Float32Array(1),h=0;h<256;h++)f[0]=h/255,u(f,0,f,0),l[h]=255*f[0]|0;s.transferMap=l}return this.buildFormXObject(t,o,s,r,n,a.state.clone(),i)}},{key:"handleTransferFunction",value:function(e){var t;if(Array.isArray(e))t=e;else{if(!(0,p.isPDFFunction)(e))return null;t=[e]}var r,n=[],a=0,i=0,s=N(t);try{for(s.s();!(r=s.n()).done;){var c=r.value,u=this.xref.fetchIfRef(c);if(a++,(0,o.isName)(u,"Identity"))n.push(null);else{if(!(0,p.isPDFFunction)(u))return null;for(var l=this._pdfFunctionFactory.create(u),f=new Uint8Array(256),h=new Float32Array(1),d=0;d<256;d++)h[0]=d/255,l(h,0,h,0),f[d]=255*h[0]|0;n.push(f),i++}}}catch(e){s.e(e)}finally{s.f()}return 1!==a&&4!==a||0===i?null:n}},{key:"handleTilingType",value:function(e,t,r,n,i,s,c,u){var l=this,h=new F.OperatorList,d=o.Dict.merge({xref:this.xref,dictArray:[i.get("Resources"),r]});return this.getOperatorList({stream:n,task:c,resources:d,operatorList:h}).then((function(){var r=h.getIR(),n=(0,f.getTilingPatternIR)(r,i,t);s.addDependencies(h.dependencies),s.addOp(e,n),i.objId&&u.set(null,i.objId,{operatorListIR:r,dict:i})})).catch((function(e){if(!(e instanceof a.AbortException)){if(l.options.ignoreErrors)return l.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorTilingPattern}),void(0,a.warn)('handleTilingType - ignoring pattern: "'.concat(e,'".'));throw e}}))}},{key:"handleSetFont",value:function(e,t,r,n,i,c){var u=this,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,f=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=t&&t[0]instanceof o.Name?t[0].name:null;return this.loadFont(h,r,e,l,f).then((function(t){return t.font.isType3Font?t.loadType3Data(u,e,i).then((function(){return n.addDependencies(t.type3Dependencies),t})).catch((function(e){return u.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontLoadType3}),new z({loadedName:"g_font_error",font:new s.ErrorFont("Type3 font load error: ".concat(e)),dict:t.font,evaluatorOptions:u.options})})):t})).then((function(e){return c.font=e.font,e.send(u.handler),e.loadedName}))}},{key:"handleText",value:function(t,r){var n=r.font,i=n.charsToGlyphs(t);return n.data&&(r.textRenderingMode&a.TextRenderingMode.ADD_TO_PATH_FLAG||"Pattern"===r.fillColorSpace.name||n.disableFontFace||this.options.disableFontFace)&&e.buildFontPaths(n,i,this.handler,this.options),i}},{key:"ensureStateFont",value:function(e){if(!e.font){var t=new a.FormatError("Missing setFont (Tf) operator before text rendering operator.");if(this.options.ignoreErrors)return this.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontState}),void(0,a.warn)('ensureStateFont: "'.concat(t,'".'));throw t}}},{key:"setGState",value:(g=M(E().mark((function e(t){var r,n,i,s,c,u,l,f,h,d,p,g,v,y,m,b=this;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=t.resources,n=t.gState,i=t.operatorList,s=t.cacheKey,c=t.task,u=t.stateManager,l=t.localGStateCache,f=t.localColorSpaceCache,h=n.objId,d=!0,p=[],g=Promise.resolve(),v=N(n.getKeys());try{for(m=function(){var e=y.value,t=n.get(e);switch(e){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":p.push([e,t]);break;case"Font":d=!1,g=g.then((function(){return b.handleSetFont(r,null,t[0],i,c,u.state).then((function(r){i.addDependency(r),p.push([e,[r,t[1]]])}))}));break;case"BM":p.push([e,X(t)]);break;case"SMask":if((0,o.isName)(t,"None")){p.push([e,!1]);break}t instanceof o.Dict?(d=!1,g=g.then((function(){return b.handleSMask(t,r,i,c,u,f)})),p.push([e,!0])):(0,a.warn)("Unsupported SMask type");break;case"TR":var s=b.handleTransferFunction(t);p.push([e,s]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":(0,a.info)("graphic state operator "+e);break;default:(0,a.info)("Unknown graphic state operator "+e)}},v.s();!(y=v.n()).done;)m()}catch(e){v.e(e)}finally{v.f()}return e.abrupt("return",g.then((function(){p.length>0&&i.addOp(a.OPS.setGState,[p]),d&&l.set(s,h,p)})));case 8:case"end":return e.stop()}}),e)}))),function(e){return g.apply(this,arguments)})},{key:"loadFont",value:function(t,r,n){var i,u=this,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,h=function(){var e=M(E().mark((function e(){return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new z({loadedName:"g_font_error",font:new s.ErrorFont('Font "'.concat(t,'" is not available.')),dict:r,evaluatorOptions:u.options}));case 1:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),d=this.xref;if(r)r instanceof o.Ref&&(i=r);else{var p=n.get("Font");p&&(i=p.getRaw(t))}if(!i){var g='Font "'.concat(t||r&&r.toString(),'" is not available');if(!this.options.ignoreErrors&&!this.parsingType3Font)return(0,a.warn)("".concat(g,".")),h();this.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontMissing}),(0,a.warn)("".concat(g," -- attempting to fallback to a default font.")),i=l||e.fallbackFontDict}if(this.parsingType3Font&&this.type3FontRefs.has(i))return h();if(this.fontCache.has(i))return this.fontCache.get(i);if(!((r=d.fetchIfRef(i))instanceof o.Dict))return h();if(r.cacheKey&&this.fontCache.has(r.cacheKey))return this.fontCache.get(r.cacheKey);var v,y=(0,a.createPromiseCapability)();try{(v=this.preEvaluateFont(r)).cssFontInfo=f}catch(e){return(0,a.warn)('loadFont - preEvaluateFont failed: "'.concat(e,'".')),h()}var m,b=v,w=b.descriptor,k=b.hash,S=i instanceof o.Ref;if(S&&(m="f".concat(i.toString())),k&&w instanceof o.Dict){w.fontAliases||(w.fontAliases=Object.create(null));var x=w.fontAliases;if(x[k]){var O=x[k].aliasRef;if(S&&O&&this.fontCache.has(O))return this.fontCache.putAlias(i,O),this.fontCache.get(i)}else x[k]={fontID:this.idFactory.createFontId()};S&&(x[k].aliasRef=i),m=x[k].fontID}return S?this.fontCache.put(i,y.promise):(m||(m=this.idFactory.createFontId()),r.cacheKey="cacheKey_".concat(m),this.fontCache.put(r.cacheKey,y.promise)),(0,a.assert)(m&&m.startsWith("f"),'The "fontID" must be (correctly) defined.'),r.loadedName="".concat(this.idFactory.getDocId(),"_").concat(m),this.translateFont(v).then((function(e){void 0!==e.fontType&&d.stats.addFontType(e.fontType),y.resolve(new z({loadedName:r.loadedName,font:e,dict:r,evaluatorOptions:u.options}))})).catch((function(e){u.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontTranslate}),(0,a.warn)('loadFont - translateFont failed: "'.concat(e,'".'));try{var t=w&&w.get("FontFile3"),n=t&&t.get("Subtype"),i=(0,c.getFontType)(v.type,n&&n.name);void 0!==i&&d.stats.addFontType(i)}catch(e){}y.resolve(new z({loadedName:r.loadedName,font:new s.ErrorFont(e instanceof Error?e.message:e),dict:r,evaluatorOptions:u.options}))})),y.promise}},{key:"buildPath",value:function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=e.length-1;if(r||(r=[]),i<0||e.fnArray[i]!==a.OPS.constructPath){var o;switch(n&&((0,a.warn)('Encountered path operator "'.concat(t,'" inside of a text object.')),e.addOp(a.OPS.save,null)),t){case a.OPS.rectangle:var s=r[0]+r[2],c=r[1]+r[3];o=[Math.min(r[0],s),Math.max(r[0],s),Math.min(r[1],c),Math.max(r[1],c)];break;case a.OPS.moveTo:case a.OPS.lineTo:o=[r[0],r[0],r[1],r[1]];break;default:o=[1/0,-1/0,1/0,-1/0]}e.addOp(a.OPS.constructPath,[[t],r,o]),n&&e.addOp(a.OPS.restore,null)}else{var u,l=e.argsArray[i];l[0].push(t),(u=l[1]).push.apply(u,I(r));var f=l[2];switch(t){case a.OPS.rectangle:var h=r[0]+r[2],d=r[1]+r[3];f[0]=Math.min(f[0],r[0],h),f[1]=Math.max(f[1],r[0],h),f[2]=Math.min(f[2],r[1],d),f[3]=Math.max(f[3],r[1],d);break;case a.OPS.moveTo:case a.OPS.lineTo:f[0]=Math.min(f[0],r[0]),f[1]=Math.max(f[1],r[0]),f[2]=Math.min(f[2],r[1]),f[3]=Math.max(f[3],r[1])}}}},{key:"parseColorSpace",value:function(e){var t=this,r=e.cs,n=e.resources,i=e.localColorSpaceCache;return w.ColorSpace.parseAsync({cs:r,xref:this.xref,resources:n,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:i}).catch((function(e){if(e instanceof a.AbortException)return null;if(t.options.ignoreErrors)return t.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorColorSpace}),(0,a.warn)('parseColorSpace - ignoring ColorSpace: "'.concat(e,'".')),null;throw e}))}},{key:"parseShading",value:function(e){var t=e.shading,r=e.resources,n=e.localColorSpaceCache,a=e.localShadingPatternCache,i=a.get(t);if(!i){var o=f.Pattern.parseShading(t,this.xref,r,this.handler,this._pdfFunctionFactory,n).getIR();i="pattern_".concat(this.idFactory.createObjId()),a.set(t,i),this.handler.send("obj",[i,this.pageIndex,"Pattern",o])}return i}},{key:"handleColorN",value:function(e,t,r,n,i,s,c,u,l,h){var d=r.pop();if(d instanceof o.Name){var p=i.getRaw(d.name),g=p instanceof o.Ref&&l.getByRef(p);if(g)try{var v=n.base?n.base.getRgb(r,0):null,y=(0,f.getTilingPatternIR)(g.operatorListIR,g.dict,v);return void e.addOp(t,y)}catch(e){}var b=this.xref.fetchIfRef(p);if(b){var w=b instanceof m.BaseStream?b.dict:b,k=w.get("PatternType");if(1===k){var S=n.base?n.base.getRgb(r,0):null;return this.handleTilingType(t,S,s,b,w,e,c,l)}if(2===k){var x=w.get("Shading"),O=w.getArray("Matrix"),A=this.parseShading({shading:x,resources:s,localColorSpaceCache:u,localShadingPatternCache:h});return void e.addOp(t,["Shading",A,O])}throw new a.FormatError("Unknown PatternType: ".concat(k))}}throw new a.FormatError("Unknown PatternName: ".concat(d))}},{key:"_parseVisibilityExpression",value:function(e,t,r){if(++t>10)(0,a.warn)("Visibility expression is too deeply nested");else{var n=e.length,i=this.xref.fetchIfRef(e[0]);if(!(n<2)&&i instanceof o.Name){switch(i.name){case"And":case"Or":case"Not":r.push(i.name);break;default:return void(0,a.warn)("Invalid operator ".concat(i.name," in visibility expression"))}for(var s=1;s0)){e.next=22;break}return e.abrupt("return",{type:"OCMD",expression:u});case 22:if(l=n.get("OCGs"),!(Array.isArray(l)||l instanceof o.Dict)){e.next=29;break}if(f=[],Array.isArray(l)){h=N(l);try{for(h.s();!(d=h.n()).done;)p=d.value,f.push(p.toString())}catch(e){h.e(e)}finally{h.f()}}else f.push(l.objId);return e.abrupt("return",{type:s,ids:f,policy:n.get("P")instanceof o.Name?n.get("P").name:null,expression:null});case 29:if(!(l instanceof o.Ref)){e.next=31;break}return e.abrupt("return",{type:s,id:l.toString()});case 31:return e.abrupt("return",null);case 32:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"getOperatorList",value:function(e){var t=this,r=e.stream,n=e.task,i=e.resources,s=e.operatorList,c=e.initialState,u=void 0===c?null:c,l=e.fallbackFontDict,f=void 0===l?null:l;if(i=i||o.Dict.empty,u=u||new Y,!s)throw new Error('getOperatorList: missing "operatorList" parameter');var h=this,d=this.xref,p=!1,g=new v.LocalImageCache,y=new v.LocalColorSpaceCache,b=new v.LocalGStateCache,k=new v.LocalTilingPatternCache,S=new Map,x=i.get("XObject")||o.Dict.empty,O=i.get("Pattern")||o.Dict.empty,A=new W(u),C=new K(r,d,A),F=new q;function P(e){for(var t=0,r=C.savedStatesDepth;t0&&s.addOp(a.OPS.setGState,[Q]),_=null;continue}}return void c(new Promise((function(e,t){if(!j)throw new a.FormatError("GState must be referred to by name.");var r=i.get("ExtGState");if(!(r instanceof o.Dict))throw new a.FormatError("ExtGState should be a dictionary.");var c=r.get(E);if(!(c instanceof o.Dict))throw new a.FormatError("GState should be a dictionary.");h.setGState({resources:i,gState:c,operatorList:s,cacheKey:E,task:n,stateManager:A,localGStateCache:b,localColorSpaceCache:y}).then(e,t)})).catch((function(e){if(!(e instanceof a.AbortException)){if(h.options.ignoreErrors)return h.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorExtGState}),void(0,a.warn)('getOperatorList - ignoring ExtGState: "'.concat(e,'".'));throw e}})));case a.OPS.moveTo:case a.OPS.lineTo:case a.OPS.curveTo:case a.OPS.curveTo2:case a.OPS.curveTo3:case a.OPS.closePath:case a.OPS.rectangle:h.buildPath(s,L,_,p);continue;case a.OPS.markPoint:case a.OPS.markPointProps:case a.OPS.beginCompat:case a.OPS.endCompat:continue;case a.OPS.beginMarkedContentProps:if(!(_[0]instanceof o.Name)){(0,a.warn)("Expected name for beginMarkedContentProps arg0=".concat(_[0]));continue}if("OC"===_[0].name)return void c(h.parseMarkedContentProps(_[1],i).then((function(e){s.addOp(a.OPS.beginMarkedContentProps,["OC",e])})).catch((function(e){if(!(e instanceof a.AbortException)){if(h.options.ignoreErrors)return h.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorMarkedContent}),void(0,a.warn)('getOperatorList - ignoring beginMarkedContentProps: "'.concat(e,'".'));throw e}})));_=[_[0].name,_[1]instanceof o.Dict?_[1].get("MCID"):null];break;case a.OPS.beginMarkedContent:case a.OPS.endMarkedContent:default:if(null!==_){for(l=0,v=_.length;l0&&(t[3]*=r*P.fontMatrix[3])}return a.Util.transform(P.ctm,a.Util.transform(P.textMatrix,t))}function G(){if(x.initialized)return x;var e=P,t=e.font,r=e.loadedName;g.has(r)||(g.add(r),S.styles[r]={fontFamily:t.fallbackName,ascent:t.ascent,descent:t.descent,vertical:t.vertical}),x.fontName=r;var n=x.transform=H();t.vertical?(x.width=x.totalWidth=Math.hypot(n[0],n[1]),x.height=x.totalHeight=0,x.vertical=!0):(x.width=x.totalWidth=0,x.height=x.totalHeight=Math.hypot(n[2],n[3]),x.vertical=!1);var a=Math.hypot(P.textLineMatrix[0],P.textLineMatrix[1]),i=Math.hypot(P.ctm[0],P.ctm[1]);return x.textAdvanceScale=i*a,x.trackingSpaceMin=P.fontSize*I,x.notASpace=P.fontSize*E,x.negativeSpaceMax=P.fontSize*j,x.spaceInFlowMin=P.fontSize*M,x.spaceInFlowMax=P.fontSize*_,x.hasEOL=!1,x.initialized=!0,x}function z(){if(x.initialized){var e=Math.hypot(P.textLineMatrix[0],P.textLineMatrix[1]),t=Math.hypot(P.ctm[0],P.ctm[1])*e;t!==x.textAdvanceScale&&(x.vertical?(x.totalHeight+=x.height*x.textAdvanceScale,x.height=0):(x.totalWidth+=x.width*x.textAdvanceScale,x.width=0),x.textAdvanceScale=t)}}function Y(e,t){return L.loadFont(e,t,i).then((function(e){return e.font.isType3Font?e.loadType3Data(L,i,n).catch((function(){})).then((function(){return e})):e})).then((function(e){P.loadedName=e.loadedName,P.font=e.font,P.fontMatrix=e.font.fontMatrix||a.FONT_IDENTITY_MATRIX}))}function J(e,t,r){var n=Math.hypot(r[0],r[1]);return[(r[0]*e+r[1]*t)/n,(r[2]*e+r[3]*t)/n]}function Z(){var e=H(),t=e[4],r=e[5],n=t-y[0],a=r-y[1];if(n<0||n>y[2]||a<0||a>y[3])return!1;if(!l||!P.font||!x.prevTransform)return!0;var i=x.prevTransform[4],o=x.prevTransform[5];if(i===t&&o===r)return!0;var s=-1;switch(e[0]&&0===e[1]&&0===e[2]?s=e[0]>0?0:180:e[1]&&0===e[0]&&0===e[3]&&(s=e[1]>0?90:270),s){case 0:break;case 90:var c=[r,t];t=c[0],r=c[1];var u=[o,i];i=u[0],o=u[1];break;case 180:var f=[-t,-r,-i,-o];t=f[0],r=f[1],i=f[2],o=f[3];break;case 270:var h=[-r,-t];t=h[0],r=h[1];var d=[-o,-i];i=d[0],o=d[1];break;default:var p=T(J(t,r,e),2);t=p[0],r=p[1];var g=T(J(i,o,x.prevTransform),2);i=g[0],o=g[1]}if(P.font.vertical){var v=(o-r)/x.textAdvanceScale,m=t-i,b=Math.sign(x.height);return v.5*x.width?(ee(),!0):(F(),re(),!0):Math.abs(m)>x.width?(ee(),!0):(v<=b*x.notASpace&&F(),v<=b*x.trackingSpaceMin?x.height+=v:te(v,x.prevTransform,b)||(0===x.str.length?(F(),S.items.push({str:" ",dir:"ltr",width:0,height:Math.abs(v),transform:x.prevTransform,fontName:x.fontName,hasEOL:!1})):x.height+=v),!0)}var w=(t-i)/x.textAdvanceScale,k=r-o,O=Math.sign(x.width);return w.5*x.height?(ee(),!0):(F(),re(),!0):Math.abs(k)>x.height?(ee(),!0):(w<=O*x.notASpace&&F(),w<=O*x.trackingSpaceMin?x.width+=w:te(w,x.prevTransform,O)||(0===x.str.length?(F(),S.items.push({str:" ",dir:"ltr",width:Math.abs(w),height:0,transform:x.prevTransform,fontName:x.fontName,hasEOL:!1})):x.width+=w),!0)}function Q(e){var t=e.chars,r=e.extraSpacing,n=P.font;if(t)for(var a=n.charsToGlyphs(t),i=P.fontMatrix[0]*P.fontSize,o=0,s=a.length;o0&&void 0!==arguments[0]&&arguments[0],t=S.items.length;0!==t&&(e&&t<10||(d.enqueue(S,t),S.items=[],S.styles=Object.create(null)))}var ae=new q;return new Promise((function e(t,r){var s=function(n){ne(!0),Promise.all([n,d.ready]).then((function(){try{e(t,r)}catch(e){r(e)}}),r)};n.ensureNotTerminated(),ae.reset();for(var u,f={},p=[];!(u=ae.check())&&(p.length=0,f.args=p,X.read(f));){P=c.state;var v=f.fn;switch(p=f.args,0|v){case a.OPS.setFont:var b=p[0].name,w=p[1];if(P.font&&b===P.fontName&&w===P.fontSize)break;return re(),P.fontName=b,P.fontSize=w,void s(Y(b,null));case a.OPS.setTextRise:P.textRise=p[0];break;case a.OPS.setHScale:P.textHScale=p[0]/100;break;case a.OPS.setLeading:P.leading=p[0];break;case a.OPS.moveText:P.translateTextLineMatrix(p[0],p[1]),P.textMatrix=P.textLineMatrix.slice();break;case a.OPS.setLeadingMoveText:P.leading=-p[1],P.translateTextLineMatrix(p[0],p[1]),P.textMatrix=P.textLineMatrix.slice();break;case a.OPS.nextLine:P.carriageReturn();break;case a.OPS.setTextMatrix:P.setTextMatrix(p[0],p[1],p[2],p[3],p[4],p[5]),P.setTextLineMatrix(p[0],p[1],p[2],p[3],p[4],p[5]),z();break;case a.OPS.setCharSpacing:P.charSpacing=p[0];break;case a.OPS.setWordSpacing:P.wordSpacing=p[0];break;case a.OPS.beginText:P.textMatrix=a.IDENTITY_MATRIX.slice(),P.textLineMatrix=a.IDENTITY_MATRIX.slice();break;case a.OPS.showSpacedText:if(!c.state.font){L.ensureStateFont(c.state);continue}for(var x=(P.font.vertical?1:-1)*P.fontSize/1e3,O=p[0],A=0,C=O.length;A0){var E=N.join("");N.length=0,Q({chars:E,extraSpacing:0})}break;case a.OPS.showText:if(!c.state.font){L.ensureStateFont(c.state);continue}Q({chars:p[0],extraSpacing:0});break;case a.OPS.nextLineShowText:if(!c.state.font){L.ensureStateFont(c.state);continue}P.carriageReturn(),Q({chars:p[0],extraSpacing:0});break;case a.OPS.nextLineSetSpacingShowText:if(!c.state.font){L.ensureStateFont(c.state);continue}P.wordSpacing=p[0],P.charSpacing=p[1],P.carriageReturn(),Q({chars:p[2],extraSpacing:0});break;case a.OPS.paintXObject:re(),D||(D=i.get("XObject")||o.Dict.empty);var j=p[0]instanceof o.Name,M=p[0].name;if(j&&B.getByName(M))break;return void s(new Promise((function(e,t){if(!j)throw new a.FormatError("XObject must be referred to by name.");var r=D.getRaw(M);if(r instanceof o.Ref){if(B.getByRef(r))return void e();if(L.globalImageCache.getData(r,L.pageIndex))return void e();r=R.fetch(r)}if(!(r instanceof m.BaseStream))throw new a.FormatError("XObject should be a stream");var s=r.dict.get("Subtype");if(!(s instanceof o.Name))throw new a.FormatError("XObject should have a Name subtype");if("Form"!==s.name)return B.set(M,r.dict.objId,!0),void e();var u=c.state.clone(),f=new W(u),p=r.dict.getArray("Matrix");Array.isArray(p)&&6===p.length&&f.transform(p),ne();var v={enqueueInvoked:!1,enqueue:function(e,t){this.enqueueInvoked=!0,d.enqueue(e,t)},get desiredSize(){return d.desiredSize},get ready(){return d.ready}};L.getTextContent({stream:r,task:n,resources:r.dict.get("Resources")||i,stateManager:f,combineTextItems:l,includeMarkedContent:h,sink:v,seenStyles:g,viewBox:y,markedContentData:k}).then((function(){v.enqueueInvoked||B.set(M,r.dict.objId,!0),e()}),t)})).catch((function(e){if(!(e instanceof a.AbortException)){if(!L.options.ignoreErrors)throw e;(0,a.warn)('getTextContent - ignoring XObject: "'.concat(e,'".'))}})));case a.OPS.setGState:if(j=p[0]instanceof o.Name,M=p[0].name,j&&U.getByName(M))break;return void s(new Promise((function(e,t){if(!j)throw new a.FormatError("GState must be referred to by name.");var r=i.get("ExtGState");if(!(r instanceof o.Dict))throw new a.FormatError("ExtGState should be a dictionary.");var n=r.get(M);if(!(n instanceof o.Dict))throw new a.FormatError("GState should be a dictionary.");var s=n.get("Font");if(!s)return U.set(M,n.objId,!0),void e();re(),P.fontName=null,P.fontSize=s[1],Y(null,s[0]).then(e,t)})).catch((function(e){if(!(e instanceof a.AbortException)){if(!L.options.ignoreErrors)throw e;(0,a.warn)('getTextContent - ignoring ExtGState: "'.concat(e,'".'))}})));case a.OPS.beginMarkedContent:re(),h&&(k.level++,S.items.push({type:"beginMarkedContent",tag:p[0]instanceof o.Name?p[0].name:null}));break;case a.OPS.beginMarkedContentProps:if(re(),h){k.level++;var _=null;p[1]instanceof o.Dict&&(_=p[1].get("MCID")),S.items.push({type:"beginMarkedContentProps",id:Number.isInteger(_)?"".concat(L.idFactory.getPageObjId(),"_mcid").concat(_):null,tag:p[0]instanceof o.Name?p[0].name:null})}break;case a.OPS.endMarkedContent:if(re(),h){if(0===k.level)break;k.level--,S.items.push({type:"endMarkedContent"})}}if(S.items.length>=d.desiredSize){u=!0;break}}u?s($):(re(),ne(),t())})).catch((function(e){if(!(e instanceof a.AbortException)){if(t.options.ignoreErrors)return(0,a.warn)('getTextContent - ignoring errors during "'.concat(n.name,'" ')+'task: "'.concat(e,'".')),re(),void ne();throw e}}))}},{key:"extractDataStructures",value:function(e,t,r){var n,i=this,s=this.xref,l=this.readToUnicode(r.toUnicode||e.get("ToUnicode")||t.get("ToUnicode"));if(r.composite){var f=e.get("CIDSystemInfo");f instanceof o.Dict&&(r.cidSystemInfo={registry:(0,a.stringToPDFString)(f.get("Registry")),ordering:(0,a.stringToPDFString)(f.get("Ordering")),supplement:f.get("Supplement")});try{var h=e.get("CIDToGIDMap");h instanceof m.BaseStream&&(n=h.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;(0,a.warn)('extractDataStructures - ignoring CIDToGIDMap data: "'.concat(e,'".'))}}var d,p=[],g=null;if(e.has("Encoding")){if((d=e.get("Encoding"))instanceof o.Dict){if(g=(g=d.get("BaseEncoding"))instanceof o.Name?g.name:null,d.has("Differences")){var v,y=0,b=N(d.get("Differences"));try{for(b.s();!(v=b.n()).done;){var w=v.value,k=s.fetchIfRef(w);if("number"==typeof k)y=k;else{if(!(k instanceof o.Name))throw new a.FormatError("Invalid entry in 'Differences' array: ".concat(k));p[y++]=k.name}}}catch(e){b.e(e)}finally{b.f()}}}else if(d instanceof o.Name)g=d.name;else{var S="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new a.FormatError(S);(0,a.warn)(S)}"MacRomanEncoding"!==g&&"MacExpertEncoding"!==g&&"WinAnsiEncoding"!==g&&(g=null)}if(g)r.defaultEncoding=(0,u.getEncoding)(g);else{var x=!!(r.flags&c.FontFlags.Symbolic),O=!!(r.flags&c.FontFlags.Nonsymbolic);d=u.StandardEncoding,"TrueType"!==r.type||O||(d=u.WinAnsiEncoding),x&&(d=u.MacRomanEncoding,r.file&&!r.isInternalFont||(/Symbol/i.test(r.name)?d=u.SymbolSetEncoding:/Dingbats|Wingdings/i.test(r.name)&&(d=u.ZapfDingbatsEncoding))),r.defaultEncoding=d}return r.differences=p,r.baseEncodingName=g,r.hasEncoding=!!g||p.length>0,r.dict=e,l.then((function(e){return r.toUnicode=e,i.buildToUnicode(r)})).then((function(e){return r.toUnicode=e,n&&(r.cidToGidMap=i.readCidToGidMap(n,e)),r}))}},{key:"_simpleFontToUnicode",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,a.assert)(!e.composite,"Must be a simple font.");var r=[],n=e.defaultEncoding.slice(),i=e.baseEncodingName,o=e.differences;for(var s in o){var c=o[s];".notdef"!==c&&(n[s]=c)}var l=(0,S.getGlyphsUnicode)();for(var f in n){var h=n[f];if(""!==h){var d=l[h];if(void 0===d){var p=0;switch(h[0]){case"G":3===h.length&&(p=parseInt(h.substring(1),16));break;case"g":5===h.length&&(p=parseInt(h.substring(1),16));break;case"C":case"c":if(h.length>=3&&h.length<=4){var g=h.substring(1);if(t){p=parseInt(g,16);break}if(p=+g,Number.isNaN(p)&&Number.isInteger(parseInt(g,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":-1!==(d=(0,A.getUnicodeForGlyph)(h,l))&&(p=d)}if(p>0&&p<=1114111&&Number.isInteger(p)){if(i&&p===+f){var v=(0,u.getEncoding)(i);if(v&&(h=v[f])){r[f]=String.fromCharCode(l[h]);continue}}r[f]=String.fromCodePoint(p)}}else r[f]=String.fromCharCode(d)}}return r}},{key:"buildToUnicode",value:(r=M(E().mark((function e(t){var r,n,s,c,u,l;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.hasIncludedToUnicodeMap=!!t.toUnicode&&t.toUnicode.length>0,!t.hasIncludedToUnicodeMap){e.next=4;break}return!t.composite&&t.hasEncoding&&(t.fallbackToUnicode=this._simpleFontToUnicode(t)),e.abrupt("return",t.toUnicode);case 4:if(t.composite){e.next=6;break}return e.abrupt("return",new d.ToUnicodeMap(this._simpleFontToUnicode(t)));case 6:if(!t.composite||(!t.cMap.builtInCMap||t.cMap instanceof i.IdentityCMap)&&("Adobe"!==t.cidSystemInfo.registry||"GB1"!==t.cidSystemInfo.ordering&&"CNS1"!==t.cidSystemInfo.ordering&&"Japan1"!==t.cidSystemInfo.ordering&&"Korea1"!==t.cidSystemInfo.ordering)){e.next=15;break}return r=t.cidSystemInfo,n=r.registry,s=r.ordering,c=o.Name.get("".concat(n,"-").concat(s,"-UCS2")),e.next=11,i.CMapFactory.create({encoding:c,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});case 11:return u=e.sent,l=[],t.cMap.forEach((function(e,t){if(t>65535)throw new a.FormatError("Max size of CID is 65,535");var r=u.lookup(t);r&&(l[e]=String.fromCharCode((r.charCodeAt(0)<<8)+r.charCodeAt(1)))})),e.abrupt("return",new d.ToUnicodeMap(l));case 15:return e.abrupt("return",new d.IdentityToUnicodeMap(t.firstChar,t.lastChar));case 16:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"readToUnicode",value:function(e){var t=this;return e?e instanceof o.Name?i.CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}).then((function(e){return e instanceof i.IdentityCMap?new d.IdentityToUnicodeMap(0,65535):new d.ToUnicodeMap(e.getMap())})):e instanceof m.BaseStream?i.CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}).then((function(e){if(e instanceof i.IdentityCMap)return new d.IdentityToUnicodeMap(0,65535);var t=new Array(e.length);return e.forEach((function(e,r){if("number"!=typeof r){for(var n=[],a=0;a>1;(0!==i||t.has(o))&&(r[o]=i)}return r}},{key:"extractWidths",value:function(e,t,r){var n,a,i,s,u,l,f,h,d=this.xref,p=[],g=0,v=[];if(r.composite){if(g=e.has("DW")?e.get("DW"):1e3,h=e.get("W"))for(a=0,i=h.length;a1&&void 0!==arguments[1]?arguments[1]:NaN,r=a.Util.normalizeRect(e.argsArray[0].slice(2)),n=r[2]-r[0],i=r[3]-r[1],o=Math.hypot(n,i);0===n||0===i?(e.fnArray.splice(0,1),e.argsArray.splice(0,1)):(0===t||Math.round(o/t)>=10)&&(this._bbox||(this._bbox=[1/0,1/0,-1/0,-1/0]),this._bbox[0]=Math.min(this._bbox[0],r[0]),this._bbox[1]=Math.min(this._bbox[1],r[1]),this._bbox[2]=Math.max(this._bbox[2],r[2]),this._bbox[3]=Math.max(this._bbox[3],r[3]));for(var s=0,c=e.length;s0&&void 0!==arguments[0]?arguments[0]:new Y;_(this,e),this.state=t,this.stateStack=[]}return R(e,[{key:"save",value:function(){var e=this.state;this.stateStack.push(this.state),this.state=e.clone()}},{key:"restore",value:function(){var e=this.stateStack.pop();e&&(this.state=e)}},{key:"transform",value:function(e){this.state.ctm=a.Util.transform(this.state.ctm,e)}}]),e}(),V=function(){function e(){_(this,e),this.ctm=new Float32Array(a.IDENTITY_MATRIX),this.fontName=null,this.fontSize=0,this.loadedName=null,this.font=null,this.fontMatrix=a.FONT_IDENTITY_MATRIX,this.textMatrix=a.IDENTITY_MATRIX.slice(),this.textLineMatrix=a.IDENTITY_MATRIX.slice(),this.charSpacing=0,this.wordSpacing=0,this.leading=0,this.textHScale=1,this.textRise=0}return R(e,[{key:"setTextMatrix",value:function(e,t,r,n,a,i){var o=this.textMatrix;o[0]=e,o[1]=t,o[2]=r,o[3]=n,o[4]=a,o[5]=i}},{key:"setTextLineMatrix",value:function(e,t,r,n,a,i){var o=this.textLineMatrix;o[0]=e,o[1]=t,o[2]=r,o[3]=n,o[4]=a,o[5]=i}},{key:"translateTextMatrix",value:function(e,t){var r=this.textMatrix;r[4]=r[0]*e+r[2]*t+r[4],r[5]=r[1]*e+r[3]*t+r[5]}},{key:"translateTextLineMatrix",value:function(e,t){var r=this.textLineMatrix;r[4]=r[0]*e+r[2]*t+r[4],r[5]=r[1]*e+r[3]*t+r[5]}},{key:"carriageReturn",value:function(){this.translateTextLineMatrix(0,-this.leading),this.textMatrix=this.textLineMatrix.slice()}},{key:"clone",value:function(){var e=Object.create(this);return e.textMatrix=this.textMatrix.slice(),e.textLineMatrix=this.textLineMatrix.slice(),e.fontMatrix=this.fontMatrix.slice(),e}}]),e}(),Y=function(){function e(){_(this,e),this.ctm=new Float32Array(a.IDENTITY_MATRIX),this.font=null,this.textRenderingMode=a.TextRenderingMode.FILL,this.fillColorSpace=w.ColorSpace.singletons.gray,this.strokeColorSpace=w.ColorSpace.singletons.gray}return R(e,[{key:"clone",value:function(){return Object.create(this)}}]),e}(),K=function(){function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new W;_(this,e),this.parser=new g.Parser({lexer:new g.Lexer(t,e.opMap),xref:r}),this.stateManager=n,this.nonProcessedArgs=[],this._isPathOp=!1,this._numInvalidPathOPS=0}return R(e,[{key:"savedStatesDepth",get:function(){return this.stateManager.stateStack.length}},{key:"read",value:function(t){for(var r=t.args;;){var n=this.parser.getObj();if(n instanceof o.Cmd){var i=n.cmd,s=e.opMap[i];if(!s){(0,a.warn)('Unknown command "'.concat(i,'".'));continue}var c=s.id,u=s.numArgs,l=null!==r?r.length:0;if(this._isPathOp||(this._numInvalidPathOPS=0),this._isPathOp=c>=a.OPS.moveTo&&c<=a.OPS.endPath,s.variableArgs)l>u&&(0,a.info)("Command ".concat(i,": expected [0, ").concat(u,"] args, ")+"but received ".concat(l," args."));else{if(l!==u){for(var f=this.nonProcessedArgs;l>u;)f.push(r.shift()),l--;for(;le.MAX_INVALID_PATH_OPS)throw new a.FormatError("Invalid ".concat(h));(0,a.warn)("Skipping ".concat(h)),null!==r&&(r.length=0);continue}}return this.preprocessCommand(c,r),t.fn=c,t.args=r,!0}if(n===o.EOF)return!1;if(null!==n&&(null===r&&(r=[]),r.push(n),r.length>33))throw new a.FormatError("Too many arguments")}}},{key:"preprocessCommand",value:function(e,t){switch(0|e){case a.OPS.save:this.stateManager.save();break;case a.OPS.restore:this.stateManager.restore();break;case a.OPS.transform:this.stateManager.transform(t)}}}],[{key:"opMap",get:function(){var e=(0,x.getLookupTableFactory)((function(e){e.w={id:a.OPS.setLineWidth,numArgs:1,variableArgs:!1},e.J={id:a.OPS.setLineCap,numArgs:1,variableArgs:!1},e.j={id:a.OPS.setLineJoin,numArgs:1,variableArgs:!1},e.M={id:a.OPS.setMiterLimit,numArgs:1,variableArgs:!1},e.d={id:a.OPS.setDash,numArgs:2,variableArgs:!1},e.ri={id:a.OPS.setRenderingIntent,numArgs:1,variableArgs:!1},e.i={id:a.OPS.setFlatness,numArgs:1,variableArgs:!1},e.gs={id:a.OPS.setGState,numArgs:1,variableArgs:!1},e.q={id:a.OPS.save,numArgs:0,variableArgs:!1},e.Q={id:a.OPS.restore,numArgs:0,variableArgs:!1},e.cm={id:a.OPS.transform,numArgs:6,variableArgs:!1},e.m={id:a.OPS.moveTo,numArgs:2,variableArgs:!1},e.l={id:a.OPS.lineTo,numArgs:2,variableArgs:!1},e.c={id:a.OPS.curveTo,numArgs:6,variableArgs:!1},e.v={id:a.OPS.curveTo2,numArgs:4,variableArgs:!1},e.y={id:a.OPS.curveTo3,numArgs:4,variableArgs:!1},e.h={id:a.OPS.closePath,numArgs:0,variableArgs:!1},e.re={id:a.OPS.rectangle,numArgs:4,variableArgs:!1},e.S={id:a.OPS.stroke,numArgs:0,variableArgs:!1},e.s={id:a.OPS.closeStroke,numArgs:0,variableArgs:!1},e.f={id:a.OPS.fill,numArgs:0,variableArgs:!1},e.F={id:a.OPS.fill,numArgs:0,variableArgs:!1},e["f*"]={id:a.OPS.eoFill,numArgs:0,variableArgs:!1},e.B={id:a.OPS.fillStroke,numArgs:0,variableArgs:!1},e["B*"]={id:a.OPS.eoFillStroke,numArgs:0,variableArgs:!1},e.b={id:a.OPS.closeFillStroke,numArgs:0,variableArgs:!1},e["b*"]={id:a.OPS.closeEOFillStroke,numArgs:0,variableArgs:!1},e.n={id:a.OPS.endPath,numArgs:0,variableArgs:!1},e.W={id:a.OPS.clip,numArgs:0,variableArgs:!1},e["W*"]={id:a.OPS.eoClip,numArgs:0,variableArgs:!1},e.BT={id:a.OPS.beginText,numArgs:0,variableArgs:!1},e.ET={id:a.OPS.endText,numArgs:0,variableArgs:!1},e.Tc={id:a.OPS.setCharSpacing,numArgs:1,variableArgs:!1},e.Tw={id:a.OPS.setWordSpacing,numArgs:1,variableArgs:!1},e.Tz={id:a.OPS.setHScale,numArgs:1,variableArgs:!1},e.TL={id:a.OPS.setLeading,numArgs:1,variableArgs:!1},e.Tf={id:a.OPS.setFont,numArgs:2,variableArgs:!1},e.Tr={id:a.OPS.setTextRenderingMode,numArgs:1,variableArgs:!1},e.Ts={id:a.OPS.setTextRise,numArgs:1,variableArgs:!1},e.Td={id:a.OPS.moveText,numArgs:2,variableArgs:!1},e.TD={id:a.OPS.setLeadingMoveText,numArgs:2,variableArgs:!1},e.Tm={id:a.OPS.setTextMatrix,numArgs:6,variableArgs:!1},e["T*"]={id:a.OPS.nextLine,numArgs:0,variableArgs:!1},e.Tj={id:a.OPS.showText,numArgs:1,variableArgs:!1},e.TJ={id:a.OPS.showSpacedText,numArgs:1,variableArgs:!1},e["'"]={id:a.OPS.nextLineShowText,numArgs:1,variableArgs:!1},e['"']={id:a.OPS.nextLineSetSpacingShowText,numArgs:3,variableArgs:!1},e.d0={id:a.OPS.setCharWidth,numArgs:2,variableArgs:!1},e.d1={id:a.OPS.setCharWidthAndBounds,numArgs:6,variableArgs:!1},e.CS={id:a.OPS.setStrokeColorSpace,numArgs:1,variableArgs:!1},e.cs={id:a.OPS.setFillColorSpace,numArgs:1,variableArgs:!1},e.SC={id:a.OPS.setStrokeColor,numArgs:4,variableArgs:!0},e.SCN={id:a.OPS.setStrokeColorN,numArgs:33,variableArgs:!0},e.sc={id:a.OPS.setFillColor,numArgs:4,variableArgs:!0},e.scn={id:a.OPS.setFillColorN,numArgs:33,variableArgs:!0},e.G={id:a.OPS.setStrokeGray,numArgs:1,variableArgs:!1},e.g={id:a.OPS.setFillGray,numArgs:1,variableArgs:!1},e.RG={id:a.OPS.setStrokeRGBColor,numArgs:3,variableArgs:!1},e.rg={id:a.OPS.setFillRGBColor,numArgs:3,variableArgs:!1},e.K={id:a.OPS.setStrokeCMYKColor,numArgs:4,variableArgs:!1},e.k={id:a.OPS.setFillCMYKColor,numArgs:4,variableArgs:!1},e.sh={id:a.OPS.shadingFill,numArgs:1,variableArgs:!1},e.BI={id:a.OPS.beginInlineImage,numArgs:0,variableArgs:!1},e.ID={id:a.OPS.beginImageData,numArgs:0,variableArgs:!1},e.EI={id:a.OPS.endInlineImage,numArgs:1,variableArgs:!1},e.Do={id:a.OPS.paintXObject,numArgs:1,variableArgs:!1},e.MP={id:a.OPS.markPoint,numArgs:1,variableArgs:!1},e.DP={id:a.OPS.markPointProps,numArgs:2,variableArgs:!1},e.BMC={id:a.OPS.beginMarkedContent,numArgs:1,variableArgs:!1},e.BDC={id:a.OPS.beginMarkedContentProps,numArgs:2,variableArgs:!1},e.EMC={id:a.OPS.endMarkedContent,numArgs:0,variableArgs:!1},e.BX={id:a.OPS.beginCompat,numArgs:0,variableArgs:!1},e.EX={id:a.OPS.endCompat,numArgs:0,variableArgs:!1},e.BM=null,e.BD=null,e.true=null,e.fa=null,e.fal=null,e.fals=null,e.false=null,e.nu=null,e.nul=null,e.null=null}));return(0,a.shadow)(this,"opMap",e())}},{key:"MAX_INVALID_PATH_OPS",get:function(){return(0,a.shadow)(this,"MAX_INVALID_PATH_OPS",10)}}]),e}();t.EvaluatorPreprocessor=K},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.IdentityCMap=t.CMapFactory=t.CMap=void 0;var n=r(2),a=r(134),i=r(136),o=r(146),s=r(135),c=r(139);function u(){u=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function l(e,t,r,a){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var h={};function d(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=d.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=f(e[n],e,i);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==p(l)&&r.call(l,"__await")?t.resolve(l.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(l).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=f(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===h)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var a=f(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,h;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},e}function l(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function f(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){l(i,n,a,o,s,"next",e)}function s(e){l(i,n,a,o,s,"throw",e)}o(void 0)}))}}function h(e,t){return h=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},h(e,t)}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];g(this,e),this.codespaceRanges=[[],[],[],[]],this.numCodespaceRanges=0,this._map=[],this.name="",this.vertical=!1,this.useCMap=null,this.builtInCMap=t}return y(e,[{key:"addCodespaceRange",value:function(e,t,r){this.codespaceRanges[e-1].push(t,r),this.numCodespaceRanges++}},{key:"mapCidRange",value:function(e,t,r){if(t-e>b)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=r++}},{key:"mapBfRange",value:function(e,t,r){if(t-e>b)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");for(var n=r.length-1;e<=t;){this._map[e++]=r;var a=r.charCodeAt(n)+1;r=a>255?r.substring(0,n-1)+String.fromCharCode(r.charCodeAt(n-1)+1)+"\\0":r.substring(0,n)+String.fromCharCode(a)}}},{key:"mapBfRangeToArray",value:function(e,t,r){if(t-e>b)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");for(var n=r.length,a=0;e<=t&&a>>0;for(var s=a[i],c=0,u=s.length;c=l&&n<=f)return r.charcode=n,void(r.length=i+1)}}r.charcode=0,r.length=1}},{key:"getCharCodeLength",value:function(e){for(var t=this.codespaceRanges,r=0,n=t.length;r=s&&e<=c)return r+1}return 1}},{key:"length",get:function(){return this._map.length}},{key:"isIdentityCMap",get:function(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(var e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}]),e}();t.CMap=w;var k=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&h(e,t)}(i,e);var t,r,a=(t=i,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=d(t);if(r){var a=d(this).constructor;e=Reflect.construct(n,arguments,a)}else e=n.apply(this,arguments);return function(e,t){if(t&&("object"===p(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function i(e,t){var r;return g(this,i),(r=a.call(this)).vertical=e,r.addCodespaceRange(t,0,65535),r}return y(i,[{key:"mapCidRange",value:function(e,t,r){(0,n.unreachable)("should not call mapCidRange")}},{key:"mapBfRange",value:function(e,t,r){(0,n.unreachable)("should not call mapBfRange")}},{key:"mapBfRangeToArray",value:function(e,t,r){(0,n.unreachable)("should not call mapBfRangeToArray")}},{key:"mapOne",value:function(e,t){(0,n.unreachable)("should not call mapCidOne")}},{key:"lookup",value:function(e){return Number.isInteger(e)&&e<=65535?e:void 0}},{key:"contains",value:function(e){return Number.isInteger(e)&&e<=65535}},{key:"forEach",value:function(e){for(var t=0;t<=65535;t++)e(t,t)}},{key:"charCodeOf",value:function(e){return Number.isInteger(e)&&e<=65535?e:-1}},{key:"getMap",value:function(){for(var e=new Array(65536),t=0;t<=65535;t++)e[t]=t;return e}},{key:"length",get:function(){return 65536}},{key:"isIdentityCMap",get:function(){(0,n.unreachable)("should not access .isIdentityCMap")}}]),i}(w);t.IdentityCMap=k;var S=function(){function e(e,t){for(var r=0,n=0;n<=t;n++)r=r<<8|e[n];return r>>>0}function t(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode.apply(null,e.subarray(0,t+1))}function r(e,t,r){for(var n=0,a=r;a>=0;a--)n+=e[a]+t[a],e[a]=255&n,n>>=8}function a(e,t){for(var r=1,n=t;n>=0&&r>0;n--)r+=e[n],e[n]=255&r,r>>=8}var i=16,o=function(){function e(t){g(this,e),this.buffer=t,this.pos=0,this.end=t.length,this.tmpBuf=new Uint8Array(19)}return y(e,[{key:"readByte",value:function(){return this.pos>=this.end?-1:this.buffer[this.pos++]}},{key:"readNumber",value:function(){var e,t=0;do{var r=this.readByte();if(r<0)throw new n.FormatError("unexpected EOF in bcmap");e=!(128&r),t=t<<7|127&r}while(!e);return t}},{key:"readSigned",value:function(){var e=this.readNumber();return 1&e?~(e>>>1):e>>>1}},{key:"readHex",value:function(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1)),this.pos+=t+1}},{key:"readHexNumber",value:function(e,t){var r,a=this.tmpBuf,i=0;do{var o=this.readByte();if(o<0)throw new n.FormatError("unexpected EOF in bcmap");r=!(128&o),a[i++]=127&o}while(!r);for(var s=t,c=0,u=0;s>=0;){for(;u<8&&a.length>0;)c|=a[--i]<>=8,u-=8}}},{key:"readHexSigned",value:function(e,t){this.readHexNumber(e,t);for(var r=1&e[t]?255:0,n=0,a=0;a<=t;a++)n=(1&n)<<8|e[a],e[a]=n>>1^r}},{key:"readString",value:function(){for(var e=this.readNumber(),t="",r=0;r=0)){n.next=68;break}if(7!=(k=w>>5)){n.next=20;break}n.t0=31&w,n.next=0===n.t0?15:1===n.t0?17:19;break;case 15:return f.readString(),n.abrupt("break",19);case 17:return d=f.readString(),n.abrupt("break",19);case 19:return n.abrupt("continue",9);case 20:if(S=!!(16&w),!(1+(x=15&w)>i)){n.next=24;break}throw new Error("BinaryCMapReader.process: Invalid dataSize.");case 24:O=1,A=f.readNumber(),n.t1=k,n.next=0===n.t1?29:1===n.t1?35:2===n.t1?41:3===n.t1?46:4===n.t1?53:5===n.t1?58:65;break;case 29:for(f.readHex(p,x),f.readHexNumber(g,x),r(g,p,x),c.addCodespaceRange(x+1,e(p,x),e(g,x)),C=1;C>>0}function t(e){if("string"!=typeof e)throw new n.FormatError("Malformed CMap: expected string.")}function r(e){if(!Number.isInteger(e))throw new n.FormatError("Malformed CMap: expected int.")}function l(r,n){for(;;){var i=n.getObj();if(i===a.EOF)break;if((0,a.isCmd)(i,"endbfchar"))return;t(i);var o=e(i);t(i=n.getObj());var s=i;r.mapOne(o,s)}}function h(r,i){for(;;){var o=i.getObj();if(o===a.EOF)break;if((0,a.isCmd)(o,"endbfrange"))return;t(o);var s=e(o);t(o=i.getObj());var c=e(o);if(o=i.getObj(),Number.isInteger(o)||"string"==typeof o){var u=Number.isInteger(o)?String.fromCharCode(o):o;r.mapBfRange(s,c,u)}else{if(!(0,a.isCmd)(o,"["))break;o=i.getObj();for(var l=[];!(0,a.isCmd)(o,"]")&&o!==a.EOF;)l.push(o),o=i.getObj();r.mapBfRangeToArray(s,c,l)}}throw new n.FormatError("Invalid bf range.")}function d(n,i){for(;;){var o=i.getObj();if(o===a.EOF)break;if((0,a.isCmd)(o,"endcidchar"))return;t(o);var s=e(o);r(o=i.getObj());var c=o;n.mapOne(s,c)}}function p(n,i){for(;;){var o=i.getObj();if(o===a.EOF)break;if((0,a.isCmd)(o,"endcidrange"))return;t(o);var s=e(o);t(o=i.getObj());var c=e(o);r(o=i.getObj());var u=o;n.mapCidRange(s,c,u)}}function g(t,r){for(;;){var i=r.getObj();if(i===a.EOF)break;if((0,a.isCmd)(i,"endcodespacerange"))return;if("string"!=typeof i)break;var o=e(i);if("string"!=typeof(i=r.getObj()))break;var s=e(i);t.addCodespaceRange(i.length,o,s)}throw new n.FormatError("Invalid codespace range.")}function v(e,t){var r=t.getObj();Number.isInteger(r)&&(e.vertical=!!r)}function y(e,t){var r=t.getObj();r instanceof a.Name&&(e.name=r.name)}function b(e,t,r,n){return x.apply(this,arguments)}function x(){return(x=f(u().mark((function e(t,r,i,o){var c,f,m;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=1,(m=r.getObj())!==a.EOF){e.next=7;break}return e.abrupt("break",39);case 7:if(!(m instanceof a.Name)){e.next=12;break}"WMode"===m.name?v(t,r):"CMapName"===m.name&&y(t,r),c=m,e.next=29;break;case 12:if(!(m instanceof a.Cmd)){e.next=29;break}e.t0=m.cmd,e.next="endcmap"===e.t0?16:"usecmap"===e.t0?17:"begincodespacerange"===e.t0?19:"beginbfchar"===e.t0?21:"begincidchar"===e.t0?23:"beginbfrange"===e.t0?25:"begincidrange"===e.t0?27:29;break;case 16:return e.abrupt("break",39);case 17:return c instanceof a.Name&&(f=c.name),e.abrupt("break",29);case 19:return g(t,r),e.abrupt("break",29);case 21:return l(t,r),e.abrupt("break",29);case 23:return d(t,r),e.abrupt("break",29);case 25:return h(t,r),e.abrupt("break",29);case 27:return p(t,r),e.abrupt("break",29);case 29:e.next=37;break;case 31:if(e.prev=31,e.t1=e.catch(1),!(e.t1 instanceof s.MissingDataException)){e.next=35;break}throw e.t1;case 35:return(0,n.warn)("Invalid cMap data: "+e.t1),e.abrupt("continue",0);case 37:e.next=0;break;case 39:if(!o&&f&&(o=f),!o){e.next=42;break}return e.abrupt("return",O(t,i,o));case 42:return e.abrupt("return",t);case 43:case"end":return e.stop()}}),e,null,[[1,31]])})))).apply(this,arguments)}function O(e,t,r){return A.apply(this,arguments)}function A(){return(A=f(u().mark((function e(t,r,n){var a,i;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,C(n,r);case 2:if(t.useCMap=e.sent,0===t.numCodespaceRanges){for(a=t.useCMap.codespaceRanges,i=0;i{Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=t.Linearization=t.Lexer=void 0;var n=r(2),a=r(134),i=r(135),o=r(147),s=r(149),c=r(150),u=r(152),l=r(153),f=r(156),h=r(158),d=r(160),p=r(139),g=r(161),v=r(162);function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function m(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function b(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:null,t=this.buf1;if(this.shift(),t instanceof a.Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":for(var r=[];!(0,a.isCmd)(this.buf1,"]")&&this.buf1!==a.EOF;)r.push(this.getObj(e));if(this.buf1===a.EOF){if(this.recoveryMode)return r;throw new i.ParserEOFException("End of file inside array.")}return this.shift(),r;case"<<":for(var o=new a.Dict(this.xref);!(0,a.isCmd)(this.buf1,">>")&&this.buf1!==a.EOF;)if(this.buf1 instanceof a.Name){var s=this.buf1.name;if(this.shift(),this.buf1===a.EOF)break;o.set(s,this.getObj(e))}else(0,n.info)("Malformed dictionary: key must be a name object"),this.shift();if(this.buf1===a.EOF){if(this.recoveryMode)return o;throw new i.ParserEOFException("End of file inside dictionary.")}return(0,a.isCmd)(this.buf2,"stream")?this.allowStreams?this.makeStream(o,e):o:(this.shift(),o);default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&(0,a.isCmd)(this.buf2,"R")){var c=a.Ref.get(t,this.buf1);return this.shift(),this.shift(),c}return t}return"string"==typeof t&&e?e.decryptString(t):t}},{key:"findDefaultInlineStreamEnd",value:function(e){for(var t,r,o=this.lexer,s=e.pos,c=0;-1!==(t=e.getByte());)if(0===c)c=69===t?1:0;else if(1===c)c=73===t?2:0;else if(32===t||10===t||13===t){r=e.pos;for(var u=e.peekBytes(10),l=0,f=u.length;l127)){c=0;break}if(2!==c)continue;if(o.knownCommands){var h=o.peekObj();h instanceof a.Cmd&&!o.knownCommands[h.cmd]&&(c=0)}else(0,n.warn)("findDefaultInlineStreamEnd - \`lexer.knownCommands\` is undefined.");if(2===c)break}else c=0;-1===t&&((0,n.warn)("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker"),r&&((0,n.warn)('... trying to recover by using the last "EI" occurrence.'),e.skip(-(e.pos-r))));var d=4;return e.skip(-d),t=e.peekByte(),e.skip(d),(0,i.isWhiteSpace)(t)||d--,e.pos-d-s}},{key:"findDCTDecodeInlineStreamEnd",value:function(e){for(var t,r,a=e.pos,i=!1;-1!==(t=e.getByte());)if(255===t){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:(r=e.getUint16())>2?e.skip(r-2):e.skip(-2)}if(i)break}var o=e.pos-a;return-1===t?((0,n.warn)("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."),e.skip(-o),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),o)}},{key:"findASCII85DecodeInlineStreamEnd",value:function(e){for(var t,r=e.pos;-1!==(t=e.getByte());)if(126===t){var a=e.pos;for(t=e.peekByte();(0,i.isWhiteSpace)(t);)e.skip(),t=e.peekByte();if(62===t){e.skip();break}if(e.pos>a){var o=e.peekBytes(2);if(69===o[0]&&73===o[1])break}}var s=e.pos-r;return-1===t?((0,n.warn)("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."),e.skip(-s),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),s)}},{key:"findASCIIHexDecodeInlineStreamEnd",value:function(e){for(var t,r=e.pos;-1!==(t=e.getByte())&&62!==t;);var a=e.pos-r;return-1===t?((0,n.warn)("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."),e.skip(-a),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),a)}},{key:"inlineStreamSkipEI",value:function(e){for(var t,r=0;-1!==(t=e.getByte());)if(0===r)r=69===t?1:0;else if(1===r)r=73===t?2:0;else if(2===r)break}},{key:"makeInlineImage",value:function(e){for(var t,r=this.lexer,i=r.stream,o=Object.create(null);!(0,a.isCmd)(this.buf1,"ID")&&this.buf1!==a.EOF;){if(!(this.buf1 instanceof a.Name))throw new n.FormatError("Dictionary key must be a name object");var s=this.buf1.name;if(this.shift(),this.buf1===a.EOF)break;o[s]=this.getObj(e)}-1!==r.beginInlineImagePos&&(t=i.pos-r.beginInlineImagePos);var c,u=this.xref.fetchIfRef(o.F||o.Filter);if(u instanceof a.Name)c=u.name;else if(Array.isArray(u)){var l=this.xref.fetchIfRef(u[0]);l instanceof a.Name&&(c=l.name)}var f,h,d=i.pos;switch(c){case"DCT":case"DCTDecode":f=this.findDCTDecodeInlineStreamEnd(i);break;case"A85":case"ASCII85Decode":f=this.findASCII85DecodeInlineStreamEnd(i);break;case"AHx":case"ASCIIHexDecode":f=this.findASCIIHexDecodeInlineStreamEnd(i);break;default:f=this.findDefaultInlineStreamEnd(i)}if(f<1e3&&t>0){var p=i.pos;i.pos=r.beginInlineImagePos,h=function(e){for(var t=[],r=e.length,n=0;n=n)return r.pos+=o,r.pos-e;o++}r.pos+=i}return-1}},{key:"makeStream",value:function(e,t){var r=this.lexer,o=r.stream;r.skipToNextLine();var s=o.pos-1,c=e.get("Length");if(Number.isInteger(c)||((0,n.info)('Bad length "'.concat(c&&c.toString(),'" in stream.')),c=0),o.pos=s+c,r.nextChar(),this.tryShift()&&(0,a.isCmd)(this.buf2,"endstream"))this.shift();else{var u=new Uint8Array([101,110,100,115,116,114,101,97,109]),l=this._findStreamLength(s,u);if(l<0){for(var f=1;f<=1;f++){var h=u.length-f,d=u.slice(0,h),p=this._findStreamLength(s,d);if(p>=0){var g=o.peekBytes(h+1)[h];if(!(0,i.isWhiteSpace)(g))break;(0,n.info)('Found "'.concat((0,n.bytesToString)(d),'" when ')+"searching for endstream command."),l=p;break}}if(l<0)throw new n.FormatError("Missing endstream command.")}c=l,r.nextChar(),this.shift(),this.shift()}return this.shift(),o=o.makeSubStream(s,c,e),t&&(o=t.createStream(o,c)),(o=this.filter(o,e,c)).dict=e,o}},{key:"filter",value:function(e,t,r){var i=t.get("F","Filter"),o=t.get("DP","DecodeParms");if(i instanceof a.Name)return Array.isArray(o)&&(0,n.warn)("/DecodeParms should not be an Array, when /Filter is a Name."),this.makeFilter(e,i.name,r,o);var s=r;if(Array.isArray(i))for(var c=i,u=o,l=0,f=c.length;l=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}var O=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;m(this,e),this.stream=t,this.nextChar(),this.strBuf=[],this.knownCommands=r,this._hexStringNumWarn=0,this.beginInlineImagePos=-1}return w(e,[{key:"nextChar",value:function(){return this.currentChar=this.stream.getByte()}},{key:"peekChar",value:function(){return this.stream.peekByte()}},{key:"getNumber",value:function(){var e=this.currentChar,t=!1,r=0,a=0;if(45===e?(a=-1,45===(e=this.nextChar())&&(e=this.nextChar())):43===e&&(a=1,e=this.nextChar()),10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e&&(r=10,e=this.nextChar()),e<48||e>57){var o="Invalid number: ".concat(String.fromCharCode(e)," (charCode ").concat(e,")");if((0,i.isWhiteSpace)(e)||-1===e)return(0,n.info)('Lexer.getNumber - "'.concat(o,'".')),0;throw new n.FormatError(o)}a=a||1;for(var s=e-48,c=0,u=1;(e=this.nextChar())>=0;)if(e>=48&&e<=57){var l=e-48;t?c=10*c+l:(0!==r&&(r*=10),s=10*s+l)}else if(46===e){if(0!==r)break;r=1}else if(45===e)(0,n.warn)("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;if(43===(e=this.peekChar())||45===e)u=45===e?-1:1,this.nextChar();else if(e<48||e>57)break;t=!0}return 0!==r&&(s/=r),t&&(s*=Math.pow(10,u*c)),a*s}},{key:"getString",value:function(){var e=1,t=!1,r=this.strBuf;r.length=0;for(var a=this.nextChar();;){var i=!1;switch(0|a){case-1:(0,n.warn)("Unterminated string"),t=!0;break;case 40:++e,r.push("(");break;case 41:0==--e?(this.nextChar(),t=!0):r.push(")");break;case 92:switch(a=this.nextChar()){case-1:(0,n.warn)("Unterminated string"),t=!0;break;case 110:r.push("\\n");break;case 114:r.push("\\r");break;case 116:r.push("\\t");break;case 98:r.push("\\b");break;case 102:r.push("\\f");break;case 92:case 40:case 41:r.push(String.fromCharCode(a));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:var o=15&a;i=!0,(a=this.nextChar())>=48&&a<=55&&(o=(o<<3)+(15&a),(a=this.nextChar())>=48&&a<=55&&(i=!1,o=(o<<3)+(15&a))),r.push(String.fromCharCode(o));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:r.push(String.fromCharCode(a))}break;default:r.push(String.fromCharCode(a))}if(t)break;i||(a=this.nextChar())}return r.join("")}},{key:"getName",value:function(){var e,t,r=this.strBuf;for(r.length=0;(e=this.nextChar())>=0&&!S[e];)if(35===e){if(e=this.nextChar(),S[e]){(0,n.warn)("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number."),r.push("#");break}var i=x(e);if(-1!==i){t=e;var o=x(e=this.nextChar());if(-1===o){if((0,n.warn)("Lexer_getName: Illegal digit (".concat(String.fromCharCode(e),") ")+"in hexadecimal number."),r.push("#",String.fromCharCode(t)),S[e])break;r.push(String.fromCharCode(e));continue}r.push(String.fromCharCode(i<<4|o))}else r.push("#",String.fromCharCode(e))}else r.push(String.fromCharCode(e));return r.length>127&&(0,n.warn)("Name token is longer than allowed by the spec: ".concat(r.length)),a.Name.get(r.join(""))}},{key:"_hexStringWarn",value:function(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5||(0,n.warn)("getHexString - ignoring invalid character: ".concat(e)):(0,n.warn)("getHexString - ignoring additional invalid characters.")}},{key:"getHexString",value:function(){var e=this.strBuf;e.length=0;var t,r,a=this.currentChar,i=!0;for(this._hexStringNumWarn=0;;){if(a<0){(0,n.warn)("Unterminated hex string");break}if(62===a){this.nextChar();break}if(1!==S[a]){if(i){if(-1===(t=x(a))){this._hexStringWarn(a),a=this.nextChar();continue}}else{if(-1===(r=x(a))){this._hexStringWarn(a),a=this.nextChar();continue}e.push(String.fromCharCode(t<<4|r))}i=!i,a=this.nextChar()}else a=this.nextChar()}return e.join("")}},{key:"getObj",value:function(){for(var e=!1,t=this.currentChar;;){if(t<0)return a.EOF;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==S[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:return this.nextChar(),a.Cmd.get("[");case 93:return this.nextChar(),a.Cmd.get("]");case 60:return 60===(t=this.nextChar())?(this.nextChar(),a.Cmd.get("<<")):this.getHexString();case 62:return 62===(t=this.nextChar())?(this.nextChar(),a.Cmd.get(">>")):a.Cmd.get(">");case 123:return this.nextChar(),a.Cmd.get("{");case 125:return this.nextChar(),a.Cmd.get("}");case 41:throw this.nextChar(),new n.FormatError("Illegal character: ".concat(t))}var r=String.fromCharCode(t);if(t<32||t>127){var i=this.peekChar();if(i>=32&&i<=127)return this.nextChar(),a.Cmd.get(r)}for(var o=this.knownCommands,s=o&&void 0!==o[r];(t=this.nextChar())>=0&&!S[t];){var c=r+String.fromCharCode(t);if(s&&void 0===o[c])break;if(128===r.length)throw new n.FormatError("Command token too long: ".concat(r.length));r=c,s=o&&void 0!==o[r]}return"true"===r||"false"!==r&&("null"===r?null:("BI"===r&&(this.beginInlineImagePos=this.stream.pos),a.Cmd.get(r)))}},{key:"peekObj",value:function(){var e,t=this.stream.pos,r=this.currentChar,a=this.beginInlineImagePos;try{e=this.getObj()}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)("peekObj: ".concat(e))}return this.stream.pos=t,this.currentChar=r,this.beginInlineImagePos=a,e}},{key:"skipToNextLine",value:function(){for(var e=this.currentChar;e>=0;){if(13===e){10===(e=this.nextChar())&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}]),e}();t.Lexer=O;var A=function(){function e(){m(this,e)}return w(e,null,[{key:"create",value:function(e){function t(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.get(t);if(Number.isInteger(n)&&(r?n>=0:n>0))return n;throw new Error('The "'.concat(t,'" parameter in the linearization ')+"dictionary is invalid.")}var r,n,i=new k({lexer:new O(e),xref:null}),o=i.getObj(),s=i.getObj(),c=i.getObj(),u=i.getObj();if(!(Number.isInteger(o)&&Number.isInteger(s)&&(0,a.isCmd)(c,"obj")&&u instanceof a.Dict&&"number"==typeof(r=u.get("Linearized"))&&r>0))return null;if((n=t(u,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:n,hints:function(e){var t,r=e.get("H");if(Array.isArray(r)&&(2===(t=r.length)||4===t)){for(var n=0;n0))throw new Error("Hint (".concat(n,") in the linearization dictionary is invalid."))}return r}throw new Error("Hint array in the linearization dictionary is invalid.")}(u),objectNumberFirst:t(u,"O"),endFirst:t(u,"E"),numPages:t(u,"N"),mainXRefEntriesOffset:t(u,"T"),pageFirst:u.has("P")?t(u,"P",!0):0}}}]),e}();t.Linearization=A},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Ascii85Stream=void 0;var a=r(148),i=r(135);function o(e,t){for(var r=0;r=0;--n)r[a+n]=255&s,s>>=8}}else this.eof=!0}}])&&o(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),f}(a.DecodeStream);t.Ascii85Stream=u},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.StreamsSequenceStream=t.DecodeStream=void 0;var a=r(136),i=r(139);function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);rn&&(t=n)}else{for(;!this.eof;)this.readBlock();t=this.bufferLength}return this.pos=t,this.buffer.subarray(r,t)}},{key:"reset",value:function(){this.pos=0}},{key:"makeSubStream",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(void 0===t)for(;!this.eof;)this.readBlock();else for(var n=e+t;this.bufferLength<=n&&!this.eof;)this.readBlock();return new i.Stream(this.buffer,e,t,r)}},{key:"getBaseStreams",value:function(){return this.str?this.str.getBaseStreams():null}}]),r}(a.BaseStream);t.DecodeStream=y;var m=function(e){h(r,e);var t=p(r);function r(e){var n,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;u(this,r);var i,s=0,c=o(e);try{for(c.s();!(i=c.n()).done;){var l=i.value;s+=l instanceof y?l._rawMinBufferLength:l.length}}catch(e){c.e(e)}finally{c.f()}return(n=t.call(this,s)).streams=e,n._onError=a,n}return f(r,[{key:"readBlock",value:function(){var e=this.streams;if(0!==e.length){var t,r=e.shift();try{t=r.getBytes()}catch(e){if(this._onError)return void this._onError(e,r.dict&&r.dict.objId);throw e}var n=this.bufferLength,a=n+t.length;this.ensureBuffer(a).set(t,n),this.bufferLength=a}else this.eof=!0}},{key:"getBaseStreams",value:function(){var e,t,r=[],n=o(this.streams);try{for(n.s();!(e=n.n()).done;){var a=e.value.getBaseStreams();a&&r.push.apply(r,function(e){if(Array.isArray(e))return c(e)}(t=a)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||s(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())}}catch(e){n.e(e)}finally{n.f()}return r.length>0?r:null}}]),r}(y);t.StreamsSequenceStream=m},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>1,n=this.ensureBuffer(this.bufferLength+r),i=this.bufferLength,o=this.firstDigit,s=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return a(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}(e);try{for(s.s();!(t=s.n()).done;){var c=t.value,u=void 0;if(c>=48&&c<=57)u=15&c;else{if(!(c>=65&&c<=70||c>=97&&c<=102)){if(62===c){this.eof=!0;break}continue}u=9+(15&c)}o<0?o=u:(n[i++]=o<<4|u,o=-1)}}catch(e){s.e(e)}finally{s.f()}o>=0&&this.eof&&(n[i++]=o<<4,o=-1),this.firstDigit=o,this.bufferLength=i}else this.eof=!0}}])&&i(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),f}(r(148).DecodeStream);t.AsciiHexStream=c},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CCITTFaxStream=void 0;var a=r(151),i=r(148),o=r(134);function s(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.CCITTFaxDecoder=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{};if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t||"function"!=typeof t.next)throw new Error('CCITTFaxDecoder - invalid "source" parameter.');this.source=t,this.eof=!1,this.encoding=r.K||0,this.eoline=r.EndOfLine||!1,this.byteAlign=r.EncodedByteAlign||!1,this.columns=r.Columns||1728,this.rows=r.Rows||0;var n,a=r.EndOfBlock;for(null==a&&(a=!0),this.eoblock=a,this.black=r.BlackIs1||!1,this.codingLine=new Uint32Array(this.columns+1),this.refLine=new Uint32Array(this.columns+2),this.codingLine[0]=this.columns,this.codingPos=0,this.row=0,this.nextLine2D=this.encoding<0,this.inputBits=0,this.inputBuf=0,this.outputBits=0,this.rowsDone=!1;0===(n=this._lookBits(12));)this._eatBits(1);1===n&&this._eatBits(12),this.encoding>0&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1))}var t,r;return t=e,(r=[{key:"readNextChar",value:function(){if(this.eof)return-1;var e,t,r,a,i,s=this.refLine,c=this.codingLine,u=this.columns;if(0===this.outputBits){if(this.rowsDone&&(this.eof=!0),this.eof)return-1;var l,f,h;if(this.err=!1,this.nextLine2D){for(a=0;c[a]=64);do{f+=h=this._getWhiteCode()}while(h>=64)}else{do{l+=h=this._getWhiteCode()}while(h>=64);do{f+=h=this._getBlackCode()}while(h>=64)}for(this._addPixels(c[this.codingPos]+l,t),c[this.codingPos]0?--e:++e;s[e]<=c[this.codingPos]&&s[e]0?--e:++e;s[e]<=c[this.codingPos]&&s[e]0?--e:++e;s[e]<=c[this.codingPos]&&s[e]=64);else do{l+=h=this._getWhiteCode()}while(h>=64);this._addPixels(c[this.codingPos]+l,t),t^=1}var d=!1;if(this.byteAlign&&(this.inputBits&=-8),this.eoblock||this.row!==this.rows-1){if(l=this._lookBits(12),this.eoline)for(;l!==o&&1!==l;)this._eatBits(1),l=this._lookBits(12);else for(;0===l;)this._eatBits(1),l=this._lookBits(12);1===l?(this._eatBits(12),d=!0):l===o&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1)),this.eoblock&&d&&this.byteAlign){if(1===(l=this._lookBits(12))){if(this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1)),this.encoding>=0)for(a=0;a<4;++a)1!==(l=this._lookBits(12))&&(0,n.info)("bad rtc code: "+l),this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){if((l=this._lookBits(13))===o)return this.eof=!0,-1;if(l>>1==1)break;this._eatBits(1)}this._eatBits(12),this.encoding>0&&(this._eatBits(1),this.nextLine2D=!(1&l))}c[0]>0?this.outputBits=c[this.codingPos=0]:this.outputBits=c[this.codingPos=1],this.row++}if(this.outputBits>=8)i=1&this.codingPos?0:255,this.outputBits-=8,0===this.outputBits&&c[this.codingPos]r?(i<<=r,1&this.codingPos||(i|=255>>8-r),this.outputBits-=r,r=0):(i<<=this.outputBits,1&this.codingPos||(i|=255>>8-this.outputBits),r-=this.outputBits,this.outputBits=0,c[this.codingPos]0&&(i<<=r,r=0))}while(r)}return this.black&&(i^=255),i}},{key:"_addPixels",value:function(e,t){var r=this.codingLine,a=this.codingPos;e>r[a]&&(e>this.columns&&((0,n.info)("row is wrong length"),this.err=!0,e=this.columns),1&a^t&&++a,r[a]=e),this.codingPos=a}},{key:"_addPixelsNeg",value:function(e,t){var r=this.codingLine,a=this.codingPos;if(e>r[a])e>this.columns&&((0,n.info)("row is wrong length"),this.err=!0,e=this.columns),1&a^t&&++a,r[a]=e;else if(e0&&e=a){var c=r[s-a];if(c[0]===i)return this._eatBits(i),[!0,c[1],!0]}}return[!1,0,!1]}},{key:"_getTwoDimCode",value:function(){var e,t=0;if(this.eoblock){if(t=this._lookBits(7),(e=s[t])&&e[0]>0)return this._eatBits(e[0]),e[1]}else{var r=this._findTableCode(1,7,s);if(r[0]&&r[2])return r[1]}return(0,n.info)("Bad two dim code"),o}},{key:"_getWhiteCode",value:function(){var e,t=0;if(this.eoblock){if((t=this._lookBits(12))===o)return 1;if((e=t>>5==0?c[t]:u[t>>3])[0]>0)return this._eatBits(e[0]),e[1]}else{var r=this._findTableCode(1,9,u);if(r[0])return r[1];if((r=this._findTableCode(11,12,c))[0])return r[1]}return(0,n.info)("bad white code"),this._eatBits(1),1}},{key:"_getBlackCode",value:function(){var e,t;if(this.eoblock){if((e=this._lookBits(13))===o)return 1;if((t=e>>7==0?l[e]:e>>9==0&&e>>7!=0?f[(e>>1)-64]:h[e>>7])[0]>0)return this._eatBits(t[0]),t[1]}else{var r=this._findTableCode(2,6,h);if(r[0])return r[1];if((r=this._findTableCode(7,12,f,64))[0])return r[1];if((r=this._findTableCode(10,13,l))[0])return r[1]}return(0,n.info)("bad black code"),this._eatBits(1),1}},{key:"_lookBits",value:function(e){for(var t;this.inputBits>16-e;this.inputBuf=this.inputBuf<<8|t,this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}},{key:"_eatBits",value:function(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}])&&i(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.CCITTFaxDecoder=d},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.FlateStream=void 0;var a=r(148),i=r(2);function o(e,t){for(var r=0;r>e,this.codeSize=n-=e,t}},{key:"getCode",value:function(e){for(var t,r=this.str,n=e[0],a=e[1],o=this.codeSize,s=this.codeBuf;o>16,l=65535&c;if(u<1||o>u,this.codeSize=o-u,l}},{key:"generateHuffmanTable",value:function(e){var t,r=e.length,n=0;for(t=0;tn&&(n=e[t]);for(var a=1<>=1;for(t=l;t>=1)){var a,o;if(1===n)a=h,o=d;else{if(2!==n)throw new i.FormatError("Unknown block type in flate stream");var s,c=this.getBits(5)+257,p=this.getBits(5)+1,g=this.getBits(4)+4,v=new Uint8Array(u.length);for(s=0;s0;)S[s++]=w}a=this.generateHuffmanTable(S.subarray(0,c)),o=this.generateHuffmanTable(S.subarray(c,k))}for(var A=(e=this.buffer)?e.length:0,C=this.bufferLength;;){var F=this.getCode(a);if(F<256)C+1>=A&&(A=(e=this.ensureBuffer(C+1)).length),e[C++]=F;else{if(256===F)return void(this.bufferLength=C);var P=(F=l[F-=257])>>16;P>0&&(P=this.getBits(P)),t=(65535&F)+P,F=this.getCode(o),(P=(F=f[F])>>16)>0&&(P=this.getBits(P));var T=(65535&F)+P;C+t>=A&&(A=(e=this.ensureBuffer(C+t)).length);for(var I=0;I{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Jbig2Stream=void 0;var a=r(136),i=r(148),o=r(134),s=r(154),c=r(2);function u(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Jbig2Image=void 0;var a=r(2),i=r(135),o=r(155),s=r(151);function c(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=l(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function l(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>>0}var o=i(1),s=i(1)?i(1)?i(1)?i(1)?i(1)?i(32)+4436:i(12)+340:i(8)+84:i(6)+20:i(4)+4:i(2);return 0===o?s:s>0?-s:null}function k(e,t,r){for(var n=e.getContexts("IAID"),a=1,i=0;i=E&&C=j)for(U=U<<1&v,f=0;f=0&&P=0&&(T=R[F][P])&&(U|=T<=e?M<<=1:M=M<<1|S[E][j];for(l=0;l=w||j<0||j>=b?M<<=1:M=M<<1|n[E][j];var _=x.readBit(A,M);T[I]=_}}return S}function T(e,t,r,n,a,i,o,s,c,u,l,f,h,d,p,g,v,m,b){if(e&&t)throw new y("refinement with Huffman is not supported");var S,x,O=[];for(S=0;S1&&(j=e?b.readBits(m):w(F,"IAIT",C));var M=o*T+j,_=e?d.symbolIDTable.decode(b):k(F,C,c),L=t&&(e?b.readBit():w(F,"IARI",C)),R=s[_],N=R[0].length,D=R.length;if(L){var B=w(F,"IARDW",C),U=w(F,"IARDH",C);R=P(N+=B,D+=U,p,R,(B>>1)+w(F,"IARDX",C),(U>>1)+w(F,"IARDY",C),!1,g,v)}var $=M-(1&f?0:D-1),X=E-(2&f?N-1:0),H=void 0,q=void 0,G=void 0;if(u){for(H=0;H>5&7,u=[31&s],l=t+6;if(7===s){c=536870911&(0,i.readUint32)(e,l-1),l+=3;var f=c+7>>3;for(u[0]=e[l++];--f>0;)u.push(e[l++])}else if(5===s||6===s)throw new y("invalid referred-to flags");r.retainBits=u;var h=4;r.number<=256?h=1:r.number<=65536&&(h=2);var d,p,g=[];for(d=0;d>>24&255,w[3]=m.height>>16&255,w[4]=m.height>>8&255,w[5]=255&m.height,d=l,p=e.length;d>2&3,f.huffmanDWSelector=h>>4&3,f.bitmapSizeSelector=h>>6&1,f.aggregationInstancesSelector=h>>7&1,f.bitmapCodingContextUsed=!!(256&h),f.bitmapCodingContextRetained=!!(512&h),f.template=h>>10&3,f.refinementTemplate=h>>12&1,l+=2,!f.huffman){for(o=0===f.template?4:1,n=[],a=0;a>2&3,d.stripSize=1<>4&3,d.transposed=!!(64&p),d.combinationOperator=p>>7&3,d.defaultPixelValue=p>>9&1,d.dsOffset=p<<17>>27,d.refinementTemplate=p>>15&1,d.huffman){var g=(0,i.readUint16)(c,l);l+=2,d.huffmanFS=3&g,d.huffmanDS=g>>2&3,d.huffmanDT=g>>4&3,d.huffmanRefinementDW=g>>6&3,d.huffmanRefinementDH=g>>8&3,d.huffmanRefinementDX=g>>10&3,d.huffmanRefinementDY=g>>12&3,d.huffmanRefinementSizeSelector=!!(16384&g)}if(d.refinement&&!d.refinementTemplate){for(n=[],a=0;a<2;a++)n.push({x:(0,i.readInt8)(c,l),y:(0,i.readInt8)(c,l+1)}),l+=2;d.refinementAt=n}d.numberOfSymbolInstances=(0,i.readUint32)(c,l),l+=4,r=[d,s.referredTo,c,l,u];break;case 16:var v={},m=c[l++];v.mmr=!!(1&m),v.template=m>>1&3,v.patternWidth=c[l++],v.patternHeight=c[l++],v.maxPatternIndex=(0,i.readUint32)(c,l),l+=4,r=[v,s.number,c,l,u];break;case 22:case 23:var b={};b.info=j(c,l),l+=M;var w=c[l++];b.mmr=!!(1&w),b.template=w>>1&3,b.enableSkip=!!(8&w),b.combinationOperator=w>>4&7,b.defaultPixelValue=w>>7&1,b.gridWidth=(0,i.readUint32)(c,l),l+=4,b.gridHeight=(0,i.readUint32)(c,l),l+=4,b.gridOffsetX=4294967295&(0,i.readUint32)(c,l),l+=4,b.gridOffsetY=4294967295&(0,i.readUint32)(c,l),l+=4,b.gridVectorX=(0,i.readUint16)(c,l),l+=2,b.gridVectorY=(0,i.readUint16)(c,l),l+=2,r=[b,s.referredTo,c,l,u];break;case 38:case 39:var k={};k.info=j(c,l),l+=M;var S=c[l++];if(k.mmr=!!(1&S),k.template=S>>1&3,k.prediction=!!(8&S),!k.mmr){for(o=0===k.template?4:1,n=[],a=0;a>2&1,x.combinationOperator=O>>3&3,x.requiresBuffer=!!(32&O),x.combinationOperatorOverride=!!(64&O),r=[x];break;case 49:case 50:case 51:case 62:break;case 53:r=[s.number,c,l,u];break;default:throw new y("segment type ".concat(s.typeName,"(").concat(s.type,") is not implemented"))}var A="on"+s.typeName;A in t&&t[A].apply(t,r)}function L(e,t){for(var r=0,n=e.length;r>3,r=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&r.fill(255),this.buffer=r}},{key:"drawBitmap",value:function(e,t){var r,n,a,i,o=this.currentPageInfo,s=e.width,c=e.height,u=o.width+7>>3,l=o.combinationOperatorOverride?e.combinationOperator:o.combinationOperator,f=this.buffer,h=128>>(7&e.x),d=e.y*u+(e.x>>3);switch(l){case 0:for(r=0;r>=1)||(a=128,i++);d+=u}break;case 2:for(r=0;r>=1)||(a=128,i++);d+=u}break;default:throw new y("operator ".concat(l," is not supported"))}}},{key:"onImmediateGenericRegion",value:function(e,t,r,n){var a=e.info,i=new b(t,r,n),o=F(e.mmr,a.width,a.height,e.template,e.prediction,null,e.at,i);this.drawBitmap(a,o)}},{key:"onImmediateLosslessGenericRegion",value:function(){this.onImmediateGenericRegion.apply(this,arguments)}},{key:"onSymbolDictionary",value:function(e,t,r,n,a,o){var s,l;e.huffman&&(s=function(e,t,r){var n,a,i,o=0;switch(e.huffmanDHSelector){case 0:case 1:n=$(e.huffmanDHSelector+4);break;case 3:n=H(o,t,r),o++;break;default:throw new y("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:a=$(e.huffmanDWSelector+2);break;case 3:a=H(o,t,r),o++;break;default:throw new y("invalid Huffman DW selector")}return e.bitmapSizeSelector?(i=H(o,t,r),o++):i=$(1),{tableDeltaHeight:n,tableDeltaWidth:a,tableBitmapSize:i,tableAggregateInstances:e.aggregationInstancesSelector?H(o,t,r):$(1)}}(e,r,this.customTables),l=new X(n,a,o));var f=this.symbols;f||(this.symbols=f={});var h,d=[],p=u(r);try{for(p.s();!(h=p.n()).done;){var g=f[h.value];g&&d.push.apply(d,c(g))}}catch(e){p.e(e)}finally{p.f()}var v=new b(n,a,o);f[t]=function(e,t,r,n,a,o,s,c,u,l,f,h){if(e&&t)throw new y("symbol refinement with Huffman is not supported");var d,p,g=[],v=0,m=(0,i.log2)(r.length+n),b=f.decoder,S=f.contextCache;for(e&&(d=$(1),p=[],m=Math.max(m,1));g.length1)I=T(e,t,x,v,0,E,1,r.concat(g),m,0,0,1,0,o,u,l,f,0,h);else{var j=k(S,b,m),M=w(S,"IARDX",b),_=w(S,"IARDY",b);I=P(x,v,u,j=32){var f=void 0,h=void 0,d=void 0;switch(l){case 32:if(0===u)throw new y("no previous value in symbol ID table");h=a.readBits(2)+3,f=i[u-1].prefixLength;break;case 33:h=a.readBits(3)+3,f=0;break;case 34:h=a.readBits(7)+11,f=0;break;default:throw new y("invalid code length in symbol ID table")}for(d=0;d=0;v--)T=e?G(P,u,l,!0):F(!1,u,l,r,!1,null,C,g),B[v]=T;for(I=0;I=0;m--)M|=(j^=B[m][I][E])<>8,(L=f+I*p+E*d>>8)>=0&&L+x<=n&&R>=0&&R+O<=a)for(v=0;v=a))for(D=w[$],N=_[v],m=0;m=0&&U>1&7),f=1+(o>>4&7),h=[],d=s;do{n=u.readBits(l),a=u.readBits(f),h.push(new N([d,n,a,0])),d+=1<>r&1;if(r<=0)this.children[n]=new e(t);else{var a=this.children[n];a||(this.children[n]=a=new e(null)),a.buildTree(t,r-1)}}},{key:"decodeNode",value:function(e){if(this.isLeaf){if(this.isOOB)return null;var t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}var r=this.children[e.readBit()];if(!r)throw new y("invalid Huffman data");return r.decodeNode(e)}}]),e}(),B=function(){function e(t,r){p(this,e),r||this.assignPrefixCodes(t),this.rootNode=new D(null);for(var n=0,a=t.length;n0&&this.rootNode.buildTree(i,i.prefixLength-1)}}return d(e,[{key:"decode",value:function(e){return this.rootNode.decodeNode(e)}},{key:"assignPrefixCodes",value:function(e){for(var t=e.length,r=0,n=0;n=this.end)throw new y("end of data while reading bit");this.currentByte=this.data[this.position++],this.shift=7}var e=this.currentByte>>this.shift&1;return this.shift--,e}},{key:"readBits",value:function(e){var t,r=0;for(t=e-1;t>=0;t--)r|=this.readBit()<=this.end?-1:this.data[this.position++]}}]),e}();function H(e,t,r){for(var n=0,a=0,i=t.length;a>h&1,h--}if(n&&!u)for(var p=0;p<5&&-1!==o.readNextChar();p++);return c}var z=function(){function e(){p(this,e)}return d(e,[{key:"parseChunks",value:function(e){return function(e){for(var t=new R,r=0,n=e.length;r{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(e,t){for(var n=0;n>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}var t,r;return t=e,(r=[{key:"byteIn",value:function(){var e=this.data,t=this.bp;255===e[t]?e[t+1]>143?(this.clow+=65280,this.ct=8):(t++,this.clow+=e[t]<<9,this.ct=7,this.bp=t):(t++,this.clow+=t65535&&(this.chigh+=this.clow>>16,this.clow&=65535)}},{key:"readBit",value:function(e,t){var r,n=e[t]>>1,i=1&e[t],o=a[n],s=o.qe,c=this.a-s;if(this.chigh>15&1,this.clow=this.clow<<1&65535,this.ct--}while(0==(32768&c));return this.a=c,e[t]=n<<1|i,r}}])&&n(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.ArithmeticDecoder=i},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.JpegStream=void 0;var a=r(148),i=r(134),o=r(157),s=r(2);function c(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.JpegImage=void 0;var n=r(2),a=r(135);function i(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&!e[i-1];)i--;var o,s=[{children:[],index:0}],c=s[0];for(r=0;r0;)c=s.pop();for(c.index++,s.push(c);s.length<=r;)s.push(o={children:[],index:0}),c.children[c.index]=o.children,c=o;a++}r+19&&void 0!==arguments[9]&&arguments[9],d=r.mcusPerLine,p=r.progressive,b=t,w=0,k=0;function S(){if(k>0)return k--,w>>k&1;if(255===(w=e[t++])){var n=e[t++];if(n){if(220===n&&h){t+=2;var i=(0,a.readUint16)(e,t);if(t+=2,i>0&&i!==r.scanLines)throw new v("Found DNL marker (0xFFDC) while parsing scan data",i)}else if(217===n){if(h){var o=I*(8===r.precision?8:0);if(o>0&&Math.round(r.scanLines/o)>=5)throw new v("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect \`scanLines\` parameter",o)}throw new y("Found EOI marker (0xFFD9) while parsing scan data")}throw new g("unexpected marker ".concat((w<<8|n).toString(16)))}}return k=7,w>>>7}function x(e){for(var t=e;;){switch(s(t=t[S()])){case"number":return t;case"object":continue}throw new g("invalid huffman sequence")}}function O(e){for(var t=0;e>0;)t=t<<1|S(),e--;return t}function A(e){if(1===e)return 1===S()?1:-1;var t=O(e);return t>=1<0)F--;else for(var r=c,n=u;r<=n;){var a=x(e.huffmanTableAC),i=15&a,o=a>>4;if(0!==i){var s=m[r+=o];e.blockData[t+s]=A(i)*(1<>4,0==(r=15&n))o<15?(F=O(o)+(1<>4;if(0!==o){var c=m[a+=s];e.blockData[t+c]=A(o),a++}else{if(s<15)break;a+=16}}};var $,X,H,q,G=0;for(X=1===U?i[0].blocksPerLine*i[0].blocksPerColumn:d*r.mcusPerColumn;G<=X;){var z=o?Math.min(X-G,o):X;if(z>0){for(L=0;L0?"unexpected":"excessive";(0,n.warn)("decodeScan - ".concat(W," MCU data, current marker is: ").concat($.invalid)),t=$.offset}if(!($.marker>=65488&&$.marker<=65495))break;t+=2}return t-b}function I(e,t,r){var n,a,i,o,s,c,u,l,f,h,d,p,v,y,m,F,P,T=e.quantizationTable,I=e.blockData;if(!T)throw new g("missing required Quantization Table.");for(var E=0;E<64;E+=8)f=I[t+E],h=I[t+E+1],d=I[t+E+2],p=I[t+E+3],v=I[t+E+4],y=I[t+E+5],m=I[t+E+6],F=I[t+E+7],f*=T[E],0!=(h|d|p|v|y|m|F)?(h*=T[E+1],d*=T[E+2],p*=T[E+3],v*=T[E+4],y*=T[E+5],m*=T[E+6],F*=T[E+7],a=(n=(n=A*f+128>>8)+(a=A*v+128>>8)+1>>1)-a,P=(i=d)*O+(o=m)*x+128>>8,i=i*x-o*O+128>>8,u=(s=(s=C*(h-F)+128>>8)+(u=y<<4)+1>>1)-u,c=(l=(l=C*(h+F)+128>>8)+(c=p<<4)+1>>1)-c,o=(n=n+(o=P)+1>>1)-o,i=(a=a+i+1>>1)-i,P=s*S+l*k+2048>>12,s=s*k-l*S+2048>>12,l=P,P=c*w+u*b+2048>>12,c=c*b-u*w+2048>>12,u=P,r[E]=n+l,r[E+7]=n-l,r[E+1]=a+u,r[E+6]=a-u,r[E+2]=i+c,r[E+5]=i-c,r[E+3]=o+s,r[E+4]=o-s):(P=A*f+512>>10,r[E]=P,r[E+1]=P,r[E+2]=P,r[E+3]=P,r[E+4]=P,r[E+5]=P,r[E+6]=P,r[E+7]=P);for(var j=0;j<8;++j)f=r[j],0!=((h=r[j+8])|(d=r[j+16])|(p=r[j+24])|(v=r[j+32])|(y=r[j+40])|(m=r[j+48])|(F=r[j+56]))?(a=(n=4112+((n=A*f+2048>>12)+(a=A*v+2048>>12)+1>>1))-a,P=(i=d)*O+(o=m)*x+2048>>12,i=i*x-o*O+2048>>12,o=P,u=(s=(s=C*(h-F)+2048>>12)+(u=y)+1>>1)-u,c=(l=(l=C*(h+F)+2048>>12)+(c=p)+1>>1)-c,P=s*S+l*k+2048>>12,s=s*k-l*S+2048>>12,l=P,P=c*w+u*b+2048>>12,c=c*b-u*w+2048>>12,(f=(n=n+o+1>>1)+l)<16?f=0:f>=4080?f=255:f>>=4,(h=(a=a+i+1>>1)+(u=P))<16?h=0:h>=4080?h=255:h>>=4,(d=(i=a-i)+c)<16?d=0:d>=4080?d=255:d>>=4,(p=(o=n-o)+s)<16?p=0:p>=4080?p=255:p>>=4,(v=o-s)<16?v=0:v>=4080?v=255:v>>=4,(y=i-c)<16?y=0:y>=4080?y=255:y>>=4,(m=a-u)<16?m=0:m>=4080?m=255:m>>=4,(F=n-l)<16?F=0:F>=4080?F=255:F>>=4,I[t+j]=f,I[t+j+8]=h,I[t+j+16]=d,I[t+j+24]=p,I[t+j+32]=v,I[t+j+40]=y,I[t+j+48]=m,I[t+j+56]=F):(P=(P=A*f+8192>>14)<-2040?0:P>=2024?255:P+2056>>4,I[t+j]=P,I[t+j+8]=P,I[t+j+16]=P,I[t+j+24]=P,I[t+j+32]=P,I[t+j+40]=P,I[t+j+48]=P,I[t+j+56]=P)}function E(e,t){for(var r=t.blocksPerLine,n=t.blocksPerColumn,a=new Int16Array(64),i=0;i2&&void 0!==arguments[2]?arguments[2]:t,n=e.length-1,i=r=n)return null;var o=(0,a.readUint16)(e,t);if(o>=65472&&o<=65534)return{invalid:null,marker:o,offset:t};for(var s=(0,a.readUint16)(e,i);!(s>=65472&&s<=65534);){if(++i>=n)return null;s=(0,a.readUint16)(e,i)}return{invalid:o.toString(16),marker:s,offset:i}}var M=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.decodeTransform,n=void 0===r?null:r,a=t.colorTransform,i=void 0===a?-1:a;l(this,e),this._decodeTransform=n,this._colorTransform=i}return u(e,[{key:"parse",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).dnlScanLines,r=void 0===t?null:t;function o(){var t=(0,a.readUint16)(e,l),r=(l+=2)+t-2,i=j(e,r,l);i&&i.invalid&&((0,n.warn)("readDataBlock - incorrect length, current marker is: "+i.invalid),r=i.offset);var o=e.subarray(l,r);return l+=o.length,o}function s(e){var t,r=Math.ceil(e.samplesPerLine/8/e.maxH),n=Math.ceil(e.scanLines/8/e.maxV),a=i(e.components);try{for(a.s();!(t=a.n()).done;){var o=t.value,s=Math.ceil(Math.ceil(e.samplesPerLine/8)*o.h/e.maxH),c=Math.ceil(Math.ceil(e.scanLines/8)*o.v/e.maxV),u=r*o.h,l=n*o.v*64*(u+1);o.blockData=new Int16Array(l),o.blocksPerLine=s,o.blocksPerColumn=c}}catch(e){a.e(e)}finally{a.f()}e.mcusPerLine=r,e.mcusPerColumn=n}var c,u,l=0,f=null,h=null,d=0,p=[],b=[],w=[],k=(0,a.readUint16)(e,l);if(l+=2,65496!==k)throw new g("SOI not found");k=(0,a.readUint16)(e,l),l+=2;e:for(;65497!==k;){var S=void 0,x=void 0,O=void 0;switch(k){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var A=o();65504===k&&74===A[0]&&70===A[1]&&73===A[2]&&70===A[3]&&0===A[4]&&(f={version:{major:A[5],minor:A[6]},densityUnits:A[7],xDensity:A[8]<<8|A[9],yDensity:A[10]<<8|A[11],thumbWidth:A[12],thumbHeight:A[13],thumbData:A.subarray(14,14+3*A[12]*A[13])}),65518===k&&65===A[0]&&100===A[1]&&111===A[2]&&98===A[3]&&101===A[4]&&(h={version:A[5]<<8|A[6],flags0:A[7]<<8|A[8],flags1:A[9]<<8|A[10],transformCode:A[11]});break;case 65499:for(var C=(0,a.readUint16)(e,l)+(l+=2)-2;l>4==0)for(x=0;x<64;x++)I[m[x]]=e[l++];else{if(P>>4!=1)throw new g("DQT - invalid table spec");for(x=0;x<64;x++)I[m[x]]=(0,a.readUint16)(e,l),l+=2}p[15&P]=I}break;case 65472:case 65473:case 65474:if(c)throw new g("Only single frame JPEGs supported");l+=2,(c={}).extended=65473===k,c.progressive=65474===k,c.precision=e[l++];var M=(0,a.readUint16)(e,l);l+=2,c.scanLines=r||M,c.samplesPerLine=(0,a.readUint16)(e,l),l+=2,c.components=[],c.componentIds={};var _=e[l++],L=0,R=0;for(S=0;S<_;S++){var N=e[l],D=e[l+1]>>4,B=15&e[l+1];L>4==0?w:b)[15&X]=F(H,G)}break;case 65501:l+=2,u=(0,a.readUint16)(e,l),l+=2;break;case 65498:var z=1==++d&&!r;l+=2;var W=e[l++],V=[];for(S=0;S>4],J.huffmanTableAC=b[15&Z],V.push(J)}var Q=e[l++],ee=e[l++],te=e[l++];try{var re=T(e,l,c,V,u,Q,ee,te>>4,15&te,z);l+=re}catch(t){if(t instanceof v)return(0,n.warn)("".concat(t.message," -- attempting to re-parse the JPEG image.")),this.parse(e,{dnlScanLines:t.scanLines});if(t instanceof y){(0,n.warn)("".concat(t.message," -- ignoring the rest of the image data."));break e}throw t}break;case 65500:l+=4;break;case 65535:255!==e[l]&&l--;break;default:var ne=j(e,l-2,l-3);if(ne&&ne.invalid){(0,n.warn)("JpegImage.parse - unexpected data, current marker is: "+ne.invalid),l=ne.offset;break}if(!ne||l>=e.length-1){(0,n.warn)("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new g("JpegImage.parse - unknown marker: "+k.toString(16))}k=(0,a.readUint16)(e,l),l+=2}this.width=c.samplesPerLine,this.height=c.scanLines,this.jfif=f,this.adobe=h,this.components=[];var ae,ie=i(c.components);try{for(ie.s();!(ae=ie.n()).done;){var oe=ae.value,se=p[oe.quantizationId];se&&(oe.quantizationTable=se),this.components.push({index:oe.index,output:E(0,oe),scaleX:oe.h/c.maxH,scaleY:oe.v/c.maxV,blocksPerLine:oe.blocksPerLine,blocksPerColumn:oe.blocksPerColumn})}}catch(e){ie.e(e)}finally{ie.f()}this.numComponents=this.components.length}},{key:"_getLinearizedBlockData",value:function(e,t){var r,n,a,i,o,s,c,u,l,f,h,d,p=arguments.length>2&&void 0!==arguments[2]&&arguments[2],g=this.width/e,v=this.height/t,y=0,m=this.components.length,b=e*t*m,w=new Uint8ClampedArray(b),k=new Uint32Array(e),S=4294967288;for(c=0;c>8)+x[l+1];return w}},{key:"_isColorConversionNeeded",get:function(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}},{key:"_convertYccToRgb",value:function(e){for(var t,r,n,a=0,i=e.length;a4)throw new g("Unsupported color mode");var c=this._getLinearizedBlockData(t,r,s);if(1===this.numComponents&&a){var u,l=new Uint8ClampedArray(3*c.length),f=0,h=i(c);try{for(h.s();!(u=h.n()).done;){var d=u.value;l[f++]=d,l[f++]=d,l[f++]=d}}catch(e){h.e(e)}finally{h.f()}return l}if(3===this.numComponents&&this._isColorConversionNeeded)return this._convertYccToRgb(c);if(4===this.numComponents){if(this._isColorConversionNeeded)return a?this._convertYcckToRgb(c):this._convertYcckToCmyk(c);if(a)return this._convertCmykToRgb(c)}return c}}]),e}();t.JpegImage=M},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.JpxStream=void 0;var a=r(148),i=r(159),o=r(2);function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.JpxImage=void 0;var a=r(2),i=r(135),o=r(155);function s(e,t){for(var r=0;r>24&255,s>>16&255,s>>8&255,255&s);(0,a.warn)("Unsupported header type ".concat(s," (").concat(h,")."))}u&&(r+=c)}else this.parseCodestream(e,0,e.length)}},{key:"parseImageProperties",value:function(e){for(var t=e.getByte();t>=0;)if(65361==(t<<8|(t=e.getByte()))){e.skip(4);var r=e.getInt32()>>>0,n=e.getInt32()>>>0,a=e.getInt32()>>>0,i=e.getInt32()>>>0;e.skip(16);var o=e.getUint16();return this.width=r-a,this.height=n-i,this.componentsCount=o,void(this.bitsPerComponent=8)}throw new p("No size marker found in JPX stream")}},{key:"parseCodestream",value:function(e,t,r){var n={},o=!1;try{for(var s=t;s+1>5,h=[];l>3,A.mu=0):(A.epsilon=e[l]>>3,A.mu=(7&e[l])<<8|e[l+1],l+=2),h.push(A)}O.SPqcds=h,n.mainHeader?n.QCD=O:(n.currentTile.QCD=O,n.currentTile.QCC=[]);break;case 65373:u=(0,i.readUint16)(e,s);var C={};l=s+2;var F=void 0;switch(n.SIZ.Csiz<257?F=e[l++]:(F=(0,i.readUint16)(e,l),l+=2),31&(f=e[l++])){case 0:d=8,g=!0;break;case 1:d=16,g=!1;break;case 2:d=16,g=!0;break;default:throw new Error("Invalid SQcd value "+f)}for(C.noQuantization=8===d,C.scalarExpounded=g,C.guardBits=f>>5,h=[];l>3,P.mu=0):(P.epsilon=e[l]>>3,P.mu=(7&e[l])<<8|e[l+1],l+=2),h.push(P)}C.SPqcds=h,n.mainHeader?n.QCC[F]=C:n.currentTile.QCC[F]=C;break;case 65362:u=(0,i.readUint16)(e,s);var T={};l=s+2;var j=e[l++];T.entropyCoderWithCustomPrecincts=!!(1&j),T.sopMarkerUsed=!!(2&j),T.ephMarkerUsed=!!(4&j),T.progressionOrder=e[l++],T.layersCount=(0,i.readUint16)(e,l),l+=2,T.multipleComponentTransform=e[l++],T.decompositionLevelsCount=e[l++],T.xcb=2+(15&e[l++]),T.ycb=2+(15&e[l++]);var L=e[l++];if(T.selectiveArithmeticCodingBypass=!!(1&L),T.resetContextProbabilities=!!(2&L),T.terminationOnEachCodingPass=!!(4&L),T.verticallyStripe=!!(8&L),T.predictableTermination=!!(16&L),T.segmentationSymbolUsed=!!(32&L),T.reversibleTransformation=e[l++],T.entropyCoderWithCustomPrecincts){for(var R=[];l>4})}T.precinctsSizes=R}var D=[];T.selectiveArithmeticCodingBypass&&D.push("selectiveArithmeticCodingBypass"),T.terminationOnEachCodingPass&&D.push("terminationOnEachCodingPass"),T.verticallyStripe&&D.push("verticallyStripe"),T.predictableTermination&&D.push("predictableTermination"),D.length>0&&(o=!0,(0,a.warn)("JPX: Unsupported COD options (".concat(D.join(", "),")."))),n.mainHeader?n.COD=T:(n.currentTile.COD=T,n.currentTile.COC=[]);break;case 65424:u=(0,i.readUint16)(e,s),(v={}).index=(0,i.readUint16)(e,s+2),v.length=(0,i.readUint32)(e,s+4),v.dataEnd=v.length+s-2,v.partIndex=e[s+8],v.partsCount=e[s+9],n.mainHeader=!1,0===v.partIndex&&(v.COD=n.COD,v.COC=n.COC.slice(0),v.QCD=n.QCD,v.QCC=n.QCC.slice(0)),n.currentTile=v;break;case 65427:0===(v=n.currentTile).partIndex&&(_(n,v.index),I(n)),E(n,e,s,u=v.dataEnd-s);break;case 65363:(0,a.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented.");case 65365:case 65367:case 65368:case 65380:u=(0,i.readUint16)(e,s);break;default:throw new Error("Unknown codestream code: "+c.toString(16))}s+=u}}catch(e){if(o||this.failOnCorruptedImage)throw new p(e.message);(0,a.warn)('JPX: Trying to recover from: "'.concat(e.message,'".'))}this.tiles=function(e){for(var t=e.SIZ,r=e.components,n=t.Csiz,a=[],i=0,o=e.tiles.length;i>2);f[g++]=P+w>>d,f[g++]=P>>d,f[g++]=P+b>>d}else for(v=0;v>d,f[g++]=m-.34413*b-.71414*w>>d,f[g++]=m+1.772*b>>d;if(k)for(v=0,g=3;v>d}else for(var T=0;T>d,g+=n}a.push(h)}return a}(n),this.width=n.SIZ.Xsiz-n.SIZ.XOsiz,this.height=n.SIZ.Ysiz-n.SIZ.YOsiz,this.componentsCount=n.SIZ.Csiz}}]),e}();function y(e,t){e.x0=Math.ceil(t.XOsiz/e.XRsiz),e.x1=Math.ceil(t.Xsiz/e.XRsiz),e.y0=Math.ceil(t.YOsiz/e.YRsiz),e.y1=Math.ceil(t.Ysiz/e.YRsiz),e.width=e.x1-e.x0,e.height=e.y1-e.y0}function m(e,t){for(var r,n=e.SIZ,a=[],i=Math.ceil((n.Xsiz-n.XTOsiz)/n.XTsiz),o=Math.ceil((n.Ysiz-n.YTOsiz)/n.YTsiz),s=0;s0?Math.min(n.xcb,a.PPx-1):Math.min(n.xcb,a.PPx),a.ycb_=r>0?Math.min(n.ycb,a.PPy-1):Math.min(n.ycb,a.PPy),a}function w(e,t,r){var n=1<t.trx0?Math.ceil(t.trx1/n)-Math.floor(t.trx0/n):0,u=t.try1>t.try0?Math.ceil(t.try1/a)-Math.floor(t.try0/a):0,l=c*u;t.precinctParameters={precinctWidth:n,precinctHeight:a,numprecinctswide:c,numprecinctshigh:u,numprecincts:l,precinctWidthInSubband:o,precinctHeightInSubband:s}}function k(e,t,r){var n,a,i,o,s=r.xcb_,c=r.ycb_,u=1<>s,h=t.tby0>>c,d=t.tbx1+u-1>>s,p=t.tby1+l-1>>c,g=t.resolution.precinctParameters,v=[],y=[];for(a=h;am.cbxMax&&(m.cbxMax=n),am.cbyMax&&(m.cbyMax=a)):y[o]=m={cbxMin:n,cbyMin:a,cbxMax:n,cbyMax:a},i.precinct=m}t.codeblockParameters={codeblockWidth:s,codeblockHeight:c,numcodeblockwide:d-f+1,numcodeblockhigh:p-h+1},t.codeblocks=v,t.precincts=y}function S(e,t,r){for(var n=[],a=e.subbands,i=0,o=a.length;ie.codingStyleParameters.decompositionLevelsCount)){for(var t=e.resolutions[u],r=t.precinctParameters.numprecincts;fe.codingStyleParameters.decompositionLevelsCount)){for(var t=e.resolutions[c],r=t.precinctParameters.numprecincts;fe.codingStyleParameters.decompositionLevelsCount)){var i=e.resolutions[r],o=i.precinctParameters.numprecincts;if(!(a>=o)){for(;t=0;--v){var y=c.resolutions[v],m=g*y.precinctParameters.precinctWidth,b=g*y.precinctParameters.precinctHeight;f=Math.min(f,m),h=Math.min(h,b),d=Math.max(d,y.precinctParameters.numprecinctswide),p=Math.max(p,y.precinctParameters.numprecinctshigh),l[v]={width:m,height:b},g<<=1}r=Math.min(r,f),n=Math.min(n,h),a=Math.max(a,d),i=Math.max(i,p),o[s]={resolutions:l,minWidth:f,minHeight:h,maxNumWide:d,maxNumHigh:p}}return{components:o,minWidth:r,minHeight:n,maxNumWide:a,maxNumHigh:i}}function I(e){for(var t=e.SIZ,r=e.currentTile.index,n=e.tiles[r],a=t.Csiz,i=0;i>>(s-=e)&(1<0;){var $=S.shift();void 0===(x=$.codeblock).data&&(x.data=[]),x.data.push({data:t,start:r+o,end:r+o+$.dataLength,codingpasses:$.codingpasses}),o+=$.dataLength}}}return o}function j(e,t,r,n,a,i,s,c,u){for(var l=n.tbx0,f=n.tby0,h=n.tbx1-n.tbx0,d=n.codeblocks,p="H"===n.type.charAt(0)?1:0,g="H"===n.type.charAt(1)?t:0,v=0,y=d.length;v=i?B:B*(1<0?1-m:0));var F=b.subbands[x],P=g[F.type];j(S,w,0,F,d?1:Math.pow(2,h+P-C)*(1+A/2048),u+C-1,d,l,f)}v.push({width:w,height:k,items:S})}var T=p.calculate(v,n.tcx0,n.tcy0);return{left:n.tcx0,top:n.tcy0,width:T.width,height:T.height,items:T.items}}function _(e,t){for(var r=e.SIZ.Csiz,n=e.tiles[t],a=0;a>=1,t>>=1,n++}n--,(r=this.levels[n]).items[r.index]=a,this.currentLevel=n,delete this.value}},{key:"incrementValue",value:function(){var e=this.levels[this.currentLevel];e.items[e.index]++}},{key:"nextLevel",value:function(){var e=this.currentLevel,t=this.levels[e],r=t.items[t.index];return--e<0?(this.value=r,!1):(this.currentLevel=e,(t=this.levels[e]).items[t.index]=r,!0)}}]),e}(),U=function(){function e(t,r,n){u(this,e);var a=(0,i.log2)(Math.max(t,r))+1;this.levels=[];for(var o=0;or)return this.currentLevel=n,this.propagateValues(),!1;e>>=1,t>>=1,n++}return this.currentLevel=n-1,!0}},{key:"incrementValue",value:function(e){var t=this.levels[this.currentLevel];t.items[t.index]=e+1,this.propagateValues()}},{key:"propagateValues",value:function(){for(var e=this.currentLevel,t=this.levels[e],r=t.items[t.index];--e>=0;)(t=this.levels[e]).items[t.index]=r}},{key:"nextLevel",value:function(){var e=this.currentLevel,t=this.levels[e],r=t.items[t.index];return t.items[t.index]=255,!(--e<0||(this.currentLevel=e,(t=this.levels[e]).items[t.index]=r,0))}}]),e}(),$=(L=17,R=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),N=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),D=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]),function(){function e(t,r,n,a,i){var o;u(this,e),this.width=t,this.height=r,o="HH"===n?D:"HL"===n?N:R,this.contextLabelTable=o;var s,c=t*r;this.neighborsSignificance=new Uint8Array(c),this.coefficentsSign=new Uint8Array(c),s=i>14?new Uint32Array(c):i>6?new Uint16Array(c):new Uint8Array(c),this.coefficentsMagnitude=s,this.processingFlags=new Uint8Array(c);var l=new Uint8Array(c);if(0!==a)for(var f=0;f0,c=t+10&&(n=r-i,s&&(a[n-1]+=16),c&&(a[n+1]+=16),a[n]+=4),e+1=r)break;if(o[h]&=-2,!n[h]&&i[h]){var g=c[i[h]];if(e.readBit(s,g)){var v=this.decodeSignBit(p,f,h);a[h]=v,n[h]=1,this.setNeighborsSignificance(p,f,h),o[h]|=2}u[h]++,o[h]|=1}}}},{key:"decodeSignBit",value:function(e,t,r){var n,a,i,o,s,c,u=this.width,l=this.height,f=this.coefficentsMagnitude,h=this.coefficentsSign;o=t>0&&0!==f[r-1],t+10&&0!==f[r-u],e+1=0?(s=9+n,c=this.decoder.readBit(this.contexts,s)):(s=9-n,c=1^this.decoder.readBit(this.contexts,s)),c}},{key:"runMagnitudeRefinementPass",value:function(){for(var e,t=this.decoder,r=this.width,n=this.height,a=this.coefficentsMagnitude,i=this.neighborsSignificance,o=this.contexts,s=this.bitsDecoded,c=this.processingFlags,u=r*n,l=4*r,f=0;f>1,c=-1.586134342059924,u=-.052980118572961,l=.882911075530934,f=.443506852043971,h=1.230174104914001;for(n=(t|=0)-3,a=s+4;a--;n+=2)e[n]*=.8128930661159609;for(i=f*e[(n=t-2)-1],a=s+3;a--&&(o=f*e[n+1],e[n]=h*e[n]-i-o,a--);n+=2)i=f*e[(n+=2)+1],e[n]=h*e[n]-i-o;for(i=l*e[(n=t-1)-1],a=s+2;a--&&(o=l*e[n+1],e[n]-=i+o,a--);n+=2)i=l*e[(n+=2)+1],e[n]-=i+o;for(i=u*e[(n=t)-1],a=s+1;a--&&(o=u*e[n+1],e[n]-=i+o,a--);n+=2)i=u*e[(n+=2)+1],e[n]-=i+o;if(0!==s)for(i=c*e[(n=t+1)-1],a=s;a--&&(o=c*e[n+1],e[n]-=i+o,a--);n+=2)i=c*e[(n+=2)+1],e[n]-=i+o}}]),r}(X),q=function(e){l(r,e);var t=h(r);function r(){return u(this,r),t.apply(this,arguments)}return c(r,[{key:"filter",value:function(e,t,r){var n,a,i=r>>1;for(n=t|=0,a=i+1;a--;n+=2)e[n]-=e[n-1]+e[n+1]+2>>2;for(n=t+1,a=i;a--;n+=2)e[n]+=e[n-1]+e[n+1]>>1}}]),r}(X)},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){for(var r=0;r>>t&(1<0;if(y<256)h[0]=y,d=1;else{if(!(y>=258)){if(256===y){l=9,o=258,d=0;continue}this.eof=!0,delete this.lzwState;break}if(y=0;t--)h[t]=s[r],r=u[r];else h[d++]=h[0]}if(m&&(u[o]=f,c[o]=c[f]+1,s[o]=h[0],l=++o+i&o+i-1?l:0|Math.min(Math.log(o+i)/.6931471805599453+1,12)),f=y,n<(p+=d)){do{n+=512}while(n{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.PredictorStream=void 0;var a=r(148),i=r(134),o=r(2);function s(e,t){for(var r=0;r15))throw new o.FormatError("Unsupported predictor: ".concat(a));n.readBlock=2===a?n.readBlockTiff:n.readBlockPng,n.str=e,n.dict=e.dict;var s=n.colors=r.get("Colors")||1,c=n.bits=r.get("BPC","BitsPerComponent")||8,f=n.columns=r.get("Columns")||1;return n.pixBytes=s*c+7>>3,n.rowBytes=f*s*c+7>>3,u(n,l(n))}return t=d,(r=[{key:"readBlockTiff",value:function(){var e=this.rowBytes,t=this.bufferLength,r=this.ensureBuffer(t+e),n=this.bits,a=this.colors,i=this.str.getBytes(e);if(this.eof=!i.length,!this.eof){var o,s=0,c=0,u=0,l=0,f=t;if(1===n&&1===a)for(o=0;o>1,h^=h>>2,s=(1&(h^=h>>4))<<7,r[f++]=h}else if(8===n){for(o=0;o>8&255,r[f++]=255&p}}else{var g=new Uint8Array(a+1),v=(1<>u-n)&v,u-=n,c=c<=8&&(r[m++]=c>>l-8&255,l-=8);l>0&&(r[m++]=(c<<8-l)+(s&(1<<8-l)-1))}this.bufferLength+=e}}},{key:"readBlockPng",value:function(){var e=this.rowBytes,t=this.pixBytes,r=this.str.getByte(),n=this.str.getBytes(e);if(this.eof=!n.length,!this.eof){var a=this.bufferLength,i=this.ensureBuffer(a+e),s=i.subarray(a-e,a);0===s.length&&(s=new Uint8Array(e));var c,u,l,f=a;switch(r){case 0:for(c=0;c>1)+n[c];for(;c>1)+n[c]&255,f++;break;case 4:for(c=0;c{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){for(var r=0;r0){var a=this.str.getBytes(n);t.set(a,r),r+=n}}else{n=257-n;var i=e[1];t=this.ensureBuffer(r+n+1);for(var o=0;o{Object.defineProperty(t,"__esModule",{value:!0}),t.Font=t.ErrorFont=void 0;var n=r(2),a=r(164),i=r(167),o=r(169),s=r(168),c=r(166),u=r(170),l=r(171),f=r(172),h=r(173),d=r(174),p=r(175),g=r(145),v=r(176),y=r(135),m=r(139),b=r(177);function w(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||S(e,t)||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 k(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=S(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function S(e,t){if(e){if("string"==typeof e)return x(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?x(e,t):void 0}}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&e.toUnicode.amend(t)}}var _=function(){function e(t,r,n,a,i,o,s,c,u){A(this,e),this.originalCharCode=t,this.fontChar=r,this.unicode=n,this.accent=a,this.width=i,this.vmetric=o,this.operatorListId=s,this.isSpace=c,this.isInFont=u}return F(e,[{key:"category",get:function(){return(0,n.shadow)(this,"category",(0,o.getCharUnicodeCategory)(this.unicode),!0)}},{key:"normalizedUnicode",get:function(){return(0,n.shadow)(this,"normalizedUnicode",(0,o.reverseIfRtl)(e._NormalizedUnicodes[this.unicode]||this.unicode),!0)}}],[{key:"_NormalizedUnicodes",get:function(){return(0,n.shadow)(this,"_NormalizedUnicodes",(0,o.getNormalizedUnicodes)())}}]),e}();function L(e,t){return(e<<8)+t}function R(e,t,r){e[t+1]=r,e[t]=r>>>8}function N(e,t){var r=(e<<8)+t;return 32768&r?r-65536:r}function D(e){return String.fromCharCode(e>>8&255,255&e)}function B(e){return e>32767?e=32767:e<-32768&&(e=-32768),String.fromCharCode(e>>8&255,255&e)}function U(e){var t=e.peekBytes(4);return"ttcf"===(0,n.bytesToString)(t)}function $(e,t){for(var r in t)e[+r]=t[r]}function X(e,t,r){for(var n,a=[],i=0,s=e.length;i2&&void 0!==arguments[2]&&arguments[2];switch(t.length){case 1:return t.charCodeAt(0);case 2:return t.charCodeAt(0)<<8|t.charCodeAt(1)}var a="Unsupported CID string (charCode ".concat(e,'): "').concat(t,'".');if(r)throw new n.FormatError(a);return(0,n.warn)(a),t}function q(e,t,r,a){var i=Object.create(null),o=new Map,s=[],c=new Set,u=0,l=P[u][0],f=l,h=P[u][1];for(var d in e){var p=e[d|=0];if(t(p)){if(f>h){if(++u>=P.length){(0,n.warn)("Ran out of space in font private use area.");break}f=P[u][0],h=P[u][1]}var g=f++;0===p&&(p=r);var v=a.get(d);"string"==typeof v&&(v=v.codePointAt(0)),v&&v=r||n.push({fontCharCode:0|a,glyphId:e[a]});if(t){var i,o=k(t);try{for(o.s();!(i=o.n()).done;){var s=w(i.value,2),c=s[0],u=s[1];u>=r||n.push({fontCharCode:c,glyphId:u})}}catch(e){o.e(e)}finally{o.f()}}0===n.length&&n.push({fontCharCode:0,glyphId:0}),n.sort((function(e,t){return e.fontCharCode-t.fontCharCode}));for(var l=[],f=n.length,h=0;h65535?2:1,l="\\0\\0"+D(u)+"\\0\\0"+(0,n.string32)(4+8*u);for(a=c.length-1;a>=0&&!(c[a][0]<=65535);--a);var f=a+1;c[a][0]<65535&&65535===c[a][1]&&(c[a][1]=65534);var h,d,p,g,y=c[a][1]<65535?1:0,m=f+y,b=v.OpenTypeFileBuilder.getSearchParams(m,2),S="",x="",O="",A="",C="",F=0;for(a=0,i=f;a0&&(x+="ÿÿ",S+="ÿÿ",O+="\\0",A+="\\0\\0");var I="\\0\\0"+D(2*m)+D(b.range)+D(b.entry)+D(b.rangeShift)+x+"\\0\\0"+S+O+A+C,E="",j="";if(u>1){for(l+="\\0\\0\\n"+(0,n.string32)(4+8*u+4+I.length),E="",a=0,i=c.length;a(f|=0)||!u)&&(u=f),l 123 are reserved for internal usage");c|=1<65535&&(l=65535)}else u=0,l=255;var d=e.bbox||[0,0,0,0],p=r.unitsPerEm||1/(e.fontMatrix||n.FONT_IDENTITY_MATRIX)[0],g=e.ascentScaled?1:p/T,v=r.ascent||Math.round(g*(e.ascent||d[3])),y=r.descent||Math.round(g*(e.descent||d[1]));y>0&&e.descent>0&&d[1]<0&&(y=-y);var m=r.yMax||v,b=-r.yMin||-y;return"\\0$ô\\0\\0\\0Š»\\0\\0\\0ŒŠ»\\0\\0ß\\x001\\0\\0\\0\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+(0,n.string32)(a)+(0,n.string32)(i)+(0,n.string32)(s)+(0,n.string32)(c)+"*21*"+D(e.italicAngle?1:0)+D(u||e.firstChar)+D(l||e.lastChar)+D(v)+D(y)+"\\0d"+D(m)+D(b)+"\\0\\0\\0\\0\\0\\0\\0\\0"+D(e.xHeight)+D(e.capHeight)+D(0)+D(u||e.firstChar)+"\\0"}function W(e){var t=Math.floor(e.italicAngle*Math.pow(2,16));return"\\0\\0\\0"+(0,n.string32)(t)+"\\0\\0\\0\\0"+(0,n.string32)(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"}function V(e){return e.replace(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function Y(e,t){t||(t=[[],[]]);var r,n,a,i,o,s=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||V(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],c=[];for(r=0,n=s.length;r=1&&t[3]>=1&&t[3]<=4}(e)?s?(r="CIDFontType0",a="CIDFontType0C"):(r="MMType1"===i?"MMType1":"Type1",a="Type1C"):((0,n.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."),r=i,a=o),[r,a]}(r,a),2);d=m[0],p=m[1],d===this.type&&p===this.subtype||(0,n.info)("Inconsistent font file Type/SubType, expected: "+"".concat(this.type,"/").concat(this.subtype," but found: ").concat(d,"/").concat(p,"."));try{switch(d){case"MMType1":(0,n.info)("MMType1 font ("+t+"), falling back to Type1.");case"Type1":case"CIDFontType0":this.mimetype="font/opentype";var S="Type1C"===p||"CIDFontType0C"===p?new f.CFFFont(r,a):new b.Type1Font(t,r,a);j(a),v=this.convert(t,S,a);break;case"OpenType":case"TrueType":case"CIDFontType2":this.mimetype="font/opentype",v=this.checkAndRepair(t,r,a),this.isOpenType&&(j(a),d="OpenType");break;default:throw new n.FormatError("Font ".concat(d," is not supported"))}}catch(e){return(0,n.warn)(e),void this.fallbackToSystemFont(a)}M(a),this.data=v,this.fontType=(0,i.getFontType)(d,p,a.isStandardFont),this.fontMatrix=a.fontMatrix,this.widths=a.widths,this.defaultWidth=a.defaultWidth,this.toUnicode=a.toUnicode,this.seacMap=a.seacMap}else{for(var x=0;x<256;x++)this.toFontChar[x]=this.differences[x]||a.defaultEncoding[x];this.fontType=n.FontType.TYPE3}}return F(e,[{key:"renderer",get:function(){var e=h.FontRendererFactory.create(this,i.SEAC_ANALYSIS_ENABLED);return(0,n.shadow)(this,"renderer",e)}},{key:"exportData",value:function(){var e,t,r,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?[].concat(I,E):I,a=Object.create(null),i=k(n);try{for(i.s();!(r=i.n()).done;)void 0!==(t=this[e=r.value])&&(a[e]=t)}catch(e){i.e(e)}finally{i.f()}return a}},{key:"fallbackToSystemFont",value:function(e){var t=this;this.missingFile=!0;var r=this.name,a=this.type,f=this.subtype,h=(0,i.normalizeFontName)(r),p=(0,u.getStdFontMap)(),g=(0,u.getNonStdFontMap)(),v=!!p[h],y=!(!g[h]||!p[g[h]]);h=p[h]||g[h]||h;var m=(0,d.getFontBasicMetrics)()[h];m&&(isNaN(this.ascent)&&(this.ascent=m.ascent/T),isNaN(this.descent)&&(this.descent=m.descent/T),isNaN(this.capHeight)&&(this.capHeight=m.capHeight/T)),this.bold=/bold/gi.test(h),this.italic=/oblique|italic/gi.test(h),this.black=/Black/g.test(r);var b=/Narrow/g.test(r);if(this.remeasure=(!v||b)&&Object.keys(this.widths).length>0,(v||y)&&"CIDFontType2"===a&&this.cidEncoding.startsWith("Identity-")){var w=e.cidToGidMap,k=[];if($(k,(0,u.getGlyphMapForStandardFonts)()),/Arial-?Black/i.test(r)?$(k,(0,u.getSupplementalGlyphMapForArialBlack)()):/Calibri/i.test(r)&&$(k,(0,u.getSupplementalGlyphMapForCalibri)()),w){for(var S in k){var x=k[S];void 0!==w[x]&&(k[+S]=w[x])}w.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof l.IdentityToUnicodeMap&&this.toUnicode.forEach((function(e,t){var r=k[e];void 0===w[r]&&(k[+e]=t)}))}this.toUnicode instanceof l.IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){k[+e]=t})),this.toFontChar=k,this.toUnicode=new l.ToUnicodeMap(k)}else if(/Symbol/i.test(h))this.toFontChar=X(c.SymbolSetEncoding,(0,s.getGlyphsUnicode)(),this.differences);else if(/Dingbats/i.test(h))/Wingdings/i.test(r)&&(0,n.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats."),this.toFontChar=X(c.ZapfDingbatsEncoding,(0,s.getDingbatsGlyphsUnicode)(),this.differences);else if(v){var O=X(this.defaultEncoding,(0,s.getGlyphsUnicode)(),this.differences);"CIDFontType2"!==a||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof l.IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){O[+e]=t})),this.toFontChar=O}else{var A=(0,s.getGlyphsUnicode)(),C=[];this.toUnicode.forEach((function(e,r){if(!t.composite){var n=t.differences[e]||t.defaultEncoding[e],a=(0,o.getUnicodeForGlyph)(n,A);-1!==a&&(r=a)}C[+e]=r})),this.composite&&this.toUnicode instanceof l.IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(r)&&$(C,(0,u.getGlyphMapForStandardFonts)()),this.toFontChar=C}M(e),this.loadedName=h.split("-")[0],this.fontType=(0,i.getFontType)(a,f,e.isStandardFont)}},{key:"checkAndRepair",value:function(e,t,r){var o=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function u(e,t){var r=Object.create(null);r["OS/2"]=null,r.cmap=null,r.head=null,r.hhea=null,r.hmtx=null,r.maxp=null,r.name=null,r.post=null;for(var n=0;n>>0,n=e.getInt32()>>>0,a=e.getInt32()>>>0,i=e.pos;e.pos=e.start||0,e.skip(n);var o=e.getBytes(a);return e.pos=i,"head"===t&&(o[8]=o[9]=o[10]=o[11]=0,o[17]|=32),{tag:t,checksum:r,length:a,offset:n,data:o}}function d(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function y(e,t,r,n,a,i){var o={length:0,sizeOfInstructions:0};if(r-t<=12)return o;var s=e.subarray(t,r),c=N(s[0],s[1]);if(c<0)return R(s,0,c=-1),n.set(s,a),o.length=s.length,o;var u,l=10,f=0;for(u=0;us.length?o:!i&&d>0?(n.set(s.subarray(0,h),a),n.set([0,0],a+h),n.set(s.subarray(p,k),a+h+2),k-=d,s.length-k>3&&(k=k+3&-4),o.length=k,o):s.length-k>3?(k=k+3&-4,n.set(s.subarray(0,k),a),o.length=k,o):(n.set(s,a),o.length=s.length,o)}function b(e){var r=(t.start||0)+e.offset;t.pos=r;var n=[[],[]],a=e.length,i=r+a;if(0!==t.getUint16()||a<6)return n;var o,s,c=t.getUint16(),u=t.getUint16(),l=[];for(o=0;oi)){t.pos=d;var p=h.name;if(h.encoding){for(var g="",v=0,y=h.length;v0&&(u+=k-1)}}else(v||m)&&((0,n.warn)("TT: nested FDEFs not allowed"),g=!0),v=!0,f=u,o=h.pop(),t.functionsDefined[o]={data:c,i:u};else if(!v&&!m)if(o=h.at(-1),isNaN(o))(0,n.info)("TT: CALL empty stack (or invalid entry).");else if(t.functionsUsed[o]=!0,o in t.functionsStackDeltas){var S=h.length+t.functionsStackDeltas[o];if(S<0)return(0,n.warn)("TT: CALL invalid functions stack delta."),void(t.hintsValid=!1);h.length=S}else if(o in t.functionsDefined&&!p.includes(o)){if(d.push({data:c,i:u,stackTop:h.length-1}),p.push(o),!(s=t.functionsDefined[o]))return(0,n.warn)("TT: CALL non-existent function"),void(t.hintsValid=!1);c=s.data,u=s.i}if(!v&&!m){var x=0;for(w<=142?x=A[w]:w>=192&&w<=223?x=-1:w>=224&&(x=-2),w>=113&&w<=117&&(a=h.pop(),isNaN(a)||(x=2*-a));x<0&&h.length>0;)h.pop(),x++;for(;x>0;)h.push(NaN),x--}}t.tooComplexToFollowFunctions=g;var O=[c];u>c.length&&O.push(new Uint8Array(u-c.length)),f>l&&((0,n.warn)("TT: complementing a missing function tail"),O.push(new Uint8Array([34,45]))),function(e,t){if(t.length>1){var r,n,a=0;for(r=0,n=t.length;r>>0,o=[],s=0;s>>0);var c={ttcTag:t,majorVersion:r,minorVersion:a,numFonts:i,offsetTable:o};switch(r){case 1:return c;case 2:return c.dsigTag=e.getInt32()>>>0,c.dsigLength=e.getInt32()>>>0,c.dsigOffset=e.getInt32()>>>0,c}throw new n.FormatError("Invalid TrueType Collection majorVersion: ".concat(r,"."))}(e),i=a.numFonts,o=a.offsetTable,s=t.split("+"),c=0;c0||!(r.cMap instanceof g.IdentityCMap));if("OTTO"===w.version&&!T||!S.head||!S.hhea||!S.maxp||!S.post)return O=new m.Stream(S["CFF "].data),x=new f.CFFFont(O,r),j(r),this.convert(e,x,r);delete S.glyf,delete S.loca,delete S.fpgm,delete S.prep,delete S["cvt "],this.isOpenType=!0}if(!S.maxp)throw new n.FormatError('Required "maxp" table is not found');t.pos=(t.start||0)+S.maxp.offset;var I=t.getInt32(),E=t.getUint16();if(r.scaleFactors&&r.scaleFactors.length===E&&P){var M=r.scaleFactors,_=L(S.head.data[50],S.head.data[51]),D=new p.GlyfTable({glyfTable:S.glyf.data,isGlyphLocationsLong:_,locaTable:S.loca.data,numGlyphs:E});D.scale(M);var B=D.write(),$=B.glyf,X=B.loca,V=B.isLocationLong;S.glyf.data=$,S.loca.data=X,V!==!!_&&(S.head.data[50]=0,S.head.data[51]=V?1:0);for(var K=S.hmtx.data,J=0;J>8&255,K[Z+1]=255&Q,R(K,Z+2,Math.round(M[J]*N(K[Z+2],K[Z+3])))}}var ee=E+1,te=!0;ee>65535&&(te=!1,ee=E,(0,n.warn)("Not enough space in glyfs to duplicate first glyph."));var re=0,ne=0;I>=65536&&S.maxp.length>=22&&(t.pos+=8,t.getUint16()>2&&(S.maxp.data[14]=0,S.maxp.data[15]=2),t.pos+=4,re=t.getUint16(),t.pos+=4,ne=t.getUint16()),S.maxp.data[4]=ee>>8,S.maxp.data[5]=255ⅇvar ae=function(e,t,r,a){var i={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};if(e&&C(e,i),t&&C(t,i),e&&function(e,t){if(!e.tooComplexToFollowFunctions){if(e.functionsDefined.length>t)return(0,n.warn)("TT: more functions defined than expected"),void(e.hintsValid=!1);for(var r=0,a=e.functionsUsed.length;rt)return(0,n.warn)("TT: invalid function id: "+r),void(e.hintsValid=!1);if(e.functionsUsed[r]&&!e.functionsDefined[r])return(0,n.warn)("TT: undefined function: "+r),void(e.hintsValid=!1)}}}(i,a),r&&1&r.length){var o=new Uint8Array(r.length+1);o.set(r.data),r.data=o}return i.hintsValid}(S.fpgm,S.prep,S["cvt "],re);if(ae||(delete S.fpgm,delete S.prep,delete S["cvt "]),function(e,t,r,a,i,o){if(t){e.pos=(e.start||0)+t.offset,e.pos+=4,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2;var s=e.getUint16();e.pos+=8,e.pos+=2;var c=e.getUint16();0!==s&&(2&L(a.data[44],a.data[45])||(t.data[22]=0,t.data[23]=0)),c>i&&((0,n.info)("The numOfMetrics (".concat(c,") should not be ")+"greater than the numGlyphs (".concat(i,").")),c=i,t.data[34]=(65280&c)>>8,t.data[35]=255&c);var u=i-c-(r.length-4*c>>1);if(u>0){var l=new Uint8Array(r.length+2*u);l.set(r.data),o&&(l[r.length]=r.data[2],l[r.length+1]=r.data[3]),r.data=l}}else r&&(r.data=null)}(t,S.hhea,S.hmtx,S.head,ee,te),!S.head)throw new n.FormatError('Required "head" table is not found');!function(e,t,r){var a=e.data,i=(a[0]<<24)+(a[1]<<16)+(a[2]<<8)+a[3];i>>16!=1&&((0,n.info)("Attempting to fix invalid version in head table: "+i),a[0]=0,a[1]=1,a[2]=0,a[3]=0);var o=L(a[50],a[51]);if(o<0||o>1){(0,n.info)("Attempting to fix invalid indexToLocFormat in head table: "+o);var s=t+1;if(r===s<<1)a[50]=0,a[51]=0;else{if(r!==s<<2)throw new n.FormatError("Could not fix indexToLocFormat: "+o);a[50]=0,a[51]=1}}}(S.head,E,P?S.loca.length:0);var ie=Object.create(null);if(P){var oe=L(S.head.data[50],S.head.data[51]),se=function(e,t,r,n,a,i,o){var s,c,u;n?(s=4,c=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]},u=function(e,t,r){e[t]=r>>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r}):(s=2,c=function(e,t){return e[t]<<9|e[t+1]<<1},u=function(e,t,r){e[t]=r>>9&255,e[t+1]=r>>1&255});var l=i?r+1:r,f=s*(1+l),h=new Uint8Array(f);h.set(e.data.subarray(0,f)),e.data=h;var d,p,g=t.data,v=g.length,m=new Uint8Array(v),b=[];for(d=0,p=0;dv&&(w=v),b.push({index:d,offset:w,endOffset:0})}for(b.sort((function(e,t){return e.offset-t.offset})),d=0;do&&(o=F.sizeOfInstructions),u(h,p,C+=P)}if(0===C){var T=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(d=0,p=s;dI+C?t.data=m.subarray(0,I+C):(t.data=new Uint8Array(I+C),t.data.set(m.subarray(0,C))),t.data.set(m.subarray(0,I),C),u(e.data,h.length-s,C+I)}else t.data=m.subarray(0,C);return{missingGlyphs:A,maxSizeOfInstructions:o}}(S.loca,S.glyf,E,oe,ae,te,ne);ie=se.missingGlyphs,I>=65536&&S.maxp.length>=22&&(S.maxp.data[26]=se.maxSizeOfInstructions>>8,S.maxp.data[27]=255&se.maxSizeOfInstructions)}if(!S.hhea)throw new n.FormatError('Required "hhea" table is not found');0===S.hhea.data[10]&&0===S.hhea.data[11]&&(S.hhea.data[10]=255,S.hhea.data[11]=255);var ce={unitsPerEm:L(S.head.data[18],S.head.data[19]),yMax:L(S.head.data[42],S.head.data[43]),yMin:N(S.head.data[38],S.head.data[39]),ascent:N(S.hhea.data[4],S.hhea.data[5]),descent:N(S.hhea.data[6],S.hhea.data[7]),lineGap:N(S.hhea.data[8],S.hhea.data[9])};this.ascent=ce.ascent/ce.unitsPerEm,this.descent=ce.descent/ce.unitsPerEm,this.lineGap=ce.lineGap/ce.unitsPerEm,this.cssFontInfo&&this.cssFontInfo.lineHeight?(this.lineHeight=this.cssFontInfo.metrics.lineHeight,this.lineGap=this.cssFontInfo.metrics.lineGap):this.lineHeight=this.ascent-this.descent+this.lineGap,S.post&&function(e,r,a){var o=(t.start||0)+e.offset;t.pos=o;var s,c=o+e.length,u=t.getInt32();t.skip(28);var l,f=!0;switch(u){case 65536:s=i.MacStandardGlyphOrdering;break;case 131072:var h=t.getUint16();if(h!==a){f=!1;break}var d=[];for(l=0;l=32768){f=!1;break}d.push(p)}if(!f)break;for(var g=[],v=[];t.pos65535)throw new n.FormatError("Max size of CID is 65,535");var r=-1;he?r=t:void 0!==fe[t]&&(r=fe[t]),r>=0&&r>>0,p=!1;if(!s||s.platformId!==f||s.encodingId!==h){if(0!==f||0!==h&&1!==h&&3!==h)if(1===f&&0===h)p=!0;else if(3!==f||1!==h||!a&&s){if(r&&3===f&&0===h){p=!0;var g=!0;if(l>3;x.push(C),O=Math.max(C,O)}for(var F=[],P=0;P<=O;P++)F.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:N(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(var T=0;T<256;T++)if(0===x[T])t.pos=F[0].idRangePos+2*T,m=t.getUint16(),k.push({charCode:T,glyphId:m});else{var I=F[x[T]];for(y=0;y>1;t.skip(6);var M,_=[];for(M=0;M>1)-(j-M),i.offsetIndex=R,D=Math.max(D,R+i.end-i.start+1)):i.offsetIndex=-1}var U=[];for(y=0;y>>0;for(y=0;y>>0,V=t.getInt32()>>>0,Y=t.getInt32()>>>0,K=W;K<=V;K++)k.push({charCode:K,glyphId:Y++})}k.sort((function(e,t){return e.charCode-t.charCode}));for(var J=1;J=61440&&_e<=61695&&(_e&=255),ue[_e]=Me.glyphId}}catch(e){je.e(e)}finally{je.f()}}if(r.glyphNames&&(ye.length||this.differences.length))for(var Le=0;Le<256;++Le)if(me||void 0===ue[Le]){var Re=this.differences[Le]||ye[Le];if(Re){var Ne=r.glyphNames.indexOf(Re);Ne>0&&le(Ne)&&(ue[Le]=Ne)}}}0===ue.length&&(ue[0]=0);var De=ee-1;if(te||(De=0),!r.cssFontInfo){var Be=q(ue,le,De,this.toUnicode);this.toFontChar=Be.toFontChar,S.cmap={tag:"cmap",data:G(Be.charCodeToGlyphId,Be.toUnicodeExtraMap,ee)},S["OS/2"]&&function(e,t){t.pos=(t.start||0)+e.offset;var r=t.getUint16();t.skip(60);var n=t.getUint16();return!(r<4&&768&n||t.getUint16()>t.getUint16()||(t.skip(6),0===t.getUint16()||(e.data[8]=e.data[9]=0,0)))}(S["OS/2"],t)||(S["OS/2"]={tag:"OS/2",data:z(r,Be.charCodeToGlyphId,ce)})}if(!P)try{O=new m.Stream(S["CFF "].data),(x=new a.CFFParser(O,r,i.SEAC_ANALYSIS_ENABLED).parse()).duplicateFirstGlyph();var Ue=new a.CFFCompiler(x);S["CFF "].data=Ue.compile()}catch(e){(0,n.warn)("Failed to compile font "+r.loadedName)}if(S.name){var $e=b(S.name);S.name.data=Y(e,$e),this.psName=$e[0][6]||null}else S.name={tag:"name",data:Y(this.name)};var Xe=new v.OpenTypeFileBuilder(w.version);for(var He in S)Xe.addTable(He,S[He].data);return Xe.toArray()}},{key:"convert",value:function(e,t,r){r.fixedPitch=!1,r.builtInEncoding&&function(e,t){if(!e.isInternalFont&&!(e.hasIncludedToUnicodeMap||t===e.defaultEncoding||e.toUnicode instanceof l.IdentityToUnicodeMap)){var r=[],n=(0,s.getGlyphsUnicode)();for(var a in t)if(!e.hasEncoding||0!==e.differences.length&&void 0===e.differences[a]){var i=t[a],c=(0,o.getUnicodeForGlyph)(i,n);-1!==c&&(r[a]=String.fromCharCode(c))}r.length>0&&e.toUnicode.amend(r)}}(r,r.builtInEncoding);var a=1;t instanceof f.CFFFont&&(a=t.numGlyphs-1);var u=t.getGlyphMapping(r),h=null,d=u,p=null;r.cssFontInfo||(h=q(u,t.hasGlyphId.bind(t),a,this.toUnicode),this.toFontChar=h.toFontChar,d=h.charCodeToGlyphId,p=h.toUnicodeExtraMap);var g=t.numGlyphs;function y(e,t){var r=null;for(var n in e)t===e[n]&&(r||(r=[]),r.push(0|n));return r}function m(e,t){for(var r in e)if(t===e[r])return 0|r;return h.charCodeToGlyphId[h.nextAvailableFontCharCode]=t,h.nextAvailableFontCharCode++}var b=t.seacs;if(h&&i.SEAC_ANALYSIS_ENABLED&&b&&b.length){var w=r.fontMatrix||n.FONT_IDENTITY_MATRIX,S=t.getCharset(),x=Object.create(null);for(var O in b){var A=b[O|=0],C=c.StandardEncoding[A[2]],F=c.StandardEncoding[A[3]],P=S.indexOf(C),T=S.indexOf(F);if(!(P<0||T<0)){var I={x:A[0]*w[0]+A[1]*w[2]+w[4],y:A[0]*w[1]+A[1]*w[3]+w[5]},E=y(u,O);if(E){var j,M=k(E);try{for(M.s();!(j=M.n()).done;){var _=j.value,L=h.charCodeToGlyphId,R=m(L,P),N=m(L,T);x[_]={baseFontCharCode:R,accentFontCharCode:N,accentOffset:I}}}catch(e){M.e(e)}finally{M.f()}}}}r.seacMap=x}var U=1/(r.fontMatrix||n.FONT_IDENTITY_MATRIX)[0],$=new v.OpenTypeFileBuilder("OTTO");return $.addTable("CFF ",t.data),$.addTable("OS/2",z(r,d)),$.addTable("cmap",G(d,p,g)),$.addTable("head","\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0_<õ\\0\\0"+B(U)+"\\0\\0\\0\\0ž\\v~'\\0\\0\\0\\0ž\\v~'\\0\\0"+B(r.descent)+"ÿ"+B(r.ascent)+D(r.italicAngle?2:0)+"\\0\\0\\0\\0\\0\\0\\0"),$.addTable("hhea","\\0\\0\\0"+B(r.ascent)+B(r.descent)+"\\0\\0ÿÿ\\0\\0\\0\\0\\0\\0"+B(r.capHeight)+B(Math.tan(r.italicAngle)*r.xHeight)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"+D(g)),$.addTable("hmtx",function(){for(var e=t.charstrings,r=t.cff?t.cff.widths:null,n="\\0\\0\\0\\0",a=1,i=g;a1&&void 0!==arguments[1]&&arguments[1],s=this._glyphCache[e];if(s&&s.isSpace===i)return s;var c=e;this.cMap&&this.cMap.contains(e)&&"string"==typeof(c=this.cMap.lookup(e))&&(c=H(e,c)),"number"!=typeof(r=this.widths[c])&&(r=this.defaultWidth);var u=this.vmetrics&&this.vmetrics[c],l=this.toUnicode.get(e)||e;"number"==typeof l&&(l=String.fromCharCode(l));var f=void 0!==this.toFontChar[e];if(t=this.toFontChar[e]||e,this.missingFile){var h=this.differences[e]||this.defaultEncoding[e];".notdef"!==h&&""!==h||"Type1"!==this.type||(t=32),t=(0,o.mapSpecialUnicodeValues)(t)}this.isType3Font&&(a=t);var d=null;if(this.seacMap&&this.seacMap[e]){f=!0;var p=this.seacMap[e];t=p.baseFontCharCode,d={fontChar:String.fromCodePoint(p.accentFontCharCode),offset:p.accentOffset}}var g="";return"number"==typeof t&&(t<=1114111?g=String.fromCodePoint(t):(0,n.warn)("charToGlyph - invalid fontCharCode: ".concat(t))),s=new _(e,g,l,d,r,u,a,i,f),this._glyphCache[e]=s}},{key:"charsToGlyphs",value:function(e){var t=this._charsCache[e];if(t)return t;if(t=[],this.cMap)for(var r=Object.create(null),n=e.length,a=0;a55295&&(c<57344||c>65533)&&o++,this.toUnicode){var u=i(c);if(-1!==u){a()&&(r.push(n.join("")),n.length=0);for(var f=(this.cMap?this.cMap.getCharCodeLength(u):1)-1;f>=0;f--)n.push(String.fromCharCode(u>>8*f&255));continue}}a()||(r.push(n.join("")),n.length=0),n.push(String.fromCodePoint(c))}return r.push(n.join("")),r}}]),e}();t.Font=K;var J=function(){function e(t){A(this,e),this.error=t,this.loadedName="g_font_error",this.missingFile=!0}return F(e,[{key:"charsToGlyphs",value:function(){return[]}},{key:"encodeString",value:function(e){return[e]}},{key:"exportData",value:function(){return{error:this.error}}}]),e}();t.ErrorFont=J},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CFFTopDict=t.CFFStrings=t.CFFStandardStrings=t.CFFPrivateDict=t.CFFParser=t.CFFIndex=t.CFFHeader=t.CFFFDSelect=t.CFFCompiler=t.CFFCharset=t.CFF=void 0;var n=r(2),a=r(165),i=r(166);function o(e){return function(e){if(Array.isArray(e))return p(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||d(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}function u(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=l(e);if(t){var a=l(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===f(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function l(e){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},l(e)}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function d(e,t){if(e){if("string"==typeof e)return p(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=t)throw new n.FormatError("Invalid CFF header");0!==r&&((0,n.info)("cff data is shifted"),e=e.subarray(r),this.bytes=e);var a=e[0],i=e[1],o=e[2],s=e[3];return{obj:new x(a,i,o,s),endPos:o}}},{key:"parseDict",value:function(e){var t=0;var r,a=[],i=[];t=0;for(var o=e.length;t>4,s=15&i;if(15===o)break;if(r+=n[o],15===s)break;r+=n[s]}return parseFloat(r)}():28===r?r=((r=e[t++])<<24|e[t++]<<16)>>16:29===r?r=(r=(r=(r=e[t++])<<8|e[t++])<<8|e[t++])<<8|e[t++]:r>=32&&r<=246?r-139:r>=247&&r<=250?256*(r-247)+e[t++]+108:r>=251&&r<=254?-256*(r-251)-e[t++]-108:((0,n.warn)('CFFParser_parseDict: "'+r+'" is a reserved command.'),NaN)))}return i}},{key:"parseIndex",value:function(e){var t,r,n=new A,a=this.bytes,i=a[e++]<<8|a[e++],o=[],s=e;if(0!==i){var c=a[e++],u=e+(i+1)*c-1;for(t=0,r=i+1;t10)return!1;for(var i=e.stackSize,o=e.stack,s=t.length,c=0;c>16,c+=2,i++;else if(14===u){if(i>=4&&(i-=4,this.seacAnalysisEnabled))return e.seac=o.slice(i,i+4),!1;l=b[u]}else if(u>=32&&u<=246)o[i]=u-139,i++;else if(u>=247&&u<=254)o[i]=u<251?(u-247<<8)+t[c]+108:-(u-251<<8)-t[c]-108,c++,i++;else if(255===u)o[i]=(t[c]<<24|t[c+1]<<16|t[c+2]<<8|t[c+3])/65536,c+=4,i++;else if(19===u||20===u)e.hints+=i>>1,c+=e.hints+7>>3,i%=2,l=b[u];else{if(10===u||29===u){var h=void 0;if(!(h=10===u?r:a))return l=b[u],(0,n.warn)("Missing subrsIndex for "+l.id),!1;var d=32768;h.count<1240?d=107:h.count<33900&&(d=1131);var p=o[--i]+d;if(p<0||p>=h.count||isNaN(p))return l=b[u],(0,n.warn)("Out of bounds subrIndex for "+l.id),!1;if(e.stackSize=i,e.callDepth++,!this.parseCharString(e,h.get(p),r,a))return!1;e.callDepth--,i=e.stackSize;continue}if(11===u)return e.stackSize=i,!0;if(0===u&&c===t.length)t[c-1]=14,l=b[14];else{if(9===u){t.copyWithin(c-1,c,-1),c-=1,s-=1;continue}l=b[u]}}if(l){if(l.stem&&(e.hints+=i>>1,3===u||23===u?e.hasVStems=!0:!e.hasVStems||1!==u&&18!==u||((0,n.warn)("CFF stem hints are in wrong order"),t[c-1]=1===u?3:23)),"min"in l&&!e.undefStack&&i=2&&l.stem?i%=2:i>1&&(0,n.warn)("Found too many parameters for stack-clearing command"),i>0&&(e.width=o[i-1])),"stackDelta"in l?("stackFn"in l&&l.stackFn(o,i),i+=l.stackDelta):l.stackClearing?i=0:l.resetStack?(i=0,e.undefStack=!1):l.undefStack&&(i=0,e.undefStack=!0,e.firstStackClearing=!1)}}return s=o.length&&((0,n.warn)("Invalid fd index for glyph index."),p=!1),p&&(g=(v=o[y].privateDict).subrsIndex)}else r&&(g=r);if(p&&(p=this.parseCharString(d,h,g,a)),null!==d.width){var m=v.getByName("nominalWidthX");u[f]=m+d.width}else{var b=v.getByName("defaultWidthX");u[f]=b}null!==d.seac&&(c[f]=d.seac),p||t.set(f,new Uint8Array([14]))}return{charStrings:t,seacs:c,widths:u}}},{key:"emptyPrivateDictionary",value:function(e){var t=this.createDict(I,[],e.strings);e.setByKey(18,[0,0]),e.privateDict=t}},{key:"parsePrivateDict",value:function(e){if(e.hasName("Private")){var t=e.getByName("Private");if(Array.isArray(t)&&2===t.length){var r=t[0],n=t[1];if(0===r||n>=this.bytes.length)this.emptyPrivateDictionary(e);else{var a=n+r,i=this.bytes.subarray(n,a),o=this.parseDict(i),s=this.createDict(I,o,e.strings);if(e.privateDict=s,s.getByName("Subrs")){var c=s.getByName("Subrs"),u=n+c;if(0===c||u>=this.bytes.length)this.emptyPrivateDictionary(e);else{var l=this.parseIndex(u);s.subrsIndex=l.obj}}}}else e.removeByName("Private")}else this.emptyPrivateDictionary(e)}},{key:"parseCharsets",value:function(e,t,r,i){if(0===e)return new j(!0,E.ISO_ADOBE,a.ISOAdobeCharset);if(1===e)return new j(!0,E.EXPERT,a.ExpertCharset);if(2===e)return new j(!0,E.EXPERT_SUBSET,a.ExpertSubsetCharset);var o,s,c,u=this.bytes,l=e,f=u[e++],h=[i?0:".notdef"];switch(t-=1,f){case 0:for(c=0;c=65535)(0,n.warn)("Not enough space in charstrings to duplicate first glyph.");else{var e=this.charStrings.get(0);this.charStrings.add(e),this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}}},{key:"hasGlyphId",value:function(e){return!(e<0||e>=this.charStrings.count)&&this.charStrings.get(e).length>0}}]),e}();t.CFF=S;var x=y((function e(t,r,n,a){g(this,e),this.major=t,this.minor=r,this.hdrSize=n,this.offSize=a}));t.CFFHeader=x;var O=function(){function e(){g(this,e),this.strings=[]}return y(e,[{key:"get",value:function(e){return e>=0&&e<=390?m[e]:e-391<=this.strings.length?this.strings[e-391]:m[0]}},{key:"getSID",value:function(e){var t=m.indexOf(e);return-1!==t?t:-1!==(t=this.strings.indexOf(e))?t+391:-1}},{key:"add",value:function(e){this.strings.push(e)}},{key:"count",get:function(){return this.strings.length}}]),e}();t.CFFStrings=O;var A=function(){function e(){g(this,e),this.objects=[],this.length=0}return y(e,[{key:"add",value:function(e){this.length+=e.length,this.objects.push(e)}},{key:"set",value:function(e,t){this.length+=t.length-this.objects[e].length,this.objects[e]=t}},{key:"get",value:function(e){return this.objects[e]}},{key:"count",get:function(){return this.objects.length}}]),e}();t.CFFIndex=A;var C=function(){function e(t,r){g(this,e),this.keyToNameMap=t.keyToNameMap,this.nameToKeyMap=t.nameToKeyMap,this.defaults=t.defaults,this.types=t.types,this.opcodes=t.opcodes,this.order=t.order,this.strings=r,this.values=Object.create(null)}return y(e,[{key:"setByKey",value:function(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;var r,a=h(t);try{for(a.s();!(r=a.n()).done;){var i=r.value;if(isNaN(i))return(0,n.warn)('Invalid CFFDict value: "'.concat(t,'" for key "').concat(e,'".')),!0}}catch(e){a.e(e)}finally{a.f()}var o=this.types[e];return"num"!==o&&"sid"!==o&&"offset"!==o||(t=t[0]),this.values[e]=t,!0}},{key:"setByName",value:function(e,t){if(!(e in this.nameToKeyMap))throw new n.FormatError('Invalid dictionary name "'.concat(e,'"'));this.values[this.nameToKeyMap[e]]=t}},{key:"hasName",value:function(e){return this.nameToKeyMap[e]in this.values}},{key:"getByName",value:function(e){if(!(e in this.nameToKeyMap))throw new n.FormatError("Invalid dictionary name ".concat(e,'"'));var t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}},{key:"removeByName",value:function(e){delete this.values[this.nameToKeyMap[e]]}}],[{key:"createTables",value:function(e){var t,r={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]},n=h(e);try{for(n.s();!(t=n.n()).done;){var a=t.value,i=Array.isArray(a[0])?(a[0][0]<<8)+a[0][1]:a[0];r.keyToNameMap[i]=a[1],r.nameToKeyMap[a[1]]=i,r.types[i]=a[2],r.defaults[i]=a[3],r.opcodes[i]=Array.isArray(a[0])?a[0]:[a[0]],r.order.push(i)}}catch(e){n.e(e)}finally{n.f()}return r}}]),e}(),F=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]],P=function(e){s(r,e);var t=u(r);function r(e){var n;return g(this,r),(n=t.call(this,r.tables,e)).privateDict=null,n}return y(r,null,[{key:"tables",get:function(){return(0,n.shadow)(this,"tables",this.createTables(F))}}]),r}(C);t.CFFTopDict=P;var T=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]],I=function(e){s(r,e);var t=u(r);function r(e){var n;return g(this,r),(n=t.call(this,r.tables,e)).subrsIndex=null,n}return y(r,null,[{key:"tables",get:function(){return(0,n.shadow)(this,"tables",this.createTables(T))}}]),r}(C);t.CFFPrivateDict=I;var E={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},j=y((function e(t,r,n,a){g(this,e),this.predefined=t,this.format=r,this.charset=n,this.raw=a}));t.CFFCharset=j;var M=y((function e(t,r,n,a){g(this,e),this.predefined=t,this.format=r,this.encoding=n,this.raw=a})),_=function(){function e(t,r){g(this,e),this.format=t,this.fdSelect=r}return y(e,[{key:"getFDIndex",value:function(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}]),e}();t.CFFFDSelect=_;var L=function(){function e(){g(this,e),this.offsets=Object.create(null)}return y(e,[{key:"isTracking",value:function(e){return e in this.offsets}},{key:"track",value:function(e,t){if(e in this.offsets)throw new n.FormatError("Already tracking location of ".concat(e));this.offsets[e]=t}},{key:"offset",value:function(e){for(var t in this.offsets)this.offsets[t]+=e}},{key:"setEntryLocation",value:function(e,t,r){if(!(e in this.offsets))throw new n.FormatError("Not tracking location of ".concat(e));for(var a=r.data,i=this.offsets[e],o=0,s=t.length;o>24&255,a[l]=d>>16&255,a[f]=d>>8&255,a[h]=255&d}}}]),e}(),R=function(){function e(t){g(this,e),this.cff=t}return y(e,[{key:"compile",value:function(){var e=this.cff,t={data:[],length:0,add:function(e){this.data=this.data.concat(e),this.length=this.data.length}},r=this.compileHeader(e.header);t.add(r);var a=this.compileNameIndex(e.names);if(t.add(a),e.isCIDFont&&e.topDict.hasName("FontMatrix")){var i=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");var o,s=h(e.fdArray);try{for(s.s();!(o=s.n()).done;){var c=o.value,u=i.slice(0);c.hasName("FontMatrix")&&(u=n.Util.transform(u,c.getByName("FontMatrix"))),c.setByName("FontMatrix",u)}}catch(e){s.e(e)}finally{s.f()}}var l=e.topDict.getByName("XUID");l&&l.length>16&&e.topDict.removeByName("XUID"),e.topDict.setByName("charset",0);var f=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(f.output);var d=f.trackers[0],p=this.compileStringIndex(e.strings.strings);t.add(p);var g=this.compileIndex(e.globalSubrIndex);if(t.add(g),e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)d.setEntryLocation("Encoding",[e.encoding.format],t);else{var v=this.compileEncoding(e.encoding);d.setEntryLocation("Encoding",[t.length],t),t.add(v)}var y=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);d.setEntryLocation("charset",[t.length],t),t.add(y);var m=this.compileCharStrings(e.charStrings);if(d.setEntryLocation("CharStrings",[t.length],t),t.add(m),e.isCIDFont){d.setEntryLocation("FDSelect",[t.length],t);var b=this.compileFDSelect(e.fdSelect);t.add(b),f=this.compileTopDicts(e.fdArray,t.length,!0),d.setEntryLocation("FDArray",[t.length],t),t.add(f.output);var w=f.trackers;this.compilePrivateDicts(e.fdArray,w,t)}return this.compilePrivateDicts([e.topDict],[d],t),t.add([0]),t.data}},{key:"encodeNumber",value:function(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}},{key:"encodeFloat",value:function(t){var r=t.toString(),n=e.EncodeFloatRegExp.exec(r);if(n){var a=parseFloat("1e"+((n[2]?+n[2]:0)+n[1].length));r=(Math.round(t*a)/a).toString()}var i,o,s="";for(i=0,o=r.length;i=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e]}},{key:"compileHeader",value:function(e){return[e.major,e.minor,4,e.offSize]}},{key:"compileNameIndex",value:function(e){var t,r=new A,a=h(e);try{for(a.s();!(t=a.n()).done;){for(var i=t.value,o=Math.min(i.length,127),s=new Array(o),c=0;c"~"||"["===u||"]"===u||"("===u||")"===u||"{"===u||"}"===u||"<"===u||">"===u||"/"===u||"%"===u)&&(u="_"),s[c]=u}""===(s=s.join(""))&&(s="Bad_Font_Name"),r.add((0,n.stringToBytes)(s))}}catch(e){a.e(e)}finally{a.f()}return this.compileIndex(r)}},{key:"compileTopDicts",value:function(e,t,r){var n,a=[],i=new A,o=h(e);try{for(o.s();!(n=o.n()).done;){var s=n.value;r&&(s.removeByName("CIDFontVersion"),s.removeByName("CIDFontRevision"),s.removeByName("CIDFontType"),s.removeByName("CIDCount"),s.removeByName("UIDBase"));var c=new L,u=this.compileDict(s,c);a.push(c),i.add(u),c.offset(t)}}catch(e){o.e(e)}finally{o.f()}return{trackers:a,output:i=this.compileIndex(i,a)}}},{key:"compilePrivateDicts",value:function(e,t,r){for(var a=0,i=e.length;a>8&255,255&o]);else{(i=new Uint8Array(1+2*o))[0]=0;for(var s=0,c=e.charset.length,u=!1,l=1;l>8&255,i[l+1]=255&f}}return this.compileTypedArray(i)}},{key:"compileEncoding",value:function(e){return this.compileTypedArray(e.raw)}},{key:"compileFDSelect",value:function(e){var t,r,n=e.format;switch(n){case 0:for((t=new Uint8Array(1+e.fdSelect.length))[0]=n,r=0;r>8&255,255&r,o),a=o)}var s=(i.length-3)/3;i[1]=s>>8&255,i[2]=255&s,i.push(r>>8&255,255&r),t=new Uint8Array(i)}return this.compileTypedArray(t)}},{key:"compileTypedArray",value:function(e){for(var t=[],r=0,n=e.length;r1&&void 0!==arguments[1]?arguments[1]:[],r=e.objects,n=r.length;if(0===n)return[0,0];var a,i,s=[n>>8&255,255&n],c=1;for(a=0;a>8&255,255&u):3===i?s.push(u>>16&255,u>>8&255,255&u):s.push(u>>>24&255,u>>16&255,u>>8&255,255&u),r[a]&&(u+=r[a].length);for(a=0;a{Object.defineProperty(t,"__esModule",{value:!0}),t.ISOAdobeCharset=t.ExpertSubsetCharset=t.ExpertCharset=void 0,t.ISOAdobeCharset=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],t.ExpertCharset=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],t.ExpertSubsetCharset=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"]},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ZapfDingbatsEncoding=t.WinAnsiEncoding=t.SymbolSetEncoding=t.StandardEncoding=t.MacRomanEncoding=t.ExpertEncoding=void 0,t.getEncoding=function(e){switch(e){case"WinAnsiEncoding":return o;case"StandardEncoding":return i;case"MacRomanEncoding":return a;case"SymbolSetEncoding":return s;case"ZapfDingbatsEncoding":return c;case"ExpertEncoding":return r;case"MacExpertEncoding":return n;default:return null}};var r=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"];t.ExpertEncoding=r;var n=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],a=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"];t.MacRomanEncoding=a;var i=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""];t.StandardEncoding=i;var o=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"];t.WinAnsiEncoding=o;var s=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""];t.SymbolSetEncoding=s;var c=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];t.ZapfDingbatsEncoding=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SEAC_ANALYSIS_ENABLED=t.MacStandardGlyphOrdering=t.FontFlags=void 0,t.getFontType=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];switch(e){case"Type1":return r?n.FontType.TYPE1STANDARD:"Type1C"===t?n.FontType.TYPE1C:n.FontType.TYPE1;case"CIDFontType0":return"CIDFontType0C"===t?n.FontType.CIDFONTTYPE0C:n.FontType.CIDFONTTYPE0;case"OpenType":return n.FontType.OPENTYPE;case"TrueType":return n.FontType.TRUETYPE;case"CIDFontType2":return n.FontType.CIDFONTTYPE2;case"MMType1":return n.FontType.MMTYPE1;case"Type0":return n.FontType.TYPE0;default:return n.FontType.UNKNOWN}},t.normalizeFontName=function(e){return e.replace(/[,_]/g,"-").replace(/\\s/g,"")},t.recoverGlyphName=c,t.type1FontGlyphMapping=function(e,t,r){var n,o,u,l=Object.create(null),f=!!(e.flags&s.Symbolic);if(e.isInternalFont)for(u=t,o=0;o=0?n:0;else if(e.baseEncodingName)for(u=(0,a.getEncoding)(e.baseEncodingName),o=0;o=0?n:0;else if(f)for(o in t)l[o]=t[o];else for(u=a.StandardEncoding,o=0;o=0?n:0;var h,d=e.differences;if(d)for(o in d){var p=d[o];if(-1===(n=r.indexOf(p))){h||(h=(0,i.getGlyphsUnicode)());var g=c(p,h);g!==p&&(n=r.indexOf(g))}l[o]=n>=0?n:0}return l};var n=r(2),a=r(166),i=r(168),o=r(169);t.SEAC_ANALYSIS_ENABLED=!0;var s={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144};function c(e,t){if(void 0!==t[e])return e;var r=(0,o.getUnicodeForGlyph)(e,t);if(-1!==r)for(var a in t)if(t[a]===r)return a;return(0,n.info)("Unable to recover a standard glyph name for: "+e),e}t.FontFlags=s,t.MacStandardGlyphOrdering=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"]},(e,t,r)=>{r.r(t),r.d(t,{getDingbatsGlyphsUnicode:()=>i,getGlyphsUnicode:()=>a});var n=r(135);const a=(0,n.getArrayLookupTableFactory)((function(){return["A",65,"AE",198,"AEacute",508,"AEmacron",482,"AEsmall",63462,"Aacute",193,"Aacutesmall",63457,"Abreve",258,"Abreveacute",7854,"Abrevecyrillic",1232,"Abrevedotbelow",7862,"Abrevegrave",7856,"Abrevehookabove",7858,"Abrevetilde",7860,"Acaron",461,"Acircle",9398,"Acircumflex",194,"Acircumflexacute",7844,"Acircumflexdotbelow",7852,"Acircumflexgrave",7846,"Acircumflexhookabove",7848,"Acircumflexsmall",63458,"Acircumflextilde",7850,"Acute",63177,"Acutesmall",63412,"Acyrillic",1040,"Adblgrave",512,"Adieresis",196,"Adieresiscyrillic",1234,"Adieresismacron",478,"Adieresissmall",63460,"Adotbelow",7840,"Adotmacron",480,"Agrave",192,"Agravesmall",63456,"Ahookabove",7842,"Aiecyrillic",1236,"Ainvertedbreve",514,"Alpha",913,"Alphatonos",902,"Amacron",256,"Amonospace",65313,"Aogonek",260,"Aring",197,"Aringacute",506,"Aringbelow",7680,"Aringsmall",63461,"Asmall",63329,"Atilde",195,"Atildesmall",63459,"Aybarmenian",1329,"B",66,"Bcircle",9399,"Bdotaccent",7682,"Bdotbelow",7684,"Becyrillic",1041,"Benarmenian",1330,"Beta",914,"Bhook",385,"Blinebelow",7686,"Bmonospace",65314,"Brevesmall",63220,"Bsmall",63330,"Btopbar",386,"C",67,"Caarmenian",1342,"Cacute",262,"Caron",63178,"Caronsmall",63221,"Ccaron",268,"Ccedilla",199,"Ccedillaacute",7688,"Ccedillasmall",63463,"Ccircle",9400,"Ccircumflex",264,"Cdot",266,"Cdotaccent",266,"Cedillasmall",63416,"Chaarmenian",1353,"Cheabkhasiancyrillic",1212,"Checyrillic",1063,"Chedescenderabkhasiancyrillic",1214,"Chedescendercyrillic",1206,"Chedieresiscyrillic",1268,"Cheharmenian",1347,"Chekhakassiancyrillic",1227,"Cheverticalstrokecyrillic",1208,"Chi",935,"Chook",391,"Circumflexsmall",63222,"Cmonospace",65315,"Coarmenian",1361,"Csmall",63331,"D",68,"DZ",497,"DZcaron",452,"Daarmenian",1332,"Dafrican",393,"Dcaron",270,"Dcedilla",7696,"Dcircle",9401,"Dcircumflexbelow",7698,"Dcroat",272,"Ddotaccent",7690,"Ddotbelow",7692,"Decyrillic",1044,"Deicoptic",1006,"Delta",8710,"Deltagreek",916,"Dhook",394,"Dieresis",63179,"DieresisAcute",63180,"DieresisGrave",63181,"Dieresissmall",63400,"Digammagreek",988,"Djecyrillic",1026,"Dlinebelow",7694,"Dmonospace",65316,"Dotaccentsmall",63223,"Dslash",272,"Dsmall",63332,"Dtopbar",395,"Dz",498,"Dzcaron",453,"Dzeabkhasiancyrillic",1248,"Dzecyrillic",1029,"Dzhecyrillic",1039,"E",69,"Eacute",201,"Eacutesmall",63465,"Ebreve",276,"Ecaron",282,"Ecedillabreve",7708,"Echarmenian",1333,"Ecircle",9402,"Ecircumflex",202,"Ecircumflexacute",7870,"Ecircumflexbelow",7704,"Ecircumflexdotbelow",7878,"Ecircumflexgrave",7872,"Ecircumflexhookabove",7874,"Ecircumflexsmall",63466,"Ecircumflextilde",7876,"Ecyrillic",1028,"Edblgrave",516,"Edieresis",203,"Edieresissmall",63467,"Edot",278,"Edotaccent",278,"Edotbelow",7864,"Efcyrillic",1060,"Egrave",200,"Egravesmall",63464,"Eharmenian",1335,"Ehookabove",7866,"Eightroman",8551,"Einvertedbreve",518,"Eiotifiedcyrillic",1124,"Elcyrillic",1051,"Elevenroman",8554,"Emacron",274,"Emacronacute",7702,"Emacrongrave",7700,"Emcyrillic",1052,"Emonospace",65317,"Encyrillic",1053,"Endescendercyrillic",1186,"Eng",330,"Enghecyrillic",1188,"Enhookcyrillic",1223,"Eogonek",280,"Eopen",400,"Epsilon",917,"Epsilontonos",904,"Ercyrillic",1056,"Ereversed",398,"Ereversedcyrillic",1069,"Escyrillic",1057,"Esdescendercyrillic",1194,"Esh",425,"Esmall",63333,"Eta",919,"Etarmenian",1336,"Etatonos",905,"Eth",208,"Ethsmall",63472,"Etilde",7868,"Etildebelow",7706,"Euro",8364,"Ezh",439,"Ezhcaron",494,"Ezhreversed",440,"F",70,"Fcircle",9403,"Fdotaccent",7710,"Feharmenian",1366,"Feicoptic",996,"Fhook",401,"Fitacyrillic",1138,"Fiveroman",8548,"Fmonospace",65318,"Fourroman",8547,"Fsmall",63334,"G",71,"GBsquare",13191,"Gacute",500,"Gamma",915,"Gammaafrican",404,"Gangiacoptic",1002,"Gbreve",286,"Gcaron",486,"Gcedilla",290,"Gcircle",9404,"Gcircumflex",284,"Gcommaaccent",290,"Gdot",288,"Gdotaccent",288,"Gecyrillic",1043,"Ghadarmenian",1346,"Ghemiddlehookcyrillic",1172,"Ghestrokecyrillic",1170,"Gheupturncyrillic",1168,"Ghook",403,"Gimarmenian",1331,"Gjecyrillic",1027,"Gmacron",7712,"Gmonospace",65319,"Grave",63182,"Gravesmall",63328,"Gsmall",63335,"Gsmallhook",667,"Gstroke",484,"H",72,"H18533",9679,"H18543",9642,"H18551",9643,"H22073",9633,"HPsquare",13259,"Haabkhasiancyrillic",1192,"Hadescendercyrillic",1202,"Hardsigncyrillic",1066,"Hbar",294,"Hbrevebelow",7722,"Hcedilla",7720,"Hcircle",9405,"Hcircumflex",292,"Hdieresis",7718,"Hdotaccent",7714,"Hdotbelow",7716,"Hmonospace",65320,"Hoarmenian",1344,"Horicoptic",1e3,"Hsmall",63336,"Hungarumlaut",63183,"Hungarumlautsmall",63224,"Hzsquare",13200,"I",73,"IAcyrillic",1071,"IJ",306,"IUcyrillic",1070,"Iacute",205,"Iacutesmall",63469,"Ibreve",300,"Icaron",463,"Icircle",9406,"Icircumflex",206,"Icircumflexsmall",63470,"Icyrillic",1030,"Idblgrave",520,"Idieresis",207,"Idieresisacute",7726,"Idieresiscyrillic",1252,"Idieresissmall",63471,"Idot",304,"Idotaccent",304,"Idotbelow",7882,"Iebrevecyrillic",1238,"Iecyrillic",1045,"Ifraktur",8465,"Igrave",204,"Igravesmall",63468,"Ihookabove",7880,"Iicyrillic",1048,"Iinvertedbreve",522,"Iishortcyrillic",1049,"Imacron",298,"Imacroncyrillic",1250,"Imonospace",65321,"Iniarmenian",1339,"Iocyrillic",1025,"Iogonek",302,"Iota",921,"Iotaafrican",406,"Iotadieresis",938,"Iotatonos",906,"Ismall",63337,"Istroke",407,"Itilde",296,"Itildebelow",7724,"Izhitsacyrillic",1140,"Izhitsadblgravecyrillic",1142,"J",74,"Jaarmenian",1345,"Jcircle",9407,"Jcircumflex",308,"Jecyrillic",1032,"Jheharmenian",1355,"Jmonospace",65322,"Jsmall",63338,"K",75,"KBsquare",13189,"KKsquare",13261,"Kabashkircyrillic",1184,"Kacute",7728,"Kacyrillic",1050,"Kadescendercyrillic",1178,"Kahookcyrillic",1219,"Kappa",922,"Kastrokecyrillic",1182,"Kaverticalstrokecyrillic",1180,"Kcaron",488,"Kcedilla",310,"Kcircle",9408,"Kcommaaccent",310,"Kdotbelow",7730,"Keharmenian",1364,"Kenarmenian",1343,"Khacyrillic",1061,"Kheicoptic",998,"Khook",408,"Kjecyrillic",1036,"Klinebelow",7732,"Kmonospace",65323,"Koppacyrillic",1152,"Koppagreek",990,"Ksicyrillic",1134,"Ksmall",63339,"L",76,"LJ",455,"LL",63167,"Lacute",313,"Lambda",923,"Lcaron",317,"Lcedilla",315,"Lcircle",9409,"Lcircumflexbelow",7740,"Lcommaaccent",315,"Ldot",319,"Ldotaccent",319,"Ldotbelow",7734,"Ldotbelowmacron",7736,"Liwnarmenian",1340,"Lj",456,"Ljecyrillic",1033,"Llinebelow",7738,"Lmonospace",65324,"Lslash",321,"Lslashsmall",63225,"Lsmall",63340,"M",77,"MBsquare",13190,"Macron",63184,"Macronsmall",63407,"Macute",7742,"Mcircle",9410,"Mdotaccent",7744,"Mdotbelow",7746,"Menarmenian",1348,"Mmonospace",65325,"Msmall",63341,"Mturned",412,"Mu",924,"N",78,"NJ",458,"Nacute",323,"Ncaron",327,"Ncedilla",325,"Ncircle",9411,"Ncircumflexbelow",7754,"Ncommaaccent",325,"Ndotaccent",7748,"Ndotbelow",7750,"Nhookleft",413,"Nineroman",8552,"Nj",459,"Njecyrillic",1034,"Nlinebelow",7752,"Nmonospace",65326,"Nowarmenian",1350,"Nsmall",63342,"Ntilde",209,"Ntildesmall",63473,"Nu",925,"O",79,"OE",338,"OEsmall",63226,"Oacute",211,"Oacutesmall",63475,"Obarredcyrillic",1256,"Obarreddieresiscyrillic",1258,"Obreve",334,"Ocaron",465,"Ocenteredtilde",415,"Ocircle",9412,"Ocircumflex",212,"Ocircumflexacute",7888,"Ocircumflexdotbelow",7896,"Ocircumflexgrave",7890,"Ocircumflexhookabove",7892,"Ocircumflexsmall",63476,"Ocircumflextilde",7894,"Ocyrillic",1054,"Odblacute",336,"Odblgrave",524,"Odieresis",214,"Odieresiscyrillic",1254,"Odieresissmall",63478,"Odotbelow",7884,"Ogoneksmall",63227,"Ograve",210,"Ogravesmall",63474,"Oharmenian",1365,"Ohm",8486,"Ohookabove",7886,"Ohorn",416,"Ohornacute",7898,"Ohorndotbelow",7906,"Ohorngrave",7900,"Ohornhookabove",7902,"Ohorntilde",7904,"Ohungarumlaut",336,"Oi",418,"Oinvertedbreve",526,"Omacron",332,"Omacronacute",7762,"Omacrongrave",7760,"Omega",8486,"Omegacyrillic",1120,"Omegagreek",937,"Omegaroundcyrillic",1146,"Omegatitlocyrillic",1148,"Omegatonos",911,"Omicron",927,"Omicrontonos",908,"Omonospace",65327,"Oneroman",8544,"Oogonek",490,"Oogonekmacron",492,"Oopen",390,"Oslash",216,"Oslashacute",510,"Oslashsmall",63480,"Osmall",63343,"Ostrokeacute",510,"Otcyrillic",1150,"Otilde",213,"Otildeacute",7756,"Otildedieresis",7758,"Otildesmall",63477,"P",80,"Pacute",7764,"Pcircle",9413,"Pdotaccent",7766,"Pecyrillic",1055,"Peharmenian",1354,"Pemiddlehookcyrillic",1190,"Phi",934,"Phook",420,"Pi",928,"Piwrarmenian",1363,"Pmonospace",65328,"Psi",936,"Psicyrillic",1136,"Psmall",63344,"Q",81,"Qcircle",9414,"Qmonospace",65329,"Qsmall",63345,"R",82,"Raarmenian",1356,"Racute",340,"Rcaron",344,"Rcedilla",342,"Rcircle",9415,"Rcommaaccent",342,"Rdblgrave",528,"Rdotaccent",7768,"Rdotbelow",7770,"Rdotbelowmacron",7772,"Reharmenian",1360,"Rfraktur",8476,"Rho",929,"Ringsmall",63228,"Rinvertedbreve",530,"Rlinebelow",7774,"Rmonospace",65330,"Rsmall",63346,"Rsmallinverted",641,"Rsmallinvertedsuperior",694,"S",83,"SF010000",9484,"SF020000",9492,"SF030000",9488,"SF040000",9496,"SF050000",9532,"SF060000",9516,"SF070000",9524,"SF080000",9500,"SF090000",9508,"SF100000",9472,"SF110000",9474,"SF190000",9569,"SF200000",9570,"SF210000",9558,"SF220000",9557,"SF230000",9571,"SF240000",9553,"SF250000",9559,"SF260000",9565,"SF270000",9564,"SF280000",9563,"SF360000",9566,"SF370000",9567,"SF380000",9562,"SF390000",9556,"SF400000",9577,"SF410000",9574,"SF420000",9568,"SF430000",9552,"SF440000",9580,"SF450000",9575,"SF460000",9576,"SF470000",9572,"SF480000",9573,"SF490000",9561,"SF500000",9560,"SF510000",9554,"SF520000",9555,"SF530000",9579,"SF540000",9578,"Sacute",346,"Sacutedotaccent",7780,"Sampigreek",992,"Scaron",352,"Scarondotaccent",7782,"Scaronsmall",63229,"Scedilla",350,"Schwa",399,"Schwacyrillic",1240,"Schwadieresiscyrillic",1242,"Scircle",9416,"Scircumflex",348,"Scommaaccent",536,"Sdotaccent",7776,"Sdotbelow",7778,"Sdotbelowdotaccent",7784,"Seharmenian",1357,"Sevenroman",8550,"Shaarmenian",1351,"Shacyrillic",1064,"Shchacyrillic",1065,"Sheicoptic",994,"Shhacyrillic",1210,"Shimacoptic",1004,"Sigma",931,"Sixroman",8549,"Smonospace",65331,"Softsigncyrillic",1068,"Ssmall",63347,"Stigmagreek",986,"T",84,"Tau",932,"Tbar",358,"Tcaron",356,"Tcedilla",354,"Tcircle",9417,"Tcircumflexbelow",7792,"Tcommaaccent",354,"Tdotaccent",7786,"Tdotbelow",7788,"Tecyrillic",1058,"Tedescendercyrillic",1196,"Tenroman",8553,"Tetsecyrillic",1204,"Theta",920,"Thook",428,"Thorn",222,"Thornsmall",63486,"Threeroman",8546,"Tildesmall",63230,"Tiwnarmenian",1359,"Tlinebelow",7790,"Tmonospace",65332,"Toarmenian",1337,"Tonefive",444,"Tonesix",388,"Tonetwo",423,"Tretroflexhook",430,"Tsecyrillic",1062,"Tshecyrillic",1035,"Tsmall",63348,"Twelveroman",8555,"Tworoman",8545,"U",85,"Uacute",218,"Uacutesmall",63482,"Ubreve",364,"Ucaron",467,"Ucircle",9418,"Ucircumflex",219,"Ucircumflexbelow",7798,"Ucircumflexsmall",63483,"Ucyrillic",1059,"Udblacute",368,"Udblgrave",532,"Udieresis",220,"Udieresisacute",471,"Udieresisbelow",7794,"Udieresiscaron",473,"Udieresiscyrillic",1264,"Udieresisgrave",475,"Udieresismacron",469,"Udieresissmall",63484,"Udotbelow",7908,"Ugrave",217,"Ugravesmall",63481,"Uhookabove",7910,"Uhorn",431,"Uhornacute",7912,"Uhorndotbelow",7920,"Uhorngrave",7914,"Uhornhookabove",7916,"Uhorntilde",7918,"Uhungarumlaut",368,"Uhungarumlautcyrillic",1266,"Uinvertedbreve",534,"Ukcyrillic",1144,"Umacron",362,"Umacroncyrillic",1262,"Umacrondieresis",7802,"Umonospace",65333,"Uogonek",370,"Upsilon",933,"Upsilon1",978,"Upsilonacutehooksymbolgreek",979,"Upsilonafrican",433,"Upsilondieresis",939,"Upsilondieresishooksymbolgreek",980,"Upsilonhooksymbol",978,"Upsilontonos",910,"Uring",366,"Ushortcyrillic",1038,"Usmall",63349,"Ustraightcyrillic",1198,"Ustraightstrokecyrillic",1200,"Utilde",360,"Utildeacute",7800,"Utildebelow",7796,"V",86,"Vcircle",9419,"Vdotbelow",7806,"Vecyrillic",1042,"Vewarmenian",1358,"Vhook",434,"Vmonospace",65334,"Voarmenian",1352,"Vsmall",63350,"Vtilde",7804,"W",87,"Wacute",7810,"Wcircle",9420,"Wcircumflex",372,"Wdieresis",7812,"Wdotaccent",7814,"Wdotbelow",7816,"Wgrave",7808,"Wmonospace",65335,"Wsmall",63351,"X",88,"Xcircle",9421,"Xdieresis",7820,"Xdotaccent",7818,"Xeharmenian",1341,"Xi",926,"Xmonospace",65336,"Xsmall",63352,"Y",89,"Yacute",221,"Yacutesmall",63485,"Yatcyrillic",1122,"Ycircle",9422,"Ycircumflex",374,"Ydieresis",376,"Ydieresissmall",63487,"Ydotaccent",7822,"Ydotbelow",7924,"Yericyrillic",1067,"Yerudieresiscyrillic",1272,"Ygrave",7922,"Yhook",435,"Yhookabove",7926,"Yiarmenian",1349,"Yicyrillic",1031,"Yiwnarmenian",1362,"Ymonospace",65337,"Ysmall",63353,"Ytilde",7928,"Yusbigcyrillic",1130,"Yusbigiotifiedcyrillic",1132,"Yuslittlecyrillic",1126,"Yuslittleiotifiedcyrillic",1128,"Z",90,"Zaarmenian",1334,"Zacute",377,"Zcaron",381,"Zcaronsmall",63231,"Zcircle",9423,"Zcircumflex",7824,"Zdot",379,"Zdotaccent",379,"Zdotbelow",7826,"Zecyrillic",1047,"Zedescendercyrillic",1176,"Zedieresiscyrillic",1246,"Zeta",918,"Zhearmenian",1338,"Zhebrevecyrillic",1217,"Zhecyrillic",1046,"Zhedescendercyrillic",1174,"Zhedieresiscyrillic",1244,"Zlinebelow",7828,"Zmonospace",65338,"Zsmall",63354,"Zstroke",437,"a",97,"aabengali",2438,"aacute",225,"aadeva",2310,"aagujarati",2694,"aagurmukhi",2566,"aamatragurmukhi",2622,"aarusquare",13059,"aavowelsignbengali",2494,"aavowelsigndeva",2366,"aavowelsigngujarati",2750,"abbreviationmarkarmenian",1375,"abbreviationsigndeva",2416,"abengali",2437,"abopomofo",12570,"abreve",259,"abreveacute",7855,"abrevecyrillic",1233,"abrevedotbelow",7863,"abrevegrave",7857,"abrevehookabove",7859,"abrevetilde",7861,"acaron",462,"acircle",9424,"acircumflex",226,"acircumflexacute",7845,"acircumflexdotbelow",7853,"acircumflexgrave",7847,"acircumflexhookabove",7849,"acircumflextilde",7851,"acute",180,"acutebelowcmb",791,"acutecmb",769,"acutecomb",769,"acutedeva",2388,"acutelowmod",719,"acutetonecmb",833,"acyrillic",1072,"adblgrave",513,"addakgurmukhi",2673,"adeva",2309,"adieresis",228,"adieresiscyrillic",1235,"adieresismacron",479,"adotbelow",7841,"adotmacron",481,"ae",230,"aeacute",509,"aekorean",12624,"aemacron",483,"afii00208",8213,"afii08941",8356,"afii10017",1040,"afii10018",1041,"afii10019",1042,"afii10020",1043,"afii10021",1044,"afii10022",1045,"afii10023",1025,"afii10024",1046,"afii10025",1047,"afii10026",1048,"afii10027",1049,"afii10028",1050,"afii10029",1051,"afii10030",1052,"afii10031",1053,"afii10032",1054,"afii10033",1055,"afii10034",1056,"afii10035",1057,"afii10036",1058,"afii10037",1059,"afii10038",1060,"afii10039",1061,"afii10040",1062,"afii10041",1063,"afii10042",1064,"afii10043",1065,"afii10044",1066,"afii10045",1067,"afii10046",1068,"afii10047",1069,"afii10048",1070,"afii10049",1071,"afii10050",1168,"afii10051",1026,"afii10052",1027,"afii10053",1028,"afii10054",1029,"afii10055",1030,"afii10056",1031,"afii10057",1032,"afii10058",1033,"afii10059",1034,"afii10060",1035,"afii10061",1036,"afii10062",1038,"afii10063",63172,"afii10064",63173,"afii10065",1072,"afii10066",1073,"afii10067",1074,"afii10068",1075,"afii10069",1076,"afii10070",1077,"afii10071",1105,"afii10072",1078,"afii10073",1079,"afii10074",1080,"afii10075",1081,"afii10076",1082,"afii10077",1083,"afii10078",1084,"afii10079",1085,"afii10080",1086,"afii10081",1087,"afii10082",1088,"afii10083",1089,"afii10084",1090,"afii10085",1091,"afii10086",1092,"afii10087",1093,"afii10088",1094,"afii10089",1095,"afii10090",1096,"afii10091",1097,"afii10092",1098,"afii10093",1099,"afii10094",1100,"afii10095",1101,"afii10096",1102,"afii10097",1103,"afii10098",1169,"afii10099",1106,"afii10100",1107,"afii10101",1108,"afii10102",1109,"afii10103",1110,"afii10104",1111,"afii10105",1112,"afii10106",1113,"afii10107",1114,"afii10108",1115,"afii10109",1116,"afii10110",1118,"afii10145",1039,"afii10146",1122,"afii10147",1138,"afii10148",1140,"afii10192",63174,"afii10193",1119,"afii10194",1123,"afii10195",1139,"afii10196",1141,"afii10831",63175,"afii10832",63176,"afii10846",1241,"afii299",8206,"afii300",8207,"afii301",8205,"afii57381",1642,"afii57388",1548,"afii57392",1632,"afii57393",1633,"afii57394",1634,"afii57395",1635,"afii57396",1636,"afii57397",1637,"afii57398",1638,"afii57399",1639,"afii57400",1640,"afii57401",1641,"afii57403",1563,"afii57407",1567,"afii57409",1569,"afii57410",1570,"afii57411",1571,"afii57412",1572,"afii57413",1573,"afii57414",1574,"afii57415",1575,"afii57416",1576,"afii57417",1577,"afii57418",1578,"afii57419",1579,"afii57420",1580,"afii57421",1581,"afii57422",1582,"afii57423",1583,"afii57424",1584,"afii57425",1585,"afii57426",1586,"afii57427",1587,"afii57428",1588,"afii57429",1589,"afii57430",1590,"afii57431",1591,"afii57432",1592,"afii57433",1593,"afii57434",1594,"afii57440",1600,"afii57441",1601,"afii57442",1602,"afii57443",1603,"afii57444",1604,"afii57445",1605,"afii57446",1606,"afii57448",1608,"afii57449",1609,"afii57450",1610,"afii57451",1611,"afii57452",1612,"afii57453",1613,"afii57454",1614,"afii57455",1615,"afii57456",1616,"afii57457",1617,"afii57458",1618,"afii57470",1607,"afii57505",1700,"afii57506",1662,"afii57507",1670,"afii57508",1688,"afii57509",1711,"afii57511",1657,"afii57512",1672,"afii57513",1681,"afii57514",1722,"afii57519",1746,"afii57534",1749,"afii57636",8362,"afii57645",1470,"afii57658",1475,"afii57664",1488,"afii57665",1489,"afii57666",1490,"afii57667",1491,"afii57668",1492,"afii57669",1493,"afii57670",1494,"afii57671",1495,"afii57672",1496,"afii57673",1497,"afii57674",1498,"afii57675",1499,"afii57676",1500,"afii57677",1501,"afii57678",1502,"afii57679",1503,"afii57680",1504,"afii57681",1505,"afii57682",1506,"afii57683",1507,"afii57684",1508,"afii57685",1509,"afii57686",1510,"afii57687",1511,"afii57688",1512,"afii57689",1513,"afii57690",1514,"afii57694",64298,"afii57695",64299,"afii57700",64331,"afii57705",64287,"afii57716",1520,"afii57717",1521,"afii57718",1522,"afii57723",64309,"afii57793",1460,"afii57794",1461,"afii57795",1462,"afii57796",1467,"afii57797",1464,"afii57798",1463,"afii57799",1456,"afii57800",1458,"afii57801",1457,"afii57802",1459,"afii57803",1474,"afii57804",1473,"afii57806",1465,"afii57807",1468,"afii57839",1469,"afii57841",1471,"afii57842",1472,"afii57929",700,"afii61248",8453,"afii61289",8467,"afii61352",8470,"afii61573",8236,"afii61574",8237,"afii61575",8238,"afii61664",8204,"afii63167",1645,"afii64937",701,"agrave",224,"agujarati",2693,"agurmukhi",2565,"ahiragana",12354,"ahookabove",7843,"aibengali",2448,"aibopomofo",12574,"aideva",2320,"aiecyrillic",1237,"aigujarati",2704,"aigurmukhi",2576,"aimatragurmukhi",2632,"ainarabic",1593,"ainfinalarabic",65226,"aininitialarabic",65227,"ainmedialarabic",65228,"ainvertedbreve",515,"aivowelsignbengali",2504,"aivowelsigndeva",2376,"aivowelsigngujarati",2760,"akatakana",12450,"akatakanahalfwidth",65393,"akorean",12623,"alef",1488,"alefarabic",1575,"alefdageshhebrew",64304,"aleffinalarabic",65166,"alefhamzaabovearabic",1571,"alefhamzaabovefinalarabic",65156,"alefhamzabelowarabic",1573,"alefhamzabelowfinalarabic",65160,"alefhebrew",1488,"aleflamedhebrew",64335,"alefmaddaabovearabic",1570,"alefmaddaabovefinalarabic",65154,"alefmaksuraarabic",1609,"alefmaksurafinalarabic",65264,"alefmaksurainitialarabic",65267,"alefmaksuramedialarabic",65268,"alefpatahhebrew",64302,"alefqamatshebrew",64303,"aleph",8501,"allequal",8780,"alpha",945,"alphatonos",940,"amacron",257,"amonospace",65345,"ampersand",38,"ampersandmonospace",65286,"ampersandsmall",63270,"amsquare",13250,"anbopomofo",12578,"angbopomofo",12580,"angbracketleft",12296,"angbracketright",12297,"angkhankhuthai",3674,"angle",8736,"anglebracketleft",12296,"anglebracketleftvertical",65087,"anglebracketright",12297,"anglebracketrightvertical",65088,"angleleft",9001,"angleright",9002,"angstrom",8491,"anoteleia",903,"anudattadeva",2386,"anusvarabengali",2434,"anusvaradeva",2306,"anusvaragujarati",2690,"aogonek",261,"apaatosquare",13056,"aparen",9372,"apostrophearmenian",1370,"apostrophemod",700,"apple",63743,"approaches",8784,"approxequal",8776,"approxequalorimage",8786,"approximatelyequal",8773,"araeaekorean",12686,"araeakorean",12685,"arc",8978,"arighthalfring",7834,"aring",229,"aringacute",507,"aringbelow",7681,"arrowboth",8596,"arrowdashdown",8675,"arrowdashleft",8672,"arrowdashright",8674,"arrowdashup",8673,"arrowdblboth",8660,"arrowdbldown",8659,"arrowdblleft",8656,"arrowdblright",8658,"arrowdblup",8657,"arrowdown",8595,"arrowdownleft",8601,"arrowdownright",8600,"arrowdownwhite",8681,"arrowheaddownmod",709,"arrowheadleftmod",706,"arrowheadrightmod",707,"arrowheadupmod",708,"arrowhorizex",63719,"arrowleft",8592,"arrowleftdbl",8656,"arrowleftdblstroke",8653,"arrowleftoverright",8646,"arrowleftwhite",8678,"arrowright",8594,"arrowrightdblstroke",8655,"arrowrightheavy",10142,"arrowrightoverleft",8644,"arrowrightwhite",8680,"arrowtableft",8676,"arrowtabright",8677,"arrowup",8593,"arrowupdn",8597,"arrowupdnbse",8616,"arrowupdownbase",8616,"arrowupleft",8598,"arrowupleftofdown",8645,"arrowupright",8599,"arrowupwhite",8679,"arrowvertex",63718,"asciicircum",94,"asciicircummonospace",65342,"asciitilde",126,"asciitildemonospace",65374,"ascript",593,"ascriptturned",594,"asmallhiragana",12353,"asmallkatakana",12449,"asmallkatakanahalfwidth",65383,"asterisk",42,"asteriskaltonearabic",1645,"asteriskarabic",1645,"asteriskmath",8727,"asteriskmonospace",65290,"asterisksmall",65121,"asterism",8258,"asuperior",63209,"asymptoticallyequal",8771,"at",64,"atilde",227,"atmonospace",65312,"atsmall",65131,"aturned",592,"aubengali",2452,"aubopomofo",12576,"audeva",2324,"augujarati",2708,"augurmukhi",2580,"aulengthmarkbengali",2519,"aumatragurmukhi",2636,"auvowelsignbengali",2508,"auvowelsigndeva",2380,"auvowelsigngujarati",2764,"avagrahadeva",2365,"aybarmenian",1377,"ayin",1506,"ayinaltonehebrew",64288,"ayinhebrew",1506,"b",98,"babengali",2476,"backslash",92,"backslashmonospace",65340,"badeva",2348,"bagujarati",2732,"bagurmukhi",2604,"bahiragana",12400,"bahtthai",3647,"bakatakana",12496,"bar",124,"barmonospace",65372,"bbopomofo",12549,"bcircle",9425,"bdotaccent",7683,"bdotbelow",7685,"beamedsixteenthnotes",9836,"because",8757,"becyrillic",1073,"beharabic",1576,"behfinalarabic",65168,"behinitialarabic",65169,"behiragana",12409,"behmedialarabic",65170,"behmeeminitialarabic",64671,"behmeemisolatedarabic",64520,"behnoonfinalarabic",64621,"bekatakana",12505,"benarmenian",1378,"bet",1489,"beta",946,"betasymbolgreek",976,"betdagesh",64305,"betdageshhebrew",64305,"bethebrew",1489,"betrafehebrew",64332,"bhabengali",2477,"bhadeva",2349,"bhagujarati",2733,"bhagurmukhi",2605,"bhook",595,"bihiragana",12403,"bikatakana",12499,"bilabialclick",664,"bindigurmukhi",2562,"birusquare",13105,"blackcircle",9679,"blackdiamond",9670,"blackdownpointingtriangle",9660,"blackleftpointingpointer",9668,"blackleftpointingtriangle",9664,"blacklenticularbracketleft",12304,"blacklenticularbracketleftvertical",65083,"blacklenticularbracketright",12305,"blacklenticularbracketrightvertical",65084,"blacklowerlefttriangle",9699,"blacklowerrighttriangle",9698,"blackrectangle",9644,"blackrightpointingpointer",9658,"blackrightpointingtriangle",9654,"blacksmallsquare",9642,"blacksmilingface",9787,"blacksquare",9632,"blackstar",9733,"blackupperlefttriangle",9700,"blackupperrighttriangle",9701,"blackuppointingsmalltriangle",9652,"blackuppointingtriangle",9650,"blank",9251,"blinebelow",7687,"block",9608,"bmonospace",65346,"bobaimaithai",3610,"bohiragana",12412,"bokatakana",12508,"bparen",9373,"bqsquare",13251,"braceex",63732,"braceleft",123,"braceleftbt",63731,"braceleftmid",63730,"braceleftmonospace",65371,"braceleftsmall",65115,"bracelefttp",63729,"braceleftvertical",65079,"braceright",125,"bracerightbt",63742,"bracerightmid",63741,"bracerightmonospace",65373,"bracerightsmall",65116,"bracerighttp",63740,"bracerightvertical",65080,"bracketleft",91,"bracketleftbt",63728,"bracketleftex",63727,"bracketleftmonospace",65339,"bracketlefttp",63726,"bracketright",93,"bracketrightbt",63739,"bracketrightex",63738,"bracketrightmonospace",65341,"bracketrighttp",63737,"breve",728,"brevebelowcmb",814,"brevecmb",774,"breveinvertedbelowcmb",815,"breveinvertedcmb",785,"breveinverteddoublecmb",865,"bridgebelowcmb",810,"bridgeinvertedbelowcmb",826,"brokenbar",166,"bstroke",384,"bsuperior",63210,"btopbar",387,"buhiragana",12406,"bukatakana",12502,"bullet",8226,"bulletinverse",9688,"bulletoperator",8729,"bullseye",9678,"c",99,"caarmenian",1390,"cabengali",2458,"cacute",263,"cadeva",2330,"cagujarati",2714,"cagurmukhi",2586,"calsquare",13192,"candrabindubengali",2433,"candrabinducmb",784,"candrabindudeva",2305,"candrabindugujarati",2689,"capslock",8682,"careof",8453,"caron",711,"caronbelowcmb",812,"caroncmb",780,"carriagereturn",8629,"cbopomofo",12568,"ccaron",269,"ccedilla",231,"ccedillaacute",7689,"ccircle",9426,"ccircumflex",265,"ccurl",597,"cdot",267,"cdotaccent",267,"cdsquare",13253,"cedilla",184,"cedillacmb",807,"cent",162,"centigrade",8451,"centinferior",63199,"centmonospace",65504,"centoldstyle",63394,"centsuperior",63200,"chaarmenian",1401,"chabengali",2459,"chadeva",2331,"chagujarati",2715,"chagurmukhi",2587,"chbopomofo",12564,"cheabkhasiancyrillic",1213,"checkmark",10003,"checyrillic",1095,"chedescenderabkhasiancyrillic",1215,"chedescendercyrillic",1207,"chedieresiscyrillic",1269,"cheharmenian",1395,"chekhakassiancyrillic",1228,"cheverticalstrokecyrillic",1209,"chi",967,"chieuchacirclekorean",12919,"chieuchaparenkorean",12823,"chieuchcirclekorean",12905,"chieuchkorean",12618,"chieuchparenkorean",12809,"chochangthai",3594,"chochanthai",3592,"chochingthai",3593,"chochoethai",3596,"chook",392,"cieucacirclekorean",12918,"cieucaparenkorean",12822,"cieuccirclekorean",12904,"cieuckorean",12616,"cieucparenkorean",12808,"cieucuparenkorean",12828,"circle",9675,"circlecopyrt",169,"circlemultiply",8855,"circleot",8857,"circleplus",8853,"circlepostalmark",12342,"circlewithlefthalfblack",9680,"circlewithrighthalfblack",9681,"circumflex",710,"circumflexbelowcmb",813,"circumflexcmb",770,"clear",8999,"clickalveolar",450,"clickdental",448,"clicklateral",449,"clickretroflex",451,"club",9827,"clubsuitblack",9827,"clubsuitwhite",9831,"cmcubedsquare",13220,"cmonospace",65347,"cmsquaredsquare",13216,"coarmenian",1409,"colon",58,"colonmonetary",8353,"colonmonospace",65306,"colonsign",8353,"colonsmall",65109,"colontriangularhalfmod",721,"colontriangularmod",720,"comma",44,"commaabovecmb",787,"commaaboverightcmb",789,"commaaccent",63171,"commaarabic",1548,"commaarmenian",1373,"commainferior",63201,"commamonospace",65292,"commareversedabovecmb",788,"commareversedmod",701,"commasmall",65104,"commasuperior",63202,"commaturnedabovecmb",786,"commaturnedmod",699,"compass",9788,"congruent",8773,"contourintegral",8750,"control",8963,"controlACK",6,"controlBEL",7,"controlBS",8,"controlCAN",24,"controlCR",13,"controlDC1",17,"controlDC2",18,"controlDC3",19,"controlDC4",20,"controlDEL",127,"controlDLE",16,"controlEM",25,"controlENQ",5,"controlEOT",4,"controlESC",27,"controlETB",23,"controlETX",3,"controlFF",12,"controlFS",28,"controlGS",29,"controlHT",9,"controlLF",10,"controlNAK",21,"controlNULL",0,"controlRS",30,"controlSI",15,"controlSO",14,"controlSOT",2,"controlSTX",1,"controlSUB",26,"controlSYN",22,"controlUS",31,"controlVT",11,"copyright",169,"copyrightsans",63721,"copyrightserif",63193,"cornerbracketleft",12300,"cornerbracketlefthalfwidth",65378,"cornerbracketleftvertical",65089,"cornerbracketright",12301,"cornerbracketrighthalfwidth",65379,"cornerbracketrightvertical",65090,"corporationsquare",13183,"cosquare",13255,"coverkgsquare",13254,"cparen",9374,"cruzeiro",8354,"cstretched",663,"curlyand",8911,"curlyor",8910,"currency",164,"cyrBreve",63185,"cyrFlex",63186,"cyrbreve",63188,"cyrflex",63189,"d",100,"daarmenian",1380,"dabengali",2470,"dadarabic",1590,"dadeva",2342,"dadfinalarabic",65214,"dadinitialarabic",65215,"dadmedialarabic",65216,"dagesh",1468,"dageshhebrew",1468,"dagger",8224,"daggerdbl",8225,"dagujarati",2726,"dagurmukhi",2598,"dahiragana",12384,"dakatakana",12480,"dalarabic",1583,"dalet",1491,"daletdagesh",64307,"daletdageshhebrew",64307,"dalethebrew",1491,"dalfinalarabic",65194,"dammaarabic",1615,"dammalowarabic",1615,"dammatanaltonearabic",1612,"dammatanarabic",1612,"danda",2404,"dargahebrew",1447,"dargalefthebrew",1447,"dasiapneumatacyrilliccmb",1157,"dblGrave",63187,"dblanglebracketleft",12298,"dblanglebracketleftvertical",65085,"dblanglebracketright",12299,"dblanglebracketrightvertical",65086,"dblarchinvertedbelowcmb",811,"dblarrowleft",8660,"dblarrowright",8658,"dbldanda",2405,"dblgrave",63190,"dblgravecmb",783,"dblintegral",8748,"dbllowline",8215,"dbllowlinecmb",819,"dbloverlinecmb",831,"dblprimemod",698,"dblverticalbar",8214,"dblverticallineabovecmb",782,"dbopomofo",12553,"dbsquare",13256,"dcaron",271,"dcedilla",7697,"dcircle",9427,"dcircumflexbelow",7699,"dcroat",273,"ddabengali",2465,"ddadeva",2337,"ddagujarati",2721,"ddagurmukhi",2593,"ddalarabic",1672,"ddalfinalarabic",64393,"dddhadeva",2396,"ddhabengali",2466,"ddhadeva",2338,"ddhagujarati",2722,"ddhagurmukhi",2594,"ddotaccent",7691,"ddotbelow",7693,"decimalseparatorarabic",1643,"decimalseparatorpersian",1643,"decyrillic",1076,"degree",176,"dehihebrew",1453,"dehiragana",12391,"deicoptic",1007,"dekatakana",12487,"deleteleft",9003,"deleteright",8998,"delta",948,"deltaturned",397,"denominatorminusonenumeratorbengali",2552,"dezh",676,"dhabengali",2471,"dhadeva",2343,"dhagujarati",2727,"dhagurmukhi",2599,"dhook",599,"dialytikatonos",901,"dialytikatonoscmb",836,"diamond",9830,"diamondsuitwhite",9826,"dieresis",168,"dieresisacute",63191,"dieresisbelowcmb",804,"dieresiscmb",776,"dieresisgrave",63192,"dieresistonos",901,"dihiragana",12386,"dikatakana",12482,"dittomark",12291,"divide",247,"divides",8739,"divisionslash",8725,"djecyrillic",1106,"dkshade",9619,"dlinebelow",7695,"dlsquare",13207,"dmacron",273,"dmonospace",65348,"dnblock",9604,"dochadathai",3598,"dodekthai",3604,"dohiragana",12393,"dokatakana",12489,"dollar",36,"dollarinferior",63203,"dollarmonospace",65284,"dollaroldstyle",63268,"dollarsmall",65129,"dollarsuperior",63204,"dong",8363,"dorusquare",13094,"dotaccent",729,"dotaccentcmb",775,"dotbelowcmb",803,"dotbelowcomb",803,"dotkatakana",12539,"dotlessi",305,"dotlessj",63166,"dotlessjstrokehook",644,"dotmath",8901,"dottedcircle",9676,"doubleyodpatah",64287,"doubleyodpatahhebrew",64287,"downtackbelowcmb",798,"downtackmod",725,"dparen",9375,"dsuperior",63211,"dtail",598,"dtopbar",396,"duhiragana",12389,"dukatakana",12485,"dz",499,"dzaltone",675,"dzcaron",454,"dzcurl",677,"dzeabkhasiancyrillic",1249,"dzecyrillic",1109,"dzhecyrillic",1119,"e",101,"eacute",233,"earth",9793,"ebengali",2447,"ebopomofo",12572,"ebreve",277,"ecandradeva",2317,"ecandragujarati",2701,"ecandravowelsigndeva",2373,"ecandravowelsigngujarati",2757,"ecaron",283,"ecedillabreve",7709,"echarmenian",1381,"echyiwnarmenian",1415,"ecircle",9428,"ecircumflex",234,"ecircumflexacute",7871,"ecircumflexbelow",7705,"ecircumflexdotbelow",7879,"ecircumflexgrave",7873,"ecircumflexhookabove",7875,"ecircumflextilde",7877,"ecyrillic",1108,"edblgrave",517,"edeva",2319,"edieresis",235,"edot",279,"edotaccent",279,"edotbelow",7865,"eegurmukhi",2575,"eematragurmukhi",2631,"efcyrillic",1092,"egrave",232,"egujarati",2703,"eharmenian",1383,"ehbopomofo",12573,"ehiragana",12360,"ehookabove",7867,"eibopomofo",12575,"eight",56,"eightarabic",1640,"eightbengali",2542,"eightcircle",9319,"eightcircleinversesansserif",10129,"eightdeva",2414,"eighteencircle",9329,"eighteenparen",9349,"eighteenperiod",9369,"eightgujarati",2798,"eightgurmukhi",2670,"eighthackarabic",1640,"eighthangzhou",12328,"eighthnotebeamed",9835,"eightideographicparen",12839,"eightinferior",8328,"eightmonospace",65304,"eightoldstyle",63288,"eightparen",9339,"eightperiod",9359,"eightpersian",1784,"eightroman",8567,"eightsuperior",8312,"eightthai",3672,"einvertedbreve",519,"eiotifiedcyrillic",1125,"ekatakana",12456,"ekatakanahalfwidth",65396,"ekonkargurmukhi",2676,"ekorean",12628,"elcyrillic",1083,"element",8712,"elevencircle",9322,"elevenparen",9342,"elevenperiod",9362,"elevenroman",8570,"ellipsis",8230,"ellipsisvertical",8942,"emacron",275,"emacronacute",7703,"emacrongrave",7701,"emcyrillic",1084,"emdash",8212,"emdashvertical",65073,"emonospace",65349,"emphasismarkarmenian",1371,"emptyset",8709,"enbopomofo",12579,"encyrillic",1085,"endash",8211,"endashvertical",65074,"endescendercyrillic",1187,"eng",331,"engbopomofo",12581,"enghecyrillic",1189,"enhookcyrillic",1224,"enspace",8194,"eogonek",281,"eokorean",12627,"eopen",603,"eopenclosed",666,"eopenreversed",604,"eopenreversedclosed",606,"eopenreversedhook",605,"eparen",9376,"epsilon",949,"epsilontonos",941,"equal",61,"equalmonospace",65309,"equalsmall",65126,"equalsuperior",8316,"equivalence",8801,"erbopomofo",12582,"ercyrillic",1088,"ereversed",600,"ereversedcyrillic",1101,"escyrillic",1089,"esdescendercyrillic",1195,"esh",643,"eshcurl",646,"eshortdeva",2318,"eshortvowelsigndeva",2374,"eshreversedloop",426,"eshsquatreversed",645,"esmallhiragana",12359,"esmallkatakana",12455,"esmallkatakanahalfwidth",65386,"estimated",8494,"esuperior",63212,"eta",951,"etarmenian",1384,"etatonos",942,"eth",240,"etilde",7869,"etildebelow",7707,"etnahtafoukhhebrew",1425,"etnahtafoukhlefthebrew",1425,"etnahtahebrew",1425,"etnahtalefthebrew",1425,"eturned",477,"eukorean",12641,"euro",8364,"evowelsignbengali",2503,"evowelsigndeva",2375,"evowelsigngujarati",2759,"exclam",33,"exclamarmenian",1372,"exclamdbl",8252,"exclamdown",161,"exclamdownsmall",63393,"exclammonospace",65281,"exclamsmall",63265,"existential",8707,"ezh",658,"ezhcaron",495,"ezhcurl",659,"ezhreversed",441,"ezhtail",442,"f",102,"fadeva",2398,"fagurmukhi",2654,"fahrenheit",8457,"fathaarabic",1614,"fathalowarabic",1614,"fathatanarabic",1611,"fbopomofo",12552,"fcircle",9429,"fdotaccent",7711,"feharabic",1601,"feharmenian",1414,"fehfinalarabic",65234,"fehinitialarabic",65235,"fehmedialarabic",65236,"feicoptic",997,"female",9792,"ff",64256,"f_f",64256,"ffi",64259,"f_f_i",64259,"ffl",64260,"f_f_l",64260,"fi",64257,"f_i",64257,"fifteencircle",9326,"fifteenparen",9346,"fifteenperiod",9366,"figuredash",8210,"filledbox",9632,"filledrect",9644,"finalkaf",1498,"finalkafdagesh",64314,"finalkafdageshhebrew",64314,"finalkafhebrew",1498,"finalmem",1501,"finalmemhebrew",1501,"finalnun",1503,"finalnunhebrew",1503,"finalpe",1507,"finalpehebrew",1507,"finaltsadi",1509,"finaltsadihebrew",1509,"firsttonechinese",713,"fisheye",9673,"fitacyrillic",1139,"five",53,"fivearabic",1637,"fivebengali",2539,"fivecircle",9316,"fivecircleinversesansserif",10126,"fivedeva",2411,"fiveeighths",8541,"fivegujarati",2795,"fivegurmukhi",2667,"fivehackarabic",1637,"fivehangzhou",12325,"fiveideographicparen",12836,"fiveinferior",8325,"fivemonospace",65301,"fiveoldstyle",63285,"fiveparen",9336,"fiveperiod",9356,"fivepersian",1781,"fiveroman",8564,"fivesuperior",8309,"fivethai",3669,"fl",64258,"f_l",64258,"florin",402,"fmonospace",65350,"fmsquare",13209,"fofanthai",3615,"fofathai",3613,"fongmanthai",3663,"forall",8704,"four",52,"fourarabic",1636,"fourbengali",2538,"fourcircle",9315,"fourcircleinversesansserif",10125,"fourdeva",2410,"fourgujarati",2794,"fourgurmukhi",2666,"fourhackarabic",1636,"fourhangzhou",12324,"fourideographicparen",12835,"fourinferior",8324,"fourmonospace",65300,"fournumeratorbengali",2551,"fouroldstyle",63284,"fourparen",9335,"fourperiod",9355,"fourpersian",1780,"fourroman",8563,"foursuperior",8308,"fourteencircle",9325,"fourteenparen",9345,"fourteenperiod",9365,"fourthai",3668,"fourthtonechinese",715,"fparen",9377,"fraction",8260,"franc",8355,"g",103,"gabengali",2455,"gacute",501,"gadeva",2327,"gafarabic",1711,"gaffinalarabic",64403,"gafinitialarabic",64404,"gafmedialarabic",64405,"gagujarati",2711,"gagurmukhi",2583,"gahiragana",12364,"gakatakana",12460,"gamma",947,"gammalatinsmall",611,"gammasuperior",736,"gangiacoptic",1003,"gbopomofo",12557,"gbreve",287,"gcaron",487,"gcedilla",291,"gcircle",9430,"gcircumflex",285,"gcommaaccent",291,"gdot",289,"gdotaccent",289,"gecyrillic",1075,"gehiragana",12370,"gekatakana",12466,"geometricallyequal",8785,"gereshaccenthebrew",1436,"gereshhebrew",1523,"gereshmuqdamhebrew",1437,"germandbls",223,"gershayimaccenthebrew",1438,"gershayimhebrew",1524,"getamark",12307,"ghabengali",2456,"ghadarmenian",1394,"ghadeva",2328,"ghagujarati",2712,"ghagurmukhi",2584,"ghainarabic",1594,"ghainfinalarabic",65230,"ghaininitialarabic",65231,"ghainmedialarabic",65232,"ghemiddlehookcyrillic",1173,"ghestrokecyrillic",1171,"gheupturncyrillic",1169,"ghhadeva",2394,"ghhagurmukhi",2650,"ghook",608,"ghzsquare",13203,"gihiragana",12366,"gikatakana",12462,"gimarmenian",1379,"gimel",1490,"gimeldagesh",64306,"gimeldageshhebrew",64306,"gimelhebrew",1490,"gjecyrillic",1107,"glottalinvertedstroke",446,"glottalstop",660,"glottalstopinverted",662,"glottalstopmod",704,"glottalstopreversed",661,"glottalstopreversedmod",705,"glottalstopreversedsuperior",740,"glottalstopstroke",673,"glottalstopstrokereversed",674,"gmacron",7713,"gmonospace",65351,"gohiragana",12372,"gokatakana",12468,"gparen",9378,"gpasquare",13228,"gradient",8711,"grave",96,"gravebelowcmb",790,"gravecmb",768,"gravecomb",768,"gravedeva",2387,"gravelowmod",718,"gravemonospace",65344,"gravetonecmb",832,"greater",62,"greaterequal",8805,"greaterequalorless",8923,"greatermonospace",65310,"greaterorequivalent",8819,"greaterorless",8823,"greateroverequal",8807,"greatersmall",65125,"gscript",609,"gstroke",485,"guhiragana",12368,"guillemotleft",171,"guillemotright",187,"guilsinglleft",8249,"guilsinglright",8250,"gukatakana",12464,"guramusquare",13080,"gysquare",13257,"h",104,"haabkhasiancyrillic",1193,"haaltonearabic",1729,"habengali",2489,"hadescendercyrillic",1203,"hadeva",2361,"hagujarati",2745,"hagurmukhi",2617,"haharabic",1581,"hahfinalarabic",65186,"hahinitialarabic",65187,"hahiragana",12399,"hahmedialarabic",65188,"haitusquare",13098,"hakatakana",12495,"hakatakanahalfwidth",65418,"halantgurmukhi",2637,"hamzaarabic",1569,"hamzalowarabic",1569,"hangulfiller",12644,"hardsigncyrillic",1098,"harpoonleftbarbup",8636,"harpoonrightbarbup",8640,"hasquare",13258,"hatafpatah",1458,"hatafpatah16",1458,"hatafpatah23",1458,"hatafpatah2f",1458,"hatafpatahhebrew",1458,"hatafpatahnarrowhebrew",1458,"hatafpatahquarterhebrew",1458,"hatafpatahwidehebrew",1458,"hatafqamats",1459,"hatafqamats1b",1459,"hatafqamats28",1459,"hatafqamats34",1459,"hatafqamatshebrew",1459,"hatafqamatsnarrowhebrew",1459,"hatafqamatsquarterhebrew",1459,"hatafqamatswidehebrew",1459,"hatafsegol",1457,"hatafsegol17",1457,"hatafsegol24",1457,"hatafsegol30",1457,"hatafsegolhebrew",1457,"hatafsegolnarrowhebrew",1457,"hatafsegolquarterhebrew",1457,"hatafsegolwidehebrew",1457,"hbar",295,"hbopomofo",12559,"hbrevebelow",7723,"hcedilla",7721,"hcircle",9431,"hcircumflex",293,"hdieresis",7719,"hdotaccent",7715,"hdotbelow",7717,"he",1492,"heart",9829,"heartsuitblack",9829,"heartsuitwhite",9825,"hedagesh",64308,"hedageshhebrew",64308,"hehaltonearabic",1729,"heharabic",1607,"hehebrew",1492,"hehfinalaltonearabic",64423,"hehfinalalttwoarabic",65258,"hehfinalarabic",65258,"hehhamzaabovefinalarabic",64421,"hehhamzaaboveisolatedarabic",64420,"hehinitialaltonearabic",64424,"hehinitialarabic",65259,"hehiragana",12408,"hehmedialaltonearabic",64425,"hehmedialarabic",65260,"heiseierasquare",13179,"hekatakana",12504,"hekatakanahalfwidth",65421,"hekutaarusquare",13110,"henghook",615,"herutusquare",13113,"het",1495,"hethebrew",1495,"hhook",614,"hhooksuperior",689,"hieuhacirclekorean",12923,"hieuhaparenkorean",12827,"hieuhcirclekorean",12909,"hieuhkorean",12622,"hieuhparenkorean",12813,"hihiragana",12402,"hikatakana",12498,"hikatakanahalfwidth",65419,"hiriq",1460,"hiriq14",1460,"hiriq21",1460,"hiriq2d",1460,"hiriqhebrew",1460,"hiriqnarrowhebrew",1460,"hiriqquarterhebrew",1460,"hiriqwidehebrew",1460,"hlinebelow",7830,"hmonospace",65352,"hoarmenian",1392,"hohipthai",3627,"hohiragana",12411,"hokatakana",12507,"hokatakanahalfwidth",65422,"holam",1465,"holam19",1465,"holam26",1465,"holam32",1465,"holamhebrew",1465,"holamnarrowhebrew",1465,"holamquarterhebrew",1465,"holamwidehebrew",1465,"honokhukthai",3630,"hookabovecomb",777,"hookcmb",777,"hookpalatalizedbelowcmb",801,"hookretroflexbelowcmb",802,"hoonsquare",13122,"horicoptic",1001,"horizontalbar",8213,"horncmb",795,"hotsprings",9832,"house",8962,"hparen",9379,"hsuperior",688,"hturned",613,"huhiragana",12405,"huiitosquare",13107,"hukatakana",12501,"hukatakanahalfwidth",65420,"hungarumlaut",733,"hungarumlautcmb",779,"hv",405,"hyphen",45,"hypheninferior",63205,"hyphenmonospace",65293,"hyphensmall",65123,"hyphensuperior",63206,"hyphentwo",8208,"i",105,"iacute",237,"iacyrillic",1103,"ibengali",2439,"ibopomofo",12583,"ibreve",301,"icaron",464,"icircle",9432,"icircumflex",238,"icyrillic",1110,"idblgrave",521,"ideographearthcircle",12943,"ideographfirecircle",12939,"ideographicallianceparen",12863,"ideographiccallparen",12858,"ideographiccentrecircle",12965,"ideographicclose",12294,"ideographiccomma",12289,"ideographiccommaleft",65380,"ideographiccongratulationparen",12855,"ideographiccorrectcircle",12963,"ideographicearthparen",12847,"ideographicenterpriseparen",12861,"ideographicexcellentcircle",12957,"ideographicfestivalparen",12864,"ideographicfinancialcircle",12950,"ideographicfinancialparen",12854,"ideographicfireparen",12843,"ideographichaveparen",12850,"ideographichighcircle",12964,"ideographiciterationmark",12293,"ideographiclaborcircle",12952,"ideographiclaborparen",12856,"ideographicleftcircle",12967,"ideographiclowcircle",12966,"ideographicmedicinecircle",12969,"ideographicmetalparen",12846,"ideographicmoonparen",12842,"ideographicnameparen",12852,"ideographicperiod",12290,"ideographicprintcircle",12958,"ideographicreachparen",12867,"ideographicrepresentparen",12857,"ideographicresourceparen",12862,"ideographicrightcircle",12968,"ideographicsecretcircle",12953,"ideographicselfparen",12866,"ideographicsocietyparen",12851,"ideographicspace",12288,"ideographicspecialparen",12853,"ideographicstockparen",12849,"ideographicstudyparen",12859,"ideographicsunparen",12848,"ideographicsuperviseparen",12860,"ideographicwaterparen",12844,"ideographicwoodparen",12845,"ideographiczero",12295,"ideographmetalcircle",12942,"ideographmooncircle",12938,"ideographnamecircle",12948,"ideographsuncircle",12944,"ideographwatercircle",12940,"ideographwoodcircle",12941,"ideva",2311,"idieresis",239,"idieresisacute",7727,"idieresiscyrillic",1253,"idotbelow",7883,"iebrevecyrillic",1239,"iecyrillic",1077,"ieungacirclekorean",12917,"ieungaparenkorean",12821,"ieungcirclekorean",12903,"ieungkorean",12615,"ieungparenkorean",12807,"igrave",236,"igujarati",2695,"igurmukhi",2567,"ihiragana",12356,"ihookabove",7881,"iibengali",2440,"iicyrillic",1080,"iideva",2312,"iigujarati",2696,"iigurmukhi",2568,"iimatragurmukhi",2624,"iinvertedbreve",523,"iishortcyrillic",1081,"iivowelsignbengali",2496,"iivowelsigndeva",2368,"iivowelsigngujarati",2752,"ij",307,"ikatakana",12452,"ikatakanahalfwidth",65394,"ikorean",12643,"ilde",732,"iluyhebrew",1452,"imacron",299,"imacroncyrillic",1251,"imageorapproximatelyequal",8787,"imatragurmukhi",2623,"imonospace",65353,"increment",8710,"infinity",8734,"iniarmenian",1387,"integral",8747,"integralbottom",8993,"integralbt",8993,"integralex",63733,"integraltop",8992,"integraltp",8992,"intersection",8745,"intisquare",13061,"invbullet",9688,"invcircle",9689,"invsmileface",9787,"iocyrillic",1105,"iogonek",303,"iota",953,"iotadieresis",970,"iotadieresistonos",912,"iotalatin",617,"iotatonos",943,"iparen",9380,"irigurmukhi",2674,"ismallhiragana",12355,"ismallkatakana",12451,"ismallkatakanahalfwidth",65384,"issharbengali",2554,"istroke",616,"isuperior",63213,"iterationhiragana",12445,"iterationkatakana",12541,"itilde",297,"itildebelow",7725,"iubopomofo",12585,"iucyrillic",1102,"ivowelsignbengali",2495,"ivowelsigndeva",2367,"ivowelsigngujarati",2751,"izhitsacyrillic",1141,"izhitsadblgravecyrillic",1143,"j",106,"jaarmenian",1393,"jabengali",2460,"jadeva",2332,"jagujarati",2716,"jagurmukhi",2588,"jbopomofo",12560,"jcaron",496,"jcircle",9433,"jcircumflex",309,"jcrossedtail",669,"jdotlessstroke",607,"jecyrillic",1112,"jeemarabic",1580,"jeemfinalarabic",65182,"jeeminitialarabic",65183,"jeemmedialarabic",65184,"jeharabic",1688,"jehfinalarabic",64395,"jhabengali",2461,"jhadeva",2333,"jhagujarati",2717,"jhagurmukhi",2589,"jheharmenian",1403,"jis",12292,"jmonospace",65354,"jparen",9381,"jsuperior",690,"k",107,"kabashkircyrillic",1185,"kabengali",2453,"kacute",7729,"kacyrillic",1082,"kadescendercyrillic",1179,"kadeva",2325,"kaf",1499,"kafarabic",1603,"kafdagesh",64315,"kafdageshhebrew",64315,"kaffinalarabic",65242,"kafhebrew",1499,"kafinitialarabic",65243,"kafmedialarabic",65244,"kafrafehebrew",64333,"kagujarati",2709,"kagurmukhi",2581,"kahiragana",12363,"kahookcyrillic",1220,"kakatakana",12459,"kakatakanahalfwidth",65398,"kappa",954,"kappasymbolgreek",1008,"kapyeounmieumkorean",12657,"kapyeounphieuphkorean",12676,"kapyeounpieupkorean",12664,"kapyeounssangpieupkorean",12665,"karoriisquare",13069,"kashidaautoarabic",1600,"kashidaautonosidebearingarabic",1600,"kasmallkatakana",12533,"kasquare",13188,"kasraarabic",1616,"kasratanarabic",1613,"kastrokecyrillic",1183,"katahiraprolongmarkhalfwidth",65392,"kaverticalstrokecyrillic",1181,"kbopomofo",12558,"kcalsquare",13193,"kcaron",489,"kcedilla",311,"kcircle",9434,"kcommaaccent",311,"kdotbelow",7731,"keharmenian",1412,"kehiragana",12369,"kekatakana",12465,"kekatakanahalfwidth",65401,"kenarmenian",1391,"kesmallkatakana",12534,"kgreenlandic",312,"khabengali",2454,"khacyrillic",1093,"khadeva",2326,"khagujarati",2710,"khagurmukhi",2582,"khaharabic",1582,"khahfinalarabic",65190,"khahinitialarabic",65191,"khahmedialarabic",65192,"kheicoptic",999,"khhadeva",2393,"khhagurmukhi",2649,"khieukhacirclekorean",12920,"khieukhaparenkorean",12824,"khieukhcirclekorean",12906,"khieukhkorean",12619,"khieukhparenkorean",12810,"khokhaithai",3586,"khokhonthai",3589,"khokhuatthai",3587,"khokhwaithai",3588,"khomutthai",3675,"khook",409,"khorakhangthai",3590,"khzsquare",13201,"kihiragana",12365,"kikatakana",12461,"kikatakanahalfwidth",65399,"kiroguramusquare",13077,"kiromeetorusquare",13078,"kirosquare",13076,"kiyeokacirclekorean",12910,"kiyeokaparenkorean",12814,"kiyeokcirclekorean",12896,"kiyeokkorean",12593,"kiyeokparenkorean",12800,"kiyeoksioskorean",12595,"kjecyrillic",1116,"klinebelow",7733,"klsquare",13208,"kmcubedsquare",13222,"kmonospace",65355,"kmsquaredsquare",13218,"kohiragana",12371,"kohmsquare",13248,"kokaithai",3585,"kokatakana",12467,"kokatakanahalfwidth",65402,"kooposquare",13086,"koppacyrillic",1153,"koreanstandardsymbol",12927,"koroniscmb",835,"kparen",9382,"kpasquare",13226,"ksicyrillic",1135,"ktsquare",13263,"kturned",670,"kuhiragana",12367,"kukatakana",12463,"kukatakanahalfwidth",65400,"kvsquare",13240,"kwsquare",13246,"l",108,"labengali",2482,"lacute",314,"ladeva",2354,"lagujarati",2738,"lagurmukhi",2610,"lakkhangyaothai",3653,"lamaleffinalarabic",65276,"lamalefhamzaabovefinalarabic",65272,"lamalefhamzaaboveisolatedarabic",65271,"lamalefhamzabelowfinalarabic",65274,"lamalefhamzabelowisolatedarabic",65273,"lamalefisolatedarabic",65275,"lamalefmaddaabovefinalarabic",65270,"lamalefmaddaaboveisolatedarabic",65269,"lamarabic",1604,"lambda",955,"lambdastroke",411,"lamed",1500,"lameddagesh",64316,"lameddageshhebrew",64316,"lamedhebrew",1500,"lamfinalarabic",65246,"lamhahinitialarabic",64714,"laminitialarabic",65247,"lamjeeminitialarabic",64713,"lamkhahinitialarabic",64715,"lamlamhehisolatedarabic",65010,"lammedialarabic",65248,"lammeemhahinitialarabic",64904,"lammeeminitialarabic",64716,"largecircle",9711,"lbar",410,"lbelt",620,"lbopomofo",12556,"lcaron",318,"lcedilla",316,"lcircle",9435,"lcircumflexbelow",7741,"lcommaaccent",316,"ldot",320,"ldotaccent",320,"ldotbelow",7735,"ldotbelowmacron",7737,"leftangleabovecmb",794,"lefttackbelowcmb",792,"less",60,"lessequal",8804,"lessequalorgreater",8922,"lessmonospace",65308,"lessorequivalent",8818,"lessorgreater",8822,"lessoverequal",8806,"lesssmall",65124,"lezh",622,"lfblock",9612,"lhookretroflex",621,"lira",8356,"liwnarmenian",1388,"lj",457,"ljecyrillic",1113,"ll",63168,"lladeva",2355,"llagujarati",2739,"llinebelow",7739,"llladeva",2356,"llvocalicbengali",2529,"llvocalicdeva",2401,"llvocalicvowelsignbengali",2531,"llvocalicvowelsigndeva",2403,"lmiddletilde",619,"lmonospace",65356,"lmsquare",13264,"lochulathai",3628,"logicaland",8743,"logicalnot",172,"logicalnotreversed",8976,"logicalor",8744,"lolingthai",3621,"longs",383,"lowlinecenterline",65102,"lowlinecmb",818,"lowlinedashed",65101,"lozenge",9674,"lparen",9383,"lslash",322,"lsquare",8467,"lsuperior",63214,"ltshade",9617,"luthai",3622,"lvocalicbengali",2444,"lvocalicdeva",2316,"lvocalicvowelsignbengali",2530,"lvocalicvowelsigndeva",2402,"lxsquare",13267,"m",109,"mabengali",2478,"macron",175,"macronbelowcmb",817,"macroncmb",772,"macronlowmod",717,"macronmonospace",65507,"macute",7743,"madeva",2350,"magujarati",2734,"magurmukhi",2606,"mahapakhhebrew",1444,"mahapakhlefthebrew",1444,"mahiragana",12414,"maichattawalowleftthai",63637,"maichattawalowrightthai",63636,"maichattawathai",3659,"maichattawaupperleftthai",63635,"maieklowleftthai",63628,"maieklowrightthai",63627,"maiekthai",3656,"maiekupperleftthai",63626,"maihanakatleftthai",63620,"maihanakatthai",3633,"maitaikhuleftthai",63625,"maitaikhuthai",3655,"maitholowleftthai",63631,"maitholowrightthai",63630,"maithothai",3657,"maithoupperleftthai",63629,"maitrilowleftthai",63634,"maitrilowrightthai",63633,"maitrithai",3658,"maitriupperleftthai",63632,"maiyamokthai",3654,"makatakana",12510,"makatakanahalfwidth",65423,"male",9794,"mansyonsquare",13127,"maqafhebrew",1470,"mars",9794,"masoracirclehebrew",1455,"masquare",13187,"mbopomofo",12551,"mbsquare",13268,"mcircle",9436,"mcubedsquare",13221,"mdotaccent",7745,"mdotbelow",7747,"meemarabic",1605,"meemfinalarabic",65250,"meeminitialarabic",65251,"meemmedialarabic",65252,"meemmeeminitialarabic",64721,"meemmeemisolatedarabic",64584,"meetorusquare",13133,"mehiragana",12417,"meizierasquare",13182,"mekatakana",12513,"mekatakanahalfwidth",65426,"mem",1502,"memdagesh",64318,"memdageshhebrew",64318,"memhebrew",1502,"menarmenian",1396,"merkhahebrew",1445,"merkhakefulahebrew",1446,"merkhakefulalefthebrew",1446,"merkhalefthebrew",1445,"mhook",625,"mhzsquare",13202,"middledotkatakanahalfwidth",65381,"middot",183,"mieumacirclekorean",12914,"mieumaparenkorean",12818,"mieumcirclekorean",12900,"mieumkorean",12609,"mieumpansioskorean",12656,"mieumparenkorean",12804,"mieumpieupkorean",12654,"mieumsioskorean",12655,"mihiragana",12415,"mikatakana",12511,"mikatakanahalfwidth",65424,"minus",8722,"minusbelowcmb",800,"minuscircle",8854,"minusmod",727,"minusplus",8723,"minute",8242,"miribaarusquare",13130,"mirisquare",13129,"mlonglegturned",624,"mlsquare",13206,"mmcubedsquare",13219,"mmonospace",65357,"mmsquaredsquare",13215,"mohiragana",12418,"mohmsquare",13249,"mokatakana",12514,"mokatakanahalfwidth",65427,"molsquare",13270,"momathai",3617,"moverssquare",13223,"moverssquaredsquare",13224,"mparen",9384,"mpasquare",13227,"mssquare",13235,"msuperior",63215,"mturned",623,"mu",181,"mu1",181,"muasquare",13186,"muchgreater",8811,"muchless",8810,"mufsquare",13196,"mugreek",956,"mugsquare",13197,"muhiragana",12416,"mukatakana",12512,"mukatakanahalfwidth",65425,"mulsquare",13205,"multiply",215,"mumsquare",13211,"munahhebrew",1443,"munahlefthebrew",1443,"musicalnote",9834,"musicalnotedbl",9835,"musicflatsign",9837,"musicsharpsign",9839,"mussquare",13234,"muvsquare",13238,"muwsquare",13244,"mvmegasquare",13241,"mvsquare",13239,"mwmegasquare",13247,"mwsquare",13245,"n",110,"nabengali",2472,"nabla",8711,"nacute",324,"nadeva",2344,"nagujarati",2728,"nagurmukhi",2600,"nahiragana",12394,"nakatakana",12490,"nakatakanahalfwidth",65413,"napostrophe",329,"nasquare",13185,"nbopomofo",12555,"nbspace",160,"ncaron",328,"ncedilla",326,"ncircle",9437,"ncircumflexbelow",7755,"ncommaaccent",326,"ndotaccent",7749,"ndotbelow",7751,"nehiragana",12397,"nekatakana",12493,"nekatakanahalfwidth",65416,"newsheqelsign",8362,"nfsquare",13195,"ngabengali",2457,"ngadeva",2329,"ngagujarati",2713,"ngagurmukhi",2585,"ngonguthai",3591,"nhiragana",12435,"nhookleft",626,"nhookretroflex",627,"nieunacirclekorean",12911,"nieunaparenkorean",12815,"nieuncieuckorean",12597,"nieuncirclekorean",12897,"nieunhieuhkorean",12598,"nieunkorean",12596,"nieunpansioskorean",12648,"nieunparenkorean",12801,"nieunsioskorean",12647,"nieuntikeutkorean",12646,"nihiragana",12395,"nikatakana",12491,"nikatakanahalfwidth",65414,"nikhahitleftthai",63641,"nikhahitthai",3661,"nine",57,"ninearabic",1641,"ninebengali",2543,"ninecircle",9320,"ninecircleinversesansserif",10130,"ninedeva",2415,"ninegujarati",2799,"ninegurmukhi",2671,"ninehackarabic",1641,"ninehangzhou",12329,"nineideographicparen",12840,"nineinferior",8329,"ninemonospace",65305,"nineoldstyle",63289,"nineparen",9340,"nineperiod",9360,"ninepersian",1785,"nineroman",8568,"ninesuperior",8313,"nineteencircle",9330,"nineteenparen",9350,"nineteenperiod",9370,"ninethai",3673,"nj",460,"njecyrillic",1114,"nkatakana",12531,"nkatakanahalfwidth",65437,"nlegrightlong",414,"nlinebelow",7753,"nmonospace",65358,"nmsquare",13210,"nnabengali",2467,"nnadeva",2339,"nnagujarati",2723,"nnagurmukhi",2595,"nnnadeva",2345,"nohiragana",12398,"nokatakana",12494,"nokatakanahalfwidth",65417,"nonbreakingspace",160,"nonenthai",3603,"nonuthai",3609,"noonarabic",1606,"noonfinalarabic",65254,"noonghunnaarabic",1722,"noonghunnafinalarabic",64415,"nooninitialarabic",65255,"noonjeeminitialarabic",64722,"noonjeemisolatedarabic",64587,"noonmedialarabic",65256,"noonmeeminitialarabic",64725,"noonmeemisolatedarabic",64590,"noonnoonfinalarabic",64653,"notcontains",8716,"notelement",8713,"notelementof",8713,"notequal",8800,"notgreater",8815,"notgreaternorequal",8817,"notgreaternorless",8825,"notidentical",8802,"notless",8814,"notlessnorequal",8816,"notparallel",8742,"notprecedes",8832,"notsubset",8836,"notsucceeds",8833,"notsuperset",8837,"nowarmenian",1398,"nparen",9385,"nssquare",13233,"nsuperior",8319,"ntilde",241,"nu",957,"nuhiragana",12396,"nukatakana",12492,"nukatakanahalfwidth",65415,"nuktabengali",2492,"nuktadeva",2364,"nuktagujarati",2748,"nuktagurmukhi",2620,"numbersign",35,"numbersignmonospace",65283,"numbersignsmall",65119,"numeralsigngreek",884,"numeralsignlowergreek",885,"numero",8470,"nun",1504,"nundagesh",64320,"nundageshhebrew",64320,"nunhebrew",1504,"nvsquare",13237,"nwsquare",13243,"nyabengali",2462,"nyadeva",2334,"nyagujarati",2718,"nyagurmukhi",2590,"o",111,"oacute",243,"oangthai",3629,"obarred",629,"obarredcyrillic",1257,"obarreddieresiscyrillic",1259,"obengali",2451,"obopomofo",12571,"obreve",335,"ocandradeva",2321,"ocandragujarati",2705,"ocandravowelsigndeva",2377,"ocandravowelsigngujarati",2761,"ocaron",466,"ocircle",9438,"ocircumflex",244,"ocircumflexacute",7889,"ocircumflexdotbelow",7897,"ocircumflexgrave",7891,"ocircumflexhookabove",7893,"ocircumflextilde",7895,"ocyrillic",1086,"odblacute",337,"odblgrave",525,"odeva",2323,"odieresis",246,"odieresiscyrillic",1255,"odotbelow",7885,"oe",339,"oekorean",12634,"ogonek",731,"ogonekcmb",808,"ograve",242,"ogujarati",2707,"oharmenian",1413,"ohiragana",12362,"ohookabove",7887,"ohorn",417,"ohornacute",7899,"ohorndotbelow",7907,"ohorngrave",7901,"ohornhookabove",7903,"ohorntilde",7905,"ohungarumlaut",337,"oi",419,"oinvertedbreve",527,"okatakana",12458,"okatakanahalfwidth",65397,"okorean",12631,"olehebrew",1451,"omacron",333,"omacronacute",7763,"omacrongrave",7761,"omdeva",2384,"omega",969,"omega1",982,"omegacyrillic",1121,"omegalatinclosed",631,"omegaroundcyrillic",1147,"omegatitlocyrillic",1149,"omegatonos",974,"omgujarati",2768,"omicron",959,"omicrontonos",972,"omonospace",65359,"one",49,"onearabic",1633,"onebengali",2535,"onecircle",9312,"onecircleinversesansserif",10122,"onedeva",2407,"onedotenleader",8228,"oneeighth",8539,"onefitted",63196,"onegujarati",2791,"onegurmukhi",2663,"onehackarabic",1633,"onehalf",189,"onehangzhou",12321,"oneideographicparen",12832,"oneinferior",8321,"onemonospace",65297,"onenumeratorbengali",2548,"oneoldstyle",63281,"oneparen",9332,"oneperiod",9352,"onepersian",1777,"onequarter",188,"oneroman",8560,"onesuperior",185,"onethai",3665,"onethird",8531,"oogonek",491,"oogonekmacron",493,"oogurmukhi",2579,"oomatragurmukhi",2635,"oopen",596,"oparen",9386,"openbullet",9702,"option",8997,"ordfeminine",170,"ordmasculine",186,"orthogonal",8735,"oshortdeva",2322,"oshortvowelsigndeva",2378,"oslash",248,"oslashacute",511,"osmallhiragana",12361,"osmallkatakana",12457,"osmallkatakanahalfwidth",65387,"ostrokeacute",511,"osuperior",63216,"otcyrillic",1151,"otilde",245,"otildeacute",7757,"otildedieresis",7759,"oubopomofo",12577,"overline",8254,"overlinecenterline",65098,"overlinecmb",773,"overlinedashed",65097,"overlinedblwavy",65100,"overlinewavy",65099,"overscore",175,"ovowelsignbengali",2507,"ovowelsigndeva",2379,"ovowelsigngujarati",2763,"p",112,"paampssquare",13184,"paasentosquare",13099,"pabengali",2474,"pacute",7765,"padeva",2346,"pagedown",8671,"pageup",8670,"pagujarati",2730,"pagurmukhi",2602,"pahiragana",12401,"paiyannoithai",3631,"pakatakana",12497,"palatalizationcyrilliccmb",1156,"palochkacyrillic",1216,"pansioskorean",12671,"paragraph",182,"parallel",8741,"parenleft",40,"parenleftaltonearabic",64830,"parenleftbt",63725,"parenleftex",63724,"parenleftinferior",8333,"parenleftmonospace",65288,"parenleftsmall",65113,"parenleftsuperior",8317,"parenlefttp",63723,"parenleftvertical",65077,"parenright",41,"parenrightaltonearabic",64831,"parenrightbt",63736,"parenrightex",63735,"parenrightinferior",8334,"parenrightmonospace",65289,"parenrightsmall",65114,"parenrightsuperior",8318,"parenrighttp",63734,"parenrightvertical",65078,"partialdiff",8706,"paseqhebrew",1472,"pashtahebrew",1433,"pasquare",13225,"patah",1463,"patah11",1463,"patah1d",1463,"patah2a",1463,"patahhebrew",1463,"patahnarrowhebrew",1463,"patahquarterhebrew",1463,"patahwidehebrew",1463,"pazerhebrew",1441,"pbopomofo",12550,"pcircle",9439,"pdotaccent",7767,"pe",1508,"pecyrillic",1087,"pedagesh",64324,"pedageshhebrew",64324,"peezisquare",13115,"pefinaldageshhebrew",64323,"peharabic",1662,"peharmenian",1402,"pehebrew",1508,"pehfinalarabic",64343,"pehinitialarabic",64344,"pehiragana",12410,"pehmedialarabic",64345,"pekatakana",12506,"pemiddlehookcyrillic",1191,"perafehebrew",64334,"percent",37,"percentarabic",1642,"percentmonospace",65285,"percentsmall",65130,"period",46,"periodarmenian",1417,"periodcentered",183,"periodhalfwidth",65377,"periodinferior",63207,"periodmonospace",65294,"periodsmall",65106,"periodsuperior",63208,"perispomenigreekcmb",834,"perpendicular",8869,"perthousand",8240,"peseta",8359,"pfsquare",13194,"phabengali",2475,"phadeva",2347,"phagujarati",2731,"phagurmukhi",2603,"phi",966,"phi1",981,"phieuphacirclekorean",12922,"phieuphaparenkorean",12826,"phieuphcirclekorean",12908,"phieuphkorean",12621,"phieuphparenkorean",12812,"philatin",632,"phinthuthai",3642,"phisymbolgreek",981,"phook",421,"phophanthai",3614,"phophungthai",3612,"phosamphaothai",3616,"pi",960,"pieupacirclekorean",12915,"pieupaparenkorean",12819,"pieupcieuckorean",12662,"pieupcirclekorean",12901,"pieupkiyeokkorean",12658,"pieupkorean",12610,"pieupparenkorean",12805,"pieupsioskiyeokkorean",12660,"pieupsioskorean",12612,"pieupsiostikeutkorean",12661,"pieupthieuthkorean",12663,"pieuptikeutkorean",12659,"pihiragana",12404,"pikatakana",12500,"pisymbolgreek",982,"piwrarmenian",1411,"plus",43,"plusbelowcmb",799,"pluscircle",8853,"plusminus",177,"plusmod",726,"plusmonospace",65291,"plussmall",65122,"plussuperior",8314,"pmonospace",65360,"pmsquare",13272,"pohiragana",12413,"pointingindexdownwhite",9759,"pointingindexleftwhite",9756,"pointingindexrightwhite",9758,"pointingindexupwhite",9757,"pokatakana",12509,"poplathai",3611,"postalmark",12306,"postalmarkface",12320,"pparen",9387,"precedes",8826,"prescription",8478,"primemod",697,"primereversed",8245,"product",8719,"projective",8965,"prolongedkana",12540,"propellor",8984,"propersubset",8834,"propersuperset",8835,"proportion",8759,"proportional",8733,"psi",968,"psicyrillic",1137,"psilipneumatacyrilliccmb",1158,"pssquare",13232,"puhiragana",12407,"pukatakana",12503,"pvsquare",13236,"pwsquare",13242,"q",113,"qadeva",2392,"qadmahebrew",1448,"qafarabic",1602,"qaffinalarabic",65238,"qafinitialarabic",65239,"qafmedialarabic",65240,"qamats",1464,"qamats10",1464,"qamats1a",1464,"qamats1c",1464,"qamats27",1464,"qamats29",1464,"qamats33",1464,"qamatsde",1464,"qamatshebrew",1464,"qamatsnarrowhebrew",1464,"qamatsqatanhebrew",1464,"qamatsqatannarrowhebrew",1464,"qamatsqatanquarterhebrew",1464,"qamatsqatanwidehebrew",1464,"qamatsquarterhebrew",1464,"qamatswidehebrew",1464,"qarneyparahebrew",1439,"qbopomofo",12561,"qcircle",9440,"qhook",672,"qmonospace",65361,"qof",1511,"qofdagesh",64327,"qofdageshhebrew",64327,"qofhebrew",1511,"qparen",9388,"quarternote",9833,"qubuts",1467,"qubuts18",1467,"qubuts25",1467,"qubuts31",1467,"qubutshebrew",1467,"qubutsnarrowhebrew",1467,"qubutsquarterhebrew",1467,"qubutswidehebrew",1467,"question",63,"questionarabic",1567,"questionarmenian",1374,"questiondown",191,"questiondownsmall",63423,"questiongreek",894,"questionmonospace",65311,"questionsmall",63295,"quotedbl",34,"quotedblbase",8222,"quotedblleft",8220,"quotedblmonospace",65282,"quotedblprime",12318,"quotedblprimereversed",12317,"quotedblright",8221,"quoteleft",8216,"quoteleftreversed",8219,"quotereversed",8219,"quoteright",8217,"quoterightn",329,"quotesinglbase",8218,"quotesingle",39,"quotesinglemonospace",65287,"r",114,"raarmenian",1404,"rabengali",2480,"racute",341,"radeva",2352,"radical",8730,"radicalex",63717,"radoverssquare",13230,"radoverssquaredsquare",13231,"radsquare",13229,"rafe",1471,"rafehebrew",1471,"ragujarati",2736,"ragurmukhi",2608,"rahiragana",12425,"rakatakana",12521,"rakatakanahalfwidth",65431,"ralowerdiagonalbengali",2545,"ramiddlediagonalbengali",2544,"ramshorn",612,"ratio",8758,"rbopomofo",12566,"rcaron",345,"rcedilla",343,"rcircle",9441,"rcommaaccent",343,"rdblgrave",529,"rdotaccent",7769,"rdotbelow",7771,"rdotbelowmacron",7773,"referencemark",8251,"reflexsubset",8838,"reflexsuperset",8839,"registered",174,"registersans",63720,"registerserif",63194,"reharabic",1585,"reharmenian",1408,"rehfinalarabic",65198,"rehiragana",12428,"rekatakana",12524,"rekatakanahalfwidth",65434,"resh",1512,"reshdageshhebrew",64328,"reshhebrew",1512,"reversedtilde",8765,"reviahebrew",1431,"reviamugrashhebrew",1431,"revlogicalnot",8976,"rfishhook",638,"rfishhookreversed",639,"rhabengali",2525,"rhadeva",2397,"rho",961,"rhook",637,"rhookturned",635,"rhookturnedsuperior",693,"rhosymbolgreek",1009,"rhotichookmod",734,"rieulacirclekorean",12913,"rieulaparenkorean",12817,"rieulcirclekorean",12899,"rieulhieuhkorean",12608,"rieulkiyeokkorean",12602,"rieulkiyeoksioskorean",12649,"rieulkorean",12601,"rieulmieumkorean",12603,"rieulpansioskorean",12652,"rieulparenkorean",12803,"rieulphieuphkorean",12607,"rieulpieupkorean",12604,"rieulpieupsioskorean",12651,"rieulsioskorean",12605,"rieulthieuthkorean",12606,"rieultikeutkorean",12650,"rieulyeorinhieuhkorean",12653,"rightangle",8735,"righttackbelowcmb",793,"righttriangle",8895,"rihiragana",12426,"rikatakana",12522,"rikatakanahalfwidth",65432,"ring",730,"ringbelowcmb",805,"ringcmb",778,"ringhalfleft",703,"ringhalfleftarmenian",1369,"ringhalfleftbelowcmb",796,"ringhalfleftcentered",723,"ringhalfright",702,"ringhalfrightbelowcmb",825,"ringhalfrightcentered",722,"rinvertedbreve",531,"rittorusquare",13137,"rlinebelow",7775,"rlongleg",636,"rlonglegturned",634,"rmonospace",65362,"rohiragana",12429,"rokatakana",12525,"rokatakanahalfwidth",65435,"roruathai",3619,"rparen",9389,"rrabengali",2524,"rradeva",2353,"rragurmukhi",2652,"rreharabic",1681,"rrehfinalarabic",64397,"rrvocalicbengali",2528,"rrvocalicdeva",2400,"rrvocalicgujarati",2784,"rrvocalicvowelsignbengali",2500,"rrvocalicvowelsigndeva",2372,"rrvocalicvowelsigngujarati",2756,"rsuperior",63217,"rtblock",9616,"rturned",633,"rturnedsuperior",692,"ruhiragana",12427,"rukatakana",12523,"rukatakanahalfwidth",65433,"rupeemarkbengali",2546,"rupeesignbengali",2547,"rupiah",63197,"ruthai",3620,"rvocalicbengali",2443,"rvocalicdeva",2315,"rvocalicgujarati",2699,"rvocalicvowelsignbengali",2499,"rvocalicvowelsigndeva",2371,"rvocalicvowelsigngujarati",2755,"s",115,"sabengali",2488,"sacute",347,"sacutedotaccent",7781,"sadarabic",1589,"sadeva",2360,"sadfinalarabic",65210,"sadinitialarabic",65211,"sadmedialarabic",65212,"sagujarati",2744,"sagurmukhi",2616,"sahiragana",12373,"sakatakana",12469,"sakatakanahalfwidth",65403,"sallallahoualayhewasallamarabic",65018,"samekh",1505,"samekhdagesh",64321,"samekhdageshhebrew",64321,"samekhhebrew",1505,"saraaathai",3634,"saraaethai",3649,"saraaimaimalaithai",3652,"saraaimaimuanthai",3651,"saraamthai",3635,"saraathai",3632,"saraethai",3648,"saraiileftthai",63622,"saraiithai",3637,"saraileftthai",63621,"saraithai",3636,"saraothai",3650,"saraueeleftthai",63624,"saraueethai",3639,"saraueleftthai",63623,"sarauethai",3638,"sarauthai",3640,"sarauuthai",3641,"sbopomofo",12569,"scaron",353,"scarondotaccent",7783,"scedilla",351,"schwa",601,"schwacyrillic",1241,"schwadieresiscyrillic",1243,"schwahook",602,"scircle",9442,"scircumflex",349,"scommaaccent",537,"sdotaccent",7777,"sdotbelow",7779,"sdotbelowdotaccent",7785,"seagullbelowcmb",828,"second",8243,"secondtonechinese",714,"section",167,"seenarabic",1587,"seenfinalarabic",65202,"seeninitialarabic",65203,"seenmedialarabic",65204,"segol",1462,"segol13",1462,"segol1f",1462,"segol2c",1462,"segolhebrew",1462,"segolnarrowhebrew",1462,"segolquarterhebrew",1462,"segoltahebrew",1426,"segolwidehebrew",1462,"seharmenian",1405,"sehiragana",12379,"sekatakana",12475,"sekatakanahalfwidth",65406,"semicolon",59,"semicolonarabic",1563,"semicolonmonospace",65307,"semicolonsmall",65108,"semivoicedmarkkana",12444,"semivoicedmarkkanahalfwidth",65439,"sentisquare",13090,"sentosquare",13091,"seven",55,"sevenarabic",1639,"sevenbengali",2541,"sevencircle",9318,"sevencircleinversesansserif",10128,"sevendeva",2413,"seveneighths",8542,"sevengujarati",2797,"sevengurmukhi",2669,"sevenhackarabic",1639,"sevenhangzhou",12327,"sevenideographicparen",12838,"seveninferior",8327,"sevenmonospace",65303,"sevenoldstyle",63287,"sevenparen",9338,"sevenperiod",9358,"sevenpersian",1783,"sevenroman",8566,"sevensuperior",8311,"seventeencircle",9328,"seventeenparen",9348,"seventeenperiod",9368,"seventhai",3671,"sfthyphen",173,"shaarmenian",1399,"shabengali",2486,"shacyrillic",1096,"shaddaarabic",1617,"shaddadammaarabic",64609,"shaddadammatanarabic",64606,"shaddafathaarabic",64608,"shaddakasraarabic",64610,"shaddakasratanarabic",64607,"shade",9618,"shadedark",9619,"shadelight",9617,"shademedium",9618,"shadeva",2358,"shagujarati",2742,"shagurmukhi",2614,"shalshelethebrew",1427,"shbopomofo",12565,"shchacyrillic",1097,"sheenarabic",1588,"sheenfinalarabic",65206,"sheeninitialarabic",65207,"sheenmedialarabic",65208,"sheicoptic",995,"sheqel",8362,"sheqelhebrew",8362,"sheva",1456,"sheva115",1456,"sheva15",1456,"sheva22",1456,"sheva2e",1456,"shevahebrew",1456,"shevanarrowhebrew",1456,"shevaquarterhebrew",1456,"shevawidehebrew",1456,"shhacyrillic",1211,"shimacoptic",1005,"shin",1513,"shindagesh",64329,"shindageshhebrew",64329,"shindageshshindot",64300,"shindageshshindothebrew",64300,"shindageshsindot",64301,"shindageshsindothebrew",64301,"shindothebrew",1473,"shinhebrew",1513,"shinshindot",64298,"shinshindothebrew",64298,"shinsindot",64299,"shinsindothebrew",64299,"shook",642,"sigma",963,"sigma1",962,"sigmafinal",962,"sigmalunatesymbolgreek",1010,"sihiragana",12375,"sikatakana",12471,"sikatakanahalfwidth",65404,"siluqhebrew",1469,"siluqlefthebrew",1469,"similar",8764,"sindothebrew",1474,"siosacirclekorean",12916,"siosaparenkorean",12820,"sioscieuckorean",12670,"sioscirclekorean",12902,"sioskiyeokkorean",12666,"sioskorean",12613,"siosnieunkorean",12667,"siosparenkorean",12806,"siospieupkorean",12669,"siostikeutkorean",12668,"six",54,"sixarabic",1638,"sixbengali",2540,"sixcircle",9317,"sixcircleinversesansserif",10127,"sixdeva",2412,"sixgujarati",2796,"sixgurmukhi",2668,"sixhackarabic",1638,"sixhangzhou",12326,"sixideographicparen",12837,"sixinferior",8326,"sixmonospace",65302,"sixoldstyle",63286,"sixparen",9337,"sixperiod",9357,"sixpersian",1782,"sixroman",8565,"sixsuperior",8310,"sixteencircle",9327,"sixteencurrencydenominatorbengali",2553,"sixteenparen",9347,"sixteenperiod",9367,"sixthai",3670,"slash",47,"slashmonospace",65295,"slong",383,"slongdotaccent",7835,"smileface",9786,"smonospace",65363,"sofpasuqhebrew",1475,"softhyphen",173,"softsigncyrillic",1100,"sohiragana",12381,"sokatakana",12477,"sokatakanahalfwidth",65407,"soliduslongoverlaycmb",824,"solidusshortoverlaycmb",823,"sorusithai",3625,"sosalathai",3624,"sosothai",3595,"sosuathai",3626,"space",32,"spacehackarabic",32,"spade",9824,"spadesuitblack",9824,"spadesuitwhite",9828,"sparen",9390,"squarebelowcmb",827,"squarecc",13252,"squarecm",13213,"squarediagonalcrosshatchfill",9641,"squarehorizontalfill",9636,"squarekg",13199,"squarekm",13214,"squarekmcapital",13262,"squareln",13265,"squarelog",13266,"squaremg",13198,"squaremil",13269,"squaremm",13212,"squaremsquared",13217,"squareorthogonalcrosshatchfill",9638,"squareupperlefttolowerrightfill",9639,"squareupperrighttolowerleftfill",9640,"squareverticalfill",9637,"squarewhitewithsmallblack",9635,"srsquare",13275,"ssabengali",2487,"ssadeva",2359,"ssagujarati",2743,"ssangcieuckorean",12617,"ssanghieuhkorean",12677,"ssangieungkorean",12672,"ssangkiyeokkorean",12594,"ssangnieunkorean",12645,"ssangpieupkorean",12611,"ssangsioskorean",12614,"ssangtikeutkorean",12600,"ssuperior",63218,"sterling",163,"sterlingmonospace",65505,"strokelongoverlaycmb",822,"strokeshortoverlaycmb",821,"subset",8834,"subsetnotequal",8842,"subsetorequal",8838,"succeeds",8827,"suchthat",8715,"suhiragana",12377,"sukatakana",12473,"sukatakanahalfwidth",65405,"sukunarabic",1618,"summation",8721,"sun",9788,"superset",8835,"supersetnotequal",8843,"supersetorequal",8839,"svsquare",13276,"syouwaerasquare",13180,"t",116,"tabengali",2468,"tackdown",8868,"tackleft",8867,"tadeva",2340,"tagujarati",2724,"tagurmukhi",2596,"taharabic",1591,"tahfinalarabic",65218,"tahinitialarabic",65219,"tahiragana",12383,"tahmedialarabic",65220,"taisyouerasquare",13181,"takatakana",12479,"takatakanahalfwidth",65408,"tatweelarabic",1600,"tau",964,"tav",1514,"tavdages",64330,"tavdagesh",64330,"tavdageshhebrew",64330,"tavhebrew",1514,"tbar",359,"tbopomofo",12554,"tcaron",357,"tccurl",680,"tcedilla",355,"tcheharabic",1670,"tchehfinalarabic",64379,"tchehinitialarabic",64380,"tchehmedialarabic",64381,"tcircle",9443,"tcircumflexbelow",7793,"tcommaaccent",355,"tdieresis",7831,"tdotaccent",7787,"tdotbelow",7789,"tecyrillic",1090,"tedescendercyrillic",1197,"teharabic",1578,"tehfinalarabic",65174,"tehhahinitialarabic",64674,"tehhahisolatedarabic",64524,"tehinitialarabic",65175,"tehiragana",12390,"tehjeeminitialarabic",64673,"tehjeemisolatedarabic",64523,"tehmarbutaarabic",1577,"tehmarbutafinalarabic",65172,"tehmedialarabic",65176,"tehmeeminitialarabic",64676,"tehmeemisolatedarabic",64526,"tehnoonfinalarabic",64627,"tekatakana",12486,"tekatakanahalfwidth",65411,"telephone",8481,"telephoneblack",9742,"telishagedolahebrew",1440,"telishaqetanahebrew",1449,"tencircle",9321,"tenideographicparen",12841,"tenparen",9341,"tenperiod",9361,"tenroman",8569,"tesh",679,"tet",1496,"tetdagesh",64312,"tetdageshhebrew",64312,"tethebrew",1496,"tetsecyrillic",1205,"tevirhebrew",1435,"tevirlefthebrew",1435,"thabengali",2469,"thadeva",2341,"thagujarati",2725,"thagurmukhi",2597,"thalarabic",1584,"thalfinalarabic",65196,"thanthakhatlowleftthai",63640,"thanthakhatlowrightthai",63639,"thanthakhatthai",3660,"thanthakhatupperleftthai",63638,"theharabic",1579,"thehfinalarabic",65178,"thehinitialarabic",65179,"thehmedialarabic",65180,"thereexists",8707,"therefore",8756,"theta",952,"theta1",977,"thetasymbolgreek",977,"thieuthacirclekorean",12921,"thieuthaparenkorean",12825,"thieuthcirclekorean",12907,"thieuthkorean",12620,"thieuthparenkorean",12811,"thirteencircle",9324,"thirteenparen",9344,"thirteenperiod",9364,"thonangmonthothai",3601,"thook",429,"thophuthaothai",3602,"thorn",254,"thothahanthai",3607,"thothanthai",3600,"thothongthai",3608,"thothungthai",3606,"thousandcyrillic",1154,"thousandsseparatorarabic",1644,"thousandsseparatorpersian",1644,"three",51,"threearabic",1635,"threebengali",2537,"threecircle",9314,"threecircleinversesansserif",10124,"threedeva",2409,"threeeighths",8540,"threegujarati",2793,"threegurmukhi",2665,"threehackarabic",1635,"threehangzhou",12323,"threeideographicparen",12834,"threeinferior",8323,"threemonospace",65299,"threenumeratorbengali",2550,"threeoldstyle",63283,"threeparen",9334,"threeperiod",9354,"threepersian",1779,"threequarters",190,"threequartersemdash",63198,"threeroman",8562,"threesuperior",179,"threethai",3667,"thzsquare",13204,"tihiragana",12385,"tikatakana",12481,"tikatakanahalfwidth",65409,"tikeutacirclekorean",12912,"tikeutaparenkorean",12816,"tikeutcirclekorean",12898,"tikeutkorean",12599,"tikeutparenkorean",12802,"tilde",732,"tildebelowcmb",816,"tildecmb",771,"tildecomb",771,"tildedoublecmb",864,"tildeoperator",8764,"tildeoverlaycmb",820,"tildeverticalcmb",830,"timescircle",8855,"tipehahebrew",1430,"tipehalefthebrew",1430,"tippigurmukhi",2672,"titlocyrilliccmb",1155,"tiwnarmenian",1407,"tlinebelow",7791,"tmonospace",65364,"toarmenian",1385,"tohiragana",12392,"tokatakana",12488,"tokatakanahalfwidth",65412,"tonebarextrahighmod",741,"tonebarextralowmod",745,"tonebarhighmod",742,"tonebarlowmod",744,"tonebarmidmod",743,"tonefive",445,"tonesix",389,"tonetwo",424,"tonos",900,"tonsquare",13095,"topatakthai",3599,"tortoiseshellbracketleft",12308,"tortoiseshellbracketleftsmall",65117,"tortoiseshellbracketleftvertical",65081,"tortoiseshellbracketright",12309,"tortoiseshellbracketrightsmall",65118,"tortoiseshellbracketrightvertical",65082,"totaothai",3605,"tpalatalhook",427,"tparen",9391,"trademark",8482,"trademarksans",63722,"trademarkserif",63195,"tretroflexhook",648,"triagdn",9660,"triaglf",9668,"triagrt",9658,"triagup",9650,"ts",678,"tsadi",1510,"tsadidagesh",64326,"tsadidageshhebrew",64326,"tsadihebrew",1510,"tsecyrillic",1094,"tsere",1461,"tsere12",1461,"tsere1e",1461,"tsere2b",1461,"tserehebrew",1461,"tserenarrowhebrew",1461,"tserequarterhebrew",1461,"tserewidehebrew",1461,"tshecyrillic",1115,"tsuperior",63219,"ttabengali",2463,"ttadeva",2335,"ttagujarati",2719,"ttagurmukhi",2591,"tteharabic",1657,"ttehfinalarabic",64359,"ttehinitialarabic",64360,"ttehmedialarabic",64361,"tthabengali",2464,"tthadeva",2336,"tthagujarati",2720,"tthagurmukhi",2592,"tturned",647,"tuhiragana",12388,"tukatakana",12484,"tukatakanahalfwidth",65410,"tusmallhiragana",12387,"tusmallkatakana",12483,"tusmallkatakanahalfwidth",65391,"twelvecircle",9323,"twelveparen",9343,"twelveperiod",9363,"twelveroman",8571,"twentycircle",9331,"twentyhangzhou",21316,"twentyparen",9351,"twentyperiod",9371,"two",50,"twoarabic",1634,"twobengali",2536,"twocircle",9313,"twocircleinversesansserif",10123,"twodeva",2408,"twodotenleader",8229,"twodotleader",8229,"twodotleadervertical",65072,"twogujarati",2792,"twogurmukhi",2664,"twohackarabic",1634,"twohangzhou",12322,"twoideographicparen",12833,"twoinferior",8322,"twomonospace",65298,"twonumeratorbengali",2549,"twooldstyle",63282,"twoparen",9333,"twoperiod",9353,"twopersian",1778,"tworoman",8561,"twostroke",443,"twosuperior",178,"twothai",3666,"twothirds",8532,"u",117,"uacute",250,"ubar",649,"ubengali",2441,"ubopomofo",12584,"ubreve",365,"ucaron",468,"ucircle",9444,"ucircumflex",251,"ucircumflexbelow",7799,"ucyrillic",1091,"udattadeva",2385,"udblacute",369,"udblgrave",533,"udeva",2313,"udieresis",252,"udieresisacute",472,"udieresisbelow",7795,"udieresiscaron",474,"udieresiscyrillic",1265,"udieresisgrave",476,"udieresismacron",470,"udotbelow",7909,"ugrave",249,"ugujarati",2697,"ugurmukhi",2569,"uhiragana",12358,"uhookabove",7911,"uhorn",432,"uhornacute",7913,"uhorndotbelow",7921,"uhorngrave",7915,"uhornhookabove",7917,"uhorntilde",7919,"uhungarumlaut",369,"uhungarumlautcyrillic",1267,"uinvertedbreve",535,"ukatakana",12454,"ukatakanahalfwidth",65395,"ukcyrillic",1145,"ukorean",12636,"umacron",363,"umacroncyrillic",1263,"umacrondieresis",7803,"umatragurmukhi",2625,"umonospace",65365,"underscore",95,"underscoredbl",8215,"underscoremonospace",65343,"underscorevertical",65075,"underscorewavy",65103,"union",8746,"universal",8704,"uogonek",371,"uparen",9392,"upblock",9600,"upperdothebrew",1476,"upsilon",965,"upsilondieresis",971,"upsilondieresistonos",944,"upsilonlatin",650,"upsilontonos",973,"uptackbelowcmb",797,"uptackmod",724,"uragurmukhi",2675,"uring",367,"ushortcyrillic",1118,"usmallhiragana",12357,"usmallkatakana",12453,"usmallkatakanahalfwidth",65385,"ustraightcyrillic",1199,"ustraightstrokecyrillic",1201,"utilde",361,"utildeacute",7801,"utildebelow",7797,"uubengali",2442,"uudeva",2314,"uugujarati",2698,"uugurmukhi",2570,"uumatragurmukhi",2626,"uuvowelsignbengali",2498,"uuvowelsigndeva",2370,"uuvowelsigngujarati",2754,"uvowelsignbengali",2497,"uvowelsigndeva",2369,"uvowelsigngujarati",2753,"v",118,"vadeva",2357,"vagujarati",2741,"vagurmukhi",2613,"vakatakana",12535,"vav",1493,"vavdagesh",64309,"vavdagesh65",64309,"vavdageshhebrew",64309,"vavhebrew",1493,"vavholam",64331,"vavholamhebrew",64331,"vavvavhebrew",1520,"vavyodhebrew",1521,"vcircle",9445,"vdotbelow",7807,"vecyrillic",1074,"veharabic",1700,"vehfinalarabic",64363,"vehinitialarabic",64364,"vehmedialarabic",64365,"vekatakana",12537,"venus",9792,"verticalbar",124,"verticallineabovecmb",781,"verticallinebelowcmb",809,"verticallinelowmod",716,"verticallinemod",712,"vewarmenian",1406,"vhook",651,"vikatakana",12536,"viramabengali",2509,"viramadeva",2381,"viramagujarati",2765,"visargabengali",2435,"visargadeva",2307,"visargagujarati",2691,"vmonospace",65366,"voarmenian",1400,"voicediterationhiragana",12446,"voicediterationkatakana",12542,"voicedmarkkana",12443,"voicedmarkkanahalfwidth",65438,"vokatakana",12538,"vparen",9393,"vtilde",7805,"vturned",652,"vuhiragana",12436,"vukatakana",12532,"w",119,"wacute",7811,"waekorean",12633,"wahiragana",12431,"wakatakana",12527,"wakatakanahalfwidth",65436,"wakorean",12632,"wasmallhiragana",12430,"wasmallkatakana",12526,"wattosquare",13143,"wavedash",12316,"wavyunderscorevertical",65076,"wawarabic",1608,"wawfinalarabic",65262,"wawhamzaabovearabic",1572,"wawhamzaabovefinalarabic",65158,"wbsquare",13277,"wcircle",9446,"wcircumflex",373,"wdieresis",7813,"wdotaccent",7815,"wdotbelow",7817,"wehiragana",12433,"weierstrass",8472,"wekatakana",12529,"wekorean",12638,"weokorean",12637,"wgrave",7809,"whitebullet",9702,"whitecircle",9675,"whitecircleinverse",9689,"whitecornerbracketleft",12302,"whitecornerbracketleftvertical",65091,"whitecornerbracketright",12303,"whitecornerbracketrightvertical",65092,"whitediamond",9671,"whitediamondcontainingblacksmalldiamond",9672,"whitedownpointingsmalltriangle",9663,"whitedownpointingtriangle",9661,"whiteleftpointingsmalltriangle",9667,"whiteleftpointingtriangle",9665,"whitelenticularbracketleft",12310,"whitelenticularbracketright",12311,"whiterightpointingsmalltriangle",9657,"whiterightpointingtriangle",9655,"whitesmallsquare",9643,"whitesmilingface",9786,"whitesquare",9633,"whitestar",9734,"whitetelephone",9743,"whitetortoiseshellbracketleft",12312,"whitetortoiseshellbracketright",12313,"whiteuppointingsmalltriangle",9653,"whiteuppointingtriangle",9651,"wihiragana",12432,"wikatakana",12528,"wikorean",12639,"wmonospace",65367,"wohiragana",12434,"wokatakana",12530,"wokatakanahalfwidth",65382,"won",8361,"wonmonospace",65510,"wowaenthai",3623,"wparen",9394,"wring",7832,"wsuperior",695,"wturned",653,"wynn",447,"x",120,"xabovecmb",829,"xbopomofo",12562,"xcircle",9447,"xdieresis",7821,"xdotaccent",7819,"xeharmenian",1389,"xi",958,"xmonospace",65368,"xparen",9395,"xsuperior",739,"y",121,"yaadosquare",13134,"yabengali",2479,"yacute",253,"yadeva",2351,"yaekorean",12626,"yagujarati",2735,"yagurmukhi",2607,"yahiragana",12420,"yakatakana",12516,"yakatakanahalfwidth",65428,"yakorean",12625,"yamakkanthai",3662,"yasmallhiragana",12419,"yasmallkatakana",12515,"yasmallkatakanahalfwidth",65388,"yatcyrillic",1123,"ycircle",9448,"ycircumflex",375,"ydieresis",255,"ydotaccent",7823,"ydotbelow",7925,"yeharabic",1610,"yehbarreearabic",1746,"yehbarreefinalarabic",64431,"yehfinalarabic",65266,"yehhamzaabovearabic",1574,"yehhamzaabovefinalarabic",65162,"yehhamzaaboveinitialarabic",65163,"yehhamzaabovemedialarabic",65164,"yehinitialarabic",65267,"yehmedialarabic",65268,"yehmeeminitialarabic",64733,"yehmeemisolatedarabic",64600,"yehnoonfinalarabic",64660,"yehthreedotsbelowarabic",1745,"yekorean",12630,"yen",165,"yenmonospace",65509,"yeokorean",12629,"yeorinhieuhkorean",12678,"yerahbenyomohebrew",1450,"yerahbenyomolefthebrew",1450,"yericyrillic",1099,"yerudieresiscyrillic",1273,"yesieungkorean",12673,"yesieungpansioskorean",12675,"yesieungsioskorean",12674,"yetivhebrew",1434,"ygrave",7923,"yhook",436,"yhookabove",7927,"yiarmenian",1397,"yicyrillic",1111,"yikorean",12642,"yinyang",9775,"yiwnarmenian",1410,"ymonospace",65369,"yod",1497,"yoddagesh",64313,"yoddageshhebrew",64313,"yodhebrew",1497,"yodyodhebrew",1522,"yodyodpatahhebrew",64287,"yohiragana",12424,"yoikorean",12681,"yokatakana",12520,"yokatakanahalfwidth",65430,"yokorean",12635,"yosmallhiragana",12423,"yosmallkatakana",12519,"yosmallkatakanahalfwidth",65390,"yotgreek",1011,"yoyaekorean",12680,"yoyakorean",12679,"yoyakthai",3618,"yoyingthai",3597,"yparen",9396,"ypogegrammeni",890,"ypogegrammenigreekcmb",837,"yr",422,"yring",7833,"ysuperior",696,"ytilde",7929,"yturned",654,"yuhiragana",12422,"yuikorean",12684,"yukatakana",12518,"yukatakanahalfwidth",65429,"yukorean",12640,"yusbigcyrillic",1131,"yusbigiotifiedcyrillic",1133,"yuslittlecyrillic",1127,"yuslittleiotifiedcyrillic",1129,"yusmallhiragana",12421,"yusmallkatakana",12517,"yusmallkatakanahalfwidth",65389,"yuyekorean",12683,"yuyeokorean",12682,"yyabengali",2527,"yyadeva",2399,"z",122,"zaarmenian",1382,"zacute",378,"zadeva",2395,"zagurmukhi",2651,"zaharabic",1592,"zahfinalarabic",65222,"zahinitialarabic",65223,"zahiragana",12374,"zahmedialarabic",65224,"zainarabic",1586,"zainfinalarabic",65200,"zakatakana",12470,"zaqefgadolhebrew",1429,"zaqefqatanhebrew",1428,"zarqahebrew",1432,"zayin",1494,"zayindagesh",64310,"zayindageshhebrew",64310,"zayinhebrew",1494,"zbopomofo",12567,"zcaron",382,"zcircle",9449,"zcircumflex",7825,"zcurl",657,"zdot",380,"zdotaccent",380,"zdotbelow",7827,"zecyrillic",1079,"zedescendercyrillic",1177,"zedieresiscyrillic",1247,"zehiragana",12380,"zekatakana",12476,"zero",48,"zeroarabic",1632,"zerobengali",2534,"zerodeva",2406,"zerogujarati",2790,"zerogurmukhi",2662,"zerohackarabic",1632,"zeroinferior",8320,"zeromonospace",65296,"zerooldstyle",63280,"zeropersian",1776,"zerosuperior",8304,"zerothai",3664,"zerowidthjoiner",65279,"zerowidthnonjoiner",8204,"zerowidthspace",8203,"zeta",950,"zhbopomofo",12563,"zhearmenian",1386,"zhebrevecyrillic",1218,"zhecyrillic",1078,"zhedescendercyrillic",1175,"zhedieresiscyrillic",1245,"zihiragana",12376,"zikatakana",12472,"zinorhebrew",1454,"zlinebelow",7829,"zmonospace",65370,"zohiragana",12382,"zokatakana",12478,"zparen",9397,"zretroflexhook",656,"zstroke",438,"zuhiragana",12378,"zukatakana",12474,".notdef",0,"angbracketleftbig",9001,"angbracketleftBig",9001,"angbracketleftbigg",9001,"angbracketleftBigg",9001,"angbracketrightBig",9002,"angbracketrightbig",9002,"angbracketrightBigg",9002,"angbracketrightbigg",9002,"arrowhookleft",8618,"arrowhookright",8617,"arrowlefttophalf",8636,"arrowleftbothalf",8637,"arrownortheast",8599,"arrownorthwest",8598,"arrowrighttophalf",8640,"arrowrightbothalf",8641,"arrowsoutheast",8600,"arrowsouthwest",8601,"backslashbig",8726,"backslashBig",8726,"backslashBigg",8726,"backslashbigg",8726,"bardbl",8214,"bracehtipdownleft",65079,"bracehtipdownright",65079,"bracehtipupleft",65080,"bracehtipupright",65080,"braceleftBig",123,"braceleftbig",123,"braceleftbigg",123,"braceleftBigg",123,"bracerightBig",125,"bracerightbig",125,"bracerightbigg",125,"bracerightBigg",125,"bracketleftbig",91,"bracketleftBig",91,"bracketleftbigg",91,"bracketleftBigg",91,"bracketrightBig",93,"bracketrightbig",93,"bracketrightbigg",93,"bracketrightBigg",93,"ceilingleftbig",8968,"ceilingleftBig",8968,"ceilingleftBigg",8968,"ceilingleftbigg",8968,"ceilingrightbig",8969,"ceilingrightBig",8969,"ceilingrightbigg",8969,"ceilingrightBigg",8969,"circledotdisplay",8857,"circledottext",8857,"circlemultiplydisplay",8855,"circlemultiplytext",8855,"circleplusdisplay",8853,"circleplustext",8853,"contintegraldisplay",8750,"contintegraltext",8750,"coproductdisplay",8720,"coproducttext",8720,"floorleftBig",8970,"floorleftbig",8970,"floorleftbigg",8970,"floorleftBigg",8970,"floorrightbig",8971,"floorrightBig",8971,"floorrightBigg",8971,"floorrightbigg",8971,"hatwide",770,"hatwider",770,"hatwidest",770,"intercal",7488,"integraldisplay",8747,"integraltext",8747,"intersectiondisplay",8898,"intersectiontext",8898,"logicalanddisplay",8743,"logicalandtext",8743,"logicalordisplay",8744,"logicalortext",8744,"parenleftBig",40,"parenleftbig",40,"parenleftBigg",40,"parenleftbigg",40,"parenrightBig",41,"parenrightbig",41,"parenrightBigg",41,"parenrightbigg",41,"prime",8242,"productdisplay",8719,"producttext",8719,"radicalbig",8730,"radicalBig",8730,"radicalBigg",8730,"radicalbigg",8730,"radicalbt",8730,"radicaltp",8730,"radicalvertex",8730,"slashbig",47,"slashBig",47,"slashBigg",47,"slashbigg",47,"summationdisplay",8721,"summationtext",8721,"tildewide",732,"tildewider",732,"tildewidest",732,"uniondisplay",8899,"unionmultidisplay",8846,"unionmultitext",8846,"unionsqdisplay",8852,"unionsqtext",8852,"uniontext",8899,"vextenddouble",8741,"vextendsingle",8739]})),i=(0,n.getArrayLookupTableFactory)((function(){return["space",32,"a1",9985,"a2",9986,"a202",9987,"a3",9988,"a4",9742,"a5",9990,"a119",9991,"a118",9992,"a117",9993,"a11",9755,"a12",9758,"a13",9996,"a14",9997,"a15",9998,"a16",9999,"a105",1e4,"a17",10001,"a18",10002,"a19",10003,"a20",10004,"a21",10005,"a22",10006,"a23",10007,"a24",10008,"a25",10009,"a26",10010,"a27",10011,"a28",10012,"a6",10013,"a7",10014,"a8",10015,"a9",10016,"a10",10017,"a29",10018,"a30",10019,"a31",10020,"a32",10021,"a33",10022,"a34",10023,"a35",9733,"a36",10025,"a37",10026,"a38",10027,"a39",10028,"a40",10029,"a41",10030,"a42",10031,"a43",10032,"a44",10033,"a45",10034,"a46",10035,"a47",10036,"a48",10037,"a49",10038,"a50",10039,"a51",10040,"a52",10041,"a53",10042,"a54",10043,"a55",10044,"a56",10045,"a57",10046,"a58",10047,"a59",10048,"a60",10049,"a61",10050,"a62",10051,"a63",10052,"a64",10053,"a65",10054,"a66",10055,"a67",10056,"a68",10057,"a69",10058,"a70",10059,"a71",9679,"a72",10061,"a73",9632,"a74",10063,"a203",10064,"a75",10065,"a204",10066,"a76",9650,"a77",9660,"a78",9670,"a79",10070,"a81",9687,"a82",10072,"a83",10073,"a84",10074,"a97",10075,"a98",10076,"a99",10077,"a100",10078,"a101",10081,"a102",10082,"a103",10083,"a104",10084,"a106",10085,"a107",10086,"a108",10087,"a112",9827,"a111",9830,"a110",9829,"a109",9824,"a120",9312,"a121",9313,"a122",9314,"a123",9315,"a124",9316,"a125",9317,"a126",9318,"a127",9319,"a128",9320,"a129",9321,"a130",10102,"a131",10103,"a132",10104,"a133",10105,"a134",10106,"a135",10107,"a136",10108,"a137",10109,"a138",10110,"a139",10111,"a140",10112,"a141",10113,"a142",10114,"a143",10115,"a144",10116,"a145",10117,"a146",10118,"a147",10119,"a148",10120,"a149",10121,"a150",10122,"a151",10123,"a152",10124,"a153",10125,"a154",10126,"a155",10127,"a156",10128,"a157",10129,"a158",10130,"a159",10131,"a160",10132,"a161",8594,"a163",8596,"a164",8597,"a196",10136,"a165",10137,"a192",10138,"a166",10139,"a167",10140,"a168",10141,"a169",10142,"a170",10143,"a171",10144,"a172",10145,"a173",10146,"a162",10147,"a174",10148,"a175",10149,"a176",10150,"a177",10151,"a178",10152,"a179",10153,"a193",10154,"a180",10155,"a199",10156,"a181",10157,"a200",10158,"a182",10159,"a201",10161,"a183",10162,"a184",10163,"a197",10164,"a185",10165,"a194",10166,"a198",10167,"a186",10168,"a195",10169,"a187",10170,"a188",10171,"a189",10172,"a190",10173,"a191",10174,"a89",10088,"a90",10089,"a93",10090,"a94",10091,"a91",10092,"a92",10093,"a205",10094,"a85",10095,"a206",10096,"a86",10097,"a87",10098,"a88",10099,"a95",10100,"a96",10101,".notdef",0]}))},(e,t,r)=>{r.r(t),r.d(t,{clearUnicodeCaches:()=>p,getCharUnicodeCategory:()=>d,getNormalizedUnicodes:()=>u,getUnicodeForGlyph:()=>o,getUnicodeRangeFor:()=>c,mapSpecialUnicodeValues:()=>i,reverseIfRtl:()=>l});var n=r(135);const a=(0,n.getLookupTableFactory)((function(e){e[63721]=169,e[63193]=169,e[63720]=174,e[63194]=174,e[63722]=8482,e[63195]=8482,e[63729]=9127,e[63730]=9128,e[63731]=9129,e[63740]=9131,e[63741]=9132,e[63742]=9133,e[63726]=9121,e[63727]=9122,e[63728]=9123,e[63737]=9124,e[63738]=9125,e[63739]=9126,e[63723]=9115,e[63724]=9116,e[63725]=9117,e[63734]=9118,e[63735]=9119,e[63736]=9120}));function i(e){return e>=65520&&e<=65535?0:e>=62976&&e<=63743?a()[e]||e:173===e?45:e}function o(e,t){let r=t[e];if(void 0!==r)return r;if(!e)return-1;if("u"===e[0]){const t=e.length;let n;if(7===t&&"n"===e[1]&&"i"===e[2])n=e.substring(3);else{if(!(t>=5&&t<=7))return-1;n=e.substring(1)}if(n===n.toUpperCase()&&(r=parseInt(n,16),r>=0))return r}return-1}const s=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function c(e){for(let t=0,r=s.length;t=r.begin&&e=t.begin&&e=t.begin&&e=0;n--)r.push(e[n]);return r.join("")}const f=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),h=new Map;function d(e){const t=h.get(e);if(t)return t;const r=e.match(f),n={isWhitespace:!(!r||!r[1]),isZeroWidthDiacritic:!(!r||!r[2]),isInvisibleFormatMark:!(!r||!r[3])};return h.set(e,n),n}function p(){h.clear()}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getSerifFonts=t.getNonStdFontMap=t.getGlyphMapForStandardFonts=t.getFontNameToFileMap=void 0,t.getStandardFontName=function(e){var t=(0,a.normalizeFontName)(e);return i()[t]},t.getSymbolsFonts=t.getSupplementalGlyphMapForCalibri=t.getSupplementalGlyphMapForArialBlack=t.getStdFontMap=void 0;var n=r(135),a=r(167),i=(0,n.getLookupTableFactory)((function(e){e["Times-Roman"]="Times-Roman",e.Helvetica="Helvetica",e.Courier="Courier",e.Symbol="Symbol",e["Times-Bold"]="Times-Bold",e["Helvetica-Bold"]="Helvetica-Bold",e["Courier-Bold"]="Courier-Bold",e.ZapfDingbats="ZapfDingbats",e["Times-Italic"]="Times-Italic",e["Helvetica-Oblique"]="Helvetica-Oblique",e["Courier-Oblique"]="Courier-Oblique",e["Times-BoldItalic"]="Times-BoldItalic",e["Helvetica-BoldOblique"]="Helvetica-BoldOblique",e["Courier-BoldOblique"]="Courier-BoldOblique",e.ArialNarrow="Helvetica",e["ArialNarrow-Bold"]="Helvetica-Bold",e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique",e["ArialNarrow-Italic"]="Helvetica-Oblique",e.ArialBlack="Helvetica",e["ArialBlack-Bold"]="Helvetica-Bold",e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique",e["ArialBlack-Italic"]="Helvetica-Oblique",e["Arial-Black"]="Helvetica",e["Arial-Black-Bold"]="Helvetica-Bold",e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Black-Italic"]="Helvetica-Oblique",e.Arial="Helvetica",e["Arial-Bold"]="Helvetica-Bold",e["Arial-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Italic"]="Helvetica-Oblique",e.ArialMT="Helvetica",e["Arial-BoldItalicMT"]="Helvetica-BoldOblique",e["Arial-BoldMT"]="Helvetica-Bold",e["Arial-ItalicMT"]="Helvetica-Oblique",e.ArialUnicodeMS="Helvetica",e["ArialUnicodeMS-Bold"]="Helvetica-Bold",e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique",e["ArialUnicodeMS-Italic"]="Helvetica-Oblique",e["Courier-BoldItalic"]="Courier-BoldOblique",e["Courier-Italic"]="Courier-Oblique",e.CourierNew="Courier",e["CourierNew-Bold"]="Courier-Bold",e["CourierNew-BoldItalic"]="Courier-BoldOblique",e["CourierNew-Italic"]="Courier-Oblique",e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique",e["CourierNewPS-BoldMT"]="Courier-Bold",e["CourierNewPS-ItalicMT"]="Courier-Oblique",e.CourierNewPSMT="Courier",e["Helvetica-BoldItalic"]="Helvetica-BoldOblique",e["Helvetica-Italic"]="Helvetica-Oblique",e["Symbol-Bold"]="Symbol",e["Symbol-BoldItalic"]="Symbol",e["Symbol-Italic"]="Symbol",e.TimesNewRoman="Times-Roman",e["TimesNewRoman-Bold"]="Times-Bold",e["TimesNewRoman-BoldItalic"]="Times-BoldItalic",e["TimesNewRoman-Italic"]="Times-Italic",e.TimesNewRomanPS="Times-Roman",e["TimesNewRomanPS-Bold"]="Times-Bold",e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic",e["TimesNewRomanPS-BoldMT"]="Times-Bold",e["TimesNewRomanPS-Italic"]="Times-Italic",e["TimesNewRomanPS-ItalicMT"]="Times-Italic",e.TimesNewRomanPSMT="Times-Roman",e["TimesNewRomanPSMT-Bold"]="Times-Bold",e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPSMT-Italic"]="Times-Italic"}));t.getStdFontMap=i;var o=(0,n.getLookupTableFactory)((function(e){e.Courier="FoxitFixed.pfb",e["Courier-Bold"]="FoxitFixedBold.pfb",e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb",e["Courier-Oblique"]="FoxitFixedItalic.pfb",e.Helvetica="FoxitSans.pfb",e["Helvetica-Bold"]="FoxitSansBold.pfb",e["Helvetica-BoldOblique"]="FoxitSansBoldItalic.pfb",e["Helvetica-Oblique"]="FoxitSansItalic.pfb",e["Times-Roman"]="FoxitSerif.pfb",e["Times-Bold"]="FoxitSerifBold.pfb",e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb",e["Times-Italic"]="FoxitSerifItalic.pfb",e.Symbol="FoxitSymbol.pfb",e.ZapfDingbats="FoxitDingbats.pfb",e["LiberationSans-Regular"]="LiberationSans-Regular.ttf",e["LiberationSans-Bold"]="LiberationSans-Bold.ttf",e["LiberationSans-Italic"]="LiberationSans-Italic.ttf",e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"}));t.getFontNameToFileMap=o;var s=(0,n.getLookupTableFactory)((function(e){e.Calibri="Helvetica",e["Calibri-Bold"]="Helvetica-Bold",e["Calibri-BoldItalic"]="Helvetica-BoldOblique",e["Calibri-Italic"]="Helvetica-Oblique",e.CenturyGothic="Helvetica",e["CenturyGothic-Bold"]="Helvetica-Bold",e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique",e["CenturyGothic-Italic"]="Helvetica-Oblique",e.ComicSansMS="Comic Sans MS",e["ComicSansMS-Bold"]="Comic Sans MS-Bold",e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic",e["ComicSansMS-Italic"]="Comic Sans MS-Italic",e["ItcSymbol-Bold"]="Helvetica-Bold",e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique",e["ItcSymbol-Book"]="Helvetica",e["ItcSymbol-BookItalic"]="Helvetica-Oblique",e["ItcSymbol-Medium"]="Helvetica",e["ItcSymbol-MediumItalic"]="Helvetica-Oblique",e.LucidaConsole="Courier",e["LucidaConsole-Bold"]="Courier-Bold",e["LucidaConsole-BoldItalic"]="Courier-BoldOblique",e["LucidaConsole-Italic"]="Courier-Oblique",e["LucidaSans-Demi"]="Helvetica-Bold",e["MS-Gothic"]="MS Gothic",e["MS-Gothic-Bold"]="MS Gothic-Bold",e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic",e["MS-Gothic-Italic"]="MS Gothic-Italic",e["MS-Mincho"]="MS Mincho",e["MS-Mincho-Bold"]="MS Mincho-Bold",e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic",e["MS-Mincho-Italic"]="MS Mincho-Italic",e["MS-PGothic"]="MS PGothic",e["MS-PGothic-Bold"]="MS PGothic-Bold",e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic",e["MS-PGothic-Italic"]="MS PGothic-Italic",e["MS-PMincho"]="MS PMincho",e["MS-PMincho-Bold"]="MS PMincho-Bold",e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic",e["MS-PMincho-Italic"]="MS PMincho-Italic",e.NuptialScript="Times-Italic",e.SegoeUISymbol="Helvetica",e.Wingdings="ZapfDingbats",e["Wingdings-Regular"]="ZapfDingbats"}));t.getNonStdFontMap=s;var c=(0,n.getLookupTableFactory)((function(e){e["Adobe Jenson"]=!0,e["Adobe Text"]=!0,e.Albertus=!0,e.Aldus=!0,e.Alexandria=!0,e.Algerian=!0,e["American Typewriter"]=!0,e.Antiqua=!0,e.Apex=!0,e.Arno=!0,e.Aster=!0,e.Aurora=!0,e.Baskerville=!0,e.Bell=!0,e.Bembo=!0,e["Bembo Schoolbook"]=!0,e.Benguiat=!0,e["Berkeley Old Style"]=!0,e["Bernhard Modern"]=!0,e["Berthold City"]=!0,e.Bodoni=!0,e["Bauer Bodoni"]=!0,e["Book Antiqua"]=!0,e.Bookman=!0,e["Bordeaux Roman"]=!0,e["Californian FB"]=!0,e.Calisto=!0,e.Calvert=!0,e.Capitals=!0,e.Cambria=!0,e.Cartier=!0,e.Caslon=!0,e.Catull=!0,e.Centaur=!0,e["Century Old Style"]=!0,e["Century Schoolbook"]=!0,e.Chaparral=!0,e["Charis SIL"]=!0,e.Cheltenham=!0,e["Cholla Slab"]=!0,e.Clarendon=!0,e.Clearface=!0,e.Cochin=!0,e.Colonna=!0,e["Computer Modern"]=!0,e["Concrete Roman"]=!0,e.Constantia=!0,e["Cooper Black"]=!0,e.Corona=!0,e.Ecotype=!0,e.Egyptienne=!0,e.Elephant=!0,e.Excelsior=!0,e.Fairfield=!0,e["FF Scala"]=!0,e.Folkard=!0,e.Footlight=!0,e.FreeSerif=!0,e["Friz Quadrata"]=!0,e.Garamond=!0,e.Gentium=!0,e.Georgia=!0,e.Gloucester=!0,e["Goudy Old Style"]=!0,e["Goudy Schoolbook"]=!0,e["Goudy Pro Font"]=!0,e.Granjon=!0,e["Guardian Egyptian"]=!0,e.Heather=!0,e.Hercules=!0,e["High Tower Text"]=!0,e.Hiroshige=!0,e["Hoefler Text"]=!0,e["Humana Serif"]=!0,e.Imprint=!0,e["Ionic No. 5"]=!0,e.Janson=!0,e.Joanna=!0,e.Korinna=!0,e.Lexicon=!0,e.LiberationSerif=!0,e["Liberation Serif"]=!0,e["Linux Libertine"]=!0,e.Literaturnaya=!0,e.Lucida=!0,e["Lucida Bright"]=!0,e.Melior=!0,e.Memphis=!0,e.Miller=!0,e.Minion=!0,e.Modern=!0,e["Mona Lisa"]=!0,e["Mrs Eaves"]=!0,e["MS Serif"]=!0,e["Museo Slab"]=!0,e["New York"]=!0,e["Nimbus Roman"]=!0,e["NPS Rawlinson Roadway"]=!0,e.NuptialScript=!0,e.Palatino=!0,e.Perpetua=!0,e.Plantin=!0,e["Plantin Schoolbook"]=!0,e.Playbill=!0,e["Poor Richard"]=!0,e["Rawlinson Roadway"]=!0,e.Renault=!0,e.Requiem=!0,e.Rockwell=!0,e.Roman=!0,e["Rotis Serif"]=!0,e.Sabon=!0,e.Scala=!0,e.Seagull=!0,e.Sistina=!0,e.Souvenir=!0,e.STIX=!0,e["Stone Informal"]=!0,e["Stone Serif"]=!0,e.Sylfaen=!0,e.Times=!0,e.Trajan=!0,e["Trinité"]=!0,e["Trump Mediaeval"]=!0,e.Utopia=!0,e["Vale Type"]=!0,e["Bitstream Vera"]=!0,e["Vera Serif"]=!0,e.Versailles=!0,e.Wanted=!0,e.Weiss=!0,e["Wide Latin"]=!0,e.Windsor=!0,e.XITS=!0}));t.getSerifFonts=c;var u=(0,n.getLookupTableFactory)((function(e){e.Dingbats=!0,e.Symbol=!0,e.ZapfDingbats=!0}));t.getSymbolsFonts=u;var l=(0,n.getLookupTableFactory)((function(e){e[2]=10,e[3]=32,e[4]=33,e[5]=34,e[6]=35,e[7]=36,e[8]=37,e[9]=38,e[10]=39,e[11]=40,e[12]=41,e[13]=42,e[14]=43,e[15]=44,e[16]=45,e[17]=46,e[18]=47,e[19]=48,e[20]=49,e[21]=50,e[22]=51,e[23]=52,e[24]=53,e[25]=54,e[26]=55,e[27]=56,e[28]=57,e[29]=58,e[30]=894,e[31]=60,e[32]=61,e[33]=62,e[34]=63,e[35]=64,e[36]=65,e[37]=66,e[38]=67,e[39]=68,e[40]=69,e[41]=70,e[42]=71,e[43]=72,e[44]=73,e[45]=74,e[46]=75,e[47]=76,e[48]=77,e[49]=78,e[50]=79,e[51]=80,e[52]=81,e[53]=82,e[54]=83,e[55]=84,e[56]=85,e[57]=86,e[58]=87,e[59]=88,e[60]=89,e[61]=90,e[62]=91,e[63]=92,e[64]=93,e[65]=94,e[66]=95,e[67]=96,e[68]=97,e[69]=98,e[70]=99,e[71]=100,e[72]=101,e[73]=102,e[74]=103,e[75]=104,e[76]=105,e[77]=106,e[78]=107,e[79]=108,e[80]=109,e[81]=110,e[82]=111,e[83]=112,e[84]=113,e[85]=114,e[86]=115,e[87]=116,e[88]=117,e[89]=118,e[90]=119,e[91]=120,e[92]=121,e[93]=122,e[94]=123,e[95]=124,e[96]=125,e[97]=126,e[98]=196,e[99]=197,e[100]=199,e[101]=201,e[102]=209,e[103]=214,e[104]=220,e[105]=225,e[106]=224,e[107]=226,e[108]=228,e[109]=227,e[110]=229,e[111]=231,e[112]=233,e[113]=232,e[114]=234,e[115]=235,e[116]=237,e[117]=236,e[118]=238,e[119]=239,e[120]=241,e[121]=243,e[122]=242,e[123]=244,e[124]=246,e[125]=245,e[126]=250,e[127]=249,e[128]=251,e[129]=252,e[130]=8224,e[131]=176,e[132]=162,e[133]=163,e[134]=167,e[135]=8226,e[136]=182,e[137]=223,e[138]=174,e[139]=169,e[140]=8482,e[141]=180,e[142]=168,e[143]=8800,e[144]=198,e[145]=216,e[146]=8734,e[147]=177,e[148]=8804,e[149]=8805,e[150]=165,e[151]=181,e[152]=8706,e[153]=8721,e[154]=8719,e[156]=8747,e[157]=170,e[158]=186,e[159]=8486,e[160]=230,e[161]=248,e[162]=191,e[163]=161,e[164]=172,e[165]=8730,e[166]=402,e[167]=8776,e[168]=8710,e[169]=171,e[170]=187,e[171]=8230,e[179]=8220,e[180]=8221,e[181]=8216,e[182]=8217,e[200]=193,e[203]=205,e[210]=218,e[223]=711,e[224]=321,e[225]=322,e[226]=352,e[227]=353,e[228]=381,e[229]=382,e[233]=221,e[234]=253,e[252]=263,e[253]=268,e[254]=269,e[258]=258,e[260]=260,e[261]=261,e[265]=280,e[266]=281,e[267]=282,e[268]=283,e[269]=313,e[275]=323,e[276]=324,e[278]=328,e[283]=344,e[284]=345,e[285]=346,e[286]=347,e[292]=367,e[295]=377,e[296]=378,e[298]=380,e[305]=963,e[306]=964,e[307]=966,e[308]=8215,e[309]=8252,e[310]=8319,e[311]=8359,e[312]=8592,e[313]=8593,e[337]=9552,e[493]=1039,e[494]=1040,e[672]=1488,e[673]=1489,e[674]=1490,e[675]=1491,e[676]=1492,e[677]=1493,e[678]=1494,e[679]=1495,e[680]=1496,e[681]=1497,e[682]=1498,e[683]=1499,e[684]=1500,e[685]=1501,e[686]=1502,e[687]=1503,e[688]=1504,e[689]=1505,e[690]=1506,e[691]=1507,e[692]=1508,e[693]=1509,e[694]=1510,e[695]=1511,e[696]=1512,e[697]=1513,e[698]=1514,e[705]=1524,e[706]=8362,e[710]=64288,e[711]=64298,e[759]=1617,e[761]=1776,e[763]=1778,e[775]=1652,e[777]=1764,e[778]=1780,e[779]=1781,e[780]=1782,e[782]=771,e[783]=64726,e[786]=8363,e[788]=8532,e[790]=768,e[791]=769,e[792]=768,e[795]=803,e[797]=64336,e[798]=64337,e[799]=64342,e[800]=64343,e[801]=64344,e[802]=64345,e[803]=64362,e[804]=64363,e[805]=64364,e[2424]=7821,e[2425]=7822,e[2426]=7823,e[2427]=7824,e[2428]=7825,e[2429]=7826,e[2430]=7827,e[2433]=7682,e[2678]=8045,e[2679]=8046,e[2830]=1552,e[2838]=686,e[2840]=751,e[2842]=753,e[2843]=754,e[2844]=755,e[2846]=757,e[2856]=767,e[2857]=848,e[2858]=849,e[2862]=853,e[2863]=854,e[2864]=855,e[2865]=861,e[2866]=862,e[2906]=7460,e[2908]=7462,e[2909]=7463,e[2910]=7464,e[2912]=7466,e[2913]=7467,e[2914]=7468,e[2916]=7470,e[2917]=7471,e[2918]=7472,e[2920]=7474,e[2921]=7475,e[2922]=7476,e[2924]=7478,e[2925]=7479,e[2926]=7480,e[2928]=7482,e[2929]=7483,e[2930]=7484,e[2932]=7486,e[2933]=7487,e[2934]=7488,e[2936]=7490,e[2937]=7491,e[2938]=7492,e[2940]=7494,e[2941]=7495,e[2942]=7496,e[2944]=7498,e[2946]=7500,e[2948]=7502,e[2950]=7504,e[2951]=7505,e[2952]=7506,e[2954]=7508,e[2955]=7509,e[2956]=7510,e[2958]=7512,e[2959]=7513,e[2960]=7514,e[2962]=7516,e[2963]=7517,e[2964]=7518,e[2966]=7520,e[2967]=7521,e[2968]=7522,e[2970]=7524,e[2971]=7525,e[2972]=7526,e[2974]=7528,e[2975]=7529,e[2976]=7530,e[2978]=1537,e[2979]=1538,e[2980]=1539,e[2982]=1549,e[2983]=1551,e[2984]=1552,e[2986]=1554,e[2987]=1555,e[2988]=1556,e[2990]=1623,e[2991]=1624,e[2995]=1775,e[2999]=1791,e[3002]=64290,e[3003]=64291,e[3004]=64292,e[3006]=64294,e[3007]=64295,e[3008]=64296,e[3011]=1900,e[3014]=8223,e[3015]=8244,e[3017]=7532,e[3018]=7533,e[3019]=7534,e[3075]=7590,e[3076]=7591,e[3079]=7594,e[3080]=7595,e[3083]=7598,e[3084]=7599,e[3087]=7602,e[3088]=7603,e[3091]=7606,e[3092]=7607,e[3095]=7610,e[3096]=7611,e[3099]=7614,e[3100]=7615,e[3103]=7618,e[3104]=7619,e[3107]=8337,e[3108]=8338,e[3116]=1884,e[3119]=1885,e[3120]=1885,e[3123]=1886,e[3124]=1886,e[3127]=1887,e[3128]=1887,e[3131]=1888,e[3132]=1888,e[3135]=1889,e[3136]=1889,e[3139]=1890,e[3140]=1890,e[3143]=1891,e[3144]=1891,e[3147]=1892,e[3148]=1892,e[3153]=580,e[3154]=581,e[3157]=584,e[3158]=585,e[3161]=588,e[3162]=589,e[3165]=891,e[3166]=892,e[3169]=1274,e[3170]=1275,e[3173]=1278,e[3174]=1279,e[3181]=7622,e[3182]=7623,e[3282]=11799,e[3316]=578,e[3379]=42785,e[3393]=1159,e[3416]=8377}));t.getGlyphMapForStandardFonts=l;var f=(0,n.getLookupTableFactory)((function(e){e[227]=322,e[264]=261,e[291]=346}));t.getSupplementalGlyphMapForArialBlack=f;var h=(0,n.getLookupTableFactory)((function(e){e[1]=32,e[4]=65,e[5]=192,e[6]=193,e[9]=196,e[17]=66,e[18]=67,e[21]=268,e[24]=68,e[28]=69,e[29]=200,e[30]=201,e[32]=282,e[38]=70,e[39]=71,e[44]=72,e[47]=73,e[48]=204,e[49]=205,e[58]=74,e[60]=75,e[62]=76,e[68]=77,e[69]=78,e[75]=79,e[76]=210,e[80]=214,e[87]=80,e[89]=81,e[90]=82,e[92]=344,e[94]=83,e[97]=352,e[100]=84,e[104]=85,e[109]=220,e[115]=86,e[116]=87,e[121]=88,e[122]=89,e[124]=221,e[127]=90,e[129]=381,e[258]=97,e[259]=224,e[260]=225,e[263]=228,e[268]=261,e[271]=98,e[272]=99,e[273]=263,e[275]=269,e[282]=100,e[286]=101,e[287]=232,e[288]=233,e[290]=283,e[295]=281,e[296]=102,e[336]=103,e[346]=104,e[349]=105,e[350]=236,e[351]=237,e[361]=106,e[364]=107,e[367]=108,e[371]=322,e[373]=109,e[374]=110,e[381]=111,e[382]=242,e[383]=243,e[386]=246,e[393]=112,e[395]=113,e[396]=114,e[398]=345,e[400]=115,e[401]=347,e[403]=353,e[410]=116,e[437]=117,e[442]=252,e[448]=118,e[449]=119,e[454]=120,e[455]=121,e[457]=253,e[460]=122,e[462]=382,e[463]=380,e[853]=44,e[855]=58,e[856]=46,e[876]=47,e[878]=45,e[882]=45,e[894]=40,e[895]=41,e[896]=91,e[897]=93,e[923]=64,e[1004]=48,e[1005]=49,e[1006]=50,e[1007]=51,e[1008]=52,e[1009]=53,e[1010]=54,e[1011]=55,e[1012]=56,e[1013]=57,e[1081]=37,e[1085]=43,e[1086]=45}));t.getSupplementalGlyphMapForCalibri=h},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ToUnicodeMap=t.IdentityToUnicodeMap=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:[];i(this,e),this._map=t}return s(e,[{key:"length",get:function(){return this._map.length}},{key:"forEach",value:function(e){for(var t in this._map)e(t,this._map[t].charCodeAt(0))}},{key:"has",value:function(e){return void 0!==this._map[e]}},{key:"get",value:function(e){return this._map[e]}},{key:"charCodeOf",value:function(e){var t=this._map;if(t.length<=65536)return t.indexOf(e);for(var r in t)if(t[r]===e)return 0|r;return-1}},{key:"amend",value:function(e){for(var t in e)this._map[t]=e[t]}}]),e}();t.ToUnicodeMap=c;var u=function(){function e(t,r){i(this,e),this.firstChar=t,this.lastChar=r}return s(e,[{key:"length",get:function(){return this.lastChar+1-this.firstChar}},{key:"forEach",value:function(e){for(var t=this.firstChar,r=this.lastChar;t<=r;t++)e(t,t)}},{key:"has",value:function(e){return this.firstChar<=e&&e<=this.lastChar}},{key:"get",value:function(e){if(this.firstChar<=e&&e<=this.lastChar)return String.fromCharCode(e)}},{key:"charCodeOf",value:function(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1}},{key:"amend",value:function(e){(0,n.unreachable)("Should not call amend()")}}]),e}();t.IdentityToUnicodeMap=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CFFFont=void 0;var n=r(164),a=r(167),i=r(2);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){for(var r=0;r0){c=Object.create(null);for(var l=0,f=i.length;l=0){var c=n[s];c&&(i[o]=c)}}i.length>0&&(this.properties.builtInEncoding=i)}}}])&&s(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.CFFFont=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FontRendererFactory=void 0;var n=r(2),a=r(164),i=r(168),o=r(166),s=r(139);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=f(e);if(t){var a=f(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===h(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function p(e,t){for(var r=0;r>>0}function y(e,t){return e[t]<<8|e[t+1]}function m(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function b(e,t){return e[t]<<24>>24}function w(e,t){return m(e,t)/16384}function k(e){var t=e.length,r=32768;return t<1240?r=107:t<33900&&(r=1131),r}function S(e,t,r){var a,i,o,s=1===y(e,t+2)?v(e,t+8):v(e,t+16),c=y(e,t+s);if(4===c){y(e,t+s+2);var u=y(e,t+s+6)>>1;for(i=t+s+14,a=[],o=0;o>1;r0;)P.push({flags:o})}for(x=0;x>1,g=!0;break;case 4:f+=u.pop(),i(l,f),g=!0;break;case 5:for(;u.length>0;)l+=u.shift(),f+=u.shift(),s(l,f);break;case 6:for(;u.length>0&&(s(l+=u.shift(),f),0!==u.length);)f+=u.shift(),s(l,f);break;case 7:for(;u.length>0&&(f+=u.shift(),s(l,f),0!==u.length);)s(l+=u.shift(),f);break;case 8:for(;u.length>0;)y=l+u.shift(),b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+u.shift(),c(y,b,m,w,l,f);break;case 10:if(A=u.pop(),F=null,r.isCFFCIDFont){var P=r.fdSelect.getFDIndex(a);if(P>=0&&PMath.abs(f-j)?l+=u.shift():f+=u.shift(),c(y,b,m,w,l,f);break;default:throw new n.FormatError("unknown operator: 12 ".concat(v))}break;case 14:if(u.length>=4){var M=u.pop(),_=u.pop();f=u.pop(),l=u.pop(),t.push({cmd:"save"},{cmd:"translate",args:[l,f]});var L=O(r.cmap,String.fromCharCode(r.glyphNameMap[o.StandardEncoding[M]]));C(r.glyphs[L.glyphId],t,r,L.glyphId),t.push({cmd:"restore"}),L=O(r.cmap,String.fromCharCode(r.glyphNameMap[o.StandardEncoding[_]])),C(r.glyphs[L.glyphId],t,r,L.glyphId)}return;case 19:case 20:p+=(h+=u.length>>1)+7>>3,g=!0;break;case 21:f+=u.pop(),i(l+=u.pop(),f),g=!0;break;case 22:i(l+=u.pop(),f),g=!0;break;case 24:for(;u.length>2;)y=l+u.shift(),b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+u.shift(),c(y,b,m,w,l,f);l+=u.shift(),f+=u.shift(),s(l,f);break;case 25:for(;u.length>6;)l+=u.shift(),f+=u.shift(),s(l,f);y=l+u.shift(),b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+u.shift(),c(y,b,m,w,l,f);break;case 26:for(u.length%2&&(l+=u.shift());u.length>0;)y=l,b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m,f=w+u.shift(),c(y,b,m,w,l,f);break;case 27:for(u.length%2&&(f+=u.shift());u.length>0;)c(y=l+u.shift(),b=f,m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w);break;case 28:u.push((d[p]<<24|d[p+1]<<16)>>16),p+=2;break;case 29:A=u.pop()+r.gsubrsBias,(F=r.gsubrs[A])&&e(F);break;case 30:for(;u.length>0&&(y=l,b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+(1===u.length?u.shift():0),c(y,b,m,w,l,f),0!==u.length);)y=l+u.shift(),b=f,m=y+u.shift(),w=b+u.shift(),f=w+u.shift(),c(y,b,m,w,l=m+(1===u.length?u.shift():0),f);break;case 31:for(;u.length>0&&(y=l+u.shift(),b=f,m=y+u.shift(),w=b+u.shift(),f=w+u.shift(),c(y,b,m,w,l=m+(1===u.length?u.shift():0),f),0!==u.length);)y=l,b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+(1===u.length?u.shift():0),c(y,b,m,w,l,f);break;default:if(v<32)throw new n.FormatError("unknown operator: ".concat(v));v<247?u.push(v-139):v<251?u.push(256*(v-247)+d[p++]+108):v<255?u.push(256*-(v-251)-d[p++]-108):(u.push((d[p]<<24|d[p+1]<<16|d[p+2]<<8|d[p+3])/65536),p+=4)}g&&(u.length=0)}}(e)}var F=[],P=function(){function e(t){d(this,e),this.constructor===e&&(0,n.unreachable)("Cannot initialize CompiledFont."),this.fontMatrix=t,this.compiledGlyphs=Object.create(null),this.compiledCharCodeToGlyphId=Object.create(null)}return g(e,[{key:"getPathJs",value:function(e){var t=O(this.cmap,e),r=t.charCode,n=t.glyphId,a=this.compiledGlyphs[n];if(!a)try{a=this.compileGlyph(this.glyphs[n],n),this.compiledGlyphs[n]=a}catch(e){throw this.compiledGlyphs[n]=F,void 0===this.compiledCharCodeToGlyphId[r]&&(this.compiledCharCodeToGlyphId[r]=n),e}return void 0===this.compiledCharCodeToGlyphId[r]&&(this.compiledCharCodeToGlyphId[r]=n),a}},{key:"compileGlyph",value:function(e,t){if(!e||0===e.length||14===e[0])return F;var r=this.fontMatrix;if(this.isCFFCIDFont){var a=this.fdSelect.getFDIndex(t);a>=0&&a{Object.defineProperty(t,"__esModule",{value:!0}),t.getMetrics=t.getFontBasicMetrics=void 0;var n=r(135),a=(0,n.getLookupTableFactory)((function(e){e.Courier=600,e["Courier-Bold"]=600,e["Courier-BoldOblique"]=600,e["Courier-Oblique"]=600,e.Helvetica=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=278,e.quotedbl=355,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=667,e.quoteright=222,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=278,e.semicolon=278,e.less=584,e.equal=584,e.greater=584,e.question=556,e.at=1015,e.A=667,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=500,e.K=667,e.L=556,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=278,e.backslash=278,e.bracketright=278,e.asciicircum=469,e.underscore=556,e.quoteleft=222,e.a=556,e.b=556,e.c=500,e.d=556,e.e=556,e.f=278,e.g=556,e.h=556,e.i=222,e.j=222,e.k=500,e.l=222,e.m=833,e.n=556,e.o=556,e.p=556,e.q=556,e.r=333,e.s=500,e.t=278,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=500,e.braceleft=334,e.bar=260,e.braceright=334,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=191,e.quotedblleft=333,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=537,e.bullet=350,e.quotesinglbase=222,e.quotedblbase=333,e.quotedblright=333,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=556,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=222,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=556,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=667,e.aacute=556,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=500,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=500,e.aring=556,e.Ncommaaccent=722,e.lacute=222,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=500,e.scedilla=500,e.iacute=278,e.lozenge=471,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=556,e.Amacron=667,e.rcaron=333,e.ccedilla=500,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=643,e.Umacron=722,e.uring=556,e.threesuperior=333,e.Ograve=778,e.Agrave=667,e.Abreve=667,e.multiply=584,e.uacute=556,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=500,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=260,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=333,e.omacron=556,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=222,e.tcaron=317,e.eogonek=556,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=556,e.zacute=500,e.iogonek=222,e.Oacute=778,e.oacute=556,e.amacron=556,e.sacute=500,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=333,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=556,e.Eogonek=667,e.dcroat=556,e.threequarters=834,e.Scedilla=667,e.lcaron=299,e.Kcommaaccent=667,e.Lacute=556,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=556,e.onehalf=834,e.lessequal=549,e.ocircumflex=556,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=556,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=556,e.Ccaron=722,e.ugrave=556,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=556,e.Rcommaaccent=722,e.Lcommaaccent=556,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=500,e.minus=584,e.Icircumflex=278,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=584,e.odieresis=556,e.udieresis=556,e.notequal=549,e.gcommaaccent=556,e.eth=556,e.zcaron=500,e.ncommaaccent=556,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-Bold"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=333,e.quotedbl=474,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=722,e.quoteright=278,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=333,e.semicolon=333,e.less=584,e.equal=584,e.greater=584,e.question=611,e.at=975,e.A=722,e.B=722,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=556,e.K=722,e.L=611,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=584,e.underscore=556,e.quoteleft=278,e.a=556,e.b=611,e.c=556,e.d=611,e.e=556,e.f=333,e.g=611,e.h=611,e.i=278,e.j=278,e.k=556,e.l=278,e.m=889,e.n=611,e.o=611,e.p=611,e.q=611,e.r=389,e.s=556,e.t=333,e.u=611,e.v=556,e.w=778,e.x=556,e.y=556,e.z=500,e.braceleft=389,e.bar=280,e.braceright=389,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=238,e.quotedblleft=500,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=611,e.fl=611,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=556,e.bullet=350,e.quotesinglbase=278,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=611,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=278,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=611,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=722,e.aacute=556,e.Ucircumflex=722,e.yacute=556,e.scommaaccent=556,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=611,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=556,e.aring=556,e.Ncommaaccent=722,e.lacute=278,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=556,e.scedilla=556,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=611,e.acircumflex=556,e.Amacron=722,e.rcaron=389,e.ccedilla=556,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=743,e.Umacron=722,e.uring=611,e.threesuperior=333,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=584,e.uacute=611,e.Tcaron=611,e.partialdiff=494,e.ydieresis=556,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=556,e.nacute=611,e.umacron=611,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=280,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=611,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=389,e.eogonek=556,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=556,e.zacute=500,e.iogonek=278,e.Oacute=778,e.oacute=611,e.amacron=556,e.sacute=556,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=611,e.twosuperior=333,e.Odieresis=778,e.mu=611,e.igrave=278,e.ohungarumlaut=611,e.Eogonek=667,e.dcroat=611,e.threequarters=834,e.Scedilla=667,e.lcaron=400,e.Kcommaaccent=722,e.Lacute=611,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=611,e.onehalf=834,e.lessequal=549,e.ocircumflex=611,e.ntilde=611,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=611,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=611,e.Ccaron=722,e.ugrave=611,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=611,e.Rcommaaccent=722,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=556,e.minus=584,e.Icircumflex=278,e.ncaron=611,e.tcommaaccent=333,e.logicalnot=584,e.odieresis=611,e.udieresis=611,e.notequal=549,e.gcommaaccent=611,e.eth=611,e.zcaron=500,e.ncommaaccent=611,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-BoldOblique"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=333,e.quotedbl=474,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=722,e.quoteright=278,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=333,e.semicolon=333,e.less=584,e.equal=584,e.greater=584,e.question=611,e.at=975,e.A=722,e.B=722,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=556,e.K=722,e.L=611,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=584,e.underscore=556,e.quoteleft=278,e.a=556,e.b=611,e.c=556,e.d=611,e.e=556,e.f=333,e.g=611,e.h=611,e.i=278,e.j=278,e.k=556,e.l=278,e.m=889,e.n=611,e.o=611,e.p=611,e.q=611,e.r=389,e.s=556,e.t=333,e.u=611,e.v=556,e.w=778,e.x=556,e.y=556,e.z=500,e.braceleft=389,e.bar=280,e.braceright=389,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=238,e.quotedblleft=500,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=611,e.fl=611,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=556,e.bullet=350,e.quotesinglbase=278,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=611,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=278,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=611,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=722,e.aacute=556,e.Ucircumflex=722,e.yacute=556,e.scommaaccent=556,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=611,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=556,e.aring=556,e.Ncommaaccent=722,e.lacute=278,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=556,e.scedilla=556,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=611,e.acircumflex=556,e.Amacron=722,e.rcaron=389,e.ccedilla=556,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=743,e.Umacron=722,e.uring=611,e.threesuperior=333,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=584,e.uacute=611,e.Tcaron=611,e.partialdiff=494,e.ydieresis=556,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=556,e.nacute=611,e.umacron=611,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=280,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=611,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=389,e.eogonek=556,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=556,e.zacute=500,e.iogonek=278,e.Oacute=778,e.oacute=611,e.amacron=556,e.sacute=556,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=611,e.twosuperior=333,e.Odieresis=778,e.mu=611,e.igrave=278,e.ohungarumlaut=611,e.Eogonek=667,e.dcroat=611,e.threequarters=834,e.Scedilla=667,e.lcaron=400,e.Kcommaaccent=722,e.Lacute=611,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=611,e.onehalf=834,e.lessequal=549,e.ocircumflex=611,e.ntilde=611,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=611,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=611,e.Ccaron=722,e.ugrave=611,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=611,e.Rcommaaccent=722,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=556,e.minus=584,e.Icircumflex=278,e.ncaron=611,e.tcommaaccent=333,e.logicalnot=584,e.odieresis=611,e.udieresis=611,e.notequal=549,e.gcommaaccent=611,e.eth=611,e.zcaron=500,e.ncommaaccent=611,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-Oblique"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=278,e.quotedbl=355,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=667,e.quoteright=222,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=278,e.semicolon=278,e.less=584,e.equal=584,e.greater=584,e.question=556,e.at=1015,e.A=667,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=500,e.K=667,e.L=556,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=278,e.backslash=278,e.bracketright=278,e.asciicircum=469,e.underscore=556,e.quoteleft=222,e.a=556,e.b=556,e.c=500,e.d=556,e.e=556,e.f=278,e.g=556,e.h=556,e.i=222,e.j=222,e.k=500,e.l=222,e.m=833,e.n=556,e.o=556,e.p=556,e.q=556,e.r=333,e.s=500,e.t=278,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=500,e.braceleft=334,e.bar=260,e.braceright=334,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=191,e.quotedblleft=333,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=537,e.bullet=350,e.quotesinglbase=222,e.quotedblbase=333,e.quotedblright=333,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=556,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=222,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=556,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=667,e.aacute=556,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=500,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=500,e.aring=556,e.Ncommaaccent=722,e.lacute=222,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=500,e.scedilla=500,e.iacute=278,e.lozenge=471,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=556,e.Amacron=667,e.rcaron=333,e.ccedilla=500,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=643,e.Umacron=722,e.uring=556,e.threesuperior=333,e.Ograve=778,e.Agrave=667,e.Abreve=667,e.multiply=584,e.uacute=556,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=500,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=260,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=333,e.omacron=556,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=222,e.tcaron=317,e.eogonek=556,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=556,e.zacute=500,e.iogonek=222,e.Oacute=778,e.oacute=556,e.amacron=556,e.sacute=500,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=333,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=556,e.Eogonek=667,e.dcroat=556,e.threequarters=834,e.Scedilla=667,e.lcaron=299,e.Kcommaaccent=667,e.Lacute=556,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=556,e.onehalf=834,e.lessequal=549,e.ocircumflex=556,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=556,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=556,e.Ccaron=722,e.ugrave=556,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=556,e.Rcommaaccent=722,e.Lcommaaccent=556,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=500,e.minus=584,e.Icircumflex=278,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=584,e.odieresis=556,e.udieresis=556,e.notequal=549,e.gcommaaccent=556,e.eth=556,e.zcaron=500,e.ncommaaccent=556,e.onesuperior=333,e.imacron=278,e.Euro=556})),e.Symbol=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.universal=713,e.numbersign=500,e.existential=549,e.percent=833,e.ampersand=778,e.suchthat=439,e.parenleft=333,e.parenright=333,e.asteriskmath=500,e.plus=549,e.comma=250,e.minus=549,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=278,e.semicolon=278,e.less=549,e.equal=549,e.greater=549,e.question=444,e.congruent=549,e.Alpha=722,e.Beta=667,e.Chi=722,e.Delta=612,e.Epsilon=611,e.Phi=763,e.Gamma=603,e.Eta=722,e.Iota=333,e.theta1=631,e.Kappa=722,e.Lambda=686,e.Mu=889,e.Nu=722,e.Omicron=722,e.Pi=768,e.Theta=741,e.Rho=556,e.Sigma=592,e.Tau=611,e.Upsilon=690,e.sigma1=439,e.Omega=768,e.Xi=645,e.Psi=795,e.Zeta=611,e.bracketleft=333,e.therefore=863,e.bracketright=333,e.perpendicular=658,e.underscore=500,e.radicalex=500,e.alpha=631,e.beta=549,e.chi=549,e.delta=494,e.epsilon=439,e.phi=521,e.gamma=411,e.eta=603,e.iota=329,e.phi1=603,e.kappa=549,e.lambda=549,e.mu=576,e.nu=521,e.omicron=549,e.pi=549,e.theta=521,e.rho=549,e.sigma=603,e.tau=439,e.upsilon=576,e.omega1=713,e.omega=686,e.xi=493,e.psi=686,e.zeta=494,e.braceleft=480,e.bar=200,e.braceright=480,e.similar=549,e.Euro=750,e.Upsilon1=620,e.minute=247,e.lessequal=549,e.fraction=167,e.infinity=713,e.florin=500,e.club=753,e.diamond=753,e.heart=753,e.spade=753,e.arrowboth=1042,e.arrowleft=987,e.arrowup=603,e.arrowright=987,e.arrowdown=603,e.degree=400,e.plusminus=549,e.second=411,e.greaterequal=549,e.multiply=549,e.proportional=713,e.partialdiff=494,e.bullet=460,e.divide=549,e.notequal=549,e.equivalence=549,e.approxequal=549,e.ellipsis=1e3,e.arrowvertex=603,e.arrowhorizex=1e3,e.carriagereturn=658,e.aleph=823,e.Ifraktur=686,e.Rfraktur=795,e.weierstrass=987,e.circlemultiply=768,e.circleplus=768,e.emptyset=823,e.intersection=768,e.union=768,e.propersuperset=713,e.reflexsuperset=713,e.notsubset=713,e.propersubset=713,e.reflexsubset=713,e.element=713,e.notelement=713,e.angle=768,e.gradient=713,e.registerserif=790,e.copyrightserif=790,e.trademarkserif=890,e.product=823,e.radical=549,e.dotmath=250,e.logicalnot=713,e.logicaland=603,e.logicalor=603,e.arrowdblboth=1042,e.arrowdblleft=987,e.arrowdblup=603,e.arrowdblright=987,e.arrowdbldown=603,e.lozenge=494,e.angleleft=329,e.registersans=790,e.copyrightsans=790,e.trademarksans=786,e.summation=713,e.parenlefttp=384,e.parenleftex=384,e.parenleftbt=384,e.bracketlefttp=384,e.bracketleftex=384,e.bracketleftbt=384,e.bracelefttp=494,e.braceleftmid=494,e.braceleftbt=494,e.braceex=494,e.angleright=329,e.integral=274,e.integraltp=686,e.integralex=686,e.integralbt=686,e.parenrighttp=384,e.parenrightex=384,e.parenrightbt=384,e.bracketrighttp=384,e.bracketrightex=384,e.bracketrightbt=384,e.bracerighttp=494,e.bracerightmid=494,e.bracerightbt=494,e.apple=790})),e["Times-Roman"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=408,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=564,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=278,e.semicolon=278,e.less=564,e.equal=564,e.greater=564,e.question=444,e.at=921,e.A=722,e.B=667,e.C=667,e.D=722,e.E=611,e.F=556,e.G=722,e.H=722,e.I=333,e.J=389,e.K=722,e.L=611,e.M=889,e.N=722,e.O=722,e.P=556,e.Q=722,e.R=667,e.S=556,e.T=611,e.U=722,e.V=722,e.W=944,e.X=722,e.Y=722,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=469,e.underscore=500,e.quoteleft=333,e.a=444,e.b=500,e.c=444,e.d=500,e.e=444,e.f=333,e.g=500,e.h=500,e.i=278,e.j=278,e.k=500,e.l=278,e.m=778,e.n=500,e.o=500,e.p=500,e.q=500,e.r=333,e.s=389,e.t=278,e.u=500,e.v=500,e.w=722,e.x=500,e.y=500,e.z=444,e.braceleft=480,e.bar=200,e.braceright=480,e.asciitilde=541,e.exclamdown=333,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=180,e.quotedblleft=444,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=453,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=444,e.quotedblright=444,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=444,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=889,e.ordfeminine=276,e.Lslash=611,e.Oslash=722,e.OE=889,e.ordmasculine=310,e.ae=667,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=500,e.Idieresis=333,e.eacute=444,e.abreve=444,e.uhungarumlaut=500,e.ecaron=444,e.Ydieresis=722,e.divide=564,e.Yacute=722,e.Acircumflex=722,e.aacute=444,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=444,e.Uacute=722,e.uogonek=500,e.Edieresis=611,e.Dcroat=722,e.commaaccent=250,e.copyright=760,e.Emacron=611,e.ccaron=444,e.aring=444,e.Ncommaaccent=722,e.lacute=278,e.agrave=444,e.Tcommaaccent=611,e.Cacute=667,e.atilde=444,e.Edotaccent=611,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=471,e.Rcaron=667,e.Gcommaaccent=722,e.ucircumflex=500,e.acircumflex=444,e.Amacron=722,e.rcaron=333,e.ccedilla=444,e.Zdotaccent=611,e.Thorn=556,e.Omacron=722,e.Racute=667,e.Sacute=556,e.dcaron=588,e.Umacron=722,e.uring=500,e.threesuperior=300,e.Ograve=722,e.Agrave=722,e.Abreve=722,e.multiply=564,e.uacute=500,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=611,e.adieresis=444,e.edieresis=444,e.cacute=444,e.nacute=500,e.umacron=500,e.Ncaron=722,e.Iacute=333,e.plusminus=564,e.brokenbar=200,e.registered=760,e.Gbreve=722,e.Idotaccent=333,e.summation=600,e.Egrave=611,e.racute=333,e.omacron=500,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=326,e.eogonek=444,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=444,e.zacute=444,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=444,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=500,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=611,e.dcroat=500,e.threequarters=750,e.Scedilla=556,e.lcaron=344,e.Kcommaaccent=722,e.Lacute=611,e.trademark=980,e.edotaccent=444,e.Igrave=333,e.Imacron=333,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=500,e.Uhungarumlaut=722,e.Eacute=611,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=500,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=667,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=722,e.zdotaccent=444,e.Ecaron=611,e.Iogonek=333,e.kcommaaccent=500,e.minus=564,e.Icircumflex=333,e.ncaron=500,e.tcommaaccent=278,e.logicalnot=564,e.odieresis=500,e.udieresis=500,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=444,e.ncommaaccent=500,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-Bold"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=555,e.numbersign=500,e.dollar=500,e.percent=1e3,e.ampersand=833,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=570,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=570,e.equal=570,e.greater=570,e.question=500,e.at=930,e.A=722,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=778,e.I=389,e.J=500,e.K=778,e.L=667,e.M=944,e.N=722,e.O=778,e.P=611,e.Q=778,e.R=722,e.S=556,e.T=667,e.U=722,e.V=722,e.W=1e3,e.X=722,e.Y=722,e.Z=667,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=581,e.underscore=500,e.quoteleft=333,e.a=500,e.b=556,e.c=444,e.d=556,e.e=444,e.f=333,e.g=500,e.h=556,e.i=278,e.j=333,e.k=556,e.l=278,e.m=833,e.n=556,e.o=500,e.p=556,e.q=556,e.r=444,e.s=389,e.t=333,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=444,e.braceleft=394,e.bar=220,e.braceright=394,e.asciitilde=520,e.exclamdown=333,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=278,e.quotedblleft=500,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=540,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=300,e.Lslash=667,e.Oslash=778,e.OE=1e3,e.ordmasculine=330,e.ae=722,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=556,e.Idieresis=389,e.eacute=444,e.abreve=500,e.uhungarumlaut=556,e.ecaron=444,e.Ydieresis=722,e.divide=570,e.Yacute=722,e.Acircumflex=722,e.aacute=500,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=747,e.Emacron=667,e.ccaron=444,e.aring=500,e.Ncommaaccent=722,e.lacute=278,e.agrave=500,e.Tcommaaccent=667,e.Cacute=722,e.atilde=500,e.Edotaccent=667,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=500,e.Amacron=722,e.rcaron=444,e.ccedilla=444,e.Zdotaccent=667,e.Thorn=611,e.Omacron=778,e.Racute=722,e.Sacute=556,e.dcaron=672,e.Umacron=722,e.uring=556,e.threesuperior=300,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=570,e.uacute=556,e.Tcaron=667,e.partialdiff=494,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=389,e.plusminus=570,e.brokenbar=220,e.registered=747,e.Gbreve=778,e.Idotaccent=389,e.summation=600,e.Egrave=667,e.racute=444,e.omacron=500,e.Zacute=667,e.Zcaron=667,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=416,e.eogonek=444,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=444,e.zacute=444,e.iogonek=278,e.Oacute=778,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=300,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=667,e.dcroat=556,e.threequarters=750,e.Scedilla=556,e.lcaron=394,e.Kcommaaccent=778,e.Lacute=667,e.trademark=1e3,e.edotaccent=444,e.Igrave=389,e.Imacron=389,e.Lcaron=667,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=778,e.degree=400,e.ograve=500,e.Ccaron=722,e.ugrave=556,e.radical=549,e.Dcaron=722,e.rcommaaccent=444,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=722,e.Lcommaaccent=667,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=444,e.Ecaron=667,e.Iogonek=389,e.kcommaaccent=556,e.minus=570,e.Icircumflex=389,e.ncaron=556,e.tcommaaccent=333,e.logicalnot=570,e.odieresis=500,e.udieresis=556,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=444,e.ncommaaccent=556,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-BoldItalic"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=389,e.quotedbl=555,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=570,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=570,e.equal=570,e.greater=570,e.question=500,e.at=832,e.A=667,e.B=667,e.C=667,e.D=722,e.E=667,e.F=667,e.G=722,e.H=778,e.I=389,e.J=500,e.K=667,e.L=611,e.M=889,e.N=722,e.O=722,e.P=611,e.Q=722,e.R=667,e.S=556,e.T=611,e.U=722,e.V=667,e.W=889,e.X=667,e.Y=611,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=570,e.underscore=500,e.quoteleft=333,e.a=500,e.b=500,e.c=444,e.d=500,e.e=444,e.f=333,e.g=500,e.h=556,e.i=278,e.j=278,e.k=500,e.l=278,e.m=778,e.n=556,e.o=500,e.p=500,e.q=500,e.r=389,e.s=389,e.t=278,e.u=556,e.v=444,e.w=667,e.x=500,e.y=444,e.z=389,e.braceleft=348,e.bar=220,e.braceright=348,e.asciitilde=570,e.exclamdown=389,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=278,e.quotedblleft=500,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=500,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=944,e.ordfeminine=266,e.Lslash=611,e.Oslash=722,e.OE=944,e.ordmasculine=300,e.ae=722,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=500,e.Idieresis=389,e.eacute=444,e.abreve=500,e.uhungarumlaut=556,e.ecaron=444,e.Ydieresis=611,e.divide=570,e.Yacute=611,e.Acircumflex=667,e.aacute=500,e.Ucircumflex=722,e.yacute=444,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=747,e.Emacron=667,e.ccaron=444,e.aring=500,e.Ncommaaccent=722,e.lacute=278,e.agrave=500,e.Tcommaaccent=611,e.Cacute=667,e.atilde=500,e.Edotaccent=667,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=494,e.Rcaron=667,e.Gcommaaccent=722,e.ucircumflex=556,e.acircumflex=500,e.Amacron=667,e.rcaron=389,e.ccedilla=444,e.Zdotaccent=611,e.Thorn=611,e.Omacron=722,e.Racute=667,e.Sacute=556,e.dcaron=608,e.Umacron=722,e.uring=556,e.threesuperior=300,e.Ograve=722,e.Agrave=667,e.Abreve=667,e.multiply=570,e.uacute=556,e.Tcaron=611,e.partialdiff=494,e.ydieresis=444,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=389,e.plusminus=570,e.brokenbar=220,e.registered=747,e.Gbreve=722,e.Idotaccent=389,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=500,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=366,e.eogonek=444,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=444,e.zacute=389,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=576,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=667,e.dcroat=500,e.threequarters=750,e.Scedilla=556,e.lcaron=382,e.Kcommaaccent=667,e.Lacute=611,e.trademark=1e3,e.edotaccent=444,e.Igrave=389,e.Imacron=389,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=556,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=667,e.Lcommaaccent=611,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=722,e.zdotaccent=389,e.Ecaron=667,e.Iogonek=389,e.kcommaaccent=500,e.minus=606,e.Icircumflex=389,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=606,e.odieresis=500,e.udieresis=556,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=389,e.ncommaaccent=556,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-Italic"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=420,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=675,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=675,e.equal=675,e.greater=675,e.question=500,e.at=920,e.A=611,e.B=611,e.C=667,e.D=722,e.E=611,e.F=611,e.G=722,e.H=722,e.I=333,e.J=444,e.K=667,e.L=556,e.M=833,e.N=667,e.O=722,e.P=611,e.Q=722,e.R=611,e.S=500,e.T=556,e.U=722,e.V=611,e.W=833,e.X=611,e.Y=556,e.Z=556,e.bracketleft=389,e.backslash=278,e.bracketright=389,e.asciicircum=422,e.underscore=500,e.quoteleft=333,e.a=500,e.b=500,e.c=444,e.d=500,e.e=444,e.f=278,e.g=500,e.h=500,e.i=278,e.j=278,e.k=444,e.l=278,e.m=722,e.n=500,e.o=500,e.p=500,e.q=500,e.r=389,e.s=389,e.t=278,e.u=500,e.v=444,e.w=667,e.x=444,e.y=444,e.z=389,e.braceleft=400,e.bar=275,e.braceright=400,e.asciitilde=541,e.exclamdown=389,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=214,e.quotedblleft=556,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=523,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=556,e.quotedblright=556,e.guillemotright=500,e.ellipsis=889,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=889,e.AE=889,e.ordfeminine=276,e.Lslash=556,e.Oslash=722,e.OE=944,e.ordmasculine=310,e.ae=667,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=667,e.germandbls=500,e.Idieresis=333,e.eacute=444,e.abreve=500,e.uhungarumlaut=500,e.ecaron=444,e.Ydieresis=556,e.divide=675,e.Yacute=556,e.Acircumflex=611,e.aacute=500,e.Ucircumflex=722,e.yacute=444,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=500,e.Edieresis=611,e.Dcroat=722,e.commaaccent=250,e.copyright=760,e.Emacron=611,e.ccaron=444,e.aring=500,e.Ncommaaccent=667,e.lacute=278,e.agrave=500,e.Tcommaaccent=556,e.Cacute=667,e.atilde=500,e.Edotaccent=611,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=471,e.Rcaron=611,e.Gcommaaccent=722,e.ucircumflex=500,e.acircumflex=500,e.Amacron=611,e.rcaron=389,e.ccedilla=444,e.Zdotaccent=556,e.Thorn=611,e.Omacron=722,e.Racute=611,e.Sacute=500,e.dcaron=544,e.Umacron=722,e.uring=500,e.threesuperior=300,e.Ograve=722,e.Agrave=611,e.Abreve=611,e.multiply=675,e.uacute=500,e.Tcaron=556,e.partialdiff=476,e.ydieresis=444,e.Nacute=667,e.icircumflex=278,e.Ecircumflex=611,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=500,e.umacron=500,e.Ncaron=667,e.Iacute=333,e.plusminus=675,e.brokenbar=275,e.registered=760,e.Gbreve=722,e.Idotaccent=333,e.summation=600,e.Egrave=611,e.racute=389,e.omacron=500,e.Zacute=556,e.Zcaron=556,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=300,e.eogonek=444,e.Uogonek=722,e.Aacute=611,e.Adieresis=611,e.egrave=444,e.zacute=389,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=500,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=611,e.dcroat=500,e.threequarters=750,e.Scedilla=500,e.lcaron=300,e.Kcommaaccent=667,e.Lacute=556,e.trademark=980,e.edotaccent=444,e.Igrave=333,e.Imacron=333,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=500,e.Uhungarumlaut=722,e.Eacute=611,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=500,e.Scommaaccent=500,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=500,e.radical=453,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=667,e.otilde=500,e.Rcommaaccent=611,e.Lcommaaccent=556,e.Atilde=611,e.Aogonek=611,e.Aring=611,e.Otilde=722,e.zdotaccent=389,e.Ecaron=611,e.Iogonek=333,e.kcommaaccent=444,e.minus=675,e.Icircumflex=333,e.ncaron=500,e.tcommaaccent=278,e.logicalnot=675,e.odieresis=500,e.udieresis=500,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=389,e.ncommaaccent=500,e.onesuperior=300,e.imacron=278,e.Euro=500})),e.ZapfDingbats=(0,n.getLookupTableFactory)((function(e){e.space=278,e.a1=974,e.a2=961,e.a202=974,e.a3=980,e.a4=719,e.a5=789,e.a119=790,e.a118=791,e.a117=690,e.a11=960,e.a12=939,e.a13=549,e.a14=855,e.a15=911,e.a16=933,e.a105=911,e.a17=945,e.a18=974,e.a19=755,e.a20=846,e.a21=762,e.a22=761,e.a23=571,e.a24=677,e.a25=763,e.a26=760,e.a27=759,e.a28=754,e.a6=494,e.a7=552,e.a8=537,e.a9=577,e.a10=692,e.a29=786,e.a30=788,e.a31=788,e.a32=790,e.a33=793,e.a34=794,e.a35=816,e.a36=823,e.a37=789,e.a38=841,e.a39=823,e.a40=833,e.a41=816,e.a42=831,e.a43=923,e.a44=744,e.a45=723,e.a46=749,e.a47=790,e.a48=792,e.a49=695,e.a50=776,e.a51=768,e.a52=792,e.a53=759,e.a54=707,e.a55=708,e.a56=682,e.a57=701,e.a58=826,e.a59=815,e.a60=789,e.a61=789,e.a62=707,e.a63=687,e.a64=696,e.a65=689,e.a66=786,e.a67=787,e.a68=713,e.a69=791,e.a70=785,e.a71=791,e.a72=873,e.a73=761,e.a74=762,e.a203=762,e.a75=759,e.a204=759,e.a76=892,e.a77=892,e.a78=788,e.a79=784,e.a81=438,e.a82=138,e.a83=277,e.a84=415,e.a97=392,e.a98=392,e.a99=668,e.a100=668,e.a89=390,e.a90=390,e.a93=317,e.a94=317,e.a91=276,e.a92=276,e.a205=509,e.a85=509,e.a206=410,e.a86=410,e.a87=234,e.a88=234,e.a95=334,e.a96=334,e.a101=732,e.a102=544,e.a103=544,e.a104=910,e.a106=667,e.a107=760,e.a108=760,e.a112=776,e.a111=595,e.a110=694,e.a109=626,e.a120=788,e.a121=788,e.a122=788,e.a123=788,e.a124=788,e.a125=788,e.a126=788,e.a127=788,e.a128=788,e.a129=788,e.a130=788,e.a131=788,e.a132=788,e.a133=788,e.a134=788,e.a135=788,e.a136=788,e.a137=788,e.a138=788,e.a139=788,e.a140=788,e.a141=788,e.a142=788,e.a143=788,e.a144=788,e.a145=788,e.a146=788,e.a147=788,e.a148=788,e.a149=788,e.a150=788,e.a151=788,e.a152=788,e.a153=788,e.a154=788,e.a155=788,e.a156=788,e.a157=788,e.a158=788,e.a159=788,e.a160=894,e.a161=838,e.a163=1016,e.a164=458,e.a196=748,e.a165=924,e.a192=748,e.a166=918,e.a167=927,e.a168=928,e.a169=928,e.a170=834,e.a171=873,e.a172=828,e.a173=924,e.a162=924,e.a174=917,e.a175=930,e.a176=931,e.a177=463,e.a178=883,e.a179=836,e.a193=836,e.a180=867,e.a199=867,e.a181=696,e.a200=696,e.a182=874,e.a201=874,e.a183=760,e.a184=946,e.a197=771,e.a185=865,e.a194=771,e.a198=888,e.a186=967,e.a195=888,e.a187=831,e.a188=873,e.a189=927,e.a190=970,e.a191=918}))}));t.getMetrics=a;var i=(0,n.getLookupTableFactory)((function(e){e.Courier={ascent:629,descent:-157,capHeight:562,xHeight:-426},e["Courier-Bold"]={ascent:629,descent:-157,capHeight:562,xHeight:439},e["Courier-Oblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426},e["Courier-BoldOblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426},e.Helvetica={ascent:718,descent:-207,capHeight:718,xHeight:523},e["Helvetica-Bold"]={ascent:718,descent:-207,capHeight:718,xHeight:532},e["Helvetica-Oblique"]={ascent:718,descent:-207,capHeight:718,xHeight:523},e["Helvetica-BoldOblique"]={ascent:718,descent:-207,capHeight:718,xHeight:532},e["Times-Roman"]={ascent:683,descent:-217,capHeight:662,xHeight:450},e["Times-Bold"]={ascent:683,descent:-217,capHeight:676,xHeight:461},e["Times-Italic"]={ascent:683,descent:-217,capHeight:653,xHeight:441},e["Times-BoldItalic"]={ascent:683,descent:-217,capHeight:669,xHeight:462},e.Symbol={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN},e.ZapfDingbats={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN}}));t.getFontBasicMetrics=i},(e,t)=>{function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||i(e,t)||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 n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=i(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}function i(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r131070,n=r?4:2,i=new DataView(new ArrayBuffer((this.glyphs.length+1)*n));r?i.setUint32(0,0):i.setUint16(0,0);var o,s=0,c=0,u=a(this.glyphs);try{for(u.s();!(o=u.n()).done;)s=(s+=o.value.write(s,t))+3&-4,c+=n,r?i.setUint32(c,s):i.setUint16(c,s>>1)}catch(e){u.e(e)}finally{u.f()}return{isLocationLong:r,loca:new Uint8Array(i.buffer),glyf:new Uint8Array(t.buffer)}}},{key:"scale",value:function(e){for(var t=0,r=this.glyphs.length;t255?t+=2:f>0&&(t+=1),r=u,(f=Math.abs(l-n))>255?t+=2:f>0&&(t+=1),n=l}}}catch(e){i.e(e)}finally{i.f()}return t}},{key:"write",value:function(e,t){var r,n=e,i=[],o=[],s=[],c=0,u=0,l=a(this.contours);try{for(l.s();!(r=l.n()).done;){for(var f=r.value,h=0,d=f.xCoordinates.length;h=0?18:2,i.push(y)):i.push(v)}c=g;var m=f.yCoordinates[h];if(0==(v=m-u))p|=32,o.push(0);else{var b=Math.abs(v);b<=255?(p|=v>=0?36:4,o.push(b)):o.push(v)}u=m,s.push(p)}t.setUint16(e,i.length-1),e+=2}}catch(e){l.e(e)}finally{l.f()}t.setUint16(e,this.instructions.length),e+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e),e+=this.instructions.length);for(var w=0,k=s;w=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2),e}},{key:"write",value:function(e,t){var r=e;return 2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1),t.setUint16(e,this.flags),t.setUint16(e+2,this.glyphIndex),e+=4,1&this.flags?(2&this.flags?(t.setInt16(e,this.argument1),t.setInt16(e+2,this.argument2)):(t.setUint16(e,this.argument1),t.setUint16(e+2,this.argument2)),e+=4):(t.setUint8(e,this.argument1),t.setUint8(e+1,this.argument2),e+=2),256&this.flags&&(t.setUint16(e,this.instructions.length),e+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e),e+=this.instructions.length)),e-r}},{key:"scale",value:function(e,t){}}],[{key:"parse",value:function(t,r){var n,a,i=t,o=[],s=r.getUint16(t),c=r.getUint16(t+2);t+=4,1&s?(2&s?(n=r.getInt16(t),a=r.getInt16(t+2)):(n=r.getUint16(t),a=r.getUint16(t+2)),t+=4,s^=1):(2&s?(n=r.getInt8(t),a=r.getInt8(t+1)):(n=r.getUint8(t),a=r.getUint8(t+1)),t+=2),8&s?(o.push(r.getUint16(t)),t+=2):64&s?(o.push(r.getUint16(t),r.getUint16(t+2)),t+=4):128&s&&(o.push(r.getUint16(t),r.getUint16(t+2),r.getUint16(t+4),r.getUint16(t+6)),t+=8);var u=null;if(256&s){var l=r.getUint16(t);t+=2,u=new Uint8Array(r).slice(t,t+l),t+=l}return[t-i,new e({flags:s,glyphIndex:c,argument1:n,argument2:a,transf:o,instructions:u})]}}]),e}()},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.OpenTypeFileBuilder=void 0;var a=r(135),i=r(2);function o(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r>8&255,e[t+1]=255&r}function u(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r}function l(e,t,r){if(r instanceof Uint8Array)e.set(r,t);else if("string"==typeof r)for(var n=0,a=r.length;n=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}(r);try{for(o.s();!(i=o.n()).done;){var c=i.value;e[t++]=255&c}}catch(e){o.e(e)}finally{o.f()}}}var f=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.sfnt=t,this.tables=Object.create(null)}var t,r,n;return t=e,n=[{key:"getSearchParams",value:function(e,t){for(var r=1,n=0;(r^e)>r;)r<<=1,n++;var a=r*t;return{range:a,entry:n,rangeShift:t*e-a}}}],(r=[{key:"toArray",value:function(){var t=this.sfnt,r=this.tables,n=Object.keys(r);n.sort();var o,s,f,h,d,p=n.length,g=12+16*p,v=[g];for(o=0;o>>0,v.push(g);var y=new Uint8Array(g);for(o=0;o>>0;u(y,g+4,b),u(y,g+8,v[o]),u(y,g+12,r[d].length),g+=16}return y}},{key:"addTable",value:function(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}}])&&o(t.prototype,r),n&&o(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.OpenTypeFileBuilder=f},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Type1Font=void 0;var n=r(164),a=r(2),i=r(167),o=r(135),s=r(139),c=r(178);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=a){for(s+=u;s=0&&(o[l]=s);return(0,i.type1FontGlyphMapping)(e,o,c)}},{key:"hasGlyphId",value:function(e){return!(e<0||e>=this.numGlyphs)&&(0===e||this.charstrings[e-1].charstring.length>0)}},{key:"getSeacs",value:function(e){for(var t=[],r=0,n=e.length;r0;b--)m[b]-=m[b-1];g.setByName(y,m)}}o.topDict.privateDict=g;var w=new n.CFFIndex;for(u=0,l=a.length;u{Object.defineProperty(t,"__esModule",{value:!0}),t.Type1Parser=void 0;var n=r(166),a=r(135),i=r(139),o=r(2);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);ri)return!0;for(var o=i-e,s=o;s>8&255,255&u):(u=65536*u|0,this.output.push(255,u>>24&255,u>>16&255,u>>8&255,255&u))}return(n=this.output).push.apply(n,function(e){if(Array.isArray(e))return c(e)}(a=t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(a)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),r?this.stack.splice(o,e):this.stack.length=0,!1}}]),e}();function O(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function A(e,t,r){if(r>=e.length)return new Uint8Array(0);var n,a,i=0|t;for(n=0;n>8,i=52845*(c+i)+22719&65535}return s}function C(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}var F=function(){function e(t,r,n){if(u(this,e),r){var o=t.getBytes(),s=!((O(o[0])||(0,a.isWhiteSpace)(o[0]))&&O(o[1])&&O(o[2])&&O(o[3])&&O(o[4])&&O(o[5])&&O(o[6])&&O(o[7]));t=new i.Stream(s?A(o,55665,4):function(e,t,r){var n,a,i=55665,o=e.length,s=new Uint8Array(o>>>1);for(n=0,a=0;n>8,i=52845*(l+i)+22719&65535}}}return s.slice(4,a)}(o))}this.seacAnalysisEnabled=!!n,this.stream=t,this.nextChar()}return f(e,[{key:"readNumberArray",value:function(){this.getToken();for(var e=[];;){var t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}},{key:"readNumber",value:function(){var e=this.getToken();return parseFloat(e||0)}},{key:"readInt",value:function(){var e=this.getToken();return 0|parseInt(e||0,10)}},{key:"readBoolean",value:function(){return"true"===this.getToken()?1:0}},{key:"nextChar",value:function(){return this.currentChar=this.stream.getByte()}},{key:"prevChar",value:function(){return this.stream.skip(-2),this.currentChar=this.stream.getByte()}},{key:"getToken",value:function(){for(var e=!1,t=this.currentChar;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!(0,a.isWhiteSpace)(t))break;t=this.nextChar()}if(C(t))return this.nextChar(),String.fromCharCode(t);var r="";do{r+=String.fromCharCode(t),t=this.nextChar()}while(t>=0&&!(0,a.isWhiteSpace)(t)&&!C(t));return r}},{key:"readCharStrings",value:function(e,t){return-1===t?e:A(e,4330,t)}},{key:"extractFontProgram",value:function(e){var t=this.stream,r=[],n=[],a=Object.create(null);a.lenIV=4;for(var i,o,s,c,u={subrs:[],charstrings:[],properties:{privateData:a}};null!==(i=this.getToken());)if("/"===i)switch(i=this.getToken()){case"CharStrings":for(this.getToken(),this.getToken(),this.getToken(),this.getToken();null!==(i=this.getToken())&&"end"!==i;)if("/"===i){var l=this.getToken();o=this.readInt(),this.getToken(),s=o>0?t.getBytes(o):new Uint8Array(0),c=u.properties.privateData.lenIV;var f=this.readCharStrings(s,c);this.nextChar(),"noaccess"===(i=this.getToken())?this.getToken():"/"===i&&this.prevChar(),n.push({glyph:l,encoded:f})}break;case"Subrs":for(this.readInt(),this.getToken();"dup"===this.getToken();){var h=this.readInt();o=this.readInt(),this.getToken(),s=o>0?t.getBytes(o):new Uint8Array(0),c=u.properties.privateData.lenIV;var d=this.readCharStrings(s,c);this.nextChar(),"noaccess"===(i=this.getToken())&&this.getToken(),r[h]=d}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":var p=this.readNumberArray();p.length>0&&p.length;break;case"StemSnapH":case"StemSnapV":u.properties.privateData[i]=this.readNumberArray();break;case"StdHW":case"StdVW":u.properties.privateData[i]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":case"ExpansionFactor":u.properties.privateData[i]=this.readNumber();break;case"ForceBold":u.properties.privateData[i]=this.readBoolean()}for(var g=0,v=n;g-1&&void 0===e.widths[A]&&A>=e.firstChar&&A<=e.lastChar&&(e.widths[A]=w.width)}}return u}},{key:"extractFontHeader",value:function(e){for(var t;null!==(t=this.getToken());)if("/"===t)switch(t=this.getToken()){case"FontMatrix":var r=this.readNumberArray();e.fontMatrix=r;break;case"Encoding":var a=this.getToken(),i=void 0;if(/^\\d+$/.test(a)){i=[];var o=0|parseInt(a,10);this.getToken();for(var s=0;s{Object.defineProperty(t,"__esModule",{value:!0}),t.Pattern=void 0,t.getTilingPatternIR=function(e,t,r){var a=t.getArray("Matrix"),i=n.Util.normalizeRect(t.getArray("BBox")),o=t.get("XStep"),s=t.get("YStep"),c=t.get("PaintType"),u=t.get("TilingType");if(i[2]-i[0]==0||i[3]-i[1]==0)throw new n.FormatError("Invalid getTilingPatternIR /BBox array: [".concat(i,"]."));return["TilingPattern",r,e,a,i,o,s,c,u]};var n=r(2),a=r(136),i=r(143),o=r(135);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=v||j<=0)return(0,n.info)("Bad shading domain."),f(l);for(var _,L=new Float32Array(h.numComps),R=new Float32Array(1),N=0;N<=10;N++){R[0]=g+N*j,E(R,0,L,0),_=h.getRgb(L,0);var D=n.Util.makeHexColor(_[0],_[1],_[2]);M.push([N/10,D])}var B="transparent";return e.has("Background")&&(_=h.getRgb(e.get("Background"),0),B=n.Util.makeHexColor(_[0],_[1],_[2])),m||(M.unshift([0,B]),M[1][0]+=b.SMALL_NUMBER),w||(M.at(-1)[0]-=b.SMALL_NUMBER,M.push([1,B])),l.colorStops=M,l}return v(r,[{key:"getIR",value:function(){var e,t,r,a,i,o=this.coordsArr,s=this.shadingType;return 2===s?(t=[o[0],o[1]],r=[o[2],o[3]],a=null,i=null,e="axial"):3===s?(t=[o[0],o[1]],r=[o[3],o[4]],a=o[2],i=o[5],e="radial"):(0,n.unreachable)("getPattern type unknown: ".concat(s)),["RadialAxial",e,this.bbox,this.colorStops,t,r,a,i]}}]),r}(b),k=function(){function e(t,r){p(this,e),this.stream=t,this.context=r,this.buffer=0,this.bufferLength=0;var n=r.numComps;this.tmpCompsBuf=new Float32Array(n);var a=r.colorSpace.numComps;this.tmpCsCompsBuf=r.colorFn?new Float32Array(a):this.tmpCompsBuf}return v(e,[{key:"hasData",get:function(){if(this.stream.end)return this.stream.pos0)return!0;var e=this.stream.getByte();return!(e<0||(this.buffer=e,this.bufferLength=8,0))}},{key:"readBits",value:function(e){var t=this.buffer,r=this.bufferLength;if(32===e){if(0===r)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();var n=this.stream.getByte();return this.buffer=n&(1<>r)>>>0}if(8===e&&0===r)return this.stream.getByte();for(;r>r}},{key:"align",value:function(){this.buffer=0,this.bufferLength=0}},{key:"readFlag",value:function(){return this.readBits(this.context.bitsPerFlag)}},{key:"readCoordinate",value:function(){var e=this.context.bitsPerCoordinate,t=this.readBits(e),r=this.readBits(e),n=this.context.decode,a=e<32?1/((1<o?o:e,t=t>s?s:t,r=r{Object.defineProperty(t,"__esModule",{value:!0}),t.getXfaFontDict=function(e){var t=function(e){var t=g(e);if(!t)return null;var r,n=t.baseWidths,a=t.baseMapping,i=t.factors;r=i?n.map((function(e,t){return e*i[t]})):n;var o,s,c=-2,u=[],l=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=h(e))){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(a.map((function(e,t){return[e,t]})).sort((function(e,t){return f(e,1)[0]-f(t,1)[0]})));try{for(l.s();!(s=l.n()).done;){var d=f(s.value,2),p=d[0],v=d[1];-1!==p&&(p===c+1?(o.push(r[v]),c+=1):(c=p,o=[r[v]],u.push(p,o)))}}catch(e){l.e(e)}finally{l.f()}return u}(e),r=new a.Dict(null);r.set("BaseFont",a.Name.get(e)),r.set("Type",a.Name.get("Font")),r.set("Subtype",a.Name.get("CIDFontType2")),r.set("Encoding",a.Name.get("Identity-H")),r.set("CIDToGIDMap",a.Name.get("Identity")),r.set("W",t),r.set("FirstChar",t[0]),r.set("LastChar",t.at(-2)+t.at(-1).length-1);var n=new a.Dict(null);r.set("FontDescriptor",n);var i=new a.Dict(null);return i.set("Ordering","Identity"),i.set("Registry","Adobe"),i.set("Supplement",0),r.set("CIDSystemInfo",i),r},t.getXfaFontName=g;var n=r(181),a=r(134),i=r(182),o=r(183),s=r(184),c=r(185),u=r(135),l=r(167);function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||h(e,t)||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 h(e,t){if(e){if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,t):void 0}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.CalibriRegularMetrics=t.CalibriRegularFactors=t.CalibriItalicMetrics=t.CalibriItalicFactors=t.CalibriBoldMetrics=t.CalibriBoldItalicMetrics=t.CalibriBoldItalicFactors=t.CalibriBoldFactors=void 0,t.CalibriBoldFactors=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.54657,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.73293,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.9121,.86943,.79795,.88198,.77958,.70864,.81055,.90399,.88653,.96017,.82577,.77892,.78257,.97507,1.54657,.97507,.85284,.89552,.90176,.88762,.8785,.75241,.8785,.90518,.95015,.77618,.8785,.88401,.91916,.86304,.88401,.91488,.8785,.8801,.8785,.8785,.91343,.7173,1.04106,.8785,.85075,.95794,.82616,.85162,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.12401,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.73293,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.9121,.86943,.86943,.86943,.86943,.86943,.85284,.87508,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.88762,.88762,.88762,.88762,.88762,.88762,.8715,.75241,.90518,.90518,.90518,.90518,.88401,.88401,.88401,.88401,.8785,.8785,.8801,.8801,.8801,.8801,.8801,.90747,.89049,.8785,.8785,.8785,.8785,.85162,.8785,.85162,.83908,.88762,.83908,.88762,.83908,.88762,.73293,.75241,.73293,.75241,.73293,.75241,.73293,.75241,.87289,.83016,.88506,.93125,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.81921,.77618,.81921,.77618,.81921,.77618,1,1,.87356,.8785,.91075,.89608,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76229,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.79468,.91926,.88175,.70823,.94903,.9121,.8785,1,1,.9121,.8785,.87802,.88656,.8785,.86943,.8801,.86943,.8801,.86943,.8801,.87402,.89291,.77958,.91343,1,1,.77958,.91343,.70864,.7173,.70864,.7173,.70864,.7173,.70864,.7173,1,1,.81055,.75841,.81055,1.06452,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.96017,.95794,.77892,.85162,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.88762,.77539,.8715,.87508,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70674,.98387,.94721,1.33431,1.45894,.95161,1.06303,.83908,.80352,.57184,.6965,.56289,.82001,.56029,.81235,1.02988,.83908,.7762,.68156,.80367,.73133,.78257,.87356,.86943,.95958,.75727,.89019,1.04924,.9121,.7648,.86943,.87356,.79795,.78275,.81055,.77892,.9762,.82577,.99819,.84896,.95958,.77892,.96108,1.01407,.89049,1.02988,.94211,.96108,.8936,.84021,.87842,.96399,.79109,.89049,1.00813,1.02988,.86077,.87445,.92099,.84723,.86513,.8801,.75638,.85714,.78216,.79586,.87965,.94211,.97747,.78287,.97926,.84971,1.02988,.94211,.8801,.94211,.84971,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90264,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.90518,1,1,1,1,1,1,1,1,1,1,1,1,.90548,1,1,1,1,1,1,.96017,.95794,.96017,.95794,.96017,.95794,.77892,.85162,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.92794,.87012,.87012,.87012,.89552,.89552,1.42259,.71143,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.93835,.83406,.91133,.84107,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90527,1.81055,.90527,1.81055,1.31006,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriBoldMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriBoldItalicFactors=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.56239,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.71805,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.90872,.85938,.79795,.87068,.77958,.69766,.81055,.90399,.88653,.96068,.82577,.77892,.78257,.97507,1.529,.97507,.85284,.89552,.90176,.94908,.86411,.74012,.86411,.88323,.95015,.86411,.86331,.88401,.91916,.86304,.88401,.9039,.86331,.86331,.86411,.86411,.90464,.70852,1.04106,.86331,.84372,.95794,.82616,.84548,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.19129,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.71805,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.90872,.85938,.85938,.85938,.85938,.85938,.85284,.87068,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.94908,.94908,.94908,.94908,.94908,.94908,.85887,.74012,.88323,.88323,.88323,.88323,.88401,.88401,.88401,.88401,.8785,.86331,.86331,.86331,.86331,.86331,.86331,.90747,.89049,.86331,.86331,.86331,.86331,.84548,.86411,.84548,.83908,.94908,.83908,.94908,.83908,.94908,.71805,.74012,.71805,.74012,.71805,.74012,.71805,.74012,.87289,.79538,.88506,.92726,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.81921,.86411,.81921,.86411,.81921,.86411,1,1,.87356,.86331,.91075,.8777,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76467,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.77312,.91926,.88175,.70823,.94903,.90872,.86331,1,1,.90872,.86331,.86906,.88116,.86331,.85938,.86331,.85938,.86331,.85938,.86331,.87402,.86549,.77958,.90464,1,1,.77958,.90464,.69766,.70852,.69766,.70852,.69766,.70852,.69766,.70852,1,1,.81055,.75841,.81055,1.06452,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.96068,.95794,.77892,.84548,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.94908,.77539,.85887,.87068,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70088,.98387,.94721,1.33431,1.45894,.95161,1.48387,.83908,.80352,.57118,.6965,.56347,.79179,.55853,.80346,1.02988,.83908,.7762,.67174,.86036,.73133,.78257,.87356,.86441,.95958,.75727,.89019,1.04924,.90872,.74889,.85938,.87891,.79795,.7957,.81055,.77892,.97447,.82577,.97466,.87179,.95958,.77892,.94252,.95612,.8753,1.02988,.92733,.94252,.87411,.84021,.8728,.95612,.74081,.8753,1.02189,1.02988,.84814,.87445,.91822,.84723,.85668,.86331,.81344,.87581,.76422,.82046,.96057,.92733,.99375,.78022,.95452,.86015,1.02988,.92733,.86331,.92733,.86015,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90631,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.88323,1,1,1,1,1,1,1,1,1,1,1,1,.85174,1,1,1,1,1,1,.96068,.95794,.96068,.95794,.96068,.95794,.77892,.84548,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.89807,.87012,.87012,.87012,.89552,.89552,1.42259,.71094,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.92972,.83406,.91133,.83326,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90616,1.81055,.90527,1.81055,1.3107,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriBoldItalicMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriItalicFactors=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39543,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.72346,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89249,.84118,.77452,.85374,.75186,.67789,.79776,.88844,.85066,.94309,.77818,.7306,.76659,1.10369,1.38313,1.10369,1.06139,.89552,.8739,.9245,.9245,.83203,.9245,.85865,1.09842,.9245,.9245,1.03297,1.07692,.90918,1.03297,.94959,.9245,.92274,.9245,.9245,1.02933,.77832,1.20562,.9245,.8916,.98986,.86621,.89453,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.16359,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.72346,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89249,.84118,.84118,.84118,.84118,.84118,.85284,.84557,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.9245,.9245,.9245,.9245,.9245,.9245,.84843,.83203,.85865,.85865,.85865,.85865,.82601,.82601,.82601,.82601,.94469,.9245,.92274,.92274,.92274,.92274,.92274,.90747,.86651,.9245,.9245,.9245,.9245,.89453,.9245,.89453,.8675,.9245,.8675,.9245,.8675,.9245,.72346,.83203,.72346,.83203,.72346,.83203,.72346,.83203,.85193,.8875,.86477,.99034,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.81105,.9245,.81105,.9245,.81105,.9245,1,1,.86275,.9245,.90872,.93591,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77896,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.9375,.98156,.93407,.77261,1.11429,.89249,.9245,1,1,.89249,.9245,.92534,.86698,.9245,.84118,.92274,.84118,.92274,.84118,.92274,.8667,.86291,.75186,1.02933,1,1,.75186,1.02933,.67789,.77832,.67789,.77832,.67789,.77832,.67789,.77832,1,1,.79776,.97655,.79776,1.23023,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.94309,.98986,.7306,.89453,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.9245,.76318,.84843,.84557,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67009,.96334,.93695,1.35191,1.40909,.95161,1.48387,.8675,.90861,.6192,.7363,.64824,.82411,.56321,.85696,1.23516,.8675,.81552,.7286,.84134,.73206,.76659,.86275,.84369,.90685,.77892,.85871,1.02638,.89249,.75828,.84118,.85984,.77452,.76466,.79776,.7306,.90782,.77818,.903,.87291,.90685,.7306,.99058,1.03667,.94635,1.23516,.9849,.99058,.92393,.8916,.942,1.03667,.75026,.94635,1.0297,1.23516,.90918,.94048,.98217,.89746,.84153,.92274,.82507,.88832,.84438,.88178,1.03525,.9849,1.00225,.78086,.97248,.89404,1.23516,.9849,.92274,.9849,.89404,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.89693,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.85865,1,1,1,1,1,1,1,1,1,1,1,1,.90933,1,1,1,1,1,1,.94309,.98986,.94309,.98986,.94309,.98986,.7306,.89453,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.68994,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.97858,.82616,.91133,.83437,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90572,1.81055,.90749,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85284,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriItalicMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriRegularFactors=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39016,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.73834,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89385,.85122,.77452,.86503,.75186,.68887,.79776,.88844,.85066,.94258,.77818,.7306,.76659,1.10369,1.39016,1.10369,1.06139,.89552,.8739,.86128,.94469,.8457,.94469,.89464,1.09842,.84636,.94469,1.03297,1.07692,.90918,1.03297,.95897,.94469,.9482,.94469,.94469,1.04692,.78223,1.20562,.94469,.90332,.98986,.86621,.90527,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.08707,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.73834,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89385,.85122,.85122,.85122,.85122,.85122,.85284,.85311,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.86128,.86128,.86128,.86128,.86128,.86128,.8693,.8457,.89464,.89464,.89464,.89464,.82601,.82601,.82601,.82601,.94469,.94469,.9482,.9482,.9482,.9482,.9482,.90747,.86651,.94469,.94469,.94469,.94469,.90527,.94469,.90527,.8675,.86128,.8675,.86128,.8675,.86128,.73834,.8457,.73834,.8457,.73834,.8457,.73834,.8457,.85193,.92454,.86477,.9921,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.81105,.84636,.81105,.84636,.81105,.84636,1,1,.86275,.94469,.90872,.95786,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77741,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.90452,.98156,1.11842,.77261,1.11429,.89385,.94469,1,1,.89385,.94469,.95877,.86901,.94469,.85122,.9482,.85122,.9482,.85122,.9482,.8667,.90016,.75186,1.04692,1,1,.75186,1.04692,.68887,.78223,.68887,.78223,.68887,.78223,.68887,.78223,1,1,.79776,.92188,.79776,1.23023,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.94258,.98986,.7306,.90527,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.86128,.76318,.8693,.85311,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67742,.96334,.93695,1.35191,1.40909,.95161,1.48387,.86686,.90861,.62267,.74359,.65649,.85498,.56963,.88254,1.23516,.8675,.81552,.75443,.84503,.73206,.76659,.86275,.85122,.90685,.77892,.85746,1.02638,.89385,.75657,.85122,.86275,.77452,.74171,.79776,.7306,.95165,.77818,.89772,.88831,.90685,.7306,.98142,1.02191,.96576,1.23516,.99018,.98142,.9236,.89258,.94035,1.02191,.78848,.96576,.9561,1.23516,.90918,.92578,.95424,.89746,.83969,.9482,.80113,.89442,.85208,.86155,.98022,.99018,1.00452,.81209,.99247,.89181,1.23516,.99018,.9482,.99018,.89181,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.88844,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89464,1,1,1,1,1,1,1,1,1,1,1,1,.96766,1,1,1,1,1,1,.94258,.98986,.94258,.98986,.94258,.98986,.7306,.90527,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.69043,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.99331,.82616,.91133,.84286,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90527,1.81055,.90527,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1.07185,.99413,.96334,1.08065,1,1,1,1,1,1,1,1,1,1,1],t.CalibriRegularMetrics={lineHeight:1.2207,lineGap:.2207}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.HelveticaRegularMetrics=t.HelveticaRegularFactors=t.HelveticaItalicMetrics=t.HelveticaItalicFactors=t.HelveticaBoldMetrics=t.HelveticaBoldItalicMetrics=t.HelveticaBoldItalicFactors=t.HelveticaBoldFactors=void 0,t.HelveticaBoldFactors=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.03374,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.00042,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.03828,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00034,.99977,1,.99997,1.00026,1.00078,1.00036,.99973,1.00013,1.0006,.99977,.99977,.99988,.85148,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,1.00069,1.00022,.99977,1.00001,.99984,1.00026,1.00001,1.00024,1.00001,.9999,1,1.0006,1.00001,1.00041,.99962,1.00026,1.0006,.99995,1.00041,.99942,.99973,.99927,1.00082,.99902,1.00026,1.00087,1.0006,1.00069,.99973,.99867,.99973,.9993,1.00026,1.00049,1.00056,1,.99988,.99935,.99995,.99954,1.00055,.99945,1.00032,1.0006,.99995,1.00026,.99995,1.00032,1.00001,1.00008,.99971,1.00019,.9994,1.00001,1.0006,1.00044,.99973,1.00023,1.00047,1,.99942,.99561,.99989,1.00035,.99977,1.00035,.99977,1.00019,.99944,1.00001,1.00021,.99926,1.00035,1.00035,.99942,1.00048,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.99989,1.00057,1.00001,.99936,1.00052,1.00012,.99996,1.00043,1,1.00035,.9994,.99976,1.00035,.99973,1.00052,1.00041,1.00119,1.00037,.99973,1.00002,.99986,1.00041,1.00041,.99902,.9996,1.00034,.99999,1.00026,.99999,1.00026,.99973,1.00052,.99973,1,.99973,1.00041,1.00075,.9994,1.0003,.99999,1,1.00041,.99955,1,.99915,.99973,.99973,1.00026,1.00119,.99955,.99973,1.0006,.99911,1.0006,1.00026,.99972,1.00026,.99902,1.00041,.99973,.99999,1,1,1.00038,1.0005,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,1.00047,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaBoldMetrics={lineHeight:1.2,lineGap:.2},t.HelveticaBoldItalicFactors=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.0044,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99971,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.01011,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99977,1,1,1.00026,.99969,.99972,.99981,.9998,1.0006,.99977,.99977,1.00022,.91155,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,.99966,1.00022,1.00032,1.00001,.99944,1.00026,1.00001,.99968,1.00001,1.00047,1,1.0006,1.00001,.99981,1.00101,1.00026,1.0006,.99948,.99981,1.00064,.99973,.99942,1.00101,1.00061,1.00026,1.00069,1.0006,1.00014,.99973,1.01322,.99973,1.00065,1.00026,1.00012,.99923,1,1.00064,1.00076,.99948,1.00055,1.00063,1.00007,.99943,1.0006,.99948,1.00026,.99948,.99943,1.00001,1.00001,1.00029,1.00038,1.00035,1.00001,1.0006,1.0006,.99973,.99978,1.00001,1.00057,.99989,.99967,.99964,.99967,.99977,.99999,.99977,1.00038,.99977,1.00001,.99973,1.00066,.99967,.99967,1.00041,.99998,.99999,.99977,1.00022,.99967,1.00001,.99977,1.00026,.99964,1.00031,1.00001,.99999,.99999,1,1.00023,1,1,.99999,1.00035,1.00001,.99999,.99973,.99977,.99999,1.00058,.99973,.99973,.99955,.9995,1.00026,1.00026,1.00032,.99989,1.00034,.99999,1.00026,1.00026,1.00026,.99973,.45998,.99973,1.00026,.99973,1.00001,.99999,.99982,.99994,.99996,1,1.00042,1.00044,1.00029,1.00023,.99973,.99973,1.00026,.99949,1.00002,.99973,1.0006,1.0006,1.0006,.99975,1.00026,1.00026,1.00032,.98685,.99973,1.00026,1,1,.99966,1.00044,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1,.99973,.99971,.99978,1,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00098,1,1,1,1.00049,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaBoldItalicMetrics={lineHeight:1.35,lineGap:.2},t.HelveticaItalicFactors=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.0288,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,.99946,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.06311,.99973,1.00024,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,1.00041,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.89547,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00001,1,1.00054,.99977,1.00084,1.00007,.99973,1.00013,.99924,1.00001,1.00001,.99945,.91221,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00001,.99999,.99977,.99933,1.00022,1.00054,1.00001,1.00065,1.00026,1.00001,1.0001,1.00001,1.00052,1,1.0006,1.00001,.99945,.99897,.99968,.99924,1.00036,.99945,.99949,1,1.0006,.99897,.99918,.99968,.99911,.99924,1,.99962,1.01487,1,1.0005,.99973,1.00012,1.00043,1,.99995,.99994,1.00036,.99947,1.00019,1.00063,1.00025,.99924,1.00036,.99973,1.00036,1.00025,1.00001,1.00001,1.00027,1.0001,1.00068,1.00001,1.0006,1.0006,1,1.00008,.99957,.99972,.9994,.99954,.99975,1.00051,1.00001,1.00019,1.00001,1.0001,.99986,1.00001,1.00001,1.00038,.99954,.99954,.9994,1.00066,.99999,.99977,1.00022,1.00054,1.00001,.99977,1.00026,.99975,1.0001,1.00001,.99993,.9995,.99955,1.00016,.99978,.99974,1.00019,1.00022,.99955,1.00053,.99973,1.00089,1.00005,.99967,1.00048,.99973,1.00002,1.00034,.99973,.99973,.99964,1.00006,1.00066,.99947,.99973,.98894,.99973,1,.44898,1,.99946,1,1.00039,1.00082,.99991,.99991,.99985,1.00022,1.00023,1.00061,1.00006,.99966,.99973,.99973,.99973,1.00019,1.0008,1,.99924,.99924,.99924,.99983,1.00044,.99973,.99964,.98332,1,.99973,1,1,.99962,.99895,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,1.00423,.99925,.99999,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00049,1,1.00245,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,1.00003,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaItalicMetrics={lineHeight:1.35,lineGap:.2},t.HelveticaRegularFactors=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.04596,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,1.00019,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.02572,.99973,1.00005,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,.99999,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.84533,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99928,1,.99977,1.00013,1.00055,.99947,.99945,.99941,.99924,1.00001,1.00001,1.0004,.91621,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00005,.99999,.99977,1.00015,1.00022,.99977,1.00001,.99973,1.00026,1.00001,1.00019,1.00001,.99946,1,1.0006,1.00001,.99978,1.00045,.99973,.99924,1.00023,.99978,.99966,1,1.00065,1.00045,1.00019,.99973,.99973,.99924,1,1,.96499,1,1.00055,.99973,1.00008,1.00027,1,.9997,.99995,1.00023,.99933,1.00019,1.00015,1.00031,.99924,1.00023,.99973,1.00023,1.00031,1.00001,.99928,1.00029,1.00092,1.00035,1.00001,1.0006,1.0006,1,.99988,.99975,1,1.00082,.99561,.9996,1.00035,1.00001,.99962,1.00001,1.00092,.99964,1.00001,.99963,.99999,1.00035,1.00035,1.00082,.99962,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.9996,.99967,1.00001,1.00034,1.00074,1.00054,1.00053,1.00063,.99971,.99962,1.00035,.99975,.99977,.99973,1.00043,.99953,1.0007,.99915,.99973,1.00008,.99892,1.00073,1.00073,1.00114,.99915,1.00073,.99955,.99973,1.00092,.99973,1,.99998,1,1.0003,1,1.00043,1.00001,.99969,1.0003,1,1.00035,1.00001,.9995,1,1.00092,.99973,.99973,.99973,1.0007,.9995,1,.99924,1.0006,.99924,.99972,1.00062,.99973,1.00114,1.00073,1,.99955,1,1,1.00047,.99968,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,.99925,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaRegularMetrics={lineHeight:1.2,lineGap:.2}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LiberationSansRegularWidths=t.LiberationSansRegularMapping=t.LiberationSansItalicWidths=t.LiberationSansItalicMapping=t.LiberationSansBoldWidths=t.LiberationSansBoldMapping=t.LiberationSansBoldItalicWidths=t.LiberationSansBoldItalicMapping=void 0,t.LiberationSansBoldWidths=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,719,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,785,556,556,278,722,556,556,611,278,611,278,611,385,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,465,722,333,853,906,474,825,927,838,278,722,722,601,719,667,611,722,778,278,722,667,833,722,644,778,722,667,600,611,667,821,667,809,802,278,667,615,451,611,278,582,615,610,556,606,475,460,611,541,278,558,556,612,556,445,611,766,619,520,684,446,582,715,576,753,845,278,582,611,582,845,667,669,885,567,711,667,278,276,556,1094,1062,875,610,722,622,719,722,719,722,567,712,667,904,626,719,719,610,702,833,722,778,719,667,722,611,622,854,667,730,703,1005,1019,870,979,719,711,1031,719,556,618,615,417,635,556,709,497,615,615,500,635,740,604,611,604,611,556,490,556,875,556,615,581,833,844,729,854,615,552,854,583,556,556,611,417,552,556,278,281,278,969,906,611,500,615,556,604,778,611,487,447,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1094,556,885,489,1115,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],t.LiberationSansBoldMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansBoldItalicWidths=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,740,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,782,556,556,278,722,556,556,611,278,611,278,611,396,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,333,722,333,854,906,473,844,930,847,278,722,722,610,671,667,611,722,778,278,722,667,833,722,657,778,718,667,590,611,667,822,667,829,781,278,667,620,479,611,278,591,620,621,556,610,479,492,611,558,278,566,556,603,556,450,611,712,605,532,664,409,591,704,578,773,834,278,591,611,591,834,667,667,886,614,719,667,278,278,556,1094,1042,854,622,719,677,719,722,708,722,614,722,667,927,643,719,719,615,687,833,722,778,719,667,722,611,677,781,667,729,708,979,989,854,1e3,708,719,1042,729,556,619,604,534,618,556,736,510,611,611,507,622,740,604,611,611,611,556,889,556,885,556,646,583,889,935,707,854,594,552,865,589,556,556,611,469,563,556,278,278,278,969,906,611,507,619,556,611,778,611,575,467,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1104,556,885,516,1146,1e3,768,600,834,834,834,834,999,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],t.LiberationSansBoldItalicMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansItalicWidths=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,625,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,733,444,500,222,667,500,500,556,222,556,222,556,281,556,400,556,222,722,556,722,556,722,556,615,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,354,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,789,846,389,794,865,775,222,667,667,570,671,667,611,722,778,278,667,667,833,722,648,778,725,667,600,611,667,837,667,831,761,278,667,570,439,555,222,550,570,571,500,556,439,463,555,542,222,500,492,548,500,447,556,670,573,486,603,374,550,652,546,728,779,222,550,556,550,779,667,667,843,544,708,667,278,278,500,1066,982,844,589,715,639,724,667,651,667,544,704,667,917,614,715,715,589,686,833,722,778,725,667,722,611,639,795,667,727,673,920,923,805,886,651,694,1022,682,556,562,522,493,553,556,688,465,556,556,472,564,686,550,556,556,556,500,833,500,835,500,572,518,830,851,621,736,526,492,752,534,556,556,556,378,496,500,222,222,222,910,828,556,472,565,500,556,778,556,492,339,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1083,1e3,768,600,834,834,834,834,1e3,500,998,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,584,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],t.LiberationSansItalicMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansRegularWidths=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,615,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,735,444,500,222,667,500,500,556,222,556,222,556,292,556,334,556,222,722,556,722,556,722,556,604,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,375,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,784,838,384,774,855,752,222,667,667,551,668,667,611,722,778,278,667,668,833,722,650,778,722,667,618,611,667,798,667,835,748,278,667,578,446,556,222,547,578,575,500,557,446,441,556,556,222,500,500,576,500,448,556,690,569,482,617,395,547,648,525,713,781,222,547,556,547,781,667,667,865,542,719,667,278,278,500,1057,1010,854,583,722,635,719,667,656,667,542,677,667,923,604,719,719,583,656,833,722,778,719,667,722,611,635,760,667,740,667,917,938,792,885,656,719,1010,722,556,573,531,365,583,556,669,458,559,559,438,583,688,552,556,542,556,500,458,500,823,500,573,521,802,823,625,719,521,510,750,542,556,556,556,365,510,500,222,278,222,906,812,556,438,559,500,552,778,556,489,411,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1073,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],t.LiberationSansRegularMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MyriadProRegularMetrics=t.MyriadProRegularFactors=t.MyriadProItalicMetrics=t.MyriadProItalicFactors=t.MyriadProBoldMetrics=t.MyriadProBoldItalicMetrics=t.MyriadProBoldItalicFactors=t.MyriadProBoldFactors=void 0,t.MyriadProBoldFactors=[1.36898,1,1,.72706,.80479,.83734,.98894,.99793,.9897,.93884,.86209,.94292,.94292,1.16661,1.02058,.93582,.96694,.93582,1.19137,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.78076,.78076,1.02058,1.02058,1.02058,.72851,.78966,.90838,.83637,.82391,.96376,.80061,.86275,.8768,.95407,1.0258,.73901,.85022,.83655,1.0156,.95546,.92179,.87107,.92179,.82114,.8096,.89713,.94438,.95353,.94083,.91905,.90406,.9446,.94292,1.18777,.94292,1.02058,.89903,.90088,.94938,.97898,.81093,.97571,.94938,1.024,.9577,.95933,.98621,1.0474,.97455,.98981,.9672,.95933,.9446,.97898,.97407,.97646,.78036,1.10208,.95442,.95298,.97579,.9332,.94039,.938,.80687,1.01149,.80687,1.02058,.80479,.99793,.99793,.99793,.99793,1.01149,1.00872,.90088,.91882,1.0213,.8361,1.02058,.62295,.54324,.89022,1.08595,1,1,.90088,1,.97455,.93582,.90088,1,1.05686,.8361,.99642,.99642,.99642,.72851,.90838,.90838,.90838,.90838,.90838,.90838,.868,.82391,.80061,.80061,.80061,.80061,1.0258,1.0258,1.0258,1.0258,.97484,.95546,.92179,.92179,.92179,.92179,.92179,1.02058,.92179,.94438,.94438,.94438,.94438,.90406,.86958,.98225,.94938,.94938,.94938,.94938,.94938,.94938,.9031,.81093,.94938,.94938,.94938,.94938,.98621,.98621,.98621,.98621,.93969,.95933,.9446,.9446,.9446,.9446,.9446,1.08595,.9446,.95442,.95442,.95442,.95442,.94039,.97898,.94039,.90838,.94938,.90838,.94938,.90838,.94938,.82391,.81093,.82391,.81093,.82391,.81093,.82391,.81093,.96376,.84313,.97484,.97571,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.8768,.9577,.8768,.9577,.8768,.9577,1,1,.95407,.95933,.97069,.95933,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,.887,1.01591,.73901,1.0474,1,1,.97455,.83655,.98981,1,1,.83655,.73977,.83655,.73903,.84638,1.033,.95546,.95933,1,1,.95546,.95933,.8271,.95417,.95933,.92179,.9446,.92179,.9446,.92179,.9446,.936,.91964,.82114,.97646,1,1,.82114,.97646,.8096,.78036,.8096,.78036,1,1,.8096,.78036,1,1,.89713,.77452,.89713,1.10208,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94083,.97579,.90406,.94039,.90406,.9446,.938,.9446,.938,.9446,.938,1,.99793,.90838,.94938,.868,.9031,.92179,.9446,1,1,.89713,1.10208,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90989,.9358,.91945,.83181,.75261,.87992,.82976,.96034,.83689,.97268,1.0078,.90838,.83637,.8019,.90157,.80061,.9446,.95407,.92436,1.0258,.85022,.97153,1.0156,.95546,.89192,.92179,.92361,.87107,.96318,.89713,.93704,.95638,.91905,.91709,.92796,1.0258,.93704,.94836,1.0373,.95933,1.0078,.95871,.94836,.96174,.92601,.9498,.98607,.95776,.95933,1.05453,1.0078,.98275,.9314,.95617,.91701,1.05993,.9446,.78367,.9553,1,.86832,1.0128,.95871,.99394,.87548,.96361,.86774,1.0078,.95871,.9446,.95871,.86774,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.94083,.97579,.94083,.97579,.94083,.97579,.90406,.94039,.96694,1,.89903,1,1,1,.93582,.93582,.93582,1,.908,.908,.918,.94219,.94219,.96544,1,1.285,1,1,.81079,.81079,1,1,.74854,1,1,1,1,.99793,1,1,1,.65,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.17173,1,.80535,.76169,1.02058,1.0732,1.05486,1,1,1.30692,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.16161,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProBoldMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProBoldItalicFactors=[1.36898,1,1,.66227,.80779,.81625,.97276,.97276,.97733,.92222,.83266,.94292,.94292,1.16148,1.02058,.93582,.96694,.93582,1.17337,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.78076,.78076,1.02058,1.02058,1.02058,.71541,.76813,.85576,.80591,.80729,.94299,.77512,.83655,.86523,.92222,.98621,.71743,.81698,.79726,.98558,.92222,.90637,.83809,.90637,.80729,.76463,.86275,.90699,.91605,.9154,.85308,.85458,.90531,.94292,1.21296,.94292,1.02058,.89903,1.18616,.99613,.91677,.78216,.91677,.90083,.98796,.9135,.92168,.95381,.98981,.95298,.95381,.93459,.92168,.91513,.92004,.91677,.95077,.748,1.04502,.91677,.92061,.94236,.89544,.89364,.9,.80687,.8578,.80687,1.02058,.80779,.97276,.97276,.97276,.97276,.8578,.99973,1.18616,.91339,1.08074,.82891,1.02058,.55509,.71526,.89022,1.08595,1,1,1.18616,1,.96736,.93582,1.18616,1,1.04864,.82711,.99043,.99043,.99043,.71541,.85576,.85576,.85576,.85576,.85576,.85576,.845,.80729,.77512,.77512,.77512,.77512,.98621,.98621,.98621,.98621,.95961,.92222,.90637,.90637,.90637,.90637,.90637,1.02058,.90251,.90699,.90699,.90699,.90699,.85458,.83659,.94951,.99613,.99613,.99613,.99613,.99613,.99613,.85811,.78216,.90083,.90083,.90083,.90083,.95381,.95381,.95381,.95381,.9135,.92168,.91513,.91513,.91513,.91513,.91513,1.08595,.91677,.91677,.91677,.91677,.91677,.89364,.92332,.89364,.85576,.99613,.85576,.99613,.85576,.99613,.80729,.78216,.80729,.78216,.80729,.78216,.80729,.78216,.94299,.76783,.95961,.91677,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.86523,.9135,.86523,.9135,.86523,.9135,1,1,.92222,.92168,.92222,.92168,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.86036,.97096,.71743,.98981,1,1,.95298,.79726,.95381,1,1,.79726,.6894,.79726,.74321,.81691,1.0006,.92222,.92168,1,1,.92222,.92168,.79464,.92098,.92168,.90637,.91513,.90637,.91513,.90637,.91513,.909,.87514,.80729,.95077,1,1,.80729,.95077,.76463,.748,.76463,.748,1,1,.76463,.748,1,1,.86275,.72651,.86275,1.04502,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.9154,.94236,.85458,.89364,.85458,.90531,.9,.90531,.9,.90531,.9,1,.97276,.85576,.99613,.845,.85811,.90251,.91677,1,1,.86275,1.04502,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.00899,1.30628,.85576,.80178,.66862,.7927,.69323,.88127,.72459,.89711,.95381,.85576,.80591,.7805,.94729,.77512,.90531,.92222,.90637,.98621,.81698,.92655,.98558,.92222,.85359,.90637,.90976,.83809,.94523,.86275,.83509,.93157,.85308,.83392,.92346,.98621,.83509,.92886,.91324,.92168,.95381,.90646,.92886,.90557,.86847,.90276,.91324,.86842,.92168,.99531,.95381,.9224,.85408,.92699,.86847,1.0051,.91513,.80487,.93481,1,.88159,1.05214,.90646,.97355,.81539,.89398,.85923,.95381,.90646,.91513,.90646,.85923,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9154,.94236,.9154,.94236,.9154,.94236,.85458,.89364,.96694,1,.89903,1,1,1,.91782,.91782,.91782,1,.896,.896,.896,.9332,.9332,.95973,1,1.26,1,1,.80479,.80178,1,1,.85633,1,1,1,1,.97276,1,1,1,.698,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.14542,1,.79199,.78694,1.02058,1.03493,1.05486,1,1,1.23026,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.20006,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProBoldItalicMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProItalicFactors=[1.36898,1,1,.65507,.84943,.85639,.88465,.88465,.86936,.88307,.86948,.85283,.85283,1.06383,1.02058,.75945,.9219,.75945,1.17337,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.75945,.75945,1.02058,1.02058,1.02058,.69046,.70926,.85158,.77812,.76852,.89591,.70466,.76125,.80094,.86822,.83864,.728,.77212,.79475,.93637,.87514,.8588,.76013,.8588,.72421,.69866,.77598,.85991,.80811,.87832,.78112,.77512,.8562,1.0222,1.18417,1.0222,1.27014,.89903,1.15012,.93859,.94399,.846,.94399,.81453,1.0186,.94219,.96017,1.03075,1.02175,.912,1.03075,.96998,.96017,.93859,.94399,.94399,.95493,.746,1.12658,.94578,.91,.979,.882,.882,.83,.85034,.83537,.85034,1.02058,.70869,.88465,.88465,.88465,.88465,.83537,.90083,1.15012,.9161,.94565,.73541,1.02058,.53609,.69353,.79519,1.08595,1,1,1.15012,1,.91974,.75945,1.15012,1,.9446,.73361,.9005,.9005,.9005,.62864,.85158,.85158,.85158,.85158,.85158,.85158,.773,.76852,.70466,.70466,.70466,.70466,.83864,.83864,.83864,.83864,.90561,.87514,.8588,.8588,.8588,.8588,.8588,1.02058,.85751,.85991,.85991,.85991,.85991,.77512,.76013,.88075,.93859,.93859,.93859,.93859,.93859,.93859,.8075,.846,.81453,.81453,.81453,.81453,.82424,.82424,.82424,.82424,.9278,.96017,.93859,.93859,.93859,.93859,.93859,1.08595,.8562,.94578,.94578,.94578,.94578,.882,.94578,.882,.85158,.93859,.85158,.93859,.85158,.93859,.76852,.846,.76852,.846,.76852,.846,.76852,.846,.89591,.8544,.90561,.94399,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.80094,.94219,.80094,.94219,.80094,.94219,1,1,.86822,.96017,.86822,.96017,.83864,.82424,.83864,.82424,.83864,.82424,.83864,1.03075,.83864,.82424,.81402,1.02738,.728,1.02175,1,1,.912,.79475,1.03075,1,1,.79475,.83911,.79475,.66266,.80553,1.06676,.87514,.96017,1,1,.87514,.96017,.86865,.87396,.96017,.8588,.93859,.8588,.93859,.8588,.93859,.867,.84759,.72421,.95493,1,1,.72421,.95493,.69866,.746,.69866,.746,1,1,.69866,.746,1,1,.77598,.88417,.77598,1.12658,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.87832,.979,.77512,.882,.77512,.8562,.83,.8562,.83,.8562,.83,1,.88465,.85158,.93859,.773,.8075,.85751,.8562,1,1,.77598,1.12658,1.15012,1.15012,1.15012,1.15012,1.15012,1.15313,1.15012,1.15012,1.15012,1.08106,1.03901,.85158,.77025,.62264,.7646,.65351,.86026,.69461,.89947,1.03075,.85158,.77812,.76449,.88836,.70466,.8562,.86822,.8588,.83864,.77212,.85308,.93637,.87514,.82352,.8588,.85701,.76013,.89058,.77598,.8156,.82565,.78112,.77899,.89386,.83864,.8156,.9486,.92388,.96186,1.03075,.91123,.9486,.93298,.878,.93942,.92388,.84596,.96186,.95119,1.03075,.922,.88787,.95829,.88,.93559,.93859,.78815,.93758,1,.89217,1.03737,.91123,.93969,.77487,.85769,.86799,1.03075,.91123,.93859,.91123,.86799,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87832,.979,.87832,.979,.87832,.979,.77512,.882,.9219,1,.89903,1,1,1,.87321,.87321,.87321,1,1.027,1.027,1.027,.86847,.86847,.79121,1,1.124,1,1,.73572,.73572,1,1,.85034,1,1,1,1,.88465,1,1,1,.669,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.04828,1,.74948,.75187,1.02058,.98391,1.02119,1,1,1.06233,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05233,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProItalicMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProRegularFactors=[1.36898,1,1,.76305,.82784,.94935,.89364,.92241,.89073,.90706,.98472,.85283,.85283,1.0664,1.02058,.74505,.9219,.74505,1.23456,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.74505,.74505,1.02058,1.02058,1.02058,.73002,.72601,.91755,.8126,.80314,.92222,.73764,.79726,.83051,.90284,.86023,.74,.8126,.84869,.96518,.91115,.8858,.79761,.8858,.74498,.73914,.81363,.89591,.83659,.89633,.85608,.8111,.90531,1.0222,1.22736,1.0222,1.27014,.89903,.90088,.86667,1.0231,.896,1.01411,.90083,1.05099,1.00512,.99793,1.05326,1.09377,.938,1.06226,1.00119,.99793,.98714,1.0231,1.01231,.98196,.792,1.19137,.99074,.962,1.01915,.926,.942,.856,.85034,.92006,.85034,1.02058,.69067,.92241,.92241,.92241,.92241,.92006,.9332,.90088,.91882,.93484,.75339,1.02058,.56866,.54324,.79519,1.08595,1,1,.90088,1,.95325,.74505,.90088,1,.97198,.75339,.91009,.91009,.91009,.66466,.91755,.91755,.91755,.91755,.91755,.91755,.788,.80314,.73764,.73764,.73764,.73764,.86023,.86023,.86023,.86023,.92915,.91115,.8858,.8858,.8858,.8858,.8858,1.02058,.8858,.89591,.89591,.89591,.89591,.8111,.79611,.89713,.86667,.86667,.86667,.86667,.86667,.86667,.86936,.896,.90083,.90083,.90083,.90083,.84224,.84224,.84224,.84224,.97276,.99793,.98714,.98714,.98714,.98714,.98714,1.08595,.89876,.99074,.99074,.99074,.99074,.942,1.0231,.942,.91755,.86667,.91755,.86667,.91755,.86667,.80314,.896,.80314,.896,.80314,.896,.80314,.896,.92222,.93372,.92915,1.01411,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.83051,1.00512,.83051,1.00512,.83051,1.00512,1,1,.90284,.99793,.90976,.99793,.86023,.84224,.86023,.84224,.86023,.84224,.86023,1.05326,.86023,.84224,.82873,1.07469,.74,1.09377,1,1,.938,.84869,1.06226,1,1,.84869,.83704,.84869,.81441,.85588,1.08927,.91115,.99793,1,1,.91115,.99793,.91887,.90991,.99793,.8858,.98714,.8858,.98714,.8858,.98714,.894,.91434,.74498,.98196,1,1,.74498,.98196,.73914,.792,.73914,.792,1,1,.73914,.792,1,1,.81363,.904,.81363,1.19137,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89633,1.01915,.8111,.942,.8111,.90531,.856,.90531,.856,.90531,.856,1,.92241,.91755,.86667,.788,.86936,.8858,.89876,1,1,.81363,1.19137,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90388,1.03901,.92138,.78105,.7154,.86169,.80513,.94007,.82528,.98612,1.06226,.91755,.8126,.81884,.92819,.73764,.90531,.90284,.8858,.86023,.8126,.91172,.96518,.91115,.83089,.8858,.87791,.79761,.89297,.81363,.88157,.89992,.85608,.81992,.94307,.86023,.88157,.95308,.98699,.99793,1.06226,.95817,.95308,.97358,.928,.98088,.98699,.92761,.99793,.96017,1.06226,.986,.944,.95978,.938,.96705,.98714,.80442,.98972,1,.89762,1.04552,.95817,.99007,.87064,.91879,.88888,1.06226,.95817,.98714,.95817,.88888,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89633,1.01915,.89633,1.01915,.89633,1.01915,.8111,.942,.9219,1,.89903,1,1,1,.93173,.93173,.93173,1,1.06304,1.06304,1.06904,.89903,.89903,.80549,1,1.156,1,1,.76575,.76575,1,1,.72458,1,1,1,1,.92241,1,1,1,.619,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.07257,1,.74705,.71119,1.02058,1.024,1.02119,1,1,1.1536,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05638,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProRegularMetrics={lineHeight:1.2,lineGap:.2}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SegoeuiRegularMetrics=t.SegoeuiRegularFactors=t.SegoeuiItalicMetrics=t.SegoeuiItalicFactors=t.SegoeuiBoldMetrics=t.SegoeuiBoldItalicMetrics=t.SegoeuiBoldItalicFactors=t.SegoeuiBoldFactors=void 0,t.SegoeuiBoldFactors=[1.76738,1,1,.99297,.9824,1.04016,1.06497,1.03424,.97529,1.17647,1.23203,1.1085,1.1085,1.16939,1.2107,.9754,1.21408,.9754,1.59578,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,.81378,.81378,1.2107,1.2107,1.2107,.71703,.97847,.97363,.88776,.8641,1.02096,.79795,.85132,.914,1.06085,1.1406,.8007,.89858,.83693,1.14889,1.09398,.97489,.92094,.97489,.90399,.84041,.95923,1.00135,1,1.06467,.98243,.90996,.99361,1.1085,1.56942,1.1085,1.2107,.74627,.94282,.96752,1.01519,.86304,1.01359,.97278,1.15103,1.01359,.98561,1.02285,1.02285,1.00527,1.02285,1.0302,.99041,1.0008,1.01519,1.01359,1.02258,.79104,1.16862,.99041,.97454,1.02511,.99298,.96752,.95801,.94856,1.16579,.94856,1.2107,.9824,1.03424,1.03424,1,1.03424,1.16579,.8727,1.3871,1.18622,1.10818,1.04478,1.2107,1.18622,.75155,.94994,1.28826,1.21408,1.21408,.91056,1,.91572,.9754,.64663,1.18328,1.24866,1.04478,1.14169,1.15749,1.17389,.71703,.97363,.97363,.97363,.97363,.97363,.97363,.93506,.8641,.79795,.79795,.79795,.79795,1.1406,1.1406,1.1406,1.1406,1.02096,1.09398,.97426,.97426,.97426,.97426,.97426,1.2107,.97489,1.00135,1.00135,1.00135,1.00135,.90996,.92094,1.02798,.96752,.96752,.96752,.96752,.96752,.96752,.93136,.86304,.97278,.97278,.97278,.97278,1.02285,1.02285,1.02285,1.02285,.97122,.99041,1,1,1,1,1,1.28826,1.0008,.99041,.99041,.99041,.99041,.96752,1.01519,.96752,.97363,.96752,.97363,.96752,.97363,.96752,.8641,.86304,.8641,.86304,.8641,.86304,.8641,.86304,1.02096,1.03057,1.02096,1.03517,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.914,1.01359,.914,1.01359,.914,1.01359,1,1,1.06085,.98561,1.06085,1.00879,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,.97138,1.08692,.8007,1.02285,1,1,1.00527,.83693,1.02285,1,1,.83693,.9455,.83693,.90418,.83693,1.13005,1.09398,.99041,1,1,1.09398,.99041,.96692,1.09251,.99041,.97489,1.0008,.97489,1.0008,.97489,1.0008,.93994,.97931,.90399,1.02258,1,1,.90399,1.02258,.84041,.79104,.84041,.79104,.84041,.79104,.84041,.79104,1,1,.95923,1.07034,.95923,1.16862,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.06467,1.02511,.90996,.96752,.90996,.99361,.95801,.99361,.95801,.99361,.95801,1.07733,1.03424,.97363,.96752,.93506,.93136,.97489,1.0008,1,1,.95923,1.16862,1.15103,1.15103,1.01173,1.03959,.75953,.81378,.79912,1.15103,1.21994,.95161,.87815,1.01149,.81525,.7676,.98167,1.01134,1.02546,.84097,1.03089,1.18102,.97363,.88776,.85134,.97826,.79795,.99361,1.06085,.97489,1.1406,.89858,1.0388,1.14889,1.09398,.86039,.97489,1.0595,.92094,.94793,.95923,.90996,.99346,.98243,1.02112,.95493,1.1406,.90996,1.03574,1.02597,1.0008,1.18102,1.06628,1.03574,1.0192,1.01932,1.00886,.97531,1.0106,1.0008,1.13189,1.18102,1.02277,.98683,1.0016,.99561,1.07237,1.0008,.90434,.99921,.93803,.8965,1.23085,1.06628,1.04983,.96268,1.0499,.98439,1.18102,1.06628,1.0008,1.06628,.98439,.79795,1,1,1,1,1,1,1,1,1,1,1,1,1.09466,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.97278,1,1,1,1,1,1,1,1,1,1,1,1,1.02065,1,1,1,1,1,1,1.06467,1.02511,1.06467,1.02511,1.06467,1.02511,.90996,.96752,1,1.21408,.89903,1,1,.75155,1.04394,1.04394,1.04394,1.04394,.98633,.98633,.98633,.73047,.73047,1.20642,.91211,1.25635,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.12454,.93503,1.03424,1.19687,1.03424,1,1,1,.771,1,1,1.15749,1.15749,1.15749,1.10948,.86279,.94434,.86279,.94434,.86182,1,1,1.16897,1,.96085,.90137,1.2107,1.18416,1.13973,.69825,.9716,2.10339,1.29004,1.29004,1.21172,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18874,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.09193,1.09193,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiBoldMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiBoldItalicFactors=[1.76738,1,1,.98946,1.03959,1.04016,1.02809,1.036,.97639,1.10953,1.23203,1.11144,1.11144,1.16939,1.21237,.9754,1.21261,.9754,1.59754,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,.81378,.81378,1.21237,1.21237,1.21237,.73541,.97847,.97363,.89723,.87897,1.0426,.79429,.85292,.91149,1.05815,1.1406,.79631,.90128,.83853,1.04396,1.10615,.97552,.94436,.97552,.88641,.80527,.96083,1.00135,1,1.06777,.9817,.91142,.99361,1.11144,1.57293,1.11144,1.21237,.74627,1.31818,1.06585,.97042,.83055,.97042,.93503,1.1261,.97042,.97922,1.14236,.94552,1.01054,1.14236,1.02471,.97922,.94165,.97042,.97042,1.0276,.78929,1.1261,.97922,.95874,1.02197,.98507,.96752,.97168,.95107,1.16579,.95107,1.21237,1.03959,1.036,1.036,1,1.036,1.16579,.87357,1.31818,1.18754,1.26781,1.05356,1.21237,1.18622,.79487,.94994,1.29004,1.24047,1.24047,1.31818,1,.91484,.9754,1.31818,1.1349,1.24866,1.05356,1.13934,1.15574,1.17389,.73541,.97363,.97363,.97363,.97363,.97363,.97363,.94385,.87897,.79429,.79429,.79429,.79429,1.1406,1.1406,1.1406,1.1406,1.0426,1.10615,.97552,.97552,.97552,.97552,.97552,1.21237,.97552,1.00135,1.00135,1.00135,1.00135,.91142,.94436,.98721,1.06585,1.06585,1.06585,1.06585,1.06585,1.06585,.96705,.83055,.93503,.93503,.93503,.93503,1.14236,1.14236,1.14236,1.14236,.93125,.97922,.94165,.94165,.94165,.94165,.94165,1.29004,.94165,.97922,.97922,.97922,.97922,.96752,.97042,.96752,.97363,1.06585,.97363,1.06585,.97363,1.06585,.87897,.83055,.87897,.83055,.87897,.83055,.87897,.83055,1.0426,1.0033,1.0426,.97042,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.91149,.97042,.91149,.97042,.91149,.97042,1,1,1.05815,.97922,1.05815,.97922,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,.97441,1.04302,.79631,1.01582,1,1,1.01054,.83853,1.14236,1,1,.83853,1.09125,.83853,.90418,.83853,1.19508,1.10615,.97922,1,1,1.10615,.97922,1.01034,1.10466,.97922,.97552,.94165,.97552,.94165,.97552,.94165,.91602,.91981,.88641,1.0276,1,1,.88641,1.0276,.80527,.78929,.80527,.78929,.80527,.78929,.80527,.78929,1,1,.96083,1.05403,.95923,1.16862,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.06777,1.02197,.91142,.96752,.91142,.99361,.97168,.99361,.97168,.99361,.97168,1.23199,1.036,.97363,1.06585,.94385,.96705,.97552,.94165,1,1,.96083,1.1261,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,.95161,1.27126,1.00811,.83284,.77702,.99137,.95253,1.0347,.86142,1.07205,1.14236,.97363,.89723,.86869,1.09818,.79429,.99361,1.05815,.97552,1.1406,.90128,1.06662,1.04396,1.10615,.84918,.97552,1.04694,.94436,.98015,.96083,.91142,1.00356,.9817,1.01945,.98999,1.1406,.91142,1.04961,.9898,1.00639,1.14236,1.07514,1.04961,.99607,1.02897,1.008,.9898,.95134,1.00639,1.11121,1.14236,1.00518,.97981,1.02186,1,1.08578,.94165,.99314,.98387,.93028,.93377,1.35125,1.07514,1.10687,.93491,1.04232,1.00351,1.14236,1.07514,.94165,1.07514,1.00351,.79429,1,1,1,1,1,1,1,1,1,1,1,1,1.09097,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.93503,1,1,1,1,1,1,1,1,1,1,1,1,.96609,1,1,1,1,1,1,1.06777,1.02197,1.06777,1.02197,1.06777,1.02197,.91142,.96752,1,1.21261,.89903,1,1,.75155,1.04745,1.04745,1.04745,1.04394,.98633,.98633,.98633,.72959,.72959,1.20502,.91406,1.26514,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.09125,.93327,1.03336,1.16541,1.036,1,1,1,.771,1,1,1.15574,1.15574,1.15574,1.15574,.86364,.94434,.86279,.94434,.86224,1,1,1.16798,1,.96085,.90068,1.21237,1.18416,1.13904,.69825,.9716,2.10339,1.29004,1.29004,1.21339,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18775,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.13269,1.13269,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiBoldItalicMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiItalicFactors=[1.76738,1,1,.98946,1.14763,1.05365,1.06234,.96927,.92586,1.15373,1.18414,.91349,.91349,1.07403,1.17308,.78383,1.20088,.78383,1.42531,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78383,.78383,1.17308,1.17308,1.17308,.77349,.94565,.94729,.85944,.88506,.9858,.74817,.80016,.88449,.98039,.95782,.69238,.89898,.83231,.98183,1.03989,.96924,.86237,.96924,.80595,.74524,.86091,.95402,.94143,.98448,.8858,.83089,.93285,1.0949,1.39016,1.0949,1.45994,.74627,1.04839,.97454,.97454,.87207,.97454,.87533,1.06151,.97454,1.00176,1.16484,1.08132,.98047,1.16484,1.02989,1.01054,.96225,.97454,.97454,1.06598,.79004,1.16344,1.00351,.94629,.9973,.91016,.96777,.9043,.91082,.92481,.91082,1.17308,.95748,.96927,.96927,1,.96927,.92481,.80597,1.04839,1.23393,1.1781,.9245,1.17308,1.20808,.63218,.94261,1.24822,1.09971,1.09971,1.04839,1,.85273,.78032,1.04839,1.09971,1.22326,.9245,1.09836,1.13525,1.15222,.70424,.94729,.94729,.94729,.94729,.94729,.94729,.85498,.88506,.74817,.74817,.74817,.74817,.95782,.95782,.95782,.95782,.9858,1.03989,.96924,.96924,.96924,.96924,.96924,1.17308,.96924,.95402,.95402,.95402,.95402,.83089,.86237,.88409,.97454,.97454,.97454,.97454,.97454,.97454,.92916,.87207,.87533,.87533,.87533,.87533,.93146,.93146,.93146,.93146,.93854,1.01054,.96225,.96225,.96225,.96225,.96225,1.24822,.8761,1.00351,1.00351,1.00351,1.00351,.96777,.97454,.96777,.94729,.97454,.94729,.97454,.94729,.97454,.88506,.87207,.88506,.87207,.88506,.87207,.88506,.87207,.9858,.95391,.9858,.97454,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.88449,.97454,.88449,.97454,.88449,.97454,1,1,.98039,1.00176,.98039,1.00176,.95782,.93146,.95782,.93146,.95782,.93146,.95782,1.16484,.95782,.93146,.84421,1.12761,.69238,1.08132,1,1,.98047,.83231,1.16484,1,1,.84723,1.04861,.84723,.78755,.83231,1.23736,1.03989,1.01054,1,1,1.03989,1.01054,.9857,1.03849,1.01054,.96924,.96225,.96924,.96225,.96924,.96225,.92383,.90171,.80595,1.06598,1,1,.80595,1.06598,.74524,.79004,.74524,.79004,.74524,.79004,.74524,.79004,1,1,.86091,1.02759,.85771,1.16344,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.98448,.9973,.83089,.96777,.83089,.93285,.9043,.93285,.9043,.93285,.9043,1.31868,.96927,.94729,.97454,.85498,.92916,.96924,.8761,1,1,.86091,1.16344,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,.81965,.81965,.94729,.78032,.71022,.90883,.84171,.99877,.77596,1.05734,1.2,.94729,.85944,.82791,.9607,.74817,.93285,.98039,.96924,.95782,.89898,.98316,.98183,1.03989,.78614,.96924,.97642,.86237,.86075,.86091,.83089,.90082,.8858,.97296,1.01284,.95782,.83089,1.0976,1.04,1.03342,1.2,1.0675,1.0976,.98205,1.03809,1.05097,1.04,.95364,1.03342,1.05401,1.2,1.02148,1.0119,1.04724,1.0127,1.02732,.96225,.8965,.97783,.93574,.94818,1.30679,1.0675,1.11826,.99821,1.0557,1.0326,1.2,1.0675,.96225,1.0675,1.0326,.74817,1,1,1,1,1,1,1,1,1,1,1,1,1.03754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87533,1,1,1,1,1,1,1,1,1,1,1,1,.98705,1,1,1,1,1,1,.98448,.9973,.98448,.9973,.98448,.9973,.83089,.96777,1,1.20088,.89903,1,1,.75155,.94945,.94945,.94945,.94945,1.12317,1.12317,1.12317,.67603,.67603,1.15621,.73584,1.21191,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87709,.96927,1.01473,.96927,1,1,1,.77295,1,1,1.09836,1.09836,1.09836,1.01522,.86321,.94434,.8649,.94434,.86182,1,1,1.083,1,.91578,.86438,1.17308,1.18416,1.14589,.69825,.97622,1.96791,1.24822,1.24822,1.17308,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.17984,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10742,1.10742,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiItalicMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiRegularFactors=[1.76738,1,1,.98594,1.02285,1.10454,1.06234,.96927,.92037,1.19985,1.2046,.90616,.90616,1.07152,1.1714,.78032,1.20088,.78032,1.40246,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78032,.78032,1.1714,1.1714,1.1714,.80597,.94084,.96706,.85944,.85734,.97093,.75842,.79936,.88198,.9831,.95782,.71387,.86969,.84636,1.07796,1.03584,.96924,.83968,.96924,.82826,.79649,.85771,.95132,.93119,.98965,.88433,.8287,.93365,1.08612,1.3638,1.08612,1.45786,.74627,.80499,.91484,1.05707,.92383,1.05882,.9403,1.12654,1.05882,1.01756,1.09011,1.09011,.99414,1.09011,1.034,1.01756,1.05356,1.05707,1.05882,1.04399,.84863,1.21968,1.01756,.95801,1.00068,.91797,.96777,.9043,.90351,.92105,.90351,1.1714,.85337,.96927,.96927,.99912,.96927,.92105,.80597,1.2434,1.20808,1.05937,.90957,1.1714,1.20808,.75155,.94261,1.24644,1.09971,1.09971,.84751,1,.85273,.78032,.61584,1.05425,1.17914,.90957,1.08665,1.11593,1.14169,.73381,.96706,.96706,.96706,.96706,.96706,.96706,.86035,.85734,.75842,.75842,.75842,.75842,.95782,.95782,.95782,.95782,.97093,1.03584,.96924,.96924,.96924,.96924,.96924,1.1714,.96924,.95132,.95132,.95132,.95132,.8287,.83968,.89049,.91484,.91484,.91484,.91484,.91484,.91484,.93575,.92383,.9403,.9403,.9403,.9403,.8717,.8717,.8717,.8717,1.00527,1.01756,1.05356,1.05356,1.05356,1.05356,1.05356,1.24644,.95923,1.01756,1.01756,1.01756,1.01756,.96777,1.05707,.96777,.96706,.91484,.96706,.91484,.96706,.91484,.85734,.92383,.85734,.92383,.85734,.92383,.85734,.92383,.97093,1.0969,.97093,1.05882,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.88198,1.05882,.88198,1.05882,.88198,1.05882,1,1,.9831,1.01756,.9831,1.01756,.95782,.8717,.95782,.8717,.95782,.8717,.95782,1.09011,.95782,.8717,.84784,1.11551,.71387,1.09011,1,1,.99414,.84636,1.09011,1,1,.84636,1.0536,.84636,.94298,.84636,1.23297,1.03584,1.01756,1,1,1.03584,1.01756,1.00323,1.03444,1.01756,.96924,1.05356,.96924,1.05356,.96924,1.05356,.93066,.98293,.82826,1.04399,1,1,.82826,1.04399,.79649,.84863,.79649,.84863,.79649,.84863,.79649,.84863,1,1,.85771,1.17318,.85771,1.21968,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.98965,1.00068,.8287,.96777,.8287,.93365,.9043,.93365,.9043,.93365,.9043,1.08571,.96927,.96706,.91484,.86035,.93575,.96924,.95923,1,1,.85771,1.21968,1.11437,1.11437,.93109,.91202,.60411,.84164,.55572,1.01173,.97361,.81818,.81818,.96635,.78032,.72727,.92366,.98601,1.03405,.77968,1.09799,1.2,.96706,.85944,.85638,.96491,.75842,.93365,.9831,.96924,.95782,.86969,.94152,1.07796,1.03584,.78437,.96924,.98715,.83968,.83491,.85771,.8287,.94492,.88433,.9287,1.0098,.95782,.8287,1.0625,.98248,1.03424,1.2,1.01071,1.0625,.95246,1.03809,1.04912,.98248,1.00221,1.03424,1.05443,1.2,1.04785,.99609,1.00169,1.05176,.99346,1.05356,.9087,1.03004,.95542,.93117,1.23362,1.01071,1.07831,1.02512,1.05205,1.03502,1.2,1.01071,1.05356,1.01071,1.03502,.75842,1,1,1,1,1,1,1,1,1,1,1,1,1.03719,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9403,1,1,1,1,1,1,1,1,1,1,1,1,1.04021,1,1,1,1,1,1,.98965,1.00068,.98965,1.00068,.98965,1.00068,.8287,.96777,1,1.20088,.89903,1,1,.75155,1.03077,1.03077,1.03077,1.03077,1.13196,1.13196,1.13196,.67428,.67428,1.16039,.73291,1.20996,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87796,.96927,1.01518,.96927,1,1,1,.77295,1,1,1.10539,1.10539,1.11358,1.06967,.86279,.94434,.86279,.94434,.86182,1,1,1.083,1,.91578,.86507,1.1714,1.18416,1.14589,.69825,.97622,1.9697,1.24822,1.24822,1.17238,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18083,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10938,1.10938,1,1,1,1.05425,1.09971,1.09971,1.09971,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiRegularMetrics={lineHeight:1.33008,lineGap:0}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PostScriptEvaluator=t.PostScriptCompiler=t.PDFFunctionFactory=void 0,t.isPDFFunction=function(e){var t;if("object"!==g(e))return!1;if(e instanceof n.Dict)t=e;else{if(!(e instanceof o.BaseStream))return!1;t=e.dict}return t.has("FunctionType")};var n=r(134),a=r(2),i=r(187),o=r(136),s=r(188);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=f(e);if(t){var a=f(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===g(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function h(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function d(e,t){if(e){if("string"==typeof e)return p(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>c)*l,u&=(1<r?e=r:e0&&(u=l[a-1]);var h=i[1];a>1,h=o.length>>1,d=new x(u),p=Object.create(null),g=8192,v=new Float32Array(h);return function(e,t,r,n){var a,i,o="",c=v;for(a=0;a(b=s[2*a+1]))&&(i=b),l[a]=i}g>0&&(g--,p[o]=l),r.set(l,n)}else r.set(u,n)}}}]),e}(),S=function(){function e(t){v(this,e),this.stack=t?Array.from(t):[]}return m(e,[{key:"push",value:function(t){if(this.stack.length>=e.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(t)}},{key:"pop",value:function(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}},{key:"copy",value:function(t){if(this.stack.length+t>=e.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");for(var r=this.stack,n=r.length-t,a=t-1;a>=0;a--,n++)r.push(r[n])}},{key:"index",value:function(e){this.push(this.stack[this.stack.length-e-1])}},{key:"roll",value:function(e,t){for(var r=this.stack,n=r.length-e,a=r.length-1,i=n+(t-Math.floor(t/e)*e),o=n,s=a;o0?i.push(r<>n);break;case"ceiling":r=i.pop(),i.push(Math.ceil(r));break;case"copy":r=i.pop(),i.copy(r);break;case"cos":r=i.pop(),i.push(Math.cos(r));break;case"cvi":r=0|i.pop(),i.push(r);break;case"cvr":break;case"div":n=i.pop(),r=i.pop(),i.push(r/n);break;case"dup":i.copy(1);break;case"eq":n=i.pop(),r=i.pop(),i.push(r===n);break;case"exch":i.roll(2,1);break;case"exp":n=i.pop(),r=i.pop(),i.push(Math.pow(r,n));break;case"false":i.push(!1);break;case"floor":r=i.pop(),i.push(Math.floor(r));break;case"ge":n=i.pop(),r=i.pop(),i.push(r>=n);break;case"gt":n=i.pop(),r=i.pop(),i.push(r>n);break;case"idiv":n=i.pop(),r=i.pop(),i.push(r/n|0);break;case"index":r=i.pop(),i.index(r);break;case"le":n=i.pop(),r=i.pop(),i.push(r<=n);break;case"ln":r=i.pop(),i.push(Math.log(r));break;case"log":r=i.pop(),i.push(Math.log(r)/Math.LN10);break;case"lt":n=i.pop(),r=i.pop(),i.push(r=t?new C(t):e.max<=t?e:new P(e,t)}var R=function(){function e(){v(this,e)}return m(e,[{key:"compile",value:function(e,t,r){for(var n,a,i,o,s,c,u,l,f=[],h=[],g=t.length>>1,v=r.length>>1,y=0,m=0;mD.min&&(X.unshift("Math.max(",U,", "),X.push(")")),${Object.defineProperty(t,"__esModule",{value:!0}),t.PostScriptParser=t.PostScriptLexer=void 0;var n=r(2),a=r(134),i=r(135);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var r=0;r=0&&(t>=65&&t<=90||t>=97&&t<=122);)r.push(String.fromCharCode(t));var n=r.join("");switch(n.toLowerCase()){case"if":return h.IF;case"ifelse":return h.IFELSE;default:return h.getOperator(n)}}},{key:"getNumber",value:function(){var e=this.currentChar,t=this.strBuf;for(t.length=0,t[0]=String.fromCharCode(e);(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));var r=parseFloat(t.join(""));if(isNaN(r))throw new n.FormatError("Invalid floating point number: ".concat(r));return r}}]),e}();t.PostScriptLexer=d},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LocalTilingPatternCache=t.LocalImageCache=t.LocalGStateCache=t.LocalFunctionCache=t.LocalColorSpaceCache=t.GlobalImageCache=void 0;var n=r(2),a=r(134);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e)throw new Error('LocalImageCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;return this._nameRefMap.set(e,t),void this._imageCache.put(t,r)}this._imageMap.has(e)||this._imageMap.set(e,r)}}]),r}(p);t.LocalImageCache=g;var v=function(e){o(r,e);var t=c(r);function r(){return f(this,r),t.apply(this,arguments)}return d(r,[{key:"set",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e&&!t)throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');if(t){if(this._imageCache.has(t))return;return null!==e&&this._nameRefMap.set(e,t),void this._imageCache.put(t,r)}this._imageMap.has(e)||this._imageMap.set(e,r)}}]),r}(p);t.LocalColorSpaceCache=v;var y=function(e){o(r,e);var t=c(r);function r(e){return f(this,r),t.call(this,{onlyRefs:!0})}return d(r,[{key:"set",value:function(){var e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;if(!e)throw new Error('LocalFunctionCache.set - expected "ref" argument.');this._imageCache.has(e)||this._imageCache.put(e,t)}}]),r}(p);t.LocalFunctionCache=y;var m=function(e){o(r,e);var t=c(r);function r(){return f(this,r),t.apply(this,arguments)}return d(r,[{key:"set",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e)throw new Error('LocalGStateCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;return this._nameRefMap.set(e,t),void this._imageCache.put(t,r)}this._imageMap.has(e)||this._imageMap.set(e,r)}}]),r}(p);t.LocalGStateCache=m;var b=function(e){o(r,e);var t=c(r);function r(e){return f(this,r),t.call(this,{onlyRefs:!0})}return d(r,[{key:"set",value:function(){var e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;if(!e)throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');this._imageCache.has(e)||this._imageCache.put(e,t)}}]),r}(p);t.LocalTilingPatternCache=b;var w=function(){function e(){f(this,e),this._refCache=new a.RefSetCache,this._imageCache=new a.RefSetCache}return d(e,[{key:"_byteSize",get:function(){var e,t=0,r=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}(this._imageCache);try{for(r.s();!(e=r.n()).done;)t+=e.value.byteSize}catch(e){r.e(e)}finally{r.f()}return t}},{key:"_cacheLimitReached",get:function(){return!(this._imageCache.size0&&void 0!==arguments[0]&&arguments[0]||this._refCache.clear(),this._imageCache.clear()}}],[{key:"NUM_PAGES_THRESHOLD",get:function(){return(0,n.shadow)(this,"NUM_PAGES_THRESHOLD",2)}},{key:"MIN_IMAGES_TO_CACHE",get:function(){return(0,n.shadow)(this,"MIN_IMAGES_TO_CACHE",10)}},{key:"MAX_BYTE_SIZE",get:function(){return(0,n.shadow)(this,"MAX_BYTE_SIZE",4e7)}}]),e}();t.GlobalImageCache=w},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.bidi=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],p=!0,g=e.length;if(0===g||r)return f(e,p,r);h.length=g,d.length=g;var v,y,m=0;for(v=0;v4?(p=!0,t=0):(p=!1,t=1));var k=[];for(v=0;v=0&&"ET"===d[F];--F)d[F]="EN";for(var P=v+1;P0&&(I=d[v-1]);var E=A;T+1j&&o(j)&&(_=j);for(j=M;j>=_;--j){var L=-1;for(v=0,y=k.length;v=0&&(l(h,L,v),L=-1):L<0&&(L=v);L>=0&&l(h,L,k.length)}for(v=0,y=h.length;v"!==R||(h[v]="")}return f(h.join(""),p)};var n=r(2),a=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],i=["AN","AN","AN","AN","AN","AN","ON","ON","AL","ET","ET","AL","CS","AL","ON","ON","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","ON","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","NSM","NSM","ON","NSM","NSM","NSM","NSM","AL","AL","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","AL","AL","AL","AL","AL","AL"];function o(e){return 0!=(1&e)}function s(e){return 0==(1&e)}function c(e,t,r){var n,a;for(n=t,a=e.length;n2&&void 0!==arguments[2]&&arguments[2]?r="ttb":t||(r="rtl"),{str:e,dir:r}}var h=[],d=[]},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MurmurHash3_64=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r>>8,t[r++]=255&o)}}else{if(!(0,n.isArrayBuffer)(e))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");r=(t=e.slice()).byteLength}for(var u=r>>2,l=r-4*u,f=new Uint32Array(t.buffer,0,u),h=0,d=0,p=this.h1,g=this.h2,v=3432918353,y=461845907,m=11601,b=13715,w=0;w>>17)*y&s|h*b&c)<<13|p>>>19)+3864292196:g=5*(g=(g^=d=(d=(d=(d=f[w])*v&s|d*m&c)<<15|d>>>17)*y&s|d*b&c)<<13|g>>>19)+3864292196;switch(h=0,l){case 3:h^=t[4*u+2]<<16;case 2:h^=t[4*u+1]<<8;case 1:h=(h=(h=(h^=t[4*u])*v&s|h*m&c)<<15|h>>>17)*y&s|h*b&c,1&u?p^=h:g^=h}this.h1=p,this.h2=g}},{key:"hexdigest",value:function(){var e=this.h1,t=this.h2;return e=3981806797*(e^=t>>>1)&s|36045*e&c,e=444984403*(e^=(t=4283543511*t&s|(2950163797*(t<<16|e>>>16)&s)>>>16)>>>1)&s|60499*e&c,((e^=(t=3301882366*t&s|(3120437893*(t<<16|e>>>16)&s)>>>16)>>>1)>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}])&&i(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.MurmurHash3_64=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OperatorList=void 0;var n=r(2);function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1e3&&(l=Math.max(l,d),p+=h+2,d=0,h=0),f.push({transform:v,x:d,y:p,w:y.width,h:y.height}),d+=y.width+2,h=Math.max(h,y.height)}for(var m=Math.max(l,d)+1,b=p+h+1,w=new Uint8Array(m*b*4),k=m<<2,S=0;S=0;)x[C-4]=x[C],x[C-3]=x[C+1],x[C-2]=x[C+2],x[C-1]=x[C+3],x[C+O]=x[C+O-4],x[C+O+1]=x[C+O-3],x[C+O+2]=x[C+O-2],x[C+O+3]=x[C+O-1],C-=k}return r.splice(o,4*u,n.OPS.paintInlineImageXObjectGroup),a.splice(o,4*u,[{width:m,height:b,kind:n.ImageKind.RGBA_32BPP,data:w},f]),o+1})),h(d,[n.OPS.save,n.OPS.transform,n.OPS.paintImageMaskXObject,n.OPS.restore],null,(function(e,t){var r=e.fnArray,a=(t-(e.iCurr-3))%4;switch(a){case 0:return r[t]===n.OPS.save;case 1:return r[t]===n.OPS.transform;case 2:return r[t]===n.OPS.paintImageMaskXObject;case 3:return r[t]===n.OPS.restore}throw new Error("iterateImageMaskGroup - invalid pos: ".concat(a))}),(function(e,t){var r=e.fnArray,a=e.argsArray,i=e.iCurr,o=i-3,s=i-2,c=i-1,u=Math.floor((t-o)/4);if(u<10)return t-(t-o)%4;var l,f,h=!1,d=a[c][0],p=a[s][0],g=a[s][1],v=a[s][2],y=a[s][3];if(g===v){h=!0,l=s+4;for(var m=c+4,b=1;b=4&&r[i-4]===r[o]&&r[i-3]===r[s]&&r[i-2]===r[c]&&r[i-1]===r[u]&&n[i-4][0]===l&&n[i-4][1]===f&&(h++,d-=5);for(var p=d+4,g=1;g=(r=e.length))break}(n=(n||d)[e[t]])&&!Array.isArray(n)?(i.iCurr=t,t++,!n.checkFn||(0,n.checkFn)(i)?(a=n,n=null):n=null):t++}this.state=n,this.match=a,this.lastProcessed=t}else this.lastProcessed=r}},{key:"flush",value:function(){for(;this.match;){var e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e),this.match=null,this.state=null,this._optimize()}}},{key:"reset",value:function(){this.state=null,this.match=null,this.lastProcessed=0}}]),a}(p),v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1?arguments[1]:void 0;u(this,e),this._streamSink=r,this.fnArray=[],this.argsArray=[],!r||t&n.RenderingIntentFlag.OPLIST?this.optimizer=new p(this):this.optimizer=new g(this),this.dependencies=new Set,this._totalLength=0,this.weight=0,this._resolved=r?null:Promise.resolve()}return f(e,[{key:"length",get:function(){return this.argsArray.length}},{key:"ready",get:function(){return this._resolved||this._streamSink.ready}},{key:"totalLength",get:function(){return this._totalLength+this.length}},{key:"addOp",value:function(t,r){this.optimizer.push(t,r),this.weight++,this._streamSink&&(this.weight>=e.CHUNK_SIZE||this.weight>=e.CHUNK_SIZE_ABOUT&&(t===n.OPS.restore||t===n.OPS.endText))&&this.flush()}},{key:"addImageOps",value:function(e,t,r){void 0!==r&&this.addOp(n.OPS.beginMarkedContentProps,["OC",r]),this.addOp(e,t),void 0!==r&&this.addOp(n.OPS.endMarkedContent,[])}},{key:"addDependency",value:function(e){this.dependencies.has(e)||(this.dependencies.add(e),this.addOp(n.OPS.dependency,[e]))}},{key:"addDependencies",value:function(e){var t,r=a(e);try{for(r.s();!(t=r.n()).done;){var n=t.value;this.addDependency(n)}}catch(e){r.e(e)}finally{r.f()}}},{key:"addOpList",value:function(t){if(t instanceof e){var r,i=a(t.dependencies);try{for(i.s();!(r=i.n()).done;){var o=r.value;this.dependencies.add(o)}}catch(e){i.e(e)}finally{i.f()}for(var s=0,c=t.length;s0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.optimizer.flush();var r=this.length;this._totalLength+=r,this._streamSink.enqueue({fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:e,separateAnnots:t,length:r},1,this._transfers),this.dependencies.clear(),this.fnArray.length=0,this.argsArray.length=0,this.weight=0,this.optimizer.reset()}}],[{key:"CHUNK_SIZE",get:function(){return(0,n.shadow)(this,"CHUNK_SIZE",1e3)}},{key:"CHUNK_SIZE_ABOUT",get:function(){return(0,n.shadow)(this,"CHUNK_SIZE_ABOUT",this.CHUNK_SIZE-5)}}]),e}();t.OperatorList=v},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFImage=void 0;var n=r(2),a=r(193),i=r(136),o=r(143),s=r(148),c=r(156),u=r(159),l=r(134);function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var d={};function p(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==f(h)&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(h).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function d(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function p(e,t){for(var r=0;rn&&(e=n),e}function v(e,t,r,n,a,i){var o,s=a*i;o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);var c,u,l,f,h=r/a,d=n/i,p=0,g=new Uint16Array(a),v=r;for(c=0;c0&&Number.isInteger(s.height)&&s.height>0&&(s.width!==A||s.height!==C)&&((0,n.warn)("PDFImage - using the Width/Height of the image data, rather than the image dictionary."),A=s.width,C=s.height),A<1||C<1)throw new n.FormatError("Invalid image width: ".concat(A," or height: ").concat(C));this.width=A,this.height=C,this.interpolate=k.get("I","Interpolate"),this.imageMask=k.get("IM","ImageMask")||!1,this.matte=k.get("Matte")||!1;var F=s.bitsPerComponent;if(!F&&!(F=k.get("BPC","BitsPerComponent"))){if(!this.imageMask)throw new n.FormatError("Bits per component missing in image: ".concat(this.imageMask));F=1}if(this.bpc=F,!this.imageMask){var P=k.getRaw("CS")||k.getRaw("ColorSpace");if(!P)switch((0,n.info)("JPX images (which do not require color spaces)"),s.numComps){case 1:P=l.Name.get("DeviceGray");break;case 3:P=l.Name.get("DeviceRGB");break;case 4:P=l.Name.get("DeviceCMYK");break;default:throw new Error("JPX images with ".concat(s.numComps," color components not supported."))}this.colorSpace=o.ColorSpace.parse({cs:P,xref:r,resources:f?a:null,pdfFunctionFactory:m,localColorSpaceCache:b}),this.numComps=this.colorSpace.numComps}if(this.decode=k.getArray("D","Decode"),this.needsDecode=!1,this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,F)||y&&!o.ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;var T=(1<>7&1,r[h+1]=u>>6&1,r[h+2]=u>>5&1,r[h+3]=u>>4&1,r[h+4]=u>>3&1,r[h+5]=u>>2&1,r[h+6]=u>>1&1,r[h+7]=1&u,h+=8;if(h>=1}else{var y=0;for(u=0,h=0,c=o;h>m;b<0?b=0:b>f&&(b=f),r[h]=b,u&=(1<p[w+1]){y=255;break}}s[l]=y}}if(s)for(l=0,h=3,f=r*i;l0&&void 0!==arguments[0]&&arguments[0],t=this.drawWidth,r=this.drawHeight,a={width:t,height:r,interpolate:this.interpolate,kind:0,data:null},i=this.numComps,o=this.width,s=this.height,u=this.bpc,l=o*i*u+7>>3;if(!e){var f;if("DeviceGray"===this.colorSpace.name&&1===u?f=n.ImageKind.GRAYSCALE_1BPP:"DeviceRGB"!==this.colorSpace.name||8!==u||this.needsDecode||(f=n.ImageKind.RGB_24BPP),f&&!this.smask&&!this.mask&&t===o&&r===s){if(a.kind=f,a.data=this.getImageBytes(s*l,{}),this.needsDecode){(0,n.assert)(f===n.ImageKind.GRAYSCALE_1BPP,"PDFImage.createImageData: The image must be grayscale.");for(var h=a.data,d=0,p=h.length;d>3,u=this.getImageBytes(o*c,{internal:!0}),l=this.getComponents(u);if(1!==s){this.needsDecode&&this.decodeBuffer(l),a=i*o;var f=255/((1<>3)*i,l=n.byteLength;if(!o||s&&u!==l?s?((t=new Uint8Array(u)).set(n),t.fill(255,l)):t=new Uint8Array(n):t=n,s)for(r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.applyMaskImageData=function(e){var t,r=e.src,i=e.srcPos,o=void 0===i?0:i,s=e.dest,c=e.destPos,u=void 0===c?0:c,l=e.width,f=e.height,h=e.inverseDecode,d=void 0!==h&&h,p=n.FeatureTest.isLittleEndian?4278190080:255,g=function(e){if(Array.isArray(e))return e}(t=d?[0,p]:[p,0])||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{for(i=(r=r.call(e)).next;!(c=(n=i.call(r)).done)&&(s.push(n.value),2!==s.length);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(t)||function(e,t){if(e){if("string"==typeof e)return a(e,2);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,2):void 0}}(t)||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.")}(),v=g[0],y=g[1],m=l>>3,b=7&l,w=r.length;s=new Uint32Array(s.buffer);for(var k=0;ke.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.incrementalUpdate=function(e){var t=e.originalData,r=e.xrefInfo,s=e.newRefs,u=e.xref,h=void 0===u?null:u,g=e.hasXfa,v=void 0!==g&&g,b=e.xfaDatasetsRef,w=void 0===b?null:b,k=e.hasXfaDatasetsEntry,S=void 0!==k&&k,x=e.needAppearances,O=e.acroFormRef,A=void 0===O?null:O,C=e.acroForm,F=void 0===C?null:C,P=e.xfaData,T=void 0===P?null:P;(function(e){var t=e.xref,r=e.acroForm,i=e.acroFormRef,o=e.hasXfa,s=e.hasXfaDatasetsEntry,c=e.xfaDatasetsRef,u=e.needAppearances,f=e.newRefs;if(!o||s||c||(0,n.warn)("XFA - Cannot save it"),u||o&&c){var h,p=new a.Dict(t),g=l(r.getKeys());try{for(g.s();!(h=g.n()).done;){var v=h.value;p.set(v,r.getRaw(v))}}catch(e){g.e(e)}finally{g.f()}if(o&&!s){var y=r.get("XFA").slice();y.splice(2,0,"datasets"),y.splice(3,0,c),p.set("XFA",y)}u&&p.set("NeedAppearances",!0);var m=t.encrypt,b=null;m&&(b=m.createCipherTransform(i.num,i.gen));var w=[];d(i,p,w,b),f.push({ref:i,data:w.join("")})}})({xref:h,acroForm:F,acroFormRef:A,hasXfa:v,hasXfaDatasetsEntry:S,xfaDatasetsRef:w,needAppearances:x,newRefs:s}),v&&function(e){var t=e.xfaData,r=e.xfaDatasetsRef,a=e.newRefs,s=e.xref;null===t&&(t=function(e,t){var r,a=new o.SimpleXMLParser({hasAttributes:!0}).parseFromString(e),s=l(t);try{for(s.s();!(r=s.n()).done;){var c=r.value.xfa;if(c){var u=c.path,f=c.value;if(u){var h=a.documentElement.searchNode((0,i.parseXFAPath)(u),0);h?Array.isArray(f)?h.childNodes=f.map((function(e){return new o.SimpleDOMNode("value",e)})):h.childNodes=[new o.SimpleDOMNode("#text",f)]:(0,n.warn)("Node not found for path: ".concat(u))}}}}catch(e){s.e(e)}finally{s.f()}var d=[];return a.documentElement.dump(d),d.join("")}(s.fetchIfRef(r).getString(),a));var c=s.encrypt;c&&(t=c.createCipherTransform(r.num,r.gen).encryptString(t));var u="".concat(r.num," ").concat(r.gen," obj\\n")+"<< /Type /EmbeddedFile /Length ".concat(t.length,">>\\nstream\\n")+t+"\\nendstream\\nendobj\\n";a.push({ref:r,data:u})}({xfaData:T,xfaDatasetsRef:w,newRefs:s,xref:h});var I,E,j=new a.Dict(null),M=r.newRef,_=t.at(-1);10===_||13===_?(I=[],E=t.length):(I=["\\n"],E=t.length+1),j.set("Size",M.num+1),j.set("Prev",r.startXRef),j.set("Type",a.Name.get("XRef")),null!==r.rootRef&&j.set("Root",r.rootRef),null!==r.infoRef&&j.set("Info",r.infoRef),null!==r.encryptRef&&j.set("Encrypt",r.encryptRef),s.push({ref:M,data:""});var L,R=[[0,1,65535]],N=[0,1],D=0,B=l(s=s.sort((function(e,t){return e.ref.num-t.ref.num})));try{for(B.s();!(L=B.n()).done;){var U=L.value,$=U.ref,X=U.data;D=Math.max(D,E),R.push([1,E,Math.min($.gen,65535)]),E+=X.length,N.push($.num,1),I.push(X)}}catch(e){B.e(e)}finally{B.f()}if(j.set("Index",N),Array.isArray(r.fileIds)&&r.fileIds.length>0){var H=function(e,t){for(var r=Math.floor(Date.now()/1e3),a=t.filename||"",i=[r.toString(),a,e.toString()],o=i.reduce((function(e,t){return e+t.length}),0),s=0,u=Object.values(t.info);s=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){if(e){if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>")}function g(e,t,r){p(e.dict,t,r),t.push(" stream\\n");var n=e.getString();null!==r&&(n=r.encryptString(n)),t.push(n,"\\nendstream")}function v(e,t,r){e instanceof a.Name?t.push("/".concat((0,i.escapePDFName)(e.name))):e instanceof a.Ref?t.push("".concat(e.num," ").concat(e.gen," R")):Array.isArray(e)?function(e,t,r){t.push("[");var n,a=!0,i=l(e);try{for(i.s();!(n=i.n()).done;){var o=n.value;a?a=!1:t.push(" "),v(o,t,r)}}catch(e){i.e(e)}finally{i.f()}t.push("]")}(e,t,r):"string"==typeof e?(null!==r&&(e=r.encryptString(e)),t.push("(".concat((0,i.escapeString)(e),")"))):"number"==typeof e?t.push((0,i.numberToString)(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof a.Dict?p(e,t,r):e instanceof s.BaseStream?g(e,t,r):null===e?t.push("null"):(0,n.warn)("Unhandled value in writer: ".concat(u(e),", please file a bug."))}function y(e,t,r,n){for(var a=t+r-1;a>r-1;a--)n[a]=255&e,e>>=8;return r+t}function m(e,t,r){for(var n=0,a=e.length;n{Object.defineProperty(t,"__esModule",{value:!0}),t.XMLParserErrorCode=t.XMLParserBase=t.SimpleXMLParser=t.SimpleDOMNode=void 0;var n=r(135);function a(e,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},a(e,t)}function i(e){return i=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},i(e)}function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=c(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||c(e,t)||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 c(e,t){if(e){if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r";case"amp":return"&";case"quot":return'"';case"apos":return"'"}return t.onResolveEntity(r)}))}},{key:"_parseContent",value:function(e,t){var r=[],n=t;function a(){for(;n"!==e[n]&&"/"!==e[n];)++n;var i=e.substring(t,n);for(a();n"!==e[n]&&"/"!==e[n]&&"?"!==e[n];){a();for(var o,s="";n"!==e[r]&&"?"!==e[r]&&"/"!==e[r];)++r;var n=e.substring(t,r);!function(){for(;r"!==e[r+1]);)++r;return{name:n,value:e.substring(a,r),parsed:r-t}}},{key:"parseXml",value:function(e){for(var t=0;t",r))<0)return void this.onError(p.UnterminatedElement);this.onEndElement(e.substring(r,n)),r=n+1;break;case"?":++r;var a=this._parseProcessingInstruction(e,r);if("?>"!==e.substring(r+a.parsed,r+a.parsed+2))return void this.onError(p.UnterminatedXmlDeclaration);this.onPi(a.name,a.value),r+=a.parsed+2;break;case"!":if("--"===e.substring(r+1,r+3)){if((n=e.indexOf("--\\x3e",r+3))<0)return void this.onError(p.UnterminatedComment);this.onComment(e.substring(r+3,n)),r=n+3}else if("[CDATA["===e.substring(r+1,r+8)){if((n=e.indexOf("]]>",r+8))<0)return void this.onError(p.UnterminatedCdat);this.onCdata(e.substring(r+8,n)),r=n+3}else{if("DOCTYPE"!==e.substring(r+1,r+8))return void this.onError(p.MalformedElement);var i=e.indexOf("[",r+8),o=!1;if((n=e.indexOf(">",r+8))<0)return void this.onError(p.UnterminatedDoctypeDeclaration);if(i>0&&n>i){if((n=e.indexOf("]>",r+8))<0)return void this.onError(p.UnterminatedDoctypeDeclaration);o=!0}var s=e.substring(r+8,n+(o?1:0));this.onDoctype(s),r=n+(o?2:1)}break;default:var c=this._parseContent(e,r);if(null===c)return void this.onError(p.MalformedElement);var u=!1;if("/>"===e.substring(r+c.parsed,r+c.parsed+2))u=!0;else if(">"!==e.substring(r+c.parsed,r+c.parsed+1))return void this.onError(p.UnterminatedElement);this.onBeginElement(c.name,c.attributes,u),r+=c.parsed+(u?2:1)}}else{for(;r0}},{key:"searchNode",value:function(e,t){if(t>=e.length)return this;for(var r=e[t],n=[],a=this;;){if(r.name===a.nodeName){if(0!==r.pos){if(0===n.length)return null;var i,c=0,u=o(s(n.pop(),1)[0].childNodes);try{for(u.s();!(i=u.n()).done;){var l=i.value;if(r.name===l.nodeName){if(c===r.pos)return l.searchNode(e,t+1);c++}}}catch(e){u.e(e)}finally{u.f()}return a.searchNode(e,t+1)}var f=a.searchNode(e,t+1);if(null!==f)return f}if(a.childNodes&&0!==a.childNodes.length)n.push([a,0]),a=a.childNodes[0];else{if(0===n.length)return null;for(;0!==n.length;){var h=s(n.pop(),2),d=h[0],p=h[1]+1;if(p");var i,s=o(this.childNodes);try{for(s.s();!(i=s.n()).done;)i.value.dump(e)}catch(e){s.e(e)}finally{s.f()}e.push(""))}else this.nodeValue?e.push(">".concat((0,n.encodeToXmlString)(this.nodeValue),"")):e.push("/>")}else e.push((0,n.encodeToXmlString)(this.nodeValue))}}]),e}();t.SimpleDOMNode=y;var m=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&a(e,t)}(c,e);var t,r,n=(t=c,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=i(t);if(r){var a=i(this).constructor;e=Reflect.construct(n,arguments,a)}else e=n.apply(this,arguments);return function(e,t){if(t&&("object"===l(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function c(e){var t,r=e.hasAttributes,a=void 0!==r&&r,i=e.lowerCaseName,o=void 0!==i&&i;return f(this,c),(t=n.call(this))._currentFragment=null,t._stack=null,t._errorCode=p.NoError,t._hasAttributes=a,t._lowerCaseName=o,t}return d(c,[{key:"parseFromString",value:function(e){if(this._currentFragment=[],this._stack=[],this._errorCode=p.NoError,this.parseXml(e),this._errorCode===p.NoError){var t=s(this._currentFragment,1)[0];if(t)return{documentElement:t}}}},{key:"onText",value:function(e){if(!function(e){for(var t=0,r=e.length;t{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateSHA256=t.calculateMD5=t.PDF20=t.PDF17=t.CipherTransformFactory=t.ARCFourCipher=t.AES256Cipher=t.AES128Cipher=void 0,t.calculateSHA384=k,t.calculateSHA512=void 0;var n=r(2),a=r(134),i=r(197);function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}function s(e,t){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s(e,t)}function c(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=u(e);if(t){var a=u(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===l(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function u(e){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},u(e)}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){for(var r=0;r>5&255,l[n++]=r>>13&255,l[n++]=r>>21&255,l[n++]=r>>>29&255,l[n++]=0,l[n++]=0,l[n++]=0;var h=new Int32Array(16);for(n=0;n>>32-x)|0,d=k}i=i+d|0,o=o+p|0,s=s+y|0,c=c+m|0}return new Uint8Array([255&i,i>>8&255,i>>16&255,i>>>24&255,255&o,o>>8&255,o>>16&255,o>>>24&255,255&s,s>>8&255,s>>16&255,s>>>24&255,255&c,c>>8&255,c>>16&255,c>>>24&255])});t.calculateMD5=y;var m=function(){function e(t,r){f(this,e),this.high=0|t,this.low=0|r}return d(e,[{key:"and",value:function(e){this.high&=e.high,this.low&=e.low}},{key:"xor",value:function(e){this.high^=e.high,this.low^=e.low}},{key:"or",value:function(e){this.high|=e.high,this.low|=e.low}},{key:"shiftRight",value:function(e){e>=32?(this.low=this.high>>>e-32|0,this.high=0):(this.low=this.low>>>e|this.high<<32-e,this.high=this.high>>>e|0)}},{key:"shiftLeft",value:function(e){e>=32?(this.high=this.low<>>32-e,this.low<<=e)}},{key:"rotateRight",value:function(e){var t,r;32&e?(r=this.low,t=this.high):(t=this.low,r=this.high),e&=31,this.low=t>>>e|r<<32-e,this.high=r>>>e|t<<32-e}},{key:"not",value:function(){this.high=~this.high,this.low=~this.low}},{key:"add",value:function(e){var t=(this.low>>>0)+(e.low>>>0),r=(this.high>>>0)+(e.high>>>0);t>4294967295&&(r+=1),this.low=0|t,this.high=0|r}},{key:"copyTo",value:function(e,t){e[t]=this.high>>>24&255,e[t+1]=this.high>>16&255,e[t+2]=this.high>>8&255,e[t+3]=255&this.high,e[t+4]=this.low>>>24&255,e[t+5]=this.low>>16&255,e[t+6]=this.low>>8&255,e[t+7]=255&this.low}},{key:"assign",value:function(e){this.high=e.high,this.low=e.low}}]),e}(),b=function(){function e(e,t){return e>>>t|e<<32-t}function t(e,t,r){return e&t^~e&r}function r(e,t,r){return e&t^e&r^t&r}function n(t){return e(t,2)^e(t,13)^e(t,22)}function a(t){return e(t,6)^e(t,11)^e(t,25)}function i(t){return e(t,7)^e(t,18)^t>>>3}var o=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];return function(s,c,u){var l,f,h=1779033703,d=3144134277,p=1013904242,g=2773480762,v=1359893119,y=2600822924,m=528734635,b=1541459225,w=64*Math.ceil((u+9)/64),k=new Uint8Array(w);for(l=0;l>>29&255,k[l++]=u>>21&255,k[l++]=u>>13&255,k[l++]=u>>5&255,k[l++]=u<<3&255;var x,O=new Uint32Array(64);for(l=0;l>>10)+O[f-7]+i(O[f-15])+O[f-16];var A=h,C=d,F=p,P=g,T=v,I=y,E=m,j=b,M=void 0,_=void 0;for(f=0;f<64;++f)M=j+a(T)+t(T,I,E)+o[f]+O[f],_=n(A)+r(A,C,F),j=E,E=I,I=T,T=P+M|0,P=F,F=C,C=A,A=M+_|0;h=h+A|0,d=d+C|0,p=p+F|0,g=g+P|0,v=v+T|0,y=y+I|0,m=m+E|0,b=b+j|0}return new Uint8Array([h>>24&255,h>>16&255,h>>8&255,255&h,d>>24&255,d>>16&255,d>>8&255,255&d,p>>24&255,p>>16&255,p>>8&255,255&p,g>>24&255,g>>16&255,g>>8&255,255&g,v>>24&255,v>>16&255,v>>8&255,255&v,y>>24&255,y>>16&255,y>>8&255,255&y,m>>24&255,m>>16&255,m>>8&255,255&m,b>>24&255,b>>16&255,b>>8&255,255&b])}}();t.calculateSHA256=b;var w=function(){function e(e,t,r,n,a){e.assign(t),e.and(r),a.assign(t),a.not(),a.and(n),e.xor(a)}function t(e,t,r,n,a){e.assign(t),e.and(r),a.assign(t),a.and(n),e.xor(a),a.assign(r),a.and(n),e.xor(a)}function r(e,t,r){e.assign(t),e.rotateRight(28),r.assign(t),r.rotateRight(34),e.xor(r),r.assign(t),r.rotateRight(39),e.xor(r)}function n(e,t,r){e.assign(t),e.rotateRight(14),r.assign(t),r.rotateRight(18),e.xor(r),r.assign(t),r.rotateRight(41),e.xor(r)}function a(e,t,r){e.assign(t),e.rotateRight(1),r.assign(t),r.rotateRight(8),e.xor(r),r.assign(t),r.shiftRight(7),e.xor(r)}function i(e,t,r){e.assign(t),e.rotateRight(19),r.assign(t),r.rotateRight(61),e.xor(r),r.assign(t),r.shiftRight(6),e.xor(r)}var o=[new m(1116352408,3609767458),new m(1899447441,602891725),new m(3049323471,3964484399),new m(3921009573,2173295548),new m(961987163,4081628472),new m(1508970993,3053834265),new m(2453635748,2937671579),new m(2870763221,3664609560),new m(3624381080,2734883394),new m(310598401,1164996542),new m(607225278,1323610764),new m(1426881987,3590304994),new m(1925078388,4068182383),new m(2162078206,991336113),new m(2614888103,633803317),new m(3248222580,3479774868),new m(3835390401,2666613458),new m(4022224774,944711139),new m(264347078,2341262773),new m(604807628,2007800933),new m(770255983,1495990901),new m(1249150122,1856431235),new m(1555081692,3175218132),new m(1996064986,2198950837),new m(2554220882,3999719339),new m(2821834349,766784016),new m(2952996808,2566594879),new m(3210313671,3203337956),new m(3336571891,1034457026),new m(3584528711,2466948901),new m(113926993,3758326383),new m(338241895,168717936),new m(666307205,1188179964),new m(773529912,1546045734),new m(1294757372,1522805485),new m(1396182291,2643833823),new m(1695183700,2343527390),new m(1986661051,1014477480),new m(2177026350,1206759142),new m(2456956037,344077627),new m(2730485921,1290863460),new m(2820302411,3158454273),new m(3259730800,3505952657),new m(3345764771,106217008),new m(3516065817,3606008344),new m(3600352804,1432725776),new m(4094571909,1467031594),new m(275423344,851169720),new m(430227734,3100823752),new m(506948616,1363258195),new m(659060556,3750685593),new m(883997877,3785050280),new m(958139571,3318307427),new m(1322822218,3812723403),new m(1537002063,2003034995),new m(1747873779,3602036899),new m(1955562222,1575990012),new m(2024104815,1125592928),new m(2227730452,2716904306),new m(2361852424,442776044),new m(2428436474,593698344),new m(2756734187,3733110249),new m(3204031479,2999351573),new m(3329325298,3815920427),new m(3391569614,3928383900),new m(3515267271,566280711),new m(3940187606,3454069534),new m(4118630271,4000239992),new m(116418474,1914138554),new m(174292421,2731055270),new m(289380356,3203993006),new m(460393269,320620315),new m(685471733,587496836),new m(852142971,1086792851),new m(1017036298,365543100),new m(1126000580,2618297676),new m(1288033470,3409855158),new m(1501505948,4234509866),new m(1607167915,987167468),new m(1816402316,1246189591)];return function(s,c,u){var l,f,h,d,p,g,v,y,b=arguments.length>3&&void 0!==arguments[3]&&arguments[3];b?(l=new m(3418070365,3238371032),f=new m(1654270250,914150663),h=new m(2438529370,812702999),d=new m(355462360,4144912697),p=new m(1731405415,4290775857),g=new m(2394180231,1750603025),v=new m(3675008525,1694076839),y=new m(1203062813,3204075428)):(l=new m(1779033703,4089235720),f=new m(3144134277,2227873595),h=new m(1013904242,4271175723),d=new m(2773480762,1595750129),p=new m(1359893119,2917565137),g=new m(2600822924,725511199),v=new m(528734635,4215389547),y=new m(1541459225,327033209));var w,k,S=128*Math.ceil((u+17)/128),x=new Uint8Array(S);for(w=0;w>>29&255,x[w++]=u>>21&255,x[w++]=u>>13&255,x[w++]=u>>5&255,x[w++]=u<<3&255;var A=new Array(80);for(w=0;w<80;w++)A[w]=new m(0,0);var C,F,P=new m(0,0),T=new m(0,0),I=new m(0,0),E=new m(0,0),j=new m(0,0),M=new m(0,0),_=new m(0,0),L=new m(0,0),R=new m(0,0),N=new m(0,0),D=new m(0,0),B=new m(0,0);for(w=0;w=1;--c){r=i[13],i[13]=i[9],i[9]=i[5],i[5]=i[1],i[1]=r,r=i[14],n=i[10],i[14]=i[6],i[10]=i[2],i[6]=r,i[2]=n,r=i[15],n=i[11],a=i[7],i[15]=i[3],i[11]=r,i[7]=n,i[3]=a;for(var u=0;u<16;++u)i[u]=this._inv_s[i[u]];for(var l=0,f=16*c;l<16;++l,++f)i[l]^=t[f];for(var h=0;h<16;h+=4){var d=this._mix[i[h]],p=this._mix[i[h+1]],g=this._mix[i[h+2]],v=this._mix[i[h+3]];r=d^p>>>8^p<<24^g>>>16^g<<16^v>>>24^v<<8,i[h]=r>>>24&255,i[h+1]=r>>16&255,i[h+2]=r>>8&255,i[h+3]=255&r}}r=i[13],i[13]=i[9],i[9]=i[5],i[5]=i[1],i[1]=r,r=i[14],n=i[10],i[14]=i[6],i[10]=i[2],i[6]=r,i[2]=n,r=i[15],n=i[11],a=i[7],i[15]=i[3],i[11]=r,i[7]=n,i[3]=a;for(var y=0;y<16;++y)i[y]=this._inv_s[i[y]],i[y]^=t[y];return i}},{key:"_encrypt",value:function(e,t){var r,n,a,i=this._s,o=new Uint8Array(16);o.set(e);for(var s=0;s<16;++s)o[s]^=t[s];for(var c=1;c=p;--d)if(f[d]!==h){h=0;break}l-=h,i[i.length-1]=f.subarray(0,16-h)}}for(var g=new Uint8Array(l),v=0,y=0,m=i.length;v2&&void 0!==arguments[2]?arguments[2]:null,n=e.length,a=this.buffer,i=this.bufferPosition;if(r)this.iv=r;else{for(var o=0;i<16&&o=256&&(s=255&(27^s)));for(var l=0;l<4;++l)r[c]=n^=r[c-32],r[++c]=a^=r[c-32],r[++c]=i^=r[c-32],r[++c]=o^=r[c-32],c++}return r}}]),r}(x);t.AES256Cipher=A;var C=function(){function e(){f(this,e)}return d(e,[{key:"checkOwnerPassword",value:function(e,t,r,a){var i=new Uint8Array(e.length+56);i.set(e,0),i.set(t,e.length),i.set(r,e.length+t.length);var o=b(i,0,i.length);return(0,n.isArrayEqual)(o,a)}},{key:"checkUserPassword",value:function(e,t,r){var a=new Uint8Array(e.length+8);a.set(e,0),a.set(t,e.length);var i=b(a,0,a.length);return(0,n.isArrayEqual)(i,r)}},{key:"getOwnerKey",value:function(e,t,r,n){var a=new Uint8Array(e.length+56);a.set(e,0),a.set(t,e.length),a.set(r,e.length+t.length);var i=b(a,0,a.length);return new A(i).decryptBlock(n,!1,new Uint8Array(16))}},{key:"getUserKey",value:function(e,t,r){var n=new Uint8Array(e.length+8);n.set(e,0),n.set(t,e.length);var a=b(n,0,n.length);return new A(a).decryptBlock(r,!1,new Uint8Array(16))}}]),e}();t.PDF17=C;var F=function(){function e(e,t,r){for(var n=b(t,0,t.length).subarray(0,32),a=[0],i=0;i<64||a.at(-1)>i-32;){var o=e.length+n.length+r.length,s=new Uint8Array(o),c=0;s.set(e,c),c+=e.length,s.set(n,c),c+=n.length,s.set(r,c);for(var u=new Uint8Array(64*o),l=0,f=0;l<64;l++,f+=o)u.set(s,f);var h=(a=new O(n.subarray(0,16)).encrypt(u,n.subarray(16,32))).slice(0,16).reduce((function(e,t){return e+t}),0)%3;0===h?n=b(a,0,a.length):1===h?n=k(a,0,a.length):2===h&&(n=w(a,0,a.length)),i++}return n.subarray(0,32)}return function(){function t(){f(this,t)}return d(t,[{key:"hash",value:function(t,r,n){return e(t,r,n)}},{key:"checkOwnerPassword",value:function(t,r,a,i){var o=new Uint8Array(t.length+56);o.set(t,0),o.set(r,t.length),o.set(a,t.length+r.length);var s=e(t,o,a);return(0,n.isArrayEqual)(s,i)}},{key:"checkUserPassword",value:function(t,r,a){var i=new Uint8Array(t.length+8);i.set(t,0),i.set(r,t.length);var o=e(t,i,[]);return(0,n.isArrayEqual)(o,a)}},{key:"getOwnerKey",value:function(t,r,n,a){var i=new Uint8Array(t.length+56);i.set(t,0),i.set(r,t.length),i.set(n,t.length+r.length);var o=e(t,i,n);return new A(o).decryptBlock(a,!1,new Uint8Array(16))}},{key:"getUserKey",value:function(t,r,n){var a=new Uint8Array(t.length+8);a.set(t,0),a.set(r,t.length);var i=e(t,a,[]);return new A(i).decryptBlock(n,!1,new Uint8Array(16))}}]),t}()}();t.PDF20=F;var P=function(){function e(t,r){f(this,e),this.StringCipherConstructor=t,this.StreamCipherConstructor=r}return d(e,[{key:"createStream",value:function(e,t){var r=new this.StreamCipherConstructor;return new i.DecryptStream(e,t,(function(e,t){return r.decryptBlock(e,t)}))}},{key:"decryptString",value:function(e){var t=new this.StringCipherConstructor,r=(0,n.stringToBytes)(e);return r=t.decryptBlock(r,!0),(0,n.bytesToString)(r)}},{key:"encryptString",value:function(e){var t=new this.StringCipherConstructor;if(t instanceof x){var r=16-e.length%16;e+=String.fromCharCode(r).repeat(r);var a=new Uint8Array(16);if("undefined"!=typeof crypto)crypto.getRandomValues(a);else for(var i=0;i<16;i++)a[i]=Math.floor(256*Math.random());var o=(0,n.stringToBytes)(e);o=t.encrypt(o,a);var s=new Uint8Array(16+o.length);return s.set(a),s.set(o,16),(0,n.bytesToString)(s)}var c=(0,n.stringToBytes)(e);return c=t.encrypt(c),(0,n.bytesToString)(c)}}]),e}(),T=function(){var e=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);function t(t,r,n,a,i,o,s,c){var u,l,f=40+n.length+t.length,h=new Uint8Array(f),d=0;if(r)for(l=Math.min(32,r.length);d>8&255,h[d++]=i>>16&255,h[d++]=i>>>24&255,u=0,l=t.length;u=4&&!c&&(h[d++]=255,h[d++]=255,h[d++]=255,h[d++]=255);var g=y(h,0,d),v=s>>3;if(o>=3)for(u=0;u<50;++u)g=y(g,0,v);var m,b=g.subarray(0,v);if(o>=3){for(d=0;d<32;++d)h[d]=e[d];for(u=0,l=t.length;u3&&void 0!==arguments[3]&&arguments[3],i=new Uint8Array(r.length+9),o=r.length;for(n=0;n>8&255,i[n++]=e>>16&255,i[n++]=255&t,i[n++]=t>>8&255,a&&(i[n++]=115,i[n++]=65,i[n++]=108,i[n++]=84),y(i,0,n).subarray(0,Math.min(r.length+5,16))}function o(e,t,r,o,s){if(!(t instanceof a.Name))throw new n.FormatError("Invalid crypt filter name.");var c,u=e.get(t.name);if(null!=u&&(c=u.get("CFM")),!c||"None"===c.name)return function(){return new S};if("V2"===c.name)return function(){return new p(i(r,o,s,!1))};if("AESV2"===c.name)return function(){return new O(i(r,o,s,!0))};if("AESV3"===c.name)return function(){return new A(s)};throw new n.FormatError("Unknown crypto method")}var s=function(){function s(i,o,c){f(this,s);var u=i.get("Filter");if(!(0,a.isName)(u,"Standard"))throw new n.FormatError("unknown encryption method");this.filterName=u.name,this.dict=i;var l=i.get("V");if(!Number.isInteger(l)||1!==l&&2!==l&&4!==l&&5!==l)throw new n.FormatError("unsupported encryption algorithm");this.algorithm=l;var h=i.get("Length");if(!h)if(l<=3)h=40;else{var d=i.get("CF"),g=i.get("StmF");if(d instanceof a.Dict&&g instanceof a.Name){d.suppressEncryption=!0;var v=d.get(g.name);(h=v&&v.get("Length")||128)<40&&(h<<=3)}}if(!Number.isInteger(h)||h<40||h%8!=0)throw new n.FormatError("invalid key length");var m=(0,n.stringToBytes)(i.get("O")).subarray(0,32),b=(0,n.stringToBytes)(i.get("U")).subarray(0,32),w=i.get("P"),k=i.get("R"),S=(4===l||5===l)&&!1!==i.get("EncryptMetadata");this.encryptMetadata=S;var x,O,A=(0,n.stringToBytes)(o);if(c){if(6===k)try{c=(0,n.utf8StringToString)(c)}catch(e){(0,n.warn)("CipherTransformFactory: Unable to convert UTF8 encoded password.")}x=(0,n.stringToBytes)(c)}if(5!==l)O=t(A,x,m,b,w,k,h,S);else{var P=(0,n.stringToBytes)(i.get("O")).subarray(32,40),T=(0,n.stringToBytes)(i.get("O")).subarray(40,48),I=(0,n.stringToBytes)(i.get("U")).subarray(0,48),E=(0,n.stringToBytes)(i.get("U")).subarray(32,40),j=(0,n.stringToBytes)(i.get("U")).subarray(40,48),M=(0,n.stringToBytes)(i.get("OE")),_=(0,n.stringToBytes)(i.get("UE"));(0,n.stringToBytes)(i.get("Perms")),O=function(e,t,r,n,a,i,o,s,c,u,l,f){if(t){var h=Math.min(127,t.length);t=t.subarray(0,h)}else t=[];var d;return(d=6===e?new F:new C).checkUserPassword(t,s,o)?d.getUserKey(t,c,l):t.length&&d.checkOwnerPassword(t,n,i,r)?d.getOwnerKey(t,a,i,u):null}(k,x,m,P,T,I,b,E,j,M,_)}if(!O&&!c)throw new n.PasswordException("No password given",n.PasswordResponses.NEED_PASSWORD);if(!O&&c){var L=function(t,r,n,a){for(var i=new Uint8Array(32),o=0,s=Math.min(32,t.length);o>3;if(n>=3)for(c=0;c<50;++c)l=y(l,0,l.length);if(n>=3){u=r;var h=new Uint8Array(f);for(c=19;c>=0;c--){for(var d=0;d=4){var R=i.get("CF");R instanceof a.Dict&&(R.suppressEncryption=!0),this.cf=R,this.stmf=i.get("StmF")||r,this.strf=i.get("StrF")||r,this.eff=i.get("EFF")||this.stmf}}return d(s,[{key:"createCipherTransform",value:function(e,t){if(4===this.algorithm||5===this.algorithm)return new P(o(this.cf,this.strf,e,t,this.encryptionKey),o(this.cf,this.stmf,e,t,this.encryptionKey));var r=i(e,t,this.encryptionKey,!1),n=function(){return new p(r)};return new P(n,n)}}]),s}();return s}();t.CipherTransformFactory=T},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){for(var r=0;r0;e=(0,this.decrypt)(e,!t);var r=this.bufferLength,n=r+e.length;this.ensureBuffer(n).set(e,r),this.bufferLength=n}else this.eof=!0}}])&&a(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),l}(r(148).DecodeStream);t.DecryptStream=s},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Catalog=void 0;var n=r(135),a=r(2),i=r(134),o=r(199),s=r(136),c=r(200),u=r(143),l=r(201),f=r(188),h=r(202),d=r(203);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function g(){g=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=h.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==p(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function v(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function y(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){v(i,n,a,o,s,"next",e)}function s(e){v(i,n,a,o,s,"throw",e)}o(void 0)}))}}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||w(e,t)||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 b(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=w(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function w(e,t){if(e){if("string"==typeof e)return k(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?k(e,t):void 0}}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&(e=t)}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)("Cannot fetch Collection entry; assuming no collection is present.")}return(0,a.shadow)(this,"collection",e)}},{key:"acroForm",get:function(){var e=null;try{var t=this._catDict.get("AcroForm");t instanceof i.Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)("Cannot fetch AcroForm entry; assuming no forms are present.")}return(0,a.shadow)(this,"acroForm",e)}},{key:"acroFormRef",get:function(){var e=this._catDict.getRaw("AcroForm");return(0,a.shadow)(this,"acroFormRef",e instanceof i.Ref?e:null)}},{key:"metadata",get:function(){var e=this._catDict.getRaw("Metadata");if(!(e instanceof i.Ref))return(0,a.shadow)(this,"metadata",null);var t=null;try{var r=!(this.xref.encrypt&&this.xref.encrypt.encryptMetadata),o=this.xref.fetch(e,r);if(o instanceof s.BaseStream&&o.dict instanceof i.Dict){var c=o.dict.get("Type"),u=o.dict.get("Subtype");if((0,i.isName)(c,"Metadata")&&(0,i.isName)(u,"XML")){var l=(0,a.stringToUTF8String)(o.getString());l&&(t=new h.MetadataParser(l).serializable)}}}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)('Skipping invalid Metadata: "'.concat(e,'".'))}return(0,a.shadow)(this,"metadata",t)}},{key:"markInfo",get:function(){var e=null;try{e=this._readMarkInfo()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read mark info.")}return(0,a.shadow)(this,"markInfo",e)}},{key:"_readMarkInfo",value:function(){var e=this._catDict.get("MarkInfo");if(!(e instanceof i.Dict))return null;var t={Marked:!1,UserProperties:!1,Suspects:!1};for(var r in t){var n=e.get(r);"boolean"==typeof n&&(t[r]=n)}return t}},{key:"structTreeRoot",get:function(){var e=null;try{e=this._readStructTreeRoot()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable read to structTreeRoot info.")}return(0,a.shadow)(this,"structTreeRoot",e)}},{key:"_readStructTreeRoot",value:function(){var e=this._catDict.get("StructTreeRoot");if(!(e instanceof i.Dict))return null;var t=new d.StructTreeRoot(e);return t.init(),t}},{key:"toplevelPagesDict",get:function(){var e=this._catDict.get("Pages");if(!(e instanceof i.Dict))throw new a.FormatError("Invalid top-level pages dictionary.");return(0,a.shadow)(this,"toplevelPagesDict",e)}},{key:"documentOutline",get:function(){var e=null;try{e=this._readDocumentOutline()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read document outline.")}return(0,a.shadow)(this,"documentOutline",e)}},{key:"_readDocumentOutline",value:function(){var t=this._catDict.get("Outlines");if(!(t instanceof i.Dict))return null;if(!((t=t.getRaw("First"))instanceof i.Ref))return null;var r={items:[]},n=[{obj:t,parent:r}],o=new i.RefSet;o.put(t);for(var s=this.xref,c=new Uint8ClampedArray(3);n.length>0;){var l=n.shift(),f=s.fetchIfRef(l.obj);if(null!==f){if(!f.has("Title"))throw new a.FormatError("Invalid outline item encountered.");var h={url:null,dest:null,action:null};e.parseDestDictionary({destDict:f,resultObj:h,docBaseUrl:this.pdfManager.docBaseUrl,docAttachments:this.attachments});var d=f.get("Title"),p=f.get("F")||0,g=f.getArray("C"),v=f.get("Count"),y=c;!Array.isArray(g)||3!==g.length||0===g[0]&&0===g[1]&&0===g[2]||(y=u.ColorSpace.singletons.rgb.getRgb(g,0));var m={action:h.action,attachment:h.attachment,dest:h.dest,url:h.url,unsafeUrl:h.unsafeUrl,newWindow:h.newWindow,setOCGState:h.setOCGState,title:(0,a.stringToPDFString)(d),color:y,count:Number.isInteger(v)?v:void 0,bold:!!(2&p),italic:!!(1&p),items:[]};l.parent.items.push(m),(t=f.getRaw("First"))instanceof i.Ref&&!o.has(t)&&(n.push({obj:t,parent:m}),o.put(t)),(t=f.getRaw("Next"))instanceof i.Ref&&!o.has(t)&&(n.push({obj:t,parent:l.parent}),o.put(t))}}return r.items.length>0?r.items:null}},{key:"permissions",get:function(){var e=null;try{e=this._readPermissions()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read permissions.")}return(0,a.shadow)(this,"permissions",e)}},{key:"_readPermissions",value:function(){var e=this.xref.trailer.get("Encrypt");if(!(e instanceof i.Dict))return null;var t=e.get("P");if("number"!=typeof t)return null;t+=Math.pow(2,32);var r=[];for(var n in a.PermissionFlag){var o=a.PermissionFlag[n];t&o&&r.push(o)}return r}},{key:"optionalContentConfig",get:function(){var e=null;try{var t=this._catDict.get("OCProperties");if(!t)return(0,a.shadow)(this,"optionalContentConfig",null);var r=t.get("D");if(!r)return(0,a.shadow)(this,"optionalContentConfig",null);var o=t.get("OCGs");if(!Array.isArray(o))return(0,a.shadow)(this,"optionalContentConfig",null);var s,c=[],u=[],l=b(o);try{for(l.s();!(s=l.n()).done;){var f=s.value;if(f instanceof i.Ref){u.push(f);var h=this.xref.fetchIfRef(f);c.push({id:f.toString(),name:"string"==typeof h.get("Name")?(0,a.stringToPDFString)(h.get("Name")):null,intent:"string"==typeof h.get("Intent")?(0,a.stringToPDFString)(h.get("Intent")):null})}}}catch(e){l.e(e)}finally{l.f()}(e=this._readOptionalContentConfig(r,u)).groups=c}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read optional content config: ".concat(e))}return(0,a.shadow)(this,"optionalContentConfig",e)}},{key:"_readOptionalContentConfig",value:function(e,t){function r(e){var r=[];if(Array.isArray(e)){var n,a=b(e);try{for(a.s();!(n=a.n()).done;){var o=n.value;o instanceof i.Ref&&t.includes(o)&&r.push(o.toString())}}catch(e){a.e(e)}finally{a.f()}}return r}function n(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!Array.isArray(e))return null;var n,a=[],s=b(e);try{for(s.s();!(n=s.n()).done;){var u=n.value;if(u instanceof i.Ref&&t.includes(u))c.put(u),a.push(u.toString());else{var l=o(u,r);l&&a.push(l)}}}catch(e){s.e(e)}finally{s.f()}if(r>0)return a;var f,h=[],d=b(t);try{for(d.s();!(f=d.n()).done;){var p=f.value;c.has(p)||h.push(p.toString())}}catch(e){d.e(e)}finally{d.f()}return h.length&&a.push({name:null,order:h}),a}function o(e,t){if(++t>u)return(0,a.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."),null;var r=s.fetchIfRef(e);if(!Array.isArray(r))return null;var i=s.fetchIfRef(r[0]);if("string"!=typeof i)return null;var o=n(r.slice(1),t);return o&&o.length?{name:(0,a.stringToPDFString)(i),order:o}:null}var s=this.xref,c=new i.RefSet,u=10;return{name:"string"==typeof e.get("Name")?(0,a.stringToPDFString)(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?(0,a.stringToPDFString)(e.get("Creator")):null,baseState:e.get("BaseState")instanceof i.Name?e.get("BaseState").name:null,on:r(e.get("ON")),off:r(e.get("OFF")),order:n(e.get("Order")),groups:null}}},{key:"setActualNumPages",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this._actualNumPages=e}},{key:"hasActualNumPages",get:function(){return null!==this._actualNumPages}},{key:"_pagesCount",get:function(){var e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new a.FormatError("Page count in top-level pages dictionary is not an integer.");return(0,a.shadow)(this,"_pagesCount",e)}},{key:"numPages",get:function(){return this.hasActualNumPages?this._actualNumPages:this._pagesCount}},{key:"destinations",get:function(){var e=this._readDests(),t=Object.create(null);if(e instanceof o.NameTree){var r,n=b(e.getAll());try{for(n.s();!(r=n.n()).done;){var s=m(r.value,2),c=s[0],u=x(s[1]);u&&(t[(0,a.stringToPDFString)(c)]=u)}}catch(e){n.e(e)}finally{n.f()}}else e instanceof i.Dict&&e.forEach((function(e,r){var n=x(r);n&&(t[e]=n)}));return(0,a.shadow)(this,"destinations",t)}},{key:"getDestination",value:function(e){var t=this._readDests();if(t instanceof o.NameTree){var r=x(t.get(e));if(r)return r;var n=this.destinations[e];if(n)return(0,a.warn)('Found "'.concat(e,'" at an incorrect position in the NameTree.')),n}else if(t instanceof i.Dict){var s=x(t.get(e));if(s)return s}return null}},{key:"_readDests",value:function(){var e=this._catDict.get("Names");return e&&e.has("Dests")?new o.NameTree(e.getRaw("Dests"),this.xref):this._catDict.has("Dests")?this._catDict.get("Dests"):void 0}},{key:"pageLabels",get:function(){var e=null;try{e=this._readPageLabels()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read page labels.")}return(0,a.shadow)(this,"pageLabels",e)}},{key:"_readPageLabels",value:function(){var e=this._catDict.getRaw("PageLabels");if(!e)return null;for(var t=new Array(this.numPages),r=null,s="",c=new o.NumberTree(e,this.xref).getAll(),u="",l=1,f=0,h=this.numPages;f=1))throw new a.FormatError("Invalid start in PageLabel dictionary.");l=v}else l=1}switch(r){case"D":u=l;break;case"R":case"r":u=(0,n.toRomanNumerals)(l,"r"===r);break;case"A":case"a":var y="a"===r?97:65,m=l-1;u=String.fromCharCode(y+m%26).repeat(Math.floor(m/26)+1);break;default:if(r)throw new a.FormatError('Invalid style "'.concat(r,'" in PageLabel dictionary.'));u=""}t[f]=s+u,l++}return t}},{key:"pageLayout",get:function(){var e=this._catDict.get("PageLayout"),t="";if(e instanceof i.Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return(0,a.shadow)(this,"pageLayout",t)}},{key:"pageMode",get:function(){var e=this._catDict.get("PageMode"),t="UseNone";if(e instanceof i.Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return(0,a.shadow)(this,"pageMode",t)}},{key:"viewerPreferences",get:function(){var e=this,t=this._catDict.get("ViewerPreferences");if(!(t instanceof i.Dict))return(0,a.shadow)(this,"viewerPreferences",null);var r,n=null,o=b(t.getKeys());try{for(o.s();!(r=o.n()).done;){var s=r.value,c=t.get(s),u=void 0;switch(s){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof c&&(u=c);break;case"NonFullScreenPageMode":if(c instanceof i.Name)switch(c.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":u=c.name;break;default:u="UseNone"}break;case"Direction":if(c instanceof i.Name)switch(c.name){case"L2R":case"R2L":u=c.name;break;default:u="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(c instanceof i.Name)switch(c.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":u=c.name;break;default:u="CropBox"}break;case"PrintScaling":if(c instanceof i.Name)switch(c.name){case"None":case"AppDefault":u=c.name;break;default:u="AppDefault"}break;case"Duplex":if(c instanceof i.Name)switch(c.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":u=c.name;break;default:u="None"}break;case"PrintPageRange":Array.isArray(c)&&c.length%2==0&&c.every((function(t,r,n){return Number.isInteger(t)&&t>0&&(0===r||t>=n[r-1])&&t<=e.numPages}))&&(u=c);break;case"NumCopies":Number.isInteger(c)&&c>0&&(u=c);break;default:(0,a.warn)("Ignoring non-standard key in ViewerPreferences: ".concat(s,"."));continue}void 0!==u?(n||(n=Object.create(null)),n[s]=u):(0,a.warn)('Bad value, for key "'.concat(s,'", in ViewerPreferences: ').concat(c,"."))}}catch(e){o.e(e)}finally{o.f()}return(0,a.shadow)(this,"viewerPreferences",n)}},{key:"openAction",get:function(){var t=this._catDict.get("OpenAction"),r=Object.create(null);if(t instanceof i.Dict){var n=new i.Dict(this.xref);n.set("A",t);var o={url:null,dest:null,action:null};e.parseDestDictionary({destDict:n,resultObj:o}),Array.isArray(o.dest)?r.dest=o.dest:o.action&&(r.action=o.action)}else Array.isArray(t)&&(r.dest=t);return(0,a.shadow)(this,"openAction",(0,a.objectSize)(r)>0?r:null)}},{key:"attachments",get:function(){var e=this._catDict.get("Names"),t=null;if(e instanceof i.Dict&&e.has("EmbeddedFiles")){var r,n=b(new o.NameTree(e.getRaw("EmbeddedFiles"),this.xref).getAll());try{for(n.s();!(r=n.n()).done;){var s=m(r.value,2),c=s[0],u=s[1],f=new l.FileSpec(u,this.xref);t||(t=Object.create(null)),t[(0,a.stringToPDFString)(c)]=f.serializable}}catch(e){n.e(e)}finally{n.f()}}return(0,a.shadow)(this,"attachments",t)}},{key:"xfaImages",get:function(){var e=this._catDict.get("Names"),t=null;if(e instanceof i.Dict&&e.has("XFAImages")){var r,n=b(new o.NameTree(e.getRaw("XFAImages"),this.xref).getAll());try{for(n.s();!(r=n.n()).done;){var s=m(r.value,2),c=s[0],u=s[1];t||(t=new i.Dict(this.xref)),t.set((0,a.stringToPDFString)(c),u)}}catch(e){n.e(e)}finally{n.f()}}return(0,a.shadow)(this,"xfaImages",t)}},{key:"_collectJavaScript",value:function(){var e=this._catDict.get("Names"),t=null;function r(e,r){if(r instanceof i.Dict&&(0,i.isName)(r.get("S"),"JavaScript")){var n=r.get("JS");if(n instanceof s.BaseStream)n=n.getString();else if("string"!=typeof n)return;null===t&&(t=new Map),n=(0,a.stringToPDFString)(n).replace(/\\u0000/g,""),t.set(e,n)}}if(e instanceof i.Dict&&e.has("JavaScript")){var n,c=b(new o.NameTree(e.getRaw("JavaScript"),this.xref).getAll());try{for(c.s();!(n=c.n()).done;){var u=m(n.value,2),l=u[0],f=u[1];r((0,a.stringToPDFString)(l),f)}}catch(e){c.e(e)}finally{c.f()}}var h=this._catDict.get("OpenAction");return h&&r("OpenAction",h),t}},{key:"javaScript",get:function(){var e,t=this._collectJavaScript();return(0,a.shadow)(this,"javaScript",t?function(e){if(Array.isArray(e))return k(e)}(e=t.values())||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||w(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}():null)}},{key:"jsActions",get:function(){var e=this._collectJavaScript(),t=(0,n.collectActions)(this.xref,this._catDict,a.DocumentActionEventType);if(e){t||(t=Object.create(null));var r,i=b(e);try{for(i.s();!(r=i.n()).done;){var o=m(r.value,2),s=o[0],c=o[1];s in t?t[s].push(c):t[s]=[c]}}catch(e){i.e(e)}finally{i.f()}}return(0,a.shadow)(this,"jsActions",t)}},{key:"fontFallback",value:(F=y(g().mark((function e(t,r){var n,a,i,o;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all(this.fontCache);case 2:n=e.sent,a=b(n),e.prev=4,a.s();case 6:if((i=a.n()).done){e.next=13;break}if((o=i.value).loadedName!==t){e.next=11;break}return o.fallback(r),e.abrupt("return");case 11:e.next=6;break;case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(4),a.e(e.t0);case 18:return e.prev=18,a.f(),e.finish(18);case 21:case"end":return e.stop()}}),e,this,[[4,15,18,21]])}))),function(e,t){return F.apply(this,arguments)})},{key:"cleanup",value:(C=y(g().mark((function e(){var t,r,n,a,i=arguments;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=i.length>0&&void 0!==i[0]&&i[0],(0,c.clearGlobalCaches)(),this.globalImageCache.clear(t),this.pageKidsCountCache.clear(),this.pageIndexCache.clear(),this.nonBlendModesSet.clear(),e.next=8,Promise.all(this.fontCache);case 8:r=e.sent,n=b(r);try{for(n.s();!(a=n.n()).done;)delete a.value.dict.cacheKey}catch(e){n.e(e)}finally{n.f()}this.fontCache.clear(),this.builtInCMapCache.clear(),this.standardFontDataCache.clear();case 14:case"end":return e.stop()}}),e,this)}))),function(){return C.apply(this,arguments)})},{key:"getPageDict",value:(A=y(g().mark((function e(t){var r,n,o,s,c,u,l,f,h,d,p,v,y,m,b,w;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=[this.toplevelPagesDict],n=new i.RefSet,(o=this._catDict.getRaw("Pages"))instanceof i.Ref&&n.put(o),s=this.xref,c=this.pageKidsCountCache,u=this.pageIndexCache,l=0;case 6:if(!r.length){e.next=67;break}if(!((f=r.pop())instanceof i.Ref)){e.next=34;break}if(!((h=c.get(f))>=0&&l+h<=t)){e.next=13;break}return l+=h,e.abrupt("continue",6);case 13:if(!n.has(f)){e.next=15;break}throw new a.FormatError("Pages tree contains circular reference.");case 15:return n.put(f),e.next=18,s.fetchAsync(f);case 18:if(!((d=e.sent)instanceof i.Dict)){e.next=32;break}if(!((p=d.getRaw("Type"))instanceof i.Ref)){e.next=25;break}return e.next=24,s.fetchAsync(p);case 24:p=e.sent;case 25:if(!(0,i.isName)(p,"Page")&&d.has("Kids")){e.next=32;break}if(c.has(f)||c.put(f,1),u.has(f)||u.put(f,l),l!==t){e.next=30;break}return e.abrupt("return",[d,f]);case 30:return l++,e.abrupt("continue",6);case 32:return r.push(d),e.abrupt("continue",6);case 34:if(f instanceof i.Dict){e.next=36;break}throw new a.FormatError("Page dictionary kid reference points to wrong type of object.");case 36:if(v=f.objId,!((y=f.getRaw("Count"))instanceof i.Ref)){e.next=42;break}return e.next=41,s.fetchAsync(y);case 41:y=e.sent;case 42:if(!(Number.isInteger(y)&&y>=0)){e.next=47;break}if(v&&!c.has(v)&&c.put(v,y),!(l+y<=t)){e.next=47;break}return l+=y,e.abrupt("continue",6);case 47:if(!((m=f.getRaw("Kids"))instanceof i.Ref)){e.next=52;break}return e.next=51,s.fetchAsync(m);case 51:m=e.sent;case 52:if(Array.isArray(m)){e.next=64;break}if(!((b=f.getRaw("Type"))instanceof i.Ref)){e.next=58;break}return e.next=57,s.fetchAsync(b);case 57:b=e.sent;case 58:if(!(0,i.isName)(b,"Page")&&f.has("Kids")){e.next=63;break}if(l!==t){e.next=61;break}return e.abrupt("return",[f,null]);case 61:return l++,e.abrupt("continue",6);case 63:throw new a.FormatError("Page dictionary kids object is not an array.");case 64:for(w=m.length-1;w>=0;w--)r.push(m[w]);e.next=6;break;case 67:throw new Error("Page index ".concat(t," not found."));case 68:case"end":return e.stop()}}),e,this)}))),function(e){return A.apply(this,arguments)})},{key:"getAllPageDicts",value:(O=y(g().mark((function e(){var t,r,o,s,c,u,l,f,h,d,p,v,y,m,b,w,k,S,x=arguments;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:p=function(e){if(e instanceof n.XRefEntryException&&!t)throw e;t&&r&&0===h&&((0,a.warn)('getAllPageDicts - Skipping invalid first page: "'.concat(e,'".')),e=i.Dict.empty),u.set(h++,[e,null])},d=function(e,t){t&&!f.has(t)&&f.put(t,h),u.set(h++,[e,t])},t=x.length>0&&void 0!==x[0]&&x[0],r=this.pdfManager.evaluatorOptions.ignoreErrors,o=[{currentNode:this.toplevelPagesDict,posInKids:0}],s=new i.RefSet,(c=this._catDict.getRaw("Pages"))instanceof i.Ref&&s.put(c),u=new Map,l=this.xref,f=this.pageIndexCache,h=0;case 10:if(!(o.length>0)){e.next=70;break}if(v=o.at(-1),y=v.currentNode,m=v.posInKids,!((b=y.getRaw("Kids"))instanceof i.Ref)){e.next=25;break}return e.prev=15,e.next=18,l.fetchAsync(b);case 18:b=e.sent,e.next=25;break;case 21:return e.prev=21,e.t0=e.catch(15),p(e.t0),e.abrupt("break",70);case 25:if(Array.isArray(b)){e.next=28;break}return p(new a.FormatError("Page dictionary kids object is not an array.")),e.abrupt("break",70);case 28:if(!(m>=b.length)){e.next=31;break}return o.pop(),e.abrupt("continue",10);case 31:if(w=b[m],k=void 0,!(w instanceof i.Ref)){e.next=50;break}if(!s.has(w)){e.next=37;break}return p(new a.FormatError("Pages tree contains circular reference.")),e.abrupt("break",70);case 37:return s.put(w),e.prev=38,e.next=41,l.fetchAsync(w);case 41:k=e.sent,e.next=48;break;case 44:return e.prev=44,e.t1=e.catch(38),p(e.t1),e.abrupt("break",70);case 48:e.next=51;break;case 50:k=w;case 51:if(k instanceof i.Dict){e.next=54;break}return p(new a.FormatError("Page dictionary kid reference points to wrong type of object.")),e.abrupt("break",70);case 54:if(!((S=k.getRaw("Type"))instanceof i.Ref)){e.next=66;break}return e.prev=56,e.next=59,l.fetchAsync(S);case 59:S=e.sent,e.next=66;break;case 62:return e.prev=62,e.t2=e.catch(56),p(e.t2),e.abrupt("break",70);case 66:(0,i.isName)(S,"Page")||!k.has("Kids")?d(k,w instanceof i.Ref?w:null):o.push({currentNode:k,posInKids:0}),v.posInKids++,e.next=10;break;case 70:return e.abrupt("return",u);case 71:case"end":return e.stop()}}),e,this,[[15,21],[38,44],[56,62]])}))),function(){return O.apply(this,arguments)})},{key:"getPageIndex",value:function(e){var t=this,r=this.pageIndexCache.get(e);if(void 0!==r)return Promise.resolve(r);var n=this.xref,o=0;return function r(s){return function(t){var r,o=0;return n.fetchAsync(t).then((function(n){if((0,i.isRefsEqual)(t,e)&&!(0,i.isDict)(n,"Page")&&!(n instanceof i.Dict&&!n.has("Type")&&n.has("Contents")))throw new a.FormatError("The reference does not point to a /Page dictionary.");if(!n)return null;if(!(n instanceof i.Dict))throw new a.FormatError("Node must be a dictionary.");return r=n.getRaw("Parent"),n.getAsync("Parent")})).then((function(e){if(!e)return null;if(!(e instanceof i.Dict))throw new a.FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;var s,c=[],u=!1,l=b(e);try{for(l.s();!(s=l.n()).done;){var f=s.value;if(!(f instanceof i.Ref))throw new a.FormatError("Kid must be a reference.");if((0,i.isRefsEqual)(f,t)){u=!0;break}c.push(n.fetchAsync(f).then((function(e){if(!(e instanceof i.Dict))throw new a.FormatError("Kid node must be a dictionary.");e.has("Count")?o+=e.get("Count"):o++})))}}catch(e){l.e(e)}finally{l.f()}if(!u)throw new a.FormatError("Kid reference not found in parent's kids.");return Promise.all(c).then((function(){return[o,r]}))}))}(s).then((function(n){if(!n)return t.pageIndexCache.put(e,o),o;var a=m(n,2),i=a[0],s=a[1];return o+=i,r(s)}))}(e)}},{key:"baseUrl",get:function(){var e=this._catDict.get("URI");if(e instanceof i.Dict){var t=e.get("Base");if("string"==typeof t){var r=(0,a.createValidAbsoluteUrl)(t,null,{tryConvertEncoding:!0});if(r)return(0,a.shadow)(this,"baseUrl",r.href)}}return(0,a.shadow)(this,"baseUrl",null)}}],v=[{key:"parseDestDictionary",value:function(e){var t=e.destDict;if(t instanceof i.Dict){var r=e.resultObj;if("object"===p(r)){var o,c,u=e.docBaseUrl||null,l=e.docAttachments||null,f=t.get("A");if(f instanceof i.Dict||(t.has("Dest")?f=t.get("Dest"):(f=t.get("AA"))instanceof i.Dict&&(f.has("D")?f=f.get("D"):f.has("U")&&(f=f.get("U")))),f instanceof i.Dict){var h=f.get("S");if(!(h instanceof i.Name))return void(0,a.warn)("parseDestDictionary: Invalid type in Action dictionary.");var d=h.name;switch(d){case"ResetForm":var g,v=f.get("Flags"),y=0==(1&("number"==typeof v?v:0)),m=[],w=[],k=b(f.get("Fields")||[]);try{for(k.s();!(g=k.n()).done;){var S=g.value;S instanceof i.Ref?w.push(S.toString()):"string"==typeof S&&m.push((0,a.stringToPDFString)(S))}}catch(e){k.e(e)}finally{k.f()}r.resetForm={fields:m,refs:w,include:y};break;case"URI":(o=f.get("URI"))instanceof i.Name&&(o="/"+o.name);break;case"GoTo":c=f.get("D");break;case"Launch":case"GoToR":var x=f.get("F");x instanceof i.Dict?o=x.get("F")||null:"string"==typeof x&&(o=x);var O=f.get("D");if(O&&(O instanceof i.Name&&(O=O.name),"string"==typeof o)){var A=o.split("#")[0];"string"==typeof O?o=A+"#"+O:Array.isArray(O)&&(o=A+"#"+JSON.stringify(O))}var C=f.get("NewWindow");"boolean"==typeof C&&(r.newWindow=C);break;case"GoToE":var F,P=f.get("T");if(l&&P instanceof i.Dict){var T=P.get("R"),I=P.get("N");(0,i.isName)(T,"C")&&"string"==typeof I&&(F=l[(0,a.stringToPDFString)(I)])}F?r.attachment=F:(0,a.warn)('parseDestDictionary - unimplemented "GoToE" action.');break;case"Named":var E=f.get("N");E instanceof i.Name&&(r.action=E.name);break;case"SetOCGState":var j=f.get("State"),M=f.get("PreserveRB");if(!Array.isArray(j)||0===j.length)break;var _,L=[],R=b(j);try{for(R.s();!(_=R.n()).done;){var N=_.value;if(N instanceof i.Name)switch(N.name){case"ON":case"OFF":case"Toggle":L.push(N.name)}else N instanceof i.Ref&&L.push(N.toString())}}catch(e){R.e(e)}finally{R.f()}if(L.length!==j.length)break;r.setOCGState={state:L,preserveRB:"boolean"!=typeof M||M};break;case"JavaScript":var D,B=f.get("JS");B instanceof s.BaseStream?D=B.getString():"string"==typeof B&&(D=B);var U=D&&(0,n.recoverJsURL)((0,a.stringToPDFString)(D));if(U){o=U.url,r.newWindow=U.newWindow;break}default:if("JavaScript"===d||"SubmitForm"===d)break;(0,a.warn)('parseDestDictionary - unsupported action: "'.concat(d,'".'))}}else t.has("Dest")&&(c=t.get("Dest"));if("string"==typeof o){var $=(0,a.createValidAbsoluteUrl)(o,u,{addDefaultProtocol:!0,tryConvertEncoding:!0});$&&(r.url=$.href),r.unsafeUrl=o}c&&(c instanceof i.Name&&(c=c.name),"string"==typeof c?r.dest=(0,a.stringToPDFString)(c):Array.isArray(c)&&(r.dest=c))}else(0,a.warn)("parseDestDictionary: \`resultObj\` must be an object.")}else(0,a.warn)("parseDestDictionary: \`destDict\` must be a dictionary.")}}],r&&S(t.prototype,r),v&&S(t,v),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Catalog=O},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NumberTree=t.NameTree=void 0;var n=r(134),a=r(2);function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&o(e,t)}function o(e,t){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},o(e,t)}function s(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=c(e);if(t){var a=c(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===u(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0;){var o=t.fetchIfRef(i.shift());if(o instanceof n.Dict)if(o.has("Kids")){var s=o.get("Kids");if(!Array.isArray(s))continue;var c,u=l(s);try{for(u.s();!(c=u.n()).done;){var f=c.value;if(r.has(f))throw new a.FormatError('Duplicate entry in "'.concat(this._type,'" tree.'));i.push(f),r.put(f)}}catch(e){u.e(e)}finally{u.f()}}else{var h=o.get(this._type);if(Array.isArray(h))for(var d=0,p=h.length;d10)return(0,a.warn)('Search depth limit reached for "'.concat(this._type,'" tree.')),null;var i=r.get("Kids");if(!Array.isArray(i))return null;for(var o=0,s=i.length-1;o<=s;){var c=o+s>>1,u=t.fetchIfRef(i[c]),l=u.get("Limits");if(et.fetchIfRef(l[1]))){r=u;break}o=c+1}}if(o>s)return null}var f=r.get(this._type);if(Array.isArray(f))for(var h=0,d=f.length-2;h<=d;){var p=h+d>>1,g=p+(1&p),v=t.fetchIfRef(f[g]);if(ev))return t.fetchIfRef(f[g+1]);h=g+2}}return null}}]),e}(),v=function(e){i(r,e);var t=s(r);function r(e,n){return h(this,r),t.call(this,e,n,"Names")}return p(r)}(g);t.NameTree=v;var y=function(e){i(r,e);var t=s(r);function r(e,n){return h(this,r),t.call(this,e,n,"Nums")}return p(r)}(g);t.NumberTree=y},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.clearGlobalCaches=function(){(0,n.clearPrimitiveCaches)(),(0,a.clearUnicodeCaches)()};var n=r(134),a=r(169)},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FileSpec=void 0;var n=r(2),a=r(136),i=r(134);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataParser=void 0;var n=r(195);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=o(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function o(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\\\\376\\\\377([^<]+)/g,(function(e,t){for(var r=t.replace(/\\\\([0-3])([0-7])([0-7])/g,(function(e,t,r,n){return String.fromCharCode(64*t+8*r+1*n)})).replace(/&(amp|apos|gt|lt|quot);/g,(function(e,t){switch(t){case"amp":return"&";case"apos":return"'";case"gt":return">";case"lt":return"<";case"quot":return'"'}throw new Error("_repair: ".concat(t," isn't defined."))})),n=[],a=0,i=r.length;a=32&&o<127&&60!==o&&62!==o&&38!==o?n.push(String.fromCharCode(o)):n.push("&#x"+(65536+o).toString(16).substring(1)+";")}return">"+n.join("")}))}},{key:"_getSequence",value:function(e){var t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter((function(e){return"rdf:li"===e.nodeName}))}},{key:"_parseArray",value:function(e){if(e.hasChildNodes()){var t=(n=e.childNodes,a=1,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(n,a)||o(n,a)||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.")}())[0],r=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,r.map((function(e){return e.textContent.trim()})))}var n,a}},{key:"_parse",value:function(e){var t=e.documentElement;if("rdf:rdf"!==t.nodeName)for(t=t.firstChild;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling;if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes()){var r,n=i(t.childNodes);try{for(n.s();!(r=n.n()).done;){var a=r.value;if("rdf:description"===a.nodeName){var o,s=i(a.childNodes);try{for(s.s();!(o=s.n()).done;){var c=o.value,u=c.nodeName;switch(u){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(c);continue}this._metadataMap.set(u,c.textContent.trim())}}catch(e){s.e(e)}finally{s.f()}}}}catch(e){n.e(e)}finally{n.f()}}}},{key:"serializable",get:function(){return{parsedData:this._metadataMap,rawData:this._data}}}])&&c(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.MetadataParser=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.StructTreeRoot=t.StructTreePage=void 0;var n=r(134),a=r(2),i=r(199);function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]?arguments[2]:0;if(r>40)return(0,a.warn)("StructTree MAX_DEPTH reached."),null;if(t.has(e))return t.get(e);var i=new y(this,e);t.set(e,i);var s=e.get("P");if(!s||(0,n.isName)(s.get("Type"),"StructTreeRoot"))return this.addTopLevelNode(e,i)||t.delete(e),i;var c=this.addNode(s,t,r+1);if(!c)return i;var u,l=!1,f=o(c.kids);try{for(f.s();!(u=f.n()).done;){var h=u.value;h.type===g&&h.dict===e&&(h.parentNode=i,l=!0)}}catch(e){f.e(e)}finally{f.f()}return l||t.delete(e),i}},{key:"addTopLevelNode",value:function(e,t){var r=this.rootDict.get("K");if(!r)return!1;if(r instanceof n.Dict)return r.objId===e.objId&&(this.nodes[0]=t,!0);if(!Array.isArray(r))return!0;for(var a=!1,i=0;i2&&void 0!==arguments[2]?arguments[2]:0;if(n>40)(0,a.warn)("StructTree too deep to be fully serialized.");else{var i=Object.create(null);i.role=t.role,i.children=[],r.children.push(i);var s=t.dict.get("Alt");"string"==typeof s&&(i.alt=(0,a.stringToPDFString)(s));var c=t.dict.get("Lang");"string"==typeof c&&(i.lang=(0,a.stringToPDFString)(c));var u,l=o(t.kids);try{for(l.s();!(u=l.n()).done;){var f=u.value,v=f.type===g?f.parentNode:null;v?e(v,i,n+1):f.type===h||f.type===d?i.children.push({type:"content",id:"page".concat(f.pageObjId,"_mcid").concat(f.mcid)}):f.type===p&&i.children.push({type:"object",id:f.refObjId})}}catch(e){l.e(e)}finally{l.f()}}}var t=Object.create(null);t.children=[],t.role="Root";var r,n=o(this.nodes);try{for(n.s();!(r=n.n()).done;){var i=r.value;i&&e(i,t)}}catch(e){n.e(e)}finally{n.f()}return t}}]),e}();t.StructTreePage=b},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ObjectLoader=void 0;var a=r(134),i=r(136),o=r(135),s=r(2);function c(){c=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,n){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(n||[]);return a(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};l(y,o,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,o)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function i(a,o,s,c){var u=h(e[a],e,o);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==n(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){i("next",e,s,c)}),(function(e){i("throw",e,s,c)})):t.resolve(f).then((function(e){l.value=e,s(l)}),(function(e){return i("throw",e,s,c)}))}c(u.arg)}var o;a(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){i(e,r,t,n)}))}return o=o?o.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function u(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function l(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){u(i,n,a,o,s,"next",e)}function s(e){u(i,n,a,o,s,"throw",e)}o(void 0)}))}}function f(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.XFAFactory=void 0;var n=r(206),a=r(210),i=r(216),o=r(214),s=r(207),c=r(2),u=r(217),l=r(227);function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},e}function p(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function g(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){p(i,n,a,o,s,"next",e)}function s(e){p(i,n,a,o,s,"throw",e)}o(void 0)}))}}function v(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(this.form[n.$globalData].usedTypefaces);try{for(a.s();!(t=a.n()).done;){var i=t.value;i=(0,s.stripQuotes)(i),this.form[n.$globalData].fontFinder.find(i)||r.push(i)}}catch(e){a.e(e)}finally{a.f()}return r.length>0?r:null}},{key:"appendFonts",value:function(e,t){this.form[n.$globalData].fontFinder.add(e,t)}},{key:"getPages",value:(p=g(d().mark((function e(){var t;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.pages){e.next=3;break}return e.next=3,this._createPages();case 3:return t=this.pages,this.pages=null,e.abrupt("return",t);case 6:case"end":return e.stop()}}),e,this)}))),function(){return p.apply(this,arguments)})},{key:"serializeData",value:function(e){return this.dataHandler.serialize(e)}}],f=[{key:"_createDocument",value:function(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}},{key:"getRichTextAsHtml",value:function(e){if(!e||"string"!=typeof e)return null;try{var t=new u.XFAParser(l.XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[n.$nodeName])){var r=l.XhtmlNamespace.body({});r[n.$appendChild](t),t=r}var a=t[n.$toHTML]();if(!a.success)return null;var i=a.html,o=i.attributes;return o&&(o.class&&(o.class=o.class.filter((function(e){return!e.startsWith("xfa")}))),o.dir="auto"),{html:i,str:t[n.$text]()}}catch(e){(0,c.warn)("XFA - an error occurred during parsing of rich text: ".concat(e))}return null}}],r&&v(t.prototype,r),f&&v(t,f),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.XFAFactory=y},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XmlObject=t.XFAObjectArray=t.XFAObject=t.XFAAttribute=t.StringObject=t.OptionObject=t.Option10=t.Option01=t.IntegerObject=t.ContentObject=t.$uid=t.$toStyle=t.$toString=t.$toPages=t.$toHTML=t.$text=t.$tabIndex=t.$setValue=t.$setSetAttributes=t.$setId=t.$searchNode=t.$root=t.$resolvePrototypes=t.$removeChild=t.$pushPara=t.$pushGlyphs=t.$popPara=t.$onText=t.$onChildCheck=t.$onChild=t.$nsAttributes=t.$nodeName=t.$namespaceId=t.$isUsable=t.$isTransparent=t.$isThereMoreWidth=t.$isSplittable=t.$isNsAgnostic=t.$isDescendent=t.$isDataValue=t.$isCDATAXml=t.$isBindable=t.$insertAt=t.$indexOf=t.$ids=t.$hasSettableValue=t.$globalData=t.$getTemplateRoot=t.$getSubformParent=t.$getRealChildrenByNameIt=t.$getParent=t.$getNextPage=t.$getExtra=t.$getDataValue=t.$getContainedChildren=t.$getChildrenByNameIt=t.$getChildrenByName=t.$getChildrenByClass=t.$getChildren=t.$getAvailableSpace=t.$getAttributes=t.$getAttributeIt=t.$flushHTML=t.$finalize=t.$extra=t.$dump=t.$data=t.$content=t.$consumed=t.$clone=t.$cleanup=t.$cleanPage=t.$clean=t.$childrenToHTML=t.$appendChild=t.$addHTML=t.$acceptWhitespace=void 0;var n=r(207),a=r(2),i=r(135),o=r(208),s=r(209);function c(){return c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=p(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:r):a.value}},c.apply(this,arguments)}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||m(e,t)||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 l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f(e,t)}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function h(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=p(e);if(t){var a=p(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===g(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return d(e)}(this,r)}}function d(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},p(e)}function g(e){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},g(e)}function v(){v=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function p(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=p.prototype=h.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==g(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function y(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=m(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function m(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]&&arguments[2];w(this,e),this[pe]=t,this[ge]=r,this[We]=n,this[Ke]=null,this[Ue]=[],this[Re]="".concat(r).concat(et++),this[Q]=null}return S(e,[{key:ye,value:function(e){if(!this[We]||!this[me](e))return!1;var t=e[ge],r=this[t];if(!(r instanceof nt))return null!==r&&this[xe](r),this[t]=e,this[A](e),!0;if(r.push(e))return this[A](e),!0;var n="";return this.id?n=" (id: ".concat(this.id,")"):this.name&&(n=" (name: ".concat(this.name," ").concat(this.h.value,")")),(0,a.warn)('XFA - node "'.concat(this[ge],'"').concat(n,' has already enough "').concat(t,'"!')),!1}},{key:me,value:function(e){return this.hasOwnProperty(e[ge])&&e[pe]===this[pe]}},{key:ce,value:function(){return!1}},{key:x,value:function(){return!1}},{key:ae,value:function(){return!1}},{key:ie,value:function(){return!1}},{key:ke,value:function(){this.para&&this[Z]()[L].paraStack.pop()}},{key:Se,value:function(){this[Z]()[L].paraStack.push(this.para)}},{key:Fe,value:function(e){this.id&&this[pe]===o.NamespaceIds.template.id&&e.set(this.id,this)}},{key:Z,value:function(){return this[Q].template}},{key:ue,value:function(){return!1}},{key:le,value:function(){return!1}},{key:A,value:function(e){e[Ke]=this,this[Ue].push(e),!e[Q]&&this[Q]&&(e[Q]=this[Q])}},{key:xe,value:function(e){var t=this[Ue].indexOf(e);this[Ue].splice(t,1)}},{key:ee,value:function(){return this.hasOwnProperty("value")}},{key:Te,value:function(e){}},{key:be,value:function(e){}},{key:R,value:function(){}},{key:F,value:function(e){delete this[We],this[T]&&(e.clean(this[T]),delete this[T])}},{key:re,value:function(e){return this[Ue].indexOf(e)}},{key:ne,value:function(e,t){t[Ke]=this,this[Ue].splice(e,0,t),!t[Q]&&this[Q]&&(t[Q]=this[Q])}},{key:fe,value:function(){return!this.name}},{key:de,value:function(){return""}},{key:Ee,value:function(){return 0===this[Ue].length?this[j]:this[Ue].map((function(e){return e[Ee]()})).join("")}},{key:Be,get:function(){var t=Object.getPrototypeOf(this);if(!t._attributes){var r,n=t._attributes=new Set,i=y(Object.getOwnPropertyNames(this));try{for(i.s();!(r=i.n()).done;){var o=r.value;if(null===this[o]||this[o]instanceof e||this[o]instanceof nt)break;n.add(o)}}catch(e){i.e(e)}finally{i.f()}}return(0,a.shadow)(this,Be,t._attributes)}},{key:se,value:function(e){for(var t=this;t;){if(t===e)return!0;t=t[J]()}return!1}},{key:J,value:function(){return this[Ke]}},{key:K,value:function(){return this[J]()}},{key:W,value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e?this[e]:this[Ue]}},{key:_,value:function(){var t=Object.create(null);this[j]&&(t.$content=this[j]);var r,n=y(Object.getOwnPropertyNames(this));try{for(n.s();!(r=n.n()).done;){var a=r.value,i=this[a];null!==i&&(i instanceof e?t[a]=i[_]():i instanceof nt?i.isEmpty()||(t[a]=i.dump()):t[a]=i)}}catch(e){n.e(e)}finally{n.f()}return t}},{key:Le,value:function(){return null}},{key:Me,value:function(){return n.HTMLResult.EMPTY}},{key:V,value:v().mark((function e(){var t,r,n;return v().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=y(this[W]()),e.prev=1,t.s();case 3:if((r=t.n()).done){e.next=9;break}return n=r.value,e.next=7,n;case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),t.e(e.t0);case 14:return e.prev=14,t.f(),e.finish(14);case 17:case"end":return e.stop()}}),e,this,[[1,11,14,17]])}))},{key:qe,value:v().mark((function e(t,r){var n,a,i,o,s;return v().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=y(this[V]()),e.prev=1,n.s();case 3:if((a=n.n()).done){e.next=13;break}if(i=a.value,t&&r!==t.has(i[ge])){e.next=11;break}return o=this[U](),(s=i[Me](o)).success||(this[L].failingNode=i),e.next=11,s;case 11:e.next=3;break;case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(1),n.e(e.t0);case 18:return e.prev=18,n.f(),e.finish(18);case 21:case"end":return e.stop()}}),e,this,[[1,15,18,21]])}))},{key:N,value:function(){return null}},{key:O,value:function(e,t){this[L].children.push(e)}},{key:U,value:function(){}},{key:C,value:function(e){var t=e.filter,r=void 0===t?null:t,a=e.include,i=void 0===a||a;if(this[L].generator){var o=this[U](),s=this[L].failingNode[Me](o);if(!s.success)return s;s.html&&this[O](s.html,s.bbox),delete this[L].failingNode}else this[L].generator=this[qe](r,i);for(;;){var c=this[L].generator.next();if(c.done)break;var u=c.value;if(!u.success)return u;u.html&&this[O](u.html,u.bbox)}return this[L].generator=null,n.HTMLResult.EMPTY}},{key:Pe,value:function(e){this[Ze]=new Set(Object.keys(e))}},{key:ze,value:function(e){var t,r=this[Be],n=this[Ze];return(t=e,function(e){if(Array.isArray(e))return b(e)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||m(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).filter((function(e){return r.has(e)&&!n.has(e)}))}},{key:Ae,value:function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set,n=y(this[Ue]);try{for(n.s();!(t=n.n()).done;)t.value[Je](e,r)}catch(e){n.e(e)}finally{n.f()}}},{key:Je,value:function(e,t){var r=this[Ge](e,t);r?this[Ne](r,e,t):this[Ae](e,t)}},{key:Ge,value:function(e,t){var r=this.use,n=this.usehref;if(!r&&!n)return null;var i=null,o=null,c=null,u=r;if(n?(u=n,n.startsWith("#som(")&&n.endsWith(")")?o=n.slice(5,n.length-1):n.startsWith(".#som(")&&n.endsWith(")")?o=n.slice(6,n.length-1):n.startsWith("#")?c=n.slice(1):n.startsWith(".#")&&(c=n.slice(2))):r.startsWith("#")?c=r.slice(1):o=r,this.use=this.usehref="",c?i=e.get(c):(i=(0,s.searchNode)(e.get(Oe),this,o,!0,!1))&&(i=i[0]),!i)return(0,a.warn)("XFA - Invalid prototype reference: ".concat(u,".")),null;if(i[ge]!==this[ge])return(0,a.warn)("XFA - Incompatible prototype: ".concat(i[ge]," !== ").concat(this[ge],".")),null;if(t.has(i))return(0,a.warn)("XFA - Cycle detected in prototypes use."),null;t.add(i);var l=i[Ge](e,t);return l&&i[Ne](l,e,t),i[Ae](e,t),t.delete(i),i}},{key:Ne,value:function(e,t,r){if(r.has(e))(0,a.warn)("XFA - Cycle detected in prototypes use.");else{!this[j]&&e[j]&&(this[j]=e[j]),new Set(r).add(e);var n,i=y(this[ze](e[Ze]));try{for(i.s();!(n=i.n()).done;){var o=n.value;this[o]=e[o],this[Ze]&&this[Ze].add(o)}}catch(e){i.e(e)}finally{i.f()}var s,c=y(Object.getOwnPropertyNames(this));try{for(c.s();!(s=c.n()).done;){var u=s.value;if(!this[Be].has(u)){var l=this[u],f=e[u];if(l instanceof nt){var h,d=y(l[Ue]);try{for(d.s();!(h=d.n()).done;)h.value[Je](t,r)}catch(e){d.e(e)}finally{d.f()}for(var p=l[Ue].length,g=f[Ue].length;p0&&void 0!==arguments[0]?arguments[0]:null;return e?this[Ue].filter((function(t){return t[ge]===e})):this[Ue]}},{key:$,value:function(e){return this[e]}},{key:X,value:function(e,t){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return Array.from(this[H](e,t,r))}},{key:H,value:function(e,t){var r=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return v().mark((function a(){var i,o,s;return v().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if("parent"!==e){a.next=4;break}return a.next=3,r[Ke];case 3:return a.abrupt("return");case 4:i=y(r[Ue]),a.prev=5,i.s();case 7:if((o=i.n()).done){a.next=19;break}if((s=o.value)[ge]!==e){a.next=12;break}return a.next=12,s;case 12:if(s.name!==e){a.next=15;break}return a.next=15,s;case 15:if(!t&&!s[fe]()){a.next=17;break}return a.delegateYield(s[H](e,t,!1),"t0",17);case 17:a.next=7;break;case 19:a.next=24;break;case 21:a.prev=21,a.t1=a.catch(5),i.e(a.t1);case 24:return a.prev=24,i.f(),a.finish(24);case 27:if(!n||!r[Be].has(e)){a.next=30;break}return a.next=30,new at(r,e,r[e]);case 30:case"end":return a.stop()}}),a,null,[[5,21,24,27]])}))()}}],[{key:$e,value:function(t){return Array.isArray(t)?t.map((function(t){return e[$e](t)})):"object"===g(t)&&null!==t?Object.assign({},t):t}}]),e}();t.XFAObject=rt;var nt=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0;w(this,e),this[Ve]=t,this[Ue]=[]}return S(e,[{key:"push",value:function(e){return this[Ue].length<=this[Ve]?(this[Ue].push(e),!0):((0,a.warn)('XFA - node "'.concat(e[ge],'" accepts no more than ').concat(this[Ve]," children")),!1)}},{key:"isEmpty",value:function(){return 0===this[Ue].length}},{key:"dump",value:function(){return 1===this[Ue].length?this[Ue][0][_]():this[Ue].map((function(e){return e[_]()}))}},{key:I,value:function(){var t=new e(this[Ve]);return t[Ue]=this[Ue].map((function(e){return e[I]()})),t}},{key:"children",get:function(){return this[Ue]}},{key:"clear",value:function(){this[Ue].length=0}}]),e}();t.XFAObjectArray=nt;var at=function(){function e(t,r,n){w(this,e),this[Ke]=t,this[ge]=r,this[j]=n,this[E]=!1,this[Re]="attribute".concat(et++)}return S(e,[{key:J,value:function(){return this[Ke]}},{key:oe,value:function(){return!0}},{key:q,value:function(){return this[j].trim()}},{key:Te,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){e=e.value||"",this[j]=e.toString()}))},{key:Ee,value:function(){return this[j]}},{key:se,value:function(e){return this[Ke]===e||this[Ke][se](e)}}]),e}();t.XFAAttribute=at;var it=function(e){l(r,e);var t=h(r);function r(e,n){var a,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(w(this,r),(a=t.call(this,e,n))[j]="",a[Xe]=null,"#text"!==n){var o=new Map;a[De]=o;for(var s=0,c=Object.entries(i);s"),this[j])"string"==typeof this[j]?e.push((0,i.encodeToXmlString)(this[j])):this[j][_e](e);else{var d,p=y(this[Ue]);try{for(p.s();!(d=p.n()).done;)d.value[_e](e)}catch(e){p.e(e)}finally{p.f()}}e.push(""))}else e.push("/>")}else e.push((0,i.encodeToXmlString)(this[j]))}},{key:ye,value:function(e){if(this[j]){var t=new r(this[pe],"#text");this[A](t),t[j]=this[j],this[j]=""}return this[A](e),!0}},{key:be,value:function(e){this[j]+=e}},{key:R,value:function(){if(this[j]&&this[Ue].length>0){var e=new r(this[pe],"#text");this[A](e),e[j]=this[j],delete this[j]}}},{key:Me,value:function(){return"#text"===this[ge]?n.HTMLResult.success({name:"#text",value:this[j]}):n.HTMLResult.EMPTY}},{key:W,value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e?this[Ue].filter((function(t){return t[ge]===e})):this[Ue]}},{key:B,value:function(){return this[De]}},{key:$,value:function(e){var t=this[De].get(e);return void 0!==t?t:this[W](e)}},{key:H,value:v().mark((function(e,t){var r,n,a,i;return v().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(!(r=this[De].get(e))){o.next=4;break}return o.next=4,r;case 4:n=y(this[Ue]),o.prev=5,n.s();case 7:if((a=n.n()).done){o.next=16;break}if((i=a.value)[ge]!==e){o.next=12;break}return o.next=12,i;case 12:if(!t){o.next=14;break}return o.delegateYield(i[H](e,t),"t0",14);case 14:o.next=7;break;case 16:o.next=21;break;case 18:o.prev=18,o.t1=o.catch(5),n.e(o.t1);case 21:return o.prev=21,n.f(),o.finish(21);case 24:case"end":return o.stop()}}),r,this,[[5,18,21,24]])}))},{key:D,value:v().mark((function(e,t){var r,n,a,i;return v().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(!(r=this[De].get(e))||t&&r[E]){o.next=4;break}return o.next=4,r;case 4:n=y(this[Ue]),o.prev=5,n.s();case 7:if((a=n.n()).done){o.next=12;break}return i=a.value,o.delegateYield(i[D](e,t),"t0",10);case 10:o.next=7;break;case 12:o.next=17;break;case 14:o.prev=14,o.t1=o.catch(5),n.e(o.t1);case 17:return o.prev=17,n.f(),o.finish(17);case 20:case"end":return o.stop()}}),r,this,[[5,14,17,20]])}))},{key:z,value:v().mark((function e(t,r,n){var a,i,o;return v().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:a=y(this[Ue]),e.prev=1,a.s();case 3:if((i=a.n()).done){e.next=12;break}if((o=i.value)[ge]!==t||n&&o[E]){e.next=8;break}return e.next=8,o;case 8:if(!r){e.next=10;break}return e.delegateYield(o[z](t,r,n),"t0",10);case 10:e.next=3;break;case 12:e.next=17;break;case 14:e.prev=14,e.t1=e.catch(1),a.e(e.t1);case 17:return e.prev=17,a.f(),e.finish(17);case 20:case"end":return e.stop()}}),e,this,[[1,14,17,20]])}))},{key:oe,value:function(){return null===this[Xe]?0===this[Ue].length||this[Ue][0][pe]===o.NamespaceIds.xhtml.id:this[Xe]}},{key:q,value:function(){return null===this[Xe]?0===this[Ue].length?this[j].trim():this[Ue][0][pe]===o.NamespaceIds.xhtml.id?this[Ue][0][Ee]().trim():null:this[j].trim()}},{key:Te,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){e=e.value||"",this[j]=e.toString()}))},{key:_,value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=Object.create(null);e&&(t.$ns=this[pe]),this[j]&&(t.$content=this[j]),t.$name=this[ge],t.children=[];var r,n=y(this[Ue]);try{for(n.s();!(r=n.n()).done;){var a=r.value;t.children.push(a[_](e))}}catch(e){n.e(e)}finally{n.f()}t.attributes=Object.create(null);var i,o=y(this[De]);try{for(o.s();!(i=o.n()).done;){var s=u(i.value,2),c=s[0],l=s[1];t.attributes[c]=l[j]}}catch(e){o.e(e)}finally{o.f()}return t}}]),r}(rt);t.XmlObject=it;var ot=function(e){l(r,e);var t=h(r);function r(e,n){var a;return w(this,r),(a=t.call(this,e,n))[j]="",a}return S(r,[{key:be,value:function(e){this[j]+=e}},{key:R,value:function(){}}]),r}(rt);t.ContentObject=ot;var st=function(e){l(r,e);var t=h(r);function r(e,n,a){var i;return w(this,r),(i=t.call(this,e,n))[Ye]=a,i}return S(r,[{key:R,value:function(){var e=this;this[j]=(0,n.getKeyword)({data:this[j],defaultValue:this[Ye][0],validate:function(t){return e[Ye].includes(t)}})}},{key:F,value:function(e){c(p(r.prototype),F,this).call(this,e),delete this[Ye]}}]),r}(ot);t.OptionObject=st;var ct=function(e){l(r,e);var t=h(r);function r(){return w(this,r),t.apply(this,arguments)}return S(r,[{key:R,value:function(){this[j]=this[j].trim()}}]),r}(ot);t.StringObject=ct;var ut=function(e){l(r,e);var t=h(r);function r(e,n,a,i){var o;return w(this,r),(o=t.call(this,e,n))[He]=a,o[Qe]=i,o}return S(r,[{key:R,value:function(){this[j]=(0,n.getInteger)({data:this[j],defaultValue:this[He],validate:this[Qe]})}},{key:F,value:function(e){c(p(r.prototype),F,this).call(this,e),delete this[He],delete this[Qe]}}]),r}(ot);t.IntegerObject=ut;var lt=function(e){l(r,e);var t=h(r);function r(e,n){return w(this,r),t.call(this,e,n,0,(function(e){return 1===e}))}return S(r)}(ut);t.Option01=lt;var ft=function(e){l(r,e);var t=h(r);function r(e,n){return w(this,r),t.call(this,e,n,1,(function(e){return 0===e}))}return S(r)}(ut);t.Option10=ft},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.HTMLResult=void 0,t.getBBox=function(e){var t=-1;if(!e)return{x:t,y:t,width:t,height:t};var r=e.trim().split(/\\s*,\\s*/).map((function(e){return f(e,"-1")}));if(r.length<4||r[2]<0||r[3]<0)return{x:t,y:t,width:t,height:t};var n=o(r,4);return{x:n[0],y:n[1],width:n[2],height:n[3]}},t.getColor=function(e){var t=o(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0],3),r=t[0],n=t[1],a=t[2];if(!e)return{r,g:n,b:a};var i=e.trim().split(/\\s*,\\s*/).map((function(e){return Math.min(Math.max(0,parseInt(e.trim(),10)),255)})).map((function(e){return isNaN(e)?0:e}));if(i.length<3)return{r,g:n,b:a};var s=o(i,3);return{r:r=s[0],g:n=s[1],b:a=s[2]}},t.getFloat=function(e){var t=e.data,r=e.defaultValue,n=e.validate;if(!t)return r;t=t.trim();var a=parseFloat(t);return!isNaN(a)&&n(a)?a:r},t.getInteger=function(e){var t=e.data,r=e.defaultValue,n=e.validate;if(!t)return r;t=t.trim();var a=parseInt(t,10);return!isNaN(a)&&n(a)?a:r},t.getKeyword=l,t.getMeasurement=f,t.getRatio=function(e){if(!e)return{num:1,den:1};var t=e.trim().split(/\\s*:\\s*/).map((function(e){return parseFloat(e)})).filter((function(e){return!isNaN(e)}));if(1===t.length&&t.push(1),0===t.length)return{num:1,den:1};var r=o(t,2);return{num:r[0],den:r[1]}},t.getRelevant=function(e){return e?e.trim().split(/\\s+/).map((function(e){return{excluded:"-"===e[0],viewname:e.substring(1)}})):[]},t.getStringOption=function(e,t){return l({data:e,defaultValue:t[0],validate:function(e){return t.includes(e)}})},t.stripQuotes=function(e){return e.startsWith("'")||e.startsWith('"')?e.slice(1,e.length-1):e};var a=r(2);function i(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:"0";if(t=t||"0",!e)return f(t);var r=e.trim().match(u);if(!r)return f(t);var n=o(r,3),a=n[1],i=n[2],s=parseFloat(a);if(isNaN(s))return f(t);if(0===s)return 0;var l=c[i];return l?l(s):s}var h=function(){function e(t,r,n,a){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.success=t,this.html=r,this.bbox=n,this.breakNode=a}var t,r,n;return t=e,n=[{key:"FAILURE",get:function(){return(0,a.shadow)(this,"FAILURE",new e(!1,null,null,null))}},{key:"EMPTY",get:function(){return(0,a.shadow)(this,"EMPTY",new e(!0,null,null,null))}},{key:"breakNode",value:function(t){return new e(!1,null,null,t)}},{key:"success",value:function(t){return new e(!0,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,null)}}],(r=[{key:"isBreak",value:function(){return!!this.breakNode}}])&&i(t.prototype,r),n&&i(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.HTMLResult=h},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NamespaceIds=t.$buildXFAObject=void 0;var r=Symbol();t.$buildXFAObject=r,t.NamespaceIds={config:{id:0,check:function(e){return e.startsWith("http://www.xfa.org/schema/xci/")}},connectionSet:{id:1,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")}},datasets:{id:2,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-data/")}},form:{id:3,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-form/")}},localeSet:{id:4,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")}},pdf:{id:5,check:function(e){return"http://ns.adobe.com/xdp/pdf/"===e}},signature:{id:6,check:function(e){return"http://www.w3.org/2000/09/xmldsig#"===e}},sourceSet:{id:7,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-source-set/")}},stylesheet:{id:8,check:function(e){return"http://www.w3.org/1999/XSL/Transform"===e}},template:{id:9,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-template/")}},xdc:{id:10,check:function(e){return e.startsWith("http://www.xfa.org/schema/xdc/")}},xdp:{id:11,check:function(e){return"http://ns.adobe.com/xdp/"===e}},xfdf:{id:12,check:function(e){return"http://ns.adobe.com/xfdf/"===e}},xhtml:{id:13,check:function(e){return"http://www.w3.org/1999/xhtml"===e}},xmpmeta:{id:14,check:function(e){return"http://ns.adobe.com/xmpmeta/"===e}}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDataNode=function(e,t,r){var a=y(r);if(!a)return null;if(a.some((function(e){return e.operator===d.dotDot})))return null;var o=p.get(a[0].name),s=0;o?(e=o(e,t),s=1):e=t||e;for(var c=a.length;s4&&void 0!==arguments[4])||arguments[4],i=y(r,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);if(!i)return null;var c,u=p.get(i[0].name),l=0;u?(c=!0,e=[u(e,t)],l=1):(c=null===t,e=[t||e]);for(var f=function(r){var s,u=i[l],f=u.name,h=u.cacheName,p=u.operator,v=u.index,y=[],m=o(e);try{for(m.s();!(s=m.n()).done;){var b=s.value;if(b instanceof n.XFAObject){var w=void 0,k=void 0;if(a&&((k=g.get(b))||(k=new Map,g.set(b,k)),w=k.get(h)),!w){switch(p){case d.dot:w=b[n.$getChildrenByName](f,!1);break;case d.dotDot:w=b[n.$getChildrenByName](f,!0);break;case d.dotHash:w=(w=b[n.$getChildrenByClass](f))instanceof n.XFAObjectArray?w.children:[w]}a&&k.set(h,w)}w.length>0&&y.push(w)}}}catch(e){m.e(e)}finally{m.f()}if(0===y.length&&!c&&0===l){var S=t[n.$getParent]();return(t=S)?(l=-1,e=[t],"continue"):{v:null}}e=isFinite(v)?y.filter((function(e){return v=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||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 u(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2])||arguments[2],n=e.match(f);if(!n)return null;for(var a,o=c(n,1)[0],s=[{name:o,cacheName:"."+o,index:0,js:null,formCalc:null,operator:d.dot}],u=o.length;u{Object.defineProperty(t,"__esModule",{value:!0}),t.Binder=void 0;var n=r(206),a=r(211),i=r(209),o=r(208),s=r(2);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||f(e,t)||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 l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=f(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){if(e){if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&((a=e[n.$clone]())[n.$removeChild](a.occur),a.occur=null),this._bindValue(e,t[0],r),this._setProperties(e,t[0]),this._bindItems(e,t[0]),1!==t.length)for(var i=e[n.$getParent](),o=e[n.$nodeName],s=i[n.$indexOf](e),c=1,u=t.length;cm?g=g.slice(0,m):0===g.length&&(g=null),g&&this._isConsumeData()&&g.forEach((function(e){e[n.$consumed]=!0}))}else{if(!c.name){this._setAndBind(c,t);continue}if(this._isConsumeData()){for(var b=[];b.length0?b:null}else{if(!(g=t[n.$getRealChildrenByNameIt](c.name,!1,this.emptyMerge).next().value)){if(0===y){r.push(c);continue}var k=t[n.$namespaceId]===p?-1:t[n.$namespaceId];g=c[n.$data]=new n.XmlObject(k,c.name),this.emptyMerge&&(g[n.$consumed]=!0),t[n.$appendChild](g),this._setAndBind(c,g);continue}this.emptyMerge&&(g[n.$consumed]=!0),g=[g]}}g?this._bindOccurrences(c,g,h):y>0?this._setAndBind(c,t):r.push(c)}}else{this._mergeMode="consumeData"===c.mergeMode;var S=t[n.$getChildren]();if(S.length>0)this._bindOccurrences(c,[S[0]],null);else if(this.emptyMerge){var x=t[n.$namespaceId]===p?-1:t[n.$namespaceId],O=c[n.$data]=new n.XmlObject(x,c.name||"root");t[n.$appendChild](O),this._bindElement(c,O)}}}}catch(e){o.e(e)}finally{o.f()}r.forEach((function(e){return e[n.$getParent]()[n.$removeChild](e)}))}}])&&d(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Binder=v},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Value=t.Text=t.TemplateNamespace=t.Template=t.SetProperty=t.Items=t.Field=t.BindItems=void 0;var n=r(206),a=r(208),i=r(212),o=r(213),s=r(207),c=r(2),u=r(214),l=r(135),f=r(209);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(){return d="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=k(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:r):a.value}},d.apply(this,arguments)}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||A(e,t)||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 g(e,t){for(var r=0;r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}var x=S().mark(L);function O(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=A(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function A(e,t){if(e){if("string"==typeof e)return C(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?C(e,t):void 0}}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r180?1:0,f=50*(1+Math.cos(c)),h=50*(1-Math.sin(c)),d=50*(1+Math.cos(c+u)),p=50*(1-Math.sin(c+u));e={name:"path",attributes:{xmlns:P,d:"M ".concat(f," ").concat(h," A 50 50 0 ").concat(l," 0 ").concat(d," ").concat(p),vectorEffect:"non-scaling-stroke",style:a}},Object.assign(i,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}var g={name:"svg",children:[e],attributes:i};return M(this[n.$getParent]()[n.$getParent]())?s.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[g]}):(g.attributes.style.position="absolute",s.HTMLResult.success(g))}}]),r}(n.XFAObject),W=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"area",!0)).colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.id=e.id||"",a.name=e.name||"",a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.desc=null,a.extras=null,a.area=new n.XFAObjectArray,a.draw=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.exclGroup=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a}return v(r,[{key:n.$getContainedChildren,value:S().mark((function e(){return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(L(this),"t0",1);case 1:case"end":return e.stop()}}),e,this)}))},{key:n.$isTransparent,value:function(){return!0}},{key:n.$isBindable,value:function(){return!0}},{key:n.$addHTML,value:function(e,t){var r=p(t,4),a=r[0],i=r[1],o=r[2],s=r[3];this[n.$extra].width=Math.max(this[n.$extra].width,a+o),this[n.$extra].height=Math.max(this[n.$extra].height,i+s),this[n.$extra].children.push(e)}},{key:n.$getAvailableSpace,value:function(){return this[n.$extra].availableSpace}},{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"position"),r={style:t,id:this[n.$uid],class:["xfaArea"]};(0,o.isPrintOnly)(this)&&r.class.push("xfaPrintOnly"),this.name&&(r.xfaName=this.name);var a=[];this[n.$extra]={children:a,width:0,height:0,availableSpace:e};var i=this[n.$childrenToHTML]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!i.success)return i.isBreak()?i:(delete this[n.$extra],s.HTMLResult.FAILURE);t.width=(0,o.measureToString)(this[n.$extra].width),t.height=(0,o.measureToString)(this[n.$extra].height);var c={name:"div",attributes:r,children:a},u=[this.x,this.y,this[n.$extra].width,this[n.$extra].height];return delete this[n.$extra],s.HTMLResult.success(c,u)}}]),r}(n.XFAObject),V=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"assist",!0)).id=e.id||"",n.role=e.role||"",n.use=e.use||"",n.usehref=e.usehref||"",n.speak=null,n.toolTip=null,n}return v(r,[{key:n.$toHTML,value:function(){return this.toolTip&&this.toolTip[n.$content]?this.toolTip[n.$content]:null}}]),r}(n.XFAObject),Y=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"barcode",!0)).charEncoding=(0,s.getKeyword)({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:function(e){return["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)}}),n.checksum=(0,s.getStringOption)(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]),n.dataColumnCount=(0,s.getInteger)({data:e.dataColumnCount,defaultValue:-1,validate:function(e){return e>=0}}),n.dataLength=(0,s.getInteger)({data:e.dataLength,defaultValue:-1,validate:function(e){return e>=0}}),n.dataPrep=(0,s.getStringOption)(e.dataPrep,["none","flateCompress"]),n.dataRowCount=(0,s.getInteger)({data:e.dataRowCount,defaultValue:-1,validate:function(e){return e>=0}}),n.endChar=e.endChar||"",n.errorCorrectionLevel=(0,s.getInteger)({data:e.errorCorrectionLevel,defaultValue:-1,validate:function(e){return e>=0&&e<=8}}),n.id=e.id||"",n.moduleHeight=(0,s.getMeasurement)(e.moduleHeight,"5mm"),n.moduleWidth=(0,s.getMeasurement)(e.moduleWidth,"0.25mm"),n.printCheckDigit=(0,s.getInteger)({data:e.printCheckDigit,defaultValue:0,validate:function(e){return 1===e}}),n.rowColumnRatio=(0,s.getRatio)(e.rowColumnRatio),n.startChar=e.startChar||"",n.textLocation=(0,s.getStringOption)(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]),n.truncate=(0,s.getInteger)({data:e.truncate,defaultValue:0,validate:function(e){return 1===e}}),n.type=(0,s.getStringOption)(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]),n.upsMode=(0,s.getStringOption)(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]),n.use=e.use||"",n.usehref=e.usehref||"",n.wideNarrowRatio=(0,s.getRatio)(e.wideNarrowRatio),n.encrypt=null,n.extras=null,n}return v(r)}(n.XFAObject),K=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"bind",!0)).match=(0,s.getStringOption)(e.match,["once","dataRef","global","none"]),n.ref=e.ref||"",n.picture=null,n}return v(r)}(n.XFAObject),J=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"bindItems")).connection=e.connection||"",n.labelRef=e.labelRef||"",n.ref=e.ref||"",n.valueRef=e.valueRef||"",n}return v(r)}(n.XFAObject);t.BindItems=J;var Z=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"bookend")).id=e.id||"",n.leader=e.leader||"",n.trailer=e.trailer||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),Q=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"boolean")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$toHTML,value:function(e){return U(1===this[n.$content]?"1":"0")}}]),r}(n.Option01),ee=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"border",!0)).break=(0,s.getStringOption)(e.break,["close","open"]),a.hand=(0,s.getStringOption)(e.hand,["even","left","right"]),a.id=e.id||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.corner=new n.XFAObjectArray(4),a.edge=new n.XFAObjectArray(4),a.extras=null,a.fill=null,a.margin=null,a}return v(r,[{key:n.$getExtra,value:function(){if(!this[n.$extra]){var e=this.edge.children.slice();if(e.length<4)for(var t=e.at(-1)||new Ae({}),r=e.length;r<4;r++)e.push(t);var a=e.map((function(e){return e.thickness})),i=[0,0,0,0];this.margin&&(i[0]=this.margin.topInset,i[1]=this.margin.rightInset,i[2]=this.margin.bottomInset,i[3]=this.margin.leftInset),this[n.$extra]={widths:a,insets:i,edges:e}}return this[n.$extra]}},{key:n.$toStyle,value:function(){var e=this[n.$getExtra]().edges.map((function(e){var t=e[n.$toStyle]();return t.color=t.color||"#000000",t})),t=Object.create(null);if(this.margin&&Object.assign(t,this.margin[n.$toStyle]()),this.fill&&"visible"===this.fill.presence&&Object.assign(t,this.fill[n.$toStyle]()),this.corner.children.some((function(e){return 0!==e.radius}))){var r=this.corner.children.map((function(e){return e[n.$toStyle]()}));if(2===r.length||3===r.length)for(var a=r.at(-1),i=r.length;i<4;i++)r.push(a);t.borderRadius=r.map((function(e){return e.radius})).join(" ")}switch(this.presence){case"invisible":case"hidden":t.borderStyle="";break;case"inactive":t.borderStyle="none";break;default:t.borderStyle=e.map((function(e){return e.style})).join(" ")}return t.borderWidth=e.map((function(e){return e.width})).join(" "),t.borderColor=e.map((function(e){return e.color})).join(" "),t}}]),r}(n.XFAObject),te=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"break",!0)).after=(0,s.getStringOption)(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]),n.afterTarget=e.afterTarget||"",n.before=(0,s.getStringOption)(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]),n.beforeTarget=e.beforeTarget||"",n.bookendLeader=e.bookendLeader||"",n.bookendTrailer=e.bookendTrailer||"",n.id=e.id||"",n.overflowLeader=e.overflowLeader||"",n.overflowTarget=e.overflowTarget||"",n.overflowTrailer=e.overflowTrailer||"",n.startNew=(0,s.getInteger)({data:e.startNew,defaultValue:0,validate:function(e){return 1===e}}),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r)}(n.XFAObject),re=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"breakAfter",!0)).id=e.id||"",n.leader=e.leader||"",n.startNew=(0,s.getInteger)({data:e.startNew,defaultValue:0,validate:function(e){return 1===e}}),n.target=e.target||"",n.targetType=(0,s.getStringOption)(e.targetType,["auto","contentArea","pageArea"]),n.trailer=e.trailer||"",n.use=e.use||"",n.usehref=e.usehref||"",n.script=null,n}return v(r)}(n.XFAObject),ne=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"breakBefore",!0)).id=e.id||"",n.leader=e.leader||"",n.startNew=(0,s.getInteger)({data:e.startNew,defaultValue:0,validate:function(e){return 1===e}}),n.target=e.target||"",n.targetType=(0,s.getStringOption)(e.targetType,["auto","contentArea","pageArea"]),n.trailer=e.trailer||"",n.use=e.use||"",n.usehref=e.usehref||"",n.script=null,n}return v(r,[{key:n.$toHTML,value:function(e){return this[n.$extra]={},s.HTMLResult.FAILURE}}]),r}(n.XFAObject),ae=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"button",!0)).highlight=(0,s.getStringOption)(e.highlight,["inverted","none","outline","push"]),n.id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t,r=this[n.$getParent]()[n.$getParent](),a={name:"button",attributes:{id:this[n.$uid],class:["xfaButton"],style:{}},children:[]},i=O(r.event.children);try{for(i.s();!(t=i.n()).done;){var c=t.value;if("click"===c.activity&&c.script){var u=(0,l.recoverJsURL)(c.script[n.$content]);if(u){var f=(0,o.fixURL)(u.url);f&&a.children.push({name:"a",attributes:{id:"link"+this[n.$uid],href:f,newWindow:u.newWindow,class:["xfaLink"],style:{}},children:[]})}}}}catch(e){i.e(e)}finally{i.f()}return s.HTMLResult.success(a)}}]),r}(n.XFAObject),ie=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"calculate",!0)).id=e.id||"",n.override=(0,s.getStringOption)(e.override,["disabled","error","ignore","warning"]),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.message=null,n.script=null,n}return v(r)}(n.XFAObject),oe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"caption",!0)).id=e.id||"",n.placement=(0,s.getStringOption)(e.placement,["left","bottom","inline","right","top"]),n.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),n.reserve=Math.ceil((0,s.getMeasurement)(e.reserve)),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.font=null,n.margin=null,n.para=null,n.value=null,n}return v(r,[{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){_(this,e)}))},{key:n.$getExtra,value:function(e){if(!this[n.$extra]){var t=e.width,r=e.height;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":r=this.reserve<=0?r:this.reserve}this[n.$extra]=(0,o.layoutNode)(this,{width:t,height:r})}return this[n.$extra]}},{key:n.$toHTML,value:function(e){if(!this.value)return s.HTMLResult.EMPTY;this[n.$pushPara]();var t=this.value[n.$toHTML](e).html;if(!t)return this[n.$popPara](),s.HTMLResult.EMPTY;var r=this.reserve;if(this.reserve<=0){var a=this[n.$getExtra](e),i=a.w,c=a.h;switch(this.placement){case"left":case"right":case"inline":this.reserve=i;break;case"top":case"bottom":this.reserve=c}}var u=[];"string"==typeof t?u.push({name:"#text",value:t}):u.push(t);var l=(0,o.toStyle)(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(l.width=(0,o.measureToString)(this.reserve));break;case"top":case"bottom":this.reserve>0&&(l.height=(0,o.measureToString)(this.reserve))}return(0,o.setPara)(this,null,t),this[n.$popPara](),this.reserve=r,s.HTMLResult.success({name:"div",attributes:{style:l,class:["xfaCaption"]},children:u})}}]),r}(n.XFAObject),se=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"certificate")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),ce=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"certificates",!0)).credentialServerPolicy=(0,s.getStringOption)(e.credentialServerPolicy,["optional","required"]),n.id=e.id||"",n.url=e.url||"",n.urlPolicy=e.urlPolicy||"",n.use=e.use||"",n.usehref=e.usehref||"",n.encryption=null,n.issuers=null,n.keyUsage=null,n.oids=null,n.signing=null,n.subjectDNs=null,n}return v(r)}(n.XFAObject),ue=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"checkButton",!0)).id=e.id||"",n.mark=(0,s.getStringOption)(e.mark,["default","check","circle","cross","diamond","square","star"]),n.shape=(0,s.getStringOption)(e.shape,["square","round"]),n.size=(0,s.getMeasurement)(e.size,"10pt"),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t,r,a,i=(0,o.toStyle)("margin"),c=(0,o.measureToString)(this.size);i.width=i.height=c;var u,l=this[n.$getParent]()[n.$getParent](),f=l.items.children.length&&l.items.children[0][n.$toHTML]().html||[],h={on:(void 0!==f[0]?f[0]:"on").toString(),off:(void 0!==f[1]?f[1]:"off").toString()},d=(l.value&&l.value[n.$text]()||"off")===h.on||void 0,p=l[n.$getSubformParent](),g=l[n.$uid];p instanceof Re?(a=p[n.$uid],t="radio",r="xfaRadio",u=p[n.$data]&&p[n.$data][n.$uid]||p[n.$uid]):(t="checkbox",r="xfaCheckbox",u=l[n.$data]&&l[n.$data][n.$uid]||l[n.$uid]);var v={name:"input",attributes:{class:[r],style:i,fieldId:g,dataId:u,type:t,checked:d,xfaOn:h.on,xfaOff:h.off,"aria-label":B(l),"aria-required":!1}};return a&&(v.attributes.name=a),R(l)&&(v.attributes["aria-required"]=!0,v.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[v]})}}]),r}(n.XFAObject),le=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"choiceList",!0)).commitOn=(0,s.getStringOption)(e.commitOn,["select","exit"]),n.id=e.id||"",n.open=(0,s.getStringOption)(e.open,["userControl","always","multiSelect","onEntry"]),n.textEntry=(0,s.getInteger)({data:e.textEntry,defaultValue:0,validate:function(e){return 1===e}}),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"border","margin"),r=this[n.$getParent]()[n.$getParent](),a=r.font&&r.font.size||10,i={fontSize:"calc(".concat(a,"px * var(--scale-factor))")},c=[];if(r.items.children.length>0){var u=r.items,l=0,f=0;2===u.children.length&&(f=1-(l=u.children[0].save));for(var h=u.children[l][n.$toHTML]().html,d=u.children[f][n.$toHTML]().html,p=!1,g=r.value&&r.value[n.$text]()||"",v=0,y=h.length;v=0}}),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),de=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"connect",!0)).connection=e.connection||"",n.id=e.id||"",n.ref=e.ref||"",n.usage=(0,s.getStringOption)(e.usage,["exportAndImport","exportOnly","importOnly"]),n.use=e.use||"",n.usehref=e.usehref||"",n.picture=null,n}return v(r)}(n.XFAObject),pe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"contentArea",!0)).h=(0,s.getMeasurement)(e.h),n.id=e.id||"",n.name=e.name||"",n.relevant=(0,s.getRelevant)(e.relevant),n.use=e.use||"",n.usehref=e.usehref||"",n.w=(0,s.getMeasurement)(e.w),n.x=(0,s.getMeasurement)(e.x,"0pt"),n.y=(0,s.getMeasurement)(e.y,"0pt"),n.desc=null,n.extras=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t={left:(0,o.measureToString)(this.x),top:(0,o.measureToString)(this.y),width:(0,o.measureToString)(this.w),height:(0,o.measureToString)(this.h)},r=["xfaContentarea"];return(0,o.isPrintOnly)(this)&&r.push("xfaPrintOnly"),s.HTMLResult.success({name:"div",children:[],attributes:{style:t,class:r,id:this[n.$uid]}})}}]),r}(n.XFAObject),ge=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"corner",!0)).id=e.id||"",n.inverted=(0,s.getInteger)({data:e.inverted,defaultValue:0,validate:function(e){return 1===e}}),n.join=(0,s.getStringOption)(e.join,["square","round"]),n.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),n.radius=(0,s.getMeasurement)(e.radius),n.stroke=(0,s.getStringOption)(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),n.thickness=(0,s.getMeasurement)(e.thickness,"0.5pt"),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"visibility");return e.radius=(0,o.measureToString)("square"===this.join?0:this.radius),e}}]),r}(n.XFAObject),ve=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"date")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}},{key:n.$toHTML,value:function(e){return U(this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),ye=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"dateTime")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}},{key:n.$toHTML,value:function(e){return U(this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),me=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"dateTimeEdit",!0)).hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.picker=(0,s.getStringOption)(e.picker,["host","none"]),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.comb=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"border","font","margin"),r=this[n.$getParent]()[n.$getParent](),a={name:"input",attributes:{type:"text",fieldId:r[n.$uid],dataId:r[n.$data]&&r[n.$data][n.$uid]||r[n.$uid],class:["xfaTextfield"],style:t,"aria-label":B(r),"aria-required":!1}};return R(r)&&(a.attributes["aria-required"]=!0,a.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}]),r}(n.XFAObject),be=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"decimal")).fracDigits=(0,s.getInteger)({data:e.fracDigits,defaultValue:2,validate:function(e){return!0}}),n.id=e.id||"",n.leadDigits=(0,s.getInteger)({data:e.leadDigits,defaultValue:-1,validate:function(e){return!0}}),n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=parseFloat(this[n.$content].trim());this[n.$content]=isNaN(e)?null:e}},{key:n.$toHTML,value:function(e){return U(null!==this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),we=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"defaultUi",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r)}(n.XFAObject),ke=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"desc",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Se=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"])).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.OptionObject),xe=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"digestMethods",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.digestMethod=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Oe=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"draw",!0)).anchorType=(0,s.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),a.colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.locale=e.locale||"",a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.rotate=(0,s.getInteger)({data:e.rotate,defaultValue:0,validate:function(e){return e%90==0}}),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.border=null,a.caption=null,a.desc=null,a.extras=null,a.font=null,a.keep=null,a.margin=null,a.para=null,a.traversal=null,a.ui=null,a.value=null,a.setProperty=new n.XFAObjectArray,a}return v(r,[{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){_(this,e)}))},{key:n.$toHTML,value:function(e){if(N(this),"hidden"===this.presence||"inactive"===this.presence)return s.HTMLResult.EMPTY;(0,o.fixDimensions)(this),this[n.$pushPara]();var t=this.w,r=this.h,a=(0,o.layoutNode)(this,e),c=a.w,u=a.h,l=a.isBroken;if(c&&""===this.w){if(l&&this[n.$getSubformParent]()[n.$isThereMoreWidth]())return this[n.$popPara](),s.HTMLResult.FAILURE;this.w=c}if(u&&""===this.h&&(this.h=u),$(this),!(0,i.checkDimensions)(this,e))return this.w=t,this.h=r,this[n.$popPara](),s.HTMLResult.FAILURE;X(this);var f=(0,o.toStyle)(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");(0,o.setMinMaxDimensions)(this,f),f.margin&&(f.padding=f.margin,delete f.margin);var h=["xfaDraw"];this.font&&h.push("xfaFont"),(0,o.isPrintOnly)(this)&&h.push("xfaPrintOnly");var d={style:f,id:this[n.$uid],class:h};this.name&&(d.xfaName=this.name);var p={name:"div",attributes:d,children:[]};D(this,d);var g=(0,o.computeBbox)(this,p,e),v=this.value?this.value[n.$toHTML](e).html:null;return null===v?(this.w=t,this.h=r,this[n.$popPara](),s.HTMLResult.success((0,o.createWrapper)(this,p),g)):(p.children.push(v),(0,o.setPara)(this,f,v),this.w=t,this.h=r,this[n.$popPara](),s.HTMLResult.success((0,o.createWrapper)(this,p),g))}}]),r}(n.XFAObject),Ae=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"edge",!0)).cap=(0,s.getStringOption)(e.cap,["square","butt","round"]),n.id=e.id||"",n.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),n.stroke=(0,s.getStringOption)(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),n.thickness=(0,s.getMeasurement)(e.thickness,"0.5pt"),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"visibility");if(Object.assign(e,{linecap:this.cap,width:(0,o.measureToString)(this.thickness),color:this.color?this.color[n.$toStyle]():"#000000",style:""}),"visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}]),r}(n.XFAObject),Ce=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"])).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.OptionObject),Fe=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"encodings",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.encoding=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Pe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encrypt",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.certificate=null,n}return v(r)}(n.XFAObject),Te=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encryptData",!0)).id=e.id||"",n.operation=(0,s.getStringOption)(e.operation,["encrypt","decrypt"]),n.target=e.target||"",n.use=e.use||"",n.usehref=e.usehref||"",n.filter=null,n.manifest=null,n}return v(r)}(n.XFAObject),Ie=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"encryption",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.certificate=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Ee=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"])).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.OptionObject),je=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"encryptionMethods",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.encryptionMethod=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Me=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"event",!0)).activity=(0,s.getStringOption)(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]),n.id=e.id||"",n.listen=(0,s.getStringOption)(e.listen,["refOnly","refAndDescendents"]),n.name=e.name||"",n.ref=e.ref||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.encryptData=null,n.execute=null,n.script=null,n.signData=null,n.submit=null,n}return v(r)}(n.XFAObject),_e=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"exData")).contentType=e.contentType||"",n.href=e.href||"",n.id=e.id||"",n.maxLength=(0,s.getInteger)({data:e.maxLength,defaultValue:-1,validate:function(e){return e>=-1}}),n.name=e.name||"",n.rid=e.rid||"",n.transferEncoding=(0,s.getStringOption)(e.transferEncoding,["none","base64","package"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$isCDATAXml,value:function(){return"text/html"===this.contentType}},{key:n.$onChild,value:function(e){return("text/html"===this.contentType&&e[n.$namespaceId]===a.NamespaceIds.xhtml.id||"text/xml"===this.contentType)&&(this[n.$content]=e,!0)}},{key:n.$toHTML,value:function(e){return"text/html"===this.contentType&&this[n.$content]?this[n.$content][n.$toHTML](e):s.HTMLResult.EMPTY}}]),r}(n.ContentObject),Le=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"exObject",!0)).archive=e.archive||"",a.classId=e.classId||"",a.codeBase=e.codeBase||"",a.codeType=e.codeType||"",a.id=e.id||"",a.name=e.name||"",a.use=e.use||"",a.usehref=e.usehref||"",a.extras=null,a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Re=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"exclGroup",!0)).access=(0,s.getStringOption)(e.access,["open","nonInteractive","protected","readOnly"]),a.accessKey=e.accessKey||"",a.anchorType=(0,s.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),a.colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.layout=(0,s.getStringOption)(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.bind=null,a.border=null,a.calculate=null,a.caption=null,a.desc=null,a.extras=null,a.margin=null,a.para=null,a.traversal=null,a.validate=null,a.connect=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a}return v(r,[{key:n.$isBindable,value:function(){return!0}},{key:n.$hasSettableValue,value:function(){return!0}},{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){var t,r=O(this.field.children);try{for(r.s();!(t=r.n()).done;){var a=t.value;if(!a.value){var i=new Vt({});a[n.$appendChild](i),a.value=i}a.value[n.$setValue](e)}}catch(e){r.e(e)}finally{r.f()}}))},{key:n.$isThereMoreWidth,value:function(){return this.layout.endsWith("-tb")&&0===this[n.$extra].attempt&&this[n.$extra].numberInLine>0||this[n.$getParent]()[n.$isThereMoreWidth]()}},{key:n.$isSplittable,value:function(){var e=this[n.$getSubformParent]();return!!e[n.$isSplittable]()&&(void 0!==this[n.$extra]._isSplittable?this[n.$extra]._isSplittable:"position"===this.layout||this.layout.includes("row")?(this[n.$extra]._isSplittable=!1,!1):!(e.layout&&e.layout.endsWith("-tb")&&0!==e[n.$extra].numberInLine||(this[n.$extra]._isSplittable=!0,0)))}},{key:n.$flushHTML,value:function(){return(0,i.flushHTML)(this)}},{key:n.$addHTML,value:function(e,t){(0,i.addHTML)(this,e,t)}},{key:n.$getAvailableSpace,value:function(){return(0,i.getAvailableSpace)(this)}},{key:n.$toHTML,value:function(e){if(N(this),"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return s.HTMLResult.EMPTY;(0,o.fixDimensions)(this);var t=[],r={id:this[n.$uid],class:[]};(0,o.setAccess)(this,r.class),this[n.$extra]||(this[n.$extra]=Object.create(null)),Object.assign(this[n.$extra],{children:t,attributes:r,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});var a=this[n.$isSplittable]();if(a||$(this),!(0,i.checkDimensions)(this,e))return s.HTMLResult.FAILURE;var c=new Set(["field"]);if(this.layout.includes("row")){var u=this[n.$getSubformParent]().columnWidths;Array.isArray(u)&&u.length>0&&(this[n.$extra].columnWidths=u,this[n.$extra].currentColumn=0)}var l=(0,o.toStyle)(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),f=["xfaExclgroup"],h=(0,o.layoutClass)(this);h&&f.push(h),(0,o.isPrintOnly)(this)&&f.push("xfaPrintOnly"),r.style=l,r.class=f,this.name&&(r.xfaName=this.name),this[n.$pushPara]();for(var d="lr-tb"===this.layout||"rl-tb"===this.layout,p=d?2:1;this[n.$extra].attempt=1||-1===e}}),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.locale=e.locale||"",a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.rotate=(0,s.getInteger)({data:e.rotate,defaultValue:0,validate:function(e){return e%90==0}}),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.bind=null,a.border=null,a.calculate=null,a.caption=null,a.desc=null,a.extras=null,a.font=null,a.format=null,a.items=new n.XFAObjectArray(2),a.keep=null,a.margin=null,a.para=null,a.traversal=null,a.ui=null,a.validate=null,a.value=null,a.bindItems=new n.XFAObjectArray,a.connect=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a}return v(r,[{key:n.$isBindable,value:function(){return!0}},{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){_(this,e)}))},{key:n.$toHTML,value:function(e){if(N(this),!this.ui){var t;switch(this.ui=new zt({}),this.ui[n.$globalData]=this[n.$globalData],this[n.$appendChild](this.ui),this.items.children.length){case 0:t=new Ut({}),this.ui.textEdit=t;break;case 1:t=new ue({}),this.ui.checkButton=t;break;case 2:t=new le({}),this.ui.choiceList=t}this.ui[n.$appendChild](t)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return s.HTMLResult.EMPTY;this.caption&&delete this.caption[n.$extra],this[n.$pushPara]();var r=this.caption?this.caption[n.$toHTML](e).html:null,a=this.w,c=this.h,l=0,f=0;this.margin&&(l=this.margin.leftInset+this.margin.rightInset,f=this.margin.topInset+this.margin.bottomInset);var h=null;if(""===this.w||""===this.h){var d=null,g=null,v=0,y=0;if(this.ui.checkButton)v=y=this.ui.checkButton.size;else{var m=(0,o.layoutNode)(this,e),b=m.w,w=m.h;null!==b?(v=b,y=w):y=(0,u.getMetrics)(this.font,!0).lineNoGap}if(v+=(h=j(this.ui[n.$getExtra]())).w,y+=h.h,this.caption){var k=this.caption[n.$getExtra](e),S=k.w,x=k.h;if(k.isBroken&&this[n.$getSubformParent]()[n.$isThereMoreWidth]())return this[n.$popPara](),s.HTMLResult.FAILURE;switch(d=S,g=x,this.caption.placement){case"left":case"right":case"inline":d+=v;break;case"top":case"bottom":g+=y}}else d=v,g=y;d&&""===this.w&&(d+=l,this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1=1&&e<=5}}),n.appearanceFilter=null,n.certificates=null,n.digestMethods=null,n.encodings=null,n.encryptionMethods=null,n.handler=null,n.lockDocument=null,n.mdp=null,n.reasons=null,n.timeStamp=null,n}return v(r)}(n.XFAObject),Xe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"float")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=parseFloat(this[n.$content].trim());this[n.$content]=isNaN(e)?null:e}},{key:n.$toHTML,value:function(e){return U(null!==this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),He=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"font",!0)).baselineShift=(0,s.getMeasurement)(e.baselineShift),n.fontHorizontalScale=(0,s.getFloat)({data:e.fontHorizontalScale,defaultValue:100,validate:function(e){return e>=0}}),n.fontVerticalScale=(0,s.getFloat)({data:e.fontVerticalScale,defaultValue:100,validate:function(e){return e>=0}}),n.id=e.id||"",n.kerningMode=(0,s.getStringOption)(e.kerningMode,["none","pair"]),n.letterSpacing=(0,s.getMeasurement)(e.letterSpacing,"0"),n.lineThrough=(0,s.getInteger)({data:e.lineThrough,defaultValue:0,validate:function(e){return 1===e||2===e}}),n.lineThroughPeriod=(0,s.getStringOption)(e.lineThroughPeriod,["all","word"]),n.overline=(0,s.getInteger)({data:e.overline,defaultValue:0,validate:function(e){return 1===e||2===e}}),n.overlinePeriod=(0,s.getStringOption)(e.overlinePeriod,["all","word"]),n.posture=(0,s.getStringOption)(e.posture,["normal","italic"]),n.size=(0,s.getMeasurement)(e.size,"10pt"),n.typeface=e.typeface||"Courier",n.underline=(0,s.getInteger)({data:e.underline,defaultValue:0,validate:function(e){return 1===e||2===e}}),n.underlinePeriod=(0,s.getStringOption)(e.underlinePeriod,["all","word"]),n.use=e.use||"",n.usehref=e.usehref||"",n.weight=(0,s.getStringOption)(e.weight,["normal","bold"]),n.extras=null,n.fill=null,n}return v(r,[{key:n.$clean,value:function(e){d(k(r.prototype),n.$clean,this).call(this,e),this[n.$globalData].usedTypefaces.add(this.typeface)}},{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"fill"),t=e.color;return t&&("#000000"===t?delete e.color:t.startsWith("#")||(e.background=t,e.backgroundClip="text",e.color="transparent")),this.baselineShift&&(e.verticalAlign=(0,o.measureToString)(this.baselineShift)),e.fontKerning="none"===this.kerningMode?"none":"normal",e.letterSpacing=(0,o.measureToString)(this.letterSpacing),0!==this.lineThrough&&(e.textDecoration="line-through",2===this.lineThrough&&(e.textDecorationStyle="double")),0!==this.overline&&(e.textDecoration="overline",2===this.overline&&(e.textDecorationStyle="double")),e.fontStyle=this.posture,e.fontSize=(0,o.measureToString)(.99*this.size),(0,o.setFontFamily)(this,this,this[n.$globalData].fontFinder,e),0!==this.underline&&(e.textDecoration="underline",2===this.underline&&(e.textDecorationStyle="double")),e.fontWeight=this.weight,e}}]),r}(n.XFAObject),qe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"format",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.picture=null,n}return v(r)}(n.XFAObject),Ge=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"handler")).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),ze=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"hyphenation")).excludeAllCaps=(0,s.getInteger)({data:e.excludeAllCaps,defaultValue:0,validate:function(e){return 1===e}}),n.excludeInitialCap=(0,s.getInteger)({data:e.excludeInitialCap,defaultValue:0,validate:function(e){return 1===e}}),n.hyphenate=(0,s.getInteger)({data:e.hyphenate,defaultValue:0,validate:function(e){return 1===e}}),n.id=e.id||"",n.pushCharacterCount=(0,s.getInteger)({data:e.pushCharacterCount,defaultValue:3,validate:function(e){return e>=0}}),n.remainCharacterCount=(0,s.getInteger)({data:e.remainCharacterCount,defaultValue:3,validate:function(e){return e>=0}}),n.use=e.use||"",n.usehref=e.usehref||"",n.wordCharacterCount=(0,s.getInteger)({data:e.wordCharacterCount,defaultValue:7,validate:function(e){return e>=0}}),n}return v(r)}(n.XFAObject),We=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"image")).aspect=(0,s.getStringOption)(e.aspect,["fit","actual","height","none","width"]),n.contentType=e.contentType||"",n.href=e.href||"",n.id=e.id||"",n.name=e.name||"",n.transferEncoding=(0,s.getStringOption)(e.transferEncoding,["base64","none","package"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$toHTML,value:function(){if(this.contentType&&!I.has(this.contentType.toLowerCase()))return s.HTMLResult.EMPTY;var e=this[n.$globalData].images&&this[n.$globalData].images.get(this.href);if(!e&&(this.href||!this[n.$content]))return s.HTMLResult.EMPTY;if(e||"base64"!==this.transferEncoding||(e=(0,c.stringToBytes)(atob(this[n.$content]))),!e)return s.HTMLResult.EMPTY;if(!this.contentType){for(var t=0,r=E;ti.length&&i.every((function(t,r){return t===e[r]}))){this.contentType=o;break}}if(!this.contentType)return s.HTMLResult.EMPTY}var u,l=new Blob([e],{type:this.contentType});switch(this.aspect){case"fit":case"actual":break;case"height":u={height:"100%",objectFit:"fill"};break;case"none":u={width:"100%",height:"100%",objectFit:"fill"};break;case"width":u={width:"100%",objectFit:"fill"}}var f=this[n.$getParent]();return s.HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:u,src:URL.createObjectURL(l),alt:f?B(f[n.$getParent]()):null}})}}]),r}(n.StringObject),Ve=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"imageEdit",!0)).data=(0,s.getStringOption)(e.data,["link","embed"]),n.id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){return"embed"===this.data?s.HTMLResult.success({name:"div",children:[],attributes:{}}):s.HTMLResult.EMPTY}}]),r}(n.XFAObject),Ye=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"integer")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=parseInt(this[n.$content].trim(),10);this[n.$content]=isNaN(e)?null:e}},{key:n.$toHTML,value:function(e){return U(null!==this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),Ke=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"issuers",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.certificate=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Je=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"items",!0)).id=e.id||"",a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.ref=e.ref||"",a.save=(0,s.getInteger)({data:e.save,defaultValue:0,validate:function(e){return 1===e}}),a.use=e.use||"",a.usehref=e.usehref||"",a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r,[{key:n.$toHTML,value:function(){var e,t=[],r=O(this[n.$getChildren]());try{for(r.s();!(e=r.n()).done;){var a=e.value;t.push(a[n.$text]())}}catch(e){r.e(e)}finally{r.f()}return s.HTMLResult.success(t)}}]),r}(n.XFAObject);t.Items=Je;var Ze=function(e){m(r,e);var t=w(r);function r(e){var n;y(this,r),(n=t.call(this,F,"keep",!0)).id=e.id||"";var a=["none","contentArea","pageArea"];return n.intact=(0,s.getStringOption)(e.intact,a),n.next=(0,s.getStringOption)(e.next,a),n.previous=(0,s.getStringOption)(e.previous,a),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r)}(n.XFAObject),Qe=function(e){m(r,e);var t=w(r);function r(e){var n;y(this,r);var a=["","yes","no"];return(n=t.call(this,F,"keyUsage")).crlSign=(0,s.getStringOption)(e.crlSign,a),n.dataEncipherment=(0,s.getStringOption)(e.dataEncipherment,a),n.decipherOnly=(0,s.getStringOption)(e.decipherOnly,a),n.digitalSignature=(0,s.getStringOption)(e.digitalSignature,a),n.encipherOnly=(0,s.getStringOption)(e.encipherOnly,a),n.id=e.id||"",n.keyAgreement=(0,s.getStringOption)(e.keyAgreement,a),n.keyCertSign=(0,s.getStringOption)(e.keyCertSign,a),n.keyEncipherment=(0,s.getStringOption)(e.keyEncipherment,a),n.nonRepudiation=(0,s.getStringOption)(e.nonRepudiation,a),n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),et=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"line",!0)).hand=(0,s.getStringOption)(e.hand,["even","left","right"]),n.id=e.id||"",n.slope=(0,s.getStringOption)(e.slope,["\\\\","/"]),n.use=e.use||"",n.usehref=e.usehref||"",n.edge=null,n}return v(r,[{key:n.$toHTML,value:function(){var e,t,r,a,i=this[n.$getParent]()[n.$getParent](),c=this.edge||new Ae({}),u=c[n.$toStyle](),l=Object.create(null),f="visible"===c.presence?c.thickness:0;l.strokeWidth=(0,o.measureToString)(f),l.stroke=u.color;var h="100%",d="100%";i.w<=f?(e="50%",t=0,r="50%",a="100%",h=l.strokeWidth):i.h<=f?(e=0,t="50%",r="100%",a="50%",d=l.strokeWidth):"\\\\"===this.slope?(e=0,t=0,r="100%",a="100%"):(e=0,t="100%",r="100%",a=0);var p={name:"svg",children:[{name:"line",attributes:{xmlns:P,x1:e,y1:t,x2:r,y2:a,style:l}}],attributes:{xmlns:P,width:h,height:d,style:{overflow:"visible"}}};return M(i)?s.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[p]}):(p.attributes.style.position="absolute",s.HTMLResult.success(p))}}]),r}(n.XFAObject),tt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"linear",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["toRight","toBottom","toLeft","toTop"]),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){e=e?e[n.$toStyle]():"#FFFFFF";var t=this.type.replace(/([RBLT])/," $1").toLowerCase(),r=this.color?this.color[n.$toStyle]():"#000000";return"linear-gradient(".concat(t,", ").concat(e,", ").concat(r,")")}}]),r}(n.XFAObject),rt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"lockDocument")).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){this[n.$content]=(0,s.getStringOption)(this[n.$content],["auto","0","1"])}}]),r}(n.ContentObject),nt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"manifest",!0)).action=(0,s.getStringOption)(e.action,["include","all","exclude"]),a.id=e.id||"",a.name=e.name||"",a.use=e.use||"",a.usehref=e.usehref||"",a.extras=null,a.ref=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),at=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"margin",!0)).bottomInset=(0,s.getMeasurement)(e.bottomInset,"0"),n.id=e.id||"",n.leftInset=(0,s.getMeasurement)(e.leftInset,"0"),n.rightInset=(0,s.getMeasurement)(e.rightInset,"0"),n.topInset=(0,s.getMeasurement)(e.topInset,"0"),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(){return{margin:(0,o.measureToString)(this.topInset)+" "+(0,o.measureToString)(this.rightInset)+" "+(0,o.measureToString)(this.bottomInset)+" "+(0,o.measureToString)(this.leftInset)}}}]),r}(n.XFAObject),it=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"mdp")).id=e.id||"",n.permissions=(0,s.getInteger)({data:e.permissions,defaultValue:2,validate:function(e){return 1===e||3===e}}),n.signatureType=(0,s.getStringOption)(e.signatureType,["filler","author"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),ot=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"medium")).id=e.id||"",n.imagingBBox=(0,s.getBBox)(e.imagingBBox),n.long=(0,s.getMeasurement)(e.long),n.orientation=(0,s.getStringOption)(e.orientation,["portrait","landscape"]),n.short=(0,s.getMeasurement)(e.short),n.stock=e.stock||"",n.trayIn=(0,s.getStringOption)(e.trayIn,["auto","delegate","pageFront"]),n.trayOut=(0,s.getStringOption)(e.trayOut,["auto","delegate"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),st=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"message",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.text=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),ct=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"numericEdit",!0)).hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.comb=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"border","font","margin"),r=this[n.$getParent]()[n.$getParent](),a={name:"input",attributes:{type:"text",fieldId:r[n.$uid],dataId:r[n.$data]&&r[n.$data][n.$uid]||r[n.$uid],class:["xfaTextfield"],style:t,"aria-label":B(r),"aria-required":!1}};return R(r)&&(a.attributes["aria-required"]=!0,a.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}]),r}(n.XFAObject),ut=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"occur",!0)).id=e.id||"",n.initial=""!==e.initial?(0,s.getInteger)({data:e.initial,defaultValue:"",validate:function(e){return!0}}):"",n.max=""!==e.max?(0,s.getInteger)({data:e.max,defaultValue:1,validate:function(e){return!0}}):"",n.min=""!==e.min?(0,s.getInteger)({data:e.min,defaultValue:1,validate:function(e){return!0}}):"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$clean,value:function(){var e=this[n.$getParent](),t=this.min;""===this.min&&(this.min=e instanceof dt||e instanceof pt?0:1),""===this.max&&(this.max=""===t?e instanceof dt||e instanceof pt?-1:1:this.min),-1!==this.max&&this.max=0}}),n.preserve=e.preserve||"",n.radixOffset=e.radixOffset?(0,s.getMeasurement)(e.radixOffset,"0pt"):"",n.spaceAbove=e.spaceAbove?(0,s.getMeasurement)(e.spaceAbove,"0pt"):"",n.spaceBelow=e.spaceBelow?(0,s.getMeasurement)(e.spaceBelow,"0pt"):"",n.tabDefault=e.tabDefault?(0,s.getMeasurement)(n.tabDefault):"",n.tabStops=(e.tabStops||"").trim().split(/\\s+/).map((function(e,t){return t%2==1?(0,s.getMeasurement)(e):e})),n.textIndent=e.textIndent?(0,s.getMeasurement)(e.textIndent,"0pt"):"",n.use=e.use||"",n.usehref=e.usehref||"",n.vAlign=(0,s.getStringOption)(e.vAlign,["top","bottom","middle"]),n.widows=(0,s.getInteger)({data:e.widows,defaultValue:0,validate:function(e){return e>=0}}),n.hyphenation=null,n}return v(r,[{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"hAlign");return""!==this.marginLeft&&(e.paddingLeft=(0,o.measureToString)(this.marginLeft)),""!==this.marginRight&&(e.paddingight=(0,o.measureToString)(this.marginRight)),""!==this.spaceAbove&&(e.paddingTop=(0,o.measureToString)(this.spaceAbove)),""!==this.spaceBelow&&(e.paddingBottom=(0,o.measureToString)(this.spaceBelow)),""!==this.textIndent&&(e.textIndent=(0,o.measureToString)(this.textIndent),(0,o.fixTextIndent)(e)),this.lineHeight>0&&(e.lineHeight=(0,o.measureToString)(this.lineHeight)),""!==this.tabDefault&&(e.tabSize=(0,o.measureToString)(this.tabDefault)),this.tabStops.length,this.hyphenatation&&Object.assign(e,this.hyphenatation[n.$toStyle]()),e}}]),r}(n.XFAObject),vt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"passwordEdit",!0)).hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.passwordChar=e.passwordChar||"*",n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r)}(n.XFAObject),yt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"pattern",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){e=e?e[n.$toStyle]():"#FFFFFF";var t=this.color?this.color[n.$toStyle]():"#000000",r="repeating-linear-gradient",a="".concat(e,",").concat(e," ").concat(5,"px,").concat(t," ").concat(5,"px,").concat(t," ").concat(10,"px");switch(this.type){case"crossHatch":return"".concat(r,"(to top,").concat(a,") ").concat(r,"(to right,").concat(a,")");case"crossDiagonal":return"".concat(r,"(45deg,").concat(a,") ").concat(r,"(-45deg,").concat(a,")");case"diagonalLeft":return"".concat(r,"(45deg,").concat(a,")");case"diagonalRight":return"".concat(r,"(-45deg,").concat(a,")");case"horizontal":return"".concat(r,"(to top,").concat(a,")");case"vertical":return"".concat(r,"(to right,").concat(a,")")}return""}}]),r}(n.XFAObject),mt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"picture")).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),bt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"proto",!0)).appearanceFilter=new n.XFAObjectArray,a.arc=new n.XFAObjectArray,a.area=new n.XFAObjectArray,a.assist=new n.XFAObjectArray,a.barcode=new n.XFAObjectArray,a.bindItems=new n.XFAObjectArray,a.bookend=new n.XFAObjectArray,a.boolean=new n.XFAObjectArray,a.border=new n.XFAObjectArray,a.break=new n.XFAObjectArray,a.breakAfter=new n.XFAObjectArray,a.breakBefore=new n.XFAObjectArray,a.button=new n.XFAObjectArray,a.calculate=new n.XFAObjectArray,a.caption=new n.XFAObjectArray,a.certificate=new n.XFAObjectArray,a.certificates=new n.XFAObjectArray,a.checkButton=new n.XFAObjectArray,a.choiceList=new n.XFAObjectArray,a.color=new n.XFAObjectArray,a.comb=new n.XFAObjectArray,a.connect=new n.XFAObjectArray,a.contentArea=new n.XFAObjectArray,a.corner=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.dateTimeEdit=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.defaultUi=new n.XFAObjectArray,a.desc=new n.XFAObjectArray,a.digestMethod=new n.XFAObjectArray,a.digestMethods=new n.XFAObjectArray,a.draw=new n.XFAObjectArray,a.edge=new n.XFAObjectArray,a.encoding=new n.XFAObjectArray,a.encodings=new n.XFAObjectArray,a.encrypt=new n.XFAObjectArray,a.encryptData=new n.XFAObjectArray,a.encryption=new n.XFAObjectArray,a.encryptionMethod=new n.XFAObjectArray,a.encryptionMethods=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.exclGroup=new n.XFAObjectArray,a.execute=new n.XFAObjectArray,a.extras=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.fill=new n.XFAObjectArray,a.filter=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.font=new n.XFAObjectArray,a.format=new n.XFAObjectArray,a.handler=new n.XFAObjectArray,a.hyphenation=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.imageEdit=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.issuers=new n.XFAObjectArray,a.items=new n.XFAObjectArray,a.keep=new n.XFAObjectArray,a.keyUsage=new n.XFAObjectArray,a.line=new n.XFAObjectArray,a.linear=new n.XFAObjectArray,a.lockDocument=new n.XFAObjectArray,a.manifest=new n.XFAObjectArray,a.margin=new n.XFAObjectArray,a.mdp=new n.XFAObjectArray,a.medium=new n.XFAObjectArray,a.message=new n.XFAObjectArray,a.numericEdit=new n.XFAObjectArray,a.occur=new n.XFAObjectArray,a.oid=new n.XFAObjectArray,a.oids=new n.XFAObjectArray,a.overflow=new n.XFAObjectArray,a.pageArea=new n.XFAObjectArray,a.pageSet=new n.XFAObjectArray,a.para=new n.XFAObjectArray,a.passwordEdit=new n.XFAObjectArray,a.pattern=new n.XFAObjectArray,a.picture=new n.XFAObjectArray,a.radial=new n.XFAObjectArray,a.reason=new n.XFAObjectArray,a.reasons=new n.XFAObjectArray,a.rectangle=new n.XFAObjectArray,a.ref=new n.XFAObjectArray,a.script=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a.signData=new n.XFAObjectArray,a.signature=new n.XFAObjectArray,a.signing=new n.XFAObjectArray,a.solid=new n.XFAObjectArray,a.speak=new n.XFAObjectArray,a.stipple=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a.subjectDN=new n.XFAObjectArray,a.subjectDNs=new n.XFAObjectArray,a.submit=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.textEdit=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a.timeStamp=new n.XFAObjectArray,a.toolTip=new n.XFAObjectArray,a.traversal=new n.XFAObjectArray,a.traverse=new n.XFAObjectArray,a.ui=new n.XFAObjectArray,a.validate=new n.XFAObjectArray,a.value=new n.XFAObjectArray,a.variables=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),wt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"radial",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["toEdge","toCenter"]),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){e=e?e[n.$toStyle]():"#FFFFFF";var t=this.color?this.color[n.$toStyle]():"#000000",r="toEdge"===this.type?"".concat(e,",").concat(t):"".concat(t,",").concat(e);return"radial-gradient(circle at center, ".concat(r,")")}}]),r}(n.XFAObject),kt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"reason")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),St=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"reasons",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.reason=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),xt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"rectangle",!0)).hand=(0,s.getStringOption)(e.hand,["even","left","right"]),a.id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.corner=new n.XFAObjectArray(4),a.edge=new n.XFAObjectArray(4),a.fill=null,a}return v(r,[{key:n.$toHTML,value:function(){var e=this.edge.children.length?this.edge.children[0]:new Ae({}),t=e[n.$toStyle](),r=Object.create(null);this.fill&&"visible"===this.fill.presence?Object.assign(r,this.fill[n.$toStyle]()):r.fill="transparent",r.strokeWidth=(0,o.measureToString)("visible"===e.presence?e.thickness:0),r.stroke=t.color;var a=(this.corner.children.length?this.corner.children[0]:new ge({}))[n.$toStyle](),i={name:"svg",children:[{name:"rect",attributes:{xmlns:P,width:"100%",height:"100%",x:0,y:0,rx:a.radius,ry:a.radius,style:r}}],attributes:{xmlns:P,style:{overflow:"visible"},width:"100%",height:"100%"}};return M(this[n.$getParent]()[n.$getParent]())?s.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[i]}):(i.attributes.style.position="absolute",s.HTMLResult.success(i))}}]),r}(n.XFAObject),Ot=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"ref")).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),At=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"script")).binding=e.binding||"",n.contentType=e.contentType||"",n.id=e.id||"",n.name=e.name||"",n.runAt=(0,s.getStringOption)(e.runAt,["client","both","server"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),Ct=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"setProperty")).connection=e.connection||"",n.ref=e.ref||"",n.target=e.target||"",n}return v(r)}(n.XFAObject);t.SetProperty=Ct;var Ft=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"signData",!0)).id=e.id||"",n.operation=(0,s.getStringOption)(e.operation,["sign","clear","verify"]),n.ref=e.ref||"",n.target=e.target||"",n.use=e.use||"",n.usehref=e.usehref||"",n.filter=null,n.manifest=null,n}return v(r)}(n.XFAObject),Pt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"signature",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["PDF1.3","PDF1.6"]),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.filter=null,n.manifest=null,n.margin=null,n}return v(r)}(n.XFAObject),Tt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"signing",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.certificate=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),It=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"solid",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){return e?e[n.$toStyle]():"#FFFFFF"}}]),r}(n.XFAObject),Et=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"speak")).disable=(0,s.getInteger)({data:e.disable,defaultValue:0,validate:function(e){return 1===e}}),n.id=e.id||"",n.priority=(0,s.getStringOption)(e.priority,["custom","caption","name","toolTip"]),n.rid=e.rid||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),jt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"stipple",!0)).id=e.id||"",n.rate=(0,s.getInteger)({data:e.rate,defaultValue:50,validate:function(e){return e>=0&&e<=100}}),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){var t=this.rate/100;return c.Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}]),r}(n.XFAObject),Mt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"subform",!0)).access=(0,s.getStringOption)(e.access,["open","nonInteractive","protected","readOnly"]),a.allowMacro=(0,s.getInteger)({data:e.allowMacro,defaultValue:0,validate:function(e){return 1===e}}),a.anchorType=(0,s.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),a.colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.columnWidths=(e.columnWidths||"").trim().split(/\\s+/).map((function(e){return"-1"===e?-1:(0,s.getMeasurement)(e)})),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.layout=(0,s.getStringOption)(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),a.locale=e.locale||"",a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.mergeMode=(0,s.getStringOption)(e.mergeMode,["consumeData","matchTemplate"]),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.restoreState=(0,s.getStringOption)(e.restoreState,["manual","auto"]),a.scope=(0,s.getStringOption)(e.scope,["name","none"]),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.bind=null,a.bookend=null,a.border=null,a.break=null,a.calculate=null,a.desc=null,a.extras=null,a.keep=null,a.margin=null,a.occur=null,a.overflow=null,a.pageSet=null,a.para=null,a.traversal=null,a.validate=null,a.variables=null,a.area=new n.XFAObjectArray,a.breakAfter=new n.XFAObjectArray,a.breakBefore=new n.XFAObjectArray,a.connect=new n.XFAObjectArray,a.draw=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.exclGroup=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.proto=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a}return v(r,[{key:n.$getSubformParent,value:function(){var e=this[n.$getParent]();return e instanceof _t?e[n.$getSubformParent]():e}},{key:n.$isBindable,value:function(){return!0}},{key:n.$isThereMoreWidth,value:function(){return this.layout.endsWith("-tb")&&0===this[n.$extra].attempt&&this[n.$extra].numberInLine>0||this[n.$getParent]()[n.$isThereMoreWidth]()}},{key:n.$getContainedChildren,value:S().mark((function e(){return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(L(this),"t0",1);case 1:case"end":return e.stop()}}),e,this)}))},{key:n.$flushHTML,value:function(){return(0,i.flushHTML)(this)}},{key:n.$addHTML,value:function(e,t){(0,i.addHTML)(this,e,t)}},{key:n.$getAvailableSpace,value:function(){return(0,i.getAvailableSpace)(this)}},{key:n.$isSplittable,value:function(){var e=this[n.$getSubformParent]();return!!e[n.$isSplittable]()&&(void 0!==this[n.$extra]._isSplittable?this[n.$extra]._isSplittable:"position"===this.layout||this.layout.includes("row")||this.keep&&"none"!==this.keep.intact?(this[n.$extra]._isSplittable=!1,!1):!(e.layout&&e.layout.endsWith("-tb")&&0!==e[n.$extra].numberInLine||(this[n.$extra]._isSplittable=!0,0)))}},{key:n.$toHTML,value:function(e){if(N(this),this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){var t=new re({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});t[n.$globalData]=this[n.$globalData],this[n.$appendChild](t),this.breakAfter.push(t)}if("auto"!==this.break.before||""!==this.break.beforeTarget){var r=new ne({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});r[n.$globalData]=this[n.$globalData],this[n.$appendChild](r),this.breakBefore.push(r)}if(""!==this.break.overflowTarget){var a=new ht({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});a[n.$globalData]=this[n.$globalData],this[n.$appendChild](a),this.overflow.push(a)}this[n.$removeChild](this.break),this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return s.HTMLResult.EMPTY;if((this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&(0,c.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug."),this.breakBefore.children.length>=1){var u=this.breakBefore.children[0];if(H(u))return s.HTMLResult.breakNode(u)}if(this[n.$extra]&&this[n.$extra].afterBreakAfter)return s.HTMLResult.EMPTY;(0,o.fixDimensions)(this);var l=[],f={id:this[n.$uid],class:[]};(0,o.setAccess)(this,f.class),this[n.$extra]||(this[n.$extra]=Object.create(null)),Object.assign(this[n.$extra],{children:l,line:null,attributes:f,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});var h=this[n.$getTemplateRoot](),d=h[n.$extra].noLayoutFailure,p=this[n.$isSplittable]();if(p||$(this),!(0,i.checkDimensions)(this,e))return s.HTMLResult.FAILURE;var g=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){var v=this[n.$getSubformParent]().columnWidths;Array.isArray(v)&&v.length>0&&(this[n.$extra].columnWidths=v,this[n.$extra].currentColumn=0)}var y=(0,o.toStyle)(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),m=["xfaSubform"],b=(0,o.layoutClass)(this);if(b&&m.push(b),f.style=y,f.class=m,this.name&&(f.xfaName=this.name),this.overflow){var w=this.overflow[n.$getExtra]();w.addLeader&&(w.addLeader=!1,q(this,w.leader,e))}this[n.$pushPara]();for(var k="lr-tb"===this.layout||"rl-tb"===this.layout,S=k?2:1;this[n.$extra].attempt=1){var j=this.breakAfter.children[0];if(H(j))return this[n.$extra].afterBreakAfter=E,s.HTMLResult.breakNode(j)}return delete this[n.$extra],E}}]),r}(n.XFAObject),_t=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"subformSet",!0)).id=e.id||"",a.name=e.name||"",a.relation=(0,s.getStringOption)(e.relation,["ordered","choice","unordered"]),a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.bookend=null,a.break=null,a.desc=null,a.extras=null,a.occur=null,a.overflow=null,a.breakAfter=new n.XFAObjectArray,a.breakBefore=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a}return v(r,[{key:n.$getContainedChildren,value:S().mark((function e(){return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(L(this),"t0",1);case 1:case"end":return e.stop()}}),e,this)}))},{key:n.$getSubformParent,value:function(){for(var e=this[n.$getParent]();!(e instanceof Mt);)e=e[n.$getParent]();return e}},{key:n.$isBindable,value:function(){return!0}}]),r}(n.XFAObject),Lt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"subjectDN")).delimiter=e.delimiter||",",n.id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){this[n.$content]=new Map(this[n.$content].split(this.delimiter).map((function(e){return(e=e.split("=",2))[0]=e[0].trim(),e})))}}]),r}(n.ContentObject),Rt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"subjectDNs",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.subjectDN=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Nt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"submit",!0)).embedPDF=(0,s.getInteger)({data:e.embedPDF,defaultValue:0,validate:function(e){return 1===e}}),a.format=(0,s.getStringOption)(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]),a.id=e.id||"",a.target=e.target||"",a.textEncoding=(0,s.getKeyword)({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:function(e){return["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)}}),a.use=e.use||"",a.usehref=e.usehref||"",a.xdpContent=e.xdpContent||"",a.encrypt=null,a.encryptData=new n.XFAObjectArray,a.signData=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Dt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"template",!0)).baseProfile=(0,s.getStringOption)(e.baseProfile,["full","interactiveForms"]),a.extras=null,a.subform=new n.XFAObjectArray,a}return v(r,[{key:n.$finalize,value:function(){0===this.subform.children.length&&(0,c.warn)("XFA - No subforms in template node."),this.subform.children.length>=2&&(0,c.warn)("XFA - Several subforms in template node: please file a bug."),this[n.$tabIndex]=5e3}},{key:n.$isSplittable,value:function(){return!0}},{key:n.$searchNode,value:function(e,t){return e.startsWith("#")?[this[n.$ids].get(e.slice(1))]:(0,f.searchNode)(this,t,e,!0,!0)}},{key:n.$toPages,value:S().mark((function e(){var t,r,a,i,o,u,l,f,d,p,g,v,y,m,b,w,k=this;return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.subform.children.length){e.next=2;break}return e.abrupt("return",s.HTMLResult.success({name:"div",children:[]}));case 2:this[n.$extra]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]},(t=this.subform.children[0]).pageSet[n.$cleanPage](),r=t.pageSet.pageArea.children,a={name:"div",children:[]},i=null,o=null,u=null,t.breakBefore.children.length>=1?(o=t.breakBefore.children[0],u=o.target):t.subform.children.length>=1&&t.subform.children[0].breakBefore.children.length>=1?(o=t.subform.children[0].breakBefore.children[0],u=o.target):t.break&&t.break.beforeTarget?(o=t.break,u=o.beforeTarget):t.subform.children.length>=1&&t.subform.children[0].break&&t.subform.children[0].break.beforeTarget&&(o=t.subform.children[0].break,u=o.beforeTarget),o&&(l=this[n.$searchNode](u,o[n.$getParent]()))instanceof dt&&(i=l,o[n.$extra]={}),i||(i=r[0]),i[n.$extra]={numberOfUse:1},(f=i[n.$getParent]())[n.$extra]={numberOfUse:1,pageIndex:f.pageArea.children.indexOf(i),pageSetIndex:0},p=null,g=null,v=!0,y=0,m=0,b=S().mark((function e(){var r,o,s,u,l,f,h,b,w,x,O,A,C,F,P;return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(v){e.next=7;break}if(a.children.pop(),3!=++y){e.next=5;break}return(0,c.warn)("XFA - Something goes wrong: please file a bug."),e.abrupt("return",{v:a});case 5:e.next=8;break;case 7:y=0;case 8:d=null,k[n.$extra].currentPageArea=i,r=i[n.$toHTML]().html,a.children.push(r),p&&(k[n.$extra].noLayoutFailure=!0,r.children.push(p[n.$toHTML](i[n.$extra].space).html),p=null),g&&(k[n.$extra].noLayoutFailure=!0,r.children.push(g[n.$toHTML](i[n.$extra].space).html),g=null),o=i.contentArea.children,s=r.children.filter((function(e){return e.attributes.class.includes("xfaContentarea")})),v=!1,k[n.$extra].firstUnsplittable=null,k[n.$extra].noLayoutFailure=!1,u=function(e){var r=t[n.$flushHTML]();r&&(v=v||r.children&&0!==r.children.length,s[e].children.push(r))},l=m,f=o.length;case 21:if(!(l1&&a.children.pop(),e.abrupt("return",{v:a});case 31:if(!w.isBreak()){e.next=40;break}if(x=w.breakNode,u(l),"auto"!==x.targetType){e.next=36;break}return e.abrupt("continue",53);case 36:return x.leader&&(p=(p=k[n.$searchNode](x.leader,x[n.$getParent]()))?p[0]:null),x.trailer&&(g=(g=k[n.$searchNode](x.trailer,x[n.$getParent]()))?g[0]:null),"pageArea"===x.targetType?(d=x[n.$extra].target,l=1/0):x[n.$extra].target?(d=x[n.$extra].target,m=x[n.$extra].index+1,l=1/0):l=x[n.$extra].index,e.abrupt("continue",53);case 40:if(!k[n.$extra].overflowNode){e.next=52;break}return O=k[n.$extra].overflowNode,k[n.$extra].overflowNode=null,A=O[n.$getExtra](),C=A.target,A.addLeader=null!==A.leader,A.addTrailer=null!==A.trailer,u(l),F=l,l=1/0,C instanceof dt?d=C:C instanceof pe&&(-1!==(P=o.indexOf(C))?P>F?l=P-1:m=P:(d=C[n.$getParent](),m=d.contentArea.children.indexOf(C))),e.abrupt("continue",53);case 52:u(l);case 53:l++,e.next=21;break;case 56:return k[n.$extra].pageNumber+=1,d&&(d[n.$isUsable]()?d[n.$extra].numberOfUse+=1:d=null),i=d||i[n.$getNextPage](),e.next=61,null;case 61:case"end":return e.stop()}}),e)}));case 22:return e.delegateYield(b(),"t0",24);case 24:if("object"!==h(w=e.t0)){e.next=27;break}return e.abrupt("return",w.v);case 27:e.next=22;break;case 29:case"end":return e.stop()}}),e,this)}))}]),r}(n.XFAObject);t.Template=Dt;var Bt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"text")).id=e.id||"",n.maxChars=(0,s.getInteger)({data:e.maxChars,defaultValue:0,validate:function(e){return e>=0}}),n.name=e.name||"",n.rid=e.rid||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$acceptWhitespace,value:function(){return!0}},{key:n.$onChild,value:function(e){return e[n.$namespaceId]===a.NamespaceIds.xhtml.id?(this[n.$content]=e,!0):((0,c.warn)("XFA - Invalid content in Text: ".concat(e[n.$nodeName],".")),!1)}},{key:n.$onText,value:function(e){this[n.$content]instanceof n.XFAObject||d(k(r.prototype),n.$onText,this).call(this,e)}},{key:n.$finalize,value:function(){"string"==typeof this[n.$content]&&(this[n.$content]=this[n.$content].replace(/\\r\\n/g,"\\n"))}},{key:n.$getExtra,value:function(){return"string"==typeof this[n.$content]?this[n.$content].split(/[\\u2029\\u2028\\n]/).reduce((function(e,t){return t&&e.push(t),e}),[]).join("\\n"):this[n.$content][n.$text]()}},{key:n.$toHTML,value:function(e){if("string"==typeof this[n.$content]){var t=U(this[n.$content]).html;return this[n.$content].includes("\\u2029")?(t.name="div",t.children=[],this[n.$content].split("\\u2029").map((function(e){return e.split(/[\\u2028\\n]/).reduce((function(e,t){return e.push({name:"span",value:t},{name:"br"}),e}),[])})).forEach((function(e){t.children.push({name:"p",children:e})}))):/[\\u2028\\n]/.test(this[n.$content])&&(t.name="div",t.children=[],this[n.$content].split(/[\\u2028\\n]/).forEach((function(e){t.children.push({name:"span",value:e},{name:"br"})}))),s.HTMLResult.success(t)}return this[n.$content][n.$toHTML](e)}}]),r}(n.ContentObject);t.Text=Bt;var Ut=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"textEdit",!0)).allowRichText=(0,s.getInteger)({data:e.allowRichText,defaultValue:0,validate:function(e){return 1===e}}),n.hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.multiLine=(0,s.getInteger)({data:e.multiLine,defaultValue:"",validate:function(e){return 0===e||1===e}}),n.use=e.use||"",n.usehref=e.usehref||"",n.vScrollPolicy=(0,s.getStringOption)(e.vScrollPolicy,["auto","off","on"]),n.border=null,n.comb=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t,r=(0,o.toStyle)(this,"border","font","margin"),a=this[n.$getParent]()[n.$getParent]();return""===this.multiLine&&(this.multiLine=a instanceof Oe?1:0),t=1===this.multiLine?{name:"textarea",attributes:{dataId:a[n.$data]&&a[n.$data][n.$uid]||a[n.$uid],fieldId:a[n.$uid],class:["xfaTextfield"],style:r,"aria-label":B(a),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:a[n.$data]&&a[n.$data][n.$uid]||a[n.$uid],fieldId:a[n.$uid],class:["xfaTextfield"],style:r,"aria-label":B(a),"aria-required":!1}},R(a)&&(t.attributes["aria-required"]=!0,t.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[t]})}}]),r}(n.XFAObject),$t=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"time")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}},{key:n.$toHTML,value:function(e){return U(this[n.$content]?this[n.$content].toString():"")}}]),r}(n.StringObject),Xt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"timeStamp")).id=e.id||"",n.server=e.server||"",n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),Ht=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"toolTip")).id=e.id||"",n.rid=e.rid||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),qt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"traversal",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.extras=null,a.traverse=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Gt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"traverse",!0)).id=e.id||"",n.operation=(0,s.getStringOption)(e.operation,["next","back","down","first","left","right","up"]),n.ref=e.ref||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.script=null,n}return v(r,[{key:"name",get:function(){return this.operation}},{key:n.$isTransparent,value:function(){return!1}}]),r}(n.XFAObject),zt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"ui",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.picture=null,n.barcode=null,n.button=null,n.checkButton=null,n.choiceList=null,n.dateTimeEdit=null,n.defaultUi=null,n.imageEdit=null,n.numericEdit=null,n.passwordEdit=null,n.signature=null,n.textEdit=null,n}return v(r,[{key:n.$getExtra,value:function(){if(void 0===this[n.$extra]){var e,t=O(Object.getOwnPropertyNames(this));try{for(t.s();!(e=t.n()).done;){var r=e.value;if("extras"!==r&&"picture"!==r){var a=this[r];if(a instanceof n.XFAObject)return this[n.$extra]=a,a}}}catch(e){t.e(e)}finally{t.f()}this[n.$extra]=null}return this[n.$extra]}},{key:n.$toHTML,value:function(e){var t=this[n.$getExtra]();return t?t[n.$toHTML](e):s.HTMLResult.EMPTY}}]),r}(n.XFAObject),Wt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"validate",!0)).formatTest=(0,s.getStringOption)(e.formatTest,["warning","disabled","error"]),n.id=e.id||"",n.nullTest=(0,s.getStringOption)(e.nullTest,["disabled","error","warning"]),n.scriptTest=(0,s.getStringOption)(e.scriptTest,["error","disabled","warning"]),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.message=null,n.picture=null,n.script=null,n}return v(r)}(n.XFAObject),Vt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"value",!0)).id=e.id||"",n.override=(0,s.getInteger)({data:e.override,defaultValue:0,validate:function(e){return 1===e}}),n.relevant=(0,s.getRelevant)(e.relevant),n.use=e.use||"",n.usehref=e.usehref||"",n.arc=null,n.boolean=null,n.date=null,n.dateTime=null,n.decimal=null,n.exData=null,n.float=null,n.image=null,n.integer=null,n.line=null,n.rectangle=null,n.text=null,n.time=null,n}return v(r,[{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){var t=this[n.$getParent]();if(t instanceof Be&&t.ui&&t.ui.imageEdit)return this.image||(this.image=new We({}),this[n.$appendChild](this.image)),void(this.image[n.$content]=e[n.$content]);var r=e[n.$nodeName];if(null===this[r]){var a,i=O(Object.getOwnPropertyNames(this));try{for(i.s();!(a=i.n()).done;){var o=a.value,s=this[o];s instanceof n.XFAObject&&(this[o]=null,this[n.$removeChild](s))}}catch(e){i.e(e)}finally{i.f()}this[e[n.$nodeName]]=e,this[n.$appendChild](e)}else this[r][n.$content]=e[n.$content]}))},{key:n.$text,value:function(){if(this.exData)return"string"==typeof this.exData[n.$content]?this.exData[n.$content].trim():this.exData[n.$content][n.$text]().trim();var e,t=O(Object.getOwnPropertyNames(this));try{for(t.s();!(e=t.n()).done;){var r=e.value;if("image"!==r){var a=this[r];if(a instanceof n.XFAObject)return(a[n.$content]||"").toString().trim()}}}catch(e){t.e(e)}finally{t.f()}return null}},{key:n.$toHTML,value:function(e){var t,r=O(Object.getOwnPropertyNames(this));try{for(r.s();!(t=r.n()).done;){var a=this[t.value];if(a instanceof n.XFAObject)return a[n.$toHTML](e)}}catch(e){r.e(e)}finally{r.f()}return s.HTMLResult.EMPTY}}]),r}(n.XFAObject);t.Value=Vt;var Yt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"variables",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.manifest=new n.XFAObjectArray,a.script=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r,[{key:n.$isTransparent,value:function(){return!0}}]),r}(n.XFAObject),Kt=function(){function e(){y(this,e)}return v(e,null,[{key:a.$buildXFAObject,value:function(t,r){if(e.hasOwnProperty(t)){var a=e[t](r);return a[n.$setSetAttributes](r),a}}},{key:"appearanceFilter",value:function(e){return new G(e)}},{key:"arc",value:function(e){return new z(e)}},{key:"area",value:function(e){return new W(e)}},{key:"assist",value:function(e){return new V(e)}},{key:"barcode",value:function(e){return new Y(e)}},{key:"bind",value:function(e){return new K(e)}},{key:"bindItems",value:function(e){return new J(e)}},{key:"bookend",value:function(e){return new Z(e)}},{key:"boolean",value:function(e){return new Q(e)}},{key:"border",value:function(e){return new ee(e)}},{key:"break",value:function(e){return new te(e)}},{key:"breakAfter",value:function(e){return new re(e)}},{key:"breakBefore",value:function(e){return new ne(e)}},{key:"button",value:function(e){return new ae(e)}},{key:"calculate",value:function(e){return new ie(e)}},{key:"caption",value:function(e){return new oe(e)}},{key:"certificate",value:function(e){return new se(e)}},{key:"certificates",value:function(e){return new ce(e)}},{key:"checkButton",value:function(e){return new ue(e)}},{key:"choiceList",value:function(e){return new le(e)}},{key:"color",value:function(e){return new fe(e)}},{key:"comb",value:function(e){return new he(e)}},{key:"connect",value:function(e){return new de(e)}},{key:"contentArea",value:function(e){return new pe(e)}},{key:"corner",value:function(e){return new ge(e)}},{key:"date",value:function(e){return new ve(e)}},{key:"dateTime",value:function(e){return new ye(e)}},{key:"dateTimeEdit",value:function(e){return new me(e)}},{key:"decimal",value:function(e){return new be(e)}},{key:"defaultUi",value:function(e){return new we(e)}},{key:"desc",value:function(e){return new ke(e)}},{key:"digestMethod",value:function(e){return new Se(e)}},{key:"digestMethods",value:function(e){return new xe(e)}},{key:"draw",value:function(e){return new Oe(e)}},{key:"edge",value:function(e){return new Ae(e)}},{key:"encoding",value:function(e){return new Ce(e)}},{key:"encodings",value:function(e){return new Fe(e)}},{key:"encrypt",value:function(e){return new Pe(e)}},{key:"encryptData",value:function(e){return new Te(e)}},{key:"encryption",value:function(e){return new Ie(e)}},{key:"encryptionMethod",value:function(e){return new Ee(e)}},{key:"encryptionMethods",value:function(e){return new je(e)}},{key:"event",value:function(e){return new Me(e)}},{key:"exData",value:function(e){return new _e(e)}},{key:"exObject",value:function(e){return new Le(e)}},{key:"exclGroup",value:function(e){return new Re(e)}},{key:"execute",value:function(e){return new Ne(e)}},{key:"extras",value:function(e){return new De(e)}},{key:"field",value:function(e){return new Be(e)}},{key:"fill",value:function(e){return new Ue(e)}},{key:"filter",value:function(e){return new $e(e)}},{key:"float",value:function(e){return new Xe(e)}},{key:"font",value:function(e){return new He(e)}},{key:"format",value:function(e){return new qe(e)}},{key:"handler",value:function(e){return new Ge(e)}},{key:"hyphenation",value:function(e){return new ze(e)}},{key:"image",value:function(e){return new We(e)}},{key:"imageEdit",value:function(e){return new Ve(e)}},{key:"integer",value:function(e){return new Ye(e)}},{key:"issuers",value:function(e){return new Ke(e)}},{key:"items",value:function(e){return new Je(e)}},{key:"keep",value:function(e){return new Ze(e)}},{key:"keyUsage",value:function(e){return new Qe(e)}},{key:"line",value:function(e){return new et(e)}},{key:"linear",value:function(e){return new tt(e)}},{key:"lockDocument",value:function(e){return new rt(e)}},{key:"manifest",value:function(e){return new nt(e)}},{key:"margin",value:function(e){return new at(e)}},{key:"mdp",value:function(e){return new it(e)}},{key:"medium",value:function(e){return new ot(e)}},{key:"message",value:function(e){return new st(e)}},{key:"numericEdit",value:function(e){return new ct(e)}},{key:"occur",value:function(e){return new ut(e)}},{key:"oid",value:function(e){return new lt(e)}},{key:"oids",value:function(e){return new ft(e)}},{key:"overflow",value:function(e){return new ht(e)}},{key:"pageArea",value:function(e){return new dt(e)}},{key:"pageSet",value:function(e){return new pt(e)}},{key:"para",value:function(e){return new gt(e)}},{key:"passwordEdit",value:function(e){return new vt(e)}},{key:"pattern",value:function(e){return new yt(e)}},{key:"picture",value:function(e){return new mt(e)}},{key:"proto",value:function(e){return new bt(e)}},{key:"radial",value:function(e){return new wt(e)}},{key:"reason",value:function(e){return new kt(e)}},{key:"reasons",value:function(e){return new St(e)}},{key:"rectangle",value:function(e){return new xt(e)}},{key:"ref",value:function(e){return new Ot(e)}},{key:"script",value:function(e){return new At(e)}},{key:"setProperty",value:function(e){return new Ct(e)}},{key:"signData",value:function(e){return new Ft(e)}},{key:"signature",value:function(e){return new Pt(e)}},{key:"signing",value:function(e){return new Tt(e)}},{key:"solid",value:function(e){return new It(e)}},{key:"speak",value:function(e){return new Et(e)}},{key:"stipple",value:function(e){return new jt(e)}},{key:"subform",value:function(e){return new Mt(e)}},{key:"subformSet",value:function(e){return new _t(e)}},{key:"subjectDN",value:function(e){return new Lt(e)}},{key:"subjectDNs",value:function(e){return new Rt(e)}},{key:"submit",value:function(e){return new Nt(e)}},{key:"template",value:function(e){return new Dt(e)}},{key:"text",value:function(e){return new Bt(e)}},{key:"textEdit",value:function(e){return new Ut(e)}},{key:"time",value:function(e){return new $t(e)}},{key:"timeStamp",value:function(e){return new Xt(e)}},{key:"toolTip",value:function(e){return new Ht(e)}},{key:"traversal",value:function(e){return new qt(e)}},{key:"traverse",value:function(e){return new Gt(e)}},{key:"ui",value:function(e){return new zt(e)}},{key:"validate",value:function(e){return new Wt(e)}},{key:"value",value:function(e){return new Vt(e)}},{key:"variables",value:function(e){return new Yt(e)}}]),e}();t.TemplateNamespace=Kt},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addHTML=function(e,t,r){var s=e[n.$extra],u=s.availableSpace,l=i(r,4),f=l[0],h=l[1],d=l[2],p=l[3];switch(e.layout){case"position":s.width=Math.max(s.width,f+d),s.height=Math.max(s.height,h+p),s.children.push(t);break;case"lr-tb":case"rl-tb":s.line&&1!==s.attempt||(s.line=c(e,[]),s.children.push(s.line),s.numberInLine=0),s.numberInLine+=1,s.line.children.push(t),0===s.attempt?(s.currentWidth+=d,s.height=Math.max(s.height,s.prevHeight+p)):(s.currentWidth=d,s.prevHeight=s.height,s.height+=p,s.attempt=0),s.width=Math.max(s.width,s.currentWidth);break;case"rl-row":case"row":s.children.push(t),s.width+=d,s.height=Math.max(s.height,p);var g,v=(0,a.measureToString)(s.height),y=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=o(e))){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}(s.children);try{for(y.s();!(g=y.n()).done;)g.value.attributes.style.height=v}catch(e){y.e(e)}finally{y.f()}break;case"table":case"tb":s.width=Math.min(u.width,Math.max(s.width,d)),s.height+=p,s.children.push(t)}},t.checkDimensions=function(e,t){if(null===e[n.$getTemplateRoot]()[n.$extra].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;var r=e[n.$getSubformParent](),a=r[n.$extra]&&r[n.$extra].attempt||0,o=i(function(e){var t,r,n=""===e.w?NaN:e.w,a=""===e.h?NaN:e.h,i=0,o=0;switch(e.anchorType||""){case"bottomCenter":i=n/2,o=a;break;case"bottomLeft":i=0,o=a;break;case"bottomRight":i=n,o=a;break;case"middleCenter":i=n/2,o=a/2;break;case"middleLeft":i=0,o=a/2;break;case"middleRight":i=n,o=a/2;break;case"topCenter":i=n/2,o=0;break;case"topRight":i=n,o=0}switch(e.rotate||0){case 0:t=-i,r=-o;break;case 90:t=-o,r=i;var s=[a,-n];n=s[0],a=s[1];break;case 180:t=i,r=o;var c=[-n,-a];n=c[0],a=c[1];break;case 270:t=o,r=-i;var u=[-a,n];n=u[0],a=u[1]}return[e.x+t+Math.min(0,n),e.y+r+Math.min(0,a),Math.abs(n),Math.abs(a)]}(e),4),s=o[1],c=o[2],u=o[3];switch(r.layout){case"lr-tb":case"rl-tb":return 0===a?e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure?""!==e.w?Math.round(c-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(u-t.height)>2)&&(""!==e.w?Math.round(c-t.width)<=2||0===r[n.$extra].numberInLine&&t.height>2:t.width>2):!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||!(""!==e.h&&Math.round(u-t.height)>2)&&(""===e.w||Math.round(c-t.width)<=2||!r[n.$isThereMoreWidth]())&&t.height>2;case"table":case"tb":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||(""===e.h||e[n.$isSplittable]()?(""===e.w||Math.round(c-t.width)<=2||!r[n.$isThereMoreWidth]())&&t.height>2:Math.round(u-t.height)<=2);case"position":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||""===e.h||Math.round(u+s-t.height)<=2||u+s>e[n.$getTemplateRoot]()[n.$extra].currentContentArea.h;case"rl-row":case"row":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||""===e.h||Math.round(u-t.height)<=2;default:return!0}},t.flushHTML=function(e){if(!e[n.$extra])return null;var t={name:"div",attributes:e[n.$extra].attributes,children:e[n.$extra].children};if(e[n.$extra].failingNode){var r=e[n.$extra].failingNode[n.$flushHTML]();r&&(e.layout.endsWith("-tb")?t.children.push(c(e,[r])):t.children.push(r))}return 0===t.children.length?null:t},t.getAvailableSpace=function(e){var t=e[n.$extra].availableSpace,r=e.margin?e.margin.topInset+e.margin.bottomInset:0,a=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[n.$extra].attempt?{width:t.width-a-e[n.$extra].currentWidth,height:t.height-r-e[n.$extra].prevHeight}:{width:t.width-a,height:t.height-r-e[n.$extra].height};case"rl-row":case"row":return{width:e[n.$extra].columnWidths.slice(e[n.$extra].currentColumn).reduce((function(e,t){return e+t})),height:t.height-a};case"table":case"tb":return{width:t.width-a,height:t.height-r-e[n.$extra].height};default:return t}};var n=r(206),a=r(213);function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||o(e,t)||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 o(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.computeBbox=function(e,t,r){var a;if(""!==e.w&&""!==e.h)a=[e.x,e.y,e.w,e.h];else{if(!r)return null;var i=e.w;if(""===i){if(0===e.maxW){var o=e[n.$getSubformParent]();i="position"===o.layout&&""!==o.w?0:e.minW}else i=Math.min(e.maxW,r.width);t.attributes.style.width=u(i)}var s=e.h;if(""===s){if(0===e.maxH){var c=e[n.$getSubformParent]();s="position"===c.layout&&""!==c.h?0:e.minH}else s=Math.min(e.maxH,r.height);t.attributes.style.height=u(s)}a=[e.x,e.y,i,s]}return a},t.createWrapper=function(e,t){var r=t.attributes,a=r.style,i={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};if(r.class.push("xfaWrapped"),e.border){var o,s,c=e.border[n.$extra],u=c.widths,l=c.insets,f=l[0],d=l[3],p=l[0]+l[2],g=l[1]+l[3];switch(e.border.hand){case"even":f-=u[0]/2,d-=u[3]/2,o="calc(100% + ".concat((u[1]+u[3])/2-g,"px)"),s="calc(100% + ".concat((u[0]+u[2])/2-p,"px)");break;case"left":f-=u[0],d-=u[3],o="calc(100% + ".concat(u[1]+u[3]-g,"px)"),s="calc(100% + ".concat(u[0]+u[2]-p,"px)");break;case"right":o=g?"calc(100% - ".concat(g,"px)"):"100%",s=p?"calc(100% - ".concat(p,"px)"):"100%"}var v=["xfaBorder"];h(e.border)&&v.push("xfaPrintOnly");for(var y={name:"div",attributes:{class:v,style:{top:"".concat(f,"px"),left:"".concat(d,"px"),width:o,height:s}},children:[]},m=0,b=["border","borderWidth","borderColor","borderRadius","borderStyle"];m=0)){var r="padding"+("left"==("right"===e.textAlign?"right":"left")?"Left":"Right"),n=(0,i.getMeasurement)(e[r],"0px");e[r]="".concat(n-t,"px")}},t.fixURL=function(e){var t=(0,a.createValidAbsoluteUrl)(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null},t.isPrintOnly=h,t.layoutClass=function(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}},t.layoutNode=function(e,t){var r=null,a=null,i=!1;if((!e.w||!e.h)&&e.value){var o=0,s=0;e.margin&&(o=e.margin.leftInset+e.margin.rightInset,s=e.margin.topInset+e.margin.bottomInset);var c=null,u=null;e.para&&(u=Object.create(null),c=""===e.para.lineHeight?null:e.para.lineHeight,u.top=""===e.para.spaceAbove?0:e.para.spaceAbove,u.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow,u.left=""===e.para.marginLeft?0:e.para.marginLeft,u.right=""===e.para.marginRight?0:e.para.marginRight);var l=e.font;if(!l)for(var h=e[n.$getTemplateRoot](),d=e[n.$getParent]();d&&d!==h;){if(d.font){l=d.font;break}d=d[n.$getParent]()}var p=(e.w||t.width)-o,g=e[n.$globalData].fontFinder;if(e.value.exData&&e.value.exData[n.$content]&&"text/html"===e.value.exData.contentType){var v=f(e.value.exData[n.$content],l,u,c,g,p);a=v.width,r=v.height,i=v.isBroken}else{var y=e.value[n.$text]();if(y){var m=f(y,l,u,c,g,p);a=m.width,r=m.height,i=m.isBroken}}null===a||e.w||(a+=o),null===r||e.h||(r+=s)}return{w:a,h:r,isBroken:i}},t.measureToString=u,t.setAccess=function(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}},t.setFontFamily=function(e,t,r,n){if(r){var a=(0,i.stripQuotes)(e.typeface);n.fontFamily='"'.concat(a,'"');var s=r.find(a);if(s){var c=s.regular.cssFontInfo.fontFamily;c!==a&&(n.fontFamily='"'.concat(c,'"'));var u=d(t);if(u&&""!==u.lineHeight)return;if(n.lineHeight)return;var l=(0,o.selectFont)(e,s);l&&(n.lineHeight=Math.max(1.2,l.lineHeight))}}else delete n.fontFamily},t.setMinMaxDimensions=function(e,t){"position"===e[n.$getSubformParent]().layout&&(e.minW>0&&(t.minWidth=u(e.minW)),e.maxW>0&&(t.maxWidth=u(e.maxW)),e.minH>0&&(t.minHeight=u(e.minH)),e.maxH>0&&(t.maxHeight=u(e.maxH)))},t.setPara=function(e,t,r){if(r.attributes.class&&r.attributes.class.includes("xfaRich")){t&&(""===e.h&&(t.height="auto"),""===e.w&&(t.width="auto"));var a=d(e);if(a){var i=r.attributes.style;switch(i.display="flex",i.flexDirection="column",a.vAlign){case"top":i.justifyContent="start";break;case"bottom":i.justifyContent="end";break;case"middle":i.justifyContent="center"}for(var o=a[n.$toStyle](),s=0,u=Object.entries(o);s1?r-1:0),o=1;oe.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function d(e){var t=e[n.$getTemplateRoot]()[n.$extra].paraStack;return t.length?t.at(-1):null}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FontFinder=void 0,t.getMetrics=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=null;if(e){var i=(0,a.stripQuotes)(e.typeface),o=e[n.$globalData].fontFinder.find(i);r=d(e,o)}if(!r)return{lineHeight:12,lineGap:2,lineNoGap:10};var s=e.size||10,c=r.lineHeight?Math.max(t?0:1.2,r.lineHeight):1.2,u=void 0===r.lineGap?.2:r.lineGap;return{lineHeight:c*s,lineGap:u*s,lineNoGap:Math.max(1,c-u)*s}},t.selectFont=d;var n=r(206),a=r(207),i=r(2);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||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 c(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=u(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function u(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:null,n=c(e);try{for(n.s();!(t=n.n()).done;){var a=t.value;this.addPdfFont(a)}}catch(e){n.e(e)}finally{n.f()}var i,o=c(this.fonts.values());try{for(o.s();!(i=o.n()).done;){var s=i.value;s.regular||(s.regular=s.italic||s.bold||s.bolditalic)}}catch(e){o.e(e)}finally{o.f()}if(r&&0!==r.size){var u,l=this.fonts.get("PdfJS-Fallback-PdfJS-XFA"),f=c(r);try{for(f.s();!(u=f.n()).done;){var h=u.value;this.fonts.set(h,l)}}catch(e){f.e(e)}finally{f.f()}}}},{key:"addPdfFont",value:function(e){var t=e.cssFontInfo,r=t.fontFamily,n=this.fonts.get(r);n||(n=Object.create(null),this.fonts.set(r,n),this.defaultFont||(this.defaultFont=n));var a="",i=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?a=i>=700?"bolditalic":"italic":i>=700&&(a="bold"),a||((e.name.includes("Bold")||e.psName&&e.psName.includes("Bold"))&&(a="bold"),(e.name.includes("Italic")||e.name.endsWith("It")||e.psName&&(e.psName.includes("Italic")||e.psName.endsWith("It")))&&(a+="italic")),a||(a="regular"),n[a]=e}},{key:"getDefault",value:function(){return this.defaultFont}},{key:"find",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this.fonts.get(e)||this.cache.get(e);if(r)return r;var n=/,|-|_| |bolditalic|bold|italic|regular|it/gi,a=e.replace(n,"");if(r=this.fonts.get(a))return this.cache.set(e,r),r;a=a.toLowerCase();var o,u=[],l=c(this.fonts.entries());try{for(l.s();!(o=l.n()).done;){var f=s(o.value,2),h=f[0],d=f[1];h.replace(n,"").toLowerCase().startsWith(a)&&u.push(d)}}catch(e){l.e(e)}finally{l.f()}if(0===u.length){var p,g=c(this.fonts.entries());try{for(g.s();!(p=g.n()).done;){var v=s(p.value,2)[1];v.regular.name&&v.regular.name.replace(n,"").toLowerCase().startsWith(a)&&u.push(v)}}catch(e){g.e(e)}finally{g.f()}}if(0===u.length){a=a.replace(/psmt|mt/gi,"");var y,m=c(this.fonts.entries());try{for(m.s();!(y=m.n()).done;){var b=s(y.value,2),w=b[0],k=b[1];w.replace(n,"").toLowerCase().startsWith(a)&&u.push(k)}}catch(e){m.e(e)}finally{m.f()}}if(0===u.length){var S,x=c(this.fonts.values());try{for(x.s();!(S=x.n()).done;){var O=S.value;O.regular.name&&O.regular.name.replace(n,"").toLowerCase().startsWith(a)&&u.push(O)}}catch(e){x.e(e)}finally{x.f()}}return u.length>=1?(1!==u.length&&t&&(0,i.warn)("XFA - Too many choices to guess the correct font: ".concat(e)),this.cache.set(e,u[0]),u[0]):(t&&!this.warned.has(e)&&(this.warned.add(e),(0,i.warn)("XFA - Cannot find the font: ".concat(e))),null)}}],r&&f(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function d(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}t.FontFinder=h},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TextMeasure=void 0;var n=r(214);function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||s(e,t)||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 s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);re?(n=Math.max(n,i),i=0,a+=s,s=y,t=-1,r=0,c=!0,u=!1):(s=Math.max(y,s),r=i,i+=d,t=l):i+d>e?(a+=s,s=y,-1!==t?(l=t,n=Math.max(n,r),i=0,t=-1,r=0):(n=Math.max(n,i),i=d),c=!0,u=!1):(i+=d,s=Math.max(y,s))}return{width:1.02*(n=Math.max(n,i)),height:a+=s+this.extraHeight,isBroken:c}}}]),e}();t.TextMeasure=p},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DataHandler=void 0;var n=r(206);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||s(e,t)||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 s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0;){var r=t.at(-1),a=o(r,2),s=a[0],c=a[1];if(s+1!==c.length){var u=c[++r[0]],l=e.get(u[n.$uid]);if(l)u[n.$setValue](l);else{var f,h=i(u[n.$getAttributes]().values());try{for(h.s();!(f=h.n()).done;){var d=f.value,p=e.get(d[n.$uid]);if(p){d[n.$setValue](p);break}}}catch(e){h.e(e)}finally{h.f()}}var g=u[n.$getChildren]();g.length>0&&t.push([-1,g])}else t.pop()}var v=[''];if(this.dataset){var y,m=i(this.dataset[n.$getChildren]());try{for(m.s();!(y=m.n()).done;){var b=y.value;"data"!==b[n.$nodeName]&&b[n.$toString](v)}}catch(e){m.e(e)}finally{m.f()}}return this.data[n.$toString](v),v.push(""),v.join("")}}])&&u(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.DataHandler=l},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XFAParser=void 0;var a=r(206),i=r(195),o=r(218),s=r(2);function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||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 u(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,v),(e=g.call(this))._builder=new o.Builder(t),e._stack=[],e._globalData={usedTypefaces:new Set},e._ids=new Map,e._current=e._builder.buildRoot(e._ids),e._errorCode=i.XMLParserErrorCode.NoError,e._whiteRegex=/^\\s+$/,e._nbsps=/\\xa0+/g,e._richText=r,e}return t=v,(r=[{key:"parse",value:function(e){if(this.parseXml(e),this._errorCode===i.XMLParserErrorCode.NoError)return this._current[a.$finalize](),this._current.element}},{key:"onText",value:function(e){e=e.replace(this._nbsps,(function(e){return e.slice(1)+" "})),this._richText||this._current[a.$acceptWhitespace]()?this._current[a.$onText](e,this._richText):this._whiteRegex.test(e)||this._current[a.$onText](e.trim())}},{key:"onCdata",value:function(e){this._current[a.$onText](e)}},{key:"_mkAttributes",value:function(e,t){var r,n=null,i=null,o=Object.create({}),c=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=u(e))){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(e);try{for(c.s();!(r=c.n()).done;){var l=r.value,f=l.name,h=l.value;if("xmlns"===f)n?(0,s.warn)("XFA - multiple namespace definition in <".concat(t,">")):n=h;else if(f.startsWith("xmlns:")){var d=f.substring(6);i||(i=[]),i.push({prefix:d,value:h})}else{var p=f.indexOf(":");if(-1===p)o[f]=h;else{var g=o[a.$nsAttributes];g||(g=o[a.$nsAttributes]=Object.create(null));var v=[f.slice(0,p),f.slice(p+1)],y=v[0],m=v[1],b=g[y];b||(b=g[y]=Object.create(null)),b[m]=h}}}}catch(e){c.e(e)}finally{c.f()}return[n,i,o]}},{key:"_getNameAndPrefix",value:function(e,t){var r=e.indexOf(":");return-1===r?[e,null]:[e.substring(r+1),t?"":e.substring(0,r)]}},{key:"onBeginElement",value:function(e,t,r){var n=c(this._mkAttributes(t,e),3),i=n[0],o=n[1],s=n[2],u=c(this._getNameAndPrefix(e,this._builder.isNsAgnostic()),2),l=u[0],f=u[1],h=this._builder.build({nsPrefix:f,name:l,attributes:s,namespace:i,prefixes:o});if(h[a.$globalData]=this._globalData,r)return h[a.$finalize](),this._current[a.$onChild](h)&&h[a.$setId](this._ids),void h[a.$clean](this._builder);this._stack.push(this._current),this._current=h}},{key:"onEndElement",value:function(e){var t=this._current;if(t[a.$isCDATAXml]()&&"string"==typeof t[a.$content]){var r=new v;r._globalData=this._globalData;var n=r.parse(t[a.$content]);t[a.$content]=null,t[a.$onChild](n)}t[a.$finalize](),this._current=this._stack.pop(),this._current[a.$onChild](t)&&t[a.$setId](this._ids),t[a.$clean](this._builder)}},{key:"onError",value:function(e){this._errorCode=e}}])&&f(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),v}(i.XMLParserBase);t.XFAParser=p},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Builder=void 0;var a=r(208),i=r(206),o=r(219),s=r(211),c=r(228),u=r(2);function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||f(e,t)||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 f(e,t){if(e){if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:null;d(this,e),this._namespaceStack=[],this._nsAgnosticLevel=0,this._namespacePrefixes=new Map,this._namespaces=new Map,this._nextNsId=Math.max.apply(Math,function(e){if(Array.isArray(e))return h(e)}(t=Object.values(a.NamespaceIds).map((function(e){return e.id})))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||f(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),this._currentNamespace=r||new c.UnknownNamespace(++this._nextNsId)}return g(e,[{key:"buildRoot",value:function(e){return new k(e)}},{key:"build",value:function(e){var t=e.nsPrefix,r=e.name,n=e.attributes,s=e.namespace,c=e.prefixes,u=null!==s;if(u&&(this._namespaceStack.push(this._currentNamespace),this._currentNamespace=this._searchNamespace(s)),c&&this._addNamespacePrefix(c),n.hasOwnProperty(i.$nsAttributes)){for(var f=o.NamespaceSetUp.datasets,h=n[i.$nsAttributes],d=null,p=0,g=Object.entries(h);p0}},{key:"_searchNamespace",value:function(e){var t=this._namespaces.get(e);if(t)return t;for(var r=0,n=Object.entries(a.NamespaceIds);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(e);try{for(r.s();!(t=r.n()).done;){var n=t.value,a=n.prefix,i=n.value,o=this._searchNamespace(i),s=this._namespacePrefixes.get(a);s||(s=[],this._namespacePrefixes.set(a,s)),s.push(o)}}catch(e){r.e(e)}finally{r.f()}}},{key:"_getNamespaceToUse",value:function(e){if(!e)return this._currentNamespace;var t=this._namespacePrefixes.get(e);return t&&t.length>0?t.at(-1):((0,u.warn)("Unknown namespace prefix: ".concat(e,".")),null)}},{key:"clean",value:function(e){var t=this,r=e.hasNamespace,n=e.prefixes,a=e.nsAgnostic;r&&(this._currentNamespace=this._namespaceStack.pop()),n&&n.forEach((function(e){var r=e.prefix;t._namespacePrefixes.get(r).pop()})),a&&this._nsAgnosticLevel--}}]),e}();t.Builder=x},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NamespaceSetUp=void 0;var n=r(220),a=r(221),i=r(222),o=r(223),s=r(224),c=r(225),u=r(211),l=r(226),f=r(227),h={config:n.ConfigNamespace,connection:a.ConnectionSetNamespace,datasets:i.DatasetsNamespace,localeSet:o.LocaleSetNamespace,signature:s.SignatureNamespace,stylesheet:c.StylesheetNamespace,template:u.TemplateNamespace,xdp:l.XdpNamespace,xhtml:f.XhtmlNamespace};t.NamespaceSetUp=h},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ConfigNamespace=void 0;var a=r(208),i=r(206),o=r(207),s=r(2);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=1&&e<=8}))}return l(r)}(i.IntegerObject),A=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"agent",!0)).name=e.name?e.name.trim():"",n.common=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),C=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"alwaysEmbed")}return l(r)}(i.ContentObject),F=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"amd")}return l(r)}(i.StringObject),P=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"area")).level=(0,o.getInteger)({data:e.level,defaultValue:0,validate:function(e){return e>=1&&e<=3}}),n.name=(0,o.getStringOption)(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"]),n}return l(r)}(i.XFAObject),T=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"attributes",["preserve","delegate","ignore"])}return l(r)}(i.OptionObject),I=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"autoSave",["disabled","enabled"])}return l(r)}(i.OptionObject),E=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"base")}return l(r)}(i.StringObject),j=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"batchOutput")).format=(0,o.getStringOption)(e.format,["none","concat","zip","zipCompress"]),n}return l(r)}(i.XFAObject),M=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"behaviorOverride")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=new Map(this[i.$content].trim().split(/\\s+/).filter((function(e){return e.includes(":")})).map((function(e){return e.split(":",2)})))}}]),r}(i.ContentObject),_=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"cache",!0)).templateCache=null,n}return l(r)}(i.XFAObject),L=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"change")}return l(r)}(i.Option01),R=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"common",!0)).data=null,n.locale=null,n.localeSet=null,n.messaging=null,n.suppressBanner=null,n.template=null,n.validationMessaging=null,n.versionControl=null,n.log=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),N=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"compress")).scope=(0,o.getStringOption)(e.scope,["imageOnly","document"]),n}return l(r)}(i.XFAObject),D=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"compressLogicalStructure")}return l(r)}(i.Option01),B=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"compressObjectStream")}return l(r)}(i.Option10),U=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"compression",!0)).compressLogicalStructure=null,n.compressObjectStream=null,n.level=null,n.type=null,n}return l(r)}(i.XFAObject),$=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"config",!0)).acrobat=null,n.present=null,n.trace=null,n.agent=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),X=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"conformance",["A","B"])}return l(r)}(i.OptionObject),H=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"contentCopy")}return l(r)}(i.Option01),q=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"copies",1,(function(e){return e>=1}))}return l(r)}(i.IntegerObject),G=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"creator")}return l(r)}(i.StringObject),z=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"currentPage",0,(function(e){return e>=0}))}return l(r)}(i.IntegerObject),W=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"data",!0)).adjustData=null,n.attributes=null,n.incrementalLoad=null,n.outputXSL=null,n.range=null,n.record=null,n.startNode=null,n.uri=null,n.window=null,n.xsl=null,n.excludeNS=new i.XFAObjectArray,n.transform=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),V=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"debug",!0)).uri=null,n}return l(r)}(i.XFAObject),Y=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"defaultTypeface")).writingScript=(0,o.getStringOption)(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"]),n}return l(r)}(i.ContentObject),K=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"destination",["pdf","pcl","ps","webClient","zpl"])}return l(r)}(i.OptionObject),J=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"documentAssembly")}return l(r)}(i.Option01),Z=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"driver",!0)).name=e.name?e.name.trim():"",n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),Q=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}return l(r)}(i.OptionObject),ee=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"dynamicRender",["forbidden","required"])}return l(r)}(i.OptionObject),te=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"embed")}return l(r)}(i.Option01),re=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"encrypt")}return l(r)}(i.Option01),ne=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"encryption",!0)).encrypt=null,n.encryptionLevel=null,n.permissions=null,n}return l(r)}(i.XFAObject),ae=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"encryptionLevel",["40bit","128bit"])}return l(r)}(i.OptionObject),ie=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"enforce")}return l(r)}(i.StringObject),oe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"equate")).force=(0,o.getInteger)({data:e.force,defaultValue:1,validate:function(e){return 0===e}}),n.from=e.from||"",n.to=e.to||"",n}return l(r)}(i.XFAObject),se=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"equateRange")).from=e.from||"",n.to=e.to||"",n._unicodeRange=e.unicodeRange||"",n}return l(r,[{key:"unicodeRange",get:function(){var e,t=[],r=/U\\+([0-9a-fA-F]+)/,n=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(this._unicodeRange.split(",").map((function(e){return e.trim()})).filter((function(e){return!!e})));try{for(n.s();!(e=n.n()).done;){var a=e.value;1===(a=a.split("-",2).map((function(e){var t=e.match(r);return t?parseInt(t[1],16):0}))).length&&a.push(a[0]),t.push(a)}}catch(e){n.e(e)}finally{n.f()}return(0,s.shadow)(this,"unicodeRange",t)}}]),r}(i.XFAObject),ce=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"exclude")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim().split(/\\s+/).filter((function(e){return e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e)}))}}]),r}(i.ContentObject),ue=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"excludeNS")}return l(r)}(i.StringObject),le=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"flipLabel",["usePrinterSetting","on","off"])}return l(r)}(i.OptionObject),fe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"fontInfo",!0)).embed=null,n.map=null,n.subsetBelow=null,n.alwaysEmbed=new i.XFAObjectArray,n.defaultTypeface=new i.XFAObjectArray,n.neverEmbed=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),he=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"formFieldFilling")}return l(r)}(i.Option01),de=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"groupParent")}return l(r)}(i.StringObject),pe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}return l(r)}(i.OptionObject),ge=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"includeXDPContent")}return l(r)}(i.StringObject),ve=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"incrementalLoad",["none","forwardOnly"])}return l(r)}(i.OptionObject),ye=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"incrementalMerge")}return l(r)}(i.Option01),me=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"interactive")}return l(r)}(i.Option01),be=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"jog",["usePrinterSetting","none","pageSet"])}return l(r)}(i.OptionObject),we=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"labelPrinter",!0)).name=(0,o.getStringOption)(e.name,["zpl","dpl","ipl","tcpl"]),n.batchOutput=null,n.flipLabel=null,n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),ke=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"layout",["paginate","panel"])}return l(r)}(i.OptionObject),Se=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"level",0,(function(e){return e>0}))}return l(r)}(i.IntegerObject),xe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"linearized")}return l(r)}(i.Option01),Oe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"locale")}return l(r)}(i.StringObject),Ae=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"localeSet")}return l(r)}(i.StringObject),Ce=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"log",!0)).mode=null,n.threshold=null,n.to=null,n.uri=null,n}return l(r)}(i.XFAObject),Fe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"map",!0)).equate=new i.XFAObjectArray,n.equateRange=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),Pe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"mediumInfo",!0)).map=null,n}return l(r)}(i.XFAObject),Te=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"message",!0)).msgId=null,n.severity=null,n}return l(r)}(i.XFAObject),Ie=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"messaging",!0)).message=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),Ee=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"mode",["append","overwrite"])}return l(r)}(i.OptionObject),je=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"modifyAnnots")}return l(r)}(i.Option01),Me=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"msgId",1,(function(e){return e>=1}))}return l(r)}(i.IntegerObject),_e=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"nameAttr")}return l(r)}(i.StringObject),Le=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"neverEmbed")}return l(r)}(i.ContentObject),Re=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"numberOfCopies",null,(function(e){return e>=2&&e<=5}))}return l(r)}(i.IntegerObject),Ne=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"openAction",!0)).destination=null,n}return l(r)}(i.XFAObject),De=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"output",!0)).to=null,n.type=null,n.uri=null,n}return l(r)}(i.XFAObject),Be=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"outputBin")}return l(r)}(i.StringObject),Ue=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"outputXSL",!0)).uri=null,n}return l(r)}(i.XFAObject),$e=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"overprint",["none","both","draw","field"])}return l(r)}(i.OptionObject),Xe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"packets")}return l(r,[{key:i.$finalize,value:function(){"*"!==this[i.$content]&&(this[i.$content]=this[i.$content].trim().split(/\\s+/).filter((function(e){return["config","datasets","template","xfdf","xslt"].includes(e)})))}}]),r}(i.StringObject),He=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"pageOffset")).x=(0,o.getInteger)({data:e.x,defaultValue:"useXDCSetting",validate:function(e){return!0}}),n.y=(0,o.getInteger)({data:e.y,defaultValue:"useXDCSetting",validate:function(e){return!0}}),n}return l(r)}(i.XFAObject),qe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"pageRange")}return l(r,[{key:i.$finalize,value:function(){for(var e=this[i.$content].trim().split(/\\s+/).map((function(e){return parseInt(e,10)})),t=[],r=0,n=e.length;r=0&&(this[i.$content]=e)}}]),r}(i.ContentObject),ft=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"relevant")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim().split(/\\s+/)}}]),r}(i.ContentObject),ht=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"rename")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim(),(this[i.$content].toLowerCase().startsWith("xml")||new RegExp("[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*","u").test(this[i.$content]))&&(0,s.warn)("XFA - Rename: invalid XFA name")}}]),r}(i.ContentObject),dt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"renderPolicy",["server","client"])}return l(r)}(i.OptionObject),pt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"runScripts",["both","client","none","server"])}return l(r)}(i.OptionObject),gt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"script",!0)).currentPage=null,n.exclude=null,n.runScripts=null,n}return l(r)}(i.XFAObject),vt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"scriptModel",["XFA","none"])}return l(r)}(i.OptionObject),yt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"severity",["ignore","error","information","trace","warning"])}return l(r)}(i.OptionObject),mt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"silentPrint",!0)).addSilentPrint=null,n.printerName=null,n}return l(r)}(i.XFAObject),bt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"staple")).mode=(0,o.getStringOption)(e.mode,["usePrinterSetting","on","off"]),n}return l(r)}(i.XFAObject),wt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"startNode")}return l(r)}(i.StringObject),kt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"startPage",0,(function(e){return!0}))}return l(r)}(i.IntegerObject),St=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"submitFormat",["html","delegate","fdf","xml","pdf"])}return l(r)}(i.OptionObject),xt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"submitUrl")}return l(r)}(i.StringObject),Ot=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"subsetBelow",100,(function(e){return e>=0&&e<=100}))}return l(r)}(i.IntegerObject),At=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"suppressBanner")}return l(r)}(i.Option01),Ct=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"tagged")}return l(r)}(i.Option01),Ft=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"template",!0)).base=null,n.relevant=null,n.startPage=null,n.uri=null,n.xsl=null,n}return l(r)}(i.XFAObject),Pt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"threshold",["trace","error","information","warning"])}return l(r)}(i.OptionObject),Tt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"to",["null","memory","stderr","stdout","system","uri"])}return l(r)}(i.OptionObject),It=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"templateCache")).maxEntries=(0,o.getInteger)({data:e.maxEntries,defaultValue:5,validate:function(e){return e>=0}}),n}return l(r)}(i.XFAObject),Et=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"trace",!0)).area=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),jt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"transform",!0)).groupParent=null,n.ifEmpty=null,n.nameAttr=null,n.picture=null,n.presence=null,n.rename=null,n.whitespace=null,n}return l(r)}(i.XFAObject),Mt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}return l(r)}(i.OptionObject),_t=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"uri")}return l(r)}(i.StringObject),Lt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"validate",["preSubmit","prePrint","preExecute","preSave"])}return l(r)}(i.OptionObject),Rt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"validateApprovalSignatures")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim().split(/\\s+/).filter((function(e){return["docReady","postSign"].includes(e)}))}}]),r}(i.ContentObject),Nt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}return l(r)}(i.OptionObject),Dt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}return l(r)}(i.OptionObject),Bt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"VersionControl")).outputBelow=(0,o.getStringOption)(e.outputBelow,["warn","error","update"]),n.sourceAbove=(0,o.getStringOption)(e.sourceAbove,["warn","error"]),n.sourceBelow=(0,o.getStringOption)(e.sourceBelow,["update","maintain"]),n}return l(r)}(i.XFAObject),Ut=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"viewerPreferences",!0)).ADBE_JSConsole=null,n.ADBE_JSDebugger=null,n.addViewerPreferences=null,n.duplexOption=null,n.enforce=null,n.numberOfCopies=null,n.pageRange=null,n.pickTrayByPDFSize=null,n.printScaling=null,n}return l(r)}(i.XFAObject),$t=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"webClient",!0)).name=e.name?e.name.trim():"",n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),Xt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}return l(r)}(i.OptionObject),Ht=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"window")}return l(r,[{key:i.$finalize,value:function(){var e=this[i.$content].trim().split(/\\s*,\\s*/,2).map((function(e){return parseInt(e,10)}));e.some((function(e){return isNaN(e)}))?this[i.$content]=[0,0]:(1===e.length&&e.push(e[0]),this[i.$content]=e)}}]),r}(i.ContentObject),qt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"xdc",!0)).uri=new i.XFAObjectArray,n.xsl=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),Gt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"xdp",!0)).packets=null,n}return l(r)}(i.XFAObject),zt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"xsl",!0)).debug=null,n.uri=null,n}return l(r)}(i.XFAObject),Wt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"zpl",!0)).name=e.name?e.name.trim():"",n.batchOutput=null,n.flipLabel=null,n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),Vt=function(){function e(){f(this,e)}return l(e,null,[{key:a.$buildXFAObject,value:function(t,r){if(e.hasOwnProperty(t))return e[t](r)}},{key:"acrobat",value:function(e){return new y(e)}},{key:"acrobat7",value:function(e){return new m(e)}},{key:"ADBE_JSConsole",value:function(e){return new b(e)}},{key:"ADBE_JSDebugger",value:function(e){return new w(e)}},{key:"addSilentPrint",value:function(e){return new k(e)}},{key:"addViewerPreferences",value:function(e){return new S(e)}},{key:"adjustData",value:function(e){return new x(e)}},{key:"adobeExtensionLevel",value:function(e){return new O(e)}},{key:"agent",value:function(e){return new A(e)}},{key:"alwaysEmbed",value:function(e){return new C(e)}},{key:"amd",value:function(e){return new F(e)}},{key:"area",value:function(e){return new P(e)}},{key:"attributes",value:function(e){return new T(e)}},{key:"autoSave",value:function(e){return new I(e)}},{key:"base",value:function(e){return new E(e)}},{key:"batchOutput",value:function(e){return new j(e)}},{key:"behaviorOverride",value:function(e){return new M(e)}},{key:"cache",value:function(e){return new _(e)}},{key:"change",value:function(e){return new L(e)}},{key:"common",value:function(e){return new R(e)}},{key:"compress",value:function(e){return new N(e)}},{key:"compressLogicalStructure",value:function(e){return new D(e)}},{key:"compressObjectStream",value:function(e){return new B(e)}},{key:"compression",value:function(e){return new U(e)}},{key:"config",value:function(e){return new $(e)}},{key:"conformance",value:function(e){return new X(e)}},{key:"contentCopy",value:function(e){return new H(e)}},{key:"copies",value:function(e){return new q(e)}},{key:"creator",value:function(e){return new G(e)}},{key:"currentPage",value:function(e){return new z(e)}},{key:"data",value:function(e){return new W(e)}},{key:"debug",value:function(e){return new V(e)}},{key:"defaultTypeface",value:function(e){return new Y(e)}},{key:"destination",value:function(e){return new K(e)}},{key:"documentAssembly",value:function(e){return new J(e)}},{key:"driver",value:function(e){return new Z(e)}},{key:"duplexOption",value:function(e){return new Q(e)}},{key:"dynamicRender",value:function(e){return new ee(e)}},{key:"embed",value:function(e){return new te(e)}},{key:"encrypt",value:function(e){return new re(e)}},{key:"encryption",value:function(e){return new ne(e)}},{key:"encryptionLevel",value:function(e){return new ae(e)}},{key:"enforce",value:function(e){return new ie(e)}},{key:"equate",value:function(e){return new oe(e)}},{key:"equateRange",value:function(e){return new se(e)}},{key:"exclude",value:function(e){return new ce(e)}},{key:"excludeNS",value:function(e){return new ue(e)}},{key:"flipLabel",value:function(e){return new le(e)}},{key:"fontInfo",value:function(e){return new fe(e)}},{key:"formFieldFilling",value:function(e){return new he(e)}},{key:"groupParent",value:function(e){return new de(e)}},{key:"ifEmpty",value:function(e){return new pe(e)}},{key:"includeXDPContent",value:function(e){return new ge(e)}},{key:"incrementalLoad",value:function(e){return new ve(e)}},{key:"incrementalMerge",value:function(e){return new ye(e)}},{key:"interactive",value:function(e){return new me(e)}},{key:"jog",value:function(e){return new be(e)}},{key:"labelPrinter",value:function(e){return new we(e)}},{key:"layout",value:function(e){return new ke(e)}},{key:"level",value:function(e){return new Se(e)}},{key:"linearized",value:function(e){return new xe(e)}},{key:"locale",value:function(e){return new Oe(e)}},{key:"localeSet",value:function(e){return new Ae(e)}},{key:"log",value:function(e){return new Ce(e)}},{key:"map",value:function(e){return new Fe(e)}},{key:"mediumInfo",value:function(e){return new Pe(e)}},{key:"message",value:function(e){return new Te(e)}},{key:"messaging",value:function(e){return new Ie(e)}},{key:"mode",value:function(e){return new Ee(e)}},{key:"modifyAnnots",value:function(e){return new je(e)}},{key:"msgId",value:function(e){return new Me(e)}},{key:"nameAttr",value:function(e){return new _e(e)}},{key:"neverEmbed",value:function(e){return new Le(e)}},{key:"numberOfCopies",value:function(e){return new Re(e)}},{key:"openAction",value:function(e){return new Ne(e)}},{key:"output",value:function(e){return new De(e)}},{key:"outputBin",value:function(e){return new Be(e)}},{key:"outputXSL",value:function(e){return new Ue(e)}},{key:"overprint",value:function(e){return new $e(e)}},{key:"packets",value:function(e){return new Xe(e)}},{key:"pageOffset",value:function(e){return new He(e)}},{key:"pageRange",value:function(e){return new qe(e)}},{key:"pagination",value:function(e){return new Ge(e)}},{key:"paginationOverride",value:function(e){return new ze(e)}},{key:"part",value:function(e){return new We(e)}},{key:"pcl",value:function(e){return new Ve(e)}},{key:"pdf",value:function(e){return new Ye(e)}},{key:"pdfa",value:function(e){return new Ke(e)}},{key:"permissions",value:function(e){return new Je(e)}},{key:"pickTrayByPDFSize",value:function(e){return new Ze(e)}},{key:"picture",value:function(e){return new Qe(e)}},{key:"plaintextMetadata",value:function(e){return new et(e)}},{key:"presence",value:function(e){return new tt(e)}},{key:"present",value:function(e){return new rt(e)}},{key:"print",value:function(e){return new nt(e)}},{key:"printHighQuality",value:function(e){return new at(e)}},{key:"printScaling",value:function(e){return new it(e)}},{key:"printerName",value:function(e){return new ot(e)}},{key:"producer",value:function(e){return new st(e)}},{key:"ps",value:function(e){return new ct(e)}},{key:"range",value:function(e){return new ut(e)}},{key:"record",value:function(e){return new lt(e)}},{key:"relevant",value:function(e){return new ft(e)}},{key:"rename",value:function(e){return new ht(e)}},{key:"renderPolicy",value:function(e){return new dt(e)}},{key:"runScripts",value:function(e){return new pt(e)}},{key:"script",value:function(e){return new gt(e)}},{key:"scriptModel",value:function(e){return new vt(e)}},{key:"severity",value:function(e){return new yt(e)}},{key:"silentPrint",value:function(e){return new mt(e)}},{key:"staple",value:function(e){return new bt(e)}},{key:"startNode",value:function(e){return new wt(e)}},{key:"startPage",value:function(e){return new kt(e)}},{key:"submitFormat",value:function(e){return new St(e)}},{key:"submitUrl",value:function(e){return new xt(e)}},{key:"subsetBelow",value:function(e){return new Ot(e)}},{key:"suppressBanner",value:function(e){return new At(e)}},{key:"tagged",value:function(e){return new Ct(e)}},{key:"template",value:function(e){return new Ft(e)}},{key:"templateCache",value:function(e){return new It(e)}},{key:"threshold",value:function(e){return new Pt(e)}},{key:"to",value:function(e){return new Tt(e)}},{key:"trace",value:function(e){return new Et(e)}},{key:"transform",value:function(e){return new jt(e)}},{key:"type",value:function(e){return new Mt(e)}},{key:"uri",value:function(e){return new _t(e)}},{key:"validate",value:function(e){return new Lt(e)}},{key:"validateApprovalSignatures",value:function(e){return new Rt(e)}},{key:"validationMessaging",value:function(e){return new Nt(e)}},{key:"version",value:function(e){return new Dt(e)}},{key:"versionControl",value:function(e){return new Bt(e)}},{key:"viewerPreferences",value:function(e){return new Ut(e)}},{key:"webClient",value:function(e){return new $t(e)}},{key:"whitespace",value:function(e){return new Xt(e)}},{key:"window",value:function(e){return new Ht(e)}},{key:"xdc",value:function(e){return new qt(e)}},{key:"xdp",value:function(e){return new Gt(e)}},{key:"xsl",value:function(e){return new zt(e)}},{key:"zpl",value:function(e){return new Wt(e)}}]),e}();t.ConfigNamespace=Vt},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ConnectionSetNamespace=void 0;var a=r(208),i=r(206);function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.DatasetsNamespace=void 0;var a=r(206),i=r(208);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleSetNamespace=void 0;var a=r(208),i=r(206),o=r(207);function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.SignatureNamespace=void 0;var a=r(208),i=r(206);function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.StylesheetNamespace=void 0;var a=r(208),i=r(206);function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XdpNamespace=void 0;var a=r(208),i=r(206);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XhtmlNamespace=void 0;var a=r(206),i=r(208),o=r(213),s=r(207);function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function m(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]&&arguments[1]?this[k]=!0:(e=e.replace(A,""),this.style.includes("xfa-spacerun:yes")||(e=e.replace(O," "))),e&&(this[a.$content]+=e)}},{key:a.$pushGlyphs,value:function(e){var t,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=Object.create(null),i={top:NaN,bottom:NaN,left:NaN,right:NaN},o=null,c=y(this.style.split(";").map((function(e){return e.split(":",2)})));try{for(c.s();!(t=c.n()).done;){var u=v(t.value,2),l=u[0],f=u[1];switch(l){case"font-family":n.typeface=(0,s.stripQuotes)(f);break;case"font-size":n.size=(0,s.getMeasurement)(f);break;case"font-weight":n.weight=f;break;case"font-style":n.posture=f;break;case"letter-spacing":n.letterSpacing=(0,s.getMeasurement)(f);break;case"margin":var h=f.split(/ \\t/).map((function(e){return(0,s.getMeasurement)(e)}));switch(h.length){case 1:i.top=i.bottom=i.left=i.right=h[0];break;case 2:i.top=i.bottom=h[0],i.left=i.right=h[1];break;case 3:i.top=h[0],i.bottom=h[2],i.left=i.right=h[1];break;case 4:i.top=h[0],i.left=h[1],i.bottom=h[2],i.right=h[3]}break;case"margin-top":i.top=(0,s.getMeasurement)(f);break;case"margin-bottom":i.bottom=(0,s.getMeasurement)(f);break;case"margin-left":i.left=(0,s.getMeasurement)(f);break;case"margin-right":i.right=(0,s.getMeasurement)(f);break;case"line-height":o=(0,s.getMeasurement)(f)}}}catch(e){c.e(e)}finally{c.f()}if(e.pushData(n,i,o),this[a.$content])e.addString(this[a.$content]);else{var d,p=y(this[a.$getChildren]());try{for(p.s();!(d=p.n()).done;){var g=d.value;"#text"!==g[a.$nodeName]?g[a.$pushGlyphs](e):e.addString(g[a.$content])}}catch(e){p.e(e)}finally{p.f()}}r&&e.popFont()}},{key:a.$toHTML,value:function(e){var t,r=[];return this[a.$extra]={children:r},this[a.$childrenToHTML]({}),0!==r.length||this[a.$content]?(t=this[k]?this[a.$content]?this[a.$content].replace(C,"\\n"):void 0:this[a.$content]||void 0,s.HTMLResult.success({name:this[a.$nodeName],attributes:{href:this.href,style:F(this.style,this,this[k])},children:r,value:t})):s.HTMLResult.EMPTY}}]),r}(a.XmlObject),I=function(e){h(r,e);var t=p(r);function r(e){var n;return c(this,r),(n=t.call(this,e,"a")).href=(0,o.fixURL)(e.href)||"",n}return l(r)}(T),E=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"b")}return l(r,[{key:a.$pushGlyphs,value:function(e){e.pushFont({weight:"bold"}),f(g(r.prototype),a.$pushGlyphs,this).call(this,e),e.popFont()}}]),r}(T),j=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"body")}return l(r,[{key:a.$toHTML,value:function(e){var t=f(g(r.prototype),a.$toHTML,this).call(this,e),n=t.html;return n?(n.name="div",n.attributes.class=["xfaRich"],t):s.HTMLResult.EMPTY}}]),r}(T),M=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"br")}return l(r,[{key:a.$text,value:function(){return"\\n"}},{key:a.$pushGlyphs,value:function(e){e.addString("\\n")}},{key:a.$toHTML,value:function(e){return s.HTMLResult.success({name:"br"})}}]),r}(T),_=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"html")}return l(r,[{key:a.$toHTML,value:function(e){var t=[];if(this[a.$extra]={children:t},this[a.$childrenToHTML]({}),0===t.length)return s.HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[a.$content]||""});if(1===t.length){var r=t[0];if(r.attributes&&r.attributes.class.includes("xfaRich"))return s.HTMLResult.success(r)}return s.HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}]),r}(T),L=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"i")}return l(r,[{key:a.$pushGlyphs,value:function(e){e.pushFont({posture:"italic"}),f(g(r.prototype),a.$pushGlyphs,this).call(this,e),e.popFont()}}]),r}(T),R=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"li")}return l(r)}(T),N=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"ol")}return l(r)}(T),D=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"p")}return l(r,[{key:a.$pushGlyphs,value:function(e){f(g(r.prototype),a.$pushGlyphs,this).call(this,e,!1),e.addString("\\n"),e.addPara(),e.popFont()}},{key:a.$text,value:function(){return this[a.$getParent]()[a.$getChildren]().at(-1)===this?f(g(r.prototype),a.$text,this).call(this):f(g(r.prototype),a.$text,this).call(this)+"\\n"}}]),r}(T),B=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"span")}return l(r)}(T),U=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"sub")}return l(r)}(T),$=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"sup")}return l(r)}(T),X=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"ul")}return l(r)}(T),H=function(){function e(){c(this,e)}return l(e,null,[{key:i.$buildXFAObject,value:function(t,r){if(e.hasOwnProperty(t))return e[t](r)}},{key:"a",value:function(e){return new I(e)}},{key:"b",value:function(e){return new E(e)}},{key:"body",value:function(e){return new j(e)}},{key:"br",value:function(e){return new M(e)}},{key:"html",value:function(e){return new _(e)}},{key:"i",value:function(e){return new L(e)}},{key:"li",value:function(e){return new R(e)}},{key:"ol",value:function(e){return new N(e)}},{key:"p",value:function(e){return new D(e)}},{key:"span",value:function(e){return new B(e)}},{key:"sub",value:function(e){return new U(e)}},{key:"sup",value:function(e){return new $(e)}},{key:"ul",value:function(e){return new X(e)}}]),e}();t.XhtmlNamespace=H},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnknownNamespace=void 0;var n=r(208),a=r(206);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.DatasetReader=void 0;var a=r(2),i=r(135),o=r(195);function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.XRef=void 0;var n=r(2),a=r(134),i=r(135),o=r(146),s=r(136),c=r(196);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(){l=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function f(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=h(e[n],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==u(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){l.value=e,o(l)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function f(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function h(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){f(i,n,a,o,s,"next",e)}function s(e){f(i,n,a,o,s,"throw",e)}o(void 0)}))}}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}(e,t)||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 p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]&&arguments[0];o?((0,n.warn)("Indexing all PDF objects"),e=this.indexObjects()):e=this.readXRef(),e.assignXref(this),this.trailer=e;try{t=e.get("Encrypt")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('XRef.parse - Invalid "Encrypt" reference: "'.concat(e,'".'))}if(t instanceof a.Dict){var s=e.get("ID"),u=s&&s.length?s[0]:"";t.suppressEncryption=!0,this.encrypt=new c.CipherTransformFactory(t,u,this.pdfManager.password)}try{r=e.get("Root")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('XRef.parse - Invalid "Root" reference: "'.concat(e,'".'))}if(r instanceof a.Dict)try{if(r.get("Pages")instanceof a.Dict)return void(this.root=r)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('XRef.parse - Invalid "Pages" reference: "'.concat(e,'".'))}if(!o)throw new i.XRefParseException;throw new n.InvalidPDFException("Invalid Root reference.")}},{key:"processXRefTable",value:function(e){"tableState"in this||(this.tableState={entryNum:0,streamPos:e.lexer.stream.pos,parserBuf1:e.buf1,parserBuf2:e.buf2});var t=this.readXRefTable(e);if(!(0,a.isCmd)(t,"trailer"))throw new n.FormatError("Invalid XRef table: could not find trailer dictionary");var r=e.getObj();if(r instanceof a.Dict||!r.dict||(r=r.dict),!(r instanceof a.Dict))throw new n.FormatError("Invalid XRef table: could not parse trailer dictionary");return delete this.tableState,r}},{key:"readXRefTable",value:function(e){var t,r=e.lexer.stream,i=this.tableState;for(r.pos=i.streamPos,e.buf1=i.parserBuf1,e.buf2=i.parserBuf2;;){if(!("firstEntryNum"in i)||!("entryCount"in i)){if((0,a.isCmd)(t=e.getObj(),"trailer"))break;i.firstEntryNum=t,i.entryCount=e.getObj()}var o=i.firstEntryNum,s=i.entryCount;if(!Number.isInteger(o)||!Number.isInteger(s))throw new n.FormatError("Invalid XRef table: wrong types in subsection header");for(var c=i.entryNum;c0;){var c=d(s,2),u=c[0],l=c[1];if(!Number.isInteger(u)||!Number.isInteger(l))throw new n.FormatError("Invalid XRef range fields: ".concat(u,", ").concat(l));if(!Number.isInteger(a)||!Number.isInteger(i)||!Number.isInteger(o))throw new n.FormatError("Invalid XRef entry fields length: ".concat(u,", ").concat(l));for(var f=t.entryNum;f=e.length);)r+=String.fromCharCode(n),n=e[t];return r}function t(e,t,r){for(var n=r.length,a=e.length,i=0;t=n)break;t++,i++}return i}var r=/\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer)\\b/g,s=/\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g,c=/^(\\d+)\\s+(\\d+)\\s+obj\\b/,u=new Uint8Array([116,114,97,105,108,101,114]),l=new Uint8Array([115,116,97,114,116,120,114,101,102]),f=new Uint8Array([47,88,82,101,102]);this.entries.length=0,this._cacheMap.clear();var h=this.stream;h.pos=0;for(var d,p,g=h.getBytes(),v=(0,n.bytesToString)(g),y=g.length,m=h.start,b=[],w=[];m=y)break;k=g[m]}while(10!==k&&13!==k);else++m}for(var L=0,R=w;L0&&void 0!==arguments[0]&&arguments[0],t=this.stream,r=new Set;this.startXRefQueue.length;){try{var c=this.startXRefQueue[0];if(r.has(c)){(0,n.warn)("readXRef - skipping XRef table since it was already parsed."),this.startXRefQueue.shift();continue}r.add(c),t.pos=c+t.start;var u=new o.Parser({lexer:new o.Lexer(t),xref:this,allowStreams:!0}),l=u.getObj(),f=void 0;if((0,a.isCmd)(l,"xref")){if(f=this.processXRefTable(u),this.topDict||(this.topDict=f),l=f.get("XRefStm"),Number.isInteger(l)){var h=l;h in this.xrefstms||(this.xrefstms[h]=1,this.startXRefQueue.push(h))}}else{if(!Number.isInteger(l))throw new n.FormatError("Invalid XRef stream header");if(!(Number.isInteger(u.getObj())&&(0,a.isCmd)(u.getObj(),"obj")&&(l=u.getObj())instanceof s.BaseStream))throw new n.FormatError("Invalid XRef stream");if(f=this.processXRefStream(l),this.topDict||(this.topDict=f),!f)throw new n.FormatError("Failed to read XRef stream")}l=f.get("Prev"),Number.isInteger(l)?this.startXRefQueue.push(l):l instanceof a.Ref&&this.startXRefQueue.push(l.num)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.info)("(while reading XRef): "+e)}this.startXRefQueue.shift()}if(this.topDict)return this.topDict;if(!e)throw new i.XRefParseException}},{key:"getEntry",value:function(e){var t=this.entries[e];return t&&!t.free&&t.offset?t:null}},{key:"fetchIfRef",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e instanceof a.Ref?this.fetch(e,t):e}},{key:"fetch",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!(e instanceof a.Ref))throw new Error("ref object is not a reference");var r=e.num,i=this._cacheMap.get(r);if(void 0!==i)return i instanceof a.Dict&&!i.objId&&(i.objId=e.toString()),i;var o=this.getEntry(r);if(null===o)return this._cacheMap.set(r,o),o;if(this._pendingRefs.has(e))return this._pendingRefs.remove(e),(0,n.warn)("Ignoring circular reference: ".concat(e,".")),a.CIRCULAR_REF;this._pendingRefs.put(e);try{o=o.uncompressed?this.fetchUncompressed(e,o,t):this.fetchCompressed(e,o,t),this._pendingRefs.remove(e)}catch(t){throw this._pendingRefs.remove(e),t}return o instanceof a.Dict?o.objId=e.toString():o instanceof s.BaseStream&&(o.dict.objId=e.toString()),o}},{key:"fetchUncompressed",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],c=e.gen,u=e.num;if(t.gen!==c){var l="Inconsistent generation in XRef: ".concat(e);if(this._generationFallback&&t.gen{Object.defineProperty(t,"__esModule",{value:!0}),t.MessageHandler=void 0;var n=r(2);function a(){a=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};l(y,o,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,o)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,c){var u=h(e[n],e,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==s(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,c)}),(function(e){a("throw",e,o,c)})):t.resolve(f).then((function(e){l.value=e,o(l)}),(function(e){return a("throw",e,o,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function i(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function o(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:1,s=arguments.length>2?arguments[2]:void 0;if(!this.isCancelled){var c=this.desiredSize;this.desiredSize-=o,c>0&&this.desiredSize<=0&&(this.sinkCapability=(0,n.createPromiseCapability)(),this.ready=this.sinkCapability.promise),i.postMessage({sourceName:r,targetName:a,stream:4,streamId:t,chunk:e},s)}},close:function(){this.isCancelled||(this.isCancelled=!0,i.postMessage({sourceName:r,targetName:a,stream:3,streamId:t}),delete o.streamSinks[t])},error:function(e){(0,n.assert)(e instanceof Error,"error must have a valid reason"),this.isCancelled||(this.isCancelled=!0,i.postMessage({sourceName:r,targetName:a,stream:5,streamId:t,reason:c(e)}))},sinkCapability:(0,n.createPromiseCapability)(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};u.sinkCapability.resolve(),u.ready=u.sinkCapability.promise,this.streamSinks[t]=u,new Promise((function(t){t(s(e.data,u))})).then((function(){i.postMessage({sourceName:r,targetName:a,stream:8,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:r,targetName:a,stream:8,streamId:t,reason:c(e)})}))}},{key:"_processStreamMessage",value:function(e){var t=e.streamId,r=this.sourceName,a=e.sourceName,i=this.comObj,o=this.streamControllers[t],s=this.streamSinks[t];switch(e.stream){case 8:e.success?o.startCall.resolve():o.startCall.reject(c(e.reason));break;case 7:e.success?o.pullCall.resolve():o.pullCall.reject(c(e.reason));break;case 6:if(!s){i.postMessage({sourceName:r,targetName:a,stream:7,streamId:t,success:!0});break}s.desiredSize<=0&&e.desiredSize>0&&s.sinkCapability.resolve(),s.desiredSize=e.desiredSize,new Promise((function(e){e(s.onPull&&s.onPull())})).then((function(){i.postMessage({sourceName:r,targetName:a,stream:7,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:r,targetName:a,stream:7,streamId:t,reason:c(e)})}));break;case 4:if((0,n.assert)(o,"enqueue should have stream controller"),o.isClosed)break;o.controller.enqueue(e.chunk);break;case 3:if((0,n.assert)(o,"close should have stream controller"),o.isClosed)break;o.isClosed=!0,o.controller.close(),this._deleteStreamController(o,t);break;case 5:(0,n.assert)(o,"error should have stream controller"),o.controller.error(c(e.reason)),this._deleteStreamController(o,t);break;case 2:e.success?o.cancelCall.resolve():o.cancelCall.reject(c(e.reason)),this._deleteStreamController(o,t);break;case 1:if(!s)break;new Promise((function(t){t(s.onCancel&&s.onCancel(c(e.reason)))})).then((function(){i.postMessage({sourceName:r,targetName:a,stream:2,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:r,targetName:a,stream:2,streamId:t,reason:c(e)})})),s.sinkCapability.reject(c(e.reason)),s.isCancelled=!0,delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}},{key:"_deleteStreamController",value:(s=a().mark((function e(t,r){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.allSettled([t.startCall&&t.startCall.promise,t.pullCall&&t.pullCall.promise,t.cancelCall&&t.cancelCall.promise]);case 2:delete this.streamControllers[r];case 3:case"end":return e.stop()}}),e,this)})),u=function(){var e=this,t=arguments;return new Promise((function(r,n){var a=s.apply(e,t);function o(e){i(a,r,n,o,c,"next",e)}function c(e){i(a,r,n,o,c,"throw",e)}o(void 0)}))},function(e,t){return u.apply(this,arguments)})},{key:"destroy",value:function(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}],r&&o(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.MessageHandler=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFWorkerStream=void 0;var n=r(2);function a(){a=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};l(y,o,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,o)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,c){var u=h(e[n],e,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==s(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,c)}),(function(e){a("throw",e,o,c)})):t.resolve(f).then((function(e){l.value=e,o(l)}),(function(e){return a("throw",e,o,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function i(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function o(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function s(e){i(o,n,a,s,c,"next",e)}function c(e){i(o,n,a,s,c,"throw",e)}s(void 0)}))}}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(this._rangeRequestReaders.slice(0));try{for(r.s();!(t=r.n()).done;)t.value.cancel(e)}catch(e){r.e(e)}finally{r.f()}}}]),e}();t.PDFWorkerStream=h;var d=function(){function e(t){var r=this;u(this,e),this._msgHandler=t,this.onProgress=null,this._contentLength=null,this._isRangeSupported=!1,this._isStreamingSupported=!1;var n=this._msgHandler.sendWithStream("GetReader");this._reader=n.getReader(),this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then((function(e){r._isStreamingSupported=e.isStreamingSupported,r._isRangeSupported=e.isRangeSupported,r._contentLength=e.contentLength}))}var t;return f(e,[{key:"headersReady",get:function(){return this._headersReady}},{key:"contentLength",get:function(){return this._contentLength}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"read",value:(t=o(a().mark((function e(){var t,r;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._reader.read();case 2:if(t=e.sent,r=t.value,!t.done){e.next=7;break}return e.abrupt("return",{value:void 0,done:!0});case 7:return e.abrupt("return",{value:r.buffer,done:!1});case 8:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"cancel",value:function(e){this._reader.cancel(e)}}]),e}(),p=function(){function e(t,r,n){u(this,e),this._msgHandler=n,this.onProgress=null;var a=this._msgHandler.sendWithStream("GetRangeReader",{begin:t,end:r});this._reader=a.getReader()}var t;return f(e,[{key:"isStreamingSupported",get:function(){return!1}},{key:"read",value:(t=o(a().mark((function e(){var t,r;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._reader.read();case 2:if(t=e.sent,r=t.value,!t.done){e.next=7;break}return e.abrupt("return",{value:void 0,done:!0});case 7:return e.abrupt("return",{value:r.buffer,done:!1});case 8:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"cancel",value:function(e){this._reader.cancel(e)}}]),e}()}],t={};function r(n){var a=t[n];if(void 0!==a)return a.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{var e=n;Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"WorkerMessageHandler",{enumerable:!0,get:function(){return t.WorkerMessageHandler}});var t=r(1)})(),n})(),"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("pdfjs-dist/build/pdf.worker",[],t):"object"==typeof exports?exports["pdfjs-dist/build/pdf.worker"]=t():e["pdfjs-dist/build/pdf.worker"]=e.pdfjsWorker=t();`,Z=`/*! For license information please see pdf.js.LICENSE.txt */ +var __webpack_exports__={},root,factory;root=globalThis,factory=()=>(()=>{var __webpack_modules__=[,(t,e,r)=>{function n(t){return function(t){if(Array.isArray(t))return a(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||i(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(t,e){if(t){if("string"==typeof t)return a(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(t,e):void 0}}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!t)return null;try{if(r&&"string"==typeof t){if(r.addDefaultProtocol&&t.startsWith("www.")){var n=t.match(/\\./g);n&&n.length>=2&&(t="http://".concat(t))}if(r.tryConvertEncoding)try{t=R(t)}catch(t){}}var i=e?new URL(t,e):new URL(t);if(function(t){if(!t)return!1;switch(t.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(i))return i}catch(t){}return null},e.getModificationDate=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date;return[t.getUTCFullYear().toString(),(t.getUTCMonth()+1).toString().padStart(2,"0"),t.getUTCDate().toString().padStart(2,"0"),t.getUTCHours().toString().padStart(2,"0"),t.getUTCMinutes().toString().padStart(2,"0"),t.getUTCSeconds().toString().padStart(2,"0")].join("")},e.getVerbosityLevel=function(){return v},e.info=function(t){v>=p.INFOS&&console.log("Info: ".concat(t))},e.isArrayBuffer=function(t){return"object"===o(t)&&null!==t&&void 0!==t.byteLength},e.isArrayEqual=function(t,e){if(t.length!==e.length)return!1;for(var r=0,n=t.length;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==r.return||r.return()}finally{if(l)throw o}}}}(t);try{for(a.s();!(e=a.n()).done;){var o=(r=e.value,2,function(t){if(Array.isArray(t))return t}(r)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{for(a=(r=r.call(t)).next,0;!(l=(n=a.call(r)).done)&&(s.push(n.value),2!==s.length);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(r)||i(r,2)||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.")}()),s=o[0],l=o[1];n[s]=l}}catch(t){a.e(t)}finally{a.f()}return n},e.objectSize=function(t){return Object.keys(t).length},e.setVerbosityLevel=function(t){Number.isInteger(t)&&(v=t)},e.shadow=g,e.string32=function(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,255&t)},e.stringToBytes=P,e.stringToPDFString=function(t){var e;if(t[0]>="ï"&&("þ"===t[0]&&"ÿ"===t[1]?e="utf-16be":"ÿ"===t[0]&&"þ"===t[1]?e="utf-16le":"ï"===t[0]&&"»"===t[1]&&"¿"===t[2]&&(e="utf-8"),e))try{var r=new TextDecoder(e,{fatal:!0}),n=P(t);return r.decode(n)}catch(t){y('stringToPDFString: "'.concat(t,'".'))}for(var i=[],a=0,o=t.length;a=p.WARNINGS&&console.log("Warning: ".concat(t))}function m(t){throw new Error(t)}function g(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return Object.defineProperty(t,e,{value:r,enumerable:!n,configurable:!0,writable:!1}),r}var b=function(){function t(e,r){this.constructor===t&&m("Cannot initialize BaseException."),this.message=e,this.name=r}return t.prototype=new Error,t.constructor=t,t}();e.BaseException=b;var _=function(t){c(r,t);var e=f(r);function r(t,n){var i;return u(this,r),(i=e.call(this,t,"PasswordException")).code=n,i}return l(r)}(b);e.PasswordException=_;var w=function(t){c(r,t);var e=f(r);function r(t,n){var i;return u(this,r),(i=e.call(this,t,"UnknownErrorException")).details=n,i}return l(r)}(b);e.UnknownErrorException=w;var A=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"InvalidPDFException")}return l(r)}(b);e.InvalidPDFException=A;var k=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"MissingPDFException")}return l(r)}(b);e.MissingPDFException=k;var S=function(t){c(r,t);var e=f(r);function r(t,n){var i;return u(this,r),(i=e.call(this,t,"UnexpectedResponseException")).status=n,i}return l(r)}(b);e.UnexpectedResponseException=S;var x=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"FormatError")}return l(r)}(b);e.FormatError=x;var E=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"AbortException")}return l(r)}(b);function P(t){"string"!=typeof t&&m("Invalid argument for stringToBytes");for(var e=t.length,r=new Uint8Array(e),n=0;nt[2]&&(e[0]=t[2],e[2]=t[0]),t[1]>t[3]&&(e[1]=t[3],e[3]=t[1]),e}},{key:"intersect",value:function(t,e){var r=Math.max(Math.min(t[0],t[2]),Math.min(e[0],e[2])),n=Math.min(Math.max(t[0],t[2]),Math.max(e[0],e[2]));if(r>n)return null;var i=Math.max(Math.min(t[1],t[3]),Math.min(e[1],e[3])),a=Math.min(Math.max(t[1],t[3]),Math.max(e[1],e[3]));return i>a?null:[r,i,n,a]}},{key:"bezierBoundingBox",value:function(t,e,r,i,a,o,s,l){for(var u,c,h,f,d,p,v,y,m=[],g=[[],[]],b=0;b<2;++b)if(0===b?(c=6*t-12*r+6*a,u=-3*t+9*r-9*a+3*s,h=3*r-3*t):(c=6*e-12*i+6*o,u=-3*e+9*i-9*o+3*l,h=3*i-3*e),Math.abs(u)<1e-12){if(Math.abs(c)<1e-12)continue;0<(f=-h/c)&&f<1&&m.push(f)}else v=c*c-4*h*u,y=Math.sqrt(v),v<0||(0<(d=(-c+y)/(2*u))&&d<1&&m.push(d),0<(p=(-c-y)/(2*u))&&p<1&&m.push(p));for(var _,w=m.length,A=w;w--;)_=1-(f=m[w]),g[0][w]=_*_*_*t+3*_*_*f*r+3*_*f*f*a+f*f*f*s,g[1][w]=_*_*_*e+3*_*_*f*i+3*_*f*f*o+f*f*f*l;return g[0][A]=t,g[1][A]=e,g[0][A+1]=s,g[1][A+1]=l,g[0].length=g[1].length=A+2,[Math.min.apply(Math,n(g[0])),Math.min.apply(Math,n(g[1])),Math.max.apply(Math,n(g[0])),Math.max.apply(Math,n(g[1]))]}}]),t}();e.Util=F;var M=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function R(t){return decodeURIComponent(escape(t))}},(t,e,r)=>{var n=r(3);!globalThis.btoa&&n.isNodeJS&&(globalThis.btoa=function(t){return Buffer.from(t,"binary").toString("base64")}),!globalThis.atob&&n.isNodeJS&&(globalThis.atob=function(t){return Buffer.from(t,"base64").toString("binary")}),!globalThis.DOMMatrix&&n.isNodeJS&&(globalThis.DOMMatrix=require("canvas").DOMMatrix),!globalThis.ReadableStream&&n.isNodeJS&&(globalThis.ReadableStream=require("web-streams-polyfill/dist/ponyfill.js").ReadableStream),Array.prototype.at||r(4),Uint8Array.prototype.at||r(78),globalThis.structuredClone||r(88)},(t,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.isNodeJS=void 0;var n=!("object"!==("undefined"==typeof process?"undefined":r(process))||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type);e.isNodeJS=n},(t,e,r)=>{r(5);var n=r(77);t.exports=n("Array","at")},(t,e,r)=>{var n=r(6),i=r(43),a=r(67),o=r(65),s=r(72);n({target:"Array",proto:!0},{at:function(t){var e=i(this),r=a(e),n=o(t),s=n>=0?n:r+n;return s<0||s>=r?void 0:e[s]}}),s("at")},(t,e,r)=>{var n=r(7),i=r(8).f,a=r(47),o=r(51),s=r(41),l=r(59),u=r(71);t.exports=function(t,e){var r,c,h,f,d,p=t.target,v=t.global,y=t.stat;if(r=v?n:y?n[p]||s(p,{}):(n[p]||{}).prototype)for(c in e){if(f=e[c],h=t.dontCallGetSet?(d=i(r,c))&&d.value:r[c],!u(v?c:p+(y?".":"#")+c,t.forced)&&void 0!==h){if(typeof f==typeof h)continue;l(f,h)}(t.sham||h&&h.sham)&&a(f,"sham",!0),o(r,c,f,t)}}},t=>{var e=function(t){return t&&t.Math==Math&&t};t.exports=e("object"==typeof globalThis&&globalThis)||e("object"==typeof window&&window)||e("object"==typeof self&&self)||e("object"==typeof global&&global)||function(){return this}()||Function("return this")()},(t,e,r)=>{var n=r(9),i=r(11),a=r(13),o=r(14),s=r(15),l=r(21),u=r(42),c=r(45),h=Object.getOwnPropertyDescriptor;e.f=n?h:function(t,e){if(t=s(t),e=l(e),c)try{return h(t,e)}catch(t){}if(u(t,e))return o(!i(a.f,t,e),t[e])}},(t,e,r)=>{var n=r(10);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},(t,e,r)=>{var n=r(12),i=Function.prototype.call;t.exports=n?i.bind(i):function(){return i.apply(i,arguments)}},(t,e,r)=>{var n=r(10);t.exports=!n((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},(t,e)=>{var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,i=n&&!r.call({1:2},1);e.f=i?function(t){var e=n(this,t);return!!e&&e.enumerable}:r},t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},(t,e,r)=>{var n=r(16),i=r(19);t.exports=function(t){return n(i(t))}},(t,e,r)=>{var n=r(17),i=r(10),a=r(18),o=Object,s=n("".split);t.exports=i((function(){return!o("z").propertyIsEnumerable(0)}))?function(t){return"String"==a(t)?s(t,""):o(t)}:o},(t,e,r)=>{var n=r(12),i=Function.prototype,a=i.call,o=n&&i.bind.bind(a,a);t.exports=n?o:function(t){return function(){return a.apply(t,arguments)}}},(t,e,r)=>{var n=r(17),i=n({}.toString),a=n("".slice);t.exports=function(t){return a(i(t),8,-1)}},(t,e,r)=>{var n=r(20),i=TypeError;t.exports=function(t){if(n(t))throw i("Can't call method on "+t);return t}},t=>{t.exports=function(t){return null==t}},(t,e,r)=>{var n=r(22),i=r(26);t.exports=function(t){var e=n(t,"string");return i(e)?e:e+""}},(t,e,r)=>{var n=r(11),i=r(23),a=r(26),o=r(33),s=r(36),l=r(37),u=TypeError,c=l("toPrimitive");t.exports=function(t,e){if(!i(t)||a(t))return t;var r,l=o(t,c);if(l){if(void 0===e&&(e="default"),r=n(l,t,e),!i(r)||a(r))return r;throw u("Can't convert object to primitive value")}return void 0===e&&(e="number"),s(t,e)}},(t,e,r)=>{var n=r(24),i=r(25),a=i.all;t.exports=i.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:n(t)||t===a}:function(t){return"object"==typeof t?null!==t:n(t)}},(t,e,r)=>{var n=r(25),i=n.all;t.exports=n.IS_HTMLDDA?function(t){return"function"==typeof t||t===i}:function(t){return"function"==typeof t}},t=>{var e="object"==typeof document&&document.all,r=void 0===e&&void 0!==e;t.exports={all:e,IS_HTMLDDA:r}},(t,e,r)=>{var n=r(27),i=r(24),a=r(28),o=r(29),s=Object;t.exports=o?function(t){return"symbol"==typeof t}:function(t){var e=n("Symbol");return i(e)&&a(e.prototype,s(t))}},(t,e,r)=>{var n=r(7),i=r(24);t.exports=function(t,e){return arguments.length<2?(r=n[t],i(r)?r:void 0):n[t]&&n[t][e];var r}},(t,e,r)=>{var n=r(17);t.exports=n({}.isPrototypeOf)},(t,e,r)=>{var n=r(30);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},(t,e,r)=>{var n=r(31),i=r(10);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},(t,e,r)=>{var n,i,a=r(7),o=r(32),s=a.process,l=a.Deno,u=s&&s.versions||l&&l.version,c=u&&u.v8;c&&(i=(n=c.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&o&&(!(n=o.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\\/(\\d+)/))&&(i=+n[1]),t.exports=i},(t,e,r)=>{var n=r(27);t.exports=n("navigator","userAgent")||""},(t,e,r)=>{var n=r(34),i=r(20);t.exports=function(t,e){var r=t[e];return i(r)?void 0:n(r)}},(t,e,r)=>{var n=r(24),i=r(35),a=TypeError;t.exports=function(t){if(n(t))return t;throw a(i(t)+" is not a function")}},t=>{var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},(t,e,r)=>{var n=r(11),i=r(24),a=r(23),o=TypeError;t.exports=function(t,e){var r,s;if("string"===e&&i(r=t.toString)&&!a(s=n(r,t)))return s;if(i(r=t.valueOf)&&!a(s=n(r,t)))return s;if("string"!==e&&i(r=t.toString)&&!a(s=n(r,t)))return s;throw o("Can't convert object to primitive value")}},(t,e,r)=>{var n=r(7),i=r(38),a=r(42),o=r(44),s=r(30),l=r(29),u=i("wks"),c=n.Symbol,h=c&&c.for,f=l?c:c&&c.withoutSetter||o;t.exports=function(t){if(!a(u,t)||!s&&"string"!=typeof u[t]){var e="Symbol."+t;s&&a(c,t)?u[t]=c[t]:u[t]=l&&h?h(e):f(e)}return u[t]}},(t,e,r)=>{var n=r(39),i=r(40);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.26.1",mode:n?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})},t=>{t.exports=!1},(t,e,r)=>{var n=r(7),i=r(41),a="__core-js_shared__",o=n[a]||i(a,{});t.exports=o},(t,e,r)=>{var n=r(7),i=Object.defineProperty;t.exports=function(t,e){try{i(n,t,{value:e,configurable:!0,writable:!0})}catch(r){n[t]=e}return e}},(t,e,r)=>{var n=r(17),i=r(43),a=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return a(i(t),e)}},(t,e,r)=>{var n=r(19),i=Object;t.exports=function(t){return i(n(t))}},(t,e,r)=>{var n=r(17),i=0,a=Math.random(),o=n(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++i+a,36)}},(t,e,r)=>{var n=r(9),i=r(10),a=r(46);t.exports=!n&&!i((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},(t,e,r)=>{var n=r(7),i=r(23),a=n.document,o=i(a)&&i(a.createElement);t.exports=function(t){return o?a.createElement(t):{}}},(t,e,r)=>{var n=r(9),i=r(48),a=r(14);t.exports=n?function(t,e,r){return i.f(t,e,a(1,r))}:function(t,e,r){return t[e]=r,t}},(t,e,r)=>{var n=r(9),i=r(45),a=r(49),o=r(50),s=r(21),l=TypeError,u=Object.defineProperty,c=Object.getOwnPropertyDescriptor,h="enumerable",f="configurable",d="writable";e.f=n?a?function(t,e,r){if(o(t),e=s(e),o(r),"function"==typeof t&&"prototype"===e&&"value"in r&&d in r&&!r[d]){var n=c(t,e);n&&n[d]&&(t[e]=r.value,r={configurable:f in r?r[f]:n[f],enumerable:h in r?r[h]:n[h],writable:!1})}return u(t,e,r)}:u:function(t,e,r){if(o(t),e=s(e),o(r),i)try{return u(t,e,r)}catch(t){}if("get"in r||"set"in r)throw l("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},(t,e,r)=>{var n=r(9),i=r(10);t.exports=n&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},(t,e,r)=>{var n=r(23),i=String,a=TypeError;t.exports=function(t){if(n(t))return t;throw a(i(t)+" is not an object")}},(t,e,r)=>{var n=r(24),i=r(48),a=r(52),o=r(41);t.exports=function(t,e,r,s){s||(s={});var l=s.enumerable,u=void 0!==s.name?s.name:e;if(n(r)&&a(r,u,s),s.global)l?t[e]=r:o(e,r);else{try{s.unsafe?t[e]&&(l=!0):delete t[e]}catch(t){}l?t[e]=r:i.f(t,e,{value:r,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return t}},(t,e,r)=>{var n=r(10),i=r(24),a=r(42),o=r(9),s=r(53).CONFIGURABLE,l=r(54),u=r(55),c=u.enforce,h=u.get,f=Object.defineProperty,d=o&&!n((function(){return 8!==f((function(){}),"length",{value:8}).length})),p=String(String).split("String"),v=t.exports=function(t,e,r){"Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\\(([^)]*)\\)/,"$1")+"]"),r&&r.getter&&(e="get "+e),r&&r.setter&&(e="set "+e),(!a(t,"name")||s&&t.name!==e)&&(o?f(t,"name",{value:e,configurable:!0}):t.name=e),d&&r&&a(r,"arity")&&t.length!==r.arity&&f(t,"length",{value:r.arity});try{r&&a(r,"constructor")&&r.constructor?o&&f(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var n=c(t);return a(n,"source")||(n.source=p.join("string"==typeof e?e:"")),t};Function.prototype.toString=v((function(){return i(this)&&h(this).source||l(this)}),"toString")},(t,e,r)=>{var n=r(9),i=r(42),a=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,s=i(a,"name"),l=s&&"something"===function(){}.name,u=s&&(!n||n&&o(a,"name").configurable);t.exports={EXISTS:s,PROPER:l,CONFIGURABLE:u}},(t,e,r)=>{var n=r(17),i=r(24),a=r(40),o=n(Function.toString);i(a.inspectSource)||(a.inspectSource=function(t){return o(t)}),t.exports=a.inspectSource},(t,e,r)=>{var n,i,a,o=r(56),s=r(7),l=r(23),u=r(47),c=r(42),h=r(40),f=r(57),d=r(58),p="Object already initialized",v=s.TypeError,y=s.WeakMap;if(o||h.state){var m=h.state||(h.state=new y);m.get=m.get,m.has=m.has,m.set=m.set,n=function(t,e){if(m.has(t))throw v(p);return e.facade=t,m.set(t,e),e},i=function(t){return m.get(t)||{}},a=function(t){return m.has(t)}}else{var g=f("state");d[g]=!0,n=function(t,e){if(c(t,g))throw v(p);return e.facade=t,u(t,g,e),e},i=function(t){return c(t,g)?t[g]:{}},a=function(t){return c(t,g)}}t.exports={set:n,get:i,has:a,enforce:function(t){return a(t)?i(t):n(t,{})},getterFor:function(t){return function(e){var r;if(!l(e)||(r=i(e)).type!==t)throw v("Incompatible receiver, "+t+" required");return r}}}},(t,e,r)=>{var n=r(7),i=r(24),a=n.WeakMap;t.exports=i(a)&&/native code/.test(String(a))},(t,e,r)=>{var n=r(38),i=r(44),a=n("keys");t.exports=function(t){return a[t]||(a[t]=i(t))}},t=>{t.exports={}},(t,e,r)=>{var n=r(42),i=r(60),a=r(8),o=r(48);t.exports=function(t,e,r){for(var s=i(e),l=o.f,u=a.f,c=0;c{var n=r(27),i=r(17),a=r(61),o=r(70),s=r(50),l=i([].concat);t.exports=n("Reflect","ownKeys")||function(t){var e=a.f(s(t)),r=o.f;return r?l(e,r(t)):e}},(t,e,r)=>{var n=r(62),i=r(69).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},(t,e,r)=>{var n=r(17),i=r(42),a=r(15),o=r(63).indexOf,s=r(58),l=n([].push);t.exports=function(t,e){var r,n=a(t),u=0,c=[];for(r in n)!i(s,r)&&i(n,r)&&l(c,r);for(;e.length>u;)i(n,r=e[u++])&&(~o(c,r)||l(c,r));return c}},(t,e,r)=>{var n=r(15),i=r(64),a=r(67),o=function(t){return function(e,r,o){var s,l=n(e),u=a(l),c=i(o,u);if(t&&r!=r){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((t||c in l)&&l[c]===r)return t||c||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},(t,e,r)=>{var n=r(65),i=Math.max,a=Math.min;t.exports=function(t,e){var r=n(t);return r<0?i(r+e,0):a(r,e)}},(t,e,r)=>{var n=r(66);t.exports=function(t){var e=+t;return e!=e||0===e?0:n(e)}},t=>{var e=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){var n=+t;return(n>0?r:e)(n)}},(t,e,r)=>{var n=r(68);t.exports=function(t){return n(t.length)}},(t,e,r)=>{var n=r(65),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},t=>{t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},(t,e)=>{e.f=Object.getOwnPropertySymbols},(t,e,r)=>{var n=r(10),i=r(24),a=/#|\\.prototype\\./,o=function(t,e){var r=l[s(t)];return r==c||r!=u&&(i(e)?n(e):!!e)},s=o.normalize=function(t){return String(t).replace(a,".").toLowerCase()},l=o.data={},u=o.NATIVE="N",c=o.POLYFILL="P";t.exports=o},(t,e,r)=>{var n=r(37),i=r(73),a=r(48).f,o=n("unscopables"),s=Array.prototype;null==s[o]&&a(s,o,{configurable:!0,value:i(null)}),t.exports=function(t){s[o][t]=!0}},(t,e,r)=>{var n,i=r(50),a=r(74),o=r(69),s=r(58),l=r(76),u=r(46),c=r(57),h="prototype",f="script",d=c("IE_PROTO"),p=function(){},v=function(t){return"<"+f+">"+t+""},y=function(t){t.write(v("")),t.close();var e=t.parentWindow.Object;return t=null,e},m=function(){try{n=new ActiveXObject("htmlfile")}catch(t){}var t,e,r;m="undefined"!=typeof document?document.domain&&n?y(n):(e=u("iframe"),r="java"+f+":",e.style.display="none",l.appendChild(e),e.src=String(r),(t=e.contentWindow.document).open(),t.write(v("document.F=Object")),t.close(),t.F):y(n);for(var i=o.length;i--;)delete m[h][o[i]];return m()};s[d]=!0,t.exports=Object.create||function(t,e){var r;return null!==t?(p[h]=i(t),r=new p,p[h]=null,r[d]=t):r=m(),void 0===e?r:a.f(r,e)}},(t,e,r)=>{var n=r(9),i=r(49),a=r(48),o=r(50),s=r(15),l=r(75);e.f=n&&!i?Object.defineProperties:function(t,e){o(t);for(var r,n=s(e),i=l(e),u=i.length,c=0;u>c;)a.f(t,r=i[c++],n[r]);return t}},(t,e,r)=>{var n=r(62),i=r(69);t.exports=Object.keys||function(t){return n(t,i)}},(t,e,r)=>{var n=r(27);t.exports=n("document","documentElement")},(t,e,r)=>{var n=r(7),i=r(17);t.exports=function(t,e){return i(n[t].prototype[e])}},(t,e,r)=>{r(79)},(t,e,r)=>{var n=r(80),i=r(67),a=r(65),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("at",(function(t){var e=o(this),r=i(e),n=a(t),s=n>=0?n:r+n;return s<0||s>=r?void 0:e[s]}))},(t,e,r)=>{var n,i,a,o=r(81),s=r(9),l=r(7),u=r(24),c=r(23),h=r(42),f=r(82),d=r(35),p=r(47),v=r(51),y=r(48).f,m=r(28),g=r(84),b=r(86),_=r(37),w=r(44),A=r(55),k=A.enforce,S=A.get,x=l.Int8Array,E=x&&x.prototype,P=l.Uint8ClampedArray,T=P&&P.prototype,C=x&&g(x),O=E&&g(E),F=Object.prototype,M=l.TypeError,R=_("toStringTag"),I=w("TYPED_ARRAY_TAG"),j="TypedArrayConstructor",L=o&&!!b&&"Opera"!==f(l.opera),D=!1,N={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},U={BigInt64Array:8,BigUint64Array:8},W=function(t){var e=g(t);if(c(e)){var r=S(e);return r&&h(r,j)?r[j]:W(e)}},G=function(t){if(!c(t))return!1;var e=f(t);return h(N,e)||h(U,e)};for(n in N)(a=(i=l[n])&&i.prototype)?k(a)[j]=i:L=!1;for(n in U)(a=(i=l[n])&&i.prototype)&&(k(a)[j]=i);if((!L||!u(C)||C===Function.prototype)&&(C=function(){throw M("Incorrect invocation")},L))for(n in N)l[n]&&b(l[n],C);if((!L||!O||O===F)&&(O=C.prototype,L))for(n in N)l[n]&&b(l[n].prototype,O);if(L&&g(T)!==O&&b(T,O),s&&!h(O,R))for(n in D=!0,y(O,R,{get:function(){return c(this)?this[I]:void 0}}),N)l[n]&&p(l[n],I,n);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:L,TYPED_ARRAY_TAG:D&&I,aTypedArray:function(t){if(G(t))return t;throw M("Target is not a typed array")},aTypedArrayConstructor:function(t){if(u(t)&&(!b||m(C,t)))return t;throw M(d(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,r,n){if(s){if(r)for(var i in N){var a=l[i];if(a&&h(a.prototype,t))try{delete a.prototype[t]}catch(r){try{a.prototype[t]=e}catch(t){}}}O[t]&&!r||v(O,t,r?e:L&&E[t]||e,n)}},exportTypedArrayStaticMethod:function(t,e,r){var n,i;if(s){if(b){if(r)for(n in N)if((i=l[n])&&h(i,t))try{delete i[t]}catch(t){}if(C[t]&&!r)return;try{return v(C,t,r?e:L&&C[t]||e)}catch(t){}}for(n in N)!(i=l[n])||i[t]&&!r||v(i,t,e)}},getTypedArrayConstructor:W,isView:function(t){if(!c(t))return!1;var e=f(t);return"DataView"===e||h(N,e)||h(U,e)},isTypedArray:G,TypedArray:C,TypedArrayPrototype:O}},t=>{t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},(t,e,r)=>{var n=r(83),i=r(24),a=r(18),o=r(37)("toStringTag"),s=Object,l="Arguments"==a(function(){return arguments}());t.exports=n?a:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=s(t),o))?r:l?a(e):"Object"==(n=a(e))&&i(e.callee)?"Arguments":n}},(t,e,r)=>{var n={};n[r(37)("toStringTag")]="z",t.exports="[object z]"===String(n)},(t,e,r)=>{var n=r(42),i=r(24),a=r(43),o=r(57),s=r(85),l=o("IE_PROTO"),u=Object,c=u.prototype;t.exports=s?u.getPrototypeOf:function(t){var e=a(t);if(n(e,l))return e[l];var r=e.constructor;return i(r)&&e instanceof r?r.prototype:e instanceof u?c:null}},(t,e,r)=>{var n=r(10);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},(t,e,r)=>{var n=r(17),i=r(50),a=r(87);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,r={};try{(t=n(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(r,[]),e=r instanceof Array}catch(t){}return function(r,n){return i(r),a(n),e?t(r,n):r.__proto__=n,r}}():void 0)},(t,e,r)=>{var n=r(24),i=String,a=TypeError;t.exports=function(t){if("object"==typeof t||n(t))return t;throw a("Can't set "+i(t)+" as a prototype")}},(t,e,r)=>{r(89),r(96),r(98),r(121),r(123);var n=r(132);t.exports=n.structuredClone},(t,e,r)=>{var n=r(15),i=r(72),a=r(90),o=r(55),s=r(48).f,l=r(91),u=r(95),c=r(39),h=r(9),f="Array Iterator",d=o.set,p=o.getterFor(f);t.exports=l(Array,"Array",(function(t,e){d(this,{type:f,target:n(t),index:0,kind:e})}),(function(){var t=p(this),e=t.target,r=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,u(void 0,!0)):u("keys"==r?n:"values"==r?e[n]:[n,e[n]],!1)}),"values");var v=a.Arguments=a.Array;if(i("keys"),i("values"),i("entries"),!c&&h&&"values"!==v.name)try{s(v,"name",{value:"values"})}catch(t){}},t=>{t.exports={}},(t,e,r)=>{var n=r(6),i=r(11),a=r(39),o=r(53),s=r(24),l=r(92),u=r(84),c=r(86),h=r(94),f=r(47),d=r(51),p=r(37),v=r(90),y=r(93),m=o.PROPER,g=o.CONFIGURABLE,b=y.IteratorPrototype,_=y.BUGGY_SAFARI_ITERATORS,w=p("iterator"),A="keys",k="values",S="entries",x=function(){return this};t.exports=function(t,e,r,o,p,y,E){l(r,e,o);var P,T,C,O=function(t){if(t===p&&j)return j;if(!_&&t in R)return R[t];switch(t){case A:case k:case S:return function(){return new r(this,t)}}return function(){return new r(this)}},F=e+" Iterator",M=!1,R=t.prototype,I=R[w]||R["@@iterator"]||p&&R[p],j=!_&&I||O(p),L="Array"==e&&R.entries||I;if(L&&(P=u(L.call(new t)))!==Object.prototype&&P.next&&(a||u(P)===b||(c?c(P,b):s(P[w])||d(P,w,x)),h(P,F,!0,!0),a&&(v[F]=x)),m&&p==k&&I&&I.name!==k&&(!a&&g?f(R,"name",k):(M=!0,j=function(){return i(I,this)})),p)if(T={values:O(k),keys:y?j:O(A),entries:O(S)},E)for(C in T)(_||M||!(C in R))&&d(R,C,T[C]);else n({target:e,proto:!0,forced:_||M},T);return a&&!E||R[w]===j||d(R,w,j,{name:p}),v[e]=j,T}},(t,e,r)=>{var n=r(93).IteratorPrototype,i=r(73),a=r(14),o=r(94),s=r(90),l=function(){return this};t.exports=function(t,e,r,u){var c=e+" Iterator";return t.prototype=i(n,{next:a(+!u,r)}),o(t,c,!1,!0),s[c]=l,t}},(t,e,r)=>{var n,i,a,o=r(10),s=r(24),l=r(23),u=r(73),c=r(84),h=r(51),f=r(37),d=r(39),p=f("iterator"),v=!1;[].keys&&("next"in(a=[].keys())?(i=c(c(a)))!==Object.prototype&&(n=i):v=!0),!l(n)||o((function(){var t={};return n[p].call(t)!==t}))?n={}:d&&(n=u(n)),s(n[p])||h(n,p,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:v}},(t,e,r)=>{var n=r(48).f,i=r(42),a=r(37)("toStringTag");t.exports=function(t,e,r){t&&!r&&(t=t.prototype),t&&!i(t,a)&&n(t,a,{configurable:!0,value:e})}},t=>{t.exports=function(t,e){return{value:t,done:e}}},(t,e,r)=>{var n=r(83),i=r(51),a=r(97);n||i(Object.prototype,"toString",a,{unsafe:!0})},(t,e,r)=>{var n=r(83),i=r(82);t.exports=n?{}.toString:function(){return"[object "+i(this)+"]"}},(t,e,r)=>{r(99)},(t,e,r)=>{r(100)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r(118))},(t,e,r)=>{var n=r(6),i=r(7),a=r(17),o=r(71),s=r(51),l=r(101),u=r(108),c=r(115),h=r(24),f=r(20),d=r(23),p=r(10),v=r(116),y=r(94),m=r(117);t.exports=function(t,e,r){var g=-1!==t.indexOf("Map"),b=-1!==t.indexOf("Weak"),_=g?"set":"add",w=i[t],A=w&&w.prototype,k=w,S={},x=function(t){var e=a(A[t]);s(A,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(b&&!d(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return b&&!d(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(b&&!d(t))&&e(this,0===t?0:t)}:function(t,r){return e(this,0===t?0:t,r),this})};if(o(t,!h(w)||!(b||A.forEach&&!p((function(){(new w).entries().next()})))))k=r.getConstructor(e,t,g,_),l.enable();else if(o(t,!0)){var E=new k,P=E[_](b?{}:-0,1)!=E,T=p((function(){E.has(1)})),C=v((function(t){new w(t)})),O=!b&&p((function(){for(var t=new w,e=5;e--;)t[_](e,e);return!t.has(-0)}));C||((k=e((function(t,e){c(t,A);var r=m(new w,t,k);return f(e)||u(e,r[_],{that:r,AS_ENTRIES:g}),r}))).prototype=A,A.constructor=k),(T||O)&&(x("delete"),x("has"),g&&x("get")),(O||P)&&x(_),b&&A.clear&&delete A.clear}return S[t]=k,n({global:!0,constructor:!0,forced:k!=w},S),y(k,t),b||r.setStrong(k,t,g),k}},(t,e,r)=>{var n=r(6),i=r(17),a=r(58),o=r(23),s=r(42),l=r(48).f,u=r(61),c=r(102),h=r(105),f=r(44),d=r(107),p=!1,v=f("meta"),y=0,m=function(t){l(t,v,{value:{objectID:"O"+y++,weakData:{}}})},g=t.exports={enable:function(){g.enable=function(){},p=!0;var t=u.f,e=i([].splice),r={};r[v]=1,t(r).length&&(u.f=function(r){for(var n=t(r),i=0,a=n.length;i{var n=r(18),i=r(15),a=r(61).f,o=r(103),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&"Window"==n(t)?function(t){try{return a(t)}catch(t){return o(s)}}(t):a(i(t))}},(t,e,r)=>{var n=r(64),i=r(67),a=r(104),o=Array,s=Math.max;t.exports=function(t,e,r){for(var l=i(t),u=n(e,l),c=n(void 0===r?l:r,l),h=o(s(c-u,0)),f=0;u{var n=r(21),i=r(48),a=r(14);t.exports=function(t,e,r){var o=n(e);o in t?i.f(t,o,a(0,r)):t[o]=r}},(t,e,r)=>{var n=r(10),i=r(23),a=r(18),o=r(106),s=Object.isExtensible,l=n((function(){s(1)}));t.exports=l||o?function(t){return!!i(t)&&(!o||"ArrayBuffer"!=a(t))&&(!s||s(t))}:s},(t,e,r)=>{var n=r(10);t.exports=n((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},(t,e,r)=>{var n=r(10);t.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},(t,e,r)=>{var n=r(109),i=r(11),a=r(50),o=r(35),s=r(111),l=r(67),u=r(28),c=r(112),h=r(113),f=r(114),d=TypeError,p=function(t,e){this.stopped=t,this.result=e},v=p.prototype;t.exports=function(t,e,r){var y,m,g,b,_,w,A,k=r&&r.that,S=!(!r||!r.AS_ENTRIES),x=!(!r||!r.IS_RECORD),E=!(!r||!r.IS_ITERATOR),P=!(!r||!r.INTERRUPTED),T=n(e,k),C=function(t){return y&&f(y,"normal",t),new p(!0,t)},O=function(t){return S?(a(t),P?T(t[0],t[1],C):T(t[0],t[1])):P?T(t,C):T(t)};if(x)y=t.iterator;else if(E)y=t;else{if(!(m=h(t)))throw d(o(t)+" is not iterable");if(s(m)){for(g=0,b=l(t);b>g;g++)if((_=O(t[g]))&&u(v,_))return _;return new p(!1)}y=c(t,m)}for(w=x?t.next:y.next;!(A=i(w,y)).done;){try{_=O(A.value)}catch(t){f(y,"throw",t)}if("object"==typeof _&&_&&u(v,_))return _}return new p(!1)}},(t,e,r)=>{var n=r(110),i=r(34),a=r(12),o=n(n.bind);t.exports=function(t,e){return i(t),void 0===e?t:a?o(t,e):function(){return t.apply(e,arguments)}}},(t,e,r)=>{var n=r(18),i=r(17);t.exports=function(t){if("Function"===n(t))return i(t)}},(t,e,r)=>{var n=r(37),i=r(90),a=n("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[a]===t)}},(t,e,r)=>{var n=r(11),i=r(34),a=r(50),o=r(35),s=r(113),l=TypeError;t.exports=function(t,e){var r=arguments.length<2?s(t):e;if(i(r))return a(n(r,t));throw l(o(t)+" is not iterable")}},(t,e,r)=>{var n=r(82),i=r(33),a=r(20),o=r(90),s=r(37)("iterator");t.exports=function(t){if(!a(t))return i(t,s)||i(t,"@@iterator")||o[n(t)]}},(t,e,r)=>{var n=r(11),i=r(50),a=r(33);t.exports=function(t,e,r){var o,s;i(t);try{if(!(o=a(t,"return"))){if("throw"===e)throw r;return r}o=n(o,t)}catch(t){s=!0,o=t}if("throw"===e)throw r;if(s)throw o;return i(o),r}},(t,e,r)=>{var n=r(28),i=TypeError;t.exports=function(t,e){if(n(e,t))return t;throw i("Incorrect invocation")}},(t,e,r)=>{var n=r(37)("iterator"),i=!1;try{var a=0,o={next:function(){return{done:!!a++}},return:function(){i=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var a={};a[n]=function(){return{next:function(){return{done:r=!0}}}},t(a)}catch(t){}return r}},(t,e,r)=>{var n=r(24),i=r(23),a=r(86);t.exports=function(t,e,r){var o,s;return a&&n(o=e.constructor)&&o!==r&&i(s=o.prototype)&&s!==r.prototype&&a(t,s),t}},(t,e,r)=>{var n=r(48).f,i=r(73),a=r(119),o=r(109),s=r(115),l=r(20),u=r(108),c=r(91),h=r(95),f=r(120),d=r(9),p=r(101).fastKey,v=r(55),y=v.set,m=v.getterFor;t.exports={getConstructor:function(t,e,r,c){var h=t((function(t,n){s(t,f),y(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),d||(t.size=0),l(n)||u(n,t[c],{that:t,AS_ENTRIES:r})})),f=h.prototype,v=m(e),g=function(t,e,r){var n,i,a=v(t),o=b(t,e);return o?o.value=r:(a.last=o={index:i=p(e,!0),key:e,value:r,previous:n=a.last,next:void 0,removed:!1},a.first||(a.first=o),n&&(n.next=o),d?a.size++:t.size++,"F"!==i&&(a.index[i]=o)),t},b=function(t,e){var r,n=v(t),i=p(e);if("F"!==i)return n.index[i];for(r=n.first;r;r=r.next)if(r.key==e)return r};return a(f,{clear:function(){for(var t=v(this),e=t.index,r=t.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete e[r.index],r=r.next;t.first=t.last=void 0,d?t.size=0:this.size=0},delete:function(t){var e=this,r=v(e),n=b(e,t);if(n){var i=n.next,a=n.previous;delete r.index[n.index],n.removed=!0,a&&(a.next=i),i&&(i.previous=a),r.first==n&&(r.first=i),r.last==n&&(r.last=a),d?r.size--:e.size--}return!!n},forEach:function(t){for(var e,r=v(this),n=o(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:r.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!b(this,t)}}),a(f,r?{get:function(t){var e=b(this,t);return e&&e.value},set:function(t,e){return g(this,0===t?0:t,e)}}:{add:function(t){return g(this,t=0===t?0:t,t)}}),d&&n(f,"size",{get:function(){return v(this).size}}),h},setStrong:function(t,e,r){var n=e+" Iterator",i=m(e),a=m(n);c(t,e,(function(t,e){y(this,{type:n,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=a(this),e=t.kind,r=t.last;r&&r.removed;)r=r.previous;return t.target&&(t.last=r=r?r.next:t.state.first)?h("keys"==e?r.key:"values"==e?r.value:[r.key,r.value],!1):(t.target=void 0,h(void 0,!0))}),r?"entries":"values",!r,!0),f(e)}}},(t,e,r)=>{var n=r(51);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},(t,e,r)=>{var n=r(27),i=r(48),a=r(37),o=r(9),s=a("species");t.exports=function(t){var e=n(t),r=i.f;o&&e&&!e[s]&&r(e,s,{configurable:!0,get:function(){return this}})}},(t,e,r)=>{r(122)},(t,e,r)=>{r(100)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r(118))},(t,e,r)=>{var n,i=r(39),a=r(6),o=r(7),s=r(27),l=r(17),u=r(10),c=r(44),h=r(24),f=r(124),d=r(20),p=r(23),v=r(26),y=r(108),m=r(50),g=r(82),b=r(42),_=r(104),w=r(47),A=r(67),k=r(125),S=r(126),x=r(128),E=r(31),P=r(129),T=r(130),C=r(131),O=o.Object,F=o.Date,M=o.Error,R=o.EvalError,I=o.RangeError,j=o.ReferenceError,L=o.SyntaxError,D=o.TypeError,N=o.URIError,U=o.PerformanceMark,W=o.WebAssembly,G=W&&W.CompileError||M,B=W&&W.LinkError||M,q=W&&W.RuntimeError||M,H=s("DOMException"),z=s("Set"),V=s("Map"),X=V.prototype,Y=l(X.has),K=l(X.get),J=l(X.set),Q=l(z.prototype.add),$=s("Object","keys"),Z=l([].push),tt=l((!0).valueOf),et=l(1..valueOf),rt=l("".valueOf),nt=l(F.prototype.getTime),it=c("structuredClone"),at="DataCloneError",ot="Transferring",st=function(t){return!u((function(){var e=new o.Set([7]),r=t(e),n=t(O(7));return r==e||!r.has(7)||"object"!=typeof n||7!=n}))&&t},lt=function(t,e){return!u((function(){var r=new e,n=t({a:r,b:r});return!(n&&n.a===n.b&&n.a instanceof e&&n.a.stack===r.stack)}))},ut=o.structuredClone,ct=i||!lt(ut,M)||!lt(ut,H)||(n=ut,!!u((function(){var t=n(new o.AggregateError([1],it,{cause:3}));return"AggregateError"!=t.name||1!=t.errors[0]||t.message!=it||3!=t.cause}))),ht=!ut&&st((function(t){return new U(it,{detail:t}).detail})),ft=st(ut)||ht,dt=function(t){throw new H("Uncloneable type: "+t,at)},pt=function(t,e){throw new H((e||"Cloning")+" of "+t+" cannot be properly polyfilled in this engine",at)},vt=function(t,e){if(v(t)&&dt("Symbol"),!p(t))return t;if(e){if(Y(e,t))return K(e,t)}else e=new V;var r,n,i,a,l,u,c,f,d,y,m=g(t),k=!1;switch(m){case"Array":i=[],k=!0;break;case"Object":i={},k=!0;break;case"Map":i=new V,k=!0;break;case"Set":i=new z,k=!0;break;case"RegExp":i=new RegExp(t.source,S(t));break;case"Error":switch(n=t.name){case"AggregateError":i=s("AggregateError")([]);break;case"EvalError":i=R();break;case"RangeError":i=I();break;case"ReferenceError":i=j();break;case"SyntaxError":i=L();break;case"TypeError":i=D();break;case"URIError":i=N();break;case"CompileError":i=G();break;case"LinkError":i=B();break;case"RuntimeError":i=q();break;default:i=M()}k=!0;break;case"DOMException":i=new H(t.message,t.name),k=!0;break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":r=o[m],p(r)||pt(m),i=new r(vt(t.buffer,e),t.byteOffset,"DataView"===m?t.byteLength:t.length);break;case"DOMQuad":try{i=new DOMQuad(vt(t.p1,e),vt(t.p2,e),vt(t.p3,e),vt(t.p4,e))}catch(e){ft?i=ft(t):pt(m)}break;case"FileList":if(a=function(){var t;try{t=new o.DataTransfer}catch(e){try{t=new o.ClipboardEvent("").clipboardData}catch(t){}}return t&&t.items&&t.files?t:null}()){for(l=0,u=A(t);l92||C&&E>94||P&&E>97)return!1;var t=new ArrayBuffer(8),e=ut(t,{transfer:[t]});return 0!=t.byteLength||8!=e.byteLength}));a({global:!0,enumerable:!0,sham:!yt,forced:ct},{structuredClone:function(t){var e,r=k(arguments.length,1)>1&&!d(arguments[1])?m(arguments[1]):void 0,n=r?r.transfer:void 0;return void 0!==n&&function(t,e){if(!p(t))throw D("Transfer option cannot be converted to a sequence");var r=[];y(t,(function(t){Z(r,m(t))}));var n,i,a,s,l,u,c=0,d=A(r);if(yt)for(s=ut(r,{transfer:r});c{var n=r(17),i=r(10),a=r(24),o=r(82),s=r(27),l=r(54),u=function(){},c=[],h=s("Reflect","construct"),f=/^\\s*(?:class|function)\\b/,d=n(f.exec),p=!f.exec(u),v=function(t){if(!a(t))return!1;try{return h(u,c,t),!0}catch(t){return!1}},y=function(t){if(!a(t))return!1;switch(o(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return p||!!d(f,l(t))}catch(t){return!0}};y.sham=!0,t.exports=!h||i((function(){var t;return v(v.call)||!v(Object)||!v((function(){t=!0}))||t}))?y:v},t=>{var e=TypeError;t.exports=function(t,r){if(t{var n=r(11),i=r(42),a=r(28),o=r(127),s=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in s||i(t,"flags")||!a(s,t)?e:n(o,t)}},(t,e,r)=>{var n=r(50);t.exports=function(){var t=n(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.unicodeSets&&(e+="v"),t.sticky&&(e+="y"),e}},(t,e,r)=>{var n=r(10),i=r(14);t.exports=!n((function(){var t=Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",i(1,7)),7!==t.stack)}))},(t,e,r)=>{var n=r(130),i=r(131);t.exports=!n&&!i&&"object"==typeof window&&"object"==typeof document},t=>{t.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},(t,e,r)=>{var n=r(18),i=r(7);t.exports="process"==n(i.process)},(t,e,r)=>{var n=r(7);t.exports=n},(__unused_webpack_module,exports,__w_pdfjs_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.build=exports.RenderTask=exports.PDFWorkerUtil=exports.PDFWorker=exports.PDFPageProxy=exports.PDFDocumentProxy=exports.PDFDocumentLoadingTask=exports.PDFDataRangeTransport=exports.LoopbackPort=exports.DefaultStandardFontDataFactory=exports.DefaultCanvasFactory=exports.DefaultCMapReaderFactory=void 0,exports.getDocument=getDocument,exports.setPDFNetworkStreamFactory=setPDFNetworkStreamFactory,exports.version=void 0;var _util=__w_pdfjs_require__(1),_annotation_storage=__w_pdfjs_require__(134),_display_utils=__w_pdfjs_require__(137),_font_loader=__w_pdfjs_require__(140),_canvas=__w_pdfjs_require__(141),_worker_options=__w_pdfjs_require__(144),_is_node=__w_pdfjs_require__(3),_message_handler=__w_pdfjs_require__(145),_metadata=__w_pdfjs_require__(146),_optional_content_config=__w_pdfjs_require__(147),_transport_stream=__w_pdfjs_require__(148),_xfa_text=__w_pdfjs_require__(149);function _classPrivateMethodInitSpec(t,e){_checkPrivateRedeclaration(t,e),e.add(t)}function _classPrivateMethodGet(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function _toConsumableArray(t){return _arrayWithoutHoles(t)||_iterableToArray(t)||_unsupportedIterableToArray(t)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function _arrayWithoutHoles(t){if(Array.isArray(t))return _arrayLikeToArray(t)}function _createForOfIteratorHelper(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=_unsupportedIterableToArray(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function _regeneratorRuntime(){_regeneratorRuntime=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function l(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,r){return t[e]=r}}function u(t,e,r,i){var a=e&&e.prototype instanceof f?e:f,o=Object.create(a.prototype),s=new x(i||[]);return n(o,"_invoke",{value:w(t,r,s)}),o}function c(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var h={};function f(){}function d(){}function p(){}var v={};l(v,a,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(E([])));m&&m!==e&&r.call(m,a)&&(v=m);var g=p.prototype=f.prototype=Object.create(v);function b(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function _(t,e){function i(n,a,o,s){var l=c(t[n],t,a);if("throw"!==l.type){var u=l.arg,h=u.value;return h&&"object"==_typeof(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,s)}))}s(l.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function w(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=A(o,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=c(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===h)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function A(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,A(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var i=c(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,h;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,h):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,h)}function k(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function x(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(k,this),this.reset(!0)}function E(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),S(r),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;S(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:E(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},t}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;_classCallCheck(this,t),this.length=e,this.initialData=r,this.progressiveDone=n,this.contentDispositionFilename=i,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._progressiveDoneListeners=[],this._readyCapability=(0,_util.createPromiseCapability)()}return _createClass(t,[{key:"addRangeListener",value:function(t){this._rangeListeners.push(t)}},{key:"addProgressListener",value:function(t){this._progressListeners.push(t)}},{key:"addProgressiveReadListener",value:function(t){this._progressiveReadListeners.push(t)}},{key:"addProgressiveDoneListener",value:function(t){this._progressiveDoneListeners.push(t)}},{key:"onDataRange",value:function(t,e){var r,n=_createForOfIteratorHelper(this._rangeListeners);try{for(n.s();!(r=n.n()).done;)(0,r.value)(t,e)}catch(t){n.e(t)}finally{n.f()}}},{key:"onDataProgress",value:function(t,e){var r=this;this._readyCapability.promise.then((function(){var n,i=_createForOfIteratorHelper(r._progressListeners);try{for(i.s();!(n=i.n()).done;)(0,n.value)(t,e)}catch(t){i.e(t)}finally{i.f()}}))}},{key:"onDataProgressiveRead",value:function(t){var e=this;this._readyCapability.promise.then((function(){var r,n=_createForOfIteratorHelper(e._progressiveReadListeners);try{for(n.s();!(r=n.n()).done;)(0,r.value)(t)}catch(t){n.e(t)}finally{n.f()}}))}},{key:"onDataProgressiveDone",value:function(){var t=this;this._readyCapability.promise.then((function(){var e,r=_createForOfIteratorHelper(t._progressiveDoneListeners);try{for(r.s();!(e=r.n()).done;)(0,e.value)()}catch(t){r.e(t)}finally{r.f()}}))}},{key:"transportReady",value:function(){this._readyCapability.resolve()}},{key:"requestDataRange",value:function(t,e){(0,_util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange")}},{key:"abort",value:function(){}}]),t}();exports.PDFDataRangeTransport=PDFDataRangeTransport;var PDFDocumentProxy=function(){function t(e,r){_classCallCheck(this,t),this._pdfInfo=e,this._transport=r}return _createClass(t,[{key:"annotationStorage",get:function(){return this._transport.annotationStorage}},{key:"numPages",get:function(){return this._pdfInfo.numPages}},{key:"fingerprints",get:function(){return this._pdfInfo.fingerprints}},{key:"stats",get:function(){return(0,_display_utils.deprecated)("The PDFDocumentProxy stats property will be removed in the future."),this._transport.stats}},{key:"isPureXfa",get:function(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}},{key:"allXfaHtml",get:function(){return this._transport._htmlForXfa}},{key:"getPage",value:function(t){return this._transport.getPage(t)}},{key:"getPageIndex",value:function(t){return this._transport.getPageIndex(t)}},{key:"getDestinations",value:function(){return this._transport.getDestinations()}},{key:"getDestination",value:function(t){return this._transport.getDestination(t)}},{key:"getPageLabels",value:function(){return this._transport.getPageLabels()}},{key:"getPageLayout",value:function(){return this._transport.getPageLayout()}},{key:"getPageMode",value:function(){return this._transport.getPageMode()}},{key:"getViewerPreferences",value:function(){return this._transport.getViewerPreferences()}},{key:"getOpenAction",value:function(){return this._transport.getOpenAction()}},{key:"getAttachments",value:function(){return this._transport.getAttachments()}},{key:"getJavaScript",value:function(){return this._transport.getJavaScript()}},{key:"getJSActions",value:function(){return this._transport.getDocJSActions()}},{key:"getOutline",value:function(){return this._transport.getOutline()}},{key:"getOptionalContentConfig",value:function(){return this._transport.getOptionalContentConfig()}},{key:"getPermissions",value:function(){return this._transport.getPermissions()}},{key:"getMetadata",value:function(){return this._transport.getMetadata()}},{key:"getMarkInfo",value:function(){return this._transport.getMarkInfo()}},{key:"getData",value:function(){return this._transport.getData()}},{key:"saveDocument",value:function(){return this._transport.saveDocument()}},{key:"getDownloadInfo",value:function(){return this._transport.downloadInfoCapability.promise}},{key:"cleanup",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._transport.startCleanup(t||this.isPureXfa)}},{key:"destroy",value:function(){return this.loadingTask.destroy()}},{key:"loadingParams",get:function(){return this._transport.loadingParams}},{key:"loadingTask",get:function(){return this._transport.loadingTask}},{key:"getFieldObjects",value:function(){return this._transport.getFieldObjects()}},{key:"hasJSActions",value:function(){return this._transport.hasJSActions()}},{key:"getCalculationOrderIds",value:function(){return this._transport.getCalculationOrderIds()}}]),t}();exports.PDFDocumentProxy=PDFDocumentProxy;var PDFPageProxy=function(){function t(e,r,n,i){var a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];_classCallCheck(this,t),this._pageIndex=e,this._pageInfo=r,this._ownerDocument=i,this._transport=n,this._stats=a?new _display_utils.StatTimer:null,this._pdfBug=a,this.commonObjs=n.commonObjs,this.objs=new PDFObjects,this._bitmaps=new Set,this.cleanupAfterRender=!1,this.pendingCleanup=!1,this._intentStates=new Map,this.destroyed=!1}var e;return _createClass(t,[{key:"pageNumber",get:function(){return this._pageIndex+1}},{key:"rotate",get:function(){return this._pageInfo.rotate}},{key:"ref",get:function(){return this._pageInfo.ref}},{key:"userUnit",get:function(){return this._pageInfo.userUnit}},{key:"view",get:function(){return this._pageInfo.view}},{key:"getViewport",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.scale,r=t.rotation,n=void 0===r?this.rotate:r,i=t.offsetX,a=void 0===i?0:i,o=t.offsetY,s=void 0===o?0:o,l=t.dontFlip,u=void 0!==l&&l;return new _display_utils.PageViewport({viewBox:this.view,scale:e,rotation:n,offsetX:a,offsetY:s,dontFlip:u})}},{key:"getAnnotations",value:function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).intent,e=void 0===t?"display":t,r=this._transport.getRenderingIntent(e);return this._transport.getAnnotations(this._pageIndex,r.renderingIntent)}},{key:"getJSActions",value:function(){return this._transport.getPageJSActions(this._pageIndex)}},{key:"isPureXfa",get:function(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}},{key:"getXfa",value:(e=_asyncToGenerator(_regeneratorRuntime().mark((function t(){var e;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(null===(e=this._transport._htmlForXfa)||void 0===e?void 0:e.children[this._pageIndex])||null);case 1:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"render",value:function(t){var e,r,n=this,i=t.canvasContext,a=t.viewport,o=t.intent,s=void 0===o?"display":o,l=t.annotationMode,u=void 0===l?_util.AnnotationMode.ENABLE:l,c=t.transform,h=void 0===c?null:c,f=t.canvasFactory,d=void 0===f?null:f,p=t.background,v=void 0===p?null:p,y=t.optionalContentConfigPromise,m=void 0===y?null:y,g=t.annotationCanvasMap,b=void 0===g?null:g,_=t.pageColors,w=void 0===_?null:_,A=t.printAnnotationStorage,k=void 0===A?null:A;null===(e=this._stats)||void 0===e||e.time("Overall");var S=this._transport.getRenderingIntent(s,u,k);this.pendingCleanup=!1,m||(m=this._transport.getOptionalContentConfig());var x=this._intentStates.get(S.cacheKey);x||(x=Object.create(null),this._intentStates.set(S.cacheKey,x)),x.streamReaderCancelTimeout&&(clearTimeout(x.streamReaderCancelTimeout),x.streamReaderCancelTimeout=null);var E,P=d||new DefaultCanvasFactory({ownerDocument:this._ownerDocument}),T=!!(S.renderingIntent&_util.RenderingIntentFlag.PRINT);x.displayReadyCapability||(x.displayReadyCapability=(0,_util.createPromiseCapability)(),x.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},null===(E=this._stats)||void 0===E||E.time("Page Request"),this._pumpOperatorList(S));var C=function(t){var e,r;x.renderTasks.delete(O),(n.cleanupAfterRender||T)&&(n.pendingCleanup=!0),n._tryCleanup(),t?(O.capability.reject(t),n._abortOperatorList({intentState:x,reason:t instanceof Error?t:new Error(t)})):O.capability.resolve(),null===(e=n._stats)||void 0===e||e.timeEnd("Rendering"),null===(r=n._stats)||void 0===r||r.timeEnd("Overall")},O=new InternalRenderTask({callback:C,params:{canvasContext:i,viewport:a,transform:h,background:v},objs:this.objs,commonObjs:this.commonObjs,annotationCanvasMap:b,operatorList:x.operatorList,pageIndex:this._pageIndex,canvasFactory:P,useRequestAnimationFrame:!T,pdfBug:this._pdfBug,pageColors:w});((r=x).renderTasks||(r.renderTasks=new Set)).add(O);var F=O.task;return Promise.all([x.displayReadyCapability.promise,m]).then((function(t){var e,r=_slicedToArray(t,2),i=r[0],a=r[1];n.pendingCleanup?C():(null===(e=n._stats)||void 0===e||e.time("Rendering"),O.initializeGraphics({transparency:i,optionalContentConfig:a}),O.operatorListChanged())})).catch(C),F}},{key:"getOperatorList",value:function(){var t,e,r,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=n.intent,a=void 0===i?"display":i,o=n.annotationMode,s=void 0===o?_util.AnnotationMode.ENABLE:o,l=n.printAnnotationStorage,u=void 0===l?null:l,c=this._transport.getRenderingIntent(a,s,u,!0),h=this._intentStates.get(c.cacheKey);return h||(h=Object.create(null),this._intentStates.set(c.cacheKey,h)),h.opListReadCapability||((t=Object.create(null)).operatorListChanged=function(){h.operatorList.lastChunk&&(h.opListReadCapability.resolve(h.operatorList),h.renderTasks.delete(t))},h.opListReadCapability=(0,_util.createPromiseCapability)(),((e=h).renderTasks||(e.renderTasks=new Set)).add(t),h.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},null===(r=this._stats)||void 0===r||r.time("Page Request"),this._pumpOperatorList(c)),h.opListReadCapability.promise}},{key:"streamTextContent",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.disableCombineTextItems,r=void 0!==e&&e,n=t.includeMarkedContent,i=void 0!==n&&n;return this._transport.messageHandler.sendWithStream("GetTextContent",{pageIndex:this._pageIndex,combineTextItems:!0!==r,includeMarkedContent:!0===i},{highWaterMark:100,size:function(t){return t.items.length}})}},{key:"getTextContent",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this._transport._htmlForXfa)return this.getXfa().then((function(t){return _xfa_text.XfaText.textContent(t)}));var e=this.streamTextContent(t);return new Promise((function(t,r){var n=e.getReader(),i={items:[],styles:Object.create(null)};!function e(){n.read().then((function(r){var n,a=r.value;r.done?t(i):(Object.assign(i.styles,a.styles),(n=i.items).push.apply(n,_toConsumableArray(a.items)),e())}),r)}()}))}},{key:"getStructTree",value:function(){return this._transport.getStructTree(this._pageIndex)}},{key:"_destroy",value:function(){this.destroyed=!0;var t,e=[],r=_createForOfIteratorHelper(this._intentStates.values());try{for(r.s();!(t=r.n()).done;){var n=t.value;if(this._abortOperatorList({intentState:n,reason:new Error("Page was destroyed."),force:!0}),!n.opListReadCapability){var i,a=_createForOfIteratorHelper(n.renderTasks);try{for(a.s();!(i=a.n()).done;){var o=i.value;e.push(o.completed),o.cancel()}}catch(t){a.e(t)}finally{a.f()}}}}catch(t){r.e(t)}finally{r.f()}this.objs.clear();var s,l=_createForOfIteratorHelper(this._bitmaps);try{for(l.s();!(s=l.n()).done;)s.value.close()}catch(t){l.e(t)}finally{l.f()}return this._bitmaps.clear(),this.pendingCleanup=!1,Promise.all(e)}},{key:"cleanup",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.pendingCleanup=!0,this._tryCleanup(t)}},{key:"_tryCleanup",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.pendingCleanup)return!1;var e,r=_createForOfIteratorHelper(this._intentStates.values());try{for(r.s();!(e=r.n()).done;){var n=e.value,i=n.renderTasks,a=n.operatorList;if(i.size>0||!a.lastChunk)return!1}}catch(t){r.e(t)}finally{r.f()}this._intentStates.clear(),this.objs.clear(),t&&this._stats&&(this._stats=new _display_utils.StatTimer);var o,s=_createForOfIteratorHelper(this._bitmaps);try{for(s.s();!(o=s.n()).done;)o.value.close()}catch(t){s.e(t)}finally{s.f()}return this._bitmaps.clear(),this.pendingCleanup=!1,!0}},{key:"_startRenderPage",value:function(t,e){var r,n,i=this._intentStates.get(e);i&&(null===(r=this._stats)||void 0===r||r.timeEnd("Page Request"),null===(n=i.displayReadyCapability)||void 0===n||n.resolve(t))}},{key:"_renderPageChunk",value:function(t,e){for(var r=0,n=t.length;r0)return;if(n instanceof _display_utils.RenderingCancelledException){var o=RENDERING_CANCELLED_TIMEOUT;return n.extraDelay>0&&n.extraDelay<1e3&&(o+=n.extraDelay),void(r.streamReaderCancelTimeout=setTimeout((function(){r.streamReaderCancelTimeout=null,e._abortOperatorList({intentState:r,reason:n,force:!0})}),o))}}if(r.streamReader.cancel(new _util.AbortException(n.message)).catch((function(){})),r.streamReader=null,!this._transport.destroyed){var s,l=_createForOfIteratorHelper(this._intentStates);try{for(l.s();!(s=l.n()).done;){var u=_slicedToArray(s.value,2),c=u[0];if(u[1]===r){this._intentStates.delete(c);break}}}catch(t){l.e(t)}finally{l.f()}this.cleanup()}}}},{key:"stats",get:function(){return this._stats}}]),t}();exports.PDFPageProxy=PDFPageProxy;var _listeners=new WeakMap,_deferred=new WeakMap,LoopbackPort=function(){function t(){_classCallCheck(this,t),_classPrivateFieldInitSpec(this,_listeners,{writable:!0,value:[]}),_classPrivateFieldInitSpec(this,_deferred,{writable:!0,value:Promise.resolve()})}return _createClass(t,[{key:"postMessage",value:function(t,e){var r=this,n={data:structuredClone(t,e)};_classPrivateFieldGet(this,_deferred).then((function(){var t,e=_createForOfIteratorHelper(_classPrivateFieldGet(r,_listeners));try{for(e.s();!(t=e.n()).done;)t.value.call(r,n)}catch(t){e.e(t)}finally{e.f()}}))}},{key:"addEventListener",value:function(t,e){_classPrivateFieldGet(this,_listeners).push(e)}},{key:"removeEventListener",value:function(t,e){var r=_classPrivateFieldGet(this,_listeners).indexOf(e);_classPrivateFieldGet(this,_listeners).splice(r,1)}},{key:"terminate",value:function(){_classPrivateFieldGet(this,_listeners).length=0}}]),t}();exports.LoopbackPort=LoopbackPort;var PDFWorkerUtil={isWorkerDisabled:!1,fallbackWorkerSrc:null,fakeWorkerId:0};if(exports.PDFWorkerUtil=PDFWorkerUtil,_is_node.isNodeJS&&"function"==typeof require)PDFWorkerUtil.isWorkerDisabled=!0,PDFWorkerUtil.fallbackWorkerSrc="./pdf.worker.js";else if("object"===("undefined"==typeof document?"undefined":_typeof(document))){var _document,_document$currentScri,pdfjsFilePath=null===(_document=document)||void 0===_document||null===(_document$currentScri=_document.currentScript)||void 0===_document$currentScri?void 0:_document$currentScri.src;pdfjsFilePath&&(PDFWorkerUtil.fallbackWorkerSrc=pdfjsFilePath.replace(/(\\.(?:min\\.)?js)(\\?.*)?$/i,".worker$1$2"))}PDFWorkerUtil.isSameOrigin=function(t,e){var r;try{if(!(r=new URL(t)).origin||"null"===r.origin)return!1}catch(t){return!1}var n=new URL(e,r);return r.origin===n.origin},PDFWorkerUtil.createCDNWrapper=function(t){var e='importScripts("'.concat(t,'");');return URL.createObjectURL(new Blob([e]))};var PDFWorker=function(){function PDFWorker(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.name,r=void 0===e?null:e,n=t.port,i=void 0===n?null:n,a=t.verbosity,o=void 0===a?(0,_util.getVerbosityLevel)():a;if(_classCallCheck(this,PDFWorker),i&&_classStaticPrivateFieldSpecGet(PDFWorker,PDFWorker,_workerPorts).has(i))throw new Error("Cannot use more than one PDFWorker per port.");if(this.name=r,this.destroyed=!1,this.verbosity=o,this._readyCapability=(0,_util.createPromiseCapability)(),this._port=null,this._webWorker=null,this._messageHandler=null,i)return _classStaticPrivateFieldSpecGet(PDFWorker,PDFWorker,_workerPorts).set(i,this),void this._initializeFromPort(i);this._initialize()}return _createClass(PDFWorker,[{key:"promise",get:function(){return this._readyCapability.promise}},{key:"port",get:function(){return this._port}},{key:"messageHandler",get:function(){return this._messageHandler}},{key:"_initializeFromPort",value:function(t){this._port=t,this._messageHandler=new _message_handler.MessageHandler("main","worker",t),this._messageHandler.on("ready",(function(){})),this._readyCapability.resolve(),this._messageHandler.send("configure",{verbosity:this.verbosity})}},{key:"_initialize",value:function(){var t=this;if(!PDFWorkerUtil.isWorkerDisabled&&!PDFWorker._mainThreadWorkerMessageHandler){var e=PDFWorker.workerSrc;try{PDFWorkerUtil.isSameOrigin(window.location.href,e)||(e=PDFWorkerUtil.createCDNWrapper(new URL(e,window.location).href));var r=new Worker(e),n=new _message_handler.MessageHandler("main","worker",r),i=function(){r.removeEventListener("error",a),n.destroy(),r.terminate(),t.destroyed?t._readyCapability.reject(new Error("Worker was destroyed")):t._setupFakeWorker()},a=function(){t._webWorker||i()};r.addEventListener("error",a),n.on("test",(function(e){r.removeEventListener("error",a),t.destroyed?i():e?(t._messageHandler=n,t._port=r,t._webWorker=r,t._readyCapability.resolve(),n.send("configure",{verbosity:t.verbosity})):(t._setupFakeWorker(),n.destroy(),r.terminate())})),n.on("ready",(function(e){if(r.removeEventListener("error",a),t.destroyed)i();else try{o()}catch(e){t._setupFakeWorker()}}));var o=function(){var t=new Uint8Array;n.send("test",t,[t.buffer])};return void o()}catch(t){(0,_util.info)("The worker has been disabled.")}}this._setupFakeWorker()}},{key:"_setupFakeWorker",value:function(){var t=this;PDFWorkerUtil.isWorkerDisabled||((0,_util.warn)("Setting up fake worker."),PDFWorkerUtil.isWorkerDisabled=!0),PDFWorker._setupFakeWorkerGlobal.then((function(e){if(t.destroyed)t._readyCapability.reject(new Error("Worker was destroyed"));else{var r=new LoopbackPort;t._port=r;var n="fake".concat(PDFWorkerUtil.fakeWorkerId++),i=new _message_handler.MessageHandler(n+"_worker",n,r);e.setup(i,r);var a=new _message_handler.MessageHandler(n,n+"_worker",r);t._messageHandler=a,t._readyCapability.resolve(),a.send("configure",{verbosity:t.verbosity})}})).catch((function(e){t._readyCapability.reject(new Error('Setting up fake worker failed: "'.concat(e.message,'".')))}))}},{key:"destroy",value:function(){this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),_classStaticPrivateFieldSpecGet(PDFWorker,PDFWorker,_workerPorts).delete(this._port),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}}],[{key:"fromPort",value:function(t){if(null==t||!t.port)throw new Error("PDFWorker.fromPort - invalid method signature.");return _classStaticPrivateFieldSpecGet(this,PDFWorker,_workerPorts).has(t.port)?_classStaticPrivateFieldSpecGet(this,PDFWorker,_workerPorts).get(t.port):new PDFWorker(t)}},{key:"workerSrc",get:function(){if(_worker_options.GlobalWorkerOptions.workerSrc)return _worker_options.GlobalWorkerOptions.workerSrc;if(null!==PDFWorkerUtil.fallbackWorkerSrc)return _is_node.isNodeJS||(0,_display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'),PDFWorkerUtil.fallbackWorkerSrc;throw new Error('No "GlobalWorkerOptions.workerSrc" specified.')}},{key:"_mainThreadWorkerMessageHandler",get:function(){try{var t;return(null===(t=globalThis.pdfjsWorker)||void 0===t?void 0:t.WorkerMessageHandler)||null}catch(t){return null}}},{key:"_setupFakeWorkerGlobal",get:function get(){var _this10=this,loader=function(){var _ref15=_asyncToGenerator(_regeneratorRuntime().mark((function _callee3(){var mainWorkerMessageHandler,worker;return _regeneratorRuntime().wrap((function _callee3$(_context3){for(;;)switch(_context3.prev=_context3.next){case 0:if(mainWorkerMessageHandler=_this10._mainThreadWorkerMessageHandler,!mainWorkerMessageHandler){_context3.next=3;break}return _context3.abrupt("return",mainWorkerMessageHandler);case 3:if(!_is_node.isNodeJS||"function"!=typeof require){_context3.next=6;break}return worker=eval("require")(_this10.workerSrc),_context3.abrupt("return",worker.WorkerMessageHandler);case 6:return _context3.next=8,(0,_display_utils.loadScript)(_this10.workerSrc);case 8:return _context3.abrupt("return",window.pdfjsWorker.WorkerMessageHandler);case 9:case"end":return _context3.stop()}}),_callee3)})));return function(){return _ref15.apply(this,arguments)}}();return(0,_util.shadow)(this,"_setupFakeWorkerGlobal",loader())}}]),PDFWorker}();exports.PDFWorker=PDFWorker;var _workerPorts={writable:!0,value:new WeakMap},_docStats=new WeakMap,_pageCache=new WeakMap,_pagePromises=new WeakMap,_metadataPromise=new WeakMap,WorkerTransport=function(){function t(e,r,n,i){_classCallCheck(this,t),_classPrivateFieldInitSpec(this,_docStats,{writable:!0,value:null}),_classPrivateFieldInitSpec(this,_pageCache,{writable:!0,value:new Map}),_classPrivateFieldInitSpec(this,_pagePromises,{writable:!0,value:new Map}),_classPrivateFieldInitSpec(this,_metadataPromise,{writable:!0,value:null}),this.messageHandler=e,this.loadingTask=r,this.commonObjs=new PDFObjects,this.fontLoader=new _font_loader.FontLoader({onUnsupportedFeature:this._onUnsupportedFeature.bind(this),ownerDocument:i.ownerDocument,styleElement:i.styleElement}),this._params=i,i.useWorkerFetch||(this.CMapReaderFactory=new i.CMapReaderFactory({baseUrl:i.cMapUrl,isCompressed:i.cMapPacked}),this.StandardFontDataFactory=new i.StandardFontDataFactory({baseUrl:i.standardFontDataUrl})),this.destroyed=!1,this.destroyCapability=null,this._passwordCapability=null,this._networkStream=n,this._fullReader=null,this._lastProgress=null,this.downloadInfoCapability=(0,_util.createPromiseCapability)(),this.setupMessageHandler()}var e;return _createClass(t,[{key:"annotationStorage",get:function(){return(0,_util.shadow)(this,"annotationStorage",new _annotation_storage.AnnotationStorage)}},{key:"stats",get:function(){return _classPrivateFieldGet(this,_docStats)}},{key:"getRenderingIntent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_util.AnnotationMode.ENABLE,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=_util.RenderingIntentFlag.DISPLAY,a=null;switch(t){case"any":i=_util.RenderingIntentFlag.ANY;break;case"display":break;case"print":i=_util.RenderingIntentFlag.PRINT;break;default:(0,_util.warn)("getRenderingIntent - invalid intent: ".concat(t))}switch(e){case _util.AnnotationMode.DISABLE:i+=_util.RenderingIntentFlag.ANNOTATIONS_DISABLE;break;case _util.AnnotationMode.ENABLE:break;case _util.AnnotationMode.ENABLE_FORMS:i+=_util.RenderingIntentFlag.ANNOTATIONS_FORMS;break;case _util.AnnotationMode.ENABLE_STORAGE:a=((i+=_util.RenderingIntentFlag.ANNOTATIONS_STORAGE)&_util.RenderingIntentFlag.PRINT&&r instanceof _annotation_storage.PrintAnnotationStorage?r:this.annotationStorage).serializable;break;default:(0,_util.warn)("getRenderingIntent - invalid annotationMode: ".concat(e))}return n&&(i+=_util.RenderingIntentFlag.OPLIST),{renderingIntent:i,cacheKey:"".concat(i,"_").concat(_annotation_storage.AnnotationStorage.getHash(a)),annotationStorageMap:a}}},{key:"destroy",value:function(){var t=this;if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=(0,_util.createPromiseCapability)(),this._passwordCapability&&this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));var e,r=[],n=_createForOfIteratorHelper(_classPrivateFieldGet(this,_pageCache).values());try{for(n.s();!(e=n.n()).done;){var i=e.value;r.push(i._destroy())}}catch(t){n.e(t)}finally{n.f()}_classPrivateFieldGet(this,_pageCache).clear(),_classPrivateFieldGet(this,_pagePromises).clear(),this.hasOwnProperty("annotationStorage")&&this.annotationStorage.resetModified();var a=this.messageHandler.sendWithPromise("Terminate",null);return r.push(a),Promise.all(r).then((function(){t.commonObjs.clear(),t.fontLoader.clear(),_classPrivateFieldSet(t,_metadataPromise,null),t._getFieldObjectsPromise=null,t._hasJSActionsPromise=null,t._networkStream&&t._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")),t.messageHandler&&(t.messageHandler.destroy(),t.messageHandler=null),t.destroyCapability.resolve()}),this.destroyCapability.reject),this.destroyCapability.promise}},{key:"setupMessageHandler",value:function(){var t=this,e=this.messageHandler,r=this.loadingTask;e.on("GetReader",(function(e,r){(0,_util.assert)(t._networkStream,"GetReader - no \`IPDFStream\` instance available."),t._fullReader=t._networkStream.getFullReader(),t._fullReader.onProgress=function(e){t._lastProgress={loaded:e.loaded,total:e.total}},r.onPull=function(){t._fullReader.read().then((function(t){var e=t.value;t.done?r.close():((0,_util.assert)((0,_util.isArrayBuffer)(e),"GetReader - expected an ArrayBuffer."),r.enqueue(new Uint8Array(e),1,[e]))})).catch((function(t){r.error(t)}))},r.onCancel=function(e){t._fullReader.cancel(e),r.ready.catch((function(e){if(!t.destroyed)throw e}))}})),e.on("ReaderHeadersReady",(function(e){var n=(0,_util.createPromiseCapability)(),i=t._fullReader;return i.headersReady.then((function(){var e;i.isStreamingSupported&&i.isRangeSupported||(t._lastProgress&&(null===(e=r.onProgress)||void 0===e||e.call(r,t._lastProgress)),i.onProgress=function(t){var e;null===(e=r.onProgress)||void 0===e||e.call(r,{loaded:t.loaded,total:t.total})}),n.resolve({isStreamingSupported:i.isStreamingSupported,isRangeSupported:i.isRangeSupported,contentLength:i.contentLength})}),n.reject),n.promise})),e.on("GetRangeReader",(function(e,r){(0,_util.assert)(t._networkStream,"GetRangeReader - no \`IPDFStream\` instance available.");var n=t._networkStream.getRangeReader(e.begin,e.end);n?(r.onPull=function(){n.read().then((function(t){var e=t.value;t.done?r.close():((0,_util.assert)((0,_util.isArrayBuffer)(e),"GetRangeReader - expected an ArrayBuffer."),r.enqueue(new Uint8Array(e),1,[e]))})).catch((function(t){r.error(t)}))},r.onCancel=function(e){n.cancel(e),r.ready.catch((function(e){if(!t.destroyed)throw e}))}):r.close()})),e.on("GetDoc",(function(e){var n=e.pdfInfo;t._numPages=n.numPages,t._htmlForXfa=n.htmlForXfa,delete n.htmlForXfa,r._capability.resolve(new PDFDocumentProxy(n,t))})),e.on("DocException",(function(t){var e;switch(t.name){case"PasswordException":e=new _util.PasswordException(t.message,t.code);break;case"InvalidPDFException":e=new _util.InvalidPDFException(t.message);break;case"MissingPDFException":e=new _util.MissingPDFException(t.message);break;case"UnexpectedResponseException":e=new _util.UnexpectedResponseException(t.message,t.status);break;case"UnknownErrorException":e=new _util.UnknownErrorException(t.message,t.details);break;default:(0,_util.unreachable)("DocException - expected a valid Error.")}r._capability.reject(e)})),e.on("PasswordRequest",(function(e){if(t._passwordCapability=(0,_util.createPromiseCapability)(),r.onPassword)try{r.onPassword((function(e){e instanceof Error?t._passwordCapability.reject(e):t._passwordCapability.resolve({password:e})}),e.code)}catch(e){t._passwordCapability.reject(e)}else t._passwordCapability.reject(new _util.PasswordException(e.message,e.code));return t._passwordCapability.promise})),e.on("DataLoaded",(function(e){var n;null===(n=r.onProgress)||void 0===n||n.call(r,{loaded:e.length,total:e.length}),t.downloadInfoCapability.resolve(e)})),e.on("StartRenderPage",(function(e){t.destroyed||_classPrivateFieldGet(t,_pageCache).get(e.pageIndex)._startRenderPage(e.transparency,e.cacheKey)})),e.on("commonobj",(function(r){var n,i=_slicedToArray(r,3),a=i[0],o=i[1],s=i[2];if(!t.destroyed&&!t.commonObjs.has(a))switch(o){case"Font":var l=t._params;if("error"in s){var u=s.error;(0,_util.warn)("Error during font loading: ".concat(u)),t.commonObjs.resolve(a,u);break}var c=null;l.pdfBug&&null!==(n=globalThis.FontInspector)&&void 0!==n&&n.enabled&&(c={registerFont:function(t,e){globalThis.FontInspector.fontAdded(t,e)}});var h=new _font_loader.FontFaceObject(s,{isEvalSupported:l.isEvalSupported,disableFontFace:l.disableFontFace,ignoreErrors:l.ignoreErrors,onUnsupportedFeature:t._onUnsupportedFeature.bind(t),fontRegistry:c});t.fontLoader.bind(h).catch((function(t){return e.sendWithPromise("FontFallback",{id:a})})).finally((function(){!l.fontExtraProperties&&h.data&&(h.data=null),t.commonObjs.resolve(a,h)}));break;case"FontPath":case"Image":t.commonObjs.resolve(a,s);break;default:throw new Error("Got unknown common object type ".concat(o))}})),e.on("obj",(function(e){var r=_slicedToArray(e,4),n=r[0],i=r[1],a=r[2],o=r[3];if(!t.destroyed){var s=_classPrivateFieldGet(t,_pageCache).get(i);if(!s.objs.has(n))switch(a){case"Image":if(s.objs.resolve(n,o),o){var l;if(o.bitmap){var u=o.bitmap;l=o.width*o.height*4,s._bitmaps.add(u)}else{var c;l=(null===(c=o.data)||void 0===c?void 0:c.length)||0}l>8e6&&(s.cleanupAfterRender=!0)}break;case"Pattern":s.objs.resolve(n,o);break;default:throw new Error("Got unknown object type ".concat(a))}}})),e.on("DocProgress",(function(e){var n;t.destroyed||null===(n=r.onProgress)||void 0===n||n.call(r,{loaded:e.loaded,total:e.total})})),e.on("DocStats",(function(e){t.destroyed||_classPrivateFieldSet(t,_docStats,Object.freeze({streamTypes:Object.freeze(e.streamTypes),fontTypes:Object.freeze(e.fontTypes)}))})),e.on("UnsupportedFeature",this._onUnsupportedFeature.bind(this)),e.on("FetchBuiltInCMap",(function(e){return t.destroyed?Promise.reject(new Error("Worker was destroyed.")):t.CMapReaderFactory?t.CMapReaderFactory.fetch(e):Promise.reject(new Error("CMapReaderFactory not initialized, see the \`useWorkerFetch\` parameter."))})),e.on("FetchStandardFontData",(function(e){return t.destroyed?Promise.reject(new Error("Worker was destroyed.")):t.StandardFontDataFactory?t.StandardFontDataFactory.fetch(e):Promise.reject(new Error("StandardFontDataFactory not initialized, see the \`useWorkerFetch\` parameter."))}))}},{key:"_onUnsupportedFeature",value:function(t){var e,r,n=t.featureId;this.destroyed||null===(e=(r=this.loadingTask).onUnsupportedFeature)||void 0===e||e.call(r,n)}},{key:"getData",value:function(){return this.messageHandler.sendWithPromise("GetData",null)}},{key:"saveDocument",value:function(){var t,e,r=this;return this.annotationStorage.size<=0&&(0,_util.warn)("saveDocument called while \`annotationStorage\` is empty, please use the getData-method instead."),this.messageHandler.sendWithPromise("SaveDocument",{isPureXfa:!!this._htmlForXfa,numPages:this._numPages,annotationStorage:this.annotationStorage.serializable,filename:null!==(t=null===(e=this._fullReader)||void 0===e?void 0:e.filename)&&void 0!==t?t:null}).finally((function(){r.annotationStorage.resetModified()}))}},{key:"getPage",value:function(t){var e=this;if(!Number.isInteger(t)||t<=0||t>this._numPages)return Promise.reject(new Error("Invalid page request."));var r=t-1,n=_classPrivateFieldGet(this,_pagePromises).get(r);if(n)return n;var i=this.messageHandler.sendWithPromise("GetPage",{pageIndex:r}).then((function(t){if(e.destroyed)throw new Error("Transport destroyed");var n=new PDFPageProxy(r,t,e,e._params.ownerDocument,e._params.pdfBug);return _classPrivateFieldGet(e,_pageCache).set(r,n),n}));return _classPrivateFieldGet(this,_pagePromises).set(r,i),i}},{key:"getPageIndex",value:function(t){return"object"!==_typeof(t)||null===t||!Number.isInteger(t.num)||t.num<0||!Number.isInteger(t.gen)||t.gen<0?Promise.reject(new Error("Invalid pageIndex request.")):this.messageHandler.sendWithPromise("GetPageIndex",{num:t.num,gen:t.gen})}},{key:"getAnnotations",value:function(t,e){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:t,intent:e})}},{key:"getFieldObjects",value:function(){return this._getFieldObjectsPromise||(this._getFieldObjectsPromise=this.messageHandler.sendWithPromise("GetFieldObjects",null))}},{key:"hasJSActions",value:function(){return this._hasJSActionsPromise||(this._hasJSActionsPromise=this.messageHandler.sendWithPromise("HasJSActions",null))}},{key:"getCalculationOrderIds",value:function(){return this.messageHandler.sendWithPromise("GetCalculationOrderIds",null)}},{key:"getDestinations",value:function(){return this.messageHandler.sendWithPromise("GetDestinations",null)}},{key:"getDestination",value:function(t){return"string"!=typeof t?Promise.reject(new Error("Invalid destination request.")):this.messageHandler.sendWithPromise("GetDestination",{id:t})}},{key:"getPageLabels",value:function(){return this.messageHandler.sendWithPromise("GetPageLabels",null)}},{key:"getPageLayout",value:function(){return this.messageHandler.sendWithPromise("GetPageLayout",null)}},{key:"getPageMode",value:function(){return this.messageHandler.sendWithPromise("GetPageMode",null)}},{key:"getViewerPreferences",value:function(){return this.messageHandler.sendWithPromise("GetViewerPreferences",null)}},{key:"getOpenAction",value:function(){return this.messageHandler.sendWithPromise("GetOpenAction",null)}},{key:"getAttachments",value:function(){return this.messageHandler.sendWithPromise("GetAttachments",null)}},{key:"getJavaScript",value:function(){return this.messageHandler.sendWithPromise("GetJavaScript",null)}},{key:"getDocJSActions",value:function(){return this.messageHandler.sendWithPromise("GetDocJSActions",null)}},{key:"getPageJSActions",value:function(t){return this.messageHandler.sendWithPromise("GetPageJSActions",{pageIndex:t})}},{key:"getStructTree",value:function(t){return this.messageHandler.sendWithPromise("GetStructTree",{pageIndex:t})}},{key:"getOutline",value:function(){return this.messageHandler.sendWithPromise("GetOutline",null)}},{key:"getOptionalContentConfig",value:function(){return this.messageHandler.sendWithPromise("GetOptionalContentConfig",null).then((function(t){return new _optional_content_config.OptionalContentConfig(t)}))}},{key:"getPermissions",value:function(){return this.messageHandler.sendWithPromise("GetPermissions",null)}},{key:"getMetadata",value:function(){var t=this;return _classPrivateFieldGet(this,_metadataPromise)||_classPrivateFieldSet(this,_metadataPromise,this.messageHandler.sendWithPromise("GetMetadata",null).then((function(e){var r,n,i,a;return{info:e[0],metadata:e[1]?new _metadata.Metadata(e[1]):null,contentDispositionFilename:null!==(r=null===(n=t._fullReader)||void 0===n?void 0:n.filename)&&void 0!==r?r:null,contentLength:null!==(i=null===(a=t._fullReader)||void 0===a?void 0:a.contentLength)&&void 0!==i?i:null}})))}},{key:"getMarkInfo",value:function(){return this.messageHandler.sendWithPromise("GetMarkInfo",null)}},{key:"startCleanup",value:(e=_asyncToGenerator(_regeneratorRuntime().mark((function t(){var e,r,n,i,a=arguments;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e=a.length>0&&void 0!==a[0]&&a[0],!this.destroyed){t.next=3;break}return t.abrupt("return");case 3:return t.next=5,this.messageHandler.sendWithPromise("Cleanup",null);case 5:r=_createForOfIteratorHelper(_classPrivateFieldGet(this,_pageCache).values()),t.prev=6,r.s();case 8:if((n=r.n()).done){t.next=15;break}if((i=n.value).cleanup()){t.next=13;break}throw new Error("startCleanup: Page ".concat(i.pageNumber," is currently rendering."));case 13:t.next=8;break;case 15:t.next=20;break;case 17:t.prev=17,t.t0=t.catch(6),r.e(t.t0);case 20:return t.prev=20,r.f(),t.finish(20);case 23:this.commonObjs.clear(),e||this.fontLoader.clear(),_classPrivateFieldSet(this,_metadataPromise,null),this._getFieldObjectsPromise=null,this._hasJSActionsPromise=null;case 28:case"end":return t.stop()}}),t,this,[[6,17,20,23]])}))),function(){return e.apply(this,arguments)})},{key:"loadingParams",get:function(){var t=this._params;return(0,_util.shadow)(this,"loadingParams",{disableAutoFetch:t.disableAutoFetch,enableXfa:t.enableXfa})}}]),t}(),_objs=new WeakMap,_ensureObj=new WeakSet,PDFObjects=function(){function t(){_classCallCheck(this,t),_classPrivateMethodInitSpec(this,_ensureObj),_classPrivateFieldInitSpec(this,_objs,{writable:!0,value:Object.create(null)})}return _createClass(t,[{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e){var r=_classPrivateMethodGet(this,_ensureObj,_ensureObj2).call(this,t);return r.capability.promise.then((function(){return e(r.data)})),null}var n=_classPrivateFieldGet(this,_objs)[t];if(null==n||!n.capability.settled)throw new Error("Requesting object that isn't resolved yet ".concat(t,"."));return n.data}},{key:"has",value:function(t){var e=_classPrivateFieldGet(this,_objs)[t];return(null==e?void 0:e.capability.settled)||!1}},{key:"resolve",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=_classPrivateMethodGet(this,_ensureObj,_ensureObj2).call(this,t);r.data=e,r.capability.resolve()}},{key:"clear",value:function(){_classPrivateFieldSet(this,_objs,Object.create(null))}}]),t}();function _ensureObj2(t){return _classPrivateFieldGet(this,_objs)[t]||(_classPrivateFieldGet(this,_objs)[t]={capability:(0,_util.createPromiseCapability)(),data:null})}var _internalRenderTask=new WeakMap,RenderTask=function(){function t(e){_classCallCheck(this,t),_classPrivateFieldInitSpec(this,_internalRenderTask,{writable:!0,value:null}),_classPrivateFieldSet(this,_internalRenderTask,e),this.onContinue=null}return _createClass(t,[{key:"promise",get:function(){return _classPrivateFieldGet(this,_internalRenderTask).capability.promise}},{key:"cancel",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;_classPrivateFieldGet(this,_internalRenderTask).cancel(null,t)}},{key:"separateAnnots",get:function(){var t=_classPrivateFieldGet(this,_internalRenderTask).operatorList.separateAnnots;if(!t)return!1;var e=_classPrivateFieldGet(this,_internalRenderTask).annotationCanvasMap;return t.form||t.canvas&&(null==e?void 0:e.size)>0}}]),t}();exports.RenderTask=RenderTask;var InternalRenderTask=function(){function t(e){var r=e.callback,n=e.params,i=e.objs,a=e.commonObjs,o=e.annotationCanvasMap,s=e.operatorList,l=e.pageIndex,u=e.canvasFactory,c=e.useRequestAnimationFrame,h=void 0!==c&&c,f=e.pdfBug,d=void 0!==f&&f,p=e.pageColors,v=void 0===p?null:p;_classCallCheck(this,t),this.callback=r,this.params=n,this.objs=i,this.commonObjs=a,this.annotationCanvasMap=o,this.operatorListIdx=null,this.operatorList=s,this._pageIndex=l,this.canvasFactory=u,this._pdfBug=d,this.pageColors=v,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this._useRequestAnimationFrame=!0===h&&"undefined"!=typeof window,this.cancelled=!1,this.capability=(0,_util.createPromiseCapability)(),this.task=new RenderTask(this),this._cancelBound=this.cancel.bind(this),this._continueBound=this._continue.bind(this),this._scheduleNextBound=this._scheduleNext.bind(this),this._nextBound=this._next.bind(this),this._canvas=n.canvasContext.canvas}var e;return _createClass(t,[{key:"completed",get:function(){return this.capability.promise.catch((function(){}))}},{key:"initializeGraphics",value:function(e){var r,n,i=e.transparency,a=void 0!==i&&i,o=e.optionalContentConfig;if(!this.cancelled){if(this._canvas){if(_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).has(this._canvas))throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.");_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).add(this._canvas)}this._pdfBug&&null!==(r=globalThis.StepperManager)&&void 0!==r&&r.enabled&&(this.stepper=globalThis.StepperManager.create(this._pageIndex),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());var s=this.params,l=s.canvasContext,u=s.viewport,c=s.transform,h=s.background;this.gfx=new _canvas.CanvasGraphics(l,this.commonObjs,this.objs,this.canvasFactory,{optionalContentConfig:o},this.annotationCanvasMap,this.pageColors),this.gfx.beginDrawing({transform:c,viewport:u,transparency:a,background:h}),this.operatorListIdx=0,this.graphicsReady=!0,null===(n=this.graphicsReadyCallback)||void 0===n||n.call(this)}}},{key:"cancel",value:function(){var e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.running=!1,this.cancelled=!0,null===(e=this.gfx)||void 0===e||e.endDrawing(),this._canvas&&_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).delete(this._canvas),this.callback(r||new _display_utils.RenderingCancelledException("Rendering cancelled, page ".concat(this._pageIndex+1),"canvas",n))}},{key:"operatorListChanged",value:function(){var t;this.graphicsReady?(null===(t=this.stepper)||void 0===t||t.updateOperatorList(this.operatorList),this.running||this._continue()):this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound)}},{key:"_continue",value:function(){this.running=!0,this.cancelled||(this.task.onContinue?this.task.onContinue(this._scheduleNextBound):this._scheduleNext())}},{key:"_scheduleNext",value:function(){var t=this;this._useRequestAnimationFrame?window.requestAnimationFrame((function(){t._nextBound().catch(t._cancelBound)})):Promise.resolve().then(this._nextBound).catch(this._cancelBound)}},{key:"_next",value:(e=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.cancelled){e.next=2;break}return e.abrupt("return");case 2:this.operatorListIdx=this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continueBound,this.stepper),this.operatorListIdx===this.operatorList.argsArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(),this._canvas&&_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).delete(this._canvas),this.callback()));case 4:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})}]),t}(),_canvasInUse={writable:!0,value:new WeakSet},version="3.2.0";exports.version=version;var build="";exports.build=build},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.PrintAnnotationStorage=e.AnnotationStorage=void 0;var i=r(1),a=r(135),o=r(139);function s(t,e){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},s(t,e)}function l(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||f(t,e)||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 h(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=f(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function f(t,e){if(t){if("string"==typeof t)return d(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(t,e):void 0}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0?(0,i.objectFromMap)(_(this,k)):null}},{key:"size",get:function(){return _(this,k).size}},{key:"resetModified",value:function(){_(this,A)&&(b(this,A,!1),"function"==typeof this.onResetModified&&this.onResetModified())}},{key:"print",get:function(){return new T(this)}},{key:"serializable",get:function(){if(0===_(this,k).size)return null;var t,e=new Map,r=h(_(this,k));try{for(r.s();!(t=r.n()).done;){var n=c(t.value,2),i=n[0],o=n[1],s=o instanceof a.AnnotationEditor?o.serialize():o;s&&e.set(i,s)}}catch(t){r.e(t)}finally{r.f()}return e}}],[{key:"getHash",value:function(t){if(!t)return"";var e,r=new o.MurmurHash3_64,n=h(t);try{for(n.s();!(e=n.n()).done;){var i=c(e.value,2),a=i[0],s=i[1];r.update("".concat(a,":").concat(JSON.stringify(s)))}}catch(t){n.e(t)}finally{n.f()}return r.hexdigest()}}]),t}();function E(){_(this,A)||(b(this,A,!0),"function"==typeof this.onSetModified&&this.onSetModified())}e.AnnotationStorage=x;var P=new WeakMap,T=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&s(t,e)}(o,t);var e,r,a=(e=o,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,i=u(e);if(r){var a=u(this).constructor;t=Reflect.construct(i,arguments,a)}else t=i.apply(this,arguments);return function(t,e){if(e&&("object"===n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return l(t)}(this,t)});function o(t){var e;return p(this,o),m(l(e=a.call(this)),P,{writable:!0,value:null}),b(l(e),P,structuredClone(t.serializable)),e}return y(o,[{key:"print",get:function(){(0,i.unreachable)("Should not call PrintAnnotationStorage.print")}},{key:"serializable",get:function(){return _(this,P)}}]),o}(x);e.PrintAnnotationStorage=T},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.AnnotationEditor=void 0;var i=r(136),a=r(1);function o(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||function(t,e){if(t){if("string"==typeof t)return s(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(t,e):void 0}}(t,e)||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 s(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.KeyboardManager=e.CommandManager=e.ColorManager=e.AnnotationEditorUIManager=void 0,e.bindEvents=function(t,e,r){var n,i=_(r);try{for(i.s();!(n=i.n()).done;){var a=n.value;e.addEventListener(a,t[a].bind(t))}}catch(t){i.e(t)}finally{i.f()}},e.opacityToHex=function(t){return Math.round(Math.min(255,Math.max(1,255*t))).toString(16).padStart(2,"0")};var i=r(1),a=r(137);function o(t){return function(t){if(Array.isArray(t))return A(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||w(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e,r){return(e=p(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||w(t,e)||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 u(t,e){y(t,e),e.add(t)}function c(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function f(t,e){for(var r=0;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function w(t,e){if(t){if("string"==typeof t)return A(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?A(t,e):void 0}}function A(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:128;h(this,t),v(this,x,{writable:!0,value:[]}),v(this,E,{writable:!0,value:!1}),v(this,P,{writable:!0,value:void 0}),v(this,T,{writable:!0,value:-1}),m(this,P,e)}return d(t,[{key:"add",value:function(t){var e=t.cmd,r=t.undo,n=t.mustExec,i=t.type,a=void 0===i?NaN:i,o=t.overwriteIfSameType,s=void 0!==o&&o,l=t.keepUndo,u=void 0!==l&&l;if(n&&e(),!g(this,E)){var c={cmd:e,undo:r,type:a};if(-1===g(this,T))return g(this,x).length>0&&(g(this,x).length=0),m(this,T,0),void g(this,x).push(c);if(s&&g(this,x)[g(this,T)].type===a)return u&&(c.undo=g(this,x)[g(this,T)].undo),void(g(this,x)[g(this,T)]=c);var h=g(this,T)+1;h===g(this,P)?g(this,x).splice(0,1):(m(this,T,h),h{Object.defineProperty(e,"__esModule",{value:!0}),e.StatTimer=e.RenderingCancelledException=e.PixelsPerInch=e.PageViewport=e.PDFDateString=e.DOMStandardFontDataFactory=e.DOMSVGFactory=e.DOMCanvasFactory=e.DOMCMapReaderFactory=e.AnnotationPrefix=void 0,e.deprecated=function(t){console.log("Deprecated API usage: "+t)},e.getColorValues=function(t){var e=document.createElement("span");e.style.visibility="hidden",document.body.append(e);var r,n=s(t.keys());try{for(n.s();!(r=n.n()).done;){var i=r.value;e.style.color=i;var a=window.getComputedStyle(e).color;t.set(i,I(a))}}catch(t){n.e(t)}finally{n.f()}e.remove()},e.getCurrentTransform=function(t){var e=t.getTransform();return[e.a,e.b,e.c,e.d,e.e,e.f]},e.getCurrentTransformInverse=function(t){var e=t.getTransform().invertSelf();return[e.a,e.b,e.c,e.d,e.e,e.f]},e.getFilenameFromUrl=function(t){if(!(arguments.length>1&&void 0!==arguments[1]&&arguments[1])){var e=t.split(/[#?]/,1);t=(1,function(t){if(Array.isArray(t))return t}(r=e)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{for(a=(r=r.call(t)).next,0;!(l=(n=a.call(r)).done)&&(s.push(n.value),1!==s.length);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(r)||l(r,1)||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.")}())[0]}var r;return t.substring(t.lastIndexOf("/")+1)},e.getPdfFilenameFromUrl=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"document.pdf";if("string"!=typeof t)return e;if(C(t))return(0,i.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'),e;var r=/[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i,n=/^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/.exec(t),a=r.exec(n[1])||r.exec(n[2])||r.exec(n[3]);if(a&&(a=a[0]).includes("%"))try{a=r.exec(decodeURIComponent(a))[0]}catch(t){}return a||e},e.getRGB=I,e.getXfaPageViewport=function(t,e){var r=e.scale,n=void 0===r?1:r,i=e.rotation,a=void 0===i?0:i,o=t.attributes.style,s=o.width,l=o.height,u=[0,0,parseInt(s),parseInt(l)];return new P({viewBox:u,scale:n,rotation:a})},e.isDataScheme=C,e.isPdfFile=function(t){return"string"==typeof t&&/\\.pdf$/i.test(t)},e.isValidFetchUrl=M,e.loadScript=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((function(r,n){var i=document.createElement("script");i.src=t,i.onload=function(t){e&&i.remove(),r(t)},i.onerror=function(){n(new Error("Cannot load script at: ".concat(i.src)))},(document.head||document.documentElement).append(i)}))},e.setLayerDimensions=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(e instanceof P){var i=e.rawDims,a=i.pageWidth,o=i.pageHeight,s=t.style,l="calc(var(--scale-factor) * ".concat(a,"px)"),u="calc(var(--scale-factor) * ".concat(o,"px)");r&&e.rotation%180!=0?(s.width=u,s.height=l):(s.width=l,s.height=u)}n&&t.setAttribute("data-main-rotation",e.rotation)};var n=r(138),i=r(1);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",l=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,s,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,s)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,s,l){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==o(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,s,l)}),(function(t){i("throw",t,s,l)})):e.resolve(h).then((function(t){c.value=t,s(c)}),(function(t){return i("throw",t,s,l)}))}l(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=l(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:{}).ownerDocument,i=void 0===n?globalThis.document:n;return m(this,r),(t=e.call(this))._document=i,t}return y(r,[{key:"_createCanvas",value:function(t,e){var r=this._document.createElement("canvas");return r.width=t,r.height=e,r}}]),r}(n.BaseCanvasFactory);function A(t){return k.apply(this,arguments)}function k(){var t;return t=a().mark((function t(e){var r,n,o=arguments;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=o.length>1&&void 0!==o[1]&&o[1],!M(e,document.baseURI)){t.next=21;break}return t.next=4,fetch(e);case 4:if((n=t.sent).ok){t.next=7;break}throw new Error(n.statusText);case 7:if(!r){t.next=15;break}return t.t1=Uint8Array,t.next=11,n.arrayBuffer();case 11:t.t2=t.sent,t.t0=new t.t1(t.t2),t.next=20;break;case 15:return t.t3=i.stringToBytes,t.next=18,n.text();case 18:t.t4=t.sent,t.t0=(0,t.t3)(t.t4);case 20:return t.abrupt("return",t.t0);case 21:return t.abrupt("return",new Promise((function(t,n){var a=new XMLHttpRequest;a.open("GET",e,!0),r&&(a.responseType="arraybuffer"),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE){var e;if((200===a.status||0===a.status)&&(r&&a.response?e=new Uint8Array(a.response):!r&&a.responseText&&(e=(0,i.stringToBytes)(a.responseText)),e))return void t(e);n(new Error(a.statusText))}},a.send(null)})));case 22:case"end":return t.stop()}}),t)})),k=function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function o(t){c(a,n,i,o,s,"next",t)}function s(t){c(a,n,i,o,s,"throw",t)}o(void 0)}))},k.apply(this,arguments)}e.DOMCanvasFactory=w;var S=function(t){h(r,t);var e=d(r);function r(){return m(this,r),e.apply(this,arguments)}return y(r,[{key:"_fetchData",value:function(t,e){return A(t,this.isCompressed).then((function(t){return{cMapData:t,compressionType:e}}))}}]),r}(n.BaseCMapReaderFactory);e.DOMCMapReaderFactory=S;var x=function(t){h(r,t);var e=d(r);function r(){return m(this,r),e.apply(this,arguments)}return y(r,[{key:"_fetchData",value:function(t){return A(t,!0)}}]),r}(n.BaseStandardFontDataFactory);e.DOMStandardFontDataFactory=x;var E=function(t){h(r,t);var e=d(r);function r(){return m(this,r),e.apply(this,arguments)}return y(r,[{key:"_createSVG",value:function(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}}]),r}(n.BaseSVGFactory);e.DOMSVGFactory=E;var P=function(){function t(e){var r=e.viewBox,n=e.scale,i=e.rotation,a=e.offsetX,o=void 0===a?0:a,s=e.offsetY,l=void 0===s?0:s,u=e.dontFlip,c=void 0!==u&&u;m(this,t),this.viewBox=r,this.scale=n,this.rotation=i,this.offsetX=o,this.offsetY=l;var h,f,d,p,v,y,g,b,_=(r[2]+r[0])/2,w=(r[3]+r[1])/2;switch((i%=360)<0&&(i+=360),i){case 180:h=-1,f=0,d=0,p=1;break;case 90:h=0,f=1,d=1,p=0;break;case 270:h=0,f=-1,d=-1,p=0;break;case 0:h=1,f=0,d=0,p=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}c&&(d=-d,p=-p),0===h?(v=Math.abs(w-r[1])*n+o,y=Math.abs(_-r[0])*n+l,g=(r[3]-r[1])*n,b=(r[2]-r[0])*n):(v=Math.abs(_-r[0])*n+o,y=Math.abs(w-r[1])*n+l,g=(r[2]-r[0])*n,b=(r[3]-r[1])*n),this.transform=[h*n,f*n,d*n,p*n,v-h*n*_-d*n*w,y-f*n*_-p*n*w],this.width=g,this.height=b}return y(t,[{key:"rawDims",get:function(){var t=this.viewBox;return(0,i.shadow)(this,"rawDims",{pageWidth:t[2]-t[0],pageHeight:t[3]-t[1],pageX:t[0],pageY:t[1]})}},{key:"clone",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.scale,n=void 0===r?this.scale:r,i=e.rotation,a=void 0===i?this.rotation:i,o=e.offsetX,s=void 0===o?this.offsetX:o,l=e.offsetY,u=void 0===l?this.offsetY:l,c=e.dontFlip,h=void 0!==c&&c;return new t({viewBox:this.viewBox.slice(),scale:n,rotation:a,offsetX:s,offsetY:u,dontFlip:h})}},{key:"convertToViewportPoint",value:function(t,e){return i.Util.applyTransform([t,e],this.transform)}},{key:"convertToViewportRectangle",value:function(t){var e=i.Util.applyTransform([t[0],t[1]],this.transform),r=i.Util.applyTransform([t[2],t[3]],this.transform);return[e[0],e[1],r[0],r[1]]}},{key:"convertToPdfPoint",value:function(t,e){return i.Util.applyInverseTransform([t,e],this.transform)}}]),t}();e.PageViewport=P;var T=function(t){h(r,t);var e=d(r);function r(t,n){var i,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return m(this,r),(i=e.call(this,t,"RenderingCancelledException")).type=n,i.extraDelay=a,i}return y(r)}(i.BaseException);function C(t){for(var e=t.length,r=0;r=1&&n<=12?n-1:0;var i=parseInt(e[3],10);i=i>=1&&i<=31?i:1;var a=parseInt(e[4],10);a=a>=0&&a<=23?a:0;var o=parseInt(e[5],10);o=o>=0&&o<=59?o:0;var s=parseInt(e[6],10);s=s>=0&&s<=59?s:0;var l=e[7]||"Z",u=parseInt(e[8],10);u=u>=0&&u<=23?u:0;var c=parseInt(e[9],10)||0;return c=c>=0&&c<=59?c:0,"-"===l?(a+=u,o+=c):"+"===l&&(a-=u,o-=c),new Date(Date.UTC(r,n,i,a,o,s))}}]),t}();function I(t){if(t.startsWith("#")){var e=parseInt(t.slice(1),16);return[(16711680&e)>>16,(65280&e)>>8,255&e]}return t.startsWith("rgb(")?t.slice(4,-1).split(",").map((function(t){return parseInt(t)})):t.startsWith("rgba(")?t.slice(5,-1).split(",").map((function(t){return parseInt(t)})).slice(0,3):((0,i.warn)('Not a valid color format: "'.concat(t,'"')),[0,0,0])}e.PDFDateString=R},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.BaseStandardFontDataFactory=e.BaseSVGFactory=e.BaseCanvasFactory=e.BaseCMapReaderFactory=void 0;var n=r(1);function i(){i=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,l){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==s(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,l)}),(function(t){i("throw",t,o,l)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,l)}))}l(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function a(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function o(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var o=t.apply(e,r);function s(t){a(o,n,i,s,l,"next",t)}function l(t){a(o,n,i,s,l,"throw",t)}s(void 0)}))}}function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function u(t,e){for(var r=0;r2&&void 0!==arguments[2]&&arguments[2];if(t<=0||e<=0)throw new Error("Invalid SVG dimensions");var n=this._createSVG("svg:svg");return n.setAttribute("version","1.1"),r||(n.setAttribute("width","".concat(t,"px")),n.setAttribute("height","".concat(e,"px"))),n.setAttribute("preserveAspectRatio","none"),n.setAttribute("viewBox","0 0 ".concat(t," ").concat(e)),n}},{key:"createElement",value:function(t){if("string"!=typeof t)throw new Error("Invalid SVG element type");return this._createSVG(t)}},{key:"_createSVG",value:function(t){(0,n.unreachable)("Abstract method \`_createSVG\` called.")}}]),t}();e.BaseSVGFactory=p},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.MurmurHash3_64=void 0;var n=r(1);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(t,e){for(var r=0;r>>8,e[r++]=255&o)}}else{if(!(0,n.isArrayBuffer)(t))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");r=(e=t.slice()).byteLength}for(var u=r>>2,c=r-4*u,h=new Uint32Array(e.buffer,0,u),f=0,d=0,p=this.h1,v=this.h2,y=3432918353,m=461845907,g=11601,b=13715,_=0;_>>17)*m&s|f*b&l)<<13|p>>>19)+3864292196:v=5*(v=(v^=d=(d=(d=(d=h[_])*y&s|d*g&l)<<15|d>>>17)*m&s|d*b&l)<<13|v>>>19)+3864292196;switch(f=0,c){case 3:f^=e[4*u+2]<<16;case 2:f^=e[4*u+1]<<8;case 1:f=(f=(f=(f^=e[4*u])*y&s|f*g&l)<<15|f>>>17)*m&s|f*b&l,1&u?p^=f:v^=f}this.h1=p,this.h2=v}},{key:"hexdigest",value:function(){var t=this.h1,e=this.h2;return t=3981806797*(t^=e>>>1)&s|36045*t&l,t=444984403*(t^=(e=4283543511*e&s|(2950163797*(e<<16|t>>>16)&s)>>>16)>>>1)&s|60499*t&l,((t^=(e=3301882366*e&s|(3120437893*(e<<16|t>>>16)&s)>>>16)>>>1)>>>0).toString(16).padStart(8,"0")+(e>>>0).toString(16).padStart(8,"0")}}])&&a(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.MurmurHash3_64=u},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FontLoader=e.FontFaceObject=void 0;var n=r(1),i=r(3);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function o(){o=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",l=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,s,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,s)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,o,s,l){var u=f(t[n],t,o);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==a(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,s,l)}),(function(t){i("throw",t,s,l)})):e.resolve(h).then((function(t){c.value=t,s(c)}),(function(t){return i("throw",t,s,l)}))}l(u.arg)}var o;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return o=o?o.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function s(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function l(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&e[0].done;){var t=e.shift();setTimeout(t.callback,0)}},callback:t};return e.push(r),r}},{key:"_loadTestFont",get:function(){var t=atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");return(0,n.shadow)(this,"_loadTestFont",t)}},{key:"_prepareFontLoadEvent",value:function(t,e){function r(t,e){return t.charCodeAt(e)<<24|t.charCodeAt(e+1)<<16|t.charCodeAt(e+2)<<8|255&t.charCodeAt(e+3)}function i(t,e,r,n){return t.substring(0,e)+n+t.substring(e+r)}var a,o,s=this._document.createElement("canvas");s.width=1,s.height=1;var l=s.getContext("2d"),u=0,c="lt".concat(Date.now()).concat(this.loadTestFontId++),h=this._loadTestFont,f=1482184792,d=r(h=i(h,976,c.length,c),16);for(a=0,o=c.length-3;a30)return(0,n.warn)("Load test font never loaded."),void r();l.font="30px "+e,l.fillText(".",0,20),l.getImageData(0,0,1,1).data[3]>0?r():setTimeout(t.bind(null,e,r))}(c,(function(){y.remove(),e.complete()}))}}]),t}();e.FontLoader=d;var p=function(){function t(e,r){var n=r.isEvalSupported,i=void 0===n||n,a=r.disableFontFace,o=void 0!==a&&a,s=r.ignoreErrors,l=void 0!==s&&s,u=r.onUnsupportedFeature,h=r.fontRegistry,f=void 0===h?null:h;for(var d in c(this,t),this.compiledGlyphs=Object.create(null),e)this[d]=e[d];this.isEvalSupported=!1!==i,this.disableFontFace=!0===o,this.ignoreErrors=!0===l,this._onUnsupportedFeature=u,this.fontRegistry=f}return f(t,[{key:"createNativeFontFace",value:function(){var t,e;if(!this.data||this.disableFontFace)return null;if(this.cssFontInfo){var r={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(r.style="oblique ".concat(this.cssFontInfo.italicAngle,"deg")),e=new FontFace(this.cssFontInfo.fontFamily,this.data,r)}else e=new FontFace(this.loadedName,this.data,{});return null===(t=this.fontRegistry)||void 0===t||t.registerFont(this),e}},{key:"createFontFaceRule",value:function(){var t;if(!this.data||this.disableFontFace)return null;var e,r=(0,n.bytesToString)(this.data),i="url(data:".concat(this.mimetype,";base64,").concat(btoa(r),");");if(this.cssFontInfo){var a="font-weight: ".concat(this.cssFontInfo.fontWeight,";");this.cssFontInfo.italicAngle&&(a+="font-style: oblique ".concat(this.cssFontInfo.italicAngle,"deg;")),e='@font-face {font-family:"'.concat(this.cssFontInfo.fontFamily,'";').concat(a,"src:").concat(i,"}")}else e='@font-face {font-family:"'.concat(this.loadedName,'";src:').concat(i,"}");return null===(t=this.fontRegistry)||void 0===t||t.registerFont(this,i),e}},{key:"getPathGenerator",value:function(t,e){if(void 0!==this.compiledGlyphs[e])return this.compiledGlyphs[e];var r;try{r=t.get(this.loadedName+"_path_"+e)}catch(t){if(!this.ignoreErrors)throw t;return this._onUnsupportedFeature({featureId:n.UNSUPPORTED_FEATURES.errorFontGetPath}),(0,n.warn)('getPathGenerator - ignoring character: "'.concat(t,'".')),this.compiledGlyphs[e]=function(t,e){}}if(this.isEvalSupported&&n.FeatureTest.isEvalSupported){var i,a=[],o=l(r);try{for(o.s();!(i=o.n()).done;){var s=i.value,u=void 0!==s.args?s.args.join(","):"";a.push("c.",s.cmd,"(",u,");\\n")}}catch(t){o.e(t)}finally{o.f()}return this.compiledGlyphs[e]=new Function("c","size",a.join(""))}return this.compiledGlyphs[e]=function(t,e){var n,i=l(r);try{for(i.s();!(n=i.n()).done;){var a=n.value;"scale"===a.cmd&&(a.args=[e,-e]),t[a.cmd].apply(t,a.args)}}catch(t){i.e(t)}finally{i.f()}}}}]),t}();e.FontFaceObject=p},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CanvasGraphics=void 0;var n=r(1),i=r(137),a=r(142),o=r(143),s=r(3);function l(t){return function(t){if(Array.isArray(t))return d(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||f(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function c(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=f(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function h(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||f(t,e)||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 f(t,e){if(t){if("string"==typeof t)return d(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(t,e):void 0}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:a.PathType.FILL,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=[this.minX,this.minY,this.maxX,this.maxY];if(t===a.PathType.STROKE){e||(0,n.unreachable)("Stroke bounding box must include transform.");var i=n.Util.singularValueDecompose2dScale(e),o=i[0]*this.lineWidth/2,s=i[1]*this.lineWidth/2;r[0]-=o,r[1]-=s,r[2]+=o,r[3]+=s}return r}},{key:"updateClipFromPath",value:function(){var t=n.Util.intersect(this.clipBox,this.getPathBoundingBox());this.startNewPathAndClipBox(t||[0,0,0,0])}},{key:"isEmptyClip",value:function(){return this.minX===1/0}},{key:"startNewPathAndClipBox",value:function(t){this.clipBox=t,this.minX=1/0,this.minY=1/0,this.maxX=0,this.maxY=0}},{key:"getClippedPathBoundingBox",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.PathType.FILL,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return n.Util.intersect(this.clipBox,this.getPathBoundingBox(t,e))}}]),t}();function S(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if("undefined"!=typeof ImageData&&e instanceof ImageData)t.putImageData(e,0,0);else{var i,a,o,s,l,u,c,h,f,d=e.height,p=e.width,v=d%_,y=(d-v)/_,m=0===v?y:y+1,g=t.createImageData(p,_),b=0,w=e.data,A=g.data;if(r)switch(r.length){case 1:u=r[0],c=r[0],h=r[0],f=r[0];break;case 4:u=r[0],c=r[1],h=r[2],f=r[3]}if(e.kind===n.ImageKind.GRAYSCALE_1BPP){var k=w.byteLength,S=new Uint32Array(A.buffer,0,A.byteLength>>2),x=S.length,E=p+7>>3,P=4294967295,T=n.FeatureTest.isLittleEndian?4278190080:255;if(f&&255===f[0]&&0===f[255]){var C=[T,P];P=C[0],T=C[1]}for(a=0;aE?p:8*O-7,R=-8&M,I=0,j=0;F>=1}for(;i=y&&(l=p*(s=v)),i=0,o=l;o--;)A[i++]=w[b++],A[i++]=w[b++],A[i++]=w[b++],A[i++]=255;if(U)for(var W=0;W>8,t[a-2]=t[a-2]*o+r*s>>8,t[a-1]=t[a-1]*o+n*s>>8}}}function C(t,e,r){for(var n=t.length,i=3;i>8]>>8:e[i]*a>>16}}function F(t,e){var r=n.Util.singularValueDecompose2dScale(t);r[0]=Math.fround(r[0]),r[1]=Math.fround(r[1]);var a=Math.fround((globalThis.devicePixelRatio||1)*i.PixelsPerInch.PDF_TO_CSS_UNITS);return void 0!==e?e:r[0]<=a||r[1]<=a}var M=["butt","round","square"],R=["miter","round","bevel"],I={},j={},L=new WeakSet,D=function(){function t(e,r,n,i,a,o,s){var l,u,c=a.optionalContentConfig,h=a.markedContentStack,f=void 0===h?null:h;v(this,t),function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}(l=this,u=L),u.add(l),this.ctx=e,this.current=new k(this.ctx.canvas.width,this.ctx.canvas.height),this.stateStack=[],this.pendingClip=null,this.pendingEOFill=!1,this.res=null,this.xobjs=null,this.commonObjs=r,this.objs=n,this.canvasFactory=i,this.groupStack=[],this.processingType3=null,this.baseTransform=null,this.baseTransformStack=[],this.groupLevel=0,this.smaskStack=[],this.smaskCounter=0,this.tempSMask=null,this.suspendedCtx=null,this.contentVisible=!0,this.markedContentStack=f||[],this.optionalContentConfig=c,this.cachedCanvases=new w(this.canvasFactory),this.cachedPatterns=new Map,this.annotationCanvasMap=o,this.viewportScale=1,this.outputScaleX=1,this.outputScaleY=1,this.backgroundColor=(null==s?void 0:s.background)||null,this.foregroundColor=(null==s?void 0:s.foreground)||null,this._cachedScaleForStroking=null,this._cachedGetSinglePixelWidth=null,this._cachedBitmapsMap=new Map}return m(t,[{key:"getObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return"string"==typeof t?t.startsWith("g_")?this.commonObjs.get(t):this.objs.get(t):e}},{key:"beginDrawing",value:function(t){var e,r,n=t.transform,a=t.viewport,o=t.transparency,s=void 0!==o&&o,u=t.background,c=void 0===u?null:u,f=this.ctx.canvas.width,d=this.ctx.canvas.height,p=c||"#ffffff";if(this.ctx.save(),this.foregroundColor&&this.backgroundColor){this.ctx.fillStyle=this.foregroundColor;var v=this.foregroundColor=this.ctx.fillStyle;this.ctx.fillStyle=this.backgroundColor;var y,m,g=this.backgroundColor=this.ctx.fillStyle;if(this.ctx.fillStyle=p,y="string"==typeof(m=this.ctx.fillStyle)&&/^#[0-9A-Fa-f]{6}$/.test(m),"#000000"===v&&"#ffffff"===g||v===g||!y)this.foregroundColor=this.backgroundColor=null;else{var b=h((0,i.getRGB)(m),3),_=b[0],w=b[1],A=b[2],k=function(t){return(t/=255)<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)},S=Math.round(.2126*k(_)+.7152*k(w)+.0722*k(A));this.selectColor=function(t,e,r){var n=.2126*k(t)+.7152*k(e)+.0722*k(r);return Math.round(n)===S?g:v}}}if(this.ctx.fillStyle=this.backgroundColor||p,this.ctx.fillRect(0,0,f,d),this.ctx.restore(),s){var x,E=this.cachedCanvases.getCanvas("transparent",f,d);this.compositeCtx=this.ctx,this.transparentCanvas=E.canvas,this.ctx=E.context,this.ctx.save(),(x=this.ctx).transform.apply(x,l((0,i.getCurrentTransform)(this.compositeCtx)))}this.ctx.save(),P(this.ctx,this.foregroundColor),n&&((r=this.ctx).transform.apply(r,l(n)),this.outputScaleX=n[0],this.outputScaleY=n[0]),(e=this.ctx).transform.apply(e,l(a.transform)),this.viewportScale=a.scale,this.baseTransform=(0,i.getCurrentTransform)(this.ctx)}},{key:"executeOperatorList",value:function(t,e,r,i){var a=t.argsArray,o=t.fnArray,s=e||0,l=a.length;if(l===s)return s;for(var u,h=l-s>10&&"function"==typeof r,f=h?Date.now()+15:0,d=0,p=this.commonObjs,v=this.objs;;){if(void 0!==i&&s===i.nextBreakPoint)return i.breakIt(s,r),s;if((u=o[s])!==n.OPS.dependency)this[u].apply(this,a[s]);else{var y,m=c(a[s]);try{for(m.s();!(y=m.n()).done;){var g=y.value,b=g.startsWith("g_")?p:v;if(!b.has(g))return b.get(g,r),s}}catch(t){m.e(t)}finally{m.f()}}if(++s===l)return s;if(h&&++d>10){if(Date.now()>f)return r(),s;d=0}}}},{key:"endDrawing",value:function(){u(this,L,N).call(this),this.cachedCanvases.clear(),this.cachedPatterns.clear();var t,e=c(this._cachedBitmapsMap.values());try{for(e.s();!(t=e.n()).done;){var r,n=t.value,i=c(n.values());try{for(i.s();!(r=i.n()).done;){var a=r.value;"undefined"!=typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement&&(a.width=a.height=0)}}catch(t){i.e(t)}finally{i.f()}n.clear()}}catch(t){e.e(t)}finally{e.f()}this._cachedBitmapsMap.clear()}},{key:"_scaleImage",value:function(t,e){for(var r,n,i=t.width,a=t.height,o=Math.max(Math.hypot(e[0],e[1]),1),s=Math.max(Math.hypot(e[2],e[3]),1),l=i,u=a,c="prescale1";o>2&&l>1||s>2&&u>1;){var h=l,f=u;o>2&&l>1&&(o/=l/(h=Math.ceil(l/2))),s>2&&u>1&&(s/=u/(f=Math.ceil(u/2))),(n=(r=this.cachedCanvases.getCanvas(c,h,f)).context).clearRect(0,0,h,f),n.drawImage(t,0,0,l,u,0,0,h,f),t=r.canvas,l=h,u=f,c="prescale1"===c?"prescale2":"prescale1"}return{img:t,paintWidth:l,paintHeight:u}}},{key:"_createMaskCanvas",value:function(t){var e,r,o,s,u=this.ctx,c=t.width,h=t.height,f=this.current.fillColor,d=this.current.patternFill,p=(0,i.getCurrentTransform)(u);if((t.bitmap||t.data)&&t.count>1){var v=t.bitmap||t.data.buffer;r=JSON.stringify(d?p:[p.slice(0,4),f]),(e=this._cachedBitmapsMap.get(v))||(e=new Map,this._cachedBitmapsMap.set(v,e));var y=e.get(r);if(y&&!d)return{canvas:y,offsetX:Math.round(Math.min(p[0],p[2])+p[4]),offsetY:Math.round(Math.min(p[1],p[3])+p[5])};o=y}o||x((s=this.cachedCanvases.getCanvas("maskCanvas",c,h)).context,t);var m=n.Util.transform(p,[1/c,0,0,-1/h,0,0]);m=n.Util.transform(m,[1,0,0,1,0,-h]);var g=n.Util.applyTransform([0,0],m),b=n.Util.applyTransform([c,h],m),_=n.Util.normalizeRect([g[0],g[1],b[0],b[1]]),w=Math.round(_[2]-_[0])||1,k=Math.round(_[3]-_[1])||1,S=this.cachedCanvases.getCanvas("fillCanvas",w,k),E=S.context,P=Math.min(g[0],b[0]),T=Math.min(g[1],b[1]);E.translate(-P,-T),E.transform.apply(E,l(m)),o||(o=(o=this._scaleImage(s.canvas,(0,i.getCurrentTransformInverse)(E))).img,e&&d&&e.set(r,o)),E.imageSmoothingEnabled=F((0,i.getCurrentTransform)(E),t.interpolate),A(E,o,0,0,o.width,o.height,0,0,c,h),E.globalCompositeOperation="source-in";var C=n.Util.transform((0,i.getCurrentTransformInverse)(E),[1,0,0,1,-P,-T]);return E.fillStyle=d?f.getPattern(u,this,C,a.PathType.FILL):f,E.fillRect(0,0,c,h),e&&!d&&(this.cachedCanvases.delete("fillCanvas"),e.set(r,S.canvas)),{canvas:S.canvas,offsetX:Math.round(P),offsetY:Math.round(T)}}},{key:"setLineWidth",value:function(t){t!==this.current.lineWidth&&(this._cachedScaleForStroking=null),this.current.lineWidth=t,this.ctx.lineWidth=t}},{key:"setLineCap",value:function(t){this.ctx.lineCap=M[t]}},{key:"setLineJoin",value:function(t){this.ctx.lineJoin=R[t]}},{key:"setMiterLimit",value:function(t){this.ctx.miterLimit=t}},{key:"setDash",value:function(t,e){var r=this.ctx;void 0!==r.setLineDash&&(r.setLineDash(t),r.lineDashOffset=e)}},{key:"setRenderingIntent",value:function(t){}},{key:"setFlatness",value:function(t){}},{key:"setGState",value:function(t){var e,r=c(t);try{for(r.s();!(e=r.n()).done;){var n=h(e.value,2),i=n[0],a=n[1];switch(i){case"LW":this.setLineWidth(a);break;case"LC":this.setLineCap(a);break;case"LJ":this.setLineJoin(a);break;case"ML":this.setMiterLimit(a);break;case"D":this.setDash(a[0],a[1]);break;case"RI":this.setRenderingIntent(a);break;case"FL":this.setFlatness(a);break;case"Font":this.setFont(a[0],a[1]);break;case"CA":this.current.strokeAlpha=a;break;case"ca":this.current.fillAlpha=a,this.ctx.globalAlpha=a;break;case"BM":this.ctx.globalCompositeOperation=a;break;case"SMask":this.current.activeSMask=a?this.tempSMask:null,this.tempSMask=null,this.checkSMaskState();break;case"TR":this.current.transferMaps=a}}}catch(t){r.e(t)}finally{r.f()}}},{key:"inSMaskMode",get:function(){return!!this.suspendedCtx}},{key:"checkSMaskState",value:function(){var t=this.inSMaskMode;this.current.activeSMask&&!t?this.beginSMaskMode():!this.current.activeSMask&&t&&this.endSMaskMode()}},{key:"beginSMaskMode",value:function(){if(this.inSMaskMode)throw new Error("beginSMaskMode called while already in smask mode");var t=this.ctx.canvas.width,e=this.ctx.canvas.height,r="smaskGroupAt"+this.groupLevel,n=this.cachedCanvases.getCanvas(r,t,e);this.suspendedCtx=this.ctx,this.ctx=n.context;var a=this.ctx;a.setTransform.apply(a,l((0,i.getCurrentTransform)(this.suspendedCtx))),E(this.suspendedCtx,a),function(t,e){if(t._removeMirroring)throw new Error("Context is already forwarding operations.");t.__originalSave=t.save,t.__originalRestore=t.restore,t.__originalRotate=t.rotate,t.__originalScale=t.scale,t.__originalTranslate=t.translate,t.__originalTransform=t.transform,t.__originalSetTransform=t.setTransform,t.__originalResetTransform=t.resetTransform,t.__originalClip=t.clip,t.__originalMoveTo=t.moveTo,t.__originalLineTo=t.lineTo,t.__originalBezierCurveTo=t.bezierCurveTo,t.__originalRect=t.rect,t.__originalClosePath=t.closePath,t.__originalBeginPath=t.beginPath,t._removeMirroring=function(){t.save=t.__originalSave,t.restore=t.__originalRestore,t.rotate=t.__originalRotate,t.scale=t.__originalScale,t.translate=t.__originalTranslate,t.transform=t.__originalTransform,t.setTransform=t.__originalSetTransform,t.resetTransform=t.__originalResetTransform,t.clip=t.__originalClip,t.moveTo=t.__originalMoveTo,t.lineTo=t.__originalLineTo,t.bezierCurveTo=t.__originalBezierCurveTo,t.rect=t.__originalRect,t.closePath=t.__originalClosePath,t.beginPath=t.__originalBeginPath,delete t._removeMirroring},t.save=function(){e.save(),this.__originalSave()},t.restore=function(){e.restore(),this.__originalRestore()},t.translate=function(t,r){e.translate(t,r),this.__originalTranslate(t,r)},t.scale=function(t,r){e.scale(t,r),this.__originalScale(t,r)},t.transform=function(t,r,n,i,a,o){e.transform(t,r,n,i,a,o),this.__originalTransform(t,r,n,i,a,o)},t.setTransform=function(t,r,n,i,a,o){e.setTransform(t,r,n,i,a,o),this.__originalSetTransform(t,r,n,i,a,o)},t.resetTransform=function(){e.resetTransform(),this.__originalResetTransform()},t.rotate=function(t){e.rotate(t),this.__originalRotate(t)},t.clip=function(t){e.clip(t),this.__originalClip(t)},t.moveTo=function(t,r){e.moveTo(t,r),this.__originalMoveTo(t,r)},t.lineTo=function(t,r){e.lineTo(t,r),this.__originalLineTo(t,r)},t.bezierCurveTo=function(t,r,n,i,a,o){e.bezierCurveTo(t,r,n,i,a,o),this.__originalBezierCurveTo(t,r,n,i,a,o)},t.rect=function(t,r,n,i){e.rect(t,r,n,i),this.__originalRect(t,r,n,i)},t.closePath=function(){e.closePath(),this.__originalClosePath()},t.beginPath=function(){e.beginPath(),this.__originalBeginPath()}}(a,this.suspendedCtx),this.setGState([["BM","source-over"],["ca",1],["CA",1]])}},{key:"endSMaskMode",value:function(){if(!this.inSMaskMode)throw new Error("endSMaskMode called while not in smask mode");this.ctx._removeMirroring(),E(this.ctx,this.suspendedCtx),this.ctx=this.suspendedCtx,this.suspendedCtx=null}},{key:"compose",value:function(t){if(this.current.activeSMask){t?(t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.ceil(t[2]),t[3]=Math.ceil(t[3])):t=[0,0,this.ctx.canvas.width,this.ctx.canvas.height];var e=this.current.activeSMask;(function(t,e,r,n){var i=n[0],a=n[1],o=n[2]-i,s=n[3]-a;0!==o&&0!==s&&(function(t,e,r,n,i,a,o,s,l,u,c){var h,f=!!a,d=f?a[0]:0,p=f?a[1]:0,v=f?a[2]:0;h="Luminosity"===i?O:C;for(var y=Math.min(n,Math.ceil(1048576/r)),m=0;m0&&void 0!==arguments[0])||arguments[0],e=this.ctx,r=this.current.strokeColor;e.globalAlpha=this.current.strokeAlpha,this.contentVisible&&("object"===p(r)&&null!=r&&r.getPattern?(e.save(),e.strokeStyle=r.getPattern(e,this,(0,i.getCurrentTransformInverse)(e),a.PathType.STROKE),this.rescaleAndStroke(!1),e.restore()):this.rescaleAndStroke(!0)),t&&this.consumePath(this.current.getClippedPathBoundingBox()),e.globalAlpha=this.current.fillAlpha}},{key:"closeStroke",value:function(){this.closePath(),this.stroke()}},{key:"fill",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=this.ctx,r=this.current.fillColor,n=!1;this.current.patternFill&&(e.save(),e.fillStyle=r.getPattern(e,this,(0,i.getCurrentTransformInverse)(e),a.PathType.FILL),n=!0);var o=this.current.getClippedPathBoundingBox();this.contentVisible&&null!==o&&(this.pendingEOFill?(e.fill("evenodd"),this.pendingEOFill=!1):e.fill()),n&&e.restore(),t&&this.consumePath(o)}},{key:"eoFill",value:function(){this.pendingEOFill=!0,this.fill()}},{key:"fillStroke",value:function(){this.fill(!1),this.stroke(!1),this.consumePath()}},{key:"eoFillStroke",value:function(){this.pendingEOFill=!0,this.fillStroke()}},{key:"closeFillStroke",value:function(){this.closePath(),this.fillStroke()}},{key:"closeEOFillStroke",value:function(){this.pendingEOFill=!0,this.closePath(),this.fillStroke()}},{key:"endPath",value:function(){this.consumePath()}},{key:"clip",value:function(){this.pendingClip=I}},{key:"eoClip",value:function(){this.pendingClip=j}},{key:"beginText",value:function(){this.current.textMatrix=n.IDENTITY_MATRIX,this.current.textMatrixScale=1,this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}},{key:"endText",value:function(){var t=this.pendingTextPaths,e=this.ctx;if(void 0!==t){e.save(),e.beginPath();var r,n=c(t);try{for(n.s();!(r=n.n()).done;){var i=r.value;e.setTransform.apply(e,l(i.transform)),e.translate(i.x,i.y),i.addToPath(e,i.fontSize)}}catch(t){n.e(t)}finally{n.f()}e.restore(),e.clip(),e.beginPath(),delete this.pendingTextPaths}else e.beginPath()}},{key:"setCharSpacing",value:function(t){this.current.charSpacing=t}},{key:"setWordSpacing",value:function(t){this.current.wordSpacing=t}},{key:"setHScale",value:function(t){this.current.textHScale=t/100}},{key:"setLeading",value:function(t){this.current.leading=-t}},{key:"setFont",value:function(t,e){var r=this.commonObjs.get(t),i=this.current;if(!r)throw new Error("Can't find font for ".concat(t));if(i.fontMatrix=r.fontMatrix||n.FONT_IDENTITY_MATRIX,0!==i.fontMatrix[0]&&0!==i.fontMatrix[3]||(0,n.warn)("Invalid font matrix for font "+t),e<0?(e=-e,i.fontDirection=-1):i.fontDirection=1,this.current.font=r,this.current.fontSize=e,!r.isType3Font){var a=r.loadedName||"sans-serif",o="normal";r.black?o="900":r.bold&&(o="bold");var s=r.italic?"italic":"normal",l='"'.concat(a,'", ').concat(r.fallbackName),u=e;e<16?u=16:e>100&&(u=100),this.current.fontSizeScale=e/u,this.ctx.font="".concat(s," ").concat(o," ").concat(u,"px ").concat(l)}}},{key:"setTextRenderingMode",value:function(t){this.current.textRenderingMode=t}},{key:"setTextRise",value:function(t){this.current.textRise=t}},{key:"moveText",value:function(t,e){this.current.x=this.current.lineX+=t,this.current.y=this.current.lineY+=e}},{key:"setLeadingMoveText",value:function(t,e){this.setLeading(-e),this.moveText(t,e)}},{key:"setTextMatrix",value:function(t,e,r,n,i,a){this.current.textMatrix=[t,e,r,n,i,a],this.current.textMatrixScale=Math.hypot(t,e),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}},{key:"nextLine",value:function(){this.moveText(0,this.current.leading)}},{key:"paintChar",value:function(t,e,r,a){var o,s=this.ctx,u=this.current,c=u.font,h=u.textRenderingMode,f=u.fontSize/u.fontSizeScale,d=h&n.TextRenderingMode.FILL_STROKE_MASK,p=!!(h&n.TextRenderingMode.ADD_TO_PATH_FLAG),v=u.patternFill&&!c.missingFile;(c.disableFontFace||p||v)&&(o=c.getPathGenerator(this.commonObjs,t)),c.disableFontFace||v?(s.save(),s.translate(e,r),s.beginPath(),o(s,f),a&&s.setTransform.apply(s,l(a)),d!==n.TextRenderingMode.FILL&&d!==n.TextRenderingMode.FILL_STROKE||s.fill(),d!==n.TextRenderingMode.STROKE&&d!==n.TextRenderingMode.FILL_STROKE||s.stroke(),s.restore()):(d!==n.TextRenderingMode.FILL&&d!==n.TextRenderingMode.FILL_STROKE||s.fillText(t,e,r),d!==n.TextRenderingMode.STROKE&&d!==n.TextRenderingMode.FILL_STROKE||s.strokeText(t,e,r)),p&&(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:(0,i.getCurrentTransform)(s),x:e,y:r,fontSize:f,addToPath:o})}},{key:"isFontSubpixelAAEnabled",get:function(){var t=this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled",10,10).context;t.scale(1.5,1),t.fillText("I",0,10);for(var e=t.getImageData(0,0,10,10).data,r=!1,i=3;i0&&e[i]<255){r=!0;break}return(0,n.shadow)(this,"isFontSubpixelAAEnabled",r)}},{key:"showText",value:function(t){var e=this.current,r=e.font;if(r.isType3Font)return this.showType3Text(t);var o=e.fontSize;if(0!==o){var s,u=this.ctx,h=e.fontSizeScale,f=e.charSpacing,d=e.wordSpacing,p=e.fontDirection,v=e.textHScale*p,y=t.length,m=r.vertical,g=m?1:-1,b=r.defaultVMetrics,_=o*e.fontMatrix[0],w=e.textRenderingMode===n.TextRenderingMode.FILL&&!r.disableFontFace&&!e.patternFill;if(u.save(),u.transform.apply(u,l(e.textMatrix)),u.translate(e.x,e.y+e.textRise),p>0?u.scale(v,-1):u.scale(v,1),e.patternFill){u.save();var A=e.fillColor.getPattern(u,this,(0,i.getCurrentTransformInverse)(u),a.PathType.FILL);s=(0,i.getCurrentTransform)(u),u.restore(),u.fillStyle=A}var k=e.lineWidth,S=e.textMatrixScale;if(0===S||0===k){var x=e.textRenderingMode&n.TextRenderingMode.FILL_STROKE_MASK;x!==n.TextRenderingMode.STROKE&&x!==n.TextRenderingMode.FILL_STROKE||(k=this.getSinglePixelWidth())}else k/=S;if(1!==h&&(u.scale(h,h),k/=h),u.lineWidth=k,r.isInvalidPDFjsFont){var E,P=[],T=0,C=c(t);try{for(C.s();!(E=C.n()).done;){var O=E.value;P.push(O.unicode),T+=O.width}}catch(t){C.e(t)}finally{C.f()}return u.fillText(P.join(""),0,0),e.x+=T*_*v,u.restore(),void this.compose()}var F,M=0;for(F=0;F0){var H=1e3*u.measureText(L).width/o*h;if(W1&&void 0!==arguments[1]?arguments[1]:null;return this.cachedPatterns.has(t)?e=this.cachedPatterns.get(t):(e=(0,a.getShadingPattern)(this.objs.get(t)),this.cachedPatterns.set(t,e)),r&&(e.matrix=r),e}},{key:"shadingFill",value:function(t){if(this.contentVisible){var e=this.ctx;this.save();var r=this._getPattern(t);e.fillStyle=r.getPattern(e,this,(0,i.getCurrentTransformInverse)(e),a.PathType.SHADING);var o=(0,i.getCurrentTransformInverse)(e);if(o){var s=e.canvas,l=s.width,u=s.height,c=n.Util.applyTransform([0,0],o),h=n.Util.applyTransform([0,u],o),f=n.Util.applyTransform([l,0],o),d=n.Util.applyTransform([l,u],o),p=Math.min(c[0],h[0],f[0],d[0]),v=Math.min(c[1],h[1],f[1],d[1]),y=Math.max(c[0],h[0],f[0],d[0]),m=Math.max(c[1],h[1],f[1],d[1]);this.ctx.fillRect(p,v,y-p,m-v)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.compose(this.current.getClippedPathBoundingBox()),this.restore()}}},{key:"beginInlineImage",value:function(){(0,n.unreachable)("Should not call beginInlineImage")}},{key:"beginImageData",value:function(){(0,n.unreachable)("Should not call beginImageData")}},{key:"paintFormXObjectBegin",value:function(t,e){if(this.contentVisible&&(this.save(),this.baseTransformStack.push(this.baseTransform),Array.isArray(t)&&6===t.length&&this.transform.apply(this,l(t)),this.baseTransform=(0,i.getCurrentTransform)(this.ctx),e)){var r=e[2]-e[0],n=e[3]-e[1];this.ctx.rect(e[0],e[1],r,n),this.current.updateRectMinMax((0,i.getCurrentTransform)(this.ctx),e),this.clip(),this.endPath()}}},{key:"paintFormXObjectEnd",value:function(){this.contentVisible&&(this.restore(),this.baseTransform=this.baseTransformStack.pop())}},{key:"beginGroup",value:function(t){if(this.contentVisible){this.save(),this.inSMaskMode&&(this.endSMaskMode(),this.current.activeSMask=null);var e=this.ctx;t.isolated||(0,n.info)("TODO: Support non-isolated groups."),t.knockout&&(0,n.warn)("Knockout groups not supported.");var r=(0,i.getCurrentTransform)(e);if(t.matrix&&e.transform.apply(e,l(t.matrix)),!t.bbox)throw new Error("Bounding box is required.");var a=n.Util.getAxialAlignedBoundingBox(t.bbox,(0,i.getCurrentTransform)(e)),o=[0,0,e.canvas.width,e.canvas.height];a=n.Util.intersect(a,o)||[0,0,0,0];var s=Math.floor(a[0]),u=Math.floor(a[1]),c=Math.max(Math.ceil(a[2])-s,1),h=Math.max(Math.ceil(a[3])-u,1),f=1,d=1;c>g&&(f=c/g,c=g),h>g&&(d=h/g,h=g),this.current.startNewPathAndClipBox([0,0,c,h]);var p="groupAt"+this.groupLevel;t.smask&&(p+="_smask_"+this.smaskCounter++%2);var v=this.cachedCanvases.getCanvas(p,c,h),y=v.context;y.scale(1/f,1/d),y.translate(-s,-u),y.transform.apply(y,l(r)),t.smask?this.smaskStack.push({canvas:v.canvas,context:y,offsetX:s,offsetY:u,scaleX:f,scaleY:d,subtype:t.smask.subtype,backdrop:t.smask.backdrop,transferMap:t.smask.transferMap||null,startTransformInverse:null}):(e.setTransform(1,0,0,1,0,0),e.translate(s,u),e.scale(f,d),e.save()),E(e,y),this.ctx=y,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(e),this.groupLevel++}}},{key:"endGroup",value:function(t){if(this.contentVisible){this.groupLevel--;var e=this.ctx,r=this.groupStack.pop();if(this.ctx=r,this.ctx.imageSmoothingEnabled=!1,t.smask)this.tempSMask=this.smaskStack.pop(),this.restore();else{var a;this.ctx.restore();var o=(0,i.getCurrentTransform)(this.ctx);this.restore(),this.ctx.save(),(a=this.ctx).setTransform.apply(a,l(o));var s=n.Util.getAxialAlignedBoundingBox([0,0,e.canvas.width,e.canvas.height],o);this.ctx.drawImage(e.canvas,0,0),this.ctx.restore(),this.compose(s)}}}},{key:"beginAnnotation",value:function(t,e,r,a,o){var s;if(u(this,L,N).call(this),P(this.ctx,this.foregroundColor),this.ctx.save(),this.save(),this.baseTransform&&(s=this.ctx).setTransform.apply(s,l(this.baseTransform)),Array.isArray(e)&&4===e.length){var c=e[2]-e[0],f=e[3]-e[1];if(o&&this.annotationCanvasMap){(r=r.slice())[4]-=e[0],r[5]-=e[1],(e=e.slice())[0]=e[1]=0,e[2]=c,e[3]=f;var d=h(n.Util.singularValueDecompose2dScale((0,i.getCurrentTransform)(this.ctx)),2),p=d[0],v=d[1],y=this.viewportScale,m=Math.ceil(c*this.outputScaleX*y),g=Math.ceil(f*this.outputScaleY*y);this.annotationCanvas=this.canvasFactory.create(m,g);var b=this.annotationCanvas,_=b.canvas,w=b.context;this.annotationCanvasMap.set(t,_),this.annotationCanvas.savedCtx=this.ctx,this.ctx=w,this.ctx.setTransform(p,0,0,-v,0,f*v),P(this.ctx,this.foregroundColor)}else P(this.ctx,this.foregroundColor),this.ctx.rect(e[0],e[1],c,f),this.ctx.clip(),this.endPath()}this.current=new k(this.ctx.canvas.width,this.ctx.canvas.height),this.transform.apply(this,l(r)),this.transform.apply(this,l(a))}},{key:"endAnnotation",value:function(){this.annotationCanvas&&(this.ctx=this.annotationCanvas.savedCtx,delete this.annotationCanvas.savedCtx,delete this.annotationCanvas)}},{key:"paintImageMaskXObject",value:function(t){if(this.contentVisible){var e=t.count;(t=this.getObject(t.data,t)).count=e;var r=this.ctx,n=this.processingType3;if(n&&(void 0===n.compiled&&(n.compiled=function(t){var e=t.width,r=t.height;if(e>b||r>b)return null;var n,i,a,o,s=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),l=e+1,u=new Uint8Array(l*(r+1)),h=e+7&-8,f=new Uint8Array(h*r),d=0,p=c(t.data);try{for(p.s();!(o=p.n()).done;)for(var v=o.value,y=128;y>0;)f[d++]=v&y?0:255,y>>=1}catch(t){p.e(t)}finally{p.f()}var m=0;for(0!==f[d=0]&&(u[0]=1,++m),i=1;i>2)+(f[d+1]?4:0)+(f[d-h+1]?8:0)]&&(u[a+i]=s[g],++m),d++;if(f[d-h]!==f[d]&&(u[a+i]=f[d]?2:4,++m),m>1e3)return null}for(a=n*l,0!==f[d=h*(r-1)]&&(u[a]=8,++m),i=1;i1e3)return null;var _=new Int32Array([0,l,-1,0,-l,0,0,0,1]),w=new Path2D;for(n=0;m&&n<=r;n++){for(var A=n*l,k=A+e;A>4,u[A]&=x>>2|x<<2),w.lineTo(A%l,A/l|0),u[A]||--m}while(S!==A);--n}}return f=null,u=null,function(t){t.save(),t.scale(1/e,-1/r),t.translate(0,-r),t.fill(w),t.beginPath(),t.restore()}}(t)),n.compiled))n.compiled(r);else{var i=this._createMaskCanvas(t),a=i.canvas;r.save(),r.setTransform(1,0,0,1,0,0),r.drawImage(a,i.offsetX,i.offsetY),r.restore(),this.compose()}}}},{key:"paintImageMaskXObjectRepeat",value:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4?arguments[4]:void 0,s=arguments.length>5?arguments[5]:void 0;if(this.contentVisible){t=this.getObject(t.data,t);var l=this.ctx;l.save();var u=(0,i.getCurrentTransform)(l);l.transform(e,r,a,o,0,0);var c=this._createMaskCanvas(t);l.setTransform(1,0,0,1,c.offsetX-u[4],c.offsetY-u[5]);for(var f=0,d=s.length;ff?h/f:1,e=c>f?c/f:1}}this._cachedScaleForStroking=[t,e]}return this._cachedScaleForStroking}},{key:"rescaleAndStroke",value:function(t){var e=this.ctx,r=this.current.lineWidth,n=h(this.getScaleForStroking(),2),a=n[0],o=n[1];if(e.lineWidth=r||1,1!==a||1!==o){var s,u,c;t&&(s=(0,i.getCurrentTransform)(e),u=e.getLineDash().slice(),c=e.lineDashOffset),e.scale(a,o);var f=Math.max(a,o);e.setLineDash(e.getLineDash().map((function(t){return t/f}))),e.lineDashOffset/=f,e.stroke(),t&&(e.setTransform.apply(e,l(s)),e.setLineDash(u),e.lineDashOffset=c)}else e.stroke()}},{key:"isContentVisible",value:function(){for(var t=this.markedContentStack.length-1;t>=0;t--)if(!this.markedContentStack[t].visible)return!1;return!0}}]),t}();function N(){for(;this.stateStack.length||this.inSMaskMode;)this.restore();this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null)}for(var U in e.CanvasGraphics=D,n.OPS)void 0!==D.prototype[U]&&(D.prototype[n.OPS[U]]=D.prototype[U])},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.TilingPattern=e.PathType=void 0,e.getShadingPattern=function(t){switch(t[0]){case"RadialAxial":return new w(t);case"Mesh":return new S(t);case"Dummy":return new x}throw new Error("Unknown IR type: ".concat(t[0]))};var n=r(1),i=r(137),a=r(3);function o(t){return function(t){if(Array.isArray(t))return u(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||l(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=l(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);ru[n+1]&&(l=r,r=n,n=l,l=a,a=o,o=l),u[n+1]>u[i+1]&&(l=n,n=i,i=l,l=o,o=s,s=l),u[r+1]>u[n+1]&&(l=r,r=n,n=l,l=a,a=o,o=l);var d=(u[r]+e.offsetX)*e.scaleX,p=(u[r+1]+e.offsetY)*e.scaleY,v=(u[n]+e.offsetX)*e.scaleX,y=(u[n+1]+e.offsetY)*e.scaleY,m=(u[i]+e.offsetX)*e.scaleX,g=(u[i+1]+e.offsetY)*e.scaleY;if(!(p>=g))for(var b,_,w,A,k,S,x,E,P=c[a],T=c[a+1],C=c[a+2],O=c[o],F=c[o+1],M=c[o+2],R=c[s],I=c[s+1],j=c[s+2],L=Math.round(p),D=Math.round(g),N=L;N<=D;N++){if(Ng?1:y===g?0:(y-N)/(y-g)),_=O-(O-R)*W,w=F-(F-I)*W,A=M-(M-j)*W}var G=void 0;k=d-(d-m)*(G=Ng?1:(p-N)/(p-g)),S=P-(P-R)*G,x=T-(T-I)*G,E=C-(C-j)*G;for(var B=Math.round(Math.min(b,k)),q=Math.round(Math.max(b,k)),H=f*N+4*B,z=B;z<=q;z++)(G=(b-z)/(b-k))<0?G=0:G>1&&(G=1),h[H++]=_-(_-S)*G|0,h[H++]=w-(w-x)*G|0,h[H++]=A-(A-E)*G|0,h[H++]=255}}function k(t,e,r){var n,i,a=e.coords,o=e.colors;switch(e.type){case"lattice":var s=e.verticesPerRow,l=Math.floor(a.length/s)-1,u=s-1;for(n=0;n=i?a=i:n=a/e,{scale:n,size:a}}},{key:"clipBbox",value:function(t,e,r,n,a){var o=n-e,s=a-r;t.ctx.rect(e,r,o,s),t.current.updateRectMinMax((0,i.getCurrentTransform)(t.ctx),[e,r,n,a]),t.clip(),t.endPath()}},{key:"setFillAndStrokeStyleToContext",value:function(t,e,r){var i=t.ctx,a=t.current;switch(e){case 1:var o=this.ctx;i.fillStyle=o.fillStyle,i.strokeStyle=o.strokeStyle,a.fillColor=o.fillStyle,a.strokeColor=o.strokeStyle;break;case 2:var s=n.Util.makeHexColor(r[0],r[1],r[2]);i.fillStyle=s,i.strokeStyle=s,a.fillColor=s,a.strokeColor=s;break;default:throw new n.FormatError("Unsupported paint type: ".concat(e))}}},{key:"getPattern",value:function(t,e,r,i){var a=r;i!==g.SHADING&&(a=n.Util.transform(a,e.baseTransform),this.matrix&&(a=n.Util.transform(a,this.matrix)));var o=this.createPatternCanvas(e),s=new DOMMatrix(a);s=(s=s.translate(o.offsetX,o.offsetY)).scale(1/o.scaleX,1/o.scaleY);var l=t.createPattern(o.canvas,"repeat");return l.setTransform(s),l}}],[{key:"MAX_PATTERN_SIZE",get:function(){return(0,n.shadow)(this,"MAX_PATTERN_SIZE",3e3)}}]),t}();e.TilingPattern=E},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.applyMaskImageData=function(t){var e,r=t.src,a=t.srcPos,o=void 0===a?0:a,s=t.dest,l=t.destPos,u=void 0===l?0:l,c=t.width,h=t.height,f=t.inverseDecode,d=void 0!==f&&f,p=n.FeatureTest.isLittleEndian?4278190080:255,v=function(t){if(Array.isArray(t))return t}(e=d?[0,p]:[p,0])||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{for(a=(r=r.call(t)).next;!(l=(n=a.call(r)).done)&&(s.push(n.value),2!==s.length);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(e)||function(t,e){if(t){if("string"==typeof t)return i(t,2);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,2):void 0}}(e)||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.")}(),y=v[0],m=v[1],g=c>>3,b=7&c,_=r.length;s=new Uint32Array(s.buffer);for(var w=0;wt.length)&&(e=t.length);for(var r=0,n=new Array(e);r{Object.defineProperty(e,"__esModule",{value:!0}),e.GlobalWorkerOptions=void 0;var r=Object.create(null);e.GlobalWorkerOptions=r,r.workerPort=void 0===r.workerPort?null:r.workerPort,r.workerSrc=void 0===r.workerSrc?"":r.workerSrc},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.MessageHandler=void 0;var n=r(1);function i(){i=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,l){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==s(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,l)}),(function(t){i("throw",t,o,l)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,l)}))}l(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function a(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function o(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:1,s=arguments.length>2?arguments[2]:void 0;if(!this.isCancelled){var l=this.desiredSize;this.desiredSize-=o,l>0&&this.desiredSize<=0&&(this.sinkCapability=(0,n.createPromiseCapability)(),this.ready=this.sinkCapability.promise),a.postMessage({sourceName:r,targetName:i,stream:4,streamId:e,chunk:t},s)}},close:function(){this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:r,targetName:i,stream:3,streamId:e}),delete o.streamSinks[e])},error:function(t){(0,n.assert)(t instanceof Error,"error must have a valid reason"),this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:r,targetName:i,stream:5,streamId:e,reason:l(t)}))},sinkCapability:(0,n.createPromiseCapability)(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:t.desiredSize,ready:null};u.sinkCapability.resolve(),u.ready=u.sinkCapability.promise,this.streamSinks[e]=u,new Promise((function(e){e(s(t.data,u))})).then((function(){a.postMessage({sourceName:r,targetName:i,stream:8,streamId:e,success:!0})}),(function(t){a.postMessage({sourceName:r,targetName:i,stream:8,streamId:e,reason:l(t)})}))}},{key:"_processStreamMessage",value:function(t){var e=t.streamId,r=this.sourceName,i=t.sourceName,a=this.comObj,o=this.streamControllers[e],s=this.streamSinks[e];switch(t.stream){case 8:t.success?o.startCall.resolve():o.startCall.reject(l(t.reason));break;case 7:t.success?o.pullCall.resolve():o.pullCall.reject(l(t.reason));break;case 6:if(!s){a.postMessage({sourceName:r,targetName:i,stream:7,streamId:e,success:!0});break}s.desiredSize<=0&&t.desiredSize>0&&s.sinkCapability.resolve(),s.desiredSize=t.desiredSize,new Promise((function(t){t(s.onPull&&s.onPull())})).then((function(){a.postMessage({sourceName:r,targetName:i,stream:7,streamId:e,success:!0})}),(function(t){a.postMessage({sourceName:r,targetName:i,stream:7,streamId:e,reason:l(t)})}));break;case 4:if((0,n.assert)(o,"enqueue should have stream controller"),o.isClosed)break;o.controller.enqueue(t.chunk);break;case 3:if((0,n.assert)(o,"close should have stream controller"),o.isClosed)break;o.isClosed=!0,o.controller.close(),this._deleteStreamController(o,e);break;case 5:(0,n.assert)(o,"error should have stream controller"),o.controller.error(l(t.reason)),this._deleteStreamController(o,e);break;case 2:t.success?o.cancelCall.resolve():o.cancelCall.reject(l(t.reason)),this._deleteStreamController(o,e);break;case 1:if(!s)break;new Promise((function(e){e(s.onCancel&&s.onCancel(l(t.reason)))})).then((function(){a.postMessage({sourceName:r,targetName:i,stream:2,streamId:e,success:!0})}),(function(t){a.postMessage({sourceName:r,targetName:i,stream:2,streamId:e,reason:l(t)})})),s.sinkCapability.reject(l(t.reason)),s.isCancelled=!0,delete this.streamSinks[e];break;default:throw new Error("Unexpected stream case")}}},{key:"_deleteStreamController",value:(s=i().mark((function t(e,r){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.allSettled([e.startCall&&e.startCall.promise,e.pullCall&&e.pullCall.promise,e.cancelCall&&e.cancelCall.promise]);case 2:delete this.streamControllers[r];case 3:case"end":return t.stop()}}),t,this)})),u=function(){var t=this,e=arguments;return new Promise((function(r,n){var i=s.apply(t,e);function o(t){a(i,r,n,o,l,"next",t)}function l(t){a(i,r,n,o,l,"throw",t)}o(void 0)}))},function(t,e){return u.apply(this,arguments)})},{key:"destroy",value:function(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}],r&&o(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.MessageHandler=u},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Metadata=void 0;var i=r(1);function a(t,e){for(var r=0;r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.OptionalContentConfig=void 0;var i=r(1),a=r(139);function o(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=s(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){l=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(l)throw a}}}}function s(t,e){if(t){if("string"==typeof t)return l(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(t,e):void 0}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1])||arguments[1];y(this,A).has(t)?(y(this,A).get(t)._setVisible(g,!!e),v(this,w,null)):(0,i.warn)("Optional content group not found: ".concat(t))}},{key:"hasInitialVisibility",get:function(){return this.getHash()===y(this,k)}},{key:"getOrder",value:function(){return y(this,A).size?y(this,S)?y(this,S).slice():function(t){if(Array.isArray(t))return l(t)}(t=y(this,A).keys())||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||s(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}():null;var t}},{key:"getGroups",value:function(){return y(this,A).size>0?(0,i.objectFromMap)(y(this,A)):null}},{key:"getGroup",value:function(t){return y(this,A).get(t)||null}},{key:"getHash",value:function(){if(null!==y(this,w))return y(this,w);var t,e,r,n=new a.MurmurHash3_64,i=o(y(this,A));try{for(i.s();!(t=i.n()).done;){var l=(e=t.value,r=2,function(t){if(Array.isArray(t))return t}(e)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(e,r)||s(e,r)||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.")}()),u=l[0],c=l[1];n.update("".concat(u,":").concat(c.visible))}}catch(t){i.e(t)}finally{i.f()}return v(this,w,n.hexdigest())}}]),t}();function P(t){var e=t.length;if(e<2)return!0;for(var r=t[0],n=1;n{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFDataTransportStream=void 0;var n=r(1),i=r(137);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==l(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,s)}))}s(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function s(t){o(a,n,i,s,l,"next",t)}function l(t){o(a,n,i,s,l,"throw",t)}s(void 0)}))}}function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function u(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return c(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0){var o=new Uint8Array(a).buffer;this._queuedChunks.push(o)}this._pdfDataRangeTransport=r,this._isStreamingSupported=!e.disableStream,this._isRangeSupported=!e.disableRange,this._contentLength=e.length,this._fullRequestReader=null,this._rangeReaders=[],this._pdfDataRangeTransport.addRangeListener((function(t,e){i._onReceiveData({begin:t,chunk:e})})),this._pdfDataRangeTransport.addProgressListener((function(t,e){i._onProgress({loaded:t,total:e})})),this._pdfDataRangeTransport.addProgressiveReadListener((function(t){i._onReceiveData({chunk:t})})),this._pdfDataRangeTransport.addProgressiveDoneListener((function(){i._onProgressiveDone()})),this._pdfDataRangeTransport.transportReady()}return d(t,[{key:"_onReceiveData",value:function(t){var e=new Uint8Array(t.chunk).buffer;if(void 0===t.begin)this._fullRequestReader?this._fullRequestReader._enqueue(e):this._queuedChunks.push(e);else{var r=this._rangeReaders.some((function(r){return r._begin===t.begin&&(r._enqueue(e),!0)}));(0,n.assert)(r,"_onReceiveData - no \`PDFDataTransportStreamRangeReader\` instance found.")}}},{key:"_progressiveDataLength",get:function(){var t,e;return null!==(t=null===(e=this._fullRequestReader)||void 0===e?void 0:e._loaded)&&void 0!==t?t:0}},{key:"_onProgress",value:function(t){var e,r,n,i;void 0===t.total?null===(e=this._rangeReaders[0])||void 0===e||null===(r=e.onProgress)||void 0===r||r.call(e,{loaded:t.loaded}):null===(n=this._fullRequestReader)||void 0===n||null===(i=n.onProgress)||void 0===i||i.call(n,{loaded:t.loaded,total:t.total})}},{key:"_onProgressiveDone",value:function(){var t;null===(t=this._fullRequestReader)||void 0===t||t.progressiveDone(),this._progressiveDone=!0}},{key:"_removeRangeReader",value:function(t){var e=this._rangeReaders.indexOf(t);e>=0&&this._rangeReaders.splice(e,1)}},{key:"getFullReader",value:function(){(0,n.assert)(!this._fullRequestReader,"PDFDataTransportStream.getFullReader can only be called once.");var t=this._queuedChunks;return this._queuedChunks=null,new v(this,t,this._progressiveDone,this._contentDispositionFilename)}},{key:"getRangeReader",value:function(t,e){if(e<=this._progressiveDataLength)return null;var r=new y(this,t,e);return this._pdfDataRangeTransport.requestDataRange(t,e),this._rangeReaders.push(r),r}},{key:"cancelAllRequests",value:function(t){var e;null===(e=this._fullRequestReader)||void 0===e||e.cancel(t);var r,n=u(this._rangeReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}this._pdfDataRangeTransport.abort()}}]),t}();e.PDFDataTransportStream=p;var v=function(){function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;h(this,t),this._stream=e,this._done=n||!1,this._filename=(0,i.isPdfFile)(a)?a:null,this._queuedChunks=r||[],this._loaded=0;var o,s=u(this._queuedChunks);try{for(s.s();!(o=s.n()).done;){var l=o.value;this._loaded+=l.byteLength}}catch(t){s.e(t)}finally{s.f()}this._requests=[],this._headersReady=Promise.resolve(),e._fullRequestReader=this,this.onProgress=null}var e;return d(t,[{key:"_enqueue",value:function(t){this._done||(this._requests.length>0?this._requests.shift().resolve({value:t,done:!1}):this._queuedChunks.push(t),this._loaded+=t.byteLength)}},{key:"headersReady",get:function(){return this._headersReady}},{key:"filename",get:function(){return this._filename}},{key:"isRangeSupported",get:function(){return this._stream._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._stream._isStreamingSupported}},{key:"contentLength",get:function(){return this._stream._contentLength}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(this._queuedChunks.length>0)){t.next=3;break}return e=this._queuedChunks.shift(),t.abrupt("return",{value:e,done:!1});case 3:if(!this._done){t.next=5;break}return t.abrupt("return",{value:void 0,done:!0});case 5:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 8:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0;var e,r=u(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0}},{key:"progressiveDone",value:function(){this._done||(this._done=!0)}}]),t}(),y=function(){function t(e,r,n){h(this,t),this._stream=e,this._begin=r,this._end=n,this._queuedChunk=null,this._requests=[],this._done=!1,this.onProgress=null}var e;return d(t,[{key:"_enqueue",value:function(t){if(!this._done){if(0===this._requests.length)this._queuedChunk=t;else{this._requests.shift().resolve({value:t,done:!1});var e,r=u(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0}this._done=!0,this._stream._removeRangeReader(this)}}},{key:"isStreamingSupported",get:function(){return!1}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._queuedChunk){t.next=4;break}return e=this._queuedChunk,this._queuedChunk=null,t.abrupt("return",{value:e,done:!1});case 4:if(!this._done){t.next=6;break}return t.abrupt("return",{value:void 0,done:!0});case 6:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 9:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0;var e,r=u(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._stream._removeRangeReader(this)}}]),t}()},(t,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==r.return||r.return()}finally{if(l)throw o}}}}(i.children);try{for(u.s();!(l=u.n()).done;)e(l.value)}catch(t){u.e(t)}finally{u.f()}}}}(e),i}},{key:"shouldBuildText",value:function(t){return!("textarea"===t||"input"===t||"option"===t||"select"===t)}}],null&&i(e.prototype,null),r&&i(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.XfaText=a},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.NodeStandardFontDataFactory=e.NodeCanvasFactory=e.NodeCMapReaderFactory=void 0;var i=r(138);function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.TextLayerRenderTask=void 0,e.renderTextLayer=function(t){t.textContentSource||!t.textContent&&!t.textContentStream||((0,a.deprecated)("The TextLayerRender \`textContent\`/\`textContentStream\` parameters will be removed in the future, please use \`textContentSource\` instead."),t.textContentSource=t.textContent||t.textContentStream);var e=new p(t);return e._render(),e},e.updateTextLayer=function(t){var e=t.container,r=t.viewport,n=t.textDivs,i=t.textDivProperties,o=t.isOffscreenCanvasSupported,l=t.mustRotate,u=void 0===l||l,c=t.mustRescale,f=void 0===c||c;if(u&&(0,a.setLayerDimensions)(e,{rotation:r.rotation}),f){var p,v=h(0,o),y={prevFontSize:null,prevFontFamily:null,div:null,scale:r.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:v},m=s(n);try{for(m.s();!(p=m.n()).done;){var g=p.value;y.properties=i.get(g),y.div=g,d(y)}}catch(t){m.e(t)}finally{m.f()}}};var i=r(1),a=r(137);function o(t,e){for(var r=0;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=0;f-=4)if(l[f]>0){o=Math.ceil(f/4/u);break}n.clearRect(0,0,u,u),n.strokeText("A",0,u),a=0;for(var d=0,p=(l=n.getImageData(0,0,u,u).data).length;d0){a=u-Math.floor(d/4/u);break}if(n.canvas.width=n.canvas.height=0,a){var v=a/(a+o);return c.set(t,v),v}return c.set(t,.8),.8}(l.fontFamily,t._isOffscreenCanvasSupported);0===s?(f=o[4],d=o[5]-v):(f=o[4]+v*Math.sin(s),d=o[5]-v*Math.cos(s));var y="calc(var(--scale-factor)*",m=n.style;t._container===t._rootContainer?(m.left="".concat((100*f/t._pageWidth).toFixed(2),"%"),m.top="".concat((100*d/t._pageHeight).toFixed(2),"%")):(m.left="".concat(y).concat(f.toFixed(2),"px)"),m.top="".concat(y).concat(d.toFixed(2),"px)")),m.fontSize="".concat(y).concat(p.toFixed(2),"px)"),m.fontFamily=l.fontFamily,a.fontSize=p,n.setAttribute("role","presentation"),n.textContent=e.str,n.dir=e.dir,t._fontInspectorEnabled&&(n.dataset.fontName=e.fontName),0!==s&&(a.angle=s*(180/Math.PI));var g=!1;if(e.str.length>1)g=!0;else if(" "!==e.str&&e.transform[0]!==e.transform[3]){var b=Math.abs(e.transform[0]),_=Math.abs(e.transform[3]);b!==_&&Math.max(b,_)/Math.min(b,_)>1.5&&(g=!0)}g&&(a.canvasWidth=l.vertical?e.height:e.width),t._textDivProperties.set(n,a),t._isReadableStream&&t._layoutText(n)}function d(t){var e=t.div,r=t.scale,n=t.properties,i=t.ctx,a=t.prevFontSize,o=t.prevFontFamily,s=e.style,l="";if(0!==n.canvasWidth&&n.hasText){var u=s.fontFamily,c=n.canvasWidth,h=n.fontSize;a===h&&o===u||(i.font="".concat(h*r,"px ").concat(u),t.prevFontSize=h,t.prevFontFamily=u);var f=i.measureText(e.textContent).width;f>0&&(l="scaleX(".concat(c*r/f,")"))}0!==n.angle&&(l="rotate(".concat(n.angle,"deg) ").concat(l)),l.length>0&&(s.transform=l)}var p=function(){function t(e){var r,n=this,o=e.textContentSource,s=e.container,l=e.viewport,u=e.textDivs,c=e.textDivProperties,f=e.textContentItemsStr,d=e.isOffscreenCanvasSupported;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._textContentSource=o,this._isReadableStream=o instanceof ReadableStream,this._container=this._rootContainer=s,this._textDivs=u||[],this._textContentItemsStr=f||[],this._fontInspectorEnabled=!(null===(r=globalThis.FontInspector)||void 0===r||!r.enabled),this._reader=null,this._textDivProperties=c||new WeakMap,this._canceled=!1,this._capability=(0,i.createPromiseCapability)(),this._layoutTextParams={prevFontSize:null,prevFontFamily:null,div:null,scale:l.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:h(0,d)};var p=l.rawDims,v=p.pageWidth,y=p.pageHeight,m=p.pageX,g=p.pageY;this._transform=[1,0,0,-1,-m,g+y],this._pageWidth=v,this._pageHeight=y,(0,a.setLayerDimensions)(s,l),this._capability.promise.finally((function(){n._layoutTextParams=null})).catch((function(){}))}var e,r;return e=t,(r=[{key:"promise",get:function(){return this._capability.promise}},{key:"cancel",value:function(){this._canceled=!0,this._reader&&(this._reader.cancel(new i.AbortException("TextLayer task cancelled.")).catch((function(){})),this._reader=null),this._capability.reject(new i.AbortException("TextLayer task cancelled."))}},{key:"_processItems",value:function(t,e){var r,n=s(t);try{for(n.s();!(r=n.n()).done;){var i=r.value;if(void 0!==i.str)this._textContentItemsStr.push(i.str),f(this,i,e);else if("beginMarkedContentProps"===i.type||"beginMarkedContent"===i.type){var a=this._container;this._container=document.createElement("span"),this._container.classList.add("markedContent"),null!==i.id&&this._container.setAttribute("id","".concat(i.id)),a.append(this._container)}else"endMarkedContent"===i.type&&(this._container=this._container.parentNode)}}catch(t){n.e(t)}finally{n.f()}}},{key:"_layoutText",value:function(t){var e=this._layoutTextParams.properties=this._textDivProperties.get(t);if(this._layoutTextParams.div=t,d(this._layoutTextParams),e.hasText&&this._container.append(t),e.hasEOL){var r=document.createElement("br");r.setAttribute("role","presentation"),this._container.append(r)}}},{key:"_render",value:function(){var t=this,e=(0,i.createPromiseCapability)(),r=Object.create(null);if(this._isReadableStream)this._reader=this._textContentSource.getReader(),function n(){t._reader.read().then((function(i){var a=i.value;i.done?e.resolve():(Object.assign(r,a.styles),t._processItems(a.items,r),n())}),e.reject)}();else{if(!this._textContentSource)throw new Error('No "textContentSource" parameter specified.');var n=this._textContentSource,a=n.items,o=n.styles;this._processItems(a,o),e.resolve()}e.promise.then((function(){r=null,function(t){if(!t._canceled){var e=t._textDivs,r=t._capability;if(e.length>1e5)r.resolve();else{if(!t._isReadableStream){var n,i=s(e);try{for(i.s();!(n=i.n()).done;){var a=n.value;t._layoutText(a)}}catch(t){i.e(t)}finally{i.f()}}r.resolve()}}}(t)}),this._capability.reject)}}])&&o(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.TextLayerRenderTask=p},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.AnnotationEditorLayer=void 0;var i=r(1),a=r(136),o=r(153),s=r(154),l=r(137);function u(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return c(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:m(this,C).getMode();y(this,R,N).call(this),t===i.AnnotationEditorType.INK?(this.addInkEditorIfNeeded(!1),this.disableClick()):this.enableClick(),m(this,C).unselectAll(),this.div.classList.toggle("freeTextEditing",t===i.AnnotationEditorType.FREETEXT),this.div.classList.toggle("inkEditing",t===i.AnnotationEditorType.INK)}},{key:"addInkEditorIfNeeded",value:function(t){if(t||m(this,C).getMode()===i.AnnotationEditorType.INK){if(!t){var e,r=u(m(this,E).values());try{for(r.s();!(e=r.n()).done;){var n=e.value;if(n.isEmpty())return void n.setInBackground()}}catch(t){r.e(t)}finally{r.f()}}y(this,M,D).call(this,{offsetX:0,offsetY:0}).setInBackground()}}},{key:"setEditingState",value:function(t){m(this,C).setEditingState(t)}},{key:"addCommands",value:function(t){m(this,C).addCommands(t)}},{key:"enable",value:function(){this.div.style.pointerEvents="auto";var t,e=u(m(this,E).values());try{for(e.s();!(t=e.n()).done;)t.value.enableEditing()}catch(t){e.e(t)}finally{e.f()}}},{key:"disable",value:function(){this.div.style.pointerEvents="none";var t,e=u(m(this,E).values());try{for(e.s();!(t=e.n()).done;)t.value.disableEditing()}catch(t){e.e(t)}finally{e.f()}}},{key:"setActiveEditor",value:function(t){m(this,C).getActive()!==t&&m(this,C).setActiveEditor(t)}},{key:"enableClick",value:function(){this.div.addEventListener("pointerdown",m(this,x)),this.div.addEventListener("pointerup",m(this,S))}},{key:"disableClick",value:function(){this.div.removeEventListener("pointerdown",m(this,x)),this.div.removeEventListener("pointerup",m(this,S))}},{key:"attach",value:function(t){m(this,E).set(t.id,t)}},{key:"detach",value:function(t){var e;m(this,E).delete(t.id),null===(e=m(this,A))||void 0===e||e.removePointerInTextLayer(t.contentDiv)}},{key:"remove",value:function(t){var e=this;m(this,C).removeEditor(t),this.detach(t),t.div.style.display="none",setTimeout((function(){t.div.style.display="",t.div.remove(),t.isAttachedToDOM=!1,document.activeElement===document.body&&m(e,C).focusMainContainer()}),0),m(this,T)||this.addInkEditorIfNeeded(!1)}},{key:"add",value:function(t){if(y(this,O,j).call(this,t),m(this,C).addEditor(t),this.attach(t),!t.isAttachedToDOM){var e=t.render();this.div.append(e),t.isAttachedToDOM=!0}this.moveEditorInDOM(t),t.onceAdded(),m(this,C).addToAnnotationStorage(t)}},{key:"moveEditorInDOM",value:function(t){var e;null===(e=m(this,A))||void 0===e||e.moveElementInDOM(this.div,t.div,t.contentDiv,!0)}},{key:"addOrRebuild",value:function(t){t.needsToBeRebuilt()?t.rebuild():this.add(t)}},{key:"addANewEditor",value:function(t){var e=this;this.addCommands({cmd:function(){e.addOrRebuild(t)},undo:function(){t.remove()},mustExec:!0})}},{key:"addUndoableEditor",value:function(t){var e=this;this.addCommands({cmd:function(){e.addOrRebuild(t)},undo:function(){t.remove()},mustExec:!1})}},{key:"getNextId",value:function(){return m(this,C).getId()}},{key:"deserialize",value:function(t){switch(t.annotationType){case i.AnnotationEditorType.FREETEXT:return o.FreeTextEditor.deserialize(t,this,m(this,C));case i.AnnotationEditorType.INK:return s.InkEditor.deserialize(t,this,m(this,C))}return null}},{key:"setSelected",value:function(t){m(this,C).setSelected(t)}},{key:"toggleSelected",value:function(t){m(this,C).toggleSelected(t)}},{key:"isSelected",value:function(t){return m(this,C).isSelected(t)}},{key:"unselect",value:function(t){m(this,C).unselect(t)}},{key:"pointerup",value:function(t){var e=i.FeatureTest.platform.isMac;0!==t.button||t.ctrlKey&&e||t.target===this.div&&m(this,P)&&(g(this,P,!1),m(this,k)?y(this,M,D).call(this,t):g(this,k,!0))}},{key:"pointerdown",value:function(t){var e=i.FeatureTest.platform.isMac;if(!(0!==t.button||t.ctrlKey&&e)&&t.target===this.div){g(this,P,!0);var r=m(this,C).getActive();g(this,k,!r||r.isEmpty())}}},{key:"drop",value:function(t){var e=t.dataTransfer.getData("text/plain"),r=m(this,C).getEditor(e);if(r){t.preventDefault(),t.dataTransfer.dropEffect="move",y(this,O,j).call(this,r);var n=this.div.getBoundingClientRect(),i=t.clientX-n.x,a=t.clientY-n.y;r.translate(i-r.startX,a-r.startY),this.moveEditorInDOM(r),r.div.focus()}}},{key:"dragover",value:function(t){t.preventDefault()}},{key:"destroy",value:function(){var t;(null===(t=m(this,C).getActive())||void 0===t?void 0:t.parent)===this&&m(this,C).setActiveEditor(null);var e,r=u(m(this,E).values());try{for(r.s();!(e=r.n()).done;){var n,i=e.value;null===(n=m(this,A))||void 0===n||n.removePointerInTextLayer(i.contentDiv),i.setParent(null),i.isAttachedToDOM=!1,i.div.remove()}}catch(t){r.e(t)}finally{r.f()}this.div=null,m(this,E).clear(),m(this,C).removeLayer(this)}},{key:"render",value:function(t){var e=t.viewport;this.viewport=e,(0,l.setLayerDimensions)(this.div,e),(0,a.bindEvents)(this,this.div,["dragover","drop"]);var r,n=u(m(this,C).getEditors(this.pageIndex));try{for(n.s();!(r=n.n()).done;){var i=r.value;this.add(i)}}catch(t){n.e(t)}finally{n.f()}this.updateMode()}},{key:"update",value:function(t){var e=t.viewport;m(this,C).commitOrRemove(),this.viewport=e,(0,l.setLayerDimensions)(this.div,{rotation:e.rotation}),this.updateMode()}},{key:"pageDimensions",get:function(){var t=this.viewport.rawDims;return[t.pageWidth,t.pageHeight]}}],r&&h(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();function j(t){var e;t.parent!==this&&(this.attach(t),null===(e=t.parent)||void 0===e||e.detach(t),t.setParent(this),t.div&&t.isAttachedToDOM&&(t.div.remove(),this.div.append(t.div)))}function L(t){switch(m(this,C).getMode()){case i.AnnotationEditorType.FREETEXT:return new o.FreeTextEditor(t);case i.AnnotationEditorType.INK:return new s.InkEditor(t)}return null}function D(t){var e=this.getNextId(),r=y(this,F,L).call(this,{parent:this,id:e,x:t.offsetX,y:t.offsetY,uiManager:m(this,C)});return r&&this.add(r),r}function N(){g(this,T,!0);var t,e=u(m(this,E).values());try{for(e.s();!(t=e.n()).done;){var r=t.value;r.isEmpty()&&r.remove()}}catch(t){e.e(t)}finally{e.f()}g(this,T,!1)}e.AnnotationEditorLayer=I,_=I,(w=d(w="_initialized"))in _?Object.defineProperty(_,w,{value:false,enumerable:!0,configurable:!0,writable:!0}):_[w]=false},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.FreeTextEditor=void 0;var i=r(1),a=r(136),o=r(135);function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=u(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||u(t,e)||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 u(t,e){if(t){if("string"==typeof t)return c(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.InkEditor=void 0,Object.defineProperty(e,"fitCurve",{enumerable:!0,get:function(){return o.fitCurve}});var i=r(1),a=r(135),o=r(155),s=r(136);function l(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=h(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function u(t){return function(t){if(Array.isArray(t))return f(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||h(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||h(t,e)||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 h(t,e){if(t){if("string"==typeof t)return f(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(t,e):void 0}}function f(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r.01&&(e=Math.ceil(t/P(this,M)),this.setDims(t,e));var i=c(this.parentDimensions,2),a=i[0],o=i[1];this.width=t/a,this.height=e/o,P(this,U)&&C(this,at,Tt).call(this,t,e),C(this,it,Pt).call(this),C(this,tt,kt).call(this),this.canvas.style.visibility="visible"}}},{key:"serialize",value:function(){if(this.isEmpty())return null;var t=this.getRect(0,0),e=this.rotation%180==0?t[3]-t[1]:t[2]-t[0],r=a.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);return{annotationType:i.AnnotationEditorType.INK,color:r,thickness:this.thickness,opacity:this.opacity,paths:C(this,st,Ft).call(this,this.scaleFactor/this.parentScale,this.translationX,this.translationY,e),pageIndex:this.pageIndex,rect:t,rotation:this.rotation}}}])&&v(e.prototype,r),o&&v(e,o),Object.defineProperty(e,"prototype",{writable:!1}),d}(a.AnnotationEditor);function vt(t){var e=this,r=this.thickness;this.addCommands({cmd:function(){e.thickness=t,C(e,ft,Lt).call(e)},undo:function(){e.thickness=r,C(e,ft,Lt).call(e)},mustExec:!0,type:i.AnnotationEditorParamsType.INK_THICKNESS,overwriteIfSameType:!0,keepUndo:!0})}function yt(t){var e=this,r=this.color;this.addCommands({cmd:function(){e.color=t,C(e,tt,kt).call(e)},undo:function(){e.color=r,C(e,tt,kt).call(e)},mustExec:!0,type:i.AnnotationEditorParamsType.INK_COLOR,overwriteIfSameType:!0,keepUndo:!0})}function mt(t){var e=this;t/=100;var r=this.opacity;this.addCommands({cmd:function(){e.opacity=t,C(e,tt,kt).call(e)},undo:function(){e.opacity=r,C(e,tt,kt).call(e)},mustExec:!0,type:i.AnnotationEditorParamsType.INK_OPACITY,overwriteIfSameType:!0,keepUndo:!0})}function gt(){var t=this.parentRotation,e=c(this.parentDimensions,2),r=e[0],n=e[1];switch(t){case 90:return[0,n,n,r];case 180:return[r,n,r,n];case 270:return[r,0,n,r];default:return[0,0,r,n]}}function bt(){var t=this.ctx,e=this.color,r=this.opacity,n=this.thickness,i=this.parentScale,a=this.scaleFactor;t.lineWidth=n*i/a,t.lineCap="round",t.lineJoin="round",t.miterLimit=10,t.strokeStyle="".concat(e).concat((0,s.opacityToHex)(r))}function _t(t,e){var r,n=this;this.isEditing=!0,P(this,W)||(E(this,W,!0),C(this,it,Pt).call(this),this.thickness||(this.thickness=pt._defaultThickness),this.color||(this.color=pt._defaultColor||a.AnnotationEditor._defaultLineColor),null!==(r=this.opacity)&&void 0!==r||(this.opacity=pt._defaultOpacity)),this.currentPath.push([t,e]),E(this,G,null),C(this,J,bt).call(this),this.ctx.beginPath(),this.ctx.moveTo(t,e),E(this,z,(function(){var t;P(n,z)&&(P(n,G)&&(n.isEmpty()?(n.ctx.setTransform(1,0,0,1,0,0),n.ctx.clearRect(0,0,n.canvas.width,n.canvas.height)):C(n,tt,kt).call(n),(t=n.ctx).lineTo.apply(t,u(P(n,G))),E(n,G,null),n.ctx.stroke()),window.requestAnimationFrame(P(n,z)))})),window.requestAnimationFrame(P(this,z))}function wt(t,e){var r=c(this.currentPath.at(-1),2),n=r[0],i=r[1];t===n&&e===i||(this.currentPath.push([t,e]),E(this,G,[t,e]))}function At(t,e){var r=this;this.ctx.closePath(),E(this,z,null),t=Math.min(Math.max(t,0),this.canvas.width),e=Math.min(Math.max(e,0),this.canvas.height);var n,i=c(this.currentPath.at(-1),2),a=i[0],s=i[1];if(t===a&&e===s||this.currentPath.push([t,e]),1!==this.currentPath.length)n=(0,o.fitCurve)(this.currentPath,30,null);else{var l=[t,e];n=[[l,l.slice(),l.slice(),l]]}var u=x(pt,pt,Ot).call(pt,n);this.currentPath.length=0,this.addCommands({cmd:function(){r.paths.push(n),r.bezierPath2D.push(u),r.rebuild()},undo:function(){r.paths.pop(),r.bezierPath2D.pop(),0===r.paths.length?r.remove():(r.canvas||(C(r,rt,xt).call(r),C(r,nt,Et).call(r)),C(r,ft,Lt).call(r))},mustExec:!0})}function kt(){if(this.isEmpty())C(this,ot,Ct).call(this);else{C(this,J,bt).call(this);var t=this.canvas,e=this.ctx;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,t.width,t.height),C(this,ot,Ct).call(this);var r,n=l(this.bezierPath2D);try{for(n.s();!(r=n.n()).done;){var i=r.value;e.stroke(i)}}catch(t){n.e(t)}finally{n.f()}}}function St(t){C(this,Z,At).call(this,t.offsetX,t.offsetY),this.canvas.removeEventListener("pointerleave",P(this,L)),this.canvas.removeEventListener("pointermove",P(this,j)),this.addToAnnotationStorage()}function xt(){var t=this;this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=0,this.canvas.className="inkEditorCanvas",pt._l10nPromise.get("editor_ink_canvas_aria_label").then((function(e){var r;return null===(r=t.canvas)||void 0===r?void 0:r.setAttribute("aria-label",e)})),this.div.append(this.canvas),this.ctx=this.canvas.getContext("2d")}function Et(){var t=this,e=null;E(this,B,new ResizeObserver((function(r){var n=r[0].contentRect;n.width&&n.height&&(null!==e&&clearTimeout(e),e=setTimeout((function(){t.fixDims(),e=null}),F),t.setDimensions(n.width,n.height))}))),P(this,B).observe(this.div)}function Pt(){if(P(this,W)){var t=c(this.parentDimensions,2),e=t[0],r=t[1];this.canvas.width=Math.ceil(this.width*e),this.canvas.height=Math.ceil(this.height*r),C(this,ot,Ct).call(this)}}function Tt(t,e){var r=C(this,ht,jt).call(this),n=(t-r)/P(this,I),i=(e-r)/P(this,R);this.scaleFactor=Math.min(n,i)}function Ct(){var t=C(this,ht,jt).call(this)/2;this.ctx.setTransform(this.scaleFactor,0,0,this.scaleFactor,this.translationX*this.scaleFactor+t,this.translationY*this.scaleFactor+t)}function Ot(t){for(var e=new Path2D,r=0,n=t.length;r0&&void 0!==arguments[0]&&arguments[0];if(!this.isEmpty())if(P(this,U)){var e=C(this,ct,It).call(this),r=C(this,ht,jt).call(this);E(this,I,Math.max(O,e[2]-e[0])),E(this,R,Math.max(O,e[3]-e[1]));var n=Math.ceil(r+P(this,I)*this.scaleFactor),i=Math.ceil(r+P(this,R)*this.scaleFactor),a=c(this.parentDimensions,2),o=a[0],s=a[1];this.width=n/o,this.height=i/s,E(this,M,n/i),C(this,dt,Dt).call(this);var l=this.translationX,u=this.translationY;this.translationX=-e[0],this.translationY=-e[1],C(this,it,Pt).call(this),C(this,tt,kt).call(this),E(this,q,n),E(this,H,i),this.setDims(n,i);var h=t?r/this.scaleFactor/2:0;this.translate(l-this.translationX-h,u-this.translationY-h)}else C(this,tt,kt).call(this)}function Dt(){var t=this.div.style;P(this,M)>=1?(t.minHeight="".concat(O,"px"),t.minWidth="".concat(Math.round(P(this,M)*O),"px")):(t.minWidth="".concat(O,"px"),t.minHeight="".concat(Math.round(O/P(this,M)),"px"))}e.InkEditor=pt,w(pt,"_defaultColor",null),w(pt,"_defaultOpacity",1),w(pt,"_defaultThickness",1),w(pt,"_l10nPromise",void 0),w(pt,"_type","ink")},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.fitCurve=void 0;var n=r(156);e.fitCurve=n},t=>{function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,r){for(var n=0;nt.length)&&(e=t.length);for(var r=0,n=new Array(e);r.9999&&x<1.0001)break}d=f,y=p}if(_=[],(m=v.subtract(t[p-1],t[p+1])).every((function(t){return 0===t}))){var E=[-(m=v.subtract(t[p-1],t[p]))[1],m[0]];m[0]=E[0],m[1]=E[1]}return g=v.normalize(m),b=v.mulItems(g,-1),(_=_.concat(l(t.slice(0,p+1),e,g,n,i))).concat(l(t.slice(p),b,r,n,i))}function u(t,e,r,n,i,o){var s,l,u;s=function(t,e,r,n){var i,a,o,s,l,u,c,h,f,d,p,m,g,b,_,w,A,k=t[0],S=t[t.length-1];for(i=[k,null,null,S],a=v.zeros_Xx2x2(e.length),g=0,b=e.length;gi&&(i=n,a=s);return[i,a]}(t,s,e),h=a(c,2);return l=h[0],u=h[1],o&&o({bez:s,points:t,params:e,maxErr:l,maxPoint:u}),[s,l,u]}function c(t,e,r){return r.map((function(r,n){return h(t,e[n],r)}))}function h(t,e,r){var n=v.subtract(y.q(t,r),e),i=y.qprime(t,r),a=v.mulMatrix(n,i),o=v.sum(v.squareItems(i))+2*v.mulMatrix(n,y.qprimeprime(t,r));return 0===o?r:r-a/o}var f=function(t,e){for(var r,n=[0],i=t[0],a=0,o=1;o<=e;o++)r=y.q(t,o/e),a+=v.vectorLen(v.subtract(r,i)),n.push(a),i=r;return n.map((function(t){return t/a}))};function d(t,e,r,n){if(e<0)return 0;if(e>1)return 1;for(var i,a,o,s,l=1;l<=n;l++)if(e<=r[l]){o=(l-1)/n,a=l/n,s=(e-(i=r[l-1]))/(r[l]-i)*(a-o)+o;break}return s}function p(t,e){return v.normalize(v.subtract(t,e))}var v=function(){function t(){r(this,t)}return i(t,null,[{key:"zeros_Xx2x2",value:function(t){for(var e=[];t--;)e.push([0,0]);return e}},{key:"mulItems",value:function(t,e){return t.map((function(t){return t*e}))}},{key:"mulMatrix",value:function(t,e){return t.reduce((function(t,r,n){return t+r*e[n]}),0)}},{key:"subtract",value:function(t,e){return t.map((function(t,r){return t-e[r]}))}},{key:"addArrays",value:function(t,e){return t.map((function(t,r){return t+e[r]}))}},{key:"addItems",value:function(t,e){return t.map((function(t){return t+e}))}},{key:"sum",value:function(t){return t.reduce((function(t,e){return t+e}))}},{key:"dot",value:function(e,r){return t.mulMatrix(e,r)}},{key:"vectorLen",value:function(t){return Math.hypot.apply(Math,function(t){if(Array.isArray(t))return s(t)}(e=t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());var e}},{key:"divItems",value:function(t,e){return t.map((function(t){return t/e}))}},{key:"squareItems",value:function(t){return t.map((function(t){return t*t}))}},{key:"normalize",value:function(t){return this.divItems(t,this.vectorLen(t))}}]),t}(),y=function(){function t(){r(this,t)}return i(t,null,[{key:"q",value:function(t,e){var r=1-e,n=v.mulItems(t[0],r*r*r),i=v.mulItems(t[1],3*r*r*e),a=v.mulItems(t[2],3*r*e*e),o=v.mulItems(t[3],e*e*e);return v.addArrays(v.addArrays(n,i),v.addArrays(a,o))}},{key:"qprime",value:function(t,e){var r=1-e,n=v.mulItems(v.subtract(t[1],t[0]),3*r*r),i=v.mulItems(v.subtract(t[2],t[1]),6*r*e),a=v.mulItems(v.subtract(t[3],t[2]),3*e*e);return v.addArrays(v.addArrays(n,i),a)}},{key:"qprimeprime",value:function(t,e){return v.addArrays(v.mulItems(v.addArrays(v.subtract(t[2],v.mulItems(t[1],2)),t[0]),6*(1-e)),v.mulItems(v.addArrays(v.subtract(t[3],v.mulItems(t[2],2)),t[1]),6*e))}}]),t}();t.exports=function(t,e,r){if(!Array.isArray(t))throw new TypeError("First argument should be an array");if(t.forEach((function(e){if(!Array.isArray(e)||e.some((function(t){return"number"!=typeof t}))||e.length!==t[0].length)throw Error("Each point should be an array of numbers. Each point should have the same amount of numbers.")})),(t=t.filter((function(e,r){return 0===r||!e.every((function(e,n){return e===t[r-1][n]}))}))).length<2)return[];var n=t.length,i=p(t[1],t[0]),a=p(t[n-2],t[n-1]);return l(t,i,a,e,r)},t.exports.fitCubic=l,t.exports.createTangent=p},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AnnotationLayer=void 0;var n=r(1),i=r(137),a=r(134),o=r(158),s=r(159);function l(t,e,r){return function(t,e){if(t!==e)throw new TypeError("Private static access of wrong provenance")}(t,e),r}function u(){return u="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=v(t)););return t}(t,e);if(n){var i=Object.getOwnPropertyDescriptor(n,e);return i.get?i.get.call(arguments.length<3?t:r):i.value}},u.apply(this,arguments)}function c(t){return function(t){if(Array.isArray(t))return w(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||_(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&f(t,e)}function f(t,e){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},f(t,e)}function d(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=v(t);if(e){var i=v(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return function(t,e){if(e&&("object"===A(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return p(t)}(this,r)}}function p(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function v(t){return v=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},v(t)}function y(t,e){!function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}(t,e),e.add(t)}function m(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function g(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=_(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function b(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||_(t,e)||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 _(t,e){if(t){if("string"==typeof t)return w(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?w(t,e):void 0}}function w(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:{},n=r.isRenderable,i=void 0!==n&&n,a=r.ignoreBorder,o=void 0!==a&&a,s=r.createQuadrilaterals,l=void 0!==s&&s;k(this,t),this.isRenderable=i,this.data=e.data,this.layer=e.layer,this.page=e.page,this.viewport=e.viewport,this.linkService=e.linkService,this.downloadManager=e.downloadManager,this.imageResourcesPath=e.imageResourcesPath,this.renderForms=e.renderForms,this.svgFactory=e.svgFactory,this.annotationStorage=e.annotationStorage,this.enableScripting=e.enableScripting,this.hasJSActions=e.hasJSActions,this._fieldObjects=e.fieldObjects,i&&(this.container=this._createContainer(o)),l&&(this.quadrilaterals=this._createQuadrilaterals(o))}return x(t,[{key:"_createContainer",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.data,r=this.page,i=this.viewport,a=document.createElement("section");a.setAttribute("data-annotation-id",e.id);var o=i.rawDims,s=o.pageWidth,l=o.pageHeight,u=o.pageX,c=o.pageY,h=C(e.rect),f=h.width,d=h.height,p=n.Util.normalizeRect([e.rect[0],r.view[3]-e.rect[1]+r.view[1],e.rect[2],r.view[3]-e.rect[3]+r.view[1]]);if(!t&&e.borderStyle.width>0){a.style.borderWidth="".concat(e.borderStyle.width,"px");var v=e.borderStyle.horizontalCornerRadius,y=e.borderStyle.verticalCornerRadius;if(v>0||y>0){var m="calc(".concat(v,"px * var(--scale-factor)) / calc(").concat(y,"px * var(--scale-factor))");a.style.borderRadius=m}else if(this instanceof H){var g="calc(".concat(f,"px * var(--scale-factor)) / calc(").concat(d,"px * var(--scale-factor))");a.style.borderRadius=g}switch(e.borderStyle.style){case n.AnnotationBorderStyleType.SOLID:a.style.borderStyle="solid";break;case n.AnnotationBorderStyleType.DASHED:a.style.borderStyle="dashed";break;case n.AnnotationBorderStyleType.BEVELED:(0,n.warn)("Unimplemented border style: beveled");break;case n.AnnotationBorderStyleType.INSET:(0,n.warn)("Unimplemented border style: inset");break;case n.AnnotationBorderStyleType.UNDERLINE:a.style.borderBottomStyle="solid"}var b=e.borderColor||null;b?a.style.borderColor=n.Util.makeHexColor(0|b[0],0|b[1],0|b[2]):a.style.borderWidth=0}a.style.left="".concat(100*(p[0]-u)/s,"%"),a.style.top="".concat(100*(p[1]-c)/l,"%");var _=e.rotation;return e.hasOwnCanvas||0===_?(a.style.width="".concat(100*f/s,"%"),a.style.height="".concat(100*d/l,"%")):this.setRotation(_,a),a}},{key:"setRotation",value:function(t){var e,r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.container,i=this.viewport.rawDims,a=i.pageWidth,o=i.pageHeight,s=C(this.data.rect),l=s.width,u=s.height;t%180==0?(e=100*l/a,r=100*u/o):(e=100*u/a,r=100*l/o),n.style.width="".concat(e,"%"),n.style.height="".concat(r,"%"),n.setAttribute("data-main-rotation",(360-t)%360)}},{key:"_commonActions",get:function(){var t=this,e=function(t,e,r){var n=r.detail[t];r.target.style[e]=o.ColorConverters["".concat(n[0],"_HTML")](n.slice(1))};return(0,n.shadow)(this,"_commonActions",{display:function(e){var r=e.detail.display%2==1;t.container.style.visibility=r?"hidden":"visible",t.annotationStorage.setValue(t.data.id,{hidden:r,print:0===e.detail.display||3===e.detail.display})},print:function(e){t.annotationStorage.setValue(t.data.id,{print:e.detail.print})},hidden:function(e){t.container.style.visibility=e.detail.hidden?"hidden":"visible",t.annotationStorage.setValue(t.data.id,{hidden:e.detail.hidden})},focus:function(t){setTimeout((function(){return t.target.focus({preventScroll:!1})}),0)},userName:function(t){t.target.title=t.detail.userName},readonly:function(t){t.detail.readonly?t.target.setAttribute("readonly",""):t.target.removeAttribute("readonly")},required:function(e){t._setRequired(e.target,e.detail.required)},bgColor:function(t){e("bgColor","backgroundColor",t)},fillColor:function(t){e("fillColor","backgroundColor",t)},fgColor:function(t){e("fgColor","color",t)},textColor:function(t){e("textColor","color",t)},borderColor:function(t){e("borderColor","borderColor",t)},strokeColor:function(t){e("strokeColor","borderColor",t)},rotation:function(e){var r=e.detail.rotation;t.setRotation(r),t.annotationStorage.setValue(t.data.id,{rotation:r})}})}},{key:"_dispatchEventFromSandbox",value:function(t,e){for(var r=this._commonActions,n=0,i=Object.keys(e.detail);n0&&void 0!==arguments[0]&&arguments[0];if(!this.data.quadPoints)return null;var e,r=[],n=this.data.rect,i=g(this.data.quadPoints);try{for(i.s();!(e=i.n()).done;){var a=e.value;this.data.rect=[a[2].x,a[2].y,a[1].x,a[1].y],r.push(this._createContainer(t))}}catch(t){i.e(t)}finally{i.f()}return this.data.rect=n,r}},{key:"_createPopup",value:function(t,e){var r=this.container;this.quadrilaterals&&(t=t||this.quadrilaterals,r=this.quadrilaterals[0]),t||((t=document.createElement("div")).className="popupTriggerArea",r.append(t));var n=new Y({container:r,trigger:t,color:e.color,titleObj:e.titleObj,modificationDate:e.modificationDate,contentsObj:e.contentsObj,richText:e.richText,hideWrapper:!0}).render();n.style.left="100%",r.append(n)}},{key:"_renderQuadrilaterals",value:function(t){var e,r=g(this.quadrilaterals);try{for(r.s();!(e=r.n()).done;)e.value.className=t}catch(t){r.e(t)}finally{r.f()}return this.quadrilaterals}},{key:"render",value:function(){(0,n.unreachable)("Abstract method \`AnnotationElement.render\` called")}},{key:"_getElementsByName",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=[];if(this._fieldObjects){var i=this._fieldObjects[t];if(i){var a,o=g(i);try{for(o.s();!(a=o.n()).done;){var s=a.value,l=s.page,u=s.id,c=s.exportValues;if(-1!==l&&u!==e){var h="string"==typeof c?c:null,f=document.querySelector('[data-element-id="'.concat(u,'"]'));!f||T.has(f)?r.push({id:u,exportValue:h,domElement:f}):(0,n.warn)("_getElementsByName - element not allowed: ".concat(u))}}}catch(t){o.e(t)}finally{o.f()}}return r}var d,p=g(document.getElementsByName(t));try{for(p.s();!(d=p.n()).done;){var v=d.value,y=v.exportValue,m=v.getAttribute("data-element-id");m!==e&&T.has(v)&&r.push({id:m,exportValue:y,domElement:v})}}catch(t){p.e(t)}finally{p.f()}return r}}]),t}(),M=new WeakSet,R=new WeakSet,I=function(t){h(r,t);var e=d(r);function r(t){var n,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return k(this,r),y(p(n=e.call(this,t,{isRenderable:!0,ignoreBorder:!(null==i||!i.ignoreBorder),createQuadrilaterals:!0})),R),y(p(n),M),n.isTooltipOnly=t.data.isTooltipOnly,n}return x(r,[{key:"render",value:function(){var t=this.data,e=this.linkService,r=document.createElement("a");r.setAttribute("data-element-id",t.id);var n=!1;return t.url?(e.addLinkAttributes(r,t.url,t.newWindow),n=!0):t.action?(this._bindNamedAction(r,t.action),n=!0):t.attachment?(this._bindAttachment(r,t.attachment),n=!0):t.setOCGState?(m(this,R,L).call(this,r,t.setOCGState),n=!0):t.dest?(this._bindLink(r,t.dest),n=!0):(t.actions&&(t.actions.Action||t.actions["Mouse Up"]||t.actions["Mouse Down"])&&this.enableScripting&&this.hasJSActions&&(this._bindJSAction(r,t),n=!0),t.resetForm?(this._bindResetFormAction(r,t.resetForm),n=!0):this.isTooltipOnly&&!n&&(this._bindLink(r,""),n=!0)),this.quadrilaterals?this._renderQuadrilaterals("linkAnnotation").map((function(t,e){var n=0===e?r:r.cloneNode();return t.append(n),t})):(this.container.className="linkAnnotation",n&&this.container.append(r),this.container)}},{key:"_bindLink",value:function(t,e){var r=this;t.href=this.linkService.getDestinationHash(e),t.onclick=function(){return e&&r.linkService.goToDestination(e),!1},(e||""===e)&&m(this,M,j).call(this)}},{key:"_bindNamedAction",value:function(t,e){var r=this;t.href=this.linkService.getAnchorUrl(""),t.onclick=function(){return r.linkService.executeNamedAction(e),!1},m(this,M,j).call(this)}},{key:"_bindAttachment",value:function(t,e){var r=this;t.href=this.linkService.getAnchorUrl(""),t.onclick=function(){var t;return null===(t=r.downloadManager)||void 0===t||t.openOrDownloadData(r.container,e.content,e.filename),!1},m(this,M,j).call(this)}},{key:"_bindJSAction",value:function(t,e){var r=this;t.href=this.linkService.getAnchorUrl("");for(var n=new Map([["Action","onclick"],["Mouse Up","onmouseup"],["Mouse Down","onmousedown"]]),i=function(){var i=o[a],s=n.get(i);if(!s)return"continue";t[s]=function(){var t;return null===(t=r.linkService.eventBus)||void 0===t||t.dispatch("dispatcheventinsandbox",{source:r,detail:{id:e.id,name:i}}),!1}},a=0,o=Object.keys(e.actions);ao&&(a=a.slice(0,o));var s={userValue:a,formattedValue:null,lastCommittedValue:null,commitKey:1};this.data.multiLine?((n=document.createElement("textarea")).textContent=a,this.data.doNotScroll&&(n.style.overflowY="hidden")):((n=document.createElement("input")).type="text",n.setAttribute("value",a),this.data.doNotScroll&&(n.style.overflowX="hidden")),T.add(n),n.setAttribute("data-element-id",r),n.disabled=this.data.readOnly,n.name=this.data.fieldName,n.tabIndex=P,this._setRequired(n,this.data.required),o&&(n.maxLength=o),n.addEventListener("input",(function(i){e.setValue(r,{value:i.target.value}),t.setPropertyOnSiblings(n,"value",i.target.value,"value")})),n.addEventListener("resetform",(function(e){var r,i=null!==(r=t.data.defaultFieldValue)&&void 0!==r?r:"";n.value=s.userValue=i,s.formattedValue=null}));var l=function(t){var e=s.formattedValue;null!=e&&(t.target.value=e),t.target.scrollLeft=0};if(this.enableScripting&&this.hasJSActions){var u;n.addEventListener("focus",(function(t){var e=t.target;s.userValue&&(e.value=s.userValue),s.lastCommittedValue=e.value,s.commitKey=1})),n.addEventListener("updatefromsandbox",(function(n){var i={value:function(t){var n;s.userValue=null!==(n=t.detail.value)&&void 0!==n?n:"",e.setValue(r,{value:s.userValue.toString()}),t.target.value=s.userValue},formattedValue:function(t){var n=t.detail.formattedValue;s.formattedValue=n,null!=n&&t.target!==document.activeElement&&(t.target.value=n),e.setValue(r,{formattedValue:n})},selRange:function(t){var e;(e=t.target).setSelectionRange.apply(e,c(t.detail.selRange))},charLimit:function(n){var i,a=n.detail.charLimit,o=n.target;if(0!==a){o.setAttribute("maxLength",a);var l=s.userValue;!l||l.length<=a||(l=l.slice(0,a),o.value=s.userValue=l,e.setValue(r,{value:l}),null===(i=t.linkService.eventBus)||void 0===i||i.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:l,willCommit:!0,commitKey:1,selStart:o.selectionStart,selEnd:o.selectionEnd}}))}else o.removeAttribute("maxLength")}};t._dispatchEventFromSandbox(i,n)})),n.addEventListener("keydown",(function(e){var n;s.commitKey=1;var i=-1;if("Escape"===e.key?i=0:"Enter"!==e.key||t.data.multiLine?"Tab"===e.key&&(s.commitKey=3):i=2,-1!==i){var a=e.target.value;s.lastCommittedValue!==a&&(s.lastCommittedValue=a,s.userValue=a,null===(n=t.linkService.eventBus)||void 0===n||n.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:a,willCommit:!0,commitKey:i,selStart:e.target.selectionStart,selEnd:e.target.selectionEnd}}))}}));var h=l;l=null,n.addEventListener("blur",(function(e){if(e.relatedTarget){var n,i=e.target.value;s.userValue=i,s.lastCommittedValue!==i&&(null===(n=t.linkService.eventBus)||void 0===n||n.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:i,willCommit:!0,commitKey:s.commitKey,selStart:e.target.selectionStart,selEnd:e.target.selectionEnd}})),h(e)}})),null!==(u=this.data.actions)&&void 0!==u&&u.Keystroke&&n.addEventListener("beforeinput",(function(e){var n;s.lastCommittedValue=null;var i=e.data,a=e.target,o=a.value,l=a.selectionStart,u=a.selectionEnd,c=l,h=u;switch(e.inputType){case"deleteWordBackward":var f=o.substring(0,l).match(/\\w*[^\\w]*$/);f&&(c-=f[0].length);break;case"deleteWordForward":var d=o.substring(l).match(/^[^\\w]*\\w*/);d&&(h+=d[0].length);break;case"deleteContentBackward":l===u&&(c-=1);break;case"deleteContentForward":l===u&&(h+=1)}e.preventDefault(),null===(n=t.linkService.eventBus)||void 0===n||n.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:o,change:i||"",willCommit:!1,selStart:c,selEnd:h}})})),this._setEventListeners(n,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(function(t){return t.target.value}))}if(l&&n.addEventListener("blur",l),this.data.comb){var f=(this.data.rect[2]-this.data.rect[0])/o;n.classList.add("comb"),n.style.letterSpacing="calc(".concat(f,"px * var(--scale-factor) - 1ch)")}}else(n=document.createElement("div")).textContent=this.data.fieldValue,n.style.verticalAlign="middle",n.style.display="table-cell";return this._setTextStyle(n),this._setBackgroundColor(n),this._setDefaultPropertiesFromJS(n),this.container.append(n),this.container}}]),r}(G),q=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{isRenderable:t.renderForms})}return x(r,[{key:"render",value:function(){var t=this,e=this.annotationStorage,r=this.data,n=r.id,i=e.getValue(n,{value:r.exportValue===r.fieldValue}).value;"string"==typeof i&&(i="Off"!==i,e.setValue(n,{value:i})),this.container.className="buttonWidgetAnnotation checkBox";var a=document.createElement("input");return T.add(a),a.setAttribute("data-element-id",n),a.disabled=r.readOnly,this._setRequired(a,this.data.required),a.type="checkbox",a.name=r.fieldName,i&&a.setAttribute("checked",!0),a.setAttribute("exportValue",r.exportValue),a.tabIndex=P,a.addEventListener("change",(function(i){var a,o=i.target,s=o.name,l=o.checked,u=g(t._getElementsByName(s,n));try{for(u.s();!(a=u.n()).done;){var c=a.value,h=l&&c.exportValue===r.exportValue;c.domElement&&(c.domElement.checked=h),e.setValue(c.id,{value:h})}}catch(t){u.e(t)}finally{u.f()}e.setValue(n,{value:l})})),a.addEventListener("resetform",(function(t){var e=r.defaultFieldValue||"Off";t.target.checked=e===r.exportValue})),this.enableScripting&&this.hasJSActions&&(a.addEventListener("updatefromsandbox",(function(r){var i={value:function(t){t.target.checked="Off"!==t.detail.value,e.setValue(n,{value:t.target.checked})}};t._dispatchEventFromSandbox(i,r)})),this._setEventListeners(a,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(function(t){return t.target.checked}))),this._setBackgroundColor(a),this._setDefaultPropertiesFromJS(a),this.container.append(a),this.container}}]),r}(G),H=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{isRenderable:t.renderForms})}return x(r,[{key:"render",value:function(){var t=this;this.container.className="buttonWidgetAnnotation radioButton";var e=this.annotationStorage,r=this.data,n=r.id,i=e.getValue(n,{value:r.fieldValue===r.buttonValue}).value;"string"==typeof i&&(i=i!==r.buttonValue,e.setValue(n,{value:i}));var a=document.createElement("input");if(T.add(a),a.setAttribute("data-element-id",n),a.disabled=r.readOnly,this._setRequired(a,this.data.required),a.type="radio",a.name=r.fieldName,i&&a.setAttribute("checked",!0),a.tabIndex=P,a.addEventListener("change",(function(r){var i,a=r.target,o=a.name,s=a.checked,l=g(t._getElementsByName(o,n));try{for(l.s();!(i=l.n()).done;){var u=i.value;e.setValue(u.id,{value:!1})}}catch(t){l.e(t)}finally{l.f()}e.setValue(n,{value:s})})),a.addEventListener("resetform",(function(t){var e=r.defaultFieldValue;t.target.checked=null!=e&&e===r.buttonValue})),this.enableScripting&&this.hasJSActions){var o=r.buttonValue;a.addEventListener("updatefromsandbox",(function(r){var i={value:function(r){var i,a=o===r.detail.value,s=g(t._getElementsByName(r.target.name));try{for(s.s();!(i=s.n()).done;){var l=i.value,u=a&&l.id===n;l.domElement&&(l.domElement.checked=u),e.setValue(l.id,{value:u})}}catch(t){s.e(t)}finally{s.f()}}};t._dispatchEventFromSandbox(i,r)})),this._setEventListeners(a,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(function(t){return t.target.checked}))}return this._setBackgroundColor(a),this._setDefaultPropertiesFromJS(a),this.container.append(a),this.container}}]),r}(G),z=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{ignoreBorder:t.data.hasAppearance})}return x(r,[{key:"render",value:function(){var t=this,e=u(v(r.prototype),"render",this).call(this);e.className="buttonWidgetAnnotation pushButton",this.data.alternativeText&&(e.title=this.data.alternativeText);var n=e.lastChild;return this.enableScripting&&this.hasJSActions&&n&&(this._setDefaultPropertiesFromJS(n),n.addEventListener("updatefromsandbox",(function(e){t._dispatchEventFromSandbox({},e)}))),e}}]),r}(I),V=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{isRenderable:t.renderForms})}return x(r,[{key:"render",value:function(){var t=this;this.container.className="choiceWidgetAnnotation";var e=this.annotationStorage,r=this.data.id,n=e.getValue(r,{value:this.data.fieldValue}),i=document.createElement("select");T.add(i),i.setAttribute("data-element-id",r),i.disabled=this.data.readOnly,this._setRequired(i,this.data.required),i.name=this.data.fieldName,i.tabIndex=P;var a=this.data.combo&&this.data.options.length>0;this.data.combo||(i.size=this.data.options.length,this.data.multiSelect&&(i.multiple=!0)),i.addEventListener("resetform",(function(e){var r,n=t.data.defaultFieldValue,a=g(i.options);try{for(a.s();!(r=a.n()).done;){var o=r.value;o.selected=o.value===n}}catch(t){a.e(t)}finally{a.f()}}));var o,s=g(this.data.options);try{for(s.s();!(o=s.n()).done;){var l=o.value,u=document.createElement("option");u.textContent=l.displayValue,u.value=l.exportValue,n.value.includes(l.exportValue)&&(u.setAttribute("selected",!0),a=!1),i.append(u)}}catch(t){s.e(t)}finally{s.f()}var c=null;if(a){var h=document.createElement("option");h.value=" ",h.setAttribute("hidden",!0),h.setAttribute("selected",!0),i.prepend(h),c=function(){h.remove(),i.removeEventListener("input",c),c=null},i.addEventListener("input",c)}var f=function(t){var e=t?"value":"textContent",r=i.options;return i.multiple?Array.prototype.filter.call(r,(function(t){return t.selected})).map((function(t){return t[e]})):-1===r.selectedIndex?null:r[r.selectedIndex][e]},d=f(!1),p=function(t){var e=t.target.options;return Array.prototype.map.call(e,(function(t){return{displayValue:t.textContent,exportValue:t.value}}))};return this.enableScripting&&this.hasJSActions?(i.addEventListener("updatefromsandbox",(function(n){var a={value:function(t){var n;null===(n=c)||void 0===n||n();var a,o=t.detail.value,s=new Set(Array.isArray(o)?o:[o]),l=g(i.options);try{for(l.s();!(a=l.n()).done;){var u=a.value;u.selected=s.has(u.value)}}catch(t){l.e(t)}finally{l.f()}e.setValue(r,{value:f(!0)}),d=f(!1)},multipleSelection:function(t){i.multiple=!0},remove:function(t){var n=i.options,a=t.detail.remove;if(n[a].selected=!1,i.remove(a),n.length>0){var o=Array.prototype.findIndex.call(n,(function(t){return t.selected}));-1===o&&(n[0].selected=!0)}e.setValue(r,{value:f(!0),items:p(t)}),d=f(!1)},clear:function(t){for(;0!==i.length;)i.remove(0);e.setValue(r,{value:null,items:[]}),d=f(!1)},insert:function(t){var n=t.detail.insert,a=n.index,o=n.displayValue,s=n.exportValue,l=i.children[a],u=document.createElement("option");u.textContent=o,u.value=s,l?l.before(u):i.append(u),e.setValue(r,{value:f(!0),items:p(t)}),d=f(!1)},items:function(t){for(var n=t.detail.items;0!==i.length;)i.remove(0);var a,o=g(n);try{for(o.s();!(a=o.n()).done;){var s=a.value,l=s.displayValue,u=s.exportValue,c=document.createElement("option");c.textContent=l,c.value=u,i.append(c)}}catch(t){o.e(t)}finally{o.f()}i.options.length>0&&(i.options[0].selected=!0),e.setValue(r,{value:f(!0),items:p(t)}),d=f(!1)},indices:function(t){var n,i=new Set(t.detail.indices),a=g(t.target.options);try{for(a.s();!(n=a.n()).done;){var o=n.value;o.selected=i.has(o.index)}}catch(t){a.e(t)}finally{a.f()}e.setValue(r,{value:f(!0)}),d=f(!1)},editable:function(t){t.target.disabled=!t.detail.editable}};t._dispatchEventFromSandbox(a,n)})),i.addEventListener("input",(function(n){var i,a=f(!0);e.setValue(r,{value:a}),n.preventDefault(),null===(i=t.linkService.eventBus)||void 0===i||i.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:d,changeEx:a,willCommit:!1,commitKey:1,keyDown:!1}})})),this._setEventListeners(i,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"],["input","Action"]],(function(t){return t.target.checked}))):i.addEventListener("input",(function(t){e.setValue(r,{value:f(!0)})})),this.data.combo&&this._setTextStyle(i),this._setBackgroundColor(i),this._setDefaultPropertiesFromJS(i),this.container.append(i),this.container}}]),r}(G),X=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=t.data,s=!r.IGNORE_TYPES.has(o.parentType)&&!!(null!==(n=o.titleObj)&&void 0!==n&&n.str||null!==(i=o.contentsObj)&&void 0!==i&&i.str||null!==(a=o.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:s})}return x(r,[{key:"render",value:function(){this.container.className="popupAnnotation";var t=this.layer.querySelectorAll('[data-annotation-id="'.concat(this.data.parentId,'"]'));if(0===t.length)return this.container;var e=new Y({container:this.container,trigger:Array.from(t),color:this.data.color,titleObj:this.data.titleObj,modificationDate:this.data.modificationDate,contentsObj:this.data.contentsObj,richText:this.data.richText}),r=this.page,i=n.Util.normalizeRect([this.data.parentRect[0],r.view[3]-this.data.parentRect[1]+r.view[1],this.data.parentRect[2],r.view[3]-this.data.parentRect[3]+r.view[1]]),a=i[0]+this.data.parentRect[2]-this.data.parentRect[0],o=i[1],s=this.viewport.rawDims,l=s.pageWidth,u=s.pageHeight,c=s.pageX,h=s.pageY;return this.container.style.left="".concat(100*(a-c)/l,"%"),this.container.style.top="".concat(100*(o-h)/u,"%"),this.container.append(e.render()),this.container}}]),r}(F);D=X,N="IGNORE_TYPES",U=new Set(["Line","Square","Circle","PolyLine","Polygon","Ink"]),(N=E(N))in D?Object.defineProperty(D,N,{value:U,enumerable:!0,configurable:!0,writable:!0}):D[N]=U;var Y=function(){function t(e){k(this,t),this.container=e.container,this.trigger=e.trigger,this.color=e.color,this.titleObj=e.titleObj,this.modificationDate=e.modificationDate,this.contentsObj=e.contentsObj,this.richText=e.richText,this.hideWrapper=e.hideWrapper||!1,this.pinned=!1}return x(t,[{key:"render",value:function(){var t,e,r=document.createElement("div");r.className="popupWrapper",this.hideElement=this.hideWrapper?r:this.container,this.hideElement.hidden=!0;var a=document.createElement("div");a.className="popup";var o=this.color;if(o){var l=.7*(255-o[0])+o[0],u=.7*(255-o[1])+o[1],c=.7*(255-o[2])+o[2];a.style.backgroundColor=n.Util.makeHexColor(0|l,0|u,0|c)}var h=document.createElement("h1");h.dir=this.titleObj.dir,h.textContent=this.titleObj.str,a.append(h);var f=i.PDFDateString.toDateObject(this.modificationDate);if(f){var d=document.createElement("span");d.className="popupDate",d.textContent="{{date}}, {{time}}",d.dataset.l10nId="annotation_date_string",d.dataset.l10nArgs=JSON.stringify({date:f.toLocaleDateString(),time:f.toLocaleTimeString()}),a.append(d)}if(null===(t=this.richText)||void 0===t||!t.str||null!==(e=this.contentsObj)&&void 0!==e&&e.str&&this.contentsObj.str!==this.richText.str){var p=this._formatContents(this.contentsObj);a.append(p)}else s.XfaLayer.render({xfaHtml:this.richText.html,intent:"richText",div:a}),a.lastChild.className="richText popupContent";Array.isArray(this.trigger)||(this.trigger=[this.trigger]);var v,y=g(this.trigger);try{for(y.s();!(v=y.n()).done;){var m=v.value;m.addEventListener("click",this._toggle.bind(this)),m.addEventListener("mouseover",this._show.bind(this,!1)),m.addEventListener("mouseout",this._hide.bind(this,!1))}}catch(t){y.e(t)}finally{y.f()}return a.addEventListener("click",this._hide.bind(this,!0)),r.append(a),r}},{key:"_formatContents",value:function(t){var e=t.str,r=t.dir,n=document.createElement("p");n.className="popupContent",n.dir=r;for(var i=e.split(/(?:\\r\\n?|\\n)/),a=0,o=i.length;a0&&void 0!==arguments[0]&&arguments[0]&&(this.pinned=!0),this.hideElement.hidden&&(this.hideElement.hidden=!1,this.container.style.zIndex=parseInt(this.container.style.zIndex)+1e3)}},{key:"_hide",value:function(){(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.pinned=!1),this.hideElement.hidden||this.pinned||(this.hideElement.hidden=!0,this.container.style.zIndex=parseInt(this.container.style.zIndex)-1e3)}}]),t}(),K=function(t){h(r,t);var e=d(r);function r(t){var n,i,a,o;k(this,r);var s=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return(o=e.call(this,t,{isRenderable:s,ignoreBorder:!0})).textContent=t.data.textContent,o}return x(r,[{key:"render",value:function(){if(this.container.className="freeTextAnnotation",this.textContent){var t=document.createElement("div");t.className="annotationTextContent",t.setAttribute("role","comment");var e,r=g(this.textContent);try{for(r.s();!(e=r.n()).done;){var n=e.value,i=document.createElement("span");i.textContent=n,t.append(i)}}catch(t){r.e(t)}finally{r.f()}this.container.append(t)}return this.data.hasPopup||this._createPopup(null,this.data),this.container}}]),r}(F),J=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){this.container.className="lineAnnotation";var t=this.data,e=C(t.rect),r=e.width,n=e.height,i=this.svgFactory.create(r,n,!0),a=this.svgFactory.createElement("svg:line");return a.setAttribute("x1",t.rect[2]-t.lineCoordinates[0]),a.setAttribute("y1",t.rect[3]-t.lineCoordinates[1]),a.setAttribute("x2",t.rect[2]-t.lineCoordinates[2]),a.setAttribute("y2",t.rect[3]-t.lineCoordinates[3]),a.setAttribute("stroke-width",t.borderStyle.width||1),a.setAttribute("stroke","transparent"),a.setAttribute("fill","transparent"),i.append(a),this.container.append(i),this._createPopup(a,t),this.container}}]),r}(F),Q=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){this.container.className="squareAnnotation";var t=this.data,e=C(t.rect),r=e.width,n=e.height,i=this.svgFactory.create(r,n,!0),a=t.borderStyle.width,o=this.svgFactory.createElement("svg:rect");return o.setAttribute("x",a/2),o.setAttribute("y",a/2),o.setAttribute("width",r-a),o.setAttribute("height",n-a),o.setAttribute("stroke-width",a||1),o.setAttribute("stroke","transparent"),o.setAttribute("fill","transparent"),i.append(o),this.container.append(i),this._createPopup(o,t),this.container}}]),r}(F),$=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){this.container.className="circleAnnotation";var t=this.data,e=C(t.rect),r=e.width,n=e.height,i=this.svgFactory.create(r,n,!0),a=t.borderStyle.width,o=this.svgFactory.createElement("svg:ellipse");return o.setAttribute("cx",r/2),o.setAttribute("cy",n/2),o.setAttribute("rx",r/2-a/2),o.setAttribute("ry",n/2-a/2),o.setAttribute("stroke-width",a||1),o.setAttribute("stroke","transparent"),o.setAttribute("fill","transparent"),i.append(o),this.container.append(i),this._createPopup(o,t),this.container}}]),r}(F),Z=function(t){h(r,t);var e=d(r);function r(t){var n,i,a,o;k(this,r);var s=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return(o=e.call(this,t,{isRenderable:s,ignoreBorder:!0})).containerClassName="polylineAnnotation",o.svgElementName="svg:polyline",o}return x(r,[{key:"render",value:function(){this.container.className=this.containerClassName;var t,e=this.data,r=C(e.rect),n=r.width,i=r.height,a=this.svgFactory.create(n,i,!0),o=[],s=g(e.vertices);try{for(s.s();!(t=s.n()).done;){var l=t.value,u=l.x-e.rect[0],c=e.rect[3]-l.y;o.push(u+","+c)}}catch(t){s.e(t)}finally{s.f()}o=o.join(" ");var h=this.svgFactory.createElement(this.svgElementName);return h.setAttribute("points",o),h.setAttribute("stroke-width",e.borderStyle.width||1),h.setAttribute("stroke","transparent"),h.setAttribute("fill","transparent"),a.append(h),this.container.append(a),this._createPopup(h,e),this.container}}]),r}(F),tt=function(t){h(r,t);var e=d(r);function r(t){var n;return k(this,r),(n=e.call(this,t)).containerClassName="polygonAnnotation",n.svgElementName="svg:polygon",n}return x(r)}(Z),et=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){return this.container.className="caretAnnotation",this.data.hasPopup||this._createPopup(null,this.data),this.container}}]),r}(F),rt=function(t){h(r,t);var e=d(r);function r(t){var n,i,a,o;k(this,r);var s=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return(o=e.call(this,t,{isRenderable:s,ignoreBorder:!0})).containerClassName="inkAnnotation",o.svgElementName="svg:polyline",o}return x(r,[{key:"render",value:function(){this.container.className=this.containerClassName;var t,e=this.data,r=C(e.rect),n=r.width,i=r.height,a=this.svgFactory.create(n,i,!0),o=g(e.inkLists);try{for(o.s();!(t=o.n()).done;){var s,l=t.value,u=[],c=g(l);try{for(c.s();!(s=c.n()).done;){var h=s.value,f=h.x-e.rect[0],d=e.rect[3]-h.y;u.push("".concat(f,",").concat(d))}}catch(t){c.e(t)}finally{c.f()}u=u.join(" ");var p=this.svgFactory.createElement(this.svgElementName);p.setAttribute("points",u),p.setAttribute("stroke-width",e.borderStyle.width||1),p.setAttribute("stroke","transparent"),p.setAttribute("fill","transparent"),this._createPopup(p,e),a.append(p)}}catch(t){o.e(t)}finally{o.f()}return this.container.append(a),this.container}}]),r}(F),nt=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("highlightAnnotation"):(this.container.className="highlightAnnotation",this.container)}}]),r}(F),it=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("underlineAnnotation"):(this.container.className="underlineAnnotation",this.container)}}]),r}(F),at=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("squigglyAnnotation"):(this.container.className="squigglyAnnotation",this.container)}}]),r}(F),ot=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("strikeoutAnnotation"):(this.container.className="strikeoutAnnotation",this.container)}}]),r}(F),st=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){return this.container.className="stampAnnotation",this.data.hasPopup||this._createPopup(null,this.data),this.container}}]),r}(F),lt=function(t){h(r,t);var e=d(r);function r(t){var n,a;k(this,r);var o=(a=e.call(this,t,{isRenderable:!0})).data.file,s=o.filename,l=o.content;return a.filename=(0,i.getFilenameFromUrl)(s,!0),a.content=l,null===(n=a.linkService.eventBus)||void 0===n||n.dispatch("fileattachmentannotation",{source:p(a),filename:s,content:l}),a}return x(r,[{key:"render",value:function(){var t,e,r;return this.container.className="fileAttachmentAnnotation",this.data.hasAppearance?r=document.createElement("div"):(r=document.createElement("img")).src="".concat(this.imageResourcesPath,"annotation-").concat(/paperclip/i.test(this.data.name)?"paperclip":"pushpin",".svg"),r.className="popupTriggerArea",r.addEventListener("dblclick",this._download.bind(this)),!this.data.hasPopup&&(null!==(t=this.data.titleObj)&&void 0!==t&&t.str||null!==(e=this.data.contentsObj)&&void 0!==e&&e.str||this.data.richText)&&this._createPopup(r,this.data),this.container.append(r),this.container}},{key:"_download",value:function(){var t;null===(t=this.downloadManager)||void 0===t||t.openOrDownloadData(this.container,this.content,this.filename)}}]),r}(F),ut=function(){function t(){k(this,t)}return x(t,null,[{key:"render",value:function(e){var r=e.annotations,o=e.div,s=e.viewport,u=e.accessibilityManager;(0,i.setLayerDimensions)(o,s);var c,h={data:null,layer:o,page:e.page,viewport:s,linkService:e.linkService,downloadManager:e.downloadManager,imageResourcesPath:e.imageResourcesPath||"",renderForms:!1!==e.renderForms,svgFactory:new i.DOMSVGFactory,annotationStorage:e.annotationStorage||new a.AnnotationStorage,enableScripting:!0===e.enableScripting,hasJSActions:e.hasJSActions,fieldObjects:e.fieldObjects},f=0,d=g(r);try{for(d.s();!(c=d.n()).done;){var p=c.value;if(p.annotationType!==n.AnnotationType.POPUP){var v=C(p.rect),y=v.width,m=v.height;if(y<=0||m<=0)continue}h.data=p;var b=O.create(h);if(b.isRenderable){var _=b.render();if(p.hidden&&(_.style.visibility="hidden"),Array.isArray(_)){var w,A=g(_);try{for(A.s();!(w=A.n()).done;){var k=w.value;k.style.zIndex=f++,l(t,t,ct).call(t,k,p.id,o,u)}}catch(t){A.e(t)}finally{A.f()}}else _.style.zIndex=f++,b instanceof X?o.prepend(_):l(t,t,ct).call(t,_,p.id,o,u)}}}catch(t){d.e(t)}finally{d.f()}l(this,t,ht).call(this,o,e.annotationCanvasMap)}},{key:"update",value:function(e){var r=e.annotationCanvasMap,n=e.div,a=e.viewport;(0,i.setLayerDimensions)(n,{rotation:a.rotation}),l(this,t,ht).call(this,n,r),n.hidden=!1}}]),t}();function ct(t,e,r,n){var a=t.firstChild||t;a.id="".concat(i.AnnotationPrefix).concat(e),r.append(t),null==n||n.moveElementInDOM(r,t,a,!1)}function ht(t,e){if(e){var r,n=g(e);try{for(n.s();!(r=n.n()).done;){var i=b(r.value,2),a=i[0],o=i[1],s=t.querySelector('[data-annotation-id="'.concat(a,'"]'));if(s){var l=s.firstChild;l?"CANVAS"===l.nodeName?l.replaceWith(o):l.before(o):s.append(o)}}}catch(t){n.e(t)}finally{n.f()}e.clear()}}e.AnnotationLayer=ut},(t,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||function(t,e){if(t){if("string"==typeof t)return i(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,e):void 0}}(t,e)||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 i(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r{Object.defineProperty(e,"__esModule",{value:!0}),e.XfaLayer=void 0;var n=r(149);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||s(t,e)||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 o(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=s(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){l=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(l)throw a}}}}function s(t,e){if(t){if("string"==typeof t)return l(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(t,e):void 0}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0;){var d,p,v=a(u.at(-1),3),y=v[0],m=v[1],g=v[2];if(m+1!==y.children.length){var b=y.children[++u.at(-1)[1]];if(null!==b){var _=b.name;if("#text"!==_){var w=void 0;if(w=null!==(d=b)&&void 0!==d&&null!==(p=d.attributes)&&void 0!==p&&p.xmlns?document.createElementNS(b.attributes.xmlns,_):document.createElement(_),g.append(w),b.attributes&&this.setAttributes({html:w,element:b,storage:e,intent:s,linkService:r}),b.children&&b.children.length>0)u.push([b,-1,w]);else if(b.value){var A=document.createTextNode(b.value);n.XfaText.shouldBuildText(_)&&f.push(A),w.append(A)}}else{var k=document.createTextNode(b.value);f.push(k),g.append(k)}}}else u.pop()}var S,x=o(c.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"));try{for(x.s();!(S=x.n()).done;)S.value.setAttribute("readOnly",!0)}catch(t){x.e(t)}finally{x.f()}return{textDivs:f}}},{key:"update",value:function(t){var e="matrix(".concat(t.viewport.transform.join(","),")");t.div.style.transform=e,t.div.hidden=!1}}],null&&u(e.prototype,null),r&&u(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.XfaLayer=c},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.SVGGraphics=void 0;var i=r(137),a=r(1),o=r(3);function s(t){return function(t){if(Array.isArray(t))return h(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||c(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||c(t,e)||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 u(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=c(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function c(t,e){if(t){if("string"==typeof t)return h(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(t,e):void 0}}function h(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(URL.createObjectURL&&"undefined"!=typeof Blob&&!r)return URL.createObjectURL(new Blob([t],{type:e}));for(var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i="data:".concat(e,";base64,"),a=0,o=t.length;a>2]+n[(3&s)<<4|l>>4]+n[a+1>6:64]+n[a+2>1&2147483647:n>>1&2147483647;e[r]=n}function s(t,r,n,i){var a=i,o=r.length;n[a]=o>>24&255,n[a+1]=o>>16&255,n[a+2]=o>>8&255,n[a+3]=255&o,n[a+=4]=255&t.charCodeAt(0),n[a+1]=255&t.charCodeAt(1),n[a+2]=255&t.charCodeAt(2),n[a+3]=255&t.charCodeAt(3),a+=4,n.set(r,a);var s=function(t,r,n){for(var i=-1,a=r;a>>8^e[o]}return-1^i}(n,i+4,a+=r.length);n[a]=s>>24&255,n[a+1]=s>>16&255,n[a+2]=s>>8&255,n[a+3]=255&s}function l(t){var e=t.length,r=65535,n=Math.ceil(e/r),i=new Uint8Array(2+e+5*n+4),a=0;i[a++]=120,i[a++]=156;for(var o=0;e>r;)i[a++]=0,i[a++]=255,i[a++]=255,i[a++]=0,i[a++]=0,i.set(t.subarray(o,o+r),a),a+=r,o+=r,e-=r;i[a++]=1,i[a++]=255&e,i[a++]=e>>8&255,i[a++]=255&~e,i[a++]=(65535&~e)>>8&255,i.set(t.subarray(o),a),a+=t.length-o;var s=function(t,e,r){for(var n=1,i=0,a=0;a>24&255,i[a++]=s>>16&255,i[a++]=s>>8&255,i[a++]=255&s,i}return function(e,r,n){return function(e,r,n,i){var u,c,h,f=e.width,d=e.height,p=e.data;switch(r){case a.ImageKind.GRAYSCALE_1BPP:c=0,u=1,h=f+7>>3;break;case a.ImageKind.RGB_24BPP:c=2,u=8,h=3*f;break;case a.ImageKind.RGBA_32BPP:c=6,u=8,h=4*f;break;default:throw new Error("invalid format")}for(var v=new Uint8Array((1+h)*d),y=0,m=0,g=0;g>24&255,f>>16&255,f>>8&255,255&f,d>>24&255,d>>16&255,d>>8&255,255&d,u,c,0,0,0]),A=function(t){if(!o.isNodeJS)return l(t);try{var e;e=parseInt(process.versions.node)>=8?t:Buffer.from(t);var r=require("zlib").deflateSync(e,{level:9});return r instanceof Uint8Array?r:new Uint8Array(r)}catch(t){(0,a.warn)("Not compressing PNG because zlib.deflateSync is unavailable: "+t)}return l(t)}(v),S=t.length+36+w.length+A.length,x=new Uint8Array(S),E=0;return x.set(t,E),s("IHDR",w,x,E+=t.length),s("IDATA",A,x,E+=12+w.length),E+=12+A.length,s("IEND",new Uint8Array(0),x,E),k(x,"image/png",n)}(e,void 0===e.kind?a.ImageKind.GRAYSCALE_1BPP:e.kind,r,n)}}(),x=function(){function t(){p(this,t),this.fontSizeScale=1,this.fontWeight=b,this.fontSize=0,this.textMatrix=a.IDENTITY_MATRIX,this.fontMatrix=a.FONT_IDENTITY_MATRIX,this.leading=0,this.textRenderingMode=a.TextRenderingMode.FILL,this.textMatrixScale=1,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=_,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}return d(t,[{key:"clone",value:function(){return Object.create(this)}},{key:"setCurrentPoint",value:function(t,e){this.x=t,this.y=e}}]),t}(),E=0,P=0,T=0;e.SVGGraphics=v=function(){function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var o in p(this,t),(0,i.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."),this.svgFactory=new i.DOMSVGFactory,this.current=new x,this.transformMatrix=a.IDENTITY_MATRIX,this.transformStack=[],this.extraStack=[],this.commonObjs=e,this.objs=r,this.pendingClip=null,this.pendingEOFill=!1,this.embedFonts=!1,this.embeddedFonts=Object.create(null),this.cssStyle=null,this.forceDataSchema=!!n,this._operatorIdMapping=[],a.OPS)this._operatorIdMapping[a.OPS[o]]=o}return d(t,[{key:"getObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return"string"==typeof t?t.startsWith("g_")?this.commonObjs.get(t):this.objs.get(t):e}},{key:"save",value:function(){this.transformStack.push(this.transformMatrix);var t=this.current;this.extraStack.push(t),this.current=t.clone()}},{key:"restore",value:function(){this.transformMatrix=this.transformStack.pop(),this.current=this.extraStack.pop(),this.pendingClip=null,this.tgrp=null}},{key:"group",value:function(t){this.save(),this.executeOpTree(t),this.restore()}},{key:"loadDependencies",value:function(t){for(var e=this,r=t.fnArray,n=t.argsArray,i=0,o=r.length;i0&&(this.current.lineWidth=t)}},{key:"setLineCap",value:function(t){this.current.lineCap=w[t]}},{key:"setLineJoin",value:function(t){this.current.lineJoin=A[t]}},{key:"setMiterLimit",value:function(t){this.current.miterLimit=t}},{key:"setStrokeAlpha",value:function(t){this.current.strokeAlpha=t}},{key:"setStrokeRGBColor",value:function(t,e,r){this.current.strokeColor=a.Util.makeHexColor(t,e,r)}},{key:"setFillAlpha",value:function(t){this.current.fillAlpha=t}},{key:"setFillRGBColor",value:function(t,e,r){this.current.fillColor=a.Util.makeHexColor(t,e,r),this.current.tspan=this.svgFactory.createElement("svg:tspan"),this.current.xcoords=[],this.current.ycoords=[]}},{key:"setStrokeColorN",value:function(t){this.current.strokeColor=this._makeColorN_Pattern(t)}},{key:"setFillColorN",value:function(t){this.current.fillColor=this._makeColorN_Pattern(t)}},{key:"shadingFill",value:function(t){var e=this.viewport.width,r=this.viewport.height,n=a.Util.inverseTransform(this.transformMatrix),i=a.Util.applyTransform([0,0],n),o=a.Util.applyTransform([0,r],n),s=a.Util.applyTransform([e,0],n),l=a.Util.applyTransform([e,r],n),u=Math.min(i[0],o[0],s[0],l[0]),c=Math.min(i[1],o[1],s[1],l[1]),h=Math.max(i[0],o[0],s[0],l[0]),f=Math.max(i[1],o[1],s[1],l[1]),d=this.svgFactory.createElement("svg:rect");d.setAttributeNS(null,"x",u),d.setAttributeNS(null,"y",c),d.setAttributeNS(null,"width",h-u),d.setAttributeNS(null,"height",f-c),d.setAttributeNS(null,"fill",this._makeShadingPattern(t)),this.current.fillAlpha<1&&d.setAttributeNS(null,"fill-opacity",this.current.fillAlpha),this._ensureTransformGroup().append(d)}},{key:"_makeColorN_Pattern",value:function(t){return"TilingPattern"===t[0]?this._makeTilingPattern(t):this._makeShadingPattern(t)}},{key:"_makeTilingPattern",value:function(t){var e=t[1],r=t[2],n=t[3]||a.IDENTITY_MATRIX,i=l(t[4],4),o=i[0],u=i[1],c=i[2],h=i[3],f=t[5],d=t[6],p=t[7],v="shading".concat(T++),y=l(a.Util.normalizeRect([].concat(s(a.Util.applyTransform([o,u],n)),s(a.Util.applyTransform([c,h],n)))),4),m=y[0],g=y[1],b=y[2],_=y[3],w=l(a.Util.singularValueDecompose2dScale(n),2),A=f*w[0],k=d*w[1],S=this.svgFactory.createElement("svg:pattern");S.setAttributeNS(null,"id",v),S.setAttributeNS(null,"patternUnits","userSpaceOnUse"),S.setAttributeNS(null,"width",A),S.setAttributeNS(null,"height",k),S.setAttributeNS(null,"x","".concat(m)),S.setAttributeNS(null,"y","".concat(g));var x=this.svg,E=this.transformMatrix,P=this.current.fillColor,C=this.current.strokeColor,O=this.svgFactory.create(b-m,_-g);if(this.svg=O,this.transformMatrix=n,2===p){var F=a.Util.makeHexColor.apply(a.Util,s(e));this.current.fillColor=F,this.current.strokeColor=F}return this.executeOpTree(this.convertOpList(r)),this.svg=x,this.transformMatrix=E,this.current.fillColor=P,this.current.strokeColor=C,S.append(O.childNodes[0]),this.defs.append(S),"url(#".concat(v,")")}},{key:"_makeShadingPattern",value:function(t){switch("string"==typeof t&&(t=this.objs.get(t)),t[0]){case"RadialAxial":var e,r="shading".concat(T++),n=t[3];switch(t[1]){case"axial":var i=t[4],o=t[5];(e=this.svgFactory.createElement("svg:linearGradient")).setAttributeNS(null,"id",r),e.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),e.setAttributeNS(null,"x1",i[0]),e.setAttributeNS(null,"y1",i[1]),e.setAttributeNS(null,"x2",o[0]),e.setAttributeNS(null,"y2",o[1]);break;case"radial":var s=t[4],l=t[5],c=t[6],h=t[7];(e=this.svgFactory.createElement("svg:radialGradient")).setAttributeNS(null,"id",r),e.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),e.setAttributeNS(null,"cx",l[0]),e.setAttributeNS(null,"cy",l[1]),e.setAttributeNS(null,"r",h),e.setAttributeNS(null,"fx",s[0]),e.setAttributeNS(null,"fy",s[1]),e.setAttributeNS(null,"fr",c);break;default:throw new Error("Unknown RadialAxial type: ".concat(t[1]))}var f,d=u(n);try{for(d.s();!(f=d.n()).done;){var p=f.value,v=this.svgFactory.createElement("svg:stop");v.setAttributeNS(null,"offset",p[0]),v.setAttributeNS(null,"stop-color",p[1]),e.append(v)}}catch(t){d.e(t)}finally{d.f()}return this.defs.append(e),"url(#".concat(r,")");case"Mesh":return(0,a.warn)("Unimplemented pattern Mesh"),null;case"Dummy":return"hotpink";default:throw new Error("Unknown IR type: ".concat(t[0]))}}},{key:"setDash",value:function(t,e){this.current.dashArray=t,this.current.dashPhase=e}},{key:"constructPath",value:function(t,e){var r,n=this.current,i=n.x,o=n.y,s=[],l=0,c=u(t);try{for(c.s();!(r=c.n()).done;)switch(0|r.value){case a.OPS.rectangle:i=e[l++],o=e[l++];var h=e[l++],f=e[l++],d=i+h,p=o+f;s.push("M",y(i),y(o),"L",y(d),y(o),"L",y(d),y(p),"L",y(i),y(p),"Z");break;case a.OPS.moveTo:i=e[l++],o=e[l++],s.push("M",y(i),y(o));break;case a.OPS.lineTo:i=e[l++],o=e[l++],s.push("L",y(i),y(o));break;case a.OPS.curveTo:i=e[l+4],o=e[l+5],s.push("C",y(e[l]),y(e[l+1]),y(e[l+2]),y(e[l+3]),y(i),y(o)),l+=6;break;case a.OPS.curveTo2:s.push("C",y(i),y(o),y(e[l]),y(e[l+1]),y(e[l+2]),y(e[l+3])),i=e[l+2],o=e[l+3],l+=4;break;case a.OPS.curveTo3:i=e[l+2],o=e[l+3],s.push("C",y(e[l]),y(e[l+1]),y(i),y(o),y(i),y(o)),l+=4;break;case a.OPS.closePath:s.push("Z")}}catch(t){c.e(t)}finally{c.f()}s=s.join(" "),n.path&&t.length>0&&t[0]!==a.OPS.rectangle&&t[0]!==a.OPS.moveTo?s=n.path.getAttributeNS(null,"d")+s:(n.path=this.svgFactory.createElement("svg:path"),this._ensureTransformGroup().append(n.path)),n.path.setAttributeNS(null,"d",s),n.path.setAttributeNS(null,"fill","none"),n.element=n.path,n.setCurrentPoint(i,o)}},{key:"endPath",value:function(){var t=this.current;if(t.path=null,this.pendingClip)if(t.element){var e="clippath".concat(E++),r=this.svgFactory.createElement("svg:clipPath");r.setAttributeNS(null,"id",e),r.setAttributeNS(null,"transform",m(this.transformMatrix));var n=t.element.cloneNode(!0);if("evenodd"===this.pendingClip?n.setAttributeNS(null,"clip-rule","evenodd"):n.setAttributeNS(null,"clip-rule","nonzero"),this.pendingClip=null,r.append(n),this.defs.append(r),t.activeClipUrl){t.clipGroup=null;var i,a=u(this.extraStack);try{for(a.s();!(i=a.n()).done;)i.value.clipGroup=null}catch(t){a.e(t)}finally{a.f()}r.setAttributeNS(null,"clip-path",t.activeClipUrl)}t.activeClipUrl="url(#".concat(e,")"),this.tgrp=null}else this.pendingClip=null}},{key:"clip",value:function(t){this.pendingClip=t}},{key:"closePath",value:function(){var t=this.current;if(t.path){var e="".concat(t.path.getAttributeNS(null,"d"),"Z");t.path.setAttributeNS(null,"d",e)}}},{key:"setLeading",value:function(t){this.current.leading=-t}},{key:"setTextRise",value:function(t){this.current.textRise=t}},{key:"setTextRenderingMode",value:function(t){this.current.textRenderingMode=t}},{key:"setHScale",value:function(t){this.current.textHScale=t/100}},{key:"setRenderingIntent",value:function(t){}},{key:"setFlatness",value:function(t){}},{key:"setGState",value:function(t){var e,r=u(t);try{for(r.s();!(e=r.n()).done;){var n=l(e.value,2),i=n[0],o=n[1];switch(i){case"LW":this.setLineWidth(o);break;case"LC":this.setLineCap(o);break;case"LJ":this.setLineJoin(o);break;case"ML":this.setMiterLimit(o);break;case"D":this.setDash(o[0],o[1]);break;case"RI":this.setRenderingIntent(o);break;case"FL":this.setFlatness(o);break;case"Font":this.setFont(o);break;case"CA":this.setStrokeAlpha(o);break;case"ca":this.setFillAlpha(o);break;default:(0,a.warn)("Unimplemented graphic state operator ".concat(i))}}}catch(t){r.e(t)}finally{r.f()}}},{key:"fill",value:function(){var t=this.current;t.element&&(t.element.setAttributeNS(null,"fill",t.fillColor),t.element.setAttributeNS(null,"fill-opacity",t.fillAlpha),this.endPath())}},{key:"stroke",value:function(){var t=this.current;t.element&&(this._setStrokeAttributes(t.element),t.element.setAttributeNS(null,"fill","none"),this.endPath())}},{key:"_setStrokeAttributes",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=this.current,n=r.dashArray;1!==e&&n.length>0&&(n=n.map((function(t){return e*t}))),t.setAttributeNS(null,"stroke",r.strokeColor),t.setAttributeNS(null,"stroke-opacity",r.strokeAlpha),t.setAttributeNS(null,"stroke-miterlimit",y(r.miterLimit)),t.setAttributeNS(null,"stroke-linecap",r.lineCap),t.setAttributeNS(null,"stroke-linejoin",r.lineJoin),t.setAttributeNS(null,"stroke-width",y(e*r.lineWidth)+"px"),t.setAttributeNS(null,"stroke-dasharray",n.map(y).join(" ")),t.setAttributeNS(null,"stroke-dashoffset",y(e*r.dashPhase)+"px")}},{key:"eoFill",value:function(){var t;null===(t=this.current.element)||void 0===t||t.setAttributeNS(null,"fill-rule","evenodd"),this.fill()}},{key:"fillStroke",value:function(){this.stroke(),this.fill()}},{key:"eoFillStroke",value:function(){var t;null===(t=this.current.element)||void 0===t||t.setAttributeNS(null,"fill-rule","evenodd"),this.fillStroke()}},{key:"closeStroke",value:function(){this.closePath(),this.stroke()}},{key:"closeFillStroke",value:function(){this.closePath(),this.fillStroke()}},{key:"closeEOFillStroke",value:function(){this.closePath(),this.eoFillStroke()}},{key:"paintSolidColorImageMask",value:function(){var t=this.svgFactory.createElement("svg:rect");t.setAttributeNS(null,"x","0"),t.setAttributeNS(null,"y","0"),t.setAttributeNS(null,"width","1px"),t.setAttributeNS(null,"height","1px"),t.setAttributeNS(null,"fill",this.current.fillColor),this._ensureTransformGroup().append(t)}},{key:"paintImageXObject",value:function(t){var e=this.getObject(t);e?this.paintInlineImageXObject(e):(0,a.warn)("Dependent image with object ID ".concat(t," is not ready yet"))}},{key:"paintInlineImageXObject",value:function(t,e){var r=t.width,n=t.height,i=S(t,this.forceDataSchema,!!e),a=this.svgFactory.createElement("svg:rect");a.setAttributeNS(null,"x","0"),a.setAttributeNS(null,"y","0"),a.setAttributeNS(null,"width",y(r)),a.setAttributeNS(null,"height",y(n)),this.current.element=a,this.clip("nonzero");var o=this.svgFactory.createElement("svg:image");o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",i),o.setAttributeNS(null,"x","0"),o.setAttributeNS(null,"y",y(-n)),o.setAttributeNS(null,"width",y(r)+"px"),o.setAttributeNS(null,"height",y(n)+"px"),o.setAttributeNS(null,"transform","scale(".concat(y(1/r)," ").concat(y(-1/n),")")),e?e.append(o):this._ensureTransformGroup().append(o)}},{key:"paintImageMaskXObject",value:function(t){var e=this.getObject(t.data,t);if(e.bitmap)(0,a.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, ensure that the \`isOffscreenCanvasSupported\` API parameter is disabled.");else{var r=this.current,n=e.width,i=e.height,o=r.fillColor;r.maskId="mask".concat(P++);var s=this.svgFactory.createElement("svg:mask");s.setAttributeNS(null,"id",r.maskId);var l=this.svgFactory.createElement("svg:rect");l.setAttributeNS(null,"x","0"),l.setAttributeNS(null,"y","0"),l.setAttributeNS(null,"width",y(n)),l.setAttributeNS(null,"height",y(i)),l.setAttributeNS(null,"fill",o),l.setAttributeNS(null,"mask","url(#".concat(r.maskId,")")),this.defs.append(s),this._ensureTransformGroup().append(l),this.paintInlineImageXObject(e,s)}}},{key:"paintFormXObjectBegin",value:function(t,e){if(Array.isArray(t)&&6===t.length&&this.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e){var r=e[2]-e[0],n=e[3]-e[1],i=this.svgFactory.createElement("svg:rect");i.setAttributeNS(null,"x",e[0]),i.setAttributeNS(null,"y",e[1]),i.setAttributeNS(null,"width",y(r)),i.setAttributeNS(null,"height",y(n)),this.current.element=i,this.clip("nonzero"),this.endPath()}}},{key:"paintFormXObjectEnd",value:function(){}},{key:"_initialize",value:function(t){var e=this.svgFactory.create(t.width,t.height),r=this.svgFactory.createElement("svg:defs");e.append(r),this.defs=r;var n=this.svgFactory.createElement("svg:g");return n.setAttributeNS(null,"transform",m(t.transform)),e.append(n),this.svg=n,e}},{key:"_ensureClipGroup",value:function(){if(!this.current.clipGroup){var t=this.svgFactory.createElement("svg:g");t.setAttributeNS(null,"clip-path",this.current.activeClipUrl),this.svg.append(t),this.current.clipGroup=t}return this.current.clipGroup}},{key:"_ensureTransformGroup",value:function(){return this.tgrp||(this.tgrp=this.svgFactory.createElement("svg:g"),this.tgrp.setAttributeNS(null,"transform",m(this.transformMatrix)),this.current.activeClipUrl?this._ensureClipGroup().append(this.tgrp):this.svg.append(this.tgrp)),this.tgrp}}]),t}()},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFNodeStream=void 0;var n=r(1),i=r(162);function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&o(t,e)}function o(t,e){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},o(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=l(t);if(e){var i=l(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return function(t,e){if(e&&("object"===f(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(this,r)}}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function u(){u=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function l(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,r){return t[e]=r}}function c(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function h(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=c;var d={};function p(){}function v(){}function y(){}var m={};l(m,a,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,a)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var l=h(t[n],t,a);if("throw"!==l.type){var u=l.arg,c=u.value;return c&&"object"==f(c)&&r.call(c,"__await")?e.resolve(c.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(c).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,s)}))}s(l.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=h(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=h(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function c(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function h(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function o(t){c(a,n,i,o,s,"next",t)}function s(t){c(a,n,i,o,s,"throw",t)}o(void 0)}))}}function f(t){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f(t)}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}(this._rangeRequestReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}}}]),t}();e.PDFNodeStream=A;var k=function(){function t(e){p(this,t),this._url=e.url,this._done=!1,this._storedError=null,this.onProgress=null;var r=e.source;this._contentLength=r.length,this._loaded=0,this._filename=null,this._disableRange=r.disableRange||!1,this._rangeChunkSize=r.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._isStreamingSupported=!r.disableStream,this._isRangeSupported=!r.disableRange,this._readableStream=null,this._readCapability=(0,n.createPromiseCapability)(),this._headersCapability=(0,n.createPromiseCapability)()}var e;return y(t,[{key:"headersReady",get:function(){return this._headersCapability.promise}},{key:"filename",get:function(){return this._filename}},{key:"contentLength",get:function(){return this._contentLength}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=h(u().mark((function t(){var e,r,i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._readCapability.promise;case 2:if(!this._done){t.next=4;break}return t.abrupt("return",{value:void 0,done:!0});case 4:if(!this._storedError){t.next=6;break}throw this._storedError;case 6:if(null!==(r=this._readableStream.read())){t.next=10;break}return this._readCapability=(0,n.createPromiseCapability)(),t.abrupt("return",this.read());case 10:return this._loaded+=r.length,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded,total:this._contentLength}),i=new Uint8Array(r).buffer,t.abrupt("return",{value:i,done:!1});case 14:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._readableStream?this._readableStream.destroy(t):this._error(t)}},{key:"_error",value:function(t){this._storedError=t,this._readCapability.resolve()}},{key:"_setReadableStream",value:function(t){var e=this;this._readableStream=t,t.on("readable",(function(){e._readCapability.resolve()})),t.on("end",(function(){t.destroy(),e._done=!0,e._readCapability.resolve()})),t.on("error",(function(t){e._error(t)})),!this._isStreamingSupported&&this._isRangeSupported&&this._error(new n.AbortException("streaming is disabled")),this._storedError&&this._readableStream.destroy(this._storedError)}}]),t}(),S=function(){function t(e){p(this,t),this._url=e.url,this._done=!1,this._storedError=null,this.onProgress=null,this._loaded=0,this._readableStream=null,this._readCapability=(0,n.createPromiseCapability)();var r=e.source;this._isStreamingSupported=!r.disableStream}var e;return y(t,[{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=h(u().mark((function t(){var e,r,i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._readCapability.promise;case 2:if(!this._done){t.next=4;break}return t.abrupt("return",{value:void 0,done:!0});case 4:if(!this._storedError){t.next=6;break}throw this._storedError;case 6:if(null!==(r=this._readableStream.read())){t.next=10;break}return this._readCapability=(0,n.createPromiseCapability)(),t.abrupt("return",this.read());case 10:return this._loaded+=r.length,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded}),i=new Uint8Array(r).buffer,t.abrupt("return",{value:i,done:!1});case 14:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._readableStream?this._readableStream.destroy(t):this._error(t)}},{key:"_error",value:function(t){this._storedError=t,this._readCapability.resolve()}},{key:"_setReadableStream",value:function(t){var e=this;this._readableStream=t,t.on("readable",(function(){e._readCapability.resolve()})),t.on("end",(function(){t.destroy(),e._done=!0,e._readCapability.resolve()})),t.on("error",(function(t){e._error(t)})),this._storedError&&this._readableStream.destroy(this._storedError)}}]),t}();function x(t,e){return{protocol:t.protocol,auth:t.auth,host:t.hostname,port:t.port,path:t.path,method:"GET",headers:e}}var E=function(t){a(r,t);var e=s(r);function r(t){var a;p(this,r);var o=function(e){if(404===e.statusCode){var r=new n.MissingPDFException('Missing PDF "'.concat(a._url,'".'));return a._storedError=r,void a._headersCapability.reject(r)}a._headersCapability.resolve(),a._setReadableStream(e);var o=function(t){return a._readableStream.headers[t.toLowerCase()]},s=(0,i.validateRangeRequestCapabilities)({getResponseHeader:o,isHttp:t.isHttp,rangeChunkSize:a._rangeChunkSize,disableRange:a._disableRange}),l=s.allowRangeRequests,u=s.suggestedLength;a._isRangeSupported=l,a._contentLength=u||a._contentLength,a._filename=(0,i.extractFilenameFromHeader)(o)};return(a=e.call(this,t))._request=null,"http:"===a._url.protocol?a._request=g.request(x(a._url,t.httpHeaders),o):a._request=b.request(x(a._url,t.httpHeaders),o),a._request.on("error",(function(t){a._storedError=t,a._headersCapability.reject(t)})),a._request.end(),a}return y(r)}(k),P=function(t){a(r,t);var e=s(r);function r(t,i,a){var o;for(var s in p(this,r),(o=e.call(this,t))._httpHeaders={},t.httpHeaders){var l=t.httpHeaders[s];void 0!==l&&(o._httpHeaders[s]=l)}o._httpHeaders.Range="bytes=".concat(i,"-").concat(a-1);var u=function(t){if(404!==t.statusCode)o._setReadableStream(t);else{var e=new n.MissingPDFException('Missing PDF "'.concat(o._url,'".'));o._storedError=e}};return o._request=null,"http:"===o._url.protocol?o._request=g.request(x(o._url,o._httpHeaders),u):o._request=b.request(x(o._url,o._httpHeaders),u),o._request.on("error",(function(t){o._storedError=t})),o._request.end(),o}return y(r)}(S),T=function(t){a(r,t);var e=s(r);function r(t){var i;p(this,r),i=e.call(this,t);var a=decodeURIComponent(i._url.path);return w.test(i._url.href)&&(a=a.replace(/^\\//,"")),m.lstat(a,(function(t,e){if(t)return"ENOENT"===t.code&&(t=new n.MissingPDFException('Missing PDF "'.concat(a,'".'))),i._storedError=t,void i._headersCapability.reject(t);i._contentLength=e.size,i._setReadableStream(m.createReadStream(a)),i._headersCapability.resolve()})),i}return y(r)}(k),C=function(t){a(r,t);var e=s(r);function r(t,n,i){var a;p(this,r),a=e.call(this,t);var o=decodeURIComponent(a._url.path);return w.test(a._url.href)&&(o=o.replace(/^\\//,"")),a._setReadableStream(m.createReadStream(o,{start:n,end:i-1})),a}return y(r)}(S)},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.createResponseStatusError=function(t,e){return 404===t||0===t&&e.startsWith("file:")?new n.MissingPDFException('Missing PDF "'+e+'".'):new n.UnexpectedResponseException("Unexpected server response (".concat(t,') while retrieving PDF "').concat(e,'".'),t)},e.extractFilenameFromHeader=function(t){var e=t("Content-Disposition");if(e){var r=(0,i.getFilenameFromContentDispositionHeader)(e);if(r.includes("%"))try{r=decodeURIComponent(r)}catch(t){}if((0,a.isPdfFile)(r))return r}return null},e.validateRangeRequestCapabilities=function(t){var e=t.getResponseHeader,r=t.isHttp,n=t.rangeChunkSize,i=t.disableRange,a={allowRangeRequests:!1,suggestedLength:void 0},o=parseInt(e("Content-Length"),10);return Number.isInteger(o)?(a.suggestedLength=o,o<=2*n||i||!r||"bytes"!==e("Accept-Ranges")||"identity"!==(e("Content-Encoding")||"identity")||(a.allowRangeRequests=!0),a):a},e.validateResponseStatus=function(t){return 200===t||206===t};var n=r(1),i=r(163),a=r(137)},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.getFilenameFromContentDispositionHeader=function(t){var e=!0,r=s("filename\\\\*","i").exec(t);if(r){var a=c(r=r[1]);return u(a=f(a=h(a=unescape(a))))}if(r=function(t){for(var e,r=[],n=s("filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)","ig");null!==(e=n.exec(t));){var a=i(e,4),o=a[1],l=a[2],u=a[3];if((o=parseInt(o,10))in r){if(0===o)break}else r[o]=[l,u]}for(var f=[],d=0;dt.length)&&(e=t.length);for(var r=0,n=new Array(e);r{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFNetworkStream=void 0;var n=r(1),i=r(162);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};u(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var l=f(t[n],t,a);if("throw"!==l.type){var u=l.arg,h=u.value;return h&&"object"==c(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,s)}))}s(l.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function s(t){o(a,n,i,s,l,"next",t)}function l(t){o(a,n,i,s,l,"throw",t)}s(void 0)}))}}function l(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:{};h(this,t),this.url=e,this.isHttp=/^https?:/i.test(e),this.httpHeaders=this.isHttp&&r.httpHeaders||Object.create(null),this.withCredentials=r.withCredentials||!1,this.getXhr=r.getXhr||function(){return new XMLHttpRequest},this.currXhrId=0,this.pendingRequests=Object.create(null)}return d(t,[{key:"requestRange",value:function(t,e,r){var n={begin:t,end:e};for(var i in r)n[i]=r[i];return this.request(n)}},{key:"requestFull",value:function(t){return this.request(t)}},{key:"request",value:function(t){var e=this.getXhr(),r=this.currXhrId++,n=this.pendingRequests[r]={xhr:e};for(var i in e.open("GET",this.url, !0),e.withCredentials=this.withCredentials,this.httpHeaders){var a=this.httpHeaders[i];void 0!==a&&e.setRequestHeader(i,a)}return this.isHttp&&"begin"in t&&"end"in t?(e.setRequestHeader("Range","bytes=".concat(t.begin,"-").concat(t.end-1)),n.expectedStatus=206):n.expectedStatus=200,e.responseType="arraybuffer",t.onError&&(e.onerror=function(r){t.onError(e.status)}),e.onreadystatechange=this.onStateChange.bind(this,r),e.onprogress=this.onProgress.bind(this,r),n.onHeadersReceived=t.onHeadersReceived,n.onDone=t.onDone,n.onError=t.onError,n.onProgress=t.onProgress,e.send(null),r}},{key:"onProgress",value:function(t,e){var r,n=this.pendingRequests[t];n&&(null===(r=n.onProgress)||void 0===r||r.call(n,e))}},{key:"onStateChange",value:function(t,e){var r=this.pendingRequests[t];if(r){var i=r.xhr;if(i.readyState>=2&&r.onHeadersReceived&&(r.onHeadersReceived(),delete r.onHeadersReceived),4===i.readyState&&t in this.pendingRequests)if(delete this.pendingRequests[t],0===i.status&&this.isHttp){var a;null===(a=r.onError)||void 0===a||a.call(r,i.status)}else{var o=i.status||200;if(200===o&&206===r.expectedStatus||o===r.expectedStatus){var s=function(t){var e=t.response;return"string"!=typeof e?e:(0,n.stringToBytes)(e).buffer}(i);if(206===o){var l=i.getResponseHeader("Content-Range"),u=/bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(l);r.onDone({begin:parseInt(u[1],10),chunk:s})}else if(s)r.onDone({begin:0,chunk:s});else{var c;null===(c=r.onError)||void 0===c||c.call(r,i.status)}}else{var h;null===(h=r.onError)||void 0===h||h.call(r,i.status)}}}}},{key:"getRequestXhr",value:function(t){return this.pendingRequests[t].xhr}},{key:"isPendingRequest",value:function(t){return t in this.pendingRequests}},{key:"abortRequest",value:function(t){var e=this.pendingRequests[t].xhr;delete this.pendingRequests[t],e.abort()}}]),t}(),v=function(){function t(e){h(this,t),this._source=e,this._manager=new p(e.url,{httpHeaders:e.httpHeaders,withCredentials:e.withCredentials}),this._rangeChunkSize=e.rangeChunkSize,this._fullRequestReader=null,this._rangeRequestReaders=[]}return d(t,[{key:"_onRangeRequestReaderClosed",value:function(t){var e=this._rangeRequestReaders.indexOf(t);e>=0&&this._rangeRequestReaders.splice(e,1)}},{key:"getFullReader",value:function(){return(0,n.assert)(!this._fullRequestReader,"PDFNetworkStream.getFullReader can only be called once."),this._fullRequestReader=new y(this._manager,this._source),this._fullRequestReader}},{key:"getRangeReader",value:function(t,e){var r=new m(this._manager,t,e);return r.onClosed=this._onRangeRequestReaderClosed.bind(this),this._rangeRequestReaders.push(r),r}},{key:"cancelAllRequests",value:function(t){var e;null===(e=this._fullRequestReader)||void 0===e||e.cancel(t);var r,n=l(this._rangeRequestReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}}}]),t}();e.PDFNetworkStream=v;var y=function(){function t(e,r){h(this,t),this._manager=e;var i={onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=r.url,this._fullRequestId=e.requestFull(i),this._headersReceivedCapability=(0,n.createPromiseCapability)(),this._disableRange=r.disableRange||!1,this._contentLength=r.length,this._rangeChunkSize=r.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._isStreamingSupported=!1,this._isRangeSupported=!1,this._cachedChunks=[],this._requests=[],this._done=!1,this._storedError=void 0,this._filename=null,this.onProgress=null}var e;return d(t,[{key:"_onHeadersReceived",value:function(){var t=this._fullRequestId,e=this._manager.getRequestXhr(t),r=function(t){return e.getResponseHeader(t)},n=(0,i.validateRangeRequestCapabilities)({getResponseHeader:r,isHttp:this._manager.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange}),a=n.allowRangeRequests,o=n.suggestedLength;a&&(this._isRangeSupported=!0),this._contentLength=o||this._contentLength,this._filename=(0,i.extractFilenameFromHeader)(r),this._isRangeSupported&&this._manager.abortRequest(t),this._headersReceivedCapability.resolve()}},{key:"_onDone",value:function(t){if(t&&(this._requests.length>0?this._requests.shift().resolve({value:t.chunk,done:!1}):this._cachedChunks.push(t.chunk)),this._done=!0,!(this._cachedChunks.length>0)){var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0}}},{key:"_onError",value:function(t){this._storedError=(0,i.createResponseStatusError)(t,this._url),this._headersReceivedCapability.reject(this._storedError);var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.reject(this._storedError)}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._cachedChunks.length=0}},{key:"_onProgress",value:function(t){var e;null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:t.loaded,total:t.lengthComputable?t.total:this._contentLength})}},{key:"filename",get:function(){return this._filename}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"contentLength",get:function(){return this._contentLength}},{key:"headersReady",get:function(){return this._headersReceivedCapability.promise}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._storedError){t.next=2;break}throw this._storedError;case 2:if(!(this._cachedChunks.length>0)){t.next=5;break}return e=this._cachedChunks.shift(),t.abrupt("return",{value:e,done:!1});case 5:if(!this._done){t.next=7;break}return t.abrupt("return",{value:void 0,done:!0});case 7:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 10:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0,this._headersReceivedCapability.reject(t);var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._manager.isPendingRequest(this._fullRequestId)&&this._manager.abortRequest(this._fullRequestId),this._fullRequestReader=null}}]),t}(),m=function(){function t(e,r,n){h(this,t),this._manager=e;var i={onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=e.url,this._requestId=e.requestRange(r,n,i),this._requests=[],this._queuedChunk=null,this._done=!1,this._storedError=void 0,this.onProgress=null,this.onClosed=null}var e;return d(t,[{key:"_close",value:function(){var t;null===(t=this.onClosed)||void 0===t||t.call(this,this)}},{key:"_onDone",value:function(t){var e=t.chunk;this._requests.length>0?this._requests.shift().resolve({value:e,done:!1}):this._queuedChunk=e,this._done=!0;var r,n=l(this._requests);try{for(n.s();!(r=n.n()).done;)r.value.resolve({value:void 0,done:!0})}catch(t){n.e(t)}finally{n.f()}this._requests.length=0,this._close()}},{key:"_onError",value:function(t){this._storedError=(0,i.createResponseStatusError)(t,this._url);var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.reject(this._storedError)}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._queuedChunk=null}},{key:"_onProgress",value:function(t){var e;this.isStreamingSupported||null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:t.loaded})}},{key:"isStreamingSupported",get:function(){return!1}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._storedError){t.next=2;break}throw this._storedError;case 2:if(null===this._queuedChunk){t.next=6;break}return e=this._queuedChunk,this._queuedChunk=null,t.abrupt("return",{value:e,done:!1});case 6:if(!this._done){t.next=8;break}return t.abrupt("return",{value:void 0,done:!0});case 8:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 11:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0;var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._manager.isPendingRequest(this._requestId)&&this._manager.abortRequest(this._requestId),this._close()}}]),t}()},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFFetchStream=void 0;var n=r(1),i=r(162);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==l(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,s)}))}s(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function s(t){o(a,n,i,s,l,"next",t)}function l(t){o(a,n,i,s,l,"throw",t)}s(void 0)}))}}function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}(this._rangeRequestReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}}}]),t}();e.PDFFetchStream=v;var y=function(){function t(e){var r=this;c(this,t),this._stream=e,this._reader=null,this._loaded=0,this._filename=null;var a=e.source;this._withCredentials=a.withCredentials||!1,this._contentLength=a.length,this._headersCapability=(0,n.createPromiseCapability)(),this._disableRange=a.disableRange||!1,this._rangeChunkSize=a.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._abortController=new AbortController,this._isStreamingSupported=!a.disableStream,this._isRangeSupported=!a.disableRange,this._headers=p(this._stream.httpHeaders);var o=a.url;fetch(o,d(this._headers,this._withCredentials,this._abortController)).then((function(t){if(!(0,i.validateResponseStatus)(t.status))throw(0,i.createResponseStatusError)(t.status,o);r._reader=t.body.getReader(),r._headersCapability.resolve();var e=function(e){return t.headers.get(e)},a=(0,i.validateRangeRequestCapabilities)({getResponseHeader:e,isHttp:r._stream.isHttp,rangeChunkSize:r._rangeChunkSize,disableRange:r._disableRange}),s=a.allowRangeRequests,l=a.suggestedLength;r._isRangeSupported=s,r._contentLength=l||r._contentLength,r._filename=(0,i.extractFilenameFromHeader)(e),!r._isStreamingSupported&&r._isRangeSupported&&r.cancel(new n.AbortException("Streaming is disabled."))})).catch(this._headersCapability.reject),this.onProgress=null}var e;return f(t,[{key:"headersReady",get:function(){return this._headersCapability.promise}},{key:"filename",get:function(){return this._filename}},{key:"contentLength",get:function(){return this._contentLength}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=s(a().mark((function t(){var e,r,n,i,o;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._headersCapability.promise;case 2:return t.next=4,this._reader.read();case 4:if(r=t.sent,n=r.value,!(i=r.done)){t.next=9;break}return t.abrupt("return",{value:n,done:i});case 9:return this._loaded+=n.byteLength,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded,total:this._contentLength}),o=new Uint8Array(n).buffer,t.abrupt("return",{value:o,done:!1});case 13:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){var e;null===(e=this._reader)||void 0===e||e.cancel(t),this._abortController.abort()}}]),t}(),m=function(){function t(e,r,a){var o=this;c(this,t),this._stream=e,this._reader=null,this._loaded=0;var s=e.source;this._withCredentials=s.withCredentials||!1,this._readCapability=(0,n.createPromiseCapability)(),this._isStreamingSupported=!s.disableStream,this._abortController=new AbortController,this._headers=p(this._stream.httpHeaders),this._headers.append("Range","bytes=".concat(r,"-").concat(a-1));var l=s.url;fetch(l,d(this._headers,this._withCredentials,this._abortController)).then((function(t){if(!(0,i.validateResponseStatus)(t.status))throw(0,i.createResponseStatusError)(t.status,l);o._readCapability.resolve(),o._reader=t.body.getReader()})).catch(this._readCapability.reject),this.onProgress=null}var e;return f(t,[{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=s(a().mark((function t(){var e,r,n,i,o;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._readCapability.promise;case 2:return t.next=4,this._reader.read();case 4:if(r=t.sent,n=r.value,!(i=r.done)){t.next=9;break}return t.abrupt("return",{value:n,done:i});case 9:return this._loaded+=n.byteLength,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded}),o=new Uint8Array(n).buffer,t.abrupt("return",{value:o,done:!1});case 13:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){var e;null===(e=this._reader)||void 0===e||e.cancel(t),this._abortController.abort()}}]),t}()}],__webpack_module_cache__={};function __w_pdfjs_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var r=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t](r,r.exports,__w_pdfjs_require__),r.exports}var __nested_webpack_exports__={};return(()=>{var t=__nested_webpack_exports__;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"AbortException",{enumerable:!0,get:function(){return e.AbortException}}),Object.defineProperty(t,"AnnotationEditorLayer",{enumerable:!0,get:function(){return a.AnnotationEditorLayer}}),Object.defineProperty(t,"AnnotationEditorParamsType",{enumerable:!0,get:function(){return e.AnnotationEditorParamsType}}),Object.defineProperty(t,"AnnotationEditorType",{enumerable:!0,get:function(){return e.AnnotationEditorType}}),Object.defineProperty(t,"AnnotationEditorUIManager",{enumerable:!0,get:function(){return o.AnnotationEditorUIManager}}),Object.defineProperty(t,"AnnotationLayer",{enumerable:!0,get:function(){return s.AnnotationLayer}}),Object.defineProperty(t,"AnnotationMode",{enumerable:!0,get:function(){return e.AnnotationMode}}),Object.defineProperty(t,"CMapCompressionType",{enumerable:!0,get:function(){return e.CMapCompressionType}}),Object.defineProperty(t,"GlobalWorkerOptions",{enumerable:!0,get:function(){return l.GlobalWorkerOptions}}),Object.defineProperty(t,"InvalidPDFException",{enumerable:!0,get:function(){return e.InvalidPDFException}}),Object.defineProperty(t,"MissingPDFException",{enumerable:!0,get:function(){return e.MissingPDFException}}),Object.defineProperty(t,"OPS",{enumerable:!0,get:function(){return e.OPS}}),Object.defineProperty(t,"PDFDataRangeTransport",{enumerable:!0,get:function(){return r.PDFDataRangeTransport}}),Object.defineProperty(t,"PDFDateString",{enumerable:!0,get:function(){return n.PDFDateString}}),Object.defineProperty(t,"PDFWorker",{enumerable:!0,get:function(){return r.PDFWorker}}),Object.defineProperty(t,"PasswordResponses",{enumerable:!0,get:function(){return e.PasswordResponses}}),Object.defineProperty(t,"PermissionFlag",{enumerable:!0,get:function(){return e.PermissionFlag}}),Object.defineProperty(t,"PixelsPerInch",{enumerable:!0,get:function(){return n.PixelsPerInch}}),Object.defineProperty(t,"RenderingCancelledException",{enumerable:!0,get:function(){return n.RenderingCancelledException}}),Object.defineProperty(t,"SVGGraphics",{enumerable:!0,get:function(){return c.SVGGraphics}}),Object.defineProperty(t,"UNSUPPORTED_FEATURES",{enumerable:!0,get:function(){return e.UNSUPPORTED_FEATURES}}),Object.defineProperty(t,"UnexpectedResponseException",{enumerable:!0,get:function(){return e.UnexpectedResponseException}}),Object.defineProperty(t,"Util",{enumerable:!0,get:function(){return e.Util}}),Object.defineProperty(t,"VerbosityLevel",{enumerable:!0,get:function(){return e.VerbosityLevel}}),Object.defineProperty(t,"XfaLayer",{enumerable:!0,get:function(){return h.XfaLayer}}),Object.defineProperty(t,"build",{enumerable:!0,get:function(){return r.build}}),Object.defineProperty(t,"createPromiseCapability",{enumerable:!0,get:function(){return e.createPromiseCapability}}),Object.defineProperty(t,"createValidAbsoluteUrl",{enumerable:!0,get:function(){return e.createValidAbsoluteUrl}}),Object.defineProperty(t,"getDocument",{enumerable:!0,get:function(){return r.getDocument}}),Object.defineProperty(t,"getFilenameFromUrl",{enumerable:!0,get:function(){return n.getFilenameFromUrl}}),Object.defineProperty(t,"getPdfFilenameFromUrl",{enumerable:!0,get:function(){return n.getPdfFilenameFromUrl}}),Object.defineProperty(t,"getXfaPageViewport",{enumerable:!0,get:function(){return n.getXfaPageViewport}}),Object.defineProperty(t,"isDataScheme",{enumerable:!0,get:function(){return n.isDataScheme}}),Object.defineProperty(t,"isPdfFile",{enumerable:!0,get:function(){return n.isPdfFile}}),Object.defineProperty(t,"loadScript",{enumerable:!0,get:function(){return n.loadScript}}),Object.defineProperty(t,"renderTextLayer",{enumerable:!0,get:function(){return i.renderTextLayer}}),Object.defineProperty(t,"setLayerDimensions",{enumerable:!0,get:function(){return n.setLayerDimensions}}),Object.defineProperty(t,"shadow",{enumerable:!0,get:function(){return e.shadow}}),Object.defineProperty(t,"updateTextLayer",{enumerable:!0,get:function(){return i.updateTextLayer}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return r.version}});var e=__w_pdfjs_require__(1),r=__w_pdfjs_require__(133),n=__w_pdfjs_require__(137),i=__w_pdfjs_require__(151),a=__w_pdfjs_require__(152),o=__w_pdfjs_require__(136),s=__w_pdfjs_require__(157),l=__w_pdfjs_require__(144),u=__w_pdfjs_require__(3),c=__w_pdfjs_require__(160),h=__w_pdfjs_require__(159);if(u.isNodeJS){var f=__w_pdfjs_require__(161).PDFNodeStream;(0,r.setPDFNetworkStreamFactory)((function(t){return new f(t)}))}else{var d=__w_pdfjs_require__(164).PDFNetworkStream,p=__w_pdfjs_require__(165).PDFFetchStream;(0,r.setPDFNetworkStreamFactory)((function(t){return(0,n.isValidFetchUrl)(t.url)?new p(t):new d(t)}))}})(),__nested_webpack_exports__})(),"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("pdfjs-dist/build/pdf",[],factory):"object"==typeof exports?exports["pdfjs-dist/build/pdf"]=factory():root["pdfjs-dist/build/pdf"]=root.pdfjsLib=factory();`;function Q(e){var t,r,s,n,a;for(t="",s=e.length,r=0;r=1&&n<=127?t+=e.charAt(r):n>2047?(a=224|n>>12&15,t+=String.fromCharCode(a),a=128|n>>6&63,t+=String.fromCharCode(a),a=128|n>>0&63,t+=String.fromCharCode(a)):(a=192|n>>6&31,t+=String.fromCharCode(a),a=128|n>>0&63,t+=String.fromCharCode(a));return t}var u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function ee(e){var t,r,s,n,a,i;for(s=e.length,r=0,t="";r>2),t+=u.charAt((n&3)<<4),t+="==";break}if(a=e.charCodeAt(r++),r==s){t+=u.charAt(n>>2),t+=u.charAt((n&3)<<4|(a&240)>>4),t+=u.charAt((a&15)<<2),t+="=";break}i=e.charCodeAt(r++),t+=u.charAt(n>>2),t+=u.charAt((n&3)<<4|(a&240)>>4),t+=u.charAt((a&15)<<2|(i&192)>>6),t+=u.charAt(i&63)}return t}function _(e){return ee(Q(e))}const te=`data:text/javascript;base64,${_(Z)}`,re=`data:text/javascript;base64,${_(J)}`,ne=D({name:"VueOfficePdf",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},staticFileUrl:{type:String,default:"https://unpkg.com/pdfjs-dist@3.1.81/"},options:{type:Object,default:()=>({})}},emits:["rendered","error"],setup(e,{emit:t}){let r=null,s=null;const n=b(null),a=b([]),i=b(0),k=5;B(()=>{r!==null&&(r.destroy(),r=null,s=null)});function S(){return R(te).then(()=>{if(window.pdfjsLib)window.pdfjsLib.GlobalWorkerOptions.workerSrc=re;else return Promise.reject("window.pdfjsLib未找到")})}function A(){return window.pdfjsLib?Promise.resolve():S()}function O(){if(!e.src){i.value=0;return}s=window.pdfjsLib.getDocument({url:j(e.src),httpHeaders:e.requestOptions&&e.requestOptions.headers,withCredentials:e.requestOptions&&e.requestOptions.withCredentials,cMapUrl:`${e.staticFileUrl.endsWith("/")?e.staticFileUrl:e.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...L(e.options,["width"])}),s.promise.then(o=>{r&&r.destroy(),r=o,i.value=e.options.lazy?Math.min(r.numPages,k):r.numPages,setTimeout(()=>{y(1)})}).catch(o=>{t("error",o)})}function P(o){if(!e.options.lazy)return;const{scrollTop:l,scrollHeight:f,clientHeight:h}=o.target;if(l+h>=f){if(i.value>=r.numPages)return;let c=i.value;i.value=Math.min(r.numPages,c+k),i.value>c&&y(c+1)}}function y(o){r.getPage(o).then(l=>{const f=l.getViewport({scale:2}),h=window.devicePixelRatio||1,c=a.value[o-1],F=c.getContext("2d");c.width=Math.floor(f.width*h),c.height=Math.floor(f.height*h);let d=Math.floor(f.width),p=Math.floor(f.height);if(e.options.width){let v=e.options.width/d;d=Math.floor(e.options.width),p=Math.floor(p*v)}let x=n.value.getBoundingClientRect().width-20;if(d>x){let v=x/d;d=Math.floor(x),p=Math.floor(p*v)}c.style.width=d+"px",c.style.height=p+"px";const I=h!==1?[h,0,0,h,0,0]:null;l.render({canvasContext:F,transform:I,viewport:f}).promise.then(()=>{i.value>o?y(o+1):t("rendered")}).catch(v=>{t("error",v)})}).catch(l=>{t("error",l)})}function E(){y(1)}U(()=>{e.src&&A().then(O).catch(o=>{console.warn(o)})}),X(()=>e.src,()=>{A().then(O).catch(o=>{console.warn(o)})});function T(o){r&&r._transport&&r._transport.getData().then(l=>{M(o||`vue-office-pdf-${new Date().getTime()}.pdf`,l.buffer)})}return{wrapperRef:n,rootRef:a,numPages:i,save:T,onScrollPdf:P,rerender:E}}}),ae={key:0,ref:"wrapperRef",class:"vue-office-pdf-wrapper",style:{background:"gray",padding:"30px 0",position:"relative"}};function ie(e,t,r,s,n,a){return g(),m("div",{class:"vue-office-pdf",ref:"vue-office-pdf",style:{"text-align":"center","overflow-y":"auto"},onScroll:t[0]||(t[0]=(...i)=>e.onScrollPdf&&e.onScrollPdf(...i))},[e.numPages?(g(),m("div",ae,[(g(!0),m(H,null,$(e.numPages,i=>(g(),m("canvas",{ref_for:!0,ref:"rootRef",key:i,style:{width:"100%"}}))),128)),q(e.$slots,"default")],512)):G("",!0)],544)}const w=N(ne,[["render",ie]]);w.install=function(e){e.component(w.name,w)};const fe={__name:"PdfDemo",setup(e){function t(){C.hideLoading()}function r(i){console.log("出差",i),C.hideLoading()}const s=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.pdf",n=b();window.docxRef=n;const a={headers:{"component-name":"VueOfficePdf"}};return(i,k)=>(g(),W(K,{accept:".pdf",placeholder:"请输入pdf文件地址","default-src":s},{default:z(S=>[V(Y(w),{ref_key:"docxRef",ref:n,src:S.src,style:{flex:"1",height:"0"},options:{lazy:!0},"request-options":a,onRendered:t,onError:r},null,8,["src"])]),_:1}))}};export{fe as default}; diff --git a/examples/dist/assets/PreviewWrapper-1c0384a3.js b/examples/dist/assets/PreviewWrapper-1c0384a3.js new file mode 100644 index 0000000..50809ef --- /dev/null +++ b/examples/dist/assets/PreviewWrapper-1c0384a3.js @@ -0,0 +1 @@ +import{r as d,p as C,_ as I,w as N,q as l,a as p,c as x,u as t,g as i,f as n,s as v,t as S,e as y,m,l as V,v as W,x as A,b as R}from"./index-58cbfcf0.js";function T(e){const s=d("url"),a=d(e),r=d(e),u=d([]);function b(w){let c=new FileReader;return c.onload=o=>{let _=o.target.result;r.value=_},c.readAsArrayBuffer(w),!1}return{type:s,inputSrc:a,src:r,fileList:u,beforeUpload:b}}let g=d(!1),k;function $(e){k=C.loading(e,0),g.value=!0}function q(){g.value===!0&&(k(),g.value=!1)}const E={loading:g,showLoading:$,hideLoading:q};function F(){return location.href.includes("test")}const j=e=>(W("data-v-6e0b6946"),e=e(),A(),e),z={class:"preview-wrapper"},D={key:0,class:"operate-area"},G=j(()=>R("div",{class:"preview-wrapper-main"},null,-1)),H={__name:"PreviewWrapper",props:{accept:String,placeholder:String,defaultSrc:String},setup(e){const s=e,{type:a,inputSrc:r,src:u,fileList:b,beforeUpload:w}=T(s.defaultSrc);return N(u,()=>{E.showLoading()},{immediate:!0}),(c,o)=>{const _=l("a-radio-button"),B=l("a-radio-group"),L=l("a-input"),h=l("a-button"),U=l("upload-outlined"),P=l("a-upload");return p(),x("div",z,[t(F)()?m("",!0):(p(),x("div",D,[i(B,{value:t(a),"onUpdate:value":o[0]||(o[0]=f=>S(a)?a.value=f:null),"button-style":"solid"},{default:n(()=>[i(_,{value:"url"},{default:n(()=>[v("远程文件地址")]),_:1}),i(_,{value:"upload"},{default:n(()=>[v("上传本地文件")]),_:1})]),_:1},8,["value"]),t(a)==="url"?(p(),y(L,{key:0,value:t(r),"onUpdate:value":o[1]||(o[1]=f=>S(r)?r.value=f:null),placeholder:s.placeholder,style:{width:"600px","margin-left":"10px"}},null,8,["value","placeholder"])):m("",!0),t(a)==="url"?(p(),y(h,{key:1,type:"primary",style:{"margin-left":"10px"},onClick:o[2]||(o[2]=f=>u.value=t(r))},{default:n(()=>[v(" 预览 ")]),_:1})):m("",!0),t(a)!=="url"?(p(),y(P,{key:2,accept:s.accept,action:"",beforeUpload:t(w),"file-list":[]},{default:n(()=>[i(h,{style:{"margin-left":"10px"}},{default:n(()=>[i(U),v(" 选择文件 ")]),_:1})]),_:1},8,["accept","beforeUpload"])):m("",!0)])),V(c.$slots,"default",{src:t(u)},void 0,!0),G])}}},K=I(H,[["__scopeId","data-v-6e0b6946"]]);export{K as P,E as u}; diff --git a/examples/dist/assets/PreviewWrapper-a5ea54f2.js b/examples/dist/assets/PreviewWrapper-a5ea54f2.js new file mode 100644 index 0000000..7311609 --- /dev/null +++ b/examples/dist/assets/PreviewWrapper-a5ea54f2.js @@ -0,0 +1 @@ +import{r as d,p as C,_ as I,w as N,q as l,a as p,c as x,u as t,g as i,f as n,s as v,t as S,e as y,m,l as V,v as W,x as A,b as R}from"./index-5d373288.js";function T(e){const s=d("url"),a=d(e),r=d(e),u=d([]);function b(w){let c=new FileReader;return c.onload=o=>{let _=o.target.result;r.value=_},c.readAsArrayBuffer(w),!1}return{type:s,inputSrc:a,src:r,fileList:u,beforeUpload:b}}let g=d(!1),k;function $(e){k=C.loading(e,0),g.value=!0}function q(){g.value===!0&&(k(),g.value=!1)}const E={loading:g,showLoading:$,hideLoading:q};function F(){return location.href.includes("test")}const j=e=>(W("data-v-6e0b6946"),e=e(),A(),e),z={class:"preview-wrapper"},D={key:0,class:"operate-area"},G=j(()=>R("div",{class:"preview-wrapper-main"},null,-1)),H={__name:"PreviewWrapper",props:{accept:String,placeholder:String,defaultSrc:String},setup(e){const s=e,{type:a,inputSrc:r,src:u,fileList:b,beforeUpload:w}=T(s.defaultSrc);return N(u,()=>{E.showLoading()},{immediate:!0}),(c,o)=>{const _=l("a-radio-button"),B=l("a-radio-group"),L=l("a-input"),h=l("a-button"),U=l("upload-outlined"),P=l("a-upload");return p(),x("div",z,[t(F)()?m("",!0):(p(),x("div",D,[i(B,{value:t(a),"onUpdate:value":o[0]||(o[0]=f=>S(a)?a.value=f:null),"button-style":"solid"},{default:n(()=>[i(_,{value:"url"},{default:n(()=>[v("远程文件地址")]),_:1}),i(_,{value:"upload"},{default:n(()=>[v("上传本地文件")]),_:1})]),_:1},8,["value"]),t(a)==="url"?(p(),y(L,{key:0,value:t(r),"onUpdate:value":o[1]||(o[1]=f=>S(r)?r.value=f:null),placeholder:s.placeholder,style:{width:"600px","margin-left":"10px"}},null,8,["value","placeholder"])):m("",!0),t(a)==="url"?(p(),y(h,{key:1,type:"primary",style:{"margin-left":"10px"},onClick:o[2]||(o[2]=f=>u.value=t(r))},{default:n(()=>[v(" 预览 ")]),_:1})):m("",!0),t(a)!=="url"?(p(),y(P,{key:2,accept:s.accept,action:"",beforeUpload:t(w),"file-list":[]},{default:n(()=>[i(h,{style:{"margin-left":"10px"}},{default:n(()=>[i(U),v(" 选择文件 ")]),_:1})]),_:1},8,["accept","beforeUpload"])):m("",!0)])),V(c.$slots,"default",{src:t(u)},void 0,!0),G])}}},K=I(H,[["__scopeId","data-v-6e0b6946"]]);export{K as P,E as u}; diff --git a/examples/dist/assets/docx-19f6a6c1.js b/examples/dist/assets/docx-19f6a6c1.js new file mode 100644 index 0000000..702fed1 --- /dev/null +++ b/examples/dist/assets/docx-19f6a6c1.js @@ -0,0 +1,97 @@ +import{y as _e}from"./index-5d373288.js";import{c as ke}from"./_commonjs-dynamic-modules-302442b1.js";var Ce={exports:{}},xe={exports:{}};/*! + +JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/main/LICENSE +*/var Pe;function Be(){return Pe||(Pe=1,function(ne,ce){(function(T){ne.exports=T()})(function(){return function T(L,B,S){function v(r,m){if(!B[r]){if(!L[r]){var f=typeof ke=="function"&&ke;if(!m&&f)return f(r,!0);if(e)return e(r,!0);var a=new Error("Cannot find module '"+r+"'");throw a.code="MODULE_NOT_FOUND",a}var i=B[r]={exports:{}};L[r][0].call(i.exports,function(y){var h=L[r][1][y];return v(h||y)},i,i.exports,T,L,B,S)}return B[r].exports}for(var e=typeof ke=="function"&&ke,u=0;u>2,i=(3&r)<<4|m>>4,y=1>6:64,h=2>4,m=(15&a)<<4|(i=e.indexOf(u.charAt(h++)))>>2,f=(3&i)<<6|(y=e.indexOf(u.charAt(h++))),g[d++]=r,i!==64&&(g[d++]=m),y!==64&&(g[d++]=f);return g}},{"./support":30,"./utils":32}],2:[function(T,L,B){var S=T("./external"),v=T("./stream/DataWorker"),e=T("./stream/Crc32Probe"),u=T("./stream/DataLengthProbe");function r(m,f,a,i,y){this.compressedSize=m,this.uncompressedSize=f,this.crc32=a,this.compression=i,this.compressedContent=y}r.prototype={getContentWorker:function(){var m=new v(S.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new u("data_length")),f=this;return m.on("end",function(){if(this.streamInfo.data_length!==f.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),m},getCompressedWorker:function(){return new v(S.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},r.createWorkerFrom=function(m,f,a){return m.pipe(new e).pipe(new u("uncompressedSize")).pipe(f.compressWorker(a)).pipe(new u("compressedSize")).withStreamInfo("compression",f)},L.exports=r},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(T,L,B){var S=T("./stream/GenericWorker");B.STORE={magic:"\0\0",compressWorker:function(){return new S("STORE compression")},uncompressWorker:function(){return new S("STORE decompression")}},B.DEFLATE=T("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(T,L,B){var S=T("./utils"),v=function(){for(var e,u=[],r=0;r<256;r++){e=r;for(var m=0;m<8;m++)e=1&e?3988292384^e>>>1:e>>>1;u[r]=e}return u}();L.exports=function(e,u){return e!==void 0&&e.length?S.getTypeOf(e)!=="string"?function(r,m,f,a){var i=v,y=a+f;r^=-1;for(var h=a;h>>8^i[255&(r^m[h])];return-1^r}(0|u,e,e.length,0):function(r,m,f,a){var i=v,y=a+f;r^=-1;for(var h=a;h>>8^i[255&(r^m.charCodeAt(h))];return-1^r}(0|u,e,e.length,0):0}},{"./utils":32}],5:[function(T,L,B){B.base64=!1,B.binary=!1,B.dir=!1,B.createFolders=!0,B.date=null,B.compression=null,B.compressionOptions=null,B.comment=null,B.unixPermissions=null,B.dosPermissions=null},{}],6:[function(T,L,B){var S=null;S=typeof Promise<"u"?Promise:T("lie"),L.exports={Promise:S}},{lie:37}],7:[function(T,L,B){var S=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",v=T("pako"),e=T("./utils"),u=T("./stream/GenericWorker"),r=S?"uint8array":"array";function m(f,a){u.call(this,"FlateWorker/"+f),this._pako=null,this._pakoAction=f,this._pakoOptions=a,this.meta={}}B.magic="\b\0",e.inherits(m,u),m.prototype.processChunk=function(f){this.meta=f.meta,this._pako===null&&this._createPako(),this._pako.push(e.transformTo(r,f.data),!1)},m.prototype.flush=function(){u.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},m.prototype.cleanUp=function(){u.prototype.cleanUp.call(this),this._pako=null},m.prototype._createPako=function(){this._pako=new v[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var f=this;this._pako.onData=function(a){f.push({data:a,meta:f.meta})}},B.compressWorker=function(f){return new m("Deflate",f)},B.uncompressWorker=function(){return new m("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(T,L,B){function S(i,y){var h,d="";for(h=0;h>>=8;return d}function v(i,y,h,d,p,g){var w,P,n=i.file,s=i.compression,t=g!==r.utf8encode,l=e.transformTo("string",g(n.name)),b=e.transformTo("string",r.utf8encode(n.name)),k=n.comment,E=e.transformTo("string",g(k)),_=e.transformTo("string",r.utf8encode(k)),C=b.length!==n.name.length,o=_.length!==k.length,R="",V="",F="",q=n.dir,W=n.date,Y={crc32:0,compressedSize:0,uncompressedSize:0};y&&!h||(Y.crc32=i.crc32,Y.compressedSize=i.compressedSize,Y.uncompressedSize=i.uncompressedSize);var z=0;y&&(z|=8),t||!C&&!o||(z|=2048);var O=0,J=0;q&&(O|=16),p==="UNIX"?(J=798,O|=function(Z,ae){var le=Z;return Z||(le=ae?16893:33204),(65535&le)<<16}(n.unixPermissions,q)):(J=20,O|=function(Z){return 63&(Z||0)}(n.dosPermissions)),w=W.getUTCHours(),w<<=6,w|=W.getUTCMinutes(),w<<=5,w|=W.getUTCSeconds()/2,P=W.getUTCFullYear()-1980,P<<=4,P|=W.getUTCMonth()+1,P<<=5,P|=W.getUTCDate(),C&&(V=S(1,1)+S(m(l),4)+b,R+="up"+S(V.length,2)+V),o&&(F=S(1,1)+S(m(E),4)+_,R+="uc"+S(F.length,2)+F);var X="";return X+=` +\0`,X+=S(z,2),X+=s.magic,X+=S(w,2),X+=S(P,2),X+=S(Y.crc32,4),X+=S(Y.compressedSize,4),X+=S(Y.uncompressedSize,4),X+=S(l.length,2),X+=S(R.length,2),{fileRecord:f.LOCAL_FILE_HEADER+X+l+R,dirRecord:f.CENTRAL_FILE_HEADER+S(J,2)+X+S(E.length,2)+"\0\0\0\0"+S(O,4)+S(d,4)+l+R+E}}var e=T("../utils"),u=T("../stream/GenericWorker"),r=T("../utf8"),m=T("../crc32"),f=T("../signature");function a(i,y,h,d){u.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=y,this.zipPlatform=h,this.encodeFileName=d,this.streamFiles=i,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}e.inherits(a,u),a.prototype.push=function(i){var y=i.meta.percent||0,h=this.entriesCount,d=this._sources.length;this.accumulate?this.contentBuffer.push(i):(this.bytesWritten+=i.data.length,u.prototype.push.call(this,{data:i.data,meta:{currentFile:this.currentFile,percent:h?(y+100*(h-d-1))/h:100}}))},a.prototype.openedSource=function(i){this.currentSourceOffset=this.bytesWritten,this.currentFile=i.file.name;var y=this.streamFiles&&!i.file.dir;if(y){var h=v(i,y,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:h.fileRecord,meta:{percent:0}})}else this.accumulate=!0},a.prototype.closedSource=function(i){this.accumulate=!1;var y=this.streamFiles&&!i.file.dir,h=v(i,y,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(h.dirRecord),y)this.push({data:function(d){return f.DATA_DESCRIPTOR+S(d.crc32,4)+S(d.compressedSize,4)+S(d.uncompressedSize,4)}(i),meta:{percent:100}});else for(this.push({data:h.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},a.prototype.flush=function(){for(var i=this.bytesWritten,y=0;y=this.index;u--)r=(r<<8)+this.byteAt(u);return this.index+=e,r},readString:function(e){return S.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},L.exports=v},{"../utils":32}],19:[function(T,L,B){var S=T("./Uint8ArrayReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.readData=function(e){this.checkOffset(e);var u=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(T,L,B){var S=T("./DataReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},v.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},v.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},v.prototype.readData=function(e){this.checkOffset(e);var u=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./DataReader":18}],21:[function(T,L,B){var S=T("./ArrayReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.readData=function(e){if(this.checkOffset(e),e===0)return new Uint8Array(0);var u=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./ArrayReader":17}],22:[function(T,L,B){var S=T("../utils"),v=T("../support"),e=T("./ArrayReader"),u=T("./StringReader"),r=T("./NodeBufferReader"),m=T("./Uint8ArrayReader");L.exports=function(f){var a=S.getTypeOf(f);return S.checkSupport(a),a!=="string"||v.uint8array?a==="nodebuffer"?new r(f):v.uint8array?new m(S.transformTo("uint8array",f)):new e(S.transformTo("array",f)):new u(f)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(T,L,B){B.LOCAL_FILE_HEADER="PK",B.CENTRAL_FILE_HEADER="PK",B.CENTRAL_DIRECTORY_END="PK",B.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",B.ZIP64_CENTRAL_DIRECTORY_END="PK",B.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(T,L,B){var S=T("./GenericWorker"),v=T("../utils");function e(u){S.call(this,"ConvertWorker to "+u),this.destType=u}v.inherits(e,S),e.prototype.processChunk=function(u){this.push({data:v.transformTo(this.destType,u.data),meta:u.meta})},L.exports=e},{"../utils":32,"./GenericWorker":28}],25:[function(T,L,B){var S=T("./GenericWorker"),v=T("../crc32");function e(){S.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}T("../utils").inherits(e,S),e.prototype.processChunk=function(u){this.streamInfo.crc32=v(u.data,this.streamInfo.crc32||0),this.push(u)},L.exports=e},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(T,L,B){var S=T("../utils"),v=T("./GenericWorker");function e(u){v.call(this,"DataLengthProbe for "+u),this.propName=u,this.withStreamInfo(u,0)}S.inherits(e,v),e.prototype.processChunk=function(u){if(u){var r=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=r+u.data.length}v.prototype.processChunk.call(this,u)},L.exports=e},{"../utils":32,"./GenericWorker":28}],27:[function(T,L,B){var S=T("../utils"),v=T("./GenericWorker");function e(u){v.call(this,"DataWorker");var r=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,u.then(function(m){r.dataIsReady=!0,r.data=m,r.max=m&&m.length||0,r.type=S.getTypeOf(m),r.isPaused||r._tickAndRepeat()},function(m){r.error(m)})}S.inherits(e,v),e.prototype.cleanUp=function(){v.prototype.cleanUp.call(this),this.data=null},e.prototype.resume=function(){return!!v.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,S.delay(this._tickAndRepeat,[],this)),!0)},e.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(S.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},e.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var u=null,r=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":u=this.data.substring(this.index,r);break;case"uint8array":u=this.data.subarray(this.index,r);break;case"array":case"nodebuffer":u=this.data.slice(this.index,r)}return this.index=r,this.push({data:u,meta:{percent:this.max?this.index/this.max*100:0}})},L.exports=e},{"../utils":32,"./GenericWorker":28}],28:[function(T,L,B){function S(v){this.name=v||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}S.prototype={push:function(v){this.emit("data",v)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(v){this.emit("error",v)}return!0},error:function(v){return!this.isFinished&&(this.isPaused?this.generatedError=v:(this.isFinished=!0,this.emit("error",v),this.previous&&this.previous.error(v),this.cleanUp()),!0)},on:function(v,e){return this._listeners[v].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(v,e){if(this._listeners[v])for(var u=0;u "+v:v}},L.exports=S},{}],29:[function(T,L,B){var S=T("../utils"),v=T("./ConvertWorker"),e=T("./GenericWorker"),u=T("../base64"),r=T("../support"),m=T("../external"),f=null;if(r.nodestream)try{f=T("../nodejs/NodejsStreamOutputAdapter")}catch{}function a(y,h){return new m.Promise(function(d,p){var g=[],w=y._internalType,P=y._outputType,n=y._mimeType;y.on("data",function(s,t){g.push(s),h&&h(t)}).on("error",function(s){g=[],p(s)}).on("end",function(){try{var s=function(t,l,b){switch(t){case"blob":return S.newBlob(S.transformTo("arraybuffer",l),b);case"base64":return u.encode(l);default:return S.transformTo(t,l)}}(P,function(t,l){var b,k=0,E=null,_=0;for(b=0;b"u")B.blob=!1;else{var S=new ArrayBuffer(0);try{B.blob=new Blob([S],{type:"application/zip"}).size===0}catch{try{var v=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);v.append(S),B.blob=v.getBlob("application/zip").size===0}catch{B.blob=!1}}}try{B.nodestream=!!T("readable-stream").Readable}catch{B.nodestream=!1}},{"readable-stream":16}],31:[function(T,L,B){for(var S=T("./utils"),v=T("./support"),e=T("./nodejsUtils"),u=T("./stream/GenericWorker"),r=new Array(256),m=0;m<256;m++)r[m]=252<=m?6:248<=m?5:240<=m?4:224<=m?3:192<=m?2:1;r[254]=r[254]=1;function f(){u.call(this,"utf-8 decode"),this.leftOver=null}function a(){u.call(this,"utf-8 encode")}B.utf8encode=function(i){return v.nodebuffer?e.newBufferFrom(i,"utf-8"):function(y){var h,d,p,g,w,P=y.length,n=0;for(g=0;g>>6:(d<65536?h[w++]=224|d>>>12:(h[w++]=240|d>>>18,h[w++]=128|d>>>12&63),h[w++]=128|d>>>6&63),h[w++]=128|63&d);return h}(i)},B.utf8decode=function(i){return v.nodebuffer?S.transformTo("nodebuffer",i).toString("utf-8"):function(y){var h,d,p,g,w=y.length,P=new Array(2*w);for(h=d=0;h>10&1023,P[d++]=56320|1023&p)}return P.length!==d&&(P.subarray?P=P.subarray(0,d):P.length=d),S.applyFromCharCode(P)}(i=S.transformTo(v.uint8array?"uint8array":"array",i))},S.inherits(f,u),f.prototype.processChunk=function(i){var y=S.transformTo(v.uint8array?"uint8array":"array",i.data);if(this.leftOver&&this.leftOver.length){if(v.uint8array){var h=y;(y=new Uint8Array(h.length+this.leftOver.length)).set(this.leftOver,0),y.set(h,this.leftOver.length)}else y=this.leftOver.concat(y);this.leftOver=null}var d=function(g,w){var P;for((w=w||g.length)>g.length&&(w=g.length),P=w-1;0<=P&&(192&g[P])==128;)P--;return P<0||P===0?w:P+r[g[P]]>w?P:w}(y),p=y;d!==y.length&&(v.uint8array?(p=y.subarray(0,d),this.leftOver=y.subarray(d,y.length)):(p=y.slice(0,d),this.leftOver=y.slice(d,y.length))),this.push({data:B.utf8decode(p),meta:i.meta})},f.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:B.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},B.Utf8DecodeWorker=f,S.inherits(a,u),a.prototype.processChunk=function(i){this.push({data:B.utf8encode(i.data),meta:i.meta})},B.Utf8EncodeWorker=a},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(T,L,B){var S=T("./support"),v=T("./base64"),e=T("./nodejsUtils"),u=T("./external");function r(h){return h}function m(h,d){for(var p=0;p>8;this.dir=!!(16&this.externalFileAttributes),i==0&&(this.dosPermissions=63&this.externalFileAttributes),i==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var i=S(this.extraFields[1].value);this.uncompressedSize===v.MAX_VALUE_32BITS&&(this.uncompressedSize=i.readInt(8)),this.compressedSize===v.MAX_VALUE_32BITS&&(this.compressedSize=i.readInt(8)),this.localHeaderOffset===v.MAX_VALUE_32BITS&&(this.localHeaderOffset=i.readInt(8)),this.diskNumberStart===v.MAX_VALUE_32BITS&&(this.diskNumberStart=i.readInt(4))}},readExtraFields:function(i){var y,h,d,p=i.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});i.index+4>>6:(i<65536?a[d++]=224|i>>>12:(a[d++]=240|i>>>18,a[d++]=128|i>>>12&63),a[d++]=128|i>>>6&63),a[d++]=128|63&i);return a},B.buf2binstring=function(f){return m(f,f.length)},B.binstring2buf=function(f){for(var a=new S.Buf8(f.length),i=0,y=a.length;i>10&1023,g[y++]=56320|1023&h)}return m(g,y)},B.utf8border=function(f,a){var i;for((a=a||f.length)>f.length&&(a=f.length),i=a-1;0<=i&&(192&f[i])==128;)i--;return i<0||i===0?a:i+u[f[i]]>a?i:a}},{"./common":41}],43:[function(T,L,B){L.exports=function(S,v,e,u){for(var r=65535&S|0,m=S>>>16&65535|0,f=0;e!==0;){for(e-=f=2e3>>1:v>>>1;e[u]=v}return e}();L.exports=function(v,e,u,r){var m=S,f=r+u;v^=-1;for(var a=r;a>>8^m[255&(v^e[a])];return-1^v}},{}],46:[function(T,L,B){var S,v=T("../utils/common"),e=T("./trees"),u=T("./adler32"),r=T("./crc32"),m=T("./messages"),f=0,a=4,i=0,y=-2,h=-1,d=4,p=2,g=8,w=9,P=286,n=30,s=19,t=2*P+1,l=15,b=3,k=258,E=k+b+1,_=42,C=113,o=1,R=2,V=3,F=4;function q(c,I){return c.msg=m[I],I}function W(c){return(c<<1)-(4c.avail_out&&(M=c.avail_out),M!==0&&(v.arraySet(c.output,I.pending_buf,I.pending_out,M,c.next_out),c.next_out+=M,I.pending_out+=M,c.total_out+=M,c.avail_out-=M,I.pending-=M,I.pending===0&&(I.pending_out=0))}function O(c,I){e._tr_flush_block(c,0<=c.block_start?c.block_start:-1,c.strstart-c.block_start,I),c.block_start=c.strstart,z(c.strm)}function J(c,I){c.pending_buf[c.pending++]=I}function X(c,I){c.pending_buf[c.pending++]=I>>>8&255,c.pending_buf[c.pending++]=255&I}function Z(c,I){var M,A,x=c.max_chain_length,D=c.strstart,j=c.prev_length,U=c.nice_match,N=c.strstart>c.w_size-E?c.strstart-(c.w_size-E):0,H=c.window,G=c.w_mask,$=c.prev,K=c.strstart+k,re=H[D+j-1],ee=H[D+j];c.prev_length>=c.good_match&&(x>>=2),U>c.lookahead&&(U=c.lookahead);do if(H[(M=I)+j]===ee&&H[M+j-1]===re&&H[M]===H[D]&&H[++M]===H[D+1]){D+=2,M++;do;while(H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&DN&&--x!=0);return j<=c.lookahead?j:c.lookahead}function ae(c){var I,M,A,x,D,j,U,N,H,G,$=c.w_size;do{if(x=c.window_size-c.lookahead-c.strstart,c.strstart>=$+($-E)){for(v.arraySet(c.window,c.window,$,$,0),c.match_start-=$,c.strstart-=$,c.block_start-=$,I=M=c.hash_size;A=c.head[--I],c.head[I]=$<=A?A-$:0,--M;);for(I=M=$;A=c.prev[--I],c.prev[I]=$<=A?A-$:0,--M;);x+=$}if(c.strm.avail_in===0)break;if(j=c.strm,U=c.window,N=c.strstart+c.lookahead,H=x,G=void 0,G=j.avail_in,H=b)for(D=c.strstart-c.insert,c.ins_h=c.window[D],c.ins_h=(c.ins_h<=b&&(c.ins_h=(c.ins_h<=b)if(A=e._tr_tally(c,c.strstart-c.match_start,c.match_length-b),c.lookahead-=c.match_length,c.match_length<=c.max_lazy_match&&c.lookahead>=b){for(c.match_length--;c.strstart++,c.ins_h=(c.ins_h<=b&&(c.ins_h=(c.ins_h<=b&&c.match_length<=c.prev_length){for(x=c.strstart+c.lookahead-b,A=e._tr_tally(c,c.strstart-1-c.prev_match,c.prev_length-b),c.lookahead-=c.prev_length-1,c.prev_length-=2;++c.strstart<=x&&(c.ins_h=(c.ins_h<c.pending_buf_size-5&&(M=c.pending_buf_size-5);;){if(c.lookahead<=1){if(ae(c),c.lookahead===0&&I===f)return o;if(c.lookahead===0)break}c.strstart+=c.lookahead,c.lookahead=0;var A=c.block_start+M;if((c.strstart===0||c.strstart>=A)&&(c.lookahead=c.strstart-A,c.strstart=A,O(c,!1),c.strm.avail_out===0)||c.strstart-c.block_start>=c.w_size-E&&(O(c,!1),c.strm.avail_out===0))return o}return c.insert=0,I===a?(O(c,!0),c.strm.avail_out===0?V:F):(c.strstart>c.block_start&&(O(c,!1),c.strm.avail_out),o)}),new te(4,4,8,4,le),new te(4,5,16,8,le),new te(4,6,32,32,le),new te(4,4,16,16,Q),new te(8,16,32,32,Q),new te(8,16,128,128,Q),new te(8,32,128,256,Q),new te(32,128,258,1024,Q),new te(32,258,258,4096,Q)],B.deflateInit=function(c,I){return he(c,I,g,15,8,0)},B.deflateInit2=he,B.deflateReset=de,B.deflateResetKeep=se,B.deflateSetHeader=function(c,I){return c&&c.state?c.state.wrap!==2?y:(c.state.gzhead=I,i):y},B.deflate=function(c,I){var M,A,x,D;if(!c||!c.state||5>8&255),J(A,A.gzhead.time>>16&255),J(A,A.gzhead.time>>24&255),J(A,A.level===9?2:2<=A.strategy||A.level<2?4:0),J(A,255&A.gzhead.os),A.gzhead.extra&&A.gzhead.extra.length&&(J(A,255&A.gzhead.extra.length),J(A,A.gzhead.extra.length>>8&255)),A.gzhead.hcrc&&(c.adler=r(c.adler,A.pending_buf,A.pending,0)),A.gzindex=0,A.status=69):(J(A,0),J(A,0),J(A,0),J(A,0),J(A,0),J(A,A.level===9?2:2<=A.strategy||A.level<2?4:0),J(A,3),A.status=C);else{var j=g+(A.w_bits-8<<4)<<8;j|=(2<=A.strategy||A.level<2?0:A.level<6?1:A.level===6?2:3)<<6,A.strstart!==0&&(j|=32),j+=31-j%31,A.status=C,X(A,j),A.strstart!==0&&(X(A,c.adler>>>16),X(A,65535&c.adler)),c.adler=1}if(A.status===69)if(A.gzhead.extra){for(x=A.pending;A.gzindex<(65535&A.gzhead.extra.length)&&(A.pending!==A.pending_buf_size||(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending!==A.pending_buf_size));)J(A,255&A.gzhead.extra[A.gzindex]),A.gzindex++;A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),A.gzindex===A.gzhead.extra.length&&(A.gzindex=0,A.status=73)}else A.status=73;if(A.status===73)if(A.gzhead.name){x=A.pending;do{if(A.pending===A.pending_buf_size&&(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending===A.pending_buf_size)){D=1;break}D=A.gzindexx&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),D===0&&(A.gzindex=0,A.status=91)}else A.status=91;if(A.status===91)if(A.gzhead.comment){x=A.pending;do{if(A.pending===A.pending_buf_size&&(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending===A.pending_buf_size)){D=1;break}D=A.gzindexx&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),D===0&&(A.status=103)}else A.status=103;if(A.status===103&&(A.gzhead.hcrc?(A.pending+2>A.pending_buf_size&&z(c),A.pending+2<=A.pending_buf_size&&(J(A,255&c.adler),J(A,c.adler>>8&255),c.adler=0,A.status=C)):A.status=C),A.pending!==0){if(z(c),c.avail_out===0)return A.last_flush=-1,i}else if(c.avail_in===0&&W(I)<=W(M)&&I!==a)return q(c,-5);if(A.status===666&&c.avail_in!==0)return q(c,-5);if(c.avail_in!==0||A.lookahead!==0||I!==f&&A.status!==666){var U=A.strategy===2?function(N,H){for(var G;;){if(N.lookahead===0&&(ae(N),N.lookahead===0)){if(H===f)return o;break}if(N.match_length=0,G=e._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++,G&&(O(N,!1),N.strm.avail_out===0))return o}return N.insert=0,H===a?(O(N,!0),N.strm.avail_out===0?V:F):N.last_lit&&(O(N,!1),N.strm.avail_out===0)?o:R}(A,I):A.strategy===3?function(N,H){for(var G,$,K,re,ee=N.window;;){if(N.lookahead<=k){if(ae(N),N.lookahead<=k&&H===f)return o;if(N.lookahead===0)break}if(N.match_length=0,N.lookahead>=b&&0N.lookahead&&(N.match_length=N.lookahead)}if(N.match_length>=b?(G=e._tr_tally(N,1,N.match_length-b),N.lookahead-=N.match_length,N.strstart+=N.match_length,N.match_length=0):(G=e._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++),G&&(O(N,!1),N.strm.avail_out===0))return o}return N.insert=0,H===a?(O(N,!0),N.strm.avail_out===0?V:F):N.last_lit&&(O(N,!1),N.strm.avail_out===0)?o:R}(A,I):S[A.level].func(A,I);if(U!==V&&U!==F||(A.status=666),U===o||U===V)return c.avail_out===0&&(A.last_flush=-1),i;if(U===R&&(I===1?e._tr_align(A):I!==5&&(e._tr_stored_block(A,0,0,!1),I===3&&(Y(A.head),A.lookahead===0&&(A.strstart=0,A.block_start=0,A.insert=0))),z(c),c.avail_out===0))return A.last_flush=-1,i}return I!==a?i:A.wrap<=0?1:(A.wrap===2?(J(A,255&c.adler),J(A,c.adler>>8&255),J(A,c.adler>>16&255),J(A,c.adler>>24&255),J(A,255&c.total_in),J(A,c.total_in>>8&255),J(A,c.total_in>>16&255),J(A,c.total_in>>24&255)):(X(A,c.adler>>>16),X(A,65535&c.adler)),z(c),0=M.w_size&&(D===0&&(Y(M.head),M.strstart=0,M.block_start=0,M.insert=0),H=new v.Buf8(M.w_size),v.arraySet(H,I,G-M.w_size,M.w_size,0),I=H,G=M.w_size),j=c.avail_in,U=c.next_in,N=c.input,c.avail_in=G,c.next_in=0,c.input=I,ae(M);M.lookahead>=b;){for(A=M.strstart,x=M.lookahead-(b-1);M.ins_h=(M.ins_h<>>=b=l>>>24,w-=b,(b=l>>>16&255)===0)R[m++]=65535&l;else{if(!(16&b)){if(!(64&b)){l=P[(65535&l)+(g&(1<>>=b,w-=b),w<15&&(g+=o[u++]<>>=b=l>>>24,w-=b,!(16&(b=l>>>16&255))){if(!(64&b)){l=n[(65535&l)+(g&(1<>>=b,w-=b,(b=m-f)>3,g&=(1<<(w-=k<<3))-1,S.next_in=u,S.next_out=m,S.avail_in=u>>24&255)+(_>>>8&65280)+((65280&_)<<8)+((255&_)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new S.Buf16(320),this.work=new S.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function w(_){var C;return _&&_.state?(C=_.state,_.total_in=_.total_out=C.total=0,_.msg="",C.wrap&&(_.adler=1&C.wrap),C.mode=y,C.last=0,C.havedict=0,C.dmax=32768,C.head=null,C.hold=0,C.bits=0,C.lencode=C.lendyn=new S.Buf32(h),C.distcode=C.distdyn=new S.Buf32(d),C.sane=1,C.back=-1,a):i}function P(_){var C;return _&&_.state?((C=_.state).wsize=0,C.whave=0,C.wnext=0,w(_)):i}function n(_,C){var o,R;return _&&_.state?(R=_.state,C<0?(o=0,C=-C):(o=1+(C>>4),C<48&&(C&=15)),C&&(C<8||15=F.wsize?(S.arraySet(F.window,C,o-F.wsize,F.wsize,0),F.wnext=0,F.whave=F.wsize):(R<(V=F.wsize-F.wnext)&&(V=R),S.arraySet(F.window,C,o-R,V,F.wnext),(R-=V)?(S.arraySet(F.window,C,o-R,R,0),F.wnext=R,F.whave=F.wsize):(F.wnext+=V,F.wnext===F.wsize&&(F.wnext=0),F.whave>>8&255,o.check=e(o.check,D,2,0),O=z=0,o.mode=2;break}if(o.flags=0,o.head&&(o.head.done=!1),!(1&o.wrap)||(((255&z)<<8)+(z>>8))%31){_.msg="incorrect header check",o.mode=30;break}if((15&z)!=8){_.msg="unknown compression method",o.mode=30;break}if(O-=4,c=8+(15&(z>>>=4)),o.wbits===0)o.wbits=c;else if(c>o.wbits){_.msg="invalid window size",o.mode=30;break}o.dmax=1<>8&1),512&o.flags&&(D[0]=255&z,D[1]=z>>>8&255,o.check=e(o.check,D,2,0)),O=z=0,o.mode=3;case 3:for(;O<32;){if(W===0)break e;W--,z+=R[F++]<>>8&255,D[2]=z>>>16&255,D[3]=z>>>24&255,o.check=e(o.check,D,4,0)),O=z=0,o.mode=4;case 4:for(;O<16;){if(W===0)break e;W--,z+=R[F++]<>8),512&o.flags&&(D[0]=255&z,D[1]=z>>>8&255,o.check=e(o.check,D,2,0)),O=z=0,o.mode=5;case 5:if(1024&o.flags){for(;O<16;){if(W===0)break e;W--,z+=R[F++]<>>8&255,o.check=e(o.check,D,2,0)),O=z=0}else o.head&&(o.head.extra=null);o.mode=6;case 6:if(1024&o.flags&&(W<(Z=o.length)&&(Z=W),Z&&(o.head&&(c=o.head.extra_len-o.length,o.head.extra||(o.head.extra=new Array(o.head.extra_len)),S.arraySet(o.head.extra,R,F,Z,c)),512&o.flags&&(o.check=e(o.check,R,Z,F)),W-=Z,F+=Z,o.length-=Z),o.length))break e;o.length=0,o.mode=7;case 7:if(2048&o.flags){if(W===0)break e;for(Z=0;c=R[F+Z++],o.head&&c&&o.length<65536&&(o.head.name+=String.fromCharCode(c)),c&&Z>9&1,o.head.done=!0),_.adler=o.check=0,o.mode=12;break;case 10:for(;O<32;){if(W===0)break e;W--,z+=R[F++]<>>=7&O,O-=7&O,o.mode=27;break}for(;O<3;){if(W===0)break e;W--,z+=R[F++]<>>=1)){case 0:o.mode=14;break;case 1:if(k(o),o.mode=20,C!==6)break;z>>>=2,O-=2;break e;case 2:o.mode=17;break;case 3:_.msg="invalid block type",o.mode=30}z>>>=2,O-=2;break;case 14:for(z>>>=7&O,O-=7&O;O<32;){if(W===0)break e;W--,z+=R[F++]<>>16^65535)){_.msg="invalid stored block lengths",o.mode=30;break}if(o.length=65535&z,O=z=0,o.mode=15,C===6)break e;case 15:o.mode=16;case 16:if(Z=o.length){if(W>>=5,O-=5,o.ndist=1+(31&z),z>>>=5,O-=5,o.ncode=4+(15&z),z>>>=4,O-=4,286>>=3,O-=3}for(;o.have<19;)o.lens[j[o.have++]]=0;if(o.lencode=o.lendyn,o.lenbits=7,M={bits:o.lenbits},I=r(0,o.lens,0,19,o.lencode,0,o.work,M),o.lenbits=M.bits,I){_.msg="invalid code lengths set",o.mode=30;break}o.have=0,o.mode=19;case 19:for(;o.have>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=Q,O-=Q,o.lens[o.have++]=oe;else{if(oe===16){for(A=Q+2;O>>=Q,O-=Q,o.have===0){_.msg="invalid bit length repeat",o.mode=30;break}c=o.lens[o.have-1],Z=3+(3&z),z>>>=2,O-=2}else if(oe===17){for(A=Q+3;O>>=Q)),z>>>=3,O-=3}else{for(A=Q+7;O>>=Q)),z>>>=7,O-=7}if(o.have+Z>o.nlen+o.ndist){_.msg="invalid bit length repeat",o.mode=30;break}for(;Z--;)o.lens[o.have++]=c}}if(o.mode===30)break;if(o.lens[256]===0){_.msg="invalid code -- missing end-of-block",o.mode=30;break}if(o.lenbits=9,M={bits:o.lenbits},I=r(m,o.lens,0,o.nlen,o.lencode,0,o.work,M),o.lenbits=M.bits,I){_.msg="invalid literal/lengths set",o.mode=30;break}if(o.distbits=6,o.distcode=o.distdyn,M={bits:o.distbits},I=r(f,o.lens,o.nlen,o.ndist,o.distcode,0,o.work,M),o.distbits=M.bits,I){_.msg="invalid distances set",o.mode=30;break}if(o.mode=20,C===6)break e;case 20:o.mode=21;case 21:if(6<=W&&258<=Y){_.next_out=q,_.avail_out=Y,_.next_in=F,_.avail_in=W,o.hold=z,o.bits=O,u(_,X),q=_.next_out,V=_.output,Y=_.avail_out,F=_.next_in,R=_.input,W=_.avail_in,z=o.hold,O=o.bits,o.mode===12&&(o.back=-1);break}for(o.back=0;te=(x=o.lencode[z&(1<>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>se)])>>>16&255,oe=65535&x,!(se+(Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=se,O-=se,o.back+=se}if(z>>>=Q,O-=Q,o.back+=Q,o.length=oe,te===0){o.mode=26;break}if(32&te){o.back=-1,o.mode=12;break}if(64&te){_.msg="invalid literal/length code",o.mode=30;break}o.extra=15&te,o.mode=22;case 22:if(o.extra){for(A=o.extra;O>>=o.extra,O-=o.extra,o.back+=o.extra}o.was=o.length,o.mode=23;case 23:for(;te=(x=o.distcode[z&(1<>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>se)])>>>16&255,oe=65535&x,!(se+(Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=se,O-=se,o.back+=se}if(z>>>=Q,O-=Q,o.back+=Q,64&te){_.msg="invalid distance code",o.mode=30;break}o.offset=oe,o.extra=15&te,o.mode=24;case 24:if(o.extra){for(A=o.extra;O>>=o.extra,O-=o.extra,o.back+=o.extra}if(o.offset>o.dmax){_.msg="invalid distance too far back",o.mode=30;break}o.mode=25;case 25:if(Y===0)break e;if(Z=X-Y,o.offset>Z){if((Z=o.offset-Z)>o.whave&&o.sane){_.msg="invalid distance too far back",o.mode=30;break}ae=Z>o.wnext?(Z-=o.wnext,o.wsize-Z):o.wnext-Z,Z>o.length&&(Z=o.length),le=o.window}else le=V,ae=q-o.offset,Z=o.length;for(Yt?(b=ae[le+d[C]],O[J+d[C]]):(b=96,0),g=1<<_-q,o=w=1<>q)+(w-=g)]=l<<24|b<<16|k|0,w!==0;);for(g=1<<_-1;z&g;)g>>=1;if(g!==0?(z&=g-1,z+=g):z=0,C++,--X[_]==0){if(_===R)break;_=f[a+d[C]]}if(V<_&&(z&n)!==P){for(q===0&&(q=V),s+=o,W=1<<(F=_-q);F+q>>7)]}function J(x,D){x.pending_buf[x.pending++]=255&D,x.pending_buf[x.pending++]=D>>>8&255}function X(x,D,j){x.bi_valid>p-j?(x.bi_buf|=D<>p-x.bi_valid,x.bi_valid+=j-p):(x.bi_buf|=D<>>=1,j<<=1,0<--D;);return j>>>1}function le(x,D,j){var U,N,H=new Array(d+1),G=0;for(U=1;U<=d;U++)H[U]=G=G+j[U-1]<<1;for(N=0;N<=D;N++){var $=x[2*N+1];$!==0&&(x[2*N]=ae(H[$]++,$))}}function Q(x){var D;for(D=0;D>1;1<=j;j--)se(x,H,j);for(N=K;j=x.heap[1],x.heap[1]=x.heap[x.heap_len--],se(x,H,1),U=x.heap[1],x.heap[--x.heap_max]=j,x.heap[--x.heap_max]=U,H[2*N]=H[2*j]+H[2*U],x.depth[N]=(x.depth[j]>=x.depth[U]?x.depth[j]:x.depth[U])+1,H[2*j+1]=H[2*U+1]=N,x.heap[1]=N++,se(x,H,1),2<=x.heap_len;);x.heap[--x.heap_max]=x.heap[1],function(ee,ue){var me,pe,ge,ie,ye,we,fe=ue.dyn_tree,Se=ue.max_code,Te=ue.stat_desc.static_tree,Ee=ue.stat_desc.has_stree,De=ue.stat_desc.extra_bits,Ae=ue.stat_desc.extra_base,be=ue.stat_desc.max_length,ve=0;for(ie=0;ie<=d;ie++)ee.bl_count[ie]=0;for(fe[2*ee.heap[ee.heap_max]+1]=0,me=ee.heap_max+1;me>=7;N>>=1)if(1&re&&$.dyn_ltree[2*K]!==0)return v;if($.dyn_ltree[18]!==0||$.dyn_ltree[20]!==0||$.dyn_ltree[26]!==0)return e;for(K=32;K>>3,(H=x.static_len+3+7>>>3)<=N&&(N=H)):N=H=j+5,j+4<=N&&D!==-1?A(x,D,j,U):x.strategy===4||H===N?(X(x,2+(U?1:0),3),de(x,E,_)):(X(x,4+(U?1:0),3),function($,K,re,ee){var ue;for(X($,K-257,5),X($,re-1,5),X($,ee-4,4),ue=0;ue>>8&255,x.pending_buf[x.d_buf+2*x.last_lit+1]=255&D,x.pending_buf[x.l_buf+x.last_lit]=255&j,x.last_lit++,D===0?x.dyn_ltree[2*j]++:(x.matches++,D--,x.dyn_ltree[2*(o[j]+f+1)]++,x.dyn_dtree[2*O(D)]++),x.last_lit===x.lit_bufsize-1},B._tr_align=function(x){X(x,2,3),Z(x,w,E),function(D){D.bi_valid===16?(J(D,D.bi_buf),D.bi_buf=0,D.bi_valid=0):8<=D.bi_valid&&(D.pending_buf[D.pending++]=255&D.bi_buf,D.bi_buf>>=8,D.bi_valid-=8)}(x)}},{"../utils/common":41}],53:[function(T,L,B){L.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(T,L,B){(function(S){(function(v,e){if(!v.setImmediate){var u,r,m,f,a=1,i={},y=!1,h=v.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(v);d=d&&d.setTimeout?d:v,u={}.toString.call(v.process)==="[object process]"?function(P){process.nextTick(function(){g(P)})}:function(){if(v.postMessage&&!v.importScripts){var P=!0,n=v.onmessage;return v.onmessage=function(){P=!1},v.postMessage("","*"),v.onmessage=n,P}}()?(f="setImmediate$"+Math.random()+"$",v.addEventListener?v.addEventListener("message",w,!1):v.attachEvent("onmessage",w),function(P){v.postMessage(f+P,"*")}):v.MessageChannel?((m=new MessageChannel).port1.onmessage=function(P){g(P.data)},function(P){m.port2.postMessage(P)}):h&&"onreadystatechange"in h.createElement("script")?(r=h.documentElement,function(P){var n=h.createElement("script");n.onreadystatechange=function(){g(P),n.onreadystatechange=null,r.removeChild(n),n=null},r.appendChild(n)}):function(P){setTimeout(g,0,P)},d.setImmediate=function(P){typeof P!="function"&&(P=new Function(""+P));for(var n=new Array(arguments.length-1),s=0;s"u"?S===void 0?this:S:self)}).call(this,typeof _e<"u"?_e:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}(xe)),xe.exports}(function(ne,ce){(function(T,L){ne.exports=L(Be())})(globalThis,T=>(()=>{var L={438:(v,e,u)=>{u.r(e),u.d(e,{default:()=>g});var r=u(537),m=u.n(r),f=u(645),a=u.n(f),i=u(806),y=u.n(i),h=new URL(u(583),u.b),d=a()(m()),p=y()(h);d.push([v.id,`@namespace "http://www.w3.org/1998/Math/MathML";math{display:inline-block;line-height:initial}mfrac{display:inline-block;vertical-align:-50%;text-align:center}mfrac>:first-child{border-bottom:solid thin currentColor}mfrac>*{display:block}msub>:nth-child(2){font-size:smaller;vertical-align:sub}msup>:nth-child(2){font-size:smaller;vertical-align:super}munder,mover,munderover{display:inline-flex;flex-flow:column nowrap;vertical-align:middle;text-align:center}munder>:not(:first-child),mover>:not(:first-child),munderover>:not(:first-child){font-size:smaller}munderover>:last-child{order:-1}mroot,msqrt{position:relative;display:inline-block;border-top:solid thin currentColor;margin-top:.5px;vertical-align:middle;margin-left:1ch}mroot:before,msqrt:before{content:"";display:inline-block;position:absolute;width:1ch;left:-1ch;top:-1px;bottom:0;background-image:url(${p})}`,"",{version:3,sources:["webpack://./src/mathml.scss"],names:[],mappings:"AAAA,+CAAA,CAEA,KACI,oBAAA,CACA,mBAAA,CAGJ,MACI,oBAAA,CACA,mBAAA,CACA,iBAAA,CAEA,mBACI,qCAAA,CAGJ,QACI,aAAA,CAKJ,mBACI,iBAAA,CACA,kBAAA,CAKJ,mBACI,iBAAA,CACA,oBAAA,CAIR,wBACI,mBAAA,CACA,uBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,iFACI,iBAAA,CAKJ,uBAAA,QAAA,CAGJ,YACI,iBAAA,CACA,oBAAA,CACA,kCAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAEA,0BACI,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,SAAA,CACA,SAAA,CACA,QAAA,CACA,QAAA,CACA,wDAAA",sourcesContent:[`@namespace "http://www.w3.org/1998/Math/MathML";\r +\r +math {\r + display: inline-block;\r + line-height: initial;\r +}\r +\r +mfrac {\r + display: inline-block;\r + vertical-align: -50%;\r + text-align: center;\r +\r + &>:first-child {\r + border-bottom: solid thin currentColor;\r + }\r +\r + &>* {\r + display: block;\r + }\r +}\r +\r +msub {\r + &>:nth-child(2) {\r + font-size: smaller;\r + vertical-align: sub;\r + }\r +}\r +\r +msup {\r + &>:nth-child(2) {\r + font-size: smaller;\r + vertical-align: super;\r + }\r +}\r +\r +munder, mover, munderover {\r + display: inline-flex;\r + flex-flow: column nowrap;\r + vertical-align: middle;\r + text-align: center;\r +\r + &>:not(:first-child) {\r + font-size: smaller;\r + }\r +}\r +\r +munderover {\r + &>:last-child { order: -1; }\r +}\r +\r +mroot, msqrt {\r + position: relative;\r + display: inline-block;\r + border-top: solid thin currentColor; \r + margin-top: 0.5px;\r + vertical-align: middle; \r + margin-left: 1ch; \r +\r + &:before {\r + content: "";\r + display: inline-block;\r + position: absolute;\r + width: 1ch;\r + left: -1ch;\r + top: -1px;\r + bottom: 0;\r + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 100' preserveAspectRatio='none'%3E%3Cpath d='m0,75 l5,0 l5,25 l10,-100' stroke='black' fill='none' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");\r + }\r +}`],sourceRoot:""}]);const g=d.toString()},645:v=>{v.exports=function(e){var u=[];return u.toString=function(){return this.map(function(r){var m="",f=r[5]!==void 0;return r[4]&&(m+="@supports (".concat(r[4],") {")),r[2]&&(m+="@media ".concat(r[2]," {")),f&&(m+="@layer".concat(r[5].length>0?" ".concat(r[5]):""," {")),m+=e(r),f&&(m+="}"),r[2]&&(m+="}"),r[4]&&(m+="}"),m}).join("")},u.i=function(r,m,f,a,i){typeof r=="string"&&(r=[[null,r,void 0]]);var y={};if(f)for(var h=0;h0?" ".concat(g[5]):""," {").concat(g[1],"}")),g[5]=i),m&&(g[2]&&(g[1]="@media ".concat(g[2]," {").concat(g[1],"}")),g[2]=m),a&&(g[4]?(g[1]="@supports (".concat(g[4],") {").concat(g[1],"}"),g[4]=a):g[4]="".concat(a)),u.push(g))}},u}},806:v=>{v.exports=function(e,u){return u||(u={}),e&&(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),u.hash&&(e+=u.hash),/["'() \t\n]|(%20)/.test(e)||u.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e)}},537:v=>{v.exports=function(e){var u=e[1],r=e[3];if(!r)return u;if(typeof btoa=="function"){var m=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),f="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(m),a="/*# ".concat(f," */");return[u].concat([a]).join(` +`)}return[u].join(` +`)}},522:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.OpenXmlPackage=void 0;const r=u(626),m=u(472),f=u(593),a=u(461);class i{constructor(h,d){this._zip=h,this.options=d,this.xmlParser=new m.XmlParser}get(h){return this._zip.files[function(d){return d.startsWith("/")?d.substr(1):d}(h)]}update(h,d){this._zip.file(h,d)}static async load(h,d){const p=await r.loadAsync(h);return new i(p,d)}save(h="blob"){return this._zip.generateAsync({type:h})}load(h,d="string"){var p,g;return(g=(p=this.get(h))===null||p===void 0?void 0:p.async(d))!==null&&g!==void 0?g:Promise.resolve(null)}async loadRelationships(h=null){let d="_rels/.rels";if(h!=null){const[g,w]=(0,f.splitPath)(h);d=`${g}_rels/${w}.rels`}const p=await this.load(d);return p?(0,a.parseRelationships)(this.parseXmlDocument(p).firstElementChild,this.xmlParser):null}parseXmlDocument(h){return(0,m.parseXmlString)(h,this.options.trimXmlDeclaration)}}e.OpenXmlPackage=i},530:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Part=void 0;const r=u(472);e.Part=class{constructor(m,f){this._package=m,this.path=f}async load(){this.rels=await this._package.loadRelationships(this.path);const m=await this._package.load(this.path),f=this._package.parseXmlDocument(m);this._package.options.keepOrigin&&(this._xmlDocument=f),this.parseXml(f.firstElementChild)}save(){this._package.update(this.path,(0,r.serializeXmlString)(this._xmlDocument))}parseXml(m){}}},461:(v,e)=>{var u;Object.defineProperty(e,"__esModule",{value:!0}),e.parseRelationships=e.RelationshipTypes=void 0,function(r){r.OfficeDocument="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",r.FontTable="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable",r.Image="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",r.Numbering="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering",r.Styles="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",r.StylesWithEffects="http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects",r.Theme="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",r.Settings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings",r.WebSettings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings",r.Hyperlink="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",r.Footnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes",r.Endnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes",r.Footer="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer",r.Header="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header",r.ExtendedProperties="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",r.CoreProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",r.CustomProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties"}(u||(e.RelationshipTypes=u={})),e.parseRelationships=function(r,m){return m.elements(r).map(f=>({id:m.attr(f,"Id"),type:m.attr(f,"Type"),target:m.attr(f,"Target"),targetMode:m.attr(f,"TargetMode")}))}},168:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.DocumentParser=e.autos=void 0;const r=u(120),m=u(109),f=u(59),a=u(472),i=u(488),y=u(172),h=u(149),d=u(320);e.autos={shd:"inherit",color:"black",borderColor:"black",highlight:"transparent"};const p=[],g={oMath:r.DomType.MmlMath,oMathPara:r.DomType.MmlMathParagraph,f:r.DomType.MmlFraction,func:r.DomType.MmlFunction,fName:r.DomType.MmlFunctionName,num:r.DomType.MmlNumerator,den:r.DomType.MmlDenominator,rad:r.DomType.MmlRadical,deg:r.DomType.MmlDegree,e:r.DomType.MmlBase,sSup:r.DomType.MmlSuperscript,sSub:r.DomType.MmlSubscript,sPre:r.DomType.MmlPreSubSuper,sup:r.DomType.MmlSuperArgument,sub:r.DomType.MmlSubArgument,d:r.DomType.MmlDelimiter,nary:r.DomType.MmlNary,eqArr:r.DomType.MmlEquationArray,lim:r.DomType.MmlLimit,limLow:r.DomType.MmlLimitLower,m:r.DomType.MmlMatrix,mr:r.DomType.MmlMatrixRow,box:r.DomType.MmlBox,bar:r.DomType.MmlBar,groupChr:r.DomType.MmlGroupChar};e.DocumentParser=class{constructor(s){this.options=Object.assign({ignoreWidth:!1,debug:!1},s)}parseNotes(s,t,l){var b=[];for(let k of a.default.elements(s,t)){const E=new l;E.id=a.default.attr(k,"id"),E.noteType=a.default.attr(k,"type"),E.children=this.parseBodyElements(k),b.push(E)}return b}parseDocumentFile(s){var t=a.default.element(s,"body"),l=a.default.element(s,"background"),b=a.default.element(t,"sectPr");return{type:r.DomType.Document,children:this.parseBodyElements(t),props:b?(0,f.parseSectionProperties)(b,a.default):{},cssStyle:l?this.parseBackground(l):{}}}parseBackground(s){var t={},l=P.colorAttr(s,"color");return l&&(t["background-color"]=l),t}parseBodyElements(s){var t=[];for(let l of a.default.elements(s))switch(l.localName){case"p":t.push(this.parseParagraph(l));break;case"tbl":t.push(this.parseTable(l));break;case"sdt":t.push(...this.parseSdt(l,b=>this.parseBodyElements(b)))}return t}parseStylesFile(s){var t=[];return P.foreach(s,l=>{switch(l.localName){case"style":t.push(this.parseStyle(l));break;case"docDefaults":t.push(this.parseDefaultStyles(l))}}),t}parseDefaultStyles(s){var t={id:null,name:null,target:null,basedOn:null,styles:[]};return P.foreach(s,l=>{switch(l.localName){case"rPrDefault":var b=a.default.element(l,"rPr");b&&t.styles.push({target:"span",values:this.parseDefaultProperties(b,{})});break;case"pPrDefault":var k=a.default.element(l,"pPr");k&&t.styles.push({target:"p",values:this.parseDefaultProperties(k,{})})}}),t}parseStyle(s){var t={id:a.default.attr(s,"styleId"),isDefault:a.default.boolAttr(s,"default"),name:null,target:null,basedOn:null,styles:[],linked:null};switch(a.default.attr(s,"type")){case"paragraph":t.target="p";break;case"table":t.target="table";break;case"character":t.target="span"}return P.foreach(s,l=>{switch(l.localName){case"basedOn":t.basedOn=a.default.attr(l,"val");break;case"name":t.name=a.default.attr(l,"val");break;case"link":t.linked=a.default.attr(l,"val");break;case"next":t.next=a.default.attr(l,"val");break;case"aliases":t.aliases=a.default.attr(l,"val").split(",");break;case"pPr":t.styles.push({target:"p",values:this.parseDefaultProperties(l,{})}),t.paragraphProps=(0,m.parseParagraphProperties)(l,a.default);break;case"rPr":t.styles.push({target:"span",values:this.parseDefaultProperties(l,{})}),t.runProps=(0,i.parseRunProperties)(l,a.default);break;case"tblPr":case"tcPr":t.styles.push({target:"td",values:this.parseDefaultProperties(l,{})});break;case"tblStylePr":for(let b of this.parseTableStyle(l))t.styles.push(b);break;case"rsid":case"qFormat":case"hidden":case"semiHidden":case"unhideWhenUsed":case"autoRedefine":case"uiPriority":break;default:this.options.debug&&console.warn(`DOCX: Unknown style element: ${l.localName}`)}}),t}parseTableStyle(s){var t=[],l=a.default.attr(s,"type"),b="",k="";switch(l){case"firstRow":k=".first-row",b="tr.first-row td";break;case"lastRow":k=".last-row",b="tr.last-row td";break;case"firstCol":k=".first-col",b="td.first-col";break;case"lastCol":k=".last-col",b="td.last-col";break;case"band1Vert":k=":not(.no-vband)",b="td.odd-col";break;case"band2Vert":k=":not(.no-vband)",b="td.even-col";break;case"band1Horz":k=":not(.no-hband)",b="tr.odd-row";break;case"band2Horz":k=":not(.no-hband)",b="tr.even-row";break;default:return[]}return P.foreach(s,E=>{switch(E.localName){case"pPr":t.push({target:`${b} p`,mod:k,values:this.parseDefaultProperties(E,{})});break;case"rPr":t.push({target:`${b} span`,mod:k,values:this.parseDefaultProperties(E,{})});break;case"tblPr":case"tcPr":t.push({target:b,mod:k,values:this.parseDefaultProperties(E,{})})}}),t}parseNumberingFile(s){var t=[],l={},b=[];return P.foreach(s,k=>{switch(k.localName){case"abstractNum":this.parseAbstractNumbering(k,b).forEach(C=>t.push(C));break;case"numPicBullet":b.push(this.parseNumberingPicBullet(k));break;case"num":var E=a.default.attr(k,"numId"),_=a.default.elementAttr(k,"abstractNumId","val");l[_]=E}}),t.forEach(k=>k.id=l[k.id]),t}parseNumberingPicBullet(s){var t=a.default.element(s,"pict"),l=t&&a.default.element(t,"shape"),b=l&&a.default.element(l,"imagedata");return b?{id:a.default.intAttr(s,"numPicBulletId"),src:a.default.attr(b,"id"),style:a.default.attr(l,"style")}:null}parseAbstractNumbering(s,t){var l=[],b=a.default.attr(s,"abstractNumId");return P.foreach(s,k=>{k.localName==="lvl"&&l.push(this.parseNumberingLevel(b,k,t))}),l}parseNumberingLevel(s,t,l){var b={id:s,level:a.default.intAttr(t,"ilvl"),start:1,pStyleName:void 0,pStyle:{},rStyle:{},suff:"tab"};return P.foreach(t,k=>{switch(k.localName){case"start":b.start=a.default.intAttr(k,"val");break;case"pPr":this.parseDefaultProperties(k,b.pStyle);break;case"rPr":this.parseDefaultProperties(k,b.rStyle);break;case"lvlPicBulletId":var E=a.default.intAttr(k,"val");b.bullet=l.find(_=>_.id==E);break;case"lvlText":b.levelText=a.default.attr(k,"val");break;case"pStyle":b.pStyleName=a.default.attr(k,"val");break;case"numFmt":b.format=a.default.attr(k,"val");break;case"suff":b.suff=a.default.attr(k,"val")}}),b}parseSdt(s,t){const l=a.default.element(s,"sdtContent");return l?t(l):[]}parseInserted(s,t){var l,b;return{type:r.DomType.Inserted,children:(b=(l=t(s))===null||l===void 0?void 0:l.children)!==null&&b!==void 0?b:[]}}parseDeleted(s,t){var l,b;return{type:r.DomType.Deleted,children:(b=(l=t(s))===null||l===void 0?void 0:l.children)!==null&&b!==void 0?b:[]}}parseParagraph(s){var t={type:r.DomType.Paragraph,children:[]};for(let l of a.default.elements(s))switch(l.localName){case"pPr":this.parseParagraphProperties(l,t);break;case"r":t.children.push(this.parseRun(l,t));break;case"hyperlink":t.children.push(this.parseHyperlink(l,t));break;case"bookmarkStart":t.children.push((0,y.parseBookmarkStart)(l,a.default));break;case"bookmarkEnd":t.children.push((0,y.parseBookmarkEnd)(l,a.default));break;case"oMath":case"oMathPara":t.children.push(this.parseMathElement(l));break;case"sdt":t.children.push(...this.parseSdt(l,b=>this.parseParagraph(b).children));break;case"ins":t.children.push(this.parseInserted(l,b=>this.parseParagraph(b)));break;case"del":t.children.push(this.parseDeleted(l,b=>this.parseParagraph(b)))}return t}parseParagraphProperties(s,t){this.parseDefaultProperties(s,t.cssStyle={},null,l=>{if((0,m.parseParagraphProperty)(l,t,a.default))return!0;switch(l.localName){case"pStyle":t.styleName=a.default.attr(l,"val");break;case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;case"framePr":this.parseFrame(l,t);break;case"rPr":break;default:return!1}return!0})}parseFrame(s,t){a.default.attr(s,"dropCap")=="drop"&&(t.cssStyle.float="left")}parseHyperlink(s,t){var l={type:r.DomType.Hyperlink,parent:t,children:[]},b=a.default.attr(s,"anchor"),k=a.default.attr(s,"id");return b&&(l.href="#"+b),k&&(l.id=k),P.foreach(s,E=>{E.localName==="r"&&l.children.push(this.parseRun(E,l))}),l}parseRun(s,t){var l={type:r.DomType.Run,parent:t,children:[]};return P.foreach(s,b=>{switch((b=this.checkAlternateContent(b)).localName){case"t":l.children.push({type:r.DomType.Text,text:b.textContent});break;case"delText":l.children.push({type:r.DomType.DeletedText,text:b.textContent});break;case"fldSimple":l.children.push({type:r.DomType.SimpleField,instruction:a.default.attr(b,"instr"),lock:a.default.boolAttr(b,"lock",!1),dirty:a.default.boolAttr(b,"dirty",!1)});break;case"instrText":l.fieldRun=!0,l.children.push({type:r.DomType.Instruction,text:b.textContent});break;case"fldChar":l.fieldRun=!0,l.children.push({type:r.DomType.ComplexField,charType:a.default.attr(b,"fldCharType"),lock:a.default.boolAttr(b,"lock",!1),dirty:a.default.boolAttr(b,"dirty",!1)});break;case"noBreakHyphen":l.children.push({type:r.DomType.NoBreakHyphen});break;case"br":l.children.push({type:r.DomType.Break,break:a.default.attr(b,"type")||"textWrapping"});break;case"lastRenderedPageBreak":l.children.push({type:r.DomType.Break,break:"lastRenderedPageBreak"});break;case"sym":l.children.push({type:r.DomType.Symbol,font:a.default.attr(b,"font"),char:a.default.attr(b,"char")});break;case"tab":l.children.push({type:r.DomType.Tab});break;case"footnoteReference":l.children.push({type:r.DomType.FootnoteReference,id:a.default.attr(b,"id")});break;case"endnoteReference":l.children.push({type:r.DomType.EndnoteReference,id:a.default.attr(b,"id")});break;case"drawing":let k=this.parseDrawing(b);k&&(l.children=[k]);break;case"pict":l.children.push(this.parseVmlPicture(b));break;case"rPr":this.parseRunProperties(b,l)}}),l}parseMathElement(s){const t=`${s.localName}Pr`,l={type:g[s.localName],children:[]};for(const k of a.default.elements(s))if(g[k.localName])l.children.push(this.parseMathElement(k));else if(k.localName=="r"){var b=this.parseRun(k);b.type=r.DomType.MmlRun,l.children.push(b)}else k.localName==t&&(l.props=this.parseMathProperies(k));return l}parseMathProperies(s){const t={};for(const l of a.default.elements(s))switch(l.localName){case"chr":t.char=a.default.attr(l,"val");break;case"vertJc":t.verticalJustification=a.default.attr(l,"val");break;case"pos":t.position=a.default.attr(l,"val");break;case"degHide":t.hideDegree=a.default.boolAttr(l,"val");break;case"begChr":t.beginChar=a.default.attr(l,"val");break;case"endChr":t.endChar=a.default.attr(l,"val")}return t}parseRunProperties(s,t){this.parseDefaultProperties(s,t.cssStyle={},null,l=>{switch(l.localName){case"rStyle":t.styleName=a.default.attr(l,"val");break;case"vertAlign":t.verticalAlign=n.valueOfVertAlign(l,!0);break;default:return!1}return!0})}parseVmlPicture(s){const t={type:r.DomType.VmlPicture,children:[]};for(const l of a.default.elements(s)){const b=(0,d.parseVmlElement)(l,this);b&&t.children.push(b)}return t}checkAlternateContent(s){var t;if(s.localName!="AlternateContent")return s;var l=a.default.element(s,"Choice");if(l){var b=a.default.attr(l,"Requires"),k=s.lookupNamespaceURI(b);if(p.includes(k))return l.firstElementChild}return(t=a.default.element(s,"Fallback"))===null||t===void 0?void 0:t.firstElementChild}parseDrawing(s){for(var t of a.default.elements(s))switch(t.localName){case"inline":case"anchor":return this.parseDrawingWrapper(t)}}parseDrawingWrapper(s){var t,l={type:r.DomType.Drawing,children:[],cssStyle:{}},b=s.localName=="anchor";let k=null,E=a.default.boolAttr(s,"simplePos"),_={relative:"page",align:"left",offset:"0"},C={relative:"page",align:"top",offset:"0"};for(var o of a.default.elements(s))switch(o.localName){case"simplePos":E&&(_.offset=a.default.lengthAttr(o,"x",h.LengthUsage.Emu),C.offset=a.default.lengthAttr(o,"y",h.LengthUsage.Emu));break;case"extent":l.cssStyle.width=a.default.lengthAttr(o,"cx",h.LengthUsage.Emu),l.cssStyle.height=a.default.lengthAttr(o,"cy",h.LengthUsage.Emu);break;case"positionH":case"positionV":if(!E){let q=o.localName=="positionH"?_:C;var R=a.default.element(o,"align"),V=a.default.element(o,"posOffset");q.relative=(t=a.default.attr(o,"relativeFrom"))!==null&&t!==void 0?t:q.relative,R&&(q.align=R.textContent),V&&(q.offset=P.sizeValue(V,h.LengthUsage.Emu))}break;case"wrapTopAndBottom":k="wrapTopAndBottom";break;case"wrapNone":k="wrapNone";break;case"graphic":var F=this.parseGraphic(o);F&&l.children.push(F)}return k=="wrapTopAndBottom"?(l.cssStyle.display="block",_.align&&(l.cssStyle["text-align"]=_.align,l.cssStyle.width="100%")):k=="wrapNone"?(l.cssStyle.display="block",l.cssStyle.position="relative",l.cssStyle.width="0px",l.cssStyle.height="0px",_.offset&&(l.cssStyle.left=_.offset),C.offset&&(l.cssStyle.top=C.offset)):!b||_.align!="left"&&_.align!="right"||(l.cssStyle.float=_.align),l}parseGraphic(s){var t=a.default.element(s,"graphicData");for(let l of a.default.elements(t))if(l.localName==="pic")return this.parsePicture(l);return null}parsePicture(s){var t={type:r.DomType.Image,src:"",cssStyle:{}},l=a.default.element(s,"blipFill"),b=a.default.element(l,"blip");t.src=a.default.attr(b,"embed");var k=a.default.element(s,"spPr"),E=a.default.element(k,"xfrm");for(var _ of(t.cssStyle.position="relative",a.default.elements(E)))switch(_.localName){case"ext":t.cssStyle.width=a.default.lengthAttr(_,"cx",h.LengthUsage.Emu),t.cssStyle.height=a.default.lengthAttr(_,"cy",h.LengthUsage.Emu);break;case"off":t.cssStyle.left=a.default.lengthAttr(_,"x",h.LengthUsage.Emu),t.cssStyle.top=a.default.lengthAttr(_,"y",h.LengthUsage.Emu)}return t}parseTable(s){var t={type:r.DomType.Table,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tr":t.children.push(this.parseTableRow(l));break;case"tblGrid":t.columns=this.parseTableColumns(l);break;case"tblPr":this.parseTableProperties(l,t)}}),t}parseTableColumns(s){var t=[];return P.foreach(s,l=>{l.localName==="gridCol"&&t.push({width:a.default.lengthAttr(l,"w")})}),t}parseTableProperties(s,t){switch(t.cssStyle={},t.cellStyle={},this.parseDefaultProperties(s,t.cssStyle,t.cellStyle,l=>{switch(l.localName){case"tblStyle":t.styleName=a.default.attr(l,"val");break;case"tblLook":t.className=n.classNameOftblLook(l);break;case"tblpPr":this.parseTablePosition(l,t);break;case"tblStyleColBandSize":t.colBandSize=a.default.intAttr(l,"val");break;case"tblStyleRowBandSize":t.rowBandSize=a.default.intAttr(l,"val");break;default:return!1}return!0}),t.cssStyle["text-align"]){case"center":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto",t.cssStyle["margin-right"]="auto";break;case"right":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto"}}parseTablePosition(s,t){var l=a.default.lengthAttr(s,"topFromText"),b=a.default.lengthAttr(s,"bottomFromText"),k=a.default.lengthAttr(s,"rightFromText"),E=a.default.lengthAttr(s,"leftFromText");t.cssStyle.float="left",t.cssStyle["margin-bottom"]=n.addSize(t.cssStyle["margin-bottom"],b),t.cssStyle["margin-left"]=n.addSize(t.cssStyle["margin-left"],E),t.cssStyle["margin-right"]=n.addSize(t.cssStyle["margin-right"],k),t.cssStyle["margin-top"]=n.addSize(t.cssStyle["margin-top"],l)}parseTableRow(s){var t={type:r.DomType.Row,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tc":t.children.push(this.parseTableCell(l));break;case"trPr":this.parseTableRowProperties(l,t)}}),t}parseTableRowProperties(s,t){t.cssStyle=this.parseDefaultProperties(s,{},null,l=>{switch(l.localName){case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;case"tblHeader":t.isHeader=a.default.boolAttr(l,"val");break;default:return!1}return!0})}parseTableCell(s){var t={type:r.DomType.Cell,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tbl":t.children.push(this.parseTable(l));break;case"p":t.children.push(this.parseParagraph(l));break;case"tcPr":this.parseTableCellProperties(l,t)}}),t}parseTableCellProperties(s,t){t.cssStyle=this.parseDefaultProperties(s,{},null,l=>{var b;switch(l.localName){case"gridSpan":t.span=a.default.intAttr(l,"val",null);break;case"vMerge":t.verticalMerge=(b=a.default.attr(l,"val"))!==null&&b!==void 0?b:"continue";break;case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;default:return!1}return!0})}parseDefaultProperties(s,t=null,l=null,b=null){return t=t||{},P.foreach(s,k=>{if(!(b!=null&&b(k)))switch(k.localName){case"jc":t["text-align"]=n.valueOfJc(k);break;case"textAlignment":t["vertical-align"]=n.valueOfTextAlignment(k);break;case"color":t.color=P.colorAttr(k,"val",null,e.autos.color);break;case"sz":t["font-size"]=t["min-height"]=a.default.lengthAttr(k,"val",h.LengthUsage.FontSize);break;case"shd":t["background-color"]=P.colorAttr(k,"fill",null,e.autos.shd);break;case"highlight":t["background-color"]=P.colorAttr(k,"val",null,e.autos.highlight);break;case"vertAlign":break;case"position":t.verticalAlign=a.default.lengthAttr(k,"val",h.LengthUsage.FontSize);break;case"tcW":if(this.options.ignoreWidth)break;case"tblW":t.width=n.valueOfSize(k,"w");break;case"trHeight":this.parseTrHeight(k,t);break;case"strike":t["text-decoration"]=a.default.boolAttr(k,"val",!0)?"line-through":"none";break;case"b":t["font-weight"]=a.default.boolAttr(k,"val",!0)?"bold":"normal";break;case"i":t["font-style"]=a.default.boolAttr(k,"val",!0)?"italic":"normal";break;case"caps":t["text-transform"]=a.default.boolAttr(k,"val",!0)?"uppercase":"none";break;case"smallCaps":t["text-transform"]=a.default.boolAttr(k,"val",!0)?"lowercase":"none";break;case"u":this.parseUnderline(k,t);break;case"ind":case"tblInd":this.parseIndentation(k,t);break;case"rFonts":this.parseFont(k,t);break;case"tblBorders":this.parseBorderProperties(k,l||t);break;case"tblCellSpacing":t["border-spacing"]=n.valueOfMargin(k),t["border-collapse"]="separate";break;case"pBdr":this.parseBorderProperties(k,t);break;case"bdr":t.border=n.valueOfBorder(k);break;case"tcBorders":this.parseBorderProperties(k,t);break;case"vanish":a.default.boolAttr(k,"val",!0)&&(t.display="none");break;case"kern":case"noWrap":break;case"tblCellMar":case"tcMar":this.parseMarginProperties(k,l||t);break;case"tblLayout":t["table-layout"]=n.valueOfTblLayout(k);break;case"vAlign":t["vertical-align"]=n.valueOfTextAlignment(k);break;case"spacing":s.localName=="pPr"&&this.parseSpacing(k,t);break;case"wordWrap":a.default.boolAttr(k,"val")&&(t["overflow-wrap"]="break-word");break;case"suppressAutoHyphens":t.hyphens=a.default.boolAttr(k,"val",!0)?"none":"auto";break;case"lang":t.$lang=a.default.attr(k,"val");break;case"bCs":case"iCs":case"szCs":case"tabs":case"outlineLvl":case"contextualSpacing":case"tblStyleColBandSize":case"tblStyleRowBandSize":case"webHidden":case"pageBreakBefore":case"suppressLineNumbers":case"keepLines":case"keepNext":case"widowControl":case"bidi":case"rtl":case"noProof":break;default:this.options.debug&&console.warn(`DOCX: Unknown document element: ${s.localName}.${k.localName}`)}}),t}parseUnderline(s,t){var l=a.default.attr(s,"val");if(l!=null){switch(l){case"dash":case"dashDotDotHeavy":case"dashDotHeavy":case"dashedHeavy":case"dashLong":case"dashLongHeavy":case"dotDash":case"dotDotDash":t["text-decoration-style"]="dashed";break;case"dotted":case"dottedHeavy":t["text-decoration-style"]="dotted";break;case"double":t["text-decoration-style"]="double";break;case"single":case"thick":case"words":t["text-decoration"]="underline";break;case"wave":case"wavyDouble":case"wavyHeavy":t["text-decoration-style"]="wavy";break;case"none":t["text-decoration"]="none"}var b=P.colorAttr(s,"color");b&&(t["text-decoration-color"]=b)}}parseFont(s,t){var l=[a.default.attr(s,"ascii"),n.themeValue(s,"asciiTheme")].filter(b=>b).join(", ");l.length>0&&(t["font-family"]=l)}parseIndentation(s,t){var l=a.default.lengthAttr(s,"firstLine"),b=a.default.lengthAttr(s,"hanging"),k=a.default.lengthAttr(s,"left"),E=a.default.lengthAttr(s,"start"),_=a.default.lengthAttr(s,"right"),C=a.default.lengthAttr(s,"end");l&&(t["text-indent"]=l),b&&(t["text-indent"]=`-${b}`),(k||E)&&(t["margin-left"]=k||E),(_||C)&&(t["margin-right"]=_||C)}parseSpacing(s,t){var l=a.default.lengthAttr(s,"before"),b=a.default.lengthAttr(s,"after"),k=a.default.intAttr(s,"line",null),E=a.default.attr(s,"lineRule");if(l&&(t["margin-top"]=l),b&&(t["margin-bottom"]=b),k!==null)switch(E){case"auto":t["line-height"]=`${(k/240).toFixed(2)}`;break;case"atLeast":t["line-height"]=`calc(100% + ${k/20}pt)`;break;default:t["line-height"]=t["min-height"]=k/20+"pt"}}parseMarginProperties(s,t){P.foreach(s,l=>{switch(l.localName){case"left":t["padding-left"]=n.valueOfMargin(l);break;case"right":t["padding-right"]=n.valueOfMargin(l);break;case"top":t["padding-top"]=n.valueOfMargin(l);break;case"bottom":t["padding-bottom"]=n.valueOfMargin(l)}})}parseTrHeight(s,t){a.default.attr(s,"hRule"),t.height=a.default.lengthAttr(s,"val")}parseBorderProperties(s,t){P.foreach(s,l=>{switch(l.localName){case"start":case"left":t["border-left"]=n.valueOfBorder(l);break;case"end":case"right":t["border-right"]=n.valueOfBorder(l);break;case"top":t["border-top"]=n.valueOfBorder(l);break;case"bottom":t["border-bottom"]=n.valueOfBorder(l)}})}};const w=["black","blue","cyan","darkBlue","darkCyan","darkGray","darkGreen","darkMagenta","darkRed","darkYellow","green","lightGray","magenta","none","red","white","yellow"];class P{static foreach(t,l){for(var b=0;bl[k]=="1").join(" ")}static valueOfJc(t){var l=a.default.attr(t,"val");switch(l){case"start":case"left":return"left";case"center":return"center";case"end":case"right":return"right";case"both":return"justify"}return l}static valueOfVertAlign(t,l=!1){var b=a.default.attr(t,"val");switch(b){case"subscript":return"sub";case"superscript":return l?"sup":"super"}return l?null:b}static valueOfTextAlignment(t){var l=a.default.attr(t,"val");switch(l){case"auto":case"baseline":return"baseline";case"top":return"top";case"center":return"middle";case"bottom":return"bottom"}return l}static addSize(t,l){return t==null?l:l==null?t:`calc(${t} + ${l})`}static classNameOftblLook(t){const l=a.default.hexAttr(t,"val",0);let b="";return(a.default.boolAttr(t,"firstRow")||32&l)&&(b+=" first-row"),(a.default.boolAttr(t,"lastRow")||64&l)&&(b+=" last-row"),(a.default.boolAttr(t,"firstColumn")||128&l)&&(b+=" first-col"),(a.default.boolAttr(t,"lastColumn")||256&l)&&(b+=" last-col"),(a.default.boolAttr(t,"noHBand")||512&l)&&(b+=" no-hband"),(a.default.boolAttr(t,"noVBand")||1024&l)&&(b+=" no-vband"),b.trim()}}},162:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CorePropsPart=void 0;const r=u(530),m=u(614);class f extends r.Part{parseXml(i){this.props=(0,m.parseCoreProps)(i,this._package.xmlParser)}}e.CorePropsPart=f},614:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCoreProps=void 0,e.parseCoreProps=function(u,r){const m={};for(let f of r.elements(u))switch(f.localName){case"title":m.title=f.textContent;break;case"description":m.description=f.textContent;break;case"subject":m.subject=f.textContent;break;case"creator":m.creator=f.textContent;break;case"keywords":m.keywords=f.textContent;break;case"language":m.language=f.textContent;break;case"lastModifiedBy":m.lastModifiedBy=f.textContent;break;case"revision":f.textContent&&(m.revision=parseInt(f.textContent))}return m}},177:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CustomPropsPart=void 0;const r=u(530),m=u(821);class f extends r.Part{parseXml(i){this.props=(0,m.parseCustomProps)(i,this._package.xmlParser)}}e.CustomPropsPart=f},821:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCustomProps=void 0,e.parseCustomProps=function(u,r){return r.elements(u,"property").map(m=>{const f=m.firstChild;return{formatId:r.attr(m,"fmtid"),name:r.attr(m,"name"),type:f.nodeName,value:f.textContent}})}},665:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ExtendedPropsPart=void 0;const r=u(530),m=u(668);class f extends r.Part{parseXml(i){this.props=(0,m.parseExtendedProps)(i,this._package.xmlParser)}}e.ExtendedPropsPart=f},668:(v,e)=>{function u(r){if(r!==void 0)return parseInt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.parseExtendedProps=void 0,e.parseExtendedProps=function(r,m){const f={};for(let a of m.elements(r))switch(a.localName){case"Template":f.template=a.textContent;break;case"Pages":f.pages=u(a.textContent);break;case"Words":f.words=u(a.textContent);break;case"Characters":f.characters=u(a.textContent);break;case"Application":f.application=a.textContent;break;case"Lines":f.lines=u(a.textContent);break;case"Paragraphs":f.paragraphs=u(a.textContent);break;case"Company":f.company=a.textContent;break;case"AppVersion":f.appVersion=a.textContent}return f}},172:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseBookmarkEnd=e.parseBookmarkStart=void 0;const r=u(120);e.parseBookmarkStart=function(m,f){return{type:r.DomType.BookmarkStart,id:f.attr(m,"id"),name:f.attr(m,"name"),colFirst:f.intAttr(m,"colFirst"),colLast:f.intAttr(m,"colLast")}},e.parseBookmarkEnd=function(m,f){return{type:r.DomType.BookmarkEnd,id:f.attr(m,"id")}}},191:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseBorders=e.parseBorder=void 0;const r=u(149);function m(f,a){return{type:a.attr(f,"val"),color:a.attr(f,"color"),size:a.lengthAttr(f,"sz",r.LengthUsage.Border),offset:a.lengthAttr(f,"space",r.LengthUsage.Point),frame:a.boolAttr(f,"frame"),shadow:a.boolAttr(f,"shadow")}}e.parseBorder=m,e.parseBorders=function(f,a){var i={};for(let y of a.elements(f))switch(y.localName){case"left":i.left=m(y,a);break;case"top":i.top=m(y,a);break;case"right":i.right=m(y,a);break;case"bottom":i.bottom=m(y,a)}return i}},149:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCommonProperty=e.convertPercentage=e.convertBoolean=e.convertLength=e.LengthUsage=e.ns=void 0,e.ns={wordml:"http://schemas.openxmlformats.org/wordprocessingml/2006/main",drawingml:"http://schemas.openxmlformats.org/drawingml/2006/main",picture:"http://schemas.openxmlformats.org/drawingml/2006/picture",compatibility:"http://schemas.openxmlformats.org/markup-compatibility/2006",math:"http://schemas.openxmlformats.org/officeDocument/2006/math"},e.LengthUsage={Dxa:{mul:.05,unit:"pt"},Emu:{mul:7874015748031496e-20,unit:"pt"},FontSize:{mul:.5,unit:"pt"},Border:{mul:.125,unit:"pt"},Point:{mul:1,unit:"pt"},Percent:{mul:.02,unit:"%"},LineHeight:{mul:.004166666666666667,unit:""},VmlEmu:{mul:7874015748031496e-20,unit:""}},e.convertLength=function(u,r=e.LengthUsage.Dxa){return u==null||/.+(p[xt]|[%])$/.test(u)?u:`${(parseInt(u)*r.mul).toFixed(2)}${r.unit}`},e.convertBoolean=function(u,r=!1){switch(u){case"1":case"on":case"true":return!0;case"0":case"off":case"false":return!1;default:return r}},e.convertPercentage=function(u){return u?parseInt(u)/100:null},e.parseCommonProperty=function(u,r,m){if(u.namespaceURI!=e.ns.wordml)return!1;switch(u.localName){case"color":r.color=m.attr(u,"val");break;case"sz":r.fontSize=m.lengthAttr(u,"val",e.LengthUsage.FontSize);break;default:return!1}return!0}},448:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.DocumentPart=void 0;const r=u(530);class m extends r.Part{constructor(a,i,y){super(a,i),this._documentParser=y}parseXml(a){this.body=this._documentParser.parseDocumentFile(a)}}e.DocumentPart=m},120:(v,e)=>{var u;Object.defineProperty(e,"__esModule",{value:!0}),e.OpenXmlElementBase=e.DomType=void 0,function(r){r.Document="document",r.Paragraph="paragraph",r.Run="run",r.Break="break",r.NoBreakHyphen="noBreakHyphen",r.Table="table",r.Row="row",r.Cell="cell",r.Hyperlink="hyperlink",r.Drawing="drawing",r.Image="image",r.Text="text",r.Tab="tab",r.Symbol="symbol",r.BookmarkStart="bookmarkStart",r.BookmarkEnd="bookmarkEnd",r.Footer="footer",r.Header="header",r.FootnoteReference="footnoteReference",r.EndnoteReference="endnoteReference",r.Footnote="footnote",r.Endnote="endnote",r.SimpleField="simpleField",r.ComplexField="complexField",r.Instruction="instruction",r.VmlPicture="vmlPicture",r.MmlMath="mmlMath",r.MmlMathParagraph="mmlMathParagraph",r.MmlFraction="mmlFraction",r.MmlFunction="mmlFunction",r.MmlFunctionName="mmlFunctionName",r.MmlNumerator="mmlNumerator",r.MmlDenominator="mmlDenominator",r.MmlRadical="mmlRadical",r.MmlBase="mmlBase",r.MmlDegree="mmlDegree",r.MmlSuperscript="mmlSuperscript",r.MmlSubscript="mmlSubscript",r.MmlPreSubSuper="mmlPreSubSuper",r.MmlSubArgument="mmlSubArgument",r.MmlSuperArgument="mmlSuperArgument",r.MmlNary="mmlNary",r.MmlDelimiter="mmlDelimiter",r.MmlRun="mmlRun",r.MmlEquationArray="mmlEquationArray",r.MmlLimit="mmlLimit",r.MmlLimitLower="mmlLimitLower",r.MmlMatrix="mmlMatrix",r.MmlMatrixRow="mmlMatrixRow",r.MmlBox="mmlBox",r.MmlBar="mmlBar",r.MmlGroupChar="mmlGroupChar",r.VmlElement="vmlElement",r.Inserted="inserted",r.Deleted="deleted",r.DeletedText="deletedText"}(u||(e.DomType=u={})),e.OpenXmlElementBase=class{constructor(){this.children=[],this.cssStyle={}}}},931:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseLineSpacing=void 0,e.parseLineSpacing=function(u,r){return{before:r.lengthAttr(u,"before"),after:r.lengthAttr(u,"after"),line:r.intAttr(u,"line"),lineRule:r.attr(u,"lineRule")}}},109:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseNumbering=e.parseTabs=e.parseParagraphProperty=e.parseParagraphProperties=void 0;const r=u(149),m=u(59),f=u(931),a=u(488);function i(d,p,g){if(d.namespaceURI!=r.ns.wordml)return!1;if((0,r.parseCommonProperty)(d,p,g))return!0;switch(d.localName){case"tabs":p.tabs=y(d,g);break;case"sectPr":p.sectionProps=(0,m.parseSectionProperties)(d,g);break;case"numPr":p.numbering=h(d,g);break;case"spacing":return p.lineSpacing=(0,f.parseLineSpacing)(d,g),!1;case"textAlignment":return p.textAlignment=g.attr(d,"val"),!1;case"keepNext":p.keepLines=g.boolAttr(d,"val",!0);break;case"keepNext":p.keepNext=g.boolAttr(d,"val",!0);break;case"pageBreakBefore":p.pageBreakBefore=g.boolAttr(d,"val",!0);break;case"outlineLvl":p.outlineLevel=g.intAttr(d,"val");break;case"pStyle":p.styleName=g.attr(d,"val");break;case"rPr":p.runProps=(0,a.parseRunProperties)(d,g);break;default:return!1}return!0}function y(d,p){return p.elements(d,"tab").map(g=>({position:p.lengthAttr(g,"pos"),leader:p.attr(g,"leader"),style:p.attr(g,"val")}))}function h(d,p){var g={};for(let w of p.elements(d))switch(w.localName){case"numId":g.id=p.attr(w,"val");break;case"ilvl":g.level=p.intAttr(w,"val")}return g}e.parseParagraphProperties=function(d,p){let g={};for(let w of p.elements(d))i(w,g,p);return g},e.parseParagraphProperty=i,e.parseTabs=y,e.parseNumbering=h},488:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseRunProperty=e.parseRunProperties=void 0;const r=u(149);function m(f,a,i){return!!(0,r.parseCommonProperty)(f,a,i)}e.parseRunProperties=function(f,a){let i={};for(let y of a.elements(f))m(y,i,a);return i},e.parseRunProperty=m},59:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseSectionProperties=e.SectionType=void 0;const r=u(472),m=u(191);var f;function a(h,d){return{numberOfColumns:d.intAttr(h,"num"),space:d.lengthAttr(h,"space"),separator:d.boolAttr(h,"sep"),equalWidth:d.boolAttr(h,"equalWidth",!0),columns:d.elements(h,"col").map(p=>({width:d.lengthAttr(p,"w"),space:d.lengthAttr(p,"space")}))}}function i(h,d){return{chapSep:d.attr(h,"chapSep"),chapStyle:d.attr(h,"chapStyle"),format:d.attr(h,"fmt"),start:d.intAttr(h,"start")}}function y(h,d){return{id:d.attr(h,"id"),type:d.attr(h,"type")}}(function(h){h.Continuous="continuous",h.NextPage="nextPage",h.NextColumn="nextColumn",h.EvenPage="evenPage",h.OddPage="oddPage"})(f||(e.SectionType=f={})),e.parseSectionProperties=function(h,d=r.default){var p,g,w={};for(let P of d.elements(h))switch(P.localName){case"pgSz":w.pageSize={width:d.lengthAttr(P,"w"),height:d.lengthAttr(P,"h"),orientation:d.attr(P,"orient")};break;case"type":w.type=d.attr(P,"val");break;case"pgMar":w.pageMargins={left:d.lengthAttr(P,"left"),right:d.lengthAttr(P,"right"),top:d.lengthAttr(P,"top"),bottom:d.lengthAttr(P,"bottom"),header:d.lengthAttr(P,"header"),footer:d.lengthAttr(P,"footer"),gutter:d.lengthAttr(P,"gutter")};break;case"cols":w.columns=a(P,d);break;case"headerReference":((p=w.headerRefs)!==null&&p!==void 0?p:w.headerRefs=[]).push(y(P,d));break;case"footerReference":((g=w.footerRefs)!==null&&g!==void 0?g:w.footerRefs=[]).push(y(P,d));break;case"titlePg":w.titlePage=d.boolAttr(P,"val",!0);break;case"pgBorders":w.pageBorders=(0,m.parseBorders)(P,d);break;case"pgNumType":w.pageNumber=i(P,d)}return w}},667:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.renderAsync=e.praseAsync=e.defaultOptions=void 0;const r=u(213),m=u(168),f=u(932);e.defaultOptions={ignoreHeight:!1,ignoreWidth:!1,ignoreFonts:!1,breakPages:!0,debug:!1,experimental:!1,className:"docx",inWrapper:!0,trimXmlDeclaration:!0,ignoreLastRenderedPageBreak:!0,renderHeaders:!0,renderFooters:!0,renderFootnotes:!0,renderEndnotes:!0,useBase64URL:!1,useMathMLPolyfill:!1,renderChanges:!1},e.praseAsync=function(a,i=null){const y=Object.assign(Object.assign({},e.defaultOptions),i);return r.WordDocument.load(a,new m.DocumentParser(y),y)},e.renderAsync=async function(a,i,y=null,h=null){const d=Object.assign(Object.assign({},e.defaultOptions),h),p=new f.HtmlRenderer(window.document),g=await r.WordDocument.load(a,new m.DocumentParser(d),d);return p.render(g,i,y,d),g}},380:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FontTablePart=void 0;const r=u(530),m=u(512);class f extends r.Part{parseXml(i){this.fonts=(0,m.parseFonts)(i,this._package.xmlParser)}}e.FontTablePart=f},512:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseEmbedFontRef=e.parseFont=e.parseFonts=void 0;const u={embedRegular:"regular",embedBold:"bold",embedItalic:"italic",embedBoldItalic:"boldItalic"};function r(f,a){let i={name:a.attr(f,"name"),embedFontRefs:[]};for(let y of a.elements(f))switch(y.localName){case"family":i.family=a.attr(y,"val");break;case"altName":i.altName=a.attr(y,"val");break;case"embedRegular":case"embedBold":case"embedItalic":case"embedBoldItalic":i.embedFontRefs.push(m(y,a))}return i}function m(f,a){return{id:a.attr(f,"id"),key:a.attr(f,"fontKey"),type:u[f.localName]}}e.parseFonts=function(f,a){return a.elements(f).map(i=>r(i,a))},e.parseFont=r,e.parseEmbedFontRef=m},984:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.WmlFooter=e.WmlHeader=void 0;const r=u(120);class m extends r.OpenXmlElementBase{constructor(){super(...arguments),this.type=r.DomType.Header}}e.WmlHeader=m;class f extends r.OpenXmlElementBase{constructor(){super(...arguments),this.type=r.DomType.Footer}}e.WmlFooter=f},985:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FooterPart=e.HeaderPart=e.BaseHeaderFooterPart=void 0;const r=u(530),m=u(984);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}parseXml(i){this.rootElement=this.createRootElement(),this.rootElement.children=this._documentParser.parseBodyElements(i)}}e.BaseHeaderFooterPart=f,e.HeaderPart=class extends f{createRootElement(){return new m.WmlHeader}},e.FooterPart=class extends f{createRootElement(){return new m.WmlFooter}}},932:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HtmlRenderer=void 0;const r=u(120),m=u(593),f=u(630),a=u(438),i="http://www.w3.org/1998/Math/MathML";function y(n,s,t){return d(void 0,n,s,t)}function h(n,s,t){return d("http://www.w3.org/2000/svg",n,s,t)}function d(n,s,t,l){var b=n?document.createElementNS(n,s):document.createElement(s);return Object.assign(b,t),l&&g(b,l),b}function p(n){n.innerHTML=""}function g(n,s){s.forEach(t=>n.appendChild((0,m.isString)(t)?document.createTextNode(t):t))}function w(n){return y("style",{innerHTML:n})}function P(n,s){n.appendChild(document.createComment(s))}e.HtmlRenderer=class{constructor(n){this.htmlDocument=n,this.className="docx",this.styleMap={},this.currentPart=null,this.tableVerticalMerges=[],this.currentVerticalMerge=null,this.tableCellPositions=[],this.currentCellPosition=null,this.footnoteMap={},this.endnoteMap={},this.currentEndnoteIds=[],this.usedHederFooterParts=[],this.currentTabs=[],this.tabsTimeout=0,this.createElement=y}render(n,s,t=null,l){var b;this.document=n,this.options=l,this.className=l.className,this.rootSelector=l.inWrapper?`.${this.className}-wrapper`:":root",this.styleMap=null,p(t=t||s),p(s),P(t,"docxjs library predefined styles"),t.appendChild(this.renderDefaultStyle()),!window.MathMLElement&&l.useMathMLPolyfill&&(P(t,"docxjs mathml polyfill styles"),t.appendChild(w(a.default))),n.themePart&&(P(t,"docxjs document theme values"),this.renderTheme(n.themePart,t)),n.stylesPart!=null&&(this.styleMap=this.processStyles(n.stylesPart.styles),P(t,"docxjs document styles"),t.appendChild(this.renderStyles(n.stylesPart.styles))),n.numberingPart&&(this.prodessNumberings(n.numberingPart.domNumberings),P(t,"docxjs document numbering styles"),t.appendChild(this.renderNumbering(n.numberingPart.domNumberings,t))),n.footnotesPart&&(this.footnoteMap=(0,m.keyBy)(n.footnotesPart.notes,E=>E.id)),n.endnotesPart&&(this.endnoteMap=(0,m.keyBy)(n.endnotesPart.notes,E=>E.id)),n.settingsPart&&(this.defaultTabSize=(b=n.settingsPart.settings)===null||b===void 0?void 0:b.defaultTabStop),!l.ignoreFonts&&n.fontTablePart&&this.renderFontTable(n.fontTablePart,t);var k=this.renderSections(n.documentPart.body);this.options.inWrapper?s.appendChild(this.renderWrapper(k)):g(s,k),this.refreshTabStops()}renderTheme(n,s){var t,l;const b={},k=(t=n.theme)===null||t===void 0?void 0:t.fontScheme;k&&(k.majorFont&&(b["--docx-majorHAnsi-font"]=k.majorFont.latinTypeface),k.minorFont&&(b["--docx-minorHAnsi-font"]=k.minorFont.latinTypeface));const E=(l=n.theme)===null||l===void 0?void 0:l.colorScheme;if(E)for(let[C,o]of Object.entries(E.colors))b[`--docx-${C}-color`]=`#${o}`;const _=this.styleToString(`.${this.className}`,b);s.appendChild(w(_))}renderFontTable(n,s){for(let t of n.fonts)for(let l of t.embedFontRefs)this.document.loadFont(l.id,l.key).then(b=>{const k={"font-family":t.name,src:`url(${b})`};l.type!="bold"&&l.type!="boldItalic"||(k["font-weight"]="bold"),l.type!="italic"&&l.type!="boldItalic"||(k["font-style"]="italic"),P(s,`docxjs ${t.name} font`);const E=this.styleToString("@font-face",k);s.appendChild(w(E)),this.refreshTabStops()})}processStyleName(n){return n?`${this.className}_${(0,m.escapeClassName)(n)}`:this.className}processStyles(n){const s=(0,m.keyBy)(n.filter(l=>l.id!=null),l=>l.id);for(const l of n.filter(b=>b.basedOn)){var t=s[l.basedOn];if(t){l.paragraphProps=(0,m.mergeDeep)(l.paragraphProps,t.paragraphProps),l.runProps=(0,m.mergeDeep)(l.runProps,t.runProps);for(const b of t.styles){const k=l.styles.find(E=>E.target==b.target);k?this.copyStyleProperties(b.values,k.values):l.styles.push(Object.assign(Object.assign({},b),{values:Object.assign({},b.values)}))}}else this.options.debug&&console.warn(`Can't find base style ${l.basedOn}`)}for(let l of n)l.cssName=this.processStyleName(l.id);return s}prodessNumberings(n){var s;for(let t of n.filter(l=>l.pStyleName)){const l=this.findStyle(t.pStyleName);!((s=l==null?void 0:l.paragraphProps)===null||s===void 0)&&s.numbering&&(l.paragraphProps.numbering.level=t.level)}}processElement(n){if(n.children)for(var s of n.children)s.parent=n,s.type==r.DomType.Table?this.processTable(s):this.processElement(s)}processTable(n){for(var s of n.children)for(var t of s.children)t.cssStyle=this.copyStyleProperties(n.cellStyle,t.cssStyle,["border-left","border-right","border-top","border-bottom","padding-left","padding-right","padding-top","padding-bottom"]),this.processElement(t)}copyStyleProperties(n,s,t=null){if(!n)return s;for(var l of(s==null&&(s={}),t==null&&(t=Object.getOwnPropertyNames(n)),t))n.hasOwnProperty(l)&&!s.hasOwnProperty(l)&&(s[l]=n[l]);return s}createSection(n,s){var t=this.createElement("section",{className:n});return s&&(s.pageMargins&&(t.style.paddingLeft=s.pageMargins.left,t.style.paddingRight=s.pageMargins.right,t.style.paddingTop=s.pageMargins.top,t.style.paddingBottom=s.pageMargins.bottom),s.pageSize&&(this.options.ignoreWidth||(t.style.width=s.pageSize.width),this.options.ignoreHeight||(t.style.minHeight=s.pageSize.height)),s.columns&&s.columns.numberOfColumns&&(t.style.columnCount=`${s.columns.numberOfColumns}`,t.style.columnGap=s.columns.space,s.columns.separator&&(t.style.columnRule="1px solid black"))),t}renderSections(n){const s=[];this.processElement(n);const t=this.splitBySection(n.children);let l=null;for(let k=0,E=t.length;ko.type=="first"):null)!==null&&k!==void 0?k:t%2==1?n.find(o=>o.type=="even"):null)!==null&&E!==void 0?E:n.find(o=>o.type=="default"),C=_&&this.document.findPartByRelId(_.id,this.document.documentPart);C&&(this.currentPart=C,this.usedHederFooterParts.includes(C.path)||(this.processElement(C.rootElement),this.usedHederFooterParts.push(C.path)),this.renderElements([C.rootElement],b),this.currentPart=null)}}isPageBreakElement(n){return n.type==r.DomType.Break&&(n.break=="lastRenderedPageBreak"?!this.options.ignoreLastRenderedPageBreak:n.break=="page")}splitBySection(n){var s,t={sectProps:null,elements:[]},l=[t];for(let R of n){if(R.type==r.DomType.Paragraph){const V=this.findStyle(R.styleName);!((s=V==null?void 0:V.paragraphProps)===null||s===void 0)&&s.pageBreakBefore&&(t.sectProps=b,t={sectProps:null,elements:[]},l.push(t))}if(t.elements.push(R),R.type==r.DomType.Paragraph){const V=R;var b=V.sectionProps,k=-1,E=-1;if(this.options.breakPages&&V.children&&(k=V.children.findIndex(F=>{var q,W;return(E=(W=(q=F.children)===null||q===void 0?void 0:q.findIndex(this.isPageBreakElement.bind(this)))!==null&&W!==void 0?W:-1)!=-1})),(b||k!=-1)&&(t.sectProps=b,t={sectProps:null,elements:[]},l.push(t)),k!=-1){let F=V.children[k],q=E=0;R--)l[R].sectProps==null?l[R].sectProps=o:o=l[R].sectProps;return l}renderWrapper(n){return this.createElement("div",{className:`${this.className}-wrapper`},n)}renderDefaultStyle(){var n=this.className;return w(` +.${n}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; } +.${n}-wrapper>section.${n} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; } +.${n} { color: black; hyphens: auto; } +section.${n} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; } +section.${n}>article { margin-bottom: auto; z-index: 1; } +section.${n}>footer { z-index: 1; } +.${n} table { border-collapse: collapse; } +.${n} table td, .${n} table th { vertical-align: top; } +.${n} p { margin: 0pt; min-height: 1em; } +.${n} span { white-space: pre-wrap; overflow-wrap: break-word; } +.${n} a { color: inherit; text-decoration: inherit; } +`)}renderNumbering(n,s){var t="",l=[];for(var b of n){var k=`p.${this.numberingClass(b.id,b.level)}`,E="none";if(b.bullet){let _=`--${this.className}-${b.bullet.src}`.toLowerCase();t+=this.styleToString(`${k}:before`,{content:"' '",display:"inline-block",background:`var(${_})`},b.bullet.style),this.document.loadNumberingImage(b.bullet.src).then(C=>{var o=`${this.rootSelector} { ${_}: url(${C}) }`;s.appendChild(w(o))})}else if(b.levelText){let _=this.numberingCounter(b.id,b.level);const C=_+" "+(b.start-1);b.level>0&&(t+=this.styleToString(`p.${this.numberingClass(b.id,b.level-1)}`,{"counter-reset":C})),l.push(C),t+=this.styleToString(`${k}:before`,Object.assign({content:this.levelTextToContent(b.levelText,b.suff,b.id,this.numFormatToCssValue(b.format)),"counter-increment":_},b.rStyle))}else E=this.numFormatToCssValue(b.format);t+=this.styleToString(k,Object.assign({display:"list-item","list-style-position":"inside","list-style-type":E},b.pStyle))}return l.length>0&&(t+=this.styleToString(this.rootSelector,{"counter-reset":l.join(" ")})),w(t)}renderStyles(n){var s,t="";const l=this.styleMap,b=(0,m.keyBy)(n.filter(C=>C.isDefault),C=>C.target);for(const C of n){var k=C.styles;if(C.linked){var E=C.linked&&l[C.linked];E?k=k.concat(E.styles):this.options.debug&&console.warn(`Can't find linked style ${C.linked}`)}for(const o of k){var _=`${(s=C.target)!==null&&s!==void 0?s:""}.${C.cssName}`;C.target!=o.target&&(_+=` ${o.target}`),b[C.target]==C&&(_=`.${this.className} ${C.target}, `+_),t+=this.styleToString(_,o.values)}}return w(t)}renderNotes(n,s,t){var l=n.map(k=>s[k]).filter(k=>k);if(l.length>0){var b=this.createElement("ol",null,this.renderElements(l));t.appendChild(b)}}renderElement(n){switch(n.type){case r.DomType.Paragraph:return this.renderParagraph(n);case r.DomType.BookmarkStart:return this.renderBookmarkStart(n);case r.DomType.BookmarkEnd:return null;case r.DomType.Run:return this.renderRun(n);case r.DomType.Table:return this.renderTable(n);case r.DomType.Row:return this.renderTableRow(n);case r.DomType.Cell:return this.renderTableCell(n);case r.DomType.Hyperlink:return this.renderHyperlink(n);case r.DomType.Drawing:return this.renderDrawing(n);case r.DomType.Image:return this.renderImage(n);case r.DomType.Text:case r.DomType.Text:return this.renderText(n);case r.DomType.DeletedText:return this.renderDeletedText(n);case r.DomType.Tab:return this.renderTab(n);case r.DomType.Symbol:return this.renderSymbol(n);case r.DomType.Break:return this.renderBreak(n);case r.DomType.Footer:return this.renderContainer(n,"footer");case r.DomType.Header:return this.renderContainer(n,"header");case r.DomType.Footnote:case r.DomType.Endnote:return this.renderContainer(n,"li");case r.DomType.FootnoteReference:return this.renderFootnoteReference(n);case r.DomType.EndnoteReference:return this.renderEndnoteReference(n);case r.DomType.NoBreakHyphen:return this.createElement("wbr");case r.DomType.VmlPicture:return this.renderVmlPicture(n);case r.DomType.VmlElement:return this.renderVmlElement(n);case r.DomType.MmlMath:return this.renderContainerNS(n,i,"math",{xmlns:i});case r.DomType.MmlMathParagraph:return this.renderContainer(n,"span");case r.DomType.MmlFraction:return this.renderContainerNS(n,i,"mfrac");case r.DomType.MmlBase:return this.renderContainerNS(n,i,n.parent.type==r.DomType.MmlMatrixRow?"mtd":"mrow");case r.DomType.MmlNumerator:case r.DomType.MmlDenominator:case r.DomType.MmlFunction:case r.DomType.MmlLimit:case r.DomType.MmlBox:return this.renderContainerNS(n,i,"mrow");case r.DomType.MmlGroupChar:return this.renderMmlGroupChar(n);case r.DomType.MmlLimitLower:return this.renderContainerNS(n,i,"munder");case r.DomType.MmlMatrix:return this.renderContainerNS(n,i,"mtable");case r.DomType.MmlMatrixRow:return this.renderContainerNS(n,i,"mtr");case r.DomType.MmlRadical:return this.renderMmlRadical(n);case r.DomType.MmlSuperscript:return this.renderContainerNS(n,i,"msup");case r.DomType.MmlSubscript:return this.renderContainerNS(n,i,"msub");case r.DomType.MmlDegree:case r.DomType.MmlSuperArgument:case r.DomType.MmlSubArgument:return this.renderContainerNS(n,i,"mn");case r.DomType.MmlFunctionName:return this.renderContainerNS(n,i,"ms");case r.DomType.MmlDelimiter:return this.renderMmlDelimiter(n);case r.DomType.MmlRun:return this.renderMmlRun(n);case r.DomType.MmlNary:return this.renderMmlNary(n);case r.DomType.MmlPreSubSuper:return this.renderMmlPreSubSuper(n);case r.DomType.MmlBar:return this.renderMmlBar(n);case r.DomType.MmlEquationArray:return this.renderMllList(n);case r.DomType.Inserted:return this.renderInserted(n);case r.DomType.Deleted:return this.renderDeleted(n)}return null}renderChildren(n,s){return this.renderElements(n.children,s)}renderElements(n,s){if(n==null)return null;var t=n.flatMap(l=>this.renderElement(l)).filter(l=>l!=null);return s&&g(s,t),t}renderContainer(n,s,t){return this.createElement(s,t,this.renderChildren(n))}renderContainerNS(n,s,t,l){return d(s,t,l,this.renderChildren(n))}renderParagraph(n){var s,t,l,b,k=this.createElement("p");const E=this.findStyle(n.styleName);(s=n.tabs)!==null&&s!==void 0||(n.tabs=(t=E==null?void 0:E.paragraphProps)===null||t===void 0?void 0:t.tabs),this.renderClass(n,k),this.renderChildren(n,k),this.renderStyleValues(n.cssStyle,k),this.renderCommonProperties(k.style,n);const _=(l=n.numbering)!==null&&l!==void 0?l:(b=E==null?void 0:E.paragraphProps)===null||b===void 0?void 0:b.numbering;return _&&k.classList.add(this.numberingClass(_.id,_.level)),k}renderRunProperties(n,s){this.renderCommonProperties(n,s)}renderCommonProperties(n,s){s!=null&&(s.color&&(n.color=s.color),s.fontSize&&(n["font-size"]=s.fontSize))}renderHyperlink(n){var s=this.createElement("a");if(this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),n.href)s.href=n.href;else if(n.id){const t=this.document.documentPart.rels.find(l=>l.id==n.id&&l.targetMode==="External");s.href=t==null?void 0:t.target}return s}renderDrawing(n){var s=this.createElement("div");return s.style.display="inline-block",s.style.position="relative",s.style.textIndent="0px",this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),s}renderImage(n){let s=this.createElement("img");return this.renderStyleValues(n.cssStyle,s),this.document&&this.document.loadDocumentImage(n.src,this.currentPart).then(t=>{s.src=t}),s}renderText(n){return this.htmlDocument.createTextNode(n.text)}renderDeletedText(n){return this.options.renderEndnotes?this.htmlDocument.createTextNode(n.text):null}renderBreak(n){return n.break=="textWrapping"?this.createElement("br"):null}renderInserted(n){return this.options.renderChanges?this.renderContainer(n,"ins"):this.renderChildren(n)}renderDeleted(n){return this.options.renderChanges?this.renderContainer(n,"del"):null}renderSymbol(n){var s=this.createElement("span");return s.style.fontFamily=n.font,s.innerHTML=`&#x${n.char};`,s}renderFootnoteReference(n){var s=this.createElement("sup");return this.currentFootnoteIds.push(n.id),s.textContent=`${this.currentFootnoteIds.length}`,s}renderEndnoteReference(n){var s=this.createElement("sup");return this.currentEndnoteIds.push(n.id),s.textContent=`${this.currentEndnoteIds.length}`,s}renderTab(n){var s,t=this.createElement("span");if(t.innerHTML=" ",this.options.experimental){t.className=this.tabStopClass();var l=(s=function(b,k){for(var E=b.parent;E!=null&&E.type!=k;)E=E.parent;return E}(n,r.DomType.Paragraph))===null||s===void 0?void 0:s.tabs;this.currentTabs.push({stops:l,span:t})}return t}renderBookmarkStart(n){var s=this.createElement("span");return s.id=n.name,s}renderRun(n){if(n.fieldRun)return null;const s=this.createElement("span");if(n.id&&(s.id=n.id),this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),n.verticalAlign){const t=this.createElement(n.verticalAlign);this.renderChildren(n,t),s.appendChild(t)}else this.renderChildren(n,s);return s}renderTable(n){let s=this.createElement("table");return this.tableCellPositions.push(this.currentCellPosition),this.tableVerticalMerges.push(this.currentVerticalMerge),this.currentVerticalMerge={},this.currentCellPosition={col:0,row:0},n.columns&&s.appendChild(this.renderTableColumns(n.columns)),this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),this.currentVerticalMerge=this.tableVerticalMerges.pop(),this.currentCellPosition=this.tableCellPositions.pop(),s}renderTableColumns(n){let s=this.createElement("colgroup");for(let t of n){let l=this.createElement("col");t.width&&(l.style.width=t.width),s.appendChild(l)}return s}renderTableRow(n){let s=this.createElement("tr");return this.currentCellPosition.col=0,this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),this.currentCellPosition.row++,s}renderTableCell(n){let s=this.createElement("td");const t=this.currentCellPosition.col;return n.verticalMerge?n.verticalMerge=="restart"?(this.currentVerticalMerge[t]=s,s.rowSpan=1):this.currentVerticalMerge[t]&&(this.currentVerticalMerge[t].rowSpan+=1,s.style.display="none"):this.currentVerticalMerge[t]=null,this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),n.span&&(s.colSpan=n.span),this.currentCellPosition.col+=s.colSpan,s}renderVmlPicture(n){var s=y("div");return this.renderChildren(n,s),s}renderVmlElement(n){var s,t,l=h("svg");l.setAttribute("style",n.cssStyleText);const b=this.renderVmlChildElement(n);return!((s=n.imageHref)===null||s===void 0)&&s.id&&((t=this.document)===null||t===void 0||t.loadDocumentImage(n.imageHref.id,this.currentPart).then(k=>b.setAttribute("href",k))),l.appendChild(b),requestAnimationFrame(()=>{const k=l.firstElementChild.getBBox();l.setAttribute("width",`${Math.ceil(k.x+k.width)}`),l.setAttribute("height",`${Math.ceil(k.y+k.height)}`)}),l}renderVmlChildElement(n){const s=h(n.tagName);Object.entries(n.attrs).forEach(([t,l])=>s.setAttribute(t,l));for(let t of n.children)t.type==r.DomType.VmlElement?s.appendChild(this.renderVmlChildElement(t)):s.appendChild(...(0,m.asArray)(this.renderElement(t)));return s}renderMmlRadical(n){var s;const t=n.children.find(b=>b.type==r.DomType.MmlBase);if(!((s=n.props)===null||s===void 0)&&s.hideDegree)return d(i,"msqrt",null,this.renderElements([t]));const l=n.children.find(b=>b.type==r.DomType.MmlDegree);return d(i,"mroot",null,this.renderElements([t,l]))}renderMmlDelimiter(n){var s,t;const l=[];return l.push(d(i,"mo",null,[(s=n.props.beginChar)!==null&&s!==void 0?s:"("])),l.push(...this.renderElements(n.children)),l.push(d(i,"mo",null,[(t=n.props.endChar)!==null&&t!==void 0?t:")"])),d(i,"mrow",null,l)}renderMmlNary(n){var s,t;const l=[],b=(0,m.keyBy)(n.children,R=>R.type),k=b[r.DomType.MmlSuperArgument],E=b[r.DomType.MmlSubArgument],_=k?d(i,"mo",null,(0,m.asArray)(this.renderElement(k))):null,C=E?d(i,"mo",null,(0,m.asArray)(this.renderElement(E))):null,o=d(i,"mo",null,[(t=(s=n.props)===null||s===void 0?void 0:s.char)!==null&&t!==void 0?t:"∫"]);return _||C?l.push(d(i,"munderover",null,[o,C,_])):_?l.push(d(i,"mover",null,[o,_])):C?l.push(d(i,"munder",null,[o,C])):l.push(o),l.push(...this.renderElements(b[r.DomType.MmlBase].children)),d(i,"mrow",null,l)}renderMmlPreSubSuper(n){const s=[],t=(0,m.keyBy)(n.children,C=>C.type),l=t[r.DomType.MmlSuperArgument],b=t[r.DomType.MmlSubArgument],k=l?d(i,"mo",null,(0,m.asArray)(this.renderElement(l))):null,E=b?d(i,"mo",null,(0,m.asArray)(this.renderElement(b))):null,_=d(i,"mo",null);return s.push(d(i,"msubsup",null,[_,E,k])),s.push(...this.renderElements(t[r.DomType.MmlBase].children)),d(i,"mrow",null,s)}renderMmlGroupChar(n){const s=n.props.verticalJustification==="bot"?"mover":"munder",t=this.renderContainerNS(n,i,s);return n.props.char&&t.appendChild(d(i,"mo",null,[n.props.char])),t}renderMmlBar(n){const s=this.renderContainerNS(n,i,"mrow");switch(n.props.position){case"top":s.style.textDecoration="overline";break;case"bottom":s.style.textDecoration="underline"}return s}renderMmlRun(n){const s=d(i,"ms");return this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),this.renderChildren(n,s),s}renderMllList(n){const s=d(i,"mtable");this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),this.renderChildren(n);for(let t of this.renderChildren(n))s.appendChild(d(i,"mtr",null,[d(i,"mtd",null,[t])]));return s}renderStyleValues(n,s){for(let t in n)t.startsWith("$")?s.setAttribute(t.slice(1),n[t]):s.style[t]=n[t]}renderClass(n,s){n.className&&(s.className=n.className),n.styleName&&s.classList.add(this.processStyleName(n.styleName))}findStyle(n){var s;return n&&((s=this.styleMap)===null||s===void 0?void 0:s[n])}numberingClass(n,s){return`${this.className}-num-${n}-${s}`}tabStopClass(){return`${this.className}-tab-stop`}styleToString(n,s,t=null){let l=`${n} {\r +`;for(const b in s)b.startsWith("$")||(l+=` ${b}: ${s[b]};\r +`);return t&&(l+=t),l+`}\r +`}numberingCounter(n,s){return`${this.className}-num-${n}-${s}`}levelTextToContent(n,s,t,l){var b;return`"${n.replace(/%\d*/g,k=>{let E=parseInt(k.substring(1),10)-1;return`"counter(${this.numberingCounter(t,E)}, ${l})"`})}${(b={tab:"\\9",space:"\\a0"}[s])!==null&&b!==void 0?b:""}"`}numFormatToCssValue(n){var s;return(s={none:"none",bullet:"disc",decimal:"decimal",lowerLetter:"lower-alpha",upperLetter:"upper-alpha",lowerRoman:"lower-roman",upperRoman:"upper-roman",decimalZero:"decimal-leading-zero",aiueo:"katakana",aiueoFullWidth:"katakana",chineseCounting:"simp-chinese-informal",chineseCountingThousand:"simp-chinese-informal",chineseLegalSimplified:"simp-chinese-formal",chosung:"hangul-consonant",ideographDigital:"cjk-ideographic",ideographTraditional:"cjk-heavenly-stem",ideographLegalTraditional:"trad-chinese-formal",ideographZodiac:"cjk-earthly-branch",iroha:"katakana-iroha",irohaFullWidth:"katakana-iroha",japaneseCounting:"japanese-informal",japaneseDigitalTenThousand:"cjk-decimal",japaneseLegal:"japanese-formal",thaiNumbers:"thai",koreanCounting:"korean-hangul-formal",koreanDigital:"korean-hangul-formal",koreanDigital2:"korean-hanja-informal",hebrew1:"hebrew",hebrew2:"hebrew",hindiNumbers:"devanagari",ganada:"hangul",taiwaneseCounting:"cjk-ideographic",taiwaneseCountingThousand:"cjk-ideographic",taiwaneseDigital:"cjk-decimal"}[n])!==null&&s!==void 0?s:n}refreshTabStops(){this.options.experimental&&(clearTimeout(this.tabsTimeout),this.tabsTimeout=setTimeout(()=>{const n=(0,f.computePixelToPoint)();for(let s of this.currentTabs)(0,f.updateTabStop)(s.span,s.stops,this.defaultTabSize,n)},500))}}},630:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.updateTabStop=e.computePixelToPoint=void 0;const u={pos:0,leader:"none",style:"left"};function r(m){return parseFloat(m)}e.computePixelToPoint=function(m=document.body){const f=document.createElement("div");f.style.width="100pt",m.appendChild(f);const a=100/f.offsetWidth;return m.removeChild(f),a},e.updateTabStop=function(m,f,a,i=.75){const y=m.closest("p"),h=m.getBoundingClientRect(),d=y.getBoundingClientRect(),p=getComputedStyle(y),g=(f==null?void 0:f.length)>0?f.map(_=>({pos:r(_.position),leader:_.leader,style:_.style})).sort((_,C)=>_.pos-C.pos):[u],w=g[g.length-1],P=d.width*i,n=r(a);let s=w.pos+n;if(s_.style!="clear"&&_.pos>b);if(k==null)return;let E=1;if(k.style=="right"||k.style=="center"){const _=Array.from(y.querySelectorAll(`.${m.className}`)),C=_.indexOf(m)+1,o=document.createRange();o.setStart(m,1),C<_.length?o.setEndBefore(_[C]):o.setEndAfter(y);const R=k.style=="center"?.5:1,V=o.getBoundingClientRect(),F=V.left+R*V.width-(d.left-t);E=k.pos-F*i}else E=k.pos-b;switch(m.innerHTML=" ",m.style.textDecoration="inherit",m.style.wordSpacing=`${E.toFixed(0)}pt`,k.leader){case"dot":case"middleDot":m.style.textDecoration="underline",m.style.textDecorationStyle="dotted";break;case"hyphen":case"heavy":case"underscore":m.style.textDecoration="underline"}}},881:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.WmlEndnote=e.WmlFootnote=e.WmlBaseNote=void 0;const r=u(120);class m{}e.WmlBaseNote=m,e.WmlFootnote=class extends m{constructor(){super(...arguments),this.type=r.DomType.Footnote}},e.WmlEndnote=class extends m{constructor(){super(...arguments),this.type=r.DomType.Endnote}}},735:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.EndnotesPart=e.FootnotesPart=e.BaseNotePart=void 0;const r=u(530),m=u(881);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}}e.BaseNotePart=f,e.FootnotesPart=class extends f{constructor(a,i,y){super(a,i,y)}parseXml(a){this.notes=this._documentParser.parseNotes(a,"footnote",m.WmlFootnote)}},e.EndnotesPart=class extends f{constructor(a,i,y){super(a,i,y)}parseXml(a){this.notes=this._documentParser.parseNotes(a,"endnote",m.WmlEndnote)}}},527:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.NumberingPart=void 0;const r=u(530),m=u(682);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}parseXml(i){Object.assign(this,(0,m.parseNumberingPart)(i,this._package.xmlParser)),this.domNumberings=this._documentParser.parseNumberingFile(i)}}e.NumberingPart=f},682:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseNumberingBulletPicture=e.parseNumberingLevelOverrride=e.parseNumberingLevel=e.parseAbstractNumbering=e.parseNumbering=e.parseNumberingPart=void 0;const r=u(109),m=u(488);function f(d,p){let g={id:p.attr(d,"numId"),overrides:[]};for(let w of p.elements(d))switch(w.localName){case"abstractNumId":g.abstractId=p.attr(w,"val");break;case"lvlOverride":g.overrides.push(y(w,p))}return g}function a(d,p){let g={id:p.attr(d,"abstractNumId"),levels:[]};for(let w of p.elements(d))switch(w.localName){case"name":g.name=p.attr(w,"val");break;case"multiLevelType":g.multiLevelType=p.attr(w,"val");break;case"numStyleLink":g.numberingStyleLink=p.attr(w,"val");break;case"styleLink":g.styleLink=p.attr(w,"val");break;case"lvl":g.levels.push(i(w,p))}return g}function i(d,p){let g={level:p.intAttr(d,"ilvl")};for(let w of p.elements(d))switch(w.localName){case"start":g.start=p.attr(w,"val");break;case"lvlRestart":g.restart=p.intAttr(w,"val");break;case"numFmt":g.format=p.attr(w,"val");break;case"lvlText":g.text=p.attr(w,"val");break;case"lvlJc":g.justification=p.attr(w,"val");break;case"lvlPicBulletId":g.bulletPictureId=p.attr(w,"val");break;case"pStyle":g.paragraphStyle=p.attr(w,"val");break;case"pPr":g.paragraphProps=(0,r.parseParagraphProperties)(w,p);break;case"rPr":g.runProps=(0,m.parseRunProperties)(w,p)}return g}function y(d,p){let g={level:p.intAttr(d,"ilvl")};for(let w of p.elements(d))switch(w.localName){case"startOverride":g.start=p.intAttr(w,"val");break;case"lvl":g.numberingLevel=i(w,p)}return g}function h(d,p){var g=p.element(d,"pict"),w=g&&p.element(g,"shape"),P=w&&p.element(w,"imagedata");return P?{id:p.attr(d,"numPicBulletId"),referenceId:p.attr(P,"id"),style:p.attr(w,"style")}:null}e.parseNumberingPart=function(d,p){let g={numberings:[],abstractNumberings:[],bulletPictures:[]};for(let w of p.elements(d))switch(w.localName){case"num":g.numberings.push(f(w,p));break;case"abstractNum":g.abstractNumberings.push(a(w,p));break;case"numPicBullet":g.bulletPictures.push(h(w,p))}return g},e.parseNumbering=f,e.parseAbstractNumbering=a,e.parseNumberingLevel=i,e.parseNumberingLevelOverrride=y,e.parseNumberingBulletPicture=h},472:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.XmlParser=e.serializeXmlString=e.parseXmlString=void 0;const r=u(149);e.parseXmlString=function(a,i=!1){var y;i&&(a=a.replace(/<[?].*[?]>/,"")),a=(y=a).charCodeAt(0)===65279?y.substring(1):y;const h=new DOMParser().parseFromString(a,"application/xml"),d=(p=h.getElementsByTagName("parsererror")[0])===null||p===void 0?void 0:p.textContent;var p;if(d)throw new Error(d);return h},e.serializeXmlString=function(a){return new XMLSerializer().serializeToString(a)};class m{elements(i,y=null){const h=[];for(let d=0,p=i.childNodes.length;d{Object.defineProperty(e,"__esModule",{value:!0}),e.SettingsPart=void 0;const r=u(530),m=u(846);class f extends r.Part{constructor(i,y){super(i,y)}parseXml(i){this.settings=(0,m.parseSettings)(i,this._package.xmlParser)}}e.SettingsPart=f},846:(v,e)=>{function u(r,m){var f={defaultNoteIds:[]};for(let a of m.elements(r))switch(a.localName){case"numFmt":f.nummeringFormat=m.attr(a,"val");break;case"footnote":case"endnote":f.defaultNoteIds.push(m.attr(a,"id"))}return f}Object.defineProperty(e,"__esModule",{value:!0}),e.parseNoteProperties=e.parseSettings=void 0,e.parseSettings=function(r,m){var f={};for(let a of m.elements(r))switch(a.localName){case"defaultTabStop":f.defaultTabStop=m.lengthAttr(a,"val");break;case"footnotePr":f.footnoteProps=u(a,m);break;case"endnotePr":f.endnoteProps=u(a,m);break;case"autoHyphenation":f.autoHyphenation=m.boolAttr(a,"val")}return f},e.parseNoteProperties=u},240:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.StylesPart=void 0;const r=u(530);class m extends r.Part{constructor(a,i,y){super(a,i),this._documentParser=y}parseXml(a){this.styles=this._documentParser.parseStylesFile(a)}}e.StylesPart=m},893:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ThemePart=void 0;const r=u(530),m=u(55);class f extends r.Part{constructor(i,y){super(i,y)}parseXml(i){this.theme=(0,m.parseTheme)(i,this._package.xmlParser)}}e.ThemePart=f},55:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseFontInfo=e.parseFontScheme=e.parseColorScheme=e.parseTheme=e.DmlTheme=void 0;class u{}function r(a,i){var y={name:i.attr(a,"name"),colors:{}};for(let p of i.elements(a)){var h=i.element(p,"srgbClr"),d=i.element(p,"sysClr");h?y.colors[p.localName]=i.attr(h,"val"):d&&(y.colors[p.localName]=i.attr(d,"lastClr"))}return y}function m(a,i){var y={name:i.attr(a,"name")};for(let h of i.elements(a))switch(h.localName){case"majorFont":y.majorFont=f(h,i);break;case"minorFont":y.minorFont=f(h,i)}return y}function f(a,i){return{latinTypeface:i.elementAttr(a,"latin","typeface"),eaTypeface:i.elementAttr(a,"ea","typeface"),csTypeface:i.elementAttr(a,"cs","typeface")}}e.DmlTheme=u,e.parseTheme=function(a,i){var y=new u,h=i.element(a,"themeElements");for(let d of i.elements(h))switch(d.localName){case"clrScheme":y.colorScheme=r(d,i);break;case"fontScheme":y.fontScheme=m(d,i)}return y},e.parseColorScheme=r,e.parseFontScheme=m,e.parseFontInfo=f},593:(v,e)=>{function u(r){return r&&typeof r=="object"&&!Array.isArray(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.asArray=e.formatCssRules=e.parseCssRules=e.mergeDeep=e.isString=e.isObject=e.blobToBase64=e.keyBy=e.resolvePath=e.splitPath=e.escapeClassName=void 0,e.escapeClassName=function(r){return r==null?void 0:r.replace(/[ .]+/g,"-").replace(/[&]+/g,"and").toLowerCase()},e.splitPath=function(r){let m=r.lastIndexOf("/")+1;return[m==0?"":r.substring(0,m),m==0?r:r.substring(m)]},e.resolvePath=function(r,m){try{const f="http://docx/";return new URL(r,f+m).toString().substring(f.length)}catch{return`${m}${r}`}},e.keyBy=function(r,m){return r.reduce((f,a)=>(f[m(a)]=a,f),{})},e.blobToBase64=function(r){return new Promise((m,f)=>{const a=new FileReader;a.onloadend=()=>m(a.result),a.onerror=()=>f(),a.readAsDataURL(r)})},e.isObject=u,e.isString=function(r){return typeof r=="string"||r instanceof String},e.mergeDeep=function r(m,...f){var a;if(!f.length)return m;const i=f.shift();if(u(m)&&u(i))for(const y in i)u(i[y])?r((a=m[y])!==null&&a!==void 0?a:m[y]={},i[y]):m[y]=i[y];return r(m,...f)},e.parseCssRules=function(r){const m={};for(const f of r.split(";")){const[a,i]=f.split(":");m[a]=i}return m},e.formatCssRules=function(r){return Object.entries(r).map((m,f)=>`${m}: ${f}`).join(";")},e.asArray=function(r){return Array.isArray(r)?r:[r]}},320:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseVmlElement=e.VmlElement=void 0;const r=u(149),m=u(120),f=u(472);class a extends m.OpenXmlElementBase{constructor(){super(...arguments),this.type=m.DomType.VmlElement,this.attrs={}}}function i(h){var d;return{stroke:f.default.attr(h,"color"),"stroke-width":(d=f.default.lengthAttr(h,"weight",r.LengthUsage.Emu))!==null&&d!==void 0?d:"1px"}}function y(h){return h.split(",")}e.VmlElement=a,e.parseVmlElement=function h(d,p){var g=new a;switch(d.localName){case"rect":g.tagName="rect",Object.assign(g.attrs,{width:"100%",height:"100%"});break;case"oval":g.tagName="ellipse",Object.assign(g.attrs,{cx:"50%",cy:"50%",rx:"50%",ry:"50%"});break;case"line":g.tagName="line";break;case"shape":g.tagName="g";break;case"textbox":g.tagName="foreignObject",Object.assign(g.attrs,{width:"100%",height:"100%"});break;default:return null}for(const w of f.default.attrs(d))switch(w.localName){case"style":g.cssStyleText=w.value;break;case"fillcolor":g.attrs.fill=w.value;break;case"from":const[P,n]=y(w.value);Object.assign(g.attrs,{x1:P,y1:n});break;case"to":const[s,t]=y(w.value);Object.assign(g.attrs,{x2:s,y2:t})}for(const w of f.default.elements(d))switch(w.localName){case"stroke":Object.assign(g.attrs,i(w));break;case"fill":Object.assign(g.attrs,{});break;case"imagedata":g.tagName="image",Object.assign(g.attrs,{width:"100%",height:"100%"}),g.imageHref={id:f.default.attr(w,"id"),title:f.default.attr(w,"title")};break;case"txbxContent":g.children.push(...p.parseBodyElements(w));break;default:const P=h(w,p);P&&g.children.push(P)}return g}},213:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.deobfuscate=e.WordDocument=void 0;const r=u(461),m=u(380),f=u(522),a=u(448),i=u(593),y=u(527),h=u(240),d=u(985),p=u(665),g=u(162),w=u(893),P=u(735),n=u(287),s=u(177),t=[{type:r.RelationshipTypes.OfficeDocument,target:"word/document.xml"},{type:r.RelationshipTypes.ExtendedProperties,target:"docProps/app.xml"},{type:r.RelationshipTypes.CoreProperties,target:"docProps/core.xml"},{type:r.RelationshipTypes.CustomProperties,target:"docProps/custom.xml"}];class l{constructor(){this.parts=[],this.partsMap={}}static async load(E,_,C){var o=new l;return o._options=C,o._parser=_,o._package=await f.OpenXmlPackage.load(E,C),o.rels=await o._package.loadRelationships(),await Promise.all(t.map(R=>{var V;const F=(V=o.rels.find(q=>q.type===R.type))!==null&&V!==void 0?V:R;return o.loadRelationshipPart(F.target,F.type)})),o}save(E="blob"){return this._package.save(E)}async loadRelationshipPart(E,_){var C;if(this.partsMap[E])return this.partsMap[E];if(!this._package.get(E))return null;let o=null;switch(_){case r.RelationshipTypes.OfficeDocument:this.documentPart=o=new a.DocumentPart(this._package,E,this._parser);break;case r.RelationshipTypes.FontTable:this.fontTablePart=o=new m.FontTablePart(this._package,E);break;case r.RelationshipTypes.Numbering:this.numberingPart=o=new y.NumberingPart(this._package,E,this._parser);break;case r.RelationshipTypes.Styles:this.stylesPart=o=new h.StylesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Theme:this.themePart=o=new w.ThemePart(this._package,E);break;case r.RelationshipTypes.Footnotes:this.footnotesPart=o=new P.FootnotesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Endnotes:this.endnotesPart=o=new P.EndnotesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Footer:o=new d.FooterPart(this._package,E,this._parser);break;case r.RelationshipTypes.Header:o=new d.HeaderPart(this._package,E,this._parser);break;case r.RelationshipTypes.CoreProperties:this.corePropsPart=o=new g.CorePropsPart(this._package,E);break;case r.RelationshipTypes.ExtendedProperties:this.extendedPropsPart=o=new p.ExtendedPropsPart(this._package,E);break;case r.RelationshipTypes.CustomProperties:o=new s.CustomPropsPart(this._package,E);break;case r.RelationshipTypes.Settings:this.settingsPart=o=new n.SettingsPart(this._package,E)}if(o==null)return Promise.resolve(null);if(this.partsMap[E]=o,this.parts.push(o),await o.load(),((C=o.rels)===null||C===void 0?void 0:C.length)>0){const[R]=(0,i.splitPath)(o.path);await Promise.all(o.rels.map(V=>this.loadRelationshipPart((0,i.resolvePath)(V.target,R),V.type)))}return o}async loadDocumentImage(E,_){const C=await this.loadResource(_??this.documentPart,E,"blob");return this.blobToURL(C)}async loadNumberingImage(E){const _=await this.loadResource(this.numberingPart,E,"blob");return this.blobToURL(_)}async loadFont(E,_){const C=await this.loadResource(this.fontTablePart,E,"uint8array");return C&&this.blobToURL(new Blob([b(C,_)]))}blobToURL(E){return E?this._options.useBase64URL?(0,i.blobToBase64)(E):URL.createObjectURL(E):null}findPartByRelId(E,_=null){var C,o=((C=_.rels)!==null&&C!==void 0?C:this.rels).find(V=>V.id==E);const R=_?(0,i.splitPath)(_.path)[0]:"";return o?this.partsMap[(0,i.resolvePath)(o.target,R)]:null}getPathById(E,_){const C=E.rels.find(R=>R.id==_),[o]=(0,i.splitPath)(E.path);return C?(0,i.resolvePath)(C.target,o):null}loadResource(E,_,C){const o=this.getPathById(E,_);return o?this._package.load(o,C):Promise.resolve(null)}}function b(k,E){const _=E.replace(/{|}|-/g,""),C=new Array(16);for(let o=0;o<16;o++)C[16-o-1]=parseInt(_.substr(2*o,2),16);for(let o=0;o<32;o++)k[o]=k[o]^C[o%16];return k}e.WordDocument=l,e.deobfuscate=b},583:v=>{v.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 100%27 preserveAspectRatio=%27none%27%3E%3Cpath d=%27m0,75 l5,0 l5,25 l10,-100%27 stroke=%27black%27 fill=%27none%27 vector-effect=%27non-scaling-stroke%27/%3E%3C/svg%3E"},626:v=>{v.exports=T}},B={};function S(v){var e=B[v];if(e!==void 0)return e.exports;var u=B[v]={id:v,exports:{}};return L[v](u,u.exports,S),u.exports}return S.m=L,S.n=v=>{var e=v&&v.__esModule?()=>v.default:()=>v;return S.d(e,{a:e}),e},S.d=(v,e)=>{for(var u in e)S.o(e,u)&&!S.o(v,u)&&Object.defineProperty(v,u,{enumerable:!0,get:e[u]})},S.o=(v,e)=>Object.prototype.hasOwnProperty.call(v,e),S.r=v=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(v,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(v,"__esModule",{value:!0})},S.b=document.baseURI||self.location.href,S(667)})())})(Ce);var Ne=Ce.exports;const Oe={ignoreLastRenderedPageBreak:!1};function Re(ne,ce={}){return typeof ne=="string"?ze(ne,ce):Promise.resolve(ne)}function ze(ne,ce){return fetch(ne,ce).then(T=>T.status!==200?Promise.reject(T):T)}async function Me(ne){let ce;return ne instanceof Blob?ce=ne:ne instanceof Response?ce=await ne.blob():ne instanceof ArrayBuffer&&(ce=new Blob([ne])),ce}function Ie(ne,ce,T={}){if(!ne)return ce.innerHTML="",Promise.resolve();let L;return ne instanceof Blob?L=ne:ne instanceof Response?L=ne.blob():ne instanceof ArrayBuffer&&(L=new Blob([ne])),Ne.renderAsync(L,ce,ce,{...Oe,...T})}const je={getData:Re,render:Ie,getBlob:Me};export{je as d}; diff --git a/examples/dist/assets/docx-d30f8993.js b/examples/dist/assets/docx-d30f8993.js new file mode 100644 index 0000000..5bd1a0f --- /dev/null +++ b/examples/dist/assets/docx-d30f8993.js @@ -0,0 +1,97 @@ +import{y as _e}from"./index-58cbfcf0.js";import{c as ke}from"./_commonjs-dynamic-modules-302442b1.js";var Ce={exports:{}},xe={exports:{}};/*! + +JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/main/LICENSE +*/var Pe;function Be(){return Pe||(Pe=1,function(ne,ce){(function(T){ne.exports=T()})(function(){return function T(L,B,S){function v(r,m){if(!B[r]){if(!L[r]){var f=typeof ke=="function"&&ke;if(!m&&f)return f(r,!0);if(e)return e(r,!0);var a=new Error("Cannot find module '"+r+"'");throw a.code="MODULE_NOT_FOUND",a}var i=B[r]={exports:{}};L[r][0].call(i.exports,function(y){var h=L[r][1][y];return v(h||y)},i,i.exports,T,L,B,S)}return B[r].exports}for(var e=typeof ke=="function"&&ke,u=0;u>2,i=(3&r)<<4|m>>4,y=1>6:64,h=2>4,m=(15&a)<<4|(i=e.indexOf(u.charAt(h++)))>>2,f=(3&i)<<6|(y=e.indexOf(u.charAt(h++))),g[d++]=r,i!==64&&(g[d++]=m),y!==64&&(g[d++]=f);return g}},{"./support":30,"./utils":32}],2:[function(T,L,B){var S=T("./external"),v=T("./stream/DataWorker"),e=T("./stream/Crc32Probe"),u=T("./stream/DataLengthProbe");function r(m,f,a,i,y){this.compressedSize=m,this.uncompressedSize=f,this.crc32=a,this.compression=i,this.compressedContent=y}r.prototype={getContentWorker:function(){var m=new v(S.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new u("data_length")),f=this;return m.on("end",function(){if(this.streamInfo.data_length!==f.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),m},getCompressedWorker:function(){return new v(S.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},r.createWorkerFrom=function(m,f,a){return m.pipe(new e).pipe(new u("uncompressedSize")).pipe(f.compressWorker(a)).pipe(new u("compressedSize")).withStreamInfo("compression",f)},L.exports=r},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(T,L,B){var S=T("./stream/GenericWorker");B.STORE={magic:"\0\0",compressWorker:function(){return new S("STORE compression")},uncompressWorker:function(){return new S("STORE decompression")}},B.DEFLATE=T("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(T,L,B){var S=T("./utils"),v=function(){for(var e,u=[],r=0;r<256;r++){e=r;for(var m=0;m<8;m++)e=1&e?3988292384^e>>>1:e>>>1;u[r]=e}return u}();L.exports=function(e,u){return e!==void 0&&e.length?S.getTypeOf(e)!=="string"?function(r,m,f,a){var i=v,y=a+f;r^=-1;for(var h=a;h>>8^i[255&(r^m[h])];return-1^r}(0|u,e,e.length,0):function(r,m,f,a){var i=v,y=a+f;r^=-1;for(var h=a;h>>8^i[255&(r^m.charCodeAt(h))];return-1^r}(0|u,e,e.length,0):0}},{"./utils":32}],5:[function(T,L,B){B.base64=!1,B.binary=!1,B.dir=!1,B.createFolders=!0,B.date=null,B.compression=null,B.compressionOptions=null,B.comment=null,B.unixPermissions=null,B.dosPermissions=null},{}],6:[function(T,L,B){var S=null;S=typeof Promise<"u"?Promise:T("lie"),L.exports={Promise:S}},{lie:37}],7:[function(T,L,B){var S=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",v=T("pako"),e=T("./utils"),u=T("./stream/GenericWorker"),r=S?"uint8array":"array";function m(f,a){u.call(this,"FlateWorker/"+f),this._pako=null,this._pakoAction=f,this._pakoOptions=a,this.meta={}}B.magic="\b\0",e.inherits(m,u),m.prototype.processChunk=function(f){this.meta=f.meta,this._pako===null&&this._createPako(),this._pako.push(e.transformTo(r,f.data),!1)},m.prototype.flush=function(){u.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},m.prototype.cleanUp=function(){u.prototype.cleanUp.call(this),this._pako=null},m.prototype._createPako=function(){this._pako=new v[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var f=this;this._pako.onData=function(a){f.push({data:a,meta:f.meta})}},B.compressWorker=function(f){return new m("Deflate",f)},B.uncompressWorker=function(){return new m("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(T,L,B){function S(i,y){var h,d="";for(h=0;h>>=8;return d}function v(i,y,h,d,p,g){var w,P,n=i.file,s=i.compression,t=g!==r.utf8encode,l=e.transformTo("string",g(n.name)),b=e.transformTo("string",r.utf8encode(n.name)),k=n.comment,E=e.transformTo("string",g(k)),_=e.transformTo("string",r.utf8encode(k)),C=b.length!==n.name.length,o=_.length!==k.length,R="",V="",F="",q=n.dir,W=n.date,Y={crc32:0,compressedSize:0,uncompressedSize:0};y&&!h||(Y.crc32=i.crc32,Y.compressedSize=i.compressedSize,Y.uncompressedSize=i.uncompressedSize);var z=0;y&&(z|=8),t||!C&&!o||(z|=2048);var O=0,J=0;q&&(O|=16),p==="UNIX"?(J=798,O|=function(Z,ae){var le=Z;return Z||(le=ae?16893:33204),(65535&le)<<16}(n.unixPermissions,q)):(J=20,O|=function(Z){return 63&(Z||0)}(n.dosPermissions)),w=W.getUTCHours(),w<<=6,w|=W.getUTCMinutes(),w<<=5,w|=W.getUTCSeconds()/2,P=W.getUTCFullYear()-1980,P<<=4,P|=W.getUTCMonth()+1,P<<=5,P|=W.getUTCDate(),C&&(V=S(1,1)+S(m(l),4)+b,R+="up"+S(V.length,2)+V),o&&(F=S(1,1)+S(m(E),4)+_,R+="uc"+S(F.length,2)+F);var X="";return X+=` +\0`,X+=S(z,2),X+=s.magic,X+=S(w,2),X+=S(P,2),X+=S(Y.crc32,4),X+=S(Y.compressedSize,4),X+=S(Y.uncompressedSize,4),X+=S(l.length,2),X+=S(R.length,2),{fileRecord:f.LOCAL_FILE_HEADER+X+l+R,dirRecord:f.CENTRAL_FILE_HEADER+S(J,2)+X+S(E.length,2)+"\0\0\0\0"+S(O,4)+S(d,4)+l+R+E}}var e=T("../utils"),u=T("../stream/GenericWorker"),r=T("../utf8"),m=T("../crc32"),f=T("../signature");function a(i,y,h,d){u.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=y,this.zipPlatform=h,this.encodeFileName=d,this.streamFiles=i,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}e.inherits(a,u),a.prototype.push=function(i){var y=i.meta.percent||0,h=this.entriesCount,d=this._sources.length;this.accumulate?this.contentBuffer.push(i):(this.bytesWritten+=i.data.length,u.prototype.push.call(this,{data:i.data,meta:{currentFile:this.currentFile,percent:h?(y+100*(h-d-1))/h:100}}))},a.prototype.openedSource=function(i){this.currentSourceOffset=this.bytesWritten,this.currentFile=i.file.name;var y=this.streamFiles&&!i.file.dir;if(y){var h=v(i,y,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:h.fileRecord,meta:{percent:0}})}else this.accumulate=!0},a.prototype.closedSource=function(i){this.accumulate=!1;var y=this.streamFiles&&!i.file.dir,h=v(i,y,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(h.dirRecord),y)this.push({data:function(d){return f.DATA_DESCRIPTOR+S(d.crc32,4)+S(d.compressedSize,4)+S(d.uncompressedSize,4)}(i),meta:{percent:100}});else for(this.push({data:h.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},a.prototype.flush=function(){for(var i=this.bytesWritten,y=0;y=this.index;u--)r=(r<<8)+this.byteAt(u);return this.index+=e,r},readString:function(e){return S.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},L.exports=v},{"../utils":32}],19:[function(T,L,B){var S=T("./Uint8ArrayReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.readData=function(e){this.checkOffset(e);var u=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(T,L,B){var S=T("./DataReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},v.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},v.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},v.prototype.readData=function(e){this.checkOffset(e);var u=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./DataReader":18}],21:[function(T,L,B){var S=T("./ArrayReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.readData=function(e){if(this.checkOffset(e),e===0)return new Uint8Array(0);var u=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./ArrayReader":17}],22:[function(T,L,B){var S=T("../utils"),v=T("../support"),e=T("./ArrayReader"),u=T("./StringReader"),r=T("./NodeBufferReader"),m=T("./Uint8ArrayReader");L.exports=function(f){var a=S.getTypeOf(f);return S.checkSupport(a),a!=="string"||v.uint8array?a==="nodebuffer"?new r(f):v.uint8array?new m(S.transformTo("uint8array",f)):new e(S.transformTo("array",f)):new u(f)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(T,L,B){B.LOCAL_FILE_HEADER="PK",B.CENTRAL_FILE_HEADER="PK",B.CENTRAL_DIRECTORY_END="PK",B.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",B.ZIP64_CENTRAL_DIRECTORY_END="PK",B.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(T,L,B){var S=T("./GenericWorker"),v=T("../utils");function e(u){S.call(this,"ConvertWorker to "+u),this.destType=u}v.inherits(e,S),e.prototype.processChunk=function(u){this.push({data:v.transformTo(this.destType,u.data),meta:u.meta})},L.exports=e},{"../utils":32,"./GenericWorker":28}],25:[function(T,L,B){var S=T("./GenericWorker"),v=T("../crc32");function e(){S.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}T("../utils").inherits(e,S),e.prototype.processChunk=function(u){this.streamInfo.crc32=v(u.data,this.streamInfo.crc32||0),this.push(u)},L.exports=e},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(T,L,B){var S=T("../utils"),v=T("./GenericWorker");function e(u){v.call(this,"DataLengthProbe for "+u),this.propName=u,this.withStreamInfo(u,0)}S.inherits(e,v),e.prototype.processChunk=function(u){if(u){var r=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=r+u.data.length}v.prototype.processChunk.call(this,u)},L.exports=e},{"../utils":32,"./GenericWorker":28}],27:[function(T,L,B){var S=T("../utils"),v=T("./GenericWorker");function e(u){v.call(this,"DataWorker");var r=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,u.then(function(m){r.dataIsReady=!0,r.data=m,r.max=m&&m.length||0,r.type=S.getTypeOf(m),r.isPaused||r._tickAndRepeat()},function(m){r.error(m)})}S.inherits(e,v),e.prototype.cleanUp=function(){v.prototype.cleanUp.call(this),this.data=null},e.prototype.resume=function(){return!!v.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,S.delay(this._tickAndRepeat,[],this)),!0)},e.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(S.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},e.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var u=null,r=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":u=this.data.substring(this.index,r);break;case"uint8array":u=this.data.subarray(this.index,r);break;case"array":case"nodebuffer":u=this.data.slice(this.index,r)}return this.index=r,this.push({data:u,meta:{percent:this.max?this.index/this.max*100:0}})},L.exports=e},{"../utils":32,"./GenericWorker":28}],28:[function(T,L,B){function S(v){this.name=v||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}S.prototype={push:function(v){this.emit("data",v)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(v){this.emit("error",v)}return!0},error:function(v){return!this.isFinished&&(this.isPaused?this.generatedError=v:(this.isFinished=!0,this.emit("error",v),this.previous&&this.previous.error(v),this.cleanUp()),!0)},on:function(v,e){return this._listeners[v].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(v,e){if(this._listeners[v])for(var u=0;u "+v:v}},L.exports=S},{}],29:[function(T,L,B){var S=T("../utils"),v=T("./ConvertWorker"),e=T("./GenericWorker"),u=T("../base64"),r=T("../support"),m=T("../external"),f=null;if(r.nodestream)try{f=T("../nodejs/NodejsStreamOutputAdapter")}catch{}function a(y,h){return new m.Promise(function(d,p){var g=[],w=y._internalType,P=y._outputType,n=y._mimeType;y.on("data",function(s,t){g.push(s),h&&h(t)}).on("error",function(s){g=[],p(s)}).on("end",function(){try{var s=function(t,l,b){switch(t){case"blob":return S.newBlob(S.transformTo("arraybuffer",l),b);case"base64":return u.encode(l);default:return S.transformTo(t,l)}}(P,function(t,l){var b,k=0,E=null,_=0;for(b=0;b"u")B.blob=!1;else{var S=new ArrayBuffer(0);try{B.blob=new Blob([S],{type:"application/zip"}).size===0}catch{try{var v=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);v.append(S),B.blob=v.getBlob("application/zip").size===0}catch{B.blob=!1}}}try{B.nodestream=!!T("readable-stream").Readable}catch{B.nodestream=!1}},{"readable-stream":16}],31:[function(T,L,B){for(var S=T("./utils"),v=T("./support"),e=T("./nodejsUtils"),u=T("./stream/GenericWorker"),r=new Array(256),m=0;m<256;m++)r[m]=252<=m?6:248<=m?5:240<=m?4:224<=m?3:192<=m?2:1;r[254]=r[254]=1;function f(){u.call(this,"utf-8 decode"),this.leftOver=null}function a(){u.call(this,"utf-8 encode")}B.utf8encode=function(i){return v.nodebuffer?e.newBufferFrom(i,"utf-8"):function(y){var h,d,p,g,w,P=y.length,n=0;for(g=0;g>>6:(d<65536?h[w++]=224|d>>>12:(h[w++]=240|d>>>18,h[w++]=128|d>>>12&63),h[w++]=128|d>>>6&63),h[w++]=128|63&d);return h}(i)},B.utf8decode=function(i){return v.nodebuffer?S.transformTo("nodebuffer",i).toString("utf-8"):function(y){var h,d,p,g,w=y.length,P=new Array(2*w);for(h=d=0;h>10&1023,P[d++]=56320|1023&p)}return P.length!==d&&(P.subarray?P=P.subarray(0,d):P.length=d),S.applyFromCharCode(P)}(i=S.transformTo(v.uint8array?"uint8array":"array",i))},S.inherits(f,u),f.prototype.processChunk=function(i){var y=S.transformTo(v.uint8array?"uint8array":"array",i.data);if(this.leftOver&&this.leftOver.length){if(v.uint8array){var h=y;(y=new Uint8Array(h.length+this.leftOver.length)).set(this.leftOver,0),y.set(h,this.leftOver.length)}else y=this.leftOver.concat(y);this.leftOver=null}var d=function(g,w){var P;for((w=w||g.length)>g.length&&(w=g.length),P=w-1;0<=P&&(192&g[P])==128;)P--;return P<0||P===0?w:P+r[g[P]]>w?P:w}(y),p=y;d!==y.length&&(v.uint8array?(p=y.subarray(0,d),this.leftOver=y.subarray(d,y.length)):(p=y.slice(0,d),this.leftOver=y.slice(d,y.length))),this.push({data:B.utf8decode(p),meta:i.meta})},f.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:B.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},B.Utf8DecodeWorker=f,S.inherits(a,u),a.prototype.processChunk=function(i){this.push({data:B.utf8encode(i.data),meta:i.meta})},B.Utf8EncodeWorker=a},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(T,L,B){var S=T("./support"),v=T("./base64"),e=T("./nodejsUtils"),u=T("./external");function r(h){return h}function m(h,d){for(var p=0;p>8;this.dir=!!(16&this.externalFileAttributes),i==0&&(this.dosPermissions=63&this.externalFileAttributes),i==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var i=S(this.extraFields[1].value);this.uncompressedSize===v.MAX_VALUE_32BITS&&(this.uncompressedSize=i.readInt(8)),this.compressedSize===v.MAX_VALUE_32BITS&&(this.compressedSize=i.readInt(8)),this.localHeaderOffset===v.MAX_VALUE_32BITS&&(this.localHeaderOffset=i.readInt(8)),this.diskNumberStart===v.MAX_VALUE_32BITS&&(this.diskNumberStart=i.readInt(4))}},readExtraFields:function(i){var y,h,d,p=i.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});i.index+4>>6:(i<65536?a[d++]=224|i>>>12:(a[d++]=240|i>>>18,a[d++]=128|i>>>12&63),a[d++]=128|i>>>6&63),a[d++]=128|63&i);return a},B.buf2binstring=function(f){return m(f,f.length)},B.binstring2buf=function(f){for(var a=new S.Buf8(f.length),i=0,y=a.length;i>10&1023,g[y++]=56320|1023&h)}return m(g,y)},B.utf8border=function(f,a){var i;for((a=a||f.length)>f.length&&(a=f.length),i=a-1;0<=i&&(192&f[i])==128;)i--;return i<0||i===0?a:i+u[f[i]]>a?i:a}},{"./common":41}],43:[function(T,L,B){L.exports=function(S,v,e,u){for(var r=65535&S|0,m=S>>>16&65535|0,f=0;e!==0;){for(e-=f=2e3>>1:v>>>1;e[u]=v}return e}();L.exports=function(v,e,u,r){var m=S,f=r+u;v^=-1;for(var a=r;a>>8^m[255&(v^e[a])];return-1^v}},{}],46:[function(T,L,B){var S,v=T("../utils/common"),e=T("./trees"),u=T("./adler32"),r=T("./crc32"),m=T("./messages"),f=0,a=4,i=0,y=-2,h=-1,d=4,p=2,g=8,w=9,P=286,n=30,s=19,t=2*P+1,l=15,b=3,k=258,E=k+b+1,_=42,C=113,o=1,R=2,V=3,F=4;function q(c,I){return c.msg=m[I],I}function W(c){return(c<<1)-(4c.avail_out&&(M=c.avail_out),M!==0&&(v.arraySet(c.output,I.pending_buf,I.pending_out,M,c.next_out),c.next_out+=M,I.pending_out+=M,c.total_out+=M,c.avail_out-=M,I.pending-=M,I.pending===0&&(I.pending_out=0))}function O(c,I){e._tr_flush_block(c,0<=c.block_start?c.block_start:-1,c.strstart-c.block_start,I),c.block_start=c.strstart,z(c.strm)}function J(c,I){c.pending_buf[c.pending++]=I}function X(c,I){c.pending_buf[c.pending++]=I>>>8&255,c.pending_buf[c.pending++]=255&I}function Z(c,I){var M,A,x=c.max_chain_length,D=c.strstart,j=c.prev_length,U=c.nice_match,N=c.strstart>c.w_size-E?c.strstart-(c.w_size-E):0,H=c.window,G=c.w_mask,$=c.prev,K=c.strstart+k,re=H[D+j-1],ee=H[D+j];c.prev_length>=c.good_match&&(x>>=2),U>c.lookahead&&(U=c.lookahead);do if(H[(M=I)+j]===ee&&H[M+j-1]===re&&H[M]===H[D]&&H[++M]===H[D+1]){D+=2,M++;do;while(H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&DN&&--x!=0);return j<=c.lookahead?j:c.lookahead}function ae(c){var I,M,A,x,D,j,U,N,H,G,$=c.w_size;do{if(x=c.window_size-c.lookahead-c.strstart,c.strstart>=$+($-E)){for(v.arraySet(c.window,c.window,$,$,0),c.match_start-=$,c.strstart-=$,c.block_start-=$,I=M=c.hash_size;A=c.head[--I],c.head[I]=$<=A?A-$:0,--M;);for(I=M=$;A=c.prev[--I],c.prev[I]=$<=A?A-$:0,--M;);x+=$}if(c.strm.avail_in===0)break;if(j=c.strm,U=c.window,N=c.strstart+c.lookahead,H=x,G=void 0,G=j.avail_in,H=b)for(D=c.strstart-c.insert,c.ins_h=c.window[D],c.ins_h=(c.ins_h<=b&&(c.ins_h=(c.ins_h<=b)if(A=e._tr_tally(c,c.strstart-c.match_start,c.match_length-b),c.lookahead-=c.match_length,c.match_length<=c.max_lazy_match&&c.lookahead>=b){for(c.match_length--;c.strstart++,c.ins_h=(c.ins_h<=b&&(c.ins_h=(c.ins_h<=b&&c.match_length<=c.prev_length){for(x=c.strstart+c.lookahead-b,A=e._tr_tally(c,c.strstart-1-c.prev_match,c.prev_length-b),c.lookahead-=c.prev_length-1,c.prev_length-=2;++c.strstart<=x&&(c.ins_h=(c.ins_h<c.pending_buf_size-5&&(M=c.pending_buf_size-5);;){if(c.lookahead<=1){if(ae(c),c.lookahead===0&&I===f)return o;if(c.lookahead===0)break}c.strstart+=c.lookahead,c.lookahead=0;var A=c.block_start+M;if((c.strstart===0||c.strstart>=A)&&(c.lookahead=c.strstart-A,c.strstart=A,O(c,!1),c.strm.avail_out===0)||c.strstart-c.block_start>=c.w_size-E&&(O(c,!1),c.strm.avail_out===0))return o}return c.insert=0,I===a?(O(c,!0),c.strm.avail_out===0?V:F):(c.strstart>c.block_start&&(O(c,!1),c.strm.avail_out),o)}),new te(4,4,8,4,le),new te(4,5,16,8,le),new te(4,6,32,32,le),new te(4,4,16,16,Q),new te(8,16,32,32,Q),new te(8,16,128,128,Q),new te(8,32,128,256,Q),new te(32,128,258,1024,Q),new te(32,258,258,4096,Q)],B.deflateInit=function(c,I){return he(c,I,g,15,8,0)},B.deflateInit2=he,B.deflateReset=de,B.deflateResetKeep=se,B.deflateSetHeader=function(c,I){return c&&c.state?c.state.wrap!==2?y:(c.state.gzhead=I,i):y},B.deflate=function(c,I){var M,A,x,D;if(!c||!c.state||5>8&255),J(A,A.gzhead.time>>16&255),J(A,A.gzhead.time>>24&255),J(A,A.level===9?2:2<=A.strategy||A.level<2?4:0),J(A,255&A.gzhead.os),A.gzhead.extra&&A.gzhead.extra.length&&(J(A,255&A.gzhead.extra.length),J(A,A.gzhead.extra.length>>8&255)),A.gzhead.hcrc&&(c.adler=r(c.adler,A.pending_buf,A.pending,0)),A.gzindex=0,A.status=69):(J(A,0),J(A,0),J(A,0),J(A,0),J(A,0),J(A,A.level===9?2:2<=A.strategy||A.level<2?4:0),J(A,3),A.status=C);else{var j=g+(A.w_bits-8<<4)<<8;j|=(2<=A.strategy||A.level<2?0:A.level<6?1:A.level===6?2:3)<<6,A.strstart!==0&&(j|=32),j+=31-j%31,A.status=C,X(A,j),A.strstart!==0&&(X(A,c.adler>>>16),X(A,65535&c.adler)),c.adler=1}if(A.status===69)if(A.gzhead.extra){for(x=A.pending;A.gzindex<(65535&A.gzhead.extra.length)&&(A.pending!==A.pending_buf_size||(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending!==A.pending_buf_size));)J(A,255&A.gzhead.extra[A.gzindex]),A.gzindex++;A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),A.gzindex===A.gzhead.extra.length&&(A.gzindex=0,A.status=73)}else A.status=73;if(A.status===73)if(A.gzhead.name){x=A.pending;do{if(A.pending===A.pending_buf_size&&(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending===A.pending_buf_size)){D=1;break}D=A.gzindexx&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),D===0&&(A.gzindex=0,A.status=91)}else A.status=91;if(A.status===91)if(A.gzhead.comment){x=A.pending;do{if(A.pending===A.pending_buf_size&&(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending===A.pending_buf_size)){D=1;break}D=A.gzindexx&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),D===0&&(A.status=103)}else A.status=103;if(A.status===103&&(A.gzhead.hcrc?(A.pending+2>A.pending_buf_size&&z(c),A.pending+2<=A.pending_buf_size&&(J(A,255&c.adler),J(A,c.adler>>8&255),c.adler=0,A.status=C)):A.status=C),A.pending!==0){if(z(c),c.avail_out===0)return A.last_flush=-1,i}else if(c.avail_in===0&&W(I)<=W(M)&&I!==a)return q(c,-5);if(A.status===666&&c.avail_in!==0)return q(c,-5);if(c.avail_in!==0||A.lookahead!==0||I!==f&&A.status!==666){var U=A.strategy===2?function(N,H){for(var G;;){if(N.lookahead===0&&(ae(N),N.lookahead===0)){if(H===f)return o;break}if(N.match_length=0,G=e._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++,G&&(O(N,!1),N.strm.avail_out===0))return o}return N.insert=0,H===a?(O(N,!0),N.strm.avail_out===0?V:F):N.last_lit&&(O(N,!1),N.strm.avail_out===0)?o:R}(A,I):A.strategy===3?function(N,H){for(var G,$,K,re,ee=N.window;;){if(N.lookahead<=k){if(ae(N),N.lookahead<=k&&H===f)return o;if(N.lookahead===0)break}if(N.match_length=0,N.lookahead>=b&&0N.lookahead&&(N.match_length=N.lookahead)}if(N.match_length>=b?(G=e._tr_tally(N,1,N.match_length-b),N.lookahead-=N.match_length,N.strstart+=N.match_length,N.match_length=0):(G=e._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++),G&&(O(N,!1),N.strm.avail_out===0))return o}return N.insert=0,H===a?(O(N,!0),N.strm.avail_out===0?V:F):N.last_lit&&(O(N,!1),N.strm.avail_out===0)?o:R}(A,I):S[A.level].func(A,I);if(U!==V&&U!==F||(A.status=666),U===o||U===V)return c.avail_out===0&&(A.last_flush=-1),i;if(U===R&&(I===1?e._tr_align(A):I!==5&&(e._tr_stored_block(A,0,0,!1),I===3&&(Y(A.head),A.lookahead===0&&(A.strstart=0,A.block_start=0,A.insert=0))),z(c),c.avail_out===0))return A.last_flush=-1,i}return I!==a?i:A.wrap<=0?1:(A.wrap===2?(J(A,255&c.adler),J(A,c.adler>>8&255),J(A,c.adler>>16&255),J(A,c.adler>>24&255),J(A,255&c.total_in),J(A,c.total_in>>8&255),J(A,c.total_in>>16&255),J(A,c.total_in>>24&255)):(X(A,c.adler>>>16),X(A,65535&c.adler)),z(c),0=M.w_size&&(D===0&&(Y(M.head),M.strstart=0,M.block_start=0,M.insert=0),H=new v.Buf8(M.w_size),v.arraySet(H,I,G-M.w_size,M.w_size,0),I=H,G=M.w_size),j=c.avail_in,U=c.next_in,N=c.input,c.avail_in=G,c.next_in=0,c.input=I,ae(M);M.lookahead>=b;){for(A=M.strstart,x=M.lookahead-(b-1);M.ins_h=(M.ins_h<>>=b=l>>>24,w-=b,(b=l>>>16&255)===0)R[m++]=65535&l;else{if(!(16&b)){if(!(64&b)){l=P[(65535&l)+(g&(1<>>=b,w-=b),w<15&&(g+=o[u++]<>>=b=l>>>24,w-=b,!(16&(b=l>>>16&255))){if(!(64&b)){l=n[(65535&l)+(g&(1<>>=b,w-=b,(b=m-f)>3,g&=(1<<(w-=k<<3))-1,S.next_in=u,S.next_out=m,S.avail_in=u>>24&255)+(_>>>8&65280)+((65280&_)<<8)+((255&_)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new S.Buf16(320),this.work=new S.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function w(_){var C;return _&&_.state?(C=_.state,_.total_in=_.total_out=C.total=0,_.msg="",C.wrap&&(_.adler=1&C.wrap),C.mode=y,C.last=0,C.havedict=0,C.dmax=32768,C.head=null,C.hold=0,C.bits=0,C.lencode=C.lendyn=new S.Buf32(h),C.distcode=C.distdyn=new S.Buf32(d),C.sane=1,C.back=-1,a):i}function P(_){var C;return _&&_.state?((C=_.state).wsize=0,C.whave=0,C.wnext=0,w(_)):i}function n(_,C){var o,R;return _&&_.state?(R=_.state,C<0?(o=0,C=-C):(o=1+(C>>4),C<48&&(C&=15)),C&&(C<8||15=F.wsize?(S.arraySet(F.window,C,o-F.wsize,F.wsize,0),F.wnext=0,F.whave=F.wsize):(R<(V=F.wsize-F.wnext)&&(V=R),S.arraySet(F.window,C,o-R,V,F.wnext),(R-=V)?(S.arraySet(F.window,C,o-R,R,0),F.wnext=R,F.whave=F.wsize):(F.wnext+=V,F.wnext===F.wsize&&(F.wnext=0),F.whave>>8&255,o.check=e(o.check,D,2,0),O=z=0,o.mode=2;break}if(o.flags=0,o.head&&(o.head.done=!1),!(1&o.wrap)||(((255&z)<<8)+(z>>8))%31){_.msg="incorrect header check",o.mode=30;break}if((15&z)!=8){_.msg="unknown compression method",o.mode=30;break}if(O-=4,c=8+(15&(z>>>=4)),o.wbits===0)o.wbits=c;else if(c>o.wbits){_.msg="invalid window size",o.mode=30;break}o.dmax=1<>8&1),512&o.flags&&(D[0]=255&z,D[1]=z>>>8&255,o.check=e(o.check,D,2,0)),O=z=0,o.mode=3;case 3:for(;O<32;){if(W===0)break e;W--,z+=R[F++]<>>8&255,D[2]=z>>>16&255,D[3]=z>>>24&255,o.check=e(o.check,D,4,0)),O=z=0,o.mode=4;case 4:for(;O<16;){if(W===0)break e;W--,z+=R[F++]<>8),512&o.flags&&(D[0]=255&z,D[1]=z>>>8&255,o.check=e(o.check,D,2,0)),O=z=0,o.mode=5;case 5:if(1024&o.flags){for(;O<16;){if(W===0)break e;W--,z+=R[F++]<>>8&255,o.check=e(o.check,D,2,0)),O=z=0}else o.head&&(o.head.extra=null);o.mode=6;case 6:if(1024&o.flags&&(W<(Z=o.length)&&(Z=W),Z&&(o.head&&(c=o.head.extra_len-o.length,o.head.extra||(o.head.extra=new Array(o.head.extra_len)),S.arraySet(o.head.extra,R,F,Z,c)),512&o.flags&&(o.check=e(o.check,R,Z,F)),W-=Z,F+=Z,o.length-=Z),o.length))break e;o.length=0,o.mode=7;case 7:if(2048&o.flags){if(W===0)break e;for(Z=0;c=R[F+Z++],o.head&&c&&o.length<65536&&(o.head.name+=String.fromCharCode(c)),c&&Z>9&1,o.head.done=!0),_.adler=o.check=0,o.mode=12;break;case 10:for(;O<32;){if(W===0)break e;W--,z+=R[F++]<>>=7&O,O-=7&O,o.mode=27;break}for(;O<3;){if(W===0)break e;W--,z+=R[F++]<>>=1)){case 0:o.mode=14;break;case 1:if(k(o),o.mode=20,C!==6)break;z>>>=2,O-=2;break e;case 2:o.mode=17;break;case 3:_.msg="invalid block type",o.mode=30}z>>>=2,O-=2;break;case 14:for(z>>>=7&O,O-=7&O;O<32;){if(W===0)break e;W--,z+=R[F++]<>>16^65535)){_.msg="invalid stored block lengths",o.mode=30;break}if(o.length=65535&z,O=z=0,o.mode=15,C===6)break e;case 15:o.mode=16;case 16:if(Z=o.length){if(W>>=5,O-=5,o.ndist=1+(31&z),z>>>=5,O-=5,o.ncode=4+(15&z),z>>>=4,O-=4,286>>=3,O-=3}for(;o.have<19;)o.lens[j[o.have++]]=0;if(o.lencode=o.lendyn,o.lenbits=7,M={bits:o.lenbits},I=r(0,o.lens,0,19,o.lencode,0,o.work,M),o.lenbits=M.bits,I){_.msg="invalid code lengths set",o.mode=30;break}o.have=0,o.mode=19;case 19:for(;o.have>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=Q,O-=Q,o.lens[o.have++]=oe;else{if(oe===16){for(A=Q+2;O>>=Q,O-=Q,o.have===0){_.msg="invalid bit length repeat",o.mode=30;break}c=o.lens[o.have-1],Z=3+(3&z),z>>>=2,O-=2}else if(oe===17){for(A=Q+3;O>>=Q)),z>>>=3,O-=3}else{for(A=Q+7;O>>=Q)),z>>>=7,O-=7}if(o.have+Z>o.nlen+o.ndist){_.msg="invalid bit length repeat",o.mode=30;break}for(;Z--;)o.lens[o.have++]=c}}if(o.mode===30)break;if(o.lens[256]===0){_.msg="invalid code -- missing end-of-block",o.mode=30;break}if(o.lenbits=9,M={bits:o.lenbits},I=r(m,o.lens,0,o.nlen,o.lencode,0,o.work,M),o.lenbits=M.bits,I){_.msg="invalid literal/lengths set",o.mode=30;break}if(o.distbits=6,o.distcode=o.distdyn,M={bits:o.distbits},I=r(f,o.lens,o.nlen,o.ndist,o.distcode,0,o.work,M),o.distbits=M.bits,I){_.msg="invalid distances set",o.mode=30;break}if(o.mode=20,C===6)break e;case 20:o.mode=21;case 21:if(6<=W&&258<=Y){_.next_out=q,_.avail_out=Y,_.next_in=F,_.avail_in=W,o.hold=z,o.bits=O,u(_,X),q=_.next_out,V=_.output,Y=_.avail_out,F=_.next_in,R=_.input,W=_.avail_in,z=o.hold,O=o.bits,o.mode===12&&(o.back=-1);break}for(o.back=0;te=(x=o.lencode[z&(1<>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>se)])>>>16&255,oe=65535&x,!(se+(Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=se,O-=se,o.back+=se}if(z>>>=Q,O-=Q,o.back+=Q,o.length=oe,te===0){o.mode=26;break}if(32&te){o.back=-1,o.mode=12;break}if(64&te){_.msg="invalid literal/length code",o.mode=30;break}o.extra=15&te,o.mode=22;case 22:if(o.extra){for(A=o.extra;O>>=o.extra,O-=o.extra,o.back+=o.extra}o.was=o.length,o.mode=23;case 23:for(;te=(x=o.distcode[z&(1<>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>se)])>>>16&255,oe=65535&x,!(se+(Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=se,O-=se,o.back+=se}if(z>>>=Q,O-=Q,o.back+=Q,64&te){_.msg="invalid distance code",o.mode=30;break}o.offset=oe,o.extra=15&te,o.mode=24;case 24:if(o.extra){for(A=o.extra;O>>=o.extra,O-=o.extra,o.back+=o.extra}if(o.offset>o.dmax){_.msg="invalid distance too far back",o.mode=30;break}o.mode=25;case 25:if(Y===0)break e;if(Z=X-Y,o.offset>Z){if((Z=o.offset-Z)>o.whave&&o.sane){_.msg="invalid distance too far back",o.mode=30;break}ae=Z>o.wnext?(Z-=o.wnext,o.wsize-Z):o.wnext-Z,Z>o.length&&(Z=o.length),le=o.window}else le=V,ae=q-o.offset,Z=o.length;for(Yt?(b=ae[le+d[C]],O[J+d[C]]):(b=96,0),g=1<<_-q,o=w=1<>q)+(w-=g)]=l<<24|b<<16|k|0,w!==0;);for(g=1<<_-1;z&g;)g>>=1;if(g!==0?(z&=g-1,z+=g):z=0,C++,--X[_]==0){if(_===R)break;_=f[a+d[C]]}if(V<_&&(z&n)!==P){for(q===0&&(q=V),s+=o,W=1<<(F=_-q);F+q>>7)]}function J(x,D){x.pending_buf[x.pending++]=255&D,x.pending_buf[x.pending++]=D>>>8&255}function X(x,D,j){x.bi_valid>p-j?(x.bi_buf|=D<>p-x.bi_valid,x.bi_valid+=j-p):(x.bi_buf|=D<>>=1,j<<=1,0<--D;);return j>>>1}function le(x,D,j){var U,N,H=new Array(d+1),G=0;for(U=1;U<=d;U++)H[U]=G=G+j[U-1]<<1;for(N=0;N<=D;N++){var $=x[2*N+1];$!==0&&(x[2*N]=ae(H[$]++,$))}}function Q(x){var D;for(D=0;D>1;1<=j;j--)se(x,H,j);for(N=K;j=x.heap[1],x.heap[1]=x.heap[x.heap_len--],se(x,H,1),U=x.heap[1],x.heap[--x.heap_max]=j,x.heap[--x.heap_max]=U,H[2*N]=H[2*j]+H[2*U],x.depth[N]=(x.depth[j]>=x.depth[U]?x.depth[j]:x.depth[U])+1,H[2*j+1]=H[2*U+1]=N,x.heap[1]=N++,se(x,H,1),2<=x.heap_len;);x.heap[--x.heap_max]=x.heap[1],function(ee,ue){var me,pe,ge,ie,ye,we,fe=ue.dyn_tree,Se=ue.max_code,Te=ue.stat_desc.static_tree,Ee=ue.stat_desc.has_stree,De=ue.stat_desc.extra_bits,Ae=ue.stat_desc.extra_base,be=ue.stat_desc.max_length,ve=0;for(ie=0;ie<=d;ie++)ee.bl_count[ie]=0;for(fe[2*ee.heap[ee.heap_max]+1]=0,me=ee.heap_max+1;me>=7;N>>=1)if(1&re&&$.dyn_ltree[2*K]!==0)return v;if($.dyn_ltree[18]!==0||$.dyn_ltree[20]!==0||$.dyn_ltree[26]!==0)return e;for(K=32;K>>3,(H=x.static_len+3+7>>>3)<=N&&(N=H)):N=H=j+5,j+4<=N&&D!==-1?A(x,D,j,U):x.strategy===4||H===N?(X(x,2+(U?1:0),3),de(x,E,_)):(X(x,4+(U?1:0),3),function($,K,re,ee){var ue;for(X($,K-257,5),X($,re-1,5),X($,ee-4,4),ue=0;ue>>8&255,x.pending_buf[x.d_buf+2*x.last_lit+1]=255&D,x.pending_buf[x.l_buf+x.last_lit]=255&j,x.last_lit++,D===0?x.dyn_ltree[2*j]++:(x.matches++,D--,x.dyn_ltree[2*(o[j]+f+1)]++,x.dyn_dtree[2*O(D)]++),x.last_lit===x.lit_bufsize-1},B._tr_align=function(x){X(x,2,3),Z(x,w,E),function(D){D.bi_valid===16?(J(D,D.bi_buf),D.bi_buf=0,D.bi_valid=0):8<=D.bi_valid&&(D.pending_buf[D.pending++]=255&D.bi_buf,D.bi_buf>>=8,D.bi_valid-=8)}(x)}},{"../utils/common":41}],53:[function(T,L,B){L.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(T,L,B){(function(S){(function(v,e){if(!v.setImmediate){var u,r,m,f,a=1,i={},y=!1,h=v.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(v);d=d&&d.setTimeout?d:v,u={}.toString.call(v.process)==="[object process]"?function(P){process.nextTick(function(){g(P)})}:function(){if(v.postMessage&&!v.importScripts){var P=!0,n=v.onmessage;return v.onmessage=function(){P=!1},v.postMessage("","*"),v.onmessage=n,P}}()?(f="setImmediate$"+Math.random()+"$",v.addEventListener?v.addEventListener("message",w,!1):v.attachEvent("onmessage",w),function(P){v.postMessage(f+P,"*")}):v.MessageChannel?((m=new MessageChannel).port1.onmessage=function(P){g(P.data)},function(P){m.port2.postMessage(P)}):h&&"onreadystatechange"in h.createElement("script")?(r=h.documentElement,function(P){var n=h.createElement("script");n.onreadystatechange=function(){g(P),n.onreadystatechange=null,r.removeChild(n),n=null},r.appendChild(n)}):function(P){setTimeout(g,0,P)},d.setImmediate=function(P){typeof P!="function"&&(P=new Function(""+P));for(var n=new Array(arguments.length-1),s=0;s"u"?S===void 0?this:S:self)}).call(this,typeof _e<"u"?_e:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}(xe)),xe.exports}(function(ne,ce){(function(T,L){ne.exports=L(Be())})(globalThis,T=>(()=>{var L={438:(v,e,u)=>{u.r(e),u.d(e,{default:()=>g});var r=u(537),m=u.n(r),f=u(645),a=u.n(f),i=u(806),y=u.n(i),h=new URL(u(583),u.b),d=a()(m()),p=y()(h);d.push([v.id,`@namespace "http://www.w3.org/1998/Math/MathML";math{display:inline-block;line-height:initial}mfrac{display:inline-block;vertical-align:-50%;text-align:center}mfrac>:first-child{border-bottom:solid thin currentColor}mfrac>*{display:block}msub>:nth-child(2){font-size:smaller;vertical-align:sub}msup>:nth-child(2){font-size:smaller;vertical-align:super}munder,mover,munderover{display:inline-flex;flex-flow:column nowrap;vertical-align:middle;text-align:center}munder>:not(:first-child),mover>:not(:first-child),munderover>:not(:first-child){font-size:smaller}munderover>:last-child{order:-1}mroot,msqrt{position:relative;display:inline-block;border-top:solid thin currentColor;margin-top:.5px;vertical-align:middle;margin-left:1ch}mroot:before,msqrt:before{content:"";display:inline-block;position:absolute;width:1ch;left:-1ch;top:-1px;bottom:0;background-image:url(${p})}`,"",{version:3,sources:["webpack://./src/mathml.scss"],names:[],mappings:"AAAA,+CAAA,CAEA,KACI,oBAAA,CACA,mBAAA,CAGJ,MACI,oBAAA,CACA,mBAAA,CACA,iBAAA,CAEA,mBACI,qCAAA,CAGJ,QACI,aAAA,CAKJ,mBACI,iBAAA,CACA,kBAAA,CAKJ,mBACI,iBAAA,CACA,oBAAA,CAIR,wBACI,mBAAA,CACA,uBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,iFACI,iBAAA,CAKJ,uBAAA,QAAA,CAGJ,YACI,iBAAA,CACA,oBAAA,CACA,kCAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAEA,0BACI,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,SAAA,CACA,SAAA,CACA,QAAA,CACA,QAAA,CACA,wDAAA",sourcesContent:[`@namespace "http://www.w3.org/1998/Math/MathML";\r +\r +math {\r + display: inline-block;\r + line-height: initial;\r +}\r +\r +mfrac {\r + display: inline-block;\r + vertical-align: -50%;\r + text-align: center;\r +\r + &>:first-child {\r + border-bottom: solid thin currentColor;\r + }\r +\r + &>* {\r + display: block;\r + }\r +}\r +\r +msub {\r + &>:nth-child(2) {\r + font-size: smaller;\r + vertical-align: sub;\r + }\r +}\r +\r +msup {\r + &>:nth-child(2) {\r + font-size: smaller;\r + vertical-align: super;\r + }\r +}\r +\r +munder, mover, munderover {\r + display: inline-flex;\r + flex-flow: column nowrap;\r + vertical-align: middle;\r + text-align: center;\r +\r + &>:not(:first-child) {\r + font-size: smaller;\r + }\r +}\r +\r +munderover {\r + &>:last-child { order: -1; }\r +}\r +\r +mroot, msqrt {\r + position: relative;\r + display: inline-block;\r + border-top: solid thin currentColor; \r + margin-top: 0.5px;\r + vertical-align: middle; \r + margin-left: 1ch; \r +\r + &:before {\r + content: "";\r + display: inline-block;\r + position: absolute;\r + width: 1ch;\r + left: -1ch;\r + top: -1px;\r + bottom: 0;\r + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 100' preserveAspectRatio='none'%3E%3Cpath d='m0,75 l5,0 l5,25 l10,-100' stroke='black' fill='none' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");\r + }\r +}`],sourceRoot:""}]);const g=d.toString()},645:v=>{v.exports=function(e){var u=[];return u.toString=function(){return this.map(function(r){var m="",f=r[5]!==void 0;return r[4]&&(m+="@supports (".concat(r[4],") {")),r[2]&&(m+="@media ".concat(r[2]," {")),f&&(m+="@layer".concat(r[5].length>0?" ".concat(r[5]):""," {")),m+=e(r),f&&(m+="}"),r[2]&&(m+="}"),r[4]&&(m+="}"),m}).join("")},u.i=function(r,m,f,a,i){typeof r=="string"&&(r=[[null,r,void 0]]);var y={};if(f)for(var h=0;h0?" ".concat(g[5]):""," {").concat(g[1],"}")),g[5]=i),m&&(g[2]&&(g[1]="@media ".concat(g[2]," {").concat(g[1],"}")),g[2]=m),a&&(g[4]?(g[1]="@supports (".concat(g[4],") {").concat(g[1],"}"),g[4]=a):g[4]="".concat(a)),u.push(g))}},u}},806:v=>{v.exports=function(e,u){return u||(u={}),e&&(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),u.hash&&(e+=u.hash),/["'() \t\n]|(%20)/.test(e)||u.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e)}},537:v=>{v.exports=function(e){var u=e[1],r=e[3];if(!r)return u;if(typeof btoa=="function"){var m=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),f="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(m),a="/*# ".concat(f," */");return[u].concat([a]).join(` +`)}return[u].join(` +`)}},522:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.OpenXmlPackage=void 0;const r=u(626),m=u(472),f=u(593),a=u(461);class i{constructor(h,d){this._zip=h,this.options=d,this.xmlParser=new m.XmlParser}get(h){return this._zip.files[function(d){return d.startsWith("/")?d.substr(1):d}(h)]}update(h,d){this._zip.file(h,d)}static async load(h,d){const p=await r.loadAsync(h);return new i(p,d)}save(h="blob"){return this._zip.generateAsync({type:h})}load(h,d="string"){var p,g;return(g=(p=this.get(h))===null||p===void 0?void 0:p.async(d))!==null&&g!==void 0?g:Promise.resolve(null)}async loadRelationships(h=null){let d="_rels/.rels";if(h!=null){const[g,w]=(0,f.splitPath)(h);d=`${g}_rels/${w}.rels`}const p=await this.load(d);return p?(0,a.parseRelationships)(this.parseXmlDocument(p).firstElementChild,this.xmlParser):null}parseXmlDocument(h){return(0,m.parseXmlString)(h,this.options.trimXmlDeclaration)}}e.OpenXmlPackage=i},530:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Part=void 0;const r=u(472);e.Part=class{constructor(m,f){this._package=m,this.path=f}async load(){this.rels=await this._package.loadRelationships(this.path);const m=await this._package.load(this.path),f=this._package.parseXmlDocument(m);this._package.options.keepOrigin&&(this._xmlDocument=f),this.parseXml(f.firstElementChild)}save(){this._package.update(this.path,(0,r.serializeXmlString)(this._xmlDocument))}parseXml(m){}}},461:(v,e)=>{var u;Object.defineProperty(e,"__esModule",{value:!0}),e.parseRelationships=e.RelationshipTypes=void 0,function(r){r.OfficeDocument="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",r.FontTable="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable",r.Image="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",r.Numbering="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering",r.Styles="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",r.StylesWithEffects="http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects",r.Theme="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",r.Settings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings",r.WebSettings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings",r.Hyperlink="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",r.Footnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes",r.Endnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes",r.Footer="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer",r.Header="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header",r.ExtendedProperties="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",r.CoreProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",r.CustomProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties"}(u||(e.RelationshipTypes=u={})),e.parseRelationships=function(r,m){return m.elements(r).map(f=>({id:m.attr(f,"Id"),type:m.attr(f,"Type"),target:m.attr(f,"Target"),targetMode:m.attr(f,"TargetMode")}))}},168:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.DocumentParser=e.autos=void 0;const r=u(120),m=u(109),f=u(59),a=u(472),i=u(488),y=u(172),h=u(149),d=u(320);e.autos={shd:"inherit",color:"black",borderColor:"black",highlight:"transparent"};const p=[],g={oMath:r.DomType.MmlMath,oMathPara:r.DomType.MmlMathParagraph,f:r.DomType.MmlFraction,func:r.DomType.MmlFunction,fName:r.DomType.MmlFunctionName,num:r.DomType.MmlNumerator,den:r.DomType.MmlDenominator,rad:r.DomType.MmlRadical,deg:r.DomType.MmlDegree,e:r.DomType.MmlBase,sSup:r.DomType.MmlSuperscript,sSub:r.DomType.MmlSubscript,sPre:r.DomType.MmlPreSubSuper,sup:r.DomType.MmlSuperArgument,sub:r.DomType.MmlSubArgument,d:r.DomType.MmlDelimiter,nary:r.DomType.MmlNary,eqArr:r.DomType.MmlEquationArray,lim:r.DomType.MmlLimit,limLow:r.DomType.MmlLimitLower,m:r.DomType.MmlMatrix,mr:r.DomType.MmlMatrixRow,box:r.DomType.MmlBox,bar:r.DomType.MmlBar,groupChr:r.DomType.MmlGroupChar};e.DocumentParser=class{constructor(s){this.options=Object.assign({ignoreWidth:!1,debug:!1},s)}parseNotes(s,t,l){var b=[];for(let k of a.default.elements(s,t)){const E=new l;E.id=a.default.attr(k,"id"),E.noteType=a.default.attr(k,"type"),E.children=this.parseBodyElements(k),b.push(E)}return b}parseDocumentFile(s){var t=a.default.element(s,"body"),l=a.default.element(s,"background"),b=a.default.element(t,"sectPr");return{type:r.DomType.Document,children:this.parseBodyElements(t),props:b?(0,f.parseSectionProperties)(b,a.default):{},cssStyle:l?this.parseBackground(l):{}}}parseBackground(s){var t={},l=P.colorAttr(s,"color");return l&&(t["background-color"]=l),t}parseBodyElements(s){var t=[];for(let l of a.default.elements(s))switch(l.localName){case"p":t.push(this.parseParagraph(l));break;case"tbl":t.push(this.parseTable(l));break;case"sdt":t.push(...this.parseSdt(l,b=>this.parseBodyElements(b)))}return t}parseStylesFile(s){var t=[];return P.foreach(s,l=>{switch(l.localName){case"style":t.push(this.parseStyle(l));break;case"docDefaults":t.push(this.parseDefaultStyles(l))}}),t}parseDefaultStyles(s){var t={id:null,name:null,target:null,basedOn:null,styles:[]};return P.foreach(s,l=>{switch(l.localName){case"rPrDefault":var b=a.default.element(l,"rPr");b&&t.styles.push({target:"span",values:this.parseDefaultProperties(b,{})});break;case"pPrDefault":var k=a.default.element(l,"pPr");k&&t.styles.push({target:"p",values:this.parseDefaultProperties(k,{})})}}),t}parseStyle(s){var t={id:a.default.attr(s,"styleId"),isDefault:a.default.boolAttr(s,"default"),name:null,target:null,basedOn:null,styles:[],linked:null};switch(a.default.attr(s,"type")){case"paragraph":t.target="p";break;case"table":t.target="table";break;case"character":t.target="span"}return P.foreach(s,l=>{switch(l.localName){case"basedOn":t.basedOn=a.default.attr(l,"val");break;case"name":t.name=a.default.attr(l,"val");break;case"link":t.linked=a.default.attr(l,"val");break;case"next":t.next=a.default.attr(l,"val");break;case"aliases":t.aliases=a.default.attr(l,"val").split(",");break;case"pPr":t.styles.push({target:"p",values:this.parseDefaultProperties(l,{})}),t.paragraphProps=(0,m.parseParagraphProperties)(l,a.default);break;case"rPr":t.styles.push({target:"span",values:this.parseDefaultProperties(l,{})}),t.runProps=(0,i.parseRunProperties)(l,a.default);break;case"tblPr":case"tcPr":t.styles.push({target:"td",values:this.parseDefaultProperties(l,{})});break;case"tblStylePr":for(let b of this.parseTableStyle(l))t.styles.push(b);break;case"rsid":case"qFormat":case"hidden":case"semiHidden":case"unhideWhenUsed":case"autoRedefine":case"uiPriority":break;default:this.options.debug&&console.warn(`DOCX: Unknown style element: ${l.localName}`)}}),t}parseTableStyle(s){var t=[],l=a.default.attr(s,"type"),b="",k="";switch(l){case"firstRow":k=".first-row",b="tr.first-row td";break;case"lastRow":k=".last-row",b="tr.last-row td";break;case"firstCol":k=".first-col",b="td.first-col";break;case"lastCol":k=".last-col",b="td.last-col";break;case"band1Vert":k=":not(.no-vband)",b="td.odd-col";break;case"band2Vert":k=":not(.no-vband)",b="td.even-col";break;case"band1Horz":k=":not(.no-hband)",b="tr.odd-row";break;case"band2Horz":k=":not(.no-hband)",b="tr.even-row";break;default:return[]}return P.foreach(s,E=>{switch(E.localName){case"pPr":t.push({target:`${b} p`,mod:k,values:this.parseDefaultProperties(E,{})});break;case"rPr":t.push({target:`${b} span`,mod:k,values:this.parseDefaultProperties(E,{})});break;case"tblPr":case"tcPr":t.push({target:b,mod:k,values:this.parseDefaultProperties(E,{})})}}),t}parseNumberingFile(s){var t=[],l={},b=[];return P.foreach(s,k=>{switch(k.localName){case"abstractNum":this.parseAbstractNumbering(k,b).forEach(C=>t.push(C));break;case"numPicBullet":b.push(this.parseNumberingPicBullet(k));break;case"num":var E=a.default.attr(k,"numId"),_=a.default.elementAttr(k,"abstractNumId","val");l[_]=E}}),t.forEach(k=>k.id=l[k.id]),t}parseNumberingPicBullet(s){var t=a.default.element(s,"pict"),l=t&&a.default.element(t,"shape"),b=l&&a.default.element(l,"imagedata");return b?{id:a.default.intAttr(s,"numPicBulletId"),src:a.default.attr(b,"id"),style:a.default.attr(l,"style")}:null}parseAbstractNumbering(s,t){var l=[],b=a.default.attr(s,"abstractNumId");return P.foreach(s,k=>{k.localName==="lvl"&&l.push(this.parseNumberingLevel(b,k,t))}),l}parseNumberingLevel(s,t,l){var b={id:s,level:a.default.intAttr(t,"ilvl"),start:1,pStyleName:void 0,pStyle:{},rStyle:{},suff:"tab"};return P.foreach(t,k=>{switch(k.localName){case"start":b.start=a.default.intAttr(k,"val");break;case"pPr":this.parseDefaultProperties(k,b.pStyle);break;case"rPr":this.parseDefaultProperties(k,b.rStyle);break;case"lvlPicBulletId":var E=a.default.intAttr(k,"val");b.bullet=l.find(_=>_.id==E);break;case"lvlText":b.levelText=a.default.attr(k,"val");break;case"pStyle":b.pStyleName=a.default.attr(k,"val");break;case"numFmt":b.format=a.default.attr(k,"val");break;case"suff":b.suff=a.default.attr(k,"val")}}),b}parseSdt(s,t){const l=a.default.element(s,"sdtContent");return l?t(l):[]}parseInserted(s,t){var l,b;return{type:r.DomType.Inserted,children:(b=(l=t(s))===null||l===void 0?void 0:l.children)!==null&&b!==void 0?b:[]}}parseDeleted(s,t){var l,b;return{type:r.DomType.Deleted,children:(b=(l=t(s))===null||l===void 0?void 0:l.children)!==null&&b!==void 0?b:[]}}parseParagraph(s){var t={type:r.DomType.Paragraph,children:[]};for(let l of a.default.elements(s))switch(l.localName){case"pPr":this.parseParagraphProperties(l,t);break;case"r":t.children.push(this.parseRun(l,t));break;case"hyperlink":t.children.push(this.parseHyperlink(l,t));break;case"bookmarkStart":t.children.push((0,y.parseBookmarkStart)(l,a.default));break;case"bookmarkEnd":t.children.push((0,y.parseBookmarkEnd)(l,a.default));break;case"oMath":case"oMathPara":t.children.push(this.parseMathElement(l));break;case"sdt":t.children.push(...this.parseSdt(l,b=>this.parseParagraph(b).children));break;case"ins":t.children.push(this.parseInserted(l,b=>this.parseParagraph(b)));break;case"del":t.children.push(this.parseDeleted(l,b=>this.parseParagraph(b)))}return t}parseParagraphProperties(s,t){this.parseDefaultProperties(s,t.cssStyle={},null,l=>{if((0,m.parseParagraphProperty)(l,t,a.default))return!0;switch(l.localName){case"pStyle":t.styleName=a.default.attr(l,"val");break;case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;case"framePr":this.parseFrame(l,t);break;case"rPr":break;default:return!1}return!0})}parseFrame(s,t){a.default.attr(s,"dropCap")=="drop"&&(t.cssStyle.float="left")}parseHyperlink(s,t){var l={type:r.DomType.Hyperlink,parent:t,children:[]},b=a.default.attr(s,"anchor"),k=a.default.attr(s,"id");return b&&(l.href="#"+b),k&&(l.id=k),P.foreach(s,E=>{E.localName==="r"&&l.children.push(this.parseRun(E,l))}),l}parseRun(s,t){var l={type:r.DomType.Run,parent:t,children:[]};return P.foreach(s,b=>{switch((b=this.checkAlternateContent(b)).localName){case"t":l.children.push({type:r.DomType.Text,text:b.textContent});break;case"delText":l.children.push({type:r.DomType.DeletedText,text:b.textContent});break;case"fldSimple":l.children.push({type:r.DomType.SimpleField,instruction:a.default.attr(b,"instr"),lock:a.default.boolAttr(b,"lock",!1),dirty:a.default.boolAttr(b,"dirty",!1)});break;case"instrText":l.fieldRun=!0,l.children.push({type:r.DomType.Instruction,text:b.textContent});break;case"fldChar":l.fieldRun=!0,l.children.push({type:r.DomType.ComplexField,charType:a.default.attr(b,"fldCharType"),lock:a.default.boolAttr(b,"lock",!1),dirty:a.default.boolAttr(b,"dirty",!1)});break;case"noBreakHyphen":l.children.push({type:r.DomType.NoBreakHyphen});break;case"br":l.children.push({type:r.DomType.Break,break:a.default.attr(b,"type")||"textWrapping"});break;case"lastRenderedPageBreak":l.children.push({type:r.DomType.Break,break:"lastRenderedPageBreak"});break;case"sym":l.children.push({type:r.DomType.Symbol,font:a.default.attr(b,"font"),char:a.default.attr(b,"char")});break;case"tab":l.children.push({type:r.DomType.Tab});break;case"footnoteReference":l.children.push({type:r.DomType.FootnoteReference,id:a.default.attr(b,"id")});break;case"endnoteReference":l.children.push({type:r.DomType.EndnoteReference,id:a.default.attr(b,"id")});break;case"drawing":let k=this.parseDrawing(b);k&&(l.children=[k]);break;case"pict":l.children.push(this.parseVmlPicture(b));break;case"rPr":this.parseRunProperties(b,l)}}),l}parseMathElement(s){const t=`${s.localName}Pr`,l={type:g[s.localName],children:[]};for(const k of a.default.elements(s))if(g[k.localName])l.children.push(this.parseMathElement(k));else if(k.localName=="r"){var b=this.parseRun(k);b.type=r.DomType.MmlRun,l.children.push(b)}else k.localName==t&&(l.props=this.parseMathProperies(k));return l}parseMathProperies(s){const t={};for(const l of a.default.elements(s))switch(l.localName){case"chr":t.char=a.default.attr(l,"val");break;case"vertJc":t.verticalJustification=a.default.attr(l,"val");break;case"pos":t.position=a.default.attr(l,"val");break;case"degHide":t.hideDegree=a.default.boolAttr(l,"val");break;case"begChr":t.beginChar=a.default.attr(l,"val");break;case"endChr":t.endChar=a.default.attr(l,"val")}return t}parseRunProperties(s,t){this.parseDefaultProperties(s,t.cssStyle={},null,l=>{switch(l.localName){case"rStyle":t.styleName=a.default.attr(l,"val");break;case"vertAlign":t.verticalAlign=n.valueOfVertAlign(l,!0);break;default:return!1}return!0})}parseVmlPicture(s){const t={type:r.DomType.VmlPicture,children:[]};for(const l of a.default.elements(s)){const b=(0,d.parseVmlElement)(l,this);b&&t.children.push(b)}return t}checkAlternateContent(s){var t;if(s.localName!="AlternateContent")return s;var l=a.default.element(s,"Choice");if(l){var b=a.default.attr(l,"Requires"),k=s.lookupNamespaceURI(b);if(p.includes(k))return l.firstElementChild}return(t=a.default.element(s,"Fallback"))===null||t===void 0?void 0:t.firstElementChild}parseDrawing(s){for(var t of a.default.elements(s))switch(t.localName){case"inline":case"anchor":return this.parseDrawingWrapper(t)}}parseDrawingWrapper(s){var t,l={type:r.DomType.Drawing,children:[],cssStyle:{}},b=s.localName=="anchor";let k=null,E=a.default.boolAttr(s,"simplePos"),_={relative:"page",align:"left",offset:"0"},C={relative:"page",align:"top",offset:"0"};for(var o of a.default.elements(s))switch(o.localName){case"simplePos":E&&(_.offset=a.default.lengthAttr(o,"x",h.LengthUsage.Emu),C.offset=a.default.lengthAttr(o,"y",h.LengthUsage.Emu));break;case"extent":l.cssStyle.width=a.default.lengthAttr(o,"cx",h.LengthUsage.Emu),l.cssStyle.height=a.default.lengthAttr(o,"cy",h.LengthUsage.Emu);break;case"positionH":case"positionV":if(!E){let q=o.localName=="positionH"?_:C;var R=a.default.element(o,"align"),V=a.default.element(o,"posOffset");q.relative=(t=a.default.attr(o,"relativeFrom"))!==null&&t!==void 0?t:q.relative,R&&(q.align=R.textContent),V&&(q.offset=P.sizeValue(V,h.LengthUsage.Emu))}break;case"wrapTopAndBottom":k="wrapTopAndBottom";break;case"wrapNone":k="wrapNone";break;case"graphic":var F=this.parseGraphic(o);F&&l.children.push(F)}return k=="wrapTopAndBottom"?(l.cssStyle.display="block",_.align&&(l.cssStyle["text-align"]=_.align,l.cssStyle.width="100%")):k=="wrapNone"?(l.cssStyle.display="block",l.cssStyle.position="relative",l.cssStyle.width="0px",l.cssStyle.height="0px",_.offset&&(l.cssStyle.left=_.offset),C.offset&&(l.cssStyle.top=C.offset)):!b||_.align!="left"&&_.align!="right"||(l.cssStyle.float=_.align),l}parseGraphic(s){var t=a.default.element(s,"graphicData");for(let l of a.default.elements(t))if(l.localName==="pic")return this.parsePicture(l);return null}parsePicture(s){var t={type:r.DomType.Image,src:"",cssStyle:{}},l=a.default.element(s,"blipFill"),b=a.default.element(l,"blip");t.src=a.default.attr(b,"embed");var k=a.default.element(s,"spPr"),E=a.default.element(k,"xfrm");for(var _ of(t.cssStyle.position="relative",a.default.elements(E)))switch(_.localName){case"ext":t.cssStyle.width=a.default.lengthAttr(_,"cx",h.LengthUsage.Emu),t.cssStyle.height=a.default.lengthAttr(_,"cy",h.LengthUsage.Emu);break;case"off":t.cssStyle.left=a.default.lengthAttr(_,"x",h.LengthUsage.Emu),t.cssStyle.top=a.default.lengthAttr(_,"y",h.LengthUsage.Emu)}return t}parseTable(s){var t={type:r.DomType.Table,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tr":t.children.push(this.parseTableRow(l));break;case"tblGrid":t.columns=this.parseTableColumns(l);break;case"tblPr":this.parseTableProperties(l,t)}}),t}parseTableColumns(s){var t=[];return P.foreach(s,l=>{l.localName==="gridCol"&&t.push({width:a.default.lengthAttr(l,"w")})}),t}parseTableProperties(s,t){switch(t.cssStyle={},t.cellStyle={},this.parseDefaultProperties(s,t.cssStyle,t.cellStyle,l=>{switch(l.localName){case"tblStyle":t.styleName=a.default.attr(l,"val");break;case"tblLook":t.className=n.classNameOftblLook(l);break;case"tblpPr":this.parseTablePosition(l,t);break;case"tblStyleColBandSize":t.colBandSize=a.default.intAttr(l,"val");break;case"tblStyleRowBandSize":t.rowBandSize=a.default.intAttr(l,"val");break;default:return!1}return!0}),t.cssStyle["text-align"]){case"center":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto",t.cssStyle["margin-right"]="auto";break;case"right":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto"}}parseTablePosition(s,t){var l=a.default.lengthAttr(s,"topFromText"),b=a.default.lengthAttr(s,"bottomFromText"),k=a.default.lengthAttr(s,"rightFromText"),E=a.default.lengthAttr(s,"leftFromText");t.cssStyle.float="left",t.cssStyle["margin-bottom"]=n.addSize(t.cssStyle["margin-bottom"],b),t.cssStyle["margin-left"]=n.addSize(t.cssStyle["margin-left"],E),t.cssStyle["margin-right"]=n.addSize(t.cssStyle["margin-right"],k),t.cssStyle["margin-top"]=n.addSize(t.cssStyle["margin-top"],l)}parseTableRow(s){var t={type:r.DomType.Row,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tc":t.children.push(this.parseTableCell(l));break;case"trPr":this.parseTableRowProperties(l,t)}}),t}parseTableRowProperties(s,t){t.cssStyle=this.parseDefaultProperties(s,{},null,l=>{switch(l.localName){case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;case"tblHeader":t.isHeader=a.default.boolAttr(l,"val");break;default:return!1}return!0})}parseTableCell(s){var t={type:r.DomType.Cell,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tbl":t.children.push(this.parseTable(l));break;case"p":t.children.push(this.parseParagraph(l));break;case"tcPr":this.parseTableCellProperties(l,t)}}),t}parseTableCellProperties(s,t){t.cssStyle=this.parseDefaultProperties(s,{},null,l=>{var b;switch(l.localName){case"gridSpan":t.span=a.default.intAttr(l,"val",null);break;case"vMerge":t.verticalMerge=(b=a.default.attr(l,"val"))!==null&&b!==void 0?b:"continue";break;case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;default:return!1}return!0})}parseDefaultProperties(s,t=null,l=null,b=null){return t=t||{},P.foreach(s,k=>{if(!(b!=null&&b(k)))switch(k.localName){case"jc":t["text-align"]=n.valueOfJc(k);break;case"textAlignment":t["vertical-align"]=n.valueOfTextAlignment(k);break;case"color":t.color=P.colorAttr(k,"val",null,e.autos.color);break;case"sz":t["font-size"]=t["min-height"]=a.default.lengthAttr(k,"val",h.LengthUsage.FontSize);break;case"shd":t["background-color"]=P.colorAttr(k,"fill",null,e.autos.shd);break;case"highlight":t["background-color"]=P.colorAttr(k,"val",null,e.autos.highlight);break;case"vertAlign":break;case"position":t.verticalAlign=a.default.lengthAttr(k,"val",h.LengthUsage.FontSize);break;case"tcW":if(this.options.ignoreWidth)break;case"tblW":t.width=n.valueOfSize(k,"w");break;case"trHeight":this.parseTrHeight(k,t);break;case"strike":t["text-decoration"]=a.default.boolAttr(k,"val",!0)?"line-through":"none";break;case"b":t["font-weight"]=a.default.boolAttr(k,"val",!0)?"bold":"normal";break;case"i":t["font-style"]=a.default.boolAttr(k,"val",!0)?"italic":"normal";break;case"caps":t["text-transform"]=a.default.boolAttr(k,"val",!0)?"uppercase":"none";break;case"smallCaps":t["text-transform"]=a.default.boolAttr(k,"val",!0)?"lowercase":"none";break;case"u":this.parseUnderline(k,t);break;case"ind":case"tblInd":this.parseIndentation(k,t);break;case"rFonts":this.parseFont(k,t);break;case"tblBorders":this.parseBorderProperties(k,l||t);break;case"tblCellSpacing":t["border-spacing"]=n.valueOfMargin(k),t["border-collapse"]="separate";break;case"pBdr":this.parseBorderProperties(k,t);break;case"bdr":t.border=n.valueOfBorder(k);break;case"tcBorders":this.parseBorderProperties(k,t);break;case"vanish":a.default.boolAttr(k,"val",!0)&&(t.display="none");break;case"kern":case"noWrap":break;case"tblCellMar":case"tcMar":this.parseMarginProperties(k,l||t);break;case"tblLayout":t["table-layout"]=n.valueOfTblLayout(k);break;case"vAlign":t["vertical-align"]=n.valueOfTextAlignment(k);break;case"spacing":s.localName=="pPr"&&this.parseSpacing(k,t);break;case"wordWrap":a.default.boolAttr(k,"val")&&(t["overflow-wrap"]="break-word");break;case"suppressAutoHyphens":t.hyphens=a.default.boolAttr(k,"val",!0)?"none":"auto";break;case"lang":t.$lang=a.default.attr(k,"val");break;case"bCs":case"iCs":case"szCs":case"tabs":case"outlineLvl":case"contextualSpacing":case"tblStyleColBandSize":case"tblStyleRowBandSize":case"webHidden":case"pageBreakBefore":case"suppressLineNumbers":case"keepLines":case"keepNext":case"widowControl":case"bidi":case"rtl":case"noProof":break;default:this.options.debug&&console.warn(`DOCX: Unknown document element: ${s.localName}.${k.localName}`)}}),t}parseUnderline(s,t){var l=a.default.attr(s,"val");if(l!=null){switch(l){case"dash":case"dashDotDotHeavy":case"dashDotHeavy":case"dashedHeavy":case"dashLong":case"dashLongHeavy":case"dotDash":case"dotDotDash":t["text-decoration-style"]="dashed";break;case"dotted":case"dottedHeavy":t["text-decoration-style"]="dotted";break;case"double":t["text-decoration-style"]="double";break;case"single":case"thick":case"words":t["text-decoration"]="underline";break;case"wave":case"wavyDouble":case"wavyHeavy":t["text-decoration-style"]="wavy";break;case"none":t["text-decoration"]="none"}var b=P.colorAttr(s,"color");b&&(t["text-decoration-color"]=b)}}parseFont(s,t){var l=[a.default.attr(s,"ascii"),n.themeValue(s,"asciiTheme")].filter(b=>b).join(", ");l.length>0&&(t["font-family"]=l)}parseIndentation(s,t){var l=a.default.lengthAttr(s,"firstLine"),b=a.default.lengthAttr(s,"hanging"),k=a.default.lengthAttr(s,"left"),E=a.default.lengthAttr(s,"start"),_=a.default.lengthAttr(s,"right"),C=a.default.lengthAttr(s,"end");l&&(t["text-indent"]=l),b&&(t["text-indent"]=`-${b}`),(k||E)&&(t["margin-left"]=k||E),(_||C)&&(t["margin-right"]=_||C)}parseSpacing(s,t){var l=a.default.lengthAttr(s,"before"),b=a.default.lengthAttr(s,"after"),k=a.default.intAttr(s,"line",null),E=a.default.attr(s,"lineRule");if(l&&(t["margin-top"]=l),b&&(t["margin-bottom"]=b),k!==null)switch(E){case"auto":t["line-height"]=`${(k/240).toFixed(2)}`;break;case"atLeast":t["line-height"]=`calc(100% + ${k/20}pt)`;break;default:t["line-height"]=t["min-height"]=k/20+"pt"}}parseMarginProperties(s,t){P.foreach(s,l=>{switch(l.localName){case"left":t["padding-left"]=n.valueOfMargin(l);break;case"right":t["padding-right"]=n.valueOfMargin(l);break;case"top":t["padding-top"]=n.valueOfMargin(l);break;case"bottom":t["padding-bottom"]=n.valueOfMargin(l)}})}parseTrHeight(s,t){a.default.attr(s,"hRule"),t.height=a.default.lengthAttr(s,"val")}parseBorderProperties(s,t){P.foreach(s,l=>{switch(l.localName){case"start":case"left":t["border-left"]=n.valueOfBorder(l);break;case"end":case"right":t["border-right"]=n.valueOfBorder(l);break;case"top":t["border-top"]=n.valueOfBorder(l);break;case"bottom":t["border-bottom"]=n.valueOfBorder(l)}})}};const w=["black","blue","cyan","darkBlue","darkCyan","darkGray","darkGreen","darkMagenta","darkRed","darkYellow","green","lightGray","magenta","none","red","white","yellow"];class P{static foreach(t,l){for(var b=0;bl[k]=="1").join(" ")}static valueOfJc(t){var l=a.default.attr(t,"val");switch(l){case"start":case"left":return"left";case"center":return"center";case"end":case"right":return"right";case"both":return"justify"}return l}static valueOfVertAlign(t,l=!1){var b=a.default.attr(t,"val");switch(b){case"subscript":return"sub";case"superscript":return l?"sup":"super"}return l?null:b}static valueOfTextAlignment(t){var l=a.default.attr(t,"val");switch(l){case"auto":case"baseline":return"baseline";case"top":return"top";case"center":return"middle";case"bottom":return"bottom"}return l}static addSize(t,l){return t==null?l:l==null?t:`calc(${t} + ${l})`}static classNameOftblLook(t){const l=a.default.hexAttr(t,"val",0);let b="";return(a.default.boolAttr(t,"firstRow")||32&l)&&(b+=" first-row"),(a.default.boolAttr(t,"lastRow")||64&l)&&(b+=" last-row"),(a.default.boolAttr(t,"firstColumn")||128&l)&&(b+=" first-col"),(a.default.boolAttr(t,"lastColumn")||256&l)&&(b+=" last-col"),(a.default.boolAttr(t,"noHBand")||512&l)&&(b+=" no-hband"),(a.default.boolAttr(t,"noVBand")||1024&l)&&(b+=" no-vband"),b.trim()}}},162:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CorePropsPart=void 0;const r=u(530),m=u(614);class f extends r.Part{parseXml(i){this.props=(0,m.parseCoreProps)(i,this._package.xmlParser)}}e.CorePropsPart=f},614:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCoreProps=void 0,e.parseCoreProps=function(u,r){const m={};for(let f of r.elements(u))switch(f.localName){case"title":m.title=f.textContent;break;case"description":m.description=f.textContent;break;case"subject":m.subject=f.textContent;break;case"creator":m.creator=f.textContent;break;case"keywords":m.keywords=f.textContent;break;case"language":m.language=f.textContent;break;case"lastModifiedBy":m.lastModifiedBy=f.textContent;break;case"revision":f.textContent&&(m.revision=parseInt(f.textContent))}return m}},177:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CustomPropsPart=void 0;const r=u(530),m=u(821);class f extends r.Part{parseXml(i){this.props=(0,m.parseCustomProps)(i,this._package.xmlParser)}}e.CustomPropsPart=f},821:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCustomProps=void 0,e.parseCustomProps=function(u,r){return r.elements(u,"property").map(m=>{const f=m.firstChild;return{formatId:r.attr(m,"fmtid"),name:r.attr(m,"name"),type:f.nodeName,value:f.textContent}})}},665:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ExtendedPropsPart=void 0;const r=u(530),m=u(668);class f extends r.Part{parseXml(i){this.props=(0,m.parseExtendedProps)(i,this._package.xmlParser)}}e.ExtendedPropsPart=f},668:(v,e)=>{function u(r){if(r!==void 0)return parseInt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.parseExtendedProps=void 0,e.parseExtendedProps=function(r,m){const f={};for(let a of m.elements(r))switch(a.localName){case"Template":f.template=a.textContent;break;case"Pages":f.pages=u(a.textContent);break;case"Words":f.words=u(a.textContent);break;case"Characters":f.characters=u(a.textContent);break;case"Application":f.application=a.textContent;break;case"Lines":f.lines=u(a.textContent);break;case"Paragraphs":f.paragraphs=u(a.textContent);break;case"Company":f.company=a.textContent;break;case"AppVersion":f.appVersion=a.textContent}return f}},172:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseBookmarkEnd=e.parseBookmarkStart=void 0;const r=u(120);e.parseBookmarkStart=function(m,f){return{type:r.DomType.BookmarkStart,id:f.attr(m,"id"),name:f.attr(m,"name"),colFirst:f.intAttr(m,"colFirst"),colLast:f.intAttr(m,"colLast")}},e.parseBookmarkEnd=function(m,f){return{type:r.DomType.BookmarkEnd,id:f.attr(m,"id")}}},191:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseBorders=e.parseBorder=void 0;const r=u(149);function m(f,a){return{type:a.attr(f,"val"),color:a.attr(f,"color"),size:a.lengthAttr(f,"sz",r.LengthUsage.Border),offset:a.lengthAttr(f,"space",r.LengthUsage.Point),frame:a.boolAttr(f,"frame"),shadow:a.boolAttr(f,"shadow")}}e.parseBorder=m,e.parseBorders=function(f,a){var i={};for(let y of a.elements(f))switch(y.localName){case"left":i.left=m(y,a);break;case"top":i.top=m(y,a);break;case"right":i.right=m(y,a);break;case"bottom":i.bottom=m(y,a)}return i}},149:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCommonProperty=e.convertPercentage=e.convertBoolean=e.convertLength=e.LengthUsage=e.ns=void 0,e.ns={wordml:"http://schemas.openxmlformats.org/wordprocessingml/2006/main",drawingml:"http://schemas.openxmlformats.org/drawingml/2006/main",picture:"http://schemas.openxmlformats.org/drawingml/2006/picture",compatibility:"http://schemas.openxmlformats.org/markup-compatibility/2006",math:"http://schemas.openxmlformats.org/officeDocument/2006/math"},e.LengthUsage={Dxa:{mul:.05,unit:"pt"},Emu:{mul:7874015748031496e-20,unit:"pt"},FontSize:{mul:.5,unit:"pt"},Border:{mul:.125,unit:"pt"},Point:{mul:1,unit:"pt"},Percent:{mul:.02,unit:"%"},LineHeight:{mul:.004166666666666667,unit:""},VmlEmu:{mul:7874015748031496e-20,unit:""}},e.convertLength=function(u,r=e.LengthUsage.Dxa){return u==null||/.+(p[xt]|[%])$/.test(u)?u:`${(parseInt(u)*r.mul).toFixed(2)}${r.unit}`},e.convertBoolean=function(u,r=!1){switch(u){case"1":case"on":case"true":return!0;case"0":case"off":case"false":return!1;default:return r}},e.convertPercentage=function(u){return u?parseInt(u)/100:null},e.parseCommonProperty=function(u,r,m){if(u.namespaceURI!=e.ns.wordml)return!1;switch(u.localName){case"color":r.color=m.attr(u,"val");break;case"sz":r.fontSize=m.lengthAttr(u,"val",e.LengthUsage.FontSize);break;default:return!1}return!0}},448:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.DocumentPart=void 0;const r=u(530);class m extends r.Part{constructor(a,i,y){super(a,i),this._documentParser=y}parseXml(a){this.body=this._documentParser.parseDocumentFile(a)}}e.DocumentPart=m},120:(v,e)=>{var u;Object.defineProperty(e,"__esModule",{value:!0}),e.OpenXmlElementBase=e.DomType=void 0,function(r){r.Document="document",r.Paragraph="paragraph",r.Run="run",r.Break="break",r.NoBreakHyphen="noBreakHyphen",r.Table="table",r.Row="row",r.Cell="cell",r.Hyperlink="hyperlink",r.Drawing="drawing",r.Image="image",r.Text="text",r.Tab="tab",r.Symbol="symbol",r.BookmarkStart="bookmarkStart",r.BookmarkEnd="bookmarkEnd",r.Footer="footer",r.Header="header",r.FootnoteReference="footnoteReference",r.EndnoteReference="endnoteReference",r.Footnote="footnote",r.Endnote="endnote",r.SimpleField="simpleField",r.ComplexField="complexField",r.Instruction="instruction",r.VmlPicture="vmlPicture",r.MmlMath="mmlMath",r.MmlMathParagraph="mmlMathParagraph",r.MmlFraction="mmlFraction",r.MmlFunction="mmlFunction",r.MmlFunctionName="mmlFunctionName",r.MmlNumerator="mmlNumerator",r.MmlDenominator="mmlDenominator",r.MmlRadical="mmlRadical",r.MmlBase="mmlBase",r.MmlDegree="mmlDegree",r.MmlSuperscript="mmlSuperscript",r.MmlSubscript="mmlSubscript",r.MmlPreSubSuper="mmlPreSubSuper",r.MmlSubArgument="mmlSubArgument",r.MmlSuperArgument="mmlSuperArgument",r.MmlNary="mmlNary",r.MmlDelimiter="mmlDelimiter",r.MmlRun="mmlRun",r.MmlEquationArray="mmlEquationArray",r.MmlLimit="mmlLimit",r.MmlLimitLower="mmlLimitLower",r.MmlMatrix="mmlMatrix",r.MmlMatrixRow="mmlMatrixRow",r.MmlBox="mmlBox",r.MmlBar="mmlBar",r.MmlGroupChar="mmlGroupChar",r.VmlElement="vmlElement",r.Inserted="inserted",r.Deleted="deleted",r.DeletedText="deletedText"}(u||(e.DomType=u={})),e.OpenXmlElementBase=class{constructor(){this.children=[],this.cssStyle={}}}},931:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseLineSpacing=void 0,e.parseLineSpacing=function(u,r){return{before:r.lengthAttr(u,"before"),after:r.lengthAttr(u,"after"),line:r.intAttr(u,"line"),lineRule:r.attr(u,"lineRule")}}},109:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseNumbering=e.parseTabs=e.parseParagraphProperty=e.parseParagraphProperties=void 0;const r=u(149),m=u(59),f=u(931),a=u(488);function i(d,p,g){if(d.namespaceURI!=r.ns.wordml)return!1;if((0,r.parseCommonProperty)(d,p,g))return!0;switch(d.localName){case"tabs":p.tabs=y(d,g);break;case"sectPr":p.sectionProps=(0,m.parseSectionProperties)(d,g);break;case"numPr":p.numbering=h(d,g);break;case"spacing":return p.lineSpacing=(0,f.parseLineSpacing)(d,g),!1;case"textAlignment":return p.textAlignment=g.attr(d,"val"),!1;case"keepNext":p.keepLines=g.boolAttr(d,"val",!0);break;case"keepNext":p.keepNext=g.boolAttr(d,"val",!0);break;case"pageBreakBefore":p.pageBreakBefore=g.boolAttr(d,"val",!0);break;case"outlineLvl":p.outlineLevel=g.intAttr(d,"val");break;case"pStyle":p.styleName=g.attr(d,"val");break;case"rPr":p.runProps=(0,a.parseRunProperties)(d,g);break;default:return!1}return!0}function y(d,p){return p.elements(d,"tab").map(g=>({position:p.lengthAttr(g,"pos"),leader:p.attr(g,"leader"),style:p.attr(g,"val")}))}function h(d,p){var g={};for(let w of p.elements(d))switch(w.localName){case"numId":g.id=p.attr(w,"val");break;case"ilvl":g.level=p.intAttr(w,"val")}return g}e.parseParagraphProperties=function(d,p){let g={};for(let w of p.elements(d))i(w,g,p);return g},e.parseParagraphProperty=i,e.parseTabs=y,e.parseNumbering=h},488:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseRunProperty=e.parseRunProperties=void 0;const r=u(149);function m(f,a,i){return!!(0,r.parseCommonProperty)(f,a,i)}e.parseRunProperties=function(f,a){let i={};for(let y of a.elements(f))m(y,i,a);return i},e.parseRunProperty=m},59:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseSectionProperties=e.SectionType=void 0;const r=u(472),m=u(191);var f;function a(h,d){return{numberOfColumns:d.intAttr(h,"num"),space:d.lengthAttr(h,"space"),separator:d.boolAttr(h,"sep"),equalWidth:d.boolAttr(h,"equalWidth",!0),columns:d.elements(h,"col").map(p=>({width:d.lengthAttr(p,"w"),space:d.lengthAttr(p,"space")}))}}function i(h,d){return{chapSep:d.attr(h,"chapSep"),chapStyle:d.attr(h,"chapStyle"),format:d.attr(h,"fmt"),start:d.intAttr(h,"start")}}function y(h,d){return{id:d.attr(h,"id"),type:d.attr(h,"type")}}(function(h){h.Continuous="continuous",h.NextPage="nextPage",h.NextColumn="nextColumn",h.EvenPage="evenPage",h.OddPage="oddPage"})(f||(e.SectionType=f={})),e.parseSectionProperties=function(h,d=r.default){var p,g,w={};for(let P of d.elements(h))switch(P.localName){case"pgSz":w.pageSize={width:d.lengthAttr(P,"w"),height:d.lengthAttr(P,"h"),orientation:d.attr(P,"orient")};break;case"type":w.type=d.attr(P,"val");break;case"pgMar":w.pageMargins={left:d.lengthAttr(P,"left"),right:d.lengthAttr(P,"right"),top:d.lengthAttr(P,"top"),bottom:d.lengthAttr(P,"bottom"),header:d.lengthAttr(P,"header"),footer:d.lengthAttr(P,"footer"),gutter:d.lengthAttr(P,"gutter")};break;case"cols":w.columns=a(P,d);break;case"headerReference":((p=w.headerRefs)!==null&&p!==void 0?p:w.headerRefs=[]).push(y(P,d));break;case"footerReference":((g=w.footerRefs)!==null&&g!==void 0?g:w.footerRefs=[]).push(y(P,d));break;case"titlePg":w.titlePage=d.boolAttr(P,"val",!0);break;case"pgBorders":w.pageBorders=(0,m.parseBorders)(P,d);break;case"pgNumType":w.pageNumber=i(P,d)}return w}},667:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.renderAsync=e.praseAsync=e.defaultOptions=void 0;const r=u(213),m=u(168),f=u(932);e.defaultOptions={ignoreHeight:!1,ignoreWidth:!1,ignoreFonts:!1,breakPages:!0,debug:!1,experimental:!1,className:"docx",inWrapper:!0,trimXmlDeclaration:!0,ignoreLastRenderedPageBreak:!0,renderHeaders:!0,renderFooters:!0,renderFootnotes:!0,renderEndnotes:!0,useBase64URL:!1,useMathMLPolyfill:!1,renderChanges:!1},e.praseAsync=function(a,i=null){const y=Object.assign(Object.assign({},e.defaultOptions),i);return r.WordDocument.load(a,new m.DocumentParser(y),y)},e.renderAsync=async function(a,i,y=null,h=null){const d=Object.assign(Object.assign({},e.defaultOptions),h),p=new f.HtmlRenderer(window.document),g=await r.WordDocument.load(a,new m.DocumentParser(d),d);return p.render(g,i,y,d),g}},380:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FontTablePart=void 0;const r=u(530),m=u(512);class f extends r.Part{parseXml(i){this.fonts=(0,m.parseFonts)(i,this._package.xmlParser)}}e.FontTablePart=f},512:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseEmbedFontRef=e.parseFont=e.parseFonts=void 0;const u={embedRegular:"regular",embedBold:"bold",embedItalic:"italic",embedBoldItalic:"boldItalic"};function r(f,a){let i={name:a.attr(f,"name"),embedFontRefs:[]};for(let y of a.elements(f))switch(y.localName){case"family":i.family=a.attr(y,"val");break;case"altName":i.altName=a.attr(y,"val");break;case"embedRegular":case"embedBold":case"embedItalic":case"embedBoldItalic":i.embedFontRefs.push(m(y,a))}return i}function m(f,a){return{id:a.attr(f,"id"),key:a.attr(f,"fontKey"),type:u[f.localName]}}e.parseFonts=function(f,a){return a.elements(f).map(i=>r(i,a))},e.parseFont=r,e.parseEmbedFontRef=m},984:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.WmlFooter=e.WmlHeader=void 0;const r=u(120);class m extends r.OpenXmlElementBase{constructor(){super(...arguments),this.type=r.DomType.Header}}e.WmlHeader=m;class f extends r.OpenXmlElementBase{constructor(){super(...arguments),this.type=r.DomType.Footer}}e.WmlFooter=f},985:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FooterPart=e.HeaderPart=e.BaseHeaderFooterPart=void 0;const r=u(530),m=u(984);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}parseXml(i){this.rootElement=this.createRootElement(),this.rootElement.children=this._documentParser.parseBodyElements(i)}}e.BaseHeaderFooterPart=f,e.HeaderPart=class extends f{createRootElement(){return new m.WmlHeader}},e.FooterPart=class extends f{createRootElement(){return new m.WmlFooter}}},932:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HtmlRenderer=void 0;const r=u(120),m=u(593),f=u(630),a=u(438),i="http://www.w3.org/1998/Math/MathML";function y(n,s,t){return d(void 0,n,s,t)}function h(n,s,t){return d("http://www.w3.org/2000/svg",n,s,t)}function d(n,s,t,l){var b=n?document.createElementNS(n,s):document.createElement(s);return Object.assign(b,t),l&&g(b,l),b}function p(n){n.innerHTML=""}function g(n,s){s.forEach(t=>n.appendChild((0,m.isString)(t)?document.createTextNode(t):t))}function w(n){return y("style",{innerHTML:n})}function P(n,s){n.appendChild(document.createComment(s))}e.HtmlRenderer=class{constructor(n){this.htmlDocument=n,this.className="docx",this.styleMap={},this.currentPart=null,this.tableVerticalMerges=[],this.currentVerticalMerge=null,this.tableCellPositions=[],this.currentCellPosition=null,this.footnoteMap={},this.endnoteMap={},this.currentEndnoteIds=[],this.usedHederFooterParts=[],this.currentTabs=[],this.tabsTimeout=0,this.createElement=y}render(n,s,t=null,l){var b;this.document=n,this.options=l,this.className=l.className,this.rootSelector=l.inWrapper?`.${this.className}-wrapper`:":root",this.styleMap=null,p(t=t||s),p(s),P(t,"docxjs library predefined styles"),t.appendChild(this.renderDefaultStyle()),!window.MathMLElement&&l.useMathMLPolyfill&&(P(t,"docxjs mathml polyfill styles"),t.appendChild(w(a.default))),n.themePart&&(P(t,"docxjs document theme values"),this.renderTheme(n.themePart,t)),n.stylesPart!=null&&(this.styleMap=this.processStyles(n.stylesPart.styles),P(t,"docxjs document styles"),t.appendChild(this.renderStyles(n.stylesPart.styles))),n.numberingPart&&(this.prodessNumberings(n.numberingPart.domNumberings),P(t,"docxjs document numbering styles"),t.appendChild(this.renderNumbering(n.numberingPart.domNumberings,t))),n.footnotesPart&&(this.footnoteMap=(0,m.keyBy)(n.footnotesPart.notes,E=>E.id)),n.endnotesPart&&(this.endnoteMap=(0,m.keyBy)(n.endnotesPart.notes,E=>E.id)),n.settingsPart&&(this.defaultTabSize=(b=n.settingsPart.settings)===null||b===void 0?void 0:b.defaultTabStop),!l.ignoreFonts&&n.fontTablePart&&this.renderFontTable(n.fontTablePart,t);var k=this.renderSections(n.documentPart.body);this.options.inWrapper?s.appendChild(this.renderWrapper(k)):g(s,k),this.refreshTabStops()}renderTheme(n,s){var t,l;const b={},k=(t=n.theme)===null||t===void 0?void 0:t.fontScheme;k&&(k.majorFont&&(b["--docx-majorHAnsi-font"]=k.majorFont.latinTypeface),k.minorFont&&(b["--docx-minorHAnsi-font"]=k.minorFont.latinTypeface));const E=(l=n.theme)===null||l===void 0?void 0:l.colorScheme;if(E)for(let[C,o]of Object.entries(E.colors))b[`--docx-${C}-color`]=`#${o}`;const _=this.styleToString(`.${this.className}`,b);s.appendChild(w(_))}renderFontTable(n,s){for(let t of n.fonts)for(let l of t.embedFontRefs)this.document.loadFont(l.id,l.key).then(b=>{const k={"font-family":t.name,src:`url(${b})`};l.type!="bold"&&l.type!="boldItalic"||(k["font-weight"]="bold"),l.type!="italic"&&l.type!="boldItalic"||(k["font-style"]="italic"),P(s,`docxjs ${t.name} font`);const E=this.styleToString("@font-face",k);s.appendChild(w(E)),this.refreshTabStops()})}processStyleName(n){return n?`${this.className}_${(0,m.escapeClassName)(n)}`:this.className}processStyles(n){const s=(0,m.keyBy)(n.filter(l=>l.id!=null),l=>l.id);for(const l of n.filter(b=>b.basedOn)){var t=s[l.basedOn];if(t){l.paragraphProps=(0,m.mergeDeep)(l.paragraphProps,t.paragraphProps),l.runProps=(0,m.mergeDeep)(l.runProps,t.runProps);for(const b of t.styles){const k=l.styles.find(E=>E.target==b.target);k?this.copyStyleProperties(b.values,k.values):l.styles.push(Object.assign(Object.assign({},b),{values:Object.assign({},b.values)}))}}else this.options.debug&&console.warn(`Can't find base style ${l.basedOn}`)}for(let l of n)l.cssName=this.processStyleName(l.id);return s}prodessNumberings(n){var s;for(let t of n.filter(l=>l.pStyleName)){const l=this.findStyle(t.pStyleName);!((s=l==null?void 0:l.paragraphProps)===null||s===void 0)&&s.numbering&&(l.paragraphProps.numbering.level=t.level)}}processElement(n){if(n.children)for(var s of n.children)s.parent=n,s.type==r.DomType.Table?this.processTable(s):this.processElement(s)}processTable(n){for(var s of n.children)for(var t of s.children)t.cssStyle=this.copyStyleProperties(n.cellStyle,t.cssStyle,["border-left","border-right","border-top","border-bottom","padding-left","padding-right","padding-top","padding-bottom"]),this.processElement(t)}copyStyleProperties(n,s,t=null){if(!n)return s;for(var l of(s==null&&(s={}),t==null&&(t=Object.getOwnPropertyNames(n)),t))n.hasOwnProperty(l)&&!s.hasOwnProperty(l)&&(s[l]=n[l]);return s}createSection(n,s){var t=this.createElement("section",{className:n});return s&&(s.pageMargins&&(t.style.paddingLeft=s.pageMargins.left,t.style.paddingRight=s.pageMargins.right,t.style.paddingTop=s.pageMargins.top,t.style.paddingBottom=s.pageMargins.bottom),s.pageSize&&(this.options.ignoreWidth||(t.style.width=s.pageSize.width),this.options.ignoreHeight||(t.style.minHeight=s.pageSize.height)),s.columns&&s.columns.numberOfColumns&&(t.style.columnCount=`${s.columns.numberOfColumns}`,t.style.columnGap=s.columns.space,s.columns.separator&&(t.style.columnRule="1px solid black"))),t}renderSections(n){const s=[];this.processElement(n);const t=this.splitBySection(n.children);let l=null;for(let k=0,E=t.length;ko.type=="first"):null)!==null&&k!==void 0?k:t%2==1?n.find(o=>o.type=="even"):null)!==null&&E!==void 0?E:n.find(o=>o.type=="default"),C=_&&this.document.findPartByRelId(_.id,this.document.documentPart);C&&(this.currentPart=C,this.usedHederFooterParts.includes(C.path)||(this.processElement(C.rootElement),this.usedHederFooterParts.push(C.path)),this.renderElements([C.rootElement],b),this.currentPart=null)}}isPageBreakElement(n){return n.type==r.DomType.Break&&(n.break=="lastRenderedPageBreak"?!this.options.ignoreLastRenderedPageBreak:n.break=="page")}splitBySection(n){var s,t={sectProps:null,elements:[]},l=[t];for(let R of n){if(R.type==r.DomType.Paragraph){const V=this.findStyle(R.styleName);!((s=V==null?void 0:V.paragraphProps)===null||s===void 0)&&s.pageBreakBefore&&(t.sectProps=b,t={sectProps:null,elements:[]},l.push(t))}if(t.elements.push(R),R.type==r.DomType.Paragraph){const V=R;var b=V.sectionProps,k=-1,E=-1;if(this.options.breakPages&&V.children&&(k=V.children.findIndex(F=>{var q,W;return(E=(W=(q=F.children)===null||q===void 0?void 0:q.findIndex(this.isPageBreakElement.bind(this)))!==null&&W!==void 0?W:-1)!=-1})),(b||k!=-1)&&(t.sectProps=b,t={sectProps:null,elements:[]},l.push(t)),k!=-1){let F=V.children[k],q=E=0;R--)l[R].sectProps==null?l[R].sectProps=o:o=l[R].sectProps;return l}renderWrapper(n){return this.createElement("div",{className:`${this.className}-wrapper`},n)}renderDefaultStyle(){var n=this.className;return w(` +.${n}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; } +.${n}-wrapper>section.${n} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; } +.${n} { color: black; hyphens: auto; } +section.${n} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; } +section.${n}>article { margin-bottom: auto; z-index: 1; } +section.${n}>footer { z-index: 1; } +.${n} table { border-collapse: collapse; } +.${n} table td, .${n} table th { vertical-align: top; } +.${n} p { margin: 0pt; min-height: 1em; } +.${n} span { white-space: pre-wrap; overflow-wrap: break-word; } +.${n} a { color: inherit; text-decoration: inherit; } +`)}renderNumbering(n,s){var t="",l=[];for(var b of n){var k=`p.${this.numberingClass(b.id,b.level)}`,E="none";if(b.bullet){let _=`--${this.className}-${b.bullet.src}`.toLowerCase();t+=this.styleToString(`${k}:before`,{content:"' '",display:"inline-block",background:`var(${_})`},b.bullet.style),this.document.loadNumberingImage(b.bullet.src).then(C=>{var o=`${this.rootSelector} { ${_}: url(${C}) }`;s.appendChild(w(o))})}else if(b.levelText){let _=this.numberingCounter(b.id,b.level);const C=_+" "+(b.start-1);b.level>0&&(t+=this.styleToString(`p.${this.numberingClass(b.id,b.level-1)}`,{"counter-reset":C})),l.push(C),t+=this.styleToString(`${k}:before`,Object.assign({content:this.levelTextToContent(b.levelText,b.suff,b.id,this.numFormatToCssValue(b.format)),"counter-increment":_},b.rStyle))}else E=this.numFormatToCssValue(b.format);t+=this.styleToString(k,Object.assign({display:"list-item","list-style-position":"inside","list-style-type":E},b.pStyle))}return l.length>0&&(t+=this.styleToString(this.rootSelector,{"counter-reset":l.join(" ")})),w(t)}renderStyles(n){var s,t="";const l=this.styleMap,b=(0,m.keyBy)(n.filter(C=>C.isDefault),C=>C.target);for(const C of n){var k=C.styles;if(C.linked){var E=C.linked&&l[C.linked];E?k=k.concat(E.styles):this.options.debug&&console.warn(`Can't find linked style ${C.linked}`)}for(const o of k){var _=`${(s=C.target)!==null&&s!==void 0?s:""}.${C.cssName}`;C.target!=o.target&&(_+=` ${o.target}`),b[C.target]==C&&(_=`.${this.className} ${C.target}, `+_),t+=this.styleToString(_,o.values)}}return w(t)}renderNotes(n,s,t){var l=n.map(k=>s[k]).filter(k=>k);if(l.length>0){var b=this.createElement("ol",null,this.renderElements(l));t.appendChild(b)}}renderElement(n){switch(n.type){case r.DomType.Paragraph:return this.renderParagraph(n);case r.DomType.BookmarkStart:return this.renderBookmarkStart(n);case r.DomType.BookmarkEnd:return null;case r.DomType.Run:return this.renderRun(n);case r.DomType.Table:return this.renderTable(n);case r.DomType.Row:return this.renderTableRow(n);case r.DomType.Cell:return this.renderTableCell(n);case r.DomType.Hyperlink:return this.renderHyperlink(n);case r.DomType.Drawing:return this.renderDrawing(n);case r.DomType.Image:return this.renderImage(n);case r.DomType.Text:case r.DomType.Text:return this.renderText(n);case r.DomType.DeletedText:return this.renderDeletedText(n);case r.DomType.Tab:return this.renderTab(n);case r.DomType.Symbol:return this.renderSymbol(n);case r.DomType.Break:return this.renderBreak(n);case r.DomType.Footer:return this.renderContainer(n,"footer");case r.DomType.Header:return this.renderContainer(n,"header");case r.DomType.Footnote:case r.DomType.Endnote:return this.renderContainer(n,"li");case r.DomType.FootnoteReference:return this.renderFootnoteReference(n);case r.DomType.EndnoteReference:return this.renderEndnoteReference(n);case r.DomType.NoBreakHyphen:return this.createElement("wbr");case r.DomType.VmlPicture:return this.renderVmlPicture(n);case r.DomType.VmlElement:return this.renderVmlElement(n);case r.DomType.MmlMath:return this.renderContainerNS(n,i,"math",{xmlns:i});case r.DomType.MmlMathParagraph:return this.renderContainer(n,"span");case r.DomType.MmlFraction:return this.renderContainerNS(n,i,"mfrac");case r.DomType.MmlBase:return this.renderContainerNS(n,i,n.parent.type==r.DomType.MmlMatrixRow?"mtd":"mrow");case r.DomType.MmlNumerator:case r.DomType.MmlDenominator:case r.DomType.MmlFunction:case r.DomType.MmlLimit:case r.DomType.MmlBox:return this.renderContainerNS(n,i,"mrow");case r.DomType.MmlGroupChar:return this.renderMmlGroupChar(n);case r.DomType.MmlLimitLower:return this.renderContainerNS(n,i,"munder");case r.DomType.MmlMatrix:return this.renderContainerNS(n,i,"mtable");case r.DomType.MmlMatrixRow:return this.renderContainerNS(n,i,"mtr");case r.DomType.MmlRadical:return this.renderMmlRadical(n);case r.DomType.MmlSuperscript:return this.renderContainerNS(n,i,"msup");case r.DomType.MmlSubscript:return this.renderContainerNS(n,i,"msub");case r.DomType.MmlDegree:case r.DomType.MmlSuperArgument:case r.DomType.MmlSubArgument:return this.renderContainerNS(n,i,"mn");case r.DomType.MmlFunctionName:return this.renderContainerNS(n,i,"ms");case r.DomType.MmlDelimiter:return this.renderMmlDelimiter(n);case r.DomType.MmlRun:return this.renderMmlRun(n);case r.DomType.MmlNary:return this.renderMmlNary(n);case r.DomType.MmlPreSubSuper:return this.renderMmlPreSubSuper(n);case r.DomType.MmlBar:return this.renderMmlBar(n);case r.DomType.MmlEquationArray:return this.renderMllList(n);case r.DomType.Inserted:return this.renderInserted(n);case r.DomType.Deleted:return this.renderDeleted(n)}return null}renderChildren(n,s){return this.renderElements(n.children,s)}renderElements(n,s){if(n==null)return null;var t=n.flatMap(l=>this.renderElement(l)).filter(l=>l!=null);return s&&g(s,t),t}renderContainer(n,s,t){return this.createElement(s,t,this.renderChildren(n))}renderContainerNS(n,s,t,l){return d(s,t,l,this.renderChildren(n))}renderParagraph(n){var s,t,l,b,k=this.createElement("p");const E=this.findStyle(n.styleName);(s=n.tabs)!==null&&s!==void 0||(n.tabs=(t=E==null?void 0:E.paragraphProps)===null||t===void 0?void 0:t.tabs),this.renderClass(n,k),this.renderChildren(n,k),this.renderStyleValues(n.cssStyle,k),this.renderCommonProperties(k.style,n);const _=(l=n.numbering)!==null&&l!==void 0?l:(b=E==null?void 0:E.paragraphProps)===null||b===void 0?void 0:b.numbering;return _&&k.classList.add(this.numberingClass(_.id,_.level)),k}renderRunProperties(n,s){this.renderCommonProperties(n,s)}renderCommonProperties(n,s){s!=null&&(s.color&&(n.color=s.color),s.fontSize&&(n["font-size"]=s.fontSize))}renderHyperlink(n){var s=this.createElement("a");if(this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),n.href)s.href=n.href;else if(n.id){const t=this.document.documentPart.rels.find(l=>l.id==n.id&&l.targetMode==="External");s.href=t==null?void 0:t.target}return s}renderDrawing(n){var s=this.createElement("div");return s.style.display="inline-block",s.style.position="relative",s.style.textIndent="0px",this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),s}renderImage(n){let s=this.createElement("img");return this.renderStyleValues(n.cssStyle,s),this.document&&this.document.loadDocumentImage(n.src,this.currentPart).then(t=>{s.src=t}),s}renderText(n){return this.htmlDocument.createTextNode(n.text)}renderDeletedText(n){return this.options.renderEndnotes?this.htmlDocument.createTextNode(n.text):null}renderBreak(n){return n.break=="textWrapping"?this.createElement("br"):null}renderInserted(n){return this.options.renderChanges?this.renderContainer(n,"ins"):this.renderChildren(n)}renderDeleted(n){return this.options.renderChanges?this.renderContainer(n,"del"):null}renderSymbol(n){var s=this.createElement("span");return s.style.fontFamily=n.font,s.innerHTML=`&#x${n.char};`,s}renderFootnoteReference(n){var s=this.createElement("sup");return this.currentFootnoteIds.push(n.id),s.textContent=`${this.currentFootnoteIds.length}`,s}renderEndnoteReference(n){var s=this.createElement("sup");return this.currentEndnoteIds.push(n.id),s.textContent=`${this.currentEndnoteIds.length}`,s}renderTab(n){var s,t=this.createElement("span");if(t.innerHTML=" ",this.options.experimental){t.className=this.tabStopClass();var l=(s=function(b,k){for(var E=b.parent;E!=null&&E.type!=k;)E=E.parent;return E}(n,r.DomType.Paragraph))===null||s===void 0?void 0:s.tabs;this.currentTabs.push({stops:l,span:t})}return t}renderBookmarkStart(n){var s=this.createElement("span");return s.id=n.name,s}renderRun(n){if(n.fieldRun)return null;const s=this.createElement("span");if(n.id&&(s.id=n.id),this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),n.verticalAlign){const t=this.createElement(n.verticalAlign);this.renderChildren(n,t),s.appendChild(t)}else this.renderChildren(n,s);return s}renderTable(n){let s=this.createElement("table");return this.tableCellPositions.push(this.currentCellPosition),this.tableVerticalMerges.push(this.currentVerticalMerge),this.currentVerticalMerge={},this.currentCellPosition={col:0,row:0},n.columns&&s.appendChild(this.renderTableColumns(n.columns)),this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),this.currentVerticalMerge=this.tableVerticalMerges.pop(),this.currentCellPosition=this.tableCellPositions.pop(),s}renderTableColumns(n){let s=this.createElement("colgroup");for(let t of n){let l=this.createElement("col");t.width&&(l.style.width=t.width),s.appendChild(l)}return s}renderTableRow(n){let s=this.createElement("tr");return this.currentCellPosition.col=0,this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),this.currentCellPosition.row++,s}renderTableCell(n){let s=this.createElement("td");const t=this.currentCellPosition.col;return n.verticalMerge?n.verticalMerge=="restart"?(this.currentVerticalMerge[t]=s,s.rowSpan=1):this.currentVerticalMerge[t]&&(this.currentVerticalMerge[t].rowSpan+=1,s.style.display="none"):this.currentVerticalMerge[t]=null,this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),n.span&&(s.colSpan=n.span),this.currentCellPosition.col+=s.colSpan,s}renderVmlPicture(n){var s=y("div");return this.renderChildren(n,s),s}renderVmlElement(n){var s,t,l=h("svg");l.setAttribute("style",n.cssStyleText);const b=this.renderVmlChildElement(n);return!((s=n.imageHref)===null||s===void 0)&&s.id&&((t=this.document)===null||t===void 0||t.loadDocumentImage(n.imageHref.id,this.currentPart).then(k=>b.setAttribute("href",k))),l.appendChild(b),requestAnimationFrame(()=>{const k=l.firstElementChild.getBBox();l.setAttribute("width",`${Math.ceil(k.x+k.width)}`),l.setAttribute("height",`${Math.ceil(k.y+k.height)}`)}),l}renderVmlChildElement(n){const s=h(n.tagName);Object.entries(n.attrs).forEach(([t,l])=>s.setAttribute(t,l));for(let t of n.children)t.type==r.DomType.VmlElement?s.appendChild(this.renderVmlChildElement(t)):s.appendChild(...(0,m.asArray)(this.renderElement(t)));return s}renderMmlRadical(n){var s;const t=n.children.find(b=>b.type==r.DomType.MmlBase);if(!((s=n.props)===null||s===void 0)&&s.hideDegree)return d(i,"msqrt",null,this.renderElements([t]));const l=n.children.find(b=>b.type==r.DomType.MmlDegree);return d(i,"mroot",null,this.renderElements([t,l]))}renderMmlDelimiter(n){var s,t;const l=[];return l.push(d(i,"mo",null,[(s=n.props.beginChar)!==null&&s!==void 0?s:"("])),l.push(...this.renderElements(n.children)),l.push(d(i,"mo",null,[(t=n.props.endChar)!==null&&t!==void 0?t:")"])),d(i,"mrow",null,l)}renderMmlNary(n){var s,t;const l=[],b=(0,m.keyBy)(n.children,R=>R.type),k=b[r.DomType.MmlSuperArgument],E=b[r.DomType.MmlSubArgument],_=k?d(i,"mo",null,(0,m.asArray)(this.renderElement(k))):null,C=E?d(i,"mo",null,(0,m.asArray)(this.renderElement(E))):null,o=d(i,"mo",null,[(t=(s=n.props)===null||s===void 0?void 0:s.char)!==null&&t!==void 0?t:"∫"]);return _||C?l.push(d(i,"munderover",null,[o,C,_])):_?l.push(d(i,"mover",null,[o,_])):C?l.push(d(i,"munder",null,[o,C])):l.push(o),l.push(...this.renderElements(b[r.DomType.MmlBase].children)),d(i,"mrow",null,l)}renderMmlPreSubSuper(n){const s=[],t=(0,m.keyBy)(n.children,C=>C.type),l=t[r.DomType.MmlSuperArgument],b=t[r.DomType.MmlSubArgument],k=l?d(i,"mo",null,(0,m.asArray)(this.renderElement(l))):null,E=b?d(i,"mo",null,(0,m.asArray)(this.renderElement(b))):null,_=d(i,"mo",null);return s.push(d(i,"msubsup",null,[_,E,k])),s.push(...this.renderElements(t[r.DomType.MmlBase].children)),d(i,"mrow",null,s)}renderMmlGroupChar(n){const s=n.props.verticalJustification==="bot"?"mover":"munder",t=this.renderContainerNS(n,i,s);return n.props.char&&t.appendChild(d(i,"mo",null,[n.props.char])),t}renderMmlBar(n){const s=this.renderContainerNS(n,i,"mrow");switch(n.props.position){case"top":s.style.textDecoration="overline";break;case"bottom":s.style.textDecoration="underline"}return s}renderMmlRun(n){const s=d(i,"ms");return this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),this.renderChildren(n,s),s}renderMllList(n){const s=d(i,"mtable");this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),this.renderChildren(n);for(let t of this.renderChildren(n))s.appendChild(d(i,"mtr",null,[d(i,"mtd",null,[t])]));return s}renderStyleValues(n,s){for(let t in n)t.startsWith("$")?s.setAttribute(t.slice(1),n[t]):s.style[t]=n[t]}renderClass(n,s){n.className&&(s.className=n.className),n.styleName&&s.classList.add(this.processStyleName(n.styleName))}findStyle(n){var s;return n&&((s=this.styleMap)===null||s===void 0?void 0:s[n])}numberingClass(n,s){return`${this.className}-num-${n}-${s}`}tabStopClass(){return`${this.className}-tab-stop`}styleToString(n,s,t=null){let l=`${n} {\r +`;for(const b in s)b.startsWith("$")||(l+=` ${b}: ${s[b]};\r +`);return t&&(l+=t),l+`}\r +`}numberingCounter(n,s){return`${this.className}-num-${n}-${s}`}levelTextToContent(n,s,t,l){var b;return`"${n.replace(/%\d*/g,k=>{let E=parseInt(k.substring(1),10)-1;return`"counter(${this.numberingCounter(t,E)}, ${l})"`})}${(b={tab:"\\9",space:"\\a0"}[s])!==null&&b!==void 0?b:""}"`}numFormatToCssValue(n){var s;return(s={none:"none",bullet:"disc",decimal:"decimal",lowerLetter:"lower-alpha",upperLetter:"upper-alpha",lowerRoman:"lower-roman",upperRoman:"upper-roman",decimalZero:"decimal-leading-zero",aiueo:"katakana",aiueoFullWidth:"katakana",chineseCounting:"simp-chinese-informal",chineseCountingThousand:"simp-chinese-informal",chineseLegalSimplified:"simp-chinese-formal",chosung:"hangul-consonant",ideographDigital:"cjk-ideographic",ideographTraditional:"cjk-heavenly-stem",ideographLegalTraditional:"trad-chinese-formal",ideographZodiac:"cjk-earthly-branch",iroha:"katakana-iroha",irohaFullWidth:"katakana-iroha",japaneseCounting:"japanese-informal",japaneseDigitalTenThousand:"cjk-decimal",japaneseLegal:"japanese-formal",thaiNumbers:"thai",koreanCounting:"korean-hangul-formal",koreanDigital:"korean-hangul-formal",koreanDigital2:"korean-hanja-informal",hebrew1:"hebrew",hebrew2:"hebrew",hindiNumbers:"devanagari",ganada:"hangul",taiwaneseCounting:"cjk-ideographic",taiwaneseCountingThousand:"cjk-ideographic",taiwaneseDigital:"cjk-decimal"}[n])!==null&&s!==void 0?s:n}refreshTabStops(){this.options.experimental&&(clearTimeout(this.tabsTimeout),this.tabsTimeout=setTimeout(()=>{const n=(0,f.computePixelToPoint)();for(let s of this.currentTabs)(0,f.updateTabStop)(s.span,s.stops,this.defaultTabSize,n)},500))}}},630:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.updateTabStop=e.computePixelToPoint=void 0;const u={pos:0,leader:"none",style:"left"};function r(m){return parseFloat(m)}e.computePixelToPoint=function(m=document.body){const f=document.createElement("div");f.style.width="100pt",m.appendChild(f);const a=100/f.offsetWidth;return m.removeChild(f),a},e.updateTabStop=function(m,f,a,i=.75){const y=m.closest("p"),h=m.getBoundingClientRect(),d=y.getBoundingClientRect(),p=getComputedStyle(y),g=(f==null?void 0:f.length)>0?f.map(_=>({pos:r(_.position),leader:_.leader,style:_.style})).sort((_,C)=>_.pos-C.pos):[u],w=g[g.length-1],P=d.width*i,n=r(a);let s=w.pos+n;if(s_.style!="clear"&&_.pos>b);if(k==null)return;let E=1;if(k.style=="right"||k.style=="center"){const _=Array.from(y.querySelectorAll(`.${m.className}`)),C=_.indexOf(m)+1,o=document.createRange();o.setStart(m,1),C<_.length?o.setEndBefore(_[C]):o.setEndAfter(y);const R=k.style=="center"?.5:1,V=o.getBoundingClientRect(),F=V.left+R*V.width-(d.left-t);E=k.pos-F*i}else E=k.pos-b;switch(m.innerHTML=" ",m.style.textDecoration="inherit",m.style.wordSpacing=`${E.toFixed(0)}pt`,k.leader){case"dot":case"middleDot":m.style.textDecoration="underline",m.style.textDecorationStyle="dotted";break;case"hyphen":case"heavy":case"underscore":m.style.textDecoration="underline"}}},881:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.WmlEndnote=e.WmlFootnote=e.WmlBaseNote=void 0;const r=u(120);class m{}e.WmlBaseNote=m,e.WmlFootnote=class extends m{constructor(){super(...arguments),this.type=r.DomType.Footnote}},e.WmlEndnote=class extends m{constructor(){super(...arguments),this.type=r.DomType.Endnote}}},735:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.EndnotesPart=e.FootnotesPart=e.BaseNotePart=void 0;const r=u(530),m=u(881);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}}e.BaseNotePart=f,e.FootnotesPart=class extends f{constructor(a,i,y){super(a,i,y)}parseXml(a){this.notes=this._documentParser.parseNotes(a,"footnote",m.WmlFootnote)}},e.EndnotesPart=class extends f{constructor(a,i,y){super(a,i,y)}parseXml(a){this.notes=this._documentParser.parseNotes(a,"endnote",m.WmlEndnote)}}},527:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.NumberingPart=void 0;const r=u(530),m=u(682);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}parseXml(i){Object.assign(this,(0,m.parseNumberingPart)(i,this._package.xmlParser)),this.domNumberings=this._documentParser.parseNumberingFile(i)}}e.NumberingPart=f},682:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseNumberingBulletPicture=e.parseNumberingLevelOverrride=e.parseNumberingLevel=e.parseAbstractNumbering=e.parseNumbering=e.parseNumberingPart=void 0;const r=u(109),m=u(488);function f(d,p){let g={id:p.attr(d,"numId"),overrides:[]};for(let w of p.elements(d))switch(w.localName){case"abstractNumId":g.abstractId=p.attr(w,"val");break;case"lvlOverride":g.overrides.push(y(w,p))}return g}function a(d,p){let g={id:p.attr(d,"abstractNumId"),levels:[]};for(let w of p.elements(d))switch(w.localName){case"name":g.name=p.attr(w,"val");break;case"multiLevelType":g.multiLevelType=p.attr(w,"val");break;case"numStyleLink":g.numberingStyleLink=p.attr(w,"val");break;case"styleLink":g.styleLink=p.attr(w,"val");break;case"lvl":g.levels.push(i(w,p))}return g}function i(d,p){let g={level:p.intAttr(d,"ilvl")};for(let w of p.elements(d))switch(w.localName){case"start":g.start=p.attr(w,"val");break;case"lvlRestart":g.restart=p.intAttr(w,"val");break;case"numFmt":g.format=p.attr(w,"val");break;case"lvlText":g.text=p.attr(w,"val");break;case"lvlJc":g.justification=p.attr(w,"val");break;case"lvlPicBulletId":g.bulletPictureId=p.attr(w,"val");break;case"pStyle":g.paragraphStyle=p.attr(w,"val");break;case"pPr":g.paragraphProps=(0,r.parseParagraphProperties)(w,p);break;case"rPr":g.runProps=(0,m.parseRunProperties)(w,p)}return g}function y(d,p){let g={level:p.intAttr(d,"ilvl")};for(let w of p.elements(d))switch(w.localName){case"startOverride":g.start=p.intAttr(w,"val");break;case"lvl":g.numberingLevel=i(w,p)}return g}function h(d,p){var g=p.element(d,"pict"),w=g&&p.element(g,"shape"),P=w&&p.element(w,"imagedata");return P?{id:p.attr(d,"numPicBulletId"),referenceId:p.attr(P,"id"),style:p.attr(w,"style")}:null}e.parseNumberingPart=function(d,p){let g={numberings:[],abstractNumberings:[],bulletPictures:[]};for(let w of p.elements(d))switch(w.localName){case"num":g.numberings.push(f(w,p));break;case"abstractNum":g.abstractNumberings.push(a(w,p));break;case"numPicBullet":g.bulletPictures.push(h(w,p))}return g},e.parseNumbering=f,e.parseAbstractNumbering=a,e.parseNumberingLevel=i,e.parseNumberingLevelOverrride=y,e.parseNumberingBulletPicture=h},472:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.XmlParser=e.serializeXmlString=e.parseXmlString=void 0;const r=u(149);e.parseXmlString=function(a,i=!1){var y;i&&(a=a.replace(/<[?].*[?]>/,"")),a=(y=a).charCodeAt(0)===65279?y.substring(1):y;const h=new DOMParser().parseFromString(a,"application/xml"),d=(p=h.getElementsByTagName("parsererror")[0])===null||p===void 0?void 0:p.textContent;var p;if(d)throw new Error(d);return h},e.serializeXmlString=function(a){return new XMLSerializer().serializeToString(a)};class m{elements(i,y=null){const h=[];for(let d=0,p=i.childNodes.length;d{Object.defineProperty(e,"__esModule",{value:!0}),e.SettingsPart=void 0;const r=u(530),m=u(846);class f extends r.Part{constructor(i,y){super(i,y)}parseXml(i){this.settings=(0,m.parseSettings)(i,this._package.xmlParser)}}e.SettingsPart=f},846:(v,e)=>{function u(r,m){var f={defaultNoteIds:[]};for(let a of m.elements(r))switch(a.localName){case"numFmt":f.nummeringFormat=m.attr(a,"val");break;case"footnote":case"endnote":f.defaultNoteIds.push(m.attr(a,"id"))}return f}Object.defineProperty(e,"__esModule",{value:!0}),e.parseNoteProperties=e.parseSettings=void 0,e.parseSettings=function(r,m){var f={};for(let a of m.elements(r))switch(a.localName){case"defaultTabStop":f.defaultTabStop=m.lengthAttr(a,"val");break;case"footnotePr":f.footnoteProps=u(a,m);break;case"endnotePr":f.endnoteProps=u(a,m);break;case"autoHyphenation":f.autoHyphenation=m.boolAttr(a,"val")}return f},e.parseNoteProperties=u},240:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.StylesPart=void 0;const r=u(530);class m extends r.Part{constructor(a,i,y){super(a,i),this._documentParser=y}parseXml(a){this.styles=this._documentParser.parseStylesFile(a)}}e.StylesPart=m},893:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ThemePart=void 0;const r=u(530),m=u(55);class f extends r.Part{constructor(i,y){super(i,y)}parseXml(i){this.theme=(0,m.parseTheme)(i,this._package.xmlParser)}}e.ThemePart=f},55:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseFontInfo=e.parseFontScheme=e.parseColorScheme=e.parseTheme=e.DmlTheme=void 0;class u{}function r(a,i){var y={name:i.attr(a,"name"),colors:{}};for(let p of i.elements(a)){var h=i.element(p,"srgbClr"),d=i.element(p,"sysClr");h?y.colors[p.localName]=i.attr(h,"val"):d&&(y.colors[p.localName]=i.attr(d,"lastClr"))}return y}function m(a,i){var y={name:i.attr(a,"name")};for(let h of i.elements(a))switch(h.localName){case"majorFont":y.majorFont=f(h,i);break;case"minorFont":y.minorFont=f(h,i)}return y}function f(a,i){return{latinTypeface:i.elementAttr(a,"latin","typeface"),eaTypeface:i.elementAttr(a,"ea","typeface"),csTypeface:i.elementAttr(a,"cs","typeface")}}e.DmlTheme=u,e.parseTheme=function(a,i){var y=new u,h=i.element(a,"themeElements");for(let d of i.elements(h))switch(d.localName){case"clrScheme":y.colorScheme=r(d,i);break;case"fontScheme":y.fontScheme=m(d,i)}return y},e.parseColorScheme=r,e.parseFontScheme=m,e.parseFontInfo=f},593:(v,e)=>{function u(r){return r&&typeof r=="object"&&!Array.isArray(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.asArray=e.formatCssRules=e.parseCssRules=e.mergeDeep=e.isString=e.isObject=e.blobToBase64=e.keyBy=e.resolvePath=e.splitPath=e.escapeClassName=void 0,e.escapeClassName=function(r){return r==null?void 0:r.replace(/[ .]+/g,"-").replace(/[&]+/g,"and").toLowerCase()},e.splitPath=function(r){let m=r.lastIndexOf("/")+1;return[m==0?"":r.substring(0,m),m==0?r:r.substring(m)]},e.resolvePath=function(r,m){try{const f="http://docx/";return new URL(r,f+m).toString().substring(f.length)}catch{return`${m}${r}`}},e.keyBy=function(r,m){return r.reduce((f,a)=>(f[m(a)]=a,f),{})},e.blobToBase64=function(r){return new Promise((m,f)=>{const a=new FileReader;a.onloadend=()=>m(a.result),a.onerror=()=>f(),a.readAsDataURL(r)})},e.isObject=u,e.isString=function(r){return typeof r=="string"||r instanceof String},e.mergeDeep=function r(m,...f){var a;if(!f.length)return m;const i=f.shift();if(u(m)&&u(i))for(const y in i)u(i[y])?r((a=m[y])!==null&&a!==void 0?a:m[y]={},i[y]):m[y]=i[y];return r(m,...f)},e.parseCssRules=function(r){const m={};for(const f of r.split(";")){const[a,i]=f.split(":");m[a]=i}return m},e.formatCssRules=function(r){return Object.entries(r).map((m,f)=>`${m}: ${f}`).join(";")},e.asArray=function(r){return Array.isArray(r)?r:[r]}},320:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseVmlElement=e.VmlElement=void 0;const r=u(149),m=u(120),f=u(472);class a extends m.OpenXmlElementBase{constructor(){super(...arguments),this.type=m.DomType.VmlElement,this.attrs={}}}function i(h){var d;return{stroke:f.default.attr(h,"color"),"stroke-width":(d=f.default.lengthAttr(h,"weight",r.LengthUsage.Emu))!==null&&d!==void 0?d:"1px"}}function y(h){return h.split(",")}e.VmlElement=a,e.parseVmlElement=function h(d,p){var g=new a;switch(d.localName){case"rect":g.tagName="rect",Object.assign(g.attrs,{width:"100%",height:"100%"});break;case"oval":g.tagName="ellipse",Object.assign(g.attrs,{cx:"50%",cy:"50%",rx:"50%",ry:"50%"});break;case"line":g.tagName="line";break;case"shape":g.tagName="g";break;case"textbox":g.tagName="foreignObject",Object.assign(g.attrs,{width:"100%",height:"100%"});break;default:return null}for(const w of f.default.attrs(d))switch(w.localName){case"style":g.cssStyleText=w.value;break;case"fillcolor":g.attrs.fill=w.value;break;case"from":const[P,n]=y(w.value);Object.assign(g.attrs,{x1:P,y1:n});break;case"to":const[s,t]=y(w.value);Object.assign(g.attrs,{x2:s,y2:t})}for(const w of f.default.elements(d))switch(w.localName){case"stroke":Object.assign(g.attrs,i(w));break;case"fill":Object.assign(g.attrs,{});break;case"imagedata":g.tagName="image",Object.assign(g.attrs,{width:"100%",height:"100%"}),g.imageHref={id:f.default.attr(w,"id"),title:f.default.attr(w,"title")};break;case"txbxContent":g.children.push(...p.parseBodyElements(w));break;default:const P=h(w,p);P&&g.children.push(P)}return g}},213:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.deobfuscate=e.WordDocument=void 0;const r=u(461),m=u(380),f=u(522),a=u(448),i=u(593),y=u(527),h=u(240),d=u(985),p=u(665),g=u(162),w=u(893),P=u(735),n=u(287),s=u(177),t=[{type:r.RelationshipTypes.OfficeDocument,target:"word/document.xml"},{type:r.RelationshipTypes.ExtendedProperties,target:"docProps/app.xml"},{type:r.RelationshipTypes.CoreProperties,target:"docProps/core.xml"},{type:r.RelationshipTypes.CustomProperties,target:"docProps/custom.xml"}];class l{constructor(){this.parts=[],this.partsMap={}}static async load(E,_,C){var o=new l;return o._options=C,o._parser=_,o._package=await f.OpenXmlPackage.load(E,C),o.rels=await o._package.loadRelationships(),await Promise.all(t.map(R=>{var V;const F=(V=o.rels.find(q=>q.type===R.type))!==null&&V!==void 0?V:R;return o.loadRelationshipPart(F.target,F.type)})),o}save(E="blob"){return this._package.save(E)}async loadRelationshipPart(E,_){var C;if(this.partsMap[E])return this.partsMap[E];if(!this._package.get(E))return null;let o=null;switch(_){case r.RelationshipTypes.OfficeDocument:this.documentPart=o=new a.DocumentPart(this._package,E,this._parser);break;case r.RelationshipTypes.FontTable:this.fontTablePart=o=new m.FontTablePart(this._package,E);break;case r.RelationshipTypes.Numbering:this.numberingPart=o=new y.NumberingPart(this._package,E,this._parser);break;case r.RelationshipTypes.Styles:this.stylesPart=o=new h.StylesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Theme:this.themePart=o=new w.ThemePart(this._package,E);break;case r.RelationshipTypes.Footnotes:this.footnotesPart=o=new P.FootnotesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Endnotes:this.endnotesPart=o=new P.EndnotesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Footer:o=new d.FooterPart(this._package,E,this._parser);break;case r.RelationshipTypes.Header:o=new d.HeaderPart(this._package,E,this._parser);break;case r.RelationshipTypes.CoreProperties:this.corePropsPart=o=new g.CorePropsPart(this._package,E);break;case r.RelationshipTypes.ExtendedProperties:this.extendedPropsPart=o=new p.ExtendedPropsPart(this._package,E);break;case r.RelationshipTypes.CustomProperties:o=new s.CustomPropsPart(this._package,E);break;case r.RelationshipTypes.Settings:this.settingsPart=o=new n.SettingsPart(this._package,E)}if(o==null)return Promise.resolve(null);if(this.partsMap[E]=o,this.parts.push(o),await o.load(),((C=o.rels)===null||C===void 0?void 0:C.length)>0){const[R]=(0,i.splitPath)(o.path);await Promise.all(o.rels.map(V=>this.loadRelationshipPart((0,i.resolvePath)(V.target,R),V.type)))}return o}async loadDocumentImage(E,_){const C=await this.loadResource(_??this.documentPart,E,"blob");return this.blobToURL(C)}async loadNumberingImage(E){const _=await this.loadResource(this.numberingPart,E,"blob");return this.blobToURL(_)}async loadFont(E,_){const C=await this.loadResource(this.fontTablePart,E,"uint8array");return C&&this.blobToURL(new Blob([b(C,_)]))}blobToURL(E){return E?this._options.useBase64URL?(0,i.blobToBase64)(E):URL.createObjectURL(E):null}findPartByRelId(E,_=null){var C,o=((C=_.rels)!==null&&C!==void 0?C:this.rels).find(V=>V.id==E);const R=_?(0,i.splitPath)(_.path)[0]:"";return o?this.partsMap[(0,i.resolvePath)(o.target,R)]:null}getPathById(E,_){const C=E.rels.find(R=>R.id==_),[o]=(0,i.splitPath)(E.path);return C?(0,i.resolvePath)(C.target,o):null}loadResource(E,_,C){const o=this.getPathById(E,_);return o?this._package.load(o,C):Promise.resolve(null)}}function b(k,E){const _=E.replace(/{|}|-/g,""),C=new Array(16);for(let o=0;o<16;o++)C[16-o-1]=parseInt(_.substr(2*o,2),16);for(let o=0;o<32;o++)k[o]=k[o]^C[o%16];return k}e.WordDocument=l,e.deobfuscate=b},583:v=>{v.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 100%27 preserveAspectRatio=%27none%27%3E%3Cpath d=%27m0,75 l5,0 l5,25 l10,-100%27 stroke=%27black%27 fill=%27none%27 vector-effect=%27non-scaling-stroke%27/%3E%3C/svg%3E"},626:v=>{v.exports=T}},B={};function S(v){var e=B[v];if(e!==void 0)return e.exports;var u=B[v]={id:v,exports:{}};return L[v](u,u.exports,S),u.exports}return S.m=L,S.n=v=>{var e=v&&v.__esModule?()=>v.default:()=>v;return S.d(e,{a:e}),e},S.d=(v,e)=>{for(var u in e)S.o(e,u)&&!S.o(v,u)&&Object.defineProperty(v,u,{enumerable:!0,get:e[u]})},S.o=(v,e)=>Object.prototype.hasOwnProperty.call(v,e),S.r=v=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(v,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(v,"__esModule",{value:!0})},S.b=document.baseURI||self.location.href,S(667)})())})(Ce);var Ne=Ce.exports;const Oe={ignoreLastRenderedPageBreak:!1};function Re(ne,ce={}){return typeof ne=="string"?ze(ne,ce):Promise.resolve(ne)}function ze(ne,ce){return fetch(ne,ce).then(T=>T.status!==200?Promise.reject(T):T)}async function Me(ne){let ce;return ne instanceof Blob?ce=ne:ne instanceof Response?ce=await ne.blob():ne instanceof ArrayBuffer&&(ce=new Blob([ne])),ce}function Ie(ne,ce,T={}){if(!ne)return ce.innerHTML="",Promise.resolve();let L;return ne instanceof Blob?L=ne:ne instanceof Response?L=ne.blob():ne instanceof ArrayBuffer&&(L=new Blob([ne])),Ne.renderAsync(L,ce,ce,{...Oe,...T})}const je={getData:Re,render:Ie,getBlob:Me};export{je as d}; diff --git a/examples/dist/assets/hack-67811302.js b/examples/dist/assets/hack-67811302.js new file mode 100644 index 0000000..6614528 --- /dev/null +++ b/examples/dist/assets/hack-67811302.js @@ -0,0 +1,96 @@ +import{y as Nt,z as Pi}from"./index-5d373288.js";import{c as Ia}from"./_commonjs-dynamic-modules-302442b1.js";import{g as Z1}from"./url-de9b02cf.js";class Li{constructor(b,e=""){typeof b=="string"?(this.el=document.createElement(b),this.el.className=e):this.el=b,this.data={}}data(b,e){return e!==void 0?(this.data[b]=e,this):this.data[b]}on(b,e){const[d,...m]=b.split(".");let f=d;return f==="mousewheel"&&/Firefox/i.test(window.navigator.userAgent)&&(f="DOMMouseScroll"),this.el.addEventListener(f,c=>{e(c);for(let u=0;u{this.css(c,`${b[c]}px`)}),this;const{offsetTop:e,offsetLeft:d,offsetHeight:m,offsetWidth:f}=this.el;return{top:e,left:d,height:m,width:f}}scroll(b){const{el:e}=this;return b!==void 0&&(b.left!==void 0&&(e.scrollLeft=b.left),b.top!==void 0&&(e.scrollTop=b.top)),{left:e.scrollLeft,top:e.scrollTop}}box(){return this.el.getBoundingClientRect()}parent(){return new Li(this.el.parentNode)}children(...b){return arguments.length===0?this.el.childNodes:(b.forEach(e=>this.child(e)),this)}removeChild(b){this.el.removeChild(b)}child(b){let e=b;return typeof b=="string"?e=document.createTextNode(b):b instanceof Li&&(e=b.el),this.el.appendChild(e),this}contains(b){return this.el.contains(b)}className(b){return b!==void 0?(this.el.className=b,this):this.el.className}addClass(b){return this.el.classList.add(b),this}hasClass(b){return this.el.classList.contains(b)}removeClass(b){return this.el.classList.remove(b),this}toggle(b="active"){return this.toggleClass(b)}toggleClass(b){return this.el.classList.toggle(b)}active(b=!0,e="active"){return b?this.addClass(e):this.removeClass(e),this}checked(b=!0){return this.active(b,"checked"),this}disabled(b=!0){return b?this.addClass("disabled"):this.removeClass("disabled"),this}attr(b,e){if(e!==void 0)this.el.setAttribute(b,e);else{if(typeof b=="string")return this.el.getAttribute(b);Object.keys(b).forEach(d=>{this.el.setAttribute(d,b[d])})}return this}removeAttr(b){return this.el.removeAttribute(b),this}html(b){return b!==void 0?(this.el.innerHTML=b,this):this.el.innerHTML}val(b){return b!==void 0?(this.el.value=b,this):this.el.value}focus(){this.el.focus()}cssRemoveKeys(...b){return b.forEach(e=>this.el.style.removeProperty(e)),this}css(b,e){return e===void 0&&typeof b!="string"?(Object.keys(b).forEach(d=>{this.el.style[d]=b[d]}),this):e!==void 0?(this.el.style[b]=e,this):this.el.style[b]}computedStyle(){return window.getComputedStyle(this.el,null)}show(){return this.css("display","block"),this}hide(){return this.css("display","none"),this}}const $e=(N,b="")=>new Li(N,b),wi=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];function rh(N){let b="",e=N;for(;e>=wi.length;)e/=wi.length,e-=1,b+=wi[parseInt(e,10)%wi.length];const d=N%wi.length;return b+=wi[d],b}function J1(N){let b=0;for(let e=0;e="0"&&N.charAt(d)<="9"?e+=N.charAt(d):b+=N.charAt(d);return[J1(b),parseInt(e,10)-1]}function ai(N,b){return`${rh(N)}${b+1}`}function $s(N,b,e,d=()=>!0){if(b===0&&e===0)return N;const[m,f]=xi(N);return d(m,f)?ai(m+b,f+e):N}class _r{constructor(b,e,d,m,f=0,c=0){this.sri=b,this.sci=e,this.eri=d,this.eci=m,this.w=f,this.h=c}set(b,e,d,m){this.sri=b,this.sci=e,this.eri=d,this.eci=m}multiple(){return this.eri-this.sri>0||this.eci-this.sci>0}includes(...b){let[e,d]=[0,0];b.length===1?[d,e]=xi(b[0]):b.length===2&&([e,d]=b);const{sri:m,sci:f,eri:c,eci:u}=this;return m<=e&&e<=c&&f<=d&&d<=u}each(b,e=()=>!0){const{sri:d,sci:m,eri:f,eci:c}=this;for(let u=d;u<=f;u+=1)if(e(u))for(let s=m;s<=c;s+=1)b(u,s)}contains(b){return this.sri<=b.sri&&this.sci<=b.sci&&this.eri>=b.eri&&this.eci>=b.eci}within(b){return this.sri>=b.sri&&this.sci>=b.sci&&this.eri<=b.eri&&this.eci<=b.eci}disjoint(b){return this.sri>b.eri||this.sci>b.eci||b.sri>this.eri||b.sci>this.eci}intersects(b){return this.sri<=b.eri&&this.sci<=b.eci&&b.sri<=this.eri&&b.sci<=this.eci}union(b){const{sri:e,sci:d,eri:m,eci:f}=this;return new _r(b.srim?b.eri:m,b.eci>f?b.eci:f)}difference(b){const e=[],d=(i,o,l,a)=>{e.push(new _r(i,o,l,a))},{sri:m,sci:f,eri:c,eci:u}=this,s=b.sri-m,t=b.sci-f,n=c-b.eri,r=u-b.eci;return s>0?(d(m,f,b.sri-1,u),n>0?(d(b.eri+1,f,c,u),t>0&&d(b.sri,f,b.eri,b.sci-1),r>0&&d(b.sri,b.eci+1,b.eri,u)):(t>0&&d(b.sri,f,c,b.sci-1),r>0&&d(b.sri,b.eci+1,c,u))):n>0&&(d(b.eri+1,f,c,u),t>0&&d(m,f,b.eri,b.sci-1),r>0&&d(m,b.eci+1,b.eri,u)),t>0?(d(m,f,c,b.sci-1),r>0?(d(m,b.eri+1,c,u),s>0&&d(m,b.sci,b.sri-1,b.eci),n>0&&d(b.sri+1,b.sci,c,b.eci)):(s>0&&d(m,b.sci,b.sri-1,u),n>0&&d(b.sri+1,b.sci,c,u))):r>0&&(d(c,b.eci+1,c,u),s>0&&d(m,f,b.sri-1,b.eci),n>0&&d(b.eri+1,f,c,b.eci)),e}size(){return[this.eri-this.sri+1,this.eci-this.sci+1]}toString(){const{sri:b,sci:e,eri:d,eci:m}=this;let f=ai(e,b);return this.multiple()&&(f=`${f}:${ai(m,d)}`),f}clone(){const{sri:b,sci:e,eri:d,eci:m,w:f,h:c}=this;return new _r(b,e,d,m,f,c)}equals(b){return this.eri===b.eri&&this.eci===b.eci&&this.sri===b.sri&&this.sci===b.sci}static valueOf(b){const e=b.split(":"),[d,m]=xi(e[0]);let[f,c]=[m,d];return e.length>1&&([c,f]=xi(e[1])),new _r(m,d,f,c)}}let Q1=class{constructor(){this.range=new _r(0,0,0,0),this.ri=0,this.ci=0}multiple(){return this.range.multiple()}setIndexes(b,e){this.ri=b,this.ci=e}size(){return this.range.size()}};class q1{constructor(){this.x=0,this.y=0,this.ri=0,this.ci=0}}class eg{constructor(){this.undoItems=[],this.redoItems=[]}add(b){this.undoItems.push(JSON.stringify(b)),this.redoItems=[]}canUndo(){return this.undoItems.length>0}canRedo(){return this.redoItems.length>0}undo(b,e){const{undoItems:d,redoItems:m}=this;this.canUndo()&&(m.push(JSON.stringify(b)),e(JSON.parse(d.pop())))}redo(b,e){const{undoItems:d,redoItems:m}=this;this.canRedo()&&(d.push(JSON.stringify(b)),e(JSON.parse(m.pop())))}}class tg{constructor(){this.range=null,this.state="clear"}copy(b){return this.range=b,this.state="copy",this}cut(b){return this.range=b,this.state="cut",this}isCopy(){return this.state==="copy"}isCut(){return this.state==="cut"}isClear(){return this.state==="clear"}clear(){this.range=null,this.state="clear"}}class Sc{constructor(b,e,d){this.ci=b,this.operator=e,this.value=d}set(b,e){this.operator=b,this.value=e}includes(b){const{operator:e,value:d}=this;return e==="all"?!0:e==="in"?d.includes(b):!1}vlength(){const{operator:b,value:e}=this;return b==="in"?e.length:0}getData(){const{ci:b,operator:e,value:d}=this;return{ci:b,operator:e,value:d}}}class Ec{constructor(b,e){this.ci=b,this.order=e}asc(){return this.order==="asc"}desc(){return this.order==="desc"}}class rg{constructor(){this.ref=null,this.filters=[],this.sort=null}setData({ref:b,filters:e,sort:d}){b!=null&&(this.ref=b,this.filters=e.map(m=>new Sc(m.ci,m.operator,m.value)),d&&(this.sort=new Ec(d.ci,d.order)))}getData(){if(this.active()){const{ref:b,filters:e,sort:d}=this;return{ref:b,filters:e.map(m=>m.getData()),sort:d}}return{}}addFilter(b,e,d){const m=this.getFilter(b);m==null?this.filters.push(new Sc(b,e,d)):m.set(e,d)}setSort(b,e){this.sort=e?new Ec(b,e):null}includes(b,e){return this.active()?this.hrange().includes(b,e):!1}getSort(b){const{sort:e}=this;return e&&e.ci===b?e:null}getFilter(b){const{filters:e}=this;for(let d=0;d!e.within(b))}getFirstIncludes(b,e){for(let d=0;de.intersects(b)))}intersects(b){for(let e=0;e{d.intersects(e)&&(e=d.union(e))}),e}add(b){this.deleteWithin(b),this._.push(b)}shift(b,e,d,m){this._.forEach(f=>{const{sri:c,sci:u,eri:s,eci:t}=f,n=f;b==="row"?c>=e?(n.sri+=d,n.eri+=d):c=e?(n.sci+=d,n.eci+=d):u{const f=m;f.within(b)&&(f.eri+=e,f.sri+=e,f.sci+=d,f.eci+=d)})}setData(b){return this._=b.map(e=>_r.valueOf(e)),this}getData(){return this._.map(b=>b.toString())}}function ng(N){return JSON.parse(JSON.stringify(N))}const nh=(N={},...b)=>(b.forEach(e=>{Object.keys(e).forEach(d=>{const m=e[d];typeof m=="string"||typeof m=="number"||typeof m=="boolean"?N[d]=m:typeof m!="function"&&!Array.isArray(m)&&m instanceof Object?(N[d]=N[d]||{},nh(N[d],m)):N[d]=m})}),N);function lf(N,b){const e=Object.keys(N);if(e.length!==Object.keys(b).length)return!1;for(let d=0;de)=>{let e=0,d=0;return Object.keys(N).forEach(m=>{e+=b(N[m],m),d+=1}),[e,d]};function sg(N,b){const e=N[`${b}`];return delete N[`${b}`],e}function ag(N,b,e,d,m,f){let c=e,u=d,s=N;for(;sm);s+=1)u=f(s),c+=u;return[s,c-u,u]}function og(N,b,e){let d=0;for(let m=N;m5?u.toFixed(2):u;return u.toFixed(Math.max(d,m))}const qr={cloneDeep:ng,merge:(...N)=>nh({},...N),equals:lf,arrayEquals:lg,sum:ig,rangeEach:fg,rangeSum:og,rangeReduceIf:ag,deleteProperty:sg,numberCalc:Ni};class cg{constructor({len:b,height:e}){this._={},this.len=b,this.height=e}getHeight(b){if(this.isHide(b))return 0;const e=this.get(b);return e&&e.height?e.height:this.height}setHeight(b,e){const d=this.getOrNew(b);d.height=e}unhide(b){let e=b;for(;e>0&&(e-=1,this.isHide(e));)this.setHide(e,!1)}isHide(b){const e=this.get(b);return e&&e.hide}setHide(b,e){const d=this.getOrNew(b);e===!0?d.hide=!0:delete d.hide}setStyle(b,e){const d=this.getOrNew(b);d.style=e}sumHeight(b,e,d){return qr.rangeSum(b,e,m=>d&&d.has(m)?0:this.getHeight(m))}totalHeight(){return this.sumHeight(0,this.len)}get(b){return this._[b]}getOrNew(b){return this._[b]=this._[b]||{cells:{}},this._[b]}getCell(b,e){const d=this.get(b);return d!==void 0&&d.cells!==void 0&&d.cells[e]!==void 0?d.cells[e]:null}getCellMerge(b,e){const d=this.getCell(b,e);return d&&d.merge?d.merge:[0,0]}getCellOrNew(b,e){const d=this.getOrNew(b);return d.cells[e]=d.cells[e]||{},d.cells[e]}setCell(b,e,d,m="all"){const f=this.getOrNew(b);m==="all"?f.cells[e]=d:m==="text"?(f.cells[e]=f.cells[e]||{},f.cells[e].text=d.text):m==="format"&&(f.cells[e]=f.cells[e]||{},f.cells[e].style=d.style,d.merge&&(f.cells[e].merge=d.merge))}setCellText(b,e,d){const m=this.getCellOrNew(b,e);m.editable!==!1&&(m.text=d)}copyPaste(b,e,d,m=!1,f=()=>{}){const{sri:c,sci:u,eri:s,eci:t}=b,n=e.sri,r=e.sci,i=e.eri,o=e.eci,[l,a]=b.size(),[g,v]=e.size();let h=!0,w=0;(i0){const{text:X}=j;let G=I-r+(E-n)+2;if(h||(G-=w+1),X[0]==="=")j.text=X.replace(/[a-zA-Z]{1,3}\d+/g,V=>{let[J,H]=[0,0];return c===n?J=G-1:H=G-1,/^\d+$/.test(V)?V:$s(V,J,H)});else if(l<=1&&a>1&&(n>s||i1&&(r>t||o{this.eachCells(m,f=>{let c=parseInt(m,10),u=parseInt(f,10);b.includes(m,f)&&(c=e.sri+(c-b.sri),u=e.sci+(u-b.sci)),d[c]=d[c]||{cells:{}},d[c].cells[u]=this._[m].cells[f]})}),this._=d}paste(b,e){if(b.length<=0)return;const{sri:d,sci:m}=e;b.forEach((f,c)=>{const u=d+c;f.forEach((s,t)=>{const n=m+t;this.setCellText(u,n,s)})})}insert(b,e=1){const d={};this.each((m,f)=>{let c=parseInt(m,10);c>=b&&(c+=e,this.eachCells(m,(u,s)=>{s.text&&s.text[0]==="="&&(s.text=s.text.replace(/[a-zA-Z]{1,3}\d+/g,t=>$s(t,0,e,(n,r)=>r>=b)))})),d[c]=f}),this._=d,this.len+=e}delete(b,e){const d=e-b+1,m={};this.each((f,c)=>{const u=parseInt(f,10);ue&&(m[u-d]=c,this.eachCells(f,(s,t)=>{t.text&&t.text[0]==="="&&(t.text=t.text.replace(/[a-zA-Z]{1,3}\d+/g,n=>$s(n,0,-d,(r,i)=>i>e)))}))}),this._=m,this.len-=d}insertColumn(b,e=1){this.each((d,m)=>{const f={};this.eachCells(d,(c,u)=>{let s=parseInt(c,10);s>=b&&(s+=e,u.text&&u.text[0]==="="&&(u.text=u.text.replace(/[a-zA-Z]{1,3}\d+/g,t=>$s(t,e,0,n=>n>=b)))),f[s]=u}),m.cells=f})}deleteColumn(b,e){const d=e-b+1;this.each((m,f)=>{const c={};this.eachCells(m,(u,s)=>{const t=parseInt(u,10);te&&(c[t-d]=s,s.text&&s.text[0]==="="&&(s.text=s.text.replace(/[a-zA-Z]{1,3}\d+/g,n=>$s(n,-d,0,r=>r>e))))}),f.cells=c})}deleteCells(b,e="all"){b.each((d,m)=>{this.deleteCell(d,m,e)})}deleteCell(b,e,d="all"){const m=this.get(b);if(m!==null){const f=this.getCell(b,e);f!==null&&f.editable!==!1&&(d==="all"?delete m.cells[e]:d==="text"?(f.text&&delete f.text,f.value&&delete f.value):d==="format"?(f.style!==void 0&&delete f.style,f.merge&&delete f.merge):d==="merge"&&f.merge&&delete f.merge)}}maxCell(){const b=Object.keys(this._),e=b[b.length-1],d=this._[e];if(d){const{cells:m}=d,f=Object.keys(m),c=f[f.length-1];return[parseInt(e,10),parseInt(c,10)]}return[0,0]}each(b){Object.entries(this._).forEach(([e,d])=>{b(e,d)})}eachCells(b,e){this._[b]&&this._[b].cells&&Object.entries(this._[b].cells).forEach(([d,m])=>{e(d,m)})}setData(b){b.len&&(this.len=b.len,delete b.len),this._=b}getData(){const{len:b}=this;return Object.assign({len:b},this._)}}class hg{constructor({len:b,width:e,indexWidth:d,minWidth:m}){this._={},this.len=b,this.width=e,this.indexWidth=d,this.minWidth=m}setData(b){b.len&&(this.len=b.len,delete b.len),this._=b}getData(){const{len:b}=this;return Object.assign({len:b},this._)}getWidth(b){if(this.isHide(b))return 0;const e=this._[b];return e&&e.width?e.width:this.width}getOrNew(b){return this._[b]=this._[b]||{},this._[b]}setWidth(b,e){const d=this.getOrNew(b);d.width=e}unhide(b){let e=b;for(;e>0&&(e-=1,this.isHide(e));)this.setHide(e,!1)}isHide(b){const e=this._[b];return e&&e.hide}setHide(b,e){const d=this.getOrNew(b);e===!0?d.hide=!0:delete d.hide}setStyle(b,e){const d=this.getOrNew(b);d.style=e}sumWidth(b,e){return qr.rangeSum(b,e,d=>this.getWidth(d))}totalWidth(){return this.sumWidth(0,this.len)}}const ug={toolbar:{undo:"Undo",redo:"Redo",print:"Print",paintformat:"Paint format",clearformat:"Clear format",format:"Format",fontName:"Font",fontSize:"Font size",fontBold:"Font bold",fontItalic:"Font italic",underline:"Underline",strike:"Strike",color:"Text color",bgcolor:"Fill color",border:"Borders",merge:"Merge cells",align:"Horizontal align",valign:"Vertical align",textwrap:"Text wrapping",freeze:"Freeze cell",autofilter:"Filter",formula:"Functions",more:"More"},contextmenu:{copy:"Copy",cut:"Cut",paste:"Paste",pasteValue:"Paste values only",pasteFormat:"Paste format only",hide:"Hide",insertRow:"Insert row",insertColumn:"Insert column",deleteSheet:"Delete",deleteRow:"Delete row",deleteColumn:"Delete column",deleteCell:"Delete cell",deleteCellText:"Delete cell text",validation:"Data validations",cellprintable:"Enable export",cellnonprintable:"Disable export",celleditable:"Enable editing",cellnoneditable:"Disable editing"},print:{size:"Paper size",orientation:"Page orientation",orientations:["Landscape","Portrait"]},format:{normal:"Normal",text:"Plain Text",number:"Number",percent:"Percent",rmb:"RMB",usd:"USD",eur:"EUR",date:"Date",time:"Time",datetime:"Date time",duration:"Duration"},formula:{sum:"Sum",average:"Average",max:"Max",min:"Min",_if:"IF",and:"AND",or:"OR",concat:"Concat"},validation:{required:"it must be required",notMatch:"it not match its validation rule",between:"it is between {} and {}",notBetween:"it is not between {} and {}",notIn:"it is not in list",equal:"it equal to {}",notEqual:"it not equal to {}",lessThan:"it less than {}",lessThanEqual:"it less than or equal to {}",greaterThan:"it greater than {}",greaterThanEqual:"it greater than or equal to {}"},error:{pasteForMergedCell:"Unable to do this for merged cells"},calendar:{weeks:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"]},button:{next:"Next",cancel:"Cancel",remove:"Remove",save:"Save",ok:"OK"},sort:{desc:"Sort Z -> A",asc:"Sort A -> Z"},filter:{empty:"empty"},dataValidation:{mode:"Mode",range:"Cell Range",criteria:"Criteria",modeType:{cell:"Cell",column:"Colun",row:"Row"},type:{list:"List",number:"Number",date:"Date",phone:"Phone",email:"Email"},operator:{be:"between",nbe:"not betwwen",lt:"less than",lte:"less than or equal to",gt:"greater than",gte:"greater than or equal to",eq:"equal to",neq:"not equal to"}}};let cf=["en"];const ih={en:ug};function Cc(N,b){if(b)for(const e of cf){if(!b[e])break;let d=b[e];const m=N.match(/(?:\\.|[^.])+/g);for(let f=0;fCr(N)}function sh(N,b,e=!1){e?cf=[N]:cf.unshift(N),b&&(ih[N]=b)}const Tc={phone:/^[1-9]\d{10}$/,email:/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/};function Pn(N,b,...e){let d="";return N||(d=Cr(`validation.${b}`,...e)),[N,d]}class ah{constructor(b,e,d,m){this.required=e,this.value=d,this.type=b,this.operator=m,this.message=""}parseValue(b){const{type:e}=this;return e==="date"?new Date(b):e==="number"?Number(b):b}equals(b){let e=this.type===b.type&&this.required===b.required&&this.operator===b.operator;return e&&(Array.isArray(this.value)?e=qr.arrayEquals(this.value,b.value):e=this.value===b.value),e}values(){return this.value.split(",")}validate(b){const{required:e,operator:d,value:m,type:f}=this;if(e&&/^\s*$/.test(b))return Pn(!1,"required");if(/^\s*$/.test(b))return[!0];if(Tc[f]&&!Tc[f].test(b))return Pn(!1,"notMatch");if(f==="list")return Pn(this.values().includes(b),"notIn");if(d){const c=this.parseValue(b);if(d==="be"){const[u,s]=m;return Pn(c>=this.parseValue(u)&&c<=this.parseValue(s),"between",u,s)}if(d==="nbe"){const[u,s]=m;return Pn(cthis.parseValue(s),"notBetween",u,s)}if(d==="eq")return Pn(c===this.parseValue(m),"equal",m);if(d==="neq")return Pn(c!==this.parseValue(m),"notEqual",m);if(d==="lt")return Pn(cthis.parseValue(m),"greaterThan",m);if(d==="gte")return Pn(c>=this.parseValue(m),"greaterThanEqual",m)}return[!0]}}class Ua{constructor(b,e,d){this.refs=e,this.mode=b,this.validator=d}includes(b,e){const{refs:d}=this;for(let m=0;m{const m=_r.valueOf(d);m.intersects(b)?m.difference(b).forEach(c=>e.push(c.toString())):e.push(d)}),this.refs=e}getData(){const{refs:b,mode:e,validator:d}=this,{type:m,required:f,operator:c,value:u}=d;return{refs:b,mode:e,type:m,required:f,operator:c,value:u}}static valueOf({refs:b,mode:e,type:d,required:m,operator:f,value:c}){return new Ua(e,b,new ah(d,m,c,f))}}class dg{constructor(){this._=[],this.errors=new Map}getError(b,e){return this.errors.get(`${b}_${e}`)}validate(b,e,d){const m=this.get(b,e),f=`${b}_${e}`,{errors:c}=this;if(m!==null){const[u,s]=m.validator.validate(d);u?c.delete(f):c.set(f,s)}else c.delete(f);return!0}add(b,e,{type:d,required:m,value:f,operator:c}){const u=new ah(d,m,f,c),s=this.getByValidator(u);s!==null?s.addRef(e):this._.push(new Ua(b,[e],u))}getByValidator(b){for(let e=0;e{e.remove(b)})}each(b){this._.forEach(e=>b(e))}getData(){return this._.filter(b=>b.refs.length>0).map(b=>b.getData())}setData(b){this._=b.map(e=>Ua.valueOf(e))}}const pg={mode:"edit",view:{height:()=>document.documentElement.clientHeight,width:()=>document.documentElement.clientWidth},showGrid:!0,showToolbar:!0,showContextmenu:!0,showBottomBar:!0,row:{len:100,height:25},col:{len:26,width:100,indexWidth:60,minWidth:60},style:{bgcolor:"#ffffff",align:"left",valign:"middle",textwrap:!1,strike:!1,underline:!1,color:"#0a0a0a",font:{name:"Arial",size:10,bold:!1,italic:!1},format:"normal"}},mg=41,gg=41,Ac=(N,b)=>Object.prototype.hasOwnProperty.call(N,b);function kc(N,b,e=()=>{}){const{merges:d}=this,m=b.clone(),[f,c]=N.size(),[u,s]=b.size();return f>u&&(m.eri=b.sri+f-1),c>s&&(m.eci=b.sci+c-1),d.intersects(m)?(e(Cr("error.pasteForMergedCell")),!1):!0}function Mc(N,b,e,d=!1){const{rows:m,merges:f}=this;(e==="all"||e==="format")&&(m.deleteCells(b,e),f.deleteWithin(b)),m.copyPaste(N,b,e,d,(c,u,s)=>{if(s&&s.merge){const[t,n]=s.merge;if(t<=0&&n<=0)return;f.add(new _r(c,u,c+t,u+n))}})}function bg(N,b){const{clipboard:e,rows:d,merges:m}=this;d.cutPaste(N,b),m.move(N,b.sri-N.sri,b.sci-N.sci),e.clear()}function hs(N,b,e){const{styles:d,rows:m}=this,f=m.getCellOrNew(N,b);let c={};f.style!==void 0&&(c=qr.cloneDeep(d[f.style])),c=qr.merge(c,{border:e}),f.style=this.addStyle(c)}function vg({mode:N,style:b,color:e}){const{styles:d,selector:m,rows:f}=this,{sri:c,sci:u,eri:s,eci:t}=m.range,n=!this.isSignleSelected();if(!(!n&&(N==="inside"||N==="horizontal"||N==="vertical"))){if(N==="outside"&&!n)hs.call(this,c,u,{top:[b,e],bottom:[b,e],left:[b,e],right:[b,e]});else if(N==="none")m.range.each((r,i)=>{const o=f.getCell(r,i);if(o&&o.style!==void 0){const l=qr.cloneDeep(d[o.style]);delete l.border,o.style=this.addStyle(l)}});else if(N==="all"||N==="inside"||N==="outside"||N==="horizontal"||N==="vertical"){const r=[];for(let i=c;i<=s;i+=1)for(let o=u;o<=t;o+=1){const l=[];for(let S=0;Sr.splice(S,1)),o>t)break;const a=f.getCell(i,o);let[g,v]=[0,0];a&&a.merge&&([g,v]=a.merge,r.push([i,o,g,v]));const h=g>0&&i+g===s,w=v>0&&o+v===t;let y={};N==="all"?y={bottom:[b,e],top:[b,e],left:[b,e],right:[b,e]}:N==="inside"?(!w&&o0&&hs.call(this,i,o,y),o+=v}}else if(N==="top"||N==="bottom")for(let r=u;r<=t;r+=1)N==="top"&&(hs.call(this,c,r,{top:[b,e]}),r+=f.getCellMerge(c,r)[1]),N==="bottom"&&(hs.call(this,s,r,{bottom:[b,e]}),r+=f.getCellMerge(s,r)[1]);else if(N==="left"||N==="right")for(let r=c;r<=s;r+=1)N==="left"&&(hs.call(this,r,u,{left:[b,e]}),r+=f.getCellMerge(r,u)[0]),N==="right"&&(hs.call(this,r,t,{right:[b,e]}),r+=f.getCellMerge(r,t)[0])}}function yg(N,b){const{rows:e}=this,d=this.freezeTotalHeight();let m=e.height;d+e.heightN);c+=1)f.has(c)||(s=e.getHeight(c),u+=s);return u-=s,u<=0?{ri:-1,top:0,height:s}:{ri:c-1,top:u,height:s}}function wg(N,b){const{cols:e}=this,d=this.freezeTotalWidth();let m=e.indexWidth;d+e.indexWidthe.getWidth(s));return c<=0?{ci:-1,left:0,width:e.indexWidth}:{ci:f-1,left:c,width:u}}class xg{constructor(b,e){this.settings=qr.merge(pg,e||{}),this.name=b||"sheet",this.freeze=[0,0],this.styles=[],this.merges=new vf,this.rows=new cg(this.settings.row),this.cols=new hg(this.settings.col),this.validations=new dg,this.hyperlinks={},this.comments={},this.selector=new Q1,this.scroll=new q1,this.history=new eg,this.clipboard=new tg,this.autoFilter=new rg,this.change=()=>{},this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map}addValidation(b,e,d){this.changeData(()=>{this.validations.add(b,e,d)})}removeValidation(){const{range:b}=this.selector;this.changeData(()=>{this.validations.remove(b)})}getSelectedValidator(){const{ri:b,ci:e}=this.selector,d=this.validations.get(b,e);return d?d.validator:null}getSelectedValidation(){const{ri:b,ci:e,range:d}=this.selector,m=this.validations.get(b,e),f={ref:d.toString()};return m!==null&&(f.mode=m.mode,f.validator=m.validator),f}canUndo(){return this.history.canUndo()}canRedo(){return this.history.canRedo()}undo(){this.history.undo(this.getData(),b=>{this.setData(b)})}redo(){this.history.redo(this.getData(),b=>{this.setData(b)})}copy(){this.clipboard.copy(this.selector.range)}copyToSystemClipboard(){if(navigator.clipboard===void 0)return;let b="";const e=this.rows.getData();for(let d=this.selector.range.sri;d<=this.selector.range.eri;d+=1){if(Ac(e,d)){for(let m=this.selector.range.sci;m<=this.selector.range.eci;m+=1)if(m>this.selector.range.sci&&(b+=" "),Ac(e[d].cells,m)){const f=String(e[d].cells[m].text);f.indexOf(` +`)===-1&&f.indexOf(" ")===-1&&f.indexOf('"')===-1?b+=f:b+=`"${f}"`}}else for(let m=this.selector.range.sci;m<=this.selector.range.eci;m+=1)b+=" ";b+=` +`}navigator.clipboard.writeText(b).then(()=>{},d=>{console.log("text copy to the system clipboard error ",b,d)})}cut(){this.clipboard.cut(this.selector.range)}paste(b="all",e=()=>{}){const{clipboard:d,selector:m}=this;return d.isClear()||!kc.call(this,d.range,m.range,e)?!1:(this.changeData(()=>{d.isCopy()?Mc.call(this,d.range,m.range,b):d.isCut()&&bg.call(this,d.range,m.range)}),!0)}pasteFromText(b){const e=b.split(`\r +`).map(f=>f.replace(/"/g,"").split(" "));e.length>0&&(e.length-=1);const{rows:d,selector:m}=this;this.changeData(()=>{d.paste(e,m.range)})}autofill(b,e,d=()=>{}){const m=this.selector.range;return kc.call(this,m,b,d)?(this.changeData(()=>{Mc.call(this,m,b,e,!0)}),!0):!1}clearClipboard(){this.clipboard.clear()}calSelectedRangeByEnd(b,e){const{selector:d,rows:m,cols:f,merges:c}=this;let{sri:u,sci:s,eri:t,eci:n}=d.range;const r=d.ri,i=d.ci;let[o,l]=[b,e];return b<0&&(o=m.len-1),e<0&&(l=f.len-1),o>r?[u,t]=[r,o]:[u,t]=[o,r],l>i?[s,n]=[i,l]:[s,n]=[l,i],d.range=c.union(new _r(u,s,t,n)),d.range=c.union(d.range),d.range}calSelectedRangeByStart(b,e){const{selector:d,rows:m,cols:f,merges:c}=this;let u=c.getFirstIncludes(b,e);return u===null&&(u=new _r(b,e,b,e),b===-1&&(u.sri=0,u.eri=m.len-1),e===-1&&(u.sci=0,u.eci=f.len-1)),d.range=u,u}setSelectedCellAttr(b,e){this.changeData(()=>{const{selector:d,styles:m,rows:f}=this;if(b==="merge")e?this.merge():this.unmerge();else if(b==="border")vg.call(this,e);else if(b==="formula"){const{ri:c,ci:u,range:s}=d;if(d.multiple()){const[t,n]=d.size(),{sri:r,sci:i,eri:o,eci:l}=s;if(t>1)for(let a=i;a<=l;a+=1){const g=f.getCellOrNew(o+1,a);g.text=`=${e}(${ai(a,r)}:${ai(a,o)})`}else if(n>1){const a=f.getCellOrNew(c,l+1);a.text=`=${e}(${ai(i,c)}:${ai(l,c)})`}}else{const t=f.getCellOrNew(c,u);t.text=`=${e}()`}}else d.range.each((c,u)=>{const s=f.getCellOrNew(c,u);let t={};if(s.style!==void 0&&(t=qr.cloneDeep(m[s.style])),b==="format")t.format=e,s.style=this.addStyle(t);else if(b==="font-bold"||b==="font-italic"||b==="font-name"||b==="font-size"){const n={};n[b.split("-")[1]]=e,t.font=Object.assign(t.font||{},n),s.style=this.addStyle(t)}else b==="strike"||b==="textwrap"||b==="underline"||b==="align"||b==="valign"||b==="color"||b==="bgcolor"?(t[b]=e,s.style=this.addStyle(t)):s[b]=e})})}setSelectedCellText(b,e="input"){const{autoFilter:d,selector:m,rows:f}=this,{ri:c,ci:u}=m;let s=c;this.unsortedRowMap.has(c)&&(s=this.unsortedRowMap.get(c));const t=f.getCell(s,u),n=t?t.text:"";if(this.setCellText(s,u,b,e),d.active()){const r=d.getFilter(u);if(r){const i=r.value.findIndex(o=>o===n);i>=0&&r.value.splice(i,1,b)}}}getSelectedCell(){const{ri:b,ci:e}=this.selector;let d=b;return this.unsortedRowMap.has(b)&&(d=this.unsortedRowMap.get(b)),this.rows.getCell(d,e)}xyInSelectedRect(b,e){const{left:d,top:m,width:f,height:c}=this.getSelectedRect(),u=b-this.cols.indexWidth,s=e-this.rows.height;return u>d&&um&&s0&&v>n&&(l=n),g>0&&g>r&&(a=r),{l:n,t:r,left:l,top:a,height:i,width:o,scroll:e}}getCellRectByXY(b,e){const{scroll:d,merges:m,rows:f,cols:c}=this;let{ri:u,top:s,height:t}=yg.call(this,e,d.y),{ci:n,left:r,width:i}=wg.call(this,b,d.x);if(n===-1&&(i=c.totalWidth()),u===-1&&(t=f.totalHeight()),u>=0||n>=0){const o=m.getFirstIncludes(u,n);o&&(u=o.sri,n=o.sci,{left:r,top:s,width:i,height:t}=this.cellRect(u,n))}return{ri:u,ci:n,left:r,top:s,width:i,height:t}}isSignleSelected(){const{sri:b,sci:e,eri:d,eci:m}=this.selector.range,f=this.getCell(b,e);if(f&&f.merge){const[c,u]=f.merge;if(b+c===d&&e+u===m)return!0}return!this.selector.multiple()}canUnmerge(){const{sri:b,sci:e,eri:d,eci:m}=this.selector.range,f=this.getCell(b,e);if(f&&f.merge){const[c,u]=f.merge;if(b+c===d&&e+u===m)return!0}return!1}merge(){const{selector:b,rows:e}=this;if(this.isSignleSelected())return;const[d,m]=b.size();if(d>1||m>1){const{sri:f,sci:c}=b.range;this.changeData(()=>{const u=e.getCellOrNew(f,c);u.merge=[d-1,m-1],this.merges.add(b.range),this.rows.deleteCells(b.range),this.rows.setCell(f,c,u)})}}unmerge(){const{selector:b}=this;if(!this.isSignleSelected())return;const{sri:e,sci:d}=b.range;this.changeData(()=>{this.rows.deleteCell(e,d,"merge"),this.merges.deleteWithin(b.range)})}canAutofilter(){return!this.autoFilter.active()}autofilter(){const{autoFilter:b,selector:e}=this;this.changeData(()=>{b.active()?(b.clear(),this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map):b.ref=e.range.toString()})}setAutoFilter(b,e,d,m){const{autoFilter:f}=this;f.addFilter(b,d,m),f.setSort(b,e),this.resetAutoFilter()}resetAutoFilter(){const{autoFilter:b,rows:e}=this;if(!b.active())return;const{sort:d}=b,{rset:m,fset:f}=b.filteredRows((s,t)=>e.getCell(s,t)),c=Array.from(f),u=Array.from(f);d&&c.sort((s,t)=>d.order==="asc"?s-t:d.order==="desc"?t-s:0),this.exceptRowSet=m,this.sortedRowMap=new Map,this.unsortedRowMap=new Map,c.forEach((s,t)=>{this.sortedRowMap.set(u[t],s),this.unsortedRowMap.set(s,u[t])})}deleteCell(b="all"){const{selector:e}=this;this.changeData(()=>{this.rows.deleteCells(e.range,b),(b==="all"||b==="format")&&this.merges.deleteWithin(e.range)})}insert(b,e=1){this.changeData(()=>{const{sri:d,sci:m}=this.selector.range,{rows:f,merges:c,cols:u}=this;let s=d;b==="row"?f.insert(d,e):b==="column"&&(f.insertColumn(m,e),s=m,u.len+=1),c.shift(b,s,e,(t,n,r,i)=>{const o=f.getCell(t,n);o.merge[0]+=r,o.merge[1]+=i})})}delete(b){this.changeData(()=>{const{rows:e,merges:d,selector:m,cols:f}=this,{range:c}=m,{sri:u,sci:s,eri:t,eci:n}=m.range,[r,i]=m.range.size();let o=u,l=r;b==="row"?e.delete(u,t):b==="column"&&(e.deleteColumn(s,n),o=c.sci,l=i,f.len-=1),d.shift(b,o,-l,(a,g,v,h)=>{const w=e.getCell(a,g);w.merge[0]+=v,w.merge[1]+=h,w.merge[0]===0&&w.merge[1]===0&&delete w.merge})})}scrollx(b,e){const{scroll:d,freeze:m,cols:f}=this,[,c]=m,[u,s,t]=qr.rangeReduceIf(c,f.len,0,0,b,r=>f.getWidth(r));let n=s;b>0&&(n+=t),d.x!==n&&(d.ci=b>0?u:0,d.x=n,e())}scrolly(b,e){const{scroll:d,freeze:m,rows:f}=this,[c]=m,[u,s,t]=qr.rangeReduceIf(c,f.len,0,0,b,r=>f.getHeight(r));let n=s;b>0&&(n+=t),d.y!==n&&(d.ri=b>0?u:0,d.y=n,e())}cellRect(b,e){const{rows:d,cols:m}=this,f=m.sumWidth(0,e),c=d.sumHeight(0,b),u=d.getCell(b,e);let s=m.getWidth(e),t=d.getHeight(b);if(u!==null&&u.merge){const[n,r]=u.merge;if(n>0)for(let i=1;i<=n;i+=1)t+=d.getHeight(b+i);if(r>0)for(let i=1;i<=r;i+=1)s+=m.getWidth(e+i)}return{left:f,top:c,width:s,height:t,cell:u}}getCell(b,e){return this.rows.getCell(b,e)}getCellTextOrDefault(b,e){const d=this.getCell(b,e);return d&&d.text?d.text:""}getCellStyle(b,e){const d=this.getCell(b,e);return d&&d.style!==void 0?this.styles[d.style]:null}getCellStyleOrDefault(b,e){const{styles:d,rows:m}=this,f=m.getCell(b,e),c=f&&f.style!==void 0?d[f.style]:{};return qr.merge(this.defaultStyle(),c)}getSelectedCellStyle(){const{ri:b,ci:e}=this.selector;return this.getCellStyleOrDefault(b,e)}setCellText(b,e,d,m){const{rows:f,history:c,validations:u}=this;m==="finished"?(f.setCellText(b,e,""),c.add(this.getData()),f.setCellText(b,e,d)):(f.setCellText(b,e,d),this.change(this.getData())),u.validate(b,e,d)}freezeIsActive(){const[b,e]=this.freeze;return b>0||e>0}setFreeze(b,e){this.changeData(()=>{this.freeze=[b,e]})}freezeTotalWidth(){return this.cols.sumWidth(0,this.freeze[1])}freezeTotalHeight(){return this.rows.sumHeight(0,this.freeze[0])}setRowHeight(b,e){this.changeData(()=>{this.rows.setHeight(b,e)})}setColWidth(b,e){this.changeData(()=>{this.cols.setWidth(b,e)})}viewHeight(){const{view:b,showToolbar:e,showBottomBar:d}=this.settings;let m=b.height();return d&&(m-=gg),e&&(m-=mg),m}viewWidth(){return this.settings.view.width()}freezeViewRange(){const[b,e]=this.freeze;return new _r(0,0,b-1,e-1,this.freezeTotalWidth(),this.freezeTotalHeight())}contentRange(){const{rows:b,cols:e}=this,[d,m]=b.maxCell(),f=b.sumHeight(0,d+1),c=e.sumWidth(0,m+1);return new _r(0,0,d,m,c,f)}exceptRowTotalHeight(b,e){const{exceptRowSet:d,rows:m}=this,f=Array.from(d);let c=0;return f.forEach(u=>{if(ue){const s=m.getHeight(u);c+=s}}),c}viewRange(){const{scroll:b,rows:e,cols:d,freeze:m,exceptRowSet:f}=this;let{ri:c,ci:u}=b;c<=0&&([c]=m),u<=0&&([,u]=m);let[s,t]=[0,0],[n,r]=[e.len,d.len];for(let i=c;ithis.viewHeight()));i+=1);for(let i=u;ithis.viewWidth()));i+=1);return new _r(c,u,n,r,s,t)}eachMergesInView(b,e){this.merges.filterIntersects(b).forEach(d=>e(d))}hideRowsOrCols(){const{rows:b,cols:e,selector:d}=this,[m,f]=d.size(),{sri:c,sci:u,eri:s,eci:t}=d.range;if(m===b.len)for(let n=u;n<=t;n+=1)e.setHide(n,!0);else if(f===e.len)for(let n=c;n<=s;n+=1)b.setHide(n,!0)}unhideRowsOrCols(b,e){this[`${b}s`].unhide(e)}rowEach(b,e,d){let m=0;const{rows:f}=this,c=this.exceptRowSet,u=[...c];let s=0;for(let t=0;t0&&(d(t,m,n),m+=n,m>this.viewHeight()))break}}colEach(b,e,d){let m=0;const{cols:f}=this;for(let c=b;c<=e;c+=1){const u=f.getWidth(c);if(u>0&&(d(c,m,u),m+=u,m>this.viewWidth()))break}}defaultStyle(){return this.settings.style}addStyle(b){const{styles:e}=this;for(let d=0;d{if(e==="merges"||e==="rows"||e==="cols"||e==="validations")this[e].setData(b[e]);else if(e==="freeze"){const[d,m]=xi(b[e]);this.freeze=[m,d]}else e==="autofilter"?this.autoFilter.setData(b[e]):b[e]!==void 0&&(this[e]=b[e])}),this}getData(){const{name:b,freeze:e,styles:d,merges:m,rows:f,cols:c,validations:u,autoFilter:s}=this;return{name:b,freeze:ai(e[1],e[0]),styles:d,merges:m.getData(),rows:f.getData(),cols:c.getData(),validations:u.getData(),autofilter:s.getData()}}}function tn(N,b,e){N.addEventListener(b,e)}function Xa(N,b,e){N.removeEventListener(b,e)}function gs(N){N.xclickoutside&&(Xa(window.document.body,"click",N.xclickoutside),delete N.xclickoutside)}function Ws(N,b){N.xclickoutside=e=>{e.detail===2||N.contains(e.target)||(b?b(N):(N.hide(),gs(N)))},tn(window.document.body,"click",N.xclickoutside)}function oh(N,b,e){tn(N,"mousemove",b);const d=N;d.xEvtUp=m=>{Xa(N,"mousemove",b),Xa(N,"mouseup",N.xEvtUp),e(m)},tn(N,"mouseup",N.xEvtUp)}function Rc(N,b,e,d){let m="";Math.abs(N)>Math.abs(b)?(m=N>0?"right":"left",d(m,N,e)):(m=b>0?"down":"up",d(m,b,e))}function _g(N,{move:b,end:e}){let d=0,m=0;tn(N,"touchstart",f=>{const{pageX:c,pageY:u}=f.touches[0];d=c,m=u}),tn(N,"touchmove",f=>{if(!b)return;const{pageX:c,pageY:u}=f.changedTouches[0],s=c-d,t=u-m;(Math.abs(s)>10||Math.abs(t)>10)&&(Rc(s,t,f,b),d=c,m=u),f.preventDefault()}),tn(N,"touchend",f=>{if(!e)return;const{pageX:c,pageY:u}=f.changedTouches[0],s=c-d,t=u-m;Rc(s,t,f,e)})}function Sg(){const N=new Map;function b(c,u){const s=()=>{const n=N.get(c);return Array.isArray(n)&&n.push(u)||!1},t=()=>N.set(c,[].concat(u));return N.has(c)&&s()||t()}function e(c,u){const s=()=>{const t=N.get(c);for(const n of t)n.call(null,...u)};return N.has(c)&&s()}function d(c,u){const s=()=>{const t=N.get(c),n=t.indexOf(u);return n>=0&&t.splice(n,1)&&N.get(c).length===0&&N.delete(c)};return N.has(c)&&s()}function m(c,u){const s=(...t)=>{u.call(null,...t),d(c,s)};return b(c,s)}function f(){N.clear()}return{get current(){return N},on:b,once:m,fire:e,removeListener:d,removeAllListeners:f}}const Ze="x-spreadsheet";class Ic{constructor(b=!1,e){this.moving=!1,this.vertical=b,this.el=$e("div",`${Ze}-resizer ${b?"vertical":"horizontal"}`).children(this.unhideHoverEl=$e("div",`${Ze}-resizer-hover`).on("dblclick.stop",d=>this.mousedblclickHandler(d)).css("position","absolute").hide(),this.hoverEl=$e("div",`${Ze}-resizer-hover`).on("mousedown.stop",d=>this.mousedownHandler(d)),this.lineEl=$e("div",`${Ze}-resizer-line`).hide()).hide(),this.cRect=null,this.finishedFn=null,this.minDistance=e,this.unhideFn=()=>{}}showUnhide(b){this.unhideIndex=b,this.unhideHoverEl.show()}hideUnhide(){this.unhideHoverEl.hide()}show(b,e){const{moving:d,vertical:m,hoverEl:f,lineEl:c,el:u,unhideHoverEl:s}=this;if(d)return;this.cRect=b;const{left:t,top:n,width:r,height:i}=b;u.offset({left:m?t+r-5:t,top:m?n:n+i-5}).show(),f.offset({width:m?5:r,height:m?i:5}),c.offset({width:m?0:e.width,height:m?e.height:0}),s.offset({left:m?5-r:t,top:m?n:5-i,width:m?5:r,height:m?i:5})}hide(){this.el.offset({left:0,top:0}).hide(),this.hideUnhide()}mousedblclickHandler(){this.unhideIndex&&this.unhideFn(this.unhideIndex)}mousedownHandler(b){let e=b;const{el:d,lineEl:m,cRect:f,vertical:c,minDistance:u}=this;let s=c?f.width:f.height;m.show(),oh(window,t=>{this.moving=!0,e!==null&&t.buttons===1&&(c?(s+=t.movementX,s>u&&d.css("left",`${f.left+s}px`)):(s+=t.movementY,s>u&&d.css("top",`${f.top+s}px`)),e=t)},()=>{e=null,m.hide(),this.moving=!1,this.hide(),this.finishedFn&&(s{}).on("scroll.stop",e=>{const{scrollTop:d,scrollLeft:m}=e.target;this.moveFn&&this.moveFn(this.vertical?d:m,e)})}move(b){return this.el.scroll(b),this}scroll(){return this.el.scroll()}set(b,e){const d=b-1;if(e>d){const m=this.vertical?"height":"width";this.el.css(m,`${d-15}px`).show(),this.contentEl.css(this.vertical?"width":"height","1px").css(m,`${e}px`)}else this.el.hide();return this}}const Oa=2*2-1;let hf=10;class Fa{constructor(b=!1){this.useHideInput=b,this.inputChange=()=>{},this.cornerEl=$e("div",`${Ze}-selector-corner`),this.areaEl=$e("div",`${Ze}-selector-area`).child(this.cornerEl).hide(),this.clipboardEl=$e("div",`${Ze}-selector-clipboard`).hide(),this.autofillEl=$e("div",`${Ze}-selector-autofill`).hide(),this.el=$e("div",`${Ze}-selector`).css("z-index",`${hf}`).children(this.areaEl,this.clipboardEl,this.autofillEl).hide(),b&&(this.hideInput=$e("input","").on("compositionend",e=>{this.inputChange(e.target.value)}),this.el.child(this.hideInputDiv=$e("div","hide-input").child(this.hideInput)),this.el.child(this.hideInputDiv=$e("div","hide-input").child(this.hideInput))),hf+=1}setOffset(b){return this.el.offset(b).show(),this}hide(){return this.el.hide(),this}setAreaOffset(b){const{left:e,top:d,width:m,height:f}=b,c={width:m-Oa+.8,height:f-Oa+.8,left:e-.8,top:d-.8};this.areaEl.offset(c).show(),this.useHideInput&&(this.hideInputDiv.offset(c),this.hideInput.val("").focus())}setClipboardOffset(b){const{left:e,top:d,width:m,height:f}=b;this.clipboardEl.offset({left:e,top:d,width:m-5,height:f-5})}showAutofill(b){const{left:e,top:d,width:m,height:f}=b;this.autofillEl.offset({width:m-Oa,height:f-Oa,left:e,top:d}).show()}hideAutofill(){this.autofillEl.hide()}showClipboard(){this.clipboardEl.show()}hideClipboard(){this.clipboardEl.hide()}}function yf(N){const{data:b}=this,{left:e,top:d,width:m,height:f,scroll:c,l:u,t:s}=N,t=b.freezeTotalWidth(),n=b.freezeTotalHeight();let r=e-t;t>u&&(r-=c.x);let i=d-n;return n>s&&(i-=c.y),{left:r,top:i,width:m,height:f}}function wf(N){const{data:b}=this,{left:e,width:d,height:m,l:f,t:c,scroll:u}=N,s=b.freezeTotalWidth();let t=e-s;return s>f&&(t-=u.x),{left:t,top:c,width:d,height:m}}function xf(N){const{data:b}=this,{top:e,width:d,height:m,l:f,t:c,scroll:u}=N,s=b.freezeTotalHeight();let t=e-s;return s>c&&(t-=u.y),{left:f,top:t,width:d,height:m}}function uf(N){const{br:b}=this;b.setAreaOffset(yf.call(this,N))}function Eg(N){const{tl:b}=this;b.setAreaOffset(N)}function fh(N){const{t:b}=this;b.setAreaOffset(wf.call(this,N))}function lh(N){const{l:b}=this;b.setAreaOffset(xf.call(this,N))}function ch(N){const{l:b}=this;b.setClipboardOffset(xf.call(this,N))}function df(N){const{br:b}=this;b.setClipboardOffset(yf.call(this,N))}function Cg(N){const{tl:b}=this;b.setClipboardOffset(N)}function hh(N){const{t:b}=this;b.setClipboardOffset(wf.call(this,N))}function Fc(N){uf.call(this,N),Eg.call(this,N),fh.call(this,N),lh.call(this,N)}function Pc(N){df.call(this,N),Cg.call(this,N),hh.call(this,N),ch.call(this,N)}class Tg{constructor(b){this.inputChange=()=>{},this.data=b,this.br=new Fa(!0),this.t=new Fa,this.l=new Fa,this.tl=new Fa,this.br.inputChange=e=>{this.inputChange(e)},this.br.el.show(),this.offset=null,this.areaOffset=null,this.indexes=null,this.range=null,this.arange=null,this.el=$e("div",`${Ze}-selectors`).children(this.tl.el,this.t.el,this.l.el,this.br.el).hide(),this.lastri=-1,this.lastci=-1,hf+=1}resetData(b){this.data=b,this.range=b.selector.range,this.resetAreaOffset()}hide(){this.el.hide()}resetOffset(){const{data:b,tl:e,t:d,l:m,br:f}=this,c=b.freezeTotalHeight(),u=b.freezeTotalWidth();c>0||u>0?(e.setOffset({width:u,height:c}),d.setOffset({left:u,height:c}),m.setOffset({top:c,width:u}),f.setOffset({left:u,top:c})):(e.hide(),d.hide(),m.hide(),f.setOffset({left:0,top:0}))}resetAreaOffset(){const b=this.data.getSelectedRect(),e=this.data.getClipboardRect();Fc.call(this,b),Pc.call(this,e),this.resetOffset()}resetBRTAreaOffset(){const b=this.data.getSelectedRect(),e=this.data.getClipboardRect();uf.call(this,b),fh.call(this,b),df.call(this,e),hh.call(this,e),this.resetOffset()}resetBRLAreaOffset(){const b=this.data.getSelectedRect(),e=this.data.getClipboardRect();uf.call(this,b),lh.call(this,b),df.call(this,e),ch.call(this,e),this.resetOffset()}set(b,e,d=!0){const{data:m}=this,f=m.calSelectedRangeByStart(b,e),{sri:c,sci:u}=f;if(d){let[s,t]=[b,e];b<0&&(s=0),e<0&&(t=0),m.selector.setIndexes(s,t),this.indexes=[s,t]}this.moveIndexes=[c,u],this.range=f,this.resetAreaOffset(),this.el.show()}setEnd(b,e,d=!0){const{data:m,lastri:f,lastci:c}=this;if(d){if(b===f&&e===c)return;this.lastri=b,this.lastci=e}this.range=m.calSelectedRangeByEnd(b,e),Fc.call(this,this.data.getSelectedRect())}reset(){const{eri:b,eci:e}=this.data.selector.range;this.setEnd(b,e)}showAutofill(b,e){if(b===-1&&e===-1)return;const{sri:d,sci:m,eri:f,eci:c}=this.range,[u,s]=[b,e],t=d-b,n=m-e,r=f-b,i=c-e;if(n>0)this.arange=new _r(d,s,f,m-1);else if(t>0)this.arange=new _r(u,m,d-1,c);else if(i<0)this.arange=new _r(d,c+1,f,s);else if(r<0)this.arange=new _r(f+1,m,u,c);else{this.arange=null;return}if(this.arange!==null){const o=this.data.getRect(this.arange);o.width+=2,o.height+=2;const{br:l,l:a,t:g,tl:v}=this;l.showAutofill(yf.call(this,o)),a.showAutofill(xf.call(this,o)),g.showAutofill(wf.call(this,o)),v.showAutofill(o)}}hideAutofill(){["br","l","t","tl"].forEach(b=>{this[b].hideAutofill()})}showClipboard(){const b=this.data.getClipboardRect();Pc.call(this,b),["br","l","t","tl"].forEach(e=>{this[e].showClipboard()})}hideClipboard(){["br","l","t","tl"].forEach(b=>{this[b].hideClipboard()})}}function Ag(N){N.preventDefault(),N.stopPropagation();const{filterItems:b}=this;b.length<=0||(this.itemIndex>=0&&b[this.itemIndex].toggle(),this.itemIndex-=1,this.itemIndex<0&&(this.itemIndex=b.length-1),b[this.itemIndex].toggle())}function kg(N){N.stopPropagation();const{filterItems:b}=this;b.length<=0||(this.itemIndex>=0&&b[this.itemIndex].toggle(),this.itemIndex+=1,this.itemIndex>b.length-1&&(this.itemIndex=0),b[this.itemIndex].toggle())}function Nc(N){N.preventDefault();const{filterItems:b}=this;b.length<=0||(N.stopPropagation(),this.itemIndex<0&&(this.itemIndex=0),b[this.itemIndex].el.click(),this.hide())}function Mg(N){const{keyCode:b}=N;switch(N.ctrlKey&&N.stopPropagation(),b){case 37:N.stopPropagation();break;case 38:Ag.call(this,N);break;case 39:N.stopPropagation();break;case 40:kg.call(this,N);break;case 13:Nc.call(this,N);break;case 9:Nc.call(this,N);break;default:N.stopPropagation();break}}class uh{constructor(b,e,d="200px"){this.filterItems=[],this.items=b,this.el=$e("div",`${Ze}-suggest`).css("width",d).hide(),this.itemClick=e,this.itemIndex=-1}setOffset(b){this.el.cssRemoveKeys("top","bottom").offset(b)}hide(){const{el:b}=this;this.filterItems=[],this.itemIndex=-1,b.hide(),gs(this.el.parent())}setItems(b){this.items=b}search(b){let{items:e}=this;if(/^\s*$/.test(b)||(e=e.filter(m=>(m.key||m).startsWith(b.toUpperCase()))),e=e.map(m=>{let{title:f}=m;f?typeof f=="function"&&(f=f()):f=m;const c=$e("div",`${Ze}-item`).child(f).on("click.stop",()=>{this.itemClick(m),this.hide()});return m.label&&c.child($e("div","label").html(m.label)),c}),this.filterItems=e,e.length<=0)return;const{el:d}=this;d.html("").children(...e).show(),Ws(d.parent(),()=>{this.hide()})}bindInputEvents(b){b.on("keydown",e=>Mg.call(this,e))}}class jr extends Li{constructor(b){super("div",`${Ze}-icon`),this.iconNameEl=$e("div",`${Ze}-icon-img ${b}`),this.child(this.iconNameEl)}setName(b){this.iconNameEl.className(`${Ze}-icon-img ${b}`)}}function Dc(N,b){N.setMonth(N.getMonth()+b)}function Rg(N,b){const e=new Date(N);return e.setDate(b-N.getDay()+1),e}function Ig(N,b,e){const d=new Date(N,b,1,23,59,59),m=[[],[],[],[],[],[]];for(let f=0;f<6;f+=1)for(let c=0;c<7;c+=1){const u=f*7+c,s=Rg(d,u),t=s.getMonth()!==b,n=s.getMonth()===e.getMonth()&&s.getDate()===e.getDate();m[f][c]={d:s,disabled:t,active:n}}return m}class Og{constructor(b){this.value=b,this.cvalue=new Date(b),this.headerLeftEl=$e("div","calendar-header-left"),this.bodyEl=$e("tbody",""),this.buildAll(),this.el=$e("div","x-spreadsheet-calendar").children($e("div","calendar-header").children(this.headerLeftEl,$e("div","calendar-header-right").children($e("a","calendar-prev").on("click.stop",()=>this.prev()).child(new jr("chevron-left")),$e("a","calendar-next").on("click.stop",()=>this.next()).child(new jr("chevron-right")))),$e("table","calendar-body").children($e("thead","").child($e("tr","").children(...Cr("calendar.weeks").map(e=>$e("th","cell").child(e)))),this.bodyEl)),this.selectChange=()=>{}}setValue(b){this.value=b,this.cvalue=new Date(b),this.buildAll()}prev(){const{value:b}=this;Dc(b,-1),this.buildAll()}next(){const{value:b}=this;Dc(b,1),this.buildAll()}buildAll(){this.buildHeaderLeft(),this.buildBody()}buildHeaderLeft(){const{value:b}=this;this.headerLeftEl.html(`${Cr("calendar.months")[b.getMonth()]} ${b.getFullYear()}`)}buildBody(){const{value:b,cvalue:e,bodyEl:d}=this,f=Ig(b.getFullYear(),b.getMonth(),e).map(c=>{const u=c.map(s=>{let t="cell";return s.disabled&&(t+=" disabled"),s.active&&(t+=" active"),$e("td","").child($e("div",t).on("click.stop",()=>{this.selectChange(s.d)}).child(s.d.getDate().toString()))});return $e("tr","").children(...u)});d.html("").children(...f)}}class Fg{constructor(){this.calendar=new Og(new Date),this.el=$e("div",`${Ze}-datepicker`).child(this.calendar.el).hide()}setValue(b){const{calendar:e}=this;return typeof b=="string"?/^\d{4}-\d{1,2}-\d{1,2}$/.test(b)&&e.setValue(new Date(b.replace(new RegExp("-","g"),"/"))):b instanceof Date&&e.setValue(b),this}change(b){this.calendar.selectChange=e=>{b(e),this.hide()}}show(){this.el.show()}hide(){this.el.hide()}}function Wa(){const{inputText:N}=this;if(!/^\s*$/.test(N)){const{textlineEl:b,textEl:e,areaOffset:d}=this,m=N.split(` +`),f=Math.max(...m.map(r=>r.length)),u=b.offset().width/N.length,s=(f+1)*u+5,t=this.viewFn().width-d.left-u;let n=m.length;if(s>d.width){let r=s;s>t&&(r=t,n+=parseInt(s/t,10),n+=s%t>0?1:0),e.css("width",`${r}px`)}n*=this.rowHeight,n>d.height&&e.css("height",`${n}px`)}}function Pg({target:N},b){const{value:e,selectionEnd:d}=N,m=`${e.slice(0,d)}${b}${e.slice(d)}`;N.value=m,N.setSelectionRange(d+1,d+1),this.inputText=m,this.textlineEl.html(m),Wa.call(this)}function Ng(N){const{keyCode:b,altKey:e}=N;b!==13&&b!==9&&N.stopPropagation(),b===13&&e&&(Pg.call(this,N,` +`),N.stopPropagation()),b===13&&!e&&N.preventDefault()}function Dg(N){const b=N.target.value,{suggest:e,textlineEl:d,validator:m}=this,{cell:f}=this;if(f!==null)if("editable"in f&&f.editable===!0||f.editable===void 0){if(this.inputText=b,m)m.type==="list"?e.search(b):e.hide();else{const c=b.lastIndexOf("=");c!==-1?e.search(b.substring(c+1)):e.hide()}d.html(b),Wa.call(this),this.change("input",b)}else N.target.value=f.text;else{if(this.inputText=b,m)m.type==="list"?e.search(b):e.hide();else{const c=b.lastIndexOf("=");c!==-1?e.search(b.substring(c+1)):e.hide()}d.html(b),Wa.call(this),this.change("input",b)}}function Bg(N){const{el:b}=this.textEl;setTimeout(()=>{b.focus(),b.setSelectionRange(N,N)},0)}function dh(N,b){const{textEl:e,textlineEl:d}=this;e.el.blur(),e.val(N),d.html(N),Bg.call(this,b)}function Lg(N){const{inputText:b,validator:e}=this;let d=0;if(e&&e.type==="list")this.inputText=N,d=this.inputText.length;else{const m=b.lastIndexOf("="),f=b.substring(0,m+1);let c=b.substring(m+1);c.indexOf(")")!==-1?c=c.substring(c.indexOf(")")):c="",this.inputText=`${f+N.key}(`,d=this.inputText.length,this.inputText+=`)${c}`}dh.call(this,this.inputText,d)}function jg(){this.suggest.setItems(this.formulas)}function $g(N){let b=N.getMonth()+1,e=N.getDate();return b<10&&(b=`0${b}`),e<10&&(e=`0${e}`),`${N.getFullYear()}-${b}-${e}`}class Hg{constructor(b,e,d){this.viewFn=e,this.rowHeight=d,this.formulas=b,this.suggest=new uh(b,m=>{Lg.call(this,m)}),this.datepicker=new Fg,this.datepicker.change(m=>{this.setText($g(m)),this.clear()}),this.areaEl=$e("div",`${Ze}-editor-area`).children(this.textEl=$e("textarea","").on("input",m=>Dg.call(this,m)).on("paste.stop",()=>{}).on("keydown",m=>Ng.call(this,m)),this.textlineEl=$e("div","textline"),this.suggest.el,this.datepicker.el).on("mousemove.stop",()=>{}).on("mousedown.stop",()=>{}),this.el=$e("div",`${Ze}-editor`).child(this.areaEl).hide(),this.suggest.bindInputEvents(this.textEl),this.areaOffset=null,this.freeze={w:0,h:0},this.cell=null,this.inputText="",this.change=()=>{}}setFreezeLengths(b,e){this.freeze.w=b,this.freeze.h=e}clear(){this.inputText!==""&&this.change("finished",this.inputText),this.cell=null,this.areaOffset=null,this.inputText="",this.el.hide(),this.textEl.val(""),this.textlineEl.html(""),jg.call(this),this.datepicker.hide()}setOffset(b,e="top"){const{textEl:d,areaEl:m,suggest:f,freeze:c,el:u}=this;if(b){this.areaOffset=b;const{left:s,top:t,width:n,height:r,l:i,t:o}=b,l={left:0,top:0};c.w>i&&c.h>o||(c.wi?l.top=c.h:c.h>o&&(l.left=c.w)),u.offset(l),m.offset({left:s-l.left-.8,top:t-l.top-.8}),d.offset({width:n-9+.8,height:r-3+.8});const a={left:0};a[e]=r,f.setOffset(a),f.hide()}}setCell(b,e){const{el:d,datepicker:m,suggest:f}=this;d.show(),this.cell=b;const c=b&&b.text||"";if(this.setText(c),this.validator=e,e){const{type:u}=e;u==="date"&&(m.show(),/^\s*$/.test(c)||m.setValue(c)),u==="list"&&(f.setItems(e.values()),f.search(""))}}setText(b){this.inputText=b,dh.call(this,b,b.length),Wa.call(this)}}class Di extends Li{constructor(b,e=""){super("div",`${Ze}-button ${e}`),this.child(Cr(`button.${b}`))}}function Va(){return window.devicePixelRatio||1}function _f(){return Va()-.5}function Ft(N){return parseInt(N*Va(),10)}function us(N){const b=Ft(N);return b>0?b-.5:.5}class zg{constructor(b,e,d,m,f=0){this.x=b,this.y=e,this.width=d,this.height=m,this.padding=f,this.bgcolor="#ffffff",this.borderTop=null,this.borderRight=null,this.borderBottom=null,this.borderLeft=null}setBorders({top:b,bottom:e,left:d,right:m}){b&&(this.borderTop=b),m&&(this.borderRight=m),e&&(this.borderBottom=e),d&&(this.borderLeft=d)}innerWidth(){return this.width-this.padding*2-2}innerHeight(){return this.height-this.padding*2-2}textx(b){const{width:e,padding:d}=this;let{x:m}=this;return b==="left"?m+=d:b==="center"?m+=e/2:b==="right"&&(m+=e-d),m}texty(b,e){const{height:d,padding:m}=this;let{y:f}=this;return b==="top"?f+=m:b==="middle"?f+=d/2-e/2:b==="bottom"&&(f+=d-m-e),f}topxys(){const{x:b,y:e,width:d}=this;return[[b,e],[b+d,e]]}rightxys(){const{x:b,y:e,width:d,height:m}=this;return[[b+d,e],[b+d,e+m]]}bottomxys(){const{x:b,y:e,width:d,height:m}=this;return[[b,e+m],[b+d,e+m]]}leftxys(){const{x:b,y:e,height:d}=this;return[[b,e],[b,e+d]]}}function Bc(N,b,e,d,m,f,c){const u={x:0,y:0};N==="underline"?m==="bottom"?u.y=0:m==="top"?u.y=-(f+2):u.y=-f/2:N==="strike"&&(m==="bottom"?u.y=f/2:m==="top"&&(u.y=-(f/2+2))),d==="center"?u.x=c/2:d==="right"&&(u.x=c),this.line([b-u.x,e-u.y],[b-u.x+c,e-u.y])}class ph{constructor(b,e,d){this.el=b,this.ctx=b.getContext("2d"),this.resize(e,d),this.ctx.scale(Va(),Va())}resize(b,e){this.el.style.width=`${b}px`,this.el.style.height=`${e}px`,this.el.width=Ft(b),this.el.height=Ft(e)}clear(){const{width:b,height:e}=this.el;return this.ctx.clearRect(0,0,b,e),this}attr(b){return Object.assign(this.ctx,b),this}save(){return this.ctx.save(),this.ctx.beginPath(),this}restore(){return this.ctx.restore(),this}beginPath(){return this.ctx.beginPath(),this}translate(b,e){return this.ctx.translate(Ft(b),Ft(e)),this}scale(b,e){return this.ctx.scale(b,e),this}clearRect(b,e,d,m){return this.ctx.clearRect(b,e,d,m),this}fillRect(b,e,d,m){return this.ctx.fillRect(Ft(b)-.5,Ft(e)-.5,Ft(d),Ft(m)),this}fillText(b,e,d){return this.ctx.fillText(b,Ft(e),Ft(d)),this}text(b,e,d={},m=!0){const{ctx:f}=this,{align:c,valign:u,font:s,color:t,strike:n,underline:r}=d,i=e.textx(c);f.save(),f.beginPath(),this.attr({textAlign:c,textBaseline:u,font:`${s.italic?"italic":""} ${s.bold?"bold":""} ${Ft(s.size)}px ${s.name}`,fillStyle:t,strokeStyle:t});const o=`${b}`.split(` +`),l=e.innerWidth(),a=[];o.forEach(h=>{const w=f.measureText(h).width;if(m&&w>Ft(l)){let y={w:0,len:0,start:0};for(let S=0;S=Ft(l)&&(a.push(h.substr(y.start,y.len)),y={w:0,len:0,start:S}),y.len+=1,y.w+=f.measureText(h[S]).width+1;y.len>0&&a.push(h.substr(y.start,y.len))}else a.push(h)});const g=(a.length-1)*(s.size+2);let v=e.texty(u,g);return a.forEach(h=>{const w=f.measureText(h).width;this.fillText(h,i,v),n&&Bc.call(this,"strike",i,v,c,u,s.size,w),r&&Bc.call(this,"underline",i,v,c,u,s.size,w),v+=s.size+2}),f.restore(),this}border(b,e){const{ctx:d}=this;return d.lineWidth=_f,d.strokeStyle=e,b==="medium"?d.lineWidth=Ft(2)-.5:b==="thick"?d.lineWidth=Ft(3):b==="dashed"?d.setLineDash([Ft(3),Ft(2)]):b==="dotted"?d.setLineDash([Ft(1),Ft(1)]):b==="double"&&d.setLineDash([Ft(2),0]),this}line(...b){const{ctx:e}=this;if(b.length>1){e.beginPath();const[d,m]=b[0];e.moveTo(us(d),us(m));for(let f=1;f{const b=[],e=[];let d=[],m=0,f="",c=1,u="";for(let s=0;s="a"&&t<="z")d.push(t.toUpperCase());else if(t>="0"&&t<="9"||t>="A"&&t<="Z"||t===".")d.push(t);else if(t==='"'){for(s+=1;N.charAt(s)!=='"';)d.push(N.charAt(s)),s+=1;e.push(`"${d.join("")}`),d=[]}else if(t==="-"&&/[+\-*/,(]/.test(u))d.push(t);else{if(t!=="("&&d.length>0&&e.push(d.join("")),t===")"){let n=b.pop();if(m===2)try{const[r,i]=xi(e.pop()),[o,l]=xi(e.pop());let a=0;for(let g=o;g<=r;g+=1)for(let v=l;v<=i;v+=1)e.push(ai(g,v)),a+=1;e.push([n,a])}catch{}else if(m===1||m===3)m===3&&e.push(f),e.push([n,c]),c=1;else for(;n!=="("&&(e.push(n),!(b.length<=0));)n=b.pop();m=0}else if(t==="="||t===">"||t==="<"){const n=N.charAt(s+1);f=t,(n==="="||n==="-")&&(f+=n,s+=1),m=3}else if(t===":")m=2;else if(t===",")m===3&&e.push(f),m=1,c+=1;else if(t==="("&&d.length>0)b.push(d.join(""));else{if(b.length>0&&(t==="+"||t==="-")){let n=b[b.length-1];if(n!=="("&&e.push(b.pop()),n==="*"||n==="/")for(;b.length>0&&(n=b[b.length-1],n!=="(");)e.push(b.pop())}else if(b.length>0){const n=b[b.length-1];(n==="*"||n==="/")&&e.push(b.pop())}b.push(t)}d=[]}u=t}}for(d.length>0&&e.push(d.join(""));b.length>0;)e.push(b.pop());return e},Wg=(N,b)=>{const[e]=N;let d=N;if(e==='"')return N.substring(1);let m=1;if(e==="-"&&(d=N.substring(1),m=-1),d[0]>="0"&&d[0]<="9")return m*Number(d);const[f,c]=xi(d);return m*b(f,c)},Vg=(N,b,e,d)=>{const m=[];for(let f=0;f"||u==="<"){let s=m.pop();Number.isNaN(s)||(s=Number(s));let t=m.pop();Number.isNaN(t)||(t=Number(t));let n=!1;u==="="?n=t===s:c===">"?n=t>s:c===">="?n=t>=s:c==="<"?n=t="a"&&u<="z"||u>="A"&&u<="Z")&&d.push(c),m.push(Wg(c,e)),d.pop()}}return m[0]},mh=(N,b,e,d=[])=>{if(N[0]==="="){const m=Xg(N.substring(1));return m.length<=0?N:Vg(m,b,(f,c)=>mh(e(f,c),b,e,d),d)}return N},Kg={render:mh},Sf=[{key:"SUM",title:Wt("formula.sum"),render:N=>N.reduce((b,e)=>Ni("+",b,e),0)},{key:"AVERAGE",title:Wt("formula.average"),render:N=>N.reduce((b,e)=>Number(b)+Number(e),0)/N.length},{key:"MAX",title:Wt("formula.max"),render:N=>Math.max(...N.map(b=>Number(b)))},{key:"MIN",title:Wt("formula.min"),render:N=>Math.min(...N.map(b=>Number(b)))},{key:"IF",title:Wt("formula._if"),render:([N,b,e])=>N?b:e},{key:"AND",title:Wt("formula.and"),render:N=>N.every(b=>b)},{key:"OR",title:Wt("formula.or"),render:N=>N.some(b=>b)},{key:"CONCAT",title:Wt("formula.concat"),render:N=>N.join("")}],Gg=Sf,gh={};Sf.forEach(N=>{gh[N.key]=N});const ds=N=>N,Pa=N=>{if(/^(-?\d*.?\d*)$/.test(N)){const b=Number(N).toFixed(2).toString(),[e,...d]=b.split("\\.");return[e.replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),...d]}return N},Hs=[{key:"normal",title:Wt("format.normal"),type:"string",render:ds},{key:"text",title:Wt("format.text"),type:"string",render:ds},{key:"number",title:Wt("format.number"),type:"number",label:"1,000.12",render:Pa},{key:"percent",title:Wt("format.percent"),type:"number",label:"10.12%",render:N=>`${N}%`},{key:"rmb",title:Wt("format.rmb"),type:"number",label:"¥10.00",render:N=>`¥${Pa(N)}`},{key:"usd",title:Wt("format.usd"),type:"number",label:"$10.00",render:N=>`$${Pa(N)}`},{key:"eur",title:Wt("format.eur"),type:"number",label:"€10.00",render:N=>`€${Pa(N)}`},{key:"date",title:Wt("format.date"),type:"date",label:"26/09/2008",render:ds},{key:"time",title:Wt("format.time"),type:"date",label:"15:59:00",render:ds},{key:"datetime",title:Wt("format.datetime"),type:"date",label:"26/09/2008 15:59:00",render:ds},{key:"duration",title:Wt("format.duration"),type:"date",label:"24:01:00",render:ds}],bh={};Hs.forEach(N=>{bh[N.key]=N});const Yg=5,Zg={fillStyle:"#f4f5f8"},Jg={fillStyle:"#fff",lineWidth:_f,strokeStyle:"#e6e6e6"};function Qg(){return{textAlign:"center",textBaseline:"middle",font:`500 ${Ft(12)}px Source Sans Pro`,fillStyle:"#585757",lineWidth:_f(),strokeStyle:"#e6e6e6"}}function vh(N,b,e,d=0){const{left:m,top:f,width:c,height:u}=N.cellRect(b,e);return new zg(m,f+d,c,u,Yg)}function Ka(N,b,e,d,m=0){const{sortedRowMap:f,rows:c,cols:u}=b;if(c.isHide(e)||u.isHide(d))return;let s=e;f.has(e)&&(s=f.get(e));const t=b.getCell(s,d);if(t===null)return;let n=!1;"editable"in t&&t.editable===!1&&(n=!0);const r=b.getCellStyleOrDefault(s,d),i=vh(b,e,d,m);i.bgcolor=r.bgcolor,r.border!==void 0&&(i.setBorders(r.border),N.strokeBorders(i)),N.rect(i,()=>{let o="";b.settings.evalPaused?o=t.text||"":o=Kg.render(t.text||"",gh,(g,v)=>b.getCellTextOrDefault(v,g)),r.format&&(o=bh[r.format].render(o));const l=Object.assign({},r.font);l.size=Ug(l.size),N.text(o,i,{align:r.align,valign:r.valign,font:l,color:r.color,strike:r.strike,underline:r.underline},r.textwrap),b.validations.getError(e,d)&&N.error(i),n&&N.frozen(i)})}function qg(N){const{data:b,draw:e}=this;if(N){const{autoFilter:d}=b;if(!d.active())return;const m=d.hrange();N.intersects(m)&&m.each((f,c)=>{const u=vh(b,f,c);e.dropdown(u)})}}function Na(N,b,e,d,m){const{draw:f,data:c}=this;f.save(),f.translate(b,e).translate(d,m);const{exceptRowSet:u}=c,s=r=>{const i=u.has(r);if(i){const o=c.rows.getHeight(r);f.translate(0,-o)}return!i},t=c.exceptRowTotalHeight(N.sri,N.eri);f.save(),f.translate(0,-t),N.each((r,i)=>{Ka(f,c,r,i)},r=>s(r)),f.restore();const n=new Set;f.save(),f.translate(0,-t),c.eachMergesInView(N,({sri:r,sci:i,eri:o})=>{if(!u.has(r))Ka(f,c,r,i);else if(!n.has(r)){n.add(r);const l=c.rows.sumHeight(r,o+1);f.translate(0,-l)}}),f.restore(),qg.call(this,N),f.restore()}function jc(N,b,e,d){const{draw:m}=this;m.save(),m.attr({fillStyle:"rgba(75, 137, 255, 0.08)"}).fillRect(N,b,e,d),m.restore()}function Da(N,b,e,d,m,f){const{draw:c,data:u}=this,s=b.h,t=b.w,n=f+d,r=m+e;c.save(),c.attr(Zg),(N==="all"||N==="left")&&c.fillRect(0,n,e,s),(N==="all"||N==="top")&&c.fillRect(r,0,t,d);const{sri:i,sci:o,eri:l,eci:a}=u.selector.range;c.attr(Qg()),(N==="all"||N==="left")&&(u.rowEach(b.sri,b.eri,(g,v,h)=>{const w=n+v,y=g;c.line([0,w],[e,w]),i<=y&&y0&&u.rows.isHide(g-1)&&(c.save(),c.attr({strokeStyle:"#c6c6c6"}),c.line([5,w+5],[e-5,w+5]),c.restore())}),c.line([0,s+n],[e,s+n]),c.line([e,n],[e,s+n])),(N==="all"||N==="top")&&(u.colEach(b.sci,b.eci,(g,v,h)=>{const w=r+v,y=g;c.line([w,0],[w,d]),o<=y&&y0&&u.cols.isHide(g-1)&&(c.save(),c.attr({strokeStyle:"#c6c6c6"}),c.line([w+5,5],[w+5,d-5]),c.restore())}),c.line([t+r,0],[t+r,d]),c.line([0,d],[t+r,d])),c.restore()}function eb(N,b){const{draw:e}=this;e.save(),e.attr({fillStyle:"#f4f5f8"}).fillRect(0,0,N,b),e.restore()}function Ba({sri:N,sci:b,eri:e,eci:d,w:m,h:f},c,u,s,t){const{draw:n,data:r}=this,{settings:i}=r;if(n.save(),n.attr(Jg).translate(c+s,u+t),!i.showGrid){n.restore();return}r.rowEach(N,e,(o,l,a)=>{o!==N&&n.line([0,l],[m,l]),o===e&&n.line([0,l+a],[m,l+a])}),r.colEach(b,d,(o,l,a)=>{o!==b&&n.line([l,0],[l,f]),o===d&&n.line([l+a,0],[l+a,f])}),n.restore()}function tb(N,b,e,d){const{draw:m,data:f}=this,c=f.viewWidth()-N,u=f.viewHeight()-b;m.save().translate(N,b).attr({strokeStyle:"rgba(75, 137, 255, .6)"}),m.line([0,d],[c,d]),m.line([e,0],[e,u]),m.restore()}class rb{constructor(b,e){this.el=b,this.draw=new ph(b,e.viewWidth(),e.viewHeight()),this.data=e}resetData(b){this.data=b,this.render()}render(){const{data:b}=this,{rows:e,cols:d}=b,m=d.indexWidth,f=e.height;this.draw.resize(b.viewWidth(),b.viewHeight()),this.clear();const c=b.viewRange(),u=b.freezeTotalWidth(),s=b.freezeTotalHeight(),{x:t,y:n}=b.scroll;Ba.call(this,c,m,f,u,s),Na.call(this,c,m,f,-t,-n),Da.call(this,"all",c,m,f,u,s),eb.call(this,m,f);const[r,i]=b.freeze;if(r>0||i>0){if(r>0){const l=c.clone();l.sri=0,l.eri=r-1,l.h=s,Ba.call(this,l,m,f,u,0),Na.call(this,l,m,f,-t,0),Da.call(this,"top",l,m,f,u,0)}if(i>0){const l=c.clone();l.sci=0,l.eci=i-1,l.w=u,Ba.call(this,l,m,f,0,s),Da.call(this,"left",l,m,f,0,s),Na.call(this,l,m,f,0,-n)}const o=b.freezeViewRange();Ba.call(this,o,m,f,0,0),Da.call(this,"all",o,m,f,0,0),Na.call(this,o,m,f,0,0),tb.call(this,m,f,u,s)}}clear(){this.draw.clear()}}const La=[["A3",11.69,16.54],["A4",8.27,11.69],["A5",5.83,8.27],["B4",9.84,13.9],["B5",6.93,9.84]],mf=["landscape","portrait"];function Ga(N){return parseInt(96*N,10)}function $c(N){N==="cancel"?this.el.hide():this.toPrint()}function nb(N){const{paper:b}=this,{value:e}=N.target,d=La[e];b.w=Ga(d[1]),b.h=Ga(d[2]),this.preview()}function ib(N){const{paper:b}=this,{value:e}=N.target,d=mf[e];b.orientation=d,this.preview()}let sb=class{constructor(b){this.paper={w:Ga(La[0][1]),h:Ga(La[0][2]),padding:50,orientation:mf[0],get width(){return this.orientation==="landscape"?this.h:this.w},get height(){return this.orientation==="landscape"?this.w:this.h}},this.data=b,this.el=$e("div",`${Ze}-print`).children($e("div",`${Ze}-print-bar`).children($e("div","-title").child("Print settings"),$e("div","-right").children($e("div",`${Ze}-buttons`).children(new Di("cancel").on("click",$c.bind(this,"cancel")),new Di("next","primary").on("click",$c.bind(this,"next"))))),$e("div",`${Ze}-print-content`).children(this.contentEl=$e("div","-content"),$e("div","-sider").child($e("form","").children($e("fieldset","").children($e("label","").child(`${Cr("print.size")}`),$e("select","").children(...La.map((e,d)=>$e("option","").attr("value",d).child(`${e[0]} ( ${e[1]}''x${e[2]}'' )`))).on("change",nb.bind(this))),$e("fieldset","").children($e("label","").child(`${Cr("print.orientation")}`),$e("select","").children(...mf.map((e,d)=>$e("option","").attr("value",d).child(`${Cr("print.orientations")[d]}`))).on("change",ib.bind(this))))))).hide()}resetData(b){this.data=b}preview(){const{data:b,paper:e}=this,{width:d,height:m,padding:f}=e,c=d-f*2,u=m-f*2,s=b.contentRange(),t=parseInt(s.h/u,10)+1,n=c/s.w;let r=f;const i=f;n>1&&(r+=(c-s.w)/2);let o=0,l=0;this.contentEl.html(""),this.canvases=[];const a={sri:0,sci:0,eri:0,eci:0};for(let g=0;g{Ka(S,b,I,F,E)}),S.restore(),a.sri=a.eri,a.sci=a.eci,l+=h,this.contentEl.child($e("div",`${Ze}-canvas-card-wraper`).child(w.child(y)))}this.el.show()}toPrint(){this.el.hide();const{paper:b}=this,e=$e("iframe","").hide(),{el:d}=e;window.document.body.appendChild(d);const{contentWindow:m}=d,f=m.document,c=document.createElement("style");c.innerHTML=` + @page { size: ${b.width}px ${b.height}px; }; + canvas { + page-break-before: auto; + page-break-after: always; + image-rendering: pixelated; + }; + `,f.head.appendChild(c),this.canvases.forEach(u=>{const s=u.cloneNode(!1);s.getContext("2d").drawImage(u,0,0),f.body.appendChild(s)}),m.print()}};const ab=[{key:"copy",title:Wt("contextmenu.copy"),label:"Ctrl+C"},{key:"cut",title:Wt("contextmenu.cut"),label:"Ctrl+X"},{key:"paste",title:Wt("contextmenu.paste"),label:"Ctrl+V"},{key:"paste-value",title:Wt("contextmenu.pasteValue"),label:"Ctrl+Shift+V"},{key:"paste-format",title:Wt("contextmenu.pasteFormat"),label:"Ctrl+Alt+V"},{key:"divider"},{key:"insert-row",title:Wt("contextmenu.insertRow")},{key:"insert-column",title:Wt("contextmenu.insertColumn")},{key:"divider"},{key:"delete-row",title:Wt("contextmenu.deleteRow")},{key:"delete-column",title:Wt("contextmenu.deleteColumn")},{key:"delete-cell-text",title:Wt("contextmenu.deleteCellText")},{key:"hide",title:Wt("contextmenu.hide")},{key:"divider"},{key:"validation",title:Wt("contextmenu.validation")},{key:"divider"},{key:"cell-printable",title:Wt("contextmenu.cellprintable")},{key:"cell-non-printable",title:Wt("contextmenu.cellnonprintable")},{key:"divider"},{key:"cell-editable",title:Wt("contextmenu.celleditable")},{key:"cell-non-editable",title:Wt("contextmenu.cellnoneditable")}];function ob(N){return N.key==="divider"?$e("div",`${Ze}-item divider`):$e("div",`${Ze}-item`).on("click",()=>{this.itemClick(N.key),this.hide()}).children(N.title(),$e("div","label").child(N.label||""))}function fb(){return ab.map(N=>ob.call(this,N))}let lb=class{constructor(b,e=!1){this.menuItems=fb.call(this),this.el=$e("div",`${Ze}-contextmenu`).children(...this.menuItems).hide(),this.viewFn=b,this.itemClick=()=>{},this.isHide=e,this.setMode("range")}setMode(b){const e=this.menuItems[12];b==="row-col"?e.show():e.hide()}hide(){const{el:b}=this;b.hide(),gs(b)}setPosition(b,e){if(this.isHide)return;const{el:d}=this,{width:m}=d.show().offset(),f=this.viewFn(),c=f.height/2;let u=b;f.width-b<=m&&(u-=m),d.css("left",`${u}px`),e>c?d.css("bottom",`${f.height-e}px`).css("max-height",`${e}px`).css("top","auto"):d.css("top",`${e}px`).css("max-height",`${f.height-e}px`).css("bottom","auto"),Ws(d)}};function cb(N,b){if(b.classList.contains("active"))return;const{left:e,top:d,width:m,height:f}=b.getBoundingClientRect(),c=$e("div",`${Ze}-tooltip`).html(N).show();document.body.appendChild(c.el);const u=c.box();c.css("left",`${e+m/2-u.width/2}px`).css("top",`${d+f+2}px`),tn(b,"mouseleave",()=>{document.body.contains(c.el)&&document.body.removeChild(c.el)}),tn(b,"click",()=>{document.body.contains(c.el)&&document.body.removeChild(c.el)})}class Ef{constructor(b,e,d){this.tip=Cr(`toolbar.${b.replace(/-[a-z]/g,m=>m[1].toUpperCase())}`),e&&(this.tip+=` (${e})`),this.tag=b,this.shortcut=e,this.value=d,this.el=this.element(),this.change=()=>{}}element(){const{tip:b}=this;return $e("div",`${Ze}-toolbar-btn`).on("mouseenter",e=>{cb(b,e.target)}).attr("data-tooltip",b)}setState(){}}class Xn extends Ef{dropdown(){}getValue(b){return b}element(){const{tag:b}=this;return this.dd=this.dropdown(),this.dd.change=e=>this.change(b,this.getValue(e)),super.element().child(this.dd)}setState(b){b&&(this.value=b,this.dd.setTitle(b))}}class Wn extends Li{constructor(b,e,d,m,...f){super("div",`${Ze}-dropdown ${m}`),this.title=b,this.change=()=>{},this.headerClick=()=>{},typeof b=="string"?this.title=$e("div",`${Ze}-dropdown-title`).child(b):d&&this.title.addClass("arrow-left"),this.contentEl=$e("div",`${Ze}-dropdown-content`).css("width",e).hide(),this.setContentChildren(...f),this.headerEl=$e("div",`${Ze}-dropdown-header`),this.headerEl.on("click",()=>{this.contentEl.css("display")!=="block"?this.show():this.hide()}).children(this.title,d?$e("div",`${Ze}-icon arrow-right`).child($e("div",`${Ze}-icon-img arrow-down`)):""),this.children(this.headerEl,this.contentEl)}setContentChildren(...b){this.contentEl.html(""),b.length>0&&this.contentEl.children(...b)}setTitle(b){this.title.html(b),this.hide()}show(){const{contentEl:b}=this;b.show(),this.parent().active(),Ws(this.parent(),()=>{this.hide()})}hide(){this.parent().active(!1),this.contentEl.hide(),gs(this.parent())}}function hb(N){return $e("div",`${Ze}-item`).child(new jr(N))}class yh extends Wn{constructor(b,e){const d=new jr(`align-${e}`),m=b.map(f=>hb(`align-${f}`).on("click",()=>{this.setTitle(f),this.change(f)}));super(d,"auto",!0,"bottom-left",...m)}setTitle(b){this.title.setName(`align-${b}`),this.hide()}}class ub extends Xn{constructor(b){super("align","",b)}dropdown(){const{value:b}=this;return new yh(["left","center","right"],b)}}class db extends Xn{constructor(b){super("valign","",b)}dropdown(){const{value:b}=this;return new yh(["top","middle","bottom"],b)}}class oi extends Ef{element(){const{tag:b}=this;return super.element().child(new jr(b)).on("click",()=>this.click())}click(){this.change(this.tag,this.toggle())}setState(b){this.el.active(b)}toggle(){return this.el.toggle()}active(){return this.el.hasClass("active")}}class pb extends oi{constructor(){super("autofilter")}setState(){}}class mb extends oi{constructor(){super("font-bold","Ctrl+B")}}class gb extends oi{constructor(){super("font-italic","Ctrl+I")}}class bb extends oi{constructor(){super("strike","Ctrl+U")}}class vb extends oi{constructor(){super("underline","Ctrl+U")}}const yb=["#ffffff","#000100","#e7e5e6","#445569","#5b9cd6","#ed7d31","#a5a5a5","#ffc001","#4371c6","#71ae47"],wb=[["#f2f2f2","#7f7f7f","#d0cecf","#d5dce4","#deeaf6","#fce5d5","#ededed","#fff2cd","#d9e2f3","#e3efd9"],["#d8d8d8","#595959","#afabac","#adb8ca","#bdd7ee","#f7ccac","#dbdbdb","#ffe59a","#b3c6e7","#c5e0b3"],["#bfbfbf","#3f3f3f","#756f6f","#8596b0","#9cc2e6","#f4b184","#c9c9c9","#fed964","#8eaada","#a7d08c"],["#a5a5a5","#262626","#3a3839","#333f4f","#2e75b5","#c45a10","#7b7b7b","#bf8e01","#2f5596","#538136"],["#7f7f7f","#0c0c0c","#171516","#222a35","#1f4e7a","#843c0a","#525252","#7e6000","#203864","#365624"]],xb=["#c00000","#fe0000","#fdc101","#ffff01","#93d051","#00b04e","#01b0f1","#0170c1","#012060","#7030a0"];function Qo(N){return $e("td","").child($e("div",`${Ze}-color-palette-cell`).on("click.stop",()=>this.change(N)).css("background-color",N))}class _b{constructor(){this.el=$e("div",`${Ze}-color-palette`),this.change=()=>{};const b=$e("table","").children($e("tbody","").children($e("tr",`${Ze}-theme-color-placeholders`).children(...yb.map(e=>Qo.call(this,e))),...wb.map(e=>$e("tr",`${Ze}-theme-colors`).children(...e.map(d=>Qo.call(this,d)))),$e("tr",`${Ze}-standard-colors`).children(...xb.map(e=>Qo.call(this,e)))));this.el.child(b)}}class Cf extends Wn{constructor(b,e){const d=new jr(b).css("height","16px").css("border-bottom",`3px solid ${e}`),m=new _b;m.change=f=>{this.setTitle(f),this.change(f)},super(d,"auto",!1,"bottom-left",m.el)}setTitle(b){this.title.css("border-color",b),this.hide()}}const Sb=[["thin",''],["medium",''],["thick",''],["dashed",''],["dotted",'']];class Eb extends Wn{constructor(b){const e=new jr("line-type");let d=0;const m=Sb.map((f,c)=>$e("div",`${Ze}-item state ${b===f[0]?"checked":""}`).on("click",()=>{m[d].toggle("checked"),m[c].toggle("checked"),d=c,this.hide(),this.change(f)}).child($e("div",`${Ze}-line-type`).html(f[1])));super(e,"auto",!1,"bottom-left",...m)}}function Hc(...N){return $e("table","").child($e("tbody","").children(...N))}function zc(N){return $e("td","").child($e("div",`${Ze}-border-palette-cell`).child(new jr(`border-${N}`)).on("click",()=>{this.mode=N;const{mode:b,style:e,color:d}=this;this.change({mode:b,style:e,color:d})}))}class Cb{constructor(){this.color="#000",this.style="thin",this.mode="all",this.change=()=>{},this.ddColor=new Cf("line-color",this.color),this.ddColor.change=e=>{this.color=e},this.ddType=new Eb(this.style),this.ddType.change=([e])=>{this.style=e},this.el=$e("div",`${Ze}-border-palette`);const b=Hc($e("tr","").children($e("td",`${Ze}-border-palette-left`).child(Hc($e("tr","").children(...["all","inside","horizontal","vertical","outside"].map(e=>zc.call(this,e))),$e("tr","").children(...["left","top","right","bottom","none"].map(e=>zc.call(this,e))))),$e("td",`${Ze}-border-palette-right`).children($e("div",`${Ze}-toolbar-btn`).child(this.ddColor.el),$e("div",`${Ze}-toolbar-btn`).child(this.ddType.el))));this.el.child(b)}}class Tb extends Wn{constructor(){const b=new jr("border-all"),e=new Cb;e.change=d=>{this.change(d),this.hide()},super(b,"auto",!1,"bottom-left",e.el)}}class Ab extends Xn{constructor(){super("border")}dropdown(){return new Tb}}class Ja extends Ef{element(){return super.element().child(new jr(this.tag)).on("click",()=>this.change(this.tag))}setState(b){this.el.disabled(b)}}class kb extends Ja{constructor(){super("clearformat")}}class Mb extends oi{constructor(){super("paintformat")}setState(){}}class Rb extends Xn{constructor(b){super("color",void 0,b)}dropdown(){const{tag:b,value:e}=this;return new Cf(b,e)}}class Ib extends Xn{constructor(b){super("bgcolor",void 0,b)}dropdown(){const{tag:b,value:e}=this;return new Cf(b,e)}}class Ob extends Wn{constructor(){const b=pf.map(e=>$e("div",`${Ze}-item`).on("click",()=>{this.setTitle(`${e.pt}`),this.change(e)}).child(`${e.pt}`));super("10","60px",!0,"bottom-left",...b)}}let Fb=class extends Xn{constructor(){super("font-size")}getValue(b){return b.pt}dropdown(){return new Ob}};class Pb extends Wn{constructor(){const b=Lc.map(e=>$e("div",`${Ze}-item`).on("click",()=>{this.setTitle(e.title),this.change(e)}).child(e.title));super(Lc[0].title,"160px",!0,"bottom-left",...b)}}class Nb extends Xn{constructor(){super("font-name")}getValue(b){return b.key}dropdown(){return new Pb}}class Db extends Wn{constructor(){let b=Hs.slice(0);b.splice(2,0,{key:"divider"}),b.splice(8,0,{key:"divider"}),b=b.map(e=>{const d=$e("div",`${Ze}-item`);return e.key==="divider"?d.addClass("divider"):(d.child(e.title()).on("click",()=>{this.setTitle(e.title()),this.change(e)}),e.label&&d.child($e("div","label").html(e.label))),d}),super("Normal","220px",!0,"bottom-left",...b)}setTitle(b){for(let e=0;e$e("div",`${Ze}-item`).on("click",()=>{this.hide(),this.change(e)}).child(e.key));super(new jr("formula"),"180px",!0,"bottom-left",...b)}}class jb extends Xn{constructor(){super("formula")}getValue(b){return b.key}dropdown(){return new Lb}}class $b extends oi{constructor(){super("freeze")}}class Hb extends oi{constructor(){super("merge")}setState(b,e){this.el.active(b).disabled(e)}}class zb extends Ja{constructor(){super("redo","Ctrl+Y")}}class Ub extends Ja{constructor(){super("undo","Ctrl+Z")}}class Xb extends Ja{constructor(){super("print","Ctrl+P")}}class Wb extends oi{constructor(){super("textwrap")}}let Vb=class extends Wn{constructor(){const b=new jr("ellipsis"),e=$e("div",`${Ze}-toolbar-more`);super(b,"auto",!1,"bottom-right",e),this.moreBtns=e,this.contentEl.css("max-width","420px")}};class Kb extends Xn{constructor(){super("more"),this.el.hide()}dropdown(){return new Vb}show(){this.el.show()}hide(){this.el.hide()}}function ps(){return $e("div",`${Ze}-toolbar-divider`)}function Gb(){this.btns2=[],this.items.forEach(N=>{if(Array.isArray(N))N.forEach(({el:b})=>{const e=b.box(),{marginLeft:d,marginRight:m}=b.computedStyle();this.btns2.push([b,e.width+parseInt(d,10)+parseInt(m,10)])});else{const b=N.box(),{marginLeft:e,marginRight:d}=N.computedStyle();this.btns2.push([N,b.width+parseInt(e,10)+parseInt(d,10)])}})}function Uc(){const{el:N,btns:b,moreEl:e,btns2:d}=this,{moreBtns:m,contentEl:f}=e.dd;N.css("width",`${this.widthFn()-60}px`);const c=N.box();let u=160,s=12;const t=[],n=[];d.forEach(([r,i],o)=>{u+=i,o===d.length-1||u0?e.show():e.hide()}class Yb{constructor(b,e,d=!1){this.data=b,this.change=()=>{},this.widthFn=e,this.isHide=d;const m=b.defaultStyle();this.items=[[this.undoEl=new Ub,this.redoEl=new zb,new Xb,this.paintformatEl=new Mb,this.clearformatEl=new kb],ps(),[this.formatEl=new Bb],ps(),[this.fontEl=new Nb,this.fontSizeEl=new Fb],ps(),[this.boldEl=new mb,this.italicEl=new gb,this.underlineEl=new vb,this.strikeEl=new bb,this.textColorEl=new Rb(m.color)],ps(),[this.fillColorEl=new Ib(m.bgcolor),this.borderEl=new Ab,this.mergeEl=new Hb],ps(),[this.alignEl=new ub(m.align),this.valignEl=new db(m.valign),this.textwrapEl=new Wb],ps(),[this.freezeEl=new $b,this.autofilterEl=new pb,this.formulaEl=new jb,this.moreEl=new Kb]],this.el=$e("div",`${Ze}-toolbar`),this.btns=$e("div",`${Ze}-toolbar-btns`),this.items.forEach(f=>{Array.isArray(f)?f.forEach(c=>{this.btns.child(c.el),c.change=(...u)=>{this.change(...u)}}):this.btns.child(f.el)}),this.el.child(this.btns),d?this.el.hide():(this.reset(),setTimeout(()=>{Gb.call(this),Uc.call(this)},0),tn(window,"resize",()=>{Uc.call(this)}))}paintformatActive(){return this.paintformatEl.active()}paintformatToggle(){this.paintformatEl.toggle()}trigger(b){this[`${b}El`].click()}resetData(b){this.data=b,this.reset()}reset(){if(this.isHide)return;const{data:b}=this,e=b.getSelectedCellStyle();this.undoEl.setState(!b.canUndo()),this.redoEl.setState(!b.canRedo()),this.mergeEl.setState(b.canUnmerge(),!b.selector.multiple()),this.autofilterEl.setState(!b.canAutofilter());const{font:d,format:m}=e;this.formatEl.setState(m),this.fontEl.setState(d.name),this.fontSizeEl.setState(d.size),this.boldEl.setState(d.bold),this.italicEl.setState(d.italic),this.underlineEl.setState(e.underline),this.strikeEl.setState(e.strike),this.textColorEl.setState(e.color),this.fillColorEl.setState(e.bgcolor),this.alignEl.setState(e.align),this.valignEl.setState(e.valign),this.textwrapEl.setState(e.textwrap),this.freezeEl.setState(b.freezeIsActive())}}class Zb{constructor(b,e,d="600px"){this.title=b,this.el=$e("div",`${Ze}-modal`).css("width",d).children($e("div",`${Ze}-modal-header`).children(new jr("close").on("click.stop",()=>this.hide()),this.title),$e("div",`${Ze}-modal-content`).children(...e)).hide()}show(){this.dimmer=$e("div",`${Ze}-dimmer active`),document.body.appendChild(this.dimmer.el);const{width:b,height:e}=this.el.show().box(),{clientHeight:d,clientWidth:m}=document.documentElement;this.el.offset({left:(m-b)/2,top:(d-e)/3}),window.xkeydownEsc=f=>{f.keyCode===27&&this.hide()},tn(window,"keydown",window.xkeydownEsc)}hide(){this.el.hide(),document.body.removeChild(this.dimmer.el),Xa(window,"keydown",window.xkeydownEsc),delete window.xkeydownEsc}}class ms{constructor(b,e){this.vchange=()=>{},this.el=$e("div",`${Ze}-form-input`),this.input=$e("input","").css("width",b).on("input",d=>this.vchange(d)).attr("placeholder",e),this.el.child(this.input)}focus(){setTimeout(()=>{this.input.el.focus()},10)}hint(b){this.input.attr("placeholder",b)}val(b){return this.input.val(b)}}class qo{constructor(b,e,d,m=c=>c,f=()=>{}){this.key=b,this.getTitle=m,this.vchange=()=>{},this.el=$e("div",`${Ze}-form-select`),this.suggest=new uh(e.map(c=>({key:c,title:this.getTitle(c)})),c=>{this.itemClick(c.key),f(c.key),this.vchange(c.key)},d,this.el),this.el.children(this.itemEl=$e("div","input-text").html(this.getTitle(b)),this.suggest.el).on("click",()=>this.show())}show(){this.suggest.search("")}itemClick(b){this.key=b,this.itemEl.html(this.getTitle(b))}val(b){return b!==void 0?(this.key=b,this.itemEl.html(this.getTitle(b)),this):this.key}}const Jb={number:/(^\d+$)|(^\d+(\.\d{0,4})?$)/,date:/^\d{4}-\d{1,2}-\d{1,2}$/};class yi{constructor(b,e,d,m){this.label="",this.rule=e,d&&(this.label=$e("label","label").css("width",`${m}px`).html(d)),this.tip=$e("div","tip").child("tip").hide(),this.input=b,this.input.vchange=()=>this.validate(),this.el=$e("div",`${Ze}-form-field`).children(this.label,b.el,this.tip)}isShow(){return this.el.css("display")!=="none"}show(){this.el.show()}hide(){return this.el.hide(),this}val(b){return this.input.val(b)}hint(b){this.input.hint(b)}validate(){const{input:b,rule:e,tip:d,el:m}=this,f=b.val();return e.required&&/^\s*$/.test(f)?(d.html(Cr("validation.required")),m.addClass("error"),!1):(e.type||e.pattern)&&!(e.pattern||Jb[e.type]).test(f)?(d.html(Cr("validation.notMatch")),m.addClass("error"),!1):(m.removeClass("error"),!0)}}const Xc=100;class Qb extends Zb{constructor(){const b=new yi(new qo("cell",["cell"],"100%",t=>Cr(`dataValidation.modeType.${t}`)),{required:!0},`${Cr("dataValidation.range")}:`,Xc),e=new yi(new ms("120px","E3 or E3:F12"),{required:!0,pattern:/^([A-Z]{1,2}[1-9]\d*)(:[A-Z]{1,2}[1-9]\d*)?$/}),d=new yi(new qo("list",["list","number","date","phone","email"],"100%",t=>Cr(`dataValidation.type.${t}`),t=>this.criteriaSelected(t)),{required:!0},`${Cr("dataValidation.criteria")}:`,Xc),m=new yi(new qo("be",["be","nbe","eq","neq","lt","lte","gt","gte"],"160px",t=>Cr(`dataValidation.operator.${t}`),t=>this.criteriaOperatorSelected(t)),{required:!0}).hide(),f=new yi(new ms("70px","10"),{required:!0}).hide(),c=new yi(new ms("70px","100"),{required:!0,type:"number"}).hide(),u=new yi(new ms("120px","a,b,c"),{required:!0}),s=new yi(new ms("70px","10"),{required:!0,type:"number"}).hide();super(Cr("contextmenu.validation"),[$e("div",`${Ze}-form-fields`).children(b.el,e.el),$e("div",`${Ze}-form-fields`).children(d.el,m.el,f.el,c.el,s.el,u.el),$e("div",`${Ze}-buttons`).children(new Di("cancel").on("click",()=>this.btnClick("cancel")),new Di("remove").on("click",()=>this.btnClick("remove")),new Di("save","primary").on("click",()=>this.btnClick("save")))]),this.mf=b,this.rf=e,this.cf=d,this.of=m,this.minvf=f,this.maxvf=c,this.vf=s,this.svf=u,this.change=()=>{}}showVf(b){const e=b==="date"?"2018-11-12":"10",{vf:d}=this;d.input.hint(e),d.show()}criteriaSelected(b){const{of:e,minvf:d,maxvf:m,vf:f,svf:c}=this;b==="date"||b==="number"?(e.show(),d.rule.type=b,m.rule.type=b,b==="date"?(d.hint("2018-11-12"),m.hint("2019-11-12")):(d.hint("10"),m.hint("100")),d.show(),m.show(),f.hide(),c.hide()):(b==="list"?c.show():c.hide(),f.hide(),e.hide(),d.hide(),m.hide())}criteriaOperatorSelected(b){if(!b)return;const{minvf:e,maxvf:d,vf:m}=this;if(b==="be"||b==="nbe")e.show(),d.show(),m.hide();else{const f=this.cf.val();m.rule.type=f,f==="date"?m.hint("2018-11-12"):m.hint("10"),m.show(),e.hide(),d.hide()}}btnClick(b){if(b==="cancel")this.hide();else if(b==="remove")this.change("remove"),this.hide();else if(b==="save"){const e=["mf","rf","cf","of","svf","vf","minvf","maxvf"];for(let s=0;sthis.itemClick(N))}function qb(N){const{filterbEl:b,filterValues:e}=this;b.html(""),Object.keys(N).forEach((m,f)=>{const c=N[m],u=e.includes(m)?"checked":"";b.child($e("div",`${Ze}-item state ${u}`).on("click.stop",()=>this.filterClick(f,m)).children(m===""?Cr("filter.empty"):m,$e("div","label").html(`(${c})`)))})}function Vc(){const{filterhEl:N,filterValues:b,values:e}=this;N.html(`${b.length} / ${e.length}`),N.checked(b.length===e.length)}class ev{constructor(){this.filterbEl=$e("div",`${Ze}-body`),this.filterhEl=$e("div",`${Ze}-header state`).on("click.stop",()=>this.filterClick(0,"all")),this.el=$e("div",`${Ze}-sort-filter`).children(this.sortAscEl=Wc.call(this,"asc"),this.sortDescEl=Wc.call(this,"desc"),wh("divider"),$e("div",`${Ze}-filter`).children(this.filterhEl,this.filterbEl),$e("div",`${Ze}-buttons`).children(new Di("cancel").on("click",()=>this.btnClick("cancel")),new Di("ok","primary").on("click",()=>this.btnClick("ok")))).hide(),this.ci=null,this.sortDesc=null,this.values=null,this.filterValues=[]}btnClick(b){if(b==="ok"){const{ci:e,sort:d,filterValues:m}=this;this.ok&&this.ok(e,d,"in",m)}this.hide()}itemClick(b){this.sort=b;const{sortAscEl:e,sortDescEl:d}=this;e.checked(b==="asc"),d.checked(b==="desc")}filterClick(b,e){const{filterbEl:d,filterValues:m,values:f}=this,c=d.children();e==="all"?c.length===m.length?(this.filterValues=[],c.forEach(u=>$e(u).checked(!1))):(this.filterValues=Array.from(f),c.forEach(u=>$e(u).checked(!0))):$e(c[b]).toggle("checked")?m.push(e):m.splice(m.findIndex(s=>s===e),1),Vc.call(this)}set(b,e,d,m){this.ci=b;const{sortAscEl:f,sortDescEl:c}=this;m!==null?(this.sort=m.order,f.checked(m.asc()),c.checked(m.desc())):(this.sortDesc=null,f.checked(!1),c.checked(!1)),this.values=Object.keys(e),this.filterValues=d?Array.from(d.value):Object.keys(e),qb.call(this,e,d),Vc.call(this)}setOffset(b){this.el.offset(b).show();let e=1;Ws(this.el,()=>{e<=0&&this.hide(),e-=1})}show(){this.el.show()}hide(){this.el.hide(),gs(this.el)}}function xh(N,b){const e=$e("div",`${Ze}-toast`),d=$e("div",`${Ze}-dimmer active`),m=()=>{document.body.removeChild(e.el),document.body.removeChild(d.el)};e.children($e("div",`${Ze}-toast-header`).children(new jr("close").on("click.stop",()=>m()),N),$e("div",`${Ze}-toast-content`).html(b)),document.body.appendChild(e.el),document.body.appendChild(d.el);const{width:f,height:c}=e.box(),{clientHeight:u,clientWidth:s}=document.documentElement;e.offset({left:(s-f)/2,top:(u-c)/3})}function ef(N,b){let e;return(...d)=>{const m=this,f=d;e||(e=setTimeout(()=>{e=null,N.apply(m,f)},b))}}function tv(){const{data:N,verticalScrollbar:b,horizontalScrollbar:e}=this,{l:d,t:m,left:f,top:c,width:u,height:s}=N.getSelectedRect(),t=this.getTableOffset();if(Math.abs(f)+u>t.width)e.move({left:d+u-t.width});else{const n=N.freezeTotalWidth();ft.height)b.move({top:m+s-t.height-1});else{const n=N.freezeTotalHeight();c0&&(u-=1):b==="right"?(t!==u&&(u=t),u0&&(c-=1):b==="down"?(s!==c&&(c=s),cs.indexWidth&&e>u.height){d.hide(),m.hide();return}const t=f.box(),n=c.getCellRectByXY(N.offsetX,N.offsetY);n.ri>=0&&n.ci===-1?(n.width=s.indexWidth,d.show(n,{width:t.width}),u.isHide(n.ri-1)?d.showUnhide(n.ri):d.hideUnhide()):d.hide(),n.ri===-1&&n.ci>=0?(n.height=u.height,m.show(n,{height:t.height}),s.isHide(n.ci-1)?m.showUnhide(n.ci):m.hideUnhide()):m.hide()}function nv(N){const{verticalScrollbar:b,horizontalScrollbar:e,data:d}=this,{top:m}=b.scroll(),{left:f}=e.scroll(),{rows:c,cols:u}=d,{deltaY:s,deltaX:t}=N,n=(g,v)=>{let h=g,w=0;do w=v(h),h+=1;while(w<=0);return w},r=g=>{if(g>0){const v=d.scroll.ri+1;if(vc.getHeight(w));b.move({top:m+h-1})}}else{const v=d.scroll.ri-1;if(v>=0){const h=n(v,w=>c.getHeight(w));b.move({top:v===0?0:m-h})}}},i=g=>{if(g>0){const v=d.scroll.ci+1;if(vu.getWidth(w));e.move({left:f+h-1})}}else{const v=d.scroll.ci-1;if(v>=0){const h=n(v,w=>u.getWidth(w));e.move({left:v===0?0:f-h})}}},o=Math.abs(s),l=Math.abs(t),a=Math.max(o,l);/Firefox/i.test(window.navigator.userAgent)&&ef(r(N.detail),50),a===l&&ef(i(t),50),a===o&&ef(r(s),50)}function iv(N,b){const{verticalScrollbar:e,horizontalScrollbar:d}=this,{top:m}=e.scroll(),{left:f}=d.scroll();N==="left"||N==="right"?d.move({left:f-b}):(N==="up"||N==="down")&&e.move({top:m-b})}function Tf(){const{data:N,verticalScrollbar:b}=this,{height:e}=this.getTableOffset(),d=N.exceptRowTotalHeight(0,-1);b.set(e,N.rows.totalHeight()-d)}function Af(){const{data:N,horizontalScrollbar:b}=this,{width:e}=this.getTableOffset();N&&b.set(e,N.cols.totalWidth())}function sv(){const{selector:N,data:b,editor:e}=this,[d,m]=b.freeze;if(d>0||m>0){const f=b.freezeTotalWidth(),c=b.freezeTotalHeight();e.setFreezeLengths(f,c)}N.resetAreaOffset()}function en(){const{tableEl:N,overlayerEl:b,overlayerCEl:e,table:d,toolbar:m,selector:f,el:c}=this,u=this.getTableOffset(),s=this.getRect();N.attr(s),b.offset(s),e.offset(u),c.css("width",`${s.width}px`),Tf.call(this),Af.call(this),sv.call(this),d.render(),m.reset(),f.reset()}function Vs(){const{data:N,selector:b}=this;N.clearClipboard(),b.hideClipboard()}function gf(){const{data:N,selector:b}=this;N.copy(),N.copyToSystemClipboard(),b.showClipboard()}function Kc(){const{data:N,selector:b}=this;N.cut(),b.showClipboard()}function zs(N,b){const{data:e}=this;if(e.settings.mode!=="read"){if(e.paste(N,d=>xh("Tip",d)))en.call(this);else if(b){const d=b.clipboardData.getData("text/plain");this.data.pasteFromText(d),en.call(this)}}}function av(){this.data.hideRowsOrCols(),en.call(this)}function Gc(N,b){this.data.unhideRowsOrCols(N,b),en.call(this)}function ov(){const{data:N}=this;N.autofilter(),en.call(this)}function fv(){const{toolbar:N}=this;N.paintformatActive()&&(zs.call(this,"format"),Vs.call(this),N.paintformatToggle())}function Yc(N){const{selector:b,data:e,table:d,sortFilter:m}=this,{offsetX:f,offsetY:c}=N,u=N.target.className===`${Ze}-selector-corner`,s=e.getCellRectByXY(f,c),{left:t,top:n,width:r,height:i}=s;let{ri:o,ci:l}=s;const{autoFilter:a}=e;if(a.includes(o,l)&&t+r-20e.rows.getCell(v,h));m.hide(),m.set(l,g,a.getFilter(l),a.getSort(l)),m.setOffset({left:t,top:n+i+2});return}N.shiftKey||(u?b.showAutofill(o,l):Bi.call(this,!1,o,l),oh(window,g=>{({ri:o,ci:l}=e.getCellRectByXY(g.offsetX,g.offsetY)),u?b.showAutofill(o,l):g.buttons===1&&!g.shiftKey&&Bi.call(this,!0,o,l,!0,!0)},()=>{u&&b.arange&&e.settings.mode!=="read"&&e.autofill(b.arange,"all",g=>xh("Tip",g))&&d.render(),b.hideAutofill(),fv.call(this)})),!u&&N.buttons===1&&N.shiftKey&&Bi.call(this,!0,o,l)}function Ks(){const{editor:N,data:b}=this,e=b.getSelectedRect(),d=this.getTableOffset();let m="top";e.top>d.height/2&&(m="bottom"),N.setOffset(e,m)}function Us(){const{editor:N,data:b}=this;b.settings.mode!=="read"&&(Ks.call(this),N.setCell(b.getSelectedCell(),b.getSelectedValidator()),Vs.call(this))}function lv(N){const{data:b,table:e,selector:d}=this;b.scrolly(N,()=>{d.resetBRLAreaOffset(),Ks.call(this),e.render()})}function cv(N){const{data:b,table:e,selector:d}=this;b.scrollx(N,()=>{d.resetBRTAreaOffset(),Ks.call(this),e.render()})}function hv(N,b){const{ri:e}=N,{table:d,selector:m,data:f}=this;f.rows.setHeight(e,b),d.render(),m.resetAreaOffset(),Tf.call(this),Ks.call(this)}function uv(N,b){const{ci:e}=N,{table:d,selector:m,data:f}=this;f.cols.setWidth(e,b),d.render(),m.resetAreaOffset(),Af.call(this),Ks.call(this)}function tf(N,b="finished"){const{data:e,table:d}=this;if(e.settings.mode==="read")return;e.setSelectedCellText(N,b);const{ri:m,ci:f}=e.selector;b==="finished"?d.render():this.trigger("cell-edited",N,m,f)}function ja(N){const{data:b}=this;b.settings.mode!=="read"&&(N==="insert-row"?b.insert("row"):N==="delete-row"?b.delete("row"):N==="insert-column"?b.insert("column"):N==="delete-column"?b.delete("column"):N==="delete-cell"?b.deleteCell():N==="delete-cell-format"?b.deleteCell("format"):N==="delete-cell-text"?b.deleteCell("text"):N==="cell-printable"?b.setSelectedCellAttr("printable",!0):N==="cell-non-printable"?b.setSelectedCellAttr("printable",!1):N==="cell-editable"?b.setSelectedCellAttr("editable",!0):N==="cell-non-editable"&&b.setSelectedCellAttr("editable",!1),Vs.call(this),en.call(this))}function dv(N,b){const{data:e}=this;if(N==="undo")this.undo();else if(N==="redo")this.redo();else if(N==="print")this.print.preview();else if(N==="paintformat")b===!0?gf.call(this):Vs.call(this);else if(N==="clearformat")ja.call(this,"delete-cell-format");else if(N!=="link"){if(N!=="chart")if(N==="autofilter")ov.call(this);else if(N==="freeze")if(b){const{ri:d,ci:m}=e.selector;this.freeze(d,m)}else this.freeze(0,0);else e.setSelectedCellAttr(N,b),N==="formula"&&!e.selector.multiple()&&Us.call(this),en.call(this)}}function pv(N,b,e,d){this.data.setAutoFilter(N,b,e,d),en.call(this)}function mv(){const{selector:N,overlayerEl:b,rowResizer:e,colResizer:d,verticalScrollbar:m,horizontalScrollbar:f,editor:c,contextMenu:u,toolbar:s,modalValidation:t,sortFilter:n}=this;b.on("mousemove",r=>{rv.call(this,r)}).on("mousedown",r=>{c.clear(),u.hide(),r.buttons===2?(this.data.xyInSelectedRect(r.offsetX,r.offsetY)||Yc.call(this,r),u.setPosition(r.offsetX,r.offsetY),r.stopPropagation()):r.detail===2?Us.call(this):Yc.call(this,r)}).on("mousewheel.stop",r=>{nv.call(this,r)}).on("mouseout",r=>{const{offsetX:i,offsetY:o}=r;o<=0&&d.hide(),i<=0&&e.hide()}),N.inputChange=r=>{tf.call(this,r,"input"),Us.call(this)},_g(b.el,{move:(r,i)=>{iv.call(this,r,i)}}),s.change=(r,i)=>dv.call(this,r,i),n.ok=(r,i,o,l)=>pv.call(this,r,i,o,l),e.finishedFn=(r,i)=>{hv.call(this,r,i)},d.finishedFn=(r,i)=>{uv.call(this,r,i)},e.unhideFn=r=>{Gc.call(this,"row",r)},d.unhideFn=r=>{Gc.call(this,"col",r)},m.moveFn=(r,i)=>{lv.call(this,r,i)},f.moveFn=(r,i)=>{cv.call(this,r,i)},c.change=(r,i)=>{tf.call(this,i,r)},t.change=(r,...i)=>{r==="save"?this.data.addValidation(...i):this.data.removeValidation()},u.itemClick=r=>{r==="validation"?t.setValue(this.data.getSelectedValidation()):r==="copy"?gf.call(this):r==="cut"?Kc.call(this):r==="paste"?zs.call(this,"all"):r==="paste-value"?zs.call(this,"text"):r==="paste-format"?zs.call(this,"format"):r==="hide"?av.call(this):ja.call(this,r)},tn(window,"resize",()=>{this.reload()}),tn(window,"click",r=>{this.focusing=b.contains(r.target)}),tn(window,"paste",r=>{this.focusing&&(zs.call(this,"all",r),r.preventDefault())}),tn(window,"keydown",r=>{if(!this.focusing)return;const i=r.keyCode||r.which,{key:o,ctrlKey:l,shiftKey:a,metaKey:g}=r;if(l||g)switch(i){case 90:this.undo(),r.preventDefault();break;case 89:this.redo(),r.preventDefault();break;case 67:gf.call(this),r.preventDefault();break;case 88:Kc.call(this),r.preventDefault();break;case 85:s.trigger("underline"),r.preventDefault();break;case 86:break;case 37:zn.call(this,a,"row-first"),r.preventDefault();break;case 38:zn.call(this,a,"col-first"),r.preventDefault();break;case 39:zn.call(this,a,"row-last"),r.preventDefault();break;case 40:zn.call(this,a,"col-last"),r.preventDefault();break;case 32:Bi.call(this,!1,-1,this.data.selector.ci,!1),r.preventDefault();break;case 66:s.trigger("bold");break;case 73:s.trigger("italic");break}else{switch(i){case 32:a&&Bi.call(this,!1,this.data.selector.ri,-1,!1);break;case 27:u.hide(),Vs.call(this);break;case 37:zn.call(this,a,"left"),r.preventDefault();break;case 38:zn.call(this,a,"up"),r.preventDefault();break;case 39:zn.call(this,a,"right"),r.preventDefault();break;case 40:zn.call(this,a,"down"),r.preventDefault();break;case 9:c.clear(),zn.call(this,!1,a?"left":"right"),r.preventDefault();break;case 13:c.clear(),zn.call(this,!1,a?"up":"down"),r.preventDefault();break;case 8:ja.call(this,"delete-cell-text"),r.preventDefault();break}o==="Delete"?(ja.call(this,"delete-cell-text"),r.preventDefault()):i>=65&&i<=90||i>=48&&i<=57||i>=96&&i<=105||r.key==="="?(tf.call(this,r.key,"input"),Us.call(this)):i===113&&Us.call(this)}})}class gv{constructor(b,e){this.eventMap=Sg();const{view:d,showToolbar:m,showContextmenu:f}=e.settings;this.el=$e("div",`${Ze}-sheet`),this.toolbar=new Yb(e,d.width,!m),this.print=new sb(e),b.children(this.toolbar.el,this.el,this.print.el),this.data=e,this.tableEl=$e("canvas",`${Ze}-table`),this.rowResizer=new Ic(!1,e.rows.height),this.colResizer=new Ic(!0,e.cols.minWidth),this.verticalScrollbar=new Oc(!0),this.horizontalScrollbar=new Oc(!1),this.editor=new Hg(Gg,()=>this.getTableOffset(),e.rows.height),this.modalValidation=new Qb,this.contextMenu=new lb(()=>this.getRect(),!f),this.selector=new Tg(e),this.overlayerCEl=$e("div",`${Ze}-overlayer-content`).children(this.editor.el,this.selector.el),this.overlayerEl=$e("div",`${Ze}-overlayer`).child(this.overlayerCEl),this.sortFilter=new ev,this.el.children(this.tableEl,this.overlayerEl.el,this.rowResizer.el,this.colResizer.el,this.verticalScrollbar.el,this.horizontalScrollbar.el,this.contextMenu.el,this.modalValidation.el,this.sortFilter.el),this.table=new rb(this.tableEl.el,e),mv.call(this),en.call(this),Bi.call(this,!1,0,0)}on(b,e){return this.eventMap.on(b,e),this}trigger(b,...e){const{eventMap:d}=this;d.fire(b,e)}resetData(b){this.editor.clear(),this.data=b,Tf.call(this),Af.call(this),this.toolbar.resetData(b),this.print.resetData(b),this.selector.resetData(b),this.table.resetData(b)}loadData(b){return this.data.setData(b),en.call(this),this}freeze(b,e){const{data:d}=this;return d.setFreeze(b,e),en.call(this),this}undo(){this.data.undo(),en.call(this)}redo(){this.data.redo(),en.call(this)}reload(){return en.call(this),this}getRect(){const{data:b}=this;return{width:b.viewWidth(),height:b.viewHeight()}}getTableOffset(){const{rows:b,cols:e}=this.data,{width:d,height:m}=this.getRect();return{width:d-e.indexWidth,height:m-b.height,left:e.indexWidth,top:b.height}}}class bv extends Wn{constructor(b){const e=new jr("ellipsis");super(e,"auto",!1,"top-left"),this.contentClick=b}reset(b){const e=b.map((d,m)=>$e("div",`${Ze}-item`).css("width","150px").css("font-weight","normal").on("click",()=>{this.contentClick(m),this.hide()}).child(d));this.setContentChildren(...e)}setTitle(){}}const vv=[{key:"delete",title:Wt("contextmenu.deleteSheet")}];function yv(N){return $e("div",`${Ze}-item`).child(N.title()).on("click",()=>{this.itemClick(N.key),this.hide()})}function wv(){return vv.map(N=>yv.call(this,N))}class xv{constructor(){this.el=$e("div",`${Ze}-contextmenu`).css("width","160px").children(...wv.call(this)).hide(),this.itemClick=()=>{}}hide(){const{el:b}=this;b.hide(),gs(b)}setOffset(b){const{el:e}=this;e.offset(b),e.show(),Ws(e)}}class _v{constructor(b=()=>{},e=()=>{},d=()=>{},m=()=>{}){this.swapFunc=e,this.updateFunc=m,this.dataNames=[],this.activeEl=null,this.deleteEl=null,this.items=[],this.moreEl=new bv(f=>{this.clickSwap2(this.items[f])}),this.contextMenu=new xv,this.contextMenu.itemClick=d,this.el=$e("div",`${Ze}-bottombar`).children(this.contextMenu.el,this.menuEl=$e("ul",`${Ze}-menu`).child($e("li","").children(new jr("add").on("click",()=>{b()}),$e("span","").child(this.moreEl))))}addItem(b,e){this.dataNames.push(b);const d=$e("li",e?"active":"").child(b);d.on("click",()=>{this.clickSwap2(d)}).on("contextmenu",m=>{const{offsetLeft:f,offsetHeight:c}=m.target;this.contextMenu.setOffset({left:f,bottom:c+1}),this.deleteEl=d}).on("dblclick",()=>{const m=d.html(),f=new ms("auto","");f.val(m),f.input.on("blur",({target:c})=>{const{value:u}=c,s=this.dataNames.findIndex(t=>t===m);this.renameItem(s,u)}),d.html("").child(f.el),f.focus()}),e&&this.clickSwap(d),this.items.push(d),this.menuEl.child(d),this.moreEl.reset(this.dataNames)}renameItem(b,e){this.dataNames.splice(b,1,e),this.moreEl.reset(this.dataNames),this.items[b].html("").child(e),this.updateFunc(b,e)}clear(){this.items.forEach(b=>{this.menuEl.removeChild(b.el)}),this.items=[],this.dataNames=[],this.moreEl.reset(this.dataNames)}deleteItem(){const{activeEl:b,deleteEl:e}=this;if(this.items.length>1){const d=this.items.findIndex(m=>m===e);if(this.items.splice(d,1),this.dataNames.splice(d,1),this.menuEl.removeChild(e.el),this.moreEl.reset(this.dataNames),b===e){const[m]=this.items;return this.activeEl=m,this.activeEl.toggle(),[d,0]}return[d,-1]}return[-1]}clickSwap2(b){const e=this.items.findIndex(d=>d===b);this.clickSwap(b),this.activeEl.toggle(),this.swapFunc(e)}clickSwap(b){this.activeEl!==null&&this.activeEl.toggle(),this.activeEl=b}}class Sv{constructor(b,e={}){let d=b;this.options={showBottomBar:!0,...e},this.sheetIndex=1,this.datas=[],typeof b=="string"&&(d=document.querySelector(b)),this.bottombar=this.options.showBottomBar?new _v(()=>{const f=this.addSheet();this.sheet.resetData(f)},f=>{const c=this.datas[f];this.sheet.resetData(c)},()=>{this.deleteSheet()},(f,c)=>{this.datas[f].name=c}):null,this.data=this.addSheet();const m=$e("div",`${Ze}`).on("contextmenu",f=>f.preventDefault());d.appendChild(m.el),this.sheet=new gv(m,this.data),this.bottombar!==null&&m.child(this.bottombar.el)}addSheet(b,e=!0){const d=b||`sheet${this.sheetIndex}`,m=new xg(d,this.options);return m.change=(...f)=>{this.sheet.trigger("change",...f)},this.datas.push(m),this.bottombar!==null&&this.bottombar.addItem(d,e),this.sheetIndex+=1,m}deleteSheet(){if(this.bottombar===null)return;const[b,e]=this.bottombar.deleteItem();b>=0&&(this.datas.splice(b,1),e>=0&&this.sheet.resetData(this.datas[e]))}loadData(b){const e=Array.isArray(b)?b:[b];if(this.bottombar!==null&&this.bottombar.clear(),this.datas=[],e.length>0)for(let d=0;db.getData())}cellText(b,e,d,m=0){return this.datas[m].setCellText(b,e,d,"finished"),this}cell(b,e,d=0){return this.datas[d].getCell(b,e)}cellStyle(b,e,d=0){return this.datas[d].getCellStyle(b,e)}reRender(){return this.sheet.table.render(),this}on(b,e){return this.sheet.on(b,e),this}validate(){const{validations:b}=this.data;return b.errors.size<=0}change(b){return this.sheet.on("change",b),this}static locale(b,e){sh(b,e)}}const Ev=(N,b={})=>new Sv(N,b);window&&(window.x_spreadsheet=Ev,window.x_spreadsheet.locale=(N,b)=>sh(N,b));var _h={exports:{}};(function(N,b){(function(e){N.exports=e()})(function(){return function(){function e(d,m,f){function c(t,n){if(!m[t]){if(!d[t]){var r=typeof Ia=="function"&&Ia;if(!n&&r)return r(t,!0);if(u)return u(t,!0);var i=new Error("Cannot find module '"+t+"'");throw i.code="MODULE_NOT_FOUND",i}var o=m[t]={exports:{}};d[t][0].call(o.exports,function(l){var a=d[t][1][l];return c(a||l)},o,o.exports,e,d,m,f)}return m[t].exports}for(var u=typeof Ia=="function"&&Ia,s=0;s{const w=this.workbook.addWorksheet(g.sheetName),y=g.dateFormats||["YYYY-MM-DD[T]HH:mm:ssZ","YYYY-MM-DD[T]HH:mm:ss","MM-DD-YYYY","YYYY-MM-DD"],S=g.map||function(I){if(I==="")return null;const F=Number(I);if(!Number.isNaN(F)&&F!==1/0)return F;const B=y.reduce((X,G)=>{if(X)return X;const V=t(I,G,!0);return V.isValid()?V:null},null);if(B)return new Date(B.valueOf());const j=i[I];return j!==void 0?j:I},E=c.parse(g.parserOptions).on("data",I=>{w.addRow(I.map(S))}).on("end",()=>{E.emit("worksheet",w)});E.on("worksheet",v).on("error",h),a.pipe(E)})}createInputStream(){throw new Error("`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}write(a,g){return new Promise((v,h)=>{g=g||{};const w=this.workbook.getWorksheet(g.sheetName||g.sheetId),y=c.format(g.formatterOptions);a.on("finish",()=>{v()}),y.on("error",h),y.pipe(a);const{dateFormat:S,dateUTC:E}=g,I=g.map||(j=>{if(j){if(j.text||j.hyperlink)return j.hyperlink||j.text||"";if(j.formula||j.result)return j.result||"";if(j instanceof Date)return S?E?t.utc(j).format(S):t(j).format(S):E?t.utc(j).format():t(j).format();if(j.error)return j.error;if(typeof j=="object")return JSON.stringify(j)}return j}),F=g.includeEmptyRows===void 0||g.includeEmptyRows;let B=1;w&&w.eachRow((j,X)=>{if(F)for(;B++2&&arguments[2]!==void 0?arguments[2]:0;if(this.worksheet=s,!t)this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0;else if(typeof t=="string"){const r=f.decodeAddress(t);this.nativeCol=r.col+n,this.nativeColOff=0,this.nativeRow=r.row+n,this.nativeRowOff=0}else t.nativeCol!==void 0?(this.nativeCol=t.nativeCol||0,this.nativeColOff=t.nativeColOff||0,this.nativeRow=t.nativeRow||0,this.nativeRowOff=t.nativeRowOff||0):t.col!==void 0?(this.col=t.col+n,this.row=t.row+n):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0)}static asInstance(s){return s instanceof c||s==null?s:new c(s)}get col(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth}set col(s){this.nativeCol=Math.floor(s),this.nativeColOff=Math.floor((s-this.nativeCol)*this.colWidth)}get row(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight}set row(s){this.nativeRow=Math.floor(s),this.nativeRowOff=Math.floor((s-this.nativeRow)*this.rowHeight)}get colWidth(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(this.worksheet.getColumn(this.nativeCol+1).width*1e4):64e4}get rowHeight(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(this.worksheet.getRow(this.nativeRow+1).height*1e4):18e4}get model(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}}set model(s){this.nativeCol=s.nativeCol,this.nativeColOff=s.nativeColOff,this.nativeRow=s.nativeRow,this.nativeRowOff=s.nativeRowOff}}d.exports=c},{"../utils/col-cache":19}],3:[function(e,d,m){const f=e("../utils/col-cache"),c=e("../utils/under-dash"),u=e("./enums"),{slideFormula:s}=e("../utils/shared-formula"),t=e("./note");class n{constructor(B,j,X){if(!B||!j)throw new Error("A Cell needs a Row");this._row=B,this._column=j,f.validateAddress(X),this._address=X,this._value=I.create(n.Types.Null,this),this.style=this._mergeStyle(B.style,j.style,{}),this._mergeCount=0}get worksheet(){return this._row.worksheet}get workbook(){return this._row.worksheet.workbook}destroy(){delete this.style,delete this._value,delete this._row,delete this._column,delete this._address}get numFmt(){return this.style.numFmt}set numFmt(B){this.style.numFmt=B}get font(){return this.style.font}set font(B){this.style.font=B}get alignment(){return this.style.alignment}set alignment(B){this.style.alignment=B}get border(){return this.style.border}set border(B){this.style.border=B}get fill(){return this.style.fill}set fill(B){this.style.fill=B}get protection(){return this.style.protection}set protection(B){this.style.protection=B}_mergeStyle(B,j,X){const G=B&&B.numFmt||j&&j.numFmt;G&&(X.numFmt=G);const V=B&&B.font||j&&j.font;V&&(X.font=V);const J=B&&B.alignment||j&&j.alignment;J&&(X.alignment=J);const H=B&&B.border||j&&j.border;H&&(X.border=H);const M=B&&B.fill||j&&j.fill;M&&(X.fill=M);const T=B&&B.protection||j&&j.protection;return T&&(X.protection=T),X}get address(){return this._address}get row(){return this._row.number}get col(){return this._column.number}get $col$row(){return`$${this._column.letter}$${this.row}`}get type(){return this._value.type}get effectiveType(){return this._value.effectiveType}toCsvString(){return this._value.toCsvString()}addMergeRef(){this._mergeCount++}releaseMergeRef(){this._mergeCount--}get isMerged(){return this._mergeCount>0||this.type===n.Types.Merge}merge(B,j){this._value.release(),this._value=I.create(n.Types.Merge,this,B),j||(this.style=B.style)}unmerge(){this.type===n.Types.Merge&&(this._value.release(),this._value=I.create(n.Types.Null,this),this.style=this._mergeStyle(this._row.style,this._column.style,{}))}isMergedTo(B){return this._value.type!==n.Types.Merge?!1:this._value.isMergedTo(B)}get master(){return this.type===n.Types.Merge?this._value.master:this}get isHyperlink(){return this._value.type===n.Types.Hyperlink}get hyperlink(){return this._value.hyperlink}get value(){return this._value.value}set value(B){if(this.type===n.Types.Merge){this._value.master.value=B;return}this._value.release(),this._value=I.create(I.getType(B),this,B)}get note(){return this._comment&&this._comment.note}set note(B){this._comment=new t(B)}get text(){return this._value.toString()}get html(){return c.escapeHtml(this.text)}toString(){return this.text}_upgradeToHyperlink(B){this.type===n.Types.String&&(this._value=I.create(n.Types.Hyperlink,this,{text:this._value.value,hyperlink:B}))}get formula(){return this._value.formula}get result(){return this._value.result}get formulaType(){return this._value.formulaType}get fullAddress(){const{worksheet:B}=this._row;return{sheetName:B.name,address:this.address,row:this.row,col:this.col}}get name(){return this.names[0]}set name(B){this.names=[B]}get names(){return this.workbook.definedNames.getNamesEx(this.fullAddress)}set names(B){const{definedNames:j}=this.workbook;j.removeAllNames(this.fullAddress),B.forEach(X=>{j.addEx(this.fullAddress,X)})}addName(B){this.workbook.definedNames.addEx(this.fullAddress,B)}removeName(B){this.workbook.definedNames.removeEx(this.fullAddress,B)}removeAllNames(){this.workbook.definedNames.removeAllNames(this.fullAddress)}get _dataValidations(){return this.worksheet.dataValidations}get dataValidation(){return this._dataValidations.find(this.address)}set dataValidation(B){this._dataValidations.add(this.address,B)}get model(){const{model:B}=this._value;return B.style=this.style,this._comment&&(B.comment=this._comment.model),B}set model(B){if(this._value.release(),this._value=I.create(B.type,this),this._value.model=B,B.comment)switch(B.comment.type){case"note":this._comment=t.fromModel(B.comment);break}B.style?this.style=B.style:this.style={}}}n.Types=u.ValueType;class r{constructor(B){this.model={address:B.address,type:n.Types.Null}}get value(){return null}set value(B){}get type(){return n.Types.Null}get effectiveType(){return n.Types.Null}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return""}release(){}toString(){return""}}class i{constructor(B,j){this.model={address:B.address,type:n.Types.Number,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Number}get effectiveType(){return n.Types.Number}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}class o{constructor(B,j){this.model={address:B.address,type:n.Types.String,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.String}get effectiveType(){return n.Types.String}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return`"${this.model.value.replace(/"/g,'""')}"`}release(){}toString(){return this.model.value}}class l{constructor(B,j){this.model={address:B.address,type:n.Types.String,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}toString(){return this.model.value.richText.map(B=>B.text).join("")}get type(){return n.Types.RichText}get effectiveType(){return n.Types.RichText}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return`"${this.text.replace(/"/g,'""')}"`}release(){}}class a{constructor(B,j){this.model={address:B.address,type:n.Types.Date,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Date}get effectiveType(){return n.Types.Date}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value.toISOString()}release(){}toString(){return this.model.value.toString()}}class g{constructor(B,j){this.model={address:B.address,type:n.Types.Hyperlink,text:j?j.text:void 0,hyperlink:j?j.hyperlink:void 0},j&&j.tooltip&&(this.model.tooltip=j.tooltip)}get value(){const B={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(B.tooltip=this.model.tooltip),B}set value(B){this.model={text:B.text,hyperlink:B.hyperlink},B.tooltip&&(this.model.tooltip=B.tooltip)}get text(){return this.model.text}set text(B){this.model.text=B}get hyperlink(){return this.model.hyperlink}set hyperlink(B){this.model.hyperlink=B}get type(){return n.Types.Hyperlink}get effectiveType(){return n.Types.Hyperlink}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.hyperlink}release(){}toString(){return this.model.text}}class v{constructor(B,j){this.model={address:B.address,type:n.Types.Merge,master:j?j.address:void 0},this._master=j,j&&j.addMergeRef()}get value(){return this._master.value}set value(B){B instanceof n?(this._master&&this._master.releaseMergeRef(),B.addMergeRef(),this._master=B):this._master.value=B}isMergedTo(B){return B===this._master}get master(){return this._master}get type(){return n.Types.Merge}get effectiveType(){return this._master.effectiveType}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return""}release(){this._master.releaseMergeRef()}toString(){return this.value.toString()}}class h{constructor(B,j){this.cell=B,this.model={address:B.address,type:n.Types.Formula,shareType:j?j.shareType:void 0,ref:j?j.ref:void 0,formula:j?j.formula:void 0,sharedFormula:j?j.sharedFormula:void 0,result:j?j.result:void 0}}_copyModel(B){const j={},X=G=>{const V=B[G];V&&(j[G]=V)};return X("formula"),X("result"),X("ref"),X("shareType"),X("sharedFormula"),j}get value(){return this._copyModel(this.model)}set value(B){this.model=this._copyModel(B)}validate(B){switch(I.getType(B)){case n.Types.Null:case n.Types.String:case n.Types.Number:case n.Types.Date:break;case n.Types.Hyperlink:case n.Types.Formula:default:throw new Error("Cannot process that type of result value")}}get dependencies(){const B=this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g),j=this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g,"").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g);return{ranges:B,cells:j}}get formula(){return this.model.formula||this._getTranslatedFormula()}set formula(B){this.model.formula=B}get formulaType(){return this.model.formula?u.FormulaType.Master:this.model.sharedFormula?u.FormulaType.Shared:u.FormulaType.None}get result(){return this.model.result}set result(B){this.model.result=B}get type(){return n.Types.Formula}get effectiveType(){const B=this.model.result;return B==null?u.ValueType.Null:B instanceof String||typeof B=="string"?u.ValueType.String:typeof B=="number"?u.ValueType.Number:B instanceof Date?u.ValueType.Date:B.text&&B.hyperlink?u.ValueType.Hyperlink:B.formula?u.ValueType.Formula:u.ValueType.Null}get address(){return this.model.address}set address(B){this.model.address=B}_getTranslatedFormula(){if(!this._translatedFormula&&this.model.sharedFormula){const{worksheet:B}=this.cell,j=B.findCell(this.model.sharedFormula);this._translatedFormula=j&&s(j.formula,j.address,this.model.address)}return this._translatedFormula}toCsvString(){return`${this.model.result||""}`}release(){}toString(){return this.model.result?this.model.result.toString():""}}class w{constructor(B,j){this.model={address:B.address,type:n.Types.SharedString,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.SharedString}get effectiveType(){return n.Types.SharedString}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}class y{constructor(B,j){this.model={address:B.address,type:n.Types.Boolean,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Boolean}get effectiveType(){return n.Types.Boolean}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value?1:0}release(){}toString(){return this.model.value.toString()}}class S{constructor(B,j){this.model={address:B.address,type:n.Types.Error,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Error}get effectiveType(){return n.Types.Error}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.toString()}release(){}toString(){return this.model.value.error.toString()}}class E{constructor(B,j){this.model={address:B.address,type:n.Types.String,value:JSON.stringify(j),rawValue:j}}get value(){return this.model.rawValue}set value(B){this.model.rawValue=B,this.model.value=JSON.stringify(B)}get type(){return n.Types.String}get effectiveType(){return n.Types.String}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value}release(){}toString(){return this.model.value}}const I={getType(F){return F==null?n.Types.Null:F instanceof String||typeof F=="string"?n.Types.String:typeof F=="number"?n.Types.Number:typeof F=="boolean"?n.Types.Boolean:F instanceof Date?n.Types.Date:F.text&&F.hyperlink?n.Types.Hyperlink:F.formula||F.sharedFormula?n.Types.Formula:F.richText?n.Types.RichText:F.sharedString?n.Types.SharedString:F.error?n.Types.Error:n.Types.JSON},types:[{t:n.Types.Null,f:r},{t:n.Types.Number,f:i},{t:n.Types.String,f:o},{t:n.Types.Date,f:a},{t:n.Types.Hyperlink,f:g},{t:n.Types.Formula,f:h},{t:n.Types.Merge,f:v},{t:n.Types.JSON,f:E},{t:n.Types.SharedString,f:w},{t:n.Types.RichText,f:l},{t:n.Types.Boolean,f:y},{t:n.Types.Error,f:S}].reduce((F,B)=>(F[B.t]=B.f,F),[]),create(F,B,j){const X=this.types[F];if(!X)throw new Error(`Could not create Value of type ${F}`);return new X(B,j)}};d.exports=n},{"../utils/col-cache":19,"../utils/shared-formula":23,"../utils/under-dash":26,"./enums":7,"./note":9}],4:[function(e,d,m){const f=e("../utils/under-dash"),c=e("./enums"),u=e("../utils/col-cache"),s=9;class t{constructor(r,i,o){this._worksheet=r,this._number=i,o!==!1&&(this.defn=o)}get number(){return this._number}get worksheet(){return this._worksheet}get letter(){return u.n2l(this._number)}get isCustomWidth(){return this.width!==void 0&&this.width!==s}get defn(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel}}set defn(r){r?(this.key=r.key,this.width=r.width!==void 0?r.width:s,this.outlineLevel=r.outlineLevel,r.style?this.style=r.style:this.style={},this.header=r.header,this._hidden=!!r.hidden):(delete this._header,delete this._key,delete this.width,this.style={},this.outlineLevel=0)}get headers(){return this._header&&this._header instanceof Array?this._header:[this._header]}get header(){return this._header}set header(r){r!==void 0?(this._header=r,this.headers.forEach((i,o)=>{this._worksheet.getCell(o+1,this.number).value=i})):this._header=void 0}get key(){return this._key}set key(r){(this._key&&this._worksheet.getColumnKey(this._key))===this&&this._worksheet.deleteColumnKey(this._key),this._key=r,r&&this._worksheet.setColumnKey(this._key,this)}get hidden(){return!!this._hidden}set hidden(r){this._hidden=r}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(r){this._outlineLevel=r}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol)}toString(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:void 0})}equivalentTo(r){return this.width===r.width&&this.hidden===r.hidden&&this.outlineLevel===r.outlineLevel&&f.isEqual(this.style,r.style)}get isDefault(){if(this.isCustomWidth||this.hidden||this.outlineLevel)return!1;const r=this.style;return!(r&&(r.font||r.numFmt||r.alignment||r.border||r.fill||r.protection))}get headerCount(){return this.headers.length}eachCell(r,i){const o=this.number;i||(i=r,r=null),this._worksheet.eachRow(r,(l,a)=>{i(l.getCell(o),a)})}get values(){const r=[];return this.eachCell((i,o)=>{i&&i.type!==c.ValueType.Null&&(r[o]=i.value)}),r}set values(r){if(!r)return;const i=this.number;let o=0;r.hasOwnProperty("0")&&(o=1),r.forEach((l,a)=>{this._worksheet.getCell(a+o,i).value=l})}_applyStyle(r,i){return this.style[r]=i,this.eachCell(o=>{o[r]=i}),i}get numFmt(){return this.style.numFmt}set numFmt(r){this._applyStyle("numFmt",r)}get font(){return this.style.font}set font(r){this._applyStyle("font",r)}get alignment(){return this.style.alignment}set alignment(r){this._applyStyle("alignment",r)}get protection(){return this.style.protection}set protection(r){this._applyStyle("protection",r)}get border(){return this.style.border}set border(r){this._applyStyle("border",r)}get fill(){return this.style.fill}set fill(r){this._applyStyle("fill",r)}static toModel(r){const i=[];let o=null;return r&&r.forEach((l,a)=>{l.isDefault?o&&(o=null):!o||!l.equivalentTo(o)?(o={min:a+1,max:a+1,width:l.width!==void 0?l.width:s,style:l.style,isCustomWidth:l.isCustomWidth,hidden:l.hidden,outlineLevel:l.outlineLevel,collapsed:l.collapsed},i.push(o)):o.max=a+1}),i.length?i:void 0}static fromModel(r,i){i=i||[];const o=[];let l=1,a=0;for(i=i.sort(function(g,v){return g.min-v.min});a{o.removeCellEx(i)})}forEach(i){f.each(this.matrixMap,(o,l)=>{o.forEach(a=>{i(l,a)})})}getNames(i){return this.getNamesEx(c.decodeEx(i))}getNamesEx(i){return f.map(this.matrixMap,(o,l)=>o.findCellEx(i)&&l).filter(Boolean)}_explore(i,o){o.mark=!1;const{sheetName:l}=o,a=new s(o.row,o.col,o.row,o.col,l);let g,v;function h(y,S){const E=i.findCellAt(l,y,o.col);return!E||!E.mark?!1:(a[S]=y,E.mark=!1,!0)}for(v=o.row-1;h(v,"top");v--);for(v=o.row+1;h(v,"bottom");v++);function w(y,S){const E=[];for(v=a.top;v<=a.bottom;v++){const I=i.findCellAt(l,v,y);if(I&&I.mark)E.push(I);else return!1}a[S]=y;for(let I=0;I{a.mark=!0});const l=o.map(a=>a.mark&&this._explore(o,a)).filter(Boolean).map(a=>a.$shortRange);return{name:i,ranges:l}}normaliseMatrix(i,o){i.forEachInSheet(o,(l,a,g)=>{l&&(l.row!==a||l.col!==g)&&(l.row=a,l.col=g,l.address=c.n2l(g)+a)})}spliceRows(i,o,l,a){f.each(this.matrixMap,g=>{g.spliceRows(i,o,l,a),this.normaliseMatrix(g,i)})}spliceColumns(i,o,l,a){f.each(this.matrixMap,g=>{g.spliceColumns(i,o,l,a),this.normaliseMatrix(g,i)})}get model(){return f.map(this.matrixMap,(i,o)=>this.getRanges(o,i)).filter(i=>i.ranges.length)}set model(i){const o=this.matrixMap={};i.forEach(l=>{const a=o[l.name]=new u;l.ranges.forEach(g=>{t.test(g.split("!").pop()||"")&&a.addCell(g)})})}}d.exports=n},{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":26,"./range":10}],7:[function(e,d,m){d.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:"#N/A",Ref:"#REF!",Name:"#NAME?",DivZero:"#DIV/0!",Null:"#NULL!",Value:"#VALUE!",Num:"#NUM!"}}},{}],8:[function(e,d,m){const f=e("../utils/col-cache"),c=e("./anchor");class u{constructor(t,n){this.worksheet=t,this.model=n}get model(){switch(this.type){case"background":return{type:this.type,imageId:this.imageId};case"image":return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error("Invalid Image Type")}}set model(t){let{type:n,imageId:r,range:i,hyperlinks:o}=t;if(this.type=n,this.imageId=r,n==="image")if(typeof i=="string"){const l=f.decode(i);this.range={tl:new c(this.worksheet,{col:l.left,row:l.top},-1),br:new c(this.worksheet,{col:l.right,row:l.bottom},0),editAs:"oneCell"}}else this.range={tl:new c(this.worksheet,i.tl,0),br:i.br&&new c(this.worksheet,i.br,0),ext:i.ext,editAs:i.editAs,hyperlinks:o||i.hyperlinks}}}d.exports=u},{"../utils/col-cache":19,"./anchor":2}],9:[function(e,d,m){const f=e("../utils/under-dash");class c{constructor(s){this.note=s}get model(){let s=null;switch(typeof this.note){case"string":s={type:"note",note:{texts:[{text:this.note}]}};break;default:s={type:"note",note:this.note};break}return f.deepMerge({},c.DEFAULT_CONFIGS,s)}set model(s){const{note:t}=s,{texts:n}=t;n.length===1&&Object.keys(n[0]).length===1?this.note=n[0].text:this.note=t}static fromModel(s){const t=new c;return t.model=s,t}}c.DEFAULT_CONFIGS={note:{margins:{insetmode:"auto",inset:[.13,.13,.25,.25]},protection:{locked:"True",lockText:"True"},editAs:"absolute"}},d.exports=c},{"../utils/under-dash":26}],10:[function(e,d,m){const f=e("../utils/col-cache");class c{constructor(){this.decode(arguments)}setTLBR(s,t,n,r,i){if(arguments.length<4){const o=f.decodeAddress(s),l=f.decodeAddress(t);this.model={top:Math.min(o.row,l.row),left:Math.min(o.col,l.col),bottom:Math.max(o.row,l.row),right:Math.max(o.col,l.col),sheetName:n},this.setTLBR(o.row,o.col,l.row,l.col,i)}else this.model={top:Math.min(s,n),left:Math.min(t,r),bottom:Math.max(s,n),right:Math.max(t,r),sheetName:i}}decode(s){switch(s.length){case 5:this.setTLBR(s[0],s[1],s[2],s[3],s[4]);break;case 4:this.setTLBR(s[0],s[1],s[2],s[3]);break;case 3:this.setTLBR(s[0],s[1],s[2]);break;case 2:this.setTLBR(s[0],s[1]);break;case 1:{const t=s[0];if(t instanceof c)this.model={top:t.model.top,left:t.model.left,bottom:t.model.bottom,right:t.model.right,sheetName:t.sheetName};else if(t instanceof Array)this.decode(t);else if(t.top&&t.left&&t.bottom&&t.right)this.model={top:t.top,left:t.left,bottom:t.bottom,right:t.right,sheetName:t.sheetName};else{const n=f.decodeEx(t);n.top?this.model={top:n.top,left:n.left,bottom:n.bottom,right:n.right,sheetName:n.sheetName}:this.model={top:n.row,left:n.col,bottom:n.row,right:n.col,sheetName:n.sheetName}}break}case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error(`Invalid number of arguments to _getDimensions() - ${s.length}`)}}get top(){return this.model.top||1}set top(s){this.model.top=s}get left(){return this.model.left||1}set left(s){this.model.left=s}get bottom(){return this.model.bottom||1}set bottom(s){this.model.bottom=s}get right(){return this.model.right||1}set right(s){this.model.right=s}get sheetName(){return this.model.sheetName}set sheetName(s){this.model.sheetName=s}get _serialisedSheetName(){const{sheetName:s}=this.model;return s?/^[a-zA-Z0-9]*$/.test(s)?`${s}!`:`'${s}'!`:""}expand(s,t,n,r){(!this.model.top||sthis.bottom)&&(this.bottom=n),(!this.model.right||r>this.right)&&(this.right=r)}expandRow(s){if(s){const{dimensions:t,number:n}=s;t&&this.expand(n,t.min,n,t.max)}}expandToAddress(s){const t=f.decodeEx(s);this.expand(t.row,t.col,t.row,t.col)}get tl(){return f.n2l(this.left)+this.top}get $t$l(){return`$${f.n2l(this.left)}$${this.top}`}get br(){return f.n2l(this.right)+this.bottom}get $b$r(){return`$${f.n2l(this.right)}$${this.bottom}`}get range(){return`${this._serialisedSheetName+this.tl}:${this.br}`}get $range(){return`${this._serialisedSheetName+this.$t$l}:${this.$b$r}`}get shortRange(){return this.count>1?this.range:this._serialisedSheetName+this.tl}get $shortRange(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}get count(){return(1+this.bottom-this.top)*(1+this.right-this.left)}toString(){return this.range}intersects(s){return!(s.sheetName&&this.sheetName&&s.sheetName!==this.sheetName||s.bottomthis.bottom||s.rightthis.right)}contains(s){const t=f.decodeEx(s);return this.containsEx(t)}containsEx(s){return s.sheetName&&this.sheetName&&s.sheetName!==this.sheetName?!1:s.row>=this.top&&s.row<=this.bottom&&s.col>=this.left&&s.col<=this.right}forEachAddress(s){for(let t=this.left;t<=this.right;t++)for(let n=this.top;n<=this.bottom;n++)s(f.encodeAddress(n,t),n,t)}}d.exports=c},{"../utils/col-cache":19}],11:[function(e,d,m){const f=e("../utils/under-dash"),c=e("./enums"),u=e("../utils/col-cache"),s=e("./cell");class t{constructor(r,i){this._worksheet=r,this._number=i,this._cells=[],this.style={},this.outlineLevel=0}get number(){return this._number}get worksheet(){return this._worksheet}commit(){this._worksheet._commitRow(this)}destroy(){delete this._worksheet,delete this._cells,delete this.style}findCell(r){return this._cells[r-1]}getCellEx(r){let i=this._cells[r.col-1];if(!i){const o=this._worksheet.getColumn(r.col);i=new s(this,o,r.address),this._cells[r.col-1]=i}return i}getCell(r){if(typeof r=="string"){const i=this._worksheet.getColumnKey(r);i?r=i.number:r=u.l2n(r)}return this._cells[r-1]||this.getCellEx({address:u.encodeAddress(this._number,r),row:this._number,col:r})}splice(r,i){const o=r+i;for(var l=arguments.length,a=new Array(l>2?l-2:0),g=2;g0)for(w=h;w>=o;w--)y=this._cells[w-1],y?(S=this.getCell(w+v),S.value=y.value,S.style=y.style,S._comment=y._comment):this._cells[w+v-1]=void 0;for(w=0;w{o&&o.type!==c.ValueType.Null&&i(o,l+1)})}addPageBreak(r,i){const o=this._worksheet,l=Math.max(0,r-1)||0,a=Math.max(0,i-1)||16838,g={id:this._number,max:a,man:1};l&&(g.min=l),o.rowBreaks.push(g)}get values(){const r=[];return this._cells.forEach(i=>{i&&i.type!==c.ValueType.Null&&(r[i.col]=i.value)}),r}set values(r){if(this._cells=[],r)if(r instanceof Array){let i=0;r.hasOwnProperty("0")&&(i=1),r.forEach((o,l)=>{o!==void 0&&(this.getCellEx({address:u.encodeAddress(this._number,l+i),row:this._number,col:l+i}).value=o)})}else this._worksheet.eachColumnKey((i,o)=>{r[o]!==void 0&&(this.getCellEx({address:u.encodeAddress(this._number,i.number),row:this._number,col:i.number}).value=r[o])})}get hasValues(){return f.some(this._cells,r=>r&&r.type!==c.ValueType.Null)}get cellCount(){return this._cells.length}get actualCellCount(){let r=0;return this.eachCell(()=>{r++}),r}get dimensions(){let r=0,i=0;return this._cells.forEach(o=>{o&&o.type!==c.ValueType.Null&&((!r||r>o.col)&&(r=o.col),i0?{min:r,max:i}:null}_applyStyle(r,i){return this.style[r]=i,this._cells.forEach(o=>{o&&(o[r]=i)}),i}get numFmt(){return this.style.numFmt}set numFmt(r){this._applyStyle("numFmt",r)}get font(){return this.style.font}set font(r){this._applyStyle("font",r)}get alignment(){return this.style.alignment}set alignment(r){this._applyStyle("alignment",r)}get protection(){return this.style.protection}set protection(r){this._applyStyle("protection",r)}get border(){return this.style.border}set border(r){this._applyStyle("border",r)}get fill(){return this.style.fill}set fill(r){this._applyStyle("fill",r)}get hidden(){return!!this._hidden}set hidden(r){this._hidden=r}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(r){this._outlineLevel=r}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}get model(){const r=[];let i=0,o=0;return this._cells.forEach(l=>{if(l){const a=l.model;a&&((!i||i>l.col)&&(i=l.col),o{switch(o.type){case s.Types.Merge:break;default:{let l;if(o.address)l=u.decodeAddress(o.address);else if(i){const{row:g}=i,v=i.col+1;l={row:g,col:v,address:u.encodeAddress(g,v),$col$row:`$${u.n2l(v)}$${g}`}}i=l;const a=this.getCellEx(l);a.model=o;break}}}),r.height?this.height=r.height:delete this.height,this.hidden=r.hidden,this.outlineLevel=r.outlineLevel||0,this.style=r.style&&JSON.parse(JSON.stringify(r.style))||{}}}d.exports=t},{"../utils/col-cache":19,"../utils/under-dash":26,"./cell":3,"./enums":7}],12:[function(e,d,m){const f=e("../utils/col-cache");class c{constructor(t,n,r){this.table=t,this.column=n,this.index=r}_set(t,n){this.table.cacheState(),this.column[t]=n}get name(){return this.column.name}set name(t){this._set("name",t)}get filterButton(){return this.column.filterButton}set filterButton(t){this.column.filterButton=t}get style(){return this.column.style}set style(t){this.column.style=t}get totalsRowLabel(){return this.column.totalsRowLabel}set totalsRowLabel(t){this._set("totalsRowLabel",t)}get totalsRowFunction(){return this.column.totalsRowFunction}set totalsRowFunction(t){this._set("totalsRowFunction",t)}get totalsRowResult(){return this.column.totalsRowResult}set totalsRowResult(t){this._set("totalsRowResult",t)}get totalsRowFormula(){return this.column.totalsRowFormula}set totalsRowFormula(t){this._set("totalsRowFormula",t)}}class u{constructor(t,n){this.worksheet=t,n&&(this.table=n,this.validate(),this.store())}getFormula(t){switch(t.totalsRowFunction){case"none":return null;case"average":return`SUBTOTAL(101,${this.table.name}[${t.name}])`;case"countNums":return`SUBTOTAL(102,${this.table.name}[${t.name}])`;case"count":return`SUBTOTAL(103,${this.table.name}[${t.name}])`;case"max":return`SUBTOTAL(104,${this.table.name}[${t.name}])`;case"min":return`SUBTOTAL(105,${this.table.name}[${t.name}])`;case"stdDev":return`SUBTOTAL(106,${this.table.name}[${t.name}])`;case"var":return`SUBTOTAL(107,${this.table.name}[${t.name}])`;case"sum":return`SUBTOTAL(109,${this.table.name}[${t.name}])`;case"custom":return t.totalsRowFormula;default:throw new Error(`Invalid Totals Row Function: ${t.totalsRowFunction}`)}}get width(){return this.table.columns.length}get height(){return this.table.rows.length}get filterHeight(){return this.height+(this.table.headerRow?1:0)}get tableHeight(){return this.filterHeight+(this.table.totalsRow?1:0)}validate(){const{table:t}=this,n=(v,h,w)=>{v[h]===void 0&&(v[h]=w)};n(t,"headerRow",!0),n(t,"totalsRow",!1),n(t,"style",{}),n(t.style,"theme","TableStyleMedium2"),n(t.style,"showFirstColumn",!1),n(t.style,"showLastColumn",!1),n(t.style,"showRowStripes",!1),n(t.style,"showColumnStripes",!1);const r=(v,h)=>{if(!v)throw new Error(h)};r(t.ref,"Table must have ref"),r(t.columns,"Table must have column definitions"),r(t.rows,"Table must have row definitions"),t.tl=f.decodeAddress(t.ref);const{row:i,col:o}=t.tl;r(i>0,"Table must be on valid row"),r(o>0,"Table must be on valid col");const{width:l,filterHeight:a,tableHeight:g}=this;t.autoFilterRef=f.encode(i,o,i+a-1,o+l-1),t.tableRef=f.encode(i,o,i+g-1,o+l-1),t.columns.forEach((v,h)=>{r(v.name,`Column ${h} must have a name`),h===0?n(v,"totalsRowLabel","Total"):(n(v,"totalsRowFunction","none"),v.totalsRowFormula=this.getFormula(v))})}store(){const t=(a,g)=>{g&&Object.keys(g).forEach(v=>{a[v]=g[v]})},{worksheet:n,table:r}=this,{row:i,col:o}=r.tl;let l=0;if(r.headerRow){const a=n.getRow(i+l++);r.columns.forEach((g,v)=>{const{style:h,name:w}=g,y=a.getCell(o+v);y.value=w,t(y,h)})}if(r.rows.forEach(a=>{const g=n.getRow(i+l++);a.forEach((v,h)=>{const w=g.getCell(o+h);w.value=v,t(w,r.columns[h].style)})}),r.totalsRow){const a=n.getRow(i+l++);r.columns.forEach((g,v)=>{const h=a.getCell(o+v);v===0?h.value=g.totalsRowLabel:this.getFormula(g)?h.value={formula:g.totalsRowFormula,result:g.totalsRowResult}:h.value=null,t(h,g.style)})}}load(t){const{table:n}=this,{row:r,col:i}=n.tl;let o=0;if(n.headerRow){const l=t.getRow(r+o++);n.columns.forEach((a,g)=>{const v=l.getCell(i+g);v.value=a.name})}if(n.rows.forEach(l=>{const a=t.getRow(r+o++);l.forEach((g,v)=>{const h=a.getCell(i+v);h.value=g})}),n.totalsRow){const l=t.getRow(r+o++);n.columns.forEach((a,g)=>{const v=l.getCell(i+g);g===0?v.value=a.totalsRowLabel:this.getFormula(a)&&(v.value={formula:a.totalsRowFormula,result:a.totalsRowResult})})}}get model(){return this.table}set model(t){this.table=t}cacheState(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}commit(){if(!this._cache)return;this.validate();const t=f.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(let n=0;n1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.rows.splice(t,n)}getColumn(t){const n=this.table.columns[t];return new c(this,n,t)}addColumn(t,n,r){this.cacheState(),r===void 0?(this.table.columns.push(t),this.table.rows.forEach((i,o)=>{i.push(n[o])})):(this.table.columns.splice(r,0,t),this.table.rows.forEach((i,o)=>{i.splice(r,0,n[o])}))}removeColumns(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.columns.splice(t,n),this.table.rows.forEach(r=>{r.splice(t,n)})}_assign(t,n,r){this.cacheState(),t[n]=r}get ref(){return this.table.ref}set ref(t){this._assign(this.table,"ref",t)}get name(){return this.table.name}set name(t){this.table.name=t}get displayName(){return this.table.displyName||this.table.name}set displayNamename(t){this.table.displayName=t}get headerRow(){return this.table.headerRow}set headerRow(t){this._assign(this.table,"headerRow",t)}get totalsRow(){return this.table.totalsRow}set totalsRow(t){this._assign(this.table,"totalsRow",t)}get theme(){return this.table.style.name}set theme(t){this.table.style.name=t}get showFirstColumn(){return this.table.style.showFirstColumn}set showFirstColumn(t){this.table.style.showFirstColumn=t}get showLastColumn(){return this.table.style.showLastColumn}set showLastColumn(t){this.table.style.showLastColumn=t}get showRowStripes(){return this.table.style.showRowStripes}set showRowStripes(t){this.table.style.showRowStripes=t}get showColumnStripes(){return this.table.style.showColumnStripes}set showColumnStripes(t){this.table.style.showColumnStripes=t}}d.exports=u},{"../utils/col-cache":19}],13:[function(e,d,m){const f=e("./worksheet"),c=e("./defined-names"),u=e("../xlsx/xlsx"),s=e("../csv/csv");class t{constructor(){this.category="",this.company="",this.created=new Date,this.description="",this.keywords="",this.manager="",this.modified=this.created,this.properties={},this.calcProperties={},this._worksheets=[],this.subject="",this.title="",this.views=[],this.media=[],this._definedNames=new c}get xlsx(){return this._xlsx||(this._xlsx=new u(this)),this._xlsx}get csv(){return this._csv||(this._csv=new s(this)),this._csv}get nextId(){for(let r=1;r(h&&h.orderNo)>v?h.orderNo:v,0),a=Object.assign({},i,{id:o,name:r,orderNo:l+1,workbook:this}),g=new f(a);return this._worksheets[o]=g,g}removeWorksheetEx(r){delete this._worksheets[r.id]}removeWorksheet(r){const i=this.getWorksheet(r);i&&i.destroy()}getWorksheet(r){if(r===void 0)return this._worksheets.find(Boolean);if(typeof r=="number")return this._worksheets[r];if(typeof r=="string")return this._worksheets.find(i=>i&&i.name===r)}get worksheets(){return this._worksheets.slice(1).sort((r,i)=>r.orderNo-i.orderNo).filter(Boolean)}eachSheet(r){this.worksheets.forEach(i=>{r(i,i.id)})}get definedNames(){return this._definedNames}clearThemes(){this._themes=void 0}addImage(r){const i=this.media.length;return this.media.push(Object.assign({},r,{type:"image"})),i}getImage(r){return this.media[r]}get model(){return{creator:this.creator||"Unknown",lastModifiedBy:this.lastModifiedBy||"Unknown",lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map(r=>r.model),sheets:this.worksheets.map(r=>r.model).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties}}set model(r){this.creator=r.creator,this.lastModifiedBy=r.lastModifiedBy,this.lastPrinted=r.lastPrinted,this.created=r.created,this.modified=r.modified,this.company=r.company,this.manager=r.manager,this.title=r.title,this.subject=r.subject,this.keywords=r.keywords,this.category=r.category,this.description=r.description,this.language=r.language,this.revision=r.revision,this.contentStatus=r.contentStatus,this.properties=r.properties,this.calcProperties=r.calcProperties,this._worksheets=[],r.worksheets.forEach(i=>{const{id:o,name:l,state:a}=i,g=r.sheets&&r.sheets.findIndex(h=>h.id===o),v=this._worksheets[o]=new f({id:o,name:l,orderNo:g,state:a,workbook:this});v.model=i}),this._definedNames.model=r.definedNames,this.views=r.views,this._themes=r.themes,this.media=r.media||[]}}d.exports=t},{"../csv/csv":1,"../xlsx/xlsx":144,"./defined-names":6,"./worksheet":14}],14:[function(e,d,m){const f=e("../utils/under-dash"),c=e("../utils/col-cache"),u=e("./range"),s=e("./row"),t=e("./column"),n=e("./enums"),r=e("./image"),i=e("./table"),o=e("./data-validations"),l=e("../utils/encryptor"),{copyStyle:a}=e("../utils/copy-style");class g{constructor(h){h=h||{},this._workbook=h.workbook,this.id=h.id,this.orderNo=h.orderNo,this.name=h.name,this.state=h.state||"visible",this._rows=[],this._columns=null,this._keys={},this._merges={},this.rowBreaks=[],this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},h.properties),this.pageSetup=Object.assign({},{margins:{left:.7,right:.7,top:.75,bottom:.75,header:.3,footer:.3},orientation:"portrait",horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!!(h.pageSetup&&(h.pageSetup.fitToWidth||h.pageSetup.fitToHeight)&&!h.pageSetup.scale),pageOrder:"downThenOver",blackAndWhite:!1,draft:!1,cellComments:"None",errors:"displayed",scale:100,fitToWidth:1,fitToHeight:1,paperSize:void 0,showRowColHeaders:!1,showGridLines:!1,firstPageNumber:void 0,horizontalCentered:!1,verticalCentered:!1,rowBreaks:null,colBreaks:null},h.pageSetup),this.headerFooter=Object.assign({},{differentFirst:!1,differentOddEven:!1,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},h.headerFooter),this.dataValidations=new o,this.views=h.views||[],this.autoFilter=h.autoFilter||null,this._media=[],this.sheetProtection=null,this.tables={},this.conditionalFormattings=[]}get name(){return this._name}set name(h){if(h===void 0&&(h=`sheet${this.id}`),this._name!==h){if(typeof h!="string")throw new Error("The name has to be a string.");if(h==="")throw new Error("The name can't be empty.");if(h==="History")throw new Error('The name "History" is protected. Please use a different name.');if(/[*?:/\\[\]]/.test(h))throw new Error(`Worksheet name ${h} cannot include any of the following characters: * ? : \\ / [ ]`);if(/(^')|('$)/.test(h))throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${h}`);if(h&&h.length>31&&(console.warn(`Worksheet name ${h} exceeds 31 chars. This will be truncated`),h=h.substring(0,31)),this._workbook._worksheets.find(w=>w&&w.name.toLowerCase()===h.toLowerCase()))throw new Error(`Worksheet name already exists: ${h}`);this._name=h}}get workbook(){return this._workbook}destroy(){this._workbook.removeWorksheetEx(this)}get dimensions(){const h=new u;return this._rows.forEach(w=>{if(w){const y=w.dimensions;y&&h.expand(w.number,y.min,w.number,y.max)}}),h}get columns(){return this._columns}set columns(h){this._headerRowCount=h.reduce((S,E)=>{const I=E.header&&1||E.headers&&E.headers.length||0;return Math.max(S,I)},0);let w=1;const y=this._columns=[];h.forEach(S=>{const E=new t(this,w++,!1);y.push(E),E.defn=S})}getColumnKey(h){return this._keys[h]}setColumnKey(h,w){this._keys[h]=w}deleteColumnKey(h){delete this._keys[h]}eachColumnKey(h){f.each(this._keys,h)}getColumn(h){if(typeof h=="string"){const w=this._keys[h];if(w)return w;h=c.l2n(h)}if(this._columns||(this._columns=[]),h>this._columns.length){let w=this._columns.length+1;for(;w<=h;)this._columns.push(new t(this,w++))}return this._columns[h-1]}spliceColumns(h,w){const S=this._rows.length;for(var E=arguments.length,I=new Array(E>2?E-2:0),F=2;F0)for(let G=0;G{V.push(H[G]||null)});const J=this.getRow(G+1);J.splice.apply(J,V)}else this._rows.forEach(G=>{G&&G.splice(h,w)});const B=I.length-w,j=h+w,X=this._columns.length;if(B<0)for(let G=h+I.length;G<=X;G++)this.getColumn(G).defn=this.getColumn(G-B).defn;else if(B>0)for(let G=X;G>=j;G--)this.getColumn(G+B).defn=this.getColumn(G).defn;for(let G=h;G{h=Math.max(h,w.cellCount)}),h}get actualColumnCount(){const h=[];let w=0;return this.eachRow(y=>{y.eachCell(S=>{let{col:E}=S;h[E]||(h[E]=!0,w++)})}),w}_commitRow(){}get _lastRowNumber(){const h=this._rows;let w=h.length;for(;w>0&&h[w-1]===void 0;)w--;return w}get _nextRow(){return this._lastRowNumber+1}get lastRow(){if(this._rows.length)return this._rows[this._rows.length-1]}findRow(h){return this._rows[h-1]}findRows(h,w){return this._rows.slice(h-1,h-1+w)}get rowCount(){return this._lastRowNumber}get actualRowCount(){let h=0;return this.eachRow(()=>{h++}),h}getRow(h){let w=this._rows[h-1];return w||(w=this._rows[h-1]=new s(this,h)),w}getRows(h,w){if(w<1)return;const y=[];for(let S=h;S1&&arguments[1]!==void 0?arguments[1]:"n";const y=this._nextRow,S=this.getRow(y);return S.values=h,this._setStyleOption(y,w[0]==="i"?w:"n"),S}addRows(h){let w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"n";const y=[];return h.forEach(S=>{y.push(this.addRow(S,w))}),y}insertRow(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";return this.spliceRows(h,0,w),this._setStyleOption(h,y),this.getRow(h)}insertRows(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";if(this.spliceRows(h,0,...w),y!=="n")for(let S=0;S1&&arguments[1]!==void 0?arguments[1]:"n";w[0]==="o"&&this.findRow(h+1)!==void 0?this._copyStyle(h+1,h,w[1]==="+"):w[0]==="i"&&this.findRow(h-1)!==void 0&&this._copyStyle(h-1,h,w[1]==="+")}_copyStyle(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const S=this.getRow(h),E=this.getRow(w);E.style=a(S.style),S.eachCell({includeEmpty:y},(I,F)=>{E.getCell(F).style=a(I.style)}),E.height=S.height}duplicateRow(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const S=this._rows[h-1],E=new Array(w).fill(S.values);this.spliceRows(h+1,y?0:w,...E);for(let I=0;I{F.getCell(j).style=B.style})}}spliceRows(h,w){const y=h+w;for(var S=arguments.length,E=new Array(S>2?S-2:0),I=2;I{V.getCell(H).style=J.style}),this._rows[X-1]=void 0}else this._rows[X+B-1]=void 0;else if(B>0)for(X=j;X>=y;X--)if(G=this._rows[X-1],G){const V=this.getRow(X+B);V.values=G.values,V.style=G.style,V.height=G.height,G.eachCell({includeEmpty:!0},(J,H)=>{if(V.getCell(H).style=J.style,J._value.constructor.name==="MergeValue"){const M=this.getRow(J._row._number+F).getCell(H),T=J._value._master,_=this.getRow(T._row._number+F).getCell(T._column._number);M.merge(_)}})}else this._rows[X+B-1]=void 0;for(X=0;X{y&&y.hasValues&&w(y,y.number)})}getSheetValues(){const h=[];return this._rows.forEach(w=>{w&&(h[w.number]=w.values)}),h}findCell(h,w){const y=c.getAddress(h,w),S=this._rows[y.row-1];return S?S.findCell(y.col):void 0}getCell(h,w){const y=c.getAddress(h,w);return this.getRow(y.row).getCellEx(y)}mergeCells(){for(var h=arguments.length,w=new Array(h),y=0;y{if(S.intersects(h))throw new Error("Cannot merge already merged cells")});const y=this.getCell(h.top,h.left);for(let S=h.top;S<=h.bottom;S++)for(let E=h.left;E<=h.right;E++)(S>h.top||E>h.left)&&this.getCell(S,E).merge(y,w);this._merges[y.address]=h}_unMergeMaster(h){const w=this._merges[h.address];if(w){for(let y=w.top;y<=w.bottom;y++)for(let S=w.left;S<=w.right;S++)this.getCell(y,S).unmerge();delete this._merges[h.address]}}get hasMerges(){return f.some(this._merges,Boolean)}unMergeCells(){for(var h=arguments.length,w=new Array(h),y=0;y3&&arguments[3]!==void 0?arguments[3]:"shared";const E=c.decode(h),{top:I,left:F,bottom:B,right:j}=E,X=j-F+1,G=c.encodeAddress(I,F),V=S==="shared";let J;typeof y=="function"?J=y:Array.isArray(y)?Array.isArray(y[0])?J=(M,T)=>y[M-I][T-F]:J=(M,T)=>y[(M-I)*X+(T-F)]:J=()=>{};let H=!0;for(let M=I;M<=B;M++)for(let T=F;T<=j;T++)H?(this.getCell(M,T).value={shareType:S,formula:w,ref:h,result:J(M,T)},H=!1):this.getCell(M,T).value=V?{sharedFormula:G,result:J(M,T)}:J(M,T)}addImage(h,w){const y={type:"image",imageId:h,range:w};this._media.push(new r(this,y))}getImages(){return this._media.filter(h=>h.type==="image")}addBackgroundImage(h){const w={type:"background",imageId:h};this._media.push(new r(this,w))}getBackgroundImageId(){const h=this._media.find(w=>w.type==="background");return h&&h.imageId}protect(h,w){return new Promise(y=>{this.sheetProtection={sheet:!0},w&&"spinCount"in w&&(w.spinCount=Number.isFinite(w.spinCount)?Math.round(Math.max(0,w.spinCount)):1e5),h&&(this.sheetProtection.algorithmName="SHA-512",this.sheetProtection.saltValue=l.randomBytes(16).toString("base64"),this.sheetProtection.spinCount=w&&"spinCount"in w?w.spinCount:1e5,this.sheetProtection.hashValue=l.convertPasswordToHash(h,"SHA512",this.sheetProtection.saltValue,this.sheetProtection.spinCount)),w&&(this.sheetProtection=Object.assign(this.sheetProtection,w),!h&&"spinCount"in w&&delete this.sheetProtection.spinCount),y()})}unprotect(){this.sheetProtection=null}addTable(h){const w=new i(this,h);return this.tables[h.name]=w,w}getTable(h){return this.tables[h]}removeTable(h){delete this.tables[h]}getTables(){return Object.values(this.tables)}addConditionalFormatting(h){this.conditionalFormattings.push(h)}removeConditionalFormatting(h){typeof h=="number"?this.conditionalFormattings.splice(h,1):h instanceof Function?this.conditionalFormattings=this.conditionalFormattings.filter(h):this.conditionalFormattings=[]}get tabColor(){return console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor}set tabColor(h){console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor=h}get model(){const h={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map(S=>S.model),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map(S=>S.model),conditionalFormattings:this.conditionalFormattings};h.cols=t.toModel(this.columns);const w=h.rows=[],y=h.dimensions=new u;return this._rows.forEach(S=>{const E=S&&S.model;E&&(y.expand(E.number,E.min,E.number,E.max),w.push(E))}),h.merges=[],f.each(this._merges,S=>{h.merges.push(S.range)}),h}_parseRows(h){this._rows=[],h.rows.forEach(w=>{const y=new s(this,w.number);this._rows[y.number-1]=y,y.model=w})}_parseMergeCells(h){f.each(h.mergeCells,w=>{this.mergeCellsWithoutStyle(w)})}set model(h){this.name=h.name,this._columns=t.fromModel(this,h.cols),this._parseRows(h),this._parseMergeCells(h),this.dataValidations=new o(h.dataValidations),this.properties=h.properties,this.pageSetup=h.pageSetup,this.headerFooter=h.headerFooter,this.views=h.views,this.autoFilter=h.autoFilter,this._media=h.media.map(w=>new r(this,w)),this.sheetProtection=h.sheetProtection,this.tables=h.tables.reduce((w,y)=>{const S=new i;return S.model=y,w[y.name]=S,w},{}),this.conditionalFormattings=h.conditionalFormattings}}d.exports=g},{"../utils/col-cache":19,"../utils/copy-style":20,"../utils/encryptor":21,"../utils/under-dash":26,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(e,d,m){e("core-js/modules/es.promise"),e("core-js/modules/es.promise.finally"),e("core-js/modules/es.object.assign"),e("core-js/modules/es.object.keys"),e("core-js/modules/es.object.values"),e("core-js/modules/es.symbol"),e("core-js/modules/es.symbol.async-iterator"),e("core-js/modules/es.array.iterator"),e("core-js/modules/es.array.includes"),e("core-js/modules/es.array.find-index"),e("core-js/modules/es.array.find"),e("core-js/modules/es.string.from-code-point"),e("core-js/modules/es.string.includes"),e("core-js/modules/es.number.is-nan"),e("regenerator-runtime/runtime");const f={Workbook:e("./doc/workbook")},c=e("./doc/enums");Object.keys(c).forEach(u=>{f[u]=c[u]}),d.exports=f},{"./doc/enums":7,"./doc/workbook":13,"core-js/modules/es.array.find":359,"core-js/modules/es.array.find-index":358,"core-js/modules/es.array.includes":360,"core-js/modules/es.array.iterator":361,"core-js/modules/es.number.is-nan":363,"core-js/modules/es.object.assign":364,"core-js/modules/es.object.keys":366,"core-js/modules/es.object.values":367,"core-js/modules/es.promise":372,"core-js/modules/es.promise.finally":371,"core-js/modules/es.string.from-code-point":376,"core-js/modules/es.string.includes":377,"core-js/modules/es.symbol":381,"core-js/modules/es.symbol.async-iterator":378,"regenerator-runtime/runtime":492}],16:[function(e,d,m){const f=typeof TextDecoder>"u"?null:new TextDecoder("utf-8");function c(u){return typeof u=="string"?u:f?f.decode(u):u.toString()}m.bufferToString=c},{}],17:[function(e,d,m){const f=typeof TextEncoder>"u"?null:new TextEncoder("utf-8"),{Buffer:c}=e("buffer");function u(s){return typeof s!="string"?s:f?c.from(f.encode(s).buffer):c.from(s)}m.stringToBuffer=u},{buffer:220}],18:[function(e,d,m){const f=e("./under-dash"),c=e("./col-cache");class u{constructor(t){this.template=t,this.sheets={}}addCell(t){this.addCellEx(c.decodeEx(t))}getCell(t){return this.findCellEx(c.decodeEx(t),!0)}findCell(t){return this.findCellEx(c.decodeEx(t),!1)}findCellAt(t,n,r){const i=this.sheets[t],o=i&&i[n];return o&&o[r]}addCellEx(t){if(t.top)for(let n=t.top;n<=t.bottom;n++)for(let r=t.left;r<=t.right;r++)this.getCellAt(t.sheetName,n,r);else this.findCellEx(t,!0)}getCellEx(t){return this.findCellEx(t,!0)}findCellEx(t,n){const r=this.findSheet(t,n),i=this.findSheetRow(r,t,n);return this.findRowCell(i,t,n)}getCellAt(t,n,r){const i=this.sheets[t]||(this.sheets[t]=[]),o=i[n]||(i[n]=[]);return o[r]||(o[r]={sheetName:t,address:c.n2l(r)+n,row:n,col:r})}removeCellEx(t){const n=this.findSheet(t);if(!n)return;const r=this.findSheetRow(n,t);r&&delete r[t.col]}forEachInSheet(t,n){const r=this.sheets[t];r&&r.forEach((i,o)=>{i&&i.forEach((l,a)=>{l&&n(l,o,a)})})}forEach(t){f.each(this.sheets,(n,r)=>{this.forEachInSheet(r,t)})}map(t){const n=[];return this.forEach(r=>{n.push(t(r))}),n}findSheet(t,n){const r=t.sheetName;if(this.sheets[r])return this.sheets[r];if(n)return this.sheets[r]=[]}findSheetRow(t,n,r){const{row:i}=n;if(t&&t[i])return t[i];if(r)return t[i]=[]}findRowCell(t,n,r){const{col:i}=n;if(t&&t[i])return t[i];if(r)return t[i]=this.template?Object.assign(n,JSON.parse(JSON.stringify(this.template))):n}spliceRows(t,n,r,i){const o=this.sheets[t];if(o){const l=[];for(let a=0;a{a.splice(n,r,...l)})}}}d.exports=u},{"./col-cache":19,"./under-dash":26}],19:[function(e,d,m){const f=/^[A-Z]+\d+$/,c={_dictionary:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],_l2nFill:0,_l2n:{},_n2l:[],_level(u){return u<=26?1:u<=676?2:3},_fill(u){let s,t,n,r,i,o=1;if(u>=4)throw new Error("Out of bounds. Excel supports columns from 1 to 16384");if(this._l2nFill<1&&u>=1){for(;o<=26;)s=this._dictionary[o-1],this._n2l[o]=s,this._l2n[s]=o,o++;this._l2nFill=1}if(this._l2nFill<2&&u>=2){for(o=27;o<=702;)t=o-27,n=t%26,r=Math.floor(t/26),s=this._dictionary[r]+this._dictionary[n],this._n2l[o]=s,this._l2n[s]=o,o++;this._l2nFill=2}if(this._l2nFill<3&&u>=3){for(o=703;o<=16384;)t=o-703,n=t%26,r=Math.floor(t/26)%26,i=Math.floor(t/676),s=this._dictionary[i]+this._dictionary[r]+this._dictionary[n],this._n2l[o]=s,this._l2n[s]=o,o++;this._l2nFill=3}},l2n(u){if(this._l2n[u]||this._fill(u.length),!this._l2n[u])throw new Error(`Out of bounds. Invalid column letter: ${u}`);return this._l2n[u]},n2l(u){if(u<1||u>16384)throw new Error(`${u} is out of bounds. Excel supports columns from 1 to 16384`);return this._n2l[u]||this._fill(this._level(u)),this._n2l[u]},_hash:{},validateAddress(u){if(!f.test(u))throw new Error(`Invalid Address: ${u}`);return!0},decodeAddress(u){const s=u.length<5&&this._hash[u];if(s)return s;let t=!1,n="",r=0,i=!1,o="",l=0;for(let g=0,v;g=65&&v<=90)t=!0,n+=u[g],r=r*26+v-64;else if(v>=48&&v<=57)i=!0,o+=u[g],l=l*10+v-48;else if(i&&t&&v!==36)break;if(!t)r=void 0;else if(r>16384)throw new Error(`Out of bounds. Invalid column letter: ${n}`);i||(l=void 0),u=n+o;const a={address:u,col:r,row:l,$col$row:`$${n}$${o}`};return r<=100&&l<=100&&(this._hash[u]=a,this._hash[a.$col$row]=a),a},getAddress(u,s){if(s){const t=this.n2l(s)+u;return this.decodeAddress(t)}return this.decodeAddress(u)},decode(u){const s=u.split(":");if(s.length===2){const t=this.decodeAddress(s[0]),n=this.decodeAddress(s[1]),r={top:Math.min(t.row,n.row),left:Math.min(t.col,n.col),bottom:Math.max(t.row,n.row),right:Math.max(t.col,n.col)};return r.tl=this.n2l(r.left)+r.top,r.br=this.n2l(r.right)+r.bottom,r.dimensions=`${r.tl}:${r.br}`,r}return this.decodeAddress(u)},decodeEx(u){const s=u.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),t=s[1]||s[2],n=s[3],r=n.split(":");if(r.length>1){let o=this.decodeAddress(r[0]),l=this.decodeAddress(r[1]);const a=Math.min(o.row,l.row),g=Math.min(o.col,l.col),v=Math.max(o.row,l.row),h=Math.max(o.col,l.col);return o=this.n2l(g)+a,l=this.n2l(h)+v,{top:a,left:g,bottom:v,right:h,sheetName:t,tl:{address:o,col:g,row:a,$col$row:`$${this.n2l(g)}$${a}`,sheetName:t},br:{address:l,col:h,row:v,$col$row:`$${this.n2l(h)}$${v}`,sheetName:t},dimensions:`${o}:${l}`}}if(n.startsWith("#"))return t?{sheetName:t,error:n}:{error:n};const i=this.decodeAddress(n);return t?{sheetName:t,...i}:i},encodeAddress(u,s){return c.n2l(s)+u},encode(){switch(arguments.length){case 2:return c.encodeAddress(arguments[0],arguments[1]);case 4:return`${c.encodeAddress(arguments[0],arguments[1])}:${c.encodeAddress(arguments[2],arguments[3])}`;default:throw new Error("Can only encode with 2 or 4 arguments")}},inRange(u,s){const[t,n,,r,i]=u,[o,l]=s;return o>=t&&o<=r&&l>=n&&l<=i}};d.exports=c},{}],20:[function(e,d,m){const f=(t,n)=>({...t,...n.reduce((r,i)=>(t[i]&&(r[i]={...t[i]}),r),{})}),c=function(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[];t[r]&&(n[r]=f(t[r],i))},u=t=>Object.keys(t).length===0,s=t=>{if(!t)return t;if(u(t))return{};const n={...t};return c(t,n,"font",["color"]),c(t,n,"alignment"),c(t,n,"protection"),t.border&&(c(t,n,"border"),c(t.border,n.border,"top",["color"]),c(t.border,n.border,"left",["color"]),c(t.border,n.border,"bottom",["color"]),c(t.border,n.border,"right",["color"]),c(t.border,n.border,"diagonal",["color"])),t.fill&&(c(t,n,"fill",["fgColor","bgColor","center"]),t.fill.stops&&(n.fill.stops=t.fill.stops.map(r=>f(r,["color"])))),n};m.copyStyle=s},{}],21:[function(e,d,m){(function(f){(function(){const c=e("crypto"),u={hash(s){const t=c.createHash(s);for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{n=i});let r=[];t.on("opentag",i=>r.push({eventType:"opentag",value:i})),t.on("text",i=>r.push({eventType:"text",value:i})),t.on("closetag",i=>r.push({eventType:"closetag",value:i}));for await(const i of s){if(t.write(u(i)),n)throw n;yield r,r=[]}}},{"./browser-buffer-decode":16,"readable-stream":491,saxes:496}],23:[function(e,d,m){const f=e("./col-cache"),c=/(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi,u=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;function s(t,n,r){const i=f.decode(n),o=f.decode(r);return t.replace(c,(l,a,g,v,h)=>{if(h)return l;const w=u.exec(v);if(w){const y=w[1],S=w[2].toUpperCase(),E=w[3],I=w[4];if(S.length>3||S.length===3&&S>"XFD")return l;let F=f.l2n(S),B=parseInt(I,10);return y||(F+=o.col-i.col),E||(B+=o.row-i.row),(a||"")+(y||"")+f.n2l(F)+(E||"")+B}return l})}d.exports={slideFormula:s}},{"./col-cache":19}],24:[function(e,d,m){(function(f,c){(function(){const u=e("readable-stream"),s=e("./utils"),t=e("./string-buf");class n{constructor(g,v){this._data=g,this._encoding=v}get length(){return this.toBuffer().length}copy(g,v,h,w){return this.toBuffer().copy(g,v,h,w)}toBuffer(){return this._buffer||(this._buffer=c.from(this._data,this._encoding)),this._buffer}}class r{constructor(g){this._data=g}get length(){return this._data.length}copy(g,v,h,w){return this._data._buf.copy(g,v,h,w)}toBuffer(){return this._data.toBuffer()}}class i{constructor(g){this._data=g}get length(){return this._data.length}copy(g,v,h,w){this._data.copy(g,v,h,w)}toBuffer(){return this._data}}class o{constructor(g){this.size=g,this.buffer=c.alloc(g),this.iRead=0,this.iWrite=0}toBuffer(){if(this.iRead===0&&this.iWrite===this.size)return this.buffer;const g=c.alloc(this.iWrite-this.iRead);return this.buffer.copy(g,0,this.iRead,this.iWrite),g}get length(){return this.iWrite-this.iRead}get eod(){return this.iRead===this.iWrite}get full(){return this.iWrite===this.size}read(g){let v;return g===0?null:g===void 0||g>=this.length?(v=this.toBuffer(),this.iRead=this.iWrite,v):(v=c.alloc(g),this.buffer.copy(v,0,this.iRead,g),this.iRead+=g,v)}write(g,v,h){const w=Math.min(h,this.size-this.iWrite);return g.copy(this.buffer,this.iWrite,v,v+w),this.iWrite+=w,w}}const l=function(a){a=a||{},this.bufSize=a.bufSize||1024*1024,this.buffers=[],this.batch=a.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};s.inherits(l,u.Duplex,{toBuffer(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return c.concat(this.buffers.map(a=>a.toBuffer()))}},_getWritableBuffer(){if(this.buffers.length){const g=this.buffers[this.buffers.length-1];if(!g.full)return g}const a=new o(this.bufSize);return this.buffers.push(a),a},async _pipe(a){const g=function(v){return new Promise(h=>{v.write(a.toBuffer(),()=>{h()})})};await Promise.all(this.pipes.map(g))},_writeToBuffers(a){let g=0;const v=a.length;for(;g1;)this._pipe(this.buffers.shift());else this.corked?(this._writeToBuffers(h),f.nextTick(v)):(await this._pipe(h),v());else this.paused||this.emit("data",h.toBuffer()),this._writeToBuffers(h),this.emit("readable");return!0},cork(){this.corked=!0},_flush(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork(){this.corked=!1,this._flush()},end(a,g,v){const h=w=>{w?v(w):(this._flush(),this.pipes.forEach(y=>{y.end()}),this.emit("finish"))};a?this.write(a,g,h):h()},read(a){let g;if(a){for(g=[];a&&this.buffers.length&&!this.buffers[0].eod;){const v=this.buffers[0],h=v.read(a);a-=h.length,g.push(h),v.eod&&v.full&&this.buffers.shift()}return c.concat(g)}return g=this.buffers.map(v=>v.toBuffer()).filter(Boolean),this.buffers=[],c.concat(g)},setEncoding(a){this.encoding=a},pause(){this.paused=!0},resume(){this.paused=!1},isPaused(){return!!this.paused},pipe(a){this.pipes.push(a),!this.paused&&this.buffers.length&&this.end()},unpipe(a){this.pipes=this.pipes.filter(g=>g!==a)},unshift(){throw new Error("Not Implemented")},wrap(){throw new Error("Not Implemented")}}),d.exports=l}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"./string-buf":25,"./utils":27,_process:467,buffer:220,"readable-stream":491}],25:[function(e,d,m){(function(f){(function(){class c{constructor(s){this._buf=f.alloc(s&&s.size||16384),this._encoding=s&&s.encoding||"utf8",this._inPos=0,this._buffer=void 0}get length(){return this._inPos}get capacity(){return this._buf.length}get buffer(){return this._buf}toBuffer(){return this._buffer||(this._buffer=f.alloc(this.length),this._buf.copy(this._buffer,0,0,this.length)),this._buffer}reset(s){s=s||0,this._buffer=void 0,this._inPos=s}_grow(s){let t=this._buf.length*2;for(;t=this._buf.length-4;)this._grow(this._inPos+s.length),t=this._inPos+this._buf.write(s,this._inPos,this._encoding);this._inPos=t}addStringBuf(s){s.length&&(this._buffer=void 0,this.length+s.length>this.capacity&&this._grow(this.length+s.length),s._buf.copy(this._buf,this._inPos,0,s.length),this._inPos+=s.length)}}d.exports=c}).call(this)}).call(this,e("buffer").Buffer)},{buffer:220}],26:[function(e,d,m){const{toString:f}=Object.prototype,c=/["&<>]/,u={each:function(t,n){t&&(Array.isArray(t)?t.forEach(n):Object.keys(t).forEach(r=>{n(t[r],r)}))},some:function(t,n){return t?Array.isArray(t)?t.some(n):Object.keys(t).some(r=>n(t[r],r)):!1},every:function(t,n){return t?Array.isArray(t)?t.every(n):Object.keys(t).every(r=>n(t[r],r)):!0},map:function(t,n){return t?Array.isArray(t)?t.map(n):Object.keys(t).map(r=>n(t[r],r)):[]},keyBy(s,t){return s.reduce((n,r)=>(n[r[t]]=r,n),{})},isEqual:function(t,n){const r=typeof t,i=typeof n,o=Array.isArray(t),l=Array.isArray(n);let a;if(r!==i)return!1;switch(typeof t){case"object":if(o||l)return o&&l?t.length===n.length&&t.every((g,v)=>{const h=n[v];return u.isEqual(g,h)}):!1;if(t===null||n===null)return t===n;if(a=Object.keys(t),Object.keys(n).length!==a.length)return!1;for(const g of a)if(!n.hasOwnProperty(g))return!1;return u.every(t,(g,v)=>{const h=n[v];return u.isEqual(g,h)});default:return t===n}},escapeHtml(s){const t=c.exec(s);if(!t)return s;let n="",r="",i=0,o=t.index;for(;o":r=">";break;default:continue}i!==o&&(n+=s.substring(i,o)),i=o+1,n+=r}return i!==o?n+s.substring(i,o):n},strcmp(s,t){return st?1:0},isUndefined(s){return f.call(s)==="[object Undefined]"},isObject(s){return f.call(s)==="[object Object]"},deepMerge(){const s=arguments[0]||{},{length:t}=arguments;let n,r,i;function o(l,a){n=s[a],i=Array.isArray(l),u.isObject(l)||i?(i?(i=!1,r=n&&Array.isArray(n)?n:[]):r=n&&u.isObject(n)?n:{},s[a]=u.deepMerge(r,l)):u.isUndefined(l)||(s[a]=l)}for(let l=0;l{Object.defineProperty(r,g,Object.getOwnPropertyDescriptor(o,g))});const a={constructor:{value:r,enumerable:!1,writable:!1,configurable:!0}};l&&Object.keys(l).forEach(g=>{a[g]=Object.getOwnPropertyDescriptor(l,g)}),r.prototype=Object.create(i.prototype,a)},t=/[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/,n={nop(){},promiseImmediate(r){return new Promise(i=>{f.setImmediate?c(()=>{i(r)}):setTimeout(()=>{i(r)},1)})},inherits:s,dateToExcel(r,i){return 25569+r.getTime()/(24*3600*1e3)-(i?1462:0)},excelToDate(r,i){const o=Math.round((r-25569+(i?1462:0))*24*3600*1e3);return new Date(o)},parsePath(r){const i=r.lastIndexOf("/");return{path:r.substring(0,i),name:r.substring(i+1)}},getRelsPath(r){const i=n.parsePath(r);return`${i.path}/_rels/${i.name}.rels`},xmlEncode(r){const i=t.exec(r);if(!i)return r;let o="",l="",a=0,g=i.index;for(;g=11&&v!==13)){l="";break}continue}}a!==g&&(o+=r.substring(a,g)),a=g+1,l&&(o+=l)}return a!==g?o+r.substring(a,g):o},xmlDecode(r){return r.replace(/&([a-z]*);/g,i=>{switch(i){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case""":return'"';default:return i}})},validInt(r){const i=parseInt(r,10);return Number.isNaN(i)?0:i},isDateFmt(r){return r?(r=r.replace(/\[[^\]]*]/g,""),r=r.replace(/"[^"]*"/g,""),r.match(/[ymdhMsb]+/)!==null):!1},fs:{exists(r){return new Promise(i=>{u.access(r,u.constants.F_OK,o=>{i(!o)})})}},toIsoDateString(r){return r.toIsoString().subsstr(0,10)},parseBoolean(r){return r===!0||r==="true"||r===1||r==="1"}};d.exports=n}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{},e("timers").setImmediate)},{fs:216,timers:523}],28:[function(e,d,m){const f=e("./under-dash"),c=e("./utils"),u="<",s=">",t="";function r(l,a,g){l.push(` ${a}="${c.xmlEncode(g.toString())}"`)}function i(l,a){if(a){const g=[];f.each(a,(v,h)=>{v!==void 0&&r(g,h,v)}),l.push(g.join(""))}}class o{constructor(){this._xml=[],this._stack=[],this._rollbacks=[]}get tos(){return this._stack.length?this._stack[this._stack.length-1]:void 0}get cursor(){return this._xml.length}openXml(a){const g=this._xml;g.push(" +`)}openNode(a,g){const v=this.tos,h=this._xml;v&&this.open&&h.push(s),this._stack.push(a),h.push(u),h.push(a),i(h,g),this.leaf=!0,this.open=!0}addAttribute(a,g){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");g!==void 0&&r(this._xml,a,g)}addAttributes(a){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");i(this._xml,a)}writeText(a){const g=this._xml;this.open&&(g.push(s),this.open=!1),this.leaf=!1,g.push(c.xmlEncode(a.toString()))}writeXml(a){this.open&&(this._xml.push(s),this.open=!1),this.leaf=!1,this._xml.push(a)}closeNode(){const a=this._stack.pop(),g=this._xml;this.leaf?g.push(n):(g.push(t),g.push(a),g.push(s)),this.open=!1,this.leaf=!1}leafNode(a,g,v){this.openNode(a,g),v!==void 0&&this.writeText(v),this.closeNode()}closeAll(){for(;this._stack.length;)this.closeNode()}addRollback(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}commit(){this._rollbacks.pop()}rollback(){const a=this._rollbacks.pop();this._xml.length>a.xml&&this._xml.splice(a.xml,this._xml.length-a.xml),this._stack.length>a.stack&&this._stack.splice(a.stack,this._stack.length-a.stack),this.leaf=a.leaf,this.open=a.open}get xml(){return this.closeAll(),this._xml.join("")}}o.StdDocAttributes={version:"1.0",encoding:"UTF-8",standalone:"yes"},d.exports=o},{"./under-dash":26,"./utils":27}],29:[function(e,d,m){(function(f){(function(){const c=e("events"),u=e("jszip"),s=e("./stream-buf"),{stringToBuffer:t}=e("./browser-buffer-encode");class n extends c.EventEmitter{constructor(i){super(),this.options=Object.assign({type:"nodebuffer",compression:"DEFLATE"},i),this.zip=new u,this.stream=new s}append(i,o){o.hasOwnProperty("base64")&&o.base64?this.zip.file(o.name,i,{base64:!0}):(f.browser&&typeof i=="string"&&(i=t(i)),this.zip.file(o.name,i))}async finalize(){const i=await this.zip.generateAsync(this.options);this.stream.end(i),this.emit("finish")}read(i){return this.stream.read(i)}setEncoding(i){return this.stream.setEncoding(i)}pause(){return this.stream.pause()}resume(){return this.stream.resume()}isPaused(){return this.stream.isPaused()}pipe(i,o){return this.stream.pipe(i,o)}unpipe(i){return this.stream.unpipe(i)}unshift(i){return this.stream.unshift(i)}wrap(i){return this.stream.wrap(i)}}d.exports={ZipWriter:n}}).call(this)}).call(this,e("_process"))},{"./browser-buffer-encode":17,"./stream-buf":24,_process:467,events:422,jszip:441}],30:[function(e,d,m){d.exports={0:{f:"General"},1:{f:"0"},2:{f:"0.00"},3:{f:"#,##0"},4:{f:"#,##0.00"},9:{f:"0%"},10:{f:"0.00%"},11:{f:"0.00E+00"},12:{f:"# ?/?"},13:{f:"# ??/??"},14:{f:"mm-dd-yy"},15:{f:"d-mmm-yy"},16:{f:"d-mmm"},17:{f:"mmm-yy"},18:{f:"h:mm AM/PM"},19:{f:"h:mm:ss AM/PM"},20:{f:"h:mm"},21:{f:"h:mm:ss"},22:{f:'m/d/yy "h":mm'},27:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},28:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},29:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},30:{"zh-tw":"m/d/yy ","zh-cn":"m-d-yy","ja-jp":"m/d/yy","ko-kr":"mm-dd-yy"},31:{"zh-tw":'yyyy"年"m"月"d"日"',"zh-cn":'yyyy"年"m"月"d"日"',"ja-jp":'yyyy"年"m"月"d"日"',"ko-kr":'yyyy"년" mm"월" dd"일"'},32:{"zh-tw":'hh"時"mm"分"',"zh-cn":'h"时"mm"分"',"ja-jp":'h"時"mm"分"',"ko-kr":'h"시" mm"분"'},33:{"zh-tw":'hh"時"mm"分"ss"秒"',"zh-cn":'h"时"mm"分"ss"秒"',"ja-jp":'h"時"mm"分"ss"秒"',"ko-kr":'h"시" mm"분" ss"초"'},34:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},35:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},36:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},37:{f:"#,##0 ;(#,##0)"},38:{f:"#,##0 ;[Red](#,##0)"},39:{f:"#,##0.00 ;(#,##0.00)"},40:{f:"#,##0.00 ;[Red](#,##0.00)"},45:{f:"mm:ss"},46:{f:"[h]:mm:ss"},47:{f:"mmss.0"},48:{f:"##0.0E+0"},49:{f:"@"},50:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},51:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},52:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'yyyy"年"m"月"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},53:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'m"月"d"日"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},54:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},55:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},56:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},57:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},58:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},59:{"th-th":"t0"},60:{"th-th":"t0.00"},61:{"th-th":"t#,##0"},62:{"th-th":"t#,##0.00"},67:{"th-th":"t0%"},68:{"th-th":"t0.00%"},69:{"th-th":"t# ?/?"},70:{"th-th":"t# ??/??"},81:{"th-th":"d/m/bb"}}},{}],31:[function(e,d,m){d.exports={OfficeDocument:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",Worksheet:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",CalcChain:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain",SharedStrings:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",Styles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",Theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",Hyperlink:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",Image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",CoreProperties:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",ExtenderProperties:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",Comments:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",VmlDrawing:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",Table:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table"}},{}],32:[function(e,d,m){const f=e("../../utils/parse-sax"),c=e("../../utils/xml-stream");class u{prepare(){}render(){}parseOpen(t){}parseText(t){}parseClose(t){}reconcile(t,n){}reset(){this.model=null,this.map&&Object.values(this.map).forEach(t=>{t instanceof u?t.reset():t.xform&&t.xform.reset()})}mergeModel(t){this.model=Object.assign(this.model||{},t)}async parse(t){for await(const n of t)for(const{eventType:r,value:i}of n)if(r==="opentag")this.parseOpen(i);else if(r==="text")this.parseText(i);else if(r==="closetag"&&!this.parseClose(i.name))return this.model;return this.model}async parseStream(t){return this.parse(f(t))}get xml(){return this.toXml(this.model)}toXml(t){const n=new c;return this.render(n,t),n.xml}static toAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(t===void 0){if(r)return n}else if(r||t!==n)return t.toString()}static toStringAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return u.toAttribute(t,n,r)}static toStringValue(t,n){return t===void 0?n:t}static toBoolAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(t===void 0){if(r)return n}else if(r||t!==n)return t?"1":"0"}static toBoolValue(t,n){return t===void 0?n:t==="1"}static toIntAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return u.toAttribute(t,n,r)}static toIntValue(t,n){return t===void 0?n:parseInt(t,10)}static toFloatAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return u.toAttribute(t,n,r)}static toFloatValue(t,n){return t===void 0?n:parseFloat(t)}}d.exports=u},{"../../utils/parse-sax":22,"../../utils/xml-stream":28}],33:[function(e,d,m){const f=e("../base-xform"),c=e("../../../utils/col-cache");class u extends f{render(r,i){r.openNode("definedName",{name:i.name,localSheetId:i.localSheetId}),r.writeText(i.ranges.join(",")),r.closeNode()}parseOpen(r){switch(r.name){case"definedName":return this._parsedName=r.attributes.name,this._parsedLocalSheetId=r.attributes.localSheetId,this._parsedText=[],!0;default:return!1}}parseText(r){this._parsedText.push(r)}parseClose(){return this.model={name:this._parsedName,ranges:t(this._parsedText.join(""))},this._parsedLocalSheetId!==void 0&&(this.model.localSheetId=parseInt(this._parsedLocalSheetId,10)),!1}}function s(n){try{return c.decodeEx(n),!0}catch{return!1}}function t(n){const r=[];let i=!1,o="";return n.split(",").forEach(l=>{if(!l)return;const a=(l.match(/'/g)||[]).length;if(!a){i?o+=`${l},`:s(l)&&r.push(l);return}const g=a%2===0;!i&&g&&s(l)?r.push(l):i&&!g?(i=!1,s(o+l)&&r.push(o+l),o=""):(i=!0,o+=`${l},`)}),r}d.exports=u},{"../../../utils/col-cache":19,"../base-xform":32}],34:[function(e,d,m){const f=e("../../../utils/utils"),c=e("../base-xform");class u extends c{render(t,n){t.leafNode("sheet",{sheetId:n.id,name:n.name,state:n.state,"r:id":n.rId})}parseOpen(t){return t.name==="sheet"?(this.model={name:f.xmlDecode(t.attributes.name),id:parseInt(t.attributes.sheetId,10),state:t.attributes.state,rId:t.attributes["r:id"]},!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../../../utils/utils":27,"../base-xform":32}],35:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.leafNode("calcPr",{calcId:171027,fullCalcOnLoad:t.fullCalcOnLoad?1:void 0})}parseOpen(s){return s.name==="calcPr"?(this.model={},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],36:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.leafNode("workbookPr",{date1904:t.date1904?1:void 0,defaultThemeVersion:164011,filterPrivacy:1})}parseOpen(s){return s.name==="workbookPr"?(this.model={date1904:s.attributes.date1904==="1"},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],37:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){const n={xWindow:t.x||0,yWindow:t.y||0,windowWidth:t.width||12e3,windowHeight:t.height||24e3,firstSheet:t.firstSheet,activeTab:t.activeTab};t.visibility&&t.visibility!=="visible"&&(n.visibility=t.visibility),s.leafNode("workbookView",n)}parseOpen(s){if(s.name==="workbookView"){const t=this.model={},n=function(i,o,l){const a=o!==void 0?t[i]=o:l;a!==void 0&&(t[i]=a)},r=function(i,o,l){const a=o!==void 0?t[i]=parseInt(o,10):l;a!==void 0&&(t[i]=a)};return r("x",s.attributes.xWindow,0),r("y",s.attributes.yWindow,0),r("width",s.attributes.windowWidth,25e3),r("height",s.attributes.windowHeight,1e4),n("visibility",s.attributes.visibility,"visible"),r("activeTab",s.attributes.activeTab,void 0),r("firstSheet",s.attributes.firstSheet,void 0),!0}return!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],38:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../utils/col-cache"),u=e("../../../utils/xml-stream"),s=e("../base-xform"),t=e("../static-xform"),n=e("../list-xform"),r=e("./defined-name-xform"),i=e("./sheet-xform"),o=e("./workbook-view-xform"),l=e("./workbook-properties-xform"),a=e("./workbook-calc-properties-xform");class g extends s{constructor(){super(),this.map={fileVersion:g.STATIC_XFORMS.fileVersion,workbookPr:new l,bookViews:new n({tag:"bookViews",count:!1,childXform:new o}),sheets:new n({tag:"sheets",count:!1,childXform:new i}),definedNames:new n({tag:"definedNames",count:!1,childXform:new r}),calcPr:new a}}prepare(h){h.sheets=h.worksheets;const w=[];let y=0;h.sheets.forEach(S=>{if(S.pageSetup&&S.pageSetup.printArea&&S.pageSetup.printArea.split("&&").forEach(E=>{const I=E.split(":"),F={name:"_xlnm.Print_Area",ranges:[`'${S.name}'!$${I[0]}:$${I[1]}`],localSheetId:y};w.push(F)}),S.pageSetup&&(S.pageSetup.printTitlesRow||S.pageSetup.printTitlesColumn)){const E=[];if(S.pageSetup.printTitlesColumn){const F=S.pageSetup.printTitlesColumn.split(":");E.push(`'${S.name}'!$${F[0]}:$${F[1]}`)}if(S.pageSetup.printTitlesRow){const F=S.pageSetup.printTitlesRow.split(":");E.push(`'${S.name}'!$${F[0]}:$${F[1]}`)}const I={name:"_xlnm.Print_Titles",ranges:E,localSheetId:y};w.push(I)}y++}),w.length&&(h.definedNames=h.definedNames.concat(w)),(h.media||[]).forEach((S,E)=>{S.name=S.type+(E+1)})}render(h,w){h.openXml(u.StdDocAttributes),h.openNode("workbook",g.WORKBOOK_ATTRIBUTES),this.map.fileVersion.render(h),this.map.workbookPr.render(h,w.properties),this.map.bookViews.render(h,w.views),this.map.sheets.render(h,w.sheets),this.map.definedNames.render(h,w.definedNames),this.map.calcPr.render(h,w.calcProperties),h.closeNode()}parseOpen(h){if(this.parser)return this.parser.parseOpen(h),!0;switch(h.name){case"workbook":return!0;default:return this.parser=this.map[h.name],this.parser&&this.parser.parseOpen(h),!0}}parseText(h){this.parser&&this.parser.parseText(h)}parseClose(h){if(this.parser)return this.parser.parseClose(h)||(this.parser=void 0),!0;switch(h){case"workbook":return this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}},this.map.definedNames.model&&(this.model.definedNames=this.map.definedNames.model),!1;default:return!0}}reconcile(h){const w=(h.workbookRels||[]).reduce((F,B)=>(F[B.Id]=B,F),{}),y=[];let S,E=0;(h.sheets||[]).forEach(F=>{const B=w[F.rId];B&&(S=h.worksheetHash[`xl/${B.Target.replace(/^(\s|\/xl\/)+/,"")}`],S&&(S.name=F.name,S.id=F.id,S.state=F.state,y[E++]=S))});const I=[];f.each(h.definedNames,F=>{if(F.name==="_xlnm.Print_Area"){if(S=y[F.localSheetId],S){S.pageSetup||(S.pageSetup={});const B=c.decodeEx(F.ranges[0]);S.pageSetup.printArea=S.pageSetup.printArea?`${S.pageSetup.printArea}&&${B.dimensions}`:B.dimensions}}else if(F.name==="_xlnm.Print_Titles"){if(S=y[F.localSheetId],S){S.pageSetup||(S.pageSetup={});const B=F.ranges.join(","),j=/\$/g,X=/\$\d+:\$\d+/,G=B.match(X);if(G&&G.length){const H=G[0];S.pageSetup.printTitlesRow=H.replace(j,"")}const V=/\$[A-Z]+:\$[A-Z]+/,J=B.match(V);if(J&&J.length){const H=J[0];S.pageSetup.printTitlesColumn=H.replace(j,"")}}}else I.push(F)}),h.definedNames=I,h.media.forEach((F,B)=>{F.index=B})}}g.WORKBOOK_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x15","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},g.STATIC_XFORMS={fileVersion:new t({tag:"fileVersion",$:{appName:"xl",lastEdited:5,lowestEdited:5,rupBuild:9303}})},d.exports=g},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./defined-name-xform":33,"./sheet-xform":34,"./workbook-calc-properties-xform":35,"./workbook-properties-xform":36,"./workbook-view-xform":37}],39:[function(e,d,m){const f=e("../strings/rich-text-xform"),c=e("../../../utils/utils"),u=e("../base-xform"),s=d.exports=function(t){this.model=t};c.inherits(s,u,{get tag(){return"r"},get richTextXform(){return this._richTextXform||(this._richTextXform=new f),this._richTextXform},render(t,n){n=n||this.model,t.openNode("comment",{ref:n.ref,authorId:0}),t.openNode("text"),n&&n.note&&n.note.texts&&n.note.texts.forEach(r=>{this.richTextXform.render(t,r)}),t.closeNode(),t.closeNode()},parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case"comment":return this.model={type:"note",note:{texts:[]},...t.attributes},!0;case"r":return this.parser=this.richTextXform,this.parser.parseOpen(t),!0;default:return!1}},parseText(t){this.parser&&this.parser.parseText(t)},parseClose(t){switch(t){case"comment":return!1;case"r":return this.model.note.texts.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(t),!0}}})},{"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],40:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../../../utils/utils"),u=e("../base-xform"),s=e("./comment-xform"),t=d.exports=function(){this.map={comment:new s}};c.inherits(t,u,{COMMENTS_ATTRIBUTES:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},{render(n,r){r=r||this.model,n.openXml(f.StdDocAttributes),n.openNode("comments",t.COMMENTS_ATTRIBUTES),n.openNode("authors"),n.leafNode("author",null,"Author"),n.closeNode(),n.openNode("commentList"),r.comments.forEach(i=>{this.map.comment.render(n,i)}),n.closeNode(),n.closeNode()},parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"commentList":return this.model={comments:[]},!0;case"comment":return this.parser=this.map.comment,this.parser.parseOpen(n),!0;default:return!1}},parseText(n){this.parser&&this.parser.parseText(n)},parseClose(n){switch(n){case"commentList":return!1;case"comment":return this.model.comments.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(n),!0}}})},{"../../../utils/utils":27,"../../../utils/xml-stream":28,"../base-xform":32,"./comment-xform":39}],41:[function(e,d,m){const f=e("../../base-xform");class c extends f{constructor(s){super(),this._model=s}get tag(){return this._model&&this._model.tag}render(s,t,n){t===n[2]?s.leafNode(this.tag):this.tag==="x:SizeWithCells"&&t===n[1]&&s.leafNode(this.tag)}parseOpen(s){switch(s.name){case this.tag:return this.model={},this.model[this.tag]=!0,!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../../base-xform":32}],42:[function(e,d,m){const f=e("../../base-xform");class c extends f{constructor(s){super(),this._model=s}get tag(){return this._model&&this._model.tag}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(s){switch(s.name){case this.tag:return this.text="",!0;default:return!1}}parseText(s){this.text=s}parseClose(){return!1}}d.exports=c},{"../../base-xform":32}],43:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"x:Anchor"}getAnchorRect(s){const t=Math.floor(s.left),n=Math.floor((s.left-t)*68),r=Math.floor(s.top),i=Math.floor((s.top-r)*18),o=Math.floor(s.right),l=Math.floor((s.right-o)*68),a=Math.floor(s.bottom),g=Math.floor((s.bottom-a)*18);return[t,n,r,i,o,l,a,g]}getDefaultRect(s){const t=s.col,n=6,r=Math.max(s.row-2,0),i=14,o=t+2,l=2,a=r+4;return[t,n,r,i,o,l,a,16]}render(s,t){const n=t.anchor?this.getAnchorRect(t.anchor):this.getDefaultRect(t.refAddress);s.leafNode("x:Anchor",null,n.join(", "))}parseOpen(s){switch(s.name){case this.tag:return this.text="",!0;default:return!1}}parseText(s){this.text=s}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],44:[function(e,d,m){const f=e("../base-xform"),c=e("./vml-anchor-xform"),u=e("./style/vml-protection-xform"),s=e("./style/vml-position-xform"),t=["twoCells","oneCells","absolute"];class n extends f{constructor(){super(),this.map={"x:Anchor":new c,"x:Locked":new u({tag:"x:Locked"}),"x:LockText":new u({tag:"x:LockText"}),"x:SizeWithCells":new s({tag:"x:SizeWithCells"}),"x:MoveWithCells":new s({tag:"x:MoveWithCells"})}}get tag(){return"x:ClientData"}render(i,o){const{protection:l,editAs:a}=o.note;i.openNode(this.tag,{ObjectType:"Note"}),this.map["x:MoveWithCells"].render(i,a,t),this.map["x:SizeWithCells"].render(i,a,t),this.map["x:Anchor"].render(i,o),this.map["x:Locked"].render(i,l.locked),i.leafNode("x:AutoFill",null,"False"),this.map["x:LockText"].render(i,l.lockText),i.leafNode("x:Row",null,o.refAddress.row-1),i.leafNode("x:Column",null,o.refAddress.col-1),i.closeNode()}parseOpen(i){switch(i.name){case this.tag:this.reset(),this.model={anchor:[],protection:{},editAs:""};break;default:this.parser=this.map[i.name],this.parser&&this.parser.parseOpen(i);break}return!0}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case this.tag:return this.normalizeModel(),!1;default:return!0}}normalizeModel(){const i=Object.assign({},this.map["x:MoveWithCells"].model,this.map["x:SizeWithCells"].model),o=Object.keys(i).length;this.model.editAs=t[o],this.model.anchor=this.map["x:Anchor"].text,this.model.protection.locked=this.map["x:Locked"].text,this.model.protection.lockText=this.map["x:LockText"].text}}d.exports=n},{"../base-xform":32,"./style/vml-position-xform":41,"./style/vml-protection-xform":42,"./vml-anchor-xform":43}],45:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("./vml-shape-xform");class s extends c{constructor(){super(),this.map={"v:shape":new u}}get tag(){return"xml"}render(n,r){n.openXml(f.StdDocAttributes),n.openNode(this.tag,s.DRAWING_ATTRIBUTES),n.openNode("o:shapelayout",{"v:ext":"edit"}),n.leafNode("o:idmap",{"v:ext":"edit",data:1}),n.closeNode(),n.openNode("v:shapetype",{id:"_x0000_t202",coordsize:"21600,21600","o:spt":202,path:"m,l,21600r21600,l21600,xe"}),n.leafNode("v:stroke",{joinstyle:"miter"}),n.leafNode("v:path",{gradientshapeok:"t","o:connecttype":"rect"}),n.closeNode(),r.comments.forEach((i,o)=>{this.map["v:shape"].render(n,i,o)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset(),this.model={comments:[]};break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.model.comments.push(this.parser.model),this.parser=void 0),!0;switch(n){case this.tag:return!1;default:return!0}}reconcile(n,r){n.anchors.forEach(i=>{i.br?this.map["xdr:twoCellAnchor"].reconcile(i,r):this.map["xdr:oneCellAnchor"].reconcile(i,r)})}}s.DRAWING_ATTRIBUTES={"xmlns:v":"urn:schemas-microsoft-com:vml","xmlns:o":"urn:schemas-microsoft-com:office:office","xmlns:x":"urn:schemas-microsoft-com:office:excel"},d.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32,"./vml-shape-xform":46}],46:[function(e,d,m){const f=e("../base-xform"),c=e("./vml-textbox-xform"),u=e("./vml-client-data-xform");class s extends f{constructor(){super(),this.map={"v:textbox":new c,"x:ClientData":new u}}get tag(){return"v:shape"}render(n,r,i){n.openNode("v:shape",s.V_SHAPE_ATTRIBUTES(r,i)),n.leafNode("v:fill",{color2:"infoBackground [80]"}),n.leafNode("v:shadow",{color:"none [81]",obscured:"t"}),n.leafNode("v:path",{"o:connecttype":"none"}),this.map["v:textbox"].render(n,r),this.map["x:ClientData"].render(n,r),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset(),this.model={margins:{insetmode:n.attributes["o:insetmode"]},anchor:"",editAs:"",protection:{}};break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model.margins.inset=this.map["v:textbox"].model&&this.map["v:textbox"].model.inset,this.model.protection=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.protection,this.model.anchor=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.anchor,this.model.editAs=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.editAs,!1;default:return!0}}}s.V_SHAPE_ATTRIBUTES=(t,n)=>({id:`_x0000_s${1025+n}`,type:"#_x0000_t202",style:"position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden",fillcolor:"infoBackground [80]",strokecolor:"none [81]","o:insetmode":t.note.margins&&t.note.margins.insetmode}),d.exports=s},{"../base-xform":32,"./vml-client-data-xform":44,"./vml-textbox-xform":47}],47:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"v:textbox"}conversionUnit(s,t,n){return`${parseFloat(s)*t.toFixed(2)}${n}`}reverseConversionUnit(s){return(s||"").split(",").map(t=>Number(parseFloat(this.conversionUnit(parseFloat(t),.1,"")).toFixed(2)))}render(s,t){const n={style:"mso-direction-alt:auto"};if(t&&t.note){let{inset:r}=t.note&&t.note.margins;Array.isArray(r)&&(r=r.map(i=>this.conversionUnit(i,10,"mm")).join(",")),r&&(n.inset=r)}s.openNode("v:textbox",n),s.leafNode("div",{style:"text-align:left"}),s.closeNode()}parseOpen(s){switch(s.name){case this.tag:return this.model={inset:this.reverseConversionUnit(s.attributes.inset)},!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],48:[function(e,d,m){const f=e("./base-xform");class c extends f{createNewModel(s){return{}}parseOpen(s){return this.parser=this.parser||this.map[s.name],this.parser?(this.parser.parseOpen(s),!0):s.name===this.tag?(this.model=this.createNewModel(s),!0):!1}parseText(s){this.parser&&this.parser.parseText(s)}onParserClose(s,t){this.model[s]=t.model}parseClose(s){return this.parser?(this.parser.parseClose(s)||(this.onParserClose(s,this.parser),this.parser=void 0),!0):s!==this.tag}}d.exports=c},{"./base-xform":32}],49:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.openNode("HeadingPairs"),s.openNode("vt:vector",{size:2,baseType:"variant"}),s.openNode("vt:variant"),s.leafNode("vt:lpstr",void 0,"Worksheets"),s.closeNode(),s.openNode("vt:variant"),s.leafNode("vt:i4",void 0,t.length),s.closeNode(),s.closeNode(),s.closeNode()}parseOpen(s){return s.name==="HeadingPairs"}parseText(){}parseClose(s){return s!=="HeadingPairs"}}d.exports=c},{"../base-xform":32}],50:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.openNode("TitlesOfParts"),s.openNode("vt:vector",{size:t.length,baseType:"lpstr"}),t.forEach(n=>{s.leafNode("vt:lpstr",void 0,n.name)}),s.closeNode(),s.closeNode()}parseOpen(s){return s.name==="TitlesOfParts"}parseText(){}parseClose(s){return s!=="TitlesOfParts"}}d.exports=c},{"../base-xform":32}],51:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("../simple/string-xform"),s=e("./app-heading-pairs-xform"),t=e("./app-titles-of-parts-xform");class n extends c{constructor(){super(),this.map={Company:new u({tag:"Company"}),Manager:new u({tag:"Manager"}),HeadingPairs:new s,TitleOfParts:new t}}render(i,o){i.openXml(f.StdDocAttributes),i.openNode("Properties",n.PROPERTY_ATTRIBUTES),i.leafNode("Application",void 0,"Microsoft Excel"),i.leafNode("DocSecurity",void 0,"0"),i.leafNode("ScaleCrop",void 0,"false"),this.map.HeadingPairs.render(i,o.worksheets),this.map.TitleOfParts.render(i,o.worksheets),this.map.Company.render(i,o.company||""),this.map.Manager.render(i,o.manager),i.leafNode("LinksUpToDate",void 0,"false"),i.leafNode("SharedDoc",void 0,"false"),i.leafNode("HyperlinksChanged",void 0,"false"),i.leafNode("AppVersion",void 0,"16.0300"),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"Properties":return!0;default:return this.parser=this.map[i.name],this.parser?(this.parser.parseOpen(i),!0):!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case"Properties":return this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model},!1;default:return!0}}}n.DateFormat=function(r){return r.toISOString().replace(/[.]\d{3,6}/,"")},n.DateAttrs={"xsi:type":"dcterms:W3CDTF"},n.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties","xmlns:vt":"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"},d.exports=n},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/string-xform":119,"./app-heading-pairs-xform":49,"./app-titles-of-parts-xform":50}],52:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform");class u extends c{render(t,n){t.openXml(f.StdDocAttributes),t.openNode("Types",u.PROPERTY_ATTRIBUTES);const r={};(n.media||[]).forEach(o=>{if(o.type==="image"){const l=o.extension;r[l]||(r[l]=!0,t.leafNode("Default",{Extension:l,ContentType:`image/${l}`}))}}),t.leafNode("Default",{Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"}),t.leafNode("Default",{Extension:"xml",ContentType:"application/xml"}),t.leafNode("Override",{PartName:"/xl/workbook.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}),n.worksheets.forEach(o=>{const l=`/xl/worksheets/sheet${o.id}.xml`;t.leafNode("Override",{PartName:l,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"})}),t.leafNode("Override",{PartName:"/xl/theme/theme1.xml",ContentType:"application/vnd.openxmlformats-officedocument.theme+xml"}),t.leafNode("Override",{PartName:"/xl/styles.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"}),n.sharedStrings&&n.sharedStrings.count&&t.leafNode("Override",{PartName:"/xl/sharedStrings.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"}),n.tables&&n.tables.forEach(o=>{t.leafNode("Override",{PartName:`/xl/tables/${o.target}`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"})}),n.drawings&&n.drawings.forEach(o=>{t.leafNode("Override",{PartName:`/xl/drawings/${o.name}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.drawing+xml"})}),n.commentRefs&&(t.leafNode("Default",{Extension:"vml",ContentType:"application/vnd.openxmlformats-officedocument.vmlDrawing"}),n.commentRefs.forEach(o=>{let{commentName:l}=o;t.leafNode("Override",{PartName:`/xl/${l}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"})})),t.leafNode("Override",{PartName:"/docProps/core.xml",ContentType:"application/vnd.openxmlformats-package.core-properties+xml"}),t.leafNode("Override",{PartName:"/docProps/app.xml",ContentType:"application/vnd.openxmlformats-officedocument.extended-properties+xml"}),t.closeNode()}parseOpen(){return!1}parseText(){}parseClose(){return!1}}u.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"},d.exports=u},{"../../../utils/xml-stream":28,"../base-xform":32}],53:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("../simple/date-xform"),s=e("../simple/string-xform"),t=e("../simple/integer-xform");class n extends c{constructor(){super(),this.map={"dc:creator":new s({tag:"dc:creator"}),"dc:title":new s({tag:"dc:title"}),"dc:subject":new s({tag:"dc:subject"}),"dc:description":new s({tag:"dc:description"}),"dc:identifier":new s({tag:"dc:identifier"}),"dc:language":new s({tag:"dc:language"}),"cp:keywords":new s({tag:"cp:keywords"}),"cp:category":new s({tag:"cp:category"}),"cp:lastModifiedBy":new s({tag:"cp:lastModifiedBy"}),"cp:lastPrinted":new u({tag:"cp:lastPrinted",format:n.DateFormat}),"cp:revision":new t({tag:"cp:revision"}),"cp:version":new s({tag:"cp:version"}),"cp:contentStatus":new s({tag:"cp:contentStatus"}),"cp:contentType":new s({tag:"cp:contentType"}),"dcterms:created":new u({tag:"dcterms:created",attrs:n.DateAttrs,format:n.DateFormat}),"dcterms:modified":new u({tag:"dcterms:modified",attrs:n.DateAttrs,format:n.DateFormat})}}render(i,o){i.openXml(f.StdDocAttributes),i.openNode("cp:coreProperties",n.CORE_PROPERTY_ATTRIBUTES),this.map["dc:creator"].render(i,o.creator),this.map["dc:title"].render(i,o.title),this.map["dc:subject"].render(i,o.subject),this.map["dc:description"].render(i,o.description),this.map["dc:identifier"].render(i,o.identifier),this.map["dc:language"].render(i,o.language),this.map["cp:keywords"].render(i,o.keywords),this.map["cp:category"].render(i,o.category),this.map["cp:lastModifiedBy"].render(i,o.lastModifiedBy),this.map["cp:lastPrinted"].render(i,o.lastPrinted),this.map["cp:revision"].render(i,o.revision),this.map["cp:version"].render(i,o.version),this.map["cp:contentStatus"].render(i,o.contentStatus),this.map["cp:contentType"].render(i,o.contentType),this.map["dcterms:created"].render(i,o.created),this.map["dcterms:modified"].render(i,o.modified),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"cp:coreProperties":case"coreProperties":return!0;default:if(this.parser=this.map[i.name],this.parser)return this.parser.parseOpen(i),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(i)}`)}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case"cp:coreProperties":case"coreProperties":return this.model={creator:this.map["dc:creator"].model,title:this.map["dc:title"].model,subject:this.map["dc:subject"].model,description:this.map["dc:description"].model,identifier:this.map["dc:identifier"].model,language:this.map["dc:language"].model,keywords:this.map["cp:keywords"].model,category:this.map["cp:category"].model,lastModifiedBy:this.map["cp:lastModifiedBy"].model,lastPrinted:this.map["cp:lastPrinted"].model,revision:this.map["cp:revision"].model,contentStatus:this.map["cp:contentStatus"].model,contentType:this.map["cp:contentType"].model,created:this.map["dcterms:created"].model,modified:this.map["dcterms:modified"].model},!1;default:throw new Error(`Unexpected xml node in parseClose: ${i}`)}}}n.DateFormat=function(r){return r.toISOString().replace(/[.]\d{3}/,"")},n.DateAttrs={"xsi:type":"dcterms:W3CDTF"},n.CORE_PROPERTY_ATTRIBUTES={"xmlns:cp":"http://schemas.openxmlformats.org/package/2006/metadata/core-properties","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:dcterms":"http://purl.org/dc/terms/","xmlns:dcmitype":"http://purl.org/dc/dcmitype/","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance"},d.exports=n},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/date-xform":117,"../simple/integer-xform":118,"../simple/string-xform":119}],54:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.leafNode("Relationship",t)}parseOpen(s){switch(s.name){case"Relationship":return this.model=s.attributes,!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],55:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("./relationship-xform");class s extends c{constructor(){super(),this.map={Relationship:new u}}render(n,r){r=r||this._values,n.openXml(f.StdDocAttributes),n.openNode("Relationships",s.RELATIONSHIPS_ATTRIBUTES),r.forEach(i=>{this.map.Relationship.render(n,i)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"Relationships":return this.model=[],!0;default:if(this.parser=this.map[n.name],this.parser)return this.parser.parseOpen(n),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(n)}`)}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.model.push(this.parser.model),this.parser=void 0),!0;switch(n){case"Relationships":return!1;default:throw new Error(`Unexpected xml node in parseClose: ${n}`)}}}s.RELATIONSHIPS_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"},d.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32,"./relationship-xform":54}],56:[function(e,d,m){const f=e("../base-xform");class c extends f{parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case this.tag:this.reset(),this.model={range:{editAs:s.attributes.editAs||"oneCell"}};break;default:this.parser=this.map[s.name],this.parser&&this.parser.parseOpen(s);break}return!0}parseText(s){this.parser&&this.parser.parseText(s)}reconcilePicture(s,t){if(s&&s.rId){const r=t.rels[s.rId].Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/);if(r){const i=r[1],o=t.mediaIndex[i];return t.media[o]}}}}d.exports=c},{"../base-xform":32}],57:[function(e,d,m){const f=e("../base-xform"),c=e("./blip-xform");class u extends f{constructor(){super(),this.map={"a:blip":new c}}get tag(){return"xdr:blipFill"}render(t,n){t.openNode(this.tag),this.map["a:blip"].render(t,n),t.openNode("a:stretch"),t.leafNode("a:fillRect"),t.closeNode(),t.closeNode()}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case this.tag:this.reset();break;default:this.parser=this.map[t.name],this.parser&&this.parser.parseOpen(t);break}return!0}parseText(){}parseClose(t){if(this.parser)return this.parser.parseClose(t)||(this.parser=void 0),!0;switch(t){case this.tag:return this.model=this.map["a:blip"].model,!1;default:return!0}}}d.exports=u},{"../base-xform":32,"./blip-xform":58}],58:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"a:blip"}render(s,t){s.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:embed":t.rId,cstate:"print"})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:embed"]},!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],59:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"xdr:cNvPicPr"}render(s){s.openNode(this.tag),s.leafNode("a:picLocks",{noChangeAspect:"1"}),s.closeNode()}parseOpen(s){switch(s.name){case this.tag:return!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],60:[function(e,d,m){const f=e("../base-xform"),c=e("./hlink-click-xform"),u=e("./ext-lst-xform");class s extends f{constructor(){super(),this.map={"a:hlinkClick":new c,"a:extLst":new u}}get tag(){return"xdr:cNvPr"}render(n,r){n.openNode(this.tag,{id:r.index,name:`Picture ${r.index}`}),this.map["a:hlinkClick"].render(n,r),this.map["a:extLst"].render(n,r),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset();break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(){}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model=this.map["a:hlinkClick"].model,!1;default:return!0}}}d.exports=s},{"../base-xform":32,"./ext-lst-xform":63,"./hlink-click-xform":65}],61:[function(e,d,m){const f=e("../base-xform"),c=e("../simple/integer-xform");class u extends f{constructor(t){super(),this.tag=t.tag,this.map={"xdr:col":new c({tag:"xdr:col",zero:!0}),"xdr:colOff":new c({tag:"xdr:colOff",zero:!0}),"xdr:row":new c({tag:"xdr:row",zero:!0}),"xdr:rowOff":new c({tag:"xdr:rowOff",zero:!0})}}render(t,n){t.openNode(this.tag),this.map["xdr:col"].render(t,n.nativeCol),this.map["xdr:colOff"].render(t,n.nativeColOff),this.map["xdr:row"].render(t,n.nativeRow),this.map["xdr:rowOff"].render(t,n.nativeRowOff),t.closeNode()}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case this.tag:this.reset();break;default:this.parser=this.map[t.name],this.parser&&this.parser.parseOpen(t);break}return!0}parseText(t){this.parser&&this.parser.parseText(t)}parseClose(t){if(this.parser)return this.parser.parseClose(t)||(this.parser=void 0),!0;switch(t){case this.tag:return this.model={nativeCol:this.map["xdr:col"].model,nativeColOff:this.map["xdr:colOff"].model,nativeRow:this.map["xdr:row"].model,nativeRowOff:this.map["xdr:rowOff"].model},!1;default:return!0}}}d.exports=u},{"../base-xform":32,"../simple/integer-xform":118}],62:[function(e,d,m){const f=e("../../../utils/col-cache"),c=e("../../../utils/xml-stream"),u=e("../base-xform"),s=e("./two-cell-anchor-xform"),t=e("./one-cell-anchor-xform");function n(i){return(typeof i.range=="string"?f.decode(i.range):i.range).br?"xdr:twoCellAnchor":"xdr:oneCellAnchor"}class r extends u{constructor(){super(),this.map={"xdr:twoCellAnchor":new s,"xdr:oneCellAnchor":new t}}prepare(o){o.anchors.forEach((l,a)=>{l.anchorType=n(l),this.map[l.anchorType].prepare(l,{index:a})})}get tag(){return"xdr:wsDr"}render(o,l){o.openXml(c.StdDocAttributes),o.openNode(this.tag,r.DRAWING_ATTRIBUTES),l.anchors.forEach(a=>{this.map[a.anchorType].render(o,a)}),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case this.tag:this.reset(),this.model={anchors:[]};break;default:this.parser=this.map[o.name],this.parser&&this.parser.parseOpen(o);break}return!0}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){if(this.parser)return this.parser.parseClose(o)||(this.model.anchors.push(this.parser.model),this.parser=void 0),!0;switch(o){case this.tag:return!1;default:return!0}}reconcile(o,l){o.anchors.forEach(a=>{a.br?this.map["xdr:twoCellAnchor"].reconcile(a,l):this.map["xdr:oneCellAnchor"].reconcile(a,l)})}}r.DRAWING_ATTRIBUTES={"xmlns:xdr":"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing","xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main"},d.exports=r},{"../../../utils/col-cache":19,"../../../utils/xml-stream":28,"../base-xform":32,"./one-cell-anchor-xform":67,"./two-cell-anchor-xform":70}],63:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"a:extLst"}render(s){s.openNode(this.tag),s.openNode("a:ext",{uri:"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"}),s.leafNode("a16:creationId",{"xmlns:a16":"http://schemas.microsoft.com/office/drawing/2014/main",id:"{00000000-0008-0000-0000-000002000000}"}),s.closeNode(),s.closeNode()}parseOpen(s){switch(s.name){case this.tag:return!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],64:[function(e,d,m){const f=e("../base-xform"),c=9525;class u extends f{constructor(t){super(),this.tag=t.tag,this.map={}}render(t,n){t.openNode(this.tag);const r=Math.floor(n.width*c),i=Math.floor(n.height*c);t.addAttribute("cx",r),t.addAttribute("cy",i),t.closeNode()}parseOpen(t){return t.name===this.tag?(this.model={width:parseInt(t.attributes.cx||"0",10)/c,height:parseInt(t.attributes.cy||"0",10)/c},!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../base-xform":32}],65:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"a:hlinkClick"}render(s,t){t.hyperlinks&&t.hyperlinks.rId&&s.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:id":t.hyperlinks.rId,tooltip:t.hyperlinks.tooltip})}parseOpen(s){switch(s.name){case this.tag:return this.model={hyperlinks:{rId:s.attributes["r:id"],tooltip:s.attributes.tooltip}},!0;default:return!0}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],66:[function(e,d,m){const f=e("../base-xform"),c=e("./c-nv-pr-xform"),u=e("./c-nv-pic-pr-xform");class s extends f{constructor(){super(),this.map={"xdr:cNvPr":new c,"xdr:cNvPicPr":new u}}get tag(){return"xdr:nvPicPr"}render(n,r){n.openNode(this.tag),this.map["xdr:cNvPr"].render(n,r),this.map["xdr:cNvPicPr"].render(n,r),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset();break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(){}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model=this.map["xdr:cNvPr"].model,!1;default:return!0}}}d.exports=s},{"../base-xform":32,"./c-nv-pic-pr-xform":59,"./c-nv-pr-xform":60}],67:[function(e,d,m){const f=e("./base-cell-anchor-xform"),c=e("../static-xform"),u=e("./cell-position-xform"),s=e("./ext-xform"),t=e("./pic-xform");class n extends f{constructor(){super(),this.map={"xdr:from":new u({tag:"xdr:from"}),"xdr:ext":new s({tag:"xdr:ext"}),"xdr:pic":new t,"xdr:clientData":new c({tag:"xdr:clientData"})}}get tag(){return"xdr:oneCellAnchor"}prepare(i,o){this.map["xdr:pic"].prepare(i.picture,o)}render(i,o){i.openNode(this.tag,{editAs:o.range.editAs||"oneCell"}),this.map["xdr:from"].render(i,o.range.tl),this.map["xdr:ext"].render(i,o.range.ext),this.map["xdr:pic"].render(i,o.picture),this.map["xdr:clientData"].render(i,{}),i.closeNode()}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.ext=this.map["xdr:ext"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(i,o){i.medium=this.reconcilePicture(i.picture,o)}}d.exports=n},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./ext-xform":64,"./pic-xform":68}],68:[function(e,d,m){const f=e("../base-xform"),c=e("../static-xform"),u=e("./blip-fill-xform"),s=e("./nv-pic-pr-xform"),t=e("./sp-pr");class n extends f{constructor(){super(),this.map={"xdr:nvPicPr":new s,"xdr:blipFill":new u,"xdr:spPr":new c(t)}}get tag(){return"xdr:pic"}prepare(i,o){i.index=o.index+1}render(i,o){i.openNode(this.tag),this.map["xdr:nvPicPr"].render(i,o),this.map["xdr:blipFill"].render(i,o),this.map["xdr:spPr"].render(i,o),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case this.tag:this.reset();break;default:this.parser=this.map[i.name],this.parser&&this.parser.parseOpen(i);break}return!0}parseText(){}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.mergeModel(this.parser.model),this.parser=void 0),!0;switch(i){case this.tag:return!1;default:return!0}}}d.exports=n},{"../base-xform":32,"../static-xform":120,"./blip-fill-xform":57,"./nv-pic-pr-xform":66,"./sp-pr":69}],69:[function(e,d,m){d.exports={tag:"xdr:spPr",c:[{tag:"a:xfrm",c:[{tag:"a:off",$:{x:"0",y:"0"}},{tag:"a:ext",$:{cx:"0",cy:"0"}}]},{tag:"a:prstGeom",$:{prst:"rect"},c:[{tag:"a:avLst"}]}]}},{}],70:[function(e,d,m){const f=e("./base-cell-anchor-xform"),c=e("../static-xform"),u=e("./cell-position-xform"),s=e("./pic-xform");class t extends f{constructor(){super(),this.map={"xdr:from":new u({tag:"xdr:from"}),"xdr:to":new u({tag:"xdr:to"}),"xdr:pic":new s,"xdr:clientData":new c({tag:"xdr:clientData"})}}get tag(){return"xdr:twoCellAnchor"}prepare(r,i){this.map["xdr:pic"].prepare(r.picture,i)}render(r,i){r.openNode(this.tag,{editAs:i.range.editAs||"oneCell"}),this.map["xdr:from"].render(r,i.range.tl),this.map["xdr:to"].render(r,i.range.br),this.map["xdr:pic"].render(r,i.picture),this.map["xdr:clientData"].render(r,{}),r.closeNode()}parseClose(r){if(this.parser)return this.parser.parseClose(r)||(this.parser=void 0),!0;switch(r){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.br=this.map["xdr:to"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(r,i){r.medium=this.reconcilePicture(r.picture,i)}}d.exports=t},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./pic-xform":68}],71:[function(e,d,m){const f=e("./base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.always=!!s.always,this.count=s.count,this.empty=s.empty,this.$count=s.$count||"count",this.$=s.$,this.childXform=s.childXform,this.maxItems=s.maxItems}prepare(s,t){const{childXform:n}=this;s&&s.forEach((r,i)=>{t.index=i,n.prepare(r,t)})}render(s,t){if(this.always||t&&t.length){s.openNode(this.tag,this.$),this.count&&s.addAttribute(this.$count,t&&t.length||0);const{childXform:n}=this;(t||[]).forEach((r,i)=>{n.render(s,r,i)}),s.closeNode()}else this.empty&&s.leafNode(this.tag)}parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case this.tag:return this.model=[],!0;default:return this.childXform.parseOpen(s)?(this.parser=this.childXform,!0):!1}}parseText(s){this.parser&&this.parser.parseText(s)}parseClose(s){if(this.parser){if(!this.parser.parseClose(s)&&(this.model.push(this.parser.model),this.parser=void 0,this.maxItems&&this.model.length>this.maxItems))throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);return!0}return!1}reconcile(s,t){if(s){const{childXform:n}=this;s.forEach(r=>{n.reconcile(r,t)})}}}d.exports=c},{"./base-xform":32}],72:[function(e,d,m){const f=e("../../../utils/col-cache"),c=e("../base-xform");class u extends c{get tag(){return"autoFilter"}render(t,n){if(n)if(typeof n=="string")t.leafNode("autoFilter",{ref:n});else{const r=function(l){return typeof l=="string"?l:f.getAddress(l.row,l.column).address},i=r(n.from),o=r(n.to);i&&o&&t.leafNode("autoFilter",{ref:`${i}:${o}`})}}parseOpen(t){t.name==="autoFilter"&&(this.model=t.attributes.ref)}}d.exports=u},{"../../../utils/col-cache":19,"../base-xform":32}],73:[function(e,d,m){const f=e("../../../utils/utils"),c=e("../base-xform"),u=e("../../../doc/range"),s=e("../../../doc/enums"),t=e("../strings/rich-text-xform");function n(o){if(o==null)return s.ValueType.Null;if(o instanceof String||typeof o=="string")return s.ValueType.String;if(typeof o=="number")return s.ValueType.Number;if(typeof o=="boolean")return s.ValueType.Boolean;if(o instanceof Date)return s.ValueType.Date;if(o.text&&o.hyperlink)return s.ValueType.Hyperlink;if(o.formula)return s.ValueType.Formula;if(o.error)return s.ValueType.Error;throw new Error("I could not understand type of value")}function r(o){switch(o.type){case s.ValueType.Formula:return n(o.result);default:return o.type}}class i extends c{constructor(){super(),this.richTextXForm=new t}get tag(){return"c"}prepare(l,a){const g=a.styles.addStyleModel(l.style||{},r(l));switch(g&&(l.styleId=g),l.comment&&a.comments.push({...l.comment,ref:l.address}),l.type){case s.ValueType.String:case s.ValueType.RichText:a.sharedStrings&&(l.ssId=a.sharedStrings.add(l.value));break;case s.ValueType.Date:a.date1904&&(l.date1904=!0);break;case s.ValueType.Hyperlink:a.sharedStrings&&l.text!==void 0&&l.text!==null&&(l.ssId=a.sharedStrings.add(l.text)),a.hyperlinks.push({address:l.address,target:l.hyperlink,tooltip:l.tooltip});break;case s.ValueType.Merge:a.merges.add(l);break;case s.ValueType.Formula:if(a.date1904&&(l.date1904=!0),l.shareType==="shared"&&(l.si=a.siFormulae++),l.formula)a.formulae[l.address]=l;else if(l.sharedFormula){const v=a.formulae[l.sharedFormula];if(!v)throw new Error(`Shared Formula master must exist above and or left of clone for cell ${l.address}`);v.si===void 0?(v.shareType="shared",v.si=a.siFormulae++,v.range=new u(v.address,l.address)):v.range&&v.range.expandToAddress(l.address),l.si=v.si}break}}renderFormula(l,a){let g=null;switch(a.shareType){case"shared":g={t:"shared",ref:a.ref||a.range.range,si:a.si};break;case"array":g={t:"array",ref:a.ref};break;default:a.si!==void 0&&(g={t:"shared",si:a.si});break}switch(n(a.result)){case s.ValueType.Null:l.leafNode("f",g,a.formula);break;case s.ValueType.String:l.addAttribute("t","str"),l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result);break;case s.ValueType.Number:l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result);break;case s.ValueType.Boolean:l.addAttribute("t","b"),l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result?1:0);break;case s.ValueType.Error:l.addAttribute("t","e"),l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result.error);break;case s.ValueType.Date:l.leafNode("f",g,a.formula),l.leafNode("v",null,f.dateToExcel(a.result,a.date1904));break;default:throw new Error("I could not understand type of value")}}render(l,a){if(!(a.type===s.ValueType.Null&&!a.styleId)){switch(l.openNode("c"),l.addAttribute("r",a.address),a.styleId&&l.addAttribute("s",a.styleId),a.type){case s.ValueType.Null:break;case s.ValueType.Number:l.leafNode("v",null,a.value);break;case s.ValueType.Boolean:l.addAttribute("t","b"),l.leafNode("v",null,a.value?"1":"0");break;case s.ValueType.Error:l.addAttribute("t","e"),l.leafNode("v",null,a.value.error);break;case s.ValueType.String:case s.ValueType.RichText:a.ssId!==void 0?(l.addAttribute("t","s"),l.leafNode("v",null,a.ssId)):a.value&&a.value.richText?(l.addAttribute("t","inlineStr"),l.openNode("is"),a.value.richText.forEach(g=>{this.richTextXForm.render(l,g)}),l.closeNode("is")):(l.addAttribute("t","str"),l.leafNode("v",null,a.value));break;case s.ValueType.Date:l.leafNode("v",null,f.dateToExcel(a.value,a.date1904));break;case s.ValueType.Hyperlink:a.ssId!==void 0?(l.addAttribute("t","s"),l.leafNode("v",null,a.ssId)):(l.addAttribute("t","str"),l.leafNode("v",null,a.text));break;case s.ValueType.Formula:this.renderFormula(l,a);break;case s.ValueType.Merge:break}l.closeNode()}}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case"c":return this.model={address:l.attributes.r},this.t=l.attributes.t,l.attributes.s&&(this.model.styleId=parseInt(l.attributes.s,10)),!0;case"f":return this.currentNode="f",this.model.si=l.attributes.si,this.model.shareType=l.attributes.t,this.model.ref=l.attributes.ref,!0;case"v":return this.currentNode="v",!0;case"t":return this.currentNode="t",!0;case"r":return this.parser=this.richTextXForm,this.parser.parseOpen(l),!0;default:return!1}}parseText(l){if(this.parser){this.parser.parseText(l);return}switch(this.currentNode){case"f":this.model.formula=this.model.formula?this.model.formula+l:l;break;case"v":case"t":this.model.value&&this.model.value.richText?this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+l:l:this.model.value=this.model.value?this.model.value+l:l;break}}parseClose(l){switch(l){case"c":{const{model:a}=this;if(a.formula||a.shareType)a.type=s.ValueType.Formula,a.value&&(this.t==="str"?a.result=f.xmlDecode(a.value):this.t==="b"?a.result=parseInt(a.value,10)!==0:this.t==="e"?a.result={error:a.value}:a.result=parseFloat(a.value),a.value=void 0);else if(a.value!==void 0)switch(this.t){case"s":a.type=s.ValueType.String,a.value=parseInt(a.value,10);break;case"str":a.type=s.ValueType.String,a.value=f.xmlDecode(a.value);break;case"inlineStr":a.type=s.ValueType.String;break;case"b":a.type=s.ValueType.Boolean,a.value=parseInt(a.value,10)!==0;break;case"e":a.type=s.ValueType.Error,a.value={error:a.value};break;default:a.type=s.ValueType.Number,a.value=parseFloat(a.value);break}else a.styleId?a.type=s.ValueType.Null:a.type=s.ValueType.Merge;return!1}case"f":case"v":case"is":return this.currentNode=void 0,!0;case"t":return this.parser?(this.parser.parseClose(l),!0):(this.currentNode=void 0,!0);case"r":return this.model.value=this.model.value||{},this.model.value.richText=this.model.value.richText||[],this.model.value.richText.push(this.parser.model),this.parser=void 0,this.currentNode=void 0,!0;default:return this.parser?(this.parser.parseClose(l),!0):!1}}reconcile(l,a){const g=l.styleId&&a.styles&&a.styles.getStyleModel(l.styleId);switch(g&&(l.style=g),l.styleId!==void 0&&(l.styleId=void 0),l.type){case s.ValueType.String:typeof l.value=="number"&&a.sharedStrings&&(l.value=a.sharedStrings.getString(l.value)),l.value.richText&&(l.type=s.ValueType.RichText);break;case s.ValueType.Number:g&&f.isDateFmt(g.numFmt)&&(l.type=s.ValueType.Date,l.value=f.excelToDate(l.value,a.date1904));break;case s.ValueType.Formula:l.result!==void 0&&g&&f.isDateFmt(g.numFmt)&&(l.result=f.excelToDate(l.result,a.date1904)),l.shareType==="shared"&&(l.ref?a.formulae[l.si]=l.address:(l.sharedFormula=a.formulae[l.si],delete l.shareType),delete l.si);break}const v=a.hyperlinkMap[l.address];v&&(l.type===s.ValueType.Formula?(l.text=l.result,l.result=void 0):(l.text=l.value,l.value=void 0),l.type=s.ValueType.Hyperlink,l.hyperlink=v);const h=a.commentsMap&&a.commentsMap[l.address];h&&(l.comment=h)}}d.exports=i},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],74:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"x14:cfIcon"}render(s,t){s.leafNode(this.tag,{iconSet:t.iconSet,iconId:t.iconId})}parseOpen(s){let{attributes:t}=s;this.model={iconSet:t.iconSet,iconId:f.toIntValue(t.iconId)}}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],75:[function(e,d,m){const{v4:f}=e("uuid"),c=e("../../base-xform"),u=e("../../composite-xform"),s=e("./databar-ext-xform"),t=e("./icon-set-ext-xform"),n={"3Triangles":!0,"3Stars":!0,"5Boxes":!0};class r extends u{constructor(){super(),this.map={"x14:dataBar":this.databarXform=new s,"x14:iconSet":this.iconSetXform=new t}}get tag(){return"x14:cfRule"}static isExt(o){return o.type==="dataBar"?s.isExt(o):!!(o.type==="iconSet"&&(o.custom||n[o.iconSet]))}prepare(o){r.isExt(o)&&(o.x14Id=`{${f()}}`.toUpperCase())}render(o,l){if(r.isExt(l))switch(l.type){case"dataBar":this.renderDataBar(o,l);break;case"iconSet":this.renderIconSet(o,l);break}}renderDataBar(o,l){o.openNode(this.tag,{type:"dataBar",id:l.x14Id}),this.databarXform.render(o,l),o.closeNode()}renderIconSet(o,l){o.openNode(this.tag,{type:"iconSet",priority:l.priority,id:l.x14Id||`{${f()}}`}),this.iconSetXform.render(o,l),o.closeNode()}createNewModel(o){let{attributes:l}=o;return{type:l.type,x14Id:l.id,priority:c.toIntValue(l.priority)}}onParserClose(o,l){Object.assign(this.model,l.model)}}d.exports=r},{"../../base-xform":32,"../../composite-xform":48,"./databar-ext-xform":79,"./icon-set-ext-xform":81,uuid:528}],76:[function(e,d,m){const f=e("../../composite-xform"),c=e("./f-ext-xform");class u extends f{constructor(){super(),this.map={"xm:f":this.fExtXform=new c}}get tag(){return"x14:cfvo"}render(t,n){t.openNode(this.tag,{type:n.type}),n.value!==void 0&&this.fExtXform.render(t,n.value),t.closeNode()}createNewModel(t){return{type:t.attributes.type}}onParserClose(t,n){switch(t){case"xm:f":this.model.value=n.model?parseFloat(n.model):0;break}}}d.exports=u},{"../../composite-xform":48,"./f-ext-xform":80}],77:[function(e,d,m){const f=e("../../composite-xform"),c=e("./sqref-ext-xform"),u=e("./cf-rule-ext-xform");class s extends f{constructor(){super(),this.map={"xm:sqref":this.sqRef=new c,"x14:cfRule":this.cfRule=new u}}get tag(){return"x14:conditionalFormatting"}prepare(n,r){n.rules.forEach(i=>{this.cfRule.prepare(i,r)})}render(n,r){r.rules.some(u.isExt)&&(n.openNode(this.tag,{"xmlns:xm":"http://schemas.microsoft.com/office/excel/2006/main"}),r.rules.filter(u.isExt).forEach(i=>this.cfRule.render(n,i)),this.sqRef.render(n,r.ref),n.closeNode())}createNewModel(){return{rules:[]}}onParserClose(n,r){switch(n){case"xm:sqref":this.model.ref=r.model;break;case"x14:cfRule":this.model.rules.push(r.model);break}}}d.exports=s},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./sqref-ext-xform":82}],78:[function(e,d,m){const f=e("../../composite-xform"),c=e("./cf-rule-ext-xform"),u=e("./conditional-formatting-ext-xform");class s extends f{constructor(){super(),this.map={"x14:conditionalFormatting":this.cfXform=new u}}get tag(){return"x14:conditionalFormattings"}hasContent(n){return n.hasExtContent===void 0&&(n.hasExtContent=n.some(r=>r.rules.some(c.isExt))),n.hasExtContent}prepare(n,r){n.forEach(i=>{this.cfXform.prepare(i,r)})}render(n,r){this.hasContent(r)&&(n.openNode(this.tag),r.forEach(i=>this.cfXform.render(n,i)),n.closeNode())}createNewModel(){return[]}onParserClose(n,r){this.model.push(r.model)}}d.exports=s},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./conditional-formatting-ext-xform":77}],79:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("../../style/color-xform"),s=e("./cfvo-ext-xform");class t extends c{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new s,"x14:borderColor":this.borderColorXform=new u("x14:borderColor"),"x14:negativeBorderColor":this.negativeBorderColorXform=new u("x14:negativeBorderColor"),"x14:negativeFillColor":this.negativeFillColorXform=new u("x14:negativeFillColor"),"x14:axisColor":this.axisColorXform=new u("x14:axisColor")}}static isExt(r){return!r.gradient}get tag(){return"x14:dataBar"}render(r,i){r.openNode(this.tag,{minLength:f.toIntAttribute(i.minLength,0,!0),maxLength:f.toIntAttribute(i.maxLength,100,!0),border:f.toBoolAttribute(i.border,!1),gradient:f.toBoolAttribute(i.gradient,!0),negativeBarColorSameAsPositive:f.toBoolAttribute(i.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:f.toBoolAttribute(i.negativeBarBorderColorSameAsPositive,!0),axisPosition:f.toAttribute(i.axisPosition,"auto"),direction:f.toAttribute(i.direction,"leftToRight")}),i.cfvo.forEach(o=>{this.cfvoXform.render(r,o)}),this.borderColorXform.render(r,i.borderColor),this.negativeBorderColorXform.render(r,i.negativeBorderColor),this.negativeFillColorXform.render(r,i.negativeFillColor),this.axisColorXform.render(r,i.axisColor),r.closeNode()}createNewModel(r){let{attributes:i}=r;return{cfvo:[],minLength:f.toIntValue(i.minLength,0),maxLength:f.toIntValue(i.maxLength,100),border:f.toBoolValue(i.border,!1),gradient:f.toBoolValue(i.gradient,!0),negativeBarColorSameAsPositive:f.toBoolValue(i.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:f.toBoolValue(i.negativeBarBorderColorSameAsPositive,!0),axisPosition:f.toStringValue(i.axisPosition,"auto"),direction:f.toStringValue(i.direction,"leftToRight")}}onParserClose(r,i){const[,o]=r.split(":");switch(o){case"cfvo":this.model.cfvo.push(i.model);break;default:this.model[o]=i.model;break}}}d.exports=t},{"../../base-xform":32,"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-ext-xform":76}],80:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"xm:f"}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(s){this.model+=s}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],81:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("./cfvo-ext-xform"),s=e("./cf-icon-ext-xform");class t extends c{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new u,"x14:cfIcon":this.cfIconXform=new s}}get tag(){return"x14:iconSet"}render(r,i){r.openNode(this.tag,{iconSet:f.toStringAttribute(i.iconSet),reverse:f.toBoolAttribute(i.reverse,!1),showValue:f.toBoolAttribute(i.showValue,!0),custom:f.toBoolAttribute(i.icons,!1)}),i.cfvo.forEach(o=>{this.cfvoXform.render(r,o)}),i.icons&&i.icons.forEach((o,l)=>{o.iconId=l,this.cfIconXform.render(r,o)}),r.closeNode()}createNewModel(r){let{attributes:i}=r;return{cfvo:[],iconSet:f.toStringValue(i.iconSet,"3TrafficLights"),reverse:f.toBoolValue(i.reverse,!1),showValue:f.toBoolValue(i.showValue,!0)}}onParserClose(r,i){const[,o]=r.split(":");switch(o){case"cfvo":this.model.cfvo.push(i.model);break;case"cfIcon":this.model.icons||(this.model.icons=[]),this.model.icons.push(i.model);break;default:this.model[o]=i.model;break}}}d.exports=t},{"../../base-xform":32,"../../composite-xform":48,"./cf-icon-ext-xform":74,"./cfvo-ext-xform":76}],82:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"xm:sqref"}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(s){this.model+=s}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],83:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("../../../../doc/range"),s=e("./databar-xform"),t=e("./ext-lst-ref-xform"),n=e("./formula-xform"),r=e("./color-scale-xform"),i=e("./icon-set-xform"),o={"3Triangles":!0,"3Stars":!0,"5Boxes":!0},l=h=>{if(h.formulae&&h.formulae[0])return h.formulae[0];const w=new u(h.ref),{tl:y}=w;switch(h.operator){case"containsText":return`NOT(ISERROR(SEARCH("${h.text}",${y})))`;case"containsBlanks":return`LEN(TRIM(${y}))=0`;case"notContainsBlanks":return`LEN(TRIM(${y}))>0`;case"containsErrors":return`ISERROR(${y})`;case"notContainsErrors":return`NOT(ISERROR(${y}))`;default:return}},a=h=>{if(h.formulae&&h.formulae[0])return h.formulae[0];const w=new u(h.ref),{tl:y}=w;switch(h.timePeriod){case"thisWeek":return`AND(TODAY()-ROUNDDOWN(${y},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${y},0)-TODAY()<=7-WEEKDAY(TODAY()))`;case"lastWeek":return`AND(TODAY()-ROUNDDOWN(${y},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${y},0)<(WEEKDAY(TODAY())+7))`;case"nextWeek":return`AND(ROUNDDOWN(${y},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${y},0)-TODAY()<(15-WEEKDAY(TODAY())))`;case"yesterday":return`FLOOR(${y},1)=TODAY()-1`;case"today":return`FLOOR(${y},1)=TODAY()`;case"tomorrow":return`FLOOR(${y},1)=TODAY()+1`;case"last7Days":return`AND(TODAY()-FLOOR(${y},1)<=6,FLOOR(${y},1)<=TODAY())`;case"lastMonth":return`AND(MONTH(${y})=MONTH(EDATE(TODAY(),0-1)),YEAR(${y})=YEAR(EDATE(TODAY(),0-1)))`;case"thisMonth":return`AND(MONTH(${y})=MONTH(TODAY()),YEAR(${y})=YEAR(TODAY()))`;case"nextMonth":return`AND(MONTH(${y})=MONTH(EDATE(TODAY(),0+1)),YEAR(${y})=YEAR(EDATE(TODAY(),0+1)))`;default:return}},g=h=>{const{type:w,operator:y}=h;switch(w){case"containsText":case"containsBlanks":case"notContainsBlanks":case"containsErrors":case"notContainsErrors":return{type:"containsText",operator:w};default:return{type:w,operator:y}}};class v extends c{constructor(){super(),this.map={dataBar:this.databarXform=new s,extLst:this.extLstRefXform=new t,formula:this.formulaXform=new n,colorScale:this.colorScaleXform=new r,iconSet:this.iconSetXform=new i}}get tag(){return"cfRule"}static isPrimitive(w){return!(w.type==="iconSet"&&(w.custom||o[w.iconSet]))}render(w,y){switch(y.type){case"expression":this.renderExpression(w,y);break;case"cellIs":this.renderCellIs(w,y);break;case"top10":this.renderTop10(w,y);break;case"aboveAverage":this.renderAboveAverage(w,y);break;case"dataBar":this.renderDataBar(w,y);break;case"colorScale":this.renderColorScale(w,y);break;case"iconSet":this.renderIconSet(w,y);break;case"containsText":this.renderText(w,y);break;case"timePeriod":this.renderTimePeriod(w,y);break}}renderExpression(w,y){w.openNode(this.tag,{type:"expression",dxfId:y.dxfId,priority:y.priority}),this.formulaXform.render(w,y.formulae[0]),w.closeNode()}renderCellIs(w,y){w.openNode(this.tag,{type:"cellIs",dxfId:y.dxfId,priority:y.priority,operator:y.operator}),y.formulae.forEach(S=>{this.formulaXform.render(w,S)}),w.closeNode()}renderTop10(w,y){w.leafNode(this.tag,{type:"top10",dxfId:y.dxfId,priority:y.priority,percent:f.toBoolAttribute(y.percent,!1),bottom:f.toBoolAttribute(y.bottom,!1),rank:f.toIntValue(y.rank,10,!0)})}renderAboveAverage(w,y){w.leafNode(this.tag,{type:"aboveAverage",dxfId:y.dxfId,priority:y.priority,aboveAverage:f.toBoolAttribute(y.aboveAverage,!0)})}renderDataBar(w,y){w.openNode(this.tag,{type:"dataBar",priority:y.priority}),this.databarXform.render(w,y),this.extLstRefXform.render(w,y),w.closeNode()}renderColorScale(w,y){w.openNode(this.tag,{type:"colorScale",priority:y.priority}),this.colorScaleXform.render(w,y),w.closeNode()}renderIconSet(w,y){v.isPrimitive(y)&&(w.openNode(this.tag,{type:"iconSet",priority:y.priority}),this.iconSetXform.render(w,y),w.closeNode())}renderText(w,y){w.openNode(this.tag,{type:y.operator,dxfId:y.dxfId,priority:y.priority,operator:f.toStringAttribute(y.operator,"containsText")});const S=l(y);S&&this.formulaXform.render(w,S),w.closeNode()}renderTimePeriod(w,y){w.openNode(this.tag,{type:"timePeriod",dxfId:y.dxfId,priority:y.priority,timePeriod:y.timePeriod});const S=a(y);S&&this.formulaXform.render(w,S),w.closeNode()}createNewModel(w){let{attributes:y}=w;return{...g(y),dxfId:f.toIntValue(y.dxfId),priority:f.toIntValue(y.priority),timePeriod:y.timePeriod,percent:f.toBoolValue(y.percent),bottom:f.toBoolValue(y.bottom),rank:f.toIntValue(y.rank),aboveAverage:f.toBoolValue(y.aboveAverage)}}onParserClose(w,y){switch(w){case"dataBar":case"extLst":case"colorScale":case"iconSet":Object.assign(this.model,y.model);break;case"formula":this.model.formulae=this.model.formulae||[],this.model.formulae.push(y.model);break}}}d.exports=v},{"../../../../doc/range":10,"../../base-xform":32,"../../composite-xform":48,"./color-scale-xform":85,"./databar-xform":88,"./ext-lst-ref-xform":89,"./formula-xform":90,"./icon-set-xform":91}],84:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"cfvo"}render(s,t){s.leafNode(this.tag,{type:t.type,val:t.value})}parseOpen(s){this.model={type:s.attributes.type,value:f.toFloatValue(s.attributes.val)}}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],85:[function(e,d,m){const f=e("../../composite-xform"),c=e("../../style/color-xform"),u=e("./cfvo-xform");class s extends f{constructor(){super(),this.map={cfvo:this.cfvoXform=new u,color:this.colorXform=new c}}get tag(){return"colorScale"}render(n,r){n.openNode(this.tag),r.cfvo.forEach(i=>{this.cfvoXform.render(n,i)}),r.color.forEach(i=>{this.colorXform.render(n,i)}),n.closeNode()}createNewModel(n){return{cfvo:[],color:[]}}onParserClose(n,r){this.model[n].push(r.model)}}d.exports=s},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],86:[function(e,d,m){const f=e("../../composite-xform"),c=e("./cf-rule-xform");class u extends f{constructor(){super(),this.map={cfRule:new c}}get tag(){return"conditionalFormatting"}render(t,n){n.rules.some(c.isPrimitive)&&(t.openNode(this.tag,{sqref:n.ref}),n.rules.forEach(r=>{c.isPrimitive(r)&&(r.ref=n.ref,this.map.cfRule.render(t,r))}),t.closeNode())}createNewModel(t){let{attributes:n}=t;return{ref:n.sqref,rules:[]}}onParserClose(t,n){this.model.rules.push(n.model)}}d.exports=u},{"../../composite-xform":48,"./cf-rule-xform":83}],87:[function(e,d,m){const f=e("../../base-xform"),c=e("./conditional-formatting-xform");class u extends f{constructor(){super(),this.cfXform=new c}get tag(){return"conditionalFormatting"}reset(){this.model=[]}prepare(t,n){let r=t.reduce((i,o)=>Math.max(i,...o.rules.map(l=>l.priority||0)),1);t.forEach(i=>{i.rules.forEach(o=>{o.priority||(o.priority=r++),o.style&&(o.dxfId=n.styles.addDxfStyle(o.style))})})}render(t,n){n.forEach(r=>{this.cfXform.render(t,r)})}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case"conditionalFormatting":return this.parser=this.cfXform,this.parser.parseOpen(t),!0;default:return!1}}parseText(t){this.parser&&this.parser.parseText(t)}parseClose(t){return this.parser?this.parser.parseClose(t)?!0:(this.model.push(this.parser.model),this.parser=void 0,!1):!1}reconcile(t,n){t.forEach(r=>{r.rules.forEach(i=>{i.dxfId!==void 0&&(i.style=n.styles.getDxfStyle(i.dxfId),delete i.dxfId)})})}}d.exports=u},{"../../base-xform":32,"./conditional-formatting-xform":86}],88:[function(e,d,m){const f=e("../../composite-xform"),c=e("../../style/color-xform"),u=e("./cfvo-xform");class s extends f{constructor(){super(),this.map={cfvo:this.cfvoXform=new u,color:this.colorXform=new c}}get tag(){return"dataBar"}render(n,r){n.openNode(this.tag),r.cfvo.forEach(i=>{this.cfvoXform.render(n,i)}),this.colorXform.render(n,r.color),n.closeNode()}createNewModel(){return{cfvo:[]}}onParserClose(n,r){switch(n){case"cfvo":this.model.cfvo.push(r.model);break;case"color":this.model.color=r.model;break}}}d.exports=s},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],89:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform");class u extends f{get tag(){return"x14:id"}render(r,i){r.leafNode(this.tag,null,i)}parseOpen(){this.model=""}parseText(r){this.model+=r}parseClose(r){return r!==this.tag}}class s extends c{constructor(){super(),this.map={"x14:id":this.idXform=new u}}get tag(){return"ext"}render(r,i){r.openNode(this.tag,{uri:"{B025F937-C7B1-47D3-B67F-A62EFF666E3E}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.idXform.render(r,i.x14Id),r.closeNode()}createNewModel(){return{}}onParserClose(r,i){this.model.x14Id=i.model}}class t extends c{constructor(){super(),this.map={ext:new s}}get tag(){return"extLst"}render(r,i){r.openNode(this.tag),this.map.ext.render(r,i),r.closeNode()}createNewModel(){return{}}onParserClose(r,i){Object.assign(this.model,i.model)}}d.exports=t},{"../../base-xform":32,"../../composite-xform":48}],90:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"formula"}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(s){this.model+=s}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],91:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("./cfvo-xform");class s extends c{constructor(){super(),this.map={cfvo:this.cfvoXform=new u}}get tag(){return"iconSet"}render(n,r){n.openNode(this.tag,{iconSet:f.toStringAttribute(r.iconSet,"3TrafficLights"),reverse:f.toBoolAttribute(r.reverse,!1),showValue:f.toBoolAttribute(r.showValue,!0)}),r.cfvo.forEach(i=>{this.cfvoXform.render(n,i)}),n.closeNode()}createNewModel(n){let{attributes:r}=n;return{iconSet:f.toStringValue(r.iconSet,"3TrafficLights"),reverse:f.toBoolValue(r.reverse),showValue:f.toBoolValue(r.showValue),cfvo:[]}}onParserClose(n,r){this.model[n].push(r.model)}}d.exports=s},{"../../base-xform":32,"../../composite-xform":48,"./cfvo-xform":84}],92:[function(e,d,m){const f=e("../../../utils/utils"),c=e("../base-xform");class u extends c{get tag(){return"col"}prepare(t,n){const r=n.styles.addStyleModel(t.style||{});r&&(t.styleId=r)}render(t,n){t.openNode("col"),t.addAttribute("min",n.min),t.addAttribute("max",n.max),n.width&&t.addAttribute("width",n.width),n.styleId&&t.addAttribute("style",n.styleId),n.hidden&&t.addAttribute("hidden","1"),n.bestFit&&t.addAttribute("bestFit","1"),n.outlineLevel&&t.addAttribute("outlineLevel",n.outlineLevel),n.collapsed&&t.addAttribute("collapsed","1"),t.addAttribute("customWidth","1"),t.closeNode()}parseOpen(t){if(t.name==="col"){const n=this.model={min:parseInt(t.attributes.min||"0",10),max:parseInt(t.attributes.max||"0",10),width:t.attributes.width===void 0?void 0:parseFloat(t.attributes.width||"0")};return t.attributes.style&&(n.styleId=parseInt(t.attributes.style,10)),f.parseBoolean(t.attributes.hidden)&&(n.hidden=!0),f.parseBoolean(t.attributes.bestFit)&&(n.bestFit=!0),t.attributes.outlineLevel&&(n.outlineLevel=parseInt(t.attributes.outlineLevel,10)),f.parseBoolean(t.attributes.collapsed)&&(n.collapsed=!0),!0}return!1}parseText(){}parseClose(){return!1}reconcile(t,n){t.styleId&&(t.style=n.styles.getStyleModel(t.styleId))}}d.exports=u},{"../../../utils/utils":27,"../base-xform":32}],93:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../utils/utils"),u=e("../../../utils/col-cache"),s=e("../base-xform"),t=e("../../../doc/range");function n(l,a,g,v){const h=a[g];h!==void 0?l[g]=h:v!==void 0&&(l[g]=v)}function r(l,a,g,v){const h=a[g];h!==void 0?l[g]=c.parseBoolean(h):v!==void 0&&(l[g]=v)}function i(l){const a=f.map(l,(h,w)=>({address:w,dataValidation:h,marked:!1})).sort((h,w)=>f.strcmp(h.address,w.address)),g=f.keyBy(a,"address"),v=(h,w,y)=>{for(let S=0;S{if(!h.marked){const w=u.decodeEx(h.address);if(w.dimensions)return g[w.dimensions].marked=!0,{...h.dataValidation,sqref:h.address};let y=1,S=u.encodeAddress(w.row+y,w.col);for(;l[S]&&f.isEqual(h.dataValidation,l[S]);)y++,S=u.encodeAddress(w.row+y,w.col);let E=1;for(;v(w,y,w.col+E);)E++;for(let I=0;I1||E>1){const I=w.row+(y-1),F=w.col+(E-1);return{...h.dataValidation,sqref:`${h.address}:${u.encodeAddress(I,F)}`}}return{...h.dataValidation,sqref:h.address}}return null}).filter(Boolean)}class o extends s{get tag(){return"dataValidations"}render(a,g){const v=i(g);v.length&&(a.openNode("dataValidations",{count:v.length}),v.forEach(h=>{a.openNode("dataValidation"),h.type!=="any"&&(a.addAttribute("type",h.type),h.operator&&h.type!=="list"&&h.operator!=="between"&&a.addAttribute("operator",h.operator),h.allowBlank&&a.addAttribute("allowBlank","1")),h.showInputMessage&&a.addAttribute("showInputMessage","1"),h.promptTitle&&a.addAttribute("promptTitle",h.promptTitle),h.prompt&&a.addAttribute("prompt",h.prompt),h.showErrorMessage&&a.addAttribute("showErrorMessage","1"),h.errorStyle&&a.addAttribute("errorStyle",h.errorStyle),h.errorTitle&&a.addAttribute("errorTitle",h.errorTitle),h.error&&a.addAttribute("error",h.error),a.addAttribute("sqref",h.sqref),(h.formulae||[]).forEach((w,y)=>{a.openNode(`formula${y+1}`),h.type==="date"?a.writeText(c.dateToExcel(new Date(w))):a.writeText(w),a.closeNode()}),a.closeNode()}),a.closeNode())}parseOpen(a){switch(a.name){case"dataValidations":return this.model={},!0;case"dataValidation":{this._address=a.attributes.sqref;const g={type:a.attributes.type||"any",formulae:[]};switch(a.attributes.type&&r(g,a.attributes,"allowBlank"),r(g,a.attributes,"showInputMessage"),r(g,a.attributes,"showErrorMessage"),g.type){case"any":case"list":case"custom":break;default:n(g,a.attributes,"operator","between");break}return n(g,a.attributes,"promptTitle"),n(g,a.attributes,"prompt"),n(g,a.attributes,"errorStyle"),n(g,a.attributes,"errorTitle"),n(g,a.attributes,"error"),this._dataValidation=g,!0}case"formula1":case"formula2":return this._formula=[],!0;default:return!1}}parseText(a){this._formula&&this._formula.push(a)}parseClose(a){switch(a){case"dataValidations":return!1;case"dataValidation":return(!this._dataValidation.formulae||!this._dataValidation.formulae.length)&&(delete this._dataValidation.formulae,delete this._dataValidation.operator),(this._address.split(/\s+/g)||[]).forEach(v=>{v.includes(":")?new t(v).forEachAddress(w=>{this.model[w]=this._dataValidation}):this.model[v]=this._dataValidation}),!0;case"formula1":case"formula2":{let g=this._formula.join("");switch(this._dataValidation.type){case"whole":case"textLength":g=parseInt(g,10);break;case"decimal":g=parseFloat(g);break;case"date":g=c.excelToDate(parseFloat(g));break}return this._dataValidation.formulae.push(g),this._formula=void 0,!0}default:return!0}}}d.exports=o},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/utils":27,"../base-xform":32}],94:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"dimension"}render(s,t){t&&s.leafNode("dimension",{ref:t})}parseOpen(s){return s.name==="dimension"?(this.model=s.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],95:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"drawing"}render(s,t){t&&s.leafNode(this.tag,{"r:id":t.rId})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],96:[function(e,d,m){const f=e("../composite-xform"),c=e("./cf-ext/conditional-formattings-ext-xform");class u extends f{constructor(){super(),this.map={"x14:conditionalFormattings":this.conditionalFormattings=new c}}get tag(){return"ext"}hasContent(n){return this.conditionalFormattings.hasContent(n.conditionalFormattings)}prepare(n,r){this.conditionalFormattings.prepare(n.conditionalFormattings,r)}render(n,r){n.openNode("ext",{uri:"{78C0D931-6437-407d-A8EE-F0AAD7539E65}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.conditionalFormattings.render(n,r.conditionalFormattings),n.closeNode()}createNewModel(){return{}}onParserClose(n,r){this.model[n]=r.model}}class s extends f{constructor(){super(),this.map={ext:this.ext=new u}}get tag(){return"extLst"}prepare(n,r){this.ext.prepare(n,r)}hasContent(n){return this.ext.hasContent(n)}render(n,r){this.hasContent(r)&&(n.openNode("extLst"),this.ext.render(n,r),n.closeNode())}createNewModel(){return{}}onParserClose(n,r){Object.assign(this.model,r.model)}}d.exports=s},{"../composite-xform":48,"./cf-ext/conditional-formattings-ext-xform":78}],97:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"headerFooter"}render(s,t){if(t){s.addRollback();let n=!1;s.openNode("headerFooter"),t.differentFirst&&(s.addAttribute("differentFirst","1"),n=!0),t.differentOddEven&&(s.addAttribute("differentOddEven","1"),n=!0),t.oddHeader&&typeof t.oddHeader=="string"&&(s.leafNode("oddHeader",null,t.oddHeader),n=!0),t.oddFooter&&typeof t.oddFooter=="string"&&(s.leafNode("oddFooter",null,t.oddFooter),n=!0),t.evenHeader&&typeof t.evenHeader=="string"&&(s.leafNode("evenHeader",null,t.evenHeader),n=!0),t.evenFooter&&typeof t.evenFooter=="string"&&(s.leafNode("evenFooter",null,t.evenFooter),n=!0),t.firstHeader&&typeof t.firstHeader=="string"&&(s.leafNode("firstHeader",null,t.firstHeader),n=!0),t.firstFooter&&typeof t.firstFooter=="string"&&(s.leafNode("firstFooter",null,t.firstFooter),n=!0),n?(s.closeNode(),s.commit()):s.rollback()}}parseOpen(s){switch(s.name){case"headerFooter":return this.model={},s.attributes.differentFirst&&(this.model.differentFirst=parseInt(s.attributes.differentFirst,0)===1),s.attributes.differentOddEven&&(this.model.differentOddEven=parseInt(s.attributes.differentOddEven,0)===1),!0;case"oddHeader":return this.currentNode="oddHeader",!0;case"oddFooter":return this.currentNode="oddFooter",!0;case"evenHeader":return this.currentNode="evenHeader",!0;case"evenFooter":return this.currentNode="evenFooter",!0;case"firstHeader":return this.currentNode="firstHeader",!0;case"firstFooter":return this.currentNode="firstFooter",!0;default:return!1}}parseText(s){switch(this.currentNode){case"oddHeader":this.model.oddHeader=s;break;case"oddFooter":this.model.oddFooter=s;break;case"evenHeader":this.model.evenHeader=s;break;case"evenFooter":this.model.evenFooter=s;break;case"firstHeader":this.model.firstHeader=s;break;case"firstFooter":this.model.firstFooter=s;break}}parseClose(){switch(this.currentNode){case"oddHeader":case"oddFooter":case"evenHeader":case"evenFooter":case"firstHeader":case"firstFooter":return this.currentNode=void 0,!0;default:return!1}}}d.exports=c},{"../base-xform":32}],98:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"hyperlink"}render(s,t){this.isInternalLink(t)?s.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip,location:t.target}):s.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip})}parseOpen(s){return s.name==="hyperlink"?(this.model={address:s.attributes.ref,rId:s.attributes["r:id"],tooltip:s.attributes.tooltip},s.attributes.location&&(this.model.target=s.attributes.location),!0):!1}parseText(){}parseClose(){return!1}isInternalLink(s){return s.target&&/^[^!]+![a-zA-Z]+[\d]+$/.test(s.target)}}d.exports=c},{"../base-xform":32}],99:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"mergeCell"}render(s,t){s.leafNode("mergeCell",{ref:t})}parseOpen(s){return s.name==="mergeCell"?(this.model=s.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],100:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../doc/range"),u=e("../../../utils/col-cache"),s=e("../../../doc/enums");class t{constructor(){this.merges={}}add(r){if(this.merges[r.master])this.merges[r.master].expandToAddress(r.address);else{const i=`${r.master}:${r.address}`;this.merges[r.master]=new c(i)}}get mergeCells(){return f.map(this.merges,r=>r.range)}reconcile(r,i){f.each(r,o=>{const l=u.decode(o);for(let a=l.top;a<=l.bottom;a++){const g=i[a-1];for(let v=l.left;v<=l.right;v++){const h=g.cells[v-1];h?h.type===s.ValueType.Merge&&(h.master=l.tl):g.cells[v]={type:s.ValueType.Null,address:u.encodeAddress(a,v)}}}})}getMasterAddress(r){const i=this.hash[r];return i&&i.tl}}d.exports=t},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26}],101:[function(e,d,m){const f=e("../base-xform"),c=s=>typeof s<"u";class u extends f{get tag(){return"outlinePr"}render(t,n){return n&&(c(n.summaryBelow)||c(n.summaryRight))?(t.leafNode(this.tag,{summaryBelow:c(n.summaryBelow)?Number(n.summaryBelow):void 0,summaryRight:c(n.summaryRight)?Number(n.summaryRight):void 0}),!0):!1}parseOpen(t){return t.name===this.tag?(this.model={summaryBelow:c(t.attributes.summaryBelow)?!!Number(t.attributes.summaryBelow):void 0,summaryRight:c(t.attributes.summaryRight)?!!Number(t.attributes.summaryRight):void 0},!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../base-xform":32}],102:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"brk"}render(s,t){s.leafNode("brk",t)}parseOpen(s){return s.name==="brk"?(this.model=s.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],103:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");class u extends c{get tag(){return"pageMargins"}render(t,n){if(n){const r={left:n.left,right:n.right,top:n.top,bottom:n.bottom,header:n.header,footer:n.footer};f.some(r,i=>i!==void 0)&&t.leafNode(this.tag,r)}}parseOpen(t){switch(t.name){case this.tag:return this.model={left:parseFloat(t.attributes.left||.7),right:parseFloat(t.attributes.right||.7),top:parseFloat(t.attributes.top||.75),bottom:parseFloat(t.attributes.bottom||.75),header:parseFloat(t.attributes.header||.3),footer:parseFloat(t.attributes.footer||.3)},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=u},{"../../../utils/under-dash":26,"../base-xform":32}],104:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"pageSetUpPr"}render(s,t){return t&&t.fitToPage?(s.leafNode(this.tag,{fitToPage:t.fitToPage?"1":void 0}),!0):!1}parseOpen(s){return s.name===this.tag?(this.model={fitToPage:s.attributes.fitToPage==="1"},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],105:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");function u(o){return o?"1":void 0}function s(o){switch(o){case"overThenDown":return o;default:return}}function t(o){switch(o){case"atEnd":case"asDisplyed":return o;default:return}}function n(o){switch(o){case"dash":case"blank":case"NA":return o;default:return}}function r(o){return o!==void 0?parseInt(o,10):void 0}class i extends c{get tag(){return"pageSetup"}render(l,a){if(a){const g={paperSize:a.paperSize,orientation:a.orientation,horizontalDpi:a.horizontalDpi,verticalDpi:a.verticalDpi,pageOrder:s(a.pageOrder),blackAndWhite:u(a.blackAndWhite),draft:u(a.draft),cellComments:t(a.cellComments),errors:n(a.errors),scale:a.scale,fitToWidth:a.fitToWidth,fitToHeight:a.fitToHeight,firstPageNumber:a.firstPageNumber,useFirstPageNumber:u(a.firstPageNumber),usePrinterDefaults:u(a.usePrinterDefaults),copies:a.copies};f.some(g,v=>v!==void 0)&&l.leafNode(this.tag,g)}}parseOpen(l){switch(l.name){case this.tag:return this.model={paperSize:r(l.attributes.paperSize),orientation:l.attributes.orientation||"portrait",horizontalDpi:parseInt(l.attributes.horizontalDpi||"4294967295",10),verticalDpi:parseInt(l.attributes.verticalDpi||"4294967295",10),pageOrder:l.attributes.pageOrder||"downThenOver",blackAndWhite:l.attributes.blackAndWhite==="1",draft:l.attributes.draft==="1",cellComments:l.attributes.cellComments||"None",errors:l.attributes.errors||"displayed",scale:parseInt(l.attributes.scale||"100",10),fitToWidth:parseInt(l.attributes.fitToWidth||"1",10),fitToHeight:parseInt(l.attributes.fitToHeight||"1",10),firstPageNumber:parseInt(l.attributes.firstPageNumber||"1",10),useFirstPageNumber:l.attributes.useFirstPageNumber==="1",usePrinterDefaults:l.attributes.usePrinterDefaults==="1",copies:parseInt(l.attributes.copies||"1",10)},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=i},{"../../../utils/under-dash":26,"../base-xform":32}],106:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"picture"}render(s,t){t&&s.leafNode(this.tag,{"r:id":t.rId})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],107:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");function u(t){return t?"1":void 0}class s extends c{get tag(){return"printOptions"}render(n,r){if(r){const i={headings:u(r.showRowColHeaders),gridLines:u(r.showGridLines),horizontalCentered:u(r.horizontalCentered),verticalCentered:u(r.verticalCentered)};f.some(i,o=>o!==void 0)&&n.leafNode(this.tag,i)}}parseOpen(n){switch(n.name){case this.tag:return this.model={showRowColHeaders:n.attributes.headings==="1",showGridLines:n.attributes.gridLines==="1",horizontalCentered:n.attributes.horizontalCentered==="1",verticalCentered:n.attributes.verticalCentered==="1"},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=s},{"../../../utils/under-dash":26,"../base-xform":32}],108:[function(e,d,m){const f=e("./page-breaks-xform"),c=e("../list-xform");class u extends c{constructor(){const t={tag:"rowBreaks",count:!0,childXform:new f};super(t)}render(t,n){if(n&&n.length){t.openNode(this.tag,this.$),this.count&&(t.addAttribute(this.$count,n.length),t.addAttribute("manualBreakCount",n.length));const{childXform:r}=this;n.forEach(i=>{r.render(t,i)}),t.closeNode()}else this.empty&&t.leafNode(this.tag)}}d.exports=u},{"../list-xform":71,"./page-breaks-xform":102}],109:[function(e,d,m){const f=e("../base-xform"),c=e("../../../utils/utils"),u=e("./cell-xform");class s extends f{constructor(n){super(),this.maxItems=n&&n.maxItems,this.map={c:new u}}get tag(){return"row"}prepare(n,r){const i=r.styles.addStyleModel(n.style);i&&(n.styleId=i);const o=this.map.c;n.cells.forEach(l=>{o.prepare(l,r)})}render(n,r,i){n.openNode("row"),n.addAttribute("r",r.number),r.height&&(n.addAttribute("ht",r.height),n.addAttribute("customHeight","1")),r.hidden&&n.addAttribute("hidden","1"),r.min>0&&r.max>0&&r.min<=r.max&&n.addAttribute("spans",`${r.min}:${r.max}`),r.styleId&&(n.addAttribute("s",r.styleId),n.addAttribute("customFormat","1")),n.addAttribute("x14ac:dyDescent","0.25"),r.outlineLevel&&n.addAttribute("outlineLevel",r.outlineLevel),r.collapsed&&n.addAttribute("collapsed","1");const o=this.map.c;r.cells.forEach(l=>{o.render(n,l,i)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;if(n.name==="row"){this.numRowsSeen+=1;const r=n.attributes.spans?n.attributes.spans.split(":").map(o=>parseInt(o,10)):[void 0,void 0],i=this.model={number:parseInt(n.attributes.r,10),min:r[0],max:r[1],cells:[]};return n.attributes.s&&(i.styleId=parseInt(n.attributes.s,10)),c.parseBoolean(n.attributes.hidden)&&(i.hidden=!0),c.parseBoolean(n.attributes.bestFit)&&(i.bestFit=!0),n.attributes.ht&&(i.height=parseFloat(n.attributes.ht)),n.attributes.outlineLevel&&(i.outlineLevel=parseInt(n.attributes.outlineLevel,10)),c.parseBoolean(n.attributes.collapsed)&&(i.collapsed=!0),!0}return this.parser=this.map[n.name],this.parser?(this.parser.parseOpen(n),!0):!1}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser){if(!this.parser.parseClose(n)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(`Max column count (${this.maxItems}) exceeded`);this.parser=void 0}return!0}return!1}reconcile(n,r){n.style=n.styleId?r.styles.getStyleModel(n.styleId):{},n.styleId!==void 0&&(n.styleId=void 0);const i=this.map.c;n.cells.forEach(o=>{i.reconcile(o,r)})}}d.exports=s},{"../../../utils/utils":27,"../base-xform":32,"./cell-xform":73}],110:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");class u extends c{get tag(){return"sheetFormatPr"}render(t,n){if(n){const r={defaultRowHeight:n.defaultRowHeight,outlineLevelRow:n.outlineLevelRow,outlineLevelCol:n.outlineLevelCol,"x14ac:dyDescent":n.dyDescent};n.defaultColWidth&&(r.defaultColWidth=n.defaultColWidth),(!n.defaultRowHeight||n.defaultRowHeight!==15)&&(r.customHeight="1"),f.some(r,i=>i!==void 0)&&t.leafNode("sheetFormatPr",r)}}parseOpen(t){return t.name==="sheetFormatPr"?(this.model={defaultRowHeight:parseFloat(t.attributes.defaultRowHeight||"0"),dyDescent:parseFloat(t.attributes["x14ac:dyDescent"]||"0"),outlineLevelRow:parseInt(t.attributes.outlineLevelRow||"0",10),outlineLevelCol:parseInt(t.attributes.outlineLevelCol||"0",10)},t.attributes.defaultColWidth&&(this.model.defaultColWidth=parseFloat(t.attributes.defaultColWidth)),!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../../../utils/under-dash":26,"../base-xform":32}],111:[function(e,d,m){const f=e("../base-xform"),c=e("../style/color-xform"),u=e("./page-setup-properties-xform"),s=e("./outline-properties-xform");class t extends f{constructor(){super(),this.map={tabColor:new c("tabColor"),pageSetUpPr:new u,outlinePr:new s}}get tag(){return"sheetPr"}render(r,i){if(i){r.addRollback(),r.openNode("sheetPr");let o=!1;o=this.map.tabColor.render(r,i.tabColor)||o,o=this.map.pageSetUpPr.render(r,i.pageSetup)||o,o=this.map.outlinePr.render(r,i.outlineProperties)||o,o?(r.closeNode(),r.commit()):r.rollback()}}parseOpen(r){return this.parser?(this.parser.parseOpen(r),!0):r.name===this.tag?(this.reset(),!0):this.map[r.name]?(this.parser=this.map[r.name],this.parser.parseOpen(r),!0):!1}parseText(r){return this.parser?(this.parser.parseText(r),!0):!1}parseClose(r){return this.parser?(this.parser.parseClose(r)||(this.parser=void 0),!0):(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model?(this.model={},this.map.tabColor.model&&(this.model.tabColor=this.map.tabColor.model),this.map.pageSetUpPr.model&&(this.model.pageSetup=this.map.pageSetUpPr.model),this.map.outlinePr.model&&(this.model.outlineProperties=this.map.outlinePr.model)):this.model=null,!1)}}d.exports=t},{"../base-xform":32,"../style/color-xform":128,"./outline-properties-xform":101,"./page-setup-properties-xform":104}],112:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");function u(n,r){return n?r:void 0}function s(n,r){return n===r?!0:void 0}class t extends c{get tag(){return"sheetProtection"}render(r,i){if(i){const o={sheet:u(i.sheet,"1"),selectLockedCells:i.selectLockedCells===!1?"1":void 0,selectUnlockedCells:i.selectUnlockedCells===!1?"1":void 0,formatCells:u(i.formatCells,"0"),formatColumns:u(i.formatColumns,"0"),formatRows:u(i.formatRows,"0"),insertColumns:u(i.insertColumns,"0"),insertRows:u(i.insertRows,"0"),insertHyperlinks:u(i.insertHyperlinks,"0"),deleteColumns:u(i.deleteColumns,"0"),deleteRows:u(i.deleteRows,"0"),sort:u(i.sort,"0"),autoFilter:u(i.autoFilter,"0"),pivotTables:u(i.pivotTables,"0")};i.sheet&&(o.algorithmName=i.algorithmName,o.hashValue=i.hashValue,o.saltValue=i.saltValue,o.spinCount=i.spinCount,o.objects=u(i.objects===!1,"1"),o.scenarios=u(i.scenarios===!1,"1")),f.some(o,l=>l!==void 0)&&r.leafNode(this.tag,o)}}parseOpen(r){switch(r.name){case this.tag:return this.model={sheet:s(r.attributes.sheet,"1"),objects:r.attributes.objects==="1"?!1:void 0,scenarios:r.attributes.scenarios==="1"?!1:void 0,selectLockedCells:r.attributes.selectLockedCells==="1"?!1:void 0,selectUnlockedCells:r.attributes.selectUnlockedCells==="1"?!1:void 0,formatCells:s(r.attributes.formatCells,"0"),formatColumns:s(r.attributes.formatColumns,"0"),formatRows:s(r.attributes.formatRows,"0"),insertColumns:s(r.attributes.insertColumns,"0"),insertRows:s(r.attributes.insertRows,"0"),insertHyperlinks:s(r.attributes.insertHyperlinks,"0"),deleteColumns:s(r.attributes.deleteColumns,"0"),deleteRows:s(r.attributes.deleteRows,"0"),sort:s(r.attributes.sort,"0"),autoFilter:s(r.attributes.autoFilter,"0"),pivotTables:s(r.attributes.pivotTables,"0")},r.attributes.algorithmName&&(this.model.algorithmName=r.attributes.algorithmName,this.model.hashValue=r.attributes.hashValue,this.model.saltValue=r.attributes.saltValue,this.model.spinCount=parseInt(r.attributes.spinCount,10)),!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=t},{"../../../utils/under-dash":26,"../base-xform":32}],113:[function(e,d,m){const f=e("../../../utils/col-cache"),c=e("../base-xform"),u={frozen:"frozen",frozenSplit:"frozen",split:"split"};class s extends c{get tag(){return"sheetView"}prepare(n){switch(n.state){case"frozen":case"split":break;default:n.state="normal";break}}render(n,r){n.openNode("sheetView",{workbookViewId:r.workbookViewId||0});const i=function(v,h,w){w&&n.addAttribute(v,h)};i("rightToLeft","1",r.rightToLeft===!0),i("tabSelected","1",r.tabSelected),i("showRuler","0",r.showRuler===!1),i("showRowColHeaders","0",r.showRowColHeaders===!1),i("showGridLines","0",r.showGridLines===!1),i("zoomScale",r.zoomScale,r.zoomScale),i("zoomScaleNormal",r.zoomScaleNormal,r.zoomScaleNormal),i("view",r.style,r.style);let o,l,a,g;switch(r.state){case"frozen":l=r.xSplit||0,a=r.ySplit||0,o=r.topLeftCell||f.getAddress(a+1,l+1).address,g=r.xSplit&&r.ySplit&&"bottomRight"||r.xSplit&&"topRight"||"bottomLeft",n.leafNode("pane",{xSplit:r.xSplit||void 0,ySplit:r.ySplit||void 0,topLeftCell:o,activePane:g,state:"frozen"}),n.leafNode("selection",{pane:g,activeCell:r.activeCell,sqref:r.activeCell});break;case"split":r.activePane==="topLeft"&&(r.activePane=void 0),n.leafNode("pane",{xSplit:r.xSplit||void 0,ySplit:r.ySplit||void 0,topLeftCell:r.topLeftCell,activePane:r.activePane}),n.leafNode("selection",{pane:r.activePane,activeCell:r.activeCell,sqref:r.activeCell});break;case"normal":r.activeCell&&n.leafNode("selection",{activeCell:r.activeCell,sqref:r.activeCell});break}n.closeNode()}parseOpen(n){switch(n.name){case"sheetView":return this.sheetView={workbookViewId:parseInt(n.attributes.workbookViewId,10),rightToLeft:n.attributes.rightToLeft==="1",tabSelected:n.attributes.tabSelected==="1",showRuler:n.attributes.showRuler!=="0",showRowColHeaders:n.attributes.showRowColHeaders!=="0",showGridLines:n.attributes.showGridLines!=="0",zoomScale:parseInt(n.attributes.zoomScale||"100",10),zoomScaleNormal:parseInt(n.attributes.zoomScaleNormal||"100",10),style:n.attributes.view},this.pane=void 0,this.selections={},!0;case"pane":return this.pane={xSplit:parseInt(n.attributes.xSplit||"0",10),ySplit:parseInt(n.attributes.ySplit||"0",10),topLeftCell:n.attributes.topLeftCell,activePane:n.attributes.activePane||"topLeft",state:n.attributes.state},!0;case"selection":{const r=n.attributes.pane||"topLeft";return this.selections[r]={pane:r,activeCell:n.attributes.activeCell},!0}default:return!1}}parseText(){}parseClose(n){let r,i;switch(n){case"sheetView":return this.sheetView&&this.pane?(r=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:u[this.pane.state]||"split",xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},this.model.state==="split"&&(r.activePane=this.pane.activePane),i=this.selections[this.pane.activePane],i&&i.activeCell&&(r.activeCell=i.activeCell),this.sheetView.style&&(r.style=this.sheetView.style)):(r=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:"normal",showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},i=this.selections.topLeft,i&&i.activeCell&&(r.activeCell=i.activeCell),this.sheetView.style&&(r.style=this.sheetView.style)),!1;default:return!0}}reconcile(){}}d.exports=s},{"../../../utils/col-cache":19,"../base-xform":32}],114:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"tablePart"}render(s,t){t&&s.leafNode(this.tag,{"r:id":t.rId})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],115:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../utils/col-cache"),u=e("../../../utils/xml-stream"),s=e("../../rel-type"),t=e("./merges"),n=e("../base-xform"),r=e("../list-xform"),i=e("./row-xform"),o=e("./col-xform"),l=e("./dimension-xform"),a=e("./hyperlink-xform"),g=e("./merge-cell-xform"),v=e("./data-validations-xform"),h=e("./sheet-properties-xform"),w=e("./sheet-format-properties-xform"),y=e("./sheet-view-xform"),S=e("./sheet-protection-xform"),E=e("./page-margins-xform"),I=e("./page-setup-xform"),F=e("./print-options-xform"),B=e("./auto-filter-xform"),j=e("./picture-xform"),X=e("./drawing-xform"),G=e("./table-part-xform"),V=e("./row-breaks-xform"),J=e("./header-footer-xform"),H=e("./cf/conditional-formattings-xform"),M=e("./ext-lst-xform"),T=(P,L)=>{Object.keys(L).forEach($=>{const R=P[$],k=L[$];R===void 0&&k!==void 0&&(P[$]=k)})},_=(P,L)=>{if(!L||!L.length)return P;if(!P||!P.length)return L;const $={},R={};return P.forEach(k=>{$[k.ref]=k,k.rules.forEach(C=>{const{x14Id:O}=C;O&&(R[O]=C)})}),L.forEach(k=>{k.rules.forEach(C=>{const O=R[C.x14Id];O?T(O,C):$[k.ref]?$[k.ref].rules.push(C):P.push({ref:k.ref,rules:[C]})})}),P};class A extends n{constructor(L){super();const{maxRows:$,maxCols:R,ignoreNodes:k}=L||{};this.ignoreNodes=k||[],this.map={sheetPr:new h,dimension:new l,sheetViews:new r({tag:"sheetViews",count:!1,childXform:new y}),sheetFormatPr:new w,cols:new r({tag:"cols",count:!1,childXform:new o}),sheetData:new r({tag:"sheetData",count:!1,empty:!0,childXform:new i({maxItems:R}),maxItems:$}),autoFilter:new B,mergeCells:new r({tag:"mergeCells",count:!0,childXform:new g}),rowBreaks:new V,hyperlinks:new r({tag:"hyperlinks",count:!1,childXform:new a}),pageMargins:new E,dataValidations:new v,pageSetup:new I,headerFooter:new J,printOptions:new F,picture:new j,drawing:new X,sheetProtection:new S,tableParts:new r({tag:"tableParts",count:!0,childXform:new G}),conditionalFormatting:new H,extLst:new M}}prepare(L,$){$.merges=new t,L.hyperlinks=$.hyperlinks=[],L.comments=$.comments=[],$.formulae={},$.siFormulae=0,this.map.cols.prepare(L.cols,$),this.map.sheetData.prepare(L.rows,$),this.map.conditionalFormatting.prepare(L.conditionalFormattings,$),L.mergeCells=$.merges.mergeCells;const R=L.rels=[];function k(W){return`rId${W.length+1}`}if(L.hyperlinks.forEach(W=>{const ne=k(R);W.rId=ne,R.push({Id:ne,Type:s.Hyperlink,Target:W.target,TargetMode:"External"})}),L.comments.length>0){const W={Id:k(R),Type:s.Comments,Target:`../comments${L.id}.xml`};R.push(W);const ne={Id:k(R),Type:s.VmlDrawing,Target:`../drawings/vmlDrawing${L.id}.vml`};R.push(ne),L.comments.forEach(he=>{he.refAddress=c.decodeAddress(he.ref)}),$.commentRefs.push({commentName:`comments${L.id}`,vmlDrawing:`vmlDrawing${L.id}`})}const C=[];let O;L.media.forEach(W=>{if(W.type==="background"){const ne=k(R);O=$.media[W.imageId],R.push({Id:ne,Type:s.Image,Target:`../media/${O.name}.${O.extension}`}),L.background={rId:ne},L.image=$.media[W.imageId]}else if(W.type==="image"){let{drawing:ne}=L;O=$.media[W.imageId],ne||(ne=L.drawing={rId:k(R),name:`drawing${++$.drawingsCount}`,anchors:[],rels:[]},$.drawings.push(ne),R.push({Id:ne.rId,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",Target:`../drawings/${ne.name}.xml`}));let he=this.preImageId===W.imageId?C[W.imageId]:C[ne.rels.length];he||(he=k(ne.rels),C[ne.rels.length]=he,ne.rels.push({Id:he,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:`../media/${O.name}.${O.extension}`}));const ue={picture:{rId:he},range:W.range};if(W.hyperlinks&&W.hyperlinks.hyperlink){const Ae=k(ne.rels);C[ne.rels.length]=Ae,ue.picture.hyperlinks={tooltip:W.hyperlinks.tooltip,rId:Ae},ne.rels.push({Id:Ae,Type:s.Hyperlink,Target:W.hyperlinks.hyperlink,TargetMode:"External"})}this.preImageId=W.imageId,ne.anchors.push(ue)}}),L.tables.forEach(W=>{const ne=k(R);W.rId=ne,R.push({Id:ne,Type:s.Table,Target:`../tables/${W.target}`}),W.columns.forEach(he=>{const{style:ue}=he;ue&&(he.dxfId=$.styles.addDxfStyle(ue))})}),this.map.extLst.prepare(L,$)}render(L,$){L.openXml(u.StdDocAttributes),L.openNode("worksheet",A.WORKSHEET_ATTRIBUTES);const R=$.properties?{defaultRowHeight:$.properties.defaultRowHeight,dyDescent:$.properties.dyDescent,outlineLevelCol:$.properties.outlineLevelCol,outlineLevelRow:$.properties.outlineLevelRow}:void 0;$.properties&&$.properties.defaultColWidth&&(R.defaultColWidth=$.properties.defaultColWidth);const k={outlineProperties:$.properties&&$.properties.outlineProperties,tabColor:$.properties&&$.properties.tabColor,pageSetup:$.pageSetup&&$.pageSetup.fitToPage?{fitToPage:$.pageSetup.fitToPage}:void 0},C=$.pageSetup&&$.pageSetup.margins,O={showRowColHeaders:$.pageSetup&&$.pageSetup.showRowColHeaders,showGridLines:$.pageSetup&&$.pageSetup.showGridLines,horizontalCentered:$.pageSetup&&$.pageSetup.horizontalCentered,verticalCentered:$.pageSetup&&$.pageSetup.verticalCentered},W=$.sheetProtection;this.map.sheetPr.render(L,k),this.map.dimension.render(L,$.dimensions),this.map.sheetViews.render(L,$.views),this.map.sheetFormatPr.render(L,R),this.map.cols.render(L,$.cols),this.map.sheetData.render(L,$.rows),this.map.sheetProtection.render(L,W),this.map.autoFilter.render(L,$.autoFilter),this.map.mergeCells.render(L,$.mergeCells),this.map.conditionalFormatting.render(L,$.conditionalFormattings),this.map.dataValidations.render(L,$.dataValidations),this.map.hyperlinks.render(L,$.hyperlinks),this.map.printOptions.render(L,O),this.map.pageMargins.render(L,C),this.map.pageSetup.render(L,$.pageSetup),this.map.headerFooter.render(L,$.headerFooter),this.map.rowBreaks.render(L,$.rowBreaks),this.map.drawing.render(L,$.drawing),this.map.picture.render(L,$.background),this.map.tableParts.render(L,$.tables),this.map.extLst.render(L,$),$.rels&&$.rels.forEach(ne=>{ne.Type===s.VmlDrawing&&L.leafNode("legacyDrawing",{"r:id":ne.Id})}),L.closeNode()}parseOpen(L){return this.parser?(this.parser.parseOpen(L),!0):L.name==="worksheet"?(f.each(this.map,$=>{$.reset()}),!0):(this.map[L.name]&&!this.ignoreNodes.includes(L.name)&&(this.parser=this.map[L.name],this.parser.parseOpen(L)),!0)}parseText(L){this.parser&&this.parser.parseText(L)}parseClose(L){if(this.parser)return this.parser.parseClose(L)||(this.parser=void 0),!0;switch(L){case"worksheet":{const $=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&($.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&($.outlineProperties=this.map.sheetPr.model.outlineProperties);const R={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},k=Object.assign(R,this.map.pageSetup.model,this.map.printOptions.model),C=_(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model["x14:conditionalFormattings"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:$,views:this.map.sheetViews.model,pageSetup:k,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:C},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1}default:return!0}}reconcile(L,$){const R=(L.relationships||[]).reduce((C,O)=>{if(C[O.Id]=O,O.Type===s.Comments&&(L.comments=$.comments[O.Target].comments),O.Type===s.VmlDrawing&&L.comments&&L.comments.length){const W=$.vmlDrawings[O.Target].comments;L.comments.forEach((ne,he)=>{ne.note=Object.assign({},ne.note,W[he])})}return C},{});if($.commentsMap=(L.comments||[]).reduce((C,O)=>(O.ref&&(C[O.ref]=O),C),{}),$.hyperlinkMap=(L.hyperlinks||[]).reduce((C,O)=>(O.rId&&(C[O.address]=R[O.rId].Target),C),{}),$.formulae={},L.rows=L.rows&&L.rows.filter(Boolean)||[],L.rows.forEach(C=>{C.cells=C.cells&&C.cells.filter(Boolean)||[]}),this.map.cols.reconcile(L.cols,$),this.map.sheetData.reconcile(L.rows,$),this.map.conditionalFormatting.reconcile(L.conditionalFormattings,$),L.media=[],L.drawing){const O=R[L.drawing.rId].Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(O){const W=O[1];$.drawings[W].anchors.forEach(he=>{if(he.medium){const ue={type:"image",imageId:he.medium.index,range:he.range,hyperlinks:he.picture.hyperlinks};L.media.push(ue)}})}}const k=L.background&&R[L.background.rId];if(k){const C=k.Target.split("/media/")[1],O=$.mediaIndex&&$.mediaIndex[C];O!==void 0&&L.media.push({type:"background",imageId:O})}L.tables=(L.tables||[]).map(C=>{const O=R[C.rId];return $.tables[O.Target]}),delete L.relationships,delete L.hyperlinks,delete L.comments}}A.WORKSHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"},d.exports=A},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../../rel-type":31,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":72,"./cf/conditional-formattings-xform":87,"./col-xform":92,"./data-validations-xform":93,"./dimension-xform":94,"./drawing-xform":95,"./ext-lst-xform":96,"./header-footer-xform":97,"./hyperlink-xform":98,"./merge-cell-xform":99,"./merges":100,"./page-margins-xform":103,"./page-setup-xform":105,"./picture-xform":106,"./print-options-xform":107,"./row-breaks-xform":108,"./row-xform":109,"./sheet-format-properties-xform":110,"./sheet-properties-xform":111,"./sheet-protection-xform":112,"./sheet-view-xform":113,"./table-part-xform":114}],116:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr}render(s,t){t&&(s.openNode(this.tag),s.closeNode())}parseOpen(s){s.name===this.tag&&(this.model=!0)}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],117:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr,this.attrs=s.attrs,this._format=s.format||function(t){try{return Number.isNaN(t.getTime())?"":t.toISOString()}catch{return""}},this._parse=s.parse||function(t){return new Date(t)}}render(s,t){t&&(s.openNode(this.tag),this.attrs&&s.addAttributes(this.attrs),this.attr?s.addAttribute(this.attr,this._format(t)):s.writeText(this._format(t)),s.closeNode())}parseOpen(s){s.name===this.tag&&(this.attr?this.model=this._parse(s.attributes[this.attr]):this.text=[])}parseText(s){this.attr||this.text.push(s)}parseClose(){return this.attr||(this.model=this._parse(this.text.join(""))),!1}}d.exports=c},{"../base-xform":32}],118:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr,this.attrs=s.attrs,this.zero=s.zero}render(s,t){(t||this.zero)&&(s.openNode(this.tag),this.attrs&&s.addAttributes(this.attrs),this.attr?s.addAttribute(this.attr,t):s.writeText(t),s.closeNode())}parseOpen(s){return s.name===this.tag?(this.attr?this.model=parseInt(s.attributes[this.attr],10):this.text=[],!0):!1}parseText(s){this.attr||this.text.push(s)}parseClose(){return this.attr||(this.model=parseInt(this.text.join("")||0,10)),!1}}d.exports=c},{"../base-xform":32}],119:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr,this.attrs=s.attrs}render(s,t){t!==void 0&&(s.openNode(this.tag),this.attrs&&s.addAttributes(this.attrs),this.attr?s.addAttribute(this.attr,t):s.writeText(t),s.closeNode())}parseOpen(s){s.name===this.tag&&(this.attr?this.model=s.attributes[this.attr]:this.text=[])}parseText(s){this.attr||this.text.push(s)}parseClose(){return this.attr||(this.model=this.text.join("")),!1}}d.exports=c},{"../base-xform":32}],120:[function(e,d,m){const f=e("./base-xform"),c=e("../../utils/xml-stream");function u(t,n){t.openNode(n.tag,n.$),n.c&&n.c.forEach(r=>{u(t,r)}),n.t&&t.writeText(n.t),t.closeNode()}class s extends f{constructor(n){super(),this._model=n}render(n){if(!this._xml){const r=new c;u(r,this._model),this._xml=r.xml}n.writeXml(this._xml)}parseOpen(){return!0}parseText(){}parseClose(n){switch(n){case this._model.tag:return!1;default:return!0}}}d.exports=s},{"../../utils/xml-stream":28,"./base-xform":32}],121:[function(e,d,m){const f=e("./text-xform"),c=e("./rich-text-xform"),u=e("../base-xform");class s extends u{constructor(){super(),this.map={r:new c,t:new f}}get tag(){return"rPh"}render(n,r){if(n.openNode(this.tag,{sb:r.sb||0,eb:r.eb||0}),r&&r.hasOwnProperty("richText")&&r.richText){const{r:i}=this.map;r.richText.forEach(o=>{i.render(n,o)})}else r&&this.map.t.render(n,r.text);n.closeNode()}parseOpen(n){const{name:r}=n;return this.parser?(this.parser.parseOpen(n),!0):r===this.tag?(this.model={sb:parseInt(n.attributes.sb,10),eb:parseInt(n.attributes.eb,10)},!0):(this.parser=this.map[r],this.parser?(this.parser.parseOpen(n),!0):!1)}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser){if(!this.parser.parseClose(n)){switch(n){case"r":{let r=this.model.richText;r||(r=this.model.richText=[]),r.push(this.parser.model);break}case"t":this.model.text=this.parser.model;break}this.parser=void 0}return!0}switch(n){case this.tag:return!1;default:return!0}}}d.exports=s},{"../base-xform":32,"./rich-text-xform":122,"./text-xform":125}],122:[function(e,d,m){const f=e("./text-xform"),c=e("../style/font-xform"),u=e("../base-xform");class s extends u{constructor(n){super(),this.model=n}get tag(){return"r"}get textXform(){return this._textXform||(this._textXform=new f)}get fontXform(){return this._fontXform||(this._fontXform=new c(s.FONT_OPTIONS))}render(n,r){r=r||this.model,n.openNode("r"),r.font&&this.fontXform.render(n,r.font),this.textXform.render(n,r.text),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"r":return this.model={},!0;case"t":return this.parser=this.textXform,this.parser.parseOpen(n),!0;case"rPr":return this.parser=this.fontXform,this.parser.parseOpen(n),!0;default:return!1}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){switch(n){case"r":return!1;case"t":return this.model.text=this.parser.model,this.parser=void 0,!0;case"rPr":return this.model.font=this.parser.model,this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(n),!0}}}s.FONT_OPTIONS={tagName:"rPr",fontNameTag:"rFont"},d.exports=s},{"../base-xform":32,"../style/font-xform":131,"./text-xform":125}],123:[function(e,d,m){const f=e("./text-xform"),c=e("./rich-text-xform"),u=e("./phonetic-text-xform"),s=e("../base-xform");class t extends s{constructor(r){super(),this.model=r,this.map={r:new c,t:new f,rPh:new u}}get tag(){return"si"}render(r,i){r.openNode(this.tag),i&&i.hasOwnProperty("richText")&&i.richText?i.richText.length?i.richText.forEach(o=>{this.map.r.render(r,o)}):this.map.t.render(r,""):i!=null&&this.map.t.render(r,i),r.closeNode()}parseOpen(r){const{name:i}=r;return this.parser?(this.parser.parseOpen(r),!0):i===this.tag?(this.model={},!0):(this.parser=this.map[i],this.parser?(this.parser.parseOpen(r),!0):!1)}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){if(this.parser){if(!this.parser.parseClose(r)){switch(r){case"r":{let i=this.model.richText;i||(i=this.model.richText=[]),i.push(this.parser.model);break}case"t":this.model=this.parser.model;break}this.parser=void 0}return!0}switch(r){case this.tag:return!1;default:return!0}}}d.exports=t},{"../base-xform":32,"./phonetic-text-xform":121,"./rich-text-xform":122,"./text-xform":125}],124:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("./shared-string-xform");class s extends c{constructor(n){super(),this.model=n||{values:[],count:0},this.hash=Object.create(null),this.rich=Object.create(null)}get sharedStringXform(){return this._sharedStringXform||(this._sharedStringXform=new u)}get values(){return this.model.values}get uniqueCount(){return this.model.values.length}get count(){return this.model.count}getString(n){return this.model.values[n]}add(n){return n.richText?this.addRichText(n):this.addText(n)}addText(n){let r=this.hash[n];return r===void 0&&(r=this.hash[n]=this.model.values.length,this.model.values.push(n)),this.model.count++,r}addRichText(n){const r=this.sharedStringXform.toXml(n);let i=this.rich[r];return i===void 0&&(i=this.rich[r]=this.model.values.length,this.model.values.push(n)),this.model.count++,i}render(n,r){r=r||this._values,n.openXml(f.StdDocAttributes),n.openNode("sst",{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",count:r.count,uniqueCount:r.values.length});const i=this.sharedStringXform;r.values.forEach(o=>{i.render(n,o)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"sst":return!0;case"si":return this.parser=this.sharedStringXform,this.parser.parseOpen(n),!0;default:throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(n)}`)}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.model.values.push(this.parser.model),this.model.count++,this.parser=void 0),!0;switch(n){case"sst":return!1;default:throw new Error(`Unexpected xml node in parseClose: ${n}`)}}}d.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32,"./shared-string-xform":123}],125:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"t"}render(s,t){s.openNode("t"),/^\s|\n|\s$/.test(t)&&s.addAttribute("xml:space","preserve"),s.writeText(t),s.closeNode()}get model(){return this._text.join("").replace(/_x([0-9A-F]{4})_/g,(s,t)=>String.fromCharCode(parseInt(t,16)))}parseOpen(s){switch(s.name){case"t":return this._text=[],!0;default:return!1}}parseText(s){this._text.push(s)}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],126:[function(e,d,m){const f=e("../../../doc/enums"),c=e("../../../utils/utils"),u=e("../base-xform"),s={horizontalValues:["left","center","right","fill","centerContinuous","distributed","justify"].reduce((r,i)=>(r[i]=!0,r),{}),horizontal(r){return this.horizontalValues[r]?r:void 0},verticalValues:["top","middle","bottom","distributed","justify"].reduce((r,i)=>(r[i]=!0,r),{}),vertical(r){return r==="middle"?"center":this.verticalValues[r]?r:void 0},wrapText(r){return r?!0:void 0},shrinkToFit(r){return r?!0:void 0},textRotation(r){switch(r){case"vertical":return r;default:return r=c.validInt(r),r>=-90&&r<=90?r:void 0}},indent(r){return r=c.validInt(r),Math.max(0,r)},readingOrder(r){switch(r){case"ltr":return f.ReadingOrder.LeftToRight;case"rtl":return f.ReadingOrder.RightToLeft;default:return}}},t={toXml(r){if(r=s.textRotation(r),r){if(r==="vertical")return 255;const i=Math.round(r);if(i>=0&&i<=90)return i;if(i<0&&i>=-90)return 90-i}},toModel(r){const i=c.validInt(r);if(i!==void 0){if(i===255)return"vertical";if(i>=0&&i<=90)return i;if(i>90&&i<=180)return 90-i}}};class n extends u{get tag(){return"alignment"}render(i,o){i.addRollback(),i.openNode("alignment");let l=!1;function a(g,v){v&&(i.addAttribute(g,v),l=!0)}a("horizontal",s.horizontal(o.horizontal)),a("vertical",s.vertical(o.vertical)),a("wrapText",s.wrapText(o.wrapText)?"1":!1),a("shrinkToFit",s.shrinkToFit(o.shrinkToFit)?"1":!1),a("indent",s.indent(o.indent)),a("textRotation",t.toXml(o.textRotation)),a("readingOrder",s.readingOrder(o.readingOrder)),i.closeNode(),l?i.commit():i.rollback()}parseOpen(i){const o={};let l=!1;function a(g,v,h){g&&(o[v]=h,l=!0)}a(i.attributes.horizontal,"horizontal",i.attributes.horizontal),a(i.attributes.vertical,"vertical",i.attributes.vertical==="center"?"middle":i.attributes.vertical),a(i.attributes.wrapText,"wrapText",c.parseBoolean(i.attributes.wrapText)),a(i.attributes.shrinkToFit,"shrinkToFit",c.parseBoolean(i.attributes.shrinkToFit)),a(i.attributes.indent,"indent",parseInt(i.attributes.indent,10)),a(i.attributes.textRotation,"textRotation",t.toModel(i.attributes.textRotation)),a(i.attributes.readingOrder,"readingOrder",i.attributes.readingOrder==="2"?"rtl":"ltr"),this.model=l?o:null}parseText(){}parseClose(){return!1}}d.exports=n},{"../../../doc/enums":7,"../../../utils/utils":27,"../base-xform":32}],127:[function(e,d,m){const f=e("../base-xform"),c=e("../../../utils/utils"),u=e("./color-xform");class s extends f{constructor(r){super(),this.name=r,this.map={color:new u}}get tag(){return this.name}render(r,i,o){const l=i&&i.color||o||this.defaultColor;r.openNode(this.name),i&&i.style&&(r.addAttribute("style",i.style),l&&this.map.color.render(r,l)),r.closeNode()}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;switch(r.name){case this.name:{const{style:i}=r.attributes;return i?this.model={style:i}:this.model=void 0,!0}case"color":return this.parser=this.map.color,this.parser.parseOpen(r),!0;default:return!1}}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){return this.parser?(this.parser.parseClose(r)||(this.parser=void 0),!0):(r===this.name&&this.map.color.model&&(this.model||(this.model={}),this.model.color=this.map.color.model),!1)}validStyle(r){return s.validStyleValues[r]}}s.validStyleValues=["thin","dashed","dotted","dashDot","hair","dashDotDot","slantDashDot","mediumDashed","mediumDashDotDot","mediumDashDot","medium","double","thick"].reduce((n,r)=>(n[r]=!0,n),{});class t extends f{constructor(){super(),this.map={top:new s("top"),left:new s("left"),bottom:new s("bottom"),right:new s("right"),diagonal:new s("diagonal")}}render(r,i){const{color:o}=i;r.openNode("border"),i.diagonal&&i.diagonal.style&&(i.diagonal.up&&r.addAttribute("diagonalUp","1"),i.diagonal.down&&r.addAttribute("diagonalDown","1"));function l(a,g){a&&!a.color&&i.color&&(a={...a,color:i.color}),g.render(r,a,o)}l(i.left,this.map.left),l(i.right,this.map.right),l(i.top,this.map.top),l(i.bottom,this.map.bottom),l(i.diagonal,this.map.diagonal),r.closeNode()}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;switch(r.name){case"border":return this.reset(),this.diagonalUp=c.parseBoolean(r.attributes.diagonalUp),this.diagonalDown=c.parseBoolean(r.attributes.diagonalDown),!0;default:return this.parser=this.map[r.name],this.parser?(this.parser.parseOpen(r),!0):!1}}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){if(this.parser)return this.parser.parseClose(r)||(this.parser=void 0),!0;if(r==="border"){const i=this.model={},o=function(l,a,g){a&&(g&&Object.assign(a,g),i[l]=a)};o("left",this.map.left.model),o("right",this.map.right.model),o("top",this.map.top.model),o("bottom",this.map.bottom.model),o("diagonal",this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown})}return!1}}d.exports=t},{"../../../utils/utils":27,"../base-xform":32,"./color-xform":128}],128:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.name=s||"color"}get tag(){return this.name}render(s,t){return t?(s.openNode(this.name),t.argb?s.addAttribute("rgb",t.argb):t.theme!==void 0?(s.addAttribute("theme",t.theme),t.tint!==void 0&&s.addAttribute("tint",t.tint)):t.indexed!==void 0?s.addAttribute("indexed",t.indexed):s.addAttribute("auto","1"),s.closeNode(),!0):!1}parseOpen(s){return s.name===this.name?(s.attributes.rgb?this.model={argb:s.attributes.rgb}:s.attributes.theme?(this.model={theme:parseInt(s.attributes.theme,10)},s.attributes.tint&&(this.model.tint=parseFloat(s.attributes.tint))):s.attributes.indexed?this.model={indexed:parseInt(s.attributes.indexed,10)}:this.model=void 0,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],129:[function(e,d,m){const f=e("../base-xform"),c=e("./alignment-xform"),u=e("./border-xform"),s=e("./fill-xform"),t=e("./font-xform"),n=e("./numfmt-xform"),r=e("./protection-xform");class i extends f{constructor(){super(),this.map={alignment:new c,border:new u,fill:new s,font:new t,numFmt:new n,protection:new r}}get tag(){return"dxf"}render(l,a){if(l.openNode(this.tag),a.font&&this.map.font.render(l,a.font),a.numFmt&&a.numFmtId){const g={id:a.numFmtId,formatCode:a.numFmt};this.map.numFmt.render(l,g)}a.fill&&this.map.fill.render(l,a.fill),a.alignment&&this.map.alignment.render(l,a.alignment),a.border&&this.map.border.render(l,a.border),a.protection&&this.map.protection.render(l,a.protection),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case this.tag:return this.reset(),!0;default:return this.parser=this.map[l.name],this.parser&&this.parser.parseOpen(l),!0}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){return this.parser?(this.parser.parseClose(l)||(this.parser=void 0),!0):l===this.tag?(this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model},!1):!0}}d.exports=i},{"../base-xform":32,"./alignment-xform":126,"./border-xform":127,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./protection-xform":133}],130:[function(e,d,m){const f=e("../base-xform"),c=e("./color-xform");class u extends f{constructor(){super(),this.map={color:new c}}get tag(){return"stop"}render(i,o){i.openNode("stop"),i.addAttribute("position",o.position),this.map.color.render(i,o.color),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"stop":return this.model={position:parseFloat(i.attributes.position)},!0;case"color":return this.parser=this.map.color,this.parser.parseOpen(i),!0;default:return!1}}parseText(){}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.model.color=this.parser.model,this.parser=void 0),!0):!1}}class s extends f{constructor(){super(),this.map={fgColor:new c("fgColor"),bgColor:new c("bgColor")}}get name(){return"pattern"}get tag(){return"patternFill"}render(i,o){i.openNode("patternFill"),i.addAttribute("patternType",o.pattern),o.fgColor&&this.map.fgColor.render(i,o.fgColor),o.bgColor&&this.map.bgColor.render(i,o.bgColor),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"patternFill":return this.model={type:"pattern",pattern:i.attributes.patternType},!0;default:return this.parser=this.map[i.name],this.parser?(this.parser.parseOpen(i),!0):!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.parser.model&&(this.model[i]=this.parser.model),this.parser=void 0),!0):!1}}class t extends f{constructor(){super(),this.map={stop:new u}}get name(){return"gradient"}get tag(){return"gradientFill"}render(i,o){switch(i.openNode("gradientFill"),o.gradient){case"angle":i.addAttribute("degree",o.degree);break;case"path":i.addAttribute("type","path"),o.center.left&&(i.addAttribute("left",o.center.left),o.center.right===void 0&&i.addAttribute("right",o.center.left)),o.center.right&&i.addAttribute("right",o.center.right),o.center.top&&(i.addAttribute("top",o.center.top),o.center.bottom===void 0&&i.addAttribute("bottom",o.center.top)),o.center.bottom&&i.addAttribute("bottom",o.center.bottom);break}const l=this.map.stop;o.stops.forEach(a=>{l.render(i,a)}),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"gradientFill":{const o=this.model={stops:[]};return i.attributes.degree?(o.gradient="angle",o.degree=parseInt(i.attributes.degree,10)):i.attributes.type==="path"&&(o.gradient="path",o.center={left:i.attributes.left?parseFloat(i.attributes.left):0,top:i.attributes.top?parseFloat(i.attributes.top):0},i.attributes.right!==i.attributes.left&&(o.center.right=i.attributes.right?parseFloat(i.attributes.right):0),i.attributes.bottom!==i.attributes.top&&(o.center.bottom=i.attributes.bottom?parseFloat(i.attributes.bottom):0)),!0}case"stop":return this.parser=this.map.stop,this.parser.parseOpen(i),!0;default:return!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.model.stops.push(this.parser.model),this.parser=void 0),!0):!1}}class n extends f{constructor(){super(),this.map={patternFill:new s,gradientFill:new t}}get tag(){return"fill"}render(i,o){switch(i.addRollback(),i.openNode("fill"),o.type){case"pattern":this.map.patternFill.render(i,o);break;case"gradient":this.map.gradientFill.render(i,o);break;default:i.rollback();return}i.closeNode(),i.commit()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"fill":return this.model={},!0;default:return this.parser=this.map[i.name],this.parser?(this.parser.parseOpen(i),!0):!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.model=this.parser.model,this.model.type=this.parser.name,this.parser=void 0),!0):!1}validStyle(i){return n.validPatternValues[i]}}n.validPatternValues=["none","solid","darkVertical","darkGray","mediumGray","lightGray","gray125","gray0625","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","lightGrid"].reduce((r,i)=>(r[i]=!0,r),{}),n.StopXform=u,n.PatternFillXform=s,n.GradientFillXform=t,d.exports=n},{"../base-xform":32,"./color-xform":128}],131:[function(e,d,m){const f=e("./color-xform"),c=e("../simple/boolean-xform"),u=e("../simple/integer-xform"),s=e("../simple/string-xform"),t=e("./underline-xform"),n=e("../../../utils/under-dash"),r=e("../base-xform");class i extends r{constructor(l){super(),this.options=l||i.OPTIONS,this.map={b:{prop:"bold",xform:new c({tag:"b",attr:"val"})},i:{prop:"italic",xform:new c({tag:"i",attr:"val"})},u:{prop:"underline",xform:new t},charset:{prop:"charset",xform:new u({tag:"charset",attr:"val"})},color:{prop:"color",xform:new f},condense:{prop:"condense",xform:new c({tag:"condense",attr:"val"})},extend:{prop:"extend",xform:new c({tag:"extend",attr:"val"})},family:{prop:"family",xform:new u({tag:"family",attr:"val"})},outline:{prop:"outline",xform:new c({tag:"outline",attr:"val"})},vertAlign:{prop:"vertAlign",xform:new s({tag:"vertAlign",attr:"val"})},scheme:{prop:"scheme",xform:new s({tag:"scheme",attr:"val"})},shadow:{prop:"shadow",xform:new c({tag:"shadow",attr:"val"})},strike:{prop:"strike",xform:new c({tag:"strike",attr:"val"})},sz:{prop:"size",xform:new u({tag:"sz",attr:"val"})}},this.map[this.options.fontNameTag]={prop:"name",xform:new s({tag:this.options.fontNameTag,attr:"val"})}}get tag(){return this.options.tagName}render(l,a){const{map:g}=this;l.openNode(this.options.tagName),n.each(this.map,(v,h)=>{g[h].xform.render(l,a[v.prop])}),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;if(this.map[l.name])return this.parser=this.map[l.name].xform,this.parser.parseOpen(l);switch(l.name){case this.options.tagName:return this.model={},!0;default:return!1}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){if(this.parser&&!this.parser.parseClose(l)){const a=this.map[l];return this.parser.model&&(this.model[a.prop]=this.parser.model),this.parser=void 0,!0}switch(l){case this.options.tagName:return!1;default:return!0}}}i.OPTIONS={tagName:"font",fontNameTag:"name"},d.exports=i},{"../../../utils/under-dash":26,"../base-xform":32,"../simple/boolean-xform":116,"../simple/integer-xform":118,"../simple/string-xform":119,"./color-xform":128,"./underline-xform":136}],132:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../defaultnumformats"),u=e("../base-xform");function s(){const r={};return f.each(c,(i,o)=>{i.f&&(r[i.f]=parseInt(o,10))}),r}const t=s();class n extends u{constructor(i,o){super(),this.id=i,this.formatCode=o}get tag(){return"numFmt"}render(i,o){i.leafNode("numFmt",{numFmtId:o.id,formatCode:o.formatCode})}parseOpen(i){switch(i.name){case"numFmt":return this.model={id:parseInt(i.attributes.numFmtId,10),formatCode:i.attributes.formatCode.replace(/[\\](.)/g,"$1")},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.getDefaultFmtId=function(i){return t[i]},n.getDefaultFmtCode=function(i){return c[i]&&c[i].f},d.exports=n},{"../../../utils/under-dash":26,"../../defaultnumformats":30,"../base-xform":32}],133:[function(e,d,m){const f=e("../base-xform"),c={boolean(s,t){return s===void 0?t:s}};class u extends f{get tag(){return"protection"}render(t,n){t.addRollback(),t.openNode("protection");let r=!1;function i(o,l){l!==void 0&&(t.addAttribute(o,l),r=!0)}i("locked",c.boolean(n.locked,!0)?void 0:"0"),i("hidden",c.boolean(n.hidden,!1)?"1":void 0),t.closeNode(),r?t.commit():t.rollback()}parseOpen(t){const n={locked:t.attributes.locked!=="0",hidden:t.attributes.hidden==="1"},r=!n.locked||n.hidden;this.model=r?n:null}parseText(){}parseClose(){return!1}}d.exports=u},{"../base-xform":32}],134:[function(e,d,m){const f=e("../base-xform"),c=e("./alignment-xform"),u=e("./protection-xform");class s extends f{constructor(n){super(),this.xfId=!!(n&&n.xfId),this.map={alignment:new c,protection:new u}}get tag(){return"xf"}render(n,r){n.openNode("xf",{numFmtId:r.numFmtId||0,fontId:r.fontId||0,fillId:r.fillId||0,borderId:r.borderId||0}),this.xfId&&n.addAttribute("xfId",r.xfId||0),r.numFmtId&&n.addAttribute("applyNumberFormat","1"),r.fontId&&n.addAttribute("applyFont","1"),r.fillId&&n.addAttribute("applyFill","1"),r.borderId&&n.addAttribute("applyBorder","1"),r.alignment&&n.addAttribute("applyAlignment","1"),r.protection&&n.addAttribute("applyProtection","1"),r.alignment&&this.map.alignment.render(n,r.alignment),r.protection&&this.map.protection.render(n,r.protection),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"xf":return this.model={numFmtId:parseInt(n.attributes.numFmtId,10),fontId:parseInt(n.attributes.fontId,10),fillId:parseInt(n.attributes.fillId,10),borderId:parseInt(n.attributes.borderId,10)},this.xfId&&(this.model.xfId=parseInt(n.attributes.xfId,10)),!0;case"alignment":return this.parser=this.map.alignment,this.parser.parseOpen(n),!0;case"protection":return this.parser=this.map.protection,this.parser.parseOpen(n),!0;default:return!1}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){return this.parser?(this.parser.parseClose(n)||(this.map.protection===this.parser?this.model.protection=this.parser.model:this.model.alignment=this.parser.model,this.parser=void 0),!0):n!=="xf"}}d.exports=s},{"../base-xform":32,"./alignment-xform":126,"./protection-xform":133}],135:[function(e,d,m){const f=e("../../../doc/enums"),c=e("../../../utils/xml-stream"),u=e("../base-xform"),s=e("../static-xform"),t=e("../list-xform"),n=e("./font-xform"),r=e("./fill-xform"),i=e("./border-xform"),o=e("./numfmt-xform"),l=e("./style-xform"),a=e("./dxf-xform"),g=164;class v extends u{constructor(y){super(),this.map={numFmts:new t({tag:"numFmts",count:!0,childXform:new o}),fonts:new t({tag:"fonts",count:!0,childXform:new n,$:{"x14ac:knownFonts":1}}),fills:new t({tag:"fills",count:!0,childXform:new r}),borders:new t({tag:"borders",count:!0,childXform:new i}),cellStyleXfs:new t({tag:"cellStyleXfs",count:!0,childXform:new l}),cellXfs:new t({tag:"cellXfs",count:!0,childXform:new l({xfId:!0})}),dxfs:new t({tag:"dxfs",always:!0,count:!0,childXform:new a}),numFmt:new o,font:new n,fill:new r,border:new i,style:new l({xfId:!0}),cellStyles:v.STATIC_XFORMS.cellStyles,tableStyles:v.STATIC_XFORMS.tableStyles,extLst:v.STATIC_XFORMS.extLst},y&&this.init()}initIndex(){this.index={style:{},numFmt:{},numFmtNextId:164,font:{},border:{},fill:{}}}init(){this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]},this.initIndex(),this._addBorder({}),this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}),this._addFill({type:"pattern",pattern:"none"}),this._addFill({type:"pattern",pattern:"gray125"}),this.weakMap=new WeakMap}render(y,S){S=S||this.model,y.openXml(c.StdDocAttributes),y.openNode("styleSheet",v.STYLESHEET_ATTRIBUTES),this.index?(S.numFmts&&S.numFmts.length&&(y.openNode("numFmts",{count:S.numFmts.length}),S.numFmts.forEach(E=>{y.writeXml(E)}),y.closeNode()),S.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),y.openNode("fonts",{count:S.fonts.length,"x14ac:knownFonts":1}),S.fonts.forEach(E=>{y.writeXml(E)}),y.closeNode(),y.openNode("fills",{count:S.fills.length}),S.fills.forEach(E=>{y.writeXml(E)}),y.closeNode(),y.openNode("borders",{count:S.borders.length}),S.borders.forEach(E=>{y.writeXml(E)}),y.closeNode(),this.map.cellStyleXfs.render(y,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),y.openNode("cellXfs",{count:S.styles.length}),S.styles.forEach(E=>{y.writeXml(E)}),y.closeNode()):(this.map.numFmts.render(y,S.numFmts),this.map.fonts.render(y,S.fonts),this.map.fills.render(y,S.fills),this.map.borders.render(y,S.borders),this.map.cellStyleXfs.render(y,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),this.map.cellXfs.render(y,S.styles)),v.STATIC_XFORMS.cellStyles.render(y),this.map.dxfs.render(y,S.dxfs),v.STATIC_XFORMS.tableStyles.render(y),v.STATIC_XFORMS.extLst.render(y),y.closeNode()}parseOpen(y){if(this.parser)return this.parser.parseOpen(y),!0;switch(y.name){case"styleSheet":return this.initIndex(),!0;default:return this.parser=this.map[y.name],this.parser&&this.parser.parseOpen(y),!0}}parseText(y){this.parser&&this.parser.parseText(y)}parseClose(y){if(this.parser)return this.parser.parseClose(y)||(this.parser=void 0),!0;switch(y){case"styleSheet":{this.model={};const S=(E,I)=>{I.model&&I.model.length&&(this.model[E]=I.model)};if(S("numFmts",this.map.numFmts),S("fonts",this.map.fonts),S("fills",this.map.fills),S("borders",this.map.borders),S("styles",this.map.cellXfs),S("dxfs",this.map.dxfs),this.index={model:[],numFmt:[]},this.model.numFmts){const E=this.index.numFmt;this.model.numFmts.forEach(I=>{E[I.id]=I.formatCode})}return!1}default:return!0}}addStyleModel(y,S){if(!y)return 0;if(this.model.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),this.weakMap&&this.weakMap.has(y))return this.weakMap.get(y);const E={};if(S=S||f.ValueType.Number,y.numFmt)E.numFmtId=this._addNumFmtStr(y.numFmt);else switch(S){case f.ValueType.Number:E.numFmtId=this._addNumFmtStr("General");break;case f.ValueType.Date:E.numFmtId=this._addNumFmtStr("mm-dd-yy");break}y.font&&(E.fontId=this._addFont(y.font)),y.border&&(E.borderId=this._addBorder(y.border)),y.fill&&(E.fillId=this._addFill(y.fill)),y.alignment&&(E.alignment=y.alignment),y.protection&&(E.protection=y.protection);const I=this._addStyle(E);return this.weakMap&&this.weakMap.set(y,I),I}getStyleModel(y){const S=this.model.styles[y];if(!S)return null;let E=this.index.model[y];if(E)return E;if(E=this.index.model[y]={},S.numFmtId){const F=this.index.numFmt[S.numFmtId]||o.getDefaultFmtCode(S.numFmtId);F&&(E.numFmt=F)}function I(F,B,j){if(j||j===0){const X=B[j];X&&(E[F]=X)}}return I("font",this.model.fonts,S.fontId),I("border",this.model.borders,S.borderId),I("fill",this.model.fills,S.fillId),S.alignment&&(E.alignment=S.alignment),S.protection&&(E.protection=S.protection),E}addDxfStyle(y){return y.numFmt&&(y.numFmtId=this._addNumFmtStr(y.numFmt)),this.model.dxfs.push(y),this.model.dxfs.length-1}getDxfStyle(y){return this.model.dxfs[y]}_addStyle(y){const S=this.map.style.toXml(y);let E=this.index.style[S];return E===void 0&&(E=this.index.style[S]=this.model.styles.length,this.model.styles.push(S)),E}_addNumFmtStr(y){let S=o.getDefaultFmtId(y);if(S!==void 0||(S=this.index.numFmt[y],S!==void 0))return S;S=this.index.numFmt[y]=g+this.model.numFmts.length;const E=this.map.numFmt.toXml({id:S,formatCode:y});return this.model.numFmts.push(E),S}_addFont(y){const S=this.map.font.toXml(y);let E=this.index.font[S];return E===void 0&&(E=this.index.font[S]=this.model.fonts.length,this.model.fonts.push(S)),E}_addBorder(y){const S=this.map.border.toXml(y);let E=this.index.border[S];return E===void 0&&(E=this.index.border[S]=this.model.borders.length,this.model.borders.push(S)),E}_addFill(y){const S=this.map.fill.toXml(y);let E=this.index.fill[S];return E===void 0&&(E=this.index.fill[S]=this.model.fills.length,this.model.fills.push(S)),E}}v.STYLESHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac x16r2","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac","xmlns:x16r2":"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"},v.STATIC_XFORMS={cellStyles:new s({tag:"cellStyles",$:{count:1},c:[{tag:"cellStyle",$:{name:"Normal",xfId:0,builtinId:0}}]}),dxfs:new s({tag:"dxfs",$:{count:0}}),tableStyles:new s({tag:"tableStyles",$:{count:0,defaultTableStyle:"TableStyleMedium2",defaultPivotStyle:"PivotStyleLight16"}}),extLst:new s({tag:"extLst",c:[{tag:"ext",$:{uri:"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"},c:[{tag:"x14:slicerStyles",$:{defaultSlicerStyle:"SlicerStyleLight1"}}]},{tag:"ext",$:{uri:"{9260A510-F301-46a8-8635-F512D64BE5F5}","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},c:[{tag:"x15:timelineStyles",$:{defaultTimelineStyle:"TimeSlicerStyleLight1"}}]}]})};class h extends v{constructor(){super(),this.model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}],borders:[{}],fills:[{type:"pattern",pattern:"none"},{type:"pattern",pattern:"gray125"}]}}parseStream(y){return y.autodrain(),Promise.resolve()}addStyleModel(y,S){switch(S){case f.ValueType.Date:return this.dateStyleId;default:return 0}}get dateStyleId(){if(!this._dateStyleId){const y={numFmtId:o.getDefaultFmtId("mm-dd-yy")};this._dateStyleId=this.model.styles.length,this.model.styles.push(y)}return this._dateStyleId}getStyleModel(){return{}}}v.Mock=h,d.exports=v},{"../../../doc/enums":7,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./border-xform":127,"./dxf-xform":129,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./style-xform":134}],136:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.model=s}get tag(){return"u"}render(s,t){if(t=t||this.model,t===!0)s.leafNode("u");else{const n=c.Attributes[t];n&&s.leafNode("u",n)}}parseOpen(s){s.name==="u"&&(this.model=s.attributes.val||!0)}parseText(){}parseClose(){return!1}}c.Attributes={single:{},double:{val:"double"},singleAccounting:{val:"singleAccounting"},doubleAccounting:{val:"doubleAccounting"}},d.exports=c},{"../base-xform":32}],137:[function(e,d,m){const f=e("../base-xform"),c=e("./filter-column-xform");class u extends f{constructor(){super(),this.map={filterColumn:new c}}get tag(){return"autoFilter"}prepare(t){t.columns.forEach((n,r)=>{this.map.filterColumn.prepare(n,{index:r})})}render(t,n){return t.openNode(this.tag,{ref:n.autoFilterRef}),n.columns.forEach(r=>{this.map.filterColumn.render(t,r)}),t.closeNode(),!0}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case this.tag:return this.model={autoFilterRef:t.attributes.ref,columns:[]},!0;default:if(this.parser=this.map[t.name],this.parser)return this.parseOpen(t),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(t)}`)}}parseText(t){this.parser&&this.parser.parseText(t)}parseClose(t){if(this.parser)return this.parser.parseClose(t)||(this.model.columns.push(this.parser.model),this.parser=void 0),!0;switch(t){case this.tag:return!1;default:throw new Error(`Unexpected xml node in parseClose: ${t}`)}}}d.exports=u},{"../base-xform":32,"./filter-column-xform":139}],138:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"customFilter"}render(s,t){s.leafNode(this.tag,{val:t.val,operator:t.operator})}parseOpen(s){return s.name===this.tag?(this.model={val:s.attributes.val,operator:s.attributes.operator},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],139:[function(e,d,m){const f=e("../base-xform"),c=e("../list-xform"),u=e("./custom-filter-xform"),s=e("./filter-xform");class t extends f{constructor(){super(),this.map={customFilters:new c({tag:"customFilters",count:!1,empty:!0,childXform:new u}),filters:new c({tag:"filters",count:!1,empty:!0,childXform:new s})}}get tag(){return"filterColumn"}prepare(r,i){r.colId=i.index.toString()}render(r,i){return i.customFilters?(r.openNode(this.tag,{colId:i.colId,hiddenButton:i.filterButton?"0":"1"}),this.map.customFilters.render(r,i.customFilters),r.closeNode(),!0):(r.leafNode(this.tag,{colId:i.colId,hiddenButton:i.filterButton?"0":"1"}),!0)}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;const{attributes:i}=r;switch(r.name){case this.tag:return this.model={filterButton:i.hiddenButton==="0"},!0;default:if(this.parser=this.map[r.name],this.parser)return this.parseOpen(r),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(r)}`)}}parseText(){}parseClose(r){if(this.parser)return this.parser.parseClose(r)||(this.parser=void 0),!0;switch(r){case this.tag:return this.model.customFilters=this.map.customFilters.model,!1;default:return!0}}}d.exports=t},{"../base-xform":32,"../list-xform":71,"./custom-filter-xform":138,"./filter-xform":140}],140:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"filter"}render(s,t){s.leafNode(this.tag,{val:t.val})}parseOpen(s){return s.name===this.tag?(this.model={val:s.attributes.val},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],141:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"tableColumn"}prepare(s,t){s.id=t.index+1}render(s,t){return s.leafNode(this.tag,{id:t.id.toString(),name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId}),!0}parseOpen(s){if(s.name===this.tag){const{attributes:t}=s;return this.model={name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId},!0}return!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],142:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"tableStyleInfo"}render(s,t){return s.leafNode(this.tag,{name:t.theme?t.theme:void 0,showFirstColumn:t.showFirstColumn?"1":"0",showLastColumn:t.showLastColumn?"1":"0",showRowStripes:t.showRowStripes?"1":"0",showColumnStripes:t.showColumnStripes?"1":"0"}),!0}parseOpen(s){if(s.name===this.tag){const{attributes:t}=s;return this.model={theme:t.name?t.name:null,showFirstColumn:t.showFirstColumn==="1",showLastColumn:t.showLastColumn==="1",showRowStripes:t.showRowStripes==="1",showColumnStripes:t.showColumnStripes==="1"},!0}return!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],143:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("../list-xform"),s=e("./auto-filter-xform"),t=e("./table-column-xform"),n=e("./table-style-info-xform");class r extends c{constructor(){super(),this.map={autoFilter:new s,tableColumns:new u({tag:"tableColumns",count:!0,empty:!0,childXform:new t}),tableStyleInfo:new n}}prepare(o,l){this.map.autoFilter.prepare(o),this.map.tableColumns.prepare(o.columns,l)}get tag(){return"table"}render(o,l){o.openXml(f.StdDocAttributes),o.openNode(this.tag,{...r.TABLE_ATTRIBUTES,id:l.id,name:l.name,displayName:l.displayName||l.name,ref:l.tableRef,totalsRowCount:l.totalsRow?"1":void 0,totalsRowShown:l.totalsRow?void 0:"1",headerRowCount:l.headerRow?"1":"0"}),this.map.autoFilter.render(o,l),this.map.tableColumns.render(o,l.columns),this.map.tableStyleInfo.render(o,l.style),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;const{name:l,attributes:a}=o;switch(l){case this.tag:this.reset(),this.model={name:a.name,displayName:a.displayName||a.name,tableRef:a.ref,totalsRow:a.totalsRowCount==="1",headerRow:a.headerRowCount==="1"};break;default:this.parser=this.map[o.name],this.parser&&this.parser.parseOpen(o);break}return!0}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){if(this.parser)return this.parser.parseClose(o)||(this.parser=void 0),!0;switch(o){case this.tag:return this.model.columns=this.map.tableColumns.model,this.map.autoFilter.model&&(this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef,this.map.autoFilter.model.columns.forEach((l,a)=>{this.model.columns[a].filterButton=l.filterButton})),this.model.style=this.map.tableStyleInfo.model,!1;default:return!0}}reconcile(o,l){o.columns.forEach(a=>{a.dxfId!==void 0&&(a.style=l.styles.getDxfStyle(a.dxfId))})}}r.TABLE_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"xr xr3","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision","xmlns:xr3":"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3"},d.exports=r},{"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":137,"./table-column-xform":141,"./table-style-info-xform":142}],144:[function(e,d,m){(function(f,c){(function(){const u=e("fs"),s=e("jszip"),{PassThrough:t}=e("readable-stream"),n=e("../utils/zip-stream"),r=e("../utils/stream-buf"),i=e("../utils/utils"),o=e("../utils/xml-stream"),{bufferToString:l}=e("../utils/browser-buffer-decode"),a=e("./xform/style/styles-xform"),g=e("./xform/core/core-xform"),v=e("./xform/strings/shared-strings-xform"),h=e("./xform/core/relationships-xform"),w=e("./xform/core/content-types-xform"),y=e("./xform/core/app-xform"),S=e("./xform/book/workbook-xform"),E=e("./xform/sheet/worksheet-xform"),I=e("./xform/drawing/drawing-xform"),F=e("./xform/table/table-xform"),B=e("./xform/comment/comments-xform"),j=e("./xform/comment/vml-notes-xform"),X=e("./xml/theme1");function G(J,H){return new Promise((M,T)=>{u.readFile(J,H,(_,A)=>{_?T(_):M(A)})})}class V{constructor(H){this.workbook=H}async readFile(H,M){if(!await i.fs.exists(H))throw new Error(`File not found: ${H}`);const T=u.createReadStream(H);try{const _=await this.read(T,M);return T.close(),_}catch(_){throw T.close(),_}}parseRels(H){return new h().parseStream(H)}parseWorkbook(H){return new S().parseStream(H)}parseSharedStrings(H){return new v().parseStream(H)}reconcile(H,M){const T=new S,_=new E(M),A=new I,P=new F;T.reconcile(H);const L={media:H.media,mediaIndex:H.mediaIndex};Object.keys(H.drawings).forEach(k=>{const C=H.drawings[k],O=H.drawingRels[k];O&&(L.rels=O.reduce((W,ne)=>(W[ne.Id]=ne,W),{}),(C.anchors||[]).forEach(W=>{const ne=W.picture&&W.picture.hyperlinks;ne&&L.rels[ne.rId]&&(ne.hyperlink=L.rels[ne.rId].Target,delete ne.rId)}),A.reconcile(C,L))});const $={styles:H.styles};Object.values(H.tables).forEach(k=>{P.reconcile(k,$)});const R={styles:H.styles,sharedStrings:H.sharedStrings,media:H.media,mediaIndex:H.mediaIndex,date1904:H.properties&&H.properties.date1904,drawings:H.drawings,comments:H.comments,tables:H.tables,vmlDrawings:H.vmlDrawings};H.worksheets.forEach(k=>{k.relationships=H.worksheetRels[k.sheetNo],_.reconcile(k,R)}),delete H.worksheetHash,delete H.worksheetRels,delete H.globalRels,delete H.sharedStrings,delete H.workbookRels,delete H.sheetDefs,delete H.styles,delete H.mediaIndex,delete H.drawings,delete H.drawingRels,delete H.vmlDrawings}async _processWorksheetEntry(H,M,T,_,A){const L=await new E(_).parseStream(H);L.sheetNo=T,M.worksheetHash[A]=L,M.worksheets.push(L)}async _processCommentEntry(H,M,T){const A=await new B().parseStream(H);M.comments[`../${T}.xml`]=A}async _processTableEntry(H,M,T){const A=await new F().parseStream(H);M.tables[`../tables/${T}.xml`]=A}async _processWorksheetRelsEntry(H,M,T){const A=await new h().parseStream(H);M.worksheetRels[T]=A}async _processMediaEntry(H,M,T){const _=T.lastIndexOf(".");if(_>=1){const A=T.substr(_+1),P=T.substr(0,_);await new Promise((L,$)=>{const R=new r;R.on("finish",()=>{M.mediaIndex[T]=M.media.length,M.mediaIndex[P]=M.media.length;const k={type:"image",name:P,extension:A,buffer:R.toBuffer()};M.media.push(k),L()}),H.on("error",k=>{$(k)}),H.pipe(R)})}}async _processDrawingEntry(H,M,T){const A=await new I().parseStream(H);M.drawings[T]=A}async _processDrawingRelsEntry(H,M,T){const A=await new h().parseStream(H);M.drawingRels[T]=A}async _processVmlDrawingEntry(H,M,T){const A=await new j().parseStream(H);M.vmlDrawings[`../drawings/${T}.vml`]=A}async _processThemeEntry(H,M,T){await new Promise((_,A)=>{const P=new r;H.on("error",A),P.on("error",A),P.on("finish",()=>{M.themes[T]=P.read().toString(),_()}),H.pipe(P)})}createInputStream(){throw new Error("`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}async read(H,M){!H[Symbol.asyncIterator]&&H.pipe&&(H=H.pipe(new t));const T=[];for await(const _ of H)T.push(_);return this.load(c.concat(T),M)}async load(H,M){let T;M&&M.base64?T=c.from(H.toString(),"base64"):T=H;const _={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},A=await s.loadAsync(T);for(const P of Object.values(A.files))if(!P.dir){let L=P.name;L[0]==="/"&&(L=L.substr(1));let $;if(L.match(/xl\/media\//)||L.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/))$=new t,$.write(await P.async("nodebuffer"));else{$=new t({writableObjectMode:!0,readableObjectMode:!0});let R;f.browser?R=l(await P.async("nodebuffer")):R=await P.async("string");const k=16*1024;for(let C=0;C{if(T.type==="image"){const _=`xl/media/${T.name}.${T.extension}`;if(T.filename){const A=await G(T.filename);return H.append(A,{name:_})}if(T.buffer)return H.append(T.buffer,{name:_});if(T.base64){const A=T.base64,P=A.substring(A.indexOf(",")+1);return H.append(P,{name:_,base64:!0})}}throw new Error("Unsupported media")}))}addDrawings(H,M){const T=new I,_=new h;M.worksheets.forEach(A=>{const{drawing:P}=A;if(P){T.prepare(P,{});let L=T.toXml(P);H.append(L,{name:`xl/drawings/${P.name}.xml`}),L=_.toXml(P.rels),H.append(L,{name:`xl/drawings/_rels/${P.name}.xml.rels`})}})}addTables(H,M){const T=new F;M.worksheets.forEach(_=>{const{tables:A}=_;A.forEach(P=>{T.prepare(P,{});const L=T.toXml(P);H.append(L,{name:`xl/tables/${P.target}`})})})}async addContentTypes(H,M){const _=new w().toXml(M);H.append(_,{name:"[Content_Types].xml"})}async addApp(H,M){const _=new y().toXml(M);H.append(_,{name:"docProps/app.xml"})}async addCore(H,M){const T=new g;H.append(T.toXml(M),{name:"docProps/core.xml"})}async addThemes(H,M){const T=M.themes||{theme1:X};Object.keys(T).forEach(_=>{const A=T[_],P=`xl/theme/${_}.xml`;H.append(A,{name:P})})}async addOfficeRels(H){const T=new h().toXml([{Id:"rId1",Type:V.RelType.OfficeDocument,Target:"xl/workbook.xml"},{Id:"rId2",Type:V.RelType.CoreProperties,Target:"docProps/core.xml"},{Id:"rId3",Type:V.RelType.ExtenderProperties,Target:"docProps/app.xml"}]);H.append(T,{name:"_rels/.rels"})}async addWorkbookRels(H,M){let T=1;const _=[{Id:`rId${T++}`,Type:V.RelType.Styles,Target:"styles.xml"},{Id:`rId${T++}`,Type:V.RelType.Theme,Target:"theme/theme1.xml"}];M.sharedStrings.count&&_.push({Id:`rId${T++}`,Type:V.RelType.SharedStrings,Target:"sharedStrings.xml"}),M.worksheets.forEach(L=>{L.rId=`rId${T++}`,_.push({Id:L.rId,Type:V.RelType.Worksheet,Target:`worksheets/sheet${L.id}.xml`})});const P=new h().toXml(_);H.append(P,{name:"xl/_rels/workbook.xml.rels"})}async addSharedStrings(H,M){M.sharedStrings&&M.sharedStrings.count&&H.append(M.sharedStrings.xml,{name:"xl/sharedStrings.xml"})}async addStyles(H,M){const{xml:T}=M.styles;T&&H.append(T,{name:"xl/styles.xml"})}async addWorkbook(H,M){const T=new S;H.append(T.toXml(M),{name:"xl/workbook.xml"})}async addWorksheets(H,M){const T=new E,_=new h,A=new B,P=new j;M.worksheets.forEach(L=>{let $=new o;T.render($,L),H.append($.xml,{name:`xl/worksheets/sheet${L.id}.xml`}),L.rels&&L.rels.length&&($=new o,_.render($,L.rels),H.append($.xml,{name:`xl/worksheets/_rels/sheet${L.id}.xml.rels`})),L.comments.length>0&&($=new o,A.render($,L),H.append($.xml,{name:`xl/comments${L.id}.xml`}),$=new o,P.render($,L),H.append($.xml,{name:`xl/drawings/vmlDrawing${L.id}.vml`}))})}_finalize(H){return new Promise((M,T)=>{H.on("finish",()=>{M(this)}),H.on("error",T),H.finalize()})}prepareModel(H,M){H.creator=H.creator||"ExcelJS",H.lastModifiedBy=H.lastModifiedBy||"ExcelJS",H.created=H.created||new Date,H.modified=H.modified||new Date,H.useSharedStrings=M.useSharedStrings!==void 0?M.useSharedStrings:!0,H.useStyles=M.useStyles!==void 0?M.useStyles:!0,H.sharedStrings=new v,H.styles=H.useStyles?new a(!0):new a.Mock;const T=new S,_=new E;T.prepare(H);const A={sharedStrings:H.sharedStrings,styles:H.styles,date1904:H.properties.date1904,drawingsCount:0,media:H.media};A.drawings=H.drawings=[],A.commentRefs=H.commentRefs=[];let P=0;H.tables=[],H.worksheets.forEach(L=>{L.tables.forEach($=>{P++,$.target=`table${P}.xml`,$.id=P,H.tables.push($)}),_.prepare(L,A)})}async write(H,M){M=M||{};const{model:T}=this.workbook,_=new n.ZipWriter(M.zip);return _.pipe(H),this.prepareModel(T,M),await this.addContentTypes(_,T),await this.addOfficeRels(_,T),await this.addWorkbookRels(_,T),await this.addWorksheets(_,T),await this.addSharedStrings(_,T),await this.addDrawings(_,T),await this.addTables(_,T),await Promise.all([this.addThemes(_,T),this.addStyles(_,T)]),await this.addMedia(_,T),await Promise.all([this.addApp(_,T),this.addCore(_,T)]),await this.addWorkbook(_,T),this._finalize(_)}writeFile(H,M){const T=u.createWriteStream(H);return new Promise((_,A)=>{T.on("finish",()=>{_()}),T.on("error",P=>{A(P)}),this.write(T,M).then(()=>{T.end()}).catch(P=>{A(P)})})}async writeBuffer(H){const M=new r;return await this.write(M,H),M.read()}}V.RelType=e("./rel-type"),d.exports=V}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":24,"../utils/utils":27,"../utils/xml-stream":28,"../utils/zip-stream":29,"./rel-type":31,"./xform/book/workbook-xform":38,"./xform/comment/comments-xform":40,"./xform/comment/vml-notes-xform":45,"./xform/core/app-xform":51,"./xform/core/content-types-xform":52,"./xform/core/core-xform":53,"./xform/core/relationships-xform":55,"./xform/drawing/drawing-xform":62,"./xform/sheet/worksheet-xform":115,"./xform/strings/shared-strings-xform":124,"./xform/style/styles-xform":135,"./xform/table/table-xform":143,"./xml/theme1":145,_process:467,buffer:220,fs:216,jszip:441,"readable-stream":491}],145:[function(e,d,m){d.exports=` + `},{}],146:[function(e,d,m){(function(f){(function(){Object.defineProperty(m,"__esModule",{value:!0}),m.CsvFormatterStream=void 0;const c=e("stream"),u=e("./formatter");class s extends c.Transform{constructor(n){super({writableObjectMode:n.objectMode}),this.hasWrittenBOM=!1,this.formatterOptions=n,this.rowFormatter=new u.RowFormatter(n),this.hasWrittenBOM=!n.writeBOM}transform(n){return this.rowFormatter.rowTransform=n,this}_transform(n,r,i){let o=!1;try{this.hasWrittenBOM||(this.push(this.formatterOptions.BOM),this.hasWrittenBOM=!0),this.rowFormatter.format(n,(l,a)=>l?(o=!0,i(l)):(a&&a.forEach(g=>{this.push(f.from(g,"utf8"))}),o=!0,i()))}catch(l){if(o)throw l;i(l)}}_flush(n){this.rowFormatter.finish((r,i)=>r?n(r):(i&&i.forEach(o=>{this.push(f.from(o,"utf8"))}),n()))}}m.CsvFormatterStream=s}).call(this)}).call(this,e("buffer").Buffer)},{"./formatter":150,buffer:220,stream:505}],147:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.FormatterOptions=void 0;class f{constructor(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};var s;this.objectMode=!0,this.delimiter=",",this.rowDelimiter=` +`,this.quote='"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.writeBOM=!1,this.BOM="\uFEFF",this.alwaysWriteHeaders=!1,Object.assign(this,u||{}),typeof(u==null?void 0:u.quoteHeaders)>"u"&&(this.quoteHeaders=this.quoteColumns),(u==null?void 0:u.quote)===!0?this.quote='"':(u==null?void 0:u.quote)===!1&&(this.quote=""),typeof(u==null?void 0:u.escape)!="string"&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers&&((s=u.writeHeaders)!==null&&s!==void 0?s:!0),this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=`${this.escape}${this.quote}`}}m.FormatterOptions=f},{}],148:[function(e,d,m){var f=function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(m,"__esModule",{value:!0}),m.FieldFormatter=void 0;const c=f(e("lodash.isboolean")),u=f(e("lodash.isnil")),s=f(e("lodash.escaperegexp"));class t{constructor(r){this._headers=null,this.formatterOptions=r,r.headers!==null&&(this.headers=r.headers),this.REPLACE_REGEXP=new RegExp(r.quote,"g");const i=`[${r.delimiter}${s.default(r.rowDelimiter)}|\r| +]`;this.ESCAPE_REGEXP=new RegExp(i)}set headers(r){this._headers=r}shouldQuote(r,i){const o=i?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;return c.default(o)?o:Array.isArray(o)?o[r]:this._headers!==null?o[this._headers[r]]:!1}format(r,i,o){const l=`${u.default(r)?"":r}`.replace(/\0/g,""),{formatterOptions:a}=this;return a.quote!==""&&l.indexOf(a.quote)!==-1?this.quoteField(l.replace(this.REPLACE_REGEXP,a.escapedQuote)):l.search(this.ESCAPE_REGEXP)!==-1||this.shouldQuote(i,o)?this.quoteField(l):l}quoteField(r){const{quote:i}=this.formatterOptions;return`${i}${r}${i}`}}m.FieldFormatter=t},{"lodash.escaperegexp":442,"lodash.isboolean":444,"lodash.isnil":447}],149:[function(e,d,m){var f=function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(m,"__esModule",{value:!0}),m.RowFormatter=void 0;const c=f(e("lodash.isfunction")),u=f(e("lodash.isequal")),s=e("./FieldFormatter"),t=e("../types");class n{constructor(i){this.rowCount=0,this.formatterOptions=i,this.fieldFormatter=new s.FieldFormatter(i),this.headers=i.headers,this.shouldWriteHeaders=i.shouldWriteHeaders,this.hasWrittenHeaders=!1,this.headers!==null&&(this.fieldFormatter.headers=this.headers),i.transform&&(this.rowTransform=i.transform)}static isRowHashArray(i){return Array.isArray(i)?Array.isArray(i[0])&&i[0].length===2:!1}static isRowArray(i){return Array.isArray(i)&&!this.isRowHashArray(i)}static gatherHeaders(i){return n.isRowHashArray(i)?i.map(o=>o[0]):Array.isArray(i)?i:Object.keys(i)}static createTransform(i){return t.isSyncTransform(i)?(o,l)=>{let a=null;try{a=i(o)}catch(g){return l(g)}return l(null,a)}:(o,l)=>{i(o,l)}}set rowTransform(i){if(!c.default(i))throw new TypeError("The transform should be a function");this._rowTransform=n.createTransform(i)}format(i,o){this.callTransformer(i,(l,a)=>{if(l)return o(l);if(!i)return o(null);const g=[];if(a){const{shouldFormatColumns:v,headers:h}=this.checkHeaders(a);if(this.shouldWriteHeaders&&h&&!this.hasWrittenHeaders&&(g.push(this.formatColumns(h,!0)),this.hasWrittenHeaders=!0),v){const w=this.gatherColumns(a);g.push(this.formatColumns(w,!1))}}return o(null,g)})}finish(i){const o=[];if(this.formatterOptions.alwaysWriteHeaders&&this.rowCount===0){if(!this.headers)return i(new Error("`alwaysWriteHeaders` option is set to true but `headers` option not provided."));o.push(this.formatColumns(this.headers,!0))}return this.formatterOptions.includeEndRowDelimiter&&o.push(this.formatterOptions.rowDelimiter),i(null,o)}checkHeaders(i){if(this.headers)return{shouldFormatColumns:!0,headers:this.headers};const o=n.gatherHeaders(i);return this.headers=o,this.fieldFormatter.headers=o,this.shouldWriteHeaders?{shouldFormatColumns:!u.default(o,i),headers:o}:{shouldFormatColumns:!0,headers:null}}gatherColumns(i){if(this.headers===null)throw new Error("Headers is currently null");return Array.isArray(i)?n.isRowHashArray(i)?this.headers.map((o,l)=>{const a=i[l];return a?a[1]:""}):n.isRowArray(i)&&!this.shouldWriteHeaders?i:this.headers.map((o,l)=>i[l]):this.headers.map(o=>i[o])}callTransformer(i,o){return this._rowTransform?this._rowTransform(i,o):o(null,i)}formatColumns(i,o){const l=i.map((g,v)=>this.fieldFormatter.format(g,v,o)).join(this.formatterOptions.delimiter),{rowCount:a}=this;return this.rowCount+=1,a?[this.formatterOptions.rowDelimiter,l].join(""):l}}m.RowFormatter=n},{"../types":152,"./FieldFormatter":148,"lodash.isequal":445,"lodash.isfunction":446}],150:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.FieldFormatter=m.RowFormatter=void 0;var f=e("./RowFormatter");Object.defineProperty(m,"RowFormatter",{enumerable:!0,get:function(){return f.RowFormatter}});var c=e("./FieldFormatter");Object.defineProperty(m,"FieldFormatter",{enumerable:!0,get:function(){return c.FieldFormatter}})},{"./FieldFormatter":148,"./RowFormatter":149}],151:[function(e,d,m){(function(f){(function(){var c=Object.create?function(v,h,w,y){y===void 0&&(y=w),Object.defineProperty(v,y,{enumerable:!0,get:function(){return h[w]}})}:function(v,h,w,y){y===void 0&&(y=w),v[y]=h[w]},u=Object.create?function(v,h){Object.defineProperty(v,"default",{enumerable:!0,value:h})}:function(v,h){v.default=h},s=function(v){if(v&&v.__esModule)return v;var h={};if(v!=null)for(var w in v)w!=="default"&&Object.prototype.hasOwnProperty.call(v,w)&&c(h,v,w);return u(h,v),h},t=function(v,h){for(var w in v)w!=="default"&&!Object.prototype.hasOwnProperty.call(h,w)&&c(h,v,w)};Object.defineProperty(m,"__esModule",{value:!0}),m.writeToPath=m.writeToString=m.writeToBuffer=m.writeToStream=m.write=m.format=m.FormatterOptions=m.CsvFormatterStream=void 0;const n=e("util"),r=e("stream"),i=s(e("fs")),o=e("./FormatterOptions"),l=e("./CsvFormatterStream");t(e("./types"),m);var a=e("./CsvFormatterStream");Object.defineProperty(m,"CsvFormatterStream",{enumerable:!0,get:function(){return a.CsvFormatterStream}});var g=e("./FormatterOptions");Object.defineProperty(m,"FormatterOptions",{enumerable:!0,get:function(){return g.FormatterOptions}}),m.format=v=>new l.CsvFormatterStream(new o.FormatterOptions(v)),m.write=(v,h)=>{const w=m.format(h),y=n.promisify((S,E)=>{w.write(S,void 0,E)});return v.reduce((S,E)=>S.then(()=>y(E)),Promise.resolve()).then(()=>w.end()).catch(S=>{w.emit("error",S)}),w},m.writeToStream=(v,h,w)=>m.write(h,w).pipe(v),m.writeToBuffer=function(v){let h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const w=[],y=new r.Writable({write(S,E,I){w.push(S),I()}});return new Promise((S,E)=>{y.on("error",E).on("finish",()=>S(f.concat(w))),m.write(v,h).pipe(y)})},m.writeToString=(v,h)=>m.writeToBuffer(v,h).then(w=>w.toString()),m.writeToPath=(v,h,w)=>{const y=i.createWriteStream(v,{encoding:"utf8"});return m.write(h,w).pipe(y)}}).call(this)}).call(this,e("buffer").Buffer)},{"./CsvFormatterStream":146,"./FormatterOptions":147,"./types":152,buffer:220,fs:216,stream:505,util:527}],152:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.isSyncTransform=void 0,m.isSyncTransform=f=>f.length===1},{}],153:[function(e,d,m){(function(f){(function(){Object.defineProperty(m,"__esModule",{value:!0}),m.CsvParserStream=void 0;const c=e("string_decoder"),u=e("stream"),s=e("./transforms"),t=e("./parser");class n extends u.Transform{constructor(i){super({objectMode:i.objectMode}),this.lines="",this.rowCount=0,this.parsedRowCount=0,this.parsedLineCount=0,this.endEmitted=!1,this.headersEmitted=!1,this.parserOptions=i,this.parser=new t.Parser(i),this.headerTransformer=new s.HeaderTransformer(i),this.decoder=new c.StringDecoder(i.encoding),this.rowTransformerValidator=new s.RowTransformerValidator}get hasHitRowLimit(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}get shouldEmitRows(){return this.parsedRowCount>this.parserOptions.skipRows}get shouldSkipLine(){return this.parsedLineCount<=this.parserOptions.skipLines}transform(i){return this.rowTransformerValidator.rowTransform=i,this}validate(i){return this.rowTransformerValidator.rowValidator=i,this}emit(i){if(i==="end")return this.endEmitted||(this.endEmitted=!0,super.emit("end",this.rowCount)),!1;for(var o=arguments.length,l=new Array(o>1?o-1:0),a=1;a{const v=y=>{if(y)return o(y);if(g%100===0){f(()=>a(g+1));return}return a(g+1)};if(this.checkAndEmitHeaders(),g>=l||this.hasHitRowLimit)return o();if(this.parsedLineCount+=1,this.shouldSkipLine)return v();const h=i[g];this.rowCount+=1,this.parsedRowCount+=1;const w=this.rowCount;return this.transformRow(h,(y,S)=>{if(y)return this.rowCount-=1,v(y);if(!S)return v(new Error("expected transform result"));if(!S.isValid)this.emit("data-invalid",S.row,w,S.reason);else if(S.row)return this.pushRow(S.row,v);return v()})};a(0)}transformRow(i,o){try{this.headerTransformer.transform(i,(l,a)=>l?o(l):a?a.isValid?a.row?this.shouldEmitRows?this.rowTransformerValidator.transformAndValidate(a.row,o):this.skipRow(o):(this.rowCount-=1,this.parsedRowCount-=1,o(null,{row:null,isValid:!0})):this.shouldEmitRows?o(null,{isValid:!1,row:i}):this.skipRow(o):o(new Error("Expected result from header transform")))}catch(l){o(l)}}checkAndEmitHeaders(){!this.headersEmitted&&this.headerTransformer.headers&&(this.headersEmitted=!0,this.emit("headers",this.headerTransformer.headers))}skipRow(i){return this.rowCount-=1,i(null,{row:null,isValid:!0})}pushRow(i,o){try{this.parserOptions.objectMode?this.push(i):this.push(JSON.stringify(i)),o()}catch(l){o(l)}}static wrapDoneCallback(i){let o=!1;return function(l){if(l){if(o)throw l;o=!0,i(l);return}for(var a=arguments.length,g=new Array(a>1?a-1:0),v=1;v1)throw new Error("delimiter option must be one character long");this.escapedDelimiter=c.default(this.delimiter),this.escapeChar=(r=this.escape)!==null&&r!==void 0?r:this.quote,this.supportsComments=!u.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`),this.maxRows>0&&(this.limitRows=!0)}}m.ParserOptions=s},{"lodash.escaperegexp":442,"lodash.isnil":447}],155:[function(e,d,m){var f=Object.create?function(a,g,v,h){h===void 0&&(h=v),Object.defineProperty(a,h,{enumerable:!0,get:function(){return g[v]}})}:function(a,g,v,h){h===void 0&&(h=v),a[h]=g[v]},c=Object.create?function(a,g){Object.defineProperty(a,"default",{enumerable:!0,value:g})}:function(a,g){a.default=g},u=function(a){if(a&&a.__esModule)return a;var g={};if(a!=null)for(var v in a)v!=="default"&&Object.prototype.hasOwnProperty.call(a,v)&&f(g,a,v);return c(g,a),g},s=function(a,g){for(var v in a)v!=="default"&&!Object.prototype.hasOwnProperty.call(g,v)&&f(g,a,v)};Object.defineProperty(m,"__esModule",{value:!0}),m.parseString=m.parseFile=m.parseStream=m.parse=m.ParserOptions=m.CsvParserStream=void 0;const t=u(e("fs")),n=e("stream"),r=e("./ParserOptions"),i=e("./CsvParserStream");s(e("./types"),m);var o=e("./CsvParserStream");Object.defineProperty(m,"CsvParserStream",{enumerable:!0,get:function(){return o.CsvParserStream}});var l=e("./ParserOptions");Object.defineProperty(m,"ParserOptions",{enumerable:!0,get:function(){return l.ParserOptions}}),m.parse=a=>new i.CsvParserStream(new r.ParserOptions(a)),m.parseStream=(a,g)=>a.pipe(new i.CsvParserStream(new r.ParserOptions(g))),m.parseFile=function(a){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return t.createReadStream(a).pipe(new i.CsvParserStream(new r.ParserOptions(g)))},m.parseString=(a,g)=>{const v=new n.Readable;return v.push(a),v.push(null),v.pipe(new i.CsvParserStream(new r.ParserOptions(g)))}},{"./CsvParserStream":153,"./ParserOptions":154,"./types":169,fs:216,stream:505}],156:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.Parser=void 0;const f=e("./Scanner"),c=e("./RowParser"),u=e("./Token");class s{constructor(n){this.parserOptions=n,this.rowParser=new c.RowParser(this.parserOptions)}static removeBOM(n){return n&&n.charCodeAt(0)===65279?n.slice(1):n}parse(n,r){const i=new f.Scanner({line:s.removeBOM(n),parserOptions:this.parserOptions,hasMoreData:r});return this.parserOptions.supportsComments?this.parseWithComments(i):this.parseWithoutComments(i)}parseWithoutComments(n){const r=[];let i=!0;for(;i;)i=this.parseRow(n,r);return{line:n.line,rows:r}}parseWithComments(n){const{parserOptions:r}=this,i=[];for(let o=n.nextCharacterToken;o!==null;o=n.nextCharacterToken)if(u.Token.isTokenComment(o,r)){if(n.advancePastLine()===null)return{line:n.lineFromCursor,rows:i};if(!n.hasMoreCharacters)return{line:n.lineFromCursor,rows:i};n.truncateToCursor()}else if(!this.parseRow(n,i))break;return{line:n.line,rows:i}}parseRow(n,r){if(!n.nextNonSpaceToken)return!1;const o=this.rowParser.parse(n);return o===null?!1:(this.parserOptions.ignoreEmpty&&c.RowParser.isEmptyRow(o)||r.push(o),!0)}}m.Parser=s},{"./RowParser":157,"./Scanner":158,"./Token":159}],157:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.RowParser=void 0;const f=e("./column"),c=e("./Token"),u="";class s{constructor(n){this.parserOptions=n,this.columnParser=new f.ColumnParser(n)}static isEmptyRow(n){return n.join(u).replace(/\s+/g,u)===u}parse(n){const{parserOptions:r}=this,{hasMoreData:i}=n,o=n,l=[];let a=this.getStartToken(o,l);for(;a;){if(c.Token.isTokenRowDelimiter(a))return o.advancePastToken(a),!o.hasMoreCharacters&&c.Token.isTokenCarriageReturn(a,r)&&i?null:(o.truncateToCursor(),l);if(!this.shouldSkipColumnParse(o,a,l)){const g=this.columnParser.parse(o);if(g===null)return null;l.push(g)}a=o.nextNonSpaceToken}return i?null:(o.truncateToCursor(),l)}getStartToken(n,r){const i=n.nextNonSpaceToken;return i!==null&&c.Token.isTokenDelimiter(i,this.parserOptions)?(r.push(""),n.nextNonSpaceToken):i}shouldSkipColumnParse(n,r,i){const{parserOptions:o}=this;if(c.Token.isTokenDelimiter(r,o)){n.advancePastToken(r);const l=n.nextCharacterToken;if(!n.hasMoreCharacters||l!==null&&c.Token.isTokenRowDelimiter(l)||l!==null&&c.Token.isTokenDelimiter(l,o))return i.push(""),!0}return!1}}m.RowParser=s},{"./Token":159,"./column":164}],158:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.Scanner=void 0;const f=e("./Token"),c=/((?:\r\n)|\n|\r)/;class u{constructor(t){this.cursor=0,this.line=t.line,this.lineLength=this.line.length,this.parserOptions=t.parserOptions,this.hasMoreData=t.hasMoreData,this.cursor=t.cursor||0}get hasMoreCharacters(){return this.lineLength>this.cursor}get nextNonSpaceToken(){const{lineFromCursor:t}=this,n=this.parserOptions.NEXT_TOKEN_REGEXP;if(t.search(n)===-1)return null;const r=n.exec(t);if(r==null)return null;const i=r[1],o=this.cursor+(r.index||0);return new f.Token({token:i,startCursor:o,endCursor:o+i.length-1})}get nextCharacterToken(){const{cursor:t,lineLength:n}=this;return n<=t?null:new f.Token({token:this.line[t],startCursor:t,endCursor:t})}get lineFromCursor(){return this.line.substr(this.cursor)}advancePastLine(){const t=c.exec(this.lineFromCursor);return t?(this.cursor+=(t.index||0)+t[0].length,this):this.hasMoreData?null:(this.cursor=this.lineLength,this)}advanceTo(t){return this.cursor=t,this}advanceToToken(t){return this.cursor=t.startCursor,this}advancePastToken(t){return this.cursor=t.endCursor+1,this}truncateToCursor(){return this.line=this.lineFromCursor,this.lineLength=this.line.length,this.cursor=0,this}}m.Scanner=u},{"./Token":159}],159:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.Token=void 0;class f{constructor(u){this.token=u.token,this.startCursor=u.startCursor,this.endCursor=u.endCursor}static isTokenRowDelimiter(u){const s=u.token;return s==="\r"||s===` +`||s===`\r +`}static isTokenCarriageReturn(u,s){return u.token===s.carriageReturn}static isTokenComment(u,s){return s.supportsComments&&!!u&&u.token===s.comment}static isTokenEscapeCharacter(u,s){return u.token===s.escapeChar}static isTokenQuote(u,s){return u.token===s.quote}static isTokenDelimiter(u,s){return u.token===s.delimiter}}m.Token=f},{}],160:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.ColumnFormatter=void 0;class f{constructor(u){u.trim?this.format=s=>s.trim():u.ltrim?this.format=s=>s.trimLeft():u.rtrim?this.format=s=>s.trimRight():this.format=s=>s}}m.ColumnFormatter=f},{}],161:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.ColumnParser=void 0;const f=e("./NonQuotedColumnParser"),c=e("./QuotedColumnParser"),u=e("../Token");class s{constructor(n){this.parserOptions=n,this.quotedColumnParser=new c.QuotedColumnParser(n),this.nonQuotedColumnParser=new f.NonQuotedColumnParser(n)}parse(n){const{nextNonSpaceToken:r}=n;return r!==null&&u.Token.isTokenQuote(r,this.parserOptions)?(n.advanceToToken(r),this.quotedColumnParser.parse(n)):this.nonQuotedColumnParser.parse(n)}}m.ColumnParser=s},{"../Token":159,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],162:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.NonQuotedColumnParser=void 0;const f=e("./ColumnFormatter"),c=e("../Token");class u{constructor(t){this.parserOptions=t,this.columnFormatter=new f.ColumnFormatter(t)}parse(t){if(!t.hasMoreCharacters)return null;const{parserOptions:n}=this,r=[];let i=t.nextCharacterToken;for(;i&&!(c.Token.isTokenDelimiter(i,n)||c.Token.isTokenRowDelimiter(i));i=t.nextCharacterToken)r.push(i.token),t.advancePastToken(i);return this.columnFormatter.format(r.join(""))}}m.NonQuotedColumnParser=u},{"../Token":159,"./ColumnFormatter":160}],163:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.QuotedColumnParser=void 0;const f=e("./ColumnFormatter"),c=e("../Token");class u{constructor(t){this.parserOptions=t,this.columnFormatter=new f.ColumnFormatter(t)}parse(t){if(!t.hasMoreCharacters)return null;const n=t.cursor,{foundClosingQuote:r,col:i}=this.gatherDataBetweenQuotes(t);if(!r){if(t.advanceTo(n),!t.hasMoreData)throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote||""}' in line: at '${t.lineFromCursor.replace(/[\r\n]/g,"\\n'")}'`);return null}return this.checkForMalformedColumn(t),i}gatherDataBetweenQuotes(t){const{parserOptions:n}=this;let r=!1,i=!1;const o=[];let l=t.nextCharacterToken;for(;!i&&l!==null;l=t.nextCharacterToken){const a=c.Token.isTokenQuote(l,n);if(!r&&a)r=!0;else if(r)if(c.Token.isTokenEscapeCharacter(l,n)){t.advancePastToken(l);const g=t.nextCharacterToken;g!==null&&(c.Token.isTokenQuote(g,n)||c.Token.isTokenEscapeCharacter(g,n))?(o.push(g.token),l=g):a?i=!0:o.push(l.token)}else a?i=!0:o.push(l.token);t.advancePastToken(l)}return{col:this.columnFormatter.format(o.join("")),foundClosingQuote:i}}checkForMalformedColumn(t){const{parserOptions:n}=this,{nextNonSpaceToken:r}=t;if(r){const i=c.Token.isTokenDelimiter(r,n),o=c.Token.isTokenRowDelimiter(r);if(!(i||o)){const l=t.lineFromCursor.substr(0,10).replace(/[\r\n]/g,"\\n'");throw new Error(`Parse Error: expected: '${n.escapedDelimiter}' OR new line got: '${r.token}'. at '${l}`)}t.advanceToToken(r)}else t.hasMoreData||t.advancePastLine()}}m.QuotedColumnParser=u},{"../Token":159,"./ColumnFormatter":160}],164:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.ColumnFormatter=m.QuotedColumnParser=m.NonQuotedColumnParser=m.ColumnParser=void 0;var f=e("./ColumnParser");Object.defineProperty(m,"ColumnParser",{enumerable:!0,get:function(){return f.ColumnParser}});var c=e("./NonQuotedColumnParser");Object.defineProperty(m,"NonQuotedColumnParser",{enumerable:!0,get:function(){return c.NonQuotedColumnParser}});var u=e("./QuotedColumnParser");Object.defineProperty(m,"QuotedColumnParser",{enumerable:!0,get:function(){return u.QuotedColumnParser}});var s=e("./ColumnFormatter");Object.defineProperty(m,"ColumnFormatter",{enumerable:!0,get:function(){return s.ColumnFormatter}})},{"./ColumnFormatter":160,"./ColumnParser":161,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],165:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.QuotedColumnParser=m.NonQuotedColumnParser=m.ColumnParser=m.Token=m.Scanner=m.RowParser=m.Parser=void 0;var f=e("./Parser");Object.defineProperty(m,"Parser",{enumerable:!0,get:function(){return f.Parser}});var c=e("./RowParser");Object.defineProperty(m,"RowParser",{enumerable:!0,get:function(){return c.RowParser}});var u=e("./Scanner");Object.defineProperty(m,"Scanner",{enumerable:!0,get:function(){return u.Scanner}});var s=e("./Token");Object.defineProperty(m,"Token",{enumerable:!0,get:function(){return s.Token}});var t=e("./column");Object.defineProperty(m,"ColumnParser",{enumerable:!0,get:function(){return t.ColumnParser}}),Object.defineProperty(m,"NonQuotedColumnParser",{enumerable:!0,get:function(){return t.NonQuotedColumnParser}}),Object.defineProperty(m,"QuotedColumnParser",{enumerable:!0,get:function(){return t.QuotedColumnParser}})},{"./Parser":156,"./RowParser":157,"./Scanner":158,"./Token":159,"./column":164}],166:[function(e,d,m){var f=function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(m,"__esModule",{value:!0}),m.HeaderTransformer=void 0;const c=f(e("lodash.isundefined")),u=f(e("lodash.isfunction")),s=f(e("lodash.uniq")),t=f(e("lodash.groupby"));class n{constructor(i){this.headers=null,this.receivedHeaders=!1,this.shouldUseFirstRow=!1,this.processedFirstRow=!1,this.headersLength=0,this.parserOptions=i,i.headers===!0?this.shouldUseFirstRow=!0:Array.isArray(i.headers)?this.setHeaders(i.headers):u.default(i.headers)&&(this.headersTransform=i.headers)}transform(i,o){return this.shouldMapRow(i)?o(null,this.processRow(i)):o(null,{row:null,isValid:!0})}shouldMapRow(i){const{parserOptions:o}=this;if(!this.headersTransform&&o.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders)throw new Error("Error renaming headers: new headers must be provided in an array");return this.processedFirstRow=!0,!1}if(!this.receivedHeaders&&Array.isArray(i)){if(this.headersTransform)this.setHeaders(this.headersTransform(i));else if(this.shouldUseFirstRow)this.setHeaders(i);else return!0;return!1}return!0}processRow(i){if(!this.headers)return{row:i,isValid:!0};const{parserOptions:o}=this;if(!o.discardUnmappedColumns&&i.length>this.headersLength){if(!o.strictColumnHandling)throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${i.length}`);return{row:i,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${i.length}`}}return o.strictColumnHandling&&i.length!!a);if(s.default(l).length!==l.length){const a=t.default(l),g=Object.keys(a).filter(v=>a[v].length>1);throw new Error(`Duplicate headers found ${JSON.stringify(g)}`)}this.headers=i,this.receivedHeaders=!0,this.headersLength=((o=this.headers)===null||o===void 0?void 0:o.length)||0}}m.HeaderTransformer=n},{"lodash.groupby":443,"lodash.isfunction":446,"lodash.isundefined":448,"lodash.uniq":449}],167:[function(e,d,m){var f=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(m,"__esModule",{value:!0}),m.RowTransformerValidator=void 0;const c=f(e("lodash.isfunction")),u=e("../types");class s{constructor(){this._rowTransform=null,this._rowValidator=null}static createTransform(n){return u.isSyncTransform(n)?(r,i)=>{let o=null;try{o=n(r)}catch(l){return i(l)}return i(null,o)}:n}static createValidator(n){return u.isSyncValidate(n)?(r,i)=>{i(null,{row:r,isValid:n(r)})}:(r,i)=>{n(r,(o,l,a)=>o?i(o):l?i(null,{row:r,isValid:l,reason:a}):i(null,{row:r,isValid:!1,reason:a}))}}set rowTransform(n){if(!c.default(n))throw new TypeError("The transform should be a function");this._rowTransform=s.createTransform(n)}set rowValidator(n){if(!c.default(n))throw new TypeError("The validate should be a function");this._rowValidator=s.createValidator(n)}transformAndValidate(n,r){return this.callTransformer(n,(i,o)=>i?r(i):o?this.callValidator(o,(l,a)=>l?r(l):a&&!a.isValid?r(null,{row:o,isValid:!1,reason:a.reason}):r(null,{row:o,isValid:!0})):r(null,{row:null,isValid:!0}))}callTransformer(n,r){return this._rowTransform?this._rowTransform(n,r):r(null,n)}callValidator(n,r){return this._rowValidator?this._rowValidator(n,r):r(null,{row:n,isValid:!0})}}m.RowTransformerValidator=s},{"../types":169,"lodash.isfunction":446}],168:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.HeaderTransformer=m.RowTransformerValidator=void 0;var f=e("./RowTransformerValidator");Object.defineProperty(m,"RowTransformerValidator",{enumerable:!0,get:function(){return f.RowTransformerValidator}});var c=e("./HeaderTransformer");Object.defineProperty(m,"HeaderTransformer",{enumerable:!0,get:function(){return c.HeaderTransformer}})},{"./HeaderTransformer":166,"./RowTransformerValidator":167}],169:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.isSyncValidate=m.isSyncTransform=void 0,m.isSyncTransform=f=>f.length===1,m.isSyncValidate=f=>f.length===1},{}],170:[function(e,d,m){const f=m;f.bignum=e("bn.js"),f.define=e("./asn1/api").define,f.base=e("./asn1/base"),f.constants=e("./asn1/constants"),f.decoders=e("./asn1/decoders"),f.encoders=e("./asn1/encoders")},{"./asn1/api":171,"./asn1/base":173,"./asn1/constants":177,"./asn1/decoders":179,"./asn1/encoders":182,"bn.js":184}],171:[function(e,d,m){const f=e("./encoders"),c=e("./decoders"),u=e("inherits"),s=m;s.define=function(r,i){return new t(r,i)};function t(n,r){this.name=n,this.body=r,this.decoders={},this.encoders={}}t.prototype._createNamed=function(r){const i=this.name;function o(l){this._initNamed(l,i)}return u(o,r),o.prototype._initNamed=function(a,g){r.call(this,a,g)},new o(this)},t.prototype._getDecoder=function(r){return r=r||"der",this.decoders.hasOwnProperty(r)||(this.decoders[r]=this._createNamed(c[r])),this.decoders[r]},t.prototype.decode=function(r,i,o){return this._getDecoder(i).decode(r,o)},t.prototype._getEncoder=function(r){return r=r||"der",this.encoders.hasOwnProperty(r)||(this.encoders[r]=this._createNamed(f[r])),this.encoders[r]},t.prototype.encode=function(r,i,o){return this._getEncoder(i).encode(r,o)}},{"./decoders":179,"./encoders":182,inherits:440}],172:[function(e,d,m){const f=e("inherits"),c=e("../base/reporter").Reporter,u=e("safer-buffer").Buffer;function s(n,r){if(c.call(this,r),!u.isBuffer(n)){this.error("Input not Buffer");return}this.base=n,this.offset=0,this.length=n.length}f(s,c),m.DecoderBuffer=s,s.isDecoderBuffer=function(r){return r instanceof s?!0:typeof r=="object"&&u.isBuffer(r.base)&&r.constructor.name==="DecoderBuffer"&&typeof r.offset=="number"&&typeof r.length=="number"&&typeof r.save=="function"&&typeof r.restore=="function"&&typeof r.isEmpty=="function"&&typeof r.readUInt8=="function"&&typeof r.skip=="function"&&typeof r.raw=="function"},s.prototype.save=function(){return{offset:this.offset,reporter:c.prototype.save.call(this)}},s.prototype.restore=function(r){const i=new s(this.base);return i.offset=r.offset,i.length=this.offset,this.offset=r.offset,c.prototype.restore.call(this,r.reporter),i},s.prototype.isEmpty=function(){return this.offset===this.length},s.prototype.readUInt8=function(r){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(r||"DecoderBuffer overrun")},s.prototype.skip=function(r,i){if(!(this.offset+r<=this.length))return this.error(i||"DecoderBuffer overrun");const o=new s(this.base);return o._reporterState=this._reporterState,o.offset=this.offset,o.length=this.offset+r,this.offset+=r,o},s.prototype.raw=function(r){return this.base.slice(r?r.offset:this.offset,this.length)};function t(n,r){if(Array.isArray(n))this.length=0,this.value=n.map(function(i){return t.isEncoderBuffer(i)||(i=new t(i,r)),this.length+=i.length,i},this);else if(typeof n=="number"){if(!(0<=n&&n<=255))return r.error("non-byte EncoderBuffer value");this.value=n,this.length=1}else if(typeof n=="string")this.value=n,this.length=u.byteLength(n);else if(u.isBuffer(n))this.value=n,this.length=n.length;else return r.error("Unsupported type: "+typeof n)}m.EncoderBuffer=t,t.isEncoderBuffer=function(r){return r instanceof t?!0:typeof r=="object"&&r.constructor.name==="EncoderBuffer"&&typeof r.length=="number"&&typeof r.join=="function"},t.prototype.join=function(r,i){return r||(r=u.alloc(this.length)),i||(i=0),this.length===0||(Array.isArray(this.value)?this.value.forEach(function(o){o.join(r,i),i+=o.length}):(typeof this.value=="number"?r[i]=this.value:typeof this.value=="string"?r.write(this.value,i):u.isBuffer(this.value)&&this.value.copy(r,i),i+=this.length)),r}},{"../base/reporter":175,inherits:440,"safer-buffer":495}],173:[function(e,d,m){const f=m;f.Reporter=e("./reporter").Reporter,f.DecoderBuffer=e("./buffer").DecoderBuffer,f.EncoderBuffer=e("./buffer").EncoderBuffer,f.Node=e("./node")},{"./buffer":172,"./node":174,"./reporter":175}],174:[function(e,d,m){const f=e("../base/reporter").Reporter,c=e("../base/buffer").EncoderBuffer,u=e("../base/buffer").DecoderBuffer,s=e("minimalistic-assert"),t=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],n=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(t),r=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];function i(l,a,g){const v={};this._baseState=v,v.name=g,v.enc=l,v.parent=a||null,v.children=null,v.tag=null,v.args=null,v.reverseArgs=null,v.choice=null,v.optional=!1,v.any=!1,v.obj=!1,v.use=null,v.useDecoder=null,v.key=null,v.default=null,v.explicit=null,v.implicit=null,v.contains=null,v.parent||(v.children=[],this._wrap())}d.exports=i;const o=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];i.prototype.clone=function(){const a=this._baseState,g={};o.forEach(function(h){g[h]=a[h]});const v=new this.constructor(g.parent);return v._baseState=g,v},i.prototype._wrap=function(){const a=this._baseState;n.forEach(function(g){this[g]=function(){const h=new this.constructor(this);return a.children.push(h),h[g].apply(h,arguments)}},this)},i.prototype._init=function(a){const g=this._baseState;s(g.parent===null),a.call(this),g.children=g.children.filter(function(v){return v._baseState.parent===this},this),s.equal(g.children.length,1,"Root node can have only one child")},i.prototype._useArgs=function(a){const g=this._baseState,v=a.filter(function(h){return h instanceof this.constructor},this);a=a.filter(function(h){return!(h instanceof this.constructor)},this),v.length!==0&&(s(g.children===null),g.children=v,v.forEach(function(h){h._baseState.parent=this},this)),a.length!==0&&(s(g.args===null),g.args=a,g.reverseArgs=a.map(function(h){if(typeof h!="object"||h.constructor!==Object)return h;const w={};return Object.keys(h).forEach(function(y){y==(y|0)&&(y|=0);const S=h[y];w[S]=y}),w}))},r.forEach(function(l){i.prototype[l]=function(){const g=this._baseState;throw new Error(l+" not implemented for encoding: "+g.enc)}}),t.forEach(function(l){i.prototype[l]=function(){const g=this._baseState,v=Array.prototype.slice.call(arguments);return s(g.tag===null),g.tag=l,this._useArgs(v),this}}),i.prototype.use=function(a){s(a);const g=this._baseState;return s(g.use===null),g.use=a,this},i.prototype.optional=function(){const a=this._baseState;return a.optional=!0,this},i.prototype.def=function(a){const g=this._baseState;return s(g.default===null),g.default=a,g.optional=!0,this},i.prototype.explicit=function(a){const g=this._baseState;return s(g.explicit===null&&g.implicit===null),g.explicit=a,this},i.prototype.implicit=function(a){const g=this._baseState;return s(g.explicit===null&&g.implicit===null),g.implicit=a,this},i.prototype.obj=function(){const a=this._baseState,g=Array.prototype.slice.call(arguments);return a.obj=!0,g.length!==0&&this._useArgs(g),this},i.prototype.key=function(a){const g=this._baseState;return s(g.key===null),g.key=a,this},i.prototype.any=function(){const a=this._baseState;return a.any=!0,this},i.prototype.choice=function(a){const g=this._baseState;return s(g.choice===null),g.choice=a,this._useArgs(Object.keys(a).map(function(v){return a[v]})),this},i.prototype.contains=function(a){const g=this._baseState;return s(g.use===null),g.contains=a,this},i.prototype._decode=function(a,g){const v=this._baseState;if(v.parent===null)return a.wrapResult(v.children[0]._decode(a,g));let h=v.default,w=!0,y=null;if(v.key!==null&&(y=a.enterKey(v.key)),v.optional){let E=null;if(v.explicit!==null?E=v.explicit:v.implicit!==null?E=v.implicit:v.tag!==null&&(E=v.tag),E===null&&!v.any){const I=a.save();try{v.choice===null?this._decodeGeneric(v.tag,a,g):this._decodeChoice(a,g),w=!0}catch{w=!1}a.restore(I)}else if(w=this._peekTag(a,E,v.any),a.isError(w))return w}let S;if(v.obj&&w&&(S=a.enterObject()),w){if(v.explicit!==null){const I=this._decodeTag(a,v.explicit);if(a.isError(I))return I;a=I}const E=a.offset;if(v.use===null&&v.choice===null){let I;v.any&&(I=a.save());const F=this._decodeTag(a,v.implicit!==null?v.implicit:v.tag,v.any);if(a.isError(F))return F;v.any?h=a.raw(I):a=F}if(g&&g.track&&v.tag!==null&&g.track(a.path(),E,a.length,"tagged"),g&&g.track&&v.tag!==null&&g.track(a.path(),a.offset,a.length,"content"),v.any||(v.choice===null?h=this._decodeGeneric(v.tag,a,g):h=this._decodeChoice(a,g)),a.isError(h))return h;if(!v.any&&v.choice===null&&v.children!==null&&v.children.forEach(function(F){F._decode(a,g)}),v.contains&&(v.tag==="octstr"||v.tag==="bitstr")){const I=new u(h);h=this._getUse(v.contains,a._reporterState.obj)._decode(I,g)}}return v.obj&&w&&(h=a.leaveObject(S)),v.key!==null&&(h!==null||w===!0)?a.leaveKey(y,v.key,h):y!==null&&a.exitKey(y),h},i.prototype._decodeGeneric=function(a,g,v){const h=this._baseState;return a==="seq"||a==="set"?null:a==="seqof"||a==="setof"?this._decodeList(g,a,h.args[0],v):/str$/.test(a)?this._decodeStr(g,a,v):a==="objid"&&h.args?this._decodeObjid(g,h.args[0],h.args[1],v):a==="objid"?this._decodeObjid(g,null,null,v):a==="gentime"||a==="utctime"?this._decodeTime(g,a,v):a==="null_"?this._decodeNull(g,v):a==="bool"?this._decodeBool(g,v):a==="objDesc"?this._decodeStr(g,a,v):a==="int"||a==="enum"?this._decodeInt(g,h.args&&h.args[0],v):h.use!==null?this._getUse(h.use,g._reporterState.obj)._decode(g,v):g.error("unknown tag: "+a)},i.prototype._getUse=function(a,g){const v=this._baseState;return v.useDecoder=this._use(a,g),s(v.useDecoder._baseState.parent===null),v.useDecoder=v.useDecoder._baseState.children[0],v.implicit!==v.useDecoder._baseState.implicit&&(v.useDecoder=v.useDecoder.clone(),v.useDecoder._baseState.implicit=v.implicit),v.useDecoder},i.prototype._decodeChoice=function(a,g){const v=this._baseState;let h=null,w=!1;return Object.keys(v.choice).some(function(y){const S=a.save(),E=v.choice[y];try{const I=E._decode(a,g);if(a.isError(I))return!1;h={type:y,value:I},w=!0}catch{return a.restore(S),!1}return!0},this),w?h:a.error("Choice not matched")},i.prototype._createEncoderBuffer=function(a){return new c(a,this.reporter)},i.prototype._encode=function(a,g,v){const h=this._baseState;if(h.default!==null&&h.default===a)return;const w=this._encodeValue(a,g,v);if(w!==void 0&&!this._skipDefault(w,g,v))return w},i.prototype._encodeValue=function(a,g,v){const h=this._baseState;if(h.parent===null)return h.children[0]._encode(a,g||new f);let w=null;if(this.reporter=g,h.optional&&a===void 0)if(h.default!==null)a=h.default;else return;let y=null,S=!1;if(h.any)w=this._createEncoderBuffer(a);else if(h.choice)w=this._encodeChoice(a,g);else if(h.contains)y=this._getUse(h.contains,v)._encode(a,g),S=!0;else if(h.children)y=h.children.map(function(E){if(E._baseState.tag==="null_")return E._encode(null,g,a);if(E._baseState.key===null)return g.error("Child should have a key");const I=g.enterKey(E._baseState.key);if(typeof a!="object")return g.error("Child expected, but input is not object");const F=E._encode(a[E._baseState.key],g,a);return g.leaveKey(I),F},this).filter(function(E){return E}),y=this._createEncoderBuffer(y);else if(h.tag==="seqof"||h.tag==="setof"){if(!(h.args&&h.args.length===1))return g.error("Too many args for : "+h.tag);if(!Array.isArray(a))return g.error("seqof/setof, but data is not Array");const E=this.clone();E._baseState.implicit=null,y=this._createEncoderBuffer(a.map(function(I){const F=this._baseState;return this._getUse(F.args[0],a)._encode(I,g)},E))}else h.use!==null?w=this._getUse(h.use,v)._encode(a,g):(y=this._encodePrimitive(h.tag,a),S=!0);if(!h.any&&h.choice===null){const E=h.implicit!==null?h.implicit:h.tag,I=h.implicit===null?"universal":"context";E===null?h.use===null&&g.error("Tag could be omitted only for .use()"):h.use===null&&(w=this._encodeComposite(E,S,I,y))}return h.explicit!==null&&(w=this._encodeComposite(h.explicit,!1,"context",w)),w},i.prototype._encodeChoice=function(a,g){const v=this._baseState,h=v.choice[a.type];return h||s(!1,a.type+" not found in "+JSON.stringify(Object.keys(v.choice))),h._encode(a.value,g)},i.prototype._encodePrimitive=function(a,g){const v=this._baseState;if(/str$/.test(a))return this._encodeStr(g,a);if(a==="objid"&&v.args)return this._encodeObjid(g,v.reverseArgs[0],v.args[1]);if(a==="objid")return this._encodeObjid(g,null,null);if(a==="gentime"||a==="utctime")return this._encodeTime(g,a);if(a==="null_")return this._encodeNull();if(a==="int"||a==="enum")return this._encodeInt(g,v.args&&v.reverseArgs[0]);if(a==="bool")return this._encodeBool(g);if(a==="objDesc")return this._encodeStr(g,a);throw new Error("Unsupported tag: "+a)},i.prototype._isNumstr=function(a){return/^[0-9 ]*$/.test(a)},i.prototype._isPrintstr=function(a){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(a)}},{"../base/buffer":172,"../base/reporter":175,"minimalistic-assert":453}],175:[function(e,d,m){const f=e("inherits");function c(s){this._reporterState={obj:null,path:[],options:s||{},errors:[]}}m.Reporter=c,c.prototype.isError=function(t){return t instanceof u},c.prototype.save=function(){const t=this._reporterState;return{obj:t.obj,pathLen:t.path.length}},c.prototype.restore=function(t){const n=this._reporterState;n.obj=t.obj,n.path=n.path.slice(0,t.pathLen)},c.prototype.enterKey=function(t){return this._reporterState.path.push(t)},c.prototype.exitKey=function(t){const n=this._reporterState;n.path=n.path.slice(0,t-1)},c.prototype.leaveKey=function(t,n,r){const i=this._reporterState;this.exitKey(t),i.obj!==null&&(i.obj[n]=r)},c.prototype.path=function(){return this._reporterState.path.join("/")},c.prototype.enterObject=function(){const t=this._reporterState,n=t.obj;return t.obj={},n},c.prototype.leaveObject=function(t){const n=this._reporterState,r=n.obj;return n.obj=t,r},c.prototype.error=function(t){let n;const r=this._reporterState,i=t instanceof u;if(i?n=t:n=new u(r.path.map(function(o){return"["+JSON.stringify(o)+"]"}).join(""),t.message||t,t.stack),!r.options.partial)throw n;return i||r.errors.push(n),n},c.prototype.wrapResult=function(t){const n=this._reporterState;return n.options.partial?{result:this.isError(t)?null:t,errors:n.errors}:t};function u(s,t){this.path=s,this.rethrow(t)}f(u,Error),u.prototype.rethrow=function(t){if(this.message=t+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,u),!this.stack)try{throw new Error(this.message)}catch(n){this.stack=n.stack}return this}},{inherits:440}],176:[function(e,d,m){function f(c){const u={};return Object.keys(c).forEach(function(s){(s|0)==s&&(s=s|0);const t=c[s];u[t]=s}),u}m.tagClass={0:"universal",1:"application",2:"context",3:"private"},m.tagClassByName=f(m.tagClass),m.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},m.tagByName=f(m.tag)},{}],177:[function(e,d,m){const f=m;f._reverse=function(u){const s={};return Object.keys(u).forEach(function(t){(t|0)==t&&(t=t|0);const n=u[t];s[n]=t}),s},f.der=e("./der")},{"./der":176}],178:[function(e,d,m){const f=e("inherits"),c=e("bn.js"),u=e("../base/buffer").DecoderBuffer,s=e("../base/node"),t=e("../constants/der");function n(l){this.enc="der",this.name=l.name,this.entity=l,this.tree=new r,this.tree._init(l.body)}d.exports=n,n.prototype.decode=function(a,g){return u.isDecoderBuffer(a)||(a=new u(a,g)),this.tree._decode(a,g)};function r(l){s.call(this,"der",l)}f(r,s),r.prototype._peekTag=function(a,g,v){if(a.isEmpty())return!1;const h=a.save(),w=i(a,'Failed to peek tag: "'+g+'"');return a.isError(w)?w:(a.restore(h),w.tag===g||w.tagStr===g||w.tagStr+"of"===g||v)},r.prototype._decodeTag=function(a,g,v){const h=i(a,'Failed to decode tag of "'+g+'"');if(a.isError(h))return h;let w=o(a,h.primitive,'Failed to get length of "'+g+'"');if(a.isError(w))return w;if(!v&&h.tag!==g&&h.tagStr!==g&&h.tagStr+"of"!==g)return a.error('Failed to match tag: "'+g+'"');if(h.primitive||w!==null)return a.skip(w,'Failed to match body of: "'+g+'"');const y=a.save(),S=this._skipUntilEnd(a,'Failed to skip indefinite length body: "'+this.tag+'"');return a.isError(S)?S:(w=a.offset-y.offset,a.restore(y),a.skip(w,'Failed to match body of: "'+g+'"'))},r.prototype._skipUntilEnd=function(a,g){for(;;){const v=i(a,g);if(a.isError(v))return v;const h=o(a,v.primitive,g);if(a.isError(h))return h;let w;if(v.primitive||h!==null?w=a.skip(h):w=this._skipUntilEnd(a,g),a.isError(w))return w;if(v.tagStr==="end")break}},r.prototype._decodeList=function(a,g,v,h){const w=[];for(;!a.isEmpty();){const y=this._peekTag(a,"end");if(a.isError(y))return y;const S=v.decode(a,"der",h);if(a.isError(S)&&y)break;w.push(S)}return w},r.prototype._decodeStr=function(a,g){if(g==="bitstr"){const v=a.readUInt8();return a.isError(v)?v:{unused:v,data:a.raw()}}else if(g==="bmpstr"){const v=a.raw();if(v.length%2===1)return a.error("Decoding of string type: bmpstr length mismatch");let h="";for(let w=0;w>6],h=(g&32)===0;if((g&31)===31){let y=g;for(g=0;(y&128)===128;){if(y=l.readUInt8(a),l.isError(y))return y;g<<=7,g|=y&127}}else g&=31;const w=t.tag[g];return{cls:v,primitive:h,tag:g,tagStr:w}}function o(l,a,g){let v=l.readUInt8(g);if(l.isError(v))return v;if(!a&&v===128)return null;if(!(v&128))return v;const h=v&127;if(h>4)return l.error("length octect is too long");v=0;for(let w=0;w=256;S>>=8)w++;const y=c.alloc(1+1+w);y[0]=h,y[1]=128|w;for(let S=1+w,E=v.length;E>0;S--,E>>=8)y[S]=E&255;return this._createEncoderBuffer([y,v])},n.prototype._encodeStr=function(l,a){if(a==="bitstr")return this._createEncoderBuffer([l.unused|0,l.data]);if(a==="bmpstr"){const g=c.alloc(l.length*2);for(let v=0;v=40)return this.reporter.error("Second objid identifier OOB");l.splice(0,2,l[0]*40+l[1])}let v=0;for(let y=0;y=128;S>>=7)v++}const h=c.alloc(v);let w=h.length-1;for(let y=l.length-1;y>=0;y--){let S=l[y];for(h[w--]=S&127;(S>>=7)>0;)h[w--]=128|S&127}return this._createEncoderBuffer(h)};function r(o){return o<10?"0"+o:o}n.prototype._encodeTime=function(l,a){let g;const v=new Date(l);return a==="gentime"?g=[r(v.getUTCFullYear()),r(v.getUTCMonth()+1),r(v.getUTCDate()),r(v.getUTCHours()),r(v.getUTCMinutes()),r(v.getUTCSeconds()),"Z"].join(""):a==="utctime"?g=[r(v.getUTCFullYear()%100),r(v.getUTCMonth()+1),r(v.getUTCDate()),r(v.getUTCHours()),r(v.getUTCMinutes()),r(v.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+a+" time is not supported yet"),this._encodeStr(g,"octstr")},n.prototype._encodeNull=function(){return this._createEncoderBuffer("")},n.prototype._encodeInt=function(l,a){if(typeof l=="string"){if(!a)return this.reporter.error("String int or enum given, but no values map");if(!a.hasOwnProperty(l))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(l));l=a[l]}if(typeof l!="number"&&!c.isBuffer(l)){const h=l.toArray();!l.sign&&h[0]&128&&h.unshift(0),l=c.from(h)}if(c.isBuffer(l)){let h=l.length;l.length===0&&h++;const w=c.alloc(h);return l.copy(w),l.length===0&&(w[0]=0),this._createEncoderBuffer(w)}if(l<128)return this._createEncoderBuffer(l);if(l<256)return this._createEncoderBuffer([0,l]);let g=1;for(let h=l;h>=256;h>>=8)g++;const v=new Array(g);for(let h=v.length-1;h>=0;h--)v[h]=l&255,l>>=8;return v[0]&128&&v.unshift(0),this._createEncoderBuffer(c.from(v))},n.prototype._encodeBool=function(l){return this._createEncoderBuffer(l?255:0)},n.prototype._use=function(l,a){return typeof l=="function"&&(l=l(a)),l._getEncoder("der").tree},n.prototype._skipDefault=function(l,a,g){const v=this._baseState;let h;if(v.default===null)return!1;const w=l.join();if(v.defaultBuffer===void 0&&(v.defaultBuffer=this._encodeValue(v.default,a,g).join()),w.length!==v.defaultBuffer.length)return!1;for(h=0;h=31?g.error("Multi-octet tag encoding unsupported"):(l||(v|=32),v|=s.tagClassByName[a||"universal"]<<6,v)}},{"../base/node":174,"../constants/der":176,inherits:440,"safer-buffer":495}],182:[function(e,d,m){const f=m;f.der=e("./der"),f.pem=e("./pem")},{"./der":181,"./pem":183}],183:[function(e,d,m){const f=e("inherits"),c=e("./der");function u(s){c.call(this,s),this.enc="pem"}f(u,c),d.exports=u,u.prototype.encode=function(t,n){const i=c.prototype.encode.call(this,t).toString("base64"),o=["-----BEGIN "+n.label+"-----"];for(let l=0;l0?M:T},t.min=function(M,T){return M.cmp(T)<0?M:T},t.prototype._init=function(M,T,_){if(typeof M=="number")return this._initNumber(M,T,_);if(typeof M=="object")return this._initArray(M,T,_);T==="hex"&&(T=16),u(T===(T|0)&&T>=2&&T<=36),M=M.toString().replace(/\s+/g,"");var A=0;M[0]==="-"&&(A++,this.negative=1),A=0;A-=3)L=M[A]|M[A-1]<<8|M[A-2]<<16,this.words[P]|=L<<$&67108863,this.words[P+1]=L>>>26-$&67108863,$+=24,$>=26&&($-=26,P++);else if(_==="le")for(A=0,P=0;A>>26-$&67108863,$+=24,$>=26&&($-=26,P++);return this.strip()};function r(H,M){var T=H.charCodeAt(M);return T>=65&&T<=70?T-55:T>=97&&T<=102?T-87:T-48&15}function i(H,M,T){var _=r(H,T);return T-1>=M&&(_|=r(H,T-1)<<4),_}t.prototype._parseHex=function(M,T,_){this.length=Math.ceil((M.length-T)/6),this.words=new Array(this.length);for(var A=0;A=T;A-=2)$=i(M,T,A)<=18?(P-=18,L+=1,this.words[L]|=$>>>26):P+=8;else{var R=M.length-T;for(A=R%2===0?T+1:T;A=18?(P-=18,L+=1,this.words[L]|=$>>>26):P+=8}this.strip()};function o(H,M,T,_){for(var A=0,P=Math.min(H.length,T),L=M;L=49?A+=$-49+10:$>=17?A+=$-17+10:A+=$}return A}t.prototype._parseBase=function(M,T,_){this.words=[0],this.length=1;for(var A=0,P=1;P<=67108863;P*=T)A++;A--,P=P/T|0;for(var L=M.length-_,$=L%A,R=Math.min(L,L-$)+_,k=0,C=_;C1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},t.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},t.prototype.inspect=function(){return(this.red?""};var l=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],a=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],g=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];t.prototype.toString=function(M,T){M=M||10,T=T|0||1;var _;if(M===16||M==="hex"){_="";for(var A=0,P=0,L=0;L>>24-A&16777215,P!==0||L!==this.length-1?_=l[6-R.length]+R+_:_=R+_,A+=2,A>=26&&(A-=26,L--)}for(P!==0&&(_=P.toString(16)+_);_.length%T!==0;)_="0"+_;return this.negative!==0&&(_="-"+_),_}if(M===(M|0)&&M>=2&&M<=36){var k=a[M],C=g[M];_="";var O=this.clone();for(O.negative=0;!O.isZero();){var W=O.modn(C).toString(M);O=O.idivn(C),O.isZero()?_=W+_:_=l[k-W.length]+W+_}for(this.isZero()&&(_="0"+_);_.length%T!==0;)_="0"+_;return this.negative!==0&&(_="-"+_),_}u(!1,"Base should be between 2 and 36")},t.prototype.toNumber=function(){var M=this.words[0];return this.length===2?M+=this.words[1]*67108864:this.length===3&&this.words[2]===1?M+=4503599627370496+this.words[1]*67108864:this.length>2&&u(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-M:M},t.prototype.toJSON=function(){return this.toString(16)},t.prototype.toBuffer=function(M,T){return u(typeof n<"u"),this.toArrayLike(n,M,T)},t.prototype.toArray=function(M,T){return this.toArrayLike(Array,M,T)},t.prototype.toArrayLike=function(M,T,_){var A=this.byteLength(),P=_||Math.max(1,A);u(A<=P,"byte array longer than desired length"),u(P>0,"Requested array length <= 0"),this.strip();var L=T==="le",$=new M(P),R,k,C=this.clone();if(L){for(k=0;!C.isZero();k++)R=C.andln(255),C.iushrn(8),$[k]=R;for(;k=4096&&(_+=13,T>>>=13),T>=64&&(_+=7,T>>>=7),T>=8&&(_+=4,T>>>=4),T>=2&&(_+=2,T>>>=2),_+T},t.prototype._zeroBits=function(M){if(M===0)return 26;var T=M,_=0;return T&8191||(_+=13,T>>>=13),T&127||(_+=7,T>>>=7),T&15||(_+=4,T>>>=4),T&3||(_+=2,T>>>=2),T&1||_++,_},t.prototype.bitLength=function(){var M=this.words[this.length-1],T=this._countBits(M);return(this.length-1)*26+T};function v(H){for(var M=new Array(H.bitLength()),T=0;T>>A}return M}t.prototype.zeroBits=function(){if(this.isZero())return 0;for(var M=0,T=0;TM.length?this.clone().ior(M):M.clone().ior(this)},t.prototype.uor=function(M){return this.length>M.length?this.clone().iuor(M):M.clone().iuor(this)},t.prototype.iuand=function(M){var T;this.length>M.length?T=M:T=this;for(var _=0;_M.length?this.clone().iand(M):M.clone().iand(this)},t.prototype.uand=function(M){return this.length>M.length?this.clone().iuand(M):M.clone().iuand(this)},t.prototype.iuxor=function(M){var T,_;this.length>M.length?(T=this,_=M):(T=M,_=this);for(var A=0;A<_.length;A++)this.words[A]=T.words[A]^_.words[A];if(this!==T)for(;AM.length?this.clone().ixor(M):M.clone().ixor(this)},t.prototype.uxor=function(M){return this.length>M.length?this.clone().iuxor(M):M.clone().iuxor(this)},t.prototype.inotn=function(M){u(typeof M=="number"&&M>=0);var T=Math.ceil(M/26)|0,_=M%26;this._expand(T),_>0&&T--;for(var A=0;A0&&(this.words[A]=~this.words[A]&67108863>>26-_),this.strip()},t.prototype.notn=function(M){return this.clone().inotn(M)},t.prototype.setn=function(M,T){u(typeof M=="number"&&M>=0);var _=M/26|0,A=M%26;return this._expand(_+1),T?this.words[_]=this.words[_]|1<M.length?(_=this,A=M):(_=M,A=this);for(var P=0,L=0;L>>26;for(;P!==0&&L<_.length;L++)T=(_.words[L]|0)+P,this.words[L]=T&67108863,P=T>>>26;if(this.length=_.length,P!==0)this.words[this.length]=P,this.length++;else if(_!==this)for(;L<_.length;L++)this.words[L]=_.words[L];return this},t.prototype.add=function(M){var T;return M.negative!==0&&this.negative===0?(M.negative=0,T=this.sub(M),M.negative^=1,T):M.negative===0&&this.negative!==0?(this.negative=0,T=M.sub(this),this.negative=1,T):this.length>M.length?this.clone().iadd(M):M.clone().iadd(this)},t.prototype.isub=function(M){if(M.negative!==0){M.negative=0;var T=this.iadd(M);return M.negative=1,T._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(M),this.negative=1,this._normSign();var _=this.cmp(M);if(_===0)return this.negative=0,this.length=1,this.words[0]=0,this;var A,P;_>0?(A=this,P=M):(A=M,P=this);for(var L=0,$=0;$>26,this.words[$]=T&67108863;for(;L!==0&&$>26,this.words[$]=T&67108863;if(L===0&&$>>26,O=R&67108863,W=Math.min(k,M.length-1),ne=Math.max(0,k-H.length+1);ne<=W;ne++){var he=k-ne|0;A=H.words[he]|0,P=M.words[ne]|0,L=A*P+O,C+=L/67108864|0,O=L&67108863}T.words[k]=O|0,R=C|0}return R!==0?T.words[k]=R|0:T.length--,T.strip()}var w=function(M,T,_){var A=M.words,P=T.words,L=_.words,$=0,R,k,C,O=A[0]|0,W=O&8191,ne=O>>>13,he=A[1]|0,ue=he&8191,Ae=he>>>13,pe=A[2]|0,te=pe&8191,Z=pe>>>13,q=A[3]|0,de=q&8191,ke=q>>>13,oe=A[4]|0,ie=oe&8191,Q=oe>>>13,z=A[5]|0,Y=z&8191,fe=z>>>13,we=A[6]|0,U=we&8191,ve=we>>>13,Se=A[7]|0,ee=Se&8191,se=Se>>>13,me=A[8]|0,Ee=me&8191,Ie=me>>>13,Ce=A[9]|0,Fe=Ce&8191,ze=Ce>>>13,je=P[0]|0,ge=je&8191,Me=je>>>13,Be=P[1]|0,Xe=Be&8191,ot=Be>>>13,ct=P[2]|0,st=ct&8191,rt=ct>>>13,bt=P[3]|0,Qe=bt&8191,et=bt>>>13,_t=P[4]|0,ft=_t&8191,jt=_t>>>13,It=P[5]|0,ht=It&8191,Dt=It>>>13,Ut=P[6]|0,wt=Ut&8191,er=Ut>>>13,Kt=P[7]|0,pt=Kt&8191,Gt=Kt>>>13,kt=P[8]|0,xt=kt&8191,$t=kt>>>13,Qt=P[9]|0,mt=Qt&8191,qt=Qt>>>13;_.negative=M.negative^T.negative,_.length=19,R=Math.imul(W,ge),k=Math.imul(W,Me),k=k+Math.imul(ne,ge)|0,C=Math.imul(ne,Me);var St=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(St>>>26)|0,St&=67108863,R=Math.imul(ue,ge),k=Math.imul(ue,Me),k=k+Math.imul(Ae,ge)|0,C=Math.imul(Ae,Me),R=R+Math.imul(W,Xe)|0,k=k+Math.imul(W,ot)|0,k=k+Math.imul(ne,Xe)|0,C=C+Math.imul(ne,ot)|0;var Tt=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,R=Math.imul(te,ge),k=Math.imul(te,Me),k=k+Math.imul(Z,ge)|0,C=Math.imul(Z,Me),R=R+Math.imul(ue,Xe)|0,k=k+Math.imul(ue,ot)|0,k=k+Math.imul(Ae,Xe)|0,C=C+Math.imul(Ae,ot)|0,R=R+Math.imul(W,st)|0,k=k+Math.imul(W,rt)|0,k=k+Math.imul(ne,st)|0,C=C+Math.imul(ne,rt)|0;var be=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(be>>>26)|0,be&=67108863,R=Math.imul(de,ge),k=Math.imul(de,Me),k=k+Math.imul(ke,ge)|0,C=Math.imul(ke,Me),R=R+Math.imul(te,Xe)|0,k=k+Math.imul(te,ot)|0,k=k+Math.imul(Z,Xe)|0,C=C+Math.imul(Z,ot)|0,R=R+Math.imul(ue,st)|0,k=k+Math.imul(ue,rt)|0,k=k+Math.imul(Ae,st)|0,C=C+Math.imul(Ae,rt)|0,R=R+Math.imul(W,Qe)|0,k=k+Math.imul(W,et)|0,k=k+Math.imul(ne,Qe)|0,C=C+Math.imul(ne,et)|0;var Ne=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,R=Math.imul(ie,ge),k=Math.imul(ie,Me),k=k+Math.imul(Q,ge)|0,C=Math.imul(Q,Me),R=R+Math.imul(de,Xe)|0,k=k+Math.imul(de,ot)|0,k=k+Math.imul(ke,Xe)|0,C=C+Math.imul(ke,ot)|0,R=R+Math.imul(te,st)|0,k=k+Math.imul(te,rt)|0,k=k+Math.imul(Z,st)|0,C=C+Math.imul(Z,rt)|0,R=R+Math.imul(ue,Qe)|0,k=k+Math.imul(ue,et)|0,k=k+Math.imul(Ae,Qe)|0,C=C+Math.imul(Ae,et)|0,R=R+Math.imul(W,ft)|0,k=k+Math.imul(W,jt)|0,k=k+Math.imul(ne,ft)|0,C=C+Math.imul(ne,jt)|0;var Le=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Le>>>26)|0,Le&=67108863,R=Math.imul(Y,ge),k=Math.imul(Y,Me),k=k+Math.imul(fe,ge)|0,C=Math.imul(fe,Me),R=R+Math.imul(ie,Xe)|0,k=k+Math.imul(ie,ot)|0,k=k+Math.imul(Q,Xe)|0,C=C+Math.imul(Q,ot)|0,R=R+Math.imul(de,st)|0,k=k+Math.imul(de,rt)|0,k=k+Math.imul(ke,st)|0,C=C+Math.imul(ke,rt)|0,R=R+Math.imul(te,Qe)|0,k=k+Math.imul(te,et)|0,k=k+Math.imul(Z,Qe)|0,C=C+Math.imul(Z,et)|0,R=R+Math.imul(ue,ft)|0,k=k+Math.imul(ue,jt)|0,k=k+Math.imul(Ae,ft)|0,C=C+Math.imul(Ae,jt)|0,R=R+Math.imul(W,ht)|0,k=k+Math.imul(W,Dt)|0,k=k+Math.imul(ne,ht)|0,C=C+Math.imul(ne,Dt)|0;var Je=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Je>>>26)|0,Je&=67108863,R=Math.imul(U,ge),k=Math.imul(U,Me),k=k+Math.imul(ve,ge)|0,C=Math.imul(ve,Me),R=R+Math.imul(Y,Xe)|0,k=k+Math.imul(Y,ot)|0,k=k+Math.imul(fe,Xe)|0,C=C+Math.imul(fe,ot)|0,R=R+Math.imul(ie,st)|0,k=k+Math.imul(ie,rt)|0,k=k+Math.imul(Q,st)|0,C=C+Math.imul(Q,rt)|0,R=R+Math.imul(de,Qe)|0,k=k+Math.imul(de,et)|0,k=k+Math.imul(ke,Qe)|0,C=C+Math.imul(ke,et)|0,R=R+Math.imul(te,ft)|0,k=k+Math.imul(te,jt)|0,k=k+Math.imul(Z,ft)|0,C=C+Math.imul(Z,jt)|0,R=R+Math.imul(ue,ht)|0,k=k+Math.imul(ue,Dt)|0,k=k+Math.imul(Ae,ht)|0,C=C+Math.imul(Ae,Dt)|0,R=R+Math.imul(W,wt)|0,k=k+Math.imul(W,er)|0,k=k+Math.imul(ne,wt)|0,C=C+Math.imul(ne,er)|0;var at=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(at>>>26)|0,at&=67108863,R=Math.imul(ee,ge),k=Math.imul(ee,Me),k=k+Math.imul(se,ge)|0,C=Math.imul(se,Me),R=R+Math.imul(U,Xe)|0,k=k+Math.imul(U,ot)|0,k=k+Math.imul(ve,Xe)|0,C=C+Math.imul(ve,ot)|0,R=R+Math.imul(Y,st)|0,k=k+Math.imul(Y,rt)|0,k=k+Math.imul(fe,st)|0,C=C+Math.imul(fe,rt)|0,R=R+Math.imul(ie,Qe)|0,k=k+Math.imul(ie,et)|0,k=k+Math.imul(Q,Qe)|0,C=C+Math.imul(Q,et)|0,R=R+Math.imul(de,ft)|0,k=k+Math.imul(de,jt)|0,k=k+Math.imul(ke,ft)|0,C=C+Math.imul(ke,jt)|0,R=R+Math.imul(te,ht)|0,k=k+Math.imul(te,Dt)|0,k=k+Math.imul(Z,ht)|0,C=C+Math.imul(Z,Dt)|0,R=R+Math.imul(ue,wt)|0,k=k+Math.imul(ue,er)|0,k=k+Math.imul(Ae,wt)|0,C=C+Math.imul(Ae,er)|0,R=R+Math.imul(W,pt)|0,k=k+Math.imul(W,Gt)|0,k=k+Math.imul(ne,pt)|0,C=C+Math.imul(ne,Gt)|0;var Mt=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,R=Math.imul(Ee,ge),k=Math.imul(Ee,Me),k=k+Math.imul(Ie,ge)|0,C=Math.imul(Ie,Me),R=R+Math.imul(ee,Xe)|0,k=k+Math.imul(ee,ot)|0,k=k+Math.imul(se,Xe)|0,C=C+Math.imul(se,ot)|0,R=R+Math.imul(U,st)|0,k=k+Math.imul(U,rt)|0,k=k+Math.imul(ve,st)|0,C=C+Math.imul(ve,rt)|0,R=R+Math.imul(Y,Qe)|0,k=k+Math.imul(Y,et)|0,k=k+Math.imul(fe,Qe)|0,C=C+Math.imul(fe,et)|0,R=R+Math.imul(ie,ft)|0,k=k+Math.imul(ie,jt)|0,k=k+Math.imul(Q,ft)|0,C=C+Math.imul(Q,jt)|0,R=R+Math.imul(de,ht)|0,k=k+Math.imul(de,Dt)|0,k=k+Math.imul(ke,ht)|0,C=C+Math.imul(ke,Dt)|0,R=R+Math.imul(te,wt)|0,k=k+Math.imul(te,er)|0,k=k+Math.imul(Z,wt)|0,C=C+Math.imul(Z,er)|0,R=R+Math.imul(ue,pt)|0,k=k+Math.imul(ue,Gt)|0,k=k+Math.imul(Ae,pt)|0,C=C+Math.imul(Ae,Gt)|0,R=R+Math.imul(W,xt)|0,k=k+Math.imul(W,$t)|0,k=k+Math.imul(ne,xt)|0,C=C+Math.imul(ne,$t)|0;var rr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(rr>>>26)|0,rr&=67108863,R=Math.imul(Fe,ge),k=Math.imul(Fe,Me),k=k+Math.imul(ze,ge)|0,C=Math.imul(ze,Me),R=R+Math.imul(Ee,Xe)|0,k=k+Math.imul(Ee,ot)|0,k=k+Math.imul(Ie,Xe)|0,C=C+Math.imul(Ie,ot)|0,R=R+Math.imul(ee,st)|0,k=k+Math.imul(ee,rt)|0,k=k+Math.imul(se,st)|0,C=C+Math.imul(se,rt)|0,R=R+Math.imul(U,Qe)|0,k=k+Math.imul(U,et)|0,k=k+Math.imul(ve,Qe)|0,C=C+Math.imul(ve,et)|0,R=R+Math.imul(Y,ft)|0,k=k+Math.imul(Y,jt)|0,k=k+Math.imul(fe,ft)|0,C=C+Math.imul(fe,jt)|0,R=R+Math.imul(ie,ht)|0,k=k+Math.imul(ie,Dt)|0,k=k+Math.imul(Q,ht)|0,C=C+Math.imul(Q,Dt)|0,R=R+Math.imul(de,wt)|0,k=k+Math.imul(de,er)|0,k=k+Math.imul(ke,wt)|0,C=C+Math.imul(ke,er)|0,R=R+Math.imul(te,pt)|0,k=k+Math.imul(te,Gt)|0,k=k+Math.imul(Z,pt)|0,C=C+Math.imul(Z,Gt)|0,R=R+Math.imul(ue,xt)|0,k=k+Math.imul(ue,$t)|0,k=k+Math.imul(Ae,xt)|0,C=C+Math.imul(Ae,$t)|0,R=R+Math.imul(W,mt)|0,k=k+Math.imul(W,qt)|0,k=k+Math.imul(ne,mt)|0,C=C+Math.imul(ne,qt)|0;var vr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(vr>>>26)|0,vr&=67108863,R=Math.imul(Fe,Xe),k=Math.imul(Fe,ot),k=k+Math.imul(ze,Xe)|0,C=Math.imul(ze,ot),R=R+Math.imul(Ee,st)|0,k=k+Math.imul(Ee,rt)|0,k=k+Math.imul(Ie,st)|0,C=C+Math.imul(Ie,rt)|0,R=R+Math.imul(ee,Qe)|0,k=k+Math.imul(ee,et)|0,k=k+Math.imul(se,Qe)|0,C=C+Math.imul(se,et)|0,R=R+Math.imul(U,ft)|0,k=k+Math.imul(U,jt)|0,k=k+Math.imul(ve,ft)|0,C=C+Math.imul(ve,jt)|0,R=R+Math.imul(Y,ht)|0,k=k+Math.imul(Y,Dt)|0,k=k+Math.imul(fe,ht)|0,C=C+Math.imul(fe,Dt)|0,R=R+Math.imul(ie,wt)|0,k=k+Math.imul(ie,er)|0,k=k+Math.imul(Q,wt)|0,C=C+Math.imul(Q,er)|0,R=R+Math.imul(de,pt)|0,k=k+Math.imul(de,Gt)|0,k=k+Math.imul(ke,pt)|0,C=C+Math.imul(ke,Gt)|0,R=R+Math.imul(te,xt)|0,k=k+Math.imul(te,$t)|0,k=k+Math.imul(Z,xt)|0,C=C+Math.imul(Z,$t)|0,R=R+Math.imul(ue,mt)|0,k=k+Math.imul(ue,qt)|0,k=k+Math.imul(Ae,mt)|0,C=C+Math.imul(Ae,qt)|0;var Dr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,R=Math.imul(Fe,st),k=Math.imul(Fe,rt),k=k+Math.imul(ze,st)|0,C=Math.imul(ze,rt),R=R+Math.imul(Ee,Qe)|0,k=k+Math.imul(Ee,et)|0,k=k+Math.imul(Ie,Qe)|0,C=C+Math.imul(Ie,et)|0,R=R+Math.imul(ee,ft)|0,k=k+Math.imul(ee,jt)|0,k=k+Math.imul(se,ft)|0,C=C+Math.imul(se,jt)|0,R=R+Math.imul(U,ht)|0,k=k+Math.imul(U,Dt)|0,k=k+Math.imul(ve,ht)|0,C=C+Math.imul(ve,Dt)|0,R=R+Math.imul(Y,wt)|0,k=k+Math.imul(Y,er)|0,k=k+Math.imul(fe,wt)|0,C=C+Math.imul(fe,er)|0,R=R+Math.imul(ie,pt)|0,k=k+Math.imul(ie,Gt)|0,k=k+Math.imul(Q,pt)|0,C=C+Math.imul(Q,Gt)|0,R=R+Math.imul(de,xt)|0,k=k+Math.imul(de,$t)|0,k=k+Math.imul(ke,xt)|0,C=C+Math.imul(ke,$t)|0,R=R+Math.imul(te,mt)|0,k=k+Math.imul(te,qt)|0,k=k+Math.imul(Z,mt)|0,C=C+Math.imul(Z,qt)|0;var yr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(yr>>>26)|0,yr&=67108863,R=Math.imul(Fe,Qe),k=Math.imul(Fe,et),k=k+Math.imul(ze,Qe)|0,C=Math.imul(ze,et),R=R+Math.imul(Ee,ft)|0,k=k+Math.imul(Ee,jt)|0,k=k+Math.imul(Ie,ft)|0,C=C+Math.imul(Ie,jt)|0,R=R+Math.imul(ee,ht)|0,k=k+Math.imul(ee,Dt)|0,k=k+Math.imul(se,ht)|0,C=C+Math.imul(se,Dt)|0,R=R+Math.imul(U,wt)|0,k=k+Math.imul(U,er)|0,k=k+Math.imul(ve,wt)|0,C=C+Math.imul(ve,er)|0,R=R+Math.imul(Y,pt)|0,k=k+Math.imul(Y,Gt)|0,k=k+Math.imul(fe,pt)|0,C=C+Math.imul(fe,Gt)|0,R=R+Math.imul(ie,xt)|0,k=k+Math.imul(ie,$t)|0,k=k+Math.imul(Q,xt)|0,C=C+Math.imul(Q,$t)|0,R=R+Math.imul(de,mt)|0,k=k+Math.imul(de,qt)|0,k=k+Math.imul(ke,mt)|0,C=C+Math.imul(ke,qt)|0;var lr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(lr>>>26)|0,lr&=67108863,R=Math.imul(Fe,ft),k=Math.imul(Fe,jt),k=k+Math.imul(ze,ft)|0,C=Math.imul(ze,jt),R=R+Math.imul(Ee,ht)|0,k=k+Math.imul(Ee,Dt)|0,k=k+Math.imul(Ie,ht)|0,C=C+Math.imul(Ie,Dt)|0,R=R+Math.imul(ee,wt)|0,k=k+Math.imul(ee,er)|0,k=k+Math.imul(se,wt)|0,C=C+Math.imul(se,er)|0,R=R+Math.imul(U,pt)|0,k=k+Math.imul(U,Gt)|0,k=k+Math.imul(ve,pt)|0,C=C+Math.imul(ve,Gt)|0,R=R+Math.imul(Y,xt)|0,k=k+Math.imul(Y,$t)|0,k=k+Math.imul(fe,xt)|0,C=C+Math.imul(fe,$t)|0,R=R+Math.imul(ie,mt)|0,k=k+Math.imul(ie,qt)|0,k=k+Math.imul(Q,mt)|0,C=C+Math.imul(Q,qt)|0;var rn=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(rn>>>26)|0,rn&=67108863,R=Math.imul(Fe,ht),k=Math.imul(Fe,Dt),k=k+Math.imul(ze,ht)|0,C=Math.imul(ze,Dt),R=R+Math.imul(Ee,wt)|0,k=k+Math.imul(Ee,er)|0,k=k+Math.imul(Ie,wt)|0,C=C+Math.imul(Ie,er)|0,R=R+Math.imul(ee,pt)|0,k=k+Math.imul(ee,Gt)|0,k=k+Math.imul(se,pt)|0,C=C+Math.imul(se,Gt)|0,R=R+Math.imul(U,xt)|0,k=k+Math.imul(U,$t)|0,k=k+Math.imul(ve,xt)|0,C=C+Math.imul(ve,$t)|0,R=R+Math.imul(Y,mt)|0,k=k+Math.imul(Y,qt)|0,k=k+Math.imul(fe,mt)|0,C=C+Math.imul(fe,qt)|0;var nn=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(nn>>>26)|0,nn&=67108863,R=Math.imul(Fe,wt),k=Math.imul(Fe,er),k=k+Math.imul(ze,wt)|0,C=Math.imul(ze,er),R=R+Math.imul(Ee,pt)|0,k=k+Math.imul(Ee,Gt)|0,k=k+Math.imul(Ie,pt)|0,C=C+Math.imul(Ie,Gt)|0,R=R+Math.imul(ee,xt)|0,k=k+Math.imul(ee,$t)|0,k=k+Math.imul(se,xt)|0,C=C+Math.imul(se,$t)|0,R=R+Math.imul(U,mt)|0,k=k+Math.imul(U,qt)|0,k=k+Math.imul(ve,mt)|0,C=C+Math.imul(ve,qt)|0;var ar=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(ar>>>26)|0,ar&=67108863,R=Math.imul(Fe,pt),k=Math.imul(Fe,Gt),k=k+Math.imul(ze,pt)|0,C=Math.imul(ze,Gt),R=R+Math.imul(Ee,xt)|0,k=k+Math.imul(Ee,$t)|0,k=k+Math.imul(Ie,xt)|0,C=C+Math.imul(Ie,$t)|0,R=R+Math.imul(ee,mt)|0,k=k+Math.imul(ee,qt)|0,k=k+Math.imul(se,mt)|0,C=C+Math.imul(se,qt)|0;var Xr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Xr>>>26)|0,Xr&=67108863,R=Math.imul(Fe,xt),k=Math.imul(Fe,$t),k=k+Math.imul(ze,xt)|0,C=Math.imul(ze,$t),R=R+Math.imul(Ee,mt)|0,k=k+Math.imul(Ee,qt)|0,k=k+Math.imul(Ie,mt)|0,C=C+Math.imul(Ie,qt)|0;var Wr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,R=Math.imul(Fe,mt),k=Math.imul(Fe,qt),k=k+Math.imul(ze,mt)|0,C=Math.imul(ze,qt);var Vr=($+R|0)+((k&8191)<<13)|0;return $=(C+(k>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,L[0]=St,L[1]=Tt,L[2]=be,L[3]=Ne,L[4]=Le,L[5]=Je,L[6]=at,L[7]=Mt,L[8]=rr,L[9]=vr,L[10]=Dr,L[11]=yr,L[12]=lr,L[13]=rn,L[14]=nn,L[15]=ar,L[16]=Xr,L[17]=Wr,L[18]=Vr,$!==0&&(L[19]=$,_.length++),_};Math.imul||(w=h);function y(H,M,T){T.negative=M.negative^H.negative,T.length=H.length+M.length;for(var _=0,A=0,P=0;P>>26)|0,A+=L>>>26,L&=67108863}T.words[P]=$,_=L,L=A}return _!==0?T.words[P]=_:T.length--,T.strip()}function S(H,M,T){var _=new E;return _.mulp(H,M,T)}t.prototype.mulTo=function(M,T){var _,A=this.length+M.length;return this.length===10&&M.length===10?_=w(this,M,T):A<63?_=h(this,M,T):A<1024?_=y(this,M,T):_=S(this,M,T),_};function E(H,M){this.x=H,this.y=M}E.prototype.makeRBT=function(M){for(var T=new Array(M),_=t.prototype._countBits(M)-1,A=0;A>=1;return A},E.prototype.permute=function(M,T,_,A,P,L){for(var $=0;$>>1)P++;return 1<>>13,_[2*L+1]=P&8191,P=P>>>13;for(L=2*T;L>=26,T+=A/67108864|0,T+=P>>>26,this.words[_]=P&67108863}return T!==0&&(this.words[_]=T,this.length++),this},t.prototype.muln=function(M){return this.clone().imuln(M)},t.prototype.sqr=function(){return this.mul(this)},t.prototype.isqr=function(){return this.imul(this.clone())},t.prototype.pow=function(M){var T=v(M);if(T.length===0)return new t(1);for(var _=this,A=0;A=0);var T=M%26,_=(M-T)/26,A=67108863>>>26-T<<26-T,P;if(T!==0){var L=0;for(P=0;P>>26-T}L&&(this.words[P]=L,this.length++)}if(_!==0){for(P=this.length-1;P>=0;P--)this.words[P+_]=this.words[P];for(P=0;P<_;P++)this.words[P]=0;this.length+=_}return this.strip()},t.prototype.ishln=function(M){return u(this.negative===0),this.iushln(M)},t.prototype.iushrn=function(M,T,_){u(typeof M=="number"&&M>=0);var A;T?A=(T-T%26)/26:A=0;var P=M%26,L=Math.min((M-P)/26,this.length),$=67108863^67108863>>>P<L)for(this.length-=L,k=0;k=0&&(C!==0||k>=A);k--){var O=this.words[k]|0;this.words[k]=C<<26-P|O>>>P,C=O&$}return R&&C!==0&&(R.words[R.length++]=C),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},t.prototype.ishrn=function(M,T,_){return u(this.negative===0),this.iushrn(M,T,_)},t.prototype.shln=function(M){return this.clone().ishln(M)},t.prototype.ushln=function(M){return this.clone().iushln(M)},t.prototype.shrn=function(M){return this.clone().ishrn(M)},t.prototype.ushrn=function(M){return this.clone().iushrn(M)},t.prototype.testn=function(M){u(typeof M=="number"&&M>=0);var T=M%26,_=(M-T)/26,A=1<=0);var T=M%26,_=(M-T)/26;if(u(this.negative===0,"imaskn works only with positive numbers"),this.length<=_)return this;if(T!==0&&_++,this.length=Math.min(_,this.length),T!==0){var A=67108863^67108863>>>T<=67108864;T++)this.words[T]-=67108864,T===this.length-1?this.words[T+1]=1:this.words[T+1]++;return this.length=Math.max(this.length,T+1),this},t.prototype.isubn=function(M){if(u(typeof M=="number"),u(M<67108864),M<0)return this.iaddn(-M);if(this.negative!==0)return this.negative=0,this.iaddn(M),this.negative=1,this;if(this.words[0]-=M,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var T=0;T>26)-(R/67108864|0),this.words[P+_]=L&67108863}for(;P>26,this.words[P+_]=L&67108863;if($===0)return this.strip();for(u($===-1),$=0,P=0;P>26,this.words[P]=L&67108863;return this.negative=1,this.strip()},t.prototype._wordDiv=function(M,T){var _=this.length-M.length,A=this.clone(),P=M,L=P.words[P.length-1]|0,$=this._countBits(L);_=26-$,_!==0&&(P=P.ushln(_),A.iushln(_),L=P.words[P.length-1]|0);var R=A.length-P.length,k;if(T!=="mod"){k=new t(null),k.length=R+1,k.words=new Array(k.length);for(var C=0;C=0;W--){var ne=(A.words[P.length+W]|0)*67108864+(A.words[P.length+W-1]|0);for(ne=Math.min(ne/L|0,67108863),A._ishlnsubmul(P,ne,W);A.negative!==0;)ne--,A.negative=0,A._ishlnsubmul(P,1,W),A.isZero()||(A.negative^=1);k&&(k.words[W]=ne)}return k&&k.strip(),A.strip(),T!=="div"&&_!==0&&A.iushrn(_),{div:k||null,mod:A}},t.prototype.divmod=function(M,T,_){if(u(!M.isZero()),this.isZero())return{div:new t(0),mod:new t(0)};var A,P,L;return this.negative!==0&&M.negative===0?(L=this.neg().divmod(M,T),T!=="mod"&&(A=L.div.neg()),T!=="div"&&(P=L.mod.neg(),_&&P.negative!==0&&P.iadd(M)),{div:A,mod:P}):this.negative===0&&M.negative!==0?(L=this.divmod(M.neg(),T),T!=="mod"&&(A=L.div.neg()),{div:A,mod:L.mod}):this.negative&M.negative?(L=this.neg().divmod(M.neg(),T),T!=="div"&&(P=L.mod.neg(),_&&P.negative!==0&&P.isub(M)),{div:L.div,mod:P}):M.length>this.length||this.cmp(M)<0?{div:new t(0),mod:this}:M.length===1?T==="div"?{div:this.divn(M.words[0]),mod:null}:T==="mod"?{div:null,mod:new t(this.modn(M.words[0]))}:{div:this.divn(M.words[0]),mod:new t(this.modn(M.words[0]))}:this._wordDiv(M,T)},t.prototype.div=function(M){return this.divmod(M,"div",!1).div},t.prototype.mod=function(M){return this.divmod(M,"mod",!1).mod},t.prototype.umod=function(M){return this.divmod(M,"mod",!0).mod},t.prototype.divRound=function(M){var T=this.divmod(M);if(T.mod.isZero())return T.div;var _=T.div.negative!==0?T.mod.isub(M):T.mod,A=M.ushrn(1),P=M.andln(1),L=_.cmp(A);return L<0||P===1&&L===0?T.div:T.div.negative!==0?T.div.isubn(1):T.div.iaddn(1)},t.prototype.modn=function(M){u(M<=67108863);for(var T=(1<<26)%M,_=0,A=this.length-1;A>=0;A--)_=(T*_+(this.words[A]|0))%M;return _},t.prototype.idivn=function(M){u(M<=67108863);for(var T=0,_=this.length-1;_>=0;_--){var A=(this.words[_]|0)+T*67108864;this.words[_]=A/M|0,T=A%M}return this.strip()},t.prototype.divn=function(M){return this.clone().idivn(M)},t.prototype.egcd=function(M){u(M.negative===0),u(!M.isZero());var T=this,_=M.clone();T.negative!==0?T=T.umod(M):T=T.clone();for(var A=new t(1),P=new t(0),L=new t(0),$=new t(1),R=0;T.isEven()&&_.isEven();)T.iushrn(1),_.iushrn(1),++R;for(var k=_.clone(),C=T.clone();!T.isZero();){for(var O=0,W=1;!(T.words[0]&W)&&O<26;++O,W<<=1);if(O>0)for(T.iushrn(O);O-- >0;)(A.isOdd()||P.isOdd())&&(A.iadd(k),P.isub(C)),A.iushrn(1),P.iushrn(1);for(var ne=0,he=1;!(_.words[0]&he)&&ne<26;++ne,he<<=1);if(ne>0)for(_.iushrn(ne);ne-- >0;)(L.isOdd()||$.isOdd())&&(L.iadd(k),$.isub(C)),L.iushrn(1),$.iushrn(1);T.cmp(_)>=0?(T.isub(_),A.isub(L),P.isub($)):(_.isub(T),L.isub(A),$.isub(P))}return{a:L,b:$,gcd:_.iushln(R)}},t.prototype._invmp=function(M){u(M.negative===0),u(!M.isZero());var T=this,_=M.clone();T.negative!==0?T=T.umod(M):T=T.clone();for(var A=new t(1),P=new t(0),L=_.clone();T.cmpn(1)>0&&_.cmpn(1)>0;){for(var $=0,R=1;!(T.words[0]&R)&&$<26;++$,R<<=1);if($>0)for(T.iushrn($);$-- >0;)A.isOdd()&&A.iadd(L),A.iushrn(1);for(var k=0,C=1;!(_.words[0]&C)&&k<26;++k,C<<=1);if(k>0)for(_.iushrn(k);k-- >0;)P.isOdd()&&P.iadd(L),P.iushrn(1);T.cmp(_)>=0?(T.isub(_),A.isub(P)):(_.isub(T),P.isub(A))}var O;return T.cmpn(1)===0?O=A:O=P,O.cmpn(0)<0&&O.iadd(M),O},t.prototype.gcd=function(M){if(this.isZero())return M.abs();if(M.isZero())return this.abs();var T=this.clone(),_=M.clone();T.negative=0,_.negative=0;for(var A=0;T.isEven()&&_.isEven();A++)T.iushrn(1),_.iushrn(1);do{for(;T.isEven();)T.iushrn(1);for(;_.isEven();)_.iushrn(1);var P=T.cmp(_);if(P<0){var L=T;T=_,_=L}else if(P===0||_.cmpn(1)===0)break;T.isub(_)}while(!0);return _.iushln(A)},t.prototype.invm=function(M){return this.egcd(M).a.umod(M)},t.prototype.isEven=function(){return(this.words[0]&1)===0},t.prototype.isOdd=function(){return(this.words[0]&1)===1},t.prototype.andln=function(M){return this.words[0]&M},t.prototype.bincn=function(M){u(typeof M=="number");var T=M%26,_=(M-T)/26,A=1<>>26,$&=67108863,this.words[L]=$}return P!==0&&(this.words[L]=P,this.length++),this},t.prototype.isZero=function(){return this.length===1&&this.words[0]===0},t.prototype.cmpn=function(M){var T=M<0;if(this.negative!==0&&!T)return-1;if(this.negative===0&&T)return 1;this.strip();var _;if(this.length>1)_=1;else{T&&(M=-M),u(M<=67108863,"Number is too big");var A=this.words[0]|0;_=A===M?0:AM.length)return 1;if(this.length=0;_--){var A=this.words[_]|0,P=M.words[_]|0;if(A!==P){AP&&(T=1);break}}return T},t.prototype.gtn=function(M){return this.cmpn(M)===1},t.prototype.gt=function(M){return this.cmp(M)===1},t.prototype.gten=function(M){return this.cmpn(M)>=0},t.prototype.gte=function(M){return this.cmp(M)>=0},t.prototype.ltn=function(M){return this.cmpn(M)===-1},t.prototype.lt=function(M){return this.cmp(M)===-1},t.prototype.lten=function(M){return this.cmpn(M)<=0},t.prototype.lte=function(M){return this.cmp(M)<=0},t.prototype.eqn=function(M){return this.cmpn(M)===0},t.prototype.eq=function(M){return this.cmp(M)===0},t.red=function(M){return new V(M)},t.prototype.toRed=function(M){return u(!this.red,"Already a number in reduction context"),u(this.negative===0,"red works only with positives"),M.convertTo(this)._forceRed(M)},t.prototype.fromRed=function(){return u(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},t.prototype._forceRed=function(M){return this.red=M,this},t.prototype.forceRed=function(M){return u(!this.red,"Already a number in reduction context"),this._forceRed(M)},t.prototype.redAdd=function(M){return u(this.red,"redAdd works only with red numbers"),this.red.add(this,M)},t.prototype.redIAdd=function(M){return u(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,M)},t.prototype.redSub=function(M){return u(this.red,"redSub works only with red numbers"),this.red.sub(this,M)},t.prototype.redISub=function(M){return u(this.red,"redISub works only with red numbers"),this.red.isub(this,M)},t.prototype.redShl=function(M){return u(this.red,"redShl works only with red numbers"),this.red.shl(this,M)},t.prototype.redMul=function(M){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,M),this.red.mul(this,M)},t.prototype.redIMul=function(M){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,M),this.red.imul(this,M)},t.prototype.redSqr=function(){return u(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},t.prototype.redISqr=function(){return u(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},t.prototype.redSqrt=function(){return u(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},t.prototype.redInvm=function(){return u(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},t.prototype.redNeg=function(){return u(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},t.prototype.redPow=function(M){return u(this.red&&!M.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,M)};var I={k256:null,p224:null,p192:null,p25519:null};function F(H,M){this.name=H,this.p=new t(M,16),this.n=this.p.bitLength(),this.k=new t(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}F.prototype._tmp=function(){var M=new t(null);return M.words=new Array(Math.ceil(this.n/13)),M},F.prototype.ireduce=function(M){var T=M,_;do this.split(T,this.tmp),T=this.imulK(T),T=T.iadd(this.tmp),_=T.bitLength();while(_>this.n);var A=_0?T.isub(this.p):T.strip!==void 0?T.strip():T._strip(),T},F.prototype.split=function(M,T){M.iushrn(this.n,0,T)},F.prototype.imulK=function(M){return M.imul(this.k)};function B(){F.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}s(B,F),B.prototype.split=function(M,T){for(var _=4194303,A=Math.min(M.length,9),P=0;P>>22,L=$}L>>>=22,M.words[P-10]=L,L===0&&M.length>10?M.length-=10:M.length-=9},B.prototype.imulK=function(M){M.words[M.length]=0,M.words[M.length+1]=0,M.length+=2;for(var T=0,_=0;_>>=26,M.words[_]=P,T=A}return T!==0&&(M.words[M.length++]=T),M},t._prime=function(M){if(I[M])return I[M];var T;if(M==="k256")T=new B;else if(M==="p224")T=new j;else if(M==="p192")T=new X;else if(M==="p25519")T=new G;else throw new Error("Unknown prime "+M);return I[M]=T,T};function V(H){if(typeof H=="string"){var M=t._prime(H);this.m=M.p,this.prime=M}else u(H.gtn(1),"modulus must be greater than 1"),this.m=H,this.prime=null}V.prototype._verify1=function(M){u(M.negative===0,"red works only with positives"),u(M.red,"red works only with red numbers")},V.prototype._verify2=function(M,T){u((M.negative|T.negative)===0,"red works only with positives"),u(M.red&&M.red===T.red,"red works only with red numbers")},V.prototype.imod=function(M){return this.prime?this.prime.ireduce(M)._forceRed(this):M.umod(this.m)._forceRed(this)},V.prototype.neg=function(M){return M.isZero()?M.clone():this.m.sub(M)._forceRed(this)},V.prototype.add=function(M,T){this._verify2(M,T);var _=M.add(T);return _.cmp(this.m)>=0&&_.isub(this.m),_._forceRed(this)},V.prototype.iadd=function(M,T){this._verify2(M,T);var _=M.iadd(T);return _.cmp(this.m)>=0&&_.isub(this.m),_},V.prototype.sub=function(M,T){this._verify2(M,T);var _=M.sub(T);return _.cmpn(0)<0&&_.iadd(this.m),_._forceRed(this)},V.prototype.isub=function(M,T){this._verify2(M,T);var _=M.isub(T);return _.cmpn(0)<0&&_.iadd(this.m),_},V.prototype.shl=function(M,T){return this._verify1(M),this.imod(M.ushln(T))},V.prototype.imul=function(M,T){return this._verify2(M,T),this.imod(M.imul(T))},V.prototype.mul=function(M,T){return this._verify2(M,T),this.imod(M.mul(T))},V.prototype.isqr=function(M){return this.imul(M,M.clone())},V.prototype.sqr=function(M){return this.mul(M,M)},V.prototype.sqrt=function(M){if(M.isZero())return M.clone();var T=this.m.andln(3);if(u(T%2===1),T===3){var _=this.m.add(new t(1)).iushrn(2);return this.pow(M,_)}for(var A=this.m.subn(1),P=0;!A.isZero()&&A.andln(1)===0;)P++,A.iushrn(1);u(!A.isZero());var L=new t(1).toRed(this),$=L.redNeg(),R=this.m.subn(1).iushrn(1),k=this.m.bitLength();for(k=new t(2*k*k).toRed(this);this.pow(k,R).cmp($)!==0;)k.redIAdd($);for(var C=this.pow(k,A),O=this.pow(M,A.addn(1).iushrn(1)),W=this.pow(M,A),ne=P;W.cmp(L)!==0;){for(var he=W,ue=0;he.cmp(L)!==0;ue++)he=he.redSqr();u(ue=0;P--){for(var C=T.words[P],O=k-1;O>=0;O--){var W=C>>O&1;if(L!==A[0]&&(L=this.sqr(L)),W===0&&$===0){R=0;continue}$<<=1,$|=W,R++,!(R!==_&&(P!==0||O!==0))&&(L=this.mul(L,A[$]),R=0,$=0)}k=26}return L},V.prototype.convertTo=function(M){var T=M.umod(this.m);return T===M?T.clone():T},V.prototype.convertFrom=function(M){var T=M.clone();return T.red=null,T},t.mont=function(M){return new J(M)};function J(H){V.call(this,H),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new t(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}s(J,V),J.prototype.convertTo=function(M){return this.imod(M.ushln(this.shift))},J.prototype.convertFrom=function(M){var T=this.imod(M.mul(this.rinv));return T.red=null,T},J.prototype.imul=function(M,T){if(M.isZero()||T.isZero())return M.words[0]=0,M.length=1,M;var _=M.imul(T),A=_.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),P=_.isub(A).iushrn(this.shift),L=P;return P.cmp(this.m)>=0?L=P.isub(this.m):P.cmpn(0)<0&&(L=P.iadd(this.m)),L._forceRed(this)},J.prototype.mul=function(M,T){if(M.isZero()||T.isZero())return new t(0)._forceRed(this);var _=M.mul(T),A=_.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),P=_.isub(A).iushrn(this.shift),L=P;return P.cmp(this.m)>=0?L=P.isub(this.m):P.cmpn(0)<0&&(L=P.iadd(this.m)),L._forceRed(this)},J.prototype.invm=function(M){var T=this.imod(M._invmp(this.m).mul(this.r2));return T._forceRed(this)}})(typeof d>"u"||d,void 0)},{buffer:188}],185:[function(e,d,m){m.byteLength=i,m.toByteArray=l,m.fromByteArray=v;for(var f=[],c=[],u=typeof Uint8Array<"u"?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,n=s.length;t0)throw new Error("Invalid string. Length must be a multiple of 4");var y=h.indexOf("=");y===-1&&(y=w);var S=y===w?0:4-y%4;return[y,S]}function i(h){var w=r(h),y=w[0],S=w[1];return(y+S)*3/4-S}function o(h,w,y){return(w+y)*3/4-y}function l(h){var w,y=r(h),S=y[0],E=y[1],I=new u(o(h,S,E)),F=0,B=E>0?S-4:S,j;for(j=0;j>16&255,I[F++]=w>>8&255,I[F++]=w&255;return E===2&&(w=c[h.charCodeAt(j)]<<2|c[h.charCodeAt(j+1)]>>4,I[F++]=w&255),E===1&&(w=c[h.charCodeAt(j)]<<10|c[h.charCodeAt(j+1)]<<4|c[h.charCodeAt(j+2)]>>2,I[F++]=w>>8&255,I[F++]=w&255),I}function a(h){return f[h>>18&63]+f[h>>12&63]+f[h>>6&63]+f[h&63]}function g(h,w,y){for(var S,E=[],I=w;IB?B:F+I));return S===1?(w=h[y-1],E.push(f[w>>2]+f[w<<4&63]+"==")):S===2&&(w=(h[y-2]<<8)+h[y-1],E.push(f[w>>10]+f[w>>4&63]+f[w<<2&63]+"=")),E.join("")}},{}],186:[function(e,d,m){(function(f,c){function u(T,_){if(!T)throw new Error(_||"Assertion failed")}function s(T,_){T.super_=_;var A=function(){};A.prototype=_.prototype,T.prototype=new A,T.prototype.constructor=T}function t(T,_,A){if(t.isBN(T))return T;this.negative=0,this.words=null,this.length=0,this.red=null,T!==null&&((_==="le"||_==="be")&&(A=_,_=10),this._init(T||0,_||10,A||"be"))}typeof f=="object"?f.exports=t:c.BN=t,t.BN=t,t.wordSize=26;var n;try{typeof window<"u"&&typeof window.Buffer<"u"?n=window.Buffer:n=e("buffer").Buffer}catch{}t.isBN=function(_){return _ instanceof t?!0:_!==null&&typeof _=="object"&&_.constructor.wordSize===t.wordSize&&Array.isArray(_.words)},t.max=function(_,A){return _.cmp(A)>0?_:A},t.min=function(_,A){return _.cmp(A)<0?_:A},t.prototype._init=function(_,A,P){if(typeof _=="number")return this._initNumber(_,A,P);if(typeof _=="object")return this._initArray(_,A,P);A==="hex"&&(A=16),u(A===(A|0)&&A>=2&&A<=36),_=_.toString().replace(/\s+/g,"");var L=0;_[0]==="-"&&(L++,this.negative=1),L<_.length&&(A===16?this._parseHex(_,L,P):(this._parseBase(_,A,L),P==="le"&&this._initArray(this.toArray(),A,P)))},t.prototype._initNumber=function(_,A,P){_<0&&(this.negative=1,_=-_),_<67108864?(this.words=[_&67108863],this.length=1):_<4503599627370496?(this.words=[_&67108863,_/67108864&67108863],this.length=2):(u(_<9007199254740992),this.words=[_&67108863,_/67108864&67108863,1],this.length=3),P==="le"&&this._initArray(this.toArray(),A,P)},t.prototype._initArray=function(_,A,P){if(u(typeof _.length=="number"),_.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(_.length/3),this.words=new Array(this.length);for(var L=0;L=0;L-=3)R=_[L]|_[L-1]<<8|_[L-2]<<16,this.words[$]|=R<>>26-k&67108863,k+=24,k>=26&&(k-=26,$++);else if(P==="le")for(L=0,$=0;L<_.length;L+=3)R=_[L]|_[L+1]<<8|_[L+2]<<16,this.words[$]|=R<>>26-k&67108863,k+=24,k>=26&&(k-=26,$++);return this._strip()};function r(T,_){var A=T.charCodeAt(_);if(A>=48&&A<=57)return A-48;if(A>=65&&A<=70)return A-55;if(A>=97&&A<=102)return A-87;u(!1,"Invalid character in "+T)}function i(T,_,A){var P=r(T,A);return A-1>=_&&(P|=r(T,A-1)<<4),P}t.prototype._parseHex=function(_,A,P){this.length=Math.ceil((_.length-A)/6),this.words=new Array(this.length);for(var L=0;L=A;L-=2)k=i(_,A,L)<<$,this.words[R]|=k&67108863,$>=18?($-=18,R+=1,this.words[R]|=k>>>26):$+=8;else{var C=_.length-A;for(L=C%2===0?A+1:A;L<_.length;L+=2)k=i(_,A,L)<<$,this.words[R]|=k&67108863,$>=18?($-=18,R+=1,this.words[R]|=k>>>26):$+=8}this._strip()};function o(T,_,A,P){for(var L=0,$=0,R=Math.min(T.length,A),k=_;k=49?$=C-49+10:C>=17?$=C-17+10:$=C,u(C>=0&&$1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},t.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{t.prototype[Symbol.for("nodejs.util.inspect.custom")]=a}catch{t.prototype.inspect=a}else t.prototype.inspect=a;function a(){return(this.red?""}var g=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],v=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];t.prototype.toString=function(_,A){_=_||10,A=A|0||1;var P;if(_===16||_==="hex"){P="";for(var L=0,$=0,R=0;R>>24-L&16777215,L+=2,L>=26&&(L-=26,R--),$!==0||R!==this.length-1?P=g[6-C.length]+C+P:P=C+P}for($!==0&&(P=$.toString(16)+P);P.length%A!==0;)P="0"+P;return this.negative!==0&&(P="-"+P),P}if(_===(_|0)&&_>=2&&_<=36){var O=v[_],W=h[_];P="";var ne=this.clone();for(ne.negative=0;!ne.isZero();){var he=ne.modrn(W).toString(_);ne=ne.idivn(W),ne.isZero()?P=he+P:P=g[O-he.length]+he+P}for(this.isZero()&&(P="0"+P);P.length%A!==0;)P="0"+P;return this.negative!==0&&(P="-"+P),P}u(!1,"Base should be between 2 and 36")},t.prototype.toNumber=function(){var _=this.words[0];return this.length===2?_+=this.words[1]*67108864:this.length===3&&this.words[2]===1?_+=4503599627370496+this.words[1]*67108864:this.length>2&&u(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-_:_},t.prototype.toJSON=function(){return this.toString(16,2)},n&&(t.prototype.toBuffer=function(_,A){return this.toArrayLike(n,_,A)}),t.prototype.toArray=function(_,A){return this.toArrayLike(Array,_,A)};var w=function(_,A){return _.allocUnsafe?_.allocUnsafe(A):new _(A)};t.prototype.toArrayLike=function(_,A,P){this._strip();var L=this.byteLength(),$=P||Math.max(1,L);u(L<=$,"byte array longer than desired length"),u($>0,"Requested array length <= 0");var R=w(_,$),k=A==="le"?"LE":"BE";return this["_toArrayLike"+k](R,L),R},t.prototype._toArrayLikeLE=function(_,A){for(var P=0,L=0,$=0,R=0;$>8&255),P<_.length&&(_[P++]=k>>16&255),R===6?(P<_.length&&(_[P++]=k>>24&255),L=0,R=0):(L=k>>>24,R+=2)}if(P<_.length)for(_[P++]=L;P<_.length;)_[P++]=0},t.prototype._toArrayLikeBE=function(_,A){for(var P=_.length-1,L=0,$=0,R=0;$=0&&(_[P--]=k>>8&255),P>=0&&(_[P--]=k>>16&255),R===6?(P>=0&&(_[P--]=k>>24&255),L=0,R=0):(L=k>>>24,R+=2)}if(P>=0)for(_[P--]=L;P>=0;)_[P--]=0},Math.clz32?t.prototype._countBits=function(_){return 32-Math.clz32(_)}:t.prototype._countBits=function(_){var A=_,P=0;return A>=4096&&(P+=13,A>>>=13),A>=64&&(P+=7,A>>>=7),A>=8&&(P+=4,A>>>=4),A>=2&&(P+=2,A>>>=2),P+A},t.prototype._zeroBits=function(_){if(_===0)return 26;var A=_,P=0;return A&8191||(P+=13,A>>>=13),A&127||(P+=7,A>>>=7),A&15||(P+=4,A>>>=4),A&3||(P+=2,A>>>=2),A&1||P++,P},t.prototype.bitLength=function(){var _=this.words[this.length-1],A=this._countBits(_);return(this.length-1)*26+A};function y(T){for(var _=new Array(T.bitLength()),A=0;A<_.length;A++){var P=A/26|0,L=A%26;_[A]=T.words[P]>>>L&1}return _}t.prototype.zeroBits=function(){if(this.isZero())return 0;for(var _=0,A=0;A_.length?this.clone().ior(_):_.clone().ior(this)},t.prototype.uor=function(_){return this.length>_.length?this.clone().iuor(_):_.clone().iuor(this)},t.prototype.iuand=function(_){var A;this.length>_.length?A=_:A=this;for(var P=0;P_.length?this.clone().iand(_):_.clone().iand(this)},t.prototype.uand=function(_){return this.length>_.length?this.clone().iuand(_):_.clone().iuand(this)},t.prototype.iuxor=function(_){var A,P;this.length>_.length?(A=this,P=_):(A=_,P=this);for(var L=0;L_.length?this.clone().ixor(_):_.clone().ixor(this)},t.prototype.uxor=function(_){return this.length>_.length?this.clone().iuxor(_):_.clone().iuxor(this)},t.prototype.inotn=function(_){u(typeof _=="number"&&_>=0);var A=Math.ceil(_/26)|0,P=_%26;this._expand(A),P>0&&A--;for(var L=0;L0&&(this.words[L]=~this.words[L]&67108863>>26-P),this._strip()},t.prototype.notn=function(_){return this.clone().inotn(_)},t.prototype.setn=function(_,A){u(typeof _=="number"&&_>=0);var P=_/26|0,L=_%26;return this._expand(P+1),A?this.words[P]=this.words[P]|1<_.length?(P=this,L=_):(P=_,L=this);for(var $=0,R=0;R>>26;for(;$!==0&&R>>26;if(this.length=P.length,$!==0)this.words[this.length]=$,this.length++;else if(P!==this)for(;R_.length?this.clone().iadd(_):_.clone().iadd(this)},t.prototype.isub=function(_){if(_.negative!==0){_.negative=0;var A=this.iadd(_);return _.negative=1,A._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(_),this.negative=1,this._normSign();var P=this.cmp(_);if(P===0)return this.negative=0,this.length=1,this.words[0]=0,this;var L,$;P>0?(L=this,$=_):(L=_,$=this);for(var R=0,k=0;k<$.length;k++)A=(L.words[k]|0)-($.words[k]|0)+R,R=A>>26,this.words[k]=A&67108863;for(;R!==0&&k>26,this.words[k]=A&67108863;if(R===0&&k>>26,ne=C&67108863,he=Math.min(O,_.length-1),ue=Math.max(0,O-T.length+1);ue<=he;ue++){var Ae=O-ue|0;L=T.words[Ae]|0,$=_.words[ue]|0,R=L*$+ne,W+=R/67108864|0,ne=R&67108863}A.words[O]=ne|0,C=W|0}return C!==0?A.words[O]=C|0:A.length--,A._strip()}var E=function(_,A,P){var L=_.words,$=A.words,R=P.words,k=0,C,O,W,ne=L[0]|0,he=ne&8191,ue=ne>>>13,Ae=L[1]|0,pe=Ae&8191,te=Ae>>>13,Z=L[2]|0,q=Z&8191,de=Z>>>13,ke=L[3]|0,oe=ke&8191,ie=ke>>>13,Q=L[4]|0,z=Q&8191,Y=Q>>>13,fe=L[5]|0,we=fe&8191,U=fe>>>13,ve=L[6]|0,Se=ve&8191,ee=ve>>>13,se=L[7]|0,me=se&8191,Ee=se>>>13,Ie=L[8]|0,Ce=Ie&8191,Fe=Ie>>>13,ze=L[9]|0,je=ze&8191,ge=ze>>>13,Me=$[0]|0,Be=Me&8191,Xe=Me>>>13,ot=$[1]|0,ct=ot&8191,st=ot>>>13,rt=$[2]|0,bt=rt&8191,Qe=rt>>>13,et=$[3]|0,_t=et&8191,ft=et>>>13,jt=$[4]|0,It=jt&8191,ht=jt>>>13,Dt=$[5]|0,Ut=Dt&8191,wt=Dt>>>13,er=$[6]|0,Kt=er&8191,pt=er>>>13,Gt=$[7]|0,kt=Gt&8191,xt=Gt>>>13,$t=$[8]|0,Qt=$t&8191,mt=$t>>>13,qt=$[9]|0,St=qt&8191,Tt=qt>>>13;P.negative=_.negative^A.negative,P.length=19,C=Math.imul(he,Be),O=Math.imul(he,Xe),O=O+Math.imul(ue,Be)|0,W=Math.imul(ue,Xe);var be=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(be>>>26)|0,be&=67108863,C=Math.imul(pe,Be),O=Math.imul(pe,Xe),O=O+Math.imul(te,Be)|0,W=Math.imul(te,Xe),C=C+Math.imul(he,ct)|0,O=O+Math.imul(he,st)|0,O=O+Math.imul(ue,ct)|0,W=W+Math.imul(ue,st)|0;var Ne=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,C=Math.imul(q,Be),O=Math.imul(q,Xe),O=O+Math.imul(de,Be)|0,W=Math.imul(de,Xe),C=C+Math.imul(pe,ct)|0,O=O+Math.imul(pe,st)|0,O=O+Math.imul(te,ct)|0,W=W+Math.imul(te,st)|0,C=C+Math.imul(he,bt)|0,O=O+Math.imul(he,Qe)|0,O=O+Math.imul(ue,bt)|0,W=W+Math.imul(ue,Qe)|0;var Le=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Le>>>26)|0,Le&=67108863,C=Math.imul(oe,Be),O=Math.imul(oe,Xe),O=O+Math.imul(ie,Be)|0,W=Math.imul(ie,Xe),C=C+Math.imul(q,ct)|0,O=O+Math.imul(q,st)|0,O=O+Math.imul(de,ct)|0,W=W+Math.imul(de,st)|0,C=C+Math.imul(pe,bt)|0,O=O+Math.imul(pe,Qe)|0,O=O+Math.imul(te,bt)|0,W=W+Math.imul(te,Qe)|0,C=C+Math.imul(he,_t)|0,O=O+Math.imul(he,ft)|0,O=O+Math.imul(ue,_t)|0,W=W+Math.imul(ue,ft)|0;var Je=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Je>>>26)|0,Je&=67108863,C=Math.imul(z,Be),O=Math.imul(z,Xe),O=O+Math.imul(Y,Be)|0,W=Math.imul(Y,Xe),C=C+Math.imul(oe,ct)|0,O=O+Math.imul(oe,st)|0,O=O+Math.imul(ie,ct)|0,W=W+Math.imul(ie,st)|0,C=C+Math.imul(q,bt)|0,O=O+Math.imul(q,Qe)|0,O=O+Math.imul(de,bt)|0,W=W+Math.imul(de,Qe)|0,C=C+Math.imul(pe,_t)|0,O=O+Math.imul(pe,ft)|0,O=O+Math.imul(te,_t)|0,W=W+Math.imul(te,ft)|0,C=C+Math.imul(he,It)|0,O=O+Math.imul(he,ht)|0,O=O+Math.imul(ue,It)|0,W=W+Math.imul(ue,ht)|0;var at=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(at>>>26)|0,at&=67108863,C=Math.imul(we,Be),O=Math.imul(we,Xe),O=O+Math.imul(U,Be)|0,W=Math.imul(U,Xe),C=C+Math.imul(z,ct)|0,O=O+Math.imul(z,st)|0,O=O+Math.imul(Y,ct)|0,W=W+Math.imul(Y,st)|0,C=C+Math.imul(oe,bt)|0,O=O+Math.imul(oe,Qe)|0,O=O+Math.imul(ie,bt)|0,W=W+Math.imul(ie,Qe)|0,C=C+Math.imul(q,_t)|0,O=O+Math.imul(q,ft)|0,O=O+Math.imul(de,_t)|0,W=W+Math.imul(de,ft)|0,C=C+Math.imul(pe,It)|0,O=O+Math.imul(pe,ht)|0,O=O+Math.imul(te,It)|0,W=W+Math.imul(te,ht)|0,C=C+Math.imul(he,Ut)|0,O=O+Math.imul(he,wt)|0,O=O+Math.imul(ue,Ut)|0,W=W+Math.imul(ue,wt)|0;var Mt=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,C=Math.imul(Se,Be),O=Math.imul(Se,Xe),O=O+Math.imul(ee,Be)|0,W=Math.imul(ee,Xe),C=C+Math.imul(we,ct)|0,O=O+Math.imul(we,st)|0,O=O+Math.imul(U,ct)|0,W=W+Math.imul(U,st)|0,C=C+Math.imul(z,bt)|0,O=O+Math.imul(z,Qe)|0,O=O+Math.imul(Y,bt)|0,W=W+Math.imul(Y,Qe)|0,C=C+Math.imul(oe,_t)|0,O=O+Math.imul(oe,ft)|0,O=O+Math.imul(ie,_t)|0,W=W+Math.imul(ie,ft)|0,C=C+Math.imul(q,It)|0,O=O+Math.imul(q,ht)|0,O=O+Math.imul(de,It)|0,W=W+Math.imul(de,ht)|0,C=C+Math.imul(pe,Ut)|0,O=O+Math.imul(pe,wt)|0,O=O+Math.imul(te,Ut)|0,W=W+Math.imul(te,wt)|0,C=C+Math.imul(he,Kt)|0,O=O+Math.imul(he,pt)|0,O=O+Math.imul(ue,Kt)|0,W=W+Math.imul(ue,pt)|0;var rr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(rr>>>26)|0,rr&=67108863,C=Math.imul(me,Be),O=Math.imul(me,Xe),O=O+Math.imul(Ee,Be)|0,W=Math.imul(Ee,Xe),C=C+Math.imul(Se,ct)|0,O=O+Math.imul(Se,st)|0,O=O+Math.imul(ee,ct)|0,W=W+Math.imul(ee,st)|0,C=C+Math.imul(we,bt)|0,O=O+Math.imul(we,Qe)|0,O=O+Math.imul(U,bt)|0,W=W+Math.imul(U,Qe)|0,C=C+Math.imul(z,_t)|0,O=O+Math.imul(z,ft)|0,O=O+Math.imul(Y,_t)|0,W=W+Math.imul(Y,ft)|0,C=C+Math.imul(oe,It)|0,O=O+Math.imul(oe,ht)|0,O=O+Math.imul(ie,It)|0,W=W+Math.imul(ie,ht)|0,C=C+Math.imul(q,Ut)|0,O=O+Math.imul(q,wt)|0,O=O+Math.imul(de,Ut)|0,W=W+Math.imul(de,wt)|0,C=C+Math.imul(pe,Kt)|0,O=O+Math.imul(pe,pt)|0,O=O+Math.imul(te,Kt)|0,W=W+Math.imul(te,pt)|0,C=C+Math.imul(he,kt)|0,O=O+Math.imul(he,xt)|0,O=O+Math.imul(ue,kt)|0,W=W+Math.imul(ue,xt)|0;var vr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(vr>>>26)|0,vr&=67108863,C=Math.imul(Ce,Be),O=Math.imul(Ce,Xe),O=O+Math.imul(Fe,Be)|0,W=Math.imul(Fe,Xe),C=C+Math.imul(me,ct)|0,O=O+Math.imul(me,st)|0,O=O+Math.imul(Ee,ct)|0,W=W+Math.imul(Ee,st)|0,C=C+Math.imul(Se,bt)|0,O=O+Math.imul(Se,Qe)|0,O=O+Math.imul(ee,bt)|0,W=W+Math.imul(ee,Qe)|0,C=C+Math.imul(we,_t)|0,O=O+Math.imul(we,ft)|0,O=O+Math.imul(U,_t)|0,W=W+Math.imul(U,ft)|0,C=C+Math.imul(z,It)|0,O=O+Math.imul(z,ht)|0,O=O+Math.imul(Y,It)|0,W=W+Math.imul(Y,ht)|0,C=C+Math.imul(oe,Ut)|0,O=O+Math.imul(oe,wt)|0,O=O+Math.imul(ie,Ut)|0,W=W+Math.imul(ie,wt)|0,C=C+Math.imul(q,Kt)|0,O=O+Math.imul(q,pt)|0,O=O+Math.imul(de,Kt)|0,W=W+Math.imul(de,pt)|0,C=C+Math.imul(pe,kt)|0,O=O+Math.imul(pe,xt)|0,O=O+Math.imul(te,kt)|0,W=W+Math.imul(te,xt)|0,C=C+Math.imul(he,Qt)|0,O=O+Math.imul(he,mt)|0,O=O+Math.imul(ue,Qt)|0,W=W+Math.imul(ue,mt)|0;var Dr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,C=Math.imul(je,Be),O=Math.imul(je,Xe),O=O+Math.imul(ge,Be)|0,W=Math.imul(ge,Xe),C=C+Math.imul(Ce,ct)|0,O=O+Math.imul(Ce,st)|0,O=O+Math.imul(Fe,ct)|0,W=W+Math.imul(Fe,st)|0,C=C+Math.imul(me,bt)|0,O=O+Math.imul(me,Qe)|0,O=O+Math.imul(Ee,bt)|0,W=W+Math.imul(Ee,Qe)|0,C=C+Math.imul(Se,_t)|0,O=O+Math.imul(Se,ft)|0,O=O+Math.imul(ee,_t)|0,W=W+Math.imul(ee,ft)|0,C=C+Math.imul(we,It)|0,O=O+Math.imul(we,ht)|0,O=O+Math.imul(U,It)|0,W=W+Math.imul(U,ht)|0,C=C+Math.imul(z,Ut)|0,O=O+Math.imul(z,wt)|0,O=O+Math.imul(Y,Ut)|0,W=W+Math.imul(Y,wt)|0,C=C+Math.imul(oe,Kt)|0,O=O+Math.imul(oe,pt)|0,O=O+Math.imul(ie,Kt)|0,W=W+Math.imul(ie,pt)|0,C=C+Math.imul(q,kt)|0,O=O+Math.imul(q,xt)|0,O=O+Math.imul(de,kt)|0,W=W+Math.imul(de,xt)|0,C=C+Math.imul(pe,Qt)|0,O=O+Math.imul(pe,mt)|0,O=O+Math.imul(te,Qt)|0,W=W+Math.imul(te,mt)|0,C=C+Math.imul(he,St)|0,O=O+Math.imul(he,Tt)|0,O=O+Math.imul(ue,St)|0,W=W+Math.imul(ue,Tt)|0;var yr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(yr>>>26)|0,yr&=67108863,C=Math.imul(je,ct),O=Math.imul(je,st),O=O+Math.imul(ge,ct)|0,W=Math.imul(ge,st),C=C+Math.imul(Ce,bt)|0,O=O+Math.imul(Ce,Qe)|0,O=O+Math.imul(Fe,bt)|0,W=W+Math.imul(Fe,Qe)|0,C=C+Math.imul(me,_t)|0,O=O+Math.imul(me,ft)|0,O=O+Math.imul(Ee,_t)|0,W=W+Math.imul(Ee,ft)|0,C=C+Math.imul(Se,It)|0,O=O+Math.imul(Se,ht)|0,O=O+Math.imul(ee,It)|0,W=W+Math.imul(ee,ht)|0,C=C+Math.imul(we,Ut)|0,O=O+Math.imul(we,wt)|0,O=O+Math.imul(U,Ut)|0,W=W+Math.imul(U,wt)|0,C=C+Math.imul(z,Kt)|0,O=O+Math.imul(z,pt)|0,O=O+Math.imul(Y,Kt)|0,W=W+Math.imul(Y,pt)|0,C=C+Math.imul(oe,kt)|0,O=O+Math.imul(oe,xt)|0,O=O+Math.imul(ie,kt)|0,W=W+Math.imul(ie,xt)|0,C=C+Math.imul(q,Qt)|0,O=O+Math.imul(q,mt)|0,O=O+Math.imul(de,Qt)|0,W=W+Math.imul(de,mt)|0,C=C+Math.imul(pe,St)|0,O=O+Math.imul(pe,Tt)|0,O=O+Math.imul(te,St)|0,W=W+Math.imul(te,Tt)|0;var lr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(lr>>>26)|0,lr&=67108863,C=Math.imul(je,bt),O=Math.imul(je,Qe),O=O+Math.imul(ge,bt)|0,W=Math.imul(ge,Qe),C=C+Math.imul(Ce,_t)|0,O=O+Math.imul(Ce,ft)|0,O=O+Math.imul(Fe,_t)|0,W=W+Math.imul(Fe,ft)|0,C=C+Math.imul(me,It)|0,O=O+Math.imul(me,ht)|0,O=O+Math.imul(Ee,It)|0,W=W+Math.imul(Ee,ht)|0,C=C+Math.imul(Se,Ut)|0,O=O+Math.imul(Se,wt)|0,O=O+Math.imul(ee,Ut)|0,W=W+Math.imul(ee,wt)|0,C=C+Math.imul(we,Kt)|0,O=O+Math.imul(we,pt)|0,O=O+Math.imul(U,Kt)|0,W=W+Math.imul(U,pt)|0,C=C+Math.imul(z,kt)|0,O=O+Math.imul(z,xt)|0,O=O+Math.imul(Y,kt)|0,W=W+Math.imul(Y,xt)|0,C=C+Math.imul(oe,Qt)|0,O=O+Math.imul(oe,mt)|0,O=O+Math.imul(ie,Qt)|0,W=W+Math.imul(ie,mt)|0,C=C+Math.imul(q,St)|0,O=O+Math.imul(q,Tt)|0,O=O+Math.imul(de,St)|0,W=W+Math.imul(de,Tt)|0;var rn=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(rn>>>26)|0,rn&=67108863,C=Math.imul(je,_t),O=Math.imul(je,ft),O=O+Math.imul(ge,_t)|0,W=Math.imul(ge,ft),C=C+Math.imul(Ce,It)|0,O=O+Math.imul(Ce,ht)|0,O=O+Math.imul(Fe,It)|0,W=W+Math.imul(Fe,ht)|0,C=C+Math.imul(me,Ut)|0,O=O+Math.imul(me,wt)|0,O=O+Math.imul(Ee,Ut)|0,W=W+Math.imul(Ee,wt)|0,C=C+Math.imul(Se,Kt)|0,O=O+Math.imul(Se,pt)|0,O=O+Math.imul(ee,Kt)|0,W=W+Math.imul(ee,pt)|0,C=C+Math.imul(we,kt)|0,O=O+Math.imul(we,xt)|0,O=O+Math.imul(U,kt)|0,W=W+Math.imul(U,xt)|0,C=C+Math.imul(z,Qt)|0,O=O+Math.imul(z,mt)|0,O=O+Math.imul(Y,Qt)|0,W=W+Math.imul(Y,mt)|0,C=C+Math.imul(oe,St)|0,O=O+Math.imul(oe,Tt)|0,O=O+Math.imul(ie,St)|0,W=W+Math.imul(ie,Tt)|0;var nn=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(nn>>>26)|0,nn&=67108863,C=Math.imul(je,It),O=Math.imul(je,ht),O=O+Math.imul(ge,It)|0,W=Math.imul(ge,ht),C=C+Math.imul(Ce,Ut)|0,O=O+Math.imul(Ce,wt)|0,O=O+Math.imul(Fe,Ut)|0,W=W+Math.imul(Fe,wt)|0,C=C+Math.imul(me,Kt)|0,O=O+Math.imul(me,pt)|0,O=O+Math.imul(Ee,Kt)|0,W=W+Math.imul(Ee,pt)|0,C=C+Math.imul(Se,kt)|0,O=O+Math.imul(Se,xt)|0,O=O+Math.imul(ee,kt)|0,W=W+Math.imul(ee,xt)|0,C=C+Math.imul(we,Qt)|0,O=O+Math.imul(we,mt)|0,O=O+Math.imul(U,Qt)|0,W=W+Math.imul(U,mt)|0,C=C+Math.imul(z,St)|0,O=O+Math.imul(z,Tt)|0,O=O+Math.imul(Y,St)|0,W=W+Math.imul(Y,Tt)|0;var ar=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(ar>>>26)|0,ar&=67108863,C=Math.imul(je,Ut),O=Math.imul(je,wt),O=O+Math.imul(ge,Ut)|0,W=Math.imul(ge,wt),C=C+Math.imul(Ce,Kt)|0,O=O+Math.imul(Ce,pt)|0,O=O+Math.imul(Fe,Kt)|0,W=W+Math.imul(Fe,pt)|0,C=C+Math.imul(me,kt)|0,O=O+Math.imul(me,xt)|0,O=O+Math.imul(Ee,kt)|0,W=W+Math.imul(Ee,xt)|0,C=C+Math.imul(Se,Qt)|0,O=O+Math.imul(Se,mt)|0,O=O+Math.imul(ee,Qt)|0,W=W+Math.imul(ee,mt)|0,C=C+Math.imul(we,St)|0,O=O+Math.imul(we,Tt)|0,O=O+Math.imul(U,St)|0,W=W+Math.imul(U,Tt)|0;var Xr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Xr>>>26)|0,Xr&=67108863,C=Math.imul(je,Kt),O=Math.imul(je,pt),O=O+Math.imul(ge,Kt)|0,W=Math.imul(ge,pt),C=C+Math.imul(Ce,kt)|0,O=O+Math.imul(Ce,xt)|0,O=O+Math.imul(Fe,kt)|0,W=W+Math.imul(Fe,xt)|0,C=C+Math.imul(me,Qt)|0,O=O+Math.imul(me,mt)|0,O=O+Math.imul(Ee,Qt)|0,W=W+Math.imul(Ee,mt)|0,C=C+Math.imul(Se,St)|0,O=O+Math.imul(Se,Tt)|0,O=O+Math.imul(ee,St)|0,W=W+Math.imul(ee,Tt)|0;var Wr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,C=Math.imul(je,kt),O=Math.imul(je,xt),O=O+Math.imul(ge,kt)|0,W=Math.imul(ge,xt),C=C+Math.imul(Ce,Qt)|0,O=O+Math.imul(Ce,mt)|0,O=O+Math.imul(Fe,Qt)|0,W=W+Math.imul(Fe,mt)|0,C=C+Math.imul(me,St)|0,O=O+Math.imul(me,Tt)|0,O=O+Math.imul(Ee,St)|0,W=W+Math.imul(Ee,Tt)|0;var Vr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,C=Math.imul(je,Qt),O=Math.imul(je,mt),O=O+Math.imul(ge,Qt)|0,W=Math.imul(ge,mt),C=C+Math.imul(Ce,St)|0,O=O+Math.imul(Ce,Tt)|0,O=O+Math.imul(Fe,St)|0,W=W+Math.imul(Fe,Tt)|0;var En=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(En>>>26)|0,En&=67108863,C=Math.imul(je,St),O=Math.imul(je,Tt),O=O+Math.imul(ge,St)|0,W=Math.imul(ge,Tt);var Vn=(k+C|0)+((O&8191)<<13)|0;return k=(W+(O>>>13)|0)+(Vn>>>26)|0,Vn&=67108863,R[0]=be,R[1]=Ne,R[2]=Le,R[3]=Je,R[4]=at,R[5]=Mt,R[6]=rr,R[7]=vr,R[8]=Dr,R[9]=yr,R[10]=lr,R[11]=rn,R[12]=nn,R[13]=ar,R[14]=Xr,R[15]=Wr,R[16]=Vr,R[17]=En,R[18]=Vn,k!==0&&(R[19]=k,P.length++),P};Math.imul||(E=S);function I(T,_,A){A.negative=_.negative^T.negative,A.length=T.length+_.length;for(var P=0,L=0,$=0;$>>26)|0,L+=R>>>26,R&=67108863}A.words[$]=k,P=R,R=L}return P!==0?A.words[$]=P:A.length--,A._strip()}function F(T,_,A){return I(T,_,A)}t.prototype.mulTo=function(_,A){var P,L=this.length+_.length;return this.length===10&&_.length===10?P=E(this,_,A):L<63?P=S(this,_,A):L<1024?P=I(this,_,A):P=F(this,_,A),P},t.prototype.mul=function(_){var A=new t(null);return A.words=new Array(this.length+_.length),this.mulTo(_,A)},t.prototype.mulf=function(_){var A=new t(null);return A.words=new Array(this.length+_.length),F(this,_,A)},t.prototype.imul=function(_){return this.clone().mulTo(_,this)},t.prototype.imuln=function(_){var A=_<0;A&&(_=-_),u(typeof _=="number"),u(_<67108864);for(var P=0,L=0;L>=26,P+=$/67108864|0,P+=R>>>26,this.words[L]=R&67108863}return P!==0&&(this.words[L]=P,this.length++),A?this.ineg():this},t.prototype.muln=function(_){return this.clone().imuln(_)},t.prototype.sqr=function(){return this.mul(this)},t.prototype.isqr=function(){return this.imul(this.clone())},t.prototype.pow=function(_){var A=y(_);if(A.length===0)return new t(1);for(var P=this,L=0;L=0);var A=_%26,P=(_-A)/26,L=67108863>>>26-A<<26-A,$;if(A!==0){var R=0;for($=0;$>>26-A}R&&(this.words[$]=R,this.length++)}if(P!==0){for($=this.length-1;$>=0;$--)this.words[$+P]=this.words[$];for($=0;$=0);var L;A?L=(A-A%26)/26:L=0;var $=_%26,R=Math.min((_-$)/26,this.length),k=67108863^67108863>>>$<<$,C=P;if(L-=R,L=Math.max(0,L),C){for(var O=0;OR)for(this.length-=R,O=0;O=0&&(W!==0||O>=L);O--){var ne=this.words[O]|0;this.words[O]=W<<26-$|ne>>>$,W=ne&k}return C&&W!==0&&(C.words[C.length++]=W),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},t.prototype.ishrn=function(_,A,P){return u(this.negative===0),this.iushrn(_,A,P)},t.prototype.shln=function(_){return this.clone().ishln(_)},t.prototype.ushln=function(_){return this.clone().iushln(_)},t.prototype.shrn=function(_){return this.clone().ishrn(_)},t.prototype.ushrn=function(_){return this.clone().iushrn(_)},t.prototype.testn=function(_){u(typeof _=="number"&&_>=0);var A=_%26,P=(_-A)/26,L=1<=0);var A=_%26,P=(_-A)/26;if(u(this.negative===0,"imaskn works only with positive numbers"),this.length<=P)return this;if(A!==0&&P++,this.length=Math.min(P,this.length),A!==0){var L=67108863^67108863>>>A<=67108864;A++)this.words[A]-=67108864,A===this.length-1?this.words[A+1]=1:this.words[A+1]++;return this.length=Math.max(this.length,A+1),this},t.prototype.isubn=function(_){if(u(typeof _=="number"),u(_<67108864),_<0)return this.iaddn(-_);if(this.negative!==0)return this.negative=0,this.iaddn(_),this.negative=1,this;if(this.words[0]-=_,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var A=0;A>26)-(C/67108864|0),this.words[$+P]=R&67108863}for(;$>26,this.words[$+P]=R&67108863;if(k===0)return this._strip();for(u(k===-1),k=0,$=0;$>26,this.words[$]=R&67108863;return this.negative=1,this._strip()},t.prototype._wordDiv=function(_,A){var P=this.length-_.length,L=this.clone(),$=_,R=$.words[$.length-1]|0,k=this._countBits(R);P=26-k,P!==0&&($=$.ushln(P),L.iushln(P),R=$.words[$.length-1]|0);var C=L.length-$.length,O;if(A!=="mod"){O=new t(null),O.length=C+1,O.words=new Array(O.length);for(var W=0;W=0;he--){var ue=(L.words[$.length+he]|0)*67108864+(L.words[$.length+he-1]|0);for(ue=Math.min(ue/R|0,67108863),L._ishlnsubmul($,ue,he);L.negative!==0;)ue--,L.negative=0,L._ishlnsubmul($,1,he),L.isZero()||(L.negative^=1);O&&(O.words[he]=ue)}return O&&O._strip(),L._strip(),A!=="div"&&P!==0&&L.iushrn(P),{div:O||null,mod:L}},t.prototype.divmod=function(_,A,P){if(u(!_.isZero()),this.isZero())return{div:new t(0),mod:new t(0)};var L,$,R;return this.negative!==0&&_.negative===0?(R=this.neg().divmod(_,A),A!=="mod"&&(L=R.div.neg()),A!=="div"&&($=R.mod.neg(),P&&$.negative!==0&&$.iadd(_)),{div:L,mod:$}):this.negative===0&&_.negative!==0?(R=this.divmod(_.neg(),A),A!=="mod"&&(L=R.div.neg()),{div:L,mod:R.mod}):this.negative&_.negative?(R=this.neg().divmod(_.neg(),A),A!=="div"&&($=R.mod.neg(),P&&$.negative!==0&&$.isub(_)),{div:R.div,mod:$}):_.length>this.length||this.cmp(_)<0?{div:new t(0),mod:this}:_.length===1?A==="div"?{div:this.divn(_.words[0]),mod:null}:A==="mod"?{div:null,mod:new t(this.modrn(_.words[0]))}:{div:this.divn(_.words[0]),mod:new t(this.modrn(_.words[0]))}:this._wordDiv(_,A)},t.prototype.div=function(_){return this.divmod(_,"div",!1).div},t.prototype.mod=function(_){return this.divmod(_,"mod",!1).mod},t.prototype.umod=function(_){return this.divmod(_,"mod",!0).mod},t.prototype.divRound=function(_){var A=this.divmod(_);if(A.mod.isZero())return A.div;var P=A.div.negative!==0?A.mod.isub(_):A.mod,L=_.ushrn(1),$=_.andln(1),R=P.cmp(L);return R<0||$===1&&R===0?A.div:A.div.negative!==0?A.div.isubn(1):A.div.iaddn(1)},t.prototype.modrn=function(_){var A=_<0;A&&(_=-_),u(_<=67108863);for(var P=(1<<26)%_,L=0,$=this.length-1;$>=0;$--)L=(P*L+(this.words[$]|0))%_;return A?-L:L},t.prototype.modn=function(_){return this.modrn(_)},t.prototype.idivn=function(_){var A=_<0;A&&(_=-_),u(_<=67108863);for(var P=0,L=this.length-1;L>=0;L--){var $=(this.words[L]|0)+P*67108864;this.words[L]=$/_|0,P=$%_}return this._strip(),A?this.ineg():this},t.prototype.divn=function(_){return this.clone().idivn(_)},t.prototype.egcd=function(_){u(_.negative===0),u(!_.isZero());var A=this,P=_.clone();A.negative!==0?A=A.umod(_):A=A.clone();for(var L=new t(1),$=new t(0),R=new t(0),k=new t(1),C=0;A.isEven()&&P.isEven();)A.iushrn(1),P.iushrn(1),++C;for(var O=P.clone(),W=A.clone();!A.isZero();){for(var ne=0,he=1;!(A.words[0]&he)&&ne<26;++ne,he<<=1);if(ne>0)for(A.iushrn(ne);ne-- >0;)(L.isOdd()||$.isOdd())&&(L.iadd(O),$.isub(W)),L.iushrn(1),$.iushrn(1);for(var ue=0,Ae=1;!(P.words[0]&Ae)&&ue<26;++ue,Ae<<=1);if(ue>0)for(P.iushrn(ue);ue-- >0;)(R.isOdd()||k.isOdd())&&(R.iadd(O),k.isub(W)),R.iushrn(1),k.iushrn(1);A.cmp(P)>=0?(A.isub(P),L.isub(R),$.isub(k)):(P.isub(A),R.isub(L),k.isub($))}return{a:R,b:k,gcd:P.iushln(C)}},t.prototype._invmp=function(_){u(_.negative===0),u(!_.isZero());var A=this,P=_.clone();A.negative!==0?A=A.umod(_):A=A.clone();for(var L=new t(1),$=new t(0),R=P.clone();A.cmpn(1)>0&&P.cmpn(1)>0;){for(var k=0,C=1;!(A.words[0]&C)&&k<26;++k,C<<=1);if(k>0)for(A.iushrn(k);k-- >0;)L.isOdd()&&L.iadd(R),L.iushrn(1);for(var O=0,W=1;!(P.words[0]&W)&&O<26;++O,W<<=1);if(O>0)for(P.iushrn(O);O-- >0;)$.isOdd()&&$.iadd(R),$.iushrn(1);A.cmp(P)>=0?(A.isub(P),L.isub($)):(P.isub(A),$.isub(L))}var ne;return A.cmpn(1)===0?ne=L:ne=$,ne.cmpn(0)<0&&ne.iadd(_),ne},t.prototype.gcd=function(_){if(this.isZero())return _.abs();if(_.isZero())return this.abs();var A=this.clone(),P=_.clone();A.negative=0,P.negative=0;for(var L=0;A.isEven()&&P.isEven();L++)A.iushrn(1),P.iushrn(1);do{for(;A.isEven();)A.iushrn(1);for(;P.isEven();)P.iushrn(1);var $=A.cmp(P);if($<0){var R=A;A=P,P=R}else if($===0||P.cmpn(1)===0)break;A.isub(P)}while(!0);return P.iushln(L)},t.prototype.invm=function(_){return this.egcd(_).a.umod(_)},t.prototype.isEven=function(){return(this.words[0]&1)===0},t.prototype.isOdd=function(){return(this.words[0]&1)===1},t.prototype.andln=function(_){return this.words[0]&_},t.prototype.bincn=function(_){u(typeof _=="number");var A=_%26,P=(_-A)/26,L=1<>>26,k&=67108863,this.words[R]=k}return $!==0&&(this.words[R]=$,this.length++),this},t.prototype.isZero=function(){return this.length===1&&this.words[0]===0},t.prototype.cmpn=function(_){var A=_<0;if(this.negative!==0&&!A)return-1;if(this.negative===0&&A)return 1;this._strip();var P;if(this.length>1)P=1;else{A&&(_=-_),u(_<=67108863,"Number is too big");var L=this.words[0]|0;P=L===_?0:L<_?-1:1}return this.negative!==0?-P|0:P},t.prototype.cmp=function(_){if(this.negative!==0&&_.negative===0)return-1;if(this.negative===0&&_.negative!==0)return 1;var A=this.ucmp(_);return this.negative!==0?-A|0:A},t.prototype.ucmp=function(_){if(this.length>_.length)return 1;if(this.length<_.length)return-1;for(var A=0,P=this.length-1;P>=0;P--){var L=this.words[P]|0,$=_.words[P]|0;if(L!==$){L<$?A=-1:L>$&&(A=1);break}}return A},t.prototype.gtn=function(_){return this.cmpn(_)===1},t.prototype.gt=function(_){return this.cmp(_)===1},t.prototype.gten=function(_){return this.cmpn(_)>=0},t.prototype.gte=function(_){return this.cmp(_)>=0},t.prototype.ltn=function(_){return this.cmpn(_)===-1},t.prototype.lt=function(_){return this.cmp(_)===-1},t.prototype.lten=function(_){return this.cmpn(_)<=0},t.prototype.lte=function(_){return this.cmp(_)<=0},t.prototype.eqn=function(_){return this.cmpn(_)===0},t.prototype.eq=function(_){return this.cmp(_)===0},t.red=function(_){return new H(_)},t.prototype.toRed=function(_){return u(!this.red,"Already a number in reduction context"),u(this.negative===0,"red works only with positives"),_.convertTo(this)._forceRed(_)},t.prototype.fromRed=function(){return u(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},t.prototype._forceRed=function(_){return this.red=_,this},t.prototype.forceRed=function(_){return u(!this.red,"Already a number in reduction context"),this._forceRed(_)},t.prototype.redAdd=function(_){return u(this.red,"redAdd works only with red numbers"),this.red.add(this,_)},t.prototype.redIAdd=function(_){return u(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,_)},t.prototype.redSub=function(_){return u(this.red,"redSub works only with red numbers"),this.red.sub(this,_)},t.prototype.redISub=function(_){return u(this.red,"redISub works only with red numbers"),this.red.isub(this,_)},t.prototype.redShl=function(_){return u(this.red,"redShl works only with red numbers"),this.red.shl(this,_)},t.prototype.redMul=function(_){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,_),this.red.mul(this,_)},t.prototype.redIMul=function(_){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,_),this.red.imul(this,_)},t.prototype.redSqr=function(){return u(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},t.prototype.redISqr=function(){return u(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},t.prototype.redSqrt=function(){return u(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},t.prototype.redInvm=function(){return u(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},t.prototype.redNeg=function(){return u(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},t.prototype.redPow=function(_){return u(this.red&&!_.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,_)};var B={k256:null,p224:null,p192:null,p25519:null};function j(T,_){this.name=T,this.p=new t(_,16),this.n=this.p.bitLength(),this.k=new t(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}j.prototype._tmp=function(){var _=new t(null);return _.words=new Array(Math.ceil(this.n/13)),_},j.prototype.ireduce=function(_){var A=_,P;do this.split(A,this.tmp),A=this.imulK(A),A=A.iadd(this.tmp),P=A.bitLength();while(P>this.n);var L=P0?A.isub(this.p):A.strip!==void 0?A.strip():A._strip(),A},j.prototype.split=function(_,A){_.iushrn(this.n,0,A)},j.prototype.imulK=function(_){return _.imul(this.k)};function X(){j.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}s(X,j),X.prototype.split=function(_,A){for(var P=4194303,L=Math.min(_.length,9),$=0;$>>22,R=k}R>>>=22,_.words[$-10]=R,R===0&&_.length>10?_.length-=10:_.length-=9},X.prototype.imulK=function(_){_.words[_.length]=0,_.words[_.length+1]=0,_.length+=2;for(var A=0,P=0;P<_.length;P++){var L=_.words[P]|0;A+=L*977,_.words[P]=A&67108863,A=L*64+(A/67108864|0)}return _.words[_.length-1]===0&&(_.length--,_.words[_.length-1]===0&&_.length--),_};function G(){j.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}s(G,j);function V(){j.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}s(V,j);function J(){j.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}s(J,j),J.prototype.imulK=function(_){for(var A=0,P=0;P<_.length;P++){var L=(_.words[P]|0)*19+A,$=L&67108863;L>>>=26,_.words[P]=$,A=L}return A!==0&&(_.words[_.length++]=A),_},t._prime=function(_){if(B[_])return B[_];var A;if(_==="k256")A=new X;else if(_==="p224")A=new G;else if(_==="p192")A=new V;else if(_==="p25519")A=new J;else throw new Error("Unknown prime "+_);return B[_]=A,A};function H(T){if(typeof T=="string"){var _=t._prime(T);this.m=_.p,this.prime=_}else u(T.gtn(1),"modulus must be greater than 1"),this.m=T,this.prime=null}H.prototype._verify1=function(_){u(_.negative===0,"red works only with positives"),u(_.red,"red works only with red numbers")},H.prototype._verify2=function(_,A){u((_.negative|A.negative)===0,"red works only with positives"),u(_.red&&_.red===A.red,"red works only with red numbers")},H.prototype.imod=function(_){return this.prime?this.prime.ireduce(_)._forceRed(this):(l(_,_.umod(this.m)._forceRed(this)),_)},H.prototype.neg=function(_){return _.isZero()?_.clone():this.m.sub(_)._forceRed(this)},H.prototype.add=function(_,A){this._verify2(_,A);var P=_.add(A);return P.cmp(this.m)>=0&&P.isub(this.m),P._forceRed(this)},H.prototype.iadd=function(_,A){this._verify2(_,A);var P=_.iadd(A);return P.cmp(this.m)>=0&&P.isub(this.m),P},H.prototype.sub=function(_,A){this._verify2(_,A);var P=_.sub(A);return P.cmpn(0)<0&&P.iadd(this.m),P._forceRed(this)},H.prototype.isub=function(_,A){this._verify2(_,A);var P=_.isub(A);return P.cmpn(0)<0&&P.iadd(this.m),P},H.prototype.shl=function(_,A){return this._verify1(_),this.imod(_.ushln(A))},H.prototype.imul=function(_,A){return this._verify2(_,A),this.imod(_.imul(A))},H.prototype.mul=function(_,A){return this._verify2(_,A),this.imod(_.mul(A))},H.prototype.isqr=function(_){return this.imul(_,_.clone())},H.prototype.sqr=function(_){return this.mul(_,_)},H.prototype.sqrt=function(_){if(_.isZero())return _.clone();var A=this.m.andln(3);if(u(A%2===1),A===3){var P=this.m.add(new t(1)).iushrn(2);return this.pow(_,P)}for(var L=this.m.subn(1),$=0;!L.isZero()&&L.andln(1)===0;)$++,L.iushrn(1);u(!L.isZero());var R=new t(1).toRed(this),k=R.redNeg(),C=this.m.subn(1).iushrn(1),O=this.m.bitLength();for(O=new t(2*O*O).toRed(this);this.pow(O,C).cmp(k)!==0;)O.redIAdd(k);for(var W=this.pow(O,L),ne=this.pow(_,L.addn(1).iushrn(1)),he=this.pow(_,L),ue=$;he.cmp(R)!==0;){for(var Ae=he,pe=0;Ae.cmp(R)!==0;pe++)Ae=Ae.redSqr();u(pe=0;$--){for(var W=A.words[$],ne=O-1;ne>=0;ne--){var he=W>>ne&1;if(R!==L[0]&&(R=this.sqr(R)),he===0&&k===0){C=0;continue}k<<=1,k|=he,C++,!(C!==P&&($!==0||ne!==0))&&(R=this.mul(R,L[k]),C=0,k=0)}O=26}return R},H.prototype.convertTo=function(_){var A=_.umod(this.m);return A===_?A.clone():A},H.prototype.convertFrom=function(_){var A=_.clone();return A.red=null,A},t.mont=function(_){return new M(_)};function M(T){H.call(this,T),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new t(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}s(M,H),M.prototype.convertTo=function(_){return this.imod(_.ushln(this.shift))},M.prototype.convertFrom=function(_){var A=this.imod(_.mul(this.rinv));return A.red=null,A},M.prototype.imul=function(_,A){if(_.isZero()||A.isZero())return _.words[0]=0,_.length=1,_;var P=_.imul(A),L=P.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),$=P.isub(L).iushrn(this.shift),R=$;return $.cmp(this.m)>=0?R=$.isub(this.m):$.cmpn(0)<0&&(R=$.iadd(this.m)),R._forceRed(this)},M.prototype.mul=function(_,A){if(_.isZero()||A.isZero())return new t(0)._forceRed(this);var P=_.mul(A),L=P.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),$=P.isub(L).iushrn(this.shift),R=$;return $.cmp(this.m)>=0?R=$.isub(this.m):$.cmpn(0)<0&&(R=$.iadd(this.m)),R._forceRed(this)},M.prototype.invm=function(_){var A=this.imod(_._invmp(this.m).mul(this.r2));return A._forceRed(this)}})(typeof d>"u"||d,void 0)},{buffer:188}],187:[function(e,d,m){var f;d.exports=function(t){return f||(f=new c(null)),f.generate(t)};function c(s){this.rand=s}if(d.exports.Rand=c,c.prototype.generate=function(t){return this._rand(t)},c.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var n=new Uint8Array(t),r=0;r>>24]^h[E>>>16&255]^w[I>>>8&255]^y[F&255]^o[V++],j=v[E>>>24]^h[I>>>16&255]^w[F>>>8&255]^y[S&255]^o[V++],X=v[I>>>24]^h[F>>>16&255]^w[S>>>8&255]^y[E&255]^o[V++],G=v[F>>>24]^h[S>>>16&255]^w[E>>>8&255]^y[I&255]^o[V++],S=B,E=j,I=X,F=G;return B=(a[S>>>24]<<24|a[E>>>16&255]<<16|a[I>>>8&255]<<8|a[F&255])^o[V++],j=(a[E>>>24]<<24|a[I>>>16&255]<<16|a[F>>>8&255]<<8|a[S&255])^o[V++],X=(a[I>>>24]<<24|a[F>>>16&255]<<16|a[S>>>8&255]<<8|a[E&255])^o[V++],G=(a[F>>>24]<<24|a[S>>>16&255]<<16|a[E>>>8&255]<<8|a[I&255])^o[V++],B=B>>>0,j=j>>>0,X=X>>>0,G=G>>>0,[B,j,X,G]}var t=[0,1,2,4,8,16,32,64,128,27,54],n=function(){for(var i=new Array(256),o=0;o<256;o++)o<128?i[o]=o<<1:i[o]=o<<1^283;for(var l=[],a=[],g=[[],[],[],[]],v=[[],[],[],[]],h=0,w=0,y=0;y<256;++y){var S=w^w<<1^w<<2^w<<3^w<<4;S=S>>>8^S&255^99,l[h]=S,a[S]=h;var E=i[h],I=i[E],F=i[I],B=i[S]*257^S*16843008;g[0][h]=B<<24|B>>>8,g[1][h]=B<<16|B>>>16,g[2][h]=B<<8|B>>>24,g[3][h]=B,B=F*16843009^I*65537^E*257^h*16843008,v[0][S]=B<<24|B>>>8,v[1][S]=B<<16|B>>>16,v[2][S]=B<<8|B>>>24,v[3][S]=B,h===0?h=w=1:(h=E^i[i[i[F^E]]],w^=i[i[w]])}return{SBOX:l,INV_SBOX:a,SUB_MIX:g,INV_SUB_MIX:v}}();function r(i){this._key=c(i),this._reset()}r.blockSize=4*4,r.keySize=256/8,r.prototype.blockSize=r.blockSize,r.prototype.keySize=r.keySize,r.prototype._reset=function(){for(var i=this._key,o=i.length,l=o+6,a=(l+1)*4,g=[],v=0;v>>24,h=n.SBOX[h>>>24]<<24|n.SBOX[h>>>16&255]<<16|n.SBOX[h>>>8&255]<<8|n.SBOX[h&255],h^=t[v/o|0]<<24):o>6&&v%o===4&&(h=n.SBOX[h>>>24]<<24|n.SBOX[h>>>16&255]<<16|n.SBOX[h>>>8&255]<<8|n.SBOX[h&255]),g[v]=g[v-o]^h}for(var w=[],y=0;y>>24]]^n.INV_SUB_MIX[1][n.SBOX[E>>>16&255]]^n.INV_SUB_MIX[2][n.SBOX[E>>>8&255]]^n.INV_SUB_MIX[3][n.SBOX[E&255]]}this._nRounds=l,this._keySchedule=g,this._invKeySchedule=w},r.prototype.encryptBlockRaw=function(i){return i=c(i),s(i,this._keySchedule,n.SUB_MIX,n.SBOX,this._nRounds)},r.prototype.encryptBlock=function(i){var o=this.encryptBlockRaw(i),l=f.allocUnsafe(16);return l.writeUInt32BE(o[0],0),l.writeUInt32BE(o[1],4),l.writeUInt32BE(o[2],8),l.writeUInt32BE(o[3],12),l},r.prototype.decryptBlock=function(i){i=c(i);var o=i[1];i[1]=i[3],i[3]=o;var l=s(i,this._invKeySchedule,n.INV_SUB_MIX,n.INV_SBOX,this._nRounds),a=f.allocUnsafe(16);return a.writeUInt32BE(l[0],0),a.writeUInt32BE(l[3],4),a.writeUInt32BE(l[2],8),a.writeUInt32BE(l[1],12),a},r.prototype.scrub=function(){u(this._keySchedule),u(this._invKeySchedule),u(this._key)},d.exports.AES=r},{"safe-buffer":494}],190:[function(e,d,m){var f=e("./aes"),c=e("safe-buffer").Buffer,u=e("cipher-base"),s=e("inherits"),t=e("./ghash"),n=e("buffer-xor"),r=e("./incr32");function i(a,g){var v=0;a.length!==g.length&&v++;for(var h=Math.min(a.length,g.length),w=0;w16)return w=this.cache.slice(0,16),this.cache=this.cache.slice(16),w}else if(this.cache.length>=16)return w=this.cache.slice(0,16),this.cache=this.cache.slice(16),w;return null},l.prototype.flush=function(){if(this.cache.length)return this.cache};function a(h){var w=h[15];if(w<1||w>16)throw new Error("unable to decrypt data");for(var y=-1;++y15){var h=this.cache.slice(0,16);return this.cache=this.cache.slice(16),h}return null},a.prototype.flush=function(){for(var h=16-this.cache.length,w=u.allocUnsafe(h),y=-1;++y>>0,0),r.writeUInt32BE(n[1]>>>0,4),r.writeUInt32BE(n[2]>>>0,8),r.writeUInt32BE(n[3]>>>0,12),r}function t(n){this.h=n,this.state=f.alloc(16,0),this.cache=f.allocUnsafe(0)}t.prototype.ghash=function(n){for(var r=-1;++r0;i--)n[i]=n[i]>>>1|(n[i-1]&1)<<31;n[0]=n[0]>>>1,l&&(n[0]=n[0]^225<<24)}this.state=s(r)},t.prototype.update=function(n){this.cache=f.concat([this.cache,n]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},t.prototype.final=function(n,r){return this.cache.length&&this.ghash(f.concat([this.cache,c],16)),this.ghash(s([0,n,0,r])),this.state},d.exports=t},{"safe-buffer":494}],195:[function(e,d,m){function f(c){for(var u=c.length,s;u--;)if(s=c.readUInt8(u),s===255)c.writeUInt8(0,u);else{s++,c.writeUInt8(s,u);break}}d.exports=f},{}],196:[function(e,d,m){var f=e("buffer-xor");m.encrypt=function(c,u){var s=f(u,c._prev);return c._prev=c._cipher.encryptBlock(s),c._prev},m.decrypt=function(c,u){var s=c._prev;c._prev=u;var t=c._cipher.decryptBlock(u);return f(t,s)}},{"buffer-xor":219}],197:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("buffer-xor");function u(s,t,n){var r=t.length,i=c(t,s._cache);return s._cache=s._cache.slice(r),s._prev=f.concat([s._prev,n?t:i]),i}m.encrypt=function(s,t,n){for(var r=f.allocUnsafe(0),i;t.length;)if(s._cache.length===0&&(s._cache=s._cipher.encryptBlock(s._prev),s._prev=f.allocUnsafe(0)),s._cache.length<=t.length)i=s._cache.length,r=f.concat([r,u(s,t.slice(0,i),n)]),t=t.slice(i);else{r=f.concat([r,u(s,t,n)]);break}return r}},{"buffer-xor":219,"safe-buffer":494}],198:[function(e,d,m){var f=e("safe-buffer").Buffer;function c(s,t,n){for(var r,i=-1,o=8,l=0,a,g;++i>i%8,s._prev=u(s._prev,n?a:g);return l}function u(s,t){var n=s.length,r=-1,i=f.allocUnsafe(s.length);for(s=f.concat([s,f.from([t])]);++r>7;return i}m.encrypt=function(s,t,n){for(var r=t.length,i=f.allocUnsafe(r),o=-1;++o=0||!o.umod(r.prime1)||!o.umod(r.prime2));return o}function n(r,i){var o=s(i),l=i.modulus.byteLength(),a=new c(r).mul(o.blinder).umod(i.modulus),g=a.toRed(c.mont(i.prime1)),v=a.toRed(c.mont(i.prime2)),h=i.coefficient,w=i.prime1,y=i.prime2,S=g.redPow(i.exponent1).fromRed(),E=v.redPow(i.exponent2).fromRed(),I=S.isub(E).imul(h).umod(w).imul(y);return E.iadd(I).imul(o.unblinder).umod(i.modulus).toArrayLike(f,"be",l)}n.getr=t,d.exports=n}).call(this)}).call(this,e("buffer").Buffer)},{"bn.js":186,buffer:220,randombytes:475}],210:[function(e,d,m){d.exports=e("./browser/algorithms.json")},{"./browser/algorithms.json":211}],211:[function(e,d,m){d.exports={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}}},{}],212:[function(e,d,m){d.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}},{}],213:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("create-hash"),u=e("readable-stream"),s=e("inherits"),t=e("./sign"),n=e("./verify"),r=e("./algorithms.json");Object.keys(r).forEach(function(g){r[g].id=f.from(r[g].id,"hex"),r[g.toLowerCase()]=r[g]});function i(g){u.Writable.call(this);var v=r[g];if(!v)throw new Error("Unknown message digest");this._hashType=v.hash,this._hash=c(v.hash),this._tag=v.id,this._signType=v.sign}s(i,u.Writable),i.prototype._write=function(v,h,w){this._hash.update(v),w()},i.prototype.update=function(v,h){return typeof v=="string"&&(v=f.from(v,h)),this._hash.update(v),this},i.prototype.sign=function(v,h){this.end();var w=this._hash.digest(),y=t(w,v,this._hashType,this._signType,this._tag);return h?y.toString(h):y};function o(g){u.Writable.call(this);var v=r[g];if(!v)throw new Error("Unknown message digest");this._hash=c(v.hash),this._tag=v.id,this._signType=v.sign}s(o,u.Writable),o.prototype._write=function(v,h,w){this._hash.update(v),w()},o.prototype.update=function(v,h){return typeof v=="string"&&(v=f.from(v,h)),this._hash.update(v),this},o.prototype.verify=function(v,h,w){typeof h=="string"&&(h=f.from(h,w)),this.end();var y=this._hash.digest();return n(h,y,v,this._signType,this._tag)};function l(g){return new i(g)}function a(g){return new o(g)}d.exports={Sign:l,Verify:a,createSign:l,createVerify:a}},{"./algorithms.json":211,"./sign":214,"./verify":215,"create-hash":386,inherits:440,"readable-stream":491,"safe-buffer":494}],214:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("create-hmac"),u=e("browserify-rsa"),s=e("elliptic").ec,t=e("bn.js"),n=e("parse-asn1"),r=e("./curves.json");function i(S,E,I,F,B){var j=n(E);if(j.curve){if(F!=="ecdsa"&&F!=="ecdsa/rsa")throw new Error("wrong private key type");return o(S,j)}else if(j.type==="dsa"){if(F!=="dsa")throw new Error("wrong private key type");return l(S,j,I)}else if(F!=="rsa"&&F!=="ecdsa/rsa")throw new Error("wrong private key type");S=f.concat([B,S]);for(var X=j.modulus.byteLength(),G=[0,1];S.length+G.length+10&&I.ishrn(F),I}function h(S,E){S=v(S,E),S=S.mod(E);var I=f.from(S.toArray());if(I.length=a)throw new Error("invalid sig")}d.exports=n},{"./curves.json":212,"bn.js":186,elliptic:405,"parse-asn1":459,"safe-buffer":494}],216:[function(e,d,m){},{}],217:[function(e,d,m){var f=e("buffer"),c=f.Buffer;function u(t,n){for(var r in t)n[r]=t[r]}c.from&&c.alloc&&c.allocUnsafe&&c.allocUnsafeSlow?d.exports=f:(u(f,m),m.Buffer=s);function s(t,n,r){return c(t,n,r)}u(c,s),s.from=function(t,n,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return c(t,n,r)},s.alloc=function(t,n,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=c(t);return n!==void 0?typeof r=="string"?i.fill(n,r):i.fill(n):i.fill(0),i},s.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return c(t)},s.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return f.SlowBuffer(t)}},{buffer:220}],218:[function(e,d,m){var f=e("safe-buffer").Buffer,c=f.isEncoding||function(E){switch(E=""+E,E&&E.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function u(E){if(!E)return"utf8";for(var I;;)switch(E){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return E;default:if(I)return;E=(""+E).toLowerCase(),I=!0}}function s(E){var I=u(E);if(typeof I!="string"&&(f.isEncoding===c||!c(E)))throw new Error("Unknown encoding: "+E);return I||E}m.StringDecoder=t;function t(E){this.encoding=s(E);var I;switch(this.encoding){case"utf16le":this.text=g,this.end=v,I=4;break;case"utf8":this.fillLast=o,I=4;break;case"base64":this.text=h,this.end=w,I=3;break;default:this.write=y,this.end=S;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=f.allocUnsafe(I)}t.prototype.write=function(E){if(E.length===0)return"";var I,F;if(this.lastNeed){if(I=this.fillLast(E),I===void 0)return"";F=this.lastNeed,this.lastNeed=0}else F=0;return F>5===6?2:E>>4===14?3:E>>3===30?4:E>>6===2?-1:-2}function r(E,I,F){var B=I.length-1;if(B=0?(j>0&&(E.lastNeed=j-1),j):--B=0?(j>0&&(E.lastNeed=j-2),j):--B=0?(j>0&&(j===2?j=0:E.lastNeed=j-3),j):0))}function i(E,I,F){if((I[0]&192)!==128)return E.lastNeed=0,"�";if(E.lastNeed>1&&I.length>1){if((I[1]&192)!==128)return E.lastNeed=1,"�";if(E.lastNeed>2&&I.length>2&&(I[2]&192)!==128)return E.lastNeed=2,"�"}}function o(E){var I=this.lastTotal-this.lastNeed,F=i(this,E);if(F!==void 0)return F;if(this.lastNeed<=E.length)return E.copy(this.lastChar,I,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);E.copy(this.lastChar,I,0,E.length),this.lastNeed-=E.length}function l(E,I){var F=r(this,E,I);if(!this.lastNeed)return E.toString("utf8",I);this.lastTotal=F;var B=E.length-(F-this.lastNeed);return E.copy(this.lastChar,0,B),E.toString("utf8",I,B)}function a(E){var I=E&&E.length?this.write(E):"";return this.lastNeed?I+"�":I}function g(E,I){if((E.length-I)%2===0){var F=E.toString("utf16le",I);if(F){var B=F.charCodeAt(F.length-1);if(B>=55296&&B<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=E[E.length-2],this.lastChar[1]=E[E.length-1],F.slice(0,-1)}return F}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=E[E.length-1],E.toString("utf16le",I,E.length-1)}function v(E){var I=E&&E.length?this.write(E):"";if(this.lastNeed){var F=this.lastTotal-this.lastNeed;return I+this.lastChar.toString("utf16le",0,F)}return I}function h(E,I){var F=(E.length-I)%3;return F===0?E.toString("base64",I):(this.lastNeed=3-F,this.lastTotal=3,F===1?this.lastChar[0]=E[E.length-1]:(this.lastChar[0]=E[E.length-2],this.lastChar[1]=E[E.length-1]),E.toString("base64",I,E.length-F))}function w(E){var I=E&&E.length?this.write(E):"";return this.lastNeed?I+this.lastChar.toString("base64",0,3-this.lastNeed):I}function y(E){return E.toString(this.encoding)}function S(E){return E&&E.length?this.write(E):""}},{"safe-buffer":217}],219:[function(e,d,m){(function(f){(function(){d.exports=function(u,s){for(var t=Math.min(u.length,s.length),n=new f(t),r=0;rs)throw new RangeError('The value "'+Q+'" is invalid for option "size"');var z=new Uint8Array(Q);return z.__proto__=r.prototype,z}function r(Q,z,Y){if(typeof Q=="number"){if(typeof z=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return a(Q)}return i(Q,z,Y)}typeof Symbol<"u"&&Symbol.species!=null&&r[Symbol.species]===r&&Object.defineProperty(r,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),r.poolSize=8192;function i(Q,z,Y){if(typeof Q=="string")return g(Q,z);if(ArrayBuffer.isView(Q))return v(Q);if(Q==null)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Q);if(oe(Q,ArrayBuffer)||Q&&oe(Q.buffer,ArrayBuffer))return h(Q,z,Y);if(typeof Q=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var fe=Q.valueOf&&Q.valueOf();if(fe!=null&&fe!==Q)return r.from(fe,z,Y);var we=w(Q);if(we)return we;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof Q[Symbol.toPrimitive]=="function")return r.from(Q[Symbol.toPrimitive]("string"),z,Y);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Q)}r.from=function(Q,z,Y){return i(Q,z,Y)},r.prototype.__proto__=Uint8Array.prototype,r.__proto__=Uint8Array;function o(Q){if(typeof Q!="number")throw new TypeError('"size" argument must be of type number');if(Q<0)throw new RangeError('The value "'+Q+'" is invalid for option "size"')}function l(Q,z,Y){return o(Q),Q<=0?n(Q):z!==void 0?typeof Y=="string"?n(Q).fill(z,Y):n(Q).fill(z):n(Q)}r.alloc=function(Q,z,Y){return l(Q,z,Y)};function a(Q){return o(Q),n(Q<0?0:y(Q)|0)}r.allocUnsafe=function(Q){return a(Q)},r.allocUnsafeSlow=function(Q){return a(Q)};function g(Q,z){if((typeof z!="string"||z==="")&&(z="utf8"),!r.isEncoding(z))throw new TypeError("Unknown encoding: "+z);var Y=E(Q,z)|0,fe=n(Y),we=fe.write(Q,z);return we!==Y&&(fe=fe.slice(0,we)),fe}function v(Q){for(var z=Q.length<0?0:y(Q.length)|0,Y=n(z),fe=0;fe=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return Q|0}function S(Q){return+Q!=Q&&(Q=0),r.alloc(+Q)}r.isBuffer=function(z){return z!=null&&z._isBuffer===!0&&z!==r.prototype},r.compare=function(z,Y){if(oe(z,Uint8Array)&&(z=r.from(z,z.offset,z.byteLength)),oe(Y,Uint8Array)&&(Y=r.from(Y,Y.offset,Y.byteLength)),!r.isBuffer(z)||!r.isBuffer(Y))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(z===Y)return 0;for(var fe=z.length,we=Y.length,U=0,ve=Math.min(fe,we);U2&&arguments[2]===!0;if(!fe&&Y===0)return 0;for(var we=!1;;)switch(z){case"ascii":case"latin1":case"binary":return Y;case"utf8":case"utf-8":return te(Q).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Y*2;case"hex":return Y>>>1;case"base64":return de(Q).length;default:if(we)return fe?-1:te(Q).length;z=(""+z).toLowerCase(),we=!0}}r.byteLength=E;function I(Q,z,Y){var fe=!1;if((z===void 0||z<0)&&(z=0),z>this.length||((Y===void 0||Y>this.length)&&(Y=this.length),Y<=0)||(Y>>>=0,z>>>=0,Y<=z))return"";for(Q||(Q="utf8");;)switch(Q){case"hex":return R(this,z,Y);case"utf8":case"utf-8":return _(this,z,Y);case"ascii":return L(this,z,Y);case"latin1":case"binary":return $(this,z,Y);case"base64":return T(this,z,Y);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,z,Y);default:if(fe)throw new TypeError("Unknown encoding: "+Q);Q=(Q+"").toLowerCase(),fe=!0}}r.prototype._isBuffer=!0;function F(Q,z,Y){var fe=Q[z];Q[z]=Q[Y],Q[Y]=fe}r.prototype.swap16=function(){var z=this.length;if(z%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var Y=0;YY&&(z+=" ... "),""},r.prototype.compare=function(z,Y,fe,we,U){if(oe(z,Uint8Array)&&(z=r.from(z,z.offset,z.byteLength)),!r.isBuffer(z))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof z);if(Y===void 0&&(Y=0),fe===void 0&&(fe=z?z.length:0),we===void 0&&(we=0),U===void 0&&(U=this.length),Y<0||fe>z.length||we<0||U>this.length)throw new RangeError("out of range index");if(we>=U&&Y>=fe)return 0;if(we>=U)return-1;if(Y>=fe)return 1;if(Y>>>=0,fe>>>=0,we>>>=0,U>>>=0,this===z)return 0;for(var ve=U-we,Se=fe-Y,ee=Math.min(ve,Se),se=this.slice(we,U),me=z.slice(Y,fe),Ee=0;Ee2147483647?Y=2147483647:Y<-2147483648&&(Y=-2147483648),Y=+Y,ie(Y)&&(Y=we?0:Q.length-1),Y<0&&(Y=Q.length+Y),Y>=Q.length){if(we)return-1;Y=Q.length-1}else if(Y<0)if(we)Y=0;else return-1;if(typeof z=="string"&&(z=r.from(z,fe)),r.isBuffer(z))return z.length===0?-1:j(Q,z,Y,fe,we);if(typeof z=="number")return z=z&255,typeof Uint8Array.prototype.indexOf=="function"?we?Uint8Array.prototype.indexOf.call(Q,z,Y):Uint8Array.prototype.lastIndexOf.call(Q,z,Y):j(Q,[z],Y,fe,we);throw new TypeError("val must be string, number or Buffer")}function j(Q,z,Y,fe,we){var U=1,ve=Q.length,Se=z.length;if(fe!==void 0&&(fe=String(fe).toLowerCase(),fe==="ucs2"||fe==="ucs-2"||fe==="utf16le"||fe==="utf-16le")){if(Q.length<2||z.length<2)return-1;U=2,ve/=2,Se/=2,Y/=2}function ee(Ce,Fe){return U===1?Ce[Fe]:Ce.readUInt16BE(Fe*U)}var se;if(we){var me=-1;for(se=Y;seve&&(Y=ve-Se),se=Y;se>=0;se--){for(var Ee=!0,Ie=0;Iewe&&(fe=we)):fe=we;var U=z.length;fe>U/2&&(fe=U/2);for(var ve=0;ve>>0,isFinite(fe)?(fe=fe>>>0,we===void 0&&(we="utf8")):(we=fe,fe=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var U=this.length-Y;if((fe===void 0||fe>U)&&(fe=U),z.length>0&&(fe<0||Y<0)||Y>this.length)throw new RangeError("Attempt to write outside buffer bounds");we||(we="utf8");for(var ve=!1;;)switch(we){case"hex":return X(this,z,Y,fe);case"utf8":case"utf-8":return G(this,z,Y,fe);case"ascii":return V(this,z,Y,fe);case"latin1":case"binary":return J(this,z,Y,fe);case"base64":return H(this,z,Y,fe);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,z,Y,fe);default:if(ve)throw new TypeError("Unknown encoding: "+we);we=(""+we).toLowerCase(),ve=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(Q,z,Y){return z===0&&Y===Q.length?c.fromByteArray(Q):c.fromByteArray(Q.slice(z,Y))}function _(Q,z,Y){Y=Math.min(Q.length,Y);for(var fe=[],we=z;we239?4:U>223?3:U>191?2:1;if(we+Se<=Y){var ee,se,me,Ee;switch(Se){case 1:U<128&&(ve=U);break;case 2:ee=Q[we+1],(ee&192)===128&&(Ee=(U&31)<<6|ee&63,Ee>127&&(ve=Ee));break;case 3:ee=Q[we+1],se=Q[we+2],(ee&192)===128&&(se&192)===128&&(Ee=(U&15)<<12|(ee&63)<<6|se&63,Ee>2047&&(Ee<55296||Ee>57343)&&(ve=Ee));break;case 4:ee=Q[we+1],se=Q[we+2],me=Q[we+3],(ee&192)===128&&(se&192)===128&&(me&192)===128&&(Ee=(U&15)<<18|(ee&63)<<12|(se&63)<<6|me&63,Ee>65535&&Ee<1114112&&(ve=Ee))}}ve===null?(ve=65533,Se=1):ve>65535&&(ve-=65536,fe.push(ve>>>10&1023|55296),ve=56320|ve&1023),fe.push(ve),we+=Se}return P(fe)}var A=4096;function P(Q){var z=Q.length;if(z<=A)return String.fromCharCode.apply(String,Q);for(var Y="",fe=0;fefe)&&(Y=fe);for(var we="",U=z;Ufe&&(z=fe),Y<0?(Y+=fe,Y<0&&(Y=0)):Y>fe&&(Y=fe),YY)throw new RangeError("Trying to access beyond buffer length")}r.prototype.readUIntLE=function(z,Y,fe){z=z>>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=this[z],U=1,ve=0;++ve>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=this[z+--Y],U=1;Y>0&&(U*=256);)we+=this[z+--Y]*U;return we},r.prototype.readUInt8=function(z,Y){return z=z>>>0,Y||C(z,1,this.length),this[z]},r.prototype.readUInt16LE=function(z,Y){return z=z>>>0,Y||C(z,2,this.length),this[z]|this[z+1]<<8},r.prototype.readUInt16BE=function(z,Y){return z=z>>>0,Y||C(z,2,this.length),this[z]<<8|this[z+1]},r.prototype.readUInt32LE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),(this[z]|this[z+1]<<8|this[z+2]<<16)+this[z+3]*16777216},r.prototype.readUInt32BE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),this[z]*16777216+(this[z+1]<<16|this[z+2]<<8|this[z+3])},r.prototype.readIntLE=function(z,Y,fe){z=z>>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=this[z],U=1,ve=0;++ve=U&&(we-=Math.pow(2,8*Y)),we},r.prototype.readIntBE=function(z,Y,fe){z=z>>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=Y,U=1,ve=this[z+--we];we>0&&(U*=256);)ve+=this[z+--we]*U;return U*=128,ve>=U&&(ve-=Math.pow(2,8*Y)),ve},r.prototype.readInt8=function(z,Y){return z=z>>>0,Y||C(z,1,this.length),this[z]&128?(255-this[z]+1)*-1:this[z]},r.prototype.readInt16LE=function(z,Y){z=z>>>0,Y||C(z,2,this.length);var fe=this[z]|this[z+1]<<8;return fe&32768?fe|4294901760:fe},r.prototype.readInt16BE=function(z,Y){z=z>>>0,Y||C(z,2,this.length);var fe=this[z+1]|this[z]<<8;return fe&32768?fe|4294901760:fe},r.prototype.readInt32LE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),this[z]|this[z+1]<<8|this[z+2]<<16|this[z+3]<<24},r.prototype.readInt32BE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),this[z]<<24|this[z+1]<<16|this[z+2]<<8|this[z+3]},r.prototype.readFloatLE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),u.read(this,z,!0,23,4)},r.prototype.readFloatBE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),u.read(this,z,!1,23,4)},r.prototype.readDoubleLE=function(z,Y){return z=z>>>0,Y||C(z,8,this.length),u.read(this,z,!0,52,8)},r.prototype.readDoubleBE=function(z,Y){return z=z>>>0,Y||C(z,8,this.length),u.read(this,z,!1,52,8)};function O(Q,z,Y,fe,we,U){if(!r.isBuffer(Q))throw new TypeError('"buffer" argument must be a Buffer instance');if(z>we||zQ.length)throw new RangeError("Index out of range")}r.prototype.writeUIntLE=function(z,Y,fe,we){if(z=+z,Y=Y>>>0,fe=fe>>>0,!we){var U=Math.pow(2,8*fe)-1;O(this,z,Y,fe,U,0)}var ve=1,Se=0;for(this[Y]=z&255;++Se>>0,fe=fe>>>0,!we){var U=Math.pow(2,8*fe)-1;O(this,z,Y,fe,U,0)}var ve=fe-1,Se=1;for(this[Y+ve]=z&255;--ve>=0&&(Se*=256);)this[Y+ve]=z/Se&255;return Y+fe},r.prototype.writeUInt8=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,1,255,0),this[Y]=z&255,Y+1},r.prototype.writeUInt16LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,65535,0),this[Y]=z&255,this[Y+1]=z>>>8,Y+2},r.prototype.writeUInt16BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,65535,0),this[Y]=z>>>8,this[Y+1]=z&255,Y+2},r.prototype.writeUInt32LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,4294967295,0),this[Y+3]=z>>>24,this[Y+2]=z>>>16,this[Y+1]=z>>>8,this[Y]=z&255,Y+4},r.prototype.writeUInt32BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,4294967295,0),this[Y]=z>>>24,this[Y+1]=z>>>16,this[Y+2]=z>>>8,this[Y+3]=z&255,Y+4},r.prototype.writeIntLE=function(z,Y,fe,we){if(z=+z,Y=Y>>>0,!we){var U=Math.pow(2,8*fe-1);O(this,z,Y,fe,U-1,-U)}var ve=0,Se=1,ee=0;for(this[Y]=z&255;++ve>0)-ee&255;return Y+fe},r.prototype.writeIntBE=function(z,Y,fe,we){if(z=+z,Y=Y>>>0,!we){var U=Math.pow(2,8*fe-1);O(this,z,Y,fe,U-1,-U)}var ve=fe-1,Se=1,ee=0;for(this[Y+ve]=z&255;--ve>=0&&(Se*=256);)z<0&&ee===0&&this[Y+ve+1]!==0&&(ee=1),this[Y+ve]=(z/Se>>0)-ee&255;return Y+fe},r.prototype.writeInt8=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,1,127,-128),z<0&&(z=255+z+1),this[Y]=z&255,Y+1},r.prototype.writeInt16LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,32767,-32768),this[Y]=z&255,this[Y+1]=z>>>8,Y+2},r.prototype.writeInt16BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,32767,-32768),this[Y]=z>>>8,this[Y+1]=z&255,Y+2},r.prototype.writeInt32LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,2147483647,-2147483648),this[Y]=z&255,this[Y+1]=z>>>8,this[Y+2]=z>>>16,this[Y+3]=z>>>24,Y+4},r.prototype.writeInt32BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,2147483647,-2147483648),z<0&&(z=4294967295+z+1),this[Y]=z>>>24,this[Y+1]=z>>>16,this[Y+2]=z>>>8,this[Y+3]=z&255,Y+4};function W(Q,z,Y,fe,we,U){if(Y+fe>Q.length)throw new RangeError("Index out of range");if(Y<0)throw new RangeError("Index out of range")}function ne(Q,z,Y,fe,we){return z=+z,Y=Y>>>0,we||W(Q,z,Y,4),u.write(Q,z,Y,fe,23,4),Y+4}r.prototype.writeFloatLE=function(z,Y,fe){return ne(this,z,Y,!0,fe)},r.prototype.writeFloatBE=function(z,Y,fe){return ne(this,z,Y,!1,fe)};function he(Q,z,Y,fe,we){return z=+z,Y=Y>>>0,we||W(Q,z,Y,8),u.write(Q,z,Y,fe,52,8),Y+8}r.prototype.writeDoubleLE=function(z,Y,fe){return he(this,z,Y,!0,fe)},r.prototype.writeDoubleBE=function(z,Y,fe){return he(this,z,Y,!1,fe)},r.prototype.copy=function(z,Y,fe,we){if(!r.isBuffer(z))throw new TypeError("argument should be a Buffer");if(fe||(fe=0),!we&&we!==0&&(we=this.length),Y>=z.length&&(Y=z.length),Y||(Y=0),we>0&&we=this.length)throw new RangeError("Index out of range");if(we<0)throw new RangeError("sourceEnd out of bounds");we>this.length&&(we=this.length),z.length-Y=0;--ve)z[ve+Y]=this[ve+fe];else Uint8Array.prototype.set.call(z,this.subarray(fe,we),Y);return U},r.prototype.fill=function(z,Y,fe,we){if(typeof z=="string"){if(typeof Y=="string"?(we=Y,Y=0,fe=this.length):typeof fe=="string"&&(we=fe,fe=this.length),we!==void 0&&typeof we!="string")throw new TypeError("encoding must be a string");if(typeof we=="string"&&!r.isEncoding(we))throw new TypeError("Unknown encoding: "+we);if(z.length===1){var U=z.charCodeAt(0);(we==="utf8"&&U<128||we==="latin1")&&(z=U)}}else typeof z=="number"&&(z=z&255);if(Y<0||this.length>>0,fe=fe===void 0?this.length:fe>>>0,z||(z=0);var ve;if(typeof z=="number")for(ve=Y;ve55295&&Y<57344){if(!we){if(Y>56319){(z-=3)>-1&&U.push(239,191,189);continue}else if(ve+1===fe){(z-=3)>-1&&U.push(239,191,189);continue}we=Y;continue}if(Y<56320){(z-=3)>-1&&U.push(239,191,189),we=Y;continue}Y=(we-55296<<10|Y-56320)+65536}else we&&(z-=3)>-1&&U.push(239,191,189);if(we=null,Y<128){if((z-=1)<0)break;U.push(Y)}else if(Y<2048){if((z-=2)<0)break;U.push(Y>>6|192,Y&63|128)}else if(Y<65536){if((z-=3)<0)break;U.push(Y>>12|224,Y>>6&63|128,Y&63|128)}else if(Y<1114112){if((z-=4)<0)break;U.push(Y>>18|240,Y>>12&63|128,Y>>6&63|128,Y&63|128)}else throw new Error("Invalid code point")}return U}function Z(Q){for(var z=[],Y=0;Y>8,we=Y%256,U.push(we),U.push(fe);return U}function de(Q){return c.toByteArray(Ae(Q))}function ke(Q,z,Y,fe){for(var we=0;we=z.length||we>=Q.length);++we)z[we+Y]=Q[we];return we}function oe(Q,z){return Q instanceof z||Q!=null&&Q.constructor!=null&&Q.constructor.name!=null&&Q.constructor.name===z.name}function ie(Q){return Q!==Q}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":185,buffer:220,ieee754:439}],221:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("stream").Transform,u=e("string_decoder").StringDecoder,s=e("inherits");function t(n){c.call(this),this.hashMode=typeof n=="string",this.hashMode?this[n]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}s(t,c),t.prototype.update=function(n,r,i){typeof n=="string"&&(n=f.from(n,r));var o=this._update(n);return this.hashMode?this:(i&&(o=this._toString(o,i)),o)},t.prototype.setAutoPadding=function(){},t.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},t.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},t.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},t.prototype._transform=function(n,r,i){var o;try{this.hashMode?this._update(n):this.push(this._update(n))}catch(l){o=l}finally{i(o)}},t.prototype._flush=function(n){var r;try{this.push(this.__final())}catch(i){r=i}n(r)},t.prototype._finalOrDigest=function(n){var r=this.__final()||f.alloc(0);return n&&(r=this._toString(r,n,!0)),r},t.prototype._toString=function(n,r,i){if(this._decoder||(this._decoder=new u(r),this._encoding=r),this._encoding!==r)throw new Error("can't switch encodings");var o=this._decoder.write(n);return i&&(o+=this._decoder.end()),o},d.exports=t},{inherits:440,"safe-buffer":494,stream:505,string_decoder:218}],222:[function(e,d,m){var f=e("../internals/is-callable"),c=e("../internals/try-to-string"),u=TypeError;d.exports=function(s){if(f(s))return s;throw new u(c(s)+" is not a function")}},{"../internals/is-callable":285,"../internals/try-to-string":349}],223:[function(e,d,m){var f=e("../internals/is-constructor"),c=e("../internals/try-to-string"),u=TypeError;d.exports=function(s){if(f(s))return s;throw new u(c(s)+" is not a constructor")}},{"../internals/is-constructor":286,"../internals/try-to-string":349}],224:[function(e,d,m){var f=e("../internals/is-callable"),c=String,u=TypeError;d.exports=function(s){if(typeof s=="object"||f(s))return s;throw new u("Can't set "+c(s)+" as a prototype")}},{"../internals/is-callable":285}],225:[function(e,d,m){var f=e("../internals/well-known-symbol"),c=e("../internals/object-create"),u=e("../internals/object-define-property").f,s=f("unscopables"),t=Array.prototype;t[s]===void 0&&u(t,s,{configurable:!0,value:c(null)}),d.exports=function(n){t[s][n]=!0}},{"../internals/object-create":306,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],226:[function(e,d,m){var f=e("../internals/object-is-prototype-of"),c=TypeError;d.exports=function(u,s){if(f(s,u))return u;throw new c("Incorrect invocation")}},{"../internals/object-is-prototype-of":314}],227:[function(e,d,m){var f=e("../internals/is-object"),c=String,u=TypeError;d.exports=function(s){if(f(s))return s;throw new u(c(s)+" is not an object")}},{"../internals/is-object":289}],228:[function(e,d,m){var f=e("../internals/to-indexed-object"),c=e("../internals/to-absolute-index"),u=e("../internals/length-of-array-like"),s=function(t){return function(n,r,i){var o=f(n),l=u(o),a=c(i,l),g;if(t&&r!==r){for(;l>a;)if(g=o[a++],g!==g)return!0}else for(;l>a;a++)if((t||a in o)&&o[a]===r)return t||a||0;return!t&&-1}};d.exports={includes:s(!0),indexOf:s(!1)}},{"../internals/length-of-array-like":299,"../internals/to-absolute-index":340,"../internals/to-indexed-object":341}],229:[function(e,d,m){var f=e("../internals/function-bind-context"),c=e("../internals/function-uncurry-this"),u=e("../internals/indexed-object"),s=e("../internals/to-object"),t=e("../internals/length-of-array-like"),n=e("../internals/array-species-create"),r=c([].push),i=function(o){var l=o===1,a=o===2,g=o===3,v=o===4,h=o===6,w=o===7,y=o===5||h;return function(S,E,I,F){for(var B=s(S),j=u(B),X=f(E,I),G=t(j),V=0,J=F||n,H=l?J(S,G):a||w?J(S,0):void 0,M,T;G>V;V++)if((y||V in j)&&(M=j[V],T=X(M,V,B),o))if(l)H[V]=T;else if(T)switch(o){case 3:return!0;case 5:return M;case 6:return V;case 2:r(H,M)}else switch(o){case 4:return!1;case 7:r(H,M)}return h?-1:g||v?v:H}};d.exports={forEach:i(0),map:i(1),filter:i(2),some:i(3),every:i(4),find:i(5),findIndex:i(6),filterReject:i(7)}},{"../internals/array-species-create":233,"../internals/function-bind-context":262,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/length-of-array-like":299,"../internals/to-object":344}],230:[function(e,d,m){var f=e("../internals/to-absolute-index"),c=e("../internals/length-of-array-like"),u=e("../internals/create-property"),s=Array,t=Math.max;d.exports=function(n,r,i){for(var o=c(n),l=f(r,o),a=f(i===void 0?o:i,o),g=s(t(a-l,0)),v=0;l"u"&&f!==void 0;d.exports={all:f,IS_HTMLDDA:c}},{}],249:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/is-object"),u=f.document,s=c(u)&&c(u.createElement);d.exports=function(t){return s?u.createElement(t):{}}},{"../internals/global":274,"../internals/is-object":289}],250:[function(e,d,m){var f=e("../internals/engine-is-deno"),c=e("../internals/engine-is-node");d.exports=!f&&!c&&typeof window=="object"&&typeof document=="object"},{"../internals/engine-is-deno":251,"../internals/engine-is-node":254}],251:[function(e,d,m){d.exports=typeof Deno=="object"&&Deno&&typeof Deno.version=="object"},{}],252:[function(e,d,m){var f=e("../internals/engine-user-agent");d.exports=/ipad|iphone|ipod/i.test(f)&&typeof Pebble<"u"},{"../internals/engine-user-agent":256}],253:[function(e,d,m){var f=e("../internals/engine-user-agent");d.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(f)},{"../internals/engine-user-agent":256}],254:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/classof-raw");d.exports=c(f.process)==="process"},{"../internals/classof-raw":235,"../internals/global":274}],255:[function(e,d,m){var f=e("../internals/engine-user-agent");d.exports=/web0s(?!.*chrome)/i.test(f)},{"../internals/engine-user-agent":256}],256:[function(e,d,m){d.exports=typeof navigator<"u"&&String(navigator.userAgent)||""},{}],257:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/engine-user-agent"),u=f.process,s=f.Deno,t=u&&u.versions||s&&s.version,n=t&&t.v8,r,i;n&&(r=n.split("."),i=r[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&c&&(r=c.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=c.match(/Chrome\/(\d+)/),r&&(i=+r[1]))),d.exports=i},{"../internals/engine-user-agent":256,"../internals/global":274}],258:[function(e,d,m){d.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],259:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/object-get-own-property-descriptor").f,u=e("../internals/create-non-enumerable-property"),s=e("../internals/define-built-in"),t=e("../internals/define-global-property"),n=e("../internals/copy-constructor-properties"),r=e("../internals/is-forced");d.exports=function(i,o){var l=i.target,a=i.global,g=i.stat,v,h,w,y,S,E;if(a?h=f:g?h=f[l]||t(l,{}):h=(f[l]||{}).prototype,h)for(w in o){if(S=o[w],i.dontCallGetSet?(E=c(h,w),y=E&&E.value):y=h[w],v=r(a?w:l+(g?".":"#")+w,i.forced),!v&&y!==void 0){if(typeof S==typeof y)continue;n(S,y)}(i.sham||y&&y.sham)&&u(S,"sham",!0),s(h,w,S,i)}}},{"../internals/copy-constructor-properties":237,"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/define-global-property":246,"../internals/global":274,"../internals/is-forced":287,"../internals/object-get-own-property-descriptor":309}],260:[function(e,d,m){d.exports=function(f){try{return!!f()}catch{return!0}}},{}],261:[function(e,d,m){var f=e("../internals/function-bind-native"),c=Function.prototype,u=c.apply,s=c.call;d.exports=typeof Reflect=="object"&&Reflect.apply||(f?s.bind(u):function(){return s.apply(u,arguments)})},{"../internals/function-bind-native":263}],262:[function(e,d,m){var f=e("../internals/function-uncurry-this-clause"),c=e("../internals/a-callable"),u=e("../internals/function-bind-native"),s=f(f.bind);d.exports=function(t,n){return c(t),n===void 0?t:u?s(t,n):function(){return t.apply(n,arguments)}}},{"../internals/a-callable":222,"../internals/function-bind-native":263,"../internals/function-uncurry-this-clause":267}],263:[function(e,d,m){var f=e("../internals/fails");d.exports=!f(function(){var c=(function(){}).bind();return typeof c!="function"||c.hasOwnProperty("prototype")})},{"../internals/fails":260}],264:[function(e,d,m){var f=e("../internals/function-bind-native"),c=Function.prototype.call;d.exports=f?c.bind(c):function(){return c.apply(c,arguments)}},{"../internals/function-bind-native":263}],265:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/has-own-property"),u=Function.prototype,s=f&&Object.getOwnPropertyDescriptor,t=c(u,"name"),n=t&&(function(){}).name==="something",r=t&&(!f||f&&s(u,"name").configurable);d.exports={EXISTS:t,PROPER:n,CONFIGURABLE:r}},{"../internals/descriptors":247,"../internals/has-own-property":275}],266:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/a-callable");d.exports=function(u,s,t){try{return f(c(Object.getOwnPropertyDescriptor(u,s)[t]))}catch{}}},{"../internals/a-callable":222,"../internals/function-uncurry-this":268}],267:[function(e,d,m){var f=e("../internals/classof-raw"),c=e("../internals/function-uncurry-this");d.exports=function(u){if(f(u)==="Function")return c(u)}},{"../internals/classof-raw":235,"../internals/function-uncurry-this":268}],268:[function(e,d,m){var f=e("../internals/function-bind-native"),c=Function.prototype,u=c.call,s=f&&c.bind.bind(u,u);d.exports=f?s:function(t){return function(){return u.apply(t,arguments)}}},{"../internals/function-bind-native":263}],269:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/is-callable"),u=function(s){return c(s)?s:void 0};d.exports=function(s,t){return arguments.length<2?u(f[s]):f[s]&&f[s][t]}},{"../internals/global":274,"../internals/is-callable":285}],270:[function(e,d,m){var f=e("../internals/classof"),c=e("../internals/get-method"),u=e("../internals/is-null-or-undefined"),s=e("../internals/iterators"),t=e("../internals/well-known-symbol"),n=t("iterator");d.exports=function(r){if(!u(r))return c(r,n)||c(r,"@@iterator")||s[f(r)]}},{"../internals/classof":236,"../internals/get-method":273,"../internals/is-null-or-undefined":288,"../internals/iterators":298,"../internals/well-known-symbol":357}],271:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/a-callable"),u=e("../internals/an-object"),s=e("../internals/try-to-string"),t=e("../internals/get-iterator-method"),n=TypeError;d.exports=function(r,i){var o=arguments.length<2?t(r):i;if(c(o))return u(f(o,r));throw new n(s(r)+" is not iterable")}},{"../internals/a-callable":222,"../internals/an-object":227,"../internals/function-call":264,"../internals/get-iterator-method":270,"../internals/try-to-string":349}],272:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/is-array"),u=e("../internals/is-callable"),s=e("../internals/classof-raw"),t=e("../internals/to-string"),n=f([].push);d.exports=function(r){if(u(r))return r;if(c(r)){for(var i=r.length,o=[],l=0;lV;V++)if(H=A(h[V]),H&&r(v,H))return H;return new g(!1)}X=i(h,G)}for(M=I?h.next:X.next;!(T=c(M,X)).done;){try{H=A(T.value)}catch(P){l(X,"throw",P)}if(typeof H=="object"&&H&&r(v,H))return H}return new g(!1)}},{"../internals/an-object":227,"../internals/function-bind-context":262,"../internals/function-call":264,"../internals/get-iterator":271,"../internals/get-iterator-method":270,"../internals/is-array-iterator-method":283,"../internals/iterator-close":294,"../internals/length-of-array-like":299,"../internals/object-is-prototype-of":314,"../internals/try-to-string":349}],294:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/an-object"),u=e("../internals/get-method");d.exports=function(s,t,n){var r,i;c(s);try{if(r=u(s,"return"),!r){if(t==="throw")throw n;return n}r=f(r,s)}catch(o){i=!0,r=o}if(t==="throw")throw n;if(i)throw r;return c(r),n}},{"../internals/an-object":227,"../internals/function-call":264,"../internals/get-method":273}],295:[function(e,d,m){var f=e("../internals/iterators-core").IteratorPrototype,c=e("../internals/object-create"),u=e("../internals/create-property-descriptor"),s=e("../internals/set-to-string-tag"),t=e("../internals/iterators"),n=function(){return this};d.exports=function(r,i,o,l){var a=i+" Iterator";return r.prototype=c(f,{next:u(+!l,o)}),s(r,a,!1,!0),t[a]=n,r}},{"../internals/create-property-descriptor":242,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-create":306,"../internals/set-to-string-tag":331}],296:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/is-pure"),s=e("../internals/function-name"),t=e("../internals/is-callable"),n=e("../internals/iterator-create-constructor"),r=e("../internals/object-get-prototype-of"),i=e("../internals/object-set-prototype-of"),o=e("../internals/set-to-string-tag"),l=e("../internals/create-non-enumerable-property"),a=e("../internals/define-built-in"),g=e("../internals/well-known-symbol"),v=e("../internals/iterators"),h=e("../internals/iterators-core"),w=s.PROPER,y=s.CONFIGURABLE,S=h.IteratorPrototype,E=h.BUGGY_SAFARI_ITERATORS,I=g("iterator"),F="keys",B="values",j="entries",X=function(){return this};d.exports=function(G,V,J,H,M,T,_){n(J,V,H);var A=function(he){if(he===M&&k)return k;if(!E&&he&&he in $)return $[he];switch(he){case F:return function(){return new J(this,he)};case B:return function(){return new J(this,he)};case j:return function(){return new J(this,he)}}return function(){return new J(this)}},P=V+" Iterator",L=!1,$=G.prototype,R=$[I]||$["@@iterator"]||M&&$[M],k=!E&&R||A(M),C=V==="Array"&&$.entries||R,O,W,ne;if(C&&(O=r(C.call(new G)),O!==Object.prototype&&O.next&&(!u&&r(O)!==S&&(i?i(O,S):t(O[I])||a(O,I,X)),o(O,P,!0,!0),u&&(v[P]=X))),w&&M===B&&R&&R.name!==B&&(!u&&y?l($,"name",B):(L=!0,k=function(){return c(R,this)})),M)if(W={values:A(B),keys:T?k:A(F),entries:A(j)},_)for(ne in W)(E||L||!(ne in $))&&a($,ne,W[ne]);else f({target:V,proto:!0,forced:E||L},W);return(!u||_)&&$[I]!==k&&a($,I,k,{name:M}),v[V]=k,W}},{"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/export":259,"../internals/function-call":264,"../internals/function-name":265,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/iterator-create-constructor":295,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-get-prototype-of":313,"../internals/object-set-prototype-of":318,"../internals/set-to-string-tag":331,"../internals/well-known-symbol":357}],297:[function(e,d,m){var f=e("../internals/fails"),c=e("../internals/is-callable"),u=e("../internals/is-object"),s=e("../internals/object-create"),t=e("../internals/object-get-prototype-of"),n=e("../internals/define-built-in"),r=e("../internals/well-known-symbol"),i=e("../internals/is-pure"),o=r("iterator"),l=!1,a,g,v;[].keys&&(v=[].keys(),"next"in v?(g=t(t(v)),g!==Object.prototype&&(a=g)):l=!0);var h=!u(a)||f(function(){var w={};return a[o].call(w)!==w});h?a={}:i&&(a=s(a)),c(a[o])||n(a,o,function(){return this}),d.exports={IteratorPrototype:a,BUGGY_SAFARI_ITERATORS:l}},{"../internals/define-built-in":245,"../internals/fails":260,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-get-prototype-of":313,"../internals/well-known-symbol":357}],298:[function(e,d,m){arguments[4][276][0].apply(m,arguments)},{dup:276}],299:[function(e,d,m){var f=e("../internals/to-length");d.exports=function(c){return f(c.length)}},{"../internals/to-length":343}],300:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/fails"),u=e("../internals/is-callable"),s=e("../internals/has-own-property"),t=e("../internals/descriptors"),n=e("../internals/function-name").CONFIGURABLE,r=e("../internals/inspect-source"),i=e("../internals/internal-state"),o=i.enforce,l=i.get,a=String,g=Object.defineProperty,v=f("".slice),h=f("".replace),w=f([].join),y=t&&!c(function(){return g(function(){},"length",{value:8}).length!==8}),S=String(String).split("String"),E=d.exports=function(I,F,B){v(a(F),0,7)==="Symbol("&&(F="["+h(a(F),/^Symbol\(([^)]*)\)/,"$1")+"]"),B&&B.getter&&(F="get "+F),B&&B.setter&&(F="set "+F),(!s(I,"name")||n&&I.name!==F)&&(t?g(I,"name",{value:F,configurable:!0}):I.name=F),y&&B&&s(B,"arity")&&I.length!==B.arity&&g(I,"length",{value:B.arity});try{B&&s(B,"constructor")&&B.constructor?t&&g(I,"prototype",{writable:!1}):I.prototype&&(I.prototype=void 0)}catch{}var j=o(I);return s(j,"source")||(j.source=w(S,typeof F=="string"?F:"")),I};Function.prototype.toString=E(function(){return u(this)&&l(this).source||r(this)},"toString")},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-name":265,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/inspect-source":281,"../internals/internal-state":282,"../internals/is-callable":285}],301:[function(e,d,m){var f=Math.ceil,c=Math.floor;d.exports=Math.trunc||function(s){var t=+s;return(t>0?c:f)(t)}},{}],302:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/function-bind-context"),u=e("../internals/object-get-own-property-descriptor").f,s=e("../internals/task").set,t=e("../internals/queue"),n=e("../internals/engine-is-ios"),r=e("../internals/engine-is-ios-pebble"),i=e("../internals/engine-is-webos-webkit"),o=e("../internals/engine-is-node"),l=f.MutationObserver||f.WebKitMutationObserver,a=f.document,g=f.process,v=f.Promise,h=u(f,"queueMicrotask"),w=h&&h.value,y,S,E,I,F;if(!w){var B=new t,j=function(){var X,G;for(o&&(X=g.domain)&&X.exit();G=B.get();)try{G()}catch(V){throw B.head&&y(),V}X&&X.enter()};!n&&!o&&!i&&l&&a?(S=!0,E=a.createTextNode(""),new l(j).observe(E,{characterData:!0}),y=function(){E.data=S=!S}):!r&&v&&v.resolve?(I=v.resolve(void 0),I.constructor=v,F=c(I.then,I),y=function(){F(j)}):o?y=function(){g.nextTick(j)}:(s=c(s,f),y=function(){s(j)}),w=function(X){B.head||y(),B.add(X)}}d.exports=w},{"../internals/engine-is-ios":253,"../internals/engine-is-ios-pebble":252,"../internals/engine-is-node":254,"../internals/engine-is-webos-webkit":255,"../internals/function-bind-context":262,"../internals/global":274,"../internals/object-get-own-property-descriptor":309,"../internals/queue":328,"../internals/task":339}],303:[function(e,d,m){var f=e("../internals/a-callable"),c=TypeError,u=function(s){var t,n;this.promise=new s(function(r,i){if(t!==void 0||n!==void 0)throw new c("Bad Promise constructor");t=r,n=i}),this.resolve=f(t),this.reject=f(n)};d.exports.f=function(s){return new u(s)}},{"../internals/a-callable":222}],304:[function(e,d,m){var f=e("../internals/is-regexp"),c=TypeError;d.exports=function(u){if(f(u))throw new c("The method doesn't accept regular expressions");return u}},{"../internals/is-regexp":291}],305:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/function-uncurry-this"),u=e("../internals/function-call"),s=e("../internals/fails"),t=e("../internals/object-keys"),n=e("../internals/object-get-own-property-symbols"),r=e("../internals/object-property-is-enumerable"),i=e("../internals/to-object"),o=e("../internals/indexed-object"),l=Object.assign,a=Object.defineProperty,g=c([].concat);d.exports=!l||s(function(){if(f&&l({b:1},l(a({},"a",{enumerable:!0,get:function(){a(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var v={},h={},w=Symbol("assign detection"),y="abcdefghijklmnopqrst";return v[w]=7,y.split("").forEach(function(S){h[S]=S}),l({},v)[w]!==7||t(l({},h)).join("")!==y})?function(h,w){for(var y=i(h),S=arguments.length,E=1,I=n.f,F=r.f;S>E;)for(var B=o(arguments[E++]),j=I?g(t(B),I(B)):t(B),X=j.length,G=0,V;X>G;)V=j[G++],(!f||u(F,B,V))&&(y[V]=B[V]);return y}:l},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/object-get-own-property-symbols":312,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-object":344}],306:[function(e,d,m){var f=e("../internals/an-object"),c=e("../internals/object-define-properties"),u=e("../internals/enum-bug-keys"),s=e("../internals/hidden-keys"),t=e("../internals/html"),n=e("../internals/document-create-element"),r=e("../internals/shared-key"),i=">",o="<",l="prototype",a="script",g=r("IE_PROTO"),v=function(){},h=function(I){return o+a+i+I+o+"/"+a+i},w=function(I){I.write(h("")),I.close();var F=I.parentWindow.Object;return I=null,F},y=function(){var I=n("iframe"),F="java"+a+":",B;return I.style.display="none",t.appendChild(I),I.src=String(F),B=I.contentWindow.document,B.open(),B.write(h("document.F=Object")),B.close(),B.F},S,E=function(){try{S=new ActiveXObject("htmlfile")}catch{}E=typeof document<"u"?document.domain&&S?w(S):y():w(S);for(var I=u.length;I--;)delete E[l][u[I]];return E()};s[g]=!0,d.exports=Object.create||function(F,B){var j;return F!==null?(v[l]=f(F),j=new v,v[l]=null,j[g]=F):j=E(),B===void 0?j:c.f(j,B)}},{"../internals/an-object":227,"../internals/document-create-element":249,"../internals/enum-bug-keys":258,"../internals/hidden-keys":276,"../internals/html":278,"../internals/object-define-properties":307,"../internals/shared-key":332}],307:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/v8-prototype-define-bug"),u=e("../internals/object-define-property"),s=e("../internals/an-object"),t=e("../internals/to-indexed-object"),n=e("../internals/object-keys");m.f=f&&!c?Object.defineProperties:function(i,o){s(i);for(var l=t(o),a=n(o),g=a.length,v=0,h;g>v;)u.f(i,h=a[v++],l[h]);return i}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/object-define-property":308,"../internals/object-keys":316,"../internals/to-indexed-object":341,"../internals/v8-prototype-define-bug":352}],308:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/ie8-dom-define"),u=e("../internals/v8-prototype-define-bug"),s=e("../internals/an-object"),t=e("../internals/to-property-key"),n=TypeError,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o="enumerable",l="configurable",a="writable";m.f=f?u?function(v,h,w){if(s(v),h=t(h),s(w),typeof v=="function"&&h==="prototype"&&"value"in w&&a in w&&!w[a]){var y=i(v,h);y&&y[a]&&(v[h]=w.value,w={configurable:l in w?w[l]:y[l],enumerable:o in w?w[o]:y[o],writable:!1})}return r(v,h,w)}:r:function(v,h,w){if(s(v),h=t(h),s(w),c)try{return r(v,h,w)}catch{}if("get"in w||"set"in w)throw new n("Accessors not supported");return"value"in w&&(v[h]=w.value),v}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/ie8-dom-define":279,"../internals/to-property-key":346,"../internals/v8-prototype-define-bug":352}],309:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/function-call"),u=e("../internals/object-property-is-enumerable"),s=e("../internals/create-property-descriptor"),t=e("../internals/to-indexed-object"),n=e("../internals/to-property-key"),r=e("../internals/has-own-property"),i=e("../internals/ie8-dom-define"),o=Object.getOwnPropertyDescriptor;m.f=f?o:function(a,g){if(a=t(a),g=n(g),i)try{return o(a,g)}catch{}if(r(a,g))return s(!c(u.f,a,g),a[g])}},{"../internals/create-property-descriptor":242,"../internals/descriptors":247,"../internals/function-call":264,"../internals/has-own-property":275,"../internals/ie8-dom-define":279,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341,"../internals/to-property-key":346}],310:[function(e,d,m){var f=e("../internals/classof-raw"),c=e("../internals/to-indexed-object"),u=e("../internals/object-get-own-property-names").f,s=e("../internals/array-slice-simple"),t=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],n=function(r){try{return u(r)}catch{return s(t)}};d.exports.f=function(i){return t&&f(i)==="Window"?n(i):u(c(i))}},{"../internals/array-slice-simple":230,"../internals/classof-raw":235,"../internals/object-get-own-property-names":311,"../internals/to-indexed-object":341}],311:[function(e,d,m){var f=e("../internals/object-keys-internal"),c=e("../internals/enum-bug-keys"),u=c.concat("length","prototype");m.f=Object.getOwnPropertyNames||function(t){return f(t,u)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],312:[function(e,d,m){m.f=Object.getOwnPropertySymbols},{}],313:[function(e,d,m){var f=e("../internals/has-own-property"),c=e("../internals/is-callable"),u=e("../internals/to-object"),s=e("../internals/shared-key"),t=e("../internals/correct-prototype-getter"),n=s("IE_PROTO"),r=Object,i=r.prototype;d.exports=t?r.getPrototypeOf:function(o){var l=u(o);if(f(l,n))return l[n];var a=l.constructor;return c(a)&&l instanceof a?a.prototype:l instanceof r?i:null}},{"../internals/correct-prototype-getter":239,"../internals/has-own-property":275,"../internals/is-callable":285,"../internals/shared-key":332,"../internals/to-object":344}],314:[function(e,d,m){var f=e("../internals/function-uncurry-this");d.exports=f({}.isPrototypeOf)},{"../internals/function-uncurry-this":268}],315:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/has-own-property"),u=e("../internals/to-indexed-object"),s=e("../internals/array-includes").indexOf,t=e("../internals/hidden-keys"),n=f([].push);d.exports=function(r,i){var o=u(r),l=0,a=[],g;for(g in o)!c(t,g)&&c(o,g)&&n(a,g);for(;i.length>l;)c(o,g=i[l++])&&(~s(a,g)||n(a,g));return a}},{"../internals/array-includes":228,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/to-indexed-object":341}],316:[function(e,d,m){var f=e("../internals/object-keys-internal"),c=e("../internals/enum-bug-keys");d.exports=Object.keys||function(s){return f(s,c)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],317:[function(e,d,m){var f={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u=c&&!f.call({1:2},1);m.f=u?function(t){var n=c(this,t);return!!n&&n.enumerable}:f},{}],318:[function(e,d,m){var f=e("../internals/function-uncurry-this-accessor"),c=e("../internals/an-object"),u=e("../internals/a-possible-prototype");d.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var s=!1,t={},n;try{n=f(Object.prototype,"__proto__","set"),n(t,[]),s=t instanceof Array}catch{}return function(i,o){return c(i),u(o),s?n(i,o):i.__proto__=o,i}}():void 0)},{"../internals/a-possible-prototype":224,"../internals/an-object":227,"../internals/function-uncurry-this-accessor":266}],319:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/fails"),u=e("../internals/function-uncurry-this"),s=e("../internals/object-get-prototype-of"),t=e("../internals/object-keys"),n=e("../internals/to-indexed-object"),r=e("../internals/object-property-is-enumerable").f,i=u(r),o=u([].push),l=f&&c(function(){var g=Object.create(null);return g[2]=2,!i(g,2)}),a=function(g){return function(v){for(var h=n(v),w=t(h),y=l&&s(h)===null,S=w.length,E=0,I=[],F;S>E;)F=w[E++],(!f||(y?F in h:i(h,F)))&&o(I,g?[F,h[F]]:h[F]);return I}};d.exports={entries:a(!0),values:a(!1)}},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-uncurry-this":268,"../internals/object-get-prototype-of":313,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341}],320:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/is-callable"),u=e("../internals/is-object"),s=TypeError;d.exports=function(t,n){var r,i;if(n==="string"&&c(r=t.toString)&&!u(i=f(r,t))||c(r=t.valueOf)&&!u(i=f(r,t))||n!=="string"&&c(r=t.toString)&&!u(i=f(r,t)))return i;throw new s("Can't convert object to primitive value")}},{"../internals/function-call":264,"../internals/is-callable":285,"../internals/is-object":289}],321:[function(e,d,m){var f=e("../internals/get-built-in"),c=e("../internals/function-uncurry-this"),u=e("../internals/object-get-own-property-names"),s=e("../internals/object-get-own-property-symbols"),t=e("../internals/an-object"),n=c([].concat);d.exports=f("Reflect","ownKeys")||function(i){var o=u.f(t(i)),l=s.f;return l?n(o,l(i)):o}},{"../internals/an-object":227,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-symbols":312}],322:[function(e,d,m){var f=e("../internals/global");d.exports=f},{"../internals/global":274}],323:[function(e,d,m){d.exports=function(f){try{return{error:!1,value:f()}}catch(c){return{error:!0,value:c}}}},{}],324:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/promise-native-constructor"),u=e("../internals/is-callable"),s=e("../internals/is-forced"),t=e("../internals/inspect-source"),n=e("../internals/well-known-symbol"),r=e("../internals/engine-is-browser"),i=e("../internals/engine-is-deno"),o=e("../internals/is-pure"),l=e("../internals/engine-v8-version"),a=c&&c.prototype,g=n("species"),v=!1,h=u(f.PromiseRejectionEvent),w=s("Promise",function(){var y=t(c),S=y!==String(c);if(!S&&l===66||o&&!(a.catch&&a.finally))return!0;if(!l||l<51||!/native code/.test(y)){var E=new c(function(B){B(1)}),I=function(B){B(function(){},function(){})},F=E.constructor={};if(F[g]=I,v=E.then(function(){})instanceof I,!v)return!0}return!S&&(r||i)&&!h});d.exports={CONSTRUCTOR:w,REJECTION_EVENT:h,SUBCLASSING:v}},{"../internals/engine-is-browser":250,"../internals/engine-is-deno":251,"../internals/engine-v8-version":257,"../internals/global":274,"../internals/inspect-source":281,"../internals/is-callable":285,"../internals/is-forced":287,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/well-known-symbol":357}],325:[function(e,d,m){var f=e("../internals/global");d.exports=f.Promise},{"../internals/global":274}],326:[function(e,d,m){var f=e("../internals/an-object"),c=e("../internals/is-object"),u=e("../internals/new-promise-capability");d.exports=function(s,t){if(f(s),c(t)&&t.constructor===s)return t;var n=u.f(s),r=n.resolve;return r(t),n.promise}},{"../internals/an-object":227,"../internals/is-object":289,"../internals/new-promise-capability":303}],327:[function(e,d,m){var f=e("../internals/promise-native-constructor"),c=e("../internals/check-correctness-of-iteration"),u=e("../internals/promise-constructor-detection").CONSTRUCTOR;d.exports=u||!c(function(s){f.all(s).then(void 0,function(){})})},{"../internals/check-correctness-of-iteration":234,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],328:[function(e,d,m){var f=function(){this.head=null,this.tail=null};f.prototype={add:function(c){var u={item:c,next:null},s=this.tail;s?s.next=u:this.head=u,this.tail=u},get:function(){var c=this.head;if(c){var u=this.head=c.next;return u===null&&(this.tail=null),c.item}}},d.exports=f},{}],329:[function(e,d,m){var f=e("../internals/is-null-or-undefined"),c=TypeError;d.exports=function(u){if(f(u))throw new c("Can't call method on "+u);return u}},{"../internals/is-null-or-undefined":288}],330:[function(e,d,m){var f=e("../internals/get-built-in"),c=e("../internals/define-built-in-accessor"),u=e("../internals/well-known-symbol"),s=e("../internals/descriptors"),t=u("species");d.exports=function(n){var r=f(n);s&&r&&!r[t]&&c(r,t,{configurable:!0,get:function(){return this}})}},{"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],331:[function(e,d,m){var f=e("../internals/object-define-property").f,c=e("../internals/has-own-property"),u=e("../internals/well-known-symbol"),s=u("toStringTag");d.exports=function(t,n,r){t&&!r&&(t=t.prototype),t&&!c(t,s)&&f(t,s,{configurable:!0,value:n})}},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],332:[function(e,d,m){var f=e("../internals/shared"),c=e("../internals/uid"),u=f("keys");d.exports=function(s){return u[s]||(u[s]=c(s))}},{"../internals/shared":334,"../internals/uid":350}],333:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/define-global-property"),u="__core-js_shared__",s=f[u]||c(u,{});d.exports=s},{"../internals/define-global-property":246,"../internals/global":274}],334:[function(e,d,m){var f=e("../internals/is-pure"),c=e("../internals/shared-store");(d.exports=function(u,s){return c[u]||(c[u]=s!==void 0?s:{})})("versions",[]).push({version:"3.33.0",mode:f?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"})},{"../internals/is-pure":290,"../internals/shared-store":333}],335:[function(e,d,m){var f=e("../internals/an-object"),c=e("../internals/a-constructor"),u=e("../internals/is-null-or-undefined"),s=e("../internals/well-known-symbol"),t=s("species");d.exports=function(n,r){var i=f(n).constructor,o;return i===void 0||u(o=f(i)[t])?r:c(o)}},{"../internals/a-constructor":223,"../internals/an-object":227,"../internals/is-null-or-undefined":288,"../internals/well-known-symbol":357}],336:[function(e,d,m){var f=e("../internals/engine-v8-version"),c=e("../internals/fails"),u=e("../internals/global"),s=u.String;d.exports=!!Object.getOwnPropertySymbols&&!c(function(){var t=Symbol("symbol detection");return!s(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&f&&f<41})},{"../internals/engine-v8-version":257,"../internals/fails":260,"../internals/global":274}],337:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/get-built-in"),u=e("../internals/well-known-symbol"),s=e("../internals/define-built-in");d.exports=function(){var t=c("Symbol"),n=t&&t.prototype,r=n&&n.valueOf,i=u("toPrimitive");n&&!n[i]&&s(n,i,function(o){return f(r,this)},{arity:1})}},{"../internals/define-built-in":245,"../internals/function-call":264,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],338:[function(e,d,m){var f=e("../internals/symbol-constructor-detection");d.exports=f&&!!Symbol.for&&!!Symbol.keyFor},{"../internals/symbol-constructor-detection":336}],339:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/function-apply"),u=e("../internals/function-bind-context"),s=e("../internals/is-callable"),t=e("../internals/has-own-property"),n=e("../internals/fails"),r=e("../internals/html"),i=e("../internals/array-slice"),o=e("../internals/document-create-element"),l=e("../internals/validate-arguments-length"),a=e("../internals/engine-is-ios"),g=e("../internals/engine-is-node"),v=f.setImmediate,h=f.clearImmediate,w=f.process,y=f.Dispatch,S=f.Function,E=f.MessageChannel,I=f.String,F=0,B={},j="onreadystatechange",X,G,V,J;n(function(){X=f.location});var H=function(A){if(t(B,A)){var P=B[A];delete B[A],P()}},M=function(A){return function(){H(A)}},T=function(A){H(A.data)},_=function(A){f.postMessage(I(A),X.protocol+"//"+X.host)};(!v||!h)&&(v=function(P){l(arguments.length,1);var L=s(P)?P:S(P),$=i(arguments,1);return B[++F]=function(){c(L,void 0,$)},G(F),F},h=function(P){delete B[P]},g?G=function(A){w.nextTick(M(A))}:y&&y.now?G=function(A){y.now(M(A))}:E&&!a?(V=new E,J=V.port2,V.port1.onmessage=T,G=u(J.postMessage,J)):f.addEventListener&&s(f.postMessage)&&!f.importScripts&&X&&X.protocol!=="file:"&&!n(_)?(G=_,f.addEventListener("message",T,!1)):j in o("script")?G=function(A){r.appendChild(o("script"))[j]=function(){r.removeChild(this),H(A)}}:G=function(A){setTimeout(M(A),0)}),d.exports={set:v,clear:h}},{"../internals/array-slice":231,"../internals/document-create-element":249,"../internals/engine-is-ios":253,"../internals/engine-is-node":254,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-bind-context":262,"../internals/global":274,"../internals/has-own-property":275,"../internals/html":278,"../internals/is-callable":285,"../internals/validate-arguments-length":353}],340:[function(e,d,m){var f=e("../internals/to-integer-or-infinity"),c=Math.max,u=Math.min;d.exports=function(s,t){var n=f(s);return n<0?c(n+t,0):u(n,t)}},{"../internals/to-integer-or-infinity":342}],341:[function(e,d,m){var f=e("../internals/indexed-object"),c=e("../internals/require-object-coercible");d.exports=function(u){return f(c(u))}},{"../internals/indexed-object":280,"../internals/require-object-coercible":329}],342:[function(e,d,m){var f=e("../internals/math-trunc");d.exports=function(c){var u=+c;return u!==u||u===0?0:f(u)}},{"../internals/math-trunc":301}],343:[function(e,d,m){var f=e("../internals/to-integer-or-infinity"),c=Math.min;d.exports=function(u){return u>0?c(f(u),9007199254740991):0}},{"../internals/to-integer-or-infinity":342}],344:[function(e,d,m){var f=e("../internals/require-object-coercible"),c=Object;d.exports=function(u){return c(f(u))}},{"../internals/require-object-coercible":329}],345:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/is-object"),u=e("../internals/is-symbol"),s=e("../internals/get-method"),t=e("../internals/ordinary-to-primitive"),n=e("../internals/well-known-symbol"),r=TypeError,i=n("toPrimitive");d.exports=function(o,l){if(!c(o)||u(o))return o;var a=s(o,i),g;if(a){if(l===void 0&&(l="default"),g=f(a,o,l),!c(g)||u(g))return g;throw new r("Can't convert object to primitive value")}return l===void 0&&(l="number"),t(o,l)}},{"../internals/function-call":264,"../internals/get-method":273,"../internals/is-object":289,"../internals/is-symbol":292,"../internals/ordinary-to-primitive":320,"../internals/well-known-symbol":357}],346:[function(e,d,m){var f=e("../internals/to-primitive"),c=e("../internals/is-symbol");d.exports=function(u){var s=f(u,"string");return c(s)?s:s+""}},{"../internals/is-symbol":292,"../internals/to-primitive":345}],347:[function(e,d,m){var f=e("../internals/well-known-symbol"),c=f("toStringTag"),u={};u[c]="z",d.exports=String(u)==="[object z]"},{"../internals/well-known-symbol":357}],348:[function(e,d,m){var f=e("../internals/classof"),c=String;d.exports=function(u){if(f(u)==="Symbol")throw new TypeError("Cannot convert a Symbol value to a string");return c(u)}},{"../internals/classof":236}],349:[function(e,d,m){var f=String;d.exports=function(c){try{return f(c)}catch{return"Object"}}},{}],350:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=0,u=Math.random(),s=f(1 .toString);d.exports=function(t){return"Symbol("+(t===void 0?"":t)+")_"+s(++c+u,36)}},{"../internals/function-uncurry-this":268}],351:[function(e,d,m){var f=e("../internals/symbol-constructor-detection");d.exports=f&&!Symbol.sham&&typeof Symbol.iterator=="symbol"},{"../internals/symbol-constructor-detection":336}],352:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/fails");d.exports=f&&c(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})},{"../internals/descriptors":247,"../internals/fails":260}],353:[function(e,d,m){var f=TypeError;d.exports=function(c,u){if(c1?arguments[1]:void 0)}}),u(s)},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],359:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/array-iteration").find,u=e("../internals/add-to-unscopables"),s="find",t=!0;s in[]&&Array(1)[s](function(){t=!1}),f({target:"Array",proto:!0,forced:t},{find:function(r){return c(this,r,arguments.length>1?arguments[1]:void 0)}}),u(s)},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],360:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/array-includes").includes,u=e("../internals/fails"),s=e("../internals/add-to-unscopables"),t=u(function(){return!Array(1).includes()});f({target:"Array",proto:!0,forced:t},{includes:function(r){return c(this,r,arguments.length>1?arguments[1]:void 0)}}),s("includes")},{"../internals/add-to-unscopables":225,"../internals/array-includes":228,"../internals/export":259,"../internals/fails":260}],361:[function(e,d,m){var f=e("../internals/to-indexed-object"),c=e("../internals/add-to-unscopables"),u=e("../internals/iterators"),s=e("../internals/internal-state"),t=e("../internals/object-define-property").f,n=e("../internals/iterator-define"),r=e("../internals/create-iter-result-object"),i=e("../internals/is-pure"),o=e("../internals/descriptors"),l="Array Iterator",a=s.set,g=s.getterFor(l);d.exports=n(Array,"Array",function(h,w){a(this,{type:l,target:f(h),index:0,kind:w})},function(){var h=g(this),w=h.target,y=h.kind,S=h.index++;if(!w||S>=w.length)return h.target=void 0,r(void 0,!0);switch(y){case"keys":return r(S,!1);case"values":return r(w[S],!1)}return r([S,w[S]],!1)},"values");var v=u.Arguments=u.Array;if(c("keys"),c("values"),c("entries"),!i&&o&&v.name!=="values")try{t(v,"name",{value:"values"})}catch{}},{"../internals/add-to-unscopables":225,"../internals/create-iter-result-object":240,"../internals/descriptors":247,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/iterator-define":296,"../internals/iterators":298,"../internals/object-define-property":308,"../internals/to-indexed-object":341}],362:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/get-built-in"),u=e("../internals/function-apply"),s=e("../internals/function-call"),t=e("../internals/function-uncurry-this"),n=e("../internals/fails"),r=e("../internals/is-callable"),i=e("../internals/is-symbol"),o=e("../internals/array-slice"),l=e("../internals/get-json-replacer-function"),a=e("../internals/symbol-constructor-detection"),g=String,v=c("JSON","stringify"),h=t(/./.exec),w=t("".charAt),y=t("".charCodeAt),S=t("".replace),E=t(1 .toString),I=/[\uD800-\uDFFF]/g,F=/^[\uD800-\uDBFF]$/,B=/^[\uDC00-\uDFFF]$/,j=!a||n(function(){var J=c("Symbol")("stringify detection");return v([J])!=="[null]"||v({a:J})!=="{}"||v(Object(J))!=="{}"}),X=n(function(){return v("\uDF06\uD834")!=='"\\udf06\\ud834"'||v("\uDEAD")!=='"\\udead"'}),G=function(J,H){var M=o(arguments),T=l(H);if(!(!r(T)&&(J===void 0||i(J))))return M[1]=function(_,A){if(r(T)&&(A=s(T,this,g(_),A)),!i(A))return A},u(v,null,M)},V=function(J,H,M){var T=w(M,H-1),_=w(M,H+1);return h(F,J)&&!h(B,_)||h(B,J)&&!h(F,T)?"\\u"+E(y(J,0),16):J};v&&f({target:"JSON",stat:!0,arity:3,forced:j||X},{stringify:function(H,M,T){var _=o(arguments),A=u(j?G:v,null,_);return X&&typeof A=="string"?S(A,I,V):A}})},{"../internals/array-slice":231,"../internals/export":259,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/get-json-replacer-function":272,"../internals/is-callable":285,"../internals/is-symbol":292,"../internals/symbol-constructor-detection":336}],363:[function(e,d,m){var f=e("../internals/export");f({target:"Number",stat:!0},{isNaN:function(u){return u!==u}})},{"../internals/export":259}],364:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/object-assign");f({target:"Object",stat:!0,arity:2,forced:Object.assign!==c},{assign:c})},{"../internals/export":259,"../internals/object-assign":305}],365:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/symbol-constructor-detection"),u=e("../internals/fails"),s=e("../internals/object-get-own-property-symbols"),t=e("../internals/to-object"),n=!c||u(function(){s.f(1)});f({target:"Object",stat:!0,forced:n},{getOwnPropertySymbols:function(i){var o=s.f;return o?o(t(i)):[]}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-get-own-property-symbols":312,"../internals/symbol-constructor-detection":336,"../internals/to-object":344}],366:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/to-object"),u=e("../internals/object-keys"),s=e("../internals/fails"),t=s(function(){u(1)});f({target:"Object",stat:!0,forced:t},{keys:function(r){return u(c(r))}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-keys":316,"../internals/to-object":344}],367:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/object-to-array").values;f({target:"Object",stat:!0},{values:function(s){return c(s)}})},{"../internals/export":259,"../internals/object-to-array":319}],368:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/a-callable"),s=e("../internals/new-promise-capability"),t=e("../internals/perform"),n=e("../internals/iterate"),r=e("../internals/promise-statics-incorrect-iteration");f({target:"Promise",stat:!0,forced:r},{all:function(o){var l=this,a=s.f(l),g=a.resolve,v=a.reject,h=t(function(){var w=u(l.resolve),y=[],S=0,E=1;n(o,function(I){var F=S++,B=!1;E++,c(w,l,I).then(function(j){B||(B=!0,y[F]=j,--E||g(y))},v)}),--E||g(y)});return h.error&&v(h.value),a.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],369:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/is-pure"),u=e("../internals/promise-constructor-detection").CONSTRUCTOR,s=e("../internals/promise-native-constructor"),t=e("../internals/get-built-in"),n=e("../internals/is-callable"),r=e("../internals/define-built-in"),i=s&&s.prototype;if(f({target:"Promise",proto:!0,forced:u,real:!0},{catch:function(l){return this.then(void 0,l)}}),!c&&n(s)){var o=t("Promise").prototype.catch;i.catch!==o&&r(i,"catch",o,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],370:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/is-pure"),u=e("../internals/engine-is-node"),s=e("../internals/global"),t=e("../internals/function-call"),n=e("../internals/define-built-in"),r=e("../internals/object-set-prototype-of"),i=e("../internals/set-to-string-tag"),o=e("../internals/set-species"),l=e("../internals/a-callable"),a=e("../internals/is-callable"),g=e("../internals/is-object"),v=e("../internals/an-instance"),h=e("../internals/species-constructor"),w=e("../internals/task").set,y=e("../internals/microtask"),S=e("../internals/host-report-errors"),E=e("../internals/perform"),I=e("../internals/queue"),F=e("../internals/internal-state"),B=e("../internals/promise-native-constructor"),j=e("../internals/promise-constructor-detection"),X=e("../internals/new-promise-capability"),G="Promise",V=j.CONSTRUCTOR,J=j.REJECTION_EVENT,H=j.SUBCLASSING,M=F.getterFor(G),T=F.set,_=B&&B.prototype,A=B,P=_,L=s.TypeError,$=s.document,R=s.process,k=X.f,C=k,O=!!($&&$.createEvent&&s.dispatchEvent),W="unhandledrejection",ne="rejectionhandled",he=0,ue=1,Ae=2,pe=1,te=2,Z,q,de,ke,oe=function(ee){var se;return g(ee)&&a(se=ee.then)?se:!1},ie=function(ee,se){var me=se.value,Ee=se.state===ue,Ie=Ee?ee.ok:ee.fail,Ce=ee.resolve,Fe=ee.reject,ze=ee.domain,je,ge,Me;try{Ie?(Ee||(se.rejection===te&&we(se),se.rejection=pe),Ie===!0?je=me:(ze&&ze.enter(),je=Ie(me),ze&&(ze.exit(),Me=!0)),je===ee.promise?Fe(new L("Promise-chain cycle")):(ge=oe(je))?t(ge,je,Ce,Fe):Ce(je)):Fe(me)}catch(Be){ze&&!Me&&ze.exit(),Fe(Be)}},Q=function(ee,se){ee.notified||(ee.notified=!0,y(function(){for(var me=ee.reactions,Ee;Ee=me.get();)ie(Ee,ee);ee.notified=!1,se&&!ee.rejection&&Y(ee)}))},z=function(ee,se,me){var Ee,Ie;O?(Ee=$.createEvent("Event"),Ee.promise=se,Ee.reason=me,Ee.initEvent(ee,!1,!0),s.dispatchEvent(Ee)):Ee={promise:se,reason:me},!J&&(Ie=s["on"+ee])?Ie(Ee):ee===W&&S("Unhandled promise rejection",me)},Y=function(ee){t(w,s,function(){var se=ee.facade,me=ee.value,Ee=fe(ee),Ie;if(Ee&&(Ie=E(function(){u?R.emit("unhandledRejection",me,se):z(W,se,me)}),ee.rejection=u||fe(ee)?te:pe,Ie.error))throw Ie.value})},fe=function(ee){return ee.rejection!==pe&&!ee.parent},we=function(ee){t(w,s,function(){var se=ee.facade;u?R.emit("rejectionHandled",se):z(ne,se,ee.value)})},U=function(ee,se,me){return function(Ee){ee(se,Ee,me)}},ve=function(ee,se,me){ee.done||(ee.done=!0,me&&(ee=me),ee.value=se,ee.state=Ae,Q(ee,!0))},Se=function(ee,se,me){if(!ee.done){ee.done=!0,me&&(ee=me);try{if(ee.facade===se)throw new L("Promise can't be resolved itself");var Ee=oe(se);Ee?y(function(){var Ie={done:!1};try{t(Ee,se,U(Se,Ie,ee),U(ve,Ie,ee))}catch(Ce){ve(Ie,Ce,ee)}}):(ee.value=se,ee.state=ue,Q(ee,!1))}catch(Ie){ve({done:!1},Ie,ee)}}};if(V&&(A=function(se){v(this,P),l(se),t(Z,this);var me=M(this);try{se(U(Se,me),U(ve,me))}catch(Ee){ve(me,Ee)}},P=A.prototype,Z=function(se){T(this,{type:G,done:!1,notified:!1,parent:!1,reactions:new I,rejection:!1,state:he,value:void 0})},Z.prototype=n(P,"then",function(se,me){var Ee=M(this),Ie=k(h(this,A));return Ee.parent=!0,Ie.ok=a(se)?se:!0,Ie.fail=a(me)&&me,Ie.domain=u?R.domain:void 0,Ee.state===he?Ee.reactions.add(Ie):y(function(){ie(Ie,Ee)}),Ie.promise}),q=function(){var ee=new Z,se=M(ee);this.promise=ee,this.resolve=U(Se,se),this.reject=U(ve,se)},X.f=k=function(ee){return ee===A||ee===de?new q(ee):C(ee)},!c&&a(B)&&_!==Object.prototype)){ke=_.then,H||n(_,"then",function(se,me){var Ee=this;return new A(function(Ie,Ce){t(ke,Ee,Ie,Ce)}).then(se,me)},{unsafe:!0});try{delete _.constructor}catch{}r&&r(_,P)}f({global:!0,constructor:!0,wrap:!0,forced:V},{Promise:A}),i(A,G,!1,!0),o(G)},{"../internals/a-callable":222,"../internals/an-instance":226,"../internals/define-built-in":245,"../internals/engine-is-node":254,"../internals/export":259,"../internals/function-call":264,"../internals/global":274,"../internals/host-report-errors":277,"../internals/internal-state":282,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/microtask":302,"../internals/new-promise-capability":303,"../internals/object-set-prototype-of":318,"../internals/perform":323,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/queue":328,"../internals/set-species":330,"../internals/set-to-string-tag":331,"../internals/species-constructor":335,"../internals/task":339}],371:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/is-pure"),u=e("../internals/promise-native-constructor"),s=e("../internals/fails"),t=e("../internals/get-built-in"),n=e("../internals/is-callable"),r=e("../internals/species-constructor"),i=e("../internals/promise-resolve"),o=e("../internals/define-built-in"),l=u&&u.prototype,a=!!u&&s(function(){l.finally.call({then:function(){}},function(){})});if(f({target:"Promise",proto:!0,real:!0,forced:a},{finally:function(v){var h=r(this,t("Promise")),w=n(v);return this.then(w?function(y){return i(h,v()).then(function(){return y})}:v,w?function(y){return i(h,v()).then(function(){throw y})}:v)}}),!c&&n(u)){var g=t("Promise").prototype.finally;l.finally!==g&&o(l,"finally",g,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/fails":260,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326,"../internals/species-constructor":335}],372:[function(e,d,m){e("../modules/es.promise.constructor"),e("../modules/es.promise.all"),e("../modules/es.promise.catch"),e("../modules/es.promise.race"),e("../modules/es.promise.reject"),e("../modules/es.promise.resolve")},{"../modules/es.promise.all":368,"../modules/es.promise.catch":369,"../modules/es.promise.constructor":370,"../modules/es.promise.race":373,"../modules/es.promise.reject":374,"../modules/es.promise.resolve":375}],373:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/a-callable"),s=e("../internals/new-promise-capability"),t=e("../internals/perform"),n=e("../internals/iterate"),r=e("../internals/promise-statics-incorrect-iteration");f({target:"Promise",stat:!0,forced:r},{race:function(o){var l=this,a=s.f(l),g=a.reject,v=t(function(){var h=u(l.resolve);n(o,function(w){c(h,l,w).then(a.resolve,g)})});return v.error&&g(v.value),a.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],374:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/new-promise-capability"),s=e("../internals/promise-constructor-detection").CONSTRUCTOR;f({target:"Promise",stat:!0,forced:s},{reject:function(n){var r=u.f(this);return c(r.reject,void 0,n),r.promise}})},{"../internals/export":259,"../internals/function-call":264,"../internals/new-promise-capability":303,"../internals/promise-constructor-detection":324}],375:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/get-built-in"),u=e("../internals/is-pure"),s=e("../internals/promise-native-constructor"),t=e("../internals/promise-constructor-detection").CONSTRUCTOR,n=e("../internals/promise-resolve"),r=c("Promise"),i=u&&!t;f({target:"Promise",stat:!0,forced:u||t},{resolve:function(l){return n(i&&this===r?s:this,l)}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326}],376:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-uncurry-this"),u=e("../internals/to-absolute-index"),s=RangeError,t=String.fromCharCode,n=String.fromCodePoint,r=c([].join),i=!!n&&n.length!==1;f({target:"String",stat:!0,arity:1,forced:i},{fromCodePoint:function(l){for(var a=[],g=arguments.length,v=0,h;g>v;){if(h=+arguments[v++],u(h,1114111)!==h)throw new s(h+" is not a valid code point");a[v]=h<65536?t(h):t(((h-=65536)>>10)+55296,h%1024+56320)}return r(a,"")}})},{"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/to-absolute-index":340}],377:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-uncurry-this"),u=e("../internals/not-a-regexp"),s=e("../internals/require-object-coercible"),t=e("../internals/to-string"),n=e("../internals/correct-is-regexp-logic"),r=c("".indexOf);f({target:"String",proto:!0,forced:!n("includes")},{includes:function(o){return!!~r(t(s(this)),t(u(o)),arguments.length>1?arguments[1]:void 0)}})},{"../internals/correct-is-regexp-logic":238,"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/not-a-regexp":304,"../internals/require-object-coercible":329,"../internals/to-string":348}],378:[function(e,d,m){var f=e("../internals/well-known-symbol-define");f("asyncIterator")},{"../internals/well-known-symbol-define":355}],379:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/global"),u=e("../internals/function-call"),s=e("../internals/function-uncurry-this"),t=e("../internals/is-pure"),n=e("../internals/descriptors"),r=e("../internals/symbol-constructor-detection"),i=e("../internals/fails"),o=e("../internals/has-own-property"),l=e("../internals/object-is-prototype-of"),a=e("../internals/an-object"),g=e("../internals/to-indexed-object"),v=e("../internals/to-property-key"),h=e("../internals/to-string"),w=e("../internals/create-property-descriptor"),y=e("../internals/object-create"),S=e("../internals/object-keys"),E=e("../internals/object-get-own-property-names"),I=e("../internals/object-get-own-property-names-external"),F=e("../internals/object-get-own-property-symbols"),B=e("../internals/object-get-own-property-descriptor"),j=e("../internals/object-define-property"),X=e("../internals/object-define-properties"),G=e("../internals/object-property-is-enumerable"),V=e("../internals/define-built-in"),J=e("../internals/define-built-in-accessor"),H=e("../internals/shared"),M=e("../internals/shared-key"),T=e("../internals/hidden-keys"),_=e("../internals/uid"),A=e("../internals/well-known-symbol"),P=e("../internals/well-known-symbol-wrapped"),L=e("../internals/well-known-symbol-define"),$=e("../internals/symbol-define-to-primitive"),R=e("../internals/set-to-string-tag"),k=e("../internals/internal-state"),C=e("../internals/array-iteration").forEach,O=M("hidden"),W="Symbol",ne="prototype",he=k.set,ue=k.getterFor(W),Ae=Object[ne],pe=c.Symbol,te=pe&&pe[ne],Z=c.RangeError,q=c.TypeError,de=c.QObject,ke=B.f,oe=j.f,ie=I.f,Q=G.f,z=s([].push),Y=H("symbols"),fe=H("op-symbols"),we=H("wks"),U=!de||!de[ne]||!de[ne].findChild,ve=function(je,ge,Me){var Be=ke(Ae,ge);Be&&delete Ae[ge],oe(je,ge,Me),Be&&je!==Ae&&oe(Ae,ge,Be)},Se=n&&i(function(){return y(oe({},"a",{get:function(){return oe(this,"a",{value:7}).a}})).a!==7})?ve:oe,ee=function(je,ge){var Me=Y[je]=y(te);return he(Me,{type:W,tag:je,description:ge}),n||(Me.description=ge),Me},se=function(ge,Me,Be){ge===Ae&&se(fe,Me,Be),a(ge);var Xe=v(Me);return a(Be),o(Y,Xe)?(Be.enumerable?(o(ge,O)&&ge[O][Xe]&&(ge[O][Xe]=!1),Be=y(Be,{enumerable:w(0,!1)})):(o(ge,O)||oe(ge,O,w(1,{})),ge[O][Xe]=!0),Se(ge,Xe,Be)):oe(ge,Xe,Be)},me=function(ge,Me){a(ge);var Be=g(Me),Xe=S(Be).concat(ze(Be));return C(Xe,function(ot){(!n||u(Ie,Be,ot))&&se(ge,ot,Be[ot])}),ge},Ee=function(ge,Me){return Me===void 0?y(ge):me(y(ge),Me)},Ie=function(ge){var Me=v(ge),Be=u(Q,this,Me);return this===Ae&&o(Y,Me)&&!o(fe,Me)?!1:Be||!o(this,Me)||!o(Y,Me)||o(this,O)&&this[O][Me]?Be:!0},Ce=function(ge,Me){var Be=g(ge),Xe=v(Me);if(!(Be===Ae&&o(Y,Xe)&&!o(fe,Xe))){var ot=ke(Be,Xe);return ot&&o(Y,Xe)&&!(o(Be,O)&&Be[O][Xe])&&(ot.enumerable=!0),ot}},Fe=function(ge){var Me=ie(g(ge)),Be=[];return C(Me,function(Xe){!o(Y,Xe)&&!o(T,Xe)&&z(Be,Xe)}),Be},ze=function(je){var ge=je===Ae,Me=ie(ge?fe:g(je)),Be=[];return C(Me,function(Xe){o(Y,Xe)&&(!ge||o(Ae,Xe))&&z(Be,Y[Xe])}),Be};r||(pe=function(){if(l(te,this))throw new q("Symbol is not a constructor");var ge=!arguments.length||arguments[0]===void 0?void 0:h(arguments[0]),Me=_(ge),Be=function(Xe){this===Ae&&u(Be,fe,Xe),o(this,O)&&o(this[O],Me)&&(this[O][Me]=!1);var ot=w(1,Xe);try{Se(this,Me,ot)}catch(ct){if(!(ct instanceof Z))throw ct;ve(this,Me,ot)}};return n&&U&&Se(Ae,Me,{configurable:!0,set:Be}),ee(Me,ge)},te=pe[ne],V(te,"toString",function(){return ue(this).tag}),V(pe,"withoutSetter",function(je){return ee(_(je),je)}),G.f=Ie,j.f=se,X.f=me,B.f=Ce,E.f=I.f=Fe,F.f=ze,P.f=function(je){return ee(A(je),je)},n&&(J(te,"description",{configurable:!0,get:function(){return ue(this).description}}),t||V(Ae,"propertyIsEnumerable",Ie,{unsafe:!0}))),f({global:!0,constructor:!0,wrap:!0,forced:!r,sham:!r},{Symbol:pe}),C(S(we),function(je){L(je)}),f({target:W,stat:!0,forced:!r},{useSetter:function(){U=!0},useSimple:function(){U=!1}}),f({target:"Object",stat:!0,forced:!r,sham:!n},{create:Ee,defineProperty:se,defineProperties:me,getOwnPropertyDescriptor:Ce}),f({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:Fe}),$(),R(pe,W),T[O]=!0},{"../internals/an-object":227,"../internals/array-iteration":229,"../internals/create-property-descriptor":242,"../internals/define-built-in":245,"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/export":259,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/global":274,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-define-properties":307,"../internals/object-define-property":308,"../internals/object-get-own-property-descriptor":309,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-names-external":310,"../internals/object-get-own-property-symbols":312,"../internals/object-is-prototype-of":314,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/set-to-string-tag":331,"../internals/shared":334,"../internals/shared-key":332,"../internals/symbol-constructor-detection":336,"../internals/symbol-define-to-primitive":337,"../internals/to-indexed-object":341,"../internals/to-property-key":346,"../internals/to-string":348,"../internals/uid":350,"../internals/well-known-symbol":357,"../internals/well-known-symbol-define":355,"../internals/well-known-symbol-wrapped":356}],380:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/get-built-in"),u=e("../internals/has-own-property"),s=e("../internals/to-string"),t=e("../internals/shared"),n=e("../internals/symbol-registry-detection"),r=t("string-to-symbol-registry"),i=t("symbol-to-string-registry");f({target:"Symbol",stat:!0,forced:!n},{for:function(o){var l=s(o);if(u(r,l))return r[l];var a=c("Symbol")(l);return r[l]=a,i[a]=l,a}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/has-own-property":275,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/to-string":348}],381:[function(e,d,m){e("../modules/es.symbol.constructor"),e("../modules/es.symbol.for"),e("../modules/es.symbol.key-for"),e("../modules/es.json.stringify"),e("../modules/es.object.get-own-property-symbols")},{"../modules/es.json.stringify":362,"../modules/es.object.get-own-property-symbols":365,"../modules/es.symbol.constructor":379,"../modules/es.symbol.for":380,"../modules/es.symbol.key-for":382}],382:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/has-own-property"),u=e("../internals/is-symbol"),s=e("../internals/try-to-string"),t=e("../internals/shared"),n=e("../internals/symbol-registry-detection"),r=t("symbol-to-string-registry");f({target:"Symbol",stat:!0,forced:!n},{keyFor:function(o){if(!u(o))throw new TypeError(s(o)+" is not a symbol");if(c(r,o))return r[o]}})},{"../internals/export":259,"../internals/has-own-property":275,"../internals/is-symbol":292,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/try-to-string":349}],383:[function(e,d,m){function f(y){return Array.isArray?Array.isArray(y):w(y)==="[object Array]"}m.isArray=f;function c(y){return typeof y=="boolean"}m.isBoolean=c;function u(y){return y===null}m.isNull=u;function s(y){return y==null}m.isNullOrUndefined=s;function t(y){return typeof y=="number"}m.isNumber=t;function n(y){return typeof y=="string"}m.isString=n;function r(y){return typeof y=="symbol"}m.isSymbol=r;function i(y){return y===void 0}m.isUndefined=i;function o(y){return w(y)==="[object RegExp]"}m.isRegExp=o;function l(y){return typeof y=="object"&&y!==null}m.isObject=l;function a(y){return w(y)==="[object Date]"}m.isDate=a;function g(y){return w(y)==="[object Error]"||y instanceof Error}m.isError=g;function v(y){return typeof y=="function"}m.isFunction=v;function h(y){return y===null||typeof y=="boolean"||typeof y=="number"||typeof y=="string"||typeof y=="symbol"||typeof y>"u"}m.isPrimitive=h,m.isBuffer=e("buffer").Buffer.isBuffer;function w(y){return Object.prototype.toString.call(y)}},{buffer:220}],384:[function(e,d,m){(function(f){(function(){var c=e("elliptic"),u=e("bn.js");d.exports=function(i){return new t(i)};var s={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};s.p224=s.secp224r1,s.p256=s.secp256r1=s.prime256v1,s.p192=s.secp192r1=s.prime192v1,s.p384=s.secp384r1,s.p521=s.secp521r1;function t(r){this.curveType=s[r],this.curveType||(this.curveType={name:r}),this.curve=new c.ec(this.curveType.name),this.keys=void 0}t.prototype.generateKeys=function(r,i){return this.keys=this.curve.genKeyPair(),this.getPublicKey(r,i)},t.prototype.computeSecret=function(r,i,o){i=i||"utf8",f.isBuffer(r)||(r=new f(r,i));var l=this.curve.keyFromPublic(r).getPublic(),a=l.mul(this.keys.getPrivate()).getX();return n(a,o,this.curveType.byteLength)},t.prototype.getPublicKey=function(r,i){var o=this.keys.getPublic(i==="compressed",!0);return i==="hybrid"&&(o[o.length-1]%2?o[0]=7:o[0]=6),n(o,r)},t.prototype.getPrivateKey=function(r){return n(this.keys.getPrivate(),r)},t.prototype.setPublicKey=function(r,i){return i=i||"utf8",f.isBuffer(r)||(r=new f(r,i)),this.keys._importPublic(r),this},t.prototype.setPrivateKey=function(r,i){i=i||"utf8",f.isBuffer(r)||(r=new f(r,i));var o=new u(r);return o=o.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(o),this};function n(r,i,o){Array.isArray(r)||(r=r.toArray());var l=new f(r);if(o&&l.lengthg){var v=l==="rmd160"?new n:r(l);a=v.update(a).digest()}else a.lengtht?i=r(i):i.length=_?T:""+Array(_+1-P.length).join(A)+T},I={s:E,z:function(T){var _=-T.utcOffset(),A=Math.abs(_),P=Math.floor(A/60),L=A%60;return(_<=0?"+":"-")+E(P,2,"0")+":"+E(L,2,"0")},m:function T(_,A){if(_.date()1)return T(R[0])}else{var k=_.name;B[k]=_,L=k}return!P&&L&&(F=L),L||!P&&F},V=function(T,_){if(X(T))return T.clone();var A=typeof _=="object"?_:{};return A.date=T,A.args=arguments,new H(A)},J=I;J.l=G,J.i=X,J.w=function(T,_){return V(T,{locale:_.$L,utc:_.$u,x:_.$x,$offset:_.$offset})};var H=function(){function T(A){this.$L=G(A.locale,null,!0),this.parse(A),this.$x=this.$x||A.x||{},this[j]=!0}var _=T.prototype;return _.parse=function(A){this.$d=function(P){var L=P.date,$=P.utc;if(L===null)return new Date(NaN);if(J.u(L))return new Date;if(L instanceof Date)return new Date(L);if(typeof L=="string"&&!/Z$/i.test(L)){var R=L.match(w);if(R){var k=R[2]-1||0,C=(R[7]||"0").substring(0,3);return $?new Date(Date.UTC(R[1],k,R[3]||1,R[4]||0,R[5]||0,R[6]||0,C)):new Date(R[1],k,R[3]||1,R[4]||0,R[5]||0,R[6]||0,C)}}return new Date(L)}(A),this.init()},_.init=function(){var A=this.$d;this.$y=A.getFullYear(),this.$M=A.getMonth(),this.$D=A.getDate(),this.$W=A.getDay(),this.$H=A.getHours(),this.$m=A.getMinutes(),this.$s=A.getSeconds(),this.$ms=A.getMilliseconds()},_.$utils=function(){return J},_.isValid=function(){return this.$d.toString()!==h},_.isSame=function(A,P){var L=V(A);return this.startOf(P)<=L&&L<=this.endOf(P)},_.isAfter=function(A,P){return V(A)68?1900:2e3)},i=function(h){return function(w){this[h]=+w}},o=[/[+-]\d\d:?(\d\d)?|Z/,function(h){(this.zone||(this.zone={})).offset=function(w){if(!w||w==="Z")return 0;var y=w.match(/([+-]|\d\d)/g),S=60*y[1]+(+y[2]||0);return S===0?0:y[0]==="+"?-S:S}(h)}],l=function(h){var w=n[h];return w&&(w.indexOf?w:w.s.concat(w.f))},a=function(h,w){var y,S=n.meridiem;if(S){for(var E=1;E<=24;E+=1)if(h.indexOf(S(E,0,w))>-1){y=E>12;break}}else y=h===(w?"pm":"PM");return y},g={A:[t,function(h){this.afternoon=a(h,!1)}],a:[t,function(h){this.afternoon=a(h,!0)}],S:[/\d/,function(h){this.milliseconds=100*+h}],SS:[u,function(h){this.milliseconds=10*+h}],SSS:[/\d{3}/,function(h){this.milliseconds=+h}],s:[s,i("seconds")],ss:[s,i("seconds")],m:[s,i("minutes")],mm:[s,i("minutes")],H:[s,i("hours")],h:[s,i("hours")],HH:[s,i("hours")],hh:[s,i("hours")],D:[s,i("day")],DD:[u,i("day")],Do:[t,function(h){var w=n.ordinal,y=h.match(/\d+/);if(this.day=y[0],w)for(var S=1;S<=31;S+=1)w(S).replace(/\[|\]/g,"")===h&&(this.day=S)}],M:[s,i("month")],MM:[u,i("month")],MMM:[t,function(h){var w=l("months"),y=(l("monthsShort")||w.map(function(S){return S.slice(0,3)})).indexOf(h)+1;if(y<1)throw new Error;this.month=y%12||y}],MMMM:[t,function(h){var w=l("months").indexOf(h)+1;if(w<1)throw new Error;this.month=w%12||w}],Y:[/[+-]?\d+/,i("year")],YY:[u,function(h){this.year=r(h)}],YYYY:[/\d{4}/,i("year")],Z:o,ZZ:o};function v(h){var w,y;w=h,y=n&&n.formats;for(var S=(h=w.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(G,V,J){var H=J&&J.toUpperCase();return V||y[J]||f[J]||y[H].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(M,T,_){return T||_.slice(1)})})).match(c),E=S.length,I=0;I-1)return new Date((P==="X"?1e3:1)*A);var $=v(P)(A),R=$.year,k=$.month,C=$.day,O=$.hours,W=$.minutes,ne=$.seconds,he=$.milliseconds,ue=$.zone,Ae=new Date,pe=C||(R||k?1:Ae.getDate()),te=R||Ae.getFullYear(),Z=0;R&&!k||(Z=k>0?k-1:Ae.getMonth());var q=O||0,de=W||0,ke=ne||0,oe=he||0;return ue?new Date(Date.UTC(te,Z,pe,q,de,ke,oe+60*ue.offset*1e3)):L?new Date(Date.UTC(te,Z,pe,q,de,ke,oe)):new Date(te,Z,pe,q,de,ke,oe)}catch{return new Date("")}}(F,X,B),this.init(),H&&H!==!0&&(this.$L=this.locale(H).$L),J&&F!=this.format(X)&&(this.$d=new Date("")),n={}}else if(X instanceof Array)for(var M=X.length,T=1;T<=M;T+=1){j[1]=X[T-1];var _=y.apply(this,j);if(_.isValid()){this.$d=_.$d,this.$L=_.$L,this.init();break}T===M&&(this.$d=new Date(""))}else E.call(this,I)}}})},{}],393:[function(e,d,m){(function(f,c){typeof m=="object"&&typeof d<"u"?d.exports=c():(f=typeof globalThis<"u"?globalThis:f||self).dayjs_plugin_utc=c()})(void 0,function(){var f="minute",c=/[+-]\d\d(?::?\d\d)?/g,u=/([+-]|\d\d)/g;return function(s,t,n){var r=t.prototype;n.utc=function(h){var w={date:h,utc:!0,args:arguments};return new t(w)},r.utc=function(h){var w=n(this.toDate(),{locale:this.$L,utc:!0});return h?w.add(this.utcOffset(),f):w},r.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var i=r.parse;r.parse=function(h){h.utc&&(this.$u=!0),this.$utils().u(h.$offset)||(this.$offset=h.$offset),i.call(this,h)};var o=r.init;r.init=function(){if(this.$u){var h=this.$d;this.$y=h.getUTCFullYear(),this.$M=h.getUTCMonth(),this.$D=h.getUTCDate(),this.$W=h.getUTCDay(),this.$H=h.getUTCHours(),this.$m=h.getUTCMinutes(),this.$s=h.getUTCSeconds(),this.$ms=h.getUTCMilliseconds()}else o.call(this)};var l=r.utcOffset;r.utcOffset=function(h,w){var y=this.$utils().u;if(y(h))return this.$u?0:y(this.$offset)?l.call(this):this.$offset;if(typeof h=="string"&&(h=function(F){F===void 0&&(F="");var B=F.match(c);if(!B)return null;var j=(""+B[0]).match(u)||["-",0,0],X=j[0],G=60*+j[1]+ +j[2];return G===0?0:X==="+"?G:-G}(h),h===null))return this;var S=Math.abs(h)<=16?60*h:h,E=this;if(w)return E.$offset=S,E.$u=h===0,E;if(h!==0){var I=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(E=this.local().add(S+I,f)).$offset=S,E.$x.$localOffset=I}else E=this.utc();return E};var a=r.format;r.format=function(h){var w=h||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return a.call(this,w)},r.valueOf=function(){var h=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*h},r.isUTC=function(){return!!this.$u},r.toISOString=function(){return this.toDate().toISOString()},r.toString=function(){return this.toDate().toUTCString()};var g=r.toDate;r.toDate=function(h){return h==="s"&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():g.call(this)};var v=r.diff;r.diff=function(h,w,y){if(h&&this.$u===h.$u)return v.call(this,h,w,y);var S=this.local(),E=n(h).local();return v.call(S,E,w,y)}}})},{}],394:[function(e,d,m){m.utils=e("./des/utils"),m.Cipher=e("./des/cipher"),m.DES=e("./des/des"),m.CBC=e("./des/cbc"),m.EDE=e("./des/ede")},{"./des/cbc":395,"./des/cipher":396,"./des/des":397,"./des/ede":398,"./des/utils":399}],395:[function(e,d,m){var f=e("minimalistic-assert"),c=e("inherits"),u={};function s(n){f.equal(n.length,8,"Invalid IV length"),this.iv=new Array(8);for(var r=0;r0;r--)t+=this._buffer(s,t),n+=this._flushBuffer(i,n);return t+=this._buffer(s,t),i},c.prototype.final=function(s){var t;s&&(t=this.update(s));var n;return this.type==="encrypt"?n=this._finalEncrypt():n=this._finalDecrypt(),t?t.concat(n):n},c.prototype._pad=function(s,t){if(t===0)return!1;for(;t>>1];a=u.r28shl(a,h),g=u.r28shl(g,h),u.pc2(a,g,o.keys,v)}},n.prototype._update=function(o,l,a,g){var v=this._desState,h=u.readUInt32BE(o,l),w=u.readUInt32BE(o,l+4);u.ip(h,w,v.tmp,0),h=v.tmp[0],w=v.tmp[1],this.type==="encrypt"?this._encrypt(v,h,w,v.tmp,0):this._decrypt(v,h,w,v.tmp,0),h=v.tmp[0],w=v.tmp[1],u.writeUInt32BE(a,h,g),u.writeUInt32BE(a,w,g+4)},n.prototype._pad=function(o,l){if(this.padding===!1)return!1;for(var a=o.length-l,g=l;g>>0,h=B}u.rip(w,h,g,v)},n.prototype._decrypt=function(o,l,a,g,v){for(var h=a,w=l,y=o.keys.length-2;y>=0;y-=2){var S=o.keys[y],E=o.keys[y+1];u.expand(h,o.tmp,0),S^=o.tmp[0],E^=o.tmp[1];var I=u.substitute(S,E),F=u.permute(I),B=h;h=(w^F)>>>0,w=B}u.rip(h,w,g,v)}},{"./cipher":396,"./utils":399,inherits:440,"minimalistic-assert":453}],398:[function(e,d,m){var f=e("minimalistic-assert"),c=e("inherits"),u=e("./cipher"),s=e("./des");function t(r,i){f.equal(i.length,24,"Invalid key length");var o=i.slice(0,8),l=i.slice(8,16),a=i.slice(16,24);r==="encrypt"?this.ciphers=[s.create({type:"encrypt",key:o}),s.create({type:"decrypt",key:l}),s.create({type:"encrypt",key:a})]:this.ciphers=[s.create({type:"decrypt",key:a}),s.create({type:"encrypt",key:l}),s.create({type:"decrypt",key:o})]}function n(r){u.call(this,r);var i=new t(this.type,this.options.key);this._edeState=i}c(n,u),d.exports=n,n.create=function(i){return new n(i)},n.prototype._update=function(i,o,l,a){var g=this._edeState;g.ciphers[0]._update(i,o,l,a),g.ciphers[1]._update(l,a,l,a),g.ciphers[2]._update(l,a,l,a)},n.prototype._pad=s.prototype._pad,n.prototype._unpad=s.prototype._unpad},{"./cipher":396,"./des":397,inherits:440,"minimalistic-assert":453}],399:[function(e,d,m){m.readUInt32BE=function(t,n){var r=t[0+n]<<24|t[1+n]<<16|t[2+n]<<8|t[3+n];return r>>>0},m.writeUInt32BE=function(t,n,r){t[0+r]=n>>>24,t[1+r]=n>>>16&255,t[2+r]=n>>>8&255,t[3+r]=n&255},m.ip=function(t,n,r,i){for(var o=0,l=0,a=6;a>=0;a-=2){for(var g=0;g<=24;g+=8)o<<=1,o|=n>>>g+a&1;for(var g=0;g<=24;g+=8)o<<=1,o|=t>>>g+a&1}for(var a=6;a>=0;a-=2){for(var g=1;g<=25;g+=8)l<<=1,l|=n>>>g+a&1;for(var g=1;g<=25;g+=8)l<<=1,l|=t>>>g+a&1}r[i+0]=o>>>0,r[i+1]=l>>>0},m.rip=function(t,n,r,i){for(var o=0,l=0,a=0;a<4;a++)for(var g=24;g>=0;g-=8)o<<=1,o|=n>>>g+a&1,o<<=1,o|=t>>>g+a&1;for(var a=4;a<8;a++)for(var g=24;g>=0;g-=8)l<<=1,l|=n>>>g+a&1,l<<=1,l|=t>>>g+a&1;r[i+0]=o>>>0,r[i+1]=l>>>0},m.pc1=function(t,n,r,i){for(var o=0,l=0,a=7;a>=5;a--){for(var g=0;g<=24;g+=8)o<<=1,o|=n>>g+a&1;for(var g=0;g<=24;g+=8)o<<=1,o|=t>>g+a&1}for(var g=0;g<=24;g+=8)o<<=1,o|=n>>g+a&1;for(var a=1;a<=3;a++){for(var g=0;g<=24;g+=8)l<<=1,l|=n>>g+a&1;for(var g=0;g<=24;g+=8)l<<=1,l|=t>>g+a&1}for(var g=0;g<=24;g+=8)l<<=1,l|=t>>g+a&1;r[i+0]=o>>>0,r[i+1]=l>>>0},m.r28shl=function(t,n){return t<>>28-n};var f=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];m.pc2=function(t,n,r,i){for(var o=0,l=0,a=f.length>>>1,g=0;g>>f[g]&1;for(var g=a;g>>f[g]&1;r[i+0]=o>>>0,r[i+1]=l>>>0},m.expand=function(t,n,r){var i=0,o=0;i=(t&1)<<5|t>>>27;for(var l=23;l>=15;l-=4)i<<=6,i|=t>>>l&63;for(var l=11;l>=3;l-=4)o|=t>>>l&63,o<<=6;o|=(t&31)<<1|t>>>31,n[r+0]=i>>>0,n[r+1]=o>>>0};var c=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];m.substitute=function(t,n){for(var r=0,i=0;i<4;i++){var o=t>>>18-i*6&63,l=c[i*64+o];r<<=4,r|=l}for(var i=0;i<4;i++){var o=n>>>18-i*6&63,l=c[4*64+i*64+o];r<<=4,r|=l}return r>>>0};var u=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];m.permute=function(t){for(var n=0,r=0;r>>u[r]&1;return n>>>0},m.padSplit=function(t,n,r){for(var i=t.toString(2);i.lengthE;)F.ishrn(1);if(F.isEven()&&F.iadd(n),F.testn(1)||F.iadd(r),I.cmp(r)){if(!I.cmp(i))for(;F.mod(o).cmp(l);)F.iadd(g)}else for(;F.mod(u).cmp(a);)F.iadd(g);if(B=F.shrn(1),w(B)&&w(F)&&y(B)&&y(F)&&t.test(B)&&t.test(F))return F}}},{"bn.js":404,"miller-rabin":451,randombytes:475}],403:[function(e,d,m){d.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],404:[function(e,d,m){arguments[4][184][0].apply(m,arguments)},{buffer:188,dup:184}],405:[function(e,d,m){var f=m;f.version=e("../package.json").version,f.utils=e("./elliptic/utils"),f.rand=e("brorand"),f.curve=e("./elliptic/curve"),f.curves=e("./elliptic/curves"),f.ec=e("./elliptic/ec"),f.eddsa=e("./elliptic/eddsa")},{"../package.json":421,"./elliptic/curve":408,"./elliptic/curves":411,"./elliptic/ec":412,"./elliptic/eddsa":415,"./elliptic/utils":419,brorand:187}],406:[function(e,d,m){var f=e("bn.js"),c=e("../utils"),u=c.getNAF,s=c.getJSF,t=c.assert;function n(i,o){this.type=i,this.p=new f(o.p,16),this.red=o.prime?f.red(o.prime):f.mont(this.p),this.zero=new f(0).toRed(this.red),this.one=new f(1).toRed(this.red),this.two=new f(2).toRed(this.red),this.n=o.n&&new f(o.n,16),this.g=o.g&&this.pointFromJSON(o.g,o.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var l=this.n&&this.p.div(this.n);!l||l.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}d.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(o,l){t(o.precomputed);var a=o._getDoubles(),g=u(l,1,this._bitLength),v=(1<=w;S--)y=(y<<1)+g[S];h.push(y)}for(var E=this.jpoint(null,null,null),I=this.jpoint(null,null,null),F=v;F>0;F--){for(w=0;w=0;y--){for(var S=0;y>=0&&h[y]===0;y--)S++;if(y>=0&&S++,w=w.dblp(S),y<0)break;var E=h[y];t(E!==0),o.type==="affine"?E>0?w=w.mixedAdd(v[E-1>>1]):w=w.mixedAdd(v[-E-1>>1].neg()):E>0?w=w.add(v[E-1>>1]):w=w.add(v[-E-1>>1].neg())}return o.type==="affine"?w.toP():w},n.prototype._wnafMulAdd=function(o,l,a,g,v){var h=this._wnafT1,w=this._wnafT2,y=this._wnafT3,S=0,E,I,F;for(E=0;E=1;E-=2){var j=E-1,X=E;if(h[j]!==1||h[X]!==1){y[j]=u(a[j],h[j],this._bitLength),y[X]=u(a[X],h[X],this._bitLength),S=Math.max(y[j].length,S),S=Math.max(y[X].length,S);continue}var G=[l[j],null,null,l[X]];l[j].y.cmp(l[X].y)===0?(G[1]=l[j].add(l[X]),G[2]=l[j].toJ().mixedAdd(l[X].neg())):l[j].y.cmp(l[X].y.redNeg())===0?(G[1]=l[j].toJ().mixedAdd(l[X]),G[2]=l[j].add(l[X].neg())):(G[1]=l[j].toJ().mixedAdd(l[X]),G[2]=l[j].toJ().mixedAdd(l[X].neg()));var V=[-3,-1,-5,-7,0,7,5,1,3],J=s(a[j],a[X]);for(S=Math.max(J[0].length,S),y[j]=new Array(S),y[X]=new Array(S),I=0;I=0;E--){for(var A=0;E>=0;){var P=!0;for(I=0;I=0&&A++,T=T.dblp(A),E<0)break;for(I=0;I0?F=w[I][L-1>>1]:L<0&&(F=w[I][-L-1>>1].neg()),F.type==="affine"?T=T.mixedAdd(F):T=T.add(F))}}for(E=0;E=Math.ceil((o.bitLength()+1)/l.step):!1},r.prototype._getDoubles=function(o,l){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var a=[this],g=this,v=0;v":""},r.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},r.prototype._extDbl=function(){var o=this.x.redSqr(),l=this.y.redSqr(),a=this.z.redSqr();a=a.redIAdd(a);var g=this.curve._mulA(o),v=this.x.redAdd(this.y).redSqr().redISub(o).redISub(l),h=g.redAdd(l),w=h.redSub(a),y=g.redSub(l),S=v.redMul(w),E=h.redMul(y),I=v.redMul(y),F=w.redMul(h);return this.curve.point(S,E,F,I)},r.prototype._projDbl=function(){var o=this.x.redAdd(this.y).redSqr(),l=this.x.redSqr(),a=this.y.redSqr(),g,v,h,w,y,S;if(this.curve.twisted){w=this.curve._mulA(l);var E=w.redAdd(a);this.zOne?(g=o.redSub(l).redSub(a).redMul(E.redSub(this.curve.two)),v=E.redMul(w.redSub(a)),h=E.redSqr().redSub(E).redSub(E)):(y=this.z.redSqr(),S=E.redSub(y).redISub(y),g=o.redSub(l).redISub(a).redMul(S),v=E.redMul(w.redSub(a)),h=E.redMul(S))}else w=l.redAdd(a),y=this.curve._mulC(this.z).redSqr(),S=w.redSub(y).redSub(y),g=this.curve._mulC(o.redISub(w)).redMul(S),v=this.curve._mulC(w).redMul(l.redISub(a)),h=w.redMul(S);return this.curve.point(g,v,h)},r.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},r.prototype._extAdd=function(o){var l=this.y.redSub(this.x).redMul(o.y.redSub(o.x)),a=this.y.redAdd(this.x).redMul(o.y.redAdd(o.x)),g=this.t.redMul(this.curve.dd).redMul(o.t),v=this.z.redMul(o.z.redAdd(o.z)),h=a.redSub(l),w=v.redSub(g),y=v.redAdd(g),S=a.redAdd(l),E=h.redMul(w),I=y.redMul(S),F=h.redMul(S),B=w.redMul(y);return this.curve.point(E,I,B,F)},r.prototype._projAdd=function(o){var l=this.z.redMul(o.z),a=l.redSqr(),g=this.x.redMul(o.x),v=this.y.redMul(o.y),h=this.curve.d.redMul(g).redMul(v),w=a.redSub(h),y=a.redAdd(h),S=this.x.redAdd(this.y).redMul(o.x.redAdd(o.y)).redISub(g).redISub(v),E=l.redMul(w).redMul(S),I,F;return this.curve.twisted?(I=l.redMul(y).redMul(v.redSub(this.curve._mulA(g))),F=w.redMul(y)):(I=l.redMul(y).redMul(v.redSub(g)),F=this.curve._mulC(w).redMul(y)),this.curve.point(E,I,F)},r.prototype.add=function(o){return this.isInfinity()?o:o.isInfinity()?this:this.curve.extended?this._extAdd(o):this._projAdd(o)},r.prototype.mul=function(o){return this._hasDoubles(o)?this.curve._fixedNafMul(this,o):this.curve._wnafMul(this,o)},r.prototype.mulAdd=function(o,l,a){return this.curve._wnafMulAdd(1,[this,l],[o,a],2,!1)},r.prototype.jmulAdd=function(o,l,a){return this.curve._wnafMulAdd(1,[this,l],[o,a],2,!0)},r.prototype.normalize=function(){if(this.zOne)return this;var o=this.z.redInvm();return this.x=this.x.redMul(o),this.y=this.y.redMul(o),this.t&&(this.t=this.t.redMul(o)),this.z=this.curve.one,this.zOne=!0,this},r.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},r.prototype.getX=function(){return this.normalize(),this.x.fromRed()},r.prototype.getY=function(){return this.normalize(),this.y.fromRed()},r.prototype.eq=function(o){return this===o||this.getX().cmp(o.getX())===0&&this.getY().cmp(o.getY())===0},r.prototype.eqXToP=function(o){var l=o.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(l)===0)return!0;for(var a=o.clone(),g=this.curve.redN.redMul(this.z);;){if(a.iadd(this.curve.n),a.cmp(this.curve.p)>=0)return!1;if(l.redIAdd(g),this.x.cmp(l)===0)return!0}},r.prototype.toP=r.prototype.normalize,r.prototype.mixedAdd=r.prototype.add},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],408:[function(e,d,m){var f=m;f.base=e("./base"),f.short=e("./short"),f.mont=e("./mont"),f.edwards=e("./edwards")},{"./base":406,"./edwards":407,"./mont":409,"./short":410}],409:[function(e,d,m){var f=e("bn.js"),c=e("inherits"),u=e("./base"),s=e("../utils");function t(r){u.call(this,"mont",r),this.a=new f(r.a,16).toRed(this.red),this.b=new f(r.b,16).toRed(this.red),this.i4=new f(4).toRed(this.red).redInvm(),this.two=new f(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}c(t,u),d.exports=t,t.prototype.validate=function(i){var o=i.normalize().x,l=o.redSqr(),a=l.redMul(o).redAdd(l.redMul(this.a)).redAdd(o),g=a.redSqrt();return g.redSqr().cmp(a)===0};function n(r,i,o){u.BasePoint.call(this,r,"projective"),i===null&&o===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new f(i,16),this.z=new f(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}c(n,u.BasePoint),t.prototype.decodePoint=function(i,o){return this.point(s.toArray(i,o),1)},t.prototype.point=function(i,o){return new n(this,i,o)},t.prototype.pointFromJSON=function(i){return n.fromJSON(this,i)},n.prototype.precompute=function(){},n.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},n.fromJSON=function(i,o){return new n(i,o[0],o[1]||i.one)},n.prototype.inspect=function(){return this.isInfinity()?"":""},n.prototype.isInfinity=function(){return this.z.cmpn(0)===0},n.prototype.dbl=function(){var i=this.x.redAdd(this.z),o=i.redSqr(),l=this.x.redSub(this.z),a=l.redSqr(),g=o.redSub(a),v=o.redMul(a),h=g.redMul(a.redAdd(this.curve.a24.redMul(g)));return this.curve.point(v,h)},n.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},n.prototype.diffAdd=function(i,o){var l=this.x.redAdd(this.z),a=this.x.redSub(this.z),g=i.x.redAdd(i.z),v=i.x.redSub(i.z),h=v.redMul(l),w=g.redMul(a),y=o.z.redMul(h.redAdd(w).redSqr()),S=o.x.redMul(h.redISub(w).redSqr());return this.curve.point(y,S)},n.prototype.mul=function(i){for(var o=i.clone(),l=this,a=this.curve.point(null,null),g=this,v=[];o.cmpn(0)!==0;o.iushrn(1))v.push(o.andln(1));for(var h=v.length-1;h>=0;h--)v[h]===0?(l=l.diffAdd(a,g),a=a.dbl()):(a=l.diffAdd(a,g),l=l.dbl());return a},n.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},n.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},n.prototype.eq=function(i){return this.getX().cmp(i.getX())===0},n.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},n.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],410:[function(e,d,m){var f=e("../utils"),c=e("bn.js"),u=e("inherits"),s=e("./base"),t=f.assert;function n(o){s.call(this,"short",o),this.a=new c(o.a,16).toRed(this.red),this.b=new c(o.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=this.a.fromRed().cmpn(0)===0,this.threeA=this.a.fromRed().sub(this.p).cmpn(-3)===0,this.endo=this._getEndomorphism(o),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}u(n,s),d.exports=n,n.prototype._getEndomorphism=function(l){if(!(!this.zeroA||!this.g||!this.n||this.p.modn(3)!==1)){var a,g;if(l.beta)a=new c(l.beta,16).toRed(this.red);else{var v=this._getEndoRoots(this.p);a=v[0].cmp(v[1])<0?v[0]:v[1],a=a.toRed(this.red)}if(l.lambda)g=new c(l.lambda,16);else{var h=this._getEndoRoots(this.n);this.g.mul(h[0]).x.cmp(this.g.x.redMul(a))===0?g=h[0]:(g=h[1],t(this.g.mul(g).x.cmp(this.g.x.redMul(a))===0))}var w;return l.basis?w=l.basis.map(function(y){return{a:new c(y.a,16),b:new c(y.b,16)}}):w=this._getEndoBasis(g),{beta:a,lambda:g,basis:w}}},n.prototype._getEndoRoots=function(l){var a=l===this.p?this.red:c.mont(l),g=new c(2).toRed(a).redInvm(),v=g.redNeg(),h=new c(3).toRed(a).redNeg().redSqrt().redMul(g),w=v.redAdd(h).fromRed(),y=v.redSub(h).fromRed();return[w,y]},n.prototype._getEndoBasis=function(l){for(var a=this.n.ushrn(Math.floor(this.n.bitLength()/2)),g=l,v=this.n.clone(),h=new c(1),w=new c(0),y=new c(0),S=new c(1),E,I,F,B,j,X,G,V=0,J,H;g.cmpn(0)!==0;){var M=v.div(g);J=v.sub(M.mul(g)),H=y.sub(M.mul(h));var T=S.sub(M.mul(w));if(!F&&J.cmp(a)<0)E=G.neg(),I=h,F=J.neg(),B=H;else if(F&&++V===2)break;G=J,v=g,g=J,y=h,h=H,S=w,w=T}j=J.neg(),X=H;var _=F.sqr().add(B.sqr()),A=j.sqr().add(X.sqr());return A.cmp(_)>=0&&(j=E,X=I),F.negative&&(F=F.neg(),B=B.neg()),j.negative&&(j=j.neg(),X=X.neg()),[{a:F,b:B},{a:j,b:X}]},n.prototype._endoSplit=function(l){var a=this.endo.basis,g=a[0],v=a[1],h=v.b.mul(l).divRound(this.n),w=g.b.neg().mul(l).divRound(this.n),y=h.mul(g.a),S=w.mul(v.a),E=h.mul(g.b),I=w.mul(v.b),F=l.sub(y).sub(S),B=E.add(I).neg();return{k1:F,k2:B}},n.prototype.pointFromX=function(l,a){l=new c(l,16),l.red||(l=l.toRed(this.red));var g=l.redSqr().redMul(l).redIAdd(l.redMul(this.a)).redIAdd(this.b),v=g.redSqrt();if(v.redSqr().redSub(g).cmp(this.zero)!==0)throw new Error("invalid point");var h=v.fromRed().isOdd();return(a&&!h||!a&&h)&&(v=v.redNeg()),this.point(l,v)},n.prototype.validate=function(l){if(l.inf)return!0;var a=l.x,g=l.y,v=this.a.redMul(a),h=a.redSqr().redMul(a).redIAdd(v).redIAdd(this.b);return g.redSqr().redISub(h).cmpn(0)===0},n.prototype._endoWnafMulAdd=function(l,a,g){for(var v=this._endoWnafT1,h=this._endoWnafT2,w=0;w":""},r.prototype.isInfinity=function(){return this.inf},r.prototype.add=function(l){if(this.inf)return l;if(l.inf)return this;if(this.eq(l))return this.dbl();if(this.neg().eq(l))return this.curve.point(null,null);if(this.x.cmp(l.x)===0)return this.curve.point(null,null);var a=this.y.redSub(l.y);a.cmpn(0)!==0&&(a=a.redMul(this.x.redSub(l.x).redInvm()));var g=a.redSqr().redISub(this.x).redISub(l.x),v=a.redMul(this.x.redSub(g)).redISub(this.y);return this.curve.point(g,v)},r.prototype.dbl=function(){if(this.inf)return this;var l=this.y.redAdd(this.y);if(l.cmpn(0)===0)return this.curve.point(null,null);var a=this.curve.a,g=this.x.redSqr(),v=l.redInvm(),h=g.redAdd(g).redIAdd(g).redIAdd(a).redMul(v),w=h.redSqr().redISub(this.x.redAdd(this.x)),y=h.redMul(this.x.redSub(w)).redISub(this.y);return this.curve.point(w,y)},r.prototype.getX=function(){return this.x.fromRed()},r.prototype.getY=function(){return this.y.fromRed()},r.prototype.mul=function(l){return l=new c(l,16),this.isInfinity()?this:this._hasDoubles(l)?this.curve._fixedNafMul(this,l):this.curve.endo?this.curve._endoWnafMulAdd([this],[l]):this.curve._wnafMul(this,l)},r.prototype.mulAdd=function(l,a,g){var v=[this,a],h=[l,g];return this.curve.endo?this.curve._endoWnafMulAdd(v,h):this.curve._wnafMulAdd(1,v,h,2)},r.prototype.jmulAdd=function(l,a,g){var v=[this,a],h=[l,g];return this.curve.endo?this.curve._endoWnafMulAdd(v,h,!0):this.curve._wnafMulAdd(1,v,h,2,!0)},r.prototype.eq=function(l){return this===l||this.inf===l.inf&&(this.inf||this.x.cmp(l.x)===0&&this.y.cmp(l.y)===0)},r.prototype.neg=function(l){if(this.inf)return this;var a=this.curve.point(this.x,this.y.redNeg());if(l&&this.precomputed){var g=this.precomputed,v=function(h){return h.neg()};a.precomputed={naf:g.naf&&{wnd:g.naf.wnd,points:g.naf.points.map(v)},doubles:g.doubles&&{step:g.doubles.step,points:g.doubles.points.map(v)}}}return a},r.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var l=this.curve.jpoint(this.x,this.y,this.curve.one);return l};function i(o,l,a,g){s.BasePoint.call(this,o,"jacobian"),l===null&&a===null&&g===null?(this.x=this.curve.one,this.y=this.curve.one,this.z=new c(0)):(this.x=new c(l,16),this.y=new c(a,16),this.z=new c(g,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}u(i,s.BasePoint),n.prototype.jpoint=function(l,a,g){return new i(this,l,a,g)},i.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var l=this.z.redInvm(),a=l.redSqr(),g=this.x.redMul(a),v=this.y.redMul(a).redMul(l);return this.curve.point(g,v)},i.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},i.prototype.add=function(l){if(this.isInfinity())return l;if(l.isInfinity())return this;var a=l.z.redSqr(),g=this.z.redSqr(),v=this.x.redMul(a),h=l.x.redMul(g),w=this.y.redMul(a.redMul(l.z)),y=l.y.redMul(g.redMul(this.z)),S=v.redSub(h),E=w.redSub(y);if(S.cmpn(0)===0)return E.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var I=S.redSqr(),F=I.redMul(S),B=v.redMul(I),j=E.redSqr().redIAdd(F).redISub(B).redISub(B),X=E.redMul(B.redISub(j)).redISub(w.redMul(F)),G=this.z.redMul(l.z).redMul(S);return this.curve.jpoint(j,X,G)},i.prototype.mixedAdd=function(l){if(this.isInfinity())return l.toJ();if(l.isInfinity())return this;var a=this.z.redSqr(),g=this.x,v=l.x.redMul(a),h=this.y,w=l.y.redMul(a).redMul(this.z),y=g.redSub(v),S=h.redSub(w);if(y.cmpn(0)===0)return S.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var E=y.redSqr(),I=E.redMul(y),F=g.redMul(E),B=S.redSqr().redIAdd(I).redISub(F).redISub(F),j=S.redMul(F.redISub(B)).redISub(h.redMul(I)),X=this.z.redMul(y);return this.curve.jpoint(B,j,X)},i.prototype.dblp=function(l){if(l===0)return this;if(this.isInfinity())return this;if(!l)return this.dbl();var a;if(this.curve.zeroA||this.curve.threeA){var g=this;for(a=0;a=0)return!1;if(g.redIAdd(h),this.x.cmp(g)===0)return!0}},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return this.z.cmpn(0)===0}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],411:[function(e,d,m){var f=m,c=e("hash.js"),u=e("./curve"),s=e("./utils"),t=s.assert;function n(o){o.type==="short"?this.curve=new u.short(o):o.type==="edwards"?this.curve=new u.edwards(o):this.curve=new u.mont(o),this.g=this.curve.g,this.n=this.curve.n,this.hash=o.hash,t(this.g.validate(),"Invalid curve"),t(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}f.PresetCurve=n;function r(o,l){Object.defineProperty(f,o,{configurable:!0,enumerable:!0,get:function(){var a=new n(l);return Object.defineProperty(f,o,{configurable:!0,enumerable:!0,value:a}),a}})}r("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:c.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),r("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:c.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),r("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:c.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),r("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:c.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),r("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:c.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),r("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:c.sha256,gRed:!1,g:["9"]}),r("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:c.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var i;try{i=e("./precomputed/secp256k1")}catch{i=void 0}r("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:c.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",i]})},{"./curve":408,"./precomputed/secp256k1":418,"./utils":419,"hash.js":426}],412:[function(e,d,m){var f=e("bn.js"),c=e("hmac-drbg"),u=e("../utils"),s=e("../curves"),t=e("brorand"),n=u.assert,r=e("./key"),i=e("./signature");function o(l){if(!(this instanceof o))return new o(l);typeof l=="string"&&(n(Object.prototype.hasOwnProperty.call(s,l),"Unknown curve "+l),l=s[l]),l instanceof s.PresetCurve&&(l={curve:l}),this.curve=l.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=l.curve.g,this.g.precompute(l.curve.n.bitLength()+1),this.hash=l.hash||l.curve.hash}d.exports=o,o.prototype.keyPair=function(a){return new r(this,a)},o.prototype.keyFromPrivate=function(a,g){return r.fromPrivate(this,a,g)},o.prototype.keyFromPublic=function(a,g){return r.fromPublic(this,a,g)},o.prototype.genKeyPair=function(a){a||(a={});for(var g=new c({hash:this.hash,pers:a.pers,persEnc:a.persEnc||"utf8",entropy:a.entropy||t(this.hash.hmacStrength),entropyEnc:a.entropy&&a.entropyEnc||"utf8",nonce:this.n.toArray()}),v=this.n.byteLength(),h=this.n.sub(new f(2));;){var w=new f(g.generate(v));if(!(w.cmp(h)>0))return w.iaddn(1),this.keyFromPrivate(w)}},o.prototype._truncateToN=function(a,g){var v=a.byteLength()*8-this.n.bitLength();return v>0&&(a=a.ushrn(v)),!g&&a.cmp(this.n)>=0?a.sub(this.n):a},o.prototype.sign=function(a,g,v,h){typeof v=="object"&&(h=v,v=null),h||(h={}),g=this.keyFromPrivate(g,v),a=this._truncateToN(new f(a,16));for(var w=this.n.byteLength(),y=g.getPrivate().toArray("be",w),S=a.toArray("be",w),E=new c({hash:this.hash,entropy:y,nonce:S,pers:h.pers,persEnc:h.persEnc||"utf8"}),I=this.n.sub(new f(1)),F=0;;F++){var B=h.k?h.k(F):new f(E.generate(this.n.byteLength()));if(B=this._truncateToN(B,!0),!(B.cmpn(1)<=0||B.cmp(I)>=0)){var j=this.g.mul(B);if(!j.isInfinity()){var X=j.getX(),G=X.umod(this.n);if(G.cmpn(0)!==0){var V=B.invm(this.n).mul(G.mul(g.getPrivate()).iadd(a));if(V=V.umod(this.n),V.cmpn(0)!==0){var J=(j.getY().isOdd()?1:0)|(X.cmp(G)!==0?2:0);return h.canonical&&V.cmp(this.nh)>0&&(V=this.n.sub(V),J^=1),new i({r:G,s:V,recoveryParam:J})}}}}}},o.prototype.verify=function(a,g,v,h){a=this._truncateToN(new f(a,16)),v=this.keyFromPublic(v,h),g=new i(g,"hex");var w=g.r,y=g.s;if(w.cmpn(1)<0||w.cmp(this.n)>=0||y.cmpn(1)<0||y.cmp(this.n)>=0)return!1;var S=y.invm(this.n),E=S.mul(a).umod(this.n),I=S.mul(w).umod(this.n),F;return this.curve._maxwellTrick?(F=this.g.jmulAdd(E,v.getPublic(),I),F.isInfinity()?!1:F.eqXToP(w)):(F=this.g.mulAdd(E,v.getPublic(),I),F.isInfinity()?!1:F.getX().umod(this.n).cmp(w)===0)},o.prototype.recoverPubKey=function(l,a,g,v){n((3&g)===g,"The recovery param is more than two bits"),a=new i(a,v);var h=this.n,w=new f(l),y=a.r,S=a.s,E=g&1,I=g>>1;if(y.cmp(this.curve.p.umod(this.curve.n))>=0&&I)throw new Error("Unable to find sencond key candinate");I?y=this.curve.pointFromX(y.add(this.curve.n),E):y=this.curve.pointFromX(y,E);var F=a.r.invm(h),B=h.sub(w).mul(F).umod(h),j=S.mul(F).umod(h);return this.g.mulAdd(B,y,j)},o.prototype.getKeyRecoveryParam=function(l,a,g,v){if(a=new i(a,v),a.recoveryParam!==null)return a.recoveryParam;for(var h=0;h<4;h++){var w;try{w=this.recoverPubKey(l,a,h)}catch{continue}if(w.eq(g))return h}throw new Error("Unable to find valid recovery factor")}},{"../curves":411,"../utils":419,"./key":413,"./signature":414,"bn.js":420,brorand:187,"hmac-drbg":438}],413:[function(e,d,m){var f=e("bn.js"),c=e("../utils"),u=c.assert;function s(t,n){this.ec=t,this.priv=null,this.pub=null,n.priv&&this._importPrivate(n.priv,n.privEnc),n.pub&&this._importPublic(n.pub,n.pubEnc)}d.exports=s,s.fromPublic=function(n,r,i){return r instanceof s?r:new s(n,{pub:r,pubEnc:i})},s.fromPrivate=function(n,r,i){return r instanceof s?r:new s(n,{priv:r,privEnc:i})},s.prototype.validate=function(){var n=this.getPublic();return n.isInfinity()?{result:!1,reason:"Invalid public key"}:n.validate()?n.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},s.prototype.getPublic=function(n,r){return typeof n=="string"&&(r=n,n=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),r?this.pub.encode(r,n):this.pub},s.prototype.getPrivate=function(n){return n==="hex"?this.priv.toString(16,2):this.priv},s.prototype._importPrivate=function(n,r){this.priv=new f(n,r||16),this.priv=this.priv.umod(this.ec.curve.n)},s.prototype._importPublic=function(n,r){if(n.x||n.y){this.ec.curve.type==="mont"?u(n.x,"Need x coordinate"):(this.ec.curve.type==="short"||this.ec.curve.type==="edwards")&&u(n.x&&n.y,"Need both x and y coordinate"),this.pub=this.ec.curve.point(n.x,n.y);return}this.pub=this.ec.curve.decodePoint(n,r)},s.prototype.derive=function(n){return n.validate()||u(n.validate(),"public point not validated"),n.mul(this.priv).getX()},s.prototype.sign=function(n,r,i){return this.ec.sign(n,this,r,i)},s.prototype.verify=function(n,r){return this.ec.verify(n,r,this)},s.prototype.inspect=function(){return""}},{"../utils":419,"bn.js":420}],414:[function(e,d,m){var f=e("bn.js"),c=e("../utils"),u=c.assert;function s(o,l){if(o instanceof s)return o;this._importDER(o,l)||(u(o.r&&o.s,"Signature without r or s"),this.r=new f(o.r,16),this.s=new f(o.s,16),o.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=o.recoveryParam)}d.exports=s;function t(){this.place=0}function n(o,l){var a=o[l.place++];if(!(a&128))return a;var g=a&15;if(g===0||g>4)return!1;for(var v=0,h=0,w=l.place;h>>=0;return v<=127?!1:(l.place=w,v)}function r(o){for(var l=0,a=o.length-1;!o[l]&&!(o[l+1]&128)&&l>>3);for(o.push(a|128);--a;)o.push(l>>>(a<<3)&255);o.push(l)}s.prototype.toDER=function(l){var a=this.r.toArray(),g=this.s.toArray();for(a[0]&128&&(a=[0].concat(a)),g[0]&128&&(g=[0].concat(g)),a=r(a),g=r(g);!g[0]&&!(g[1]&128);)g=g.slice(1);var v=[2];i(v,a.length),v=v.concat(a),v.push(2),i(v,g.length);var h=v.concat(g),w=[48];return i(w,h.length),w=w.concat(h),c.encode(w,l)}},{"../utils":419,"bn.js":420}],415:[function(e,d,m){var f=e("hash.js"),c=e("../curves"),u=e("../utils"),s=u.assert,t=u.parseBytes,n=e("./key"),r=e("./signature");function i(o){if(s(o==="ed25519","only tested with ed25519 so far"),!(this instanceof i))return new i(o);o=c[o].curve,this.curve=o,this.g=o.g,this.g.precompute(o.n.bitLength()+1),this.pointClass=o.point().constructor,this.encodingLength=Math.ceil(o.n.bitLength()/8),this.hash=f.sha512}d.exports=i,i.prototype.sign=function(l,a){l=t(l);var g=this.keyFromSecret(a),v=this.hashInt(g.messagePrefix(),l),h=this.g.mul(v),w=this.encodePoint(h),y=this.hashInt(w,g.pubBytes(),l).mul(g.priv()),S=v.add(y).umod(this.curve.n);return this.makeSignature({R:h,S,Rencoded:w})},i.prototype.verify=function(l,a,g){l=t(l),a=this.makeSignature(a);var v=this.keyFromPublic(g),h=this.hashInt(a.Rencoded(),v.pubBytes(),l),w=this.g.mul(a.S()),y=a.R().add(v.pub().mul(h));return y.eq(w)},i.prototype.hashInt=function(){for(var l=this.hash(),a=0;a(h>>1)-1?S=(h>>1)-E:S=E,w.isubn(S)):S=0,v[y]=S,w.iushrn(1)}return v}f.getNAF=t;function n(l,a){var g=[[],[]];l=l.clone(),a=a.clone();for(var v=0,h=0,w;l.cmpn(-v)>0||a.cmpn(-h)>0;){var y=l.andln(3)+v&3,S=a.andln(3)+h&3;y===3&&(y=-1),S===3&&(S=-1);var E;y&1?(w=l.andln(7)+v&7,(w===3||w===5)&&S===2?E=-y:E=y):E=0,g[0].push(E);var I;S&1?(w=a.andln(7)+h&7,(w===3||w===5)&&y===2?I=-S:I=S):I=0,g[1].push(I),2*v===E+1&&(v=1-v),2*h===I+1&&(h=1-h),l.iushrn(1),a.iushrn(1)}return g}f.getJSF=n;function r(l,a,g){var v="_"+a;l.prototype[a]=function(){return this[v]!==void 0?this[v]:this[v]=g.call(this)}}f.cachedProperty=r;function i(l){return typeof l=="string"?f.toArray(l,"hex"):l}f.parseBytes=i;function o(l){return new c(l,"hex","le")}f.intFromLE=o},{"bn.js":420,"minimalistic-assert":453,"minimalistic-crypto-utils":454}],420:[function(e,d,m){arguments[4][184][0].apply(m,arguments)},{buffer:188,dup:184}],421:[function(e,d,m){d.exports={name:"elliptic",version:"6.5.4",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny ",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies:{"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}}},{}],422:[function(e,d,m){var f=Object.create||j,c=Object.keys||X,u=Function.prototype.bind||G;function s(){(!this._events||!Object.prototype.hasOwnProperty.call(this,"_events"))&&(this._events=f(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}d.exports=s,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._maxListeners=void 0;var t=10,n;try{var r={};Object.defineProperty&&Object.defineProperty(r,"x",{value:0}),n=r.x===0}catch{n=!1}n?Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return t},set:function(V){if(typeof V!="number"||V<0||V!==V)throw new TypeError('"defaultMaxListeners" must be a positive number');t=V}}):s.defaultMaxListeners=t,s.prototype.setMaxListeners=function(J){if(typeof J!="number"||J<0||isNaN(J))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=J,this};function i(V){return V._maxListeners===void 0?s.defaultMaxListeners:V._maxListeners}s.prototype.getMaxListeners=function(){return i(this)};function o(V,J,H){if(J)V.call(H);else for(var M=V.length,T=F(V,M),_=0;_1&&(H=arguments[1]),H instanceof Error)throw H;var $=new Error('Unhandled "error" event. ('+H+")");throw $.context=H,$}if(M=P[J],!M)return!1;var R=typeof M=="function";switch(T=arguments.length,T){case 1:o(M,R,this);break;case 2:l(M,R,this,arguments[1]);break;case 3:a(M,R,this,arguments[1],arguments[2]);break;case 4:g(M,R,this,arguments[1],arguments[2],arguments[3]);break;default:for(_=new Array(T-1),A=1;A0&&A.length>T)){A.warned=!0;var P=new Error("Possible EventEmitter memory leak detected. "+A.length+' "'+String(J)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');P.name="MaxListenersExceededWarning",P.emitter=V,P.type=J,P.count=A.length,typeof console=="object"&&console.warn&&console.warn("%s: %s",P.name,P.message)}return V}s.prototype.addListener=function(J,H){return h(this,J,H,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(J,H){return h(this,J,H,!0)};function w(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var V=new Array(arguments.length),J=0;J=0;A--)if(M[A]===H||M[A].listener===H){P=M[A].listener,_=A;break}if(_<0)return this;_===0?M.shift():I(M,_),M.length===1&&(T[J]=M[0]),T.removeListener&&this.emit("removeListener",J,P||H)}return this},s.prototype.removeAllListeners=function(J){var H,M,T;if(M=this._events,!M)return this;if(!M.removeListener)return arguments.length===0?(this._events=f(null),this._eventsCount=0):M[J]&&(--this._eventsCount===0?this._events=f(null):delete M[J]),this;if(arguments.length===0){var _=c(M),A;for(T=0;T<_.length;++T)A=_[T],A!=="removeListener"&&this.removeAllListeners(A);return this.removeAllListeners("removeListener"),this._events=f(null),this._eventsCount=0,this}if(H=M[J],typeof H=="function")this.removeListener(J,H);else if(H)for(T=H.length-1;T>=0;T--)this.removeListener(J,H[T]);return this};function S(V,J,H){var M=V._events;if(!M)return[];var T=M[J];return T?typeof T=="function"?H?[T.listener||T]:[T]:H?B(T):F(T,T.length):[]}s.prototype.listeners=function(J){return S(this,J,!0)},s.prototype.rawListeners=function(J){return S(this,J,!1)},s.listenerCount=function(V,J){return typeof V.listenerCount=="function"?V.listenerCount(J):E.call(V,J)},s.prototype.listenerCount=E;function E(V){var J=this._events;if(J){var H=J[V];if(typeof H=="function")return 1;if(H)return H.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};function I(V,J){for(var H=J,M=H+1,T=V.length;M0||r>0;){var g=new c;g.update(a),g.update(s),t&&g.update(t),a=g.digest();var v=0;if(i>0){var h=o.length-i;v=Math.min(i,a.length),a.copy(o,h,0,v),i-=v}if(v0){var w=l.length-r,y=Math.min(r,a.length-v);a.copy(l,w,v,v+y),r-=y}}return a.fill(0),{key:o,iv:l}}d.exports=u},{"md5.js":450,"safe-buffer":494}],424:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.CsvParserStream=m.ParserOptions=m.parseFile=m.parseStream=m.parseString=m.parse=m.FormatterOptions=m.CsvFormatterStream=m.writeToPath=m.writeToString=m.writeToBuffer=m.writeToStream=m.write=m.format=void 0;var f=e("@fast-csv/format");Object.defineProperty(m,"format",{enumerable:!0,get:function(){return f.format}}),Object.defineProperty(m,"write",{enumerable:!0,get:function(){return f.write}}),Object.defineProperty(m,"writeToStream",{enumerable:!0,get:function(){return f.writeToStream}}),Object.defineProperty(m,"writeToBuffer",{enumerable:!0,get:function(){return f.writeToBuffer}}),Object.defineProperty(m,"writeToString",{enumerable:!0,get:function(){return f.writeToString}}),Object.defineProperty(m,"writeToPath",{enumerable:!0,get:function(){return f.writeToPath}}),Object.defineProperty(m,"CsvFormatterStream",{enumerable:!0,get:function(){return f.CsvFormatterStream}}),Object.defineProperty(m,"FormatterOptions",{enumerable:!0,get:function(){return f.FormatterOptions}});var c=e("@fast-csv/parse");Object.defineProperty(m,"parse",{enumerable:!0,get:function(){return c.parse}}),Object.defineProperty(m,"parseString",{enumerable:!0,get:function(){return c.parseString}}),Object.defineProperty(m,"parseStream",{enumerable:!0,get:function(){return c.parseStream}}),Object.defineProperty(m,"parseFile",{enumerable:!0,get:function(){return c.parseFile}}),Object.defineProperty(m,"ParserOptions",{enumerable:!0,get:function(){return c.ParserOptions}}),Object.defineProperty(m,"CsvParserStream",{enumerable:!0,get:function(){return c.CsvParserStream}})},{"@fast-csv/format":151,"@fast-csv/parse":155}],425:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("readable-stream").Transform,u=e("inherits");function s(n,r){if(!f.isBuffer(n)&&typeof n!="string")throw new TypeError(r+" must be a string or a buffer")}function t(n){c.call(this),this._block=f.allocUnsafe(n),this._blockSize=n,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}u(t,c),t.prototype._transform=function(n,r,i){var o=null;try{this.update(n,r)}catch(l){o=l}i(o)},t.prototype._flush=function(n){var r=null;try{this.push(this.digest())}catch(i){r=i}n(r)},t.prototype.update=function(n,r){if(s(n,"Data"),this._finalized)throw new Error("Digest already called");f.isBuffer(n)||(n=f.from(n,r));for(var i=this._block,o=0;this._blockOffset+n.length-o>=this._blockSize;){for(var l=this._blockOffset;l0;++a)this._length[a]+=g,g=this._length[a]/4294967296|0,g>0&&(this._length[a]-=4294967296*g);return this},t.prototype._update=function(){throw new Error("_update is not implemented")},t.prototype.digest=function(n){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var r=this._digest();n!==void 0&&(r=r.toString(n)),this._block.fill(0),this._blockOffset=0;for(var i=0;i<4;++i)this._length[i]=0;return r},t.prototype._digest=function(){throw new Error("_digest is not implemented")},d.exports=t},{inherits:440,"readable-stream":491,"safe-buffer":494}],426:[function(e,d,m){var f=m;f.utils=e("./hash/utils"),f.common=e("./hash/common"),f.sha=e("./hash/sha"),f.ripemd=e("./hash/ripemd"),f.hmac=e("./hash/hmac"),f.sha1=f.sha.sha1,f.sha256=f.sha.sha256,f.sha224=f.sha.sha224,f.sha384=f.sha.sha384,f.sha512=f.sha.sha512,f.ripemd160=f.ripemd.ripemd160},{"./hash/common":427,"./hash/hmac":428,"./hash/ripemd":429,"./hash/sha":430,"./hash/utils":437}],427:[function(e,d,m){var f=e("./utils"),c=e("minimalistic-assert");function u(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}m.BlockHash=u,u.prototype.update=function(t,n){if(t=f.toArray(t,n),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){t=this.pending;var r=t.length%this._delta8;this.pending=t.slice(t.length-r,t.length),this.pending.length===0&&(this.pending=null),t=f.join32(t,0,t.length-r,this.endian);for(var i=0;i>>24&255,i[o++]=t>>>16&255,i[o++]=t>>>8&255,i[o++]=t&255}else for(i[o++]=t&255,i[o++]=t>>>8&255,i[o++]=t>>>16&255,i[o++]=t>>>24&255,i[o++]=0,i[o++]=0,i[o++]=0,i[o++]=0,l=8;lthis.blockSize&&(t=new this.Hash().update(t).digest()),c(t.length<=this.blockSize);for(var n=t.length;n>>3}m.g0_256=o;function l(a){return c(a,17)^c(a,19)^a>>>10}m.g1_256=l},{"../utils":437}],437:[function(e,d,m){var f=e("minimalistic-assert"),c=e("inherits");m.inherits=c;function u(T,_){return(T.charCodeAt(_)&64512)!==55296||_<0||_+1>=T.length?!1:(T.charCodeAt(_+1)&64512)===56320}function s(T,_){if(Array.isArray(T))return T.slice();if(!T)return[];var A=[];if(typeof T=="string")if(_){if(_==="hex")for(T=T.replace(/[^a-z0-9]+/ig,""),T.length%2!==0&&(T="0"+T),L=0;L>6|192,A[P++]=$&63|128):u(T,L)?($=65536+(($&1023)<<10)+(T.charCodeAt(++L)&1023),A[P++]=$>>18|240,A[P++]=$>>12&63|128,A[P++]=$>>6&63|128,A[P++]=$&63|128):(A[P++]=$>>12|224,A[P++]=$>>6&63|128,A[P++]=$&63|128)}else for(L=0;L>>24|T>>>8&65280|T<<8&16711680|(T&255)<<24;return _>>>0}m.htonl=n;function r(T,_){for(var A="",P=0;P>>0}return $}m.join32=l;function a(T,_){for(var A=new Array(T.length*4),P=0,L=0;P>>24,A[L+1]=$>>>16&255,A[L+2]=$>>>8&255,A[L+3]=$&255):(A[L+3]=$>>>24,A[L+2]=$>>>16&255,A[L+1]=$>>>8&255,A[L]=$&255)}return A}m.split32=a;function g(T,_){return T>>>_|T<<32-_}m.rotr32=g;function v(T,_){return T<<_|T>>>32-_}m.rotl32=v;function h(T,_){return T+_>>>0}m.sum32=h;function w(T,_,A){return T+_+A>>>0}m.sum32_3=w;function y(T,_,A,P){return T+_+A+P>>>0}m.sum32_4=y;function S(T,_,A,P,L){return T+_+A+P+L>>>0}m.sum32_5=S;function E(T,_,A,P){var L=T[_],$=T[_+1],R=P+$>>>0,k=(R>>0,T[_+1]=R}m.sum64=E;function I(T,_,A,P){var L=_+P>>>0,$=(L<_?1:0)+T+A;return $>>>0}m.sum64_hi=I;function F(T,_,A,P){var L=_+P;return L>>>0}m.sum64_lo=F;function B(T,_,A,P,L,$,R,k){var C=0,O=_;O=O+P>>>0,C+=O<_?1:0,O=O+$>>>0,C+=O<$?1:0,O=O+k>>>0,C+=O>>0}m.sum64_4_hi=B;function j(T,_,A,P,L,$,R,k){var C=_+P+$+k;return C>>>0}m.sum64_4_lo=j;function X(T,_,A,P,L,$,R,k,C,O){var W=0,ne=_;ne=ne+P>>>0,W+=ne<_?1:0,ne=ne+$>>>0,W+=ne<$?1:0,ne=ne+k>>>0,W+=ne>>0,W+=ne>>0}m.sum64_5_hi=X;function G(T,_,A,P,L,$,R,k,C,O){var W=_+P+$+k+O;return W>>>0}m.sum64_5_lo=G;function V(T,_,A){var P=_<<32-A|T>>>A;return P>>>0}m.rotr64_hi=V;function J(T,_,A){var P=T<<32-A|_>>>A;return P>>>0}m.rotr64_lo=J;function H(T,_,A){return T>>>A}m.shr64_hi=H;function M(T,_,A){var P=T<<32-A|_>>>A;return P>>>0}m.shr64_lo=M},{inherits:440,"minimalistic-assert":453}],438:[function(e,d,m){var f=e("hash.js"),c=e("minimalistic-crypto-utils"),u=e("minimalistic-assert");function s(t){if(!(this instanceof s))return new s(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var n=c.toArray(t.entropy,t.entropyEnc||"hex"),r=c.toArray(t.nonce,t.nonceEnc||"hex"),i=c.toArray(t.pers,t.persEnc||"hex");u(n.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(n,r,i)}d.exports=s,s.prototype._init=function(n,r,i){var o=n.concat(r).concat(i);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var l=0;l=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(n.concat(i||[])),this._reseed=1},s.prototype.generate=function(n,r,i,o){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof r!="string"&&(o=i,i=r,r=null),i&&(i=c.toArray(i,o||"hex"),this._update(i));for(var l=[];l.length */m.read=function(f,c,u,s,t){var n,r,i=t*8-s-1,o=(1<>1,a=-7,g=u?t-1:0,v=u?-1:1,h=f[c+g];for(g+=v,n=h&(1<<-a)-1,h>>=-a,a+=i;a>0;n=n*256+f[c+g],g+=v,a-=8);for(r=n&(1<<-a)-1,n>>=-a,a+=s;a>0;r=r*256+f[c+g],g+=v,a-=8);if(n===0)n=1-l;else{if(n===o)return r?NaN:(h?-1:1)*(1/0);r=r+Math.pow(2,s),n=n-l}return(h?-1:1)*r*Math.pow(2,n-s)},m.write=function(f,c,u,s,t,n){var r,i,o,l=n*8-t-1,a=(1<>1,v=t===23?Math.pow(2,-24)-Math.pow(2,-77):0,h=s?0:n-1,w=s?1:-1,y=c<0||c===0&&1/c<0?1:0;for(c=Math.abs(c),isNaN(c)||c===1/0?(i=isNaN(c)?1:0,r=a):(r=Math.floor(Math.log(c)/Math.LN2),c*(o=Math.pow(2,-r))<1&&(r--,o*=2),r+g>=1?c+=v/o:c+=v*Math.pow(2,1-g),c*o>=2&&(r++,o/=2),r+g>=a?(i=0,r=a):r+g>=1?(i=(c*o-1)*Math.pow(2,t),r=r+g):(i=c*Math.pow(2,g-1)*Math.pow(2,t),r=0));t>=8;f[u+h]=i&255,h+=w,i/=256,t-=8);for(r=r<0;f[u+h]=r&255,h+=w,r/=256,l-=8);f[u+h-w]|=y*128}},{}],440:[function(e,d,m){typeof Object.create=="function"?d.exports=function(c,u){u&&(c.super_=u,c.prototype=Object.create(u.prototype,{constructor:{value:c,enumerable:!1,writable:!0,configurable:!0}}))}:d.exports=function(c,u){if(u){c.super_=u;var s=function(){};s.prototype=u.prototype,c.prototype=new s,c.prototype.constructor=c}}},{}],441:[function(e,d,m){(function(f,c,u,s,t,n,r,i){(function(){/*! + + JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + + (c) 2009-2016 Stuart Knightley + Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + + JSZip uses the library pako released under the MIT license : + https://github.com/nodeca/pako/blob/main/LICENSE + */(function(o){typeof m=="object"&&typeof d<"u"?d.exports=o():(typeof window<"u"?window:typeof c<"u"?c:typeof self<"u"?self:this).JSZip=o()})(function(){return function o(l,a,g){function v(y,S){if(!a[y]){if(!l[y]){var E=typeof e=="function"&&e;if(!S&&E)return E(y,!0);if(h)return h(y,!0);var I=new Error("Cannot find module '"+y+"'");throw I.code="MODULE_NOT_FOUND",I}var F=a[y]={exports:{}};l[y][0].call(F.exports,function(B){var j=l[y][1][B];return v(j||B)},F,F.exports,o,l,a,g)}return a[y].exports}for(var h=typeof e=="function"&&e,w=0;w>2,F=(3&y)<<4|S>>4,B=1>6:64,j=2>4,S=(15&I)<<4|(F=h.indexOf(w.charAt(j++)))>>2,E=(3&F)<<6|(B=h.indexOf(w.charAt(j++))),V[X++]=y,F!==64&&(V[X++]=S),B!==64&&(V[X++]=E);return V}},{"./support":30,"./utils":32}],2:[function(o,l,a){var g=o("./external"),v=o("./stream/DataWorker"),h=o("./stream/Crc32Probe"),w=o("./stream/DataLengthProbe");function y(S,E,I,F,B){this.compressedSize=S,this.uncompressedSize=E,this.crc32=I,this.compression=F,this.compressedContent=B}y.prototype={getContentWorker:function(){var S=new v(g.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new w("data_length")),E=this;return S.on("end",function(){if(this.streamInfo.data_length!==E.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),S},getCompressedWorker:function(){return new v(g.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},y.createWorkerFrom=function(S,E,I){return S.pipe(new h).pipe(new w("uncompressedSize")).pipe(E.compressWorker(I)).pipe(new w("compressedSize")).withStreamInfo("compression",E)},l.exports=y},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(o,l,a){var g=o("./stream/GenericWorker");a.STORE={magic:"\0\0",compressWorker:function(){return new g("STORE compression")},uncompressWorker:function(){return new g("STORE decompression")}},a.DEFLATE=o("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(o,l,a){var g=o("./utils"),v=function(){for(var h,w=[],y=0;y<256;y++){h=y;for(var S=0;S<8;S++)h=1&h?3988292384^h>>>1:h>>>1;w[y]=h}return w}();l.exports=function(h,w){return h!==void 0&&h.length?g.getTypeOf(h)!=="string"?function(y,S,E,I){var F=v,B=I+E;y^=-1;for(var j=I;j>>8^F[255&(y^S[j])];return-1^y}(0|w,h,h.length,0):function(y,S,E,I){var F=v,B=I+E;y^=-1;for(var j=I;j>>8^F[255&(y^S.charCodeAt(j))];return-1^y}(0|w,h,h.length,0):0}},{"./utils":32}],5:[function(o,l,a){a.base64=!1,a.binary=!1,a.dir=!1,a.createFolders=!0,a.date=null,a.compression=null,a.compressionOptions=null,a.comment=null,a.unixPermissions=null,a.dosPermissions=null},{}],6:[function(o,l,a){var g=null;g=typeof Promise<"u"?Promise:o("lie"),l.exports={Promise:g}},{lie:37}],7:[function(o,l,a){var g=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",v=o("pako"),h=o("./utils"),w=o("./stream/GenericWorker"),y=g?"uint8array":"array";function S(E,I){w.call(this,"FlateWorker/"+E),this._pako=null,this._pakoAction=E,this._pakoOptions=I,this.meta={}}a.magic="\b\0",h.inherits(S,w),S.prototype.processChunk=function(E){this.meta=E.meta,this._pako===null&&this._createPako(),this._pako.push(h.transformTo(y,E.data),!1)},S.prototype.flush=function(){w.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},S.prototype.cleanUp=function(){w.prototype.cleanUp.call(this),this._pako=null},S.prototype._createPako=function(){this._pako=new v[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var E=this;this._pako.onData=function(I){E.push({data:I,meta:E.meta})}},a.compressWorker=function(E){return new S("Deflate",E)},a.uncompressWorker=function(){return new S("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(o,l,a){function g(F,B){var j,X="";for(j=0;j>>=8;return X}function v(F,B,j,X,G,V){var J,H,M=F.file,T=F.compression,_=V!==y.utf8encode,A=h.transformTo("string",V(M.name)),P=h.transformTo("string",y.utf8encode(M.name)),L=M.comment,$=h.transformTo("string",V(L)),R=h.transformTo("string",y.utf8encode(L)),k=P.length!==M.name.length,C=R.length!==L.length,O="",W="",ne="",he=M.dir,ue=M.date,Ae={crc32:0,compressedSize:0,uncompressedSize:0};B&&!j||(Ae.crc32=F.crc32,Ae.compressedSize=F.compressedSize,Ae.uncompressedSize=F.uncompressedSize);var pe=0;B&&(pe|=8),_||!k&&!C||(pe|=2048);var te=0,Z=0;he&&(te|=16),G==="UNIX"?(Z=798,te|=function(de,ke){var oe=de;return de||(oe=ke?16893:33204),(65535&oe)<<16}(M.unixPermissions,he)):(Z=20,te|=function(de){return 63&(de||0)}(M.dosPermissions)),J=ue.getUTCHours(),J<<=6,J|=ue.getUTCMinutes(),J<<=5,J|=ue.getUTCSeconds()/2,H=ue.getUTCFullYear()-1980,H<<=4,H|=ue.getUTCMonth()+1,H<<=5,H|=ue.getUTCDate(),k&&(W=g(1,1)+g(S(A),4)+P,O+="up"+g(W.length,2)+W),C&&(ne=g(1,1)+g(S($),4)+R,O+="uc"+g(ne.length,2)+ne);var q="";return q+=` +\0`,q+=g(pe,2),q+=T.magic,q+=g(J,2),q+=g(H,2),q+=g(Ae.crc32,4),q+=g(Ae.compressedSize,4),q+=g(Ae.uncompressedSize,4),q+=g(A.length,2),q+=g(O.length,2),{fileRecord:E.LOCAL_FILE_HEADER+q+A+O,dirRecord:E.CENTRAL_FILE_HEADER+g(Z,2)+q+g($.length,2)+"\0\0\0\0"+g(te,4)+g(X,4)+A+O+$}}var h=o("../utils"),w=o("../stream/GenericWorker"),y=o("../utf8"),S=o("../crc32"),E=o("../signature");function I(F,B,j,X){w.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=B,this.zipPlatform=j,this.encodeFileName=X,this.streamFiles=F,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}h.inherits(I,w),I.prototype.push=function(F){var B=F.meta.percent||0,j=this.entriesCount,X=this._sources.length;this.accumulate?this.contentBuffer.push(F):(this.bytesWritten+=F.data.length,w.prototype.push.call(this,{data:F.data,meta:{currentFile:this.currentFile,percent:j?(B+100*(j-X-1))/j:100}}))},I.prototype.openedSource=function(F){this.currentSourceOffset=this.bytesWritten,this.currentFile=F.file.name;var B=this.streamFiles&&!F.file.dir;if(B){var j=v(F,B,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:j.fileRecord,meta:{percent:0}})}else this.accumulate=!0},I.prototype.closedSource=function(F){this.accumulate=!1;var B=this.streamFiles&&!F.file.dir,j=v(F,B,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(j.dirRecord),B)this.push({data:function(X){return E.DATA_DESCRIPTOR+g(X.crc32,4)+g(X.compressedSize,4)+g(X.uncompressedSize,4)}(F),meta:{percent:100}});else for(this.push({data:j.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},I.prototype.flush=function(){for(var F=this.bytesWritten,B=0;B=this.index;w--)y=(y<<8)+this.byteAt(w);return this.index+=h,y},readString:function(h){return g.transformTo("string",this.readData(h))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var h=this.readInt(4);return new Date(Date.UTC(1980+(h>>25&127),(h>>21&15)-1,h>>16&31,h>>11&31,h>>5&63,(31&h)<<1))}},l.exports=v},{"../utils":32}],19:[function(o,l,a){var g=o("./Uint8ArrayReader");function v(h){g.call(this,h)}o("../utils").inherits(v,g),v.prototype.readData=function(h){this.checkOffset(h);var w=this.data.slice(this.zero+this.index,this.zero+this.index+h);return this.index+=h,w},l.exports=v},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(o,l,a){var g=o("./DataReader");function v(h){g.call(this,h)}o("../utils").inherits(v,g),v.prototype.byteAt=function(h){return this.data.charCodeAt(this.zero+h)},v.prototype.lastIndexOfSignature=function(h){return this.data.lastIndexOf(h)-this.zero},v.prototype.readAndCheckSignature=function(h){return h===this.readData(4)},v.prototype.readData=function(h){this.checkOffset(h);var w=this.data.slice(this.zero+this.index,this.zero+this.index+h);return this.index+=h,w},l.exports=v},{"../utils":32,"./DataReader":18}],21:[function(o,l,a){var g=o("./ArrayReader");function v(h){g.call(this,h)}o("../utils").inherits(v,g),v.prototype.readData=function(h){if(this.checkOffset(h),h===0)return new Uint8Array(0);var w=this.data.subarray(this.zero+this.index,this.zero+this.index+h);return this.index+=h,w},l.exports=v},{"../utils":32,"./ArrayReader":17}],22:[function(o,l,a){var g=o("../utils"),v=o("../support"),h=o("./ArrayReader"),w=o("./StringReader"),y=o("./NodeBufferReader"),S=o("./Uint8ArrayReader");l.exports=function(E){var I=g.getTypeOf(E);return g.checkSupport(I),I!=="string"||v.uint8array?I==="nodebuffer"?new y(E):v.uint8array?new S(g.transformTo("uint8array",E)):new h(g.transformTo("array",E)):new w(E)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(o,l,a){a.LOCAL_FILE_HEADER="PK",a.CENTRAL_FILE_HEADER="PK",a.CENTRAL_DIRECTORY_END="PK",a.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",a.ZIP64_CENTRAL_DIRECTORY_END="PK",a.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(o,l,a){var g=o("./GenericWorker"),v=o("../utils");function h(w){g.call(this,"ConvertWorker to "+w),this.destType=w}v.inherits(h,g),h.prototype.processChunk=function(w){this.push({data:v.transformTo(this.destType,w.data),meta:w.meta})},l.exports=h},{"../utils":32,"./GenericWorker":28}],25:[function(o,l,a){var g=o("./GenericWorker"),v=o("../crc32");function h(){g.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}o("../utils").inherits(h,g),h.prototype.processChunk=function(w){this.streamInfo.crc32=v(w.data,this.streamInfo.crc32||0),this.push(w)},l.exports=h},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(o,l,a){var g=o("../utils"),v=o("./GenericWorker");function h(w){v.call(this,"DataLengthProbe for "+w),this.propName=w,this.withStreamInfo(w,0)}g.inherits(h,v),h.prototype.processChunk=function(w){if(w){var y=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=y+w.data.length}v.prototype.processChunk.call(this,w)},l.exports=h},{"../utils":32,"./GenericWorker":28}],27:[function(o,l,a){var g=o("../utils"),v=o("./GenericWorker");function h(w){v.call(this,"DataWorker");var y=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,w.then(function(S){y.dataIsReady=!0,y.data=S,y.max=S&&S.length||0,y.type=g.getTypeOf(S),y.isPaused||y._tickAndRepeat()},function(S){y.error(S)})}g.inherits(h,v),h.prototype.cleanUp=function(){v.prototype.cleanUp.call(this),this.data=null},h.prototype.resume=function(){return!!v.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,g.delay(this._tickAndRepeat,[],this)),!0)},h.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(g.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},h.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var w=null,y=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":w=this.data.substring(this.index,y);break;case"uint8array":w=this.data.subarray(this.index,y);break;case"array":case"nodebuffer":w=this.data.slice(this.index,y)}return this.index=y,this.push({data:w,meta:{percent:this.max?this.index/this.max*100:0}})},l.exports=h},{"../utils":32,"./GenericWorker":28}],28:[function(o,l,a){function g(v){this.name=v||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}g.prototype={push:function(v){this.emit("data",v)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(v){this.emit("error",v)}return!0},error:function(v){return!this.isFinished&&(this.isPaused?this.generatedError=v:(this.isFinished=!0,this.emit("error",v),this.previous&&this.previous.error(v),this.cleanUp()),!0)},on:function(v,h){return this._listeners[v].push(h),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(v,h){if(this._listeners[v])for(var w=0;w "+v:v}},l.exports=g},{}],29:[function(o,l,a){var g=o("../utils"),v=o("./ConvertWorker"),h=o("./GenericWorker"),w=o("../base64"),y=o("../support"),S=o("../external"),E=null;if(y.nodestream)try{E=o("../nodejs/NodejsStreamOutputAdapter")}catch{}function I(B,j){return new S.Promise(function(X,G){var V=[],J=B._internalType,H=B._outputType,M=B._mimeType;B.on("data",function(T,_){V.push(T),j&&j(_)}).on("error",function(T){V=[],G(T)}).on("end",function(){try{var T=function(_,A,P){switch(_){case"blob":return g.newBlob(g.transformTo("arraybuffer",A),P);case"base64":return w.encode(A);default:return g.transformTo(_,A)}}(H,function(_,A){var P,L=0,$=null,R=0;for(P=0;P"u")a.blob=!1;else{var g=new ArrayBuffer(0);try{a.blob=new Blob([g],{type:"application/zip"}).size===0}catch{try{var v=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);v.append(g),a.blob=v.getBlob("application/zip").size===0}catch{a.blob=!1}}}try{a.nodestream=!!o("readable-stream").Readable}catch{a.nodestream=!1}},{"readable-stream":16}],31:[function(o,l,a){for(var g=o("./utils"),v=o("./support"),h=o("./nodejsUtils"),w=o("./stream/GenericWorker"),y=new Array(256),S=0;S<256;S++)y[S]=252<=S?6:248<=S?5:240<=S?4:224<=S?3:192<=S?2:1;y[254]=y[254]=1;function E(){w.call(this,"utf-8 decode"),this.leftOver=null}function I(){w.call(this,"utf-8 encode")}a.utf8encode=function(F){return v.nodebuffer?h.newBufferFrom(F,"utf-8"):function(B){var j,X,G,V,J,H=B.length,M=0;for(V=0;V>>6:(X<65536?j[J++]=224|X>>>12:(j[J++]=240|X>>>18,j[J++]=128|X>>>12&63),j[J++]=128|X>>>6&63),j[J++]=128|63&X);return j}(F)},a.utf8decode=function(F){return v.nodebuffer?g.transformTo("nodebuffer",F).toString("utf-8"):function(B){var j,X,G,V,J=B.length,H=new Array(2*J);for(j=X=0;j>10&1023,H[X++]=56320|1023&G)}return H.length!==X&&(H.subarray?H=H.subarray(0,X):H.length=X),g.applyFromCharCode(H)}(F=g.transformTo(v.uint8array?"uint8array":"array",F))},g.inherits(E,w),E.prototype.processChunk=function(F){var B=g.transformTo(v.uint8array?"uint8array":"array",F.data);if(this.leftOver&&this.leftOver.length){if(v.uint8array){var j=B;(B=new Uint8Array(j.length+this.leftOver.length)).set(this.leftOver,0),B.set(j,this.leftOver.length)}else B=this.leftOver.concat(B);this.leftOver=null}var X=function(V,J){var H;for((J=J||V.length)>V.length&&(J=V.length),H=J-1;0<=H&&(192&V[H])==128;)H--;return H<0||H===0?J:H+y[V[H]]>J?H:J}(B),G=B;X!==B.length&&(v.uint8array?(G=B.subarray(0,X),this.leftOver=B.subarray(X,B.length)):(G=B.slice(0,X),this.leftOver=B.slice(X,B.length))),this.push({data:a.utf8decode(G),meta:F.meta})},E.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:a.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},a.Utf8DecodeWorker=E,g.inherits(I,w),I.prototype.processChunk=function(F){this.push({data:a.utf8encode(F.data),meta:F.meta})},a.Utf8EncodeWorker=I},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(o,l,a){var g=o("./support"),v=o("./base64"),h=o("./nodejsUtils"),w=o("./external");function y(j){return j}function S(j,X){for(var G=0;G>8;this.dir=!!(16&this.externalFileAttributes),F==0&&(this.dosPermissions=63&this.externalFileAttributes),F==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var F=g(this.extraFields[1].value);this.uncompressedSize===v.MAX_VALUE_32BITS&&(this.uncompressedSize=F.readInt(8)),this.compressedSize===v.MAX_VALUE_32BITS&&(this.compressedSize=F.readInt(8)),this.localHeaderOffset===v.MAX_VALUE_32BITS&&(this.localHeaderOffset=F.readInt(8)),this.diskNumberStart===v.MAX_VALUE_32BITS&&(this.diskNumberStart=F.readInt(4))}},readExtraFields:function(F){var B,j,X,G=F.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});F.index+4>>6:(F<65536?I[X++]=224|F>>>12:(I[X++]=240|F>>>18,I[X++]=128|F>>>12&63),I[X++]=128|F>>>6&63),I[X++]=128|63&F);return I},a.buf2binstring=function(E){return S(E,E.length)},a.binstring2buf=function(E){for(var I=new g.Buf8(E.length),F=0,B=I.length;F>10&1023,V[B++]=56320|1023&j)}return S(V,B)},a.utf8border=function(E,I){var F;for((I=I||E.length)>E.length&&(I=E.length),F=I-1;0<=F&&(192&E[F])==128;)F--;return F<0||F===0?I:F+w[E[F]]>I?F:I}},{"./common":41}],43:[function(o,l,a){l.exports=function(g,v,h,w){for(var y=65535&g|0,S=g>>>16&65535|0,E=0;h!==0;){for(h-=E=2e3>>1:v>>>1;h[w]=v}return h}();l.exports=function(v,h,w,y){var S=g,E=y+w;v^=-1;for(var I=y;I>>8^S[255&(v^h[I])];return-1^v}},{}],46:[function(o,l,a){var g,v=o("../utils/common"),h=o("./trees"),w=o("./adler32"),y=o("./crc32"),S=o("./messages"),E=0,I=4,F=0,B=-2,j=-1,X=4,G=2,V=8,J=9,H=286,M=30,T=19,_=2*H+1,A=15,P=3,L=258,$=L+P+1,R=42,k=113,C=1,O=2,W=3,ne=4;function he(U,ve){return U.msg=S[ve],ve}function ue(U){return(U<<1)-(4U.avail_out&&(Se=U.avail_out),Se!==0&&(v.arraySet(U.output,ve.pending_buf,ve.pending_out,Se,U.next_out),U.next_out+=Se,ve.pending_out+=Se,U.total_out+=Se,U.avail_out-=Se,ve.pending-=Se,ve.pending===0&&(ve.pending_out=0))}function te(U,ve){h._tr_flush_block(U,0<=U.block_start?U.block_start:-1,U.strstart-U.block_start,ve),U.block_start=U.strstart,pe(U.strm)}function Z(U,ve){U.pending_buf[U.pending++]=ve}function q(U,ve){U.pending_buf[U.pending++]=ve>>>8&255,U.pending_buf[U.pending++]=255&ve}function de(U,ve){var Se,ee,se=U.max_chain_length,me=U.strstart,Ee=U.prev_length,Ie=U.nice_match,Ce=U.strstart>U.w_size-$?U.strstart-(U.w_size-$):0,Fe=U.window,ze=U.w_mask,je=U.prev,ge=U.strstart+L,Me=Fe[me+Ee-1],Be=Fe[me+Ee];U.prev_length>=U.good_match&&(se>>=2),Ie>U.lookahead&&(Ie=U.lookahead);do if(Fe[(Se=ve)+Ee]===Be&&Fe[Se+Ee-1]===Me&&Fe[Se]===Fe[me]&&Fe[++Se]===Fe[me+1]){me+=2,Se++;do;while(Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&meCe&&--se!=0);return Ee<=U.lookahead?Ee:U.lookahead}function ke(U){var ve,Se,ee,se,me,Ee,Ie,Ce,Fe,ze,je=U.w_size;do{if(se=U.window_size-U.lookahead-U.strstart,U.strstart>=je+(je-$)){for(v.arraySet(U.window,U.window,je,je,0),U.match_start-=je,U.strstart-=je,U.block_start-=je,ve=Se=U.hash_size;ee=U.head[--ve],U.head[ve]=je<=ee?ee-je:0,--Se;);for(ve=Se=je;ee=U.prev[--ve],U.prev[ve]=je<=ee?ee-je:0,--Se;);se+=je}if(U.strm.avail_in===0)break;if(Ee=U.strm,Ie=U.window,Ce=U.strstart+U.lookahead,Fe=se,ze=void 0,ze=Ee.avail_in,Fe=P)for(me=U.strstart-U.insert,U.ins_h=U.window[me],U.ins_h=(U.ins_h<=P&&(U.ins_h=(U.ins_h<=P)if(ee=h._tr_tally(U,U.strstart-U.match_start,U.match_length-P),U.lookahead-=U.match_length,U.match_length<=U.max_lazy_match&&U.lookahead>=P){for(U.match_length--;U.strstart++,U.ins_h=(U.ins_h<=P&&(U.ins_h=(U.ins_h<=P&&U.match_length<=U.prev_length){for(se=U.strstart+U.lookahead-P,ee=h._tr_tally(U,U.strstart-1-U.prev_match,U.prev_length-P),U.lookahead-=U.prev_length-1,U.prev_length-=2;++U.strstart<=se&&(U.ins_h=(U.ins_h<U.pending_buf_size-5&&(Se=U.pending_buf_size-5);;){if(U.lookahead<=1){if(ke(U),U.lookahead===0&&ve===E)return C;if(U.lookahead===0)break}U.strstart+=U.lookahead,U.lookahead=0;var ee=U.block_start+Se;if((U.strstart===0||U.strstart>=ee)&&(U.lookahead=U.strstart-ee,U.strstart=ee,te(U,!1),U.strm.avail_out===0)||U.strstart-U.block_start>=U.w_size-$&&(te(U,!1),U.strm.avail_out===0))return C}return U.insert=0,ve===I?(te(U,!0),U.strm.avail_out===0?W:ne):(U.strstart>U.block_start&&(te(U,!1),U.strm.avail_out),C)}),new Q(4,4,8,4,oe),new Q(4,5,16,8,oe),new Q(4,6,32,32,oe),new Q(4,4,16,16,ie),new Q(8,16,32,32,ie),new Q(8,16,128,128,ie),new Q(8,32,128,256,ie),new Q(32,128,258,1024,ie),new Q(32,258,258,4096,ie)],a.deflateInit=function(U,ve){return we(U,ve,V,15,8,0)},a.deflateInit2=we,a.deflateReset=fe,a.deflateResetKeep=Y,a.deflateSetHeader=function(U,ve){return U&&U.state?U.state.wrap!==2?B:(U.state.gzhead=ve,F):B},a.deflate=function(U,ve){var Se,ee,se,me;if(!U||!U.state||5>8&255),Z(ee,ee.gzhead.time>>16&255),Z(ee,ee.gzhead.time>>24&255),Z(ee,ee.level===9?2:2<=ee.strategy||ee.level<2?4:0),Z(ee,255&ee.gzhead.os),ee.gzhead.extra&&ee.gzhead.extra.length&&(Z(ee,255&ee.gzhead.extra.length),Z(ee,ee.gzhead.extra.length>>8&255)),ee.gzhead.hcrc&&(U.adler=y(U.adler,ee.pending_buf,ee.pending,0)),ee.gzindex=0,ee.status=69):(Z(ee,0),Z(ee,0),Z(ee,0),Z(ee,0),Z(ee,0),Z(ee,ee.level===9?2:2<=ee.strategy||ee.level<2?4:0),Z(ee,3),ee.status=k);else{var Ee=V+(ee.w_bits-8<<4)<<8;Ee|=(2<=ee.strategy||ee.level<2?0:ee.level<6?1:ee.level===6?2:3)<<6,ee.strstart!==0&&(Ee|=32),Ee+=31-Ee%31,ee.status=k,q(ee,Ee),ee.strstart!==0&&(q(ee,U.adler>>>16),q(ee,65535&U.adler)),U.adler=1}if(ee.status===69)if(ee.gzhead.extra){for(se=ee.pending;ee.gzindex<(65535&ee.gzhead.extra.length)&&(ee.pending!==ee.pending_buf_size||(ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),pe(U),se=ee.pending,ee.pending!==ee.pending_buf_size));)Z(ee,255&ee.gzhead.extra[ee.gzindex]),ee.gzindex++;ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),ee.gzindex===ee.gzhead.extra.length&&(ee.gzindex=0,ee.status=73)}else ee.status=73;if(ee.status===73)if(ee.gzhead.name){se=ee.pending;do{if(ee.pending===ee.pending_buf_size&&(ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),pe(U),se=ee.pending,ee.pending===ee.pending_buf_size)){me=1;break}me=ee.gzindexse&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),me===0&&(ee.gzindex=0,ee.status=91)}else ee.status=91;if(ee.status===91)if(ee.gzhead.comment){se=ee.pending;do{if(ee.pending===ee.pending_buf_size&&(ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),pe(U),se=ee.pending,ee.pending===ee.pending_buf_size)){me=1;break}me=ee.gzindexse&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),me===0&&(ee.status=103)}else ee.status=103;if(ee.status===103&&(ee.gzhead.hcrc?(ee.pending+2>ee.pending_buf_size&&pe(U),ee.pending+2<=ee.pending_buf_size&&(Z(ee,255&U.adler),Z(ee,U.adler>>8&255),U.adler=0,ee.status=k)):ee.status=k),ee.pending!==0){if(pe(U),U.avail_out===0)return ee.last_flush=-1,F}else if(U.avail_in===0&&ue(ve)<=ue(Se)&&ve!==I)return he(U,-5);if(ee.status===666&&U.avail_in!==0)return he(U,-5);if(U.avail_in!==0||ee.lookahead!==0||ve!==E&&ee.status!==666){var Ie=ee.strategy===2?function(Ce,Fe){for(var ze;;){if(Ce.lookahead===0&&(ke(Ce),Ce.lookahead===0)){if(Fe===E)return C;break}if(Ce.match_length=0,ze=h._tr_tally(Ce,0,Ce.window[Ce.strstart]),Ce.lookahead--,Ce.strstart++,ze&&(te(Ce,!1),Ce.strm.avail_out===0))return C}return Ce.insert=0,Fe===I?(te(Ce,!0),Ce.strm.avail_out===0?W:ne):Ce.last_lit&&(te(Ce,!1),Ce.strm.avail_out===0)?C:O}(ee,ve):ee.strategy===3?function(Ce,Fe){for(var ze,je,ge,Me,Be=Ce.window;;){if(Ce.lookahead<=L){if(ke(Ce),Ce.lookahead<=L&&Fe===E)return C;if(Ce.lookahead===0)break}if(Ce.match_length=0,Ce.lookahead>=P&&0Ce.lookahead&&(Ce.match_length=Ce.lookahead)}if(Ce.match_length>=P?(ze=h._tr_tally(Ce,1,Ce.match_length-P),Ce.lookahead-=Ce.match_length,Ce.strstart+=Ce.match_length,Ce.match_length=0):(ze=h._tr_tally(Ce,0,Ce.window[Ce.strstart]),Ce.lookahead--,Ce.strstart++),ze&&(te(Ce,!1),Ce.strm.avail_out===0))return C}return Ce.insert=0,Fe===I?(te(Ce,!0),Ce.strm.avail_out===0?W:ne):Ce.last_lit&&(te(Ce,!1),Ce.strm.avail_out===0)?C:O}(ee,ve):g[ee.level].func(ee,ve);if(Ie!==W&&Ie!==ne||(ee.status=666),Ie===C||Ie===W)return U.avail_out===0&&(ee.last_flush=-1),F;if(Ie===O&&(ve===1?h._tr_align(ee):ve!==5&&(h._tr_stored_block(ee,0,0,!1),ve===3&&(Ae(ee.head),ee.lookahead===0&&(ee.strstart=0,ee.block_start=0,ee.insert=0))),pe(U),U.avail_out===0))return ee.last_flush=-1,F}return ve!==I?F:ee.wrap<=0?1:(ee.wrap===2?(Z(ee,255&U.adler),Z(ee,U.adler>>8&255),Z(ee,U.adler>>16&255),Z(ee,U.adler>>24&255),Z(ee,255&U.total_in),Z(ee,U.total_in>>8&255),Z(ee,U.total_in>>16&255),Z(ee,U.total_in>>24&255)):(q(ee,U.adler>>>16),q(ee,65535&U.adler)),pe(U),0=Se.w_size&&(me===0&&(Ae(Se.head),Se.strstart=0,Se.block_start=0,Se.insert=0),Fe=new v.Buf8(Se.w_size),v.arraySet(Fe,ve,ze-Se.w_size,Se.w_size,0),ve=Fe,ze=Se.w_size),Ee=U.avail_in,Ie=U.next_in,Ce=U.input,U.avail_in=ze,U.next_in=0,U.input=ve,ke(Se);Se.lookahead>=P;){for(ee=Se.strstart,se=Se.lookahead-(P-1);Se.ins_h=(Se.ins_h<>>=P=A>>>24,J-=P,(P=A>>>16&255)===0)O[S++]=65535&A;else{if(!(16&P)){if(!(64&P)){A=H[(65535&A)+(V&(1<>>=P,J-=P),J<15&&(V+=C[w++]<>>=P=A>>>24,J-=P,!(16&(P=A>>>16&255))){if(!(64&P)){A=M[(65535&A)+(V&(1<>>=P,J-=P,(P=S-E)<$){if(j<(P=$-P)&&h.sane){g.msg="invalid distance too far back",h.mode=30;break e}if(k=G,(R=0)===X){if(R+=B-P,P>3,V&=(1<<(J-=L<<3))-1,g.next_in=w,g.next_out=S,g.avail_in=w>>24&255)+(R>>>8&65280)+((65280&R)<<8)+((255&R)<<24)}function V(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new g.Buf16(320),this.work=new g.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function J(R){var k;return R&&R.state?(k=R.state,R.total_in=R.total_out=k.total=0,R.msg="",k.wrap&&(R.adler=1&k.wrap),k.mode=B,k.last=0,k.havedict=0,k.dmax=32768,k.head=null,k.hold=0,k.bits=0,k.lencode=k.lendyn=new g.Buf32(j),k.distcode=k.distdyn=new g.Buf32(X),k.sane=1,k.back=-1,I):F}function H(R){var k;return R&&R.state?((k=R.state).wsize=0,k.whave=0,k.wnext=0,J(R)):F}function M(R,k){var C,O;return R&&R.state?(O=R.state,k<0?(C=0,k=-k):(C=1+(k>>4),k<48&&(k&=15)),k&&(k<8||15=ne.wsize?(g.arraySet(ne.window,k,C-ne.wsize,ne.wsize,0),ne.wnext=0,ne.whave=ne.wsize):(O<(W=ne.wsize-ne.wnext)&&(W=O),g.arraySet(ne.window,k,C-O,W,ne.wnext),(O-=W)?(g.arraySet(ne.window,k,C-O,O,0),ne.wnext=O,ne.whave=ne.wsize):(ne.wnext+=W,ne.wnext===ne.wsize&&(ne.wnext=0),ne.whave>>8&255,C.check=h(C.check,me,2,0),te=pe=0,C.mode=2;break}if(C.flags=0,C.head&&(C.head.done=!1),!(1&C.wrap)||(((255&pe)<<8)+(pe>>8))%31){R.msg="incorrect header check",C.mode=30;break}if((15&pe)!=8){R.msg="unknown compression method",C.mode=30;break}if(te-=4,U=8+(15&(pe>>>=4)),C.wbits===0)C.wbits=U;else if(U>C.wbits){R.msg="invalid window size",C.mode=30;break}C.dmax=1<>8&1),512&C.flags&&(me[0]=255&pe,me[1]=pe>>>8&255,C.check=h(C.check,me,2,0)),te=pe=0,C.mode=3;case 3:for(;te<32;){if(ue===0)break e;ue--,pe+=O[ne++]<>>8&255,me[2]=pe>>>16&255,me[3]=pe>>>24&255,C.check=h(C.check,me,4,0)),te=pe=0,C.mode=4;case 4:for(;te<16;){if(ue===0)break e;ue--,pe+=O[ne++]<>8),512&C.flags&&(me[0]=255&pe,me[1]=pe>>>8&255,C.check=h(C.check,me,2,0)),te=pe=0,C.mode=5;case 5:if(1024&C.flags){for(;te<16;){if(ue===0)break e;ue--,pe+=O[ne++]<>>8&255,C.check=h(C.check,me,2,0)),te=pe=0}else C.head&&(C.head.extra=null);C.mode=6;case 6:if(1024&C.flags&&(ue<(de=C.length)&&(de=ue),de&&(C.head&&(U=C.head.extra_len-C.length,C.head.extra||(C.head.extra=new Array(C.head.extra_len)),g.arraySet(C.head.extra,O,ne,de,U)),512&C.flags&&(C.check=h(C.check,O,de,ne)),ue-=de,ne+=de,C.length-=de),C.length))break e;C.length=0,C.mode=7;case 7:if(2048&C.flags){if(ue===0)break e;for(de=0;U=O[ne+de++],C.head&&U&&C.length<65536&&(C.head.name+=String.fromCharCode(U)),U&&de>9&1,C.head.done=!0),R.adler=C.check=0,C.mode=12;break;case 10:for(;te<32;){if(ue===0)break e;ue--,pe+=O[ne++]<>>=7&te,te-=7&te,C.mode=27;break}for(;te<3;){if(ue===0)break e;ue--,pe+=O[ne++]<>>=1)){case 0:C.mode=14;break;case 1:if(L(C),C.mode=20,k!==6)break;pe>>>=2,te-=2;break e;case 2:C.mode=17;break;case 3:R.msg="invalid block type",C.mode=30}pe>>>=2,te-=2;break;case 14:for(pe>>>=7&te,te-=7&te;te<32;){if(ue===0)break e;ue--,pe+=O[ne++]<>>16^65535)){R.msg="invalid stored block lengths",C.mode=30;break}if(C.length=65535&pe,te=pe=0,C.mode=15,k===6)break e;case 15:C.mode=16;case 16:if(de=C.length){if(ue>>=5,te-=5,C.ndist=1+(31&pe),pe>>>=5,te-=5,C.ncode=4+(15&pe),pe>>>=4,te-=4,286>>=3,te-=3}for(;C.have<19;)C.lens[Ee[C.have++]]=0;if(C.lencode=C.lendyn,C.lenbits=7,Se={bits:C.lenbits},ve=y(0,C.lens,0,19,C.lencode,0,C.work,Se),C.lenbits=Se.bits,ve){R.msg="invalid code lengths set",C.mode=30;break}C.have=0,C.mode=19;case 19:for(;C.have>>16&255,z=65535&se,!((ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>>=ie,te-=ie,C.lens[C.have++]=z;else{if(z===16){for(ee=ie+2;te>>=ie,te-=ie,C.have===0){R.msg="invalid bit length repeat",C.mode=30;break}U=C.lens[C.have-1],de=3+(3&pe),pe>>>=2,te-=2}else if(z===17){for(ee=ie+3;te>>=ie)),pe>>>=3,te-=3}else{for(ee=ie+7;te>>=ie)),pe>>>=7,te-=7}if(C.have+de>C.nlen+C.ndist){R.msg="invalid bit length repeat",C.mode=30;break}for(;de--;)C.lens[C.have++]=U}}if(C.mode===30)break;if(C.lens[256]===0){R.msg="invalid code -- missing end-of-block",C.mode=30;break}if(C.lenbits=9,Se={bits:C.lenbits},ve=y(S,C.lens,0,C.nlen,C.lencode,0,C.work,Se),C.lenbits=Se.bits,ve){R.msg="invalid literal/lengths set",C.mode=30;break}if(C.distbits=6,C.distcode=C.distdyn,Se={bits:C.distbits},ve=y(E,C.lens,C.nlen,C.ndist,C.distcode,0,C.work,Se),C.distbits=Se.bits,ve){R.msg="invalid distances set",C.mode=30;break}if(C.mode=20,k===6)break e;case 20:C.mode=21;case 21:if(6<=ue&&258<=Ae){R.next_out=he,R.avail_out=Ae,R.next_in=ne,R.avail_in=ue,C.hold=pe,C.bits=te,w(R,q),he=R.next_out,W=R.output,Ae=R.avail_out,ne=R.next_in,O=R.input,ue=R.avail_in,pe=C.hold,te=C.bits,C.mode===12&&(C.back=-1);break}for(C.back=0;Q=(se=C.lencode[pe&(1<>>16&255,z=65535&se,!((ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>Y)])>>>16&255,z=65535&se,!(Y+(ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>>=Y,te-=Y,C.back+=Y}if(pe>>>=ie,te-=ie,C.back+=ie,C.length=z,Q===0){C.mode=26;break}if(32&Q){C.back=-1,C.mode=12;break}if(64&Q){R.msg="invalid literal/length code",C.mode=30;break}C.extra=15&Q,C.mode=22;case 22:if(C.extra){for(ee=C.extra;te>>=C.extra,te-=C.extra,C.back+=C.extra}C.was=C.length,C.mode=23;case 23:for(;Q=(se=C.distcode[pe&(1<>>16&255,z=65535&se,!((ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>Y)])>>>16&255,z=65535&se,!(Y+(ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>>=Y,te-=Y,C.back+=Y}if(pe>>>=ie,te-=ie,C.back+=ie,64&Q){R.msg="invalid distance code",C.mode=30;break}C.offset=z,C.extra=15&Q,C.mode=24;case 24:if(C.extra){for(ee=C.extra;te>>=C.extra,te-=C.extra,C.back+=C.extra}if(C.offset>C.dmax){R.msg="invalid distance too far back",C.mode=30;break}C.mode=25;case 25:if(Ae===0)break e;if(de=q-Ae,C.offset>de){if((de=C.offset-de)>C.whave&&C.sane){R.msg="invalid distance too far back",C.mode=30;break}ke=de>C.wnext?(de-=C.wnext,C.wsize-de):C.wnext-de,de>C.length&&(de=C.length),oe=C.window}else oe=W,ke=he-C.offset,de=C.length;for(Ae_?(P=ke[oe+X[k]],te[Z+X[k]]):(P=96,0),V=1<>he)+(J-=V)]=A<<24|P<<16|L|0,J!==0;);for(V=1<>=1;if(V!==0?(pe&=V-1,pe+=V):pe=0,k++,--q[R]==0){if(R===O)break;R=E[I+X[k]]}if(W>>7)]}function Z(se,me){se.pending_buf[se.pending++]=255&me,se.pending_buf[se.pending++]=me>>>8&255}function q(se,me,Ee){se.bi_valid>G-Ee?(se.bi_buf|=me<>G-se.bi_valid,se.bi_valid+=Ee-G):(se.bi_buf|=me<>>=1,Ee<<=1,0<--me;);return Ee>>>1}function oe(se,me,Ee){var Ie,Ce,Fe=new Array(X+1),ze=0;for(Ie=1;Ie<=X;Ie++)Fe[Ie]=ze=ze+Ee[Ie-1]<<1;for(Ce=0;Ce<=me;Ce++){var je=se[2*Ce+1];je!==0&&(se[2*Ce]=ke(Fe[je]++,je))}}function ie(se){var me;for(me=0;me>1;1<=Ee;Ee--)Y(se,Fe,Ee);for(Ce=ge;Ee=se.heap[1],se.heap[1]=se.heap[se.heap_len--],Y(se,Fe,1),Ie=se.heap[1],se.heap[--se.heap_max]=Ee,se.heap[--se.heap_max]=Ie,Fe[2*Ce]=Fe[2*Ee]+Fe[2*Ie],se.depth[Ce]=(se.depth[Ee]>=se.depth[Ie]?se.depth[Ee]:se.depth[Ie])+1,Fe[2*Ee+1]=Fe[2*Ie+1]=Ce,se.heap[1]=Ce++,Y(se,Fe,1),2<=se.heap_len;);se.heap[--se.heap_max]=se.heap[1],function(Be,Xe){var ot,ct,st,rt,bt,Qe,et=Xe.dyn_tree,_t=Xe.max_code,ft=Xe.stat_desc.static_tree,jt=Xe.stat_desc.has_stree,It=Xe.stat_desc.extra_bits,ht=Xe.stat_desc.extra_base,Dt=Xe.stat_desc.max_length,Ut=0;for(rt=0;rt<=X;rt++)Be.bl_count[rt]=0;for(et[2*Be.heap[Be.heap_max]+1]=0,ot=Be.heap_max+1;ot>=7;Ce>>=1)if(1&Me&&je.dyn_ltree[2*ge]!==0)return v;if(je.dyn_ltree[18]!==0||je.dyn_ltree[20]!==0||je.dyn_ltree[26]!==0)return h;for(ge=32;ge>>3,(Fe=se.static_len+3+7>>>3)<=Ce&&(Ce=Fe)):Ce=Fe=Ee+5,Ee+4<=Ce&&me!==-1?ee(se,me,Ee,Ie):se.strategy===4||Fe===Ce?(q(se,2+(Ie?1:0),3),fe(se,$,R)):(q(se,4+(Ie?1:0),3),function(je,ge,Me,Be){var Xe;for(q(je,ge-257,5),q(je,Me-1,5),q(je,Be-4,4),Xe=0;Xe>>8&255,se.pending_buf[se.d_buf+2*se.last_lit+1]=255&me,se.pending_buf[se.l_buf+se.last_lit]=255&Ee,se.last_lit++,me===0?se.dyn_ltree[2*Ee]++:(se.matches++,me--,se.dyn_ltree[2*(C[Ee]+E+1)]++,se.dyn_dtree[2*te(me)]++),se.last_lit===se.lit_bufsize-1},a._tr_align=function(se){q(se,2,3),de(se,J,$),function(me){me.bi_valid===16?(Z(me,me.bi_buf),me.bi_buf=0,me.bi_valid=0):8<=me.bi_valid&&(me.pending_buf[me.pending++]=255&me.bi_buf,me.bi_buf>>=8,me.bi_valid-=8)}(se)}},{"../utils/common":41}],53:[function(o,l,a){l.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(o,l,a){(function(g){(function(v,h){if(!v.setImmediate){var w,y,S,E,I=1,F={},B=!1,j=v.document,X=Object.getPrototypeOf&&Object.getPrototypeOf(v);X=X&&X.setTimeout?X:v,w={}.toString.call(v.process)==="[object process]"?function(H){f.nextTick(function(){V(H)})}:function(){if(v.postMessage&&!v.importScripts){var H=!0,M=v.onmessage;return v.onmessage=function(){H=!1},v.postMessage("","*"),v.onmessage=M,H}}()?(E="setImmediate$"+Math.random()+"$",v.addEventListener?v.addEventListener("message",J,!1):v.attachEvent("onmessage",J),function(H){v.postMessage(E+H,"*")}):v.MessageChannel?((S=new MessageChannel).port1.onmessage=function(H){V(H.data)},function(H){S.port2.postMessage(H)}):j&&"onreadystatechange"in j.createElement("script")?(y=j.documentElement,function(H){var M=j.createElement("script");M.onreadystatechange=function(){V(H),M.onreadystatechange=null,y.removeChild(M),M=null},y.appendChild(M)}):function(H){setTimeout(V,0,H)},X.setImmediate=function(H){typeof H!="function"&&(H=new Function(""+H));for(var M=new Array(arguments.length-1),T=0;T"u"?g===void 0?this:g:self)}).call(this,typeof c<"u"?c:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],e("timers").setImmediate)},{_process:467,buffer:220,timers:523}],442:[function(e,d,m){(function(f){(function(){var c=1/0,u="[object Symbol]",s=/[\\^$.*+?()[\]{}|]/g,t=RegExp(s.source),n=typeof f=="object"&&f&&f.Object===Object&&f,r=typeof self=="object"&&self&&self.Object===Object&&self,i=n||r||Function("return this")(),o=Object.prototype,l=o.toString,a=i.Symbol,g=a?a.prototype:void 0,v=g?g.toString:void 0;function h(I){if(typeof I=="string")return I;if(y(I))return v?v.call(I):"";var F=I+"";return F=="0"&&1/I==-c?"-0":F}function w(I){return!!I&&typeof I=="object"}function y(I){return typeof I=="symbol"||w(I)&&l.call(I)==u}function S(I){return I==null?"":h(I)}function E(I){return I=S(I),I&&t.test(I)?I.replace(s,"\\$&"):I}d.exports=E}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],443:[function(e,d,m){(function(f){(function(){var c=200,u="Expected a function",s="__lodash_hash_undefined__",t=1,n=2,r=1/0,i=9007199254740991,o="[object Arguments]",l="[object Array]",a="[object Boolean]",g="[object Date]",v="[object Error]",h="[object Function]",w="[object GeneratorFunction]",y="[object Map]",S="[object Number]",E="[object Object]",I="[object Promise]",F="[object RegExp]",B="[object Set]",j="[object String]",X="[object Symbol]",G="[object WeakMap]",V="[object ArrayBuffer]",J="[object DataView]",H="[object Float32Array]",M="[object Float64Array]",T="[object Int8Array]",_="[object Int16Array]",A="[object Int32Array]",P="[object Uint8Array]",L="[object Uint8ClampedArray]",$="[object Uint16Array]",R="[object Uint32Array]",k=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,C=/^\w*$/,O=/^\./,W=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ne=/[\\^$.*+?()[\]{}|]/g,he=/\\(\\)?/g,ue=/^\[object .+?Constructor\]$/,Ae=/^(?:0|[1-9]\d*)$/,pe={};pe[H]=pe[M]=pe[T]=pe[_]=pe[A]=pe[P]=pe[L]=pe[$]=pe[R]=!0,pe[o]=pe[l]=pe[V]=pe[a]=pe[J]=pe[g]=pe[v]=pe[h]=pe[y]=pe[S]=pe[E]=pe[F]=pe[B]=pe[j]=pe[G]=!1;var te=typeof f=="object"&&f&&f.Object===Object&&f,Z=typeof self=="object"&&self&&self.Object===Object&&self,q=te||Z||Function("return this")(),de=typeof m=="object"&&m&&!m.nodeType&&m,ke=de&&typeof d=="object"&&d&&!d.nodeType&&d,oe=ke&&ke.exports===de,ie=oe&&te.process,Q=function(){try{return ie&&ie.binding("util")}catch{}}(),z=Q&&Q.isTypedArray;function Y(ae,xe,De,Ge){for(var dt=-1,nt=ae?ae.length:0;++dt-1}function Je(ae,xe){var De=this.__data__,Ge=Kr(De,ae);return Ge<0?De.push([ae,xe]):De[Ge][1]=xe,this}St.prototype.clear=Tt,St.prototype.delete=be,St.prototype.get=Ne,St.prototype.has=Le,St.prototype.set=Je;function at(ae){var xe=-1,De=ae?ae.length:0;for(this.clear();++xeor))return!1;var Er=nt.get(ae);if(Er&&nt.get(xe))return Er==xe;var Or=-1,kr=!0,dr=dt&t?new lr:void 0;for(nt.set(ae,xe),nt.set(xe,ae);++Or-1&&ae%1==0&&ae-1&&ae%1==0&&ae<=i}function pr(ae){var xe=typeof ae;return!!ae&&(xe=="object"||xe=="function")}function Sr(ae){return!!ae&&typeof ae=="object"}function Ar(ae){return typeof ae=="symbol"||Sr(ae)&&Be.call(ae)==X}var on=z?ve(z):Ei;function hr(ae){return ae==null?"":vs(ae)}function Tn(ae,xe,De){var Ge=ae==null?void 0:fi(ae,xe);return Ge===void 0?De:Ge}function Pr(ae,xe){return ae!=null&&Gi(ae,xe,Hi)}function An(ae){return cr(ae)?ji(ae):Cn(ae)}function Yn(ae){return ae}function Ln(ae){return Zt(ae)?we(Re(ae)):sn(ae)}d.exports=tt}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],444:[function(e,d,m){var f="[object Boolean]",c=Object.prototype,u=c.toString;function s(n){return n===!0||n===!1||t(n)&&u.call(n)==f}function t(n){return!!n&&typeof n=="object"}d.exports=s},{}],445:[function(e,d,m){(function(f){(function(){var c=200,u="__lodash_hash_undefined__",s=1,t=2,n=9007199254740991,r="[object Arguments]",i="[object Array]",o="[object AsyncFunction]",l="[object Boolean]",a="[object Date]",g="[object Error]",v="[object Function]",h="[object GeneratorFunction]",w="[object Map]",y="[object Number]",S="[object Null]",E="[object Object]",I="[object Promise]",F="[object Proxy]",B="[object RegExp]",j="[object Set]",X="[object String]",G="[object Symbol]",V="[object Undefined]",J="[object WeakMap]",H="[object ArrayBuffer]",M="[object DataView]",T="[object Float32Array]",_="[object Float64Array]",A="[object Int8Array]",P="[object Int16Array]",L="[object Int32Array]",$="[object Uint8Array]",R="[object Uint8ClampedArray]",k="[object Uint16Array]",C="[object Uint32Array]",O=/[\\^$.*+?()[\]{}|]/g,W=/^\[object .+?Constructor\]$/,ne=/^(?:0|[1-9]\d*)$/,he={};he[T]=he[_]=he[A]=he[P]=he[L]=he[$]=he[R]=he[k]=he[C]=!0,he[r]=he[i]=he[H]=he[l]=he[M]=he[a]=he[g]=he[v]=he[w]=he[y]=he[E]=he[B]=he[j]=he[X]=he[J]=!1;var ue=typeof f=="object"&&f&&f.Object===Object&&f,Ae=typeof self=="object"&&self&&self.Object===Object&&self,pe=ue||Ae||Function("return this")(),te=typeof m=="object"&&m&&!m.nodeType&&m,Z=te&&typeof d=="object"&&d&&!d.nodeType&&d,q=Z&&Z.exports===te,de=q&&ue.process,ke=function(){try{return de&&de.binding&&de.binding("util")}catch{}}(),oe=ke&&ke.isTypedArray;function ie(ye,Re){for(var We=-1,tt=ye==null?0:ye.length,Ct=0,Et=[];++We-1}function Je(ye,Re){var We=this.__data__,tt=Kr(We,ye);return tt<0?(++this.size,We.push([ye,Re])):We[tt][1]=Re,this}St.prototype.clear=Tt,St.prototype.delete=be,St.prototype.get=Ne,St.prototype.has=Le,St.prototype.set=Je;function at(ye){var Re=-1,We=ye==null?0:ye.length;for(this.clear();++Renr))return!1;var Ht=Et.get(ye);if(Ht&&Et.get(Re))return Ht==Re;var Tr=-1,Ir=!0,pr=We&t?new lr:void 0;for(Et.set(ye,Re),Et.set(Re,ye);++Tr-1&&ye%1==0&&ye-1&&ye%1==0&&ye<=n}function Zt(ye){var Re=typeof ye;return ye!=null&&(Re=="object"||Re=="function")}function Yt(ye){return ye!=null&&typeof ye=="object"}var Yi=oe?fe(oe):Hi;function Ss(ye){return _s(ye)?ji(ye):Gn(ye)}function Zi(){return[]}function Ji(){return!1}d.exports=bn}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],446:[function(e,d,m){(function(f){(function(){var c="[object AsyncFunction]",u="[object Function]",s="[object GeneratorFunction]",t="[object Null]",n="[object Proxy]",r="[object Undefined]",i=typeof f=="object"&&f&&f.Object===Object&&f,o=typeof self=="object"&&self&&self.Object===Object&&self,l=i||o||Function("return this")(),a=Object.prototype,g=a.hasOwnProperty,v=a.toString,h=l.Symbol,w=h?h.toStringTag:void 0;function y(B){return B==null?B===void 0?r:t:w&&w in Object(B)?S(B):E(B)}function S(B){var j=g.call(B,w),X=B[w];try{B[w]=void 0;var G=!0}catch{}var V=v.call(B);return G&&(j?B[w]=X:delete B[w]),V}function E(B){return v.call(B)}function I(B){if(!F(B))return!1;var j=y(B);return j==u||j==s||j==c||j==n}function F(B){var j=typeof B;return B!=null&&(j=="object"||j=="function")}d.exports=I}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],447:[function(e,d,m){function f(c){return c==null}d.exports=f},{}],448:[function(e,d,m){function f(c){return c===void 0}d.exports=f},{}],449:[function(e,d,m){(function(f){(function(){var c=200,u="__lodash_hash_undefined__",s=1/0,t="[object Function]",n="[object GeneratorFunction]",r=/[\\^$.*+?()[\]{}|]/g,i=/^\[object .+?Constructor\]$/,o=typeof f=="object"&&f&&f.Object===Object&&f,l=typeof self=="object"&&self&&self.Object===Object&&self,a=o||l||Function("return this")();function g(ge,Me){var Be=ge?ge.length:0;return!!Be&&w(ge,Me,0)>-1}function v(ge,Me,Be){for(var Xe=-1,ot=ge?ge.length:0;++Xe-1}function te(ge,Me){var Be=this.__data__,Xe=fe(Be,ge);return Xe<0?Be.push([ge,Me]):Be[Xe][1]=Me,this}ne.prototype.clear=he,ne.prototype.delete=ue,ne.prototype.get=Ae,ne.prototype.has=pe,ne.prototype.set=te;function Z(ge){var Me=-1,Be=ge?ge.length:0;for(this.clear();++Me=c){var Qe=Me?null:ve(ge);if(Qe)return F(Qe);st=!1,ot=S,bt=new Q}else bt=Me?[]:rt;e:for(;++Xe56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var a=u.allocUnsafe(16);return a.writeInt32LE(this._a,0),a.writeInt32LE(this._b,4),a.writeInt32LE(this._c,8),a.writeInt32LE(this._d,12),a};function n(a,g){return a<>>32-g}function r(a,g,v,h,w,y,S){return n(a+(g&v|~g&h)+w+y|0,S)+g|0}function i(a,g,v,h,w,y,S){return n(a+(g&h|v&~h)+w+y|0,S)+g|0}function o(a,g,v,h,w,y,S){return n(a+(g^v^h)+w+y|0,S)+g|0}function l(a,g,v,h,w,y,S){return n(a+(v^(g|~h))+w+y|0,S)+g|0}d.exports=t},{"hash-base":425,inherits:440,"safe-buffer":494}],451:[function(e,d,m){var f=e("bn.js"),c=e("brorand");function u(s){this.rand=s||new c.Rand}d.exports=u,u.create=function(t){return new u(t)},u.prototype._randbelow=function(t){var n=t.bitLength(),r=Math.ceil(n/8);do var i=new f(this.rand.generate(r));while(i.cmp(t)>=0);return i},u.prototype._randrange=function(t,n){var r=n.sub(t);return t.add(this._randbelow(r))},u.prototype.test=function(t,n,r){var i=t.bitLength(),o=f.mont(t),l=new f(1).toRed(o);n||(n=Math.max(1,i/48|0));for(var a=t.subn(1),g=0;!a.testn(g);g++);for(var v=t.shrn(g),h=a.toRed(o),w=!0;n>0;n--){var y=this._randrange(new f(2),a);r&&r(y);var S=y.toRed(o).redPow(v);if(!(S.cmp(l)===0||S.cmp(h)===0)){for(var E=1;E0;n--){var h=this._randrange(new f(2),l),w=t.gcd(h);if(w.cmpn(1)!==0)return w;var y=h.toRed(i).redPow(g);if(!(y.cmp(o)===0||y.cmp(v)===0)){for(var S=1;S>8,a=o&255;l?r.push(l,a):r.push(a)}return r}f.toArray=c;function u(t){return t.length===1?"0"+t:t}f.zero2=u;function s(t){for(var n="",r=0;r=6?"utf-8":"binary"}else u="utf-8";d.exports=u}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467}],463:[function(e,d,m){var f=Math.pow(2,30)-1;d.exports=function(c,u){if(typeof c!="number")throw new TypeError("Iterations not a number");if(c<0)throw new TypeError("Bad iterations");if(typeof u!="number")throw new TypeError("Key length not a number");if(u<0||u>f||u!==u)throw new TypeError("Bad key length")}},{}],464:[function(e,d,m){var f=e("create-hash/md5"),c=e("ripemd160"),u=e("sha.js"),s=e("safe-buffer").Buffer,t=e("./precondition"),n=e("./default-encoding"),r=e("./to-buffer"),i=s.alloc(128),o={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function l(v,h,w){var y=a(v),S=v==="sha512"||v==="sha384"?128:64;h.length>S?h=y(h):h.length"u"||!f.version||f.version.indexOf("v0.")===0||f.version.indexOf("v1.")===0&&f.version.indexOf("v1.8.")!==0?d.exports={nextTick:c}:d.exports=f;function c(u,s,t,n){if(typeof u!="function")throw new TypeError('"callback" argument must be a function');var r=arguments.length,i,o;switch(r){case 0:case 1:return f.nextTick(u);case 2:return f.nextTick(function(){u.call(null,s)});case 3:return f.nextTick(function(){u.call(null,s,t)});case 4:return f.nextTick(function(){u.call(null,s,t,n)});default:for(i=new Array(r-1),o=0;o1)for(var E=1;EE||new s(h).cmp(S.modulus)>=0)throw new Error("decryption error");var I;w?I=r(new s(h),S):I=t(h,S);var F=i.alloc(E-I.length);if(I=i.concat([F,I],E),y===4)return o(S,I);if(y===1)return l(S,I,w);if(y===3)return I;throw new Error("unknown padding")};function o(g,v){var h=g.modulus.byteLength(),w=n("sha1").update(i.alloc(0)).digest(),y=w.length;if(v[0]!==0)throw new Error("decryption error");var S=v.slice(1,y+1),E=v.slice(y+1),I=u(S,c(E,y)),F=u(E,c(I,h-y-1));if(a(w,F.slice(0,y)))throw new Error("decryption error");for(var B=y;F[B]===0;)B++;if(F[B++]!==1)throw new Error("decryption error");return F.slice(B)}function l(g,v,h){for(var w=v.slice(0,2),y=2,S=0;v[y++]!==0;)if(y>=v.length){S++;break}var E=v.slice(2,y-1);if((w.toString("hex")!=="0002"&&!h||w.toString("hex")!=="0001"&&h)&&S++,E.length<8&&S++,S)throw new Error("decryption error");return v.slice(y)}function a(g,v){g=i.from(g),v=i.from(v);var h=0,w=g.length;g.length!==v.length&&(h++,w=Math.min(g.length,v.length));for(var y=-1;++y=0)throw new Error("data too long for modulus")}else throw new Error("unknown padding");return y?i(I,E):r(I,E)};function l(v,h){var w=v.modulus.byteLength(),y=h.length,S=u("sha1").update(o.alloc(0)).digest(),E=S.length,I=2*E;if(y>w-I-2)throw new Error("message too long");var F=o.alloc(w-y-I-2),B=w-E-1,j=c(E),X=t(o.concat([S,F,o.alloc(1,1),h],B),s(j,B)),G=t(j,s(X,E));return new n(o.concat([o.alloc(1),G,X],w))}function a(v,h,w){var y=h.length,S=v.modulus.byteLength();if(y>S-11)throw new Error("message too long");var E;return w?E=o.alloc(S-y-3,255):E=g(S-y-3),new n(o.concat([o.from([0,w?1:2]),E,o.alloc(1),h],S))}function g(v){for(var h=o.allocUnsafe(v),w=0,y=c(v*2),S=0,E;ws)throw new RangeError("requested too many random bytes");var a=n.allocUnsafe(o);if(o>0)if(o>u)for(var g=0;go||w<0)throw new TypeError("offset must be a uint32");if(w>r||w>y)throw new RangeError("offset out of range")}function a(w,y,S){if(typeof w!="number"||w!==w)throw new TypeError("size must be a number");if(w>o||w<0)throw new TypeError("size must be a uint32");if(w+y>S||w>r)throw new RangeError("buffer too small")}i&&i.getRandomValues||!f.browser?(m.randomFill=g,m.randomFillSync=h):(m.randomFill=u,m.randomFillSync=u);function g(w,y,S,E){if(!n.isBuffer(w)&&!(w instanceof c.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if(typeof y=="function")E=y,y=0,S=w.length;else if(typeof S=="function")E=S,S=w.length-y;else if(typeof E!="function")throw new TypeError('"cb" argument must be a function');return l(y,w.length),a(S,y,w.length),v(w,y,S,E)}function v(w,y,S,E){if(f.browser){var I=w.buffer,F=new Uint8Array(I,y,S);if(i.getRandomValues(F),E){f.nextTick(function(){E(null,w)});return}return w}if(E){t(S,function(j,X){if(j)return E(j);X.copy(w,y),E(null,w)});return}var B=t(S);return B.copy(w,y),w}function h(w,y,S){if(typeof y>"u"&&(y=0),!n.isBuffer(w)&&!(w instanceof c.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return l(y,w.length),S===void 0&&(S=w.length-y),a(S,y,w.length),v(w,y,S)}}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467,randombytes:475,"safe-buffer":494}],477:[function(e,d,m){function f(i,o){i.prototype=Object.create(o.prototype),i.prototype.constructor=i,i.__proto__=o}var c={};function u(i,o,l){l||(l=Error);function a(v,h,w){return typeof o=="string"?o:o(v,h,w)}var g=function(v){f(h,v);function h(w,y,S){return v.call(this,a(w,y,S))||this}return h}(l);g.prototype.name=l.name,g.prototype.code=i,c[i]=g}function s(i,o){if(Array.isArray(i)){var l=i.length;return i=i.map(function(a){return String(a)}),l>2?"one of ".concat(o," ").concat(i.slice(0,l-1).join(", "),", or ")+i[l-1]:l===2?"one of ".concat(o," ").concat(i[0]," or ").concat(i[1]):"of ".concat(o," ").concat(i[0])}else return"of ".concat(o," ").concat(String(i))}function t(i,o,l){return i.substr(!l||l<0?0:+l,o.length)===o}function n(i,o,l){return(l===void 0||l>i.length)&&(l=i.length),i.substring(l-o.length,l)===o}function r(i,o,l){return typeof l!="number"&&(l=0),l+o.length>i.length?!1:i.indexOf(o,l)!==-1}u("ERR_INVALID_OPT_VALUE",function(i,o){return'The value "'+o+'" is invalid for option "'+i+'"'},TypeError),u("ERR_INVALID_ARG_TYPE",function(i,o,l){var a;typeof o=="string"&&t(o,"not ")?(a="must not be",o=o.replace(/^not /,"")):a="must be";var g;if(n(i," argument"))g="The ".concat(i," ").concat(a," ").concat(s(o,"type"));else{var v=r(i,".")?"property":"argument";g='The "'.concat(i,'" ').concat(v," ").concat(a," ").concat(s(o,"type"))}return g+=". Received type ".concat(typeof l),g},TypeError),u("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),u("ERR_METHOD_NOT_IMPLEMENTED",function(i){return"The "+i+" method is not implemented"}),u("ERR_STREAM_PREMATURE_CLOSE","Premature close"),u("ERR_STREAM_DESTROYED",function(i){return"Cannot call "+i+" after a stream was destroyed"}),u("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),u("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),u("ERR_STREAM_WRITE_AFTER_END","write after end"),u("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),u("ERR_UNKNOWN_ENCODING",function(i){return"Unknown encoding: "+i},TypeError),u("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),d.exports.codes=c},{}],478:[function(e,d,m){(function(f){(function(){var c=Object.keys||function(a){var g=[];for(var v in a)g.push(v);return g};d.exports=i;var u=e("./_stream_readable"),s=e("./_stream_writable");e("inherits")(i,u);for(var t=c(s.prototype),n=0;n0)if(typeof ie!="string"&&!fe.objectMode&&Object.getPrototypeOf(ie)!==n.prototype&&(ie=i(ie)),z)fe.endEmitted?G(oe,new F):_(oe,fe,ie,!0);else if(fe.ended)G(oe,new E);else{if(fe.destroyed)return!1;fe.reading=!1,fe.decoder&&!Q?(ie=fe.decoder.write(ie),fe.objectMode||ie.length!==0?_(oe,fe,ie,!1):O(oe,fe)):_(oe,fe,ie,!1)}else z||(fe.reading=!1,O(oe,fe))}return!fe.ended&&(fe.length=P?oe=P:(oe--,oe|=oe>>>1,oe|=oe>>>2,oe|=oe>>>4,oe|=oe>>>8,oe|=oe>>>16,oe++),oe}function $(oe,ie){return oe<=0||ie.length===0&&ie.ended?0:ie.objectMode?1:oe!==oe?ie.flowing&&ie.length?ie.buffer.head.data.length:ie.length:(oe>ie.highWaterMark&&(ie.highWaterMark=L(oe)),oe<=ie.length?oe:ie.ended?ie.length:(ie.needReadable=!0,0))}M.prototype.read=function(oe){a("read",oe),oe=parseInt(oe,10);var ie=this._readableState,Q=oe;if(oe!==0&&(ie.emittedReadable=!1),oe===0&&ie.needReadable&&((ie.highWaterMark!==0?ie.length>=ie.highWaterMark:ie.length>0)||ie.ended))return a("read: emitReadable",ie.length,ie.ended),ie.length===0&&ie.ended?q(this):k(this),null;if(oe=$(oe,ie),oe===0&&ie.ended)return ie.length===0&&q(this),null;var z=ie.needReadable;a("need readable",z),(ie.length===0||ie.length-oe0?Y=Z(oe,ie):Y=null,Y===null?(ie.needReadable=ie.length<=ie.highWaterMark,oe=0):(ie.length-=oe,ie.awaitDrain=0),ie.length===0&&(ie.ended||(ie.needReadable=!0),Q!==oe&&ie.ended&&q(this)),Y!==null&&this.emit("data",Y),Y};function R(oe,ie){if(a("onEofChunk"),!ie.ended){if(ie.decoder){var Q=ie.decoder.end();Q&&Q.length&&(ie.buffer.push(Q),ie.length+=ie.objectMode?1:Q.length)}ie.ended=!0,ie.sync?k(oe):(ie.needReadable=!1,ie.emittedReadable||(ie.emittedReadable=!0,C(oe)))}}function k(oe){var ie=oe._readableState;a("emitReadable",ie.needReadable,ie.emittedReadable),ie.needReadable=!1,ie.emittedReadable||(a("emitReadable",ie.flowing),ie.emittedReadable=!0,f.nextTick(C,oe))}function C(oe){var ie=oe._readableState;a("emitReadable_",ie.destroyed,ie.length,ie.ended),!ie.destroyed&&(ie.length||ie.ended)&&(oe.emit("readable"),ie.emittedReadable=!1),ie.needReadable=!ie.flowing&&!ie.ended&&ie.length<=ie.highWaterMark,te(oe)}function O(oe,ie){ie.readingMore||(ie.readingMore=!0,f.nextTick(W,oe,ie))}function W(oe,ie){for(;!ie.reading&&!ie.ended&&(ie.length1&&ke(z.pipes,oe)!==-1)&&!Se&&(a("false write response, pause",z.awaitDrain),z.awaitDrain++),Q.pause())}function me(Fe){a("onerror",Fe),Ce(),oe.removeListener("error",me),s(oe,"error")===0&&G(oe,Fe)}J(oe,"error",me);function Ee(){oe.removeListener("finish",Ie),Ce()}oe.once("close",Ee);function Ie(){a("onfinish"),oe.removeListener("close",Ee),Ce()}oe.once("finish",Ie);function Ce(){a("unpipe"),Q.unpipe(oe)}return oe.emit("pipe",Q),z.flowing||(a("pipe resume"),Q.resume()),oe};function ne(oe){return function(){var Q=oe._readableState;a("pipeOnDrain",Q.awaitDrain),Q.awaitDrain&&Q.awaitDrain--,Q.awaitDrain===0&&s(oe,"data")&&(Q.flowing=!0,te(oe))}}M.prototype.unpipe=function(oe){var ie=this._readableState,Q={hasUnpiped:!1};if(ie.pipesCount===0)return this;if(ie.pipesCount===1)return oe&&oe!==ie.pipes?this:(oe||(oe=ie.pipes),ie.pipes=null,ie.pipesCount=0,ie.flowing=!1,oe&&oe.emit("unpipe",this,Q),this);if(!oe){var z=ie.pipes,Y=ie.pipesCount;ie.pipes=null,ie.pipesCount=0,ie.flowing=!1;for(var fe=0;fe0,z.flowing!==!1&&this.resume()):oe==="readable"&&!z.endEmitted&&!z.readableListening&&(z.readableListening=z.needReadable=!0,z.flowing=!1,z.emittedReadable=!1,a("on readable",z.length,z.reading),z.length?k(this):z.reading||f.nextTick(ue,this)),Q},M.prototype.addListener=M.prototype.on,M.prototype.removeListener=function(oe,ie){var Q=t.prototype.removeListener.call(this,oe,ie);return oe==="readable"&&f.nextTick(he,this),Q},M.prototype.removeAllListeners=function(oe){var ie=t.prototype.removeAllListeners.apply(this,arguments);return(oe==="readable"||oe===void 0)&&f.nextTick(he,this),ie};function he(oe){var ie=oe._readableState;ie.readableListening=oe.listenerCount("readable")>0,ie.resumeScheduled&&!ie.paused?ie.flowing=!0:oe.listenerCount("data")>0&&oe.resume()}function ue(oe){a("readable nexttick read 0"),oe.read(0)}M.prototype.resume=function(){var oe=this._readableState;return oe.flowing||(a("resume"),oe.flowing=!oe.readableListening,Ae(this,oe)),oe.paused=!1,this};function Ae(oe,ie){ie.resumeScheduled||(ie.resumeScheduled=!0,f.nextTick(pe,oe,ie))}function pe(oe,ie){a("resume",ie.reading),ie.reading||oe.read(0),ie.resumeScheduled=!1,oe.emit("resume"),te(oe),ie.flowing&&!ie.reading&&oe.read(0)}M.prototype.pause=function(){return a("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(a("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function te(oe){var ie=oe._readableState;for(a("flow",ie.flowing);ie.flowing&&oe.read()!==null;);}M.prototype.wrap=function(oe){var ie=this,Q=this._readableState,z=!1;oe.on("end",function(){if(a("wrapped end"),Q.decoder&&!Q.ended){var we=Q.decoder.end();we&&we.length&&ie.push(we)}ie.push(null)}),oe.on("data",function(we){if(a("wrapped data"),Q.decoder&&(we=Q.decoder.write(we)),!(Q.objectMode&&we==null)&&!(!Q.objectMode&&(!we||!we.length))){var U=ie.push(we);U||(z=!0,oe.pause())}});for(var Y in oe)this[Y]===void 0&&typeof oe[Y]=="function"&&(this[Y]=function(U){return function(){return oe[U].apply(oe,arguments)}}(Y));for(var fe=0;fe=ie.length?(ie.decoder?Q=ie.buffer.join(""):ie.buffer.length===1?Q=ie.buffer.first():Q=ie.buffer.concat(ie.length),ie.buffer.clear()):Q=ie.buffer.consume(oe,ie.decoder),Q}function q(oe){var ie=oe._readableState;a("endReadable",ie.endEmitted),ie.endEmitted||(ie.ended=!0,f.nextTick(de,ie,oe))}function de(oe,ie){if(a("endReadableNT",oe.endEmitted,oe.length),!oe.endEmitted&&oe.length===0&&(oe.endEmitted=!0,ie.readable=!1,ie.emit("end"),oe.autoDestroy)){var Q=ie._writableState;(!Q||Q.autoDestroy&&Q.finished)&&ie.destroy()}}typeof Symbol=="function"&&(M.from=function(oe,ie){return X===void 0&&(X=e("./internal/streams/from")),X(M,oe,ie)});function ke(oe,ie){for(var Q=0,z=oe.length;Q-1))throw new j(Z);return this._writableState.defaultEncoding=Z,this},Object.defineProperty(H.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function _(te,Z,q){return!te.objectMode&&te.decodeStrings!==!1&&typeof Z=="string"&&(Z=r.from(Z,q)),Z}Object.defineProperty(H.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function A(te,Z,q,de,ke,oe){if(!q){var ie=_(Z,de,ke);de!==ie&&(q=!0,ke="buffer",de=ie)}var Q=Z.objectMode?1:de.length;Z.length+=Q;var z=Z.length0?this.tail.next=E:this.head=E,this.tail=E,++this.length}},{key:"unshift",value:function(S){var E={data:S,next:this.head};this.length===0&&(this.tail=E),this.head=E,++this.length}},{key:"shift",value:function(){if(this.length!==0){var S=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,S}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(S){if(this.length===0)return"";for(var E=this.head,I=""+E.data;E=E.next;)I+=S+E.data;return I}},{key:"concat",value:function(S){if(this.length===0)return l.alloc(0);for(var E=l.allocUnsafe(S>>>0),I=this.head,F=0;I;)h(I.data,E,F),F+=I.data.length,I=I.next;return E}},{key:"consume",value:function(S,E){var I;return SB.length?B.length:S;if(j===B.length?F+=B:F+=B.slice(0,S),S-=j,S===0){j===B.length?(++I,E.next?this.head=E.next:this.head=this.tail=null):(this.head=E,E.data=B.slice(j));break}++I}return this.length-=I,F}},{key:"_getBuffer",value:function(S){var E=l.allocUnsafe(S),I=this.head,F=1;for(I.data.copy(E),S-=I.data.length;I=I.next;){var B=I.data,j=S>B.length?B.length:S;if(B.copy(E,E.length-S,0,j),S-=j,S===0){j===B.length?(++F,I.next?this.head=I.next:this.head=this.tail=null):(this.head=I,I.data=B.slice(j));break}++F}return this.length-=F,E}},{key:v,value:function(S,E){return g(this,c(c({},E),{},{depth:0,customInspect:!1}))}}]),w}()},{buffer:220,util:188}],485:[function(e,d,m){(function(f){(function(){function c(i,o){var l=this,a=this._readableState&&this._readableState.destroyed,g=this._writableState&&this._writableState.destroyed;return a||g?(o?o(i):i&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,f.nextTick(n,this,i)):f.nextTick(n,this,i)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(i||null,function(v){!o&&v?l._writableState?l._writableState.errorEmitted?f.nextTick(s,l):(l._writableState.errorEmitted=!0,f.nextTick(u,l,v)):f.nextTick(u,l,v):o?(f.nextTick(s,l),o(v)):f.nextTick(s,l)}),this)}function u(i,o){n(i,o),s(i)}function s(i){i._writableState&&!i._writableState.emitClose||i._readableState&&!i._readableState.emitClose||i.emit("close")}function t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function n(i,o){i.emit("error",o)}function r(i,o){var l=i._readableState,a=i._writableState;l&&l.autoDestroy||a&&a.autoDestroy?i.destroy(o):i.emit("error",o)}d.exports={destroy:c,undestroy:t,errorOrDestroy:r}}).call(this)}).call(this,e("_process"))},{_process:467}],486:[function(e,d,m){var f=e("../../../errors").codes.ERR_STREAM_PREMATURE_CLOSE;function c(n){var r=!1;return function(){if(!r){r=!0;for(var i=arguments.length,o=new Array(i),l=0;l0;return i(I,B,j,function(X){S||(S=X),X&&E.forEach(o),!B&&(E.forEach(o),y(S))})});return h.reduce(l)}d.exports=g},{"../../../errors":477,"./end-of-stream":486}],489:[function(e,d,m){var f=e("../../../errors").codes.ERR_INVALID_OPT_VALUE;function c(s,t,n){return s.highWaterMark!=null?s.highWaterMark:t?s[n]:null}function u(s,t,n,r){var i=c(t,r,n);if(i!=null){if(!(isFinite(i)&&Math.floor(i)===i)||i<0){var o=r?n:"highWaterMark";throw new f(o,i)}return Math.floor(i)}return s.objectMode?16:16*1024}d.exports={getHighWaterMark:u}},{"../../../errors":477}],490:[function(e,d,m){d.exports=e("events").EventEmitter},{events:422}],491:[function(e,d,m){m=d.exports=e("./lib/_stream_readable.js"),m.Stream=m,m.Readable=m,m.Writable=e("./lib/_stream_writable.js"),m.Duplex=e("./lib/_stream_duplex.js"),m.Transform=e("./lib/_stream_transform.js"),m.PassThrough=e("./lib/_stream_passthrough.js"),m.finished=e("./lib/internal/streams/end-of-stream.js"),m.pipeline=e("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":478,"./lib/_stream_passthrough.js":479,"./lib/_stream_readable.js":480,"./lib/_stream_transform.js":481,"./lib/_stream_writable.js":482,"./lib/internal/streams/end-of-stream.js":486,"./lib/internal/streams/pipeline.js":488}],492:[function(e,d,m){var f=function(c){var u=Object.prototype,s=u.hasOwnProperty,t=Object.defineProperty||function(R,k,C){R[k]=C.value},n,r=typeof Symbol=="function"?Symbol:{},i=r.iterator||"@@iterator",o=r.asyncIterator||"@@asyncIterator",l=r.toStringTag||"@@toStringTag";function a(R,k,C){return Object.defineProperty(R,k,{value:C,enumerable:!0,configurable:!0,writable:!0}),R[k]}try{a({},"")}catch{a=function(k,C,O){return k[C]=O}}function g(R,k,C,O){var W=k&&k.prototype instanceof I?k:I,ne=Object.create(W.prototype),he=new P(O||[]);return t(ne,"_invoke",{value:M(R,C,he)}),ne}c.wrap=g;function v(R,k,C){try{return{type:"normal",arg:R.call(k,C)}}catch(O){return{type:"throw",arg:O}}}var h="suspendedStart",w="suspendedYield",y="executing",S="completed",E={};function I(){}function F(){}function B(){}var j={};a(j,i,function(){return this});var X=Object.getPrototypeOf,G=X&&X(X(L([])));G&&G!==u&&s.call(G,i)&&(j=G);var V=B.prototype=I.prototype=Object.create(j);F.prototype=B,t(V,"constructor",{value:B,configurable:!0}),t(B,"constructor",{value:F,configurable:!0}),F.displayName=a(B,l,"GeneratorFunction");function J(R){["next","throw","return"].forEach(function(k){a(R,k,function(C){return this._invoke(k,C)})})}c.isGeneratorFunction=function(R){var k=typeof R=="function"&&R.constructor;return k?k===F||(k.displayName||k.name)==="GeneratorFunction":!1},c.mark=function(R){return Object.setPrototypeOf?Object.setPrototypeOf(R,B):(R.__proto__=B,a(R,l,"GeneratorFunction")),R.prototype=Object.create(V),R},c.awrap=function(R){return{__await:R}};function H(R,k){function C(ne,he,ue,Ae){var pe=v(R[ne],R,he);if(pe.type==="throw")Ae(pe.arg);else{var te=pe.arg,Z=te.value;return Z&&typeof Z=="object"&&s.call(Z,"__await")?k.resolve(Z.__await).then(function(q){C("next",q,ue,Ae)},function(q){C("throw",q,ue,Ae)}):k.resolve(Z).then(function(q){te.value=q,ue(te)},function(q){return C("throw",q,ue,Ae)})}}var O;function W(ne,he){function ue(){return new k(function(Ae,pe){C(ne,he,Ae,pe)})}return O=O?O.then(ue,ue):ue()}t(this,"_invoke",{value:W})}J(H.prototype),a(H.prototype,o,function(){return this}),c.AsyncIterator=H,c.async=function(R,k,C,O,W){W===void 0&&(W=Promise);var ne=new H(g(R,k,C,O),W);return c.isGeneratorFunction(k)?ne:ne.next().then(function(he){return he.done?he.value:ne.next()})};function M(R,k,C){var O=h;return function(ne,he){if(O===y)throw new Error("Generator is already running");if(O===S){if(ne==="throw")throw he;return $()}for(C.method=ne,C.arg=he;;){var ue=C.delegate;if(ue){var Ae=T(ue,C);if(Ae){if(Ae===E)continue;return Ae}}if(C.method==="next")C.sent=C._sent=C.arg;else if(C.method==="throw"){if(O===h)throw O=S,C.arg;C.dispatchException(C.arg)}else C.method==="return"&&C.abrupt("return",C.arg);O=y;var pe=v(R,k,C);if(pe.type==="normal"){if(O=C.done?S:w,pe.arg===E)continue;return{value:pe.arg,done:C.done}}else pe.type==="throw"&&(O=S,C.method="throw",C.arg=pe.arg)}}}function T(R,k){var C=k.method,O=R.iterator[C];if(O===n)return k.delegate=null,C==="throw"&&R.iterator.return&&(k.method="return",k.arg=n,T(R,k),k.method==="throw")||C!=="return"&&(k.method="throw",k.arg=new TypeError("The iterator does not provide a '"+C+"' method")),E;var W=v(O,R.iterator,k.arg);if(W.type==="throw")return k.method="throw",k.arg=W.arg,k.delegate=null,E;var ne=W.arg;if(!ne)return k.method="throw",k.arg=new TypeError("iterator result is not an object"),k.delegate=null,E;if(ne.done)k[R.resultName]=ne.value,k.next=R.nextLoc,k.method!=="return"&&(k.method="next",k.arg=n);else return ne;return k.delegate=null,E}J(V),a(V,l,"Generator"),a(V,i,function(){return this}),a(V,"toString",function(){return"[object Generator]"});function _(R){var k={tryLoc:R[0]};1 in R&&(k.catchLoc=R[1]),2 in R&&(k.finallyLoc=R[2],k.afterLoc=R[3]),this.tryEntries.push(k)}function A(R){var k=R.completion||{};k.type="normal",delete k.arg,R.completion=k}function P(R){this.tryEntries=[{tryLoc:"root"}],R.forEach(_,this),this.reset(!0)}c.keys=function(R){var k=Object(R),C=[];for(var O in k)C.push(O);return C.reverse(),function W(){for(;C.length;){var ne=C.pop();if(ne in k)return W.value=ne,W.done=!1,W}return W.done=!0,W}};function L(R){if(R){var k=R[i];if(k)return k.call(R);if(typeof R.next=="function")return R;if(!isNaN(R.length)){var C=-1,O=function W(){for(;++C=0;--O){var W=this.tryEntries[O],ne=W.completion;if(W.tryLoc==="root")return C("end");if(W.tryLoc<=this.prev){var he=s.call(W,"catchLoc"),ue=s.call(W,"finallyLoc");if(he&&ue){if(this.prev=0;--C){var O=this.tryEntries[C];if(O.tryLoc<=this.prev&&s.call(O,"finallyLoc")&&this.prev=0;--k){var C=this.tryEntries[k];if(C.finallyLoc===R)return this.complete(C.completion,C.afterLoc),A(C),E}},catch:function(R){for(var k=this.tryEntries.length-1;k>=0;--k){var C=this.tryEntries[k];if(C.tryLoc===R){var O=C.completion;if(O.type==="throw"){var W=O.arg;A(C)}return W}}throw new Error("illegal catch attempt")},delegateYield:function(R,k,C){return this.delegate={iterator:L(R),resultName:k,nextLoc:C},this.method==="next"&&(this.arg=n),E}},c}(typeof d=="object"?d.exports:{});try{regeneratorRuntime=f}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=f:Function("r","regeneratorRuntime = r")(f)}},{}],493:[function(e,d,m){var f=e("buffer").Buffer,c=e("inherits"),u=e("hash-base"),s=new Array(16),t=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],n=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],r=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],i=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],o=[0,1518500249,1859775393,2400959708,2840853838],l=[1352829926,1548603684,1836072691,2053994217,0];function a(){u.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}c(a,u),a.prototype._update=function(){for(var E=s,I=0;I<16;++I)E[I]=this._block.readInt32LE(I*4);for(var F=this._a|0,B=this._b|0,j=this._c|0,X=this._d|0,G=this._e|0,V=this._a|0,J=this._b|0,H=this._c|0,M=this._d|0,T=this._e|0,_=0;_<80;_+=1){var A,P;_<16?(A=v(F,B,j,X,G,E[t[_]],o[0],r[_]),P=S(V,J,H,M,T,E[n[_]],l[0],i[_])):_<32?(A=h(F,B,j,X,G,E[t[_]],o[1],r[_]),P=y(V,J,H,M,T,E[n[_]],l[1],i[_])):_<48?(A=w(F,B,j,X,G,E[t[_]],o[2],r[_]),P=w(V,J,H,M,T,E[n[_]],l[2],i[_])):_<64?(A=y(F,B,j,X,G,E[t[_]],o[3],r[_]),P=h(V,J,H,M,T,E[n[_]],l[3],i[_])):(A=S(F,B,j,X,G,E[t[_]],o[4],r[_]),P=v(V,J,H,M,T,E[n[_]],l[4],i[_])),F=G,G=X,X=g(j,10),j=B,B=A,V=T,T=M,M=g(H,10),H=J,J=P}var L=this._b+j+M|0;this._b=this._c+X+T|0,this._c=this._d+G+V|0,this._d=this._e+F+J|0,this._e=this._a+B+H|0,this._a=L},a.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var E=f.alloc?f.alloc(20):new f(20);return E.writeInt32LE(this._a,0),E.writeInt32LE(this._b,4),E.writeInt32LE(this._c,8),E.writeInt32LE(this._d,12),E.writeInt32LE(this._e,16),E};function g(E,I){return E<>>32-I}function v(E,I,F,B,j,X,G,V){return g(E+(I^F^B)+X+G|0,V)+j|0}function h(E,I,F,B,j,X,G,V){return g(E+(I&F|~I&B)+X+G|0,V)+j|0}function w(E,I,F,B,j,X,G,V){return g(E+((I|~F)^B)+X+G|0,V)+j|0}function y(E,I,F,B,j,X,G,V){return g(E+(I&B|F&~B)+X+G|0,V)+j|0}function S(E,I,F,B,j,X,G,V){return g(E+(I^(F|~B))+X+G|0,V)+j|0}d.exports=a},{buffer:220,"hash-base":425,inherits:440}],494:[function(e,d,m){/*! safe-buffer. MIT License. Feross Aboukhadijeh */var f=e("buffer"),c=f.Buffer;function u(t,n){for(var r in t)n[r]=t[r]}c.from&&c.alloc&&c.allocUnsafe&&c.allocUnsafeSlow?d.exports=f:(u(f,m),m.Buffer=s);function s(t,n,r){return c(t,n,r)}s.prototype=Object.create(c.prototype),u(c,s),s.from=function(t,n,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return c(t,n,r)},s.alloc=function(t,n,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=c(t);return n!==void 0?typeof r=="string"?i.fill(n,r):i.fill(n):i.fill(0),i},s.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return c(t)},s.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return f.SlowBuffer(t)}},{buffer:220}],495:[function(e,d,m){(function(f){(function(){var c=e("buffer"),u=c.Buffer,s={},t;for(t in c)c.hasOwnProperty(t)&&(t==="SlowBuffer"||t==="Buffer"||(s[t]=c[t]));var n=s.Buffer={};for(t in u)u.hasOwnProperty(t)&&(t==="allocUnsafe"||t==="allocUnsafeSlow"||(n[t]=u[t]));if(s.Buffer.prototype=u.prototype,(!n.from||n.from===Uint8Array.from)&&(n.from=function(r,i,o){if(typeof r=="number")throw new TypeError('The "value" argument must not be of type number. Received type '+typeof r);if(r&&typeof r.length>"u")throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r);return u(r,i,o)}),n.alloc||(n.alloc=function(r,i,o){if(typeof r!="number")throw new TypeError('The "size" argument must be of type number. Received type '+typeof r);if(r<0||r>=2*(1<<30))throw new RangeError('The value "'+r+'" is invalid for option "size"');var l=u(r);return!i||i.length===0?l.fill(0):typeof o=="string"?l.fill(i,o):l.fill(i),l}),!s.kStringMaxLength)try{s.kStringMaxLength=f.binding("buffer").kStringMaxLength}catch{}s.constants||(s.constants={MAX_LENGTH:s.kMaxLength},s.kStringMaxLength&&(s.constants.MAX_STRING_LENGTH=s.kStringMaxLength)),d.exports=s}).call(this)}).call(this,e("_process"))},{_process:467,buffer:220}],496:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0});const f=e("xmlchars/xml/1.0/ed5"),c=e("xmlchars/xml/1.1/ed2"),u=e("xmlchars/xmlns/1.0/ed3");var s=f.isS,t=f.isChar,n=f.isNameStartChar,r=f.isNameChar,i=f.S_LIST,o=f.NAME_RE,l=c.isChar,a=u.isNCNameStartChar,g=u.isNCNameChar,v=u.NC_NAME_RE;const h="http://www.w3.org/XML/1998/namespace",w="http://www.w3.org/2000/xmlns/",y={__proto__:null,xml:h,xmlns:w},S={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},E=-1,I=-2,F=0,B=1,j=2,X=3,G=4,V=5,J=6,H=7,M=8,T=9,_=10,A=11,P=12,L=13,$=14,R=15,k=16,C=17,O=18,W=19,ne=20,he=21,ue=22,Ae=23,pe=24,te=25,Z=26,q=27,de=28,ke=29,oe=30,ie=31,Q=32,z=33,Y=34,fe=35,we=36,U=37,ve=38,Se=39,ee=40,se=41,me=42,Ee=43,Ie=44,Ce=9,Fe=10,ze=13,je=32,ge=33,Me=34,Be=38,Xe=39,ot=45,ct=47,st=59,rt=60,bt=61,Qe=62,et=63,_t=91,ft=93,jt=133,It=8232,ht=Tt=>Tt===Me||Tt===Xe,Dt=[Me,Xe],Ut=[...Dt,_t,Qe],wt=[...Dt,rt,ft],er=[bt,et,...i],Kt=[...i,Qe,Be,rt];function pt(Tt,be,Ne){switch(be){case"xml":Ne!==h&&Tt.fail(`xml prefix must be bound to ${h}.`);break;case"xmlns":Ne!==w&&Tt.fail(`xmlns prefix must be bound to ${w}.`);break}switch(Ne){case w:Tt.fail(be===""?`the default namespace may not be set to ${Ne}.`:`may not assign a prefix (even "xmlns") to the URI ${w}.`);break;case h:switch(be){case"xml":break;case"":Tt.fail(`the default namespace may not be set to ${Ne}.`);break;default:Tt.fail("may not assign the xml namespace to another prefix.")}break}}function Gt(Tt,be){for(const Ne of Object.keys(be))pt(Tt,Ne,be[Ne])}const kt=Tt=>v.test(Tt),xt=Tt=>o.test(Tt),$t=0,Qt=1,mt=2;m.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const qt={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};class St{constructor(be){this.opt=be??{},this.fragmentOpt=!!this.opt.fragment;const Ne=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=this.opt.position!==!1,this.fileName=this.opt.fileName,Ne){this.nameStartCheck=a,this.nameCheck=g,this.isName=kt,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},y);const Le=this.opt.additionalNamespaces;Le!=null&&(Gt(this,Le),Object.assign(this.ns,Le))}else this.nameStartCheck=n,this.nameCheck=r,this.isName=xt,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var be;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=$t,this.attribList=[];const{fragmentOpt:Ne}=this;this.state=Ne?L:F,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=Ne,this.xmlDeclPossible=!Ne,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:Le}=this.opt;if(Le===void 0){if(this.opt.forceXMLVersion===!0)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");Le="1.0"}this.setXMLVersion(Le),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(S),(be=this.readyHandler)===null||be===void 0||be.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(be,Ne){this[qt[be]]=Ne}off(be){this[qt[be]]=void 0}makeError(be){var Ne;let Le=(Ne=this.fileName)!==null&&Ne!==void 0?Ne:"";return this.trackPosition&&(Le.length>0&&(Le+=":"),Le+=`${this.line}:${this.column}`),Le.length>0&&(Le+=": "),new Error(Le+be)}fail(be){const Ne=this.makeError(be),Le=this.errorHandler;if(Le===void 0)throw Ne;return Le(Ne),this}write(be){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let Ne=!1;be===null?(Ne=!0,be=""):typeof be=="object"&&(be=be.toString()),this.carriedFromPrevious!==void 0&&(be=`${this.carriedFromPrevious}${be}`,this.carriedFromPrevious=void 0);let Le=be.length;const Je=be.charCodeAt(Le-1);!Ne&&(Je===ze||Je>=55296&&Je<=56319)&&(this.carriedFromPrevious=be[Le-1],Le--,be=be.slice(0,Le));const{stateTable:at}=this;for(this.chunk=be,this.i=0;this.i=be.length)return E;const Le=be.charCodeAt(Ne);if(this.column++,Le<55296){if(Le>=je||Le===Ce)return Le;switch(Le){case Fe:return this.line++,this.column=0,this.positionAtNewLine=this.position,Fe;case ze:return be.charCodeAt(Ne+1)===Fe&&(this.i=Ne+2),this.line++,this.column=0,this.positionAtNewLine=this.position,I;default:return this.fail("disallowed character."),Le}}if(Le>56319)return Le>=57344&&Le<=65533||this.fail("disallowed character."),Le;const Je=65536+(Le-55296)*1024+(be.charCodeAt(Ne+1)-56320);return this.i=Ne+2,Je>1114111&&this.fail("disallowed character."),Je}getCode11(){const{chunk:be,i:Ne}=this;if(this.prevI=Ne,this.i=Ne+1,Ne>=be.length)return E;const Le=be.charCodeAt(Ne);if(this.column++,Le<55296){if(Le>31&&Le<127||Le>159&&Le!==It||Le===Ce)return Le;switch(Le){case Fe:return this.line++,this.column=0,this.positionAtNewLine=this.position,Fe;case ze:{const at=be.charCodeAt(Ne+1);(at===Fe||at===jt)&&(this.i=Ne+2)}case jt:case It:return this.line++,this.column=0,this.positionAtNewLine=this.position,I;default:return this.fail("disallowed character."),Le}}if(Le>56319)return Le>=57344&&Le<=65533||this.fail("disallowed character."),Le;const Je=65536+(Le-55296)*1024+(be.charCodeAt(Ne+1)-56320);return this.i=Ne+2,Je>1114111&&this.fail("disallowed character."),Je}getCodeNorm(){const be=this.getCode();return be===I?Fe:be}unget(){this.i=this.prevI,this.column--}captureTo(be){let{i:Ne}=this;const{chunk:Le}=this;for(;;){const Je=this.getCode(),at=Je===I,Mt=at?Fe:Je;if(Mt===E||be.includes(Mt))return this.text+=Le.slice(Ne,this.prevI),Mt;at&&(this.text+=`${Le.slice(Ne,this.prevI)} +`,Ne=this.i)}}captureToChar(be){let{i:Ne}=this;const{chunk:Le}=this;for(;;){let Je=this.getCode();switch(Je){case I:this.text+=`${Le.slice(Ne,this.prevI)} +`,Ne=this.i,Je=Fe;break;case E:return this.text+=Le.slice(Ne),!1}if(Je===be)return this.text+=Le.slice(Ne,this.prevI),!0}}captureNameChars(){const{chunk:be,i:Ne}=this;for(;;){const Le=this.getCode();if(Le===E)return this.name+=be.slice(Ne),E;if(!r(Le))return this.name+=be.slice(Ne,this.prevI),Le===I?Fe:Le}}skipSpaces(){for(;;){const be=this.getCodeNorm();if(be===E||!s(be))return be}}setXMLVersion(be){this.currentXMLVersion=be,be==="1.0"?(this.isChar=t,this.getCode=this.getCode10):(this.isChar=l,this.getCode=this.getCode11)}sBegin(){this.chunk.charCodeAt(0)===65279&&(this.i++,this.column++),this.state=B}sBeginWhitespace(){const be=this.i,Ne=this.skipSpaces();switch(this.prevI!==be&&(this.xmlDeclPossible=!1),Ne){case rt:if(this.state=R,this.text.length!==0)throw new Error("no-empty text at start");break;case E:break;default:this.unget(),this.state=L,this.xmlDeclPossible=!1}}sDoctype(){var be;const Ne=this.captureTo(Ut);switch(Ne){case Qe:{(be=this.doctypeHandler)===null||be===void 0||be.call(this,this.text),this.text="",this.state=L,this.doctype=!0;break}case E:break;default:this.text+=String.fromCodePoint(Ne),Ne===_t?this.state=G:ht(Ne)&&(this.state=X,this.q=Ne)}}sDoctypeQuote(){const be=this.q;this.captureToChar(be)&&(this.text+=String.fromCodePoint(be),this.q=null,this.state=j)}sDTD(){const be=this.captureTo(wt);be!==E&&(this.text+=String.fromCodePoint(be),be===ft?this.state=j:be===rt?this.state=J:ht(be)&&(this.state=V,this.q=be))}sDTDQuoted(){const be=this.q;this.captureToChar(be)&&(this.text+=String.fromCodePoint(be),this.state=G,this.q=null)}sDTDOpenWaka(){const be=this.getCodeNorm();switch(this.text+=String.fromCodePoint(be),be){case ge:this.state=H,this.openWakaBang="";break;case et:this.state=A;break;default:this.state=G}}sDTDOpenWakaBang(){const be=String.fromCodePoint(this.getCodeNorm()),Ne=this.openWakaBang+=be;this.text+=be,Ne!=="-"&&(this.state=Ne==="--"?M:G,this.openWakaBang="")}sDTDComment(){this.captureToChar(ot)&&(this.text+="-",this.state=T)}sDTDCommentEnding(){const be=this.getCodeNorm();this.text+=String.fromCodePoint(be),this.state=be===ot?_:M}sDTDCommentEnded(){const be=this.getCodeNorm();this.text+=String.fromCodePoint(be),be===Qe?this.state=G:(this.fail("malformed comment."),this.state=M)}sDTDPI(){this.captureToChar(et)&&(this.text+="?",this.state=P)}sDTDPIEnding(){const be=this.getCodeNorm();this.text+=String.fromCodePoint(be),be===Qe&&(this.state=G)}sText(){this.tags.length!==0?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:be}=this;const{chunk:Ne}=this;e:for(;;)switch(this.getCode()){case I:this.entity+=`${Ne.slice(be,this.prevI)} +`,be=this.i;break;case st:{const{entityReturnState:Le}=this,Je=this.entity+Ne.slice(be,this.prevI);this.state=Le;let at;Je===""?(this.fail("empty entity name."),at="&;"):(at=this.parseEntity(Je),this.entity=""),(Le!==L||this.textHandler!==void 0)&&(this.text+=at);break e}case E:this.entity+=Ne.slice(be);break e}}sOpenWaka(){const be=this.getCode();if(n(be))this.state=Y,this.unget(),this.xmlDeclPossible=!1;else switch(be){case ct:this.state=Ee,this.xmlDeclPossible=!1;break;case ge:this.state=k,this.openWakaBang="",this.xmlDeclPossible=!1;break;case et:this.state=Ae;break;default:this.fail("disallowed character in tag name"),this.state=L,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=ne,this.openWakaBang="";break;case"--":this.state=C,this.openWakaBang="";break;case"DOCTYPE":this.state=j,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(ot)&&(this.state=O)}sCommentEnding(){var be;const Ne=this.getCodeNorm();Ne===ot?(this.state=W,(be=this.commentHandler)===null||be===void 0||be.call(this,this.text),this.text=""):(this.text+=`-${String.fromCodePoint(Ne)}`,this.state=C)}sCommentEnded(){const be=this.getCodeNorm();be!==Qe?(this.fail("malformed comment."),this.text+=`--${String.fromCodePoint(be)}`,this.state=C):this.state=L}sCData(){this.captureToChar(ft)&&(this.state=he)}sCDataEnding(){const be=this.getCodeNorm();be===ft?this.state=ue:(this.text+=`]${String.fromCodePoint(be)}`,this.state=ne)}sCDataEnding2(){var be;const Ne=this.getCodeNorm();switch(Ne){case Qe:{(be=this.cdataHandler)===null||be===void 0||be.call(this,this.text),this.text="",this.state=L;break}case ft:this.text+="]";break;default:this.text+=`]]${String.fromCodePoint(Ne)}`,this.state=ne}}sPIFirstChar(){const be=this.getCodeNorm();this.nameStartCheck(be)?(this.piTarget+=String.fromCodePoint(be),this.state=pe):be===et||s(be)?(this.fail("processing instruction without a target."),this.state=be===et?Z:te):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(be),this.state=pe)}sPIRest(){const{chunk:be,i:Ne}=this;for(;;){const Le=this.getCodeNorm();if(Le===E){this.piTarget+=be.slice(Ne);return}if(!this.nameCheck(Le)){this.piTarget+=be.slice(Ne,this.prevI);const Je=Le===et;Je||s(Le)?this.piTarget==="xml"?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=Je?z:q):this.state=Je?Z:te:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(Le));break}}}sPIBody(){if(this.text.length===0){const be=this.getCodeNorm();be===et?this.state=Z:s(be)||(this.text=String.fromCodePoint(be))}else this.captureToChar(et)&&(this.state=Z)}sPIEnding(){var be;const Ne=this.getCodeNorm();if(Ne===Qe){const{piTarget:Le}=this;Le.toLowerCase()==="xml"&&this.fail("the XML declaration must appear at the start of the document."),(be=this.piHandler)===null||be===void 0||be.call(this,{target:Le,body:this.text}),this.piTarget=this.text="",this.state=L}else Ne===et?this.text+="?":(this.text+=`?${String.fromCodePoint(Ne)}`,this.state=te);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const be=this.skipSpaces();if(be===et){this.state=z;return}be!==E&&(this.state=de,this.name=String.fromCodePoint(be))}sXMLDeclName(){const be=this.captureTo(er);if(be===et){this.state=z,this.name+=this.text,this.text="",this.fail("XML declaration is incomplete.");return}if(s(be)||be===bt){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`)}this.state=be===bt?oe:ke}}sXMLDeclEq(){const be=this.getCodeNorm();if(be===et){this.state=z,this.fail("XML declaration is incomplete.");return}s(be)||(be!==bt&&this.fail("value required."),this.state=oe)}sXMLDeclValueStart(){const be=this.getCodeNorm();if(be===et){this.state=z,this.fail("XML declaration is incomplete.");return}s(be)||(ht(be)?this.q=be:(this.fail("value must be quoted."),this.q=je),this.state=ie)}sXMLDeclValue(){const be=this.captureTo([this.q,et]);if(be===et){this.state=z,this.text="",this.fail("XML declaration is incomplete.");return}if(be===E)return;const Ne=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const Le=Ne;this.xmlDecl.version=Le,/^1\.[0-9]+$/.test(Le)?this.opt.forceXMLVersion||this.setXMLVersion(Le):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(Ne)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=Ne;break;case"standalone":Ne!=="yes"&&Ne!=="no"&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=Ne;break}this.name="",this.state=Q}sXMLDeclSeparator(){const be=this.getCodeNorm();if(be===et){this.state=z;return}s(be)||(this.fail("whitespace required."),this.unget()),this.state=q}sXMLDeclEnding(){var be;this.getCodeNorm()===Qe?(this.piTarget!=="xml"?this.fail("processing instructions are not allowed before root."):this.name!=="version"&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),(be=this.xmldeclHandler)===null||be===void 0||be.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=L):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var be;const Ne=this.captureNameChars();if(Ne===E)return;const Le=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=Le.ns=Object.create(null)),(be=this.openTagStartHandler)===null||be===void 0||be.call(this,Le),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),Ne){case Qe:this.openTag();break;case ct:this.state=fe;break;default:s(Ne)||this.fail("disallowed character in tag name."),this.state=we}}sOpenTagSlash(){this.getCode()===Qe?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=we)}sAttrib(){const be=this.skipSpaces();be!==E&&(n(be)?(this.unget(),this.state=U):be===Qe?this.openTag():be===ct?this.state=fe:this.fail("disallowed character in attribute name."))}sAttribName(){const be=this.captureNameChars();be===bt?this.state=Se:s(be)?this.state=ve:be===Qe?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):be!==E&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const be=this.skipSpaces();switch(be){case E:return;case bt:this.state=Se;break;default:this.fail("attribute without value."),this.text="",this.name="",be===Qe?this.openTag():n(be)?(this.unget(),this.state=U):(this.fail("disallowed character in attribute name."),this.state=we)}}sAttribValue(){const be=this.getCodeNorm();ht(be)?(this.q=be,this.state=ee):s(be)||(this.fail("unquoted attribute value."),this.state=me,this.unget())}sAttribValueQuoted(){const{q:be,chunk:Ne}=this;let{i:Le}=this;for(;;)switch(this.getCode()){case be:this.pushAttrib(this.name,this.text+Ne.slice(Le,this.prevI)),this.name=this.text="",this.q=null,this.state=se;return;case Be:this.text+=Ne.slice(Le,this.prevI),this.state=$,this.entityReturnState=ee;return;case Fe:case I:case Ce:this.text+=`${Ne.slice(Le,this.prevI)} `,Le=this.i;break;case rt:this.text+=Ne.slice(Le,this.prevI),this.fail("disallowed character.");return;case E:this.text+=Ne.slice(Le);return}}sAttribValueClosed(){const be=this.getCodeNorm();s(be)?this.state=we:be===Qe?this.openTag():be===ct?this.state=fe:n(be)?(this.fail("no whitespace between attributes."),this.unget(),this.state=U):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const be=this.captureTo(Kt);switch(be){case Be:this.state=$,this.entityReturnState=me;break;case rt:this.fail("disallowed character.");break;case E:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",be===Qe?this.openTag():this.state=we}}sCloseTag(){const be=this.captureNameChars();be===Qe?this.closeTag():s(be)?this.state=Ie:be!==E&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case Qe:this.closeTag();break;case E:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:be,forbiddenState:Ne}=this;const{chunk:Le,textHandler:Je}=this;e:for(;;)switch(this.getCode()){case rt:{if(this.state=R,Je!==void 0){const{text:at}=this,Mt=Le.slice(be,this.prevI);at.length!==0?(Je(at+Mt),this.text=""):Mt.length!==0&&Je(Mt)}Ne=$t;break e}case Be:this.state=$,this.entityReturnState=L,Je!==void 0&&(this.text+=Le.slice(be,this.prevI)),Ne=$t;break e;case ft:switch(Ne){case $t:Ne=Qt;break;case Qt:Ne=mt;break;case mt:break;default:throw new Error("impossible state")}break;case Qe:Ne===mt&&this.fail('the string "]]>" is disallowed in char data.'),Ne=$t;break;case I:Je!==void 0&&(this.text+=`${Le.slice(be,this.prevI)} +`),be=this.i,Ne=$t;break;case E:Je!==void 0&&(this.text+=Le.slice(be));break e;default:Ne=$t}this.forbiddenState=Ne}handleTextOutsideRoot(){let{i:be}=this;const{chunk:Ne,textHandler:Le}=this;let Je=!1;e:for(;;){const at=this.getCode();switch(at){case rt:{if(this.state=R,Le!==void 0){const{text:Mt}=this,rr=Ne.slice(be,this.prevI);Mt.length!==0?(Le(Mt+rr),this.text=""):rr.length!==0&&Le(rr)}break e}case Be:this.state=$,this.entityReturnState=L,Le!==void 0&&(this.text+=Ne.slice(be,this.prevI)),Je=!0;break e;case I:Le!==void 0&&(this.text+=`${Ne.slice(be,this.prevI)} +`),be=this.i;break;case E:Le!==void 0&&(this.text+=Ne.slice(be));break e;default:s(at)||(Je=!0)}}Je&&(!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(be,Ne){var Le;const{prefix:Je,local:at}=this.qname(be),Mt={name:be,prefix:Je,local:at,value:Ne};if(this.attribList.push(Mt),(Le=this.attributeHandler)===null||Le===void 0||Le.call(this,Mt),Je==="xmlns"){const rr=Ne.trim();this.currentXMLVersion==="1.0"&&rr===""&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[at]=rr,pt(this,at,rr)}else if(be==="xmlns"){const rr=Ne.trim();this.topNS[""]=rr,pt(this,"",rr)}}pushAttribPlain(be,Ne){var Le;const Je={name:be,value:Ne};this.attribList.push(Je),(Le=this.attributeHandler)===null||Le===void 0||Le.call(this,Je)}end(){var be,Ne;this.sawRoot||this.fail("document must contain a root element.");const{tags:Le}=this;for(;Le.length>0;){const at=Le.pop();this.fail(`unclosed tag: ${at.name}`)}this.state!==F&&this.state!==L&&this.fail("unexpected end.");const{text:Je}=this;return Je.length!==0&&((be=this.textHandler)===null||be===void 0||be.call(this,Je),this.text=""),this._closed=!0,(Ne=this.endHandler)===null||Ne===void 0||Ne.call(this),this._init(),this}resolve(be){var Ne,Le;let Je=this.topNS[be];if(Je!==void 0)return Je;const{tags:at}=this;for(let Mt=at.length-1;Mt>=0;Mt--)if(Je=at[Mt].ns[be],Je!==void 0)return Je;return Je=this.ns[be],Je!==void 0?Je:(Le=(Ne=this.opt).resolvePrefix)===null||Le===void 0?void 0:Le.call(Ne,be)}qname(be){const Ne=be.indexOf(":");if(Ne===-1)return{prefix:"",local:be};const Le=be.slice(Ne+1),Je=be.slice(0,Ne);return(Je===""||Le===""||Le.includes(":"))&&this.fail(`malformed name: ${be}.`),{prefix:Je,local:Le}}processAttribsNS(){var be;const{attribList:Ne}=this,Le=this.tag;{const{prefix:Mt,local:rr}=this.qname(Le.name);Le.prefix=Mt,Le.local=rr;const vr=Le.uri=(be=this.resolve(Mt))!==null&&be!==void 0?be:"";Mt!==""&&(Mt==="xmlns"&&this.fail('tags may not have "xmlns" as prefix.'),vr===""&&(this.fail(`unbound namespace prefix: ${JSON.stringify(Mt)}.`),Le.uri=Mt))}if(Ne.length===0)return;const{attributes:Je}=Le,at=new Set;for(const Mt of Ne){const{name:rr,prefix:vr,local:Dr}=Mt;let yr,lr;vr===""?(yr=rr==="xmlns"?w:"",lr=rr):(yr=this.resolve(vr),yr===void 0&&(this.fail(`unbound namespace prefix: ${JSON.stringify(vr)}.`),yr=vr),lr=`{${yr}}${Dr}`),at.has(lr)&&this.fail(`duplicate attribute: ${lr}.`),at.add(lr),Mt.uri=yr,Je[rr]=Mt}this.attribList=[]}processAttribsPlain(){const{attribList:be}=this,Ne=this.tag.attributes;for(const{name:Le,value:Je}of be)Ne[Le]!==void 0&&this.fail(`duplicate attribute: ${Le}.`),Ne[Le]=Je;this.attribList=[]}openTag(){var be;this.processAttribs();const{tags:Ne}=this,Le=this.tag;Le.isSelfClosing=!1,(be=this.openTagHandler)===null||be===void 0||be.call(this,Le),Ne.push(Le),this.state=L,this.name=""}openSelfClosingTag(){var be,Ne,Le;this.processAttribs();const{tags:Je}=this,at=this.tag;at.isSelfClosing=!0,(be=this.openTagHandler)===null||be===void 0||be.call(this,at),(Ne=this.closeTagHandler)===null||Ne===void 0||Ne.call(this,at),(this.tag=(Le=Je[Je.length-1])!==null&&Le!==void 0?Le:null)===null&&(this.closedRoot=!0),this.state=L,this.name=""}closeTag(){const{tags:be,name:Ne}=this;if(this.state=L,this.name="",Ne===""){this.fail("weird empty close tag."),this.text+="";return}const Le=this.closeTagHandler;let Je=be.length;for(;Je-- >0;){const at=this.tag=be.pop();if(this.topNS=at.ns,Le==null||Le(at),at.name===Ne)break;this.fail("unexpected close tag.")}Je===0?this.closedRoot=!0:Je<0&&(this.fail(`unmatched closing tag: ${Ne}.`),this.text+=``)}parseEntity(be){if(be[0]!=="#"){const Le=this.ENTITIES[be];return Le!==void 0?Le:(this.fail(this.isName(be)?"undefined entity.":"disallowed character in entity name."),`&${be};`)}let Ne=NaN;return be[1]==="x"&&/^#x[0-9a-f]+$/i.test(be)?Ne=parseInt(be.slice(2),16):/^#[0-9]+$/.test(be)&&(Ne=parseInt(be.slice(1),10)),this.isChar(Ne)?String.fromCodePoint(Ne):(this.fail("malformed character entity."),`&${be};`)}}m.SaxesParser=St},{"xmlchars/xml/1.0/ed5":543,"xmlchars/xml/1.1/ed2":544,"xmlchars/xmlns/1.0/ed3":545}],497:[function(e,d,m){var f=e("safe-buffer").Buffer;function c(u,s){this._block=f.alloc(u),this._finalSize=s,this._blockSize=u,this._len=0}c.prototype.update=function(u,s){typeof u=="string"&&(s=s||"utf8",u=f.from(u,s));for(var t=this._block,n=this._blockSize,r=u.length,i=this._len,o=0;o=this._finalSize&&(this._update(this._block),this._block.fill(0));var t=this._len*8;if(t<=4294967295)this._block.writeUInt32BE(t,this._blockSize-4);else{var n=(t&4294967295)>>>0,r=(t-n)/4294967296;this._block.writeUInt32BE(r,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var i=this._hash();return u?i.toString(u):i},c.prototype._update=function(){throw new Error("_update must be implemented by subclass")},d.exports=c},{"safe-buffer":494}],498:[function(e,d,m){var f=d.exports=function(u){u=u.toLowerCase();var s=f[u];if(!s)throw new Error(u+" is not supported (we accept pull requests)");return new s};f.sha=e("./sha"),f.sha1=e("./sha1"),f.sha224=e("./sha224"),f.sha256=e("./sha256"),f.sha384=e("./sha384"),f.sha512=e("./sha512")},{"./sha":499,"./sha1":500,"./sha224":501,"./sha256":502,"./sha384":503,"./sha512":504}],499:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1518500249,1859775393,-1894007588,-899497514],t=new Array(80);function n(){this.init(),this._w=t,c.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function r(l){return l<<5|l>>>27}function i(l){return l<<30|l>>>2}function o(l,a,g,v){return l===0?a&g|~a&v:l===2?a&g|a&v|g&v:a^g^v}n.prototype._update=function(l){for(var a=this._w,g=this._a|0,v=this._b|0,h=this._c|0,w=this._d|0,y=this._e|0,S=0;S<16;++S)a[S]=l.readInt32BE(S*4);for(;S<80;++S)a[S]=a[S-3]^a[S-8]^a[S-14]^a[S-16];for(var E=0;E<80;++E){var I=~~(E/20),F=r(g)+o(I,v,h,w)+y+a[E]+s[I]|0;y=w,w=h,h=i(v),v=g,g=F}this._a=g+this._a|0,this._b=v+this._b|0,this._c=h+this._c|0,this._d=w+this._d|0,this._e=y+this._e|0},n.prototype._hash=function(){var l=u.allocUnsafe(20);return l.writeInt32BE(this._a|0,0),l.writeInt32BE(this._b|0,4),l.writeInt32BE(this._c|0,8),l.writeInt32BE(this._d|0,12),l.writeInt32BE(this._e|0,16),l},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],500:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1518500249,1859775393,-1894007588,-899497514],t=new Array(80);function n(){this.init(),this._w=t,c.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function r(a){return a<<1|a>>>31}function i(a){return a<<5|a>>>27}function o(a){return a<<30|a>>>2}function l(a,g,v,h){return a===0?g&v|~g&h:a===2?g&v|g&h|v&h:g^v^h}n.prototype._update=function(a){for(var g=this._w,v=this._a|0,h=this._b|0,w=this._c|0,y=this._d|0,S=this._e|0,E=0;E<16;++E)g[E]=a.readInt32BE(E*4);for(;E<80;++E)g[E]=r(g[E-3]^g[E-8]^g[E-14]^g[E-16]);for(var I=0;I<80;++I){var F=~~(I/20),B=i(v)+l(F,h,w,y)+S+g[I]+s[F]|0;S=y,y=w,w=o(h),h=v,v=B}this._a=v+this._a|0,this._b=h+this._b|0,this._c=w+this._c|0,this._d=y+this._d|0,this._e=S+this._e|0},n.prototype._hash=function(){var a=u.allocUnsafe(20);return a.writeInt32BE(this._a|0,0),a.writeInt32BE(this._b|0,4),a.writeInt32BE(this._c|0,8),a.writeInt32BE(this._d|0,12),a.writeInt32BE(this._e|0,16),a},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],501:[function(e,d,m){var f=e("inherits"),c=e("./sha256"),u=e("./hash"),s=e("safe-buffer").Buffer,t=new Array(64);function n(){this.init(),this._w=t,u.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},n.prototype._hash=function(){var r=s.allocUnsafe(28);return r.writeInt32BE(this._a,0),r.writeInt32BE(this._b,4),r.writeInt32BE(this._c,8),r.writeInt32BE(this._d,12),r.writeInt32BE(this._e,16),r.writeInt32BE(this._f,20),r.writeInt32BE(this._g,24),r},d.exports=n},{"./hash":497,"./sha256":502,inherits:440,"safe-buffer":494}],502:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],t=new Array(64);function n(){this.init(),this._w=t,c.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this};function r(v,h,w){return w^v&(h^w)}function i(v,h,w){return v&h|w&(v|h)}function o(v){return(v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10)}function l(v){return(v>>>6|v<<26)^(v>>>11|v<<21)^(v>>>25|v<<7)}function a(v){return(v>>>7|v<<25)^(v>>>18|v<<14)^v>>>3}function g(v){return(v>>>17|v<<15)^(v>>>19|v<<13)^v>>>10}n.prototype._update=function(v){for(var h=this._w,w=this._a|0,y=this._b|0,S=this._c|0,E=this._d|0,I=this._e|0,F=this._f|0,B=this._g|0,j=this._h|0,X=0;X<16;++X)h[X]=v.readInt32BE(X*4);for(;X<64;++X)h[X]=g(h[X-2])+h[X-7]+a(h[X-15])+h[X-16]|0;for(var G=0;G<64;++G){var V=j+l(I)+r(I,F,B)+s[G]+h[G]|0,J=o(w)+i(w,y,S)|0;j=B,B=F,F=I,I=E+V|0,E=S,S=y,y=w,w=V+J|0}this._a=w+this._a|0,this._b=y+this._b|0,this._c=S+this._c|0,this._d=E+this._d|0,this._e=I+this._e|0,this._f=F+this._f|0,this._g=B+this._g|0,this._h=j+this._h|0},n.prototype._hash=function(){var v=u.allocUnsafe(32);return v.writeInt32BE(this._a,0),v.writeInt32BE(this._b,4),v.writeInt32BE(this._c,8),v.writeInt32BE(this._d,12),v.writeInt32BE(this._e,16),v.writeInt32BE(this._f,20),v.writeInt32BE(this._g,24),v.writeInt32BE(this._h,28),v},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],503:[function(e,d,m){var f=e("inherits"),c=e("./sha512"),u=e("./hash"),s=e("safe-buffer").Buffer,t=new Array(160);function n(){this.init(),this._w=t,u.call(this,128,112)}f(n,c),n.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},n.prototype._hash=function(){var r=s.allocUnsafe(48);function i(o,l,a){r.writeInt32BE(o,a),r.writeInt32BE(l,a+4)}return i(this._ah,this._al,0),i(this._bh,this._bl,8),i(this._ch,this._cl,16),i(this._dh,this._dl,24),i(this._eh,this._el,32),i(this._fh,this._fl,40),r},d.exports=n},{"./hash":497,"./sha512":504,inherits:440,"safe-buffer":494}],504:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],t=new Array(160);function n(){this.init(),this._w=t,c.call(this,128,112)}f(n,c),n.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this};function r(y,S,E){return E^y&(S^E)}function i(y,S,E){return y&S|E&(y|S)}function o(y,S){return(y>>>28|S<<4)^(S>>>2|y<<30)^(S>>>7|y<<25)}function l(y,S){return(y>>>14|S<<18)^(y>>>18|S<<14)^(S>>>9|y<<23)}function a(y,S){return(y>>>1|S<<31)^(y>>>8|S<<24)^y>>>7}function g(y,S){return(y>>>1|S<<31)^(y>>>8|S<<24)^(y>>>7|S<<25)}function v(y,S){return(y>>>19|S<<13)^(S>>>29|y<<3)^y>>>6}function h(y,S){return(y>>>19|S<<13)^(S>>>29|y<<3)^(y>>>6|S<<26)}function w(y,S){return y>>>0>>0?1:0}n.prototype._update=function(y){for(var S=this._w,E=this._ah|0,I=this._bh|0,F=this._ch|0,B=this._dh|0,j=this._eh|0,X=this._fh|0,G=this._gh|0,V=this._hh|0,J=this._al|0,H=this._bl|0,M=this._cl|0,T=this._dl|0,_=this._el|0,A=this._fl|0,P=this._gl|0,L=this._hl|0,$=0;$<32;$+=2)S[$]=y.readInt32BE($*4),S[$+1]=y.readInt32BE($*4+4);for(;$<160;$+=2){var R=S[$-30],k=S[$-15*2+1],C=a(R,k),O=g(k,R);R=S[$-2*2],k=S[$-2*2+1];var W=v(R,k),ne=h(k,R),he=S[$-7*2],ue=S[$-7*2+1],Ae=S[$-16*2],pe=S[$-16*2+1],te=O+ue|0,Z=C+he+w(te,O)|0;te=te+ne|0,Z=Z+W+w(te,ne)|0,te=te+pe|0,Z=Z+Ae+w(te,pe)|0,S[$]=Z,S[$+1]=te}for(var q=0;q<160;q+=2){Z=S[q],te=S[q+1];var de=i(E,I,F),ke=i(J,H,M),oe=o(E,J),ie=o(J,E),Q=l(j,_),z=l(_,j),Y=s[q],fe=s[q+1],we=r(j,X,G),U=r(_,A,P),ve=L+z|0,Se=V+Q+w(ve,L)|0;ve=ve+U|0,Se=Se+we+w(ve,U)|0,ve=ve+fe|0,Se=Se+Y+w(ve,fe)|0,ve=ve+te|0,Se=Se+Z+w(ve,te)|0;var ee=ie+ke|0,se=oe+de+w(ee,ie)|0;V=G,L=P,G=X,P=A,X=j,A=_,_=T+ve|0,j=B+Se+w(_,T)|0,B=F,T=M,F=I,M=H,I=E,H=J,J=ve+ee|0,E=Se+se+w(J,ve)|0}this._al=this._al+J|0,this._bl=this._bl+H|0,this._cl=this._cl+M|0,this._dl=this._dl+T|0,this._el=this._el+_|0,this._fl=this._fl+A|0,this._gl=this._gl+P|0,this._hl=this._hl+L|0,this._ah=this._ah+E+w(this._al,J)|0,this._bh=this._bh+I+w(this._bl,H)|0,this._ch=this._ch+F+w(this._cl,M)|0,this._dh=this._dh+B+w(this._dl,T)|0,this._eh=this._eh+j+w(this._el,_)|0,this._fh=this._fh+X+w(this._fl,A)|0,this._gh=this._gh+G+w(this._gl,P)|0,this._hh=this._hh+V+w(this._hl,L)|0},n.prototype._hash=function(){var y=u.allocUnsafe(64);function S(E,I,F){y.writeInt32BE(E,F),y.writeInt32BE(I,F+4)}return S(this._ah,this._al,0),S(this._bh,this._bl,8),S(this._ch,this._cl,16),S(this._dh,this._dl,24),S(this._eh,this._el,32),S(this._fh,this._fl,40),S(this._gh,this._gl,48),S(this._hh,this._hl,56),y},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],505:[function(e,d,m){d.exports=u;var f=e("events").EventEmitter,c=e("inherits");c(u,f),u.Readable=e("readable-stream/readable.js"),u.Writable=e("readable-stream/writable.js"),u.Duplex=e("readable-stream/duplex.js"),u.Transform=e("readable-stream/transform.js"),u.PassThrough=e("readable-stream/passthrough.js"),u.Stream=u;function u(){f.call(this)}u.prototype.pipe=function(s,t){var n=this;function r(h){s.writable&&s.write(h)===!1&&n.pause&&n.pause()}n.on("data",r);function i(){n.readable&&n.resume&&n.resume()}s.on("drain",i),!s._isStdio&&(!t||t.end!==!1)&&(n.on("end",l),n.on("close",a));var o=!1;function l(){o||(o=!0,s.end())}function a(){o||(o=!0,typeof s.destroy=="function"&&s.destroy())}function g(h){if(v(),f.listenerCount(this,"error")===0)throw h}n.on("error",g),s.on("error",g);function v(){n.removeListener("data",r),s.removeListener("drain",i),n.removeListener("end",l),n.removeListener("close",a),n.removeListener("error",g),s.removeListener("error",g),n.removeListener("end",v),n.removeListener("close",v),s.removeListener("close",v)}return n.on("end",v),n.on("close",v),s.on("close",v),s.emit("pipe",n),s}},{events:422,inherits:440,"readable-stream/duplex.js":507,"readable-stream/passthrough.js":516,"readable-stream/readable.js":517,"readable-stream/transform.js":518,"readable-stream/writable.js":519}],506:[function(e,d,m){var f={}.toString;d.exports=Array.isArray||function(c){return f.call(c)=="[object Array]"}},{}],507:[function(e,d,m){d.exports=e("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":508}],508:[function(e,d,m){var f=e("process-nextick-args"),c=Object.keys||function(g){var v=[];for(var h in g)v.push(h);return v};d.exports=o;var u=Object.create(e("core-util-is"));u.inherits=e("inherits");var s=e("./_stream_readable"),t=e("./_stream_writable");u.inherits(o,s);for(var n=c(t.prototype),r=0;r0?(typeof q!="string"&&!ie.objectMode&&Object.getPrototypeOf(q)!==i.prototype&&(q=l(q)),ke?ie.endEmitted?Z.emit("error",new Error("stream.unshift() after end event")):X(Z,ie,q,!0):ie.ended?Z.emit("error",new Error("stream.push() after EOF")):(ie.reading=!1,ie.decoder&&!de?(q=ie.decoder.write(q),ie.objectMode||q.length!==0?X(Z,ie,q,!1):P(Z,ie)):X(Z,ie,q,!1))):ke||(ie.reading=!1)}return V(ie)}function X(Z,q,de,ke){q.flowing&&q.length===0&&!q.sync?(Z.emit("data",de),Z.read(0)):(q.length+=q.objectMode?1:de.length,ke?q.buffer.unshift(de):q.buffer.push(de),q.needReadable&&_(Z)),P(Z,q)}function G(Z,q){var de;return!a(q)&&typeof q!="string"&&q!==void 0&&!Z.objectMode&&(de=new TypeError("Invalid non-string/buffer chunk")),de}function V(Z){return!Z.ended&&(Z.needReadable||Z.length=J?Z=J:(Z--,Z|=Z>>>1,Z|=Z>>>2,Z|=Z>>>4,Z|=Z>>>8,Z|=Z>>>16,Z++),Z}function M(Z,q){return Z<=0||q.length===0&&q.ended?0:q.objectMode?1:Z!==Z?q.flowing&&q.length?q.buffer.head.data.length:q.length:(Z>q.highWaterMark&&(q.highWaterMark=H(Z)),Z<=q.length?Z:q.ended?q.length:(q.needReadable=!0,0))}B.prototype.read=function(Z){h("read",Z),Z=parseInt(Z,10);var q=this._readableState,de=Z;if(Z!==0&&(q.emittedReadable=!1),Z===0&&q.needReadable&&(q.length>=q.highWaterMark||q.ended))return h("read: emitReadable",q.length,q.ended),q.length===0&&q.ended?Ae(this):_(this),null;if(Z=M(Z,q),Z===0&&q.ended)return q.length===0&&Ae(this),null;var ke=q.needReadable;h("need readable",ke),(q.length===0||q.length-Z0?oe=W(Z,q):oe=null,oe===null?(q.needReadable=!0,Z=0):q.length-=Z,q.length===0&&(q.ended||(q.needReadable=!0),de!==Z&&q.ended&&Ae(this)),oe!==null&&this.emit("data",oe),oe};function T(Z,q){if(!q.ended){if(q.decoder){var de=q.decoder.end();de&&de.length&&(q.buffer.push(de),q.length+=q.objectMode?1:de.length)}q.ended=!0,_(Z)}}function _(Z){var q=Z._readableState;q.needReadable=!1,q.emittedReadable||(h("emitReadable",q.flowing),q.emittedReadable=!0,q.sync?u.nextTick(A,Z):A(Z))}function A(Z){h("emit readable"),Z.emit("readable"),O(Z)}function P(Z,q){q.readingMore||(q.readingMore=!0,u.nextTick(L,Z,q))}function L(Z,q){for(var de=q.length;!q.reading&&!q.flowing&&!q.ended&&q.length1&&te(ke.pipes,Z)!==-1)&&!fe&&(h("false write response, pause",ke.awaitDrain),ke.awaitDrain++,U=!0),de.pause())}function Se(Ee){h("onerror",Ee),me(),Z.removeListener("error",Se),n(Z,"error")===0&&Z.emit("error",Ee)}I(Z,"error",Se);function ee(){Z.removeListener("finish",se),me()}Z.once("close",ee);function se(){h("onfinish"),Z.removeListener("close",ee),me()}Z.once("finish",se);function me(){h("unpipe"),de.unpipe(Z)}return Z.emit("pipe",de),ke.flowing||(h("pipe resume"),de.resume()),Z};function $(Z){return function(){var q=Z._readableState;h("pipeOnDrain",q.awaitDrain),q.awaitDrain&&q.awaitDrain--,q.awaitDrain===0&&n(Z,"data")&&(q.flowing=!0,O(Z))}}B.prototype.unpipe=function(Z){var q=this._readableState,de={hasUnpiped:!1};if(q.pipesCount===0)return this;if(q.pipesCount===1)return Z&&Z!==q.pipes?this:(Z||(Z=q.pipes),q.pipes=null,q.pipesCount=0,q.flowing=!1,Z&&Z.emit("unpipe",this,de),this);if(!Z){var ke=q.pipes,oe=q.pipesCount;q.pipes=null,q.pipesCount=0,q.flowing=!1;for(var ie=0;ie=q.length?(q.decoder?de=q.buffer.join(""):q.buffer.length===1?de=q.buffer.head.data:de=q.buffer.concat(q.length),q.buffer.clear()):de=ne(Z,q.buffer,q.decoder),de}function ne(Z,q,de){var ke;return Zie.length?ie.length:Z;if(Q===ie.length?oe+=ie:oe+=ie.slice(0,Z),Z-=Q,Z===0){Q===ie.length?(++ke,de.next?q.head=de.next:q.head=q.tail=null):(q.head=de,de.data=ie.slice(Q));break}++ke}return q.length-=ke,oe}function ue(Z,q){var de=i.allocUnsafe(Z),ke=q.head,oe=1;for(ke.data.copy(de),Z-=ke.data.length;ke=ke.next;){var ie=ke.data,Q=Z>ie.length?ie.length:Z;if(ie.copy(de,de.length-Z,0,Q),Z-=Q,Z===0){Q===ie.length?(++oe,ke.next?q.head=ke.next:q.head=q.tail=null):(q.head=ke,ke.data=ie.slice(Q));break}++oe}return q.length-=oe,de}function Ae(Z){var q=Z._readableState;if(q.length>0)throw new Error('"endReadable()" called on non-empty stream');q.endEmitted||(q.ended=!0,u.nextTick(pe,q,Z))}function pe(Z,q){!Z.endEmitted&&Z.length===0&&(Z.endEmitted=!0,q.readable=!1,q.emit("end"))}function te(Z,q){for(var de=0,ke=Z.length;de-1?u:s.nextTick,r;I.WritableState=S;var i=Object.create(e("core-util-is"));i.inherits=e("inherits");var o={deprecate:e("util-deprecate")},l=e("./internal/streams/stream"),a=e("safe-buffer").Buffer,g=(typeof c<"u"?c:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function v(C){return a.from(C)}function h(C){return a.isBuffer(C)||C instanceof g}var w=e("./internal/streams/destroy");i.inherits(I,l);function y(){}function S(C,O){r=r||e("./_stream_duplex"),C=C||{};var W=O instanceof r;this.objectMode=!!C.objectMode,W&&(this.objectMode=this.objectMode||!!C.writableObjectMode);var ne=C.highWaterMark,he=C.writableHighWaterMark,ue=this.objectMode?16:16*1024;ne||ne===0?this.highWaterMark=ne:W&&(he||he===0)?this.highWaterMark=he:this.highWaterMark=ue,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var Ae=C.decodeStrings===!1;this.decodeStrings=!Ae,this.defaultEncoding=C.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(pe){H(O,pe)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new t(this)}S.prototype.getBuffer=function(){for(var O=this.bufferedRequest,W=[];O;)W.push(O),O=O.next;return W},function(){try{Object.defineProperty(S.prototype,"buffer",{get:o.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}();var E;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(E=Function.prototype[Symbol.hasInstance],Object.defineProperty(I,Symbol.hasInstance,{value:function(C){return E.call(this,C)?!0:this!==I?!1:C&&C._writableState instanceof S}})):E=function(C){return C instanceof this};function I(C){if(r=r||e("./_stream_duplex"),!E.call(I,this)&&!(this instanceof r))return new I(C);this._writableState=new S(C,this),this.writable=!0,C&&(typeof C.write=="function"&&(this._write=C.write),typeof C.writev=="function"&&(this._writev=C.writev),typeof C.destroy=="function"&&(this._destroy=C.destroy),typeof C.final=="function"&&(this._final=C.final)),l.call(this)}I.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};function F(C,O){var W=new Error("write after end");C.emit("error",W),s.nextTick(O,W)}function B(C,O,W,ne){var he=!0,ue=!1;return W===null?ue=new TypeError("May not write null values to stream"):typeof W!="string"&&W!==void 0&&!O.objectMode&&(ue=new TypeError("Invalid non-string/buffer chunk")),ue&&(C.emit("error",ue),s.nextTick(ne,ue),he=!1),he}I.prototype.write=function(C,O,W){var ne=this._writableState,he=!1,ue=!ne.objectMode&&h(C);return ue&&!a.isBuffer(C)&&(C=v(C)),typeof O=="function"&&(W=O,O=null),ue?O="buffer":O||(O=ne.defaultEncoding),typeof W!="function"&&(W=y),ne.ended?F(this,W):(ue||B(this,ne,C,W))&&(ne.pendingcb++,he=X(this,ne,ue,C,O,W)),he},I.prototype.cork=function(){var C=this._writableState;C.corked++},I.prototype.uncork=function(){var C=this._writableState;C.corked&&(C.corked--,!C.writing&&!C.corked&&!C.bufferProcessing&&C.bufferedRequest&&_(this,C))},I.prototype.setDefaultEncoding=function(O){if(typeof O=="string"&&(O=O.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((O+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+O);return this._writableState.defaultEncoding=O,this};function j(C,O,W){return!C.objectMode&&C.decodeStrings!==!1&&typeof O=="string"&&(O=a.from(O,W)),O}Object.defineProperty(I.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function X(C,O,W,ne,he,ue){if(!W){var Ae=j(O,ne,he);ne!==Ae&&(W=!0,he="buffer",ne=Ae)}var pe=O.objectMode?1:ne.length;O.length+=pe;var te=O.length0?this.tail.next=i:this.head=i,this.tail=i,++this.length},t.prototype.unshift=function(r){var i={data:r,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length},t.prototype.shift=function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(r){if(this.length===0)return"";for(var i=this.head,o=""+i.data;i=i.next;)o+=r+i.data;return o},t.prototype.concat=function(r){if(this.length===0)return c.alloc(0);for(var i=c.allocUnsafe(r>>>0),o=this.head,l=0;o;)s(o.data,i,l),l+=o.data.length,o=o.next;return i},t}(),u&&u.inspect&&u.inspect.custom&&(d.exports.prototype[u.inspect.custom]=function(){var t=u.inspect({length:this.length});return this.constructor.name+" "+t})},{"safe-buffer":520,util:188}],514:[function(e,d,m){var f=e("process-nextick-args");function c(t,n){var r=this,i=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return i||o?(n?n(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,f.nextTick(s,this,t)):f.nextTick(s,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(l){!n&&l?r._writableState?r._writableState.errorEmitted||(r._writableState.errorEmitted=!0,f.nextTick(s,r,l)):f.nextTick(s,r,l):n&&n(l)}),this)}function u(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function s(t,n){t.emit("error",n)}d.exports={destroy:c,undestroy:u}},{"process-nextick-args":466}],515:[function(e,d,m){arguments[4][490][0].apply(m,arguments)},{dup:490,events:422}],516:[function(e,d,m){d.exports=e("./readable").PassThrough},{"./readable":517}],517:[function(e,d,m){m=d.exports=e("./lib/_stream_readable.js"),m.Stream=m,m.Readable=m,m.Writable=e("./lib/_stream_writable.js"),m.Duplex=e("./lib/_stream_duplex.js"),m.Transform=e("./lib/_stream_transform.js"),m.PassThrough=e("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":508,"./lib/_stream_passthrough.js":509,"./lib/_stream_readable.js":510,"./lib/_stream_transform.js":511,"./lib/_stream_writable.js":512}],518:[function(e,d,m){d.exports=e("./readable").Transform},{"./readable":517}],519:[function(e,d,m){d.exports=e("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":512}],520:[function(e,d,m){arguments[4][217][0].apply(m,arguments)},{buffer:220,dup:217}],521:[function(e,d,m){arguments[4][218][0].apply(m,arguments)},{dup:218,"safe-buffer":520}],522:[function(e,d,m){arguments[4][218][0].apply(m,arguments)},{dup:218,"safe-buffer":494}],523:[function(e,d,m){(function(f,c){(function(){var u=e("process/browser.js").nextTick,s=Function.prototype.apply,t=Array.prototype.slice,n={},r=0;m.setTimeout=function(){return new i(s.call(setTimeout,window,arguments),clearTimeout)},m.setInterval=function(){return new i(s.call(setInterval,window,arguments),clearInterval)},m.clearTimeout=m.clearInterval=function(o){o.close()};function i(o,l){this._id=o,this._clearFn=l}i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(window,this._id)},m.enroll=function(o,l){clearTimeout(o._idleTimeoutId),o._idleTimeout=l},m.unenroll=function(o){clearTimeout(o._idleTimeoutId),o._idleTimeout=-1},m._unrefActive=m.active=function(o){clearTimeout(o._idleTimeoutId);var l=o._idleTimeout;l>=0&&(o._idleTimeoutId=setTimeout(function(){o._onTimeout&&o._onTimeout()},l))},m.setImmediate=typeof f=="function"?f:function(o){var l=r++,a=arguments.length<2?!1:t.call(arguments,1);return n[l]=!0,u(function(){n[l]&&(a?o.apply(null,a):o.call(null),m.clearImmediate(l))}),l},m.clearImmediate=typeof c=="function"?c:function(o){delete n[o]}}).call(this)}).call(this,e("timers").setImmediate,e("timers").clearImmediate)},{"process/browser.js":467,timers:523}],524:[function(e,d,m){(function(f){(function(){d.exports=c;function c(s,t){if(u("noDeprecation"))return s;var n=!1;function r(){if(!n){if(u("throwDeprecation"))throw new Error(t);u("traceDeprecation")?console.trace(t):console.warn(t),n=!0}return s.apply(this,arguments)}return r}function u(s){try{if(!f.localStorage)return!1}catch{return!1}var t=f.localStorage[s];return t==null?!1:String(t).toLowerCase()==="true"}}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],525:[function(e,d,m){typeof Object.create=="function"?d.exports=function(c,u){c.super_=u,c.prototype=Object.create(u.prototype,{constructor:{value:c,enumerable:!1,writable:!0,configurable:!0}})}:d.exports=function(c,u){c.super_=u;var s=function(){};s.prototype=u.prototype,c.prototype=new s,c.prototype.constructor=c}},{}],526:[function(e,d,m){d.exports=function(c){return c&&typeof c=="object"&&typeof c.copy=="function"&&typeof c.fill=="function"&&typeof c.readUInt8=="function"}},{}],527:[function(e,d,m){(function(f,c){(function(){var u=/%[sdj%]/g;m.format=function(R){if(!B(R)){for(var k=[],C=0;C=W)return ue;switch(ue){case"%s":return String(O[C++]);case"%d":return Number(O[C++]);case"%j":try{return JSON.stringify(O[C++])}catch{return"[Circular]"}default:return ue}}),he=O[C];C=3&&(C.depth=arguments[2]),arguments.length>=4&&(C.colors=arguments[3]),S(k)?C.showHidden=k:k&&m._extend(C,k),X(C.showHidden)&&(C.showHidden=!1),X(C.depth)&&(C.depth=2),X(C.colors)&&(C.colors=!1),X(C.customInspect)&&(C.customInspect=!0),C.colors&&(C.stylize=r),l(C,R,C.depth)}m.inspect=n,n.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},n.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function r(R,k){var C=n.styles[k];return C?"\x1B["+n.colors[C][0]+"m"+R+"\x1B["+n.colors[C][1]+"m":R}function i(R,k){return R}function o(R){var k={};return R.forEach(function(C,O){k[C]=!0}),k}function l(R,k,C){if(R.customInspect&&k&&M(k.inspect)&&k.inspect!==m.inspect&&!(k.constructor&&k.constructor.prototype===k)){var O=k.inspect(C,R);return B(O)||(O=l(R,O,C)),O}var W=a(R,k);if(W)return W;var ne=Object.keys(k),he=o(ne);if(R.showHidden&&(ne=Object.getOwnPropertyNames(k)),H(k)&&(ne.indexOf("message")>=0||ne.indexOf("description")>=0))return g(k);if(ne.length===0){if(M(k)){var ue=k.name?": "+k.name:"";return R.stylize("[Function"+ue+"]","special")}if(G(k))return R.stylize(RegExp.prototype.toString.call(k),"regexp");if(J(k))return R.stylize(Date.prototype.toString.call(k),"date");if(H(k))return g(k)}var Ae="",pe=!1,te=["{","}"];if(y(k)&&(pe=!0,te=["[","]"]),M(k)){var Z=k.name?": "+k.name:"";Ae=" [Function"+Z+"]"}if(G(k)&&(Ae=" "+RegExp.prototype.toString.call(k)),J(k)&&(Ae=" "+Date.prototype.toUTCString.call(k)),H(k)&&(Ae=" "+g(k)),ne.length===0&&(!pe||k.length==0))return te[0]+Ae+te[1];if(C<0)return G(k)?R.stylize(RegExp.prototype.toString.call(k),"regexp"):R.stylize("[Object]","special");R.seen.push(k);var q;return pe?q=v(R,k,C,he,ne):q=ne.map(function(de){return h(R,k,C,he,de,pe)}),R.seen.pop(),w(q,Ae,te)}function a(R,k){if(X(k))return R.stylize("undefined","undefined");if(B(k)){var C="'"+JSON.stringify(k).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return R.stylize(C,"string")}if(F(k))return R.stylize(""+k,"number");if(S(k))return R.stylize(""+k,"boolean");if(E(k))return R.stylize("null","null")}function g(R){return"["+Error.prototype.toString.call(R)+"]"}function v(R,k,C,O,W){for(var ne=[],he=0,ue=k.length;he-1&&(ne?ue=ue.split(` +`).map(function(pe){return" "+pe}).join(` +`).substr(2):ue=` +`+ue.split(` +`).map(function(pe){return" "+pe}).join(` +`))):ue=R.stylize("[Circular]","special")),X(he)){if(ne&&W.match(/^\d+$/))return ue;he=JSON.stringify(""+W),he.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(he=he.substr(1,he.length-2),he=R.stylize(he,"name")):(he=he.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),he=R.stylize(he,"string"))}return he+": "+ue}function w(R,k,C){var O=R.reduce(function(W,ne){return ne.indexOf(` +`)>=0,W+ne.replace(/\u001b\[\d\d?m/g,"").length+1},0);return O>60?C[0]+(k===""?"":k+` + `)+" "+R.join(`, + `)+" "+C[1]:C[0]+k+" "+R.join(", ")+" "+C[1]}function y(R){return Array.isArray(R)}m.isArray=y;function S(R){return typeof R=="boolean"}m.isBoolean=S;function E(R){return R===null}m.isNull=E;function I(R){return R==null}m.isNullOrUndefined=I;function F(R){return typeof R=="number"}m.isNumber=F;function B(R){return typeof R=="string"}m.isString=B;function j(R){return typeof R=="symbol"}m.isSymbol=j;function X(R){return R===void 0}m.isUndefined=X;function G(R){return V(R)&&_(R)==="[object RegExp]"}m.isRegExp=G;function V(R){return typeof R=="object"&&R!==null}m.isObject=V;function J(R){return V(R)&&_(R)==="[object Date]"}m.isDate=J;function H(R){return V(R)&&(_(R)==="[object Error]"||R instanceof Error)}m.isError=H;function M(R){return typeof R=="function"}m.isFunction=M;function T(R){return R===null||typeof R=="boolean"||typeof R=="number"||typeof R=="string"||typeof R=="symbol"||typeof R>"u"}m.isPrimitive=T,m.isBuffer=e("./support/isBuffer");function _(R){return Object.prototype.toString.call(R)}function A(R){return R<10?"0"+R.toString(10):R.toString(10)}var P=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function L(){var R=new Date,k=[A(R.getHours()),A(R.getMinutes()),A(R.getSeconds())].join(":");return[R.getDate(),P[R.getMonth()],k].join(" ")}m.log=function(){console.log("%s - %s",L(),m.format.apply(m,arguments))},m.inherits=e("inherits"),m._extend=function(R,k){if(!k||!V(k))return R;for(var C=Object.keys(k),O=C.length;O--;)R[C[O]]=k[C[O]];return R};function $(R,k){return Object.prototype.hasOwnProperty.call(R,k)}}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{"./support/isBuffer":526,_process:467,inherits:525}],528:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),Object.defineProperty(m,"v1",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(m,"v3",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(m,"v4",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(m,"v5",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(m,"NIL",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(m,"version",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(m,"validate",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(m,"stringify",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(m,"parse",{enumerable:!0,get:function(){return o.default}});var f=l(e("./v1.js")),c=l(e("./v3.js")),u=l(e("./v4.js")),s=l(e("./v5.js")),t=l(e("./nil.js")),n=l(e("./version.js")),r=l(e("./validate.js")),i=l(e("./stringify.js")),o=l(e("./parse.js"));function l(a){return a&&a.__esModule?a:{default:a}}},{"./nil.js":530,"./parse.js":531,"./stringify.js":535,"./v1.js":536,"./v3.js":537,"./v4.js":539,"./v5.js":540,"./validate.js":541,"./version.js":542}],529:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;function f(h){if(typeof h=="string"){const w=unescape(encodeURIComponent(h));h=new Uint8Array(w.length);for(let y=0;y>5]>>>E%32&255,F=parseInt(S.charAt(I>>>4&15)+S.charAt(I&15),16);w.push(F)}return w}function u(h){return(h+64>>>9<<4)+14+1}function s(h,w){h[w>>5]|=128<>5]|=(h[S/8]&255)<>16)+(w>>16)+(y>>16)<<16|y&65535}function r(h,w){return h<>>32-w}function i(h,w,y,S,E,I){return n(r(n(n(w,h),n(S,I)),E),y)}function o(h,w,y,S,E,I,F){return i(w&y|~w&S,h,w,E,I,F)}function l(h,w,y,S,E,I,F){return i(w&S|y&~S,h,w,E,I,F)}function a(h,w,y,S,E,I,F){return i(w^y^S,h,w,E,I,F)}function g(h,w,y,S,E,I,F){return i(y^(w|~S),h,w,E,I,F)}var v=f;m.default=v},{}],530:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f="00000000-0000-0000-0000-000000000000";m.default=f},{}],531:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=c(e("./validate.js"));function c(t){return t&&t.__esModule?t:{default:t}}function u(t){if(!(0,f.default)(t))throw TypeError("Invalid UUID");let n;const r=new Uint8Array(16);return r[0]=(n=parseInt(t.slice(0,8),16))>>>24,r[1]=n>>>16&255,r[2]=n>>>8&255,r[3]=n&255,r[4]=(n=parseInt(t.slice(9,13),16))>>>8,r[5]=n&255,r[6]=(n=parseInt(t.slice(14,18),16))>>>8,r[7]=n&255,r[8]=(n=parseInt(t.slice(19,23),16))>>>8,r[9]=n&255,r[10]=(n=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=n/4294967296&255,r[12]=n>>>24&255,r[13]=n>>>16&255,r[14]=n>>>8&255,r[15]=n&255,r}var s=u;m.default=s},{"./validate.js":541}],532:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;m.default=f},{}],533:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=u;let f;const c=new Uint8Array(16);function u(){if(!f&&(f=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!f))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return f(c)}},{}],534:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;function f(t,n,r,i){switch(t){case 0:return n&r^~n&i;case 1:return n^r^i;case 2:return n&r^n&i^r&i;case 3:return n^r^i}}function c(t,n){return t<>>32-n}function u(t){const n=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const a=unescape(encodeURIComponent(t));t=[];for(let g=0;g>>0;S=y,y=w,w=c(h,30)>>>0,h=v,v=F}r[0]=r[0]+v>>>0,r[1]=r[1]+h>>>0,r[2]=r[2]+w>>>0,r[3]=r[3]+y>>>0,r[4]=r[4]+S>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}var s=u;m.default=s},{}],535:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=c(e("./validate.js"));function c(n){return n&&n.__esModule?n:{default:n}}const u=[];for(let n=0;n<256;++n)u.push((n+256).toString(16).substr(1));function s(n){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;const i=(u[n[r+0]]+u[n[r+1]]+u[n[r+2]]+u[n[r+3]]+"-"+u[n[r+4]]+u[n[r+5]]+"-"+u[n[r+6]]+u[n[r+7]]+"-"+u[n[r+8]]+u[n[r+9]]+"-"+u[n[r+10]]+u[n[r+11]]+u[n[r+12]]+u[n[r+13]]+u[n[r+14]]+u[n[r+15]]).toLowerCase();if(!(0,f.default)(i))throw TypeError("Stringified UUID is invalid");return i}var t=s;m.default=t},{"./validate.js":541}],536:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=u(e("./rng.js")),c=u(e("./stringify.js"));function u(l){return l&&l.__esModule?l:{default:l}}let s,t,n=0,r=0;function i(l,a,g){let v=a&&g||0;const h=a||new Array(16);l=l||{};let w=l.node||s,y=l.clockseq!==void 0?l.clockseq:t;if(w==null||y==null){const j=l.random||(l.rng||f.default)();w==null&&(w=s=[j[0]|1,j[1],j[2],j[3],j[4],j[5]]),y==null&&(y=t=(j[6]<<8|j[7])&16383)}let S=l.msecs!==void 0?l.msecs:Date.now(),E=l.nsecs!==void 0?l.nsecs:r+1;const I=S-n+(E-r)/1e4;if(I<0&&l.clockseq===void 0&&(y=y+1&16383),(I<0||S>n)&&l.nsecs===void 0&&(E=0),E>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");n=S,r=E,t=y,S+=122192928e5;const F=((S&268435455)*1e4+E)%4294967296;h[v++]=F>>>24&255,h[v++]=F>>>16&255,h[v++]=F>>>8&255,h[v++]=F&255;const B=S/4294967296*1e4&268435455;h[v++]=B>>>8&255,h[v++]=B&255,h[v++]=B>>>24&15|16,h[v++]=B>>>16&255,h[v++]=y>>>8|128,h[v++]=y&255;for(let j=0;j<6;++j)h[v+j]=w[j];return a||(0,c.default)(h)}var o=i;m.default=o},{"./rng.js":533,"./stringify.js":535}],537:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=u(e("./v35.js")),c=u(e("./md5.js"));function u(n){return n&&n.__esModule?n:{default:n}}var t=(0,f.default)("v3",48,c.default);m.default=t},{"./md5.js":529,"./v35.js":538}],538:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=r,m.URL=m.DNS=void 0;var f=u(e("./stringify.js")),c=u(e("./parse.js"));function u(i){return i&&i.__esModule?i:{default:i}}function s(i){i=unescape(encodeURIComponent(i));const o=[];for(let l=0;l=s&&o<=55295||o===c||o===u||o===f||o>=57344&&o<=65533||o>=65536&&o<=1114111}m.isChar=t;function n(o){return o===s||o===c||o===u||o===f}m.isS=n;function r(o){return o>=65&&o<=90||o>=97&&o<=122||o===58||o===95||o===8204||o===8205||o>=192&&o<=214||o>=216&&o<=246||o>=248&&o<=767||o>=880&&o<=893||o>=895&&o<=8191||o>=8304&&o<=8591||o>=11264&&o<=12271||o>=12289&&o<=55295||o>=63744&&o<=64975||o>=65008&&o<=65533||o>=65536&&o<=983039}m.isNameStartChar=r;function i(o){return r(o)||o>=48&&o<=57||o===45||o===46||o===183||o>=768&&o<=879||o>=8255&&o<=8256}m.isNameChar=i},{}],544:[function(e,d,m){/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */Object.defineProperty(m,"__esModule",{value:!0}),m.CHAR="-퟿-�𐀀-􏿿",m.RESTRICTED_CHAR="-\b\v\f--„†-Ÿ",m.S=` \r +`,m.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",m.NAME_CHAR="-"+m.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",m.CHAR_RE=new RegExp("^["+m.CHAR+"]$","u"),m.RESTRICTED_CHAR_RE=new RegExp("^["+m.RESTRICTED_CHAR+"]$","u"),m.S_RE=new RegExp("^["+m.S+"]+$","u"),m.NAME_START_CHAR_RE=new RegExp("^["+m.NAME_START_CHAR+"]$","u"),m.NAME_CHAR_RE=new RegExp("^["+m.NAME_CHAR+"]$","u"),m.NAME_RE=new RegExp("^["+m.NAME_START_CHAR+"]["+m.NAME_CHAR+"]*$","u"),m.NMTOKEN_RE=new RegExp("^["+m.NAME_CHAR+"]+$","u");var f=9,c=10,u=13,s=32;m.S_LIST=[s,c,u,f];function t(a){return a>=1&&a<=55295||a>=57344&&a<=65533||a>=65536&&a<=1114111}m.isChar=t;function n(a){return a>=1&&a<=8||a===11||a===12||a>=14&&a<=31||a>=127&&a<=132||a>=134&&a<=159}m.isRestrictedChar=n;function r(a){return a===9||a===10||a===13||a>31&&a<127||a===133||a>159&&a<=55295||a>=57344&&a<=65533||a>=65536&&a<=1114111}m.isCharAndNotRestricted=r;function i(a){return a===s||a===c||a===u||a===f}m.isS=i;function o(a){return a>=65&&a<=90||a>=97&&a<=122||a===58||a===95||a===8204||a===8205||a>=192&&a<=214||a>=216&&a<=246||a>=248&&a<=767||a>=880&&a<=893||a>=895&&a<=8191||a>=8304&&a<=8591||a>=11264&&a<=12271||a>=12289&&a<=55295||a>=63744&&a<=64975||a>=65008&&a<=65533||a>=65536&&a<=983039}m.isNameStartChar=o;function l(a){return o(a)||a>=48&&a<=57||a===45||a===46||a===183||a>=768&&a<=879||a>=8255&&a<=8256}m.isNameChar=l},{}],545:[function(e,d,m){/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */Object.defineProperty(m,"__esModule",{value:!0}),m.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",m.NC_NAME_CHAR="-"+m.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",m.NC_NAME_START_CHAR_RE=new RegExp("^["+m.NC_NAME_START_CHAR+"]$","u"),m.NC_NAME_CHAR_RE=new RegExp("^["+m.NC_NAME_CHAR+"]$","u"),m.NC_NAME_RE=new RegExp("^["+m.NC_NAME_START_CHAR+"]["+m.NC_NAME_CHAR+"]*$","u");function f(u){return u>=65&&u<=90||u===95||u>=97&&u<=122||u>=192&&u<=214||u>=216&&u<=246||u>=248&&u<=767||u>=880&&u<=893||u>=895&&u<=8191||u>=8204&&u<=8205||u>=8304&&u<=8591||u>=11264&&u<=12271||u>=12289&&u<=55295||u>=63744&&u<=64975||u>=65008&&u<=65533||u>=65536&&u<=983039}m.isNCNameStartChar=f;function c(u){return f(u)||u===45||u===46||u>=48&&u<=57||u===183||u>=768&&u<=879||u>=8255&&u<=8256}m.isNCNameChar=c},{}]},{},[15])(15)})})(_h);var Cv=_h.exports;function Ya(N){"@babel/helpers - typeof";return Ya=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(b){return typeof b}:function(b){return b&&typeof Symbol=="function"&&b.constructor===Symbol&&b!==Symbol.prototype?"symbol":typeof b},Ya(N)}var Tv=/^\s+/,Av=/\s+$/;function ut(N,b){if(N=N||"",b=b||{},N instanceof ut)return N;if(!(this instanceof ut))return new ut(N,b);var e=kv(N);this._originalInput=N,this._r=e.r,this._g=e.g,this._b=e.b,this._a=e.a,this._roundA=Math.round(100*this._a)/100,this._format=b.format||e.format,this._gradientType=b.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=e.ok}ut.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var b=this.toRgb();return(b.r*299+b.g*587+b.b*114)/1e3},getLuminance:function(){var b=this.toRgb(),e,d,m,f,c,u;return e=b.r/255,d=b.g/255,m=b.b/255,e<=.03928?f=e/12.92:f=Math.pow((e+.055)/1.055,2.4),d<=.03928?c=d/12.92:c=Math.pow((d+.055)/1.055,2.4),m<=.03928?u=m/12.92:u=Math.pow((m+.055)/1.055,2.4),.2126*f+.7152*c+.0722*u},setAlpha:function(b){return this._a=Sh(b),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var b=Jc(this._r,this._g,this._b);return{h:b.h*360,s:b.s,v:b.v,a:this._a}},toHsvString:function(){var b=Jc(this._r,this._g,this._b),e=Math.round(b.h*360),d=Math.round(b.s*100),m=Math.round(b.v*100);return this._a==1?"hsv("+e+", "+d+"%, "+m+"%)":"hsva("+e+", "+d+"%, "+m+"%, "+this._roundA+")"},toHsl:function(){var b=Zc(this._r,this._g,this._b);return{h:b.h*360,s:b.s,l:b.l,a:this._a}},toHslString:function(){var b=Zc(this._r,this._g,this._b),e=Math.round(b.h*360),d=Math.round(b.s*100),m=Math.round(b.l*100);return this._a==1?"hsl("+e+", "+d+"%, "+m+"%)":"hsla("+e+", "+d+"%, "+m+"%, "+this._roundA+")"},toHex:function(b){return Qc(this._r,this._g,this._b,b)},toHexString:function(b){return"#"+this.toHex(b)},toHex8:function(b){return Ov(this._r,this._g,this._b,this._a,b)},toHex8String:function(b){return"#"+this.toHex8(b)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(mr(this._r,255)*100)+"%",g:Math.round(mr(this._g,255)*100)+"%",b:Math.round(mr(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(mr(this._r,255)*100)+"%, "+Math.round(mr(this._g,255)*100)+"%, "+Math.round(mr(this._b,255)*100)+"%)":"rgba("+Math.round(mr(this._r,255)*100)+"%, "+Math.round(mr(this._g,255)*100)+"%, "+Math.round(mr(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:Xv[Qc(this._r,this._g,this._b,!0)]||!1},toFilter:function(b){var e="#"+qc(this._r,this._g,this._b,this._a),d=e,m=this._gradientType?"GradientType = 1, ":"";if(b){var f=ut(b);d="#"+qc(f._r,f._g,f._b,f._a)}return"progid:DXImageTransform.Microsoft.gradient("+m+"startColorstr="+e+",endColorstr="+d+")"},toString:function(b){var e=!!b;b=b||this._format;var d=!1,m=this._a<1&&this._a>=0,f=!e&&m&&(b==="hex"||b==="hex6"||b==="hex3"||b==="hex4"||b==="hex8"||b==="name");return f?b==="name"&&this._a===0?this.toName():this.toRgbString():(b==="rgb"&&(d=this.toRgbString()),b==="prgb"&&(d=this.toPercentageRgbString()),(b==="hex"||b==="hex6")&&(d=this.toHexString()),b==="hex3"&&(d=this.toHexString(!0)),b==="hex4"&&(d=this.toHex8String(!0)),b==="hex8"&&(d=this.toHex8String()),b==="name"&&(d=this.toName()),b==="hsl"&&(d=this.toHslString()),b==="hsv"&&(d=this.toHsvString()),d||this.toHexString())},clone:function(){return ut(this.toString())},_applyModification:function(b,e){var d=b.apply(null,[this].concat([].slice.call(e)));return this._r=d._r,this._g=d._g,this._b=d._b,this.setAlpha(d._a),this},lighten:function(){return this._applyModification(Dv,arguments)},brighten:function(){return this._applyModification(Bv,arguments)},darken:function(){return this._applyModification(Lv,arguments)},desaturate:function(){return this._applyModification(Fv,arguments)},saturate:function(){return this._applyModification(Pv,arguments)},greyscale:function(){return this._applyModification(Nv,arguments)},spin:function(){return this._applyModification(jv,arguments)},_applyCombination:function(b,e){return b.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(zv,arguments)},complement:function(){return this._applyCombination($v,arguments)},monochromatic:function(){return this._applyCombination(Uv,arguments)},splitcomplement:function(){return this._applyCombination(Hv,arguments)},triad:function(){return this._applyCombination(eh,[3])},tetrad:function(){return this._applyCombination(eh,[4])}};ut.fromRatio=function(N,b){if(Ya(N)=="object"){var e={};for(var d in N)N.hasOwnProperty(d)&&(d==="a"?e[d]=N[d]:e[d]=Xs(N[d]));N=e}return ut(N,b)};function kv(N){var b={r:0,g:0,b:0},e=1,d=null,m=null,f=null,c=!1,u=!1;return typeof N=="string"&&(N=Gv(N)),Ya(N)=="object"&&(si(N.r)&&si(N.g)&&si(N.b)?(b=Mv(N.r,N.g,N.b),c=!0,u=String(N.r).substr(-1)==="%"?"prgb":"rgb"):si(N.h)&&si(N.s)&&si(N.v)?(d=Xs(N.s),m=Xs(N.v),b=Iv(N.h,d,m),c=!0,u="hsv"):si(N.h)&&si(N.s)&&si(N.l)&&(d=Xs(N.s),f=Xs(N.l),b=Rv(N.h,d,f),c=!0,u="hsl"),N.hasOwnProperty("a")&&(e=N.a)),e=Sh(e),{ok:c,format:N.format||u,r:Math.min(255,Math.max(b.r,0)),g:Math.min(255,Math.max(b.g,0)),b:Math.min(255,Math.max(b.b,0)),a:e}}function Mv(N,b,e){return{r:mr(N,255)*255,g:mr(b,255)*255,b:mr(e,255)*255}}function Zc(N,b,e){N=mr(N,255),b=mr(b,255),e=mr(e,255);var d=Math.max(N,b,e),m=Math.min(N,b,e),f,c,u=(d+m)/2;if(d==m)f=c=0;else{var s=d-m;switch(c=u>.5?s/(2-d-m):s/(d+m),d){case N:f=(b-e)/s+(b1&&(r-=1),r<1/6?t+(n-t)*6*r:r<1/2?n:r<2/3?t+(n-t)*(2/3-r)*6:t}if(b===0)d=m=f=e;else{var u=e<.5?e*(1+b):e+b-e*b,s=2*e-u;d=c(s,u,N+1/3),m=c(s,u,N),f=c(s,u,N-1/3)}return{r:d*255,g:m*255,b:f*255}}function Jc(N,b,e){N=mr(N,255),b=mr(b,255),e=mr(e,255);var d=Math.max(N,b,e),m=Math.min(N,b,e),f,c,u=d,s=d-m;if(c=d===0?0:s/d,d==m)f=0;else{switch(d){case N:f=(b-e)/s+(b>1)+720)%360;--b;)d.h=(d.h+m)%360,f.push(ut(d));return f}function Uv(N,b){b=b||6;for(var e=ut(N).toHsv(),d=e.h,m=e.s,f=e.v,c=[],u=1/b;b--;)c.push(ut({h:d,s:m,v:f})),f=(f+u)%1;return c}ut.mix=function(N,b,e){e=e===0?0:e||50;var d=ut(N).toRgb(),m=ut(b).toRgb(),f=e/100,c={r:(m.r-d.r)*f+d.r,g:(m.g-d.g)*f+d.g,b:(m.b-d.b)*f+d.b,a:(m.a-d.a)*f+d.a};return ut(c)};ut.readability=function(N,b){var e=ut(N),d=ut(b);return(Math.max(e.getLuminance(),d.getLuminance())+.05)/(Math.min(e.getLuminance(),d.getLuminance())+.05)};ut.isReadable=function(N,b,e){var d=ut.readability(N,b),m,f;switch(f=!1,m=Yv(e),m.level+m.size){case"AAsmall":case"AAAlarge":f=d>=4.5;break;case"AAlarge":f=d>=3;break;case"AAAsmall":f=d>=7;break}return f};ut.mostReadable=function(N,b,e){var d=null,m=0,f,c,u,s;e=e||{},c=e.includeFallbackColors,u=e.level,s=e.size;for(var t=0;tm&&(m=f,d=ut(b[t]));return ut.isReadable(N,d,{level:u,size:s})||!c?d:(e.includeFallbackColors=!1,ut.mostReadable(N,["#fff","#000"],e))};var bf=ut.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},Xv=ut.hexNames=Wv(bf);function Wv(N){var b={};for(var e in N)N.hasOwnProperty(e)&&(b[N[e]]=e);return b}function Sh(N){return N=parseFloat(N),(isNaN(N)||N<0||N>1)&&(N=1),N}function mr(N,b){Vv(N)&&(N="100%");var e=Kv(N);return N=Math.min(b,Math.max(0,parseFloat(N))),e&&(N=parseInt(N*b,10)/100),Math.abs(N-b)<1e-6?1:N%b/parseFloat(b)}function Qa(N){return Math.min(1,Math.max(0,N))}function pn(N){return parseInt(N,16)}function Vv(N){return typeof N=="string"&&N.indexOf(".")!=-1&&parseFloat(N)===1}function Kv(N){return typeof N=="string"&&N.indexOf("%")!=-1}function Dn(N){return N.length==1?"0"+N:""+N}function Xs(N){return N<=1&&(N=N*100+"%"),N}function Eh(N){return Math.round(parseFloat(N)*255).toString(16)}function th(N){return pn(N)/255}var Nn=function(){var N="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",e="(?:"+b+")|(?:"+N+")",d="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?",m="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?";return{CSS_UNIT:new RegExp(e),rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+m),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+m),hsv:new RegExp("hsv"+d),hsva:new RegExp("hsva"+m),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function si(N){return!!Nn.CSS_UNIT.exec(N)}function Gv(N){N=N.replace(Tv,"").replace(Av,"").toLowerCase();var b=!1;if(bf[N])N=bf[N],b=!0;else if(N=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var e;return(e=Nn.rgb.exec(N))?{r:e[1],g:e[2],b:e[3]}:(e=Nn.rgba.exec(N))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=Nn.hsl.exec(N))?{h:e[1],s:e[2],l:e[3]}:(e=Nn.hsla.exec(N))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=Nn.hsv.exec(N))?{h:e[1],s:e[2],v:e[3]}:(e=Nn.hsva.exec(N))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=Nn.hex8.exec(N))?{r:pn(e[1]),g:pn(e[2]),b:pn(e[3]),a:th(e[4]),format:b?"name":"hex8"}:(e=Nn.hex6.exec(N))?{r:pn(e[1]),g:pn(e[2]),b:pn(e[3]),format:b?"name":"hex"}:(e=Nn.hex4.exec(N))?{r:pn(e[1]+""+e[1]),g:pn(e[2]+""+e[2]),b:pn(e[3]+""+e[3]),a:th(e[4]+""+e[4]),format:b?"name":"hex8"}:(e=Nn.hex3.exec(N))?{r:pn(e[1]+""+e[1]),g:pn(e[2]+""+e[2]),b:pn(e[3]+""+e[3]),format:b?"name":"hex"}:!1}function Yv(N){var b,e;return N=N||{level:"AA",size:"small"},b=(N.level||"AA").toUpperCase(),e=(N.size||"small").toLowerCase(),b!=="AA"&&b!=="AAA"&&(b="AA"),e!=="small"&&e!=="large"&&(e="small"),{level:b,size:e}}var Za={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */Za.exports;(function(N,b){(function(){var e,d="4.17.21",m=200,f="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",c="Expected a function",u="Invalid `variable` option passed into `_.template`",s="__lodash_hash_undefined__",t=500,n="__lodash_placeholder__",r=1,i=2,o=4,l=1,a=2,g=1,v=2,h=4,w=8,y=16,S=32,E=64,I=128,F=256,B=512,j=30,X="...",G=800,V=16,J=1,H=2,M=3,T=1/0,_=9007199254740991,A=17976931348623157e292,P=0/0,L=4294967295,$=L-1,R=L>>>1,k=[["ary",I],["bind",g],["bindKey",v],["curry",w],["curryRight",y],["flip",B],["partial",S],["partialRight",E],["rearg",F]],C="[object Arguments]",O="[object Array]",W="[object AsyncFunction]",ne="[object Boolean]",he="[object Date]",ue="[object DOMException]",Ae="[object Error]",pe="[object Function]",te="[object GeneratorFunction]",Z="[object Map]",q="[object Number]",de="[object Null]",ke="[object Object]",oe="[object Promise]",ie="[object Proxy]",Q="[object RegExp]",z="[object Set]",Y="[object String]",fe="[object Symbol]",we="[object Undefined]",U="[object WeakMap]",ve="[object WeakSet]",Se="[object ArrayBuffer]",ee="[object DataView]",se="[object Float32Array]",me="[object Float64Array]",Ee="[object Int8Array]",Ie="[object Int16Array]",Ce="[object Int32Array]",Fe="[object Uint8Array]",ze="[object Uint8ClampedArray]",je="[object Uint16Array]",ge="[object Uint32Array]",Me=/\b__p \+= '';/g,Be=/\b(__p \+=) '' \+/g,Xe=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ot=/&(?:amp|lt|gt|quot|#39);/g,ct=/[&<>"']/g,st=RegExp(ot.source),rt=RegExp(ct.source),bt=/<%-([\s\S]+?)%>/g,Qe=/<%([\s\S]+?)%>/g,et=/<%=([\s\S]+?)%>/g,_t=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ft=/^\w*$/,jt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,It=/[\\^$.*+?()[\]{}|]/g,ht=RegExp(It.source),Dt=/^\s+/,Ut=/\s/,wt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,er=/\{\n\/\* \[wrapped with (.+)\] \*/,Kt=/,? & /,pt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Gt=/[()=,{}\[\]\/\s]/,kt=/\\(\\)?/g,xt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,$t=/\w*$/,Qt=/^[-+]0x[0-9a-f]+$/i,mt=/^0b[01]+$/i,qt=/^\[object .+?Constructor\]$/,St=/^0o[0-7]+$/i,Tt=/^(?:0|[1-9]\d*)$/,be=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ne=/($^)/,Le=/['\n\r\u2028\u2029\\]/g,Je="\\ud800-\\udfff",at="\\u0300-\\u036f",Mt="\\ufe20-\\ufe2f",rr="\\u20d0-\\u20ff",vr=at+Mt+rr,Dr="\\u2700-\\u27bf",yr="a-z\\xdf-\\xf6\\xf8-\\xff",lr="\\xac\\xb1\\xd7\\xf7",rn="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",nn="\\u2000-\\u206f",ar=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Xr="A-Z\\xc0-\\xd6\\xd8-\\xde",Wr="\\ufe0e\\ufe0f",Vr=lr+rn+nn+ar,En="['’]",Vn="["+Je+"]",ji="["+Vr+"]",Kr="["+vr+"]",$i="\\d+",Kn="["+Dr+"]",_i="["+yr+"]",Si="[^"+Je+Vr+$i+Dr+yr+Xr+"]",fi="\\ud83c[\\udffb-\\udfff]",bs="(?:"+Kr+"|"+fi+")",Hi="[^"+Je+"]",Gn="(?:\\ud83c[\\udde6-\\uddff]){2}",li="[\\ud800-\\udbff][\\udc00-\\udfff]",Bn="["+Xr+"]",zi="\\u200d",Ei="(?:"+_i+"|"+Si+")",ci="(?:"+Bn+"|"+Si+")",Cn="(?:"+En+"(?:d|ll|m|re|s|t|ve))?",Ui="(?:"+En+"(?:D|LL|M|RE|S|T|VE))?",Xi=bs+"?",sn="["+Wr+"]?",vs="(?:"+zi+"(?:"+[Hi,Gn,li].join("|")+")"+sn+Xi+")*",Wi="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ys="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Vi=sn+Xi+vs,ws="(?:"+[Kn,Gn,li].join("|")+")"+Vi,mn="(?:"+[Hi+Kr+"?",Kr,Gn,li,Vn].join("|")+")",Ki=RegExp(En,"g"),xs=RegExp(Kr,"g"),an=RegExp(fi+"(?="+fi+")|"+mn+Vi,"g"),_s=RegExp([Bn+"?"+_i+"+"+Cn+"(?="+[ji,Bn,"$"].join("|")+")",ci+"+"+Ui+"(?="+[ji,Bn+Ei,"$"].join("|")+")",Bn+"?"+Ei+"+"+Cn,Bn+"+"+Ui,ys,Wi,$i,ws].join("|"),"g"),gn=RegExp("["+zi+Je+vr+Wr+"]"),bn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Gi=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Ci=-1,Zt={};Zt[se]=Zt[me]=Zt[Ee]=Zt[Ie]=Zt[Ce]=Zt[Fe]=Zt[ze]=Zt[je]=Zt[ge]=!0,Zt[C]=Zt[O]=Zt[Se]=Zt[ne]=Zt[ee]=Zt[he]=Zt[Ae]=Zt[pe]=Zt[Z]=Zt[q]=Zt[ke]=Zt[Q]=Zt[z]=Zt[Y]=Zt[U]=!1;var Yt={};Yt[C]=Yt[O]=Yt[Se]=Yt[ee]=Yt[ne]=Yt[he]=Yt[se]=Yt[me]=Yt[Ee]=Yt[Ie]=Yt[Ce]=Yt[Z]=Yt[q]=Yt[ke]=Yt[Q]=Yt[z]=Yt[Y]=Yt[fe]=Yt[Fe]=Yt[ze]=Yt[je]=Yt[ge]=!0,Yt[Ae]=Yt[pe]=Yt[U]=!1;var Yi={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Ss={"&":"&","<":"<",">":">",'"':""","'":"'"},Zi={"&":"&","<":"<",">":">",""":'"',"'":"'"},Ji={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ye=parseFloat,Re=parseInt,We=typeof Nt=="object"&&Nt&&Nt.Object===Object&&Nt,tt=typeof self=="object"&&self&&self.Object===Object&&self,Ct=We||tt||Function("return this")(),Et=b&&!b.nodeType&&b,Jt=Et&&!0&&N&&!N.nodeType&&N,nr=Jt&&Jt.exports===Et,cr=nr&&We.process,Ht=function(){try{var Oe=Jt&&Jt.require&&Jt.require("util").types;return Oe||cr&&cr.binding&&cr.binding("util")}catch{}}(),Tr=Ht&&Ht.isArrayBuffer,Ir=Ht&&Ht.isDate,pr=Ht&&Ht.isMap,Sr=Ht&&Ht.isRegExp,Ar=Ht&&Ht.isSet,on=Ht&&Ht.isTypedArray;function hr(Oe,Ue,He){switch(He.length){case 0:return Oe.call(Ue);case 1:return Oe.call(Ue,He[0]);case 2:return Oe.call(Ue,He[0],He[1]);case 3:return Oe.call(Ue,He[0],He[1],He[2])}return Oe.apply(Ue,He)}function Tn(Oe,Ue,He,it){for(var At=-1,tr=Oe==null?0:Oe.length;++At-1}function xe(Oe,Ue,He){for(var it=-1,At=Oe==null?0:Oe.length;++it-1;);return He}function If(Oe,Ue){for(var He=Oe.length;He--&&dr(Ue,Oe[He],0)>-1;);return He}function kh(Oe,Ue){for(var He=Oe.length,it=0;He--;)Oe[He]===Ue&&++it;return it}var Mh=Mn(Yi),Rh=Mn(Ss);function Ih(Oe){return"\\"+Ji[Oe]}function Oh(Oe,Ue){return Oe==null?e:Oe[Ue]}function qi(Oe){return gn.test(Oe)}function Fh(Oe){return bn.test(Oe)}function Ph(Oe){for(var Ue,He=[];!(Ue=Oe.next()).done;)He.push(Ue.value);return He}function to(Oe){var Ue=-1,He=Array(Oe.size);return Oe.forEach(function(it,At){He[++Ue]=[At,it]}),He}function Of(Oe,Ue){return function(He){return Oe(Ue(He))}}function ui(Oe,Ue){for(var He=-1,it=Oe.length,At=0,tr=[];++He-1}function xu(p,x){var D=this.__data__,K=la(D,p);return K<0?(++this.size,D.push([p,x])):D[K][1]=x,this}Zn.prototype.clear=bu,Zn.prototype.delete=vu,Zn.prototype.get=yu,Zn.prototype.has=wu,Zn.prototype.set=xu;function Jn(p){var x=-1,D=p==null?0:p.length;for(this.clear();++x=x?p:x)),p}function wn(p,x,D,K,re,ce){var _e,Te=x&r,Pe=x&i,Ve=x&o;if(D&&(_e=re?D(p,K,re,ce):D(p)),_e!==e)return _e;if(!gr(p))return p;var Ke=Rt(p);if(Ke){if(_e=Cd(p),!Te)return Yr(p,_e)}else{var Ye=Lr(p),qe=Ye==pe||Ye==te;if(vi(p))return pl(p,Te);if(Ye==ke||Ye==C||qe&&!re){if(_e=Pe||qe?{}:Fl(p),!Te)return Pe?pd(p,Bu(_e,p)):dd(p,Xf(_e,p))}else{if(!Yt[Ye])return re?p:{};_e=Td(p,Ye,Te)}}ce||(ce=new In);var lt=ce.get(p);if(lt)return lt;ce.set(p,_e),fc(p)?p.forEach(function(yt){_e.add(wn(yt,x,D,yt,p,ce))}):ac(p)&&p.forEach(function(yt,zt){_e.set(zt,wn(yt,x,D,zt,p,ce))});var vt=Ve?Pe?ko:Ao:Pe?Jr:Fr,Bt=Ke?e:vt(p);return Pr(Bt||p,function(yt,zt){Bt&&(zt=yt,yt=p[zt]),Is(_e,zt,wn(yt,x,D,zt,p,ce))}),_e}function Lu(p){var x=Fr(p);return function(D){return Wf(D,p,x)}}function Wf(p,x,D){var K=D.length;if(p==null)return!K;for(p=fr(p);K--;){var re=D[K],ce=x[re],_e=p[re];if(_e===e&&!(re in p)||!ce(_e))return!1}return!0}function Vf(p,x,D){if(typeof p!="function")throw new vn(c);return Ls(function(){p.apply(e,D)},x)}function Os(p,x,D,K){var re=-1,ce=ae,_e=!0,Te=p.length,Pe=[],Ve=x.length;if(!Te)return Pe;D&&(x=De(x,ln(D))),K?(ce=xe,_e=!1):x.length>=m&&(ce=Cs,_e=!1,x=new ki(x));e:for(;++rere?0:re+D),K=K===e||K>re?re:Pt(K),K<0&&(K+=re),K=D>K?0:cc(K);D0&&D(Te)?x>1?Nr(Te,x-1,D,K,re):Ge(re,Te):K||(re[re.length]=Te)}return re}var fo=wl(),Yf=wl(!0);function jn(p,x){return p&&fo(p,x,Fr)}function lo(p,x){return p&&Yf(p,x,Fr)}function ha(p,x){return Ln(x,function(D){return ri(p[D])})}function Ri(p,x){x=gi(x,p);for(var D=0,K=x.length;p!=null&&Dx}function Hu(p,x){return p!=null&&sr.call(p,x)}function zu(p,x){return p!=null&&x in fr(p)}function Uu(p,x,D){return p>=Br(x,D)&&p=120&&Ke.length>=120)?new ki(_e&&Ke):e}Ke=p[0];var Ye=-1,qe=Te[0];e:for(;++Ye-1;)Te!==p&&ra.call(Te,Pe,1),ra.call(p,Pe,1);return p}function al(p,x){for(var D=p?x.length:0,K=D-1;D--;){var re=x[D];if(D==K||re!==ce){var ce=re;ti(re)?ra.call(p,re,1):wo(p,re)}}return p}function bo(p,x){return p+sa($f()*(x-p+1))}function rd(p,x,D,K){for(var re=-1,ce=Rr(ia((x-p)/(D||1)),0),_e=He(ce);ce--;)_e[K?ce:++re]=p,p+=D;return _e}function vo(p,x){var D="";if(!p||x<1||x>_)return D;do x%2&&(D+=p),x=sa(x/2),x&&(p+=p);while(x);return D}function Lt(p,x){return No(Dl(p,x,Qr),p+"")}function nd(p){return Uf(cs(p))}function id(p,x){var D=cs(p);return _a(D,Mi(x,0,D.length))}function Ns(p,x,D,K){if(!gr(p))return p;x=gi(x,p);for(var re=-1,ce=x.length,_e=ce-1,Te=p;Te!=null&&++rere?0:re+x),D=D>re?re:D,D<0&&(D+=re),re=x>D?0:D-x>>>0,x>>>=0;for(var ce=He(re);++K>>1,_e=p[ce];_e!==null&&!hn(_e)&&(D?_e<=x:_e=m){var Ve=x?null:vd(p);if(Ve)return Gs(Ve);_e=!1,re=Cs,Pe=new ki}else Pe=x?[]:Te;e:for(;++K=K?p:xn(p,x,D)}var dl=Yh||function(p){return Ct.clearTimeout(p)};function pl(p,x){if(x)return p.slice();var D=p.length,K=Nf?Nf(D):new p.constructor(D);return p.copy(K),K}function Eo(p){var x=new p.constructor(p.byteLength);return new ea(x).set(new ea(p)),x}function ld(p,x){var D=x?Eo(p.buffer):p.buffer;return new p.constructor(D,p.byteOffset,p.byteLength)}function cd(p){var x=new p.constructor(p.source,$t.exec(p));return x.lastIndex=p.lastIndex,x}function hd(p){return Rs?fr(Rs.call(p)):{}}function ml(p,x){var D=x?Eo(p.buffer):p.buffer;return new p.constructor(D,p.byteOffset,p.length)}function gl(p,x){if(p!==x){var D=p!==e,K=p===null,re=p===p,ce=hn(p),_e=x!==e,Te=x===null,Pe=x===x,Ve=hn(x);if(!Te&&!Ve&&!ce&&p>x||ce&&_e&&Pe&&!Te&&!Ve||K&&_e&&Pe||!D&&Pe||!re)return 1;if(!K&&!ce&&!Ve&&p=Te)return Pe;var Ve=D[K];return Pe*(Ve=="desc"?-1:1)}}return p.index-x.index}function bl(p,x,D,K){for(var re=-1,ce=p.length,_e=D.length,Te=-1,Pe=x.length,Ve=Rr(ce-_e,0),Ke=He(Pe+Ve),Ye=!K;++Te1?D[re-1]:e,_e=re>2?D[2]:e;for(ce=p.length>3&&typeof ce=="function"?(re--,ce):e,_e&&zr(D[0],D[1],_e)&&(ce=re<3?e:ce,re=1),x=fr(x);++K-1?re[ce?x[_e]:_e]:e}}function Sl(p){return ei(function(x){var D=x.length,K=D,re=yn.prototype.thru;for(p&&x.reverse();K--;){var ce=x[K];if(typeof ce!="function")throw new vn(c);if(re&&!_e&&wa(ce)=="wrapper")var _e=new yn([],!0)}for(K=_e?K:D;++K1&&Vt.reverse(),Ke&&PeTe))return!1;var Ve=ce.get(p),Ke=ce.get(x);if(Ve&&Ke)return Ve==x&&Ke==p;var Ye=-1,qe=!0,lt=D&a?new ki:e;for(ce.set(p,x),ce.set(x,p);++Ye1?"& ":"")+x[K],x=x.join(D>2?", ":" "),p.replace(wt,`{ +/* [wrapped with `+x+`] */ +`)}function kd(p){return Rt(p)||Fi(p)||!!(Lf&&p&&p[Lf])}function ti(p,x){var D=typeof p;return x=x??_,!!x&&(D=="number"||D!="symbol"&&Tt.test(p))&&p>-1&&p%1==0&&p0){if(++x>=G)return arguments[0]}else x=0;return p.apply(e,arguments)}}function _a(p,x){var D=-1,K=p.length,re=K-1;for(x=x===e?K:x;++D1?p[x-1]:e;return D=typeof D=="function"?(p.pop(),D):e,Gl(p,D)});function Yl(p){var x=le(p);return x.__chain__=!0,x}function j0(p,x){return x(p),p}function Sa(p,x){return x(p)}var $0=ei(function(p){var x=p.length,D=x?p[0]:0,K=this.__wrapped__,re=function(ce){return oo(ce,p)};return x>1||this.__actions__.length||!(K instanceof Xt)||!ti(D)?this.thru(re):(K=K.slice(D,+D+(x?1:0)),K.__actions__.push({func:Sa,args:[re],thisArg:e}),new yn(K,this.__chain__).thru(function(ce){return x&&!ce.length&&ce.push(e),ce}))});function H0(){return Yl(this)}function z0(){return new yn(this.value(),this.__chain__)}function U0(){this.__values__===e&&(this.__values__=lc(this.value()));var p=this.__index__>=this.__values__.length,x=p?e:this.__values__[this.__index__++];return{done:p,value:x}}function X0(){return this}function W0(p){for(var x,D=this;D instanceof fa;){var K=zl(D);K.__index__=0,K.__values__=e,x?re.__wrapped__=K:x=K;var re=K;D=D.__wrapped__}return re.__wrapped__=p,x}function V0(){var p=this.__wrapped__;if(p instanceof Xt){var x=p;return this.__actions__.length&&(x=new Xt(this)),x=x.reverse(),x.__actions__.push({func:Sa,args:[Do],thisArg:e}),new yn(x,this.__chain__)}return this.thru(Do)}function K0(){return hl(this.__wrapped__,this.__actions__)}var G0=ma(function(p,x,D){sr.call(p,D)?++p[D]:Qn(p,D,1)});function Y0(p,x,D){var K=Rt(p)?Yn:ju;return D&&zr(p,x,D)&&(x=e),K(p,gt(x,3))}function Z0(p,x){var D=Rt(p)?Ln:Gf;return D(p,gt(x,3))}var J0=_l(Ul),Q0=_l(Xl);function q0(p,x){return Nr(Ea(p,x),1)}function ep(p,x){return Nr(Ea(p,x),T)}function tp(p,x,D){return D=D===e?1:Pt(D),Nr(Ea(p,x),D)}function Zl(p,x){var D=Rt(p)?Pr:pi;return D(p,gt(x,3))}function Jl(p,x){var D=Rt(p)?An:Kf;return D(p,gt(x,3))}var rp=ma(function(p,x,D){sr.call(p,D)?p[D].push(x):Qn(p,D,[x])});function np(p,x,D,K){p=Zr(p)?p:cs(p),D=D&&!K?Pt(D):0;var re=p.length;return D<0&&(D=Rr(re+D,0)),Ma(p)?D<=re&&p.indexOf(x,D)>-1:!!re&&dr(p,x,D)>-1}var ip=Lt(function(p,x,D){var K=-1,re=typeof x=="function",ce=Zr(p)?He(p.length):[];return pi(p,function(_e){ce[++K]=re?hr(x,_e,D):Fs(_e,x,D)}),ce}),sp=ma(function(p,x,D){Qn(p,D,x)});function Ea(p,x){var D=Rt(p)?De:el;return D(p,gt(x,3))}function ap(p,x,D,K){return p==null?[]:(Rt(x)||(x=x==null?[]:[x]),D=K?e:D,Rt(D)||(D=D==null?[]:[D]),il(p,x,D))}var op=ma(function(p,x,D){p[D?0:1].push(x)},function(){return[[],[]]});function fp(p,x,D){var K=Rt(p)?dt:Es,re=arguments.length<3;return K(p,gt(x,4),D,re,pi)}function lp(p,x,D){var K=Rt(p)?nt:Es,re=arguments.length<3;return K(p,gt(x,4),D,re,Kf)}function cp(p,x){var D=Rt(p)?Ln:Gf;return D(p,Aa(gt(x,3)))}function hp(p){var x=Rt(p)?Uf:nd;return x(p)}function up(p,x,D){(D?zr(p,x,D):x===e)?x=1:x=Pt(x);var K=Rt(p)?Pu:id;return K(p,x)}function dp(p){var x=Rt(p)?Nu:ad;return x(p)}function pp(p){if(p==null)return 0;if(Zr(p))return Ma(p)?es(p):p.length;var x=Lr(p);return x==Z||x==z?p.size:po(p).length}function mp(p,x,D){var K=Rt(p)?Ot:od;return D&&zr(p,x,D)&&(x=e),K(p,gt(x,3))}var gp=Lt(function(p,x){if(p==null)return[];var D=x.length;return D>1&&zr(p,x[0],x[1])?x=[]:D>2&&zr(x[0],x[1],x[2])&&(x=[x[0]]),il(p,Nr(x,1),[])}),Ca=Zh||function(){return Ct.Date.now()};function bp(p,x){if(typeof x!="function")throw new vn(c);return p=Pt(p),function(){if(--p<1)return x.apply(this,arguments)}}function Ql(p,x,D){return x=D?e:x,x=p&&x==null?p.length:x,qn(p,I,e,e,e,e,x)}function ql(p,x){var D;if(typeof x!="function")throw new vn(c);return p=Pt(p),function(){return--p>0&&(D=x.apply(this,arguments)),p<=1&&(x=e),D}}var Lo=Lt(function(p,x,D){var K=g;if(D.length){var re=ui(D,fs(Lo));K|=S}return qn(p,K,x,D,re)}),ec=Lt(function(p,x,D){var K=g|v;if(D.length){var re=ui(D,fs(ec));K|=S}return qn(x,K,p,D,re)});function tc(p,x,D){x=D?e:x;var K=qn(p,w,e,e,e,e,e,x);return K.placeholder=tc.placeholder,K}function rc(p,x,D){x=D?e:x;var K=qn(p,y,e,e,e,e,e,x);return K.placeholder=rc.placeholder,K}function nc(p,x,D){var K,re,ce,_e,Te,Pe,Ve=0,Ke=!1,Ye=!1,qe=!0;if(typeof p!="function")throw new vn(c);x=Sn(x)||0,gr(D)&&(Ke=!!D.leading,Ye="maxWait"in D,ce=Ye?Rr(Sn(D.maxWait)||0,x):ce,qe="trailing"in D?!!D.trailing:qe);function lt(xr){var Fn=K,ii=re;return K=re=e,Ve=xr,_e=p.apply(ii,Fn),_e}function vt(xr){return Ve=xr,Te=Ls(zt,x),Ke?lt(xr):_e}function Bt(xr){var Fn=xr-Pe,ii=xr-Ve,_c=x-Fn;return Ye?Br(_c,ce-ii):_c}function yt(xr){var Fn=xr-Pe,ii=xr-Ve;return Pe===e||Fn>=x||Fn<0||Ye&&ii>=ce}function zt(){var xr=Ca();if(yt(xr))return Vt(xr);Te=Ls(zt,Bt(xr))}function Vt(xr){return Te=e,qe&&K?lt(xr):(K=re=e,_e)}function un(){Te!==e&&dl(Te),Ve=0,K=Pe=re=Te=e}function Ur(){return Te===e?_e:Vt(Ca())}function dn(){var xr=Ca(),Fn=yt(xr);if(K=arguments,re=this,Pe=xr,Fn){if(Te===e)return vt(Pe);if(Ye)return dl(Te),Te=Ls(zt,x),lt(Pe)}return Te===e&&(Te=Ls(zt,x)),_e}return dn.cancel=un,dn.flush=Ur,dn}var vp=Lt(function(p,x){return Vf(p,1,x)}),yp=Lt(function(p,x,D){return Vf(p,Sn(x)||0,D)});function wp(p){return qn(p,B)}function Ta(p,x){if(typeof p!="function"||x!=null&&typeof x!="function")throw new vn(c);var D=function(){var K=arguments,re=x?x.apply(this,K):K[0],ce=D.cache;if(ce.has(re))return ce.get(re);var _e=p.apply(this,K);return D.cache=ce.set(re,_e)||ce,_e};return D.cache=new(Ta.Cache||Jn),D}Ta.Cache=Jn;function Aa(p){if(typeof p!="function")throw new vn(c);return function(){var x=arguments;switch(x.length){case 0:return!p.call(this);case 1:return!p.call(this,x[0]);case 2:return!p.call(this,x[0],x[1]);case 3:return!p.call(this,x[0],x[1],x[2])}return!p.apply(this,x)}}function xp(p){return ql(2,p)}var _p=fd(function(p,x){x=x.length==1&&Rt(x[0])?De(x[0],ln(gt())):De(Nr(x,1),ln(gt()));var D=x.length;return Lt(function(K){for(var re=-1,ce=Br(K.length,D);++re=x}),Fi=Jf(function(){return arguments}())?Jf:function(p){return br(p)&&sr.call(p,"callee")&&!Bf.call(p,"callee")},Rt=He.isArray,Bp=Tr?ln(Tr):Wu;function Zr(p){return p!=null&&ka(p.length)&&!ri(p)}function wr(p){return br(p)&&Zr(p)}function Lp(p){return p===!0||p===!1||br(p)&&Hr(p)==ne}var vi=Qh||Zo,jp=Ir?ln(Ir):Vu;function $p(p){return br(p)&&p.nodeType===1&&!js(p)}function Hp(p){if(p==null)return!0;if(Zr(p)&&(Rt(p)||typeof p=="string"||typeof p.splice=="function"||vi(p)||ls(p)||Fi(p)))return!p.length;var x=Lr(p);if(x==Z||x==z)return!p.size;if(Bs(p))return!po(p).length;for(var D in p)if(sr.call(p,D))return!1;return!0}function zp(p,x){return Ps(p,x)}function Up(p,x,D){D=typeof D=="function"?D:e;var K=D?D(p,x):e;return K===e?Ps(p,x,e,D):!!K}function $o(p){if(!br(p))return!1;var x=Hr(p);return x==Ae||x==ue||typeof p.message=="string"&&typeof p.name=="string"&&!js(p)}function Xp(p){return typeof p=="number"&&jf(p)}function ri(p){if(!gr(p))return!1;var x=Hr(p);return x==pe||x==te||x==W||x==ie}function sc(p){return typeof p=="number"&&p==Pt(p)}function ka(p){return typeof p=="number"&&p>-1&&p%1==0&&p<=_}function gr(p){var x=typeof p;return p!=null&&(x=="object"||x=="function")}function br(p){return p!=null&&typeof p=="object"}var ac=pr?ln(pr):Gu;function Wp(p,x){return p===x||uo(p,x,Ro(x))}function Vp(p,x,D){return D=typeof D=="function"?D:e,uo(p,x,Ro(x),D)}function Kp(p){return oc(p)&&p!=+p}function Gp(p){if(Id(p))throw new At(f);return Qf(p)}function Yp(p){return p===null}function Zp(p){return p==null}function oc(p){return typeof p=="number"||br(p)&&Hr(p)==q}function js(p){if(!br(p)||Hr(p)!=ke)return!1;var x=ta(p);if(x===null)return!0;var D=sr.call(x,"constructor")&&x.constructor;return typeof D=="function"&&D instanceof D&&Js.call(D)==Vh}var Ho=Sr?ln(Sr):Yu;function Jp(p){return sc(p)&&p>=-_&&p<=_}var fc=Ar?ln(Ar):Zu;function Ma(p){return typeof p=="string"||!Rt(p)&&br(p)&&Hr(p)==Y}function hn(p){return typeof p=="symbol"||br(p)&&Hr(p)==fe}var ls=on?ln(on):Ju;function Qp(p){return p===e}function qp(p){return br(p)&&Lr(p)==U}function em(p){return br(p)&&Hr(p)==ve}var tm=ya(mo),rm=ya(function(p,x){return p<=x});function lc(p){if(!p)return[];if(Zr(p))return Ma(p)?Rn(p):Yr(p);if(Ts&&p[Ts])return Ph(p[Ts]());var x=Lr(p),D=x==Z?to:x==z?Gs:cs;return D(p)}function ni(p){if(!p)return p===0?p:0;if(p=Sn(p),p===T||p===-T){var x=p<0?-1:1;return x*A}return p===p?p:0}function Pt(p){var x=ni(p),D=x%1;return x===x?D?x-D:x:0}function cc(p){return p?Mi(Pt(p),0,L):0}function Sn(p){if(typeof p=="number")return p;if(hn(p))return P;if(gr(p)){var x=typeof p.valueOf=="function"?p.valueOf():p;p=gr(x)?x+"":x}if(typeof p!="string")return p===0?p:+p;p=Mf(p);var D=mt.test(p);return D||St.test(p)?Re(p.slice(2),D?2:8):Qt.test(p)?P:+p}function hc(p){return $n(p,Jr(p))}function nm(p){return p?Mi(Pt(p),-_,_):p===0?p:0}function ir(p){return p==null?"":cn(p)}var im=as(function(p,x){if(Bs(x)||Zr(x)){$n(x,Fr(x),p);return}for(var D in x)sr.call(x,D)&&Is(p,D,x[D])}),uc=as(function(p,x){$n(x,Jr(x),p)}),Ra=as(function(p,x,D,K){$n(x,Jr(x),p,K)}),sm=as(function(p,x,D,K){$n(x,Fr(x),p,K)}),am=ei(oo);function om(p,x){var D=ss(p);return x==null?D:Xf(D,x)}var fm=Lt(function(p,x){p=fr(p);var D=-1,K=x.length,re=K>2?x[2]:e;for(re&&zr(x[0],x[1],re)&&(K=1);++D1),ce}),$n(p,ko(p),D),K&&(D=wn(D,r|i|o,yd));for(var re=x.length;re--;)wo(D,x[re]);return D});function Tm(p,x){return pc(p,Aa(gt(x)))}var Am=ei(function(p,x){return p==null?{}:ed(p,x)});function pc(p,x){if(p==null)return{};var D=De(ko(p),function(K){return[K]});return x=gt(x),sl(p,D,function(K,re){return x(K,re[0])})}function km(p,x,D){x=gi(x,p);var K=-1,re=x.length;for(re||(re=1,p=e);++Kx){var K=p;p=x,x=K}if(D||p%1||x%1){var re=$f();return Br(p+re*(x-p+ye("1e-"+((re+"").length-1))),x)}return bo(p,x)}var jm=os(function(p,x,D){return x=x.toLowerCase(),p+(D?bc(x):x)});function bc(p){return Xo(ir(p).toLowerCase())}function vc(p){return p=ir(p),p&&p.replace(be,Mh).replace(xs,"")}function $m(p,x,D){p=ir(p),x=cn(x);var K=p.length;D=D===e?K:Mi(Pt(D),0,K);var re=D;return D-=x.length,D>=0&&p.slice(D,re)==x}function Hm(p){return p=ir(p),p&&rt.test(p)?p.replace(ct,Rh):p}function zm(p){return p=ir(p),p&&ht.test(p)?p.replace(It,"\\$&"):p}var Um=os(function(p,x,D){return p+(D?"-":"")+x.toLowerCase()}),Xm=os(function(p,x,D){return p+(D?" ":"")+x.toLowerCase()}),Wm=xl("toLowerCase");function Vm(p,x,D){p=ir(p),x=Pt(x);var K=x?es(p):0;if(!x||K>=x)return p;var re=(x-K)/2;return va(sa(re),D)+p+va(ia(re),D)}function Km(p,x,D){p=ir(p),x=Pt(x);var K=x?es(p):0;return x&&K>>0,D?(p=ir(p),p&&(typeof x=="string"||x!=null&&!Ho(x))&&(x=cn(x),!x&&qi(p))?bi(Rn(p),0,D):p.split(x,D)):[]}var e1=os(function(p,x,D){return p+(D?" ":"")+Xo(x)});function t1(p,x,D){return p=ir(p),D=D==null?0:Mi(Pt(D),0,p.length),x=cn(x),p.slice(D,D+x.length)==x}function r1(p,x,D){var K=le.templateSettings;D&&zr(p,x,D)&&(x=e),p=ir(p),x=Ra({},x,K,kl);var re=Ra({},x.imports,K.imports,kl),ce=Fr(re),_e=eo(re,ce),Te,Pe,Ve=0,Ke=x.interpolate||Ne,Ye="__p += '",qe=ro((x.escape||Ne).source+"|"+Ke.source+"|"+(Ke===et?xt:Ne).source+"|"+(x.evaluate||Ne).source+"|$","g"),lt="//# sourceURL="+(sr.call(x,"sourceURL")?(x.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Ci+"]")+` +`;p.replace(qe,function(yt,zt,Vt,un,Ur,dn){return Vt||(Vt=un),Ye+=p.slice(Ve,dn).replace(Le,Ih),zt&&(Te=!0,Ye+=`' + +__e(`+zt+`) + +'`),Ur&&(Pe=!0,Ye+=`'; +`+Ur+`; +__p += '`),Vt&&(Ye+=`' + +((__t = (`+Vt+`)) == null ? '' : __t) + +'`),Ve=dn+yt.length,yt}),Ye+=`'; +`;var vt=sr.call(x,"variable")&&x.variable;if(!vt)Ye=`with (obj) { +`+Ye+` +} +`;else if(Gt.test(vt))throw new At(u);Ye=(Pe?Ye.replace(Me,""):Ye).replace(Be,"$1").replace(Xe,"$1;"),Ye="function("+(vt||"obj")+`) { +`+(vt?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(Te?", __e = _.escape":"")+(Pe?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+Ye+`return __p +}`;var Bt=wc(function(){return tr(ce,lt+"return "+Ye).apply(e,_e)});if(Bt.source=Ye,$o(Bt))throw Bt;return Bt}function n1(p){return ir(p).toLowerCase()}function i1(p){return ir(p).toUpperCase()}function s1(p,x,D){if(p=ir(p),p&&(D||x===e))return Mf(p);if(!p||!(x=cn(x)))return p;var K=Rn(p),re=Rn(x),ce=Rf(K,re),_e=If(K,re)+1;return bi(K,ce,_e).join("")}function a1(p,x,D){if(p=ir(p),p&&(D||x===e))return p.slice(0,Ff(p)+1);if(!p||!(x=cn(x)))return p;var K=Rn(p),re=If(K,Rn(x))+1;return bi(K,0,re).join("")}function o1(p,x,D){if(p=ir(p),p&&(D||x===e))return p.replace(Dt,"");if(!p||!(x=cn(x)))return p;var K=Rn(p),re=Rf(K,Rn(x));return bi(K,re).join("")}function f1(p,x){var D=j,K=X;if(gr(x)){var re="separator"in x?x.separator:re;D="length"in x?Pt(x.length):D,K="omission"in x?cn(x.omission):K}p=ir(p);var ce=p.length;if(qi(p)){var _e=Rn(p);ce=_e.length}if(D>=ce)return p;var Te=D-es(K);if(Te<1)return K;var Pe=_e?bi(_e,0,Te).join(""):p.slice(0,Te);if(re===e)return Pe+K;if(_e&&(Te+=Pe.length-Te),Ho(re)){if(p.slice(Te).search(re)){var Ve,Ke=Pe;for(re.global||(re=ro(re.source,ir($t.exec(re))+"g")),re.lastIndex=0;Ve=re.exec(Ke);)var Ye=Ve.index;Pe=Pe.slice(0,Ye===e?Te:Ye)}}else if(p.indexOf(cn(re),Te)!=Te){var qe=Pe.lastIndexOf(re);qe>-1&&(Pe=Pe.slice(0,qe))}return Pe+K}function l1(p){return p=ir(p),p&&st.test(p)?p.replace(ot,Lh):p}var c1=os(function(p,x,D){return p+(D?" ":"")+x.toUpperCase()}),Xo=xl("toUpperCase");function yc(p,x,D){return p=ir(p),x=D?e:x,x===e?Fh(p)?Hh(p):Er(p):p.match(x)||[]}var wc=Lt(function(p,x){try{return hr(p,e,x)}catch(D){return $o(D)?D:new At(D)}}),h1=ei(function(p,x){return Pr(x,function(D){D=Hn(D),Qn(p,D,Lo(p[D],p))}),p});function u1(p){var x=p==null?0:p.length,D=gt();return p=x?De(p,function(K){if(typeof K[1]!="function")throw new vn(c);return[D(K[0]),K[1]]}):[],Lt(function(K){for(var re=-1;++re_)return[];var D=L,K=Br(p,L);x=gt(x),p-=L;for(var re=qa(K,x);++D0||x<0)?new Xt(D):(p<0?D=D.takeRight(-p):p&&(D=D.drop(p)),x!==e&&(x=Pt(x),D=x<0?D.dropRight(-x):D.take(x-p)),D)},Xt.prototype.takeRightWhile=function(p){return this.reverse().takeWhile(p).reverse()},Xt.prototype.toArray=function(){return this.take(L)},jn(Xt.prototype,function(p,x){var D=/^(?:filter|find|map|reject)|While$/.test(x),K=/^(?:head|last)$/.test(x),re=le[K?"take"+(x=="last"?"Right":""):x],ce=K||/^find/.test(x);re&&(le.prototype[x]=function(){var _e=this.__wrapped__,Te=K?[1]:arguments,Pe=_e instanceof Xt,Ve=Te[0],Ke=Pe||Rt(_e),Ye=function(zt){var Vt=re.apply(le,Ge([zt],Te));return K&&qe?Vt[0]:Vt};Ke&&D&&typeof Ve=="function"&&Ve.length!=1&&(Pe=Ke=!1);var qe=this.__chain__,lt=!!this.__actions__.length,vt=ce&&!qe,Bt=Pe&&!lt;if(!ce&&Ke){_e=Bt?_e:new Xt(this);var yt=p.apply(_e,Te);return yt.__actions__.push({func:Sa,args:[Ye],thisArg:e}),new yn(yt,qe)}return vt&&Bt?p.apply(this,Te):(yt=this.thru(Ye),vt?K?yt.value()[0]:yt.value():yt)})}),Pr(["pop","push","shift","sort","splice","unshift"],function(p){var x=Ys[p],D=/^(?:push|sort|unshift)$/.test(p)?"tap":"thru",K=/^(?:pop|shift)$/.test(p);le.prototype[p]=function(){var re=arguments;if(K&&!this.__chain__){var ce=this.value();return x.apply(Rt(ce)?ce:[],re)}return this[D](function(_e){return x.apply(Rt(_e)?_e:[],re)})}}),jn(Xt.prototype,function(p,x){var D=le[x];if(D){var K=D.name+"";sr.call(is,K)||(is[K]=[]),is[K].push({name:x,func:D})}}),is[ga(e,v).name]=[{name:"wrapper",func:e}],Xt.prototype.clone=lu,Xt.prototype.reverse=cu,Xt.prototype.value=hu,le.prototype.at=$0,le.prototype.chain=H0,le.prototype.commit=z0,le.prototype.next=U0,le.prototype.plant=W0,le.prototype.reverse=V0,le.prototype.toJSON=le.prototype.valueOf=le.prototype.value=K0,le.prototype.first=le.prototype.head,Ts&&(le.prototype[Ts]=X0),le},ts=zh();Jt?((Jt.exports=ts)._=ts,Et._=ts):Ct._=ts}).call(Nt)})(Za,Za.exports);var kf=Za.exports;function Ch(N){N=N.replace("#","");for(var b=N.match(/../g),e=0;e<3;e++)b[e]=parseInt(b[e],16);return b}function Th(N,b,e){for(var d=[N.toString(16),b.toString(16),e.toString(16)],m=0;m<3;m++)d[m].length==1&&(d[m]="0"+d[m]);return"#"+d.join("")}function Zv(N,b){for(var e=Ch(N),d=0;d<3;d++)e[d]=Math.floor(e[d]*(1-b));return Th(e[0],e[1],e[2])}function Jv(N,b){for(var e=Ch(N),d=0;d<3;d++)e[d]=Math.floor((255-e[d])*b+e[d]);return Th(e[0],e[1],e[2])}const rf=["#FFFFFF","#000000","#BFBFBF","#323232","#4472C4","#ED7D31","#A5A5A5","#FFC000","#5B9BD5","#71AD47"],nf=["#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#800000","#008000","#000080","#808000","#800080","#008080","#C0C0C0","#808080","#9999FF","#993366","#FFFFCC","#CCFFFF","#660066","#FF8080","#0066CC","#CCCCFF","#000080","#FF00FF","#FFFF00","#00FFFF","#800080","#800000","#008080","#0000FF","#00CCFF","#CCFFFF","#CCFFCC","#FFFF99","#99CCFF","#FF99CC","#CC99FF","#FFCC99","#3366FF","#33CCCC","#99CC00","#FFCC00","#FF9900","#FF6600","#666699","#969696","#003366","#339966","#003300","#333300","#993300","#993366","#333399","#333333","#FFFFFF"];let Qv=80,qv=24;function gy(N,b={}){return ey(Z1(N),b)}function ey(N,b){return new Promise(function(e,d){const m=new XMLHttpRequest;m.open(b.method||"GET",N,!0),m.responseType=b.responseType||"arraybuffer",m.onload=function(){m.status===200?e(m.response):d(m.status)},m.onerror=function(){d(m.status)},m.withCredentials=b.withCredentials||!1,b.headers&&Object.keys(b.headers).forEach(function(f){m.setRequestHeader(f,b.headers[f])}),m.send(b.body)})}function by(N){try{return new Cv.Workbook().xlsx.load(N)}catch(b){return console.warn(b),Promise.reject(b)}}function ty(N,b,e){for(let d=0;d<(N.columns||[]).length;d++)b.cols[d.toString()]={},N.columns[d].width?b.cols[d.toString()].width=N.columns[d].width*6+(e.widthOffset||0):b.cols[d.toString()].width=Qv+(e.widthOffset||0);b.cols.len=Math.max(Object.keys(b.cols).length,e.minColLength||0)}function ry(N){let{numFmt:b,value:e,type:d}=N;switch(d){case 2:try{if(N.style.numFmt){if(N.style.numFmt.endsWith("%")){let m=N.style.numFmt.match(/\.(\d+)%/);return m?(e*100).toFixed(m[1].length)+"%":e*100+"%"}else if(/0(\.0+)?/.test(N.style.numFmt)){let m="";if(N.style.numFmt.startsWith("$")?m="$":N.style.numFmt.startsWith('"¥')&&(m="¥"),e===0&&N.style.numFmt.startsWith("_"))return"-";let f=N.style.numFmt.match(/0\.(0+)(_|;|$)/);f?f=f[1].length:f=0;let c=e.toFixed(f)+"";if(N.style.numFmt.includes("#,##")){c=c.split(".");let u=c[0].split("").reverse(),s=[];for(let t=0;t9?"#C7C9CC":typeof b>"u"?rf[N]:b>0?Jv(rf[N],b):Zv(rf[N],Math.abs(b))}function ny(N){N.style=kf.cloneDeep(N.style);let b=null;N.style.fill&&N.style.fill.fgColor&&(N.style.fill.fgColor.argb?b=sf(N.style.fill.fgColor.argb):N.style.fill.fgColor.hasOwnProperty("theme")?b=af(N.style.fill.fgColor.theme,N.style.fill.fgColor.tint):N.style.fill.fgColor.indexed?b=nf[N.style.fill.fgColor.indexed]||"#C7C9CC":b="#C7C9CC"),b&&(N.style.bgcolor=b);let e=null;if(N.style.font&&N.style.font.color&&(N.style.font.color.argb?e=sf(N.style.font.color.argb):N.style.font.color.hasOwnProperty("theme")?e=af(N.style.font.color.theme,N.style.font.color.tint):N.style.font.color.indexed?e=nf[N.style.font.color.indexed]||"#000000":e="#000000"),e&&(N.style.color=e),N.style.alignment&&(N.style.alignment.horizontal&&(N.style.align=N.style.alignment.horizontal),N.style.alignment.vertical&&(N.style.valign=N.style.alignment.vertical)),N.style.alignment&&N.style.alignment.wrapText&&(N.style.textwrap=!0),N.style.border){let d={};Object.keys(N.style.border).forEach(m=>{let f=N.style.border[m],c="#000000";typeof f.color=="string"?c=f.color:f.color&&(f.color.argb?c=sf(f.color.argb):f.color.hasOwnProperty("theme")?c=af(f.color.theme,f.color.tint):f.color.indexed&&(c=nf[f.color.indexed])),d[m]=[f.style||"thin",c]}),N.style.border2={...N.style.border},N.style.border=d}return N.style}function vy(N,b){let e=[],d=[];return N.eachSheet(m=>{d.push(m);let f={name:m.name,styles:[],rows:{},cols:{},merges:[],media:[]},c=[];for(let s in m._merges){f.merges.push(m._merges[s].shortRange);let t={};t.startAddress=m._merges[s].tl,t.endAddress=m._merges[s].br,t.YRange=m._merges[s].model.bottom-m._merges[s].model.top,t.XRange=m._merges[s].model.right-m._merges[s].model.left,c.push(t)}ty(m,f,b),(m._rows||[]).forEach((s,t)=>{f.rows[t]={cells:{}},s.height?f.rows[t].height=s.height+(b.heightOffset||0):f.rows[t].height=qv+(b.heightOffset||0),(s._cells||[]).forEach((n,r)=>{f.rows[t].cells[r]={};let i=kf.find(c,function(o){return o.startAddress==n._address});i&&n.master.address!=i.startAddress||(i&&(f.rows[t].cells[r].merge=[i.YRange,i.XRange]),f.rows[t].cells[r].text=ry(n),f.styles.push(ny(n)),f.rows[t].cells[r].style=f.styles.length-1)})}),f._media&&(f.media=f._media);let u=Object.keys(f.rows);f.rows.len=Math.max(+u[u.length-1]+1,b.hasOwnProperty("minRowLength")?b.minRowLength:100),e.push(f)}),N._worksheets=d,{workbookData:e,workbookSource:N,medias:N.media||[]}}let $a=[];function yy(N,b,e,d,m={}){e&&e._media.length&&e._media.forEach(f=>{let{imageId:c,range:u,type:s}=f;if(s==="image"){let t=iy(e,u,d,m);sy(N,c,b[c],t)}})}let Ha=60,za=25,of=80,ff=24,Un=window.devicePixelRatio;function iy(N,b,e,d){var E,I,F,B,j,X,G,V,J,H,M,T,_,A;let{widthOffset:m,heightOffset:f}=d,{tl:c={},br:u={}}=b,{nativeCol:s,nativeColOff:t,nativeRow:n,nativeRowOff:r}=c,i=Ha,o=za;for(let P=0;P{let f=0,c=0,u=m.width,s=m.height,t=d.x,n=d.y,r=d.width,i=d.height,o=r/u,l=i/s;if(t{console.error(m)})}function ay(N,b){return new Promise((e,d)=>{if($a[N])return e($a[N]);const{buffer:m}=b.buffer;let f=new Blob([m],{type:"image/"+b.extension}),c=URL.createObjectURL(f),u=new Image;u.src=c,u.onload=function(){e(u),$a[N]=u},u.onerror=function(s){d(s)}})}function xy(N){if(N){let b=N.querySelectorAll("input");for(let e of b)e&&!e.readOnly&&(e.readOnly=!0);document.activeElement&&document.activeElement.blur()}}export{Sv as S,yy as a,by as b,wy as c,gy as g,kf as l,xy as r,vy as t}; diff --git a/examples/dist/assets/hack-f62f946f.js b/examples/dist/assets/hack-f62f946f.js new file mode 100644 index 0000000..f73d316 --- /dev/null +++ b/examples/dist/assets/hack-f62f946f.js @@ -0,0 +1,96 @@ +import{y as Nt,z as Pi}from"./index-58cbfcf0.js";import{c as Ia}from"./_commonjs-dynamic-modules-302442b1.js";import{g as Z1}from"./url-de9b02cf.js";class Li{constructor(b,e=""){typeof b=="string"?(this.el=document.createElement(b),this.el.className=e):this.el=b,this.data={}}data(b,e){return e!==void 0?(this.data[b]=e,this):this.data[b]}on(b,e){const[d,...m]=b.split(".");let f=d;return f==="mousewheel"&&/Firefox/i.test(window.navigator.userAgent)&&(f="DOMMouseScroll"),this.el.addEventListener(f,c=>{e(c);for(let u=0;u{this.css(c,`${b[c]}px`)}),this;const{offsetTop:e,offsetLeft:d,offsetHeight:m,offsetWidth:f}=this.el;return{top:e,left:d,height:m,width:f}}scroll(b){const{el:e}=this;return b!==void 0&&(b.left!==void 0&&(e.scrollLeft=b.left),b.top!==void 0&&(e.scrollTop=b.top)),{left:e.scrollLeft,top:e.scrollTop}}box(){return this.el.getBoundingClientRect()}parent(){return new Li(this.el.parentNode)}children(...b){return arguments.length===0?this.el.childNodes:(b.forEach(e=>this.child(e)),this)}removeChild(b){this.el.removeChild(b)}child(b){let e=b;return typeof b=="string"?e=document.createTextNode(b):b instanceof Li&&(e=b.el),this.el.appendChild(e),this}contains(b){return this.el.contains(b)}className(b){return b!==void 0?(this.el.className=b,this):this.el.className}addClass(b){return this.el.classList.add(b),this}hasClass(b){return this.el.classList.contains(b)}removeClass(b){return this.el.classList.remove(b),this}toggle(b="active"){return this.toggleClass(b)}toggleClass(b){return this.el.classList.toggle(b)}active(b=!0,e="active"){return b?this.addClass(e):this.removeClass(e),this}checked(b=!0){return this.active(b,"checked"),this}disabled(b=!0){return b?this.addClass("disabled"):this.removeClass("disabled"),this}attr(b,e){if(e!==void 0)this.el.setAttribute(b,e);else{if(typeof b=="string")return this.el.getAttribute(b);Object.keys(b).forEach(d=>{this.el.setAttribute(d,b[d])})}return this}removeAttr(b){return this.el.removeAttribute(b),this}html(b){return b!==void 0?(this.el.innerHTML=b,this):this.el.innerHTML}val(b){return b!==void 0?(this.el.value=b,this):this.el.value}focus(){this.el.focus()}cssRemoveKeys(...b){return b.forEach(e=>this.el.style.removeProperty(e)),this}css(b,e){return e===void 0&&typeof b!="string"?(Object.keys(b).forEach(d=>{this.el.style[d]=b[d]}),this):e!==void 0?(this.el.style[b]=e,this):this.el.style[b]}computedStyle(){return window.getComputedStyle(this.el,null)}show(){return this.css("display","block"),this}hide(){return this.css("display","none"),this}}const $e=(N,b="")=>new Li(N,b),wi=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];function rh(N){let b="",e=N;for(;e>=wi.length;)e/=wi.length,e-=1,b+=wi[parseInt(e,10)%wi.length];const d=N%wi.length;return b+=wi[d],b}function J1(N){let b=0;for(let e=0;e="0"&&N.charAt(d)<="9"?e+=N.charAt(d):b+=N.charAt(d);return[J1(b),parseInt(e,10)-1]}function ai(N,b){return`${rh(N)}${b+1}`}function $s(N,b,e,d=()=>!0){if(b===0&&e===0)return N;const[m,f]=xi(N);return d(m,f)?ai(m+b,f+e):N}class _r{constructor(b,e,d,m,f=0,c=0){this.sri=b,this.sci=e,this.eri=d,this.eci=m,this.w=f,this.h=c}set(b,e,d,m){this.sri=b,this.sci=e,this.eri=d,this.eci=m}multiple(){return this.eri-this.sri>0||this.eci-this.sci>0}includes(...b){let[e,d]=[0,0];b.length===1?[d,e]=xi(b[0]):b.length===2&&([e,d]=b);const{sri:m,sci:f,eri:c,eci:u}=this;return m<=e&&e<=c&&f<=d&&d<=u}each(b,e=()=>!0){const{sri:d,sci:m,eri:f,eci:c}=this;for(let u=d;u<=f;u+=1)if(e(u))for(let s=m;s<=c;s+=1)b(u,s)}contains(b){return this.sri<=b.sri&&this.sci<=b.sci&&this.eri>=b.eri&&this.eci>=b.eci}within(b){return this.sri>=b.sri&&this.sci>=b.sci&&this.eri<=b.eri&&this.eci<=b.eci}disjoint(b){return this.sri>b.eri||this.sci>b.eci||b.sri>this.eri||b.sci>this.eci}intersects(b){return this.sri<=b.eri&&this.sci<=b.eci&&b.sri<=this.eri&&b.sci<=this.eci}union(b){const{sri:e,sci:d,eri:m,eci:f}=this;return new _r(b.srim?b.eri:m,b.eci>f?b.eci:f)}difference(b){const e=[],d=(i,o,l,a)=>{e.push(new _r(i,o,l,a))},{sri:m,sci:f,eri:c,eci:u}=this,s=b.sri-m,t=b.sci-f,n=c-b.eri,r=u-b.eci;return s>0?(d(m,f,b.sri-1,u),n>0?(d(b.eri+1,f,c,u),t>0&&d(b.sri,f,b.eri,b.sci-1),r>0&&d(b.sri,b.eci+1,b.eri,u)):(t>0&&d(b.sri,f,c,b.sci-1),r>0&&d(b.sri,b.eci+1,c,u))):n>0&&(d(b.eri+1,f,c,u),t>0&&d(m,f,b.eri,b.sci-1),r>0&&d(m,b.eci+1,b.eri,u)),t>0?(d(m,f,c,b.sci-1),r>0?(d(m,b.eri+1,c,u),s>0&&d(m,b.sci,b.sri-1,b.eci),n>0&&d(b.sri+1,b.sci,c,b.eci)):(s>0&&d(m,b.sci,b.sri-1,u),n>0&&d(b.sri+1,b.sci,c,u))):r>0&&(d(c,b.eci+1,c,u),s>0&&d(m,f,b.sri-1,b.eci),n>0&&d(b.eri+1,f,c,b.eci)),e}size(){return[this.eri-this.sri+1,this.eci-this.sci+1]}toString(){const{sri:b,sci:e,eri:d,eci:m}=this;let f=ai(e,b);return this.multiple()&&(f=`${f}:${ai(m,d)}`),f}clone(){const{sri:b,sci:e,eri:d,eci:m,w:f,h:c}=this;return new _r(b,e,d,m,f,c)}equals(b){return this.eri===b.eri&&this.eci===b.eci&&this.sri===b.sri&&this.sci===b.sci}static valueOf(b){const e=b.split(":"),[d,m]=xi(e[0]);let[f,c]=[m,d];return e.length>1&&([c,f]=xi(e[1])),new _r(m,d,f,c)}}let Q1=class{constructor(){this.range=new _r(0,0,0,0),this.ri=0,this.ci=0}multiple(){return this.range.multiple()}setIndexes(b,e){this.ri=b,this.ci=e}size(){return this.range.size()}};class q1{constructor(){this.x=0,this.y=0,this.ri=0,this.ci=0}}class eg{constructor(){this.undoItems=[],this.redoItems=[]}add(b){this.undoItems.push(JSON.stringify(b)),this.redoItems=[]}canUndo(){return this.undoItems.length>0}canRedo(){return this.redoItems.length>0}undo(b,e){const{undoItems:d,redoItems:m}=this;this.canUndo()&&(m.push(JSON.stringify(b)),e(JSON.parse(d.pop())))}redo(b,e){const{undoItems:d,redoItems:m}=this;this.canRedo()&&(d.push(JSON.stringify(b)),e(JSON.parse(m.pop())))}}class tg{constructor(){this.range=null,this.state="clear"}copy(b){return this.range=b,this.state="copy",this}cut(b){return this.range=b,this.state="cut",this}isCopy(){return this.state==="copy"}isCut(){return this.state==="cut"}isClear(){return this.state==="clear"}clear(){this.range=null,this.state="clear"}}class Sc{constructor(b,e,d){this.ci=b,this.operator=e,this.value=d}set(b,e){this.operator=b,this.value=e}includes(b){const{operator:e,value:d}=this;return e==="all"?!0:e==="in"?d.includes(b):!1}vlength(){const{operator:b,value:e}=this;return b==="in"?e.length:0}getData(){const{ci:b,operator:e,value:d}=this;return{ci:b,operator:e,value:d}}}class Ec{constructor(b,e){this.ci=b,this.order=e}asc(){return this.order==="asc"}desc(){return this.order==="desc"}}class rg{constructor(){this.ref=null,this.filters=[],this.sort=null}setData({ref:b,filters:e,sort:d}){b!=null&&(this.ref=b,this.filters=e.map(m=>new Sc(m.ci,m.operator,m.value)),d&&(this.sort=new Ec(d.ci,d.order)))}getData(){if(this.active()){const{ref:b,filters:e,sort:d}=this;return{ref:b,filters:e.map(m=>m.getData()),sort:d}}return{}}addFilter(b,e,d){const m=this.getFilter(b);m==null?this.filters.push(new Sc(b,e,d)):m.set(e,d)}setSort(b,e){this.sort=e?new Ec(b,e):null}includes(b,e){return this.active()?this.hrange().includes(b,e):!1}getSort(b){const{sort:e}=this;return e&&e.ci===b?e:null}getFilter(b){const{filters:e}=this;for(let d=0;d!e.within(b))}getFirstIncludes(b,e){for(let d=0;de.intersects(b)))}intersects(b){for(let e=0;e{d.intersects(e)&&(e=d.union(e))}),e}add(b){this.deleteWithin(b),this._.push(b)}shift(b,e,d,m){this._.forEach(f=>{const{sri:c,sci:u,eri:s,eci:t}=f,n=f;b==="row"?c>=e?(n.sri+=d,n.eri+=d):c=e?(n.sci+=d,n.eci+=d):u{const f=m;f.within(b)&&(f.eri+=e,f.sri+=e,f.sci+=d,f.eci+=d)})}setData(b){return this._=b.map(e=>_r.valueOf(e)),this}getData(){return this._.map(b=>b.toString())}}function ng(N){return JSON.parse(JSON.stringify(N))}const nh=(N={},...b)=>(b.forEach(e=>{Object.keys(e).forEach(d=>{const m=e[d];typeof m=="string"||typeof m=="number"||typeof m=="boolean"?N[d]=m:typeof m!="function"&&!Array.isArray(m)&&m instanceof Object?(N[d]=N[d]||{},nh(N[d],m)):N[d]=m})}),N);function lf(N,b){const e=Object.keys(N);if(e.length!==Object.keys(b).length)return!1;for(let d=0;de)=>{let e=0,d=0;return Object.keys(N).forEach(m=>{e+=b(N[m],m),d+=1}),[e,d]};function sg(N,b){const e=N[`${b}`];return delete N[`${b}`],e}function ag(N,b,e,d,m,f){let c=e,u=d,s=N;for(;sm);s+=1)u=f(s),c+=u;return[s,c-u,u]}function og(N,b,e){let d=0;for(let m=N;m5?u.toFixed(2):u;return u.toFixed(Math.max(d,m))}const qr={cloneDeep:ng,merge:(...N)=>nh({},...N),equals:lf,arrayEquals:lg,sum:ig,rangeEach:fg,rangeSum:og,rangeReduceIf:ag,deleteProperty:sg,numberCalc:Ni};class cg{constructor({len:b,height:e}){this._={},this.len=b,this.height=e}getHeight(b){if(this.isHide(b))return 0;const e=this.get(b);return e&&e.height?e.height:this.height}setHeight(b,e){const d=this.getOrNew(b);d.height=e}unhide(b){let e=b;for(;e>0&&(e-=1,this.isHide(e));)this.setHide(e,!1)}isHide(b){const e=this.get(b);return e&&e.hide}setHide(b,e){const d=this.getOrNew(b);e===!0?d.hide=!0:delete d.hide}setStyle(b,e){const d=this.getOrNew(b);d.style=e}sumHeight(b,e,d){return qr.rangeSum(b,e,m=>d&&d.has(m)?0:this.getHeight(m))}totalHeight(){return this.sumHeight(0,this.len)}get(b){return this._[b]}getOrNew(b){return this._[b]=this._[b]||{cells:{}},this._[b]}getCell(b,e){const d=this.get(b);return d!==void 0&&d.cells!==void 0&&d.cells[e]!==void 0?d.cells[e]:null}getCellMerge(b,e){const d=this.getCell(b,e);return d&&d.merge?d.merge:[0,0]}getCellOrNew(b,e){const d=this.getOrNew(b);return d.cells[e]=d.cells[e]||{},d.cells[e]}setCell(b,e,d,m="all"){const f=this.getOrNew(b);m==="all"?f.cells[e]=d:m==="text"?(f.cells[e]=f.cells[e]||{},f.cells[e].text=d.text):m==="format"&&(f.cells[e]=f.cells[e]||{},f.cells[e].style=d.style,d.merge&&(f.cells[e].merge=d.merge))}setCellText(b,e,d){const m=this.getCellOrNew(b,e);m.editable!==!1&&(m.text=d)}copyPaste(b,e,d,m=!1,f=()=>{}){const{sri:c,sci:u,eri:s,eci:t}=b,n=e.sri,r=e.sci,i=e.eri,o=e.eci,[l,a]=b.size(),[g,v]=e.size();let h=!0,w=0;(i0){const{text:X}=j;let G=I-r+(E-n)+2;if(h||(G-=w+1),X[0]==="=")j.text=X.replace(/[a-zA-Z]{1,3}\d+/g,V=>{let[J,H]=[0,0];return c===n?J=G-1:H=G-1,/^\d+$/.test(V)?V:$s(V,J,H)});else if(l<=1&&a>1&&(n>s||i1&&(r>t||o{this.eachCells(m,f=>{let c=parseInt(m,10),u=parseInt(f,10);b.includes(m,f)&&(c=e.sri+(c-b.sri),u=e.sci+(u-b.sci)),d[c]=d[c]||{cells:{}},d[c].cells[u]=this._[m].cells[f]})}),this._=d}paste(b,e){if(b.length<=0)return;const{sri:d,sci:m}=e;b.forEach((f,c)=>{const u=d+c;f.forEach((s,t)=>{const n=m+t;this.setCellText(u,n,s)})})}insert(b,e=1){const d={};this.each((m,f)=>{let c=parseInt(m,10);c>=b&&(c+=e,this.eachCells(m,(u,s)=>{s.text&&s.text[0]==="="&&(s.text=s.text.replace(/[a-zA-Z]{1,3}\d+/g,t=>$s(t,0,e,(n,r)=>r>=b)))})),d[c]=f}),this._=d,this.len+=e}delete(b,e){const d=e-b+1,m={};this.each((f,c)=>{const u=parseInt(f,10);ue&&(m[u-d]=c,this.eachCells(f,(s,t)=>{t.text&&t.text[0]==="="&&(t.text=t.text.replace(/[a-zA-Z]{1,3}\d+/g,n=>$s(n,0,-d,(r,i)=>i>e)))}))}),this._=m,this.len-=d}insertColumn(b,e=1){this.each((d,m)=>{const f={};this.eachCells(d,(c,u)=>{let s=parseInt(c,10);s>=b&&(s+=e,u.text&&u.text[0]==="="&&(u.text=u.text.replace(/[a-zA-Z]{1,3}\d+/g,t=>$s(t,e,0,n=>n>=b)))),f[s]=u}),m.cells=f})}deleteColumn(b,e){const d=e-b+1;this.each((m,f)=>{const c={};this.eachCells(m,(u,s)=>{const t=parseInt(u,10);te&&(c[t-d]=s,s.text&&s.text[0]==="="&&(s.text=s.text.replace(/[a-zA-Z]{1,3}\d+/g,n=>$s(n,-d,0,r=>r>e))))}),f.cells=c})}deleteCells(b,e="all"){b.each((d,m)=>{this.deleteCell(d,m,e)})}deleteCell(b,e,d="all"){const m=this.get(b);if(m!==null){const f=this.getCell(b,e);f!==null&&f.editable!==!1&&(d==="all"?delete m.cells[e]:d==="text"?(f.text&&delete f.text,f.value&&delete f.value):d==="format"?(f.style!==void 0&&delete f.style,f.merge&&delete f.merge):d==="merge"&&f.merge&&delete f.merge)}}maxCell(){const b=Object.keys(this._),e=b[b.length-1],d=this._[e];if(d){const{cells:m}=d,f=Object.keys(m),c=f[f.length-1];return[parseInt(e,10),parseInt(c,10)]}return[0,0]}each(b){Object.entries(this._).forEach(([e,d])=>{b(e,d)})}eachCells(b,e){this._[b]&&this._[b].cells&&Object.entries(this._[b].cells).forEach(([d,m])=>{e(d,m)})}setData(b){b.len&&(this.len=b.len,delete b.len),this._=b}getData(){const{len:b}=this;return Object.assign({len:b},this._)}}class hg{constructor({len:b,width:e,indexWidth:d,minWidth:m}){this._={},this.len=b,this.width=e,this.indexWidth=d,this.minWidth=m}setData(b){b.len&&(this.len=b.len,delete b.len),this._=b}getData(){const{len:b}=this;return Object.assign({len:b},this._)}getWidth(b){if(this.isHide(b))return 0;const e=this._[b];return e&&e.width?e.width:this.width}getOrNew(b){return this._[b]=this._[b]||{},this._[b]}setWidth(b,e){const d=this.getOrNew(b);d.width=e}unhide(b){let e=b;for(;e>0&&(e-=1,this.isHide(e));)this.setHide(e,!1)}isHide(b){const e=this._[b];return e&&e.hide}setHide(b,e){const d=this.getOrNew(b);e===!0?d.hide=!0:delete d.hide}setStyle(b,e){const d=this.getOrNew(b);d.style=e}sumWidth(b,e){return qr.rangeSum(b,e,d=>this.getWidth(d))}totalWidth(){return this.sumWidth(0,this.len)}}const ug={toolbar:{undo:"Undo",redo:"Redo",print:"Print",paintformat:"Paint format",clearformat:"Clear format",format:"Format",fontName:"Font",fontSize:"Font size",fontBold:"Font bold",fontItalic:"Font italic",underline:"Underline",strike:"Strike",color:"Text color",bgcolor:"Fill color",border:"Borders",merge:"Merge cells",align:"Horizontal align",valign:"Vertical align",textwrap:"Text wrapping",freeze:"Freeze cell",autofilter:"Filter",formula:"Functions",more:"More"},contextmenu:{copy:"Copy",cut:"Cut",paste:"Paste",pasteValue:"Paste values only",pasteFormat:"Paste format only",hide:"Hide",insertRow:"Insert row",insertColumn:"Insert column",deleteSheet:"Delete",deleteRow:"Delete row",deleteColumn:"Delete column",deleteCell:"Delete cell",deleteCellText:"Delete cell text",validation:"Data validations",cellprintable:"Enable export",cellnonprintable:"Disable export",celleditable:"Enable editing",cellnoneditable:"Disable editing"},print:{size:"Paper size",orientation:"Page orientation",orientations:["Landscape","Portrait"]},format:{normal:"Normal",text:"Plain Text",number:"Number",percent:"Percent",rmb:"RMB",usd:"USD",eur:"EUR",date:"Date",time:"Time",datetime:"Date time",duration:"Duration"},formula:{sum:"Sum",average:"Average",max:"Max",min:"Min",_if:"IF",and:"AND",or:"OR",concat:"Concat"},validation:{required:"it must be required",notMatch:"it not match its validation rule",between:"it is between {} and {}",notBetween:"it is not between {} and {}",notIn:"it is not in list",equal:"it equal to {}",notEqual:"it not equal to {}",lessThan:"it less than {}",lessThanEqual:"it less than or equal to {}",greaterThan:"it greater than {}",greaterThanEqual:"it greater than or equal to {}"},error:{pasteForMergedCell:"Unable to do this for merged cells"},calendar:{weeks:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"]},button:{next:"Next",cancel:"Cancel",remove:"Remove",save:"Save",ok:"OK"},sort:{desc:"Sort Z -> A",asc:"Sort A -> Z"},filter:{empty:"empty"},dataValidation:{mode:"Mode",range:"Cell Range",criteria:"Criteria",modeType:{cell:"Cell",column:"Colun",row:"Row"},type:{list:"List",number:"Number",date:"Date",phone:"Phone",email:"Email"},operator:{be:"between",nbe:"not betwwen",lt:"less than",lte:"less than or equal to",gt:"greater than",gte:"greater than or equal to",eq:"equal to",neq:"not equal to"}}};let cf=["en"];const ih={en:ug};function Cc(N,b){if(b)for(const e of cf){if(!b[e])break;let d=b[e];const m=N.match(/(?:\\.|[^.])+/g);for(let f=0;fCr(N)}function sh(N,b,e=!1){e?cf=[N]:cf.unshift(N),b&&(ih[N]=b)}const Tc={phone:/^[1-9]\d{10}$/,email:/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/};function Pn(N,b,...e){let d="";return N||(d=Cr(`validation.${b}`,...e)),[N,d]}class ah{constructor(b,e,d,m){this.required=e,this.value=d,this.type=b,this.operator=m,this.message=""}parseValue(b){const{type:e}=this;return e==="date"?new Date(b):e==="number"?Number(b):b}equals(b){let e=this.type===b.type&&this.required===b.required&&this.operator===b.operator;return e&&(Array.isArray(this.value)?e=qr.arrayEquals(this.value,b.value):e=this.value===b.value),e}values(){return this.value.split(",")}validate(b){const{required:e,operator:d,value:m,type:f}=this;if(e&&/^\s*$/.test(b))return Pn(!1,"required");if(/^\s*$/.test(b))return[!0];if(Tc[f]&&!Tc[f].test(b))return Pn(!1,"notMatch");if(f==="list")return Pn(this.values().includes(b),"notIn");if(d){const c=this.parseValue(b);if(d==="be"){const[u,s]=m;return Pn(c>=this.parseValue(u)&&c<=this.parseValue(s),"between",u,s)}if(d==="nbe"){const[u,s]=m;return Pn(cthis.parseValue(s),"notBetween",u,s)}if(d==="eq")return Pn(c===this.parseValue(m),"equal",m);if(d==="neq")return Pn(c!==this.parseValue(m),"notEqual",m);if(d==="lt")return Pn(cthis.parseValue(m),"greaterThan",m);if(d==="gte")return Pn(c>=this.parseValue(m),"greaterThanEqual",m)}return[!0]}}class Ua{constructor(b,e,d){this.refs=e,this.mode=b,this.validator=d}includes(b,e){const{refs:d}=this;for(let m=0;m{const m=_r.valueOf(d);m.intersects(b)?m.difference(b).forEach(c=>e.push(c.toString())):e.push(d)}),this.refs=e}getData(){const{refs:b,mode:e,validator:d}=this,{type:m,required:f,operator:c,value:u}=d;return{refs:b,mode:e,type:m,required:f,operator:c,value:u}}static valueOf({refs:b,mode:e,type:d,required:m,operator:f,value:c}){return new Ua(e,b,new ah(d,m,c,f))}}class dg{constructor(){this._=[],this.errors=new Map}getError(b,e){return this.errors.get(`${b}_${e}`)}validate(b,e,d){const m=this.get(b,e),f=`${b}_${e}`,{errors:c}=this;if(m!==null){const[u,s]=m.validator.validate(d);u?c.delete(f):c.set(f,s)}else c.delete(f);return!0}add(b,e,{type:d,required:m,value:f,operator:c}){const u=new ah(d,m,f,c),s=this.getByValidator(u);s!==null?s.addRef(e):this._.push(new Ua(b,[e],u))}getByValidator(b){for(let e=0;e{e.remove(b)})}each(b){this._.forEach(e=>b(e))}getData(){return this._.filter(b=>b.refs.length>0).map(b=>b.getData())}setData(b){this._=b.map(e=>Ua.valueOf(e))}}const pg={mode:"edit",view:{height:()=>document.documentElement.clientHeight,width:()=>document.documentElement.clientWidth},showGrid:!0,showToolbar:!0,showContextmenu:!0,showBottomBar:!0,row:{len:100,height:25},col:{len:26,width:100,indexWidth:60,minWidth:60},style:{bgcolor:"#ffffff",align:"left",valign:"middle",textwrap:!1,strike:!1,underline:!1,color:"#0a0a0a",font:{name:"Arial",size:10,bold:!1,italic:!1},format:"normal"}},mg=41,gg=41,Ac=(N,b)=>Object.prototype.hasOwnProperty.call(N,b);function kc(N,b,e=()=>{}){const{merges:d}=this,m=b.clone(),[f,c]=N.size(),[u,s]=b.size();return f>u&&(m.eri=b.sri+f-1),c>s&&(m.eci=b.sci+c-1),d.intersects(m)?(e(Cr("error.pasteForMergedCell")),!1):!0}function Mc(N,b,e,d=!1){const{rows:m,merges:f}=this;(e==="all"||e==="format")&&(m.deleteCells(b,e),f.deleteWithin(b)),m.copyPaste(N,b,e,d,(c,u,s)=>{if(s&&s.merge){const[t,n]=s.merge;if(t<=0&&n<=0)return;f.add(new _r(c,u,c+t,u+n))}})}function bg(N,b){const{clipboard:e,rows:d,merges:m}=this;d.cutPaste(N,b),m.move(N,b.sri-N.sri,b.sci-N.sci),e.clear()}function hs(N,b,e){const{styles:d,rows:m}=this,f=m.getCellOrNew(N,b);let c={};f.style!==void 0&&(c=qr.cloneDeep(d[f.style])),c=qr.merge(c,{border:e}),f.style=this.addStyle(c)}function vg({mode:N,style:b,color:e}){const{styles:d,selector:m,rows:f}=this,{sri:c,sci:u,eri:s,eci:t}=m.range,n=!this.isSignleSelected();if(!(!n&&(N==="inside"||N==="horizontal"||N==="vertical"))){if(N==="outside"&&!n)hs.call(this,c,u,{top:[b,e],bottom:[b,e],left:[b,e],right:[b,e]});else if(N==="none")m.range.each((r,i)=>{const o=f.getCell(r,i);if(o&&o.style!==void 0){const l=qr.cloneDeep(d[o.style]);delete l.border,o.style=this.addStyle(l)}});else if(N==="all"||N==="inside"||N==="outside"||N==="horizontal"||N==="vertical"){const r=[];for(let i=c;i<=s;i+=1)for(let o=u;o<=t;o+=1){const l=[];for(let S=0;Sr.splice(S,1)),o>t)break;const a=f.getCell(i,o);let[g,v]=[0,0];a&&a.merge&&([g,v]=a.merge,r.push([i,o,g,v]));const h=g>0&&i+g===s,w=v>0&&o+v===t;let y={};N==="all"?y={bottom:[b,e],top:[b,e],left:[b,e],right:[b,e]}:N==="inside"?(!w&&o0&&hs.call(this,i,o,y),o+=v}}else if(N==="top"||N==="bottom")for(let r=u;r<=t;r+=1)N==="top"&&(hs.call(this,c,r,{top:[b,e]}),r+=f.getCellMerge(c,r)[1]),N==="bottom"&&(hs.call(this,s,r,{bottom:[b,e]}),r+=f.getCellMerge(s,r)[1]);else if(N==="left"||N==="right")for(let r=c;r<=s;r+=1)N==="left"&&(hs.call(this,r,u,{left:[b,e]}),r+=f.getCellMerge(r,u)[0]),N==="right"&&(hs.call(this,r,t,{right:[b,e]}),r+=f.getCellMerge(r,t)[0])}}function yg(N,b){const{rows:e}=this,d=this.freezeTotalHeight();let m=e.height;d+e.heightN);c+=1)f.has(c)||(s=e.getHeight(c),u+=s);return u-=s,u<=0?{ri:-1,top:0,height:s}:{ri:c-1,top:u,height:s}}function wg(N,b){const{cols:e}=this,d=this.freezeTotalWidth();let m=e.indexWidth;d+e.indexWidthe.getWidth(s));return c<=0?{ci:-1,left:0,width:e.indexWidth}:{ci:f-1,left:c,width:u}}class xg{constructor(b,e){this.settings=qr.merge(pg,e||{}),this.name=b||"sheet",this.freeze=[0,0],this.styles=[],this.merges=new vf,this.rows=new cg(this.settings.row),this.cols=new hg(this.settings.col),this.validations=new dg,this.hyperlinks={},this.comments={},this.selector=new Q1,this.scroll=new q1,this.history=new eg,this.clipboard=new tg,this.autoFilter=new rg,this.change=()=>{},this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map}addValidation(b,e,d){this.changeData(()=>{this.validations.add(b,e,d)})}removeValidation(){const{range:b}=this.selector;this.changeData(()=>{this.validations.remove(b)})}getSelectedValidator(){const{ri:b,ci:e}=this.selector,d=this.validations.get(b,e);return d?d.validator:null}getSelectedValidation(){const{ri:b,ci:e,range:d}=this.selector,m=this.validations.get(b,e),f={ref:d.toString()};return m!==null&&(f.mode=m.mode,f.validator=m.validator),f}canUndo(){return this.history.canUndo()}canRedo(){return this.history.canRedo()}undo(){this.history.undo(this.getData(),b=>{this.setData(b)})}redo(){this.history.redo(this.getData(),b=>{this.setData(b)})}copy(){this.clipboard.copy(this.selector.range)}copyToSystemClipboard(){if(navigator.clipboard===void 0)return;let b="";const e=this.rows.getData();for(let d=this.selector.range.sri;d<=this.selector.range.eri;d+=1){if(Ac(e,d)){for(let m=this.selector.range.sci;m<=this.selector.range.eci;m+=1)if(m>this.selector.range.sci&&(b+=" "),Ac(e[d].cells,m)){const f=String(e[d].cells[m].text);f.indexOf(` +`)===-1&&f.indexOf(" ")===-1&&f.indexOf('"')===-1?b+=f:b+=`"${f}"`}}else for(let m=this.selector.range.sci;m<=this.selector.range.eci;m+=1)b+=" ";b+=` +`}navigator.clipboard.writeText(b).then(()=>{},d=>{console.log("text copy to the system clipboard error ",b,d)})}cut(){this.clipboard.cut(this.selector.range)}paste(b="all",e=()=>{}){const{clipboard:d,selector:m}=this;return d.isClear()||!kc.call(this,d.range,m.range,e)?!1:(this.changeData(()=>{d.isCopy()?Mc.call(this,d.range,m.range,b):d.isCut()&&bg.call(this,d.range,m.range)}),!0)}pasteFromText(b){const e=b.split(`\r +`).map(f=>f.replace(/"/g,"").split(" "));e.length>0&&(e.length-=1);const{rows:d,selector:m}=this;this.changeData(()=>{d.paste(e,m.range)})}autofill(b,e,d=()=>{}){const m=this.selector.range;return kc.call(this,m,b,d)?(this.changeData(()=>{Mc.call(this,m,b,e,!0)}),!0):!1}clearClipboard(){this.clipboard.clear()}calSelectedRangeByEnd(b,e){const{selector:d,rows:m,cols:f,merges:c}=this;let{sri:u,sci:s,eri:t,eci:n}=d.range;const r=d.ri,i=d.ci;let[o,l]=[b,e];return b<0&&(o=m.len-1),e<0&&(l=f.len-1),o>r?[u,t]=[r,o]:[u,t]=[o,r],l>i?[s,n]=[i,l]:[s,n]=[l,i],d.range=c.union(new _r(u,s,t,n)),d.range=c.union(d.range),d.range}calSelectedRangeByStart(b,e){const{selector:d,rows:m,cols:f,merges:c}=this;let u=c.getFirstIncludes(b,e);return u===null&&(u=new _r(b,e,b,e),b===-1&&(u.sri=0,u.eri=m.len-1),e===-1&&(u.sci=0,u.eci=f.len-1)),d.range=u,u}setSelectedCellAttr(b,e){this.changeData(()=>{const{selector:d,styles:m,rows:f}=this;if(b==="merge")e?this.merge():this.unmerge();else if(b==="border")vg.call(this,e);else if(b==="formula"){const{ri:c,ci:u,range:s}=d;if(d.multiple()){const[t,n]=d.size(),{sri:r,sci:i,eri:o,eci:l}=s;if(t>1)for(let a=i;a<=l;a+=1){const g=f.getCellOrNew(o+1,a);g.text=`=${e}(${ai(a,r)}:${ai(a,o)})`}else if(n>1){const a=f.getCellOrNew(c,l+1);a.text=`=${e}(${ai(i,c)}:${ai(l,c)})`}}else{const t=f.getCellOrNew(c,u);t.text=`=${e}()`}}else d.range.each((c,u)=>{const s=f.getCellOrNew(c,u);let t={};if(s.style!==void 0&&(t=qr.cloneDeep(m[s.style])),b==="format")t.format=e,s.style=this.addStyle(t);else if(b==="font-bold"||b==="font-italic"||b==="font-name"||b==="font-size"){const n={};n[b.split("-")[1]]=e,t.font=Object.assign(t.font||{},n),s.style=this.addStyle(t)}else b==="strike"||b==="textwrap"||b==="underline"||b==="align"||b==="valign"||b==="color"||b==="bgcolor"?(t[b]=e,s.style=this.addStyle(t)):s[b]=e})})}setSelectedCellText(b,e="input"){const{autoFilter:d,selector:m,rows:f}=this,{ri:c,ci:u}=m;let s=c;this.unsortedRowMap.has(c)&&(s=this.unsortedRowMap.get(c));const t=f.getCell(s,u),n=t?t.text:"";if(this.setCellText(s,u,b,e),d.active()){const r=d.getFilter(u);if(r){const i=r.value.findIndex(o=>o===n);i>=0&&r.value.splice(i,1,b)}}}getSelectedCell(){const{ri:b,ci:e}=this.selector;let d=b;return this.unsortedRowMap.has(b)&&(d=this.unsortedRowMap.get(b)),this.rows.getCell(d,e)}xyInSelectedRect(b,e){const{left:d,top:m,width:f,height:c}=this.getSelectedRect(),u=b-this.cols.indexWidth,s=e-this.rows.height;return u>d&&um&&s0&&v>n&&(l=n),g>0&&g>r&&(a=r),{l:n,t:r,left:l,top:a,height:i,width:o,scroll:e}}getCellRectByXY(b,e){const{scroll:d,merges:m,rows:f,cols:c}=this;let{ri:u,top:s,height:t}=yg.call(this,e,d.y),{ci:n,left:r,width:i}=wg.call(this,b,d.x);if(n===-1&&(i=c.totalWidth()),u===-1&&(t=f.totalHeight()),u>=0||n>=0){const o=m.getFirstIncludes(u,n);o&&(u=o.sri,n=o.sci,{left:r,top:s,width:i,height:t}=this.cellRect(u,n))}return{ri:u,ci:n,left:r,top:s,width:i,height:t}}isSignleSelected(){const{sri:b,sci:e,eri:d,eci:m}=this.selector.range,f=this.getCell(b,e);if(f&&f.merge){const[c,u]=f.merge;if(b+c===d&&e+u===m)return!0}return!this.selector.multiple()}canUnmerge(){const{sri:b,sci:e,eri:d,eci:m}=this.selector.range,f=this.getCell(b,e);if(f&&f.merge){const[c,u]=f.merge;if(b+c===d&&e+u===m)return!0}return!1}merge(){const{selector:b,rows:e}=this;if(this.isSignleSelected())return;const[d,m]=b.size();if(d>1||m>1){const{sri:f,sci:c}=b.range;this.changeData(()=>{const u=e.getCellOrNew(f,c);u.merge=[d-1,m-1],this.merges.add(b.range),this.rows.deleteCells(b.range),this.rows.setCell(f,c,u)})}}unmerge(){const{selector:b}=this;if(!this.isSignleSelected())return;const{sri:e,sci:d}=b.range;this.changeData(()=>{this.rows.deleteCell(e,d,"merge"),this.merges.deleteWithin(b.range)})}canAutofilter(){return!this.autoFilter.active()}autofilter(){const{autoFilter:b,selector:e}=this;this.changeData(()=>{b.active()?(b.clear(),this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map):b.ref=e.range.toString()})}setAutoFilter(b,e,d,m){const{autoFilter:f}=this;f.addFilter(b,d,m),f.setSort(b,e),this.resetAutoFilter()}resetAutoFilter(){const{autoFilter:b,rows:e}=this;if(!b.active())return;const{sort:d}=b,{rset:m,fset:f}=b.filteredRows((s,t)=>e.getCell(s,t)),c=Array.from(f),u=Array.from(f);d&&c.sort((s,t)=>d.order==="asc"?s-t:d.order==="desc"?t-s:0),this.exceptRowSet=m,this.sortedRowMap=new Map,this.unsortedRowMap=new Map,c.forEach((s,t)=>{this.sortedRowMap.set(u[t],s),this.unsortedRowMap.set(s,u[t])})}deleteCell(b="all"){const{selector:e}=this;this.changeData(()=>{this.rows.deleteCells(e.range,b),(b==="all"||b==="format")&&this.merges.deleteWithin(e.range)})}insert(b,e=1){this.changeData(()=>{const{sri:d,sci:m}=this.selector.range,{rows:f,merges:c,cols:u}=this;let s=d;b==="row"?f.insert(d,e):b==="column"&&(f.insertColumn(m,e),s=m,u.len+=1),c.shift(b,s,e,(t,n,r,i)=>{const o=f.getCell(t,n);o.merge[0]+=r,o.merge[1]+=i})})}delete(b){this.changeData(()=>{const{rows:e,merges:d,selector:m,cols:f}=this,{range:c}=m,{sri:u,sci:s,eri:t,eci:n}=m.range,[r,i]=m.range.size();let o=u,l=r;b==="row"?e.delete(u,t):b==="column"&&(e.deleteColumn(s,n),o=c.sci,l=i,f.len-=1),d.shift(b,o,-l,(a,g,v,h)=>{const w=e.getCell(a,g);w.merge[0]+=v,w.merge[1]+=h,w.merge[0]===0&&w.merge[1]===0&&delete w.merge})})}scrollx(b,e){const{scroll:d,freeze:m,cols:f}=this,[,c]=m,[u,s,t]=qr.rangeReduceIf(c,f.len,0,0,b,r=>f.getWidth(r));let n=s;b>0&&(n+=t),d.x!==n&&(d.ci=b>0?u:0,d.x=n,e())}scrolly(b,e){const{scroll:d,freeze:m,rows:f}=this,[c]=m,[u,s,t]=qr.rangeReduceIf(c,f.len,0,0,b,r=>f.getHeight(r));let n=s;b>0&&(n+=t),d.y!==n&&(d.ri=b>0?u:0,d.y=n,e())}cellRect(b,e){const{rows:d,cols:m}=this,f=m.sumWidth(0,e),c=d.sumHeight(0,b),u=d.getCell(b,e);let s=m.getWidth(e),t=d.getHeight(b);if(u!==null&&u.merge){const[n,r]=u.merge;if(n>0)for(let i=1;i<=n;i+=1)t+=d.getHeight(b+i);if(r>0)for(let i=1;i<=r;i+=1)s+=m.getWidth(e+i)}return{left:f,top:c,width:s,height:t,cell:u}}getCell(b,e){return this.rows.getCell(b,e)}getCellTextOrDefault(b,e){const d=this.getCell(b,e);return d&&d.text?d.text:""}getCellStyle(b,e){const d=this.getCell(b,e);return d&&d.style!==void 0?this.styles[d.style]:null}getCellStyleOrDefault(b,e){const{styles:d,rows:m}=this,f=m.getCell(b,e),c=f&&f.style!==void 0?d[f.style]:{};return qr.merge(this.defaultStyle(),c)}getSelectedCellStyle(){const{ri:b,ci:e}=this.selector;return this.getCellStyleOrDefault(b,e)}setCellText(b,e,d,m){const{rows:f,history:c,validations:u}=this;m==="finished"?(f.setCellText(b,e,""),c.add(this.getData()),f.setCellText(b,e,d)):(f.setCellText(b,e,d),this.change(this.getData())),u.validate(b,e,d)}freezeIsActive(){const[b,e]=this.freeze;return b>0||e>0}setFreeze(b,e){this.changeData(()=>{this.freeze=[b,e]})}freezeTotalWidth(){return this.cols.sumWidth(0,this.freeze[1])}freezeTotalHeight(){return this.rows.sumHeight(0,this.freeze[0])}setRowHeight(b,e){this.changeData(()=>{this.rows.setHeight(b,e)})}setColWidth(b,e){this.changeData(()=>{this.cols.setWidth(b,e)})}viewHeight(){const{view:b,showToolbar:e,showBottomBar:d}=this.settings;let m=b.height();return d&&(m-=gg),e&&(m-=mg),m}viewWidth(){return this.settings.view.width()}freezeViewRange(){const[b,e]=this.freeze;return new _r(0,0,b-1,e-1,this.freezeTotalWidth(),this.freezeTotalHeight())}contentRange(){const{rows:b,cols:e}=this,[d,m]=b.maxCell(),f=b.sumHeight(0,d+1),c=e.sumWidth(0,m+1);return new _r(0,0,d,m,c,f)}exceptRowTotalHeight(b,e){const{exceptRowSet:d,rows:m}=this,f=Array.from(d);let c=0;return f.forEach(u=>{if(ue){const s=m.getHeight(u);c+=s}}),c}viewRange(){const{scroll:b,rows:e,cols:d,freeze:m,exceptRowSet:f}=this;let{ri:c,ci:u}=b;c<=0&&([c]=m),u<=0&&([,u]=m);let[s,t]=[0,0],[n,r]=[e.len,d.len];for(let i=c;ithis.viewHeight()));i+=1);for(let i=u;ithis.viewWidth()));i+=1);return new _r(c,u,n,r,s,t)}eachMergesInView(b,e){this.merges.filterIntersects(b).forEach(d=>e(d))}hideRowsOrCols(){const{rows:b,cols:e,selector:d}=this,[m,f]=d.size(),{sri:c,sci:u,eri:s,eci:t}=d.range;if(m===b.len)for(let n=u;n<=t;n+=1)e.setHide(n,!0);else if(f===e.len)for(let n=c;n<=s;n+=1)b.setHide(n,!0)}unhideRowsOrCols(b,e){this[`${b}s`].unhide(e)}rowEach(b,e,d){let m=0;const{rows:f}=this,c=this.exceptRowSet,u=[...c];let s=0;for(let t=0;t0&&(d(t,m,n),m+=n,m>this.viewHeight()))break}}colEach(b,e,d){let m=0;const{cols:f}=this;for(let c=b;c<=e;c+=1){const u=f.getWidth(c);if(u>0&&(d(c,m,u),m+=u,m>this.viewWidth()))break}}defaultStyle(){return this.settings.style}addStyle(b){const{styles:e}=this;for(let d=0;d{if(e==="merges"||e==="rows"||e==="cols"||e==="validations")this[e].setData(b[e]);else if(e==="freeze"){const[d,m]=xi(b[e]);this.freeze=[m,d]}else e==="autofilter"?this.autoFilter.setData(b[e]):b[e]!==void 0&&(this[e]=b[e])}),this}getData(){const{name:b,freeze:e,styles:d,merges:m,rows:f,cols:c,validations:u,autoFilter:s}=this;return{name:b,freeze:ai(e[1],e[0]),styles:d,merges:m.getData(),rows:f.getData(),cols:c.getData(),validations:u.getData(),autofilter:s.getData()}}}function tn(N,b,e){N.addEventListener(b,e)}function Xa(N,b,e){N.removeEventListener(b,e)}function gs(N){N.xclickoutside&&(Xa(window.document.body,"click",N.xclickoutside),delete N.xclickoutside)}function Ws(N,b){N.xclickoutside=e=>{e.detail===2||N.contains(e.target)||(b?b(N):(N.hide(),gs(N)))},tn(window.document.body,"click",N.xclickoutside)}function oh(N,b,e){tn(N,"mousemove",b);const d=N;d.xEvtUp=m=>{Xa(N,"mousemove",b),Xa(N,"mouseup",N.xEvtUp),e(m)},tn(N,"mouseup",N.xEvtUp)}function Rc(N,b,e,d){let m="";Math.abs(N)>Math.abs(b)?(m=N>0?"right":"left",d(m,N,e)):(m=b>0?"down":"up",d(m,b,e))}function _g(N,{move:b,end:e}){let d=0,m=0;tn(N,"touchstart",f=>{const{pageX:c,pageY:u}=f.touches[0];d=c,m=u}),tn(N,"touchmove",f=>{if(!b)return;const{pageX:c,pageY:u}=f.changedTouches[0],s=c-d,t=u-m;(Math.abs(s)>10||Math.abs(t)>10)&&(Rc(s,t,f,b),d=c,m=u),f.preventDefault()}),tn(N,"touchend",f=>{if(!e)return;const{pageX:c,pageY:u}=f.changedTouches[0],s=c-d,t=u-m;Rc(s,t,f,e)})}function Sg(){const N=new Map;function b(c,u){const s=()=>{const n=N.get(c);return Array.isArray(n)&&n.push(u)||!1},t=()=>N.set(c,[].concat(u));return N.has(c)&&s()||t()}function e(c,u){const s=()=>{const t=N.get(c);for(const n of t)n.call(null,...u)};return N.has(c)&&s()}function d(c,u){const s=()=>{const t=N.get(c),n=t.indexOf(u);return n>=0&&t.splice(n,1)&&N.get(c).length===0&&N.delete(c)};return N.has(c)&&s()}function m(c,u){const s=(...t)=>{u.call(null,...t),d(c,s)};return b(c,s)}function f(){N.clear()}return{get current(){return N},on:b,once:m,fire:e,removeListener:d,removeAllListeners:f}}const Ze="x-spreadsheet";class Ic{constructor(b=!1,e){this.moving=!1,this.vertical=b,this.el=$e("div",`${Ze}-resizer ${b?"vertical":"horizontal"}`).children(this.unhideHoverEl=$e("div",`${Ze}-resizer-hover`).on("dblclick.stop",d=>this.mousedblclickHandler(d)).css("position","absolute").hide(),this.hoverEl=$e("div",`${Ze}-resizer-hover`).on("mousedown.stop",d=>this.mousedownHandler(d)),this.lineEl=$e("div",`${Ze}-resizer-line`).hide()).hide(),this.cRect=null,this.finishedFn=null,this.minDistance=e,this.unhideFn=()=>{}}showUnhide(b){this.unhideIndex=b,this.unhideHoverEl.show()}hideUnhide(){this.unhideHoverEl.hide()}show(b,e){const{moving:d,vertical:m,hoverEl:f,lineEl:c,el:u,unhideHoverEl:s}=this;if(d)return;this.cRect=b;const{left:t,top:n,width:r,height:i}=b;u.offset({left:m?t+r-5:t,top:m?n:n+i-5}).show(),f.offset({width:m?5:r,height:m?i:5}),c.offset({width:m?0:e.width,height:m?e.height:0}),s.offset({left:m?5-r:t,top:m?n:5-i,width:m?5:r,height:m?i:5})}hide(){this.el.offset({left:0,top:0}).hide(),this.hideUnhide()}mousedblclickHandler(){this.unhideIndex&&this.unhideFn(this.unhideIndex)}mousedownHandler(b){let e=b;const{el:d,lineEl:m,cRect:f,vertical:c,minDistance:u}=this;let s=c?f.width:f.height;m.show(),oh(window,t=>{this.moving=!0,e!==null&&t.buttons===1&&(c?(s+=t.movementX,s>u&&d.css("left",`${f.left+s}px`)):(s+=t.movementY,s>u&&d.css("top",`${f.top+s}px`)),e=t)},()=>{e=null,m.hide(),this.moving=!1,this.hide(),this.finishedFn&&(s{}).on("scroll.stop",e=>{const{scrollTop:d,scrollLeft:m}=e.target;this.moveFn&&this.moveFn(this.vertical?d:m,e)})}move(b){return this.el.scroll(b),this}scroll(){return this.el.scroll()}set(b,e){const d=b-1;if(e>d){const m=this.vertical?"height":"width";this.el.css(m,`${d-15}px`).show(),this.contentEl.css(this.vertical?"width":"height","1px").css(m,`${e}px`)}else this.el.hide();return this}}const Oa=2*2-1;let hf=10;class Fa{constructor(b=!1){this.useHideInput=b,this.inputChange=()=>{},this.cornerEl=$e("div",`${Ze}-selector-corner`),this.areaEl=$e("div",`${Ze}-selector-area`).child(this.cornerEl).hide(),this.clipboardEl=$e("div",`${Ze}-selector-clipboard`).hide(),this.autofillEl=$e("div",`${Ze}-selector-autofill`).hide(),this.el=$e("div",`${Ze}-selector`).css("z-index",`${hf}`).children(this.areaEl,this.clipboardEl,this.autofillEl).hide(),b&&(this.hideInput=$e("input","").on("compositionend",e=>{this.inputChange(e.target.value)}),this.el.child(this.hideInputDiv=$e("div","hide-input").child(this.hideInput)),this.el.child(this.hideInputDiv=$e("div","hide-input").child(this.hideInput))),hf+=1}setOffset(b){return this.el.offset(b).show(),this}hide(){return this.el.hide(),this}setAreaOffset(b){const{left:e,top:d,width:m,height:f}=b,c={width:m-Oa+.8,height:f-Oa+.8,left:e-.8,top:d-.8};this.areaEl.offset(c).show(),this.useHideInput&&(this.hideInputDiv.offset(c),this.hideInput.val("").focus())}setClipboardOffset(b){const{left:e,top:d,width:m,height:f}=b;this.clipboardEl.offset({left:e,top:d,width:m-5,height:f-5})}showAutofill(b){const{left:e,top:d,width:m,height:f}=b;this.autofillEl.offset({width:m-Oa,height:f-Oa,left:e,top:d}).show()}hideAutofill(){this.autofillEl.hide()}showClipboard(){this.clipboardEl.show()}hideClipboard(){this.clipboardEl.hide()}}function yf(N){const{data:b}=this,{left:e,top:d,width:m,height:f,scroll:c,l:u,t:s}=N,t=b.freezeTotalWidth(),n=b.freezeTotalHeight();let r=e-t;t>u&&(r-=c.x);let i=d-n;return n>s&&(i-=c.y),{left:r,top:i,width:m,height:f}}function wf(N){const{data:b}=this,{left:e,width:d,height:m,l:f,t:c,scroll:u}=N,s=b.freezeTotalWidth();let t=e-s;return s>f&&(t-=u.x),{left:t,top:c,width:d,height:m}}function xf(N){const{data:b}=this,{top:e,width:d,height:m,l:f,t:c,scroll:u}=N,s=b.freezeTotalHeight();let t=e-s;return s>c&&(t-=u.y),{left:f,top:t,width:d,height:m}}function uf(N){const{br:b}=this;b.setAreaOffset(yf.call(this,N))}function Eg(N){const{tl:b}=this;b.setAreaOffset(N)}function fh(N){const{t:b}=this;b.setAreaOffset(wf.call(this,N))}function lh(N){const{l:b}=this;b.setAreaOffset(xf.call(this,N))}function ch(N){const{l:b}=this;b.setClipboardOffset(xf.call(this,N))}function df(N){const{br:b}=this;b.setClipboardOffset(yf.call(this,N))}function Cg(N){const{tl:b}=this;b.setClipboardOffset(N)}function hh(N){const{t:b}=this;b.setClipboardOffset(wf.call(this,N))}function Fc(N){uf.call(this,N),Eg.call(this,N),fh.call(this,N),lh.call(this,N)}function Pc(N){df.call(this,N),Cg.call(this,N),hh.call(this,N),ch.call(this,N)}class Tg{constructor(b){this.inputChange=()=>{},this.data=b,this.br=new Fa(!0),this.t=new Fa,this.l=new Fa,this.tl=new Fa,this.br.inputChange=e=>{this.inputChange(e)},this.br.el.show(),this.offset=null,this.areaOffset=null,this.indexes=null,this.range=null,this.arange=null,this.el=$e("div",`${Ze}-selectors`).children(this.tl.el,this.t.el,this.l.el,this.br.el).hide(),this.lastri=-1,this.lastci=-1,hf+=1}resetData(b){this.data=b,this.range=b.selector.range,this.resetAreaOffset()}hide(){this.el.hide()}resetOffset(){const{data:b,tl:e,t:d,l:m,br:f}=this,c=b.freezeTotalHeight(),u=b.freezeTotalWidth();c>0||u>0?(e.setOffset({width:u,height:c}),d.setOffset({left:u,height:c}),m.setOffset({top:c,width:u}),f.setOffset({left:u,top:c})):(e.hide(),d.hide(),m.hide(),f.setOffset({left:0,top:0}))}resetAreaOffset(){const b=this.data.getSelectedRect(),e=this.data.getClipboardRect();Fc.call(this,b),Pc.call(this,e),this.resetOffset()}resetBRTAreaOffset(){const b=this.data.getSelectedRect(),e=this.data.getClipboardRect();uf.call(this,b),fh.call(this,b),df.call(this,e),hh.call(this,e),this.resetOffset()}resetBRLAreaOffset(){const b=this.data.getSelectedRect(),e=this.data.getClipboardRect();uf.call(this,b),lh.call(this,b),df.call(this,e),ch.call(this,e),this.resetOffset()}set(b,e,d=!0){const{data:m}=this,f=m.calSelectedRangeByStart(b,e),{sri:c,sci:u}=f;if(d){let[s,t]=[b,e];b<0&&(s=0),e<0&&(t=0),m.selector.setIndexes(s,t),this.indexes=[s,t]}this.moveIndexes=[c,u],this.range=f,this.resetAreaOffset(),this.el.show()}setEnd(b,e,d=!0){const{data:m,lastri:f,lastci:c}=this;if(d){if(b===f&&e===c)return;this.lastri=b,this.lastci=e}this.range=m.calSelectedRangeByEnd(b,e),Fc.call(this,this.data.getSelectedRect())}reset(){const{eri:b,eci:e}=this.data.selector.range;this.setEnd(b,e)}showAutofill(b,e){if(b===-1&&e===-1)return;const{sri:d,sci:m,eri:f,eci:c}=this.range,[u,s]=[b,e],t=d-b,n=m-e,r=f-b,i=c-e;if(n>0)this.arange=new _r(d,s,f,m-1);else if(t>0)this.arange=new _r(u,m,d-1,c);else if(i<0)this.arange=new _r(d,c+1,f,s);else if(r<0)this.arange=new _r(f+1,m,u,c);else{this.arange=null;return}if(this.arange!==null){const o=this.data.getRect(this.arange);o.width+=2,o.height+=2;const{br:l,l:a,t:g,tl:v}=this;l.showAutofill(yf.call(this,o)),a.showAutofill(xf.call(this,o)),g.showAutofill(wf.call(this,o)),v.showAutofill(o)}}hideAutofill(){["br","l","t","tl"].forEach(b=>{this[b].hideAutofill()})}showClipboard(){const b=this.data.getClipboardRect();Pc.call(this,b),["br","l","t","tl"].forEach(e=>{this[e].showClipboard()})}hideClipboard(){["br","l","t","tl"].forEach(b=>{this[b].hideClipboard()})}}function Ag(N){N.preventDefault(),N.stopPropagation();const{filterItems:b}=this;b.length<=0||(this.itemIndex>=0&&b[this.itemIndex].toggle(),this.itemIndex-=1,this.itemIndex<0&&(this.itemIndex=b.length-1),b[this.itemIndex].toggle())}function kg(N){N.stopPropagation();const{filterItems:b}=this;b.length<=0||(this.itemIndex>=0&&b[this.itemIndex].toggle(),this.itemIndex+=1,this.itemIndex>b.length-1&&(this.itemIndex=0),b[this.itemIndex].toggle())}function Nc(N){N.preventDefault();const{filterItems:b}=this;b.length<=0||(N.stopPropagation(),this.itemIndex<0&&(this.itemIndex=0),b[this.itemIndex].el.click(),this.hide())}function Mg(N){const{keyCode:b}=N;switch(N.ctrlKey&&N.stopPropagation(),b){case 37:N.stopPropagation();break;case 38:Ag.call(this,N);break;case 39:N.stopPropagation();break;case 40:kg.call(this,N);break;case 13:Nc.call(this,N);break;case 9:Nc.call(this,N);break;default:N.stopPropagation();break}}class uh{constructor(b,e,d="200px"){this.filterItems=[],this.items=b,this.el=$e("div",`${Ze}-suggest`).css("width",d).hide(),this.itemClick=e,this.itemIndex=-1}setOffset(b){this.el.cssRemoveKeys("top","bottom").offset(b)}hide(){const{el:b}=this;this.filterItems=[],this.itemIndex=-1,b.hide(),gs(this.el.parent())}setItems(b){this.items=b}search(b){let{items:e}=this;if(/^\s*$/.test(b)||(e=e.filter(m=>(m.key||m).startsWith(b.toUpperCase()))),e=e.map(m=>{let{title:f}=m;f?typeof f=="function"&&(f=f()):f=m;const c=$e("div",`${Ze}-item`).child(f).on("click.stop",()=>{this.itemClick(m),this.hide()});return m.label&&c.child($e("div","label").html(m.label)),c}),this.filterItems=e,e.length<=0)return;const{el:d}=this;d.html("").children(...e).show(),Ws(d.parent(),()=>{this.hide()})}bindInputEvents(b){b.on("keydown",e=>Mg.call(this,e))}}class jr extends Li{constructor(b){super("div",`${Ze}-icon`),this.iconNameEl=$e("div",`${Ze}-icon-img ${b}`),this.child(this.iconNameEl)}setName(b){this.iconNameEl.className(`${Ze}-icon-img ${b}`)}}function Dc(N,b){N.setMonth(N.getMonth()+b)}function Rg(N,b){const e=new Date(N);return e.setDate(b-N.getDay()+1),e}function Ig(N,b,e){const d=new Date(N,b,1,23,59,59),m=[[],[],[],[],[],[]];for(let f=0;f<6;f+=1)for(let c=0;c<7;c+=1){const u=f*7+c,s=Rg(d,u),t=s.getMonth()!==b,n=s.getMonth()===e.getMonth()&&s.getDate()===e.getDate();m[f][c]={d:s,disabled:t,active:n}}return m}class Og{constructor(b){this.value=b,this.cvalue=new Date(b),this.headerLeftEl=$e("div","calendar-header-left"),this.bodyEl=$e("tbody",""),this.buildAll(),this.el=$e("div","x-spreadsheet-calendar").children($e("div","calendar-header").children(this.headerLeftEl,$e("div","calendar-header-right").children($e("a","calendar-prev").on("click.stop",()=>this.prev()).child(new jr("chevron-left")),$e("a","calendar-next").on("click.stop",()=>this.next()).child(new jr("chevron-right")))),$e("table","calendar-body").children($e("thead","").child($e("tr","").children(...Cr("calendar.weeks").map(e=>$e("th","cell").child(e)))),this.bodyEl)),this.selectChange=()=>{}}setValue(b){this.value=b,this.cvalue=new Date(b),this.buildAll()}prev(){const{value:b}=this;Dc(b,-1),this.buildAll()}next(){const{value:b}=this;Dc(b,1),this.buildAll()}buildAll(){this.buildHeaderLeft(),this.buildBody()}buildHeaderLeft(){const{value:b}=this;this.headerLeftEl.html(`${Cr("calendar.months")[b.getMonth()]} ${b.getFullYear()}`)}buildBody(){const{value:b,cvalue:e,bodyEl:d}=this,f=Ig(b.getFullYear(),b.getMonth(),e).map(c=>{const u=c.map(s=>{let t="cell";return s.disabled&&(t+=" disabled"),s.active&&(t+=" active"),$e("td","").child($e("div",t).on("click.stop",()=>{this.selectChange(s.d)}).child(s.d.getDate().toString()))});return $e("tr","").children(...u)});d.html("").children(...f)}}class Fg{constructor(){this.calendar=new Og(new Date),this.el=$e("div",`${Ze}-datepicker`).child(this.calendar.el).hide()}setValue(b){const{calendar:e}=this;return typeof b=="string"?/^\d{4}-\d{1,2}-\d{1,2}$/.test(b)&&e.setValue(new Date(b.replace(new RegExp("-","g"),"/"))):b instanceof Date&&e.setValue(b),this}change(b){this.calendar.selectChange=e=>{b(e),this.hide()}}show(){this.el.show()}hide(){this.el.hide()}}function Wa(){const{inputText:N}=this;if(!/^\s*$/.test(N)){const{textlineEl:b,textEl:e,areaOffset:d}=this,m=N.split(` +`),f=Math.max(...m.map(r=>r.length)),u=b.offset().width/N.length,s=(f+1)*u+5,t=this.viewFn().width-d.left-u;let n=m.length;if(s>d.width){let r=s;s>t&&(r=t,n+=parseInt(s/t,10),n+=s%t>0?1:0),e.css("width",`${r}px`)}n*=this.rowHeight,n>d.height&&e.css("height",`${n}px`)}}function Pg({target:N},b){const{value:e,selectionEnd:d}=N,m=`${e.slice(0,d)}${b}${e.slice(d)}`;N.value=m,N.setSelectionRange(d+1,d+1),this.inputText=m,this.textlineEl.html(m),Wa.call(this)}function Ng(N){const{keyCode:b,altKey:e}=N;b!==13&&b!==9&&N.stopPropagation(),b===13&&e&&(Pg.call(this,N,` +`),N.stopPropagation()),b===13&&!e&&N.preventDefault()}function Dg(N){const b=N.target.value,{suggest:e,textlineEl:d,validator:m}=this,{cell:f}=this;if(f!==null)if("editable"in f&&f.editable===!0||f.editable===void 0){if(this.inputText=b,m)m.type==="list"?e.search(b):e.hide();else{const c=b.lastIndexOf("=");c!==-1?e.search(b.substring(c+1)):e.hide()}d.html(b),Wa.call(this),this.change("input",b)}else N.target.value=f.text;else{if(this.inputText=b,m)m.type==="list"?e.search(b):e.hide();else{const c=b.lastIndexOf("=");c!==-1?e.search(b.substring(c+1)):e.hide()}d.html(b),Wa.call(this),this.change("input",b)}}function Bg(N){const{el:b}=this.textEl;setTimeout(()=>{b.focus(),b.setSelectionRange(N,N)},0)}function dh(N,b){const{textEl:e,textlineEl:d}=this;e.el.blur(),e.val(N),d.html(N),Bg.call(this,b)}function Lg(N){const{inputText:b,validator:e}=this;let d=0;if(e&&e.type==="list")this.inputText=N,d=this.inputText.length;else{const m=b.lastIndexOf("="),f=b.substring(0,m+1);let c=b.substring(m+1);c.indexOf(")")!==-1?c=c.substring(c.indexOf(")")):c="",this.inputText=`${f+N.key}(`,d=this.inputText.length,this.inputText+=`)${c}`}dh.call(this,this.inputText,d)}function jg(){this.suggest.setItems(this.formulas)}function $g(N){let b=N.getMonth()+1,e=N.getDate();return b<10&&(b=`0${b}`),e<10&&(e=`0${e}`),`${N.getFullYear()}-${b}-${e}`}class Hg{constructor(b,e,d){this.viewFn=e,this.rowHeight=d,this.formulas=b,this.suggest=new uh(b,m=>{Lg.call(this,m)}),this.datepicker=new Fg,this.datepicker.change(m=>{this.setText($g(m)),this.clear()}),this.areaEl=$e("div",`${Ze}-editor-area`).children(this.textEl=$e("textarea","").on("input",m=>Dg.call(this,m)).on("paste.stop",()=>{}).on("keydown",m=>Ng.call(this,m)),this.textlineEl=$e("div","textline"),this.suggest.el,this.datepicker.el).on("mousemove.stop",()=>{}).on("mousedown.stop",()=>{}),this.el=$e("div",`${Ze}-editor`).child(this.areaEl).hide(),this.suggest.bindInputEvents(this.textEl),this.areaOffset=null,this.freeze={w:0,h:0},this.cell=null,this.inputText="",this.change=()=>{}}setFreezeLengths(b,e){this.freeze.w=b,this.freeze.h=e}clear(){this.inputText!==""&&this.change("finished",this.inputText),this.cell=null,this.areaOffset=null,this.inputText="",this.el.hide(),this.textEl.val(""),this.textlineEl.html(""),jg.call(this),this.datepicker.hide()}setOffset(b,e="top"){const{textEl:d,areaEl:m,suggest:f,freeze:c,el:u}=this;if(b){this.areaOffset=b;const{left:s,top:t,width:n,height:r,l:i,t:o}=b,l={left:0,top:0};c.w>i&&c.h>o||(c.wi?l.top=c.h:c.h>o&&(l.left=c.w)),u.offset(l),m.offset({left:s-l.left-.8,top:t-l.top-.8}),d.offset({width:n-9+.8,height:r-3+.8});const a={left:0};a[e]=r,f.setOffset(a),f.hide()}}setCell(b,e){const{el:d,datepicker:m,suggest:f}=this;d.show(),this.cell=b;const c=b&&b.text||"";if(this.setText(c),this.validator=e,e){const{type:u}=e;u==="date"&&(m.show(),/^\s*$/.test(c)||m.setValue(c)),u==="list"&&(f.setItems(e.values()),f.search(""))}}setText(b){this.inputText=b,dh.call(this,b,b.length),Wa.call(this)}}class Di extends Li{constructor(b,e=""){super("div",`${Ze}-button ${e}`),this.child(Cr(`button.${b}`))}}function Va(){return window.devicePixelRatio||1}function _f(){return Va()-.5}function Ft(N){return parseInt(N*Va(),10)}function us(N){const b=Ft(N);return b>0?b-.5:.5}class zg{constructor(b,e,d,m,f=0){this.x=b,this.y=e,this.width=d,this.height=m,this.padding=f,this.bgcolor="#ffffff",this.borderTop=null,this.borderRight=null,this.borderBottom=null,this.borderLeft=null}setBorders({top:b,bottom:e,left:d,right:m}){b&&(this.borderTop=b),m&&(this.borderRight=m),e&&(this.borderBottom=e),d&&(this.borderLeft=d)}innerWidth(){return this.width-this.padding*2-2}innerHeight(){return this.height-this.padding*2-2}textx(b){const{width:e,padding:d}=this;let{x:m}=this;return b==="left"?m+=d:b==="center"?m+=e/2:b==="right"&&(m+=e-d),m}texty(b,e){const{height:d,padding:m}=this;let{y:f}=this;return b==="top"?f+=m:b==="middle"?f+=d/2-e/2:b==="bottom"&&(f+=d-m-e),f}topxys(){const{x:b,y:e,width:d}=this;return[[b,e],[b+d,e]]}rightxys(){const{x:b,y:e,width:d,height:m}=this;return[[b+d,e],[b+d,e+m]]}bottomxys(){const{x:b,y:e,width:d,height:m}=this;return[[b,e+m],[b+d,e+m]]}leftxys(){const{x:b,y:e,height:d}=this;return[[b,e],[b,e+d]]}}function Bc(N,b,e,d,m,f,c){const u={x:0,y:0};N==="underline"?m==="bottom"?u.y=0:m==="top"?u.y=-(f+2):u.y=-f/2:N==="strike"&&(m==="bottom"?u.y=f/2:m==="top"&&(u.y=-(f/2+2))),d==="center"?u.x=c/2:d==="right"&&(u.x=c),this.line([b-u.x,e-u.y],[b-u.x+c,e-u.y])}class ph{constructor(b,e,d){this.el=b,this.ctx=b.getContext("2d"),this.resize(e,d),this.ctx.scale(Va(),Va())}resize(b,e){this.el.style.width=`${b}px`,this.el.style.height=`${e}px`,this.el.width=Ft(b),this.el.height=Ft(e)}clear(){const{width:b,height:e}=this.el;return this.ctx.clearRect(0,0,b,e),this}attr(b){return Object.assign(this.ctx,b),this}save(){return this.ctx.save(),this.ctx.beginPath(),this}restore(){return this.ctx.restore(),this}beginPath(){return this.ctx.beginPath(),this}translate(b,e){return this.ctx.translate(Ft(b),Ft(e)),this}scale(b,e){return this.ctx.scale(b,e),this}clearRect(b,e,d,m){return this.ctx.clearRect(b,e,d,m),this}fillRect(b,e,d,m){return this.ctx.fillRect(Ft(b)-.5,Ft(e)-.5,Ft(d),Ft(m)),this}fillText(b,e,d){return this.ctx.fillText(b,Ft(e),Ft(d)),this}text(b,e,d={},m=!0){const{ctx:f}=this,{align:c,valign:u,font:s,color:t,strike:n,underline:r}=d,i=e.textx(c);f.save(),f.beginPath(),this.attr({textAlign:c,textBaseline:u,font:`${s.italic?"italic":""} ${s.bold?"bold":""} ${Ft(s.size)}px ${s.name}`,fillStyle:t,strokeStyle:t});const o=`${b}`.split(` +`),l=e.innerWidth(),a=[];o.forEach(h=>{const w=f.measureText(h).width;if(m&&w>Ft(l)){let y={w:0,len:0,start:0};for(let S=0;S=Ft(l)&&(a.push(h.substr(y.start,y.len)),y={w:0,len:0,start:S}),y.len+=1,y.w+=f.measureText(h[S]).width+1;y.len>0&&a.push(h.substr(y.start,y.len))}else a.push(h)});const g=(a.length-1)*(s.size+2);let v=e.texty(u,g);return a.forEach(h=>{const w=f.measureText(h).width;this.fillText(h,i,v),n&&Bc.call(this,"strike",i,v,c,u,s.size,w),r&&Bc.call(this,"underline",i,v,c,u,s.size,w),v+=s.size+2}),f.restore(),this}border(b,e){const{ctx:d}=this;return d.lineWidth=_f,d.strokeStyle=e,b==="medium"?d.lineWidth=Ft(2)-.5:b==="thick"?d.lineWidth=Ft(3):b==="dashed"?d.setLineDash([Ft(3),Ft(2)]):b==="dotted"?d.setLineDash([Ft(1),Ft(1)]):b==="double"&&d.setLineDash([Ft(2),0]),this}line(...b){const{ctx:e}=this;if(b.length>1){e.beginPath();const[d,m]=b[0];e.moveTo(us(d),us(m));for(let f=1;f{const b=[],e=[];let d=[],m=0,f="",c=1,u="";for(let s=0;s="a"&&t<="z")d.push(t.toUpperCase());else if(t>="0"&&t<="9"||t>="A"&&t<="Z"||t===".")d.push(t);else if(t==='"'){for(s+=1;N.charAt(s)!=='"';)d.push(N.charAt(s)),s+=1;e.push(`"${d.join("")}`),d=[]}else if(t==="-"&&/[+\-*/,(]/.test(u))d.push(t);else{if(t!=="("&&d.length>0&&e.push(d.join("")),t===")"){let n=b.pop();if(m===2)try{const[r,i]=xi(e.pop()),[o,l]=xi(e.pop());let a=0;for(let g=o;g<=r;g+=1)for(let v=l;v<=i;v+=1)e.push(ai(g,v)),a+=1;e.push([n,a])}catch{}else if(m===1||m===3)m===3&&e.push(f),e.push([n,c]),c=1;else for(;n!=="("&&(e.push(n),!(b.length<=0));)n=b.pop();m=0}else if(t==="="||t===">"||t==="<"){const n=N.charAt(s+1);f=t,(n==="="||n==="-")&&(f+=n,s+=1),m=3}else if(t===":")m=2;else if(t===",")m===3&&e.push(f),m=1,c+=1;else if(t==="("&&d.length>0)b.push(d.join(""));else{if(b.length>0&&(t==="+"||t==="-")){let n=b[b.length-1];if(n!=="("&&e.push(b.pop()),n==="*"||n==="/")for(;b.length>0&&(n=b[b.length-1],n!=="(");)e.push(b.pop())}else if(b.length>0){const n=b[b.length-1];(n==="*"||n==="/")&&e.push(b.pop())}b.push(t)}d=[]}u=t}}for(d.length>0&&e.push(d.join(""));b.length>0;)e.push(b.pop());return e},Wg=(N,b)=>{const[e]=N;let d=N;if(e==='"')return N.substring(1);let m=1;if(e==="-"&&(d=N.substring(1),m=-1),d[0]>="0"&&d[0]<="9")return m*Number(d);const[f,c]=xi(d);return m*b(f,c)},Vg=(N,b,e,d)=>{const m=[];for(let f=0;f"||u==="<"){let s=m.pop();Number.isNaN(s)||(s=Number(s));let t=m.pop();Number.isNaN(t)||(t=Number(t));let n=!1;u==="="?n=t===s:c===">"?n=t>s:c===">="?n=t>=s:c==="<"?n=t="a"&&u<="z"||u>="A"&&u<="Z")&&d.push(c),m.push(Wg(c,e)),d.pop()}}return m[0]},mh=(N,b,e,d=[])=>{if(N[0]==="="){const m=Xg(N.substring(1));return m.length<=0?N:Vg(m,b,(f,c)=>mh(e(f,c),b,e,d),d)}return N},Kg={render:mh},Sf=[{key:"SUM",title:Wt("formula.sum"),render:N=>N.reduce((b,e)=>Ni("+",b,e),0)},{key:"AVERAGE",title:Wt("formula.average"),render:N=>N.reduce((b,e)=>Number(b)+Number(e),0)/N.length},{key:"MAX",title:Wt("formula.max"),render:N=>Math.max(...N.map(b=>Number(b)))},{key:"MIN",title:Wt("formula.min"),render:N=>Math.min(...N.map(b=>Number(b)))},{key:"IF",title:Wt("formula._if"),render:([N,b,e])=>N?b:e},{key:"AND",title:Wt("formula.and"),render:N=>N.every(b=>b)},{key:"OR",title:Wt("formula.or"),render:N=>N.some(b=>b)},{key:"CONCAT",title:Wt("formula.concat"),render:N=>N.join("")}],Gg=Sf,gh={};Sf.forEach(N=>{gh[N.key]=N});const ds=N=>N,Pa=N=>{if(/^(-?\d*.?\d*)$/.test(N)){const b=Number(N).toFixed(2).toString(),[e,...d]=b.split("\\.");return[e.replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),...d]}return N},Hs=[{key:"normal",title:Wt("format.normal"),type:"string",render:ds},{key:"text",title:Wt("format.text"),type:"string",render:ds},{key:"number",title:Wt("format.number"),type:"number",label:"1,000.12",render:Pa},{key:"percent",title:Wt("format.percent"),type:"number",label:"10.12%",render:N=>`${N}%`},{key:"rmb",title:Wt("format.rmb"),type:"number",label:"¥10.00",render:N=>`¥${Pa(N)}`},{key:"usd",title:Wt("format.usd"),type:"number",label:"$10.00",render:N=>`$${Pa(N)}`},{key:"eur",title:Wt("format.eur"),type:"number",label:"€10.00",render:N=>`€${Pa(N)}`},{key:"date",title:Wt("format.date"),type:"date",label:"26/09/2008",render:ds},{key:"time",title:Wt("format.time"),type:"date",label:"15:59:00",render:ds},{key:"datetime",title:Wt("format.datetime"),type:"date",label:"26/09/2008 15:59:00",render:ds},{key:"duration",title:Wt("format.duration"),type:"date",label:"24:01:00",render:ds}],bh={};Hs.forEach(N=>{bh[N.key]=N});const Yg=5,Zg={fillStyle:"#f4f5f8"},Jg={fillStyle:"#fff",lineWidth:_f,strokeStyle:"#e6e6e6"};function Qg(){return{textAlign:"center",textBaseline:"middle",font:`500 ${Ft(12)}px Source Sans Pro`,fillStyle:"#585757",lineWidth:_f(),strokeStyle:"#e6e6e6"}}function vh(N,b,e,d=0){const{left:m,top:f,width:c,height:u}=N.cellRect(b,e);return new zg(m,f+d,c,u,Yg)}function Ka(N,b,e,d,m=0){const{sortedRowMap:f,rows:c,cols:u}=b;if(c.isHide(e)||u.isHide(d))return;let s=e;f.has(e)&&(s=f.get(e));const t=b.getCell(s,d);if(t===null)return;let n=!1;"editable"in t&&t.editable===!1&&(n=!0);const r=b.getCellStyleOrDefault(s,d),i=vh(b,e,d,m);i.bgcolor=r.bgcolor,r.border!==void 0&&(i.setBorders(r.border),N.strokeBorders(i)),N.rect(i,()=>{let o="";b.settings.evalPaused?o=t.text||"":o=Kg.render(t.text||"",gh,(g,v)=>b.getCellTextOrDefault(v,g)),r.format&&(o=bh[r.format].render(o));const l=Object.assign({},r.font);l.size=Ug(l.size),N.text(o,i,{align:r.align,valign:r.valign,font:l,color:r.color,strike:r.strike,underline:r.underline},r.textwrap),b.validations.getError(e,d)&&N.error(i),n&&N.frozen(i)})}function qg(N){const{data:b,draw:e}=this;if(N){const{autoFilter:d}=b;if(!d.active())return;const m=d.hrange();N.intersects(m)&&m.each((f,c)=>{const u=vh(b,f,c);e.dropdown(u)})}}function Na(N,b,e,d,m){const{draw:f,data:c}=this;f.save(),f.translate(b,e).translate(d,m);const{exceptRowSet:u}=c,s=r=>{const i=u.has(r);if(i){const o=c.rows.getHeight(r);f.translate(0,-o)}return!i},t=c.exceptRowTotalHeight(N.sri,N.eri);f.save(),f.translate(0,-t),N.each((r,i)=>{Ka(f,c,r,i)},r=>s(r)),f.restore();const n=new Set;f.save(),f.translate(0,-t),c.eachMergesInView(N,({sri:r,sci:i,eri:o})=>{if(!u.has(r))Ka(f,c,r,i);else if(!n.has(r)){n.add(r);const l=c.rows.sumHeight(r,o+1);f.translate(0,-l)}}),f.restore(),qg.call(this,N),f.restore()}function jc(N,b,e,d){const{draw:m}=this;m.save(),m.attr({fillStyle:"rgba(75, 137, 255, 0.08)"}).fillRect(N,b,e,d),m.restore()}function Da(N,b,e,d,m,f){const{draw:c,data:u}=this,s=b.h,t=b.w,n=f+d,r=m+e;c.save(),c.attr(Zg),(N==="all"||N==="left")&&c.fillRect(0,n,e,s),(N==="all"||N==="top")&&c.fillRect(r,0,t,d);const{sri:i,sci:o,eri:l,eci:a}=u.selector.range;c.attr(Qg()),(N==="all"||N==="left")&&(u.rowEach(b.sri,b.eri,(g,v,h)=>{const w=n+v,y=g;c.line([0,w],[e,w]),i<=y&&y0&&u.rows.isHide(g-1)&&(c.save(),c.attr({strokeStyle:"#c6c6c6"}),c.line([5,w+5],[e-5,w+5]),c.restore())}),c.line([0,s+n],[e,s+n]),c.line([e,n],[e,s+n])),(N==="all"||N==="top")&&(u.colEach(b.sci,b.eci,(g,v,h)=>{const w=r+v,y=g;c.line([w,0],[w,d]),o<=y&&y0&&u.cols.isHide(g-1)&&(c.save(),c.attr({strokeStyle:"#c6c6c6"}),c.line([w+5,5],[w+5,d-5]),c.restore())}),c.line([t+r,0],[t+r,d]),c.line([0,d],[t+r,d])),c.restore()}function eb(N,b){const{draw:e}=this;e.save(),e.attr({fillStyle:"#f4f5f8"}).fillRect(0,0,N,b),e.restore()}function Ba({sri:N,sci:b,eri:e,eci:d,w:m,h:f},c,u,s,t){const{draw:n,data:r}=this,{settings:i}=r;if(n.save(),n.attr(Jg).translate(c+s,u+t),!i.showGrid){n.restore();return}r.rowEach(N,e,(o,l,a)=>{o!==N&&n.line([0,l],[m,l]),o===e&&n.line([0,l+a],[m,l+a])}),r.colEach(b,d,(o,l,a)=>{o!==b&&n.line([l,0],[l,f]),o===d&&n.line([l+a,0],[l+a,f])}),n.restore()}function tb(N,b,e,d){const{draw:m,data:f}=this,c=f.viewWidth()-N,u=f.viewHeight()-b;m.save().translate(N,b).attr({strokeStyle:"rgba(75, 137, 255, .6)"}),m.line([0,d],[c,d]),m.line([e,0],[e,u]),m.restore()}class rb{constructor(b,e){this.el=b,this.draw=new ph(b,e.viewWidth(),e.viewHeight()),this.data=e}resetData(b){this.data=b,this.render()}render(){const{data:b}=this,{rows:e,cols:d}=b,m=d.indexWidth,f=e.height;this.draw.resize(b.viewWidth(),b.viewHeight()),this.clear();const c=b.viewRange(),u=b.freezeTotalWidth(),s=b.freezeTotalHeight(),{x:t,y:n}=b.scroll;Ba.call(this,c,m,f,u,s),Na.call(this,c,m,f,-t,-n),Da.call(this,"all",c,m,f,u,s),eb.call(this,m,f);const[r,i]=b.freeze;if(r>0||i>0){if(r>0){const l=c.clone();l.sri=0,l.eri=r-1,l.h=s,Ba.call(this,l,m,f,u,0),Na.call(this,l,m,f,-t,0),Da.call(this,"top",l,m,f,u,0)}if(i>0){const l=c.clone();l.sci=0,l.eci=i-1,l.w=u,Ba.call(this,l,m,f,0,s),Da.call(this,"left",l,m,f,0,s),Na.call(this,l,m,f,0,-n)}const o=b.freezeViewRange();Ba.call(this,o,m,f,0,0),Da.call(this,"all",o,m,f,0,0),Na.call(this,o,m,f,0,0),tb.call(this,m,f,u,s)}}clear(){this.draw.clear()}}const La=[["A3",11.69,16.54],["A4",8.27,11.69],["A5",5.83,8.27],["B4",9.84,13.9],["B5",6.93,9.84]],mf=["landscape","portrait"];function Ga(N){return parseInt(96*N,10)}function $c(N){N==="cancel"?this.el.hide():this.toPrint()}function nb(N){const{paper:b}=this,{value:e}=N.target,d=La[e];b.w=Ga(d[1]),b.h=Ga(d[2]),this.preview()}function ib(N){const{paper:b}=this,{value:e}=N.target,d=mf[e];b.orientation=d,this.preview()}let sb=class{constructor(b){this.paper={w:Ga(La[0][1]),h:Ga(La[0][2]),padding:50,orientation:mf[0],get width(){return this.orientation==="landscape"?this.h:this.w},get height(){return this.orientation==="landscape"?this.w:this.h}},this.data=b,this.el=$e("div",`${Ze}-print`).children($e("div",`${Ze}-print-bar`).children($e("div","-title").child("Print settings"),$e("div","-right").children($e("div",`${Ze}-buttons`).children(new Di("cancel").on("click",$c.bind(this,"cancel")),new Di("next","primary").on("click",$c.bind(this,"next"))))),$e("div",`${Ze}-print-content`).children(this.contentEl=$e("div","-content"),$e("div","-sider").child($e("form","").children($e("fieldset","").children($e("label","").child(`${Cr("print.size")}`),$e("select","").children(...La.map((e,d)=>$e("option","").attr("value",d).child(`${e[0]} ( ${e[1]}''x${e[2]}'' )`))).on("change",nb.bind(this))),$e("fieldset","").children($e("label","").child(`${Cr("print.orientation")}`),$e("select","").children(...mf.map((e,d)=>$e("option","").attr("value",d).child(`${Cr("print.orientations")[d]}`))).on("change",ib.bind(this))))))).hide()}resetData(b){this.data=b}preview(){const{data:b,paper:e}=this,{width:d,height:m,padding:f}=e,c=d-f*2,u=m-f*2,s=b.contentRange(),t=parseInt(s.h/u,10)+1,n=c/s.w;let r=f;const i=f;n>1&&(r+=(c-s.w)/2);let o=0,l=0;this.contentEl.html(""),this.canvases=[];const a={sri:0,sci:0,eri:0,eci:0};for(let g=0;g{Ka(S,b,I,F,E)}),S.restore(),a.sri=a.eri,a.sci=a.eci,l+=h,this.contentEl.child($e("div",`${Ze}-canvas-card-wraper`).child(w.child(y)))}this.el.show()}toPrint(){this.el.hide();const{paper:b}=this,e=$e("iframe","").hide(),{el:d}=e;window.document.body.appendChild(d);const{contentWindow:m}=d,f=m.document,c=document.createElement("style");c.innerHTML=` + @page { size: ${b.width}px ${b.height}px; }; + canvas { + page-break-before: auto; + page-break-after: always; + image-rendering: pixelated; + }; + `,f.head.appendChild(c),this.canvases.forEach(u=>{const s=u.cloneNode(!1);s.getContext("2d").drawImage(u,0,0),f.body.appendChild(s)}),m.print()}};const ab=[{key:"copy",title:Wt("contextmenu.copy"),label:"Ctrl+C"},{key:"cut",title:Wt("contextmenu.cut"),label:"Ctrl+X"},{key:"paste",title:Wt("contextmenu.paste"),label:"Ctrl+V"},{key:"paste-value",title:Wt("contextmenu.pasteValue"),label:"Ctrl+Shift+V"},{key:"paste-format",title:Wt("contextmenu.pasteFormat"),label:"Ctrl+Alt+V"},{key:"divider"},{key:"insert-row",title:Wt("contextmenu.insertRow")},{key:"insert-column",title:Wt("contextmenu.insertColumn")},{key:"divider"},{key:"delete-row",title:Wt("contextmenu.deleteRow")},{key:"delete-column",title:Wt("contextmenu.deleteColumn")},{key:"delete-cell-text",title:Wt("contextmenu.deleteCellText")},{key:"hide",title:Wt("contextmenu.hide")},{key:"divider"},{key:"validation",title:Wt("contextmenu.validation")},{key:"divider"},{key:"cell-printable",title:Wt("contextmenu.cellprintable")},{key:"cell-non-printable",title:Wt("contextmenu.cellnonprintable")},{key:"divider"},{key:"cell-editable",title:Wt("contextmenu.celleditable")},{key:"cell-non-editable",title:Wt("contextmenu.cellnoneditable")}];function ob(N){return N.key==="divider"?$e("div",`${Ze}-item divider`):$e("div",`${Ze}-item`).on("click",()=>{this.itemClick(N.key),this.hide()}).children(N.title(),$e("div","label").child(N.label||""))}function fb(){return ab.map(N=>ob.call(this,N))}let lb=class{constructor(b,e=!1){this.menuItems=fb.call(this),this.el=$e("div",`${Ze}-contextmenu`).children(...this.menuItems).hide(),this.viewFn=b,this.itemClick=()=>{},this.isHide=e,this.setMode("range")}setMode(b){const e=this.menuItems[12];b==="row-col"?e.show():e.hide()}hide(){const{el:b}=this;b.hide(),gs(b)}setPosition(b,e){if(this.isHide)return;const{el:d}=this,{width:m}=d.show().offset(),f=this.viewFn(),c=f.height/2;let u=b;f.width-b<=m&&(u-=m),d.css("left",`${u}px`),e>c?d.css("bottom",`${f.height-e}px`).css("max-height",`${e}px`).css("top","auto"):d.css("top",`${e}px`).css("max-height",`${f.height-e}px`).css("bottom","auto"),Ws(d)}};function cb(N,b){if(b.classList.contains("active"))return;const{left:e,top:d,width:m,height:f}=b.getBoundingClientRect(),c=$e("div",`${Ze}-tooltip`).html(N).show();document.body.appendChild(c.el);const u=c.box();c.css("left",`${e+m/2-u.width/2}px`).css("top",`${d+f+2}px`),tn(b,"mouseleave",()=>{document.body.contains(c.el)&&document.body.removeChild(c.el)}),tn(b,"click",()=>{document.body.contains(c.el)&&document.body.removeChild(c.el)})}class Ef{constructor(b,e,d){this.tip=Cr(`toolbar.${b.replace(/-[a-z]/g,m=>m[1].toUpperCase())}`),e&&(this.tip+=` (${e})`),this.tag=b,this.shortcut=e,this.value=d,this.el=this.element(),this.change=()=>{}}element(){const{tip:b}=this;return $e("div",`${Ze}-toolbar-btn`).on("mouseenter",e=>{cb(b,e.target)}).attr("data-tooltip",b)}setState(){}}class Xn extends Ef{dropdown(){}getValue(b){return b}element(){const{tag:b}=this;return this.dd=this.dropdown(),this.dd.change=e=>this.change(b,this.getValue(e)),super.element().child(this.dd)}setState(b){b&&(this.value=b,this.dd.setTitle(b))}}class Wn extends Li{constructor(b,e,d,m,...f){super("div",`${Ze}-dropdown ${m}`),this.title=b,this.change=()=>{},this.headerClick=()=>{},typeof b=="string"?this.title=$e("div",`${Ze}-dropdown-title`).child(b):d&&this.title.addClass("arrow-left"),this.contentEl=$e("div",`${Ze}-dropdown-content`).css("width",e).hide(),this.setContentChildren(...f),this.headerEl=$e("div",`${Ze}-dropdown-header`),this.headerEl.on("click",()=>{this.contentEl.css("display")!=="block"?this.show():this.hide()}).children(this.title,d?$e("div",`${Ze}-icon arrow-right`).child($e("div",`${Ze}-icon-img arrow-down`)):""),this.children(this.headerEl,this.contentEl)}setContentChildren(...b){this.contentEl.html(""),b.length>0&&this.contentEl.children(...b)}setTitle(b){this.title.html(b),this.hide()}show(){const{contentEl:b}=this;b.show(),this.parent().active(),Ws(this.parent(),()=>{this.hide()})}hide(){this.parent().active(!1),this.contentEl.hide(),gs(this.parent())}}function hb(N){return $e("div",`${Ze}-item`).child(new jr(N))}class yh extends Wn{constructor(b,e){const d=new jr(`align-${e}`),m=b.map(f=>hb(`align-${f}`).on("click",()=>{this.setTitle(f),this.change(f)}));super(d,"auto",!0,"bottom-left",...m)}setTitle(b){this.title.setName(`align-${b}`),this.hide()}}class ub extends Xn{constructor(b){super("align","",b)}dropdown(){const{value:b}=this;return new yh(["left","center","right"],b)}}class db extends Xn{constructor(b){super("valign","",b)}dropdown(){const{value:b}=this;return new yh(["top","middle","bottom"],b)}}class oi extends Ef{element(){const{tag:b}=this;return super.element().child(new jr(b)).on("click",()=>this.click())}click(){this.change(this.tag,this.toggle())}setState(b){this.el.active(b)}toggle(){return this.el.toggle()}active(){return this.el.hasClass("active")}}class pb extends oi{constructor(){super("autofilter")}setState(){}}class mb extends oi{constructor(){super("font-bold","Ctrl+B")}}class gb extends oi{constructor(){super("font-italic","Ctrl+I")}}class bb extends oi{constructor(){super("strike","Ctrl+U")}}class vb extends oi{constructor(){super("underline","Ctrl+U")}}const yb=["#ffffff","#000100","#e7e5e6","#445569","#5b9cd6","#ed7d31","#a5a5a5","#ffc001","#4371c6","#71ae47"],wb=[["#f2f2f2","#7f7f7f","#d0cecf","#d5dce4","#deeaf6","#fce5d5","#ededed","#fff2cd","#d9e2f3","#e3efd9"],["#d8d8d8","#595959","#afabac","#adb8ca","#bdd7ee","#f7ccac","#dbdbdb","#ffe59a","#b3c6e7","#c5e0b3"],["#bfbfbf","#3f3f3f","#756f6f","#8596b0","#9cc2e6","#f4b184","#c9c9c9","#fed964","#8eaada","#a7d08c"],["#a5a5a5","#262626","#3a3839","#333f4f","#2e75b5","#c45a10","#7b7b7b","#bf8e01","#2f5596","#538136"],["#7f7f7f","#0c0c0c","#171516","#222a35","#1f4e7a","#843c0a","#525252","#7e6000","#203864","#365624"]],xb=["#c00000","#fe0000","#fdc101","#ffff01","#93d051","#00b04e","#01b0f1","#0170c1","#012060","#7030a0"];function Qo(N){return $e("td","").child($e("div",`${Ze}-color-palette-cell`).on("click.stop",()=>this.change(N)).css("background-color",N))}class _b{constructor(){this.el=$e("div",`${Ze}-color-palette`),this.change=()=>{};const b=$e("table","").children($e("tbody","").children($e("tr",`${Ze}-theme-color-placeholders`).children(...yb.map(e=>Qo.call(this,e))),...wb.map(e=>$e("tr",`${Ze}-theme-colors`).children(...e.map(d=>Qo.call(this,d)))),$e("tr",`${Ze}-standard-colors`).children(...xb.map(e=>Qo.call(this,e)))));this.el.child(b)}}class Cf extends Wn{constructor(b,e){const d=new jr(b).css("height","16px").css("border-bottom",`3px solid ${e}`),m=new _b;m.change=f=>{this.setTitle(f),this.change(f)},super(d,"auto",!1,"bottom-left",m.el)}setTitle(b){this.title.css("border-color",b),this.hide()}}const Sb=[["thin",''],["medium",''],["thick",''],["dashed",''],["dotted",'']];class Eb extends Wn{constructor(b){const e=new jr("line-type");let d=0;const m=Sb.map((f,c)=>$e("div",`${Ze}-item state ${b===f[0]?"checked":""}`).on("click",()=>{m[d].toggle("checked"),m[c].toggle("checked"),d=c,this.hide(),this.change(f)}).child($e("div",`${Ze}-line-type`).html(f[1])));super(e,"auto",!1,"bottom-left",...m)}}function Hc(...N){return $e("table","").child($e("tbody","").children(...N))}function zc(N){return $e("td","").child($e("div",`${Ze}-border-palette-cell`).child(new jr(`border-${N}`)).on("click",()=>{this.mode=N;const{mode:b,style:e,color:d}=this;this.change({mode:b,style:e,color:d})}))}class Cb{constructor(){this.color="#000",this.style="thin",this.mode="all",this.change=()=>{},this.ddColor=new Cf("line-color",this.color),this.ddColor.change=e=>{this.color=e},this.ddType=new Eb(this.style),this.ddType.change=([e])=>{this.style=e},this.el=$e("div",`${Ze}-border-palette`);const b=Hc($e("tr","").children($e("td",`${Ze}-border-palette-left`).child(Hc($e("tr","").children(...["all","inside","horizontal","vertical","outside"].map(e=>zc.call(this,e))),$e("tr","").children(...["left","top","right","bottom","none"].map(e=>zc.call(this,e))))),$e("td",`${Ze}-border-palette-right`).children($e("div",`${Ze}-toolbar-btn`).child(this.ddColor.el),$e("div",`${Ze}-toolbar-btn`).child(this.ddType.el))));this.el.child(b)}}class Tb extends Wn{constructor(){const b=new jr("border-all"),e=new Cb;e.change=d=>{this.change(d),this.hide()},super(b,"auto",!1,"bottom-left",e.el)}}class Ab extends Xn{constructor(){super("border")}dropdown(){return new Tb}}class Ja extends Ef{element(){return super.element().child(new jr(this.tag)).on("click",()=>this.change(this.tag))}setState(b){this.el.disabled(b)}}class kb extends Ja{constructor(){super("clearformat")}}class Mb extends oi{constructor(){super("paintformat")}setState(){}}class Rb extends Xn{constructor(b){super("color",void 0,b)}dropdown(){const{tag:b,value:e}=this;return new Cf(b,e)}}class Ib extends Xn{constructor(b){super("bgcolor",void 0,b)}dropdown(){const{tag:b,value:e}=this;return new Cf(b,e)}}class Ob extends Wn{constructor(){const b=pf.map(e=>$e("div",`${Ze}-item`).on("click",()=>{this.setTitle(`${e.pt}`),this.change(e)}).child(`${e.pt}`));super("10","60px",!0,"bottom-left",...b)}}let Fb=class extends Xn{constructor(){super("font-size")}getValue(b){return b.pt}dropdown(){return new Ob}};class Pb extends Wn{constructor(){const b=Lc.map(e=>$e("div",`${Ze}-item`).on("click",()=>{this.setTitle(e.title),this.change(e)}).child(e.title));super(Lc[0].title,"160px",!0,"bottom-left",...b)}}class Nb extends Xn{constructor(){super("font-name")}getValue(b){return b.key}dropdown(){return new Pb}}class Db extends Wn{constructor(){let b=Hs.slice(0);b.splice(2,0,{key:"divider"}),b.splice(8,0,{key:"divider"}),b=b.map(e=>{const d=$e("div",`${Ze}-item`);return e.key==="divider"?d.addClass("divider"):(d.child(e.title()).on("click",()=>{this.setTitle(e.title()),this.change(e)}),e.label&&d.child($e("div","label").html(e.label))),d}),super("Normal","220px",!0,"bottom-left",...b)}setTitle(b){for(let e=0;e$e("div",`${Ze}-item`).on("click",()=>{this.hide(),this.change(e)}).child(e.key));super(new jr("formula"),"180px",!0,"bottom-left",...b)}}class jb extends Xn{constructor(){super("formula")}getValue(b){return b.key}dropdown(){return new Lb}}class $b extends oi{constructor(){super("freeze")}}class Hb extends oi{constructor(){super("merge")}setState(b,e){this.el.active(b).disabled(e)}}class zb extends Ja{constructor(){super("redo","Ctrl+Y")}}class Ub extends Ja{constructor(){super("undo","Ctrl+Z")}}class Xb extends Ja{constructor(){super("print","Ctrl+P")}}class Wb extends oi{constructor(){super("textwrap")}}let Vb=class extends Wn{constructor(){const b=new jr("ellipsis"),e=$e("div",`${Ze}-toolbar-more`);super(b,"auto",!1,"bottom-right",e),this.moreBtns=e,this.contentEl.css("max-width","420px")}};class Kb extends Xn{constructor(){super("more"),this.el.hide()}dropdown(){return new Vb}show(){this.el.show()}hide(){this.el.hide()}}function ps(){return $e("div",`${Ze}-toolbar-divider`)}function Gb(){this.btns2=[],this.items.forEach(N=>{if(Array.isArray(N))N.forEach(({el:b})=>{const e=b.box(),{marginLeft:d,marginRight:m}=b.computedStyle();this.btns2.push([b,e.width+parseInt(d,10)+parseInt(m,10)])});else{const b=N.box(),{marginLeft:e,marginRight:d}=N.computedStyle();this.btns2.push([N,b.width+parseInt(e,10)+parseInt(d,10)])}})}function Uc(){const{el:N,btns:b,moreEl:e,btns2:d}=this,{moreBtns:m,contentEl:f}=e.dd;N.css("width",`${this.widthFn()-60}px`);const c=N.box();let u=160,s=12;const t=[],n=[];d.forEach(([r,i],o)=>{u+=i,o===d.length-1||u0?e.show():e.hide()}class Yb{constructor(b,e,d=!1){this.data=b,this.change=()=>{},this.widthFn=e,this.isHide=d;const m=b.defaultStyle();this.items=[[this.undoEl=new Ub,this.redoEl=new zb,new Xb,this.paintformatEl=new Mb,this.clearformatEl=new kb],ps(),[this.formatEl=new Bb],ps(),[this.fontEl=new Nb,this.fontSizeEl=new Fb],ps(),[this.boldEl=new mb,this.italicEl=new gb,this.underlineEl=new vb,this.strikeEl=new bb,this.textColorEl=new Rb(m.color)],ps(),[this.fillColorEl=new Ib(m.bgcolor),this.borderEl=new Ab,this.mergeEl=new Hb],ps(),[this.alignEl=new ub(m.align),this.valignEl=new db(m.valign),this.textwrapEl=new Wb],ps(),[this.freezeEl=new $b,this.autofilterEl=new pb,this.formulaEl=new jb,this.moreEl=new Kb]],this.el=$e("div",`${Ze}-toolbar`),this.btns=$e("div",`${Ze}-toolbar-btns`),this.items.forEach(f=>{Array.isArray(f)?f.forEach(c=>{this.btns.child(c.el),c.change=(...u)=>{this.change(...u)}}):this.btns.child(f.el)}),this.el.child(this.btns),d?this.el.hide():(this.reset(),setTimeout(()=>{Gb.call(this),Uc.call(this)},0),tn(window,"resize",()=>{Uc.call(this)}))}paintformatActive(){return this.paintformatEl.active()}paintformatToggle(){this.paintformatEl.toggle()}trigger(b){this[`${b}El`].click()}resetData(b){this.data=b,this.reset()}reset(){if(this.isHide)return;const{data:b}=this,e=b.getSelectedCellStyle();this.undoEl.setState(!b.canUndo()),this.redoEl.setState(!b.canRedo()),this.mergeEl.setState(b.canUnmerge(),!b.selector.multiple()),this.autofilterEl.setState(!b.canAutofilter());const{font:d,format:m}=e;this.formatEl.setState(m),this.fontEl.setState(d.name),this.fontSizeEl.setState(d.size),this.boldEl.setState(d.bold),this.italicEl.setState(d.italic),this.underlineEl.setState(e.underline),this.strikeEl.setState(e.strike),this.textColorEl.setState(e.color),this.fillColorEl.setState(e.bgcolor),this.alignEl.setState(e.align),this.valignEl.setState(e.valign),this.textwrapEl.setState(e.textwrap),this.freezeEl.setState(b.freezeIsActive())}}class Zb{constructor(b,e,d="600px"){this.title=b,this.el=$e("div",`${Ze}-modal`).css("width",d).children($e("div",`${Ze}-modal-header`).children(new jr("close").on("click.stop",()=>this.hide()),this.title),$e("div",`${Ze}-modal-content`).children(...e)).hide()}show(){this.dimmer=$e("div",`${Ze}-dimmer active`),document.body.appendChild(this.dimmer.el);const{width:b,height:e}=this.el.show().box(),{clientHeight:d,clientWidth:m}=document.documentElement;this.el.offset({left:(m-b)/2,top:(d-e)/3}),window.xkeydownEsc=f=>{f.keyCode===27&&this.hide()},tn(window,"keydown",window.xkeydownEsc)}hide(){this.el.hide(),document.body.removeChild(this.dimmer.el),Xa(window,"keydown",window.xkeydownEsc),delete window.xkeydownEsc}}class ms{constructor(b,e){this.vchange=()=>{},this.el=$e("div",`${Ze}-form-input`),this.input=$e("input","").css("width",b).on("input",d=>this.vchange(d)).attr("placeholder",e),this.el.child(this.input)}focus(){setTimeout(()=>{this.input.el.focus()},10)}hint(b){this.input.attr("placeholder",b)}val(b){return this.input.val(b)}}class qo{constructor(b,e,d,m=c=>c,f=()=>{}){this.key=b,this.getTitle=m,this.vchange=()=>{},this.el=$e("div",`${Ze}-form-select`),this.suggest=new uh(e.map(c=>({key:c,title:this.getTitle(c)})),c=>{this.itemClick(c.key),f(c.key),this.vchange(c.key)},d,this.el),this.el.children(this.itemEl=$e("div","input-text").html(this.getTitle(b)),this.suggest.el).on("click",()=>this.show())}show(){this.suggest.search("")}itemClick(b){this.key=b,this.itemEl.html(this.getTitle(b))}val(b){return b!==void 0?(this.key=b,this.itemEl.html(this.getTitle(b)),this):this.key}}const Jb={number:/(^\d+$)|(^\d+(\.\d{0,4})?$)/,date:/^\d{4}-\d{1,2}-\d{1,2}$/};class yi{constructor(b,e,d,m){this.label="",this.rule=e,d&&(this.label=$e("label","label").css("width",`${m}px`).html(d)),this.tip=$e("div","tip").child("tip").hide(),this.input=b,this.input.vchange=()=>this.validate(),this.el=$e("div",`${Ze}-form-field`).children(this.label,b.el,this.tip)}isShow(){return this.el.css("display")!=="none"}show(){this.el.show()}hide(){return this.el.hide(),this}val(b){return this.input.val(b)}hint(b){this.input.hint(b)}validate(){const{input:b,rule:e,tip:d,el:m}=this,f=b.val();return e.required&&/^\s*$/.test(f)?(d.html(Cr("validation.required")),m.addClass("error"),!1):(e.type||e.pattern)&&!(e.pattern||Jb[e.type]).test(f)?(d.html(Cr("validation.notMatch")),m.addClass("error"),!1):(m.removeClass("error"),!0)}}const Xc=100;class Qb extends Zb{constructor(){const b=new yi(new qo("cell",["cell"],"100%",t=>Cr(`dataValidation.modeType.${t}`)),{required:!0},`${Cr("dataValidation.range")}:`,Xc),e=new yi(new ms("120px","E3 or E3:F12"),{required:!0,pattern:/^([A-Z]{1,2}[1-9]\d*)(:[A-Z]{1,2}[1-9]\d*)?$/}),d=new yi(new qo("list",["list","number","date","phone","email"],"100%",t=>Cr(`dataValidation.type.${t}`),t=>this.criteriaSelected(t)),{required:!0},`${Cr("dataValidation.criteria")}:`,Xc),m=new yi(new qo("be",["be","nbe","eq","neq","lt","lte","gt","gte"],"160px",t=>Cr(`dataValidation.operator.${t}`),t=>this.criteriaOperatorSelected(t)),{required:!0}).hide(),f=new yi(new ms("70px","10"),{required:!0}).hide(),c=new yi(new ms("70px","100"),{required:!0,type:"number"}).hide(),u=new yi(new ms("120px","a,b,c"),{required:!0}),s=new yi(new ms("70px","10"),{required:!0,type:"number"}).hide();super(Cr("contextmenu.validation"),[$e("div",`${Ze}-form-fields`).children(b.el,e.el),$e("div",`${Ze}-form-fields`).children(d.el,m.el,f.el,c.el,s.el,u.el),$e("div",`${Ze}-buttons`).children(new Di("cancel").on("click",()=>this.btnClick("cancel")),new Di("remove").on("click",()=>this.btnClick("remove")),new Di("save","primary").on("click",()=>this.btnClick("save")))]),this.mf=b,this.rf=e,this.cf=d,this.of=m,this.minvf=f,this.maxvf=c,this.vf=s,this.svf=u,this.change=()=>{}}showVf(b){const e=b==="date"?"2018-11-12":"10",{vf:d}=this;d.input.hint(e),d.show()}criteriaSelected(b){const{of:e,minvf:d,maxvf:m,vf:f,svf:c}=this;b==="date"||b==="number"?(e.show(),d.rule.type=b,m.rule.type=b,b==="date"?(d.hint("2018-11-12"),m.hint("2019-11-12")):(d.hint("10"),m.hint("100")),d.show(),m.show(),f.hide(),c.hide()):(b==="list"?c.show():c.hide(),f.hide(),e.hide(),d.hide(),m.hide())}criteriaOperatorSelected(b){if(!b)return;const{minvf:e,maxvf:d,vf:m}=this;if(b==="be"||b==="nbe")e.show(),d.show(),m.hide();else{const f=this.cf.val();m.rule.type=f,f==="date"?m.hint("2018-11-12"):m.hint("10"),m.show(),e.hide(),d.hide()}}btnClick(b){if(b==="cancel")this.hide();else if(b==="remove")this.change("remove"),this.hide();else if(b==="save"){const e=["mf","rf","cf","of","svf","vf","minvf","maxvf"];for(let s=0;sthis.itemClick(N))}function qb(N){const{filterbEl:b,filterValues:e}=this;b.html(""),Object.keys(N).forEach((m,f)=>{const c=N[m],u=e.includes(m)?"checked":"";b.child($e("div",`${Ze}-item state ${u}`).on("click.stop",()=>this.filterClick(f,m)).children(m===""?Cr("filter.empty"):m,$e("div","label").html(`(${c})`)))})}function Vc(){const{filterhEl:N,filterValues:b,values:e}=this;N.html(`${b.length} / ${e.length}`),N.checked(b.length===e.length)}class ev{constructor(){this.filterbEl=$e("div",`${Ze}-body`),this.filterhEl=$e("div",`${Ze}-header state`).on("click.stop",()=>this.filterClick(0,"all")),this.el=$e("div",`${Ze}-sort-filter`).children(this.sortAscEl=Wc.call(this,"asc"),this.sortDescEl=Wc.call(this,"desc"),wh("divider"),$e("div",`${Ze}-filter`).children(this.filterhEl,this.filterbEl),$e("div",`${Ze}-buttons`).children(new Di("cancel").on("click",()=>this.btnClick("cancel")),new Di("ok","primary").on("click",()=>this.btnClick("ok")))).hide(),this.ci=null,this.sortDesc=null,this.values=null,this.filterValues=[]}btnClick(b){if(b==="ok"){const{ci:e,sort:d,filterValues:m}=this;this.ok&&this.ok(e,d,"in",m)}this.hide()}itemClick(b){this.sort=b;const{sortAscEl:e,sortDescEl:d}=this;e.checked(b==="asc"),d.checked(b==="desc")}filterClick(b,e){const{filterbEl:d,filterValues:m,values:f}=this,c=d.children();e==="all"?c.length===m.length?(this.filterValues=[],c.forEach(u=>$e(u).checked(!1))):(this.filterValues=Array.from(f),c.forEach(u=>$e(u).checked(!0))):$e(c[b]).toggle("checked")?m.push(e):m.splice(m.findIndex(s=>s===e),1),Vc.call(this)}set(b,e,d,m){this.ci=b;const{sortAscEl:f,sortDescEl:c}=this;m!==null?(this.sort=m.order,f.checked(m.asc()),c.checked(m.desc())):(this.sortDesc=null,f.checked(!1),c.checked(!1)),this.values=Object.keys(e),this.filterValues=d?Array.from(d.value):Object.keys(e),qb.call(this,e,d),Vc.call(this)}setOffset(b){this.el.offset(b).show();let e=1;Ws(this.el,()=>{e<=0&&this.hide(),e-=1})}show(){this.el.show()}hide(){this.el.hide(),gs(this.el)}}function xh(N,b){const e=$e("div",`${Ze}-toast`),d=$e("div",`${Ze}-dimmer active`),m=()=>{document.body.removeChild(e.el),document.body.removeChild(d.el)};e.children($e("div",`${Ze}-toast-header`).children(new jr("close").on("click.stop",()=>m()),N),$e("div",`${Ze}-toast-content`).html(b)),document.body.appendChild(e.el),document.body.appendChild(d.el);const{width:f,height:c}=e.box(),{clientHeight:u,clientWidth:s}=document.documentElement;e.offset({left:(s-f)/2,top:(u-c)/3})}function ef(N,b){let e;return(...d)=>{const m=this,f=d;e||(e=setTimeout(()=>{e=null,N.apply(m,f)},b))}}function tv(){const{data:N,verticalScrollbar:b,horizontalScrollbar:e}=this,{l:d,t:m,left:f,top:c,width:u,height:s}=N.getSelectedRect(),t=this.getTableOffset();if(Math.abs(f)+u>t.width)e.move({left:d+u-t.width});else{const n=N.freezeTotalWidth();ft.height)b.move({top:m+s-t.height-1});else{const n=N.freezeTotalHeight();c0&&(u-=1):b==="right"?(t!==u&&(u=t),u0&&(c-=1):b==="down"?(s!==c&&(c=s),cs.indexWidth&&e>u.height){d.hide(),m.hide();return}const t=f.box(),n=c.getCellRectByXY(N.offsetX,N.offsetY);n.ri>=0&&n.ci===-1?(n.width=s.indexWidth,d.show(n,{width:t.width}),u.isHide(n.ri-1)?d.showUnhide(n.ri):d.hideUnhide()):d.hide(),n.ri===-1&&n.ci>=0?(n.height=u.height,m.show(n,{height:t.height}),s.isHide(n.ci-1)?m.showUnhide(n.ci):m.hideUnhide()):m.hide()}function nv(N){const{verticalScrollbar:b,horizontalScrollbar:e,data:d}=this,{top:m}=b.scroll(),{left:f}=e.scroll(),{rows:c,cols:u}=d,{deltaY:s,deltaX:t}=N,n=(g,v)=>{let h=g,w=0;do w=v(h),h+=1;while(w<=0);return w},r=g=>{if(g>0){const v=d.scroll.ri+1;if(vc.getHeight(w));b.move({top:m+h-1})}}else{const v=d.scroll.ri-1;if(v>=0){const h=n(v,w=>c.getHeight(w));b.move({top:v===0?0:m-h})}}},i=g=>{if(g>0){const v=d.scroll.ci+1;if(vu.getWidth(w));e.move({left:f+h-1})}}else{const v=d.scroll.ci-1;if(v>=0){const h=n(v,w=>u.getWidth(w));e.move({left:v===0?0:f-h})}}},o=Math.abs(s),l=Math.abs(t),a=Math.max(o,l);/Firefox/i.test(window.navigator.userAgent)&&ef(r(N.detail),50),a===l&&ef(i(t),50),a===o&&ef(r(s),50)}function iv(N,b){const{verticalScrollbar:e,horizontalScrollbar:d}=this,{top:m}=e.scroll(),{left:f}=d.scroll();N==="left"||N==="right"?d.move({left:f-b}):(N==="up"||N==="down")&&e.move({top:m-b})}function Tf(){const{data:N,verticalScrollbar:b}=this,{height:e}=this.getTableOffset(),d=N.exceptRowTotalHeight(0,-1);b.set(e,N.rows.totalHeight()-d)}function Af(){const{data:N,horizontalScrollbar:b}=this,{width:e}=this.getTableOffset();N&&b.set(e,N.cols.totalWidth())}function sv(){const{selector:N,data:b,editor:e}=this,[d,m]=b.freeze;if(d>0||m>0){const f=b.freezeTotalWidth(),c=b.freezeTotalHeight();e.setFreezeLengths(f,c)}N.resetAreaOffset()}function en(){const{tableEl:N,overlayerEl:b,overlayerCEl:e,table:d,toolbar:m,selector:f,el:c}=this,u=this.getTableOffset(),s=this.getRect();N.attr(s),b.offset(s),e.offset(u),c.css("width",`${s.width}px`),Tf.call(this),Af.call(this),sv.call(this),d.render(),m.reset(),f.reset()}function Vs(){const{data:N,selector:b}=this;N.clearClipboard(),b.hideClipboard()}function gf(){const{data:N,selector:b}=this;N.copy(),N.copyToSystemClipboard(),b.showClipboard()}function Kc(){const{data:N,selector:b}=this;N.cut(),b.showClipboard()}function zs(N,b){const{data:e}=this;if(e.settings.mode!=="read"){if(e.paste(N,d=>xh("Tip",d)))en.call(this);else if(b){const d=b.clipboardData.getData("text/plain");this.data.pasteFromText(d),en.call(this)}}}function av(){this.data.hideRowsOrCols(),en.call(this)}function Gc(N,b){this.data.unhideRowsOrCols(N,b),en.call(this)}function ov(){const{data:N}=this;N.autofilter(),en.call(this)}function fv(){const{toolbar:N}=this;N.paintformatActive()&&(zs.call(this,"format"),Vs.call(this),N.paintformatToggle())}function Yc(N){const{selector:b,data:e,table:d,sortFilter:m}=this,{offsetX:f,offsetY:c}=N,u=N.target.className===`${Ze}-selector-corner`,s=e.getCellRectByXY(f,c),{left:t,top:n,width:r,height:i}=s;let{ri:o,ci:l}=s;const{autoFilter:a}=e;if(a.includes(o,l)&&t+r-20e.rows.getCell(v,h));m.hide(),m.set(l,g,a.getFilter(l),a.getSort(l)),m.setOffset({left:t,top:n+i+2});return}N.shiftKey||(u?b.showAutofill(o,l):Bi.call(this,!1,o,l),oh(window,g=>{({ri:o,ci:l}=e.getCellRectByXY(g.offsetX,g.offsetY)),u?b.showAutofill(o,l):g.buttons===1&&!g.shiftKey&&Bi.call(this,!0,o,l,!0,!0)},()=>{u&&b.arange&&e.settings.mode!=="read"&&e.autofill(b.arange,"all",g=>xh("Tip",g))&&d.render(),b.hideAutofill(),fv.call(this)})),!u&&N.buttons===1&&N.shiftKey&&Bi.call(this,!0,o,l)}function Ks(){const{editor:N,data:b}=this,e=b.getSelectedRect(),d=this.getTableOffset();let m="top";e.top>d.height/2&&(m="bottom"),N.setOffset(e,m)}function Us(){const{editor:N,data:b}=this;b.settings.mode!=="read"&&(Ks.call(this),N.setCell(b.getSelectedCell(),b.getSelectedValidator()),Vs.call(this))}function lv(N){const{data:b,table:e,selector:d}=this;b.scrolly(N,()=>{d.resetBRLAreaOffset(),Ks.call(this),e.render()})}function cv(N){const{data:b,table:e,selector:d}=this;b.scrollx(N,()=>{d.resetBRTAreaOffset(),Ks.call(this),e.render()})}function hv(N,b){const{ri:e}=N,{table:d,selector:m,data:f}=this;f.rows.setHeight(e,b),d.render(),m.resetAreaOffset(),Tf.call(this),Ks.call(this)}function uv(N,b){const{ci:e}=N,{table:d,selector:m,data:f}=this;f.cols.setWidth(e,b),d.render(),m.resetAreaOffset(),Af.call(this),Ks.call(this)}function tf(N,b="finished"){const{data:e,table:d}=this;if(e.settings.mode==="read")return;e.setSelectedCellText(N,b);const{ri:m,ci:f}=e.selector;b==="finished"?d.render():this.trigger("cell-edited",N,m,f)}function ja(N){const{data:b}=this;b.settings.mode!=="read"&&(N==="insert-row"?b.insert("row"):N==="delete-row"?b.delete("row"):N==="insert-column"?b.insert("column"):N==="delete-column"?b.delete("column"):N==="delete-cell"?b.deleteCell():N==="delete-cell-format"?b.deleteCell("format"):N==="delete-cell-text"?b.deleteCell("text"):N==="cell-printable"?b.setSelectedCellAttr("printable",!0):N==="cell-non-printable"?b.setSelectedCellAttr("printable",!1):N==="cell-editable"?b.setSelectedCellAttr("editable",!0):N==="cell-non-editable"&&b.setSelectedCellAttr("editable",!1),Vs.call(this),en.call(this))}function dv(N,b){const{data:e}=this;if(N==="undo")this.undo();else if(N==="redo")this.redo();else if(N==="print")this.print.preview();else if(N==="paintformat")b===!0?gf.call(this):Vs.call(this);else if(N==="clearformat")ja.call(this,"delete-cell-format");else if(N!=="link"){if(N!=="chart")if(N==="autofilter")ov.call(this);else if(N==="freeze")if(b){const{ri:d,ci:m}=e.selector;this.freeze(d,m)}else this.freeze(0,0);else e.setSelectedCellAttr(N,b),N==="formula"&&!e.selector.multiple()&&Us.call(this),en.call(this)}}function pv(N,b,e,d){this.data.setAutoFilter(N,b,e,d),en.call(this)}function mv(){const{selector:N,overlayerEl:b,rowResizer:e,colResizer:d,verticalScrollbar:m,horizontalScrollbar:f,editor:c,contextMenu:u,toolbar:s,modalValidation:t,sortFilter:n}=this;b.on("mousemove",r=>{rv.call(this,r)}).on("mousedown",r=>{c.clear(),u.hide(),r.buttons===2?(this.data.xyInSelectedRect(r.offsetX,r.offsetY)||Yc.call(this,r),u.setPosition(r.offsetX,r.offsetY),r.stopPropagation()):r.detail===2?Us.call(this):Yc.call(this,r)}).on("mousewheel.stop",r=>{nv.call(this,r)}).on("mouseout",r=>{const{offsetX:i,offsetY:o}=r;o<=0&&d.hide(),i<=0&&e.hide()}),N.inputChange=r=>{tf.call(this,r,"input"),Us.call(this)},_g(b.el,{move:(r,i)=>{iv.call(this,r,i)}}),s.change=(r,i)=>dv.call(this,r,i),n.ok=(r,i,o,l)=>pv.call(this,r,i,o,l),e.finishedFn=(r,i)=>{hv.call(this,r,i)},d.finishedFn=(r,i)=>{uv.call(this,r,i)},e.unhideFn=r=>{Gc.call(this,"row",r)},d.unhideFn=r=>{Gc.call(this,"col",r)},m.moveFn=(r,i)=>{lv.call(this,r,i)},f.moveFn=(r,i)=>{cv.call(this,r,i)},c.change=(r,i)=>{tf.call(this,i,r)},t.change=(r,...i)=>{r==="save"?this.data.addValidation(...i):this.data.removeValidation()},u.itemClick=r=>{r==="validation"?t.setValue(this.data.getSelectedValidation()):r==="copy"?gf.call(this):r==="cut"?Kc.call(this):r==="paste"?zs.call(this,"all"):r==="paste-value"?zs.call(this,"text"):r==="paste-format"?zs.call(this,"format"):r==="hide"?av.call(this):ja.call(this,r)},tn(window,"resize",()=>{this.reload()}),tn(window,"click",r=>{this.focusing=b.contains(r.target)}),tn(window,"paste",r=>{this.focusing&&(zs.call(this,"all",r),r.preventDefault())}),tn(window,"keydown",r=>{if(!this.focusing)return;const i=r.keyCode||r.which,{key:o,ctrlKey:l,shiftKey:a,metaKey:g}=r;if(l||g)switch(i){case 90:this.undo(),r.preventDefault();break;case 89:this.redo(),r.preventDefault();break;case 67:gf.call(this),r.preventDefault();break;case 88:Kc.call(this),r.preventDefault();break;case 85:s.trigger("underline"),r.preventDefault();break;case 86:break;case 37:zn.call(this,a,"row-first"),r.preventDefault();break;case 38:zn.call(this,a,"col-first"),r.preventDefault();break;case 39:zn.call(this,a,"row-last"),r.preventDefault();break;case 40:zn.call(this,a,"col-last"),r.preventDefault();break;case 32:Bi.call(this,!1,-1,this.data.selector.ci,!1),r.preventDefault();break;case 66:s.trigger("bold");break;case 73:s.trigger("italic");break}else{switch(i){case 32:a&&Bi.call(this,!1,this.data.selector.ri,-1,!1);break;case 27:u.hide(),Vs.call(this);break;case 37:zn.call(this,a,"left"),r.preventDefault();break;case 38:zn.call(this,a,"up"),r.preventDefault();break;case 39:zn.call(this,a,"right"),r.preventDefault();break;case 40:zn.call(this,a,"down"),r.preventDefault();break;case 9:c.clear(),zn.call(this,!1,a?"left":"right"),r.preventDefault();break;case 13:c.clear(),zn.call(this,!1,a?"up":"down"),r.preventDefault();break;case 8:ja.call(this,"delete-cell-text"),r.preventDefault();break}o==="Delete"?(ja.call(this,"delete-cell-text"),r.preventDefault()):i>=65&&i<=90||i>=48&&i<=57||i>=96&&i<=105||r.key==="="?(tf.call(this,r.key,"input"),Us.call(this)):i===113&&Us.call(this)}})}class gv{constructor(b,e){this.eventMap=Sg();const{view:d,showToolbar:m,showContextmenu:f}=e.settings;this.el=$e("div",`${Ze}-sheet`),this.toolbar=new Yb(e,d.width,!m),this.print=new sb(e),b.children(this.toolbar.el,this.el,this.print.el),this.data=e,this.tableEl=$e("canvas",`${Ze}-table`),this.rowResizer=new Ic(!1,e.rows.height),this.colResizer=new Ic(!0,e.cols.minWidth),this.verticalScrollbar=new Oc(!0),this.horizontalScrollbar=new Oc(!1),this.editor=new Hg(Gg,()=>this.getTableOffset(),e.rows.height),this.modalValidation=new Qb,this.contextMenu=new lb(()=>this.getRect(),!f),this.selector=new Tg(e),this.overlayerCEl=$e("div",`${Ze}-overlayer-content`).children(this.editor.el,this.selector.el),this.overlayerEl=$e("div",`${Ze}-overlayer`).child(this.overlayerCEl),this.sortFilter=new ev,this.el.children(this.tableEl,this.overlayerEl.el,this.rowResizer.el,this.colResizer.el,this.verticalScrollbar.el,this.horizontalScrollbar.el,this.contextMenu.el,this.modalValidation.el,this.sortFilter.el),this.table=new rb(this.tableEl.el,e),mv.call(this),en.call(this),Bi.call(this,!1,0,0)}on(b,e){return this.eventMap.on(b,e),this}trigger(b,...e){const{eventMap:d}=this;d.fire(b,e)}resetData(b){this.editor.clear(),this.data=b,Tf.call(this),Af.call(this),this.toolbar.resetData(b),this.print.resetData(b),this.selector.resetData(b),this.table.resetData(b)}loadData(b){return this.data.setData(b),en.call(this),this}freeze(b,e){const{data:d}=this;return d.setFreeze(b,e),en.call(this),this}undo(){this.data.undo(),en.call(this)}redo(){this.data.redo(),en.call(this)}reload(){return en.call(this),this}getRect(){const{data:b}=this;return{width:b.viewWidth(),height:b.viewHeight()}}getTableOffset(){const{rows:b,cols:e}=this.data,{width:d,height:m}=this.getRect();return{width:d-e.indexWidth,height:m-b.height,left:e.indexWidth,top:b.height}}}class bv extends Wn{constructor(b){const e=new jr("ellipsis");super(e,"auto",!1,"top-left"),this.contentClick=b}reset(b){const e=b.map((d,m)=>$e("div",`${Ze}-item`).css("width","150px").css("font-weight","normal").on("click",()=>{this.contentClick(m),this.hide()}).child(d));this.setContentChildren(...e)}setTitle(){}}const vv=[{key:"delete",title:Wt("contextmenu.deleteSheet")}];function yv(N){return $e("div",`${Ze}-item`).child(N.title()).on("click",()=>{this.itemClick(N.key),this.hide()})}function wv(){return vv.map(N=>yv.call(this,N))}class xv{constructor(){this.el=$e("div",`${Ze}-contextmenu`).css("width","160px").children(...wv.call(this)).hide(),this.itemClick=()=>{}}hide(){const{el:b}=this;b.hide(),gs(b)}setOffset(b){const{el:e}=this;e.offset(b),e.show(),Ws(e)}}class _v{constructor(b=()=>{},e=()=>{},d=()=>{},m=()=>{}){this.swapFunc=e,this.updateFunc=m,this.dataNames=[],this.activeEl=null,this.deleteEl=null,this.items=[],this.moreEl=new bv(f=>{this.clickSwap2(this.items[f])}),this.contextMenu=new xv,this.contextMenu.itemClick=d,this.el=$e("div",`${Ze}-bottombar`).children(this.contextMenu.el,this.menuEl=$e("ul",`${Ze}-menu`).child($e("li","").children(new jr("add").on("click",()=>{b()}),$e("span","").child(this.moreEl))))}addItem(b,e){this.dataNames.push(b);const d=$e("li",e?"active":"").child(b);d.on("click",()=>{this.clickSwap2(d)}).on("contextmenu",m=>{const{offsetLeft:f,offsetHeight:c}=m.target;this.contextMenu.setOffset({left:f,bottom:c+1}),this.deleteEl=d}).on("dblclick",()=>{const m=d.html(),f=new ms("auto","");f.val(m),f.input.on("blur",({target:c})=>{const{value:u}=c,s=this.dataNames.findIndex(t=>t===m);this.renameItem(s,u)}),d.html("").child(f.el),f.focus()}),e&&this.clickSwap(d),this.items.push(d),this.menuEl.child(d),this.moreEl.reset(this.dataNames)}renameItem(b,e){this.dataNames.splice(b,1,e),this.moreEl.reset(this.dataNames),this.items[b].html("").child(e),this.updateFunc(b,e)}clear(){this.items.forEach(b=>{this.menuEl.removeChild(b.el)}),this.items=[],this.dataNames=[],this.moreEl.reset(this.dataNames)}deleteItem(){const{activeEl:b,deleteEl:e}=this;if(this.items.length>1){const d=this.items.findIndex(m=>m===e);if(this.items.splice(d,1),this.dataNames.splice(d,1),this.menuEl.removeChild(e.el),this.moreEl.reset(this.dataNames),b===e){const[m]=this.items;return this.activeEl=m,this.activeEl.toggle(),[d,0]}return[d,-1]}return[-1]}clickSwap2(b){const e=this.items.findIndex(d=>d===b);this.clickSwap(b),this.activeEl.toggle(),this.swapFunc(e)}clickSwap(b){this.activeEl!==null&&this.activeEl.toggle(),this.activeEl=b}}class Sv{constructor(b,e={}){let d=b;this.options={showBottomBar:!0,...e},this.sheetIndex=1,this.datas=[],typeof b=="string"&&(d=document.querySelector(b)),this.bottombar=this.options.showBottomBar?new _v(()=>{const f=this.addSheet();this.sheet.resetData(f)},f=>{const c=this.datas[f];this.sheet.resetData(c)},()=>{this.deleteSheet()},(f,c)=>{this.datas[f].name=c}):null,this.data=this.addSheet();const m=$e("div",`${Ze}`).on("contextmenu",f=>f.preventDefault());d.appendChild(m.el),this.sheet=new gv(m,this.data),this.bottombar!==null&&m.child(this.bottombar.el)}addSheet(b,e=!0){const d=b||`sheet${this.sheetIndex}`,m=new xg(d,this.options);return m.change=(...f)=>{this.sheet.trigger("change",...f)},this.datas.push(m),this.bottombar!==null&&this.bottombar.addItem(d,e),this.sheetIndex+=1,m}deleteSheet(){if(this.bottombar===null)return;const[b,e]=this.bottombar.deleteItem();b>=0&&(this.datas.splice(b,1),e>=0&&this.sheet.resetData(this.datas[e]))}loadData(b){const e=Array.isArray(b)?b:[b];if(this.bottombar!==null&&this.bottombar.clear(),this.datas=[],e.length>0)for(let d=0;db.getData())}cellText(b,e,d,m=0){return this.datas[m].setCellText(b,e,d,"finished"),this}cell(b,e,d=0){return this.datas[d].getCell(b,e)}cellStyle(b,e,d=0){return this.datas[d].getCellStyle(b,e)}reRender(){return this.sheet.table.render(),this}on(b,e){return this.sheet.on(b,e),this}validate(){const{validations:b}=this.data;return b.errors.size<=0}change(b){return this.sheet.on("change",b),this}static locale(b,e){sh(b,e)}}const Ev=(N,b={})=>new Sv(N,b);window&&(window.x_spreadsheet=Ev,window.x_spreadsheet.locale=(N,b)=>sh(N,b));var _h={exports:{}};(function(N,b){(function(e){N.exports=e()})(function(){return function(){function e(d,m,f){function c(t,n){if(!m[t]){if(!d[t]){var r=typeof Ia=="function"&&Ia;if(!n&&r)return r(t,!0);if(u)return u(t,!0);var i=new Error("Cannot find module '"+t+"'");throw i.code="MODULE_NOT_FOUND",i}var o=m[t]={exports:{}};d[t][0].call(o.exports,function(l){var a=d[t][1][l];return c(a||l)},o,o.exports,e,d,m,f)}return m[t].exports}for(var u=typeof Ia=="function"&&Ia,s=0;s{const w=this.workbook.addWorksheet(g.sheetName),y=g.dateFormats||["YYYY-MM-DD[T]HH:mm:ssZ","YYYY-MM-DD[T]HH:mm:ss","MM-DD-YYYY","YYYY-MM-DD"],S=g.map||function(I){if(I==="")return null;const F=Number(I);if(!Number.isNaN(F)&&F!==1/0)return F;const B=y.reduce((X,G)=>{if(X)return X;const V=t(I,G,!0);return V.isValid()?V:null},null);if(B)return new Date(B.valueOf());const j=i[I];return j!==void 0?j:I},E=c.parse(g.parserOptions).on("data",I=>{w.addRow(I.map(S))}).on("end",()=>{E.emit("worksheet",w)});E.on("worksheet",v).on("error",h),a.pipe(E)})}createInputStream(){throw new Error("`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}write(a,g){return new Promise((v,h)=>{g=g||{};const w=this.workbook.getWorksheet(g.sheetName||g.sheetId),y=c.format(g.formatterOptions);a.on("finish",()=>{v()}),y.on("error",h),y.pipe(a);const{dateFormat:S,dateUTC:E}=g,I=g.map||(j=>{if(j){if(j.text||j.hyperlink)return j.hyperlink||j.text||"";if(j.formula||j.result)return j.result||"";if(j instanceof Date)return S?E?t.utc(j).format(S):t(j).format(S):E?t.utc(j).format():t(j).format();if(j.error)return j.error;if(typeof j=="object")return JSON.stringify(j)}return j}),F=g.includeEmptyRows===void 0||g.includeEmptyRows;let B=1;w&&w.eachRow((j,X)=>{if(F)for(;B++2&&arguments[2]!==void 0?arguments[2]:0;if(this.worksheet=s,!t)this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0;else if(typeof t=="string"){const r=f.decodeAddress(t);this.nativeCol=r.col+n,this.nativeColOff=0,this.nativeRow=r.row+n,this.nativeRowOff=0}else t.nativeCol!==void 0?(this.nativeCol=t.nativeCol||0,this.nativeColOff=t.nativeColOff||0,this.nativeRow=t.nativeRow||0,this.nativeRowOff=t.nativeRowOff||0):t.col!==void 0?(this.col=t.col+n,this.row=t.row+n):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0)}static asInstance(s){return s instanceof c||s==null?s:new c(s)}get col(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth}set col(s){this.nativeCol=Math.floor(s),this.nativeColOff=Math.floor((s-this.nativeCol)*this.colWidth)}get row(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight}set row(s){this.nativeRow=Math.floor(s),this.nativeRowOff=Math.floor((s-this.nativeRow)*this.rowHeight)}get colWidth(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(this.worksheet.getColumn(this.nativeCol+1).width*1e4):64e4}get rowHeight(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(this.worksheet.getRow(this.nativeRow+1).height*1e4):18e4}get model(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}}set model(s){this.nativeCol=s.nativeCol,this.nativeColOff=s.nativeColOff,this.nativeRow=s.nativeRow,this.nativeRowOff=s.nativeRowOff}}d.exports=c},{"../utils/col-cache":19}],3:[function(e,d,m){const f=e("../utils/col-cache"),c=e("../utils/under-dash"),u=e("./enums"),{slideFormula:s}=e("../utils/shared-formula"),t=e("./note");class n{constructor(B,j,X){if(!B||!j)throw new Error("A Cell needs a Row");this._row=B,this._column=j,f.validateAddress(X),this._address=X,this._value=I.create(n.Types.Null,this),this.style=this._mergeStyle(B.style,j.style,{}),this._mergeCount=0}get worksheet(){return this._row.worksheet}get workbook(){return this._row.worksheet.workbook}destroy(){delete this.style,delete this._value,delete this._row,delete this._column,delete this._address}get numFmt(){return this.style.numFmt}set numFmt(B){this.style.numFmt=B}get font(){return this.style.font}set font(B){this.style.font=B}get alignment(){return this.style.alignment}set alignment(B){this.style.alignment=B}get border(){return this.style.border}set border(B){this.style.border=B}get fill(){return this.style.fill}set fill(B){this.style.fill=B}get protection(){return this.style.protection}set protection(B){this.style.protection=B}_mergeStyle(B,j,X){const G=B&&B.numFmt||j&&j.numFmt;G&&(X.numFmt=G);const V=B&&B.font||j&&j.font;V&&(X.font=V);const J=B&&B.alignment||j&&j.alignment;J&&(X.alignment=J);const H=B&&B.border||j&&j.border;H&&(X.border=H);const M=B&&B.fill||j&&j.fill;M&&(X.fill=M);const T=B&&B.protection||j&&j.protection;return T&&(X.protection=T),X}get address(){return this._address}get row(){return this._row.number}get col(){return this._column.number}get $col$row(){return`$${this._column.letter}$${this.row}`}get type(){return this._value.type}get effectiveType(){return this._value.effectiveType}toCsvString(){return this._value.toCsvString()}addMergeRef(){this._mergeCount++}releaseMergeRef(){this._mergeCount--}get isMerged(){return this._mergeCount>0||this.type===n.Types.Merge}merge(B,j){this._value.release(),this._value=I.create(n.Types.Merge,this,B),j||(this.style=B.style)}unmerge(){this.type===n.Types.Merge&&(this._value.release(),this._value=I.create(n.Types.Null,this),this.style=this._mergeStyle(this._row.style,this._column.style,{}))}isMergedTo(B){return this._value.type!==n.Types.Merge?!1:this._value.isMergedTo(B)}get master(){return this.type===n.Types.Merge?this._value.master:this}get isHyperlink(){return this._value.type===n.Types.Hyperlink}get hyperlink(){return this._value.hyperlink}get value(){return this._value.value}set value(B){if(this.type===n.Types.Merge){this._value.master.value=B;return}this._value.release(),this._value=I.create(I.getType(B),this,B)}get note(){return this._comment&&this._comment.note}set note(B){this._comment=new t(B)}get text(){return this._value.toString()}get html(){return c.escapeHtml(this.text)}toString(){return this.text}_upgradeToHyperlink(B){this.type===n.Types.String&&(this._value=I.create(n.Types.Hyperlink,this,{text:this._value.value,hyperlink:B}))}get formula(){return this._value.formula}get result(){return this._value.result}get formulaType(){return this._value.formulaType}get fullAddress(){const{worksheet:B}=this._row;return{sheetName:B.name,address:this.address,row:this.row,col:this.col}}get name(){return this.names[0]}set name(B){this.names=[B]}get names(){return this.workbook.definedNames.getNamesEx(this.fullAddress)}set names(B){const{definedNames:j}=this.workbook;j.removeAllNames(this.fullAddress),B.forEach(X=>{j.addEx(this.fullAddress,X)})}addName(B){this.workbook.definedNames.addEx(this.fullAddress,B)}removeName(B){this.workbook.definedNames.removeEx(this.fullAddress,B)}removeAllNames(){this.workbook.definedNames.removeAllNames(this.fullAddress)}get _dataValidations(){return this.worksheet.dataValidations}get dataValidation(){return this._dataValidations.find(this.address)}set dataValidation(B){this._dataValidations.add(this.address,B)}get model(){const{model:B}=this._value;return B.style=this.style,this._comment&&(B.comment=this._comment.model),B}set model(B){if(this._value.release(),this._value=I.create(B.type,this),this._value.model=B,B.comment)switch(B.comment.type){case"note":this._comment=t.fromModel(B.comment);break}B.style?this.style=B.style:this.style={}}}n.Types=u.ValueType;class r{constructor(B){this.model={address:B.address,type:n.Types.Null}}get value(){return null}set value(B){}get type(){return n.Types.Null}get effectiveType(){return n.Types.Null}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return""}release(){}toString(){return""}}class i{constructor(B,j){this.model={address:B.address,type:n.Types.Number,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Number}get effectiveType(){return n.Types.Number}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}class o{constructor(B,j){this.model={address:B.address,type:n.Types.String,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.String}get effectiveType(){return n.Types.String}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return`"${this.model.value.replace(/"/g,'""')}"`}release(){}toString(){return this.model.value}}class l{constructor(B,j){this.model={address:B.address,type:n.Types.String,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}toString(){return this.model.value.richText.map(B=>B.text).join("")}get type(){return n.Types.RichText}get effectiveType(){return n.Types.RichText}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return`"${this.text.replace(/"/g,'""')}"`}release(){}}class a{constructor(B,j){this.model={address:B.address,type:n.Types.Date,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Date}get effectiveType(){return n.Types.Date}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value.toISOString()}release(){}toString(){return this.model.value.toString()}}class g{constructor(B,j){this.model={address:B.address,type:n.Types.Hyperlink,text:j?j.text:void 0,hyperlink:j?j.hyperlink:void 0},j&&j.tooltip&&(this.model.tooltip=j.tooltip)}get value(){const B={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(B.tooltip=this.model.tooltip),B}set value(B){this.model={text:B.text,hyperlink:B.hyperlink},B.tooltip&&(this.model.tooltip=B.tooltip)}get text(){return this.model.text}set text(B){this.model.text=B}get hyperlink(){return this.model.hyperlink}set hyperlink(B){this.model.hyperlink=B}get type(){return n.Types.Hyperlink}get effectiveType(){return n.Types.Hyperlink}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.hyperlink}release(){}toString(){return this.model.text}}class v{constructor(B,j){this.model={address:B.address,type:n.Types.Merge,master:j?j.address:void 0},this._master=j,j&&j.addMergeRef()}get value(){return this._master.value}set value(B){B instanceof n?(this._master&&this._master.releaseMergeRef(),B.addMergeRef(),this._master=B):this._master.value=B}isMergedTo(B){return B===this._master}get master(){return this._master}get type(){return n.Types.Merge}get effectiveType(){return this._master.effectiveType}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return""}release(){this._master.releaseMergeRef()}toString(){return this.value.toString()}}class h{constructor(B,j){this.cell=B,this.model={address:B.address,type:n.Types.Formula,shareType:j?j.shareType:void 0,ref:j?j.ref:void 0,formula:j?j.formula:void 0,sharedFormula:j?j.sharedFormula:void 0,result:j?j.result:void 0}}_copyModel(B){const j={},X=G=>{const V=B[G];V&&(j[G]=V)};return X("formula"),X("result"),X("ref"),X("shareType"),X("sharedFormula"),j}get value(){return this._copyModel(this.model)}set value(B){this.model=this._copyModel(B)}validate(B){switch(I.getType(B)){case n.Types.Null:case n.Types.String:case n.Types.Number:case n.Types.Date:break;case n.Types.Hyperlink:case n.Types.Formula:default:throw new Error("Cannot process that type of result value")}}get dependencies(){const B=this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g),j=this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g,"").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g);return{ranges:B,cells:j}}get formula(){return this.model.formula||this._getTranslatedFormula()}set formula(B){this.model.formula=B}get formulaType(){return this.model.formula?u.FormulaType.Master:this.model.sharedFormula?u.FormulaType.Shared:u.FormulaType.None}get result(){return this.model.result}set result(B){this.model.result=B}get type(){return n.Types.Formula}get effectiveType(){const B=this.model.result;return B==null?u.ValueType.Null:B instanceof String||typeof B=="string"?u.ValueType.String:typeof B=="number"?u.ValueType.Number:B instanceof Date?u.ValueType.Date:B.text&&B.hyperlink?u.ValueType.Hyperlink:B.formula?u.ValueType.Formula:u.ValueType.Null}get address(){return this.model.address}set address(B){this.model.address=B}_getTranslatedFormula(){if(!this._translatedFormula&&this.model.sharedFormula){const{worksheet:B}=this.cell,j=B.findCell(this.model.sharedFormula);this._translatedFormula=j&&s(j.formula,j.address,this.model.address)}return this._translatedFormula}toCsvString(){return`${this.model.result||""}`}release(){}toString(){return this.model.result?this.model.result.toString():""}}class w{constructor(B,j){this.model={address:B.address,type:n.Types.SharedString,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.SharedString}get effectiveType(){return n.Types.SharedString}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}class y{constructor(B,j){this.model={address:B.address,type:n.Types.Boolean,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Boolean}get effectiveType(){return n.Types.Boolean}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value?1:0}release(){}toString(){return this.model.value.toString()}}class S{constructor(B,j){this.model={address:B.address,type:n.Types.Error,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Error}get effectiveType(){return n.Types.Error}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.toString()}release(){}toString(){return this.model.value.error.toString()}}class E{constructor(B,j){this.model={address:B.address,type:n.Types.String,value:JSON.stringify(j),rawValue:j}}get value(){return this.model.rawValue}set value(B){this.model.rawValue=B,this.model.value=JSON.stringify(B)}get type(){return n.Types.String}get effectiveType(){return n.Types.String}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value}release(){}toString(){return this.model.value}}const I={getType(F){return F==null?n.Types.Null:F instanceof String||typeof F=="string"?n.Types.String:typeof F=="number"?n.Types.Number:typeof F=="boolean"?n.Types.Boolean:F instanceof Date?n.Types.Date:F.text&&F.hyperlink?n.Types.Hyperlink:F.formula||F.sharedFormula?n.Types.Formula:F.richText?n.Types.RichText:F.sharedString?n.Types.SharedString:F.error?n.Types.Error:n.Types.JSON},types:[{t:n.Types.Null,f:r},{t:n.Types.Number,f:i},{t:n.Types.String,f:o},{t:n.Types.Date,f:a},{t:n.Types.Hyperlink,f:g},{t:n.Types.Formula,f:h},{t:n.Types.Merge,f:v},{t:n.Types.JSON,f:E},{t:n.Types.SharedString,f:w},{t:n.Types.RichText,f:l},{t:n.Types.Boolean,f:y},{t:n.Types.Error,f:S}].reduce((F,B)=>(F[B.t]=B.f,F),[]),create(F,B,j){const X=this.types[F];if(!X)throw new Error(`Could not create Value of type ${F}`);return new X(B,j)}};d.exports=n},{"../utils/col-cache":19,"../utils/shared-formula":23,"../utils/under-dash":26,"./enums":7,"./note":9}],4:[function(e,d,m){const f=e("../utils/under-dash"),c=e("./enums"),u=e("../utils/col-cache"),s=9;class t{constructor(r,i,o){this._worksheet=r,this._number=i,o!==!1&&(this.defn=o)}get number(){return this._number}get worksheet(){return this._worksheet}get letter(){return u.n2l(this._number)}get isCustomWidth(){return this.width!==void 0&&this.width!==s}get defn(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel}}set defn(r){r?(this.key=r.key,this.width=r.width!==void 0?r.width:s,this.outlineLevel=r.outlineLevel,r.style?this.style=r.style:this.style={},this.header=r.header,this._hidden=!!r.hidden):(delete this._header,delete this._key,delete this.width,this.style={},this.outlineLevel=0)}get headers(){return this._header&&this._header instanceof Array?this._header:[this._header]}get header(){return this._header}set header(r){r!==void 0?(this._header=r,this.headers.forEach((i,o)=>{this._worksheet.getCell(o+1,this.number).value=i})):this._header=void 0}get key(){return this._key}set key(r){(this._key&&this._worksheet.getColumnKey(this._key))===this&&this._worksheet.deleteColumnKey(this._key),this._key=r,r&&this._worksheet.setColumnKey(this._key,this)}get hidden(){return!!this._hidden}set hidden(r){this._hidden=r}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(r){this._outlineLevel=r}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol)}toString(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:void 0})}equivalentTo(r){return this.width===r.width&&this.hidden===r.hidden&&this.outlineLevel===r.outlineLevel&&f.isEqual(this.style,r.style)}get isDefault(){if(this.isCustomWidth||this.hidden||this.outlineLevel)return!1;const r=this.style;return!(r&&(r.font||r.numFmt||r.alignment||r.border||r.fill||r.protection))}get headerCount(){return this.headers.length}eachCell(r,i){const o=this.number;i||(i=r,r=null),this._worksheet.eachRow(r,(l,a)=>{i(l.getCell(o),a)})}get values(){const r=[];return this.eachCell((i,o)=>{i&&i.type!==c.ValueType.Null&&(r[o]=i.value)}),r}set values(r){if(!r)return;const i=this.number;let o=0;r.hasOwnProperty("0")&&(o=1),r.forEach((l,a)=>{this._worksheet.getCell(a+o,i).value=l})}_applyStyle(r,i){return this.style[r]=i,this.eachCell(o=>{o[r]=i}),i}get numFmt(){return this.style.numFmt}set numFmt(r){this._applyStyle("numFmt",r)}get font(){return this.style.font}set font(r){this._applyStyle("font",r)}get alignment(){return this.style.alignment}set alignment(r){this._applyStyle("alignment",r)}get protection(){return this.style.protection}set protection(r){this._applyStyle("protection",r)}get border(){return this.style.border}set border(r){this._applyStyle("border",r)}get fill(){return this.style.fill}set fill(r){this._applyStyle("fill",r)}static toModel(r){const i=[];let o=null;return r&&r.forEach((l,a)=>{l.isDefault?o&&(o=null):!o||!l.equivalentTo(o)?(o={min:a+1,max:a+1,width:l.width!==void 0?l.width:s,style:l.style,isCustomWidth:l.isCustomWidth,hidden:l.hidden,outlineLevel:l.outlineLevel,collapsed:l.collapsed},i.push(o)):o.max=a+1}),i.length?i:void 0}static fromModel(r,i){i=i||[];const o=[];let l=1,a=0;for(i=i.sort(function(g,v){return g.min-v.min});a{o.removeCellEx(i)})}forEach(i){f.each(this.matrixMap,(o,l)=>{o.forEach(a=>{i(l,a)})})}getNames(i){return this.getNamesEx(c.decodeEx(i))}getNamesEx(i){return f.map(this.matrixMap,(o,l)=>o.findCellEx(i)&&l).filter(Boolean)}_explore(i,o){o.mark=!1;const{sheetName:l}=o,a=new s(o.row,o.col,o.row,o.col,l);let g,v;function h(y,S){const E=i.findCellAt(l,y,o.col);return!E||!E.mark?!1:(a[S]=y,E.mark=!1,!0)}for(v=o.row-1;h(v,"top");v--);for(v=o.row+1;h(v,"bottom");v++);function w(y,S){const E=[];for(v=a.top;v<=a.bottom;v++){const I=i.findCellAt(l,v,y);if(I&&I.mark)E.push(I);else return!1}a[S]=y;for(let I=0;I{a.mark=!0});const l=o.map(a=>a.mark&&this._explore(o,a)).filter(Boolean).map(a=>a.$shortRange);return{name:i,ranges:l}}normaliseMatrix(i,o){i.forEachInSheet(o,(l,a,g)=>{l&&(l.row!==a||l.col!==g)&&(l.row=a,l.col=g,l.address=c.n2l(g)+a)})}spliceRows(i,o,l,a){f.each(this.matrixMap,g=>{g.spliceRows(i,o,l,a),this.normaliseMatrix(g,i)})}spliceColumns(i,o,l,a){f.each(this.matrixMap,g=>{g.spliceColumns(i,o,l,a),this.normaliseMatrix(g,i)})}get model(){return f.map(this.matrixMap,(i,o)=>this.getRanges(o,i)).filter(i=>i.ranges.length)}set model(i){const o=this.matrixMap={};i.forEach(l=>{const a=o[l.name]=new u;l.ranges.forEach(g=>{t.test(g.split("!").pop()||"")&&a.addCell(g)})})}}d.exports=n},{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":26,"./range":10}],7:[function(e,d,m){d.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:"#N/A",Ref:"#REF!",Name:"#NAME?",DivZero:"#DIV/0!",Null:"#NULL!",Value:"#VALUE!",Num:"#NUM!"}}},{}],8:[function(e,d,m){const f=e("../utils/col-cache"),c=e("./anchor");class u{constructor(t,n){this.worksheet=t,this.model=n}get model(){switch(this.type){case"background":return{type:this.type,imageId:this.imageId};case"image":return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error("Invalid Image Type")}}set model(t){let{type:n,imageId:r,range:i,hyperlinks:o}=t;if(this.type=n,this.imageId=r,n==="image")if(typeof i=="string"){const l=f.decode(i);this.range={tl:new c(this.worksheet,{col:l.left,row:l.top},-1),br:new c(this.worksheet,{col:l.right,row:l.bottom},0),editAs:"oneCell"}}else this.range={tl:new c(this.worksheet,i.tl,0),br:i.br&&new c(this.worksheet,i.br,0),ext:i.ext,editAs:i.editAs,hyperlinks:o||i.hyperlinks}}}d.exports=u},{"../utils/col-cache":19,"./anchor":2}],9:[function(e,d,m){const f=e("../utils/under-dash");class c{constructor(s){this.note=s}get model(){let s=null;switch(typeof this.note){case"string":s={type:"note",note:{texts:[{text:this.note}]}};break;default:s={type:"note",note:this.note};break}return f.deepMerge({},c.DEFAULT_CONFIGS,s)}set model(s){const{note:t}=s,{texts:n}=t;n.length===1&&Object.keys(n[0]).length===1?this.note=n[0].text:this.note=t}static fromModel(s){const t=new c;return t.model=s,t}}c.DEFAULT_CONFIGS={note:{margins:{insetmode:"auto",inset:[.13,.13,.25,.25]},protection:{locked:"True",lockText:"True"},editAs:"absolute"}},d.exports=c},{"../utils/under-dash":26}],10:[function(e,d,m){const f=e("../utils/col-cache");class c{constructor(){this.decode(arguments)}setTLBR(s,t,n,r,i){if(arguments.length<4){const o=f.decodeAddress(s),l=f.decodeAddress(t);this.model={top:Math.min(o.row,l.row),left:Math.min(o.col,l.col),bottom:Math.max(o.row,l.row),right:Math.max(o.col,l.col),sheetName:n},this.setTLBR(o.row,o.col,l.row,l.col,i)}else this.model={top:Math.min(s,n),left:Math.min(t,r),bottom:Math.max(s,n),right:Math.max(t,r),sheetName:i}}decode(s){switch(s.length){case 5:this.setTLBR(s[0],s[1],s[2],s[3],s[4]);break;case 4:this.setTLBR(s[0],s[1],s[2],s[3]);break;case 3:this.setTLBR(s[0],s[1],s[2]);break;case 2:this.setTLBR(s[0],s[1]);break;case 1:{const t=s[0];if(t instanceof c)this.model={top:t.model.top,left:t.model.left,bottom:t.model.bottom,right:t.model.right,sheetName:t.sheetName};else if(t instanceof Array)this.decode(t);else if(t.top&&t.left&&t.bottom&&t.right)this.model={top:t.top,left:t.left,bottom:t.bottom,right:t.right,sheetName:t.sheetName};else{const n=f.decodeEx(t);n.top?this.model={top:n.top,left:n.left,bottom:n.bottom,right:n.right,sheetName:n.sheetName}:this.model={top:n.row,left:n.col,bottom:n.row,right:n.col,sheetName:n.sheetName}}break}case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error(`Invalid number of arguments to _getDimensions() - ${s.length}`)}}get top(){return this.model.top||1}set top(s){this.model.top=s}get left(){return this.model.left||1}set left(s){this.model.left=s}get bottom(){return this.model.bottom||1}set bottom(s){this.model.bottom=s}get right(){return this.model.right||1}set right(s){this.model.right=s}get sheetName(){return this.model.sheetName}set sheetName(s){this.model.sheetName=s}get _serialisedSheetName(){const{sheetName:s}=this.model;return s?/^[a-zA-Z0-9]*$/.test(s)?`${s}!`:`'${s}'!`:""}expand(s,t,n,r){(!this.model.top||sthis.bottom)&&(this.bottom=n),(!this.model.right||r>this.right)&&(this.right=r)}expandRow(s){if(s){const{dimensions:t,number:n}=s;t&&this.expand(n,t.min,n,t.max)}}expandToAddress(s){const t=f.decodeEx(s);this.expand(t.row,t.col,t.row,t.col)}get tl(){return f.n2l(this.left)+this.top}get $t$l(){return`$${f.n2l(this.left)}$${this.top}`}get br(){return f.n2l(this.right)+this.bottom}get $b$r(){return`$${f.n2l(this.right)}$${this.bottom}`}get range(){return`${this._serialisedSheetName+this.tl}:${this.br}`}get $range(){return`${this._serialisedSheetName+this.$t$l}:${this.$b$r}`}get shortRange(){return this.count>1?this.range:this._serialisedSheetName+this.tl}get $shortRange(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}get count(){return(1+this.bottom-this.top)*(1+this.right-this.left)}toString(){return this.range}intersects(s){return!(s.sheetName&&this.sheetName&&s.sheetName!==this.sheetName||s.bottomthis.bottom||s.rightthis.right)}contains(s){const t=f.decodeEx(s);return this.containsEx(t)}containsEx(s){return s.sheetName&&this.sheetName&&s.sheetName!==this.sheetName?!1:s.row>=this.top&&s.row<=this.bottom&&s.col>=this.left&&s.col<=this.right}forEachAddress(s){for(let t=this.left;t<=this.right;t++)for(let n=this.top;n<=this.bottom;n++)s(f.encodeAddress(n,t),n,t)}}d.exports=c},{"../utils/col-cache":19}],11:[function(e,d,m){const f=e("../utils/under-dash"),c=e("./enums"),u=e("../utils/col-cache"),s=e("./cell");class t{constructor(r,i){this._worksheet=r,this._number=i,this._cells=[],this.style={},this.outlineLevel=0}get number(){return this._number}get worksheet(){return this._worksheet}commit(){this._worksheet._commitRow(this)}destroy(){delete this._worksheet,delete this._cells,delete this.style}findCell(r){return this._cells[r-1]}getCellEx(r){let i=this._cells[r.col-1];if(!i){const o=this._worksheet.getColumn(r.col);i=new s(this,o,r.address),this._cells[r.col-1]=i}return i}getCell(r){if(typeof r=="string"){const i=this._worksheet.getColumnKey(r);i?r=i.number:r=u.l2n(r)}return this._cells[r-1]||this.getCellEx({address:u.encodeAddress(this._number,r),row:this._number,col:r})}splice(r,i){const o=r+i;for(var l=arguments.length,a=new Array(l>2?l-2:0),g=2;g0)for(w=h;w>=o;w--)y=this._cells[w-1],y?(S=this.getCell(w+v),S.value=y.value,S.style=y.style,S._comment=y._comment):this._cells[w+v-1]=void 0;for(w=0;w{o&&o.type!==c.ValueType.Null&&i(o,l+1)})}addPageBreak(r,i){const o=this._worksheet,l=Math.max(0,r-1)||0,a=Math.max(0,i-1)||16838,g={id:this._number,max:a,man:1};l&&(g.min=l),o.rowBreaks.push(g)}get values(){const r=[];return this._cells.forEach(i=>{i&&i.type!==c.ValueType.Null&&(r[i.col]=i.value)}),r}set values(r){if(this._cells=[],r)if(r instanceof Array){let i=0;r.hasOwnProperty("0")&&(i=1),r.forEach((o,l)=>{o!==void 0&&(this.getCellEx({address:u.encodeAddress(this._number,l+i),row:this._number,col:l+i}).value=o)})}else this._worksheet.eachColumnKey((i,o)=>{r[o]!==void 0&&(this.getCellEx({address:u.encodeAddress(this._number,i.number),row:this._number,col:i.number}).value=r[o])})}get hasValues(){return f.some(this._cells,r=>r&&r.type!==c.ValueType.Null)}get cellCount(){return this._cells.length}get actualCellCount(){let r=0;return this.eachCell(()=>{r++}),r}get dimensions(){let r=0,i=0;return this._cells.forEach(o=>{o&&o.type!==c.ValueType.Null&&((!r||r>o.col)&&(r=o.col),i0?{min:r,max:i}:null}_applyStyle(r,i){return this.style[r]=i,this._cells.forEach(o=>{o&&(o[r]=i)}),i}get numFmt(){return this.style.numFmt}set numFmt(r){this._applyStyle("numFmt",r)}get font(){return this.style.font}set font(r){this._applyStyle("font",r)}get alignment(){return this.style.alignment}set alignment(r){this._applyStyle("alignment",r)}get protection(){return this.style.protection}set protection(r){this._applyStyle("protection",r)}get border(){return this.style.border}set border(r){this._applyStyle("border",r)}get fill(){return this.style.fill}set fill(r){this._applyStyle("fill",r)}get hidden(){return!!this._hidden}set hidden(r){this._hidden=r}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(r){this._outlineLevel=r}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}get model(){const r=[];let i=0,o=0;return this._cells.forEach(l=>{if(l){const a=l.model;a&&((!i||i>l.col)&&(i=l.col),o{switch(o.type){case s.Types.Merge:break;default:{let l;if(o.address)l=u.decodeAddress(o.address);else if(i){const{row:g}=i,v=i.col+1;l={row:g,col:v,address:u.encodeAddress(g,v),$col$row:`$${u.n2l(v)}$${g}`}}i=l;const a=this.getCellEx(l);a.model=o;break}}}),r.height?this.height=r.height:delete this.height,this.hidden=r.hidden,this.outlineLevel=r.outlineLevel||0,this.style=r.style&&JSON.parse(JSON.stringify(r.style))||{}}}d.exports=t},{"../utils/col-cache":19,"../utils/under-dash":26,"./cell":3,"./enums":7}],12:[function(e,d,m){const f=e("../utils/col-cache");class c{constructor(t,n,r){this.table=t,this.column=n,this.index=r}_set(t,n){this.table.cacheState(),this.column[t]=n}get name(){return this.column.name}set name(t){this._set("name",t)}get filterButton(){return this.column.filterButton}set filterButton(t){this.column.filterButton=t}get style(){return this.column.style}set style(t){this.column.style=t}get totalsRowLabel(){return this.column.totalsRowLabel}set totalsRowLabel(t){this._set("totalsRowLabel",t)}get totalsRowFunction(){return this.column.totalsRowFunction}set totalsRowFunction(t){this._set("totalsRowFunction",t)}get totalsRowResult(){return this.column.totalsRowResult}set totalsRowResult(t){this._set("totalsRowResult",t)}get totalsRowFormula(){return this.column.totalsRowFormula}set totalsRowFormula(t){this._set("totalsRowFormula",t)}}class u{constructor(t,n){this.worksheet=t,n&&(this.table=n,this.validate(),this.store())}getFormula(t){switch(t.totalsRowFunction){case"none":return null;case"average":return`SUBTOTAL(101,${this.table.name}[${t.name}])`;case"countNums":return`SUBTOTAL(102,${this.table.name}[${t.name}])`;case"count":return`SUBTOTAL(103,${this.table.name}[${t.name}])`;case"max":return`SUBTOTAL(104,${this.table.name}[${t.name}])`;case"min":return`SUBTOTAL(105,${this.table.name}[${t.name}])`;case"stdDev":return`SUBTOTAL(106,${this.table.name}[${t.name}])`;case"var":return`SUBTOTAL(107,${this.table.name}[${t.name}])`;case"sum":return`SUBTOTAL(109,${this.table.name}[${t.name}])`;case"custom":return t.totalsRowFormula;default:throw new Error(`Invalid Totals Row Function: ${t.totalsRowFunction}`)}}get width(){return this.table.columns.length}get height(){return this.table.rows.length}get filterHeight(){return this.height+(this.table.headerRow?1:0)}get tableHeight(){return this.filterHeight+(this.table.totalsRow?1:0)}validate(){const{table:t}=this,n=(v,h,w)=>{v[h]===void 0&&(v[h]=w)};n(t,"headerRow",!0),n(t,"totalsRow",!1),n(t,"style",{}),n(t.style,"theme","TableStyleMedium2"),n(t.style,"showFirstColumn",!1),n(t.style,"showLastColumn",!1),n(t.style,"showRowStripes",!1),n(t.style,"showColumnStripes",!1);const r=(v,h)=>{if(!v)throw new Error(h)};r(t.ref,"Table must have ref"),r(t.columns,"Table must have column definitions"),r(t.rows,"Table must have row definitions"),t.tl=f.decodeAddress(t.ref);const{row:i,col:o}=t.tl;r(i>0,"Table must be on valid row"),r(o>0,"Table must be on valid col");const{width:l,filterHeight:a,tableHeight:g}=this;t.autoFilterRef=f.encode(i,o,i+a-1,o+l-1),t.tableRef=f.encode(i,o,i+g-1,o+l-1),t.columns.forEach((v,h)=>{r(v.name,`Column ${h} must have a name`),h===0?n(v,"totalsRowLabel","Total"):(n(v,"totalsRowFunction","none"),v.totalsRowFormula=this.getFormula(v))})}store(){const t=(a,g)=>{g&&Object.keys(g).forEach(v=>{a[v]=g[v]})},{worksheet:n,table:r}=this,{row:i,col:o}=r.tl;let l=0;if(r.headerRow){const a=n.getRow(i+l++);r.columns.forEach((g,v)=>{const{style:h,name:w}=g,y=a.getCell(o+v);y.value=w,t(y,h)})}if(r.rows.forEach(a=>{const g=n.getRow(i+l++);a.forEach((v,h)=>{const w=g.getCell(o+h);w.value=v,t(w,r.columns[h].style)})}),r.totalsRow){const a=n.getRow(i+l++);r.columns.forEach((g,v)=>{const h=a.getCell(o+v);v===0?h.value=g.totalsRowLabel:this.getFormula(g)?h.value={formula:g.totalsRowFormula,result:g.totalsRowResult}:h.value=null,t(h,g.style)})}}load(t){const{table:n}=this,{row:r,col:i}=n.tl;let o=0;if(n.headerRow){const l=t.getRow(r+o++);n.columns.forEach((a,g)=>{const v=l.getCell(i+g);v.value=a.name})}if(n.rows.forEach(l=>{const a=t.getRow(r+o++);l.forEach((g,v)=>{const h=a.getCell(i+v);h.value=g})}),n.totalsRow){const l=t.getRow(r+o++);n.columns.forEach((a,g)=>{const v=l.getCell(i+g);g===0?v.value=a.totalsRowLabel:this.getFormula(a)&&(v.value={formula:a.totalsRowFormula,result:a.totalsRowResult})})}}get model(){return this.table}set model(t){this.table=t}cacheState(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}commit(){if(!this._cache)return;this.validate();const t=f.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(let n=0;n1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.rows.splice(t,n)}getColumn(t){const n=this.table.columns[t];return new c(this,n,t)}addColumn(t,n,r){this.cacheState(),r===void 0?(this.table.columns.push(t),this.table.rows.forEach((i,o)=>{i.push(n[o])})):(this.table.columns.splice(r,0,t),this.table.rows.forEach((i,o)=>{i.splice(r,0,n[o])}))}removeColumns(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.columns.splice(t,n),this.table.rows.forEach(r=>{r.splice(t,n)})}_assign(t,n,r){this.cacheState(),t[n]=r}get ref(){return this.table.ref}set ref(t){this._assign(this.table,"ref",t)}get name(){return this.table.name}set name(t){this.table.name=t}get displayName(){return this.table.displyName||this.table.name}set displayNamename(t){this.table.displayName=t}get headerRow(){return this.table.headerRow}set headerRow(t){this._assign(this.table,"headerRow",t)}get totalsRow(){return this.table.totalsRow}set totalsRow(t){this._assign(this.table,"totalsRow",t)}get theme(){return this.table.style.name}set theme(t){this.table.style.name=t}get showFirstColumn(){return this.table.style.showFirstColumn}set showFirstColumn(t){this.table.style.showFirstColumn=t}get showLastColumn(){return this.table.style.showLastColumn}set showLastColumn(t){this.table.style.showLastColumn=t}get showRowStripes(){return this.table.style.showRowStripes}set showRowStripes(t){this.table.style.showRowStripes=t}get showColumnStripes(){return this.table.style.showColumnStripes}set showColumnStripes(t){this.table.style.showColumnStripes=t}}d.exports=u},{"../utils/col-cache":19}],13:[function(e,d,m){const f=e("./worksheet"),c=e("./defined-names"),u=e("../xlsx/xlsx"),s=e("../csv/csv");class t{constructor(){this.category="",this.company="",this.created=new Date,this.description="",this.keywords="",this.manager="",this.modified=this.created,this.properties={},this.calcProperties={},this._worksheets=[],this.subject="",this.title="",this.views=[],this.media=[],this._definedNames=new c}get xlsx(){return this._xlsx||(this._xlsx=new u(this)),this._xlsx}get csv(){return this._csv||(this._csv=new s(this)),this._csv}get nextId(){for(let r=1;r(h&&h.orderNo)>v?h.orderNo:v,0),a=Object.assign({},i,{id:o,name:r,orderNo:l+1,workbook:this}),g=new f(a);return this._worksheets[o]=g,g}removeWorksheetEx(r){delete this._worksheets[r.id]}removeWorksheet(r){const i=this.getWorksheet(r);i&&i.destroy()}getWorksheet(r){if(r===void 0)return this._worksheets.find(Boolean);if(typeof r=="number")return this._worksheets[r];if(typeof r=="string")return this._worksheets.find(i=>i&&i.name===r)}get worksheets(){return this._worksheets.slice(1).sort((r,i)=>r.orderNo-i.orderNo).filter(Boolean)}eachSheet(r){this.worksheets.forEach(i=>{r(i,i.id)})}get definedNames(){return this._definedNames}clearThemes(){this._themes=void 0}addImage(r){const i=this.media.length;return this.media.push(Object.assign({},r,{type:"image"})),i}getImage(r){return this.media[r]}get model(){return{creator:this.creator||"Unknown",lastModifiedBy:this.lastModifiedBy||"Unknown",lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map(r=>r.model),sheets:this.worksheets.map(r=>r.model).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties}}set model(r){this.creator=r.creator,this.lastModifiedBy=r.lastModifiedBy,this.lastPrinted=r.lastPrinted,this.created=r.created,this.modified=r.modified,this.company=r.company,this.manager=r.manager,this.title=r.title,this.subject=r.subject,this.keywords=r.keywords,this.category=r.category,this.description=r.description,this.language=r.language,this.revision=r.revision,this.contentStatus=r.contentStatus,this.properties=r.properties,this.calcProperties=r.calcProperties,this._worksheets=[],r.worksheets.forEach(i=>{const{id:o,name:l,state:a}=i,g=r.sheets&&r.sheets.findIndex(h=>h.id===o),v=this._worksheets[o]=new f({id:o,name:l,orderNo:g,state:a,workbook:this});v.model=i}),this._definedNames.model=r.definedNames,this.views=r.views,this._themes=r.themes,this.media=r.media||[]}}d.exports=t},{"../csv/csv":1,"../xlsx/xlsx":144,"./defined-names":6,"./worksheet":14}],14:[function(e,d,m){const f=e("../utils/under-dash"),c=e("../utils/col-cache"),u=e("./range"),s=e("./row"),t=e("./column"),n=e("./enums"),r=e("./image"),i=e("./table"),o=e("./data-validations"),l=e("../utils/encryptor"),{copyStyle:a}=e("../utils/copy-style");class g{constructor(h){h=h||{},this._workbook=h.workbook,this.id=h.id,this.orderNo=h.orderNo,this.name=h.name,this.state=h.state||"visible",this._rows=[],this._columns=null,this._keys={},this._merges={},this.rowBreaks=[],this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},h.properties),this.pageSetup=Object.assign({},{margins:{left:.7,right:.7,top:.75,bottom:.75,header:.3,footer:.3},orientation:"portrait",horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!!(h.pageSetup&&(h.pageSetup.fitToWidth||h.pageSetup.fitToHeight)&&!h.pageSetup.scale),pageOrder:"downThenOver",blackAndWhite:!1,draft:!1,cellComments:"None",errors:"displayed",scale:100,fitToWidth:1,fitToHeight:1,paperSize:void 0,showRowColHeaders:!1,showGridLines:!1,firstPageNumber:void 0,horizontalCentered:!1,verticalCentered:!1,rowBreaks:null,colBreaks:null},h.pageSetup),this.headerFooter=Object.assign({},{differentFirst:!1,differentOddEven:!1,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},h.headerFooter),this.dataValidations=new o,this.views=h.views||[],this.autoFilter=h.autoFilter||null,this._media=[],this.sheetProtection=null,this.tables={},this.conditionalFormattings=[]}get name(){return this._name}set name(h){if(h===void 0&&(h=`sheet${this.id}`),this._name!==h){if(typeof h!="string")throw new Error("The name has to be a string.");if(h==="")throw new Error("The name can't be empty.");if(h==="History")throw new Error('The name "History" is protected. Please use a different name.');if(/[*?:/\\[\]]/.test(h))throw new Error(`Worksheet name ${h} cannot include any of the following characters: * ? : \\ / [ ]`);if(/(^')|('$)/.test(h))throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${h}`);if(h&&h.length>31&&(console.warn(`Worksheet name ${h} exceeds 31 chars. This will be truncated`),h=h.substring(0,31)),this._workbook._worksheets.find(w=>w&&w.name.toLowerCase()===h.toLowerCase()))throw new Error(`Worksheet name already exists: ${h}`);this._name=h}}get workbook(){return this._workbook}destroy(){this._workbook.removeWorksheetEx(this)}get dimensions(){const h=new u;return this._rows.forEach(w=>{if(w){const y=w.dimensions;y&&h.expand(w.number,y.min,w.number,y.max)}}),h}get columns(){return this._columns}set columns(h){this._headerRowCount=h.reduce((S,E)=>{const I=E.header&&1||E.headers&&E.headers.length||0;return Math.max(S,I)},0);let w=1;const y=this._columns=[];h.forEach(S=>{const E=new t(this,w++,!1);y.push(E),E.defn=S})}getColumnKey(h){return this._keys[h]}setColumnKey(h,w){this._keys[h]=w}deleteColumnKey(h){delete this._keys[h]}eachColumnKey(h){f.each(this._keys,h)}getColumn(h){if(typeof h=="string"){const w=this._keys[h];if(w)return w;h=c.l2n(h)}if(this._columns||(this._columns=[]),h>this._columns.length){let w=this._columns.length+1;for(;w<=h;)this._columns.push(new t(this,w++))}return this._columns[h-1]}spliceColumns(h,w){const S=this._rows.length;for(var E=arguments.length,I=new Array(E>2?E-2:0),F=2;F0)for(let G=0;G{V.push(H[G]||null)});const J=this.getRow(G+1);J.splice.apply(J,V)}else this._rows.forEach(G=>{G&&G.splice(h,w)});const B=I.length-w,j=h+w,X=this._columns.length;if(B<0)for(let G=h+I.length;G<=X;G++)this.getColumn(G).defn=this.getColumn(G-B).defn;else if(B>0)for(let G=X;G>=j;G--)this.getColumn(G+B).defn=this.getColumn(G).defn;for(let G=h;G{h=Math.max(h,w.cellCount)}),h}get actualColumnCount(){const h=[];let w=0;return this.eachRow(y=>{y.eachCell(S=>{let{col:E}=S;h[E]||(h[E]=!0,w++)})}),w}_commitRow(){}get _lastRowNumber(){const h=this._rows;let w=h.length;for(;w>0&&h[w-1]===void 0;)w--;return w}get _nextRow(){return this._lastRowNumber+1}get lastRow(){if(this._rows.length)return this._rows[this._rows.length-1]}findRow(h){return this._rows[h-1]}findRows(h,w){return this._rows.slice(h-1,h-1+w)}get rowCount(){return this._lastRowNumber}get actualRowCount(){let h=0;return this.eachRow(()=>{h++}),h}getRow(h){let w=this._rows[h-1];return w||(w=this._rows[h-1]=new s(this,h)),w}getRows(h,w){if(w<1)return;const y=[];for(let S=h;S1&&arguments[1]!==void 0?arguments[1]:"n";const y=this._nextRow,S=this.getRow(y);return S.values=h,this._setStyleOption(y,w[0]==="i"?w:"n"),S}addRows(h){let w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"n";const y=[];return h.forEach(S=>{y.push(this.addRow(S,w))}),y}insertRow(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";return this.spliceRows(h,0,w),this._setStyleOption(h,y),this.getRow(h)}insertRows(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";if(this.spliceRows(h,0,...w),y!=="n")for(let S=0;S1&&arguments[1]!==void 0?arguments[1]:"n";w[0]==="o"&&this.findRow(h+1)!==void 0?this._copyStyle(h+1,h,w[1]==="+"):w[0]==="i"&&this.findRow(h-1)!==void 0&&this._copyStyle(h-1,h,w[1]==="+")}_copyStyle(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const S=this.getRow(h),E=this.getRow(w);E.style=a(S.style),S.eachCell({includeEmpty:y},(I,F)=>{E.getCell(F).style=a(I.style)}),E.height=S.height}duplicateRow(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const S=this._rows[h-1],E=new Array(w).fill(S.values);this.spliceRows(h+1,y?0:w,...E);for(let I=0;I{F.getCell(j).style=B.style})}}spliceRows(h,w){const y=h+w;for(var S=arguments.length,E=new Array(S>2?S-2:0),I=2;I{V.getCell(H).style=J.style}),this._rows[X-1]=void 0}else this._rows[X+B-1]=void 0;else if(B>0)for(X=j;X>=y;X--)if(G=this._rows[X-1],G){const V=this.getRow(X+B);V.values=G.values,V.style=G.style,V.height=G.height,G.eachCell({includeEmpty:!0},(J,H)=>{if(V.getCell(H).style=J.style,J._value.constructor.name==="MergeValue"){const M=this.getRow(J._row._number+F).getCell(H),T=J._value._master,_=this.getRow(T._row._number+F).getCell(T._column._number);M.merge(_)}})}else this._rows[X+B-1]=void 0;for(X=0;X{y&&y.hasValues&&w(y,y.number)})}getSheetValues(){const h=[];return this._rows.forEach(w=>{w&&(h[w.number]=w.values)}),h}findCell(h,w){const y=c.getAddress(h,w),S=this._rows[y.row-1];return S?S.findCell(y.col):void 0}getCell(h,w){const y=c.getAddress(h,w);return this.getRow(y.row).getCellEx(y)}mergeCells(){for(var h=arguments.length,w=new Array(h),y=0;y{if(S.intersects(h))throw new Error("Cannot merge already merged cells")});const y=this.getCell(h.top,h.left);for(let S=h.top;S<=h.bottom;S++)for(let E=h.left;E<=h.right;E++)(S>h.top||E>h.left)&&this.getCell(S,E).merge(y,w);this._merges[y.address]=h}_unMergeMaster(h){const w=this._merges[h.address];if(w){for(let y=w.top;y<=w.bottom;y++)for(let S=w.left;S<=w.right;S++)this.getCell(y,S).unmerge();delete this._merges[h.address]}}get hasMerges(){return f.some(this._merges,Boolean)}unMergeCells(){for(var h=arguments.length,w=new Array(h),y=0;y3&&arguments[3]!==void 0?arguments[3]:"shared";const E=c.decode(h),{top:I,left:F,bottom:B,right:j}=E,X=j-F+1,G=c.encodeAddress(I,F),V=S==="shared";let J;typeof y=="function"?J=y:Array.isArray(y)?Array.isArray(y[0])?J=(M,T)=>y[M-I][T-F]:J=(M,T)=>y[(M-I)*X+(T-F)]:J=()=>{};let H=!0;for(let M=I;M<=B;M++)for(let T=F;T<=j;T++)H?(this.getCell(M,T).value={shareType:S,formula:w,ref:h,result:J(M,T)},H=!1):this.getCell(M,T).value=V?{sharedFormula:G,result:J(M,T)}:J(M,T)}addImage(h,w){const y={type:"image",imageId:h,range:w};this._media.push(new r(this,y))}getImages(){return this._media.filter(h=>h.type==="image")}addBackgroundImage(h){const w={type:"background",imageId:h};this._media.push(new r(this,w))}getBackgroundImageId(){const h=this._media.find(w=>w.type==="background");return h&&h.imageId}protect(h,w){return new Promise(y=>{this.sheetProtection={sheet:!0},w&&"spinCount"in w&&(w.spinCount=Number.isFinite(w.spinCount)?Math.round(Math.max(0,w.spinCount)):1e5),h&&(this.sheetProtection.algorithmName="SHA-512",this.sheetProtection.saltValue=l.randomBytes(16).toString("base64"),this.sheetProtection.spinCount=w&&"spinCount"in w?w.spinCount:1e5,this.sheetProtection.hashValue=l.convertPasswordToHash(h,"SHA512",this.sheetProtection.saltValue,this.sheetProtection.spinCount)),w&&(this.sheetProtection=Object.assign(this.sheetProtection,w),!h&&"spinCount"in w&&delete this.sheetProtection.spinCount),y()})}unprotect(){this.sheetProtection=null}addTable(h){const w=new i(this,h);return this.tables[h.name]=w,w}getTable(h){return this.tables[h]}removeTable(h){delete this.tables[h]}getTables(){return Object.values(this.tables)}addConditionalFormatting(h){this.conditionalFormattings.push(h)}removeConditionalFormatting(h){typeof h=="number"?this.conditionalFormattings.splice(h,1):h instanceof Function?this.conditionalFormattings=this.conditionalFormattings.filter(h):this.conditionalFormattings=[]}get tabColor(){return console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor}set tabColor(h){console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor=h}get model(){const h={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map(S=>S.model),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map(S=>S.model),conditionalFormattings:this.conditionalFormattings};h.cols=t.toModel(this.columns);const w=h.rows=[],y=h.dimensions=new u;return this._rows.forEach(S=>{const E=S&&S.model;E&&(y.expand(E.number,E.min,E.number,E.max),w.push(E))}),h.merges=[],f.each(this._merges,S=>{h.merges.push(S.range)}),h}_parseRows(h){this._rows=[],h.rows.forEach(w=>{const y=new s(this,w.number);this._rows[y.number-1]=y,y.model=w})}_parseMergeCells(h){f.each(h.mergeCells,w=>{this.mergeCellsWithoutStyle(w)})}set model(h){this.name=h.name,this._columns=t.fromModel(this,h.cols),this._parseRows(h),this._parseMergeCells(h),this.dataValidations=new o(h.dataValidations),this.properties=h.properties,this.pageSetup=h.pageSetup,this.headerFooter=h.headerFooter,this.views=h.views,this.autoFilter=h.autoFilter,this._media=h.media.map(w=>new r(this,w)),this.sheetProtection=h.sheetProtection,this.tables=h.tables.reduce((w,y)=>{const S=new i;return S.model=y,w[y.name]=S,w},{}),this.conditionalFormattings=h.conditionalFormattings}}d.exports=g},{"../utils/col-cache":19,"../utils/copy-style":20,"../utils/encryptor":21,"../utils/under-dash":26,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(e,d,m){e("core-js/modules/es.promise"),e("core-js/modules/es.promise.finally"),e("core-js/modules/es.object.assign"),e("core-js/modules/es.object.keys"),e("core-js/modules/es.object.values"),e("core-js/modules/es.symbol"),e("core-js/modules/es.symbol.async-iterator"),e("core-js/modules/es.array.iterator"),e("core-js/modules/es.array.includes"),e("core-js/modules/es.array.find-index"),e("core-js/modules/es.array.find"),e("core-js/modules/es.string.from-code-point"),e("core-js/modules/es.string.includes"),e("core-js/modules/es.number.is-nan"),e("regenerator-runtime/runtime");const f={Workbook:e("./doc/workbook")},c=e("./doc/enums");Object.keys(c).forEach(u=>{f[u]=c[u]}),d.exports=f},{"./doc/enums":7,"./doc/workbook":13,"core-js/modules/es.array.find":359,"core-js/modules/es.array.find-index":358,"core-js/modules/es.array.includes":360,"core-js/modules/es.array.iterator":361,"core-js/modules/es.number.is-nan":363,"core-js/modules/es.object.assign":364,"core-js/modules/es.object.keys":366,"core-js/modules/es.object.values":367,"core-js/modules/es.promise":372,"core-js/modules/es.promise.finally":371,"core-js/modules/es.string.from-code-point":376,"core-js/modules/es.string.includes":377,"core-js/modules/es.symbol":381,"core-js/modules/es.symbol.async-iterator":378,"regenerator-runtime/runtime":492}],16:[function(e,d,m){const f=typeof TextDecoder>"u"?null:new TextDecoder("utf-8");function c(u){return typeof u=="string"?u:f?f.decode(u):u.toString()}m.bufferToString=c},{}],17:[function(e,d,m){const f=typeof TextEncoder>"u"?null:new TextEncoder("utf-8"),{Buffer:c}=e("buffer");function u(s){return typeof s!="string"?s:f?c.from(f.encode(s).buffer):c.from(s)}m.stringToBuffer=u},{buffer:220}],18:[function(e,d,m){const f=e("./under-dash"),c=e("./col-cache");class u{constructor(t){this.template=t,this.sheets={}}addCell(t){this.addCellEx(c.decodeEx(t))}getCell(t){return this.findCellEx(c.decodeEx(t),!0)}findCell(t){return this.findCellEx(c.decodeEx(t),!1)}findCellAt(t,n,r){const i=this.sheets[t],o=i&&i[n];return o&&o[r]}addCellEx(t){if(t.top)for(let n=t.top;n<=t.bottom;n++)for(let r=t.left;r<=t.right;r++)this.getCellAt(t.sheetName,n,r);else this.findCellEx(t,!0)}getCellEx(t){return this.findCellEx(t,!0)}findCellEx(t,n){const r=this.findSheet(t,n),i=this.findSheetRow(r,t,n);return this.findRowCell(i,t,n)}getCellAt(t,n,r){const i=this.sheets[t]||(this.sheets[t]=[]),o=i[n]||(i[n]=[]);return o[r]||(o[r]={sheetName:t,address:c.n2l(r)+n,row:n,col:r})}removeCellEx(t){const n=this.findSheet(t);if(!n)return;const r=this.findSheetRow(n,t);r&&delete r[t.col]}forEachInSheet(t,n){const r=this.sheets[t];r&&r.forEach((i,o)=>{i&&i.forEach((l,a)=>{l&&n(l,o,a)})})}forEach(t){f.each(this.sheets,(n,r)=>{this.forEachInSheet(r,t)})}map(t){const n=[];return this.forEach(r=>{n.push(t(r))}),n}findSheet(t,n){const r=t.sheetName;if(this.sheets[r])return this.sheets[r];if(n)return this.sheets[r]=[]}findSheetRow(t,n,r){const{row:i}=n;if(t&&t[i])return t[i];if(r)return t[i]=[]}findRowCell(t,n,r){const{col:i}=n;if(t&&t[i])return t[i];if(r)return t[i]=this.template?Object.assign(n,JSON.parse(JSON.stringify(this.template))):n}spliceRows(t,n,r,i){const o=this.sheets[t];if(o){const l=[];for(let a=0;a{a.splice(n,r,...l)})}}}d.exports=u},{"./col-cache":19,"./under-dash":26}],19:[function(e,d,m){const f=/^[A-Z]+\d+$/,c={_dictionary:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],_l2nFill:0,_l2n:{},_n2l:[],_level(u){return u<=26?1:u<=676?2:3},_fill(u){let s,t,n,r,i,o=1;if(u>=4)throw new Error("Out of bounds. Excel supports columns from 1 to 16384");if(this._l2nFill<1&&u>=1){for(;o<=26;)s=this._dictionary[o-1],this._n2l[o]=s,this._l2n[s]=o,o++;this._l2nFill=1}if(this._l2nFill<2&&u>=2){for(o=27;o<=702;)t=o-27,n=t%26,r=Math.floor(t/26),s=this._dictionary[r]+this._dictionary[n],this._n2l[o]=s,this._l2n[s]=o,o++;this._l2nFill=2}if(this._l2nFill<3&&u>=3){for(o=703;o<=16384;)t=o-703,n=t%26,r=Math.floor(t/26)%26,i=Math.floor(t/676),s=this._dictionary[i]+this._dictionary[r]+this._dictionary[n],this._n2l[o]=s,this._l2n[s]=o,o++;this._l2nFill=3}},l2n(u){if(this._l2n[u]||this._fill(u.length),!this._l2n[u])throw new Error(`Out of bounds. Invalid column letter: ${u}`);return this._l2n[u]},n2l(u){if(u<1||u>16384)throw new Error(`${u} is out of bounds. Excel supports columns from 1 to 16384`);return this._n2l[u]||this._fill(this._level(u)),this._n2l[u]},_hash:{},validateAddress(u){if(!f.test(u))throw new Error(`Invalid Address: ${u}`);return!0},decodeAddress(u){const s=u.length<5&&this._hash[u];if(s)return s;let t=!1,n="",r=0,i=!1,o="",l=0;for(let g=0,v;g=65&&v<=90)t=!0,n+=u[g],r=r*26+v-64;else if(v>=48&&v<=57)i=!0,o+=u[g],l=l*10+v-48;else if(i&&t&&v!==36)break;if(!t)r=void 0;else if(r>16384)throw new Error(`Out of bounds. Invalid column letter: ${n}`);i||(l=void 0),u=n+o;const a={address:u,col:r,row:l,$col$row:`$${n}$${o}`};return r<=100&&l<=100&&(this._hash[u]=a,this._hash[a.$col$row]=a),a},getAddress(u,s){if(s){const t=this.n2l(s)+u;return this.decodeAddress(t)}return this.decodeAddress(u)},decode(u){const s=u.split(":");if(s.length===2){const t=this.decodeAddress(s[0]),n=this.decodeAddress(s[1]),r={top:Math.min(t.row,n.row),left:Math.min(t.col,n.col),bottom:Math.max(t.row,n.row),right:Math.max(t.col,n.col)};return r.tl=this.n2l(r.left)+r.top,r.br=this.n2l(r.right)+r.bottom,r.dimensions=`${r.tl}:${r.br}`,r}return this.decodeAddress(u)},decodeEx(u){const s=u.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),t=s[1]||s[2],n=s[3],r=n.split(":");if(r.length>1){let o=this.decodeAddress(r[0]),l=this.decodeAddress(r[1]);const a=Math.min(o.row,l.row),g=Math.min(o.col,l.col),v=Math.max(o.row,l.row),h=Math.max(o.col,l.col);return o=this.n2l(g)+a,l=this.n2l(h)+v,{top:a,left:g,bottom:v,right:h,sheetName:t,tl:{address:o,col:g,row:a,$col$row:`$${this.n2l(g)}$${a}`,sheetName:t},br:{address:l,col:h,row:v,$col$row:`$${this.n2l(h)}$${v}`,sheetName:t},dimensions:`${o}:${l}`}}if(n.startsWith("#"))return t?{sheetName:t,error:n}:{error:n};const i=this.decodeAddress(n);return t?{sheetName:t,...i}:i},encodeAddress(u,s){return c.n2l(s)+u},encode(){switch(arguments.length){case 2:return c.encodeAddress(arguments[0],arguments[1]);case 4:return`${c.encodeAddress(arguments[0],arguments[1])}:${c.encodeAddress(arguments[2],arguments[3])}`;default:throw new Error("Can only encode with 2 or 4 arguments")}},inRange(u,s){const[t,n,,r,i]=u,[o,l]=s;return o>=t&&o<=r&&l>=n&&l<=i}};d.exports=c},{}],20:[function(e,d,m){const f=(t,n)=>({...t,...n.reduce((r,i)=>(t[i]&&(r[i]={...t[i]}),r),{})}),c=function(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[];t[r]&&(n[r]=f(t[r],i))},u=t=>Object.keys(t).length===0,s=t=>{if(!t)return t;if(u(t))return{};const n={...t};return c(t,n,"font",["color"]),c(t,n,"alignment"),c(t,n,"protection"),t.border&&(c(t,n,"border"),c(t.border,n.border,"top",["color"]),c(t.border,n.border,"left",["color"]),c(t.border,n.border,"bottom",["color"]),c(t.border,n.border,"right",["color"]),c(t.border,n.border,"diagonal",["color"])),t.fill&&(c(t,n,"fill",["fgColor","bgColor","center"]),t.fill.stops&&(n.fill.stops=t.fill.stops.map(r=>f(r,["color"])))),n};m.copyStyle=s},{}],21:[function(e,d,m){(function(f){(function(){const c=e("crypto"),u={hash(s){const t=c.createHash(s);for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{n=i});let r=[];t.on("opentag",i=>r.push({eventType:"opentag",value:i})),t.on("text",i=>r.push({eventType:"text",value:i})),t.on("closetag",i=>r.push({eventType:"closetag",value:i}));for await(const i of s){if(t.write(u(i)),n)throw n;yield r,r=[]}}},{"./browser-buffer-decode":16,"readable-stream":491,saxes:496}],23:[function(e,d,m){const f=e("./col-cache"),c=/(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi,u=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;function s(t,n,r){const i=f.decode(n),o=f.decode(r);return t.replace(c,(l,a,g,v,h)=>{if(h)return l;const w=u.exec(v);if(w){const y=w[1],S=w[2].toUpperCase(),E=w[3],I=w[4];if(S.length>3||S.length===3&&S>"XFD")return l;let F=f.l2n(S),B=parseInt(I,10);return y||(F+=o.col-i.col),E||(B+=o.row-i.row),(a||"")+(y||"")+f.n2l(F)+(E||"")+B}return l})}d.exports={slideFormula:s}},{"./col-cache":19}],24:[function(e,d,m){(function(f,c){(function(){const u=e("readable-stream"),s=e("./utils"),t=e("./string-buf");class n{constructor(g,v){this._data=g,this._encoding=v}get length(){return this.toBuffer().length}copy(g,v,h,w){return this.toBuffer().copy(g,v,h,w)}toBuffer(){return this._buffer||(this._buffer=c.from(this._data,this._encoding)),this._buffer}}class r{constructor(g){this._data=g}get length(){return this._data.length}copy(g,v,h,w){return this._data._buf.copy(g,v,h,w)}toBuffer(){return this._data.toBuffer()}}class i{constructor(g){this._data=g}get length(){return this._data.length}copy(g,v,h,w){this._data.copy(g,v,h,w)}toBuffer(){return this._data}}class o{constructor(g){this.size=g,this.buffer=c.alloc(g),this.iRead=0,this.iWrite=0}toBuffer(){if(this.iRead===0&&this.iWrite===this.size)return this.buffer;const g=c.alloc(this.iWrite-this.iRead);return this.buffer.copy(g,0,this.iRead,this.iWrite),g}get length(){return this.iWrite-this.iRead}get eod(){return this.iRead===this.iWrite}get full(){return this.iWrite===this.size}read(g){let v;return g===0?null:g===void 0||g>=this.length?(v=this.toBuffer(),this.iRead=this.iWrite,v):(v=c.alloc(g),this.buffer.copy(v,0,this.iRead,g),this.iRead+=g,v)}write(g,v,h){const w=Math.min(h,this.size-this.iWrite);return g.copy(this.buffer,this.iWrite,v,v+w),this.iWrite+=w,w}}const l=function(a){a=a||{},this.bufSize=a.bufSize||1024*1024,this.buffers=[],this.batch=a.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};s.inherits(l,u.Duplex,{toBuffer(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return c.concat(this.buffers.map(a=>a.toBuffer()))}},_getWritableBuffer(){if(this.buffers.length){const g=this.buffers[this.buffers.length-1];if(!g.full)return g}const a=new o(this.bufSize);return this.buffers.push(a),a},async _pipe(a){const g=function(v){return new Promise(h=>{v.write(a.toBuffer(),()=>{h()})})};await Promise.all(this.pipes.map(g))},_writeToBuffers(a){let g=0;const v=a.length;for(;g1;)this._pipe(this.buffers.shift());else this.corked?(this._writeToBuffers(h),f.nextTick(v)):(await this._pipe(h),v());else this.paused||this.emit("data",h.toBuffer()),this._writeToBuffers(h),this.emit("readable");return!0},cork(){this.corked=!0},_flush(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork(){this.corked=!1,this._flush()},end(a,g,v){const h=w=>{w?v(w):(this._flush(),this.pipes.forEach(y=>{y.end()}),this.emit("finish"))};a?this.write(a,g,h):h()},read(a){let g;if(a){for(g=[];a&&this.buffers.length&&!this.buffers[0].eod;){const v=this.buffers[0],h=v.read(a);a-=h.length,g.push(h),v.eod&&v.full&&this.buffers.shift()}return c.concat(g)}return g=this.buffers.map(v=>v.toBuffer()).filter(Boolean),this.buffers=[],c.concat(g)},setEncoding(a){this.encoding=a},pause(){this.paused=!0},resume(){this.paused=!1},isPaused(){return!!this.paused},pipe(a){this.pipes.push(a),!this.paused&&this.buffers.length&&this.end()},unpipe(a){this.pipes=this.pipes.filter(g=>g!==a)},unshift(){throw new Error("Not Implemented")},wrap(){throw new Error("Not Implemented")}}),d.exports=l}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"./string-buf":25,"./utils":27,_process:467,buffer:220,"readable-stream":491}],25:[function(e,d,m){(function(f){(function(){class c{constructor(s){this._buf=f.alloc(s&&s.size||16384),this._encoding=s&&s.encoding||"utf8",this._inPos=0,this._buffer=void 0}get length(){return this._inPos}get capacity(){return this._buf.length}get buffer(){return this._buf}toBuffer(){return this._buffer||(this._buffer=f.alloc(this.length),this._buf.copy(this._buffer,0,0,this.length)),this._buffer}reset(s){s=s||0,this._buffer=void 0,this._inPos=s}_grow(s){let t=this._buf.length*2;for(;t=this._buf.length-4;)this._grow(this._inPos+s.length),t=this._inPos+this._buf.write(s,this._inPos,this._encoding);this._inPos=t}addStringBuf(s){s.length&&(this._buffer=void 0,this.length+s.length>this.capacity&&this._grow(this.length+s.length),s._buf.copy(this._buf,this._inPos,0,s.length),this._inPos+=s.length)}}d.exports=c}).call(this)}).call(this,e("buffer").Buffer)},{buffer:220}],26:[function(e,d,m){const{toString:f}=Object.prototype,c=/["&<>]/,u={each:function(t,n){t&&(Array.isArray(t)?t.forEach(n):Object.keys(t).forEach(r=>{n(t[r],r)}))},some:function(t,n){return t?Array.isArray(t)?t.some(n):Object.keys(t).some(r=>n(t[r],r)):!1},every:function(t,n){return t?Array.isArray(t)?t.every(n):Object.keys(t).every(r=>n(t[r],r)):!0},map:function(t,n){return t?Array.isArray(t)?t.map(n):Object.keys(t).map(r=>n(t[r],r)):[]},keyBy(s,t){return s.reduce((n,r)=>(n[r[t]]=r,n),{})},isEqual:function(t,n){const r=typeof t,i=typeof n,o=Array.isArray(t),l=Array.isArray(n);let a;if(r!==i)return!1;switch(typeof t){case"object":if(o||l)return o&&l?t.length===n.length&&t.every((g,v)=>{const h=n[v];return u.isEqual(g,h)}):!1;if(t===null||n===null)return t===n;if(a=Object.keys(t),Object.keys(n).length!==a.length)return!1;for(const g of a)if(!n.hasOwnProperty(g))return!1;return u.every(t,(g,v)=>{const h=n[v];return u.isEqual(g,h)});default:return t===n}},escapeHtml(s){const t=c.exec(s);if(!t)return s;let n="",r="",i=0,o=t.index;for(;o":r=">";break;default:continue}i!==o&&(n+=s.substring(i,o)),i=o+1,n+=r}return i!==o?n+s.substring(i,o):n},strcmp(s,t){return st?1:0},isUndefined(s){return f.call(s)==="[object Undefined]"},isObject(s){return f.call(s)==="[object Object]"},deepMerge(){const s=arguments[0]||{},{length:t}=arguments;let n,r,i;function o(l,a){n=s[a],i=Array.isArray(l),u.isObject(l)||i?(i?(i=!1,r=n&&Array.isArray(n)?n:[]):r=n&&u.isObject(n)?n:{},s[a]=u.deepMerge(r,l)):u.isUndefined(l)||(s[a]=l)}for(let l=0;l{Object.defineProperty(r,g,Object.getOwnPropertyDescriptor(o,g))});const a={constructor:{value:r,enumerable:!1,writable:!1,configurable:!0}};l&&Object.keys(l).forEach(g=>{a[g]=Object.getOwnPropertyDescriptor(l,g)}),r.prototype=Object.create(i.prototype,a)},t=/[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/,n={nop(){},promiseImmediate(r){return new Promise(i=>{f.setImmediate?c(()=>{i(r)}):setTimeout(()=>{i(r)},1)})},inherits:s,dateToExcel(r,i){return 25569+r.getTime()/(24*3600*1e3)-(i?1462:0)},excelToDate(r,i){const o=Math.round((r-25569+(i?1462:0))*24*3600*1e3);return new Date(o)},parsePath(r){const i=r.lastIndexOf("/");return{path:r.substring(0,i),name:r.substring(i+1)}},getRelsPath(r){const i=n.parsePath(r);return`${i.path}/_rels/${i.name}.rels`},xmlEncode(r){const i=t.exec(r);if(!i)return r;let o="",l="",a=0,g=i.index;for(;g=11&&v!==13)){l="";break}continue}}a!==g&&(o+=r.substring(a,g)),a=g+1,l&&(o+=l)}return a!==g?o+r.substring(a,g):o},xmlDecode(r){return r.replace(/&([a-z]*);/g,i=>{switch(i){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case""":return'"';default:return i}})},validInt(r){const i=parseInt(r,10);return Number.isNaN(i)?0:i},isDateFmt(r){return r?(r=r.replace(/\[[^\]]*]/g,""),r=r.replace(/"[^"]*"/g,""),r.match(/[ymdhMsb]+/)!==null):!1},fs:{exists(r){return new Promise(i=>{u.access(r,u.constants.F_OK,o=>{i(!o)})})}},toIsoDateString(r){return r.toIsoString().subsstr(0,10)},parseBoolean(r){return r===!0||r==="true"||r===1||r==="1"}};d.exports=n}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{},e("timers").setImmediate)},{fs:216,timers:523}],28:[function(e,d,m){const f=e("./under-dash"),c=e("./utils"),u="<",s=">",t="";function r(l,a,g){l.push(` ${a}="${c.xmlEncode(g.toString())}"`)}function i(l,a){if(a){const g=[];f.each(a,(v,h)=>{v!==void 0&&r(g,h,v)}),l.push(g.join(""))}}class o{constructor(){this._xml=[],this._stack=[],this._rollbacks=[]}get tos(){return this._stack.length?this._stack[this._stack.length-1]:void 0}get cursor(){return this._xml.length}openXml(a){const g=this._xml;g.push(" +`)}openNode(a,g){const v=this.tos,h=this._xml;v&&this.open&&h.push(s),this._stack.push(a),h.push(u),h.push(a),i(h,g),this.leaf=!0,this.open=!0}addAttribute(a,g){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");g!==void 0&&r(this._xml,a,g)}addAttributes(a){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");i(this._xml,a)}writeText(a){const g=this._xml;this.open&&(g.push(s),this.open=!1),this.leaf=!1,g.push(c.xmlEncode(a.toString()))}writeXml(a){this.open&&(this._xml.push(s),this.open=!1),this.leaf=!1,this._xml.push(a)}closeNode(){const a=this._stack.pop(),g=this._xml;this.leaf?g.push(n):(g.push(t),g.push(a),g.push(s)),this.open=!1,this.leaf=!1}leafNode(a,g,v){this.openNode(a,g),v!==void 0&&this.writeText(v),this.closeNode()}closeAll(){for(;this._stack.length;)this.closeNode()}addRollback(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}commit(){this._rollbacks.pop()}rollback(){const a=this._rollbacks.pop();this._xml.length>a.xml&&this._xml.splice(a.xml,this._xml.length-a.xml),this._stack.length>a.stack&&this._stack.splice(a.stack,this._stack.length-a.stack),this.leaf=a.leaf,this.open=a.open}get xml(){return this.closeAll(),this._xml.join("")}}o.StdDocAttributes={version:"1.0",encoding:"UTF-8",standalone:"yes"},d.exports=o},{"./under-dash":26,"./utils":27}],29:[function(e,d,m){(function(f){(function(){const c=e("events"),u=e("jszip"),s=e("./stream-buf"),{stringToBuffer:t}=e("./browser-buffer-encode");class n extends c.EventEmitter{constructor(i){super(),this.options=Object.assign({type:"nodebuffer",compression:"DEFLATE"},i),this.zip=new u,this.stream=new s}append(i,o){o.hasOwnProperty("base64")&&o.base64?this.zip.file(o.name,i,{base64:!0}):(f.browser&&typeof i=="string"&&(i=t(i)),this.zip.file(o.name,i))}async finalize(){const i=await this.zip.generateAsync(this.options);this.stream.end(i),this.emit("finish")}read(i){return this.stream.read(i)}setEncoding(i){return this.stream.setEncoding(i)}pause(){return this.stream.pause()}resume(){return this.stream.resume()}isPaused(){return this.stream.isPaused()}pipe(i,o){return this.stream.pipe(i,o)}unpipe(i){return this.stream.unpipe(i)}unshift(i){return this.stream.unshift(i)}wrap(i){return this.stream.wrap(i)}}d.exports={ZipWriter:n}}).call(this)}).call(this,e("_process"))},{"./browser-buffer-encode":17,"./stream-buf":24,_process:467,events:422,jszip:441}],30:[function(e,d,m){d.exports={0:{f:"General"},1:{f:"0"},2:{f:"0.00"},3:{f:"#,##0"},4:{f:"#,##0.00"},9:{f:"0%"},10:{f:"0.00%"},11:{f:"0.00E+00"},12:{f:"# ?/?"},13:{f:"# ??/??"},14:{f:"mm-dd-yy"},15:{f:"d-mmm-yy"},16:{f:"d-mmm"},17:{f:"mmm-yy"},18:{f:"h:mm AM/PM"},19:{f:"h:mm:ss AM/PM"},20:{f:"h:mm"},21:{f:"h:mm:ss"},22:{f:'m/d/yy "h":mm'},27:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},28:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},29:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},30:{"zh-tw":"m/d/yy ","zh-cn":"m-d-yy","ja-jp":"m/d/yy","ko-kr":"mm-dd-yy"},31:{"zh-tw":'yyyy"年"m"月"d"日"',"zh-cn":'yyyy"年"m"月"d"日"',"ja-jp":'yyyy"年"m"月"d"日"',"ko-kr":'yyyy"년" mm"월" dd"일"'},32:{"zh-tw":'hh"時"mm"分"',"zh-cn":'h"时"mm"分"',"ja-jp":'h"時"mm"分"',"ko-kr":'h"시" mm"분"'},33:{"zh-tw":'hh"時"mm"分"ss"秒"',"zh-cn":'h"时"mm"分"ss"秒"',"ja-jp":'h"時"mm"分"ss"秒"',"ko-kr":'h"시" mm"분" ss"초"'},34:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},35:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},36:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},37:{f:"#,##0 ;(#,##0)"},38:{f:"#,##0 ;[Red](#,##0)"},39:{f:"#,##0.00 ;(#,##0.00)"},40:{f:"#,##0.00 ;[Red](#,##0.00)"},45:{f:"mm:ss"},46:{f:"[h]:mm:ss"},47:{f:"mmss.0"},48:{f:"##0.0E+0"},49:{f:"@"},50:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},51:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},52:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'yyyy"年"m"月"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},53:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'m"月"d"日"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},54:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},55:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},56:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},57:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},58:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},59:{"th-th":"t0"},60:{"th-th":"t0.00"},61:{"th-th":"t#,##0"},62:{"th-th":"t#,##0.00"},67:{"th-th":"t0%"},68:{"th-th":"t0.00%"},69:{"th-th":"t# ?/?"},70:{"th-th":"t# ??/??"},81:{"th-th":"d/m/bb"}}},{}],31:[function(e,d,m){d.exports={OfficeDocument:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",Worksheet:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",CalcChain:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain",SharedStrings:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",Styles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",Theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",Hyperlink:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",Image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",CoreProperties:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",ExtenderProperties:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",Comments:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",VmlDrawing:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",Table:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table"}},{}],32:[function(e,d,m){const f=e("../../utils/parse-sax"),c=e("../../utils/xml-stream");class u{prepare(){}render(){}parseOpen(t){}parseText(t){}parseClose(t){}reconcile(t,n){}reset(){this.model=null,this.map&&Object.values(this.map).forEach(t=>{t instanceof u?t.reset():t.xform&&t.xform.reset()})}mergeModel(t){this.model=Object.assign(this.model||{},t)}async parse(t){for await(const n of t)for(const{eventType:r,value:i}of n)if(r==="opentag")this.parseOpen(i);else if(r==="text")this.parseText(i);else if(r==="closetag"&&!this.parseClose(i.name))return this.model;return this.model}async parseStream(t){return this.parse(f(t))}get xml(){return this.toXml(this.model)}toXml(t){const n=new c;return this.render(n,t),n.xml}static toAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(t===void 0){if(r)return n}else if(r||t!==n)return t.toString()}static toStringAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return u.toAttribute(t,n,r)}static toStringValue(t,n){return t===void 0?n:t}static toBoolAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(t===void 0){if(r)return n}else if(r||t!==n)return t?"1":"0"}static toBoolValue(t,n){return t===void 0?n:t==="1"}static toIntAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return u.toAttribute(t,n,r)}static toIntValue(t,n){return t===void 0?n:parseInt(t,10)}static toFloatAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return u.toAttribute(t,n,r)}static toFloatValue(t,n){return t===void 0?n:parseFloat(t)}}d.exports=u},{"../../utils/parse-sax":22,"../../utils/xml-stream":28}],33:[function(e,d,m){const f=e("../base-xform"),c=e("../../../utils/col-cache");class u extends f{render(r,i){r.openNode("definedName",{name:i.name,localSheetId:i.localSheetId}),r.writeText(i.ranges.join(",")),r.closeNode()}parseOpen(r){switch(r.name){case"definedName":return this._parsedName=r.attributes.name,this._parsedLocalSheetId=r.attributes.localSheetId,this._parsedText=[],!0;default:return!1}}parseText(r){this._parsedText.push(r)}parseClose(){return this.model={name:this._parsedName,ranges:t(this._parsedText.join(""))},this._parsedLocalSheetId!==void 0&&(this.model.localSheetId=parseInt(this._parsedLocalSheetId,10)),!1}}function s(n){try{return c.decodeEx(n),!0}catch{return!1}}function t(n){const r=[];let i=!1,o="";return n.split(",").forEach(l=>{if(!l)return;const a=(l.match(/'/g)||[]).length;if(!a){i?o+=`${l},`:s(l)&&r.push(l);return}const g=a%2===0;!i&&g&&s(l)?r.push(l):i&&!g?(i=!1,s(o+l)&&r.push(o+l),o=""):(i=!0,o+=`${l},`)}),r}d.exports=u},{"../../../utils/col-cache":19,"../base-xform":32}],34:[function(e,d,m){const f=e("../../../utils/utils"),c=e("../base-xform");class u extends c{render(t,n){t.leafNode("sheet",{sheetId:n.id,name:n.name,state:n.state,"r:id":n.rId})}parseOpen(t){return t.name==="sheet"?(this.model={name:f.xmlDecode(t.attributes.name),id:parseInt(t.attributes.sheetId,10),state:t.attributes.state,rId:t.attributes["r:id"]},!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../../../utils/utils":27,"../base-xform":32}],35:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.leafNode("calcPr",{calcId:171027,fullCalcOnLoad:t.fullCalcOnLoad?1:void 0})}parseOpen(s){return s.name==="calcPr"?(this.model={},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],36:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.leafNode("workbookPr",{date1904:t.date1904?1:void 0,defaultThemeVersion:164011,filterPrivacy:1})}parseOpen(s){return s.name==="workbookPr"?(this.model={date1904:s.attributes.date1904==="1"},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],37:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){const n={xWindow:t.x||0,yWindow:t.y||0,windowWidth:t.width||12e3,windowHeight:t.height||24e3,firstSheet:t.firstSheet,activeTab:t.activeTab};t.visibility&&t.visibility!=="visible"&&(n.visibility=t.visibility),s.leafNode("workbookView",n)}parseOpen(s){if(s.name==="workbookView"){const t=this.model={},n=function(i,o,l){const a=o!==void 0?t[i]=o:l;a!==void 0&&(t[i]=a)},r=function(i,o,l){const a=o!==void 0?t[i]=parseInt(o,10):l;a!==void 0&&(t[i]=a)};return r("x",s.attributes.xWindow,0),r("y",s.attributes.yWindow,0),r("width",s.attributes.windowWidth,25e3),r("height",s.attributes.windowHeight,1e4),n("visibility",s.attributes.visibility,"visible"),r("activeTab",s.attributes.activeTab,void 0),r("firstSheet",s.attributes.firstSheet,void 0),!0}return!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],38:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../utils/col-cache"),u=e("../../../utils/xml-stream"),s=e("../base-xform"),t=e("../static-xform"),n=e("../list-xform"),r=e("./defined-name-xform"),i=e("./sheet-xform"),o=e("./workbook-view-xform"),l=e("./workbook-properties-xform"),a=e("./workbook-calc-properties-xform");class g extends s{constructor(){super(),this.map={fileVersion:g.STATIC_XFORMS.fileVersion,workbookPr:new l,bookViews:new n({tag:"bookViews",count:!1,childXform:new o}),sheets:new n({tag:"sheets",count:!1,childXform:new i}),definedNames:new n({tag:"definedNames",count:!1,childXform:new r}),calcPr:new a}}prepare(h){h.sheets=h.worksheets;const w=[];let y=0;h.sheets.forEach(S=>{if(S.pageSetup&&S.pageSetup.printArea&&S.pageSetup.printArea.split("&&").forEach(E=>{const I=E.split(":"),F={name:"_xlnm.Print_Area",ranges:[`'${S.name}'!$${I[0]}:$${I[1]}`],localSheetId:y};w.push(F)}),S.pageSetup&&(S.pageSetup.printTitlesRow||S.pageSetup.printTitlesColumn)){const E=[];if(S.pageSetup.printTitlesColumn){const F=S.pageSetup.printTitlesColumn.split(":");E.push(`'${S.name}'!$${F[0]}:$${F[1]}`)}if(S.pageSetup.printTitlesRow){const F=S.pageSetup.printTitlesRow.split(":");E.push(`'${S.name}'!$${F[0]}:$${F[1]}`)}const I={name:"_xlnm.Print_Titles",ranges:E,localSheetId:y};w.push(I)}y++}),w.length&&(h.definedNames=h.definedNames.concat(w)),(h.media||[]).forEach((S,E)=>{S.name=S.type+(E+1)})}render(h,w){h.openXml(u.StdDocAttributes),h.openNode("workbook",g.WORKBOOK_ATTRIBUTES),this.map.fileVersion.render(h),this.map.workbookPr.render(h,w.properties),this.map.bookViews.render(h,w.views),this.map.sheets.render(h,w.sheets),this.map.definedNames.render(h,w.definedNames),this.map.calcPr.render(h,w.calcProperties),h.closeNode()}parseOpen(h){if(this.parser)return this.parser.parseOpen(h),!0;switch(h.name){case"workbook":return!0;default:return this.parser=this.map[h.name],this.parser&&this.parser.parseOpen(h),!0}}parseText(h){this.parser&&this.parser.parseText(h)}parseClose(h){if(this.parser)return this.parser.parseClose(h)||(this.parser=void 0),!0;switch(h){case"workbook":return this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}},this.map.definedNames.model&&(this.model.definedNames=this.map.definedNames.model),!1;default:return!0}}reconcile(h){const w=(h.workbookRels||[]).reduce((F,B)=>(F[B.Id]=B,F),{}),y=[];let S,E=0;(h.sheets||[]).forEach(F=>{const B=w[F.rId];B&&(S=h.worksheetHash[`xl/${B.Target.replace(/^(\s|\/xl\/)+/,"")}`],S&&(S.name=F.name,S.id=F.id,S.state=F.state,y[E++]=S))});const I=[];f.each(h.definedNames,F=>{if(F.name==="_xlnm.Print_Area"){if(S=y[F.localSheetId],S){S.pageSetup||(S.pageSetup={});const B=c.decodeEx(F.ranges[0]);S.pageSetup.printArea=S.pageSetup.printArea?`${S.pageSetup.printArea}&&${B.dimensions}`:B.dimensions}}else if(F.name==="_xlnm.Print_Titles"){if(S=y[F.localSheetId],S){S.pageSetup||(S.pageSetup={});const B=F.ranges.join(","),j=/\$/g,X=/\$\d+:\$\d+/,G=B.match(X);if(G&&G.length){const H=G[0];S.pageSetup.printTitlesRow=H.replace(j,"")}const V=/\$[A-Z]+:\$[A-Z]+/,J=B.match(V);if(J&&J.length){const H=J[0];S.pageSetup.printTitlesColumn=H.replace(j,"")}}}else I.push(F)}),h.definedNames=I,h.media.forEach((F,B)=>{F.index=B})}}g.WORKBOOK_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x15","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},g.STATIC_XFORMS={fileVersion:new t({tag:"fileVersion",$:{appName:"xl",lastEdited:5,lowestEdited:5,rupBuild:9303}})},d.exports=g},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./defined-name-xform":33,"./sheet-xform":34,"./workbook-calc-properties-xform":35,"./workbook-properties-xform":36,"./workbook-view-xform":37}],39:[function(e,d,m){const f=e("../strings/rich-text-xform"),c=e("../../../utils/utils"),u=e("../base-xform"),s=d.exports=function(t){this.model=t};c.inherits(s,u,{get tag(){return"r"},get richTextXform(){return this._richTextXform||(this._richTextXform=new f),this._richTextXform},render(t,n){n=n||this.model,t.openNode("comment",{ref:n.ref,authorId:0}),t.openNode("text"),n&&n.note&&n.note.texts&&n.note.texts.forEach(r=>{this.richTextXform.render(t,r)}),t.closeNode(),t.closeNode()},parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case"comment":return this.model={type:"note",note:{texts:[]},...t.attributes},!0;case"r":return this.parser=this.richTextXform,this.parser.parseOpen(t),!0;default:return!1}},parseText(t){this.parser&&this.parser.parseText(t)},parseClose(t){switch(t){case"comment":return!1;case"r":return this.model.note.texts.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(t),!0}}})},{"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],40:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../../../utils/utils"),u=e("../base-xform"),s=e("./comment-xform"),t=d.exports=function(){this.map={comment:new s}};c.inherits(t,u,{COMMENTS_ATTRIBUTES:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},{render(n,r){r=r||this.model,n.openXml(f.StdDocAttributes),n.openNode("comments",t.COMMENTS_ATTRIBUTES),n.openNode("authors"),n.leafNode("author",null,"Author"),n.closeNode(),n.openNode("commentList"),r.comments.forEach(i=>{this.map.comment.render(n,i)}),n.closeNode(),n.closeNode()},parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"commentList":return this.model={comments:[]},!0;case"comment":return this.parser=this.map.comment,this.parser.parseOpen(n),!0;default:return!1}},parseText(n){this.parser&&this.parser.parseText(n)},parseClose(n){switch(n){case"commentList":return!1;case"comment":return this.model.comments.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(n),!0}}})},{"../../../utils/utils":27,"../../../utils/xml-stream":28,"../base-xform":32,"./comment-xform":39}],41:[function(e,d,m){const f=e("../../base-xform");class c extends f{constructor(s){super(),this._model=s}get tag(){return this._model&&this._model.tag}render(s,t,n){t===n[2]?s.leafNode(this.tag):this.tag==="x:SizeWithCells"&&t===n[1]&&s.leafNode(this.tag)}parseOpen(s){switch(s.name){case this.tag:return this.model={},this.model[this.tag]=!0,!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../../base-xform":32}],42:[function(e,d,m){const f=e("../../base-xform");class c extends f{constructor(s){super(),this._model=s}get tag(){return this._model&&this._model.tag}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(s){switch(s.name){case this.tag:return this.text="",!0;default:return!1}}parseText(s){this.text=s}parseClose(){return!1}}d.exports=c},{"../../base-xform":32}],43:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"x:Anchor"}getAnchorRect(s){const t=Math.floor(s.left),n=Math.floor((s.left-t)*68),r=Math.floor(s.top),i=Math.floor((s.top-r)*18),o=Math.floor(s.right),l=Math.floor((s.right-o)*68),a=Math.floor(s.bottom),g=Math.floor((s.bottom-a)*18);return[t,n,r,i,o,l,a,g]}getDefaultRect(s){const t=s.col,n=6,r=Math.max(s.row-2,0),i=14,o=t+2,l=2,a=r+4;return[t,n,r,i,o,l,a,16]}render(s,t){const n=t.anchor?this.getAnchorRect(t.anchor):this.getDefaultRect(t.refAddress);s.leafNode("x:Anchor",null,n.join(", "))}parseOpen(s){switch(s.name){case this.tag:return this.text="",!0;default:return!1}}parseText(s){this.text=s}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],44:[function(e,d,m){const f=e("../base-xform"),c=e("./vml-anchor-xform"),u=e("./style/vml-protection-xform"),s=e("./style/vml-position-xform"),t=["twoCells","oneCells","absolute"];class n extends f{constructor(){super(),this.map={"x:Anchor":new c,"x:Locked":new u({tag:"x:Locked"}),"x:LockText":new u({tag:"x:LockText"}),"x:SizeWithCells":new s({tag:"x:SizeWithCells"}),"x:MoveWithCells":new s({tag:"x:MoveWithCells"})}}get tag(){return"x:ClientData"}render(i,o){const{protection:l,editAs:a}=o.note;i.openNode(this.tag,{ObjectType:"Note"}),this.map["x:MoveWithCells"].render(i,a,t),this.map["x:SizeWithCells"].render(i,a,t),this.map["x:Anchor"].render(i,o),this.map["x:Locked"].render(i,l.locked),i.leafNode("x:AutoFill",null,"False"),this.map["x:LockText"].render(i,l.lockText),i.leafNode("x:Row",null,o.refAddress.row-1),i.leafNode("x:Column",null,o.refAddress.col-1),i.closeNode()}parseOpen(i){switch(i.name){case this.tag:this.reset(),this.model={anchor:[],protection:{},editAs:""};break;default:this.parser=this.map[i.name],this.parser&&this.parser.parseOpen(i);break}return!0}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case this.tag:return this.normalizeModel(),!1;default:return!0}}normalizeModel(){const i=Object.assign({},this.map["x:MoveWithCells"].model,this.map["x:SizeWithCells"].model),o=Object.keys(i).length;this.model.editAs=t[o],this.model.anchor=this.map["x:Anchor"].text,this.model.protection.locked=this.map["x:Locked"].text,this.model.protection.lockText=this.map["x:LockText"].text}}d.exports=n},{"../base-xform":32,"./style/vml-position-xform":41,"./style/vml-protection-xform":42,"./vml-anchor-xform":43}],45:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("./vml-shape-xform");class s extends c{constructor(){super(),this.map={"v:shape":new u}}get tag(){return"xml"}render(n,r){n.openXml(f.StdDocAttributes),n.openNode(this.tag,s.DRAWING_ATTRIBUTES),n.openNode("o:shapelayout",{"v:ext":"edit"}),n.leafNode("o:idmap",{"v:ext":"edit",data:1}),n.closeNode(),n.openNode("v:shapetype",{id:"_x0000_t202",coordsize:"21600,21600","o:spt":202,path:"m,l,21600r21600,l21600,xe"}),n.leafNode("v:stroke",{joinstyle:"miter"}),n.leafNode("v:path",{gradientshapeok:"t","o:connecttype":"rect"}),n.closeNode(),r.comments.forEach((i,o)=>{this.map["v:shape"].render(n,i,o)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset(),this.model={comments:[]};break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.model.comments.push(this.parser.model),this.parser=void 0),!0;switch(n){case this.tag:return!1;default:return!0}}reconcile(n,r){n.anchors.forEach(i=>{i.br?this.map["xdr:twoCellAnchor"].reconcile(i,r):this.map["xdr:oneCellAnchor"].reconcile(i,r)})}}s.DRAWING_ATTRIBUTES={"xmlns:v":"urn:schemas-microsoft-com:vml","xmlns:o":"urn:schemas-microsoft-com:office:office","xmlns:x":"urn:schemas-microsoft-com:office:excel"},d.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32,"./vml-shape-xform":46}],46:[function(e,d,m){const f=e("../base-xform"),c=e("./vml-textbox-xform"),u=e("./vml-client-data-xform");class s extends f{constructor(){super(),this.map={"v:textbox":new c,"x:ClientData":new u}}get tag(){return"v:shape"}render(n,r,i){n.openNode("v:shape",s.V_SHAPE_ATTRIBUTES(r,i)),n.leafNode("v:fill",{color2:"infoBackground [80]"}),n.leafNode("v:shadow",{color:"none [81]",obscured:"t"}),n.leafNode("v:path",{"o:connecttype":"none"}),this.map["v:textbox"].render(n,r),this.map["x:ClientData"].render(n,r),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset(),this.model={margins:{insetmode:n.attributes["o:insetmode"]},anchor:"",editAs:"",protection:{}};break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model.margins.inset=this.map["v:textbox"].model&&this.map["v:textbox"].model.inset,this.model.protection=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.protection,this.model.anchor=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.anchor,this.model.editAs=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.editAs,!1;default:return!0}}}s.V_SHAPE_ATTRIBUTES=(t,n)=>({id:`_x0000_s${1025+n}`,type:"#_x0000_t202",style:"position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden",fillcolor:"infoBackground [80]",strokecolor:"none [81]","o:insetmode":t.note.margins&&t.note.margins.insetmode}),d.exports=s},{"../base-xform":32,"./vml-client-data-xform":44,"./vml-textbox-xform":47}],47:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"v:textbox"}conversionUnit(s,t,n){return`${parseFloat(s)*t.toFixed(2)}${n}`}reverseConversionUnit(s){return(s||"").split(",").map(t=>Number(parseFloat(this.conversionUnit(parseFloat(t),.1,"")).toFixed(2)))}render(s,t){const n={style:"mso-direction-alt:auto"};if(t&&t.note){let{inset:r}=t.note&&t.note.margins;Array.isArray(r)&&(r=r.map(i=>this.conversionUnit(i,10,"mm")).join(",")),r&&(n.inset=r)}s.openNode("v:textbox",n),s.leafNode("div",{style:"text-align:left"}),s.closeNode()}parseOpen(s){switch(s.name){case this.tag:return this.model={inset:this.reverseConversionUnit(s.attributes.inset)},!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],48:[function(e,d,m){const f=e("./base-xform");class c extends f{createNewModel(s){return{}}parseOpen(s){return this.parser=this.parser||this.map[s.name],this.parser?(this.parser.parseOpen(s),!0):s.name===this.tag?(this.model=this.createNewModel(s),!0):!1}parseText(s){this.parser&&this.parser.parseText(s)}onParserClose(s,t){this.model[s]=t.model}parseClose(s){return this.parser?(this.parser.parseClose(s)||(this.onParserClose(s,this.parser),this.parser=void 0),!0):s!==this.tag}}d.exports=c},{"./base-xform":32}],49:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.openNode("HeadingPairs"),s.openNode("vt:vector",{size:2,baseType:"variant"}),s.openNode("vt:variant"),s.leafNode("vt:lpstr",void 0,"Worksheets"),s.closeNode(),s.openNode("vt:variant"),s.leafNode("vt:i4",void 0,t.length),s.closeNode(),s.closeNode(),s.closeNode()}parseOpen(s){return s.name==="HeadingPairs"}parseText(){}parseClose(s){return s!=="HeadingPairs"}}d.exports=c},{"../base-xform":32}],50:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.openNode("TitlesOfParts"),s.openNode("vt:vector",{size:t.length,baseType:"lpstr"}),t.forEach(n=>{s.leafNode("vt:lpstr",void 0,n.name)}),s.closeNode(),s.closeNode()}parseOpen(s){return s.name==="TitlesOfParts"}parseText(){}parseClose(s){return s!=="TitlesOfParts"}}d.exports=c},{"../base-xform":32}],51:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("../simple/string-xform"),s=e("./app-heading-pairs-xform"),t=e("./app-titles-of-parts-xform");class n extends c{constructor(){super(),this.map={Company:new u({tag:"Company"}),Manager:new u({tag:"Manager"}),HeadingPairs:new s,TitleOfParts:new t}}render(i,o){i.openXml(f.StdDocAttributes),i.openNode("Properties",n.PROPERTY_ATTRIBUTES),i.leafNode("Application",void 0,"Microsoft Excel"),i.leafNode("DocSecurity",void 0,"0"),i.leafNode("ScaleCrop",void 0,"false"),this.map.HeadingPairs.render(i,o.worksheets),this.map.TitleOfParts.render(i,o.worksheets),this.map.Company.render(i,o.company||""),this.map.Manager.render(i,o.manager),i.leafNode("LinksUpToDate",void 0,"false"),i.leafNode("SharedDoc",void 0,"false"),i.leafNode("HyperlinksChanged",void 0,"false"),i.leafNode("AppVersion",void 0,"16.0300"),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"Properties":return!0;default:return this.parser=this.map[i.name],this.parser?(this.parser.parseOpen(i),!0):!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case"Properties":return this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model},!1;default:return!0}}}n.DateFormat=function(r){return r.toISOString().replace(/[.]\d{3,6}/,"")},n.DateAttrs={"xsi:type":"dcterms:W3CDTF"},n.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties","xmlns:vt":"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"},d.exports=n},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/string-xform":119,"./app-heading-pairs-xform":49,"./app-titles-of-parts-xform":50}],52:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform");class u extends c{render(t,n){t.openXml(f.StdDocAttributes),t.openNode("Types",u.PROPERTY_ATTRIBUTES);const r={};(n.media||[]).forEach(o=>{if(o.type==="image"){const l=o.extension;r[l]||(r[l]=!0,t.leafNode("Default",{Extension:l,ContentType:`image/${l}`}))}}),t.leafNode("Default",{Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"}),t.leafNode("Default",{Extension:"xml",ContentType:"application/xml"}),t.leafNode("Override",{PartName:"/xl/workbook.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}),n.worksheets.forEach(o=>{const l=`/xl/worksheets/sheet${o.id}.xml`;t.leafNode("Override",{PartName:l,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"})}),t.leafNode("Override",{PartName:"/xl/theme/theme1.xml",ContentType:"application/vnd.openxmlformats-officedocument.theme+xml"}),t.leafNode("Override",{PartName:"/xl/styles.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"}),n.sharedStrings&&n.sharedStrings.count&&t.leafNode("Override",{PartName:"/xl/sharedStrings.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"}),n.tables&&n.tables.forEach(o=>{t.leafNode("Override",{PartName:`/xl/tables/${o.target}`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"})}),n.drawings&&n.drawings.forEach(o=>{t.leafNode("Override",{PartName:`/xl/drawings/${o.name}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.drawing+xml"})}),n.commentRefs&&(t.leafNode("Default",{Extension:"vml",ContentType:"application/vnd.openxmlformats-officedocument.vmlDrawing"}),n.commentRefs.forEach(o=>{let{commentName:l}=o;t.leafNode("Override",{PartName:`/xl/${l}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"})})),t.leafNode("Override",{PartName:"/docProps/core.xml",ContentType:"application/vnd.openxmlformats-package.core-properties+xml"}),t.leafNode("Override",{PartName:"/docProps/app.xml",ContentType:"application/vnd.openxmlformats-officedocument.extended-properties+xml"}),t.closeNode()}parseOpen(){return!1}parseText(){}parseClose(){return!1}}u.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"},d.exports=u},{"../../../utils/xml-stream":28,"../base-xform":32}],53:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("../simple/date-xform"),s=e("../simple/string-xform"),t=e("../simple/integer-xform");class n extends c{constructor(){super(),this.map={"dc:creator":new s({tag:"dc:creator"}),"dc:title":new s({tag:"dc:title"}),"dc:subject":new s({tag:"dc:subject"}),"dc:description":new s({tag:"dc:description"}),"dc:identifier":new s({tag:"dc:identifier"}),"dc:language":new s({tag:"dc:language"}),"cp:keywords":new s({tag:"cp:keywords"}),"cp:category":new s({tag:"cp:category"}),"cp:lastModifiedBy":new s({tag:"cp:lastModifiedBy"}),"cp:lastPrinted":new u({tag:"cp:lastPrinted",format:n.DateFormat}),"cp:revision":new t({tag:"cp:revision"}),"cp:version":new s({tag:"cp:version"}),"cp:contentStatus":new s({tag:"cp:contentStatus"}),"cp:contentType":new s({tag:"cp:contentType"}),"dcterms:created":new u({tag:"dcterms:created",attrs:n.DateAttrs,format:n.DateFormat}),"dcterms:modified":new u({tag:"dcterms:modified",attrs:n.DateAttrs,format:n.DateFormat})}}render(i,o){i.openXml(f.StdDocAttributes),i.openNode("cp:coreProperties",n.CORE_PROPERTY_ATTRIBUTES),this.map["dc:creator"].render(i,o.creator),this.map["dc:title"].render(i,o.title),this.map["dc:subject"].render(i,o.subject),this.map["dc:description"].render(i,o.description),this.map["dc:identifier"].render(i,o.identifier),this.map["dc:language"].render(i,o.language),this.map["cp:keywords"].render(i,o.keywords),this.map["cp:category"].render(i,o.category),this.map["cp:lastModifiedBy"].render(i,o.lastModifiedBy),this.map["cp:lastPrinted"].render(i,o.lastPrinted),this.map["cp:revision"].render(i,o.revision),this.map["cp:version"].render(i,o.version),this.map["cp:contentStatus"].render(i,o.contentStatus),this.map["cp:contentType"].render(i,o.contentType),this.map["dcterms:created"].render(i,o.created),this.map["dcterms:modified"].render(i,o.modified),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"cp:coreProperties":case"coreProperties":return!0;default:if(this.parser=this.map[i.name],this.parser)return this.parser.parseOpen(i),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(i)}`)}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case"cp:coreProperties":case"coreProperties":return this.model={creator:this.map["dc:creator"].model,title:this.map["dc:title"].model,subject:this.map["dc:subject"].model,description:this.map["dc:description"].model,identifier:this.map["dc:identifier"].model,language:this.map["dc:language"].model,keywords:this.map["cp:keywords"].model,category:this.map["cp:category"].model,lastModifiedBy:this.map["cp:lastModifiedBy"].model,lastPrinted:this.map["cp:lastPrinted"].model,revision:this.map["cp:revision"].model,contentStatus:this.map["cp:contentStatus"].model,contentType:this.map["cp:contentType"].model,created:this.map["dcterms:created"].model,modified:this.map["dcterms:modified"].model},!1;default:throw new Error(`Unexpected xml node in parseClose: ${i}`)}}}n.DateFormat=function(r){return r.toISOString().replace(/[.]\d{3}/,"")},n.DateAttrs={"xsi:type":"dcterms:W3CDTF"},n.CORE_PROPERTY_ATTRIBUTES={"xmlns:cp":"http://schemas.openxmlformats.org/package/2006/metadata/core-properties","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:dcterms":"http://purl.org/dc/terms/","xmlns:dcmitype":"http://purl.org/dc/dcmitype/","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance"},d.exports=n},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/date-xform":117,"../simple/integer-xform":118,"../simple/string-xform":119}],54:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.leafNode("Relationship",t)}parseOpen(s){switch(s.name){case"Relationship":return this.model=s.attributes,!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],55:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("./relationship-xform");class s extends c{constructor(){super(),this.map={Relationship:new u}}render(n,r){r=r||this._values,n.openXml(f.StdDocAttributes),n.openNode("Relationships",s.RELATIONSHIPS_ATTRIBUTES),r.forEach(i=>{this.map.Relationship.render(n,i)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"Relationships":return this.model=[],!0;default:if(this.parser=this.map[n.name],this.parser)return this.parser.parseOpen(n),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(n)}`)}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.model.push(this.parser.model),this.parser=void 0),!0;switch(n){case"Relationships":return!1;default:throw new Error(`Unexpected xml node in parseClose: ${n}`)}}}s.RELATIONSHIPS_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"},d.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32,"./relationship-xform":54}],56:[function(e,d,m){const f=e("../base-xform");class c extends f{parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case this.tag:this.reset(),this.model={range:{editAs:s.attributes.editAs||"oneCell"}};break;default:this.parser=this.map[s.name],this.parser&&this.parser.parseOpen(s);break}return!0}parseText(s){this.parser&&this.parser.parseText(s)}reconcilePicture(s,t){if(s&&s.rId){const r=t.rels[s.rId].Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/);if(r){const i=r[1],o=t.mediaIndex[i];return t.media[o]}}}}d.exports=c},{"../base-xform":32}],57:[function(e,d,m){const f=e("../base-xform"),c=e("./blip-xform");class u extends f{constructor(){super(),this.map={"a:blip":new c}}get tag(){return"xdr:blipFill"}render(t,n){t.openNode(this.tag),this.map["a:blip"].render(t,n),t.openNode("a:stretch"),t.leafNode("a:fillRect"),t.closeNode(),t.closeNode()}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case this.tag:this.reset();break;default:this.parser=this.map[t.name],this.parser&&this.parser.parseOpen(t);break}return!0}parseText(){}parseClose(t){if(this.parser)return this.parser.parseClose(t)||(this.parser=void 0),!0;switch(t){case this.tag:return this.model=this.map["a:blip"].model,!1;default:return!0}}}d.exports=u},{"../base-xform":32,"./blip-xform":58}],58:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"a:blip"}render(s,t){s.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:embed":t.rId,cstate:"print"})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:embed"]},!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],59:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"xdr:cNvPicPr"}render(s){s.openNode(this.tag),s.leafNode("a:picLocks",{noChangeAspect:"1"}),s.closeNode()}parseOpen(s){switch(s.name){case this.tag:return!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],60:[function(e,d,m){const f=e("../base-xform"),c=e("./hlink-click-xform"),u=e("./ext-lst-xform");class s extends f{constructor(){super(),this.map={"a:hlinkClick":new c,"a:extLst":new u}}get tag(){return"xdr:cNvPr"}render(n,r){n.openNode(this.tag,{id:r.index,name:`Picture ${r.index}`}),this.map["a:hlinkClick"].render(n,r),this.map["a:extLst"].render(n,r),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset();break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(){}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model=this.map["a:hlinkClick"].model,!1;default:return!0}}}d.exports=s},{"../base-xform":32,"./ext-lst-xform":63,"./hlink-click-xform":65}],61:[function(e,d,m){const f=e("../base-xform"),c=e("../simple/integer-xform");class u extends f{constructor(t){super(),this.tag=t.tag,this.map={"xdr:col":new c({tag:"xdr:col",zero:!0}),"xdr:colOff":new c({tag:"xdr:colOff",zero:!0}),"xdr:row":new c({tag:"xdr:row",zero:!0}),"xdr:rowOff":new c({tag:"xdr:rowOff",zero:!0})}}render(t,n){t.openNode(this.tag),this.map["xdr:col"].render(t,n.nativeCol),this.map["xdr:colOff"].render(t,n.nativeColOff),this.map["xdr:row"].render(t,n.nativeRow),this.map["xdr:rowOff"].render(t,n.nativeRowOff),t.closeNode()}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case this.tag:this.reset();break;default:this.parser=this.map[t.name],this.parser&&this.parser.parseOpen(t);break}return!0}parseText(t){this.parser&&this.parser.parseText(t)}parseClose(t){if(this.parser)return this.parser.parseClose(t)||(this.parser=void 0),!0;switch(t){case this.tag:return this.model={nativeCol:this.map["xdr:col"].model,nativeColOff:this.map["xdr:colOff"].model,nativeRow:this.map["xdr:row"].model,nativeRowOff:this.map["xdr:rowOff"].model},!1;default:return!0}}}d.exports=u},{"../base-xform":32,"../simple/integer-xform":118}],62:[function(e,d,m){const f=e("../../../utils/col-cache"),c=e("../../../utils/xml-stream"),u=e("../base-xform"),s=e("./two-cell-anchor-xform"),t=e("./one-cell-anchor-xform");function n(i){return(typeof i.range=="string"?f.decode(i.range):i.range).br?"xdr:twoCellAnchor":"xdr:oneCellAnchor"}class r extends u{constructor(){super(),this.map={"xdr:twoCellAnchor":new s,"xdr:oneCellAnchor":new t}}prepare(o){o.anchors.forEach((l,a)=>{l.anchorType=n(l),this.map[l.anchorType].prepare(l,{index:a})})}get tag(){return"xdr:wsDr"}render(o,l){o.openXml(c.StdDocAttributes),o.openNode(this.tag,r.DRAWING_ATTRIBUTES),l.anchors.forEach(a=>{this.map[a.anchorType].render(o,a)}),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case this.tag:this.reset(),this.model={anchors:[]};break;default:this.parser=this.map[o.name],this.parser&&this.parser.parseOpen(o);break}return!0}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){if(this.parser)return this.parser.parseClose(o)||(this.model.anchors.push(this.parser.model),this.parser=void 0),!0;switch(o){case this.tag:return!1;default:return!0}}reconcile(o,l){o.anchors.forEach(a=>{a.br?this.map["xdr:twoCellAnchor"].reconcile(a,l):this.map["xdr:oneCellAnchor"].reconcile(a,l)})}}r.DRAWING_ATTRIBUTES={"xmlns:xdr":"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing","xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main"},d.exports=r},{"../../../utils/col-cache":19,"../../../utils/xml-stream":28,"../base-xform":32,"./one-cell-anchor-xform":67,"./two-cell-anchor-xform":70}],63:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"a:extLst"}render(s){s.openNode(this.tag),s.openNode("a:ext",{uri:"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"}),s.leafNode("a16:creationId",{"xmlns:a16":"http://schemas.microsoft.com/office/drawing/2014/main",id:"{00000000-0008-0000-0000-000002000000}"}),s.closeNode(),s.closeNode()}parseOpen(s){switch(s.name){case this.tag:return!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],64:[function(e,d,m){const f=e("../base-xform"),c=9525;class u extends f{constructor(t){super(),this.tag=t.tag,this.map={}}render(t,n){t.openNode(this.tag);const r=Math.floor(n.width*c),i=Math.floor(n.height*c);t.addAttribute("cx",r),t.addAttribute("cy",i),t.closeNode()}parseOpen(t){return t.name===this.tag?(this.model={width:parseInt(t.attributes.cx||"0",10)/c,height:parseInt(t.attributes.cy||"0",10)/c},!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../base-xform":32}],65:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"a:hlinkClick"}render(s,t){t.hyperlinks&&t.hyperlinks.rId&&s.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:id":t.hyperlinks.rId,tooltip:t.hyperlinks.tooltip})}parseOpen(s){switch(s.name){case this.tag:return this.model={hyperlinks:{rId:s.attributes["r:id"],tooltip:s.attributes.tooltip}},!0;default:return!0}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],66:[function(e,d,m){const f=e("../base-xform"),c=e("./c-nv-pr-xform"),u=e("./c-nv-pic-pr-xform");class s extends f{constructor(){super(),this.map={"xdr:cNvPr":new c,"xdr:cNvPicPr":new u}}get tag(){return"xdr:nvPicPr"}render(n,r){n.openNode(this.tag),this.map["xdr:cNvPr"].render(n,r),this.map["xdr:cNvPicPr"].render(n,r),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset();break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(){}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model=this.map["xdr:cNvPr"].model,!1;default:return!0}}}d.exports=s},{"../base-xform":32,"./c-nv-pic-pr-xform":59,"./c-nv-pr-xform":60}],67:[function(e,d,m){const f=e("./base-cell-anchor-xform"),c=e("../static-xform"),u=e("./cell-position-xform"),s=e("./ext-xform"),t=e("./pic-xform");class n extends f{constructor(){super(),this.map={"xdr:from":new u({tag:"xdr:from"}),"xdr:ext":new s({tag:"xdr:ext"}),"xdr:pic":new t,"xdr:clientData":new c({tag:"xdr:clientData"})}}get tag(){return"xdr:oneCellAnchor"}prepare(i,o){this.map["xdr:pic"].prepare(i.picture,o)}render(i,o){i.openNode(this.tag,{editAs:o.range.editAs||"oneCell"}),this.map["xdr:from"].render(i,o.range.tl),this.map["xdr:ext"].render(i,o.range.ext),this.map["xdr:pic"].render(i,o.picture),this.map["xdr:clientData"].render(i,{}),i.closeNode()}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.ext=this.map["xdr:ext"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(i,o){i.medium=this.reconcilePicture(i.picture,o)}}d.exports=n},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./ext-xform":64,"./pic-xform":68}],68:[function(e,d,m){const f=e("../base-xform"),c=e("../static-xform"),u=e("./blip-fill-xform"),s=e("./nv-pic-pr-xform"),t=e("./sp-pr");class n extends f{constructor(){super(),this.map={"xdr:nvPicPr":new s,"xdr:blipFill":new u,"xdr:spPr":new c(t)}}get tag(){return"xdr:pic"}prepare(i,o){i.index=o.index+1}render(i,o){i.openNode(this.tag),this.map["xdr:nvPicPr"].render(i,o),this.map["xdr:blipFill"].render(i,o),this.map["xdr:spPr"].render(i,o),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case this.tag:this.reset();break;default:this.parser=this.map[i.name],this.parser&&this.parser.parseOpen(i);break}return!0}parseText(){}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.mergeModel(this.parser.model),this.parser=void 0),!0;switch(i){case this.tag:return!1;default:return!0}}}d.exports=n},{"../base-xform":32,"../static-xform":120,"./blip-fill-xform":57,"./nv-pic-pr-xform":66,"./sp-pr":69}],69:[function(e,d,m){d.exports={tag:"xdr:spPr",c:[{tag:"a:xfrm",c:[{tag:"a:off",$:{x:"0",y:"0"}},{tag:"a:ext",$:{cx:"0",cy:"0"}}]},{tag:"a:prstGeom",$:{prst:"rect"},c:[{tag:"a:avLst"}]}]}},{}],70:[function(e,d,m){const f=e("./base-cell-anchor-xform"),c=e("../static-xform"),u=e("./cell-position-xform"),s=e("./pic-xform");class t extends f{constructor(){super(),this.map={"xdr:from":new u({tag:"xdr:from"}),"xdr:to":new u({tag:"xdr:to"}),"xdr:pic":new s,"xdr:clientData":new c({tag:"xdr:clientData"})}}get tag(){return"xdr:twoCellAnchor"}prepare(r,i){this.map["xdr:pic"].prepare(r.picture,i)}render(r,i){r.openNode(this.tag,{editAs:i.range.editAs||"oneCell"}),this.map["xdr:from"].render(r,i.range.tl),this.map["xdr:to"].render(r,i.range.br),this.map["xdr:pic"].render(r,i.picture),this.map["xdr:clientData"].render(r,{}),r.closeNode()}parseClose(r){if(this.parser)return this.parser.parseClose(r)||(this.parser=void 0),!0;switch(r){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.br=this.map["xdr:to"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(r,i){r.medium=this.reconcilePicture(r.picture,i)}}d.exports=t},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./pic-xform":68}],71:[function(e,d,m){const f=e("./base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.always=!!s.always,this.count=s.count,this.empty=s.empty,this.$count=s.$count||"count",this.$=s.$,this.childXform=s.childXform,this.maxItems=s.maxItems}prepare(s,t){const{childXform:n}=this;s&&s.forEach((r,i)=>{t.index=i,n.prepare(r,t)})}render(s,t){if(this.always||t&&t.length){s.openNode(this.tag,this.$),this.count&&s.addAttribute(this.$count,t&&t.length||0);const{childXform:n}=this;(t||[]).forEach((r,i)=>{n.render(s,r,i)}),s.closeNode()}else this.empty&&s.leafNode(this.tag)}parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case this.tag:return this.model=[],!0;default:return this.childXform.parseOpen(s)?(this.parser=this.childXform,!0):!1}}parseText(s){this.parser&&this.parser.parseText(s)}parseClose(s){if(this.parser){if(!this.parser.parseClose(s)&&(this.model.push(this.parser.model),this.parser=void 0,this.maxItems&&this.model.length>this.maxItems))throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);return!0}return!1}reconcile(s,t){if(s){const{childXform:n}=this;s.forEach(r=>{n.reconcile(r,t)})}}}d.exports=c},{"./base-xform":32}],72:[function(e,d,m){const f=e("../../../utils/col-cache"),c=e("../base-xform");class u extends c{get tag(){return"autoFilter"}render(t,n){if(n)if(typeof n=="string")t.leafNode("autoFilter",{ref:n});else{const r=function(l){return typeof l=="string"?l:f.getAddress(l.row,l.column).address},i=r(n.from),o=r(n.to);i&&o&&t.leafNode("autoFilter",{ref:`${i}:${o}`})}}parseOpen(t){t.name==="autoFilter"&&(this.model=t.attributes.ref)}}d.exports=u},{"../../../utils/col-cache":19,"../base-xform":32}],73:[function(e,d,m){const f=e("../../../utils/utils"),c=e("../base-xform"),u=e("../../../doc/range"),s=e("../../../doc/enums"),t=e("../strings/rich-text-xform");function n(o){if(o==null)return s.ValueType.Null;if(o instanceof String||typeof o=="string")return s.ValueType.String;if(typeof o=="number")return s.ValueType.Number;if(typeof o=="boolean")return s.ValueType.Boolean;if(o instanceof Date)return s.ValueType.Date;if(o.text&&o.hyperlink)return s.ValueType.Hyperlink;if(o.formula)return s.ValueType.Formula;if(o.error)return s.ValueType.Error;throw new Error("I could not understand type of value")}function r(o){switch(o.type){case s.ValueType.Formula:return n(o.result);default:return o.type}}class i extends c{constructor(){super(),this.richTextXForm=new t}get tag(){return"c"}prepare(l,a){const g=a.styles.addStyleModel(l.style||{},r(l));switch(g&&(l.styleId=g),l.comment&&a.comments.push({...l.comment,ref:l.address}),l.type){case s.ValueType.String:case s.ValueType.RichText:a.sharedStrings&&(l.ssId=a.sharedStrings.add(l.value));break;case s.ValueType.Date:a.date1904&&(l.date1904=!0);break;case s.ValueType.Hyperlink:a.sharedStrings&&l.text!==void 0&&l.text!==null&&(l.ssId=a.sharedStrings.add(l.text)),a.hyperlinks.push({address:l.address,target:l.hyperlink,tooltip:l.tooltip});break;case s.ValueType.Merge:a.merges.add(l);break;case s.ValueType.Formula:if(a.date1904&&(l.date1904=!0),l.shareType==="shared"&&(l.si=a.siFormulae++),l.formula)a.formulae[l.address]=l;else if(l.sharedFormula){const v=a.formulae[l.sharedFormula];if(!v)throw new Error(`Shared Formula master must exist above and or left of clone for cell ${l.address}`);v.si===void 0?(v.shareType="shared",v.si=a.siFormulae++,v.range=new u(v.address,l.address)):v.range&&v.range.expandToAddress(l.address),l.si=v.si}break}}renderFormula(l,a){let g=null;switch(a.shareType){case"shared":g={t:"shared",ref:a.ref||a.range.range,si:a.si};break;case"array":g={t:"array",ref:a.ref};break;default:a.si!==void 0&&(g={t:"shared",si:a.si});break}switch(n(a.result)){case s.ValueType.Null:l.leafNode("f",g,a.formula);break;case s.ValueType.String:l.addAttribute("t","str"),l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result);break;case s.ValueType.Number:l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result);break;case s.ValueType.Boolean:l.addAttribute("t","b"),l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result?1:0);break;case s.ValueType.Error:l.addAttribute("t","e"),l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result.error);break;case s.ValueType.Date:l.leafNode("f",g,a.formula),l.leafNode("v",null,f.dateToExcel(a.result,a.date1904));break;default:throw new Error("I could not understand type of value")}}render(l,a){if(!(a.type===s.ValueType.Null&&!a.styleId)){switch(l.openNode("c"),l.addAttribute("r",a.address),a.styleId&&l.addAttribute("s",a.styleId),a.type){case s.ValueType.Null:break;case s.ValueType.Number:l.leafNode("v",null,a.value);break;case s.ValueType.Boolean:l.addAttribute("t","b"),l.leafNode("v",null,a.value?"1":"0");break;case s.ValueType.Error:l.addAttribute("t","e"),l.leafNode("v",null,a.value.error);break;case s.ValueType.String:case s.ValueType.RichText:a.ssId!==void 0?(l.addAttribute("t","s"),l.leafNode("v",null,a.ssId)):a.value&&a.value.richText?(l.addAttribute("t","inlineStr"),l.openNode("is"),a.value.richText.forEach(g=>{this.richTextXForm.render(l,g)}),l.closeNode("is")):(l.addAttribute("t","str"),l.leafNode("v",null,a.value));break;case s.ValueType.Date:l.leafNode("v",null,f.dateToExcel(a.value,a.date1904));break;case s.ValueType.Hyperlink:a.ssId!==void 0?(l.addAttribute("t","s"),l.leafNode("v",null,a.ssId)):(l.addAttribute("t","str"),l.leafNode("v",null,a.text));break;case s.ValueType.Formula:this.renderFormula(l,a);break;case s.ValueType.Merge:break}l.closeNode()}}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case"c":return this.model={address:l.attributes.r},this.t=l.attributes.t,l.attributes.s&&(this.model.styleId=parseInt(l.attributes.s,10)),!0;case"f":return this.currentNode="f",this.model.si=l.attributes.si,this.model.shareType=l.attributes.t,this.model.ref=l.attributes.ref,!0;case"v":return this.currentNode="v",!0;case"t":return this.currentNode="t",!0;case"r":return this.parser=this.richTextXForm,this.parser.parseOpen(l),!0;default:return!1}}parseText(l){if(this.parser){this.parser.parseText(l);return}switch(this.currentNode){case"f":this.model.formula=this.model.formula?this.model.formula+l:l;break;case"v":case"t":this.model.value&&this.model.value.richText?this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+l:l:this.model.value=this.model.value?this.model.value+l:l;break}}parseClose(l){switch(l){case"c":{const{model:a}=this;if(a.formula||a.shareType)a.type=s.ValueType.Formula,a.value&&(this.t==="str"?a.result=f.xmlDecode(a.value):this.t==="b"?a.result=parseInt(a.value,10)!==0:this.t==="e"?a.result={error:a.value}:a.result=parseFloat(a.value),a.value=void 0);else if(a.value!==void 0)switch(this.t){case"s":a.type=s.ValueType.String,a.value=parseInt(a.value,10);break;case"str":a.type=s.ValueType.String,a.value=f.xmlDecode(a.value);break;case"inlineStr":a.type=s.ValueType.String;break;case"b":a.type=s.ValueType.Boolean,a.value=parseInt(a.value,10)!==0;break;case"e":a.type=s.ValueType.Error,a.value={error:a.value};break;default:a.type=s.ValueType.Number,a.value=parseFloat(a.value);break}else a.styleId?a.type=s.ValueType.Null:a.type=s.ValueType.Merge;return!1}case"f":case"v":case"is":return this.currentNode=void 0,!0;case"t":return this.parser?(this.parser.parseClose(l),!0):(this.currentNode=void 0,!0);case"r":return this.model.value=this.model.value||{},this.model.value.richText=this.model.value.richText||[],this.model.value.richText.push(this.parser.model),this.parser=void 0,this.currentNode=void 0,!0;default:return this.parser?(this.parser.parseClose(l),!0):!1}}reconcile(l,a){const g=l.styleId&&a.styles&&a.styles.getStyleModel(l.styleId);switch(g&&(l.style=g),l.styleId!==void 0&&(l.styleId=void 0),l.type){case s.ValueType.String:typeof l.value=="number"&&a.sharedStrings&&(l.value=a.sharedStrings.getString(l.value)),l.value.richText&&(l.type=s.ValueType.RichText);break;case s.ValueType.Number:g&&f.isDateFmt(g.numFmt)&&(l.type=s.ValueType.Date,l.value=f.excelToDate(l.value,a.date1904));break;case s.ValueType.Formula:l.result!==void 0&&g&&f.isDateFmt(g.numFmt)&&(l.result=f.excelToDate(l.result,a.date1904)),l.shareType==="shared"&&(l.ref?a.formulae[l.si]=l.address:(l.sharedFormula=a.formulae[l.si],delete l.shareType),delete l.si);break}const v=a.hyperlinkMap[l.address];v&&(l.type===s.ValueType.Formula?(l.text=l.result,l.result=void 0):(l.text=l.value,l.value=void 0),l.type=s.ValueType.Hyperlink,l.hyperlink=v);const h=a.commentsMap&&a.commentsMap[l.address];h&&(l.comment=h)}}d.exports=i},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],74:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"x14:cfIcon"}render(s,t){s.leafNode(this.tag,{iconSet:t.iconSet,iconId:t.iconId})}parseOpen(s){let{attributes:t}=s;this.model={iconSet:t.iconSet,iconId:f.toIntValue(t.iconId)}}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],75:[function(e,d,m){const{v4:f}=e("uuid"),c=e("../../base-xform"),u=e("../../composite-xform"),s=e("./databar-ext-xform"),t=e("./icon-set-ext-xform"),n={"3Triangles":!0,"3Stars":!0,"5Boxes":!0};class r extends u{constructor(){super(),this.map={"x14:dataBar":this.databarXform=new s,"x14:iconSet":this.iconSetXform=new t}}get tag(){return"x14:cfRule"}static isExt(o){return o.type==="dataBar"?s.isExt(o):!!(o.type==="iconSet"&&(o.custom||n[o.iconSet]))}prepare(o){r.isExt(o)&&(o.x14Id=`{${f()}}`.toUpperCase())}render(o,l){if(r.isExt(l))switch(l.type){case"dataBar":this.renderDataBar(o,l);break;case"iconSet":this.renderIconSet(o,l);break}}renderDataBar(o,l){o.openNode(this.tag,{type:"dataBar",id:l.x14Id}),this.databarXform.render(o,l),o.closeNode()}renderIconSet(o,l){o.openNode(this.tag,{type:"iconSet",priority:l.priority,id:l.x14Id||`{${f()}}`}),this.iconSetXform.render(o,l),o.closeNode()}createNewModel(o){let{attributes:l}=o;return{type:l.type,x14Id:l.id,priority:c.toIntValue(l.priority)}}onParserClose(o,l){Object.assign(this.model,l.model)}}d.exports=r},{"../../base-xform":32,"../../composite-xform":48,"./databar-ext-xform":79,"./icon-set-ext-xform":81,uuid:528}],76:[function(e,d,m){const f=e("../../composite-xform"),c=e("./f-ext-xform");class u extends f{constructor(){super(),this.map={"xm:f":this.fExtXform=new c}}get tag(){return"x14:cfvo"}render(t,n){t.openNode(this.tag,{type:n.type}),n.value!==void 0&&this.fExtXform.render(t,n.value),t.closeNode()}createNewModel(t){return{type:t.attributes.type}}onParserClose(t,n){switch(t){case"xm:f":this.model.value=n.model?parseFloat(n.model):0;break}}}d.exports=u},{"../../composite-xform":48,"./f-ext-xform":80}],77:[function(e,d,m){const f=e("../../composite-xform"),c=e("./sqref-ext-xform"),u=e("./cf-rule-ext-xform");class s extends f{constructor(){super(),this.map={"xm:sqref":this.sqRef=new c,"x14:cfRule":this.cfRule=new u}}get tag(){return"x14:conditionalFormatting"}prepare(n,r){n.rules.forEach(i=>{this.cfRule.prepare(i,r)})}render(n,r){r.rules.some(u.isExt)&&(n.openNode(this.tag,{"xmlns:xm":"http://schemas.microsoft.com/office/excel/2006/main"}),r.rules.filter(u.isExt).forEach(i=>this.cfRule.render(n,i)),this.sqRef.render(n,r.ref),n.closeNode())}createNewModel(){return{rules:[]}}onParserClose(n,r){switch(n){case"xm:sqref":this.model.ref=r.model;break;case"x14:cfRule":this.model.rules.push(r.model);break}}}d.exports=s},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./sqref-ext-xform":82}],78:[function(e,d,m){const f=e("../../composite-xform"),c=e("./cf-rule-ext-xform"),u=e("./conditional-formatting-ext-xform");class s extends f{constructor(){super(),this.map={"x14:conditionalFormatting":this.cfXform=new u}}get tag(){return"x14:conditionalFormattings"}hasContent(n){return n.hasExtContent===void 0&&(n.hasExtContent=n.some(r=>r.rules.some(c.isExt))),n.hasExtContent}prepare(n,r){n.forEach(i=>{this.cfXform.prepare(i,r)})}render(n,r){this.hasContent(r)&&(n.openNode(this.tag),r.forEach(i=>this.cfXform.render(n,i)),n.closeNode())}createNewModel(){return[]}onParserClose(n,r){this.model.push(r.model)}}d.exports=s},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./conditional-formatting-ext-xform":77}],79:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("../../style/color-xform"),s=e("./cfvo-ext-xform");class t extends c{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new s,"x14:borderColor":this.borderColorXform=new u("x14:borderColor"),"x14:negativeBorderColor":this.negativeBorderColorXform=new u("x14:negativeBorderColor"),"x14:negativeFillColor":this.negativeFillColorXform=new u("x14:negativeFillColor"),"x14:axisColor":this.axisColorXform=new u("x14:axisColor")}}static isExt(r){return!r.gradient}get tag(){return"x14:dataBar"}render(r,i){r.openNode(this.tag,{minLength:f.toIntAttribute(i.minLength,0,!0),maxLength:f.toIntAttribute(i.maxLength,100,!0),border:f.toBoolAttribute(i.border,!1),gradient:f.toBoolAttribute(i.gradient,!0),negativeBarColorSameAsPositive:f.toBoolAttribute(i.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:f.toBoolAttribute(i.negativeBarBorderColorSameAsPositive,!0),axisPosition:f.toAttribute(i.axisPosition,"auto"),direction:f.toAttribute(i.direction,"leftToRight")}),i.cfvo.forEach(o=>{this.cfvoXform.render(r,o)}),this.borderColorXform.render(r,i.borderColor),this.negativeBorderColorXform.render(r,i.negativeBorderColor),this.negativeFillColorXform.render(r,i.negativeFillColor),this.axisColorXform.render(r,i.axisColor),r.closeNode()}createNewModel(r){let{attributes:i}=r;return{cfvo:[],minLength:f.toIntValue(i.minLength,0),maxLength:f.toIntValue(i.maxLength,100),border:f.toBoolValue(i.border,!1),gradient:f.toBoolValue(i.gradient,!0),negativeBarColorSameAsPositive:f.toBoolValue(i.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:f.toBoolValue(i.negativeBarBorderColorSameAsPositive,!0),axisPosition:f.toStringValue(i.axisPosition,"auto"),direction:f.toStringValue(i.direction,"leftToRight")}}onParserClose(r,i){const[,o]=r.split(":");switch(o){case"cfvo":this.model.cfvo.push(i.model);break;default:this.model[o]=i.model;break}}}d.exports=t},{"../../base-xform":32,"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-ext-xform":76}],80:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"xm:f"}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(s){this.model+=s}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],81:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("./cfvo-ext-xform"),s=e("./cf-icon-ext-xform");class t extends c{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new u,"x14:cfIcon":this.cfIconXform=new s}}get tag(){return"x14:iconSet"}render(r,i){r.openNode(this.tag,{iconSet:f.toStringAttribute(i.iconSet),reverse:f.toBoolAttribute(i.reverse,!1),showValue:f.toBoolAttribute(i.showValue,!0),custom:f.toBoolAttribute(i.icons,!1)}),i.cfvo.forEach(o=>{this.cfvoXform.render(r,o)}),i.icons&&i.icons.forEach((o,l)=>{o.iconId=l,this.cfIconXform.render(r,o)}),r.closeNode()}createNewModel(r){let{attributes:i}=r;return{cfvo:[],iconSet:f.toStringValue(i.iconSet,"3TrafficLights"),reverse:f.toBoolValue(i.reverse,!1),showValue:f.toBoolValue(i.showValue,!0)}}onParserClose(r,i){const[,o]=r.split(":");switch(o){case"cfvo":this.model.cfvo.push(i.model);break;case"cfIcon":this.model.icons||(this.model.icons=[]),this.model.icons.push(i.model);break;default:this.model[o]=i.model;break}}}d.exports=t},{"../../base-xform":32,"../../composite-xform":48,"./cf-icon-ext-xform":74,"./cfvo-ext-xform":76}],82:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"xm:sqref"}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(s){this.model+=s}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],83:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("../../../../doc/range"),s=e("./databar-xform"),t=e("./ext-lst-ref-xform"),n=e("./formula-xform"),r=e("./color-scale-xform"),i=e("./icon-set-xform"),o={"3Triangles":!0,"3Stars":!0,"5Boxes":!0},l=h=>{if(h.formulae&&h.formulae[0])return h.formulae[0];const w=new u(h.ref),{tl:y}=w;switch(h.operator){case"containsText":return`NOT(ISERROR(SEARCH("${h.text}",${y})))`;case"containsBlanks":return`LEN(TRIM(${y}))=0`;case"notContainsBlanks":return`LEN(TRIM(${y}))>0`;case"containsErrors":return`ISERROR(${y})`;case"notContainsErrors":return`NOT(ISERROR(${y}))`;default:return}},a=h=>{if(h.formulae&&h.formulae[0])return h.formulae[0];const w=new u(h.ref),{tl:y}=w;switch(h.timePeriod){case"thisWeek":return`AND(TODAY()-ROUNDDOWN(${y},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${y},0)-TODAY()<=7-WEEKDAY(TODAY()))`;case"lastWeek":return`AND(TODAY()-ROUNDDOWN(${y},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${y},0)<(WEEKDAY(TODAY())+7))`;case"nextWeek":return`AND(ROUNDDOWN(${y},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${y},0)-TODAY()<(15-WEEKDAY(TODAY())))`;case"yesterday":return`FLOOR(${y},1)=TODAY()-1`;case"today":return`FLOOR(${y},1)=TODAY()`;case"tomorrow":return`FLOOR(${y},1)=TODAY()+1`;case"last7Days":return`AND(TODAY()-FLOOR(${y},1)<=6,FLOOR(${y},1)<=TODAY())`;case"lastMonth":return`AND(MONTH(${y})=MONTH(EDATE(TODAY(),0-1)),YEAR(${y})=YEAR(EDATE(TODAY(),0-1)))`;case"thisMonth":return`AND(MONTH(${y})=MONTH(TODAY()),YEAR(${y})=YEAR(TODAY()))`;case"nextMonth":return`AND(MONTH(${y})=MONTH(EDATE(TODAY(),0+1)),YEAR(${y})=YEAR(EDATE(TODAY(),0+1)))`;default:return}},g=h=>{const{type:w,operator:y}=h;switch(w){case"containsText":case"containsBlanks":case"notContainsBlanks":case"containsErrors":case"notContainsErrors":return{type:"containsText",operator:w};default:return{type:w,operator:y}}};class v extends c{constructor(){super(),this.map={dataBar:this.databarXform=new s,extLst:this.extLstRefXform=new t,formula:this.formulaXform=new n,colorScale:this.colorScaleXform=new r,iconSet:this.iconSetXform=new i}}get tag(){return"cfRule"}static isPrimitive(w){return!(w.type==="iconSet"&&(w.custom||o[w.iconSet]))}render(w,y){switch(y.type){case"expression":this.renderExpression(w,y);break;case"cellIs":this.renderCellIs(w,y);break;case"top10":this.renderTop10(w,y);break;case"aboveAverage":this.renderAboveAverage(w,y);break;case"dataBar":this.renderDataBar(w,y);break;case"colorScale":this.renderColorScale(w,y);break;case"iconSet":this.renderIconSet(w,y);break;case"containsText":this.renderText(w,y);break;case"timePeriod":this.renderTimePeriod(w,y);break}}renderExpression(w,y){w.openNode(this.tag,{type:"expression",dxfId:y.dxfId,priority:y.priority}),this.formulaXform.render(w,y.formulae[0]),w.closeNode()}renderCellIs(w,y){w.openNode(this.tag,{type:"cellIs",dxfId:y.dxfId,priority:y.priority,operator:y.operator}),y.formulae.forEach(S=>{this.formulaXform.render(w,S)}),w.closeNode()}renderTop10(w,y){w.leafNode(this.tag,{type:"top10",dxfId:y.dxfId,priority:y.priority,percent:f.toBoolAttribute(y.percent,!1),bottom:f.toBoolAttribute(y.bottom,!1),rank:f.toIntValue(y.rank,10,!0)})}renderAboveAverage(w,y){w.leafNode(this.tag,{type:"aboveAverage",dxfId:y.dxfId,priority:y.priority,aboveAverage:f.toBoolAttribute(y.aboveAverage,!0)})}renderDataBar(w,y){w.openNode(this.tag,{type:"dataBar",priority:y.priority}),this.databarXform.render(w,y),this.extLstRefXform.render(w,y),w.closeNode()}renderColorScale(w,y){w.openNode(this.tag,{type:"colorScale",priority:y.priority}),this.colorScaleXform.render(w,y),w.closeNode()}renderIconSet(w,y){v.isPrimitive(y)&&(w.openNode(this.tag,{type:"iconSet",priority:y.priority}),this.iconSetXform.render(w,y),w.closeNode())}renderText(w,y){w.openNode(this.tag,{type:y.operator,dxfId:y.dxfId,priority:y.priority,operator:f.toStringAttribute(y.operator,"containsText")});const S=l(y);S&&this.formulaXform.render(w,S),w.closeNode()}renderTimePeriod(w,y){w.openNode(this.tag,{type:"timePeriod",dxfId:y.dxfId,priority:y.priority,timePeriod:y.timePeriod});const S=a(y);S&&this.formulaXform.render(w,S),w.closeNode()}createNewModel(w){let{attributes:y}=w;return{...g(y),dxfId:f.toIntValue(y.dxfId),priority:f.toIntValue(y.priority),timePeriod:y.timePeriod,percent:f.toBoolValue(y.percent),bottom:f.toBoolValue(y.bottom),rank:f.toIntValue(y.rank),aboveAverage:f.toBoolValue(y.aboveAverage)}}onParserClose(w,y){switch(w){case"dataBar":case"extLst":case"colorScale":case"iconSet":Object.assign(this.model,y.model);break;case"formula":this.model.formulae=this.model.formulae||[],this.model.formulae.push(y.model);break}}}d.exports=v},{"../../../../doc/range":10,"../../base-xform":32,"../../composite-xform":48,"./color-scale-xform":85,"./databar-xform":88,"./ext-lst-ref-xform":89,"./formula-xform":90,"./icon-set-xform":91}],84:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"cfvo"}render(s,t){s.leafNode(this.tag,{type:t.type,val:t.value})}parseOpen(s){this.model={type:s.attributes.type,value:f.toFloatValue(s.attributes.val)}}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],85:[function(e,d,m){const f=e("../../composite-xform"),c=e("../../style/color-xform"),u=e("./cfvo-xform");class s extends f{constructor(){super(),this.map={cfvo:this.cfvoXform=new u,color:this.colorXform=new c}}get tag(){return"colorScale"}render(n,r){n.openNode(this.tag),r.cfvo.forEach(i=>{this.cfvoXform.render(n,i)}),r.color.forEach(i=>{this.colorXform.render(n,i)}),n.closeNode()}createNewModel(n){return{cfvo:[],color:[]}}onParserClose(n,r){this.model[n].push(r.model)}}d.exports=s},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],86:[function(e,d,m){const f=e("../../composite-xform"),c=e("./cf-rule-xform");class u extends f{constructor(){super(),this.map={cfRule:new c}}get tag(){return"conditionalFormatting"}render(t,n){n.rules.some(c.isPrimitive)&&(t.openNode(this.tag,{sqref:n.ref}),n.rules.forEach(r=>{c.isPrimitive(r)&&(r.ref=n.ref,this.map.cfRule.render(t,r))}),t.closeNode())}createNewModel(t){let{attributes:n}=t;return{ref:n.sqref,rules:[]}}onParserClose(t,n){this.model.rules.push(n.model)}}d.exports=u},{"../../composite-xform":48,"./cf-rule-xform":83}],87:[function(e,d,m){const f=e("../../base-xform"),c=e("./conditional-formatting-xform");class u extends f{constructor(){super(),this.cfXform=new c}get tag(){return"conditionalFormatting"}reset(){this.model=[]}prepare(t,n){let r=t.reduce((i,o)=>Math.max(i,...o.rules.map(l=>l.priority||0)),1);t.forEach(i=>{i.rules.forEach(o=>{o.priority||(o.priority=r++),o.style&&(o.dxfId=n.styles.addDxfStyle(o.style))})})}render(t,n){n.forEach(r=>{this.cfXform.render(t,r)})}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case"conditionalFormatting":return this.parser=this.cfXform,this.parser.parseOpen(t),!0;default:return!1}}parseText(t){this.parser&&this.parser.parseText(t)}parseClose(t){return this.parser?this.parser.parseClose(t)?!0:(this.model.push(this.parser.model),this.parser=void 0,!1):!1}reconcile(t,n){t.forEach(r=>{r.rules.forEach(i=>{i.dxfId!==void 0&&(i.style=n.styles.getDxfStyle(i.dxfId),delete i.dxfId)})})}}d.exports=u},{"../../base-xform":32,"./conditional-formatting-xform":86}],88:[function(e,d,m){const f=e("../../composite-xform"),c=e("../../style/color-xform"),u=e("./cfvo-xform");class s extends f{constructor(){super(),this.map={cfvo:this.cfvoXform=new u,color:this.colorXform=new c}}get tag(){return"dataBar"}render(n,r){n.openNode(this.tag),r.cfvo.forEach(i=>{this.cfvoXform.render(n,i)}),this.colorXform.render(n,r.color),n.closeNode()}createNewModel(){return{cfvo:[]}}onParserClose(n,r){switch(n){case"cfvo":this.model.cfvo.push(r.model);break;case"color":this.model.color=r.model;break}}}d.exports=s},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],89:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform");class u extends f{get tag(){return"x14:id"}render(r,i){r.leafNode(this.tag,null,i)}parseOpen(){this.model=""}parseText(r){this.model+=r}parseClose(r){return r!==this.tag}}class s extends c{constructor(){super(),this.map={"x14:id":this.idXform=new u}}get tag(){return"ext"}render(r,i){r.openNode(this.tag,{uri:"{B025F937-C7B1-47D3-B67F-A62EFF666E3E}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.idXform.render(r,i.x14Id),r.closeNode()}createNewModel(){return{}}onParserClose(r,i){this.model.x14Id=i.model}}class t extends c{constructor(){super(),this.map={ext:new s}}get tag(){return"extLst"}render(r,i){r.openNode(this.tag),this.map.ext.render(r,i),r.closeNode()}createNewModel(){return{}}onParserClose(r,i){Object.assign(this.model,i.model)}}d.exports=t},{"../../base-xform":32,"../../composite-xform":48}],90:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"formula"}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(s){this.model+=s}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],91:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("./cfvo-xform");class s extends c{constructor(){super(),this.map={cfvo:this.cfvoXform=new u}}get tag(){return"iconSet"}render(n,r){n.openNode(this.tag,{iconSet:f.toStringAttribute(r.iconSet,"3TrafficLights"),reverse:f.toBoolAttribute(r.reverse,!1),showValue:f.toBoolAttribute(r.showValue,!0)}),r.cfvo.forEach(i=>{this.cfvoXform.render(n,i)}),n.closeNode()}createNewModel(n){let{attributes:r}=n;return{iconSet:f.toStringValue(r.iconSet,"3TrafficLights"),reverse:f.toBoolValue(r.reverse),showValue:f.toBoolValue(r.showValue),cfvo:[]}}onParserClose(n,r){this.model[n].push(r.model)}}d.exports=s},{"../../base-xform":32,"../../composite-xform":48,"./cfvo-xform":84}],92:[function(e,d,m){const f=e("../../../utils/utils"),c=e("../base-xform");class u extends c{get tag(){return"col"}prepare(t,n){const r=n.styles.addStyleModel(t.style||{});r&&(t.styleId=r)}render(t,n){t.openNode("col"),t.addAttribute("min",n.min),t.addAttribute("max",n.max),n.width&&t.addAttribute("width",n.width),n.styleId&&t.addAttribute("style",n.styleId),n.hidden&&t.addAttribute("hidden","1"),n.bestFit&&t.addAttribute("bestFit","1"),n.outlineLevel&&t.addAttribute("outlineLevel",n.outlineLevel),n.collapsed&&t.addAttribute("collapsed","1"),t.addAttribute("customWidth","1"),t.closeNode()}parseOpen(t){if(t.name==="col"){const n=this.model={min:parseInt(t.attributes.min||"0",10),max:parseInt(t.attributes.max||"0",10),width:t.attributes.width===void 0?void 0:parseFloat(t.attributes.width||"0")};return t.attributes.style&&(n.styleId=parseInt(t.attributes.style,10)),f.parseBoolean(t.attributes.hidden)&&(n.hidden=!0),f.parseBoolean(t.attributes.bestFit)&&(n.bestFit=!0),t.attributes.outlineLevel&&(n.outlineLevel=parseInt(t.attributes.outlineLevel,10)),f.parseBoolean(t.attributes.collapsed)&&(n.collapsed=!0),!0}return!1}parseText(){}parseClose(){return!1}reconcile(t,n){t.styleId&&(t.style=n.styles.getStyleModel(t.styleId))}}d.exports=u},{"../../../utils/utils":27,"../base-xform":32}],93:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../utils/utils"),u=e("../../../utils/col-cache"),s=e("../base-xform"),t=e("../../../doc/range");function n(l,a,g,v){const h=a[g];h!==void 0?l[g]=h:v!==void 0&&(l[g]=v)}function r(l,a,g,v){const h=a[g];h!==void 0?l[g]=c.parseBoolean(h):v!==void 0&&(l[g]=v)}function i(l){const a=f.map(l,(h,w)=>({address:w,dataValidation:h,marked:!1})).sort((h,w)=>f.strcmp(h.address,w.address)),g=f.keyBy(a,"address"),v=(h,w,y)=>{for(let S=0;S{if(!h.marked){const w=u.decodeEx(h.address);if(w.dimensions)return g[w.dimensions].marked=!0,{...h.dataValidation,sqref:h.address};let y=1,S=u.encodeAddress(w.row+y,w.col);for(;l[S]&&f.isEqual(h.dataValidation,l[S]);)y++,S=u.encodeAddress(w.row+y,w.col);let E=1;for(;v(w,y,w.col+E);)E++;for(let I=0;I1||E>1){const I=w.row+(y-1),F=w.col+(E-1);return{...h.dataValidation,sqref:`${h.address}:${u.encodeAddress(I,F)}`}}return{...h.dataValidation,sqref:h.address}}return null}).filter(Boolean)}class o extends s{get tag(){return"dataValidations"}render(a,g){const v=i(g);v.length&&(a.openNode("dataValidations",{count:v.length}),v.forEach(h=>{a.openNode("dataValidation"),h.type!=="any"&&(a.addAttribute("type",h.type),h.operator&&h.type!=="list"&&h.operator!=="between"&&a.addAttribute("operator",h.operator),h.allowBlank&&a.addAttribute("allowBlank","1")),h.showInputMessage&&a.addAttribute("showInputMessage","1"),h.promptTitle&&a.addAttribute("promptTitle",h.promptTitle),h.prompt&&a.addAttribute("prompt",h.prompt),h.showErrorMessage&&a.addAttribute("showErrorMessage","1"),h.errorStyle&&a.addAttribute("errorStyle",h.errorStyle),h.errorTitle&&a.addAttribute("errorTitle",h.errorTitle),h.error&&a.addAttribute("error",h.error),a.addAttribute("sqref",h.sqref),(h.formulae||[]).forEach((w,y)=>{a.openNode(`formula${y+1}`),h.type==="date"?a.writeText(c.dateToExcel(new Date(w))):a.writeText(w),a.closeNode()}),a.closeNode()}),a.closeNode())}parseOpen(a){switch(a.name){case"dataValidations":return this.model={},!0;case"dataValidation":{this._address=a.attributes.sqref;const g={type:a.attributes.type||"any",formulae:[]};switch(a.attributes.type&&r(g,a.attributes,"allowBlank"),r(g,a.attributes,"showInputMessage"),r(g,a.attributes,"showErrorMessage"),g.type){case"any":case"list":case"custom":break;default:n(g,a.attributes,"operator","between");break}return n(g,a.attributes,"promptTitle"),n(g,a.attributes,"prompt"),n(g,a.attributes,"errorStyle"),n(g,a.attributes,"errorTitle"),n(g,a.attributes,"error"),this._dataValidation=g,!0}case"formula1":case"formula2":return this._formula=[],!0;default:return!1}}parseText(a){this._formula&&this._formula.push(a)}parseClose(a){switch(a){case"dataValidations":return!1;case"dataValidation":return(!this._dataValidation.formulae||!this._dataValidation.formulae.length)&&(delete this._dataValidation.formulae,delete this._dataValidation.operator),(this._address.split(/\s+/g)||[]).forEach(v=>{v.includes(":")?new t(v).forEachAddress(w=>{this.model[w]=this._dataValidation}):this.model[v]=this._dataValidation}),!0;case"formula1":case"formula2":{let g=this._formula.join("");switch(this._dataValidation.type){case"whole":case"textLength":g=parseInt(g,10);break;case"decimal":g=parseFloat(g);break;case"date":g=c.excelToDate(parseFloat(g));break}return this._dataValidation.formulae.push(g),this._formula=void 0,!0}default:return!0}}}d.exports=o},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/utils":27,"../base-xform":32}],94:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"dimension"}render(s,t){t&&s.leafNode("dimension",{ref:t})}parseOpen(s){return s.name==="dimension"?(this.model=s.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],95:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"drawing"}render(s,t){t&&s.leafNode(this.tag,{"r:id":t.rId})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],96:[function(e,d,m){const f=e("../composite-xform"),c=e("./cf-ext/conditional-formattings-ext-xform");class u extends f{constructor(){super(),this.map={"x14:conditionalFormattings":this.conditionalFormattings=new c}}get tag(){return"ext"}hasContent(n){return this.conditionalFormattings.hasContent(n.conditionalFormattings)}prepare(n,r){this.conditionalFormattings.prepare(n.conditionalFormattings,r)}render(n,r){n.openNode("ext",{uri:"{78C0D931-6437-407d-A8EE-F0AAD7539E65}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.conditionalFormattings.render(n,r.conditionalFormattings),n.closeNode()}createNewModel(){return{}}onParserClose(n,r){this.model[n]=r.model}}class s extends f{constructor(){super(),this.map={ext:this.ext=new u}}get tag(){return"extLst"}prepare(n,r){this.ext.prepare(n,r)}hasContent(n){return this.ext.hasContent(n)}render(n,r){this.hasContent(r)&&(n.openNode("extLst"),this.ext.render(n,r),n.closeNode())}createNewModel(){return{}}onParserClose(n,r){Object.assign(this.model,r.model)}}d.exports=s},{"../composite-xform":48,"./cf-ext/conditional-formattings-ext-xform":78}],97:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"headerFooter"}render(s,t){if(t){s.addRollback();let n=!1;s.openNode("headerFooter"),t.differentFirst&&(s.addAttribute("differentFirst","1"),n=!0),t.differentOddEven&&(s.addAttribute("differentOddEven","1"),n=!0),t.oddHeader&&typeof t.oddHeader=="string"&&(s.leafNode("oddHeader",null,t.oddHeader),n=!0),t.oddFooter&&typeof t.oddFooter=="string"&&(s.leafNode("oddFooter",null,t.oddFooter),n=!0),t.evenHeader&&typeof t.evenHeader=="string"&&(s.leafNode("evenHeader",null,t.evenHeader),n=!0),t.evenFooter&&typeof t.evenFooter=="string"&&(s.leafNode("evenFooter",null,t.evenFooter),n=!0),t.firstHeader&&typeof t.firstHeader=="string"&&(s.leafNode("firstHeader",null,t.firstHeader),n=!0),t.firstFooter&&typeof t.firstFooter=="string"&&(s.leafNode("firstFooter",null,t.firstFooter),n=!0),n?(s.closeNode(),s.commit()):s.rollback()}}parseOpen(s){switch(s.name){case"headerFooter":return this.model={},s.attributes.differentFirst&&(this.model.differentFirst=parseInt(s.attributes.differentFirst,0)===1),s.attributes.differentOddEven&&(this.model.differentOddEven=parseInt(s.attributes.differentOddEven,0)===1),!0;case"oddHeader":return this.currentNode="oddHeader",!0;case"oddFooter":return this.currentNode="oddFooter",!0;case"evenHeader":return this.currentNode="evenHeader",!0;case"evenFooter":return this.currentNode="evenFooter",!0;case"firstHeader":return this.currentNode="firstHeader",!0;case"firstFooter":return this.currentNode="firstFooter",!0;default:return!1}}parseText(s){switch(this.currentNode){case"oddHeader":this.model.oddHeader=s;break;case"oddFooter":this.model.oddFooter=s;break;case"evenHeader":this.model.evenHeader=s;break;case"evenFooter":this.model.evenFooter=s;break;case"firstHeader":this.model.firstHeader=s;break;case"firstFooter":this.model.firstFooter=s;break}}parseClose(){switch(this.currentNode){case"oddHeader":case"oddFooter":case"evenHeader":case"evenFooter":case"firstHeader":case"firstFooter":return this.currentNode=void 0,!0;default:return!1}}}d.exports=c},{"../base-xform":32}],98:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"hyperlink"}render(s,t){this.isInternalLink(t)?s.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip,location:t.target}):s.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip})}parseOpen(s){return s.name==="hyperlink"?(this.model={address:s.attributes.ref,rId:s.attributes["r:id"],tooltip:s.attributes.tooltip},s.attributes.location&&(this.model.target=s.attributes.location),!0):!1}parseText(){}parseClose(){return!1}isInternalLink(s){return s.target&&/^[^!]+![a-zA-Z]+[\d]+$/.test(s.target)}}d.exports=c},{"../base-xform":32}],99:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"mergeCell"}render(s,t){s.leafNode("mergeCell",{ref:t})}parseOpen(s){return s.name==="mergeCell"?(this.model=s.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],100:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../doc/range"),u=e("../../../utils/col-cache"),s=e("../../../doc/enums");class t{constructor(){this.merges={}}add(r){if(this.merges[r.master])this.merges[r.master].expandToAddress(r.address);else{const i=`${r.master}:${r.address}`;this.merges[r.master]=new c(i)}}get mergeCells(){return f.map(this.merges,r=>r.range)}reconcile(r,i){f.each(r,o=>{const l=u.decode(o);for(let a=l.top;a<=l.bottom;a++){const g=i[a-1];for(let v=l.left;v<=l.right;v++){const h=g.cells[v-1];h?h.type===s.ValueType.Merge&&(h.master=l.tl):g.cells[v]={type:s.ValueType.Null,address:u.encodeAddress(a,v)}}}})}getMasterAddress(r){const i=this.hash[r];return i&&i.tl}}d.exports=t},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26}],101:[function(e,d,m){const f=e("../base-xform"),c=s=>typeof s<"u";class u extends f{get tag(){return"outlinePr"}render(t,n){return n&&(c(n.summaryBelow)||c(n.summaryRight))?(t.leafNode(this.tag,{summaryBelow:c(n.summaryBelow)?Number(n.summaryBelow):void 0,summaryRight:c(n.summaryRight)?Number(n.summaryRight):void 0}),!0):!1}parseOpen(t){return t.name===this.tag?(this.model={summaryBelow:c(t.attributes.summaryBelow)?!!Number(t.attributes.summaryBelow):void 0,summaryRight:c(t.attributes.summaryRight)?!!Number(t.attributes.summaryRight):void 0},!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../base-xform":32}],102:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"brk"}render(s,t){s.leafNode("brk",t)}parseOpen(s){return s.name==="brk"?(this.model=s.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],103:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");class u extends c{get tag(){return"pageMargins"}render(t,n){if(n){const r={left:n.left,right:n.right,top:n.top,bottom:n.bottom,header:n.header,footer:n.footer};f.some(r,i=>i!==void 0)&&t.leafNode(this.tag,r)}}parseOpen(t){switch(t.name){case this.tag:return this.model={left:parseFloat(t.attributes.left||.7),right:parseFloat(t.attributes.right||.7),top:parseFloat(t.attributes.top||.75),bottom:parseFloat(t.attributes.bottom||.75),header:parseFloat(t.attributes.header||.3),footer:parseFloat(t.attributes.footer||.3)},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=u},{"../../../utils/under-dash":26,"../base-xform":32}],104:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"pageSetUpPr"}render(s,t){return t&&t.fitToPage?(s.leafNode(this.tag,{fitToPage:t.fitToPage?"1":void 0}),!0):!1}parseOpen(s){return s.name===this.tag?(this.model={fitToPage:s.attributes.fitToPage==="1"},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],105:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");function u(o){return o?"1":void 0}function s(o){switch(o){case"overThenDown":return o;default:return}}function t(o){switch(o){case"atEnd":case"asDisplyed":return o;default:return}}function n(o){switch(o){case"dash":case"blank":case"NA":return o;default:return}}function r(o){return o!==void 0?parseInt(o,10):void 0}class i extends c{get tag(){return"pageSetup"}render(l,a){if(a){const g={paperSize:a.paperSize,orientation:a.orientation,horizontalDpi:a.horizontalDpi,verticalDpi:a.verticalDpi,pageOrder:s(a.pageOrder),blackAndWhite:u(a.blackAndWhite),draft:u(a.draft),cellComments:t(a.cellComments),errors:n(a.errors),scale:a.scale,fitToWidth:a.fitToWidth,fitToHeight:a.fitToHeight,firstPageNumber:a.firstPageNumber,useFirstPageNumber:u(a.firstPageNumber),usePrinterDefaults:u(a.usePrinterDefaults),copies:a.copies};f.some(g,v=>v!==void 0)&&l.leafNode(this.tag,g)}}parseOpen(l){switch(l.name){case this.tag:return this.model={paperSize:r(l.attributes.paperSize),orientation:l.attributes.orientation||"portrait",horizontalDpi:parseInt(l.attributes.horizontalDpi||"4294967295",10),verticalDpi:parseInt(l.attributes.verticalDpi||"4294967295",10),pageOrder:l.attributes.pageOrder||"downThenOver",blackAndWhite:l.attributes.blackAndWhite==="1",draft:l.attributes.draft==="1",cellComments:l.attributes.cellComments||"None",errors:l.attributes.errors||"displayed",scale:parseInt(l.attributes.scale||"100",10),fitToWidth:parseInt(l.attributes.fitToWidth||"1",10),fitToHeight:parseInt(l.attributes.fitToHeight||"1",10),firstPageNumber:parseInt(l.attributes.firstPageNumber||"1",10),useFirstPageNumber:l.attributes.useFirstPageNumber==="1",usePrinterDefaults:l.attributes.usePrinterDefaults==="1",copies:parseInt(l.attributes.copies||"1",10)},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=i},{"../../../utils/under-dash":26,"../base-xform":32}],106:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"picture"}render(s,t){t&&s.leafNode(this.tag,{"r:id":t.rId})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],107:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");function u(t){return t?"1":void 0}class s extends c{get tag(){return"printOptions"}render(n,r){if(r){const i={headings:u(r.showRowColHeaders),gridLines:u(r.showGridLines),horizontalCentered:u(r.horizontalCentered),verticalCentered:u(r.verticalCentered)};f.some(i,o=>o!==void 0)&&n.leafNode(this.tag,i)}}parseOpen(n){switch(n.name){case this.tag:return this.model={showRowColHeaders:n.attributes.headings==="1",showGridLines:n.attributes.gridLines==="1",horizontalCentered:n.attributes.horizontalCentered==="1",verticalCentered:n.attributes.verticalCentered==="1"},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=s},{"../../../utils/under-dash":26,"../base-xform":32}],108:[function(e,d,m){const f=e("./page-breaks-xform"),c=e("../list-xform");class u extends c{constructor(){const t={tag:"rowBreaks",count:!0,childXform:new f};super(t)}render(t,n){if(n&&n.length){t.openNode(this.tag,this.$),this.count&&(t.addAttribute(this.$count,n.length),t.addAttribute("manualBreakCount",n.length));const{childXform:r}=this;n.forEach(i=>{r.render(t,i)}),t.closeNode()}else this.empty&&t.leafNode(this.tag)}}d.exports=u},{"../list-xform":71,"./page-breaks-xform":102}],109:[function(e,d,m){const f=e("../base-xform"),c=e("../../../utils/utils"),u=e("./cell-xform");class s extends f{constructor(n){super(),this.maxItems=n&&n.maxItems,this.map={c:new u}}get tag(){return"row"}prepare(n,r){const i=r.styles.addStyleModel(n.style);i&&(n.styleId=i);const o=this.map.c;n.cells.forEach(l=>{o.prepare(l,r)})}render(n,r,i){n.openNode("row"),n.addAttribute("r",r.number),r.height&&(n.addAttribute("ht",r.height),n.addAttribute("customHeight","1")),r.hidden&&n.addAttribute("hidden","1"),r.min>0&&r.max>0&&r.min<=r.max&&n.addAttribute("spans",`${r.min}:${r.max}`),r.styleId&&(n.addAttribute("s",r.styleId),n.addAttribute("customFormat","1")),n.addAttribute("x14ac:dyDescent","0.25"),r.outlineLevel&&n.addAttribute("outlineLevel",r.outlineLevel),r.collapsed&&n.addAttribute("collapsed","1");const o=this.map.c;r.cells.forEach(l=>{o.render(n,l,i)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;if(n.name==="row"){this.numRowsSeen+=1;const r=n.attributes.spans?n.attributes.spans.split(":").map(o=>parseInt(o,10)):[void 0,void 0],i=this.model={number:parseInt(n.attributes.r,10),min:r[0],max:r[1],cells:[]};return n.attributes.s&&(i.styleId=parseInt(n.attributes.s,10)),c.parseBoolean(n.attributes.hidden)&&(i.hidden=!0),c.parseBoolean(n.attributes.bestFit)&&(i.bestFit=!0),n.attributes.ht&&(i.height=parseFloat(n.attributes.ht)),n.attributes.outlineLevel&&(i.outlineLevel=parseInt(n.attributes.outlineLevel,10)),c.parseBoolean(n.attributes.collapsed)&&(i.collapsed=!0),!0}return this.parser=this.map[n.name],this.parser?(this.parser.parseOpen(n),!0):!1}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser){if(!this.parser.parseClose(n)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(`Max column count (${this.maxItems}) exceeded`);this.parser=void 0}return!0}return!1}reconcile(n,r){n.style=n.styleId?r.styles.getStyleModel(n.styleId):{},n.styleId!==void 0&&(n.styleId=void 0);const i=this.map.c;n.cells.forEach(o=>{i.reconcile(o,r)})}}d.exports=s},{"../../../utils/utils":27,"../base-xform":32,"./cell-xform":73}],110:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");class u extends c{get tag(){return"sheetFormatPr"}render(t,n){if(n){const r={defaultRowHeight:n.defaultRowHeight,outlineLevelRow:n.outlineLevelRow,outlineLevelCol:n.outlineLevelCol,"x14ac:dyDescent":n.dyDescent};n.defaultColWidth&&(r.defaultColWidth=n.defaultColWidth),(!n.defaultRowHeight||n.defaultRowHeight!==15)&&(r.customHeight="1"),f.some(r,i=>i!==void 0)&&t.leafNode("sheetFormatPr",r)}}parseOpen(t){return t.name==="sheetFormatPr"?(this.model={defaultRowHeight:parseFloat(t.attributes.defaultRowHeight||"0"),dyDescent:parseFloat(t.attributes["x14ac:dyDescent"]||"0"),outlineLevelRow:parseInt(t.attributes.outlineLevelRow||"0",10),outlineLevelCol:parseInt(t.attributes.outlineLevelCol||"0",10)},t.attributes.defaultColWidth&&(this.model.defaultColWidth=parseFloat(t.attributes.defaultColWidth)),!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../../../utils/under-dash":26,"../base-xform":32}],111:[function(e,d,m){const f=e("../base-xform"),c=e("../style/color-xform"),u=e("./page-setup-properties-xform"),s=e("./outline-properties-xform");class t extends f{constructor(){super(),this.map={tabColor:new c("tabColor"),pageSetUpPr:new u,outlinePr:new s}}get tag(){return"sheetPr"}render(r,i){if(i){r.addRollback(),r.openNode("sheetPr");let o=!1;o=this.map.tabColor.render(r,i.tabColor)||o,o=this.map.pageSetUpPr.render(r,i.pageSetup)||o,o=this.map.outlinePr.render(r,i.outlineProperties)||o,o?(r.closeNode(),r.commit()):r.rollback()}}parseOpen(r){return this.parser?(this.parser.parseOpen(r),!0):r.name===this.tag?(this.reset(),!0):this.map[r.name]?(this.parser=this.map[r.name],this.parser.parseOpen(r),!0):!1}parseText(r){return this.parser?(this.parser.parseText(r),!0):!1}parseClose(r){return this.parser?(this.parser.parseClose(r)||(this.parser=void 0),!0):(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model?(this.model={},this.map.tabColor.model&&(this.model.tabColor=this.map.tabColor.model),this.map.pageSetUpPr.model&&(this.model.pageSetup=this.map.pageSetUpPr.model),this.map.outlinePr.model&&(this.model.outlineProperties=this.map.outlinePr.model)):this.model=null,!1)}}d.exports=t},{"../base-xform":32,"../style/color-xform":128,"./outline-properties-xform":101,"./page-setup-properties-xform":104}],112:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");function u(n,r){return n?r:void 0}function s(n,r){return n===r?!0:void 0}class t extends c{get tag(){return"sheetProtection"}render(r,i){if(i){const o={sheet:u(i.sheet,"1"),selectLockedCells:i.selectLockedCells===!1?"1":void 0,selectUnlockedCells:i.selectUnlockedCells===!1?"1":void 0,formatCells:u(i.formatCells,"0"),formatColumns:u(i.formatColumns,"0"),formatRows:u(i.formatRows,"0"),insertColumns:u(i.insertColumns,"0"),insertRows:u(i.insertRows,"0"),insertHyperlinks:u(i.insertHyperlinks,"0"),deleteColumns:u(i.deleteColumns,"0"),deleteRows:u(i.deleteRows,"0"),sort:u(i.sort,"0"),autoFilter:u(i.autoFilter,"0"),pivotTables:u(i.pivotTables,"0")};i.sheet&&(o.algorithmName=i.algorithmName,o.hashValue=i.hashValue,o.saltValue=i.saltValue,o.spinCount=i.spinCount,o.objects=u(i.objects===!1,"1"),o.scenarios=u(i.scenarios===!1,"1")),f.some(o,l=>l!==void 0)&&r.leafNode(this.tag,o)}}parseOpen(r){switch(r.name){case this.tag:return this.model={sheet:s(r.attributes.sheet,"1"),objects:r.attributes.objects==="1"?!1:void 0,scenarios:r.attributes.scenarios==="1"?!1:void 0,selectLockedCells:r.attributes.selectLockedCells==="1"?!1:void 0,selectUnlockedCells:r.attributes.selectUnlockedCells==="1"?!1:void 0,formatCells:s(r.attributes.formatCells,"0"),formatColumns:s(r.attributes.formatColumns,"0"),formatRows:s(r.attributes.formatRows,"0"),insertColumns:s(r.attributes.insertColumns,"0"),insertRows:s(r.attributes.insertRows,"0"),insertHyperlinks:s(r.attributes.insertHyperlinks,"0"),deleteColumns:s(r.attributes.deleteColumns,"0"),deleteRows:s(r.attributes.deleteRows,"0"),sort:s(r.attributes.sort,"0"),autoFilter:s(r.attributes.autoFilter,"0"),pivotTables:s(r.attributes.pivotTables,"0")},r.attributes.algorithmName&&(this.model.algorithmName=r.attributes.algorithmName,this.model.hashValue=r.attributes.hashValue,this.model.saltValue=r.attributes.saltValue,this.model.spinCount=parseInt(r.attributes.spinCount,10)),!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=t},{"../../../utils/under-dash":26,"../base-xform":32}],113:[function(e,d,m){const f=e("../../../utils/col-cache"),c=e("../base-xform"),u={frozen:"frozen",frozenSplit:"frozen",split:"split"};class s extends c{get tag(){return"sheetView"}prepare(n){switch(n.state){case"frozen":case"split":break;default:n.state="normal";break}}render(n,r){n.openNode("sheetView",{workbookViewId:r.workbookViewId||0});const i=function(v,h,w){w&&n.addAttribute(v,h)};i("rightToLeft","1",r.rightToLeft===!0),i("tabSelected","1",r.tabSelected),i("showRuler","0",r.showRuler===!1),i("showRowColHeaders","0",r.showRowColHeaders===!1),i("showGridLines","0",r.showGridLines===!1),i("zoomScale",r.zoomScale,r.zoomScale),i("zoomScaleNormal",r.zoomScaleNormal,r.zoomScaleNormal),i("view",r.style,r.style);let o,l,a,g;switch(r.state){case"frozen":l=r.xSplit||0,a=r.ySplit||0,o=r.topLeftCell||f.getAddress(a+1,l+1).address,g=r.xSplit&&r.ySplit&&"bottomRight"||r.xSplit&&"topRight"||"bottomLeft",n.leafNode("pane",{xSplit:r.xSplit||void 0,ySplit:r.ySplit||void 0,topLeftCell:o,activePane:g,state:"frozen"}),n.leafNode("selection",{pane:g,activeCell:r.activeCell,sqref:r.activeCell});break;case"split":r.activePane==="topLeft"&&(r.activePane=void 0),n.leafNode("pane",{xSplit:r.xSplit||void 0,ySplit:r.ySplit||void 0,topLeftCell:r.topLeftCell,activePane:r.activePane}),n.leafNode("selection",{pane:r.activePane,activeCell:r.activeCell,sqref:r.activeCell});break;case"normal":r.activeCell&&n.leafNode("selection",{activeCell:r.activeCell,sqref:r.activeCell});break}n.closeNode()}parseOpen(n){switch(n.name){case"sheetView":return this.sheetView={workbookViewId:parseInt(n.attributes.workbookViewId,10),rightToLeft:n.attributes.rightToLeft==="1",tabSelected:n.attributes.tabSelected==="1",showRuler:n.attributes.showRuler!=="0",showRowColHeaders:n.attributes.showRowColHeaders!=="0",showGridLines:n.attributes.showGridLines!=="0",zoomScale:parseInt(n.attributes.zoomScale||"100",10),zoomScaleNormal:parseInt(n.attributes.zoomScaleNormal||"100",10),style:n.attributes.view},this.pane=void 0,this.selections={},!0;case"pane":return this.pane={xSplit:parseInt(n.attributes.xSplit||"0",10),ySplit:parseInt(n.attributes.ySplit||"0",10),topLeftCell:n.attributes.topLeftCell,activePane:n.attributes.activePane||"topLeft",state:n.attributes.state},!0;case"selection":{const r=n.attributes.pane||"topLeft";return this.selections[r]={pane:r,activeCell:n.attributes.activeCell},!0}default:return!1}}parseText(){}parseClose(n){let r,i;switch(n){case"sheetView":return this.sheetView&&this.pane?(r=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:u[this.pane.state]||"split",xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},this.model.state==="split"&&(r.activePane=this.pane.activePane),i=this.selections[this.pane.activePane],i&&i.activeCell&&(r.activeCell=i.activeCell),this.sheetView.style&&(r.style=this.sheetView.style)):(r=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:"normal",showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},i=this.selections.topLeft,i&&i.activeCell&&(r.activeCell=i.activeCell),this.sheetView.style&&(r.style=this.sheetView.style)),!1;default:return!0}}reconcile(){}}d.exports=s},{"../../../utils/col-cache":19,"../base-xform":32}],114:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"tablePart"}render(s,t){t&&s.leafNode(this.tag,{"r:id":t.rId})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],115:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../utils/col-cache"),u=e("../../../utils/xml-stream"),s=e("../../rel-type"),t=e("./merges"),n=e("../base-xform"),r=e("../list-xform"),i=e("./row-xform"),o=e("./col-xform"),l=e("./dimension-xform"),a=e("./hyperlink-xform"),g=e("./merge-cell-xform"),v=e("./data-validations-xform"),h=e("./sheet-properties-xform"),w=e("./sheet-format-properties-xform"),y=e("./sheet-view-xform"),S=e("./sheet-protection-xform"),E=e("./page-margins-xform"),I=e("./page-setup-xform"),F=e("./print-options-xform"),B=e("./auto-filter-xform"),j=e("./picture-xform"),X=e("./drawing-xform"),G=e("./table-part-xform"),V=e("./row-breaks-xform"),J=e("./header-footer-xform"),H=e("./cf/conditional-formattings-xform"),M=e("./ext-lst-xform"),T=(P,L)=>{Object.keys(L).forEach($=>{const R=P[$],k=L[$];R===void 0&&k!==void 0&&(P[$]=k)})},_=(P,L)=>{if(!L||!L.length)return P;if(!P||!P.length)return L;const $={},R={};return P.forEach(k=>{$[k.ref]=k,k.rules.forEach(C=>{const{x14Id:O}=C;O&&(R[O]=C)})}),L.forEach(k=>{k.rules.forEach(C=>{const O=R[C.x14Id];O?T(O,C):$[k.ref]?$[k.ref].rules.push(C):P.push({ref:k.ref,rules:[C]})})}),P};class A extends n{constructor(L){super();const{maxRows:$,maxCols:R,ignoreNodes:k}=L||{};this.ignoreNodes=k||[],this.map={sheetPr:new h,dimension:new l,sheetViews:new r({tag:"sheetViews",count:!1,childXform:new y}),sheetFormatPr:new w,cols:new r({tag:"cols",count:!1,childXform:new o}),sheetData:new r({tag:"sheetData",count:!1,empty:!0,childXform:new i({maxItems:R}),maxItems:$}),autoFilter:new B,mergeCells:new r({tag:"mergeCells",count:!0,childXform:new g}),rowBreaks:new V,hyperlinks:new r({tag:"hyperlinks",count:!1,childXform:new a}),pageMargins:new E,dataValidations:new v,pageSetup:new I,headerFooter:new J,printOptions:new F,picture:new j,drawing:new X,sheetProtection:new S,tableParts:new r({tag:"tableParts",count:!0,childXform:new G}),conditionalFormatting:new H,extLst:new M}}prepare(L,$){$.merges=new t,L.hyperlinks=$.hyperlinks=[],L.comments=$.comments=[],$.formulae={},$.siFormulae=0,this.map.cols.prepare(L.cols,$),this.map.sheetData.prepare(L.rows,$),this.map.conditionalFormatting.prepare(L.conditionalFormattings,$),L.mergeCells=$.merges.mergeCells;const R=L.rels=[];function k(W){return`rId${W.length+1}`}if(L.hyperlinks.forEach(W=>{const ne=k(R);W.rId=ne,R.push({Id:ne,Type:s.Hyperlink,Target:W.target,TargetMode:"External"})}),L.comments.length>0){const W={Id:k(R),Type:s.Comments,Target:`../comments${L.id}.xml`};R.push(W);const ne={Id:k(R),Type:s.VmlDrawing,Target:`../drawings/vmlDrawing${L.id}.vml`};R.push(ne),L.comments.forEach(he=>{he.refAddress=c.decodeAddress(he.ref)}),$.commentRefs.push({commentName:`comments${L.id}`,vmlDrawing:`vmlDrawing${L.id}`})}const C=[];let O;L.media.forEach(W=>{if(W.type==="background"){const ne=k(R);O=$.media[W.imageId],R.push({Id:ne,Type:s.Image,Target:`../media/${O.name}.${O.extension}`}),L.background={rId:ne},L.image=$.media[W.imageId]}else if(W.type==="image"){let{drawing:ne}=L;O=$.media[W.imageId],ne||(ne=L.drawing={rId:k(R),name:`drawing${++$.drawingsCount}`,anchors:[],rels:[]},$.drawings.push(ne),R.push({Id:ne.rId,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",Target:`../drawings/${ne.name}.xml`}));let he=this.preImageId===W.imageId?C[W.imageId]:C[ne.rels.length];he||(he=k(ne.rels),C[ne.rels.length]=he,ne.rels.push({Id:he,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:`../media/${O.name}.${O.extension}`}));const ue={picture:{rId:he},range:W.range};if(W.hyperlinks&&W.hyperlinks.hyperlink){const Ae=k(ne.rels);C[ne.rels.length]=Ae,ue.picture.hyperlinks={tooltip:W.hyperlinks.tooltip,rId:Ae},ne.rels.push({Id:Ae,Type:s.Hyperlink,Target:W.hyperlinks.hyperlink,TargetMode:"External"})}this.preImageId=W.imageId,ne.anchors.push(ue)}}),L.tables.forEach(W=>{const ne=k(R);W.rId=ne,R.push({Id:ne,Type:s.Table,Target:`../tables/${W.target}`}),W.columns.forEach(he=>{const{style:ue}=he;ue&&(he.dxfId=$.styles.addDxfStyle(ue))})}),this.map.extLst.prepare(L,$)}render(L,$){L.openXml(u.StdDocAttributes),L.openNode("worksheet",A.WORKSHEET_ATTRIBUTES);const R=$.properties?{defaultRowHeight:$.properties.defaultRowHeight,dyDescent:$.properties.dyDescent,outlineLevelCol:$.properties.outlineLevelCol,outlineLevelRow:$.properties.outlineLevelRow}:void 0;$.properties&&$.properties.defaultColWidth&&(R.defaultColWidth=$.properties.defaultColWidth);const k={outlineProperties:$.properties&&$.properties.outlineProperties,tabColor:$.properties&&$.properties.tabColor,pageSetup:$.pageSetup&&$.pageSetup.fitToPage?{fitToPage:$.pageSetup.fitToPage}:void 0},C=$.pageSetup&&$.pageSetup.margins,O={showRowColHeaders:$.pageSetup&&$.pageSetup.showRowColHeaders,showGridLines:$.pageSetup&&$.pageSetup.showGridLines,horizontalCentered:$.pageSetup&&$.pageSetup.horizontalCentered,verticalCentered:$.pageSetup&&$.pageSetup.verticalCentered},W=$.sheetProtection;this.map.sheetPr.render(L,k),this.map.dimension.render(L,$.dimensions),this.map.sheetViews.render(L,$.views),this.map.sheetFormatPr.render(L,R),this.map.cols.render(L,$.cols),this.map.sheetData.render(L,$.rows),this.map.sheetProtection.render(L,W),this.map.autoFilter.render(L,$.autoFilter),this.map.mergeCells.render(L,$.mergeCells),this.map.conditionalFormatting.render(L,$.conditionalFormattings),this.map.dataValidations.render(L,$.dataValidations),this.map.hyperlinks.render(L,$.hyperlinks),this.map.printOptions.render(L,O),this.map.pageMargins.render(L,C),this.map.pageSetup.render(L,$.pageSetup),this.map.headerFooter.render(L,$.headerFooter),this.map.rowBreaks.render(L,$.rowBreaks),this.map.drawing.render(L,$.drawing),this.map.picture.render(L,$.background),this.map.tableParts.render(L,$.tables),this.map.extLst.render(L,$),$.rels&&$.rels.forEach(ne=>{ne.Type===s.VmlDrawing&&L.leafNode("legacyDrawing",{"r:id":ne.Id})}),L.closeNode()}parseOpen(L){return this.parser?(this.parser.parseOpen(L),!0):L.name==="worksheet"?(f.each(this.map,$=>{$.reset()}),!0):(this.map[L.name]&&!this.ignoreNodes.includes(L.name)&&(this.parser=this.map[L.name],this.parser.parseOpen(L)),!0)}parseText(L){this.parser&&this.parser.parseText(L)}parseClose(L){if(this.parser)return this.parser.parseClose(L)||(this.parser=void 0),!0;switch(L){case"worksheet":{const $=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&($.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&($.outlineProperties=this.map.sheetPr.model.outlineProperties);const R={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},k=Object.assign(R,this.map.pageSetup.model,this.map.printOptions.model),C=_(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model["x14:conditionalFormattings"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:$,views:this.map.sheetViews.model,pageSetup:k,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:C},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1}default:return!0}}reconcile(L,$){const R=(L.relationships||[]).reduce((C,O)=>{if(C[O.Id]=O,O.Type===s.Comments&&(L.comments=$.comments[O.Target].comments),O.Type===s.VmlDrawing&&L.comments&&L.comments.length){const W=$.vmlDrawings[O.Target].comments;L.comments.forEach((ne,he)=>{ne.note=Object.assign({},ne.note,W[he])})}return C},{});if($.commentsMap=(L.comments||[]).reduce((C,O)=>(O.ref&&(C[O.ref]=O),C),{}),$.hyperlinkMap=(L.hyperlinks||[]).reduce((C,O)=>(O.rId&&(C[O.address]=R[O.rId].Target),C),{}),$.formulae={},L.rows=L.rows&&L.rows.filter(Boolean)||[],L.rows.forEach(C=>{C.cells=C.cells&&C.cells.filter(Boolean)||[]}),this.map.cols.reconcile(L.cols,$),this.map.sheetData.reconcile(L.rows,$),this.map.conditionalFormatting.reconcile(L.conditionalFormattings,$),L.media=[],L.drawing){const O=R[L.drawing.rId].Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(O){const W=O[1];$.drawings[W].anchors.forEach(he=>{if(he.medium){const ue={type:"image",imageId:he.medium.index,range:he.range,hyperlinks:he.picture.hyperlinks};L.media.push(ue)}})}}const k=L.background&&R[L.background.rId];if(k){const C=k.Target.split("/media/")[1],O=$.mediaIndex&&$.mediaIndex[C];O!==void 0&&L.media.push({type:"background",imageId:O})}L.tables=(L.tables||[]).map(C=>{const O=R[C.rId];return $.tables[O.Target]}),delete L.relationships,delete L.hyperlinks,delete L.comments}}A.WORKSHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"},d.exports=A},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../../rel-type":31,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":72,"./cf/conditional-formattings-xform":87,"./col-xform":92,"./data-validations-xform":93,"./dimension-xform":94,"./drawing-xform":95,"./ext-lst-xform":96,"./header-footer-xform":97,"./hyperlink-xform":98,"./merge-cell-xform":99,"./merges":100,"./page-margins-xform":103,"./page-setup-xform":105,"./picture-xform":106,"./print-options-xform":107,"./row-breaks-xform":108,"./row-xform":109,"./sheet-format-properties-xform":110,"./sheet-properties-xform":111,"./sheet-protection-xform":112,"./sheet-view-xform":113,"./table-part-xform":114}],116:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr}render(s,t){t&&(s.openNode(this.tag),s.closeNode())}parseOpen(s){s.name===this.tag&&(this.model=!0)}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],117:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr,this.attrs=s.attrs,this._format=s.format||function(t){try{return Number.isNaN(t.getTime())?"":t.toISOString()}catch{return""}},this._parse=s.parse||function(t){return new Date(t)}}render(s,t){t&&(s.openNode(this.tag),this.attrs&&s.addAttributes(this.attrs),this.attr?s.addAttribute(this.attr,this._format(t)):s.writeText(this._format(t)),s.closeNode())}parseOpen(s){s.name===this.tag&&(this.attr?this.model=this._parse(s.attributes[this.attr]):this.text=[])}parseText(s){this.attr||this.text.push(s)}parseClose(){return this.attr||(this.model=this._parse(this.text.join(""))),!1}}d.exports=c},{"../base-xform":32}],118:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr,this.attrs=s.attrs,this.zero=s.zero}render(s,t){(t||this.zero)&&(s.openNode(this.tag),this.attrs&&s.addAttributes(this.attrs),this.attr?s.addAttribute(this.attr,t):s.writeText(t),s.closeNode())}parseOpen(s){return s.name===this.tag?(this.attr?this.model=parseInt(s.attributes[this.attr],10):this.text=[],!0):!1}parseText(s){this.attr||this.text.push(s)}parseClose(){return this.attr||(this.model=parseInt(this.text.join("")||0,10)),!1}}d.exports=c},{"../base-xform":32}],119:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr,this.attrs=s.attrs}render(s,t){t!==void 0&&(s.openNode(this.tag),this.attrs&&s.addAttributes(this.attrs),this.attr?s.addAttribute(this.attr,t):s.writeText(t),s.closeNode())}parseOpen(s){s.name===this.tag&&(this.attr?this.model=s.attributes[this.attr]:this.text=[])}parseText(s){this.attr||this.text.push(s)}parseClose(){return this.attr||(this.model=this.text.join("")),!1}}d.exports=c},{"../base-xform":32}],120:[function(e,d,m){const f=e("./base-xform"),c=e("../../utils/xml-stream");function u(t,n){t.openNode(n.tag,n.$),n.c&&n.c.forEach(r=>{u(t,r)}),n.t&&t.writeText(n.t),t.closeNode()}class s extends f{constructor(n){super(),this._model=n}render(n){if(!this._xml){const r=new c;u(r,this._model),this._xml=r.xml}n.writeXml(this._xml)}parseOpen(){return!0}parseText(){}parseClose(n){switch(n){case this._model.tag:return!1;default:return!0}}}d.exports=s},{"../../utils/xml-stream":28,"./base-xform":32}],121:[function(e,d,m){const f=e("./text-xform"),c=e("./rich-text-xform"),u=e("../base-xform");class s extends u{constructor(){super(),this.map={r:new c,t:new f}}get tag(){return"rPh"}render(n,r){if(n.openNode(this.tag,{sb:r.sb||0,eb:r.eb||0}),r&&r.hasOwnProperty("richText")&&r.richText){const{r:i}=this.map;r.richText.forEach(o=>{i.render(n,o)})}else r&&this.map.t.render(n,r.text);n.closeNode()}parseOpen(n){const{name:r}=n;return this.parser?(this.parser.parseOpen(n),!0):r===this.tag?(this.model={sb:parseInt(n.attributes.sb,10),eb:parseInt(n.attributes.eb,10)},!0):(this.parser=this.map[r],this.parser?(this.parser.parseOpen(n),!0):!1)}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser){if(!this.parser.parseClose(n)){switch(n){case"r":{let r=this.model.richText;r||(r=this.model.richText=[]),r.push(this.parser.model);break}case"t":this.model.text=this.parser.model;break}this.parser=void 0}return!0}switch(n){case this.tag:return!1;default:return!0}}}d.exports=s},{"../base-xform":32,"./rich-text-xform":122,"./text-xform":125}],122:[function(e,d,m){const f=e("./text-xform"),c=e("../style/font-xform"),u=e("../base-xform");class s extends u{constructor(n){super(),this.model=n}get tag(){return"r"}get textXform(){return this._textXform||(this._textXform=new f)}get fontXform(){return this._fontXform||(this._fontXform=new c(s.FONT_OPTIONS))}render(n,r){r=r||this.model,n.openNode("r"),r.font&&this.fontXform.render(n,r.font),this.textXform.render(n,r.text),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"r":return this.model={},!0;case"t":return this.parser=this.textXform,this.parser.parseOpen(n),!0;case"rPr":return this.parser=this.fontXform,this.parser.parseOpen(n),!0;default:return!1}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){switch(n){case"r":return!1;case"t":return this.model.text=this.parser.model,this.parser=void 0,!0;case"rPr":return this.model.font=this.parser.model,this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(n),!0}}}s.FONT_OPTIONS={tagName:"rPr",fontNameTag:"rFont"},d.exports=s},{"../base-xform":32,"../style/font-xform":131,"./text-xform":125}],123:[function(e,d,m){const f=e("./text-xform"),c=e("./rich-text-xform"),u=e("./phonetic-text-xform"),s=e("../base-xform");class t extends s{constructor(r){super(),this.model=r,this.map={r:new c,t:new f,rPh:new u}}get tag(){return"si"}render(r,i){r.openNode(this.tag),i&&i.hasOwnProperty("richText")&&i.richText?i.richText.length?i.richText.forEach(o=>{this.map.r.render(r,o)}):this.map.t.render(r,""):i!=null&&this.map.t.render(r,i),r.closeNode()}parseOpen(r){const{name:i}=r;return this.parser?(this.parser.parseOpen(r),!0):i===this.tag?(this.model={},!0):(this.parser=this.map[i],this.parser?(this.parser.parseOpen(r),!0):!1)}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){if(this.parser){if(!this.parser.parseClose(r)){switch(r){case"r":{let i=this.model.richText;i||(i=this.model.richText=[]),i.push(this.parser.model);break}case"t":this.model=this.parser.model;break}this.parser=void 0}return!0}switch(r){case this.tag:return!1;default:return!0}}}d.exports=t},{"../base-xform":32,"./phonetic-text-xform":121,"./rich-text-xform":122,"./text-xform":125}],124:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("./shared-string-xform");class s extends c{constructor(n){super(),this.model=n||{values:[],count:0},this.hash=Object.create(null),this.rich=Object.create(null)}get sharedStringXform(){return this._sharedStringXform||(this._sharedStringXform=new u)}get values(){return this.model.values}get uniqueCount(){return this.model.values.length}get count(){return this.model.count}getString(n){return this.model.values[n]}add(n){return n.richText?this.addRichText(n):this.addText(n)}addText(n){let r=this.hash[n];return r===void 0&&(r=this.hash[n]=this.model.values.length,this.model.values.push(n)),this.model.count++,r}addRichText(n){const r=this.sharedStringXform.toXml(n);let i=this.rich[r];return i===void 0&&(i=this.rich[r]=this.model.values.length,this.model.values.push(n)),this.model.count++,i}render(n,r){r=r||this._values,n.openXml(f.StdDocAttributes),n.openNode("sst",{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",count:r.count,uniqueCount:r.values.length});const i=this.sharedStringXform;r.values.forEach(o=>{i.render(n,o)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"sst":return!0;case"si":return this.parser=this.sharedStringXform,this.parser.parseOpen(n),!0;default:throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(n)}`)}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.model.values.push(this.parser.model),this.model.count++,this.parser=void 0),!0;switch(n){case"sst":return!1;default:throw new Error(`Unexpected xml node in parseClose: ${n}`)}}}d.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32,"./shared-string-xform":123}],125:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"t"}render(s,t){s.openNode("t"),/^\s|\n|\s$/.test(t)&&s.addAttribute("xml:space","preserve"),s.writeText(t),s.closeNode()}get model(){return this._text.join("").replace(/_x([0-9A-F]{4})_/g,(s,t)=>String.fromCharCode(parseInt(t,16)))}parseOpen(s){switch(s.name){case"t":return this._text=[],!0;default:return!1}}parseText(s){this._text.push(s)}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],126:[function(e,d,m){const f=e("../../../doc/enums"),c=e("../../../utils/utils"),u=e("../base-xform"),s={horizontalValues:["left","center","right","fill","centerContinuous","distributed","justify"].reduce((r,i)=>(r[i]=!0,r),{}),horizontal(r){return this.horizontalValues[r]?r:void 0},verticalValues:["top","middle","bottom","distributed","justify"].reduce((r,i)=>(r[i]=!0,r),{}),vertical(r){return r==="middle"?"center":this.verticalValues[r]?r:void 0},wrapText(r){return r?!0:void 0},shrinkToFit(r){return r?!0:void 0},textRotation(r){switch(r){case"vertical":return r;default:return r=c.validInt(r),r>=-90&&r<=90?r:void 0}},indent(r){return r=c.validInt(r),Math.max(0,r)},readingOrder(r){switch(r){case"ltr":return f.ReadingOrder.LeftToRight;case"rtl":return f.ReadingOrder.RightToLeft;default:return}}},t={toXml(r){if(r=s.textRotation(r),r){if(r==="vertical")return 255;const i=Math.round(r);if(i>=0&&i<=90)return i;if(i<0&&i>=-90)return 90-i}},toModel(r){const i=c.validInt(r);if(i!==void 0){if(i===255)return"vertical";if(i>=0&&i<=90)return i;if(i>90&&i<=180)return 90-i}}};class n extends u{get tag(){return"alignment"}render(i,o){i.addRollback(),i.openNode("alignment");let l=!1;function a(g,v){v&&(i.addAttribute(g,v),l=!0)}a("horizontal",s.horizontal(o.horizontal)),a("vertical",s.vertical(o.vertical)),a("wrapText",s.wrapText(o.wrapText)?"1":!1),a("shrinkToFit",s.shrinkToFit(o.shrinkToFit)?"1":!1),a("indent",s.indent(o.indent)),a("textRotation",t.toXml(o.textRotation)),a("readingOrder",s.readingOrder(o.readingOrder)),i.closeNode(),l?i.commit():i.rollback()}parseOpen(i){const o={};let l=!1;function a(g,v,h){g&&(o[v]=h,l=!0)}a(i.attributes.horizontal,"horizontal",i.attributes.horizontal),a(i.attributes.vertical,"vertical",i.attributes.vertical==="center"?"middle":i.attributes.vertical),a(i.attributes.wrapText,"wrapText",c.parseBoolean(i.attributes.wrapText)),a(i.attributes.shrinkToFit,"shrinkToFit",c.parseBoolean(i.attributes.shrinkToFit)),a(i.attributes.indent,"indent",parseInt(i.attributes.indent,10)),a(i.attributes.textRotation,"textRotation",t.toModel(i.attributes.textRotation)),a(i.attributes.readingOrder,"readingOrder",i.attributes.readingOrder==="2"?"rtl":"ltr"),this.model=l?o:null}parseText(){}parseClose(){return!1}}d.exports=n},{"../../../doc/enums":7,"../../../utils/utils":27,"../base-xform":32}],127:[function(e,d,m){const f=e("../base-xform"),c=e("../../../utils/utils"),u=e("./color-xform");class s extends f{constructor(r){super(),this.name=r,this.map={color:new u}}get tag(){return this.name}render(r,i,o){const l=i&&i.color||o||this.defaultColor;r.openNode(this.name),i&&i.style&&(r.addAttribute("style",i.style),l&&this.map.color.render(r,l)),r.closeNode()}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;switch(r.name){case this.name:{const{style:i}=r.attributes;return i?this.model={style:i}:this.model=void 0,!0}case"color":return this.parser=this.map.color,this.parser.parseOpen(r),!0;default:return!1}}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){return this.parser?(this.parser.parseClose(r)||(this.parser=void 0),!0):(r===this.name&&this.map.color.model&&(this.model||(this.model={}),this.model.color=this.map.color.model),!1)}validStyle(r){return s.validStyleValues[r]}}s.validStyleValues=["thin","dashed","dotted","dashDot","hair","dashDotDot","slantDashDot","mediumDashed","mediumDashDotDot","mediumDashDot","medium","double","thick"].reduce((n,r)=>(n[r]=!0,n),{});class t extends f{constructor(){super(),this.map={top:new s("top"),left:new s("left"),bottom:new s("bottom"),right:new s("right"),diagonal:new s("diagonal")}}render(r,i){const{color:o}=i;r.openNode("border"),i.diagonal&&i.diagonal.style&&(i.diagonal.up&&r.addAttribute("diagonalUp","1"),i.diagonal.down&&r.addAttribute("diagonalDown","1"));function l(a,g){a&&!a.color&&i.color&&(a={...a,color:i.color}),g.render(r,a,o)}l(i.left,this.map.left),l(i.right,this.map.right),l(i.top,this.map.top),l(i.bottom,this.map.bottom),l(i.diagonal,this.map.diagonal),r.closeNode()}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;switch(r.name){case"border":return this.reset(),this.diagonalUp=c.parseBoolean(r.attributes.diagonalUp),this.diagonalDown=c.parseBoolean(r.attributes.diagonalDown),!0;default:return this.parser=this.map[r.name],this.parser?(this.parser.parseOpen(r),!0):!1}}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){if(this.parser)return this.parser.parseClose(r)||(this.parser=void 0),!0;if(r==="border"){const i=this.model={},o=function(l,a,g){a&&(g&&Object.assign(a,g),i[l]=a)};o("left",this.map.left.model),o("right",this.map.right.model),o("top",this.map.top.model),o("bottom",this.map.bottom.model),o("diagonal",this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown})}return!1}}d.exports=t},{"../../../utils/utils":27,"../base-xform":32,"./color-xform":128}],128:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.name=s||"color"}get tag(){return this.name}render(s,t){return t?(s.openNode(this.name),t.argb?s.addAttribute("rgb",t.argb):t.theme!==void 0?(s.addAttribute("theme",t.theme),t.tint!==void 0&&s.addAttribute("tint",t.tint)):t.indexed!==void 0?s.addAttribute("indexed",t.indexed):s.addAttribute("auto","1"),s.closeNode(),!0):!1}parseOpen(s){return s.name===this.name?(s.attributes.rgb?this.model={argb:s.attributes.rgb}:s.attributes.theme?(this.model={theme:parseInt(s.attributes.theme,10)},s.attributes.tint&&(this.model.tint=parseFloat(s.attributes.tint))):s.attributes.indexed?this.model={indexed:parseInt(s.attributes.indexed,10)}:this.model=void 0,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],129:[function(e,d,m){const f=e("../base-xform"),c=e("./alignment-xform"),u=e("./border-xform"),s=e("./fill-xform"),t=e("./font-xform"),n=e("./numfmt-xform"),r=e("./protection-xform");class i extends f{constructor(){super(),this.map={alignment:new c,border:new u,fill:new s,font:new t,numFmt:new n,protection:new r}}get tag(){return"dxf"}render(l,a){if(l.openNode(this.tag),a.font&&this.map.font.render(l,a.font),a.numFmt&&a.numFmtId){const g={id:a.numFmtId,formatCode:a.numFmt};this.map.numFmt.render(l,g)}a.fill&&this.map.fill.render(l,a.fill),a.alignment&&this.map.alignment.render(l,a.alignment),a.border&&this.map.border.render(l,a.border),a.protection&&this.map.protection.render(l,a.protection),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case this.tag:return this.reset(),!0;default:return this.parser=this.map[l.name],this.parser&&this.parser.parseOpen(l),!0}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){return this.parser?(this.parser.parseClose(l)||(this.parser=void 0),!0):l===this.tag?(this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model},!1):!0}}d.exports=i},{"../base-xform":32,"./alignment-xform":126,"./border-xform":127,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./protection-xform":133}],130:[function(e,d,m){const f=e("../base-xform"),c=e("./color-xform");class u extends f{constructor(){super(),this.map={color:new c}}get tag(){return"stop"}render(i,o){i.openNode("stop"),i.addAttribute("position",o.position),this.map.color.render(i,o.color),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"stop":return this.model={position:parseFloat(i.attributes.position)},!0;case"color":return this.parser=this.map.color,this.parser.parseOpen(i),!0;default:return!1}}parseText(){}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.model.color=this.parser.model,this.parser=void 0),!0):!1}}class s extends f{constructor(){super(),this.map={fgColor:new c("fgColor"),bgColor:new c("bgColor")}}get name(){return"pattern"}get tag(){return"patternFill"}render(i,o){i.openNode("patternFill"),i.addAttribute("patternType",o.pattern),o.fgColor&&this.map.fgColor.render(i,o.fgColor),o.bgColor&&this.map.bgColor.render(i,o.bgColor),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"patternFill":return this.model={type:"pattern",pattern:i.attributes.patternType},!0;default:return this.parser=this.map[i.name],this.parser?(this.parser.parseOpen(i),!0):!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.parser.model&&(this.model[i]=this.parser.model),this.parser=void 0),!0):!1}}class t extends f{constructor(){super(),this.map={stop:new u}}get name(){return"gradient"}get tag(){return"gradientFill"}render(i,o){switch(i.openNode("gradientFill"),o.gradient){case"angle":i.addAttribute("degree",o.degree);break;case"path":i.addAttribute("type","path"),o.center.left&&(i.addAttribute("left",o.center.left),o.center.right===void 0&&i.addAttribute("right",o.center.left)),o.center.right&&i.addAttribute("right",o.center.right),o.center.top&&(i.addAttribute("top",o.center.top),o.center.bottom===void 0&&i.addAttribute("bottom",o.center.top)),o.center.bottom&&i.addAttribute("bottom",o.center.bottom);break}const l=this.map.stop;o.stops.forEach(a=>{l.render(i,a)}),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"gradientFill":{const o=this.model={stops:[]};return i.attributes.degree?(o.gradient="angle",o.degree=parseInt(i.attributes.degree,10)):i.attributes.type==="path"&&(o.gradient="path",o.center={left:i.attributes.left?parseFloat(i.attributes.left):0,top:i.attributes.top?parseFloat(i.attributes.top):0},i.attributes.right!==i.attributes.left&&(o.center.right=i.attributes.right?parseFloat(i.attributes.right):0),i.attributes.bottom!==i.attributes.top&&(o.center.bottom=i.attributes.bottom?parseFloat(i.attributes.bottom):0)),!0}case"stop":return this.parser=this.map.stop,this.parser.parseOpen(i),!0;default:return!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.model.stops.push(this.parser.model),this.parser=void 0),!0):!1}}class n extends f{constructor(){super(),this.map={patternFill:new s,gradientFill:new t}}get tag(){return"fill"}render(i,o){switch(i.addRollback(),i.openNode("fill"),o.type){case"pattern":this.map.patternFill.render(i,o);break;case"gradient":this.map.gradientFill.render(i,o);break;default:i.rollback();return}i.closeNode(),i.commit()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"fill":return this.model={},!0;default:return this.parser=this.map[i.name],this.parser?(this.parser.parseOpen(i),!0):!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.model=this.parser.model,this.model.type=this.parser.name,this.parser=void 0),!0):!1}validStyle(i){return n.validPatternValues[i]}}n.validPatternValues=["none","solid","darkVertical","darkGray","mediumGray","lightGray","gray125","gray0625","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","lightGrid"].reduce((r,i)=>(r[i]=!0,r),{}),n.StopXform=u,n.PatternFillXform=s,n.GradientFillXform=t,d.exports=n},{"../base-xform":32,"./color-xform":128}],131:[function(e,d,m){const f=e("./color-xform"),c=e("../simple/boolean-xform"),u=e("../simple/integer-xform"),s=e("../simple/string-xform"),t=e("./underline-xform"),n=e("../../../utils/under-dash"),r=e("../base-xform");class i extends r{constructor(l){super(),this.options=l||i.OPTIONS,this.map={b:{prop:"bold",xform:new c({tag:"b",attr:"val"})},i:{prop:"italic",xform:new c({tag:"i",attr:"val"})},u:{prop:"underline",xform:new t},charset:{prop:"charset",xform:new u({tag:"charset",attr:"val"})},color:{prop:"color",xform:new f},condense:{prop:"condense",xform:new c({tag:"condense",attr:"val"})},extend:{prop:"extend",xform:new c({tag:"extend",attr:"val"})},family:{prop:"family",xform:new u({tag:"family",attr:"val"})},outline:{prop:"outline",xform:new c({tag:"outline",attr:"val"})},vertAlign:{prop:"vertAlign",xform:new s({tag:"vertAlign",attr:"val"})},scheme:{prop:"scheme",xform:new s({tag:"scheme",attr:"val"})},shadow:{prop:"shadow",xform:new c({tag:"shadow",attr:"val"})},strike:{prop:"strike",xform:new c({tag:"strike",attr:"val"})},sz:{prop:"size",xform:new u({tag:"sz",attr:"val"})}},this.map[this.options.fontNameTag]={prop:"name",xform:new s({tag:this.options.fontNameTag,attr:"val"})}}get tag(){return this.options.tagName}render(l,a){const{map:g}=this;l.openNode(this.options.tagName),n.each(this.map,(v,h)=>{g[h].xform.render(l,a[v.prop])}),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;if(this.map[l.name])return this.parser=this.map[l.name].xform,this.parser.parseOpen(l);switch(l.name){case this.options.tagName:return this.model={},!0;default:return!1}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){if(this.parser&&!this.parser.parseClose(l)){const a=this.map[l];return this.parser.model&&(this.model[a.prop]=this.parser.model),this.parser=void 0,!0}switch(l){case this.options.tagName:return!1;default:return!0}}}i.OPTIONS={tagName:"font",fontNameTag:"name"},d.exports=i},{"../../../utils/under-dash":26,"../base-xform":32,"../simple/boolean-xform":116,"../simple/integer-xform":118,"../simple/string-xform":119,"./color-xform":128,"./underline-xform":136}],132:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../defaultnumformats"),u=e("../base-xform");function s(){const r={};return f.each(c,(i,o)=>{i.f&&(r[i.f]=parseInt(o,10))}),r}const t=s();class n extends u{constructor(i,o){super(),this.id=i,this.formatCode=o}get tag(){return"numFmt"}render(i,o){i.leafNode("numFmt",{numFmtId:o.id,formatCode:o.formatCode})}parseOpen(i){switch(i.name){case"numFmt":return this.model={id:parseInt(i.attributes.numFmtId,10),formatCode:i.attributes.formatCode.replace(/[\\](.)/g,"$1")},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.getDefaultFmtId=function(i){return t[i]},n.getDefaultFmtCode=function(i){return c[i]&&c[i].f},d.exports=n},{"../../../utils/under-dash":26,"../../defaultnumformats":30,"../base-xform":32}],133:[function(e,d,m){const f=e("../base-xform"),c={boolean(s,t){return s===void 0?t:s}};class u extends f{get tag(){return"protection"}render(t,n){t.addRollback(),t.openNode("protection");let r=!1;function i(o,l){l!==void 0&&(t.addAttribute(o,l),r=!0)}i("locked",c.boolean(n.locked,!0)?void 0:"0"),i("hidden",c.boolean(n.hidden,!1)?"1":void 0),t.closeNode(),r?t.commit():t.rollback()}parseOpen(t){const n={locked:t.attributes.locked!=="0",hidden:t.attributes.hidden==="1"},r=!n.locked||n.hidden;this.model=r?n:null}parseText(){}parseClose(){return!1}}d.exports=u},{"../base-xform":32}],134:[function(e,d,m){const f=e("../base-xform"),c=e("./alignment-xform"),u=e("./protection-xform");class s extends f{constructor(n){super(),this.xfId=!!(n&&n.xfId),this.map={alignment:new c,protection:new u}}get tag(){return"xf"}render(n,r){n.openNode("xf",{numFmtId:r.numFmtId||0,fontId:r.fontId||0,fillId:r.fillId||0,borderId:r.borderId||0}),this.xfId&&n.addAttribute("xfId",r.xfId||0),r.numFmtId&&n.addAttribute("applyNumberFormat","1"),r.fontId&&n.addAttribute("applyFont","1"),r.fillId&&n.addAttribute("applyFill","1"),r.borderId&&n.addAttribute("applyBorder","1"),r.alignment&&n.addAttribute("applyAlignment","1"),r.protection&&n.addAttribute("applyProtection","1"),r.alignment&&this.map.alignment.render(n,r.alignment),r.protection&&this.map.protection.render(n,r.protection),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"xf":return this.model={numFmtId:parseInt(n.attributes.numFmtId,10),fontId:parseInt(n.attributes.fontId,10),fillId:parseInt(n.attributes.fillId,10),borderId:parseInt(n.attributes.borderId,10)},this.xfId&&(this.model.xfId=parseInt(n.attributes.xfId,10)),!0;case"alignment":return this.parser=this.map.alignment,this.parser.parseOpen(n),!0;case"protection":return this.parser=this.map.protection,this.parser.parseOpen(n),!0;default:return!1}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){return this.parser?(this.parser.parseClose(n)||(this.map.protection===this.parser?this.model.protection=this.parser.model:this.model.alignment=this.parser.model,this.parser=void 0),!0):n!=="xf"}}d.exports=s},{"../base-xform":32,"./alignment-xform":126,"./protection-xform":133}],135:[function(e,d,m){const f=e("../../../doc/enums"),c=e("../../../utils/xml-stream"),u=e("../base-xform"),s=e("../static-xform"),t=e("../list-xform"),n=e("./font-xform"),r=e("./fill-xform"),i=e("./border-xform"),o=e("./numfmt-xform"),l=e("./style-xform"),a=e("./dxf-xform"),g=164;class v extends u{constructor(y){super(),this.map={numFmts:new t({tag:"numFmts",count:!0,childXform:new o}),fonts:new t({tag:"fonts",count:!0,childXform:new n,$:{"x14ac:knownFonts":1}}),fills:new t({tag:"fills",count:!0,childXform:new r}),borders:new t({tag:"borders",count:!0,childXform:new i}),cellStyleXfs:new t({tag:"cellStyleXfs",count:!0,childXform:new l}),cellXfs:new t({tag:"cellXfs",count:!0,childXform:new l({xfId:!0})}),dxfs:new t({tag:"dxfs",always:!0,count:!0,childXform:new a}),numFmt:new o,font:new n,fill:new r,border:new i,style:new l({xfId:!0}),cellStyles:v.STATIC_XFORMS.cellStyles,tableStyles:v.STATIC_XFORMS.tableStyles,extLst:v.STATIC_XFORMS.extLst},y&&this.init()}initIndex(){this.index={style:{},numFmt:{},numFmtNextId:164,font:{},border:{},fill:{}}}init(){this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]},this.initIndex(),this._addBorder({}),this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}),this._addFill({type:"pattern",pattern:"none"}),this._addFill({type:"pattern",pattern:"gray125"}),this.weakMap=new WeakMap}render(y,S){S=S||this.model,y.openXml(c.StdDocAttributes),y.openNode("styleSheet",v.STYLESHEET_ATTRIBUTES),this.index?(S.numFmts&&S.numFmts.length&&(y.openNode("numFmts",{count:S.numFmts.length}),S.numFmts.forEach(E=>{y.writeXml(E)}),y.closeNode()),S.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),y.openNode("fonts",{count:S.fonts.length,"x14ac:knownFonts":1}),S.fonts.forEach(E=>{y.writeXml(E)}),y.closeNode(),y.openNode("fills",{count:S.fills.length}),S.fills.forEach(E=>{y.writeXml(E)}),y.closeNode(),y.openNode("borders",{count:S.borders.length}),S.borders.forEach(E=>{y.writeXml(E)}),y.closeNode(),this.map.cellStyleXfs.render(y,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),y.openNode("cellXfs",{count:S.styles.length}),S.styles.forEach(E=>{y.writeXml(E)}),y.closeNode()):(this.map.numFmts.render(y,S.numFmts),this.map.fonts.render(y,S.fonts),this.map.fills.render(y,S.fills),this.map.borders.render(y,S.borders),this.map.cellStyleXfs.render(y,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),this.map.cellXfs.render(y,S.styles)),v.STATIC_XFORMS.cellStyles.render(y),this.map.dxfs.render(y,S.dxfs),v.STATIC_XFORMS.tableStyles.render(y),v.STATIC_XFORMS.extLst.render(y),y.closeNode()}parseOpen(y){if(this.parser)return this.parser.parseOpen(y),!0;switch(y.name){case"styleSheet":return this.initIndex(),!0;default:return this.parser=this.map[y.name],this.parser&&this.parser.parseOpen(y),!0}}parseText(y){this.parser&&this.parser.parseText(y)}parseClose(y){if(this.parser)return this.parser.parseClose(y)||(this.parser=void 0),!0;switch(y){case"styleSheet":{this.model={};const S=(E,I)=>{I.model&&I.model.length&&(this.model[E]=I.model)};if(S("numFmts",this.map.numFmts),S("fonts",this.map.fonts),S("fills",this.map.fills),S("borders",this.map.borders),S("styles",this.map.cellXfs),S("dxfs",this.map.dxfs),this.index={model:[],numFmt:[]},this.model.numFmts){const E=this.index.numFmt;this.model.numFmts.forEach(I=>{E[I.id]=I.formatCode})}return!1}default:return!0}}addStyleModel(y,S){if(!y)return 0;if(this.model.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),this.weakMap&&this.weakMap.has(y))return this.weakMap.get(y);const E={};if(S=S||f.ValueType.Number,y.numFmt)E.numFmtId=this._addNumFmtStr(y.numFmt);else switch(S){case f.ValueType.Number:E.numFmtId=this._addNumFmtStr("General");break;case f.ValueType.Date:E.numFmtId=this._addNumFmtStr("mm-dd-yy");break}y.font&&(E.fontId=this._addFont(y.font)),y.border&&(E.borderId=this._addBorder(y.border)),y.fill&&(E.fillId=this._addFill(y.fill)),y.alignment&&(E.alignment=y.alignment),y.protection&&(E.protection=y.protection);const I=this._addStyle(E);return this.weakMap&&this.weakMap.set(y,I),I}getStyleModel(y){const S=this.model.styles[y];if(!S)return null;let E=this.index.model[y];if(E)return E;if(E=this.index.model[y]={},S.numFmtId){const F=this.index.numFmt[S.numFmtId]||o.getDefaultFmtCode(S.numFmtId);F&&(E.numFmt=F)}function I(F,B,j){if(j||j===0){const X=B[j];X&&(E[F]=X)}}return I("font",this.model.fonts,S.fontId),I("border",this.model.borders,S.borderId),I("fill",this.model.fills,S.fillId),S.alignment&&(E.alignment=S.alignment),S.protection&&(E.protection=S.protection),E}addDxfStyle(y){return y.numFmt&&(y.numFmtId=this._addNumFmtStr(y.numFmt)),this.model.dxfs.push(y),this.model.dxfs.length-1}getDxfStyle(y){return this.model.dxfs[y]}_addStyle(y){const S=this.map.style.toXml(y);let E=this.index.style[S];return E===void 0&&(E=this.index.style[S]=this.model.styles.length,this.model.styles.push(S)),E}_addNumFmtStr(y){let S=o.getDefaultFmtId(y);if(S!==void 0||(S=this.index.numFmt[y],S!==void 0))return S;S=this.index.numFmt[y]=g+this.model.numFmts.length;const E=this.map.numFmt.toXml({id:S,formatCode:y});return this.model.numFmts.push(E),S}_addFont(y){const S=this.map.font.toXml(y);let E=this.index.font[S];return E===void 0&&(E=this.index.font[S]=this.model.fonts.length,this.model.fonts.push(S)),E}_addBorder(y){const S=this.map.border.toXml(y);let E=this.index.border[S];return E===void 0&&(E=this.index.border[S]=this.model.borders.length,this.model.borders.push(S)),E}_addFill(y){const S=this.map.fill.toXml(y);let E=this.index.fill[S];return E===void 0&&(E=this.index.fill[S]=this.model.fills.length,this.model.fills.push(S)),E}}v.STYLESHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac x16r2","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac","xmlns:x16r2":"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"},v.STATIC_XFORMS={cellStyles:new s({tag:"cellStyles",$:{count:1},c:[{tag:"cellStyle",$:{name:"Normal",xfId:0,builtinId:0}}]}),dxfs:new s({tag:"dxfs",$:{count:0}}),tableStyles:new s({tag:"tableStyles",$:{count:0,defaultTableStyle:"TableStyleMedium2",defaultPivotStyle:"PivotStyleLight16"}}),extLst:new s({tag:"extLst",c:[{tag:"ext",$:{uri:"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"},c:[{tag:"x14:slicerStyles",$:{defaultSlicerStyle:"SlicerStyleLight1"}}]},{tag:"ext",$:{uri:"{9260A510-F301-46a8-8635-F512D64BE5F5}","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},c:[{tag:"x15:timelineStyles",$:{defaultTimelineStyle:"TimeSlicerStyleLight1"}}]}]})};class h extends v{constructor(){super(),this.model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}],borders:[{}],fills:[{type:"pattern",pattern:"none"},{type:"pattern",pattern:"gray125"}]}}parseStream(y){return y.autodrain(),Promise.resolve()}addStyleModel(y,S){switch(S){case f.ValueType.Date:return this.dateStyleId;default:return 0}}get dateStyleId(){if(!this._dateStyleId){const y={numFmtId:o.getDefaultFmtId("mm-dd-yy")};this._dateStyleId=this.model.styles.length,this.model.styles.push(y)}return this._dateStyleId}getStyleModel(){return{}}}v.Mock=h,d.exports=v},{"../../../doc/enums":7,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./border-xform":127,"./dxf-xform":129,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./style-xform":134}],136:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.model=s}get tag(){return"u"}render(s,t){if(t=t||this.model,t===!0)s.leafNode("u");else{const n=c.Attributes[t];n&&s.leafNode("u",n)}}parseOpen(s){s.name==="u"&&(this.model=s.attributes.val||!0)}parseText(){}parseClose(){return!1}}c.Attributes={single:{},double:{val:"double"},singleAccounting:{val:"singleAccounting"},doubleAccounting:{val:"doubleAccounting"}},d.exports=c},{"../base-xform":32}],137:[function(e,d,m){const f=e("../base-xform"),c=e("./filter-column-xform");class u extends f{constructor(){super(),this.map={filterColumn:new c}}get tag(){return"autoFilter"}prepare(t){t.columns.forEach((n,r)=>{this.map.filterColumn.prepare(n,{index:r})})}render(t,n){return t.openNode(this.tag,{ref:n.autoFilterRef}),n.columns.forEach(r=>{this.map.filterColumn.render(t,r)}),t.closeNode(),!0}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case this.tag:return this.model={autoFilterRef:t.attributes.ref,columns:[]},!0;default:if(this.parser=this.map[t.name],this.parser)return this.parseOpen(t),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(t)}`)}}parseText(t){this.parser&&this.parser.parseText(t)}parseClose(t){if(this.parser)return this.parser.parseClose(t)||(this.model.columns.push(this.parser.model),this.parser=void 0),!0;switch(t){case this.tag:return!1;default:throw new Error(`Unexpected xml node in parseClose: ${t}`)}}}d.exports=u},{"../base-xform":32,"./filter-column-xform":139}],138:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"customFilter"}render(s,t){s.leafNode(this.tag,{val:t.val,operator:t.operator})}parseOpen(s){return s.name===this.tag?(this.model={val:s.attributes.val,operator:s.attributes.operator},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],139:[function(e,d,m){const f=e("../base-xform"),c=e("../list-xform"),u=e("./custom-filter-xform"),s=e("./filter-xform");class t extends f{constructor(){super(),this.map={customFilters:new c({tag:"customFilters",count:!1,empty:!0,childXform:new u}),filters:new c({tag:"filters",count:!1,empty:!0,childXform:new s})}}get tag(){return"filterColumn"}prepare(r,i){r.colId=i.index.toString()}render(r,i){return i.customFilters?(r.openNode(this.tag,{colId:i.colId,hiddenButton:i.filterButton?"0":"1"}),this.map.customFilters.render(r,i.customFilters),r.closeNode(),!0):(r.leafNode(this.tag,{colId:i.colId,hiddenButton:i.filterButton?"0":"1"}),!0)}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;const{attributes:i}=r;switch(r.name){case this.tag:return this.model={filterButton:i.hiddenButton==="0"},!0;default:if(this.parser=this.map[r.name],this.parser)return this.parseOpen(r),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(r)}`)}}parseText(){}parseClose(r){if(this.parser)return this.parser.parseClose(r)||(this.parser=void 0),!0;switch(r){case this.tag:return this.model.customFilters=this.map.customFilters.model,!1;default:return!0}}}d.exports=t},{"../base-xform":32,"../list-xform":71,"./custom-filter-xform":138,"./filter-xform":140}],140:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"filter"}render(s,t){s.leafNode(this.tag,{val:t.val})}parseOpen(s){return s.name===this.tag?(this.model={val:s.attributes.val},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],141:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"tableColumn"}prepare(s,t){s.id=t.index+1}render(s,t){return s.leafNode(this.tag,{id:t.id.toString(),name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId}),!0}parseOpen(s){if(s.name===this.tag){const{attributes:t}=s;return this.model={name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId},!0}return!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],142:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"tableStyleInfo"}render(s,t){return s.leafNode(this.tag,{name:t.theme?t.theme:void 0,showFirstColumn:t.showFirstColumn?"1":"0",showLastColumn:t.showLastColumn?"1":"0",showRowStripes:t.showRowStripes?"1":"0",showColumnStripes:t.showColumnStripes?"1":"0"}),!0}parseOpen(s){if(s.name===this.tag){const{attributes:t}=s;return this.model={theme:t.name?t.name:null,showFirstColumn:t.showFirstColumn==="1",showLastColumn:t.showLastColumn==="1",showRowStripes:t.showRowStripes==="1",showColumnStripes:t.showColumnStripes==="1"},!0}return!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],143:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("../list-xform"),s=e("./auto-filter-xform"),t=e("./table-column-xform"),n=e("./table-style-info-xform");class r extends c{constructor(){super(),this.map={autoFilter:new s,tableColumns:new u({tag:"tableColumns",count:!0,empty:!0,childXform:new t}),tableStyleInfo:new n}}prepare(o,l){this.map.autoFilter.prepare(o),this.map.tableColumns.prepare(o.columns,l)}get tag(){return"table"}render(o,l){o.openXml(f.StdDocAttributes),o.openNode(this.tag,{...r.TABLE_ATTRIBUTES,id:l.id,name:l.name,displayName:l.displayName||l.name,ref:l.tableRef,totalsRowCount:l.totalsRow?"1":void 0,totalsRowShown:l.totalsRow?void 0:"1",headerRowCount:l.headerRow?"1":"0"}),this.map.autoFilter.render(o,l),this.map.tableColumns.render(o,l.columns),this.map.tableStyleInfo.render(o,l.style),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;const{name:l,attributes:a}=o;switch(l){case this.tag:this.reset(),this.model={name:a.name,displayName:a.displayName||a.name,tableRef:a.ref,totalsRow:a.totalsRowCount==="1",headerRow:a.headerRowCount==="1"};break;default:this.parser=this.map[o.name],this.parser&&this.parser.parseOpen(o);break}return!0}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){if(this.parser)return this.parser.parseClose(o)||(this.parser=void 0),!0;switch(o){case this.tag:return this.model.columns=this.map.tableColumns.model,this.map.autoFilter.model&&(this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef,this.map.autoFilter.model.columns.forEach((l,a)=>{this.model.columns[a].filterButton=l.filterButton})),this.model.style=this.map.tableStyleInfo.model,!1;default:return!0}}reconcile(o,l){o.columns.forEach(a=>{a.dxfId!==void 0&&(a.style=l.styles.getDxfStyle(a.dxfId))})}}r.TABLE_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"xr xr3","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision","xmlns:xr3":"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3"},d.exports=r},{"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":137,"./table-column-xform":141,"./table-style-info-xform":142}],144:[function(e,d,m){(function(f,c){(function(){const u=e("fs"),s=e("jszip"),{PassThrough:t}=e("readable-stream"),n=e("../utils/zip-stream"),r=e("../utils/stream-buf"),i=e("../utils/utils"),o=e("../utils/xml-stream"),{bufferToString:l}=e("../utils/browser-buffer-decode"),a=e("./xform/style/styles-xform"),g=e("./xform/core/core-xform"),v=e("./xform/strings/shared-strings-xform"),h=e("./xform/core/relationships-xform"),w=e("./xform/core/content-types-xform"),y=e("./xform/core/app-xform"),S=e("./xform/book/workbook-xform"),E=e("./xform/sheet/worksheet-xform"),I=e("./xform/drawing/drawing-xform"),F=e("./xform/table/table-xform"),B=e("./xform/comment/comments-xform"),j=e("./xform/comment/vml-notes-xform"),X=e("./xml/theme1");function G(J,H){return new Promise((M,T)=>{u.readFile(J,H,(_,A)=>{_?T(_):M(A)})})}class V{constructor(H){this.workbook=H}async readFile(H,M){if(!await i.fs.exists(H))throw new Error(`File not found: ${H}`);const T=u.createReadStream(H);try{const _=await this.read(T,M);return T.close(),_}catch(_){throw T.close(),_}}parseRels(H){return new h().parseStream(H)}parseWorkbook(H){return new S().parseStream(H)}parseSharedStrings(H){return new v().parseStream(H)}reconcile(H,M){const T=new S,_=new E(M),A=new I,P=new F;T.reconcile(H);const L={media:H.media,mediaIndex:H.mediaIndex};Object.keys(H.drawings).forEach(k=>{const C=H.drawings[k],O=H.drawingRels[k];O&&(L.rels=O.reduce((W,ne)=>(W[ne.Id]=ne,W),{}),(C.anchors||[]).forEach(W=>{const ne=W.picture&&W.picture.hyperlinks;ne&&L.rels[ne.rId]&&(ne.hyperlink=L.rels[ne.rId].Target,delete ne.rId)}),A.reconcile(C,L))});const $={styles:H.styles};Object.values(H.tables).forEach(k=>{P.reconcile(k,$)});const R={styles:H.styles,sharedStrings:H.sharedStrings,media:H.media,mediaIndex:H.mediaIndex,date1904:H.properties&&H.properties.date1904,drawings:H.drawings,comments:H.comments,tables:H.tables,vmlDrawings:H.vmlDrawings};H.worksheets.forEach(k=>{k.relationships=H.worksheetRels[k.sheetNo],_.reconcile(k,R)}),delete H.worksheetHash,delete H.worksheetRels,delete H.globalRels,delete H.sharedStrings,delete H.workbookRels,delete H.sheetDefs,delete H.styles,delete H.mediaIndex,delete H.drawings,delete H.drawingRels,delete H.vmlDrawings}async _processWorksheetEntry(H,M,T,_,A){const L=await new E(_).parseStream(H);L.sheetNo=T,M.worksheetHash[A]=L,M.worksheets.push(L)}async _processCommentEntry(H,M,T){const A=await new B().parseStream(H);M.comments[`../${T}.xml`]=A}async _processTableEntry(H,M,T){const A=await new F().parseStream(H);M.tables[`../tables/${T}.xml`]=A}async _processWorksheetRelsEntry(H,M,T){const A=await new h().parseStream(H);M.worksheetRels[T]=A}async _processMediaEntry(H,M,T){const _=T.lastIndexOf(".");if(_>=1){const A=T.substr(_+1),P=T.substr(0,_);await new Promise((L,$)=>{const R=new r;R.on("finish",()=>{M.mediaIndex[T]=M.media.length,M.mediaIndex[P]=M.media.length;const k={type:"image",name:P,extension:A,buffer:R.toBuffer()};M.media.push(k),L()}),H.on("error",k=>{$(k)}),H.pipe(R)})}}async _processDrawingEntry(H,M,T){const A=await new I().parseStream(H);M.drawings[T]=A}async _processDrawingRelsEntry(H,M,T){const A=await new h().parseStream(H);M.drawingRels[T]=A}async _processVmlDrawingEntry(H,M,T){const A=await new j().parseStream(H);M.vmlDrawings[`../drawings/${T}.vml`]=A}async _processThemeEntry(H,M,T){await new Promise((_,A)=>{const P=new r;H.on("error",A),P.on("error",A),P.on("finish",()=>{M.themes[T]=P.read().toString(),_()}),H.pipe(P)})}createInputStream(){throw new Error("`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}async read(H,M){!H[Symbol.asyncIterator]&&H.pipe&&(H=H.pipe(new t));const T=[];for await(const _ of H)T.push(_);return this.load(c.concat(T),M)}async load(H,M){let T;M&&M.base64?T=c.from(H.toString(),"base64"):T=H;const _={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},A=await s.loadAsync(T);for(const P of Object.values(A.files))if(!P.dir){let L=P.name;L[0]==="/"&&(L=L.substr(1));let $;if(L.match(/xl\/media\//)||L.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/))$=new t,$.write(await P.async("nodebuffer"));else{$=new t({writableObjectMode:!0,readableObjectMode:!0});let R;f.browser?R=l(await P.async("nodebuffer")):R=await P.async("string");const k=16*1024;for(let C=0;C{if(T.type==="image"){const _=`xl/media/${T.name}.${T.extension}`;if(T.filename){const A=await G(T.filename);return H.append(A,{name:_})}if(T.buffer)return H.append(T.buffer,{name:_});if(T.base64){const A=T.base64,P=A.substring(A.indexOf(",")+1);return H.append(P,{name:_,base64:!0})}}throw new Error("Unsupported media")}))}addDrawings(H,M){const T=new I,_=new h;M.worksheets.forEach(A=>{const{drawing:P}=A;if(P){T.prepare(P,{});let L=T.toXml(P);H.append(L,{name:`xl/drawings/${P.name}.xml`}),L=_.toXml(P.rels),H.append(L,{name:`xl/drawings/_rels/${P.name}.xml.rels`})}})}addTables(H,M){const T=new F;M.worksheets.forEach(_=>{const{tables:A}=_;A.forEach(P=>{T.prepare(P,{});const L=T.toXml(P);H.append(L,{name:`xl/tables/${P.target}`})})})}async addContentTypes(H,M){const _=new w().toXml(M);H.append(_,{name:"[Content_Types].xml"})}async addApp(H,M){const _=new y().toXml(M);H.append(_,{name:"docProps/app.xml"})}async addCore(H,M){const T=new g;H.append(T.toXml(M),{name:"docProps/core.xml"})}async addThemes(H,M){const T=M.themes||{theme1:X};Object.keys(T).forEach(_=>{const A=T[_],P=`xl/theme/${_}.xml`;H.append(A,{name:P})})}async addOfficeRels(H){const T=new h().toXml([{Id:"rId1",Type:V.RelType.OfficeDocument,Target:"xl/workbook.xml"},{Id:"rId2",Type:V.RelType.CoreProperties,Target:"docProps/core.xml"},{Id:"rId3",Type:V.RelType.ExtenderProperties,Target:"docProps/app.xml"}]);H.append(T,{name:"_rels/.rels"})}async addWorkbookRels(H,M){let T=1;const _=[{Id:`rId${T++}`,Type:V.RelType.Styles,Target:"styles.xml"},{Id:`rId${T++}`,Type:V.RelType.Theme,Target:"theme/theme1.xml"}];M.sharedStrings.count&&_.push({Id:`rId${T++}`,Type:V.RelType.SharedStrings,Target:"sharedStrings.xml"}),M.worksheets.forEach(L=>{L.rId=`rId${T++}`,_.push({Id:L.rId,Type:V.RelType.Worksheet,Target:`worksheets/sheet${L.id}.xml`})});const P=new h().toXml(_);H.append(P,{name:"xl/_rels/workbook.xml.rels"})}async addSharedStrings(H,M){M.sharedStrings&&M.sharedStrings.count&&H.append(M.sharedStrings.xml,{name:"xl/sharedStrings.xml"})}async addStyles(H,M){const{xml:T}=M.styles;T&&H.append(T,{name:"xl/styles.xml"})}async addWorkbook(H,M){const T=new S;H.append(T.toXml(M),{name:"xl/workbook.xml"})}async addWorksheets(H,M){const T=new E,_=new h,A=new B,P=new j;M.worksheets.forEach(L=>{let $=new o;T.render($,L),H.append($.xml,{name:`xl/worksheets/sheet${L.id}.xml`}),L.rels&&L.rels.length&&($=new o,_.render($,L.rels),H.append($.xml,{name:`xl/worksheets/_rels/sheet${L.id}.xml.rels`})),L.comments.length>0&&($=new o,A.render($,L),H.append($.xml,{name:`xl/comments${L.id}.xml`}),$=new o,P.render($,L),H.append($.xml,{name:`xl/drawings/vmlDrawing${L.id}.vml`}))})}_finalize(H){return new Promise((M,T)=>{H.on("finish",()=>{M(this)}),H.on("error",T),H.finalize()})}prepareModel(H,M){H.creator=H.creator||"ExcelJS",H.lastModifiedBy=H.lastModifiedBy||"ExcelJS",H.created=H.created||new Date,H.modified=H.modified||new Date,H.useSharedStrings=M.useSharedStrings!==void 0?M.useSharedStrings:!0,H.useStyles=M.useStyles!==void 0?M.useStyles:!0,H.sharedStrings=new v,H.styles=H.useStyles?new a(!0):new a.Mock;const T=new S,_=new E;T.prepare(H);const A={sharedStrings:H.sharedStrings,styles:H.styles,date1904:H.properties.date1904,drawingsCount:0,media:H.media};A.drawings=H.drawings=[],A.commentRefs=H.commentRefs=[];let P=0;H.tables=[],H.worksheets.forEach(L=>{L.tables.forEach($=>{P++,$.target=`table${P}.xml`,$.id=P,H.tables.push($)}),_.prepare(L,A)})}async write(H,M){M=M||{};const{model:T}=this.workbook,_=new n.ZipWriter(M.zip);return _.pipe(H),this.prepareModel(T,M),await this.addContentTypes(_,T),await this.addOfficeRels(_,T),await this.addWorkbookRels(_,T),await this.addWorksheets(_,T),await this.addSharedStrings(_,T),await this.addDrawings(_,T),await this.addTables(_,T),await Promise.all([this.addThemes(_,T),this.addStyles(_,T)]),await this.addMedia(_,T),await Promise.all([this.addApp(_,T),this.addCore(_,T)]),await this.addWorkbook(_,T),this._finalize(_)}writeFile(H,M){const T=u.createWriteStream(H);return new Promise((_,A)=>{T.on("finish",()=>{_()}),T.on("error",P=>{A(P)}),this.write(T,M).then(()=>{T.end()}).catch(P=>{A(P)})})}async writeBuffer(H){const M=new r;return await this.write(M,H),M.read()}}V.RelType=e("./rel-type"),d.exports=V}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":24,"../utils/utils":27,"../utils/xml-stream":28,"../utils/zip-stream":29,"./rel-type":31,"./xform/book/workbook-xform":38,"./xform/comment/comments-xform":40,"./xform/comment/vml-notes-xform":45,"./xform/core/app-xform":51,"./xform/core/content-types-xform":52,"./xform/core/core-xform":53,"./xform/core/relationships-xform":55,"./xform/drawing/drawing-xform":62,"./xform/sheet/worksheet-xform":115,"./xform/strings/shared-strings-xform":124,"./xform/style/styles-xform":135,"./xform/table/table-xform":143,"./xml/theme1":145,_process:467,buffer:220,fs:216,jszip:441,"readable-stream":491}],145:[function(e,d,m){d.exports=` + `},{}],146:[function(e,d,m){(function(f){(function(){Object.defineProperty(m,"__esModule",{value:!0}),m.CsvFormatterStream=void 0;const c=e("stream"),u=e("./formatter");class s extends c.Transform{constructor(n){super({writableObjectMode:n.objectMode}),this.hasWrittenBOM=!1,this.formatterOptions=n,this.rowFormatter=new u.RowFormatter(n),this.hasWrittenBOM=!n.writeBOM}transform(n){return this.rowFormatter.rowTransform=n,this}_transform(n,r,i){let o=!1;try{this.hasWrittenBOM||(this.push(this.formatterOptions.BOM),this.hasWrittenBOM=!0),this.rowFormatter.format(n,(l,a)=>l?(o=!0,i(l)):(a&&a.forEach(g=>{this.push(f.from(g,"utf8"))}),o=!0,i()))}catch(l){if(o)throw l;i(l)}}_flush(n){this.rowFormatter.finish((r,i)=>r?n(r):(i&&i.forEach(o=>{this.push(f.from(o,"utf8"))}),n()))}}m.CsvFormatterStream=s}).call(this)}).call(this,e("buffer").Buffer)},{"./formatter":150,buffer:220,stream:505}],147:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.FormatterOptions=void 0;class f{constructor(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};var s;this.objectMode=!0,this.delimiter=",",this.rowDelimiter=` +`,this.quote='"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.writeBOM=!1,this.BOM="\uFEFF",this.alwaysWriteHeaders=!1,Object.assign(this,u||{}),typeof(u==null?void 0:u.quoteHeaders)>"u"&&(this.quoteHeaders=this.quoteColumns),(u==null?void 0:u.quote)===!0?this.quote='"':(u==null?void 0:u.quote)===!1&&(this.quote=""),typeof(u==null?void 0:u.escape)!="string"&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers&&((s=u.writeHeaders)!==null&&s!==void 0?s:!0),this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=`${this.escape}${this.quote}`}}m.FormatterOptions=f},{}],148:[function(e,d,m){var f=function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(m,"__esModule",{value:!0}),m.FieldFormatter=void 0;const c=f(e("lodash.isboolean")),u=f(e("lodash.isnil")),s=f(e("lodash.escaperegexp"));class t{constructor(r){this._headers=null,this.formatterOptions=r,r.headers!==null&&(this.headers=r.headers),this.REPLACE_REGEXP=new RegExp(r.quote,"g");const i=`[${r.delimiter}${s.default(r.rowDelimiter)}|\r| +]`;this.ESCAPE_REGEXP=new RegExp(i)}set headers(r){this._headers=r}shouldQuote(r,i){const o=i?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;return c.default(o)?o:Array.isArray(o)?o[r]:this._headers!==null?o[this._headers[r]]:!1}format(r,i,o){const l=`${u.default(r)?"":r}`.replace(/\0/g,""),{formatterOptions:a}=this;return a.quote!==""&&l.indexOf(a.quote)!==-1?this.quoteField(l.replace(this.REPLACE_REGEXP,a.escapedQuote)):l.search(this.ESCAPE_REGEXP)!==-1||this.shouldQuote(i,o)?this.quoteField(l):l}quoteField(r){const{quote:i}=this.formatterOptions;return`${i}${r}${i}`}}m.FieldFormatter=t},{"lodash.escaperegexp":442,"lodash.isboolean":444,"lodash.isnil":447}],149:[function(e,d,m){var f=function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(m,"__esModule",{value:!0}),m.RowFormatter=void 0;const c=f(e("lodash.isfunction")),u=f(e("lodash.isequal")),s=e("./FieldFormatter"),t=e("../types");class n{constructor(i){this.rowCount=0,this.formatterOptions=i,this.fieldFormatter=new s.FieldFormatter(i),this.headers=i.headers,this.shouldWriteHeaders=i.shouldWriteHeaders,this.hasWrittenHeaders=!1,this.headers!==null&&(this.fieldFormatter.headers=this.headers),i.transform&&(this.rowTransform=i.transform)}static isRowHashArray(i){return Array.isArray(i)?Array.isArray(i[0])&&i[0].length===2:!1}static isRowArray(i){return Array.isArray(i)&&!this.isRowHashArray(i)}static gatherHeaders(i){return n.isRowHashArray(i)?i.map(o=>o[0]):Array.isArray(i)?i:Object.keys(i)}static createTransform(i){return t.isSyncTransform(i)?(o,l)=>{let a=null;try{a=i(o)}catch(g){return l(g)}return l(null,a)}:(o,l)=>{i(o,l)}}set rowTransform(i){if(!c.default(i))throw new TypeError("The transform should be a function");this._rowTransform=n.createTransform(i)}format(i,o){this.callTransformer(i,(l,a)=>{if(l)return o(l);if(!i)return o(null);const g=[];if(a){const{shouldFormatColumns:v,headers:h}=this.checkHeaders(a);if(this.shouldWriteHeaders&&h&&!this.hasWrittenHeaders&&(g.push(this.formatColumns(h,!0)),this.hasWrittenHeaders=!0),v){const w=this.gatherColumns(a);g.push(this.formatColumns(w,!1))}}return o(null,g)})}finish(i){const o=[];if(this.formatterOptions.alwaysWriteHeaders&&this.rowCount===0){if(!this.headers)return i(new Error("`alwaysWriteHeaders` option is set to true but `headers` option not provided."));o.push(this.formatColumns(this.headers,!0))}return this.formatterOptions.includeEndRowDelimiter&&o.push(this.formatterOptions.rowDelimiter),i(null,o)}checkHeaders(i){if(this.headers)return{shouldFormatColumns:!0,headers:this.headers};const o=n.gatherHeaders(i);return this.headers=o,this.fieldFormatter.headers=o,this.shouldWriteHeaders?{shouldFormatColumns:!u.default(o,i),headers:o}:{shouldFormatColumns:!0,headers:null}}gatherColumns(i){if(this.headers===null)throw new Error("Headers is currently null");return Array.isArray(i)?n.isRowHashArray(i)?this.headers.map((o,l)=>{const a=i[l];return a?a[1]:""}):n.isRowArray(i)&&!this.shouldWriteHeaders?i:this.headers.map((o,l)=>i[l]):this.headers.map(o=>i[o])}callTransformer(i,o){return this._rowTransform?this._rowTransform(i,o):o(null,i)}formatColumns(i,o){const l=i.map((g,v)=>this.fieldFormatter.format(g,v,o)).join(this.formatterOptions.delimiter),{rowCount:a}=this;return this.rowCount+=1,a?[this.formatterOptions.rowDelimiter,l].join(""):l}}m.RowFormatter=n},{"../types":152,"./FieldFormatter":148,"lodash.isequal":445,"lodash.isfunction":446}],150:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.FieldFormatter=m.RowFormatter=void 0;var f=e("./RowFormatter");Object.defineProperty(m,"RowFormatter",{enumerable:!0,get:function(){return f.RowFormatter}});var c=e("./FieldFormatter");Object.defineProperty(m,"FieldFormatter",{enumerable:!0,get:function(){return c.FieldFormatter}})},{"./FieldFormatter":148,"./RowFormatter":149}],151:[function(e,d,m){(function(f){(function(){var c=Object.create?function(v,h,w,y){y===void 0&&(y=w),Object.defineProperty(v,y,{enumerable:!0,get:function(){return h[w]}})}:function(v,h,w,y){y===void 0&&(y=w),v[y]=h[w]},u=Object.create?function(v,h){Object.defineProperty(v,"default",{enumerable:!0,value:h})}:function(v,h){v.default=h},s=function(v){if(v&&v.__esModule)return v;var h={};if(v!=null)for(var w in v)w!=="default"&&Object.prototype.hasOwnProperty.call(v,w)&&c(h,v,w);return u(h,v),h},t=function(v,h){for(var w in v)w!=="default"&&!Object.prototype.hasOwnProperty.call(h,w)&&c(h,v,w)};Object.defineProperty(m,"__esModule",{value:!0}),m.writeToPath=m.writeToString=m.writeToBuffer=m.writeToStream=m.write=m.format=m.FormatterOptions=m.CsvFormatterStream=void 0;const n=e("util"),r=e("stream"),i=s(e("fs")),o=e("./FormatterOptions"),l=e("./CsvFormatterStream");t(e("./types"),m);var a=e("./CsvFormatterStream");Object.defineProperty(m,"CsvFormatterStream",{enumerable:!0,get:function(){return a.CsvFormatterStream}});var g=e("./FormatterOptions");Object.defineProperty(m,"FormatterOptions",{enumerable:!0,get:function(){return g.FormatterOptions}}),m.format=v=>new l.CsvFormatterStream(new o.FormatterOptions(v)),m.write=(v,h)=>{const w=m.format(h),y=n.promisify((S,E)=>{w.write(S,void 0,E)});return v.reduce((S,E)=>S.then(()=>y(E)),Promise.resolve()).then(()=>w.end()).catch(S=>{w.emit("error",S)}),w},m.writeToStream=(v,h,w)=>m.write(h,w).pipe(v),m.writeToBuffer=function(v){let h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const w=[],y=new r.Writable({write(S,E,I){w.push(S),I()}});return new Promise((S,E)=>{y.on("error",E).on("finish",()=>S(f.concat(w))),m.write(v,h).pipe(y)})},m.writeToString=(v,h)=>m.writeToBuffer(v,h).then(w=>w.toString()),m.writeToPath=(v,h,w)=>{const y=i.createWriteStream(v,{encoding:"utf8"});return m.write(h,w).pipe(y)}}).call(this)}).call(this,e("buffer").Buffer)},{"./CsvFormatterStream":146,"./FormatterOptions":147,"./types":152,buffer:220,fs:216,stream:505,util:527}],152:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.isSyncTransform=void 0,m.isSyncTransform=f=>f.length===1},{}],153:[function(e,d,m){(function(f){(function(){Object.defineProperty(m,"__esModule",{value:!0}),m.CsvParserStream=void 0;const c=e("string_decoder"),u=e("stream"),s=e("./transforms"),t=e("./parser");class n extends u.Transform{constructor(i){super({objectMode:i.objectMode}),this.lines="",this.rowCount=0,this.parsedRowCount=0,this.parsedLineCount=0,this.endEmitted=!1,this.headersEmitted=!1,this.parserOptions=i,this.parser=new t.Parser(i),this.headerTransformer=new s.HeaderTransformer(i),this.decoder=new c.StringDecoder(i.encoding),this.rowTransformerValidator=new s.RowTransformerValidator}get hasHitRowLimit(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}get shouldEmitRows(){return this.parsedRowCount>this.parserOptions.skipRows}get shouldSkipLine(){return this.parsedLineCount<=this.parserOptions.skipLines}transform(i){return this.rowTransformerValidator.rowTransform=i,this}validate(i){return this.rowTransformerValidator.rowValidator=i,this}emit(i){if(i==="end")return this.endEmitted||(this.endEmitted=!0,super.emit("end",this.rowCount)),!1;for(var o=arguments.length,l=new Array(o>1?o-1:0),a=1;a{const v=y=>{if(y)return o(y);if(g%100===0){f(()=>a(g+1));return}return a(g+1)};if(this.checkAndEmitHeaders(),g>=l||this.hasHitRowLimit)return o();if(this.parsedLineCount+=1,this.shouldSkipLine)return v();const h=i[g];this.rowCount+=1,this.parsedRowCount+=1;const w=this.rowCount;return this.transformRow(h,(y,S)=>{if(y)return this.rowCount-=1,v(y);if(!S)return v(new Error("expected transform result"));if(!S.isValid)this.emit("data-invalid",S.row,w,S.reason);else if(S.row)return this.pushRow(S.row,v);return v()})};a(0)}transformRow(i,o){try{this.headerTransformer.transform(i,(l,a)=>l?o(l):a?a.isValid?a.row?this.shouldEmitRows?this.rowTransformerValidator.transformAndValidate(a.row,o):this.skipRow(o):(this.rowCount-=1,this.parsedRowCount-=1,o(null,{row:null,isValid:!0})):this.shouldEmitRows?o(null,{isValid:!1,row:i}):this.skipRow(o):o(new Error("Expected result from header transform")))}catch(l){o(l)}}checkAndEmitHeaders(){!this.headersEmitted&&this.headerTransformer.headers&&(this.headersEmitted=!0,this.emit("headers",this.headerTransformer.headers))}skipRow(i){return this.rowCount-=1,i(null,{row:null,isValid:!0})}pushRow(i,o){try{this.parserOptions.objectMode?this.push(i):this.push(JSON.stringify(i)),o()}catch(l){o(l)}}static wrapDoneCallback(i){let o=!1;return function(l){if(l){if(o)throw l;o=!0,i(l);return}for(var a=arguments.length,g=new Array(a>1?a-1:0),v=1;v1)throw new Error("delimiter option must be one character long");this.escapedDelimiter=c.default(this.delimiter),this.escapeChar=(r=this.escape)!==null&&r!==void 0?r:this.quote,this.supportsComments=!u.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`),this.maxRows>0&&(this.limitRows=!0)}}m.ParserOptions=s},{"lodash.escaperegexp":442,"lodash.isnil":447}],155:[function(e,d,m){var f=Object.create?function(a,g,v,h){h===void 0&&(h=v),Object.defineProperty(a,h,{enumerable:!0,get:function(){return g[v]}})}:function(a,g,v,h){h===void 0&&(h=v),a[h]=g[v]},c=Object.create?function(a,g){Object.defineProperty(a,"default",{enumerable:!0,value:g})}:function(a,g){a.default=g},u=function(a){if(a&&a.__esModule)return a;var g={};if(a!=null)for(var v in a)v!=="default"&&Object.prototype.hasOwnProperty.call(a,v)&&f(g,a,v);return c(g,a),g},s=function(a,g){for(var v in a)v!=="default"&&!Object.prototype.hasOwnProperty.call(g,v)&&f(g,a,v)};Object.defineProperty(m,"__esModule",{value:!0}),m.parseString=m.parseFile=m.parseStream=m.parse=m.ParserOptions=m.CsvParserStream=void 0;const t=u(e("fs")),n=e("stream"),r=e("./ParserOptions"),i=e("./CsvParserStream");s(e("./types"),m);var o=e("./CsvParserStream");Object.defineProperty(m,"CsvParserStream",{enumerable:!0,get:function(){return o.CsvParserStream}});var l=e("./ParserOptions");Object.defineProperty(m,"ParserOptions",{enumerable:!0,get:function(){return l.ParserOptions}}),m.parse=a=>new i.CsvParserStream(new r.ParserOptions(a)),m.parseStream=(a,g)=>a.pipe(new i.CsvParserStream(new r.ParserOptions(g))),m.parseFile=function(a){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return t.createReadStream(a).pipe(new i.CsvParserStream(new r.ParserOptions(g)))},m.parseString=(a,g)=>{const v=new n.Readable;return v.push(a),v.push(null),v.pipe(new i.CsvParserStream(new r.ParserOptions(g)))}},{"./CsvParserStream":153,"./ParserOptions":154,"./types":169,fs:216,stream:505}],156:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.Parser=void 0;const f=e("./Scanner"),c=e("./RowParser"),u=e("./Token");class s{constructor(n){this.parserOptions=n,this.rowParser=new c.RowParser(this.parserOptions)}static removeBOM(n){return n&&n.charCodeAt(0)===65279?n.slice(1):n}parse(n,r){const i=new f.Scanner({line:s.removeBOM(n),parserOptions:this.parserOptions,hasMoreData:r});return this.parserOptions.supportsComments?this.parseWithComments(i):this.parseWithoutComments(i)}parseWithoutComments(n){const r=[];let i=!0;for(;i;)i=this.parseRow(n,r);return{line:n.line,rows:r}}parseWithComments(n){const{parserOptions:r}=this,i=[];for(let o=n.nextCharacterToken;o!==null;o=n.nextCharacterToken)if(u.Token.isTokenComment(o,r)){if(n.advancePastLine()===null)return{line:n.lineFromCursor,rows:i};if(!n.hasMoreCharacters)return{line:n.lineFromCursor,rows:i};n.truncateToCursor()}else if(!this.parseRow(n,i))break;return{line:n.line,rows:i}}parseRow(n,r){if(!n.nextNonSpaceToken)return!1;const o=this.rowParser.parse(n);return o===null?!1:(this.parserOptions.ignoreEmpty&&c.RowParser.isEmptyRow(o)||r.push(o),!0)}}m.Parser=s},{"./RowParser":157,"./Scanner":158,"./Token":159}],157:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.RowParser=void 0;const f=e("./column"),c=e("./Token"),u="";class s{constructor(n){this.parserOptions=n,this.columnParser=new f.ColumnParser(n)}static isEmptyRow(n){return n.join(u).replace(/\s+/g,u)===u}parse(n){const{parserOptions:r}=this,{hasMoreData:i}=n,o=n,l=[];let a=this.getStartToken(o,l);for(;a;){if(c.Token.isTokenRowDelimiter(a))return o.advancePastToken(a),!o.hasMoreCharacters&&c.Token.isTokenCarriageReturn(a,r)&&i?null:(o.truncateToCursor(),l);if(!this.shouldSkipColumnParse(o,a,l)){const g=this.columnParser.parse(o);if(g===null)return null;l.push(g)}a=o.nextNonSpaceToken}return i?null:(o.truncateToCursor(),l)}getStartToken(n,r){const i=n.nextNonSpaceToken;return i!==null&&c.Token.isTokenDelimiter(i,this.parserOptions)?(r.push(""),n.nextNonSpaceToken):i}shouldSkipColumnParse(n,r,i){const{parserOptions:o}=this;if(c.Token.isTokenDelimiter(r,o)){n.advancePastToken(r);const l=n.nextCharacterToken;if(!n.hasMoreCharacters||l!==null&&c.Token.isTokenRowDelimiter(l)||l!==null&&c.Token.isTokenDelimiter(l,o))return i.push(""),!0}return!1}}m.RowParser=s},{"./Token":159,"./column":164}],158:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.Scanner=void 0;const f=e("./Token"),c=/((?:\r\n)|\n|\r)/;class u{constructor(t){this.cursor=0,this.line=t.line,this.lineLength=this.line.length,this.parserOptions=t.parserOptions,this.hasMoreData=t.hasMoreData,this.cursor=t.cursor||0}get hasMoreCharacters(){return this.lineLength>this.cursor}get nextNonSpaceToken(){const{lineFromCursor:t}=this,n=this.parserOptions.NEXT_TOKEN_REGEXP;if(t.search(n)===-1)return null;const r=n.exec(t);if(r==null)return null;const i=r[1],o=this.cursor+(r.index||0);return new f.Token({token:i,startCursor:o,endCursor:o+i.length-1})}get nextCharacterToken(){const{cursor:t,lineLength:n}=this;return n<=t?null:new f.Token({token:this.line[t],startCursor:t,endCursor:t})}get lineFromCursor(){return this.line.substr(this.cursor)}advancePastLine(){const t=c.exec(this.lineFromCursor);return t?(this.cursor+=(t.index||0)+t[0].length,this):this.hasMoreData?null:(this.cursor=this.lineLength,this)}advanceTo(t){return this.cursor=t,this}advanceToToken(t){return this.cursor=t.startCursor,this}advancePastToken(t){return this.cursor=t.endCursor+1,this}truncateToCursor(){return this.line=this.lineFromCursor,this.lineLength=this.line.length,this.cursor=0,this}}m.Scanner=u},{"./Token":159}],159:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.Token=void 0;class f{constructor(u){this.token=u.token,this.startCursor=u.startCursor,this.endCursor=u.endCursor}static isTokenRowDelimiter(u){const s=u.token;return s==="\r"||s===` +`||s===`\r +`}static isTokenCarriageReturn(u,s){return u.token===s.carriageReturn}static isTokenComment(u,s){return s.supportsComments&&!!u&&u.token===s.comment}static isTokenEscapeCharacter(u,s){return u.token===s.escapeChar}static isTokenQuote(u,s){return u.token===s.quote}static isTokenDelimiter(u,s){return u.token===s.delimiter}}m.Token=f},{}],160:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.ColumnFormatter=void 0;class f{constructor(u){u.trim?this.format=s=>s.trim():u.ltrim?this.format=s=>s.trimLeft():u.rtrim?this.format=s=>s.trimRight():this.format=s=>s}}m.ColumnFormatter=f},{}],161:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.ColumnParser=void 0;const f=e("./NonQuotedColumnParser"),c=e("./QuotedColumnParser"),u=e("../Token");class s{constructor(n){this.parserOptions=n,this.quotedColumnParser=new c.QuotedColumnParser(n),this.nonQuotedColumnParser=new f.NonQuotedColumnParser(n)}parse(n){const{nextNonSpaceToken:r}=n;return r!==null&&u.Token.isTokenQuote(r,this.parserOptions)?(n.advanceToToken(r),this.quotedColumnParser.parse(n)):this.nonQuotedColumnParser.parse(n)}}m.ColumnParser=s},{"../Token":159,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],162:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.NonQuotedColumnParser=void 0;const f=e("./ColumnFormatter"),c=e("../Token");class u{constructor(t){this.parserOptions=t,this.columnFormatter=new f.ColumnFormatter(t)}parse(t){if(!t.hasMoreCharacters)return null;const{parserOptions:n}=this,r=[];let i=t.nextCharacterToken;for(;i&&!(c.Token.isTokenDelimiter(i,n)||c.Token.isTokenRowDelimiter(i));i=t.nextCharacterToken)r.push(i.token),t.advancePastToken(i);return this.columnFormatter.format(r.join(""))}}m.NonQuotedColumnParser=u},{"../Token":159,"./ColumnFormatter":160}],163:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.QuotedColumnParser=void 0;const f=e("./ColumnFormatter"),c=e("../Token");class u{constructor(t){this.parserOptions=t,this.columnFormatter=new f.ColumnFormatter(t)}parse(t){if(!t.hasMoreCharacters)return null;const n=t.cursor,{foundClosingQuote:r,col:i}=this.gatherDataBetweenQuotes(t);if(!r){if(t.advanceTo(n),!t.hasMoreData)throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote||""}' in line: at '${t.lineFromCursor.replace(/[\r\n]/g,"\\n'")}'`);return null}return this.checkForMalformedColumn(t),i}gatherDataBetweenQuotes(t){const{parserOptions:n}=this;let r=!1,i=!1;const o=[];let l=t.nextCharacterToken;for(;!i&&l!==null;l=t.nextCharacterToken){const a=c.Token.isTokenQuote(l,n);if(!r&&a)r=!0;else if(r)if(c.Token.isTokenEscapeCharacter(l,n)){t.advancePastToken(l);const g=t.nextCharacterToken;g!==null&&(c.Token.isTokenQuote(g,n)||c.Token.isTokenEscapeCharacter(g,n))?(o.push(g.token),l=g):a?i=!0:o.push(l.token)}else a?i=!0:o.push(l.token);t.advancePastToken(l)}return{col:this.columnFormatter.format(o.join("")),foundClosingQuote:i}}checkForMalformedColumn(t){const{parserOptions:n}=this,{nextNonSpaceToken:r}=t;if(r){const i=c.Token.isTokenDelimiter(r,n),o=c.Token.isTokenRowDelimiter(r);if(!(i||o)){const l=t.lineFromCursor.substr(0,10).replace(/[\r\n]/g,"\\n'");throw new Error(`Parse Error: expected: '${n.escapedDelimiter}' OR new line got: '${r.token}'. at '${l}`)}t.advanceToToken(r)}else t.hasMoreData||t.advancePastLine()}}m.QuotedColumnParser=u},{"../Token":159,"./ColumnFormatter":160}],164:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.ColumnFormatter=m.QuotedColumnParser=m.NonQuotedColumnParser=m.ColumnParser=void 0;var f=e("./ColumnParser");Object.defineProperty(m,"ColumnParser",{enumerable:!0,get:function(){return f.ColumnParser}});var c=e("./NonQuotedColumnParser");Object.defineProperty(m,"NonQuotedColumnParser",{enumerable:!0,get:function(){return c.NonQuotedColumnParser}});var u=e("./QuotedColumnParser");Object.defineProperty(m,"QuotedColumnParser",{enumerable:!0,get:function(){return u.QuotedColumnParser}});var s=e("./ColumnFormatter");Object.defineProperty(m,"ColumnFormatter",{enumerable:!0,get:function(){return s.ColumnFormatter}})},{"./ColumnFormatter":160,"./ColumnParser":161,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],165:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.QuotedColumnParser=m.NonQuotedColumnParser=m.ColumnParser=m.Token=m.Scanner=m.RowParser=m.Parser=void 0;var f=e("./Parser");Object.defineProperty(m,"Parser",{enumerable:!0,get:function(){return f.Parser}});var c=e("./RowParser");Object.defineProperty(m,"RowParser",{enumerable:!0,get:function(){return c.RowParser}});var u=e("./Scanner");Object.defineProperty(m,"Scanner",{enumerable:!0,get:function(){return u.Scanner}});var s=e("./Token");Object.defineProperty(m,"Token",{enumerable:!0,get:function(){return s.Token}});var t=e("./column");Object.defineProperty(m,"ColumnParser",{enumerable:!0,get:function(){return t.ColumnParser}}),Object.defineProperty(m,"NonQuotedColumnParser",{enumerable:!0,get:function(){return t.NonQuotedColumnParser}}),Object.defineProperty(m,"QuotedColumnParser",{enumerable:!0,get:function(){return t.QuotedColumnParser}})},{"./Parser":156,"./RowParser":157,"./Scanner":158,"./Token":159,"./column":164}],166:[function(e,d,m){var f=function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(m,"__esModule",{value:!0}),m.HeaderTransformer=void 0;const c=f(e("lodash.isundefined")),u=f(e("lodash.isfunction")),s=f(e("lodash.uniq")),t=f(e("lodash.groupby"));class n{constructor(i){this.headers=null,this.receivedHeaders=!1,this.shouldUseFirstRow=!1,this.processedFirstRow=!1,this.headersLength=0,this.parserOptions=i,i.headers===!0?this.shouldUseFirstRow=!0:Array.isArray(i.headers)?this.setHeaders(i.headers):u.default(i.headers)&&(this.headersTransform=i.headers)}transform(i,o){return this.shouldMapRow(i)?o(null,this.processRow(i)):o(null,{row:null,isValid:!0})}shouldMapRow(i){const{parserOptions:o}=this;if(!this.headersTransform&&o.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders)throw new Error("Error renaming headers: new headers must be provided in an array");return this.processedFirstRow=!0,!1}if(!this.receivedHeaders&&Array.isArray(i)){if(this.headersTransform)this.setHeaders(this.headersTransform(i));else if(this.shouldUseFirstRow)this.setHeaders(i);else return!0;return!1}return!0}processRow(i){if(!this.headers)return{row:i,isValid:!0};const{parserOptions:o}=this;if(!o.discardUnmappedColumns&&i.length>this.headersLength){if(!o.strictColumnHandling)throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${i.length}`);return{row:i,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${i.length}`}}return o.strictColumnHandling&&i.length!!a);if(s.default(l).length!==l.length){const a=t.default(l),g=Object.keys(a).filter(v=>a[v].length>1);throw new Error(`Duplicate headers found ${JSON.stringify(g)}`)}this.headers=i,this.receivedHeaders=!0,this.headersLength=((o=this.headers)===null||o===void 0?void 0:o.length)||0}}m.HeaderTransformer=n},{"lodash.groupby":443,"lodash.isfunction":446,"lodash.isundefined":448,"lodash.uniq":449}],167:[function(e,d,m){var f=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(m,"__esModule",{value:!0}),m.RowTransformerValidator=void 0;const c=f(e("lodash.isfunction")),u=e("../types");class s{constructor(){this._rowTransform=null,this._rowValidator=null}static createTransform(n){return u.isSyncTransform(n)?(r,i)=>{let o=null;try{o=n(r)}catch(l){return i(l)}return i(null,o)}:n}static createValidator(n){return u.isSyncValidate(n)?(r,i)=>{i(null,{row:r,isValid:n(r)})}:(r,i)=>{n(r,(o,l,a)=>o?i(o):l?i(null,{row:r,isValid:l,reason:a}):i(null,{row:r,isValid:!1,reason:a}))}}set rowTransform(n){if(!c.default(n))throw new TypeError("The transform should be a function");this._rowTransform=s.createTransform(n)}set rowValidator(n){if(!c.default(n))throw new TypeError("The validate should be a function");this._rowValidator=s.createValidator(n)}transformAndValidate(n,r){return this.callTransformer(n,(i,o)=>i?r(i):o?this.callValidator(o,(l,a)=>l?r(l):a&&!a.isValid?r(null,{row:o,isValid:!1,reason:a.reason}):r(null,{row:o,isValid:!0})):r(null,{row:null,isValid:!0}))}callTransformer(n,r){return this._rowTransform?this._rowTransform(n,r):r(null,n)}callValidator(n,r){return this._rowValidator?this._rowValidator(n,r):r(null,{row:n,isValid:!0})}}m.RowTransformerValidator=s},{"../types":169,"lodash.isfunction":446}],168:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.HeaderTransformer=m.RowTransformerValidator=void 0;var f=e("./RowTransformerValidator");Object.defineProperty(m,"RowTransformerValidator",{enumerable:!0,get:function(){return f.RowTransformerValidator}});var c=e("./HeaderTransformer");Object.defineProperty(m,"HeaderTransformer",{enumerable:!0,get:function(){return c.HeaderTransformer}})},{"./HeaderTransformer":166,"./RowTransformerValidator":167}],169:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.isSyncValidate=m.isSyncTransform=void 0,m.isSyncTransform=f=>f.length===1,m.isSyncValidate=f=>f.length===1},{}],170:[function(e,d,m){const f=m;f.bignum=e("bn.js"),f.define=e("./asn1/api").define,f.base=e("./asn1/base"),f.constants=e("./asn1/constants"),f.decoders=e("./asn1/decoders"),f.encoders=e("./asn1/encoders")},{"./asn1/api":171,"./asn1/base":173,"./asn1/constants":177,"./asn1/decoders":179,"./asn1/encoders":182,"bn.js":184}],171:[function(e,d,m){const f=e("./encoders"),c=e("./decoders"),u=e("inherits"),s=m;s.define=function(r,i){return new t(r,i)};function t(n,r){this.name=n,this.body=r,this.decoders={},this.encoders={}}t.prototype._createNamed=function(r){const i=this.name;function o(l){this._initNamed(l,i)}return u(o,r),o.prototype._initNamed=function(a,g){r.call(this,a,g)},new o(this)},t.prototype._getDecoder=function(r){return r=r||"der",this.decoders.hasOwnProperty(r)||(this.decoders[r]=this._createNamed(c[r])),this.decoders[r]},t.prototype.decode=function(r,i,o){return this._getDecoder(i).decode(r,o)},t.prototype._getEncoder=function(r){return r=r||"der",this.encoders.hasOwnProperty(r)||(this.encoders[r]=this._createNamed(f[r])),this.encoders[r]},t.prototype.encode=function(r,i,o){return this._getEncoder(i).encode(r,o)}},{"./decoders":179,"./encoders":182,inherits:440}],172:[function(e,d,m){const f=e("inherits"),c=e("../base/reporter").Reporter,u=e("safer-buffer").Buffer;function s(n,r){if(c.call(this,r),!u.isBuffer(n)){this.error("Input not Buffer");return}this.base=n,this.offset=0,this.length=n.length}f(s,c),m.DecoderBuffer=s,s.isDecoderBuffer=function(r){return r instanceof s?!0:typeof r=="object"&&u.isBuffer(r.base)&&r.constructor.name==="DecoderBuffer"&&typeof r.offset=="number"&&typeof r.length=="number"&&typeof r.save=="function"&&typeof r.restore=="function"&&typeof r.isEmpty=="function"&&typeof r.readUInt8=="function"&&typeof r.skip=="function"&&typeof r.raw=="function"},s.prototype.save=function(){return{offset:this.offset,reporter:c.prototype.save.call(this)}},s.prototype.restore=function(r){const i=new s(this.base);return i.offset=r.offset,i.length=this.offset,this.offset=r.offset,c.prototype.restore.call(this,r.reporter),i},s.prototype.isEmpty=function(){return this.offset===this.length},s.prototype.readUInt8=function(r){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(r||"DecoderBuffer overrun")},s.prototype.skip=function(r,i){if(!(this.offset+r<=this.length))return this.error(i||"DecoderBuffer overrun");const o=new s(this.base);return o._reporterState=this._reporterState,o.offset=this.offset,o.length=this.offset+r,this.offset+=r,o},s.prototype.raw=function(r){return this.base.slice(r?r.offset:this.offset,this.length)};function t(n,r){if(Array.isArray(n))this.length=0,this.value=n.map(function(i){return t.isEncoderBuffer(i)||(i=new t(i,r)),this.length+=i.length,i},this);else if(typeof n=="number"){if(!(0<=n&&n<=255))return r.error("non-byte EncoderBuffer value");this.value=n,this.length=1}else if(typeof n=="string")this.value=n,this.length=u.byteLength(n);else if(u.isBuffer(n))this.value=n,this.length=n.length;else return r.error("Unsupported type: "+typeof n)}m.EncoderBuffer=t,t.isEncoderBuffer=function(r){return r instanceof t?!0:typeof r=="object"&&r.constructor.name==="EncoderBuffer"&&typeof r.length=="number"&&typeof r.join=="function"},t.prototype.join=function(r,i){return r||(r=u.alloc(this.length)),i||(i=0),this.length===0||(Array.isArray(this.value)?this.value.forEach(function(o){o.join(r,i),i+=o.length}):(typeof this.value=="number"?r[i]=this.value:typeof this.value=="string"?r.write(this.value,i):u.isBuffer(this.value)&&this.value.copy(r,i),i+=this.length)),r}},{"../base/reporter":175,inherits:440,"safer-buffer":495}],173:[function(e,d,m){const f=m;f.Reporter=e("./reporter").Reporter,f.DecoderBuffer=e("./buffer").DecoderBuffer,f.EncoderBuffer=e("./buffer").EncoderBuffer,f.Node=e("./node")},{"./buffer":172,"./node":174,"./reporter":175}],174:[function(e,d,m){const f=e("../base/reporter").Reporter,c=e("../base/buffer").EncoderBuffer,u=e("../base/buffer").DecoderBuffer,s=e("minimalistic-assert"),t=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],n=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(t),r=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];function i(l,a,g){const v={};this._baseState=v,v.name=g,v.enc=l,v.parent=a||null,v.children=null,v.tag=null,v.args=null,v.reverseArgs=null,v.choice=null,v.optional=!1,v.any=!1,v.obj=!1,v.use=null,v.useDecoder=null,v.key=null,v.default=null,v.explicit=null,v.implicit=null,v.contains=null,v.parent||(v.children=[],this._wrap())}d.exports=i;const o=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];i.prototype.clone=function(){const a=this._baseState,g={};o.forEach(function(h){g[h]=a[h]});const v=new this.constructor(g.parent);return v._baseState=g,v},i.prototype._wrap=function(){const a=this._baseState;n.forEach(function(g){this[g]=function(){const h=new this.constructor(this);return a.children.push(h),h[g].apply(h,arguments)}},this)},i.prototype._init=function(a){const g=this._baseState;s(g.parent===null),a.call(this),g.children=g.children.filter(function(v){return v._baseState.parent===this},this),s.equal(g.children.length,1,"Root node can have only one child")},i.prototype._useArgs=function(a){const g=this._baseState,v=a.filter(function(h){return h instanceof this.constructor},this);a=a.filter(function(h){return!(h instanceof this.constructor)},this),v.length!==0&&(s(g.children===null),g.children=v,v.forEach(function(h){h._baseState.parent=this},this)),a.length!==0&&(s(g.args===null),g.args=a,g.reverseArgs=a.map(function(h){if(typeof h!="object"||h.constructor!==Object)return h;const w={};return Object.keys(h).forEach(function(y){y==(y|0)&&(y|=0);const S=h[y];w[S]=y}),w}))},r.forEach(function(l){i.prototype[l]=function(){const g=this._baseState;throw new Error(l+" not implemented for encoding: "+g.enc)}}),t.forEach(function(l){i.prototype[l]=function(){const g=this._baseState,v=Array.prototype.slice.call(arguments);return s(g.tag===null),g.tag=l,this._useArgs(v),this}}),i.prototype.use=function(a){s(a);const g=this._baseState;return s(g.use===null),g.use=a,this},i.prototype.optional=function(){const a=this._baseState;return a.optional=!0,this},i.prototype.def=function(a){const g=this._baseState;return s(g.default===null),g.default=a,g.optional=!0,this},i.prototype.explicit=function(a){const g=this._baseState;return s(g.explicit===null&&g.implicit===null),g.explicit=a,this},i.prototype.implicit=function(a){const g=this._baseState;return s(g.explicit===null&&g.implicit===null),g.implicit=a,this},i.prototype.obj=function(){const a=this._baseState,g=Array.prototype.slice.call(arguments);return a.obj=!0,g.length!==0&&this._useArgs(g),this},i.prototype.key=function(a){const g=this._baseState;return s(g.key===null),g.key=a,this},i.prototype.any=function(){const a=this._baseState;return a.any=!0,this},i.prototype.choice=function(a){const g=this._baseState;return s(g.choice===null),g.choice=a,this._useArgs(Object.keys(a).map(function(v){return a[v]})),this},i.prototype.contains=function(a){const g=this._baseState;return s(g.use===null),g.contains=a,this},i.prototype._decode=function(a,g){const v=this._baseState;if(v.parent===null)return a.wrapResult(v.children[0]._decode(a,g));let h=v.default,w=!0,y=null;if(v.key!==null&&(y=a.enterKey(v.key)),v.optional){let E=null;if(v.explicit!==null?E=v.explicit:v.implicit!==null?E=v.implicit:v.tag!==null&&(E=v.tag),E===null&&!v.any){const I=a.save();try{v.choice===null?this._decodeGeneric(v.tag,a,g):this._decodeChoice(a,g),w=!0}catch{w=!1}a.restore(I)}else if(w=this._peekTag(a,E,v.any),a.isError(w))return w}let S;if(v.obj&&w&&(S=a.enterObject()),w){if(v.explicit!==null){const I=this._decodeTag(a,v.explicit);if(a.isError(I))return I;a=I}const E=a.offset;if(v.use===null&&v.choice===null){let I;v.any&&(I=a.save());const F=this._decodeTag(a,v.implicit!==null?v.implicit:v.tag,v.any);if(a.isError(F))return F;v.any?h=a.raw(I):a=F}if(g&&g.track&&v.tag!==null&&g.track(a.path(),E,a.length,"tagged"),g&&g.track&&v.tag!==null&&g.track(a.path(),a.offset,a.length,"content"),v.any||(v.choice===null?h=this._decodeGeneric(v.tag,a,g):h=this._decodeChoice(a,g)),a.isError(h))return h;if(!v.any&&v.choice===null&&v.children!==null&&v.children.forEach(function(F){F._decode(a,g)}),v.contains&&(v.tag==="octstr"||v.tag==="bitstr")){const I=new u(h);h=this._getUse(v.contains,a._reporterState.obj)._decode(I,g)}}return v.obj&&w&&(h=a.leaveObject(S)),v.key!==null&&(h!==null||w===!0)?a.leaveKey(y,v.key,h):y!==null&&a.exitKey(y),h},i.prototype._decodeGeneric=function(a,g,v){const h=this._baseState;return a==="seq"||a==="set"?null:a==="seqof"||a==="setof"?this._decodeList(g,a,h.args[0],v):/str$/.test(a)?this._decodeStr(g,a,v):a==="objid"&&h.args?this._decodeObjid(g,h.args[0],h.args[1],v):a==="objid"?this._decodeObjid(g,null,null,v):a==="gentime"||a==="utctime"?this._decodeTime(g,a,v):a==="null_"?this._decodeNull(g,v):a==="bool"?this._decodeBool(g,v):a==="objDesc"?this._decodeStr(g,a,v):a==="int"||a==="enum"?this._decodeInt(g,h.args&&h.args[0],v):h.use!==null?this._getUse(h.use,g._reporterState.obj)._decode(g,v):g.error("unknown tag: "+a)},i.prototype._getUse=function(a,g){const v=this._baseState;return v.useDecoder=this._use(a,g),s(v.useDecoder._baseState.parent===null),v.useDecoder=v.useDecoder._baseState.children[0],v.implicit!==v.useDecoder._baseState.implicit&&(v.useDecoder=v.useDecoder.clone(),v.useDecoder._baseState.implicit=v.implicit),v.useDecoder},i.prototype._decodeChoice=function(a,g){const v=this._baseState;let h=null,w=!1;return Object.keys(v.choice).some(function(y){const S=a.save(),E=v.choice[y];try{const I=E._decode(a,g);if(a.isError(I))return!1;h={type:y,value:I},w=!0}catch{return a.restore(S),!1}return!0},this),w?h:a.error("Choice not matched")},i.prototype._createEncoderBuffer=function(a){return new c(a,this.reporter)},i.prototype._encode=function(a,g,v){const h=this._baseState;if(h.default!==null&&h.default===a)return;const w=this._encodeValue(a,g,v);if(w!==void 0&&!this._skipDefault(w,g,v))return w},i.prototype._encodeValue=function(a,g,v){const h=this._baseState;if(h.parent===null)return h.children[0]._encode(a,g||new f);let w=null;if(this.reporter=g,h.optional&&a===void 0)if(h.default!==null)a=h.default;else return;let y=null,S=!1;if(h.any)w=this._createEncoderBuffer(a);else if(h.choice)w=this._encodeChoice(a,g);else if(h.contains)y=this._getUse(h.contains,v)._encode(a,g),S=!0;else if(h.children)y=h.children.map(function(E){if(E._baseState.tag==="null_")return E._encode(null,g,a);if(E._baseState.key===null)return g.error("Child should have a key");const I=g.enterKey(E._baseState.key);if(typeof a!="object")return g.error("Child expected, but input is not object");const F=E._encode(a[E._baseState.key],g,a);return g.leaveKey(I),F},this).filter(function(E){return E}),y=this._createEncoderBuffer(y);else if(h.tag==="seqof"||h.tag==="setof"){if(!(h.args&&h.args.length===1))return g.error("Too many args for : "+h.tag);if(!Array.isArray(a))return g.error("seqof/setof, but data is not Array");const E=this.clone();E._baseState.implicit=null,y=this._createEncoderBuffer(a.map(function(I){const F=this._baseState;return this._getUse(F.args[0],a)._encode(I,g)},E))}else h.use!==null?w=this._getUse(h.use,v)._encode(a,g):(y=this._encodePrimitive(h.tag,a),S=!0);if(!h.any&&h.choice===null){const E=h.implicit!==null?h.implicit:h.tag,I=h.implicit===null?"universal":"context";E===null?h.use===null&&g.error("Tag could be omitted only for .use()"):h.use===null&&(w=this._encodeComposite(E,S,I,y))}return h.explicit!==null&&(w=this._encodeComposite(h.explicit,!1,"context",w)),w},i.prototype._encodeChoice=function(a,g){const v=this._baseState,h=v.choice[a.type];return h||s(!1,a.type+" not found in "+JSON.stringify(Object.keys(v.choice))),h._encode(a.value,g)},i.prototype._encodePrimitive=function(a,g){const v=this._baseState;if(/str$/.test(a))return this._encodeStr(g,a);if(a==="objid"&&v.args)return this._encodeObjid(g,v.reverseArgs[0],v.args[1]);if(a==="objid")return this._encodeObjid(g,null,null);if(a==="gentime"||a==="utctime")return this._encodeTime(g,a);if(a==="null_")return this._encodeNull();if(a==="int"||a==="enum")return this._encodeInt(g,v.args&&v.reverseArgs[0]);if(a==="bool")return this._encodeBool(g);if(a==="objDesc")return this._encodeStr(g,a);throw new Error("Unsupported tag: "+a)},i.prototype._isNumstr=function(a){return/^[0-9 ]*$/.test(a)},i.prototype._isPrintstr=function(a){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(a)}},{"../base/buffer":172,"../base/reporter":175,"minimalistic-assert":453}],175:[function(e,d,m){const f=e("inherits");function c(s){this._reporterState={obj:null,path:[],options:s||{},errors:[]}}m.Reporter=c,c.prototype.isError=function(t){return t instanceof u},c.prototype.save=function(){const t=this._reporterState;return{obj:t.obj,pathLen:t.path.length}},c.prototype.restore=function(t){const n=this._reporterState;n.obj=t.obj,n.path=n.path.slice(0,t.pathLen)},c.prototype.enterKey=function(t){return this._reporterState.path.push(t)},c.prototype.exitKey=function(t){const n=this._reporterState;n.path=n.path.slice(0,t-1)},c.prototype.leaveKey=function(t,n,r){const i=this._reporterState;this.exitKey(t),i.obj!==null&&(i.obj[n]=r)},c.prototype.path=function(){return this._reporterState.path.join("/")},c.prototype.enterObject=function(){const t=this._reporterState,n=t.obj;return t.obj={},n},c.prototype.leaveObject=function(t){const n=this._reporterState,r=n.obj;return n.obj=t,r},c.prototype.error=function(t){let n;const r=this._reporterState,i=t instanceof u;if(i?n=t:n=new u(r.path.map(function(o){return"["+JSON.stringify(o)+"]"}).join(""),t.message||t,t.stack),!r.options.partial)throw n;return i||r.errors.push(n),n},c.prototype.wrapResult=function(t){const n=this._reporterState;return n.options.partial?{result:this.isError(t)?null:t,errors:n.errors}:t};function u(s,t){this.path=s,this.rethrow(t)}f(u,Error),u.prototype.rethrow=function(t){if(this.message=t+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,u),!this.stack)try{throw new Error(this.message)}catch(n){this.stack=n.stack}return this}},{inherits:440}],176:[function(e,d,m){function f(c){const u={};return Object.keys(c).forEach(function(s){(s|0)==s&&(s=s|0);const t=c[s];u[t]=s}),u}m.tagClass={0:"universal",1:"application",2:"context",3:"private"},m.tagClassByName=f(m.tagClass),m.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},m.tagByName=f(m.tag)},{}],177:[function(e,d,m){const f=m;f._reverse=function(u){const s={};return Object.keys(u).forEach(function(t){(t|0)==t&&(t=t|0);const n=u[t];s[n]=t}),s},f.der=e("./der")},{"./der":176}],178:[function(e,d,m){const f=e("inherits"),c=e("bn.js"),u=e("../base/buffer").DecoderBuffer,s=e("../base/node"),t=e("../constants/der");function n(l){this.enc="der",this.name=l.name,this.entity=l,this.tree=new r,this.tree._init(l.body)}d.exports=n,n.prototype.decode=function(a,g){return u.isDecoderBuffer(a)||(a=new u(a,g)),this.tree._decode(a,g)};function r(l){s.call(this,"der",l)}f(r,s),r.prototype._peekTag=function(a,g,v){if(a.isEmpty())return!1;const h=a.save(),w=i(a,'Failed to peek tag: "'+g+'"');return a.isError(w)?w:(a.restore(h),w.tag===g||w.tagStr===g||w.tagStr+"of"===g||v)},r.prototype._decodeTag=function(a,g,v){const h=i(a,'Failed to decode tag of "'+g+'"');if(a.isError(h))return h;let w=o(a,h.primitive,'Failed to get length of "'+g+'"');if(a.isError(w))return w;if(!v&&h.tag!==g&&h.tagStr!==g&&h.tagStr+"of"!==g)return a.error('Failed to match tag: "'+g+'"');if(h.primitive||w!==null)return a.skip(w,'Failed to match body of: "'+g+'"');const y=a.save(),S=this._skipUntilEnd(a,'Failed to skip indefinite length body: "'+this.tag+'"');return a.isError(S)?S:(w=a.offset-y.offset,a.restore(y),a.skip(w,'Failed to match body of: "'+g+'"'))},r.prototype._skipUntilEnd=function(a,g){for(;;){const v=i(a,g);if(a.isError(v))return v;const h=o(a,v.primitive,g);if(a.isError(h))return h;let w;if(v.primitive||h!==null?w=a.skip(h):w=this._skipUntilEnd(a,g),a.isError(w))return w;if(v.tagStr==="end")break}},r.prototype._decodeList=function(a,g,v,h){const w=[];for(;!a.isEmpty();){const y=this._peekTag(a,"end");if(a.isError(y))return y;const S=v.decode(a,"der",h);if(a.isError(S)&&y)break;w.push(S)}return w},r.prototype._decodeStr=function(a,g){if(g==="bitstr"){const v=a.readUInt8();return a.isError(v)?v:{unused:v,data:a.raw()}}else if(g==="bmpstr"){const v=a.raw();if(v.length%2===1)return a.error("Decoding of string type: bmpstr length mismatch");let h="";for(let w=0;w>6],h=(g&32)===0;if((g&31)===31){let y=g;for(g=0;(y&128)===128;){if(y=l.readUInt8(a),l.isError(y))return y;g<<=7,g|=y&127}}else g&=31;const w=t.tag[g];return{cls:v,primitive:h,tag:g,tagStr:w}}function o(l,a,g){let v=l.readUInt8(g);if(l.isError(v))return v;if(!a&&v===128)return null;if(!(v&128))return v;const h=v&127;if(h>4)return l.error("length octect is too long");v=0;for(let w=0;w=256;S>>=8)w++;const y=c.alloc(1+1+w);y[0]=h,y[1]=128|w;for(let S=1+w,E=v.length;E>0;S--,E>>=8)y[S]=E&255;return this._createEncoderBuffer([y,v])},n.prototype._encodeStr=function(l,a){if(a==="bitstr")return this._createEncoderBuffer([l.unused|0,l.data]);if(a==="bmpstr"){const g=c.alloc(l.length*2);for(let v=0;v=40)return this.reporter.error("Second objid identifier OOB");l.splice(0,2,l[0]*40+l[1])}let v=0;for(let y=0;y=128;S>>=7)v++}const h=c.alloc(v);let w=h.length-1;for(let y=l.length-1;y>=0;y--){let S=l[y];for(h[w--]=S&127;(S>>=7)>0;)h[w--]=128|S&127}return this._createEncoderBuffer(h)};function r(o){return o<10?"0"+o:o}n.prototype._encodeTime=function(l,a){let g;const v=new Date(l);return a==="gentime"?g=[r(v.getUTCFullYear()),r(v.getUTCMonth()+1),r(v.getUTCDate()),r(v.getUTCHours()),r(v.getUTCMinutes()),r(v.getUTCSeconds()),"Z"].join(""):a==="utctime"?g=[r(v.getUTCFullYear()%100),r(v.getUTCMonth()+1),r(v.getUTCDate()),r(v.getUTCHours()),r(v.getUTCMinutes()),r(v.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+a+" time is not supported yet"),this._encodeStr(g,"octstr")},n.prototype._encodeNull=function(){return this._createEncoderBuffer("")},n.prototype._encodeInt=function(l,a){if(typeof l=="string"){if(!a)return this.reporter.error("String int or enum given, but no values map");if(!a.hasOwnProperty(l))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(l));l=a[l]}if(typeof l!="number"&&!c.isBuffer(l)){const h=l.toArray();!l.sign&&h[0]&128&&h.unshift(0),l=c.from(h)}if(c.isBuffer(l)){let h=l.length;l.length===0&&h++;const w=c.alloc(h);return l.copy(w),l.length===0&&(w[0]=0),this._createEncoderBuffer(w)}if(l<128)return this._createEncoderBuffer(l);if(l<256)return this._createEncoderBuffer([0,l]);let g=1;for(let h=l;h>=256;h>>=8)g++;const v=new Array(g);for(let h=v.length-1;h>=0;h--)v[h]=l&255,l>>=8;return v[0]&128&&v.unshift(0),this._createEncoderBuffer(c.from(v))},n.prototype._encodeBool=function(l){return this._createEncoderBuffer(l?255:0)},n.prototype._use=function(l,a){return typeof l=="function"&&(l=l(a)),l._getEncoder("der").tree},n.prototype._skipDefault=function(l,a,g){const v=this._baseState;let h;if(v.default===null)return!1;const w=l.join();if(v.defaultBuffer===void 0&&(v.defaultBuffer=this._encodeValue(v.default,a,g).join()),w.length!==v.defaultBuffer.length)return!1;for(h=0;h=31?g.error("Multi-octet tag encoding unsupported"):(l||(v|=32),v|=s.tagClassByName[a||"universal"]<<6,v)}},{"../base/node":174,"../constants/der":176,inherits:440,"safer-buffer":495}],182:[function(e,d,m){const f=m;f.der=e("./der"),f.pem=e("./pem")},{"./der":181,"./pem":183}],183:[function(e,d,m){const f=e("inherits"),c=e("./der");function u(s){c.call(this,s),this.enc="pem"}f(u,c),d.exports=u,u.prototype.encode=function(t,n){const i=c.prototype.encode.call(this,t).toString("base64"),o=["-----BEGIN "+n.label+"-----"];for(let l=0;l0?M:T},t.min=function(M,T){return M.cmp(T)<0?M:T},t.prototype._init=function(M,T,_){if(typeof M=="number")return this._initNumber(M,T,_);if(typeof M=="object")return this._initArray(M,T,_);T==="hex"&&(T=16),u(T===(T|0)&&T>=2&&T<=36),M=M.toString().replace(/\s+/g,"");var A=0;M[0]==="-"&&(A++,this.negative=1),A=0;A-=3)L=M[A]|M[A-1]<<8|M[A-2]<<16,this.words[P]|=L<<$&67108863,this.words[P+1]=L>>>26-$&67108863,$+=24,$>=26&&($-=26,P++);else if(_==="le")for(A=0,P=0;A>>26-$&67108863,$+=24,$>=26&&($-=26,P++);return this.strip()};function r(H,M){var T=H.charCodeAt(M);return T>=65&&T<=70?T-55:T>=97&&T<=102?T-87:T-48&15}function i(H,M,T){var _=r(H,T);return T-1>=M&&(_|=r(H,T-1)<<4),_}t.prototype._parseHex=function(M,T,_){this.length=Math.ceil((M.length-T)/6),this.words=new Array(this.length);for(var A=0;A=T;A-=2)$=i(M,T,A)<=18?(P-=18,L+=1,this.words[L]|=$>>>26):P+=8;else{var R=M.length-T;for(A=R%2===0?T+1:T;A=18?(P-=18,L+=1,this.words[L]|=$>>>26):P+=8}this.strip()};function o(H,M,T,_){for(var A=0,P=Math.min(H.length,T),L=M;L=49?A+=$-49+10:$>=17?A+=$-17+10:A+=$}return A}t.prototype._parseBase=function(M,T,_){this.words=[0],this.length=1;for(var A=0,P=1;P<=67108863;P*=T)A++;A--,P=P/T|0;for(var L=M.length-_,$=L%A,R=Math.min(L,L-$)+_,k=0,C=_;C1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},t.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},t.prototype.inspect=function(){return(this.red?""};var l=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],a=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],g=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];t.prototype.toString=function(M,T){M=M||10,T=T|0||1;var _;if(M===16||M==="hex"){_="";for(var A=0,P=0,L=0;L>>24-A&16777215,P!==0||L!==this.length-1?_=l[6-R.length]+R+_:_=R+_,A+=2,A>=26&&(A-=26,L--)}for(P!==0&&(_=P.toString(16)+_);_.length%T!==0;)_="0"+_;return this.negative!==0&&(_="-"+_),_}if(M===(M|0)&&M>=2&&M<=36){var k=a[M],C=g[M];_="";var O=this.clone();for(O.negative=0;!O.isZero();){var W=O.modn(C).toString(M);O=O.idivn(C),O.isZero()?_=W+_:_=l[k-W.length]+W+_}for(this.isZero()&&(_="0"+_);_.length%T!==0;)_="0"+_;return this.negative!==0&&(_="-"+_),_}u(!1,"Base should be between 2 and 36")},t.prototype.toNumber=function(){var M=this.words[0];return this.length===2?M+=this.words[1]*67108864:this.length===3&&this.words[2]===1?M+=4503599627370496+this.words[1]*67108864:this.length>2&&u(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-M:M},t.prototype.toJSON=function(){return this.toString(16)},t.prototype.toBuffer=function(M,T){return u(typeof n<"u"),this.toArrayLike(n,M,T)},t.prototype.toArray=function(M,T){return this.toArrayLike(Array,M,T)},t.prototype.toArrayLike=function(M,T,_){var A=this.byteLength(),P=_||Math.max(1,A);u(A<=P,"byte array longer than desired length"),u(P>0,"Requested array length <= 0"),this.strip();var L=T==="le",$=new M(P),R,k,C=this.clone();if(L){for(k=0;!C.isZero();k++)R=C.andln(255),C.iushrn(8),$[k]=R;for(;k=4096&&(_+=13,T>>>=13),T>=64&&(_+=7,T>>>=7),T>=8&&(_+=4,T>>>=4),T>=2&&(_+=2,T>>>=2),_+T},t.prototype._zeroBits=function(M){if(M===0)return 26;var T=M,_=0;return T&8191||(_+=13,T>>>=13),T&127||(_+=7,T>>>=7),T&15||(_+=4,T>>>=4),T&3||(_+=2,T>>>=2),T&1||_++,_},t.prototype.bitLength=function(){var M=this.words[this.length-1],T=this._countBits(M);return(this.length-1)*26+T};function v(H){for(var M=new Array(H.bitLength()),T=0;T>>A}return M}t.prototype.zeroBits=function(){if(this.isZero())return 0;for(var M=0,T=0;TM.length?this.clone().ior(M):M.clone().ior(this)},t.prototype.uor=function(M){return this.length>M.length?this.clone().iuor(M):M.clone().iuor(this)},t.prototype.iuand=function(M){var T;this.length>M.length?T=M:T=this;for(var _=0;_M.length?this.clone().iand(M):M.clone().iand(this)},t.prototype.uand=function(M){return this.length>M.length?this.clone().iuand(M):M.clone().iuand(this)},t.prototype.iuxor=function(M){var T,_;this.length>M.length?(T=this,_=M):(T=M,_=this);for(var A=0;A<_.length;A++)this.words[A]=T.words[A]^_.words[A];if(this!==T)for(;AM.length?this.clone().ixor(M):M.clone().ixor(this)},t.prototype.uxor=function(M){return this.length>M.length?this.clone().iuxor(M):M.clone().iuxor(this)},t.prototype.inotn=function(M){u(typeof M=="number"&&M>=0);var T=Math.ceil(M/26)|0,_=M%26;this._expand(T),_>0&&T--;for(var A=0;A0&&(this.words[A]=~this.words[A]&67108863>>26-_),this.strip()},t.prototype.notn=function(M){return this.clone().inotn(M)},t.prototype.setn=function(M,T){u(typeof M=="number"&&M>=0);var _=M/26|0,A=M%26;return this._expand(_+1),T?this.words[_]=this.words[_]|1<M.length?(_=this,A=M):(_=M,A=this);for(var P=0,L=0;L>>26;for(;P!==0&&L<_.length;L++)T=(_.words[L]|0)+P,this.words[L]=T&67108863,P=T>>>26;if(this.length=_.length,P!==0)this.words[this.length]=P,this.length++;else if(_!==this)for(;L<_.length;L++)this.words[L]=_.words[L];return this},t.prototype.add=function(M){var T;return M.negative!==0&&this.negative===0?(M.negative=0,T=this.sub(M),M.negative^=1,T):M.negative===0&&this.negative!==0?(this.negative=0,T=M.sub(this),this.negative=1,T):this.length>M.length?this.clone().iadd(M):M.clone().iadd(this)},t.prototype.isub=function(M){if(M.negative!==0){M.negative=0;var T=this.iadd(M);return M.negative=1,T._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(M),this.negative=1,this._normSign();var _=this.cmp(M);if(_===0)return this.negative=0,this.length=1,this.words[0]=0,this;var A,P;_>0?(A=this,P=M):(A=M,P=this);for(var L=0,$=0;$>26,this.words[$]=T&67108863;for(;L!==0&&$>26,this.words[$]=T&67108863;if(L===0&&$>>26,O=R&67108863,W=Math.min(k,M.length-1),ne=Math.max(0,k-H.length+1);ne<=W;ne++){var he=k-ne|0;A=H.words[he]|0,P=M.words[ne]|0,L=A*P+O,C+=L/67108864|0,O=L&67108863}T.words[k]=O|0,R=C|0}return R!==0?T.words[k]=R|0:T.length--,T.strip()}var w=function(M,T,_){var A=M.words,P=T.words,L=_.words,$=0,R,k,C,O=A[0]|0,W=O&8191,ne=O>>>13,he=A[1]|0,ue=he&8191,Ae=he>>>13,pe=A[2]|0,te=pe&8191,Z=pe>>>13,q=A[3]|0,de=q&8191,ke=q>>>13,oe=A[4]|0,ie=oe&8191,Q=oe>>>13,z=A[5]|0,Y=z&8191,fe=z>>>13,we=A[6]|0,U=we&8191,ve=we>>>13,Se=A[7]|0,ee=Se&8191,se=Se>>>13,me=A[8]|0,Ee=me&8191,Ie=me>>>13,Ce=A[9]|0,Fe=Ce&8191,ze=Ce>>>13,je=P[0]|0,ge=je&8191,Me=je>>>13,Be=P[1]|0,Xe=Be&8191,ot=Be>>>13,ct=P[2]|0,st=ct&8191,rt=ct>>>13,bt=P[3]|0,Qe=bt&8191,et=bt>>>13,_t=P[4]|0,ft=_t&8191,jt=_t>>>13,It=P[5]|0,ht=It&8191,Dt=It>>>13,Ut=P[6]|0,wt=Ut&8191,er=Ut>>>13,Kt=P[7]|0,pt=Kt&8191,Gt=Kt>>>13,kt=P[8]|0,xt=kt&8191,$t=kt>>>13,Qt=P[9]|0,mt=Qt&8191,qt=Qt>>>13;_.negative=M.negative^T.negative,_.length=19,R=Math.imul(W,ge),k=Math.imul(W,Me),k=k+Math.imul(ne,ge)|0,C=Math.imul(ne,Me);var St=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(St>>>26)|0,St&=67108863,R=Math.imul(ue,ge),k=Math.imul(ue,Me),k=k+Math.imul(Ae,ge)|0,C=Math.imul(Ae,Me),R=R+Math.imul(W,Xe)|0,k=k+Math.imul(W,ot)|0,k=k+Math.imul(ne,Xe)|0,C=C+Math.imul(ne,ot)|0;var Tt=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,R=Math.imul(te,ge),k=Math.imul(te,Me),k=k+Math.imul(Z,ge)|0,C=Math.imul(Z,Me),R=R+Math.imul(ue,Xe)|0,k=k+Math.imul(ue,ot)|0,k=k+Math.imul(Ae,Xe)|0,C=C+Math.imul(Ae,ot)|0,R=R+Math.imul(W,st)|0,k=k+Math.imul(W,rt)|0,k=k+Math.imul(ne,st)|0,C=C+Math.imul(ne,rt)|0;var be=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(be>>>26)|0,be&=67108863,R=Math.imul(de,ge),k=Math.imul(de,Me),k=k+Math.imul(ke,ge)|0,C=Math.imul(ke,Me),R=R+Math.imul(te,Xe)|0,k=k+Math.imul(te,ot)|0,k=k+Math.imul(Z,Xe)|0,C=C+Math.imul(Z,ot)|0,R=R+Math.imul(ue,st)|0,k=k+Math.imul(ue,rt)|0,k=k+Math.imul(Ae,st)|0,C=C+Math.imul(Ae,rt)|0,R=R+Math.imul(W,Qe)|0,k=k+Math.imul(W,et)|0,k=k+Math.imul(ne,Qe)|0,C=C+Math.imul(ne,et)|0;var Ne=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,R=Math.imul(ie,ge),k=Math.imul(ie,Me),k=k+Math.imul(Q,ge)|0,C=Math.imul(Q,Me),R=R+Math.imul(de,Xe)|0,k=k+Math.imul(de,ot)|0,k=k+Math.imul(ke,Xe)|0,C=C+Math.imul(ke,ot)|0,R=R+Math.imul(te,st)|0,k=k+Math.imul(te,rt)|0,k=k+Math.imul(Z,st)|0,C=C+Math.imul(Z,rt)|0,R=R+Math.imul(ue,Qe)|0,k=k+Math.imul(ue,et)|0,k=k+Math.imul(Ae,Qe)|0,C=C+Math.imul(Ae,et)|0,R=R+Math.imul(W,ft)|0,k=k+Math.imul(W,jt)|0,k=k+Math.imul(ne,ft)|0,C=C+Math.imul(ne,jt)|0;var Le=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Le>>>26)|0,Le&=67108863,R=Math.imul(Y,ge),k=Math.imul(Y,Me),k=k+Math.imul(fe,ge)|0,C=Math.imul(fe,Me),R=R+Math.imul(ie,Xe)|0,k=k+Math.imul(ie,ot)|0,k=k+Math.imul(Q,Xe)|0,C=C+Math.imul(Q,ot)|0,R=R+Math.imul(de,st)|0,k=k+Math.imul(de,rt)|0,k=k+Math.imul(ke,st)|0,C=C+Math.imul(ke,rt)|0,R=R+Math.imul(te,Qe)|0,k=k+Math.imul(te,et)|0,k=k+Math.imul(Z,Qe)|0,C=C+Math.imul(Z,et)|0,R=R+Math.imul(ue,ft)|0,k=k+Math.imul(ue,jt)|0,k=k+Math.imul(Ae,ft)|0,C=C+Math.imul(Ae,jt)|0,R=R+Math.imul(W,ht)|0,k=k+Math.imul(W,Dt)|0,k=k+Math.imul(ne,ht)|0,C=C+Math.imul(ne,Dt)|0;var Je=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Je>>>26)|0,Je&=67108863,R=Math.imul(U,ge),k=Math.imul(U,Me),k=k+Math.imul(ve,ge)|0,C=Math.imul(ve,Me),R=R+Math.imul(Y,Xe)|0,k=k+Math.imul(Y,ot)|0,k=k+Math.imul(fe,Xe)|0,C=C+Math.imul(fe,ot)|0,R=R+Math.imul(ie,st)|0,k=k+Math.imul(ie,rt)|0,k=k+Math.imul(Q,st)|0,C=C+Math.imul(Q,rt)|0,R=R+Math.imul(de,Qe)|0,k=k+Math.imul(de,et)|0,k=k+Math.imul(ke,Qe)|0,C=C+Math.imul(ke,et)|0,R=R+Math.imul(te,ft)|0,k=k+Math.imul(te,jt)|0,k=k+Math.imul(Z,ft)|0,C=C+Math.imul(Z,jt)|0,R=R+Math.imul(ue,ht)|0,k=k+Math.imul(ue,Dt)|0,k=k+Math.imul(Ae,ht)|0,C=C+Math.imul(Ae,Dt)|0,R=R+Math.imul(W,wt)|0,k=k+Math.imul(W,er)|0,k=k+Math.imul(ne,wt)|0,C=C+Math.imul(ne,er)|0;var at=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(at>>>26)|0,at&=67108863,R=Math.imul(ee,ge),k=Math.imul(ee,Me),k=k+Math.imul(se,ge)|0,C=Math.imul(se,Me),R=R+Math.imul(U,Xe)|0,k=k+Math.imul(U,ot)|0,k=k+Math.imul(ve,Xe)|0,C=C+Math.imul(ve,ot)|0,R=R+Math.imul(Y,st)|0,k=k+Math.imul(Y,rt)|0,k=k+Math.imul(fe,st)|0,C=C+Math.imul(fe,rt)|0,R=R+Math.imul(ie,Qe)|0,k=k+Math.imul(ie,et)|0,k=k+Math.imul(Q,Qe)|0,C=C+Math.imul(Q,et)|0,R=R+Math.imul(de,ft)|0,k=k+Math.imul(de,jt)|0,k=k+Math.imul(ke,ft)|0,C=C+Math.imul(ke,jt)|0,R=R+Math.imul(te,ht)|0,k=k+Math.imul(te,Dt)|0,k=k+Math.imul(Z,ht)|0,C=C+Math.imul(Z,Dt)|0,R=R+Math.imul(ue,wt)|0,k=k+Math.imul(ue,er)|0,k=k+Math.imul(Ae,wt)|0,C=C+Math.imul(Ae,er)|0,R=R+Math.imul(W,pt)|0,k=k+Math.imul(W,Gt)|0,k=k+Math.imul(ne,pt)|0,C=C+Math.imul(ne,Gt)|0;var Mt=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,R=Math.imul(Ee,ge),k=Math.imul(Ee,Me),k=k+Math.imul(Ie,ge)|0,C=Math.imul(Ie,Me),R=R+Math.imul(ee,Xe)|0,k=k+Math.imul(ee,ot)|0,k=k+Math.imul(se,Xe)|0,C=C+Math.imul(se,ot)|0,R=R+Math.imul(U,st)|0,k=k+Math.imul(U,rt)|0,k=k+Math.imul(ve,st)|0,C=C+Math.imul(ve,rt)|0,R=R+Math.imul(Y,Qe)|0,k=k+Math.imul(Y,et)|0,k=k+Math.imul(fe,Qe)|0,C=C+Math.imul(fe,et)|0,R=R+Math.imul(ie,ft)|0,k=k+Math.imul(ie,jt)|0,k=k+Math.imul(Q,ft)|0,C=C+Math.imul(Q,jt)|0,R=R+Math.imul(de,ht)|0,k=k+Math.imul(de,Dt)|0,k=k+Math.imul(ke,ht)|0,C=C+Math.imul(ke,Dt)|0,R=R+Math.imul(te,wt)|0,k=k+Math.imul(te,er)|0,k=k+Math.imul(Z,wt)|0,C=C+Math.imul(Z,er)|0,R=R+Math.imul(ue,pt)|0,k=k+Math.imul(ue,Gt)|0,k=k+Math.imul(Ae,pt)|0,C=C+Math.imul(Ae,Gt)|0,R=R+Math.imul(W,xt)|0,k=k+Math.imul(W,$t)|0,k=k+Math.imul(ne,xt)|0,C=C+Math.imul(ne,$t)|0;var rr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(rr>>>26)|0,rr&=67108863,R=Math.imul(Fe,ge),k=Math.imul(Fe,Me),k=k+Math.imul(ze,ge)|0,C=Math.imul(ze,Me),R=R+Math.imul(Ee,Xe)|0,k=k+Math.imul(Ee,ot)|0,k=k+Math.imul(Ie,Xe)|0,C=C+Math.imul(Ie,ot)|0,R=R+Math.imul(ee,st)|0,k=k+Math.imul(ee,rt)|0,k=k+Math.imul(se,st)|0,C=C+Math.imul(se,rt)|0,R=R+Math.imul(U,Qe)|0,k=k+Math.imul(U,et)|0,k=k+Math.imul(ve,Qe)|0,C=C+Math.imul(ve,et)|0,R=R+Math.imul(Y,ft)|0,k=k+Math.imul(Y,jt)|0,k=k+Math.imul(fe,ft)|0,C=C+Math.imul(fe,jt)|0,R=R+Math.imul(ie,ht)|0,k=k+Math.imul(ie,Dt)|0,k=k+Math.imul(Q,ht)|0,C=C+Math.imul(Q,Dt)|0,R=R+Math.imul(de,wt)|0,k=k+Math.imul(de,er)|0,k=k+Math.imul(ke,wt)|0,C=C+Math.imul(ke,er)|0,R=R+Math.imul(te,pt)|0,k=k+Math.imul(te,Gt)|0,k=k+Math.imul(Z,pt)|0,C=C+Math.imul(Z,Gt)|0,R=R+Math.imul(ue,xt)|0,k=k+Math.imul(ue,$t)|0,k=k+Math.imul(Ae,xt)|0,C=C+Math.imul(Ae,$t)|0,R=R+Math.imul(W,mt)|0,k=k+Math.imul(W,qt)|0,k=k+Math.imul(ne,mt)|0,C=C+Math.imul(ne,qt)|0;var vr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(vr>>>26)|0,vr&=67108863,R=Math.imul(Fe,Xe),k=Math.imul(Fe,ot),k=k+Math.imul(ze,Xe)|0,C=Math.imul(ze,ot),R=R+Math.imul(Ee,st)|0,k=k+Math.imul(Ee,rt)|0,k=k+Math.imul(Ie,st)|0,C=C+Math.imul(Ie,rt)|0,R=R+Math.imul(ee,Qe)|0,k=k+Math.imul(ee,et)|0,k=k+Math.imul(se,Qe)|0,C=C+Math.imul(se,et)|0,R=R+Math.imul(U,ft)|0,k=k+Math.imul(U,jt)|0,k=k+Math.imul(ve,ft)|0,C=C+Math.imul(ve,jt)|0,R=R+Math.imul(Y,ht)|0,k=k+Math.imul(Y,Dt)|0,k=k+Math.imul(fe,ht)|0,C=C+Math.imul(fe,Dt)|0,R=R+Math.imul(ie,wt)|0,k=k+Math.imul(ie,er)|0,k=k+Math.imul(Q,wt)|0,C=C+Math.imul(Q,er)|0,R=R+Math.imul(de,pt)|0,k=k+Math.imul(de,Gt)|0,k=k+Math.imul(ke,pt)|0,C=C+Math.imul(ke,Gt)|0,R=R+Math.imul(te,xt)|0,k=k+Math.imul(te,$t)|0,k=k+Math.imul(Z,xt)|0,C=C+Math.imul(Z,$t)|0,R=R+Math.imul(ue,mt)|0,k=k+Math.imul(ue,qt)|0,k=k+Math.imul(Ae,mt)|0,C=C+Math.imul(Ae,qt)|0;var Dr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,R=Math.imul(Fe,st),k=Math.imul(Fe,rt),k=k+Math.imul(ze,st)|0,C=Math.imul(ze,rt),R=R+Math.imul(Ee,Qe)|0,k=k+Math.imul(Ee,et)|0,k=k+Math.imul(Ie,Qe)|0,C=C+Math.imul(Ie,et)|0,R=R+Math.imul(ee,ft)|0,k=k+Math.imul(ee,jt)|0,k=k+Math.imul(se,ft)|0,C=C+Math.imul(se,jt)|0,R=R+Math.imul(U,ht)|0,k=k+Math.imul(U,Dt)|0,k=k+Math.imul(ve,ht)|0,C=C+Math.imul(ve,Dt)|0,R=R+Math.imul(Y,wt)|0,k=k+Math.imul(Y,er)|0,k=k+Math.imul(fe,wt)|0,C=C+Math.imul(fe,er)|0,R=R+Math.imul(ie,pt)|0,k=k+Math.imul(ie,Gt)|0,k=k+Math.imul(Q,pt)|0,C=C+Math.imul(Q,Gt)|0,R=R+Math.imul(de,xt)|0,k=k+Math.imul(de,$t)|0,k=k+Math.imul(ke,xt)|0,C=C+Math.imul(ke,$t)|0,R=R+Math.imul(te,mt)|0,k=k+Math.imul(te,qt)|0,k=k+Math.imul(Z,mt)|0,C=C+Math.imul(Z,qt)|0;var yr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(yr>>>26)|0,yr&=67108863,R=Math.imul(Fe,Qe),k=Math.imul(Fe,et),k=k+Math.imul(ze,Qe)|0,C=Math.imul(ze,et),R=R+Math.imul(Ee,ft)|0,k=k+Math.imul(Ee,jt)|0,k=k+Math.imul(Ie,ft)|0,C=C+Math.imul(Ie,jt)|0,R=R+Math.imul(ee,ht)|0,k=k+Math.imul(ee,Dt)|0,k=k+Math.imul(se,ht)|0,C=C+Math.imul(se,Dt)|0,R=R+Math.imul(U,wt)|0,k=k+Math.imul(U,er)|0,k=k+Math.imul(ve,wt)|0,C=C+Math.imul(ve,er)|0,R=R+Math.imul(Y,pt)|0,k=k+Math.imul(Y,Gt)|0,k=k+Math.imul(fe,pt)|0,C=C+Math.imul(fe,Gt)|0,R=R+Math.imul(ie,xt)|0,k=k+Math.imul(ie,$t)|0,k=k+Math.imul(Q,xt)|0,C=C+Math.imul(Q,$t)|0,R=R+Math.imul(de,mt)|0,k=k+Math.imul(de,qt)|0,k=k+Math.imul(ke,mt)|0,C=C+Math.imul(ke,qt)|0;var lr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(lr>>>26)|0,lr&=67108863,R=Math.imul(Fe,ft),k=Math.imul(Fe,jt),k=k+Math.imul(ze,ft)|0,C=Math.imul(ze,jt),R=R+Math.imul(Ee,ht)|0,k=k+Math.imul(Ee,Dt)|0,k=k+Math.imul(Ie,ht)|0,C=C+Math.imul(Ie,Dt)|0,R=R+Math.imul(ee,wt)|0,k=k+Math.imul(ee,er)|0,k=k+Math.imul(se,wt)|0,C=C+Math.imul(se,er)|0,R=R+Math.imul(U,pt)|0,k=k+Math.imul(U,Gt)|0,k=k+Math.imul(ve,pt)|0,C=C+Math.imul(ve,Gt)|0,R=R+Math.imul(Y,xt)|0,k=k+Math.imul(Y,$t)|0,k=k+Math.imul(fe,xt)|0,C=C+Math.imul(fe,$t)|0,R=R+Math.imul(ie,mt)|0,k=k+Math.imul(ie,qt)|0,k=k+Math.imul(Q,mt)|0,C=C+Math.imul(Q,qt)|0;var rn=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(rn>>>26)|0,rn&=67108863,R=Math.imul(Fe,ht),k=Math.imul(Fe,Dt),k=k+Math.imul(ze,ht)|0,C=Math.imul(ze,Dt),R=R+Math.imul(Ee,wt)|0,k=k+Math.imul(Ee,er)|0,k=k+Math.imul(Ie,wt)|0,C=C+Math.imul(Ie,er)|0,R=R+Math.imul(ee,pt)|0,k=k+Math.imul(ee,Gt)|0,k=k+Math.imul(se,pt)|0,C=C+Math.imul(se,Gt)|0,R=R+Math.imul(U,xt)|0,k=k+Math.imul(U,$t)|0,k=k+Math.imul(ve,xt)|0,C=C+Math.imul(ve,$t)|0,R=R+Math.imul(Y,mt)|0,k=k+Math.imul(Y,qt)|0,k=k+Math.imul(fe,mt)|0,C=C+Math.imul(fe,qt)|0;var nn=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(nn>>>26)|0,nn&=67108863,R=Math.imul(Fe,wt),k=Math.imul(Fe,er),k=k+Math.imul(ze,wt)|0,C=Math.imul(ze,er),R=R+Math.imul(Ee,pt)|0,k=k+Math.imul(Ee,Gt)|0,k=k+Math.imul(Ie,pt)|0,C=C+Math.imul(Ie,Gt)|0,R=R+Math.imul(ee,xt)|0,k=k+Math.imul(ee,$t)|0,k=k+Math.imul(se,xt)|0,C=C+Math.imul(se,$t)|0,R=R+Math.imul(U,mt)|0,k=k+Math.imul(U,qt)|0,k=k+Math.imul(ve,mt)|0,C=C+Math.imul(ve,qt)|0;var ar=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(ar>>>26)|0,ar&=67108863,R=Math.imul(Fe,pt),k=Math.imul(Fe,Gt),k=k+Math.imul(ze,pt)|0,C=Math.imul(ze,Gt),R=R+Math.imul(Ee,xt)|0,k=k+Math.imul(Ee,$t)|0,k=k+Math.imul(Ie,xt)|0,C=C+Math.imul(Ie,$t)|0,R=R+Math.imul(ee,mt)|0,k=k+Math.imul(ee,qt)|0,k=k+Math.imul(se,mt)|0,C=C+Math.imul(se,qt)|0;var Xr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Xr>>>26)|0,Xr&=67108863,R=Math.imul(Fe,xt),k=Math.imul(Fe,$t),k=k+Math.imul(ze,xt)|0,C=Math.imul(ze,$t),R=R+Math.imul(Ee,mt)|0,k=k+Math.imul(Ee,qt)|0,k=k+Math.imul(Ie,mt)|0,C=C+Math.imul(Ie,qt)|0;var Wr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,R=Math.imul(Fe,mt),k=Math.imul(Fe,qt),k=k+Math.imul(ze,mt)|0,C=Math.imul(ze,qt);var Vr=($+R|0)+((k&8191)<<13)|0;return $=(C+(k>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,L[0]=St,L[1]=Tt,L[2]=be,L[3]=Ne,L[4]=Le,L[5]=Je,L[6]=at,L[7]=Mt,L[8]=rr,L[9]=vr,L[10]=Dr,L[11]=yr,L[12]=lr,L[13]=rn,L[14]=nn,L[15]=ar,L[16]=Xr,L[17]=Wr,L[18]=Vr,$!==0&&(L[19]=$,_.length++),_};Math.imul||(w=h);function y(H,M,T){T.negative=M.negative^H.negative,T.length=H.length+M.length;for(var _=0,A=0,P=0;P>>26)|0,A+=L>>>26,L&=67108863}T.words[P]=$,_=L,L=A}return _!==0?T.words[P]=_:T.length--,T.strip()}function S(H,M,T){var _=new E;return _.mulp(H,M,T)}t.prototype.mulTo=function(M,T){var _,A=this.length+M.length;return this.length===10&&M.length===10?_=w(this,M,T):A<63?_=h(this,M,T):A<1024?_=y(this,M,T):_=S(this,M,T),_};function E(H,M){this.x=H,this.y=M}E.prototype.makeRBT=function(M){for(var T=new Array(M),_=t.prototype._countBits(M)-1,A=0;A>=1;return A},E.prototype.permute=function(M,T,_,A,P,L){for(var $=0;$>>1)P++;return 1<>>13,_[2*L+1]=P&8191,P=P>>>13;for(L=2*T;L>=26,T+=A/67108864|0,T+=P>>>26,this.words[_]=P&67108863}return T!==0&&(this.words[_]=T,this.length++),this},t.prototype.muln=function(M){return this.clone().imuln(M)},t.prototype.sqr=function(){return this.mul(this)},t.prototype.isqr=function(){return this.imul(this.clone())},t.prototype.pow=function(M){var T=v(M);if(T.length===0)return new t(1);for(var _=this,A=0;A=0);var T=M%26,_=(M-T)/26,A=67108863>>>26-T<<26-T,P;if(T!==0){var L=0;for(P=0;P>>26-T}L&&(this.words[P]=L,this.length++)}if(_!==0){for(P=this.length-1;P>=0;P--)this.words[P+_]=this.words[P];for(P=0;P<_;P++)this.words[P]=0;this.length+=_}return this.strip()},t.prototype.ishln=function(M){return u(this.negative===0),this.iushln(M)},t.prototype.iushrn=function(M,T,_){u(typeof M=="number"&&M>=0);var A;T?A=(T-T%26)/26:A=0;var P=M%26,L=Math.min((M-P)/26,this.length),$=67108863^67108863>>>P<L)for(this.length-=L,k=0;k=0&&(C!==0||k>=A);k--){var O=this.words[k]|0;this.words[k]=C<<26-P|O>>>P,C=O&$}return R&&C!==0&&(R.words[R.length++]=C),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},t.prototype.ishrn=function(M,T,_){return u(this.negative===0),this.iushrn(M,T,_)},t.prototype.shln=function(M){return this.clone().ishln(M)},t.prototype.ushln=function(M){return this.clone().iushln(M)},t.prototype.shrn=function(M){return this.clone().ishrn(M)},t.prototype.ushrn=function(M){return this.clone().iushrn(M)},t.prototype.testn=function(M){u(typeof M=="number"&&M>=0);var T=M%26,_=(M-T)/26,A=1<=0);var T=M%26,_=(M-T)/26;if(u(this.negative===0,"imaskn works only with positive numbers"),this.length<=_)return this;if(T!==0&&_++,this.length=Math.min(_,this.length),T!==0){var A=67108863^67108863>>>T<=67108864;T++)this.words[T]-=67108864,T===this.length-1?this.words[T+1]=1:this.words[T+1]++;return this.length=Math.max(this.length,T+1),this},t.prototype.isubn=function(M){if(u(typeof M=="number"),u(M<67108864),M<0)return this.iaddn(-M);if(this.negative!==0)return this.negative=0,this.iaddn(M),this.negative=1,this;if(this.words[0]-=M,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var T=0;T>26)-(R/67108864|0),this.words[P+_]=L&67108863}for(;P>26,this.words[P+_]=L&67108863;if($===0)return this.strip();for(u($===-1),$=0,P=0;P>26,this.words[P]=L&67108863;return this.negative=1,this.strip()},t.prototype._wordDiv=function(M,T){var _=this.length-M.length,A=this.clone(),P=M,L=P.words[P.length-1]|0,$=this._countBits(L);_=26-$,_!==0&&(P=P.ushln(_),A.iushln(_),L=P.words[P.length-1]|0);var R=A.length-P.length,k;if(T!=="mod"){k=new t(null),k.length=R+1,k.words=new Array(k.length);for(var C=0;C=0;W--){var ne=(A.words[P.length+W]|0)*67108864+(A.words[P.length+W-1]|0);for(ne=Math.min(ne/L|0,67108863),A._ishlnsubmul(P,ne,W);A.negative!==0;)ne--,A.negative=0,A._ishlnsubmul(P,1,W),A.isZero()||(A.negative^=1);k&&(k.words[W]=ne)}return k&&k.strip(),A.strip(),T!=="div"&&_!==0&&A.iushrn(_),{div:k||null,mod:A}},t.prototype.divmod=function(M,T,_){if(u(!M.isZero()),this.isZero())return{div:new t(0),mod:new t(0)};var A,P,L;return this.negative!==0&&M.negative===0?(L=this.neg().divmod(M,T),T!=="mod"&&(A=L.div.neg()),T!=="div"&&(P=L.mod.neg(),_&&P.negative!==0&&P.iadd(M)),{div:A,mod:P}):this.negative===0&&M.negative!==0?(L=this.divmod(M.neg(),T),T!=="mod"&&(A=L.div.neg()),{div:A,mod:L.mod}):this.negative&M.negative?(L=this.neg().divmod(M.neg(),T),T!=="div"&&(P=L.mod.neg(),_&&P.negative!==0&&P.isub(M)),{div:L.div,mod:P}):M.length>this.length||this.cmp(M)<0?{div:new t(0),mod:this}:M.length===1?T==="div"?{div:this.divn(M.words[0]),mod:null}:T==="mod"?{div:null,mod:new t(this.modn(M.words[0]))}:{div:this.divn(M.words[0]),mod:new t(this.modn(M.words[0]))}:this._wordDiv(M,T)},t.prototype.div=function(M){return this.divmod(M,"div",!1).div},t.prototype.mod=function(M){return this.divmod(M,"mod",!1).mod},t.prototype.umod=function(M){return this.divmod(M,"mod",!0).mod},t.prototype.divRound=function(M){var T=this.divmod(M);if(T.mod.isZero())return T.div;var _=T.div.negative!==0?T.mod.isub(M):T.mod,A=M.ushrn(1),P=M.andln(1),L=_.cmp(A);return L<0||P===1&&L===0?T.div:T.div.negative!==0?T.div.isubn(1):T.div.iaddn(1)},t.prototype.modn=function(M){u(M<=67108863);for(var T=(1<<26)%M,_=0,A=this.length-1;A>=0;A--)_=(T*_+(this.words[A]|0))%M;return _},t.prototype.idivn=function(M){u(M<=67108863);for(var T=0,_=this.length-1;_>=0;_--){var A=(this.words[_]|0)+T*67108864;this.words[_]=A/M|0,T=A%M}return this.strip()},t.prototype.divn=function(M){return this.clone().idivn(M)},t.prototype.egcd=function(M){u(M.negative===0),u(!M.isZero());var T=this,_=M.clone();T.negative!==0?T=T.umod(M):T=T.clone();for(var A=new t(1),P=new t(0),L=new t(0),$=new t(1),R=0;T.isEven()&&_.isEven();)T.iushrn(1),_.iushrn(1),++R;for(var k=_.clone(),C=T.clone();!T.isZero();){for(var O=0,W=1;!(T.words[0]&W)&&O<26;++O,W<<=1);if(O>0)for(T.iushrn(O);O-- >0;)(A.isOdd()||P.isOdd())&&(A.iadd(k),P.isub(C)),A.iushrn(1),P.iushrn(1);for(var ne=0,he=1;!(_.words[0]&he)&&ne<26;++ne,he<<=1);if(ne>0)for(_.iushrn(ne);ne-- >0;)(L.isOdd()||$.isOdd())&&(L.iadd(k),$.isub(C)),L.iushrn(1),$.iushrn(1);T.cmp(_)>=0?(T.isub(_),A.isub(L),P.isub($)):(_.isub(T),L.isub(A),$.isub(P))}return{a:L,b:$,gcd:_.iushln(R)}},t.prototype._invmp=function(M){u(M.negative===0),u(!M.isZero());var T=this,_=M.clone();T.negative!==0?T=T.umod(M):T=T.clone();for(var A=new t(1),P=new t(0),L=_.clone();T.cmpn(1)>0&&_.cmpn(1)>0;){for(var $=0,R=1;!(T.words[0]&R)&&$<26;++$,R<<=1);if($>0)for(T.iushrn($);$-- >0;)A.isOdd()&&A.iadd(L),A.iushrn(1);for(var k=0,C=1;!(_.words[0]&C)&&k<26;++k,C<<=1);if(k>0)for(_.iushrn(k);k-- >0;)P.isOdd()&&P.iadd(L),P.iushrn(1);T.cmp(_)>=0?(T.isub(_),A.isub(P)):(_.isub(T),P.isub(A))}var O;return T.cmpn(1)===0?O=A:O=P,O.cmpn(0)<0&&O.iadd(M),O},t.prototype.gcd=function(M){if(this.isZero())return M.abs();if(M.isZero())return this.abs();var T=this.clone(),_=M.clone();T.negative=0,_.negative=0;for(var A=0;T.isEven()&&_.isEven();A++)T.iushrn(1),_.iushrn(1);do{for(;T.isEven();)T.iushrn(1);for(;_.isEven();)_.iushrn(1);var P=T.cmp(_);if(P<0){var L=T;T=_,_=L}else if(P===0||_.cmpn(1)===0)break;T.isub(_)}while(!0);return _.iushln(A)},t.prototype.invm=function(M){return this.egcd(M).a.umod(M)},t.prototype.isEven=function(){return(this.words[0]&1)===0},t.prototype.isOdd=function(){return(this.words[0]&1)===1},t.prototype.andln=function(M){return this.words[0]&M},t.prototype.bincn=function(M){u(typeof M=="number");var T=M%26,_=(M-T)/26,A=1<>>26,$&=67108863,this.words[L]=$}return P!==0&&(this.words[L]=P,this.length++),this},t.prototype.isZero=function(){return this.length===1&&this.words[0]===0},t.prototype.cmpn=function(M){var T=M<0;if(this.negative!==0&&!T)return-1;if(this.negative===0&&T)return 1;this.strip();var _;if(this.length>1)_=1;else{T&&(M=-M),u(M<=67108863,"Number is too big");var A=this.words[0]|0;_=A===M?0:AM.length)return 1;if(this.length=0;_--){var A=this.words[_]|0,P=M.words[_]|0;if(A!==P){AP&&(T=1);break}}return T},t.prototype.gtn=function(M){return this.cmpn(M)===1},t.prototype.gt=function(M){return this.cmp(M)===1},t.prototype.gten=function(M){return this.cmpn(M)>=0},t.prototype.gte=function(M){return this.cmp(M)>=0},t.prototype.ltn=function(M){return this.cmpn(M)===-1},t.prototype.lt=function(M){return this.cmp(M)===-1},t.prototype.lten=function(M){return this.cmpn(M)<=0},t.prototype.lte=function(M){return this.cmp(M)<=0},t.prototype.eqn=function(M){return this.cmpn(M)===0},t.prototype.eq=function(M){return this.cmp(M)===0},t.red=function(M){return new V(M)},t.prototype.toRed=function(M){return u(!this.red,"Already a number in reduction context"),u(this.negative===0,"red works only with positives"),M.convertTo(this)._forceRed(M)},t.prototype.fromRed=function(){return u(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},t.prototype._forceRed=function(M){return this.red=M,this},t.prototype.forceRed=function(M){return u(!this.red,"Already a number in reduction context"),this._forceRed(M)},t.prototype.redAdd=function(M){return u(this.red,"redAdd works only with red numbers"),this.red.add(this,M)},t.prototype.redIAdd=function(M){return u(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,M)},t.prototype.redSub=function(M){return u(this.red,"redSub works only with red numbers"),this.red.sub(this,M)},t.prototype.redISub=function(M){return u(this.red,"redISub works only with red numbers"),this.red.isub(this,M)},t.prototype.redShl=function(M){return u(this.red,"redShl works only with red numbers"),this.red.shl(this,M)},t.prototype.redMul=function(M){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,M),this.red.mul(this,M)},t.prototype.redIMul=function(M){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,M),this.red.imul(this,M)},t.prototype.redSqr=function(){return u(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},t.prototype.redISqr=function(){return u(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},t.prototype.redSqrt=function(){return u(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},t.prototype.redInvm=function(){return u(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},t.prototype.redNeg=function(){return u(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},t.prototype.redPow=function(M){return u(this.red&&!M.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,M)};var I={k256:null,p224:null,p192:null,p25519:null};function F(H,M){this.name=H,this.p=new t(M,16),this.n=this.p.bitLength(),this.k=new t(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}F.prototype._tmp=function(){var M=new t(null);return M.words=new Array(Math.ceil(this.n/13)),M},F.prototype.ireduce=function(M){var T=M,_;do this.split(T,this.tmp),T=this.imulK(T),T=T.iadd(this.tmp),_=T.bitLength();while(_>this.n);var A=_0?T.isub(this.p):T.strip!==void 0?T.strip():T._strip(),T},F.prototype.split=function(M,T){M.iushrn(this.n,0,T)},F.prototype.imulK=function(M){return M.imul(this.k)};function B(){F.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}s(B,F),B.prototype.split=function(M,T){for(var _=4194303,A=Math.min(M.length,9),P=0;P>>22,L=$}L>>>=22,M.words[P-10]=L,L===0&&M.length>10?M.length-=10:M.length-=9},B.prototype.imulK=function(M){M.words[M.length]=0,M.words[M.length+1]=0,M.length+=2;for(var T=0,_=0;_>>=26,M.words[_]=P,T=A}return T!==0&&(M.words[M.length++]=T),M},t._prime=function(M){if(I[M])return I[M];var T;if(M==="k256")T=new B;else if(M==="p224")T=new j;else if(M==="p192")T=new X;else if(M==="p25519")T=new G;else throw new Error("Unknown prime "+M);return I[M]=T,T};function V(H){if(typeof H=="string"){var M=t._prime(H);this.m=M.p,this.prime=M}else u(H.gtn(1),"modulus must be greater than 1"),this.m=H,this.prime=null}V.prototype._verify1=function(M){u(M.negative===0,"red works only with positives"),u(M.red,"red works only with red numbers")},V.prototype._verify2=function(M,T){u((M.negative|T.negative)===0,"red works only with positives"),u(M.red&&M.red===T.red,"red works only with red numbers")},V.prototype.imod=function(M){return this.prime?this.prime.ireduce(M)._forceRed(this):M.umod(this.m)._forceRed(this)},V.prototype.neg=function(M){return M.isZero()?M.clone():this.m.sub(M)._forceRed(this)},V.prototype.add=function(M,T){this._verify2(M,T);var _=M.add(T);return _.cmp(this.m)>=0&&_.isub(this.m),_._forceRed(this)},V.prototype.iadd=function(M,T){this._verify2(M,T);var _=M.iadd(T);return _.cmp(this.m)>=0&&_.isub(this.m),_},V.prototype.sub=function(M,T){this._verify2(M,T);var _=M.sub(T);return _.cmpn(0)<0&&_.iadd(this.m),_._forceRed(this)},V.prototype.isub=function(M,T){this._verify2(M,T);var _=M.isub(T);return _.cmpn(0)<0&&_.iadd(this.m),_},V.prototype.shl=function(M,T){return this._verify1(M),this.imod(M.ushln(T))},V.prototype.imul=function(M,T){return this._verify2(M,T),this.imod(M.imul(T))},V.prototype.mul=function(M,T){return this._verify2(M,T),this.imod(M.mul(T))},V.prototype.isqr=function(M){return this.imul(M,M.clone())},V.prototype.sqr=function(M){return this.mul(M,M)},V.prototype.sqrt=function(M){if(M.isZero())return M.clone();var T=this.m.andln(3);if(u(T%2===1),T===3){var _=this.m.add(new t(1)).iushrn(2);return this.pow(M,_)}for(var A=this.m.subn(1),P=0;!A.isZero()&&A.andln(1)===0;)P++,A.iushrn(1);u(!A.isZero());var L=new t(1).toRed(this),$=L.redNeg(),R=this.m.subn(1).iushrn(1),k=this.m.bitLength();for(k=new t(2*k*k).toRed(this);this.pow(k,R).cmp($)!==0;)k.redIAdd($);for(var C=this.pow(k,A),O=this.pow(M,A.addn(1).iushrn(1)),W=this.pow(M,A),ne=P;W.cmp(L)!==0;){for(var he=W,ue=0;he.cmp(L)!==0;ue++)he=he.redSqr();u(ue=0;P--){for(var C=T.words[P],O=k-1;O>=0;O--){var W=C>>O&1;if(L!==A[0]&&(L=this.sqr(L)),W===0&&$===0){R=0;continue}$<<=1,$|=W,R++,!(R!==_&&(P!==0||O!==0))&&(L=this.mul(L,A[$]),R=0,$=0)}k=26}return L},V.prototype.convertTo=function(M){var T=M.umod(this.m);return T===M?T.clone():T},V.prototype.convertFrom=function(M){var T=M.clone();return T.red=null,T},t.mont=function(M){return new J(M)};function J(H){V.call(this,H),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new t(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}s(J,V),J.prototype.convertTo=function(M){return this.imod(M.ushln(this.shift))},J.prototype.convertFrom=function(M){var T=this.imod(M.mul(this.rinv));return T.red=null,T},J.prototype.imul=function(M,T){if(M.isZero()||T.isZero())return M.words[0]=0,M.length=1,M;var _=M.imul(T),A=_.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),P=_.isub(A).iushrn(this.shift),L=P;return P.cmp(this.m)>=0?L=P.isub(this.m):P.cmpn(0)<0&&(L=P.iadd(this.m)),L._forceRed(this)},J.prototype.mul=function(M,T){if(M.isZero()||T.isZero())return new t(0)._forceRed(this);var _=M.mul(T),A=_.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),P=_.isub(A).iushrn(this.shift),L=P;return P.cmp(this.m)>=0?L=P.isub(this.m):P.cmpn(0)<0&&(L=P.iadd(this.m)),L._forceRed(this)},J.prototype.invm=function(M){var T=this.imod(M._invmp(this.m).mul(this.r2));return T._forceRed(this)}})(typeof d>"u"||d,void 0)},{buffer:188}],185:[function(e,d,m){m.byteLength=i,m.toByteArray=l,m.fromByteArray=v;for(var f=[],c=[],u=typeof Uint8Array<"u"?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,n=s.length;t0)throw new Error("Invalid string. Length must be a multiple of 4");var y=h.indexOf("=");y===-1&&(y=w);var S=y===w?0:4-y%4;return[y,S]}function i(h){var w=r(h),y=w[0],S=w[1];return(y+S)*3/4-S}function o(h,w,y){return(w+y)*3/4-y}function l(h){var w,y=r(h),S=y[0],E=y[1],I=new u(o(h,S,E)),F=0,B=E>0?S-4:S,j;for(j=0;j>16&255,I[F++]=w>>8&255,I[F++]=w&255;return E===2&&(w=c[h.charCodeAt(j)]<<2|c[h.charCodeAt(j+1)]>>4,I[F++]=w&255),E===1&&(w=c[h.charCodeAt(j)]<<10|c[h.charCodeAt(j+1)]<<4|c[h.charCodeAt(j+2)]>>2,I[F++]=w>>8&255,I[F++]=w&255),I}function a(h){return f[h>>18&63]+f[h>>12&63]+f[h>>6&63]+f[h&63]}function g(h,w,y){for(var S,E=[],I=w;IB?B:F+I));return S===1?(w=h[y-1],E.push(f[w>>2]+f[w<<4&63]+"==")):S===2&&(w=(h[y-2]<<8)+h[y-1],E.push(f[w>>10]+f[w>>4&63]+f[w<<2&63]+"=")),E.join("")}},{}],186:[function(e,d,m){(function(f,c){function u(T,_){if(!T)throw new Error(_||"Assertion failed")}function s(T,_){T.super_=_;var A=function(){};A.prototype=_.prototype,T.prototype=new A,T.prototype.constructor=T}function t(T,_,A){if(t.isBN(T))return T;this.negative=0,this.words=null,this.length=0,this.red=null,T!==null&&((_==="le"||_==="be")&&(A=_,_=10),this._init(T||0,_||10,A||"be"))}typeof f=="object"?f.exports=t:c.BN=t,t.BN=t,t.wordSize=26;var n;try{typeof window<"u"&&typeof window.Buffer<"u"?n=window.Buffer:n=e("buffer").Buffer}catch{}t.isBN=function(_){return _ instanceof t?!0:_!==null&&typeof _=="object"&&_.constructor.wordSize===t.wordSize&&Array.isArray(_.words)},t.max=function(_,A){return _.cmp(A)>0?_:A},t.min=function(_,A){return _.cmp(A)<0?_:A},t.prototype._init=function(_,A,P){if(typeof _=="number")return this._initNumber(_,A,P);if(typeof _=="object")return this._initArray(_,A,P);A==="hex"&&(A=16),u(A===(A|0)&&A>=2&&A<=36),_=_.toString().replace(/\s+/g,"");var L=0;_[0]==="-"&&(L++,this.negative=1),L<_.length&&(A===16?this._parseHex(_,L,P):(this._parseBase(_,A,L),P==="le"&&this._initArray(this.toArray(),A,P)))},t.prototype._initNumber=function(_,A,P){_<0&&(this.negative=1,_=-_),_<67108864?(this.words=[_&67108863],this.length=1):_<4503599627370496?(this.words=[_&67108863,_/67108864&67108863],this.length=2):(u(_<9007199254740992),this.words=[_&67108863,_/67108864&67108863,1],this.length=3),P==="le"&&this._initArray(this.toArray(),A,P)},t.prototype._initArray=function(_,A,P){if(u(typeof _.length=="number"),_.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(_.length/3),this.words=new Array(this.length);for(var L=0;L=0;L-=3)R=_[L]|_[L-1]<<8|_[L-2]<<16,this.words[$]|=R<>>26-k&67108863,k+=24,k>=26&&(k-=26,$++);else if(P==="le")for(L=0,$=0;L<_.length;L+=3)R=_[L]|_[L+1]<<8|_[L+2]<<16,this.words[$]|=R<>>26-k&67108863,k+=24,k>=26&&(k-=26,$++);return this._strip()};function r(T,_){var A=T.charCodeAt(_);if(A>=48&&A<=57)return A-48;if(A>=65&&A<=70)return A-55;if(A>=97&&A<=102)return A-87;u(!1,"Invalid character in "+T)}function i(T,_,A){var P=r(T,A);return A-1>=_&&(P|=r(T,A-1)<<4),P}t.prototype._parseHex=function(_,A,P){this.length=Math.ceil((_.length-A)/6),this.words=new Array(this.length);for(var L=0;L=A;L-=2)k=i(_,A,L)<<$,this.words[R]|=k&67108863,$>=18?($-=18,R+=1,this.words[R]|=k>>>26):$+=8;else{var C=_.length-A;for(L=C%2===0?A+1:A;L<_.length;L+=2)k=i(_,A,L)<<$,this.words[R]|=k&67108863,$>=18?($-=18,R+=1,this.words[R]|=k>>>26):$+=8}this._strip()};function o(T,_,A,P){for(var L=0,$=0,R=Math.min(T.length,A),k=_;k=49?$=C-49+10:C>=17?$=C-17+10:$=C,u(C>=0&&$1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},t.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{t.prototype[Symbol.for("nodejs.util.inspect.custom")]=a}catch{t.prototype.inspect=a}else t.prototype.inspect=a;function a(){return(this.red?""}var g=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],v=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];t.prototype.toString=function(_,A){_=_||10,A=A|0||1;var P;if(_===16||_==="hex"){P="";for(var L=0,$=0,R=0;R>>24-L&16777215,L+=2,L>=26&&(L-=26,R--),$!==0||R!==this.length-1?P=g[6-C.length]+C+P:P=C+P}for($!==0&&(P=$.toString(16)+P);P.length%A!==0;)P="0"+P;return this.negative!==0&&(P="-"+P),P}if(_===(_|0)&&_>=2&&_<=36){var O=v[_],W=h[_];P="";var ne=this.clone();for(ne.negative=0;!ne.isZero();){var he=ne.modrn(W).toString(_);ne=ne.idivn(W),ne.isZero()?P=he+P:P=g[O-he.length]+he+P}for(this.isZero()&&(P="0"+P);P.length%A!==0;)P="0"+P;return this.negative!==0&&(P="-"+P),P}u(!1,"Base should be between 2 and 36")},t.prototype.toNumber=function(){var _=this.words[0];return this.length===2?_+=this.words[1]*67108864:this.length===3&&this.words[2]===1?_+=4503599627370496+this.words[1]*67108864:this.length>2&&u(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-_:_},t.prototype.toJSON=function(){return this.toString(16,2)},n&&(t.prototype.toBuffer=function(_,A){return this.toArrayLike(n,_,A)}),t.prototype.toArray=function(_,A){return this.toArrayLike(Array,_,A)};var w=function(_,A){return _.allocUnsafe?_.allocUnsafe(A):new _(A)};t.prototype.toArrayLike=function(_,A,P){this._strip();var L=this.byteLength(),$=P||Math.max(1,L);u(L<=$,"byte array longer than desired length"),u($>0,"Requested array length <= 0");var R=w(_,$),k=A==="le"?"LE":"BE";return this["_toArrayLike"+k](R,L),R},t.prototype._toArrayLikeLE=function(_,A){for(var P=0,L=0,$=0,R=0;$>8&255),P<_.length&&(_[P++]=k>>16&255),R===6?(P<_.length&&(_[P++]=k>>24&255),L=0,R=0):(L=k>>>24,R+=2)}if(P<_.length)for(_[P++]=L;P<_.length;)_[P++]=0},t.prototype._toArrayLikeBE=function(_,A){for(var P=_.length-1,L=0,$=0,R=0;$=0&&(_[P--]=k>>8&255),P>=0&&(_[P--]=k>>16&255),R===6?(P>=0&&(_[P--]=k>>24&255),L=0,R=0):(L=k>>>24,R+=2)}if(P>=0)for(_[P--]=L;P>=0;)_[P--]=0},Math.clz32?t.prototype._countBits=function(_){return 32-Math.clz32(_)}:t.prototype._countBits=function(_){var A=_,P=0;return A>=4096&&(P+=13,A>>>=13),A>=64&&(P+=7,A>>>=7),A>=8&&(P+=4,A>>>=4),A>=2&&(P+=2,A>>>=2),P+A},t.prototype._zeroBits=function(_){if(_===0)return 26;var A=_,P=0;return A&8191||(P+=13,A>>>=13),A&127||(P+=7,A>>>=7),A&15||(P+=4,A>>>=4),A&3||(P+=2,A>>>=2),A&1||P++,P},t.prototype.bitLength=function(){var _=this.words[this.length-1],A=this._countBits(_);return(this.length-1)*26+A};function y(T){for(var _=new Array(T.bitLength()),A=0;A<_.length;A++){var P=A/26|0,L=A%26;_[A]=T.words[P]>>>L&1}return _}t.prototype.zeroBits=function(){if(this.isZero())return 0;for(var _=0,A=0;A_.length?this.clone().ior(_):_.clone().ior(this)},t.prototype.uor=function(_){return this.length>_.length?this.clone().iuor(_):_.clone().iuor(this)},t.prototype.iuand=function(_){var A;this.length>_.length?A=_:A=this;for(var P=0;P_.length?this.clone().iand(_):_.clone().iand(this)},t.prototype.uand=function(_){return this.length>_.length?this.clone().iuand(_):_.clone().iuand(this)},t.prototype.iuxor=function(_){var A,P;this.length>_.length?(A=this,P=_):(A=_,P=this);for(var L=0;L_.length?this.clone().ixor(_):_.clone().ixor(this)},t.prototype.uxor=function(_){return this.length>_.length?this.clone().iuxor(_):_.clone().iuxor(this)},t.prototype.inotn=function(_){u(typeof _=="number"&&_>=0);var A=Math.ceil(_/26)|0,P=_%26;this._expand(A),P>0&&A--;for(var L=0;L0&&(this.words[L]=~this.words[L]&67108863>>26-P),this._strip()},t.prototype.notn=function(_){return this.clone().inotn(_)},t.prototype.setn=function(_,A){u(typeof _=="number"&&_>=0);var P=_/26|0,L=_%26;return this._expand(P+1),A?this.words[P]=this.words[P]|1<_.length?(P=this,L=_):(P=_,L=this);for(var $=0,R=0;R>>26;for(;$!==0&&R>>26;if(this.length=P.length,$!==0)this.words[this.length]=$,this.length++;else if(P!==this)for(;R_.length?this.clone().iadd(_):_.clone().iadd(this)},t.prototype.isub=function(_){if(_.negative!==0){_.negative=0;var A=this.iadd(_);return _.negative=1,A._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(_),this.negative=1,this._normSign();var P=this.cmp(_);if(P===0)return this.negative=0,this.length=1,this.words[0]=0,this;var L,$;P>0?(L=this,$=_):(L=_,$=this);for(var R=0,k=0;k<$.length;k++)A=(L.words[k]|0)-($.words[k]|0)+R,R=A>>26,this.words[k]=A&67108863;for(;R!==0&&k>26,this.words[k]=A&67108863;if(R===0&&k>>26,ne=C&67108863,he=Math.min(O,_.length-1),ue=Math.max(0,O-T.length+1);ue<=he;ue++){var Ae=O-ue|0;L=T.words[Ae]|0,$=_.words[ue]|0,R=L*$+ne,W+=R/67108864|0,ne=R&67108863}A.words[O]=ne|0,C=W|0}return C!==0?A.words[O]=C|0:A.length--,A._strip()}var E=function(_,A,P){var L=_.words,$=A.words,R=P.words,k=0,C,O,W,ne=L[0]|0,he=ne&8191,ue=ne>>>13,Ae=L[1]|0,pe=Ae&8191,te=Ae>>>13,Z=L[2]|0,q=Z&8191,de=Z>>>13,ke=L[3]|0,oe=ke&8191,ie=ke>>>13,Q=L[4]|0,z=Q&8191,Y=Q>>>13,fe=L[5]|0,we=fe&8191,U=fe>>>13,ve=L[6]|0,Se=ve&8191,ee=ve>>>13,se=L[7]|0,me=se&8191,Ee=se>>>13,Ie=L[8]|0,Ce=Ie&8191,Fe=Ie>>>13,ze=L[9]|0,je=ze&8191,ge=ze>>>13,Me=$[0]|0,Be=Me&8191,Xe=Me>>>13,ot=$[1]|0,ct=ot&8191,st=ot>>>13,rt=$[2]|0,bt=rt&8191,Qe=rt>>>13,et=$[3]|0,_t=et&8191,ft=et>>>13,jt=$[4]|0,It=jt&8191,ht=jt>>>13,Dt=$[5]|0,Ut=Dt&8191,wt=Dt>>>13,er=$[6]|0,Kt=er&8191,pt=er>>>13,Gt=$[7]|0,kt=Gt&8191,xt=Gt>>>13,$t=$[8]|0,Qt=$t&8191,mt=$t>>>13,qt=$[9]|0,St=qt&8191,Tt=qt>>>13;P.negative=_.negative^A.negative,P.length=19,C=Math.imul(he,Be),O=Math.imul(he,Xe),O=O+Math.imul(ue,Be)|0,W=Math.imul(ue,Xe);var be=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(be>>>26)|0,be&=67108863,C=Math.imul(pe,Be),O=Math.imul(pe,Xe),O=O+Math.imul(te,Be)|0,W=Math.imul(te,Xe),C=C+Math.imul(he,ct)|0,O=O+Math.imul(he,st)|0,O=O+Math.imul(ue,ct)|0,W=W+Math.imul(ue,st)|0;var Ne=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,C=Math.imul(q,Be),O=Math.imul(q,Xe),O=O+Math.imul(de,Be)|0,W=Math.imul(de,Xe),C=C+Math.imul(pe,ct)|0,O=O+Math.imul(pe,st)|0,O=O+Math.imul(te,ct)|0,W=W+Math.imul(te,st)|0,C=C+Math.imul(he,bt)|0,O=O+Math.imul(he,Qe)|0,O=O+Math.imul(ue,bt)|0,W=W+Math.imul(ue,Qe)|0;var Le=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Le>>>26)|0,Le&=67108863,C=Math.imul(oe,Be),O=Math.imul(oe,Xe),O=O+Math.imul(ie,Be)|0,W=Math.imul(ie,Xe),C=C+Math.imul(q,ct)|0,O=O+Math.imul(q,st)|0,O=O+Math.imul(de,ct)|0,W=W+Math.imul(de,st)|0,C=C+Math.imul(pe,bt)|0,O=O+Math.imul(pe,Qe)|0,O=O+Math.imul(te,bt)|0,W=W+Math.imul(te,Qe)|0,C=C+Math.imul(he,_t)|0,O=O+Math.imul(he,ft)|0,O=O+Math.imul(ue,_t)|0,W=W+Math.imul(ue,ft)|0;var Je=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Je>>>26)|0,Je&=67108863,C=Math.imul(z,Be),O=Math.imul(z,Xe),O=O+Math.imul(Y,Be)|0,W=Math.imul(Y,Xe),C=C+Math.imul(oe,ct)|0,O=O+Math.imul(oe,st)|0,O=O+Math.imul(ie,ct)|0,W=W+Math.imul(ie,st)|0,C=C+Math.imul(q,bt)|0,O=O+Math.imul(q,Qe)|0,O=O+Math.imul(de,bt)|0,W=W+Math.imul(de,Qe)|0,C=C+Math.imul(pe,_t)|0,O=O+Math.imul(pe,ft)|0,O=O+Math.imul(te,_t)|0,W=W+Math.imul(te,ft)|0,C=C+Math.imul(he,It)|0,O=O+Math.imul(he,ht)|0,O=O+Math.imul(ue,It)|0,W=W+Math.imul(ue,ht)|0;var at=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(at>>>26)|0,at&=67108863,C=Math.imul(we,Be),O=Math.imul(we,Xe),O=O+Math.imul(U,Be)|0,W=Math.imul(U,Xe),C=C+Math.imul(z,ct)|0,O=O+Math.imul(z,st)|0,O=O+Math.imul(Y,ct)|0,W=W+Math.imul(Y,st)|0,C=C+Math.imul(oe,bt)|0,O=O+Math.imul(oe,Qe)|0,O=O+Math.imul(ie,bt)|0,W=W+Math.imul(ie,Qe)|0,C=C+Math.imul(q,_t)|0,O=O+Math.imul(q,ft)|0,O=O+Math.imul(de,_t)|0,W=W+Math.imul(de,ft)|0,C=C+Math.imul(pe,It)|0,O=O+Math.imul(pe,ht)|0,O=O+Math.imul(te,It)|0,W=W+Math.imul(te,ht)|0,C=C+Math.imul(he,Ut)|0,O=O+Math.imul(he,wt)|0,O=O+Math.imul(ue,Ut)|0,W=W+Math.imul(ue,wt)|0;var Mt=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,C=Math.imul(Se,Be),O=Math.imul(Se,Xe),O=O+Math.imul(ee,Be)|0,W=Math.imul(ee,Xe),C=C+Math.imul(we,ct)|0,O=O+Math.imul(we,st)|0,O=O+Math.imul(U,ct)|0,W=W+Math.imul(U,st)|0,C=C+Math.imul(z,bt)|0,O=O+Math.imul(z,Qe)|0,O=O+Math.imul(Y,bt)|0,W=W+Math.imul(Y,Qe)|0,C=C+Math.imul(oe,_t)|0,O=O+Math.imul(oe,ft)|0,O=O+Math.imul(ie,_t)|0,W=W+Math.imul(ie,ft)|0,C=C+Math.imul(q,It)|0,O=O+Math.imul(q,ht)|0,O=O+Math.imul(de,It)|0,W=W+Math.imul(de,ht)|0,C=C+Math.imul(pe,Ut)|0,O=O+Math.imul(pe,wt)|0,O=O+Math.imul(te,Ut)|0,W=W+Math.imul(te,wt)|0,C=C+Math.imul(he,Kt)|0,O=O+Math.imul(he,pt)|0,O=O+Math.imul(ue,Kt)|0,W=W+Math.imul(ue,pt)|0;var rr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(rr>>>26)|0,rr&=67108863,C=Math.imul(me,Be),O=Math.imul(me,Xe),O=O+Math.imul(Ee,Be)|0,W=Math.imul(Ee,Xe),C=C+Math.imul(Se,ct)|0,O=O+Math.imul(Se,st)|0,O=O+Math.imul(ee,ct)|0,W=W+Math.imul(ee,st)|0,C=C+Math.imul(we,bt)|0,O=O+Math.imul(we,Qe)|0,O=O+Math.imul(U,bt)|0,W=W+Math.imul(U,Qe)|0,C=C+Math.imul(z,_t)|0,O=O+Math.imul(z,ft)|0,O=O+Math.imul(Y,_t)|0,W=W+Math.imul(Y,ft)|0,C=C+Math.imul(oe,It)|0,O=O+Math.imul(oe,ht)|0,O=O+Math.imul(ie,It)|0,W=W+Math.imul(ie,ht)|0,C=C+Math.imul(q,Ut)|0,O=O+Math.imul(q,wt)|0,O=O+Math.imul(de,Ut)|0,W=W+Math.imul(de,wt)|0,C=C+Math.imul(pe,Kt)|0,O=O+Math.imul(pe,pt)|0,O=O+Math.imul(te,Kt)|0,W=W+Math.imul(te,pt)|0,C=C+Math.imul(he,kt)|0,O=O+Math.imul(he,xt)|0,O=O+Math.imul(ue,kt)|0,W=W+Math.imul(ue,xt)|0;var vr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(vr>>>26)|0,vr&=67108863,C=Math.imul(Ce,Be),O=Math.imul(Ce,Xe),O=O+Math.imul(Fe,Be)|0,W=Math.imul(Fe,Xe),C=C+Math.imul(me,ct)|0,O=O+Math.imul(me,st)|0,O=O+Math.imul(Ee,ct)|0,W=W+Math.imul(Ee,st)|0,C=C+Math.imul(Se,bt)|0,O=O+Math.imul(Se,Qe)|0,O=O+Math.imul(ee,bt)|0,W=W+Math.imul(ee,Qe)|0,C=C+Math.imul(we,_t)|0,O=O+Math.imul(we,ft)|0,O=O+Math.imul(U,_t)|0,W=W+Math.imul(U,ft)|0,C=C+Math.imul(z,It)|0,O=O+Math.imul(z,ht)|0,O=O+Math.imul(Y,It)|0,W=W+Math.imul(Y,ht)|0,C=C+Math.imul(oe,Ut)|0,O=O+Math.imul(oe,wt)|0,O=O+Math.imul(ie,Ut)|0,W=W+Math.imul(ie,wt)|0,C=C+Math.imul(q,Kt)|0,O=O+Math.imul(q,pt)|0,O=O+Math.imul(de,Kt)|0,W=W+Math.imul(de,pt)|0,C=C+Math.imul(pe,kt)|0,O=O+Math.imul(pe,xt)|0,O=O+Math.imul(te,kt)|0,W=W+Math.imul(te,xt)|0,C=C+Math.imul(he,Qt)|0,O=O+Math.imul(he,mt)|0,O=O+Math.imul(ue,Qt)|0,W=W+Math.imul(ue,mt)|0;var Dr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,C=Math.imul(je,Be),O=Math.imul(je,Xe),O=O+Math.imul(ge,Be)|0,W=Math.imul(ge,Xe),C=C+Math.imul(Ce,ct)|0,O=O+Math.imul(Ce,st)|0,O=O+Math.imul(Fe,ct)|0,W=W+Math.imul(Fe,st)|0,C=C+Math.imul(me,bt)|0,O=O+Math.imul(me,Qe)|0,O=O+Math.imul(Ee,bt)|0,W=W+Math.imul(Ee,Qe)|0,C=C+Math.imul(Se,_t)|0,O=O+Math.imul(Se,ft)|0,O=O+Math.imul(ee,_t)|0,W=W+Math.imul(ee,ft)|0,C=C+Math.imul(we,It)|0,O=O+Math.imul(we,ht)|0,O=O+Math.imul(U,It)|0,W=W+Math.imul(U,ht)|0,C=C+Math.imul(z,Ut)|0,O=O+Math.imul(z,wt)|0,O=O+Math.imul(Y,Ut)|0,W=W+Math.imul(Y,wt)|0,C=C+Math.imul(oe,Kt)|0,O=O+Math.imul(oe,pt)|0,O=O+Math.imul(ie,Kt)|0,W=W+Math.imul(ie,pt)|0,C=C+Math.imul(q,kt)|0,O=O+Math.imul(q,xt)|0,O=O+Math.imul(de,kt)|0,W=W+Math.imul(de,xt)|0,C=C+Math.imul(pe,Qt)|0,O=O+Math.imul(pe,mt)|0,O=O+Math.imul(te,Qt)|0,W=W+Math.imul(te,mt)|0,C=C+Math.imul(he,St)|0,O=O+Math.imul(he,Tt)|0,O=O+Math.imul(ue,St)|0,W=W+Math.imul(ue,Tt)|0;var yr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(yr>>>26)|0,yr&=67108863,C=Math.imul(je,ct),O=Math.imul(je,st),O=O+Math.imul(ge,ct)|0,W=Math.imul(ge,st),C=C+Math.imul(Ce,bt)|0,O=O+Math.imul(Ce,Qe)|0,O=O+Math.imul(Fe,bt)|0,W=W+Math.imul(Fe,Qe)|0,C=C+Math.imul(me,_t)|0,O=O+Math.imul(me,ft)|0,O=O+Math.imul(Ee,_t)|0,W=W+Math.imul(Ee,ft)|0,C=C+Math.imul(Se,It)|0,O=O+Math.imul(Se,ht)|0,O=O+Math.imul(ee,It)|0,W=W+Math.imul(ee,ht)|0,C=C+Math.imul(we,Ut)|0,O=O+Math.imul(we,wt)|0,O=O+Math.imul(U,Ut)|0,W=W+Math.imul(U,wt)|0,C=C+Math.imul(z,Kt)|0,O=O+Math.imul(z,pt)|0,O=O+Math.imul(Y,Kt)|0,W=W+Math.imul(Y,pt)|0,C=C+Math.imul(oe,kt)|0,O=O+Math.imul(oe,xt)|0,O=O+Math.imul(ie,kt)|0,W=W+Math.imul(ie,xt)|0,C=C+Math.imul(q,Qt)|0,O=O+Math.imul(q,mt)|0,O=O+Math.imul(de,Qt)|0,W=W+Math.imul(de,mt)|0,C=C+Math.imul(pe,St)|0,O=O+Math.imul(pe,Tt)|0,O=O+Math.imul(te,St)|0,W=W+Math.imul(te,Tt)|0;var lr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(lr>>>26)|0,lr&=67108863,C=Math.imul(je,bt),O=Math.imul(je,Qe),O=O+Math.imul(ge,bt)|0,W=Math.imul(ge,Qe),C=C+Math.imul(Ce,_t)|0,O=O+Math.imul(Ce,ft)|0,O=O+Math.imul(Fe,_t)|0,W=W+Math.imul(Fe,ft)|0,C=C+Math.imul(me,It)|0,O=O+Math.imul(me,ht)|0,O=O+Math.imul(Ee,It)|0,W=W+Math.imul(Ee,ht)|0,C=C+Math.imul(Se,Ut)|0,O=O+Math.imul(Se,wt)|0,O=O+Math.imul(ee,Ut)|0,W=W+Math.imul(ee,wt)|0,C=C+Math.imul(we,Kt)|0,O=O+Math.imul(we,pt)|0,O=O+Math.imul(U,Kt)|0,W=W+Math.imul(U,pt)|0,C=C+Math.imul(z,kt)|0,O=O+Math.imul(z,xt)|0,O=O+Math.imul(Y,kt)|0,W=W+Math.imul(Y,xt)|0,C=C+Math.imul(oe,Qt)|0,O=O+Math.imul(oe,mt)|0,O=O+Math.imul(ie,Qt)|0,W=W+Math.imul(ie,mt)|0,C=C+Math.imul(q,St)|0,O=O+Math.imul(q,Tt)|0,O=O+Math.imul(de,St)|0,W=W+Math.imul(de,Tt)|0;var rn=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(rn>>>26)|0,rn&=67108863,C=Math.imul(je,_t),O=Math.imul(je,ft),O=O+Math.imul(ge,_t)|0,W=Math.imul(ge,ft),C=C+Math.imul(Ce,It)|0,O=O+Math.imul(Ce,ht)|0,O=O+Math.imul(Fe,It)|0,W=W+Math.imul(Fe,ht)|0,C=C+Math.imul(me,Ut)|0,O=O+Math.imul(me,wt)|0,O=O+Math.imul(Ee,Ut)|0,W=W+Math.imul(Ee,wt)|0,C=C+Math.imul(Se,Kt)|0,O=O+Math.imul(Se,pt)|0,O=O+Math.imul(ee,Kt)|0,W=W+Math.imul(ee,pt)|0,C=C+Math.imul(we,kt)|0,O=O+Math.imul(we,xt)|0,O=O+Math.imul(U,kt)|0,W=W+Math.imul(U,xt)|0,C=C+Math.imul(z,Qt)|0,O=O+Math.imul(z,mt)|0,O=O+Math.imul(Y,Qt)|0,W=W+Math.imul(Y,mt)|0,C=C+Math.imul(oe,St)|0,O=O+Math.imul(oe,Tt)|0,O=O+Math.imul(ie,St)|0,W=W+Math.imul(ie,Tt)|0;var nn=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(nn>>>26)|0,nn&=67108863,C=Math.imul(je,It),O=Math.imul(je,ht),O=O+Math.imul(ge,It)|0,W=Math.imul(ge,ht),C=C+Math.imul(Ce,Ut)|0,O=O+Math.imul(Ce,wt)|0,O=O+Math.imul(Fe,Ut)|0,W=W+Math.imul(Fe,wt)|0,C=C+Math.imul(me,Kt)|0,O=O+Math.imul(me,pt)|0,O=O+Math.imul(Ee,Kt)|0,W=W+Math.imul(Ee,pt)|0,C=C+Math.imul(Se,kt)|0,O=O+Math.imul(Se,xt)|0,O=O+Math.imul(ee,kt)|0,W=W+Math.imul(ee,xt)|0,C=C+Math.imul(we,Qt)|0,O=O+Math.imul(we,mt)|0,O=O+Math.imul(U,Qt)|0,W=W+Math.imul(U,mt)|0,C=C+Math.imul(z,St)|0,O=O+Math.imul(z,Tt)|0,O=O+Math.imul(Y,St)|0,W=W+Math.imul(Y,Tt)|0;var ar=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(ar>>>26)|0,ar&=67108863,C=Math.imul(je,Ut),O=Math.imul(je,wt),O=O+Math.imul(ge,Ut)|0,W=Math.imul(ge,wt),C=C+Math.imul(Ce,Kt)|0,O=O+Math.imul(Ce,pt)|0,O=O+Math.imul(Fe,Kt)|0,W=W+Math.imul(Fe,pt)|0,C=C+Math.imul(me,kt)|0,O=O+Math.imul(me,xt)|0,O=O+Math.imul(Ee,kt)|0,W=W+Math.imul(Ee,xt)|0,C=C+Math.imul(Se,Qt)|0,O=O+Math.imul(Se,mt)|0,O=O+Math.imul(ee,Qt)|0,W=W+Math.imul(ee,mt)|0,C=C+Math.imul(we,St)|0,O=O+Math.imul(we,Tt)|0,O=O+Math.imul(U,St)|0,W=W+Math.imul(U,Tt)|0;var Xr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Xr>>>26)|0,Xr&=67108863,C=Math.imul(je,Kt),O=Math.imul(je,pt),O=O+Math.imul(ge,Kt)|0,W=Math.imul(ge,pt),C=C+Math.imul(Ce,kt)|0,O=O+Math.imul(Ce,xt)|0,O=O+Math.imul(Fe,kt)|0,W=W+Math.imul(Fe,xt)|0,C=C+Math.imul(me,Qt)|0,O=O+Math.imul(me,mt)|0,O=O+Math.imul(Ee,Qt)|0,W=W+Math.imul(Ee,mt)|0,C=C+Math.imul(Se,St)|0,O=O+Math.imul(Se,Tt)|0,O=O+Math.imul(ee,St)|0,W=W+Math.imul(ee,Tt)|0;var Wr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,C=Math.imul(je,kt),O=Math.imul(je,xt),O=O+Math.imul(ge,kt)|0,W=Math.imul(ge,xt),C=C+Math.imul(Ce,Qt)|0,O=O+Math.imul(Ce,mt)|0,O=O+Math.imul(Fe,Qt)|0,W=W+Math.imul(Fe,mt)|0,C=C+Math.imul(me,St)|0,O=O+Math.imul(me,Tt)|0,O=O+Math.imul(Ee,St)|0,W=W+Math.imul(Ee,Tt)|0;var Vr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,C=Math.imul(je,Qt),O=Math.imul(je,mt),O=O+Math.imul(ge,Qt)|0,W=Math.imul(ge,mt),C=C+Math.imul(Ce,St)|0,O=O+Math.imul(Ce,Tt)|0,O=O+Math.imul(Fe,St)|0,W=W+Math.imul(Fe,Tt)|0;var En=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(En>>>26)|0,En&=67108863,C=Math.imul(je,St),O=Math.imul(je,Tt),O=O+Math.imul(ge,St)|0,W=Math.imul(ge,Tt);var Vn=(k+C|0)+((O&8191)<<13)|0;return k=(W+(O>>>13)|0)+(Vn>>>26)|0,Vn&=67108863,R[0]=be,R[1]=Ne,R[2]=Le,R[3]=Je,R[4]=at,R[5]=Mt,R[6]=rr,R[7]=vr,R[8]=Dr,R[9]=yr,R[10]=lr,R[11]=rn,R[12]=nn,R[13]=ar,R[14]=Xr,R[15]=Wr,R[16]=Vr,R[17]=En,R[18]=Vn,k!==0&&(R[19]=k,P.length++),P};Math.imul||(E=S);function I(T,_,A){A.negative=_.negative^T.negative,A.length=T.length+_.length;for(var P=0,L=0,$=0;$>>26)|0,L+=R>>>26,R&=67108863}A.words[$]=k,P=R,R=L}return P!==0?A.words[$]=P:A.length--,A._strip()}function F(T,_,A){return I(T,_,A)}t.prototype.mulTo=function(_,A){var P,L=this.length+_.length;return this.length===10&&_.length===10?P=E(this,_,A):L<63?P=S(this,_,A):L<1024?P=I(this,_,A):P=F(this,_,A),P},t.prototype.mul=function(_){var A=new t(null);return A.words=new Array(this.length+_.length),this.mulTo(_,A)},t.prototype.mulf=function(_){var A=new t(null);return A.words=new Array(this.length+_.length),F(this,_,A)},t.prototype.imul=function(_){return this.clone().mulTo(_,this)},t.prototype.imuln=function(_){var A=_<0;A&&(_=-_),u(typeof _=="number"),u(_<67108864);for(var P=0,L=0;L>=26,P+=$/67108864|0,P+=R>>>26,this.words[L]=R&67108863}return P!==0&&(this.words[L]=P,this.length++),A?this.ineg():this},t.prototype.muln=function(_){return this.clone().imuln(_)},t.prototype.sqr=function(){return this.mul(this)},t.prototype.isqr=function(){return this.imul(this.clone())},t.prototype.pow=function(_){var A=y(_);if(A.length===0)return new t(1);for(var P=this,L=0;L=0);var A=_%26,P=(_-A)/26,L=67108863>>>26-A<<26-A,$;if(A!==0){var R=0;for($=0;$>>26-A}R&&(this.words[$]=R,this.length++)}if(P!==0){for($=this.length-1;$>=0;$--)this.words[$+P]=this.words[$];for($=0;$=0);var L;A?L=(A-A%26)/26:L=0;var $=_%26,R=Math.min((_-$)/26,this.length),k=67108863^67108863>>>$<<$,C=P;if(L-=R,L=Math.max(0,L),C){for(var O=0;OR)for(this.length-=R,O=0;O=0&&(W!==0||O>=L);O--){var ne=this.words[O]|0;this.words[O]=W<<26-$|ne>>>$,W=ne&k}return C&&W!==0&&(C.words[C.length++]=W),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},t.prototype.ishrn=function(_,A,P){return u(this.negative===0),this.iushrn(_,A,P)},t.prototype.shln=function(_){return this.clone().ishln(_)},t.prototype.ushln=function(_){return this.clone().iushln(_)},t.prototype.shrn=function(_){return this.clone().ishrn(_)},t.prototype.ushrn=function(_){return this.clone().iushrn(_)},t.prototype.testn=function(_){u(typeof _=="number"&&_>=0);var A=_%26,P=(_-A)/26,L=1<=0);var A=_%26,P=(_-A)/26;if(u(this.negative===0,"imaskn works only with positive numbers"),this.length<=P)return this;if(A!==0&&P++,this.length=Math.min(P,this.length),A!==0){var L=67108863^67108863>>>A<=67108864;A++)this.words[A]-=67108864,A===this.length-1?this.words[A+1]=1:this.words[A+1]++;return this.length=Math.max(this.length,A+1),this},t.prototype.isubn=function(_){if(u(typeof _=="number"),u(_<67108864),_<0)return this.iaddn(-_);if(this.negative!==0)return this.negative=0,this.iaddn(_),this.negative=1,this;if(this.words[0]-=_,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var A=0;A>26)-(C/67108864|0),this.words[$+P]=R&67108863}for(;$>26,this.words[$+P]=R&67108863;if(k===0)return this._strip();for(u(k===-1),k=0,$=0;$>26,this.words[$]=R&67108863;return this.negative=1,this._strip()},t.prototype._wordDiv=function(_,A){var P=this.length-_.length,L=this.clone(),$=_,R=$.words[$.length-1]|0,k=this._countBits(R);P=26-k,P!==0&&($=$.ushln(P),L.iushln(P),R=$.words[$.length-1]|0);var C=L.length-$.length,O;if(A!=="mod"){O=new t(null),O.length=C+1,O.words=new Array(O.length);for(var W=0;W=0;he--){var ue=(L.words[$.length+he]|0)*67108864+(L.words[$.length+he-1]|0);for(ue=Math.min(ue/R|0,67108863),L._ishlnsubmul($,ue,he);L.negative!==0;)ue--,L.negative=0,L._ishlnsubmul($,1,he),L.isZero()||(L.negative^=1);O&&(O.words[he]=ue)}return O&&O._strip(),L._strip(),A!=="div"&&P!==0&&L.iushrn(P),{div:O||null,mod:L}},t.prototype.divmod=function(_,A,P){if(u(!_.isZero()),this.isZero())return{div:new t(0),mod:new t(0)};var L,$,R;return this.negative!==0&&_.negative===0?(R=this.neg().divmod(_,A),A!=="mod"&&(L=R.div.neg()),A!=="div"&&($=R.mod.neg(),P&&$.negative!==0&&$.iadd(_)),{div:L,mod:$}):this.negative===0&&_.negative!==0?(R=this.divmod(_.neg(),A),A!=="mod"&&(L=R.div.neg()),{div:L,mod:R.mod}):this.negative&_.negative?(R=this.neg().divmod(_.neg(),A),A!=="div"&&($=R.mod.neg(),P&&$.negative!==0&&$.isub(_)),{div:R.div,mod:$}):_.length>this.length||this.cmp(_)<0?{div:new t(0),mod:this}:_.length===1?A==="div"?{div:this.divn(_.words[0]),mod:null}:A==="mod"?{div:null,mod:new t(this.modrn(_.words[0]))}:{div:this.divn(_.words[0]),mod:new t(this.modrn(_.words[0]))}:this._wordDiv(_,A)},t.prototype.div=function(_){return this.divmod(_,"div",!1).div},t.prototype.mod=function(_){return this.divmod(_,"mod",!1).mod},t.prototype.umod=function(_){return this.divmod(_,"mod",!0).mod},t.prototype.divRound=function(_){var A=this.divmod(_);if(A.mod.isZero())return A.div;var P=A.div.negative!==0?A.mod.isub(_):A.mod,L=_.ushrn(1),$=_.andln(1),R=P.cmp(L);return R<0||$===1&&R===0?A.div:A.div.negative!==0?A.div.isubn(1):A.div.iaddn(1)},t.prototype.modrn=function(_){var A=_<0;A&&(_=-_),u(_<=67108863);for(var P=(1<<26)%_,L=0,$=this.length-1;$>=0;$--)L=(P*L+(this.words[$]|0))%_;return A?-L:L},t.prototype.modn=function(_){return this.modrn(_)},t.prototype.idivn=function(_){var A=_<0;A&&(_=-_),u(_<=67108863);for(var P=0,L=this.length-1;L>=0;L--){var $=(this.words[L]|0)+P*67108864;this.words[L]=$/_|0,P=$%_}return this._strip(),A?this.ineg():this},t.prototype.divn=function(_){return this.clone().idivn(_)},t.prototype.egcd=function(_){u(_.negative===0),u(!_.isZero());var A=this,P=_.clone();A.negative!==0?A=A.umod(_):A=A.clone();for(var L=new t(1),$=new t(0),R=new t(0),k=new t(1),C=0;A.isEven()&&P.isEven();)A.iushrn(1),P.iushrn(1),++C;for(var O=P.clone(),W=A.clone();!A.isZero();){for(var ne=0,he=1;!(A.words[0]&he)&&ne<26;++ne,he<<=1);if(ne>0)for(A.iushrn(ne);ne-- >0;)(L.isOdd()||$.isOdd())&&(L.iadd(O),$.isub(W)),L.iushrn(1),$.iushrn(1);for(var ue=0,Ae=1;!(P.words[0]&Ae)&&ue<26;++ue,Ae<<=1);if(ue>0)for(P.iushrn(ue);ue-- >0;)(R.isOdd()||k.isOdd())&&(R.iadd(O),k.isub(W)),R.iushrn(1),k.iushrn(1);A.cmp(P)>=0?(A.isub(P),L.isub(R),$.isub(k)):(P.isub(A),R.isub(L),k.isub($))}return{a:R,b:k,gcd:P.iushln(C)}},t.prototype._invmp=function(_){u(_.negative===0),u(!_.isZero());var A=this,P=_.clone();A.negative!==0?A=A.umod(_):A=A.clone();for(var L=new t(1),$=new t(0),R=P.clone();A.cmpn(1)>0&&P.cmpn(1)>0;){for(var k=0,C=1;!(A.words[0]&C)&&k<26;++k,C<<=1);if(k>0)for(A.iushrn(k);k-- >0;)L.isOdd()&&L.iadd(R),L.iushrn(1);for(var O=0,W=1;!(P.words[0]&W)&&O<26;++O,W<<=1);if(O>0)for(P.iushrn(O);O-- >0;)$.isOdd()&&$.iadd(R),$.iushrn(1);A.cmp(P)>=0?(A.isub(P),L.isub($)):(P.isub(A),$.isub(L))}var ne;return A.cmpn(1)===0?ne=L:ne=$,ne.cmpn(0)<0&&ne.iadd(_),ne},t.prototype.gcd=function(_){if(this.isZero())return _.abs();if(_.isZero())return this.abs();var A=this.clone(),P=_.clone();A.negative=0,P.negative=0;for(var L=0;A.isEven()&&P.isEven();L++)A.iushrn(1),P.iushrn(1);do{for(;A.isEven();)A.iushrn(1);for(;P.isEven();)P.iushrn(1);var $=A.cmp(P);if($<0){var R=A;A=P,P=R}else if($===0||P.cmpn(1)===0)break;A.isub(P)}while(!0);return P.iushln(L)},t.prototype.invm=function(_){return this.egcd(_).a.umod(_)},t.prototype.isEven=function(){return(this.words[0]&1)===0},t.prototype.isOdd=function(){return(this.words[0]&1)===1},t.prototype.andln=function(_){return this.words[0]&_},t.prototype.bincn=function(_){u(typeof _=="number");var A=_%26,P=(_-A)/26,L=1<>>26,k&=67108863,this.words[R]=k}return $!==0&&(this.words[R]=$,this.length++),this},t.prototype.isZero=function(){return this.length===1&&this.words[0]===0},t.prototype.cmpn=function(_){var A=_<0;if(this.negative!==0&&!A)return-1;if(this.negative===0&&A)return 1;this._strip();var P;if(this.length>1)P=1;else{A&&(_=-_),u(_<=67108863,"Number is too big");var L=this.words[0]|0;P=L===_?0:L<_?-1:1}return this.negative!==0?-P|0:P},t.prototype.cmp=function(_){if(this.negative!==0&&_.negative===0)return-1;if(this.negative===0&&_.negative!==0)return 1;var A=this.ucmp(_);return this.negative!==0?-A|0:A},t.prototype.ucmp=function(_){if(this.length>_.length)return 1;if(this.length<_.length)return-1;for(var A=0,P=this.length-1;P>=0;P--){var L=this.words[P]|0,$=_.words[P]|0;if(L!==$){L<$?A=-1:L>$&&(A=1);break}}return A},t.prototype.gtn=function(_){return this.cmpn(_)===1},t.prototype.gt=function(_){return this.cmp(_)===1},t.prototype.gten=function(_){return this.cmpn(_)>=0},t.prototype.gte=function(_){return this.cmp(_)>=0},t.prototype.ltn=function(_){return this.cmpn(_)===-1},t.prototype.lt=function(_){return this.cmp(_)===-1},t.prototype.lten=function(_){return this.cmpn(_)<=0},t.prototype.lte=function(_){return this.cmp(_)<=0},t.prototype.eqn=function(_){return this.cmpn(_)===0},t.prototype.eq=function(_){return this.cmp(_)===0},t.red=function(_){return new H(_)},t.prototype.toRed=function(_){return u(!this.red,"Already a number in reduction context"),u(this.negative===0,"red works only with positives"),_.convertTo(this)._forceRed(_)},t.prototype.fromRed=function(){return u(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},t.prototype._forceRed=function(_){return this.red=_,this},t.prototype.forceRed=function(_){return u(!this.red,"Already a number in reduction context"),this._forceRed(_)},t.prototype.redAdd=function(_){return u(this.red,"redAdd works only with red numbers"),this.red.add(this,_)},t.prototype.redIAdd=function(_){return u(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,_)},t.prototype.redSub=function(_){return u(this.red,"redSub works only with red numbers"),this.red.sub(this,_)},t.prototype.redISub=function(_){return u(this.red,"redISub works only with red numbers"),this.red.isub(this,_)},t.prototype.redShl=function(_){return u(this.red,"redShl works only with red numbers"),this.red.shl(this,_)},t.prototype.redMul=function(_){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,_),this.red.mul(this,_)},t.prototype.redIMul=function(_){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,_),this.red.imul(this,_)},t.prototype.redSqr=function(){return u(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},t.prototype.redISqr=function(){return u(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},t.prototype.redSqrt=function(){return u(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},t.prototype.redInvm=function(){return u(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},t.prototype.redNeg=function(){return u(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},t.prototype.redPow=function(_){return u(this.red&&!_.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,_)};var B={k256:null,p224:null,p192:null,p25519:null};function j(T,_){this.name=T,this.p=new t(_,16),this.n=this.p.bitLength(),this.k=new t(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}j.prototype._tmp=function(){var _=new t(null);return _.words=new Array(Math.ceil(this.n/13)),_},j.prototype.ireduce=function(_){var A=_,P;do this.split(A,this.tmp),A=this.imulK(A),A=A.iadd(this.tmp),P=A.bitLength();while(P>this.n);var L=P0?A.isub(this.p):A.strip!==void 0?A.strip():A._strip(),A},j.prototype.split=function(_,A){_.iushrn(this.n,0,A)},j.prototype.imulK=function(_){return _.imul(this.k)};function X(){j.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}s(X,j),X.prototype.split=function(_,A){for(var P=4194303,L=Math.min(_.length,9),$=0;$>>22,R=k}R>>>=22,_.words[$-10]=R,R===0&&_.length>10?_.length-=10:_.length-=9},X.prototype.imulK=function(_){_.words[_.length]=0,_.words[_.length+1]=0,_.length+=2;for(var A=0,P=0;P<_.length;P++){var L=_.words[P]|0;A+=L*977,_.words[P]=A&67108863,A=L*64+(A/67108864|0)}return _.words[_.length-1]===0&&(_.length--,_.words[_.length-1]===0&&_.length--),_};function G(){j.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}s(G,j);function V(){j.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}s(V,j);function J(){j.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}s(J,j),J.prototype.imulK=function(_){for(var A=0,P=0;P<_.length;P++){var L=(_.words[P]|0)*19+A,$=L&67108863;L>>>=26,_.words[P]=$,A=L}return A!==0&&(_.words[_.length++]=A),_},t._prime=function(_){if(B[_])return B[_];var A;if(_==="k256")A=new X;else if(_==="p224")A=new G;else if(_==="p192")A=new V;else if(_==="p25519")A=new J;else throw new Error("Unknown prime "+_);return B[_]=A,A};function H(T){if(typeof T=="string"){var _=t._prime(T);this.m=_.p,this.prime=_}else u(T.gtn(1),"modulus must be greater than 1"),this.m=T,this.prime=null}H.prototype._verify1=function(_){u(_.negative===0,"red works only with positives"),u(_.red,"red works only with red numbers")},H.prototype._verify2=function(_,A){u((_.negative|A.negative)===0,"red works only with positives"),u(_.red&&_.red===A.red,"red works only with red numbers")},H.prototype.imod=function(_){return this.prime?this.prime.ireduce(_)._forceRed(this):(l(_,_.umod(this.m)._forceRed(this)),_)},H.prototype.neg=function(_){return _.isZero()?_.clone():this.m.sub(_)._forceRed(this)},H.prototype.add=function(_,A){this._verify2(_,A);var P=_.add(A);return P.cmp(this.m)>=0&&P.isub(this.m),P._forceRed(this)},H.prototype.iadd=function(_,A){this._verify2(_,A);var P=_.iadd(A);return P.cmp(this.m)>=0&&P.isub(this.m),P},H.prototype.sub=function(_,A){this._verify2(_,A);var P=_.sub(A);return P.cmpn(0)<0&&P.iadd(this.m),P._forceRed(this)},H.prototype.isub=function(_,A){this._verify2(_,A);var P=_.isub(A);return P.cmpn(0)<0&&P.iadd(this.m),P},H.prototype.shl=function(_,A){return this._verify1(_),this.imod(_.ushln(A))},H.prototype.imul=function(_,A){return this._verify2(_,A),this.imod(_.imul(A))},H.prototype.mul=function(_,A){return this._verify2(_,A),this.imod(_.mul(A))},H.prototype.isqr=function(_){return this.imul(_,_.clone())},H.prototype.sqr=function(_){return this.mul(_,_)},H.prototype.sqrt=function(_){if(_.isZero())return _.clone();var A=this.m.andln(3);if(u(A%2===1),A===3){var P=this.m.add(new t(1)).iushrn(2);return this.pow(_,P)}for(var L=this.m.subn(1),$=0;!L.isZero()&&L.andln(1)===0;)$++,L.iushrn(1);u(!L.isZero());var R=new t(1).toRed(this),k=R.redNeg(),C=this.m.subn(1).iushrn(1),O=this.m.bitLength();for(O=new t(2*O*O).toRed(this);this.pow(O,C).cmp(k)!==0;)O.redIAdd(k);for(var W=this.pow(O,L),ne=this.pow(_,L.addn(1).iushrn(1)),he=this.pow(_,L),ue=$;he.cmp(R)!==0;){for(var Ae=he,pe=0;Ae.cmp(R)!==0;pe++)Ae=Ae.redSqr();u(pe=0;$--){for(var W=A.words[$],ne=O-1;ne>=0;ne--){var he=W>>ne&1;if(R!==L[0]&&(R=this.sqr(R)),he===0&&k===0){C=0;continue}k<<=1,k|=he,C++,!(C!==P&&($!==0||ne!==0))&&(R=this.mul(R,L[k]),C=0,k=0)}O=26}return R},H.prototype.convertTo=function(_){var A=_.umod(this.m);return A===_?A.clone():A},H.prototype.convertFrom=function(_){var A=_.clone();return A.red=null,A},t.mont=function(_){return new M(_)};function M(T){H.call(this,T),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new t(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}s(M,H),M.prototype.convertTo=function(_){return this.imod(_.ushln(this.shift))},M.prototype.convertFrom=function(_){var A=this.imod(_.mul(this.rinv));return A.red=null,A},M.prototype.imul=function(_,A){if(_.isZero()||A.isZero())return _.words[0]=0,_.length=1,_;var P=_.imul(A),L=P.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),$=P.isub(L).iushrn(this.shift),R=$;return $.cmp(this.m)>=0?R=$.isub(this.m):$.cmpn(0)<0&&(R=$.iadd(this.m)),R._forceRed(this)},M.prototype.mul=function(_,A){if(_.isZero()||A.isZero())return new t(0)._forceRed(this);var P=_.mul(A),L=P.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),$=P.isub(L).iushrn(this.shift),R=$;return $.cmp(this.m)>=0?R=$.isub(this.m):$.cmpn(0)<0&&(R=$.iadd(this.m)),R._forceRed(this)},M.prototype.invm=function(_){var A=this.imod(_._invmp(this.m).mul(this.r2));return A._forceRed(this)}})(typeof d>"u"||d,void 0)},{buffer:188}],187:[function(e,d,m){var f;d.exports=function(t){return f||(f=new c(null)),f.generate(t)};function c(s){this.rand=s}if(d.exports.Rand=c,c.prototype.generate=function(t){return this._rand(t)},c.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var n=new Uint8Array(t),r=0;r>>24]^h[E>>>16&255]^w[I>>>8&255]^y[F&255]^o[V++],j=v[E>>>24]^h[I>>>16&255]^w[F>>>8&255]^y[S&255]^o[V++],X=v[I>>>24]^h[F>>>16&255]^w[S>>>8&255]^y[E&255]^o[V++],G=v[F>>>24]^h[S>>>16&255]^w[E>>>8&255]^y[I&255]^o[V++],S=B,E=j,I=X,F=G;return B=(a[S>>>24]<<24|a[E>>>16&255]<<16|a[I>>>8&255]<<8|a[F&255])^o[V++],j=(a[E>>>24]<<24|a[I>>>16&255]<<16|a[F>>>8&255]<<8|a[S&255])^o[V++],X=(a[I>>>24]<<24|a[F>>>16&255]<<16|a[S>>>8&255]<<8|a[E&255])^o[V++],G=(a[F>>>24]<<24|a[S>>>16&255]<<16|a[E>>>8&255]<<8|a[I&255])^o[V++],B=B>>>0,j=j>>>0,X=X>>>0,G=G>>>0,[B,j,X,G]}var t=[0,1,2,4,8,16,32,64,128,27,54],n=function(){for(var i=new Array(256),o=0;o<256;o++)o<128?i[o]=o<<1:i[o]=o<<1^283;for(var l=[],a=[],g=[[],[],[],[]],v=[[],[],[],[]],h=0,w=0,y=0;y<256;++y){var S=w^w<<1^w<<2^w<<3^w<<4;S=S>>>8^S&255^99,l[h]=S,a[S]=h;var E=i[h],I=i[E],F=i[I],B=i[S]*257^S*16843008;g[0][h]=B<<24|B>>>8,g[1][h]=B<<16|B>>>16,g[2][h]=B<<8|B>>>24,g[3][h]=B,B=F*16843009^I*65537^E*257^h*16843008,v[0][S]=B<<24|B>>>8,v[1][S]=B<<16|B>>>16,v[2][S]=B<<8|B>>>24,v[3][S]=B,h===0?h=w=1:(h=E^i[i[i[F^E]]],w^=i[i[w]])}return{SBOX:l,INV_SBOX:a,SUB_MIX:g,INV_SUB_MIX:v}}();function r(i){this._key=c(i),this._reset()}r.blockSize=4*4,r.keySize=256/8,r.prototype.blockSize=r.blockSize,r.prototype.keySize=r.keySize,r.prototype._reset=function(){for(var i=this._key,o=i.length,l=o+6,a=(l+1)*4,g=[],v=0;v>>24,h=n.SBOX[h>>>24]<<24|n.SBOX[h>>>16&255]<<16|n.SBOX[h>>>8&255]<<8|n.SBOX[h&255],h^=t[v/o|0]<<24):o>6&&v%o===4&&(h=n.SBOX[h>>>24]<<24|n.SBOX[h>>>16&255]<<16|n.SBOX[h>>>8&255]<<8|n.SBOX[h&255]),g[v]=g[v-o]^h}for(var w=[],y=0;y>>24]]^n.INV_SUB_MIX[1][n.SBOX[E>>>16&255]]^n.INV_SUB_MIX[2][n.SBOX[E>>>8&255]]^n.INV_SUB_MIX[3][n.SBOX[E&255]]}this._nRounds=l,this._keySchedule=g,this._invKeySchedule=w},r.prototype.encryptBlockRaw=function(i){return i=c(i),s(i,this._keySchedule,n.SUB_MIX,n.SBOX,this._nRounds)},r.prototype.encryptBlock=function(i){var o=this.encryptBlockRaw(i),l=f.allocUnsafe(16);return l.writeUInt32BE(o[0],0),l.writeUInt32BE(o[1],4),l.writeUInt32BE(o[2],8),l.writeUInt32BE(o[3],12),l},r.prototype.decryptBlock=function(i){i=c(i);var o=i[1];i[1]=i[3],i[3]=o;var l=s(i,this._invKeySchedule,n.INV_SUB_MIX,n.INV_SBOX,this._nRounds),a=f.allocUnsafe(16);return a.writeUInt32BE(l[0],0),a.writeUInt32BE(l[3],4),a.writeUInt32BE(l[2],8),a.writeUInt32BE(l[1],12),a},r.prototype.scrub=function(){u(this._keySchedule),u(this._invKeySchedule),u(this._key)},d.exports.AES=r},{"safe-buffer":494}],190:[function(e,d,m){var f=e("./aes"),c=e("safe-buffer").Buffer,u=e("cipher-base"),s=e("inherits"),t=e("./ghash"),n=e("buffer-xor"),r=e("./incr32");function i(a,g){var v=0;a.length!==g.length&&v++;for(var h=Math.min(a.length,g.length),w=0;w16)return w=this.cache.slice(0,16),this.cache=this.cache.slice(16),w}else if(this.cache.length>=16)return w=this.cache.slice(0,16),this.cache=this.cache.slice(16),w;return null},l.prototype.flush=function(){if(this.cache.length)return this.cache};function a(h){var w=h[15];if(w<1||w>16)throw new Error("unable to decrypt data");for(var y=-1;++y15){var h=this.cache.slice(0,16);return this.cache=this.cache.slice(16),h}return null},a.prototype.flush=function(){for(var h=16-this.cache.length,w=u.allocUnsafe(h),y=-1;++y>>0,0),r.writeUInt32BE(n[1]>>>0,4),r.writeUInt32BE(n[2]>>>0,8),r.writeUInt32BE(n[3]>>>0,12),r}function t(n){this.h=n,this.state=f.alloc(16,0),this.cache=f.allocUnsafe(0)}t.prototype.ghash=function(n){for(var r=-1;++r0;i--)n[i]=n[i]>>>1|(n[i-1]&1)<<31;n[0]=n[0]>>>1,l&&(n[0]=n[0]^225<<24)}this.state=s(r)},t.prototype.update=function(n){this.cache=f.concat([this.cache,n]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},t.prototype.final=function(n,r){return this.cache.length&&this.ghash(f.concat([this.cache,c],16)),this.ghash(s([0,n,0,r])),this.state},d.exports=t},{"safe-buffer":494}],195:[function(e,d,m){function f(c){for(var u=c.length,s;u--;)if(s=c.readUInt8(u),s===255)c.writeUInt8(0,u);else{s++,c.writeUInt8(s,u);break}}d.exports=f},{}],196:[function(e,d,m){var f=e("buffer-xor");m.encrypt=function(c,u){var s=f(u,c._prev);return c._prev=c._cipher.encryptBlock(s),c._prev},m.decrypt=function(c,u){var s=c._prev;c._prev=u;var t=c._cipher.decryptBlock(u);return f(t,s)}},{"buffer-xor":219}],197:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("buffer-xor");function u(s,t,n){var r=t.length,i=c(t,s._cache);return s._cache=s._cache.slice(r),s._prev=f.concat([s._prev,n?t:i]),i}m.encrypt=function(s,t,n){for(var r=f.allocUnsafe(0),i;t.length;)if(s._cache.length===0&&(s._cache=s._cipher.encryptBlock(s._prev),s._prev=f.allocUnsafe(0)),s._cache.length<=t.length)i=s._cache.length,r=f.concat([r,u(s,t.slice(0,i),n)]),t=t.slice(i);else{r=f.concat([r,u(s,t,n)]);break}return r}},{"buffer-xor":219,"safe-buffer":494}],198:[function(e,d,m){var f=e("safe-buffer").Buffer;function c(s,t,n){for(var r,i=-1,o=8,l=0,a,g;++i>i%8,s._prev=u(s._prev,n?a:g);return l}function u(s,t){var n=s.length,r=-1,i=f.allocUnsafe(s.length);for(s=f.concat([s,f.from([t])]);++r>7;return i}m.encrypt=function(s,t,n){for(var r=t.length,i=f.allocUnsafe(r),o=-1;++o=0||!o.umod(r.prime1)||!o.umod(r.prime2));return o}function n(r,i){var o=s(i),l=i.modulus.byteLength(),a=new c(r).mul(o.blinder).umod(i.modulus),g=a.toRed(c.mont(i.prime1)),v=a.toRed(c.mont(i.prime2)),h=i.coefficient,w=i.prime1,y=i.prime2,S=g.redPow(i.exponent1).fromRed(),E=v.redPow(i.exponent2).fromRed(),I=S.isub(E).imul(h).umod(w).imul(y);return E.iadd(I).imul(o.unblinder).umod(i.modulus).toArrayLike(f,"be",l)}n.getr=t,d.exports=n}).call(this)}).call(this,e("buffer").Buffer)},{"bn.js":186,buffer:220,randombytes:475}],210:[function(e,d,m){d.exports=e("./browser/algorithms.json")},{"./browser/algorithms.json":211}],211:[function(e,d,m){d.exports={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}}},{}],212:[function(e,d,m){d.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}},{}],213:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("create-hash"),u=e("readable-stream"),s=e("inherits"),t=e("./sign"),n=e("./verify"),r=e("./algorithms.json");Object.keys(r).forEach(function(g){r[g].id=f.from(r[g].id,"hex"),r[g.toLowerCase()]=r[g]});function i(g){u.Writable.call(this);var v=r[g];if(!v)throw new Error("Unknown message digest");this._hashType=v.hash,this._hash=c(v.hash),this._tag=v.id,this._signType=v.sign}s(i,u.Writable),i.prototype._write=function(v,h,w){this._hash.update(v),w()},i.prototype.update=function(v,h){return typeof v=="string"&&(v=f.from(v,h)),this._hash.update(v),this},i.prototype.sign=function(v,h){this.end();var w=this._hash.digest(),y=t(w,v,this._hashType,this._signType,this._tag);return h?y.toString(h):y};function o(g){u.Writable.call(this);var v=r[g];if(!v)throw new Error("Unknown message digest");this._hash=c(v.hash),this._tag=v.id,this._signType=v.sign}s(o,u.Writable),o.prototype._write=function(v,h,w){this._hash.update(v),w()},o.prototype.update=function(v,h){return typeof v=="string"&&(v=f.from(v,h)),this._hash.update(v),this},o.prototype.verify=function(v,h,w){typeof h=="string"&&(h=f.from(h,w)),this.end();var y=this._hash.digest();return n(h,y,v,this._signType,this._tag)};function l(g){return new i(g)}function a(g){return new o(g)}d.exports={Sign:l,Verify:a,createSign:l,createVerify:a}},{"./algorithms.json":211,"./sign":214,"./verify":215,"create-hash":386,inherits:440,"readable-stream":491,"safe-buffer":494}],214:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("create-hmac"),u=e("browserify-rsa"),s=e("elliptic").ec,t=e("bn.js"),n=e("parse-asn1"),r=e("./curves.json");function i(S,E,I,F,B){var j=n(E);if(j.curve){if(F!=="ecdsa"&&F!=="ecdsa/rsa")throw new Error("wrong private key type");return o(S,j)}else if(j.type==="dsa"){if(F!=="dsa")throw new Error("wrong private key type");return l(S,j,I)}else if(F!=="rsa"&&F!=="ecdsa/rsa")throw new Error("wrong private key type");S=f.concat([B,S]);for(var X=j.modulus.byteLength(),G=[0,1];S.length+G.length+10&&I.ishrn(F),I}function h(S,E){S=v(S,E),S=S.mod(E);var I=f.from(S.toArray());if(I.length=a)throw new Error("invalid sig")}d.exports=n},{"./curves.json":212,"bn.js":186,elliptic:405,"parse-asn1":459,"safe-buffer":494}],216:[function(e,d,m){},{}],217:[function(e,d,m){var f=e("buffer"),c=f.Buffer;function u(t,n){for(var r in t)n[r]=t[r]}c.from&&c.alloc&&c.allocUnsafe&&c.allocUnsafeSlow?d.exports=f:(u(f,m),m.Buffer=s);function s(t,n,r){return c(t,n,r)}u(c,s),s.from=function(t,n,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return c(t,n,r)},s.alloc=function(t,n,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=c(t);return n!==void 0?typeof r=="string"?i.fill(n,r):i.fill(n):i.fill(0),i},s.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return c(t)},s.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return f.SlowBuffer(t)}},{buffer:220}],218:[function(e,d,m){var f=e("safe-buffer").Buffer,c=f.isEncoding||function(E){switch(E=""+E,E&&E.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function u(E){if(!E)return"utf8";for(var I;;)switch(E){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return E;default:if(I)return;E=(""+E).toLowerCase(),I=!0}}function s(E){var I=u(E);if(typeof I!="string"&&(f.isEncoding===c||!c(E)))throw new Error("Unknown encoding: "+E);return I||E}m.StringDecoder=t;function t(E){this.encoding=s(E);var I;switch(this.encoding){case"utf16le":this.text=g,this.end=v,I=4;break;case"utf8":this.fillLast=o,I=4;break;case"base64":this.text=h,this.end=w,I=3;break;default:this.write=y,this.end=S;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=f.allocUnsafe(I)}t.prototype.write=function(E){if(E.length===0)return"";var I,F;if(this.lastNeed){if(I=this.fillLast(E),I===void 0)return"";F=this.lastNeed,this.lastNeed=0}else F=0;return F>5===6?2:E>>4===14?3:E>>3===30?4:E>>6===2?-1:-2}function r(E,I,F){var B=I.length-1;if(B=0?(j>0&&(E.lastNeed=j-1),j):--B=0?(j>0&&(E.lastNeed=j-2),j):--B=0?(j>0&&(j===2?j=0:E.lastNeed=j-3),j):0))}function i(E,I,F){if((I[0]&192)!==128)return E.lastNeed=0,"�";if(E.lastNeed>1&&I.length>1){if((I[1]&192)!==128)return E.lastNeed=1,"�";if(E.lastNeed>2&&I.length>2&&(I[2]&192)!==128)return E.lastNeed=2,"�"}}function o(E){var I=this.lastTotal-this.lastNeed,F=i(this,E);if(F!==void 0)return F;if(this.lastNeed<=E.length)return E.copy(this.lastChar,I,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);E.copy(this.lastChar,I,0,E.length),this.lastNeed-=E.length}function l(E,I){var F=r(this,E,I);if(!this.lastNeed)return E.toString("utf8",I);this.lastTotal=F;var B=E.length-(F-this.lastNeed);return E.copy(this.lastChar,0,B),E.toString("utf8",I,B)}function a(E){var I=E&&E.length?this.write(E):"";return this.lastNeed?I+"�":I}function g(E,I){if((E.length-I)%2===0){var F=E.toString("utf16le",I);if(F){var B=F.charCodeAt(F.length-1);if(B>=55296&&B<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=E[E.length-2],this.lastChar[1]=E[E.length-1],F.slice(0,-1)}return F}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=E[E.length-1],E.toString("utf16le",I,E.length-1)}function v(E){var I=E&&E.length?this.write(E):"";if(this.lastNeed){var F=this.lastTotal-this.lastNeed;return I+this.lastChar.toString("utf16le",0,F)}return I}function h(E,I){var F=(E.length-I)%3;return F===0?E.toString("base64",I):(this.lastNeed=3-F,this.lastTotal=3,F===1?this.lastChar[0]=E[E.length-1]:(this.lastChar[0]=E[E.length-2],this.lastChar[1]=E[E.length-1]),E.toString("base64",I,E.length-F))}function w(E){var I=E&&E.length?this.write(E):"";return this.lastNeed?I+this.lastChar.toString("base64",0,3-this.lastNeed):I}function y(E){return E.toString(this.encoding)}function S(E){return E&&E.length?this.write(E):""}},{"safe-buffer":217}],219:[function(e,d,m){(function(f){(function(){d.exports=function(u,s){for(var t=Math.min(u.length,s.length),n=new f(t),r=0;rs)throw new RangeError('The value "'+Q+'" is invalid for option "size"');var z=new Uint8Array(Q);return z.__proto__=r.prototype,z}function r(Q,z,Y){if(typeof Q=="number"){if(typeof z=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return a(Q)}return i(Q,z,Y)}typeof Symbol<"u"&&Symbol.species!=null&&r[Symbol.species]===r&&Object.defineProperty(r,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),r.poolSize=8192;function i(Q,z,Y){if(typeof Q=="string")return g(Q,z);if(ArrayBuffer.isView(Q))return v(Q);if(Q==null)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Q);if(oe(Q,ArrayBuffer)||Q&&oe(Q.buffer,ArrayBuffer))return h(Q,z,Y);if(typeof Q=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var fe=Q.valueOf&&Q.valueOf();if(fe!=null&&fe!==Q)return r.from(fe,z,Y);var we=w(Q);if(we)return we;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof Q[Symbol.toPrimitive]=="function")return r.from(Q[Symbol.toPrimitive]("string"),z,Y);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Q)}r.from=function(Q,z,Y){return i(Q,z,Y)},r.prototype.__proto__=Uint8Array.prototype,r.__proto__=Uint8Array;function o(Q){if(typeof Q!="number")throw new TypeError('"size" argument must be of type number');if(Q<0)throw new RangeError('The value "'+Q+'" is invalid for option "size"')}function l(Q,z,Y){return o(Q),Q<=0?n(Q):z!==void 0?typeof Y=="string"?n(Q).fill(z,Y):n(Q).fill(z):n(Q)}r.alloc=function(Q,z,Y){return l(Q,z,Y)};function a(Q){return o(Q),n(Q<0?0:y(Q)|0)}r.allocUnsafe=function(Q){return a(Q)},r.allocUnsafeSlow=function(Q){return a(Q)};function g(Q,z){if((typeof z!="string"||z==="")&&(z="utf8"),!r.isEncoding(z))throw new TypeError("Unknown encoding: "+z);var Y=E(Q,z)|0,fe=n(Y),we=fe.write(Q,z);return we!==Y&&(fe=fe.slice(0,we)),fe}function v(Q){for(var z=Q.length<0?0:y(Q.length)|0,Y=n(z),fe=0;fe=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return Q|0}function S(Q){return+Q!=Q&&(Q=0),r.alloc(+Q)}r.isBuffer=function(z){return z!=null&&z._isBuffer===!0&&z!==r.prototype},r.compare=function(z,Y){if(oe(z,Uint8Array)&&(z=r.from(z,z.offset,z.byteLength)),oe(Y,Uint8Array)&&(Y=r.from(Y,Y.offset,Y.byteLength)),!r.isBuffer(z)||!r.isBuffer(Y))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(z===Y)return 0;for(var fe=z.length,we=Y.length,U=0,ve=Math.min(fe,we);U2&&arguments[2]===!0;if(!fe&&Y===0)return 0;for(var we=!1;;)switch(z){case"ascii":case"latin1":case"binary":return Y;case"utf8":case"utf-8":return te(Q).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Y*2;case"hex":return Y>>>1;case"base64":return de(Q).length;default:if(we)return fe?-1:te(Q).length;z=(""+z).toLowerCase(),we=!0}}r.byteLength=E;function I(Q,z,Y){var fe=!1;if((z===void 0||z<0)&&(z=0),z>this.length||((Y===void 0||Y>this.length)&&(Y=this.length),Y<=0)||(Y>>>=0,z>>>=0,Y<=z))return"";for(Q||(Q="utf8");;)switch(Q){case"hex":return R(this,z,Y);case"utf8":case"utf-8":return _(this,z,Y);case"ascii":return L(this,z,Y);case"latin1":case"binary":return $(this,z,Y);case"base64":return T(this,z,Y);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,z,Y);default:if(fe)throw new TypeError("Unknown encoding: "+Q);Q=(Q+"").toLowerCase(),fe=!0}}r.prototype._isBuffer=!0;function F(Q,z,Y){var fe=Q[z];Q[z]=Q[Y],Q[Y]=fe}r.prototype.swap16=function(){var z=this.length;if(z%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var Y=0;YY&&(z+=" ... "),""},r.prototype.compare=function(z,Y,fe,we,U){if(oe(z,Uint8Array)&&(z=r.from(z,z.offset,z.byteLength)),!r.isBuffer(z))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof z);if(Y===void 0&&(Y=0),fe===void 0&&(fe=z?z.length:0),we===void 0&&(we=0),U===void 0&&(U=this.length),Y<0||fe>z.length||we<0||U>this.length)throw new RangeError("out of range index");if(we>=U&&Y>=fe)return 0;if(we>=U)return-1;if(Y>=fe)return 1;if(Y>>>=0,fe>>>=0,we>>>=0,U>>>=0,this===z)return 0;for(var ve=U-we,Se=fe-Y,ee=Math.min(ve,Se),se=this.slice(we,U),me=z.slice(Y,fe),Ee=0;Ee2147483647?Y=2147483647:Y<-2147483648&&(Y=-2147483648),Y=+Y,ie(Y)&&(Y=we?0:Q.length-1),Y<0&&(Y=Q.length+Y),Y>=Q.length){if(we)return-1;Y=Q.length-1}else if(Y<0)if(we)Y=0;else return-1;if(typeof z=="string"&&(z=r.from(z,fe)),r.isBuffer(z))return z.length===0?-1:j(Q,z,Y,fe,we);if(typeof z=="number")return z=z&255,typeof Uint8Array.prototype.indexOf=="function"?we?Uint8Array.prototype.indexOf.call(Q,z,Y):Uint8Array.prototype.lastIndexOf.call(Q,z,Y):j(Q,[z],Y,fe,we);throw new TypeError("val must be string, number or Buffer")}function j(Q,z,Y,fe,we){var U=1,ve=Q.length,Se=z.length;if(fe!==void 0&&(fe=String(fe).toLowerCase(),fe==="ucs2"||fe==="ucs-2"||fe==="utf16le"||fe==="utf-16le")){if(Q.length<2||z.length<2)return-1;U=2,ve/=2,Se/=2,Y/=2}function ee(Ce,Fe){return U===1?Ce[Fe]:Ce.readUInt16BE(Fe*U)}var se;if(we){var me=-1;for(se=Y;seve&&(Y=ve-Se),se=Y;se>=0;se--){for(var Ee=!0,Ie=0;Iewe&&(fe=we)):fe=we;var U=z.length;fe>U/2&&(fe=U/2);for(var ve=0;ve>>0,isFinite(fe)?(fe=fe>>>0,we===void 0&&(we="utf8")):(we=fe,fe=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var U=this.length-Y;if((fe===void 0||fe>U)&&(fe=U),z.length>0&&(fe<0||Y<0)||Y>this.length)throw new RangeError("Attempt to write outside buffer bounds");we||(we="utf8");for(var ve=!1;;)switch(we){case"hex":return X(this,z,Y,fe);case"utf8":case"utf-8":return G(this,z,Y,fe);case"ascii":return V(this,z,Y,fe);case"latin1":case"binary":return J(this,z,Y,fe);case"base64":return H(this,z,Y,fe);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,z,Y,fe);default:if(ve)throw new TypeError("Unknown encoding: "+we);we=(""+we).toLowerCase(),ve=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(Q,z,Y){return z===0&&Y===Q.length?c.fromByteArray(Q):c.fromByteArray(Q.slice(z,Y))}function _(Q,z,Y){Y=Math.min(Q.length,Y);for(var fe=[],we=z;we239?4:U>223?3:U>191?2:1;if(we+Se<=Y){var ee,se,me,Ee;switch(Se){case 1:U<128&&(ve=U);break;case 2:ee=Q[we+1],(ee&192)===128&&(Ee=(U&31)<<6|ee&63,Ee>127&&(ve=Ee));break;case 3:ee=Q[we+1],se=Q[we+2],(ee&192)===128&&(se&192)===128&&(Ee=(U&15)<<12|(ee&63)<<6|se&63,Ee>2047&&(Ee<55296||Ee>57343)&&(ve=Ee));break;case 4:ee=Q[we+1],se=Q[we+2],me=Q[we+3],(ee&192)===128&&(se&192)===128&&(me&192)===128&&(Ee=(U&15)<<18|(ee&63)<<12|(se&63)<<6|me&63,Ee>65535&&Ee<1114112&&(ve=Ee))}}ve===null?(ve=65533,Se=1):ve>65535&&(ve-=65536,fe.push(ve>>>10&1023|55296),ve=56320|ve&1023),fe.push(ve),we+=Se}return P(fe)}var A=4096;function P(Q){var z=Q.length;if(z<=A)return String.fromCharCode.apply(String,Q);for(var Y="",fe=0;fefe)&&(Y=fe);for(var we="",U=z;Ufe&&(z=fe),Y<0?(Y+=fe,Y<0&&(Y=0)):Y>fe&&(Y=fe),YY)throw new RangeError("Trying to access beyond buffer length")}r.prototype.readUIntLE=function(z,Y,fe){z=z>>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=this[z],U=1,ve=0;++ve>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=this[z+--Y],U=1;Y>0&&(U*=256);)we+=this[z+--Y]*U;return we},r.prototype.readUInt8=function(z,Y){return z=z>>>0,Y||C(z,1,this.length),this[z]},r.prototype.readUInt16LE=function(z,Y){return z=z>>>0,Y||C(z,2,this.length),this[z]|this[z+1]<<8},r.prototype.readUInt16BE=function(z,Y){return z=z>>>0,Y||C(z,2,this.length),this[z]<<8|this[z+1]},r.prototype.readUInt32LE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),(this[z]|this[z+1]<<8|this[z+2]<<16)+this[z+3]*16777216},r.prototype.readUInt32BE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),this[z]*16777216+(this[z+1]<<16|this[z+2]<<8|this[z+3])},r.prototype.readIntLE=function(z,Y,fe){z=z>>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=this[z],U=1,ve=0;++ve=U&&(we-=Math.pow(2,8*Y)),we},r.prototype.readIntBE=function(z,Y,fe){z=z>>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=Y,U=1,ve=this[z+--we];we>0&&(U*=256);)ve+=this[z+--we]*U;return U*=128,ve>=U&&(ve-=Math.pow(2,8*Y)),ve},r.prototype.readInt8=function(z,Y){return z=z>>>0,Y||C(z,1,this.length),this[z]&128?(255-this[z]+1)*-1:this[z]},r.prototype.readInt16LE=function(z,Y){z=z>>>0,Y||C(z,2,this.length);var fe=this[z]|this[z+1]<<8;return fe&32768?fe|4294901760:fe},r.prototype.readInt16BE=function(z,Y){z=z>>>0,Y||C(z,2,this.length);var fe=this[z+1]|this[z]<<8;return fe&32768?fe|4294901760:fe},r.prototype.readInt32LE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),this[z]|this[z+1]<<8|this[z+2]<<16|this[z+3]<<24},r.prototype.readInt32BE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),this[z]<<24|this[z+1]<<16|this[z+2]<<8|this[z+3]},r.prototype.readFloatLE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),u.read(this,z,!0,23,4)},r.prototype.readFloatBE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),u.read(this,z,!1,23,4)},r.prototype.readDoubleLE=function(z,Y){return z=z>>>0,Y||C(z,8,this.length),u.read(this,z,!0,52,8)},r.prototype.readDoubleBE=function(z,Y){return z=z>>>0,Y||C(z,8,this.length),u.read(this,z,!1,52,8)};function O(Q,z,Y,fe,we,U){if(!r.isBuffer(Q))throw new TypeError('"buffer" argument must be a Buffer instance');if(z>we||zQ.length)throw new RangeError("Index out of range")}r.prototype.writeUIntLE=function(z,Y,fe,we){if(z=+z,Y=Y>>>0,fe=fe>>>0,!we){var U=Math.pow(2,8*fe)-1;O(this,z,Y,fe,U,0)}var ve=1,Se=0;for(this[Y]=z&255;++Se>>0,fe=fe>>>0,!we){var U=Math.pow(2,8*fe)-1;O(this,z,Y,fe,U,0)}var ve=fe-1,Se=1;for(this[Y+ve]=z&255;--ve>=0&&(Se*=256);)this[Y+ve]=z/Se&255;return Y+fe},r.prototype.writeUInt8=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,1,255,0),this[Y]=z&255,Y+1},r.prototype.writeUInt16LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,65535,0),this[Y]=z&255,this[Y+1]=z>>>8,Y+2},r.prototype.writeUInt16BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,65535,0),this[Y]=z>>>8,this[Y+1]=z&255,Y+2},r.prototype.writeUInt32LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,4294967295,0),this[Y+3]=z>>>24,this[Y+2]=z>>>16,this[Y+1]=z>>>8,this[Y]=z&255,Y+4},r.prototype.writeUInt32BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,4294967295,0),this[Y]=z>>>24,this[Y+1]=z>>>16,this[Y+2]=z>>>8,this[Y+3]=z&255,Y+4},r.prototype.writeIntLE=function(z,Y,fe,we){if(z=+z,Y=Y>>>0,!we){var U=Math.pow(2,8*fe-1);O(this,z,Y,fe,U-1,-U)}var ve=0,Se=1,ee=0;for(this[Y]=z&255;++ve>0)-ee&255;return Y+fe},r.prototype.writeIntBE=function(z,Y,fe,we){if(z=+z,Y=Y>>>0,!we){var U=Math.pow(2,8*fe-1);O(this,z,Y,fe,U-1,-U)}var ve=fe-1,Se=1,ee=0;for(this[Y+ve]=z&255;--ve>=0&&(Se*=256);)z<0&&ee===0&&this[Y+ve+1]!==0&&(ee=1),this[Y+ve]=(z/Se>>0)-ee&255;return Y+fe},r.prototype.writeInt8=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,1,127,-128),z<0&&(z=255+z+1),this[Y]=z&255,Y+1},r.prototype.writeInt16LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,32767,-32768),this[Y]=z&255,this[Y+1]=z>>>8,Y+2},r.prototype.writeInt16BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,32767,-32768),this[Y]=z>>>8,this[Y+1]=z&255,Y+2},r.prototype.writeInt32LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,2147483647,-2147483648),this[Y]=z&255,this[Y+1]=z>>>8,this[Y+2]=z>>>16,this[Y+3]=z>>>24,Y+4},r.prototype.writeInt32BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,2147483647,-2147483648),z<0&&(z=4294967295+z+1),this[Y]=z>>>24,this[Y+1]=z>>>16,this[Y+2]=z>>>8,this[Y+3]=z&255,Y+4};function W(Q,z,Y,fe,we,U){if(Y+fe>Q.length)throw new RangeError("Index out of range");if(Y<0)throw new RangeError("Index out of range")}function ne(Q,z,Y,fe,we){return z=+z,Y=Y>>>0,we||W(Q,z,Y,4),u.write(Q,z,Y,fe,23,4),Y+4}r.prototype.writeFloatLE=function(z,Y,fe){return ne(this,z,Y,!0,fe)},r.prototype.writeFloatBE=function(z,Y,fe){return ne(this,z,Y,!1,fe)};function he(Q,z,Y,fe,we){return z=+z,Y=Y>>>0,we||W(Q,z,Y,8),u.write(Q,z,Y,fe,52,8),Y+8}r.prototype.writeDoubleLE=function(z,Y,fe){return he(this,z,Y,!0,fe)},r.prototype.writeDoubleBE=function(z,Y,fe){return he(this,z,Y,!1,fe)},r.prototype.copy=function(z,Y,fe,we){if(!r.isBuffer(z))throw new TypeError("argument should be a Buffer");if(fe||(fe=0),!we&&we!==0&&(we=this.length),Y>=z.length&&(Y=z.length),Y||(Y=0),we>0&&we=this.length)throw new RangeError("Index out of range");if(we<0)throw new RangeError("sourceEnd out of bounds");we>this.length&&(we=this.length),z.length-Y=0;--ve)z[ve+Y]=this[ve+fe];else Uint8Array.prototype.set.call(z,this.subarray(fe,we),Y);return U},r.prototype.fill=function(z,Y,fe,we){if(typeof z=="string"){if(typeof Y=="string"?(we=Y,Y=0,fe=this.length):typeof fe=="string"&&(we=fe,fe=this.length),we!==void 0&&typeof we!="string")throw new TypeError("encoding must be a string");if(typeof we=="string"&&!r.isEncoding(we))throw new TypeError("Unknown encoding: "+we);if(z.length===1){var U=z.charCodeAt(0);(we==="utf8"&&U<128||we==="latin1")&&(z=U)}}else typeof z=="number"&&(z=z&255);if(Y<0||this.length>>0,fe=fe===void 0?this.length:fe>>>0,z||(z=0);var ve;if(typeof z=="number")for(ve=Y;ve55295&&Y<57344){if(!we){if(Y>56319){(z-=3)>-1&&U.push(239,191,189);continue}else if(ve+1===fe){(z-=3)>-1&&U.push(239,191,189);continue}we=Y;continue}if(Y<56320){(z-=3)>-1&&U.push(239,191,189),we=Y;continue}Y=(we-55296<<10|Y-56320)+65536}else we&&(z-=3)>-1&&U.push(239,191,189);if(we=null,Y<128){if((z-=1)<0)break;U.push(Y)}else if(Y<2048){if((z-=2)<0)break;U.push(Y>>6|192,Y&63|128)}else if(Y<65536){if((z-=3)<0)break;U.push(Y>>12|224,Y>>6&63|128,Y&63|128)}else if(Y<1114112){if((z-=4)<0)break;U.push(Y>>18|240,Y>>12&63|128,Y>>6&63|128,Y&63|128)}else throw new Error("Invalid code point")}return U}function Z(Q){for(var z=[],Y=0;Y>8,we=Y%256,U.push(we),U.push(fe);return U}function de(Q){return c.toByteArray(Ae(Q))}function ke(Q,z,Y,fe){for(var we=0;we=z.length||we>=Q.length);++we)z[we+Y]=Q[we];return we}function oe(Q,z){return Q instanceof z||Q!=null&&Q.constructor!=null&&Q.constructor.name!=null&&Q.constructor.name===z.name}function ie(Q){return Q!==Q}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":185,buffer:220,ieee754:439}],221:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("stream").Transform,u=e("string_decoder").StringDecoder,s=e("inherits");function t(n){c.call(this),this.hashMode=typeof n=="string",this.hashMode?this[n]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}s(t,c),t.prototype.update=function(n,r,i){typeof n=="string"&&(n=f.from(n,r));var o=this._update(n);return this.hashMode?this:(i&&(o=this._toString(o,i)),o)},t.prototype.setAutoPadding=function(){},t.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},t.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},t.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},t.prototype._transform=function(n,r,i){var o;try{this.hashMode?this._update(n):this.push(this._update(n))}catch(l){o=l}finally{i(o)}},t.prototype._flush=function(n){var r;try{this.push(this.__final())}catch(i){r=i}n(r)},t.prototype._finalOrDigest=function(n){var r=this.__final()||f.alloc(0);return n&&(r=this._toString(r,n,!0)),r},t.prototype._toString=function(n,r,i){if(this._decoder||(this._decoder=new u(r),this._encoding=r),this._encoding!==r)throw new Error("can't switch encodings");var o=this._decoder.write(n);return i&&(o+=this._decoder.end()),o},d.exports=t},{inherits:440,"safe-buffer":494,stream:505,string_decoder:218}],222:[function(e,d,m){var f=e("../internals/is-callable"),c=e("../internals/try-to-string"),u=TypeError;d.exports=function(s){if(f(s))return s;throw new u(c(s)+" is not a function")}},{"../internals/is-callable":285,"../internals/try-to-string":349}],223:[function(e,d,m){var f=e("../internals/is-constructor"),c=e("../internals/try-to-string"),u=TypeError;d.exports=function(s){if(f(s))return s;throw new u(c(s)+" is not a constructor")}},{"../internals/is-constructor":286,"../internals/try-to-string":349}],224:[function(e,d,m){var f=e("../internals/is-callable"),c=String,u=TypeError;d.exports=function(s){if(typeof s=="object"||f(s))return s;throw new u("Can't set "+c(s)+" as a prototype")}},{"../internals/is-callable":285}],225:[function(e,d,m){var f=e("../internals/well-known-symbol"),c=e("../internals/object-create"),u=e("../internals/object-define-property").f,s=f("unscopables"),t=Array.prototype;t[s]===void 0&&u(t,s,{configurable:!0,value:c(null)}),d.exports=function(n){t[s][n]=!0}},{"../internals/object-create":306,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],226:[function(e,d,m){var f=e("../internals/object-is-prototype-of"),c=TypeError;d.exports=function(u,s){if(f(s,u))return u;throw new c("Incorrect invocation")}},{"../internals/object-is-prototype-of":314}],227:[function(e,d,m){var f=e("../internals/is-object"),c=String,u=TypeError;d.exports=function(s){if(f(s))return s;throw new u(c(s)+" is not an object")}},{"../internals/is-object":289}],228:[function(e,d,m){var f=e("../internals/to-indexed-object"),c=e("../internals/to-absolute-index"),u=e("../internals/length-of-array-like"),s=function(t){return function(n,r,i){var o=f(n),l=u(o),a=c(i,l),g;if(t&&r!==r){for(;l>a;)if(g=o[a++],g!==g)return!0}else for(;l>a;a++)if((t||a in o)&&o[a]===r)return t||a||0;return!t&&-1}};d.exports={includes:s(!0),indexOf:s(!1)}},{"../internals/length-of-array-like":299,"../internals/to-absolute-index":340,"../internals/to-indexed-object":341}],229:[function(e,d,m){var f=e("../internals/function-bind-context"),c=e("../internals/function-uncurry-this"),u=e("../internals/indexed-object"),s=e("../internals/to-object"),t=e("../internals/length-of-array-like"),n=e("../internals/array-species-create"),r=c([].push),i=function(o){var l=o===1,a=o===2,g=o===3,v=o===4,h=o===6,w=o===7,y=o===5||h;return function(S,E,I,F){for(var B=s(S),j=u(B),X=f(E,I),G=t(j),V=0,J=F||n,H=l?J(S,G):a||w?J(S,0):void 0,M,T;G>V;V++)if((y||V in j)&&(M=j[V],T=X(M,V,B),o))if(l)H[V]=T;else if(T)switch(o){case 3:return!0;case 5:return M;case 6:return V;case 2:r(H,M)}else switch(o){case 4:return!1;case 7:r(H,M)}return h?-1:g||v?v:H}};d.exports={forEach:i(0),map:i(1),filter:i(2),some:i(3),every:i(4),find:i(5),findIndex:i(6),filterReject:i(7)}},{"../internals/array-species-create":233,"../internals/function-bind-context":262,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/length-of-array-like":299,"../internals/to-object":344}],230:[function(e,d,m){var f=e("../internals/to-absolute-index"),c=e("../internals/length-of-array-like"),u=e("../internals/create-property"),s=Array,t=Math.max;d.exports=function(n,r,i){for(var o=c(n),l=f(r,o),a=f(i===void 0?o:i,o),g=s(t(a-l,0)),v=0;l"u"&&f!==void 0;d.exports={all:f,IS_HTMLDDA:c}},{}],249:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/is-object"),u=f.document,s=c(u)&&c(u.createElement);d.exports=function(t){return s?u.createElement(t):{}}},{"../internals/global":274,"../internals/is-object":289}],250:[function(e,d,m){var f=e("../internals/engine-is-deno"),c=e("../internals/engine-is-node");d.exports=!f&&!c&&typeof window=="object"&&typeof document=="object"},{"../internals/engine-is-deno":251,"../internals/engine-is-node":254}],251:[function(e,d,m){d.exports=typeof Deno=="object"&&Deno&&typeof Deno.version=="object"},{}],252:[function(e,d,m){var f=e("../internals/engine-user-agent");d.exports=/ipad|iphone|ipod/i.test(f)&&typeof Pebble<"u"},{"../internals/engine-user-agent":256}],253:[function(e,d,m){var f=e("../internals/engine-user-agent");d.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(f)},{"../internals/engine-user-agent":256}],254:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/classof-raw");d.exports=c(f.process)==="process"},{"../internals/classof-raw":235,"../internals/global":274}],255:[function(e,d,m){var f=e("../internals/engine-user-agent");d.exports=/web0s(?!.*chrome)/i.test(f)},{"../internals/engine-user-agent":256}],256:[function(e,d,m){d.exports=typeof navigator<"u"&&String(navigator.userAgent)||""},{}],257:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/engine-user-agent"),u=f.process,s=f.Deno,t=u&&u.versions||s&&s.version,n=t&&t.v8,r,i;n&&(r=n.split("."),i=r[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&c&&(r=c.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=c.match(/Chrome\/(\d+)/),r&&(i=+r[1]))),d.exports=i},{"../internals/engine-user-agent":256,"../internals/global":274}],258:[function(e,d,m){d.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],259:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/object-get-own-property-descriptor").f,u=e("../internals/create-non-enumerable-property"),s=e("../internals/define-built-in"),t=e("../internals/define-global-property"),n=e("../internals/copy-constructor-properties"),r=e("../internals/is-forced");d.exports=function(i,o){var l=i.target,a=i.global,g=i.stat,v,h,w,y,S,E;if(a?h=f:g?h=f[l]||t(l,{}):h=(f[l]||{}).prototype,h)for(w in o){if(S=o[w],i.dontCallGetSet?(E=c(h,w),y=E&&E.value):y=h[w],v=r(a?w:l+(g?".":"#")+w,i.forced),!v&&y!==void 0){if(typeof S==typeof y)continue;n(S,y)}(i.sham||y&&y.sham)&&u(S,"sham",!0),s(h,w,S,i)}}},{"../internals/copy-constructor-properties":237,"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/define-global-property":246,"../internals/global":274,"../internals/is-forced":287,"../internals/object-get-own-property-descriptor":309}],260:[function(e,d,m){d.exports=function(f){try{return!!f()}catch{return!0}}},{}],261:[function(e,d,m){var f=e("../internals/function-bind-native"),c=Function.prototype,u=c.apply,s=c.call;d.exports=typeof Reflect=="object"&&Reflect.apply||(f?s.bind(u):function(){return s.apply(u,arguments)})},{"../internals/function-bind-native":263}],262:[function(e,d,m){var f=e("../internals/function-uncurry-this-clause"),c=e("../internals/a-callable"),u=e("../internals/function-bind-native"),s=f(f.bind);d.exports=function(t,n){return c(t),n===void 0?t:u?s(t,n):function(){return t.apply(n,arguments)}}},{"../internals/a-callable":222,"../internals/function-bind-native":263,"../internals/function-uncurry-this-clause":267}],263:[function(e,d,m){var f=e("../internals/fails");d.exports=!f(function(){var c=(function(){}).bind();return typeof c!="function"||c.hasOwnProperty("prototype")})},{"../internals/fails":260}],264:[function(e,d,m){var f=e("../internals/function-bind-native"),c=Function.prototype.call;d.exports=f?c.bind(c):function(){return c.apply(c,arguments)}},{"../internals/function-bind-native":263}],265:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/has-own-property"),u=Function.prototype,s=f&&Object.getOwnPropertyDescriptor,t=c(u,"name"),n=t&&(function(){}).name==="something",r=t&&(!f||f&&s(u,"name").configurable);d.exports={EXISTS:t,PROPER:n,CONFIGURABLE:r}},{"../internals/descriptors":247,"../internals/has-own-property":275}],266:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/a-callable");d.exports=function(u,s,t){try{return f(c(Object.getOwnPropertyDescriptor(u,s)[t]))}catch{}}},{"../internals/a-callable":222,"../internals/function-uncurry-this":268}],267:[function(e,d,m){var f=e("../internals/classof-raw"),c=e("../internals/function-uncurry-this");d.exports=function(u){if(f(u)==="Function")return c(u)}},{"../internals/classof-raw":235,"../internals/function-uncurry-this":268}],268:[function(e,d,m){var f=e("../internals/function-bind-native"),c=Function.prototype,u=c.call,s=f&&c.bind.bind(u,u);d.exports=f?s:function(t){return function(){return u.apply(t,arguments)}}},{"../internals/function-bind-native":263}],269:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/is-callable"),u=function(s){return c(s)?s:void 0};d.exports=function(s,t){return arguments.length<2?u(f[s]):f[s]&&f[s][t]}},{"../internals/global":274,"../internals/is-callable":285}],270:[function(e,d,m){var f=e("../internals/classof"),c=e("../internals/get-method"),u=e("../internals/is-null-or-undefined"),s=e("../internals/iterators"),t=e("../internals/well-known-symbol"),n=t("iterator");d.exports=function(r){if(!u(r))return c(r,n)||c(r,"@@iterator")||s[f(r)]}},{"../internals/classof":236,"../internals/get-method":273,"../internals/is-null-or-undefined":288,"../internals/iterators":298,"../internals/well-known-symbol":357}],271:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/a-callable"),u=e("../internals/an-object"),s=e("../internals/try-to-string"),t=e("../internals/get-iterator-method"),n=TypeError;d.exports=function(r,i){var o=arguments.length<2?t(r):i;if(c(o))return u(f(o,r));throw new n(s(r)+" is not iterable")}},{"../internals/a-callable":222,"../internals/an-object":227,"../internals/function-call":264,"../internals/get-iterator-method":270,"../internals/try-to-string":349}],272:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/is-array"),u=e("../internals/is-callable"),s=e("../internals/classof-raw"),t=e("../internals/to-string"),n=f([].push);d.exports=function(r){if(u(r))return r;if(c(r)){for(var i=r.length,o=[],l=0;lV;V++)if(H=A(h[V]),H&&r(v,H))return H;return new g(!1)}X=i(h,G)}for(M=I?h.next:X.next;!(T=c(M,X)).done;){try{H=A(T.value)}catch(P){l(X,"throw",P)}if(typeof H=="object"&&H&&r(v,H))return H}return new g(!1)}},{"../internals/an-object":227,"../internals/function-bind-context":262,"../internals/function-call":264,"../internals/get-iterator":271,"../internals/get-iterator-method":270,"../internals/is-array-iterator-method":283,"../internals/iterator-close":294,"../internals/length-of-array-like":299,"../internals/object-is-prototype-of":314,"../internals/try-to-string":349}],294:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/an-object"),u=e("../internals/get-method");d.exports=function(s,t,n){var r,i;c(s);try{if(r=u(s,"return"),!r){if(t==="throw")throw n;return n}r=f(r,s)}catch(o){i=!0,r=o}if(t==="throw")throw n;if(i)throw r;return c(r),n}},{"../internals/an-object":227,"../internals/function-call":264,"../internals/get-method":273}],295:[function(e,d,m){var f=e("../internals/iterators-core").IteratorPrototype,c=e("../internals/object-create"),u=e("../internals/create-property-descriptor"),s=e("../internals/set-to-string-tag"),t=e("../internals/iterators"),n=function(){return this};d.exports=function(r,i,o,l){var a=i+" Iterator";return r.prototype=c(f,{next:u(+!l,o)}),s(r,a,!1,!0),t[a]=n,r}},{"../internals/create-property-descriptor":242,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-create":306,"../internals/set-to-string-tag":331}],296:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/is-pure"),s=e("../internals/function-name"),t=e("../internals/is-callable"),n=e("../internals/iterator-create-constructor"),r=e("../internals/object-get-prototype-of"),i=e("../internals/object-set-prototype-of"),o=e("../internals/set-to-string-tag"),l=e("../internals/create-non-enumerable-property"),a=e("../internals/define-built-in"),g=e("../internals/well-known-symbol"),v=e("../internals/iterators"),h=e("../internals/iterators-core"),w=s.PROPER,y=s.CONFIGURABLE,S=h.IteratorPrototype,E=h.BUGGY_SAFARI_ITERATORS,I=g("iterator"),F="keys",B="values",j="entries",X=function(){return this};d.exports=function(G,V,J,H,M,T,_){n(J,V,H);var A=function(he){if(he===M&&k)return k;if(!E&&he&&he in $)return $[he];switch(he){case F:return function(){return new J(this,he)};case B:return function(){return new J(this,he)};case j:return function(){return new J(this,he)}}return function(){return new J(this)}},P=V+" Iterator",L=!1,$=G.prototype,R=$[I]||$["@@iterator"]||M&&$[M],k=!E&&R||A(M),C=V==="Array"&&$.entries||R,O,W,ne;if(C&&(O=r(C.call(new G)),O!==Object.prototype&&O.next&&(!u&&r(O)!==S&&(i?i(O,S):t(O[I])||a(O,I,X)),o(O,P,!0,!0),u&&(v[P]=X))),w&&M===B&&R&&R.name!==B&&(!u&&y?l($,"name",B):(L=!0,k=function(){return c(R,this)})),M)if(W={values:A(B),keys:T?k:A(F),entries:A(j)},_)for(ne in W)(E||L||!(ne in $))&&a($,ne,W[ne]);else f({target:V,proto:!0,forced:E||L},W);return(!u||_)&&$[I]!==k&&a($,I,k,{name:M}),v[V]=k,W}},{"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/export":259,"../internals/function-call":264,"../internals/function-name":265,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/iterator-create-constructor":295,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-get-prototype-of":313,"../internals/object-set-prototype-of":318,"../internals/set-to-string-tag":331,"../internals/well-known-symbol":357}],297:[function(e,d,m){var f=e("../internals/fails"),c=e("../internals/is-callable"),u=e("../internals/is-object"),s=e("../internals/object-create"),t=e("../internals/object-get-prototype-of"),n=e("../internals/define-built-in"),r=e("../internals/well-known-symbol"),i=e("../internals/is-pure"),o=r("iterator"),l=!1,a,g,v;[].keys&&(v=[].keys(),"next"in v?(g=t(t(v)),g!==Object.prototype&&(a=g)):l=!0);var h=!u(a)||f(function(){var w={};return a[o].call(w)!==w});h?a={}:i&&(a=s(a)),c(a[o])||n(a,o,function(){return this}),d.exports={IteratorPrototype:a,BUGGY_SAFARI_ITERATORS:l}},{"../internals/define-built-in":245,"../internals/fails":260,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-get-prototype-of":313,"../internals/well-known-symbol":357}],298:[function(e,d,m){arguments[4][276][0].apply(m,arguments)},{dup:276}],299:[function(e,d,m){var f=e("../internals/to-length");d.exports=function(c){return f(c.length)}},{"../internals/to-length":343}],300:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/fails"),u=e("../internals/is-callable"),s=e("../internals/has-own-property"),t=e("../internals/descriptors"),n=e("../internals/function-name").CONFIGURABLE,r=e("../internals/inspect-source"),i=e("../internals/internal-state"),o=i.enforce,l=i.get,a=String,g=Object.defineProperty,v=f("".slice),h=f("".replace),w=f([].join),y=t&&!c(function(){return g(function(){},"length",{value:8}).length!==8}),S=String(String).split("String"),E=d.exports=function(I,F,B){v(a(F),0,7)==="Symbol("&&(F="["+h(a(F),/^Symbol\(([^)]*)\)/,"$1")+"]"),B&&B.getter&&(F="get "+F),B&&B.setter&&(F="set "+F),(!s(I,"name")||n&&I.name!==F)&&(t?g(I,"name",{value:F,configurable:!0}):I.name=F),y&&B&&s(B,"arity")&&I.length!==B.arity&&g(I,"length",{value:B.arity});try{B&&s(B,"constructor")&&B.constructor?t&&g(I,"prototype",{writable:!1}):I.prototype&&(I.prototype=void 0)}catch{}var j=o(I);return s(j,"source")||(j.source=w(S,typeof F=="string"?F:"")),I};Function.prototype.toString=E(function(){return u(this)&&l(this).source||r(this)},"toString")},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-name":265,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/inspect-source":281,"../internals/internal-state":282,"../internals/is-callable":285}],301:[function(e,d,m){var f=Math.ceil,c=Math.floor;d.exports=Math.trunc||function(s){var t=+s;return(t>0?c:f)(t)}},{}],302:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/function-bind-context"),u=e("../internals/object-get-own-property-descriptor").f,s=e("../internals/task").set,t=e("../internals/queue"),n=e("../internals/engine-is-ios"),r=e("../internals/engine-is-ios-pebble"),i=e("../internals/engine-is-webos-webkit"),o=e("../internals/engine-is-node"),l=f.MutationObserver||f.WebKitMutationObserver,a=f.document,g=f.process,v=f.Promise,h=u(f,"queueMicrotask"),w=h&&h.value,y,S,E,I,F;if(!w){var B=new t,j=function(){var X,G;for(o&&(X=g.domain)&&X.exit();G=B.get();)try{G()}catch(V){throw B.head&&y(),V}X&&X.enter()};!n&&!o&&!i&&l&&a?(S=!0,E=a.createTextNode(""),new l(j).observe(E,{characterData:!0}),y=function(){E.data=S=!S}):!r&&v&&v.resolve?(I=v.resolve(void 0),I.constructor=v,F=c(I.then,I),y=function(){F(j)}):o?y=function(){g.nextTick(j)}:(s=c(s,f),y=function(){s(j)}),w=function(X){B.head||y(),B.add(X)}}d.exports=w},{"../internals/engine-is-ios":253,"../internals/engine-is-ios-pebble":252,"../internals/engine-is-node":254,"../internals/engine-is-webos-webkit":255,"../internals/function-bind-context":262,"../internals/global":274,"../internals/object-get-own-property-descriptor":309,"../internals/queue":328,"../internals/task":339}],303:[function(e,d,m){var f=e("../internals/a-callable"),c=TypeError,u=function(s){var t,n;this.promise=new s(function(r,i){if(t!==void 0||n!==void 0)throw new c("Bad Promise constructor");t=r,n=i}),this.resolve=f(t),this.reject=f(n)};d.exports.f=function(s){return new u(s)}},{"../internals/a-callable":222}],304:[function(e,d,m){var f=e("../internals/is-regexp"),c=TypeError;d.exports=function(u){if(f(u))throw new c("The method doesn't accept regular expressions");return u}},{"../internals/is-regexp":291}],305:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/function-uncurry-this"),u=e("../internals/function-call"),s=e("../internals/fails"),t=e("../internals/object-keys"),n=e("../internals/object-get-own-property-symbols"),r=e("../internals/object-property-is-enumerable"),i=e("../internals/to-object"),o=e("../internals/indexed-object"),l=Object.assign,a=Object.defineProperty,g=c([].concat);d.exports=!l||s(function(){if(f&&l({b:1},l(a({},"a",{enumerable:!0,get:function(){a(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var v={},h={},w=Symbol("assign detection"),y="abcdefghijklmnopqrst";return v[w]=7,y.split("").forEach(function(S){h[S]=S}),l({},v)[w]!==7||t(l({},h)).join("")!==y})?function(h,w){for(var y=i(h),S=arguments.length,E=1,I=n.f,F=r.f;S>E;)for(var B=o(arguments[E++]),j=I?g(t(B),I(B)):t(B),X=j.length,G=0,V;X>G;)V=j[G++],(!f||u(F,B,V))&&(y[V]=B[V]);return y}:l},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/object-get-own-property-symbols":312,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-object":344}],306:[function(e,d,m){var f=e("../internals/an-object"),c=e("../internals/object-define-properties"),u=e("../internals/enum-bug-keys"),s=e("../internals/hidden-keys"),t=e("../internals/html"),n=e("../internals/document-create-element"),r=e("../internals/shared-key"),i=">",o="<",l="prototype",a="script",g=r("IE_PROTO"),v=function(){},h=function(I){return o+a+i+I+o+"/"+a+i},w=function(I){I.write(h("")),I.close();var F=I.parentWindow.Object;return I=null,F},y=function(){var I=n("iframe"),F="java"+a+":",B;return I.style.display="none",t.appendChild(I),I.src=String(F),B=I.contentWindow.document,B.open(),B.write(h("document.F=Object")),B.close(),B.F},S,E=function(){try{S=new ActiveXObject("htmlfile")}catch{}E=typeof document<"u"?document.domain&&S?w(S):y():w(S);for(var I=u.length;I--;)delete E[l][u[I]];return E()};s[g]=!0,d.exports=Object.create||function(F,B){var j;return F!==null?(v[l]=f(F),j=new v,v[l]=null,j[g]=F):j=E(),B===void 0?j:c.f(j,B)}},{"../internals/an-object":227,"../internals/document-create-element":249,"../internals/enum-bug-keys":258,"../internals/hidden-keys":276,"../internals/html":278,"../internals/object-define-properties":307,"../internals/shared-key":332}],307:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/v8-prototype-define-bug"),u=e("../internals/object-define-property"),s=e("../internals/an-object"),t=e("../internals/to-indexed-object"),n=e("../internals/object-keys");m.f=f&&!c?Object.defineProperties:function(i,o){s(i);for(var l=t(o),a=n(o),g=a.length,v=0,h;g>v;)u.f(i,h=a[v++],l[h]);return i}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/object-define-property":308,"../internals/object-keys":316,"../internals/to-indexed-object":341,"../internals/v8-prototype-define-bug":352}],308:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/ie8-dom-define"),u=e("../internals/v8-prototype-define-bug"),s=e("../internals/an-object"),t=e("../internals/to-property-key"),n=TypeError,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o="enumerable",l="configurable",a="writable";m.f=f?u?function(v,h,w){if(s(v),h=t(h),s(w),typeof v=="function"&&h==="prototype"&&"value"in w&&a in w&&!w[a]){var y=i(v,h);y&&y[a]&&(v[h]=w.value,w={configurable:l in w?w[l]:y[l],enumerable:o in w?w[o]:y[o],writable:!1})}return r(v,h,w)}:r:function(v,h,w){if(s(v),h=t(h),s(w),c)try{return r(v,h,w)}catch{}if("get"in w||"set"in w)throw new n("Accessors not supported");return"value"in w&&(v[h]=w.value),v}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/ie8-dom-define":279,"../internals/to-property-key":346,"../internals/v8-prototype-define-bug":352}],309:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/function-call"),u=e("../internals/object-property-is-enumerable"),s=e("../internals/create-property-descriptor"),t=e("../internals/to-indexed-object"),n=e("../internals/to-property-key"),r=e("../internals/has-own-property"),i=e("../internals/ie8-dom-define"),o=Object.getOwnPropertyDescriptor;m.f=f?o:function(a,g){if(a=t(a),g=n(g),i)try{return o(a,g)}catch{}if(r(a,g))return s(!c(u.f,a,g),a[g])}},{"../internals/create-property-descriptor":242,"../internals/descriptors":247,"../internals/function-call":264,"../internals/has-own-property":275,"../internals/ie8-dom-define":279,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341,"../internals/to-property-key":346}],310:[function(e,d,m){var f=e("../internals/classof-raw"),c=e("../internals/to-indexed-object"),u=e("../internals/object-get-own-property-names").f,s=e("../internals/array-slice-simple"),t=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],n=function(r){try{return u(r)}catch{return s(t)}};d.exports.f=function(i){return t&&f(i)==="Window"?n(i):u(c(i))}},{"../internals/array-slice-simple":230,"../internals/classof-raw":235,"../internals/object-get-own-property-names":311,"../internals/to-indexed-object":341}],311:[function(e,d,m){var f=e("../internals/object-keys-internal"),c=e("../internals/enum-bug-keys"),u=c.concat("length","prototype");m.f=Object.getOwnPropertyNames||function(t){return f(t,u)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],312:[function(e,d,m){m.f=Object.getOwnPropertySymbols},{}],313:[function(e,d,m){var f=e("../internals/has-own-property"),c=e("../internals/is-callable"),u=e("../internals/to-object"),s=e("../internals/shared-key"),t=e("../internals/correct-prototype-getter"),n=s("IE_PROTO"),r=Object,i=r.prototype;d.exports=t?r.getPrototypeOf:function(o){var l=u(o);if(f(l,n))return l[n];var a=l.constructor;return c(a)&&l instanceof a?a.prototype:l instanceof r?i:null}},{"../internals/correct-prototype-getter":239,"../internals/has-own-property":275,"../internals/is-callable":285,"../internals/shared-key":332,"../internals/to-object":344}],314:[function(e,d,m){var f=e("../internals/function-uncurry-this");d.exports=f({}.isPrototypeOf)},{"../internals/function-uncurry-this":268}],315:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/has-own-property"),u=e("../internals/to-indexed-object"),s=e("../internals/array-includes").indexOf,t=e("../internals/hidden-keys"),n=f([].push);d.exports=function(r,i){var o=u(r),l=0,a=[],g;for(g in o)!c(t,g)&&c(o,g)&&n(a,g);for(;i.length>l;)c(o,g=i[l++])&&(~s(a,g)||n(a,g));return a}},{"../internals/array-includes":228,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/to-indexed-object":341}],316:[function(e,d,m){var f=e("../internals/object-keys-internal"),c=e("../internals/enum-bug-keys");d.exports=Object.keys||function(s){return f(s,c)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],317:[function(e,d,m){var f={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u=c&&!f.call({1:2},1);m.f=u?function(t){var n=c(this,t);return!!n&&n.enumerable}:f},{}],318:[function(e,d,m){var f=e("../internals/function-uncurry-this-accessor"),c=e("../internals/an-object"),u=e("../internals/a-possible-prototype");d.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var s=!1,t={},n;try{n=f(Object.prototype,"__proto__","set"),n(t,[]),s=t instanceof Array}catch{}return function(i,o){return c(i),u(o),s?n(i,o):i.__proto__=o,i}}():void 0)},{"../internals/a-possible-prototype":224,"../internals/an-object":227,"../internals/function-uncurry-this-accessor":266}],319:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/fails"),u=e("../internals/function-uncurry-this"),s=e("../internals/object-get-prototype-of"),t=e("../internals/object-keys"),n=e("../internals/to-indexed-object"),r=e("../internals/object-property-is-enumerable").f,i=u(r),o=u([].push),l=f&&c(function(){var g=Object.create(null);return g[2]=2,!i(g,2)}),a=function(g){return function(v){for(var h=n(v),w=t(h),y=l&&s(h)===null,S=w.length,E=0,I=[],F;S>E;)F=w[E++],(!f||(y?F in h:i(h,F)))&&o(I,g?[F,h[F]]:h[F]);return I}};d.exports={entries:a(!0),values:a(!1)}},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-uncurry-this":268,"../internals/object-get-prototype-of":313,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341}],320:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/is-callable"),u=e("../internals/is-object"),s=TypeError;d.exports=function(t,n){var r,i;if(n==="string"&&c(r=t.toString)&&!u(i=f(r,t))||c(r=t.valueOf)&&!u(i=f(r,t))||n!=="string"&&c(r=t.toString)&&!u(i=f(r,t)))return i;throw new s("Can't convert object to primitive value")}},{"../internals/function-call":264,"../internals/is-callable":285,"../internals/is-object":289}],321:[function(e,d,m){var f=e("../internals/get-built-in"),c=e("../internals/function-uncurry-this"),u=e("../internals/object-get-own-property-names"),s=e("../internals/object-get-own-property-symbols"),t=e("../internals/an-object"),n=c([].concat);d.exports=f("Reflect","ownKeys")||function(i){var o=u.f(t(i)),l=s.f;return l?n(o,l(i)):o}},{"../internals/an-object":227,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-symbols":312}],322:[function(e,d,m){var f=e("../internals/global");d.exports=f},{"../internals/global":274}],323:[function(e,d,m){d.exports=function(f){try{return{error:!1,value:f()}}catch(c){return{error:!0,value:c}}}},{}],324:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/promise-native-constructor"),u=e("../internals/is-callable"),s=e("../internals/is-forced"),t=e("../internals/inspect-source"),n=e("../internals/well-known-symbol"),r=e("../internals/engine-is-browser"),i=e("../internals/engine-is-deno"),o=e("../internals/is-pure"),l=e("../internals/engine-v8-version"),a=c&&c.prototype,g=n("species"),v=!1,h=u(f.PromiseRejectionEvent),w=s("Promise",function(){var y=t(c),S=y!==String(c);if(!S&&l===66||o&&!(a.catch&&a.finally))return!0;if(!l||l<51||!/native code/.test(y)){var E=new c(function(B){B(1)}),I=function(B){B(function(){},function(){})},F=E.constructor={};if(F[g]=I,v=E.then(function(){})instanceof I,!v)return!0}return!S&&(r||i)&&!h});d.exports={CONSTRUCTOR:w,REJECTION_EVENT:h,SUBCLASSING:v}},{"../internals/engine-is-browser":250,"../internals/engine-is-deno":251,"../internals/engine-v8-version":257,"../internals/global":274,"../internals/inspect-source":281,"../internals/is-callable":285,"../internals/is-forced":287,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/well-known-symbol":357}],325:[function(e,d,m){var f=e("../internals/global");d.exports=f.Promise},{"../internals/global":274}],326:[function(e,d,m){var f=e("../internals/an-object"),c=e("../internals/is-object"),u=e("../internals/new-promise-capability");d.exports=function(s,t){if(f(s),c(t)&&t.constructor===s)return t;var n=u.f(s),r=n.resolve;return r(t),n.promise}},{"../internals/an-object":227,"../internals/is-object":289,"../internals/new-promise-capability":303}],327:[function(e,d,m){var f=e("../internals/promise-native-constructor"),c=e("../internals/check-correctness-of-iteration"),u=e("../internals/promise-constructor-detection").CONSTRUCTOR;d.exports=u||!c(function(s){f.all(s).then(void 0,function(){})})},{"../internals/check-correctness-of-iteration":234,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],328:[function(e,d,m){var f=function(){this.head=null,this.tail=null};f.prototype={add:function(c){var u={item:c,next:null},s=this.tail;s?s.next=u:this.head=u,this.tail=u},get:function(){var c=this.head;if(c){var u=this.head=c.next;return u===null&&(this.tail=null),c.item}}},d.exports=f},{}],329:[function(e,d,m){var f=e("../internals/is-null-or-undefined"),c=TypeError;d.exports=function(u){if(f(u))throw new c("Can't call method on "+u);return u}},{"../internals/is-null-or-undefined":288}],330:[function(e,d,m){var f=e("../internals/get-built-in"),c=e("../internals/define-built-in-accessor"),u=e("../internals/well-known-symbol"),s=e("../internals/descriptors"),t=u("species");d.exports=function(n){var r=f(n);s&&r&&!r[t]&&c(r,t,{configurable:!0,get:function(){return this}})}},{"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],331:[function(e,d,m){var f=e("../internals/object-define-property").f,c=e("../internals/has-own-property"),u=e("../internals/well-known-symbol"),s=u("toStringTag");d.exports=function(t,n,r){t&&!r&&(t=t.prototype),t&&!c(t,s)&&f(t,s,{configurable:!0,value:n})}},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],332:[function(e,d,m){var f=e("../internals/shared"),c=e("../internals/uid"),u=f("keys");d.exports=function(s){return u[s]||(u[s]=c(s))}},{"../internals/shared":334,"../internals/uid":350}],333:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/define-global-property"),u="__core-js_shared__",s=f[u]||c(u,{});d.exports=s},{"../internals/define-global-property":246,"../internals/global":274}],334:[function(e,d,m){var f=e("../internals/is-pure"),c=e("../internals/shared-store");(d.exports=function(u,s){return c[u]||(c[u]=s!==void 0?s:{})})("versions",[]).push({version:"3.33.0",mode:f?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"})},{"../internals/is-pure":290,"../internals/shared-store":333}],335:[function(e,d,m){var f=e("../internals/an-object"),c=e("../internals/a-constructor"),u=e("../internals/is-null-or-undefined"),s=e("../internals/well-known-symbol"),t=s("species");d.exports=function(n,r){var i=f(n).constructor,o;return i===void 0||u(o=f(i)[t])?r:c(o)}},{"../internals/a-constructor":223,"../internals/an-object":227,"../internals/is-null-or-undefined":288,"../internals/well-known-symbol":357}],336:[function(e,d,m){var f=e("../internals/engine-v8-version"),c=e("../internals/fails"),u=e("../internals/global"),s=u.String;d.exports=!!Object.getOwnPropertySymbols&&!c(function(){var t=Symbol("symbol detection");return!s(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&f&&f<41})},{"../internals/engine-v8-version":257,"../internals/fails":260,"../internals/global":274}],337:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/get-built-in"),u=e("../internals/well-known-symbol"),s=e("../internals/define-built-in");d.exports=function(){var t=c("Symbol"),n=t&&t.prototype,r=n&&n.valueOf,i=u("toPrimitive");n&&!n[i]&&s(n,i,function(o){return f(r,this)},{arity:1})}},{"../internals/define-built-in":245,"../internals/function-call":264,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],338:[function(e,d,m){var f=e("../internals/symbol-constructor-detection");d.exports=f&&!!Symbol.for&&!!Symbol.keyFor},{"../internals/symbol-constructor-detection":336}],339:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/function-apply"),u=e("../internals/function-bind-context"),s=e("../internals/is-callable"),t=e("../internals/has-own-property"),n=e("../internals/fails"),r=e("../internals/html"),i=e("../internals/array-slice"),o=e("../internals/document-create-element"),l=e("../internals/validate-arguments-length"),a=e("../internals/engine-is-ios"),g=e("../internals/engine-is-node"),v=f.setImmediate,h=f.clearImmediate,w=f.process,y=f.Dispatch,S=f.Function,E=f.MessageChannel,I=f.String,F=0,B={},j="onreadystatechange",X,G,V,J;n(function(){X=f.location});var H=function(A){if(t(B,A)){var P=B[A];delete B[A],P()}},M=function(A){return function(){H(A)}},T=function(A){H(A.data)},_=function(A){f.postMessage(I(A),X.protocol+"//"+X.host)};(!v||!h)&&(v=function(P){l(arguments.length,1);var L=s(P)?P:S(P),$=i(arguments,1);return B[++F]=function(){c(L,void 0,$)},G(F),F},h=function(P){delete B[P]},g?G=function(A){w.nextTick(M(A))}:y&&y.now?G=function(A){y.now(M(A))}:E&&!a?(V=new E,J=V.port2,V.port1.onmessage=T,G=u(J.postMessage,J)):f.addEventListener&&s(f.postMessage)&&!f.importScripts&&X&&X.protocol!=="file:"&&!n(_)?(G=_,f.addEventListener("message",T,!1)):j in o("script")?G=function(A){r.appendChild(o("script"))[j]=function(){r.removeChild(this),H(A)}}:G=function(A){setTimeout(M(A),0)}),d.exports={set:v,clear:h}},{"../internals/array-slice":231,"../internals/document-create-element":249,"../internals/engine-is-ios":253,"../internals/engine-is-node":254,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-bind-context":262,"../internals/global":274,"../internals/has-own-property":275,"../internals/html":278,"../internals/is-callable":285,"../internals/validate-arguments-length":353}],340:[function(e,d,m){var f=e("../internals/to-integer-or-infinity"),c=Math.max,u=Math.min;d.exports=function(s,t){var n=f(s);return n<0?c(n+t,0):u(n,t)}},{"../internals/to-integer-or-infinity":342}],341:[function(e,d,m){var f=e("../internals/indexed-object"),c=e("../internals/require-object-coercible");d.exports=function(u){return f(c(u))}},{"../internals/indexed-object":280,"../internals/require-object-coercible":329}],342:[function(e,d,m){var f=e("../internals/math-trunc");d.exports=function(c){var u=+c;return u!==u||u===0?0:f(u)}},{"../internals/math-trunc":301}],343:[function(e,d,m){var f=e("../internals/to-integer-or-infinity"),c=Math.min;d.exports=function(u){return u>0?c(f(u),9007199254740991):0}},{"../internals/to-integer-or-infinity":342}],344:[function(e,d,m){var f=e("../internals/require-object-coercible"),c=Object;d.exports=function(u){return c(f(u))}},{"../internals/require-object-coercible":329}],345:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/is-object"),u=e("../internals/is-symbol"),s=e("../internals/get-method"),t=e("../internals/ordinary-to-primitive"),n=e("../internals/well-known-symbol"),r=TypeError,i=n("toPrimitive");d.exports=function(o,l){if(!c(o)||u(o))return o;var a=s(o,i),g;if(a){if(l===void 0&&(l="default"),g=f(a,o,l),!c(g)||u(g))return g;throw new r("Can't convert object to primitive value")}return l===void 0&&(l="number"),t(o,l)}},{"../internals/function-call":264,"../internals/get-method":273,"../internals/is-object":289,"../internals/is-symbol":292,"../internals/ordinary-to-primitive":320,"../internals/well-known-symbol":357}],346:[function(e,d,m){var f=e("../internals/to-primitive"),c=e("../internals/is-symbol");d.exports=function(u){var s=f(u,"string");return c(s)?s:s+""}},{"../internals/is-symbol":292,"../internals/to-primitive":345}],347:[function(e,d,m){var f=e("../internals/well-known-symbol"),c=f("toStringTag"),u={};u[c]="z",d.exports=String(u)==="[object z]"},{"../internals/well-known-symbol":357}],348:[function(e,d,m){var f=e("../internals/classof"),c=String;d.exports=function(u){if(f(u)==="Symbol")throw new TypeError("Cannot convert a Symbol value to a string");return c(u)}},{"../internals/classof":236}],349:[function(e,d,m){var f=String;d.exports=function(c){try{return f(c)}catch{return"Object"}}},{}],350:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=0,u=Math.random(),s=f(1 .toString);d.exports=function(t){return"Symbol("+(t===void 0?"":t)+")_"+s(++c+u,36)}},{"../internals/function-uncurry-this":268}],351:[function(e,d,m){var f=e("../internals/symbol-constructor-detection");d.exports=f&&!Symbol.sham&&typeof Symbol.iterator=="symbol"},{"../internals/symbol-constructor-detection":336}],352:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/fails");d.exports=f&&c(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})},{"../internals/descriptors":247,"../internals/fails":260}],353:[function(e,d,m){var f=TypeError;d.exports=function(c,u){if(c1?arguments[1]:void 0)}}),u(s)},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],359:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/array-iteration").find,u=e("../internals/add-to-unscopables"),s="find",t=!0;s in[]&&Array(1)[s](function(){t=!1}),f({target:"Array",proto:!0,forced:t},{find:function(r){return c(this,r,arguments.length>1?arguments[1]:void 0)}}),u(s)},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],360:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/array-includes").includes,u=e("../internals/fails"),s=e("../internals/add-to-unscopables"),t=u(function(){return!Array(1).includes()});f({target:"Array",proto:!0,forced:t},{includes:function(r){return c(this,r,arguments.length>1?arguments[1]:void 0)}}),s("includes")},{"../internals/add-to-unscopables":225,"../internals/array-includes":228,"../internals/export":259,"../internals/fails":260}],361:[function(e,d,m){var f=e("../internals/to-indexed-object"),c=e("../internals/add-to-unscopables"),u=e("../internals/iterators"),s=e("../internals/internal-state"),t=e("../internals/object-define-property").f,n=e("../internals/iterator-define"),r=e("../internals/create-iter-result-object"),i=e("../internals/is-pure"),o=e("../internals/descriptors"),l="Array Iterator",a=s.set,g=s.getterFor(l);d.exports=n(Array,"Array",function(h,w){a(this,{type:l,target:f(h),index:0,kind:w})},function(){var h=g(this),w=h.target,y=h.kind,S=h.index++;if(!w||S>=w.length)return h.target=void 0,r(void 0,!0);switch(y){case"keys":return r(S,!1);case"values":return r(w[S],!1)}return r([S,w[S]],!1)},"values");var v=u.Arguments=u.Array;if(c("keys"),c("values"),c("entries"),!i&&o&&v.name!=="values")try{t(v,"name",{value:"values"})}catch{}},{"../internals/add-to-unscopables":225,"../internals/create-iter-result-object":240,"../internals/descriptors":247,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/iterator-define":296,"../internals/iterators":298,"../internals/object-define-property":308,"../internals/to-indexed-object":341}],362:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/get-built-in"),u=e("../internals/function-apply"),s=e("../internals/function-call"),t=e("../internals/function-uncurry-this"),n=e("../internals/fails"),r=e("../internals/is-callable"),i=e("../internals/is-symbol"),o=e("../internals/array-slice"),l=e("../internals/get-json-replacer-function"),a=e("../internals/symbol-constructor-detection"),g=String,v=c("JSON","stringify"),h=t(/./.exec),w=t("".charAt),y=t("".charCodeAt),S=t("".replace),E=t(1 .toString),I=/[\uD800-\uDFFF]/g,F=/^[\uD800-\uDBFF]$/,B=/^[\uDC00-\uDFFF]$/,j=!a||n(function(){var J=c("Symbol")("stringify detection");return v([J])!=="[null]"||v({a:J})!=="{}"||v(Object(J))!=="{}"}),X=n(function(){return v("\uDF06\uD834")!=='"\\udf06\\ud834"'||v("\uDEAD")!=='"\\udead"'}),G=function(J,H){var M=o(arguments),T=l(H);if(!(!r(T)&&(J===void 0||i(J))))return M[1]=function(_,A){if(r(T)&&(A=s(T,this,g(_),A)),!i(A))return A},u(v,null,M)},V=function(J,H,M){var T=w(M,H-1),_=w(M,H+1);return h(F,J)&&!h(B,_)||h(B,J)&&!h(F,T)?"\\u"+E(y(J,0),16):J};v&&f({target:"JSON",stat:!0,arity:3,forced:j||X},{stringify:function(H,M,T){var _=o(arguments),A=u(j?G:v,null,_);return X&&typeof A=="string"?S(A,I,V):A}})},{"../internals/array-slice":231,"../internals/export":259,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/get-json-replacer-function":272,"../internals/is-callable":285,"../internals/is-symbol":292,"../internals/symbol-constructor-detection":336}],363:[function(e,d,m){var f=e("../internals/export");f({target:"Number",stat:!0},{isNaN:function(u){return u!==u}})},{"../internals/export":259}],364:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/object-assign");f({target:"Object",stat:!0,arity:2,forced:Object.assign!==c},{assign:c})},{"../internals/export":259,"../internals/object-assign":305}],365:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/symbol-constructor-detection"),u=e("../internals/fails"),s=e("../internals/object-get-own-property-symbols"),t=e("../internals/to-object"),n=!c||u(function(){s.f(1)});f({target:"Object",stat:!0,forced:n},{getOwnPropertySymbols:function(i){var o=s.f;return o?o(t(i)):[]}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-get-own-property-symbols":312,"../internals/symbol-constructor-detection":336,"../internals/to-object":344}],366:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/to-object"),u=e("../internals/object-keys"),s=e("../internals/fails"),t=s(function(){u(1)});f({target:"Object",stat:!0,forced:t},{keys:function(r){return u(c(r))}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-keys":316,"../internals/to-object":344}],367:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/object-to-array").values;f({target:"Object",stat:!0},{values:function(s){return c(s)}})},{"../internals/export":259,"../internals/object-to-array":319}],368:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/a-callable"),s=e("../internals/new-promise-capability"),t=e("../internals/perform"),n=e("../internals/iterate"),r=e("../internals/promise-statics-incorrect-iteration");f({target:"Promise",stat:!0,forced:r},{all:function(o){var l=this,a=s.f(l),g=a.resolve,v=a.reject,h=t(function(){var w=u(l.resolve),y=[],S=0,E=1;n(o,function(I){var F=S++,B=!1;E++,c(w,l,I).then(function(j){B||(B=!0,y[F]=j,--E||g(y))},v)}),--E||g(y)});return h.error&&v(h.value),a.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],369:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/is-pure"),u=e("../internals/promise-constructor-detection").CONSTRUCTOR,s=e("../internals/promise-native-constructor"),t=e("../internals/get-built-in"),n=e("../internals/is-callable"),r=e("../internals/define-built-in"),i=s&&s.prototype;if(f({target:"Promise",proto:!0,forced:u,real:!0},{catch:function(l){return this.then(void 0,l)}}),!c&&n(s)){var o=t("Promise").prototype.catch;i.catch!==o&&r(i,"catch",o,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],370:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/is-pure"),u=e("../internals/engine-is-node"),s=e("../internals/global"),t=e("../internals/function-call"),n=e("../internals/define-built-in"),r=e("../internals/object-set-prototype-of"),i=e("../internals/set-to-string-tag"),o=e("../internals/set-species"),l=e("../internals/a-callable"),a=e("../internals/is-callable"),g=e("../internals/is-object"),v=e("../internals/an-instance"),h=e("../internals/species-constructor"),w=e("../internals/task").set,y=e("../internals/microtask"),S=e("../internals/host-report-errors"),E=e("../internals/perform"),I=e("../internals/queue"),F=e("../internals/internal-state"),B=e("../internals/promise-native-constructor"),j=e("../internals/promise-constructor-detection"),X=e("../internals/new-promise-capability"),G="Promise",V=j.CONSTRUCTOR,J=j.REJECTION_EVENT,H=j.SUBCLASSING,M=F.getterFor(G),T=F.set,_=B&&B.prototype,A=B,P=_,L=s.TypeError,$=s.document,R=s.process,k=X.f,C=k,O=!!($&&$.createEvent&&s.dispatchEvent),W="unhandledrejection",ne="rejectionhandled",he=0,ue=1,Ae=2,pe=1,te=2,Z,q,de,ke,oe=function(ee){var se;return g(ee)&&a(se=ee.then)?se:!1},ie=function(ee,se){var me=se.value,Ee=se.state===ue,Ie=Ee?ee.ok:ee.fail,Ce=ee.resolve,Fe=ee.reject,ze=ee.domain,je,ge,Me;try{Ie?(Ee||(se.rejection===te&&we(se),se.rejection=pe),Ie===!0?je=me:(ze&&ze.enter(),je=Ie(me),ze&&(ze.exit(),Me=!0)),je===ee.promise?Fe(new L("Promise-chain cycle")):(ge=oe(je))?t(ge,je,Ce,Fe):Ce(je)):Fe(me)}catch(Be){ze&&!Me&&ze.exit(),Fe(Be)}},Q=function(ee,se){ee.notified||(ee.notified=!0,y(function(){for(var me=ee.reactions,Ee;Ee=me.get();)ie(Ee,ee);ee.notified=!1,se&&!ee.rejection&&Y(ee)}))},z=function(ee,se,me){var Ee,Ie;O?(Ee=$.createEvent("Event"),Ee.promise=se,Ee.reason=me,Ee.initEvent(ee,!1,!0),s.dispatchEvent(Ee)):Ee={promise:se,reason:me},!J&&(Ie=s["on"+ee])?Ie(Ee):ee===W&&S("Unhandled promise rejection",me)},Y=function(ee){t(w,s,function(){var se=ee.facade,me=ee.value,Ee=fe(ee),Ie;if(Ee&&(Ie=E(function(){u?R.emit("unhandledRejection",me,se):z(W,se,me)}),ee.rejection=u||fe(ee)?te:pe,Ie.error))throw Ie.value})},fe=function(ee){return ee.rejection!==pe&&!ee.parent},we=function(ee){t(w,s,function(){var se=ee.facade;u?R.emit("rejectionHandled",se):z(ne,se,ee.value)})},U=function(ee,se,me){return function(Ee){ee(se,Ee,me)}},ve=function(ee,se,me){ee.done||(ee.done=!0,me&&(ee=me),ee.value=se,ee.state=Ae,Q(ee,!0))},Se=function(ee,se,me){if(!ee.done){ee.done=!0,me&&(ee=me);try{if(ee.facade===se)throw new L("Promise can't be resolved itself");var Ee=oe(se);Ee?y(function(){var Ie={done:!1};try{t(Ee,se,U(Se,Ie,ee),U(ve,Ie,ee))}catch(Ce){ve(Ie,Ce,ee)}}):(ee.value=se,ee.state=ue,Q(ee,!1))}catch(Ie){ve({done:!1},Ie,ee)}}};if(V&&(A=function(se){v(this,P),l(se),t(Z,this);var me=M(this);try{se(U(Se,me),U(ve,me))}catch(Ee){ve(me,Ee)}},P=A.prototype,Z=function(se){T(this,{type:G,done:!1,notified:!1,parent:!1,reactions:new I,rejection:!1,state:he,value:void 0})},Z.prototype=n(P,"then",function(se,me){var Ee=M(this),Ie=k(h(this,A));return Ee.parent=!0,Ie.ok=a(se)?se:!0,Ie.fail=a(me)&&me,Ie.domain=u?R.domain:void 0,Ee.state===he?Ee.reactions.add(Ie):y(function(){ie(Ie,Ee)}),Ie.promise}),q=function(){var ee=new Z,se=M(ee);this.promise=ee,this.resolve=U(Se,se),this.reject=U(ve,se)},X.f=k=function(ee){return ee===A||ee===de?new q(ee):C(ee)},!c&&a(B)&&_!==Object.prototype)){ke=_.then,H||n(_,"then",function(se,me){var Ee=this;return new A(function(Ie,Ce){t(ke,Ee,Ie,Ce)}).then(se,me)},{unsafe:!0});try{delete _.constructor}catch{}r&&r(_,P)}f({global:!0,constructor:!0,wrap:!0,forced:V},{Promise:A}),i(A,G,!1,!0),o(G)},{"../internals/a-callable":222,"../internals/an-instance":226,"../internals/define-built-in":245,"../internals/engine-is-node":254,"../internals/export":259,"../internals/function-call":264,"../internals/global":274,"../internals/host-report-errors":277,"../internals/internal-state":282,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/microtask":302,"../internals/new-promise-capability":303,"../internals/object-set-prototype-of":318,"../internals/perform":323,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/queue":328,"../internals/set-species":330,"../internals/set-to-string-tag":331,"../internals/species-constructor":335,"../internals/task":339}],371:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/is-pure"),u=e("../internals/promise-native-constructor"),s=e("../internals/fails"),t=e("../internals/get-built-in"),n=e("../internals/is-callable"),r=e("../internals/species-constructor"),i=e("../internals/promise-resolve"),o=e("../internals/define-built-in"),l=u&&u.prototype,a=!!u&&s(function(){l.finally.call({then:function(){}},function(){})});if(f({target:"Promise",proto:!0,real:!0,forced:a},{finally:function(v){var h=r(this,t("Promise")),w=n(v);return this.then(w?function(y){return i(h,v()).then(function(){return y})}:v,w?function(y){return i(h,v()).then(function(){throw y})}:v)}}),!c&&n(u)){var g=t("Promise").prototype.finally;l.finally!==g&&o(l,"finally",g,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/fails":260,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326,"../internals/species-constructor":335}],372:[function(e,d,m){e("../modules/es.promise.constructor"),e("../modules/es.promise.all"),e("../modules/es.promise.catch"),e("../modules/es.promise.race"),e("../modules/es.promise.reject"),e("../modules/es.promise.resolve")},{"../modules/es.promise.all":368,"../modules/es.promise.catch":369,"../modules/es.promise.constructor":370,"../modules/es.promise.race":373,"../modules/es.promise.reject":374,"../modules/es.promise.resolve":375}],373:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/a-callable"),s=e("../internals/new-promise-capability"),t=e("../internals/perform"),n=e("../internals/iterate"),r=e("../internals/promise-statics-incorrect-iteration");f({target:"Promise",stat:!0,forced:r},{race:function(o){var l=this,a=s.f(l),g=a.reject,v=t(function(){var h=u(l.resolve);n(o,function(w){c(h,l,w).then(a.resolve,g)})});return v.error&&g(v.value),a.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],374:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/new-promise-capability"),s=e("../internals/promise-constructor-detection").CONSTRUCTOR;f({target:"Promise",stat:!0,forced:s},{reject:function(n){var r=u.f(this);return c(r.reject,void 0,n),r.promise}})},{"../internals/export":259,"../internals/function-call":264,"../internals/new-promise-capability":303,"../internals/promise-constructor-detection":324}],375:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/get-built-in"),u=e("../internals/is-pure"),s=e("../internals/promise-native-constructor"),t=e("../internals/promise-constructor-detection").CONSTRUCTOR,n=e("../internals/promise-resolve"),r=c("Promise"),i=u&&!t;f({target:"Promise",stat:!0,forced:u||t},{resolve:function(l){return n(i&&this===r?s:this,l)}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326}],376:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-uncurry-this"),u=e("../internals/to-absolute-index"),s=RangeError,t=String.fromCharCode,n=String.fromCodePoint,r=c([].join),i=!!n&&n.length!==1;f({target:"String",stat:!0,arity:1,forced:i},{fromCodePoint:function(l){for(var a=[],g=arguments.length,v=0,h;g>v;){if(h=+arguments[v++],u(h,1114111)!==h)throw new s(h+" is not a valid code point");a[v]=h<65536?t(h):t(((h-=65536)>>10)+55296,h%1024+56320)}return r(a,"")}})},{"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/to-absolute-index":340}],377:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-uncurry-this"),u=e("../internals/not-a-regexp"),s=e("../internals/require-object-coercible"),t=e("../internals/to-string"),n=e("../internals/correct-is-regexp-logic"),r=c("".indexOf);f({target:"String",proto:!0,forced:!n("includes")},{includes:function(o){return!!~r(t(s(this)),t(u(o)),arguments.length>1?arguments[1]:void 0)}})},{"../internals/correct-is-regexp-logic":238,"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/not-a-regexp":304,"../internals/require-object-coercible":329,"../internals/to-string":348}],378:[function(e,d,m){var f=e("../internals/well-known-symbol-define");f("asyncIterator")},{"../internals/well-known-symbol-define":355}],379:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/global"),u=e("../internals/function-call"),s=e("../internals/function-uncurry-this"),t=e("../internals/is-pure"),n=e("../internals/descriptors"),r=e("../internals/symbol-constructor-detection"),i=e("../internals/fails"),o=e("../internals/has-own-property"),l=e("../internals/object-is-prototype-of"),a=e("../internals/an-object"),g=e("../internals/to-indexed-object"),v=e("../internals/to-property-key"),h=e("../internals/to-string"),w=e("../internals/create-property-descriptor"),y=e("../internals/object-create"),S=e("../internals/object-keys"),E=e("../internals/object-get-own-property-names"),I=e("../internals/object-get-own-property-names-external"),F=e("../internals/object-get-own-property-symbols"),B=e("../internals/object-get-own-property-descriptor"),j=e("../internals/object-define-property"),X=e("../internals/object-define-properties"),G=e("../internals/object-property-is-enumerable"),V=e("../internals/define-built-in"),J=e("../internals/define-built-in-accessor"),H=e("../internals/shared"),M=e("../internals/shared-key"),T=e("../internals/hidden-keys"),_=e("../internals/uid"),A=e("../internals/well-known-symbol"),P=e("../internals/well-known-symbol-wrapped"),L=e("../internals/well-known-symbol-define"),$=e("../internals/symbol-define-to-primitive"),R=e("../internals/set-to-string-tag"),k=e("../internals/internal-state"),C=e("../internals/array-iteration").forEach,O=M("hidden"),W="Symbol",ne="prototype",he=k.set,ue=k.getterFor(W),Ae=Object[ne],pe=c.Symbol,te=pe&&pe[ne],Z=c.RangeError,q=c.TypeError,de=c.QObject,ke=B.f,oe=j.f,ie=I.f,Q=G.f,z=s([].push),Y=H("symbols"),fe=H("op-symbols"),we=H("wks"),U=!de||!de[ne]||!de[ne].findChild,ve=function(je,ge,Me){var Be=ke(Ae,ge);Be&&delete Ae[ge],oe(je,ge,Me),Be&&je!==Ae&&oe(Ae,ge,Be)},Se=n&&i(function(){return y(oe({},"a",{get:function(){return oe(this,"a",{value:7}).a}})).a!==7})?ve:oe,ee=function(je,ge){var Me=Y[je]=y(te);return he(Me,{type:W,tag:je,description:ge}),n||(Me.description=ge),Me},se=function(ge,Me,Be){ge===Ae&&se(fe,Me,Be),a(ge);var Xe=v(Me);return a(Be),o(Y,Xe)?(Be.enumerable?(o(ge,O)&&ge[O][Xe]&&(ge[O][Xe]=!1),Be=y(Be,{enumerable:w(0,!1)})):(o(ge,O)||oe(ge,O,w(1,{})),ge[O][Xe]=!0),Se(ge,Xe,Be)):oe(ge,Xe,Be)},me=function(ge,Me){a(ge);var Be=g(Me),Xe=S(Be).concat(ze(Be));return C(Xe,function(ot){(!n||u(Ie,Be,ot))&&se(ge,ot,Be[ot])}),ge},Ee=function(ge,Me){return Me===void 0?y(ge):me(y(ge),Me)},Ie=function(ge){var Me=v(ge),Be=u(Q,this,Me);return this===Ae&&o(Y,Me)&&!o(fe,Me)?!1:Be||!o(this,Me)||!o(Y,Me)||o(this,O)&&this[O][Me]?Be:!0},Ce=function(ge,Me){var Be=g(ge),Xe=v(Me);if(!(Be===Ae&&o(Y,Xe)&&!o(fe,Xe))){var ot=ke(Be,Xe);return ot&&o(Y,Xe)&&!(o(Be,O)&&Be[O][Xe])&&(ot.enumerable=!0),ot}},Fe=function(ge){var Me=ie(g(ge)),Be=[];return C(Me,function(Xe){!o(Y,Xe)&&!o(T,Xe)&&z(Be,Xe)}),Be},ze=function(je){var ge=je===Ae,Me=ie(ge?fe:g(je)),Be=[];return C(Me,function(Xe){o(Y,Xe)&&(!ge||o(Ae,Xe))&&z(Be,Y[Xe])}),Be};r||(pe=function(){if(l(te,this))throw new q("Symbol is not a constructor");var ge=!arguments.length||arguments[0]===void 0?void 0:h(arguments[0]),Me=_(ge),Be=function(Xe){this===Ae&&u(Be,fe,Xe),o(this,O)&&o(this[O],Me)&&(this[O][Me]=!1);var ot=w(1,Xe);try{Se(this,Me,ot)}catch(ct){if(!(ct instanceof Z))throw ct;ve(this,Me,ot)}};return n&&U&&Se(Ae,Me,{configurable:!0,set:Be}),ee(Me,ge)},te=pe[ne],V(te,"toString",function(){return ue(this).tag}),V(pe,"withoutSetter",function(je){return ee(_(je),je)}),G.f=Ie,j.f=se,X.f=me,B.f=Ce,E.f=I.f=Fe,F.f=ze,P.f=function(je){return ee(A(je),je)},n&&(J(te,"description",{configurable:!0,get:function(){return ue(this).description}}),t||V(Ae,"propertyIsEnumerable",Ie,{unsafe:!0}))),f({global:!0,constructor:!0,wrap:!0,forced:!r,sham:!r},{Symbol:pe}),C(S(we),function(je){L(je)}),f({target:W,stat:!0,forced:!r},{useSetter:function(){U=!0},useSimple:function(){U=!1}}),f({target:"Object",stat:!0,forced:!r,sham:!n},{create:Ee,defineProperty:se,defineProperties:me,getOwnPropertyDescriptor:Ce}),f({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:Fe}),$(),R(pe,W),T[O]=!0},{"../internals/an-object":227,"../internals/array-iteration":229,"../internals/create-property-descriptor":242,"../internals/define-built-in":245,"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/export":259,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/global":274,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-define-properties":307,"../internals/object-define-property":308,"../internals/object-get-own-property-descriptor":309,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-names-external":310,"../internals/object-get-own-property-symbols":312,"../internals/object-is-prototype-of":314,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/set-to-string-tag":331,"../internals/shared":334,"../internals/shared-key":332,"../internals/symbol-constructor-detection":336,"../internals/symbol-define-to-primitive":337,"../internals/to-indexed-object":341,"../internals/to-property-key":346,"../internals/to-string":348,"../internals/uid":350,"../internals/well-known-symbol":357,"../internals/well-known-symbol-define":355,"../internals/well-known-symbol-wrapped":356}],380:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/get-built-in"),u=e("../internals/has-own-property"),s=e("../internals/to-string"),t=e("../internals/shared"),n=e("../internals/symbol-registry-detection"),r=t("string-to-symbol-registry"),i=t("symbol-to-string-registry");f({target:"Symbol",stat:!0,forced:!n},{for:function(o){var l=s(o);if(u(r,l))return r[l];var a=c("Symbol")(l);return r[l]=a,i[a]=l,a}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/has-own-property":275,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/to-string":348}],381:[function(e,d,m){e("../modules/es.symbol.constructor"),e("../modules/es.symbol.for"),e("../modules/es.symbol.key-for"),e("../modules/es.json.stringify"),e("../modules/es.object.get-own-property-symbols")},{"../modules/es.json.stringify":362,"../modules/es.object.get-own-property-symbols":365,"../modules/es.symbol.constructor":379,"../modules/es.symbol.for":380,"../modules/es.symbol.key-for":382}],382:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/has-own-property"),u=e("../internals/is-symbol"),s=e("../internals/try-to-string"),t=e("../internals/shared"),n=e("../internals/symbol-registry-detection"),r=t("symbol-to-string-registry");f({target:"Symbol",stat:!0,forced:!n},{keyFor:function(o){if(!u(o))throw new TypeError(s(o)+" is not a symbol");if(c(r,o))return r[o]}})},{"../internals/export":259,"../internals/has-own-property":275,"../internals/is-symbol":292,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/try-to-string":349}],383:[function(e,d,m){function f(y){return Array.isArray?Array.isArray(y):w(y)==="[object Array]"}m.isArray=f;function c(y){return typeof y=="boolean"}m.isBoolean=c;function u(y){return y===null}m.isNull=u;function s(y){return y==null}m.isNullOrUndefined=s;function t(y){return typeof y=="number"}m.isNumber=t;function n(y){return typeof y=="string"}m.isString=n;function r(y){return typeof y=="symbol"}m.isSymbol=r;function i(y){return y===void 0}m.isUndefined=i;function o(y){return w(y)==="[object RegExp]"}m.isRegExp=o;function l(y){return typeof y=="object"&&y!==null}m.isObject=l;function a(y){return w(y)==="[object Date]"}m.isDate=a;function g(y){return w(y)==="[object Error]"||y instanceof Error}m.isError=g;function v(y){return typeof y=="function"}m.isFunction=v;function h(y){return y===null||typeof y=="boolean"||typeof y=="number"||typeof y=="string"||typeof y=="symbol"||typeof y>"u"}m.isPrimitive=h,m.isBuffer=e("buffer").Buffer.isBuffer;function w(y){return Object.prototype.toString.call(y)}},{buffer:220}],384:[function(e,d,m){(function(f){(function(){var c=e("elliptic"),u=e("bn.js");d.exports=function(i){return new t(i)};var s={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};s.p224=s.secp224r1,s.p256=s.secp256r1=s.prime256v1,s.p192=s.secp192r1=s.prime192v1,s.p384=s.secp384r1,s.p521=s.secp521r1;function t(r){this.curveType=s[r],this.curveType||(this.curveType={name:r}),this.curve=new c.ec(this.curveType.name),this.keys=void 0}t.prototype.generateKeys=function(r,i){return this.keys=this.curve.genKeyPair(),this.getPublicKey(r,i)},t.prototype.computeSecret=function(r,i,o){i=i||"utf8",f.isBuffer(r)||(r=new f(r,i));var l=this.curve.keyFromPublic(r).getPublic(),a=l.mul(this.keys.getPrivate()).getX();return n(a,o,this.curveType.byteLength)},t.prototype.getPublicKey=function(r,i){var o=this.keys.getPublic(i==="compressed",!0);return i==="hybrid"&&(o[o.length-1]%2?o[0]=7:o[0]=6),n(o,r)},t.prototype.getPrivateKey=function(r){return n(this.keys.getPrivate(),r)},t.prototype.setPublicKey=function(r,i){return i=i||"utf8",f.isBuffer(r)||(r=new f(r,i)),this.keys._importPublic(r),this},t.prototype.setPrivateKey=function(r,i){i=i||"utf8",f.isBuffer(r)||(r=new f(r,i));var o=new u(r);return o=o.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(o),this};function n(r,i,o){Array.isArray(r)||(r=r.toArray());var l=new f(r);if(o&&l.lengthg){var v=l==="rmd160"?new n:r(l);a=v.update(a).digest()}else a.lengtht?i=r(i):i.length=_?T:""+Array(_+1-P.length).join(A)+T},I={s:E,z:function(T){var _=-T.utcOffset(),A=Math.abs(_),P=Math.floor(A/60),L=A%60;return(_<=0?"+":"-")+E(P,2,"0")+":"+E(L,2,"0")},m:function T(_,A){if(_.date()1)return T(R[0])}else{var k=_.name;B[k]=_,L=k}return!P&&L&&(F=L),L||!P&&F},V=function(T,_){if(X(T))return T.clone();var A=typeof _=="object"?_:{};return A.date=T,A.args=arguments,new H(A)},J=I;J.l=G,J.i=X,J.w=function(T,_){return V(T,{locale:_.$L,utc:_.$u,x:_.$x,$offset:_.$offset})};var H=function(){function T(A){this.$L=G(A.locale,null,!0),this.parse(A),this.$x=this.$x||A.x||{},this[j]=!0}var _=T.prototype;return _.parse=function(A){this.$d=function(P){var L=P.date,$=P.utc;if(L===null)return new Date(NaN);if(J.u(L))return new Date;if(L instanceof Date)return new Date(L);if(typeof L=="string"&&!/Z$/i.test(L)){var R=L.match(w);if(R){var k=R[2]-1||0,C=(R[7]||"0").substring(0,3);return $?new Date(Date.UTC(R[1],k,R[3]||1,R[4]||0,R[5]||0,R[6]||0,C)):new Date(R[1],k,R[3]||1,R[4]||0,R[5]||0,R[6]||0,C)}}return new Date(L)}(A),this.init()},_.init=function(){var A=this.$d;this.$y=A.getFullYear(),this.$M=A.getMonth(),this.$D=A.getDate(),this.$W=A.getDay(),this.$H=A.getHours(),this.$m=A.getMinutes(),this.$s=A.getSeconds(),this.$ms=A.getMilliseconds()},_.$utils=function(){return J},_.isValid=function(){return this.$d.toString()!==h},_.isSame=function(A,P){var L=V(A);return this.startOf(P)<=L&&L<=this.endOf(P)},_.isAfter=function(A,P){return V(A)68?1900:2e3)},i=function(h){return function(w){this[h]=+w}},o=[/[+-]\d\d:?(\d\d)?|Z/,function(h){(this.zone||(this.zone={})).offset=function(w){if(!w||w==="Z")return 0;var y=w.match(/([+-]|\d\d)/g),S=60*y[1]+(+y[2]||0);return S===0?0:y[0]==="+"?-S:S}(h)}],l=function(h){var w=n[h];return w&&(w.indexOf?w:w.s.concat(w.f))},a=function(h,w){var y,S=n.meridiem;if(S){for(var E=1;E<=24;E+=1)if(h.indexOf(S(E,0,w))>-1){y=E>12;break}}else y=h===(w?"pm":"PM");return y},g={A:[t,function(h){this.afternoon=a(h,!1)}],a:[t,function(h){this.afternoon=a(h,!0)}],S:[/\d/,function(h){this.milliseconds=100*+h}],SS:[u,function(h){this.milliseconds=10*+h}],SSS:[/\d{3}/,function(h){this.milliseconds=+h}],s:[s,i("seconds")],ss:[s,i("seconds")],m:[s,i("minutes")],mm:[s,i("minutes")],H:[s,i("hours")],h:[s,i("hours")],HH:[s,i("hours")],hh:[s,i("hours")],D:[s,i("day")],DD:[u,i("day")],Do:[t,function(h){var w=n.ordinal,y=h.match(/\d+/);if(this.day=y[0],w)for(var S=1;S<=31;S+=1)w(S).replace(/\[|\]/g,"")===h&&(this.day=S)}],M:[s,i("month")],MM:[u,i("month")],MMM:[t,function(h){var w=l("months"),y=(l("monthsShort")||w.map(function(S){return S.slice(0,3)})).indexOf(h)+1;if(y<1)throw new Error;this.month=y%12||y}],MMMM:[t,function(h){var w=l("months").indexOf(h)+1;if(w<1)throw new Error;this.month=w%12||w}],Y:[/[+-]?\d+/,i("year")],YY:[u,function(h){this.year=r(h)}],YYYY:[/\d{4}/,i("year")],Z:o,ZZ:o};function v(h){var w,y;w=h,y=n&&n.formats;for(var S=(h=w.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(G,V,J){var H=J&&J.toUpperCase();return V||y[J]||f[J]||y[H].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(M,T,_){return T||_.slice(1)})})).match(c),E=S.length,I=0;I-1)return new Date((P==="X"?1e3:1)*A);var $=v(P)(A),R=$.year,k=$.month,C=$.day,O=$.hours,W=$.minutes,ne=$.seconds,he=$.milliseconds,ue=$.zone,Ae=new Date,pe=C||(R||k?1:Ae.getDate()),te=R||Ae.getFullYear(),Z=0;R&&!k||(Z=k>0?k-1:Ae.getMonth());var q=O||0,de=W||0,ke=ne||0,oe=he||0;return ue?new Date(Date.UTC(te,Z,pe,q,de,ke,oe+60*ue.offset*1e3)):L?new Date(Date.UTC(te,Z,pe,q,de,ke,oe)):new Date(te,Z,pe,q,de,ke,oe)}catch{return new Date("")}}(F,X,B),this.init(),H&&H!==!0&&(this.$L=this.locale(H).$L),J&&F!=this.format(X)&&(this.$d=new Date("")),n={}}else if(X instanceof Array)for(var M=X.length,T=1;T<=M;T+=1){j[1]=X[T-1];var _=y.apply(this,j);if(_.isValid()){this.$d=_.$d,this.$L=_.$L,this.init();break}T===M&&(this.$d=new Date(""))}else E.call(this,I)}}})},{}],393:[function(e,d,m){(function(f,c){typeof m=="object"&&typeof d<"u"?d.exports=c():(f=typeof globalThis<"u"?globalThis:f||self).dayjs_plugin_utc=c()})(void 0,function(){var f="minute",c=/[+-]\d\d(?::?\d\d)?/g,u=/([+-]|\d\d)/g;return function(s,t,n){var r=t.prototype;n.utc=function(h){var w={date:h,utc:!0,args:arguments};return new t(w)},r.utc=function(h){var w=n(this.toDate(),{locale:this.$L,utc:!0});return h?w.add(this.utcOffset(),f):w},r.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var i=r.parse;r.parse=function(h){h.utc&&(this.$u=!0),this.$utils().u(h.$offset)||(this.$offset=h.$offset),i.call(this,h)};var o=r.init;r.init=function(){if(this.$u){var h=this.$d;this.$y=h.getUTCFullYear(),this.$M=h.getUTCMonth(),this.$D=h.getUTCDate(),this.$W=h.getUTCDay(),this.$H=h.getUTCHours(),this.$m=h.getUTCMinutes(),this.$s=h.getUTCSeconds(),this.$ms=h.getUTCMilliseconds()}else o.call(this)};var l=r.utcOffset;r.utcOffset=function(h,w){var y=this.$utils().u;if(y(h))return this.$u?0:y(this.$offset)?l.call(this):this.$offset;if(typeof h=="string"&&(h=function(F){F===void 0&&(F="");var B=F.match(c);if(!B)return null;var j=(""+B[0]).match(u)||["-",0,0],X=j[0],G=60*+j[1]+ +j[2];return G===0?0:X==="+"?G:-G}(h),h===null))return this;var S=Math.abs(h)<=16?60*h:h,E=this;if(w)return E.$offset=S,E.$u=h===0,E;if(h!==0){var I=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(E=this.local().add(S+I,f)).$offset=S,E.$x.$localOffset=I}else E=this.utc();return E};var a=r.format;r.format=function(h){var w=h||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return a.call(this,w)},r.valueOf=function(){var h=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*h},r.isUTC=function(){return!!this.$u},r.toISOString=function(){return this.toDate().toISOString()},r.toString=function(){return this.toDate().toUTCString()};var g=r.toDate;r.toDate=function(h){return h==="s"&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():g.call(this)};var v=r.diff;r.diff=function(h,w,y){if(h&&this.$u===h.$u)return v.call(this,h,w,y);var S=this.local(),E=n(h).local();return v.call(S,E,w,y)}}})},{}],394:[function(e,d,m){m.utils=e("./des/utils"),m.Cipher=e("./des/cipher"),m.DES=e("./des/des"),m.CBC=e("./des/cbc"),m.EDE=e("./des/ede")},{"./des/cbc":395,"./des/cipher":396,"./des/des":397,"./des/ede":398,"./des/utils":399}],395:[function(e,d,m){var f=e("minimalistic-assert"),c=e("inherits"),u={};function s(n){f.equal(n.length,8,"Invalid IV length"),this.iv=new Array(8);for(var r=0;r0;r--)t+=this._buffer(s,t),n+=this._flushBuffer(i,n);return t+=this._buffer(s,t),i},c.prototype.final=function(s){var t;s&&(t=this.update(s));var n;return this.type==="encrypt"?n=this._finalEncrypt():n=this._finalDecrypt(),t?t.concat(n):n},c.prototype._pad=function(s,t){if(t===0)return!1;for(;t>>1];a=u.r28shl(a,h),g=u.r28shl(g,h),u.pc2(a,g,o.keys,v)}},n.prototype._update=function(o,l,a,g){var v=this._desState,h=u.readUInt32BE(o,l),w=u.readUInt32BE(o,l+4);u.ip(h,w,v.tmp,0),h=v.tmp[0],w=v.tmp[1],this.type==="encrypt"?this._encrypt(v,h,w,v.tmp,0):this._decrypt(v,h,w,v.tmp,0),h=v.tmp[0],w=v.tmp[1],u.writeUInt32BE(a,h,g),u.writeUInt32BE(a,w,g+4)},n.prototype._pad=function(o,l){if(this.padding===!1)return!1;for(var a=o.length-l,g=l;g>>0,h=B}u.rip(w,h,g,v)},n.prototype._decrypt=function(o,l,a,g,v){for(var h=a,w=l,y=o.keys.length-2;y>=0;y-=2){var S=o.keys[y],E=o.keys[y+1];u.expand(h,o.tmp,0),S^=o.tmp[0],E^=o.tmp[1];var I=u.substitute(S,E),F=u.permute(I),B=h;h=(w^F)>>>0,w=B}u.rip(h,w,g,v)}},{"./cipher":396,"./utils":399,inherits:440,"minimalistic-assert":453}],398:[function(e,d,m){var f=e("minimalistic-assert"),c=e("inherits"),u=e("./cipher"),s=e("./des");function t(r,i){f.equal(i.length,24,"Invalid key length");var o=i.slice(0,8),l=i.slice(8,16),a=i.slice(16,24);r==="encrypt"?this.ciphers=[s.create({type:"encrypt",key:o}),s.create({type:"decrypt",key:l}),s.create({type:"encrypt",key:a})]:this.ciphers=[s.create({type:"decrypt",key:a}),s.create({type:"encrypt",key:l}),s.create({type:"decrypt",key:o})]}function n(r){u.call(this,r);var i=new t(this.type,this.options.key);this._edeState=i}c(n,u),d.exports=n,n.create=function(i){return new n(i)},n.prototype._update=function(i,o,l,a){var g=this._edeState;g.ciphers[0]._update(i,o,l,a),g.ciphers[1]._update(l,a,l,a),g.ciphers[2]._update(l,a,l,a)},n.prototype._pad=s.prototype._pad,n.prototype._unpad=s.prototype._unpad},{"./cipher":396,"./des":397,inherits:440,"minimalistic-assert":453}],399:[function(e,d,m){m.readUInt32BE=function(t,n){var r=t[0+n]<<24|t[1+n]<<16|t[2+n]<<8|t[3+n];return r>>>0},m.writeUInt32BE=function(t,n,r){t[0+r]=n>>>24,t[1+r]=n>>>16&255,t[2+r]=n>>>8&255,t[3+r]=n&255},m.ip=function(t,n,r,i){for(var o=0,l=0,a=6;a>=0;a-=2){for(var g=0;g<=24;g+=8)o<<=1,o|=n>>>g+a&1;for(var g=0;g<=24;g+=8)o<<=1,o|=t>>>g+a&1}for(var a=6;a>=0;a-=2){for(var g=1;g<=25;g+=8)l<<=1,l|=n>>>g+a&1;for(var g=1;g<=25;g+=8)l<<=1,l|=t>>>g+a&1}r[i+0]=o>>>0,r[i+1]=l>>>0},m.rip=function(t,n,r,i){for(var o=0,l=0,a=0;a<4;a++)for(var g=24;g>=0;g-=8)o<<=1,o|=n>>>g+a&1,o<<=1,o|=t>>>g+a&1;for(var a=4;a<8;a++)for(var g=24;g>=0;g-=8)l<<=1,l|=n>>>g+a&1,l<<=1,l|=t>>>g+a&1;r[i+0]=o>>>0,r[i+1]=l>>>0},m.pc1=function(t,n,r,i){for(var o=0,l=0,a=7;a>=5;a--){for(var g=0;g<=24;g+=8)o<<=1,o|=n>>g+a&1;for(var g=0;g<=24;g+=8)o<<=1,o|=t>>g+a&1}for(var g=0;g<=24;g+=8)o<<=1,o|=n>>g+a&1;for(var a=1;a<=3;a++){for(var g=0;g<=24;g+=8)l<<=1,l|=n>>g+a&1;for(var g=0;g<=24;g+=8)l<<=1,l|=t>>g+a&1}for(var g=0;g<=24;g+=8)l<<=1,l|=t>>g+a&1;r[i+0]=o>>>0,r[i+1]=l>>>0},m.r28shl=function(t,n){return t<>>28-n};var f=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];m.pc2=function(t,n,r,i){for(var o=0,l=0,a=f.length>>>1,g=0;g>>f[g]&1;for(var g=a;g>>f[g]&1;r[i+0]=o>>>0,r[i+1]=l>>>0},m.expand=function(t,n,r){var i=0,o=0;i=(t&1)<<5|t>>>27;for(var l=23;l>=15;l-=4)i<<=6,i|=t>>>l&63;for(var l=11;l>=3;l-=4)o|=t>>>l&63,o<<=6;o|=(t&31)<<1|t>>>31,n[r+0]=i>>>0,n[r+1]=o>>>0};var c=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];m.substitute=function(t,n){for(var r=0,i=0;i<4;i++){var o=t>>>18-i*6&63,l=c[i*64+o];r<<=4,r|=l}for(var i=0;i<4;i++){var o=n>>>18-i*6&63,l=c[4*64+i*64+o];r<<=4,r|=l}return r>>>0};var u=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];m.permute=function(t){for(var n=0,r=0;r>>u[r]&1;return n>>>0},m.padSplit=function(t,n,r){for(var i=t.toString(2);i.lengthE;)F.ishrn(1);if(F.isEven()&&F.iadd(n),F.testn(1)||F.iadd(r),I.cmp(r)){if(!I.cmp(i))for(;F.mod(o).cmp(l);)F.iadd(g)}else for(;F.mod(u).cmp(a);)F.iadd(g);if(B=F.shrn(1),w(B)&&w(F)&&y(B)&&y(F)&&t.test(B)&&t.test(F))return F}}},{"bn.js":404,"miller-rabin":451,randombytes:475}],403:[function(e,d,m){d.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],404:[function(e,d,m){arguments[4][184][0].apply(m,arguments)},{buffer:188,dup:184}],405:[function(e,d,m){var f=m;f.version=e("../package.json").version,f.utils=e("./elliptic/utils"),f.rand=e("brorand"),f.curve=e("./elliptic/curve"),f.curves=e("./elliptic/curves"),f.ec=e("./elliptic/ec"),f.eddsa=e("./elliptic/eddsa")},{"../package.json":421,"./elliptic/curve":408,"./elliptic/curves":411,"./elliptic/ec":412,"./elliptic/eddsa":415,"./elliptic/utils":419,brorand:187}],406:[function(e,d,m){var f=e("bn.js"),c=e("../utils"),u=c.getNAF,s=c.getJSF,t=c.assert;function n(i,o){this.type=i,this.p=new f(o.p,16),this.red=o.prime?f.red(o.prime):f.mont(this.p),this.zero=new f(0).toRed(this.red),this.one=new f(1).toRed(this.red),this.two=new f(2).toRed(this.red),this.n=o.n&&new f(o.n,16),this.g=o.g&&this.pointFromJSON(o.g,o.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var l=this.n&&this.p.div(this.n);!l||l.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}d.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(o,l){t(o.precomputed);var a=o._getDoubles(),g=u(l,1,this._bitLength),v=(1<=w;S--)y=(y<<1)+g[S];h.push(y)}for(var E=this.jpoint(null,null,null),I=this.jpoint(null,null,null),F=v;F>0;F--){for(w=0;w=0;y--){for(var S=0;y>=0&&h[y]===0;y--)S++;if(y>=0&&S++,w=w.dblp(S),y<0)break;var E=h[y];t(E!==0),o.type==="affine"?E>0?w=w.mixedAdd(v[E-1>>1]):w=w.mixedAdd(v[-E-1>>1].neg()):E>0?w=w.add(v[E-1>>1]):w=w.add(v[-E-1>>1].neg())}return o.type==="affine"?w.toP():w},n.prototype._wnafMulAdd=function(o,l,a,g,v){var h=this._wnafT1,w=this._wnafT2,y=this._wnafT3,S=0,E,I,F;for(E=0;E=1;E-=2){var j=E-1,X=E;if(h[j]!==1||h[X]!==1){y[j]=u(a[j],h[j],this._bitLength),y[X]=u(a[X],h[X],this._bitLength),S=Math.max(y[j].length,S),S=Math.max(y[X].length,S);continue}var G=[l[j],null,null,l[X]];l[j].y.cmp(l[X].y)===0?(G[1]=l[j].add(l[X]),G[2]=l[j].toJ().mixedAdd(l[X].neg())):l[j].y.cmp(l[X].y.redNeg())===0?(G[1]=l[j].toJ().mixedAdd(l[X]),G[2]=l[j].add(l[X].neg())):(G[1]=l[j].toJ().mixedAdd(l[X]),G[2]=l[j].toJ().mixedAdd(l[X].neg()));var V=[-3,-1,-5,-7,0,7,5,1,3],J=s(a[j],a[X]);for(S=Math.max(J[0].length,S),y[j]=new Array(S),y[X]=new Array(S),I=0;I=0;E--){for(var A=0;E>=0;){var P=!0;for(I=0;I=0&&A++,T=T.dblp(A),E<0)break;for(I=0;I0?F=w[I][L-1>>1]:L<0&&(F=w[I][-L-1>>1].neg()),F.type==="affine"?T=T.mixedAdd(F):T=T.add(F))}}for(E=0;E=Math.ceil((o.bitLength()+1)/l.step):!1},r.prototype._getDoubles=function(o,l){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var a=[this],g=this,v=0;v":""},r.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},r.prototype._extDbl=function(){var o=this.x.redSqr(),l=this.y.redSqr(),a=this.z.redSqr();a=a.redIAdd(a);var g=this.curve._mulA(o),v=this.x.redAdd(this.y).redSqr().redISub(o).redISub(l),h=g.redAdd(l),w=h.redSub(a),y=g.redSub(l),S=v.redMul(w),E=h.redMul(y),I=v.redMul(y),F=w.redMul(h);return this.curve.point(S,E,F,I)},r.prototype._projDbl=function(){var o=this.x.redAdd(this.y).redSqr(),l=this.x.redSqr(),a=this.y.redSqr(),g,v,h,w,y,S;if(this.curve.twisted){w=this.curve._mulA(l);var E=w.redAdd(a);this.zOne?(g=o.redSub(l).redSub(a).redMul(E.redSub(this.curve.two)),v=E.redMul(w.redSub(a)),h=E.redSqr().redSub(E).redSub(E)):(y=this.z.redSqr(),S=E.redSub(y).redISub(y),g=o.redSub(l).redISub(a).redMul(S),v=E.redMul(w.redSub(a)),h=E.redMul(S))}else w=l.redAdd(a),y=this.curve._mulC(this.z).redSqr(),S=w.redSub(y).redSub(y),g=this.curve._mulC(o.redISub(w)).redMul(S),v=this.curve._mulC(w).redMul(l.redISub(a)),h=w.redMul(S);return this.curve.point(g,v,h)},r.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},r.prototype._extAdd=function(o){var l=this.y.redSub(this.x).redMul(o.y.redSub(o.x)),a=this.y.redAdd(this.x).redMul(o.y.redAdd(o.x)),g=this.t.redMul(this.curve.dd).redMul(o.t),v=this.z.redMul(o.z.redAdd(o.z)),h=a.redSub(l),w=v.redSub(g),y=v.redAdd(g),S=a.redAdd(l),E=h.redMul(w),I=y.redMul(S),F=h.redMul(S),B=w.redMul(y);return this.curve.point(E,I,B,F)},r.prototype._projAdd=function(o){var l=this.z.redMul(o.z),a=l.redSqr(),g=this.x.redMul(o.x),v=this.y.redMul(o.y),h=this.curve.d.redMul(g).redMul(v),w=a.redSub(h),y=a.redAdd(h),S=this.x.redAdd(this.y).redMul(o.x.redAdd(o.y)).redISub(g).redISub(v),E=l.redMul(w).redMul(S),I,F;return this.curve.twisted?(I=l.redMul(y).redMul(v.redSub(this.curve._mulA(g))),F=w.redMul(y)):(I=l.redMul(y).redMul(v.redSub(g)),F=this.curve._mulC(w).redMul(y)),this.curve.point(E,I,F)},r.prototype.add=function(o){return this.isInfinity()?o:o.isInfinity()?this:this.curve.extended?this._extAdd(o):this._projAdd(o)},r.prototype.mul=function(o){return this._hasDoubles(o)?this.curve._fixedNafMul(this,o):this.curve._wnafMul(this,o)},r.prototype.mulAdd=function(o,l,a){return this.curve._wnafMulAdd(1,[this,l],[o,a],2,!1)},r.prototype.jmulAdd=function(o,l,a){return this.curve._wnafMulAdd(1,[this,l],[o,a],2,!0)},r.prototype.normalize=function(){if(this.zOne)return this;var o=this.z.redInvm();return this.x=this.x.redMul(o),this.y=this.y.redMul(o),this.t&&(this.t=this.t.redMul(o)),this.z=this.curve.one,this.zOne=!0,this},r.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},r.prototype.getX=function(){return this.normalize(),this.x.fromRed()},r.prototype.getY=function(){return this.normalize(),this.y.fromRed()},r.prototype.eq=function(o){return this===o||this.getX().cmp(o.getX())===0&&this.getY().cmp(o.getY())===0},r.prototype.eqXToP=function(o){var l=o.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(l)===0)return!0;for(var a=o.clone(),g=this.curve.redN.redMul(this.z);;){if(a.iadd(this.curve.n),a.cmp(this.curve.p)>=0)return!1;if(l.redIAdd(g),this.x.cmp(l)===0)return!0}},r.prototype.toP=r.prototype.normalize,r.prototype.mixedAdd=r.prototype.add},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],408:[function(e,d,m){var f=m;f.base=e("./base"),f.short=e("./short"),f.mont=e("./mont"),f.edwards=e("./edwards")},{"./base":406,"./edwards":407,"./mont":409,"./short":410}],409:[function(e,d,m){var f=e("bn.js"),c=e("inherits"),u=e("./base"),s=e("../utils");function t(r){u.call(this,"mont",r),this.a=new f(r.a,16).toRed(this.red),this.b=new f(r.b,16).toRed(this.red),this.i4=new f(4).toRed(this.red).redInvm(),this.two=new f(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}c(t,u),d.exports=t,t.prototype.validate=function(i){var o=i.normalize().x,l=o.redSqr(),a=l.redMul(o).redAdd(l.redMul(this.a)).redAdd(o),g=a.redSqrt();return g.redSqr().cmp(a)===0};function n(r,i,o){u.BasePoint.call(this,r,"projective"),i===null&&o===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new f(i,16),this.z=new f(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}c(n,u.BasePoint),t.prototype.decodePoint=function(i,o){return this.point(s.toArray(i,o),1)},t.prototype.point=function(i,o){return new n(this,i,o)},t.prototype.pointFromJSON=function(i){return n.fromJSON(this,i)},n.prototype.precompute=function(){},n.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},n.fromJSON=function(i,o){return new n(i,o[0],o[1]||i.one)},n.prototype.inspect=function(){return this.isInfinity()?"":""},n.prototype.isInfinity=function(){return this.z.cmpn(0)===0},n.prototype.dbl=function(){var i=this.x.redAdd(this.z),o=i.redSqr(),l=this.x.redSub(this.z),a=l.redSqr(),g=o.redSub(a),v=o.redMul(a),h=g.redMul(a.redAdd(this.curve.a24.redMul(g)));return this.curve.point(v,h)},n.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},n.prototype.diffAdd=function(i,o){var l=this.x.redAdd(this.z),a=this.x.redSub(this.z),g=i.x.redAdd(i.z),v=i.x.redSub(i.z),h=v.redMul(l),w=g.redMul(a),y=o.z.redMul(h.redAdd(w).redSqr()),S=o.x.redMul(h.redISub(w).redSqr());return this.curve.point(y,S)},n.prototype.mul=function(i){for(var o=i.clone(),l=this,a=this.curve.point(null,null),g=this,v=[];o.cmpn(0)!==0;o.iushrn(1))v.push(o.andln(1));for(var h=v.length-1;h>=0;h--)v[h]===0?(l=l.diffAdd(a,g),a=a.dbl()):(a=l.diffAdd(a,g),l=l.dbl());return a},n.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},n.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},n.prototype.eq=function(i){return this.getX().cmp(i.getX())===0},n.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},n.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],410:[function(e,d,m){var f=e("../utils"),c=e("bn.js"),u=e("inherits"),s=e("./base"),t=f.assert;function n(o){s.call(this,"short",o),this.a=new c(o.a,16).toRed(this.red),this.b=new c(o.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=this.a.fromRed().cmpn(0)===0,this.threeA=this.a.fromRed().sub(this.p).cmpn(-3)===0,this.endo=this._getEndomorphism(o),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}u(n,s),d.exports=n,n.prototype._getEndomorphism=function(l){if(!(!this.zeroA||!this.g||!this.n||this.p.modn(3)!==1)){var a,g;if(l.beta)a=new c(l.beta,16).toRed(this.red);else{var v=this._getEndoRoots(this.p);a=v[0].cmp(v[1])<0?v[0]:v[1],a=a.toRed(this.red)}if(l.lambda)g=new c(l.lambda,16);else{var h=this._getEndoRoots(this.n);this.g.mul(h[0]).x.cmp(this.g.x.redMul(a))===0?g=h[0]:(g=h[1],t(this.g.mul(g).x.cmp(this.g.x.redMul(a))===0))}var w;return l.basis?w=l.basis.map(function(y){return{a:new c(y.a,16),b:new c(y.b,16)}}):w=this._getEndoBasis(g),{beta:a,lambda:g,basis:w}}},n.prototype._getEndoRoots=function(l){var a=l===this.p?this.red:c.mont(l),g=new c(2).toRed(a).redInvm(),v=g.redNeg(),h=new c(3).toRed(a).redNeg().redSqrt().redMul(g),w=v.redAdd(h).fromRed(),y=v.redSub(h).fromRed();return[w,y]},n.prototype._getEndoBasis=function(l){for(var a=this.n.ushrn(Math.floor(this.n.bitLength()/2)),g=l,v=this.n.clone(),h=new c(1),w=new c(0),y=new c(0),S=new c(1),E,I,F,B,j,X,G,V=0,J,H;g.cmpn(0)!==0;){var M=v.div(g);J=v.sub(M.mul(g)),H=y.sub(M.mul(h));var T=S.sub(M.mul(w));if(!F&&J.cmp(a)<0)E=G.neg(),I=h,F=J.neg(),B=H;else if(F&&++V===2)break;G=J,v=g,g=J,y=h,h=H,S=w,w=T}j=J.neg(),X=H;var _=F.sqr().add(B.sqr()),A=j.sqr().add(X.sqr());return A.cmp(_)>=0&&(j=E,X=I),F.negative&&(F=F.neg(),B=B.neg()),j.negative&&(j=j.neg(),X=X.neg()),[{a:F,b:B},{a:j,b:X}]},n.prototype._endoSplit=function(l){var a=this.endo.basis,g=a[0],v=a[1],h=v.b.mul(l).divRound(this.n),w=g.b.neg().mul(l).divRound(this.n),y=h.mul(g.a),S=w.mul(v.a),E=h.mul(g.b),I=w.mul(v.b),F=l.sub(y).sub(S),B=E.add(I).neg();return{k1:F,k2:B}},n.prototype.pointFromX=function(l,a){l=new c(l,16),l.red||(l=l.toRed(this.red));var g=l.redSqr().redMul(l).redIAdd(l.redMul(this.a)).redIAdd(this.b),v=g.redSqrt();if(v.redSqr().redSub(g).cmp(this.zero)!==0)throw new Error("invalid point");var h=v.fromRed().isOdd();return(a&&!h||!a&&h)&&(v=v.redNeg()),this.point(l,v)},n.prototype.validate=function(l){if(l.inf)return!0;var a=l.x,g=l.y,v=this.a.redMul(a),h=a.redSqr().redMul(a).redIAdd(v).redIAdd(this.b);return g.redSqr().redISub(h).cmpn(0)===0},n.prototype._endoWnafMulAdd=function(l,a,g){for(var v=this._endoWnafT1,h=this._endoWnafT2,w=0;w":""},r.prototype.isInfinity=function(){return this.inf},r.prototype.add=function(l){if(this.inf)return l;if(l.inf)return this;if(this.eq(l))return this.dbl();if(this.neg().eq(l))return this.curve.point(null,null);if(this.x.cmp(l.x)===0)return this.curve.point(null,null);var a=this.y.redSub(l.y);a.cmpn(0)!==0&&(a=a.redMul(this.x.redSub(l.x).redInvm()));var g=a.redSqr().redISub(this.x).redISub(l.x),v=a.redMul(this.x.redSub(g)).redISub(this.y);return this.curve.point(g,v)},r.prototype.dbl=function(){if(this.inf)return this;var l=this.y.redAdd(this.y);if(l.cmpn(0)===0)return this.curve.point(null,null);var a=this.curve.a,g=this.x.redSqr(),v=l.redInvm(),h=g.redAdd(g).redIAdd(g).redIAdd(a).redMul(v),w=h.redSqr().redISub(this.x.redAdd(this.x)),y=h.redMul(this.x.redSub(w)).redISub(this.y);return this.curve.point(w,y)},r.prototype.getX=function(){return this.x.fromRed()},r.prototype.getY=function(){return this.y.fromRed()},r.prototype.mul=function(l){return l=new c(l,16),this.isInfinity()?this:this._hasDoubles(l)?this.curve._fixedNafMul(this,l):this.curve.endo?this.curve._endoWnafMulAdd([this],[l]):this.curve._wnafMul(this,l)},r.prototype.mulAdd=function(l,a,g){var v=[this,a],h=[l,g];return this.curve.endo?this.curve._endoWnafMulAdd(v,h):this.curve._wnafMulAdd(1,v,h,2)},r.prototype.jmulAdd=function(l,a,g){var v=[this,a],h=[l,g];return this.curve.endo?this.curve._endoWnafMulAdd(v,h,!0):this.curve._wnafMulAdd(1,v,h,2,!0)},r.prototype.eq=function(l){return this===l||this.inf===l.inf&&(this.inf||this.x.cmp(l.x)===0&&this.y.cmp(l.y)===0)},r.prototype.neg=function(l){if(this.inf)return this;var a=this.curve.point(this.x,this.y.redNeg());if(l&&this.precomputed){var g=this.precomputed,v=function(h){return h.neg()};a.precomputed={naf:g.naf&&{wnd:g.naf.wnd,points:g.naf.points.map(v)},doubles:g.doubles&&{step:g.doubles.step,points:g.doubles.points.map(v)}}}return a},r.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var l=this.curve.jpoint(this.x,this.y,this.curve.one);return l};function i(o,l,a,g){s.BasePoint.call(this,o,"jacobian"),l===null&&a===null&&g===null?(this.x=this.curve.one,this.y=this.curve.one,this.z=new c(0)):(this.x=new c(l,16),this.y=new c(a,16),this.z=new c(g,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}u(i,s.BasePoint),n.prototype.jpoint=function(l,a,g){return new i(this,l,a,g)},i.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var l=this.z.redInvm(),a=l.redSqr(),g=this.x.redMul(a),v=this.y.redMul(a).redMul(l);return this.curve.point(g,v)},i.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},i.prototype.add=function(l){if(this.isInfinity())return l;if(l.isInfinity())return this;var a=l.z.redSqr(),g=this.z.redSqr(),v=this.x.redMul(a),h=l.x.redMul(g),w=this.y.redMul(a.redMul(l.z)),y=l.y.redMul(g.redMul(this.z)),S=v.redSub(h),E=w.redSub(y);if(S.cmpn(0)===0)return E.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var I=S.redSqr(),F=I.redMul(S),B=v.redMul(I),j=E.redSqr().redIAdd(F).redISub(B).redISub(B),X=E.redMul(B.redISub(j)).redISub(w.redMul(F)),G=this.z.redMul(l.z).redMul(S);return this.curve.jpoint(j,X,G)},i.prototype.mixedAdd=function(l){if(this.isInfinity())return l.toJ();if(l.isInfinity())return this;var a=this.z.redSqr(),g=this.x,v=l.x.redMul(a),h=this.y,w=l.y.redMul(a).redMul(this.z),y=g.redSub(v),S=h.redSub(w);if(y.cmpn(0)===0)return S.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var E=y.redSqr(),I=E.redMul(y),F=g.redMul(E),B=S.redSqr().redIAdd(I).redISub(F).redISub(F),j=S.redMul(F.redISub(B)).redISub(h.redMul(I)),X=this.z.redMul(y);return this.curve.jpoint(B,j,X)},i.prototype.dblp=function(l){if(l===0)return this;if(this.isInfinity())return this;if(!l)return this.dbl();var a;if(this.curve.zeroA||this.curve.threeA){var g=this;for(a=0;a=0)return!1;if(g.redIAdd(h),this.x.cmp(g)===0)return!0}},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return this.z.cmpn(0)===0}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],411:[function(e,d,m){var f=m,c=e("hash.js"),u=e("./curve"),s=e("./utils"),t=s.assert;function n(o){o.type==="short"?this.curve=new u.short(o):o.type==="edwards"?this.curve=new u.edwards(o):this.curve=new u.mont(o),this.g=this.curve.g,this.n=this.curve.n,this.hash=o.hash,t(this.g.validate(),"Invalid curve"),t(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}f.PresetCurve=n;function r(o,l){Object.defineProperty(f,o,{configurable:!0,enumerable:!0,get:function(){var a=new n(l);return Object.defineProperty(f,o,{configurable:!0,enumerable:!0,value:a}),a}})}r("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:c.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),r("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:c.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),r("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:c.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),r("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:c.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),r("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:c.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),r("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:c.sha256,gRed:!1,g:["9"]}),r("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:c.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var i;try{i=e("./precomputed/secp256k1")}catch{i=void 0}r("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:c.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",i]})},{"./curve":408,"./precomputed/secp256k1":418,"./utils":419,"hash.js":426}],412:[function(e,d,m){var f=e("bn.js"),c=e("hmac-drbg"),u=e("../utils"),s=e("../curves"),t=e("brorand"),n=u.assert,r=e("./key"),i=e("./signature");function o(l){if(!(this instanceof o))return new o(l);typeof l=="string"&&(n(Object.prototype.hasOwnProperty.call(s,l),"Unknown curve "+l),l=s[l]),l instanceof s.PresetCurve&&(l={curve:l}),this.curve=l.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=l.curve.g,this.g.precompute(l.curve.n.bitLength()+1),this.hash=l.hash||l.curve.hash}d.exports=o,o.prototype.keyPair=function(a){return new r(this,a)},o.prototype.keyFromPrivate=function(a,g){return r.fromPrivate(this,a,g)},o.prototype.keyFromPublic=function(a,g){return r.fromPublic(this,a,g)},o.prototype.genKeyPair=function(a){a||(a={});for(var g=new c({hash:this.hash,pers:a.pers,persEnc:a.persEnc||"utf8",entropy:a.entropy||t(this.hash.hmacStrength),entropyEnc:a.entropy&&a.entropyEnc||"utf8",nonce:this.n.toArray()}),v=this.n.byteLength(),h=this.n.sub(new f(2));;){var w=new f(g.generate(v));if(!(w.cmp(h)>0))return w.iaddn(1),this.keyFromPrivate(w)}},o.prototype._truncateToN=function(a,g){var v=a.byteLength()*8-this.n.bitLength();return v>0&&(a=a.ushrn(v)),!g&&a.cmp(this.n)>=0?a.sub(this.n):a},o.prototype.sign=function(a,g,v,h){typeof v=="object"&&(h=v,v=null),h||(h={}),g=this.keyFromPrivate(g,v),a=this._truncateToN(new f(a,16));for(var w=this.n.byteLength(),y=g.getPrivate().toArray("be",w),S=a.toArray("be",w),E=new c({hash:this.hash,entropy:y,nonce:S,pers:h.pers,persEnc:h.persEnc||"utf8"}),I=this.n.sub(new f(1)),F=0;;F++){var B=h.k?h.k(F):new f(E.generate(this.n.byteLength()));if(B=this._truncateToN(B,!0),!(B.cmpn(1)<=0||B.cmp(I)>=0)){var j=this.g.mul(B);if(!j.isInfinity()){var X=j.getX(),G=X.umod(this.n);if(G.cmpn(0)!==0){var V=B.invm(this.n).mul(G.mul(g.getPrivate()).iadd(a));if(V=V.umod(this.n),V.cmpn(0)!==0){var J=(j.getY().isOdd()?1:0)|(X.cmp(G)!==0?2:0);return h.canonical&&V.cmp(this.nh)>0&&(V=this.n.sub(V),J^=1),new i({r:G,s:V,recoveryParam:J})}}}}}},o.prototype.verify=function(a,g,v,h){a=this._truncateToN(new f(a,16)),v=this.keyFromPublic(v,h),g=new i(g,"hex");var w=g.r,y=g.s;if(w.cmpn(1)<0||w.cmp(this.n)>=0||y.cmpn(1)<0||y.cmp(this.n)>=0)return!1;var S=y.invm(this.n),E=S.mul(a).umod(this.n),I=S.mul(w).umod(this.n),F;return this.curve._maxwellTrick?(F=this.g.jmulAdd(E,v.getPublic(),I),F.isInfinity()?!1:F.eqXToP(w)):(F=this.g.mulAdd(E,v.getPublic(),I),F.isInfinity()?!1:F.getX().umod(this.n).cmp(w)===0)},o.prototype.recoverPubKey=function(l,a,g,v){n((3&g)===g,"The recovery param is more than two bits"),a=new i(a,v);var h=this.n,w=new f(l),y=a.r,S=a.s,E=g&1,I=g>>1;if(y.cmp(this.curve.p.umod(this.curve.n))>=0&&I)throw new Error("Unable to find sencond key candinate");I?y=this.curve.pointFromX(y.add(this.curve.n),E):y=this.curve.pointFromX(y,E);var F=a.r.invm(h),B=h.sub(w).mul(F).umod(h),j=S.mul(F).umod(h);return this.g.mulAdd(B,y,j)},o.prototype.getKeyRecoveryParam=function(l,a,g,v){if(a=new i(a,v),a.recoveryParam!==null)return a.recoveryParam;for(var h=0;h<4;h++){var w;try{w=this.recoverPubKey(l,a,h)}catch{continue}if(w.eq(g))return h}throw new Error("Unable to find valid recovery factor")}},{"../curves":411,"../utils":419,"./key":413,"./signature":414,"bn.js":420,brorand:187,"hmac-drbg":438}],413:[function(e,d,m){var f=e("bn.js"),c=e("../utils"),u=c.assert;function s(t,n){this.ec=t,this.priv=null,this.pub=null,n.priv&&this._importPrivate(n.priv,n.privEnc),n.pub&&this._importPublic(n.pub,n.pubEnc)}d.exports=s,s.fromPublic=function(n,r,i){return r instanceof s?r:new s(n,{pub:r,pubEnc:i})},s.fromPrivate=function(n,r,i){return r instanceof s?r:new s(n,{priv:r,privEnc:i})},s.prototype.validate=function(){var n=this.getPublic();return n.isInfinity()?{result:!1,reason:"Invalid public key"}:n.validate()?n.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},s.prototype.getPublic=function(n,r){return typeof n=="string"&&(r=n,n=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),r?this.pub.encode(r,n):this.pub},s.prototype.getPrivate=function(n){return n==="hex"?this.priv.toString(16,2):this.priv},s.prototype._importPrivate=function(n,r){this.priv=new f(n,r||16),this.priv=this.priv.umod(this.ec.curve.n)},s.prototype._importPublic=function(n,r){if(n.x||n.y){this.ec.curve.type==="mont"?u(n.x,"Need x coordinate"):(this.ec.curve.type==="short"||this.ec.curve.type==="edwards")&&u(n.x&&n.y,"Need both x and y coordinate"),this.pub=this.ec.curve.point(n.x,n.y);return}this.pub=this.ec.curve.decodePoint(n,r)},s.prototype.derive=function(n){return n.validate()||u(n.validate(),"public point not validated"),n.mul(this.priv).getX()},s.prototype.sign=function(n,r,i){return this.ec.sign(n,this,r,i)},s.prototype.verify=function(n,r){return this.ec.verify(n,r,this)},s.prototype.inspect=function(){return""}},{"../utils":419,"bn.js":420}],414:[function(e,d,m){var f=e("bn.js"),c=e("../utils"),u=c.assert;function s(o,l){if(o instanceof s)return o;this._importDER(o,l)||(u(o.r&&o.s,"Signature without r or s"),this.r=new f(o.r,16),this.s=new f(o.s,16),o.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=o.recoveryParam)}d.exports=s;function t(){this.place=0}function n(o,l){var a=o[l.place++];if(!(a&128))return a;var g=a&15;if(g===0||g>4)return!1;for(var v=0,h=0,w=l.place;h>>=0;return v<=127?!1:(l.place=w,v)}function r(o){for(var l=0,a=o.length-1;!o[l]&&!(o[l+1]&128)&&l>>3);for(o.push(a|128);--a;)o.push(l>>>(a<<3)&255);o.push(l)}s.prototype.toDER=function(l){var a=this.r.toArray(),g=this.s.toArray();for(a[0]&128&&(a=[0].concat(a)),g[0]&128&&(g=[0].concat(g)),a=r(a),g=r(g);!g[0]&&!(g[1]&128);)g=g.slice(1);var v=[2];i(v,a.length),v=v.concat(a),v.push(2),i(v,g.length);var h=v.concat(g),w=[48];return i(w,h.length),w=w.concat(h),c.encode(w,l)}},{"../utils":419,"bn.js":420}],415:[function(e,d,m){var f=e("hash.js"),c=e("../curves"),u=e("../utils"),s=u.assert,t=u.parseBytes,n=e("./key"),r=e("./signature");function i(o){if(s(o==="ed25519","only tested with ed25519 so far"),!(this instanceof i))return new i(o);o=c[o].curve,this.curve=o,this.g=o.g,this.g.precompute(o.n.bitLength()+1),this.pointClass=o.point().constructor,this.encodingLength=Math.ceil(o.n.bitLength()/8),this.hash=f.sha512}d.exports=i,i.prototype.sign=function(l,a){l=t(l);var g=this.keyFromSecret(a),v=this.hashInt(g.messagePrefix(),l),h=this.g.mul(v),w=this.encodePoint(h),y=this.hashInt(w,g.pubBytes(),l).mul(g.priv()),S=v.add(y).umod(this.curve.n);return this.makeSignature({R:h,S,Rencoded:w})},i.prototype.verify=function(l,a,g){l=t(l),a=this.makeSignature(a);var v=this.keyFromPublic(g),h=this.hashInt(a.Rencoded(),v.pubBytes(),l),w=this.g.mul(a.S()),y=a.R().add(v.pub().mul(h));return y.eq(w)},i.prototype.hashInt=function(){for(var l=this.hash(),a=0;a(h>>1)-1?S=(h>>1)-E:S=E,w.isubn(S)):S=0,v[y]=S,w.iushrn(1)}return v}f.getNAF=t;function n(l,a){var g=[[],[]];l=l.clone(),a=a.clone();for(var v=0,h=0,w;l.cmpn(-v)>0||a.cmpn(-h)>0;){var y=l.andln(3)+v&3,S=a.andln(3)+h&3;y===3&&(y=-1),S===3&&(S=-1);var E;y&1?(w=l.andln(7)+v&7,(w===3||w===5)&&S===2?E=-y:E=y):E=0,g[0].push(E);var I;S&1?(w=a.andln(7)+h&7,(w===3||w===5)&&y===2?I=-S:I=S):I=0,g[1].push(I),2*v===E+1&&(v=1-v),2*h===I+1&&(h=1-h),l.iushrn(1),a.iushrn(1)}return g}f.getJSF=n;function r(l,a,g){var v="_"+a;l.prototype[a]=function(){return this[v]!==void 0?this[v]:this[v]=g.call(this)}}f.cachedProperty=r;function i(l){return typeof l=="string"?f.toArray(l,"hex"):l}f.parseBytes=i;function o(l){return new c(l,"hex","le")}f.intFromLE=o},{"bn.js":420,"minimalistic-assert":453,"minimalistic-crypto-utils":454}],420:[function(e,d,m){arguments[4][184][0].apply(m,arguments)},{buffer:188,dup:184}],421:[function(e,d,m){d.exports={name:"elliptic",version:"6.5.4",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny ",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies:{"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}}},{}],422:[function(e,d,m){var f=Object.create||j,c=Object.keys||X,u=Function.prototype.bind||G;function s(){(!this._events||!Object.prototype.hasOwnProperty.call(this,"_events"))&&(this._events=f(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}d.exports=s,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._maxListeners=void 0;var t=10,n;try{var r={};Object.defineProperty&&Object.defineProperty(r,"x",{value:0}),n=r.x===0}catch{n=!1}n?Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return t},set:function(V){if(typeof V!="number"||V<0||V!==V)throw new TypeError('"defaultMaxListeners" must be a positive number');t=V}}):s.defaultMaxListeners=t,s.prototype.setMaxListeners=function(J){if(typeof J!="number"||J<0||isNaN(J))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=J,this};function i(V){return V._maxListeners===void 0?s.defaultMaxListeners:V._maxListeners}s.prototype.getMaxListeners=function(){return i(this)};function o(V,J,H){if(J)V.call(H);else for(var M=V.length,T=F(V,M),_=0;_1&&(H=arguments[1]),H instanceof Error)throw H;var $=new Error('Unhandled "error" event. ('+H+")");throw $.context=H,$}if(M=P[J],!M)return!1;var R=typeof M=="function";switch(T=arguments.length,T){case 1:o(M,R,this);break;case 2:l(M,R,this,arguments[1]);break;case 3:a(M,R,this,arguments[1],arguments[2]);break;case 4:g(M,R,this,arguments[1],arguments[2],arguments[3]);break;default:for(_=new Array(T-1),A=1;A0&&A.length>T)){A.warned=!0;var P=new Error("Possible EventEmitter memory leak detected. "+A.length+' "'+String(J)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');P.name="MaxListenersExceededWarning",P.emitter=V,P.type=J,P.count=A.length,typeof console=="object"&&console.warn&&console.warn("%s: %s",P.name,P.message)}return V}s.prototype.addListener=function(J,H){return h(this,J,H,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(J,H){return h(this,J,H,!0)};function w(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var V=new Array(arguments.length),J=0;J=0;A--)if(M[A]===H||M[A].listener===H){P=M[A].listener,_=A;break}if(_<0)return this;_===0?M.shift():I(M,_),M.length===1&&(T[J]=M[0]),T.removeListener&&this.emit("removeListener",J,P||H)}return this},s.prototype.removeAllListeners=function(J){var H,M,T;if(M=this._events,!M)return this;if(!M.removeListener)return arguments.length===0?(this._events=f(null),this._eventsCount=0):M[J]&&(--this._eventsCount===0?this._events=f(null):delete M[J]),this;if(arguments.length===0){var _=c(M),A;for(T=0;T<_.length;++T)A=_[T],A!=="removeListener"&&this.removeAllListeners(A);return this.removeAllListeners("removeListener"),this._events=f(null),this._eventsCount=0,this}if(H=M[J],typeof H=="function")this.removeListener(J,H);else if(H)for(T=H.length-1;T>=0;T--)this.removeListener(J,H[T]);return this};function S(V,J,H){var M=V._events;if(!M)return[];var T=M[J];return T?typeof T=="function"?H?[T.listener||T]:[T]:H?B(T):F(T,T.length):[]}s.prototype.listeners=function(J){return S(this,J,!0)},s.prototype.rawListeners=function(J){return S(this,J,!1)},s.listenerCount=function(V,J){return typeof V.listenerCount=="function"?V.listenerCount(J):E.call(V,J)},s.prototype.listenerCount=E;function E(V){var J=this._events;if(J){var H=J[V];if(typeof H=="function")return 1;if(H)return H.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};function I(V,J){for(var H=J,M=H+1,T=V.length;M0||r>0;){var g=new c;g.update(a),g.update(s),t&&g.update(t),a=g.digest();var v=0;if(i>0){var h=o.length-i;v=Math.min(i,a.length),a.copy(o,h,0,v),i-=v}if(v0){var w=l.length-r,y=Math.min(r,a.length-v);a.copy(l,w,v,v+y),r-=y}}return a.fill(0),{key:o,iv:l}}d.exports=u},{"md5.js":450,"safe-buffer":494}],424:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.CsvParserStream=m.ParserOptions=m.parseFile=m.parseStream=m.parseString=m.parse=m.FormatterOptions=m.CsvFormatterStream=m.writeToPath=m.writeToString=m.writeToBuffer=m.writeToStream=m.write=m.format=void 0;var f=e("@fast-csv/format");Object.defineProperty(m,"format",{enumerable:!0,get:function(){return f.format}}),Object.defineProperty(m,"write",{enumerable:!0,get:function(){return f.write}}),Object.defineProperty(m,"writeToStream",{enumerable:!0,get:function(){return f.writeToStream}}),Object.defineProperty(m,"writeToBuffer",{enumerable:!0,get:function(){return f.writeToBuffer}}),Object.defineProperty(m,"writeToString",{enumerable:!0,get:function(){return f.writeToString}}),Object.defineProperty(m,"writeToPath",{enumerable:!0,get:function(){return f.writeToPath}}),Object.defineProperty(m,"CsvFormatterStream",{enumerable:!0,get:function(){return f.CsvFormatterStream}}),Object.defineProperty(m,"FormatterOptions",{enumerable:!0,get:function(){return f.FormatterOptions}});var c=e("@fast-csv/parse");Object.defineProperty(m,"parse",{enumerable:!0,get:function(){return c.parse}}),Object.defineProperty(m,"parseString",{enumerable:!0,get:function(){return c.parseString}}),Object.defineProperty(m,"parseStream",{enumerable:!0,get:function(){return c.parseStream}}),Object.defineProperty(m,"parseFile",{enumerable:!0,get:function(){return c.parseFile}}),Object.defineProperty(m,"ParserOptions",{enumerable:!0,get:function(){return c.ParserOptions}}),Object.defineProperty(m,"CsvParserStream",{enumerable:!0,get:function(){return c.CsvParserStream}})},{"@fast-csv/format":151,"@fast-csv/parse":155}],425:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("readable-stream").Transform,u=e("inherits");function s(n,r){if(!f.isBuffer(n)&&typeof n!="string")throw new TypeError(r+" must be a string or a buffer")}function t(n){c.call(this),this._block=f.allocUnsafe(n),this._blockSize=n,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}u(t,c),t.prototype._transform=function(n,r,i){var o=null;try{this.update(n,r)}catch(l){o=l}i(o)},t.prototype._flush=function(n){var r=null;try{this.push(this.digest())}catch(i){r=i}n(r)},t.prototype.update=function(n,r){if(s(n,"Data"),this._finalized)throw new Error("Digest already called");f.isBuffer(n)||(n=f.from(n,r));for(var i=this._block,o=0;this._blockOffset+n.length-o>=this._blockSize;){for(var l=this._blockOffset;l0;++a)this._length[a]+=g,g=this._length[a]/4294967296|0,g>0&&(this._length[a]-=4294967296*g);return this},t.prototype._update=function(){throw new Error("_update is not implemented")},t.prototype.digest=function(n){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var r=this._digest();n!==void 0&&(r=r.toString(n)),this._block.fill(0),this._blockOffset=0;for(var i=0;i<4;++i)this._length[i]=0;return r},t.prototype._digest=function(){throw new Error("_digest is not implemented")},d.exports=t},{inherits:440,"readable-stream":491,"safe-buffer":494}],426:[function(e,d,m){var f=m;f.utils=e("./hash/utils"),f.common=e("./hash/common"),f.sha=e("./hash/sha"),f.ripemd=e("./hash/ripemd"),f.hmac=e("./hash/hmac"),f.sha1=f.sha.sha1,f.sha256=f.sha.sha256,f.sha224=f.sha.sha224,f.sha384=f.sha.sha384,f.sha512=f.sha.sha512,f.ripemd160=f.ripemd.ripemd160},{"./hash/common":427,"./hash/hmac":428,"./hash/ripemd":429,"./hash/sha":430,"./hash/utils":437}],427:[function(e,d,m){var f=e("./utils"),c=e("minimalistic-assert");function u(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}m.BlockHash=u,u.prototype.update=function(t,n){if(t=f.toArray(t,n),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){t=this.pending;var r=t.length%this._delta8;this.pending=t.slice(t.length-r,t.length),this.pending.length===0&&(this.pending=null),t=f.join32(t,0,t.length-r,this.endian);for(var i=0;i>>24&255,i[o++]=t>>>16&255,i[o++]=t>>>8&255,i[o++]=t&255}else for(i[o++]=t&255,i[o++]=t>>>8&255,i[o++]=t>>>16&255,i[o++]=t>>>24&255,i[o++]=0,i[o++]=0,i[o++]=0,i[o++]=0,l=8;lthis.blockSize&&(t=new this.Hash().update(t).digest()),c(t.length<=this.blockSize);for(var n=t.length;n>>3}m.g0_256=o;function l(a){return c(a,17)^c(a,19)^a>>>10}m.g1_256=l},{"../utils":437}],437:[function(e,d,m){var f=e("minimalistic-assert"),c=e("inherits");m.inherits=c;function u(T,_){return(T.charCodeAt(_)&64512)!==55296||_<0||_+1>=T.length?!1:(T.charCodeAt(_+1)&64512)===56320}function s(T,_){if(Array.isArray(T))return T.slice();if(!T)return[];var A=[];if(typeof T=="string")if(_){if(_==="hex")for(T=T.replace(/[^a-z0-9]+/ig,""),T.length%2!==0&&(T="0"+T),L=0;L>6|192,A[P++]=$&63|128):u(T,L)?($=65536+(($&1023)<<10)+(T.charCodeAt(++L)&1023),A[P++]=$>>18|240,A[P++]=$>>12&63|128,A[P++]=$>>6&63|128,A[P++]=$&63|128):(A[P++]=$>>12|224,A[P++]=$>>6&63|128,A[P++]=$&63|128)}else for(L=0;L>>24|T>>>8&65280|T<<8&16711680|(T&255)<<24;return _>>>0}m.htonl=n;function r(T,_){for(var A="",P=0;P>>0}return $}m.join32=l;function a(T,_){for(var A=new Array(T.length*4),P=0,L=0;P>>24,A[L+1]=$>>>16&255,A[L+2]=$>>>8&255,A[L+3]=$&255):(A[L+3]=$>>>24,A[L+2]=$>>>16&255,A[L+1]=$>>>8&255,A[L]=$&255)}return A}m.split32=a;function g(T,_){return T>>>_|T<<32-_}m.rotr32=g;function v(T,_){return T<<_|T>>>32-_}m.rotl32=v;function h(T,_){return T+_>>>0}m.sum32=h;function w(T,_,A){return T+_+A>>>0}m.sum32_3=w;function y(T,_,A,P){return T+_+A+P>>>0}m.sum32_4=y;function S(T,_,A,P,L){return T+_+A+P+L>>>0}m.sum32_5=S;function E(T,_,A,P){var L=T[_],$=T[_+1],R=P+$>>>0,k=(R>>0,T[_+1]=R}m.sum64=E;function I(T,_,A,P){var L=_+P>>>0,$=(L<_?1:0)+T+A;return $>>>0}m.sum64_hi=I;function F(T,_,A,P){var L=_+P;return L>>>0}m.sum64_lo=F;function B(T,_,A,P,L,$,R,k){var C=0,O=_;O=O+P>>>0,C+=O<_?1:0,O=O+$>>>0,C+=O<$?1:0,O=O+k>>>0,C+=O>>0}m.sum64_4_hi=B;function j(T,_,A,P,L,$,R,k){var C=_+P+$+k;return C>>>0}m.sum64_4_lo=j;function X(T,_,A,P,L,$,R,k,C,O){var W=0,ne=_;ne=ne+P>>>0,W+=ne<_?1:0,ne=ne+$>>>0,W+=ne<$?1:0,ne=ne+k>>>0,W+=ne>>0,W+=ne>>0}m.sum64_5_hi=X;function G(T,_,A,P,L,$,R,k,C,O){var W=_+P+$+k+O;return W>>>0}m.sum64_5_lo=G;function V(T,_,A){var P=_<<32-A|T>>>A;return P>>>0}m.rotr64_hi=V;function J(T,_,A){var P=T<<32-A|_>>>A;return P>>>0}m.rotr64_lo=J;function H(T,_,A){return T>>>A}m.shr64_hi=H;function M(T,_,A){var P=T<<32-A|_>>>A;return P>>>0}m.shr64_lo=M},{inherits:440,"minimalistic-assert":453}],438:[function(e,d,m){var f=e("hash.js"),c=e("minimalistic-crypto-utils"),u=e("minimalistic-assert");function s(t){if(!(this instanceof s))return new s(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var n=c.toArray(t.entropy,t.entropyEnc||"hex"),r=c.toArray(t.nonce,t.nonceEnc||"hex"),i=c.toArray(t.pers,t.persEnc||"hex");u(n.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(n,r,i)}d.exports=s,s.prototype._init=function(n,r,i){var o=n.concat(r).concat(i);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var l=0;l=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(n.concat(i||[])),this._reseed=1},s.prototype.generate=function(n,r,i,o){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof r!="string"&&(o=i,i=r,r=null),i&&(i=c.toArray(i,o||"hex"),this._update(i));for(var l=[];l.length */m.read=function(f,c,u,s,t){var n,r,i=t*8-s-1,o=(1<>1,a=-7,g=u?t-1:0,v=u?-1:1,h=f[c+g];for(g+=v,n=h&(1<<-a)-1,h>>=-a,a+=i;a>0;n=n*256+f[c+g],g+=v,a-=8);for(r=n&(1<<-a)-1,n>>=-a,a+=s;a>0;r=r*256+f[c+g],g+=v,a-=8);if(n===0)n=1-l;else{if(n===o)return r?NaN:(h?-1:1)*(1/0);r=r+Math.pow(2,s),n=n-l}return(h?-1:1)*r*Math.pow(2,n-s)},m.write=function(f,c,u,s,t,n){var r,i,o,l=n*8-t-1,a=(1<>1,v=t===23?Math.pow(2,-24)-Math.pow(2,-77):0,h=s?0:n-1,w=s?1:-1,y=c<0||c===0&&1/c<0?1:0;for(c=Math.abs(c),isNaN(c)||c===1/0?(i=isNaN(c)?1:0,r=a):(r=Math.floor(Math.log(c)/Math.LN2),c*(o=Math.pow(2,-r))<1&&(r--,o*=2),r+g>=1?c+=v/o:c+=v*Math.pow(2,1-g),c*o>=2&&(r++,o/=2),r+g>=a?(i=0,r=a):r+g>=1?(i=(c*o-1)*Math.pow(2,t),r=r+g):(i=c*Math.pow(2,g-1)*Math.pow(2,t),r=0));t>=8;f[u+h]=i&255,h+=w,i/=256,t-=8);for(r=r<0;f[u+h]=r&255,h+=w,r/=256,l-=8);f[u+h-w]|=y*128}},{}],440:[function(e,d,m){typeof Object.create=="function"?d.exports=function(c,u){u&&(c.super_=u,c.prototype=Object.create(u.prototype,{constructor:{value:c,enumerable:!1,writable:!0,configurable:!0}}))}:d.exports=function(c,u){if(u){c.super_=u;var s=function(){};s.prototype=u.prototype,c.prototype=new s,c.prototype.constructor=c}}},{}],441:[function(e,d,m){(function(f,c,u,s,t,n,r,i){(function(){/*! + + JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + + (c) 2009-2016 Stuart Knightley + Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + + JSZip uses the library pako released under the MIT license : + https://github.com/nodeca/pako/blob/main/LICENSE + */(function(o){typeof m=="object"&&typeof d<"u"?d.exports=o():(typeof window<"u"?window:typeof c<"u"?c:typeof self<"u"?self:this).JSZip=o()})(function(){return function o(l,a,g){function v(y,S){if(!a[y]){if(!l[y]){var E=typeof e=="function"&&e;if(!S&&E)return E(y,!0);if(h)return h(y,!0);var I=new Error("Cannot find module '"+y+"'");throw I.code="MODULE_NOT_FOUND",I}var F=a[y]={exports:{}};l[y][0].call(F.exports,function(B){var j=l[y][1][B];return v(j||B)},F,F.exports,o,l,a,g)}return a[y].exports}for(var h=typeof e=="function"&&e,w=0;w>2,F=(3&y)<<4|S>>4,B=1>6:64,j=2>4,S=(15&I)<<4|(F=h.indexOf(w.charAt(j++)))>>2,E=(3&F)<<6|(B=h.indexOf(w.charAt(j++))),V[X++]=y,F!==64&&(V[X++]=S),B!==64&&(V[X++]=E);return V}},{"./support":30,"./utils":32}],2:[function(o,l,a){var g=o("./external"),v=o("./stream/DataWorker"),h=o("./stream/Crc32Probe"),w=o("./stream/DataLengthProbe");function y(S,E,I,F,B){this.compressedSize=S,this.uncompressedSize=E,this.crc32=I,this.compression=F,this.compressedContent=B}y.prototype={getContentWorker:function(){var S=new v(g.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new w("data_length")),E=this;return S.on("end",function(){if(this.streamInfo.data_length!==E.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),S},getCompressedWorker:function(){return new v(g.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},y.createWorkerFrom=function(S,E,I){return S.pipe(new h).pipe(new w("uncompressedSize")).pipe(E.compressWorker(I)).pipe(new w("compressedSize")).withStreamInfo("compression",E)},l.exports=y},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(o,l,a){var g=o("./stream/GenericWorker");a.STORE={magic:"\0\0",compressWorker:function(){return new g("STORE compression")},uncompressWorker:function(){return new g("STORE decompression")}},a.DEFLATE=o("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(o,l,a){var g=o("./utils"),v=function(){for(var h,w=[],y=0;y<256;y++){h=y;for(var S=0;S<8;S++)h=1&h?3988292384^h>>>1:h>>>1;w[y]=h}return w}();l.exports=function(h,w){return h!==void 0&&h.length?g.getTypeOf(h)!=="string"?function(y,S,E,I){var F=v,B=I+E;y^=-1;for(var j=I;j>>8^F[255&(y^S[j])];return-1^y}(0|w,h,h.length,0):function(y,S,E,I){var F=v,B=I+E;y^=-1;for(var j=I;j>>8^F[255&(y^S.charCodeAt(j))];return-1^y}(0|w,h,h.length,0):0}},{"./utils":32}],5:[function(o,l,a){a.base64=!1,a.binary=!1,a.dir=!1,a.createFolders=!0,a.date=null,a.compression=null,a.compressionOptions=null,a.comment=null,a.unixPermissions=null,a.dosPermissions=null},{}],6:[function(o,l,a){var g=null;g=typeof Promise<"u"?Promise:o("lie"),l.exports={Promise:g}},{lie:37}],7:[function(o,l,a){var g=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",v=o("pako"),h=o("./utils"),w=o("./stream/GenericWorker"),y=g?"uint8array":"array";function S(E,I){w.call(this,"FlateWorker/"+E),this._pako=null,this._pakoAction=E,this._pakoOptions=I,this.meta={}}a.magic="\b\0",h.inherits(S,w),S.prototype.processChunk=function(E){this.meta=E.meta,this._pako===null&&this._createPako(),this._pako.push(h.transformTo(y,E.data),!1)},S.prototype.flush=function(){w.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},S.prototype.cleanUp=function(){w.prototype.cleanUp.call(this),this._pako=null},S.prototype._createPako=function(){this._pako=new v[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var E=this;this._pako.onData=function(I){E.push({data:I,meta:E.meta})}},a.compressWorker=function(E){return new S("Deflate",E)},a.uncompressWorker=function(){return new S("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(o,l,a){function g(F,B){var j,X="";for(j=0;j>>=8;return X}function v(F,B,j,X,G,V){var J,H,M=F.file,T=F.compression,_=V!==y.utf8encode,A=h.transformTo("string",V(M.name)),P=h.transformTo("string",y.utf8encode(M.name)),L=M.comment,$=h.transformTo("string",V(L)),R=h.transformTo("string",y.utf8encode(L)),k=P.length!==M.name.length,C=R.length!==L.length,O="",W="",ne="",he=M.dir,ue=M.date,Ae={crc32:0,compressedSize:0,uncompressedSize:0};B&&!j||(Ae.crc32=F.crc32,Ae.compressedSize=F.compressedSize,Ae.uncompressedSize=F.uncompressedSize);var pe=0;B&&(pe|=8),_||!k&&!C||(pe|=2048);var te=0,Z=0;he&&(te|=16),G==="UNIX"?(Z=798,te|=function(de,ke){var oe=de;return de||(oe=ke?16893:33204),(65535&oe)<<16}(M.unixPermissions,he)):(Z=20,te|=function(de){return 63&(de||0)}(M.dosPermissions)),J=ue.getUTCHours(),J<<=6,J|=ue.getUTCMinutes(),J<<=5,J|=ue.getUTCSeconds()/2,H=ue.getUTCFullYear()-1980,H<<=4,H|=ue.getUTCMonth()+1,H<<=5,H|=ue.getUTCDate(),k&&(W=g(1,1)+g(S(A),4)+P,O+="up"+g(W.length,2)+W),C&&(ne=g(1,1)+g(S($),4)+R,O+="uc"+g(ne.length,2)+ne);var q="";return q+=` +\0`,q+=g(pe,2),q+=T.magic,q+=g(J,2),q+=g(H,2),q+=g(Ae.crc32,4),q+=g(Ae.compressedSize,4),q+=g(Ae.uncompressedSize,4),q+=g(A.length,2),q+=g(O.length,2),{fileRecord:E.LOCAL_FILE_HEADER+q+A+O,dirRecord:E.CENTRAL_FILE_HEADER+g(Z,2)+q+g($.length,2)+"\0\0\0\0"+g(te,4)+g(X,4)+A+O+$}}var h=o("../utils"),w=o("../stream/GenericWorker"),y=o("../utf8"),S=o("../crc32"),E=o("../signature");function I(F,B,j,X){w.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=B,this.zipPlatform=j,this.encodeFileName=X,this.streamFiles=F,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}h.inherits(I,w),I.prototype.push=function(F){var B=F.meta.percent||0,j=this.entriesCount,X=this._sources.length;this.accumulate?this.contentBuffer.push(F):(this.bytesWritten+=F.data.length,w.prototype.push.call(this,{data:F.data,meta:{currentFile:this.currentFile,percent:j?(B+100*(j-X-1))/j:100}}))},I.prototype.openedSource=function(F){this.currentSourceOffset=this.bytesWritten,this.currentFile=F.file.name;var B=this.streamFiles&&!F.file.dir;if(B){var j=v(F,B,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:j.fileRecord,meta:{percent:0}})}else this.accumulate=!0},I.prototype.closedSource=function(F){this.accumulate=!1;var B=this.streamFiles&&!F.file.dir,j=v(F,B,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(j.dirRecord),B)this.push({data:function(X){return E.DATA_DESCRIPTOR+g(X.crc32,4)+g(X.compressedSize,4)+g(X.uncompressedSize,4)}(F),meta:{percent:100}});else for(this.push({data:j.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},I.prototype.flush=function(){for(var F=this.bytesWritten,B=0;B=this.index;w--)y=(y<<8)+this.byteAt(w);return this.index+=h,y},readString:function(h){return g.transformTo("string",this.readData(h))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var h=this.readInt(4);return new Date(Date.UTC(1980+(h>>25&127),(h>>21&15)-1,h>>16&31,h>>11&31,h>>5&63,(31&h)<<1))}},l.exports=v},{"../utils":32}],19:[function(o,l,a){var g=o("./Uint8ArrayReader");function v(h){g.call(this,h)}o("../utils").inherits(v,g),v.prototype.readData=function(h){this.checkOffset(h);var w=this.data.slice(this.zero+this.index,this.zero+this.index+h);return this.index+=h,w},l.exports=v},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(o,l,a){var g=o("./DataReader");function v(h){g.call(this,h)}o("../utils").inherits(v,g),v.prototype.byteAt=function(h){return this.data.charCodeAt(this.zero+h)},v.prototype.lastIndexOfSignature=function(h){return this.data.lastIndexOf(h)-this.zero},v.prototype.readAndCheckSignature=function(h){return h===this.readData(4)},v.prototype.readData=function(h){this.checkOffset(h);var w=this.data.slice(this.zero+this.index,this.zero+this.index+h);return this.index+=h,w},l.exports=v},{"../utils":32,"./DataReader":18}],21:[function(o,l,a){var g=o("./ArrayReader");function v(h){g.call(this,h)}o("../utils").inherits(v,g),v.prototype.readData=function(h){if(this.checkOffset(h),h===0)return new Uint8Array(0);var w=this.data.subarray(this.zero+this.index,this.zero+this.index+h);return this.index+=h,w},l.exports=v},{"../utils":32,"./ArrayReader":17}],22:[function(o,l,a){var g=o("../utils"),v=o("../support"),h=o("./ArrayReader"),w=o("./StringReader"),y=o("./NodeBufferReader"),S=o("./Uint8ArrayReader");l.exports=function(E){var I=g.getTypeOf(E);return g.checkSupport(I),I!=="string"||v.uint8array?I==="nodebuffer"?new y(E):v.uint8array?new S(g.transformTo("uint8array",E)):new h(g.transformTo("array",E)):new w(E)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(o,l,a){a.LOCAL_FILE_HEADER="PK",a.CENTRAL_FILE_HEADER="PK",a.CENTRAL_DIRECTORY_END="PK",a.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",a.ZIP64_CENTRAL_DIRECTORY_END="PK",a.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(o,l,a){var g=o("./GenericWorker"),v=o("../utils");function h(w){g.call(this,"ConvertWorker to "+w),this.destType=w}v.inherits(h,g),h.prototype.processChunk=function(w){this.push({data:v.transformTo(this.destType,w.data),meta:w.meta})},l.exports=h},{"../utils":32,"./GenericWorker":28}],25:[function(o,l,a){var g=o("./GenericWorker"),v=o("../crc32");function h(){g.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}o("../utils").inherits(h,g),h.prototype.processChunk=function(w){this.streamInfo.crc32=v(w.data,this.streamInfo.crc32||0),this.push(w)},l.exports=h},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(o,l,a){var g=o("../utils"),v=o("./GenericWorker");function h(w){v.call(this,"DataLengthProbe for "+w),this.propName=w,this.withStreamInfo(w,0)}g.inherits(h,v),h.prototype.processChunk=function(w){if(w){var y=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=y+w.data.length}v.prototype.processChunk.call(this,w)},l.exports=h},{"../utils":32,"./GenericWorker":28}],27:[function(o,l,a){var g=o("../utils"),v=o("./GenericWorker");function h(w){v.call(this,"DataWorker");var y=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,w.then(function(S){y.dataIsReady=!0,y.data=S,y.max=S&&S.length||0,y.type=g.getTypeOf(S),y.isPaused||y._tickAndRepeat()},function(S){y.error(S)})}g.inherits(h,v),h.prototype.cleanUp=function(){v.prototype.cleanUp.call(this),this.data=null},h.prototype.resume=function(){return!!v.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,g.delay(this._tickAndRepeat,[],this)),!0)},h.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(g.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},h.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var w=null,y=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":w=this.data.substring(this.index,y);break;case"uint8array":w=this.data.subarray(this.index,y);break;case"array":case"nodebuffer":w=this.data.slice(this.index,y)}return this.index=y,this.push({data:w,meta:{percent:this.max?this.index/this.max*100:0}})},l.exports=h},{"../utils":32,"./GenericWorker":28}],28:[function(o,l,a){function g(v){this.name=v||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}g.prototype={push:function(v){this.emit("data",v)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(v){this.emit("error",v)}return!0},error:function(v){return!this.isFinished&&(this.isPaused?this.generatedError=v:(this.isFinished=!0,this.emit("error",v),this.previous&&this.previous.error(v),this.cleanUp()),!0)},on:function(v,h){return this._listeners[v].push(h),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(v,h){if(this._listeners[v])for(var w=0;w "+v:v}},l.exports=g},{}],29:[function(o,l,a){var g=o("../utils"),v=o("./ConvertWorker"),h=o("./GenericWorker"),w=o("../base64"),y=o("../support"),S=o("../external"),E=null;if(y.nodestream)try{E=o("../nodejs/NodejsStreamOutputAdapter")}catch{}function I(B,j){return new S.Promise(function(X,G){var V=[],J=B._internalType,H=B._outputType,M=B._mimeType;B.on("data",function(T,_){V.push(T),j&&j(_)}).on("error",function(T){V=[],G(T)}).on("end",function(){try{var T=function(_,A,P){switch(_){case"blob":return g.newBlob(g.transformTo("arraybuffer",A),P);case"base64":return w.encode(A);default:return g.transformTo(_,A)}}(H,function(_,A){var P,L=0,$=null,R=0;for(P=0;P"u")a.blob=!1;else{var g=new ArrayBuffer(0);try{a.blob=new Blob([g],{type:"application/zip"}).size===0}catch{try{var v=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);v.append(g),a.blob=v.getBlob("application/zip").size===0}catch{a.blob=!1}}}try{a.nodestream=!!o("readable-stream").Readable}catch{a.nodestream=!1}},{"readable-stream":16}],31:[function(o,l,a){for(var g=o("./utils"),v=o("./support"),h=o("./nodejsUtils"),w=o("./stream/GenericWorker"),y=new Array(256),S=0;S<256;S++)y[S]=252<=S?6:248<=S?5:240<=S?4:224<=S?3:192<=S?2:1;y[254]=y[254]=1;function E(){w.call(this,"utf-8 decode"),this.leftOver=null}function I(){w.call(this,"utf-8 encode")}a.utf8encode=function(F){return v.nodebuffer?h.newBufferFrom(F,"utf-8"):function(B){var j,X,G,V,J,H=B.length,M=0;for(V=0;V>>6:(X<65536?j[J++]=224|X>>>12:(j[J++]=240|X>>>18,j[J++]=128|X>>>12&63),j[J++]=128|X>>>6&63),j[J++]=128|63&X);return j}(F)},a.utf8decode=function(F){return v.nodebuffer?g.transformTo("nodebuffer",F).toString("utf-8"):function(B){var j,X,G,V,J=B.length,H=new Array(2*J);for(j=X=0;j>10&1023,H[X++]=56320|1023&G)}return H.length!==X&&(H.subarray?H=H.subarray(0,X):H.length=X),g.applyFromCharCode(H)}(F=g.transformTo(v.uint8array?"uint8array":"array",F))},g.inherits(E,w),E.prototype.processChunk=function(F){var B=g.transformTo(v.uint8array?"uint8array":"array",F.data);if(this.leftOver&&this.leftOver.length){if(v.uint8array){var j=B;(B=new Uint8Array(j.length+this.leftOver.length)).set(this.leftOver,0),B.set(j,this.leftOver.length)}else B=this.leftOver.concat(B);this.leftOver=null}var X=function(V,J){var H;for((J=J||V.length)>V.length&&(J=V.length),H=J-1;0<=H&&(192&V[H])==128;)H--;return H<0||H===0?J:H+y[V[H]]>J?H:J}(B),G=B;X!==B.length&&(v.uint8array?(G=B.subarray(0,X),this.leftOver=B.subarray(X,B.length)):(G=B.slice(0,X),this.leftOver=B.slice(X,B.length))),this.push({data:a.utf8decode(G),meta:F.meta})},E.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:a.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},a.Utf8DecodeWorker=E,g.inherits(I,w),I.prototype.processChunk=function(F){this.push({data:a.utf8encode(F.data),meta:F.meta})},a.Utf8EncodeWorker=I},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(o,l,a){var g=o("./support"),v=o("./base64"),h=o("./nodejsUtils"),w=o("./external");function y(j){return j}function S(j,X){for(var G=0;G>8;this.dir=!!(16&this.externalFileAttributes),F==0&&(this.dosPermissions=63&this.externalFileAttributes),F==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var F=g(this.extraFields[1].value);this.uncompressedSize===v.MAX_VALUE_32BITS&&(this.uncompressedSize=F.readInt(8)),this.compressedSize===v.MAX_VALUE_32BITS&&(this.compressedSize=F.readInt(8)),this.localHeaderOffset===v.MAX_VALUE_32BITS&&(this.localHeaderOffset=F.readInt(8)),this.diskNumberStart===v.MAX_VALUE_32BITS&&(this.diskNumberStart=F.readInt(4))}},readExtraFields:function(F){var B,j,X,G=F.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});F.index+4>>6:(F<65536?I[X++]=224|F>>>12:(I[X++]=240|F>>>18,I[X++]=128|F>>>12&63),I[X++]=128|F>>>6&63),I[X++]=128|63&F);return I},a.buf2binstring=function(E){return S(E,E.length)},a.binstring2buf=function(E){for(var I=new g.Buf8(E.length),F=0,B=I.length;F>10&1023,V[B++]=56320|1023&j)}return S(V,B)},a.utf8border=function(E,I){var F;for((I=I||E.length)>E.length&&(I=E.length),F=I-1;0<=F&&(192&E[F])==128;)F--;return F<0||F===0?I:F+w[E[F]]>I?F:I}},{"./common":41}],43:[function(o,l,a){l.exports=function(g,v,h,w){for(var y=65535&g|0,S=g>>>16&65535|0,E=0;h!==0;){for(h-=E=2e3>>1:v>>>1;h[w]=v}return h}();l.exports=function(v,h,w,y){var S=g,E=y+w;v^=-1;for(var I=y;I>>8^S[255&(v^h[I])];return-1^v}},{}],46:[function(o,l,a){var g,v=o("../utils/common"),h=o("./trees"),w=o("./adler32"),y=o("./crc32"),S=o("./messages"),E=0,I=4,F=0,B=-2,j=-1,X=4,G=2,V=8,J=9,H=286,M=30,T=19,_=2*H+1,A=15,P=3,L=258,$=L+P+1,R=42,k=113,C=1,O=2,W=3,ne=4;function he(U,ve){return U.msg=S[ve],ve}function ue(U){return(U<<1)-(4U.avail_out&&(Se=U.avail_out),Se!==0&&(v.arraySet(U.output,ve.pending_buf,ve.pending_out,Se,U.next_out),U.next_out+=Se,ve.pending_out+=Se,U.total_out+=Se,U.avail_out-=Se,ve.pending-=Se,ve.pending===0&&(ve.pending_out=0))}function te(U,ve){h._tr_flush_block(U,0<=U.block_start?U.block_start:-1,U.strstart-U.block_start,ve),U.block_start=U.strstart,pe(U.strm)}function Z(U,ve){U.pending_buf[U.pending++]=ve}function q(U,ve){U.pending_buf[U.pending++]=ve>>>8&255,U.pending_buf[U.pending++]=255&ve}function de(U,ve){var Se,ee,se=U.max_chain_length,me=U.strstart,Ee=U.prev_length,Ie=U.nice_match,Ce=U.strstart>U.w_size-$?U.strstart-(U.w_size-$):0,Fe=U.window,ze=U.w_mask,je=U.prev,ge=U.strstart+L,Me=Fe[me+Ee-1],Be=Fe[me+Ee];U.prev_length>=U.good_match&&(se>>=2),Ie>U.lookahead&&(Ie=U.lookahead);do if(Fe[(Se=ve)+Ee]===Be&&Fe[Se+Ee-1]===Me&&Fe[Se]===Fe[me]&&Fe[++Se]===Fe[me+1]){me+=2,Se++;do;while(Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&meCe&&--se!=0);return Ee<=U.lookahead?Ee:U.lookahead}function ke(U){var ve,Se,ee,se,me,Ee,Ie,Ce,Fe,ze,je=U.w_size;do{if(se=U.window_size-U.lookahead-U.strstart,U.strstart>=je+(je-$)){for(v.arraySet(U.window,U.window,je,je,0),U.match_start-=je,U.strstart-=je,U.block_start-=je,ve=Se=U.hash_size;ee=U.head[--ve],U.head[ve]=je<=ee?ee-je:0,--Se;);for(ve=Se=je;ee=U.prev[--ve],U.prev[ve]=je<=ee?ee-je:0,--Se;);se+=je}if(U.strm.avail_in===0)break;if(Ee=U.strm,Ie=U.window,Ce=U.strstart+U.lookahead,Fe=se,ze=void 0,ze=Ee.avail_in,Fe=P)for(me=U.strstart-U.insert,U.ins_h=U.window[me],U.ins_h=(U.ins_h<=P&&(U.ins_h=(U.ins_h<=P)if(ee=h._tr_tally(U,U.strstart-U.match_start,U.match_length-P),U.lookahead-=U.match_length,U.match_length<=U.max_lazy_match&&U.lookahead>=P){for(U.match_length--;U.strstart++,U.ins_h=(U.ins_h<=P&&(U.ins_h=(U.ins_h<=P&&U.match_length<=U.prev_length){for(se=U.strstart+U.lookahead-P,ee=h._tr_tally(U,U.strstart-1-U.prev_match,U.prev_length-P),U.lookahead-=U.prev_length-1,U.prev_length-=2;++U.strstart<=se&&(U.ins_h=(U.ins_h<U.pending_buf_size-5&&(Se=U.pending_buf_size-5);;){if(U.lookahead<=1){if(ke(U),U.lookahead===0&&ve===E)return C;if(U.lookahead===0)break}U.strstart+=U.lookahead,U.lookahead=0;var ee=U.block_start+Se;if((U.strstart===0||U.strstart>=ee)&&(U.lookahead=U.strstart-ee,U.strstart=ee,te(U,!1),U.strm.avail_out===0)||U.strstart-U.block_start>=U.w_size-$&&(te(U,!1),U.strm.avail_out===0))return C}return U.insert=0,ve===I?(te(U,!0),U.strm.avail_out===0?W:ne):(U.strstart>U.block_start&&(te(U,!1),U.strm.avail_out),C)}),new Q(4,4,8,4,oe),new Q(4,5,16,8,oe),new Q(4,6,32,32,oe),new Q(4,4,16,16,ie),new Q(8,16,32,32,ie),new Q(8,16,128,128,ie),new Q(8,32,128,256,ie),new Q(32,128,258,1024,ie),new Q(32,258,258,4096,ie)],a.deflateInit=function(U,ve){return we(U,ve,V,15,8,0)},a.deflateInit2=we,a.deflateReset=fe,a.deflateResetKeep=Y,a.deflateSetHeader=function(U,ve){return U&&U.state?U.state.wrap!==2?B:(U.state.gzhead=ve,F):B},a.deflate=function(U,ve){var Se,ee,se,me;if(!U||!U.state||5>8&255),Z(ee,ee.gzhead.time>>16&255),Z(ee,ee.gzhead.time>>24&255),Z(ee,ee.level===9?2:2<=ee.strategy||ee.level<2?4:0),Z(ee,255&ee.gzhead.os),ee.gzhead.extra&&ee.gzhead.extra.length&&(Z(ee,255&ee.gzhead.extra.length),Z(ee,ee.gzhead.extra.length>>8&255)),ee.gzhead.hcrc&&(U.adler=y(U.adler,ee.pending_buf,ee.pending,0)),ee.gzindex=0,ee.status=69):(Z(ee,0),Z(ee,0),Z(ee,0),Z(ee,0),Z(ee,0),Z(ee,ee.level===9?2:2<=ee.strategy||ee.level<2?4:0),Z(ee,3),ee.status=k);else{var Ee=V+(ee.w_bits-8<<4)<<8;Ee|=(2<=ee.strategy||ee.level<2?0:ee.level<6?1:ee.level===6?2:3)<<6,ee.strstart!==0&&(Ee|=32),Ee+=31-Ee%31,ee.status=k,q(ee,Ee),ee.strstart!==0&&(q(ee,U.adler>>>16),q(ee,65535&U.adler)),U.adler=1}if(ee.status===69)if(ee.gzhead.extra){for(se=ee.pending;ee.gzindex<(65535&ee.gzhead.extra.length)&&(ee.pending!==ee.pending_buf_size||(ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),pe(U),se=ee.pending,ee.pending!==ee.pending_buf_size));)Z(ee,255&ee.gzhead.extra[ee.gzindex]),ee.gzindex++;ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),ee.gzindex===ee.gzhead.extra.length&&(ee.gzindex=0,ee.status=73)}else ee.status=73;if(ee.status===73)if(ee.gzhead.name){se=ee.pending;do{if(ee.pending===ee.pending_buf_size&&(ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),pe(U),se=ee.pending,ee.pending===ee.pending_buf_size)){me=1;break}me=ee.gzindexse&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),me===0&&(ee.gzindex=0,ee.status=91)}else ee.status=91;if(ee.status===91)if(ee.gzhead.comment){se=ee.pending;do{if(ee.pending===ee.pending_buf_size&&(ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),pe(U),se=ee.pending,ee.pending===ee.pending_buf_size)){me=1;break}me=ee.gzindexse&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),me===0&&(ee.status=103)}else ee.status=103;if(ee.status===103&&(ee.gzhead.hcrc?(ee.pending+2>ee.pending_buf_size&&pe(U),ee.pending+2<=ee.pending_buf_size&&(Z(ee,255&U.adler),Z(ee,U.adler>>8&255),U.adler=0,ee.status=k)):ee.status=k),ee.pending!==0){if(pe(U),U.avail_out===0)return ee.last_flush=-1,F}else if(U.avail_in===0&&ue(ve)<=ue(Se)&&ve!==I)return he(U,-5);if(ee.status===666&&U.avail_in!==0)return he(U,-5);if(U.avail_in!==0||ee.lookahead!==0||ve!==E&&ee.status!==666){var Ie=ee.strategy===2?function(Ce,Fe){for(var ze;;){if(Ce.lookahead===0&&(ke(Ce),Ce.lookahead===0)){if(Fe===E)return C;break}if(Ce.match_length=0,ze=h._tr_tally(Ce,0,Ce.window[Ce.strstart]),Ce.lookahead--,Ce.strstart++,ze&&(te(Ce,!1),Ce.strm.avail_out===0))return C}return Ce.insert=0,Fe===I?(te(Ce,!0),Ce.strm.avail_out===0?W:ne):Ce.last_lit&&(te(Ce,!1),Ce.strm.avail_out===0)?C:O}(ee,ve):ee.strategy===3?function(Ce,Fe){for(var ze,je,ge,Me,Be=Ce.window;;){if(Ce.lookahead<=L){if(ke(Ce),Ce.lookahead<=L&&Fe===E)return C;if(Ce.lookahead===0)break}if(Ce.match_length=0,Ce.lookahead>=P&&0Ce.lookahead&&(Ce.match_length=Ce.lookahead)}if(Ce.match_length>=P?(ze=h._tr_tally(Ce,1,Ce.match_length-P),Ce.lookahead-=Ce.match_length,Ce.strstart+=Ce.match_length,Ce.match_length=0):(ze=h._tr_tally(Ce,0,Ce.window[Ce.strstart]),Ce.lookahead--,Ce.strstart++),ze&&(te(Ce,!1),Ce.strm.avail_out===0))return C}return Ce.insert=0,Fe===I?(te(Ce,!0),Ce.strm.avail_out===0?W:ne):Ce.last_lit&&(te(Ce,!1),Ce.strm.avail_out===0)?C:O}(ee,ve):g[ee.level].func(ee,ve);if(Ie!==W&&Ie!==ne||(ee.status=666),Ie===C||Ie===W)return U.avail_out===0&&(ee.last_flush=-1),F;if(Ie===O&&(ve===1?h._tr_align(ee):ve!==5&&(h._tr_stored_block(ee,0,0,!1),ve===3&&(Ae(ee.head),ee.lookahead===0&&(ee.strstart=0,ee.block_start=0,ee.insert=0))),pe(U),U.avail_out===0))return ee.last_flush=-1,F}return ve!==I?F:ee.wrap<=0?1:(ee.wrap===2?(Z(ee,255&U.adler),Z(ee,U.adler>>8&255),Z(ee,U.adler>>16&255),Z(ee,U.adler>>24&255),Z(ee,255&U.total_in),Z(ee,U.total_in>>8&255),Z(ee,U.total_in>>16&255),Z(ee,U.total_in>>24&255)):(q(ee,U.adler>>>16),q(ee,65535&U.adler)),pe(U),0=Se.w_size&&(me===0&&(Ae(Se.head),Se.strstart=0,Se.block_start=0,Se.insert=0),Fe=new v.Buf8(Se.w_size),v.arraySet(Fe,ve,ze-Se.w_size,Se.w_size,0),ve=Fe,ze=Se.w_size),Ee=U.avail_in,Ie=U.next_in,Ce=U.input,U.avail_in=ze,U.next_in=0,U.input=ve,ke(Se);Se.lookahead>=P;){for(ee=Se.strstart,se=Se.lookahead-(P-1);Se.ins_h=(Se.ins_h<>>=P=A>>>24,J-=P,(P=A>>>16&255)===0)O[S++]=65535&A;else{if(!(16&P)){if(!(64&P)){A=H[(65535&A)+(V&(1<>>=P,J-=P),J<15&&(V+=C[w++]<>>=P=A>>>24,J-=P,!(16&(P=A>>>16&255))){if(!(64&P)){A=M[(65535&A)+(V&(1<>>=P,J-=P,(P=S-E)<$){if(j<(P=$-P)&&h.sane){g.msg="invalid distance too far back",h.mode=30;break e}if(k=G,(R=0)===X){if(R+=B-P,P>3,V&=(1<<(J-=L<<3))-1,g.next_in=w,g.next_out=S,g.avail_in=w>>24&255)+(R>>>8&65280)+((65280&R)<<8)+((255&R)<<24)}function V(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new g.Buf16(320),this.work=new g.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function J(R){var k;return R&&R.state?(k=R.state,R.total_in=R.total_out=k.total=0,R.msg="",k.wrap&&(R.adler=1&k.wrap),k.mode=B,k.last=0,k.havedict=0,k.dmax=32768,k.head=null,k.hold=0,k.bits=0,k.lencode=k.lendyn=new g.Buf32(j),k.distcode=k.distdyn=new g.Buf32(X),k.sane=1,k.back=-1,I):F}function H(R){var k;return R&&R.state?((k=R.state).wsize=0,k.whave=0,k.wnext=0,J(R)):F}function M(R,k){var C,O;return R&&R.state?(O=R.state,k<0?(C=0,k=-k):(C=1+(k>>4),k<48&&(k&=15)),k&&(k<8||15=ne.wsize?(g.arraySet(ne.window,k,C-ne.wsize,ne.wsize,0),ne.wnext=0,ne.whave=ne.wsize):(O<(W=ne.wsize-ne.wnext)&&(W=O),g.arraySet(ne.window,k,C-O,W,ne.wnext),(O-=W)?(g.arraySet(ne.window,k,C-O,O,0),ne.wnext=O,ne.whave=ne.wsize):(ne.wnext+=W,ne.wnext===ne.wsize&&(ne.wnext=0),ne.whave>>8&255,C.check=h(C.check,me,2,0),te=pe=0,C.mode=2;break}if(C.flags=0,C.head&&(C.head.done=!1),!(1&C.wrap)||(((255&pe)<<8)+(pe>>8))%31){R.msg="incorrect header check",C.mode=30;break}if((15&pe)!=8){R.msg="unknown compression method",C.mode=30;break}if(te-=4,U=8+(15&(pe>>>=4)),C.wbits===0)C.wbits=U;else if(U>C.wbits){R.msg="invalid window size",C.mode=30;break}C.dmax=1<>8&1),512&C.flags&&(me[0]=255&pe,me[1]=pe>>>8&255,C.check=h(C.check,me,2,0)),te=pe=0,C.mode=3;case 3:for(;te<32;){if(ue===0)break e;ue--,pe+=O[ne++]<>>8&255,me[2]=pe>>>16&255,me[3]=pe>>>24&255,C.check=h(C.check,me,4,0)),te=pe=0,C.mode=4;case 4:for(;te<16;){if(ue===0)break e;ue--,pe+=O[ne++]<>8),512&C.flags&&(me[0]=255&pe,me[1]=pe>>>8&255,C.check=h(C.check,me,2,0)),te=pe=0,C.mode=5;case 5:if(1024&C.flags){for(;te<16;){if(ue===0)break e;ue--,pe+=O[ne++]<>>8&255,C.check=h(C.check,me,2,0)),te=pe=0}else C.head&&(C.head.extra=null);C.mode=6;case 6:if(1024&C.flags&&(ue<(de=C.length)&&(de=ue),de&&(C.head&&(U=C.head.extra_len-C.length,C.head.extra||(C.head.extra=new Array(C.head.extra_len)),g.arraySet(C.head.extra,O,ne,de,U)),512&C.flags&&(C.check=h(C.check,O,de,ne)),ue-=de,ne+=de,C.length-=de),C.length))break e;C.length=0,C.mode=7;case 7:if(2048&C.flags){if(ue===0)break e;for(de=0;U=O[ne+de++],C.head&&U&&C.length<65536&&(C.head.name+=String.fromCharCode(U)),U&&de>9&1,C.head.done=!0),R.adler=C.check=0,C.mode=12;break;case 10:for(;te<32;){if(ue===0)break e;ue--,pe+=O[ne++]<>>=7&te,te-=7&te,C.mode=27;break}for(;te<3;){if(ue===0)break e;ue--,pe+=O[ne++]<>>=1)){case 0:C.mode=14;break;case 1:if(L(C),C.mode=20,k!==6)break;pe>>>=2,te-=2;break e;case 2:C.mode=17;break;case 3:R.msg="invalid block type",C.mode=30}pe>>>=2,te-=2;break;case 14:for(pe>>>=7&te,te-=7&te;te<32;){if(ue===0)break e;ue--,pe+=O[ne++]<>>16^65535)){R.msg="invalid stored block lengths",C.mode=30;break}if(C.length=65535&pe,te=pe=0,C.mode=15,k===6)break e;case 15:C.mode=16;case 16:if(de=C.length){if(ue>>=5,te-=5,C.ndist=1+(31&pe),pe>>>=5,te-=5,C.ncode=4+(15&pe),pe>>>=4,te-=4,286>>=3,te-=3}for(;C.have<19;)C.lens[Ee[C.have++]]=0;if(C.lencode=C.lendyn,C.lenbits=7,Se={bits:C.lenbits},ve=y(0,C.lens,0,19,C.lencode,0,C.work,Se),C.lenbits=Se.bits,ve){R.msg="invalid code lengths set",C.mode=30;break}C.have=0,C.mode=19;case 19:for(;C.have>>16&255,z=65535&se,!((ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>>=ie,te-=ie,C.lens[C.have++]=z;else{if(z===16){for(ee=ie+2;te>>=ie,te-=ie,C.have===0){R.msg="invalid bit length repeat",C.mode=30;break}U=C.lens[C.have-1],de=3+(3&pe),pe>>>=2,te-=2}else if(z===17){for(ee=ie+3;te>>=ie)),pe>>>=3,te-=3}else{for(ee=ie+7;te>>=ie)),pe>>>=7,te-=7}if(C.have+de>C.nlen+C.ndist){R.msg="invalid bit length repeat",C.mode=30;break}for(;de--;)C.lens[C.have++]=U}}if(C.mode===30)break;if(C.lens[256]===0){R.msg="invalid code -- missing end-of-block",C.mode=30;break}if(C.lenbits=9,Se={bits:C.lenbits},ve=y(S,C.lens,0,C.nlen,C.lencode,0,C.work,Se),C.lenbits=Se.bits,ve){R.msg="invalid literal/lengths set",C.mode=30;break}if(C.distbits=6,C.distcode=C.distdyn,Se={bits:C.distbits},ve=y(E,C.lens,C.nlen,C.ndist,C.distcode,0,C.work,Se),C.distbits=Se.bits,ve){R.msg="invalid distances set",C.mode=30;break}if(C.mode=20,k===6)break e;case 20:C.mode=21;case 21:if(6<=ue&&258<=Ae){R.next_out=he,R.avail_out=Ae,R.next_in=ne,R.avail_in=ue,C.hold=pe,C.bits=te,w(R,q),he=R.next_out,W=R.output,Ae=R.avail_out,ne=R.next_in,O=R.input,ue=R.avail_in,pe=C.hold,te=C.bits,C.mode===12&&(C.back=-1);break}for(C.back=0;Q=(se=C.lencode[pe&(1<>>16&255,z=65535&se,!((ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>Y)])>>>16&255,z=65535&se,!(Y+(ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>>=Y,te-=Y,C.back+=Y}if(pe>>>=ie,te-=ie,C.back+=ie,C.length=z,Q===0){C.mode=26;break}if(32&Q){C.back=-1,C.mode=12;break}if(64&Q){R.msg="invalid literal/length code",C.mode=30;break}C.extra=15&Q,C.mode=22;case 22:if(C.extra){for(ee=C.extra;te>>=C.extra,te-=C.extra,C.back+=C.extra}C.was=C.length,C.mode=23;case 23:for(;Q=(se=C.distcode[pe&(1<>>16&255,z=65535&se,!((ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>Y)])>>>16&255,z=65535&se,!(Y+(ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>>=Y,te-=Y,C.back+=Y}if(pe>>>=ie,te-=ie,C.back+=ie,64&Q){R.msg="invalid distance code",C.mode=30;break}C.offset=z,C.extra=15&Q,C.mode=24;case 24:if(C.extra){for(ee=C.extra;te>>=C.extra,te-=C.extra,C.back+=C.extra}if(C.offset>C.dmax){R.msg="invalid distance too far back",C.mode=30;break}C.mode=25;case 25:if(Ae===0)break e;if(de=q-Ae,C.offset>de){if((de=C.offset-de)>C.whave&&C.sane){R.msg="invalid distance too far back",C.mode=30;break}ke=de>C.wnext?(de-=C.wnext,C.wsize-de):C.wnext-de,de>C.length&&(de=C.length),oe=C.window}else oe=W,ke=he-C.offset,de=C.length;for(Ae_?(P=ke[oe+X[k]],te[Z+X[k]]):(P=96,0),V=1<>he)+(J-=V)]=A<<24|P<<16|L|0,J!==0;);for(V=1<>=1;if(V!==0?(pe&=V-1,pe+=V):pe=0,k++,--q[R]==0){if(R===O)break;R=E[I+X[k]]}if(W>>7)]}function Z(se,me){se.pending_buf[se.pending++]=255&me,se.pending_buf[se.pending++]=me>>>8&255}function q(se,me,Ee){se.bi_valid>G-Ee?(se.bi_buf|=me<>G-se.bi_valid,se.bi_valid+=Ee-G):(se.bi_buf|=me<>>=1,Ee<<=1,0<--me;);return Ee>>>1}function oe(se,me,Ee){var Ie,Ce,Fe=new Array(X+1),ze=0;for(Ie=1;Ie<=X;Ie++)Fe[Ie]=ze=ze+Ee[Ie-1]<<1;for(Ce=0;Ce<=me;Ce++){var je=se[2*Ce+1];je!==0&&(se[2*Ce]=ke(Fe[je]++,je))}}function ie(se){var me;for(me=0;me>1;1<=Ee;Ee--)Y(se,Fe,Ee);for(Ce=ge;Ee=se.heap[1],se.heap[1]=se.heap[se.heap_len--],Y(se,Fe,1),Ie=se.heap[1],se.heap[--se.heap_max]=Ee,se.heap[--se.heap_max]=Ie,Fe[2*Ce]=Fe[2*Ee]+Fe[2*Ie],se.depth[Ce]=(se.depth[Ee]>=se.depth[Ie]?se.depth[Ee]:se.depth[Ie])+1,Fe[2*Ee+1]=Fe[2*Ie+1]=Ce,se.heap[1]=Ce++,Y(se,Fe,1),2<=se.heap_len;);se.heap[--se.heap_max]=se.heap[1],function(Be,Xe){var ot,ct,st,rt,bt,Qe,et=Xe.dyn_tree,_t=Xe.max_code,ft=Xe.stat_desc.static_tree,jt=Xe.stat_desc.has_stree,It=Xe.stat_desc.extra_bits,ht=Xe.stat_desc.extra_base,Dt=Xe.stat_desc.max_length,Ut=0;for(rt=0;rt<=X;rt++)Be.bl_count[rt]=0;for(et[2*Be.heap[Be.heap_max]+1]=0,ot=Be.heap_max+1;ot>=7;Ce>>=1)if(1&Me&&je.dyn_ltree[2*ge]!==0)return v;if(je.dyn_ltree[18]!==0||je.dyn_ltree[20]!==0||je.dyn_ltree[26]!==0)return h;for(ge=32;ge>>3,(Fe=se.static_len+3+7>>>3)<=Ce&&(Ce=Fe)):Ce=Fe=Ee+5,Ee+4<=Ce&&me!==-1?ee(se,me,Ee,Ie):se.strategy===4||Fe===Ce?(q(se,2+(Ie?1:0),3),fe(se,$,R)):(q(se,4+(Ie?1:0),3),function(je,ge,Me,Be){var Xe;for(q(je,ge-257,5),q(je,Me-1,5),q(je,Be-4,4),Xe=0;Xe>>8&255,se.pending_buf[se.d_buf+2*se.last_lit+1]=255&me,se.pending_buf[se.l_buf+se.last_lit]=255&Ee,se.last_lit++,me===0?se.dyn_ltree[2*Ee]++:(se.matches++,me--,se.dyn_ltree[2*(C[Ee]+E+1)]++,se.dyn_dtree[2*te(me)]++),se.last_lit===se.lit_bufsize-1},a._tr_align=function(se){q(se,2,3),de(se,J,$),function(me){me.bi_valid===16?(Z(me,me.bi_buf),me.bi_buf=0,me.bi_valid=0):8<=me.bi_valid&&(me.pending_buf[me.pending++]=255&me.bi_buf,me.bi_buf>>=8,me.bi_valid-=8)}(se)}},{"../utils/common":41}],53:[function(o,l,a){l.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(o,l,a){(function(g){(function(v,h){if(!v.setImmediate){var w,y,S,E,I=1,F={},B=!1,j=v.document,X=Object.getPrototypeOf&&Object.getPrototypeOf(v);X=X&&X.setTimeout?X:v,w={}.toString.call(v.process)==="[object process]"?function(H){f.nextTick(function(){V(H)})}:function(){if(v.postMessage&&!v.importScripts){var H=!0,M=v.onmessage;return v.onmessage=function(){H=!1},v.postMessage("","*"),v.onmessage=M,H}}()?(E="setImmediate$"+Math.random()+"$",v.addEventListener?v.addEventListener("message",J,!1):v.attachEvent("onmessage",J),function(H){v.postMessage(E+H,"*")}):v.MessageChannel?((S=new MessageChannel).port1.onmessage=function(H){V(H.data)},function(H){S.port2.postMessage(H)}):j&&"onreadystatechange"in j.createElement("script")?(y=j.documentElement,function(H){var M=j.createElement("script");M.onreadystatechange=function(){V(H),M.onreadystatechange=null,y.removeChild(M),M=null},y.appendChild(M)}):function(H){setTimeout(V,0,H)},X.setImmediate=function(H){typeof H!="function"&&(H=new Function(""+H));for(var M=new Array(arguments.length-1),T=0;T"u"?g===void 0?this:g:self)}).call(this,typeof c<"u"?c:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],e("timers").setImmediate)},{_process:467,buffer:220,timers:523}],442:[function(e,d,m){(function(f){(function(){var c=1/0,u="[object Symbol]",s=/[\\^$.*+?()[\]{}|]/g,t=RegExp(s.source),n=typeof f=="object"&&f&&f.Object===Object&&f,r=typeof self=="object"&&self&&self.Object===Object&&self,i=n||r||Function("return this")(),o=Object.prototype,l=o.toString,a=i.Symbol,g=a?a.prototype:void 0,v=g?g.toString:void 0;function h(I){if(typeof I=="string")return I;if(y(I))return v?v.call(I):"";var F=I+"";return F=="0"&&1/I==-c?"-0":F}function w(I){return!!I&&typeof I=="object"}function y(I){return typeof I=="symbol"||w(I)&&l.call(I)==u}function S(I){return I==null?"":h(I)}function E(I){return I=S(I),I&&t.test(I)?I.replace(s,"\\$&"):I}d.exports=E}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],443:[function(e,d,m){(function(f){(function(){var c=200,u="Expected a function",s="__lodash_hash_undefined__",t=1,n=2,r=1/0,i=9007199254740991,o="[object Arguments]",l="[object Array]",a="[object Boolean]",g="[object Date]",v="[object Error]",h="[object Function]",w="[object GeneratorFunction]",y="[object Map]",S="[object Number]",E="[object Object]",I="[object Promise]",F="[object RegExp]",B="[object Set]",j="[object String]",X="[object Symbol]",G="[object WeakMap]",V="[object ArrayBuffer]",J="[object DataView]",H="[object Float32Array]",M="[object Float64Array]",T="[object Int8Array]",_="[object Int16Array]",A="[object Int32Array]",P="[object Uint8Array]",L="[object Uint8ClampedArray]",$="[object Uint16Array]",R="[object Uint32Array]",k=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,C=/^\w*$/,O=/^\./,W=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ne=/[\\^$.*+?()[\]{}|]/g,he=/\\(\\)?/g,ue=/^\[object .+?Constructor\]$/,Ae=/^(?:0|[1-9]\d*)$/,pe={};pe[H]=pe[M]=pe[T]=pe[_]=pe[A]=pe[P]=pe[L]=pe[$]=pe[R]=!0,pe[o]=pe[l]=pe[V]=pe[a]=pe[J]=pe[g]=pe[v]=pe[h]=pe[y]=pe[S]=pe[E]=pe[F]=pe[B]=pe[j]=pe[G]=!1;var te=typeof f=="object"&&f&&f.Object===Object&&f,Z=typeof self=="object"&&self&&self.Object===Object&&self,q=te||Z||Function("return this")(),de=typeof m=="object"&&m&&!m.nodeType&&m,ke=de&&typeof d=="object"&&d&&!d.nodeType&&d,oe=ke&&ke.exports===de,ie=oe&&te.process,Q=function(){try{return ie&&ie.binding("util")}catch{}}(),z=Q&&Q.isTypedArray;function Y(ae,xe,De,Ge){for(var dt=-1,nt=ae?ae.length:0;++dt-1}function Je(ae,xe){var De=this.__data__,Ge=Kr(De,ae);return Ge<0?De.push([ae,xe]):De[Ge][1]=xe,this}St.prototype.clear=Tt,St.prototype.delete=be,St.prototype.get=Ne,St.prototype.has=Le,St.prototype.set=Je;function at(ae){var xe=-1,De=ae?ae.length:0;for(this.clear();++xeor))return!1;var Er=nt.get(ae);if(Er&&nt.get(xe))return Er==xe;var Or=-1,kr=!0,dr=dt&t?new lr:void 0;for(nt.set(ae,xe),nt.set(xe,ae);++Or-1&&ae%1==0&&ae-1&&ae%1==0&&ae<=i}function pr(ae){var xe=typeof ae;return!!ae&&(xe=="object"||xe=="function")}function Sr(ae){return!!ae&&typeof ae=="object"}function Ar(ae){return typeof ae=="symbol"||Sr(ae)&&Be.call(ae)==X}var on=z?ve(z):Ei;function hr(ae){return ae==null?"":vs(ae)}function Tn(ae,xe,De){var Ge=ae==null?void 0:fi(ae,xe);return Ge===void 0?De:Ge}function Pr(ae,xe){return ae!=null&&Gi(ae,xe,Hi)}function An(ae){return cr(ae)?ji(ae):Cn(ae)}function Yn(ae){return ae}function Ln(ae){return Zt(ae)?we(Re(ae)):sn(ae)}d.exports=tt}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],444:[function(e,d,m){var f="[object Boolean]",c=Object.prototype,u=c.toString;function s(n){return n===!0||n===!1||t(n)&&u.call(n)==f}function t(n){return!!n&&typeof n=="object"}d.exports=s},{}],445:[function(e,d,m){(function(f){(function(){var c=200,u="__lodash_hash_undefined__",s=1,t=2,n=9007199254740991,r="[object Arguments]",i="[object Array]",o="[object AsyncFunction]",l="[object Boolean]",a="[object Date]",g="[object Error]",v="[object Function]",h="[object GeneratorFunction]",w="[object Map]",y="[object Number]",S="[object Null]",E="[object Object]",I="[object Promise]",F="[object Proxy]",B="[object RegExp]",j="[object Set]",X="[object String]",G="[object Symbol]",V="[object Undefined]",J="[object WeakMap]",H="[object ArrayBuffer]",M="[object DataView]",T="[object Float32Array]",_="[object Float64Array]",A="[object Int8Array]",P="[object Int16Array]",L="[object Int32Array]",$="[object Uint8Array]",R="[object Uint8ClampedArray]",k="[object Uint16Array]",C="[object Uint32Array]",O=/[\\^$.*+?()[\]{}|]/g,W=/^\[object .+?Constructor\]$/,ne=/^(?:0|[1-9]\d*)$/,he={};he[T]=he[_]=he[A]=he[P]=he[L]=he[$]=he[R]=he[k]=he[C]=!0,he[r]=he[i]=he[H]=he[l]=he[M]=he[a]=he[g]=he[v]=he[w]=he[y]=he[E]=he[B]=he[j]=he[X]=he[J]=!1;var ue=typeof f=="object"&&f&&f.Object===Object&&f,Ae=typeof self=="object"&&self&&self.Object===Object&&self,pe=ue||Ae||Function("return this")(),te=typeof m=="object"&&m&&!m.nodeType&&m,Z=te&&typeof d=="object"&&d&&!d.nodeType&&d,q=Z&&Z.exports===te,de=q&&ue.process,ke=function(){try{return de&&de.binding&&de.binding("util")}catch{}}(),oe=ke&&ke.isTypedArray;function ie(ye,Re){for(var We=-1,tt=ye==null?0:ye.length,Ct=0,Et=[];++We-1}function Je(ye,Re){var We=this.__data__,tt=Kr(We,ye);return tt<0?(++this.size,We.push([ye,Re])):We[tt][1]=Re,this}St.prototype.clear=Tt,St.prototype.delete=be,St.prototype.get=Ne,St.prototype.has=Le,St.prototype.set=Je;function at(ye){var Re=-1,We=ye==null?0:ye.length;for(this.clear();++Renr))return!1;var Ht=Et.get(ye);if(Ht&&Et.get(Re))return Ht==Re;var Tr=-1,Ir=!0,pr=We&t?new lr:void 0;for(Et.set(ye,Re),Et.set(Re,ye);++Tr-1&&ye%1==0&&ye-1&&ye%1==0&&ye<=n}function Zt(ye){var Re=typeof ye;return ye!=null&&(Re=="object"||Re=="function")}function Yt(ye){return ye!=null&&typeof ye=="object"}var Yi=oe?fe(oe):Hi;function Ss(ye){return _s(ye)?ji(ye):Gn(ye)}function Zi(){return[]}function Ji(){return!1}d.exports=bn}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],446:[function(e,d,m){(function(f){(function(){var c="[object AsyncFunction]",u="[object Function]",s="[object GeneratorFunction]",t="[object Null]",n="[object Proxy]",r="[object Undefined]",i=typeof f=="object"&&f&&f.Object===Object&&f,o=typeof self=="object"&&self&&self.Object===Object&&self,l=i||o||Function("return this")(),a=Object.prototype,g=a.hasOwnProperty,v=a.toString,h=l.Symbol,w=h?h.toStringTag:void 0;function y(B){return B==null?B===void 0?r:t:w&&w in Object(B)?S(B):E(B)}function S(B){var j=g.call(B,w),X=B[w];try{B[w]=void 0;var G=!0}catch{}var V=v.call(B);return G&&(j?B[w]=X:delete B[w]),V}function E(B){return v.call(B)}function I(B){if(!F(B))return!1;var j=y(B);return j==u||j==s||j==c||j==n}function F(B){var j=typeof B;return B!=null&&(j=="object"||j=="function")}d.exports=I}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],447:[function(e,d,m){function f(c){return c==null}d.exports=f},{}],448:[function(e,d,m){function f(c){return c===void 0}d.exports=f},{}],449:[function(e,d,m){(function(f){(function(){var c=200,u="__lodash_hash_undefined__",s=1/0,t="[object Function]",n="[object GeneratorFunction]",r=/[\\^$.*+?()[\]{}|]/g,i=/^\[object .+?Constructor\]$/,o=typeof f=="object"&&f&&f.Object===Object&&f,l=typeof self=="object"&&self&&self.Object===Object&&self,a=o||l||Function("return this")();function g(ge,Me){var Be=ge?ge.length:0;return!!Be&&w(ge,Me,0)>-1}function v(ge,Me,Be){for(var Xe=-1,ot=ge?ge.length:0;++Xe-1}function te(ge,Me){var Be=this.__data__,Xe=fe(Be,ge);return Xe<0?Be.push([ge,Me]):Be[Xe][1]=Me,this}ne.prototype.clear=he,ne.prototype.delete=ue,ne.prototype.get=Ae,ne.prototype.has=pe,ne.prototype.set=te;function Z(ge){var Me=-1,Be=ge?ge.length:0;for(this.clear();++Me=c){var Qe=Me?null:ve(ge);if(Qe)return F(Qe);st=!1,ot=S,bt=new Q}else bt=Me?[]:rt;e:for(;++Xe56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var a=u.allocUnsafe(16);return a.writeInt32LE(this._a,0),a.writeInt32LE(this._b,4),a.writeInt32LE(this._c,8),a.writeInt32LE(this._d,12),a};function n(a,g){return a<>>32-g}function r(a,g,v,h,w,y,S){return n(a+(g&v|~g&h)+w+y|0,S)+g|0}function i(a,g,v,h,w,y,S){return n(a+(g&h|v&~h)+w+y|0,S)+g|0}function o(a,g,v,h,w,y,S){return n(a+(g^v^h)+w+y|0,S)+g|0}function l(a,g,v,h,w,y,S){return n(a+(v^(g|~h))+w+y|0,S)+g|0}d.exports=t},{"hash-base":425,inherits:440,"safe-buffer":494}],451:[function(e,d,m){var f=e("bn.js"),c=e("brorand");function u(s){this.rand=s||new c.Rand}d.exports=u,u.create=function(t){return new u(t)},u.prototype._randbelow=function(t){var n=t.bitLength(),r=Math.ceil(n/8);do var i=new f(this.rand.generate(r));while(i.cmp(t)>=0);return i},u.prototype._randrange=function(t,n){var r=n.sub(t);return t.add(this._randbelow(r))},u.prototype.test=function(t,n,r){var i=t.bitLength(),o=f.mont(t),l=new f(1).toRed(o);n||(n=Math.max(1,i/48|0));for(var a=t.subn(1),g=0;!a.testn(g);g++);for(var v=t.shrn(g),h=a.toRed(o),w=!0;n>0;n--){var y=this._randrange(new f(2),a);r&&r(y);var S=y.toRed(o).redPow(v);if(!(S.cmp(l)===0||S.cmp(h)===0)){for(var E=1;E0;n--){var h=this._randrange(new f(2),l),w=t.gcd(h);if(w.cmpn(1)!==0)return w;var y=h.toRed(i).redPow(g);if(!(y.cmp(o)===0||y.cmp(v)===0)){for(var S=1;S>8,a=o&255;l?r.push(l,a):r.push(a)}return r}f.toArray=c;function u(t){return t.length===1?"0"+t:t}f.zero2=u;function s(t){for(var n="",r=0;r=6?"utf-8":"binary"}else u="utf-8";d.exports=u}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467}],463:[function(e,d,m){var f=Math.pow(2,30)-1;d.exports=function(c,u){if(typeof c!="number")throw new TypeError("Iterations not a number");if(c<0)throw new TypeError("Bad iterations");if(typeof u!="number")throw new TypeError("Key length not a number");if(u<0||u>f||u!==u)throw new TypeError("Bad key length")}},{}],464:[function(e,d,m){var f=e("create-hash/md5"),c=e("ripemd160"),u=e("sha.js"),s=e("safe-buffer").Buffer,t=e("./precondition"),n=e("./default-encoding"),r=e("./to-buffer"),i=s.alloc(128),o={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function l(v,h,w){var y=a(v),S=v==="sha512"||v==="sha384"?128:64;h.length>S?h=y(h):h.length"u"||!f.version||f.version.indexOf("v0.")===0||f.version.indexOf("v1.")===0&&f.version.indexOf("v1.8.")!==0?d.exports={nextTick:c}:d.exports=f;function c(u,s,t,n){if(typeof u!="function")throw new TypeError('"callback" argument must be a function');var r=arguments.length,i,o;switch(r){case 0:case 1:return f.nextTick(u);case 2:return f.nextTick(function(){u.call(null,s)});case 3:return f.nextTick(function(){u.call(null,s,t)});case 4:return f.nextTick(function(){u.call(null,s,t,n)});default:for(i=new Array(r-1),o=0;o1)for(var E=1;EE||new s(h).cmp(S.modulus)>=0)throw new Error("decryption error");var I;w?I=r(new s(h),S):I=t(h,S);var F=i.alloc(E-I.length);if(I=i.concat([F,I],E),y===4)return o(S,I);if(y===1)return l(S,I,w);if(y===3)return I;throw new Error("unknown padding")};function o(g,v){var h=g.modulus.byteLength(),w=n("sha1").update(i.alloc(0)).digest(),y=w.length;if(v[0]!==0)throw new Error("decryption error");var S=v.slice(1,y+1),E=v.slice(y+1),I=u(S,c(E,y)),F=u(E,c(I,h-y-1));if(a(w,F.slice(0,y)))throw new Error("decryption error");for(var B=y;F[B]===0;)B++;if(F[B++]!==1)throw new Error("decryption error");return F.slice(B)}function l(g,v,h){for(var w=v.slice(0,2),y=2,S=0;v[y++]!==0;)if(y>=v.length){S++;break}var E=v.slice(2,y-1);if((w.toString("hex")!=="0002"&&!h||w.toString("hex")!=="0001"&&h)&&S++,E.length<8&&S++,S)throw new Error("decryption error");return v.slice(y)}function a(g,v){g=i.from(g),v=i.from(v);var h=0,w=g.length;g.length!==v.length&&(h++,w=Math.min(g.length,v.length));for(var y=-1;++y=0)throw new Error("data too long for modulus")}else throw new Error("unknown padding");return y?i(I,E):r(I,E)};function l(v,h){var w=v.modulus.byteLength(),y=h.length,S=u("sha1").update(o.alloc(0)).digest(),E=S.length,I=2*E;if(y>w-I-2)throw new Error("message too long");var F=o.alloc(w-y-I-2),B=w-E-1,j=c(E),X=t(o.concat([S,F,o.alloc(1,1),h],B),s(j,B)),G=t(j,s(X,E));return new n(o.concat([o.alloc(1),G,X],w))}function a(v,h,w){var y=h.length,S=v.modulus.byteLength();if(y>S-11)throw new Error("message too long");var E;return w?E=o.alloc(S-y-3,255):E=g(S-y-3),new n(o.concat([o.from([0,w?1:2]),E,o.alloc(1),h],S))}function g(v){for(var h=o.allocUnsafe(v),w=0,y=c(v*2),S=0,E;ws)throw new RangeError("requested too many random bytes");var a=n.allocUnsafe(o);if(o>0)if(o>u)for(var g=0;go||w<0)throw new TypeError("offset must be a uint32");if(w>r||w>y)throw new RangeError("offset out of range")}function a(w,y,S){if(typeof w!="number"||w!==w)throw new TypeError("size must be a number");if(w>o||w<0)throw new TypeError("size must be a uint32");if(w+y>S||w>r)throw new RangeError("buffer too small")}i&&i.getRandomValues||!f.browser?(m.randomFill=g,m.randomFillSync=h):(m.randomFill=u,m.randomFillSync=u);function g(w,y,S,E){if(!n.isBuffer(w)&&!(w instanceof c.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if(typeof y=="function")E=y,y=0,S=w.length;else if(typeof S=="function")E=S,S=w.length-y;else if(typeof E!="function")throw new TypeError('"cb" argument must be a function');return l(y,w.length),a(S,y,w.length),v(w,y,S,E)}function v(w,y,S,E){if(f.browser){var I=w.buffer,F=new Uint8Array(I,y,S);if(i.getRandomValues(F),E){f.nextTick(function(){E(null,w)});return}return w}if(E){t(S,function(j,X){if(j)return E(j);X.copy(w,y),E(null,w)});return}var B=t(S);return B.copy(w,y),w}function h(w,y,S){if(typeof y>"u"&&(y=0),!n.isBuffer(w)&&!(w instanceof c.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return l(y,w.length),S===void 0&&(S=w.length-y),a(S,y,w.length),v(w,y,S)}}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467,randombytes:475,"safe-buffer":494}],477:[function(e,d,m){function f(i,o){i.prototype=Object.create(o.prototype),i.prototype.constructor=i,i.__proto__=o}var c={};function u(i,o,l){l||(l=Error);function a(v,h,w){return typeof o=="string"?o:o(v,h,w)}var g=function(v){f(h,v);function h(w,y,S){return v.call(this,a(w,y,S))||this}return h}(l);g.prototype.name=l.name,g.prototype.code=i,c[i]=g}function s(i,o){if(Array.isArray(i)){var l=i.length;return i=i.map(function(a){return String(a)}),l>2?"one of ".concat(o," ").concat(i.slice(0,l-1).join(", "),", or ")+i[l-1]:l===2?"one of ".concat(o," ").concat(i[0]," or ").concat(i[1]):"of ".concat(o," ").concat(i[0])}else return"of ".concat(o," ").concat(String(i))}function t(i,o,l){return i.substr(!l||l<0?0:+l,o.length)===o}function n(i,o,l){return(l===void 0||l>i.length)&&(l=i.length),i.substring(l-o.length,l)===o}function r(i,o,l){return typeof l!="number"&&(l=0),l+o.length>i.length?!1:i.indexOf(o,l)!==-1}u("ERR_INVALID_OPT_VALUE",function(i,o){return'The value "'+o+'" is invalid for option "'+i+'"'},TypeError),u("ERR_INVALID_ARG_TYPE",function(i,o,l){var a;typeof o=="string"&&t(o,"not ")?(a="must not be",o=o.replace(/^not /,"")):a="must be";var g;if(n(i," argument"))g="The ".concat(i," ").concat(a," ").concat(s(o,"type"));else{var v=r(i,".")?"property":"argument";g='The "'.concat(i,'" ').concat(v," ").concat(a," ").concat(s(o,"type"))}return g+=". Received type ".concat(typeof l),g},TypeError),u("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),u("ERR_METHOD_NOT_IMPLEMENTED",function(i){return"The "+i+" method is not implemented"}),u("ERR_STREAM_PREMATURE_CLOSE","Premature close"),u("ERR_STREAM_DESTROYED",function(i){return"Cannot call "+i+" after a stream was destroyed"}),u("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),u("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),u("ERR_STREAM_WRITE_AFTER_END","write after end"),u("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),u("ERR_UNKNOWN_ENCODING",function(i){return"Unknown encoding: "+i},TypeError),u("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),d.exports.codes=c},{}],478:[function(e,d,m){(function(f){(function(){var c=Object.keys||function(a){var g=[];for(var v in a)g.push(v);return g};d.exports=i;var u=e("./_stream_readable"),s=e("./_stream_writable");e("inherits")(i,u);for(var t=c(s.prototype),n=0;n0)if(typeof ie!="string"&&!fe.objectMode&&Object.getPrototypeOf(ie)!==n.prototype&&(ie=i(ie)),z)fe.endEmitted?G(oe,new F):_(oe,fe,ie,!0);else if(fe.ended)G(oe,new E);else{if(fe.destroyed)return!1;fe.reading=!1,fe.decoder&&!Q?(ie=fe.decoder.write(ie),fe.objectMode||ie.length!==0?_(oe,fe,ie,!1):O(oe,fe)):_(oe,fe,ie,!1)}else z||(fe.reading=!1,O(oe,fe))}return!fe.ended&&(fe.length=P?oe=P:(oe--,oe|=oe>>>1,oe|=oe>>>2,oe|=oe>>>4,oe|=oe>>>8,oe|=oe>>>16,oe++),oe}function $(oe,ie){return oe<=0||ie.length===0&&ie.ended?0:ie.objectMode?1:oe!==oe?ie.flowing&&ie.length?ie.buffer.head.data.length:ie.length:(oe>ie.highWaterMark&&(ie.highWaterMark=L(oe)),oe<=ie.length?oe:ie.ended?ie.length:(ie.needReadable=!0,0))}M.prototype.read=function(oe){a("read",oe),oe=parseInt(oe,10);var ie=this._readableState,Q=oe;if(oe!==0&&(ie.emittedReadable=!1),oe===0&&ie.needReadable&&((ie.highWaterMark!==0?ie.length>=ie.highWaterMark:ie.length>0)||ie.ended))return a("read: emitReadable",ie.length,ie.ended),ie.length===0&&ie.ended?q(this):k(this),null;if(oe=$(oe,ie),oe===0&&ie.ended)return ie.length===0&&q(this),null;var z=ie.needReadable;a("need readable",z),(ie.length===0||ie.length-oe0?Y=Z(oe,ie):Y=null,Y===null?(ie.needReadable=ie.length<=ie.highWaterMark,oe=0):(ie.length-=oe,ie.awaitDrain=0),ie.length===0&&(ie.ended||(ie.needReadable=!0),Q!==oe&&ie.ended&&q(this)),Y!==null&&this.emit("data",Y),Y};function R(oe,ie){if(a("onEofChunk"),!ie.ended){if(ie.decoder){var Q=ie.decoder.end();Q&&Q.length&&(ie.buffer.push(Q),ie.length+=ie.objectMode?1:Q.length)}ie.ended=!0,ie.sync?k(oe):(ie.needReadable=!1,ie.emittedReadable||(ie.emittedReadable=!0,C(oe)))}}function k(oe){var ie=oe._readableState;a("emitReadable",ie.needReadable,ie.emittedReadable),ie.needReadable=!1,ie.emittedReadable||(a("emitReadable",ie.flowing),ie.emittedReadable=!0,f.nextTick(C,oe))}function C(oe){var ie=oe._readableState;a("emitReadable_",ie.destroyed,ie.length,ie.ended),!ie.destroyed&&(ie.length||ie.ended)&&(oe.emit("readable"),ie.emittedReadable=!1),ie.needReadable=!ie.flowing&&!ie.ended&&ie.length<=ie.highWaterMark,te(oe)}function O(oe,ie){ie.readingMore||(ie.readingMore=!0,f.nextTick(W,oe,ie))}function W(oe,ie){for(;!ie.reading&&!ie.ended&&(ie.length1&&ke(z.pipes,oe)!==-1)&&!Se&&(a("false write response, pause",z.awaitDrain),z.awaitDrain++),Q.pause())}function me(Fe){a("onerror",Fe),Ce(),oe.removeListener("error",me),s(oe,"error")===0&&G(oe,Fe)}J(oe,"error",me);function Ee(){oe.removeListener("finish",Ie),Ce()}oe.once("close",Ee);function Ie(){a("onfinish"),oe.removeListener("close",Ee),Ce()}oe.once("finish",Ie);function Ce(){a("unpipe"),Q.unpipe(oe)}return oe.emit("pipe",Q),z.flowing||(a("pipe resume"),Q.resume()),oe};function ne(oe){return function(){var Q=oe._readableState;a("pipeOnDrain",Q.awaitDrain),Q.awaitDrain&&Q.awaitDrain--,Q.awaitDrain===0&&s(oe,"data")&&(Q.flowing=!0,te(oe))}}M.prototype.unpipe=function(oe){var ie=this._readableState,Q={hasUnpiped:!1};if(ie.pipesCount===0)return this;if(ie.pipesCount===1)return oe&&oe!==ie.pipes?this:(oe||(oe=ie.pipes),ie.pipes=null,ie.pipesCount=0,ie.flowing=!1,oe&&oe.emit("unpipe",this,Q),this);if(!oe){var z=ie.pipes,Y=ie.pipesCount;ie.pipes=null,ie.pipesCount=0,ie.flowing=!1;for(var fe=0;fe0,z.flowing!==!1&&this.resume()):oe==="readable"&&!z.endEmitted&&!z.readableListening&&(z.readableListening=z.needReadable=!0,z.flowing=!1,z.emittedReadable=!1,a("on readable",z.length,z.reading),z.length?k(this):z.reading||f.nextTick(ue,this)),Q},M.prototype.addListener=M.prototype.on,M.prototype.removeListener=function(oe,ie){var Q=t.prototype.removeListener.call(this,oe,ie);return oe==="readable"&&f.nextTick(he,this),Q},M.prototype.removeAllListeners=function(oe){var ie=t.prototype.removeAllListeners.apply(this,arguments);return(oe==="readable"||oe===void 0)&&f.nextTick(he,this),ie};function he(oe){var ie=oe._readableState;ie.readableListening=oe.listenerCount("readable")>0,ie.resumeScheduled&&!ie.paused?ie.flowing=!0:oe.listenerCount("data")>0&&oe.resume()}function ue(oe){a("readable nexttick read 0"),oe.read(0)}M.prototype.resume=function(){var oe=this._readableState;return oe.flowing||(a("resume"),oe.flowing=!oe.readableListening,Ae(this,oe)),oe.paused=!1,this};function Ae(oe,ie){ie.resumeScheduled||(ie.resumeScheduled=!0,f.nextTick(pe,oe,ie))}function pe(oe,ie){a("resume",ie.reading),ie.reading||oe.read(0),ie.resumeScheduled=!1,oe.emit("resume"),te(oe),ie.flowing&&!ie.reading&&oe.read(0)}M.prototype.pause=function(){return a("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(a("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function te(oe){var ie=oe._readableState;for(a("flow",ie.flowing);ie.flowing&&oe.read()!==null;);}M.prototype.wrap=function(oe){var ie=this,Q=this._readableState,z=!1;oe.on("end",function(){if(a("wrapped end"),Q.decoder&&!Q.ended){var we=Q.decoder.end();we&&we.length&&ie.push(we)}ie.push(null)}),oe.on("data",function(we){if(a("wrapped data"),Q.decoder&&(we=Q.decoder.write(we)),!(Q.objectMode&&we==null)&&!(!Q.objectMode&&(!we||!we.length))){var U=ie.push(we);U||(z=!0,oe.pause())}});for(var Y in oe)this[Y]===void 0&&typeof oe[Y]=="function"&&(this[Y]=function(U){return function(){return oe[U].apply(oe,arguments)}}(Y));for(var fe=0;fe=ie.length?(ie.decoder?Q=ie.buffer.join(""):ie.buffer.length===1?Q=ie.buffer.first():Q=ie.buffer.concat(ie.length),ie.buffer.clear()):Q=ie.buffer.consume(oe,ie.decoder),Q}function q(oe){var ie=oe._readableState;a("endReadable",ie.endEmitted),ie.endEmitted||(ie.ended=!0,f.nextTick(de,ie,oe))}function de(oe,ie){if(a("endReadableNT",oe.endEmitted,oe.length),!oe.endEmitted&&oe.length===0&&(oe.endEmitted=!0,ie.readable=!1,ie.emit("end"),oe.autoDestroy)){var Q=ie._writableState;(!Q||Q.autoDestroy&&Q.finished)&&ie.destroy()}}typeof Symbol=="function"&&(M.from=function(oe,ie){return X===void 0&&(X=e("./internal/streams/from")),X(M,oe,ie)});function ke(oe,ie){for(var Q=0,z=oe.length;Q-1))throw new j(Z);return this._writableState.defaultEncoding=Z,this},Object.defineProperty(H.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function _(te,Z,q){return!te.objectMode&&te.decodeStrings!==!1&&typeof Z=="string"&&(Z=r.from(Z,q)),Z}Object.defineProperty(H.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function A(te,Z,q,de,ke,oe){if(!q){var ie=_(Z,de,ke);de!==ie&&(q=!0,ke="buffer",de=ie)}var Q=Z.objectMode?1:de.length;Z.length+=Q;var z=Z.length0?this.tail.next=E:this.head=E,this.tail=E,++this.length}},{key:"unshift",value:function(S){var E={data:S,next:this.head};this.length===0&&(this.tail=E),this.head=E,++this.length}},{key:"shift",value:function(){if(this.length!==0){var S=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,S}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(S){if(this.length===0)return"";for(var E=this.head,I=""+E.data;E=E.next;)I+=S+E.data;return I}},{key:"concat",value:function(S){if(this.length===0)return l.alloc(0);for(var E=l.allocUnsafe(S>>>0),I=this.head,F=0;I;)h(I.data,E,F),F+=I.data.length,I=I.next;return E}},{key:"consume",value:function(S,E){var I;return SB.length?B.length:S;if(j===B.length?F+=B:F+=B.slice(0,S),S-=j,S===0){j===B.length?(++I,E.next?this.head=E.next:this.head=this.tail=null):(this.head=E,E.data=B.slice(j));break}++I}return this.length-=I,F}},{key:"_getBuffer",value:function(S){var E=l.allocUnsafe(S),I=this.head,F=1;for(I.data.copy(E),S-=I.data.length;I=I.next;){var B=I.data,j=S>B.length?B.length:S;if(B.copy(E,E.length-S,0,j),S-=j,S===0){j===B.length?(++F,I.next?this.head=I.next:this.head=this.tail=null):(this.head=I,I.data=B.slice(j));break}++F}return this.length-=F,E}},{key:v,value:function(S,E){return g(this,c(c({},E),{},{depth:0,customInspect:!1}))}}]),w}()},{buffer:220,util:188}],485:[function(e,d,m){(function(f){(function(){function c(i,o){var l=this,a=this._readableState&&this._readableState.destroyed,g=this._writableState&&this._writableState.destroyed;return a||g?(o?o(i):i&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,f.nextTick(n,this,i)):f.nextTick(n,this,i)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(i||null,function(v){!o&&v?l._writableState?l._writableState.errorEmitted?f.nextTick(s,l):(l._writableState.errorEmitted=!0,f.nextTick(u,l,v)):f.nextTick(u,l,v):o?(f.nextTick(s,l),o(v)):f.nextTick(s,l)}),this)}function u(i,o){n(i,o),s(i)}function s(i){i._writableState&&!i._writableState.emitClose||i._readableState&&!i._readableState.emitClose||i.emit("close")}function t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function n(i,o){i.emit("error",o)}function r(i,o){var l=i._readableState,a=i._writableState;l&&l.autoDestroy||a&&a.autoDestroy?i.destroy(o):i.emit("error",o)}d.exports={destroy:c,undestroy:t,errorOrDestroy:r}}).call(this)}).call(this,e("_process"))},{_process:467}],486:[function(e,d,m){var f=e("../../../errors").codes.ERR_STREAM_PREMATURE_CLOSE;function c(n){var r=!1;return function(){if(!r){r=!0;for(var i=arguments.length,o=new Array(i),l=0;l0;return i(I,B,j,function(X){S||(S=X),X&&E.forEach(o),!B&&(E.forEach(o),y(S))})});return h.reduce(l)}d.exports=g},{"../../../errors":477,"./end-of-stream":486}],489:[function(e,d,m){var f=e("../../../errors").codes.ERR_INVALID_OPT_VALUE;function c(s,t,n){return s.highWaterMark!=null?s.highWaterMark:t?s[n]:null}function u(s,t,n,r){var i=c(t,r,n);if(i!=null){if(!(isFinite(i)&&Math.floor(i)===i)||i<0){var o=r?n:"highWaterMark";throw new f(o,i)}return Math.floor(i)}return s.objectMode?16:16*1024}d.exports={getHighWaterMark:u}},{"../../../errors":477}],490:[function(e,d,m){d.exports=e("events").EventEmitter},{events:422}],491:[function(e,d,m){m=d.exports=e("./lib/_stream_readable.js"),m.Stream=m,m.Readable=m,m.Writable=e("./lib/_stream_writable.js"),m.Duplex=e("./lib/_stream_duplex.js"),m.Transform=e("./lib/_stream_transform.js"),m.PassThrough=e("./lib/_stream_passthrough.js"),m.finished=e("./lib/internal/streams/end-of-stream.js"),m.pipeline=e("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":478,"./lib/_stream_passthrough.js":479,"./lib/_stream_readable.js":480,"./lib/_stream_transform.js":481,"./lib/_stream_writable.js":482,"./lib/internal/streams/end-of-stream.js":486,"./lib/internal/streams/pipeline.js":488}],492:[function(e,d,m){var f=function(c){var u=Object.prototype,s=u.hasOwnProperty,t=Object.defineProperty||function(R,k,C){R[k]=C.value},n,r=typeof Symbol=="function"?Symbol:{},i=r.iterator||"@@iterator",o=r.asyncIterator||"@@asyncIterator",l=r.toStringTag||"@@toStringTag";function a(R,k,C){return Object.defineProperty(R,k,{value:C,enumerable:!0,configurable:!0,writable:!0}),R[k]}try{a({},"")}catch{a=function(k,C,O){return k[C]=O}}function g(R,k,C,O){var W=k&&k.prototype instanceof I?k:I,ne=Object.create(W.prototype),he=new P(O||[]);return t(ne,"_invoke",{value:M(R,C,he)}),ne}c.wrap=g;function v(R,k,C){try{return{type:"normal",arg:R.call(k,C)}}catch(O){return{type:"throw",arg:O}}}var h="suspendedStart",w="suspendedYield",y="executing",S="completed",E={};function I(){}function F(){}function B(){}var j={};a(j,i,function(){return this});var X=Object.getPrototypeOf,G=X&&X(X(L([])));G&&G!==u&&s.call(G,i)&&(j=G);var V=B.prototype=I.prototype=Object.create(j);F.prototype=B,t(V,"constructor",{value:B,configurable:!0}),t(B,"constructor",{value:F,configurable:!0}),F.displayName=a(B,l,"GeneratorFunction");function J(R){["next","throw","return"].forEach(function(k){a(R,k,function(C){return this._invoke(k,C)})})}c.isGeneratorFunction=function(R){var k=typeof R=="function"&&R.constructor;return k?k===F||(k.displayName||k.name)==="GeneratorFunction":!1},c.mark=function(R){return Object.setPrototypeOf?Object.setPrototypeOf(R,B):(R.__proto__=B,a(R,l,"GeneratorFunction")),R.prototype=Object.create(V),R},c.awrap=function(R){return{__await:R}};function H(R,k){function C(ne,he,ue,Ae){var pe=v(R[ne],R,he);if(pe.type==="throw")Ae(pe.arg);else{var te=pe.arg,Z=te.value;return Z&&typeof Z=="object"&&s.call(Z,"__await")?k.resolve(Z.__await).then(function(q){C("next",q,ue,Ae)},function(q){C("throw",q,ue,Ae)}):k.resolve(Z).then(function(q){te.value=q,ue(te)},function(q){return C("throw",q,ue,Ae)})}}var O;function W(ne,he){function ue(){return new k(function(Ae,pe){C(ne,he,Ae,pe)})}return O=O?O.then(ue,ue):ue()}t(this,"_invoke",{value:W})}J(H.prototype),a(H.prototype,o,function(){return this}),c.AsyncIterator=H,c.async=function(R,k,C,O,W){W===void 0&&(W=Promise);var ne=new H(g(R,k,C,O),W);return c.isGeneratorFunction(k)?ne:ne.next().then(function(he){return he.done?he.value:ne.next()})};function M(R,k,C){var O=h;return function(ne,he){if(O===y)throw new Error("Generator is already running");if(O===S){if(ne==="throw")throw he;return $()}for(C.method=ne,C.arg=he;;){var ue=C.delegate;if(ue){var Ae=T(ue,C);if(Ae){if(Ae===E)continue;return Ae}}if(C.method==="next")C.sent=C._sent=C.arg;else if(C.method==="throw"){if(O===h)throw O=S,C.arg;C.dispatchException(C.arg)}else C.method==="return"&&C.abrupt("return",C.arg);O=y;var pe=v(R,k,C);if(pe.type==="normal"){if(O=C.done?S:w,pe.arg===E)continue;return{value:pe.arg,done:C.done}}else pe.type==="throw"&&(O=S,C.method="throw",C.arg=pe.arg)}}}function T(R,k){var C=k.method,O=R.iterator[C];if(O===n)return k.delegate=null,C==="throw"&&R.iterator.return&&(k.method="return",k.arg=n,T(R,k),k.method==="throw")||C!=="return"&&(k.method="throw",k.arg=new TypeError("The iterator does not provide a '"+C+"' method")),E;var W=v(O,R.iterator,k.arg);if(W.type==="throw")return k.method="throw",k.arg=W.arg,k.delegate=null,E;var ne=W.arg;if(!ne)return k.method="throw",k.arg=new TypeError("iterator result is not an object"),k.delegate=null,E;if(ne.done)k[R.resultName]=ne.value,k.next=R.nextLoc,k.method!=="return"&&(k.method="next",k.arg=n);else return ne;return k.delegate=null,E}J(V),a(V,l,"Generator"),a(V,i,function(){return this}),a(V,"toString",function(){return"[object Generator]"});function _(R){var k={tryLoc:R[0]};1 in R&&(k.catchLoc=R[1]),2 in R&&(k.finallyLoc=R[2],k.afterLoc=R[3]),this.tryEntries.push(k)}function A(R){var k=R.completion||{};k.type="normal",delete k.arg,R.completion=k}function P(R){this.tryEntries=[{tryLoc:"root"}],R.forEach(_,this),this.reset(!0)}c.keys=function(R){var k=Object(R),C=[];for(var O in k)C.push(O);return C.reverse(),function W(){for(;C.length;){var ne=C.pop();if(ne in k)return W.value=ne,W.done=!1,W}return W.done=!0,W}};function L(R){if(R){var k=R[i];if(k)return k.call(R);if(typeof R.next=="function")return R;if(!isNaN(R.length)){var C=-1,O=function W(){for(;++C=0;--O){var W=this.tryEntries[O],ne=W.completion;if(W.tryLoc==="root")return C("end");if(W.tryLoc<=this.prev){var he=s.call(W,"catchLoc"),ue=s.call(W,"finallyLoc");if(he&&ue){if(this.prev=0;--C){var O=this.tryEntries[C];if(O.tryLoc<=this.prev&&s.call(O,"finallyLoc")&&this.prev=0;--k){var C=this.tryEntries[k];if(C.finallyLoc===R)return this.complete(C.completion,C.afterLoc),A(C),E}},catch:function(R){for(var k=this.tryEntries.length-1;k>=0;--k){var C=this.tryEntries[k];if(C.tryLoc===R){var O=C.completion;if(O.type==="throw"){var W=O.arg;A(C)}return W}}throw new Error("illegal catch attempt")},delegateYield:function(R,k,C){return this.delegate={iterator:L(R),resultName:k,nextLoc:C},this.method==="next"&&(this.arg=n),E}},c}(typeof d=="object"?d.exports:{});try{regeneratorRuntime=f}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=f:Function("r","regeneratorRuntime = r")(f)}},{}],493:[function(e,d,m){var f=e("buffer").Buffer,c=e("inherits"),u=e("hash-base"),s=new Array(16),t=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],n=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],r=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],i=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],o=[0,1518500249,1859775393,2400959708,2840853838],l=[1352829926,1548603684,1836072691,2053994217,0];function a(){u.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}c(a,u),a.prototype._update=function(){for(var E=s,I=0;I<16;++I)E[I]=this._block.readInt32LE(I*4);for(var F=this._a|0,B=this._b|0,j=this._c|0,X=this._d|0,G=this._e|0,V=this._a|0,J=this._b|0,H=this._c|0,M=this._d|0,T=this._e|0,_=0;_<80;_+=1){var A,P;_<16?(A=v(F,B,j,X,G,E[t[_]],o[0],r[_]),P=S(V,J,H,M,T,E[n[_]],l[0],i[_])):_<32?(A=h(F,B,j,X,G,E[t[_]],o[1],r[_]),P=y(V,J,H,M,T,E[n[_]],l[1],i[_])):_<48?(A=w(F,B,j,X,G,E[t[_]],o[2],r[_]),P=w(V,J,H,M,T,E[n[_]],l[2],i[_])):_<64?(A=y(F,B,j,X,G,E[t[_]],o[3],r[_]),P=h(V,J,H,M,T,E[n[_]],l[3],i[_])):(A=S(F,B,j,X,G,E[t[_]],o[4],r[_]),P=v(V,J,H,M,T,E[n[_]],l[4],i[_])),F=G,G=X,X=g(j,10),j=B,B=A,V=T,T=M,M=g(H,10),H=J,J=P}var L=this._b+j+M|0;this._b=this._c+X+T|0,this._c=this._d+G+V|0,this._d=this._e+F+J|0,this._e=this._a+B+H|0,this._a=L},a.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var E=f.alloc?f.alloc(20):new f(20);return E.writeInt32LE(this._a,0),E.writeInt32LE(this._b,4),E.writeInt32LE(this._c,8),E.writeInt32LE(this._d,12),E.writeInt32LE(this._e,16),E};function g(E,I){return E<>>32-I}function v(E,I,F,B,j,X,G,V){return g(E+(I^F^B)+X+G|0,V)+j|0}function h(E,I,F,B,j,X,G,V){return g(E+(I&F|~I&B)+X+G|0,V)+j|0}function w(E,I,F,B,j,X,G,V){return g(E+((I|~F)^B)+X+G|0,V)+j|0}function y(E,I,F,B,j,X,G,V){return g(E+(I&B|F&~B)+X+G|0,V)+j|0}function S(E,I,F,B,j,X,G,V){return g(E+(I^(F|~B))+X+G|0,V)+j|0}d.exports=a},{buffer:220,"hash-base":425,inherits:440}],494:[function(e,d,m){/*! safe-buffer. MIT License. Feross Aboukhadijeh */var f=e("buffer"),c=f.Buffer;function u(t,n){for(var r in t)n[r]=t[r]}c.from&&c.alloc&&c.allocUnsafe&&c.allocUnsafeSlow?d.exports=f:(u(f,m),m.Buffer=s);function s(t,n,r){return c(t,n,r)}s.prototype=Object.create(c.prototype),u(c,s),s.from=function(t,n,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return c(t,n,r)},s.alloc=function(t,n,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=c(t);return n!==void 0?typeof r=="string"?i.fill(n,r):i.fill(n):i.fill(0),i},s.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return c(t)},s.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return f.SlowBuffer(t)}},{buffer:220}],495:[function(e,d,m){(function(f){(function(){var c=e("buffer"),u=c.Buffer,s={},t;for(t in c)c.hasOwnProperty(t)&&(t==="SlowBuffer"||t==="Buffer"||(s[t]=c[t]));var n=s.Buffer={};for(t in u)u.hasOwnProperty(t)&&(t==="allocUnsafe"||t==="allocUnsafeSlow"||(n[t]=u[t]));if(s.Buffer.prototype=u.prototype,(!n.from||n.from===Uint8Array.from)&&(n.from=function(r,i,o){if(typeof r=="number")throw new TypeError('The "value" argument must not be of type number. Received type '+typeof r);if(r&&typeof r.length>"u")throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r);return u(r,i,o)}),n.alloc||(n.alloc=function(r,i,o){if(typeof r!="number")throw new TypeError('The "size" argument must be of type number. Received type '+typeof r);if(r<0||r>=2*(1<<30))throw new RangeError('The value "'+r+'" is invalid for option "size"');var l=u(r);return!i||i.length===0?l.fill(0):typeof o=="string"?l.fill(i,o):l.fill(i),l}),!s.kStringMaxLength)try{s.kStringMaxLength=f.binding("buffer").kStringMaxLength}catch{}s.constants||(s.constants={MAX_LENGTH:s.kMaxLength},s.kStringMaxLength&&(s.constants.MAX_STRING_LENGTH=s.kStringMaxLength)),d.exports=s}).call(this)}).call(this,e("_process"))},{_process:467,buffer:220}],496:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0});const f=e("xmlchars/xml/1.0/ed5"),c=e("xmlchars/xml/1.1/ed2"),u=e("xmlchars/xmlns/1.0/ed3");var s=f.isS,t=f.isChar,n=f.isNameStartChar,r=f.isNameChar,i=f.S_LIST,o=f.NAME_RE,l=c.isChar,a=u.isNCNameStartChar,g=u.isNCNameChar,v=u.NC_NAME_RE;const h="http://www.w3.org/XML/1998/namespace",w="http://www.w3.org/2000/xmlns/",y={__proto__:null,xml:h,xmlns:w},S={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},E=-1,I=-2,F=0,B=1,j=2,X=3,G=4,V=5,J=6,H=7,M=8,T=9,_=10,A=11,P=12,L=13,$=14,R=15,k=16,C=17,O=18,W=19,ne=20,he=21,ue=22,Ae=23,pe=24,te=25,Z=26,q=27,de=28,ke=29,oe=30,ie=31,Q=32,z=33,Y=34,fe=35,we=36,U=37,ve=38,Se=39,ee=40,se=41,me=42,Ee=43,Ie=44,Ce=9,Fe=10,ze=13,je=32,ge=33,Me=34,Be=38,Xe=39,ot=45,ct=47,st=59,rt=60,bt=61,Qe=62,et=63,_t=91,ft=93,jt=133,It=8232,ht=Tt=>Tt===Me||Tt===Xe,Dt=[Me,Xe],Ut=[...Dt,_t,Qe],wt=[...Dt,rt,ft],er=[bt,et,...i],Kt=[...i,Qe,Be,rt];function pt(Tt,be,Ne){switch(be){case"xml":Ne!==h&&Tt.fail(`xml prefix must be bound to ${h}.`);break;case"xmlns":Ne!==w&&Tt.fail(`xmlns prefix must be bound to ${w}.`);break}switch(Ne){case w:Tt.fail(be===""?`the default namespace may not be set to ${Ne}.`:`may not assign a prefix (even "xmlns") to the URI ${w}.`);break;case h:switch(be){case"xml":break;case"":Tt.fail(`the default namespace may not be set to ${Ne}.`);break;default:Tt.fail("may not assign the xml namespace to another prefix.")}break}}function Gt(Tt,be){for(const Ne of Object.keys(be))pt(Tt,Ne,be[Ne])}const kt=Tt=>v.test(Tt),xt=Tt=>o.test(Tt),$t=0,Qt=1,mt=2;m.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const qt={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};class St{constructor(be){this.opt=be??{},this.fragmentOpt=!!this.opt.fragment;const Ne=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=this.opt.position!==!1,this.fileName=this.opt.fileName,Ne){this.nameStartCheck=a,this.nameCheck=g,this.isName=kt,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},y);const Le=this.opt.additionalNamespaces;Le!=null&&(Gt(this,Le),Object.assign(this.ns,Le))}else this.nameStartCheck=n,this.nameCheck=r,this.isName=xt,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var be;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=$t,this.attribList=[];const{fragmentOpt:Ne}=this;this.state=Ne?L:F,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=Ne,this.xmlDeclPossible=!Ne,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:Le}=this.opt;if(Le===void 0){if(this.opt.forceXMLVersion===!0)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");Le="1.0"}this.setXMLVersion(Le),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(S),(be=this.readyHandler)===null||be===void 0||be.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(be,Ne){this[qt[be]]=Ne}off(be){this[qt[be]]=void 0}makeError(be){var Ne;let Le=(Ne=this.fileName)!==null&&Ne!==void 0?Ne:"";return this.trackPosition&&(Le.length>0&&(Le+=":"),Le+=`${this.line}:${this.column}`),Le.length>0&&(Le+=": "),new Error(Le+be)}fail(be){const Ne=this.makeError(be),Le=this.errorHandler;if(Le===void 0)throw Ne;return Le(Ne),this}write(be){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let Ne=!1;be===null?(Ne=!0,be=""):typeof be=="object"&&(be=be.toString()),this.carriedFromPrevious!==void 0&&(be=`${this.carriedFromPrevious}${be}`,this.carriedFromPrevious=void 0);let Le=be.length;const Je=be.charCodeAt(Le-1);!Ne&&(Je===ze||Je>=55296&&Je<=56319)&&(this.carriedFromPrevious=be[Le-1],Le--,be=be.slice(0,Le));const{stateTable:at}=this;for(this.chunk=be,this.i=0;this.i=be.length)return E;const Le=be.charCodeAt(Ne);if(this.column++,Le<55296){if(Le>=je||Le===Ce)return Le;switch(Le){case Fe:return this.line++,this.column=0,this.positionAtNewLine=this.position,Fe;case ze:return be.charCodeAt(Ne+1)===Fe&&(this.i=Ne+2),this.line++,this.column=0,this.positionAtNewLine=this.position,I;default:return this.fail("disallowed character."),Le}}if(Le>56319)return Le>=57344&&Le<=65533||this.fail("disallowed character."),Le;const Je=65536+(Le-55296)*1024+(be.charCodeAt(Ne+1)-56320);return this.i=Ne+2,Je>1114111&&this.fail("disallowed character."),Je}getCode11(){const{chunk:be,i:Ne}=this;if(this.prevI=Ne,this.i=Ne+1,Ne>=be.length)return E;const Le=be.charCodeAt(Ne);if(this.column++,Le<55296){if(Le>31&&Le<127||Le>159&&Le!==It||Le===Ce)return Le;switch(Le){case Fe:return this.line++,this.column=0,this.positionAtNewLine=this.position,Fe;case ze:{const at=be.charCodeAt(Ne+1);(at===Fe||at===jt)&&(this.i=Ne+2)}case jt:case It:return this.line++,this.column=0,this.positionAtNewLine=this.position,I;default:return this.fail("disallowed character."),Le}}if(Le>56319)return Le>=57344&&Le<=65533||this.fail("disallowed character."),Le;const Je=65536+(Le-55296)*1024+(be.charCodeAt(Ne+1)-56320);return this.i=Ne+2,Je>1114111&&this.fail("disallowed character."),Je}getCodeNorm(){const be=this.getCode();return be===I?Fe:be}unget(){this.i=this.prevI,this.column--}captureTo(be){let{i:Ne}=this;const{chunk:Le}=this;for(;;){const Je=this.getCode(),at=Je===I,Mt=at?Fe:Je;if(Mt===E||be.includes(Mt))return this.text+=Le.slice(Ne,this.prevI),Mt;at&&(this.text+=`${Le.slice(Ne,this.prevI)} +`,Ne=this.i)}}captureToChar(be){let{i:Ne}=this;const{chunk:Le}=this;for(;;){let Je=this.getCode();switch(Je){case I:this.text+=`${Le.slice(Ne,this.prevI)} +`,Ne=this.i,Je=Fe;break;case E:return this.text+=Le.slice(Ne),!1}if(Je===be)return this.text+=Le.slice(Ne,this.prevI),!0}}captureNameChars(){const{chunk:be,i:Ne}=this;for(;;){const Le=this.getCode();if(Le===E)return this.name+=be.slice(Ne),E;if(!r(Le))return this.name+=be.slice(Ne,this.prevI),Le===I?Fe:Le}}skipSpaces(){for(;;){const be=this.getCodeNorm();if(be===E||!s(be))return be}}setXMLVersion(be){this.currentXMLVersion=be,be==="1.0"?(this.isChar=t,this.getCode=this.getCode10):(this.isChar=l,this.getCode=this.getCode11)}sBegin(){this.chunk.charCodeAt(0)===65279&&(this.i++,this.column++),this.state=B}sBeginWhitespace(){const be=this.i,Ne=this.skipSpaces();switch(this.prevI!==be&&(this.xmlDeclPossible=!1),Ne){case rt:if(this.state=R,this.text.length!==0)throw new Error("no-empty text at start");break;case E:break;default:this.unget(),this.state=L,this.xmlDeclPossible=!1}}sDoctype(){var be;const Ne=this.captureTo(Ut);switch(Ne){case Qe:{(be=this.doctypeHandler)===null||be===void 0||be.call(this,this.text),this.text="",this.state=L,this.doctype=!0;break}case E:break;default:this.text+=String.fromCodePoint(Ne),Ne===_t?this.state=G:ht(Ne)&&(this.state=X,this.q=Ne)}}sDoctypeQuote(){const be=this.q;this.captureToChar(be)&&(this.text+=String.fromCodePoint(be),this.q=null,this.state=j)}sDTD(){const be=this.captureTo(wt);be!==E&&(this.text+=String.fromCodePoint(be),be===ft?this.state=j:be===rt?this.state=J:ht(be)&&(this.state=V,this.q=be))}sDTDQuoted(){const be=this.q;this.captureToChar(be)&&(this.text+=String.fromCodePoint(be),this.state=G,this.q=null)}sDTDOpenWaka(){const be=this.getCodeNorm();switch(this.text+=String.fromCodePoint(be),be){case ge:this.state=H,this.openWakaBang="";break;case et:this.state=A;break;default:this.state=G}}sDTDOpenWakaBang(){const be=String.fromCodePoint(this.getCodeNorm()),Ne=this.openWakaBang+=be;this.text+=be,Ne!=="-"&&(this.state=Ne==="--"?M:G,this.openWakaBang="")}sDTDComment(){this.captureToChar(ot)&&(this.text+="-",this.state=T)}sDTDCommentEnding(){const be=this.getCodeNorm();this.text+=String.fromCodePoint(be),this.state=be===ot?_:M}sDTDCommentEnded(){const be=this.getCodeNorm();this.text+=String.fromCodePoint(be),be===Qe?this.state=G:(this.fail("malformed comment."),this.state=M)}sDTDPI(){this.captureToChar(et)&&(this.text+="?",this.state=P)}sDTDPIEnding(){const be=this.getCodeNorm();this.text+=String.fromCodePoint(be),be===Qe&&(this.state=G)}sText(){this.tags.length!==0?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:be}=this;const{chunk:Ne}=this;e:for(;;)switch(this.getCode()){case I:this.entity+=`${Ne.slice(be,this.prevI)} +`,be=this.i;break;case st:{const{entityReturnState:Le}=this,Je=this.entity+Ne.slice(be,this.prevI);this.state=Le;let at;Je===""?(this.fail("empty entity name."),at="&;"):(at=this.parseEntity(Je),this.entity=""),(Le!==L||this.textHandler!==void 0)&&(this.text+=at);break e}case E:this.entity+=Ne.slice(be);break e}}sOpenWaka(){const be=this.getCode();if(n(be))this.state=Y,this.unget(),this.xmlDeclPossible=!1;else switch(be){case ct:this.state=Ee,this.xmlDeclPossible=!1;break;case ge:this.state=k,this.openWakaBang="",this.xmlDeclPossible=!1;break;case et:this.state=Ae;break;default:this.fail("disallowed character in tag name"),this.state=L,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=ne,this.openWakaBang="";break;case"--":this.state=C,this.openWakaBang="";break;case"DOCTYPE":this.state=j,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(ot)&&(this.state=O)}sCommentEnding(){var be;const Ne=this.getCodeNorm();Ne===ot?(this.state=W,(be=this.commentHandler)===null||be===void 0||be.call(this,this.text),this.text=""):(this.text+=`-${String.fromCodePoint(Ne)}`,this.state=C)}sCommentEnded(){const be=this.getCodeNorm();be!==Qe?(this.fail("malformed comment."),this.text+=`--${String.fromCodePoint(be)}`,this.state=C):this.state=L}sCData(){this.captureToChar(ft)&&(this.state=he)}sCDataEnding(){const be=this.getCodeNorm();be===ft?this.state=ue:(this.text+=`]${String.fromCodePoint(be)}`,this.state=ne)}sCDataEnding2(){var be;const Ne=this.getCodeNorm();switch(Ne){case Qe:{(be=this.cdataHandler)===null||be===void 0||be.call(this,this.text),this.text="",this.state=L;break}case ft:this.text+="]";break;default:this.text+=`]]${String.fromCodePoint(Ne)}`,this.state=ne}}sPIFirstChar(){const be=this.getCodeNorm();this.nameStartCheck(be)?(this.piTarget+=String.fromCodePoint(be),this.state=pe):be===et||s(be)?(this.fail("processing instruction without a target."),this.state=be===et?Z:te):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(be),this.state=pe)}sPIRest(){const{chunk:be,i:Ne}=this;for(;;){const Le=this.getCodeNorm();if(Le===E){this.piTarget+=be.slice(Ne);return}if(!this.nameCheck(Le)){this.piTarget+=be.slice(Ne,this.prevI);const Je=Le===et;Je||s(Le)?this.piTarget==="xml"?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=Je?z:q):this.state=Je?Z:te:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(Le));break}}}sPIBody(){if(this.text.length===0){const be=this.getCodeNorm();be===et?this.state=Z:s(be)||(this.text=String.fromCodePoint(be))}else this.captureToChar(et)&&(this.state=Z)}sPIEnding(){var be;const Ne=this.getCodeNorm();if(Ne===Qe){const{piTarget:Le}=this;Le.toLowerCase()==="xml"&&this.fail("the XML declaration must appear at the start of the document."),(be=this.piHandler)===null||be===void 0||be.call(this,{target:Le,body:this.text}),this.piTarget=this.text="",this.state=L}else Ne===et?this.text+="?":(this.text+=`?${String.fromCodePoint(Ne)}`,this.state=te);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const be=this.skipSpaces();if(be===et){this.state=z;return}be!==E&&(this.state=de,this.name=String.fromCodePoint(be))}sXMLDeclName(){const be=this.captureTo(er);if(be===et){this.state=z,this.name+=this.text,this.text="",this.fail("XML declaration is incomplete.");return}if(s(be)||be===bt){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`)}this.state=be===bt?oe:ke}}sXMLDeclEq(){const be=this.getCodeNorm();if(be===et){this.state=z,this.fail("XML declaration is incomplete.");return}s(be)||(be!==bt&&this.fail("value required."),this.state=oe)}sXMLDeclValueStart(){const be=this.getCodeNorm();if(be===et){this.state=z,this.fail("XML declaration is incomplete.");return}s(be)||(ht(be)?this.q=be:(this.fail("value must be quoted."),this.q=je),this.state=ie)}sXMLDeclValue(){const be=this.captureTo([this.q,et]);if(be===et){this.state=z,this.text="",this.fail("XML declaration is incomplete.");return}if(be===E)return;const Ne=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const Le=Ne;this.xmlDecl.version=Le,/^1\.[0-9]+$/.test(Le)?this.opt.forceXMLVersion||this.setXMLVersion(Le):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(Ne)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=Ne;break;case"standalone":Ne!=="yes"&&Ne!=="no"&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=Ne;break}this.name="",this.state=Q}sXMLDeclSeparator(){const be=this.getCodeNorm();if(be===et){this.state=z;return}s(be)||(this.fail("whitespace required."),this.unget()),this.state=q}sXMLDeclEnding(){var be;this.getCodeNorm()===Qe?(this.piTarget!=="xml"?this.fail("processing instructions are not allowed before root."):this.name!=="version"&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),(be=this.xmldeclHandler)===null||be===void 0||be.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=L):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var be;const Ne=this.captureNameChars();if(Ne===E)return;const Le=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=Le.ns=Object.create(null)),(be=this.openTagStartHandler)===null||be===void 0||be.call(this,Le),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),Ne){case Qe:this.openTag();break;case ct:this.state=fe;break;default:s(Ne)||this.fail("disallowed character in tag name."),this.state=we}}sOpenTagSlash(){this.getCode()===Qe?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=we)}sAttrib(){const be=this.skipSpaces();be!==E&&(n(be)?(this.unget(),this.state=U):be===Qe?this.openTag():be===ct?this.state=fe:this.fail("disallowed character in attribute name."))}sAttribName(){const be=this.captureNameChars();be===bt?this.state=Se:s(be)?this.state=ve:be===Qe?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):be!==E&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const be=this.skipSpaces();switch(be){case E:return;case bt:this.state=Se;break;default:this.fail("attribute without value."),this.text="",this.name="",be===Qe?this.openTag():n(be)?(this.unget(),this.state=U):(this.fail("disallowed character in attribute name."),this.state=we)}}sAttribValue(){const be=this.getCodeNorm();ht(be)?(this.q=be,this.state=ee):s(be)||(this.fail("unquoted attribute value."),this.state=me,this.unget())}sAttribValueQuoted(){const{q:be,chunk:Ne}=this;let{i:Le}=this;for(;;)switch(this.getCode()){case be:this.pushAttrib(this.name,this.text+Ne.slice(Le,this.prevI)),this.name=this.text="",this.q=null,this.state=se;return;case Be:this.text+=Ne.slice(Le,this.prevI),this.state=$,this.entityReturnState=ee;return;case Fe:case I:case Ce:this.text+=`${Ne.slice(Le,this.prevI)} `,Le=this.i;break;case rt:this.text+=Ne.slice(Le,this.prevI),this.fail("disallowed character.");return;case E:this.text+=Ne.slice(Le);return}}sAttribValueClosed(){const be=this.getCodeNorm();s(be)?this.state=we:be===Qe?this.openTag():be===ct?this.state=fe:n(be)?(this.fail("no whitespace between attributes."),this.unget(),this.state=U):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const be=this.captureTo(Kt);switch(be){case Be:this.state=$,this.entityReturnState=me;break;case rt:this.fail("disallowed character.");break;case E:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",be===Qe?this.openTag():this.state=we}}sCloseTag(){const be=this.captureNameChars();be===Qe?this.closeTag():s(be)?this.state=Ie:be!==E&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case Qe:this.closeTag();break;case E:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:be,forbiddenState:Ne}=this;const{chunk:Le,textHandler:Je}=this;e:for(;;)switch(this.getCode()){case rt:{if(this.state=R,Je!==void 0){const{text:at}=this,Mt=Le.slice(be,this.prevI);at.length!==0?(Je(at+Mt),this.text=""):Mt.length!==0&&Je(Mt)}Ne=$t;break e}case Be:this.state=$,this.entityReturnState=L,Je!==void 0&&(this.text+=Le.slice(be,this.prevI)),Ne=$t;break e;case ft:switch(Ne){case $t:Ne=Qt;break;case Qt:Ne=mt;break;case mt:break;default:throw new Error("impossible state")}break;case Qe:Ne===mt&&this.fail('the string "]]>" is disallowed in char data.'),Ne=$t;break;case I:Je!==void 0&&(this.text+=`${Le.slice(be,this.prevI)} +`),be=this.i,Ne=$t;break;case E:Je!==void 0&&(this.text+=Le.slice(be));break e;default:Ne=$t}this.forbiddenState=Ne}handleTextOutsideRoot(){let{i:be}=this;const{chunk:Ne,textHandler:Le}=this;let Je=!1;e:for(;;){const at=this.getCode();switch(at){case rt:{if(this.state=R,Le!==void 0){const{text:Mt}=this,rr=Ne.slice(be,this.prevI);Mt.length!==0?(Le(Mt+rr),this.text=""):rr.length!==0&&Le(rr)}break e}case Be:this.state=$,this.entityReturnState=L,Le!==void 0&&(this.text+=Ne.slice(be,this.prevI)),Je=!0;break e;case I:Le!==void 0&&(this.text+=`${Ne.slice(be,this.prevI)} +`),be=this.i;break;case E:Le!==void 0&&(this.text+=Ne.slice(be));break e;default:s(at)||(Je=!0)}}Je&&(!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(be,Ne){var Le;const{prefix:Je,local:at}=this.qname(be),Mt={name:be,prefix:Je,local:at,value:Ne};if(this.attribList.push(Mt),(Le=this.attributeHandler)===null||Le===void 0||Le.call(this,Mt),Je==="xmlns"){const rr=Ne.trim();this.currentXMLVersion==="1.0"&&rr===""&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[at]=rr,pt(this,at,rr)}else if(be==="xmlns"){const rr=Ne.trim();this.topNS[""]=rr,pt(this,"",rr)}}pushAttribPlain(be,Ne){var Le;const Je={name:be,value:Ne};this.attribList.push(Je),(Le=this.attributeHandler)===null||Le===void 0||Le.call(this,Je)}end(){var be,Ne;this.sawRoot||this.fail("document must contain a root element.");const{tags:Le}=this;for(;Le.length>0;){const at=Le.pop();this.fail(`unclosed tag: ${at.name}`)}this.state!==F&&this.state!==L&&this.fail("unexpected end.");const{text:Je}=this;return Je.length!==0&&((be=this.textHandler)===null||be===void 0||be.call(this,Je),this.text=""),this._closed=!0,(Ne=this.endHandler)===null||Ne===void 0||Ne.call(this),this._init(),this}resolve(be){var Ne,Le;let Je=this.topNS[be];if(Je!==void 0)return Je;const{tags:at}=this;for(let Mt=at.length-1;Mt>=0;Mt--)if(Je=at[Mt].ns[be],Je!==void 0)return Je;return Je=this.ns[be],Je!==void 0?Je:(Le=(Ne=this.opt).resolvePrefix)===null||Le===void 0?void 0:Le.call(Ne,be)}qname(be){const Ne=be.indexOf(":");if(Ne===-1)return{prefix:"",local:be};const Le=be.slice(Ne+1),Je=be.slice(0,Ne);return(Je===""||Le===""||Le.includes(":"))&&this.fail(`malformed name: ${be}.`),{prefix:Je,local:Le}}processAttribsNS(){var be;const{attribList:Ne}=this,Le=this.tag;{const{prefix:Mt,local:rr}=this.qname(Le.name);Le.prefix=Mt,Le.local=rr;const vr=Le.uri=(be=this.resolve(Mt))!==null&&be!==void 0?be:"";Mt!==""&&(Mt==="xmlns"&&this.fail('tags may not have "xmlns" as prefix.'),vr===""&&(this.fail(`unbound namespace prefix: ${JSON.stringify(Mt)}.`),Le.uri=Mt))}if(Ne.length===0)return;const{attributes:Je}=Le,at=new Set;for(const Mt of Ne){const{name:rr,prefix:vr,local:Dr}=Mt;let yr,lr;vr===""?(yr=rr==="xmlns"?w:"",lr=rr):(yr=this.resolve(vr),yr===void 0&&(this.fail(`unbound namespace prefix: ${JSON.stringify(vr)}.`),yr=vr),lr=`{${yr}}${Dr}`),at.has(lr)&&this.fail(`duplicate attribute: ${lr}.`),at.add(lr),Mt.uri=yr,Je[rr]=Mt}this.attribList=[]}processAttribsPlain(){const{attribList:be}=this,Ne=this.tag.attributes;for(const{name:Le,value:Je}of be)Ne[Le]!==void 0&&this.fail(`duplicate attribute: ${Le}.`),Ne[Le]=Je;this.attribList=[]}openTag(){var be;this.processAttribs();const{tags:Ne}=this,Le=this.tag;Le.isSelfClosing=!1,(be=this.openTagHandler)===null||be===void 0||be.call(this,Le),Ne.push(Le),this.state=L,this.name=""}openSelfClosingTag(){var be,Ne,Le;this.processAttribs();const{tags:Je}=this,at=this.tag;at.isSelfClosing=!0,(be=this.openTagHandler)===null||be===void 0||be.call(this,at),(Ne=this.closeTagHandler)===null||Ne===void 0||Ne.call(this,at),(this.tag=(Le=Je[Je.length-1])!==null&&Le!==void 0?Le:null)===null&&(this.closedRoot=!0),this.state=L,this.name=""}closeTag(){const{tags:be,name:Ne}=this;if(this.state=L,this.name="",Ne===""){this.fail("weird empty close tag."),this.text+="";return}const Le=this.closeTagHandler;let Je=be.length;for(;Je-- >0;){const at=this.tag=be.pop();if(this.topNS=at.ns,Le==null||Le(at),at.name===Ne)break;this.fail("unexpected close tag.")}Je===0?this.closedRoot=!0:Je<0&&(this.fail(`unmatched closing tag: ${Ne}.`),this.text+=``)}parseEntity(be){if(be[0]!=="#"){const Le=this.ENTITIES[be];return Le!==void 0?Le:(this.fail(this.isName(be)?"undefined entity.":"disallowed character in entity name."),`&${be};`)}let Ne=NaN;return be[1]==="x"&&/^#x[0-9a-f]+$/i.test(be)?Ne=parseInt(be.slice(2),16):/^#[0-9]+$/.test(be)&&(Ne=parseInt(be.slice(1),10)),this.isChar(Ne)?String.fromCodePoint(Ne):(this.fail("malformed character entity."),`&${be};`)}}m.SaxesParser=St},{"xmlchars/xml/1.0/ed5":543,"xmlchars/xml/1.1/ed2":544,"xmlchars/xmlns/1.0/ed3":545}],497:[function(e,d,m){var f=e("safe-buffer").Buffer;function c(u,s){this._block=f.alloc(u),this._finalSize=s,this._blockSize=u,this._len=0}c.prototype.update=function(u,s){typeof u=="string"&&(s=s||"utf8",u=f.from(u,s));for(var t=this._block,n=this._blockSize,r=u.length,i=this._len,o=0;o=this._finalSize&&(this._update(this._block),this._block.fill(0));var t=this._len*8;if(t<=4294967295)this._block.writeUInt32BE(t,this._blockSize-4);else{var n=(t&4294967295)>>>0,r=(t-n)/4294967296;this._block.writeUInt32BE(r,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var i=this._hash();return u?i.toString(u):i},c.prototype._update=function(){throw new Error("_update must be implemented by subclass")},d.exports=c},{"safe-buffer":494}],498:[function(e,d,m){var f=d.exports=function(u){u=u.toLowerCase();var s=f[u];if(!s)throw new Error(u+" is not supported (we accept pull requests)");return new s};f.sha=e("./sha"),f.sha1=e("./sha1"),f.sha224=e("./sha224"),f.sha256=e("./sha256"),f.sha384=e("./sha384"),f.sha512=e("./sha512")},{"./sha":499,"./sha1":500,"./sha224":501,"./sha256":502,"./sha384":503,"./sha512":504}],499:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1518500249,1859775393,-1894007588,-899497514],t=new Array(80);function n(){this.init(),this._w=t,c.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function r(l){return l<<5|l>>>27}function i(l){return l<<30|l>>>2}function o(l,a,g,v){return l===0?a&g|~a&v:l===2?a&g|a&v|g&v:a^g^v}n.prototype._update=function(l){for(var a=this._w,g=this._a|0,v=this._b|0,h=this._c|0,w=this._d|0,y=this._e|0,S=0;S<16;++S)a[S]=l.readInt32BE(S*4);for(;S<80;++S)a[S]=a[S-3]^a[S-8]^a[S-14]^a[S-16];for(var E=0;E<80;++E){var I=~~(E/20),F=r(g)+o(I,v,h,w)+y+a[E]+s[I]|0;y=w,w=h,h=i(v),v=g,g=F}this._a=g+this._a|0,this._b=v+this._b|0,this._c=h+this._c|0,this._d=w+this._d|0,this._e=y+this._e|0},n.prototype._hash=function(){var l=u.allocUnsafe(20);return l.writeInt32BE(this._a|0,0),l.writeInt32BE(this._b|0,4),l.writeInt32BE(this._c|0,8),l.writeInt32BE(this._d|0,12),l.writeInt32BE(this._e|0,16),l},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],500:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1518500249,1859775393,-1894007588,-899497514],t=new Array(80);function n(){this.init(),this._w=t,c.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function r(a){return a<<1|a>>>31}function i(a){return a<<5|a>>>27}function o(a){return a<<30|a>>>2}function l(a,g,v,h){return a===0?g&v|~g&h:a===2?g&v|g&h|v&h:g^v^h}n.prototype._update=function(a){for(var g=this._w,v=this._a|0,h=this._b|0,w=this._c|0,y=this._d|0,S=this._e|0,E=0;E<16;++E)g[E]=a.readInt32BE(E*4);for(;E<80;++E)g[E]=r(g[E-3]^g[E-8]^g[E-14]^g[E-16]);for(var I=0;I<80;++I){var F=~~(I/20),B=i(v)+l(F,h,w,y)+S+g[I]+s[F]|0;S=y,y=w,w=o(h),h=v,v=B}this._a=v+this._a|0,this._b=h+this._b|0,this._c=w+this._c|0,this._d=y+this._d|0,this._e=S+this._e|0},n.prototype._hash=function(){var a=u.allocUnsafe(20);return a.writeInt32BE(this._a|0,0),a.writeInt32BE(this._b|0,4),a.writeInt32BE(this._c|0,8),a.writeInt32BE(this._d|0,12),a.writeInt32BE(this._e|0,16),a},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],501:[function(e,d,m){var f=e("inherits"),c=e("./sha256"),u=e("./hash"),s=e("safe-buffer").Buffer,t=new Array(64);function n(){this.init(),this._w=t,u.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},n.prototype._hash=function(){var r=s.allocUnsafe(28);return r.writeInt32BE(this._a,0),r.writeInt32BE(this._b,4),r.writeInt32BE(this._c,8),r.writeInt32BE(this._d,12),r.writeInt32BE(this._e,16),r.writeInt32BE(this._f,20),r.writeInt32BE(this._g,24),r},d.exports=n},{"./hash":497,"./sha256":502,inherits:440,"safe-buffer":494}],502:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],t=new Array(64);function n(){this.init(),this._w=t,c.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this};function r(v,h,w){return w^v&(h^w)}function i(v,h,w){return v&h|w&(v|h)}function o(v){return(v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10)}function l(v){return(v>>>6|v<<26)^(v>>>11|v<<21)^(v>>>25|v<<7)}function a(v){return(v>>>7|v<<25)^(v>>>18|v<<14)^v>>>3}function g(v){return(v>>>17|v<<15)^(v>>>19|v<<13)^v>>>10}n.prototype._update=function(v){for(var h=this._w,w=this._a|0,y=this._b|0,S=this._c|0,E=this._d|0,I=this._e|0,F=this._f|0,B=this._g|0,j=this._h|0,X=0;X<16;++X)h[X]=v.readInt32BE(X*4);for(;X<64;++X)h[X]=g(h[X-2])+h[X-7]+a(h[X-15])+h[X-16]|0;for(var G=0;G<64;++G){var V=j+l(I)+r(I,F,B)+s[G]+h[G]|0,J=o(w)+i(w,y,S)|0;j=B,B=F,F=I,I=E+V|0,E=S,S=y,y=w,w=V+J|0}this._a=w+this._a|0,this._b=y+this._b|0,this._c=S+this._c|0,this._d=E+this._d|0,this._e=I+this._e|0,this._f=F+this._f|0,this._g=B+this._g|0,this._h=j+this._h|0},n.prototype._hash=function(){var v=u.allocUnsafe(32);return v.writeInt32BE(this._a,0),v.writeInt32BE(this._b,4),v.writeInt32BE(this._c,8),v.writeInt32BE(this._d,12),v.writeInt32BE(this._e,16),v.writeInt32BE(this._f,20),v.writeInt32BE(this._g,24),v.writeInt32BE(this._h,28),v},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],503:[function(e,d,m){var f=e("inherits"),c=e("./sha512"),u=e("./hash"),s=e("safe-buffer").Buffer,t=new Array(160);function n(){this.init(),this._w=t,u.call(this,128,112)}f(n,c),n.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},n.prototype._hash=function(){var r=s.allocUnsafe(48);function i(o,l,a){r.writeInt32BE(o,a),r.writeInt32BE(l,a+4)}return i(this._ah,this._al,0),i(this._bh,this._bl,8),i(this._ch,this._cl,16),i(this._dh,this._dl,24),i(this._eh,this._el,32),i(this._fh,this._fl,40),r},d.exports=n},{"./hash":497,"./sha512":504,inherits:440,"safe-buffer":494}],504:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],t=new Array(160);function n(){this.init(),this._w=t,c.call(this,128,112)}f(n,c),n.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this};function r(y,S,E){return E^y&(S^E)}function i(y,S,E){return y&S|E&(y|S)}function o(y,S){return(y>>>28|S<<4)^(S>>>2|y<<30)^(S>>>7|y<<25)}function l(y,S){return(y>>>14|S<<18)^(y>>>18|S<<14)^(S>>>9|y<<23)}function a(y,S){return(y>>>1|S<<31)^(y>>>8|S<<24)^y>>>7}function g(y,S){return(y>>>1|S<<31)^(y>>>8|S<<24)^(y>>>7|S<<25)}function v(y,S){return(y>>>19|S<<13)^(S>>>29|y<<3)^y>>>6}function h(y,S){return(y>>>19|S<<13)^(S>>>29|y<<3)^(y>>>6|S<<26)}function w(y,S){return y>>>0>>0?1:0}n.prototype._update=function(y){for(var S=this._w,E=this._ah|0,I=this._bh|0,F=this._ch|0,B=this._dh|0,j=this._eh|0,X=this._fh|0,G=this._gh|0,V=this._hh|0,J=this._al|0,H=this._bl|0,M=this._cl|0,T=this._dl|0,_=this._el|0,A=this._fl|0,P=this._gl|0,L=this._hl|0,$=0;$<32;$+=2)S[$]=y.readInt32BE($*4),S[$+1]=y.readInt32BE($*4+4);for(;$<160;$+=2){var R=S[$-30],k=S[$-15*2+1],C=a(R,k),O=g(k,R);R=S[$-2*2],k=S[$-2*2+1];var W=v(R,k),ne=h(k,R),he=S[$-7*2],ue=S[$-7*2+1],Ae=S[$-16*2],pe=S[$-16*2+1],te=O+ue|0,Z=C+he+w(te,O)|0;te=te+ne|0,Z=Z+W+w(te,ne)|0,te=te+pe|0,Z=Z+Ae+w(te,pe)|0,S[$]=Z,S[$+1]=te}for(var q=0;q<160;q+=2){Z=S[q],te=S[q+1];var de=i(E,I,F),ke=i(J,H,M),oe=o(E,J),ie=o(J,E),Q=l(j,_),z=l(_,j),Y=s[q],fe=s[q+1],we=r(j,X,G),U=r(_,A,P),ve=L+z|0,Se=V+Q+w(ve,L)|0;ve=ve+U|0,Se=Se+we+w(ve,U)|0,ve=ve+fe|0,Se=Se+Y+w(ve,fe)|0,ve=ve+te|0,Se=Se+Z+w(ve,te)|0;var ee=ie+ke|0,se=oe+de+w(ee,ie)|0;V=G,L=P,G=X,P=A,X=j,A=_,_=T+ve|0,j=B+Se+w(_,T)|0,B=F,T=M,F=I,M=H,I=E,H=J,J=ve+ee|0,E=Se+se+w(J,ve)|0}this._al=this._al+J|0,this._bl=this._bl+H|0,this._cl=this._cl+M|0,this._dl=this._dl+T|0,this._el=this._el+_|0,this._fl=this._fl+A|0,this._gl=this._gl+P|0,this._hl=this._hl+L|0,this._ah=this._ah+E+w(this._al,J)|0,this._bh=this._bh+I+w(this._bl,H)|0,this._ch=this._ch+F+w(this._cl,M)|0,this._dh=this._dh+B+w(this._dl,T)|0,this._eh=this._eh+j+w(this._el,_)|0,this._fh=this._fh+X+w(this._fl,A)|0,this._gh=this._gh+G+w(this._gl,P)|0,this._hh=this._hh+V+w(this._hl,L)|0},n.prototype._hash=function(){var y=u.allocUnsafe(64);function S(E,I,F){y.writeInt32BE(E,F),y.writeInt32BE(I,F+4)}return S(this._ah,this._al,0),S(this._bh,this._bl,8),S(this._ch,this._cl,16),S(this._dh,this._dl,24),S(this._eh,this._el,32),S(this._fh,this._fl,40),S(this._gh,this._gl,48),S(this._hh,this._hl,56),y},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],505:[function(e,d,m){d.exports=u;var f=e("events").EventEmitter,c=e("inherits");c(u,f),u.Readable=e("readable-stream/readable.js"),u.Writable=e("readable-stream/writable.js"),u.Duplex=e("readable-stream/duplex.js"),u.Transform=e("readable-stream/transform.js"),u.PassThrough=e("readable-stream/passthrough.js"),u.Stream=u;function u(){f.call(this)}u.prototype.pipe=function(s,t){var n=this;function r(h){s.writable&&s.write(h)===!1&&n.pause&&n.pause()}n.on("data",r);function i(){n.readable&&n.resume&&n.resume()}s.on("drain",i),!s._isStdio&&(!t||t.end!==!1)&&(n.on("end",l),n.on("close",a));var o=!1;function l(){o||(o=!0,s.end())}function a(){o||(o=!0,typeof s.destroy=="function"&&s.destroy())}function g(h){if(v(),f.listenerCount(this,"error")===0)throw h}n.on("error",g),s.on("error",g);function v(){n.removeListener("data",r),s.removeListener("drain",i),n.removeListener("end",l),n.removeListener("close",a),n.removeListener("error",g),s.removeListener("error",g),n.removeListener("end",v),n.removeListener("close",v),s.removeListener("close",v)}return n.on("end",v),n.on("close",v),s.on("close",v),s.emit("pipe",n),s}},{events:422,inherits:440,"readable-stream/duplex.js":507,"readable-stream/passthrough.js":516,"readable-stream/readable.js":517,"readable-stream/transform.js":518,"readable-stream/writable.js":519}],506:[function(e,d,m){var f={}.toString;d.exports=Array.isArray||function(c){return f.call(c)=="[object Array]"}},{}],507:[function(e,d,m){d.exports=e("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":508}],508:[function(e,d,m){var f=e("process-nextick-args"),c=Object.keys||function(g){var v=[];for(var h in g)v.push(h);return v};d.exports=o;var u=Object.create(e("core-util-is"));u.inherits=e("inherits");var s=e("./_stream_readable"),t=e("./_stream_writable");u.inherits(o,s);for(var n=c(t.prototype),r=0;r0?(typeof q!="string"&&!ie.objectMode&&Object.getPrototypeOf(q)!==i.prototype&&(q=l(q)),ke?ie.endEmitted?Z.emit("error",new Error("stream.unshift() after end event")):X(Z,ie,q,!0):ie.ended?Z.emit("error",new Error("stream.push() after EOF")):(ie.reading=!1,ie.decoder&&!de?(q=ie.decoder.write(q),ie.objectMode||q.length!==0?X(Z,ie,q,!1):P(Z,ie)):X(Z,ie,q,!1))):ke||(ie.reading=!1)}return V(ie)}function X(Z,q,de,ke){q.flowing&&q.length===0&&!q.sync?(Z.emit("data",de),Z.read(0)):(q.length+=q.objectMode?1:de.length,ke?q.buffer.unshift(de):q.buffer.push(de),q.needReadable&&_(Z)),P(Z,q)}function G(Z,q){var de;return!a(q)&&typeof q!="string"&&q!==void 0&&!Z.objectMode&&(de=new TypeError("Invalid non-string/buffer chunk")),de}function V(Z){return!Z.ended&&(Z.needReadable||Z.length=J?Z=J:(Z--,Z|=Z>>>1,Z|=Z>>>2,Z|=Z>>>4,Z|=Z>>>8,Z|=Z>>>16,Z++),Z}function M(Z,q){return Z<=0||q.length===0&&q.ended?0:q.objectMode?1:Z!==Z?q.flowing&&q.length?q.buffer.head.data.length:q.length:(Z>q.highWaterMark&&(q.highWaterMark=H(Z)),Z<=q.length?Z:q.ended?q.length:(q.needReadable=!0,0))}B.prototype.read=function(Z){h("read",Z),Z=parseInt(Z,10);var q=this._readableState,de=Z;if(Z!==0&&(q.emittedReadable=!1),Z===0&&q.needReadable&&(q.length>=q.highWaterMark||q.ended))return h("read: emitReadable",q.length,q.ended),q.length===0&&q.ended?Ae(this):_(this),null;if(Z=M(Z,q),Z===0&&q.ended)return q.length===0&&Ae(this),null;var ke=q.needReadable;h("need readable",ke),(q.length===0||q.length-Z0?oe=W(Z,q):oe=null,oe===null?(q.needReadable=!0,Z=0):q.length-=Z,q.length===0&&(q.ended||(q.needReadable=!0),de!==Z&&q.ended&&Ae(this)),oe!==null&&this.emit("data",oe),oe};function T(Z,q){if(!q.ended){if(q.decoder){var de=q.decoder.end();de&&de.length&&(q.buffer.push(de),q.length+=q.objectMode?1:de.length)}q.ended=!0,_(Z)}}function _(Z){var q=Z._readableState;q.needReadable=!1,q.emittedReadable||(h("emitReadable",q.flowing),q.emittedReadable=!0,q.sync?u.nextTick(A,Z):A(Z))}function A(Z){h("emit readable"),Z.emit("readable"),O(Z)}function P(Z,q){q.readingMore||(q.readingMore=!0,u.nextTick(L,Z,q))}function L(Z,q){for(var de=q.length;!q.reading&&!q.flowing&&!q.ended&&q.length1&&te(ke.pipes,Z)!==-1)&&!fe&&(h("false write response, pause",ke.awaitDrain),ke.awaitDrain++,U=!0),de.pause())}function Se(Ee){h("onerror",Ee),me(),Z.removeListener("error",Se),n(Z,"error")===0&&Z.emit("error",Ee)}I(Z,"error",Se);function ee(){Z.removeListener("finish",se),me()}Z.once("close",ee);function se(){h("onfinish"),Z.removeListener("close",ee),me()}Z.once("finish",se);function me(){h("unpipe"),de.unpipe(Z)}return Z.emit("pipe",de),ke.flowing||(h("pipe resume"),de.resume()),Z};function $(Z){return function(){var q=Z._readableState;h("pipeOnDrain",q.awaitDrain),q.awaitDrain&&q.awaitDrain--,q.awaitDrain===0&&n(Z,"data")&&(q.flowing=!0,O(Z))}}B.prototype.unpipe=function(Z){var q=this._readableState,de={hasUnpiped:!1};if(q.pipesCount===0)return this;if(q.pipesCount===1)return Z&&Z!==q.pipes?this:(Z||(Z=q.pipes),q.pipes=null,q.pipesCount=0,q.flowing=!1,Z&&Z.emit("unpipe",this,de),this);if(!Z){var ke=q.pipes,oe=q.pipesCount;q.pipes=null,q.pipesCount=0,q.flowing=!1;for(var ie=0;ie=q.length?(q.decoder?de=q.buffer.join(""):q.buffer.length===1?de=q.buffer.head.data:de=q.buffer.concat(q.length),q.buffer.clear()):de=ne(Z,q.buffer,q.decoder),de}function ne(Z,q,de){var ke;return Zie.length?ie.length:Z;if(Q===ie.length?oe+=ie:oe+=ie.slice(0,Z),Z-=Q,Z===0){Q===ie.length?(++ke,de.next?q.head=de.next:q.head=q.tail=null):(q.head=de,de.data=ie.slice(Q));break}++ke}return q.length-=ke,oe}function ue(Z,q){var de=i.allocUnsafe(Z),ke=q.head,oe=1;for(ke.data.copy(de),Z-=ke.data.length;ke=ke.next;){var ie=ke.data,Q=Z>ie.length?ie.length:Z;if(ie.copy(de,de.length-Z,0,Q),Z-=Q,Z===0){Q===ie.length?(++oe,ke.next?q.head=ke.next:q.head=q.tail=null):(q.head=ke,ke.data=ie.slice(Q));break}++oe}return q.length-=oe,de}function Ae(Z){var q=Z._readableState;if(q.length>0)throw new Error('"endReadable()" called on non-empty stream');q.endEmitted||(q.ended=!0,u.nextTick(pe,q,Z))}function pe(Z,q){!Z.endEmitted&&Z.length===0&&(Z.endEmitted=!0,q.readable=!1,q.emit("end"))}function te(Z,q){for(var de=0,ke=Z.length;de-1?u:s.nextTick,r;I.WritableState=S;var i=Object.create(e("core-util-is"));i.inherits=e("inherits");var o={deprecate:e("util-deprecate")},l=e("./internal/streams/stream"),a=e("safe-buffer").Buffer,g=(typeof c<"u"?c:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function v(C){return a.from(C)}function h(C){return a.isBuffer(C)||C instanceof g}var w=e("./internal/streams/destroy");i.inherits(I,l);function y(){}function S(C,O){r=r||e("./_stream_duplex"),C=C||{};var W=O instanceof r;this.objectMode=!!C.objectMode,W&&(this.objectMode=this.objectMode||!!C.writableObjectMode);var ne=C.highWaterMark,he=C.writableHighWaterMark,ue=this.objectMode?16:16*1024;ne||ne===0?this.highWaterMark=ne:W&&(he||he===0)?this.highWaterMark=he:this.highWaterMark=ue,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var Ae=C.decodeStrings===!1;this.decodeStrings=!Ae,this.defaultEncoding=C.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(pe){H(O,pe)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new t(this)}S.prototype.getBuffer=function(){for(var O=this.bufferedRequest,W=[];O;)W.push(O),O=O.next;return W},function(){try{Object.defineProperty(S.prototype,"buffer",{get:o.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}();var E;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(E=Function.prototype[Symbol.hasInstance],Object.defineProperty(I,Symbol.hasInstance,{value:function(C){return E.call(this,C)?!0:this!==I?!1:C&&C._writableState instanceof S}})):E=function(C){return C instanceof this};function I(C){if(r=r||e("./_stream_duplex"),!E.call(I,this)&&!(this instanceof r))return new I(C);this._writableState=new S(C,this),this.writable=!0,C&&(typeof C.write=="function"&&(this._write=C.write),typeof C.writev=="function"&&(this._writev=C.writev),typeof C.destroy=="function"&&(this._destroy=C.destroy),typeof C.final=="function"&&(this._final=C.final)),l.call(this)}I.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};function F(C,O){var W=new Error("write after end");C.emit("error",W),s.nextTick(O,W)}function B(C,O,W,ne){var he=!0,ue=!1;return W===null?ue=new TypeError("May not write null values to stream"):typeof W!="string"&&W!==void 0&&!O.objectMode&&(ue=new TypeError("Invalid non-string/buffer chunk")),ue&&(C.emit("error",ue),s.nextTick(ne,ue),he=!1),he}I.prototype.write=function(C,O,W){var ne=this._writableState,he=!1,ue=!ne.objectMode&&h(C);return ue&&!a.isBuffer(C)&&(C=v(C)),typeof O=="function"&&(W=O,O=null),ue?O="buffer":O||(O=ne.defaultEncoding),typeof W!="function"&&(W=y),ne.ended?F(this,W):(ue||B(this,ne,C,W))&&(ne.pendingcb++,he=X(this,ne,ue,C,O,W)),he},I.prototype.cork=function(){var C=this._writableState;C.corked++},I.prototype.uncork=function(){var C=this._writableState;C.corked&&(C.corked--,!C.writing&&!C.corked&&!C.bufferProcessing&&C.bufferedRequest&&_(this,C))},I.prototype.setDefaultEncoding=function(O){if(typeof O=="string"&&(O=O.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((O+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+O);return this._writableState.defaultEncoding=O,this};function j(C,O,W){return!C.objectMode&&C.decodeStrings!==!1&&typeof O=="string"&&(O=a.from(O,W)),O}Object.defineProperty(I.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function X(C,O,W,ne,he,ue){if(!W){var Ae=j(O,ne,he);ne!==Ae&&(W=!0,he="buffer",ne=Ae)}var pe=O.objectMode?1:ne.length;O.length+=pe;var te=O.length0?this.tail.next=i:this.head=i,this.tail=i,++this.length},t.prototype.unshift=function(r){var i={data:r,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length},t.prototype.shift=function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(r){if(this.length===0)return"";for(var i=this.head,o=""+i.data;i=i.next;)o+=r+i.data;return o},t.prototype.concat=function(r){if(this.length===0)return c.alloc(0);for(var i=c.allocUnsafe(r>>>0),o=this.head,l=0;o;)s(o.data,i,l),l+=o.data.length,o=o.next;return i},t}(),u&&u.inspect&&u.inspect.custom&&(d.exports.prototype[u.inspect.custom]=function(){var t=u.inspect({length:this.length});return this.constructor.name+" "+t})},{"safe-buffer":520,util:188}],514:[function(e,d,m){var f=e("process-nextick-args");function c(t,n){var r=this,i=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return i||o?(n?n(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,f.nextTick(s,this,t)):f.nextTick(s,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(l){!n&&l?r._writableState?r._writableState.errorEmitted||(r._writableState.errorEmitted=!0,f.nextTick(s,r,l)):f.nextTick(s,r,l):n&&n(l)}),this)}function u(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function s(t,n){t.emit("error",n)}d.exports={destroy:c,undestroy:u}},{"process-nextick-args":466}],515:[function(e,d,m){arguments[4][490][0].apply(m,arguments)},{dup:490,events:422}],516:[function(e,d,m){d.exports=e("./readable").PassThrough},{"./readable":517}],517:[function(e,d,m){m=d.exports=e("./lib/_stream_readable.js"),m.Stream=m,m.Readable=m,m.Writable=e("./lib/_stream_writable.js"),m.Duplex=e("./lib/_stream_duplex.js"),m.Transform=e("./lib/_stream_transform.js"),m.PassThrough=e("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":508,"./lib/_stream_passthrough.js":509,"./lib/_stream_readable.js":510,"./lib/_stream_transform.js":511,"./lib/_stream_writable.js":512}],518:[function(e,d,m){d.exports=e("./readable").Transform},{"./readable":517}],519:[function(e,d,m){d.exports=e("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":512}],520:[function(e,d,m){arguments[4][217][0].apply(m,arguments)},{buffer:220,dup:217}],521:[function(e,d,m){arguments[4][218][0].apply(m,arguments)},{dup:218,"safe-buffer":520}],522:[function(e,d,m){arguments[4][218][0].apply(m,arguments)},{dup:218,"safe-buffer":494}],523:[function(e,d,m){(function(f,c){(function(){var u=e("process/browser.js").nextTick,s=Function.prototype.apply,t=Array.prototype.slice,n={},r=0;m.setTimeout=function(){return new i(s.call(setTimeout,window,arguments),clearTimeout)},m.setInterval=function(){return new i(s.call(setInterval,window,arguments),clearInterval)},m.clearTimeout=m.clearInterval=function(o){o.close()};function i(o,l){this._id=o,this._clearFn=l}i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(window,this._id)},m.enroll=function(o,l){clearTimeout(o._idleTimeoutId),o._idleTimeout=l},m.unenroll=function(o){clearTimeout(o._idleTimeoutId),o._idleTimeout=-1},m._unrefActive=m.active=function(o){clearTimeout(o._idleTimeoutId);var l=o._idleTimeout;l>=0&&(o._idleTimeoutId=setTimeout(function(){o._onTimeout&&o._onTimeout()},l))},m.setImmediate=typeof f=="function"?f:function(o){var l=r++,a=arguments.length<2?!1:t.call(arguments,1);return n[l]=!0,u(function(){n[l]&&(a?o.apply(null,a):o.call(null),m.clearImmediate(l))}),l},m.clearImmediate=typeof c=="function"?c:function(o){delete n[o]}}).call(this)}).call(this,e("timers").setImmediate,e("timers").clearImmediate)},{"process/browser.js":467,timers:523}],524:[function(e,d,m){(function(f){(function(){d.exports=c;function c(s,t){if(u("noDeprecation"))return s;var n=!1;function r(){if(!n){if(u("throwDeprecation"))throw new Error(t);u("traceDeprecation")?console.trace(t):console.warn(t),n=!0}return s.apply(this,arguments)}return r}function u(s){try{if(!f.localStorage)return!1}catch{return!1}var t=f.localStorage[s];return t==null?!1:String(t).toLowerCase()==="true"}}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],525:[function(e,d,m){typeof Object.create=="function"?d.exports=function(c,u){c.super_=u,c.prototype=Object.create(u.prototype,{constructor:{value:c,enumerable:!1,writable:!0,configurable:!0}})}:d.exports=function(c,u){c.super_=u;var s=function(){};s.prototype=u.prototype,c.prototype=new s,c.prototype.constructor=c}},{}],526:[function(e,d,m){d.exports=function(c){return c&&typeof c=="object"&&typeof c.copy=="function"&&typeof c.fill=="function"&&typeof c.readUInt8=="function"}},{}],527:[function(e,d,m){(function(f,c){(function(){var u=/%[sdj%]/g;m.format=function(R){if(!B(R)){for(var k=[],C=0;C=W)return ue;switch(ue){case"%s":return String(O[C++]);case"%d":return Number(O[C++]);case"%j":try{return JSON.stringify(O[C++])}catch{return"[Circular]"}default:return ue}}),he=O[C];C=3&&(C.depth=arguments[2]),arguments.length>=4&&(C.colors=arguments[3]),S(k)?C.showHidden=k:k&&m._extend(C,k),X(C.showHidden)&&(C.showHidden=!1),X(C.depth)&&(C.depth=2),X(C.colors)&&(C.colors=!1),X(C.customInspect)&&(C.customInspect=!0),C.colors&&(C.stylize=r),l(C,R,C.depth)}m.inspect=n,n.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},n.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function r(R,k){var C=n.styles[k];return C?"\x1B["+n.colors[C][0]+"m"+R+"\x1B["+n.colors[C][1]+"m":R}function i(R,k){return R}function o(R){var k={};return R.forEach(function(C,O){k[C]=!0}),k}function l(R,k,C){if(R.customInspect&&k&&M(k.inspect)&&k.inspect!==m.inspect&&!(k.constructor&&k.constructor.prototype===k)){var O=k.inspect(C,R);return B(O)||(O=l(R,O,C)),O}var W=a(R,k);if(W)return W;var ne=Object.keys(k),he=o(ne);if(R.showHidden&&(ne=Object.getOwnPropertyNames(k)),H(k)&&(ne.indexOf("message")>=0||ne.indexOf("description")>=0))return g(k);if(ne.length===0){if(M(k)){var ue=k.name?": "+k.name:"";return R.stylize("[Function"+ue+"]","special")}if(G(k))return R.stylize(RegExp.prototype.toString.call(k),"regexp");if(J(k))return R.stylize(Date.prototype.toString.call(k),"date");if(H(k))return g(k)}var Ae="",pe=!1,te=["{","}"];if(y(k)&&(pe=!0,te=["[","]"]),M(k)){var Z=k.name?": "+k.name:"";Ae=" [Function"+Z+"]"}if(G(k)&&(Ae=" "+RegExp.prototype.toString.call(k)),J(k)&&(Ae=" "+Date.prototype.toUTCString.call(k)),H(k)&&(Ae=" "+g(k)),ne.length===0&&(!pe||k.length==0))return te[0]+Ae+te[1];if(C<0)return G(k)?R.stylize(RegExp.prototype.toString.call(k),"regexp"):R.stylize("[Object]","special");R.seen.push(k);var q;return pe?q=v(R,k,C,he,ne):q=ne.map(function(de){return h(R,k,C,he,de,pe)}),R.seen.pop(),w(q,Ae,te)}function a(R,k){if(X(k))return R.stylize("undefined","undefined");if(B(k)){var C="'"+JSON.stringify(k).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return R.stylize(C,"string")}if(F(k))return R.stylize(""+k,"number");if(S(k))return R.stylize(""+k,"boolean");if(E(k))return R.stylize("null","null")}function g(R){return"["+Error.prototype.toString.call(R)+"]"}function v(R,k,C,O,W){for(var ne=[],he=0,ue=k.length;he-1&&(ne?ue=ue.split(` +`).map(function(pe){return" "+pe}).join(` +`).substr(2):ue=` +`+ue.split(` +`).map(function(pe){return" "+pe}).join(` +`))):ue=R.stylize("[Circular]","special")),X(he)){if(ne&&W.match(/^\d+$/))return ue;he=JSON.stringify(""+W),he.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(he=he.substr(1,he.length-2),he=R.stylize(he,"name")):(he=he.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),he=R.stylize(he,"string"))}return he+": "+ue}function w(R,k,C){var O=R.reduce(function(W,ne){return ne.indexOf(` +`)>=0,W+ne.replace(/\u001b\[\d\d?m/g,"").length+1},0);return O>60?C[0]+(k===""?"":k+` + `)+" "+R.join(`, + `)+" "+C[1]:C[0]+k+" "+R.join(", ")+" "+C[1]}function y(R){return Array.isArray(R)}m.isArray=y;function S(R){return typeof R=="boolean"}m.isBoolean=S;function E(R){return R===null}m.isNull=E;function I(R){return R==null}m.isNullOrUndefined=I;function F(R){return typeof R=="number"}m.isNumber=F;function B(R){return typeof R=="string"}m.isString=B;function j(R){return typeof R=="symbol"}m.isSymbol=j;function X(R){return R===void 0}m.isUndefined=X;function G(R){return V(R)&&_(R)==="[object RegExp]"}m.isRegExp=G;function V(R){return typeof R=="object"&&R!==null}m.isObject=V;function J(R){return V(R)&&_(R)==="[object Date]"}m.isDate=J;function H(R){return V(R)&&(_(R)==="[object Error]"||R instanceof Error)}m.isError=H;function M(R){return typeof R=="function"}m.isFunction=M;function T(R){return R===null||typeof R=="boolean"||typeof R=="number"||typeof R=="string"||typeof R=="symbol"||typeof R>"u"}m.isPrimitive=T,m.isBuffer=e("./support/isBuffer");function _(R){return Object.prototype.toString.call(R)}function A(R){return R<10?"0"+R.toString(10):R.toString(10)}var P=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function L(){var R=new Date,k=[A(R.getHours()),A(R.getMinutes()),A(R.getSeconds())].join(":");return[R.getDate(),P[R.getMonth()],k].join(" ")}m.log=function(){console.log("%s - %s",L(),m.format.apply(m,arguments))},m.inherits=e("inherits"),m._extend=function(R,k){if(!k||!V(k))return R;for(var C=Object.keys(k),O=C.length;O--;)R[C[O]]=k[C[O]];return R};function $(R,k){return Object.prototype.hasOwnProperty.call(R,k)}}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{"./support/isBuffer":526,_process:467,inherits:525}],528:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),Object.defineProperty(m,"v1",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(m,"v3",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(m,"v4",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(m,"v5",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(m,"NIL",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(m,"version",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(m,"validate",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(m,"stringify",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(m,"parse",{enumerable:!0,get:function(){return o.default}});var f=l(e("./v1.js")),c=l(e("./v3.js")),u=l(e("./v4.js")),s=l(e("./v5.js")),t=l(e("./nil.js")),n=l(e("./version.js")),r=l(e("./validate.js")),i=l(e("./stringify.js")),o=l(e("./parse.js"));function l(a){return a&&a.__esModule?a:{default:a}}},{"./nil.js":530,"./parse.js":531,"./stringify.js":535,"./v1.js":536,"./v3.js":537,"./v4.js":539,"./v5.js":540,"./validate.js":541,"./version.js":542}],529:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;function f(h){if(typeof h=="string"){const w=unescape(encodeURIComponent(h));h=new Uint8Array(w.length);for(let y=0;y>5]>>>E%32&255,F=parseInt(S.charAt(I>>>4&15)+S.charAt(I&15),16);w.push(F)}return w}function u(h){return(h+64>>>9<<4)+14+1}function s(h,w){h[w>>5]|=128<>5]|=(h[S/8]&255)<>16)+(w>>16)+(y>>16)<<16|y&65535}function r(h,w){return h<>>32-w}function i(h,w,y,S,E,I){return n(r(n(n(w,h),n(S,I)),E),y)}function o(h,w,y,S,E,I,F){return i(w&y|~w&S,h,w,E,I,F)}function l(h,w,y,S,E,I,F){return i(w&S|y&~S,h,w,E,I,F)}function a(h,w,y,S,E,I,F){return i(w^y^S,h,w,E,I,F)}function g(h,w,y,S,E,I,F){return i(y^(w|~S),h,w,E,I,F)}var v=f;m.default=v},{}],530:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f="00000000-0000-0000-0000-000000000000";m.default=f},{}],531:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=c(e("./validate.js"));function c(t){return t&&t.__esModule?t:{default:t}}function u(t){if(!(0,f.default)(t))throw TypeError("Invalid UUID");let n;const r=new Uint8Array(16);return r[0]=(n=parseInt(t.slice(0,8),16))>>>24,r[1]=n>>>16&255,r[2]=n>>>8&255,r[3]=n&255,r[4]=(n=parseInt(t.slice(9,13),16))>>>8,r[5]=n&255,r[6]=(n=parseInt(t.slice(14,18),16))>>>8,r[7]=n&255,r[8]=(n=parseInt(t.slice(19,23),16))>>>8,r[9]=n&255,r[10]=(n=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=n/4294967296&255,r[12]=n>>>24&255,r[13]=n>>>16&255,r[14]=n>>>8&255,r[15]=n&255,r}var s=u;m.default=s},{"./validate.js":541}],532:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;m.default=f},{}],533:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=u;let f;const c=new Uint8Array(16);function u(){if(!f&&(f=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!f))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return f(c)}},{}],534:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;function f(t,n,r,i){switch(t){case 0:return n&r^~n&i;case 1:return n^r^i;case 2:return n&r^n&i^r&i;case 3:return n^r^i}}function c(t,n){return t<>>32-n}function u(t){const n=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const a=unescape(encodeURIComponent(t));t=[];for(let g=0;g>>0;S=y,y=w,w=c(h,30)>>>0,h=v,v=F}r[0]=r[0]+v>>>0,r[1]=r[1]+h>>>0,r[2]=r[2]+w>>>0,r[3]=r[3]+y>>>0,r[4]=r[4]+S>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}var s=u;m.default=s},{}],535:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=c(e("./validate.js"));function c(n){return n&&n.__esModule?n:{default:n}}const u=[];for(let n=0;n<256;++n)u.push((n+256).toString(16).substr(1));function s(n){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;const i=(u[n[r+0]]+u[n[r+1]]+u[n[r+2]]+u[n[r+3]]+"-"+u[n[r+4]]+u[n[r+5]]+"-"+u[n[r+6]]+u[n[r+7]]+"-"+u[n[r+8]]+u[n[r+9]]+"-"+u[n[r+10]]+u[n[r+11]]+u[n[r+12]]+u[n[r+13]]+u[n[r+14]]+u[n[r+15]]).toLowerCase();if(!(0,f.default)(i))throw TypeError("Stringified UUID is invalid");return i}var t=s;m.default=t},{"./validate.js":541}],536:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=u(e("./rng.js")),c=u(e("./stringify.js"));function u(l){return l&&l.__esModule?l:{default:l}}let s,t,n=0,r=0;function i(l,a,g){let v=a&&g||0;const h=a||new Array(16);l=l||{};let w=l.node||s,y=l.clockseq!==void 0?l.clockseq:t;if(w==null||y==null){const j=l.random||(l.rng||f.default)();w==null&&(w=s=[j[0]|1,j[1],j[2],j[3],j[4],j[5]]),y==null&&(y=t=(j[6]<<8|j[7])&16383)}let S=l.msecs!==void 0?l.msecs:Date.now(),E=l.nsecs!==void 0?l.nsecs:r+1;const I=S-n+(E-r)/1e4;if(I<0&&l.clockseq===void 0&&(y=y+1&16383),(I<0||S>n)&&l.nsecs===void 0&&(E=0),E>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");n=S,r=E,t=y,S+=122192928e5;const F=((S&268435455)*1e4+E)%4294967296;h[v++]=F>>>24&255,h[v++]=F>>>16&255,h[v++]=F>>>8&255,h[v++]=F&255;const B=S/4294967296*1e4&268435455;h[v++]=B>>>8&255,h[v++]=B&255,h[v++]=B>>>24&15|16,h[v++]=B>>>16&255,h[v++]=y>>>8|128,h[v++]=y&255;for(let j=0;j<6;++j)h[v+j]=w[j];return a||(0,c.default)(h)}var o=i;m.default=o},{"./rng.js":533,"./stringify.js":535}],537:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=u(e("./v35.js")),c=u(e("./md5.js"));function u(n){return n&&n.__esModule?n:{default:n}}var t=(0,f.default)("v3",48,c.default);m.default=t},{"./md5.js":529,"./v35.js":538}],538:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=r,m.URL=m.DNS=void 0;var f=u(e("./stringify.js")),c=u(e("./parse.js"));function u(i){return i&&i.__esModule?i:{default:i}}function s(i){i=unescape(encodeURIComponent(i));const o=[];for(let l=0;l=s&&o<=55295||o===c||o===u||o===f||o>=57344&&o<=65533||o>=65536&&o<=1114111}m.isChar=t;function n(o){return o===s||o===c||o===u||o===f}m.isS=n;function r(o){return o>=65&&o<=90||o>=97&&o<=122||o===58||o===95||o===8204||o===8205||o>=192&&o<=214||o>=216&&o<=246||o>=248&&o<=767||o>=880&&o<=893||o>=895&&o<=8191||o>=8304&&o<=8591||o>=11264&&o<=12271||o>=12289&&o<=55295||o>=63744&&o<=64975||o>=65008&&o<=65533||o>=65536&&o<=983039}m.isNameStartChar=r;function i(o){return r(o)||o>=48&&o<=57||o===45||o===46||o===183||o>=768&&o<=879||o>=8255&&o<=8256}m.isNameChar=i},{}],544:[function(e,d,m){/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */Object.defineProperty(m,"__esModule",{value:!0}),m.CHAR="-퟿-�𐀀-􏿿",m.RESTRICTED_CHAR="-\b\v\f--„†-Ÿ",m.S=` \r +`,m.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",m.NAME_CHAR="-"+m.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",m.CHAR_RE=new RegExp("^["+m.CHAR+"]$","u"),m.RESTRICTED_CHAR_RE=new RegExp("^["+m.RESTRICTED_CHAR+"]$","u"),m.S_RE=new RegExp("^["+m.S+"]+$","u"),m.NAME_START_CHAR_RE=new RegExp("^["+m.NAME_START_CHAR+"]$","u"),m.NAME_CHAR_RE=new RegExp("^["+m.NAME_CHAR+"]$","u"),m.NAME_RE=new RegExp("^["+m.NAME_START_CHAR+"]["+m.NAME_CHAR+"]*$","u"),m.NMTOKEN_RE=new RegExp("^["+m.NAME_CHAR+"]+$","u");var f=9,c=10,u=13,s=32;m.S_LIST=[s,c,u,f];function t(a){return a>=1&&a<=55295||a>=57344&&a<=65533||a>=65536&&a<=1114111}m.isChar=t;function n(a){return a>=1&&a<=8||a===11||a===12||a>=14&&a<=31||a>=127&&a<=132||a>=134&&a<=159}m.isRestrictedChar=n;function r(a){return a===9||a===10||a===13||a>31&&a<127||a===133||a>159&&a<=55295||a>=57344&&a<=65533||a>=65536&&a<=1114111}m.isCharAndNotRestricted=r;function i(a){return a===s||a===c||a===u||a===f}m.isS=i;function o(a){return a>=65&&a<=90||a>=97&&a<=122||a===58||a===95||a===8204||a===8205||a>=192&&a<=214||a>=216&&a<=246||a>=248&&a<=767||a>=880&&a<=893||a>=895&&a<=8191||a>=8304&&a<=8591||a>=11264&&a<=12271||a>=12289&&a<=55295||a>=63744&&a<=64975||a>=65008&&a<=65533||a>=65536&&a<=983039}m.isNameStartChar=o;function l(a){return o(a)||a>=48&&a<=57||a===45||a===46||a===183||a>=768&&a<=879||a>=8255&&a<=8256}m.isNameChar=l},{}],545:[function(e,d,m){/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */Object.defineProperty(m,"__esModule",{value:!0}),m.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",m.NC_NAME_CHAR="-"+m.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",m.NC_NAME_START_CHAR_RE=new RegExp("^["+m.NC_NAME_START_CHAR+"]$","u"),m.NC_NAME_CHAR_RE=new RegExp("^["+m.NC_NAME_CHAR+"]$","u"),m.NC_NAME_RE=new RegExp("^["+m.NC_NAME_START_CHAR+"]["+m.NC_NAME_CHAR+"]*$","u");function f(u){return u>=65&&u<=90||u===95||u>=97&&u<=122||u>=192&&u<=214||u>=216&&u<=246||u>=248&&u<=767||u>=880&&u<=893||u>=895&&u<=8191||u>=8204&&u<=8205||u>=8304&&u<=8591||u>=11264&&u<=12271||u>=12289&&u<=55295||u>=63744&&u<=64975||u>=65008&&u<=65533||u>=65536&&u<=983039}m.isNCNameStartChar=f;function c(u){return f(u)||u===45||u===46||u>=48&&u<=57||u===183||u>=768&&u<=879||u>=8255&&u<=8256}m.isNCNameChar=c},{}]},{},[15])(15)})})(_h);var Cv=_h.exports;function Ya(N){"@babel/helpers - typeof";return Ya=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(b){return typeof b}:function(b){return b&&typeof Symbol=="function"&&b.constructor===Symbol&&b!==Symbol.prototype?"symbol":typeof b},Ya(N)}var Tv=/^\s+/,Av=/\s+$/;function ut(N,b){if(N=N||"",b=b||{},N instanceof ut)return N;if(!(this instanceof ut))return new ut(N,b);var e=kv(N);this._originalInput=N,this._r=e.r,this._g=e.g,this._b=e.b,this._a=e.a,this._roundA=Math.round(100*this._a)/100,this._format=b.format||e.format,this._gradientType=b.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=e.ok}ut.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var b=this.toRgb();return(b.r*299+b.g*587+b.b*114)/1e3},getLuminance:function(){var b=this.toRgb(),e,d,m,f,c,u;return e=b.r/255,d=b.g/255,m=b.b/255,e<=.03928?f=e/12.92:f=Math.pow((e+.055)/1.055,2.4),d<=.03928?c=d/12.92:c=Math.pow((d+.055)/1.055,2.4),m<=.03928?u=m/12.92:u=Math.pow((m+.055)/1.055,2.4),.2126*f+.7152*c+.0722*u},setAlpha:function(b){return this._a=Sh(b),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var b=Jc(this._r,this._g,this._b);return{h:b.h*360,s:b.s,v:b.v,a:this._a}},toHsvString:function(){var b=Jc(this._r,this._g,this._b),e=Math.round(b.h*360),d=Math.round(b.s*100),m=Math.round(b.v*100);return this._a==1?"hsv("+e+", "+d+"%, "+m+"%)":"hsva("+e+", "+d+"%, "+m+"%, "+this._roundA+")"},toHsl:function(){var b=Zc(this._r,this._g,this._b);return{h:b.h*360,s:b.s,l:b.l,a:this._a}},toHslString:function(){var b=Zc(this._r,this._g,this._b),e=Math.round(b.h*360),d=Math.round(b.s*100),m=Math.round(b.l*100);return this._a==1?"hsl("+e+", "+d+"%, "+m+"%)":"hsla("+e+", "+d+"%, "+m+"%, "+this._roundA+")"},toHex:function(b){return Qc(this._r,this._g,this._b,b)},toHexString:function(b){return"#"+this.toHex(b)},toHex8:function(b){return Ov(this._r,this._g,this._b,this._a,b)},toHex8String:function(b){return"#"+this.toHex8(b)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(mr(this._r,255)*100)+"%",g:Math.round(mr(this._g,255)*100)+"%",b:Math.round(mr(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(mr(this._r,255)*100)+"%, "+Math.round(mr(this._g,255)*100)+"%, "+Math.round(mr(this._b,255)*100)+"%)":"rgba("+Math.round(mr(this._r,255)*100)+"%, "+Math.round(mr(this._g,255)*100)+"%, "+Math.round(mr(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:Xv[Qc(this._r,this._g,this._b,!0)]||!1},toFilter:function(b){var e="#"+qc(this._r,this._g,this._b,this._a),d=e,m=this._gradientType?"GradientType = 1, ":"";if(b){var f=ut(b);d="#"+qc(f._r,f._g,f._b,f._a)}return"progid:DXImageTransform.Microsoft.gradient("+m+"startColorstr="+e+",endColorstr="+d+")"},toString:function(b){var e=!!b;b=b||this._format;var d=!1,m=this._a<1&&this._a>=0,f=!e&&m&&(b==="hex"||b==="hex6"||b==="hex3"||b==="hex4"||b==="hex8"||b==="name");return f?b==="name"&&this._a===0?this.toName():this.toRgbString():(b==="rgb"&&(d=this.toRgbString()),b==="prgb"&&(d=this.toPercentageRgbString()),(b==="hex"||b==="hex6")&&(d=this.toHexString()),b==="hex3"&&(d=this.toHexString(!0)),b==="hex4"&&(d=this.toHex8String(!0)),b==="hex8"&&(d=this.toHex8String()),b==="name"&&(d=this.toName()),b==="hsl"&&(d=this.toHslString()),b==="hsv"&&(d=this.toHsvString()),d||this.toHexString())},clone:function(){return ut(this.toString())},_applyModification:function(b,e){var d=b.apply(null,[this].concat([].slice.call(e)));return this._r=d._r,this._g=d._g,this._b=d._b,this.setAlpha(d._a),this},lighten:function(){return this._applyModification(Dv,arguments)},brighten:function(){return this._applyModification(Bv,arguments)},darken:function(){return this._applyModification(Lv,arguments)},desaturate:function(){return this._applyModification(Fv,arguments)},saturate:function(){return this._applyModification(Pv,arguments)},greyscale:function(){return this._applyModification(Nv,arguments)},spin:function(){return this._applyModification(jv,arguments)},_applyCombination:function(b,e){return b.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(zv,arguments)},complement:function(){return this._applyCombination($v,arguments)},monochromatic:function(){return this._applyCombination(Uv,arguments)},splitcomplement:function(){return this._applyCombination(Hv,arguments)},triad:function(){return this._applyCombination(eh,[3])},tetrad:function(){return this._applyCombination(eh,[4])}};ut.fromRatio=function(N,b){if(Ya(N)=="object"){var e={};for(var d in N)N.hasOwnProperty(d)&&(d==="a"?e[d]=N[d]:e[d]=Xs(N[d]));N=e}return ut(N,b)};function kv(N){var b={r:0,g:0,b:0},e=1,d=null,m=null,f=null,c=!1,u=!1;return typeof N=="string"&&(N=Gv(N)),Ya(N)=="object"&&(si(N.r)&&si(N.g)&&si(N.b)?(b=Mv(N.r,N.g,N.b),c=!0,u=String(N.r).substr(-1)==="%"?"prgb":"rgb"):si(N.h)&&si(N.s)&&si(N.v)?(d=Xs(N.s),m=Xs(N.v),b=Iv(N.h,d,m),c=!0,u="hsv"):si(N.h)&&si(N.s)&&si(N.l)&&(d=Xs(N.s),f=Xs(N.l),b=Rv(N.h,d,f),c=!0,u="hsl"),N.hasOwnProperty("a")&&(e=N.a)),e=Sh(e),{ok:c,format:N.format||u,r:Math.min(255,Math.max(b.r,0)),g:Math.min(255,Math.max(b.g,0)),b:Math.min(255,Math.max(b.b,0)),a:e}}function Mv(N,b,e){return{r:mr(N,255)*255,g:mr(b,255)*255,b:mr(e,255)*255}}function Zc(N,b,e){N=mr(N,255),b=mr(b,255),e=mr(e,255);var d=Math.max(N,b,e),m=Math.min(N,b,e),f,c,u=(d+m)/2;if(d==m)f=c=0;else{var s=d-m;switch(c=u>.5?s/(2-d-m):s/(d+m),d){case N:f=(b-e)/s+(b1&&(r-=1),r<1/6?t+(n-t)*6*r:r<1/2?n:r<2/3?t+(n-t)*(2/3-r)*6:t}if(b===0)d=m=f=e;else{var u=e<.5?e*(1+b):e+b-e*b,s=2*e-u;d=c(s,u,N+1/3),m=c(s,u,N),f=c(s,u,N-1/3)}return{r:d*255,g:m*255,b:f*255}}function Jc(N,b,e){N=mr(N,255),b=mr(b,255),e=mr(e,255);var d=Math.max(N,b,e),m=Math.min(N,b,e),f,c,u=d,s=d-m;if(c=d===0?0:s/d,d==m)f=0;else{switch(d){case N:f=(b-e)/s+(b>1)+720)%360;--b;)d.h=(d.h+m)%360,f.push(ut(d));return f}function Uv(N,b){b=b||6;for(var e=ut(N).toHsv(),d=e.h,m=e.s,f=e.v,c=[],u=1/b;b--;)c.push(ut({h:d,s:m,v:f})),f=(f+u)%1;return c}ut.mix=function(N,b,e){e=e===0?0:e||50;var d=ut(N).toRgb(),m=ut(b).toRgb(),f=e/100,c={r:(m.r-d.r)*f+d.r,g:(m.g-d.g)*f+d.g,b:(m.b-d.b)*f+d.b,a:(m.a-d.a)*f+d.a};return ut(c)};ut.readability=function(N,b){var e=ut(N),d=ut(b);return(Math.max(e.getLuminance(),d.getLuminance())+.05)/(Math.min(e.getLuminance(),d.getLuminance())+.05)};ut.isReadable=function(N,b,e){var d=ut.readability(N,b),m,f;switch(f=!1,m=Yv(e),m.level+m.size){case"AAsmall":case"AAAlarge":f=d>=4.5;break;case"AAlarge":f=d>=3;break;case"AAAsmall":f=d>=7;break}return f};ut.mostReadable=function(N,b,e){var d=null,m=0,f,c,u,s;e=e||{},c=e.includeFallbackColors,u=e.level,s=e.size;for(var t=0;tm&&(m=f,d=ut(b[t]));return ut.isReadable(N,d,{level:u,size:s})||!c?d:(e.includeFallbackColors=!1,ut.mostReadable(N,["#fff","#000"],e))};var bf=ut.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},Xv=ut.hexNames=Wv(bf);function Wv(N){var b={};for(var e in N)N.hasOwnProperty(e)&&(b[N[e]]=e);return b}function Sh(N){return N=parseFloat(N),(isNaN(N)||N<0||N>1)&&(N=1),N}function mr(N,b){Vv(N)&&(N="100%");var e=Kv(N);return N=Math.min(b,Math.max(0,parseFloat(N))),e&&(N=parseInt(N*b,10)/100),Math.abs(N-b)<1e-6?1:N%b/parseFloat(b)}function Qa(N){return Math.min(1,Math.max(0,N))}function pn(N){return parseInt(N,16)}function Vv(N){return typeof N=="string"&&N.indexOf(".")!=-1&&parseFloat(N)===1}function Kv(N){return typeof N=="string"&&N.indexOf("%")!=-1}function Dn(N){return N.length==1?"0"+N:""+N}function Xs(N){return N<=1&&(N=N*100+"%"),N}function Eh(N){return Math.round(parseFloat(N)*255).toString(16)}function th(N){return pn(N)/255}var Nn=function(){var N="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",e="(?:"+b+")|(?:"+N+")",d="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?",m="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?";return{CSS_UNIT:new RegExp(e),rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+m),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+m),hsv:new RegExp("hsv"+d),hsva:new RegExp("hsva"+m),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function si(N){return!!Nn.CSS_UNIT.exec(N)}function Gv(N){N=N.replace(Tv,"").replace(Av,"").toLowerCase();var b=!1;if(bf[N])N=bf[N],b=!0;else if(N=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var e;return(e=Nn.rgb.exec(N))?{r:e[1],g:e[2],b:e[3]}:(e=Nn.rgba.exec(N))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=Nn.hsl.exec(N))?{h:e[1],s:e[2],l:e[3]}:(e=Nn.hsla.exec(N))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=Nn.hsv.exec(N))?{h:e[1],s:e[2],v:e[3]}:(e=Nn.hsva.exec(N))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=Nn.hex8.exec(N))?{r:pn(e[1]),g:pn(e[2]),b:pn(e[3]),a:th(e[4]),format:b?"name":"hex8"}:(e=Nn.hex6.exec(N))?{r:pn(e[1]),g:pn(e[2]),b:pn(e[3]),format:b?"name":"hex"}:(e=Nn.hex4.exec(N))?{r:pn(e[1]+""+e[1]),g:pn(e[2]+""+e[2]),b:pn(e[3]+""+e[3]),a:th(e[4]+""+e[4]),format:b?"name":"hex8"}:(e=Nn.hex3.exec(N))?{r:pn(e[1]+""+e[1]),g:pn(e[2]+""+e[2]),b:pn(e[3]+""+e[3]),format:b?"name":"hex"}:!1}function Yv(N){var b,e;return N=N||{level:"AA",size:"small"},b=(N.level||"AA").toUpperCase(),e=(N.size||"small").toLowerCase(),b!=="AA"&&b!=="AAA"&&(b="AA"),e!=="small"&&e!=="large"&&(e="small"),{level:b,size:e}}var Za={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */Za.exports;(function(N,b){(function(){var e,d="4.17.21",m=200,f="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",c="Expected a function",u="Invalid `variable` option passed into `_.template`",s="__lodash_hash_undefined__",t=500,n="__lodash_placeholder__",r=1,i=2,o=4,l=1,a=2,g=1,v=2,h=4,w=8,y=16,S=32,E=64,I=128,F=256,B=512,j=30,X="...",G=800,V=16,J=1,H=2,M=3,T=1/0,_=9007199254740991,A=17976931348623157e292,P=0/0,L=4294967295,$=L-1,R=L>>>1,k=[["ary",I],["bind",g],["bindKey",v],["curry",w],["curryRight",y],["flip",B],["partial",S],["partialRight",E],["rearg",F]],C="[object Arguments]",O="[object Array]",W="[object AsyncFunction]",ne="[object Boolean]",he="[object Date]",ue="[object DOMException]",Ae="[object Error]",pe="[object Function]",te="[object GeneratorFunction]",Z="[object Map]",q="[object Number]",de="[object Null]",ke="[object Object]",oe="[object Promise]",ie="[object Proxy]",Q="[object RegExp]",z="[object Set]",Y="[object String]",fe="[object Symbol]",we="[object Undefined]",U="[object WeakMap]",ve="[object WeakSet]",Se="[object ArrayBuffer]",ee="[object DataView]",se="[object Float32Array]",me="[object Float64Array]",Ee="[object Int8Array]",Ie="[object Int16Array]",Ce="[object Int32Array]",Fe="[object Uint8Array]",ze="[object Uint8ClampedArray]",je="[object Uint16Array]",ge="[object Uint32Array]",Me=/\b__p \+= '';/g,Be=/\b(__p \+=) '' \+/g,Xe=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ot=/&(?:amp|lt|gt|quot|#39);/g,ct=/[&<>"']/g,st=RegExp(ot.source),rt=RegExp(ct.source),bt=/<%-([\s\S]+?)%>/g,Qe=/<%([\s\S]+?)%>/g,et=/<%=([\s\S]+?)%>/g,_t=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ft=/^\w*$/,jt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,It=/[\\^$.*+?()[\]{}|]/g,ht=RegExp(It.source),Dt=/^\s+/,Ut=/\s/,wt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,er=/\{\n\/\* \[wrapped with (.+)\] \*/,Kt=/,? & /,pt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Gt=/[()=,{}\[\]\/\s]/,kt=/\\(\\)?/g,xt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,$t=/\w*$/,Qt=/^[-+]0x[0-9a-f]+$/i,mt=/^0b[01]+$/i,qt=/^\[object .+?Constructor\]$/,St=/^0o[0-7]+$/i,Tt=/^(?:0|[1-9]\d*)$/,be=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ne=/($^)/,Le=/['\n\r\u2028\u2029\\]/g,Je="\\ud800-\\udfff",at="\\u0300-\\u036f",Mt="\\ufe20-\\ufe2f",rr="\\u20d0-\\u20ff",vr=at+Mt+rr,Dr="\\u2700-\\u27bf",yr="a-z\\xdf-\\xf6\\xf8-\\xff",lr="\\xac\\xb1\\xd7\\xf7",rn="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",nn="\\u2000-\\u206f",ar=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Xr="A-Z\\xc0-\\xd6\\xd8-\\xde",Wr="\\ufe0e\\ufe0f",Vr=lr+rn+nn+ar,En="['’]",Vn="["+Je+"]",ji="["+Vr+"]",Kr="["+vr+"]",$i="\\d+",Kn="["+Dr+"]",_i="["+yr+"]",Si="[^"+Je+Vr+$i+Dr+yr+Xr+"]",fi="\\ud83c[\\udffb-\\udfff]",bs="(?:"+Kr+"|"+fi+")",Hi="[^"+Je+"]",Gn="(?:\\ud83c[\\udde6-\\uddff]){2}",li="[\\ud800-\\udbff][\\udc00-\\udfff]",Bn="["+Xr+"]",zi="\\u200d",Ei="(?:"+_i+"|"+Si+")",ci="(?:"+Bn+"|"+Si+")",Cn="(?:"+En+"(?:d|ll|m|re|s|t|ve))?",Ui="(?:"+En+"(?:D|LL|M|RE|S|T|VE))?",Xi=bs+"?",sn="["+Wr+"]?",vs="(?:"+zi+"(?:"+[Hi,Gn,li].join("|")+")"+sn+Xi+")*",Wi="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ys="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Vi=sn+Xi+vs,ws="(?:"+[Kn,Gn,li].join("|")+")"+Vi,mn="(?:"+[Hi+Kr+"?",Kr,Gn,li,Vn].join("|")+")",Ki=RegExp(En,"g"),xs=RegExp(Kr,"g"),an=RegExp(fi+"(?="+fi+")|"+mn+Vi,"g"),_s=RegExp([Bn+"?"+_i+"+"+Cn+"(?="+[ji,Bn,"$"].join("|")+")",ci+"+"+Ui+"(?="+[ji,Bn+Ei,"$"].join("|")+")",Bn+"?"+Ei+"+"+Cn,Bn+"+"+Ui,ys,Wi,$i,ws].join("|"),"g"),gn=RegExp("["+zi+Je+vr+Wr+"]"),bn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Gi=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Ci=-1,Zt={};Zt[se]=Zt[me]=Zt[Ee]=Zt[Ie]=Zt[Ce]=Zt[Fe]=Zt[ze]=Zt[je]=Zt[ge]=!0,Zt[C]=Zt[O]=Zt[Se]=Zt[ne]=Zt[ee]=Zt[he]=Zt[Ae]=Zt[pe]=Zt[Z]=Zt[q]=Zt[ke]=Zt[Q]=Zt[z]=Zt[Y]=Zt[U]=!1;var Yt={};Yt[C]=Yt[O]=Yt[Se]=Yt[ee]=Yt[ne]=Yt[he]=Yt[se]=Yt[me]=Yt[Ee]=Yt[Ie]=Yt[Ce]=Yt[Z]=Yt[q]=Yt[ke]=Yt[Q]=Yt[z]=Yt[Y]=Yt[fe]=Yt[Fe]=Yt[ze]=Yt[je]=Yt[ge]=!0,Yt[Ae]=Yt[pe]=Yt[U]=!1;var Yi={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Ss={"&":"&","<":"<",">":">",'"':""","'":"'"},Zi={"&":"&","<":"<",">":">",""":'"',"'":"'"},Ji={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ye=parseFloat,Re=parseInt,We=typeof Nt=="object"&&Nt&&Nt.Object===Object&&Nt,tt=typeof self=="object"&&self&&self.Object===Object&&self,Ct=We||tt||Function("return this")(),Et=b&&!b.nodeType&&b,Jt=Et&&!0&&N&&!N.nodeType&&N,nr=Jt&&Jt.exports===Et,cr=nr&&We.process,Ht=function(){try{var Oe=Jt&&Jt.require&&Jt.require("util").types;return Oe||cr&&cr.binding&&cr.binding("util")}catch{}}(),Tr=Ht&&Ht.isArrayBuffer,Ir=Ht&&Ht.isDate,pr=Ht&&Ht.isMap,Sr=Ht&&Ht.isRegExp,Ar=Ht&&Ht.isSet,on=Ht&&Ht.isTypedArray;function hr(Oe,Ue,He){switch(He.length){case 0:return Oe.call(Ue);case 1:return Oe.call(Ue,He[0]);case 2:return Oe.call(Ue,He[0],He[1]);case 3:return Oe.call(Ue,He[0],He[1],He[2])}return Oe.apply(Ue,He)}function Tn(Oe,Ue,He,it){for(var At=-1,tr=Oe==null?0:Oe.length;++At-1}function xe(Oe,Ue,He){for(var it=-1,At=Oe==null?0:Oe.length;++it-1;);return He}function If(Oe,Ue){for(var He=Oe.length;He--&&dr(Ue,Oe[He],0)>-1;);return He}function kh(Oe,Ue){for(var He=Oe.length,it=0;He--;)Oe[He]===Ue&&++it;return it}var Mh=Mn(Yi),Rh=Mn(Ss);function Ih(Oe){return"\\"+Ji[Oe]}function Oh(Oe,Ue){return Oe==null?e:Oe[Ue]}function qi(Oe){return gn.test(Oe)}function Fh(Oe){return bn.test(Oe)}function Ph(Oe){for(var Ue,He=[];!(Ue=Oe.next()).done;)He.push(Ue.value);return He}function to(Oe){var Ue=-1,He=Array(Oe.size);return Oe.forEach(function(it,At){He[++Ue]=[At,it]}),He}function Of(Oe,Ue){return function(He){return Oe(Ue(He))}}function ui(Oe,Ue){for(var He=-1,it=Oe.length,At=0,tr=[];++He-1}function xu(p,x){var D=this.__data__,K=la(D,p);return K<0?(++this.size,D.push([p,x])):D[K][1]=x,this}Zn.prototype.clear=bu,Zn.prototype.delete=vu,Zn.prototype.get=yu,Zn.prototype.has=wu,Zn.prototype.set=xu;function Jn(p){var x=-1,D=p==null?0:p.length;for(this.clear();++x=x?p:x)),p}function wn(p,x,D,K,re,ce){var _e,Te=x&r,Pe=x&i,Ve=x&o;if(D&&(_e=re?D(p,K,re,ce):D(p)),_e!==e)return _e;if(!gr(p))return p;var Ke=Rt(p);if(Ke){if(_e=Cd(p),!Te)return Yr(p,_e)}else{var Ye=Lr(p),qe=Ye==pe||Ye==te;if(vi(p))return pl(p,Te);if(Ye==ke||Ye==C||qe&&!re){if(_e=Pe||qe?{}:Fl(p),!Te)return Pe?pd(p,Bu(_e,p)):dd(p,Xf(_e,p))}else{if(!Yt[Ye])return re?p:{};_e=Td(p,Ye,Te)}}ce||(ce=new In);var lt=ce.get(p);if(lt)return lt;ce.set(p,_e),fc(p)?p.forEach(function(yt){_e.add(wn(yt,x,D,yt,p,ce))}):ac(p)&&p.forEach(function(yt,zt){_e.set(zt,wn(yt,x,D,zt,p,ce))});var vt=Ve?Pe?ko:Ao:Pe?Jr:Fr,Bt=Ke?e:vt(p);return Pr(Bt||p,function(yt,zt){Bt&&(zt=yt,yt=p[zt]),Is(_e,zt,wn(yt,x,D,zt,p,ce))}),_e}function Lu(p){var x=Fr(p);return function(D){return Wf(D,p,x)}}function Wf(p,x,D){var K=D.length;if(p==null)return!K;for(p=fr(p);K--;){var re=D[K],ce=x[re],_e=p[re];if(_e===e&&!(re in p)||!ce(_e))return!1}return!0}function Vf(p,x,D){if(typeof p!="function")throw new vn(c);return Ls(function(){p.apply(e,D)},x)}function Os(p,x,D,K){var re=-1,ce=ae,_e=!0,Te=p.length,Pe=[],Ve=x.length;if(!Te)return Pe;D&&(x=De(x,ln(D))),K?(ce=xe,_e=!1):x.length>=m&&(ce=Cs,_e=!1,x=new ki(x));e:for(;++rere?0:re+D),K=K===e||K>re?re:Pt(K),K<0&&(K+=re),K=D>K?0:cc(K);D0&&D(Te)?x>1?Nr(Te,x-1,D,K,re):Ge(re,Te):K||(re[re.length]=Te)}return re}var fo=wl(),Yf=wl(!0);function jn(p,x){return p&&fo(p,x,Fr)}function lo(p,x){return p&&Yf(p,x,Fr)}function ha(p,x){return Ln(x,function(D){return ri(p[D])})}function Ri(p,x){x=gi(x,p);for(var D=0,K=x.length;p!=null&&Dx}function Hu(p,x){return p!=null&&sr.call(p,x)}function zu(p,x){return p!=null&&x in fr(p)}function Uu(p,x,D){return p>=Br(x,D)&&p=120&&Ke.length>=120)?new ki(_e&&Ke):e}Ke=p[0];var Ye=-1,qe=Te[0];e:for(;++Ye-1;)Te!==p&&ra.call(Te,Pe,1),ra.call(p,Pe,1);return p}function al(p,x){for(var D=p?x.length:0,K=D-1;D--;){var re=x[D];if(D==K||re!==ce){var ce=re;ti(re)?ra.call(p,re,1):wo(p,re)}}return p}function bo(p,x){return p+sa($f()*(x-p+1))}function rd(p,x,D,K){for(var re=-1,ce=Rr(ia((x-p)/(D||1)),0),_e=He(ce);ce--;)_e[K?ce:++re]=p,p+=D;return _e}function vo(p,x){var D="";if(!p||x<1||x>_)return D;do x%2&&(D+=p),x=sa(x/2),x&&(p+=p);while(x);return D}function Lt(p,x){return No(Dl(p,x,Qr),p+"")}function nd(p){return Uf(cs(p))}function id(p,x){var D=cs(p);return _a(D,Mi(x,0,D.length))}function Ns(p,x,D,K){if(!gr(p))return p;x=gi(x,p);for(var re=-1,ce=x.length,_e=ce-1,Te=p;Te!=null&&++rere?0:re+x),D=D>re?re:D,D<0&&(D+=re),re=x>D?0:D-x>>>0,x>>>=0;for(var ce=He(re);++K>>1,_e=p[ce];_e!==null&&!hn(_e)&&(D?_e<=x:_e=m){var Ve=x?null:vd(p);if(Ve)return Gs(Ve);_e=!1,re=Cs,Pe=new ki}else Pe=x?[]:Te;e:for(;++K=K?p:xn(p,x,D)}var dl=Yh||function(p){return Ct.clearTimeout(p)};function pl(p,x){if(x)return p.slice();var D=p.length,K=Nf?Nf(D):new p.constructor(D);return p.copy(K),K}function Eo(p){var x=new p.constructor(p.byteLength);return new ea(x).set(new ea(p)),x}function ld(p,x){var D=x?Eo(p.buffer):p.buffer;return new p.constructor(D,p.byteOffset,p.byteLength)}function cd(p){var x=new p.constructor(p.source,$t.exec(p));return x.lastIndex=p.lastIndex,x}function hd(p){return Rs?fr(Rs.call(p)):{}}function ml(p,x){var D=x?Eo(p.buffer):p.buffer;return new p.constructor(D,p.byteOffset,p.length)}function gl(p,x){if(p!==x){var D=p!==e,K=p===null,re=p===p,ce=hn(p),_e=x!==e,Te=x===null,Pe=x===x,Ve=hn(x);if(!Te&&!Ve&&!ce&&p>x||ce&&_e&&Pe&&!Te&&!Ve||K&&_e&&Pe||!D&&Pe||!re)return 1;if(!K&&!ce&&!Ve&&p=Te)return Pe;var Ve=D[K];return Pe*(Ve=="desc"?-1:1)}}return p.index-x.index}function bl(p,x,D,K){for(var re=-1,ce=p.length,_e=D.length,Te=-1,Pe=x.length,Ve=Rr(ce-_e,0),Ke=He(Pe+Ve),Ye=!K;++Te1?D[re-1]:e,_e=re>2?D[2]:e;for(ce=p.length>3&&typeof ce=="function"?(re--,ce):e,_e&&zr(D[0],D[1],_e)&&(ce=re<3?e:ce,re=1),x=fr(x);++K-1?re[ce?x[_e]:_e]:e}}function Sl(p){return ei(function(x){var D=x.length,K=D,re=yn.prototype.thru;for(p&&x.reverse();K--;){var ce=x[K];if(typeof ce!="function")throw new vn(c);if(re&&!_e&&wa(ce)=="wrapper")var _e=new yn([],!0)}for(K=_e?K:D;++K1&&Vt.reverse(),Ke&&PeTe))return!1;var Ve=ce.get(p),Ke=ce.get(x);if(Ve&&Ke)return Ve==x&&Ke==p;var Ye=-1,qe=!0,lt=D&a?new ki:e;for(ce.set(p,x),ce.set(x,p);++Ye1?"& ":"")+x[K],x=x.join(D>2?", ":" "),p.replace(wt,`{ +/* [wrapped with `+x+`] */ +`)}function kd(p){return Rt(p)||Fi(p)||!!(Lf&&p&&p[Lf])}function ti(p,x){var D=typeof p;return x=x??_,!!x&&(D=="number"||D!="symbol"&&Tt.test(p))&&p>-1&&p%1==0&&p0){if(++x>=G)return arguments[0]}else x=0;return p.apply(e,arguments)}}function _a(p,x){var D=-1,K=p.length,re=K-1;for(x=x===e?K:x;++D1?p[x-1]:e;return D=typeof D=="function"?(p.pop(),D):e,Gl(p,D)});function Yl(p){var x=le(p);return x.__chain__=!0,x}function j0(p,x){return x(p),p}function Sa(p,x){return x(p)}var $0=ei(function(p){var x=p.length,D=x?p[0]:0,K=this.__wrapped__,re=function(ce){return oo(ce,p)};return x>1||this.__actions__.length||!(K instanceof Xt)||!ti(D)?this.thru(re):(K=K.slice(D,+D+(x?1:0)),K.__actions__.push({func:Sa,args:[re],thisArg:e}),new yn(K,this.__chain__).thru(function(ce){return x&&!ce.length&&ce.push(e),ce}))});function H0(){return Yl(this)}function z0(){return new yn(this.value(),this.__chain__)}function U0(){this.__values__===e&&(this.__values__=lc(this.value()));var p=this.__index__>=this.__values__.length,x=p?e:this.__values__[this.__index__++];return{done:p,value:x}}function X0(){return this}function W0(p){for(var x,D=this;D instanceof fa;){var K=zl(D);K.__index__=0,K.__values__=e,x?re.__wrapped__=K:x=K;var re=K;D=D.__wrapped__}return re.__wrapped__=p,x}function V0(){var p=this.__wrapped__;if(p instanceof Xt){var x=p;return this.__actions__.length&&(x=new Xt(this)),x=x.reverse(),x.__actions__.push({func:Sa,args:[Do],thisArg:e}),new yn(x,this.__chain__)}return this.thru(Do)}function K0(){return hl(this.__wrapped__,this.__actions__)}var G0=ma(function(p,x,D){sr.call(p,D)?++p[D]:Qn(p,D,1)});function Y0(p,x,D){var K=Rt(p)?Yn:ju;return D&&zr(p,x,D)&&(x=e),K(p,gt(x,3))}function Z0(p,x){var D=Rt(p)?Ln:Gf;return D(p,gt(x,3))}var J0=_l(Ul),Q0=_l(Xl);function q0(p,x){return Nr(Ea(p,x),1)}function ep(p,x){return Nr(Ea(p,x),T)}function tp(p,x,D){return D=D===e?1:Pt(D),Nr(Ea(p,x),D)}function Zl(p,x){var D=Rt(p)?Pr:pi;return D(p,gt(x,3))}function Jl(p,x){var D=Rt(p)?An:Kf;return D(p,gt(x,3))}var rp=ma(function(p,x,D){sr.call(p,D)?p[D].push(x):Qn(p,D,[x])});function np(p,x,D,K){p=Zr(p)?p:cs(p),D=D&&!K?Pt(D):0;var re=p.length;return D<0&&(D=Rr(re+D,0)),Ma(p)?D<=re&&p.indexOf(x,D)>-1:!!re&&dr(p,x,D)>-1}var ip=Lt(function(p,x,D){var K=-1,re=typeof x=="function",ce=Zr(p)?He(p.length):[];return pi(p,function(_e){ce[++K]=re?hr(x,_e,D):Fs(_e,x,D)}),ce}),sp=ma(function(p,x,D){Qn(p,D,x)});function Ea(p,x){var D=Rt(p)?De:el;return D(p,gt(x,3))}function ap(p,x,D,K){return p==null?[]:(Rt(x)||(x=x==null?[]:[x]),D=K?e:D,Rt(D)||(D=D==null?[]:[D]),il(p,x,D))}var op=ma(function(p,x,D){p[D?0:1].push(x)},function(){return[[],[]]});function fp(p,x,D){var K=Rt(p)?dt:Es,re=arguments.length<3;return K(p,gt(x,4),D,re,pi)}function lp(p,x,D){var K=Rt(p)?nt:Es,re=arguments.length<3;return K(p,gt(x,4),D,re,Kf)}function cp(p,x){var D=Rt(p)?Ln:Gf;return D(p,Aa(gt(x,3)))}function hp(p){var x=Rt(p)?Uf:nd;return x(p)}function up(p,x,D){(D?zr(p,x,D):x===e)?x=1:x=Pt(x);var K=Rt(p)?Pu:id;return K(p,x)}function dp(p){var x=Rt(p)?Nu:ad;return x(p)}function pp(p){if(p==null)return 0;if(Zr(p))return Ma(p)?es(p):p.length;var x=Lr(p);return x==Z||x==z?p.size:po(p).length}function mp(p,x,D){var K=Rt(p)?Ot:od;return D&&zr(p,x,D)&&(x=e),K(p,gt(x,3))}var gp=Lt(function(p,x){if(p==null)return[];var D=x.length;return D>1&&zr(p,x[0],x[1])?x=[]:D>2&&zr(x[0],x[1],x[2])&&(x=[x[0]]),il(p,Nr(x,1),[])}),Ca=Zh||function(){return Ct.Date.now()};function bp(p,x){if(typeof x!="function")throw new vn(c);return p=Pt(p),function(){if(--p<1)return x.apply(this,arguments)}}function Ql(p,x,D){return x=D?e:x,x=p&&x==null?p.length:x,qn(p,I,e,e,e,e,x)}function ql(p,x){var D;if(typeof x!="function")throw new vn(c);return p=Pt(p),function(){return--p>0&&(D=x.apply(this,arguments)),p<=1&&(x=e),D}}var Lo=Lt(function(p,x,D){var K=g;if(D.length){var re=ui(D,fs(Lo));K|=S}return qn(p,K,x,D,re)}),ec=Lt(function(p,x,D){var K=g|v;if(D.length){var re=ui(D,fs(ec));K|=S}return qn(x,K,p,D,re)});function tc(p,x,D){x=D?e:x;var K=qn(p,w,e,e,e,e,e,x);return K.placeholder=tc.placeholder,K}function rc(p,x,D){x=D?e:x;var K=qn(p,y,e,e,e,e,e,x);return K.placeholder=rc.placeholder,K}function nc(p,x,D){var K,re,ce,_e,Te,Pe,Ve=0,Ke=!1,Ye=!1,qe=!0;if(typeof p!="function")throw new vn(c);x=Sn(x)||0,gr(D)&&(Ke=!!D.leading,Ye="maxWait"in D,ce=Ye?Rr(Sn(D.maxWait)||0,x):ce,qe="trailing"in D?!!D.trailing:qe);function lt(xr){var Fn=K,ii=re;return K=re=e,Ve=xr,_e=p.apply(ii,Fn),_e}function vt(xr){return Ve=xr,Te=Ls(zt,x),Ke?lt(xr):_e}function Bt(xr){var Fn=xr-Pe,ii=xr-Ve,_c=x-Fn;return Ye?Br(_c,ce-ii):_c}function yt(xr){var Fn=xr-Pe,ii=xr-Ve;return Pe===e||Fn>=x||Fn<0||Ye&&ii>=ce}function zt(){var xr=Ca();if(yt(xr))return Vt(xr);Te=Ls(zt,Bt(xr))}function Vt(xr){return Te=e,qe&&K?lt(xr):(K=re=e,_e)}function un(){Te!==e&&dl(Te),Ve=0,K=Pe=re=Te=e}function Ur(){return Te===e?_e:Vt(Ca())}function dn(){var xr=Ca(),Fn=yt(xr);if(K=arguments,re=this,Pe=xr,Fn){if(Te===e)return vt(Pe);if(Ye)return dl(Te),Te=Ls(zt,x),lt(Pe)}return Te===e&&(Te=Ls(zt,x)),_e}return dn.cancel=un,dn.flush=Ur,dn}var vp=Lt(function(p,x){return Vf(p,1,x)}),yp=Lt(function(p,x,D){return Vf(p,Sn(x)||0,D)});function wp(p){return qn(p,B)}function Ta(p,x){if(typeof p!="function"||x!=null&&typeof x!="function")throw new vn(c);var D=function(){var K=arguments,re=x?x.apply(this,K):K[0],ce=D.cache;if(ce.has(re))return ce.get(re);var _e=p.apply(this,K);return D.cache=ce.set(re,_e)||ce,_e};return D.cache=new(Ta.Cache||Jn),D}Ta.Cache=Jn;function Aa(p){if(typeof p!="function")throw new vn(c);return function(){var x=arguments;switch(x.length){case 0:return!p.call(this);case 1:return!p.call(this,x[0]);case 2:return!p.call(this,x[0],x[1]);case 3:return!p.call(this,x[0],x[1],x[2])}return!p.apply(this,x)}}function xp(p){return ql(2,p)}var _p=fd(function(p,x){x=x.length==1&&Rt(x[0])?De(x[0],ln(gt())):De(Nr(x,1),ln(gt()));var D=x.length;return Lt(function(K){for(var re=-1,ce=Br(K.length,D);++re=x}),Fi=Jf(function(){return arguments}())?Jf:function(p){return br(p)&&sr.call(p,"callee")&&!Bf.call(p,"callee")},Rt=He.isArray,Bp=Tr?ln(Tr):Wu;function Zr(p){return p!=null&&ka(p.length)&&!ri(p)}function wr(p){return br(p)&&Zr(p)}function Lp(p){return p===!0||p===!1||br(p)&&Hr(p)==ne}var vi=Qh||Zo,jp=Ir?ln(Ir):Vu;function $p(p){return br(p)&&p.nodeType===1&&!js(p)}function Hp(p){if(p==null)return!0;if(Zr(p)&&(Rt(p)||typeof p=="string"||typeof p.splice=="function"||vi(p)||ls(p)||Fi(p)))return!p.length;var x=Lr(p);if(x==Z||x==z)return!p.size;if(Bs(p))return!po(p).length;for(var D in p)if(sr.call(p,D))return!1;return!0}function zp(p,x){return Ps(p,x)}function Up(p,x,D){D=typeof D=="function"?D:e;var K=D?D(p,x):e;return K===e?Ps(p,x,e,D):!!K}function $o(p){if(!br(p))return!1;var x=Hr(p);return x==Ae||x==ue||typeof p.message=="string"&&typeof p.name=="string"&&!js(p)}function Xp(p){return typeof p=="number"&&jf(p)}function ri(p){if(!gr(p))return!1;var x=Hr(p);return x==pe||x==te||x==W||x==ie}function sc(p){return typeof p=="number"&&p==Pt(p)}function ka(p){return typeof p=="number"&&p>-1&&p%1==0&&p<=_}function gr(p){var x=typeof p;return p!=null&&(x=="object"||x=="function")}function br(p){return p!=null&&typeof p=="object"}var ac=pr?ln(pr):Gu;function Wp(p,x){return p===x||uo(p,x,Ro(x))}function Vp(p,x,D){return D=typeof D=="function"?D:e,uo(p,x,Ro(x),D)}function Kp(p){return oc(p)&&p!=+p}function Gp(p){if(Id(p))throw new At(f);return Qf(p)}function Yp(p){return p===null}function Zp(p){return p==null}function oc(p){return typeof p=="number"||br(p)&&Hr(p)==q}function js(p){if(!br(p)||Hr(p)!=ke)return!1;var x=ta(p);if(x===null)return!0;var D=sr.call(x,"constructor")&&x.constructor;return typeof D=="function"&&D instanceof D&&Js.call(D)==Vh}var Ho=Sr?ln(Sr):Yu;function Jp(p){return sc(p)&&p>=-_&&p<=_}var fc=Ar?ln(Ar):Zu;function Ma(p){return typeof p=="string"||!Rt(p)&&br(p)&&Hr(p)==Y}function hn(p){return typeof p=="symbol"||br(p)&&Hr(p)==fe}var ls=on?ln(on):Ju;function Qp(p){return p===e}function qp(p){return br(p)&&Lr(p)==U}function em(p){return br(p)&&Hr(p)==ve}var tm=ya(mo),rm=ya(function(p,x){return p<=x});function lc(p){if(!p)return[];if(Zr(p))return Ma(p)?Rn(p):Yr(p);if(Ts&&p[Ts])return Ph(p[Ts]());var x=Lr(p),D=x==Z?to:x==z?Gs:cs;return D(p)}function ni(p){if(!p)return p===0?p:0;if(p=Sn(p),p===T||p===-T){var x=p<0?-1:1;return x*A}return p===p?p:0}function Pt(p){var x=ni(p),D=x%1;return x===x?D?x-D:x:0}function cc(p){return p?Mi(Pt(p),0,L):0}function Sn(p){if(typeof p=="number")return p;if(hn(p))return P;if(gr(p)){var x=typeof p.valueOf=="function"?p.valueOf():p;p=gr(x)?x+"":x}if(typeof p!="string")return p===0?p:+p;p=Mf(p);var D=mt.test(p);return D||St.test(p)?Re(p.slice(2),D?2:8):Qt.test(p)?P:+p}function hc(p){return $n(p,Jr(p))}function nm(p){return p?Mi(Pt(p),-_,_):p===0?p:0}function ir(p){return p==null?"":cn(p)}var im=as(function(p,x){if(Bs(x)||Zr(x)){$n(x,Fr(x),p);return}for(var D in x)sr.call(x,D)&&Is(p,D,x[D])}),uc=as(function(p,x){$n(x,Jr(x),p)}),Ra=as(function(p,x,D,K){$n(x,Jr(x),p,K)}),sm=as(function(p,x,D,K){$n(x,Fr(x),p,K)}),am=ei(oo);function om(p,x){var D=ss(p);return x==null?D:Xf(D,x)}var fm=Lt(function(p,x){p=fr(p);var D=-1,K=x.length,re=K>2?x[2]:e;for(re&&zr(x[0],x[1],re)&&(K=1);++D1),ce}),$n(p,ko(p),D),K&&(D=wn(D,r|i|o,yd));for(var re=x.length;re--;)wo(D,x[re]);return D});function Tm(p,x){return pc(p,Aa(gt(x)))}var Am=ei(function(p,x){return p==null?{}:ed(p,x)});function pc(p,x){if(p==null)return{};var D=De(ko(p),function(K){return[K]});return x=gt(x),sl(p,D,function(K,re){return x(K,re[0])})}function km(p,x,D){x=gi(x,p);var K=-1,re=x.length;for(re||(re=1,p=e);++Kx){var K=p;p=x,x=K}if(D||p%1||x%1){var re=$f();return Br(p+re*(x-p+ye("1e-"+((re+"").length-1))),x)}return bo(p,x)}var jm=os(function(p,x,D){return x=x.toLowerCase(),p+(D?bc(x):x)});function bc(p){return Xo(ir(p).toLowerCase())}function vc(p){return p=ir(p),p&&p.replace(be,Mh).replace(xs,"")}function $m(p,x,D){p=ir(p),x=cn(x);var K=p.length;D=D===e?K:Mi(Pt(D),0,K);var re=D;return D-=x.length,D>=0&&p.slice(D,re)==x}function Hm(p){return p=ir(p),p&&rt.test(p)?p.replace(ct,Rh):p}function zm(p){return p=ir(p),p&&ht.test(p)?p.replace(It,"\\$&"):p}var Um=os(function(p,x,D){return p+(D?"-":"")+x.toLowerCase()}),Xm=os(function(p,x,D){return p+(D?" ":"")+x.toLowerCase()}),Wm=xl("toLowerCase");function Vm(p,x,D){p=ir(p),x=Pt(x);var K=x?es(p):0;if(!x||K>=x)return p;var re=(x-K)/2;return va(sa(re),D)+p+va(ia(re),D)}function Km(p,x,D){p=ir(p),x=Pt(x);var K=x?es(p):0;return x&&K>>0,D?(p=ir(p),p&&(typeof x=="string"||x!=null&&!Ho(x))&&(x=cn(x),!x&&qi(p))?bi(Rn(p),0,D):p.split(x,D)):[]}var e1=os(function(p,x,D){return p+(D?" ":"")+Xo(x)});function t1(p,x,D){return p=ir(p),D=D==null?0:Mi(Pt(D),0,p.length),x=cn(x),p.slice(D,D+x.length)==x}function r1(p,x,D){var K=le.templateSettings;D&&zr(p,x,D)&&(x=e),p=ir(p),x=Ra({},x,K,kl);var re=Ra({},x.imports,K.imports,kl),ce=Fr(re),_e=eo(re,ce),Te,Pe,Ve=0,Ke=x.interpolate||Ne,Ye="__p += '",qe=ro((x.escape||Ne).source+"|"+Ke.source+"|"+(Ke===et?xt:Ne).source+"|"+(x.evaluate||Ne).source+"|$","g"),lt="//# sourceURL="+(sr.call(x,"sourceURL")?(x.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Ci+"]")+` +`;p.replace(qe,function(yt,zt,Vt,un,Ur,dn){return Vt||(Vt=un),Ye+=p.slice(Ve,dn).replace(Le,Ih),zt&&(Te=!0,Ye+=`' + +__e(`+zt+`) + +'`),Ur&&(Pe=!0,Ye+=`'; +`+Ur+`; +__p += '`),Vt&&(Ye+=`' + +((__t = (`+Vt+`)) == null ? '' : __t) + +'`),Ve=dn+yt.length,yt}),Ye+=`'; +`;var vt=sr.call(x,"variable")&&x.variable;if(!vt)Ye=`with (obj) { +`+Ye+` +} +`;else if(Gt.test(vt))throw new At(u);Ye=(Pe?Ye.replace(Me,""):Ye).replace(Be,"$1").replace(Xe,"$1;"),Ye="function("+(vt||"obj")+`) { +`+(vt?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(Te?", __e = _.escape":"")+(Pe?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+Ye+`return __p +}`;var Bt=wc(function(){return tr(ce,lt+"return "+Ye).apply(e,_e)});if(Bt.source=Ye,$o(Bt))throw Bt;return Bt}function n1(p){return ir(p).toLowerCase()}function i1(p){return ir(p).toUpperCase()}function s1(p,x,D){if(p=ir(p),p&&(D||x===e))return Mf(p);if(!p||!(x=cn(x)))return p;var K=Rn(p),re=Rn(x),ce=Rf(K,re),_e=If(K,re)+1;return bi(K,ce,_e).join("")}function a1(p,x,D){if(p=ir(p),p&&(D||x===e))return p.slice(0,Ff(p)+1);if(!p||!(x=cn(x)))return p;var K=Rn(p),re=If(K,Rn(x))+1;return bi(K,0,re).join("")}function o1(p,x,D){if(p=ir(p),p&&(D||x===e))return p.replace(Dt,"");if(!p||!(x=cn(x)))return p;var K=Rn(p),re=Rf(K,Rn(x));return bi(K,re).join("")}function f1(p,x){var D=j,K=X;if(gr(x)){var re="separator"in x?x.separator:re;D="length"in x?Pt(x.length):D,K="omission"in x?cn(x.omission):K}p=ir(p);var ce=p.length;if(qi(p)){var _e=Rn(p);ce=_e.length}if(D>=ce)return p;var Te=D-es(K);if(Te<1)return K;var Pe=_e?bi(_e,0,Te).join(""):p.slice(0,Te);if(re===e)return Pe+K;if(_e&&(Te+=Pe.length-Te),Ho(re)){if(p.slice(Te).search(re)){var Ve,Ke=Pe;for(re.global||(re=ro(re.source,ir($t.exec(re))+"g")),re.lastIndex=0;Ve=re.exec(Ke);)var Ye=Ve.index;Pe=Pe.slice(0,Ye===e?Te:Ye)}}else if(p.indexOf(cn(re),Te)!=Te){var qe=Pe.lastIndexOf(re);qe>-1&&(Pe=Pe.slice(0,qe))}return Pe+K}function l1(p){return p=ir(p),p&&st.test(p)?p.replace(ot,Lh):p}var c1=os(function(p,x,D){return p+(D?" ":"")+x.toUpperCase()}),Xo=xl("toUpperCase");function yc(p,x,D){return p=ir(p),x=D?e:x,x===e?Fh(p)?Hh(p):Er(p):p.match(x)||[]}var wc=Lt(function(p,x){try{return hr(p,e,x)}catch(D){return $o(D)?D:new At(D)}}),h1=ei(function(p,x){return Pr(x,function(D){D=Hn(D),Qn(p,D,Lo(p[D],p))}),p});function u1(p){var x=p==null?0:p.length,D=gt();return p=x?De(p,function(K){if(typeof K[1]!="function")throw new vn(c);return[D(K[0]),K[1]]}):[],Lt(function(K){for(var re=-1;++re_)return[];var D=L,K=Br(p,L);x=gt(x),p-=L;for(var re=qa(K,x);++D0||x<0)?new Xt(D):(p<0?D=D.takeRight(-p):p&&(D=D.drop(p)),x!==e&&(x=Pt(x),D=x<0?D.dropRight(-x):D.take(x-p)),D)},Xt.prototype.takeRightWhile=function(p){return this.reverse().takeWhile(p).reverse()},Xt.prototype.toArray=function(){return this.take(L)},jn(Xt.prototype,function(p,x){var D=/^(?:filter|find|map|reject)|While$/.test(x),K=/^(?:head|last)$/.test(x),re=le[K?"take"+(x=="last"?"Right":""):x],ce=K||/^find/.test(x);re&&(le.prototype[x]=function(){var _e=this.__wrapped__,Te=K?[1]:arguments,Pe=_e instanceof Xt,Ve=Te[0],Ke=Pe||Rt(_e),Ye=function(zt){var Vt=re.apply(le,Ge([zt],Te));return K&&qe?Vt[0]:Vt};Ke&&D&&typeof Ve=="function"&&Ve.length!=1&&(Pe=Ke=!1);var qe=this.__chain__,lt=!!this.__actions__.length,vt=ce&&!qe,Bt=Pe&&!lt;if(!ce&&Ke){_e=Bt?_e:new Xt(this);var yt=p.apply(_e,Te);return yt.__actions__.push({func:Sa,args:[Ye],thisArg:e}),new yn(yt,qe)}return vt&&Bt?p.apply(this,Te):(yt=this.thru(Ye),vt?K?yt.value()[0]:yt.value():yt)})}),Pr(["pop","push","shift","sort","splice","unshift"],function(p){var x=Ys[p],D=/^(?:push|sort|unshift)$/.test(p)?"tap":"thru",K=/^(?:pop|shift)$/.test(p);le.prototype[p]=function(){var re=arguments;if(K&&!this.__chain__){var ce=this.value();return x.apply(Rt(ce)?ce:[],re)}return this[D](function(_e){return x.apply(Rt(_e)?_e:[],re)})}}),jn(Xt.prototype,function(p,x){var D=le[x];if(D){var K=D.name+"";sr.call(is,K)||(is[K]=[]),is[K].push({name:x,func:D})}}),is[ga(e,v).name]=[{name:"wrapper",func:e}],Xt.prototype.clone=lu,Xt.prototype.reverse=cu,Xt.prototype.value=hu,le.prototype.at=$0,le.prototype.chain=H0,le.prototype.commit=z0,le.prototype.next=U0,le.prototype.plant=W0,le.prototype.reverse=V0,le.prototype.toJSON=le.prototype.valueOf=le.prototype.value=K0,le.prototype.first=le.prototype.head,Ts&&(le.prototype[Ts]=X0),le},ts=zh();Jt?((Jt.exports=ts)._=ts,Et._=ts):Ct._=ts}).call(Nt)})(Za,Za.exports);var kf=Za.exports;function Ch(N){N=N.replace("#","");for(var b=N.match(/../g),e=0;e<3;e++)b[e]=parseInt(b[e],16);return b}function Th(N,b,e){for(var d=[N.toString(16),b.toString(16),e.toString(16)],m=0;m<3;m++)d[m].length==1&&(d[m]="0"+d[m]);return"#"+d.join("")}function Zv(N,b){for(var e=Ch(N),d=0;d<3;d++)e[d]=Math.floor(e[d]*(1-b));return Th(e[0],e[1],e[2])}function Jv(N,b){for(var e=Ch(N),d=0;d<3;d++)e[d]=Math.floor((255-e[d])*b+e[d]);return Th(e[0],e[1],e[2])}const rf=["#FFFFFF","#000000","#BFBFBF","#323232","#4472C4","#ED7D31","#A5A5A5","#FFC000","#5B9BD5","#71AD47"],nf=["#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#800000","#008000","#000080","#808000","#800080","#008080","#C0C0C0","#808080","#9999FF","#993366","#FFFFCC","#CCFFFF","#660066","#FF8080","#0066CC","#CCCCFF","#000080","#FF00FF","#FFFF00","#00FFFF","#800080","#800000","#008080","#0000FF","#00CCFF","#CCFFFF","#CCFFCC","#FFFF99","#99CCFF","#FF99CC","#CC99FF","#FFCC99","#3366FF","#33CCCC","#99CC00","#FFCC00","#FF9900","#FF6600","#666699","#969696","#003366","#339966","#003300","#333300","#993300","#993366","#333399","#333333","#FFFFFF"];let Qv=80,qv=24;function gy(N,b={}){return ey(Z1(N),b)}function ey(N,b){return new Promise(function(e,d){const m=new XMLHttpRequest;m.open(b.method||"GET",N,!0),m.responseType=b.responseType||"arraybuffer",m.onload=function(){m.status===200?e(m.response):d(m.status)},m.onerror=function(){d(m.status)},m.withCredentials=b.withCredentials||!1,b.headers&&Object.keys(b.headers).forEach(function(f){m.setRequestHeader(f,b.headers[f])}),m.send(b.body)})}function by(N){try{return new Cv.Workbook().xlsx.load(N)}catch(b){return console.warn(b),Promise.reject(b)}}function ty(N,b,e){for(let d=0;d<(N.columns||[]).length;d++)b.cols[d.toString()]={},N.columns[d].width?b.cols[d.toString()].width=N.columns[d].width*6+(e.widthOffset||0):b.cols[d.toString()].width=Qv+(e.widthOffset||0);b.cols.len=Math.max(Object.keys(b.cols).length,e.minColLength||0)}function ry(N){let{numFmt:b,value:e,type:d}=N;switch(d){case 2:try{if(N.style.numFmt){if(N.style.numFmt.endsWith("%")){let m=N.style.numFmt.match(/\.(\d+)%/);return m?(e*100).toFixed(m[1].length)+"%":e*100+"%"}else if(/0(\.0+)?/.test(N.style.numFmt)){let m="";if(N.style.numFmt.startsWith("$")?m="$":N.style.numFmt.startsWith('"¥')&&(m="¥"),e===0&&N.style.numFmt.startsWith("_"))return"-";let f=N.style.numFmt.match(/0\.(0+)(_|;|$)/);f?f=f[1].length:f=0;let c=e.toFixed(f)+"";if(N.style.numFmt.includes("#,##")){c=c.split(".");let u=c[0].split("").reverse(),s=[];for(let t=0;t9?"#C7C9CC":typeof b>"u"?rf[N]:b>0?Jv(rf[N],b):Zv(rf[N],Math.abs(b))}function ny(N){N.style=kf.cloneDeep(N.style);let b=null;N.style.fill&&N.style.fill.fgColor&&(N.style.fill.fgColor.argb?b=sf(N.style.fill.fgColor.argb):N.style.fill.fgColor.hasOwnProperty("theme")?b=af(N.style.fill.fgColor.theme,N.style.fill.fgColor.tint):N.style.fill.fgColor.indexed?b=nf[N.style.fill.fgColor.indexed]||"#C7C9CC":b="#C7C9CC"),b&&(N.style.bgcolor=b);let e=null;if(N.style.font&&N.style.font.color&&(N.style.font.color.argb?e=sf(N.style.font.color.argb):N.style.font.color.hasOwnProperty("theme")?e=af(N.style.font.color.theme,N.style.font.color.tint):N.style.font.color.indexed?e=nf[N.style.font.color.indexed]||"#000000":e="#000000"),e&&(N.style.color=e),N.style.alignment&&(N.style.alignment.horizontal&&(N.style.align=N.style.alignment.horizontal),N.style.alignment.vertical&&(N.style.valign=N.style.alignment.vertical)),N.style.alignment&&N.style.alignment.wrapText&&(N.style.textwrap=!0),N.style.border){let d={};Object.keys(N.style.border).forEach(m=>{let f=N.style.border[m],c="#000000";typeof f.color=="string"?c=f.color:f.color&&(f.color.argb?c=sf(f.color.argb):f.color.hasOwnProperty("theme")?c=af(f.color.theme,f.color.tint):f.color.indexed&&(c=nf[f.color.indexed])),d[m]=[f.style||"thin",c]}),N.style.border2={...N.style.border},N.style.border=d}return N.style}function vy(N,b){let e=[],d=[];return N.eachSheet(m=>{d.push(m);let f={name:m.name,styles:[],rows:{},cols:{},merges:[],media:[]},c=[];for(let s in m._merges){f.merges.push(m._merges[s].shortRange);let t={};t.startAddress=m._merges[s].tl,t.endAddress=m._merges[s].br,t.YRange=m._merges[s].model.bottom-m._merges[s].model.top,t.XRange=m._merges[s].model.right-m._merges[s].model.left,c.push(t)}ty(m,f,b),(m._rows||[]).forEach((s,t)=>{f.rows[t]={cells:{}},s.height?f.rows[t].height=s.height+(b.heightOffset||0):f.rows[t].height=qv+(b.heightOffset||0),(s._cells||[]).forEach((n,r)=>{f.rows[t].cells[r]={};let i=kf.find(c,function(o){return o.startAddress==n._address});i&&n.master.address!=i.startAddress||(i&&(f.rows[t].cells[r].merge=[i.YRange,i.XRange]),f.rows[t].cells[r].text=ry(n),f.styles.push(ny(n)),f.rows[t].cells[r].style=f.styles.length-1)})}),f._media&&(f.media=f._media);let u=Object.keys(f.rows);f.rows.len=Math.max(+u[u.length-1]+1,b.hasOwnProperty("minRowLength")?b.minRowLength:100),e.push(f)}),N._worksheets=d,{workbookData:e,workbookSource:N,medias:N.media||[]}}let $a=[];function yy(N,b,e,d,m={}){e&&e._media.length&&e._media.forEach(f=>{let{imageId:c,range:u,type:s}=f;if(s==="image"){let t=iy(e,u,d,m);sy(N,c,b[c],t)}})}let Ha=60,za=25,of=80,ff=24,Un=window.devicePixelRatio;function iy(N,b,e,d){var E,I,F,B,j,X,G,V,J,H,M,T,_,A;let{widthOffset:m,heightOffset:f}=d,{tl:c={},br:u={}}=b,{nativeCol:s,nativeColOff:t,nativeRow:n,nativeRowOff:r}=c,i=Ha,o=za;for(let P=0;P{let f=0,c=0,u=m.width,s=m.height,t=d.x,n=d.y,r=d.width,i=d.height,o=r/u,l=i/s;if(t{console.error(m)})}function ay(N,b){return new Promise((e,d)=>{if($a[N])return e($a[N]);const{buffer:m}=b.buffer;let f=new Blob([m],{type:"image/"+b.extension}),c=URL.createObjectURL(f),u=new Image;u.src=c,u.onload=function(){e(u),$a[N]=u},u.onerror=function(s){d(s)}})}function xy(N){if(N){let b=N.querySelectorAll("input");for(let e of b)e&&!e.readOnly&&(e.readOnly=!0);document.activeElement&&document.activeElement.blur()}}export{Sv as S,yy as a,by as b,wy as c,gy as g,kf as l,xy as r,vy as t}; diff --git a/examples/dist/assets/index-58cbfcf0.js b/examples/dist/assets/index-58cbfcf0.js new file mode 100644 index 0000000..7b64c2e --- /dev/null +++ b/examples/dist/assets/index-58cbfcf0.js @@ -0,0 +1,121 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(a){if(a.ep)return;a.ep=!0;const o=n(a);fetch(a.href,o)}})();function Ip(t,e){const n=Object.create(null),r=t.split(",");for(let a=0;a!!n[a.toLowerCase()]:a=>!!n[a]}function _p(t){if(bt(t)){const e={};for(let n=0;n{if(n){const r=n.split(a5);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e}function Np(t){let e="";if(un(t))e=t;else if(bt(t))for(let n=0;n{},s5=()=>!1,c5=/^on[^a-z]/,Xc=t=>c5.test(t),$p=t=>t.startsWith("onUpdate:"),pn=Object.assign,Ap=(t,e)=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)},d5=Object.prototype.hasOwnProperty,Tt=(t,e)=>d5.call(t,e),bt=Array.isArray,Sl=t=>Qc(t)==="[object Map]",f5=t=>Qc(t)==="[object Set]",St=t=>typeof t=="function",un=t=>typeof t=="string",Rp=t=>typeof t=="symbol",Gt=t=>t!==null&&typeof t=="object",Zw=t=>Gt(t)&&St(t.then)&&St(t.catch),v5=Object.prototype.toString,Qc=t=>v5.call(t),h5=t=>Qc(t).slice(8,-1),p5=t=>Qc(t)==="[object Object]",Dp=t=>un(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,Ss=Ip(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Zc=t=>{const e=Object.create(null);return n=>e[n]||(e[n]=t(n))},g5=/-(\w)/g,Ln=Zc(t=>t.replace(g5,(e,n)=>n?n.toUpperCase():"")),m5=/\B([A-Z])/g,Li=Zc(t=>t.replace(m5,"-$1").toLowerCase()),Jc=Zc(t=>t.charAt(0).toUpperCase()+t.slice(1)),yf=Zc(t=>t?`on${Jc(t)}`:""),Wl=(t,e)=>!Object.is(t,e),bf=(t,e)=>{for(let n=0;n{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:n})},Fp=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let K0;const y5=()=>K0||(K0=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Yn;class b5{constructor(e=!1){this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Yn,!e&&Yn&&(this.index=(Yn.scopes||(Yn.scopes=[])).push(this)-1)}run(e){if(this.active){const n=Yn;try{return Yn=this,e()}finally{Yn=n}}}on(){Yn=this}off(){Yn=this.parent}stop(e){if(this.active){let n,r;for(n=0,r=this.effects.length;n{const e=new Set(t);return e.w=0,e.n=0,e},Jw=t=>(t.w&za)>0,eS=t=>(t.n&za)>0,S5=({deps:t})=>{if(t.length)for(let e=0;e{const{deps:e}=t;if(e.length){let n=0;for(let r=0;r{(d==="length"||d>=u)&&l.push(s)})}else switch(n!==void 0&&l.push(i.get(n)),e){case"add":bt(t)?Dp(n)&&l.push(i.get("length")):(l.push(i.get(Po)),Sl(t)&&l.push(i.get(zv)));break;case"delete":bt(t)||(l.push(i.get(Po)),Sl(t)&&l.push(i.get(zv)));break;case"set":Sl(t)&&l.push(i.get(Po));break}if(l.length===1)l[0]&&Wv(l[0]);else{const u=[];for(const s of l)s&&u.push(...s);Wv(Lp(u))}}function Wv(t,e){const n=bt(t)?t:[...t];for(const r of n)r.computed&&z0(r);for(const r of n)r.computed||z0(r)}function z0(t,e){(t!==gr||t.allowRecurse)&&(t.scheduler?t.scheduler():t.run())}const k5=Ip("__proto__,__v_isRef,__isVue"),rS=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(Rp)),O5=jp(),T5=jp(!1,!0),E5=jp(!0),W0=M5();function M5(){const t={};return["includes","indexOf","lastIndexOf"].forEach(e=>{t[e]=function(...n){const r=rt(this);for(let o=0,i=this.length;o{t[e]=function(...n){Bi();const r=rt(this)[e].apply(this,n);return ji(),r}}),t}function jp(t=!1,e=!1){return function(r,a,o){if(a==="__v_isReactive")return!t;if(a==="__v_isReadonly")return t;if(a==="__v_isShallow")return e;if(a==="__v_raw"&&o===(t?e?W5:uS:e?lS:iS).get(r))return r;const i=bt(r);if(!t&&i&&Tt(W0,a))return Reflect.get(W0,a,o);const l=Reflect.get(r,a,o);return(Rp(a)?rS.has(a):k5(a))||(t||Xn(r,"get",a),e)?l:vn(l)?i&&Dp(a)?l:l.value:Gt(l)?t?cS(l):xt(l):l}}const I5=aS(),_5=aS(!0);function aS(t=!1){return function(n,r,a,o){let i=n[r];if(Si(i)&&vn(i)&&!vn(a))return!1;if(!t&&(!ic(a)&&!Si(a)&&(i=rt(i),a=rt(a)),!bt(n)&&vn(i)&&!vn(a)))return i.value=a,!0;const l=bt(n)&&Dp(r)?Number(r)t,ed=t=>Reflect.getPrototypeOf(t);function Lu(t,e,n=!1,r=!1){t=t.__v_raw;const a=rt(t),o=rt(e);n||(e!==o&&Xn(a,"get",e),Xn(a,"get",o));const{has:i}=ed(a),l=r?Vp:n?zp:Ul;if(i.call(a,e))return l(t.get(e));if(i.call(a,o))return l(t.get(o));t!==a&&t.get(e)}function Bu(t,e=!1){const n=this.__v_raw,r=rt(n),a=rt(t);return e||(t!==a&&Xn(r,"has",t),Xn(r,"has",a)),t===a?n.has(t):n.has(t)||n.has(a)}function ju(t,e=!1){return t=t.__v_raw,!e&&Xn(rt(t),"iterate",Po),Reflect.get(t,"size",t)}function U0(t){t=rt(t);const e=rt(this);return ed(e).has.call(e,t)||(e.add(t),va(e,"add",t,t)),this}function Y0(t,e){e=rt(e);const n=rt(this),{has:r,get:a}=ed(n);let o=r.call(n,t);o||(t=rt(t),o=r.call(n,t));const i=a.call(n,t);return n.set(t,e),o?Wl(e,i)&&va(n,"set",t,e):va(n,"add",t,e),this}function G0(t){const e=rt(this),{has:n,get:r}=ed(e);let a=n.call(e,t);a||(t=rt(t),a=n.call(e,t)),r&&r.call(e,t);const o=e.delete(t);return a&&va(e,"delete",t,void 0),o}function q0(){const t=rt(this),e=t.size!==0,n=t.clear();return e&&va(t,"clear",void 0,void 0),n}function Vu(t,e){return function(r,a){const o=this,i=o.__v_raw,l=rt(i),u=e?Vp:t?zp:Ul;return!t&&Xn(l,"iterate",Po),i.forEach((s,d)=>r.call(a,u(s),u(d),o))}}function Ku(t,e,n){return function(...r){const a=this.__v_raw,o=rt(a),i=Sl(o),l=t==="entries"||t===Symbol.iterator&&i,u=t==="keys"&&i,s=a[t](...r),d=n?Vp:e?zp:Ul;return!e&&Xn(o,"iterate",u?zv:Po),{next(){const{value:c,done:f}=s.next();return f?{value:c,done:f}:{value:l?[d(c[0]),d(c[1])]:d(c),done:f}},[Symbol.iterator](){return this}}}}function wa(t){return function(...e){return t==="delete"?!1:this}}function F5(){const t={get(o){return Lu(this,o)},get size(){return ju(this)},has:Bu,add:U0,set:Y0,delete:G0,clear:q0,forEach:Vu(!1,!1)},e={get(o){return Lu(this,o,!1,!0)},get size(){return ju(this)},has:Bu,add:U0,set:Y0,delete:G0,clear:q0,forEach:Vu(!1,!0)},n={get(o){return Lu(this,o,!0)},get size(){return ju(this,!0)},has(o){return Bu.call(this,o,!0)},add:wa("add"),set:wa("set"),delete:wa("delete"),clear:wa("clear"),forEach:Vu(!0,!1)},r={get(o){return Lu(this,o,!0,!0)},get size(){return ju(this,!0)},has(o){return Bu.call(this,o,!0)},add:wa("add"),set:wa("set"),delete:wa("delete"),clear:wa("clear"),forEach:Vu(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{t[o]=Ku(o,!1,!1),n[o]=Ku(o,!0,!1),e[o]=Ku(o,!1,!0),r[o]=Ku(o,!0,!0)}),[t,n,e,r]}const[L5,B5,j5,V5]=F5();function Kp(t,e){const n=e?t?V5:j5:t?B5:L5;return(r,a,o)=>a==="__v_isReactive"?!t:a==="__v_isReadonly"?t:a==="__v_raw"?r:Reflect.get(Tt(n,a)&&a in r?n:r,a,o)}const K5={get:Kp(!1,!1)},H5={get:Kp(!1,!0)},z5={get:Kp(!0,!1)},iS=new WeakMap,lS=new WeakMap,uS=new WeakMap,W5=new WeakMap;function U5(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Y5(t){return t.__v_skip||!Object.isExtensible(t)?0:U5(h5(t))}function xt(t){return Si(t)?t:Hp(t,!1,oS,K5,iS)}function sS(t){return Hp(t,!1,D5,H5,lS)}function cS(t){return Hp(t,!0,R5,z5,uS)}function Hp(t,e,n,r,a){if(!Gt(t)||t.__v_raw&&!(e&&t.__v_isReactive))return t;const o=a.get(t);if(o)return o;const i=Y5(t);if(i===0)return t;const l=new Proxy(t,i===2?r:n);return a.set(t,l),l}function di(t){return Si(t)?di(t.__v_raw):!!(t&&t.__v_isReactive)}function Si(t){return!!(t&&t.__v_isReadonly)}function ic(t){return!!(t&&t.__v_isShallow)}function dS(t){return di(t)||Si(t)}function rt(t){const e=t&&t.__v_raw;return e?rt(e):t}function fS(t){return oc(t,"__v_skip",!0),t}const Ul=t=>Gt(t)?xt(t):t,zp=t=>Gt(t)?cS(t):t;function vS(t){Ba&&gr&&(t=rt(t),nS(t.dep||(t.dep=Lp())))}function hS(t,e){t=rt(t),t.dep&&Wv(t.dep)}function vn(t){return!!(t&&t.__v_isRef===!0)}function Q(t){return pS(t,!1)}function dt(t){return pS(t,!0)}function pS(t,e){return vn(t)?t:new G5(t,e)}class G5{constructor(e,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?e:rt(e),this._value=n?e:Ul(e)}get value(){return vS(this),this._value}set value(e){const n=this.__v_isShallow||ic(e)||Si(e);e=n?e:rt(e),Wl(e,this._rawValue)&&(this._rawValue=e,this._value=n?e:Ul(e),hS(this))}}function tn(t){return vn(t)?t.value:t}const q5={get:(t,e,n)=>tn(Reflect.get(t,e,n)),set:(t,e,n,r)=>{const a=t[e];return vn(a)&&!vn(n)?(a.value=n,!0):Reflect.set(t,e,n,r)}};function gS(t){return di(t)?t:new Proxy(t,q5)}function ko(t){const e=bt(t)?new Array(t.length):{};for(const n in t)e[n]=Ke(t,n);return e}class X5{constructor(e,n,r){this._object=e,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const e=this._object[this._key];return e===void 0?this._defaultValue:e}set value(e){this._object[this._key]=e}}function Ke(t,e,n){const r=t[e];return vn(r)?r:new X5(t,e,n)}var mS;class Q5{constructor(e,n,r,a){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[mS]=!1,this._dirty=!0,this.effect=new Bp(e,()=>{this._dirty||(this._dirty=!0,hS(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!a,this.__v_isReadonly=r}get value(){const e=rt(this);return vS(e),(e._dirty||!e._cacheable)&&(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}mS="__v_isReadonly";function Z5(t,e,n=!1){let r,a;const o=St(t);return o?(r=t,a=br):(r=t.get,a=t.set),new Q5(r,a,o||!a,n)}function ja(t,e,n,r){let a;try{a=r?t(...r):t()}catch(o){td(o,e,n)}return a}function lr(t,e,n,r){if(St(t)){const o=ja(t,e,n,r);return o&&Zw(o)&&o.catch(i=>{td(i,e,n)}),o}const a=[];for(let o=0;o>>1;Gl(xn[r])Br&&xn.splice(e,1)}function nT(t){bt(t)?fi.push(...t):(!aa||!aa.includes(t,t.allowRecurse?vo+1:vo))&&fi.push(t),bS()}function X0(t,e=Yl?Br+1:0){for(;eGl(n)-Gl(r)),vo=0;vot.id==null?1/0:t.id,rT=(t,e)=>{const n=Gl(t)-Gl(e);if(n===0){if(t.pre&&!e.pre)return-1;if(e.pre&&!t.pre)return 1}return n};function xS(t){Uv=!1,Yl=!0,xn.sort(rT);const e=br;try{for(Br=0;Brun(v)?v.trim():v)),c&&(a=n.map(Fp))}let l,u=r[l=yf(e)]||r[l=yf(Ln(e))];!u&&o&&(u=r[l=yf(Li(e))]),u&&lr(u,t,6,a);const s=r[l+"Once"];if(s){if(!t.emitted)t.emitted={};else if(t.emitted[l])return;t.emitted[l]=!0,lr(s,t,6,a)}}function wS(t,e,n=!1){const r=e.emitsCache,a=r.get(t);if(a!==void 0)return a;const o=t.emits;let i={},l=!1;if(!St(t)){const u=s=>{const d=wS(s,e,!0);d&&(l=!0,pn(i,d))};!n&&e.mixins.length&&e.mixins.forEach(u),t.extends&&u(t.extends),t.mixins&&t.mixins.forEach(u)}return!o&&!l?(Gt(t)&&r.set(t,null),null):(bt(o)?o.forEach(u=>i[u]=null):pn(i,o),Gt(t)&&r.set(t,i),i)}function nd(t,e){return!t||!Xc(e)?!1:(e=e.slice(2).replace(/Once$/,""),Tt(t,e[0].toLowerCase()+e.slice(1))||Tt(t,Li(e))||Tt(t,e))}let mn=null,rd=null;function lc(t){const e=mn;return mn=t,rd=t&&t.type.__scopeId||null,e}function Kre(t){rd=t}function Hre(){rd=null}function pl(t,e=mn,n){if(!e||t._n)return t;const r=(...a)=>{r._d&&l1(-1);const o=lc(e);let i;try{i=t(...a)}finally{lc(o),r._d&&l1(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Cf(t){const{type:e,vnode:n,proxy:r,withProxy:a,props:o,propsOptions:[i],slots:l,attrs:u,emit:s,render:d,renderCache:c,data:f,setupState:v,ctx:g,inheritAttrs:p}=t;let m,b;const C=lc(t);try{if(n.shapeFlag&4){const w=a||r;m=Lr(d.call(w,w,c,o,v,f,g)),b=u}else{const w=e;m=Lr(w.length>1?w(o,{attrs:u,slots:l,emit:s}):w(o,null)),b=e.props?u:oT(u)}}catch(w){Tl.length=0,td(w,t,1),m=h(qn)}let x=m;if(b&&p!==!1){const w=Object.keys(b),{shapeFlag:P}=x;w.length&&P&7&&(i&&w.some($p)&&(b=iT(b,i)),x=Cn(x,b))}return n.dirs&&(x=Cn(x),x.dirs=x.dirs?x.dirs.concat(n.dirs):n.dirs),n.transition&&(x.transition=n.transition),m=x,lc(C),m}const oT=t=>{let e;for(const n in t)(n==="class"||n==="style"||Xc(n))&&((e||(e={}))[n]=t[n]);return e},iT=(t,e)=>{const n={};for(const r in t)(!$p(r)||!(r.slice(9)in e))&&(n[r]=t[r]);return n};function lT(t,e,n){const{props:r,children:a,component:o}=t,{props:i,children:l,patchFlag:u}=e,s=o.emitsOptions;if(e.dirs||e.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return r?Q0(r,i,s):!!i;if(u&8){const d=e.dynamicProps;for(let c=0;ct.__isSuspense;function cT(t,e){e&&e.pendingBranch?bt(t)?e.effects.push(...t):e.effects.push(t):nT(t)}function at(t,e){if(fn){let n=fn.provides;const r=fn.parent&&fn.parent.provides;r===n&&(n=fn.provides=Object.create(r)),n[t]=e}}function Ze(t,e,n=!1){const r=fn||mn;if(r){const a=r.parent==null?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides;if(a&&t in a)return a[t];if(arguments.length>1)return n&&St(e)?e.call(r.proxy):e}}function Je(t,e){return Yp(t,null,e)}const Hu={};function Se(t,e,n){return Yp(t,e,n)}function Yp(t,e,{immediate:n,deep:r,flush:a,onTrack:o,onTrigger:i}=Ht){const l=fn;let u,s=!1,d=!1;if(vn(t)?(u=()=>t.value,s=ic(t)):di(t)?(u=()=>t,r=!0):bt(t)?(d=!0,s=t.some(x=>di(x)||ic(x)),u=()=>t.map(x=>{if(vn(x))return x.value;if(di(x))return xo(x);if(St(x))return ja(x,l,2)})):St(t)?e?u=()=>ja(t,l,2):u=()=>{if(!(l&&l.isUnmounted))return c&&c(),lr(t,l,3,[f])}:u=br,e&&r){const x=u;u=()=>xo(x())}let c,f=x=>{c=b.onStop=()=>{ja(x,l,4)}},v;if(Zl)if(f=br,e?n&&lr(e,l,3,[u(),d?[]:void 0,f]):u(),a==="sync"){const x=n7();v=x.__watcherHandles||(x.__watcherHandles=[])}else return br;let g=d?new Array(t.length).fill(Hu):Hu;const p=()=>{if(b.active)if(e){const x=b.run();(r||s||(d?x.some((w,P)=>Wl(w,g[P])):Wl(x,g)))&&(c&&c(),lr(e,l,3,[x,g===Hu?void 0:d&&g[0]===Hu?[]:g,f]),g=x)}else b.run()};p.allowRecurse=!!e;let m;a==="sync"?m=p:a==="post"?m=()=>Rn(p,l&&l.suspense):(p.pre=!0,l&&(p.id=l.uid),m=()=>Up(p));const b=new Bp(u,m);e?n?p():g=b.run():a==="post"?Rn(b.run.bind(b),l&&l.suspense):b.run();const C=()=>{b.stop(),l&&l.scope&&Ap(l.scope.effects,b)};return v&&v.push(C),C}function dT(t,e,n){const r=this.proxy,a=un(t)?t.includes(".")?SS(r,t):()=>r[t]:t.bind(r,r);let o;St(e)?o=e:(o=e.handler,n=e);const i=fn;Pi(this);const l=Yp(a,o.bind(r),n);return i?Pi(i):Oo(),l}function SS(t,e){const n=e.split(".");return()=>{let r=t;for(let a=0;a{xo(n,e)});else if(p5(t))for(const n in t)xo(t[n],e);return t}function PS(){const t={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ge(()=>{t.isMounted=!0}),ut(()=>{t.isUnmounting=!0}),t}const tr=[Function,Array],fT={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:tr,onEnter:tr,onAfterEnter:tr,onEnterCancelled:tr,onBeforeLeave:tr,onLeave:tr,onAfterLeave:tr,onLeaveCancelled:tr,onBeforeAppear:tr,onAppear:tr,onAfterAppear:tr,onAppearCancelled:tr},setup(t,{slots:e}){const n=cn(),r=PS();let a;return()=>{const o=e.default&&Gp(e.default(),!0);if(!o||!o.length)return;let i=o[0];if(o.length>1){for(const p of o)if(p.type!==qn){i=p;break}}const l=rt(t),{mode:u}=l;if(r.isLeaving)return xf(i);const s=Z0(i);if(!s)return xf(i);const d=ql(s,l,r,n);Xl(s,d);const c=n.subTree,f=c&&Z0(c);let v=!1;const{getTransitionKey:g}=s.type;if(g){const p=g();a===void 0?a=p:p!==a&&(a=p,v=!0)}if(f&&f.type!==qn&&(!ho(s,f)||v)){const p=ql(f,l,r,n);if(Xl(f,p),u==="out-in")return r.isLeaving=!0,p.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},xf(i);u==="in-out"&&s.type!==qn&&(p.delayLeave=(m,b,C)=>{const x=OS(r,f);x[String(f.key)]=f,m._leaveCb=()=>{b(),m._leaveCb=void 0,delete d.delayedLeave},d.delayedLeave=C})}return i}}},kS=fT;function OS(t,e){const{leavingVNodes:n}=t;let r=n.get(e.type);return r||(r=Object.create(null),n.set(e.type,r)),r}function ql(t,e,n,r){const{appear:a,mode:o,persisted:i=!1,onBeforeEnter:l,onEnter:u,onAfterEnter:s,onEnterCancelled:d,onBeforeLeave:c,onLeave:f,onAfterLeave:v,onLeaveCancelled:g,onBeforeAppear:p,onAppear:m,onAfterAppear:b,onAppearCancelled:C}=e,x=String(t.key),w=OS(n,t),P=(T,O)=>{T&&lr(T,r,9,O)},S=(T,O)=>{const N=O[1];P(T,O),bt(T)?T.every($=>$.length<=1)&&N():T.length<=1&&N()},k={mode:o,persisted:i,beforeEnter(T){let O=l;if(!n.isMounted)if(a)O=p||l;else return;T._leaveCb&&T._leaveCb(!0);const N=w[x];N&&ho(t,N)&&N.el._leaveCb&&N.el._leaveCb(),P(O,[T])},enter(T){let O=u,N=s,$=d;if(!n.isMounted)if(a)O=m||u,N=b||s,$=C||d;else return;let I=!1;const E=T._enterCb=F=>{I||(I=!0,F?P($,[T]):P(N,[T]),k.delayedLeave&&k.delayedLeave(),T._enterCb=void 0)};O?S(O,[T,E]):E()},leave(T,O){const N=String(t.key);if(T._enterCb&&T._enterCb(!0),n.isUnmounting)return O();P(c,[T]);let $=!1;const I=T._leaveCb=E=>{$||($=!0,O(),E?P(g,[T]):P(v,[T]),T._leaveCb=void 0,w[N]===t&&delete w[N])};w[N]=t,f?S(f,[T,I]):I()},clone(T){return ql(T,e,n,r)}};return k}function xf(t){if(ad(t))return t=Cn(t),t.children=null,t}function Z0(t){return ad(t)?t.children?t.children[0]:void 0:t}function Xl(t,e){t.shapeFlag&6&&t.component?Xl(t.component.subTree,e):t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Gp(t,e=!1,n){let r=[],a=0;for(let o=0;o1)for(let o=0;o!!t.type.__asyncLoader,ad=t=>t.type.__isKeepAlive;function od(t,e){ES(t,"a",e)}function TS(t,e){ES(t,"da",e)}function ES(t,e,n=fn){const r=t.__wdc||(t.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return t()});if(id(e,r,n),n){let a=n.parent;for(;a&&a.parent;)ad(a.parent.vnode)&&vT(r,e,n,a),a=a.parent}}function vT(t,e,n,r){const a=id(e,t,r,!0);Sn(()=>{Ap(r[e],a)},n)}function id(t,e,n=fn,r=!1){if(n){const a=n[t]||(n[t]=[]),o=e.__weh||(e.__weh=(...i)=>{if(n.isUnmounted)return;Bi(),Pi(n);const l=lr(e,n,t,i);return Oo(),ji(),l});return r?a.unshift(o):a.push(o),o}}const pa=t=>(e,n=fn)=>(!Zl||t==="sp")&&id(t,(...r)=>e(...r),n),ld=pa("bm"),Ge=pa("m"),qp=pa("bu"),wn=pa("u"),ut=pa("bum"),Sn=pa("um"),hT=pa("sp"),pT=pa("rtg"),gT=pa("rtc");function mT(t,e=fn){id("ec",t,e)}function gn(t,e){const n=mn;if(n===null)return t;const r=sd(n)||n.proxy,a=t.dirs||(t.dirs=[]);for(let o=0;oe(i,l,void 0,o&&o[l]));else{const i=Object.keys(t);a=new Array(i.length);for(let l=0,u=i.length;lhn(e)?!(e.type===qn||e.type===et&&!_S(e.children)):!0)?t:null}const Yv=t=>t?zS(t)?sd(t)||t.proxy:Yv(t.parent):null,kl=pn(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>Yv(t.parent),$root:t=>Yv(t.root),$emit:t=>t.emit,$options:t=>Qp(t),$forceUpdate:t=>t.f||(t.f=()=>Up(t.update)),$nextTick:t=>t.n||(t.n=nt.bind(t.proxy)),$watch:t=>dT.bind(t)}),Sf=(t,e)=>t!==Ht&&!t.__isScriptSetup&&Tt(t,e),xT={get({_:t},e){const{ctx:n,setupState:r,data:a,props:o,accessCache:i,type:l,appContext:u}=t;let s;if(e[0]!=="$"){const v=i[e];if(v!==void 0)switch(v){case 1:return r[e];case 2:return a[e];case 4:return n[e];case 3:return o[e]}else{if(Sf(r,e))return i[e]=1,r[e];if(a!==Ht&&Tt(a,e))return i[e]=2,a[e];if((s=t.propsOptions[0])&&Tt(s,e))return i[e]=3,o[e];if(n!==Ht&&Tt(n,e))return i[e]=4,n[e];Gv&&(i[e]=0)}}const d=kl[e];let c,f;if(d)return e==="$attrs"&&Xn(t,"get",e),d(t);if((c=l.__cssModules)&&(c=c[e]))return c;if(n!==Ht&&Tt(n,e))return i[e]=4,n[e];if(f=u.config.globalProperties,Tt(f,e))return f[e]},set({_:t},e,n){const{data:r,setupState:a,ctx:o}=t;return Sf(a,e)?(a[e]=n,!0):r!==Ht&&Tt(r,e)?(r[e]=n,!0):Tt(t.props,e)||e[0]==="$"&&e.slice(1)in t?!1:(o[e]=n,!0)},has({_:{data:t,setupState:e,accessCache:n,ctx:r,appContext:a,propsOptions:o}},i){let l;return!!n[i]||t!==Ht&&Tt(t,i)||Sf(e,i)||(l=o[0])&&Tt(l,i)||Tt(r,i)||Tt(kl,i)||Tt(a.config.globalProperties,i)},defineProperty(t,e,n){return n.get!=null?t._.accessCache[e]=0:Tt(n,"value")&&this.set(t,e,n.value,null),Reflect.defineProperty(t,e,n)}};let Gv=!0;function wT(t){const e=Qp(t),n=t.proxy,r=t.ctx;Gv=!1,e.beforeCreate&&e1(e.beforeCreate,t,"bc");const{data:a,computed:o,methods:i,watch:l,provide:u,inject:s,created:d,beforeMount:c,mounted:f,beforeUpdate:v,updated:g,activated:p,deactivated:m,beforeDestroy:b,beforeUnmount:C,destroyed:x,unmounted:w,render:P,renderTracked:S,renderTriggered:k,errorCaptured:T,serverPrefetch:O,expose:N,inheritAttrs:$,components:I,directives:E,filters:F}=e;if(s&&ST(s,r,null,t.appContext.config.unwrapInjectedRef),i)for(const R in i){const _=i[R];St(_)&&(r[R]=_.bind(n))}if(a){const R=a.call(n,n);Gt(R)&&(t.data=xt(R))}if(Gv=!0,o)for(const R in o){const _=o[R],M=St(_)?_.bind(n,n):St(_.get)?_.get.bind(n,n):br,V=!St(_)&&St(_.set)?_.set.bind(n):br,B=L({get:M,set:V});Object.defineProperty(r,R,{enumerable:!0,configurable:!0,get:()=>B.value,set:U=>B.value=U})}if(l)for(const R in l)NS(l[R],r,n,R);if(u){const R=St(u)?u.call(n):u;Reflect.ownKeys(R).forEach(_=>{at(_,R[_])})}d&&e1(d,t,"c");function D(R,_){bt(_)?_.forEach(M=>R(M.bind(n))):_&&R(_.bind(n))}if(D(ld,c),D(Ge,f),D(qp,v),D(wn,g),D(od,p),D(TS,m),D(mT,T),D(gT,S),D(pT,k),D(ut,C),D(Sn,w),D(hT,O),bt(N))if(N.length){const R=t.exposed||(t.exposed={});N.forEach(_=>{Object.defineProperty(R,_,{get:()=>n[_],set:M=>n[_]=M})})}else t.exposed||(t.exposed={});P&&t.render===br&&(t.render=P),$!=null&&(t.inheritAttrs=$),I&&(t.components=I),E&&(t.directives=E)}function ST(t,e,n=br,r=!1){bt(t)&&(t=qv(t));for(const a in t){const o=t[a];let i;Gt(o)?"default"in o?i=Ze(o.from||a,o.default,!0):i=Ze(o.from||a):i=Ze(o),vn(i)&&r?Object.defineProperty(e,a,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):e[a]=i}}function e1(t,e,n){lr(bt(t)?t.map(r=>r.bind(e.proxy)):t.bind(e.proxy),e,n)}function NS(t,e,n,r){const a=r.includes(".")?SS(n,r):()=>n[r];if(un(t)){const o=e[t];St(o)&&Se(a,o)}else if(St(t))Se(a,t.bind(n));else if(Gt(t))if(bt(t))t.forEach(o=>NS(o,e,n,r));else{const o=St(t.handler)?t.handler.bind(n):e[t.handler];St(o)&&Se(a,o,t)}}function Qp(t){const e=t.type,{mixins:n,extends:r}=e,{mixins:a,optionsCache:o,config:{optionMergeStrategies:i}}=t.appContext,l=o.get(e);let u;return l?u=l:!a.length&&!n&&!r?u=e:(u={},a.length&&a.forEach(s=>uc(u,s,i,!0)),uc(u,e,i)),Gt(e)&&o.set(e,u),u}function uc(t,e,n,r=!1){const{mixins:a,extends:o}=e;o&&uc(t,o,n,!0),a&&a.forEach(i=>uc(t,i,n,!0));for(const i in e)if(!(r&&i==="expose")){const l=PT[i]||n&&n[i];t[i]=l?l(t[i],e[i]):e[i]}return t}const PT={data:t1,props:so,emits:so,methods:so,computed:so,beforeCreate:On,created:On,beforeMount:On,mounted:On,beforeUpdate:On,updated:On,beforeDestroy:On,beforeUnmount:On,destroyed:On,unmounted:On,activated:On,deactivated:On,errorCaptured:On,serverPrefetch:On,components:so,directives:so,watch:OT,provide:t1,inject:kT};function t1(t,e){return e?t?function(){return pn(St(t)?t.call(this,this):t,St(e)?e.call(this,this):e)}:e:t}function kT(t,e){return so(qv(t),qv(e))}function qv(t){if(bt(t)){const e={};for(let n=0;n0)&&!(i&16)){if(i&8){const d=t.vnode.dynamicProps;for(let c=0;c{u=!0;const[f,v]=AS(c,e,!0);pn(i,f),v&&l.push(...v)};!n&&e.mixins.length&&e.mixins.forEach(d),t.extends&&d(t.extends),t.mixins&&t.mixins.forEach(d)}if(!o&&!u)return Gt(t)&&r.set(t,ci),ci;if(bt(o))for(let d=0;d-1,v[1]=p<0||g-1||Tt(v,"default"))&&l.push(c)}}}const s=[i,l];return Gt(t)&&r.set(t,s),s}function n1(t){return t[0]!=="$"}function r1(t){const e=t&&t.toString().match(/^\s*function (\w+)/);return e?e[1]:t===null?"null":""}function a1(t,e){return r1(t)===r1(e)}function o1(t,e){return bt(e)?e.findIndex(n=>a1(n,t)):St(e)&&a1(e,t)?0:-1}const RS=t=>t[0]==="_"||t==="$stable",Zp=t=>bt(t)?t.map(Lr):[Lr(t)],MT=(t,e,n)=>{if(e._n)return e;const r=pl((...a)=>Zp(e(...a)),n);return r._c=!1,r},DS=(t,e,n)=>{const r=t._ctx;for(const a in t){if(RS(a))continue;const o=t[a];if(St(o))e[a]=MT(a,o,r);else if(o!=null){const i=Zp(o);e[a]=()=>i}}},FS=(t,e)=>{const n=Zp(e);t.slots.default=()=>n},IT=(t,e)=>{if(t.vnode.shapeFlag&32){const n=e._;n?(t.slots=rt(e),oc(e,"_",n)):DS(e,t.slots={})}else t.slots={},e&&FS(t,e);oc(t.slots,ud,1)},_T=(t,e,n)=>{const{vnode:r,slots:a}=t;let o=!0,i=Ht;if(r.shapeFlag&32){const l=e._;l?n&&l===1?o=!1:(pn(a,e),!n&&l===1&&delete a._):(o=!e.$stable,DS(e,a)),i=e}else e&&(FS(t,e),i={default:1});if(o)for(const l in a)!RS(l)&&!(l in i)&&delete a[l]};function LS(){return{app:null,config:{isNativeTag:s5,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let NT=0;function $T(t,e){return function(r,a=null){St(r)||(r=Object.assign({},r)),a!=null&&!Gt(a)&&(a=null);const o=LS(),i=new Set;let l=!1;const u=o.app={_uid:NT++,_component:r,_props:a,_container:null,_context:o,_instance:null,version:r7,get config(){return o.config},set config(s){},use(s,...d){return i.has(s)||(s&&St(s.install)?(i.add(s),s.install(u,...d)):St(s)&&(i.add(s),s(u,...d))),u},mixin(s){return o.mixins.includes(s)||o.mixins.push(s),u},component(s,d){return d?(o.components[s]=d,u):o.components[s]},directive(s,d){return d?(o.directives[s]=d,u):o.directives[s]},mount(s,d,c){if(!l){const f=h(r,a);return f.appContext=o,d&&e?e(f,s):t(f,s,c),l=!0,u._container=s,s.__vue_app__=u,sd(f.component)||f.component.proxy}},unmount(){l&&(t(null,u._container),delete u._container.__vue_app__)},provide(s,d){return o.provides[s]=d,u}};return u}}function Qv(t,e,n,r,a=!1){if(bt(t)){t.forEach((f,v)=>Qv(f,e&&(bt(e)?e[v]:e),n,r,a));return}if(Pl(r)&&!a)return;const o=r.shapeFlag&4?sd(r.component)||r.component.proxy:r.el,i=a?null:o,{i:l,r:u}=t,s=e&&e.r,d=l.refs===Ht?l.refs={}:l.refs,c=l.setupState;if(s!=null&&s!==u&&(un(s)?(d[s]=null,Tt(c,s)&&(c[s]=null)):vn(s)&&(s.value=null)),St(u))ja(u,l,12,[i,d]);else{const f=un(u),v=vn(u);if(f||v){const g=()=>{if(t.f){const p=f?Tt(c,u)?c[u]:d[u]:u.value;a?bt(p)&&Ap(p,o):bt(p)?p.includes(o)||p.push(o):f?(d[u]=[o],Tt(c,u)&&(c[u]=d[u])):(u.value=[o],t.k&&(d[t.k]=u.value))}else f?(d[u]=i,Tt(c,u)&&(c[u]=i)):v&&(u.value=i,t.k&&(d[t.k]=i))};i?(g.id=-1,Rn(g,n)):g()}}}const Rn=cT;function AT(t){return RT(t)}function RT(t,e){const n=y5();n.__VUE__=!0;const{insert:r,remove:a,patchProp:o,createElement:i,createText:l,createComment:u,setText:s,setElementText:d,parentNode:c,nextSibling:f,setScopeId:v=br,insertStaticContent:g}=t,p=(q,H,Z,ae=null,oe=null,ue=null,me=!1,se=null,ie=!!H.dynamicChildren)=>{if(q===H)return;q&&!ho(q,H)&&(ae=z(q),U(q,oe,ue,!0),q=null),H.patchFlag===-2&&(ie=!1,H.dynamicChildren=null);const{type:ne,ref:de,shapeFlag:ve}=H;switch(ne){case Ua:m(q,H,Z,ae);break;case qn:b(q,H,Z,ae);break;case Pf:q==null&&C(H,Z,ae,me);break;case et:I(q,H,Z,ae,oe,ue,me,se,ie);break;default:ve&1?P(q,H,Z,ae,oe,ue,me,se,ie):ve&6?E(q,H,Z,ae,oe,ue,me,se,ie):(ve&64||ve&128)&&ne.process(q,H,Z,ae,oe,ue,me,se,ie,J)}de!=null&&oe&&Qv(de,q&&q.ref,ue,H||q,!H)},m=(q,H,Z,ae)=>{if(q==null)r(H.el=l(H.children),Z,ae);else{const oe=H.el=q.el;H.children!==q.children&&s(oe,H.children)}},b=(q,H,Z,ae)=>{q==null?r(H.el=u(H.children||""),Z,ae):H.el=q.el},C=(q,H,Z,ae)=>{[q.el,q.anchor]=g(q.children,H,Z,ae,q.el,q.anchor)},x=({el:q,anchor:H},Z,ae)=>{let oe;for(;q&&q!==H;)oe=f(q),r(q,Z,ae),q=oe;r(H,Z,ae)},w=({el:q,anchor:H})=>{let Z;for(;q&&q!==H;)Z=f(q),a(q),q=Z;a(H)},P=(q,H,Z,ae,oe,ue,me,se,ie)=>{me=me||H.type==="svg",q==null?S(H,Z,ae,oe,ue,me,se,ie):O(q,H,oe,ue,me,se,ie)},S=(q,H,Z,ae,oe,ue,me,se)=>{let ie,ne;const{type:de,props:ve,shapeFlag:be,transition:Pe,dirs:$e}=q;if(ie=q.el=i(q.type,ue,ve&&ve.is,ve),be&8?d(ie,q.children):be&16&&T(q.children,ie,null,ae,oe,ue&&de!=="foreignObject",me,se),$e&&eo(q,null,ae,"created"),ve){for(const we in ve)we!=="value"&&!Ss(we)&&o(ie,we,null,ve[we],ue,q.children,ae,oe,X);"value"in ve&&o(ie,"value",null,ve.value),(ne=ve.onVnodeBeforeMount)&&Ar(ne,ae,q)}k(ie,q,q.scopeId,me,ae),$e&&eo(q,null,ae,"beforeMount");const De=(!oe||oe&&!oe.pendingBranch)&&Pe&&!Pe.persisted;De&&Pe.beforeEnter(ie),r(ie,H,Z),((ne=ve&&ve.onVnodeMounted)||De||$e)&&Rn(()=>{ne&&Ar(ne,ae,q),De&&Pe.enter(ie),$e&&eo(q,null,ae,"mounted")},oe)},k=(q,H,Z,ae,oe)=>{if(Z&&v(q,Z),ae)for(let ue=0;ue{for(let ne=ie;ne{const se=H.el=q.el;let{patchFlag:ie,dynamicChildren:ne,dirs:de}=H;ie|=q.patchFlag&16;const ve=q.props||Ht,be=H.props||Ht;let Pe;Z&&to(Z,!1),(Pe=be.onVnodeBeforeUpdate)&&Ar(Pe,Z,H,q),de&&eo(H,q,Z,"beforeUpdate"),Z&&to(Z,!0);const $e=oe&&H.type!=="foreignObject";if(ne?N(q.dynamicChildren,ne,se,Z,ae,$e,ue):me||_(q,H,se,null,Z,ae,$e,ue,!1),ie>0){if(ie&16)$(se,H,ve,be,Z,ae,oe);else if(ie&2&&ve.class!==be.class&&o(se,"class",null,be.class,oe),ie&4&&o(se,"style",ve.style,be.style,oe),ie&8){const De=H.dynamicProps;for(let we=0;we{Pe&&Ar(Pe,Z,H,q),de&&eo(H,q,Z,"updated")},ae)},N=(q,H,Z,ae,oe,ue,me)=>{for(let se=0;se{if(Z!==ae){if(Z!==Ht)for(const se in Z)!Ss(se)&&!(se in ae)&&o(q,se,Z[se],null,me,H.children,oe,ue,X);for(const se in ae){if(Ss(se))continue;const ie=ae[se],ne=Z[se];ie!==ne&&se!=="value"&&o(q,se,ne,ie,me,H.children,oe,ue,X)}"value"in ae&&o(q,"value",Z.value,ae.value)}},I=(q,H,Z,ae,oe,ue,me,se,ie)=>{const ne=H.el=q?q.el:l(""),de=H.anchor=q?q.anchor:l("");let{patchFlag:ve,dynamicChildren:be,slotScopeIds:Pe}=H;Pe&&(se=se?se.concat(Pe):Pe),q==null?(r(ne,Z,ae),r(de,Z,ae),T(H.children,Z,de,oe,ue,me,se,ie)):ve>0&&ve&64&&be&&q.dynamicChildren?(N(q.dynamicChildren,be,Z,oe,ue,me,se),(H.key!=null||oe&&H===oe.subTree)&&Jp(q,H,!0)):_(q,H,Z,de,oe,ue,me,se,ie)},E=(q,H,Z,ae,oe,ue,me,se,ie)=>{H.slotScopeIds=se,q==null?H.shapeFlag&512?oe.ctx.activate(H,Z,ae,me,ie):F(H,Z,ae,oe,ue,me,ie):j(q,H,ie)},F=(q,H,Z,ae,oe,ue,me)=>{const se=q.component=YT(q,ae,oe);if(ad(q)&&(se.ctx.renderer=J),GT(se),se.asyncDep){if(oe&&oe.registerDep(se,D),!q.el){const ie=se.subTree=h(qn);b(null,ie,H,Z)}return}D(se,q,H,Z,oe,ue,me)},j=(q,H,Z)=>{const ae=H.component=q.component;if(lT(q,H,Z))if(ae.asyncDep&&!ae.asyncResolved){R(ae,H,Z);return}else ae.next=H,tT(ae.update),ae.update();else H.el=q.el,ae.vnode=H},D=(q,H,Z,ae,oe,ue,me)=>{const se=()=>{if(q.isMounted){let{next:de,bu:ve,u:be,parent:Pe,vnode:$e}=q,De=de,we;to(q,!1),de?(de.el=$e.el,R(q,de,me)):de=$e,ve&&bf(ve),(we=de.props&&de.props.onVnodeBeforeUpdate)&&Ar(we,Pe,de,$e),to(q,!0);const he=Cf(q),Oe=q.subTree;q.subTree=he,p(Oe,he,c(Oe.el),z(Oe),q,oe,ue),de.el=he.el,De===null&&uT(q,he.el),be&&Rn(be,oe),(we=de.props&&de.props.onVnodeUpdated)&&Rn(()=>Ar(we,Pe,de,$e),oe)}else{let de;const{el:ve,props:be}=H,{bm:Pe,m:$e,parent:De}=q,we=Pl(H);if(to(q,!1),Pe&&bf(Pe),!we&&(de=be&&be.onVnodeBeforeMount)&&Ar(de,De,H),to(q,!0),ve&&re){const he=()=>{q.subTree=Cf(q),re(ve,q.subTree,q,oe,null)};we?H.type.__asyncLoader().then(()=>!q.isUnmounted&&he()):he()}else{const he=q.subTree=Cf(q);p(null,he,Z,ae,q,oe,ue),H.el=he.el}if($e&&Rn($e,oe),!we&&(de=be&&be.onVnodeMounted)){const he=H;Rn(()=>Ar(de,De,he),oe)}(H.shapeFlag&256||De&&Pl(De.vnode)&&De.vnode.shapeFlag&256)&&q.a&&Rn(q.a,oe),q.isMounted=!0,H=Z=ae=null}},ie=q.effect=new Bp(se,()=>Up(ne),q.scope),ne=q.update=()=>ie.run();ne.id=q.uid,to(q,!0),ne()},R=(q,H,Z)=>{H.component=q;const ae=q.vnode.props;q.vnode=H,q.next=null,ET(q,H.props,ae,Z),_T(q,H.children,Z),Bi(),X0(),ji()},_=(q,H,Z,ae,oe,ue,me,se,ie=!1)=>{const ne=q&&q.children,de=q?q.shapeFlag:0,ve=H.children,{patchFlag:be,shapeFlag:Pe}=H;if(be>0){if(be&128){V(ne,ve,Z,ae,oe,ue,me,se,ie);return}else if(be&256){M(ne,ve,Z,ae,oe,ue,me,se,ie);return}}Pe&8?(de&16&&X(ne,oe,ue),ve!==ne&&d(Z,ve)):de&16?Pe&16?V(ne,ve,Z,ae,oe,ue,me,se,ie):X(ne,oe,ue,!0):(de&8&&d(Z,""),Pe&16&&T(ve,Z,ae,oe,ue,me,se,ie))},M=(q,H,Z,ae,oe,ue,me,se,ie)=>{q=q||ci,H=H||ci;const ne=q.length,de=H.length,ve=Math.min(ne,de);let be;for(be=0;bede?X(q,oe,ue,!0,!1,ve):T(H,Z,ae,oe,ue,me,se,ie,ve)},V=(q,H,Z,ae,oe,ue,me,se,ie)=>{let ne=0;const de=H.length;let ve=q.length-1,be=de-1;for(;ne<=ve&&ne<=be;){const Pe=q[ne],$e=H[ne]=ie?Ia(H[ne]):Lr(H[ne]);if(ho(Pe,$e))p(Pe,$e,Z,null,oe,ue,me,se,ie);else break;ne++}for(;ne<=ve&&ne<=be;){const Pe=q[ve],$e=H[be]=ie?Ia(H[be]):Lr(H[be]);if(ho(Pe,$e))p(Pe,$e,Z,null,oe,ue,me,se,ie);else break;ve--,be--}if(ne>ve){if(ne<=be){const Pe=be+1,$e=Pebe)for(;ne<=ve;)U(q[ne],oe,ue,!0),ne++;else{const Pe=ne,$e=ne,De=new Map;for(ne=$e;ne<=be;ne++){const ge=H[ne]=ie?Ia(H[ne]):Lr(H[ne]);ge.key!=null&&De.set(ge.key,ne)}let we,he=0;const Oe=be-$e+1;let Me=!1,Ce=0;const fe=new Array(Oe);for(ne=0;ne=Oe){U(ge,oe,ue,!0);continue}let ke;if(ge.key!=null)ke=De.get(ge.key);else for(we=$e;we<=be;we++)if(fe[we-$e]===0&&ho(ge,H[we])){ke=we;break}ke===void 0?U(ge,oe,ue,!0):(fe[ke-$e]=ne+1,ke>=Ce?Ce=ke:Me=!0,p(ge,H[ke],Z,null,oe,ue,me,se,ie),he++)}const pe=Me?DT(fe):ci;for(we=pe.length-1,ne=Oe-1;ne>=0;ne--){const ge=$e+ne,ke=H[ge],_e=ge+1{const{el:ue,type:me,transition:se,children:ie,shapeFlag:ne}=q;if(ne&6){B(q.component.subTree,H,Z,ae);return}if(ne&128){q.suspense.move(H,Z,ae);return}if(ne&64){me.move(q,H,Z,J);return}if(me===et){r(ue,H,Z);for(let ve=0;vese.enter(ue),oe);else{const{leave:ve,delayLeave:be,afterLeave:Pe}=se,$e=()=>r(ue,H,Z),De=()=>{ve(ue,()=>{$e(),Pe&&Pe()})};be?be(ue,$e,De):De()}else r(ue,H,Z)},U=(q,H,Z,ae=!1,oe=!1)=>{const{type:ue,props:me,ref:se,children:ie,dynamicChildren:ne,shapeFlag:de,patchFlag:ve,dirs:be}=q;if(se!=null&&Qv(se,null,Z,q,!0),de&256){H.ctx.deactivate(q);return}const Pe=de&1&&be,$e=!Pl(q);let De;if($e&&(De=me&&me.onVnodeBeforeUnmount)&&Ar(De,H,q),de&6)W(q.component,Z,ae);else{if(de&128){q.suspense.unmount(Z,ae);return}Pe&&eo(q,null,H,"beforeUnmount"),de&64?q.type.remove(q,H,Z,oe,J,ae):ne&&(ue!==et||ve>0&&ve&64)?X(ne,H,Z,!1,!0):(ue===et&&ve&384||!oe&&de&16)&&X(ie,H,Z),ae&&Y(q)}($e&&(De=me&&me.onVnodeUnmounted)||Pe)&&Rn(()=>{De&&Ar(De,H,q),Pe&&eo(q,null,H,"unmounted")},Z)},Y=q=>{const{type:H,el:Z,anchor:ae,transition:oe}=q;if(H===et){K(Z,ae);return}if(H===Pf){w(q);return}const ue=()=>{a(Z),oe&&!oe.persisted&&oe.afterLeave&&oe.afterLeave()};if(q.shapeFlag&1&&oe&&!oe.persisted){const{leave:me,delayLeave:se}=oe,ie=()=>me(Z,ue);se?se(q.el,ue,ie):ie()}else ue()},K=(q,H)=>{let Z;for(;q!==H;)Z=f(q),a(q),q=Z;a(H)},W=(q,H,Z)=>{const{bum:ae,scope:oe,update:ue,subTree:me,um:se}=q;ae&&bf(ae),oe.stop(),ue&&(ue.active=!1,U(me,q,H,Z)),se&&Rn(se,H),Rn(()=>{q.isUnmounted=!0},H),H&&H.pendingBranch&&!H.isUnmounted&&q.asyncDep&&!q.asyncResolved&&q.suspenseId===H.pendingId&&(H.deps--,H.deps===0&&H.resolve())},X=(q,H,Z,ae=!1,oe=!1,ue=0)=>{for(let me=ue;meq.shapeFlag&6?z(q.component.subTree):q.shapeFlag&128?q.suspense.next():f(q.anchor||q.el),ee=(q,H,Z)=>{q==null?H._vnode&&U(H._vnode,null,null,!0):p(H._vnode||null,q,H,null,null,null,Z),X0(),CS(),H._vnode=q},J={p,um:U,m:B,r:Y,mt:F,mc:T,pc:_,pbc:N,n:z,o:t};let te,re;return e&&([te,re]=e(J)),{render:ee,hydrate:te,createApp:$T(ee,te)}}function to({effect:t,update:e},n){t.allowRecurse=e.allowRecurse=n}function Jp(t,e,n=!1){const r=t.children,a=e.children;if(bt(r)&&bt(a))for(let o=0;o>1,t[n[l]]0&&(e[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=e[i];return n}const FT=t=>t.__isTeleport,Ol=t=>t&&(t.disabled||t.disabled===""),i1=t=>typeof SVGElement<"u"&&t instanceof SVGElement,Zv=(t,e)=>{const n=t&&t.to;return un(n)?e?e(n):null:n},LT={__isTeleport:!0,process(t,e,n,r,a,o,i,l,u,s){const{mc:d,pc:c,pbc:f,o:{insert:v,querySelector:g,createText:p,createComment:m}}=s,b=Ol(e.props);let{shapeFlag:C,children:x,dynamicChildren:w}=e;if(t==null){const P=e.el=p(""),S=e.anchor=p("");v(P,n,r),v(S,n,r);const k=e.target=Zv(e.props,g),T=e.targetAnchor=p("");k&&(v(T,k),i=i||i1(k));const O=(N,$)=>{C&16&&d(x,N,$,a,o,i,l,u)};b?O(n,S):k&&O(k,T)}else{e.el=t.el;const P=e.anchor=t.anchor,S=e.target=t.target,k=e.targetAnchor=t.targetAnchor,T=Ol(t.props),O=T?n:S,N=T?P:k;if(i=i||i1(S),w?(f(t.dynamicChildren,w,O,a,o,i,l),Jp(t,e,!0)):u||c(t,e,O,N,a,o,i,l,!1),b)T||zu(e,n,P,s,1);else if((e.props&&e.props.to)!==(t.props&&t.props.to)){const $=e.target=Zv(e.props,g);$&&zu(e,$,null,s,0)}else T&&zu(e,S,k,s,1)}BS(e)},remove(t,e,n,r,{um:a,o:{remove:o}},i){const{shapeFlag:l,children:u,anchor:s,targetAnchor:d,target:c,props:f}=t;if(c&&o(d),(i||!Ol(f))&&(o(s),l&16))for(let v=0;v0?yr||ci:null,jT(),Ql>0&&yr&&yr.push(t),t}function VT(t,e,n,r,a,o){return jS(HS(t,e,n,r,a,o,!0))}function VS(t,e,n,r,a){return jS(h(t,e,n,r,a,!0))}function hn(t){return t?t.__v_isVNode===!0:!1}function ho(t,e){return t.type===e.type&&t.key===e.key}const ud="__vInternal",KS=({key:t})=>t??null,Ps=({ref:t,ref_key:e,ref_for:n})=>t!=null?un(t)||vn(t)||St(t)?{i:mn,r:t,k:e,f:!!n}:t:null;function HS(t,e=null,n=null,r=0,a=null,o=t===et?0:1,i=!1,l=!1){const u={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&KS(e),ref:e&&Ps(e),scopeId:rd,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:mn};return l?(ng(u,n),o&128&&t.normalize(u)):n&&(u.shapeFlag|=un(n)?8:16),Ql>0&&!i&&yr&&(u.patchFlag>0||o&6)&&u.patchFlag!==32&&yr.push(u),u}const h=KT;function KT(t,e=null,n=null,r=0,a=null,o=!1){if((!t||t===bT)&&(t=qn),hn(t)){const l=Cn(t,e,!0);return n&&ng(l,n),Ql>0&&!o&&yr&&(l.shapeFlag&6?yr[yr.indexOf(t)]=l:yr.push(l)),l.patchFlag|=-2,l}if(ZT(t)&&(t=t.__vccOpts),e){e=HT(e);let{class:l,style:u}=e;l&&!un(l)&&(e.class=Np(l)),Gt(u)&&(dS(u)&&!bt(u)&&(u=pn({},u)),e.style=_p(u))}const i=un(t)?1:sT(t)?128:FT(t)?64:Gt(t)?4:St(t)?2:0;return HS(t,e,n,r,a,i,o,!0)}function HT(t){return t?dS(t)||ud in t?pn({},t):t:null}function Cn(t,e,n=!1){const{props:r,ref:a,patchFlag:o,children:i}=t,l=e?zT(r||{},e):r;return{__v_isVNode:!0,__v_skip:!0,type:t.type,props:l,key:l&&KS(l),ref:e&&e.ref?n&&a?bt(a)?a.concat(Ps(e)):[a,Ps(e)]:Ps(e):a,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:i,target:t.target,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==et?o===-1?16:o|16:o,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:t.transition,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Cn(t.ssContent),ssFallback:t.ssFallback&&Cn(t.ssFallback),el:t.el,anchor:t.anchor,ctx:t.ctx}}function _n(t=" ",e=0){return h(Ua,null,t,e)}function Wre(t="",e=!1){return e?(tg(),VS(qn,null,t)):h(qn,null,t)}function Lr(t){return t==null||typeof t=="boolean"?h(qn):bt(t)?h(et,null,t.slice()):typeof t=="object"?Ia(t):h(Ua,null,String(t))}function Ia(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:Cn(t)}function ng(t,e){let n=0;const{shapeFlag:r}=t;if(e==null)e=null;else if(bt(e))n=16;else if(typeof e=="object")if(r&65){const a=e.default;a&&(a._c&&(a._d=!1),ng(t,a()),a._c&&(a._d=!0));return}else{n=32;const a=e._;!a&&!(ud in e)?e._ctx=mn:a===3&&mn&&(mn.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else St(e)?(e={default:e,_ctx:mn},n=32):(e=String(e),r&64?(n=16,e=[_n(e)]):n=8);t.children=e,t.shapeFlag|=n}function zT(...t){const e={};for(let n=0;nfn||mn,Pi=t=>{fn=t,t.scope.on()},Oo=()=>{fn&&fn.scope.off(),fn=null};function zS(t){return t.vnode.shapeFlag&4}let Zl=!1;function GT(t,e=!1){Zl=e;const{props:n,children:r}=t.vnode,a=zS(t);TT(t,n,a,e),IT(t,r);const o=a?qT(t,e):void 0;return Zl=!1,o}function qT(t,e){const n=t.type;t.accessCache=Object.create(null),t.proxy=fS(new Proxy(t.ctx,xT));const{setup:r}=n;if(r){const a=t.setupContext=r.length>1?US(t):null;Pi(t),Bi();const o=ja(r,t,0,[t.props,a]);if(ji(),Oo(),Zw(o)){if(o.then(Oo,Oo),e)return o.then(i=>{u1(t,i,e)}).catch(i=>{td(i,t,0)});t.asyncDep=o}else u1(t,o,e)}else WS(t,e)}function u1(t,e,n){St(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:Gt(e)&&(t.setupState=gS(e)),WS(t,n)}let s1;function WS(t,e,n){const r=t.type;if(!t.render){if(!e&&s1&&!r.render){const a=r.template||Qp(t).template;if(a){const{isCustomElement:o,compilerOptions:i}=t.appContext.config,{delimiters:l,compilerOptions:u}=r,s=pn(pn({isCustomElement:o,delimiters:l},i),u);r.render=s1(a,s)}}t.render=r.render||br}Pi(t),Bi(),wT(t),ji(),Oo()}function XT(t){return new Proxy(t.attrs,{get(e,n){return Xn(t,"get","$attrs"),e[n]}})}function US(t){const e=r=>{t.exposed=r||{}};let n;return{get attrs(){return n||(n=XT(t))},slots:t.slots,emit:t.emit,expose:e}}function sd(t){if(t.exposed)return t.exposeProxy||(t.exposeProxy=new Proxy(gS(fS(t.exposed)),{get(e,n){if(n in e)return e[n];if(n in kl)return kl[n](t)},has(e,n){return n in e||n in kl}}))}function QT(t,e=!0){return St(t)?t.displayName||t.name:t.name||e&&t.__name}function ZT(t){return St(t)&&"__vccOpts"in t}const L=(t,e)=>Z5(t,e,Zl);function JT(){return e7().attrs}function e7(){const t=cn();return t.setupContext||(t.setupContext=US(t))}function Jl(t,e,n){const r=arguments.length;return r===2?Gt(e)&&!bt(e)?hn(e)?h(t,null,[e]):h(t,e):h(t,null,e):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&hn(n)&&(n=[n]),h(t,e,n))}const t7=Symbol(""),n7=()=>Ze(t7),r7="3.2.45",a7="http://www.w3.org/2000/svg",po=typeof document<"u"?document:null,c1=po&&po.createElement("template"),o7={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,r)=>{const a=e?po.createElementNS(a7,t):po.createElement(t,n?{is:n}:void 0);return t==="select"&&r&&r.multiple!=null&&a.setAttribute("multiple",r.multiple),a},createText:t=>po.createTextNode(t),createComment:t=>po.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>po.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,r,a,o){const i=n?n.previousSibling:e.lastChild;if(a&&(a===o||a.nextSibling))for(;e.insertBefore(a.cloneNode(!0),n),!(a===o||!(a=a.nextSibling)););else{c1.innerHTML=r?`${t}`:t;const l=c1.content;if(r){const u=l.firstChild;for(;u.firstChild;)l.appendChild(u.firstChild);l.removeChild(u)}e.insertBefore(l,n)}return[i?i.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}};function i7(t,e,n){const r=t._vtc;r&&(e=(e?[e,...r]:[...r]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}function l7(t,e,n){const r=t.style,a=un(n);if(n&&!a){for(const o in n)Jv(r,o,n[o]);if(e&&!un(e))for(const o in e)n[o]==null&&Jv(r,o,"")}else{const o=r.display;a?e!==n&&(r.cssText=n):e&&t.removeAttribute("style"),"_vod"in t&&(r.display=o)}}const d1=/\s*!important$/;function Jv(t,e,n){if(bt(n))n.forEach(r=>Jv(t,e,r));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const r=u7(t,e);d1.test(n)?t.setProperty(Li(r),n.replace(d1,""),"important"):t[r]=n}}const f1=["Webkit","Moz","ms"],kf={};function u7(t,e){const n=kf[e];if(n)return n;let r=Ln(e);if(r!=="filter"&&r in t)return kf[e]=r;r=Jc(r);for(let a=0;aOf||(p7.then(()=>Of=0),Of=Date.now());function m7(t,e){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;lr(y7(r,n.value),e,5,[r])};return n.value=t,n.attached=g7(),n}function y7(t,e){if(bt(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(r=>a=>!a._stopped&&r&&r(a))}else return e}const p1=/^on[a-z]/,b7=(t,e,n,r,a=!1,o,i,l,u)=>{e==="class"?i7(t,r,a):e==="style"?l7(t,n,r):Xc(e)?$p(e)||v7(t,e,n,r,i):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):C7(t,e,r,a))?c7(t,e,r,o,i,l,u):(e==="true-value"?t._trueValue=r:e==="false-value"&&(t._falseValue=r),s7(t,e,r,a))};function C7(t,e,n,r){return r?!!(e==="innerHTML"||e==="textContent"||e in t&&p1.test(e)&&St(n)):e==="spellcheck"||e==="draggable"||e==="translate"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA"||p1.test(e)&&un(n)?!1:e in t}const Sa="transition",nl="animation",Nn=(t,{slots:e})=>Jl(kS,GS(t),e);Nn.displayName="Transition";const YS={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},x7=Nn.props=pn({},kS.props,YS),no=(t,e=[])=>{bt(t)?t.forEach(n=>n(...e)):t&&t(...e)},g1=t=>t?bt(t)?t.some(e=>e.length>1):t.length>1:!1;function GS(t){const e={};for(const I in t)I in YS||(e[I]=t[I]);if(t.css===!1)return e;const{name:n="v",type:r,duration:a,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:u=o,appearActiveClass:s=i,appearToClass:d=l,leaveFromClass:c=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=t,g=w7(a),p=g&&g[0],m=g&&g[1],{onBeforeEnter:b,onEnter:C,onEnterCancelled:x,onLeave:w,onLeaveCancelled:P,onBeforeAppear:S=b,onAppear:k=C,onAppearCancelled:T=x}=e,O=(I,E,F)=>{Ta(I,E?d:l),Ta(I,E?s:i),F&&F()},N=(I,E)=>{I._isLeaving=!1,Ta(I,c),Ta(I,v),Ta(I,f),E&&E()},$=I=>(E,F)=>{const j=I?k:C,D=()=>O(E,I,F);no(j,[E,D]),m1(()=>{Ta(E,I?u:o),na(E,I?d:l),g1(j)||y1(E,r,p,D)})};return pn(e,{onBeforeEnter(I){no(b,[I]),na(I,o),na(I,i)},onBeforeAppear(I){no(S,[I]),na(I,u),na(I,s)},onEnter:$(!1),onAppear:$(!0),onLeave(I,E){I._isLeaving=!0;const F=()=>N(I,E);na(I,c),XS(),na(I,f),m1(()=>{I._isLeaving&&(Ta(I,c),na(I,v),g1(w)||y1(I,r,m,F))}),no(w,[I,F])},onEnterCancelled(I){O(I,!1),no(x,[I])},onAppearCancelled(I){O(I,!0),no(T,[I])},onLeaveCancelled(I){N(I),no(P,[I])}})}function w7(t){if(t==null)return null;if(Gt(t))return[Tf(t.enter),Tf(t.leave)];{const e=Tf(t);return[e,e]}}function Tf(t){return Fp(t)}function na(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t._vtc||(t._vtc=new Set)).add(e)}function Ta(t,e){e.split(/\s+/).forEach(r=>r&&t.classList.remove(r));const{_vtc:n}=t;n&&(n.delete(e),n.size||(t._vtc=void 0))}function m1(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let S7=0;function y1(t,e,n,r){const a=t._endId=++S7,o=()=>{a===t._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:u}=qS(t,e);if(!i)return r();const s=i+"end";let d=0;const c=()=>{t.removeEventListener(s,f),o()},f=v=>{v.target===t&&++d>=u&&c()};setTimeout(()=>{d(n[g]||"").split(", "),a=r(`${Sa}Delay`),o=r(`${Sa}Duration`),i=b1(a,o),l=r(`${nl}Delay`),u=r(`${nl}Duration`),s=b1(l,u);let d=null,c=0,f=0;e===Sa?i>0&&(d=Sa,c=i,f=o.length):e===nl?s>0&&(d=nl,c=s,f=u.length):(c=Math.max(i,s),d=c>0?i>s?Sa:nl:null,f=d?d===Sa?o.length:u.length:0);const v=d===Sa&&/\b(transform|all)(,|$)/.test(r(`${Sa}Property`).toString());return{type:d,timeout:c,propCount:f,hasTransform:v}}function b1(t,e){for(;t.lengthC1(n)+C1(t[r])))}function C1(t){return Number(t.slice(0,-1).replace(",","."))*1e3}function XS(){return document.body.offsetHeight}const QS=new WeakMap,ZS=new WeakMap,P7={name:"TransitionGroup",props:pn({},x7,{tag:String,moveClass:String}),setup(t,{slots:e}){const n=cn(),r=PS();let a,o;return wn(()=>{if(!a.length)return;const i=t.moveClass||`${t.name||"v"}-move`;if(!E7(a[0].el,n.vnode.el,i))return;a.forEach(k7),a.forEach(O7);const l=a.filter(T7);XS(),l.forEach(u=>{const s=u.el,d=s.style;na(s,i),d.transform=d.webkitTransform=d.transitionDuration="";const c=s._moveCb=f=>{f&&f.target!==s||(!f||/transform$/.test(f.propertyName))&&(s.removeEventListener("transitionend",c),s._moveCb=null,Ta(s,i))};s.addEventListener("transitionend",c)})}),()=>{const i=rt(t),l=GS(i);let u=i.tag||et;a=o,o=e.default?Gp(e.default()):[];for(let s=0;s{i.split(/\s+/).forEach(l=>l&&r.classList.remove(l))}),n.split(/\s+/).forEach(i=>i&&r.classList.add(i)),r.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(r);const{hasTransform:o}=qS(r);return a.removeChild(r),o}const M7=["ctrl","shift","alt","meta"],I7={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>M7.some(n=>t[`${n}Key`]&&!e.includes(n))},x1=(t,e)=>(n,...r)=>{for(let a=0;a{rl(t,!1)}):rl(t,e))},beforeUnmount(t,{value:e}){rl(t,e)}};function rl(t,e){t.style.display=e?t._vod:"none"}const _7=pn({patchProp:b7},o7);let w1;function JS(){return w1||(w1=AT(_7))}const sc=(...t)=>{JS().render(...t)},e4=(...t)=>{const e=JS().createApp(...t),{mount:n}=e;return e.mount=r=>{const a=N7(r);if(!a)return;const o=e._component;!St(o)&&!o.render&&!o.template&&(o.template=a.innerHTML),a.innerHTML="";const i=n(a,!1,a instanceof SVGElement);return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),i},e};function N7(t){return un(t)?document.querySelector(t):t}function Fe(t){"@babel/helpers - typeof";return Fe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(t)}function $7(t,e){if(Fe(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e||"default");if(Fe(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function t4(t){var e=$7(t,"string");return Fe(e)=="symbol"?e:String(e)}function A(t,e,n){return e=t4(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function S1(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,r)}return n}function y(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return typeof t=="function"?t(e):t??n}function ce(){for(var t=[],e=0;e0},t.prototype.connect_=function(){!eh||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Q7?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){!eh||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(e){var n=e.propertyName,r=n===void 0?"":n,a=X7.some(function(o){return!!~r.indexOf(o)});a&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),a4=function(t,e){for(var n=0,r=Object.keys(e);n"u"||!(Element instanceof Object))){if(!(e instanceof ki(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(e)||(n.set(e,new iE(e)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(e instanceof ki(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(e)&&(n.delete(e),n.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(n){n.isActive()&&e.activeObservations_.push(n)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,n=this.activeObservations_.map(function(r){return new lE(r.target,r.broadcastRect())});this.callback_.call(e,n,e),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),i4=typeof WeakMap<"u"?new WeakMap:new r4,l4=function(){function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=Z7.getInstance(),r=new uE(e,n,this);i4.set(this,r)}return t}();["observe","unobserve","disconnect"].forEach(function(t){l4.prototype[t]=function(){var e;return(e=i4.get(this))[t].apply(e,arguments)}});var sE=function(){return typeof cc.ResizeObserver<"u"?cc.ResizeObserver:l4}();const og=sE;function u4(t){if(Array.isArray(t))return t}function cE(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var r,a,o,i,l=[],u=!0,s=!1;try{if(o=(n=n.call(t)).next,e===0){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=o.call(n)).done)&&(l.push(r.value),l.length!==e);u=!0);}catch(d){s=!0,a=d}finally{try{if(!u&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}function th(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&arguments[0]!==void 0?arguments[0]:"",n=arguments.length>1?arguments[1]:void 0,r={},a=/;(?![^(]*\))/g,o=/:(.+)/;return Fe(e)==="object"?e:(e.split(a).forEach(function(i){if(i){var l=i.split(o);if(l.length>1){var u=n?ag(l[0].trim()):l[0].trim();r[u]=l[1].trim()}}}),r)},la=function(e,n){return e[n]!==void 0},Et=function t(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=Array.isArray(e)?e:[e],a=[];return r.forEach(function(o){Array.isArray(o)?a.push.apply(a,Ie(t(o,n))):o&&o.type===et?a.push.apply(a,Ie(t(o.children,n))):o&&hn(o)?n&&!bu(o)?a.push(o):n||a.push(o):nh(o)&&a.push(o)}),a},yu=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(hn(e))return e.type===et?n==="default"?Et(e.children):[]:e.children&&e.children[n]?Et(e.children[n](r)):[];var a=e.$slots[n]&&e.$slots[n](r);return Et(a)},Ra=function(e){for(var n,r=(e==null||(n=e.vnode)===null||n===void 0?void 0:n.el)||e&&(e.$el||e);r&&!r.tagName;)r=r.nextSibling;return r},p4=function(e){var n={};if(e.$&&e.$.vnode){var r=e.$.vnode.props||{};Object.keys(e.$props).forEach(function(l){var u=e.$props[l],s=K7(l);(u!==void 0||s in r)&&(n[l]=u)})}else if(hn(e)&&Fe(e.type)==="object"){var a=e.props||{},o={};Object.keys(a).forEach(function(l){o[ag(l)]=a[l]});var i=e.type.props||{};Object.keys(i).forEach(function(l){var u=z7(i,o,l,o[l]);(u!==void 0||l in o)&&(n[l]=u)})}return n},cg=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,o=void 0;if(e.$){var i=e[n];if(i!==void 0)return typeof i=="function"&&a?i(r):i;o=e.$slots[n],o=a&&o?o(r):o}else if(hn(e)){var l=e.props&&e.props[n];if(l!==void 0&&e.props!==null)return typeof l=="function"&&a?l(r):l;e.type===et?o=e.children:e.children&&e.children[n]&&(o=e.children[n],o=a&&o?o(r):o)}return Array.isArray(o)&&(o=Et(o),o=o.length===1?o[0]:o,o=o.length===0?void 0:o),o};function T1(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,n={};return t.$?n=y(y({},n),t.$attrs):n=y(y({},n),t.props),ug(n)[e?"onEvents":"events"]}function $E(t){var e=(hn(t)?t.props:t.$attrs)||{},n=e.class||{},r={};return typeof n=="string"?n.split(" ").forEach(function(a){r[a.trim()]=!0}):Array.isArray(n)?ce(n).split(" ").forEach(function(a){r[a.trim()]=!0}):r=y(y({},r),n),r}function g4(t,e){var n=(hn(t)?t.props:t.$attrs)||{},r=n.style||{};if(typeof r=="string")r=sg(r,e);else if(e&&r){var a={};return Object.keys(r).forEach(function(o){return a[ag(o)]=r[o]}),a}return r}function AE(t){return t==null||t===""||Array.isArray(t)&&t.length===0}function bu(t){return t&&(t.type===qn||t.type===et&&t.children.length===0||t.type===Ua&&t.children.trim()==="")}function RE(t){return t&&t.type===Ua}function qt(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=[];return t.forEach(function(n){Array.isArray(n)?e.push.apply(e,Ie(n)):(n==null?void 0:n.type)===et?e.push.apply(e,Ie(qt(n.children))):e.push(n)}),e.filter(function(n){return!bu(n)})}function ol(t){if(t){var e=qt(t);return e.length?e:void 0}else return t}function Jt(t){return Array.isArray(t)&&t.length===1&&(t=t[0]),t&&t.__v_isVNode&&Fe(t.type)!=="symbol"}function $t(t,e){var n,r,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"default";return(n=e[a])!==null&&n!==void 0?n:(r=t[a])===null||r===void 0?void 0:r.call(t)}const dr=le({compatConfig:{MODE:3},name:"ResizeObserver",props:{disabled:Boolean,onResize:Function},emits:["resize"],setup:function(e,n){var r=n.slots,a=xt({width:0,height:0,offsetHeight:0,offsetWidth:0}),o=null,i=null,l=function(){i&&(i.disconnect(),i=null)},u=function(f){var v=e.onResize,g=f[0].target,p=g.getBoundingClientRect(),m=p.width,b=p.height,C=g.offsetWidth,x=g.offsetHeight,w=Math.floor(m),P=Math.floor(b);if(a.width!==w||a.height!==P||a.offsetWidth!==C||a.offsetHeight!==x){var S={width:w,height:P,offsetWidth:C,offsetHeight:x};pt(a,S),v&&Promise.resolve().then(function(){v(y(y({},S),{},{offsetWidth:C,offsetHeight:x}),g)})}},s=cn(),d=function(){var f=e.disabled;if(f){l();return}var v=Ra(s),g=v!==o;g&&(l(),o=v),!i&&v&&(i=new og(u),i.observe(v))};return Ge(function(){d()}),wn(function(){d()}),Sn(function(){l()}),Se(function(){return e.disabled},function(){d()},{flush:"post"}),function(){var c;return(c=r.default)===null||c===void 0?void 0:c.call(r)[0]}}});var m4=function(e){return setTimeout(e,16)},y4=function(e){return clearTimeout(e)};typeof window<"u"&&"requestAnimationFrame"in window&&(m4=function(e){return window.requestAnimationFrame(e)},y4=function(e){return window.cancelAnimationFrame(e)});var E1=0,dg=new Map;function b4(t){dg.delete(t)}function qe(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;E1+=1;var n=E1;function r(a){if(a===0)b4(n),t();else{var o=m4(function(){r(a-1)});dg.set(n,o)}}return r(e),n}qe.cancel=function(t){var e=dg.get(t);return b4(e),y4(e)};function rh(t){var e,n=function(o){return function(){e=null,t.apply(void 0,Ie(o))}},r=function(){if(e==null){for(var o=arguments.length,i=new Array(o),l=0;lt.top-n)return"".concat(n+e.top,"px")}function _1(t,e,n){if(n!==void 0&&e.bottom=0)&&(n[a]=t[a]);return n}function He(t,e){if(t==null)return{};var n=FE(t,e),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}const w4={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages"};var LE={locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"Ok",clear:"Clear",month:"Month",year:"Year",timeSelect:"select time",dateSelect:"select date",weekSelect:"Choose a week",monthSelect:"Choose a month",yearSelect:"Choose a year",decadeSelect:"Choose a decade",yearFormat:"YYYY",dateFormat:"M/D/YYYY",dayFormat:"D",dateTimeFormat:"M/D/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Previous month (PageUp)",nextMonth:"Next month (PageDown)",previousYear:"Last year (Control + left)",nextYear:"Next year (Control + right)",previousDecade:"Last decade",nextDecade:"Next decade",previousCentury:"Last century",nextCentury:"Next century"};const BE=LE;var jE={placeholder:"Select time",rangePlaceholder:["Start time","End time"]};const S4=jE;var VE={lang:y({placeholder:"Select date",yearPlaceholder:"Select year",quarterPlaceholder:"Select quarter",monthPlaceholder:"Select month",weekPlaceholder:"Select week",rangePlaceholder:["Start date","End date"],rangeYearPlaceholder:["Start year","End year"],rangeQuarterPlaceholder:["Start quarter","End quarter"],rangeMonthPlaceholder:["Start month","End month"],rangeWeekPlaceholder:["Start week","End week"]},BE),timePickerLocale:y({},S4)};const eu=VE;var Kn="${label} is not a valid ${type}",KE={locale:"en",Pagination:w4,DatePicker:eu,TimePicker:S4,Calendar:eu,global:{placeholder:"Please select"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",filterEmptyText:"No filters",filterCheckall:"Select all items",filterSearchPlaceholder:"Search in filters",emptyText:"No data",selectAll:"Select current page",selectInvert:"Invert current page",selectNone:"Clear all data",selectionAll:"Select all data",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row",triggerDesc:"Click to sort descending",triggerAsc:"Click to sort ascending",cancelSort:"Click to cancel sorting"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items",remove:"Remove",selectCurrent:"Select current page",removeCurrent:"Remove current page",selectAll:"Select all data",removeAll:"Remove all data",selectInvert:"Invert current page"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No Data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand"},PageHeader:{back:"Back"},Form:{optional:"(optional)",defaultValidateMessages:{default:"Field validation error for ${label}",required:"Please enter ${label}",enum:"${label} must be one of [${enum}]",whitespace:"${label} cannot be a blank character",date:{format:"${label} date format is invalid",parse:"${label} cannot be converted to a date",invalid:"${label} is an invalid date"},types:{string:Kn,method:Kn,array:Kn,object:Kn,number:Kn,date:Kn,boolean:Kn,integer:Kn,float:Kn,regexp:Kn,email:Kn,url:Kn,hex:Kn},string:{len:"${label} must be ${len} characters",min:"${label} must be at least ${min} characters",max:"${label} must be up to ${max} characters",range:"${label} must be between ${min}-${max} characters"},number:{len:"${label} must be equal to ${len}",min:"${label} must be minimum ${min}",max:"${label} must be maximum ${max}",range:"${label} must be between ${min}-${max}"},array:{len:"Must be ${len} ${label}",min:"At least ${min} ${label}",max:"At most ${max} ${label}",range:"The amount of ${label} must be between ${min}-${max}"},pattern:{mismatch:"${label} does not match the pattern ${pattern}"}}},Image:{preview:"Preview"}};const wr=KE,Vi=le({compatConfig:{MODE:3},name:"LocaleReceiver",props:{componentName:String,defaultLocale:{type:[Object,Function]},children:{type:Function}},setup:function(e,n){var r=n.slots,a=Ze("localeData",{}),o=L(function(){var l=e.componentName,u=l===void 0?"global":l,s=e.defaultLocale,d=s||wr[u||"global"],c=a.antLocale,f=u&&c?c[u]:{};return y(y({},typeof d=="function"?d():d),f||{})}),i=L(function(){var l=a.antLocale,u=l&&l.locale;return l&&l.exist&&!u?wr.locale:u});return function(){var l=e.children||r.default,u=a.antLocale;return l==null?void 0:l(o.value,i.value,u)}}});function zr(t,e,n){var r=Ze("localeData",{}),a=L(function(){var o=r.antLocale,i=tn(e)||wr[t||"global"],l=t&&o?o[t]:{};return y(y(y({},typeof i=="function"?i():i),l||{}),tn(n)||{})});return[a]}var P4=function(){var e=Re("empty",{}),n=e.getPrefixCls,r=n("empty-img-default");return h("svg",{class:r,width:"184",height:"152",viewBox:"0 0 184 152"},[h("g",{fill:"none","fill-rule":"evenodd"},[h("g",{transform:"translate(24 31.67)"},[h("ellipse",{class:"".concat(r,"-ellipse"),cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"},null),h("path",{class:"".concat(r,"-path-1"),d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z"},null),h("path",{class:"".concat(r,"-path-2"),d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",transform:"translate(13.56)"},null),h("path",{class:"".concat(r,"-path-3"),d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z"},null),h("path",{class:"".concat(r,"-path-4"),d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z"},null)]),h("path",{class:"".concat(r,"-path-5"),d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z"},null),h("g",{class:"".concat(r,"-g"),transform:"translate(149.65 15.383)"},[h("ellipse",{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"},null),h("path",{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"},null)])])])};P4.PRESENTED_IMAGE_DEFAULT=!0;const HE=P4;var k4=function(){var e=Re("empty",{}),n=e.getPrefixCls,r=n("empty-img-simple");return h("svg",{class:r,width:"64",height:"41",viewBox:"0 0 64 41"},[h("g",{transform:"translate(0 1)",fill:"none","fill-rule":"evenodd"},[h("ellipse",{class:"".concat(r,"-ellipse"),fill:"#F5F5F5",cx:"32",cy:"33",rx:"32",ry:"7"},null),h("g",{class:"".concat(r,"-g"),"fill-rule":"nonzero",stroke:"#D9D9D9"},[h("path",{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"},null),h("path",{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:"#FAFAFA",class:"".concat(r,"-path")},null)])])])};k4.PRESENTED_IMAGE_SIMPLE=!0;const zE=k4;function A1(t,e){for(var n=0;n=0||(a[n]=t[n]);return a}function R1(t){return((e=t)!=null&&typeof e=="object"&&Array.isArray(e)===!1)==1&&Object.prototype.toString.call(t)==="[object Object]";var e}var M4=Object.prototype,I4=M4.toString,WE=M4.hasOwnProperty,_4=/^\s*function (\w+)/;function D1(t){var e,n=(e=t==null?void 0:t.type)!==null&&e!==void 0?e:t;if(n){var r=n.toString().match(_4);return r?r[1]:""}return""}var No=function(t){var e,n;return R1(t)!==!1&&typeof(e=t.constructor)=="function"&&R1(n=e.prototype)!==!1&&n.hasOwnProperty("isPrototypeOf")!==!1},UE=function(t){return t},Mn=UE,tu=function(t,e){return WE.call(t,e)},YE=Number.isInteger||function(t){return typeof t=="number"&&isFinite(t)&&Math.floor(t)===t},Oi=Array.isArray||function(t){return I4.call(t)==="[object Array]"},Ti=function(t){return I4.call(t)==="[object Function]"},fc=function(t){return No(t)&&tu(t,"_vueTypes_name")},N4=function(t){return No(t)&&(tu(t,"type")||["_vueTypes_name","validator","default","required"].some(function(e){return tu(t,e)}))};function fg(t,e){return Object.defineProperty(t.bind(e),"__original",{value:t})}function Fo(t,e,n){var r;n===void 0&&(n=!1);var a=!0,o="";r=No(t)?t:{type:t};var i=fc(r)?r._vueTypes_name+" - ":"";if(N4(r)&&r.type!==null){if(r.type===void 0||r.type===!0||!r.required&&e===void 0)return a;Oi(r.type)?(a=r.type.some(function(c){return Fo(c,e,!0)===!0}),o=r.type.map(function(c){return D1(c)}).join(" or ")):a=(o=D1(r))==="Array"?Oi(e):o==="Object"?No(e):o==="String"||o==="Number"||o==="Boolean"||o==="Function"?function(c){if(c==null)return"";var f=c.constructor.toString().match(_4);return f?f[1]:""}(e)===o:e instanceof r.type}if(!a){var l=i+'value "'+e+'" should be of type "'+o+'"';return n===!1?(Mn(l),!1):l}if(tu(r,"validator")&&Ti(r.validator)){var u=Mn,s=[];if(Mn=function(c){s.push(c)},a=r.validator(e),Mn=u,!a){var d=(s.length>1?"* ":"")+s.join(` +* `);return s.length=0,n===!1?(Mn(d),a):d}}return a}function Qn(t,e){var n=Object.defineProperties(e,{_vueTypes_name:{value:t,writable:!0},isRequired:{get:function(){return this.required=!0,this}},def:{value:function(a){return a!==void 0||this.default?Ti(a)||Fo(this,a,!0)===!0?(this.default=Oi(a)?function(){return[].concat(a)}:No(a)?function(){return Object.assign({},a)}:a,this):(Mn(this._vueTypes_name+' - invalid default value: "'+a+'"'),this):this}}}),r=n.validator;return Ti(r)&&(n.validator=fg(r,n)),n}function Hr(t,e){var n=Qn(t,e);return Object.defineProperty(n,"validate",{value:function(r){return Ti(this.validator)&&Mn(this._vueTypes_name+` - calling .validate() will overwrite the current custom validator function. Validator info: +`+JSON.stringify(this)),this.validator=fg(r,this),this}})}function F1(t,e,n){var r,a,o=(r=e,a={},Object.getOwnPropertyNames(r).forEach(function(c){a[c]=Object.getOwnPropertyDescriptor(r,c)}),Object.defineProperties({},a));if(o._vueTypes_name=t,!No(n))return o;var i,l,u=n.validator,s=E4(n,["validator"]);if(Ti(u)){var d=o.validator;d&&(d=(l=(i=d).__original)!==null&&l!==void 0?l:i),o.validator=fg(d?function(c){return d.call(this,c)&&u.call(this,c)}:u,o)}return Object.assign(o,s)}function fd(t){return t.replace(/^(?!\s*$)/gm," ")}var GE=function(){return Hr("any",{})},qE=function(){return Hr("function",{type:Function})},XE=function(){return Hr("boolean",{type:Boolean})},QE=function(){return Hr("string",{type:String})},ZE=function(){return Hr("number",{type:Number})},JE=function(){return Hr("array",{type:Array})},eM=function(){return Hr("object",{type:Object})},tM=function(){return Qn("integer",{type:Number,validator:function(t){return YE(t)}})},nM=function(){return Qn("symbol",{validator:function(t){return typeof t=="symbol"}})};function rM(t,e){if(e===void 0&&(e="custom validation failed"),typeof t!="function")throw new TypeError("[VueTypes error]: You must provide a function as argument");return Qn(t.name||"<>",{validator:function(n){var r=t(n);return r||Mn(this._vueTypes_name+" - "+e),r}})}function aM(t){if(!Oi(t))throw new TypeError("[VueTypes error]: You must provide an array as argument.");var e='oneOf - value should be one of "'+t.join('", "')+'".',n=t.reduce(function(r,a){if(a!=null){var o=a.constructor;r.indexOf(o)===-1&&r.push(o)}return r},[]);return Qn("oneOf",{type:n.length>0?n:void 0,validator:function(r){var a=t.indexOf(r)!==-1;return a||Mn(e),a}})}function oM(t){if(!Oi(t))throw new TypeError("[VueTypes error]: You must provide an array as argument");for(var e=!1,n=[],r=0;r0&&n.some(function(u){return i.indexOf(u)===-1})){var l=n.filter(function(u){return i.indexOf(u)===-1});return Mn(l.length===1?'shape - required property "'+l[0]+'" is not defined.':'shape - required properties "'+l.join('", "')+'" are not defined.'),!1}return i.every(function(u){if(e.indexOf(u)===-1)return o._vueTypes_isLoose===!0||(Mn('shape - shape definition does not include a "'+u+'" property. Allowed keys: "'+e.join('", "')+'".'),!1);var s=Fo(t[u],a[u],!0);return typeof s=="string"&&Mn('shape - "'+u+`" property validation error: + `+fd(s)),s===!0})}});return Object.defineProperty(r,"_vueTypes_isLoose",{writable:!0,value:!1}),Object.defineProperty(r,"loose",{get:function(){return this._vueTypes_isLoose=!0,this}}),r}var Rr=function(){function t(){}return t.extend=function(e){var n=this;if(Oi(e))return e.forEach(function(c){return n.extend(c)}),this;var r=e.name,a=e.validate,o=a!==void 0&&a,i=e.getter,l=i!==void 0&&i,u=E4(e,["name","validate","getter"]);if(tu(this,r))throw new TypeError('[VueTypes error]: Type "'+r+'" already defined');var s,d=u.type;return fc(d)?(delete u.type,Object.defineProperty(this,r,l?{get:function(){return F1(r,d,u)}}:{value:function(){var c,f=F1(r,d,u);return f.validator&&(f.validator=(c=f.validator).bind.apply(c,[f].concat([].slice.call(arguments)))),f}})):(s=l?{get:function(){var c=Object.assign({},u);return o?Hr(r,c):Qn(r,c)},enumerable:!0}:{value:function(){var c,f,v=Object.assign({},u);return c=o?Hr(r,v):Qn(r,v),v.validator&&(c.validator=(f=v.validator).bind.apply(f,[c].concat([].slice.call(arguments)))),c},enumerable:!0},Object.defineProperty(this,r,s))},O4(t,null,[{key:"any",get:function(){return GE()}},{key:"func",get:function(){return qE().def(this.defaults.func)}},{key:"bool",get:function(){return XE().def(this.defaults.bool)}},{key:"string",get:function(){return QE().def(this.defaults.string)}},{key:"number",get:function(){return ZE().def(this.defaults.number)}},{key:"array",get:function(){return JE().def(this.defaults.array)}},{key:"object",get:function(){return eM().def(this.defaults.object)}},{key:"integer",get:function(){return tM().def(this.defaults.integer)}},{key:"symbol",get:function(){return nM()}}]),t}();function $4(t){var e;return t===void 0&&(t={func:function(){},bool:!0,string:"",number:0,array:function(){return[]},object:function(){return{}},integer:0}),(e=function(n){function r(){return n.apply(this,arguments)||this}return T4(r,n),O4(r,null,[{key:"sensibleDefaults",get:function(){return ks({},this.defaults)},set:function(a){this.defaults=a!==!1?ks({},a!==!0?a:t):{}}}]),r}(Rr)).defaults=ks({},t),e}Rr.defaults={},Rr.custom=rM,Rr.oneOf=aM,Rr.instanceOf=lM,Rr.oneOfType=oM,Rr.arrayOf=iM,Rr.objectOf=uM,Rr.shape=sM,Rr.utils={validate:function(t,e){return Fo(e,t,!0)===!0},toType:function(t,e,n){return n===void 0&&(n=!1),n?Hr(t,e):Qn(t,e)}};(function(t){function e(){return t.apply(this,arguments)||this}return T4(e,t),e})($4());var A4=$4({func:void 0,bool:void 0,string:void 0,number:void 0,array:void 0,object:void 0,integer:void 0});A4.extend([{name:"looseBool",getter:!0,type:Boolean,default:void 0},{name:"style",getter:!0,type:[String,Object],default:void 0},{name:"VueNode",getter:!0,type:null}]);function R4(t){return t.default=void 0,t}const G=A4;var cM=["image","description","imageStyle","class"],D4=h(HE,null,null),F4=h(zE,null,null),Ki=function(e,n){var r,a=n.slots,o=a===void 0?{}:a,i=n.attrs,l=Re("empty",e),u=l.direction,s=l.prefixCls,d=s.value,c=y(y({},e),i),f=c.image,v=f===void 0?D4:f,g=c.description,p=g===void 0?((r=o.description)===null||r===void 0?void 0:r.call(o))||void 0:g,m=c.imageStyle,b=c.class,C=b===void 0?"":b,x=He(c,cM);return h(Vi,{componentName:"Empty",children:function(P){var S,k=typeof p<"u"?p:P.description,T=typeof k=="string"?k:"empty",O=null;return typeof v=="string"?O=h("img",{alt:T,src:v},null):O=v,h("div",y({class:ce(d,C,(S={},A(S,"".concat(d,"-normal"),v===F4),A(S,"".concat(d,"-rtl"),u.value==="rtl"),S))},x),[h("div",{class:"".concat(d,"-image"),style:m},[O]),k&&h("p",{class:"".concat(d,"-description")},[k]),o.default&&h("div",{class:"".concat(d,"-footer")},[qt(o.default())])])}},null)};Ki.displayName="AEmpty";Ki.PRESENTED_IMAGE_DEFAULT=D4;Ki.PRESENTED_IMAGE_SIMPLE=F4;Ki.inheritAttrs=!1;Ki.props={prefixCls:String,image:G.any,description:G.any,imageStyle:{type:Object,default:void 0}};const $a=Wt(Ki);var dM=function(e){var n=Re("empty",e),r=n.prefixCls,a=function(i){switch(i){case"Table":case"List":return h($a,{image:$a.PRESENTED_IMAGE_SIMPLE},null);case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return h($a,{image:$a.PRESENTED_IMAGE_SIMPLE,class:"".concat(r.value,"-small")},null);default:return h($a,null,null)}};return a(e.componentName)};function L4(t){return h(dM,{componentName:t},null)}var L1={};function fM(t,e){}function vM(t,e){}function B4(t,e,n){!e&&!L1[n]&&(t(!1,n),L1[n]=!0)}function j4(t,e){B4(fM,t,e)}function hM(t,e){B4(vM,t,e)}const Zt=function(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"";j4(t,"[antdv: ".concat(e,"] ").concat(n))};var ah="internalMark",Os=le({compatConfig:{MODE:3},name:"ALocaleProvider",props:{locale:{type:Object},ANT_MARK__:String},setup:function(e,n){var r=n.slots;Zt(e.ANT_MARK__===ah,"LocaleProvider","`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead");var a=xt({antLocale:y(y({},e.locale),{},{exist:!0}),ANT_MARK__:ah});return at("localeData",a),Se(function(){return e.locale},function(){a.antLocale=y(y({},e.locale),{},{exist:!0})},{immediate:!0}),function(){var o;return(o=r.default)===null||o===void 0?void 0:o.call(r)}}});Os.install=function(t){return t.component(Os.name,Os),t};const V4=Wt(Os);Vt("bottomLeft","bottomRight","topLeft","topRight");var pM=function(e){return e!==void 0&&(e==="topLeft"||e==="topRight")?"slide-down":"slide-up"},Ga=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=y(e?{name:e,appear:!0,enterFromClass:"".concat(e,"-enter ").concat(e,"-enter-prepare"),enterActiveClass:"".concat(e,"-enter ").concat(e,"-enter-prepare"),enterToClass:"".concat(e,"-enter ").concat(e,"-enter-active"),leaveFromClass:" ".concat(e,"-leave"),leaveActiveClass:"".concat(e,"-leave ").concat(e,"-leave-active"),leaveToClass:"".concat(e,"-leave ").concat(e,"-leave-active")}:{css:!1},n);return r},vg=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=y(e?{name:e,appear:!0,appearActiveClass:"".concat(e),appearToClass:"".concat(e,"-appear ").concat(e,"-appear-active"),enterFromClass:"".concat(e,"-appear ").concat(e,"-enter ").concat(e,"-appear-prepare ").concat(e,"-enter-prepare"),enterActiveClass:"".concat(e),enterToClass:"".concat(e,"-enter ").concat(e,"-appear ").concat(e,"-appear-active ").concat(e,"-enter-active"),leaveActiveClass:"".concat(e," ").concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-active")}:{css:!1},n);return r},Sr=function(e,n,r){return r!==void 0?r:"".concat(e,"-").concat(n)};const gM=le({name:"Notice",inheritAttrs:!1,props:["prefixCls","duration","updateMark","noticeKey","closeIcon","closable","props","onClick","onClose","holder","visible"],setup:function(e,n){var r=n.attrs,a=n.slots,o,i=!1,l=L(function(){return e.duration===void 0?4.5:e.duration}),u=function(){l.value&&!i&&(o=setTimeout(function(){d()},l.value*1e3))},s=function(){o&&(clearTimeout(o),o=null)},d=function(v){v&&v.stopPropagation(),s();var g=e.onClose,p=e.noticeKey;g&&g(p)},c=function(){s(),u()};return Ge(function(){u()}),Sn(function(){i=!0,s()}),Se([l,function(){return e.updateMark},function(){return e.visible}],function(f,v){var g=Te(f,3),p=g[0],m=g[1],b=g[2],C=Te(v,3),x=C[0],w=C[1],P=C[2];(p!==x||m!==w||b!==P&&P)&&c()},{flush:"post"}),function(){var f,v,g=e.prefixCls,p=e.closable,m=e.closeIcon,b=m===void 0?(f=a.closeIcon)===null||f===void 0?void 0:f.call(a):m,C=e.onClick,x=e.holder,w=r.class,P=r.style,S="".concat(g,"-notice"),k=Object.keys(r).reduce(function(O,N){return(N.substr(0,5)==="data-"||N.substr(0,5)==="aria-"||N==="role")&&(O[N]=r[N]),O},{}),T=h("div",y({class:ce(S,w,A({},"".concat(S,"-closable"),p)),style:P,onMouseenter:s,onMouseleave:u,onClick:C},k),[h("div",{class:"".concat(S,"-content")},[(v=a.default)===null||v===void 0?void 0:v.call(a)]),p?h("a",{tabindex:0,onClick:d,class:"".concat(S,"-close")},[b||h("span",{class:"".concat(S,"-close-x")},null)]):null]);return x?h(eg,{to:x},{default:function(){return T}}):T}}});var mM=["name","getContainer","appContext","prefixCls","rootPrefixCls","transitionName","hasTransitionName"],B1=0,yM=Date.now();function j1(){var t=B1;return B1+=1,"rcNotification_".concat(yM,"_").concat(t)}var oh=le({name:"Notification",inheritAttrs:!1,props:["prefixCls","transitionName","animation","maxCount","closeIcon"],setup:function(e,n){var r=n.attrs,a=n.expose,o=n.slots,i=new Map,l=Q([]),u=L(function(){var c=e.prefixCls,f=e.animation,v=f===void 0?"fade":f,g=e.transitionName;return!g&&v&&(g="".concat(c,"-").concat(v)),vg(g)}),s=function(f,v){var g=f.key||j1(),p=y(y({},f),{},{key:g}),m=e.maxCount,b=l.value.map(function(x){return x.notice.key}).indexOf(g),C=l.value.concat();b!==-1?C.splice(b,1,{notice:p,holderCallback:v}):(m&&l.value.length>=m&&(p.key=C[0].notice.key,p.updateMark=j1(),p.userPassKey=g,C.shift()),C.push({notice:p,holderCallback:v})),l.value=C},d=function(f){l.value=l.value.filter(function(v){var g=v.notice,p=g.key,m=g.userPassKey,b=m||p;return b!==f})};return a({add:s,remove:d,notices:l}),function(){var c,f,v=e.prefixCls,g=e.closeIcon,p=g===void 0?(c=o.closeIcon)===null||c===void 0?void 0:c.call(o,{prefixCls:v}):g,m=l.value.map(function(C,x){var w=C.notice,P=C.holderCallback,S=x===l.value.length-1?w.updateMark:void 0,k=w.key,T=w.userPassKey,O=w.content,N=y(y(y({prefixCls:v,closeIcon:typeof p=="function"?p({prefixCls:v}):p},w),w.props),{},{key:k,noticeKey:T||k,updateMark:S,onClose:function(I){var E;d(I),(E=w.onClose)===null||E===void 0||E.call(w)},onClick:w.onClick});return P?h("div",{key:k,class:"".concat(v,"-hook-holder"),ref:function(I){typeof k>"u"||(I?(i.set(k,I),P(I,N)):i.delete(k))}},null):h(gM,N,{default:function(){return[typeof O=="function"?O({prefixCls:v}):O]}})}),b=(f={},A(f,v,1),A(f,r.class,!!r.class),f);return h("div",{class:b,style:r.style||{top:"65px",left:"50%"}},[h(rg,y({tag:"div"},u.value),{default:function(){return[m]}})])}}});oh.newInstance=function(e,n){var r=e||{},a=r.name,o=a===void 0?"notification":a,i=r.getContainer,l=r.appContext,u=r.prefixCls,s=r.rootPrefixCls,d=r.transitionName,c=r.hasTransitionName,f=He(r,mM),v=document.createElement("div");if(i){var g=i();g.appendChild(v)}else document.body.appendChild(v);var p=le({compatConfig:{MODE:3},name:"NotificationWrapper",setup:function(C,x){var w=x.attrs,P=Q();return Ge(function(){n({notice:function(k){var T;(T=P.value)===null||T===void 0||T.add(k)},removeNotice:function(k){var T;(T=P.value)===null||T===void 0||T.remove(k)},destroy:function(){sc(null,v),v.parentNode&&v.parentNode.removeChild(v)},component:P})}),function(){var S=Dn,k=S.getPrefixCls(o,u),T=S.getRootPrefixCls(s,k),O=c?d:"".concat(T,"-").concat(d);return h(Ng,y(y({},S),{},{notUpdateGlobalConfig:!0,prefixCls:T}),{default:function(){return[h(oh,y(y({ref:P},w),{},{prefixCls:k,transitionName:O}),null)]}})}}}),m=h(p,f);m.appContext=l||m.appContext,sc(m,v)};const K4=oh;var bM={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"};const CM=bM;function bn(t,e){xM(t)&&(t="100%");var n=wM(t);return t=e===360?t:Math.min(e,Math.max(0,parseFloat(t))),n&&(t=parseInt(String(t*e),10)/100),Math.abs(t-e)<1e-6?1:(e===360?t=(t<0?t%e+e:t%e)/parseFloat(String(e)):t=t%e/parseFloat(String(e)),t)}function Uu(t){return Math.min(1,Math.max(0,t))}function xM(t){return typeof t=="string"&&t.indexOf(".")!==-1&&parseFloat(t)===1}function wM(t){return typeof t=="string"&&t.indexOf("%")!==-1}function H4(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function Yu(t){return t<=1?"".concat(Number(t)*100,"%"):t}function wo(t){return t.length===1?"0"+t:String(t)}function SM(t,e,n){return{r:bn(t,255)*255,g:bn(e,255)*255,b:bn(n,255)*255}}function V1(t,e,n){t=bn(t,255),e=bn(e,255),n=bn(n,255);var r=Math.max(t,e,n),a=Math.min(t,e,n),o=0,i=0,l=(r+a)/2;if(r===a)i=0,o=0;else{var u=r-a;switch(i=l>.5?u/(2-r-a):u/(r+a),r){case t:o=(e-n)/u+(e1&&(n-=1),n<1/6?t+(e-t)*(6*n):n<1/2?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function PM(t,e,n){var r,a,o;if(t=bn(t,360),e=bn(e,100),n=bn(n,100),e===0)a=n,o=n,r=n;else{var i=n<.5?n*(1+e):n+e-n*e,l=2*n-i;r=Ef(l,i,t+1/3),a=Ef(l,i,t),o=Ef(l,i,t-1/3)}return{r:r*255,g:a*255,b:o*255}}function ih(t,e,n){t=bn(t,255),e=bn(e,255),n=bn(n,255);var r=Math.max(t,e,n),a=Math.min(t,e,n),o=0,i=r,l=r-a,u=r===0?0:l/r;if(r===a)o=0;else{switch(r){case t:o=(e-n)/l+(e>16,g:(t&65280)>>8,b:t&255}}var uh={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function ei(t){var e={r:0,g:0,b:0},n=1,r=null,a=null,o=null,i=!1,l=!1;return typeof t=="string"&&(t=_M(t)),typeof t=="object"&&(Qr(t.r)&&Qr(t.g)&&Qr(t.b)?(e=SM(t.r,t.g,t.b),i=!0,l=String(t.r).substr(-1)==="%"?"prgb":"rgb"):Qr(t.h)&&Qr(t.s)&&Qr(t.v)?(r=Yu(t.s),a=Yu(t.v),e=kM(t.h,r,a),i=!0,l="hsv"):Qr(t.h)&&Qr(t.s)&&Qr(t.l)&&(r=Yu(t.s),o=Yu(t.l),e=PM(t.h,r,o),i=!0,l="hsl"),Object.prototype.hasOwnProperty.call(t,"a")&&(n=t.a)),n=H4(n),{ok:i,format:t.format||l,r:Math.min(255,Math.max(e.r,0)),g:Math.min(255,Math.max(e.g,0)),b:Math.min(255,Math.max(e.b,0)),a:n}}var MM="[-\\+]?\\d+%?",IM="[-\\+]?\\d*\\.\\d+%?",Da="(?:".concat(IM,")|(?:").concat(MM,")"),Mf="[\\s|\\(]+(".concat(Da,")[,|\\s]+(").concat(Da,")[,|\\s]+(").concat(Da,")\\s*\\)?"),If="[\\s|\\(]+(".concat(Da,")[,|\\s]+(").concat(Da,")[,|\\s]+(").concat(Da,")[,|\\s]+(").concat(Da,")\\s*\\)?"),hr={CSS_UNIT:new RegExp(Da),rgb:new RegExp("rgb"+Mf),rgba:new RegExp("rgba"+If),hsl:new RegExp("hsl"+Mf),hsla:new RegExp("hsla"+If),hsv:new RegExp("hsv"+Mf),hsva:new RegExp("hsva"+If),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function _M(t){if(t=t.trim().toLowerCase(),t.length===0)return!1;var e=!1;if(uh[t])t=uh[t],e=!0;else if(t==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var n=hr.rgb.exec(t);return n?{r:n[1],g:n[2],b:n[3]}:(n=hr.rgba.exec(t),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=hr.hsl.exec(t),n?{h:n[1],s:n[2],l:n[3]}:(n=hr.hsla.exec(t),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=hr.hsv.exec(t),n?{h:n[1],s:n[2],v:n[3]}:(n=hr.hsva.exec(t),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=hr.hex8.exec(t),n?{r:Wn(n[1]),g:Wn(n[2]),b:Wn(n[3]),a:K1(n[4]),format:e?"name":"hex8"}:(n=hr.hex6.exec(t),n?{r:Wn(n[1]),g:Wn(n[2]),b:Wn(n[3]),format:e?"name":"hex"}:(n=hr.hex4.exec(t),n?{r:Wn(n[1]+n[1]),g:Wn(n[2]+n[2]),b:Wn(n[3]+n[3]),a:K1(n[4]+n[4]),format:e?"name":"hex8"}:(n=hr.hex3.exec(t),n?{r:Wn(n[1]+n[1]),g:Wn(n[2]+n[2]),b:Wn(n[3]+n[3]),format:e?"name":"hex"}:!1)))))))))}function Qr(t){return!!hr.CSS_UNIT.exec(String(t))}var _f=function(){function t(e,n){e===void 0&&(e=""),n===void 0&&(n={});var r;if(e instanceof t)return e;typeof e=="number"&&(e=EM(e)),this.originalInput=e;var a=ei(e);this.originalInput=e,this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a,this.roundA=Math.round(100*this.a)/100,this.format=(r=n.format)!==null&&r!==void 0?r:a.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=a.ok}return t.prototype.isDark=function(){return this.getBrightness()<128},t.prototype.isLight=function(){return!this.isDark()},t.prototype.getBrightness=function(){var e=this.toRgb();return(e.r*299+e.g*587+e.b*114)/1e3},t.prototype.getLuminance=function(){var e=this.toRgb(),n,r,a,o=e.r/255,i=e.g/255,l=e.b/255;return o<=.03928?n=o/12.92:n=Math.pow((o+.055)/1.055,2.4),i<=.03928?r=i/12.92:r=Math.pow((i+.055)/1.055,2.4),l<=.03928?a=l/12.92:a=Math.pow((l+.055)/1.055,2.4),.2126*n+.7152*r+.0722*a},t.prototype.getAlpha=function(){return this.a},t.prototype.setAlpha=function(e){return this.a=H4(e),this.roundA=Math.round(100*this.a)/100,this},t.prototype.isMonochrome=function(){var e=this.toHsl().s;return e===0},t.prototype.toHsv=function(){var e=ih(this.r,this.g,this.b);return{h:e.h*360,s:e.s,v:e.v,a:this.a}},t.prototype.toHsvString=function(){var e=ih(this.r,this.g,this.b),n=Math.round(e.h*360),r=Math.round(e.s*100),a=Math.round(e.v*100);return this.a===1?"hsv(".concat(n,", ").concat(r,"%, ").concat(a,"%)"):"hsva(".concat(n,", ").concat(r,"%, ").concat(a,"%, ").concat(this.roundA,")")},t.prototype.toHsl=function(){var e=V1(this.r,this.g,this.b);return{h:e.h*360,s:e.s,l:e.l,a:this.a}},t.prototype.toHslString=function(){var e=V1(this.r,this.g,this.b),n=Math.round(e.h*360),r=Math.round(e.s*100),a=Math.round(e.l*100);return this.a===1?"hsl(".concat(n,", ").concat(r,"%, ").concat(a,"%)"):"hsla(".concat(n,", ").concat(r,"%, ").concat(a,"%, ").concat(this.roundA,")")},t.prototype.toHex=function(e){return e===void 0&&(e=!1),lh(this.r,this.g,this.b,e)},t.prototype.toHexString=function(e){return e===void 0&&(e=!1),"#"+this.toHex(e)},t.prototype.toHex8=function(e){return e===void 0&&(e=!1),OM(this.r,this.g,this.b,this.a,e)},t.prototype.toHex8String=function(e){return e===void 0&&(e=!1),"#"+this.toHex8(e)},t.prototype.toHexShortString=function(e){return e===void 0&&(e=!1),this.a===1?this.toHexString(e):this.toHex8String(e)},t.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},t.prototype.toRgbString=function(){var e=Math.round(this.r),n=Math.round(this.g),r=Math.round(this.b);return this.a===1?"rgb(".concat(e,", ").concat(n,", ").concat(r,")"):"rgba(".concat(e,", ").concat(n,", ").concat(r,", ").concat(this.roundA,")")},t.prototype.toPercentageRgb=function(){var e=function(n){return"".concat(Math.round(bn(n,255)*100),"%")};return{r:e(this.r),g:e(this.g),b:e(this.b),a:this.a}},t.prototype.toPercentageRgbString=function(){var e=function(n){return Math.round(bn(n,255)*100)};return this.a===1?"rgb(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%)"):"rgba(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%, ").concat(this.roundA,")")},t.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var e="#"+lh(this.r,this.g,this.b,!1),n=0,r=Object.entries(uh);n=0,o=!n&&a&&(e.startsWith("hex")||e==="name");return o?e==="name"&&this.a===0?this.toName():this.toRgbString():(e==="rgb"&&(r=this.toRgbString()),e==="prgb"&&(r=this.toPercentageRgbString()),(e==="hex"||e==="hex6")&&(r=this.toHexString()),e==="hex3"&&(r=this.toHexString(!0)),e==="hex4"&&(r=this.toHex8String(!0)),e==="hex8"&&(r=this.toHex8String()),e==="name"&&(r=this.toName()),e==="hsl"&&(r=this.toHslString()),e==="hsv"&&(r=this.toHsvString()),r||this.toHexString())},t.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},t.prototype.clone=function(){return new t(this.toString())},t.prototype.lighten=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.l+=e/100,n.l=Uu(n.l),new t(n)},t.prototype.brighten=function(e){e===void 0&&(e=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(e/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(e/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(e/100)))),new t(n)},t.prototype.darken=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.l-=e/100,n.l=Uu(n.l),new t(n)},t.prototype.tint=function(e){return e===void 0&&(e=10),this.mix("white",e)},t.prototype.shade=function(e){return e===void 0&&(e=10),this.mix("black",e)},t.prototype.desaturate=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.s-=e/100,n.s=Uu(n.s),new t(n)},t.prototype.saturate=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.s+=e/100,n.s=Uu(n.s),new t(n)},t.prototype.greyscale=function(){return this.desaturate(100)},t.prototype.spin=function(e){var n=this.toHsl(),r=(n.h+e)%360;return n.h=r<0?360+r:r,new t(n)},t.prototype.mix=function(e,n){n===void 0&&(n=50);var r=this.toRgb(),a=new t(e).toRgb(),o=n/100,i={r:(a.r-r.r)*o+r.r,g:(a.g-r.g)*o+r.g,b:(a.b-r.b)*o+r.b,a:(a.a-r.a)*o+r.a};return new t(i)},t.prototype.analogous=function(e,n){e===void 0&&(e=6),n===void 0&&(n=30);var r=this.toHsl(),a=360/n,o=[this];for(r.h=(r.h-(a*e>>1)+720)%360;--e;)r.h=(r.h+a)%360,o.push(new t(r));return o},t.prototype.complement=function(){var e=this.toHsl();return e.h=(e.h+180)%360,new t(e)},t.prototype.monochromatic=function(e){e===void 0&&(e=6);for(var n=this.toHsv(),r=n.h,a=n.s,o=n.v,i=[],l=1/e;e--;)i.push(new t({h:r,s:a,v:o})),o=(o+l)%1;return i},t.prototype.splitcomplement=function(){var e=this.toHsl(),n=e.h;return[this,new t({h:(n+72)%360,s:e.s,l:e.l}),new t({h:(n+216)%360,s:e.s,l:e.l})]},t.prototype.onBackground=function(e){var n=this.toRgb(),r=new t(e).toRgb(),a=n.a+r.a*(1-n.a);return new t({r:(n.r*n.a+r.r*r.a*(1-n.a))/a,g:(n.g*n.a+r.g*r.a*(1-n.a))/a,b:(n.b*n.a+r.b*r.a*(1-n.a))/a,a})},t.prototype.triad=function(){return this.polyad(3)},t.prototype.tetrad=function(){return this.polyad(4)},t.prototype.polyad=function(e){for(var n=this.toHsl(),r=n.h,a=[this],o=360/e,i=1;i=60&&Math.round(t.h)<=240?r=n?Math.round(t.h)-Gu*e:Math.round(t.h)+Gu*e:r=n?Math.round(t.h)+Gu*e:Math.round(t.h)-Gu*e,r<0?r+=360:r>=360&&(r-=360),r}function U1(t,e,n){if(t.h===0&&t.s===0)return t.s;var r;return n?r=t.s-H1*e:e===W4?r=t.s+H1:r=t.s+NM*e,r>1&&(r=1),n&&e===z4&&r>.1&&(r=.1),r<.06&&(r=.06),Number(r.toFixed(2))}function Y1(t,e,n){var r;return n?r=t.v+$M*e:r=t.v-AM*e,r>1&&(r=1),Number(r.toFixed(2))}function nu(t){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=[],r=ei(t),a=z4;a>0;a-=1){var o=z1(r),i=qu(ei({h:W1(o,a,!0),s:U1(o,a,!0),v:Y1(o,a,!0)}));n.push(i)}n.push(qu(r));for(var l=1;l<=W4;l+=1){var u=z1(r),s=qu(ei({h:W1(u,l),s:U1(u,l),v:Y1(u,l)}));n.push(s)}return e.theme==="dark"?RM.map(function(d){var c=d.index,f=d.opacity,v=qu(DM(ei(e.backgroundColor||"#141414"),ei(n[c]),f*100));return v}):n}var vi={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},Nf={},$f={};Object.keys(vi).forEach(function(t){Nf[t]=nu(vi[t]),Nf[t].primary=Nf[t][5],$f[t]=nu(vi[t],{theme:"dark",backgroundColor:"#141414"}),$f[t].primary=$f[t][5]});var G1=[],il=[],FM="insert-css: You need to provide a CSS string. Usage: insertCss(cssString[, options]).";function LM(){var t=document.createElement("style");return t.setAttribute("type","text/css"),t}function BM(t,e){if(e=e||{},t===void 0)throw new Error(FM);var n=e.prepend===!0?"prepend":"append",r=e.container!==void 0?e.container:document.querySelector("head"),a=G1.indexOf(r);a===-1&&(a=G1.push(r)-1,il[a]={});var o;return il[a]!==void 0&&il[a][n]!==void 0?o=il[a][n]:(o=il[a][n]=LM(),n==="prepend"?r.insertBefore(o,r.childNodes[0]):r.appendChild(o)),t.charCodeAt(0)===65279&&(t=t.substr(1,t.length)),o.styleSheet?o.styleSheet.cssText+=t:o.textContent+=t,o}function q1(t){for(var e=1;e * { + line-height: 1; +} + +.anticon svg { + display: inline-block; +} + +.anticon::before { + display: none; +} + +.anticon .anticon-icon { + display: block; +} + +.anticon[tabindex] { + cursor: pointer; +} + +.anticon-spin::before, +.anticon-spin { + display: inline-block; + -webkit-animation: loadingCircle 1s infinite linear; + animation: loadingCircle 1s infinite linear; +} + +@-webkit-keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +`,Q1=!1,KM=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:VM;nt(function(){Q1||(typeof window<"u"&&window.document&&window.document.documentElement&&BM(e,{prepend:!0}),Q1=!0)})},HM=["icon","primaryColor","secondaryColor"];function zM(t,e){if(t==null)return{};var n=WM(t,e),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function WM(t,e){if(t==null)return{};var n={},r=Object.keys(t),a,o;for(o=0;o=0)&&(n[a]=t[a]);return n}function Ts(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function uI(t,e){if(t==null)return{};var n={},r=Object.keys(t),a,o;for(o=0;o=0)&&(n[a]=t[a]);return n}G4("#1890ff");var zi=function(e,n){var r,a=eb({},e,n.attrs),o=a.class,i=a.icon,l=a.spin,u=a.rotate,s=a.tabindex,d=a.twoToneColor,c=a.onClick,f=lI(a,tI),v=(r={anticon:!0},ch(r,"anticon-".concat(i.name),!!i.name),ch(r,o,o),r),g=l===""||l||i.name==="loading"?"anticon-spin":"",p=s;p===void 0&&c&&(p=-1,f.tabindex=p);var m=u?{msTransform:"rotate(".concat(u,"deg)"),transform:"rotate(".concat(u,"deg)")}:void 0,b=Y4(d),C=nI(b,2),x=C[0],w=C[1];return h("span",eb({role:"img","aria-label":i.name},f,{onClick:c,class:v}),[h(hg,{class:g,icon:i,primaryColor:x,secondaryColor:w,style:m},null)])};zi.props={spin:Boolean,rotate:Number,icon:Object,twoToneColor:String};zi.displayName="AntdIcon";zi.inheritAttrs=!1;zi.getTwoToneColor=eI;zi.setTwoToneColor=G4;const st=zi;function tb(t){for(var e=1;e=0;--Y){var K=this.tryEntries[Y],W=K.completion;if(K.tryLoc==="root")return U("end");if(K.tryLoc<=this.prev){var X=i.call(K,"catchLoc"),z=i.call(K,"finallyLoc");if(X&&z){if(this.prev=0;--U){var Y=this.tryEntries[U];if(Y.tryLoc<=this.prev&&i.call(Y,"finallyLoc")&&this.prev=0;--B){var U=this.tryEntries[B];if(U.finallyLoc===V)return this.complete(U.completion,U.afterLoc),D(U),x}},catch:function(V){for(var B=this.tryEntries.length-1;B>=0;--B){var U=this.tryEntries[B];if(U.tryLoc===V){var Y=U.completion;if(Y.type==="throw"){var K=Y.arg;D(U)}return K}}throw new Error("illegal catch attempt")},delegateYield:function(V,B,U){return this.delegate={iterator:_(V),resultName:B,nextLoc:U},this.method==="next"&&(this.arg=r),x}},a}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports})(a3);var _I=a3.exports,Es=_I(),NI=Es;try{regeneratorRuntime=Es}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=Es:Function("r","regeneratorRuntime = r")(Es)}const Bn=ma(NI);var $I={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"};const AI=$I;function lb(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:l3,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:u3,r;switch(t){case"topLeft":r={left:"0px",top:e,bottom:"auto"};break;case"topRight":r={right:"0px",top:e,bottom:"auto"};break;case"bottomLeft":r={left:"0px",top:"auto",bottom:n};break;default:r={right:"0px",top:"auto",bottom:n};break}return r}function XI(t,e){var n=t.prefixCls,r=t.placement,a=r===void 0?s3:r,o=t.getContainer,i=o===void 0?c3:o,l=t.top,u=t.bottom,s=t.closeIcon,d=s===void 0?d3:s,c=t.appContext,f=c_(),v=f.getPrefixCls,g=v("notification",n||dh),p="".concat(g,"-").concat(a,"-").concat(fh),m=mo[p];if(m){Promise.resolve(m).then(function(C){e(C)});return}var b=ce("".concat(g,"-").concat(a),A({},"".concat(g,"-rtl"),fh===!0));K4.newInstance({name:"notification",prefixCls:n||dh,class:b,style:qI(a,l,u),appContext:c,getContainer:i,closeIcon:function(x){var w=x.prefixCls,P=h("span",{class:"".concat(w,"-close-x")},[gl(d,{},h(Wr,{class:"".concat(w,"-close-icon")},null))]);return P},maxCount:f3,hasTransitionName:!0},function(C){mo[p]=C,e(C)})}var QI={success:wg,info:Pg,error:Og,warning:vd};function ZI(t){var e=t.icon,n=t.type,r=t.description,a=t.message,o=t.btn,i=t.duration===void 0?i3:t.duration;XI(t,function(l){l.notice({content:function(s){var d=s.prefixCls,c="".concat(d,"-notice"),f=null;if(e)f=function(){return h("span",{class:"".concat(c,"-icon")},[gl(e)])};else if(n){var v=QI[n];f=function(){return h(v,{class:"".concat(c,"-icon ").concat(c,"-icon-").concat(n)},null)}}return h("div",{class:f?"".concat(c,"-with-icon"):""},[f&&f(),h("div",{class:"".concat(c,"-message")},[!r&&f?h("span",{class:"".concat(c,"-message-single-line-auto-margin")},null):null,gl(a)]),h("div",{class:"".concat(c,"-description")},[gl(r)]),o?h("span",{class:"".concat(c,"-btn")},[gl(o)]):null])},duration:i,closable:!0,onClose:t.onClose,onClick:t.onClick,key:t.key,style:t.style||{},class:t.class})})}var ru={open:ZI,close:function(e){Object.keys(mo).forEach(function(n){return Promise.resolve(mo[n]).then(function(r){r.removeNotice(e)})})},config:GI,destroy:function(){Object.keys(mo).forEach(function(e){Promise.resolve(mo[e]).then(function(n){n.destroy()}),delete mo[e]})}},JI=["success","info","warning","error"];JI.forEach(function(t){ru[t]=function(e){return ru.open(y(y({},e),{},{type:t}))}});ru.warn=ru.warning;const Mg=ru;function Bo(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}var e_="vc-util-key";function v3(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=t.mark;return e?e.startsWith("data-")?e:"data-".concat(e):e_}function Ig(t){if(t.attachTo)return t.attachTo;var e=document.querySelector("head");return e||document.body}function fb(t){var e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!Bo())return null;var r=document.createElement("style");if((e=n.csp)!==null&&e!==void 0&&e.nonce){var a;r.nonce=(a=n.csp)===null||a===void 0?void 0:a.nonce}r.innerHTML=t;var o=Ig(n),i=o.firstChild;return n.prepend&&o.prepend?o.prepend(r):n.prepend&&i?o.insertBefore(r,i):o.appendChild(r),r}var vh=new Map;function t_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=Ig(e);return Array.from(vh.get(n).children).find(function(r){return r.tagName==="STYLE"&&r.getAttribute(v3(e))===t})}function n_(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=Ig(n);if(!vh.has(r)){var a=fb("",n),o=a.parentNode;vh.set(r,o),o.removeChild(a)}var i=t_(e,n);if(i){var l,u;if((l=n.csp)!==null&&l!==void 0&&l.nonce&&i.nonce!==((u=n.csp)===null||u===void 0?void 0:u.nonce)){var s;i.nonce=(s=n.csp)===null||s===void 0?void 0:s.nonce}return i.innerHTML!==t&&(i.innerHTML=t),i}var d=fb(t,n);return d.setAttribute(v3(n),e),d}const Pt=function(t,e,n){j4(t,"[ant-design-vue: ".concat(e,"] ").concat(n))};var r_="-ant-".concat(Date.now(),"-").concat(Math.random());function a_(t,e){var n={},r=function(d,c){var f=d.clone();return f=(c==null?void 0:c(f))||f,f.toRgbString()},a=function(d,c){var f=new _f(d),v=nu(f.toRgbString());n["".concat(c,"-color")]=r(f),n["".concat(c,"-color-disabled")]=v[1],n["".concat(c,"-color-hover")]=v[4],n["".concat(c,"-color-active")]=v[6],n["".concat(c,"-color-outline")]=f.clone().setAlpha(.2).toRgbString(),n["".concat(c,"-color-deprecated-bg")]=v[1],n["".concat(c,"-color-deprecated-border")]=v[3]};if(e.primaryColor){a(e.primaryColor,"primary");var o=new _f(e.primaryColor),i=nu(o.toRgbString());i.forEach(function(s,d){n["primary-".concat(d+1)]=s}),n["primary-color-deprecated-l-35"]=r(o,function(s){return s.lighten(35)}),n["primary-color-deprecated-l-20"]=r(o,function(s){return s.lighten(20)}),n["primary-color-deprecated-t-20"]=r(o,function(s){return s.tint(20)}),n["primary-color-deprecated-t-50"]=r(o,function(s){return s.tint(50)}),n["primary-color-deprecated-f-12"]=r(o,function(s){return s.setAlpha(s.getAlpha()*.12)});var l=new _f(i[0]);n["primary-color-active-deprecated-f-30"]=r(l,function(s){return s.setAlpha(s.getAlpha()*.3)}),n["primary-color-active-deprecated-d-02"]=r(l,function(s){return s.darken(2)})}e.successColor&&a(e.successColor,"success"),e.warningColor&&a(e.warningColor,"warning"),e.errorColor&&a(e.errorColor,"error"),e.infoColor&&a(e.infoColor,"info");var u=Object.keys(n).map(function(s){return"--".concat(t,"-").concat(s,": ").concat(n[s],";")});Bo()?n_(` + :root { + `.concat(u.join(` +`),` + } + `),"".concat(r_,"-dynamic-theme")):Pt(!1,"ConfigProvider","SSR do not support dynamic theme with css variables.")}var h3=Symbol("GlobalFormContextKey"),o_=function(e){at(h3,e)},i_=function(){return Ze(h3,{validateMessages:L(function(){})})},l_=function(){return{getTargetContainer:{type:Function},getPopupContainer:{type:Function},prefixCls:String,getPrefixCls:{type:Function},renderEmpty:{type:Function},transformCellText:{type:Function},csp:{type:Object,default:void 0},input:{type:Object},autoInsertSpaceInButton:{type:Boolean,default:void 0},locale:{type:Object,default:void 0},pageHeader:{type:Object},componentSize:{type:String},direction:{type:String},space:{type:Object},virtual:{type:Boolean,default:void 0},dropdownMatchSelectWidth:{type:[Number,Boolean],default:!0},form:{type:Object,default:void 0},notUpdateGlobalConfig:Boolean}},u_="ant";function hi(){return Dn.prefixCls||u_}var hh=xt({}),p3=xt({}),Dn=xt({});Je(function(){pt(Dn,hh,p3),Dn.prefixCls=hi(),Dn.getPrefixCls=function(t,e){return e||(t?"".concat(Dn.prefixCls,"-").concat(t):Dn.prefixCls)},Dn.getRootPrefixCls=function(t,e){return t||(Dn.prefixCls?Dn.prefixCls:e&&e.includes("-")?e.replace(/^(.*)-[^-]*$/,"$1"):hi())}});var Af,s_=function(e){Af&&Af(),Af=Je(function(){pt(p3,xt(e)),pt(Dn,xt(e))}),e.theme&&a_(hi(),e.theme)},c_=function(){return{getPrefixCls:function(n,r){return r||(n?"".concat(hi(),"-").concat(n):hi())},getRootPrefixCls:function(n,r){return n||(Dn.prefixCls?Dn.prefixCls:r&&r.includes("-")?r.replace(/^(.*)-[^-]*$/,"$1"):hi())}}},Il=le({compatConfig:{MODE:3},name:"AConfigProvider",inheritAttrs:!1,props:l_(),setup:function(e,n){var r=n.slots,a=function(c,f){var v=e.prefixCls,g=v===void 0?"ant":v;return f||(c?"".concat(g,"-").concat(c):g)},o=function(c){var f=e.renderEmpty||r.renderEmpty||L4;return f(c)},i=function(c,f){var v=e.prefixCls;if(f)return f;var g=v||a("");return c?"".concat(g,"-").concat(c):g},l=xt(y(y({},e),{},{getPrefixCls:i,renderEmpty:o}));Object.keys(e).forEach(function(d){Se(function(){return e[d]},function(){l[d]=e[d]})}),e.notUpdateGlobalConfig||(pt(hh,l),Se(l,function(){pt(hh,l)}));var u=L(function(){var d={};if(e.locale){var c,f;d=((c=e.locale.Form)===null||c===void 0?void 0:c.defaultValidateMessages)||((f=wr.Form)===null||f===void 0?void 0:f.defaultValidateMessages)||{}}return e.form&&e.form.validateMessages&&(d=y(y({},d),e.form.validateMessages)),d});o_({validateMessages:u}),at("configProvider",l);var s=function(c){var f;return h(V4,{locale:e.locale||c,ANT_MARK__:ah},{default:function(){return[(f=r.default)===null||f===void 0?void 0:f.call(r)]}})};return Je(function(){e.direction&&(Cg.config({rtl:e.direction==="rtl"}),Mg.config({rtl:e.direction==="rtl"}))}),function(){return h(Vi,{children:function(c,f,v){return s(v)}},null)}}}),_g=xt({getPrefixCls:function(e,n){return n||(e?"ant-".concat(e):"ant")},renderEmpty:L4,direction:"ltr"});Il.config=s_;Il.install=function(t){t.component(Il.name,Il)};const Ng=Il,Re=function(t,e){var n=Ze("configProvider",_g),r=L(function(){return n.getPrefixCls(t,e.prefixCls)}),a=L(function(){var C;return(C=e.direction)!==null&&C!==void 0?C:n.direction}),o=L(function(){return n.getPrefixCls()}),i=L(function(){return n.autoInsertSpaceInButton}),l=L(function(){return n.renderEmpty}),u=L(function(){return n.space}),s=L(function(){return n.pageHeader}),d=L(function(){return n.form}),c=L(function(){return e.getTargetContainer||n.getTargetContainer}),f=L(function(){return e.getPopupContainer||n.getPopupContainer}),v=L(function(){var C;return(C=e.dropdownMatchSelectWidth)!==null&&C!==void 0?C:n.dropdownMatchSelectWidth}),g=L(function(){return(e.virtual===void 0?n.virtual!==!1:e.virtual!==!1)&&v.value!==!1}),p=L(function(){return e.size||n.componentSize}),m=L(function(){var C;return e.autocomplete||((C=n.input)===null||C===void 0?void 0:C.autocomplete)}),b=L(function(){return n.csp});return{configProvider:n,prefixCls:r,direction:a,size:p,getTargetContainer:c,getPopupContainer:f,space:u,pageHeader:s,form:d,autoInsertSpaceInButton:i,renderEmpty:l,virtual:g,dropdownMatchSelectWidth:v,rootPrefixCls:o,getPrefixCls:n.getPrefixCls,autocomplete:m,csp:b}};function it(t,e){for(var n=pt({},t),r=0;r"u")return 0;var n=e?"scrollTop":"scrollLeft",r=0;if(ph(t)?r=t[e?"pageYOffset":"pageXOffset"]:t instanceof Document?r=t.documentElement[n]:t&&(r=t[n]),t&&!ph(t)&&typeof r!="number"){var a;r=(a=(t.ownerDocument||t).documentElement)===null||a===void 0?void 0:a[n]}return r}function h_(t,e,n,r){var a=n-e;return t/=r/2,t<1?a/2*t*t*t+e:a/2*((t-=2)*t*t+2)+e}function Ag(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=e.getContainer,r=n===void 0?function(){return window}:n,a=e.callback,o=e.duration,i=o===void 0?450:o,l=r(),u=$g(l,!0),s=Date.now(),d=function c(){var f=Date.now(),v=f-s,g=h_(v>i?i:v,u,t,i);ph(l)?l.scrollTo(window.pageXOffset,g):l instanceof HTMLDocument||l.constructor.name==="HTMLDocument"?l.documentElement.scrollTop=g:l.scrollTop=g,v0&&arguments[0]!==void 0?arguments[0]:0,k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:5,T=[],O=p.value();if(v.links.forEach(function($){var I=hb.exec($.toString());if(I){var E=document.getElementById(I[1]);if(E){var F=vb(E,O);F$.top?I:$});return N.link}return""},b=function(S){var k=e.getCurrentAnchor;g.value!==S&&(g.value=typeof k=="function"?k():S,r("change",S))},C=function(S){var k=e.offsetTop,T=e.targetOffset;b(S);var O=p.value(),N=$g(O,!0),$=hb.exec(S);if($){var I=document.getElementById($[1]);if(I){var E=vb(I,O),F=N+E;F-=T!==void 0?T:k||0,v.animating=!0,Ag(F,{callback:function(){v.animating=!1},getContainer:p.value})}}};i({scrollTo:C});var x=function(){if(!v.animating){var S=e.offsetTop,k=e.bounds,T=e.targetOffset,O=m(T!==void 0?T:S||0,k);b(O)}},w=function(){var S=f.value.getElementsByClassName("".concat(u.value,"-link-title-active"))[0];S&&(c.value.style.top="".concat(S.offsetTop+S.clientHeight/2-4.5,"px"))};return m_({registerLink:function(S){v.links.includes(S)||v.links.push(S)},unregisterLink:function(S){var k=v.links.indexOf(S);k!==-1&&v.links.splice(k,1)},activeLink:g,scrollTo:C,handleClick:function(S,k){r("click",S,k)}}),Ge(function(){nt(function(){var P=p.value();v.scrollContainer=P,v.scrollEvent=Dt(v.scrollContainer,"scroll",x),x()})}),ut(function(){v.scrollEvent&&v.scrollEvent.remove()}),wn(function(){if(v.scrollEvent){var P=p.value();v.scrollContainer!==P&&(v.scrollContainer=P,v.scrollEvent.remove(),v.scrollEvent=Dt(v.scrollContainer,"scroll",x),x())}w()}),function(){var P,S=e.offsetTop,k=e.affix,T=e.showInkInFixed,O=u.value,N=ce("".concat(O,"-ink-ball"),{visible:g.value}),$=ce(e.wrapperClass,"".concat(O,"-wrapper"),A({},"".concat(O,"-rtl"),d.value==="rtl")),I=ce(O,A({},"".concat(O,"-fixed"),!k&&!T)),E=y({maxHeight:S?"calc(100vh - ".concat(S,"px)"):"100vh"},e.wrapperStyle),F=h("div",{class:$,style:E,ref:f},[h("div",{class:I},[h("div",{class:"".concat(O,"-ink")},[h("span",{class:N,ref:c},null)]),(P=o.default)===null||P===void 0?void 0:P.call(o)])]);return k?h(g3,y(y({},a),{},{offsetTop:S,target:p.value}),{default:function(){return[F]}}):F}}});var C_=function(){return{prefixCls:String,href:String,title:G.any,target:String}};const y3=le({compatConfig:{MODE:3},name:"AAnchorLink",props:ct(C_(),{href:"#"}),slots:["title"],setup:function(e,n){var r=n.slots,a=null,o=g_(),i=o.handleClick,l=o.scrollTo,u=o.unregisterLink,s=o.registerLink,d=o.activeLink,c=Re("anchor",e),f=c.prefixCls,v=function(p){var m=e.href;i(p,{title:a,href:m}),l(m)};return Se(function(){return e.href},function(g,p){nt(function(){u(p),s(g)})}),Ge(function(){s(e.href)}),ut(function(){u(e.href)}),function(){var g,p=e.href,m=e.target,b=f.value,C=$t(r,e,"title");a=C;var x=d.value===p,w=ce("".concat(b,"-link"),A({},"".concat(b,"-link-active"),x)),P=ce("".concat(b,"-link-title"),A({},"".concat(b,"-link-title-active"),x));return h("div",{class:w},[h("a",{class:P,href:p,title:typeof C=="string"?C:"",target:m,onClick:v},[C]),(g=r.default)===null||g===void 0?void 0:g.call(r)])}}});yo.Link=y3;yo.install=function(t){return t.component(yo.name,yo),t.component(yo.Link.name,yo.Link),t};function Rg(t){return u4(t)||c4(t)||dd(t)||s4()}function pb(t,e){var n=t.key,r;return"value"in t&&(r=t.value),n??(r!==void 0?r:"rc-index-key-".concat(e))}function b3(t,e){var n=t||{},r=n.label,a=n.value,o=n.options;return{label:r||(e?"children":"label"),value:a||"value",options:o||"options"}}function x_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=e.fieldNames,r=e.childrenAsData,a=[],o=b3(n,!1),i=o.label,l=o.value,u=o.options;function s(d,c){d.forEach(function(f){var v=f[i];if(c||!(u in f)){var g=f[l];a.push({key:pb(f,a.length),groupOption:c,data:f,label:v,value:g})}else{var p=v;p===void 0&&r&&(p=f.label),a.push({key:pb(f,a.length),group:!0,data:f,label:p}),s(f[u],!0)}})}return s(t,!1),a}function gh(t){var e=y({},t);return"props"in e||Object.defineProperty(e,"props",{get:function(){return e}}),e}function w_(t,e){if(!e||!e.length)return null;var n=!1;function r(o,i){var l=Rg(i),u=l[0],s=l.slice(1);if(!u)return[o];var d=o.split(u);return n=n||d.length>1,d.reduce(function(c,f){return[].concat(Ie(c),Ie(r(f,s)))},[]).filter(function(c){return c})}var a=r(t,e);return n?a:null}function bo(t,e){return t?t.contains(e):!1}var C3=["moz","ms","webkit"];function S_(){var t=0;return function(e){var n=new Date().getTime(),r=Math.max(0,16-(n-t)),a=window.setTimeout(function(){e(n+r)},r);return t=n+r,a}}function P_(){if(typeof window>"u")return function(){};if(window.requestAnimationFrame)return window.requestAnimationFrame.bind(window);var t=C3.filter(function(e){return"".concat(e,"RequestAnimationFrame")in window})[0];return t?window["".concat(t,"RequestAnimationFrame")]:S_()}function k_(t){if(typeof window>"u")return null;if(window.cancelAnimationFrame)return window.cancelAnimationFrame(t);var e=C3.filter(function(n){return"".concat(n,"CancelAnimationFrame")in window||"".concat(n,"CancelRequestAnimationFrame")in window})[0];return e?(window["".concat(e,"CancelAnimationFrame")]||window["".concat(e,"CancelRequestAnimationFrame")]).call(this,t):clearTimeout(t)}var gb=P_(),O_=function(e){return k_(e.id)},T_=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=Date.now();function a(){Date.now()-r>=n?e.call():o.id=gb(a)}var o={id:gb(a)};return o},Dg={visible:Boolean,prefixCls:String,zIndex:Number,destroyPopupOnHide:Boolean,forceRender:Boolean,animation:[String,Object],transitionName:String,stretch:{type:String},align:{type:Object},point:{type:Object},getRootDomNode:{type:Function},getClassNameFromAlign:{type:Function},onMouseenter:{type:Function},onMouseleave:{type:Function},onMousedown:{type:Function},onTouchstart:{type:Function}},E_=y(y({},Dg),{},{mobile:{type:Object}}),M_=y(y({},Dg),{},{mask:Boolean,mobile:{type:Object},maskAnimation:String,maskTransitionName:String});function x3(t){var e=t.prefixCls,n=t.animation,r=t.transitionName;return n?{name:"".concat(e,"-").concat(n)}:r?{name:r}:{}}function w3(t){var e=t.prefixCls,n=t.visible,r=t.zIndex,a=t.mask,o=t.maskAnimation,i=t.maskTransitionName;if(!a)return null;var l={};return(i||o)&&(l=x3({prefixCls:e,transitionName:i,animation:o})),h(Nn,y({appear:!0},l),{default:function(){return[gn(h("div",{style:{zIndex:r},class:"".concat(e,"-mask")},null),[[CT("if"),n]])]}})}w3.displayName="Mask";const I_=le({compatConfig:{MODE:3},name:"MobilePopupInner",inheritAttrs:!1,props:E_,emits:["mouseenter","mouseleave","mousedown","touchstart","align"],setup:function(e,n){var r=n.expose,a=n.slots,o=Q();return r({forceAlign:function(){},getElement:function(){return o.value}}),function(){var i,l=e.zIndex,u=e.visible,s=e.prefixCls,d=e.mobile,c=d===void 0?{}:d,f=c.popupClassName,v=c.popupStyle,g=c.popupMotion,p=g===void 0?{}:g,m=c.popupRender,b=y({zIndex:l},v),C=Et((i=a.default)===null||i===void 0?void 0:i.call(a));C.length>1&&(C=h("div",{class:"".concat(s,"-content")},[C])),m&&(C=m(C));var x=ce(s,f);return h(Nn,y({ref:o},p),{default:function(){return[u?h("div",{class:x,style:b},[C]):null]}})}}});var mb=["measure","align",null,"motion"];const __=function(t,e){var n=Q(null),r=Q(),a=Q(!1);function o(u){a.value||(n.value=u)}function i(){qe.cancel(r.value)}function l(u){i(),r.value=qe(function(){var s=n.value;switch(n.value){case"align":s="motion";break;case"motion":s="stable";break}o(s),u==null||u()})}return Se(t,function(){o("measure")},{immediate:!0,flush:"post"}),Ge(function(){Se(n,function(){switch(n.value){case"measure":e();break}n.value&&(r.value=qe(Lo(Bn.mark(function u(){var s,d;return Bn.wrap(function(f){for(;;)switch(f.prev=f.next){case 0:s=mb.indexOf(n.value),d=mb[s+1],d&&s!==-1&&o(d);case 3:case"end":return f.stop()}},u)}))))},{immediate:!0,flush:"post"})}),ut(function(){a.value=!0,i()}),[n,l]},N_=function(t){var e=Q({width:0,height:0});function n(a){e.value={width:a.offsetWidth,height:a.offsetHeight}}var r=L(function(){var a={};if(t.value){var o=e.value,i=o.width,l=o.height;t.value.indexOf("height")!==-1&&l?a.height="".concat(l,"px"):t.value.indexOf("minHeight")!==-1&&l&&(a.minHeight="".concat(l,"px")),t.value.indexOf("width")!==-1&&i?a.width="".concat(i,"px"):t.value.indexOf("minWidth")!==-1&&i&&(a.minWidth="".concat(i,"px"))}return a});return[r,n]};function yb(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,r)}return n}function bb(t){for(var e=1;e=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function tN(t,e,n,r){var a=yt.clone(t),o={width:e.width,height:e.height};return r.adjustX&&a.left=n.left&&a.left+o.width>n.right&&(o.width-=a.left+o.width-n.right),r.adjustX&&a.left+o.width>n.right&&(a.left=Math.max(n.right-o.width,n.left)),r.adjustY&&a.top=n.top&&a.top+o.height>n.bottom&&(o.height-=a.top+o.height-n.bottom),r.adjustY&&a.top+o.height>n.bottom&&(a.top=Math.max(n.bottom-o.height,n.top)),yt.mix(a,o)}function jg(t){var e,n,r;if(!yt.isWindow(t)&&t.nodeType!==9)e=yt.offset(t),n=yt.outerWidth(t),r=yt.outerHeight(t);else{var a=yt.getWindow(t);e={left:yt.getWindowScrollLeft(a),top:yt.getWindowScrollTop(a)},n=yt.viewportWidth(a),r=yt.viewportHeight(a)}return e.width=n,e.height=r,e}function Tb(t,e){var n=e.charAt(0),r=e.charAt(1),a=t.width,o=t.height,i=t.left,l=t.top;return n==="c"?l+=o/2:n==="b"&&(l+=o),r==="c"?i+=a/2:r==="r"&&(i+=a),{left:i,top:l}}function Zu(t,e,n,r,a){var o=Tb(e,n[1]),i=Tb(t,n[0]),l=[i.left-o.left,i.top-o.top];return{left:Math.round(t.left-l[0]+r[0]-a[0]),top:Math.round(t.top-l[1]+r[1]-a[1])}}function Eb(t,e,n){return t.leftn.right}function Mb(t,e,n){return t.topn.bottom}function nN(t,e,n){return t.left>n.right||t.left+e.widthn.bottom||t.top+e.height=n.right||r.top>=n.bottom}function Vg(t,e,n){var r=n.target||e,a=jg(r),o=!aN(r,n.overflow&&n.overflow.alwaysByViewport);return I3(t,a,n,o)}Vg.__getOffsetParent=Ch;Vg.__getVisibleRectForElement=Bg;function oN(t,e,n){var r,a,o=yt.getDocument(t),i=o.defaultView||o.parentWindow,l=yt.getWindowScrollLeft(i),u=yt.getWindowScrollTop(i),s=yt.viewportWidth(i),d=yt.viewportHeight(i);"pageX"in e?r=e.pageX:r=l+e.clientX,"pageY"in e?a=e.pageY:a=u+e.clientY;var c={left:r,top:a,width:0,height:0},f=r>=0&&r<=l+s&&a>=0&&a<=u+d,v=[n.points[0],"cc"];return I3(t,c,bb(bb({},n),{},{points:v}),f)}function Ct(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,a=t;if(Array.isArray(t)&&(a=qt(t)[0]),!a)return null;var o=Cn(a,e,r);return o.props=n?y(y({},o.props),e):o.props,Zt(Fe(o.props.class)!=="object","class must be string"),o}function iN(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return t.map(function(r){return Ct(r,e,n)})}function _l(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(Array.isArray(t))return t.map(function(o){return _l(o,e,n,r)});var a=Ct(t,e,n,r);return Array.isArray(a.children)&&(a.children=_l(a.children)),a}const Kg=function(t){if(!t)return!1;if(t.offsetParent)return!0;if(t.getBBox){var e=t.getBBox();if(e.width||e.height)return!0}if(t.getBoundingClientRect){var n=t.getBoundingClientRect();if(n.width||n.height)return!0}return!1};function lN(t,e){return t===e?!0:!t||!e?!1:"pageX"in e&&"pageY"in e?t.pageX===e.pageX&&t.pageY===e.pageY:"clientX"in e&&"clientY"in e?t.clientX===e.clientX&&t.clientY===e.clientY:!1}function uN(t,e){t!==document.activeElement&&bo(e,t)&&typeof t.focus=="function"&&t.focus()}function Nb(t,e){var n=null,r=null;function a(i){var l=Te(i,1),u=l[0].target;if(document.documentElement.contains(u)){var s=u.getBoundingClientRect(),d=s.width,c=s.height,f=Math.floor(d),v=Math.floor(c);(n!==f||r!==v)&&Promise.resolve().then(function(){e({width:f,height:v})}),n=f,r=v}}var o=new og(a);return t&&o.observe(t),function(){o.disconnect()}}const sN=function(t,e){var n=!1,r=null;function a(){clearTimeout(r)}function o(i){if(!n||i===!0){if(t()===!1)return;n=!0,a(),r=setTimeout(function(){n=!1},e.value)}else a(),r=setTimeout(function(){n=!1,o()},e.value)}return[o,function(){n=!1,a()}]};function cN(){this.__data__=[],this.size=0}function Hg(t,e){return t===e||t!==t&&e!==e}function pd(t,e){for(var n=t.length;n--;)if(Hg(t[n][0],e))return n;return-1}var dN=Array.prototype,fN=dN.splice;function vN(t){var e=this.__data__,n=pd(e,t);if(n<0)return!1;var r=e.length-1;return n==r?e.pop():fN.call(e,n,1),--this.size,!0}function hN(t){var e=this.__data__,n=pd(e,t);return n<0?void 0:e[n][1]}function pN(t){return pd(this.__data__,t)>-1}function gN(t,e){var n=this.__data__,r=pd(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function ya(t){var e=-1,n=t==null?0:t.length;for(this.clear();++el))return!1;var s=o.get(t),d=o.get(e);if(s&&d)return s==e&&d==t;var c=-1,f=!0,v=n&c$?new Ei:void 0;for(o.set(t,e),o.set(e,t);++c-1&&t%1==0&&t-1&&t%1==0&&t<=H$}var z$="[object Arguments]",W$="[object Array]",U$="[object Boolean]",Y$="[object Date]",G$="[object Error]",q$="[object Function]",X$="[object Map]",Q$="[object Number]",Z$="[object Object]",J$="[object RegExp]",eA="[object Set]",tA="[object String]",nA="[object WeakMap]",rA="[object ArrayBuffer]",aA="[object DataView]",oA="[object Float32Array]",iA="[object Float64Array]",lA="[object Int8Array]",uA="[object Int16Array]",sA="[object Int32Array]",cA="[object Uint8Array]",dA="[object Uint8ClampedArray]",fA="[object Uint16Array]",vA="[object Uint32Array]",Kt={};Kt[oA]=Kt[iA]=Kt[lA]=Kt[uA]=Kt[sA]=Kt[cA]=Kt[dA]=Kt[fA]=Kt[vA]=!0;Kt[z$]=Kt[W$]=Kt[rA]=Kt[U$]=Kt[aA]=Kt[Y$]=Kt[G$]=Kt[q$]=Kt[X$]=Kt[Q$]=Kt[Z$]=Kt[J$]=Kt[eA]=Kt[tA]=Kt[nA]=!1;function hA(t){return xr(t)&&qg(t.length)&&!!Kt[Ya(t)]}function md(t){return function(e){return t(e)}}var F3=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Nl=F3&&typeof module=="object"&&module&&!module.nodeType&&module,pA=Nl&&Nl.exports===F3,Vf=pA&&d4.process,gA=function(){try{var t=Nl&&Nl.require&&Nl.require("util").types;return t||Vf&&Vf.binding&&Vf.binding("util")}catch{}}();const Mi=gA;var Bb=Mi&&Mi.isTypedArray,mA=Bb?md(Bb):hA;const L3=mA;var yA=Object.prototype,bA=yA.hasOwnProperty;function B3(t,e){var n=fr(t),r=!n&&Yg(t),a=!n&&!r&&mc(t),o=!n&&!r&&!a&&L3(t),i=n||r||a||o,l=i?N$(t.length,String):[],u=l.length;for(var s in t)(e||bA.call(t,s))&&!(i&&(s=="length"||a&&(s=="offset"||s=="parent")||o&&(s=="buffer"||s=="byteLength"||s=="byteOffset")||Gg(s,u)))&&l.push(s);return l}var CA=Object.prototype;function Xg(t){var e=t&&t.constructor,n=typeof e=="function"&&e.prototype||CA;return t===n}var xA=v4(Object.keys,Object);const wA=xA;var SA=Object.prototype,PA=SA.hasOwnProperty;function kA(t){if(!Xg(t))return wA(t);var e=[];for(var n in Object(t))PA.call(t,n)&&n!="constructor"&&e.push(n);return e}function Su(t){return t!=null&&qg(t.length)&&!_3(t)}function Wi(t){return Su(t)?B3(t):kA(t)}function xh(t){return $3(t,Wi,Ug)}var OA=1,TA=Object.prototype,EA=TA.hasOwnProperty;function MA(t,e,n,r,a,o){var i=n&OA,l=xh(t),u=l.length,s=xh(e),d=s.length;if(u!=d&&!i)return!1;for(var c=u;c--;){var f=l[c];if(!(i?f in e:EA.call(e,f)))return!1}var v=o.get(t),g=o.get(e);if(v&&g)return v==e&&g==t;var p=!0;o.set(t,e),o.set(e,t);for(var m=i;++c1&&(Y=h("div",{class:"".concat(F,"-content")},[Y]));var K=ce(F,a.class,u.value),W=g.value||!e.visible,X=W?Ga(T.value.name,T.value):{};return h(Nn,y(y({ref:l},X),{},{onBeforeEnter:O}),{default:function(){return!j||e.visible?gn(h(zA,{target:P(),key:"popup",ref:i,monitorWindowResize:!0,disabled:N.value,align:E,onAlign:k},{default:function(){return h("div",y(y({class:K,onMouseenter:D,onMouseleave:R,onMousedown:x1(V,["capture"])},A({},nn?"onTouchstartPassive":"onTouchstart",x1(M,["capture"]))),{},{style:U}),[Y])}}),[[Tr,g.value]]):null}})}}}),UA=le({compatConfig:{MODE:3},name:"Popup",inheritAttrs:!1,props:M_,setup:function(e,n){var r=n.attrs,a=n.slots,o=n.expose,i=Q(!1),l=Q(!1),u=Q();return Se([function(){return e.visible},function(){return e.mobile}],function(){i.value=e.visible,e.visible&&e.mobile&&(l.value=!0)},{immediate:!0,flush:"post"}),o({forceAlign:function(){var d;(d=u.value)===null||d===void 0||d.forceAlign()},getElement:function(){var d;return(d=u.value)===null||d===void 0?void 0:d.getElement()}}),function(){var s=y(y(y({},e),r),{},{visible:i.value}),d=l.value?h(I_,y(y({},s),{},{mobile:e.mobile,ref:u}),{default:a.default}):h(WA,y(y({},s),{},{ref:u}),{default:a.default});return h("div",null,[h(w3,s,null),d])}}});function YA(t,e,n){return n?t[0]===e[0]:t[0]===e[0]&&t[1]===e[1]}function Xb(t,e,n){var r=t[e]||{};return y(y({},r),n)}function GA(t,e,n,r){for(var a=n.points,o=Object.keys(t),i=0;i0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=typeof e=="function"?e(this.$data,this.$props):e;if(this.getDerivedStateFromProps){var a=this.getDerivedStateFromProps(p4(this),y(y({},this.$data),r));if(a===null)return;r=y(y({},r),a||{})}pt(this.$data,r),this._.isMounted&&this.$forceUpdate(),nt(function(){n&&n()})},__emit:function(){var e=[].slice.call(arguments,0),n=e[0];n="on".concat(n[0].toUpperCase()).concat(n.substring(1));var r=this.$props[n]||this.$attrs[n];if(e.length&&r)if(Array.isArray(r))for(var a=0,o=r.length;a1&&arguments[1]!==void 0?arguments[1]:{inTriggerContext:!0};at(K3,{inTriggerContext:n.inTriggerContext,shouldRender:L(function(){var r=e||{},a=r.sPopupVisible,o=r.popupRef,i=r.forceRender,l=r.autoDestroy,u=!1;return(a||o||i)&&(u=!0),!a&&l&&(u=!1),u})})},XA=function(){Qg({},{inTriggerContext:!1});var e=Ze(K3,{shouldRender:L(function(){return!1}),inTriggerContext:!1});return{shouldRender:L(function(){return e.shouldRender.value||e.inTriggerContext===!1})}};const kh=le({compatConfig:{MODE:3},name:"Portal",inheritAttrs:!1,props:{getContainer:G.func.isRequired,didUpdate:Function},setup:function(e,n){var r=n.slots,a=!0,o,i=XA(),l=i.shouldRender;ld(function(){a=!1,l.value&&(o=e.getContainer())});var u=Se(l,function(){l.value&&!o&&(o=e.getContainer()),o&&u()});return wn(function(){nt(function(){if(l.value){var s;(s=e.didUpdate)===null||s===void 0||s.call(e,e)}})}),ut(function(){o&&o.parentNode&&o.parentNode.removeChild(o)}),function(){if(!l.value)return null;if(a){var s;return(s=r.default)===null||s===void 0?void 0:s.call(r)}return o?h(eg,{to:o},r):null}}});function Qb(){}function QA(){return""}function ZA(t){return t?t.ownerDocument:window.document}var JA=["onClick","onMousedown","onTouchstart","onMouseenter","onMouseleave","onFocus","onBlur","onContextmenu"];const Ui=le({compatConfig:{MODE:3},name:"Trigger",mixins:[Ko],inheritAttrs:!1,props:{action:G.oneOfType([G.string,G.arrayOf(G.string)]).def([]),showAction:G.any.def([]),hideAction:G.any.def([]),getPopupClassNameFromAlign:G.any.def(QA),onPopupVisibleChange:Function,afterPopupVisibleChange:G.func.def(Qb),popup:G.any,popupStyle:{type:Object,default:void 0},prefixCls:G.string.def("rc-trigger-popup"),popupClassName:G.string.def(""),popupPlacement:String,builtinPlacements:G.object,popupTransitionName:String,popupAnimation:G.any,mouseEnterDelay:G.number.def(0),mouseLeaveDelay:G.number.def(.1),zIndex:Number,focusDelay:G.number.def(0),blurDelay:G.number.def(.15),getPopupContainer:Function,getDocument:G.func.def(ZA),forceRender:{type:Boolean,default:void 0},destroyPopupOnHide:{type:Boolean,default:!1},mask:{type:Boolean,default:!1},maskClosable:{type:Boolean,default:!0},popupAlign:G.object.def(function(){return{}}),popupVisible:{type:Boolean,default:void 0},defaultPopupVisible:{type:Boolean,default:!1},maskTransitionName:String,maskAnimation:String,stretch:String,alignPoint:{type:Boolean,default:void 0},autoDestroy:{type:Boolean,default:!1},mobile:Object,getTriggerDOMNode:Function,tryPopPortal:Boolean},setup:function(e){var n=L(function(){var u=e.popupPlacement,s=e.popupAlign,d=e.builtinPlacements;return u&&d?Xb(d,u,s):s}),r=qA(e.tryPopPortal),a=r.setPortal,o=r.popPortal,i=Q(null),l=function(s){i.value=s};return{popPortal:o,setPortal:a,vcTriggerContext:Ze("vcTriggerContext",{}),popupRef:i,setPopupRef:l,triggerRef:Q(null),align:n,focusTime:null,clickOutsideHandler:null,contextmenuOutsideHandler1:null,contextmenuOutsideHandler2:null,touchOutsideHandler:null,attachId:null,delayTimer:null,hasPopupMouseDown:!1,preClickTime:null,preTouchTime:null,mouseDownTimeout:null,childOriginEvents:{}}},data:function(){var e=this,n,r=this.$props,a;return this.popupVisible!==void 0?a=!!r.popupVisible:a=!!r.defaultPopupVisible,JA.forEach(function(o){e["fire".concat(o)]=function(i){e.fireEvents(o,i)}}),(n=this.setPortal)===null||n===void 0||n.call(this,h(kh,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},{default:this.getComponent})),{prevPopupVisible:a,sPopupVisible:a,point:null}},watch:{popupVisible:function(e){e!==void 0&&(this.prevPopupVisible=this.sPopupVisible,this.sPopupVisible=e)}},created:function(){at("vcTriggerContext",{onPopupMouseDown:this.onPopupMouseDown}),Qg(this)},deactivated:function(){this.setPopupVisible(!1)},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCal()})},updated:function(){var e=this;this.$nextTick(function(){e.updatedCal()})},beforeUnmount:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout),qe.cancel(this.attachId)},methods:{updatedCal:function(){var e=this.$props,n=this.$data;if(n.sPopupVisible){var r;!this.clickOutsideHandler&&(this.isClickToHide()||this.isContextmenuToShow())&&(r=e.getDocument(this.getRootDomNode()),this.clickOutsideHandler=Dt(r,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(r=r||e.getDocument(this.getRootDomNode()),this.touchOutsideHandler=Dt(r,"touchstart",this.onDocumentClick,nn?{passive:!1}:!1)),!this.contextmenuOutsideHandler1&&this.isContextmenuToShow()&&(r=r||e.getDocument(this.getRootDomNode()),this.contextmenuOutsideHandler1=Dt(r,"scroll",this.onContextmenuClose)),!this.contextmenuOutsideHandler2&&this.isContextmenuToShow()&&(this.contextmenuOutsideHandler2=Dt(window,"blur",this.onContextmenuClose))}else this.clearOutsideHandler()},onMouseenter:function(e){var n=this.$props.mouseEnterDelay;this.fireEvents("onMouseenter",e),this.delaySetPopupVisible(!0,n,n?null:e)},onMouseMove:function(e){this.fireEvents("onMousemove",e),this.setPoint(e)},onMouseleave:function(e){this.fireEvents("onMouseleave",e),this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onPopupMouseenter:function(){this.clearDelayTimer()},onPopupMouseleave:function(e){var n;e&&e.relatedTarget&&!e.relatedTarget.setTimeout&&bo((n=this.popupRef)===null||n===void 0?void 0:n.getElement(),e.relatedTarget)||this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onFocus:function(e){this.fireEvents("onFocus",e),this.clearDelayTimer(),this.isFocusToShow()&&(this.focusTime=Date.now(),this.delaySetPopupVisible(!0,this.$props.focusDelay))},onMousedown:function(e){this.fireEvents("onMousedown",e),this.preClickTime=Date.now()},onTouchstart:function(e){this.fireEvents("onTouchstart",e),this.preTouchTime=Date.now()},onBlur:function(e){bo(e.target,e.relatedTarget||document.activeElement)||(this.fireEvents("onBlur",e),this.clearDelayTimer(),this.isBlurToHide()&&this.delaySetPopupVisible(!1,this.$props.blurDelay))},onContextmenu:function(e){e.preventDefault(),this.fireEvents("onContextmenu",e),this.setPopupVisible(!0,e)},onContextmenuClose:function(){this.isContextmenuToShow()&&this.close()},onClick:function(e){if(this.fireEvents("onClick",e),this.focusTime){var n;if(this.preClickTime&&this.preTouchTime?n=Math.min(this.preClickTime,this.preTouchTime):this.preClickTime?n=this.preClickTime:this.preTouchTime&&(n=this.preTouchTime),Math.abs(n-this.focusTime)<20)return;this.focusTime=0}this.preClickTime=0,this.preTouchTime=0,this.isClickToShow()&&(this.isClickToHide()||this.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault(),e&&e.domEvent&&e.domEvent.preventDefault();var r=!this.$data.sPopupVisible;(this.isClickToHide()&&!r||r&&this.isClickToShow())&&this.setPopupVisible(!this.$data.sPopupVisible,e)},onPopupMouseDown:function(){var e=this,n=this.vcTriggerContext,r=n===void 0?{}:n;this.hasPopupMouseDown=!0,clearTimeout(this.mouseDownTimeout),this.mouseDownTimeout=setTimeout(function(){e.hasPopupMouseDown=!1},0),r.onPopupMouseDown&&r.onPopupMouseDown.apply(r,arguments)},onDocumentClick:function(e){if(!(this.$props.mask&&!this.$props.maskClosable)){var n=e.target,r=this.getRootDomNode(),a=this.getPopupDomNode();(!bo(r,n)||this.isContextMenuOnly())&&!bo(a,n)&&!this.hasPopupMouseDown&&this.delaySetPopupVisible(!1,.1)}},getPopupDomNode:function(){var e;return((e=this.popupRef)===null||e===void 0?void 0:e.getElement())||null},getRootDomNode:function(){var e=this.$props.getTriggerDOMNode;if(e){var n=Ra(this.triggerRef);return Ra(e(n))}try{var r=Ra(this.triggerRef);if(r)return r}catch{}return Ra(this)},handleGetPopupClassFromAlign:function(e){var n=[],r=this.$props,a=r.popupPlacement,o=r.builtinPlacements,i=r.prefixCls,l=r.alignPoint,u=r.getPopupClassNameFromAlign;return a&&o&&n.push(GA(o,i,e,l)),u&&n.push(u(e)),n.join(" ")},getPopupAlign:function(){var e=this.$props,n=e.popupPlacement,r=e.popupAlign,a=e.builtinPlacements;return n&&a?Xb(a,n,r):r},getComponent:function(){var e=this,n={};this.isMouseEnterToShow()&&(n.onMouseenter=this.onPopupMouseenter),this.isMouseLeaveToHide()&&(n.onMouseleave=this.onPopupMouseleave),n.onMousedown=this.onPopupMouseDown,n[nn?"onTouchstartPassive":"onTouchstart"]=this.onPopupMouseDown;var r=this.handleGetPopupClassFromAlign,a=this.getRootDomNode,o=this.getContainer,i=this.$attrs,l=this.$props,u=l.prefixCls,s=l.destroyPopupOnHide,d=l.popupClassName,c=l.popupAnimation,f=l.popupTransitionName,v=l.popupStyle,g=l.mask,p=l.maskAnimation,m=l.maskTransitionName,b=l.zIndex,C=l.stretch,x=l.alignPoint,w=l.mobile,P=l.forceRender,S=this.$data,k=S.sPopupVisible,T=S.point,O=y(y({prefixCls:u,destroyPopupOnHide:s,visible:k,point:x?T:null,align:this.align,animation:c,getClassNameFromAlign:r,stretch:C,getRootDomNode:a,mask:g,zIndex:b,transitionName:f,maskAnimation:p,maskTransitionName:m,getContainer:o,class:d,style:v,onAlign:i.onPopupAlign||Qb},n),{},{ref:this.setPopupRef,mobile:w,forceRender:P});return h(UA,O,{default:this.$slots.popup||function(){return cg(e,"popup")}})},attachParent:function(e){var n=this;qe.cancel(this.attachId);var r=this.$props,a=r.getPopupContainer,o=r.getDocument,i=this.getRootDomNode(),l;a?(i||a.length===0)&&(l=a(i)):l=o(this.getRootDomNode()).body,l?l.appendChild(e):this.attachId=qe(function(){n.attachParent(e)})},getContainer:function(){var e=this.$props,n=e.getDocument,r=n(this.getRootDomNode()).createElement("div");return r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="100%",this.attachParent(r),r},setPopupVisible:function(e,n){var r=this.alignPoint,a=this.sPopupVisible,o=this.onPopupVisibleChange;this.clearDelayTimer(),a!==e&&(la(this,"popupVisible")||this.setState({sPopupVisible:e,prevPopupVisible:a}),o&&o(e)),r&&n&&e&&this.setPoint(n)},setPoint:function(e){var n=this.$props.alignPoint;!n||!e||this.setState({point:{pageX:e.pageX,pageY:e.pageY}})},handlePortalUpdate:function(){this.prevPopupVisible!==this.sPopupVisible&&this.afterPopupVisibleChange(this.sPopupVisible)},delaySetPopupVisible:function(e,n,r){var a=this,o=n*1e3;if(this.clearDelayTimer(),o){var i=r?{pageX:r.pageX,pageY:r.pageY}:null;this.delayTimer=T_(function(){a.setPopupVisible(e,i),a.clearDelayTimer()},o)}else this.setPopupVisible(e,r)},clearDelayTimer:function(){this.delayTimer&&(O_(this.delayTimer),this.delayTimer=null)},clearOutsideHandler:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextmenuOutsideHandler1&&(this.contextmenuOutsideHandler1.remove(),this.contextmenuOutsideHandler1=null),this.contextmenuOutsideHandler2&&(this.contextmenuOutsideHandler2.remove(),this.contextmenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)},createTwoChains:function(e){var n=function(){},r=T1(this);return this.childOriginEvents[e]&&r[e]?this["fire".concat(e)]:(n=this.childOriginEvents[e]||r[e]||n,n)},isClickToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("click")!==-1||r.indexOf("click")!==-1},isContextMenuOnly:function(){var e=this.$props.action;return e==="contextmenu"||e.length===1&&e[0]==="contextmenu"},isContextmenuToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("contextmenu")!==-1||r.indexOf("contextmenu")!==-1},isClickToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("click")!==-1||r.indexOf("click")!==-1},isMouseEnterToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("hover")!==-1||r.indexOf("mouseenter")!==-1},isMouseLeaveToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("hover")!==-1||r.indexOf("mouseleave")!==-1},isFocusToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("focus")!==-1||r.indexOf("focus")!==-1},isBlurToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("focus")!==-1||r.indexOf("blur")!==-1},forcePopupAlign:function(){if(this.$data.sPopupVisible){var e;(e=this.popupRef)===null||e===void 0||e.forceAlign()}},fireEvents:function(e,n){this.childOriginEvents[e]&&this.childOriginEvents[e](n);var r=this.$props[e]||this.$attrs[e];r&&r(n)},close:function(){this.setPopupVisible(!1)}},render:function(){var e=this,n=this.$attrs,r=qt(yu(this)),a=this.$props.alignPoint,o=r[0];this.childOriginEvents=T1(o);var i={key:"trigger"};this.isContextmenuToShow()?i.onContextmenu=this.onContextmenu:i.onContextmenu=this.createTwoChains("onContextmenu"),this.isClickToHide()||this.isClickToShow()?(i.onClick=this.onClick,i.onMousedown=this.onMousedown,i[nn?"onTouchstartPassive":"onTouchstart"]=this.onTouchstart):(i.onClick=this.createTwoChains("onClick"),i.onMousedown=this.createTwoChains("onMousedown"),i[nn?"onTouchstartPassive":"onTouchstart"]=this.createTwoChains("onTouchstart")),this.isMouseEnterToShow()?(i.onMouseenter=this.onMouseenter,a&&(i.onMousemove=this.onMouseMove)):i.onMouseenter=this.createTwoChains("onMouseenter"),this.isMouseLeaveToHide()?i.onMouseleave=this.onMouseleave:i.onMouseleave=this.createTwoChains("onMouseleave"),this.isFocusToShow()||this.isBlurToHide()?(i.onFocus=this.onFocus,i.onBlur=this.onBlur):(i.onFocus=this.createTwoChains("onFocus"),i.onBlur=function(d){d&&(!d.relatedTarget||!bo(d.target,d.relatedTarget))&&e.createTwoChains("onBlur")(d)});var l=ce(o&&o.props&&o.props.class,n.class);l&&(i.class=l);var u=Ct(o,y(y({},i),{},{ref:"triggerRef"}),!0,!0);if(this.popPortal)return u;var s=h(kh,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},{default:this.getComponent});return h(et,null,[s,u])}});var e9=["empty"],t9=function(e){var n=e===!0?0:1;return{bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:n,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:n,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:n,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:n,adjustY:1}}}},n9=le({name:"SelectTrigger",inheritAttrs:!1,props:{dropdownAlign:Object,visible:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},dropdownClassName:String,dropdownStyle:G.object,placement:String,empty:{type:Boolean,default:void 0},prefixCls:String,popupClassName:String,animation:String,transitionName:String,getPopupContainer:Function,dropdownRender:Function,containerWidth:Number,dropdownMatchSelectWidth:G.oneOfType([Number,Boolean]).def(!0),popupElement:G.any,direction:String,getTriggerDOMNode:Function,onPopupVisibleChange:Function,onPopupMouseEnter:Function},setup:function(e,n){var r=n.slots,a=n.attrs,o=n.expose,i=L(function(){var u=e.dropdownMatchSelectWidth;return t9(u)}),l=Q();return o({getPopupElement:function(){return l.value}}),function(){var u=y(y({},e),a),s=u.empty,d=s===void 0?!1:s,c=He(u,e9),f=c.visible,v=c.dropdownAlign,g=c.prefixCls,p=c.popupElement,m=c.dropdownClassName,b=c.dropdownStyle,C=c.direction,x=C===void 0?"ltr":C,w=c.placement,P=c.dropdownMatchSelectWidth,S=c.containerWidth,k=c.dropdownRender,T=c.animation,O=c.transitionName,N=c.getPopupContainer,$=c.getTriggerDOMNode,I=c.onPopupVisibleChange,E=c.onPopupMouseEnter,F="".concat(g,"-dropdown"),j=p;k&&(j=k({menuNode:p,props:e}));var D=T?"".concat(F,"-").concat(T):O,R=y({minWidth:"".concat(S,"px")},b);return typeof P=="number"?R.width="".concat(P,"px"):P&&(R.width="".concat(S,"px")),h(Ui,y(y({},e),{},{showAction:I?["click"]:[],hideAction:I?["click"]:[],popupPlacement:w||(x==="rtl"?"bottomRight":"bottomLeft"),builtinPlacements:i.value,prefixCls:F,popupTransitionName:D,popupAlign:v,popupVisible:f,getPopupContainer:N,popupClassName:ce(m,A({},"".concat(F,"-empty"),d)),popupStyle:R,getTriggerDOMNode:$,onPopupVisibleChange:I}),{default:r.default,popup:function(){return h("div",{ref:l,onMouseenter:E},[j])}})}}});const r9=n9;var ht={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(e){var n=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||n>=ht.F1&&n<=ht.F12)return!1;switch(n){case ht.ALT:case ht.CAPS_LOCK:case ht.CONTEXT_MENU:case ht.CTRL:case ht.DOWN:case ht.END:case ht.ESC:case ht.HOME:case ht.INSERT:case ht.LEFT:case ht.MAC_FF_META:case ht.META:case ht.NUMLOCK:case ht.NUM_CENTER:case ht.PAGE_DOWN:case ht.PAGE_UP:case ht.PAUSE:case ht.PRINT_SCREEN:case ht.RIGHT:case ht.SHIFT:case ht.UP:case ht.WIN_KEY:case ht.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=ht.ZERO&&e<=ht.NINE||e>=ht.NUM_ZERO&&e<=ht.NUM_MULTIPLY||e>=ht.A&&e<=ht.Z||window.navigator.userAgent.indexOf("WebKit")!==-1&&e===0)return!0;switch(e){case ht.SPACE:case ht.QUESTION_MARK:case ht.NUM_PLUS:case ht.NUM_MINUS:case ht.NUM_PERIOD:case ht.NUM_DIVISION:case ht.SEMICOLON:case ht.DASH:case ht.EQUALS:case ht.COMMA:case ht.PERIOD:case ht.SLASH:case ht.APOSTROPHE:case ht.SINGLE_QUOTE:case ht.OPEN_SQUARE_BRACKET:case ht.BACKSLASH:case ht.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};const Ee=ht;var Cd=function(e,n){var r,a=n.slots,o=e.class,i=e.customizeIcon,l=e.customizeIconProps,u=e.onMousedown,s=e.onClick,d;return typeof i=="function"?d=i(l):d=i,h("span",{class:o,onMousedown:function(f){f.preventDefault(),u&&u(f)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:s,"aria-hidden":!0},[d!==void 0?d:h("span",{class:o.split(/\s+/).map(function(c){return"".concat(c,"-icon")})},[(r=a.default)===null||r===void 0?void 0:r.call(a)])])};Cd.inheritAttrs=!1;Cd.displayName="TransBtn";Cd.props={class:String,customizeIcon:G.any,customizeIconProps:G.any,onMousedown:Function,onClick:Function};const yc=Cd;function a9(t){t.target.composing=!0}function Zb(t){t.target.composing&&(t.target.composing=!1,o9(t.target,"input"))}function o9(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Kf(t,e,n,r){t.addEventListener(e,n,r)}var i9={created:function(e,n){(!n.modifiers||!n.modifiers.lazy)&&(Kf(e,"compositionstart",a9),Kf(e,"compositionend",Zb),Kf(e,"change",Zb))}};const Yi=i9;var l9={inputRef:G.any,prefixCls:String,id:String,inputElement:G.VueNode,disabled:{type:Boolean,default:void 0},autofocus:{type:Boolean,default:void 0},autocomplete:String,editable:{type:Boolean,default:void 0},activeDescendantId:String,value:String,open:{type:Boolean,default:void 0},tabindex:G.oneOfType([G.number,G.string]),attrs:G.object,onKeydown:{type:Function},onMousedown:{type:Function},onChange:{type:Function},onPaste:{type:Function},onCompositionstart:{type:Function},onCompositionend:{type:Function},onFocus:{type:Function},onBlur:{type:Function}},u9=le({compatConfig:{MODE:3},name:"Input",inheritAttrs:!1,props:l9,setup:function(e){var n=null,r=Ze("VCSelectContainerEvent");return function(){var a,o,i=e.prefixCls,l=e.id,u=e.inputElement,s=e.disabled,d=e.tabindex,c=e.autofocus,f=e.autocomplete,v=e.editable,g=e.activeDescendantId,p=e.value,m=e.onKeydown,b=e.onMousedown,C=e.onChange,x=e.onPaste,w=e.onCompositionstart,P=e.onCompositionend,S=e.onFocus,k=e.onBlur,T=e.open,O=e.inputRef,N=e.attrs,$=u||gn(h("input",null,null),[[Yi]]),I=$.props||{},E=I.onKeydown,F=I.onInput,j=I.onFocus,D=I.onBlur,R=I.onMousedown,_=I.onCompositionstart,M=I.onCompositionend,V=I.style;return $=Ct($,pt(y(y(y({type:"search"},I),{},{id:l,ref:O,disabled:s,tabindex:d,autocomplete:f||"off",autofocus:c,class:ce("".concat(i,"-selection-search-input"),(a=$)===null||a===void 0||(o=a.props)===null||o===void 0?void 0:o.class),role:"combobox","aria-expanded":T,"aria-haspopup":"listbox","aria-owns":"".concat(l,"_list"),"aria-autocomplete":"list","aria-controls":"".concat(l,"_list"),"aria-activedescendant":g},N),{},{value:v?p:"",readonly:!v,unselectable:v?null:"on",style:y(y({},V),{},{opacity:v?null:0}),onKeydown:function(U){m(U),E&&E(U)},onMousedown:function(U){b(U),R&&R(U)},onInput:function(U){C(U),F&&F(U)},onCompositionstart:function(U){w(U),_&&_(U)},onCompositionend:function(U){P(U),M&&M(U)},onPaste:x,onFocus:function(){clearTimeout(n),j&&j(arguments.length<=0?void 0:arguments[0]),S&&S(arguments.length<=0?void 0:arguments[0]),r==null||r.focus(arguments.length<=0?void 0:arguments[0])},onBlur:function(){for(var U=arguments.length,Y=new Array(U),K=0;K